DIRECTORY BootStartList USING [ Base, Entry, EntryPointer, Index, IndexToEntryPointer, IndexToSpaceEntryPointer, Proc, SpaceEntryPointer, startIndex], PrincOps USING [PageCount, PageNumber], PrincOpsUtils USING [PageNumberForAddress]; BootStartListImpl: PROGRAM IMPORTS BootStartList, PrincOpsUtils EXPORTS BootStartList = BEGIN h: PUBLIC BootStartList.Base; StartListHasBeenDestroyed: PUBLIC ERROR = CODE; Enumerate: PUBLIC PROC [proc: BootStartList.Proc] = { OPEN BootStartList; index: Index; size: CARDINAL; IF h = NIL THEN ERROR StartListHasBeenDestroyed; FOR index _ startIndex, index + size UNTIL h[index].option = stop DO IF proc[index] THEN EXIT; WITH h[index] SELECT FROM space => size _ SIZE[space Entry]; swapUnit => size _ SIZE[swapUnit Entry]; ENDCASE; ENDLOOP; }; Destroy: PUBLIC PROC RETURNS [page: PrincOps.PageNumber, count: PrincOps.PageCount] = { OPEN BootStartList; FindSwapUnit: Proc = { entry: EntryPointer = IndexToEntryPointer[index]; WITH e: entry SELECT FROM space => NULL; swapUnit => { parent: SpaceEntryPointer = IndexToSpaceEntryPointer[e.parent]; IF page = parent.vmPage + e.base THEN {count _ e.pages; RETURN[TRUE]}; }; ENDCASE; }; IF h = NIL THEN RETURN; page _ PrincOpsUtils.PageNumberForAddress[h]; Enumerate[FindSwapUnit]; h _ NIL; }; Initialize: PUBLIC PROC [header: BootStartList.Base] = { h _ header; }; END. ฎBootStartListImpl.mesa last edited by Levin on August 8, 1983 3:26 pm Last edited by Andrew Birrell on April 20, 1983 6:41 pm Exports to BootStartList Initialization สP– "Cedar" style˜Jšœ™Jšœ.™.J™7J˜šฯk ˜ šœœ˜Jšœv˜v—Jšœ œ˜'Jšœœ˜+—J˜šœ˜Jšœ˜$Jšœ˜—J˜Jš˜J˜Jšœ™J˜Jšœœ˜J˜Jšœœœœ˜/J˜šฯn œœœ˜5Jšœ˜Jšœ ˜ Jšœœ˜Jšœœœœ˜0šœ"œ˜DJšœ œœ˜šœ œ˜Jšœœ˜"Jšœœ˜(Jšœ˜—Jšœ˜ —J˜—J˜šžœœœœ;˜WJšœ˜˜J˜1šœ œ˜Jšœ œ˜šœ ˜ J˜?šœ˜%Jšœœœ˜ —J˜—Jšœ˜—Jšœ˜—Jšœœœœ˜Jšœ-˜-J˜Jšœœ˜J˜—J˜Jšœ™J˜šž œœœ!˜8Jšœ ˜ J˜—J˜Jšœ˜J˜J™J˜—…—TR