Annotation of researchv10no/cmd/refer/refer6.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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