1: /*************************************************************
2: * Program: DMENU Menu Object File Analyzer
3: * Module: dmenu.c
4: * dmenu.c: Reads a menu object file, for debuging menu
5: * compiler
6: *
7: * Written by: Leor Zolman, 7/91
8: *
9: * Menu object file format:
10: *-----------------------------------------------------------
11: * <count> (integer count of # of menus in file)
12: * MENU 1 (MENU structure for 1st Menu)
13: * ITEM 1
14: * ITEM 2
15: * ...
16: * ITEM n_items
17: * MENU 2 (MENU structure for 2nd Menu)
18: * ...
19: * .
20: * .
21: * .
22: * MENU <count> (MENU structure for final Menu)
23: * ...
24: *
25: * ----------------------------------------------------------
26: * Compile:
27: * Xenix: cc dmenu.c -o dmenu
28: * DOS: bcc dmenu.c (Borland C++)
29: ************************************************************/
30:
31: #include <stdio.h>
32: #include "cmenu.h"
33:
34: #define OK 0
35:
36: MENU Menu;
37: ITEM Item, *ip = &Item;
38:
39: char obj_name[MAX_CMD];
40: int n_menus;
41:
42: int main(argc,argv)
43: int argc;
44: char **argv;
45: {
46: register i, j;
47: int count;
48: FILE *fp;
49:
50: if (argc != 2)
51: exit(puts("usage: dmenu <menu-object>\n"));
52:
53: strcpy(obj_name, argv[1]);
54: strcat(obj_name, ".mnc");
55:
56: if ((fp = fopen(obj_name, "rb")) == NULL)
57: {
58: fprintf(stderr,
59: "Cannot open %s for reading.\n", obj_name);
60: return ERROR;
61: }
62:
63: if (fread((Void *)&n_menus, sizeof n_menus, 1, fp) != 1)
64: {
65: fprintf(stderr,
66: "Error reading menu count from %s\n", obj_name);
67: return ERROR;
68: }
69: printf("Menu count = %d\n", n_menus);
70:
71: for (i = 0; i < n_menus; i++)
72: {
73: if (fread((Void *) &Menu, sizeof (MENU), 1, fp) != 1)
74: {
75: fprintf(stderr,
76: "Error reading from %s\n", obj_name);
77: return ERROR;
78: }
79:
80: printf("******** Start of Menu #%d: *********\n", i+1);
81: printf("\tTitle: %s\n", Menu.title);
82: printf("\tPath: %s\n", Menu.path);
83: printf("\tContains %d items.\n", Menu.nitems);
84: printf("\talign = %c\n", Menu.align);
85: printf("\tColumns = %d, ", Menu.columns);
86: printf("Spacing = %d, Widest = %d\n",
87: Menu.spacing, Menu.widest);
88: printf("\tShell escapes are %sallowed",
89: Menu.escape == YES ? "" : "NOT ");
90: printf("\n");
91:
92: for (j = 0; j < Menu.nitems; j++)
93: {
94: if (fread((Void *) ip, sizeof (ITEM), 1, fp) != 1)
95: {
96: fprintf(stderr,
97: "Error reading from %s\n", obj_name);
98: return ERROR;
99: }
100: printf("Item #%d:\n", j+1);
101: printf("\tTEXT = %s\n", ip->text);
102: printf("\tPATH = %s\n", ip->path);
103: printf("\tACTION = %s\n", ip->action);
104: printf("\tHELP = %s\n", ip->help);
105: printf("pre-clear = %c\n", ip->pre_clear);
106: printf("post-clear = %c\n", ip->post_clear);
107: printf("prompt = %c\n", ip->prompt);
108: printf("acttyp = %d\n", ip->acttyp);
109: printf("lmenunum = %d\n", ip->lmenunum);
110: printf("nextcode = %d\n", ip->nextcode);
111: printf("nextitem = %d\n", ip->nextitem);
112: printf("\n");
113: }
114: printf("**** END OF MENU #%d ****\n", i+1);
115: }
116: return OK;
117: }
/* End of File */