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