<> <> <> <> <> <> <> <<>> DIRECTORY CD, CDAtomicObjects, CDCells, CDProperties, CDRects, CDSymbolicObjects, CDTexts, CMos, CoreGeometry, PW, Sinix, SinixOps; SinixCMosA: CEDAR PROGRAM IMPORTS CD, CDCells, CDProperties, CDRects, CDSymbolicObjects, CDTexts, CMos, CoreGeometry, PW, Sinix, SinixOps SHARES CDCells, CDRects, CDSymbolicObjects, CDTexts = BEGIN <> mode: Sinix.Mode _ NEW [Sinix.ModeRec _ [ extractProcProp: PW.RegisterProp[$CMosAExtractProc, TRUE], decoration: CoreGeometry.CreateDecoration["CMosA"], instanceEqualProc: Sinix.CompareProperties, objectEqualProc: Sinix.AlwaysTrue, instanceLayer: Sinix.DefaultInstanceLayer, touchProc: Touch, nameProc: Sinix.DefaultName ]]; Touch: CoreGeometry.TouchProc = { IF instance1.obj.class=CDRects.bareRectClass AND instance1.obj.layer=CMos.pwellCont THEN instance1.obj _ CDRects.CreateRect[CD.InterestSize[instance1.obj], CMos.pwell]; IF instance1.obj.class=CDRects.bareRectClass AND instance1.obj.layer=CMos.nwellCont THEN instance1.obj _ CDRects.CreateRect[CD.InterestSize[instance1.obj], CMos.nwell]; IF instance2.obj.class=CDRects.bareRectClass AND instance2.obj.layer=CMos.pwellCont THEN instance2.obj _ CDRects.CreateRect[CD.InterestSize[instance2.obj], CMos.pwell]; IF instance2.obj.class=CDRects.bareRectClass AND instance2.obj.layer=CMos.nwellCont THEN instance2.obj _ CDRects.CreateRect[CD.InterestSize[instance2.obj], CMos.nwell]; RETURN CoreGeometry.Touch[touch, instance1, instance2]; }; <> Set: PROC [ref: REF, extractAtom: ATOM] = INLINE { WITH ref SELECT FROM class: CD.ObjectClass => CDProperties.PutProp[class, mode.extractProcProp, extractAtom]; className: ATOM => CDProperties.PutProp[CD.FetchObjectClass[className, CMos.cmos], mode.extractProcProp, extractAtom]; ENDCASE => ERROR; }; <> CDProperties.PutLayerProp[CMos.ndif, $RoutingLayer, $RoutingLayer]; CDProperties.PutLayerProp[CMos.pdif, $RoutingLayer, $RoutingLayer]; CDProperties.PutLayerProp[CMos.pol, $RoutingLayer, $RoutingLayer]; CDProperties.PutLayerProp[CMos.met, $RoutingLayer, $RoutingLayer]; CDProperties.PutLayerProp[CMos.met2, $RoutingLayer, $RoutingLayer]; <> SinixOps.RegisterDefaultLayoutMode[mode, CMos.cmos]; <> Set[ CDCells.pCellClass, $ExtractCell]; Set[ PW.indirectClass, $ExtractIndirect]; Set[ PW.abutXClass, $ExtractAbut]; Set[ PW.abutYClass, $ExtractAbut]; Set[ PW.rotationClass, $ExtractRotation]; Set[ CDSymbolicObjects.pinClass, $ExtractPin]; Set[ CDSymbolicObjects.segmentClass, $ExtractPin]; Set[ CDSymbolicObjects.markClass, $ExtractPin]; <> Set[ CDRects.bareRectClass, $ExtractRect]; Set[ CDRects.wellRectClass, $ExtractWellAtomic]; <> Set[ $CSimpleCon, $ExtractAtomic]; Set[ $CWellSimpleCon, $ExtractWellAtomic]; Set[ $CButtingCont, $ExtractAtomic]; Set[ $CWellButtingCont, $ExtractWellAtomic]; Set[ $CVia, $ExtractAtomic]; Set[ $CDifShortCon, $ExtractAtomic]; Set[ $CWellDifShortCon, $ExtractWellAtomic]; <> Set[ $CTrans, $ExtractTransistor]; Set[ $CWellTrans, $ExtractTransistor]; <> Set[ $CLTrans, $ExtractTransistor]; Set[ $CLWellTrans, $ExtractTransistor]; <> Set[ CDTexts.rigidTextClass, $ExtractNull]; Set[ CDTexts.flipTextClass, $ExtractNull]; END.