; > utilasm.s

;  SJ Middleton, 1993

; filing system SWI wrappers


                GET     asm:ListOpts
                GET     asm:Macros
                GET     asm:System

                GET     asm:CRegs
                GET     asm:NewProc

                GET     asm:file

                MACRO
$l              Declare $reglist
                EXPORT  $l
                AREA    area_$l,CODE,READONLY
$l              Entry   "$reglist"
                MEND


; extern os_error *file_open(file_opt opts, const char *filename, filehandle *handle);

file_open       Declare
                MOV     ip, a3
                SWI     XOS_Find
                STRVC   a1, [ip]
                MOVVC   a1, #0
                EXITS


; extern os_error *file_close(filehandle handle);

file_close      Declare
                MOV     a2, a1
                MOV     a1, #0
                SWI     XOS_Find
                MOVVC   a1, #0
                EXITS

; extern os_error *file_readfrom(filehandle f, void *data, size_t nbytes, unsigned int fileptr);

file_readfrom   Declare "v1"
                MOV     v1, a4
                MOV     a4, a3
                MOV     a3, a2
                MOV     a2, a1
                MOV     a1, #OSGBPB_ReadFromGiven
                SWI     XOS_GBPB
                MOVVC   a1, #0
                EXITS

; extern os_error *file_bget(filehandle f, int *byte_read);

file_bget       Declare
                MOV     ip, a2
                MOV     a2, a1
                SWI     XOS_BGet
                EXITS   VS

                MOVCS   a1, #-1
                STR     a1, [ip]
                MOV     a1, #0
                EXITS

; extern os_error *file_getpos(filehandle f, int *pos)

file_getpos     Declare
                MOV     ip, a2
                MOV     a2, a1
                MOV     a1, #OSArgs_ReadPTR
                SWI     XOS_Args
                STRVC   a3, [ip]
                MOVVC   a1, #0
                EXITS

; extern os_error *file_setpos(filehandle f, int pos)

file_setpos     Declare
                MOV     a3, a2
                MOV     a2, a1
                MOV     a1, #OSArgs_SetPTR
                SWI     XOS_Args
                MOVVC   a1, #0
                EXITS

; extern os_error *file_load(const char *filename, void *addr);

file_load       Declare "v1-v2"
                MOV     a4, #load_at_given
                MOV     a3, a2
                MOV     a2, a1
                MOV     a1, #OSFile_LoadNoPath
                SWI     XOS_File
                MOVVC   a1, #0
                EXITS


                END

eof fileasm.s
