	.TITLE	HYPHEN
	.IDENT	/BL05/

;
;
; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF 
; THIS SOFTWARE.
;
;
; AUTHOR: L. WADE 1-JUN-72
;
; MODIFIED BY:
;
;	E. POLLACK U. OF W. 19-DEC-73
;
;	D. N. CUTLER 27-JUL-75
;
;
;	J. CLEMENT	July 1983
;		1. Use tables to define characters
;		2. Assume input is all lower case
;		3. Remove self modifying code
;		4. Define PSECTS
;		5. Rewrite for efficiency with no infinite loops
;		6. Add differential test
;		7. Add double letter test
;		8. Add prefix table
;		9. Check against HYPTST.TST for commonly used words
;
;
; HYPHENATION ROUTINE
;
;	This routine was adapted from the bell telephone labs
;	hyphenation algorithm.
;
;
; CHARACTER VALUES
;


	.IF DF	H$$PHN

A= 1	; 1
B= 2	; 2
C= 3	; 3
D= 4	; 4
E= 5	; 5
F= 6	; 6
G= 7	; 7
H=10	; 8
I=11	; 9
J=12	;10
K=13	; 11
L=14	; 12
M=15	; 13
N=16	; 14
O=17	; 15
P=20	; 16
Q=21	; 17
R=22	; 18
S=23	; 19
T=24	;20
U=25	; 21
V=26	; 22
W=27	; 23
X=30	; 24
Y=31	; 25
Z=32	;26

	.psect	VARS,RW,D,LCL,OVR
THRESH:	.word	224.		; Threshold for hyphenation
DIPTHR:	.word	512.		; Threshold for double vowels
DIFTHR:	.word	15.		; Differential threshold 8.=MAX=2*base (3.75)
	.PSECT	$TEMP,RW,D,GBL,OVR
Count:	.BLKW	1		; Number of characters to test
MQ:	.BLKW	1		; Hyphenation probability ?
MAXDIG:	.BLKW	1		; "   maximum
BASDIG:	.BLKW	1		; Next max hyphenation probability
HSTART:	 .BLKW	1		; Current last char in word
NHSTART:.BLKW	1		; Last hyphen point
NHYPH:	.BLKW	1		; Number of hyphens added
MAXCHR:	.BLKW	1		; Maximum char to hyphenate
MINCHR:	.BLKW	1		; Minimum char to hyphenate
WORDF:	.BLKW	1		; First char in word
WORDL:	.BLKW	1		; Last char in word

	.PSECT	$CODE,RO,LCL,CON,I
;
; MAIN HYPHENATION ROUTINE.  Upon entry, r0 contains
;	the address of a string of words, terminated by a
;	zero byte, which are to be hyphenated.
;	The string must be preceeded by a zero byte.
;	The words must be in lower case.
;
;	The hyphenated characters have 200 added to them.
;	R0=number of hyphenations when return to caller.
;	All other registers are destroyed
;
HYPTST:: TST	(R5)+
	MOV	(R5)+,R0		; Fortran entry
	MOV	@(R5)+,HYPLO
	MOV	@(R5)+,HYPHI	
	MOVB	@(R5)+,HYPOP
	MOV	@(R5)+,HYPSZ
	MOV	@(R5)+,THRESH		; Threshold of hyp
	MOV	@(R5)+,DIFTHR		; Threshold of hyp
	MOV	@(R5)+,DIPTHR		; Threshold of hyp
	
HYPHEN::
	CLR	NHYPH
1$:	MOVB	(R0)+,R1		; Get char
	BEQ	30$
	CMPB	GCTABL(R1),#GC.LC	; Alphabetic char ?
	BNE	1$			; no ?
	DEC	R0			; Points to first char
	MOV	R0,WORDF
	MOV	R0,MINCHR		; Minimum char to hyphenate
	ADD	HYPLO,MINCHR		; Add minimum to skip
	MOV	R0,R3			; SAVE STARTING ADDRESS OF STRING
10$:	MOVB	(R0)+,R1		; Current char
	CMPB	GCTABL(R1),#GC.LC	; Alphabetic char ?
	BEQ	10$			; Yes ?
	DEC	R0
	SUB	R0,R3			; -number of chars
	MOV	R0,MAXCHR		; Maximum char to hyphenate
	SUB	HYPHI,MAXCHR		; Subtract off trailing deletion
	DEC	R0			; Point to last character in word
	MOV	R0,WORDL		; Point to last char in word
	MOV	R0,HSTART		; SAVE POINTER
	CMP	R3,HYPSZ		; Check if enough chars for hyphenation
	BGT	20$			; no ?
	CMP	MAXCHR,MINCHR		; Check if possible
	BLO	20$			; No ?
	CALL	FNDSYL			; Any syllables ?
	BNE	20$			; None ?
	TSTB	HYPOP			; Skip suffix
	BLT	17$			; Yes ?
	CALL	SUFFIX			; GO GET THE SUFFIX FORMS ALLOWED
	CALL	PREFIX			; Prefix routine
17$:	TSTB	HYPOP			; Skip DIGRAM ?
	BGT	20$			; Yes ?
	CMP	MAXCHR,MINCHR		; Check if possible
	BLO	20$			; No ?
	CALL	DIGRAM			; Do calculated hyphenation
20$:	MOV	WORDL,R0		; Next word !!
	INC	R0			; Points to char after last word
	BR	1$
30$:	MOV	NHYPH,R0		; Hyphenation count
	RETURN				; RETURN TO CALLER
;
;	CHECK TO SEE IF ANY VOWELS PRECEDE THE CURRENT CHARACTER
;	POSITION
;		R0 is destroyed
;		R1 points to the vowel
;		Z is set if vowel found
;
FNDVOW:	MOV	R5,R0			; Get current pointer
1$:	MOVB	-(R0),R1		; get next char
	BIC	#^C<177>,R1		; Clear extra bits
	CMPNEB	GCTABL(R1),#GC.LC,20$ 	; Not alpha char?
10$:	BITNEB	CHTABL(R1),#CH.VOW,30$	; vowel?
	TSTB	(R0)			; Check if already hyphenated
	BGT	1$			; Not hyphenated ?
20$:	RETURN				; No vowel
30$:	SEZ				; Found vowel
	RETURN
;
;	Find a valid syllable
;		R5=first vowel
;		R0=second vowel
;
FNDSYL:	MOV	HSTART,R5
	INC	R5			; include Hstart in search
	CALL	FNDVOW			; Find  vowel
	BNE	10$			; None ?
	TSTB	(R0)			; Check for hyphen
	BLT	10$			; Hyphenated already ?
	MOV	R0,R5			; 
	CMP	R5,MINCHR		; see if too low
	BLO	10$			; Lower than min ?
	CALL	FNDVOW			; Find  second vowel
