DIRECTORY CD, CDApplications, CDBasics, CDDraw, CDExtras, CDOps, CDValue, CDViewer, CDVPrivate, CDVScale, CDVTicks, CDSequencer, TerminalIO, ViewerOps USING [PaintViewer], ViewerClasses USING [Viewer]; CDVCommands: CEDAR PROGRAM IMPORTS CDApplications, CDDraw, CDExtras, CDOps, CDValue, CDViewer, CDVScale, CDVTicks, CDSequencer, TerminalIO, CDBasics, ViewerOps = BEGIN MyGraphicRef: TYPE = CDVPrivate.MyGraphicRef; lambda: CD.DesignNumber = CD.lambda; RepaintViewer: PROC[mySheet: MyGraphicRef] = INLINE BEGIN ViewerOps.PaintViewer[mySheet.viewer, client, FALSE, NIL] END; WriteLnScale: PROC [me: MyGraphicRef] = BEGIN TerminalIO.WriteRope[" (scale: "]; TerminalIO.WriteInt[me.scale.nscale]; TerminalIO.WriteRope[")\n"]; END; ChangeScale: PROC [me: MyGraphicRef, newScale: INT] = BEGIN newScale _ MIN[MAX[0, newScale], CDVScale.scaleNum-1]; IF me.scale.nscale = newScale THEN TerminalIO.WriteRope["No scale change"] ELSE { oldDesignCenterOffset, newDesignCenterOffset: CD.DesignPosition; viewerCenterOffset: CD.Position _ [me.viewer.cw/2, me.viewer.ch/2]; off: CD.DesignPosition _ me.scale.off; dscale: CDVScale.ScaleRec; TerminalIO.WriteRope["Change scale"]; dscale _ CDVScale.MakeScale[nscale: me.scale.nscale, grid: me.scale.grid]; oldDesignCenterOffset _ CDVScale.ViewerToDesignPosition[dscale, viewerCenterOffset]; dscale _ CDVScale.MakeScale[nscale: newScale, grid: me.scale.grid]; newDesignCenterOffset _ CDVScale.ViewerToDesignPosition[dscale, viewerCenterOffset]; off _ CDBasics.SubPoints[ CDBasics.AddPoints[off, oldDesignCenterOffset], newDesignCenterOffset ]; dscale _ CDVScale.MakeScale[off: off, nscale: newScale, grid: me.scale.grid]; me.scale _ dscale; RepaintViewer[me]; }; WriteLnScale[me]; END; ScaleUp: PROC [comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; i: CARDINAL _ IF mySheet.scale.nscale>0 THEN mySheet.scale.nscale-1 ELSE 0; ChangeScale[mySheet, i]; END; ScaleDown: PROC [comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; ChangeScale[mySheet, mySheet.scale.nscale+1]; END; MoveScreen: PROC [comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; off: CD.DesignPosition; TerminalIO.WriteRope["Move window\n"]; off.x _ mySheet.scale.off.x-(comm.pos.x-comm.sPos.x); off.y _ mySheet.scale.off.y-(comm.pos.y-comm.sPos.y); mySheet.scale _ CDVScale.MakeScale[ off: off, nscale: mySheet.scale.nscale, grid: mySheet.scale.grid ]; RepaintViewer[mySheet]; END; GridInfoComm: PROC [comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; g: INTEGER _ 1; n: INT; TerminalIO.WriteRope["input grid info\n"]; n _ TerminalIO.RequestSelection[ choice: LIST["1/2", "1", " 2", " 4", " 8", "16", "32", "type"], label: "grid"]; SELECT n FROM 1 => g _ lambda/2; 2 => g _ lambda; 3 => g _ 2*lambda; 4 => g _ 4*lambda; 5 => g _ 8*lambda; 6 => g _ 16*lambda; 7 => g _ 32*lambda; 8 => g _ MIN[INT[1000], TerminalIO.RequestInt["Grid :"]]*lambda; ENDCASE => g _ CDValue.FetchInt[boundTo: mySheet.actualDesign, key: $CDxInitGrid, propagation: global]; IF g>0 AND g<=256 THEN { mySheet.scale _ CDVScale.MakeScale[ off: mySheet.scale.off, nscale: mySheet.scale.nscale, grid: g ]; RepaintViewer[mySheet]; } ELSE TerminalIO.WriteRope["value out of range\n"]; END; SetSimplificationComm: PROC[comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; n: INT; TerminalIO.WriteRope["input viewer simplification profile\n"]; n _ TerminalIO.RequestSelection[ choice: LIST["very simplified", "simplified", "standard", "detailed", "very detailed", "all"], label: "simplification treshold" ]; SELECT n FROM 1 => mySheet.suppressFactorForCells _ 0.4; 2 => mySheet.suppressFactorForCells _ 0.7; 3 => mySheet.suppressFactorForCells _ 1; 4 => mySheet.suppressFactorForCells _ 1.6; 5 => mySheet.suppressFactorForCells _ 2.4; 6 => mySheet.suppressFactorForCells _ 0; ENDCASE => mySheet.suppressFactorForCells _ 1; RepaintViewer[mySheet] END; TicksInfoComm: PROC[comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; n: INT; ticks: INT _ 0; TerminalIO.WriteRope["input ticks info\n"]; n _ TerminalIO.RequestSelection[ choice: LIST["off", " 4", " 8", " 16", " 32", "type"], label: "Ticks" ]; SELECT n FROM 1 => ticks _ 0; 2 => ticks _ 4*lambda; 3 => ticks _ 8*lambda; 4 => ticks _ 16*lambda; 5 => ticks _ 32*lambda; 6 => BEGIN n: INT _ TerminalIO.RequestInt["Ticks: "]; IF n>=0 AND n<=LAST[INTEGER]/lambda-1 THEN ticks _ n*lambda ELSE TerminalIO.WriteRope["value out of range\n"]; END; ENDCASE; CDVTicks.ShowTicks[mySheet, ticks]; END; SignalNames: PROC [comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; ViewerOps.PaintViewer[mySheet.viewer, client, FALSE, $DrawSignalNames] END; ShowRectX: PROC [comm: CDSequencer.Command] = BEGIN GetOpposit: PROC[vl: CDViewer.ViewerList, viewer: ViewerClasses.Viewer] RETURNS [ViewerClasses.Viewer] = BEGIN iscolor: BOOL = (viewer.column=color); FOR l: CDViewer.ViewerList _ vl, l.rest WHILE l#NIL DO IF ~l.first.iconic THEN IF (l.first.column=color) # iscolor THEN RETURN [l.first]; ENDLOOP; FOR l: CDViewer.ViewerList _ vl, l.rest WHILE l#NIL DO IF ~l.first.iconic THEN IF l.first.column#viewer.column THEN RETURN [l.first]; ENDLOOP; FOR l: CDViewer.ViewerList _ vl, l.rest WHILE l#NIL DO IF ~l.first.iconic THEN IF l.first#viewer THEN RETURN [l.first]; ENDLOOP; RETURN [viewer]; END; mySheet: MyGraphicRef = NARROW[comm.ref]; vl: CDViewer.ViewerList = CDViewer.ViewersOf[comm.design]; viewer: ViewerClasses.Viewer = GetOpposit[vl, mySheet.viewer]; TerminalIO.WriteRope["Position a viewer\n"]; IF viewer#NIL THEN IF SmallScale[comm] THEN CDViewer.ShowPosition[viewer: viewer, pos: comm.sPos] ELSE CDViewer.ShowAndScale[viewer: viewer, rect: CDBasics.ToRect[comm.pos, comm.sPos]]; END; SmallScale: PROC [comm: CDSequencer.Command] RETURNS [BOOL] = BEGIN min: CD.DesignNumber = 30; RETURN [min>ABS[comm.pos.x-comm.sPos.x] AND min>ABS[comm.pos.y-comm.sPos.y]] END; ScaleToRect: PROC [comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; TerminalIO.WriteRope["Scale viewer"]; IF SmallScale[comm] THEN CDViewer.ShowPosition[viewer: mySheet.viewer, pos: comm.sPos] ELSE CDViewer.ShowAndScale[viewer: mySheet.viewer, rect: CDBasics.ToRect[comm.pos, comm.sPos]]; WriteLnScale[mySheet]; END; ResetScaleComm: PROC [comm: CDSequencer.Command] = BEGIN ResetScale: PROC [mySheet: MyGraphicRef] = BEGIN b: CD.DesignRect; TerminalIO.WriteRope["reset scale (view all)"]; b _ CDExtras.BoundingBox[mySheet.actualDesign]; IF CDBasics.NonEmpty[b] THEN CDViewer.ShowAndScale[viewer: mySheet.viewer, rect: b]; WriteLnScale[mySheet]; END; mySheet: MyGraphicRef = NARROW[comm.ref]; ResetScale[mySheet]; END; ResetScaleToSelectedComm: PROC [comm: CDSequencer.Command] = BEGIN b: CD.DesignRect; mySheet: MyGraphicRef = NARROW[comm.ref]; TerminalIO.WriteRope["reset scale to selection"]; b _ CDApplications.BoundingRect[list: CDOps.AppList[comm.design], selectedOnly: TRUE]; IF CDBasics.NonEmpty[b] THEN { CDViewer.ShowAndScale[viewer: mySheet.viewer, rect: b]; WriteLnScale[mySheet]; } ELSE TerminalIO.WriteRope[" no selection\n"]; END; ResetScaleToPushedComm: PROC [comm: CDSequencer.Command] = BEGIN b: CD.DesignRect; mySheet: MyGraphicRef = NARROW[comm.ref]; TerminalIO.WriteRope["reset scale (to view all of pushed cell)"]; b _ CDApplications.BoundingRect[list: CDOps.AppList[comm.design], selectedOnly: FALSE]; IF CDBasics.NonEmpty[b] THEN CDViewer.ShowAndScale[viewer: mySheet.viewer, rect: b]; WriteLnScale[mySheet]; END; DrawModeComm: PROC [comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; n: INT; TerminalIO.WriteRope["input clip outside current cell mode\n"]; n _ TerminalIO.RequestSelection[ label: "clip outside current cell", choice: LIST["yes", "no"] ]; SELECT n FROM 1 => mySheet.suppressOutsidePushedCell _ TRUE; 2 => mySheet.suppressOutsidePushedCell _ FALSE; ENDCASE => TerminalIO.WriteRope["skipped\n"]; IF n#0 THEN RepaintViewer[mySheet] END; ShowViewers: PROC [comm: CDSequencer.Command] = BEGIN mySheet: MyGraphicRef = NARROW[comm.ref]; TerminalIO.WriteRope["show viewers\n"]; CDDraw.InsertCommand[mySheet.ct, CDDraw.Comm[cmd: ref, erase: FALSE, rect: CDBasics.universe, ref: $ShowViewers]] END; SplitViewer: PROC [comm: CDSequencer.Command] = BEGIN TerminalIO.WriteRope["split viewer\n"]; [] _ CDViewer.CreateViewer[comm.design] END; CDSequencer.ImplementCommand[$ScaleLessDetail, ScaleDown,, dontQueue]; CDSequencer.ImplementCommand[$ScaleMoreDetail, ScaleUp,, dontQueue]; CDSequencer.ImplementCommand[$MoveScreen, MoveScreen,, dontQueue]; CDSequencer.ImplementCommand[$DisplayNames, SignalNames,, doQueue]; CDSequencer.ImplementCommand[$ShowRectX, ShowRectX,, dontQueue]; CDSequencer.ImplementCommand[$ShowRect, ScaleToRect,, dontQueue]; CDSequencer.ImplementCommand[$ResetScaleAll, ResetScaleComm,, dontQueue]; CDSequencer.ImplementCommand[$ResetScaleTop, ResetScaleToPushedComm,, dontQueue]; CDSequencer.ImplementCommand[$ResetScaleSel, ResetScaleToSelectedComm,, dontQueue]; CDSequencer.ImplementCommand[$DisplayViewers, ShowViewers,, doQueue]; CDSequencer.ImplementCommand[$SplitViewer, SplitViewer,, dontQueue]; CDSequencer.ImplementCommand[$GridInfo, GridInfoComm,, dontQueue]; CDSequencer.ImplementCommand[$TicksInfo, TicksInfoComm,, doQueue]; CDSequencer.ImplementCommand[$DrawMode, DrawModeComm,, doQueue]; CDSequencer.ImplementCommand[$SetSimplification, SetSimplificationComm,, dontQueue]; END. @CDVCommands.mesa (part of Chipndale) Copyright c 1983, 1984 by Xerox Corporation. All rights reserved. by Christian Jacobi June 29, 1983 4:44 pm last edited Christian Jacobi November 5, 1984 10:21:51 am PST --gets viewer on different screen if possible, --else different viewer, if possible... --ShowRectX Ê =˜šœ&™&Jšœ Ïmœ7™BJšœ,™,Jšœ?™?J˜—šÏk ˜ Jšžœ˜J˜J˜ J˜J˜ Jšœ˜Jšœ˜J˜ Jšœ ˜ J˜ Jšœ ˜ Jšœ ˜ J˜ Jšœ žœ˜Jšœžœ ˜J˜—šÏb œžœž˜Jšžœ€˜‡—Jšž˜Jšœžœ˜-Jšœžœžœ˜$J˜šÏn œžœ˜-Jšžœž˜ Jšœ.žœžœ˜9Jšžœ˜J˜—š  œžœ˜'Jšž˜J˜"Jšœ%˜%J˜Jšžœ˜—J˜š  œžœžœ˜5Jšž˜Jšœ žœžœ%˜7Jšžœžœ(˜Jšžœ˜Jšœ.žœ˜@Jšœžœ-˜CJšœžœ˜&Jšœ˜J˜%JšœJ˜JJšœT˜TJšœC˜CJšœT˜Tšœ˜Jšœ0˜0Jšœ˜Jšœ˜—JšœM˜MJšœ˜Jšœ˜Jšœ˜—Jšœ˜Jšžœ˜J˜—š œžœ˜+Jšž˜Jšœžœ ˜)Jš œžœžœžœžœ˜KJ˜Jšžœ˜J˜—š  œžœ˜-Jšž˜Jšœžœ ˜)Jšœ.˜.Jšžœ˜J˜—š  œžœ˜.Jšž˜Jšœžœ ˜)J˜J˜&J˜5J˜6šœ#˜#Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜—Jšœ˜Jšžœ˜J˜—š  œžœ˜0Jšžœ˜Jšœžœ ˜)Jšœžœ˜Jšœž˜Jšœ*˜*šœ ˜ Jšœžœ3˜?J˜—šžœž˜ J˜J˜J˜J˜J˜J˜J˜Jšœ žœžœ0˜@šžœ˜ Jšœ\˜\——šžœžœžœ˜šœ#˜#Jšœ˜Jšœ˜Jšœ˜J˜—Jšœ˜J˜—Jšžœ.˜2Jšžœ˜J˜—š œžœ˜8Jšžœ˜ Jšœžœ ˜)Jšœž˜Jšœ>˜>šœ ˜ JšœžœR˜^J˜ J˜—šžœž˜ Jšœ*˜*Jšœ+˜+Jšœ)˜)Jšœ*˜*Jšœ*˜*Jšœ(˜(Jšžœ'˜.—Jšœ˜Jšžœ˜J˜—š  œžœ˜0Jšžœ˜ Jšœžœ ˜)Jšœžœ˜Jšœžœ˜Jšœ+˜+šœ ˜ Jšœžœ,˜8J˜J˜—šžœž˜ J˜J˜J˜J˜J˜šœž˜ Jšœžœ$˜*Jš žœžœžœžœ žœ˜;Jšžœ/˜3Jšžœ˜—Jšžœ˜—Jšœ#˜#Jšžœ˜J˜—š  œžœ˜/Jšžœ˜Jšœžœ ˜)Jšœ.žœ˜FJšžœ˜J˜—šÐbn œžœ˜-Jšž˜J˜š  œžœ8žœ˜hJšœ.™.Jšœ'™'Jšž˜Jšœ žœ˜&šžœ%žœžœž˜6Jš žœžœžœ"žœžœ ˜RJšžœ˜—šžœ%žœžœž˜6Jš žœžœžœžœžœ ˜NJšžœ˜—šžœ%žœžœž˜6Jš žœžœžœžœžœ ˜@Jšžœ˜—Jšžœ ˜Jšžœ˜J˜—Jšœ ™ Jšœžœ ˜)Jšœ:˜:Jšœ>˜>Jšœ,˜,šžœžœžœ˜Jšžœžœ6˜NJšžœS˜W—Jšžœ˜—J˜š  œžœžœžœ˜=Jšž˜Jšœžœ˜Jšžœžœžœžœ˜LJšžœ˜—J˜š¡ œžœ˜/Jšž˜Jšœžœ ˜)Jšœ%˜%Jšžœžœ>˜VJšžœ[˜_Jšœ˜Jšžœ˜—J˜š¡œžœ˜2Jšž˜J˜š¡ œžœ˜*Jšž˜Jšœžœ ˜Jšœ/˜/Jšœ/˜/Jšžœžœ8˜TJšœ˜Jšžœ˜J˜—Jšœžœ ˜)Jšœ˜Jšžœ˜—J˜š¡œžœ˜žœ.˜qJšžœ˜—J˜š¡ œžœ˜/Jšž˜Jšœ'˜'J˜'Jšžœ˜—J˜J˜JšœF˜FJšœD˜DJšœB˜BJšœC˜CJšœ@˜@JšœA˜AJšœI˜IJšœQ˜QJšœS˜SJšœE˜EJšœD˜DJšœB˜BJšœB˜BJšœ@˜@JšœT˜TJšžœ˜J˜—…—%&0£