PROCEDURE	<HYPHEN - HYPHENATION ROUTINE>,010000
;+
; Copyright (C) 1976
; Digital Equipment Corporation, Maynard, Mass.
;
; This software is furnished under  a license for use only  on  a
; single computer system and may be  copied only with  the inclu-
; sion of  the  above  copyright notice.  This software,  or  any
; other copies thereof, may not be  provided  or  otherwise  made
; available to any other person except  for  use  on  such system
; and to  one who agrees  to  these license  terms.  Title to and
; ownership of the software shall at all times remain in DEC.
;
; The information in this software  is  subject to change without
; notice and should not be construed  as  a commitment by Digital
; Equipment Corporation.
;
; DEC assumes no responsibility for the use or reliability of its
; software on equipment which is not supplied by DEC.
;
; Version M01
;
; Author: L. Wade 1-Jun-72
;
; Modified by:
;
;	E. Pollack U. of W. 19-Dec-73
;
;	D. N. Cutler 27-Jul-75
;
; SIG modifications
;
;	sig03	- change checks to c-bit
;
; hyphenation routine
;	This routine was adapted from the Bell Telephone Labs
;	hyphenation algorithm.

;
; lower case character values
;

	DATA	HYPHND,LCL

	.IF DF	H$$PHN

A=141
B=142
C=143
D=144
E=145
F=146
G=147
H=150
I=151
J=152
K=153
L=154
M=155
N=156
O=157
P=160
Q=161
R=162
S=163
T=164
U=165
V=166
W=167
X=170
Y=171
Z=172

MQ:	.WORD	0
THRESH: .WORD	20
WCH:	.WORD	0
HSTART:	.WORD	0
NHSTART:.WORD	0
MAXLOC:	.WORD	0
MAXDIG:	.WORD	0
SUFB:	.BLKB	20.
NHYPH:	.WORD	0
WORDP:	.WORD	0

	CODE	HYPHEN
; 
; Main hyphenation routine.  Upon entry, R0 contains
; 	the address of a single word, terminated by a
; 	zero byte which is to be hyphenated.
; 

HYPHEN::
	MOV	R0,WORDP
	INC	WORDP		; point to second char
	CLR	NHYPH
HYP01:
	JSR	PC,PUNCT	; is the char. a punct. mark?
	BNE	HYP02		; no
	INC	R0		; skip over it
	BR	HYP01		; and re-loop
HYP02:
	MOVB	(R0),R2		; pick up the character.
	BITB	#CHAUC!CHALC,CHATBL(R2) ; is character alphabetic?
	BEQ	HYP06		; no, so don't hyphenate				; sig03
	MOV	R0,R3		; save starting address of string
HYP03:
	INC	R0		; skip over it
	MOVB	(R0),R2		; pick up the character.
	BITB	#CHAUC!CHALC,CHATBL(R2) ; is character alphabetic?
	BNE	HYP03		; ne - then alphabetic string.
	SUB	R0,R3		; compute negative string length
	CMP	#-6,R3		; string long enough?
	BLT	HYP06		; if lt no
	DEC	R0		; point to last character
	MOV	R0,HSTART	; save pointer
HYP04:
	INC	R0		; is the following
	TSTB	(R0)		; character
	BEQ	HYP05		; the word terminator??
	JSR	PC,PUNCT	; or a known punctuation?
	BNE	HYP06		; no, don't hyphenate
	BR	HYP04		; loop until term. found
HYP05:
	JSR	R5,SUFFIX	; go get the suffix forms allowed
	JSR	R5,DIGRAM
HYP06:
	BICB	#200,@WORDP	; disallow single char. break
	RTS	PC		; return to caller
; 
; is the character under scan in the class of known
; 	punctuation marks??
; 
PUNCT:
	MOVB	(R0),R2
	CMP	R2,#" /
	BEQ	PU01
	CMP	R2,#'.
	BEQ	PU01
	CMP	R2,#',
	BEQ	PU01
	CMP	R2,#'(
	BEQ	PU01
	CMP	R2,#')
	BEQ	PU01
	CMP	R2,#'"
	BEQ	PU01
	CMP	R2,#'\
	BEQ	PU01
	CMP	R2,#'@
PU01:
	RTS	PC

; 
; map upper case to lower case
; 
MAPLOW:
	CMP	R2,#A
	BHIS	MAP01
	ADD	#A-'A,R2
MAP01:
	RTS	PC

; 
; check to see if character is a vowel (y is considered
; 	a vowel here)
; 
VOWEL:
	CMP	R2,#A		; it can be an a
	BEQ	VO001
	CMP	R2,#E		; or e
	BEQ	VO001
	CMP	R2,#I		; or i
	BEQ	VO001
	CMP	R2,#O		; or o
	BEQ	VO001
	CMP	R2,#U		; or u
	BEQ	VO001
	CMP	R2,#Y		; or even y
VO001:
	RTS	PC

; 
; check to see if any vowels precede the current character
; 	position
; 
CHECKVOW:
	MOV	R0,-(SP)
CK01:
	MOVB	-(R0),R2
	BITB	#CHAUC!CHALC,CHATBL(R2) ; is character alphabetic?
	BEQ	CK03		; eq - then it's not alpha.
	JSR	PC,MAPLOW	; map to lower case
	JSR	PC,VOWEL
	BEQ	CK02
	MOVB	(R0),R2		; pick up the character.
	BITB	#CHAUC!CHALC,CHATBL(R2) ; is it alphabetic?
	BNE	CK01		; ne - then it's alphabetic.
CK03:	MOV	(SP)+,R0
	CLZ
	RTS	R5
CK02:
	MOV	(SP)+,R0
	SEZ
	RTS	R5


; hyp2 -- suffix and digram

DIGRAM:
	MOV	HSTART,R0
DIG01:
	MOVB	(R0),R2		; pick up the character.
	BITB	#CHAUC!CHALC,CHATBL(R2) ; is it alphabetic?
	BEQ	DIG09		; eq - then it's not.
	JSR	PC,MAPLOW
	JSR	PC,VOWEL
	BEQ	DIG02
	DEC	R0
	BR	DIG01
DIG02:
	MOV	R0,HSTART
