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: if(argc>1)
48: { i=atoi(argv[1]);
49: if(i<0) i= -i;
50: len=(i<1?1:i);
51: }
52: else len=80;
53: for(;;)
54: { if(next==0) ntab=0;
55: else if(tab[next%8]<1)
56: { ntab=2;
57: next+= tab[next%8];
58: next += tab[next%8];
59: }
60: else
61: { ntab=1;
62: next += tab[next%8];
63: }
64: if(getit()<=0) {clean(); exit(0);}
65: if(elen+next>=len)
66: { clean();
67: next=slen;
68: putit(0);
69: }
70: else
71: { next += elen;
72: putit(ntab);
73: }
74: }
75: }
Defined functions
clean
defined in line
39; used 2 times
getit
defined in line
11; used 1 times
main
defined in line
43;
never used
putit
defined in line
34; used 2 times
Defined variables
alen
defined in line
8; used 3 times
buf
defined in line
10; used 2 times
elen
defined in line
9; used 6 times
next
defined in line
6; used 12 times
slen
defined in line
7; used 5 times
tab
defined in line
5; used 6 times