|
|
1.1 root 1: /*
2: * gt - converts troff -g output to troff -t
3: */
4:
5: #define N 65
6: char obuf[512];
7: char ibuf[512];
8: char *ibufp ibuf;
9: char *eibufp ibuf;
10: char *obufp obuf;
11: int id;
12: int stop 100;
13: int first 1;
14: int pn 0;
15: int skip 0;
16: int xxx;
17:
18: main(argc,argv)
19: int argc;
20: char **argv;
21: {
22: register i, j;
23:
24: while((--argc > 0) && ((++argv)[0][0]=='-')){
25: switch(argv[0][1]){
26: case 's':
27: stop = atoi(&argv[0][2]);
28: continue;
29: case 'k':
30: skip = atoi(&argv[0][2]);
31: skip++;
32: continue;
33: case 'o':
34: getpn(&argv[0][2]);
35: continue;
36: default:
37: continue;
38: }
39: }
40: if(argc){
41: if((id=open(argv[0],0)) < 0){
42: printf("Cannot open: %s\n",argv[0]);
43: exit(1);
44: }
45: }
46: while(1){
47: oput(i=igetc());
48: if(i == 0100){ /*init*/
49: if(pn++ > stop){
50: pn = 1;
51: trailer();
52: }
53: if(skip){
54: skip--;
55: if(!skip)oput(0100);
56: }
57: if((i=igetc()) != 0111){ /*stop*/
58: oput(i);
59: continue;
60: }else{
61: switch(i=igetc()){
62: case 'f':
63: for(j=8; j>0; j--)igetc();
64: if(first && !skip){
65: first = 0;
66: oput(0140);
67: }
68: continue;
69: case 0:
70: trailer();
71: ex();
72: default:
73: oput(i);
74: continue;
75: }
76: }
77: }
78: }
79: }
80: trailer(){
81: register j;
82:
83: for(j=N; j>0; j--)oput(0140);
84: oput(0111);
85: for(j=8; j>0; j--)oput(0101);
86: }
87: ex(){
88: oflush();
89: exit(0);
90: }
91: igetc(){
92: register i;
93:
94: if(ibufp >= eibufp){
95: if((i=read(id,ibuf,512)) <= 0)ex();
96: eibufp = ibuf + i;
97: ibufp = ibuf;
98: }
99: return((*ibufp++) & 0377);
100: }
101: oput(i)
102: char i;
103: {
104: if(skip)return;
105: *obufp++ = i;
106: if(obufp >= &obuf[512])oflush();
107: }
108: oflush(){
109:
110: if(obufp > obuf)
111: write(1,obuf,obufp-obuf);
112: obufp = obuf;
113: }
114: getpn(){}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.