Introduced constructor to raise the ProDOS 8 file level - and extended the destructor to restore the file level again. This is a prerequisite to allow the upcoming exec() to open a file before the destructors run and continue reading from of it after the destructors have run.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4955 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -20,6 +20,9 @@ DESTROY_COUNT = 1
|
|||||||
RENAME_CALL = $C2
|
RENAME_CALL = $C2
|
||||||
RENAME_COUNT = 2
|
RENAME_COUNT = 2
|
||||||
|
|
||||||
|
GET_INFO_CALL = $C4
|
||||||
|
GET_INFO_COUNT = $A
|
||||||
|
|
||||||
ON_LINE_CALL = $C5
|
ON_LINE_CALL = $C5
|
||||||
ON_LINE_COUNT = 2
|
ON_LINE_COUNT = 2
|
||||||
|
|
||||||
@@ -72,6 +75,19 @@ EOF_COUNT = 2
|
|||||||
PATHNAME .addr
|
PATHNAME .addr
|
||||||
NEW_PATHNAME .addr
|
NEW_PATHNAME .addr
|
||||||
.endstruct
|
.endstruct
|
||||||
|
.struct INFO
|
||||||
|
PARAM_COUNT .byte
|
||||||
|
PATHNAME .addr
|
||||||
|
ACCESS .byte
|
||||||
|
FILE_TYPE .byte
|
||||||
|
AUX_TYPE .word
|
||||||
|
STORAGE_TYPE .byte
|
||||||
|
BLOCKS .word
|
||||||
|
MODE_DATE .word
|
||||||
|
MODE_TIME .word
|
||||||
|
CREATE_DATE .word
|
||||||
|
CREATE_TIME .word
|
||||||
|
.endstruct
|
||||||
.struct ON_LINE
|
.struct ON_LINE
|
||||||
PARAM_COUNT .byte
|
PARAM_COUNT .byte
|
||||||
UNIT_NUM .byte
|
UNIT_NUM .byte
|
||||||
@@ -117,7 +133,8 @@ EOF_COUNT = 2
|
|||||||
DEVNUM := $BF30 ; Most recent accessed device
|
DEVNUM := $BF30 ; Most recent accessed device
|
||||||
DEVCNT := $BF31 ; Number of on-line devices (minus 1)
|
DEVCNT := $BF31 ; Number of on-line devices (minus 1)
|
||||||
DEVLST := $BF32 ; Up to 14 units may be active
|
DEVLST := $BF32 ; Up to 14 units may be active
|
||||||
DATELO := $BF90 ; Bits 15-9 = Year, 8-5 = Month, 4-0 = Day
|
DATELO := $BF90 ; Bits 15-9 = year, 8-5 = month, 4-0 = day
|
||||||
TIMELO := $BF92 ; Bits 12-8 = Hour, 5-0 = Minute
|
TIMELO := $BF92 ; Bits 12-8 = hour, 5-0 = minute
|
||||||
|
LEVEL := $BF94 ; File level: used in open, flush, close
|
||||||
PFIXPTR := $BF9A ; If = 0, no prefix active
|
PFIXPTR := $BF9A ; If = 0, no prefix active
|
||||||
KVERSION:= $BFFF ; Kernel version number
|
KVERSION:= $BFFF ; Kernel version number
|
||||||
|
|||||||
@@ -3,15 +3,13 @@
|
|||||||
;
|
;
|
||||||
; int open (const char* name, int flags, ...);
|
; int open (const char* name, int flags, ...);
|
||||||
;
|
;
|
||||||
; Be sure to keep the value priority of closeallfiles lower than that of
|
|
||||||
; closeallstreams (which is the high level C file I/O counterpart and must be
|
|
||||||
; called before closeallfiles).
|
|
||||||
|
|
||||||
.export _open, closedirect, freebuffer
|
.export _open, closedirect, freebuffer
|
||||||
.export __filetype, __auxtype
|
.export __filetype, __auxtype
|
||||||
|
.constructor raisefilelevel
|
||||||
.destructor closeallfiles, 5
|
.destructor closeallfiles, 5
|
||||||
|
|
||||||
.import pushname, popname
|
.import pushname, popname, __dos_type
|
||||||
.import iobuf_alloc, iobuf_free
|
.import iobuf_alloc, iobuf_free
|
||||||
.import addysp, incsp4, incaxy, pushax, popax
|
.import addysp, incsp4, incaxy, pushax, popax
|
||||||
|
|
||||||
@@ -21,6 +19,17 @@
|
|||||||
.include "mli.inc"
|
.include "mli.inc"
|
||||||
.include "filedes.inc"
|
.include "filedes.inc"
|
||||||
|
|
||||||
|
.segment "INIT"
|
||||||
|
|
||||||
|
raisefilelevel:
|
||||||
|
; Raise file level
|
||||||
|
lda __dos_type
|
||||||
|
beq :+
|
||||||
|
inc LEVEL
|
||||||
|
: rts
|
||||||
|
|
||||||
|
.code
|
||||||
|
|
||||||
_open:
|
_open:
|
||||||
; Throw away all parameters except name
|
; Throw away all parameters except name
|
||||||
; and flags occupying together 4 bytes
|
; and flags occupying together 4 bytes
|
||||||
@@ -209,10 +218,6 @@ freebuffer:
|
|||||||
ldx fdtab + FD::BUFFER+1,y
|
ldx fdtab + FD::BUFFER+1,y
|
||||||
jmp iobuf_free
|
jmp iobuf_free
|
||||||
|
|
||||||
closeallfiles:
|
|
||||||
; All open files
|
|
||||||
lda #$00
|
|
||||||
|
|
||||||
closedirect:
|
closedirect:
|
||||||
; Set fd
|
; Set fd
|
||||||
sta mliparam + MLI::CLOSE::REF_NUM
|
sta mliparam + MLI::CLOSE::REF_NUM
|
||||||
@@ -222,6 +227,17 @@ closedirect:
|
|||||||
ldx #CLOSE_COUNT
|
ldx #CLOSE_COUNT
|
||||||
jmp callmli
|
jmp callmli
|
||||||
|
|
||||||
|
closeallfiles:
|
||||||
|
; All open files with current level (or higher)
|
||||||
|
lda #$00
|
||||||
|
jsr closedirect
|
||||||
|
|
||||||
|
; Restore original file level
|
||||||
|
lda __dos_type
|
||||||
|
beq :+
|
||||||
|
dec LEVEL
|
||||||
|
: rts
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
||||||
CREATE: .byte %11000011 ; ACCESS: Standard full access
|
CREATE: .byte %11000011 ; ACCESS: Standard full access
|
||||||
|
|||||||
Reference in New Issue
Block a user