mirror of
https://github.com/irmen/prog8.git
synced 2024-12-11 19:49:45 +00:00
aa949165c7
Otherwise it eats the status message. Added comment that you have to check this manually to be sure if the call succeeded or not!
94 lines
2.6 KiB
Lua
94 lines
2.6 KiB
Lua
; this program shows the use of the f_seek function to seek to a position in an opened file.
|
|
; (this only works on Commander X16 DOS. on sdcard, not on host filesystem.)
|
|
|
|
%import diskio
|
|
%import textio
|
|
%zeropage basicsafe
|
|
%option no_sysinit
|
|
|
|
main {
|
|
uword megabuffer = memory("megabuffer", 20000, 256)
|
|
|
|
sub start() {
|
|
|
|
txt.print("writing data file (drive 8)...\n")
|
|
uword total=0
|
|
if diskio.f_open_w("@:seektestfile.bin") {
|
|
repeat 100 {
|
|
str text = "hello world.*"
|
|
void diskio.f_write(text, string.length(text))
|
|
total += string.length(text)
|
|
}
|
|
diskio.f_close_w()
|
|
txt.print("written size=")
|
|
txt.print_uw(total)
|
|
txt.nl()
|
|
} else {
|
|
txt.print("error: ")
|
|
txt.print(diskio.status())
|
|
sys.exit(1)
|
|
}
|
|
|
|
read_last_bytes()
|
|
|
|
txt.print("\nseeking to 1292 and writing a few bytes...\n")
|
|
if diskio.f_open_w_seek("seektestfile.bin") {
|
|
diskio.f_seek_w(0, 1292)
|
|
void diskio.f_write("123", 3)
|
|
diskio.f_close_w()
|
|
} else {
|
|
txt.print("error: ")
|
|
txt.print(diskio.status())
|
|
sys.exit(1)
|
|
}
|
|
|
|
read_last_bytes()
|
|
}
|
|
|
|
sub read_last_bytes() {
|
|
; read the last 10 bytes of the 1300 bytes file
|
|
uword total = 0
|
|
uword size
|
|
txt.print("\nreading...\n")
|
|
if diskio.f_open("seektestfile.bin") {
|
|
size = diskio.f_read_all(megabuffer)
|
|
diskio.f_close()
|
|
txt.print("size read:")
|
|
txt.print_uw(size)
|
|
txt.nl()
|
|
} else {
|
|
txt.print("error!\n")
|
|
sys.exit(1)
|
|
}
|
|
|
|
txt.print("\nseeking to 1290 and reading...\n")
|
|
if diskio.f_open("seektestfile.bin") {
|
|
diskio.f_seek(0, 1290)
|
|
uword ptr = megabuffer
|
|
do {
|
|
size = diskio.f_read(ptr, 255)
|
|
total += size
|
|
ptr += size
|
|
} until size==0
|
|
diskio.f_close()
|
|
txt.print("size read=")
|
|
txt.print_uw(total)
|
|
txt.nl()
|
|
megabuffer[lsb(total)] = 0
|
|
txt.print("buffer read=")
|
|
ubyte idx
|
|
for idx in 0 to lsb(total-1) {
|
|
txt.print_ubhex(megabuffer[idx], false)
|
|
txt.spc()
|
|
}
|
|
txt.print("\nas text: \"")
|
|
txt.print(megabuffer)
|
|
txt.print("\"\n")
|
|
} else {
|
|
txt.print("error: ")
|
|
txt.print(diskio.status())
|
|
sys.exit(1)
|
|
}
|
|
}
|
|
}
|