/* * Copyright 2002 Red Hat Inc., Durham, North Carolina. * * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation on the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial * portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /* * Authors: * Rickard E. (Rik) Faith <faith@redhat.com> * */ /** \file * Interface to DMX configuration file parser. \see dmxparse.c */ #ifndef _DMXPARSE_H_ #define _DMXPARSE_H_ #include <stdio.h> /* For FILE */ /** Stores tokens not stored in other structures (e.g., keywords and ;) */ typedef struct _DMXConfigToken { int token; int line; const char *comment; } DMXConfigToken, *DMXConfigTokenPtr; /** Stores parsed strings. */ typedef struct _DMXConfigString { int token; int line; const char *comment; const char *string; struct _DMXConfigString *next; } DMXConfigString, *DMXConfigStringPtr; /** Stores parsed numbers. */ typedef struct _DMXConfigNumber { int token; int line; const char *comment; int number; } DMXConfigNumber, *DMXConfigNumberPtr; /** Stores parsed pairs (e.g., x y) */ typedef struct _DMXConfigPair { int token; int line; const char *comment; int x; int y; int xsign; int ysign; } DMXConfigPair, *DMXConfigPairPtr; /** Stores parsed comments not stored with a token. */ typedef struct _DMXConfigComment { int token; int line; const char *comment; } DMXConfigComment, *DMXConfigCommentPtr; typedef enum { dmxConfigComment, dmxConfigVirtual, dmxConfigDisplay, dmxConfigWall, dmxConfigOption, dmxConfigParam } DMXConfigType; /** Stores a geometry specification. */ typedef struct _DMXConfigPartDim { DMXConfigPairPtr dim; DMXConfigPairPtr offset; } DMXConfigPartDim, *DMXConfigPartDimPtr; /** Stores a pair of geometry specifications. */ typedef struct _DMXConfigFullDim { DMXConfigPartDimPtr scrn; DMXConfigPartDimPtr root; } DMXConfigFullDim, *DMXConfigFullDimPtr; /** Stores parsed display information. */ typedef struct _DMXConfigDisplay { /* Summary information */ const char *name; /* Screen Window Geometry */ int scrnWidth, scrnHeight; int scrnX, scrnY; int scrnXSign, scrnYSign; /* Root Window Geometry */ int rootWidth, rootHeight; int rootX, rootY; int rootXSign, rootYSign; /* Origin in global space */ int rootXOrigin, rootYOrigin; /* Raw configuration information */ DMXConfigTokenPtr start; DMXConfigStringPtr dname; DMXConfigFullDimPtr dim; DMXConfigPairPtr origin; DMXConfigTokenPtr end; } DMXConfigDisplay, *DMXConfigDisplayPtr; /** Stores parsed wall information. */ typedef struct _DMXConfigWall { /* Summary information */ int width, height; /* dimensions of displays */ int xwall, ywall; /* dimensions of wall, in tiles */ /* Raw configuration informaiton */ DMXConfigTokenPtr start; DMXConfigPairPtr wallDim; DMXConfigPairPtr displayDim; DMXConfigStringPtr nameList; DMXConfigTokenPtr end; } DMXConfigWall, *DMXConfigWallPtr; /** Stores parsed option information. */ typedef struct _DMXConfigOption { /* Summary information */ char *string; /* Raw configuration informaiton */ DMXConfigTokenPtr start; DMXConfigStringPtr option; DMXConfigTokenPtr end; } DMXConfigOption, *DMXConfigOptionPtr; /** Stores parsed param information. */ typedef struct _DMXConfigParam { int argc; const char **argv; DMXConfigTokenPtr start; DMXConfigTokenPtr open; DMXConfigStringPtr param; DMXConfigTokenPtr close; DMXConfigTokenPtr end; /* Either open/close OR end */ struct _DMXConfigParam *next; } DMXConfigParam, *DMXConfigParamPtr; /** Stores options under an entry (subentry). */ typedef struct _DMXConfigSub { DMXConfigType type; DMXConfigCommentPtr comment; DMXConfigDisplayPtr display; DMXConfigWallPtr wall; DMXConfigOptionPtr option; DMXConfigParamPtr param; struct _DMXConfigSub *next; } DMXConfigSub, *DMXConfigSubPtr; /** Stores parsed virtual information. */ typedef struct _DMXConfigVirtual { /* Summary information */ const char *name; int width, height; /* Raw configuration information */ DMXConfigTokenPtr start; DMXConfigStringPtr vname; DMXConfigPairPtr dim; DMXConfigTokenPtr open; DMXConfigSubPtr subentry; DMXConfigTokenPtr close; } DMXConfigVirtual, *DMXConfigVirtualPtr; /** Heads entry storage. */ typedef struct _DMXConfigEntry { DMXConfigType type; DMXConfigCommentPtr comment; DMXConfigVirtualPtr virtual; struct _DMXConfigEntry *next; } DMXConfigEntry, *DMXConfigEntryPtr; extern DMXConfigEntryPtr dmxConfigEntry; extern int yylex(void); extern int yydebug; extern void yyerror(const char *message); extern void dmxConfigLog(const char *format, ...); extern void *dmxConfigAlloc(unsigned long bytes); extern void *dmxConfigRealloc(void *orig, unsigned long orig_bytes, unsigned long bytes); extern const char *dmxConfigCopyString(const char *string, int length); extern void dmxConfigFree(void *area); extern DMXConfigTokenPtr dmxConfigCreateToken(int token, int line, const char *comment); extern void dmxConfigFreeToken(DMXConfigTokenPtr p); extern DMXConfigStringPtr dmxConfigCreateString(int token, int line, const char *comment, const char *string); extern void dmxConfigFreeString(DMXConfigStringPtr p); extern DMXConfigNumberPtr dmxConfigCreateNumber(int token, int line, const char *comment, int number); extern void dmxConfigFreeNumber(DMXConfigNumberPtr p); extern DMXConfigPairPtr dmxConfigCreatePair(int token, int line, const char *comment, int x, int y, int xsign, int ysign); extern void dmxConfigFreePair(DMXConfigPairPtr p); extern DMXConfigCommentPtr dmxConfigCreateComment(int token, int line, const char *comment); extern void dmxConfigFreeComment(DMXConfigCommentPtr p); extern DMXConfigPartDimPtr dmxConfigCreatePartDim(DMXConfigPairPtr pDim, DMXConfigPairPtr pOffset); extern void dmxConfigFreePartDim(DMXConfigPartDimPtr p); extern DMXConfigFullDimPtr dmxConfigCreateFullDim(DMXConfigPartDimPtr pScrn, DMXConfigPartDimPtr pRoot); extern void dmxConfigFreeFullDim(DMXConfigFullDimPtr p); extern DMXConfigDisplayPtr dmxConfigCreateDisplay(DMXConfigTokenPtr pStart, DMXConfigStringPtr pName, DMXConfigFullDimPtr pDim, DMXConfigPairPtr pOrigin, DMXConfigTokenPtr pEnd); extern void dmxConfigFreeDisplay(DMXConfigDisplayPtr p); extern DMXConfigWallPtr dmxConfigCreateWall(DMXConfigTokenPtr pStart, DMXConfigPairPtr pWallDim, DMXConfigPairPtr pDisplayDim, DMXConfigStringPtr pNameList, DMXConfigTokenPtr pEnd); extern void dmxConfigFreeWall(DMXConfigWallPtr p); extern DMXConfigOptionPtr dmxConfigCreateOption(DMXConfigTokenPtr pStart, DMXConfigStringPtr pOption, DMXConfigTokenPtr pEnd); extern void dmxConfigFreeOption(DMXConfigOptionPtr p); extern DMXConfigParamPtr dmxConfigCreateParam(DMXConfigTokenPtr pStart, DMXConfigTokenPtr pOpen, DMXConfigStringPtr pParam, DMXConfigTokenPtr pClose, DMXConfigTokenPtr pEnd); extern void dmxConfigFreeParam(DMXConfigParamPtr p); extern const char **dmxConfigLookupParam(DMXConfigParamPtr p, const char *key, int *argc); extern DMXConfigSubPtr dmxConfigCreateSub(DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigDisplayPtr display, DMXConfigWallPtr wall, DMXConfigOptionPtr option, DMXConfigParamPtr param); extern void dmxConfigFreeSub(DMXConfigSubPtr sub); extern DMXConfigSubPtr dmxConfigSubComment(DMXConfigCommentPtr comment); extern DMXConfigSubPtr dmxConfigSubDisplay(DMXConfigDisplayPtr display); extern DMXConfigSubPtr dmxConfigSubWall(DMXConfigWallPtr wall); extern DMXConfigSubPtr dmxConfigSubOption(DMXConfigOptionPtr option); extern DMXConfigSubPtr dmxConfigSubParam(DMXConfigParamPtr param); extern DMXConfigSubPtr dmxConfigAddSub(DMXConfigSubPtr head, DMXConfigSubPtr sub); extern DMXConfigVirtualPtr dmxConfigCreateVirtual(DMXConfigTokenPtr pStart, DMXConfigStringPtr pName, DMXConfigPairPtr pDim, DMXConfigTokenPtr pOpen, DMXConfigSubPtr pSubentry, DMXConfigTokenPtr pClose); extern void dmxConfigFreeVirtual(DMXConfigVirtualPtr virtual); extern DMXConfigEntryPtr dmxConfigCreateEntry(DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigVirtualPtr virtual); extern void dmxConfigFreeEntry(DMXConfigEntryPtr entry); extern DMXConfigEntryPtr dmxConfigAddEntry(DMXConfigEntryPtr head, DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigVirtualPtr virtual); extern DMXConfigEntryPtr dmxConfigEntryComment(DMXConfigCommentPtr comment); extern DMXConfigEntryPtr dmxConfigEntryVirtual(DMXConfigVirtualPtr virtual); #endif