DIRECTORY BigDisk, ConvertUnsafe USING [ToRope], Device USING [nullType, Type], IO, PhysicalVolume, Rope USING [Equal, ROPE], Volume; BigDiskImpl: PROGRAM IMPORTS ConvertUnsafe, IO, PhysicalVolume, Rope, Volume EXPORTS BigDisk = BEGIN BringVolumesOnline: PUBLIC PROC [out: IO.STREAM] = { deviceType: Device.Type _ Device.nullType; deviceIndex: CARDINAL _ PhysicalVolume.nullDeviceIndex; DO [nextType: deviceType, nextIndex: deviceIndex] _ PhysicalVolume.GetNextDrive[ deviceType, deviceIndex]; IF deviceIndex = PhysicalVolume.nullDeviceIndex THEN EXIT ELSE { physicalVolumeHandle: PhysicalVolume.Handle _ PhysicalVolume.GetHandle[deviceType, deviceIndex]; IF PhysicalVolume.IsReady[physicalVolumeHandle] THEN { physicalVolumeID: PhysicalVolume.ID; logicalVolumeID: Volume.ID; asserted: BOOL; volumeSize, freePageCount: Volume.PageCount; volumeType: Volume.Type; label: STRING _ [100]; label.length _ 0; asserted _ FALSE; [] _ PhysicalVolume.GetHints[instance: physicalVolumeHandle, label: label]; out.PutF["Physical Volume: %g", IO.string[label]]; physicalVolumeID _ PhysicalVolume.AssertPilotVolume[ physicalVolumeHandle ! PhysicalVolume.Error => IF error = alreadyAsserted THEN { out.PutRope[" alreadyAsserted"]; asserted _ TRUE; CONTINUE; }]; out.PutRope["\n"]; IF asserted THEN { pvType: PhysicalVolume.VolumeType; label.length _ 0; [pvID: physicalVolumeID, volumeType: pvType] _ PhysicalVolume.GetHints[instance: physicalVolumeHandle, label: label]; IF pvType # isPilot THEN { out.PutRope[" ... not a pilot volume\n"]; LOOP; }; }; logicalVolumeID _ Volume.nullID; DO logicalVolumeStatus: Volume.Status; logicalVolumeID _ PhysicalVolume.GetNextLogicalVolume[ physicalVolumeID, logicalVolumeID ! PhysicalVolume.Error => { IF error = physicalVolumeUnknown THEN { logicalVolumeID _ Volume.nullID; CONTINUE; }; }]; IF logicalVolumeID = Volume.nullID THEN EXIT; logicalVolumeStatus _ Volume.GetStatus[logicalVolumeID]; label.length _ 0; [volumeSize: volumeSize, freePageCount: freePageCount] _ Volume.GetAttributes[volume: logicalVolumeID]; volumeType _ Volume.GetType[volume: logicalVolumeID]; Volume.GetLabelString[volume: logicalVolumeID, s: label]; out.PutF[" Logical volume %g, size: %d, free: %d ", IO.string[label], IO.card[volumeSize], IO.card[freePageCount]]; out.PutF["type: %g, status: %g\n", IO.refAny[NEW[Volume.Type _ volumeType]], IO.refAny[NEW[Volume.Status _ logicalVolumeStatus]]]; IF NOT asserted AND logicalVolumeStatus = closedAndConsistent THEN { Volume.Open[logicalVolumeID]; out.PutRope[" ...opened\n"]; }; ENDLOOP; }; }; ENDLOOP; }; END. xBigDiskImpl.mesa L. Stewart, April 19, 1983 2:31 pm LCS, April 19, 1983 9:45 am, stolen from Alpine InitProcsImpl ʘJšœ™Jšœ"™"J˜šÏk ˜ J˜Jšœœ ˜Jšœœ˜Jšœ˜J˜Jšœœ œ˜J˜J˜—Jšœ ˜Jšœœ˜7Jšœ ˜Jš˜J˜š Ïnœœœœœ˜4J˜*Jšœ œ"˜7š˜˜MJ˜—Jšœ.œ˜9šœ˜˜-J˜2—šœ.œ˜6Jšœ!œ˜$Jšœœ˜Jšœ œ˜J˜,J˜Jšœœ ˜J˜Jšœ œ˜J˜KJšœ œ˜2˜4˜.šœœ˜!Jšœ ˜ Jšœ œ˜Jšœ˜ Jšœ˜———J˜šœ œ˜J˜"J˜J˜ušœœ˜J˜,Jšœ˜J˜—J˜—J˜ š˜J˜#˜6˜=šœœ˜'Jšœ ˜ Jšœ˜ Jšœ˜—Jšœ˜——Jšœ!œœ˜-J˜8J˜J˜gJ˜5J˜9Jšœ5œœœ˜tJš œ#œœœœ(˜‚šœœ œ+œ˜DJ˜Jšœ˜J˜—Jšœ˜—J˜—J˜—Jšœ˜—J˜—J˜Jšœ˜Jšœ=™=J˜—…—  %