-- File: IFSFileImplD.mesa
-- Last edited by:
-- Levin - 30-Jun-81 17:29:53
DIRECTORY
IFSFilePrivate USING [IORequest, IORequestBlock, zone];
IFSFileImplD: MONITOR
IMPORTS IFSFilePrivate
EXPORTS IFSFilePrivate =
BEGIN OPEN IFSFilePrivate;
-- Global Variables --
freeList: IORequest;
-- Procedures exported to IFSFilePrivate --
InitializeFreeList: PUBLIC PROCEDURE =
{freeList ← NIL};
FinalizeFreeList: PUBLIC PROCEDURE =
BEGIN
UNTIL freeList = NIL DO
request: IORequest ← freeList;
freeList ← freeList.link;
zone.FREE[@request];
ENDLOOP;
END;
GetIORequestBlock: PUBLIC ENTRY PROCEDURE RETURNS [request: IORequest] =
BEGIN
IF freeList ~= NIL THEN {request ← freeList; freeList ← request.link}
ELSE request ← zone.NEW[IORequestBlock];
END;
FreeIORequestBlock: PUBLIC ENTRY PROCEDURE [request: IORequest] =
BEGIN
request.link ← freeList; freeList ← request;
END;
END.