|
|
1.1 root 1: # include "signal.h"
2: # ifdef SVR2
3: typedef int (*SIG_TYP)();
4: # endif
5: # include "refer..c"
6: main(argc,argv)
7: char *argv[];
8: {
9: char line[LLINE], *s;
10: int nodeflt =0;
11:
12: signals();
13: while (argc>1 &&argv[1][0] == '-')
14: {
15: switch(argv[1][1])
16: {
17: case 'e':
18: endpush++; break;
19: case 'l':
20: labels++;
21: s = argv[1]+2;
22: nmlen = atoi(s);
23: for ( ; *s; s++)
24: if (*s == ',' || *s =='_' || *s =='"')
25: break;
26: if (*s==0) break;
27: switch(*s++)
28: {
29: case ',': labblkflg=0; break;
30: case '_': labblkflg=" "; break;
31: case '"':
32: labblkflg=s;
33: while (*s && *s != '"')
34: s++;
35: *s++= 0; break;
36: }
37: dtlen = atoi(s);
38: break;
39: case 'k':
40: keywant = (argv[1][2] ? argv[1][2] : 'L');
41: labels++;
42: break;
43: case 's':
44: sort++;
45: if (argv[1][2])
46: keystr= argv[1]+2;
47: break;
48: case 'p':
49: argc--; argv++;
50: *search++ = argv[1];
51: if (search-rdata>NSERCH)
52: err("too many -p options (%d)", NSERCH);
53: break;
54: case 'n':
55: nodeflt=1;
56: break;
57: case 'B':
58: nobracket++; /* falls through */
59: case 'b':
60: bare = (argv[1][2] == '1') ? 1 : 2;
61: break;
62: case 'c':
63: smallcaps = argv[1]+2;
64: break;
65: case 'a':
66: authrev = atoi (argv[1]+2);
67: if (authrev<=0)
68: authrev = 1000;
69: for(s=argv[1]+2; isdigit(*s); s++)
70: ;
71: if (*s==',') nocomma++;
72: break;
73: case 'd': /* reduce date to year only */
74: yearonly=1;
75: break;
76: case 'A': /* these fields get appended */
77: appfld = argv[1]+2;
78: break;
79: case 'I': /* these fields get ignored */
80: ignfld = argv[1]+2;
81: break;
82: case 'P': /* preserve original: no .ds's */
83: preserve = 1;
84: break;
85: case '%': pagecit=1; break;
86: case 'L':
87: labsepstr= argv[1]+2; break;
88: case 'r':
89: recycle = 1; break; /* recycle numbers at each $LIST$ */
90: }
91: argc--; argv++;
92: }
93: if (nodeflt==0)
94: *search++ = "/usr/dict/papers/Ind";
95:
96: if (sort)
97: endpush=1;
98:
99:
100: if (endpush)
101: sprintf(tfile, "/tmp/rj%da", getpid());
102: if (sort)
103: {
104: sprintf(ofile,"/tmp/rj%db", getpid());
105: sprintf(tdfile, "/tmp/rj%de", getpid());
106: ftemp = fopen(ofile, "w");
107: if (ftemp==NULL)
108: {
109: fprintf(stderr, "Can't open scratch file\n");
110: exit(1);
111: }
112: }
113:
114: do
115: {
116: if (argc>1)
117: {
118: if (in!=stdin)
119: fclose(in);
120: Iline=0;
121: if (strcmp(argv[1], "-")==SAME){
122: in = stdin;
123: printf(".lf 1 -\n");
124: }
125: else{
126: in = fopen(Ifile=argv[1], "r");
127: printf(".lf 1 %s\n",Ifile);
128: }
129: argc--; argv++;
130: if (in==NULL)
131: {
132: err("Can't read %s", Ifile);
133: continue;
134: }
135: }
136: while (input(line))
137: {
138: Iline++;
139: # ifdef D1
140: fprintf(stderr, "line %.20s\n",line);
141: # endif
142: if (prefix(".[", line) || (nobracket && line[0]!='\n'))
143: {
144: if (endpush && (fo==NULL || fo == stdout))
145: {
146: fo = fopen(tfile, "w");
147: # if D1
148: fprintf(stderr, "opened %s as %o\n",tfile,fo);
149: # endif
150: if (fo==NULL)
151: {
152: fprintf(stderr,"Can't open scratch file");
153: exit(1);
154: }
155: sep = 002; /* separate records without confusing sort..*/
156: }
157: doref(line);
158: }
159: else
160: output(line);
161: # if D1
162: fprintf(stderr, "past output/doref\n");
163: # endif
164: }
165: }
166: while (argc>1);
167: # if D1
168: fprintf(stderr, "before dumpold, endpush %d fo %o\n",endpush, fo);
169: # endif
170: widelab();
171: if (endpush && (fo!=NULL && fo != stdout))
172: dumpold();
173: output("");
174: fflush (ftemp);
175: if (sort)
176: recopy(ofile);
177: clfgrep();
178: # ifndef D1
179: cleanup();
180: # endif
181: exit(0);
182: }
183:
184: extern int intr();
185: signals()
186: {
187: SIG_TYP oldint;
188: oldint = signal(SIGINT, intr);
189: if (oldint== (SIG_TYP)1)
190: signal (SIGINT, 1);
191: signal (SIGHUP, intr);
192: signal (SIGPIPE, intr);
193: signal (SIGTERM, intr);
194: }
195:
196: intr()
197: {
198: int oldsig;
199: signal(SIGINT, 1);
200: cleanup();
201: exit(1);
202: }
203: cleanup()
204: {
205: if (tfile[0]) unlink(tfile);
206: if (gfile[0]) unlink(gfile);
207: if (ofile[0]) unlink(ofile);
208: if (hidenam[0]) unlink(hidenam);
209: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.