-- JaMLiteral.mesa -- Written by: John Warnock, January, 1979 -- Last changed by Doug Wyatt, March 29, 1980 7:12 PM DIRECTORY JaMLiteralDefs: FROM "JaMLiteralDefs", JaMMasterDefs: FROM "JaMMasterDefs" USING [ Object, Stack], JaMStackDefs: FROM "JaMStackDefs" USING [ Push], JaMVMDefs: FROM "JaMVMDefs" USING [ AllocateCharsVM, PutCharsVM], StreamDefs: FROM "StreamDefs" USING [ StreamHandle]; JaMLiteral: PROGRAM IMPORTS JaMStackDefs, JaMVMDefs EXPORTS JaMLiteralDefs = BEGIN OPEN JaMMasterDefs; -- The following routines implement a set of literal building routines. -- The resulting constructed literal is pushed on the operand stack. IntegerLit: PUBLIC PROCEDURE [i:INTEGER,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,IntegerType[i]],s]; END; LongIntegerLit: PUBLIC PROCEDURE [l:LONG INTEGER,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,LongIntegerType[l]],s]; END; RealLit: PUBLIC PROCEDURE [r:REAL,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,RealType[r]],s]; END; BooleanLit: PUBLIC PROCEDURE [b:BOOLEAN,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,BooleanType[BooleanVal:b]],s]; END; StringLit: PUBLIC PROCEDURE [string:STRING,s:Stack] = BEGIN st:StringType Object _ MakeStringObject[string]; st.litflag _ lit; JaMStackDefs.Push[st,s]; END; UserLit: PUBLIC PROCEDURE [type:INTEGER,address:LONG POINTER,s:Stack] = BEGIN us:UserType Object _[lit,UserType[type,address]]; JaMStackDefs.Push[us,s]; END; MakeStringObject: PUBLIC PROCEDURE [string:STRING] RETURNS [ob:StringType Object] = BEGIN ob_ [nolit,StringType[,,]]; [ob.Address,ob.Offset]_JaMVMDefs.AllocateCharsVM[string.length]; ob.Length_string.length; JaMVMDefs.PutCharsVM[ob.Address,ob.Offset, @string.text,0,string.length]; END; StreamLit: PUBLIC PROCEDURE[stream:StreamDefs.StreamHandle,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,StreamType[stream]],s]; END; END.(600)\409b10B237b10B106b14B114b7B99b10B116b9B154b7B156b16B281b9B