dmxparse.h
Go to the documentation of this file.
00001 /*
00002  * Copyright 2002 Red Hat Inc., Durham, North Carolina.
00003  *
00004  * All Rights Reserved.
00005  *
00006  * Permission is hereby granted, free of charge, to any person obtaining
00007  * a copy of this software and associated documentation files (the
00008  * "Software"), to deal in the Software without restriction, including
00009  * without limitation on the rights to use, copy, modify, merge,
00010  * publish, distribute, sublicense, and/or sell copies of the Software,
00011  * and to permit persons to whom the Software is furnished to do so,
00012  * subject to the following conditions:
00013  *
00014  * The above copyright notice and this permission notice (including the
00015  * next paragraph) shall be included in all copies or substantial
00016  * portions of the Software.
00017  *
00018  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00019  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00020  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00021  * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
00022  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
00023  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
00024  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
00025  * SOFTWARE.
00026  */
00027 
00028 /*
00029  * Authors:
00030  *   Rickard E. (Rik) Faith <faith@redhat.com>
00031  *
00032  */
00033 
00037 #ifndef _DMXPARSE_H_
00038 #define _DMXPARSE_H_
00039 
00040 #include <stdio.h>              /* For FILE */
00041 
00043 typedef struct _DMXConfigToken {
00044     int                      token;
00045     int                      line;
00046     const char               *comment;
00047 } DMXConfigToken, *DMXConfigTokenPtr;
00048 
00050 typedef struct _DMXConfigString {
00051     int                      token;
00052     int                      line;
00053     const char               *comment;
00054     const char               *string;
00055     struct _DMXConfigString  *next;
00056 } DMXConfigString, *DMXConfigStringPtr;
00057 
00059 typedef struct _DMXConfigNumber {
00060     int                      token;
00061     int                      line;
00062     const char               *comment;
00063     int                      number;
00064 } DMXConfigNumber, *DMXConfigNumberPtr;
00065 
00067 typedef struct _DMXConfigPair {
00068     int                      token;
00069     int                      line;
00070     const char               *comment;
00071     int                      x;
00072     int                      y;
00073     int                      xsign;
00074     int                      ysign;
00075 } DMXConfigPair, *DMXConfigPairPtr;
00076 
00078 typedef struct _DMXConfigComment {
00079     int                      token;
00080     int                      line;
00081     const char               *comment;
00082 } DMXConfigComment, *DMXConfigCommentPtr;
00083 
00084 typedef enum {
00085     dmxConfigComment,
00086     dmxConfigVirtual,
00087     dmxConfigDisplay,
00088     dmxConfigWall,
00089     dmxConfigOption,
00090     dmxConfigParam
00091 } DMXConfigType;
00092 
00094 typedef struct _DMXConfigPartDim {
00095     DMXConfigPairPtr         dim;
00096     DMXConfigPairPtr         offset;
00097 } DMXConfigPartDim, *DMXConfigPartDimPtr;
00098 
00100 typedef struct _DMXConfigFullDim {
00101     DMXConfigPartDimPtr      scrn;
00102     DMXConfigPartDimPtr      root;
00103 } DMXConfigFullDim, *DMXConfigFullDimPtr;
00104 
00106 typedef struct _DMXConfigDisplay {
00107                                 /* Summary information */
00108     const char               *name;
00109                                 /* Screen Window Geometry */
00110     int                      scrnWidth, scrnHeight;
00111     int                      scrnX, scrnY;
00112     int                      scrnXSign, scrnYSign;
00113                                 /* Root Window Geometry */
00114     int                      rootWidth, rootHeight;
00115     int                      rootX, rootY;
00116     int                      rootXSign, rootYSign;
00117                                 /* Origin in global space */
00118     int                      rootXOrigin, rootYOrigin;
00119     
00120                                 /* Raw configuration information */
00121     DMXConfigTokenPtr        start;
00122     DMXConfigStringPtr       dname;
00123     DMXConfigFullDimPtr      dim;
00124     DMXConfigPairPtr         origin;
00125     DMXConfigTokenPtr        end;
00126 } DMXConfigDisplay, *DMXConfigDisplayPtr;
00127 
00129 typedef struct _DMXConfigWall {
00130                                 /* Summary information */
00131     int                      width, height; /* dimensions of displays */
00132     int                      xwall, ywall; /* dimensions of wall, in tiles */
00133 
00134     
00135                                 /* Raw configuration informaiton */
00136     DMXConfigTokenPtr        start;
00137     DMXConfigPairPtr         wallDim;
00138     DMXConfigPairPtr         displayDim;
00139     DMXConfigStringPtr       nameList;
00140     DMXConfigTokenPtr        end;
00141 } DMXConfigWall, *DMXConfigWallPtr;
00142 
00144 typedef struct _DMXConfigOption {
00145                                 /* Summary information */
00146     char                     *string;
00147     
00148                                 /* Raw configuration informaiton */
00149     DMXConfigTokenPtr        start;
00150     DMXConfigStringPtr       option;
00151     DMXConfigTokenPtr        end;
00152 } DMXConfigOption, *DMXConfigOptionPtr;
00153 
00155 typedef struct _DMXConfigParam {
00156     int                      argc;
00157     const char               **argv;
00158     
00159     DMXConfigTokenPtr        start;
00160     DMXConfigTokenPtr        open;
00161     DMXConfigStringPtr       param;
00162     DMXConfigTokenPtr        close;
00163     DMXConfigTokenPtr        end; /* Either open/close OR end */
00164     struct _DMXConfigParam   *next;
00165 } DMXConfigParam, *DMXConfigParamPtr;
00166 
00168 typedef struct _DMXConfigSub {
00169     DMXConfigType             type;
00170     DMXConfigCommentPtr       comment;
00171     DMXConfigDisplayPtr       display;
00172     DMXConfigWallPtr          wall;
00173     DMXConfigOptionPtr        option;
00174     DMXConfigParamPtr         param;
00175     struct _DMXConfigSub      *next;
00176 } DMXConfigSub, *DMXConfigSubPtr;
00177 
00179 typedef struct _DMXConfigVirtual {
00180                                 /* Summary information */
00181     const char                *name;
00182     int                       width, height;
00183 
00184                                 /* Raw configuration information */
00185     DMXConfigTokenPtr         start;
00186     DMXConfigStringPtr        vname;
00187     DMXConfigPairPtr          dim;
00188     DMXConfigTokenPtr         open;
00189     DMXConfigSubPtr           subentry;
00190     DMXConfigTokenPtr         close;
00191 } DMXConfigVirtual, *DMXConfigVirtualPtr;
00192 
00194 typedef struct _DMXConfigEntry {
00195     DMXConfigType            type;
00196     DMXConfigCommentPtr      comment;
00197     DMXConfigVirtualPtr      virtual;
00198     struct _DMXConfigEntry   *next;
00199 } DMXConfigEntry, *DMXConfigEntryPtr;
00200 
00201 extern DMXConfigEntryPtr   dmxConfigEntry;
00202 
00203 extern int                 yylex(void);
00204 extern int                 yydebug;
00205 extern void                yyerror(const char *message);
00206 
00207 extern void                dmxConfigLog(const char *format, ...);
00208 extern void                *dmxConfigAlloc(unsigned long bytes);
00209 extern void                *dmxConfigRealloc(void *orig,
00210                                              unsigned long orig_bytes,
00211                                              unsigned long bytes);
00212 extern const char          *dmxConfigCopyString(const char *string,
00213                                                 int length);
00214 extern void                dmxConfigFree(void *area);
00215 extern DMXConfigTokenPtr   dmxConfigCreateToken(int token, int line,
00216                                                 const char *comment);
00217 extern void                dmxConfigFreeToken(DMXConfigTokenPtr p);
00218 extern DMXConfigStringPtr  dmxConfigCreateString(int token, int line,
00219                                                  const char *comment,
00220                                                  const char *string);
00221 extern void                dmxConfigFreeString(DMXConfigStringPtr p);
00222 extern DMXConfigNumberPtr  dmxConfigCreateNumber(int token, int line,
00223                                                  const char *comment,
00224                                                  int number);
00225 extern void                dmxConfigFreeNumber(DMXConfigNumberPtr p);
00226 extern DMXConfigPairPtr    dmxConfigCreatePair(int token, int line,
00227                                                const char *comment,
00228                                                int x, int y,
00229                                                int xsign, int ysign);
00230 extern void                dmxConfigFreePair(DMXConfigPairPtr p);
00231 extern DMXConfigCommentPtr dmxConfigCreateComment(int token, int line,
00232                                                   const char *comment);
00233 extern void                dmxConfigFreeComment(DMXConfigCommentPtr p);
00234 extern DMXConfigPartDimPtr dmxConfigCreatePartDim(DMXConfigPairPtr pDim,
00235                                                   DMXConfigPairPtr pOffset);
00236 extern void                dmxConfigFreePartDim(DMXConfigPartDimPtr p);
00237 extern DMXConfigFullDimPtr dmxConfigCreateFullDim(DMXConfigPartDimPtr pScrn,
00238                                                   DMXConfigPartDimPtr pRoot);
00239 extern void                dmxConfigFreeFullDim(DMXConfigFullDimPtr p);
00240 extern DMXConfigDisplayPtr dmxConfigCreateDisplay(DMXConfigTokenPtr pStart,
00241                                                   DMXConfigStringPtr pName,
00242                                                   DMXConfigFullDimPtr pDim,
00243                                                   DMXConfigPairPtr pOrigin,
00244                                                   DMXConfigTokenPtr pEnd);
00245 extern void                dmxConfigFreeDisplay(DMXConfigDisplayPtr p);
00246 extern DMXConfigWallPtr    dmxConfigCreateWall(DMXConfigTokenPtr pStart,
00247                                                DMXConfigPairPtr pWallDim,
00248                                                DMXConfigPairPtr pDisplayDim,
00249                                                DMXConfigStringPtr pNameList,
00250                                                DMXConfigTokenPtr pEnd);
00251 extern void                dmxConfigFreeWall(DMXConfigWallPtr p);
00252 extern DMXConfigOptionPtr  dmxConfigCreateOption(DMXConfigTokenPtr pStart,
00253                                                  DMXConfigStringPtr pOption,
00254                                                  DMXConfigTokenPtr pEnd);
00255 extern void                dmxConfigFreeOption(DMXConfigOptionPtr p);
00256 extern DMXConfigParamPtr   dmxConfigCreateParam(DMXConfigTokenPtr pStart,
00257                                                 DMXConfigTokenPtr pOpen,
00258                                                 DMXConfigStringPtr pParam,
00259                                                 DMXConfigTokenPtr pClose,
00260                                                 DMXConfigTokenPtr pEnd);
00261 extern void                dmxConfigFreeParam(DMXConfigParamPtr p);
00262 extern const char          **dmxConfigLookupParam(DMXConfigParamPtr p,
00263                                                   const char *key,
00264                                                   int *argc);
00265 extern DMXConfigSubPtr     dmxConfigCreateSub(DMXConfigType type,
00266                                               DMXConfigCommentPtr comment,
00267                                               DMXConfigDisplayPtr display,
00268                                               DMXConfigWallPtr wall,
00269                                               DMXConfigOptionPtr option,
00270                                               DMXConfigParamPtr param);
00271 extern void                dmxConfigFreeSub(DMXConfigSubPtr sub);
00272 extern DMXConfigSubPtr     dmxConfigSubComment(DMXConfigCommentPtr comment);
00273 extern DMXConfigSubPtr     dmxConfigSubDisplay(DMXConfigDisplayPtr display);
00274 extern DMXConfigSubPtr     dmxConfigSubWall(DMXConfigWallPtr wall);
00275 extern DMXConfigSubPtr     dmxConfigSubOption(DMXConfigOptionPtr option);
00276 extern DMXConfigSubPtr     dmxConfigSubParam(DMXConfigParamPtr param);
00277 extern DMXConfigSubPtr     dmxConfigAddSub(DMXConfigSubPtr head,
00278                                            DMXConfigSubPtr sub);
00279 extern DMXConfigVirtualPtr dmxConfigCreateVirtual(DMXConfigTokenPtr pStart,
00280                                                   DMXConfigStringPtr pName,
00281                                                   DMXConfigPairPtr pDim,
00282                                                   DMXConfigTokenPtr pOpen,
00283                                                   DMXConfigSubPtr pSubentry,
00284                                                   DMXConfigTokenPtr pClose);
00285 extern void                dmxConfigFreeVirtual(DMXConfigVirtualPtr virtual);
00286 extern DMXConfigEntryPtr   dmxConfigCreateEntry(DMXConfigType type,
00287                                                 DMXConfigCommentPtr comment,
00288                                                 DMXConfigVirtualPtr virtual);
00289 extern void                dmxConfigFreeEntry(DMXConfigEntryPtr entry);
00290 extern DMXConfigEntryPtr   dmxConfigAddEntry(DMXConfigEntryPtr head,
00291                                              DMXConfigType type,
00292                                              DMXConfigCommentPtr comment,
00293                                              DMXConfigVirtualPtr virtual);
00294 extern DMXConfigEntryPtr   dmxConfigEntryComment(DMXConfigCommentPtr comment);
00295 extern DMXConfigEntryPtr   dmxConfigEntryVirtual(DMXConfigVirtualPtr virtual);
00296 
00297 #endif