BSD 3 development
[unix-history] / usr / src / cmd / refer / refer1.c
CommitLineData
42d6e430
BJ
1# include "signal.h"
2# include "refer..c"
3main(argc,argv)
4 char *argv[];
5{
6char line[LLINE], *s;
7int nodeflt =0;
8
9signals();
10while (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 while (*s)
21 if (*s++ == ',')
22 break;
23 dtlen = atoi(s);
24 break;
25 case 'k':
26 keywant = (argv[1][2] ? argv[1][2] : 'L');
27 labels++;
28 break;
29 case 's':
30 sort++;
31 if (argv[1][2])
32 keystr= argv[1]+2;
33 break;
34 case 'p':
35 argc--; argv++;
36 *search++ = argv[1];
37 if (search-rdata>NSERCH)
38 err("too many -p options (%d)", NSERCH);
39 break;
40 case 'n':
41 nodeflt=1;
42 break;
43 case 'b':
44 bare = (argv[1][2] == '1') ? 1 : 2;
45 break;
46 case 'c':
47 smallcaps = argv[1]+2;
48 break;
49 case 'a':
50 authrev = atoi (argv[1]+2);
51 if (authrev<=0)
52 authrev = 1000;
53 break;
54 }
55 argc--; argv++;
56 }
57if (nodeflt==0)
58 *search++ = "/usr/dict/papers/Ind";
59
60if (sort)
61 endpush=1;
62if (endpush)
63 {
64 sprintf(tfile, "/tmp/rj%da", getpid());
65 fo = fopen(tfile, "w");
66 if (fo==NULL)
67 {
68 fo = ftemp;
69 fprintf(stderr,"Can't open scratch file");
70 }
71 sep = 002; /* separate records without confusing sort..*/
72 }
73
74
75if (sort && !labels)
76 {
77 sprintf(ofile,"/tmp/rj%db", getpid());
78 ftemp = fopen(ofile, "w");
79 if (ftemp==NULL)
80 {
81 fprintf(stderr, "Can't open scratch file\n");
82 exit(1);
83 }
84 }
85
86do
87 {
88 if (argc>1)
89 {
90 fclose(in);
91 Iline=0;
92 in = fopen(Ifile=argv[1], "r");
93 argc--; argv++;
94 if (in==NULL)
95 {
96 err("Can't read %s", Ifile);
97 continue;
98 }
99 }
100 while (input(line))
101 {
102 Iline++;
103# ifdef D1
104 fprintf(stderr, "line %.20s\n",line);
105# endif
106 if (!prefix(".[", line))
107 output(line);
108 else
109 doref(line);
110# if D1
111 fprintf(stderr, "past output/doref\n");
112# endif
113 }
114 }
115 while (argc>1);
116if (endpush && fo!=NULL)
117 dumpold();
118output("", ftemp);
119if (sort && !labels)
120 recopy(ofile);
121clfgrep();
122cleanup();
123exit(0);
124}
125
126extern int intr();
127signals()
128{
129 int oldint;
130oldint = signal(SIGINT, &intr);
131if (oldint==1)
132 signal (SIGINT, 1);
133signal (SIGHUP, &intr);
134signal (SIGPIPE, &intr);
135signal (SIGTERM, &intr);
136}
137
138intr()
139{
140 int oldsig;
141signal(SIGINT, 1);
142cleanup();
143exit(1);
144}
145cleanup()
146{
147if (tfile[0]) unlink(tfile);
148if (gfile[0]) unlink(gfile);
149if (ofile[0]) unlink(ofile);
150if (hidenam[0]) unlink(hidenam);
151}