286N/AS" FICL_WANT_OOP" ENVIRONMENT? drop [if]
286N/A\ ** ficl/softwords/ficlclass.fr
286N/A\ Classes to model ficl data structures in objects
286N/A\ This is a demo!
286N/A\ John Sadler 14 Sep 1998
286N/A\
286N/A\ ** C - W O R D
286N/A\ Models a FICL_WORD
286N/A
286N/Aobject subclass c-word
286N/A c-word ref: .link
286N/A c-2byte obj: .hashcode
286N/A c-byte obj: .flags
286N/A c-byte obj: .nName
286N/A c-bytePtr obj: .pName
286N/A c-cellPtr obj: .pCode
286N/A c-4byte obj: .param0
286N/A
286N/A \ Push word's name...
286N/A : get-name ( inst class -- c-addr u )
286N/A 2dup
286N/A my=[ .pName get-ptr ] -rot
286N/A my=[ .nName get ]
286N/A ;
286N/A
286N/A : next ( inst class -- link-inst class )
286N/A my=> .link ;
286N/A
286N/A : ?
286N/A ." c-word: "
286N/A 2dup --> get-name type cr
286N/A ;
286N/A
286N/Aend-class
286N/A
286N/A\ ** C - W O R D L I S T
286N/A\ Models a FICL_HASH
286N/A\ Example of use:
286N/A\ get-current c-wordlist --> ref current
286N/A\ current --> ?
286N/A\ current --> .hash --> ?
286N/A\ current --> .hash --> next --> ?
286N/A
286N/Aobject subclass c-wordlist
286N/A c-wordlist ref: .parent
286N/A c-ptr obj: .name
286N/A c-cell obj: .size
286N/A c-word ref: .hash ( first entry in hash table )
286N/A
286N/A : ?
286N/A --> get-name ." ficl wordlist " type cr ;
286N/A : push drop >search ;
286N/A : pop 2drop previous ;
286N/A : set-current drop set-current ;
286N/A : get-name drop wid-get-name ;
286N/A : words { 2:this -- }
286N/A this my=[ .size get ] 0 do
286N/A i this my=[ .hash index ] ( 2list-head )
286N/A begin
286N/A 2dup --> get-name type space
286N/A --> next over
286N/A 0= until 2drop cr
286N/A loop
286N/A ;
286N/Aend-class
286N/A
286N/A\ : named-wid wordlist postpone c-wordlist metaclass => ref ;
286N/A
286N/A
286N/A\ ** C - F I C L S T A C K
object subclass c-ficlstack
c-4byte obj: .nCells
c-cellPtr obj: .link
c-cellPtr obj: .sp
c-4byte obj: .stackBase
: init 2drop ;
: ? 2drop
." ficl stack " cr ;
: top
--> .sp --> .addr --> prev --> get ;
end-class
[endif]