DIG03:
	MOVB	-(R0),R2
	BITB	#CHAUC!CHALC,CHATBL(R2) ; is the character alphabetic?
	BEQ	DIG09		; eq - then it's not.
	JSR	PC,MAPLOW
	JSR	PC,VOWEL
	BNE	DIG03
	CLR	MAXDIG
	MOV	R0,NHSTART
DIG04:
	MOV	#1,MQ
	MOVB	-1(R0),R2
	BITB	#CHALC!CHAUC,CHATBL(R2) ; is the character alphabetic?
	BNE	DIG05		; ne - yes
	MOVB	(R0),R2
	MOV	#A,R1
	JSR	R5,DILOOK
	BXH
	BR	DIG07
DIG05:
	MOVB	-2(R0),R2
	BITB	#CHALC!CHAUC,CHATBL(R2) ; is the character alphabetic?
	BNE	DIG06		; ne - yes
	MOVB	-1(R0),R1
	MOVB	(R0),R2
	JSR	R5,DILOOK
	BXXH
	BR	DIG07
DIG06:
	MOVB	-1(R0),R1
	MOVB	(R0),R2
	JSR	R5,DILOOK
	XXH
DIG07:
	MOVB	(R0)+,R1
	MOVB	(R0),R2
	JSR	R5,DILOOK
	XHX
	MOVB	(R0),R1
	MOVB	1(R0),R2
	JSR	R5,DILOOK
	HXX
	CMP	MQ,MAXDIG
	BLOS	DIG08
	MOV	MQ,MAXDIG
	MOV	R0,MAXLOC
DIG08:
	CMP	R0,HSTART
	BLO	DIG04
	MOV	NHSTART,HSTART
	CMP	MAXDIG,THRESH
	BLO	DIGRAM
	BISB	#200,@MAXLOC
	INC	NHYPH
; 	mov	maxdig,@octbufp
; 	inc	octcnt
; 	add	#2,octbufp
	BR	DIGRAM
DIG09:
	RTS	R5

DILOOK:
	BIC	#-177-1,R2
	BIC	#-177-1,R1
	JSR	PC,MAPLOW
	SUB	#A,R2
	CMP	R2,#Z-A
	BHI	DIL02
	MOV	R2,R3
	MOV	R1,R2
	JSR	PC,MAPLOW
	SUB	#A,R2
	CMP	R2,#Z-A
	BHI	DIL02
	MOV	R1,-(SP)
	MOV	R0,-(SP)
	MOV	MQ,-(SP)
	MOV	R2,R0
	.IF NDF	R$$EIS
	MOV	#13.,R1
	CALL	$MUL
	.IFF
	MUL	#13.,R0
	.ENDC	; r$$eis
	CLR	R2
	ROR	R3
	ADC	R2
	ADD	R1,R3
	ADD	(R5)+,R3
	MOVB	(R3),R3
	TST	R2
	BNE	DIL01
	ASR	R3
	ASR	R3
	ASR	R3
	ASR	R3
DIL01:
	BIC	#-17-1,R3
	MOV	R3,R0
	.IF NDF	R$$EIS
	MOV	(SP)+,R1
	CALL	$MUL
	.IFF
	MUL	(SP)+,R0
	.ENDC	; r$$eis
	MOV	R1,MQ
	MOV	(SP)+,R0
	MOV	(SP)+,R1
	RTS	R5
DIL02:
	CLR	MQ
	TST	(R5)+
	RTS	R5

; 
; mark any legal suffix forms in the prototype and return
; 
SUFFIX:
	MOV	HSTART,R0	; get pointer to last char.
	MOVB	(R0),R2		; pick up the character.
	BITB	#CHALC!CHAUC,CHATBL(R2) ; is the character alphabetic?
	BEQ	SUF08		; eq - no, exit.
	JSR	PC,MAPLOW	; map char. to lower case
	SUB	#A,R2		; get table offset
	ASL	R2		; convert to word index
	MOV	SUFTAB(R2),-(SP) ; get address of suffix dictionary
	BEQ	SUF07		; exit if no dictionary entry
SUF01:
	MOV	HSTART,R0	; address of last character
	MOV	(SP),R1		; address of suffix dictionary
	JSR	PC,RDSUF	; get a suffix dict. entry
	MOVB	(R1),R3		; get entry length
	BEQ	SUF07		; end of dictionary
	BIC	#-17-1,R3	; clear flag bits
	ADD	R3,(SP)		; address of next entry
	ADD	R1,R3		; address of end of entry
SUF02:
	MOVB	-(R3),R2	; get a character
	CMP	R3,R1		; all done?
	BLOS	SUF03		; yes,got it
	BIC	#-177-1,R2	; mask extra flag bits
	MOV	R2,-(SP)	; save dictionary character
	MOVB	-(R0),R2	; get source character
	JSR	PC,MAPLOW	; map to lower case
	CMP	R2,(SP)+	; do we have a match?
	BNE	SUF01		; no, go get next suffix form
	BR	SUF02		; keep checking
SUF03:
	MOV	HSTART,R0	; get address of last source char.
	TST	(SP)+		; discard directory address
	MOVB	(R1),R3		; get length of suffix form
	BIC	#-17-1,R3	; mask off flag bits
	ADD	R1,R3		; and
	TSTB	(R1)+		; look for the hyphen
	BMI	SUF05		; found it!!
SUF04:
	DEC	R0		; fine the
	CMP	R3,R1		; last hyphen
	BLOS	SUF06		; in the prototype
	TSTB	-(R3)		; and position source
	BPL	SUF04		; pointer accordingly
SUF05:
	MOV	R0,HSTART	; set pointer to last hyphen
	DEC	HSTART		; minus one
	BITB	#100,-1(R1)	; end of alphabetics?
	BNE	SUF04		; no, keep going
	JSR	R5,CHECKVOW	; any vowels preceding this char?
	BNE	SUF08		; no, exit
	BISB	#200,(R0)	; set the hyphen mark
	BR	SUF04		; and re-loop
SUF06:
	BITB	#40,-(R1)	; should we look for more to chop?
	BEQ	SUFFIX		; yes
	BR	SUF08		; no, exit
SUF07:
	TST	(SP)+
