32 lines
888 B
Plaintext
32 lines
888 B
Plaintext
INSTALL @lib$+"CLASSLIB"
|
|
|
|
REM Create a base class with no members:
|
|
DIM class{method}
|
|
PROC_class(class{})
|
|
|
|
REM Instantiate the class:
|
|
PROC_new(myobject{}, class{})
|
|
|
|
REM Add a member at run-time:
|
|
member$ = "mymember#"
|
|
PROCaddmember(myobject{}, member$, 8)
|
|
|
|
REM Test that the member can be accessed:
|
|
PROCassign("myobject." + member$, "PI")
|
|
PRINT EVAL("myobject." + member$)
|
|
END
|
|
|
|
DEF PROCaddmember(RETURN obj{}, mem$, size%)
|
|
LOCAL D%, F%, P%
|
|
DIM D% DIM(obj{}) + size% - 1, F% LEN(mem$) + 8
|
|
P% = !^obj{} + 4
|
|
WHILE !P% : P% = !P% : ENDWHILE : !P% = F%
|
|
$$(F%+4) = mem$ : F%!(LEN(mem$) + 5) = DIM(obj{})
|
|
!(^obj{} + 4) = D%
|
|
ENDPROC
|
|
|
|
DEF PROCassign(v$, n$)
|
|
IF EVAL("FNassign(" + v$ + "," + n$ + ")")
|
|
ENDPROC
|
|
DEF FNassign(RETURN n, v) : n = v : = 0
|