<> <> <> DIRECTORY MicrocodeBooting USING[ BootFileNumber, MicrocodeType, nullBootFileNumber ], File USING[ FP, nullFP, PageNumber, VolumeID, nullVolumeID ], GermSwap USING[ defaultSwitches, Switches ]; Booting: CEDAR DEFINITIONS = BEGIN <> Switches: TYPE = GermSwap.Switches; switches: READONLY Switches; <> defaultSwitches: GermSwap.Switches = GermSwap.defaultSwitches; MicrocodeType: TYPE = MicrocodeBooting.MicrocodeType; <<= { altoMesa, lisp, smalltalk76, smalltalk80, pilotMesa, cedarMesa }>> BootFileNumber: TYPE = MicrocodeBooting.BootFileNumber; BootFile: TYPE = RECORD[file: File.FP, firstPage: File.PageNumber _ [0]]; nullMicrocode: BootFileNumber = MicrocodeBooting.nullBootFileNumber; nullBootFile: BootFile = [file: File.nullFP]; Bootee: TYPE = RECORD[ SELECT type: * FROM bootButton => NULL, microcode => [ bfn: BootFileNumber _ nullMicrocode ], physical => [ volume: File.VolumeID _ File.nullVolumeID ], logical => [ volume: File.VolumeID _ File.nullVolumeID ], file => [ file: BootFile ], inload => [ file: BootFile ], none => NULL, ENDCASE ]; Boot: PROC[boot: Bootee, switches: Switches _ defaultSwitches, outload: BootFile _ nullBootFile]; <> <> <<"switches" is ignored by some variants. (Today, "bootButton" and "microcode".)>> <> <> <> <> <> <> <> GetBootFileNumber: PROC[MicrocodeType] RETURNS[BootFileNumber]; <> END.