home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************
- * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
- * is provided to you without charge, and with no warranty. You may give *
- * away copies of JOVE, including sources, provided that this notice is *
- * included in all the files. *
- ***************************************************************************/
-
- #define TXT_TO_C 1 /* must be a number for MAC compiler */
-
- #include "funcdefs.c"
-
- #ifdef MAC
- #include "vars.c"
- #endif
-
- #undef putchar /* From jove.h via funcdefs.c, conflicts with STDIO */
- #undef putc
- #undef getc
- #undef EOF
- #undef FILE
- #undef BUFSIZ
- #undef NULL
- #include <stdio.h>
-
- matchcmd(choices, what)
- register struct cmd choices[];
- register char *what;
- {
- register int len;
- int i,
- found = 0,
- save,
- exactmatch = -1;
-
- len = strlen(what);
- for (i = 0; choices[i].Name != 0; i++) {
- if (*what != *choices[i].Name)
- continue;
- #ifdef MAC /* see "left-margin" and "left-margin-here" */
- if (strcmp(what, choices[i].Name) == 0)
- #else
- if (strncmp(what, choices[i].Name, len) == 0)
- #endif
- return i;
- }
- return -1;
- }
-
- #ifdef MAC
- matchvar(choices, what)
- register struct variable choices[];
- register char *what;
- {
- register int len;
- int i,
- found = 0,
- save,
- exactmatch = -1;
-
- len = strlen(what);
- for (i = 0; choices[i].Name != 0; i++) {
- if (*what != *choices[i].Name)
- continue;
- if (strcmp(what, choices[i].Name) == 0)
- return i;
- }
- return -1;
- }
- #endif
-
- char *
- PPchar(c)
- int c;
- {
- static char str[16];
- char *cp = str;
-
- if (c & 0200) {
- c &= ~0200;
- strcpy(cp, "M-");
- cp += 2;
- }
- if (c == '\033')
- strcpy(cp, "ESC");
- #ifdef IBMPC
- else if (c == '\377')
- strcpy(cp, "M");
- #endif /* IBMPC */
- else if (c < ' ')
- (void) sprintf(cp, "C-%c", c + '@');
- else if (c == '\177')
- strcpy(cp, "^?");
- else
- (void) sprintf(cp, "%c", c);
- return str;
- }
-
- void
- extract(into, from)
- char *into,
- *from;
- {
- from += 2; /* Past tab and first double quote. */
- while ((*into = *from++) != '"')
- into += 1;
- *into = 0;
- }
-
-
- void
-
- #ifdef MAC
- _main() /* for Mac, so we can use redirection */
- #else
- main()
- #endif
- {
- FILE *ifile,
- *of;
- char line[100],
- #ifdef MAC
- *which,
- #endif
- comname[70];
- int comnum,
- ch,
- #ifdef MAC
- inmenu = 0,
- #endif
- savech = -1,
- errors = 0;
-
- ifile = stdin;
- of = stdout;
- if (ifile == NULL || of == NULL) {
- printf("Cannot read input or write output.\n");
- exit(1);
- }
- while (fgets(line, sizeof line, ifile) != NULL) {
- if (strncmp(line, "#if", 3) == 0) {
- savech = ch;
- fprintf(of, line);
- continue;
- } else if (strncmp(line, "#else", 5) == 0) {
- if (savech == -1)
- fprintf(stderr, "WARNING: ifdef/endif mismatch!\n");
- else
- ch = savech;
- fprintf(of, line);
- continue;
- } else if (strncmp(line, "#endif", 6) == 0) {
- savech = -1;
- fprintf(of, line);
- continue;
- #ifdef MAC
- } else if (strncmp(line, "#MENU", 5) == 0) {
- inmenu = 1;
- continue;
- #endif
- } else if (strncmp(line, "\t\"", 2) != 0) {
- fprintf(of, line);
- ch = 0;
- continue;
- }
- extract(comname, line);
- if (strcmp(comname, "unbound") == 0)
- comnum = 12345;
- else {
- #ifdef MAC
- which = "commands";
- #endif
- comnum = matchcmd(commands, comname);
- #ifdef MAC
- if (comnum < 0 && inmenu) {
- comnum = matchvar(variables, comname);
- which = "variables";
- }
- #endif
- if (comnum < 0) {
- #ifdef MAC
- fprintf(stderr, "Warning: cannot find item \"%s\".\n", comname);
- #else
- fprintf(stderr, "Warning: cannot find command \"%s\".\n", comname);
- #endif
- errors += 1;
- comnum = 12345;
- }
- }
- #ifdef MAC
- if(inmenu) {
- if (comnum == 12345)
- fprintf(of, " (data_obj *) 0,\n");
- else
- fprintf(of, " (data_obj *) &%s[%d],\n",which, comnum);
- }
- else {
- #endif
- if (comnum == 12345)
- fprintf(of, " (data_obj *) 0, /* %s */\n", PPchar(ch++));
- else
- fprintf(of, " (data_obj *) &commands[%d], /* %s */\n", comnum, PPchar(ch++));
- }
- #ifdef MAC
- }
- #endif
- fclose(of);
- fclose(ifile);
- exit(errors);
- }
-