static XF86ConfDisplayPtr xf86parseDisplaySubSection(void) { int token; parsePrologue(XF86ConfDisplayPtr, XF86ConfDisplayRec) ptr->disp_black.red = ptr->disp_black.green = ptr->disp_black.blue = -1; ptr->disp_white.red = ptr->disp_white.green = ptr->disp_white.blue = -1; ptr->disp_frameX0 = ptr->disp_frameY0 = -1; while ((token = xf86getToken(DisplayTab)) != ENDSUBSECTION) { switch (token) { case COMMENT: ptr->disp_comment = xf86addComment(ptr->disp_comment, xf86_lex_val.str); break; case VIEWPORT: if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(VIEWPORT_MSG); ptr->disp_frameX0 = xf86_lex_val.num; if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(VIEWPORT_MSG); ptr->disp_frameY0 = xf86_lex_val.num; break; case VIRTUAL: if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(VIRTUAL_MSG); ptr->disp_virtualX = xf86_lex_val.num; if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(VIRTUAL_MSG); ptr->disp_virtualY = xf86_lex_val.num; break; case DEPTH: if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(NUMBER_MSG, "Display"); ptr->disp_depth = xf86_lex_val.num; break; case BPP: if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(NUMBER_MSG, "Display"); ptr->disp_bpp = xf86_lex_val.num; break; case VISUAL: if (xf86getSubToken(&(ptr->disp_comment)) != STRING) Error(QUOTE_MSG, "Display"); ptr->disp_visual = xf86_lex_val.str; break; case WEIGHT: if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(WEIGHT_MSG); ptr->disp_weight.red = xf86_lex_val.num; if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(WEIGHT_MSG); ptr->disp_weight.green = xf86_lex_val.num; if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(WEIGHT_MSG); ptr->disp_weight.blue = xf86_lex_val.num; break; case BLACK_TOK: if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(BLACK_MSG); ptr->disp_black.red = xf86_lex_val.num; if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(BLACK_MSG); ptr->disp_black.green = xf86_lex_val.num; if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(BLACK_MSG); ptr->disp_black.blue = xf86_lex_val.num; break; case WHITE_TOK: if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(WHITE_MSG); ptr->disp_white.red = xf86_lex_val.num; if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(WHITE_MSG); ptr->disp_white.green = xf86_lex_val.num; if (xf86getSubToken(&(ptr->disp_comment)) != NUMBER) Error(WHITE_MSG); ptr->disp_white.blue = xf86_lex_val.num; break; case MODES: { XF86ModePtr mptr; while ((token = xf86getSubTokenWithTab(&(ptr->disp_comment), DisplayTab)) == STRING) { mptr = calloc(1, sizeof(XF86ModeRec)); mptr->mode_name = xf86_lex_val.str; mptr->list.next = NULL; ptr->disp_mode_lst = (XF86ModePtr) xf86addListItem((glp) ptr->disp_mode_lst, (glp) mptr); } xf86unGetToken(token); } break; case OPTION: ptr->disp_option_lst = xf86parseOption(ptr->disp_option_lst); break; case EOF_TOKEN: Error(UNEXPECTED_EOF_MSG); break; default: Error(INVALID_KEYWORD_MSG, xf86tokenString()); break; } } #ifdef DEBUG printf("Display subsection parsed\n"); #endif return ptr; }
XF86ConfLayoutPtr xf86parseLayoutSection(void) { int has_ident = FALSE; int token; parsePrologue(XF86ConfLayoutPtr, XF86ConfLayoutRec) while ((token = xf86getToken(LayoutTab)) != ENDSECTION) { switch (token) { case COMMENT: ptr->lay_comment = xf86addComment(ptr->lay_comment, val.str); break; case IDENTIFIER: if (xf86getSubToken(&(ptr->lay_comment)) != STRING) Error(QUOTE_MSG, "Identifier"); if (has_ident == TRUE) Error(MULTIPLE_MSG, "Identifier"); ptr->lay_identifier = val.str; has_ident = TRUE; break; case INACTIVE: { XF86ConfInactivePtr iptr; iptr = calloc(1, sizeof(XF86ConfInactiveRec)); iptr->list.next = NULL; if (xf86getSubToken(&(ptr->lay_comment)) != STRING) { free(iptr); Error(INACTIVE_MSG); } iptr->inactive_device_str = val.str; ptr->lay_inactive_lst = (XF86ConfInactivePtr) xf86addListItem((glp) ptr->lay_inactive_lst, (glp) iptr); } break; case SCREEN: { XF86ConfAdjacencyPtr aptr; int absKeyword = 0; aptr = calloc(1, sizeof(XF86ConfAdjacencyRec)); aptr->list.next = NULL; aptr->adj_scrnum = -1; aptr->adj_where = CONF_ADJ_OBSOLETE; aptr->adj_x = 0; aptr->adj_y = 0; aptr->adj_refscreen = NULL; if ((token = xf86getSubToken(&(ptr->lay_comment))) == NUMBER) aptr->adj_scrnum = val.num; else xf86unGetToken(token); token = xf86getSubToken(&(ptr->lay_comment)); if (token != STRING) { free(aptr); Error(SCREEN_MSG); } aptr->adj_screen_str = val.str; token = xf86getSubTokenWithTab(&(ptr->lay_comment), AdjTab); switch (token) { case RIGHTOF: aptr->adj_where = CONF_ADJ_RIGHTOF; break; case LEFTOF: aptr->adj_where = CONF_ADJ_LEFTOF; break; case ABOVE: aptr->adj_where = CONF_ADJ_ABOVE; break; case BELOW: aptr->adj_where = CONF_ADJ_BELOW; break; case RELATIVE: aptr->adj_where = CONF_ADJ_RELATIVE; break; case ABSOLUTE: aptr->adj_where = CONF_ADJ_ABSOLUTE; absKeyword = 1; break; case EOF_TOKEN: free(aptr); Error(UNEXPECTED_EOF_MSG); break; default: xf86unGetToken(token); token = xf86getSubToken(&(ptr->lay_comment)); if (token == STRING) aptr->adj_where = CONF_ADJ_OBSOLETE; else aptr->adj_where = CONF_ADJ_ABSOLUTE; } switch (aptr->adj_where) { case CONF_ADJ_ABSOLUTE: if (absKeyword) token = xf86getSubToken(&(ptr->lay_comment)); if (token == NUMBER) { aptr->adj_x = val.num; token = xf86getSubToken(&(ptr->lay_comment)); if (token != NUMBER) { free(aptr); Error(INVALID_SCR_MSG); } aptr->adj_y = val.num; } else { if (absKeyword) { free(aptr); Error(INVALID_SCR_MSG); } else xf86unGetToken(token); } break; case CONF_ADJ_RIGHTOF: case CONF_ADJ_LEFTOF: case CONF_ADJ_ABOVE: case CONF_ADJ_BELOW: case CONF_ADJ_RELATIVE: token = xf86getSubToken(&(ptr->lay_comment)); if (token != STRING) { free(aptr); Error(INVALID_SCR_MSG); } aptr->adj_refscreen = val.str; if (aptr->adj_where == CONF_ADJ_RELATIVE) { token = xf86getSubToken(&(ptr->lay_comment)); if (token != NUMBER) { free(aptr); Error(INVALID_SCR_MSG); } aptr->adj_x = val.num; token = xf86getSubToken(&(ptr->lay_comment)); if (token != NUMBER) { free(aptr); Error(INVALID_SCR_MSG); } aptr->adj_y = val.num; } break; case CONF_ADJ_OBSOLETE: /* top */ aptr->adj_top_str = val.str; /* bottom */ if (xf86getSubToken(&(ptr->lay_comment)) != STRING) { free(aptr); Error(SCREEN_MSG); } aptr->adj_bottom_str = val.str; /* left */ if (xf86getSubToken(&(ptr->lay_comment)) != STRING) { free(aptr); Error(SCREEN_MSG); } aptr->adj_left_str = val.str; /* right */ if (xf86getSubToken(&(ptr->lay_comment)) != STRING) { free(aptr); Error(SCREEN_MSG); } aptr->adj_right_str = val.str; } ptr->lay_adjacency_lst = (XF86ConfAdjacencyPtr) xf86addListItem((glp) ptr->lay_adjacency_lst, (glp) aptr); } break; case INPUTDEVICE: { XF86ConfInputrefPtr iptr; iptr = calloc(1, sizeof(XF86ConfInputrefRec)); iptr->list.next = NULL; iptr->iref_option_lst = NULL; if (xf86getSubToken(&(ptr->lay_comment)) != STRING) { free(iptr); Error(INPUTDEV_MSG); } iptr->iref_inputdev_str = val.str; while ((token = xf86getSubToken(&(ptr->lay_comment))) == STRING) { iptr->iref_option_lst = xf86addNewOption(iptr->iref_option_lst, val.str, NULL); } xf86unGetToken(token); ptr->lay_input_lst = (XF86ConfInputrefPtr) xf86addListItem((glp) ptr->lay_input_lst, (glp) iptr); } break; case OPTION: ptr->lay_option_lst = xf86parseOption(ptr->lay_option_lst); break; case EOF_TOKEN: Error(UNEXPECTED_EOF_MSG); break; default: Error(INVALID_KEYWORD_MSG, xf86tokenString()); break; } } if (!has_ident) Error(NO_IDENT_MSG); #ifdef DEBUG printf("Layout section 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); }