<> <> <> <<>> <> <<>> <> <<>> DIRECTORY Camelot, CamelotMIG, Mach, YggBuffMan USING[WriteBytes], YggdrasilInit; <<>> YggSRProcsImpl: CEDAR PROGRAM IMPORTS YggBuffMan, YggdrasilInit EXPORTS CamelotMIG ~ BEGIN <> <<>> SRRestoreObjectX: PUBLIC PROC [sPort: Mach.portT, optr: Camelot.optrT, value: Mach.pointerT, valueCnt: CARD] ~ { SRRestoreObject[sPort, optr, value, valueCnt]; }; <<>> SRRestoreBatchX: PUBLIC PROC [sPort: Mach.portT, dataPtr: Mach.pointerT, dataPtrCnt: CARD] ~ { SRRestoreBatch [sPort: sPort, dataPtr: dataPtr, dataPtrCnt: dataPtrCnt]; }; <<>> SRRePrepareX: PUBLIC PROC [sPort: Mach.portT, btid: Camelot.btidT, prepareData: Mach.pointerT, prepareDataCnt: CARD] ~ { SRRePrepare[sPort: sPort, btid: btid, prepareData: prepareData, prepareDataCnt: prepareDataCnt]; }; SRRecoveryCompleteX: PUBLIC PROC [sPort: Mach.portT] ~ { SRRecoveryComplete[sPort]; }; <> <<>> SRRestoreObject: PROC [sPort: Mach.portT, optr: Camelot.optrT, value: Mach.pointerT, valueCnt: CARD] ~ { <> <> YggBuffMan.WriteBytes[optr: optr, value: LOOPHOLE[value], valueCnt: valueCnt]; }; <<>> <<>> SRRestoreBatch: PROC [sPort: Mach.portT, dataPtr: Mach.pointerT, dataPtrCnt: CARD] ~ { <> <> restoreBlock: TYPE = RECORD[ optr: Camelot.optrT, value: Mach.pointerT, valueCnt: CARD ]; nowDataPtr: LONG POINTER TO restoreBlock _ LOOPHOLE[dataPtr]; FOR counter: CARD IN [0..dataPtrCnt) DO TRUSTED {SRRestoreObject[sPort, nowDataPtr.optr, nowDataPtr.value, nowDataPtr.valueCnt]; }; nowDataPtr _ nowDataPtr + UNITS[restoreBlock]; ENDLOOP; }; <<>> <<>> SRRePrepare: PROC [sPort: Mach.portT, btid: Camelot.btidT, prepareData: Mach.pointerT, prepareDataCnt: CARD] ~ { <> <> ERROR; }; <<>> <<>> SRRecoveryComplete: PROC [sPort: Mach.portT] ~ { <> <> YggdrasilInit.RecoveryComplete[]; }; <<>> <<>> <> END.