|
|
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: /* Macvert converts old style macro files to the new style. The old ! 9: style macros were binary files, the new ones are text files suitable ! 10: for loading with the "source" command of JOVE. */ ! 11: ! 12: #include <stdio.h> ! 13: ! 14: extern int ! 15: read(), ! 16: write(); ! 17: ! 18: static void ! 19: output_new_definition(); ! 20: ! 21: static int mac_fd; ! 22: ! 23: static void ! 24: mac_io(fcn, ptr, nbytes) ! 25: int (*fcn)(); ! 26: char *ptr; ! 27: int nbytes; ! 28: { ! 29: int nio; ! 30: ! 31: if ((nio = (*fcn)(mac_fd, ptr, nbytes)) != nbytes) ! 32: fprintf(stderr, "[Macro %s error: %d got %d]", ! 33: (fcn == read) ? "read" : "write", ! 34: nbytes, ! 35: nio); ! 36: } ! 37: ! 38: #define NEWWAY 1 ! 39: #define OLDWAY 0 ! 40: ! 41: static int int_how = NEWWAY; ! 42: ! 43: /* Formatting int's the old way or the new "improved" way? */ ! 44: ! 45: #if defined(vax) || defined(pdp11) ! 46: ! 47: static long ! 48: ntohl(x) ! 49: register long x; ! 50: { ! 51: return( (((x >> 0) & 0377) << 24) | ! 52: (((x >> 8) & 0377) << 16) | ! 53: (((x >> 16) & 0377) << 8) | ! 54: (((x >> 24) & 0377) << 0) ); ! 55: } ! 56: ! 57: #else ! 58: ! 59: static long ! 60: ntohl(x) ! 61: register long x; ! 62: { ! 63: return(x); ! 64: } ! 65: ! 66: #endif ! 67: ! 68: static int ! 69: int_fmt(i) ! 70: int i; ! 71: { ! 72: if (int_how == NEWWAY) { ! 73: /* Note: using ntohl() for an int is not portable! */ ! 74: return (int) ntohl((long) i); ! 75: } ! 76: return i; ! 77: } ! 78: ! 79: static void ! 80: read_and_write_macros(filein) ! 81: char *filein; ! 82: { ! 83: int namelen, ! 84: bodylen, ! 85: tmp; ! 86: char macname[256], ! 87: macbuf[1024]; ! 88: ! 89: if ((mac_fd = open(filein, 0)) == -1) ! 90: fprintf(stderr, "Cannot open %s\n", filein); ! 91: ! 92: while (read(mac_fd, (char *) &tmp, sizeof tmp) == (sizeof tmp)) { ! 93: retry: bodylen = int_fmt(tmp); ! 94: if (bodylen <= 0 || bodylen > 10000) { ! 95: if (int_how == NEWWAY) { ! 96: int_how = OLDWAY; ! 97: goto retry; ! 98: } else { ! 99: fprintf(stderr, "I don't think \"%s\" is an old style JOVE macro file\n", filein); ! 100: exit(1); ! 101: } ! 102: } ! 103: mac_io(read, (char *) &namelen, (int) (sizeof namelen)); ! 104: namelen = int_fmt(namelen); ! 105: mac_io(read, macname, namelen); ! 106: mac_io(read, macbuf, bodylen); ! 107: output_new_definition(macname, macbuf, bodylen); ! 108: } ! 109: } ! 110: ! 111: static void ! 112: pr_putc(c) ! 113: int c; ! 114: { ! 115: if (c == '\\' || c == '^') ! 116: putchar('\\'); ! 117: else if (c < ' ' || c == '\177') { ! 118: putchar('^'); ! 119: c = (c == '\177') ? '?' : (c + '@'); ! 120: } ! 121: putchar(c); ! 122: } ! 123: ! 124: static void ! 125: output_new_definition(name, body, bodylen) ! 126: char *name, ! 127: *body; ! 128: int bodylen; ! 129: { ! 130: int i; ! 131: ! 132: fprintf(stdout, "define-macro %s ", name); ! 133: for (i = 0; i < bodylen; i++) ! 134: pr_putc(body[i]); ! 135: putchar('\n'); ! 136: } ! 137: ! 138: int ! 139: main(argc, argv) ! 140: int argc; ! 141: char *argv[]; ! 142: { ! 143: if (argc != 2) { ! 144: fprintf(stderr, "usage: macvert <old-style-macro-file>\n"); ! 145: exit(1); ! 146: } ! 147: ! 148: read_and_write_macros(argv[1]); ! 149: return 0; ! 150: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.