105b261ecSmrg/* DRI.c -- DRI Section in XF86Config file 205b261ecSmrg * Created: Fri Mar 19 08:40:22 1999 by faith@precisioninsight.com 305b261ecSmrg * Revised: Thu Jun 17 16:08:05 1999 by faith@precisioninsight.com 405b261ecSmrg * 505b261ecSmrg * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 605b261ecSmrg * All Rights Reserved. 705b261ecSmrg * 805b261ecSmrg * Permission is hereby granted, free of charge, to any person obtaining a 905b261ecSmrg * copy of this software and associated documentation files (the "Software"), 1005b261ecSmrg * to deal in the Software without restriction, including without limitation 1105b261ecSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 1205b261ecSmrg * and/or sell copies of the Software, and to permit persons to whom the 1305b261ecSmrg * Software is furnished to do so, subject to the following conditions: 1435c4bbdfSmrg * 1505b261ecSmrg * The above copyright notice and this permission notice (including the next 1605b261ecSmrg * paragraph) shall be included in all copies or substantial portions of the 1705b261ecSmrg * Software. 1835c4bbdfSmrg * 1905b261ecSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 2005b261ecSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 2105b261ecSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 2205b261ecSmrg * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 2305b261ecSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 2405b261ecSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2505b261ecSmrg * DEALINGS IN THE SOFTWARE. 2635c4bbdfSmrg * 2735c4bbdfSmrg * 2805b261ecSmrg */ 2905b261ecSmrg 3005b261ecSmrg#ifdef HAVE_XORG_CONFIG_H 3105b261ecSmrg#include <xorg-config.h> 3205b261ecSmrg#endif 3305b261ecSmrg 3435c4bbdfSmrg#include "os.h" 3505b261ecSmrg#include "xf86Parser.h" 3605b261ecSmrg#include "xf86tokens.h" 3705b261ecSmrg#include "Configint.h" 3805b261ecSmrg 3905b261ecSmrg 401b5d61b8Smrgstatic const xf86ConfigSymTabRec DRITab[] = { 4105b261ecSmrg {ENDSECTION, "endsection"}, 4235c4bbdfSmrg {GROUP, "group"}, 4335c4bbdfSmrg {MODE, "mode"}, 4435c4bbdfSmrg {-1, ""}, 4505b261ecSmrg}; 4605b261ecSmrg 4705b261ecSmrg#define CLEANUP xf86freeDRI 4805b261ecSmrg 4905b261ecSmrgXF86ConfDRIPtr 5035c4bbdfSmrgxf86parseDRISection(void) 5105b261ecSmrg{ 5205b261ecSmrg int token; 5335c4bbdfSmrg 5435c4bbdfSmrg parsePrologue(XF86ConfDRIPtr, XF86ConfDRIRec); 5505b261ecSmrg 5605b261ecSmrg /* Zero is a valid value for this. */ 5705b261ecSmrg ptr->dri_group = -1; 5835c4bbdfSmrg while ((token = xf86getToken(DRITab)) != ENDSECTION) { 5935c4bbdfSmrg switch (token) { 6035c4bbdfSmrg case GROUP: 6135c4bbdfSmrg if ((token = xf86getSubToken(&(ptr->dri_comment))) == STRING) 6235c4bbdfSmrg ptr->dri_group_name = xf86_lex_val.str; 6335c4bbdfSmrg else if (token == NUMBER) 6435c4bbdfSmrg ptr->dri_group = xf86_lex_val.num; 6535c4bbdfSmrg else 6635c4bbdfSmrg Error(GROUP_MSG); 6735c4bbdfSmrg break; 6835c4bbdfSmrg case MODE: 6935c4bbdfSmrg if (xf86getSubToken(&(ptr->dri_comment)) != NUMBER) 7035c4bbdfSmrg Error(NUMBER_MSG, "Mode"); 7135c4bbdfSmrg if (xf86_lex_val.numType != PARSE_OCTAL) 7235c4bbdfSmrg Error(MUST_BE_OCTAL_MSG, xf86_lex_val.num); 7335c4bbdfSmrg ptr->dri_mode = xf86_lex_val.num; 7435c4bbdfSmrg break; 7535c4bbdfSmrg case EOF_TOKEN: 7635c4bbdfSmrg Error(UNEXPECTED_EOF_MSG); 7735c4bbdfSmrg break; 7835c4bbdfSmrg case COMMENT: 7935c4bbdfSmrg ptr->dri_comment = xf86addComment(ptr->dri_comment, xf86_lex_val.str); 8058cf2af7Smrg free(xf86_lex_val.str); 8158cf2af7Smrg xf86_lex_val.str = NULL; 8235c4bbdfSmrg break; 8335c4bbdfSmrg default: 8435c4bbdfSmrg Error(INVALID_KEYWORD_MSG, xf86tokenString()); 8535c4bbdfSmrg break; 8635c4bbdfSmrg } 8705b261ecSmrg } 8835c4bbdfSmrg 8905b261ecSmrg#ifdef DEBUG 9005b261ecSmrg ErrorF("DRI section parsed\n"); 9105b261ecSmrg#endif 9235c4bbdfSmrg 9305b261ecSmrg return ptr; 9405b261ecSmrg} 9505b261ecSmrg 9605b261ecSmrg#undef CLEANUP 9705b261ecSmrg 9805b261ecSmrgvoid 9935c4bbdfSmrgxf86printDRISection(FILE * cf, XF86ConfDRIPtr ptr) 10005b261ecSmrg{ 10105b261ecSmrg if (ptr == NULL) 10235c4bbdfSmrg return; 10335c4bbdfSmrg 10435c4bbdfSmrg fprintf(cf, "Section \"DRI\"\n"); 10505b261ecSmrg if (ptr->dri_comment) 10635c4bbdfSmrg fprintf(cf, "%s", ptr->dri_comment); 10705b261ecSmrg if (ptr->dri_group_name) 10835c4bbdfSmrg fprintf(cf, "\tGroup \"%s\"\n", ptr->dri_group_name); 10905b261ecSmrg else if (ptr->dri_group >= 0) 11035c4bbdfSmrg fprintf(cf, "\tGroup %d\n", ptr->dri_group); 11105b261ecSmrg if (ptr->dri_mode) 11235c4bbdfSmrg fprintf(cf, "\tMode 0%o\n", ptr->dri_mode); 11335c4bbdfSmrg fprintf(cf, "EndSection\n\n"); 11405b261ecSmrg} 11505b261ecSmrg 11605b261ecSmrgvoid 11735c4bbdfSmrgxf86freeDRI(XF86ConfDRIPtr ptr) 11805b261ecSmrg{ 11905b261ecSmrg if (ptr == NULL) 12035c4bbdfSmrg return; 12135c4bbdfSmrg 12235c4bbdfSmrg TestFree(ptr->dri_comment); 12335c4bbdfSmrg free(ptr); 12405b261ecSmrg} 125