home *** CD-ROM | disk | FTP | other *** search
- ;
- ; SYSLIB Module Name: SBLINE
- ; Author: Richard Conn
- ; SYSLIB Version Number: 2.0
- ; Module Version Number: 1.0
- ; Module Entry Points:
- ; BLINE
- ; Module External References:
- ; CAPS
- ;
-
- ;
- ; 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
-
- END
-