-- Compiler ControllerMenus/n -- m. stone December 2, 1981 11:17 PM -- Tiberi November 4, 1979 5:41 PM -- implementing module for griffin file controller menus DIRECTORY ControllerDefs: FROM "ControllerDefs" USING [CurrentStyleRecord, CurrentFontDescriptor], MenuDefs: FROM "MenuDefs", RefreshDefs: FROM "RefreshDefs", GriffinFontDefs: FROM "GriffinFontDefs", StyleDefs: FROM "StyleDefs", ObjectDefs: FROM "ObjectDefs", ControllerMenuDefs: FROM "ControllerMenuDefs", GriffinMemoryDefs: FROM "GriffinMemoryDefs", PointDefs: FROM "PointDefs", StringDefs: FROM "StringDefs"; -------------------------------------------------------------------- -------------------------------------------------------------------- ControllerMenus: PROGRAM IMPORTS StringDefs, MenuDefs, ControllerDefs, GriffinMemoryDefs, RefreshDefs, GriffinFontDefs, PointDefs EXPORTS ControllerMenuDefs = BEGIN colorMenu: PUBLIC MenuDefs.MenuHandle_NIL; lineColorMenu: PUBLIC MenuDefs.MenuHandle_NIL; textMenu: PUBLIC MenuDefs.MenuHandle_NIL; charMenu: PUBLIC MenuDefs.MenuHandle_NIL; fontMenu: PUBLIC MenuDefs.MenuHandle_NIL; centerMenu: PUBLIC MenuDefs.MenuHandle_NIL; thickMenu: PUBLIC MenuDefs.MenuHandle_NIL; colorControlMenu: PUBLIC MenuDefs.MenuHandle_NIL; maxFontNameLength: CARDINAL = 128; InitCaptionMenu: PUBLIC PROCEDURE = BEGIN default: MenuDefs.MenuItemHandle; textMenu _ MenuDefs.CreateMenu[vertical, [350,150], NIL]; default _ MenuDefs.AddMenuItem[textMenu,"0 d",TextDir]; []_MenuDefs.AddMenuItem[textMenu,"90 d",TextDir]; []_MenuDefs.AddMenuItem[textMenu,"180 d",TextDir]; []_MenuDefs.AddMenuItem[textMenu,"270 d",TextDir]; MenuDefs.BugItem[default]; charMenu _ MenuDefs.CreateMenu[vertical, [350,250], NIL]; default _ MenuDefs.AddMenuItem[charMenu,"0 char d",CharDir]; []_MenuDefs.AddMenuItem[charMenu,"90 char d",CharDir]; []_MenuDefs.AddMenuItem[charMenu,"180 char d",CharDir]; []_MenuDefs.AddMenuItem[charMenu,"270 char d",CharDir]; MenuDefs.BugItem[default]; fontMenu _ MenuDefs.CreateMenu[vertical, [240,250], NIL]; GriffinFontDefs.ForAllFonts[do: AddFontName]; centerMenu _ MenuDefs.CreateMenu[vertical, [250,150], NIL]; default _ MenuDefs.AddMenuItem [centerMenu, "left", SetCenter]; []_MenuDefs.AddMenuItem [centerMenu, "centered", SetCenter]; []_MenuDefs.AddMenuItem [centerMenu, "right", SetCenter]; MenuDefs.BugItem[default]; END; InitColorMenu: PUBLIC PROCEDURE = BEGIN default: MenuDefs.MenuItemHandle; colorMenu _ MenuDefs.CreateMenu[vertical, [180,200], "Areas"]; []_MenuDefs.AddMenuItem[colorMenu,"black",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"dk brown",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"brown",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"tan",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"maroon",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"dk red",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"red",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"orange",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"dk yellow",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"yellow",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"lt yellow",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"dk green",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"green",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"lt green",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"dk blue",ColorType]; [] _ MenuDefs.AddMenuItem[colorMenu,"blue",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"lt blue",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"dk aqua",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"aqua",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"cyan",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"dk purple",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"purple",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"violet",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"magenta",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"pink",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"dk grey",ColorType]; default_MenuDefs.AddMenuItem[colorMenu,"grey",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"lt grey",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"pale grey",ColorType]; []_MenuDefs.AddMenuItem[colorMenu,"white",ColorType]; MenuDefs.BugItem[default]; lineColorMenu _ MenuDefs.CreateMenu[vertical, [100,200], "Lines"]; default_MenuDefs.AddMenuItem[lineColorMenu,"black",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"dk brown",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"brown",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"tan",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"maroon",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"dk red",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"red",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"orange",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"dk yellow",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"yellow",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"lt yellow",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"dk green",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"green",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"lt green",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"dk blue",ColorType]; [] _ MenuDefs.AddMenuItem[lineColorMenu,"blue",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"lt blue",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"dk aqua",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"aqua",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"cyan",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"dk purple",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"purple",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"violet",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"magenta",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"pink",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"dk grey",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"grey",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"lt grey",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"pale grey",ColorType]; []_MenuDefs.AddMenuItem[lineColorMenu,"white",ColorType]; MenuDefs.BugItem[default]; END; InitShapeMenu: PUBLIC PROCEDURE = BEGIN default: MenuDefs.MenuItemHandle; colorControlMenu _ MenuDefs.CreateMenu[vertical, [100,160], NIL]; []_MenuDefs.AddMenuItem[colorControlMenu, "Outlined", ColorControl]; []_MenuDefs.AddMenuItem[colorControlMenu, "Filled", ColorControl]; default_MenuDefs.AddMenuItem[colorControlMenu, "Both", ColorControl]; MenuDefs.BugItem[default]; thickMenu _ MenuDefs.CreateMenu[vertical, [50,200], NIL]; []_MenuDefs.AddMenuItem [thickMenu, "1 pt", SetThickness]; default _MenuDefs.AddMenuItem [thickMenu, "2 pt", SetThickness]; []_MenuDefs.AddMenuItem [thickMenu, "3 pt", SetThickness]; []_MenuDefs.AddMenuItem [thickMenu, "4 pt", SetThickness]; MenuDefs.BugItem[default]; END; DisplayCaptionMenu: PUBLIC PROCEDURE = BEGIN MenuDefs.ShowMenu[textMenu]; MenuDefs.ShowMenu[charMenu]; MenuDefs.ShowMenu[fontMenu]; MenuDefs.ShowMenu[centerMenu]; RefreshDefs.RestoreScreen[]; END; UnDisplayCaptionMenu: PUBLIC PROCEDURE = BEGIN MenuDefs.HideMenu[textMenu]; MenuDefs.HideMenu[charMenu]; MenuDefs.HideMenu[fontMenu]; MenuDefs.HideMenu[centerMenu]; RefreshDefs.RestoreScreen[]; END; DisplayColorMenu: PUBLIC PROCEDURE = BEGIN MenuDefs.ShowMenu[lineColorMenu]; MenuDefs.ShowMenu[colorMenu]; RefreshDefs.RestoreScreen[]; END; UnDisplayColorMenu: PUBLIC PROCEDURE = BEGIN MenuDefs.HideMenu[colorMenu]; MenuDefs.HideMenu[lineColorMenu]; RefreshDefs.RestoreScreen[]; END; DisplayShapeMenu: PUBLIC PROCEDURE = BEGIN MenuDefs.ShowMenu[colorControlMenu]; MenuDefs.ShowMenu[thickMenu]; RefreshDefs.RestoreScreen[]; END; UnDisplayShapeMenu: PUBLIC PROCEDURE = BEGIN OPEN MenuDefs; MenuDefs.HideMenu[colorControlMenu]; MenuDefs.HideMenu[thickMenu]; RefreshDefs.RestoreScreen[]; END; ColorControl: MenuDefs.MenuProc = BEGIN OPEN StyleDefs,StringDefs,StringDefs,MenuDefs; string: STRING _ MenuDefs.MenuString[item]; style: StyleDefs.StyleHandle _ ControllerDefs.CurrentStyleRecord []; SelectOnly[item]; SELECT TRUE FROM EqualStrings[string, "Outlined"] => BEGIN style.outlined _ TRUE; style.filled _ FALSE; END; EqualStrings[string, "Filled"] => BEGIN style.filled _ TRUE; style.outlined _ FALSE; END; EqualStrings[string, "Both"] => BEGIN style.outlined _ TRUE; style.filled _ TRUE; END; ENDCASE => ERROR; END; ColorType: MenuDefs.MenuProc = BEGIN OPEN StyleDefs,StringDefs,StringDefs; string: STRING _ MenuDefs.MenuString[item]; color: Color; color _ SELECT TRUE FROM EqualStrings[string, "black"] => [0,0,0], EqualStrings[string, "dk brown"] => [7,255,59], EqualStrings[string, "brown"] => [7,255,118], EqualStrings[string, "tan"] => [0,131,217], EqualStrings[string, "maroon"] => [234,255,79], EqualStrings[string, "dk red"] => [0,255,160], EqualStrings[string, "red"] => [0,255,255], EqualStrings[string, "orange"] => [10,255,255], EqualStrings[string, "dk yellow"] => [25,255,255], EqualStrings[string, "yellow"] => [40,255,255], EqualStrings[string, "lt yellow"] => [40,190,255], EqualStrings[string, "dk green"] => [71,255,59], EqualStrings[string, "green"] => [76,255,255], EqualStrings[string, "lt green"] => [71,193,255], EqualStrings[string, "dk blue"] => [150,255,170], EqualStrings[string, "blue"] => [148,255,255], EqualStrings[string, "lt blue"] => [141,150,255], EqualStrings[string, "dk aqua"] => [107,255,98], EqualStrings[string, "aqua"] => [107,224,255], EqualStrings[string, "cyan"] => [120,255,255], EqualStrings[string, "dk purple"] => [178,255,178], EqualStrings[string, "purple"] => [170,224,255], EqualStrings[string, "violet"] => [170,131,255], EqualStrings[string, "magenta"] => [200,255,255], EqualStrings[string, "pink"] => [206,170,255], EqualStrings[string, "dk grey"] => [0,0,40], EqualStrings[string, "grey"] => [0,0,120], EqualStrings[string, "lt grey"] => [0,0,200], EqualStrings[string, "pale grey"] => [0,0,230], EqualStrings[string, "white"] => [0,0,255], ENDCASE => ERROR; IF MenuDefs.WhichMenu[item]=colorMenu THEN ControllerDefs.CurrentStyleRecord [].fillcolor _ color ELSE ControllerDefs.CurrentStyleRecord [].color _ color; MenuDefs.SelectOnly[item]; END; TextDir: MenuDefs.MenuProc = BEGIN OPEN StyleDefs, StringDefs; string: STRING _ MenuDefs.MenuString[item]; ControllerDefs.CurrentStyleRecord [].orientation _ SELECT TRUE FROM EqualStrings[string,"0 d"] => Orientation [or0], EqualStrings[string,"90 d"] => Orientation [or90], EqualStrings[string,"180 d"] => Orientation [or180], EqualStrings[string,"270 d"] => Orientation [or270], ENDCASE => ERROR; MenuDefs.SelectOnly[item]; END; CharDir: MenuDefs.MenuProc = BEGIN OPEN StyleDefs, GriffinFontDefs, StringDefs; string: STRING _ MenuDefs.MenuString[item]; ControllerDefs.CurrentFontDescriptor [].rotation _ SELECT TRUE FROM EqualStrings[string,"0 char d"] => Rot0Degrees, EqualStrings[string,"90 char d"] => Rot90Degrees, EqualStrings[string,"180 char d"] => Rot180Degrees, EqualStrings[string,"270 char d"] => Rot270Degrees, ENDCASE => ERROR; MenuDefs.SelectOnly[item]; END; AddFontName: PROCEDURE[font: GriffinFontDefs.FontDescriptorHandle] = BEGIN OPEN StringDefs; alreadyThere: BOOLEAN _ FALSE; string: STRING _ [maxFontNameLength]; IsEqual: MenuDefs.MenuProc= BEGIN IF EquivalentStrings[string, MenuDefs.MenuString[item]] THEN alreadyThere _ TRUE; END; AppendString[to: string, from: font.name]; AppendDecimal[string, font.points]; SELECT font.face FROM 3 => AppendString[to: string, from: "BI"]; 2 => AppendString[to: string, from: "B"]; 1 => AppendString[to: string, from: "I"]; ENDCASE; MenuDefs.ForAllMenuItems[fontMenu, IsEqual]; IF alreadyThere THEN RETURN; MenuDefs.BugItem[MenuDefs.AddMenuItem[fontMenu, string, SetFont]]; END; SetFont: MenuDefs.MenuProc = BEGIN OPEN MenuDefs, StringDefs, ControllerDefs, GriffinFontDefs; cfd: FontDescriptorHandle _ CurrentFontDescriptor[]; string: STRING _ [maxFontNameLength]; temp: STRING _ [maxFontNameLength]; i,j: CARDINAL; AppendString[string, MenuString[item]]; temp.length _ 0; FOR i _ 0, i+1 UNTIL i=string.length OR string[i] IN ['0..'9] DO temp[i] _ string[i]; temp.length _ temp.length+1; ENDLOOP; GriffinMemoryDefs.FreeString [cfd.name]; cfd.name _ GriffinMemoryDefs.AllocateString [string.length]; AppendString [cfd.name, temp]; --i is at start of points and face temp.length _ 0; j _ 0; UNTIL i=string.length OR string[i]='I OR string[i]='i OR string[i]='B OR string[i]='b DO temp[j] _ string[i]; i _ i+1; j_ j+1; temp.length _ temp.length+1; ENDLOOP; cfd.points _ StringToDecimal[temp]; SELECT string.length-i FROM 1 => {IF string[i]='b OR string[i]='B THEN cfd.face _ 2; IF string[i]='i OR string[i]='I THEN cfd.face _ 1}; 2 => cfd.face _ 3; --a bit ad hoc ENDCASE => cfd.face _ 0; MenuDefs.SelectOnly[item]; END; SetCenter: MenuDefs.MenuProc = BEGIN OPEN StringDefs; string: STRING _ MenuDefs.MenuString[item]; ControllerDefs.CurrentStyleRecord [].anchor _ SELECT TRUE FROM EqualStrings[string,"left"] => left, EqualStrings[string,"centered"] => center, EqualStrings[string,"right"] => right, ENDCASE => ERROR; MenuDefs.SelectOnly[item]; END; SetThickness: MenuDefs.MenuProc = BEGIN OPEN StringDefs, PointDefs; string: STRING _ MenuDefs.MenuString[item]; ControllerDefs.CurrentStyleRecord [].width _ SELECT TRUE FROM EqualStrings[string,"1 pt"] => ScrValToObjVal[1], EqualStrings[string,"2 pt"] => ScrValToObjVal[2], EqualStrings[string,"3 pt"] => ScrValToObjVal[3], EqualStrings[string,"4 pt"] => ScrValToObjVal[4], ENDCASE => ERROR; MenuDefs.SelectOnly[item]; END; END.