VARIABLE wd 256 ALLOT

: setwd ( uaddr)
	COUNT 1+ SWAP 1- SWAP wd SWAP CMOVE ;

: _wd
	$" /rd/1/" setwd ; _wd

: "/ [CHAR] / ;

: strcat ( uaddr1 uaddr2 -- uaddr1+uaddr2)
	>R DUP COUNT ( ua1 a1 c1)
	>R R@ ( ua1 a1 c1)
	+ OVER R> R@ SWAP >R ( ua1 ea1 ua1 ua1)
	C@ R> + ( ua1 ea1 ua1 u+u2 )
	SWAP C! ( ua1 ea1 )
	R> COUNT ( ua1 ea1 a2 c2)
	>R
	SWAP R> CMOVE ;

: add/ ( uaddr -- uaddr/)
	DUP DUP COUNT SWAP DROP + C@ "/ = IF ELSE $" /" strcat THEN	;

: cut/ ( uaddr -- uaddr w/o slash)
	COUNT OVER SWAP + 1- ( ua1 lasta1)
	DUP C@ "/ = IF 1- THEN .S
	BEGIN 2DUP < WHILE 4 . DUP C@ "/ = IF OVER - OVER 1- C! 1- LEAVE ELSE 1- THEN
	REPEAT ;

: t $" cat" $" dog" strcat COUNT TYPE ;

: makepath ( path normalizer: uaddr1 uaddr2 -- uaddr )
	DUP 1+ C@ [CHAR] / = IF SWAP DROP ELSE DUP strcat THEN
	add/ ;


: pwd ( print working directory:  -- )
	CR wd COUNT TYPE ;

: cd ( change directory)
	wd BL WORD makepath setwd ;