------------------------------------------------------------------------------ -- -- -- ASIS Tester And iNTerpreter (ASIStant) COMPONENTS -- -- -- -- A S I S T A N T . H E L P -- -- -- -- B o d y -- -- -- -- Copyright (c) 1997-2000, Free Software Foundation, Inc. -- -- -- -- ASIStant is free software; you can redistribute it and/or modify it -- -- under terms of the GNU General Public License as published by the Free -- -- Software Foundation; either version 2, or (at your option) any later -- -- version. ASIStant is distributed in the hope that it will be useful, -- -- but WITHOUT ANY WARRANTY; without even the implied warranty of MER- -- -- CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -- -- Public License for more details. You should have received a copy of the -- -- GNU General Public License distributed with GNAT; see file COPYING. If -- -- not, write to the Free Software Foundation, 59 Temple Place Suite 330, -- -- Boston, MA 02111-1307, USA. -- -- -- -- ASIStant is an evolution of ASIStint tool that was created by -- -- Vasiliy Fofanov as part of a collaboration between Software Engineering -- -- Laboratory of the Swiss Federal Institute of Technology in Lausanne, -- -- Switzerland, and the Scientific Research Computer Center of the Moscow -- -- University, Russia, supported by the Swiss National Science Foundation -- -- grant #7SUPJ048247, "Development of ASIS for GNAT with industry quality" -- -- -- -- ASIStant is distributed as a part of the ASIS implementation for GNAT -- -- (ASIS-for-GNAT) and is maintained by Ada Core Technologies Inc -- -- (http ://www.gnat.com). -- ------------------------------------------------------------------------------ with Asis; use Asis; with Asis.Implementation; with Asis.Extensions.Flat_Kinds; use Asis.Extensions.Flat_Kinds; with ASIStant.Ambiguous_Mapping; use ASIStant.Ambiguous_Mapping; with ASIStant.Call; use ASIStant.Call; with ASIStant.Common; use ASIStant.Common; with ASIStant.S_Parser; use ASIStant.S_Parser; with ASIStant.Table; use ASIStant.Table; with ASIStant.String_Handling; use ASIStant.String_Handling; with ASIStant.Text_IO; use ASIStant.Text_IO; with ASIStant.Help.Queries; with ASIStant.FuncEnum; use ASIStant.FuncEnum; package body ASIStant.Help is ----------------------- -- Local subprograms -- ----------------------- procedure Display_Query_Help (SW : Switch_Index); -- Displays help for a given ASIStant or ASIS query procedure Display_Syntax (SW : Switch_Index; SYNT : Func_Syntax); -- Displays the text representation of a given syntax structure ----------------------- -- Display_Kind_Help -- ----------------------- procedure Display_Kind_Help (K : Flat_Element_Kinds) is use ASIStant.Help.Queries; Q : Query_List := Appropriate_Queries (K); begin ATIPut_Line ( "Appropriate ASIS structural queries for " & To_Proper (Flat_Element_Kinds'Wide_Image (K)) & ":"); if Q (1) = Invalid_Index then ATIPut_Line (" None."); else for I in Q'Range loop exit when Q (I) = Invalid_Index; ATIPut_Line (" " & To_Proper (Switch_Index'Wide_Image (Q (I)))); end loop; end if; end Display_Kind_Help; ----------------------- -- Display_Query_Help -- ----------------------- procedure Display_Query_Help (SW : Switch_Index) is T : Func_Syntax; Amb : Amb_Index; begin ATIPut_Line (To_Proper (Switch_Index'Wide_Image (SW)) & " syntax:"); for I in Switch_Info'Range loop if SW in Switch_Info (I).From .. Switch_Info (I).To then T := Switch_Info (I).Synt; exit; end if; end loop; begin Amb := Amb_Index'Value (Switch_Index'Image (SW)); for i in 1 .. AI_LENGTH loop exit when Amb_Info (Amb, i).New_Index = Invalid_Index; Display_Syntax (SW, Amb_Info (Amb, i).Synt); end loop; exception when Constraint_Error => Display_Syntax (SW, T); end; end Display_Query_Help; -------------------- -- Display_Syntax -- -------------------- procedure Display_Syntax (SW : Switch_Index; SYNT : Func_Syntax) is begin ATIPut (" "); ATIPut (To_Proper (Switch_Index'Wide_Image (SW))); if SYNT (1) /= Par_Absent then ATIPut (" ("); end if; for i in Parameter_Range loop exit when SYNT (i) = Par_Absent; if i /= 1 then ATIPut (", "); end if; ATIPut (Skip_Prefix (Func_Param'Wide_Image (SYNT (i)))); end loop; if SYNT (1) /= Par_Absent then ATIPut (")"); end if; if SYNT (0) /= Par_Absent then ATIPut (" return "); ATIPut (Skip_Prefix (Func_Param'Wide_Image (SYNT (0)))); end if; ATINew_Line; end Display_Syntax; -------------- -- ASISHelp -- -------------- procedure ASISHelp is begin Print_ASIStant_Header; ATINew_Line; ATIPut_Line ("ASIS and ASIStant Technical and Copyright Information :"); ATINew_Line; ATIPut (" Asis Version : "); ATIPut_Line (Asis.Implementation.ASIS_Version); ATIPut (" Asis Implementor Version : "); ATIPut_Line (Asis.Implementation.ASIS_Implementor_Version); ATIPut (" Asis Implementor : "); ATIPut_Line (Asis.Implementation.ASIS_Implementor); ATIPut (" Asis Implementor Info : "); ATIPut_Line (Asis.Implementation.ASIS_Implementor_Information); ATINew_Line; ATIPut_Line (" ASIStant author Info : " & "Vasiliy Fofanov, ASIS-for-GNAT team at ACT Inc."); ATIPut_Line ( " Email : fofanov@act-europe.fr"); ATIPut_Line (" ASIStant status :"); if Log then ATIPut_Line (" Log enabled. Output Level : " & Integer'Wide_Image (OutputLevel)); else ATIPut_Line (" Log disabled."); end if; if Script > 0 then ATIPut_Line (" Script enabled (level " & Integer'Wide_Image (Script) & ") and is in " & Script_Mode'Wide_Image (ScriptMode) & " mode."); else ATIPut_Line (" Script disabled."); end if; end ASISHelp; ---------- -- Help -- ---------- procedure Help (NP : Node_Position) is N : Node := CurStat.Tree (NP); begin if N.NValue = 0 then -- general help Print_ASIStant_Header; ATINew_Line; ATIPut_Line ("List of ASIStant utilities :"); ATINew_Line; ATIPut_Line (" HELP () " & " Displays help for a specific "); ATIPut_Line (" IF (,[,]) Executes " & "if is true,"); ATIPut_Line (" otherwise, " & "executes if present"); ATIPut_Line (" INFO Displays ASIS and ASIStant " & "technical info"); ATIPut_Line (" LOG [("""")] Opens file as a current " & "log/closes current log"); ATIPut_Line (" LOGLEVEL () Sets a logging level to " & "integer , 0..5"); ATIPut_Line (" PAUSE Pauses current script"); ATIPut_Line (" PRINT () Prints a value " & "of a variable"); ATIPut_Line (" PRINTDETAIL (""{D|d}{T|t}"") Changes PRINT settings"); ATIPut_Line (" QUIT [()] Exits program returning " & " or 0"); ATIPut_Line (" RUN [("""")] Launches script " & "/resumes paused script"); ATIPut_Line (" (IRUN = interactively)"); ATIPut_Line (" SET ( , ) Declares or changes " & "variable "); ATINew_Line; ATIPut_Line ("Please refer to ASIStant User's Guide for more " & "information."); else -- specific help N := CurStat.Tree (N.NValue); -- receive parameter list N := CurStat.Tree (N.NValue); -- receive first element -- Determine type of requested help -- Is query help requested? declare sw : Switch_Index; begin sw := Switch_Index'Wide_Value (N.SValue.all); Display_Query_Help (sw); return; exception when others => null; -- trap exception if query unknown end; -- Is Flat_Element_Kind help requested? declare K : Flat_Element_Kinds; begin K := Flat_Element_Kinds'Wide_Value (N.SValue.all); Display_Kind_Help (K); return; exception when others => null; -- trap exception if Flat_Element_Kind unknown end; -- If we are here, the topic wasn't recognized Error (ERR_UNKNOWNQUERY, N.SValue.all); end if; end Help; end ASIStant.Help;