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
+
+\ 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! ( )
+;
+
+: MULTI-LINE-COMMENT ( "comment<rparen>" -- )
+ BEGIN
+ >in @ ')' parse ( >in c-addr len )
+ nip + >in @ = ( delimiter-not-found? )
+ WHILE ( )
+ refill 0= IF EXIT THEN ( )
+ REPEAT
+
+;
+
}private
\ This treats \n, \r\n, and \r as line terminator. Reading is done
THEN
;
+: 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.
+ a1 u1 here place-cstr
+ here u1 1+ chars + to new
+ a2 u2 new place-cstr
+ here new (rename-file) 0=
+ IF 0
+ ELSE throw_rename_file
+ THEN
+;
+
+: ( ( "comment<rparen>" -- )
+ source-id
+ CASE
+ -1 OF postpone ( ENDOF
+ 0 OF postpone ( ENDOF
+ multi-line-comment
+ ENDCASE
+; immediate
+
privatize