SUF08:
	RTS	R5

; 
; get a suffix dictionary entry
; 	upon return, R1 has address of suffix
; 
RDSUF:
	MOV	R0,-(SP)
	MOV	4(SP),R1	; address of suff. dict. entry
	MOVB	(R1)+,R0	; get character in entry
	MOV	#SUFB,R2
	MOVB	R0,(R2)+	; store the character
	MOV	R0,R3
	BIC	#-17-1,R3	; get count of chars. needed
RDS01:
	DEC	R3		; loop until complete entry
	BLT	RDS02		; is stored
	MOVB	(R1)+,(R2)+
	BR	RDS01
RDS02:
	MOV	#SUFB,R1	; get address of suffix entry
	MOV	(SP)+,R0
	RTS	PC		; and return


	PDATA	HYPHNP,LCL

; hyp4 -- digram tables

BXH:
.BYTE 060,000,040,000,040,000,000,040,000,000,040,000,040

HXX:
.BYTE 006,042,041,123,021,024,063,042,002,043,021,001,022
.BYTE 140,000,200,003,260,006,000,160,007,000,140,000,320
.BYTE 220,000,160,005,240,010,000,100,006,000,200,000,320
.BYTE 240,000,120,003,140,000,000,240,010,000,220,000,160
.BYTE 042,023,041,040,040,022,043,041,030,064,021,000,041
.BYTE 100,000,140,000,220,006,000,140,003,000,200,000,000
.BYTE 200,000,120,002,220,010,000,160,006,000,140,000,320
.BYTE 020,000,020,000,020,000,000,020,000,000,020,000,000
.BYTE 043,163,065,044,022,043,104,042,061,146,061,000,007
.BYTE 100,000,140,000,040,000,000,100,000,000,120,000,000
.BYTE 140,000,040,011,060,004,001,120,003,000,140,000,040
.BYTE 200,000,100,000,140,000,000,140,000,000,140,000,240
.BYTE 200,000,140,000,160,000,000,220,000,000,140,000,240
.BYTE 200,000,140,000,160,000,000,220,000,000,060,000,240
.BYTE 021,043,041,121,040,023,042,003,142,042,061,001,022
.BYTE 120,000,140,010,140,010,000,140,002,000,120,000,120
.BYTE 000,000,000,000,360,000,000,000,000,000,160,000,000
.BYTE 100,000,040,005,120,000,000,100,000,000,060,000,140
.BYTE 140,040,100,001,240,041,000,242,000,002,140,000,100
.BYTE 240,000,120,002,200,000,000,320,007,000,240,000,340
.BYTE 101,021,041,020,040,005,042,121,002,021,201,000,020
.BYTE 160,000,100,000,140,000,000,160,006,000,220,000,140
.BYTE 140,000,020,001,020,000,000,100,001,000,300,000,000
.BYTE 000,000,000,000,000,000,000,000,000,000,000,000,000
.BYTE 106,041,040,147,040,000,063,041,001,102,160,002,002
.BYTE 300,000,040,017,140,017,000,240,000,000,140,000,120

BXXH:
.BYTE 005,150,153,062,062,246,152,127,146,203,310,017,206
.BYTE 100,000,120,000,140,000,000,100,000,000,120,000,060
.BYTE 100,000,040,000,060,000,000,060,000,000,220,000,040
.BYTE 100,000,120,000,200,000,000,100,000,000,140,000,060
.BYTE 043,142,046,140,062,147,210,131,046,106,246,017,111
.BYTE 060,000,020,000,060,000,000,040,000,000,100,000,000
.BYTE 060,000,040,000,040,000,000,040,000,000,100,000,040
.BYTE 100,000,100,000,100,000,000,040,000,000,100,000,140
.BYTE 066,045,145,140,000,070,377,030,130,103,003,017,006
.BYTE 040,000,040,000,020,000,000,040,000,000,100,000,000
.BYTE 200,000,020,000,140,000,000,120,000,000,120,000,040
.BYTE 120,000,040,000,060,000,000,060,000,000,160,000,040
.BYTE 120,000,040,000,120,000,000,040,000,000,160,000,040
.BYTE 120,000,020,000,140,000,000,120,000,000,140,000,040
.BYTE 051,126,150,140,060,210,146,006,006,165,003,017,244
.BYTE 120,000,040,000,160,000,000,140,000,000,060,000,140
.BYTE 000,000,000,000,000,000,000,000,000,000,000,000,000
.BYTE 140,000,140,000,060,000,000,100,000,000,140,000,020
.BYTE 120,000,020,000,060,000,000,060,000,000,060,000,040
.BYTE 140,000,020,000,100,000,000,140,000,000,140,000,020
.BYTE 070,125,051,162,120,105,126,104,006,044,000,017,052
.BYTE 140,000,020,000,140,000,000,060,000,000,060,000,040
.BYTE 020,000,000,000,020,000,000,000,000,000,000,000,060
.BYTE 140,000,160,000,200,000,000,140,000,000,000,000,240
.BYTE 065,042,060,200,000,210,222,146,006,204,220,012,003
.BYTE 240,000,020,000,120,000,000,200,000,000,200,000,240

XHX:
.BYTE 032,146,042,107,076,102,042,146,202,050,006,000,051
.BYTE 036,377,057,013,057,366,377,057,001,377,057,000,040
.BYTE 037,377,020,000,100,022,377,057,362,116,100,000,017
.BYTE 057,377,057,031,137,363,377,037,362,270,077,000,117
.BYTE 074,142,012,236,076,125,063,165,341,046,047,000,024
.BYTE 020,017,075,377,040,001,377,017,001,204,020,000,040
.BYTE 057,017,057,340,140,362,314,117,003,302,100,000,057
.BYTE 057,357,077,017,100,366,314,057,342,346,037,000,060
.BYTE 252,145,072,157,377,165,063,066,164,050,363,000,362
.BYTE 000,000,020,000,020,000,000,017,000,000,020,000,000
.BYTE 117,017,237,377,200,354,125,110,004,257,000,000,300
.BYTE 057,367,054,357,157,216,314,114,217,353,053,000,057
.BYTE 077,213,077,077,177,317,377,114,377,352,077,000,076
.BYTE 077,213,077,077,157,177,377,054,377,352,117,000,075
.BYTE 125,230,065,216,057,066,063,047,345,126,011,000,033
.BYTE 057,377,051,360,120,361,273,056,001,256,057,000,060
.BYTE 000,000,000,000,000,000,000,000,000,000,000,000,000
.BYTE 076,310,056,310,137,174,273,055,335,266,033,000,155
.BYTE 077,157,057,360,057,063,042,024,077,206,020,000,040
.BYTE 057,037,077,360,100,365,377,037,362,176,050,000,026
.BYTE 167,146,042,112,077,110,062,254,366,052,377,000,163
.BYTE 060,000,040,000,120,000,377,060,012,000,037,000,257
.BYTE 037,232,157,361,040,003,125,010,001,256,000,000,340
.BYTE 377,377,377,377,377,377,377,377,377,377,377,017,277
.BYTE 253,315,257,216,377,206,146,306,371,126,232,000,004
.BYTE 057,012,100,360,160,360,000,040,000,017,157,000,176

