APPEND uses byte level access, because 512 bytes block handling feels little silly. It return error code if file not exist or start position is outside file.
fileinfo: ; fileinfo for function 58
.mode dd 3 ; 3=append file
.start_block dd -1 ; StartPos in bytes 0..File Size (-1 = EOF)
.blocks dd 0x0 ; bytes to write (0 = truncate file at StartPos)
.address dd buffer ; source data pointer
.workarea dd 0x10000 ; work area for os
dirnamez: times 128 db 0
fileinfo.mode = 3 ; append file (return: ebx = bytes written)
fileinfo.mode = 12 ; get_filesize (return: ebx = file/dir size in bytes)
fileinfo.mode = 13 ; get_fileattr (return: ebx = file/dir attribute)
fileinfo.mode = 14 ; get_filedate (return: ebx = file/dir date/time)