XF86ConfVideoPortPtr xf86parseVideoPortSubSection (const char *name) { int has_ident = FALSE; int token; parsePrologue (XF86ConfVideoPortPtr, XF86ConfVideoPortRec) ptr->vp_identifier = xf86configStrdup(name); while ((token = xf86getToken (VideoPortTab)) != ENDSUBSECTION) { switch (token) { case COMMENT: ptr->vp_comment = xf86addComment(ptr->vp_comment, val.str); break; case IDENTIFIER: if (xf86getSubToken (&(ptr->vp_comment)) != STRING) Error (QUOTE_MSG, "Identifier"); if (has_ident == TRUE) Error (MULTIPLE_MSG, "Identifier"); TestFree(ptr->vp_identifier); ptr->vp_identifier = xf86configStrdup(val.str); has_ident = TRUE; break; case OPTION: ptr->vp_option_lst = xf86parseOption(ptr->vp_option_lst); break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: Error (INVALID_KEYWORD_MSG, xf86tokenString ()); break; } } #ifdef DEBUG printf ("VideoPort subsection parsed\n"); #endif return ptr; }
XF86ConfModesPtr xf86parseModesSection (void) { int has_ident = FALSE; int token; parsePrologue (XF86ConfModesPtr, XF86ConfModesRec) while ((token = xf86getToken (ModesTab)) != ENDSECTION) { switch (token) { case COMMENT: ptr->modes_comment = xf86addComment(ptr->modes_comment, val.str); break; case IDENTIFIER: if (xf86getSubToken (&(ptr->modes_comment)) != STRING) Error (QUOTE_MSG, "Identifier"); if (has_ident == TRUE) Error (MULTIPLE_MSG, "Identifier"); ptr->modes_identifier = xf86configStrdup(val.str); has_ident = TRUE; break; case MODE: HANDLE_LIST (mon_modeline_lst, xf86parseVerboseMode, XF86ConfModeLinePtr); break; case MODELINE: HANDLE_LIST (mon_modeline_lst, xf86parseModeLine, XF86ConfModeLinePtr); break; case OPTION: ptr->modes_option_lst = xf86parseOption(ptr->modes_option_lst); break; default: xf86parseError (INVALID_KEYWORD_MSG, xf86tokenString ()); CLEANUP (ptr); return NULL; } } if (!has_ident) Error (NO_IDENT_MSG, NULL); #ifdef DEBUG printf ("Modes section parsed\n"); #endif return ptr; }
XF86ConfInputPtr xf86parsePointerSection (void) { char *s, *s1, *s2; int l; int token; parsePrologue (XF86ConfInputPtr, XF86ConfInputRec) while ((token = xf86getToken (PointerTab)) != ENDSECTION) { switch (token) { case COMMENT: ptr->inp_comment = xf86addComment(ptr->inp_comment, val.str); break; case PROTOCOL: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "Protocol"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("Protocol"), val.str); break; case PDEVICE: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "Device"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("Device"), val.str); break; case EMULATE3: ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("Emulate3Buttons"), NULL); break; case EM3TIMEOUT: if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER || val.num < 0) Error (POSITIVE_INT_MSG, "Emulate3Timeout"); s = xf86uLongToString(val.num); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("Emulate3Timeout"), s); break; case CHORDMIDDLE: ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("ChordMiddle"), NULL); break; case PBUTTONS: if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER || val.num < 0) Error (POSITIVE_INT_MSG, "Buttons"); s = xf86uLongToString(val.num); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("Buttons"), s); break; case BAUDRATE: if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER || val.num < 0) Error (POSITIVE_INT_MSG, "BaudRate"); s = xf86uLongToString(val.num); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("BaudRate"), s); break; case SAMPLERATE: if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER || val.num < 0) Error (POSITIVE_INT_MSG, "SampleRate"); s = xf86uLongToString(val.num); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("SampleRate"), s); break; case PRESOLUTION: if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER || val.num < 0) Error (POSITIVE_INT_MSG, "Resolution"); s = xf86uLongToString(val.num); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("Resolution"), s); break; case CLEARDTR: ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("ClearDTR"), NULL); break; case CLEARRTS: ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("ClearRTS"), NULL); break; case ZAXISMAPPING: switch (xf86getToken(ZMapTab)) { case NUMBER: if (val.num < 0) Error (ZAXISMAPPING_MSG, NULL); s1 = xf86uLongToString(val.num); if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER || val.num < 0) { xf86conffree(s1); Error (ZAXISMAPPING_MSG, NULL); } s2 = xf86uLongToString(val.num); l = strlen(s1) + 1 + strlen(s2) + 1; s = xf86confmalloc(l); sprintf(s, "%s %s", s1, s2); xf86conffree(s1); xf86conffree(s2); break; case XAXIS: s = xf86configStrdup("x"); break; case YAXIS: s = xf86configStrdup("y"); break; default: Error (ZAXISMAPPING_MSG, NULL); break; } ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("ZAxisMapping"), s); break; case ALWAYSCORE: break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: Error (INVALID_KEYWORD_MSG, xf86tokenString ()); break; } } ptr->inp_identifier = xf86configStrdup(CONF_IMPLICIT_POINTER); ptr->inp_driver = xf86configStrdup("mouse"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("CorePointer"), NULL); #ifdef DEBUG printf ("Pointer section parsed\n"); #endif return ptr; }
XF86ConfInputPtr xf86parseKeyboardSection (void) { char *s, *s1, *s2; int l; int token, ntoken; parsePrologue (XF86ConfInputPtr, XF86ConfInputRec) while ((token = xf86getToken (KeyboardTab)) != ENDSECTION) { switch (token) { case COMMENT: ptr->inp_comment = xf86addComment(ptr->inp_comment, val.str); break; case KPROTOCOL: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "Protocol"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("Protocol"), val.str); break; case AUTOREPEAT: if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER) Error (AUTOREPEAT_MSG, NULL); s1 = xf86uLongToString(val.num); if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER) Error (AUTOREPEAT_MSG, NULL); s2 = xf86uLongToString(val.num); l = strlen(s1) + 1 + strlen(s2) + 1; s = xf86confmalloc(l); sprintf(s, "%s %s", s1, s2); xf86conffree(s1); xf86conffree(s2); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("AutoRepeat"), s); break; case XLEDS: if (xf86getSubToken (&(ptr->inp_comment)) != NUMBER) Error (XLEDS_MSG, NULL); s = xf86uLongToString(val.num); l = strlen(s) + 1; while ((token = xf86getSubToken (&(ptr->inp_comment))) == NUMBER) { s1 = xf86uLongToString(val.num); l += (1 + strlen(s1)); s = xf86confrealloc(s, l); strcat(s, " "); strcat(s, s1); xf86conffree(s1); } xf86unGetToken (token); break; case SERVERNUM: xf86parseWarning(OBSOLETE_MSG, xf86tokenString()); break; case LEFTALT: case RIGHTALT: case SCROLLLOCK_TOK: case RIGHTCTL: xf86parseWarning(OBSOLETE_MSG, xf86tokenString()); break; ntoken = xf86getToken (KeyMapTab); switch (ntoken) { case EOF_TOKEN: xf86parseError (UNEXPECTED_EOF_MSG); CLEANUP (ptr); return (NULL); break; default: Error (INVALID_KEYWORD_MSG, xf86tokenString ()); break; } break; case VTINIT: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "VTInit"); xf86parseWarning(MOVED_TO_FLAGS_MSG, "VTInit"); break; case VTSYSREQ: xf86parseWarning(MOVED_TO_FLAGS_MSG, "VTSysReq"); break; case XKBDISABLE: ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbDisable"), NULL); break; case XKBKEYMAP: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBKeymap"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbKeymap"), val.str); break; case XKBCOMPAT: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBCompat"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbCompat"), val.str); break; case XKBTYPES: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBTypes"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbTypes"), val.str); break; case XKBKEYCODES: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBKeycodes"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbKeycodes"), val.str); break; case XKBGEOMETRY: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBGeometry"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbGeometry"), val.str); break; case XKBSYMBOLS: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBSymbols"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbSymbols"), val.str); break; case XKBRULES: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBRules"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbRules"), val.str); break; case XKBMODEL: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBModel"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbModel"), val.str); break; case XKBLAYOUT: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBLayout"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbLayout"), val.str); break; case XKBVARIANT: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBVariant"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbVariant"), val.str); break; case XKBOPTIONS: if (xf86getSubToken (&(ptr->inp_comment)) != STRING) Error (QUOTE_MSG, "XKBOptions"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("XkbOptions"), val.str); break; case PANIX106: ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("Panix106"), NULL); break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: Error (INVALID_KEYWORD_MSG, xf86tokenString ()); break; } } ptr->inp_identifier = xf86configStrdup(CONF_IMPLICIT_KEYBOARD); ptr->inp_driver = xf86configStrdup("keyboard"); ptr->inp_option_lst = xf86addNewOption(ptr->inp_option_lst, xf86configStrdup("CoreKeyboard"), NULL); #ifdef DEBUG printf ("Keyboard section parsed\n"); #endif return ptr; }
XF86ConfVideoAdaptorPtr xf86parseVideoAdaptorSection (void) { int has_ident = FALSE; int token; parsePrologue (XF86ConfVideoAdaptorPtr, XF86ConfVideoAdaptorRec) while ((token = xf86getToken (VideoAdaptorTab)) != ENDSECTION) { switch (token) { case COMMENT: ptr->va_comment = xf86addComment(ptr->va_comment, val.str); break; case IDENTIFIER: if (xf86getSubToken (&(ptr->va_comment)) != STRING) Error (QUOTE_MSG, "Identifier"); ptr->va_identifier = xf86configStrdup(val.str); if (has_ident == TRUE) Error (MULTIPLE_MSG, "Identifier"); has_ident = TRUE; break; case VENDOR: if (xf86getSubToken (&(ptr->va_comment)) != STRING) Error (QUOTE_MSG, "Vendor"); ptr->va_vendor = xf86configStrdup(val.str); break; case BOARD: if (xf86getSubToken (&(ptr->va_comment)) != STRING) Error (QUOTE_MSG, "Board"); ptr->va_board = xf86configStrdup(val.str); break; case BUSID: if (xf86getSubToken (&(ptr->va_comment)) != STRING) Error (QUOTE_MSG, "BusID"); ptr->va_busid = xf86configStrdup(val.str); break; case DRIVER: if (xf86getSubToken (&(ptr->va_comment)) != STRING) Error (QUOTE_MSG, "Driver"); ptr->va_driver = xf86configStrdup(val.str); break; case OPTION: ptr->va_option_lst = xf86parseOption(ptr->va_option_lst); break; case SUBSECTION: if (xf86getSubToken (&(ptr->va_comment)) != STRING) Error (QUOTE_MSG, "SubSection"); { { XF86ConfVideoPortPtr p = xf86parseVideoPortSubSection(val.str); if (!p) { CLEANUP(ptr); return NULL; } else { ptr->va_port_lst = (XF86ConfVideoPortPtr)xf86addListItem((glp)ptr->va_port_lst, (glp)p); } } } break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: Error (INVALID_KEYWORD_MSG, xf86tokenString ()); break; } } if (!has_ident) Error (NO_IDENT_MSG, NULL); #ifdef DEBUG printf ("VideoAdaptor section parsed\n"); #endif return ptr; }
XF86ConfFlagsPtr xf86parseFlagsSection (void) { int has_ident = FALSE; int token; parsePrologue (XF86ConfFlagsPtr, XF86ConfFlagsRec) while ((token = xf86getToken (ServerFlagsTab)) != ENDSECTION) { int hasvalue = FALSE; int strvalue = FALSE; int tokentype; switch (token) { case COMMENT: ptr->flg_comment = xf86addComment(ptr->flg_comment, val.str); break; case IDENTIFIER: if (xf86getSubToken (&(ptr->flg_comment)) != STRING) Error (QUOTE_MSG, "Identifier"); if (has_ident) Error (MULTIPLE_MSG, "Identifier"); ptr->flg_identifier = val.str; has_ident = TRUE; break; /* * These old keywords are turned into standard generic options. * We fall through here on purpose. */ case DEFAULTLAYOUT: strvalue = TRUE; case BLANKTIME: case STANDBYTIME: case SUSPENDTIME: case OFFTIME: hasvalue = TRUE; case NOTRAPSIGNALS: case DONTZAP: case DONTZOOM: case DISABLEVIDMODE: case ALLOWNONLOCAL: case DISABLEMODINDEV: case MODINDEVALLOWNONLOCAL: case ALLOWMOUSEOPENFAIL: { int i = 0; while (ServerFlagsTab[i].token != -1) { char *tmp; if (ServerFlagsTab[i].token == token) { char *valstr = NULL; /* can't use strdup because it calls malloc */ tmp = xf86configStrdup (ServerFlagsTab[i].name); if (hasvalue) { tokentype = xf86getSubToken(&(ptr->flg_comment)); if (strvalue) { if (tokentype != STRING) Error (QUOTE_MSG, tmp); valstr = val.str; } else { if (tokentype != NUMBER) Error (NUMBER_MSG, tmp); valstr = xf86confmalloc(16); if (valstr) sprintf(valstr, "%d", val.num); } } ptr->flg_option_lst = xf86addNewOption (ptr->flg_option_lst, tmp, valstr); } i++; } } break; case OPTION: ptr->flg_option_lst = xf86parseOption(ptr->flg_option_lst); break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: Error (INVALID_KEYWORD_MSG, xf86tokenString ()); break; } } #ifdef DEBUG printf ("Flags section parsed\n"); #endif return ptr; }
XF86ConfMonitorPtr xf86parseMonitorSection (void) { int has_ident = FALSE; int token; parsePrologue (XF86ConfMonitorPtr, XF86ConfMonitorRec) while ((token = xf86getToken (MonitorTab)) != ENDSECTION) { switch (token) { case COMMENT: ptr->mon_comment = xf86addComment(ptr->mon_comment, val.str); break; case IDENTIFIER: if (xf86getSubToken (&(ptr->mon_comment)) != STRING) Error (QUOTE_MSG, "Identifier"); if (has_ident == TRUE) Error (MULTIPLE_MSG, "Identifier"); ptr->mon_identifier = xf86configStrdup(val.str); has_ident = TRUE; break; case VENDOR: if (xf86getSubToken (&(ptr->mon_comment)) != STRING) Error (QUOTE_MSG, "Vendor"); ptr->mon_vendor = xf86configStrdup(val.str); break; case MODEL: if (xf86getSubToken (&(ptr->mon_comment)) != STRING) Error (QUOTE_MSG, "ModelName"); ptr->mon_modelname = xf86configStrdup(val.str); break; case MODE: HANDLE_LIST (mon_modeline_lst, xf86parseVerboseMode, XF86ConfModeLinePtr); break; case MODELINE: HANDLE_LIST (mon_modeline_lst, xf86parseModeLine, XF86ConfModeLinePtr); break; case DISPLAYSIZE: if (xf86getSubToken (&(ptr->mon_comment)) != NUMBER) Error (DISPLAYSIZE_MSG, NULL); ptr->mon_width = val.realnum; if (xf86getSubToken (&(ptr->mon_comment)) != NUMBER) Error (DISPLAYSIZE_MSG, NULL); ptr->mon_height = val.realnum; break; case HORIZSYNC: if (xf86getSubToken (&(ptr->mon_comment)) != NUMBER) Error (HORIZSYNC_MSG, NULL); do { ptr->mon_hsync[ptr->mon_n_hsync].lo = val.realnum; switch (token = xf86getSubToken (&(ptr->mon_comment))) { case COMMA: ptr->mon_hsync[ptr->mon_n_hsync].hi = ptr->mon_hsync[ptr->mon_n_hsync].lo; break; case DASH: if (xf86getSubToken (&(ptr->mon_comment)) != NUMBER || (float)val.realnum < ptr->mon_hsync[ptr->mon_n_hsync].lo) Error (HORIZSYNC_MSG, NULL); ptr->mon_hsync[ptr->mon_n_hsync].hi = val.realnum; if ((token = xf86getSubToken (&(ptr->mon_comment))) == COMMA) break; ptr->mon_n_hsync++; goto HorizDone; default: /* We cannot currently know if a '\n' was found, * or this is a real error */ ptr->mon_hsync[ptr->mon_n_hsync].hi = ptr->mon_hsync[ptr->mon_n_hsync].lo; ptr->mon_n_hsync++; goto HorizDone; } if (ptr->mon_n_hsync >= CONF_MAX_HSYNC) Error ("Sorry. Too many horizontal sync intervals.", NULL); ptr->mon_n_hsync++; } while ((token = xf86getSubToken (&(ptr->mon_comment))) == NUMBER); HorizDone: xf86unGetToken (token); break; case VERTREFRESH: if (xf86getSubToken (&(ptr->mon_comment)) != NUMBER) Error (VERTREFRESH_MSG, NULL); do { ptr->mon_vrefresh[ptr->mon_n_vrefresh].lo = val.realnum; switch (token = xf86getSubToken (&(ptr->mon_comment))) { case COMMA: ptr->mon_vrefresh[ptr->mon_n_vrefresh].hi = ptr->mon_vrefresh[ptr->mon_n_vrefresh].lo; break; case DASH: if (xf86getSubToken (&(ptr->mon_comment)) != NUMBER || (float)val.realnum < ptr->mon_vrefresh[ptr->mon_n_vrefresh].lo) Error (VERTREFRESH_MSG, NULL); ptr->mon_vrefresh[ptr->mon_n_vrefresh].hi = val.realnum; if ((token = xf86getSubToken (&(ptr->mon_comment))) == COMMA) break; ptr->mon_n_vrefresh++; goto VertDone; default: /* We cannot currently know if a '\n' was found, * or this is a real error */ ptr->mon_vrefresh[ptr->mon_n_vrefresh].hi = ptr->mon_vrefresh[ptr->mon_n_vrefresh].lo; ptr->mon_n_vrefresh++; goto VertDone; } if (ptr->mon_n_vrefresh >= CONF_MAX_VREFRESH) Error ("Sorry. Too many vertical refresh intervals.", NULL); ptr->mon_n_vrefresh++; } while ((token = xf86getSubToken (&(ptr->mon_comment))) == NUMBER); VertDone: xf86unGetToken (token); break; case GAMMA: if( xf86getSubToken (&(ptr->mon_comment)) != NUMBER ) { Error (INVALID_GAMMA_MSG, NULL); } else { ptr->mon_gamma_red = ptr->mon_gamma_green = ptr->mon_gamma_blue = val.realnum; if( xf86getSubToken (&(ptr->mon_comment)) == NUMBER ) { ptr->mon_gamma_green = val.realnum; if( xf86getSubToken (&(ptr->mon_comment)) == NUMBER ) { ptr->mon_gamma_blue = val.realnum; } else { Error (INVALID_GAMMA_MSG, NULL); } } else xf86unGetToken (token); } break; case OPTION: ptr->mon_option_lst = xf86parseOption(ptr->mon_option_lst); break; case USEMODES: { XF86ConfModesLinkPtr mptr; if ((token = xf86getSubToken (&(ptr->mon_comment))) != STRING) Error (QUOTE_MSG, "UseModes"); /* add to the end of the list of modes sections referenced here */ mptr = xf86confcalloc (1, sizeof (XF86ConfModesLinkRec)); mptr->list.next = NULL; mptr->ml_modes_str = xf86configStrdup(val.str); mptr->ml_modes = NULL; ptr->mon_modes_sect_lst = (XF86ConfModesLinkPtr) xf86addListItem((GenericListPtr)ptr->mon_modes_sect_lst, (GenericListPtr)mptr); } break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: xf86parseError (INVALID_KEYWORD_MSG, xf86tokenString ()); CLEANUP (ptr); return NULL; } } if (!has_ident) Error (NO_IDENT_MSG, NULL); #ifdef DEBUG printf ("Monitor section parsed\n"); #endif return ptr; }
XF86ConfModeLinePtr xf86parseVerboseMode (void) { int token, token2; int had_dotclock = 0, had_htimings = 0, had_vtimings = 0; parsePrologue (XF86ConfModeLinePtr, XF86ConfModeLineRec) if (xf86getSubToken (&(ptr->ml_comment)) != STRING) Error ("Mode name expected", NULL); ptr->ml_identifier = xf86configStrdup(val.str); while ((token = xf86getToken (ModeTab)) != ENDMODE) { switch (token) { case COMMENT: ptr->ml_comment = xf86addComment(ptr->ml_comment, val.str); break; case DOTCLOCK: if ((token = xf86getSubToken (&(ptr->ml_comment))) != NUMBER) Error (NUMBER_MSG, "DotClock"); ptr->ml_clock = (int) (val.realnum * 1000.0 + 0.5); had_dotclock = 1; break; case HTIMINGS: if (xf86getSubToken (&(ptr->ml_comment)) == NUMBER) ptr->ml_hdisplay = val.num; else Error ("Horizontal display expected", NULL); if (xf86getSubToken (&(ptr->ml_comment)) == NUMBER) ptr->ml_hsyncstart = val.num; else Error ("Horizontal sync start expected", NULL); if (xf86getSubToken (&(ptr->ml_comment)) == NUMBER) ptr->ml_hsyncend = val.num; else Error ("Horizontal sync end expected", NULL); if (xf86getSubToken (&(ptr->ml_comment)) == NUMBER) ptr->ml_htotal = val.num; else Error ("Horizontal total expected", NULL); had_htimings = 1; break; case VTIMINGS: if (xf86getSubToken (&(ptr->ml_comment)) == NUMBER) ptr->ml_vdisplay = val.num; else Error ("Vertical display expected", NULL); if (xf86getSubToken (&(ptr->ml_comment)) == NUMBER) ptr->ml_vsyncstart = val.num; else Error ("Vertical sync start expected", NULL); if (xf86getSubToken (&(ptr->ml_comment)) == NUMBER) ptr->ml_vsyncend = val.num; else Error ("Vertical sync end expected", NULL); if (xf86getSubToken (&(ptr->ml_comment)) == NUMBER) ptr->ml_vtotal = val.num; else Error ("Vertical total expected", NULL); had_vtimings = 1; break; case FLAGS: token = xf86getSubToken (&(ptr->ml_comment)); if (token != STRING) Error (QUOTE_MSG, "Flags"); while (token == STRING) { token2 = xf86getStringToken (TimingTab); switch (token2) { case TT_INTERLACE: ptr->ml_flags |= XF86CONF_INTERLACE; break; case TT_PHSYNC: ptr->ml_flags |= XF86CONF_PHSYNC; break; case TT_NHSYNC: ptr->ml_flags |= XF86CONF_NHSYNC; break; case TT_PVSYNC: ptr->ml_flags |= XF86CONF_PVSYNC; break; case TT_NVSYNC: ptr->ml_flags |= XF86CONF_NVSYNC; break; case TT_CSYNC: ptr->ml_flags |= XF86CONF_CSYNC; break; case TT_PCSYNC: ptr->ml_flags |= XF86CONF_PCSYNC; break; case TT_NCSYNC: ptr->ml_flags |= XF86CONF_NCSYNC; break; case TT_DBLSCAN: ptr->ml_flags |= XF86CONF_DBLSCAN; break; case TT_CUSTOM: ptr->ml_flags |= XF86CONF_CUSTOM; break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: Error ("Unknown flag string", NULL); break; } token = xf86getSubToken (&(ptr->ml_comment)); } xf86unGetToken (token); break; case HSKEW: if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("Horizontal skew expected", NULL); ptr->ml_flags |= XF86CONF_HSKEW; ptr->ml_hskew = val.num; break; case VSCAN: if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("Vertical scan count expected", NULL); ptr->ml_flags |= XF86CONF_VSCAN; ptr->ml_vscan = val.num; break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: Error ("Unexepcted token in verbose \"Mode\" entry\n", NULL); } } if (!had_dotclock) Error ("the dotclock is missing", NULL); if (!had_htimings) Error ("the horizontal timings are missing", NULL); if (!had_vtimings) Error ("the vertical timings are missing", NULL); #ifdef DEBUG printf ("Verbose Mode parsed\n"); #endif return (ptr); }
XF86ConfModeLinePtr xf86parseModeLine (void) { int token; parsePrologue (XF86ConfModeLinePtr, XF86ConfModeLineRec) /* Identifier */ if (xf86getSubToken (&(ptr->ml_comment)) != STRING) Error ("ModeLine identifier expected", NULL); ptr->ml_identifier = xf86configStrdup(val.str); /* DotClock */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine dotclock expected", NULL); ptr->ml_clock = (int) (val.realnum * 1000.0 + 0.5); /* HDisplay */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine Hdisplay expected", NULL); ptr->ml_hdisplay = val.num; /* HSyncStart */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine HSyncStart expected", NULL); ptr->ml_hsyncstart = val.num; /* HSyncEnd */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine HSyncEnd expected", NULL); ptr->ml_hsyncend = val.num; /* HTotal */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine HTotal expected", NULL); ptr->ml_htotal = val.num; /* VDisplay */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine Vdisplay expected", NULL); ptr->ml_vdisplay = val.num; /* VSyncStart */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine VSyncStart expected", NULL); ptr->ml_vsyncstart = val.num; /* VSyncEnd */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine VSyncEnd expected", NULL); ptr->ml_vsyncend = val.num; /* VTotal */ if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error ("ModeLine VTotal expected", NULL); ptr->ml_vtotal = val.num; token = xf86getSubTokenWithTab (&(ptr->ml_comment), TimingTab); while ((token == TT_INTERLACE) || (token == TT_PHSYNC) || (token == TT_NHSYNC) || (token == TT_PVSYNC) || (token == TT_NVSYNC) || (token == TT_CSYNC) || (token == TT_PCSYNC) || (token == TT_NCSYNC) || (token == TT_DBLSCAN) || (token == TT_HSKEW) || (token == TT_VSCAN) || (token == TT_BCAST)) { switch (token) { case TT_INTERLACE: ptr->ml_flags |= XF86CONF_INTERLACE; break; case TT_PHSYNC: ptr->ml_flags |= XF86CONF_PHSYNC; break; case TT_NHSYNC: ptr->ml_flags |= XF86CONF_NHSYNC; break; case TT_PVSYNC: ptr->ml_flags |= XF86CONF_PVSYNC; break; case TT_NVSYNC: ptr->ml_flags |= XF86CONF_NVSYNC; break; case TT_CSYNC: ptr->ml_flags |= XF86CONF_CSYNC; break; case TT_PCSYNC: ptr->ml_flags |= XF86CONF_PCSYNC; break; case TT_NCSYNC: ptr->ml_flags |= XF86CONF_NCSYNC; break; case TT_DBLSCAN: ptr->ml_flags |= XF86CONF_DBLSCAN; break; case TT_HSKEW: if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error (NUMBER_MSG, "Hskew"); ptr->ml_hskew = val.num; ptr->ml_flags |= XF86CONF_HSKEW; break; case TT_BCAST: ptr->ml_flags |= XF86CONF_BCAST; break; case TT_VSCAN: if (xf86getSubToken (&(ptr->ml_comment)) != NUMBER) Error (NUMBER_MSG, "Vscan"); ptr->ml_vscan = val.num; ptr->ml_flags |= XF86CONF_VSCAN; break; case TT_CUSTOM: ptr->ml_flags |= XF86CONF_CUSTOM; break; case EOF_TOKEN: Error (UNEXPECTED_EOF_MSG, NULL); break; default: Error (INVALID_KEYWORD_MSG, xf86tokenString ()); break; } token = xf86getSubTokenWithTab (&(ptr->ml_comment), TimingTab); } xf86unGetToken (token); #ifdef DEBUG printf ("ModeLine parsed\n"); #endif return (ptr); }