10$:	RETURN
;
;	Calculate the hyphenation using rules + probability table
;
DIGRAM:	CLR	MAXDIG			; Clear max
	CLR	BASDIG			; And base
	CALL	FNDSYL			; Find if syllable available
	BNE	50$			; No syllable ?
	MOV	R5,HSTART
	MOV	R5,R1
	SUB	R0,R1			; Number of chars to check
;
;	Handle Vowel,X1,X2,vowel where X1=X2
;
	CMPNE	R1,#3,5$		; Not vowel,X1,X2,vowel ?
	CMPNEB	-1(R5),-2(R5),5$	; Not X1=X2 ?
	DEC	R5			; Point to X2
	BR	45$			; Hyphenate it
5$:	.IFDF	$DIGR
	MOV	R1,COUNT		; Save number of chars
	DEC	R1
	BEQ	10$			; Not possible dipthong ?
	INC	BASDIG
;
;	Calculate MQ for each char in syllable
;
10$:	MOV	HSTART,R5		; Get char to check
	CALL	DIG04			; Get probability this char
	MOV	MQ,R1			; Get MQ
	CMP	R1,MAXDIG		; MQ greater ?
	BLOS	15$			; No, try next char
	MOV	HSTART,NHSTART		; Save maximum MQ and positoton
	MOV	MAXDIG,R0		; Save current MAX
	MOV	R1,MAXDIG		; New MAX
	MOV	R0,R1			; Save previous MAX
15$:	CMP	R1,BASDIG		; Greater than base
	BLOS	20$			; No ?
	MOV	R1,BASDIG		; New base
20$:	DEC	HSTART
	DEC	COUNT			; done ?
	BGT	10$			; No
;
;	Differential probability test
;
	TSTEQ	BASDIG,30$		; NO base ?
	.ifdf	$EIS
	MOV	MAXDIG,R1		; Maximum prob.
	ASL	R1			; Multiply it by 2
	ASL	R1			; Multiply it by 2
	clr	R0
	DIV	BASDIG,R0		; Divide by nearby probability
	.iff
	MOV	MAXDIG,R0		; Maximum prob.
	ASL	R0			; Multiply it by 2
	ASL	R0			; Multiply it by 2
	MOV	BASDIG,R1		; Base
	CALL	$DIV
	.endc
	CMP	R0,DIFTHR		; Is MAX > N*base ?
	BLO	DIGRAM			; No ?
;
;	Test absulute probability
;
	CMP	MAXDIG,THRESH		; Probability big enough 
	BLO	DIGRAM
	BR	40$			; Do the hyp.
30$:	CMP	MAXDIG,DIPTHR		; Check base threshold
	BLO	DIGRAM			; Not big enough ?
40$:	MOV	NHSTART,R5		; Char to hyphenate
	.iff
	SUB	R1,HSTART		; Adjust starting point
	BR	DIGRAM
	.endc
45$:	MOV	R5,HSTART		; char hyphenated
	DEC	HSTART			; Next char to check
	CMP	R5,MINCHR		; see if too low
	BLO	50$			; Lower than min ?
	CMP	R5,MAXCHR		; CHar too near end ?
	BHI	DIGRAM			; Yes ?
	BISB	#200,(R5)		; Perform the hyphenation
	INC	NHYPH			; Count number of hyphens
	BR	DIGRAM			; Parse next vowel
50$:	RETURN
	.IFDF	$DIGR
;
;	Subroutine to find MQ
;	R5 points to hyphenation point
;
DIG04:	CLR	MQ
	ADD	#2,R5
	CMP	R5,WORDL		; check end of word
	BHIS	50$			; Past end of word?
	SUB	#4,R5
	MOV	#XXH,R4
	CMP	R5,WORDF		; Check beginning of word
	BLO	50$			; Before it ?
	BNE	20$			; Not beginning ?
	MOV	#BXXH,R4		; It is beginning of word
20$:	MOV	#1,MQ			; Initialize probability
	CALL	DILOOK			; Parse XX in BXXH or XXH
	BEQ	50$			; Done ?
	CMPNE	R1,#17,40$		; High probability ?
	MOV	#3375.,MQ		; Set it to max
	BR	50$
40$:	MOV	#XHX,R4			; Parse XHX
	CALL	DILOOK
	BEQ	50$			; Done ?
	CMPEQ	R5,WORDL,50$		; at end of word ?
	MOV	#HXX,R4
	CALL	DILOOK
50$:	RETURN
;
;	Finds the probability of hyphenation
;	R1,R2 are the 2 chars to check
;	R4 is the table to use
;		R0,R1,R2 are destroyed
;		MQ is updated
;
DILOOK:	MOVB	(R5)+,R1		; first letter
	BIC	#^C<37>,R1
	DEC	R1
	MOVB	(R5),R2			; second letter
	BIC	#^C<37>,R2		; Mask off extra bits
	DEC	R2
	.ifdf	$EIS
	MUL	#26.,R1
	.iff
	MOV	#26.,R0			; R1 is 2'nd table index
	CALL	$MUL			; Multiply by number of letters
	.endc
	ADD	R2,R1			; Now is table index 0 to 675
	ASR	R1			; Get low order bit in C (0 to 337)
	BCC	10$			; Hi order bits needed ?
	ADD	R4,R1			; Add on table address
	MOVB	(R1)+,R0		; Get necessary bits
	BR	20$			; And use them
10$:	ADD	R4,R1			; Add on table address
	MOVB	(R1)+,R0		; Get necessary bits
	.ifdf	$EIS
	ASH	#-4,R0			; Shift to right 4 places
	.iff
	ASR	R0			; Shift down hi order 4 bits
	ASR	R0			; Shift down hi order 4 bits
	ASR	R0			; Shift down hi order 4 bits
	ASR	R0			; Shift down hi order 4 bits
	.endc
20$:	BIC	#^C<17>,R0		; Get the 4 bits
	MOV	MQ,R1			; Multiply by current MQ
	.ifdf	$EIS
	MUL	R0,R1
	.iff
	CALL	$MUL			; Multiply by number of letters
	.endc
	MOV	R1,MQ			; Save new MQ
	RETURN
	.endc				; End of digram
;
;	MARK ANY LEGAL SUFFIX FORMS IN THE PROTOTYPE AND RETURN
;		R4 points to suffix table
;		R3 is loop counter
;		R2 is flags byte or end of syllable
;		R1 temporarily points to suffix table
;
SUFFIX:	MOV	HSTART,R2		; GET POINTER TO LAST CHAR.
	MOVB	(R2),R0			; GET CHARACTER TO CHECK
	BIC	#^C<37>,R0		; Get suffix entry
	ASL	R0			; CONVERT TO syllable INDEX
	MOV	SUFTAB-2(R0),R4		; Get address of suffix dictionary
	BEQ	100$			; EXIT IF NO DICTIONARY ENTRY
	CMP	R2,MINCHR		; Char too near beginning ?
	BLO	100$			; Yes ?
