From: cuz Date: Tue, 12 Aug 2003 13:51:11 +0000 (+0000) Subject: Added a getcwd function X-Git-Tag: V2.12.0~1451 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8bfaa09b77aee1b2c7ede4eff3da299432bd71fa;p=cc65 Added a getcwd function git-svn-id: svn://svn.cc65.org/cc65/trunk@2275 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index de9459c4f..bd373b158 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -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 \ diff --git a/libsrc/common/_cwd.s b/libsrc/common/_cwd.s new file mode 100644 index 000000000..c393aa863 --- /dev/null +++ b/libsrc/common/_cwd.s @@ -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 + + diff --git a/libsrc/common/chdir.s b/libsrc/common/chdir.s index 4a17d4910..0d2c6952a 100644 --- a/libsrc/common/chdir.s +++ b/libsrc/common/chdir.s @@ -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 - - diff --git a/libsrc/common/getcwd.s b/libsrc/common/getcwd.s new file mode 100644 index 000000000..824f4d5c0 --- /dev/null +++ b/libsrc/common/getcwd.s @@ -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+1 + lda #$FF + tax ; Return -1 + rts + +.endproc + +