Listing of file='DECIN.MAC;02' on disk='vmedia/asm_utilities_macros-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SCAN INPUT BUFFER FOR DIGITS ; ; IGNORES SPACES AND COMMAS ; ENTRY SCND ; VALUES ON ENTRY: ; HL => INPUT BUFFER ; ; RETURNS: ; <C> SET IF DIGIT FOUND ; ; DESTROYS: ; A REG. ; HL INCREMENTED TO POINT TO FIRST NON-SPACE ; SCND: INX H MOV A,M CPI ' ' ;IGNORE SPACES JZ SCND CPI ',' ;IGNORE COMMAS JZ SCND CALL DIG ;<C> SET IF DIGIT RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; CHECK FOR A DIGIT ; ENTRY DIG ; VALUES ON ENTRY: ; HL => POINTS TO BYTE TO TEST ; ; RETURNS: ; <C> SET IF A DIGIT ; ; DESTROYS: ; A REG. ; DIG: MOV A,M CPI '9'+1 RNC CPI '0' CMC RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; GET AN UNSIGNED DECIMAL VALUE FROM INPUT BUFFER ; ENTRY DECIN ; VALUES ON ENTRY: ; HL => INPUT BUFFER ; ; RETURNS: ; DECIMAL VALUE (0-255) IN A REGISTER (AND B REG.) ; RETURNS A VALUE OF ZERO IF NO VALID DIGITS FOUND. ; ; DESTROYS: ; A,B,C REGS. ; HL INCREMENTED TO POINT TO FIRST NON-DIGIT ; DECIN: MVI B,0 ;SETUP AS ZERO INITIALLY DECIN1: CALL DIG ;CHECK FOR DIGIT JNC DECIN2 SUI '0' MOV C,A ;PUT NEW DIGIT IN C MOV A,B RLC ;MULTIPLY PARTIAL RESULT BY 10 RLC ADD B RLC ADD C ;ADD IN NEW DIGIT ... MOV B,A ;... AND SAVE RESULT IN B INX H JMP DECIN1 ;REPEAT - EXCESS DIGITS FALL OUT TOP DECIN2: MOV A,B RET END