5$:	MOV	R2,R5			; Get last char
	MOVB	(R4),R3			; GET ENTRY LENGTH
	BIC	#^C<17>,R3		; CLEAR FLAG BITS
	BEQ	100$			; END OF DICTIONARY
	BITEQB	#20,(R4),7$		; Not skip ?
	ADD	R3,R4
	MOV	R4,R1
	MOVB	(R4),R0			; Get offset
	BIC	#^C<377>,R0		; Clear extra bits
	ADD	R0,R4
	BR	12$			; New address
7$:	ADD	R3,R4			; ADDRESS OF END OF ENTRY
	MOV	R4,R1			; And save for next entry
	BR	12$
10$:	MOVB	-(R1),R0		; GET A CHARACTER
	BIC	#^C<37>,R0		; MASK EXTRA FLAG BITS
	BIS	#140,R0			; Make it lower case
	CMPNEB	R0,-(R5),5$		; No match ?
12$:	SOB	R3,10$			; Continue till done
;
;	Found suffix	Now do hyphenation
;
	MOV	R2,R5			; End of syllable 
	MOVB	-(R1),R2		; Get flags
	MOV	R2,R3			; Set up pointer to suffix
	BIC	#^C<17>,R3
	BITEQB	#20,R2,15$		; Not skip ??
	MOV	R1,R4			; Current suffix entry
	ADD	R3,R4			; Next
	INC	R4			; +1 to skip count
	MOV	R5,R2			; End of syllable 
	SUB	R3,R2
	INC	R2			; Skip over extra bytes
	BR	5$
15$:	CMPNEB	R2,#41,16$		; Not final E
	CMPNE	HSTART,WORDL,100$	; Not at end of word ?
	DEC	HSTART
	BR	SUFFIX			; Continue
16$:	MOV	R5,HSTART
	DEC	HSTART
	BITNEB	#200,R2,30$		; Hyphen at end ?
	BR	40$			; No !
;
;	Found suffix, now look for hyphens
;
20$:	DEC	R5			; Next char in syllable 
	TSTB	-(R4)			; Test for hyphen
	BGT	40$			; None ?
30$:	MOV	R5,HSTART		; Save hyphenation address
	DEC	HSTART			; Next char to test
	BITNEB	#100,R2,50$		; Done ?
	CALL	FNDVOW			; ANY VOWELS PRECEDING THIS CHAR?
	BNE	100$			; NO, EXIT
	CMP	R5,MINCHR		; Char too near beginning ?
	BLO	100$			; Yes ?
	CMP	R5,MAXCHR		; CHar too near end ?
	BHI	40$			; Yes ?
	BISB	#200,(R5)		; SET THE HYPHEN MARK
	INC	NHYPH			; Count number of hyphens
40$:	SOB	R3,20$			; Continue till done
50$:	CMPEQ	#40,R2,SUFFIX		; Not terminated ?
100$:	RETURN
;
;	Routine to find prefix forms
;	Uppercase char has traling hyphen
;	Lowercase char has no hyphen
;	200 = marks beginning of word
;	100 = marks char in front of hyphenation
;		zero=end of dict
;
PREFIX:	CALL	FNDSYL			; Any syllables ?
	BNE	100$			; None ?
	MOV	WORDF,R5		; Pointer to first char.
1$:	MOV	#PRETAB,R3		; Prefix table
10$:	MOVB	(R3)+,R0		; Table char
	BGT	10$			; Not at beginning of string ?
	MOV	R5,R2			; Word to search
	MOV	R3,R4			; TAble
	BR	25$
20$:	MOVB	(R3)+,R0		; Table char
	BLT	50$			; End of entry ?
25$:	BIC	#^C<37>,R0		; MASK EXTRA FLAG BITS
	BEQ	100$			; End of table ?
	BIS	#140,R0			; Make it lower case
	MOVB	(R2)+,R1		; Get char to check
	BIC	#^C<177>,R1		; Strip hyphenation marks
	CMPEQB	R0,R1,20$		; match ?
	BR	10$
;
;	Found prefix Now do hyphenation
;
50$:	MOVB	(R4)+,R0		; Get 1 char
	INC	R5
60$:	INC	R5
	BITEQB	#100,R0,80$		; No hyphenation ?
	CMP	R5,MINCHR		; Char too near beginning ?
	BLO	80$			; Yes ?
	CMP	R5,MAXCHR		; CHar too near end ?
	BHI	90$			; Yes ?
	MOV	R5,R0
70$:	MOVB	(R0)+,R1		; Next char
	BLT	90$			; Already hyphenated ?
	BIC	#^C<177>,R1		; Clear extra bits
	CMPNEB	GCTABL(R1),#GC.LC,90$ 	; Not alpha char?
	BITEQB	CHTABL(R1),#CH.VOW,70$	; Not vowel?
	BISB	#200,(R5)		; SET THE HYPHEN MARK
	INC	NHYPH			; Count number of hyphens
80$:	MOVB	(R4)+,R0		; Get 1 char
	BGT	60$			; Done ?
90$:	MOV	R5,MINCHR		; New minimum
100$:	RETURN

	.PSECT	HYPTAB,RO,D,LCL,CON
	.NLIST	BIN
	.IFDF	$DIGR
