shithub: 9ficl

ref: 7c76dac1b268038f567939a70a18228e790a5cbc
dir: 9ficl/softcore/forml.fr

View raw version
\ examples from FORML conference paper Nov 98
\ sadler
.( loading FORML examples ) cr
object --> sub c-example
             cell: .cell0
    c-4byte   obj: .nCells
  4 c-4byte array: .quad
       c-byte obj: .length
         79 chars: .name

    : init   ( inst class -- )
        2dup  object => init
        s" aardvark"  2swap  --> set-name
    ;

    : get-name  ( inst class -- c-addr u )
        2dup 
        --> .name  -rot      ( c-addr inst class )
        --> .length --> get
    ;

    : set-name  { c-addr u 2:this -- }
        u       this --> .length --> set
        c-addr  this --> .name  u move
    ;

    : ?  ( inst class ) c-example => get-name type cr ;
end-class


: test ." this is a test" cr ;
' test
c-word --> ref testref

\ add a method to c-word...
c-word --> get-wid ficl-set-current
\ list dictionary thread
: list  ( inst class )
    begin
        2dup --> get-name type cr 
        --> next over 
    0= until
    2drop
;
set-current 

object subclass c-led
    c-byte obj: .state

    : on   { led# 2:this -- }
        this --> .state --> get
        1 led# lshift or dup !oreg
        this --> .state --> set
    ;

    : off   { led# 2:this -- }
        this --> .state --> get
        1 led# lshift invert and dup !oreg
        this --> .state --> set
    ;

end-class


object subclass c-switch

    : ?on   { bit# 2:this -- flag }
        
        1 bit# lshift
    ;
end-class