DIRECTORY Containers USING [Container], Graphics USING [Box], IO USING [STREAM], Menus USING [Menu, MenuProc], Rope USING [ROPE], ViewerClasses USING [Viewer]; IconEditorDefs: CEDAR DEFINITIONS = BEGIN iconW: INTEGER = 64; -- width and height of an icon (in bits) iconH: INTEGER = 64; intWBound: CARDINAL = iconW-1; intHBound: CARDINAL = iconH-1; intW: TYPE = [0..intWBound]; intH: TYPE = [0..intHBound]; maxStorage: INTEGER = 32; -- how many icons kept "in core" at any given time bitArray: TYPE = ARRAY intH OF MACHINE DEPENDENT RECORD [b: PACKED ARRAY intW OF BOOLEAN]; rectangleRec: TYPE = RECORD [ x, y, w, h: INTEGER _ 0]; lineRec: TYPE = RECORD [ x1, y1, x2, y2: INTEGER _ 0]; MarkType: TYPE = {rect, line}; markPoint: TYPE = RECORD [x, y: INTEGER _ 0]; iconUpdate: TYPE = {screen, board, icon, bit, newIcon, mark, rect, line}; iconInfoRef: TYPE = REF iconInfoRec; iconInfoRec: TYPE = RECORD [ handle: IconHandle, update: iconUpdate, currentIcon: iconFlavor, clearBit: BOOLEAN _ FALSE, x, y: REAL _ 0]; normalThickness: REAL = 1.0; bitsPerWord: CARDINAL = 16; distX: CARDINAL = 4; -- fixed distance between Icons on the menu distY: CARDINAL = 4; maxIconsOnDisplay: CARDINAL = 20; -- Maximum # of Icons allowed in the displayed Icon menu minimumUnit: CARDINAL = 3; iconFlavor: TYPE = MACHINE DEPENDENT { -- pre-defined icons document(0), dirtyDocument(1), fileCabinet(2), tool(3), typescript(4), private(177776B), -- will cause call of viewer paintProc to paint icon unInit(177777B) -- private flag for unitialized icon type }; iconRef: TYPE = REF iconFileFormat; iconFileFormat: TYPE = MACHINE DEPENDENT RECORD [ bits: bitArray, -- 64 x 64 bit pattern label: BOOL _ FALSE, -- label icon with viewer name? invertLabel: BOOL _ FALSE, -- invert text when labeling? filler: [0..16384) _ 0, lx, ly, lw, lh: INTEGER _ 0, -- rectangle for label (from bottom left) empty: ARRAY [0..251) OF UNSPECIFIED _ ALL[0] -- for future use ]; IconHandle: TYPE = REF IconHandleRec; IconHandleRec: TYPE = RECORD [ container: Containers.Container, viewer: ViewerClasses.Viewer, iconFileWindow: ViewerClasses.Viewer, iconNumberWindow: ViewerClasses.Viewer, iconFetchFileWindow: ViewerClasses.Viewer, iconNameWindow: ViewerClasses.Viewer, -- w.t.. iconFileName: Rope.ROPE, iconFile: IO.STREAM, numberOfIcons: CARDINAL _ 0, -- How many icons in the current file numberReadIn: CARDINAL _ 0, -- How many icons originally read in (needed for reset) numIconsPerRow, numIconsPerCol: CARDINAL, possibleX, possibleY: CARDINAL, -- space remaining for board after Icon menu allocated icX, icY: CARDINAL, -- computed origin for the Icon menu boardSize: REAL, unit: INTEGER, startDisplay: CARDINAL _ 0, -- where to start displaying icons on screen icons: ARRAY [0..maxStorage) OF iconRef, currentIC: iconFlavor _ FIRST[IconEditorDefs.iconFlavor], nextFlavor: iconFlavor, -- Keeps track of next possible flavor for new icons currentIconRep: iconRef, -- the icon currently displayed on drawing board savedBitMap: bitArray, -- used for "un-doing" operations firstMark: BOOLEAN _ TRUE, -- Used for marking diagonal points of rectangles drewLine, drewRectangle: BOOLEAN _ FALSE, -- Used for erasing previously drawn rectangles or lines currentRectangle, labelRect: rectangleRec, -- Normalized coordinates of rectangle (from bottom left) currentLine: lineRec, mark1, mark2: markPoint, -- Diagonal (mark) points of rectangles functionNotApplied: BOOLEAN -- Indicates whether previous rectangle should be erased ]; CouldntLoadIcons: SIGNAL; CouldntSaveIcons: SIGNAL; ViewerNoGood: SIGNAL; PointsMarked: PROCEDURE [handle: IconHandle, representation: MarkType] RETURNS [BOOLEAN]; SaveBitMap: PROCEDURE [handle: IconHandle]; LayoutBoard: PROCEDURE [handle: IconHandle, bounds: Graphics.Box]; GetNewFlavor: PROCEDURE [handle: IconHandle] RETURNS [newFlavor: iconFlavor]; LoadIcons: PROCEDURE[handle: IconHandle, filename: Rope.ROPE] RETURNS [nRead: INTEGER, iconFile: IO.STREAM]; SaveIcons: PROCEDURE[handle: IconHandle, filename: Rope.ROPE, numberOfIcons: CARDINAL] RETURNS [iconFile: IO.STREAM]; NormalizeRectangle: PROC [corner1, corner2: markPoint] RETURNS [rect: rectangleRec]; TransferEndPoints: PROC [endpoint1, endpoint2: markPoint] RETURNS [line: lineRec]; ComputeEndPoints: PROC [handle: IconHandle, oldLine: lineRec] RETURNS [newLine: lineRec]; ClearIcon: PROCEDURE[handle: IconHandle, flavor: iconFlavor]; MirrorIcon: PROCEDURE[handle: IconHandle, flavor: iconFlavor, rect: rectangleRec]; DrawLine: PROCEDURE[handle: IconHandle, line: lineRec, flavor: iconFlavor]; FreshMarks: PROCEDURE [handle: IconHandle]; WhiteLabel: PROC [handle: IconHandle, flavor: iconFlavor]; BlackLabel: PROC [handle: IconHandle, flavor: iconFlavor]; SetLabel: PROC [handle: IconHandle, flavor: iconFlavor, rect: rectangleRec]; UnSetLabel: PROC [handle: IconHandle, flavor: iconFlavor]; SetWhite: PROC [handle: IconHandle, flavor: iconFlavor, rect: rectangleRec]; SetDeskTopGray: PROC [handle: IconHandle, flavor: iconFlavor, rect: rectangleRec]; SetDarkGray: PROC [handle: IconHandle, flavor: iconFlavor, rect: rectangleRec]; SetBlack: PROC [handle: IconHandle, flavor: iconFlavor, rect: rectangleRec]; Invert: PROC [handle: IconHandle, flavor: iconFlavor, rect: rectangleRec]; MoveRight: PROC [handle: IconHandle, flavor: iconFlavor, slowShift: BOOLEAN]; MoveLeft: PROC [handle: IconHandle, flavor: iconFlavor, slowShift: BOOLEAN]; MoveUp: PROC [handle: IconHandle, flavor: iconFlavor, slowShift: BOOLEAN]; MoveDown: PROC [handle: IconHandle, flavor: iconFlavor, slowShift: BOOLEAN]; FillIcon: PROC [handle: IconHandle]; CreateMenu: PROCEDURE [handle: IconHandle] RETURNS [iconMenu: Menus.Menu]; BlackLabelProc, WhiteLabelProc, LineProc, InvertProc, BlackProc, DarkGrayProc, DeskTopGrayProc, WhiteProc, UnLabelIconProc, LabelIconProc, RightProc, LeftProc, DownProc, UpProc, UndoProc, FillIconProc, ShowLabelProc, CreateIconProc, DeleteIconProc, RotateDisplayProc, LoadIconProc, SaveProc, ResetProc: Menus.MenuProc; END. *IconEditorDefs.mesa Last Edit by Mike Spreitzer, November 13, 1982 2:59 pm Last Edited by: Teitelman, April 11, 1983 3:05 pm Last Edited by: Beach, February 16, 1984 5:46:46 pm PST Last Edited by: Pier, February 17, 1985 3:37:43 pm PST *** general constants and types used for icons *** *** constants used for laying out display *** *** constants used for laying out display *** *** type declarations for Icon File Format *** *** type declarations for Icon Editor *** varying parameters icons area and line marking variables *** Signals *** ΚΌ– "cedar" style˜procšΟc™Kš5œ™6J™1J™7J™6J™—šΟk ˜ Kšœ žœžœžœžœžœ žœžœžœžœ ˜–K˜—šœžœž˜)K˜Kš2œ™3Kš;œžœ*œžœžœžœžœžœžœ 3œ žœžœžœžœž œžœžœžœžœžœžœžœžœžœžœžœžœžœžœžœ˜΅š œ žœHžœžœžœžœ˜ŒKšœLžœžœžœ˜m—K™—š-™-Kšœžœ˜Kšœžœ˜—š-™-Kš œžœ ,œžœžœ8œžœ˜Τ—šœ+™.Kš œ žœžœž œœ_5œ*œ˜Kšœ žœžœ˜#Kš$œžœžœž œžœœžœžœ !œ žœž&œ*žœ *œžœ žœž œžœœ˜—šœ#™)Kšœ žœžœ˜%šœžœžœ˜Kšœί˜ηKšœ™Kš œžœ žœžœžœ&œžœ8œ žœžœ7œ žœ%œ žœžœžœ,˜τKšœ™Kš œžœžœ"žœ55œ1œ!˜ΆK™ Kšœ žœžœ2œžœžœ9œ+:œœ(œžœ9œ˜Ο——šœ ™Kšœžœžœžœ˜K—š Οn œž œ0žœžœŸ˜YK˜—šŸ œž œŸ˜+K˜—šŸ œž œ+Ÿ˜BK˜—šŸ œž œžœ˜MK˜—šŸ œž œ$žœžœ žœ žœžœ˜mK˜—šŸ œž œ$žœžœžœ žœžœ˜vK˜—šŸœžœžœ˜TK˜—šŸœžœ#žœ˜RK˜—šŸœžœ(žœ˜ZK˜—šŸ œž œ)˜=K˜—šŸ œž œ=˜RK˜—šŸœž œ8˜KK˜—šŸ œž œ˜+K˜—šŸ œžœ*˜:K˜—šŸ œžœ*˜:K˜—šŸœžœ>˜LK˜—šŸ œžœ*˜:K˜—šŸœžœ>˜LK˜—šŸœžœ>˜RK˜—šŸ œžœ>˜OK˜—šŸœžœ>˜MK˜—šŸœžœ>˜JK˜—šŸ œžœ5žœ˜MK˜—šŸœžœ5žœ˜LK˜—šŸœžœ5žœ˜JK˜—šŸœžœ5žœ˜LK˜—šŸœžœ˜$K˜—KšŸ œž œžœ˜JK˜š,ŸœŸœŸœŸ œŸ œŸ œŸœŸ œŸœŸ œŸ œŸœŸœŸœŸœŸœŸœŸœŸœŸ œŸœŸ œ˜ΎK˜—Kšžœ˜K˜—…—ήΔ