|
|
1.1 ! root 1: # include "runup.h" ! 2: # define NEWN 100 ! 3: # define NEWCH 2000 ! 4: struct newfile news[NEWN]; ! 5: int lgout; ! 6: long ins1, ins2, add; ! 7: append(argc,argv) ! 8: char *argv[]; ! 9: { ! 10: FILE *foth, *fcp; ! 11: int i; ! 12: char ln[200], nfile [100]; ! 13: long mappos(); ! 14: if (argc<=1) return; ! 15: sprintf(nfile, "%s.x", newplace); ! 16: if (access(nfile,6)!=0) /* not there */ ! 17: { ! 18: fcp = fopen(newplace, "r"); ! 19: foth = fopen(nfile, "w"); ! 20: assert(fcp!=NULL); ! 21: assert(foth!=NULL); ! 22: copyn(fcp, foth, 9999999L); ! 23: fclose(fcp); ! 24: fclose(foth); ! 25: } ! 26: foth = fopen(nfile, "a"); ! 27: svmove(newplace); ! 28: assert(foth!=NULL); ! 29: for(i=1; i<argc; i++) ! 30: { ! 31: if (chatty) printf("%s\n",argv[i]); ! 32: if (argv[i][0] =='/') ! 33: strcpy(ln, argv[i]); ! 34: else ! 35: sprintf(ln, "%s/%s", rundir, argv[i]); ! 36: fcp= fopen(ln,"r"); ! 37: assert(fcp!=NULL); ! 38: while (fgets(ln, 200, fcp)) ! 39: fputs(ln, foth); ! 40: if (ln[0] != '\n') fputs("\n",foth); ! 41: fclose(fcp); ! 42: } ! 43: fclose(foth); ! 44: } ! 45: ! 46: /* fix up Ind.ic file: make table of NN->In correspondences */ ! 47: fixic() ! 48: { ! 49: FILE *fio, *fin, *fnn; ! 50: char indln[100]; long ind_st; int ind_lg; char ind_nm[100]; ! 51: char nnln[100]; long nn_st; int nn_lg; char nn_nm[100]; ! 52: int bibno; ! 53: long lother, posnnic, atol(); ! 54: struct newfile *newp; ! 55: struct bibfile *bp; ! 56: unlink("XXIND"); ! 57: link("XInd.ic", "XXIND"); ! 58: unlink("XInd.ic"); ! 59: fio = fopen("XXIND", "r"); ! 60: fin = fopen("XInd.ic", "w"); ! 61: fnn = fopen("NN.ic", "r"); ! 62: assert(fio!=NULL); ! 63: assert(fin!=NULL); ! 64: assert(fnn!=NULL); ! 65: newp=news; ! 66: /* copy Ind file up to last previous "other" entry */ ! 67: while (fgets(indln, 100, fio)) ! 68: { ! 69: register char *s1, *s2; ! 70: /* sscanf(indln, "%[^:]:%ld,%d", ind_nm, &ind_st, &ind_lg); */ ! 71: /* the previous line has been replaced for efficiency's sake */ ! 72: s1 = ind_nm; s2 = indln; ! 73: while (*s2!=':') *s1++ = *s2++; ! 74: *s1=0; ! 75: ind_st = atol(++s2); ! 76: while (*s2++!=','); ! 77: ind_lg = atoi(s2); ! 78: if (bcmp (newplace, 999999L, ind_nm, ind_st) == '<') ! 79: break; ! 80: fputs(indln, fin); ! 81: lother = ind_st+ind_lg; ! 82: } ! 83: # if D1 ! 84: printf("last IND entry was %s lother %ld\n", indln, lother); ! 85: # endif ! 86: ins1=ftell(fin); ! 87: for (posnnic=0; fgets(nnln, 100, fnn); posnnic = ftell(fnn)) ! 88: { ! 89: register char *s1, *s2; ! 90: # if D1 ! 91: printf("Line from NN %s", nnln); ! 92: # endif ! 93: /* sscanf(nnln, "%[^:]:%ld,%d", nn_nm, &nn_st, &nn_lg); */ ! 94: /* the previous line has been replaced for efficiency's sake */ ! 95: s1 = nn_nm; s2 = nnln; ! 96: while (*s2!=':') *s1++ = *s2++; ! 97: *s1=0; ! 98: nn_st = atol(++s2); ! 99: while (*s2++!=','); ! 100: nn_lg = atoi(s2); ! 101: if (sscanf(lastsl(nn_nm), "bib%d", &bibno)==1) /* bib file */ ! 102: { ! 103: for(bp=bibs; bp->bibfno>=0; bp++) ! 104: { ! 105: if (bp->bibfno == bibno) ! 106: { ! 107: newp->nn_ic = posnnic; ! 108: newp->new_ic = mappos(bp->bibival); ! 109: newp++; ! 110: assert (newp< news+NEWN); ! 111: break; ! 112: } ! 113: } ! 114: # if D1 ! 115: printf("bib file no. %d is bp %d\n", bibno, bp-bibs); ! 116: # endif ! 117: assert(bp->bibfno>=0); ! 118: } ! 119: else /* file added */ ! 120: { ! 121: newp->nn_ic = posnnic; ! 122: newp->new_ic = ftell(fin); ! 123: fprintf(fin, "%s:%ld,%d\n", newplace, lother, nn_lg); ! 124: # if D1 ! 125: printf("new at lot %ld from nn.st %ld nn.lg %d\n",lother,nn_st, nn_lg); ! 126: printf("new mapped from %ld to %ld\n", posnnic, lother); ! 127: # endif ! 128: newp++; ! 129: assert(newp<news+NEWN); ! 130: lother += nn_lg; ! 131: } ! 132: } ! 133: add = ftell(fin)-ins1; ! 134: ins2 = ftell(fin); ! 135: # if D1 ! 136: printf("From %ld (file 1) or %ld (file2) add %ld\n",ins1,ins2,add); ! 137: # endif ! 138: newp->nn_ic= -1; ! 139: /* copy rest of Ind file */ ! 140: fputs(indln, fin); ! 141: while (fgets(indln, 100, fio)) ! 142: { ! 143: fputs(indln, fin); ! 144: } ! 145: # if D1 ! 146: for(newp=news; newp->nn_ic>=0; newp++) ! 147: printf("new map %ld to %ld\n",newp->nn_ic, newp->new_ic); ! 148: # endif ! 149: lgout = ftell(fin) > 65536L; ! 150: fclose(fin); ! 151: } ! 152: ! 153: lastsl(s) ! 154: char *s; ! 155: { ! 156: char *p; ! 157: for(p=s; *p; p++) ! 158: if (*p=='/') ! 159: s=p+1; ! 160: return(s); ! 161: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.