1*10821Ssam static char *sccsid = "@(#)fold.c 4.2 (Berkeley) 02/09/83"; 21018Sbill #include <stdio.h> 31018Sbill /* 41018Sbill * fold - fold long lines for finite output devices 51018Sbill * 61018Sbill * Bill Joy UCB June 28, 1977 71018Sbill */ 81018Sbill 91018Sbill int fold = 80; 101018Sbill 111018Sbill main(argc, argv) 121018Sbill int argc; 131018Sbill char *argv[]; 141018Sbill { 151018Sbill register c; 161018Sbill FILE *f; 171018Sbill char obuf[BUFSIZ]; 181018Sbill 191018Sbill argc--, argv++; 201018Sbill setbuf(stdout, obuf); 211018Sbill if (argc > 0 && argv[0][0] == '-') { 221018Sbill fold = 0; 231018Sbill argv[0]++; 241018Sbill while (*argv[0] >= '0' && *argv[0] <= '9') 25*10821Ssam fold *= 10, fold += *argv[0]++ - '0'; 261018Sbill if (*argv[0]) { 271018Sbill printf("Bad number for fold\n"); 281018Sbill exit(1); 291018Sbill } 301018Sbill argc--, argv++; 311018Sbill } 321018Sbill do { 331018Sbill if (argc > 0) { 341018Sbill if (freopen(argv[0], "r", stdin) == NULL) { 351018Sbill perror(argv[0]); 361018Sbill exit(1); 371018Sbill } 381018Sbill argc--, argv++; 391018Sbill } 401018Sbill for (;;) { 411018Sbill c = getc(stdin); 421018Sbill if (c == -1) 431018Sbill break; 441018Sbill putch(c); 451018Sbill } 461018Sbill } while (argc > 0); 471018Sbill exit(0); 481018Sbill } 491018Sbill 501018Sbill int col; 511018Sbill 521018Sbill putch(c) 531018Sbill register c; 541018Sbill { 551018Sbill register ncol; 561018Sbill 571018Sbill switch (c) { 581018Sbill case '\n': 591018Sbill ncol = 0; 601018Sbill break; 611018Sbill case '\t': 621018Sbill ncol = (col + 8) &~ 7; 631018Sbill break; 641018Sbill case '\b': 651018Sbill ncol = col ? col - 1 : 0; 661018Sbill break; 671018Sbill case '\r': 681018Sbill ncol = 0; 691018Sbill break; 701018Sbill default: 711018Sbill ncol = col + 1; 721018Sbill } 731018Sbill if (ncol > fold) 741018Sbill putchar('\n'), col = 0; 751018Sbill putchar(c); 761018Sbill switch (c) { 771018Sbill case '\n': 781018Sbill col = 0; 791018Sbill break; 801018Sbill case '\t': 81*10821Ssam col += 8; 82*10821Ssam col &= ~7; 831018Sbill break; 841018Sbill case '\b': 851018Sbill if (col) 861018Sbill col--; 871018Sbill break; 881018Sbill case '\r': 891018Sbill col = 0; 901018Sbill break; 911018Sbill default: 921018Sbill col++; 931018Sbill break; 941018Sbill } 951018Sbill } 96