	.TITLE	CHLEX		
; JEFFREY KODOSKY	ARL	NOV75
;
; SUBR
; ENTRY:	2 ARGS		<N1>;<N2>
; EXIT:		1 ARG		<N>
; ERRORS:	NONE
; CALLS:	ATM2N
;		I2ATM
;		RI
;		LEXICL
	.GLOBL	CHLEX,ZCHLEX,QATM2N,QRI,QLEXICL,QI2ATM
CHLEX:	QATM2N		;GET ASCII CODE OF CHAR (N1)
	BCC	.+4
	QRI
	TST	@R5
	BNE	CHLEX5
	MOV	(SP)+,R3;JUST RETURN LEXICAL CLASS OF CHAR N1
	QLEXICL
	TST	(R5)+
	MOV	R0,-(SP)
CHLEX3:	QI2ATM
	.WORD	0
CHLEX5:	QATM2N		;GET NEW LEXICAL CLASS
	BCC	.+4
	QRI
	CMP	@SP,#19.
	BHI	CHLEX9	;IGNORE CALL IF ILLEGAL CLASS
	MOV	(SP)+,R0
	MOV	(SP)+,R3
	BIC	#177600,R3	;MAKE 7 BIT ASCII
	CMP	R3,#140
	BLT	CHLEX7
	SUB	#40,R3	;MAKE UPPER CASE
CHLEX7:	MOVB	LEXTBL(R3),-(SP)	;GET OLD CLASS
	MOVB	R0,LEXTBL(R3)	;SET NEW CLASS
	CLRB	1(SP)
	BR	CHLEX3	;RETURN OLD CLASS
CHLEX9:	CMP	(SP)+,(SP)+	;IGNORE CALL
	CLR	-(R5)	;RETURN NIL
	JMP	@-(R4)
	.PAGE
; UTILITY:	GET CHARACTER LEXICAL CLASS
; ENTRY:	R3:= CHARACTER IN LO BYTE
; EXIT:		R3:= 7 BIT ASCII CHARACTER (LOWER CASE CONVERTED)
;		R0:= LEXICAL CLASS (0-19.)
; ERRORS:	NONE
; CALLS:	NONE
; R1,R2,R5 PRESERVED
	.GLOBL	LEXICL,LEXTBL
LEXICL:	BIC	#177600,R3	;7 BIT ASCII
	CMP	R3,#140	;CONVERT UPPER TO LOWER CASE
	BLT	LEX01
	SUB	#40,R3
LEX01:	MOVB	LEXTBL(R3),R0	;INDEX TABLE FOR CLASS NUMBER
	JMP	@-(R4)
LEXTBL:	.BYTE	8.,8.,8.,8.,8.,8.,8.,8.
	.BYTE	8.,15.,0,0,0,0,8.,8.
	.BYTE	8.,8.,8.,8.,8.,8.,8.,8.
	.BYTE	8.,8.,8.,8.,8.,8.,8.,8.
	.BYTE	15.,3,16.,3,3,3,3,17.
	.BYTE	9.,10.,3,6,14.,6,13.,3
	.BYTE	2,2,2,2,2,2,2,2
	.BYTE	2,2,3,18.,3,3,3,3
	.BYTE	3,1,1,1,1,4,1,1
	.BYTE	1,1,1,1,1,1,1,1
	.BYTE	1,5,1,1,1,1,1,1
	.BYTE	1,1,1,11.,3,12.,7,3
ZCHLEX=.-CHLEX
	.END
