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