Annotation of 42BSD/usr.bin/refer/refer6.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.