Annotation of 43BSDReno/contrib/jove/setmaps.c, revision 1.1.1.1

1.1       root        1: /***************************************************************************
                      2:  * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne.  JOVE *
                      3:  * is 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       1       /* must be a number for MAC compiler */
                      9: 
                     10: #include <stdio.h>
                     11: 
                     12: #include "funcdefs.c"
                     13: 
                     14: #ifdef MAC
                     15: #include "vars.c"
                     16: #endif
                     17: 
                     18: private int
                     19: matchcmd(choices, what)
                     20: register const struct cmd      choices[];
                     21: register char  *what;
                     22: {
                     23:        register int    i;
                     24: #ifndef MAC
                     25:        size_t  len = strlen(what);
                     26: #endif
                     27: 
                     28:        for (i = 0; choices[i].Name != 0; i++) {
                     29:                if (*what != *choices[i].Name)
                     30:                        continue;
                     31: #ifdef MAC /* see "left-margin" and "left-margin-here" */
                     32:                if (strcmp(what, choices[i].Name) == 0)
                     33: #else
                     34:                if (strncmp(what, choices[i].Name, len) == 0)
                     35: #endif
                     36:                return i;
                     37:        }
                     38:        return -1;
                     39: }
                     40: 
                     41: #ifdef MAC
                     42: matchvar(choices, what)
                     43: register struct variable choices[];
                     44: register char  *what;
                     45: {
                     46:        register int    len;
                     47:        int     i;
                     48: 
                     49:        len = strlen(what);
                     50:        for (i = 0; choices[i].Name != 0; i++) {
                     51:                if (*what != *choices[i].Name)
                     52:                        continue;
                     53:                if (strcmp(what, choices[i].Name) == 0)
                     54:                        return i;
                     55:        }
                     56:        return -1;
                     57: }
                     58: #endif
                     59: 
                     60: private char *
                     61: PPchar(c)
                     62: int    c;
                     63: {
                     64:        static char     str[16];
                     65:        char    *cp = str;
                     66: 
                     67:        if (c & 0200) {
                     68:                c &= ~0200;
                     69:                strcpy(cp, "M-");
                     70:                cp += 2;
                     71:        }
                     72:        if (c == '\033')
                     73:                strcpy(cp, "ESC");
                     74: #ifdef IBMPC
                     75:        else if (c == '\377')
                     76:                strcpy(cp, "M");
                     77: #endif /* IBMPC */
                     78:        else if (c < ' ')
                     79:                (void) sprintf(cp, "C-%c", c + '@');
                     80:        else if (c == '\177')
                     81:                strcpy(cp, "^?");
                     82:        else
                     83:                (void) sprintf(cp, "%c", c);
                     84:        return str;
                     85: }
                     86: 
                     87: private void
                     88: extract(into, from)
                     89: char   *into,
                     90:        *from;
                     91: {
                     92:        from += 2;      /* Past tab and first double quote. */
                     93:        while ((*into = *from++) != '"')
                     94:                into += 1;
                     95:        *into = 0;
                     96: }
                     97: 
                     98: 
                     99: void
                    100: 
                    101: #ifdef MAC
                    102: _main()                /* for Mac, so we can use redirection */
                    103: #else
                    104: main(argc, argv)
                    105: int    argc;
                    106: char   *argv[];
                    107: #endif
                    108: {
                    109:        FILE    *ifile,
                    110:                *of;
                    111:        char    line[100],
                    112: #ifdef MAC
                    113:                *which,
                    114: #endif
                    115:                comname[70];
                    116:        int     comnum,
                    117:                ch = 0,
                    118: #ifdef MAC
                    119:                inmenu = 0,
                    120: #endif
                    121:                savech = -1,
                    122:                errors = 0;
                    123: 
                    124:        ifile = stdin;
                    125:        of = stdout;
                    126:        if (ifile == NULL || of == NULL) {
                    127:                printf("Cannot read input or write output.\n");
                    128:                exit(1);
                    129:        }
                    130:        while (fgets(line, sizeof line, ifile) != NULL) {
                    131:                if (strncmp(line, "#if", (size_t) 3) == 0) {
                    132:                        savech = ch;
                    133:                        fprintf(of, line);
                    134:                        continue;
                    135:                } else if (strncmp(line, "#else", (size_t) 5) == 0) {
                    136:                        if (savech == -1)
                    137:                                fprintf(stderr, "WARNING: ifdef/endif mismatch!\n");
                    138:                        else
                    139:                                ch = savech;
                    140:                        fprintf(of, line);
                    141:                        continue;
                    142:                } else if (strncmp(line, "#endif", (size_t) 6) == 0) {
                    143:                        savech = -1;
                    144:                        fprintf(of, line);
                    145:                        continue;
                    146: #ifdef MAC
                    147:                } else if (strncmp(line, "#MENU", (size_t) 5) == 0) {
                    148:                        inmenu = 1;
                    149:                        continue;
                    150: #endif
                    151:                } else if (strncmp(line, "\t\"", (size_t) 2) != 0) {
                    152:                        fprintf(of, line);
                    153:                        ch = 0;
                    154:                        continue;
                    155:                }
                    156:                extract(comname, line);
                    157:                if (strcmp(comname, "unbound") == 0)
                    158:                        comnum = 12345;
                    159:                else {
                    160: #ifdef MAC
                    161:                        which = "commands";
                    162: #endif
                    163:                        comnum = matchcmd(commands, comname);
                    164: #ifdef MAC
                    165:                        if (comnum < 0 && inmenu) {
                    166:                                comnum = matchvar(variables, comname);
                    167:                                which = "variables";
                    168:                        }
                    169: #endif
                    170:                        if (comnum < 0) {
                    171: #ifdef MAC
                    172:                                fprintf(stderr, "Warning: cannot find item \"%s\".\n", comname);
                    173: #else
                    174:                                fprintf(stderr, "Warning: cannot find command \"%s\".\n", comname);
                    175: #endif
                    176:                                errors += 1;
                    177:                                comnum = 12345;
                    178:                        }
                    179:                }
                    180: #ifdef MAC
                    181:                if(inmenu) {
                    182:                        if (comnum == 12345)
                    183:                                fprintf(of, "   (data_obj *) 0,\n");
                    184:                        else
                    185:                                fprintf(of, "   (data_obj *) &%s[%d],\n",which, comnum);
                    186:                }
                    187:                else {
                    188: #endif
                    189:                if (comnum == 12345)
                    190:                        fprintf(of, "   (data_obj *) 0,                 /* %s */\n", PPchar(ch++));
                    191:                else
                    192:                        fprintf(of, "   (data_obj *) &commands[%d],     /* %s */\n", comnum, PPchar(ch++));
                    193:        }
                    194: #ifdef MAC
                    195:        }
                    196: #endif
                    197:        fclose(of);
                    198:        fclose(ifile);
                    199:        exit(errors);
                    200: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.