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

##### Functions

    count             X
    describe          X
    gsent             X
    lcase             X
    output            X
    prefix            X
    update            X

##### Variables

    oldc              X
    sents             X
    sp                X
    state             X
    stext             X

##### Macros

    NS                X

##### struct's

    sf                X

       1: #ifndef lint
       2: static char *sccsid = "@(#)what2.c	4.1 (Berkeley) 5/6/83";
       3: #endif
       4:
       5: #include "stdio.h"
       6: #include "ctype.h"
       7: #define NS 5
       8:
       9: struct sf {
      10:     char *text;
      11:     int olap;
      12: }
      13: sents[NS];
      14: struct sf *sp;
      15: char stext[NS][500];
      16:
      17: describe (file, argc, argv, rf)
      18: char *file, *argv[];
      19: FILE *rf;
      20: {
      21:     int ns 0;
      22:     char linbuf[BUFSIZ], *line, *p;
      23:     int i, wrflg 0, wrote 0, ln 0;
      24:     FILE *fi;
      25:     fi = fopen(file, "r");
      26:     if (fi==NULL) return;
      27:     for(i=1; i<argc; i++)
      28:         lcase(argv[i]);
      29:     while (gsent(linbuf, BUFSIZ, fi))
      30:     {
      31:         wrote=0;
      32:         for(line=linbuf; *line==' '; line++);
      33:         if (line[0]==0) continue;
      34:         for(p=line; *p; p++)
      35:             if (*p=='\t') *p= ' ';
      36:         if (wrflg && line[0]=='.' && isupper(line[1]))
      37:             wrflg=0;
      38:         if (wrflg)
      39:         {
      40:             output(line, ln, rf);
      41:             wrote=1;
      42:         }
      43:         if (prefix(".TL", line))
      44:             wrflg=1;
      45:         if (prefix(".AU", line))
      46:             wrflg = ln = 1;
      47:         if (prefix(".DA", line) || prefix(".ND", line))
      48:             output(line+4, 1, rf);
      49:         if (line[0]=='.')
      50:             continue;
      51:         if (wrote) continue;
      52:         ns=update(ns, line, count(line,argc,argv));
      53:     }
      54:     fclose(fi);
      55:     for(sp=sents; sp<sents+ns; sp++)
      56:         output(sp->text, 0, rf);
      57: }
      58:
      59: int state 0;
      60: int oldc '\n';
      61:
      62: gsent(buf, bsize, fi)
      63: char *buf;
      64: FILE *fi;
      65: {
      66:     char *s;
      67:     int c, leng 0;
      68:     /* state
      69: 		0: looking for '.'
      70: 		1: looking for nl or space aftter '.'
      71: 		2: looking for nl after line with dot.
      72: 		*/
      73:     s=buf;
      74:     if (state==2)
      75:         *s++='.';
      76:     while ( (c = getc(fi)) > 0 )
      77:     {
      78:         switch(state)
      79:         {
      80:         case 0: /* normal */
      81:             if (c=='.' && oldc == '\n')
      82:             {
      83:                 *s=0;
      84:                 state=2;
      85:                 oldc='\n';
      86:                 return(1);
      87:             }
      88:             *s++ = (c=='\n'? ' ': c);
      89:             if (s>=buf+bsize)
      90:             {
      91:                 *--s = 0;
      92:                 return(1);
      93:             }
      94:             if (c=='.' || c == '?' || c=='!')
      95:                 if (leng>1)
      96:                     state=1;
      97:             leng = (isalpha(c) ? leng+1 : 0);
      98:             break;
      99:         case 1: /* found ., want nl or space */
     100:             if (c==' ' || c == '\n')
     101:             {
     102:                 *s=0;
     103:                 state=0;
     104:                 oldc=c;
     105:                 return(1);
     106:             }
     107:             *s++ = (c=='\n' ? ' ' : c);
     108:             state=0;
     109:             leng = 0;
     110:             break;
     111:         case 2: /* found trof line, want nl */
     112:             if (c == '\n')
     113:             {
     114:                 *s=0;
     115:                 state=0;
     116:                 oldc='\n';
     117:                 return(1);
     118:             }
     119:             *s++ = c;
     120:             break;
     121:         }
     122:         oldc=c;
     123:     }
     124:     *s=0;
     125:     return(0);
     126: }
     127:
     128: prefix( p, s)
     129: char *p, *s;
     130: {
     131:     int c;
     132:     while ( (c= *p++) == *s++)
     133:         if (c==0)
     134:             return(1);
     135:     return(c==0);
     136: }
     137:
     138: output (s, ln, rf)
     139: char *s;
     140: FILE *rf;
     141: {
     142:     char *t;
     143:     int more 1;
     144:     t=s;
     145:     while (more)
     146:     {
     147:         while (t<s+72 && *t)
     148:             t++;
     149:         if (*t)
     150:         {
     151:             while (*t != ' ' && t>(s+25))
     152:                 t--;
     153:             *t=0;
     154:             more=1;
     155:         }
     156:         else
     157:             more=0;
     158:         printf("%s%s\n",ln++ ? "     " : "   ", s);
     159:         if (rf!=NULL)
     160:             fprintf(rf, "%s\n", s);
     161:         s= ++t;
     162:     }
     163: }
     164:
     165: count(isent, nw, wds)
     166: char *wds[], *isent;
     167: {
     168:     int saw[50], ct;
     169:     char sb[BUFSIZ], *s sb;
     170:     int i, c;
     171:     for(i=1; i<nw; i++)
     172:         saw[i]=0;
     173:     while (c = *isent++)
     174:     {
     175:         *s++ = isupper(c) ? tolower(c) : c;
     176:     }
     177:     *s=0;
     178:     s=sb;
     179:     while (*s++)
     180:     {
     181:         if (s[-1]!=' ') continue;
     182:         for(i=1; i<nw; i++)
     183:         {
     184:             if (saw[i])continue;
     185:             if (prefix(wds[i], s))
     186:                 saw[i]=1;
     187:         }
     188:     }
     189:     ct=0;
     190:     for(i=1; i<nw; i++)
     191:         if (saw[i])
     192:             ct++;
     193:     return(ct);
     194: }
     195:
     196: lcase(s)
     197: char *s;
     198: {
     199:     register int c;
     200:     for(; c= *s; s++)
     201:     {
     202:         if (isupper(c))
     203:             *s= tolower(c);
     204:     }
     205: }
     206:
     207: update( ns, line, kov)
     208: char *line;
     209: {
     210:     /* see if sentence array should be updated */
     211:     int lval 100;
     212:     char *ob;
     213:     struct sf *sp, *least NULL;
     214:     if (kov<=0) return (ns) ; /* no*/
     215:     if (ns<NS)
     216:     {
     217:         sp=sents+ns;
     218:         strcpy (sp->text = stext[ns], line);
     219:         sp->olap = kov;
     220:         return(ns+1);
     221:     }
     222:     for(sp=sents+ns-1; sp>=sents; sp--)
     223:     {
     224:         if (sp->olap < lval)
     225:         {
     226:             least = sp;
     227:             lval = sp->olap;
     228:         }
     229:     }
     230:     if (kov <= lval) return(ns);
     231:     ob = least->text;
     232:     while (++least < sents+NS)
     233:     {
     234:         (least-1)->text = least->text;
     235:         (least-1)->olap = least->olap;
     236:     }
     237:     sp = sents+NS-1;
     238:     strcpy (sp->text=ob, line);
     239:     sp->olap = kov;
     240:     return(NS);
     241: }

#### Defined functions

count defined in line 165; used 1 times

- in line 52

describe defined in line 17; used 1 times

- in /usr/src/usr.bin/refer/what1.c line 112

gsent defined in line 62; used 1 times

- in line 29

lcase defined in line 196; used 1 times

- in line 28

output defined in line 138; used 3 times

- in line 40, 48, 56

prefix defined in line 128; used 5 times

- in line 43-47(4), 185

update defined in line 207; used 1 times

- in line 52

#### Defined variables

oldc defined in line 60; used 5 times

- in line 81-85(2), 104, 116, 122

sccsid defined in line 2; never used
sents defined in line 13; used 7 times

- in line 55(2), 217-222(3), 232-237(2)

sp defined in line 14; used 17 times

- in line 55-56(4), 213-227(10), 237-239(3)

state defined in line 59; used 7 times

- in line 74-78(2), 84, 96, 103-108(2), 115

stext defined in line 15; used 1 times

- in line 218

#### Defined struct's

sf defined in line 9; used 4 times

- in line 14(2), 213(2)

#### Defined macros

NS defined in line 7; used 6 times

- in line 13-15(2), 215, 232-240(3)

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