------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Cheddar is a GNU GPL real-time scheduling analysis tool. -- This program provides services to automatically check schedulability and -- other performance criteria of real-time architecture models. -- -- Copyright (C) 2002-2023, Frank Singhoff, Alain Plantec, Jerome Legrand, -- Hai Nam Tran, Stephane Rubini -- -- The Cheddar project was started in 2002 by -- Frank Singhoff, Lab-STICC UMR 6285, Université de Bretagne Occidentale -- -- Cheddar has been published in the "Agence de Protection des Programmes/France" in 2008. -- Since 2008, Ellidiss technologies also contributes to the development of -- Cheddar and provides industrial support. -- -- The full list of contributors and sponsors can be found in README.md -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY 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 -- along with this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- -- -- Contact : cheddar@listes.univ-brest.fr -- ------------------------------------------------------------------------------ -- Last update : -- $Rev$ -- $Date$ -- $Author: singhoff $ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ with version; use version; with Ada.IO_Exceptions; use Ada.IO_Exceptions; with GNAT.Current_Exception; use GNAT.Current_Exception; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with unbounded_strings; use unbounded_strings; with GNAT.Command_Line; use GNAT.Command_Line; with GNAT.OS_Lib; use GNAT.OS_Lib; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with Input_Sources.File; use Input_Sources.File; with Sax.Encodings; use Sax.Encodings; with Unicode.CES; use Unicode.CES; with Unicode.Encodings; use Unicode.Encodings; with Ada.Direct_IO; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.Text_IO; with Ada.Text_IO.Text_Streams; use Ada.Text_IO.Text_Streams; with Ada.Unchecked_Deallocation; with DOM.Core.Documents; use DOM.Core, DOM.Core.Documents; with DOM.Core; use DOM.Core; with DOM.Core.Nodes; use DOM.Core.Nodes; with DOM.Readers; use DOM.Readers; with GNAT.Command_Line; use GNAT.Command_Line; with GNAT.Expect; use GNAT.Expect; with GNAT.OS_Lib; use GNAT.OS_Lib; with Input_Sources.File; use Input_Sources.File; with Input_Sources.Http; use Input_Sources.Http; with Input_Sources; use Input_Sources; with Sax.Readers; use Sax.Readers; with Sax.Symbols; use Sax.Symbols; with Sax.Utils; use Sax.Utils; procedure xmllint is procedure usage is begin New_Line; Put_Line ("Usage : xmllint infile"); Put_Line (" switch can be :"); Put_Line (" -u get this help"); New_Line; end usage; infile : Unbounded_String; input : file_input; reader : tree_reader; d : document; begin copyright ("xmllint"); -- Get arguments -- loop case Getopt ("u") is when ASCII.NUL => exit; when 'u' => usage; OS_Exit (0); when others => usage; OS_Exit (0); end case; end loop; loop declare s : constant String := Get_Argument (Do_Expansion => True); begin exit when s'Length = 0; infile := infile & s; end; end loop; if (infile = unbounded_strings.empty_string) then Put_Line ("xmllint.adb : a file name is required"); usage; OS_Exit (0); end if; Set_Feature (reader, Validation_Feature, False); Set_Feature (reader, Schema_Validation_Feature, False); Set_Feature (reader, External_General_Entities_Feature, False); Set_Feature (reader, External_Parameter_Entities_Feature, False); Open (To_String (infile), input); Parse (reader, input); d := Get_Tree (reader); Write (Stream => Stream (Current_Output), N => d, Print_Comments => False, Print_XML_Declaration => True, With_URI => False, EOL_Sequence => "" & ASCII.LF, Pretty_Print => True, Encoding => Unicode.Encodings.Get_By_Name ("utf-8"), Collapse_Empty_Nodes => False); Free (reader); Close (input); exception when Invalid_Switch => begin Put_Line ("xmllint.adb : invalid Switch " & Full_Switch); usage; end; when Invalid_Parameter => Put_Line ("xmllint.adb : missing parameter for switch " & Full_Switch); when Ada.IO_Exceptions.Name_Error => Put_Line ("xmllint.adb : Can not access file, Name_Error"); when Ada.IO_Exceptions.Status_Error => Put_Line ("xmllint.adb : Can not access file, Status_Error"); when Ada.IO_Exceptions.Mode_Error => Put_Line ("xmllint.adb : Can not access file, Mode_Error"); when Ada.IO_Exceptions.Use_Error => Put_Line ("xmllint.adb : Can not access file, Use_Error"); when Ada.IO_Exceptions.Device_Error => Put_Line ("xmllint.adb : Can not access file, Device_Error"); when Ada.IO_Exceptions.End_Error => Put_Line ("xmllint.adb : Can not access file, End_Error"); when Ada.IO_Exceptions.Data_Error => Put_Line ("xmllint.adb : Can not access file, Data_Error"); when Ada.IO_Exceptions.Layout_Error => Put_Line ("xmllint.adb : Can not access file, Layout_Error"); when others => Put_Line ("Exception name : " & Exception_Name); Put_Line ("Exception message : " & Exception_Message); end xmllint;