<> <> DIRECTORY Environment USING [wordsPerPage], MBStorage USING [], Space USING [ Create, Delete, GetHandle, Handle, LongPointer, Map, mds, PageFromLongPointer, Pointer, virtualMemory]; MBStorageImpl: PROGRAM IMPORTS Space EXPORTS MBStorage = BEGIN Pages: PUBLIC PROC [npages: CARDINAL] RETURNS [base: LONG POINTER] = { space: Space.Handle = Space.Create[npages, Space.virtualMemory]; Space.Map[space]; RETURN[Space.LongPointer[space]] }; MDSPages: PUBLIC PROC [npages: CARDINAL] RETURNS [base: POINTER] = { space: Space.Handle = Space.Create[npages, Space.mds]; Space.Map[space]; RETURN[Space.Pointer[space]] }; Words: PUBLIC PROC [nwords: CARDINAL] RETURNS [base: LONG POINTER] = {RETURN[Pages[PagesForWords[nwords]]]}; MDSWords: PUBLIC PROC [nwords: CARDINAL] RETURNS [base: LONG POINTER] = {RETURN[MDSPages[PagesForWords[nwords]]]}; FreePages: PUBLIC PROC [base: LONG POINTER] = {IF base ~= NIL THEN Space.Delete[Space.GetHandle[Space.PageFromLongPointer[base]]]}; FreeMDSPages: PUBLIC PROC [base: POINTER] = {FreePages[LONG[base]]}; FreeWords: PUBLIC PROC [base: LONG POINTER] = {FreePages[base]}; FreeMDSWords: PUBLIC PROC [base: POINTER] = {FreeMDSPages[base]}; PagesForWords: PUBLIC PROC [nWords: CARDINAL] RETURNS [CARDINAL] = {RETURN[(nWords + Environment.wordsPerPage - 1)/Environment.wordsPerPage]}; END.