; *** SHELL COMMANDS *** fsOnCmd: .db "fson", 0, 0, 0 jp fsOn ; Lists filenames in currently active FS flsCmd: .db "fls", 0, 0, 0, 0 call fsIsOn jr nz, .error 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 or a ; cp 0 jr z, .noInc ; DE already point to correct handle ld b, a .loop: ld a, FS_HANDLE_SIZE call addDE djnz .loop .noInc: ; 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 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