Annotation of researchv10no/cmd/refer/update/runup4.c, revision 1.1

1.1     ! root        1: # include "runup.h"
        !             2: copysource()
        !             3: {
        !             4: struct bibfile *bibp;
        !             5: FILE *indco;
        !             6: FILE *indcn;
        !             7: FILE *fso;
        !             8: FILE *fnew;
        !             9: char indln[100], nowopen[100], newver[100], outline[100];
        !            10: int nbyte, off=0;
        !            11: long nowpos, copyn();
        !            12: int ind_lg; char ind_nm[100]; long ind_st;
        !            13: long indpos =0L, copl=0L, cnpl=0L;
        !            14: bibp=bibs;
        !            15: if (bibp->bibfno<0) /* no bib files */
        !            16:        {
        !            17:        link("Ind.ic", "XInd.ic");
        !            18:        return;
        !            19:        }
        !            20: nowopen[0]=0;
        !            21: indco = fopen("Ind.ic", "r");
        !            22: assert(indco!=NULL);
        !            23: indcn = fopen("XInd.ic", "w");
        !            24: assert(indcn!=NULL);
        !            25: while (fgets(indln, 100, indco))
        !            26:        {
        !            27:        register char *s1, *s2;
        !            28:        extern long atol();
        !            29:        copl += strlen(indln);
        !            30:        /* sscanf(indln, "%[^:]:%ld,%d", ind_nm, &ind_st, &ind_lg); */
        !            31:        /* the previous line has been replaced for efficiency's sake */
        !            32:        s1 = ind_nm; s2 = indln;
        !            33:        while (*s2!=':') *s1++ = *s2++;
        !            34:        *s1=0;
        !            35:        ind_st = atol(++s2);
        !            36:        while (*s2++!=',');
        !            37:        ind_lg = atoi(s2);
        !            38:        if (bibp->bibfno>=0)
        !            39:        switch (bcmp( bibp-> bibfref, bibp-> bibfstrt, ind_nm, ind_st))
        !            40:                {
        !            41:                case '>': break;
        !            42:                case '=':
        !            43: # if D1
        !            44: printf("match %s %ld %d\n",ind_nm,ind_st,ind_lg);
        !            45: # endif
        !            46:                if (chatty) printf("bib%03d\n",bibp->bibfno);
        !            47:                if (strcmp(bibp->bibfref, nowopen)!=SAME)
        !            48:                        {
        !            49:                        if (nowopen[0])
        !            50:                                wrapo(fso,fnew,  nowopen);
        !            51:                        strcpy (nowopen, bibp->bibfref);
        !            52:                        fso=fopen(nowopen, "r");
        !            53:                        assert(fso!=NULL);
        !            54:                        sprintf(newver, "%s.x", nowopen);
        !            55:                        fnew = fopen(newver, "w");
        !            56:                        assert(fnew!=NULL);
        !            57:                        nowpos=0;
        !            58:                        off=0;
        !            59:                        if (verbose) printf("Copying %s got %.1f of %d sec.\n",nowopen,tuse(),tlapse());
        !            60:                        }
        !            61: # if D1
        !            62: printf("copying from %ld to %ld\n", nowpos, bibp->bibfstrt);
        !            63: # endif
        !            64:                nowpos += copyn(fso, fnew, bibp->bibfstrt-nowpos);
        !            65: # if D2
        !            66: printf("nowpos now %ld\n",nowpos);
        !            67: # endif
        !            68:                nowpos += skipn(fso, bibp->bibfleng);
        !            69: # if D2
        !            70: printf("now pos now %ld\n",nowpos);
        !            71: # endif
        !            72:                nbyte= copyb(fnew, bibp);
        !            73: # if D1
        !            74: printf("nbyte %d fleng %d off %d\n",nbyte,bibp->bibfleng, off);
        !            75: # endif
        !            76:                if (nbyte>0)
        !            77:                sprintf(outline, "%s:%ld,%d\n", ind_nm, ind_st+off, nbyte);
        !            78:                fputs(outline, indcn);
        !            79:                cnpl += strlen(outline);
        !            80:                off += (int)(nbyte-bibp->bibfleng);
        !            81:                bibp->bibival = indpos;
        !            82:                ckpos(copl, cnpl);
        !            83: # if D1
        !            84:        printf("item copied; bibst %ld,%d off now %d\n",bibp->bibfstrt,bibp->bibfleng,off);
        !            85: # endif
        !            86:                bibp++;
        !            87:                continue;
        !            88:                case '<':
        !            89:                        fprintf(stderr, "Missing bib%03d ref %s:%ld,%d\n",
        !            90:                        bibp->bibfno, bibp->bibfref, bibp->bibfstrt,bibp->bibfleng);
        !            91:                        bibp++;
        !            92:                }
        !            93:        if (off!=0 &&strcmp(lastsl(nowopen), ind_nm)!=SAME)
        !            94:                {
        !            95: # if D1
        !            96:                printf("Reset offset since %s not %s\n",nowopen, ind_nm);
        !            97: # endif
        !            98:                off=0;
        !            99:                }
        !           100:        sprintf(outline, "%s:%ld,%d\n", ind_nm, ind_st+off, ind_lg);
        !           101:        fputs(outline, indcn);
        !           102:        cnpl += strlen(outline);
        !           103:        ckpos(indpos=copl, cnpl);
        !           104:        }
        !           105: if (nowopen[0])
        !           106: wrapo(fso,fnew, nowopen);
        !           107: fclose(indco); fclose(indcn);
        !           108: }
        !           109: long
        !           110: copyn(fo, fn, l)
        !           111:        FILE *fo, *fn;
        !           112:        long l;
        !           113: {
        !           114: int k; long j;
        !           115: # if D1
        !           116: printf("copyn %ld bytes\n",l);
        !           117: # endif
        !           118: j=0;
        !           119: while (l--)
        !           120:        {
        !           121:        k = getc(fo);
        !           122:        if (k<0) break;
        !           123:        j++;
        !           124:        putc(k,fn);
        !           125:        }
        !           126: # if D2
        !           127: printf("returns %ld bytes\n", j);
        !           128: # endif
        !           129: return(j);
        !           130: }
        !           131: skipn(fo, l)
        !           132:        FILE *fo;
        !           133: {
        !           134: int lu;
        !           135: lu =l;
        !           136: # if D1
        !           137: printf("skip %d bytes\n",l);
        !           138: # endif
        !           139: while (l && getc(fo)>=0) l--;
        !           140: # if D2
        !           141: printf("returns %d\n",lu-l);
        !           142: # endif
        !           143: return(lu-l);
        !           144: }
        !           145: copyb(fn, bibp)
        !           146:        FILE *fn;
        !           147:        struct bibfile *bibp;
        !           148: {
        !           149: FILE *fb;
        !           150: char ln[100];
        !           151: int k, j;
        !           152: sprintf(ln, "%s/bib%03d", rundir, bibp->bibfno);
        !           153: fb = fopen(ln, "r");
        !           154: fgets (ln, 100, fb);
        !           155: j=0;
        !           156: while ((k=getc(fb)) >=0)
        !           157:        {
        !           158:        j++;
        !           159:        putc(k, fn);
        !           160:        }
        !           161: fclose(fb);
        !           162: return(j);
        !           163: }
        !           164: wrapo(fso, fnew,  nowopen)
        !           165:        FILE *fso, *fnew;
        !           166:        char *nowopen;
        !           167: {
        !           168:        copyn(fso, fnew, 9999999L);
        !           169:        fclose(fso);
        !           170:        fclose(fnew);
        !           171:        svmove(nowopen);
        !           172: }
        !           173: bcmp( bpnm, bpst, nm, st)
        !           174:        long bpst, st;
        !           175:        char *bpnm, *nm;
        !           176: {
        !           177: int i; long l;
        !           178: char bn1[100], bn2[100];
        !           179: flcopy(bn1, bpnm);
        !           180: flcopy(bn2, nm);
        !           181: i = strcmp(bn1, bn2);
        !           182: if (i<0) return('<');
        !           183: if (i>0) return('>');
        !           184: l = bpst - st;
        !           185: if (l<0) return('<');
        !           186: if (l>0) return('>');
        !           187: return('=');
        !           188: }
        !           189: 
        !           190: flcopy(s, t)
        !           191:        char *s, *t;
        !           192: {
        !           193: if (t[0]=='/' )
        !           194:        strcpy(s,t);
        !           195: else
        !           196:        sprintf(s,"%s/%s", Master,t);
        !           197: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.