|
|
1.1 ! root 1: #ifndef lint ! 2: static char *sccsid = "@(#)refer7.c 4.3 (Berkeley) 4/23/86"; ! 3: #endif ! 4: ! 5: #include "refer..c" ! 6: ! 7: int newr[250]; ! 8: ! 9: chkdup(tag) ! 10: char *tag; ! 11: { ! 12: int i; ! 13: ! 14: for(i = 1; i <= refnum; i++) { ! 15: if (strcmp(reftable[i], tag)==0) ! 16: return(i); ! 17: } ! 18: reftable[refnum+1] = rtp; ! 19: if (refnum >= NRFTBL) ! 20: err("too many references (%d) for table", refnum); ! 21: strcpy(rtp, tag); ! 22: while (*rtp++); ! 23: if (rtp > reftext + NRFTXT) ! 24: err("reference pointers too long (%d)", rtp-reftext); ! 25: return(0); ! 26: } ! 27: ! 28: dumpold() ! 29: { ! 30: FILE *fi; ! 31: int c, g1 = 0, nr = 1; ! 32: ! 33: if (!endpush) ! 34: return; ! 35: fclose(fo); ! 36: fo = NULL; ! 37: if (sort) { ! 38: char comm[100]; ! 39: sprintf(comm, "sort -f %s -o %s", tfile, tfile); ! 40: system(comm); ! 41: } ! 42: fi = fopen(tfile, "r"); ! 43: if (fi == NULL) ! 44: return; ! 45: flout(); ! 46: fprintf(ftemp, ".]<\n"); ! 47: while ((c = getc(fi)) > 0) { ! 48: if (c == '\n') { ! 49: nr++; ! 50: g1 = 0; ! 51: } ! 52: if (c == sep) ! 53: c = '\n'; ! 54: if (c == FLAG) { ! 55: /* make old-new ref number table */ ! 56: char tb[20]; ! 57: char *s = tb; ! 58: while ((c = getc(fi)) != FLAG) ! 59: *s++ = c; ! 60: *s = 0; ! 61: if (g1++ == 0) ! 62: newr[atoi(tb)] = nr; ! 63: #if EBUG ! 64: fprintf(stderr, ! 65: "nr %d assigned to atoi(tb) %d\n",nr,atoi(tb)); ! 66: # endif ! 67: fprintf(ftemp,"%d", nr); ! 68: continue; ! 69: } ! 70: putc(c, ftemp); ! 71: } ! 72: fclose(fi); ! 73: #ifndef TF ! 74: unlink(tfile); ! 75: #endif ! 76: fprintf(ftemp, ".]>\n"); ! 77: } ! 78: ! 79: recopy (fnam) ! 80: char *fnam; ! 81: { ! 82: int c; ! 83: int *wref = NULL; ! 84: int wcnt = 0; ! 85: int wsize = 50; ! 86: int finalrn; ! 87: char sig[MXSIG]; ! 88: extern int *realloc(); ! 89: ! 90: wref = (int *)calloc((unsigned)wsize, (unsigned)sizeof(int)); ! 91: fclose(ftemp); ! 92: ftemp = fopen(fnam, "r"); ! 93: if (ftemp == NULL) { ! 94: fprintf(stderr, "Can't reopen %s\n", fnam); ! 95: exit(1); ! 96: } ! 97: while ((c = getc(ftemp)) != EOF) { ! 98: if (c == FLAG) { ! 99: char tb[10]; ! 100: char *s = tb; ! 101: while ((c = getc(ftemp)) != FLAG) ! 102: *s++ = c; ! 103: *s = 0; ! 104: /* ! 105: * If sort was done, permute the reference number ! 106: * to obtain the final reference number, finalrn. ! 107: */ ! 108: if (sort) ! 109: finalrn = newr[atoi(tb)]; ! 110: else ! 111: finalrn = atoi(tb); ! 112: if ((++wcnt > wsize) && ! 113: ((wref=realloc(wref,(wsize+=50)*sizeof(int)))==NULL)){ ! 114: fprintf(stderr, "Ref condense out of memory."); ! 115: exit(1); ! 116: } ! 117: wref[wcnt-1] = finalrn; ! 118: if ((c = getc(ftemp)) == AFLAG) ! 119: continue; ! 120: wref[wcnt] = 0; ! 121: condense(wref,wcnt,sig); ! 122: wcnt = 0; ! 123: printf("%s", sig); ! 124: } ! 125: putchar(c); ! 126: } ! 127: fclose(ftemp); ! 128: unlink(fnam); ! 129: } ! 130: ! 131: /* ! 132: * sort and condense referance signals when they are placed in ! 133: * the text. Viz, the signal 1,2,3,4 is condensed to 1-4 and signals ! 134: * of the form 5,2,9 are converted to 2,5,9 ! 135: */ ! 136: condense(wref, wcnt, sig) ! 137: int *wref; ! 138: int wcnt; ! 139: char *sig; ! 140: { ! 141: register int i = 0; ! 142: char wt[4]; ! 143: extern int wswap(); ! 144: ! 145: qsort(wref, wcnt, sizeof(int), wswap); ! 146: sig[0] = 0; ! 147: while (i < wcnt) { ! 148: sprintf(wt,"%d",wref[i]); ! 149: strcat(sig,wt); ! 150: if ((i+2 < wcnt) && (wref[i] == (wref[i+2] - 2))) { ! 151: while (wref[i] == (wref[i+1] - 1)) ! 152: i++; ! 153: strcat(sig, "-"); ! 154: } else if (++i < wcnt) ! 155: strcat(sig,",\\|"); ! 156: } ! 157: } ! 158: ! 159: wswap(iw1, iw2) ! 160: register int *iw1,*iw2; ! 161: { ! 162: return(*iw1 - *iw2); ! 163: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.