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

Defined functions

count defined in line 156; used 1 times
  • in line 47
describe defined in line 12; used 1 times
gsent defined in line 56; used 1 times
  • in line 24
lcase defined in line 186; used 1 times
  • in line 23
output defined in line 130; used 3 times
prefix defined in line 121; used 5 times
update defined in line 196; used 1 times
  • in line 47

Defined variables

oldc defined in line 55; used 5 times
sents defined in line 8; used 7 times
sp defined in line 9; used 17 times
state defined in line 54; used 7 times
stext defined in line 10; used 1 times

Defined struct's

sf defined in line 5; used 4 times
  • in line 9(2), 201(2)

Defined macros

NS defined in line 4; used 6 times
Last modified: 1981-07-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 908
Valid CSS Valid XHTML 1.0 Strict