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  read(),
  15:         write();
  16: 
  17: int mac_fd;
  18: 
  19: mac_io(fcn, ptr, nbytes)
  20: int (*fcn)();
  21: char    *ptr;
  22: {
  23:     int nio;
  24: 
  25:     if ((nio = (*fcn)(mac_fd, ptr, nbytes)) != nbytes)
  26:         fprintf(stderr, "[Macro %s error: %d got %d]",
  27:              (fcn == read) ? "read" : "write",
  28:              nbytes,
  29:              nio);
  30: }
  31: 
  32: #define NEWWAY  1
  33: #define OLDWAY  0
  34: 
  35: int int_how = NEWWAY;
  36: 
  37: /* Formatting int's the old way or the new "improved" way? */
  38: 
  39: #if vax || pdp11
  40: long htonl(x)
  41: register long x;
  42: {
  43:     return( (((x >>  0) & 0377) << 24) |
  44:         (((x >>  8) & 0377) << 16) |
  45:         (((x >> 16) & 0377) <<  8) |
  46:         (((x >> 24) & 0377) <<  0) );
  47: }
  48: 
  49: short htons(x)
  50: register short x;
  51: {
  52:     return( (((x >>  0) & 0377) << 8) |
  53:         (((x >>  8) & 0377) << 0) );
  54: }
  55: 
  56: long ntohl(x)
  57: register long x;
  58: {
  59:     return( (((x >>  0) & 0377) << 24) |
  60:         (((x >>  8) & 0377) << 16) |
  61:         (((x >> 16) & 0377) <<  8) |
  62:         (((x >> 24) & 0377) <<  0) );
  63: }
  64: 
  65: short ntohs(x)
  66: register short x;
  67: {
  68:     return( (((x >>  0) & 0377) << 8) |
  69:         (((x >>  8) & 0377) << 0) );
  70: }
  71: #else
  72: long htonl(x)
  73: register long x;
  74: {
  75:     return(x);
  76: }
  77: 
  78: short htons(x)
  79: register short x;
  80: {
  81:     return(x);
  82: }
  83: 
  84: long ntohl(x)
  85: register long x;
  86: {
  87:     return(x);
  88: }
  89: 
  90: short ntohs(x)
  91: register short x;
  92: {
  93:     return(x);
  94: }
  95: #endif
  96: 
  97: int_fmt(i)
  98: {
  99:     if (int_how == NEWWAY)
 100:         return ntohl(i);
 101:     return i;
 102: }
 103: 
 104: read_and_write_macros(filein)
 105: char    *filein;
 106: {
 107:     int namelen,
 108:         bodylen,
 109:         tmp;
 110:     char    macname[256],
 111:         macbuf[1024];
 112: 
 113:     if ((mac_fd = open(filein, 0)) == -1)
 114:         fprintf(stderr, "Cannot open %s\n", filein);
 115: 
 116:     while (read(mac_fd, (char *) &tmp, sizeof tmp) == (sizeof tmp)) {
 117: retry:      bodylen = int_fmt(tmp);
 118:         if (bodylen <= 0 || bodylen > 10000) {
 119:             if (int_how == NEWWAY) {
 120:                 int_how = OLDWAY;
 121:                 goto retry;
 122:             } else {
 123:                 fprintf(stderr, "I don't think \"%s\" is an old style JOVE macro file\n", filein);
 124:                 exit(1);
 125:             }
 126:         }
 127:         mac_io(read, (char *) &namelen, sizeof namelen);
 128:         namelen = int_fmt(namelen);
 129:         mac_io(read, macname, namelen);
 130:         mac_io(read, macbuf, bodylen);
 131:         output_new_definition(macname, macbuf, bodylen);
 132:     }
 133: }
 134: 
 135: pr_putc(c)
 136: {
 137:     if (c == '\\' || c == '^')
 138:         putchar('\\');
 139:      else if (c < ' ' || c == '\177') {
 140:         putchar('^');
 141:         c = (c == '\177') ? '?' : (c + '@');
 142:     }
 143:     putchar(c);
 144: }
 145: 
 146: output_new_definition(name, body, bodylen)
 147: char    *name,
 148:     *body;
 149: {
 150:     int i;
 151: 
 152:     fprintf(stdout, "define-macro %s ", name);
 153:     for (i = 0; i < bodylen; i++)
 154:         pr_putc(body[i]);
 155:     putchar('\n');
 156: }
 157: 
 158: main(argc, argv)
 159: char    *argv[];
 160: {
 161:     if (argc != 2) {
 162:         fprintf(stderr, "usage: macvert <old-style-macro-file>\n");
 163:         exit(1);
 164:     }
 165: 
 166:     read_and_write_macros(argv[1]);
 167: }

Defined functions

htonl defined in line 72; never used
htons defined in line 78; never used
int_fmt defined in line 97; used 2 times
mac_io defined in line 19; used 3 times
main defined in line 158; never used
ntohl defined in line 84; used 1 times
ntohs defined in line 90; never used
output_new_definition defined in line 146; used 1 times
pr_putc defined in line 135; used 3 times
read_and_write_macros defined in line 104; used 1 times

Defined variables

int_how defined in line 35; used 3 times
mac_fd defined in line 17; used 3 times

Defined macros

NEWWAY defined in line 32; used 3 times
OLDWAY defined in line 33; used 1 times
Last modified: 1988-03-15
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2345
Valid CSS Valid XHTML 1.0 Strict