62 lines
939 B
Forth
62 lines
939 B
Forth
|
: slash-count ( addr count -- addr num )
|
||
|
over swap ( addr0 addr count )
|
||
|
begin
|
||
|
over c@ [char] / <>
|
||
|
over 0 > and
|
||
|
while
|
||
|
1 /string
|
||
|
repeat
|
||
|
drop over -
|
||
|
;
|
||
|
|
||
|
\ Change directory
|
||
|
: cd-path
|
||
|
\ Check if count <= 0
|
||
|
dup 0 <=
|
||
|
if
|
||
|
spi_rootdir @
|
||
|
spi_currdir !
|
||
|
2drop exit
|
||
|
then
|
||
|
|
||
|
\ Save current directory on return stack
|
||
|
spi_currdir @ >r
|
||
|
|
||
|
\ Check if absolute path or relative path
|
||
|
over c@ [char] / =
|
||
|
if
|
||
|
spi_rootdir @
|
||
|
spi_currdir !
|
||
|
1 /string
|
||
|
then
|
||
|
|
||
|
\ Loop on directory list
|
||
|
begin
|
||
|
dup 0 >
|
||
|
while
|
||
|
2dup slash-count
|
||
|
dup 0=
|
||
|
if
|
||
|
." Unexpected /" cr
|
||
|
r> spi_currdir !
|
||
|
2drop 2drop exit
|
||
|
then
|
||
|
dup 1+ >r
|
||
|
0 open-file
|
||
|
if
|
||
|
drop
|
||
|
." Could not open file" cr
|
||
|
r> drop
|
||
|
r> spi_currdir !
|
||
|
2drop exit
|
||
|
then
|
||
|
file_sector0 @
|
||
|
spi_currdir !
|
||
|
close-file drop
|
||
|
r> /string
|
||
|
repeat
|
||
|
r> drop 2drop
|
||
|
;
|
||
|
|
||
|
: cd bl word count cd-path ;
|