;
; HYP4 -- DIGRAM TABLES
;
;	Table for begin,letter,hypenation
;
;;BXH:
;BYTE 060,000,040,000,040,000,000,040,000,000,040,000,040
;     a b c d e f g h i j k l m n o p q r s t u v w x y z
;
;	Begin,letter,letter,hyphen
;
BXXH:
;	second letter vvvvvv				  ;first
;     a b c d e f g h i j k l m n o p q r s t u v w x y z
.BYTE 005,150,153,062,062,246,152,127,146,203,310,017,206 ;a
.BYTE 100,000,120,000,140,000,000,100,000,000,120,000,060 ;b
.BYTE 100,000,040,000,060,000,000,060,000,000,220,000,040 ;c
.BYTE 100,000,120,000,200,000,000,100,000,000,140,000,060 ;d
.BYTE 043,142,046,140,062,147,210,131,046,106,246,017,111 ;e
.BYTE 060,000,020,000,060,000,000,040,000,000,100,000,000 ;f
.BYTE 060,000,040,000,040,000,000,040,000,000,100,000,040 ;g
.BYTE 100,000,100,000,100,000,000,040,000,000,100,000,140 ;h
.BYTE 066,045,145,140,000,070,377,030,130,103,003,017,006 ;i
.BYTE 040,000,040,000,020,000,000,040,000,000,100,000,000 ;j
.BYTE 200,000,020,000,140,000,000,120,000,000,120,000,040 ;k
.BYTE 120,000,040,000,060,000,000,060,000,000,160,000,040 ;l
.BYTE 120,000,040,000,120,000,000,040,000,000,160,000,040 ;m
.BYTE 120,000,020,000,140,000,000,120,000,000,140,000,040 ;n
.BYTE 051,126,150,140,060,210,146,006,006,165,003,017,244 ;o
.BYTE 120,000,040,000,160,000,000,140,000,000,060,000,140 ;p
.BYTE 000,000,000,000,000,000,000,000,000,000,000,000,000 ;q
.BYTE 140,000,140,000,060,000,000,100,000,000,140,000,020 ;r
.BYTE 120,000,020,000,060,000,000,060,000,000,060,000,040 ;s
.BYTE 140,000,020,000,100,000,000,140,000,000,140,000,020 ;t
.BYTE 070,125,051,162,120,105,126,104,006,044,000,017,052 ;u
.BYTE 140,000,020,000,140,000,000,060,000,000,060,000,040 ;v
.BYTE 020,000,000,000,020,000,000,000,000,000,000,000,060 ;w
.BYTE 140,000,160,000,200,000,000,140,000,000,000,000,240 ;x
.BYTE 065,042,060,200,000,210,222,146,006,204,220,012,003 ;y
.BYTE 240,000,020,000,120,000,000,200,000,000,200,000,240 ;z
;     a b c d e f g h i j k l m n o p q r s t u v w x y z
;
;	letter,letter,hyphen
;
XXH:
;     a b c d e f g h i j k l m n o p q r s t u v w x y z
.BYTE 045,150,154,162,042,246,210,147,152,103,230,017,206 ;a
.BYTE 100,000,040,000,140,000,000,100,000,021,120,017,060 ;b
.BYTE 100,000,040,002,140,320,000,060,000,001,220,017,040 ;c
.BYTE 100,001,120,001,241,000,000,100,000,020,140,017,060 ;d
.BYTE 023,162,046,142,022,207,210,131,052,106,250,017,110 ;e
.BYTE 060,000,042,000,160,000,000,040,000,212,100,017,000 ;f
.BYTE 140,000,040,002,140,000,000,120,000,040,120,017,040 ;g
.BYTE 100,000,100,000,140,001,021,140,000,046,100,017,140 ;h
.BYTE 066,045,025,201,020,130,146,030,130,103,025,017,006 ;i
.BYTE 100,000,040,000,020,000,000,040,000,000,200,017,000 ;j
.BYTE 200,000,020,001,140,000,000,140,000,000,120,017,040 ;k
.BYTE 120,026,042,020,140,161,042,143,000,022,162,017,040 ;l
.BYTE 121,042,060,020,140,200,000,123,000,021,220,017,041 ;m
.BYTE 121,042,060,120,140,200,000,123,000,021,160,017,041 ;n
.BYTE 051,126,150,141,060,210,146,066,026,165,026,017,247 ;o
.BYTE 120,000,040,003,160,000,000,140,000,021,100,017,140 ;p
.BYTE 000,000,000,000,200,000,000,000,000,000,000,017,000 ;q
.BYTE 141,023,122,040,160,143,042,142,000,047,143,017,020 ;r
.BYTE 120,000,040,006,140,060,000,141,000,026,100,017,040 ;s
.BYTE 140,000,020,007,100,000,000,140,000,001,140,017,020 ;t
.BYTE 110,125,051,162,120,125,127,104,006,104,000,017,052 ;u
.BYTE 140,000,040,000,160,000,000,140,000,000,060,017,000 ;v
.BYTE 040,005,020,000,040,313,231,030,000,140,000,017,056 ;w
.BYTE 140,000,160,000,200,000,000,140,000,000,000,017,240 ;x
.BYTE 065,042,060,040,000,206,231,146,006,224,220,017,004 ;y
.BYTE 240,000,020,000,140,000,000,220,000,000,200,017,141 ;z
;     a b c d e f g h i j k l m n o p q r s t u v w x y z
;
;	letter,hyphen,letter
;
XHX:
;     a b c d e f g h i j k l m n o p q r s t u v w x y z
.BYTE 032,146,042,107,076,102,042,146,202,050,006,000,051 ;A
.BYTE 036,377,057,013,057,366,377,057,001,377,057,000,040 ;b
.BYTE 037,377,020,000,100,022,377,057,362,116,100,000,017 ;c
.BYTE 057,377,057,031,137,363,377,037,362,270,077,000,117 ;d
.BYTE 074,142,012,236,076,125,063,165,341,046,047,000,024 ;e
.BYTE 020,017,075,377,040,001,377,017,001,204,020,000,040 ;f
.BYTE 057,017,057,340,140,362,314,117,003,302,100,000,057 ;g
.BYTE 057,357,077,017,100,366,314,057,342,346,037,000,060 ;h
.BYTE 252,145,072,157,377,165,063,066,164,050,363,000,362 ;i
.BYTE 000,000,020,000,020,000,000,017,000,000,020,000,000 ;j
.BYTE 117,017,237,377,200,354,125,110,004,257,000,000,300 ;k
.BYTE 057,367,054,357,157,216,314,114,217,353,053,000,057 ;l
.BYTE 077,213,077,077,177,317,377,114,377,352,077,000,076 ;m
.BYTE 077,213,077,077,157,177,377,054,377,352,117,000,075 ;n
.BYTE 125,230,065,216,057,066,063,047,345,126,011,000,033 ;o
.BYTE 057,377,051,360,120,361,273,056,001,256,057,000,060 ;p
.BYTE 000,000,000,000,000,000,000,000,000,000,000,000,000 ;q
.BYTE 076,310,056,310,137,174,273,055,335,266,033,000,155 ;r
.BYTE 077,157,057,360,057,063,042,024,077,206,020,000,040 ;s
.BYTE 057,037,077,360,100,365,377,037,362,176,050,000,026 ;t
.BYTE 167,146,042,112,077,110,062,254,366,052,377,000,163 ;u
.BYTE 060,000,040,000,120,000,377,060,012,000,037,000,257 ;v
.BYTE 037,232,157,361,040,003,125,010,001,256,000,000,340 ;w
.BYTE 377,377,377,377,377,377,377,377,377,377,377,017,277 ;x
.BYTE 253,315,257,216,377,206,146,306,371,126,232,000,004 ;y
.BYTE 057,012,100,360,160,360,000,040,000,017,157,000,176 ;z
;     a b c d e f g h i j k l m n o p q r s t u v w x y z
;
;	Hyphen,letter,letter
;
HXX:
;     a b c d e f g h i j k l m n o p q r s t u v w x y z
.BYTE 006,042,041,123,021,024,063,042,002,043,021,001,022 ;a
.BYTE 140,000,200,003,260,006,000,160,007,000,140,000,320 ;b
.BYTE 220,000,160,005,240,010,000,100,006,000,200,000,320 ;c
.BYTE 240,000,120,003,140,000,000,240,010,000,220,000,160 ;d
.BYTE 042,023,041,040,040,022,043,041,030,064,021,000,041 ;e
.BYTE 100,000,140,000,220,006,000,140,003,000,200,000,000 ;f
.BYTE 200,000,120,002,220,010,000,160,006,000,140,000,320 ;g
.BYTE 020,000,020,000,020,000,000,020,000,000,020,000,000 ;h
.BYTE 043,163,065,044,022,043,104,042,061,146,061,000,007 ;i
.BYTE 100,000,140,000,040,000,000,100,000,000,120,000,000 ;j
.BYTE 140,000,040,011,060,004,001,120,003,000,140,000,040 ;k
.BYTE 200,000,100,000,140,000,000,140,000,000,140,000,240 ;l
.BYTE 200,000,140,000,160,000,000,220,000,000,140,000,240 ;m
.BYTE 200,000,140,000,160,000,000,220,000,000,060,000,240 ;n
.BYTE 021,043,041,121,040,023,042,003,142,042,061,001,022 ;o
.BYTE 120,000,140,010,140,010,000,140,002,000,120,000,120 ;p
.BYTE 000,000,000,000,360,000,000,000,000,000,160,000,000 ;q
.BYTE 100,000,040,005,120,000,000,100,000,000,060,000,140 ;r
.BYTE 140,040,100,001,240,041,000,242,000,002,140,000,100 ;s
.BYTE 240,000,120,002,200,000,000,320,007,000,240,000,340 ;t
.BYTE 101,021,041,020,040,005,042,121,002,021,201,000,020 ;u
.BYTE 160,000,100,000,140,000,000,160,006,000,220,000,140 ;v
.BYTE 140,000,020,001,020,000,000,100,001,000,300,000,000 ;w
.BYTE 000,000,000,000,000,000,000,000,000,000,000,000,000 ;x
.BYTE 106,041,040,147,040,000,063,041,001,102,160,002,002 ;y
.BYTE 300,000,040,017,140,017,000,240,000,000,140,000,120 ;z
;     a b c d e f g h i j k l m n o p q r s t u v w x y z

	.ENDC
