Annotation of 43BSDReno/contrib/jove/macvert.c, revision 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: /* 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: }

unix.superglobalmegacorp.com

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