\ ***************************************************************************** \ * Copyright (c) 2004, 2008 IBM Corporation \ * All rights reserved. \ * This program and the accompanying materials \ * are made available under the terms of the BSD License \ * which accompanies this distribution, and is available at \ * http://www.opensource.org/licenses/bsd-license.php \ * \ * Contributors: \ * IBM Corporation - initial implementation \ ****************************************************************************/ \ \ Copyright 2002,2003,2004 Segher Boessenkool \ \ stuff we should already have: : linked ( var -- ) here over @ , swap ! ; HEX \ \ \ \ \ \ Wordlists \ \ \ VARIABLE wordlists forth-wordlist wordlists ! \ create a new wordlist : wordlist ( -- wid ) here wordlists linked 0 , ; \ \ \ \ \ \ Search order \ \ \ 10 CONSTANT max-in-search-order \ should define elsewhere \ CREATE search-order max-in-search-order cells allot \ stack of wids \ is in engine now \ search-order VALUE context \ top of stack \ is in engine now : also ( -- ) clean-hash context dup cell+ dup to context >r @ r> ! ; : previous ( -- ) clean-hash context cell- to context ; : only ( -- ) clean-hash search-order to context ( minimal-wordlist search-order ! ) ; : seal ( -- ) clean-hash context @ search-order dup to context ! ; : get-order ( -- wid_n .. wid_1 n ) context >r search-order BEGIN dup r@ u<= WHILE dup @ swap cell+ REPEAT r> drop search-order - cell / ; : set-order ( wid_n .. wid_1 n -- ) \ XXX: special cases for 0, -1 clean-hash 1- cells search-order + dup to context BEGIN dup search-order u>= WHILE dup >r ! r> cell- REPEAT drop ; \ \ \ \ \ \ Compilation wordlist \ \ \ : get-current ( -- wid ) current ; : set-current ( wid -- ) to current ; : definitions ( -- ) context @ set-current ; \ \ \ \ \ \ Vocabularies \ \ \ : VOCABULARY ( C: "name" -- ) ( -- ) CREATE wordlist drop DOES> clean-hash context ! ; \ : VOCABULARY ( C: "name" -- ) ( -- ) wordlist CREATE , DOES> @ context ! ; \ XXX we'd like to swap forth and forth-wordlist around (for .voc 's sake) : FORTH ( -- ) clean-hash forth-wordlist context ! ; : .voc ( wid -- ) \ display name for wid \ needs work ( body> or something like that ) dup cell- @ ['] vocabulary ['] forth within IF 2 cells - >name name>string type ELSE u. THEN space ; : vocs ( -- ) \ display all wordlist names cr wordlists BEGIN @ dup WHILE dup .voc REPEAT drop ; : order ( -- ) cr ." context: " get-order 0 ?DO .voc LOOP cr ." current: " get-current .voc ; \ some handy helper : voc-find ( wid -- 0 | link ) clean-hash cell+ @ (find) clean-hash ;