# 2.11BSD#431 - /usr/src/usr.bin/refer/refer6.c

##### Functions

    caps              X
    class             X
    hastype           X
    last              X
    putref            X
    revauth           X
    tabs              X

##### Macros

    dsde              X
    ifnl              X

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

#### Defined functions

caps defined in line 157; used 2 times

- in line 44
- in /usr/src/usr.bin/refer/refer..c line 44

class defined in line 128; used 2 times

- in line 109
- in /usr/src/usr.bin/refer/refer..c line 44

hastype defined in line 147; used 6 times

- in line 132-142(6)

last defined in line 227; used 5 times

- in line 55-57(2), 86, 100-102(2)

putref defined in line 9; used 1 times

- in /usr/src/usr.bin/refer/refer2.c line 151

revauth defined in line 195; used 2 times

- in line 68
- in /usr/src/usr.bin/refer/refer..c line 44

tabs defined in line 112; used 4 times

- in /usr/src/usr.bin/refer/refer2.c line 128-129(2), 141-142(2)

#### Defined variables

sccsid defined in line 2; never used

#### Defined macros

dsde defined in line 6; never used
ifnl defined in line 7; never used

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 874 |