XXH:
.BYTE 045,150,154,162,042,246,210,147,152,103,230,017,206
.BYTE 100,000,040,000,140,000,000,100,000,021,120,017,060
.BYTE 100,000,040,002,140,320,000,060,000,001,220,017,040
.BYTE 100,001,120,001,241,000,000,100,000,020,140,017,060
.BYTE 023,162,046,142,022,207,210,131,052,106,250,017,110
.BYTE 060,000,042,000,160,000,000,040,000,212,100,017,000
.BYTE 140,000,040,002,140,000,000,120,000,040,120,017,040
.BYTE 100,000,100,000,140,001,021,140,000,046,100,017,140
.BYTE 066,045,025,201,020,130,146,030,130,103,025,017,006
.BYTE 100,000,040,000,020,000,000,040,000,000,200,017,000
.BYTE 200,000,020,001,140,000,000,140,000,000,120,017,040
.BYTE 120,026,042,020,140,161,042,143,000,022,162,017,040
.BYTE 121,042,060,020,140,200,000,123,000,021,220,017,041
.BYTE 121,042,060,120,140,200,000,123,000,021,160,017,041
.BYTE 051,126,150,141,060,210,146,066,026,165,026,017,247
.BYTE 120,000,040,003,160,000,000,140,000,021,100,017,140
.BYTE 000,000,000,000,200,000,000,000,000,000,000,017,000
.BYTE 141,023,122,040,160,143,042,142,000,047,143,017,020
.BYTE 120,000,040,006,140,060,000,141,000,026,100,017,040
.BYTE 140,000,020,007,100,000,000,140,000,001,140,017,020
.BYTE 110,125,051,162,120,125,127,104,006,104,000,017,052
.BYTE 140,000,040,000,160,000,000,140,000,000,060,017,000
.BYTE 040,005,020,000,040,313,231,030,000,140,000,017,056
.BYTE 140,000,160,000,200,000,000,140,000,000,000,017,240
.BYTE 065,042,060,040,000,206,231,146,006,224,220,017,004
.BYTE 240,000,020,000,140,000,000,220,000,000,200,017,141

.EVEN

; suftab - suffix table

SUFTAB:
   SUFA
   0
   SUFC
   SUFD
   SUFE
   SUFF
   SUFG
   SUFH
   SUFI
   0
   SUFK
   SUFL
   SUFM
   SUFN
   0
   SUFP
   0
   SUFR
   SUFS
   SUFT
   0
   0
   0
   0
   SUFY
   0


SUFA:
.BYTE 2,200+T	;-ta
.BYTE 2,200+S	;-sa
.BYTE 3,200+T,R	;-tra
.BYTE 3,200+D,R	;-dra
.BYTE 3,200+B,R	;-bra
.BYTE 2,200+P	;-pa
.BYTE 2,200+N	;-na
.BYTE 2,200+M	;-ma
.BYTE 3,200+P,L	;-pla
.BYTE 2,200+L	;-la
.BYTE 2,200+K	;-ka
.BYTE 3,200+T,H	;-tha
.BYTE 3,200+S,H	;-sha
.BYTE 2,200+G	;-ga
.BYTE 2,200+D	;-da
.BYTE 2,200+C	;-ca
.BYTE 2,200+B	;-ba
.BYTE 0

SUFC:
.BYTE 4,E,T,200+I	;et-ic
.BYTE 7,A,L,200+I,S,200+T,I	;al-is-tic
.BYTE 4,S,200+T,I	;s-tic
.BYTE 4,P,200+T,I	;p-tic
.BYTE 5,200+L,Y,T,200+I	;-lyt-ic
.BYTE 4,O,T,200+I	;ot-ic
.BYTE 5,A,N,200+T,I	;an-tic
.BYTE 4,N,200+T,I	;n-tic
.BYTE 4,C,200+T,I	;c-tic
.BYTE 4,A,T,200+I	;at-ic
.BYTE 4,H,200+N,I	;h-nic
.BYTE 3,N,200+I	;n-ic
.BYTE 3,M,200+I	;m-ic
.BYTE 4,L,200+L,I	;l-lic
.BYTE 3,L,200+I	;l-ic
.BYTE 3,H,200+I	;h-ic
.BYTE 3,F,200+I	;f-ic
.BYTE 3,D,200+I	;d-ic
.BYTE 3,200+B,I	;-bic
.BYTE 3,A,200+I	;a-ic
.BYTE 3,200+M,A	;-mac
.BYTE 3,I,200+A	;i-ac
.BYTE 0

