keep obj/ctype case on **************************************************************** * * CType - Character Types Library * * This code implements the tables and subroutines needed to * support the standard C library CTYPES. * * July 1988 * Mike Westerfield * * Copyright 1988 * Byte Works, Inc. * **************************************************************** * CType start dummy routine copy equates.asm end **************************************************************** * * int isalnum (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isalnum start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_upper+_lower+_digit rtl end **************************************************************** * * int isalpha (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isalpha start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_upper+_lower rtl end **************************************************************** * * int isascii (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isascii start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S cpx #$0080 form the result blt yes lda #0 rtl yes lda #1 rtl end **************************************************************** * * int isblank (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isblank start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype2,X and #_blank rtl end **************************************************************** * * int iscntrl (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * iscntrl start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_control rtl end **************************************************************** * * int iscsym (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * iscsym start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype2,X and #_csym rtl end **************************************************************** * * int iscsymf (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * iscsymf start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype2,X and #_csymf rtl end **************************************************************** * * int isdigit (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isdigit start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_digit rtl end **************************************************************** * * int isgraph (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isgraph start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_upper+_lower+_digit+_punctuation rtl end **************************************************************** * * int islower (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * islower start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_lower rtl end **************************************************************** * * int isodigit (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isodigit start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype2,X and #_octal rtl end **************************************************************** * * int isprint (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isprint start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_print rtl end **************************************************************** * * int ispunct (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * ispunct start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_punctuation rtl end **************************************************************** * * int isspace (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isspace start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_space rtl end **************************************************************** * * int isupper (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isupper start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_upper rtl end **************************************************************** * * int isxdigit (int c) * * Inputs: * 4,S - digit to test * * Outputs: * A - result * **************************************************************** * isxdigit start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx form the result lda >__ctype,X and #_hex rtl end **************************************************************** * * int toascii (int c) * * Inputs: * 4,S - digit to convert * * Outputs: * A - result * **************************************************************** * toascii start lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S txa form the result and #$7F rtl end **************************************************************** * * toint - convert a hex digit to a binary value * * Inputs: * 4,S - digit to convert * * Outputs: * A - converted digit * **************************************************************** * toint start FALSE equ -1 returned for false conditions lda 4,S fetch the operand tax lda 2,S remove parm from stack sta 4,S pla sta 1,S inx branch if not hex lda >__ctype,X and #_hex beq no txa insure char is uppercase and #$5F dec A cmp #'A' if the character is alpha then blt lb1 sbc #7 convert the value lb1 and #$000F return ordinal value rtl no lda #FALSE not hex rtl end **************************************************************** * * tolower - if the input is uppercase, convert it to lowercase * * Inputs: * 4,S - digit to convert * * Outputs: * A - converted character * **************************************************************** * tolower start lda 4,S fetch the operand tax lda 2,S remove parm from the stack sta 4,S pla sta 1,S txa bmi lb2 lda >__ctype+1,X branch if the character is not uppercase and #_upper beq lb1 txa convert to lowercase ora #$20 rtl lb1 txa return the input character lb2 rtl end **************************************************************** * * toupper - if the input is lowercase, convert it to uppercase * * Inputs: * 4,S - digit to convert * * Outputs: * A - converted character * **************************************************************** * toupper start lda 4,S fetch the operand tax lda 2,S remove parm from the stack sta 4,S pla sta 1,S txa bmi lb2 lda >__ctype+1,X branch if the character is not lowercase and #_lower beq lb1 txa convert to uppercase and #$5F rtl lb1 txa return the input character lb2 rtl end **************************************************************** * * __ctype - character types array * * This data area defines an array of bit masks. It is used * to test for character types. For example, to determine if * a character is alphabetic, and the uppercase and lowercase * bit masks with the array element for the character being * tested. If the result is non-zero, the character is * alphabetic. * **************************************************************** * __ctype start dc i1'0' EOF dc i1'_control' $00 dc i1'_control' $01 dc i1'_control' $02 dc i1'_control' $03 dc i1'_control' $04 dc i1'_control' $05 dc i1'_control' $06 dc i1'_control' $07 dc i1'_control' $08 dc i1'_control+_space' $09 dc i1'_control+_space' $0A dc i1'_control+_space' $0B dc i1'_control+_space' $0C dc i1'_control+_space' $0D dc i1'_control' $0E dc i1'_control' $0F dc i1'_control' $10 dc i1'_control' $11 dc i1'_control' $12 dc i1'_control' $13 dc i1'_control' $14 dc i1'_control' $15 dc i1'_control' $16 dc i1'_control' $17 dc i1'_control' $18 dc i1'_control' $19 dc i1'_control' $1A dc i1'_control' $1B dc i1'_control' $1C dc i1'_control' $1D dc i1'_control' $1E dc i1'_control' $1F dc i1'_space+_print' ' ' dc i1'_punctuation+_print' ! dc i1'_punctuation+_print' " dc i1'_punctuation+_print' # dc i1'_punctuation+_print' $ dc i1'_punctuation+_print' % dc i1'_punctuation+_print' & dc i1'_punctuation+_print' ' dc i1'_punctuation+_print' ( dc i1'_punctuation+_print' ) dc i1'_punctuation+_print' * dc i1'_punctuation+_print' + dc i1'_punctuation+_print' , dc i1'_punctuation+_print' - dc i1'_punctuation+_print' . dc i1'_punctuation+_print' / dc i1'_digit+_hex+_print' 0 dc i1'_digit+_hex+_print' 1 dc i1'_digit+_hex+_print' 2 dc i1'_digit+_hex+_print' 3 dc i1'_digit+_hex+_print' 4 dc i1'_digit+_hex+_print' 5 dc i1'_digit+_hex+_print' 6 dc i1'_digit+_hex+_print' 7 dc i1'_digit+_hex+_print' 8 dc i1'_digit+_hex+_print' 9 dc i1'_punctuation+_print' : dc i1'_punctuation+_print' ; dc i1'_punctuation+_print' < dc i1'_punctuation+_print' = dc i1'_punctuation+_print' > dc i1'_punctuation+_print' ? dc i1'_punctuation+_print' @ dc i1'_upper+_hex+_print' A dc i1'_upper+_hex+_print' B dc i1'_upper+_hex+_print' C dc i1'_upper+_hex+_print' D dc i1'_upper+_hex+_print' E dc i1'_upper+_hex+_print' F dc i1'_upper+_print' G dc i1'_upper+_print' H dc i1'_upper+_print' I dc i1'_upper+_print' J dc i1'_upper+_print' K dc i1'_upper+_print' L dc i1'_upper+_print' M dc i1'_upper+_print' N dc i1'_upper+_print' O dc i1'_upper+_print' P dc i1'_upper+_print' Q dc i1'_upper+_print' R dc i1'_upper+_print' S dc i1'_upper+_print' T dc i1'_upper+_print' U dc i1'_upper+_print' V dc i1'_upper+_print' W dc i1'_upper+_print' X dc i1'_upper+_print' Y dc i1'_upper+_print' Z dc i1'_punctuation+_print' [ dc i1'_punctuation+_print' \ dc i1'_punctuation+_print' ] dc i1'_punctuation+_print' ^ dc i1'_punctuation+_print' _ dc i1'_punctuation+_print' ` dc i1'_lower+_hex+_print' a dc i1'_lower+_hex+_print' b dc i1'_lower+_hex+_print' c dc i1'_lower+_hex+_print' d dc i1'_lower+_hex+_print' e dc i1'_lower+_hex+_print' f dc i1'_lower+_print' g dc i1'_lower+_print' h dc i1'_lower+_print' i dc i1'_lower+_print' j dc i1'_lower+_print' k dc i1'_lower+_print' l dc i1'_lower+_print' m dc i1'_lower+_print' n dc i1'_lower+_print' o dc i1'_lower+_print' p dc i1'_lower+_print' q dc i1'_lower+_print' r dc i1'_lower+_print' s dc i1'_lower+_print' t dc i1'_lower+_print' u dc i1'_lower+_print' v dc i1'_lower+_print' w dc i1'_lower+_print' x dc i1'_lower+_print' y dc i1'_lower+_print' z dc i1'_punctuation+_print' { dc i1'_punctuation+_print' | dc i1'_punctuation+_print' } dc i1'_punctuation+_print' ~ dc i1'_control' $7F dc i1'0' $80 dc i1'0' $81 dc i1'0' $82 dc i1'0' $83 dc i1'0' $84 dc i1'0' $85 dc i1'0' $86 dc i1'0' $87 dc i1'0' $88 dc i1'0' $89 dc i1'0' $8A dc i1'0' $8B dc i1'0' $8C dc i1'0' $8D dc i1'0' $8E dc i1'0' $8F dc i1'0' $90 dc i1'0' $91 dc i1'0' $92 dc i1'0' $93 dc i1'0' $94 dc i1'0' $95 dc i1'0' $96 dc i1'0' $97 dc i1'0' $98 dc i1'0' $99 dc i1'0' $9A dc i1'0' $9B dc i1'0' $9C dc i1'0' $9D dc i1'0' $9E dc i1'0' $9F dc i1'0' $A0 dc i1'0' $A1 dc i1'0' $A2 dc i1'0' $A3 dc i1'0' $A4 dc i1'0' $A5 dc i1'0' $A6 dc i1'0' $A7 dc i1'0' $A8 dc i1'0' $A9 dc i1'0' $AA dc i1'0' $AB dc i1'0' $AC dc i1'0' $AD dc i1'0' $AE dc i1'0' $AF dc i1'0' $B0 dc i1'0' $B1 dc i1'0' $B2 dc i1'0' $B3 dc i1'0' $B4 dc i1'0' $B5 dc i1'0' $B6 dc i1'0' $B7 dc i1'0' $B8 dc i1'0' $B9 dc i1'0' $BA dc i1'0' $BB dc i1'0' $BC dc i1'0' $BD dc i1'0' $BE dc i1'0' $BF dc i1'0' $C0 dc i1'0' $C1 dc i1'0' $C2 dc i1'0' $C3 dc i1'0' $C4 dc i1'0' $C5 dc i1'0' $C6 dc i1'0' $C7 dc i1'0' $C8 dc i1'0' $C9 dc i1'0' $CA dc i1'0' $CB dc i1'0' $CC dc i1'0' $CD dc i1'0' $CE dc i1'0' $CF dc i1'0' $D0 dc i1'0' $D1 dc i1'0' $D2 dc i1'0' $D3 dc i1'0' $D4 dc i1'0' $D5 dc i1'0' $D6 dc i1'0' $D7 dc i1'0' $D8 dc i1'0' $D9 dc i1'0' $DA dc i1'0' $DB dc i1'0' $DC dc i1'0' $DD dc i1'0' $DE dc i1'0' $DF dc i1'0' $E0 dc i1'0' $E1 dc i1'0' $E2 dc i1'0' $E3 dc i1'0' $E4 dc i1'0' $E5 dc i1'0' $E6 dc i1'0' $E7 dc i1'0' $E8 dc i1'0' $E9 dc i1'0' $EA dc i1'0' $EB dc i1'0' $EC dc i1'0' $ED dc i1'0' $EE dc i1'0' $EF dc i1'0' $F0 dc i1'0' $F1 dc i1'0' $F2 dc i1'0' $F3 dc i1'0' $F4 dc i1'0' $F5 dc i1'0' $F6 dc i1'0' $F7 dc i1'0' $F8 dc i1'0' $F9 dc i1'0' $FA dc i1'0' $FB dc i1'0' $FC dc i1'0' $FD dc i1'0' $FE dc i1'0' $FF end **************************************************************** * * __ctype2 - character types array * * This data area defines a second array of of bit masks. It * is used to test for character types. For example, to * determine if a character is allowed as an initial character * in a symbol, and _csym with the array element for the * character being tested. If the result is non-zero, the * character is alphabetic. * **************************************************************** * __ctype2 start dc i1'0' EOF dc i1'0' $00 dc i1'0' $01 dc i1'0' $02 dc i1'0' $03 dc i1'0' $04 dc i1'0' $05 dc i1'0' $06 dc i1'0' $07 dc i1'0' $08 dc i1'_blank' $09 dc i1'0' $0A dc i1'0' $0B dc i1'0' $0C dc i1'0' $0D dc i1'0' $0E dc i1'0' $0F dc i1'0' $10 dc i1'0' $11 dc i1'0' $12 dc i1'0' $13 dc i1'0' $14 dc i1'0' $15 dc i1'0' $16 dc i1'0' $17 dc i1'0' $18 dc i1'0' $19 dc i1'0' $1A dc i1'0' $1B dc i1'0' $1C dc i1'0' $1D dc i1'0' $1E dc i1'0' $1F dc i1'_blank' ' ' dc i1'0' ! dc i1'0' " dc i1'0' # dc i1'0' $ dc i1'0' % dc i1'0' & dc i1'0' ' dc i1'0' ( dc i1'0' ) dc i1'0' * dc i1'0' + dc i1'0' , dc i1'0' - dc i1'0' . dc i1'0' / dc i1'_csym+_octal' 0 dc i1'_csym+_octal' 1 dc i1'_csym+_octal' 2 dc i1'_csym+_octal' 3 dc i1'_csym+_octal' 4 dc i1'_csym+_octal' 5 dc i1'_csym+_octal' 6 dc i1'_csym+_octal' 7 dc i1'_csym' 8 dc i1'_csym' 9 dc i1'0' : dc i1'0' ; dc i1'0' < dc i1'0' = dc i1'0' > dc i1'0' ? dc i1'0' @ dc i1'_csym+_csymf' A dc i1'_csym+_csymf' B dc i1'_csym+_csymf' C dc i1'_csym+_csymf' D dc i1'_csym+_csymf' E dc i1'_csym+_csymf' F dc i1'_csym+_csymf' G dc i1'_csym+_csymf' H dc i1'_csym+_csymf' I dc i1'_csym+_csymf' J dc i1'_csym+_csymf' K dc i1'_csym+_csymf' L dc i1'_csym+_csymf' M dc i1'_csym+_csymf' N dc i1'_csym+_csymf' O dc i1'_csym+_csymf' P dc i1'_csym+_csymf' Q dc i1'_csym+_csymf' R dc i1'_csym+_csymf' S dc i1'_csym+_csymf' T dc i1'_csym+_csymf' U dc i1'_csym+_csymf' V dc i1'_csym+_csymf' W dc i1'_csym+_csymf' X dc i1'_csym+_csymf' Y dc i1'_csym+_csymf' Z dc i1'0' [ dc i1'0' \ dc i1'0' ] dc i1'0' ^ dc i1'_csym+_csymf' _ dc i1'0' ` dc i1'_csym+_csymf' a dc i1'_csym+_csymf' b dc i1'_csym+_csymf' c dc i1'_csym+_csymf' d dc i1'_csym+_csymf' e dc i1'_csym+_csymf' f dc i1'_csym+_csymf' g dc i1'_csym+_csymf' h dc i1'_csym+_csymf' i dc i1'_csym+_csymf' j dc i1'_csym+_csymf' k dc i1'_csym+_csymf' l dc i1'_csym+_csymf' m dc i1'_csym+_csymf' n dc i1'_csym+_csymf' o dc i1'_csym+_csymf' p dc i1'_csym+_csymf' q dc i1'_csym+_csymf' r dc i1'_csym+_csymf' s dc i1'_csym+_csymf' t dc i1'_csym+_csymf' u dc i1'_csym+_csymf' v dc i1'_csym+_csymf' w dc i1'_csym+_csymf' x dc i1'_csym+_csymf' y dc i1'_csym+_csymf' z dc i1'0' { dc i1'0' | dc i1'0' } dc i1'0' ~ dc i1'0' $7F dc i1'0' $80 dc i1'0' $81 dc i1'0' $82 dc i1'0' $83 dc i1'0' $84 dc i1'0' $85 dc i1'0' $86 dc i1'0' $87 dc i1'0' $88 dc i1'0' $89 dc i1'0' $8A dc i1'0' $8B dc i1'0' $8C dc i1'0' $8D dc i1'0' $8E dc i1'0' $8F dc i1'0' $90 dc i1'0' $91 dc i1'0' $92 dc i1'0' $93 dc i1'0' $94 dc i1'0' $95 dc i1'0' $96 dc i1'0' $97 dc i1'0' $98 dc i1'0' $99 dc i1'0' $9A dc i1'0' $9B dc i1'0' $9C dc i1'0' $9D dc i1'0' $9E dc i1'0' $9F dc i1'0' $A0 dc i1'0' $A1 dc i1'0' $A2 dc i1'0' $A3 dc i1'0' $A4 dc i1'0' $A5 dc i1'0' $A6 dc i1'0' $A7 dc i1'0' $A8 dc i1'0' $A9 dc i1'0' $AA dc i1'0' $AB dc i1'0' $AC dc i1'0' $AD dc i1'0' $AE dc i1'0' $AF dc i1'0' $B0 dc i1'0' $B1 dc i1'0' $B2 dc i1'0' $B3 dc i1'0' $B4 dc i1'0' $B5 dc i1'0' $B6 dc i1'0' $B7 dc i1'0' $B8 dc i1'0' $B9 dc i1'0' $BA dc i1'0' $BB dc i1'0' $BC dc i1'0' $BD dc i1'0' $BE dc i1'0' $BF dc i1'0' $C0 dc i1'0' $C1 dc i1'0' $C2 dc i1'0' $C3 dc i1'0' $C4 dc i1'0' $C5 dc i1'0' $C6 dc i1'0' $C7 dc i1'0' $C8 dc i1'0' $C9 dc i1'0' $CA dc i1'0' $CB dc i1'0' $CC dc i1'0' $CD dc i1'0' $CE dc i1'0' $CF dc i1'0' $D0 dc i1'0' $D1 dc i1'0' $D2 dc i1'0' $D3 dc i1'0' $D4 dc i1'0' $D5 dc i1'0' $D6 dc i1'0' $D7 dc i1'0' $D8 dc i1'0' $D9 dc i1'0' $DA dc i1'0' $DB dc i1'0' $DC dc i1'0' $DD dc i1'0' $DE dc i1'0' $DF dc i1'0' $E0 dc i1'0' $E1 dc i1'0' $E2 dc i1'0' $E3 dc i1'0' $E4 dc i1'0' $E5 dc i1'0' $E6 dc i1'0' $E7 dc i1'0' $E8 dc i1'0' $E9 dc i1'0' $EA dc i1'0' $EB dc i1'0' $EC dc i1'0' $ED dc i1'0' $EE dc i1'0' $EF dc i1'0' $F0 dc i1'0' $F1 dc i1'0' $F2 dc i1'0' $F3 dc i1'0' $F4 dc i1'0' $F5 dc i1'0' $F6 dc i1'0' $F7 dc i1'0' $F8 dc i1'0' $F9 dc i1'0' $FA dc i1'0' $FB dc i1'0' $FC dc i1'0' $FD dc i1'0' $FE dc i1'0' $FF end