1
0
mirror of https://github.com/cc65/cc65.git synced 2024-09-27 19:55:09 +00:00

Added a getcwd function

git-svn-id: svn://svn.cc65.org/cc65/trunk@2275 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2003-08-12 13:51:11 +00:00
parent 20e805a124
commit 8bfaa09b77
4 changed files with 85 additions and 3 deletions

View File

@ -57,7 +57,8 @@ C_OBJS = _afailed.o \
vsscanf.o
S_OBJS = _fdesc.o \
S_OBJS = _cwd.o \
_fdesc.o \
_file.o \
_fopen.o \
_heap.o \
@ -86,6 +87,7 @@ S_OBJS = _fdesc.o \
free.o \
fwrite.o \
getcpu.o \
getcwd.o \
isalnum.o \
isalpha.o \
isblank.o \

16
libsrc/common/_cwd.s Normal file
View File

@ -0,0 +1,16 @@
;
; Ullrich von Bassewitz, 2003-08-12
;
; Place to store the current working directory.
;
.export __cwd
.export __cwd_buf_size
__cwd_buf_size = 64
.bss
__cwd: .res __cwd_buf_size

View File

@ -11,6 +11,8 @@
;--------------------------------------------------------------------------
; The function calls __syschdir, which must check the directory, set it, and
; copy it to __cwd if it is valid. The copycwd may be used for the latter.
.proc _chdir
@ -20,5 +22,3 @@
.endproc

64
libsrc/common/getcwd.s Normal file
View File

@ -0,0 +1,64 @@
;
; Ullrich von Bassewitz, 2003-08-12
;
; char* __fastcall__ getcwd (char* buf, size_t size);
;
.export _getcwd
.import popax
.import __cwd
.importzp ptr1, ptr2
.include "errno.inc"
;--------------------------------------------------------------------------
.proc _getcwd
; Remember -size-1 because this simplifies the following loop
eor #$FF
sta ptr2
txa
eor #$FF
sta ptr2+1
jsr popax ; Get buf
sta ptr1
stx ptr1+1 ; Save buf
; Copy __cwd to the given buffer checking the length
ldy #$00
loop: inc ptr2
bne @L1
inc ptr2+1
beq overflow
; Copy one character, end the loop if the zero terminator is reached
@L1: lda __cwd,y
sta (ptr1),y
bne loop
; Current working dir copied ok, A contains zero
tax ; Return zero in a/x
rts
; String overflow, return ERANGE
overflow:
lda #<ERANGE
sta __errno
lda #>ERANGE
sta __errno+1
lda #$FF
tax ; Return -1
rts
.endproc