home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_01_04 / 1n04050a < prev    next >
Text File  |  1990-06-25  |  3KB  |  113 lines

  1. #include    <stdio.h>
  2. #include    <stdlib.h>
  3. #include    <ctype.h>
  4. #include    <string.h>
  5.  
  6. struct    menu
  7. {
  8.     char    level;    /* 0 (top) through 255 */
  9.     long    help;    /* location in menu.hlp where help starts */
  10.     int        action;    /* action to take place */
  11. };
  12.  
  13. #define    MAX_MENU_LENGTH        16
  14. #define    TAB                    9
  15. #define    MAX_HELP_LENGTH        80
  16.  
  17.  
  18. /*
  19. ************************************************************************
  20. *    makemenu - compile menu definition file.
  21. *
  22. *    Files:
  23. *        menu.txt - menu source definition.
  24. *        menu.def - compiled menu file.
  25. *        menu.amp - menu choice strings.
  26. *        menu.hlp - menu option help file.
  27. *
  28. *    Copyright:
  29. *        Original code by William H. Roetzheim
  30. *        Copyright 1989 by William H. Roetzheim
  31. *        All rights reserved.
  32. **********************************************************************
  33. */
  34.  
  35.  
  36. void main()
  37. {
  38.     FILE     *menu_txt;
  39.     FILE     *menu_def;
  40.     FILE     *menu_hlp;
  41.     FILE    *menu_amp;
  42.     struct     menu m;
  43.     int        i,start, line;
  44.     char    buffer[255];
  45.     char    name[MAX_MENU_LENGTH];
  46.     int        total = 0;
  47.  
  48.     menu_txt = fopen("menu.txt","rb");
  49.     menu_def = fopen("menu.def","wb");
  50.     menu_hlp = fopen("menu.hlp","wb");
  51.     menu_amp = fopen("menu.amp","wb");
  52.     if ((menu_txt == NULL) || (menu_def == NULL) ||
  53.         (menu_hlp == NULL) || (menu_amp == NULL)) {
  54.         printf("\nError opening files.");
  55.         return;
  56.     }
  57.     line = -1;    /* used for error messages */
  58.     fwrite(&total,sizeof(int),1,menu_def);
  59.     while (!feof(menu_txt)) {
  60.         m.level = 0;
  61.         line++;
  62.         fgets(buffer,255,menu_txt);
  63.         if (strlen(buffer) < 5) continue;    /* skip blank lines */
  64.  
  65.         /* find out level */
  66.         i = 0;
  67.         while (buffer[i] == TAB) i++;
  68.         m.level = i;
  69.  
  70.         /* find menu choice name */
  71.         start = i;
  72.         while (!isspace(buffer[i])) i++;
  73.         buffer[i++] = NULL;
  74.         if (strlen(&buffer[start]) > MAX_MENU_LENGTH -1) {
  75.             printf("\nLine: %d;   ",line);
  76.             printf("Menu name too long: %s", &buffer[start]);
  77.             continue;
  78.         }
  79.         strcpy(name,&buffer[start]);
  80.         fwrite(name, MAX_MENU_LENGTH, 1, menu_amp);
  81.  
  82.  
  83.         /* pick up action */
  84.         while (isspace(buffer[i])) i++; /* advance past white space */
  85.         start = i;
  86.         while(buffer[i] != '|') i++;
  87.         buffer[i++] = NULL;
  88.         m.action = atoi(&buffer[start]);
  89.  
  90.         /* pick up help */
  91.         start = i;
  92.         while(buffer[i] != 13) i++;
  93.         buffer[i] = NULL;
  94.         if (strlen(&buffer[start]) > MAX_HELP_LENGTH) {
  95.             printf("\nLine: %d;   ",line);
  96.             printf("Menu help too long: %s", &buffer[start]);
  97.             continue;
  98.         }
  99.         m.help = ftell(menu_hlp);
  100.         fputs(&buffer[start],menu_hlp);
  101.         fputc(NULL,menu_hlp);
  102.  
  103.         /* write out menu structure */
  104.         fwrite(&m,sizeof(struct menu),1,menu_def);
  105.         total++;
  106.     }
  107.     rewind(menu_def);
  108.     fwrite(&total,sizeof(int),1,menu_def);
  109.      fclose(menu_txt);
  110.     fclose(menu_def);
  111.     fclose(menu_hlp);
  112.     fclose(menu_amp);
  113. }