DIRECTORY Containers USING [Container], Icons, Imager USING [Box], IO USING [STREAM], MBQueue USING [Queue], Menus USING [Menu, MenuProc], Rope USING [ROPE], ViewerClasses USING [Viewer]; IconEditorDefs: CEDAR DEFINITIONS = BEGIN maxStorage: INT16 = 32; -- how many icons kept "in core" at any given time Halfword: TYPE ~ Icons.Halfword; -- CARD16 bitsPerHalfword: NAT ~ Icons.bitsPerHalfword; -- 16 iconW: INT16 ~ Icons.iconW; iconH: INT16 ~ Icons.iconH; intWBound: INT16 = iconW-1; intHBound: INT16 = iconH-1; IntW: TYPE = [0..intWBound]; IntH: TYPE = [0..intHBound]; BitArray: TYPE = ARRAY IntH OF MACHINE DEPENDENT RECORD [ b: PACKED ARRAY IntW OF BOOL ]; RectangleRec: TYPE = RECORD [ x, y, w, h: INT16 ¬ 0]; LineRec: TYPE = RECORD [ x1, y1, x2, y2: INT16 ¬ 0]; MarkType: TYPE = {rect, line}; MarkPoint: TYPE = RECORD [x, y: INT16 ¬ 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: BOOL ¬ FALSE, x, y: REAL ¬ 0]; normalThickness: REAL = 1.0; distX: INT16 = 4; -- fixed distance between Icons on the menu distY: INT16 = 4; maxIconsOnDisplay: INT16 = 20; -- Maximum # of Icons allowed in the displayed Icon menu minimumUnit: INT16 = 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, ly, lw, lh: INT16 ¬ 0, fillerInt: INT16 ¬ 0, empty: PACKED ARRAY [0..250) OF Halfword ¬ ALL[0] -- leftovers ]; 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, workingDir: Rope.ROPE, queue: MBQueue.Queue, numberOfIcons: INT16 ¬ 0, numberReadIn: INT16 ¬ 0, numIconsPerRow, numIconsPerCol: INT16, possibleX, possibleY: INT16, icX, icY: INT16, boardSize: REAL, unit: INT16, startDisplay: INT16 ¬ 0, icons: ARRAY [0..maxStorage) OF IconRef, currentIC: IconFlavor ¬ FIRST[IconFlavor], nextFlavor: IconFlavor, currentIconRep: IconRef, savedBitMap: BitArray, firstMark: BOOL ¬ TRUE, drewLine, drewRectangle: BOOL ¬ FALSE, currentRectangle, labelRect: RectangleRec, currentLine: LineRec, mark1, mark2: MarkPoint, functionNotApplied: BOOL ]; CouldntLoadIcons: SIGNAL; CouldntSaveIcons: SIGNAL; ViewerNoGood: SIGNAL; GetFileName: PROC [h: IconHandle, v: ViewerClasses.Viewer] RETURNS [Rope.ROPE]; PointsMarked: PROC [handle: IconHandle, type: MarkType] RETURNS [BOOL]; SaveBitMap: PROC [handle: IconHandle]; LayoutBoard: PROC [handle: IconHandle, bounds: Imager.Box]; GetNewFlavor: PROC [handle: IconHandle] RETURNS [newFlavor: IconFlavor]; LoadIcons: PROC [handle: IconHandle, filename: Rope.ROPE] RETURNS [nRead: INT16, iconFile: IO.STREAM]; SaveIcons: PROC [handle: IconHandle, filename: Rope.ROPE, numberOfIcons: INT16] 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]; IconProc: TYPE ~ PROC [ handle: IconHandle, flavor: IconFlavor, rect: RectangleRec ¬ [], line: LineRec ¬ [], slowShift: BOOL ¬ FALSE]; ClearIcon: PROC [handle: IconHandle, flavor: IconFlavor]; MirrorIcon: PROC [handle: IconHandle, flavor: IconFlavor, rect: RectangleRec]; FlipIcon: PROC [handle: IconHandle, flavor: IconFlavor, rect: RectangleRec]; DrawLine: PROC [handle: IconHandle, line: LineRec, flavor: IconFlavor]; FreshMarks: PROC [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, firstClearToWhite: BOOL ¬ TRUE]; 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: BOOL]; MoveLeft: PROC [handle: IconHandle, flavor: IconFlavor, slowShift: BOOL]; MoveUp: PROC [handle: IconHandle, flavor: IconFlavor, slowShift: BOOL]; MoveDown: PROC [handle: IconHandle, flavor: IconFlavor, slowShift: BOOL]; FillIcon: PROC [handle: IconHandle]; CreateMenu: PROC [handle: IconHandle] RETURNS [iconMenu: Menus.Menu]; BlackLabelProc, WhiteLabelProc, LineProc, InvertProc, BlackProc, DarkGrayProc, DeskTopGrayProc, DeskTopGrayIfWhiteProc, WhiteProc, UnLabelIconProc, LabelIconProc, RightProc, LeftProc, DownProc, UpProc, UndoProc, FillIconProc, ShowLabelProc, CreateIconProc, DeleteIconProc, KillAllIconsProc, RotateDisplayProc, LoadIconProc, SaveProc, ResetProc: Menus.MenuProc; END. Œ IconEditorDefs.mesa Copyright Σ 1987, 1992 by Xerox Corporation. All rights reserved. Last Edited by: Ken Pier, May 17, 1991 5:58 pm PDT Bloomenthal, April 11, 1990 12:17:04 pm PDT Russ Atkinson (RRA) March 9, 1987 5:19:02 pm PST *** general constants and types used for icons *** BitArray: TYPE = PACKED ARRAY [0..iconH*iconW/bitsPerHalfword) OF Halfword; *** constants used for laying out display *** *** type declarations for Icon File Format *** *** type declarations for Icon Editor *** serialize Menu/Buttons How many icons in the current file How many icons originally read in (needed for reset) space remaining for board after Icon menu allocated computed origin for the Icon menu where to start displaying icons on screen Keeps track of next possible flavor for new icons the icon currently displayed on drawing board used for "un-doing" operations area and line marking variables Used for marking diagonal points of rectangles Used for erasing previously drawn rectangles or lines Normalized coordinates of rectangle (from bottom left) Diagonal (mark) points of rectangles Indicates whether previous rectangle should be erased *** Signals *** Κ•NewlineDelimiter –(cedarcode) style™codešΟc™Kšœ Οeœ7™BK™2K™+K™0K™šΟk ˜ Kšœ Ÿœ ˜K˜KšœŸœ˜KšŸœŸœŸœ˜KšœŸœ ˜KšœŸœ˜KšœŸœŸœ˜KšœŸœ ˜K˜——šΟbœŸœŸ œŸ˜)K˜Kš2œ™3Kšœ Ÿœ2˜JK˜Kšœ Ÿœ ˜*KšœŸœ˜3K˜KšœŸœ˜KšœŸœ˜Kšœ Ÿœ ˜Kšœ Ÿœ ˜KšœŸœ˜KšœŸœ˜K˜Kšœ ŸœŸ œ"Ÿœ ™Kš œ ŸœŸœŸœŸœŸ œŸœ˜9KšœŸœŸœŸœŸ˜Kšœ˜—KšœŸœŸœŸœ˜5Kšœ ŸœŸœŸœ˜4Kšœ Ÿœ˜Kšœ ŸœŸœŸœ˜+Kšœ Ÿœ9˜IKšœŸœŸœ ˜%šœ ŸœŸœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ ŸœŸœ˜KšœŸœ˜—K™Kš-™-KšœŸœ˜KšœŸœ+˜=KšœŸœ˜KšœŸœ8˜WKšœ Ÿœ˜Kšœ+™.šœ ŸœŸœŸ œ˜;Kšœ ˜ Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ4˜FKšœ)˜9K˜—Kšœ ŸœŸœ˜#š œŸœŸœŸ œŸœ˜1Kšœ˜'KšœŸœŸœ˜4Kšœ ŸœŸ˜8Kšœ˜-KšœŸœ˜Kšœ Ÿœ˜KšœŸ œ Ÿœ Ÿœ ˜>Kšœ˜—K˜Kšœ#™)Kšœ ŸœŸœ˜%šœŸœŸœ˜Kšœ ˜ Kšœ˜Kšœ%˜%Kšœ'˜'Kšœ*˜*Kšœ%˜%KšœŸœ˜Kšœ ŸœŸœ˜KšœŸœ˜šœ˜Kšœ™—šœŸœ˜Kšœ"™"—šœŸœ˜Kšœ4™4—Kšœ Ÿœ˜&šœŸœ˜Kšœ3™3—šœ Ÿœ˜Kšœ!™!—Kšœ Ÿœ˜KšœŸœ˜ šœŸœ˜Kšœ)™)—KšœŸœŸœ ˜(KšœŸœ ˜*šœ˜Kšœ1™1—šœ˜Kšœ-™-—šœ˜Kšœ™—K™šœ ŸœŸœ˜Kšœ.™.—šœŸœŸœ˜&Kšœ5™5—šœ*˜*Kšœ6™6—Kšœ˜šœ˜Kšœ$™$—šœŸ˜Kšœ5™5—K˜—Kšœ ™KšœŸœ˜KšœŸœ˜KšœŸœ˜—KšΟn œŸœ*ŸœŸœ˜OK˜š‘ œŸœ&ŸœŸœ˜GK˜—š‘ œŸœ˜&K˜—š‘ œŸœ*˜;K˜—š‘ œŸœŸœ˜HK˜—š‘ œŸœ%ŸœŸœ Ÿœ ŸœŸœ˜fK˜—š‘ œŸœ%ŸœŸœŸœ ŸœŸœ˜nK˜—š‘œŸœŸœ˜TK˜—š‘œŸœ#Ÿœ˜RK˜—š‘œŸœ(Ÿœ˜ZK˜—šœ ŸœŸœ˜Kšœ˜Kšœ˜K˜K˜KšœŸœŸœ˜K˜—š‘ œŸœ*˜9K˜—š‘ œŸœ>˜NK˜—š‘œŸœ>˜LK˜—š‘œŸœ9˜GK˜—š‘ œŸœ˜&K˜—š‘ œŸœ*˜:K˜—š‘ œŸœ*˜:K˜—š‘œŸœ>˜LK˜—š‘ œŸœ*˜:K˜—š‘œŸœ>˜LK˜—š‘œŸœ˜KšœOŸœŸœ˜\K˜—š‘ œŸœ>˜OK˜—š‘œŸœ>˜MK˜—š‘œŸœ>˜JK˜—š‘ œŸœ5Ÿœ˜JK˜—š‘œŸœ5Ÿœ˜IK˜—š‘œŸœ5Ÿœ˜GK˜—š‘œŸœ5Ÿœ˜IK˜—š‘œŸœ˜$K˜—Kš‘ œŸœŸœ˜EK˜šœθ˜θK˜—KšŸœ˜K˜—…—b#