1*4882a593Smuzhiyun 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 1998-2003 by The XFree86 Project, Inc. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Permission is hereby granted, free of charge, to any person obtaining a 6*4882a593Smuzhiyun * copy of this software and associated documentation files (the "Software"), 7*4882a593Smuzhiyun * to deal in the Software without restriction, including without limitation 8*4882a593Smuzhiyun * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9*4882a593Smuzhiyun * and/or sell copies of the Software, and to permit persons to whom the 10*4882a593Smuzhiyun * Software is furnished to do so, subject to the following conditions: 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * The above copyright notice and this permission notice shall be included in 13*4882a593Smuzhiyun * all copies or substantial portions of the Software. 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*4882a593Smuzhiyun * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18*4882a593Smuzhiyun * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 19*4882a593Smuzhiyun * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 20*4882a593Smuzhiyun * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 21*4882a593Smuzhiyun * OTHER DEALINGS IN THE SOFTWARE. 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * Except as contained in this notice, the name of the copyright holder(s) 24*4882a593Smuzhiyun * and author(s) shall not be used in advertising or otherwise to promote 25*4882a593Smuzhiyun * the sale, use or other dealings in this Software without prior written 26*4882a593Smuzhiyun * authorization from the copyright holder(s) and author(s). 27*4882a593Smuzhiyun */ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* Option handling things that ModuleSetup procs can use */ 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #ifndef _XF86_OPT_H_ 32*4882a593Smuzhiyun #define _XF86_OPT_H_ 33*4882a593Smuzhiyun #include "xf86Optionstr.h" 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun typedef struct { 36*4882a593Smuzhiyun double freq; 37*4882a593Smuzhiyun int units; 38*4882a593Smuzhiyun } OptFrequency; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun typedef union { 41*4882a593Smuzhiyun unsigned long num; 42*4882a593Smuzhiyun const char *str; 43*4882a593Smuzhiyun double realnum; 44*4882a593Smuzhiyun Bool bool; 45*4882a593Smuzhiyun OptFrequency freq; 46*4882a593Smuzhiyun } ValueUnion; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun typedef enum { 49*4882a593Smuzhiyun OPTV_NONE = 0, 50*4882a593Smuzhiyun OPTV_INTEGER, 51*4882a593Smuzhiyun OPTV_STRING, /* a non-empty string */ 52*4882a593Smuzhiyun OPTV_ANYSTR, /* Any string, including an empty one */ 53*4882a593Smuzhiyun OPTV_REAL, 54*4882a593Smuzhiyun OPTV_BOOLEAN, 55*4882a593Smuzhiyun OPTV_PERCENT, 56*4882a593Smuzhiyun OPTV_FREQ 57*4882a593Smuzhiyun } OptionValueType; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun typedef enum { 60*4882a593Smuzhiyun OPTUNITS_HZ = 1, 61*4882a593Smuzhiyun OPTUNITS_KHZ, 62*4882a593Smuzhiyun OPTUNITS_MHZ 63*4882a593Smuzhiyun } OptFreqUnits; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun typedef struct { 66*4882a593Smuzhiyun int token; 67*4882a593Smuzhiyun const char *name; 68*4882a593Smuzhiyun OptionValueType type; 69*4882a593Smuzhiyun ValueUnion value; 70*4882a593Smuzhiyun Bool found; 71*4882a593Smuzhiyun } OptionInfoRec, *OptionInfoPtr; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun extern _X_EXPORT int xf86SetIntOption(XF86OptionPtr optlist, const char *name, 74*4882a593Smuzhiyun int deflt); 75*4882a593Smuzhiyun extern _X_EXPORT double xf86SetRealOption(XF86OptionPtr optlist, 76*4882a593Smuzhiyun const char *name, double deflt); 77*4882a593Smuzhiyun extern _X_EXPORT char *xf86SetStrOption(XF86OptionPtr optlist, const char *name, 78*4882a593Smuzhiyun const char *deflt); 79*4882a593Smuzhiyun extern _X_EXPORT int xf86SetBoolOption(XF86OptionPtr list, const char *name, 80*4882a593Smuzhiyun int deflt); 81*4882a593Smuzhiyun extern _X_EXPORT double xf86SetPercentOption(XF86OptionPtr list, 82*4882a593Smuzhiyun const char *name, double deflt); 83*4882a593Smuzhiyun extern _X_EXPORT int xf86CheckIntOption(XF86OptionPtr optlist, const char *name, 84*4882a593Smuzhiyun int deflt); 85*4882a593Smuzhiyun extern _X_EXPORT double xf86CheckRealOption(XF86OptionPtr optlist, 86*4882a593Smuzhiyun const char *name, double deflt); 87*4882a593Smuzhiyun extern _X_EXPORT char *xf86CheckStrOption(XF86OptionPtr optlist, 88*4882a593Smuzhiyun const char *name, const char *deflt); 89*4882a593Smuzhiyun extern _X_EXPORT int xf86CheckBoolOption(XF86OptionPtr list, const char *name, 90*4882a593Smuzhiyun int deflt); 91*4882a593Smuzhiyun extern _X_EXPORT double xf86CheckPercentOption(XF86OptionPtr list, 92*4882a593Smuzhiyun const char *name, double deflt); 93*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86AddNewOption(XF86OptionPtr head, 94*4882a593Smuzhiyun const char *name, 95*4882a593Smuzhiyun const char *val); 96*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86NewOption(char *name, char *value); 97*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86NextOption(XF86OptionPtr list); 98*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86OptionListCreate(const char **options, 99*4882a593Smuzhiyun int count, int used); 100*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86OptionListMerge(XF86OptionPtr head, 101*4882a593Smuzhiyun XF86OptionPtr tail); 102*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86OptionListDuplicate(XF86OptionPtr list); 103*4882a593Smuzhiyun extern _X_EXPORT void xf86OptionListFree(XF86OptionPtr opt); 104*4882a593Smuzhiyun extern _X_EXPORT char *xf86OptionName(XF86OptionPtr opt); 105*4882a593Smuzhiyun extern _X_EXPORT char *xf86OptionValue(XF86OptionPtr opt); 106*4882a593Smuzhiyun extern _X_EXPORT void xf86OptionListReport(XF86OptionPtr parm); 107*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86FindOption(XF86OptionPtr options, 108*4882a593Smuzhiyun const char *name); 109*4882a593Smuzhiyun extern _X_EXPORT const char *xf86FindOptionValue(XF86OptionPtr options, 110*4882a593Smuzhiyun const char *name); 111*4882a593Smuzhiyun extern _X_EXPORT void xf86MarkOptionUsed(XF86OptionPtr option); 112*4882a593Smuzhiyun extern _X_EXPORT void xf86MarkOptionUsedByName(XF86OptionPtr options, 113*4882a593Smuzhiyun const char *name); 114*4882a593Smuzhiyun extern _X_EXPORT Bool xf86CheckIfOptionUsed(XF86OptionPtr option); 115*4882a593Smuzhiyun extern _X_EXPORT Bool xf86CheckIfOptionUsedByName(XF86OptionPtr options, 116*4882a593Smuzhiyun const char *name); 117*4882a593Smuzhiyun extern _X_EXPORT void xf86ShowUnusedOptions(int scrnIndex, 118*4882a593Smuzhiyun XF86OptionPtr options); 119*4882a593Smuzhiyun extern _X_EXPORT void xf86ProcessOptions(int scrnIndex, XF86OptionPtr options, 120*4882a593Smuzhiyun OptionInfoPtr optinfo); 121*4882a593Smuzhiyun extern _X_EXPORT OptionInfoPtr xf86TokenToOptinfo(const OptionInfoRec * table, 122*4882a593Smuzhiyun int token); 123*4882a593Smuzhiyun extern _X_EXPORT const char *xf86TokenToOptName(const OptionInfoRec * table, 124*4882a593Smuzhiyun int token); 125*4882a593Smuzhiyun extern _X_EXPORT Bool xf86IsOptionSet(const OptionInfoRec * table, int token); 126*4882a593Smuzhiyun extern _X_EXPORT const char *xf86GetOptValString(const OptionInfoRec * table, 127*4882a593Smuzhiyun int token); 128*4882a593Smuzhiyun extern _X_EXPORT Bool xf86GetOptValInteger(const OptionInfoRec * table, 129*4882a593Smuzhiyun int token, int *value); 130*4882a593Smuzhiyun extern _X_EXPORT Bool xf86GetOptValULong(const OptionInfoRec * table, int token, 131*4882a593Smuzhiyun unsigned long *value); 132*4882a593Smuzhiyun extern _X_EXPORT Bool xf86GetOptValReal(const OptionInfoRec * table, int token, 133*4882a593Smuzhiyun double *value); 134*4882a593Smuzhiyun extern _X_EXPORT Bool xf86GetOptValFreq(const OptionInfoRec * table, int token, 135*4882a593Smuzhiyun OptFreqUnits expectedUnits, 136*4882a593Smuzhiyun double *value); 137*4882a593Smuzhiyun extern _X_EXPORT Bool xf86GetOptValBool(const OptionInfoRec * table, int token, 138*4882a593Smuzhiyun Bool *value); 139*4882a593Smuzhiyun extern _X_EXPORT Bool xf86ReturnOptValBool(const OptionInfoRec * table, 140*4882a593Smuzhiyun int token, Bool def); 141*4882a593Smuzhiyun extern _X_EXPORT int xf86NameCmp(const char *s1, const char *s2); 142*4882a593Smuzhiyun extern _X_EXPORT char *xf86NormalizeName(const char *s); 143*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86ReplaceIntOption(XF86OptionPtr optlist, 144*4882a593Smuzhiyun const char *name, 145*4882a593Smuzhiyun const int val); 146*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86ReplaceRealOption(XF86OptionPtr optlist, 147*4882a593Smuzhiyun const char *name, 148*4882a593Smuzhiyun const double val); 149*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86ReplaceBoolOption(XF86OptionPtr optlist, 150*4882a593Smuzhiyun const char *name, 151*4882a593Smuzhiyun const Bool val); 152*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86ReplacePercentOption(XF86OptionPtr optlist, 153*4882a593Smuzhiyun const char *name, 154*4882a593Smuzhiyun const double val); 155*4882a593Smuzhiyun extern _X_EXPORT XF86OptionPtr xf86ReplaceStrOption(XF86OptionPtr optlist, 156*4882a593Smuzhiyun const char *name, 157*4882a593Smuzhiyun const char *val); 158*4882a593Smuzhiyun #endif 159