;
; F$OPEN -- OPEN FILE SPECIFIED BY FCB PTED TO BY DE
; RETURN W/A=0 AND ZERO FLAG SET (Z) IF NO ERROR
; RETURN W/A=0FFH AND NZ IF FILE NOT FOUND OR NO ROOM IN DIRECTORY
; F$MOPEN -- OPEN AND MAKE FILE SPECIFIED BY FCB PTED TO BY DE
; IF FILE DOES NOT EXIST, CREATE IT FIRST
; SAME RETURN CODES
;
EXT BDOS
PUTRG MACRO
PUSH B ; SAVE BC, DE, HL
PUSH D
PUSH H
ENDM
GETRG MACRO
POP H ; RESTORE HL, DE, BC
POP D
POP B
ENDM
F$OPEN::
PUTRG ; SAVE REGISTERS
MVI C,B$OPEN ; OPEN FILE
CALL BDOS ; OPEN FILE
CPI 255 ; NOT PRESENT
JNZ OPENOK ; OK
OPENERR:
MVI A,0FFH ; ERROR FLAG
ORA A ; SET FLAGS
JMP OPENDN
OPENOK:
XRA A ; OK FLAG
OPENDN:
GETRG ; RESTORE REGISTERS
RET
F$MOPEN::
PUTRG ; SAVE REGISTERS
MVI C,B$OPEN ; TRY TO OPEN FILE
CALL BDOS
CPI 0FFH ; NOT PRESENT?
JNZ OPENOK ; OK
MVI C,B$CREAT ; TRY TO CREATE FILE
CALL BDOS
CPI 0FFH ; NOT ENOUGH ROOM?
JNZ OPENOK ; OK
JMP OPENERR ; ERROR RETURN