1 /*
2  * Motif
3  *
4  * Copyright (c) 1987-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22 */
23 
24 /*
25  * This file contains the structure and literal definitions required
26  * by the WML processor
27  */
28 
29 #if defined(__STDC__)
30 #include <stddef.h>
31 #else
32 #include <stdio.h>
33 #endif
34 
35 #define TRUE		1
36 #define FALSE		0
37 #define SUCCESS		1
38 #define FAILURE		0
39 
40 /*
41  * Generic object pointer
42  */
43 typedef	char	*ObjectPtr;
44 
45 
46 /*
47  * True and False for attributes, so setting is explicit
48  */
49 #define	WmlAttributeUnspecified		0
50 #define	WmlAttributeTrue		1
51 #define	WmlAttributeFalse		2
52 
53 /*
54  * Values of character set direction
55  */
56 #define	WmlCharSetDirectionLtoR		1
57 #define	WmlCharSetDirectionRtoL		2
58 
59 /*
60  * Values of character set character size
61  */
62 #define	WmlCharSizeOneByte		1
63 #define	WmlCharSizeTwoByte		2
64 #define	WmlCharSizeMixed1_2Byte		3
65 
66 
67 /*
68  * Upper case and lower case converters
69  */
70 #define _upper(c)	((c) >= 'a' && (c) <= 'z' ? (c) & 0x5F:(c))
71 #define _lower(c)	((c) >= 'A' && (c) <= 'Z' ? (c) | 0x20:(c))
72 
73 
74 /*
75  * The Uil token classes which are dealt with WML. Matched to definitions
76  * in UilKeyDef.h, although this isn't required.
77  */
78 #define	WmlTokenClassArgument	1
79 #define	WmlTokenClassCharset	2
80 #define	WmlTokenClassColor	3
81 #define	WmlTokenClassEnumval	4
82 #define	WmlTokenClassFont	5
83 #define	WmlTokenClassIdentifier	6
84 #define	WmlTokenClassKeyword	7
85 #define	WmlTokenClassLiteral	8
86 #define	WmlTokenClassReason	9
87 #define	WmlTokenClassReserved	10
88 #define	WmlTokenClassSpecial	11
89 #define	WmlTokenClassUnused	12
90 #define	WmlTokenClassClass	13
91 #define WmlTokenClassChild	14
92 
93 
94 
95 /*
96  * Structures for WML objects. Two kinds are created for each object
97  * recognized and built as a WML description is read:
98  *	- A syntactic descriptor, which captures the information parse
99  *	  from the input in pretty much its raw form
100  *	- A semantically resolved descriptor, in which pointers to
101  *	  other descriptors have been resolved, ordering is done,
102  *	  superclass inheritance is complete, etc.
103  */
104 
105 /*
106  * Syntactic structures. These are constructred during input parse.
107  */
108 
109 
110 /*
111  * A dummy holding only a header. Allows access to the validation field.
112  */
113 typedef struct
114     {
115     int			validation;	/* a unique validation code */
116     ObjectPtr		rslvdef;	/* the resolved object pointer */
117     } WmlSynDef, *WmlSynDefPtr;
118 
119 
120 
121 /*
122  * A class resource descriptor. This a subset of a full resource descriptor,
123  * which captures those elements which can be overridden in a class declaration
124  */
125 #define WmlClassResDefValid	871253
126 
127 typedef struct WmlSynClassResDefStruct
128     {
129     int			validation;	/* WmlClassResDefValid */
130     struct WmlSynClassResDefStruct
131 			*next;		/* next descriptor in chain */
132     char		*name;		/* resource name */
133     char		*type;		/* override type name */
134     char		*dflt;		/* override default value */
135     short int		exclude;	/* WmlAttributeTrue if to be excluded */
136     } WmlSynClassResDef, *WmlSynClassResDefPtr;
137 
138 /*
139  * A class child descriptor.
140  */
141 #define WmlClassChildDefValid	780344
142 
143 typedef struct WmlSynClassChildDefStruct
144     {
145     int			validation;	/* WmlClassChildDefValid */
146     struct WmlSynClassChildDefStruct
147 			*next;		/* next descriptor in chain */
148     char		*name;		/* child name */
149     } WmlSynClassChildDef, *WmlSynClassChildDefPtr;
150 
151 
152 /*
153  * A class controls descriptor. It contains elements which can be added
154  * to a controls reference.
155  */
156 
157 #define WmlClassCtrlDefValid	7132320
158 
159 typedef struct WmlSynClassCtrlDefStruct
160     {
161     int			validation;	/* WmlClassCtrlDefValid */
162     struct WmlSynClassCtrlDefStruct
163 			*next;		/* next descriptor in chain */
164     char		*name;		/* controlled class name */
165     } WmlSynClassCtrlDef, *WmlSynClassCtrlDefPtr;
166 
167 
168 /*
169  * A class structure. One exists for each Class statement in a WML
170  * description.
171  */
172 #define WmlClassDefValid	93741
173 
174 #define WmlClassTypeMetaclass	1
175 #define	WmlClassTypeWidget	2
176 #define	WmlClassTypeGadget	3
177 
178 typedef struct WmlSynClassDefStruct
179     {
180     int			validation;	/* WmlClassDefValid */
181     struct WmlClassDefStruct
182 			*rslvdef;	/* resolved definition */
183     short int		type;		/* from WmlClassType... */
184     short int		dialog;		/* TRUE if a dialog class (has
185 					   window manager decoration, etc) */
186     char		*name;		/* class name */
187     char		*superclass;	/* superclass name */
188     char		*parentclass;	/* parentclass name */
189     char		*widgetclass;	/* widget class name */
190     char		*int_lit;	/* internal literal name */
191     char		*convfunc;	/* convenience function name */
192     char		*docname;	/* name for docs */
193     char		*ctrlmapto;	/* resource controls map to */
194     short int		alias_cnt;	/* alias count */
195     char		**alias_list;	/* vector of aliass */
196     WmlSynClassCtrlDefPtr
197 			controls;	/* list of controlled classes */
198     WmlSynClassResDefPtr
199 			resources;	/* list of resources from input */
200     WmlSynClassChildDefPtr
201                         children;	/* list of automatic children */
202     } WmlSynClassDef, *WmlSynClassDefPtr;
203 
204 
205 /*
206  * A controls list structure. One is created for each ControlsList statement
207  * in a WML description.
208  */
209 #define WmlCtrlListDefValid	621298
210 
211 typedef struct WmlSynCtrlListDefStruct
212     {
213     int			validation;	/* WmlCtrlListDefValid */
214     struct WmlCtrlListDefStruct
215 			*rslvdef;	/* resolved definition */
216     char		*name;		/* controls list name */
217     WmlSynClassCtrlDefPtr
218 			controls;	/* list of controlled classes */
219     } WmlSynCtrlListDef, *WmlSynCtrlListDefPtr;
220 
221 
222 /*
223  * A resource descriptor. One is created for each Resource statement
224  * in a WML description
225  */
226 #define WmlResourceDefValid	310538
227 
228 #define WmlResourceTypeArgument		1
229 #define	WmlResourceTypeReason		2
230 #define	WmlResourceTypeConstraint	3
231 #define	WmlResourceTypeSubResource	4
232 
233 typedef struct WmlSynResourceDefStruct
234     {
235     int			validation;	/* WmlResourceDefValid */
236     struct WmlResourceDefStruct
237 			*rslvdef;	/* resolved definition */
238     short int		type;		/* from WmlResourceType... */
239     char		*name;		/* resource name */
240     char		*datatype;	/* resource data type */
241     char		*int_lit;	/* internal literal name */
242     char		*resliteral;	/* resource name literal */
243     char		*enumset;	/* enumeration set name */
244     char		*docname;	/* name for docs */
245     char		*related;	/* names related resource */
246     char		*dflt;		/* default value */
247     short int		xrm_support;	/* WmlAttributeTrue if can be
248 					   Xrm resource */
249     short int		alias_cnt;	/* alias count */
250     char		**alias_list;	/* vector of aliass */
251     } WmlSynResourceDef, *WmlSynResourceDefPtr;
252 
253 /*
254  * A child descriptor. One is created for each Child statement
255  * in a WML description
256  */
257 #define WmlChildDefValid	229629
258 
259 typedef struct WmlSynChildDefStruct
260     {
261     int			validation;	/* WmlResourceDefValid */
262     struct WmlChildDefStruct
263 			*rslvdef;	/* resolved definition */
264     char		*name;		/* child name */
265     char		*class;		/* child class */
266     } WmlSynChildDef, *WmlSynChildDefPtr;
267 
268 
269 /*
270  * A datatype descriptor
271  */
272 #define WmlDataTypeDefValid	714210
273 
274 typedef struct WmlSynDataTypeDefStruct
275     {
276     int			validation;	/* WmlDataTypeDefValid */
277     struct WmlDataTypeDefStruct
278 			*rslvdef;	/* resolved definition */
279     char		*name;		/* data type name */
280     char		*int_lit;	/* internal literal name */
281     char		*docname;	/* name for docs */
282     short int		xrm_support;	/* WmlAttributeTrue if can be
283 					   Xrm resource */
284     } WmlSynDataTypeDef, *WmlSynDataTypeDefPtr;
285 
286 
287 /*
288  * An enumeration set values descriptor, as it occurs in the list for
289  * an enumeration set descriptor.
290  */
291 typedef struct WmlSynEnumSetValDefStruct
292     {
293     int			validation;	/* WmlEnumValueDefValid */
294     struct WmlSynEnumSetValDefStruct
295 			*next;		/* next descriptor in chain */
296     char		*name;		/* enumeration value name */
297     } WmlSynEnumSetValDef, *WmlSynEnumSetValDefPtr;
298 
299 
300 /*
301  * An enumeration set descriptor
302  */
303 #define	WmlEnumSetDefValid	931184
304 
305 typedef struct WmlSynEnumSetDefStruct
306     {
307     int			validation;	/* WmlEnumSetDefValid */
308     struct WmlEnumSetDefStruct
309 			*rslvdef;	/* resolved definition */
310     char		*name;		/* enumeration set name */
311     char		*datatype;	/* enumeration set data type */
312     WmlSynEnumSetValDefPtr
313 			values;		/* list of values in set */
314     } WmlSynEnumSetDef, *WmlSynEnumSetDefPtr;
315 
316 
317 
318 /*
319  * An enumeration value descriptor
320  */
321 #define	WmlEnumValueDefValid	172938
322 
323 typedef struct WmlSynEnumValueDefStruct
324     {
325     int			validation;	/* WmlEnumValueDefValid */
326     struct WmlEnumValueDefStruct
327 			*rslvdef;	/* resolved definition */
328     char		*name;		/* enumeration value name */
329     char		*enumlit;	/* name of defining literal */
330     } WmlSynEnumValueDef, *WmlSynEnumValueDefPtr;
331 
332 
333 /*
334  * A charset descriptor
335  */
336 #define WmlCharSetDefValid	110983
337 
338 typedef struct WmlSynCharSetDefStruct
339     {
340     int			validation;	/* WmlCharSetDefValid */
341     struct WmlCharSetDefStruct
342 			*rslvdef;	/* resolved definition */
343     char		*name;		/* data type name */
344     char		*int_lit;	/* internal literal name */
345     char		*xms_name;	/* identifying XmString name */
346     short int		direction;	/* WmlCharSetDirection... */
347     short int		parsedirection;	/* WmlCharSetDirection... */
348     short int		charsize;	/* WmlCharSize... */
349     short int		alias_cnt;	/* alias count */
350     char		**alias_list;	/* vector of aliases */
351     } WmlSynCharSetDef, *WmlSynCharSetDefPtr;
352 
353 
354 
355 /*
356  * Data structures constructed during semantic validation. Each points
357  * as required to syntactic data structures. These are typically accessed
358  * from ordered pointer vectors.
359  */
360 
361 
362 /*
363  * A datatype descriptor. It extends the syntactic element by assigning
364  * a code to the descriptor.
365  */
366 typedef struct WmlDataTypeDefStruct
367     {
368     struct WmlSynDataTypeDefStruct
369 			*syndef;	/* syntactic definition */
370     char		*tkname;	/* name for generating literals */
371     } WmlDataTypeDef, *WmlDataTypeDefPtr;
372 
373 
374 /*
375  * A charset descriptor. It extends the syntactic element by assigning
376  * a code to the descriptor.
377  */
378 typedef struct WmlCharSetDefStruct
379     {
380     struct WmlSynCharSetDefStruct
381 			*syndef;	/* syntactic definition */
382     char		*tkname;	/* name for generating literals */
383     short int		sym_code;	/* code value for literals */
384     } WmlCharSetDef, *WmlCharSetDefPtr;
385 
386 /*
387  * A child descriptor. It extends the syntactic element by assigning
388  * a code and a pointer to the class to the descriptor.
389  */
390 typedef struct WmlChildDefStruct
391     {
392     struct WmlSynChildDefStruct
393 			*syndef;	/* syntactic definition */
394     char		*tkname;	/* name for generating literals */
395     short int		sym_code;	/* code value for literals */
396     struct WmlClassDefStruct
397                         *class;		/* class structure */
398     struct WmlClassChildDefStruct
399 			*ref_ptr;	/* used dynamically for search */
400     } WmlChildDef, *WmlChildDefPtr;
401 
402 /*
403  * An element in the values list of an enumeration set. These elements have
404  * separate lists in order to deal with the possibility of an enumeration
405  * value which is a member of more than one list.
406  */
407 typedef struct WmlEnumSetValDefStruct
408     {
409     struct WmlEnumSetValDefStruct
410 			*next;		/* next value in list */
411     struct WmlEnumValueDefStruct
412 			*value;		/* value descriptor for element */
413     } WmlEnumSetValDef, *WmlEnumSetValDefPtr;
414 
415 
416 /*
417  * A resolved enumeration set descriptor
418  */
419 typedef struct WmlEnumSetDefStruct
420     {
421     struct WmlSynEnumSetDefStruct
422 			*syndef;	/* syntactic definition */
423     char		*tkname;	/* name for generating literals */
424     short int		sym_code;	/* code value for literals */
425     WmlDataTypeDefPtr	dtype_def;	/* data type */
426     short int		values_cnt;	/* count of # of values in set */
427     WmlEnumSetValDefPtr
428 			values;		/* list of values in set */
429     } WmlEnumSetDef, *WmlEnumSetDefPtr;
430 
431 
432 /*
433  * A resolved enumeration value descriptor
434  */
435 typedef struct WmlEnumValueDefStruct
436     {
437     struct WmlSynEnumValueDefStruct
438 			*syndef;	/* syntactic definition */
439     short int		sym_code;	/* code value for literals */
440     } WmlEnumValueDef, *WmlEnumValueDefPtr;
441 
442 
443 /*
444  * A resource descriptor
445  */
446 typedef struct WmlResourceDefStruct
447     {
448     struct WmlSynResourceDefStruct
449 			*syndef;	/* syntactic definition */
450     char		*tkname;	/* name for generating literals */
451     short int		sym_code;	/* code value for literals */
452     WmlDataTypeDefPtr	dtype_def;	/* data type for base definition */
453     WmlEnumSetDefPtr	enumset_def;	/* enumeration set if specified */
454     short int		related_code;	/* if non-0, the sym_code for the
455 					   related (count) argument */
456     short int		xrm_support;	/* if AttributeTrue, then the resource
457 					   can be set in Xrm. Resolved
458 					   from either explicit setting or
459 					   data type setting */
460     struct WmlClassDefStruct
461 			*ref_class;	/* used for membership sort */
462     struct WmlClassResDefStruct
463 			*ref_ptr;	/* used dynamically for search */
464     } WmlResourceDef, *WmlResourceDefPtr;
465 
466 
467 /*
468  * A resource descriptor with overrides which is a member of the resource
469  * list of a class descriptor.
470  */
471 typedef struct WmlClassResDefStruct
472     {
473     struct WmlClassResDefStruct
474 			*next;		/* next resource in list */
475     WmlResourceDefPtr	act_resource;	/* actual resource descriptor */
476     WmlDataTypeDefPtr	over_dtype;	/* overriding data type */
477     char		*dflt;		/* overriding default */
478     int			exclude;	/* WmlAttributeTrue if to be excluded */
479     } WmlClassResDef, *WmlClassResDefPtr;
480 
481 /*
482  * A child descriptor which is a member of the children
483  * list of a class descriptor.
484  */
485 typedef struct WmlClassChildDefStruct
486     {
487     struct WmlClassChildDefStruct
488 			*next;		/* next child in list */
489     WmlChildDefPtr	act_child;	/* actual child descriptor */
490   } WmlClassChildDef, *WmlClassChildDefPtr;
491 
492 
493 /*
494  * An element for the controls list of a resolved class descriptor
495  */
496 typedef struct WmlClassCtrlDefStruct
497     {
498     struct WmlClassCtrlDefStruct
499 			*next;		/* next control in list */
500     struct WmlClassDefStruct
501 			*ctrl;		/* class being controlled */
502     } WmlClassCtrlDef, *WmlClassCtrlDefPtr;
503 
504 
505 
506 /*
507  * A resolved class descriptor. It has a pointer to its superclass, and
508  * a resource list consisting of its inherited resources followed by
509  * its own resources.
510  */
511 typedef struct WmlClassDefStruct
512     {
513     struct WmlSynClassDefStruct
514 			*syndef;	/* syntactic definition */
515     struct WmlClassDefStruct
516 			*superclass;	/* superclass structure */
517     struct WmlClassDefStruct
518 			*parentclass;	/* parentclass structure */
519     char		*tkname;	/* name to be used in literals.
520 					   int_lit or name if no int_lit */
521     short int		sym_code;	/* code value for literals */
522     short int		inherit_done;	/* TRUE when inheritance complete */
523     WmlClassResDefPtr	arguments;	/* linked argument list */
524     WmlClassResDefPtr	reasons;	/* lined reason list */
525     WmlClassCtrlDefPtr	controls;	/* list of controlled classes.
526 					   Controls list references will
527 					   be expanded into this list. */
528     WmlClassChildDefPtr	children;	/* list of automatic children */
529     struct WmlClassDefStruct
530 			*variant;	/* the gadget class for a widget */
531     struct WmlClassDefStruct
532 			*nondialog;	/* the non-dialog ancestor of a
533 					   dialog widget */
534     WmlResourceDefPtr	ctrlmapto;	/* the resource controls map to */
535     struct WmlClassCtrlDefStruct
536 			*ref_ptr;	/* used dynamically for search */
537     } WmlClassDef, *WmlClassDefPtr;
538 
539 
540 /*
541  * A resolved controls list descriptor.
542  */
543 typedef struct WmlCtrlListDefStruct
544    {
545    struct WmlSynCtrlListDefStruct
546 			*syndef;	/* syntactic definition */
547    WmlClassCtrlDefPtr	controls;	/* list of controlled classes */
548    } WmlCtrlListDef, *WmlCtrlListDefPtr;
549 
550 
551 
552 /*
553  * Data structures used to locate and order objects in various ways.
554  */
555 
556 /*
557  * Token structure used to create ordered token lists for generation of
558  * UilKeyTab.h. The token string is in the order vector.
559  */
560 typedef struct WmlKeyWTokenStruct
561     {
562     int			class;		/* token class, WmlTokenClass... */
563     ObjectPtr		objdef;		/* object definition (resolved) */
564     } WmlKeyWToken, *WmlKeyWTokenPtr;
565 
566 
567 /*
568  * A grammar token as obtained from the UIL grammar file (Uil.y)
569  */
570 typedef struct WmlGrammarTokenStruct
571     {
572     int			class;		/* token class, WmlTokenClass... */
573     char		*token;		/* token name (literal) */
574     int			val;		/* token id as value */
575     } WmlGrammarToken, *WmlGrammarTokenPtr;
576 
577 
578 /*
579  * A list element which allows association of a name with an object.
580  * Typically used to construct ordered lists.
581  */
582 typedef struct
583     {
584     char		*objname;	/* object name */
585     ObjectPtr		objptr;		/* the object */
586     } ObjectHandleDef, *ObjectHandleDefPtr;
587 
588 /*
589  * A dynamic handle element list, extensible by malloc'ing more space.
590  */
591 typedef struct
592     {
593     int			cnt;		/* # entries in use */
594     int			max;		/* max # entries available */
595     int			ordered;	/* TRUE if list is lexicographically
596 					   ordered by object name */
597     ObjectHandleDefPtr	hvec;		/* vector of handle entries */
598     } DynamicHandleListDef, *DynamicHandleListDefPtr;
599 
600 
601 
602 /*
603  * Global declarations
604  */
605 
606 /*
607  * Defined in wml.c
608  */
609 extern int		wml_err_count;		/* total errors */
610 extern int		wml_line_count;		/* lines read from input */
611 extern DynamicHandleListDefPtr
612 			wml_synobj_ptr;		/* syntactic object list */
613 
614 extern DynamicHandleListDefPtr	wml_obj_datatype_ptr;
615 extern DynamicHandleListDefPtr	wml_obj_enumval_ptr;
616 extern DynamicHandleListDefPtr	wml_obj_enumset_ptr;
617 extern DynamicHandleListDefPtr	wml_obj_reason_ptr;
618 extern DynamicHandleListDefPtr	wml_obj_arg_ptr;
619 extern DynamicHandleListDefPtr	wml_obj_child_ptr;
620 extern DynamicHandleListDefPtr	wml_obj_allclass_ptr;
621 extern DynamicHandleListDefPtr	wml_obj_class_ptr;
622 extern DynamicHandleListDefPtr	wml_obj_ctrlist_ptr;
623 extern DynamicHandleListDefPtr	wml_obj_charset_ptr;
624 
625 extern DynamicHandleListDefPtr	wml_tok_sens_ptr;
626 extern DynamicHandleListDefPtr	wml_tok_insens_ptr;
627 
628 
629 
630 
631 /*
632  * Defined in wmlutils.c
633  */
634 extern char *wmlAllocateString ();		/* dynamic string copy */
635 extern void wmlUpperCaseString ();		/* convert to upper case */
636 extern void wmlInitHList ();			/* init dynamic list */
637 extern void wmlResizeHList ();			/* resize a list */
638 extern void wmlClearHList ();			/* clear a list for reuse */
639 extern int wmlFindInHList ();			/* find name in list */
640 extern void wmlInsertInHList ();		/* generic list insert */
641 extern void wmlInsertInKeyList ();		/* specialized list insert */
642 extern WmlClassResDefPtr wmlResolveResIsMember ();
643 						/* is resource in class? */
644 extern WmlClassChildDefPtr wmlResolveChildIsMember ();
645 						/* is child in class? */
646 
647 /*
648  * Defined in wmlsynbld.c
649  */
650 extern char		yystringval[];		/* any string value */
651 extern char		yynameval[];		/* any name (identifier) */
652 extern int		yytknval1;		/* terminal token value 1 */
653 extern int		yytknval2;		/* terminal token value 2 */
654 extern ObjectPtr	wml_cur_obj;		/* object being constructed */
655 extern ObjectPtr	wml_cur_subobj;		/* current subobject */
656 extern void wmlCreateClass ();
657 extern void wmlAddClassAttribute ();
658 extern void wmlAddClassResource ();
659 extern void wmlAddClassResourceAttribute ();
660 extern void wmlAddClassControl ();
661 extern void wmlAddCtrList ();
662 extern void wmlCreateResource ();
663 extern void wmlCreateDatatype ();
664 extern void wmlAddResourceAttribute ();
665 extern void wmlAddDatatypeAttribute ();
666 extern void wmlAddCtrListControl ();
667 extern void wmlCreateEnumSet ();
668 extern void wmlAddEnumSetValue ();
669 extern void wmlCreateEnumValue ();
670 extern void wmlAddEnumValueAttribute ();
671 extern void wmlCreateCharset ();
672 extern void wmlAddCharsetAttribute ();
673 extern void LexIssueError ();
674 
675 /*      May be, declaration of functions must be next:
676 extern void wmlAddClassChild ();
677 extern void wmlCreateChild ();
678 extern void wmlCreateOrAppendCtrlList ();
679 extern void wmlAddCtrlListControl ();
680         But, we are using real function arguments type declaration:
681 */
682 extern void wmlAddClassChild (char *);
683 extern void wmlCreateChild (char *, char *);
684 extern void wmlCreateOrAppendCtrlList (char *);
685 extern void wmlAddCtrlListControl (char *);
686 
687 
688 
689 /*
690  * Defined in wmlresolve.c
691  */
692 extern void wmlResolveDescriptors ();
693 extern void wmlMarkReferencePointers ();
694 
695 
696 /*
697  * Defined in wmlouth.c
698  */
699 extern void wmlOutputHFiles ();
700 
701 
702 /*
703  * Defined in wmloutdat.c
704  */
705 extern void wmlOutputDatFiles ();
706 
707 /*
708  * Define in wmloutp1 or wmloutp2
709  */
710 extern void wmlOutput ();
711