outp.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 326 行

C
326
字号
#ifndef lintstatic char sccsid[] = "@(#)outp.c	4.2	(Berkeley)	82/11/06";#endif not lint#include <stdio.h>#include <ctype.h>#include "style.h"#include "names.h"#include "conp.h"char *names[] = {	"noun", "verb", "interjection", "adjective", "adverb", "conjunction", "possessive",	"pronoun", "article", "preposition", "auxiliary", "tobe", "", "subordinate conjunction",  "expletive"};extern int barebones;outp(){	struct ss *st;	char *ssp;	char *spart, ff;	int index, lverbc;	int nn, sc, f, kk,comp, begsc;	int conjf, verbf,lpas,bflg,lexp,olvb;	int nom;	int infinf, ovflg;	int lvowel,nlet;	int imper;	float rd;	extern FILE *deb;	extern int nosave;	if(barebones){		for(sentp=sent;sentp->cc != END;sentp++)			printf("%s %c %c\n",sentp->sp,sentp->ic,sentp->cc);		printf("%s %c %c\n",sentp->sp,sentp->ic,sentp->cc);		return;	}	if(topic){		for(sentp=sent;sentp->cc != END;sentp++){			if(sentp->cc==ADJ && (sentp+1)->cc==NOUN){				printf("%s ",sentp->sp);				sentp++;				printf("%s\n",sentp->sp);			}			else if(sentp->cc==NOUN)printf("%s\n",sentp->sp);		}		return;	}	if(style){	nn = kk = 0;	for(sentp=sent;sentp->cc != END;sentp++){		if(sentp->cc != ',' && sentp->cc != '"')nn++;		if(sentp->cc == VERB || sentp->cc == BE || sentp->cc == AUX)kk++;	}	if(nn < 4 && kk == 0)return;	}	imper = lexp = lpas = index = lverbc = nom = 0;	conjf = verbf = kk = nn = sc = comp = begsc = 0;	bflg = olvb = infinf = ovflg = 0;	nlet = 0;	f = 1;	sentp=sent;	while(sentp->cc != END){/*	printf("%c:",sentp->ic);	*/		if(sentp->cc == ';')comp++;		else {			if((sentp->cc != ',') && (sentp->cc != '"')){				if(*sentp->sp != 'x'){					nn++;					nlet += sentp->leng;				}				kk++;			}		}		switch(sentp->cc){		case NOUN:			spart ="noun";			if(f)index=0;			if((sentp->ic==NOM)||(sentp->ic==PNOUN  && islower(*(sentp->sp)))){				sentp->ic = NOM;				nom++;				if(nosave && (deb != NULL))	/* SAVE NOM */					fprintf(deb,"%s\n",sentp->sp);			}			if(*sentp->sp != 'x'){				noun++;				numnonf++;				letnonf += sentp->leng;			}			bflg = infinf = ovflg = 0;			break;		case VERB:			spart = "verb";			if(f)index=1;			if(sentp->ic==TO){				infin++;				infinf=1;				lverbc++;			}			else {				if(f)imper=1;				if(ovflg == 0 && infinf == 0){					ovflg = 1;					lverbc++;					olvb++;				}				numnonf++;				letnonf += sentp->leng;				if(infinf == 0){					if(verbf == 0)verbf++;					else if(conjf)comp++;				}				if(bflg && sentp->ic == ED){lpas++; ++passive;}			}			break;		case INTER:			spart = "interj";			if(f)index=2;			bflg = infinf = ovflg = 0;			break;		case ADJ:			spart = "adj";			if(f)index=3;			adj++;			numnonf++;			if(sentp->ic == NOM){				nom++;				if(nosave && (deb != NULL))	/* SAVE NOM */					fprintf(deb,"%s\n",sentp->sp);			}			letnonf += sentp->leng;			bflg = infinf = ovflg = 0;			break;		case ADV:			spart = "adv";			if(f)index=4;			adv++;			numnonf++;			letnonf += sentp->leng;			break;		case CONJ:			spart = "conj";			conjc++;			if(f)index=5;			if(infinf && (sentp+1)->cc == VERB);			else {				if(verbf)conjf++;				bflg = infinf = ovflg = 0;			}			break;		case POS:			spart = "pos";			if(f)index=6;			bflg = infinf = ovflg = 0;			break;		case PRONS:		case PRONP:			spart = "pron";			pron++;			if(f){				index=7;				if((sentp+1)->cc == BE){				if(sentp->leng == 5 && *(sentp->sp) == 't' && *((sentp->sp)+3)=='r'){index=14;lexp=1;}				else if(sentp->leng ==2&& *(sentp->sp) == 'i' ){index=14;lexp=1;}				}			}			bflg = infinf = ovflg = 0;			if(sentp->ic == THAT || sentp->ic == WHO)sc++;			break;		case ART:			spart = "art";			if(f)index=8;			bflg = infinf = ovflg = 0;			break;		case PREP:			spart = "prep";			if(f)index=9;			prepc++;			bflg = infinf = ovflg = 0;			break;		case AUXX:			spart = "aux";			if(ovflg == 0 && infinf == 0){				ovflg = 1;				lverbc++;				olvb++;				aux++;			}			if(f)index=10;			break;		case BE:			if(ovflg == 0 && infinf == 0){				ovflg = 1;				lverbc++;				olvb++;			}			spart = "be";			if(f)index=11;			tobe++;			bflg = 1;			if(verbf == 0)verbf++;			else if(conjf)comp++;			break;		case SUBCONJ:			spart = "subcj";			if(f){				index=13;				begsc++;			}			sc++;			if((sentp-1)->cc != CONJ)				verbf = conjf = 0;			bflg = infinf = ovflg = 0;			break;		default:			if(sentp->cc == ','){				if(begsc)conjf=verbf=0;			}			spart = sentp->sp;		}	if(part){		printf("%s	%s\n",spart,sentp->sp);	}	if(style){		ssp=sentp->sp;		lvowel = 0;		while(*ssp != '\0'){			if(*ssp >= '0' && *ssp <= '9'){				lvowel=0;				break;			}			switch(*(ssp++)){			case 'a':			case 'e':			case 'i':			case 'o':			case 'u':			case 'y':			case 'A':			case 'E':			case 'I':			case 'O':			case 'U':			case 'Y':				lvowel++;				continue;			}		}		if(lvowel != 0){			vowel += lvowel;			twds++;		}	}		if(f){			ff=sentp->cc;			f=0;		}		sentp++;	}	if(part){		printf(".	%s\n",sentp->sp);		if(sentno < MAXPAR && nn > 0)			leng[sentno++] = nn;	}	if(nn == 0)return;	numsent++;	numlet += nlet;	tverbc += lverbc;	verbc += olvb;	if(*(sentp->sp) == '?'){		if(sc > 0)sc -= 1;		qcount++;	}	else if(*(sentp->sp) == '/')icount++;	else if(imper)icount++;	if(rstyle||pstyle)rd = 4.71*((float)(nlet)/(float)(nn))+.5*(float)(nn)-21.43;	if(pstyle ||	    (rstyle&& rd>=rthresh)||(lstyle&&nn >= lthresh)||(pastyle&&lpas)||(estyle&&lexp)	    || (nstyle && (nom > 1 || (nom && lpas)))|| (Nstyle && nom)){		if(!part){			for(st=sent, kk=0;st->cc != END;st++){				if(st->ic == NOM)					printf("*%s* ",st->sp);				else printf("%s ",st->sp);				if(kk++ >= 15){					kk=0;					printf("\n");				}			}		}		kk=1;	}	else kk=0;	if(pstyle || kk){		if(!part)printf("%s\n",sentp->sp);		printf(" sentence length: %d ",nn);		if(sc == 0){			if(comp == 0)printf("SIMPLE ");			else printf("COMPOUND ");		}		else if(comp == 0)printf("COMPLEX ");		else printf("COMPOUND-COMPLEX ");		if(index==14)printf(":expletive:");		if(lpas)printf(":passive:");		if(rstyle||pstyle)printf(" readability %4.2f ",rd);		printf(": begins with %s\n\n",names[index]);	}	if(index < 15)beg[index]++;	if(nn > maxsent){		maxsent=nn;		maxindex=numsent;	}	if(nn < minsent ){		minsent = nn;		minindex=numsent;	}	numwds += nn;	if(nn > 49)nn=49;	sleng[nn]++;	if(sc == 0){		if(comp == 0)simple++;		else compound++;	}	else if(comp == 0)complex++;	else compdx++;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?