-- Compiler ControllerMenus/n -- m. stone March 14, 1984 8:26:04 pm PST -- Tiberi November 4, 1979 5:41 PM -- implementing module for griffin file controller menus -- Last Edited by: Stone, November 14, 1983 3:06 pm -- Last Edited by: Pier, February 13, 1984 4:25:40 pm PST DIRECTORY Ascii USING [Digit], ControllerDefs: FROM "ControllerDefs" USING [CurrentStyleRecord, CurrentFontDescriptor, AppendFont], MenuDefs: FROM "MenuDefs", RefreshDefs: FROM "RefreshDefs", GriffinFontDefs: FROM "GriffinFontDefs", StyleDefs: FROM "StyleDefs", ControllerMenuDefs: FROM "ControllerMenuDefs", PointDefs: FROM "PointDefs", GriffinDefs USING [TypeIntoMenuItem, ShowUserMessage, AppendNumber], Convert USING [IntFromRope], GriffinMemoryDefs USING [CZone], GriffinMenusInterface, GriffinColor USING [StringToColor], Rope; -------------------------------------------------------------------- -------------------------------------------------------------------- ControllerMenus: PROGRAM IMPORTS Ascii, MenuDefs, ControllerDefs, RefreshDefs, GriffinFontDefs, PointDefs, Rope, GriffinDefs, Convert, GriffinMemoryDefs, GriffinColor EXPORTS ControllerMenuDefs, GriffinMenusInterface = BEGIN ROPE: TYPE = Rope.ROPE; 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; addFontName: PROC[fd: GriffinFontDefs.FontDescriptorHandle] = {AddFontName[fd]}; 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]; [] _ MenuDefs.AddMenuItem[fontMenu, "Add Font", AddFontItem]; fontName _ MenuDefs.AddMenuItem[fontMenu, "",TypeIntoFontName]; 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; fontName: MenuDefs.MenuItemHandle; TypeIntoFontName: PUBLIC MenuDefs.MenuProc = BEGIN MenuDefs.SelectOnly[item]; GriffinDefs.TypeIntoMenuItem[item]; END; AddFontItem: PUBLIC MenuDefs.MenuProc = BEGIN name: ROPE _ MenuDefs.MenuString[fontName]; IF Rope.Length[name]=0 THEN GriffinDefs.ShowUserMessage["Enter font name first"] ELSE { fd: GriffinFontDefs.FontDescriptorHandle _ ParseFontName[name]; fd.rotation _ ControllerDefs.CurrentFontDescriptor[].rotation; MenuDefs.SetMenuString[fontName, ""]; AddFontName[fd,TRUE]; }; RefreshDefs.RestoreScreen[]; 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,180], 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: PUBLIC MenuDefs.MenuProc = BEGIN OPEN StyleDefs,MenuDefs; string: ROPE _ MenuDefs.MenuString[item]; style: StyleDefs.StyleHandle _ ControllerDefs.CurrentStyleRecord []; SelectOnly[item]; SELECT TRUE FROM Rope.Equal[string, "Outlined"] => BEGIN style.outlined _ TRUE; style.filled _ FALSE; END; Rope.Equal[string, "Filled"] => BEGIN style.filled _ TRUE; style.outlined _ FALSE; END; Rope.Equal[string, "Both"] => BEGIN style.outlined _ TRUE; style.filled _ TRUE; END; ENDCASE => ERROR; END; ColorType: PUBLIC MenuDefs.MenuProc = BEGIN OPEN StyleDefs; string: ROPE _ MenuDefs.MenuString[item]; color: Color _ GriffinColor.StringToColor[string]; IF MenuDefs.WhichMenu[item]=colorMenu THEN ControllerDefs.CurrentStyleRecord [].fillcolor _ color ELSE ControllerDefs.CurrentStyleRecord [].color _ color; MenuDefs.SelectOnly[item]; END; TextDir: PUBLIC MenuDefs.MenuProc = BEGIN OPEN StyleDefs; string: ROPE _ MenuDefs.MenuString[item]; ControllerDefs.CurrentStyleRecord [].orientation _ SELECT TRUE FROM Rope.Equal[string,"0 d"] => Orientation [or0], Rope.Equal[string,"90 d"] => Orientation [or90], Rope.Equal[string,"180 d"] => Orientation [or180], Rope.Equal[string,"270 d"] => Orientation [or270], ENDCASE => ERROR; MenuDefs.SelectOnly[item]; END; CharDir: PUBLIC MenuDefs.MenuProc = BEGIN OPEN StyleDefs, GriffinFontDefs; string: ROPE _ MenuDefs.MenuString[item]; ControllerDefs.CurrentFontDescriptor [].rotation _ SELECT TRUE FROM Rope.Equal[string,"0 char d"] => Rot0Degrees, Rope.Equal[string,"90 char d"] => Rot90Degrees, Rope.Equal[string,"180 char d"] => Rot180Degrees, Rope.Equal[string,"270 char d"] => Rot270Degrees, ENDCASE => ERROR; MenuDefs.SelectOnly[item]; END; AddFontName: PUBLIC PROCEDURE[font: GriffinFontDefs.FontDescriptorHandle, doRefresh: BOOLEAN _ FALSE] = BEGIN alreadyThere: BOOLEAN _ FALSE; string: ROPE; IsEqual: MenuDefs.MenuProc= BEGIN IF Rope.Equal[string, MenuDefs.MenuString[item],FALSE] THEN alreadyThere _ TRUE; END; string _ font.name; string _ GriffinDefs.AppendNumber[string, font.points]; SELECT font.face FROM 3 => string _ Rope.Cat[string, "BI"]; 2 => string _ Rope.Cat[string, "B"]; 1 => string _ Rope.Cat[string, "I"]; ENDCASE; IF fontMenu=NIL THEN RETURN; --happens only for menu font MenuDefs.ForAllMenuItems[fontMenu, IsEqual]; IF alreadyThere THEN RETURN; [] _ ControllerDefs.AppendFont[font]; MenuDefs.BugItem[MenuDefs.AddMenuItem[fontMenu, string, SetFont]]; --IF doRefresh THEN {MenuDefs.ShowMenu[fontMenu]; RefreshDefs.RestoreScreen}; END; SetFont: PUBLIC MenuDefs.MenuProc = BEGIN OPEN MenuDefs, ControllerDefs, GriffinFontDefs; cfd: FontDescriptorHandle _ ControllerDefs.CurrentFontDescriptor[]; fd: FontDescriptorHandle _ ParseFontName[MenuString[item]]; cfd.name _ fd.name; cfd.points _ fd.points; cfd.face _ fd.face; MenuDefs.SelectOnly[item]; END; ParseFontName: PROC[name: ROPE] RETURNS [GriffinFontDefs.FontDescriptorHandle] = BEGIN OPEN ControllerDefs, GriffinFontDefs; i,j: CARDINAL; face: ROPE; cfd: FontDescriptorHandle _ GriffinMemoryDefs.CZone.NEW[GriffinFontDefs.FontDescriptor]; char: CHAR; i _ 0; UNTIL i=Rope.Length[name] DO char _ Rope.Fetch[name,i]; IF Ascii.Digit[char] THEN EXIT ELSE i _ i+1; ENDLOOP; cfd.name _ Rope.Substr[name,0,i]; --get points and face. i is first digit in points j _ i; UNTIL j=Rope.Length[name] DO char _ Rope.Fetch[name,j]; IF char='I OR char='i OR char='B OR char='b THEN EXIT ELSE j _ j+1; ENDLOOP; --j points to face or end of string cfd.points _ Convert.IntFromRope[Rope.Substr[name,i,j-i]]; IF j#Rope.Length[name] THEN { face _ Rope.Substr[name,j]; --rest of string SELECT TRUE FROM Rope.Equal[face,"i",FALSE] => cfd.face _ Italic; Rope.Equal[face,"b",FALSE] => cfd.face _ Bold; Rope.Equal[face,"bi",FALSE] => cfd.face _ BoldItalic; ENDCASE => ERROR; }; RETURN[cfd]; END; SetCenter: PUBLIC MenuDefs.MenuProc = BEGIN string: ROPE _ MenuDefs.MenuString[item]; ControllerDefs.CurrentStyleRecord [].anchor _ SELECT TRUE FROM Rope.Equal[string,"left"] => left, Rope.Equal[string,"centered"] => center, Rope.Equal[string,"right"] => right, ENDCASE => ERROR; MenuDefs.SelectOnly[item]; END; SetThickness: PUBLIC MenuDefs.MenuProc = BEGIN OPEN PointDefs; string: ROPE _ MenuDefs.MenuString[item]; ControllerDefs.CurrentStyleRecord [].width _ SELECT TRUE FROM Rope.Equal[string,"1 pt"] => ScrValToObjVal[1], Rope.Equal[string,"2 pt"] => ScrValToObjVal[2], Rope.Equal[string,"3 pt"] => ScrValToObjVal[3], Rope.Equal[string,"4 pt"] => ScrValToObjVal[4], ENDCASE => ERROR; MenuDefs.SelectOnly[item]; END; END. ʘJšóÏc“œÏk œžœžœžœEžœžœ"žœ žœ#žœ#žœžœ=žœ#žœ0žœDœDœžœžœ‰žœ-žœžœžœžœžœžœžœžœ žœžœ žœžœ žœžœžœžœ žœžœžœžœžœ Ïnœžœž œžœ2žœwžœ©žœ½žœêžœÚžœ'Ïbœžœžœ@žœ  œžœžœžœ"žœžœ7žœ»žœ%žœŸ œžœž œžœ‘žœŸ œžœž œžœbžœ¦žœ–žœŸœžœž œžœ”žœŸœžœž œžœ”žœŸœžœž œžœ^žœŸœžœž œžœ^žœŸœžœž œžœažœŸœžœž œžœžœkžœžœžœžœžœwžœžœžœ$žœžœžœžœ#žœžœžœžœ!žœžœžœžœžœžœžœžœžœžœžœQžœ%žœ9žœPžœžœžœžœžœUžœžœžœÌžœžœžœ žœžœžœ%žœUžœžœžœÈžœžœžœŸ œžœž œ8žœžœžœžœžœ žœžœžœ.žœžœžœžœNžœ žœvžœžœ žœžœžœœ-žœžœžœkNžœ žœžœžœ‡žœŸ œžœžœžœ*žœžœ(žœžœ6žœ(žœ žœžœžœžœžœžœ žœ%3œžœžœ žœ žœ žœ žœ žœžœžœ žœÐci#œ;žœžœ ¡œžœžœžœžœ.žœ-žœžœžœžœžœ)žœ žœPžœžœžœvžœžœžœ-žœžœžœMžœžœžœÆžœžœžœžœ˜j—…—594