DIRECTORY Containers USING [Container], Imager USING [Box], IO USING [STREAM], MBQueue USING [Queue], Menus USING [Menu, MenuProc], Rope USING [ROPE], ViewerClasses USING [Viewer] ; IconEditorDefs: CEDAR DEFINITIONS = BEGIN Nat: TYPE = INTEGER; -- positive INTEGERS iconW: Nat = 64; -- width and height of an icon (in bits) iconH: Nat = 64; intWBound: Nat = iconW-1; intHBound: Nat = iconH-1; IntW: TYPE = [0..intWBound]; IntH: TYPE = [0..intHBound]; maxStorage: Nat = 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: Nat _ 0]; LineRec: TYPE = RECORD [ x1, y1, x2, y2: Nat _ 0]; MarkType: TYPE = {rect, line}; MarkPoint: TYPE = RECORD [x, y: Nat _ 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; distX: Nat = 4; -- fixed distance between Icons on the menu distY: Nat = 4; maxIconsOnDisplay: Nat = 20; -- Maximum # of Icons allowed in the displayed Icon menu minimumUnit: Nat = 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..37777B] _ 0, -- 14 bits of filler lx: Nat _ 0, -- rectangle for label (from bottom left) ly: Nat _ 0, -- rectangle for label (from bottom left) lw: Nat _ 0, -- rectangle for label (from bottom left) lh: Nat _ 0, -- rectangle for label (from bottom left) empty: ARRAY [0..251) OF WORD _ 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, iconFileName: Rope.ROPE, iconFile: IO.STREAM, queue: MBQueue.Queue, --serialize Menu/Buttons numberOfIcons: Nat _ 0, -- How many icons in the current file numberReadIn: Nat _ 0, -- How many icons originally read in (needed for reset) numIconsPerRow, numIconsPerCol: Nat, possibleX, possibleY: Nat, -- space remaining for board after Icon menu allocated icX, icY: Nat, -- computed origin for the Icon menu boardSize: REAL, unit: Nat, startDisplay: Nat _ 0, -- where to start displaying icons on screen icons: ARRAY [0..maxStorage) OF IconRef, currentIC: IconFlavor _ FIRST[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, type: MarkType] RETURNS [BOOLEAN]; SaveBitMap: PROCEDURE [handle: IconHandle]; LayoutBoard: PROCEDURE [handle: IconHandle, bounds: Imager.Box]; GetNewFlavor: PROCEDURE [handle: IconHandle] RETURNS [newFlavor: IconFlavor]; LoadIcons: PROCEDURE[handle: IconHandle, filename: Rope.ROPE] RETURNS [nRead: Nat, iconFile: IO.STREAM]; SaveIcons: PROCEDURE[handle: IconHandle, filename: Rope.ROPE, numberOfIcons: Nat] 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 Edited by: Ken Pier, May 17, 1985 4:48:25 pm PDT *** general constants and types used for icons *** *** constants used for laying out display *** *** type declarations for Icon File Format *** *** type declarations for Icon Editor *** area and line marking variables *** Signals *** ΚΈ– "cedar" style˜codešΟc™K™5K™—šΟk ˜ Kšœ žœ ˜Kšœžœ˜Kšžœžœžœ˜Kšœžœ ˜Kšœžœ˜Kšœžœžœ˜Kšœžœ ˜Kšœ˜K˜—šΟbœžœž œž˜)K˜Kš2œ™3Kšœžœžœ˜)Kšœ)˜:Kšœ˜Kšœ˜Kšœ˜Kšœžœ˜Kšœžœ˜Kšœ2˜HKšœ žœžœžœžœž œžœžœžœžœžœ˜ZKšœžœžœ˜3Kšœ žœžœ˜2Kšœ žœ˜Kšœ žœžœ˜)Kšœ žœ9˜IKšœžœžœ ˜%šœ žœžœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ žœžœ˜Kšœžœ˜—K™Kš-™-Kšœžœ˜Kšœ+˜;Kšœ˜Kšœ8˜UKšœ˜Kšœ+™.šœ žœžœž œ˜;Kšœ ˜ Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ4˜FKšœ)˜9Kšœ˜—Kšœ žœžœ˜#š œžœžœž œžœ˜1Kšœ˜'Kšœžœžœ˜4Kšœ žœž˜8Kšœ˜-Kšœ )˜6Kšœ )˜6Kšœ )˜6Kšœ )˜6Kš œžœ žœžœžœ˜8Kšœ˜—Kšœ#™)Kšœ žœžœ˜%šœžœžœ˜Kšœ ˜ Kšœ˜Kšœ%˜%Kšœ'˜'Kšœ*˜*Kšœ%˜%Kšœžœ˜Kšœ žœžœ˜Kšœ˜.Kšœ%˜=Kšœ7˜NKšœ$˜$Kšœ6˜RKšœ$˜3Kšœ žœ˜Kšœ ˜ Kšœ,˜CKšœžœžœ ˜(Kšœžœ ˜*Kšœ4˜LKšœ0˜IKšœ!˜8K™Kšœ žœžœ1˜LKšœžœžœ$œ˜bKšœ+9˜dKšœ˜Kšœ(˜@Kšœžœ8˜UKšœ˜—Kšœ ™Kšœžœ˜Kšœžœ˜Kšœžœ˜—šΟn œž œ&žœžœ˜OK˜—š  œž œ˜+K˜—š  œž œ*˜@K˜—š  œž œžœ˜MK˜—š   œž œ$žœžœžœžœ˜hK˜—š   œž œ$žœžœ žœžœ˜pK˜—š œžœžœ˜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˜—…—ςθ