Listing 4

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