#asm ; Assorted routines derived from libraries supplied with ; Mike Bernson's Small C. ; TRUE, FALSE defined in CRUN.LIB ; ; toupper ; ; FUNCTION: TO SHIFT LOWER CASE CHARACTER TO UPPER ; ; Format: toupper(CHAR) ; toupper: LD A,L CP 61H RET C CP 7BH RET NC AND 5FH LD L,A RET ; ; tolower ; ; FUNCTION: TO CONVERT CHARACTER TO LOWER CASE ; ; Format: tolower(CHAR) ; tolower: LD A,L CP 'A' RET C CP 'Z'+1 RET NC ADD A,20H LD L,A RET ; ; isalpha ; ; FUNCTION CHECK TO SEE IF ALPHA CHARACTER a-z OR A-Z ONLY ; ; Format: isalpha(CHAR) ; isalpha: PUSH HL CALL isupper EX DE,HL POP HL CALL islower ADD HL,DE RET ; ; isupper ; ; FUNCTION: TO CHECK TO SEE IF CHARACTER IS UPPER CASE ; ; Format: isupper(CHAR) ; isupper: LD A,L CP 'A' JP C,ccISUP1 CP 'Z'+1 JP NC,ccISUP1 LD HL,TRUE ;Upper case RET ccISUP1: LD HL,FALSE RET ; ; islower ; ; FUNCTION: TO CHECK TO SEE IF CHARACTER IS LOWER CASE ; ; Format: islower(CHAR) ; islower: LD A,L CP 'a' JP C,ccISLW1 CP 'z'+1 JP NC,ccISLW1 LD HL,TRUE ;Lower case RET ccISLW1: LD HL,FALSE ; FALSE ; ; ; isdigit ; ; FUNCTION: TO CHECK TO SEE IF CHARACTER IS DIGIT 0-9 ONLY ; ; Format: isdigit(CHAR) ; isdigit: LD A,L CP '0' JP C,ccISDG1 CP '9'+1 JP NC,ccISDG1 LD HL,TRUE RET ccISDG1: LD HL,FALSE RET ; ; isspace ; ; FUNCTION: TO CHECK TO SEE IF WHITE SPACE TAB OR BLANK ; ; Format: isspace(CHAR) ; isspace: LD A,L LD HL,TRUE CP ' ' RET Z CP 9 RET Z LD HL,FALSE RET ; ; strlen ; ; FUNCTION: TO GET THE LENGTH OF A STRING ; ; Format: LEN=strlen(STRING) ; ; strlen: EX DE,HL LD HL,0 ccSTLN1: LD A,(DE) OR A RET Z INC HL INC DE JP ccSTLN1 ; ; strcpy ; ; FUNCTION: TO COPY FIRST SECOND STRING TO FIRST STRING ; ; Format: strcpy(OBJECT,SOURCE) ; ; strcpy: POP BC POP DE POP HL PUSH HL PUSH DE PUSH BC PUSH HL ccSCPY1: LD A,(DE) LD (HL),A OR A JP Z,ccSCPY2 INC HL INC DE JP ccSCPY1 ccSCPY2: POP HL RET ; ; strcat ; ; FUNCTION: TO PUT STRING2 AT THEN END OF STRING1 AND RETURN ADDRESS OF ; STRING 1 ; ; Format: strcat(STRING1,STRING2) ; ; strcat: POP BC POP DE POP HL PUSH HL PUSH DE PUSH BC PUSH HL ccSCAT1: LD A,(HL) OR A JP Z,ccSCAT2 INC HL JP ccSCAT1 ccSCAT2: LD A,(DE) LD (HL),A OR A JP Z,ccSCAT3 INC HL INC DE JP ccSCAT2 ccSCAT3: POP HL RET ; ; strpos ; ; FUNCTION: TO LOOK FOR STRING 2 IN STRING 1 ; ; Format: strpos(STRING1,STRING2) ; ; strpos: POP BC POP DE POP HL PUSH HL PUSH DE PUSH BC LD BC,1 EX DE,HL ccSTPS1: LD A,(DE) OR A JP Z,ccSTPS5 CP (HL) JP Z,ccSTPS2 INC DE INC BC JP ccSTPS1 ccSTPS2: PUSH HL PUSH DE ccSTPS3: INC DE INC HL LD A,(HL) OR A JP Z,ccSTPS4 LD A,(DE) CP (HL) JP Z,ccSTPS3 POP DE POP HL INC DE INC BC JP ccSTPS1 ccSTPS4: LD L,C ;Found LD H,B POP BC POP BC RET ccSTPS5: LD HL,0 ;Not found RET ; ; #endasm PY2: POP HL RET ; ; strcat ; ; FUNCTION: TO PUT STRING2 AT THEN END OF STRING1 AND RETURN ADDRE