xref: /freebsd/stand/ficl/softwords/forml.fr (revision 26a58599a09a6181e0f5abe624021865a0c23186)
1*ca987d46SWarner Losh\ examples from FORML conference paper Nov 98
2*ca987d46SWarner Losh\ sadler
3*ca987d46SWarner Losh\
4*ca987d46SWarner Losh
5*ca987d46SWarner Losh.( loading FORML examples ) cr
6*ca987d46SWarner Loshobject --> sub c-example
7*ca987d46SWarner Losh             cell: .cell0
8*ca987d46SWarner Losh    c-4byte   obj: .nCells
9*ca987d46SWarner Losh  4 c-4byte array: .quad
10*ca987d46SWarner Losh       c-byte obj: .length
11*ca987d46SWarner Losh         79 chars: .name
12*ca987d46SWarner Losh
13*ca987d46SWarner Losh    : init   ( inst class -- )
14*ca987d46SWarner Losh        2dup  object => init
15*ca987d46SWarner Losh        s" aardvark"  2swap  --> set-name
16*ca987d46SWarner Losh    ;
17*ca987d46SWarner Losh
18*ca987d46SWarner Losh    : get-name  ( inst class -- c-addr u )
19*ca987d46SWarner Losh        2dup
20*ca987d46SWarner Losh        --> .name  -rot      ( c-addr inst class )
21*ca987d46SWarner Losh        --> .length --> get
22*ca987d46SWarner Losh    ;
23*ca987d46SWarner Losh
24*ca987d46SWarner Losh    : set-name  { c-addr u 2:this -- }
25*ca987d46SWarner Losh        u       this --> .length --> set
26*ca987d46SWarner Losh        c-addr  this --> .name  u move
27*ca987d46SWarner Losh    ;
28*ca987d46SWarner Losh
29*ca987d46SWarner Losh    : ?  ( inst class ) c-example => get-name type cr ;
30*ca987d46SWarner Loshend-class
31*ca987d46SWarner Losh
32*ca987d46SWarner Losh
33*ca987d46SWarner Losh: test ." this is a test" cr ;
34*ca987d46SWarner Losh' test
35*ca987d46SWarner Loshc-word --> ref testref
36*ca987d46SWarner Losh
37*ca987d46SWarner Losh\ add a method to c-word...
38*ca987d46SWarner Loshc-word --> get-wid ficl-set-current
39*ca987d46SWarner Losh\ list dictionary thread
40*ca987d46SWarner Losh: list  ( inst class )
41*ca987d46SWarner Losh    begin
42*ca987d46SWarner Losh        2dup --> get-name type cr
43*ca987d46SWarner Losh        --> next over
44*ca987d46SWarner Losh    0= until
45*ca987d46SWarner Losh    2drop
46*ca987d46SWarner Losh;
47*ca987d46SWarner Loshset-current
48*ca987d46SWarner Losh
49*ca987d46SWarner Loshobject subclass c-led
50*ca987d46SWarner Losh    c-byte obj: .state
51*ca987d46SWarner Losh
52*ca987d46SWarner Losh    : on   { led# 2:this -- }
53*ca987d46SWarner Losh        this --> .state --> get
54*ca987d46SWarner Losh        1 led# lshift or dup !oreg
55*ca987d46SWarner Losh        this --> .state --> set
56*ca987d46SWarner Losh    ;
57*ca987d46SWarner Losh
58*ca987d46SWarner Losh    : off   { led# 2:this -- }
59*ca987d46SWarner Losh        this --> .state --> get
60*ca987d46SWarner Losh        1 led# lshift invert and dup !oreg
61*ca987d46SWarner Losh        this --> .state --> set
62*ca987d46SWarner Losh    ;
63*ca987d46SWarner Losh
64*ca987d46SWarner Loshend-class
65*ca987d46SWarner Losh
66*ca987d46SWarner Losh
67*ca987d46SWarner Loshobject subclass c-switch
68*ca987d46SWarner Losh
69*ca987d46SWarner Losh    : ?on   { bit# 2:this -- flag }
70*ca987d46SWarner Losh
71*ca987d46SWarner Losh        1 bit# lshift
72*ca987d46SWarner Losh    ;
73*ca987d46SWarner Loshend-class
74*ca987d46SWarner Losh
75