-- FileMgrPack.pack

-- Yokota  March 23, 1981  11:38 AM  GetLabelString is moved from FileHelperProcess to Volume, and GetSavedLocalTimeParameters is moved from FileAttributes to PhysicalVolume.
-- McJones  January 31, 1981  11:19 AM  {Get, Set}LocalTimeParameters; diddle Scavenger; delete frames
-- Gobbel  January 13, 1981  3:36 PM  (previous edit)
-- Levin	August 26, 1982 3:42 pm	ReplicateImmutable now separate from Move.

FileMgr: SEGMENT =
BEGIN

FileHelperProcess: CODE PACK =
  BEGIN
  FileImpl [FileHelperProcess, GetFileDescriptorSignals, GetFileDescriptor];
  VolAllocMapImpl [Close];
  VolFileMapImpl [Close, ContextSet, Find, Get, GetPageGroup, Lower,
    ReadNext];
    -- We include GetAttributes, GetLabelString, GetLogicalRootPage and
    -- GetStatus here as they fit and are (or are presumed to be) called
    -- frequently in the development environment
  VolumeImpl [Activate, Deactivate, GetAttributes, GetLogicalRootPage, GetNext,
    GetStatus, LogicalVolumeFind, LVGetEntryPointer, LVGetStatus, VolumeAccess];
   END;

VMMHelperProcs: CODE PACK =
  {FileImpl [GetFileAttributes]};

VFMChangingSize: CODE PACK =
  BEGIN
  VolAllocMapImpl [AccessVAM, AllocPageGroup, FreePageGroup];
  VolFileMapImpl [CreateVPage, Delete, DeletePageGroup, FreeVPage, Insert,
      InsertPageGroup, Merge, PutNext, Split, Xtra];
  END;

FileCreate: CODE PACK =
  {FileImpl [Create, CreateWithID, CreateWithIDExternal, CreateWithIDInternal,
      TmpsEnter, TmpsGet, TmpsGrow]};

FileDelete: CODE PACK =
  {FileImpl [Delete, DeleteCommon, DeleteFileOnVolumeInternal,
    DeleteImmutable, TmpsRemove]};

FileSetSize: CODE PACK =
  {FileImpl [SetSize, SetSizeInternal]};

FileAttributes: CODE PACK =
  BEGIN
  FileImpl [ChangeAttributes, ChangeAttributesInternal, GetAttributes,
    GetSize, MakeImmutable, MakePermanent];
  -- The following should be in a small cold PhysicalVolume pack (it is used once/boot), but it fits here:
  END;

FileMapLogging: CODE PACK =
  {FileImpl [GetBootLocation, GetFilePoint, GetVIDAndGroup]};

OtherFileStuff: CODE PACK =
  {FileImpl [IsOnVolume, MakeBootable,
    MakeBootableOrUnbootable, MakeUnbootable, SetDebuggerFiles]};

TransactionRelatedRunning: CODE PACK =
  {FileImpl [LogContents, TxSetSize]};

TransactionRelatedAborting: CODE PACK =
  {FileImpl [MakeMutable, MakeTemporary, TxCreate, TxMakePerm]};

Scavenger: CODE PACK =
  BEGIN
  ScavengeImpl EXCEPT [Initialize, MAIN];
  VolFileMapImpl [InitMap];
  VolumeImpl [BeginScavenging, EndScavenging];
  END;

Volume: CODE PACK =
  BEGIN
  FileImpl [CloseVolumeAndFlushFiles, DeleteTempsInternal,
    DeleteTmpsInternalNew, DeleteTmpsInternalOld, OpenVolumeAndDeleteTemps];
  VolFileMapImpl [GetNextFile];
  VolumeImpl [Close, CloseLogicalVolume, GetLabelString, GetRootFile, IsOnServer, Open,
    OpenLogicalVolume, OpenLogicalVolumeInternal, OpenVolume, PutRootFile,
    SetRootFile, SignalVolumeAccess];
  END;

PhysicalVolume: CODE PACK =
  BEGIN
  MarkerPageImpl [Enter, EnterMarkerID, Find, FindInternal, Flush];
  PhysicalVolumeImpl [AssertNotAPilotVolume, AssertPilotVolume,
    AwaitStateChange, CheckPhysicalRootLabel, DriveSize,
    FinishWithNonPilotVolume, GetAttributes, GetDrive, GetHandle, GetHints,
    GetNext, GetNextDrive, GetNextLogicalVolume, GetPVDrive,
    GetSavedLocalTimeParameters, InterpretHandle,
    IsReady, Offline, PhysicalRootPageAccess, PhysicalRootPageAccessInternal,
    PhysicalRootPageCheck, PhysicalRootPageMap, PhysicalRootPageUnmap,
    PhysicalVolumeOffLineInternal, PhysicalVolumeOnLineInternal,
    RegisterPvInfo, RegisterSubvolumeMarker, SetSavedLocalTimeParameters, ValidateDrive];
  VolumeImpl [CheckLogicalVolume, EnterLV, FindLogicalVolume, GetLVStatus,
    LogicalVolumeCheck, LogicalVolumeDebuggerCheck, LogicalVolumeLike,
    LogicalVolumeOffLine, LVDecrementPieceCount, PinnedFileEnter,
    PinnedFileFlush, ReadAndCheckLogicalRootLabel, RegisterLogicalSubvolume,
    RegisterVFiles, SubvolumeOffline, SubvolumeOnline, UnregisterVFiles,
    VFileEnter];
  END;

Othello: CODE PACK =
  BEGIN
  MarkerPageImpl [CreateMarkerPage, GetNextPhysicalVolume, MarkerPageMap,
    MarkerPageUnmap, UpdateLogicalMarkerPages, UpdatePhysicalMarkerPages];
  PhysicalVolumeImpl [AccessPhysicalVolumeRootPage, CreateLogicalVolume,
    CreatePhysicalVolume, EraseLogicalVolume, GetContainingPhysicalVolume,
    GetNextBadPage, GetNextSubVolume, GetPhysicalVolumeAttributes,
    GetPhysicalVolumeBootFiles, GetSubVolumeAttributes, MarkPageBad,
    SetPhysicalVolumeBootFiles];
  VolumeImpl [DriveSize, GetContainingPhysicalVolume,
    GetLogicalVolumeBootFiles, GetType, LogicalVolumeCreate,
    LogicalVolumeErase, SetLogicalVolumeBootFiles];
  END;

FileMgrInitialization: CODE PACK =
  BEGIN
  -- Pin is only called by PilotControl. Move and ReplicateImmutable are
  -- here only since they are unimplemented.
  FileImpl [InitializeFileMgr, MAIN, Move, Pin, ReplicateImmutable];
  MarkerPageImpl [MAIN];
  PhysicalVolumeImpl [InitDisks, MAIN];
  ScavengeImpl [Initialize, MAIN];
  VolAllocMapImpl [MAIN];
  VolFileMapImpl [MAIN];
  VolumeImpl [OpenInitialVolumes, MAIN];
  END;
END;