1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-28 19:29:53 +00:00

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:
ol.sc 2011-01-29 21:43:26 +00:00
parent 9e31f7fb63
commit 110f911ccb
2 changed files with 43 additions and 10 deletions

View File

@ -20,6 +20,9 @@ DESTROY_COUNT = 1
RENAME_CALL = $C2
RENAME_COUNT = 2
GET_INFO_CALL = $C4
GET_INFO_COUNT = $A
ON_LINE_CALL = $C5
ON_LINE_COUNT = 2
@ -72,6 +75,19 @@ EOF_COUNT = 2
PATHNAME .addr
NEW_PATHNAME .addr
.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
PARAM_COUNT .byte
UNIT_NUM .byte
@ -117,7 +133,8 @@ EOF_COUNT = 2
DEVNUM := $BF30 ; Most recent accessed device
DEVCNT := $BF31 ; Number of on-line devices (minus 1)
DEVLST := $BF32 ; Up to 14 units may be active
DATELO := $BF90 ; Bits 15-9 = Year, 8-5 = Month, 4-0 = Day
TIMELO := $BF92 ; Bits 12-8 = Hour, 5-0 = Minute
DATELO := $BF90 ; Bits 15-9 = year, 8-5 = month, 4-0 = day
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
KVERSION:= $BFFF ; Kernel version number

View File

@ -3,15 +3,13 @@
;
; 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 __filetype, __auxtype
.constructor raisefilelevel
.destructor closeallfiles, 5
.import pushname, popname
.import pushname, popname, __dos_type
.import iobuf_alloc, iobuf_free
.import addysp, incsp4, incaxy, pushax, popax
@ -21,6 +19,17 @@
.include "mli.inc"
.include "filedes.inc"
.segment "INIT"
raisefilelevel:
; Raise file level
lda __dos_type
beq :+
inc LEVEL
: rts
.code
_open:
; Throw away all parameters except name
; and flags occupying together 4 bytes
@ -209,10 +218,6 @@ freebuffer:
ldx fdtab + FD::BUFFER+1,y
jmp iobuf_free
closeallfiles:
; All open files
lda #$00
closedirect:
; Set fd
sta mliparam + MLI::CLOSE::REF_NUM
@ -222,6 +227,17 @@ closedirect:
ldx #CLOSE_COUNT
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
CREATE: .byte %11000011 ; ACCESS: Standard full access