home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume8 / jove / part05 / setmaps.c < prev   
Encoding:
C/C++ Source or Header  |  1987-02-02  |  2.1 KB  |  107 lines

  1. /************************************************************************
  2.  * This program is Copyright (C) 1986 by Jonathan Payne.  JOVE is       *
  3.  * provided to you without charge, and with no warranty.  You may give  *
  4.  * away copies of JOVE, including sources, provided that this notice is *
  5.  * included in all the files.                                           *
  6.  ************************************************************************/
  7.  
  8. #define TXT_TO_C
  9.  
  10. #include "funcdefs.c"
  11. #undef putchar    /* From jove.h via funcdefs.c, conflicts with STDIO */
  12. #undef putc
  13. #undef getc
  14. #undef EOF
  15. #undef FILE
  16. #undef BUFSIZ
  17. #include <stdio.h>
  18.  
  19. match(choices, what)
  20. register struct cmd    choices[];
  21. register char    *what;
  22. {
  23.     register int    len;
  24.     int    i,
  25.         found = 0,
  26.         save,
  27.         exactmatch = -1;
  28.  
  29.     len = strlen(what);
  30.     for (i = 0; choices[i].Name != 0; i++) {
  31.         if (*what != *choices[i].Name)
  32.             continue;
  33.         if (strncmp(what, choices[i].Name, len) == 0)
  34.             return i;
  35.     }
  36.     return -1;
  37. }
  38.  
  39. char *
  40. PPchar(c)
  41. int    c;
  42. {
  43.     static char    str[10];
  44.     char    *cp = str;
  45.  
  46.     if (c == '\033')
  47.         strcpy(cp, "ESC");
  48.     else if (c < ' ')
  49.         (void) sprintf(cp, "C-%c", c + '@');
  50.     else if (c == '\177')
  51.         strcpy(cp, "^?");
  52.     else
  53.         (void) sprintf(cp, "%c", c);
  54.     return cp;
  55. }
  56.  
  57. extract(into, from)
  58. char    *into,
  59.     *from;
  60. {
  61.     from += 2;    /* Past tab and first double quote. */
  62.     while ((*into = *from++) != '"')
  63.         into++;
  64.     *into = 0;
  65. }
  66.  
  67. main()
  68. {
  69.     FILE    *ifile,
  70.         *of;
  71.     char    line[100],
  72.         comname[70];
  73.     int    comnum,
  74.         ch;
  75.  
  76.     ifile = stdin;
  77.     of = stdout;
  78.     if (ifile == NULL || of == NULL) {
  79.         printf("Cannot read input or write output.\n");
  80.         exit(1);
  81.     }
  82.     while (fgets(line, sizeof line, ifile) != NULL) {
  83.         if (strncmp(line, "\t\"", 2) != 0) {
  84.             fprintf(of, line);
  85.             ch = 0;
  86.             continue;
  87.         }
  88.         extract(comname, line);
  89.         if (strcmp(comname, "unbound") == 0) 
  90.             comnum = 12345;
  91.         else {
  92.             comnum = match(commands, comname);
  93.             if (comnum < 0) {
  94.                 fprintf(stderr, "Cannot find command \"%s\".\n", comname);
  95.                 exit(1);
  96.             }
  97.         }
  98.         if (comnum == 12345)
  99.             fprintf(of, "    (data_obj *) 0,                 /* %s */\n", PPchar(ch++));
  100.         else
  101.             fprintf(of, "    (data_obj *) &commands[%d],    /* %s */\n", comnum, PPchar(ch++));
  102.     }
  103.     fclose(of);
  104.     fclose(ifile);
  105.     exit(0);
  106. }
  107.