Basic elements of *COPY are in. Needs more work!
This commit is contained in:
parent
052e46f98a
commit
82f66cae7c
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
|
@ -567,14 +567,14 @@ PRSPACE LDA #' '
|
|||
* Parameter string in XY
|
||||
RENAME JSR PARSNAME ; Copy Arg1->MOSFILE
|
||||
CMP #$00 ; Length of arg1
|
||||
BEQ :RENSYN
|
||||
BEQ :SYNTAX
|
||||
JSR PARSLPTR2 ; Copy Arg2->MOSFILE2
|
||||
CMP #$00 ; Length of arg2
|
||||
BEQ :RENSYN
|
||||
BEQ :SYNTAX
|
||||
>>> XF2MAIN,RENFILE
|
||||
:RENSYN BRK
|
||||
:SYNTAX BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: RENAME <old fname> <new fname>'
|
||||
ASC 'Syntax: RENAME <objspec> <objspec>'
|
||||
BRK
|
||||
RENRET
|
||||
>>> ENTAUX
|
||||
|
@ -582,6 +582,25 @@ RENRET
|
|||
LDA #$00
|
||||
RTS
|
||||
|
||||
* Perform *COPY function
|
||||
* Parameter string in XY
|
||||
COPY JSR PARSNAME ; Copy Arg1->MOSFILE
|
||||
CMP #$00 ; Length of arg1
|
||||
BEQ :SYNTAX
|
||||
JSR PARSLPTR2 ; Copy Arg2->MOSFILE2
|
||||
CMP #$00 ; Length of arg2
|
||||
BEQ :SYNTAX
|
||||
>>> XF2MAIN,COPYFILE
|
||||
:SYNTAX BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: COPY <listspec> <*objspec*>'
|
||||
BRK
|
||||
COPYRET
|
||||
>>> ENTAUX
|
||||
JSR CHKERROR
|
||||
LDA #$00
|
||||
RTS
|
||||
|
||||
* Handle *DIR (directory change) command
|
||||
* On entry, XY points to command line
|
||||
CHDIR JSR PARSNAME ; Copy filename->MOSFILE
|
||||
|
@ -589,7 +608,7 @@ CHDIR JSR PARSNAME ; Copy filename->MOSFILE
|
|||
BNE :HASPARM
|
||||
BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: DIR <pathname>'
|
||||
ASC 'Syntax: DIR <*objspec*>'
|
||||
BRK
|
||||
:HASPARM >>> XF2MAIN,SETPFX
|
||||
|
||||
|
@ -603,7 +622,7 @@ DRIVE LDA (OSLPTR),Y ; First char
|
|||
BEQ :HASPARM
|
||||
:ERR BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: DRIVE :sd (eg: DRIVE :61)'
|
||||
ASC 'Syntax: DRIVE <dry> (eg: DRIVE :61)'
|
||||
BRK
|
||||
:HASPARM >>> XF2MAIN,SETPFX
|
||||
|
||||
|
@ -627,7 +646,7 @@ FREE LDA (OSLPTR),Y ; First char
|
|||
BEQ :HASPARM
|
||||
:ERR BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: FREE :sd (eg: DRIVE :61)'
|
||||
ASC 'Syntax: FREE <dry> (eg: DRIVE :61)'
|
||||
BRK
|
||||
:HASPARM >>> XF2MAIN,DRVINFO
|
||||
|
||||
|
@ -672,7 +691,7 @@ ACCESS JSR PARSLPTR ; Copy filename->MOSFILE
|
|||
>>> XF2MAIN,SETPERM
|
||||
:SYNTAX BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: ACCESS <obj-list> <L|R|W>'
|
||||
ASC 'Syntax: ACCESS <listspec> <L|R|W>'
|
||||
BRK
|
||||
|
||||
ACCRET >>> ENTAUX
|
||||
|
@ -686,7 +705,7 @@ DESTROY JSR PARSLPTR ; Copy filename->MOSFILE
|
|||
>>> XF2MAIN,MULTIDEL
|
||||
:SYNTAX BRK
|
||||
DB $DC
|
||||
ASC 'Syntax: DESTROY <obj-list>'
|
||||
ASC 'Syntax: DESTROY <listspec>'
|
||||
BRK
|
||||
|
||||
DESTRET >>> ENTAUX
|
||||
|
|
|
@ -53,6 +53,9 @@ CMDTABLE ASC 'CAT' ; Must be first command so matches '*.'
|
|||
DB $8B
|
||||
DW STARBYTE-1 ; OPT -> OSBYTE &8B,X,Y XY=>params
|
||||
* others
|
||||
ASC 'COPY'
|
||||
DB $FF
|
||||
DW COPY-1 ; COPY -> XY=>params
|
||||
ASC 'QUIT'
|
||||
DB $80
|
||||
DW STARQUIT-1 ; QUIT -> (LPTR)=>params
|
||||
|
|
|
@ -27,6 +27,7 @@ COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on
|
|||
RTS
|
||||
|
||||
* Search FILEREFS for value in A
|
||||
* On return, buffer number is in X (or $FF if no bufs)
|
||||
FINDBUF LDX #$00
|
||||
:L1 CMP FILEREFS,X
|
||||
BEQ :END
|
||||
|
@ -36,6 +37,34 @@ FINDBUF LDX #$00
|
|||
LDX #$FF ; $FF for not found
|
||||
:END RTS
|
||||
|
||||
* Obtain I/O buffer address
|
||||
* On entry: buffer number in X
|
||||
* On exit: buffer address in AY
|
||||
* Carry set if no bufs, clear otherwise
|
||||
BUFADDR CPX #$00
|
||||
BNE :S1
|
||||
LDA #<IOBUF1
|
||||
LDY #>IOBUF1
|
||||
BRA :EXIT
|
||||
:S1 CPX #$01
|
||||
BNE :S2
|
||||
LDA #<IOBUF2
|
||||
LDY #>IOBUF2
|
||||
BRA :EXIT
|
||||
:S2 CPX #$02
|
||||
BNE :S3
|
||||
LDA #<IOBUF3
|
||||
LDY #>IOBUF3
|
||||
BRA :EXIT
|
||||
:S3 CPX #$03
|
||||
BNE :NOBUFS
|
||||
LDA #<IOBUF4
|
||||
LDY #>IOBUF4
|
||||
:EXIT CLC
|
||||
RTS
|
||||
:NOBUFS SEC
|
||||
RTS
|
||||
|
||||
* Check if file exists
|
||||
* Return A=0 if doesn't exist, A=1 file, A=2 dir
|
||||
EXISTS LDA #<MOSFILE
|
||||
|
|
|
@ -61,7 +61,7 @@ PREPATH LDX MOSFILE ; Length
|
|||
JSR DEL1CHAR ; Delete '/' from MOSFILE
|
||||
BRA :REENTER ; Go again!
|
||||
:APPEND JSR APFXMF ; Append MOSFILE->PREFIX
|
||||
JSR COPYPFXMF ; Copy back to MOSFILE
|
||||
JSR PFXtoMF ; Copy back to MOSFILE
|
||||
:EXIT JSR DIGCONV ; Handle initial digits
|
||||
CLC
|
||||
RTS
|
||||
|
@ -218,7 +218,7 @@ MFtoTMP LDA #<MOSFILE
|
|||
JSR STRCPY
|
||||
RTS
|
||||
|
||||
* Copy MFTEMP to MOSFILE1
|
||||
* Copy MFTEMP to MOSFILE
|
||||
TMPtoMF LDA #<MFTEMP
|
||||
STA A1L
|
||||
LDA #>MFTEMP
|
||||
|
@ -230,6 +230,18 @@ TMPtoMF LDA #<MFTEMP
|
|||
JSR STRCPY
|
||||
RTS
|
||||
|
||||
* Copy MFTEMP to MOSFILE2
|
||||
TMPtoMF2 LDA #<MFTEMP
|
||||
STA A1L
|
||||
LDA #>MFTEMP
|
||||
STA A1H
|
||||
LDA #<MOSFILE2
|
||||
STA A4L
|
||||
LDA #>MOSFILE2
|
||||
STA A4H
|
||||
JSR STRCPY
|
||||
RTS
|
||||
|
||||
* Copy MOSFILE to MOSFILE2
|
||||
COPYMF12 LDA #<MOSFILE
|
||||
STA A1L
|
||||
|
@ -255,8 +267,7 @@ COPYMF21 LDA #<MOSFILE2
|
|||
RTS
|
||||
|
||||
* Copy PREFIX to MOSFILE
|
||||
COPYPFXMF
|
||||
LDA #<PREFIX
|
||||
PFXtoMF LDA #<PREFIX
|
||||
STA A1L
|
||||
LDA #>PREFIX
|
||||
STA A1H
|
||||
|
|
166
mainmem.svc.s
166
mainmem.svc.s
|
@ -86,6 +86,140 @@ RENFILE >>> ENTMAIN
|
|||
DW RENPL
|
||||
>>> XF2AUX,RENRET
|
||||
|
||||
* ProDOS file handling for file copying
|
||||
COPYFILE >>> ENTMAIN
|
||||
JSR MFtoTMP ; Swap MOSFILE & MOSFILE2
|
||||
JSR COPYMF21
|
||||
JSR TMPtoMF2
|
||||
JSR PREPATH ; Preprocess arg2 (in MOSFILE)
|
||||
JSR WILDONE ; Handle any wildcards
|
||||
JSR EXISTS ; See if destination exists
|
||||
STA :DESTTYPE ; Stash for later
|
||||
JSR MFtoTMP ; Swap MOSFILE & MOSFILE2 again
|
||||
JSR COPYMF21
|
||||
JSR TMPtoMF2
|
||||
JSR PREPATH ; Preprocess arg1
|
||||
JSR WILDCARD ; Handle any wildcards in arg1
|
||||
BCS :NONE
|
||||
JSR HASWILD
|
||||
BCC :MAINLOOP ; No wildcards in final segment
|
||||
LDA :DESTTYPE ; Wildcards, check dest type
|
||||
CMP #$02 ; Existing directory?
|
||||
BNE :BADDEST ; If not, error
|
||||
BRA :MAINLOOP ; Source: wildcard, dest: dir
|
||||
:NOWILD
|
||||
:MAINLOOP
|
||||
LDA :DESTTYPE ; Recover destination type
|
||||
JSR COPY1FILE ; Copy an individual file
|
||||
BCS :COPYERR
|
||||
JSR WILDNEXT
|
||||
BCS :NOMORE
|
||||
BRA :MAINLOOP
|
||||
JSR CLSDIR
|
||||
:EXIT >>> XF2AUX,COPYRET
|
||||
:NONE JSR CLSDIR
|
||||
LDA #$40 ; TODO PROPER ERROR CODE
|
||||
BRA :EXIT
|
||||
:BADDEST JSR CLSDIR
|
||||
LDA #$40 ; TODO PROPER ERROR CODE
|
||||
BRA :EXIT
|
||||
:NOMORE JSR CLSDIR
|
||||
LDA #$00
|
||||
BRA :EXIT
|
||||
:COPYERR JSR CLSDIR
|
||||
LDA #$40 ; TODO PROPER ERROR CODE
|
||||
BRA :EXIT
|
||||
:DESTTYPE DB $00
|
||||
|
||||
* Copy a single file
|
||||
* Source is in MOSFILE, DEST in MOSFILE2
|
||||
* On entry: A=0 dest doesn't exist, A=1 dest is file, A=2 dest is dir
|
||||
* Returns with carry set if error, carry clear otherwise
|
||||
COPY1FILE STA :DESTTYPE ; TODO: USE THE DEST TYPE!!!!
|
||||
LDA #<MOSFILE
|
||||
STA GINFOPL+1
|
||||
STA OPENPL+1
|
||||
LDA #>MOSFILE
|
||||
STA GINFOPL+2
|
||||
STA OPENPL+2
|
||||
JSR GETINFO ; GET_FILE_INFO
|
||||
BCS :ERR
|
||||
LDA #<MOSFILE2
|
||||
STA GINFOPL+1
|
||||
LDA #>MOSFILE2
|
||||
STA GINFOPL+2
|
||||
LDA #$07 ; Fix num parms in PL
|
||||
STA GINFOPL
|
||||
JSR MLI ; Call CREATE with ..
|
||||
DB CREATCMD ; .. PL from GET_FILE_INFO
|
||||
DW GINFOPL
|
||||
LDA #$0A ; Num parms back as we found it
|
||||
STA GINFOPL
|
||||
BCS :ERR ; Error creating dest file
|
||||
LDA #$00 ; Look for empty slot
|
||||
JSR FINDBUF
|
||||
STX :BUFIDX
|
||||
JSR BUFADDR
|
||||
BCS :ERR ; No I/O bufs available
|
||||
STA OPENPL+3
|
||||
STY OPENPL+4
|
||||
JSR OPENFILE
|
||||
BCS :ERR ; Open error
|
||||
LDA OPENPL+5 ; File ref num
|
||||
STA READPL+1
|
||||
LDX :BUFIDX
|
||||
STA FILEREFS,X ; Store file ref number
|
||||
LDA #<MOSFILE2
|
||||
STA OPENPL+1
|
||||
LDA #>MOSFILE2
|
||||
STA OPENPL+2
|
||||
LDA #$00 ; Look for empty slot
|
||||
JSR FINDBUF
|
||||
STX :BUFIDX
|
||||
JSR BUFADDR
|
||||
BCS :ERR ; No I/O bufs available
|
||||
STA OPENPL+3
|
||||
STY OPENPL+4
|
||||
JSR OPENFILE
|
||||
BCS :ERRCLS1
|
||||
LDA OPENPL+5 ; File ref num
|
||||
STA WRITEPL+1
|
||||
LDX :BUFIDX
|
||||
STA FILEREFS,X ; Store file ref number
|
||||
BRA :MAINLOOP
|
||||
:ERR SEC ; Report error
|
||||
RTS
|
||||
:MAINLOOP JSR RDFILE ; Read a block
|
||||
BCC :RDOKAY
|
||||
CMP #$4C ; Is it EOF?
|
||||
BEQ :EOFEXIT
|
||||
BRA :ERRCLS2 ; Any other error
|
||||
:RDOKAY LDA READPL+6 ; Trans count MSB
|
||||
STA WRITEPL+4 ; Request count MSB
|
||||
LDA READPL+7 ; Trans count MSB
|
||||
STA WRITEPL+5 ; Request count MSB
|
||||
JSR WRTFILE ; Write a block
|
||||
BCS :ERRCLS2 ; Write error
|
||||
BRA :MAINLOOP
|
||||
:EOFEXIT CLC ; No error
|
||||
PHP
|
||||
:CLOSE2 LDA READPL+1 ; Close output file
|
||||
STA CLSPL+1
|
||||
JSR CLSFILE
|
||||
:CLOSE1 LDA WRITEPL+1 ; Close input file
|
||||
STA CLSPL+1
|
||||
JSR CLSFILE
|
||||
PLP
|
||||
RTS
|
||||
:ERRCLS1 SEC
|
||||
PHP
|
||||
BRA :CLOSE1
|
||||
:ERRCLS2 SEC
|
||||
PHP
|
||||
BRA :CLOSE2
|
||||
:DESTTYPE DB $00
|
||||
:BUFIDX DB $00
|
||||
|
||||
* ProDOS file handling for MOS OSFIND OPEN call
|
||||
* Options in A: $40 'r', $80 'w', $C0 'rw'
|
||||
OFILE >>> ENTMAIN
|
||||
|
@ -103,7 +237,7 @@ OFILE >>> ENTMAIN
|
|||
:NOTDIR PLA
|
||||
PHA
|
||||
CMP #$80 ; Write mode
|
||||
BNE :S0
|
||||
BNE :S1
|
||||
JSR DODELETE
|
||||
LDA #$01 ; Storage type - file
|
||||
STA CREATEPL+7
|
||||
|
@ -118,32 +252,13 @@ OFILE >>> ENTMAIN
|
|||
LDA #$00
|
||||
STA CREATEPL+6
|
||||
JSR CRTFILE ; Create MOSFILE
|
||||
:S0 LDA #$00 ; Look for empty slot
|
||||
:S1 LDA #$00 ; Look for empty slot
|
||||
JSR FINDBUF
|
||||
STX BUFIDX
|
||||
CPX #$00
|
||||
BNE :S1
|
||||
LDA #<IOBUF1
|
||||
LDY #>IOBUF1
|
||||
BRA :S4
|
||||
:S1 CPX #$01
|
||||
BNE :S2
|
||||
LDA #<IOBUF2
|
||||
LDY #>IOBUF2
|
||||
BRA :S4
|
||||
:S2 CPX #$02
|
||||
BNE :S3
|
||||
LDA #<IOBUF3
|
||||
LDY #>IOBUF3
|
||||
BRA :S4
|
||||
:S3 CPX #$03
|
||||
BNE :NOTFND ; Out of buffers really
|
||||
LDA #<IOBUF4
|
||||
LDY #>IOBUF4
|
||||
|
||||
:S4 STA OPENPL2+3
|
||||
JSR BUFADDR
|
||||
BCS :NOTFND
|
||||
STA OPENPL2+3
|
||||
STY OPENPL2+4
|
||||
|
||||
LDA #<MOSFILE
|
||||
STA OPENPL2+1
|
||||
LDA #>MOSFILE
|
||||
|
@ -169,8 +284,7 @@ CFILE >>> ENTMAIN
|
|||
JSR CLSFILE
|
||||
LDA MOSFILE
|
||||
JSR FINDBUF
|
||||
CPX #$FF
|
||||
BEQ :S1
|
||||
BCS :S1
|
||||
LDA #$00
|
||||
STA FILEREFS,X
|
||||
:S1 JMP FINDEXIT
|
||||
|
|
Loading…
Reference in New Issue