/
script.4th
38 lines (26 loc) · 992 Bytes
/
script.4th
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
\ Copyright 2023 Christopher Leonard - MIT Licence
: CREATE-FILE! CREATE-FILE ABORT" failed to open file" ;
: FILE-SIZE! FILE-SIZE ABORT" failed to get file size" ;
: SET-POSITION! REPOSITION-FILE ABORT" failed to reposition file" ;
: WRITE-LINE! WRITE-LINE ABORT" failed to write line to file" ;
: CLOSE-FILE! CLOSE-FILE ABORT" failed to write file" ;
: FAST-FORWARD! ( file) DUP FILE-SIZE! ROT SET-POSITION! ;
: OPEN-OR-CREATE! ( a u - file)
2DUP W/O OPEN-FILE IF
DROP W/O CREATE-FILE!
ELSE
NIP NIP
THEN ;
: APPEND-FILE! ( a u - file) OPEN-OR-CREATE! DUP FAST-FORWARD! ;
: REST-OF-LINE SOURCE >IN @ /STRING ;
: SCRIPT
PARSE-NAME APPEND-FILE!
DUP REST-OF-LINE ROT WRITE-LINE!
CLOSE-FILE! ; IMMEDIATE
0 VALUE SCRIPT-FILE
: SCRIPT((
PARSE-NAME APPEND-FILE! TO SCRIPT-FILE
BEGIN CR REFILL WHILE SOURCE S" ))" COMPARE WHILE
SOURCE SCRIPT-FILE WRITE-LINE! SOURCE EVALUATE ." ok"
REPEAT THEN CR REFILL DROP
SCRIPT-FILE CLOSE-FILE! ; IMMEDIATE