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