WITH Access_List; WITH Ada; WITH Cmvc; WITH Command; WITH Common; WITH Compilation; WITH Debug; WITH Editor; WITH Facit_Key_Names; WITH Job; WITH Library; WITH Queue; WITH Text; WITH What; PROCEDURE Facit_Commands IS USE Facit_Key_Names; TYPE Intent IS (Prompt, Execute, Interrupt); Action : Intent; Key_1 : Key_Names; Key_2 : Key_Names; Key_3 : Key_Names; BEGIN -- OBJECTIVE: -- -- PROVIDE A KEYMAP WHICH MAKES THE TRANSITION FROM A RATIONAL TO A FACIT -- TERMINAL AS EASY AS POSSIBLE FOR CURRENT RATIONAL TERMINAL USERS. -- -- METHOD: -- -- PROVIDE A SET OF KEY BINDINGS WHEREIN THE GENERAL MODEL IS TO USE [ESC] -- AS A WHEREVER [META] IS USED AS A MODIFIER ON THE RATIONAL TERMINAL. -- UNFORTUNATELY, THE [ESC] KEY IS A SEPARATE KEYSTROKE. -- -- SUPPORT A KEYMAP WHICH CLOSELY RESEMBLES THE RATIONAL KEYMAP -- INCLUDING -- THE HORIZONTAL AND VERTICAL PLACEMENT OF ENTRIES -- GIVEN THE LIMITATIONS -- WITH RESPECT TO THE NUMBER OF ENTRIES POSSIBLE, THE FUNCTIONING OF THE -- [CTRL] AND [SHIFT] KEY MODIFIERS, AND THE [ESC]/[META] KEY EQUIVALENCE. -- -- SUPPORT A CURSOR/ITEM KEY-BASED TRAVERSAL MODEL WHICH PROVIDES A COMMON -- SET OF BROWSING OPERATIONS AND DOES NOT REQUIRE THE HANDS TO BE -- REPOSITIONED WHILE PERFORMING THIS SET OF OPERATIONS. CASE Action IS -- OVERRIDE/ADD BINDINGS TO BE PROCESSED AS INTERRUPTS -- WHEN Interrupt => CASE Key_1 IS WHEN F11 => Job.Disable (The_Job => 0, The_Session => ""); WHEN OTHERS => NULL; END CASE; -- OVERRIDE/ADD BINDINGS WHICH ARE TO BE PROMPTED FOR -- WHEN Prompt => CASE Key_1 IS WHEN Esc_C_F8 => Text.Create (Image_Name => ">>IMAGE_NAME<<", Kind => Text.File); WHEN C_F8 => Library.Create_World (Name => ">>WORLD NAME<<", Kind => Library.World, Vol => Library.Nil, Model => "!Model.R1000", Response => ""); WHEN Esc_F9 => Ada.Show_Unused (In_Unit => "", Check_Other_Units => False); WHEN C_F9 => Ada.Show_Usage (Name => "", Global => False, Limit => "", Closure => False); WHEN Esc_F10 => Cmvc.Check_In (What_Object => "", Comments => "", Work_Order => "", Response => ""); WHEN C_F10 => Cmvc.Check_Out (What_Object => "", Comments => "", Allow_Demotion => False, Allow_Implicit_Accept_Changes => True, Expected_Check_In_Time => "", Work_Order => "", Response => ""); WHEN Pf1 => CASE Key_2 IS WHEN '=' | '+' | '/' | '?' => Editor.Image.Find (Name => ">>NAME OR NAME FRAGMENT<<"); WHEN OTHERS => NULL; END CASE; WHEN OTHERS => NULL; END CASE; -- OVERRIDE/ADD BINDINGS TO BE EXECUTED WITHOUT PROMPTING -- WHEN Execute => -- NON-ITEM, NON-FUNCTION KEYS -- CASE Key_1 IS -- SUPPORT A BEGIN_OF/END_OF MODEL USING TAB/BACK_TAB KEYS -- (SIMILAR TO THAT USED WITH THE RATIONAL TERMINAL) -- WHEN Tab => -- [TAB] := [END OF] Editor.Line.End_Of (Offset => 0); WHEN Esc_Tab => -- [ESC]-[TAB] := [TAB] Editor.Char.Tab_Forward (Repeat => 1); WHEN Back_Tab => -- [BACK_TAB] := [BEGIN OF] Editor.Line.Beginning_Of (Offset => 0); WHEN Esc_Back_Tab => -- [ESC]-[BACK_TAB] := [BACK_TAB] Editor.Char.Tab_Backward (Repeat => 1); -- SUPPORT COMMON BROWSING OPERATIONS WITHOUT REPOSTIONING HANDS -- -- OPERATIONS INCLUDE: -- - A CURSOR KEY TRAVERSAL MODEL USING ESC_ KEYS -- (SIMILAR TO USING C_M_ ON THE RATIONAL TERMINAL) -- - IMAGE UP/DOWN USING S_ KEYS -- - WORD LEFT/RIGHT USING [ESC]-[OBJECT] AND [ESC]-[WINDOW] -- -- NOTE: THE SHIFT KEY DOES NOT MODIFY THE LEFT AND RIGHT ARROWS -- WHEN Esc_Up => Editor.Window.Previous (Repeat => 1); WHEN Esc_Down => Editor.Window.Next (Repeat => 1); WHEN Esc_Left => Common.Enclosing (In_Place => False, Library => False); WHEN Esc_Right => Common.Definition (Name => "", In_Place => False, Visible => True); -- IMAGE UP/DOWN -- WHEN S_Up => Editor.Image.Up (Repeat => 0); WHEN S_Down => Editor.Image.Down (Repeat => 0); -- WORD LEFT/RIGHT -- WHEN Esc_X3 => Editor.Word.Next (Repeat => 1); WHEN Esc_X1 => Editor.Word.Previous (Repeat => 1); -- SUPPORT ADA CHARACTERS -- -- NOTE: [CTRL] ONLY MODIFIES ALPHABETIC, '\', & FUNCTION KEYS -- WHEN Esc_Equal => Editor.Char.Insert_String (Value => " => "); WHEN Esc_Colon | Esc_Semicolon => Editor.Char.Insert_String (Value => " := "); -- SUPPORT C_M_ SEQUENCES WITH -- [ESC]-C_ SEQUENCES FOR CONSISTENCY -- (GENERALLY, NOT REAL USEFUL!) -- WHEN Esc_C_F => Editor.Cursor.Right (8); WHEN Esc_C_G => Editor.Cursor.Right (8); WHEN Esc_C_K => Ada.Delete_Blank_Line; WHEN Esc_C_M => NULL; -- REGULAR ENTRY "DELETED" WHEN Esc_C_R => Editor.Search.Replace_Previous (Repeat => -1); WHEN Esc_C_S => Editor.Search.Replace_Next (Repeat => -1); -- MIMIC THE CONTROL KEY SEQUENCES USED WITH THE RATIONAL -- TERMINAL (AND LEAVE THE "EXTRAS" ADDED FOR THE FACIT) -- WHEN C_B => Editor.Cursor.Backward; WHEN C_F => Editor.Cursor.Forward; WHEN C_Q => Editor.Key.Name; -- IMPLEMENT ESCAPE KEY SEQUENCES FOR LASER PRINTS: -- -- [ESC]-[P]-[1] := PRINT USING A 1-UP PAGE FORMAT -- [ESC]-[P]-[2] := PRINT USING A 2-UP PAGE FORMAT -- WHEN Esc_P => CASE Key_3 IS WHEN '1' | '!' => Queue.Print (Name => "", Options => "POSTSCRIPT => ( TWOUP => False, BORDER => False, FILENAME => False, DATE => False, PAGES => 1..1000 ), COPIES => 1, CLASS => Laser", Banner => "", Header => "", Footer => ""); WHEN '2' | '@' => Queue.Print (Name => "", Options => "POSTSCRIPT => ( TWOUP => True, BORDER => True, FILENAME => True, DATE => True, PAGES => 1..1000 ), COPIES => 1, CLASS => Laser", Banner => "", Header => "", Footer => ""); WHEN OTHERS => NULL; END CASE; -- ITEM KEY SEQUENCES -- (MOSTLY ADDING EQUIVALENCE FOR [ESC]-[TAB] AS [TAB]) -- WHEN X1 => CASE Key_2 IS WHEN Esc_Tab => Editor.Char.Tab_To_Comment; WHEN OTHERS => NULL; END CASE; WHEN X2 => CASE Key_2 IS WHEN Esc_Tab => Editor.Region.End_Of; WHEN OTHERS => NULL; END CASE; WHEN X3 => CASE Key_2 IS WHEN Esc_Tab => Editor.Window.End_Of; -- SUPPORT [WINDOW]-[] => MAX. # OF FRAMES -- WHEN '2' | '@' => Editor.Window.Frames (Maximum => 2); WHEN '3' | '#' => Editor.Window.Frames (Maximum => 3); WHEN '4' | '$' => Editor.Window.Frames (Maximum => 4); WHEN '5' | '%' => Editor.Window.Frames (Maximum => 5); WHEN '6' | '^' => Editor.Window.Frames (Maximum => 6); WHEN '7' | '&' => Editor.Window.Frames (Maximum => 7); WHEN '8' | '*' => Editor.Window.Frames (Maximum => 8); WHEN '9' | '(' => Editor.Window.Frames (Maximum => 9); WHEN OTHERS => NULL; END CASE; WHEN Pf1 => CASE Key_2 IS WHEN Esc_Tab => Editor.Image.End_Of (Offset => 0); WHEN OTHERS => NULL; END CASE; WHEN Pf2 => CASE Key_2 IS WHEN Esc_Tab => Editor.Line.End_Of (Offset => 0); WHEN OTHERS => NULL; END CASE; WHEN Pf3 => CASE Key_2 IS WHEN Esc_Tab => Editor.Word.End_Of; WHEN OTHERS => NULL; END CASE; WHEN Pf4 => CASE Key_2 IS WHEN C_M => Editor.Macro.Execute (Repeat => 1, Prior => 0); WHEN OTHERS => NULL; END CASE; -- ESCAPE ITEM KEY SEQUENCES -- WHEN Esc_X4 => Command.Debug; -- FUCTION KEY SEQUENCES -- -- ENTRY OF: -- "-- SAME" INDICATES IT IS SAME IN STANDARD BINDING -- "-- PROMPT SECTION" => ENTRY IS IN "Prompt" SECTION ABOVE -- "-- SAME (PROMPT)" => SAME AS STND BINDING & IS PROMPTED -- WHEN Esc_S_F1 => Debug.Task_Display (For_Task => "", Task_Set => Debug.All_Tasks); WHEN Esc_C_F1 => Debug.Stop (Name => ""); WHEN Esc_F1 => Debug.Run (Stop_At => Debug.Returned, Count => 1, In_Task => ""); WHEN C_F1 => Debug.Run (Stop_At => Debug.Local_Statement, Count => 1, In_Task => ""); -- WHEN S_F1 => -- SAME -- Debug.Execute (Name => ""); -- WHEN S_F1 => -- SAME -- Debug.Run (Stop_At => Debug.Statement, -- Count => 1, -- In_Task => ""); WHEN Esc_S_F2 => Debug.Show (Values_For => Debug.Breakpoints); WHEN Esc_C_F2 => Debug.Remove (Breakpoint => 0, Delete => False); -- WHEN Esc_F2 => -- SAME -- Debug.Activate (Breakpoint => 0); WHEN C_F2 => Debug.Break (Location => "", Stack_Frame => 0, Count => 1, In_Task => "", Default_Lifetime => True); WHEN S_F2 => Debug.Break (Location => "", Stack_Frame => 0, Count => 1, In_Task => "", Default_Lifetime => False); -- WHEN F2 => -- SAME -- Debug.Source (Location => "", Stack_Frame => 0); WHEN Esc_S_F3 => Debug.Current_Debugger (Target => ""); -- WHEN Esc_C_F3 => -- SAME (PROMPT) -- Debug.Modify (New_Value => "", -- Variable => "", -- Stack_Frame => 0); -- WHEN Esc_F3 => -- SAME -- Debug.Propagate -- (Name => "", In_Task => "", At_Location => ""); WHEN C_F3 => Debug.Catch (Name => "", In_Task => "", At_Location => ""); WHEN S_F3 => Debug.Stack (For_Task => "", Start => 0, Count => 0); -- WHEN F3 => -- SAME -- Debug.Put (Variable => "", Stack_Frame => 0); WHEN Esc_S_F4 => What.Home_Library; -- WHEN Esc_C_F4 => -- SAME -- Common.Enclosing (In_Place => True, Library => False); WHEN Esc_F4 => Common.Enclosing (In_Place => False, Library => False); WHEN C_F4 => Ada.Other_Part (Name => "", In_Place => False); -- WHEN S_F4 => -- SAME -- Common.Definition -- (Name => "", In_Place => True, Visible => False); -- WHEN F4 => -- SAME -- Common.Definition (Name => "", -- In_Place => False, -- Visible => False); WHEN Esc_S_F5 => What.Does (Name => "Help_On_Help"); WHEN Esc_C_F5 => Queue.Print (Name => "", Options => "", Banner => "", Header => "", Footer => ""); WHEN Esc_F5 => Editor.Key.Name (Key_Code => ""); WHEN C_F5 => Editor.Image.Find (Name => "Help Window"); -- WHEN S_F5 => -- SAME (PROMPT) -- What.Does (Name => ""); WHEN F5 => Editor.Key.Prompt (Key_Code => ""); WHEN Esc_S_F6 => Compilation.Make (Unit => "", Scope => Compilation.Load_Views, Goal => Compilation.Coded, Limit => "", Effort_Only => False, Response => ""); WHEN Esc_C_F6 => Compilation.Make (Unit => "", Scope => Compilation.All_Parts, Goal => Compilation.Coded, Limit => "", Effort_Only => False, Response => ""); -- WHEN Esc_F6 => -- SAME -- Compilation.Promote (Unit => "", -- Scope => Compilation.All_Parts, -- Goal => Compilation.Installed, -- Limit => "", -- Effort_Only => False, -- Response => ""); WHEN C_F6 => Ada.Code_Unit; WHEN S_F6 => Ada.Install_Stub; -- WHEN F6 => -- SAME -- Ada.Install_Unit; WHEN Esc_S_F7 => Compilation.Demote (Unit => "", Goal => Compilation.Installed, Limit => "", Effort_Only => False, Response => ""); WHEN Esc_C_F7 => Compilation.Demote (Unit => "", Goal => Compilation.Source, Limit => "", Effort_Only => False, Response => ""); WHEN Esc_F7 => Ada.Withdraw (Name => ""); -- WHEN C_F7 => -- SAME -- Ada.Source_Unit; -- WHEN S_F7 => -- SAME -- Common.Demote; -- WHEN F7 => -- SAME -- Common.Edit (Name => "", -- In_Place => False, -- Visible => True); WHEN Esc_S_F8 => Ada.Create_Private (Name => ""); -- WHEN Esc_C_F8 => -- PROMPT SECTION -- Text.Create (Image_Name => ">>IMAGE_NAME<<", Kind => Text.File); -- WHEN Esc_F8 => -- SAME (PROMPT) -- Library.Create_Directory (Name => ">>DIRECTORY NAME<<", -- Kind => Library.Directory, -- Vol => Library.Nil, -- Model => "", -- Response => ""); -- WHEN C_F8 => -- PROMPT SECTION -- Library.Create_World (Name => ">>WORLD NAME<<", -- Kind => Library.World, -- Vol => Library.Nil, -- Model => "!Model.R1000", -- Response => ""); -- WHEN S_F8 => -- SAME -- Ada.Create_Body (Name => ""); -- WHEN F8 => -- SAME -- Common.Create_Command; WHEN Esc_S_F9 => Ada.Get_Errors; WHEN Esc_C_F9 => Cmvc.Show (Objects => "", Response => ""); -- WHEN Esc_F9 => -- PROMPT SECTION -- Ada.Show_Unused (In_Unit => "", -- Check_Other_Units => False); -- WHEN C_F9 => -- PROMPT SECTION -- Ada.Show_Usage (Name => "", -- Global => False, -- Limit => "", -- Closure => False); WHEN S_F9 => Common.Semanticize; WHEN F9 => Common.Explain; WHEN Esc_S_F10 => Common.Clear_Underlining; WHEN Esc_C_F10 => NULL; -- ENTRY "DELETED" -- WHEN Esc_F10 => -- PROMPT SECTION -- Cmvc.Check_In (What_Object => "", -- Comments => "", -- Work_Order => "", -- Response => ""); -- WHEN C_F10 => -- PROMPT SECTION -- Cmvc.Check_Out (What_Object => "", -- Comments => "", -- Allow_Demotion => False, -- Allow_Implicit_Accept_Changes => True, -- Expected_Check_In_Time => "", -- Work_Order => "", -- Response => ""); WHEN S_F10 => Editor.Cursor.Previous (Repeat => 1, Prompt => True, Underline => True); WHEN F10 => Editor.Cursor.Next (Repeat => 1, Prompt => True, Underline => True); WHEN Esc_S_F11 => What.Jobs (Interval => 5, User_Jobs_Only => True, My_Jobs_Only => True, Running_Jobs_Only => False); WHEN Esc_C_F11 => NULL; -- ENTRY "DELETED" -- WHEN Esc_F11 => -- SAME (INTERRUPT) -- Job.Connect (The_Job => 0); -- WHEN C_F11 => -- SAME (INTERRUPT) -- Job.Kill (The_Job => 0, The_Session => ""); -- WHEN S_F11 => -- SAME (INTERRUPT) -- Job.Enable (The_Job => 0, The_Session => ""); -- WHEN F11 => -- INTERRUPT SECTION -- Job.Disable (The_Job => 0, The_Session => ""); WHEN Esc_Numeric_Comma => -- TEMPORARY BUG PATCH What.Load (Verbose => True); WHEN Esc_S_F12 => What.Load (Verbose => True); WHEN Esc_C_F12 => What.Object (Name => ""); WHEN Esc_F12 => What.Locks (Name => ""); WHEN C_F12 => What.Users (All_Users => True); WHEN Numeric_Comma => -- TEMPORARY BUG PATCH Access_List.Default_Display (For_World => ""); WHEN S_F12 => Access_List.Default_Display (For_World => ""); WHEN F12 => Access_List.Display (For_Object => ""); WHEN OTHERS => NULL; END CASE; END CASE; END Facit_Commands;