Annotation of researchv10no/cmd/refer/refer6.c, revision 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.