;
; Ullrich von Bassewitz, 17.05.2000
;
; int __fastcall__ _osmaperrno (unsigned char oserror);
; /* Map a system specific error into a system independent code */
;

        .include        "errno.inc"

.code

__osmaperrno:
        ldx     #ErrTabSize
@L1:    cmp     ErrTab-2,x      ; Search for the error code
        beq     @L2             ; Jump if found
        dex
        dex
        bne     @L1             ; Next entry

; Code not found, return EUNKNOWN

        lda     #<EUNKNOWN
        ldx     #>EUNKNOWN
        rts

; Found the code

@L2:    lda     ErrTab-1,x
        ldx     #$00            ; High byte always zero
        rts

.rodata

ErrTab:
        .byte   1, EMFILE       ; Too many open files
        .byte   2, EINVAL       ; File is open
        .byte   3, EINVAL       ; File not open
        .byte   4, ENOENT       ; File not found
        .byte   5, ENODEV       ; Device not present
        .byte   6, EINVAL       ; File not input
        .byte   7, EINVAL       ; File not output
        .byte   8, EINVAL       ; Filename missing
        .byte   9, ENODEV       ; Ilegal device
;       .byte  20,              ; Read error
;       .byte  21,              ; Read error
;       .byte  22,              ; Read error
;       .byte  23,              ; Read error
;       .byte  24,              ; Read error
;       .byte  25,              ; Write error
        .byte  26, EACCES       ; Write protect on
;       .byte  27,              ; Read error
;       .byte  28,              ; Write error
;       .byte  29,              ; Disk ID mismatch
;       .byte  30,              ; Syntax error
;       .byte  31,              ; Syntax error
;       .byte  32,              ; Syntax error
        .byte  33, EINVAL       ; Syntax error (invalid file name)
        .byte  34, EINVAL       ; Syntax error (no file given)
;       .byte  39,              ; Syntax error
;       .byte  50,              ; Record not present
;       .byte  51,              ; Overflow in record
;       .byte  52,              ; File too large
        .byte  60, EINVAL       ; Write file open
        .byte  61, EINVAL       ; File not open
        .byte  62, ENOENT       ; File not found
        .byte  63, EEXIST       ; File exists
        .byte  64, EINVAL       ; File type mismatch
;       .byte  65,              ; No block
;       .byte  66,              ; Illegal track or sector
;       .byte  67,              ; Illegal system track or sector
        .byte  70, EBUSY        ; No channel
;       .byte  71,              ; Directory error
;       .byte  72,              ; Disk full
;       .byte  73,              ; DOS version mismatch
        .byte  74, ENODEV       ; Drive not ready

ErrTabSize = (* - ErrTab)
