<<>> <> <> <> <> <> <<>> <<>> DIRECTORY AtomPrivate USING [UnsafeMakeAtomFromString], ProcessorFace USING [ProcessorID, ProcessorType]; ProcessorFaceImpl: CEDAR PROGRAM IMPORTS AtomPrivate EXPORTS ProcessorFace = BEGIN <> <> processorID: PUBLIC ProcessorFace.ProcessorID = GetProcessorID[]; <> <<>> GetProcessorID: PRIVATE PROC RETURNS [processorID: ProcessorFace.ProcessorID] ~ TRUSTED { GetProcessorIDInner: PROC [pid: POINTER TO ProcessorFace.ProcessorID] = TRUSTED MACHINE CODE { "+extern void XR_getxnshostid();.XR_getxnshostid" }; GetProcessorIDInner[@processorID]; }; GetProcessorType: PUBLIC PROC RETURNS [ProcessorFace.ProcessorType] = TRUSTED { Doit: PROC [] RETURNS [ProcessorFace.ProcessorType] ~ TRUSTED MACHINE CODE { "XR_GetProcessorType" }; RETURN[ Doit[] ]; }; decAtom, rs6000Atom, sun3Atom, sun4Atom, unknownAtom: ATOM; lastProcessorType: ProcessorFace.ProcessorType ~ decstation; GetProcessorTypeName: PUBLIC PROC [type: ProcessorFace.ProcessorType] RETURNS [ATOM] = { SELECT type FROM sun3 => RETURN [sun3Atom]; sun4 => RETURN [sun4Atom]; rs6000 => RETURN [rs6000Atom]; decstation => RETURN [decAtom]; ENDCASE => RETURN [unknownAtom]; }; ProcessorTypeFromName: PUBLIC PROC [name: ATOM] RETURNS [ProcessorFace.ProcessorType] = { SELECT name FROM sun3Atom => RETURN [sun3]; sun4Atom => RETURN [sun4]; rs6000Atom => RETURN [rs6000]; decAtom => RETURN [decstation]; ENDCASE => RETURN [LAST[ProcessorFace.ProcessorType]]; }; LastProcessorType: PUBLIC PROC RETURNS[ProcessorFace.ProcessorType] ~ { RETURN[lastProcessorType] }; <<>> TRUSTED { decAtom ¬ AtomPrivate.UnsafeMakeAtomFromString["decstation"]; rs6000Atom ¬ AtomPrivate.UnsafeMakeAtomFromString["rs6000"]; sun3Atom ¬ AtomPrivate.UnsafeMakeAtomFromString["sun3"]; sun4Atom ¬ AtomPrivate.UnsafeMakeAtomFromString["sun4"]; unknownAtom ¬ AtomPrivate.UnsafeMakeAtomFromString["unknown"]; }; <<>> END.