1*1018Sbill static char *sccsid = "@(#)fold.c 4.1 (Berkeley) 10/01/80"; 2*1018Sbill #include <stdio.h> 3*1018Sbill /* 4*1018Sbill * fold - fold long lines for finite output devices 5*1018Sbill * 6*1018Sbill * Bill Joy UCB June 28, 1977 7*1018Sbill */ 8*1018Sbill 9*1018Sbill int fold = 80; 10*1018Sbill 11*1018Sbill main(argc, argv) 12*1018Sbill int argc; 13*1018Sbill char *argv[]; 14*1018Sbill { 15*1018Sbill register c; 16*1018Sbill FILE *f; 17*1018Sbill char obuf[BUFSIZ]; 18*1018Sbill 19*1018Sbill argc--, argv++; 20*1018Sbill setbuf(stdout, obuf); 21*1018Sbill if (argc > 0 && argv[0][0] == '-') { 22*1018Sbill fold = 0; 23*1018Sbill argv[0]++; 24*1018Sbill while (*argv[0] >= '0' && *argv[0] <= '9') 25*1018Sbill fold =* 10, fold =+ *argv[0]++ - '0'; 26*1018Sbill if (*argv[0]) { 27*1018Sbill printf("Bad number for fold\n"); 28*1018Sbill exit(1); 29*1018Sbill } 30*1018Sbill argc--, argv++; 31*1018Sbill } 32*1018Sbill do { 33*1018Sbill if (argc > 0) { 34*1018Sbill if (freopen(argv[0], "r", stdin) == NULL) { 35*1018Sbill perror(argv[0]); 36*1018Sbill exit(1); 37*1018Sbill } 38*1018Sbill argc--, argv++; 39*1018Sbill } 40*1018Sbill for (;;) { 41*1018Sbill c = getc(stdin); 42*1018Sbill if (c == -1) 43*1018Sbill break; 44*1018Sbill putch(c); 45*1018Sbill } 46*1018Sbill } while (argc > 0); 47*1018Sbill exit(0); 48*1018Sbill } 49*1018Sbill 50*1018Sbill int col; 51*1018Sbill 52*1018Sbill putch(c) 53*1018Sbill register c; 54*1018Sbill { 55*1018Sbill register ncol; 56*1018Sbill 57*1018Sbill switch (c) { 58*1018Sbill case '\n': 59*1018Sbill ncol = 0; 60*1018Sbill break; 61*1018Sbill case '\t': 62*1018Sbill ncol = (col + 8) &~ 7; 63*1018Sbill break; 64*1018Sbill case '\b': 65*1018Sbill ncol = col ? col - 1 : 0; 66*1018Sbill break; 67*1018Sbill case '\r': 68*1018Sbill ncol = 0; 69*1018Sbill break; 70*1018Sbill default: 71*1018Sbill ncol = col + 1; 72*1018Sbill } 73*1018Sbill if (ncol > fold) 74*1018Sbill putchar('\n'), col = 0; 75*1018Sbill putchar(c); 76*1018Sbill switch (c) { 77*1018Sbill case '\n': 78*1018Sbill col = 0; 79*1018Sbill break; 80*1018Sbill case '\t': 81*1018Sbill col =+ 8; 82*1018Sbill col =& ~7; 83*1018Sbill break; 84*1018Sbill case '\b': 85*1018Sbill if (col) 86*1018Sbill col--; 87*1018Sbill break; 88*1018Sbill case '\r': 89*1018Sbill col = 0; 90*1018Sbill break; 91*1018Sbill default: 92*1018Sbill col++; 93*1018Sbill break; 94*1018Sbill } 95*1018Sbill } 96