💾 Archived View for mirrors.apple2.org.za › archive › apple2.archive.umich.edu › apple2 › 8bit › pro… captured on 2024-12-17 at 23:11:16.
View Raw
More Information
-=-=-=-=-=-=-
- *******************************
- Start Qforth file system
- *******************************
- Word "fcreate" - creates file or directory
WORD99 ASC 'fcreate '
DW FCREATE
FCREATE LDA #07 ; 7 parameters
STA WPARMS
STZ WPARMS+$0B ; Set up creation time
STZ WPARMS+$0A
STZ WPARMS+9 ; Set up creation date
STZ WPARMS+8
LDA #01 ; Storage type (seedling file)
STA WPARMS+7
JSR POPDATA ; Set up auxiliary filetype
STY WPARMS+5
STX WPARMS+6
JSR POPDATA ; Set up filetype
STY WPARMS+4
LDA #$C3 ; Set up access privileges for file
STA WPARMS+3
JSR POPDATA ; Set up address of pathname
STY PNTR
STX PNTR+1
LDA #FILENM3
STA WPARMS+1
STA PNTR2
LDA #/FILENM3
STA WPARMS+2
STA PNTR2+1
JSR CONVFNAM ; Convert filename to ProDOS format
JSR MLI
DFB $C0 ; Create code
DW WPARMS
; Execution falls through into HANDLERR
HANDLERR BCS :ERR
LDY #00 ; No error - push 0 on stack
LDX #00
JMP PUSHDATA
:ERR TAY ; Error, so push error # on stack
LDX #00
JMP PUSHDATA
- Convert filename to ProDOS format
CONVFNAM LDY #00 ; Convert filename to ProDOS format
:LOOP LDA (PNTR),Y
BEQ :FINIS
INY
STA (PNTR2),Y
BRA :LOOP
:FINIS TYA ; Set up length byte of filename
STA (PNTR2)
RTS
- Table of filename buffers
FNAMTBLL DFB #FILENM0,#FILENM1,#FILENM2
FNAMTBLH DFB #/FILENM0,#/FILENM1,#/FILENM2
FBUFTBLL DFB #FILEBUF0,#FILEBUF1,#FILEBUF2
FBUFTBLH DFB #/FILEBUF0,#FILEBUF1,#FILEBUF2
CFILE DS 1
FREFTBL DS 3
- MLI parameter storage area
WPARMS DS 20 ; MLI parameters used by words
- Word "fdestroy" - destory file or directory
WORD100 ASC 'fdestroy '
DW FDESTROY
FDESTROY LDA #01 ; Only one parameter
STA WPARMS
JSR POPDATA ; Set up address of pathname
STY PNTR
STX PNTR+1
LDA #FILENM3
STA WPARMS+1
STA PNTR2
LDA #/FILENM3
STA WPARMS+2
STA PNTR2+1
JSR CONVFNAM ; Convert filename to ProDOS format
JSR MLI ; Call MLI
DFB $C1 ; Destroy code
DW WPARMS
JMP HANDLERR ; Handle error, if any
- Word "fstat" - find out various things about file
WORD101 ASC 'fstat '
DW FSTAT
FSTAT LDA #10 ; Ten parameters
STA WPARMS
JSR POPDATA ; Get address of pathname
STY WPARMS+1
STX WPARMS+2
JSR MLI ; Call MLI with GET_FILE_INFO
DFB $C4
DW WPARMS
PHP
PHA
LDY WPARMS+4 ; Push filetype
LDX #00
JSR PUSHDATA
LDY WPARMS+5 ; Push auxiliary filetype
LDX WPARMS+6
JSR PUSHDATA
LDY WPARMS+8 ; Disk blocks used
LDX WPARMS+9
JSR PUSHDATA
PLA
PLP
JMP HANDLERR
- Word "fopen" - open a file
WORD102 ASC 'fopen '
DW FOPEN
FOPEN LDA #03 ; Three parameters
STA WPARMS
JSR POPDATA ; Set up address of pathname
STY PNTR
STX PNTR+1
JSR POPDATA ; Set up filename buffer
STY CFILE
LDA FNAMTBLL,Y
STA WPARMS+1
STA PNTR2
LDA FNAMTBLH,Y
STA WPARMS+2
STA PNTR2+1
LDA FBUFTBLL,Y ; Set up address of file buffer
STA WPARMS+3
LDA FBUFTBLH,Y
STA WPARMS+4
JSR CONVFNAM ; Convert filename
JSR MLI ; Call MLI
DFB $C8 ; Open code
DW WPARMS
PHP
PHA
LDA WPARMS+5 ; Store reference # for future use
LDY CFILE
STA FREFTBL,Y
PLA
PLP
JMP HANDLERR ; Handle error, if any
- Word "fposition" - set current file marker position
WORD103 ASC 'fposition '
DW FPOSIT
FPOSIT LDA #02 ; Two parameters
STA WPARMS
JSR POPDATA ; Set up file position
STY WPARMS+2
STX WPARMS+3
JSR POPDATA
STY WPARMS+4
JSR POPDATA ; Set up reference number
LDA FREFTBL,Y
STA WPARMS+1
JSR MLI
DFB $CE ; Set_Mark call
DW WPARMS
JMP HANDLERR ; Handle error, if any
- Word "fread" - read a file
WORD104 ASC 'fread '
DW FREAD
FREAD LDA #04 ; Four parameters
STA WPARMS
JSR POPDATA ; Set up requested length
STY WPARMS+4
STX WPARMS+5
JSR POPDATA ; Set up address of data buffer
STY WPARMS+2
STX WPARMS+3
JSR POPDATA ; Set up reference number
LDA FREFTBL,Y
STA WPARMS+1
JSR MLI ; Call MLI
DFB $CA ; Read code
DW WPARMS
PHP
PHA
LDY WPARMS+6 ; Return actual read length
LDX WPARMS+7
JSR PUSHDATA
PLA
PLP
JMP HANDLERR ; Handle error, if any
- Word "fwrite" - write a file
WORD105 ASC 'fwrite '
DW FWRITE
FWRITE LDA #04 ; Four parameters
STA WPARMS
JSR POPDATA ; Set up requested length
STY WPARMS+4
STX WPARMS+5
JSR POPDATA ; Set up address of data buffer
STY WPARMS+2
STX WPARMS+3
JSR POPDATA ; Set up reference number
LDA FREFTBL,Y
STA WPARMS+1
JSR MLI ; Call MLI
DFB $CB ; Write code
DW WPARMS
PHP
PHA
LDY WPARMS+6 ; Return actual write length
LDX WPARMS+7
JSR PUSHDATA
PLA
PLP
JMP HANDLERR ; Handle error, if any
- Word "fclose" - close file
WORD106 ASC 'fclose '
DW FCLOSE
FCLOSE LDA #01 ; One parameter
STA WPARMS
JSR POPDATA ; Set up reference number
LDA FREFTBL,Y
STA WPARMS+1
JSR MLI ; Call MLI
DFB $CC ; Close code
DW WPARMS
JMP HANDLERR ; Handle error, if any
- *******************************
- End Qforth file system
- *******************************