1 #ifndef lint 2 static char *sccsid = "@(#)refer7.c 4.1 (Berkeley) 05/06/83"; 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 %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 84 fclose(ftemp); 85 ftemp = fopen(fnam, "r"); 86 if (ftemp == NULL) { 87 fprintf(stderr, "Can't reopen %s\n", fnam); 88 exit(1); 89 } 90 while ((c = getc(ftemp)) != EOF) { 91 if (c == FLAG) { 92 char tb[10]; 93 char *s = tb; 94 while ((c = getc(ftemp)) != FLAG) 95 *s++ = c; 96 *s = 0; 97 printf("%d", newr[atoi(tb)]); 98 continue; 99 } 100 putchar(c); 101 } 102 fclose(ftemp); 103 unlink(fnam); 104 } 105