;
;  Prefix - Prefix table
;
;
PRETAB:
;	.byte 200+A,N+100,T,I,P,H
;	.BYTE 200+A,N+100,T,I+100	; AN-TI-
	.byte 200+B,U,S,I+100		; BUSI-
	.byte 200+C,H,A,N,G,E+100	; CHANGE-
	.byte 200+C,I,R+100,C,U,M+100	; CIR-CUM-
	.byte 200+C,O,N,E		; CONE
	.byte 200+C,O,N+100		; CON-
	.byte 200+C,O,U,N+100,T,E,R+100	; COUN-TER-
	.byte 200+D,I,S,H+100,C		; DISh-c
	.byte 200+D,I+100,S,U,L		; DI-Sul
	.byte 200+D,I,S+100		; DIS-
	.byte 200+H,Y+100,D,R,O+100	; HY-DRO-
	.byte 200+H,Y+100,P,E,R+100	; HY-PER-
	.byte 200+I,N+100,T,E,R+100	; IN-TER-
	.byte 200+I,S,O+100		; ISO-
	.byte 200+M,E,A,N+100		; MEAN-
	.byte 200+M,E,A,S+100,U,R	; MEAS-UR
	.byte 200+M,O+100,D,A,L+100,I+100 ; MO-DAL-I-
	.byte 200+M,O+100,D,E,R+100,N,I+100 ; MO-DER-NI-
	.byte 200+M,O,D+100		; MOD-
	.byte 200+M,U,L+100,T,I+100	; MUL-TI-
	.byte 200+O,U,T+100		; OUT-
	.byte 200+O+100,V,E,R+100	; O-VER-
	.byte 200+P,O,L,Y+100		; POLY-
	.byte 200+P,R,E,S+100,B		; PREs-b
	.byte 200+P,R,E,S,E,N,T		; PRESENT
	.byte 200+P,R,E,S+100,I+100,D,E,N	; PRES-I-DEN
	.byte 200+P,R,E,S+100,S		; PRES-S
	.byte 200+P,R,E,S+100,T		; PRES-T
	.byte 200+P,R,E,T+100,T		; PRET-T
	.byte 200+P,R,E+100		; PRE-
	.byte 200+Q,U,A,D+100		; QUAD-
	.byte 200+R,U,N+100		; RUN-
	.byte 200+S,E,M,I+100		; SEMI-
	.byte 200+S,T,A,T,E+100		; STATE-
	.byte 200+S,U+100,B,E,R+100	; SU-BER-
	.byte 200+S,U,B+100		; SUB-
	.byte 200+S,U+100,P,E+100,R,I+100,O	; SU-PE-RI-O
	.byte 200+S,U+100,P,E,R+100	; SU-PER-
	.byte 200+S,Y,L+100		; SYL-
	.byte 200+S,Y,M,P+100,T		; SYMP-T
	.byte 200+S,Y,M+100		; SYM-
	.byte 200+S,Y,N+100		; SYN-
	.byte 200+S,Y,S+100		; SYS-
	.byte 200+U,L+100,T,R,A+100	; UL-TRA-
	.byte 200+U,N+100,D,E,R+100	; UN-DER-
	.byte 200+U,N+100,I,M		; UN-IM
	.byte 200+U,N+100,I,O		; UN-IO
	.byte 200+U+100,N,I,Q		; U-NIQ
	.byte 200+U+100,N,I,T		; U-NIT
	.byte 200+U,N,I+100		; UNI-
	.byte 200+U,N+100		; UN-
	.byte 200+W,H,A,T+100		; WHAT-
	.byte 200			; End of table
.EVEN

; SUFTAB - SUFFIX TABLE
;
;	Each suffix is coded as follows
;	byte 0	N + options
;	N=number of bytes N=1 to 15
;	N=0 terminates table
;
;
;	OPtions
;	 20 =	Marks subtable
;	 40 =	This suffix terminates search
;	100 =	Hyphenation is skipped, it only marks letters to skip
;	200 =	This suffix has hyphen at end
;
;	N-1 chars follow A + options
;		A=1-26. (letter A to Z)
;		options:
;			200 = char preceeded by hyphen
;
;	Entries are in reverse alphabetical order
;
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 2+20,I,20$-.	; =IC
	  .BYTE 4+200,200+L,Y,T	; -LYT-IC
	  .BYTE 6+200,A,L,200+I,S,200+T	; AL-IS-TIC
	  .BYTE 3,S,200+T	; S-TIC
	  .BYTE 3,P,200+T	; P-TIC
	  .BYTE 3+200,O,T	; OT-IC
	  .BYTE 4,A,N,200+T	; AN-TIC
	  .BYTE 3,N,200+T	; N-TIC
	  .BYTE 3+200,E,T	; ET-IC
	  .BYTE 3,C,200+T	; C-TIC
	  .BYTE 3+200,A,T	; AT-IC
	  .BYTE 3,H,200+N	; H-NIC
	  .BYTE 2+200,N		; N-IC
	  .BYTE 2+200,M		; M-IC
	  .BYTE 3,L,200+L	; L-LIC
	  .BYTE 2+200,L		; L-IC
	  .BYTE 2+200,H		; H-IC
	  .byte 3,F,F+200	; F-FIC
	  .BYTE 2+200,F		; F-IC
	  .BYTE 2+200,D		; D-IC
	  .BYTE 2,200+B		; -BIC
	  .BYTE 2+200,A		; A-IC
	.byte 0
