DIRECTORY RoseTypes, Inverter, RoseCreate, RoseConvert, SwitchTypes; InverterImpl: CEDAR PROGRAM IMPORTS RoseCreate, RoseConvert EXPORTS Inverter = BEGIN OPEN RoseTypes, Inverter; RegisterCells: PROC = BEGIN Inverter _ RoseCreate.RegisterCellType[name: "Inverter", expandProc: InverterExpand, ioCreator: CreateInverterIO, driveCreator: CreateInverterDrive, evals: [], tests: LIST[[name: "InverterTest", proc: InverterTestInverterTest, stateToo: FALSE]], ports: CreateInverterPorts[] ]; END; otherss: SymbolTable _ RoseCreate.GetOtherss["Inverter.partsAssertions"]; Inverter: PUBLIC CellType; CreateInverterPorts: PROC RETURNS [ports: Ports] = {ports _ RoseCreate.PortsFromFile["Inverter.Inverter.rosePorts"]}; InverterSwitchIORef: TYPE = REF InverterSwitchIORec; InverterSwitchIORec: TYPE = RECORD [ Vdd: SwitchTypes.SwitchVal ,Gnd: SwitchTypes.SwitchVal ,In: SwitchTypes.SwitchVal ,Out: SwitchTypes.SwitchVal ]; InverterSimpleIORef: TYPE = REF InverterSimpleIORec; InverterSimpleIORec: TYPE = RECORD [ fill0: [0 .. 32767], Vdd: BOOLEAN ,fill1: [0 .. 32767], Gnd: BOOLEAN ,fill2: [0 .. 32767], In: BOOLEAN ,fill3: [0 .. 32767], Out: BOOLEAN ]; InverterDriveRef: TYPE = REF InverterDriveRec; InverterDriveRec: TYPE = RECORD [driveRecordInitialPadding: DriveTagType, drive: PACKED ARRAY InverterPort OF DriveLevel]; InverterPort: TYPE = { Vdd, Gnd, In, Out}; CreateInverterIO: PROC [ct: CellType, switch: BOOL] RETURNS [ioAsAny: REF ANY] --IOCreator-- = { ioAsAny _ IF switch THEN NEW[InverterSwitchIORec] ELSE NEW[InverterSimpleIORec]; }; CreateInverterDrive: PROC [ct: CellType] RETURNS [driveAsAny: REF ANY] --DriveCreator-- = { driveAsAny _ NEW[InverterDriveRec]; }; InverterExpand: PROC [thisCell: Cell, to: ExpansionReceiver] --ExpandProc-- = { PrivateLookupNode: PROC [name: ROPE] RETURNS [node: Node] = {node _ RoseCreate.LookupNode[from: thisCell, path: LIST[name]]}; Vdd: Node _ PrivateLookupNode["Vdd"]; Gnd: Node _ PrivateLookupNode["Gnd"]; In: Node _ PrivateLookupNode["In"]; Out: Node _ PrivateLookupNode["Out"]; others: SymbolTable _ RoseCreate.GetOthers[otherss, "Inverter"]; [] _ RoseConvert.Instantiate[thisCell: thisCell, to: to]; }; InverterTestInverterTest: CellTestProc = BEGIN simpleInstr: InverterSimpleIORef _ NARROW[simpleInstructions]; drive: InverterDriveRef _ NARROW[driveAsAny]; BEGIN OPEN drive, simpleInstr; END; END; RegisterCells[]; END.  InverterImpl.Mesa created by RoseTranslate 3.1.3 of September 5, 1985 12:14:34 pm PDT created from Inverter.Rose of September 16, 1985 2:49:19 pm PDT created for Barth.pa created at September 16, 1985 2:49:43 pm PDT Signal Type decls explicitly requested CEDAR: Κή˜Icodešœ™KšœC™CKšœ?™?Kšœ™Kšœ,™,K˜K˜šΟk ˜ K˜:—K˜šΠbl œœ˜Kšœ˜Kšœ ˜—K˜šœœ˜ K˜—K˜šœ™K˜—K˜šΟn œœ˜Kš˜˜8K˜K˜@K˜ KšœœBœ˜UK˜K˜—Kšœ˜—K˜IKšœ œ ˜K˜KšŸœœœT˜uK˜Kšœœœ˜4šœœœ˜$K˜K˜K˜K˜K˜—K˜Kšœœœ˜4šœœœ˜$K˜Kšœ˜ K˜Kšœ˜ K˜Kšœ˜ K˜Kšœ˜ K˜—K˜Kšœœœ˜.Kš œœœ2œœœ ˜zšœœ˜K˜—K˜šŸœœœœ œœΟc œ˜`Kš œ œœœœœ˜PK˜—K˜š Ÿœœœœœ œ˜[Kšœ œ˜#K˜—K˜šŸœœ) œ˜OKš ŸœœœœDœ ˜}K˜%K˜%K˜#K˜%K˜@K˜šœ™J˜9—K˜K˜—K˜˜(Kš˜Kšœ#œ˜>šœœ ˜-Kšœœ˜Kšœ˜—Kšœ˜—K˜K˜K˜Kšœ˜—…— X B