1: /*************************************************************
2: * Program: CMENU Menu Compiler
3: * Module: ccmenu.h -- Compiler Module header file
4: * Written by: Leor Zolman, 11/90
5: *************************************************************/
6:
7: /******************* Misc. constants ************************/
8:
9: #define TRUE 1
10: #define FALSE 0
11: #define OK 0
12:
13: #define UNDEF_FWD (-1) /* undefined forward reference flag */
14:
15:
16: /******************* extern control ************************/
17:
18: #ifndef MASTER
19: # define Extern extern /* external declarations */
20: #else
21: # define Extern /* one-time definitions */
22: #endif
23:
24:
25: /******************* Type Definitions **********************/
26:
27: typedef struct {
28: char Name[MAX_NAME];
29: ITEM Item;
30: } IINFO;
31:
32: typedef struct {
33: char Name[MAX_NAME];
34: BOOL Processed;
35: MENU Menu;
36: IINFO *Items[MAX_ITEMS];
37: } MINFO;
38:
39: /******************* Token codes: **************************/
40:
41: #if __STDC______LINEEND____
42:
43: enum {
44: T_NULL, /* special code */
45: T_MENU, T_TITLE, T_PATH,
46: T_SPACING, T_COLUMNS, T_ENDMENU,
47: T_ITEM, T_TEXT,
48: T_ALIGN, T_LEFT, T_CENTER, T_RIGHT,
49: T_NEXTITEM, T_FIRST, T_LAST, T_NEXT,
50: T_EMENU, T_LMENU, T_ACTION,
51: T_HELP,
52: T_PROMPT, T_PAUSE, /* synonyms */
53: T_NOPROMPT, T_NOPAUSE, /* synonyms */
54: T_PRECLEAR, T_NOPRECLEAR, T_POSTCLEAR, T_NOPOSTCLEAR,
55: T_EXIT,
56: T_ESCAPE, T_NOESCAPE,
57: T_STRING, T_VALUE, T_COLON, T_EOF /* special tokens */
58: };
59:
60: #else /* __STDC__ */
61:
62: #define T_NULL 0 /* special code */
63: #define T_MENU 1
64: #define T_TITLE 2
65: #define T_PATH 3
66: #define T_SPACING 4
67: #define T_COLUMNS 5
68: #define T_ENDMENU 6
69: #define T_ITEM 7
70: #define T_TEXT 8
71: #define T_ALIGN 9
72: #define T_LEFT 10
73: #define T_CENTER 11
74: #define T_RIGHT 12
75: #define T_NEXTITEM 13
76: #define T_FIRST 14
77: #define T_LAST 15
78: #define T_NEXT 16
79: #define T_EMENU 17
80: #define T_LMENU 18
81: #define T_ACTION 19
82: #define T_HELP 20
83: #define T_PROMPT 21 /* synonyms */
84: #define T_PAUSE 22
85: #define T_NOPROMPT 23 /* synonyms */
86: #define T_NOPAUSE 24
87: #define T_PRECLEAR 25
88: #define T_NOPRECLEAR 26
89: #define T_POSTCLEAR 27
90: #define T_NOPOSTCLEAR 28
91: #define T_EXIT 29
92: #define T_ESCAPE 30
93: #define T_NOESCAPE 31
94: #define T_STRING 32 /* special tokens */
95: #define T_VALUE 33
96: #define T_COLON 34
97: #define T_EOF 35
98:
99: #endif /*__STDC__*/
100:
101: /********************** Prototypes: ***********************/
102:
103: /if __STDC__ || XENIX /* ANSI Prototypes: */
104:
105: int write_file(void);
106: int dofile(char *);
107:
108: void itemcheck(void);
109: int gettok();
110:
111: int error(char*, ...);
112: int fatalerr(char *, ...);
113:
114: MINFO create_menu(char *);
115: IINFO *create_item(char *);
116: MINFO *find_menu(char *);
117: IINFO *find_item(char *);
118:
119: int do_menu(void);
120: int do_title(void);
121: int do_path(void);
122: int do_spacing(void);
123: int do_columns(void);
124: int do_item(void);
125: int do_endmenu(void);
126: int do_align(void);
127: int do_text(void);
128: int do_text2(void);
129: int do_nextitem(void);
130: int do_action(void);
131: int do_help(void);
132: int do_prompt(void);
133: int do_clear(void);
134: int do_err(void);
135: int do_escape();
136: int do_opts(void);
137:
138: #else /* K&R Prototypes: */
139:
140: int write_file();
141: int dofile();
142:
143: Void itemcheck();
144: int gettok();
145:
146: int error();
147: int fatalerr();
148:
149: MINFO create_menu();
150: IINFO *create_item();
151: MINFO *find_menu();
152: IINFO *find_item();
153:
154: int do_menu();
155: int do_title();
156: int do_path();
157: int do_spacing();
158: int do_columns();
159: int do_item();
160: int do_endmenu();
161: int do_align();
162: int do_text();
163: int do_text2();
164: int do_nextitem();
165: int do_action();
166: int do_help();
167: int do_prompt();
168: int do_clear();
169: int do_err();
170: int do_escape();
171: int do_opts();
172:
173: #endif
174:
175: #ifdef NEEDSTR
176: char *strstr();
177: #endif
178:
179:
180: /************ Keyword / function dispatch table ***********/
181:
182: struct keywd {
183: char *keyword;
184: int (*t_func)();
185: };
186:
187: extern struct keywd keywords[];
188:
189: #ifdef MASTER
190: struct keywd keywords[] = {
191: "(null)", do_err, /* for db only */
192: "menu", do_menu,
193: "title", do_title,
194: "path", do_path,
195: "spacing", do_spacing,
196: "columns", do_columns,
197: "endmenu", do_endmenu,
198: "item", do_item,
199: "text", do-text,
200: "align", do_align,
201: "left", do_err,
202: "center", do_err,
203: "right", do_err,
204: "nextitem", do_nextitem,
205: "first", do_err,
206: "last", do_err,
207: "next", do_err,
208: "emenu", do_action,
209: "lmenu", do_action,
210: "action", do_action,
211: "help", do_help,
212: "prompt", do_opts,
213: "pause", do_opts,
214: "noprompt", do_opts,
215: "nopause", do_opts,
216: "preclear", do_opts,
217: "nopreclear", do_opts,
218: "postclear", do_opts,
219: "nopostclear", do_opts,
220: "exit", do_action,
221: "escape", do_escape,
222: "noescape", do_escape,
223: "(!string)", do_err, /* for db only */
224: "(!value)", do_err, /* for db only */
225: "(!colon)", do_err, /* for db only */
226: "(!EOF)", do_err /* for db only */
227: };
228: #endif
229:
230: #define N_KEYWORDS (sizeof keywords / sizeof (struct keywd))
231:
232:
233: /*************** Other Data structures ********************/
234:
235: Extern MINFO MInfo[MAX_HENUS], *MIp;
236: Extern IINFO *IIp;
237:
238: Extern MENU *Mp, *CMp; /* General, Current Menu Pointers */
239: Extern ITEM *Ip, *CIp; /* General, Current Item Pointers */
240:
241: Extern struct { /* Item Forward Reference Table */
242: char iname[MAX_NAME]; /* Item name */
243: int *refp; /* Pointer to reference location */
244: int lineno; /* source line number of reference */
245: } fwd_refs[MAX_ITEMS];
246:
247: Extern int n_refs; /* Number of forward references */
248:
249: /************** Miscellaneous data items ******************/
250:
251: Extern FILE *fp;
252: Extern int token, token2; /* token codes */
253: Extern char tparam[MAX_CMD]; /* text parameter */
254: Extern int vparam; /* value parameter */
255: Extern int lineno; /* current line number */
256: Extern int n_menus,
257: n_items;
258: Extern BOOL in_menu,
259: in_item;
260: Extern BOOL err_flag,
261: fatal;
262: Extern int item_num,
263: menu_num;
264:
265: Extern char src_name[MAX_PATH];
266: Extern char obj_name[MAX_PATH];
/* End of File */