        AREA	Files, CODE

        GET    Hdr.Macros
        GET    Asm:SWInames.h

        IMPORT  |x$stack_overflow|

        EXPORT file_exists, file_size, file_load

; entry: r0 = pointer to full filename
; exit:  r0 = 1 if file exists, 0 if not
file_exists
        STMFD   sp!,{r4,r5,lr}
        MOV     r1,r0
        MOV     r0,#17
        SWI     XOS_File
        BVS     error
        CMP     r0,#1
        MOVNE   r0,#0
        LDMFD   sp!,{r4,r5,pc}^

; entry: r0 = pointer to filename
; exit:  r0 = file size
file_size
        STMFD   sp!,{r4,r5,lr}
        MOV     r1,r0
        MOV     r0,#17
        SWI     XOS_File
        BVS     error
        MOV     r0,r4
        LDMFD   sp!,{r4,r5,pc}^

; entry: r0 = pointer to full filename
;        r1 = address to load at
; exit:  r0 = 0 for success, or pointer to error block
file_load
        STMFD   sp!,{r4,r5,lr}
        MOV     r2,r1
        MOV     r1,r0
        MOV     r0,#16
        MOV     r3,#0
        SWI     XOS_File
        LDMVSFD sp!,{r4,r5,pc}^         ; return if error
        MOV     r0,#0                   ; success
        LDMFD   sp!,{r4,r5,pc}^

; r0 points to error block (as supplied from X SWI)
error
        MOV     ip,r0
        ADR     r0,error_message
        SWI     OS_Write0
        ADD     r0,ip,#4
        SWI     OS_Write0
        MOVS    pc,lr

error_message
        DCB     10,13,"file error: ",0
        ALIGN

        END
