|
|
1.1 ! root 1: # include "refer..c" ! 2: # define NFLAB 3000 ! 3: # define NLABC 1000 ! 4: # define SIGLEN 400 ! 5: static char sig[SIGLEN]; ! 6: ! 7: static char bflab[NFLAB]; ! 8: static char *labtab[NLABC]; ! 9: char *lookat(), *artskp(); ! 10: static char *lbp = bflab; ! 11: static char labc[NLABC]; ! 12: static char stbuff[50]; ! 13: static int prevsig; ! 14: ! 15: putsig (nf, flds, nref, nstline, endline) ! 16: char *flds[], *nstline, *endline; ! 17: { ! 18: /* choose signal style */ ! 19: char t[200], t1[200], t2[200], format[10], *sd; ! 20: char *fpar(); ! 21: int another = 0; ! 22: int addon, addlet; ! 23: char *stline, *pr; ! 24: static FILE *fhide = 0; ! 25: # if D1 ! 26: fprintf(stderr, "in putsig, bare %d labels %o nf %d nref %d\n", bare, labels, nf, nref); ! 27: # endif ! 28: if (labels) ! 29: { ! 30: if (nf==0) /* old */ ! 31: sprintf(t, "%s%c", labtab[nref], labc[nref]); ! 32: else ! 33: { ! 34: *t=0; ! 35: if (keywant) ! 36: { ! 37: pr = fpar(nf, flds, t1, keywant, 1, 0); ! 38: if (pr) strcpy(t, pr); ! 39: } ! 40: if (t[0]==0) ! 41: { ! 42: if (labblkflg) ! 43: { ! 44: if (nmlen>0) ! 45: sprintf(format, "%%.%ds%s%%s", nmlen, labblkflg); ! 46: else ! 47: sprintf(format, "%%s%s%%s", labblkflg); ! 48: } ! 49: else ! 50: sprintf(format, nmlen>0 ? "%%.%ds%%s" : "%%s%%s", nmlen); ! 51: # if D1 ! 52: fprintf(stderr, "format is /%s/\n", format); ! 53: # endif ! 54: /* format is %s%s for default labels or %.3s%s eg if wanted */ ! 55: sd = fpar(nf, flds, t2, 'D', 1, 0); ! 56: if (sd==NULL) sd = ""; ! 57: if (dtlen>0) ! 58: { ! 59: char *sdb; ! 60: for(sdb=sd; *sd; sd++); ! 61: sd = sd-dtlen; ! 62: if (sd<sdb) sd=sdb; ! 63: } ! 64: sprintf(t, format, fpar(nf, flds, t1, 'A', 1, 0), sd); ! 65: # if D1 ! 66: fprintf(stderr, "tag is /%s/\n",t); ! 67: # endif ! 68: } ! 69: if (keywant) ! 70: { ! 71: addon=0; ! 72: for(sd=t; *sd; sd++); ! 73: if (*--sd == '-') ! 74: { ! 75: addon=1; ! 76: *sd=0; ! 77: } ! 78: } ! 79: addlet = keylet(t, nref); ! 80: if (!keywant || addon) ! 81: addch( t, addlet); ! 82: } ! 83: if (sort) ! 84: sprintf(t, "%c%d%c", FLAG, nref, FLAG); ! 85: } ! 86: else ! 87: { ! 88: if (sort) ! 89: sprintf(t, "%c%d%c", FLAG, nref, FLAG); ! 90: else ! 91: sprintf(t, "%d", nref); ! 92: } ! 93: another = prefix (".[", sd=lookat()); ! 94: # if D1 ! 95: fprintf(stderr, "t leng %d another %d\n",strlen(t), another); ! 96: # endif ! 97: if (another && (strcmp(".[\n", sd) != SAME)) ! 98: fprintf(stderr, "File %s, line %d- punctuation ignored from: %s", Ifile, Iline, sd); ! 99: if (bare==0) ! 100: strcat (sig, t); ! 101: # if D1 ! 102: fprintf(stderr, "past strcat\n"); ! 103: # endif ! 104: if (strlen(sig) >SIGLEN) ! 105: err("signal length exceeds %d chars", SIGLEN); ! 106: # if D1 ! 107: fprintf(stderr, "sig is now %s leng %d\n",sig,strlen(sig)); ! 108: # endif ! 109: trimnl(nstline); ! 110: trimnl(endline); ! 111: stline=stbuff; ! 112: if (prevsig==0) ! 113: { ! 114: strcpy (stline, nstline); ! 115: prevsig=1; ! 116: } ! 117: if (stline[2] || endline[2]) ! 118: { ! 119: stline += 2; ! 120: endline += 2; ! 121: } ! 122: else ! 123: { ! 124: stline = "\\*([."; ! 125: endline = "\\*(.]"; ! 126: } ! 127: # if D1 ! 128: fprintf(stderr, "bare %d fhide %o fo %o another %d\n",bare, fhide, fo, another); ! 129: # endif ! 130: if (bare==0) ! 131: { ! 132: if (another==0) ! 133: { ! 134: sprintf(t1, "%s%s\%s\n", stline, sig, endline); ! 135: append(t1); ! 136: flout(); ! 137: sig[0]=0; ! 138: prevsig=0; ! 139: if (fo != NULL && fo == fhide) ! 140: { ! 141: int ch; ! 142: # if D1 ! 143: fprintf(stderr, "more hiding\n"); ! 144: # endif ! 145: fclose(fhide); fhide= fopen(hidenam, "r"); ! 146: fo= ftemp; ! 147: while ((ch = getc(fhide)) != EOF) ! 148: putc(ch, fo); ! 149: fclose(fhide); ! 150: unlink(hidenam); ! 151: # if D1 ! 152: fprintf(stderr, "past this stuff\n"); ! 153: # endif ! 154: } ! 155: } ! 156: else ! 157: { ! 158: if (labsepstr) ! 159: strcat(sig, labsepstr); ! 160: else ! 161: strcat (sig, (labels ? ", " : ",\\|")); ! 162: /* hide if need be */ ! 163: if (fo == ftemp) ! 164: { ! 165: sprintf(hidenam, "/tmp/rj%dc", getpid()); ! 166: # if D1 ! 167: fprintf(stderr, "hiding in %s\n", hidenam); ! 168: # endif ! 169: fhide= fopen(hidenam, "w"); ! 170: if (fhide==NULL) err("Can't get scratch file %s", hidenam); ! 171: fo = fhide; ! 172: } ! 173: } ! 174: } ! 175: if (bare<2) ! 176: if (nf>0) ! 177: { ! 178: fprintf(fo, ".ds [F %s%c", t, sep); ! 179: biglab(t); ! 180: } ! 181: if (bare>0) ! 182: flout(); ! 183: # if D1 ! 184: fprintf(stderr, "sig is now %s\n",sig); ! 185: # endif ! 186: } ! 187: char * ! 188: fpar (nf, flds, out, c, seq, prepend) ! 189: char *flds[], *out; ! 190: { ! 191: char *p, *s; ! 192: int i, fnd = 0; ! 193: for(i=0; i<nf; i++) ! 194: if (control(flds[i][0]) &&flds[i][1]==c && ++fnd >= seq) ! 195: { ! 196: if (c== 'L') ! 197: { ! 198: p = flds[i]+3; ! 199: strcpy(out, p); ! 200: return(out); ! 201: } ! 202: if (c!= 'A' && c != 'D') /* if not author, date use first word */ ! 203: { ! 204: p=flds[i]+3; ! 205: p = artskp (p); ! 206: mycpy2(out, p, 20); ! 207: return(out); ! 208: } ! 209: if (c=='A' && lfirst(p=flds[i]+3)) /* author in style Jones, A. */ ! 210: { ! 211: for(s=out; *p!=','; p++) ! 212: *s++ = *p; ! 213: *s++ = 0; ! 214: if (prepend) ! 215: { ! 216: while (isspace(*p))p++; ! 217: *s++ = *p; ! 218: *s=0; ! 219: } ! 220: return(out); ! 221: } ! 222: for(s=p= flds[i]+2; *p; p++); ! 223: while (p>s && *p != ' ') p--; ! 224: /* special wart for authors */ ! 225: if (c=='A' && (p[-1] == ',' || p[1] =='(')) ! 226: { ! 227: p--; ! 228: while (p>s && *p != ' ') p--; ! 229: mycpy (out, p+1); ! 230: } ! 231: else ! 232: strcpy (out, p+1); ! 233: if (c=='A' && prepend) ! 234: initadd(out, flds[i]+2, p); ! 235: return(out); ! 236: } ! 237: return(0); ! 238: } ! 239: putkey(nf, flds, nref, keystr) ! 240: char *flds[], *keystr; ! 241: { ! 242: char t1[50], *sf; ! 243: int ctype, i, count; ! 244: # if D1 ! 245: int klim=0; ! 246: fprintf(stderr, "in putkey, nf %d nref %d keystr %.20s\n",nf, nref, keystr); ! 247: # endif ! 248: # if D5 ! 249: return; ! 250: # endif ! 251: fprintf(fo, ".\\\""); ! 252: if (nf <= 0) ! 253: fprintf(fo, "%s%c%c", labtab[nref], labc[nref], sep); ! 254: else ! 255: { ! 256: while (ctype= *keystr++) ! 257: { ! 258: # if D1 ! 259: if (++klim>100) err("keystring ridiculous", 0); ! 260: # endif ! 261: count = atoi(keystr); ! 262: if (*keystr=='+') count=999; ! 263: if (count<=0) count=1; ! 264: for(i=1; i<=count; i++) ! 265: { ! 266: sf= fpar(nf, flds, t1, ctype, i, 1); ! 267: if (sf==0) ! 268: break; ! 269: sf = artskp(sf); ! 270: fprintf(fo, "%s%c", sf, '-'); ! 271: } ! 272: } ! 273: fprintf(fo, "%d%c", nref, sep); ! 274: } ! 275: # if D1 ! 276: fprintf(stderr, "returning from putkey\n"); ! 277: # endif ! 278: } ! 279: keylet(t, nref) ! 280: char *t; ! 281: { ! 282: int i; ! 283: int x = 'a'-1; ! 284: for(i=1; i<nref;i++) ! 285: { ! 286: if (strcmp(labtab[i], t) == 0) ! 287: x = labc[i]; ! 288: } ! 289: strcpy(labtab[nref]=lbp, t); ! 290: while (*lbp++); ! 291: if (lbp-bflab >NFLAB) ! 292: err("bflab overflow (%d)", NFLAB); ! 293: if (nref >NLABC) ! 294: err ("nref in labc overflow (%d)", NLABC); ! 295: # ifdef D1 ! 296: fprintf(stderr, "lbp up to %d of 2000\n", lbp-bflab); ! 297: # endif ! 298: return (labc[nref] = x+1); ! 299: } ! 300: mycpy(s,t) ! 301: char *s, *t; ! 302: { ! 303: while (*t && *t != ',' && *t != ' ') ! 304: *s++ = *t++; ! 305: *s=0; ! 306: } ! 307: mycpy2 (s, t, n) ! 308: char *s, *t; ! 309: { ! 310: int c; ! 311: while (n-- && (c= *t++)>0) ! 312: { ! 313: if (c==' ')c= '-'; ! 314: *s++ = c; ! 315: } ! 316: *s=0; ! 317: } ! 318: initadd(to, from, stop) ! 319: char *to, *from, *stop; ! 320: { ! 321: int c, nalph= 1; ! 322: while (*to) to++; ! 323: while (from<stop) ! 324: { ! 325: c = *from++; ! 326: if (!isalpha(c)) ! 327: { ! 328: if (nalph) ! 329: *to++ = '.'; ! 330: nalph=0; ! 331: continue; ! 332: } ! 333: if (nalph++ ==0) ! 334: *to++ = c; ! 335: } ! 336: *to=0; ! 337: } ! 338: ! 339: static char *articles[] ={"the ", "an ", "a ", 0}; ! 340: char * ! 341: artskp(s) ! 342: char *s; ! 343: { ! 344: /* skips over initial "a ", "an ", or "the " in s */ ! 345: char **p, *r1, *r2; ! 346: for(p=articles; *p; p++) ! 347: { ! 348: r2 = s; ! 349: for (r1= *p; ((*r1 ^ *r2) & ~040 ) == 0; r1++) ! 350: r2++; ! 351: if (*r1==0 && *r2 != 0) ! 352: return(r2); ! 353: } ! 354: return(s); ! 355: } ! 356: expkey (or, nr, fwrite) ! 357: FILE *fwrite; ! 358: { ! 359: int uniq, less, i; ! 360: char *s, temp[100]; ! 361: # if D1 ! 362: fprintf(stderr, "old %d key %s: '%c' new %d\n",or, labtab[or],labc[or],nr); ! 363: # endif ! 364: /* is this unique? how many are before it ? */ ! 365: uniq=1; less= 'a'; ! 366: s = labtab[or]; ! 367: for(i=0; i <= refnum; i++) ! 368: { ! 369: if (i==or) continue; ! 370: if (strcmp(labtab[i], s)!=SAME) ! 371: continue; ! 372: uniq=0; ! 373: if (newr[i] != 0 && newr[i] < nr) ! 374: less++; ! 375: } ! 376: if (uniq) ! 377: sprintf(temp, "%s", s); ! 378: else ! 379: sprintf(temp,"%s%c", s, less); ! 380: biglab(temp); ! 381: fprintf(fwrite, "%s", temp); ! 382: } ! 383: lfirst(s) ! 384: char *s; ! 385: { ! 386: /* decides if s is name of format Jones, A */ ! 387: char *strchr(), *p; ! 388: p = strchr(s, ','); ! 389: if (p==NULL) return(0); ! 390: while (isspace(*++p)) ; ! 391: if (strncmp(p, "Jr", 2)==0) ! 392: return(0); ! 393: if (strncmp(p, "II", 2)==0) ! 394: return(0); ! 395: if (isupper(*p)) ! 396: return(1); ! 397: return(0); ! 398: } ! 399: ! 400: static char longlab[100]=""; ! 401: biglab(s) ! 402: char *s; ! 403: { ! 404: if (strlen(s)>strlen(longlab)) ! 405: strcpy(longlab, s); ! 406: } ! 407: ! 408: widelab() ! 409: { ! 410: printf(".nr [W \\w'%s'\n", longlab); ! 411: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.