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