
*	Maxon C++ Library:
*	Modul "lib_ctype"
*	Jens Gelhar 08.03.93

	xdef	_isalnum,_isalpha,_iscntrl,_isdigit,_isgraph,_islower
	xdef	_isupper,_isprint,_ispunct,_isspace,_isxdigit
	xdef	_tolower,_toupper,_which_xdigit
	xdef	isalnum__i,isalpha__i,iscntrl__i,isdigit__i,isgraph__i,islower__i
	xdef	isupper__i,isprint__i,ispunct__i,isspace__i,isxdigit__i
	xdef	tolower__i,toupper__i,which_xdigit__c

_isprint:
isprint__i:	move.b #%10111110,d0
	bra.s do
_ispunct:
ispunct__i:	moveq #%100000,d0
	bra.s do
_isgraph:
isgraph__i:	moveq #%110110,d0
	bra.s do
_iscntrl:
iscntrl__i:	moveq #%1000000,d0
	bra.s do
_isdigit:
isdigit__i:	moveq #%00010000,d0
	bra.s do
_isxdigit:
isxdigit__i:	moveq #%0001000,d0
	bra.s do
_isalnum:
isalnum__i:	moveq #%0010110,d0
	bra.s do
_isalpha:
isalpha__i:	moveq #%0000110,d0
	bra.s do
_islower:
islower__i:	moveq #%0000010,d0
	bra.s do
_isupper:
isupper__i:	moveq #%0000100,d0
	bra.s do
_isspace:
isspace__i:	moveq #%0000001,d0

do:	move.l	4(a7),d1
	add.l	#128,d1
	cmp.l	#256,d1
	bhi.b	.0
	and.b	Table(pc,d1.w),d0
	beq.b	.rts
	moveq	#1,d0
.rts	rts
.0	moveq	#0,d0
	rts

	; ASCII-Tabelle, Bits:
	; 0 = Space
	; 1 = Lower
	; 2 = Upper
	; 3 = Xdigit
	; 4 = Num
	; 5 = punct
	; 6 = Control
	; 7 = Leerzeichen

Table:	;     0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
	dc.b $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40  ; 8
	dc.b $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40  ; 9
	dc.b $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20  ; a
	dc.b $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20  ; b
	dc.b $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24  ; c
	dc.b $24,$24,$24,$24,$24,$24,$24,$20,$24,$24,$24,$24,$24,$24,$24,$22  ; d
	dc.b $22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22,$22  ; e
	dc.b $22,$22,$22,$22,$22,$22,$22,$20,$22,$22,$22,$22,$22,$22,$22,$22  ; f

	dc.b $40,$40,$40,$40,$40,$40,$40,$40,$40,$41,$41,$40,$41,$41,$40,$40  ; 0
	dc.b $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40  ; 1
	dc.b $81,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20  ; 2
	dc.b $18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$20,$20,$20,$20,$20,$20  ; 3
	dc.b $20,$0C,$0C,$0C,$0C,$0C,$0C,$04,$04,$04,$04,$04,$04,$04,$04,$04  ; 4
	dc.b $04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$20,$20,$20,$20,$20  ; 5
	dc.b $20,$0A,$0A,$0A,$0A,$0A,$0A,$02,$02,$02,$02,$02,$02,$02,$02,$02  ; 6
	dc.b $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$20,$20,$20,$20,$40  ; 7

_tolower:
tolower__i:
	move.l	4(a7),d0
	cmp.l	#$DF,d0
	bhi.b	.ret
	cmp.w	#$C0,d0
	bhs.b	.add
	cmp.w	#'Z',d0
	bhi.b	.ret
	cmp.w	#'A',d0
	blo.b	.ret
.add	add.w	#'a'-'A',d0
.ret	rts

_toupper:
toupper__i:
	move.l	4(a7),d0
	cmp.l	#$FE,d0
	bhi.b	.ret
	cmp.w	#$E0,d0
	bhs.b	.sub
	cmp.w	#'z',d0
	bhi.b	.ret
	cmp.w	#'a',d0
	blo.b	.ret
.sub	add.w	#'A'-'a',d0
.ret	rts

_which_xdigit:
which_xdigit__c:
	move.l	4(a7),d0
	cmp.l	#'f',d0
	bhi.b	.nix
	cmp.b	#'a',d0
	bhs.b	.xdig
	cmp.b	#'F',d0
	bhi.b	.nix
	cmp.b	#'A',d0
	bhs.b	.xdig
	cmp.b	#'9',d0
	bhi.b	.nix
	sub.b	#'0',d0
	bhs.b	.ret
.nix	moveq	#-1,d0
	rts
.xdig	and.w	#15,d0
	add.w	#9,d0
.ret	rts

	end

