⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vocabulary.fs

📁 open source bios with linux platform, very good and can be reused.
💻 FS
字号:
\ tag: vocabulary implementation for openbios\ \ Copyright (C) 2003 Stefan Reinauer\ \ See the file "COPYING" for further information about\ the copyright and warranty status of this work.\ \ \ this is an implementation of DPANS94 wordlists (SEARCH EXT)\ 16 constant #vocscreate vocabularies #vocs cells allot \ word lists['] vocabularies to context: search-wordlist ( c-addr u wid -- 0 | xt 1 | xt -1 )  \ Find the definition identified by the string c-addr u in the word   \ list identified by wid. If the definition is not found, return zero.   \ If the definition is found, return its execution token xt and  \ one (1) if the definition is immediate, minus-one (-1) otherwise.  find-wordlist  if    true over immediate? if      negate    then  else    2drop false  then  ;: wordlist ( -- wid )  \ Creates a new empty word list, returning its word list identifier   \ wid. The new word list may be returned from a pool of preallocated   \ word lists or may be dynamically allocated in data space. A system   \ shall allow the creation of at least 8 new word lists in addition   \ to any provided as part of the system.  here 0 ,  ;: get-order ( -- wid1 .. widn n )  #order @ 0 ?do    #order @ i - 1- cells context + @  loop  #order @  ;: set-order ( wid1 .. widn n -- )  dup -1 = if    drop forth-last 1 \ push system default word list and number of lists  then  dup #order !  0 ?do     i cells context + !   loop  ;: order ( -- )  \ display word lists in the search order in their search order sequence  \ from the first searched to last searched. Also display word list into  \ which new definitions will be placed.   cr  get-order 0 ?do    ." wordlist " i (.) type 2e emit space . cr  loop  cr ." definitions: " current @ . cr  ;   : previous ( -- )  \ Transform the search order consisting of widn, ... wid2, wid1 (where   \ wid1 is searched first) into widn, ... wid2. An ambiguous condition   \ exists if the search order was empty before PREVIOUS was executed.  get-order nip 1- set-order   ;   : do-vocabulary ( -- )	\ implementation factor  does>     @ >r		(  ) ( R: widnew )    get-order swap drop	( wid1 ... widn-1 n )    r> swap set-order  ;: discard ( x1 .. xu u - ) \ implementation factor  0 ?do     drop   loop  ;: vocabulary ( >name -- )  wordlist create , do-vocabulary  ;: also  ( -- )  get-order over swap 1+ set-order  ;: only  ( -- )   -1 set-order also  ; only\ create forth forth-wordlist , do-vocabularycreate forth get-order over , discard do-vocabulary: findw  ( c-addr -- c-addr 0 | w 1 | w -1 )  0			( c-addr 0 )  #order @ 0 ?do    over count 		( c-addr 0 c-addr' u       )    i cells context + @ ( c-addr 0 c-addr' u wid   )    search-wordlist	( c-addr 0; 0 | w 1 | w -1 )    ?dup if		( c-addr 0; w 1 | w -1     )      2swap 2drop leave ( w 1 | w -1 )    then                ( c-addr 0   )  loop			( c-addr 0 | w 1 | w -1    )  ;: get-current ( -- wid )  current @  ;: set-current ( wid -- )  current !  ;: definitions ( -- )  \ Make the compilation word list the same as the first word list in   \ the search order. Specifies that the names of subsequent definitions   \ will be placed in the compilation word list.  \ Subsequent changes in the search order will not affect the   \ compilation word list.  context @ set-current  ;  : forth-wordlist ( -- wid )  forth-last  ;: #words ( -- )  0 last  begin     @ ?dup   while    swap 1+ swap  repeat    cr  ; true to vocabularies?

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -