--GriffinColorImpl.mesa --Maureen Stone September 9, 1985 9:50:57 am PDT DIRECTORY Rope USING [ROPE, Equal], GriffinColor, ImagerColor USING [ConstantColor, ColorFromRGB, RGBFromHSV], StyleDefs USING [Color]; GriffinColorImpl: CEDAR PROGRAM IMPORTS ImagerColor, Rope EXPORTS GriffinColor = BEGIN OPEN GriffinColor; ROPE: TYPE = Rope.ROPE; FileColors: ARRAY[0..30) OF FileColor _ [ --the "truth" for historical reasons [0,0,0], --"black" [7,255,59], --"dk brown" [7,255,118], --"brown" [0,131,217], --"tan" [234,255,79], --"maroon" [0,255,160], --"dk red" [0,255,255], --"red" [10,255,255], --"orange" [25,255,255], --"dk yellow" [40,255,255], --"yellow" [40,190,255], --"lt yellow" [71,255,59], --"dk green" [76,255,255], --"green" [71,193,255], --"lt green" [150,255,170], --"dk blue" [148,255,255], --"blue" [141,150,255], --"lt blue" [107,255,98], --"dk aqua" [107,224,255], --"aqua" [120,255,255], --"cyan" [178,255,178], --"dk purple" [170,224,255], --"purple" [170,131,255], --"violet" [200,255,255], --"magenta" [206,170,255], --"pink" [0,0,40], --"dk grey" [0,0,120], --"grey" [0,0,200], --"lt grey" [0,0,230], --"pale grey" [0,0,255] --"white" ]; ColorPair: TYPE = RECORD[name: Rope.ROPE, value: StyleDefs.Color]; ColorTable: ARRAY[0..30) OF ColorPair _ [ --set values in initialization procedure. [name: "black", value: [0,0,0]], [name: "dk brown", value: [0,0,0]], [name: "brown", value: [0,0,0]], [name: "tan", value: [0,0,0]], [name: "maroon", value: [0,0,0]], [name: "dk red", value: [0,0,0]], [name: "red", value: [0,0,0]], [name: "orange", value: [0,0,0]], [name: "dk yellow", value: [0,0,0]], [name: "yellow", value: [0,0,0]], [name: "lt yellow", value: [0,0,0]], [name: "dk green", value: [0,0,0]], [name: "green", value: [0,0,0]], [name: "lt green", value: [0,0,0]], [name: "dk blue", value: [0,0,0]], [name: "blue", value: [0,0,0]], [name: "lt blue", value: [0,0,0]], [name: "dk aqua", value: [0,0,0]], [name: "aqua", value: [0,0,0]], [name: "cyan", value: [0,0,0]], [name: "dk purple", value: [0,0,0]], [name: "purple", value: [0,0,0]], [name: "violet", value: [0,0,0]], [name: "magenta", value: [0,0,0]], [name: "pink", value: [0,0,0]], [name: "dk grey", value: [0,0,0]], [name: "grey", value: [0,0,0]], [name: "lt grey", value: [0,0,0]], [name: "pale grey", value: [0,0,0]], [name: "white", value: [0,0,0]] ]; StringToColor: PUBLIC PROC [name: Rope.ROPE] RETURNS [color: StyleDefs.Color] = { FOR i: INTEGER IN [0..LENGTH[ColorTable]) DO IF Rope.Equal[name,ColorTable[i].name] THEN RETURN[ColorTable[i].value]; ENDLOOP; ERROR; }; ColorToString: PUBLIC PROCEDURE[color: StyleDefs.Color] RETURNS[Rope.ROPE] = { FOR i: INTEGER IN [0..LENGTH[ColorTable]) DO c: StyleDefs.Color _ ColorTable[i].value; IF ABS[color.H-c.H] < 0.02 AND ABS[color.S-c.S] < 0.02 AND ABS[color.V-c.V] < 0.02 THEN RETURN[ColorTable[i].name]; ENDLOOP; RETURN["black"]; }; ColorToConstantColor: PUBLIC PROC[color: StyleDefs.Color] RETURNS[ImagerColor.ConstantColor] = { RETURN[ImagerColor.ColorFromRGB[ImagerColor.RGBFromHSV[color]]]; }; GetNames: PUBLIC PROC RETURNS[LIST OF ROPE] = { --returns a list of the current color names names: LIST OF ROPE; FOR i: INTEGER DECREASING IN [0..LENGTH[ColorTable]) DO names _ CONS[ColorTable[i].name, names]; ENDLOOP; RETURN[names]; }; LoadColorMap: PUBLIC PROC = { <> <> <> <> <> <> }; <> ColorFromFileColor: PUBLIC PROC[fcolor: FileColor] RETURNS[StyleDefs.Color] = { color: StyleDefs.Color _ [0,0,0]; FOR i: INTEGER IN [0..LENGTH[FileColors]) DO IF fcolor=FileColors[i] THEN color _ ColorTable[i].value; ENDLOOP; RETURN[color]; }; FileColorFromColor: PUBLIC PROC[color: StyleDefs.Color] RETURNS[FileColor] = { fcolor: FileColor _ [0,0,0]; FOR i: INTEGER IN [0..LENGTH[ColorTable]) DO IF color=ColorTable[i].value THEN fcolor _ FileColors[i]; ENDLOOP; RETURN[fcolor]; }; Initialize: PUBLIC PROC = { convert: PROC[fcolor: FileColor] RETURNS [StyleDefs.Color] = { RETURN[[H: fcolor.hue/255.0, S: fcolor.saturation/255.0, V: fcolor.brightness/255.0]]; }; FOR i: INTEGER IN [0..LENGTH[ColorTable]) DO ColorTable[i].value _ convert[FileColors[i]]; ENDLOOP; }; END.