MBStorageImpl.mesa
Edited by Levin on April 5, 1983 3:44 pm
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.