xref: /OK3568_Linux_fs/external/xserver/hw/dmx/config/dmxparse.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2002 Red Hat Inc., Durham, North Carolina.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * All Rights Reserved.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Permission is hereby granted, free of charge, to any person obtaining
7*4882a593Smuzhiyun  * a copy of this software and associated documentation files (the
8*4882a593Smuzhiyun  * "Software"), to deal in the Software without restriction, including
9*4882a593Smuzhiyun  * without limitation on the rights to use, copy, modify, merge,
10*4882a593Smuzhiyun  * publish, distribute, sublicense, and/or sell copies of the Software,
11*4882a593Smuzhiyun  * and to permit persons to whom the Software is furnished to do so,
12*4882a593Smuzhiyun  * subject to the following conditions:
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * The above copyright notice and this permission notice (including the
15*4882a593Smuzhiyun  * next paragraph) shall be included in all copies or substantial
16*4882a593Smuzhiyun  * portions of the Software.
17*4882a593Smuzhiyun  *
18*4882a593Smuzhiyun  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19*4882a593Smuzhiyun  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20*4882a593Smuzhiyun  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21*4882a593Smuzhiyun  * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
22*4882a593Smuzhiyun  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
23*4882a593Smuzhiyun  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24*4882a593Smuzhiyun  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25*4882a593Smuzhiyun  * SOFTWARE.
26*4882a593Smuzhiyun  */
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /*
29*4882a593Smuzhiyun  * Authors:
30*4882a593Smuzhiyun  *   Rickard E. (Rik) Faith <faith@redhat.com>
31*4882a593Smuzhiyun  *
32*4882a593Smuzhiyun  */
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /** \file
35*4882a593Smuzhiyun  * Interface to DMX configuration file parser.  \see dmxparse.c */
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #ifndef _DMXPARSE_H_
38*4882a593Smuzhiyun #define _DMXPARSE_H_
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #include <stdio.h>              /* For FILE */
41*4882a593Smuzhiyun #include <X11/Xfuncproto.h>     /* For _X_ATTRIBUTE_PRINTF */
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /** Stores tokens not stored in other structures (e.g., keywords and ;) */
44*4882a593Smuzhiyun typedef struct _DMXConfigToken {
45*4882a593Smuzhiyun     int token;
46*4882a593Smuzhiyun     int line;
47*4882a593Smuzhiyun     const char *comment;
48*4882a593Smuzhiyun } DMXConfigToken, *DMXConfigTokenPtr;
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /** Stores parsed strings. */
51*4882a593Smuzhiyun typedef struct _DMXConfigString {
52*4882a593Smuzhiyun     int token;
53*4882a593Smuzhiyun     int line;
54*4882a593Smuzhiyun     const char *comment;
55*4882a593Smuzhiyun     const char *string;
56*4882a593Smuzhiyun     struct _DMXConfigString *next;
57*4882a593Smuzhiyun } DMXConfigString, *DMXConfigStringPtr;
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun /** Stores parsed numbers. */
60*4882a593Smuzhiyun typedef struct _DMXConfigNumber {
61*4882a593Smuzhiyun     int token;
62*4882a593Smuzhiyun     int line;
63*4882a593Smuzhiyun     const char *comment;
64*4882a593Smuzhiyun     int number;
65*4882a593Smuzhiyun } DMXConfigNumber, *DMXConfigNumberPtr;
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun /** Stores parsed pairs (e.g., x y) */
68*4882a593Smuzhiyun typedef struct _DMXConfigPair {
69*4882a593Smuzhiyun     int token;
70*4882a593Smuzhiyun     int line;
71*4882a593Smuzhiyun     const char *comment;
72*4882a593Smuzhiyun     int x;
73*4882a593Smuzhiyun     int y;
74*4882a593Smuzhiyun     int xsign;
75*4882a593Smuzhiyun     int ysign;
76*4882a593Smuzhiyun } DMXConfigPair, *DMXConfigPairPtr;
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /** Stores parsed comments not stored with a token. */
79*4882a593Smuzhiyun typedef struct _DMXConfigComment {
80*4882a593Smuzhiyun     int token;
81*4882a593Smuzhiyun     int line;
82*4882a593Smuzhiyun     const char *comment;
83*4882a593Smuzhiyun } DMXConfigComment, *DMXConfigCommentPtr;
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun typedef enum {
86*4882a593Smuzhiyun     dmxConfigComment,
87*4882a593Smuzhiyun     dmxConfigVirtual,
88*4882a593Smuzhiyun     dmxConfigDisplay,
89*4882a593Smuzhiyun     dmxConfigWall,
90*4882a593Smuzhiyun     dmxConfigOption,
91*4882a593Smuzhiyun     dmxConfigParam
92*4882a593Smuzhiyun } DMXConfigType;
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /** Stores a geometry specification. */
95*4882a593Smuzhiyun typedef struct _DMXConfigPartDim {
96*4882a593Smuzhiyun     DMXConfigPairPtr dim;
97*4882a593Smuzhiyun     DMXConfigPairPtr offset;
98*4882a593Smuzhiyun } DMXConfigPartDim, *DMXConfigPartDimPtr;
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /** Stores a pair of geometry specifications. */
101*4882a593Smuzhiyun typedef struct _DMXConfigFullDim {
102*4882a593Smuzhiyun     DMXConfigPartDimPtr scrn;
103*4882a593Smuzhiyun     DMXConfigPartDimPtr root;
104*4882a593Smuzhiyun } DMXConfigFullDim, *DMXConfigFullDimPtr;
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /** Stores parsed display information. */
107*4882a593Smuzhiyun typedef struct _DMXConfigDisplay {
108*4882a593Smuzhiyun     /* Summary information */
109*4882a593Smuzhiyun     const char *name;
110*4882a593Smuzhiyun     /* Screen Window Geometry */
111*4882a593Smuzhiyun     int scrnWidth, scrnHeight;
112*4882a593Smuzhiyun     int scrnX, scrnY;
113*4882a593Smuzhiyun     int scrnXSign, scrnYSign;
114*4882a593Smuzhiyun     /* Root Window Geometry */
115*4882a593Smuzhiyun     int rootWidth, rootHeight;
116*4882a593Smuzhiyun     int rootX, rootY;
117*4882a593Smuzhiyun     int rootXSign, rootYSign;
118*4882a593Smuzhiyun     /* Origin in global space */
119*4882a593Smuzhiyun     int rootXOrigin, rootYOrigin;
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun     /* Raw configuration information */
122*4882a593Smuzhiyun     DMXConfigTokenPtr start;
123*4882a593Smuzhiyun     DMXConfigStringPtr dname;
124*4882a593Smuzhiyun     DMXConfigFullDimPtr dim;
125*4882a593Smuzhiyun     DMXConfigPairPtr origin;
126*4882a593Smuzhiyun     DMXConfigTokenPtr end;
127*4882a593Smuzhiyun } DMXConfigDisplay, *DMXConfigDisplayPtr;
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun /** Stores parsed wall information. */
130*4882a593Smuzhiyun typedef struct _DMXConfigWall {
131*4882a593Smuzhiyun     /* Summary information */
132*4882a593Smuzhiyun     int width, height;          /* dimensions of displays */
133*4882a593Smuzhiyun     int xwall, ywall;           /* dimensions of wall, in tiles */
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun     /* Raw configuration informaiton */
136*4882a593Smuzhiyun     DMXConfigTokenPtr start;
137*4882a593Smuzhiyun     DMXConfigPairPtr wallDim;
138*4882a593Smuzhiyun     DMXConfigPairPtr displayDim;
139*4882a593Smuzhiyun     DMXConfigStringPtr nameList;
140*4882a593Smuzhiyun     DMXConfigTokenPtr end;
141*4882a593Smuzhiyun } DMXConfigWall, *DMXConfigWallPtr;
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun /** Stores parsed option information. */
144*4882a593Smuzhiyun typedef struct _DMXConfigOption {
145*4882a593Smuzhiyun     /* Summary information */
146*4882a593Smuzhiyun     char *string;
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun     /* Raw configuration informaiton */
149*4882a593Smuzhiyun     DMXConfigTokenPtr start;
150*4882a593Smuzhiyun     DMXConfigStringPtr option;
151*4882a593Smuzhiyun     DMXConfigTokenPtr end;
152*4882a593Smuzhiyun } DMXConfigOption, *DMXConfigOptionPtr;
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun /** Stores parsed param information. */
155*4882a593Smuzhiyun typedef struct _DMXConfigParam {
156*4882a593Smuzhiyun     int argc;
157*4882a593Smuzhiyun     const char **argv;
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun     DMXConfigTokenPtr start;
160*4882a593Smuzhiyun     DMXConfigTokenPtr open;
161*4882a593Smuzhiyun     DMXConfigStringPtr param;
162*4882a593Smuzhiyun     DMXConfigTokenPtr close;
163*4882a593Smuzhiyun     DMXConfigTokenPtr end;      /* Either open/close OR end */
164*4882a593Smuzhiyun     struct _DMXConfigParam *next;
165*4882a593Smuzhiyun } DMXConfigParam, *DMXConfigParamPtr;
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun /** Stores options under an entry (subentry). */
168*4882a593Smuzhiyun typedef struct _DMXConfigSub {
169*4882a593Smuzhiyun     DMXConfigType type;
170*4882a593Smuzhiyun     DMXConfigCommentPtr comment;
171*4882a593Smuzhiyun     DMXConfigDisplayPtr display;
172*4882a593Smuzhiyun     DMXConfigWallPtr wall;
173*4882a593Smuzhiyun     DMXConfigOptionPtr option;
174*4882a593Smuzhiyun     DMXConfigParamPtr param;
175*4882a593Smuzhiyun     struct _DMXConfigSub *next;
176*4882a593Smuzhiyun } DMXConfigSub, *DMXConfigSubPtr;
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun /** Stores parsed virtual information. */
179*4882a593Smuzhiyun typedef struct _DMXConfigVirtual {
180*4882a593Smuzhiyun     /* Summary information */
181*4882a593Smuzhiyun     const char *name;
182*4882a593Smuzhiyun     int width, height;
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun     /* Raw configuration information */
185*4882a593Smuzhiyun     DMXConfigTokenPtr start;
186*4882a593Smuzhiyun     DMXConfigStringPtr vname;
187*4882a593Smuzhiyun     DMXConfigPairPtr dim;
188*4882a593Smuzhiyun     DMXConfigTokenPtr open;
189*4882a593Smuzhiyun     DMXConfigSubPtr subentry;
190*4882a593Smuzhiyun     DMXConfigTokenPtr close;
191*4882a593Smuzhiyun } DMXConfigVirtual, *DMXConfigVirtualPtr;
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /** Heads entry storage. */
194*4882a593Smuzhiyun typedef struct _DMXConfigEntry {
195*4882a593Smuzhiyun     DMXConfigType type;
196*4882a593Smuzhiyun     DMXConfigCommentPtr comment;
197*4882a593Smuzhiyun     DMXConfigVirtualPtr virtual;
198*4882a593Smuzhiyun     struct _DMXConfigEntry *next;
199*4882a593Smuzhiyun } DMXConfigEntry, *DMXConfigEntryPtr;
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun extern DMXConfigEntryPtr dmxConfigEntry;
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun extern void yyerror(const char *message);
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun extern void dmxConfigLog(const char *format, ...) _X_ATTRIBUTE_PRINTF(1,0);
206*4882a593Smuzhiyun extern void *dmxConfigAlloc(unsigned long bytes);
207*4882a593Smuzhiyun extern void *dmxConfigRealloc(void *orig,
208*4882a593Smuzhiyun                               unsigned long orig_bytes, unsigned long bytes);
209*4882a593Smuzhiyun extern const char *dmxConfigCopyString(const char *string, int length);
210*4882a593Smuzhiyun extern void dmxConfigFree(void *area);
211*4882a593Smuzhiyun extern DMXConfigTokenPtr dmxConfigCreateToken(int token, int line,
212*4882a593Smuzhiyun                                               const char *comment);
213*4882a593Smuzhiyun extern void dmxConfigFreeToken(DMXConfigTokenPtr p);
214*4882a593Smuzhiyun extern DMXConfigStringPtr dmxConfigCreateString(int token, int line,
215*4882a593Smuzhiyun                                                 const char *comment,
216*4882a593Smuzhiyun                                                 const char *string);
217*4882a593Smuzhiyun extern void dmxConfigFreeString(DMXConfigStringPtr p);
218*4882a593Smuzhiyun extern DMXConfigNumberPtr dmxConfigCreateNumber(int token, int line,
219*4882a593Smuzhiyun                                                 const char *comment,
220*4882a593Smuzhiyun                                                 int number);
221*4882a593Smuzhiyun extern void dmxConfigFreeNumber(DMXConfigNumberPtr p);
222*4882a593Smuzhiyun extern DMXConfigPairPtr dmxConfigCreatePair(int token, int line,
223*4882a593Smuzhiyun                                             const char *comment,
224*4882a593Smuzhiyun                                             int x, int y, int xsign, int ysign);
225*4882a593Smuzhiyun extern void dmxConfigFreePair(DMXConfigPairPtr p);
226*4882a593Smuzhiyun extern DMXConfigCommentPtr dmxConfigCreateComment(int token, int line,
227*4882a593Smuzhiyun                                                   const char *comment);
228*4882a593Smuzhiyun extern void dmxConfigFreeComment(DMXConfigCommentPtr p);
229*4882a593Smuzhiyun extern DMXConfigPartDimPtr dmxConfigCreatePartDim(DMXConfigPairPtr pDim,
230*4882a593Smuzhiyun                                                   DMXConfigPairPtr pOffset);
231*4882a593Smuzhiyun extern void dmxConfigFreePartDim(DMXConfigPartDimPtr p);
232*4882a593Smuzhiyun extern DMXConfigFullDimPtr dmxConfigCreateFullDim(DMXConfigPartDimPtr pScrn,
233*4882a593Smuzhiyun                                                   DMXConfigPartDimPtr pRoot);
234*4882a593Smuzhiyun extern void dmxConfigFreeFullDim(DMXConfigFullDimPtr p);
235*4882a593Smuzhiyun extern DMXConfigDisplayPtr dmxConfigCreateDisplay(DMXConfigTokenPtr pStart,
236*4882a593Smuzhiyun                                                   DMXConfigStringPtr pName,
237*4882a593Smuzhiyun                                                   DMXConfigFullDimPtr pDim,
238*4882a593Smuzhiyun                                                   DMXConfigPairPtr pOrigin,
239*4882a593Smuzhiyun                                                   DMXConfigTokenPtr pEnd);
240*4882a593Smuzhiyun extern void dmxConfigFreeDisplay(DMXConfigDisplayPtr p);
241*4882a593Smuzhiyun extern DMXConfigWallPtr dmxConfigCreateWall(DMXConfigTokenPtr pStart,
242*4882a593Smuzhiyun                                             DMXConfigPairPtr pWallDim,
243*4882a593Smuzhiyun                                             DMXConfigPairPtr pDisplayDim,
244*4882a593Smuzhiyun                                             DMXConfigStringPtr pNameList,
245*4882a593Smuzhiyun                                             DMXConfigTokenPtr pEnd);
246*4882a593Smuzhiyun extern void dmxConfigFreeWall(DMXConfigWallPtr p);
247*4882a593Smuzhiyun extern DMXConfigOptionPtr dmxConfigCreateOption(DMXConfigTokenPtr pStart,
248*4882a593Smuzhiyun                                                 DMXConfigStringPtr pOption,
249*4882a593Smuzhiyun                                                 DMXConfigTokenPtr pEnd);
250*4882a593Smuzhiyun extern void dmxConfigFreeOption(DMXConfigOptionPtr p);
251*4882a593Smuzhiyun extern DMXConfigParamPtr dmxConfigCreateParam(DMXConfigTokenPtr pStart,
252*4882a593Smuzhiyun                                               DMXConfigTokenPtr pOpen,
253*4882a593Smuzhiyun                                               DMXConfigStringPtr pParam,
254*4882a593Smuzhiyun                                               DMXConfigTokenPtr pClose,
255*4882a593Smuzhiyun                                               DMXConfigTokenPtr pEnd);
256*4882a593Smuzhiyun extern void dmxConfigFreeParam(DMXConfigParamPtr p);
257*4882a593Smuzhiyun extern const char **dmxConfigLookupParam(DMXConfigParamPtr p,
258*4882a593Smuzhiyun                                          const char *key, int *argc);
259*4882a593Smuzhiyun extern DMXConfigSubPtr dmxConfigCreateSub(DMXConfigType type,
260*4882a593Smuzhiyun                                           DMXConfigCommentPtr comment,
261*4882a593Smuzhiyun                                           DMXConfigDisplayPtr display,
262*4882a593Smuzhiyun                                           DMXConfigWallPtr wall,
263*4882a593Smuzhiyun                                           DMXConfigOptionPtr option,
264*4882a593Smuzhiyun                                           DMXConfigParamPtr param);
265*4882a593Smuzhiyun extern void dmxConfigFreeSub(DMXConfigSubPtr sub);
266*4882a593Smuzhiyun extern DMXConfigSubPtr dmxConfigSubComment(DMXConfigCommentPtr comment);
267*4882a593Smuzhiyun extern DMXConfigSubPtr dmxConfigSubDisplay(DMXConfigDisplayPtr display);
268*4882a593Smuzhiyun extern DMXConfigSubPtr dmxConfigSubWall(DMXConfigWallPtr wall);
269*4882a593Smuzhiyun extern DMXConfigSubPtr dmxConfigSubOption(DMXConfigOptionPtr option);
270*4882a593Smuzhiyun extern DMXConfigSubPtr dmxConfigSubParam(DMXConfigParamPtr param);
271*4882a593Smuzhiyun extern DMXConfigSubPtr dmxConfigAddSub(DMXConfigSubPtr head,
272*4882a593Smuzhiyun                                        DMXConfigSubPtr sub);
273*4882a593Smuzhiyun extern DMXConfigVirtualPtr dmxConfigCreateVirtual(DMXConfigTokenPtr pStart,
274*4882a593Smuzhiyun                                                   DMXConfigStringPtr pName,
275*4882a593Smuzhiyun                                                   DMXConfigPairPtr pDim,
276*4882a593Smuzhiyun                                                   DMXConfigTokenPtr pOpen,
277*4882a593Smuzhiyun                                                   DMXConfigSubPtr pSubentry,
278*4882a593Smuzhiyun                                                   DMXConfigTokenPtr pClose);
279*4882a593Smuzhiyun extern void dmxConfigFreeVirtual(DMXConfigVirtualPtr virtual);
280*4882a593Smuzhiyun extern DMXConfigEntryPtr dmxConfigCreateEntry(DMXConfigType type,
281*4882a593Smuzhiyun                                               DMXConfigCommentPtr comment,
282*4882a593Smuzhiyun                                               DMXConfigVirtualPtr virtual);
283*4882a593Smuzhiyun extern void dmxConfigFreeEntry(DMXConfigEntryPtr entry);
284*4882a593Smuzhiyun extern DMXConfigEntryPtr dmxConfigAddEntry(DMXConfigEntryPtr head,
285*4882a593Smuzhiyun                                            DMXConfigType type,
286*4882a593Smuzhiyun                                            DMXConfigCommentPtr comment,
287*4882a593Smuzhiyun                                            DMXConfigVirtualPtr virtual);
288*4882a593Smuzhiyun extern DMXConfigEntryPtr dmxConfigEntryComment(DMXConfigCommentPtr comment);
289*4882a593Smuzhiyun extern DMXConfigEntryPtr dmxConfigEntryVirtual(DMXConfigVirtualPtr virtual);
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun #endif
292