<<>> <> <> <> <> DIRECTORY Rope USING [ROPE], SafeStorage USING [Type]; MesaLoadState: CEDAR DEFINITIONS ~ BEGIN BeginInstallation: PROC []; <> <<>> CommitInstallation: PROC []; <> <<>> AbortInstallation: PROC[]; <> <<>> CheckInstallation: PROC[ report: ReportProc ]; <> <<>> ReportProc: TYPE ~ PROC[ problem: InstallationProblem ]; ProblemKind: TYPE ~ {unboundImport, multipleExports, reExport, interfaceVersionMismatch, typeClash}; InstallationProblem: TYPE ~ RECORD[ interface: Interface, item: INT, problem: SELECT problemKind: ProblemKind FROM unboundImport => [importer: Program], multipleExports => [exporter: Program], reExport => [exporter: Program], interfaceVersionMismatch => [], typeClash => [typeName: Rope.ROPE, now: Program, already: Program] -- it is strongly urged that a client seeing a typeClash abort the installation: safety cannot be guaranteed in the presence of typeClashes. ENDCASE ]; InstallationProblems: TYPE ~ LIST OF InstallationProblem; Interface: TYPE ~ REF InterfaceRecord; Program: TYPE ~ REF ProgramRep; Config: TYPE ~ REF ConfigRep; InterfaceRecord: TYPE; ProgramRep: TYPE; ConfigRep: TYPE; ProgramOrConfig: TYPE ~ RECORD[ SELECT type: * FROM program => [program: Program], config => [config: Config], ENDCASE ]; ProgramAndConfigList: TYPE ~ LIST OF ProgramOrConfig; GlobalConfig: PROC[] RETURNS [Config]; Parent: PROC[object: ProgramOrConfig] RETURNS [Config]; EnumerateChildren: PROC[config: Config, proc: ChildProc]; ChildProc: TYPE ~ PROC[child: ProgramOrConfig]; EnumerateInterfaces: PROC[config: Config, proc: InterfaceProc]; InterfaceProc: TYPE ~ PROC[interface: Interface, transparent: BOOL]; <> EnumerateExports: PROC[program: Program, proc: ExportItemProc]; ExportItemProc: TYPE ~ PROC[interface: Interface, item: INT]; ObjectName: PROC[object: ProgramOrConfig] RETURNS [Rope.ROPE]; QualifiedName: PROC[object: ProgramOrConfig] RETURNS [Rope.ROPE]; <> ProgramType: PROC[program: Program] RETURNS[SafeStorage.Type]; InterfaceName: PROC[Interface] RETURNS [Rope.ROPE]; InterfaceType: PROC[Interface] RETURNS[SafeStorage.Type]; TypeStringFromType: PROC[type: SafeStorage.Type] RETURNS[typeString: STRING]; TypeFromTypeString: PROC[typeString: STRING] RETURNS[type: SafeStorage.Type]; ConcreteTypeFromAbstractType: PROC[abstract: SafeStorage.Type] RETURNS[concrete: SafeStorage.Type]; END.