DIRECTORY CD, CDDraw USING [CommandTable], ViewerClasses, Graphics USING [Context], PrincOps USING [BBptr], Rope USING [ROPE]; CDVPrivate: CEDAR DEFINITIONS = BEGIN catchAny: BOOL; --catches low level errors; set to false for debugging catchAnyWhichDeadlock: BOOL; --set to false for debugging scaleNum: CARDINAL = 19; ScaleRange: TYPE = [0..scaleNum); defaultScale: INTEGER = 4; noDivisionScale: INTEGER = 8; ScaleDesignToViewer: PROC [me: MyGraphicRef, d: CD.DesignNumber] RETURNS [CD.Number] = INLINE BEGIN IF me.nscale<=noDivisionScale THEN RETURN [d*me.sE] ELSE RETURN [d/me.sF]; END; DesignToViewerPosition: PROC[me: MyGraphicRef, designPos: CD.DesignPosition] RETURNS [viewerPos: CD.Position] = INLINE BEGIN IF me.nscale<=noDivisionScale THEN RETURN[[ (designPos.x-me.noff.x)*me.sE, (designPos.y-me.noff.y)*me.sE ]] ELSE RETURN[[ (designPos.x-me.noff.x)/me.sF, (designPos.y-me.noff.y)/me.sF ]] END; DesignToViewerRect: PROC[me: MyGraphicRef, designRect: CD.DesignRect] RETURNS [CD.Rect] = INLINE BEGIN IF me.nscale<=noDivisionScale THEN RETURN[CD.Rect[ x1: (designRect.x1-me.noff.x)*me.sE, y1: (designRect.y1-me.noff.y)*me.sE, x2: (designRect.x2-me.noff.x)*me.sE, y2: (designRect.y2-me.noff.y)*me.sE ]] ELSE RETURN[CD.Rect[ x1: (designRect.x1-me.noff.x)/me.sF, y1: (designRect.y1-me.noff.y)/me.sF, x2: (designRect.x2-me.noff.x)/me.sF, y2: (designRect.y2-me.noff.y)/me.sF ]] END; ScaleViewerToDesign: PROC [me: MyGraphicRef, v: LONG CARDINAL] RETURNS [CD.DesignNumber] = INLINE BEGIN RETURN [LOOPHOLE[(v*me.sA+me.sB)/me.sC*me.sD, CD.DesignNumber]] END; ViewerToDesignPosition: PROC[me: MyGraphicRef, viewerPos: CD.Position] RETURNS [designPos: CD.DesignPosition] = INLINE BEGIN RETURN[[ ScaleViewerToDesign[me, viewerPos.x]+me.noff.x, ScaleViewerToDesign[me, viewerPos.y]+me.noff.y]] END; SetScale: PROC [me: MyGraphicRef, scale: INTEGER, grid: CARDINAL, noff: CD.DesignPosition]; SavedRect: TYPE = RECORD [ r: CD.DesignRect, l: CD.Level ]; MyGraphicRef: TYPE = REF MyGraphicRec; -- for NEW use only NewAndLink MyGraphicRec: TYPE = RECORD [ viewer: ViewerClasses.Viewer _ NIL, xBLT: PrincOps.BBptr, --painting bBLT: PrincOps.BBptr, --outlining screen: LONG POINTER, bpp: CARDINAL, -- bits per pixel (1, 4, 8) logbpp: CARDINAL, colorTable: REF ColorTable, greyTable: REF ColorTable, backGround: REF Brick, scWidth: CARDINAL, -- Screen width in pixels scWidthBits: CARDINAL, -- Screen width in bits scWidthWords: CARDINAL, -- Screen width in words scHeight: CARDINAL, -- Screen height in pixels=lines vx, vy: CARDINAL, -- coordinates of viewer context origin in bitmap vwminus1, vhminus1: CARDINAL, -- size of viewer bmSize: CD.Position _ [0, 0], viewerContext: Graphics.Context_NIL, ct: CDDraw.CommandTable_NIL, saveList: LIST OF SavedRect_NIL, deviceDrawRef: CD.DrawRef_NIL, entered: BOOL _ FALSE, actualDesign: CD.Design_NIL, stoprequest: REF BOOLEAN, hurryUp: BOOLEAN _ FALSE, running: BOOLEAN _ FALSE, ticks: CARDINAL _ 0, suppressOutsidePushedCell: BOOL _ FALSE, suppressFactorForCells: REAL _ 1.0, nscale: INTEGER, ngrid: INTEGER, cellClipp: CD.DesignNumber_-1, noff: CD.DesignPosition _ [0, 0], sA, sB, sC, sD: CARDINAL, sE, sF, sShift: INTEGER, usedCursor: OutLineProc, startVC, stopVC: CD.DesignPosition, onVC: BOOLEAN _ FALSE, cursorInhibitations: CARDINAL_0, -- MONITORED firstHorizontalVC: BOOLEAN _ TRUE, defaultWidthVC: CD.Number, -- width of cursored wire link: MyGraphicRef_NIL, designRec: REF PrivatePerDesign, arrowRect: CD.DesignRect, -- the arrow's size backtransformed in design arrowIsOn: BOOL_FALSE, tempRef: REF ANY_NIL, tempCard: CARDINAL_0, tempBool: BOOL_FALSE, tempRect: CD.Rect_[0,0,0,0], tempPos: CD.DesignPosition_[0,0] ]; PrivatePerDesign: TYPE = RECORD [ arrowOn: BOOL_FALSE, arowAt: CD.DesignPosition, startLCValid: BOOL_FALSE, -- Logical Cursors startLC: CD.DesignPosition_[0,0], stopLC: CD.DesignPosition_[0,0], firstHLC: BOOL_FALSE, widthLC: CD.DesignNumber_0, currentLevel: CD.Level, modeLC: CursorMode, outlineProcLC: OutLineProc, xMode: BOOL _ FALSE, -- usefull for wiringmode, pendingdeletemode, but only one per tip table... mark: CD.DesignPosition_[0,0] -- in future replace completely by startLC? ]; NewAndLink: PROC [design: CD.Design] RETURNS [MyGraphicRef]; UnLink: PROC [me: MyGraphicRef]; linkBase: PRIVATE MyGraphicRef; --xx Drawing xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CreateDrawInformation: PROC [me: MyGraphicRef] RETURNS [CD.DrawRef]; RepaintRectAreaInViewer: PROC[me: MyGraphicRef, rect: CD.DesignRect, eraseFirst: BOOL]; RepaintBackground: PROC[me: MyGraphicRef, r: CD.DesignRect, eraseFirst: BOOL]; PaintTicks: PROC [me: MyGraphicRef, r: CD.DesignRect]; DrawCommentForViewers: PROCEDURE[r: CD.DesignRect, comment: Rope.ROPE, pr: CD.DrawRef]; CreateChipndaleViewer: PROC[design: CD.Design]; ShowArrow: PROC [design: CD.Design, pos: CD.DesignPosition]; RemoveArrow: PROC[design: CD.Design]; CursorMode: TYPE = {cLBox, cBox, cArrow, cPos, cDont, cShadow, cOther}; OutLineProc: TYPE = PROC[me: MyGraphicRef]; SetCursorMode: PROC[me: MyGraphicRef, mode: CursorMode]; LCursor: PROC [me: MyGraphicRef]; BoxCursor: PROC [me: MyGraphicRef]; LineCursor: PROC [me: MyGraphicRef]; PosCursor: PROC [me: MyGraphicRef]; DontCursor: PROC [me: MyGraphicRef]; ShadowCursor: PROC [me: MyGraphicRef]; InvertArea: PROC[me: MyGraphicRef, x1, y1, x2, y2: INT]; TeachColor: PROC[lev: CD.Level, bpp: CARDINAL, brick: Brick]; TeachGrey: PROC[lev: CD.Level, bpp: CARDINAL, brick: Brick]; TeachColorCode: PROC[lev: CD.Level, bpp: CARDINAL, code: CARDINAL]; Brick: TYPE = ARRAY [0..4) OF CARDINAL; ColorTable: TYPE = ARRAY CD.Level OF REF Brick; colorTableBW: REF ColorTable; colorTable4: REF ColorTable; colorTable8: REF ColorTable; greyTableBW: REF ColorTable; greyTable4: REF ColorTable; greyTable8: REF ColorTable; --xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx CreateViewer: PROC [design: CD.Design] RETURNS [ViewerClasses.Viewer]; BackDoor: PROC[REF]; END. *CDVPrivate.mesa (Viewer definitions for Chipndale) by Christian Jacobi July 15, 1983 11:16 am last edited by Christian Jacobi November 23, 1983 3:52 pm --xx Scaling xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --Scaling must be real fast --without necessary translation --without necessary translation, --this procedure uses grid --modifyes noff, such that grid conditions are satisfied --xx Data xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ----------- ----------- --transformation (scaling) and grid --cursor tracking information (Visible Cursors) --book keeping --showing a mark --debugging new features: --mark is a logical mark, independent of visibility --owned and changed by the Notify procedure --xx Main xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --split or create --xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --Cursor --sets modeLC, outlineProcLC --do no more export the real cursor procedures if SetCursorMode works x1, y1, x2, y2 in viewers coordinates --xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --sets value into the default ColorTable --and resets default greytable --sets value into the default GreyTable --sets value into the default Color- and GreyTable Ê À˜Jšœ9™9Jšœ-™-Jšœ;™;J˜šÏk ˜ Jšœ˜Jšœœ˜Jšœ˜Jšœ œ ˜Jšœ œ ˜Jšœœœ˜J˜—JšÏn œœ œ˜Jš˜J˜Jšœ œÏc6˜FJšœœŸ˜9J˜JšœO™OJšœ™J˜Jšœ œ˜Jšœ œ˜"Jšœœ˜Jšœœ˜J˜š žœœœœœ ˜WJšœ™Jšœ˜ Jšœ œ œ ˜JJšœ˜—J™šžœœœ˜MJšœ œ ˜"Jšœ˜ šœ˜"šœ˜Jšœ˜Jšœ˜Jšœ˜——š˜šœ˜Jšœ˜Jšœ˜Jšœ˜——Jšœ˜—J˜šžœœœ ˜FJšœœ˜Jšœ˜ šœ˜"šœ ˜Jšœ$˜$Jšœ$˜$Jšœ$˜$Jšœ#˜#Jšœ˜——š˜šœ ˜Jšœ$˜$Jšœ$˜$Jšœ$˜$Jšœ#˜#Jšœ˜——Jšœ˜—J˜J˜š žœœœœœœ˜[Jšœ!™!J™Jšœ˜ Jšœœœ˜?Jš˜—J˜š žœœœ œ œ˜oJšœ˜ šœ˜J˜/J˜0—Jšœ˜—J˜š žœœœœœ˜[Jšœ8™8—J˜J˜JšœL™LJ˜šœ œœ˜Jšœœ ˜Jšœœ˜ J˜J˜—JšœœœŸ˜GJ˜šœœœ˜Jšœœ˜#J™Jšœ ™ JšœŸ ˜ JšœŸ ˜!Jšœœœ˜JšœœŸ˜,Jšœœ˜Jšœ œ ˜Jšœ œ ˜Jšœ œ˜Jšœ œŸ˜,Jšœ œŸ˜.JšœœŸ˜0Jšœ œŸ ˜4JšœœŸ1˜DJšœœŸ˜/J™Jšœ ™ Jšœœ˜Jšœ œ˜%Jšœœ˜Jšœ œœ œ˜ Jšœœ œ˜Jšœ œœ˜Jšœœœ˜Jšœ œœ˜Jšœ œœ˜Jšœ œœ˜Jšœœ˜Jšœœœ˜(Jšœœ˜#J™Jšœ#™#Jšœœ˜Jšœœ˜J˜Jšœœ˜!Jšœœ˜Jšœœ˜J™Jšœ0™0J˜Jšœœ˜#Jšœœœ˜JšœœŸ ˜-Jšœœœ˜"Jšœœ Ÿ˜4J™Jšœ™Jšœœ˜Jšœ œ˜ J™Jšœ™Jšœ œŸ-˜HJšœ œœ˜J˜Jšœ™Jšœ œœœ˜Jšœ œ˜Jšœ œœ˜Jšœ œ˜Jšœ œ˜ J˜J˜—šœœœ˜!Jšœ œœ˜šœœ˜J˜—JšœœœŸ˜.Jšœ œ˜!Jšœœ˜ Jšœ œœ˜Jšœ œ˜Jšœœ˜J˜J˜J˜JšœœœŸK˜aJ˜šœœŸ+˜OJšœ3™3Jšœ+™+—J˜J˜J˜—Jšž œœ œ œ˜