20$:	.BYTE 3,200+M,A		; -MAC
	.BYTE 3,I,200+A		; I-AC
	.BYTE 0

SUFD:	.byte 2+20,R,10$-.	; =RD
	  .BYTE 3,200+W,O	; -WORD
	  .BYTE 3,200+L,O	; -LORD
	  .BYTE 3,200+F,O	; -FORD
	  .byte 2+20,A,5$-.	; =ARD
	    .BYTE 2,200+Y	; -YARD
	    .BYTE 2,200+W	; -WARD
	    .BYTE 3,200+G,U	; -GUARD
	    .BYTE 2,200+T	; -TARD
	    .BYTE 3,200+B,O	; -BOARD
	    .BYTE 2,200+N	; -NARD
	    .BYTE 3,200+L,I	; -LIARD
	    .BYTE 2,200+I	; -IARD
	    .BYTE 2,200+G	; -GARD
	    .BYTE 2,200+B	; -BARD
5$:	    .byte 0
10$:	.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 2+20,E,30$-.	; =ed
	  .BYTE 3,T,200+T	; T-TED
	  .BYTE 2+200,T		; T-ED
	  .BYTE 3,200+D,R	; -DRED
	  .BYTE 3,200+C,R	; -CRED
	  .BYTE 3,200+B,R	; -BRED
	  .BYTE 4,V,200+E,L	; V-ELED
;	  .BYTE 100+3,A,L	; AL;ED
	  .BYTE 140+2,200+E	; ;EED
	  .BYTE 40+4,E,D,200+D	; ED-DED
	  .BYTE 240+3,E,D	; ED-ED
	  .BYTE 3,D,200+D	; D-DED
	  .BYTE 2+200,D		; D-ED
	  .BYTE 4,200+D,U,C	; -DUCED
	  .BYTE 1		; ;ED
30$:	.BYTE 5,200+S,T,E,A	; -STEAD
	.BYTE 4,200+H,E,A	; -HEAD
	.BYTE 3,200+E,A		; -EAD
	.BYTE 0

SUFE:	.byte 3+20,I,Z,10$-.	; =IZE
	  .BYTE 3+200,A,R	; AR-IZE
	  .BYTE 3+200,A,N	; AN-IZE
	  .BYTE 3+200,A,L	; AL-IZE
	  .BYTE 4+200,200+A,R,D	; -ARD-IZE
	  .byte 41
10$:	.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 100+2,U		; U;E
	.BYTE 100+5,Q,U,A,T	; QUAT;E
	.byte 3+20,A,T,20$-.	; =ATE
	  .BYTE 2+200,U		; U-ATE
	  .BYTE 3,200+S,T	; -STATE
	  .BYTE 2,200+T		; -TATE
	  .BYTE 4+200,200+T,O,R	; -TOR-ATE
	  .BYTE 3+200,E,N	; EN-ATE
	  .BYTE 2,200+M		; -MATE
	  .byte 41
20$:	.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 2+20,R,40$-.	; =RE
	  .BYTE 4,A,S,200+U	; AS-URE
	  .BYTE 40+3,200+S,U	; -SURE
	  .BYTE 5,200+F,I,G,200+U	; -FIG-URE
	  .BYTE 40+2,200+T	; -TRE
	  .BYTE 4,200+S,T,O	; -STORE
	  .BYTE 3,200+F,O	; -FORE
	  .BYTE 4,200+W,H,E	; -WHERE
	  .BYTE 2,200+D		; -DRE
	  .BYTE 2,200+C		; -CRE
	  .BYTE 2,200+B		; -BRE
	  .byte 41
40$:	.BYTE 5,200+S,C,O,P	; -SCOPE
	.byte 2+20,N,50$-.	; =NE
	  .BYTE 3,Y,200+O	; Y-ONE
	  .BYTE 4,200+S,T,O	; -STONE
	  .BYTE 4,200+P,H,O	; -PHONE
	  .BYTE 3,200+G,O	; -GONE
	  .BYTE 3,E,200+O	; E-ONE
	  .BYTE 40+3,200+E,N	; -ENNE
	  .BYTE 40+4,A,200+R,I	; A-RINE
	  .BYTE 4,200+C,L,I	; -CLINE
	  .BYTE 3,200+L,I	; -LINE
	  .byte 41
50$:	.BYTE 4,200+S,O,M	; -SOME
	.BYTE 4,200+C,O,M	; -COME
	.BYTE 4,200+T,I,M	; -TIME
	.byte 2+20,L,60$-.	; =LE
	  .BYTE 2,200+Z		; -ZLE
	  .BYTE 5,200+M,O,D,200+U	;-MOD-ULE
	  .BYTE 2,200+T		; -TLE
	  .BYTE 2,200+S		; -SLE
	  .BYTE 2,200+P		; -PLE
	  .BYTE 4,200+V,I,L	; -VILLE
	  .BYTE 3+200,C,K	; CK-LE
	  .BYTE 2,200+K		; -KLE
	  .BYTE 2,200+G		; -GLE
	  .BYTE 2,200+F		; -FLE
	  .BYTE 2,200+D		; -DLE
	  .BYTE 2,200+C		; -CLE
	  .BYTE 4,200+P,A,200+B	; -PA-BLE
	  .BYTE 4,F,A,200+B	; FA-BLE
	  .BYTE 4,200+C,A,200+B	; -CA-BLE
	  .BYTE 3,200+A,B	; -ABLE
	  .BYTE 2,200+B		; -BLE
	  .BYTE 3,200+S,A	; -SALE
	  .BYTE 3,200+M,A	; -MALE
	  .BYTE 3,200+D,A	; -DALE
	  .byte 41
60$:	.BYTE 4,200+L,I,K	; -LIKE
	.BYTE 40+5,G,200+U,A,G	; G-UAGE
	.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 5,200+R,I,A,G	; -RIAGE
	.BYTE 4,D,200+A,G	; D-AGE
	.BYTE 5,200+K,N,I,F	; -KNYFE
	.BYTE 4,200+W,I,F	; -WIFE
	.BYTE 3,200+S,E		; -SEE
	.BYTE 4,200+F,R,E	; -FREE
	.BYTE 140+2,E		; E;E
	.BYTE 4,200+W,I,D	; -WIDE
	.BYTE 4,200+T,I,D	; -TIDE
	.BYTE 4,200+S,I,D	; -SIDE
	.byte 4+20,E,N,C,70$-.	; =ENCE
	  .BYTE 3,200+Q,U	; -QUENCE
	  .BYTE 4+200,200+F,L,U	; -FLU-ENCE
	  .BYTE 240+3,E,S	; ES-ENCE
	  .BYTE 3+200,E,R	; ER-ENCE
	  .BYTE 2+200,I		; I-ENCE
	  .byte 41
