-- File: IFSFileOpsC.mesa
-- Last edited by Levin: 28-Jan-81 17:42:06
DIRECTORY
IFSFilePrivate USING [IORequest, IORequestBlock],
VMStorage USING [longTerm];
IFSFileOpsC: MONITOR IMPORTS VMStorage 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;
VMStorage.longTerm.FREE[@request];
ENDLOOP;
END;
GetIORequestBlock: PUBLIC ENTRY PROCEDURE RETURNS [request: IORequest] =
BEGIN
IF freeList ~= NIL THEN {request ← freeList; freeList ← request.link}
ELSE request ← VMStorage.longTerm.NEW[IORequestBlock];
END;
FreeIORequestBlock: PUBLIC ENTRY PROCEDURE [request: IORequest] =
BEGIN request.link ← freeList; freeList ← request; END;
END.