-- File TfsClose.mesa
--Last edited by:
GWilliamsDecember 14, 1981 2:31 PM
--Changed type returned by TfsCloseDisk
DIRECTORY
InlineDefs: FROM "inlinedefs" USING [COPY],
SystemDefs: FROM "systemdefs" USING [FreeHeapNode],
TridentDefs: FROM "tridentdefs" USING [tfsdskPtr, ddMgrPtr, TfsCloseDD, TfsDestroyDDMgr, TfsLockDD, TfsUnlockDD, TfsFlushDD, TfsReadDDPage, lTFSKDHeader];

TfsClose: PROGRAM IMPORTS TridentDefs, SystemDefs, InlineDefs EXPORTS TridentDefs =

BEGIN OPEN TridentDefs, SystemDefs, InlineDefs;

TfsCloseDisk: PUBLIC PROCEDURE [tfsDsk: tfsdskPtr, dontFree: BOOLEAN] RETURNS [result: tfsdskPtr]=

BEGIN

IF tfsDsk.tfskd.initmode # 0 THEN
BEGIN
TfsWriteDiskDescriptor[tfsDsk];-- Write constant part of DD
TfsCloseDD[tfsDsk.tfskd.ddMgr, tfsDsk];-- Close dd manager
IF ~dontFree THEN TfsDestroyDDMgr[tfsDsk.tfskd.ddMgr];-- Erase it
END;
FreeHeapNode[tfsDsk];-- Free the disk object
RETURN[NIL];--for [disk] ← TfsCloseDisk[disk] to zero pointer for user
END;-- of TfsCloseDisk


TfsWriteDiskDescriptor: PROCEDURE [tfsDsk: tfsdskPtr] =

BEGIN
ddMgr: ddMgrPtr;
bufferPtr: POINTER;

IF tfsDsk.tfskd.initmode # 0 THEN
BEGIN
ddMgr ← tfsDsk.tfskd.ddMgr;
TfsLockDD [ddMgr, tfsDsk];-- Single use of DD manager
bufferPtr ← TfsReadDDPage[ddMgr, tfsDsk, 1];
COPY[tfsDsk, lTFSKDHeader, bufferPtr];
TfsUnlockDD[ddMgr, tfsDsk, FALSE];-- Flush is coming up
TfsFlushDD[ddMgr, tfsDsk];-- Write disk descriptor
END;
END;-- of TfsWriteDiskDescriptor
END.
-- of TfsClose
--Last edited by:GWilliamsJuly 23, 1981 11:02 AM