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