-- JaMVM.mesa
-- Last edit by Bill Paxton, 14-Jan-82 14:03:03
DIRECTORY
  JaMBasic USING [Base, DictBody, Object, Root, StringLength, Tuple, TupleRptr];
JaMVM: DEFINITIONS = {
OPEN JaMBasic;
Start: PROC[name: LONG STRING, maxPages: CARDINAL] RETURNS[BOOLEAN];
BadVMPassword: SIGNAL; -- raised by Start; if continue, acts as if file had not existed
Check: PROC;
Flush: PROC;
-- Virtual memory access
vm: READONLY Base;
AllocString: PROC[length: StringLength] RETURNS[string Object];
AllocArray: PROC[length: CARDINAL] RETURNS[array Object];
AllocDict: PROC[size: CARDINAL] RETURNS[dict Object];
GetRoot: PROC[root: LONG POINTER TO Root] = INLINE { root↑ ← vm↑ };
PutRoot: PROC[root: LONG POINTER TO Root] = INLINE { vm↑ ← root↑ };
GetDict: PROC[dict: dict Object]
  RETURNS[DictBody] = INLINE { RETURN[vm[dict.dict]] };
PutDict: PROC[dict: dict Object,
  dd: DictBody] = INLINE { vm[dict.dict] ← dd };
GetTuple: PROC[slot: TupleRptr]
  RETURNS[Tuple] = INLINE { RETURN[vm[slot]] };
PutTuple: PROC[slot: TupleRptr,
  tuple: Tuple] = INLINE { vm[slot] ← tuple };
GetElem: PROC[array: array Object, i: CARDINAL]
  RETURNS[Object] = INLINE { RETURN[vm[array.base][i]] };
PutElem: PROC[array: array Object, i: CARDINAL,
  object: Object] = INLINE { vm[array.base][i] ← object };
GetChar: PROC[string: string Object, i: CARDINAL]
  RETURNS[CHARACTER] = INLINE { RETURN[vm[string.text][i+string.offset]] };
PutChar: PROC[string: string Object, i: CARDINAL,
  char: CHARACTER] = INLINE { vm[string.text][i+string.offset] ← char };
CopyArray: PROC[src,dst: array Object];
-- copies MIN[src.length,dst.length] objects
CopyString: PROC[src,dst: string Object];
-- copies MIN[src.length,dst.length] characters
GetText: PROC[string: string Object, text: LONG STRING];
PutText: PROC[string: string Object, text: LONG STRING];
-- these transfer MIN[string.length,text.maxlength] characters
}.