;
; BLINE -- BDOS Input Line Editor
; BLINE provides a very convenient interface to the BDOS for input
; line editor functions. It uses a buffer supplied by the user for storage
; of the input line, and it returns a pointer to the first byte of the line
; upon return. The line stored in this buffer is terminated by a binary zero.
; To use BLINE, the user need only call it, with a capitalization flag
; stored in the A Register and HL pointing to the first byte of the user-
; supplied buffer which will contain the line. This buffer is structured
; as follows:
; 1st Byte - Size (filled in by user)
; 2nd Byte - Char count (filled in by BLINE)
; 3rd to nth Byte - Characters of Line (filled in by BLINE)
; n+1st Byte - Terminating Zero
; The number of bytes allocated to the entire buffer is SIZE+3, where SIZE
; is the buffer size as supplied by the user.
; If A = 0, BLINE does not capitalize the input line characters;
; if A <> 0, BLINE capitalizes the input line characters
; before returning to the caller.
; No error codes are returned by BLINE. On return, HL points to the
; first byte of the input line and A contains a count of the number of
; characters in that line.
;
;
; EQUATES
;
BDOS EQU 5
B$RDLINE EQU 10 ; READ LINE FUNCTION
;
; EXTERNAL DECLARATIONS
;
EXT CAPS
;
; MAIN ROUTINE FOR BLINE
;
BLINE::
JMP START ; SKIP OVER BUFFER
LINEST:
DS 2 ; ADDRESS OF START OF LINE BUFFER
CAPFLG:
DS 1 ; CAPITALIZATION FLAG (0=NO CAP)
START:
PUSH D ; SAVE DE, BC
PUSH B
STA CAPFLG ; SAVE CAPITALIZATION FLAG
SHLD LINEST ; SAVE ADDRESS OF FIRST BYTE
XCHG ; DE PTS TO BUFFER
MVI C,B$RDLINE ; READ LINE FUNCTION IN BDOS
CALL BDOS ; DO READ LINE FUNCTION
LHLD LINEST ; PT TO RETURNED CHAR COUNT
INX H
MOV A,M ; GET IT
INX H ; PT TO FIRST CHAR
PUSH H ; SAVE PTR TO FIRST CHAR
ADD L ; ADD CHAR COUNT
MOV L,A
MOV A,H
ACI 0
MOV H,A ; HL PTS TO AFTER LAST CHAR
MVI M,0 ; STORE ENDING ZERO
POP H ; GET PTR TO FIRST CHAR
LDA CAPFLG ; CAPITALIZE?
ORA A ; 0=NO
JZ DONE
PUSH H ; SAVE PTR TO FIRST CHAR
CAPLP:
MOV A,M ; GET CHAR
ORA A ; END OF LINE?
JZ CAPDN
CALL CAPS ; CAPITALIZE CHAR
MOV M,A ; PUT IT BACK
INX H ; PT TO NEXT
JMP CAPLP
CAPDN:
POP H ; GET PTR TO FIRST CHAR
DONE:
POP B ; RESTORE REGS
POP D
DCX H ; PT TO CHAR COUNT
MOV A,M ; GET CHAR COUNT
INX H ; PT TO FIRST CHAR OF LINE
RET