Annotation of 3BSD/cmd/refer/refer6.c, revision 1.1

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

unix.superglobalmegacorp.com

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