⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n8.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic char sccsid[] = "@(#)n8.c	4.1 6/7/82";#endif lint#include "tdef.h"/*troff8.chyphenation*/char hbuf[NHEX];char *nexth = hbuf;int *hyend;extern int *wdstart, *wdend;extern int *hyptr[];extern int **hyp;extern int hyoff;extern int noscale;extern int xxx;#define THRESH 160 /*digram goodness threshold*/int thresh = THRESH;hyphen(wp)int *wp;{	register *i, j;	i = wp;	while(punct(*i++))		;	if (!alph(*--i))		return;	wdstart = i++;	while(alph(*i++))		;	hyend = wdend = --i-1;	while(punct(*i++))		;	if (*--i)		return;	if ((wdend-wdstart-4) < 0)		return;	hyp = hyptr;	*hyp = 0;	hyoff = 2;	if (!exword() && !suffix())		digram();	*hyp++ = 0;	if (*hyptr) for(j = 1; j;) {		j = 0;		for(hyp = hyptr+1; *hyp != 0; hyp++) {			if (*(hyp-1) > *hyp) {				j++;				i = *hyp;				*hyp = *(hyp-1);				*(hyp-1) = i;			}		}	}}punct(i)int i;{	if (!i || alph(i))		return(0);	else		return(1);}alph(i)int i;{	register j;	j = i & CMASK;	if (((j >= 'A') && (j <= 'Z')) || ((j >= 'a') && (j <= 'z')))		return(1);	else		return(0);}caseht(){	thresh = THRESH;	if (skip())		return;	noscale++;	thresh = atoi();	noscale = 0;}casehw(){	register i, k;	register char *j;	k = 0;	while(!skip()) {		if ((j = nexth) >= (hbuf + NHEX - 2))			goto full;		for (;;) {			if ((i = getch()) & MOT)				continue;			if (((i &= CMASK) == ' ') || (i == '\n')) {				*j++ = 0;				nexth = j;				*j = 0;				if (i == ' ')					break;				else					return;			}			if (i == '-') {				k = 0200;				continue;			}			*j++ = maplow(i) | k;			k = 0;			if (j >= (hbuf + NHEX - 2))				goto full;		}	}	return;full:	prstr("Exception word list full.\n");	*nexth = 0;}exword(){	register int *w;	register char *e;	char *save;	e = hbuf;	while(1) {		save = e;		if (*e == 0)return(0);		w = wdstart;		while((*e && (w <= hyend)) &&		      ((*e & 0177) == maplow(*w & CMASK))) {e++; w++;};		if (!*e) {			if (((w-1) == hyend) ||			   ((w == wdend) && (maplow(*w & CMASK) == 's'))) {				w = wdstart;				for(e = save; *e; e++) {					if (*e & 0200)*hyp++ = w;					if (hyp > (hyptr+NHYP-1))						hyp = hyptr+NHYP-1;					w++;				}				return(1);			}else{e++; continue;}		}else while(*e++);	}}suffix(){	register int *w;	register char *s, *s0;	int i;	extern char *suftab[];	extern int *chkvow();again:	if (!alph(i = *hyend & CMASK))		return(0);	if (i < 'a')		i -= 'A'-'a';	if ((s0 = suftab[i-'a']) == 0)		return(0);	for (;;) {		if ((i = *s0 & 017) == 0)			return(0);		s = s0 + i - 1;		w = hyend - 1;		while(((s > s0) && (w >= wdstart)) &&		   ((*s & 0177) == maplow(*w))) {			s--;			w--;		}		if (s == s0)			break;		s0 += i;	}	s = s0 + i - 1;	w = hyend;	if (*s0 & 0200) goto mark;	while(s > s0) {		w--;		if (*s-- & 0200) {	mark:			hyend = w - 1;			if (*s0 & 0100)				continue;			if (!chkvow(w))				return(0);			*hyp++ = w;		}	}	if (*s0 & 040)		return(0);	if (exword())		return(1);	goto again;}maplow(i)int i;{	if ((i &= CMASK) < 'a')i += 'a' - 'A';	return(i);}vowel(i)int i;{	switch(maplow(i)) {		case 'a':		case 'e':		case 'i':		case 'o':		case 'u':		case 'y':			return(1);		default:			return(0);	}}int *chkvow(w)int *w;{	while(--w >= wdstart)if(vowel(*w & CMASK))return(w);	return(0);}digram() {	register *w, val;	int *nhyend, *maxw, maxval;	extern char bxh[26][13], bxxh[26][13], xxh[26][13], xhx[26][13], hxx[26][13];again:	if (!(w=chkvow(hyend+1)))return;	hyend = w;	if (!(w=chkvow(hyend)))return;	nhyend = w;	maxval = 0;	w--;	while((++w < hyend) && (w < (wdend-1))) {		val = 1;		if (w == wdstart)val *= dilook('a',*w,bxh);		else if(w == wdstart+1)val *= dilook(*(w-1),*w,bxxh);		else val *= dilook(*(w-1),*w,xxh);		val *= dilook(*w, *(w+1), xhx);		val *= dilook(*(w+1), *(w+2), hxx);		if (val > maxval) {			maxval = val;			maxw = w + 1;		}	}	hyend = nhyend;	if (maxval > thresh)*hyp++ = maxw;	goto again;}dilook(a,b,t)int a, b;char t[26][13];{	register i, j;	i = t[maplow(a)-'a'][(j = maplow(b)-'a')/2];	if (!(j & 01))i >>= 4;	return(i & 017);}

⌨️ 快捷键说明

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