mirror of
https://github.com/irmen/prog8.git
synced 2024-11-26 11:49:22 +00:00
API change: diskio.list_files doesn't have an internal buffer anymore, you now have to supply a buffer + size yourself. Renamed to list_filenames
This commit is contained in:
parent
08275c406a
commit
77e956a29f
@ -114,30 +114,31 @@ io_error:
|
|||||||
|
|
||||||
; ----- get a list of files (uses iteration functions internally) -----
|
; ----- get a list of files (uses iteration functions internally) -----
|
||||||
|
|
||||||
sub list_files(ubyte drivenumber, uword pattern_ptr, uword name_ptrs, ubyte max_names) -> ubyte {
|
sub list_filenames(ubyte drivenumber, uword pattern_ptr, uword filenames_buffer, uword filenames_buf_size) -> ubyte {
|
||||||
; -- fill the array 'name_ptrs' with (pointers to) the names of the files requested.
|
; -- fill the provided buffer with the names of the files on the disk (until buffer is full).
|
||||||
; Returns number of files. Skips 'dir' entries (subdirs).
|
; Files in the buffer are separeted by a 0 byte. You can provide an optional pattern to match against.
|
||||||
const uword filenames_buf_size = 800
|
; After the last filename one additional 0 byte is placed to indicate the end of the list.
|
||||||
uword filenames_buffer = memory("filenames", filenames_buf_size, 0)
|
; Returns number of files (it skips 'dir' entries i.e. subdirectories).
|
||||||
|
; Also sets carry on exit: Carry clear = all files returned, Carry set = directory has more files that didn't fit in the buffer.
|
||||||
uword buffer_start = filenames_buffer
|
uword buffer_start = filenames_buffer
|
||||||
ubyte files_found = 0
|
ubyte files_found = 0
|
||||||
if lf_start_list(drivenumber, pattern_ptr) {
|
if lf_start_list(drivenumber, pattern_ptr) {
|
||||||
while lf_next_entry() {
|
while lf_next_entry() {
|
||||||
if list_filetype!="dir" {
|
if list_filetype!="dir" {
|
||||||
@(name_ptrs) = lsb(filenames_buffer)
|
|
||||||
name_ptrs++
|
|
||||||
@(name_ptrs) = msb(filenames_buffer)
|
|
||||||
name_ptrs++
|
|
||||||
filenames_buffer += string.copy(diskio.list_filename, filenames_buffer) + 1
|
filenames_buffer += string.copy(diskio.list_filename, filenames_buffer) + 1
|
||||||
files_found++
|
files_found++
|
||||||
if filenames_buffer - buffer_start > filenames_buf_size-18
|
if filenames_buffer - buffer_start > filenames_buf_size-20 {
|
||||||
break
|
@(filenames_buffer)=0
|
||||||
if files_found == max_names
|
lf_end_list()
|
||||||
break
|
sys.set_carry()
|
||||||
|
return files_found
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lf_end_list()
|
lf_end_list()
|
||||||
}
|
}
|
||||||
|
@(filenames_buffer)=0
|
||||||
|
sys.clear_carry()
|
||||||
return files_found
|
return files_found
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -364,6 +364,7 @@ diskio module, to deal with loading of potentially large files in to banked ram
|
|||||||
Routines to directly load data into video ram are also present (vload and vload_raw).
|
Routines to directly load data into video ram are also present (vload and vload_raw).
|
||||||
Also contains a helper function to calculate the file size of a loaded file (although that is truncated
|
Also contains a helper function to calculate the file size of a loaded file (although that is truncated
|
||||||
to 16 bits, 64Kb)
|
to 16 bits, 64Kb)
|
||||||
|
Als contains routines for operating on subdirectories (chdir, mkdir, rmdir) and to relabel the disk.
|
||||||
|
|
||||||
|
|
||||||
psg (cx16 only)
|
psg (cx16 only)
|
||||||
|
@ -3,7 +3,6 @@ TODO
|
|||||||
|
|
||||||
For next release
|
For next release
|
||||||
^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
- make diskio.list_files not use an internal buffer itself but change names_ptr meaning to user supplied buffer.
|
|
||||||
- ir/vm: allow label in block scope (correct order of block nodes!)
|
- ir/vm: allow label in block scope (correct order of block nodes!)
|
||||||
- regression test the various projects
|
- regression test the various projects
|
||||||
- attempt to fix the expression codegen bug with reused temp vars (github #89)
|
- attempt to fix the expression codegen bug with reused temp vars (github #89)
|
||||||
|
Loading…
Reference in New Issue
Block a user