70$:	.BYTE 4+20,A,N,C,80$-.	; =ANCE
	  .BYTE 40+2,200+S	; -SANCE
	  .BYTE 3+200,E,R	; ER-ANCE
	  .BYTE 3+200,A,R	; AR-ANCE
	  .BYTE 2,200+N		; -NANCE
	  .BYTE 4+200,200+B,A,L	; -BAL-ANCE
	  .BYTE 2+200,I		; I-ANCE
	  .byte 41
80$:	.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 41		; E

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 3+20,I,N,1$-.	; =ING
	  .BYTE 3,T,200+T	; T-TING
	  .BYTE 4,200+S,T,R	; -STRING
	  .BYTE 3,R,200+R	; R-RING
	  .BYTE 3,P,200+P	; P-PING
	  .BYTE 3,N,200+N	; N-NING
	  .BYTE 3,M,200+M	; M-MING
	  .BYTE 2+20,L,5$-.	; =LING
	    .BYTE 2+200,L	; L-LING
	    .BYTE 2,200+Z	; -ZLING
	    .BYTE 2,200+T	; -TLING
	    .BYTE 2+240,S	; S-LING
	    .BYTE 2+200,R	; R-LING
	    .BYTE 2,200+P	; -PLING
	    .BYTE 3,N,200+K	; N-KLING
	    .BYTE 2+200,K	; K-LING
	    .BYTE 2,200+G	; -GLING
	    .BYTE 2,200+F	; -FLING
	    .BYTE 2,200+D	; -DLING
	    .BYTE 2,200+C	; -CLING
	    .BYTE 2,200+B	; -BLING
1$:	    .BYTE 0
5$:	  .BYTE 4,Y,200+T,H	; Y-THING
	  .BYTE 5+200,E,E,T,H	; EETH-ING
	  .BYTE 4,E,200+T,H	; E-THING
	  .BYTE 3,G,200+G	; G-GING
	  .BYTE 3,D,200+D	; D-DING
	  .BYTE 3,B,200+B	; B-BING
	  .BYTE 1+200		; -ING

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 3+20,I,S,10$-.	; =ISH
	  .BYTE 3,T,200+T	; T-TISH
	  .BYTE 3,E,200+T	; E-TISH
	  .BYTE 3,P,200+P	; P-PISH
	  .BYTE 3,R,200+N	; R-NISH
	  .BYTE 3,N,200+N	; N-NISH
	  .BYTE 3,200+P,L	; -PLISH
	  .BYTE 3,200+G,U	; -GUISH
	  .BYTE 3,200+G,L	; -GLISH
	  .BYTE 3,B,200+L	; B-LISH
	  .BYTE 3,G,200+G	; G-GISH
	  .BYTE 3,D,200+D	; D-DISH
	  .BYTE 1+200		; -ISH
10$:	.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 2+20,A,30$-.	; =AL
	  .BYTE 3,200+Q,U	; -QUAL
	  .BYTE 240+2,U		; U-AL
	  .BYTE 2,200+T		; -TAL
	  .BYTE 3+200,U,R	; UR-AL
	  .BYTE 40+4,G,200+O,200+N	; G-O-NAL
	  .BYTE 3+200,O,N	; ON-AL
	  .BYTE 2,200+N		; -NAL
	  .BYTE 3,200+T,I	; -TIAL
	  .BYTE 3,200+S,I	; -SIAL
	  .BYTE 240+4,200+T,R,I	; -TRI-AL
	  .BYTE 3+200,R,I	; RI-AL
	  .BYTE 3+200,200+N,I	; -NI-AL
	  .BYTE 3+200,200+D,I	; -DI-AL
	  .BYTE 3,200+C,I	; -CIAL
	  .BYTE 2,200+G		; -GAL
	  .BYTE 3,200+M,E	; -MEAL
;	  .BYTE 240+3,200+R,E	; -RE-AL *** causes reals to be hyp!!!
	  .BYTE 5,C,200+T,I,200+C	; C-TI-CAL
	  .BYTE 4,200+S,I,200+C	; -SI-CAL
	  .BYTE 3,200+I,200+C	; -I-CAL
	  .BYTE 2,200+C		; -CAL
	  .BYTE 2,200+B		; -BAL
30$:	.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 3+20,I,S,20$-.	; =ISM
	  .BYTE 3+200,I,V	; IV-ISM
	  .BYTE 2,200+T		; -TISM
	  .BYTE 3,I,200+M	; I-MISM
	  .BYTE 3+200,A,L	; AL-ISM
	  .BYTE 240+2,E		; E-ISM
	  .BYTE 240+2,A		; A-ISM
	  .byte 0
20$:	.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 2+20,O,40$-.	; =ON
	  .BYTE 4,200+S,P,O	; -SPOON
	  .BYTE 3,200+N,O	; -NOON
	  .BYTE 3,200+M,O	; -MOON
	  .byte 2+20,I,20$-.	; =ion
	    .BYTE 7,A,L,200+I,200+Z,A,200+T	; AL-I-ZA-TION
	    .BYTE 5,200+I,200+Z,A,200+T	; -I-ZA-TION
	    .BYTE 5,L,200+I,200+A,200+T	; L-I-A-TION
	    .BYTE 2,200+T		; -TION
	    .BYTE 40+3,S,200+S	; S-SION
	    .BYTE 2,200+S		; -SION
	    .BYTE 2+200,N		; N-ION
	    .BYTE 2,200+G		; -GION
	    .BYTE 2,200+C		; -CION
	    .byte 0
20$:	  .BYTE 2,200+C		; -CON
	  .BYTE 2,200+T		; -TON
	  .BYTE 2,200+S		; -SON
	  .byte 0
40$:	.byte 2+20,I,50$-.	; IN
	  .BYTE 2,200+R		; -RIN
	  .BYTE 2,200+P		; -PIN
	  .BYTE 2,200+N		; -NIN
	  .BYTE 2,200+M		; -MIN
	  .BYTE 2,200+L		; -LIN
	  .BYTE 2,200+K		; -KIN
	  .BYTE 4,200+S,T,E	; -STEIN
	  .BYTE 3,200+T,A	; -TAIN
	  .byte 0
50$:	.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 2+20,A,60$-.	; =AN
	  .BYTE 40+2,200+S	; -SAN
	  .BYTE 4+200,200+W,O,M	; -WOM-AN
	  .BYTE 2,200+M		; -MAN
	  .BYTE 3,200+T,I	; -TIAN
	  .BYTE 3,200+S,I	; -SIAN
	  .BYTE 40+3,E,200+I	; E-IAN
	  .BYTE 3,200+C,I	; -CIAN
	  .BYTE 100+2,I		; I;AN			; July 83
