<<>> <> <> <> <> <<>> DIRECTORY CStrings, MesaLoadState, SafeStorage, RefTab; InstallationSupportPrivate: CEDAR DEFINITIONS ~ BEGIN Type: TYPE ~ SafeStorage.Type; LinkType: TYPE ~ {proc, var, signal, startTrap}; Key: TYPE ~ RECORD [ name: CString ¬ NIL, type: Type ]; CString: TYPE ~ CStrings.CString; <> Interface: TYPE ~ REF InterfaceRecord; InterfaceRecord: TYPE ~ MACHINE DEPENDENT RECORD [ key (0): Key, aux(2): AuxInterface ¬ NIL, items(3): SEQUENCE nItems(3): CARD OF LinkItem ]; LinkItem: TYPE ~ RECORD [ SELECT COMPUTED LinkType FROM proc => [proc: PROC], var => [var: POINTER], signal => [var: POINTER], startTrap => [trap: POINTER TO TrapDescriptor], ENDCASE ]; AuxInterface: TYPE ~ REF AuxInterfaceRecord; <> AuxInterfaceRecord: TYPE ~ RECORD [ prohibitDuplicateExports: BOOL ¬ FALSE, unique: BOOL ¬ FALSE, items: SEQUENCE nItems: CARD OF AuxItem ]; UncommittedProcExport: TYPE ~ RECORD[proc: PROC, unitsOut, unitsIn, argsIn: CARD, exporter: Program]; UncommittedVarExport: TYPE ~ RECORD[varPtr: POINTER, exporter: Program]; ImportDesired: TYPE ~ RECORD[unitsOut, unitsIn, argsIn: CARD, importer: Program]; AuxItem: TYPE ~ RECORD [ itemTag: { empty, unboundTrap, startTrap, bound }, uncommitted: SELECT auxTag: * FROM none => [], uncommittedProcExports => [ue: LIST OF UncommittedProcExport], uncommittedVarExport => [uv: LIST OF UncommittedVarExport], importDesired => [ui: LIST OF ImportDesired], ENDCASE ]; Config: TYPE = REF ConfigRep; ConfigRep: PUBLIC TYPE ~ RECORD [ parent: Config, name: CString, controlModule: ControlModule, contents: ProgramAndConfigList, opaque: BOOL, -- in an opaque config, importing or exporting a previously unknown interface enters it in the current config as a "present" interface; in a transparent config, importing or exporting a previously unknown interface enters it in the current config as transparent (meaning that the "present" interface is obtained from an ancestor). interfaces: Environ, started: BOOL ¬ FALSE ]; Environ: TYPE ~ REF EnvironRep; EnvironRep: TYPE ~ RECORD [ SELECT kind: * FROM list => [list: LIST OF Interface], reftab => [tab: RefTab.Ref] ENDCASE ]; Program: TYPE ~ REF ProgramRep; ProgramRep: PUBLIC TYPE ~ RECORD [ name: CString, frame: GlobalFrame, type: Type, main: PROC, parent: Config, exportsTo: LIST OF ExportItem, started: BOOL ]; ControlModule: TYPE ~ RECORD[ first: ProgramAndConfigList, last: ProgramAndConfigList ]; ExportItem: TYPE ~ RECORD[interface: Interface, item: INT]; ProcDescriptor: TYPE ~ RECORD[ code: POINTER, linkInfo: LinkInfo]; LinkInfo: TYPE ~ MACHINE DEPENDENT { global(0), local(1), unbound(2), last(CARD.LAST) }; <> Proc: TYPE ~ POINTER TO ProcDescriptor; TrapDescriptor: TYPE ~ RECORD[ procDesc: ProcDescriptor, shadowedProc: PROC]; ProgramOrConfig: TYPE ~ MesaLoadState.ProgramOrConfig; ProgramAndConfigList: TYPE ~ LIST OF ProgramOrConfig; GlobalFrame: TYPE ~ POINTER; -- not dereferenced. Only used to identify mesa PROGRAMs in the environment InstallationProblems: TYPE ~ MesaLoadState.InstallationProblems; DefaultProblemPrinter: PROC [problems: InstallationProblems]; <> END.