1706f2543Smrg/* 2706f2543Smrg * Copyright 2002 Red Hat Inc., Durham, North Carolina. 3706f2543Smrg * 4706f2543Smrg * All Rights Reserved. 5706f2543Smrg * 6706f2543Smrg * Permission is hereby granted, free of charge, to any person obtaining 7706f2543Smrg * a copy of this software and associated documentation files (the 8706f2543Smrg * "Software"), to deal in the Software without restriction, including 9706f2543Smrg * without limitation on the rights to use, copy, modify, merge, 10706f2543Smrg * publish, distribute, sublicense, and/or sell copies of the Software, 11706f2543Smrg * and to permit persons to whom the Software is furnished to do so, 12706f2543Smrg * subject to the following conditions: 13706f2543Smrg * 14706f2543Smrg * The above copyright notice and this permission notice (including the 15706f2543Smrg * next paragraph) shall be included in all copies or substantial 16706f2543Smrg * portions of the Software. 17706f2543Smrg * 18706f2543Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19706f2543Smrg * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20706f2543Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21706f2543Smrg * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS 22706f2543Smrg * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 23706f2543Smrg * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24706f2543Smrg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25706f2543Smrg * SOFTWARE. 26706f2543Smrg */ 27706f2543Smrg 28706f2543Smrg/* 29706f2543Smrg * Authors: 30706f2543Smrg * Rickard E. (Rik) Faith <faith@redhat.com> 31706f2543Smrg * 32706f2543Smrg */ 33706f2543Smrg 34706f2543Smrg/** \file 35706f2543Smrg * Interface to DMX configuration file parser. \see dmxparse.c */ 36706f2543Smrg 37706f2543Smrg#ifndef _DMXPARSE_H_ 38706f2543Smrg#define _DMXPARSE_H_ 39706f2543Smrg 40706f2543Smrg#include <stdio.h> /* For FILE */ 41706f2543Smrg 42706f2543Smrg/** Stores tokens not stored in other structures (e.g., keywords and ;) */ 43706f2543Smrgtypedef struct _DMXConfigToken { 44706f2543Smrg int token; 45706f2543Smrg int line; 46706f2543Smrg const char *comment; 47706f2543Smrg} DMXConfigToken, *DMXConfigTokenPtr; 48706f2543Smrg 49706f2543Smrg/** Stores parsed strings. */ 50706f2543Smrgtypedef struct _DMXConfigString { 51706f2543Smrg int token; 52706f2543Smrg int line; 53706f2543Smrg const char *comment; 54706f2543Smrg const char *string; 55706f2543Smrg struct _DMXConfigString *next; 56706f2543Smrg} DMXConfigString, *DMXConfigStringPtr; 57706f2543Smrg 58706f2543Smrg/** Stores parsed numbers. */ 59706f2543Smrgtypedef struct _DMXConfigNumber { 60706f2543Smrg int token; 61706f2543Smrg int line; 62706f2543Smrg const char *comment; 63706f2543Smrg int number; 64706f2543Smrg} DMXConfigNumber, *DMXConfigNumberPtr; 65706f2543Smrg 66706f2543Smrg/** Stores parsed pairs (e.g., x y) */ 67706f2543Smrgtypedef struct _DMXConfigPair { 68706f2543Smrg int token; 69706f2543Smrg int line; 70706f2543Smrg const char *comment; 71706f2543Smrg int x; 72706f2543Smrg int y; 73706f2543Smrg int xsign; 74706f2543Smrg int ysign; 75706f2543Smrg} DMXConfigPair, *DMXConfigPairPtr; 76706f2543Smrg 77706f2543Smrg/** Stores parsed comments not stored with a token. */ 78706f2543Smrgtypedef struct _DMXConfigComment { 79706f2543Smrg int token; 80706f2543Smrg int line; 81706f2543Smrg const char *comment; 82706f2543Smrg} DMXConfigComment, *DMXConfigCommentPtr; 83706f2543Smrg 84706f2543Smrgtypedef enum { 85706f2543Smrg dmxConfigComment, 86706f2543Smrg dmxConfigVirtual, 87706f2543Smrg dmxConfigDisplay, 88706f2543Smrg dmxConfigWall, 89706f2543Smrg dmxConfigOption, 90706f2543Smrg dmxConfigParam 91706f2543Smrg} DMXConfigType; 92706f2543Smrg 93706f2543Smrg/** Stores a geometry specification. */ 94706f2543Smrgtypedef struct _DMXConfigPartDim { 95706f2543Smrg DMXConfigPairPtr dim; 96706f2543Smrg DMXConfigPairPtr offset; 97706f2543Smrg} DMXConfigPartDim, *DMXConfigPartDimPtr; 98706f2543Smrg 99706f2543Smrg/** Stores a pair of geometry specifications. */ 100706f2543Smrgtypedef struct _DMXConfigFullDim { 101706f2543Smrg DMXConfigPartDimPtr scrn; 102706f2543Smrg DMXConfigPartDimPtr root; 103706f2543Smrg} DMXConfigFullDim, *DMXConfigFullDimPtr; 104706f2543Smrg 105706f2543Smrg/** Stores parsed display information. */ 106706f2543Smrgtypedef struct _DMXConfigDisplay { 107706f2543Smrg /* Summary information */ 108706f2543Smrg const char *name; 109706f2543Smrg /* Screen Window Geometry */ 110706f2543Smrg int scrnWidth, scrnHeight; 111706f2543Smrg int scrnX, scrnY; 112706f2543Smrg int scrnXSign, scrnYSign; 113706f2543Smrg /* Root Window Geometry */ 114706f2543Smrg int rootWidth, rootHeight; 115706f2543Smrg int rootX, rootY; 116706f2543Smrg int rootXSign, rootYSign; 117706f2543Smrg /* Origin in global space */ 118706f2543Smrg int rootXOrigin, rootYOrigin; 119706f2543Smrg 120706f2543Smrg /* Raw configuration information */ 121706f2543Smrg DMXConfigTokenPtr start; 122706f2543Smrg DMXConfigStringPtr dname; 123706f2543Smrg DMXConfigFullDimPtr dim; 124706f2543Smrg DMXConfigPairPtr origin; 125706f2543Smrg DMXConfigTokenPtr end; 126706f2543Smrg} DMXConfigDisplay, *DMXConfigDisplayPtr; 127706f2543Smrg 128706f2543Smrg/** Stores parsed wall information. */ 129706f2543Smrgtypedef struct _DMXConfigWall { 130706f2543Smrg /* Summary information */ 131706f2543Smrg int width, height; /* dimensions of displays */ 132706f2543Smrg int xwall, ywall; /* dimensions of wall, in tiles */ 133706f2543Smrg 134706f2543Smrg 135706f2543Smrg /* Raw configuration informaiton */ 136706f2543Smrg DMXConfigTokenPtr start; 137706f2543Smrg DMXConfigPairPtr wallDim; 138706f2543Smrg DMXConfigPairPtr displayDim; 139706f2543Smrg DMXConfigStringPtr nameList; 140706f2543Smrg DMXConfigTokenPtr end; 141706f2543Smrg} DMXConfigWall, *DMXConfigWallPtr; 142706f2543Smrg 143706f2543Smrg/** Stores parsed option information. */ 144706f2543Smrgtypedef struct _DMXConfigOption { 145706f2543Smrg /* Summary information */ 146706f2543Smrg char *string; 147706f2543Smrg 148706f2543Smrg /* Raw configuration informaiton */ 149706f2543Smrg DMXConfigTokenPtr start; 150706f2543Smrg DMXConfigStringPtr option; 151706f2543Smrg DMXConfigTokenPtr end; 152706f2543Smrg} DMXConfigOption, *DMXConfigOptionPtr; 153706f2543Smrg 154706f2543Smrg/** Stores parsed param information. */ 155706f2543Smrgtypedef struct _DMXConfigParam { 156706f2543Smrg int argc; 157706f2543Smrg const char **argv; 158706f2543Smrg 159706f2543Smrg DMXConfigTokenPtr start; 160706f2543Smrg DMXConfigTokenPtr open; 161706f2543Smrg DMXConfigStringPtr param; 162706f2543Smrg DMXConfigTokenPtr close; 163706f2543Smrg DMXConfigTokenPtr end; /* Either open/close OR end */ 164706f2543Smrg struct _DMXConfigParam *next; 165706f2543Smrg} DMXConfigParam, *DMXConfigParamPtr; 166706f2543Smrg 167706f2543Smrg/** Stores options under an entry (subentry). */ 168706f2543Smrgtypedef struct _DMXConfigSub { 169706f2543Smrg DMXConfigType type; 170706f2543Smrg DMXConfigCommentPtr comment; 171706f2543Smrg DMXConfigDisplayPtr display; 172706f2543Smrg DMXConfigWallPtr wall; 173706f2543Smrg DMXConfigOptionPtr option; 174706f2543Smrg DMXConfigParamPtr param; 175706f2543Smrg struct _DMXConfigSub *next; 176706f2543Smrg} DMXConfigSub, *DMXConfigSubPtr; 177706f2543Smrg 178706f2543Smrg/** Stores parsed virtual information. */ 179706f2543Smrgtypedef struct _DMXConfigVirtual { 180706f2543Smrg /* Summary information */ 181706f2543Smrg const char *name; 182706f2543Smrg int width, height; 183706f2543Smrg 184706f2543Smrg /* Raw configuration information */ 185706f2543Smrg DMXConfigTokenPtr start; 186706f2543Smrg DMXConfigStringPtr vname; 187706f2543Smrg DMXConfigPairPtr dim; 188706f2543Smrg DMXConfigTokenPtr open; 189706f2543Smrg DMXConfigSubPtr subentry; 190706f2543Smrg DMXConfigTokenPtr close; 191706f2543Smrg} DMXConfigVirtual, *DMXConfigVirtualPtr; 192706f2543Smrg 193706f2543Smrg/** Heads entry storage. */ 194706f2543Smrgtypedef struct _DMXConfigEntry { 195706f2543Smrg DMXConfigType type; 196706f2543Smrg DMXConfigCommentPtr comment; 197706f2543Smrg DMXConfigVirtualPtr virtual; 198706f2543Smrg struct _DMXConfigEntry *next; 199706f2543Smrg} DMXConfigEntry, *DMXConfigEntryPtr; 200706f2543Smrg 201706f2543Smrgextern DMXConfigEntryPtr dmxConfigEntry; 202706f2543Smrg 203706f2543Smrgextern int yylex(void); 204706f2543Smrgextern int yydebug; 205706f2543Smrgextern void yyerror(const char *message); 206706f2543Smrg 207706f2543Smrgextern void dmxConfigLog(const char *format, ...); 208706f2543Smrgextern void *dmxConfigAlloc(unsigned long bytes); 209706f2543Smrgextern void *dmxConfigRealloc(void *orig, 210706f2543Smrg unsigned long orig_bytes, 211706f2543Smrg unsigned long bytes); 212706f2543Smrgextern const char *dmxConfigCopyString(const char *string, 213706f2543Smrg int length); 214706f2543Smrgextern void dmxConfigFree(void *area); 215706f2543Smrgextern DMXConfigTokenPtr dmxConfigCreateToken(int token, int line, 216706f2543Smrg const char *comment); 217706f2543Smrgextern void dmxConfigFreeToken(DMXConfigTokenPtr p); 218706f2543Smrgextern DMXConfigStringPtr dmxConfigCreateString(int token, int line, 219706f2543Smrg const char *comment, 220706f2543Smrg const char *string); 221706f2543Smrgextern void dmxConfigFreeString(DMXConfigStringPtr p); 222706f2543Smrgextern DMXConfigNumberPtr dmxConfigCreateNumber(int token, int line, 223706f2543Smrg const char *comment, 224706f2543Smrg int number); 225706f2543Smrgextern void dmxConfigFreeNumber(DMXConfigNumberPtr p); 226706f2543Smrgextern DMXConfigPairPtr dmxConfigCreatePair(int token, int line, 227706f2543Smrg const char *comment, 228706f2543Smrg int x, int y, 229706f2543Smrg int xsign, int ysign); 230706f2543Smrgextern void dmxConfigFreePair(DMXConfigPairPtr p); 231706f2543Smrgextern DMXConfigCommentPtr dmxConfigCreateComment(int token, int line, 232706f2543Smrg const char *comment); 233706f2543Smrgextern void dmxConfigFreeComment(DMXConfigCommentPtr p); 234706f2543Smrgextern DMXConfigPartDimPtr dmxConfigCreatePartDim(DMXConfigPairPtr pDim, 235706f2543Smrg DMXConfigPairPtr pOffset); 236706f2543Smrgextern void dmxConfigFreePartDim(DMXConfigPartDimPtr p); 237706f2543Smrgextern DMXConfigFullDimPtr dmxConfigCreateFullDim(DMXConfigPartDimPtr pScrn, 238706f2543Smrg DMXConfigPartDimPtr pRoot); 239706f2543Smrgextern void dmxConfigFreeFullDim(DMXConfigFullDimPtr p); 240706f2543Smrgextern DMXConfigDisplayPtr dmxConfigCreateDisplay(DMXConfigTokenPtr pStart, 241706f2543Smrg DMXConfigStringPtr pName, 242706f2543Smrg DMXConfigFullDimPtr pDim, 243706f2543Smrg DMXConfigPairPtr pOrigin, 244706f2543Smrg DMXConfigTokenPtr pEnd); 245706f2543Smrgextern void dmxConfigFreeDisplay(DMXConfigDisplayPtr p); 246706f2543Smrgextern DMXConfigWallPtr dmxConfigCreateWall(DMXConfigTokenPtr pStart, 247706f2543Smrg DMXConfigPairPtr pWallDim, 248706f2543Smrg DMXConfigPairPtr pDisplayDim, 249706f2543Smrg DMXConfigStringPtr pNameList, 250706f2543Smrg DMXConfigTokenPtr pEnd); 251706f2543Smrgextern void dmxConfigFreeWall(DMXConfigWallPtr p); 252706f2543Smrgextern DMXConfigOptionPtr dmxConfigCreateOption(DMXConfigTokenPtr pStart, 253706f2543Smrg DMXConfigStringPtr pOption, 254706f2543Smrg DMXConfigTokenPtr pEnd); 255706f2543Smrgextern void dmxConfigFreeOption(DMXConfigOptionPtr p); 256706f2543Smrgextern DMXConfigParamPtr dmxConfigCreateParam(DMXConfigTokenPtr pStart, 257706f2543Smrg DMXConfigTokenPtr pOpen, 258706f2543Smrg DMXConfigStringPtr pParam, 259706f2543Smrg DMXConfigTokenPtr pClose, 260706f2543Smrg DMXConfigTokenPtr pEnd); 261706f2543Smrgextern void dmxConfigFreeParam(DMXConfigParamPtr p); 262706f2543Smrgextern const char **dmxConfigLookupParam(DMXConfigParamPtr p, 263706f2543Smrg const char *key, 264706f2543Smrg int *argc); 265706f2543Smrgextern DMXConfigSubPtr dmxConfigCreateSub(DMXConfigType type, 266706f2543Smrg DMXConfigCommentPtr comment, 267706f2543Smrg DMXConfigDisplayPtr display, 268706f2543Smrg DMXConfigWallPtr wall, 269706f2543Smrg DMXConfigOptionPtr option, 270706f2543Smrg DMXConfigParamPtr param); 271706f2543Smrgextern void dmxConfigFreeSub(DMXConfigSubPtr sub); 272706f2543Smrgextern DMXConfigSubPtr dmxConfigSubComment(DMXConfigCommentPtr comment); 273706f2543Smrgextern DMXConfigSubPtr dmxConfigSubDisplay(DMXConfigDisplayPtr display); 274706f2543Smrgextern DMXConfigSubPtr dmxConfigSubWall(DMXConfigWallPtr wall); 275706f2543Smrgextern DMXConfigSubPtr dmxConfigSubOption(DMXConfigOptionPtr option); 276706f2543Smrgextern DMXConfigSubPtr dmxConfigSubParam(DMXConfigParamPtr param); 277706f2543Smrgextern DMXConfigSubPtr dmxConfigAddSub(DMXConfigSubPtr head, 278706f2543Smrg DMXConfigSubPtr sub); 279706f2543Smrgextern DMXConfigVirtualPtr dmxConfigCreateVirtual(DMXConfigTokenPtr pStart, 280706f2543Smrg DMXConfigStringPtr pName, 281706f2543Smrg DMXConfigPairPtr pDim, 282706f2543Smrg DMXConfigTokenPtr pOpen, 283706f2543Smrg DMXConfigSubPtr pSubentry, 284706f2543Smrg DMXConfigTokenPtr pClose); 285706f2543Smrgextern void dmxConfigFreeVirtual(DMXConfigVirtualPtr virtual); 286706f2543Smrgextern DMXConfigEntryPtr dmxConfigCreateEntry(DMXConfigType type, 287706f2543Smrg DMXConfigCommentPtr comment, 288706f2543Smrg DMXConfigVirtualPtr virtual); 289706f2543Smrgextern void dmxConfigFreeEntry(DMXConfigEntryPtr entry); 290706f2543Smrgextern DMXConfigEntryPtr dmxConfigAddEntry(DMXConfigEntryPtr head, 291706f2543Smrg DMXConfigType type, 292706f2543Smrg DMXConfigCommentPtr comment, 293706f2543Smrg DMXConfigVirtualPtr virtual); 294706f2543Smrgextern DMXConfigEntryPtr dmxConfigEntryComment(DMXConfigCommentPtr comment); 295706f2543Smrgextern DMXConfigEntryPtr dmxConfigEntryVirtual(DMXConfigVirtualPtr virtual); 296706f2543Smrg 297706f2543Smrg#endif 298