|
|
1.1 root 1: \ *****************************************************************************
2: \ * Copyright (c) 2004, 2008 IBM Corporation
3: \ * All rights reserved.
4: \ * This program and the accompanying materials
5: \ * are made available under the terms of the BSD License
6: \ * which accompanies this distribution, and is available at
7: \ * http://www.opensource.org/licenses/bsd-license.php
8: \ *
9: \ * Contributors:
10: \ * IBM Corporation - initial implementation
11: \ ****************************************************************************/
12: \
13: \ Copyright 2002,2003,2004 Segher Boessenkool <[email protected]>
14: \
15:
16:
17: \ stuff we should already have:
18:
19: : linked ( var -- ) here over @ , swap ! ;
20:
21: HEX
22:
23: \ \ \
24: \ \ \ Wordlists
25: \ \ \
26:
27: VARIABLE wordlists forth-wordlist wordlists !
28:
29: \ create a new wordlist
30: : wordlist ( -- wid ) here wordlists linked 0 , ;
31:
32:
33: \ \ \
34: \ \ \ Search order
35: \ \ \
36:
37: 10 CONSTANT max-in-search-order \ should define elsewhere
38: \ CREATE search-order max-in-search-order cells allot \ stack of wids \ is in engine now
39: \ search-order VALUE context \ top of stack \ is in engine now
40:
41: : also ( -- ) clean-hash context dup cell+ dup to context >r @ r> ! ;
42: : previous ( -- ) clean-hash context cell- to context ;
43: : only ( -- ) clean-hash search-order to context ( minimal-wordlist search-order ! ) ;
44: : seal ( -- ) clean-hash context @ search-order dup to context ! ;
45:
46: : get-order ( -- wid_n .. wid_1 n )
47: context >r search-order BEGIN dup r@ u<= WHILE
48: dup @ swap cell+ REPEAT r> drop
49: search-order - cell / ;
50: : set-order ( wid_n .. wid_1 n -- ) \ XXX: special cases for 0, -1
51: clean-hash 1- cells search-order + dup to context
52: BEGIN dup search-order u>= WHILE
53: dup >r ! r> cell- REPEAT drop ;
54:
55:
56: \ \ \
57: \ \ \ Compilation wordlist
58: \ \ \
59:
60: : get-current ( -- wid ) current ;
61: : set-current ( wid -- ) to current ;
62:
63: : definitions ( -- ) context @ set-current ;
64:
65:
66: \ \ \
67: \ \ \ Vocabularies
68: \ \ \
69:
70: : VOCABULARY ( C: "name" -- ) ( -- ) CREATE wordlist drop DOES> clean-hash context ! ;
71: \ : VOCABULARY ( C: "name" -- ) ( -- ) wordlist CREATE , DOES> @ context ! ;
72: \ XXX we'd like to swap forth and forth-wordlist around (for .voc 's sake)
73: : FORTH ( -- ) clean-hash forth-wordlist context ! ;
74:
75: : .voc ( wid -- ) \ display name for wid \ needs work ( body> or something like that )
76: dup cell- @ ['] vocabulary ['] forth within IF
77: 2 cells - >name name>string type ELSE u. THEN space ;
78: : vocs ( -- ) \ display all wordlist names
79: cr wordlists BEGIN @ dup WHILE dup .voc REPEAT drop ;
80: : order ( -- )
81: cr ." context: " get-order 0 ?DO .voc LOOP
82: cr ." current: " get-current .voc ;
83:
84:
85:
86:
87: \ some handy helper
88: : voc-find ( wid -- 0 | link )
89: clean-hash cell+ @ (find) clean-hash ;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.