DIRECTORY CDColors, CDPrivate, CD; CDColorsImpl: CEDAR PROGRAM EXPORTS CDColors = BEGIN DisplayType: TYPE = CDColors.DisplayType; DisplayMode: TYPE = CDColors.DisplayMode; Brick: TYPE = CDColors.Brick; -- ARRAY [0..4) OF CARDINAL; ColorTable: TYPE = CDColors.ColorTable; ColorTableSet: TYPE = CDColors.ColorTableSet; ColorDefinition: TYPE = CDColors.ColorDefinition; globalColors: PUBLIC REF ColorDefinition _ NEW[ColorDefinition_ALL[NIL]]; emptyBrick: REF Brick = NEW[Brick_ALL[0]]; fullBrick: REF Brick = NEW[Brick_ALL[LAST[CARDINAL]]]; DefineColor: PUBLIC PROC[ lev: CD.Layer, brick: REF Brick _ NIL, -- do no more change the values display: DisplayType _ bw, mode: DisplayMode _ normal, table: REF ColorDefinition _ NIL --NIL uses the global table ] = BEGIN dTable: REF ColorTableSet; IF table=NIL THEN table _ globalColors; IF brick=NIL THEN brick _ fullBrick ELSE IF brick^=fullBrick^ THEN brick _ fullBrick -- reuse fullbrick; reduce swapping ELSE IF brick^=emptyBrick^ THEN brick _ emptyBrick; IF table[display]=NIL THEN { table[display] _ NEW[ColorTableSet_ALL[NIL]]; table[display][normal] _ NEW[ColorTable_ALL[fullBrick]]; table[display][back] _ NEW[ColorTable_ALL[fullBrick]]; table[display][grey] _ NEW[ColorTable_ALL[emptyBrick]]; }; dTable _ table[display]; dTable[mode][lev] _ brick; IF mode=normal THEN { dTable[back][lev] _ brick; dTable[grey][lev] _ emptyBrick; } END; DefineColor[lev: 0, display: bw]; DefineColor[lev: 0, display: bit4]; DefineColor[lev: 0, display: bit8]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[257,0,0,0]], display: bw]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[257,0,0,0]], display: bw, mode: back]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[0,10,0,11*256]], display: bit4]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[0,10,0,11*256]], display: bit4, mode: back]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[0,1,256,0]], display: bit8]; DefineColor[lev: CD.backGround, brick: NEW[Brick_[0,1,256,0]], display: bit8, mode: back]; END. ¦CDColorsImpl.mesa (Viewer definitions for ChipNDale) Copyright c 1984 by Xerox Corporation. All rights reserved. by Christian Jacobi, September 19, 1984 6:00:17 pm PDT last edited by Christian Jacobi, October 22, 1984 2:49:39 pm PDT -- chipndale interface defining low layer color handling. -- (semi-public) -- {bw, bit4, bit8}; -- {normal, back, grey}; -- ARRAY CD.Layer OF REF Brick; -- ARRAY DisplayMode OF REF ColorTable; -- ARRAY DisplayType OF REF ColorTableSet; --Defining a brick with mode normal also clears the back and the grey brick. --A NIL brick makes a reasonable default. --The procedure may exchange bricks if they have the same values. ʘšœ;™;Jšœ Ïmœ1™