|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1989 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: char copyright[] = ! 20: "@(#) Copyright (c) 1989 The Regents of the University of California.\n\ ! 21: All rights reserved.\n"; ! 22: #endif /* not lint */ ! 23: ! 24: #ifndef lint ! 25: static char sccsid[] = "@(#)vis.c 1.2 (Berkeley) 6/29/90"; ! 26: #endif /* not lint */ ! 27: ! 28: #include <stdio.h> ! 29: #include <vis.h> ! 30: ! 31: int eflags, fold, foldwidth=80, none, markeol, debug; ! 32: ! 33: main(argc, argv) ! 34: char *argv[]; ! 35: { ! 36: extern char *optarg; ! 37: extern int optind; ! 38: extern int errno; ! 39: FILE *fp; ! 40: int ch; ! 41: ! 42: while ((ch = getopt(argc, argv, "nwctsobfF:ld")) != EOF) ! 43: switch((char)ch) { ! 44: case 'n': ! 45: none++; ! 46: break; ! 47: case 'w': ! 48: eflags |= VIS_WHITE; ! 49: break; ! 50: case 'c': ! 51: eflags |= VIS_CSTYLE; ! 52: break; ! 53: case 't': ! 54: eflags |= VIS_TAB; ! 55: break; ! 56: case 's': ! 57: eflags |= VIS_SAFE; ! 58: break; ! 59: case 'o': ! 60: eflags |= VIS_OCTAL; ! 61: break; ! 62: case 'b': ! 63: eflags |= VIS_NOSLASH; ! 64: break; ! 65: case 'F': ! 66: if ((foldwidth = atoi(optarg))<5) { ! 67: fprintf(stderr, ! 68: "vis: can't fold lines to less than 5 cols\n"); ! 69: exit(1); ! 70: } ! 71: /*FALLTHROUGH*/ ! 72: case 'f': ! 73: fold++; /* fold output lines to 80 cols */ ! 74: break; /* using hidden newline */ ! 75: case 'l': ! 76: markeol++; /* mark end of line with \$ */ ! 77: break; ! 78: #ifdef DEBUG ! 79: case 'd': ! 80: debug++; ! 81: break; ! 82: #endif ! 83: case '?': ! 84: default: ! 85: fprintf(stderr, ! 86: "usage: vis [-nwctsobf] [-F foldwidth]\n"); ! 87: exit(1); ! 88: } ! 89: argc -= optind; ! 90: argv += optind; ! 91: ! 92: if (*argv) ! 93: while (*argv) { ! 94: if ((fp=fopen(*argv, "r")) != NULL) ! 95: process(fp, *argv); ! 96: else ! 97: fprintf(stderr, "vis: %s: %s\n", *argv, ! 98: (char *)strerror(errno)); ! 99: argv++; ! 100: } ! 101: else ! 102: process(stdin, "<stdin>"); ! 103: exit(0); ! 104: } ! 105: ! 106: process(fp, filename) ! 107: FILE *fp; ! 108: char *filename; ! 109: { ! 110: static int col = 0; ! 111: register char *cp = "\0"+1; /* so *(cp-1) starts out != '\n' */ ! 112: register int c, rachar; ! 113: register char nc; ! 114: char buff[5]; ! 115: ! 116: c = getc(fp); ! 117: while (c != EOF) { ! 118: rachar = getc(fp); ! 119: if (none) { ! 120: cp = buff; ! 121: *cp++ = c; ! 122: if (c == '\\') ! 123: *cp++ = '\\'; ! 124: *cp = '\0'; ! 125: } else if (markeol && c == '\n') { ! 126: cp = buff; ! 127: if ((eflags & VIS_NOSLASH) == 0) ! 128: *cp++ = '\\'; ! 129: *cp++ = '$'; ! 130: *cp++ = '\n'; ! 131: *cp = '\0'; ! 132: } else ! 133: (void) vis(buff, (char)c, eflags, (char)rachar); ! 134: ! 135: cp = buff; ! 136: if (fold) { ! 137: #ifdef DEBUG ! 138: if (debug) ! 139: printf("<%02d,", col); ! 140: #endif ! 141: col = foldit(cp, col, foldwidth); ! 142: #ifdef DEBUG ! 143: if (debug) ! 144: printf("%02d>", col); ! 145: #endif ! 146: } ! 147: do { ! 148: putchar(*cp); ! 149: } while (*++cp); ! 150: c = rachar; ! 151: } ! 152: /* ! 153: * terminate partial line with a hidden newline ! 154: */ ! 155: if (fold && *(cp-1) != '\n') ! 156: printf("\\\n"); ! 157: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.