1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-20 22:38:06 +11:00
collapseos/apps/shell/fs.asm
Virgil Dupras 019d05f64c Make the shell a userspace app
That's my mega-commit you've all been waiting for.

The code for the shell share more routines with userspace apps than with kernel
units, because, well, its behavior is that of a userspace app, not a device
driver.

This created a weird situation with libraries and jump tables. Some routine
belonging to the `kernel/` directory felt weird there.

And then comes `apps/basic`, which will likely share even more code with the
shell. I was seeing myself creating huge jump tables to reuse code from the
shell. It didn't feel right.

Moreover, we'll probably want basic-like apps to optionnally replace the shell.

So here I am with this huge change in the project structure. I didn't test all
recipes on hardware yet, I will do later. I might have broken some...

But now, the structure feels better and the line between what belongs to
`kernel` and what belongs to `apps` feels clearer.
2019-11-15 15:37:49 -05:00

76 lines
1.4 KiB
NASM

; *** SHELL COMMANDS ***
fsOnCmd:
.db "fson", 0, 0, 0
jp fsOn
; Lists filenames in currently active FS
flsCmd:
.db "fls", 0, 0, 0, 0
ld iy, .iter
call fsIter
ret z
ld a, FS_ERR_NO_FS
ret
.iter:
ld a, FS_META_FNAME_OFFSET
call addHL
call printstr
jp printcrlf
; 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
call intoHL ; HL now holds the string we look for
call fsFindFN
jr nz, .notfound
; Found! delete
call fsDel
jr z, .end
; weird error, continue to error condition
.notfound:
ld a, FS_ERR_NOT_FOUND
.end:
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
call fsHandle
; DE now points 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
push de \ pop ix ; IX now points to the file handle.
call fsOpen
jr .end
.notfound:
ld a, FS_ERR_NOT_FOUND
.end:
pop de
pop hl
ret