-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnewinclude.f
119 lines (105 loc) · 2.36 KB
/
newinclude.f
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
: IsAnySlash ( c -- f )
\ f=TRUE, ¥á«¨ c ï¥âáï á«í襬 (¥¢ ¦® ª ª¨¬)
DUP [CHAR] \ = IF
DROP TRUE
ELSE
[CHAR] / =
THEN
;
: SelectPath ( addr -- addr1 u )
\ ¢¥àãâì ¯ãâì (¢¬¥á⥠ᮠá«í襬) ¨§ ¯®«®£® ¨¬¥¨ ä ©«
\ addr - null-terminated ¯®«®¥ ¨¬ï
DUP >R
BEGIN
DUP C@
WHILE
1+
REPEAT
R@ OVER = IF
RDROP 0
ELSE
BEGIN
DUP C@ IsAnySlash 0=
OVER R@ = 0= AND
WHILE
1-
REPEAT
R> SWAP OVER -
2DUP + C@ IsAnySlash IF 1+ THEN
THEN
;
: SAVE-CURFILE ( addr u -- lastaddr )
\ § ¯¨á âì addr u ¢ CURFILE, ¨ ¢¥àãâì ¥£® áâ ஥ § 票¥
CURFILE @ ROT ROT
HEAP-COPY CURFILE !
;
: RESTORE-CURFILE ( lastaddr -- )
\ ¢®ááâ ®¢¨âì CURRFILE
CURFILE @ FREE THROW
CURFILE !
;
: INCLUDED-CURRPATH ( i*x addr u -- ior j*x )
\ addr u - ¯®«ë© ¯ãâì ¨«¨ ®â®á¨â¥«ì® ⥪ã饩 ¤¨à¥ªâ®à¨¨.
2DUP
SAVE-CURFILE >R
INCLUDE-PROBE
R> RESTORE-CURFILE
;
: MOVE-TO ( addr-src size addr-dst -- )
\ ¯à®áâ® ç á⮢áâà¥ç îé ïáï ®¯¥à æ¨ï
SWAP MOVE
;
: CONCAT-TO ( addr1 u1 addr2 u2 addr -- )
\ ᮥ¤¨¨âì áâப¨ addr1-u1 ¨ addr2-u2, § ¯¨á âì १ã«ìâ â ¢ addr
>R
2SWAP ( addr2 u2 addr1 u1 )
SWAP OVER ( addr2 u2 u1 addr1 u1 )
R@ MOVE-TO ( addr2 u2 u1 )
R> + MOVE-TO
;
: CONCAT ( addr1 u1 addr2 u2 -- addr u )
\ ᮥ¤¨¨âì áâப¨ addr1-u1 ¨ addr2-u2, ¢¥àãâì ¤¨ ¬¨ç¥áª¨
\ ¢ë¤¥«¥ãî ®¡« áâì ¯ ¬ï⨠á १ã«ìâ ⮬. à §ã«ìâ â -
\ null-terminaated
2OVER NIP OVER + DUP >R 1+
ALLOCATE THROW DUP >R
CONCAT-TO
R> R> 2DUP + 0 SWAP C!
;
: INCLUDED-LASTPATH ( i*x addr u -- ior j*x )
\ addr u - ¯ãâì ª ä ©«ã ®â®á¨â¥«ì® ¯ã⨠ª ⥪ã饬㠨â¥à¯à¥â¨à㥬®¬ã ä ©«ã
CURFILE @ ?DUP IF
SelectPath
2SWAP CONCAT
OVER >R
INCLUDED-CURRPATH
R> FREE THROW
ELSE
2DROP
3
THEN
;
: INCLUDED-SPF ( i*x addr u -- ior j*x )
\ addr u - ¯ãâì ª ä ©«ã ®â®á¨â¥«ì® ¨â¥à¯à¥â¨àãî饣® ¥£® ¥å¥è¨ª
+ModuleDirName INCLUDED-CURRPATH
;
: INCLUDED ( i*x addr u -- j*x )
2DUP INCLUDED-LASTPATH IF
2DUP INCLUDED-SPF IF
INCLUDED-CURRPATH THROW
ELSE
2DROP
THEN
ELSE
2DROP
THEN
;
S" ~ac/lib/require.f" INCLUDED
REQUIRE COMMENT> ~micro/lib/comment.f
COMMENT>
„®¡ ¢«¥¨¥ ¯ã⥩ ¯®¨áª ¢ INCLUDED ¨ REQUIRE
…᫨ ¢ ä ©«¥ \prj1\main.f ¨â¥à¯à¥â¨àã¥âáï INCLUDED, â® ¯ã⨠¯®¨áª :
1. prj1\ (SPF3.75 ¯® â ª®¬ã ¯ã⨠¥ ¨é¥â)
2. spf\ (®â exe訪 , ¥á«¨ â®ç¥¥)
3. ’¥ªã騩
REQUIRE ª®¬¯¨«¨àã¥âáï § ®¢® ¨§ ~ac/lib/require.f