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