|
|
1.1 ! root 1: static char *sccsid = "@(#)unexpand.c 4.1 (Berkeley) 10/1/80"; ! 2: /* ! 3: * unexpand - put tabs into a file replacing blanks ! 4: */ ! 5: #include <stdio.h> ! 6: ! 7: char genbuf[BUFSIZ]; ! 8: char linebuf[BUFSIZ]; ! 9: int all; ! 10: ! 11: main(argc, argv) ! 12: int argc; ! 13: char *argv[]; ! 14: { ! 15: register char *cp; ! 16: ! 17: argc--, argv++; ! 18: if (argv[0][0] == '-') { ! 19: if (strcmp(argv[0], "-a") != 0) { ! 20: fprintf(stderr, "usage: unexpand [ -a ] file ...\n"); ! 21: exit(1); ! 22: } ! 23: all++; ! 24: argc--, argv++; ! 25: } ! 26: do { ! 27: if (argc > 0) { ! 28: if (freopen(argv[0], "r", stdin) == NULL) { ! 29: perror(argv[0]); ! 30: exit(1); ! 31: } ! 32: argc--, argv++; ! 33: } ! 34: while (fgets(genbuf, BUFSIZ, stdin) != NULL) { ! 35: for (cp = linebuf; *cp; cp++) ! 36: continue; ! 37: if (cp > linebuf) ! 38: cp[-1] = 0; ! 39: tabify(all); ! 40: printf("%s", linebuf); ! 41: } ! 42: } while (argc > 0); ! 43: exit(0); ! 44: } ! 45: ! 46: tabify(c) ! 47: char c; ! 48: { ! 49: register char *cp, *dp; ! 50: register int dcol; ! 51: int ocol; ! 52: ! 53: ocol = 0; ! 54: dcol = 0; ! 55: cp = genbuf, dp = linebuf; ! 56: for (;;) { ! 57: switch (*cp) { ! 58: ! 59: case ' ': ! 60: dcol++; ! 61: break; ! 62: ! 63: case '\t': ! 64: dcol =+ 8; ! 65: dcol =& ~07; ! 66: break; ! 67: ! 68: default: ! 69: while (((ocol + 8) &~ 07) <= dcol) { ! 70: if (ocol + 1 == dcol) ! 71: break; ! 72: *dp++ = '\t'; ! 73: ocol =+ 8; ! 74: ocol =& ~07; ! 75: } ! 76: while (ocol < dcol) { ! 77: *dp++ = ' '; ! 78: ocol++; ! 79: } ! 80: if (*cp == 0 || c == 0) { ! 81: strcpy(dp, cp); ! 82: return; ! 83: } ! 84: *dp++ = *cp; ! 85: ocol++, dcol++; ! 86: } ! 87: cp++; ! 88: } ! 89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.