Listing of file='READ.MAC;01' on disk='vmedia/taylor_7-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; READ - READS A SINGLE INPUT LINE ; TITLE READ PUBLIC READ ; ; VALUES ON ENTRY: ; HL => BUFFER FOR INPUT LINE ; THE BUFFER MUST HAVE MARKERS BEFORE AND AFTER ; IT CONSISTING OF A BYTE WITH 0FFH, I.E. ; ; FF,XX,XX,XX,XX, ... ,XX,XX,XX,FF ; ^ ; ; NOTE: ON ENTRY, HL SHOULD POINT TO THE FIRST BYTE ; AFTER THE BEGINNING MARKER AS INDICATED BY THE ; ARROW ABOVE. ; ; RETURNS: ; FILLS THE BUFFER AND MARKS THE AND OF LINE WITH ; A ZERO BYTE. THE CR AND LF ARE NOT INSERTED IN ; THE BUFFER. ; ; ; SYSTEM ADDRESSES - V6.78 ; CRLF EQU 338BH ;PRINT CR LF LO EQU 3392H ;PRINT A SINGLE CHARACTER OSTR EQU 33F4H ;PRINT A STRING SAVE EQU 3FD0H ;SAVE THE REGISTERS INPCRT EQU 81C5H ;KEYBOARD JUMP VECTOR KBDFL EQU 81DFH ;KEYBOARD INPUT FLAG KBCHA EQU 81FEH ;KEYBOARD CHARACTER READY EQU 81FFH ;KEYBOARD READY FLAG ; CR EQU 13 ;CARRIAGE RETURN READ: SHLD PNTR LHLD INPCRT+1 ;SET UP THE INTERRUPT VECTOR SHLD STORE+1 ;(SAVE OLD VECTOR) LXI H,RDINT SHLD INPCRT+1 LDA INPCRT STA STORE MVI A,0C3H STA INPCRT LDA KBDFL STA TEMP MVI A,31 ;SETUP KEYBOARD INPUT FLAG STA KBDFL XRA A STA FLAG READ10: LDA FLAG ;WAIT UNTIL CR IS HIT ORA A JZ READ10 LDA TEMP ;RESTORE THE JUMP VECTOR AND FLAG STA KBDFL LHLD STORE+1 SHLD INPCRT+1 LDA STORE STA INPCRT RET ; ; KEYBOARD INTERRUPT ROUTINE ; RDINT: CALL SAVE LHLD PNTR MOV A,E ANI 7FH ;MAKE SURE IT'S ASCII CPI 32 ;SEE IF IT IS A CONTROL CHARACTER JNC RD10 CPI CR ;CR TERMINATES LINE JZ ENDLIN CPI 26 ;LEFT ARROW JZ RUBOUT RET ;IGNORE CONTROL CHARACTERS RD10: CPI 127 ;DELETE KEY JZ RUBOUT MOV E,A ;SAVE CHR INX H MOV A,M ;CHECK FOR END OF BUFFER DCX H CPI 0FFH RZ ;IGNORE CHR IF BUFFER FULL MOV A,E MOV M,A ;PUT CHR INTO BUFFER ... CALL LO ; ... PRINT IT ... INX H SHLD PNTR RET ; ... AND READ ANOTHER ENDLIN: CALL CRLF ;OUTPUT CR LF FOR END OF LINE MVI M,0 ;MARK END IN BUFFER INX H SHLD PNTR ;POINTER IS MOVED PAST END OF LINE MVI A,0FFH STA FLAG RET RUBOUT: DCX H ;CHECK FOR BEGINNING OF BUFFER ... MOV A,M CPI 0FFH JZ RUB10 ; ... AND IGNORE DELETE IF AT START SHLD PNTR LXI H,DELMSG ;ERASE THE BAD CHR FROM SCREEN CALL OSTR RET RUB10: INX H ;SIMPLY SKIP TO READ A NEW CHR SHLD PNTR RET FLAG: DB 0 PNTR: DS 2 STORE: DS 3 TEMP: DS 1 DELMSG: DB 26,' ',26,239 ;MESSAGE TO ERASE A CHR END