|
|
1.1 root 1: /*
2: * Print horizontally as possible, thus saving paper
3: */
4: #include <stdio.h>
5: int tab[8] = {8,7,6,5,4,3,2,1};
6: int next; /*next output position on line*/
7: int slen; /*length at start of line*/
8: int alen; /*actual length*/
9: int elen; /*length on current line*/
10: char buf[256];
11: getit()
12: { register int i;
13: register c;
14: slen=alen=elen=0;
15: for(i=0;;i++)
16: { buf[i]=c=getchar();
17: switch(c)
18: {
19: case '\n': if(i==0) continue;
20: case EOF:
21: alen=i;
22: return(i);
23: case '\t':
24: elen+= tab[(next+elen)%8];
25: slen += tab[slen%8];
26: continue;
27: default:
28: elen++;
29: slen++;
30: continue;
31: }
32: }
33: }
34: putit(ntab)
35: { register int i;
36: for(i=0;i<ntab;i++) putchar('\t');
37: for(i=0;i<alen;i++) putchar(buf[i]);
38: }
39: clean()
40: {
41: putchar('\n');
42: }
43: main(argc,argv) char *argv[];
44: { int len,ntab;
45: int i;
46: len=80;
47: for( ; argc>1; argv++,argc--) {
48: if(access(argv[1],04)==0) {
49: freopen(argv[1],"r",stdin);
50: continue;
51: }
52: i=atoi(argv[1]);
53: if(i<0) i= -i;
54: len=(i<1?1:i);
55: }
56: for(;;)
57: { if(next==0) ntab=0;
58: else if(tab[next%8]<1)
59: { ntab=2;
60: next+= tab[next%8];
61: next += tab[next%8];
62: }
63: else
64: { ntab=1;
65: next += tab[next%8];
66: }
67: if(getit()<=0) {clean(); exit(0);}
68: if(elen+next>=len)
69: { clean();
70: next=slen;
71: putit(0);
72: }
73: else
74: { next += elen;
75: putit(ntab);
76: }
77: }
78: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.