|
|
1.1 ! root 1: # include "refer..c" ! 2: char *class(); ! 3: char seenstr[60]; ! 4: putref (n, tvec) ! 5: char *tvec[]; ! 6: { ! 7: char *s, *tx, *sq; ! 8: char *caps(), *revauth(); ! 9: char buf1[LLINE], buf2[50]; ! 10: int nauth = 0, i, lastype = 0, cch, macro = 0, la; ! 11: int lauth =0, ltitle =0, lother =0; ! 12: ! 13: # if D1 ! 14: fprintf(stderr, "in putref, fo is %o\n",fo); ! 15: # endif ! 16: if (!preserve) ! 17: fprintf(fo, ".]-%c", sep); ! 18: else ! 19: fprintf(fo, ".[%c", sep); ! 20: # define dsde (macro? "de" : "ds") ! 21: # define ifnl (macro? sep : ' ') ! 22: seenstr[0]=0; ! 23: for (i=0; i<n; i++) ! 24: { ! 25: s = tvec[i]; ! 26: if (*s==0) continue; ! 27: if (control(s[0]) ) ! 28: { ! 29: if (lastype && macro) ! 30: fprintf(fo, "..%c", sep); ! 31: if (control(s[1])) ! 32: { ! 33: cch = s[2]; ! 34: tx = s+3; ! 35: macro=1; ! 36: } ! 37: else ! 38: { ! 39: cch = s[1]; ! 40: tx = s+2; ! 41: macro=0; ! 42: } ! 43: } ! 44: else ! 45: { ! 46: cch = lastype; ! 47: tx=s; ! 48: } ! 49: # if D1 ! 50: fprintf(stderr, "smallcaps %s cch %c\n",smallcaps, cch); ! 51: # endif ! 52: if (preserve) ! 53: { ! 54: fprintf(fo, "%s%c", s, sep); ! 55: continue; ! 56: } ! 57: if (mindex (smallcaps, cch)) ! 58: tx = caps(tx, buf1); ! 59: # if D1 ! 60: fprintf(stderr, " s %o tx %o %s\n",s,tx,tx); ! 61: # endif ! 62: if (!control(s[0]) || (index(appfld, s[1]) && seen(s[1]))) /* append to previous item */ ! 63: { ! 64: if (control(s[0])) ! 65: lastype = s[1]; ! 66: if (lastype!=0) ! 67: { ! 68: if (macro) ! 69: fprintf(fo, "%s%c", tx, sep); ! 70: else ! 71: fprintf(fo, ".as [%c \" %s%c",lastype,tx,sep); ! 72: if (lastype == 'T') ! 73: ltitle = (mindex(".;,?", last(tx))!=0); ! 74: if (lastype == 'A') ! 75: lauth = last(tx) == '.'; ! 76: if (lastype == 'O') ! 77: lother = (mindex(".;,?", last(tx)) != 0); ! 78: } ! 79: continue; ! 80: } ! 81: if (mindex(ignfld, cch)) /* skip XYZ[] */ ! 82: { ! 83: lastype=0; ! 84: continue; ! 85: } ! 86: else ! 87: if (cch == 'A') ! 88: { ! 89: if (nauth < authrev) ! 90: tx = revauth(tx, buf2); ! 91: if (nauth++ ==0) ! 92: if (macro) ! 93: fprintf(fo, ".de [%c%c%s%c",cch,sep,tx,sep); ! 94: else ! 95: fprintf(fo, ".ds [%c%s%c", cch,tx,sep); ! 96: else ! 97: { ! 98: la = (tvec[i+1][1]!='A'); ! 99: fprintf(fo, ".as [A \""); ! 100: if (la == 0 || nauth != 2) ! 101: fprintf(fo, ","); ! 102: if (la) ! 103: fprintf(fo,"%s", ! 104: mindex(smallcaps, 'A')? " \\s-2AND\\s+2" : " and"); ! 105: fprintf(fo, "%s%c", tx, sep); ! 106: } ! 107: lauth = last(tx)=='.'; ! 108: } ! 109: else ! 110: { ! 111: if (cch == 'D' && yearonly) ! 112: { ! 113: sq = tx+strlen(tx); ! 114: while (*--sq!=' ' && sq>tx) ! 115: ; ! 116: if (sq>tx) tx=sq; ! 117: } ! 118: if (macro) ! 119: fprintf(fo, ".de [%c%c%s%c",cch,sep, tx, sep); ! 120: else ! 121: fprintf(fo, ".ds [%c%s%c",cch,tx, sep); ! 122: } ! 123: if (cch=='P') ! 124: fprintf(fo, ".nr [P %d%c", mindex(s, '-')!=0, sep); ! 125: lastype = cch; ! 126: if (cch == 'T') ! 127: ltitle = (mindex(".;,?", last(tx)) != 0); ! 128: if (cch == 'O') ! 129: lother = (mindex(".;,?", last(tx)) != 0); ! 130: } ! 131: if (lastype && macro) ! 132: fprintf(fo, "..%c", sep); ! 133: if (!preserve) ! 134: { ! 135: fprintf(fo, ".nr [T %d%c", ltitle, sep); ! 136: fprintf(fo, ".nr [A %d%c", lauth, sep); ! 137: fprintf(fo, ".nr [O %d%c", lother, sep); ! 138: fprintf (fo, ".][ %s%c", class(n, tvec), '\n'); ! 139: } ! 140: else ! 141: fprintf(fo, ".]\n"); ! 142: } ! 143: tabs (sv, line) ! 144: char *sv[], *line; ! 145: { ! 146: char *p; ! 147: int n = 0; ! 148: sv[n++] = line; ! 149: for( p= line; *p; p++) ! 150: { ! 151: if (*p == '\n') ! 152: { ! 153: *p=0; ! 154: sv[n++] = p+1; ! 155: } ! 156: } ! 157: return(n-1); ! 158: } ! 159: char * ! 160: class (nt, tv) ! 161: char *tv[]; ! 162: { ! 163: if (hastype (nt, tv, 'J')) ! 164: return("1 journal-article"); ! 165: if (hastype (nt, tv, 'B')) ! 166: return("3 article-in-book"); ! 167: if (hastype (nt, tv, 'R')) ! 168: return ("4 tech-report"); ! 169: if (hastype (nt, tv, 'G')) ! 170: return ("4 tech-report"); ! 171: if (hastype (nt, tv, 'I')) ! 172: return("2 book"); ! 173: if (hastype (nt, tv,'M')) ! 174: return ("5 bell-tm"); ! 175: return("0 other"); ! 176: } ! 177: hastype (nt, tv, c) ! 178: char *tv[]; ! 179: { ! 180: int i; ! 181: for(i=0; i<nt; i++) ! 182: if ( control(tv[i][0]) && tv[i][1]==c ) ! 183: return(1); ! 184: return(0); ! 185: } ! 186: char * ! 187: caps(a, b) ! 188: char *a, *b; ! 189: { ! 190: char *p; ! 191: int c, alph, this; ! 192: p=b; ! 193: alph = 0; ! 194: while (c = *a++) ! 195: { ! 196: this = isalpha(c); ! 197: if (this && alph==1) ! 198: { ! 199: *b++ = '\\'; ! 200: *b++ = 's'; ! 201: *b++ = '-'; ! 202: *b++ = '2'; ! 203: } ! 204: if (!this && alph>1) ! 205: { ! 206: *b++ = '\\'; ! 207: *b++ = 's'; ! 208: *b++ = '+'; ! 209: *b++ = '2'; ! 210: } ! 211: if (this) ! 212: c &= (~040); ! 213: *b++ = c; ! 214: alph = this ? alph+1 : 0; ! 215: } ! 216: if (alph>1) ! 217: { ! 218: *b++ = '\\'; ! 219: *b++ = 's'; ! 220: *b++ = '+'; ! 221: *b++ = '2'; ! 222: } ! 223: *b=0; ! 224: return (p); ! 225: } ! 226: char * ! 227: revauth(s, b) ! 228: char *s, *b; ! 229: { ! 230: char *init, *name, *jr, *p, *bcop; ! 231: bcop = b; ! 232: init=name=s; ! 233: while (*name)name++; ! 234: jr=name; ! 235: while (name>init && *name!= ' ') ! 236: name--; ! 237: if (name[-1] == ',' || name[-1]== '(' ) ! 238: { ! 239: jr = --name; ! 240: while (name>init && *name != ' ') ! 241: name--; ! 242: } ! 243: p=name; ! 244: while (p<jr) ! 245: *b++ = *p++; ! 246: if (init<name && nocomma==0) ! 247: *b++ = ','; ! 248: while (init<name) ! 249: *b++ = *init++; ! 250: if (*jr)jr++; ! 251: while(*jr) ! 252: *b++ = *jr++; ! 253: *b++ = 0; ! 254: return(bcop); ! 255: } ! 256: last(s) ! 257: char *s; ! 258: { ! 259: while (*s) s++; ! 260: return(*--s); ! 261: } ! 262: seen(c) ! 263: { ! 264: char *s, *index(); ! 265: s = index(seenstr,c); ! 266: if (s!=NULL) return(1); ! 267: for(s=seenstr; *s; s++) ! 268: ; ! 269: *s++ = c; ! 270: *s=0; ! 271: return(0); ! 272: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.