SUFD:
.BYTE 4,200+W,O,R	;-word
.BYTE 4,200+L,O,R	;-lord
.BYTE 4,200+F,O,R	;-ford
.BYTE 4,200+Y,A,R	;-yard
.BYTE 4,200+W,A,R	;-ward
.BYTE 5,200+G,U,A,R	;-guard
.BYTE 4,200+T,A,R	;-tard
.BYTE 5,200+B,O,A,R	;-board
.BYTE 4,200+N,A,R	;-nard
.BYTE 5,200+L,I,A,R	;-liard
.BYTE 4,200+I,A,R	;-iard
.BYTE 4,200+G,A,R	;-gard
.BYTE 4,200+B,A,R	;-bard
.BYTE 3,200+R,O	;-rod
.BYTE 4,200+W,O,O	;-wood
.BYTE 4,200+H,O,O	;-hood
.BYTE 4,200+M,O,N	;-mond
.BYTE 4,200+T,E,N	;-tend
.BYTE 5,200+S,T,A,N	;-stand
.BYTE 4,200+L,A,N	;-land
.BYTE 4,200+H,A,N	;-hand
.BYTE 4,200+H,O,L	;-hold
.BYTE 4,200+F,O,L	;-fold
.BYTE 5,200+F,I,E,L	;-field
.BYTE 3,200+V,I	;-vid
.BYTE 3,200+C,I	;-cid
.BYTE 4,200+S,A,I	;-said
.BYTE 4,200+M,A,I	;-maid
.BYTE 4,T,200+T,E	;t-ted
.BYTE 3,T,200+E	;t-ed
.BYTE 4,200+D,R,E	;-dred
.BYTE 4,200+C,R,E	;-cred
.BYTE 4,200+B,R,E	;-bred
.BYTE 5,V,200+E,L,E	;v-eled
.BYTE 100+4,A,L,200+E	;al;ed
.BYTE 140+3,200+E,E	;;eed
.BYTE 40+5,E,D,200+D,E	;ed-ded
.BYTE 3,200+E,A		; -ead
.BYTE 4,D,200+D,E	;d-ded
.BYTE 40+4,E,D,200+E	;ed-ed
.BYTE 3,D,200+E	;d-ed
.BYTE 5,200+D,U,C,E	;-duced
.BYTE 300+2,E	;e;d
.BYTE 5,200+S,T,E,A	;-stead
.BYTE 4,200+H,E,A	;-head
.BYTE 0

SUFE:
.BYTE 5,A,R,200+I,Z	;ar-ize
.BYTE 5,A,N,200+I,Z	;an-ize
.BYTE 5,A,L,200+I,Z	;al-ize
.BYTE 6,200+A,R,D,200+I,Z	;-ard-ize
.BYTE 5,200+S,E,L,V	;-selve
.BYTE 5,200+K,N,I,V	;-knive
.BYTE 5,200+L,I,E,V	;-lieve
.BYTE 7,O,N,200+T,I,N,200+U	;on-tin-ue
.BYTE 3,200+N,U	;-nue
.BYTE 3,200+D,U	;-due
.BYTE 300+2,U	;u;e
.BYTE 300+5,Q,U,A,T	; quat;e
.BYTE 4,U,200+A,T	;u-ate
.BYTE 5,200+S,T,A,T	;-state
.BYTE 4,200+T,A,T	;-tate
.BYTE 6,200+T,O,R,200+A,T	;-tor-ate
.BYTE 5,E,N,200+A,T	;en-ate
.BYTE 4,200+M,A,T	;-mate
.BYTE 5,200+H,O,U,S	;-house
.BYTE 5,200+C,L,O,S	;-close
.BYTE 4,I,200+O,S	;i-ose
.BYTE 4,200+W,I,S	;-wise
.BYTE 5,A,S,200+U,R	;as-ure
.BYTE 40+4,200+S,U,R	;-sure
.BYTE 6,200+F,I,G,200+U,R	;-fig-ure
.BYTE 40+3,200+T,R	;-tre
.BYTE 5,200+S,T,O,R	;-store
.BYTE 4,200+F,O,R	;-fore
.BYTE 5,200+W,H,E,R	;-where
.BYTE 3,200+D,R	;-dre
.BYTE 3,200+C,R	;-cre
.BYTE 3,200+B,R	;-bre
.BYTE 5,200+S,C,O,P	;-scope
.BYTE 4,Y,200+O,N	;y-one
.BYTE 5,200+S,T,O,N	;-stone
.BYTE 5,200+P,H,O,N	;-phone
.BYTE 4,200+G,O,N	;-gone
.BYTE 4,E,200+O,N	;e-one
.BYTE 40+4,200+E,N,N	;-enne
.BYTE 40+5,A,200+R,I,N	;a-rine
.BYTE 5,200+C,L,I,N	;-cline
.BYTE 4,200+L,I,N	;-line
.BYTE 4,200+S,O,M	;-some
.BYTE 4,200+C,O,M	;-come
.BYTE 4,200+T,I,M	;-time
.BYTE 3,200+Z,L	;-zle
.BYTE 3,200+T,L	;-tle
.BYTE 3,200+S,L	;-sle
.BYTE 3,200+P,L	;-ple
.BYTE 5,200+V,I,L,L	;-ville
.BYTE 4,C,K,200+L	;ck-le
.BYTE 3,200+K,L	;-kle
.BYTE 3,200+G,L	;-gle
.BYTE 3,200+F,L	;-fle
.BYTE 3,200+D,L	;-dle
.BYTE 3,200+C,L	;-cle
.BYTE 5,200+P,A,200+B,L	;-pa-ble
.BYTE 5,F,A,200+B,L	;fa-ble
.BYTE 5,200+C,A,200+B,L	;-ca-ble
.BYTE 4,200+A,B,L	;-able
.BYTE 3,200+B,L	;-ble
.BYTE 4,200+D,A,L	;-dale
.BYTE 4,200+M,A,L	;-male
.BYTE 4,200+S,A,L	;-sale
.BYTE 4,200+L,I,K	;-like
.BYTE 340+5,G,200+U,A,G	;-g;uage
.BYTE 5,200+R,I,A,G	;-riage
.BYTE 5,E,R,200+A,G	;er-age
.BYTE 4,M,200+A,G	;m-age
.BYTE 4,K,200+A,G	;k-age
.BYTE 4,D,200+A,G	;d-age
.BYTE 4,200+W,I,F	;-wife
.BYTE 5,200+K,N,I,F	;-knyfe
.BYTE 3,200+S,E	;-see
.BYTE 4,200+F,R,E	;-free
.BYTE 340+2,E	;ee
.BYTE 4,200+W,I,D	;-wide
.BYTE 4,200+T,I,D	;-tide
.BYTE 4,200+S,I,D	;-side
.BYTE 6,200+Q,U,E,N,C	;-quence
.BYTE 7,200+F,L,U,200+E,N,C	;-flu-ence
.BYTE 40+6,E,S,200+E,N,C	;es-ence
.BYTE 6,E,R,200+E,N,C	;er-ence
.BYTE 5,I,200+E,N,C	;i-ence
.BYTE 40+5,200+S,A,N,C	;-sance
.BYTE 6,E,R,200+A,N,C	;er-ance
.BYTE 6,A,R,200+A,N,C	;ar-ance
.BYTE 5,200+N,A,N,C	;-nance
.BYTE 7,200+B,A,L,200+A,N,C	;-bal-ance
.BYTE 5,I,200+A,N,C	;i-ance
.BYTE 7,200+J,U,S,200+T,I,C	;-jus-tice
.BYTE 5,200+S,T,I,C	;-stice
.BYTE 5,200+P,I,E,C	;-piece
.BYTE 5,200+P,L,A,C	;-place
.BYTE 340+1	;;e
.BYTE 0

