mirror of
https://github.com/hsoft/collapseos.git
synced 2024-12-24 14:18:06 +11:00
Extract fs_cmds.asm from fs.asm
This commit is contained in:
parent
23f0dc18ca
commit
df67a38f81
@ -468,12 +468,9 @@ fsTell:
|
||||
ld h, (ix+1)
|
||||
ret
|
||||
|
||||
; *** SHELL COMMANDS ***
|
||||
; Mount the fs subsystem upon the currently selected blockdev at current offset.
|
||||
; Verify is block is valid and error out if its not, mounting nothing.
|
||||
; Upon mounting, copy currently selected device in FS_GETC/PUTC/SEEK/TELL.
|
||||
fsOnCmd:
|
||||
.db "fson", 0, 0, 0
|
||||
fsOn:
|
||||
push hl
|
||||
push de
|
||||
@ -508,86 +505,3 @@ fsOn:
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; Lists filenames in currently active FS
|
||||
flsCmd:
|
||||
.db "fls", 0, 0, 0, 0
|
||||
call fsBegin
|
||||
jr nz, .error
|
||||
.loop:
|
||||
call fsIsDeleted
|
||||
jr z, .skip
|
||||
ld hl, FS_META+FS_META_FNAME_OFFSET
|
||||
call printstr
|
||||
call printcrlf
|
||||
.skip:
|
||||
call fsNext
|
||||
jr z, .loop ; Z set? fsNext was successful
|
||||
xor a
|
||||
jr .end
|
||||
.error:
|
||||
ld a, FS_ERR_NO_FS
|
||||
.end:
|
||||
ret
|
||||
|
||||
; Takes one byte block number to allocate as well we one string arg filename
|
||||
; and allocates a new file in the current fs.
|
||||
fnewCmd:
|
||||
.db "fnew", 0b001, 0b1001, 0b001
|
||||
push hl
|
||||
ld a, (hl)
|
||||
inc hl
|
||||
call intoHL
|
||||
call fsAlloc
|
||||
pop hl
|
||||
xor a
|
||||
ret
|
||||
|
||||
; Deletes filename with specified name
|
||||
fdelCmd:
|
||||
.db "fdel", 0b1001, 0b001, 0
|
||||
push hl
|
||||
push de
|
||||
call intoHL ; HL now holds the string we look for
|
||||
call fsFindFN
|
||||
jr nz, .notfound
|
||||
; Found! delete
|
||||
xor a
|
||||
; Set filename to zero to flag it as deleted
|
||||
ld (FS_META+FS_META_FNAME_OFFSET), a
|
||||
call fsWriteMeta
|
||||
; a already to 0, our result.
|
||||
jr .end
|
||||
.notfound:
|
||||
ld a, FS_ERR_NOT_FOUND
|
||||
.end:
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
|
||||
; Opens specified filename in specified file handle.
|
||||
; First argument is file handle, second one is file name.
|
||||
; Example: fopn 0 foo.txt
|
||||
fopnCmd:
|
||||
.db "fopn", 0b001, 0b1001, 0b001
|
||||
push hl
|
||||
push de
|
||||
ld a, (hl) ; file handle index
|
||||
ld de, FS_HANDLES
|
||||
call addDE ; DE now stores pointer to file handle
|
||||
inc hl
|
||||
call intoHL ; HL now holds the string we look for
|
||||
call fsFindFN
|
||||
jr nz, .notfound
|
||||
; Found!
|
||||
; FS_PTR points to the file we want to open
|
||||
ex hl, de ; HL now points to the file handle.
|
||||
call fsOpen
|
||||
jr .end
|
||||
.notfound:
|
||||
ld a, FS_ERR_NOT_FOUND
|
||||
.end:
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
87
parts/z80/fs_cmds.asm
Normal file
87
parts/z80/fs_cmds.asm
Normal file
@ -0,0 +1,87 @@
|
||||
; *** SHELL COMMANDS ***
|
||||
fsOnCmd:
|
||||
.db "fson", 0, 0, 0
|
||||
jp fsOn
|
||||
|
||||
; Lists filenames in currently active FS
|
||||
flsCmd:
|
||||
.db "fls", 0, 0, 0, 0
|
||||
call fsBegin
|
||||
jr nz, .error
|
||||
.loop:
|
||||
call fsIsDeleted
|
||||
jr z, .skip
|
||||
ld hl, FS_META+FS_META_FNAME_OFFSET
|
||||
call printstr
|
||||
call printcrlf
|
||||
.skip:
|
||||
call fsNext
|
||||
jr z, .loop ; Z set? fsNext was successful
|
||||
xor a
|
||||
jr .end
|
||||
.error:
|
||||
ld a, FS_ERR_NO_FS
|
||||
.end:
|
||||
ret
|
||||
|
||||
; Takes one byte block number to allocate as well we one string arg filename
|
||||
; and allocates a new file in the current fs.
|
||||
fnewCmd:
|
||||
.db "fnew", 0b001, 0b1001, 0b001
|
||||
push hl
|
||||
ld a, (hl)
|
||||
inc hl
|
||||
call intoHL
|
||||
call fsAlloc
|
||||
pop hl
|
||||
xor a
|
||||
ret
|
||||
|
||||
; Deletes filename with specified name
|
||||
fdelCmd:
|
||||
.db "fdel", 0b1001, 0b001, 0
|
||||
push hl
|
||||
push de
|
||||
call intoHL ; HL now holds the string we look for
|
||||
call fsFindFN
|
||||
jr nz, .notfound
|
||||
; Found! delete
|
||||
xor a
|
||||
; Set filename to zero to flag it as deleted
|
||||
ld (FS_META+FS_META_FNAME_OFFSET), a
|
||||
call fsWriteMeta
|
||||
; a already to 0, our result.
|
||||
jr .end
|
||||
.notfound:
|
||||
ld a, FS_ERR_NOT_FOUND
|
||||
.end:
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
|
||||
; Opens specified filename in specified file handle.
|
||||
; First argument is file handle, second one is file name.
|
||||
; Example: fopn 0 foo.txt
|
||||
fopnCmd:
|
||||
.db "fopn", 0b001, 0b1001, 0b001
|
||||
push hl
|
||||
push de
|
||||
ld a, (hl) ; file handle index
|
||||
ld de, FS_HANDLES
|
||||
call addDE ; DE now stores pointer to file handle
|
||||
inc hl
|
||||
call intoHL ; HL now holds the string we look for
|
||||
call fsFindFN
|
||||
jr nz, .notfound
|
||||
; Found!
|
||||
; FS_PTR points to the file we want to open
|
||||
ex hl, de ; HL now points to the file handle.
|
||||
call fsOpen
|
||||
jr .end
|
||||
.notfound:
|
||||
ld a, FS_ERR_NOT_FOUND
|
||||
.end:
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
@ -28,6 +28,7 @@ BLOCKDEV_COUNT .equ 4
|
||||
.equ FS_RAMSTART BLOCKDEV_RAMEND
|
||||
.equ FS_HANDLE_COUNT 2
|
||||
#include "fs.asm"
|
||||
#include "fs_cmds.asm"
|
||||
|
||||
SHELL_RAMSTART .equ FS_RAMEND
|
||||
.define SHELL_IO_GETC call blkGetC
|
||||
|
Loading…
Reference in New Issue
Block a user