DIRECTORY CDCommandOps, CDSequencer, CoreCDUser, CoreClasses, CoreCreate, CoreOps, IO, TerminalIO; CoreHacks: CEDAR PROGRAM IMPORTS CDCommandOps, CoreOps, CoreCDUser, CoreClasses, IO, TerminalIO = BEGIN OPEN CoreCreate; hackMenu: ATOM _ $SpecialMenu; -- where DAUserHacks commands are forcefully registered Count: PROC [cellType: CellType] RETURNS [nb: INT _ 0] ~ { data: CoreClasses.RecordCellType; cellType _ CoreOps.ToBasic[cellType]; -- think about this!!! SELECT cellType.class FROM CoreClasses.recordCellClass => { data _ NARROW[cellType.data]; FOR i: NAT IN [0..data.size) DO nb _ nb+Count[data.instances[i].type]; ENDLOOP; }; CoreClasses.transistorCellClass => RETURN [1]; ENDCASE => ERROR; }; ExtractAndMeasure: PROC [comm: CDSequencer.Command] = { Measure: CoreCDUser.EachRootCellTypeProc ~ { TerminalIO.PutF["\nEstimating transistors count\n"]; TerminalIO.PutF["%g transistors\n", IO.int[Count[root]]]; }; [] _ CoreCDUser.EnumerateSelectedCellTypes[comm.design, Measure]; }; CDCommandOps.RegisterWithMenu[hackMenu, "Count transistors", "Estimate number of transistors", $ExtractAndMeasure, ExtractAndMeasure]; END.  CoreHacks.mesa Copyright Σ 1987 by Xerox Corporation. All rights reserved. written by Ch. Louis Monier October 25, 1988 2:25:01 pm PDT Statistics Init Κˆ˜codešœ™K™—Kšœœœ ˜—head™ Kšœ œΟc7˜VšΟnœœœœ ˜:Kšœ!˜!Kšœ&Ÿ˜<šœ˜šœ ˜ Kšœœ˜šœœœœ˜ Kšœ'˜'Kšœ˜—Kšœ˜—Kšœ#œ˜.Kšœœ˜—K˜K˜—š œœ ˜7š œ%˜,Jšœ4˜4Jšœ$œ˜9K˜—JšœA˜AJ˜—K˜—™Kšœ†˜†K˜K˜K˜K˜—Kšœ˜K˜—…—vž