home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_10_01 / 1001122a < prev    next >
Text File  |  1991-11-19  |  2KB  |  83 lines

  1.  
  2. /************************************************************
  3.  *  Program: CMENU Menu Compiler
  4.  *  Module: cmenu1.c
  5.  *      Menu Compiler:
  6.  *      Main and Utility Functions
  7.  *  Written by: Leor Zolman, 7/91
  8.  ************************************************************/
  9.  
  10. #define MASTER
  11. #include "cmenu.h"
  12. #include "ccmenu.h"
  13.  
  14. #include <string.h>
  15.  
  16. #if __STDC__
  17. #   include <stdarg.h>
  18. #else
  19. #   include <varargs.h>
  20. #endif
  21.  
  22. int main(argc,argv)
  23. int argc;
  24. char **argv;
  25. {
  26.     register i;
  27.     
  28.     printf("CMENU Menu Compiler v%s\n", VERSION);
  29.     if (argc < 2)
  30.     {
  31.         puts("usage: cmenu <menu-source-file(s)>\n");
  32.         return 0;
  33.     }
  34.     
  35.     for (i = 1; i < argc; i++)
  36.         if (dofile(argv[i]) == ERROR)          /* process source files */
  37.             return 1;
  38.     return 0;
  39. }
  40.  
  41. /************************************************************
  42.  * dofile():
  43.  *  Process a single .mnu source file
  44.  ************************************************************/
  45.  
  46. int dofile(name)
  47. char *name;
  48. {
  49.     register i;
  50.     char *cp;
  51.     
  52.     if ((cp = strstr(name, ".mnu")) ||
  53.        (cp = strstr(name, ".MNU")))
  54.                 *cp = '\0';
  55.  
  56.     strcpy(src_name, name);
  57.     strcat(src_name, ".mnu");
  58.     strcpy(obj_name, name);
  59.  
  60.     if ((fp = fopen(src_name, "r")) == NULL)
  61.         return fprintf(stderr, "Can't open %s\n", src_name);
  62.     
  63.     n_menus = 0;
  64.     lineno = 1;
  65.     in_menu = FALSE;
  66.     fatal = FALSE;
  67.     
  68.     /*  Main processing loop. Read a token and process it,
  69.      *  until end of file is reached:
  70.      */
  71.  
  72.     while ((token = gettok(fp)) != T_EOF)
  73.     {
  74.         if (!in_menu && token != T_MENU)
  75.         {
  76.             error("Each menu must begin with the Menu keyword");
  77.             break;
  78.         }
  79.         if ((*keywords[token].t_func)() == ERROR)
  80.             if (fatal)                 /* If fatal error, exit loop    */
  81.                 break;
  82.     }
  83.