SUFF:
.BYTE 5,200+P,R,O,O	;-proof
.BYTE 4,200+S,E,L	;-self
.BYTE 3,200+R,I	;-rif
.BYTE 40+4,200+L,I,E	;-lief
.BYTE 0

SUFG:
.BYTE 3,200+L,O	;-log
.BYTE 4,200+L,O,N	;-long
.BYTE 5,T,200+T,I,N	;t-ting
.BYTE 6,200+S,T,R,I,N	; -string
.BYTE 5,R,200+R,I,N	;r-ring
.BYTE 5,P,200+P,I,N	;p-ping
.BYTE 5,N,200+N,I,N	;n-ning
.BYTE 5,M,200+M,I,N	;m-ming
.BYTE 5,L,200+L,I,N	; l-ling
.BYTE 5,200+Z,L,I,N	;-zling
.BYTE 5,200+T,L,I,N	;-tling
.BYTE 40+5,S,200+L,I,N	;s-ling
.BYTE 5,R,200+L,I,N	;r-ling
.BYTE 5,200+P,L,I,N	;-pling
.BYTE 6,N,200+K,L,I,N	;n-kling
.BYTE 5,K,200+L,I,N	;k-ling
.BYTE 5,200+G,L,I,N	;-gling
.BYTE 5,200+F,L,I,N	;-fling
.BYTE 5,200+D,L,I,N	;-dling
.BYTE 5,200+C,L,I,N	;-cling
.BYTE 5,200+B,L,I,N	;-bling
.BYTE 6,Y,200+T,H,I,N	;y-thing
.BYTE 7,E,E,T,H,200+I,N	;eeth-ing
.BYTE 6,E,200+T,H,I,N	;e-thing
.BYTE 5,G,200+G,I,N	;g-ging
.BYTE 5,D,200+D,I,N	;d-ding
.BYTE 5,B,200+B,I,N	;b-bing
.BYTE 3,200+I,N	;-ing
.BYTE 0

SUFH:
.BYTE 5,200+M,O,U,T	;-mouth
.BYTE 5,200+W,O,R,T	;-worth
.BYTE 4,200+W,I,T	;-with
.BYTE 5,T,200+T,I,S	;t-tish
.BYTE 5,E,200+T,I,S	;e-tish
.BYTE 5,P,200+P,I,S	;p-pish
.BYTE 5,R,200+N,I,S	;r-nish
.BYTE 5,N,200+N,I,S	;n-nish
.BYTE 5,200+P,L,I,S	;-plish
.BYTE 5,200+G,U,I,S	; -guish
.BYTE 5,200+G,L,I,S	; -glish
.BYTE 5,B,200+L,I,S	; b-lish
.BYTE 5,G,200+G,I,S	;g-gish
.BYTE 5,D,200+D,I,S	;d-dish
.BYTE 3,200+I,S	;-ish
.BYTE 5,200+G,R,A,P	;-graph
.BYTE 7,200+B,O,R,200+O,U,G	;-bor-ough
.BYTE 5,200+B,U,R,G	;-burgh
.BYTE 4,200+V,I,C	;-vich
.BYTE 3,200+N,A	;-nah
.BYTE 3,200+L,A	;-lah
.BYTE 4,200+M,I,200+A	;-mi-ah
.BYTE 0

SUFI:
.BYTE 3,200+T,R	;-tri
.BYTE 3,200+C,H	;-chi
.BYTE 200+3,I,F	;if-i
.BYTE 200+3,E,D	;ed-i
.BYTE 0

SUFK:
.BYTE 4,200+W,O,R	;-work
.BYTE 4,200+B,O,O	;-book
.BYTE 4,200+W,A,L	;-walk
.BYTE 5,200+C,R,A,C	;-crack
.BYTE 4,200+B,A,C	;-back
.BYTE 0

SUFL:
.BYTE 3,200+F,U	;-ful
.BYTE 5,S,200+W,E,L	;s-well
.BYTE 4,200+T,E,L	;-tell
.BYTE 5,200+S,H,E,L	;-shell
.BYTE 5,200+S,T,A,L	;-stall
.BYTE 4,200+B,A,L	;-ball
.BYTE 3,V,200+E	;v-el
.BYTE 3,U,200+E	;u-el
.BYTE 3,K,200+E	;k-el
.BYTE 4,T,H,200+E	;th-el
.BYTE 5,T,C,H,200+E	;tch-el
.BYTE 3,A,200+E	;a-el
.BYTE 140+4,200+Q,U,A	;;qual
.BYTE 40+3,U,200+A	;u-al
.BYTE 3,200+T,A	;-tal
.BYTE 4,U,R,200+A	;ur-al
.BYTE 40+5,G,200+O,200+N,A	;g-o-nal
.BYTE 4,O,N,200+A	;on-al
.BYTE 3,200+N,A	;-nal
.BYTE 4,200+T,I,A	;-tial
.BYTE 4,200+S,I,A	;-sial
.BYTE 40+5,200+T,R,I,200+A	;-tri-al
.BYTE 4,R,I,200+A	;ri-al
.BYTE 4,200+N,I,200+A	;-ni-al
.BYTE 4,200+D,I,200+A	;-di-al
.BYTE 4,200+C,I,A	;-cial
.BYTE 3,200+G,A	;-gal
.BYTE 4,200+M,E,A	;-meal
.BYTE 40+4,200+R,E,200+A	;-re-al
.BYTE 6,C,200+T,I,200+C,A	;c-ti-cal
.BYTE 5,200+S,I,200+C,A	;-si-cal
.BYTE 4,200+I,200+C,A	;-i-cal
.BYTE 3,200+C,A	;-cal
.BYTE 3,200+B,A	;-bal
.BYTE 0

