Listing 2

  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 */