|
|
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.