SUFM:
.BYTE 3,200+N,U	;-num
.BYTE 5,O,200+R,I,200+U	;o-ri-um
.BYTE 40+3,I,200+U	;i-um
.BYTE 40+3,E,200+U	;e-um
.BYTE 5,I,V,200+I,S	;iv-ism
.BYTE 4,200+T,I,S	;-tism
.BYTE 5,I,200+M,I,S	;i-mism
.BYTE 5,A,L,200+I,S	;al-ism
.BYTE 40+4,E,200+I,S	;e-ism
.BYTE 40+4,A,200+I,S	;a-ism
.BYTE 4,200+R,O,O	;-room
.BYTE 3,200+D,O	;-dom
.BYTE 3,200+H,A	;-ham
.BYTE 0

SUFN:
.BYTE 4,200+T,O,W	;-town
.BYTE 4,200+D,O,W	;-down
.BYTE 4,200+T,U,R	;-turn
.BYTE 5,200+S,P,O,O	;-spoon
.BYTE 4,200+N,O,O	;-noon
.BYTE 4,200+M,O,O	;-moon
.BYTE 11,A,L,200+I,200+Z,A,200+T,I,O	;al-i-za-tion
.BYTE 7,200+I,200+Z,A,200+T,I,O	;-i-za-tion
.BYTE 7,L,200+I,200+A,200+T,I,O	;l-i-a-tion
.BYTE 4,200+T,I,O	;-tion
.BYTE 40+5,S,200+S,I,O	;s-sion
.BYTE 4,200+S,I,O	;-sion
.BYTE 4,N,200+I,O	;n-ion
.BYTE 4,200+G,I,O	;-gion
.BYTE 4,200+C,I,O	;-cion
.BYTE 3,200+C,O	;-con
.BYTE 3,200+T,O	;-ton
.BYTE 3,200+S,O	;-son
.BYTE 3,200+R,I	;-rin
.BYTE 3,200+P,I	;-pin
.BYTE 3,200+N,I	;-nin
.BYTE 3,200+M,I	;-min
.BYTE 3,200+L,I	;-lin
.BYTE 3,200+K,I	;-kin
.BYTE 5,200+S,T,E,I	;-stein
.BYTE 4,200+T,A,I	;-tain
.BYTE 5,G,H,T,200+E	;ght-en
.BYTE 5,200+W,O,M,200+E	;-wom-en
.BYTE 3,200+M,E	;-men
.BYTE 4,O,200+K,E	;o-ken
.BYTE 3,K,200+E	;k-en
.BYTE 4,200+T,E,E	;-teen
.BYTE 4,200+S,E,E	;-seen
.BYTE 40+3,200+S,A	;-san
.BYTE 5,200+W,O,M,200+A	;-wom-an
.BYTE 3,200+M,A	;-man
.BYTE 4,200+T,I,A	;-tian
.BYTE 4,200+S,I,A	;-sian
.BYTE 40+4,E,200+I,A	;e-ian
.BYTE 4,200+C,I,A	;-cian
.BYTE 300+3,I,A	;ia;n
.BYTE 40+3,E,200+A	;e-an
.BYTE 0

SUFP:
.BYTE 2,200+U	;-up
.BYTE 4,200+S,H,I	;-ship
.BYTE 4,200+K,E,E	;-keep
.BYTE 0

SUFR:
.BYTE 4,200+Z,A,R	;-zarr
.BYTE 300+2,R	;r;r
.BYTE 3,200+T,O	;-tor
.BYTE 40+3,200+S,O	;-sor
.BYTE 40+4,200+R,I,200+O	;-ri-or
.BYTE 4,I,Z,200+E	;iz-er
.BYTE 5,200+C,O,V,200+E	;-cov-er
.BYTE 4,O,200+V,E	;o-ver
.BYTE 40+5,U,S,200+T,E	;us-ter
.BYTE 5,O,S,T,200+E	;ost-er
.BYTE 40+5,I,S,200+T,E	;is-ter
.BYTE 40+5,E,S,200+T,E	;es-ter
.BYTE 40+5,A,S,200+T,E	;as-ter
.BYTE 4,200+S,T,E	;-ster
.BYTE 5,A,R,200+T,E	;ar-ter
.BYTE 4,R,T,200+E	;rt-er
.BYTE 40+5,M,200+E,200+T,E	;m-e-ter
.BYTE 5,200+W,A,200+T,E	;-wa-ter
.BYTE 3,R,200+E	;r-er
.BYTE 4,O,P,200+E	;op-er
.BYTE 5,200+P,A,200+P,E	;-pa-per
.BYTE 4,W,N,200+E	;wn-er
.BYTE 40+4,S,200+N,E	;s-ner
.BYTE 4,O,N,200+E	;on-er
.BYTE 4,R,M,200+E	;rm-er
.BYTE 4,L,L,200+E	;ll-er
.BYTE 5,D,200+D,L,E	;d-dler
.BYTE 4,200+B,L,E	;-bler
.BYTE 3,K,200+E	;k-er
.BYTE 5,N,200+T,H,E	;n-ther
.BYTE 6,200+F,A,200+T,H,E	;-fa-ther
.BYTE 6,E,I,200+T,H,E	;ei-ther
.BYTE 4,T,H,200+E	;th-er
.BYTE 4,S,H,200+E	;sh-er
.BYTE 4,200+P,H,E	;-pher
.BYTE 4,C,H,200+E	;ch-er
.BYTE 4,D,G,200+E	;dg-er
.BYTE 4,R,D,200+E	;rd-er
.BYTE 6,O,U,N,D,200+E	;ound-er
.BYTE 4,L,D,200+E	;ld-er
.BYTE 4,I,D,200+E	;id-er
.BYTE 5,200+D,U,C,200+E	;-duc-er
.BYTE 4,N,C,200+E	;nc-er
.BYTE 100+2, 200+E	; ;er
.BYTE 3,200+S,A	;-sar
.BYTE 40+6,A,C,200+U,200+L,A	;ac-u-lar
.BYTE 40+6,E,C,200+U,200+L,A	;ec-u-lar
.BYTE 40+6,I,C,200+U,200+L,A	;ic-u-lar
.BYTE 40+6,E,G,200+U,200+L,A	;eg-u-lar
.BYTE 0

