;
; PROGRAM: SYSTEST1
; AUTHOR: Richard Conn
; PURPOSE: This program creates a file and then accepts lines of text
; to input into that file.
; NOTE: This test illustrates the use of the byte-oriented file
; output routines and the use of SYSLIB.
;
; Define the <CR> and <LF> constants
cr equ 0dh
lf equ 0ah
; External Definitions of Routines to be Used
ext fname ; Convert file name into FCB format
ext print ; Print string
ext bbline ; Input Line Editor
ext fo0$open ; Open File for Output
ext fo0$close ; Close File
ext f0$put ; Write Byte to File
;
; This part of the program prompts the user for input and inputs a line
;
call print ; print prompt to user
db 'SYSTEST1 - Byte-Oriented File Output Demonstration'
db cr,lf,'Name of File to Create? ',0
xra a ; A=0 so BBLINE does not capitalize line
call bbline ; input file name from user
ora a ; check char count for zero
rz ; return to CP/M if no line input
;
; The file name specified by the user is converted into the FCB format
; and stored into an FCB
;
; First char of filename is pointed to by HL, as returned by BBLINE
;
lxi d,fcb ; load fcb
call fname
;
; Now we open the file for byte-oriented output; since FNAME does not
; affect DE, DE still points to the FCB
;
call fo0$open ; open file for output
jz loop ; ok to proceed
;
; File could not be opened -- print error message and abort
;
call print
db cr,lf,'Cannot Open File -- Abort',0
ret
;
; This loop prompts the user for a line and stores it in the file.
; If the user types an empty line (just <CR>), we exit and close the
; output file.
;
loop:
call print ; print prompt
db cr,lf,'Input Line (<CR>=Done)? ',0
xra a ; A=0 so BBLINE does not capitalize line
call bbline ; get line from user
ora a ; check char count
jz done ; done if no chars
;
; This loop writes the string pted to by HL (from BBLINE) to disk.
;
oloop:
mov a,m ; get char
ora a ; done if zero
jz odone
call f0$put ; write to disk
jnz derr ; check for disk error
inx h ; pt to next char to output
jmp oloop
;
; This routine terminates the string just written to disk with a
; <CR> <LF> pair, and the creation of the file is continued.
;
odone:
mvi a,cr ; new line
call f0$put
mvi a,lf
call f0$put
jmp loop
;
; The user has typed an empty line (just <CR>), so we close the file
; and exit.
;
done:
call fo0$close ; close file
ret
;
; Error message and abort if error occurs while writing to disk.
;
derr:
call print
db cr,lf,'Disk Output Error',0
ret