|
|
1.1 root 1: # include "runup.h"
2: # include "sys/types.h"
3: # include "sys/timeb.h"
4: # include "time.h"
5: # include "signal.h"
6: char *Master = "/usr/dict/papers";
7: char *newplace = "other";
8: char rundir[50];
9: int verbose=0;
10: int chatty=0;
11: int vhash=0;
12: long start;
13: extern int garbage();
14: main(argc,argv)
15: char *argv[];
16: {
17: int (*oldsig)();
18: /* this updates an index and files directly */
19: oldsig=signal(SIGINT, garbage);
20: if (oldsig==SIG_IGN) signal(SIGINT, SIG_IGN);
21: chatty = isatty(0);
22: while (argc>1)
23: {
24: if (argv[1][0]=='-')
25: switch(argv[1][1])
26: {
27: case 'p': /* switch default index set */
28: Master = argv[2];
29: argc-= 2;
30: argv+=2;
31: continue;
32: case 'n': /* new place for additions */
33: newplace = argv[2];
34: argc -= 2; argv += 2;
35: continue;
36: case 'v':
37: verbose = chatty = 1;
38: vhash = atoi(argv[1]+2);
39: # if D2
40: printf("vhash %d\n",vhash);
41: # endif
42:
43: argc--; argv++;
44: continue;
45: case 'c':
46: chatty = 1;
47: if (argv[1][1]=='0') chatty=0;
48: argc--;argv++;
49: continue;
50: }
51: break;
52: }
53: if (verbose)
54: {start=time(0); printf("start at %s", ctime(&start));}
55: getpwd(rundir);
56: if (verbose) printf("past getpwd got %.1f of %d sec.\n", tuse(), tlapse());
57: readbib();
58: if (bibs[0].bibfno<0 && argc<=1 ) {printf("No work\n"); exit(0);}
59: if (verbose) printf("past readbib got %.1f of %d sec.\n", tuse(), tlapse());
60: lock();
61: sortbib();
62: if (verbose) printf("past sortbib got %.1f of %d sec.\n", tuse(), tlapse());
63: assert(chdir(Master)==0);
64: if (verbose) printf("past chdir got %.1f of %d sec.\n", tuse(), tlapse());
65: copysource();
66: if (verbose) printf("past copysource got %.1f of %d sec.\n", tuse(), tlapse());
67: makenew(argc,argv);
68: if (verbose) printf("past makenew got %.1f of %d sec.\n", tuse(), tlapse());
69: append(argc,argv);
70: if (verbose) printf("past append got %.1f of %d sec.\n", tuse(), tlapse());
71: fixic();
72: if (verbose) printf("past fixic got %.1f of %d sec.\n", tuse(), tlapse());
73: fixib();
74: if (verbose) printf("past fixib got %.1f of %d sec.\n", tuse(), tlapse());
75: signal(SIGINT, SIG_IGN); /* too late-better finish rather than abort */
76: remove();
77: unlock();
78: if (verbose) printf("past remove got %.1f of %d sec.\n", tuse(), tlapse());
79: if (chatty) printf("Done\n");
80: }
81:
82: getpwd(s)
83: char *s;
84: {
85: int fpip[2], fr, fw;
86: pipe(fpip);
87: fr = fpip[0]; fw = fpip[1];
88: if (fork()==0)
89: {
90: close(1);
91: close(fr);
92: assert(dup(fw)==1);
93: close(fw);
94: execl ("/bin/pwd", "pwd", 0);
95: execl ("/usr/bin/pwd", "pwd", 0);
96: assert(0);
97: }
98: close(fw);
99: wait(0);
100: read(fr, s, 100);
101: close(fr);
102: trim(s);
103: assert(s[0]=='/');
104: }
105:
106: trim(s)
107: char *s;
108: {
109: while (*s) s++;
110: if (*--s=='\n') *s=0;
111: }
112:
113: double
114: tuse()
115: {
116: struct tbuffer {
117: long proc_user;
118: long proc_sys;
119: long child_user;
120: long child_sys;
121: } ;
122: struct tbuffer tb;
123: double t;
124: times(&tb);
125: t = (tb.proc_user+tb.proc_sys+tb.child_user+tb.child_sys);
126: return(t/60.0);
127: }
128:
129: tlapse()
130: {
131: return( (int) (time(0)-start));
132: }
133: char lockf[100];
134: lock()
135: {
136: int f;
137: sprintf(lockf, "%s/pub-lock.n", Master);
138: f = creat(lockf, 000);
139: if (f<0)
140: {
141: fprintf(stderr, "Someone else updating\n");
142: exit(1);
143: }
144: close(f);
145: }
146: unlock()
147: {
148: unlink(lockf);
149: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.