Improvements from review
authorHelmut Eller <eller.helmut@gmail.com>
Mon, 2 Jan 2017 20:44:41 +0000 (21:44 +0100)
committerHelmut Eller <eller.helmut@gmail.com>
Mon, 2 Jan 2017 20:44:41 +0000 (21:44 +0100)
* csrc/pf_io.c (sdRenameFile): Return cell_t as per prototype.

* fth/file.fth (THROW_RENAME_FILE): Add link to standard throw codes.
(PLACE-CSTR): New factor.
(RENAME-FILE): Use it.

csrc/pf_io.c
fth/file.fth

index 643178b..819dc9f 100644 (file)
@@ -222,7 +222,7 @@ FileStream *sdDeleteFile( const char *FileName )
     return NULL;
 }
 
     return NULL;
 }
 
-int sdRenameFile( const char *OldName, const char *NewName )
+cell_t sdRenameFile( const char *OldName, const char *NewName )
 {
     UNIMPLEMENTED("sdRenameFile");
     TOUCH(OldName);
 {
     UNIMPLEMENTED("sdRenameFile");
     TOUCH(OldName);
index 5393392..b71edc5 100644 (file)
@@ -50,8 +50,17 @@ private{
 create (LINE-TERMINATOR) \n c,
 : LINE-TERMINATOR ( -- c-addr u ) (line-terminator) 1 ;
 
 create (LINE-TERMINATOR) \n c,
 : LINE-TERMINATOR ( -- c-addr u ) (line-terminator) 1 ;
 
+\ Standard throw code
+\ See: http://lars.nocrew.org/forth2012/exception.html#table:throw
 -72 constant THROW_RENAME_FILE
 
 -72 constant THROW_RENAME_FILE
 
+\ Copy the string C-ADDR/U1 to C-ADDR2 and append a NUL.
+: PLACE-CSTR  ( c-addr1 u1 c-addr2 -- )
+    2dup 2>r          ( c-addr1 u1 c-addr2 )  ( r: u1 c-addr2 )
+    swap cmove        ( ) ( r: u1 c-addr2 )
+    0 2r> + c!        ( )
+;
+
 }private
 
 \ This treats \n, \r\n, and \r as line terminator.  Reading is done
 }private
 
 \ This treats \n, \r\n, and \r as line terminator.  Reading is done
@@ -89,13 +98,10 @@ create (LINE-TERMINATOR) \n c,
 
 : RENAME-FILE ( c-addr1 u1 c-addr2 u2 -- ior )
     { a1 u1 a2 u2 | new }
 
 : RENAME-FILE ( c-addr1 u1 c-addr2 u2 -- ior )
     { a1 u1 a2 u2 | new }
-    \ Convert the file-names to C-strings by copying them after HERE
-    \ with trailing zeros added.
-    a1 here u1 move
-    0 here u1 chars + c!
+    \ Convert the file-names to C-strings by copying them after HERE.
+    a1 u1 here place-cstr
     here u1 1+ chars + to new
     here u1 1+ chars + to new
-    a2 new u2 move
-    0 new u2 chars + c!
+    a2 u2 new place-cstr
     here new (rename-file) 0=
     IF 0
     ELSE throw_rename_file
     here new (rename-file) 0=
     IF 0
     ELSE throw_rename_file