-- JaMFnsDefsImpl.mesa -- Original version by John Warnock -- Last changed by Bill Paxton, March 24, 1981 3:29 PM -- Last changed by Doug Wyatt, 1-Oct-81 15:12:07 DIRECTORY JaMBasic USING [Object], JaMFnsDefs USING [], JaMInternal USING [Frame], JaMOps USING [defaultFrame, Error, GetAbort, GetStream, MakeStream, MakeString, Pop, PopBoolean, PopInteger, PopReal, PopStream, PopString, Push, PushBoolean, PushInteger, PushReal, rangechk, RegisterImplicit, SetAbort, StringText], Inline USING [LowHalf], StreamDefs USING [StreamHandle]; JaMFnsDefsImpl: PROGRAM IMPORTS JaMOps, Inline EXPORTS JaMFnsDefs = { OPEN JaMInternal, JaMBasic; StreamHandle: TYPE = StreamDefs.StreamHandle; Register: PUBLIC PROC[string: LONG STRING, proc: PROC] = { frame: Frame _ JaMOps.defaultFrame; JaMOps.RegisterImplicit[frame,string,proc]; }; JaMExec: PUBLIC PROC[string: LONG STRING] = { frame: Frame _ JaMOps.defaultFrame; ob: string Object _ JaMOps.MakeString[string]; ob.tag _ X; JaMOps.Push[frame.execstk, ob]; }; PushInteger: PUBLIC PROC[i: INTEGER] = { frame: Frame _ JaMOps.defaultFrame; JaMOps.PushInteger[frame.opstk,i]; }; PopInteger: PUBLIC PROC RETURNS[INTEGER] = { frame: Frame _ JaMOps.defaultFrame; i: LONG INTEGER _ JaMOps.PopInteger[frame.opstk]; IF i IN[FIRST[INTEGER]..LAST[INTEGER]] THEN RETURN[Inline.LowHalf[i]] ELSE ERROR JaMOps.Error[JaMOps.rangechk]; }; PushLongInteger: PUBLIC PROC[i: LONG INTEGER] = { frame: Frame _ JaMOps.defaultFrame; JaMOps.PushInteger[frame.opstk,i]; }; PopLongInteger,GetLongInteger: PUBLIC PROC RETURNS[LONG INTEGER] = { frame: Frame _ JaMOps.defaultFrame; RETURN[JaMOps.PopInteger[frame.opstk]]; }; PushReal: PUBLIC PROC[r: REAL] = { frame: Frame _ JaMOps.defaultFrame; JaMOps.PushReal[frame.opstk,r]; }; PopReal,GetReal: PUBLIC PROC RETURNS[REAL] = { frame: Frame _ JaMOps.defaultFrame; RETURN[JaMOps.PopReal[frame.opstk]]; }; PushBoolean: PUBLIC PROC[b: BOOLEAN] = { frame: Frame _ JaMOps.defaultFrame; JaMOps.PushBoolean[frame.opstk,b]; }; PopBoolean: PUBLIC PROC RETURNS[BOOLEAN] = { frame: Frame _ JaMOps.defaultFrame; RETURN[JaMOps.PopBoolean[frame.opstk]]; }; PushString: PUBLIC PROC[s: LONG STRING] = { frame: Frame _ JaMOps.defaultFrame; ob: string Object _ JaMOps.MakeString[s]; JaMOps.Push[frame.opstk,ob]; }; PopString: PUBLIC PROC[s: LONG STRING] = { frame: Frame _ JaMOps.defaultFrame; ob: string Object _ JaMOps.PopString[frame.opstk]; WHILE s.maxlength