Merge pull request #75 from SeekingMeaning/0BSD
[debian/pforth] / fth / private.fth
1 \ @(#) private.fth 98/01/26 1.2
2 \ PRIVATIZE
3 \
4 \ Privatize words that are only needed within the file
5 \ and do not need to be exported.
6 \
7 \ Usage:
8 \    PRIVATE{
9 \    : FOO ;  \ Everything between PRIVATE{ and }PRIVATE will become private.
10 \    : MOO ;
11 \    }PRIVATE
12 \    : GOO   foo moo ;  \ can use foo and moo
13 \    PRIVATIZE          \ smudge foo and moo
14 \    ' foo              \ will fail
15 \
16 \ Copyright 1996 Phil Burk
17 \
18 \ 19970701 PLB Use unsigned compares for machines with "negative" addresses.
19
20 anew task-private.fth
21
22 variable private-start
23 variable private-stop
24 $ 20 constant FLAG_SMUDGE
25
26 : PRIVATE{
27     private-start @ 0= not abort" ERROR: Missing PRIVATIZE"
28     private-stop @ 0= not abort" ERROR: Missing PRIVATIZE"
29     latest private-start !
30     0 private-stop !
31 ;
32
33 : }PRIVATE
34     private-stop @ 0= not abort" ERROR: Extra }PRIVATE"
35     latest private-stop !
36 ;
37
38 : PRIVATIZE  ( -- , smudge all words between PRIVATE{ and }PRIVATE )
39     private-start @ 0= abort" ERROR: Missing PRIVATE{"
40     private-stop @ 0= abort" ERROR: Missing }PRIVATE"
41     private-stop @
42     BEGIN
43         dup private-start @ u>    \ 19970701
44     WHILE
45 \       ." Smudge " dup id. cr
46         dup c@ flag_smudge or over c!
47         prevname
48     REPEAT
49     drop
50     0 private-start !
51     0 private-stop !
52 ;