Added _stroserror
git-svn-id: svn://svn.cc65.org/cc65/trunk@1365 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
baece405e5
commit
fcd582e3cb
4 changed files with 148 additions and 0 deletions
|
@ -47,6 +47,7 @@ S_OBJS = c_acptr.o \
|
||||||
gotox.o \
|
gotox.o \
|
||||||
gotoxy.o \
|
gotoxy.o \
|
||||||
gotoy.o \
|
gotoy.o \
|
||||||
|
oserrlist.o \
|
||||||
oserror.o \
|
oserror.o \
|
||||||
revers.o \
|
revers.o \
|
||||||
where.o
|
where.o
|
||||||
|
|
85
libsrc/cbm/oserrlist.s
Normal file
85
libsrc/cbm/oserrlist.s
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 18.07.2002
|
||||||
|
;
|
||||||
|
; Defines the platform specific error list.
|
||||||
|
;
|
||||||
|
; The table is built as a list of entries
|
||||||
|
;
|
||||||
|
; .byte entrylen
|
||||||
|
; .byte errorcode
|
||||||
|
; .asciiz errormsg
|
||||||
|
;
|
||||||
|
; and terminated by an entry with length zero that is returned if the
|
||||||
|
; error code could not be found.
|
||||||
|
;
|
||||||
|
|
||||||
|
.export __sys_oserrlist
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------
|
||||||
|
; Macros used to generate the list (may get moved to an include file?)
|
||||||
|
|
||||||
|
; Regular entry
|
||||||
|
.macro sys_oserr_entry code, msg
|
||||||
|
.local Start, End
|
||||||
|
Start: .byte End - Start
|
||||||
|
.byte code
|
||||||
|
.asciiz msg
|
||||||
|
End:
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
; Sentinel entry
|
||||||
|
.macro sys_oserr_sentinel msg
|
||||||
|
.byte 0 ; Length is always zero
|
||||||
|
.byte 0 ; Code is unused
|
||||||
|
.asciiz msg
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------------
|
||||||
|
; The error message table
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
|
||||||
|
__sys_oserrlist:
|
||||||
|
sys_oserr_entry 1, "Too many open files"
|
||||||
|
sys_oserr_entry 2, "File is open"
|
||||||
|
sys_oserr_entry 3, "File not open"
|
||||||
|
sys_oserr_entry 4, "File not found"
|
||||||
|
sys_oserr_entry 5, "Device not present"
|
||||||
|
sys_oserr_entry 6, "File not input"
|
||||||
|
sys_oserr_entry 7, "File not output"
|
||||||
|
sys_oserr_entry 8, "Filename missing"
|
||||||
|
sys_oserr_entry 9, "Ilegal device"
|
||||||
|
sys_oserr_entry 20, "Read error"
|
||||||
|
sys_oserr_entry 21, "Read error"
|
||||||
|
sys_oserr_entry 22, "Read error"
|
||||||
|
sys_oserr_entry 23, "Read error"
|
||||||
|
sys_oserr_entry 24, "Read error"
|
||||||
|
sys_oserr_entry 25, "Write error"
|
||||||
|
sys_oserr_entry 26, "Write protect on"
|
||||||
|
sys_oserr_entry 27, "Read error"
|
||||||
|
sys_oserr_entry 28, "Write error"
|
||||||
|
sys_oserr_entry 29, "Disk ID mismatch"
|
||||||
|
sys_oserr_entry 30, "Syntax error"
|
||||||
|
sys_oserr_entry 31, "Syntax error"
|
||||||
|
sys_oserr_entry 32, "Syntax error"
|
||||||
|
sys_oserr_entry 33, "Syntax error (invalid file name)"
|
||||||
|
sys_oserr_entry 34, "Syntax error (no file given)"
|
||||||
|
sys_oserr_entry 39, "Syntax error"
|
||||||
|
sys_oserr_entry 50, "Record not present"
|
||||||
|
sys_oserr_entry 51, "Overflow in record"
|
||||||
|
sys_oserr_entry 52, "File too large"
|
||||||
|
sys_oserr_entry 60, "Write file open"
|
||||||
|
sys_oserr_entry 61, "File not open"
|
||||||
|
sys_oserr_entry 62, "File not found"
|
||||||
|
sys_oserr_entry 63, "File exists"
|
||||||
|
sys_oserr_entry 64, "File type mismatch"
|
||||||
|
sys_oserr_entry 65, "No block"
|
||||||
|
sys_oserr_entry 66, "Illegal track or sector"
|
||||||
|
sys_oserr_entry 67, "Illegal system track or sector"
|
||||||
|
sys_oserr_entry 70, "No channel"
|
||||||
|
sys_oserr_entry 71, "Directory error"
|
||||||
|
sys_oserr_entry 72, "Disk full"
|
||||||
|
sys_oserr_entry 73, "DOS version mismatch"
|
||||||
|
sys_oserr_sentinel "Unknown error"
|
||||||
|
|
||||||
|
|
|
@ -108,6 +108,7 @@ S_OBJS = _fdesc.o \
|
||||||
strncat.o \
|
strncat.o \
|
||||||
strncmp.o \
|
strncmp.o \
|
||||||
strncpy.o \
|
strncpy.o \
|
||||||
|
stroserr.o \
|
||||||
strpbrk.o \
|
strpbrk.o \
|
||||||
strrchr.o \
|
strrchr.o \
|
||||||
strspn.o \
|
strspn.o \
|
||||||
|
|
61
libsrc/common/stroserr.s
Normal file
61
libsrc/common/stroserr.s
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 17.07.2002
|
||||||
|
;
|
||||||
|
; const char* __fastcall__ _stroserror (unsigned char errcode);
|
||||||
|
; /* Map an operating system error number to an error message. */
|
||||||
|
;
|
||||||
|
|
||||||
|
.export __stroserror
|
||||||
|
.import __sys_oserrlist
|
||||||
|
.importzp ptr1, tmp1
|
||||||
|
|
||||||
|
.macpack generic
|
||||||
|
|
||||||
|
|
||||||
|
; The table is built as a list of entries
|
||||||
|
;
|
||||||
|
; .byte entrylen
|
||||||
|
; .byte errorcode
|
||||||
|
; .asciiz errormsg
|
||||||
|
;
|
||||||
|
; and terminated by an entry with length zero that is returned if the
|
||||||
|
; error code could not be found.
|
||||||
|
|
||||||
|
__stroserror:
|
||||||
|
sta tmp1 ; Save the error code
|
||||||
|
|
||||||
|
ldy #<__sys_oserrlist
|
||||||
|
sty ptr1
|
||||||
|
ldy #>__sys_oserrlist
|
||||||
|
sty ptr1+1 ; Setup pointer to message table
|
||||||
|
|
||||||
|
@L1: ldy #0
|
||||||
|
lda (ptr1),y ; Get the length
|
||||||
|
beq Done ; Bail out if end of list reached
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda (ptr1),y ; Compare the error code
|
||||||
|
cmp tmp1
|
||||||
|
beq Done ; Jump if found
|
||||||
|
|
||||||
|
; Not found, move pointer to next entry
|
||||||
|
|
||||||
|
dey
|
||||||
|
clc
|
||||||
|
lda ptr1
|
||||||
|
adc (ptr1),y
|
||||||
|
sta ptr1
|
||||||
|
bcc @L1
|
||||||
|
inc ptr1+1
|
||||||
|
bcs @L1 ; Branch always
|
||||||
|
|
||||||
|
; We've found the code or reached the end of the list
|
||||||
|
|
||||||
|
Done: ldx ptr1+1
|
||||||
|
lda ptr1
|
||||||
|
add #2 ; Add a total of #2
|
||||||
|
bcc @L1
|
||||||
|
inx ; Bump high byte
|
||||||
|
@L1: rts
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue