|
|
1.1 ! root 1: ! 2: ! 3: ! 4: ! 5: ! 6: ! 7: ! 8: ! 9: ! 10: ! 11: ! 12: ! 13: ! 14: ! 15: extern struct _iobuf { ! 16: int _cnt; ! 17: unsigned char *_ptr; ! 18: unsigned char *_base; ! 19: short _flag; ! 20: char _file; ! 21: } _iob[120]; ! 22: ! 23: ! 24: ! 25: ! 26: ! 27: ! 28: ! 29: ! 30: ! 31: ! 32: ! 33: ! 34: ! 35: ! 36: ! 37: ! 38: ! 39: ! 40: ! 41: ! 42: ! 43: ! 44: ! 45: ! 46: ! 47: ! 48: struct _iobuf *fopen(); ! 49: struct _iobuf *fdopen(); ! 50: struct _iobuf *freopen(); ! 51: struct _iobuf *popen(); ! 52: long ftell(); ! 53: char *fgets(); ! 54: ! 55: ! 56: ! 57: ! 58: ! 59: ! 60: char *disclm ="BECAUSE YOUR TEXT IS SHORT \(< 2000 WORDS & < 100 SENTENCES\),\n\ ! 61: THE FOLLOWING ANALYSIS MAY BE MISLEADING.\n\n"; ! 62: ! 63: char *note0 = ! 64: "NOTE: Your document is being compared against standards\n\ ! 65: derived from 30 TMs, classified as good by Department Heads\n\ ! 66: in the Research Area.\n"; ! 67: char *note2 = ! 68: "NOTE: Your text is being compared against standards derived\n\ ! 69: from 34 instructional texts produced by Department 45272.\n\n"; ! 70: char *note1 = ! 71: "NOTE: Your text is being compared to standards for Craft\n\ ! 72: derived from the research of E. Coke.\n\n"; ! 73: char *note3 = ! 74: "NOTE: Your text is being compared to standards given in file\n\"%s.\"\n"; ! 75: ! 76: char *kincaid = "\nREADABILITY\n\ ! 77: \n The Kincaid readability formula predicts that your text\n\ ! 78: can be read by someone with %2.0f or more years of schooling,\n"; ! 79: ! 80: char *more_str = ! 81: "\n More Information on Sentence Structure\n\ ! 82: \n Since passives, nominalizations, as well as expletives\n\ ! 83: all require some form of the verb \"to be,\" an easy way to\n\ ! 84: identify difficult paragraphs is to look for the overuse of\n\ ! 85: forms of \"be.\" The `findbe' program makes this easy; it for-\n\ ! 86: mats a text and underlines and capitalizes all forms of \"to\n\ ! 87: be.\" To use it type:\n\n\ ! 88: findbe filename\n\n\ ! 89: You can also use the `style' program to print your sentences\n\ ! 90: containing both a passive verb and a nominalization. Type:\n\n\ ! 91: style -n filename\n"; ! 92: ! 93: char *read0 = ! 94: " Good TMs\n\ ! 95: average close to 13th grade level, even though the audience\n\ ! 96: has more education than that.\n"; ! 97: char *read2 = ! 98: " Good train-\n\ ! 99: ing materials average close to the 10th grade level, even\n\ ! 100: though the audience has more education than that.\n"; ! 101: char *read3 = ! 102: " Your good\n\ ! 103: materials average close to grade %4.1f.\n"; ! 104: char *read1 = ! 105: " Since Coke\n\ ! 106: found that 62%% of Bell System craft have difficulty reading\n\ ! 107: documents with readability scores above 12.0, the majority\n\ ! 108: of the craft will probably not be able to read this.\n"; ! 109: ! 110: char *begmsg = ! 111: "\n Writing teachers also stress that no more than 75\n\ ! 112: percent of the sentences in a text should begin with the\n\ ! 113: subject of the sentence; these start with the subject\n\ ! 114: %2.0f%% of the time. Try starting more of your sentences with\n\ ! 115: prepositions, adverbs, or conjunctions. This change will\n\ ! 116: have the added benefit of adding variety of sentence length\n\ ! 117: and type.\n"; ! 118: ! 119: char *pasnom ="\n Passives and Nominalizations\n\ ! 120: \n You have appropriately limited your use of passives and\n\ ! 121: nominalizations \(nouns made from verbs, e.g. \"description\"\).\n"; ! 122: ! 123: char *badpas = ! 124: "\n This text contains a %s higher percentage of passive verbs\n\ ! 125: (%4.1f%%) than is common in good documents of this type (%2.0f%%).\n"; ! 126: ! 127: char *badnom ="\n This text has a higher percentage of nominalizations\n\ ! 128: (%4.1f%%) than is common in good documents of this type (%2.0f%%).\n"; ! 129: ! 130: char *badexp ="\n Expletives\n\ ! 131: \n This text contains a higher percentage of expletives\n\ ! 132: (%4.1f%%) than is common in good documents of this type (%2.0f%%).\n"; ! 133: ! 134: struct _iobuf *fp; ! 135: main(argc,argv) ! 136: int argc; ! 137: char *argv[]; ! 138: { ! 139: char *rather="rather"; ! 140: char *very="very"; ! 141: char *too="too"; ! 142: char *much="much"; ! 143: char *null=""; ! 144: char *qual; ! 145: char *note; ! 146: char *readmsg; ! 147: struct _iobuf *fpath; ! 148: int h,h0,fflag,sflag,ret; ! 149: char save[81], buf[100]; ! 150: int i,aud,npara,p,j; ! 151: int numabst; ! 152: float kindex, avw,snonf, simple,complex, compound, compdx; ! 153: float ppron,padj, var[14],array[14][4],sc[14]; ! 154: float passive,explet; ! 155: int nomin,x; ! 156: int numsent, maxsent, qcount, icount,ml,lsum,mg,gsum; ! 157: long numwds,numnonf; ! 158: int maxindex,minindex,minsent; ! 159: float aindex,cindex,fgrad,findex,avl,fnumnonf,centlsum,centgsum; ! 160: int nsimple,ncomplex,ncompound,ncompdx,ntobe; ! 161: int npassive,pron,pos,adj,art,beg,begadv,begprep,begverb,begscon; ! 162: int begconj, begexp,noun; ! 163: float ptobe,paux,pinfin,padv,pconjc,pprepc,pnoun,pnomin,tot; ! 164: float pbegprep,pbegadv,pbegverb,pbegscon,pbegconj,pbegexp; ! 165: int tobe,aux,infin,prepc,conjc,adv; ! 166: char path[80]; ! 167: fflag=0; ! 168: sflag=0; ! 169: aud=0; ! 170: note = note0; ! 171: readmsg = read0; ! 172: strcpy(path,"/usr/lib/style"); ! 173: if(argc >= 2){ ! 174: i=0; ! 175: if(*(argv[1]+i) =='f') { ! 176: fflag=1; ! 177: i++; ! 178: } ! 179: if(*(argv[1]+i) =='s') { ! 180: sflag=1; ! 181: i++; ! 182: } ! 183: switch (*(argv[1]+i)){ ! 184: case 'm': ! 185: aud=0; ! 186: note = note0; ! 187: readmsg = read0; ! 188: break; ! 189: case 't': ! 190: aud=2; ! 191: note = note2; ! 192: readmsg = read2; ! 193: strds("/usr/lib/style/train.st","training"); ! 194: break; ! 195: case 'c': ! 196: aud=1; ! 197: note = note1; ! 198: readmsg = read1; ! 199: strds("/usr/lib/style/crft.st","Craft"); ! 200: break; ! 201: case 'x': ! 202: aud=3; ! 203: note = note3; ! 204: readmsg = read3; ! 205: if((fp=fopen(argv[2],"r"))==0){ ! 206: fprintf((&_iob[2]),"Prose can't find your standards file \"%s,\" try specifying a more complete pathname.\n",argv[2]); ! 207: exit(1); ! 208: } ! 209: break; ! 210: } ! 211: } ! 212: ! 213: if(aud==0) ! 214: strds("/usr/lib/style/tm.st","TM"); ! 215: findbeg: ! 216: if(fgets(save,81,(&_iob[0]))==0){ ! 217: fprintf((&_iob[2]),"The file named after the -f flag doesn't seem\ ! 218: to contain a style table.\nOr else style cannot produce a table for your\ ! 219: file.\n Try running style alone on your file.\n"); ! 220: exit(1); ! 221: } ! 222: ret=sscanf(save,"%*s%f%*s%f%*s%f%*s%f (%f)", ! 223: &kindex,&aindex,&cindex,&fgrad,&findex); ! 224: if(ret !=5 ) goto findbeg; ! 225: fgets(buf,100,(&_iob[0])); ! 226: scanf("%*s%*s%d%*s%*s%ld",&numsent,&numwds); ! 227: scanf("%*s%*s%*s%f%*s%*s%*s%f",&avw,&avl); ! 228: scanf("%*s%*s%d%*s%*s%d",&qcount,&icount); ! 229: scanf("%*s%*s%*s%d%f%%%*s%*s%f",&numnonf,&fnumnonf,&snonf); ! 230: scanf("%*s%*s (<%d) %f%% (%d) %*s%*s (>%d) %f%% (%d)", ! 231: &ml,¢lsum,&lsum,&mg,¢gsum,&gsum); ! 232: scanf("%*s%*s%d%*s%*s%*s%d;%*s%*s%d%*s%*s%*s%d\n", ! 233: &maxsent,&maxindex,&minsent,&minindex); ! 234: fgets(buf,100,(&_iob[0])); ! 235: scanf("%*s%f%% (%d) %*s %f%% (%d)",&simple,&nsimple,&complex,&ncomplex); ! 236: scanf("%*s%f%% (%d) %*s%f%% (%d)\n", ! 237: &compound,&ncompound,&compdx,&ncompdx); ! 238: fgets(buf,100,(&_iob[0])); ! 239: fgets(buf,100,(&_iob[0])); ! 240: scanf("%*s%f%% (%d) %*s %f%% (%d)%*s%f%% (%d)", ! 241: &ptobe,&tobe,&paux,&aux,&pinfin,&infin); ! 242: scanf("%*s%*s %% %*s%*s%*s%f%% (%d)\n",&passive,&npassive); ! 243: fgets(buf,100,(&_iob[0])); ! 244: scanf("%*s %f%% (%d)%*s%f%% (%d)%*s%f%% (%d)", ! 245: &pprepc,&prepc,&pconjc,&conjc,&padv,&adv); ! 246: scanf("%*s%f%% (%d)%*s %f%% (%d)%*s%f%% (%d)", ! 247: &pnoun,&noun, &padj,&adj,&ppron,&pron); ! 248: scanf("%*s%f %% (%d)\n",&pnomin,&nomin); ! 249: fgets(buf,100,(&_iob[0])); ! 250: scanf("%*s%*s%*s (%d)%*s (%d)%*s (%d)%*s (%d)%*s (%d)%*s%f%%", ! 251: &noun,&pron,&pos,&adj,&art,&tot); ! 252: scanf("%*s%f%% (%d)%*s%f%% (%d) ",&pbegprep,&begprep,&pbegadv,&begadv); ! 253: scanf("%*s%f%% (%d) ",&pbegverb,&begverb); ! 254: scanf("%*s%f%% (%d)%*s%f%% (%d)",&pbegscon,&begscon,&pbegconj,&begconj); ! 255: scanf("%*s%f%% (%d)",&pbegexp,&begexp); ! 256: ! 257: ! 258: var[0]=kindex; ! 259: var[1]=snonf; ! 260: var[2]=centlsum; ! 261: var[3]=centgsum; ! 262: var[4]=simple; ! 263: var[5]=complex; ! 264: var[6]=compound; ! 265: var[7]=compdx; ! 266: var[8]=passive; ! 267: var[9]=pnomin; ! 268: var[10]=avw; ! 269: var[11]=pbegexp; ! 270: var[12]=simple-complex; ! 271: var[13]=compound+compdx; ! 272: ! 273: ! 274: ret=0; ! 275: for(i=0;i <14; i++) ! 276: for(j=0;j<4; j++){ ! 277: ret+=fscanf(fp,"%f",&array[i][j]); ! 278: } ! 279: ! 280: ! 281: if(ret!=(14*4)){ ! 282: fprintf((&_iob[2]),"The standards file is not formatted\ ! 283: properly.\nIt should have %d lines, each with 4 floating point numbers.\n", ! 284: 14); ! 285: exit(1); ! 286: } ! 287: ! 288: ! 289: ! 290: for(i=0; i< 14; i++){ ! 291: sc[i]=0; ! 292: for(j=0; j < 4;j++){ ! 293: if(var[i] > array[i][j]) sc[i]=j+1; ! 294: } ! 295: } ! 296: ! 297: ! 298: ! 299: ! 300: if(numwds < 2000 && numsent <100) ! 301: printf(disclm); ! 302: if(sflag) goto shortans ; ! 303: printf(note,argv[2]); ! 304: ! 305: printf(kincaid,kindex); ! 306: if(sc[0]==0){ ! 307: printf("which is a low score for this type of document."); ! 308: if (aud==0) ! 309: printf(" If this is\nan instructional text\ ! 310: (in paragraph form), run prose -t for\na more appropriate review.\n"); ! 311: else if(aud==2)(--((&_iob[1]))->_cnt>=0? ((int)(*((&_iob[1]))->_ptr++=('\n'))):_flsbuf(('\n'),(&_iob[1]))); ! 312: } ! 313: else if(sc[0] < 3) ! 314: printf("which is a good score for documents like this.\n"); ! 315: else { ! 316: if(sc[0] == 3)qual=rather; ! 317: else qual=very; ! 318: printf("which is %s high for this type of document.",qual); ! 319: if(aud != 1)printf(readmsg,(array[0][1]+array[0][2])/2.0); ! 320: if(sc[1] > 2) ! 321: prtfile("/usr/lib/style/rd2.t"); ! 322: if(aud == 1)printf(readmsg); ! 323: ! 324: } ! 325: ! 326: ! 327: printf("\nVARIATION\n"); ! 328: if(sc[12]==4 || sc[12]==0 || tot >79.0) ! 329: prtfile("/usr/lib/style/var.t"); ! 330: if(sc[12]==0||sc[12]==4) ! 331: printf("\n In this text %2.0f%% of the sentences are\ ! 332: simple, %2.0f%% are\ncomplex, giving a difference of %3.0f. This\ ! 333: difference should\nrange from %2.0f to %2.0f for good documents of this\ ! 334: type.\n",simple,complex, simple-complex,array[12][1],array[12][2]); ! 335: if(sc[12]==4){ ! 336: if(sc[10] < 2) ! 337: prtfile("/usr/lib/style/type.t"); ! 338: else ! 339: prtfile("/usr/lib/style/type2.t"); ! 340: } ! 341: else if(sc[12]==0){ ! 342: if(sc[0] < 3) ! 343: prtfile("/usr/lib/style/var4.t"); ! 344: else ! 345: prtfile("/usr/lib/style/var6.t"); ! 346: } ! 347: else printf("\n You have an appropriate distribution of sentence\ ! 348: types.\n"); ! 349: if(maxsent >= 50){ ! 350: if(sc[12]==0 || sc[12]==4) ! 351: printf("\n Additionally, the longest sentence is\ ! 352: %d words long.\n",maxsent); ! 353: else printf("\n The longest sentence,\ ! 354: however, is %d words long.\n",maxsent); ! 355: prtfile("/usr/lib/style/var5.t"); ! 356: } ! 357: if(sc[10] > 2){ ! 358: if(sc[12]==4 || sc[12]==0) ! 359: printf("\n Such changes would also help to\ ! 360: reduce the average\n"); ! 361: else printf("\n You should, however, consider\ ! 362: shortening your average\n"); ! 363: printf("sentence length. Your average is %2.0f words,\ ! 364: which is ",var[10]); ! 365: if(sc[10]==3)printf("high.\n"); ! 366: if(sc[10]==4) printf(" very\nhigh. "); ! 367: printf("A good average would be %2.0f to %2.0f words.\n", ! 368: array[10][1],array[10][2]); ! 369: } ! 370: if(tot >79.0){ ! 371: printf(begmsg,tot); ! 372: } ! 373: printf("\nSENTENCE STRUCTURE\n"); ! 374: if(sc[8]<=2 && sc[9] <=2) { ! 375: printf(pasnom); ! 376: } ! 377: else { ! 378: printf("\n Passives\n"); ! 379: if(sc[8] > 2){ ! 380: if(sc[8] == 3)qual=null; ! 381: else qual=much; ! 382: printf(badpas,qual,var[8],(array[8][1]+array[8][2])/2.0); ! 383: prtfile("/usr/lib/style/pass.t"); ! 384: } ! 385: else printf("\n You have limited your passives appropriately.\n"); ! 386: printf("\n Nominalizations\n"); ! 387: if(sc[9] > 2){ ! 388: printf(badnom,var[9],(array[9][1]+array[9][2])/2.0); ! 389: prtfile("/usr/lib/style/nom.t"); ! 390: } ! 391: else printf("\n You have appropriately limited your\ ! 392: nominalizations\n\(nouns made from verbs, e.g., \"description\"\).\n"); ! 393: } ! 394: if(sc[11]==4){ ! 395: printf(badexp,var[11],(array[11][1]+array[11][2])/2.0); ! 396: prtfile("/usr/lib/style/exp.t"); ! 397: } ! 398: if(sc[8]>2 && sc[9]>2){ ! 399: printf(more_str); ! 400: } ! 401: if(!fflag){ ! 402: if(aud==0) ! 403: prtfile("/usr/lib/style/popttm.t"); ! 404: else if(aud==2) ! 405: prtfile("/usr/lib/style/poptt.t"); ! 406: } ! 407: prtfile("/usr/lib/style/fur.t"); ! 408: exit(0); ! 409: shortans : ! 410: if(aud==0) printf("Compared to TMs.\n\n"); ! 411: else if(aud==1) printf("Evaluated for Craft.\n\n"); ! 412: else if(aud==2) printf("Compared to training material.\n\n"); ! 413: else if(aud==3)printf("Compared to file \"%s\"\n",argv[2]); ! 414: printf("Reading grade level--%2.0f: ",kindex); ! 415: if(sc[0]==1 || sc[0]==2) printf("Good\n"); ! 416: else if(sc[0]==0) printf("Low\n"); ! 417: else if(sc[0]==3) printf("High\n"); ! 418: else if(sc[0]==4)printf("Very high\n"); ! 419: ! 420: ! 421: printf("Variation--"); ! 422: if(sc[12] == 4) ! 423: printf("Too many short, simple sentences--subordinate.\n"); ! 424: else if(sc[12]==0) printf("Too many complex sentences.\n"); ! 425: else printf("Good sentence type distribution.\n"); ! 426: if(sc[10] > 2){ ! 427: if(sc[10]==3) ! 428: qual = too; ! 429: else qual = very; ! 430: printf(" Sentences are %s long--avg\ ! 431: length=%2.1f words\n",qual,var[10]); ! 432: printf(" --Good length\ ! 433: = %2.1f to %2.1f\n",array[10][1],array[10][2]); ! 434: } ! 435: if( maxsent >50) ! 436: printf("Longest sentence is %d words---perhaps it is a list\n" ! 437: ,maxsent); ! 438: if(tot >79.0) ! 439: printf(" %2.0f%%= Too many sentences begin with\ ! 440: the subject.\n",tot); ! 441: ! 442: printf("Passives--%2.0f%%: ",passive); ! 443: if(sc[8]<=2)printf("Good\n"); ! 444: else if(sc[8] ==3)printf("High\n"); ! 445: else if(sc[8]==4)printf("Very high\n"); ! 446: ! 447: printf("Nominalizations--%2.0f%%: ",pnomin); ! 448: if(sc[9]<=2)printf("Good\n"); ! 449: else if(sc[9]==3)printf("High\n"); ! 450: else if(sc[9]==4)printf("Very high\n"); ! 451: ! 452: if(sc[11]==4)printf("Expletive--%2.0f%%: Very high\n",pbegexp); ! 453: if (!fflag) printf("Don't forget the styl.tmp file.\n"); ! 454: (--((&_iob[1]))->_cnt>=0? ((int)(*((&_iob[1]))->_ptr++=('\n'))):_flsbuf(('\n'),(&_iob[1]))); ! 455: } ! 456: prtfile(s) ! 457: char *s; ! 458: { ! 459: struct _iobuf *ff; ! 460: char ch[512]; ! 461: int num; ! 462: if((ff=fopen(s,"r"))==0){ ! 463: fprintf((&_iob[2]),"Prose can't find the file %s\n",s); ! 464: exit(1); ! 465: } ! 466: while((num=fread(ch,sizeof(ch[0]),512,ff))) ! 467: fwrite(ch,sizeof(ch[0]),num,(&_iob[1])); ! 468: fclose(ff); ! 469: } ! 470: strds(s1,s2) ! 471: char *s1, *s2; ! 472: { ! 473: if((fp=fopen(s1,"r"))==0){ ! 474: fprintf((&_iob[2]),"Prose can't find the %s standards file %s\n", ! 475: s2,s1); ! 476: exit(1); ! 477: } ! 478: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.