SUFS:
.BYTE 40+4,U,200+O,U	;u-ous
.BYTE 5,200+T,I,O,U	;-tious
.BYTE 5,200+G,I,O,U	;-gious
.BYTE 5,200+C,I,O,U	;-cious
.BYTE 40+4,I,200+O,U	;i-ous
.BYTE 5,200+G,E,O,U	;-geous
.BYTE 5,200+C,E,O,U	;-ceous
.BYTE 4,E,200+O,U	;e-ous
.BYTE 140+2,200+U	;;us
.BYTE 4,200+N,E,S	;-ness
.BYTE 4,200+L,E,S	;-less
.BYTE 140+2,200+S	;;ss
.BYTE 40+5,P,200+O,200+L,I	;p-o-lis
.BYTE 140+2,200+I	;;is
.BYTE 100+3,200+X,E	;x;es
.BYTE 100+3,200+S,E	;s;es
.BYTE 100+4,S,H,200+E	;sh;es
.BYTE 100+4,C,H,200+E	;ch;es
.BYTE 300+1	;;s
.BYTE 0

SUFT:
.BYTE 6,I,O,N,200+I,S	;ion-ist
.BYTE 5,I,N,200+I,S	;in-ist
.BYTE 5,A,L,200+I,S	;al-ist
.BYTE 6,L,200+O,200+G,I,S	;l-o-gist
.BYTE 5,H,T,200+E,S	;ht-est
.BYTE 4,I,200+E,S	;i-est
.BYTE 5,G,200+G,E,S	;g-gest
.BYTE 4,G,200+E,S	;g-est
.BYTE 5,D,200+D,E,S	;d-dest
.BYTE 4,D,200+E,S	;d-est
.BYTE 4,200+C,A,S	;-cast
.BYTE 5,200+H,E,A,R	;-heart
.BYTE 4,200+F,O,O	;-foot
.BYTE 3,I,200+O	;i-ot
.BYTE 5,200+F,R,O,N	;-front
.BYTE 5,200+P,R,I,N	;-print
.BYTE 4,200+M,E,N	;-ment
.BYTE 5,200+C,I,E,N	;-cient
.BYTE 4,I,200+A,N	;i-ant
.BYTE 6,200+W,R,I,G,H	;-wright
.BYTE 6,200+B,R,I,G,H	;-bright
.BYTE 6,200+F,L,I,G,H	;-flight
.BYTE 6,200+W,E,I,G,H	;-weight
.BYTE 5,200+S,H,I,F	;-shift
.BYTE 5,200+C,R,A,F	;-craft
.BYTE 40+4,D,G,200+E	;dg-et
.BYTE 4,200+G,O,A	;-goat
.BYTE 4,200+C,O,A	;-coat
.BYTE 4,200+B,O,A	;-boat
.BYTE 4,200+0,I,N	;-oint
.BYTE 4,200+W,H,A	;-what
.BYTE 0

SUFY:
.BYTE 40+4,E,S,200+T	;es-ty
.BYTE 3,S,T	;sty
.BYTE 40+5,Q,U,I,200+T	;qui-ty
.BYTE 4,200+T,I,200+T	;-ti-ty
.BYTE 40+5,O,S,200+I,200+T	;os-i-ty
.BYTE 4,200+S,I,200+T	;-si-ty
.BYTE 5,I,N,200+I,200+T	;in-i-ty
.BYTE 4,N,I,200+T	;ni-ty
.BYTE 40+10,F,A,200+B,I,L,200+I,200+T	;fa-bil-i-ty
.BYTE 10,200+C,A,200+B,I,L,200+I,200+T	;-ca-bil-i-ty
.BYTE 10,200+P,A,200+B,I,L,200+I,200+T	;-pa-bil-i-ty
.BYTE 6,200+B,I,L,200+I,200+T	;-bil-i-ty
.BYTE 3,I,200+T	;i-ty
.BYTE 4,200+B,U,R	;-bur-y
.BYTE 4,200+T,O,200+R	;-to-ry
.BYTE 5,200+Q,U,A,R	;-quar-y
.BYTE 40+4,U,200+A,R	;u-ary
.BYTE 7,200+M,E,N,200+T,A,200+R	;-men-ta-ry
.BYTE 6,I,O,N,200+A,R	;ion-ary
.BYTE 4,I,200+A,R	;i-ary
.BYTE 4,N,200+O,200+M	;n-o-my
.BYTE 3,200+P,L	;-ply
.BYTE 4,G,200+G,L	;g-gly
.BYTE 5,200+P,A,200+B,L	;-pa-bly
.BYTE 5,F,A,200+B,L	;fa-bly
.BYTE 5,200+C,A,200+B,L	;-ca-bly
.BYTE 4,200+A,B,L	;-ably
.BYTE 3,200+B,L	;-bly
.BYTE 2,200+L	;-ly
.BYTE 3,200+S,K	;-sky
.BYTE 40+6,G,200+R,A,200+P,H	;g-ra-phy
.BYTE 4,L,200+O,200+G	;l-o-gy
.BYTE 2,200+F	;-fy
.BYTE 3,200+N,E	;-ney
.BYTE 3,200+L,E	;-ley
.BYTE 4,C,K,200+E	;ck-ey
.BYTE 3,200+K,E	;-key
.BYTE 4,200+B,O,D	;-body
.BYTE 340+4,E,E,D	;eedy
.BYTE 2,200+B	;-by
.BYTE 3,200+W,A	;-way
.BYTE 3,200+D,A	;-day
.BYTE 0
.EVEN

	.ENDC


	.END
