|
|
1.1 root 1: # include "runup.h"
2: # include "sys/types.h"
3: # include "sys/dir.h"
4: # include "sys/stat.h"
5: # define NB 100
6: struct bibfile bibs[NB];
7: # define BIBCH 1000
8: char bibbuff[BIBCH];
9: char *bibcp = bibbuff;
10:
11: readbib()
12: {
13: glist();
14: # if D1
15: printf("List of bib files\n");
16: { struct bibfile *bp;;
17: for(bp=bibs; bp->bibfno>=0; bp++)
18: printf(" bib%d\n", bp->bibfno);
19: }
20: # endif
21: gdata();
22: # if D1
23: printf("Contents\n");
24: {struct bibfile *bp;
25: for(bp=bibs; bp->bibfno>=0; bp++)
26: printf("bib%d is %s %ld,%d\n",
27: bp->bibfno, bp->bibfref, bp->bibfstrt,bp->bibfleng);
28: }
29: # endif
30: }
31: glist()
32: {
33: struct bibfile *bibp = bibs;
34: int fd;
35: struct stat sbuf;
36: char ftr[100];
37: long tref;
38: struct direct dir;
39: sprintf(ftr, "%s/Ind.ib", Master);
40: assert(stat (ftr, &sbuf)==0);
41: tref=sbuf.st_mtime;
42: fd = open(".", 0);
43: assert(fd>0);
44: while(read(fd, &dir, sizeof(dir))==sizeof(dir))
45: {
46: if (dir.d_ino==0)
47: continue;
48: if (strncmp(dir.d_name, "bib", 3) != SAME)
49: continue;
50: strncpy(ftr, dir.d_name, 14);
51: assert(stat(ftr, &sbuf) ==0);
52: if (sbuf.st_mtime<=tref)
53: {
54: fprintf(stderr, "File %s too old - reenter change\n", ftr);
55: continue;
56: }
57: bibp++->bibfno = atoi(dir.d_name+3);
58: assert(bibp<bibs+NB);
59: }
60: bibp -> bibfno = -1;
61: close(fd);
62: }
63: gdata()
64: {
65: struct bibfile *bibp, *bp;
66: FILE *fb;
67: int junk1, junk2, leng;
68: long start;
69: char junk[20], junk3[20], name[50], *np;
70: char fnam[20], bibln[100];
71: for(bibp=bibs; bibp->bibfno>=0; bibp++)
72: {
73: sprintf(fnam, "bib%03d", bibp->bibfno);
74: fb = fopen(fnam, "r");
75: assert(fb!=NULL);
76: assert(fgets(bibln, 100, fb)!=0);
77: sscanf(bibln, "%s %s %d %d %s %ld %d",
78: junk, name, &junk1, &junk2, junk3, &start, &leng);
79: assert(name[0]=='/');
80: fclose(fb);
81: for(bp=bibs; bp<bibp; bp++)
82: {
83: if (strcmp(name, bp->bibfref)==SAME)
84: {
85: bibp->bibfref = bp->bibfref;
86: break;
87: }
88: }
89: if (bp==bibp) /* not previously used file name */
90: {
91: bibp->bibfref = bibcp;
92: np=name;
93: while (*bibcp++ = *np++);
94: }
95: bibp->bibfstrt = start;
96: bibp->bibfleng = leng;
97: }
98: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.