DIRECTORY Atom, CD, CDSequencer, TerminalIO, CDOrient, CDPanel, CDCallSpecific, CDInline, CDOps, CDProperties, CDExtras, CDViewer USING [DesignOf], Rope, ViewerClasses USING [Viewer]; CDExtraCommands: CEDAR PROGRAM IMPORTS Atom, CDInline, CDOps, CDOrient, CDPanel, CDProperties, CDSequencer, TerminalIO, CDCallSpecific, CDExtras, CDViewer, Rope = BEGIN verbose: BOOL _ TRUE; WriteInLambda: PROC [n: CD.Number] = {TerminalIO.WriteRope[CDExtras.ToLambda[n]]}; CoordinatesCommand: PROC [comm: CDSequencer.Command] = BEGIN TerminalIO.WriteRope["Coordinates"]; TerminalIO.WriteRope[" down: ("]; WriteInLambda[comm.sPos.x]; TerminalIO.WriteRope[","]; WriteInLambda[comm.sPos.y]; TerminalIO.WriteRope[") up: ("]; WriteInLambda[comm.pos.x]; TerminalIO.WriteRope[","]; WriteInLambda[comm.pos.y]; TerminalIO.WriteRope[") dist: ("]; WriteInLambda[comm.pos.x-comm.sPos.x]; TerminalIO.WriteRope[","]; WriteInLambda[comm.pos.y-comm.sPos.y]; TerminalIO.WriteRope[")\n"]; END; WriteInfo: PROC[aptr: CD.ApplicationPtr] = BEGIN x: REF ~ CDProperties.GetPropFromApplication[aptr, $SignalName]; TerminalIO.WriteRope[" ("]; TerminalIO.WriteRope[CDOps.Info[aptr.ob]]; IF x#NIL THEN WITH x SELECT FROM r: Rope.ROPE => TerminalIO.WriteRope[Rope.Concat[" ", r]]; a: ATOM => TerminalIO.WriteRope[Rope.Concat[" ", Atom.GetPName[a]]]; ENDCASE => NULL; TerminalIO.WriteRope[")"]; END; PersonalizedApplicationRect: PROC [aptr: CD.ApplicationPtr] RETURNS [CD.DesignRect] = --should be in CDApplications INLINE BEGIN RETURN [ CDOrient.MapRect[ itemInCell: aptr.ob.p.insideRect[aptr.ob], cellSize: aptr.ob.size, cellInstOrient: aptr.orientation, cellInstPos: aptr.location ] ] END; StatisticCommand: PROC [comm: CDSequencer.Command] = BEGIN countTot: INT _ 0; countSel: INT _ 0; countInvis: INT _ 0; isDesign: BOOL _ FALSE; rect: CD.DesignRect; aptr: CD.ApplicationPtr; TerminalIO.WriteRope["Statistic"]; IF ISTYPE[comm.ref, ViewerClasses.Viewer] THEN [isDesign, , rect] _ CDViewer.DesignOf[NARROW[comm.ref]]; IF ~isDesign THEN rect _ CDInline.universe; FOR l: CD.ApplicationList _ CDOps.AppList[comm.design], l.rest WHILE l#NIL DO countTot _ countTot+1; IF l.first.selected THEN { IF ~CDInline.Intersect[rect, PersonalizedApplicationRect[l.first]] THEN countInvis _ countInvis+1; countSel _ countSel+1; aptr _ l.first } ENDLOOP; TerminalIO.WriteInt[countTot]; TerminalIO.WriteRope[" objects;"]; TerminalIO.WriteInt[countSel]; TerminalIO.WriteRope[" selected"]; IF countSel=1 THEN { WriteInfo[aptr]; IF verbose THEN { TerminalIO.WriteRope[" at: ("]; TerminalIO.WriteInt[aptr.location.x]; TerminalIO.WriteRope[","]; TerminalIO.WriteInt[aptr.location.y]; TerminalIO.WriteRope[") size: ("]; TerminalIO.WriteInt[aptr.ob.size.x]; TerminalIO.WriteRope[","]; TerminalIO.WriteInt[aptr.ob.size.y]; TerminalIO.WriteRope[") orientation-code:"]; TerminalIO.WriteInt[aptr.orientation]; } }; IF countInvis#0 THEN { TerminalIO.WriteRope["\n **** "]; TerminalIO.WriteInt[countInvis]; TerminalIO.WriteRope[" invisible selected objects"]; }; TerminalIO.WriteLn[]; END; SelectIfLevel: CDCallSpecific.CallProc = BEGIN IF aptr.ob.level#NARROW[x, REF CD.Level]^ THEN {done_FALSE; RETURN}; IF aptr.selected THEN RETURN; aptr.selected _ TRUE; repaintMe _ TRUE END; AddSelectLevel: PROC [comm: CDSequencer.Command] = BEGIN n: INT; reflev: REF CD.Level _ NEW[CD.Level_CDPanel.FetchDefaultLevel[comm.design]]; TerminalIO.WriteRope["Select all of current layer: ("]; n _ CDCallSpecific.CallForAll[design: comm.design, whatElse: SelectIfLevel, x: reflev]; TerminalIO.WriteInt[n]; TerminalIO.WriteRope[") objects\n"]; END; DesignMenu: PROC [comm: CDSequencer.Command] = BEGIN ENABLE TerminalIO.UserAbort => GOTO userAbort; Forward: PROC [a: ATOM] = { CDSequencer.ExecuteCommand[comm: comm, as: a, queue: dontQueue]; }; SELECT TerminalIO.RequestSelection[ label: "Design options", choice: LIST["IO", "viewer", "directory", "rename", "un-delete", "select all", "statistic", "flush del's"] ] FROM 1 => Forward[$IOMenu]; 2 => Forward[$ViewerMenu]; 3 => Forward[$DirectoryMenu]; 4 => Forward[$RenameDesign]; 5 => Forward[$Undel]; 6 => Forward[$SelectAll]; 7 => Forward[$Statistic]; 8 => Forward[$FlushUndelList]; ENDCASE => TerminalIO.WriteRope["skipped\n"]; EXITS userAbort => {TerminalIO.WriteRope["discarded\n"]} END; DirectoryMenu: PROC [comm: CDSequencer.Command] = BEGIN ENABLE TerminalIO.UserAbort => GOTO userAbort; Forward: PROC [a: ATOM] = { CDSequencer.ExecuteCommand[comm: comm, as: a, queue: dontQueue]; }; SELECT TerminalIO.RequestSelection[ label: "Directory options", choice: LIST["list direcory", "clean up directory", "remove ob", "rename selected ob", "create cell", "list imports", "list importee", " IO"] ] FROM 1 => Forward[$DisplayCellNames]; 2 => Forward[$DeleteUnUsedObjects]; 3 => Forward[$RemoveCell]; 4 => Forward[$RenameS]; 5 => Forward[$CreateCellS]; 6 => Forward[$DisplayImports]; 7 => Forward[$DisplayImportedEntries]; 8 => Forward[$IOMenu] ENDCASE => TerminalIO.WriteRope["skipped\n"]; EXITS userAbort => {TerminalIO.WriteRope["discarded\n"]} END; IOMenu: PROC [comm: CDSequencer.Command] = BEGIN ENABLE TerminalIO.UserAbort => GOTO userAbort; Forward: PROC [a: ATOM] = { CDSequencer.ExecuteCommand[comm: comm, as: a, queue: dontQueue]; }; SELECT TerminalIO.RequestSelection[ label: "Input / Output", choice: LIST["output", "import", "include", "reload conditions", "chipmonk-output", " list imports", " directory"] ] FROM 1 => Forward[$OutputDesign]; 2 => Forward[$ImportADesign]; 3 => Forward[$IncludeADesign]; 4 => Forward[$CheckConditions]; 5 => Forward[$ChipmonkOutput]; 6 => Forward[$DisplayImports]; 7 => Forward[$DirectoryMenu]; ENDCASE => TerminalIO.WriteRope["skipped\n"]; EXITS userAbort => {TerminalIO.WriteRope["discarded\n"]} END; CDSequencer.ImplementCommand[$AddSelectLevel, AddSelectLevel]; CDSequencer.ImplementCommand[$DesignMenu, DesignMenu]; CDSequencer.ImplementCommand[$IOMenu, IOMenu]; CDSequencer.ImplementCommand[$DirectoryMenu, DirectoryMenu]; CDSequencer.ImplementCommand[$Coordinates, CoordinatesCommand]; CDSequencer.ImplementCommand[$Statistic, StatisticCommand]; END. ¬CDExtraCommands.mesa (part of Chipndale) by Christian Jacobi July 11, 1983 3:42 pm last edited Christian Jacobi February 14, 1984 4:05 pm -- copied from CDOps ÊÖ˜Jšœ*™*Jšœ,™,Jšœ8™8J˜šÏk ˜ Jšœ˜Jšœ˜J˜ J˜ Jšœ ˜ Jšœ˜J˜Jšœ ˜ Jšœ˜Jšœ ˜ Jšœ ˜ Jšœ œ ˜Jšœ˜Jšœœ ˜J˜—šÏnœœ˜Jšœ}˜„—Jš˜J˜Jšœ œœ˜J˜šž œœœ8˜RJ˜—šžœœ˜6Jš˜J˜$J˜#Jšœ˜J˜Jšœ˜J˜"Jšœ˜J˜Jšœ˜J˜$Jšœ&˜&J˜Jšœ&˜&J˜Jšœ˜J˜—šž œœœ˜*Jšœ™Jš˜Jšœœ:˜@Jšœ˜Jšœ*˜*šœœ˜ šœœ˜Jšœœ/˜;Jšœœ>˜EJšœœ˜——Jšœ˜Jšœ˜—J˜š žœœœœœ˜UJšÏc˜Jšœ˜ šœ˜šœ˜Jšœ*˜*Jšœ˜Jšœ!˜!Jšœ˜J˜—J˜—Jšœ˜J˜—šžœœ˜4Jš˜Jšœ œ˜Jšœ œ˜Jšœ œ˜Jšœ œœ˜Jšœœ ˜Jšœœ˜Jšœ"˜"šœœ!˜.Jšœ'œ ˜9—Jšœ œ˜+š œœ6œœ˜MJšœ˜šœœ˜JšœAœ˜bJšœ˜Jšœ˜Jšœ˜—Jšœ˜—JšœB˜BJšœB˜Bšœ œ˜Jšœ˜šœ œ˜J˜Jšœ%˜%J˜Jšœ%˜%J˜#Jšœ$˜$J˜Jšœ$˜$J˜-Jšœ&˜&J˜—Jšœ˜—šœœ˜JšœC˜CJšœ5˜5J˜—Jšœ˜Jšœ˜J˜—šž œ˜(Jš˜Jšœœœœ œœœ˜DJšœœœ˜Jšœœ˜Jšœ ˜Jšœ˜J˜—šžœœ˜2Jš˜Jšœœ˜Jš œœœ œœ/˜LJ˜7J˜WJ˜J˜$Jšœ˜J˜—šž œœ˜.Jšœ˜Jšœœ ˜.šžœœœ˜Jšœ@˜@J˜—šœ˜#J˜Jšœœ^˜jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ&˜-——š˜J˜2—Jšœ˜—J˜šž œœ˜1Jšœ˜Jšœœ ˜.šžœœœ˜Jšœ@˜@J˜—šœ˜#J˜Jšœœ‚˜Žšœ˜Jšœ ˜ Jšœ#˜#Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ&˜&Jšœ˜Jšœ&˜-——š˜J˜2—Jšœ˜—J˜šžœœ˜*Jšœ˜Jšœœ ˜.šžœœœ˜Jšœ@˜@J˜—šœ˜#J˜Jšœœh˜tšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ&˜-——š˜J˜2—Jšœ˜—J˜J˜J˜>Jšœ6˜6Jšœ.˜.Jšœ<˜