RosettaCodeData/Task/Active-object/BBC-BASIC/active-object.basic

24 lines
812 B
Plaintext

INSTALL @lib$+"CLASSLIB"
INSTALL @lib$+"TIMERLIB"
INSTALL @lib$+"NOWAIT"
REM Integrator class:
DIM integ{f$, t#, v#, tid%, @init, @@exit, input, output, tick}
PROC_class(integ{})
REM Methods:
DEF integ.@init integ.f$ = "0" : integ.tid% = FN_ontimer(10, PROC(integ.tick), 1) : ENDPROC
DEF integ.@@exit PROC_killtimer(integ.tid%) : ENDPROC
DEF integ.input (f$) integ.f$ = f$ : ENDPROC
DEF integ.output = integ.v#
DEF integ.tick integ.t# += 0.01 : integ.v# += EVAL(integ.f$) : ENDPROC
REM Test:
PROC_new(myinteg{}, integ{})
PROC(myinteg.input) ("SIN(2*PI*0.5*myinteg.t#)")
PROCwait(200)
PROC(myinteg.input) ("0")
PROCwait(50)
PRINT "Final value = " FN(myinteg.output)
PROC_discard(myinteg{})