<> <> <> <> <> <> <> <> <<>> DIRECTORY Basics USING [LowHalf], TJaMBasic USING [Object], TJaMFnsDefs USING [], TJaMInternal USING [Frame], TJaMOps USING [defaultFrame, Error, GetAbort, GetStream, MakeStream, MakeString, Pop, PopBoolean, PopInteger, PopReal, PopStream, PopString, Push, PushBoolean, PushInteger, PushReal, rangechk, RegisterImplicit, SetAbort, StartTJaM, StringText], TJaMStreamDefs USING [StreamHandle]; TJaMFnsDefsImpl: PROGRAM IMPORTS Basics, TJaMOps EXPORTS TJaMFnsDefs = { StreamHandle: TYPE = TJaMStreamDefs.StreamHandle; Register: PUBLIC PROC[string: LONG STRING, proc: PROC] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; TJaMOps.RegisterImplicit[frame,string,proc]; }; TJaMExec: PUBLIC PROC[string: LONG STRING] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; ob: string TJaMBasic.Object _ TJaMOps.MakeString[string]; ob.tag _ X; TJaMOps.Push[frame.execstk, ob]; }; PushInteger: PUBLIC PROC[i: INTEGER] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; TJaMOps.PushInteger[frame.opstk,i]; }; PopInteger: PUBLIC PROC RETURNS[INTEGER] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; i: INT _ TJaMOps.PopInteger[frame.opstk]; IF i IN[FIRST[INTEGER]..LAST[INTEGER]] THEN RETURN[Basics.LowHalf[i]] ELSE ERROR TJaMOps.Error[TJaMOps.rangechk]; }; PushLongInteger: PUBLIC PROC[i: INT] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; TJaMOps.PushInteger[frame.opstk,i]; }; PopLongInteger,GetLongInteger: PUBLIC PROC RETURNS[INT] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; RETURN[TJaMOps.PopInteger[frame.opstk]]; }; PushReal: PUBLIC PROC[r: REAL] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; TJaMOps.PushReal[frame.opstk,r]; }; PopReal,GetReal: PUBLIC PROC RETURNS[REAL] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; RETURN[TJaMOps.PopReal[frame.opstk]]; }; PushBoolean: PUBLIC PROC[b: BOOL] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; TJaMOps.PushBoolean[frame.opstk,b]; }; PopBoolean: PUBLIC PROC RETURNS[BOOL] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; RETURN[TJaMOps.PopBoolean[frame.opstk]]; }; PushString: PUBLIC PROC[s: LONG STRING] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; ob: string TJaMBasic.Object _ TJaMOps.MakeString[s]; TJaMOps.Push[frame.opstk,ob]; }; PopString: PUBLIC PROC[s: LONG STRING] = { frame: TJaMInternal.Frame _ TJaMOps.defaultFrame; ob: string TJaMBasic.Object _ TJaMOps.PopString[frame.opstk]; WHILE s.maxlength