;	  .BYTE 240+2,E		; E-AN *** causes means to by hyp !!!!!
60$:	.BYTE 0
 
 
SUFP:	.BYTE 100+3,O,200+U	; O;UP
	.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 100+2,R		; R;R
	.BYTE 3,200+T,O		; -TOR
	.BYTE 40+3,200+S,O	; -SOR
	.BYTE 4,200+R,I,200+O	; -RI-OR
	.byte 2+20,E,30$-.	; =ER
	  .BYTE 3+200,I,Z	; IZ-ER
	  .BYTE 4,200+C,O,V	; -COV-ER
	  .BYTE 3,O,200+V	; O-VER
	  .BYTE 40+4,U,S,200+T	; US-TER
	  .BYTE 4+200,O,S,T	; OST-ER
	  .BYTE 40+4,I,S,200+T	; IS-TER
	  .BYTE 40+4,E,S,200+T	; ES-TER
	  .BYTE 40+4,A,S,200+T	; AS-TER
	  .BYTE 3,200+S,T	; -STER
	  .BYTE 4,A,R,200+T	; AR-TER
	  .BYTE 3+200,R,T	; RT-ER
	  .BYTE 4,M,E,200+T	; ME-TER
	  .BYTE 4,200+W,A,200+T	; -WA-TER
	  .BYTE 2+200,R		; R-ER
	  .BYTE 3+200,O,P	; OP-ER
	  .BYTE 4,200+P,A,200+P	; -PA-PER
	  .BYTE 3+200,W,N	; WN-ER
	  .BYTE 40+3,S,200+N	; S-NER
	  .BYTE 3+200,O,N	; ON-ER
	  .BYTE 3+200,R,M	; RM-ER
	  .BYTE 3+200,L,L	; LL-ER
	  .BYTE 4,D,200+D,L	; D-DLER
	  .BYTE 3,200+B,L	; -BLER
	  .BYTE 2+200,K		; K-ER
	  .BYTE 4,N,200+T,H	; N-THER
	  .BYTE 5,200+F,A,200+T,H	; -FA-THER
	  .BYTE 5,E,I,200+T,H	; EI-THER
	  .BYTE 3+200,T,H	; TH-ER
	  .BYTE 3+200,S,H	; SH-ER
	  .BYTE 3,200+P,H	; -PHER
	  .BYTE 3+200,C,H	; CH-ER
	  .BYTE 3+200,D,G	; DG-ER
	  .BYTE 3+200,R,D	; RD-ER
	  .BYTE 5+200,O,U,N,D	; OUND-ER
	  .BYTE 3+200,L,D	; LD-ER
	  .BYTE 3+200,I,D	; ID-ER
	  .BYTE 4+200,200+D,U,C	; -DUC-ER
	  .BYTE 3+200,N,C	; NC-ER
	  .BYTE 1		; ;ER
30$:	.BYTE 3,200+S,A		; -SAR
	.byte 3+20,L,A,50$-.	; =LAR
	  .BYTE 240+4,E,G,200+U	; EG-U-LAR
	  .BYTE 240+4,I,C,200+U	; IC-U-LAR
	  .BYTE 240+4,E,C,200+U	; EC-U-LAR
	  .BYTE 240+4,A,C,200+U	; AC-U-LAR
50$:	.BYTE 0

SUFS:	.BYTE 2,Y		; YS
	.byte 3+20,O,U,10$-.	; =OUS
	  .BYTE 240+2,U		; U-OUS
	  .BYTE 3,200+T,I	; -TIOUS
	  .BYTE 3,200+G,I	; -GIOUS
	  .BYTE 3,200+C,I	; -CIOUS
	  .BYTE 240+2,I		; I-OUS
	  .BYTE 3,200+G,E	; -GEOUS
	  .BYTE 3,200+C,E	; -CEOUS
	  .BYTE 2+200,E		; E-OUS
	  .byte 0
10$:	.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 41		; ;S
 
 SUFT:	.BYTE 3+20,I,S,10$-.	; =IST
	  .BYTE 4+200,I,O,N	; ION-IST
	  .BYTE 3+200,I,N	; IN-IST
	  .BYTE 3+200,A,L	; AL-IST
	  .BYTE 4,L,200+O,200+G	; L-O-GIST
	  .BYTE 0
10$:	.byte 3+20,E,S,20$-.	; =EST
	  .BYTE 3+200,H,T	; HT-EST
	  .BYTE 2+200,I		; I-EST
	  .BYTE 3,G,200+G	; G-GEST
	  .BYTE 2+200,G		; G-EST
	  .BYTE 3,D,200+D	; D-DEST
	  .BYTE 2+200,D		; D-EST
	  .byte 0
20$:	.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+0,I,N	; -OINT
	.BYTE 4,200+M,E,N	; -MENT
	.BYTE 5,200+C,I,E,N	; -CIENT
	.BYTE 4,I,200+A,N	; I-ANT
	.byte 4+20,I,G,H,40$-.	; =IGHT
	  .BYTE 3,200+W,R	; -WRIGHT
	  .BYTE 3,200+B,R	; -BRIGHT
	  .BYTE 3,200+F,L	; -FLIGHT
	  .BYTE 3,200+W,E	; -WEIGHT
	  .byte 0
40$:	.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+W,H,A	; -WHAT
	.BYTE 0

SUFY:	.byte 2+20,T,10$-.	; =TY
	  .BYTE 240+3,E,S	; ES-TY
	  .BYTE 2+40,S		; STY
	  .BYTE 240+4,Q,U,I	; QUI-TY
	  .BYTE 3+200,200+T,I	; -TI-TY
	  .BYTE 240+4,O,S,200+I	; OS-I-TY
	  .BYTE 3+200,200+S,I	; -SI-TY
	  .BYTE 4+200,I,N,200+I	; IN-I-TY
	  .BYTE 3+200,N,I	; NI-TY
	  .BYTE 7,F,A,200+B,I,L,200+I	; FA-BIL-I-TY
	  .BYTE 7+200,200+C,A,200+B,I,L,200+I	; -CA-BIL-I-TY
	  .BYTE 7+200,200+P,A,200+B,I,L,200+I	; -PA-BIL-I-TY
	  .BYTE 5+200,200+B,I,L,200+I	; -BIL-I-TY
	  .BYTE 2+200,I		; I-TY
	  .byte 0
10$:	.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 3+20,B,L,30$-.	; =BLY
	  .BYTE 200+3,200+P,A	; -PA-BLY
	  .BYTE 200+3,F,A	; FA-BLY
	  .BYTE 200+3,200+C,A	; -CA-BLY
	  .BYTE 2,200+A		; -ABLY
	  .BYTE 200+1		; -BLY

30$:	.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 140+4,E,E,D	; EED;Y
	.BYTE 2,200+B		; -BY
	.BYTE 3,200+W,A		; -WAY
	.BYTE 3,200+D,A		; -DAY
	.BYTE 0
.EVEN
	.ENDC
	.END
