--LTVMemImpl.mesa --Created by -- JFung.PASA 17-Nov-83 13:59:25 --last edited by -- JFung.PASA 17-Jul-84 14:07:51 DIRECTORY Environment, File, FileTypes USING [tUntypedFile], Format, LispToolOps, OthelloOps, Process, Put, Scavenger, Space, TemporaryBooting USING [InvalidParameters], Volume, Window; LTVMemImpl: PROGRAM IMPORTS File, LispToolOps, OthelloOps, Process, Put, TemporaryBooting, Volume EXPORTS LispToolOps = BEGIN OPEN ILT: LispToolOps; debug: BOOLEAN ← FALSE; volumeID: Volume.ID ← Volume.nullID; volumeOpen: BOOLEAN ← FALSE; CloseVolume: PROC = BEGIN IF volumeOpen THEN {Volume.Close[volumeID]; volumeOpen ← FALSE} END; GetFileSize: PUBLIC PROCEDURE[] RETURNS [pageCount: File.PageCount] = --BEGIN OPEN OthelloOps; BEGIN -- cap: File.Capability; cap: File.File; firstPage: File.PageNumber; created: BOOLEAN ← FALSE; IF debug THEN { Put.Line[ILT.toolData.fileSW, "Enter DisplayFileSize..."L]; Process.Pause[Process.SecondsToTicks[5]]; }; pageCount ← ILT.toolData.vMemSize; [volumeID, volumeOpen] ← ILT.GetVolumeID[ILT.toolData.volName]; IF ~volumeOpen THEN RETURN; IF debug THEN { Put.Line[ILT.toolData.fileSW, "GetVolumeBootFile"L]; Process.Pause[Process.SecondsToTicks[5]]; }; [cap, firstPage] ← OthelloOps.GetVolumeBootFile[volumeID, hardMicrocode ! Volume.Unknown => { --! UNWIND => { IF debug THEN { Put.Line[ILT.toolData.fileSW, "Volume Unknown"L]; Process.Pause[Process.SecondsToTicks[10]]; }; CONTINUE; }]; IF cap = File.nullFile THEN { pageCount ← 0; IF debug THEN { Put.Line[ILT.toolData.fileSW, "nullFile"L]; Process.Pause[Process.SecondsToTicks[10]]; }} ELSE pageCount ← File.GetSize[cap ! UNWIND => { Put.Line[ILT.toolData.fileSW, "File Unknown"L]; Process.Pause[Process.SecondsToTicks[10]]; CONTINUE; }]; IF debug THEN { Put.LongDecimal[ILT.toolData.fileSW, pageCount]; Put.CR[ILT.toolData.fileSW]; Process.Pause[Process.SecondsToTicks[10]]; }; END; --GetFileSize SetVMemFileSize: PUBLIC PROCEDURE [pages: File.PageCount] = BEGIN OPEN OthelloOps; -- cap: File.Capability; cap: File.File; defaultVMemSize: File.PageCount; firstPage: File.PageNumber; freePages: Volume.PageCount; created: BOOLEAN ← FALSE; currentSize: File.PageCount; maxSize: Volume.PageCount; size: File.PageCount; sysoutSize: File.PageCount; volSize: Volume.PageCount; IF debug THEN { Put.Line[ILT.toolData.fileSW, "SetVMemFileSize...."L]; Process.Pause[Process.SecondsToTicks[5]]; }; [volumeID, volumeOpen] ← ILT.GetVolumeID[ILT.toolData.volName]; IF ~volumeOpen THEN RETURN; [cap, firstPage] ← GetVolumeBootFile[volumeID, hardMicrocode]; IF cap # File.nullFile THEN BEGIN ENABLE File.Unknown => { cap ← File.nullFile; IF debug THEN { Put.Line[ ILT.toolData.fileSW, " not nullFile...."L]; Process.Pause[Process.SecondsToTicks[5]]; }; CONTINUE}; END; --IF cap # File.nullFile IF (created ← cap = File.nullFile) THEN BEGIN IF debug THEN { Put.Line[ILT.toolData.fileSW, " = nullFile...."L]; Process.Pause[Process.SecondsToTicks[5]]; }; --cap ← File.Create[volumeID, 0, FileTypes.tUntypedFile]; Put.Line[ILT.toolData.msgSW, " No sysout file on volume!"L]; RETURN; END; [volSize, freePages] ← Volume.GetAttributes[volumeID]; --defaultVMemSize ← volSize - 2000; sysoutSize ← File.GetSize[cap]; IF cap = File.nullFile THEN currentSize ← 0 ELSE currentSize ← File.GetSize[cap]; IF debug THEN { Put.LongDecimal[ILT.toolData.fileSW, currentSize]; Put.CR[ILT.toolData.fileSW]; }; Put.Text[ILT.toolData.fileSW, " \n Volume size = "L]; Put.LongDecimal[ILT.toolData.fileSW, volSize]; Put.Line[ILT.toolData.fileSW, " pages"L]; << Put.Text[ILT.toolData.fileSW, " Default VMem size = "L]; Put.LongDecimal[ILT.toolData.fileSW, defaultVMemSize]; Put.Line[ILT.toolData.fileSW, " pages"L]; Put.Text[ILT.toolData.fileSW, " Free pages on volume = "L]; Put.LongDecimal[ILT.toolData.fileSW, freePages]; Put.CR[ILT.toolData.fileSW]; >> -- calculate maximum vmem size maxSize ← currentSize + freePages; File.SetSize[ cap, maxSize ! Volume.InsufficientSpace => {maxSize ← maxSize - 100; RETRY}]; Put.Text[ILT.toolData.fileSW, " Approximate maximum VMem size = "L]; Put.LongDecimal[ILT.toolData.fileSW, maxSize]; Put.Line[ILT.toolData.fileSW, " pages"L]; IF ILT.toolData.vMemSize < sysoutSize THEN BEGIN Put.Line[ ILT.toolData.fileSW, "WARNING: will shrink virtual memory size, please confirm to continue."L]; IF ~ILT.Confirm[] THEN BEGIN size ← ILT.GetFileSize[]; ILT.DisplayFileSize[size]; CloseVolume[]; RETURN; END; END; File.SetSize[ cap, ILT.toolData.vMemSize ! Volume.InsufficientSpace => { Put.Line[ILT.toolData.fileSW, " Not enough room for file!"L]; CloseVolume[]; GOTO noGood; }]; Put.Line[ILT.toolData.fileSW, " Done."L]; CloseVolume[]; EXITS noGood => RETURN; END; -- SetVMemFileSize END. -- Prog. ILTVMemImpl