| 1 | 
 ---------------------------------------------------------------- | 
 
 
 
 
 
 | 2 | 
 --  ZLib for Ada thick binding.                               -- | 
 
 
 
 
 
 | 3 | 
 --                                                            -- | 
 
 
 
 
 
 | 4 | 
 --  Copyright (C) 2002-2003 Dmitriy Anisimkov                 -- | 
 
 
 
 
 
 | 5 | 
 --                                                            -- | 
 
 
 
 
 
 | 6 | 
 --  Open source license information is in the zlib.ads file.  -- | 
 
 
 
 
 
 | 7 | 
 ---------------------------------------------------------------- | 
 
 
 
 
 
 | 8 | 
  | 
 
 
 
 
 
 | 9 | 
 --  $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $ | 
 
 
 
 
 
 | 10 | 
  | 
 
 
 
 
 
 | 11 | 
 --  The program has a few aims. | 
 
 
 
 
 
 | 12 | 
 --  1. Test ZLib.Ada95 thick binding functionality. | 
 
 
 
 
 
 | 13 | 
 --  2. Show the example of use main functionality of the ZLib.Ada95 binding. | 
 
 
 
 
 
 | 14 | 
 --  3. Build this program automatically compile all ZLib.Ada95 packages under | 
 
 
 
 
 
 | 15 | 
 --     GNAT Ada95 compiler. | 
 
 
 
 
 
 | 16 | 
  | 
 
 
 
 
 
 | 17 | 
 with ZLib.Streams; | 
 
 
 
 
 
 | 18 | 
 with Ada.Streams.Stream_IO; | 
 
 
 
 
 
 | 19 | 
 with Ada.Numerics.Discrete_Random; | 
 
 
 
 
 
 | 20 | 
  | 
 
 
 
 
 
 | 21 | 
 with Ada.Text_IO; | 
 
 
 
 
 
 | 22 | 
  | 
 
 
 
 
 
 | 23 | 
 with Ada.Calendar; | 
 
 
 
 
 
 | 24 | 
  | 
 
 
 
 
 
 | 25 | 
 procedure Test is | 
 
 
 
 
 
 | 26 | 
  | 
 
 
 
 
 
 | 27 | 
    use Ada.Streams; | 
 
 
 
 
 
 | 28 | 
    use Stream_IO; | 
 
 
 
 
 
 | 29 | 
  | 
 
 
 
 
 
 | 30 | 
    ------------------------------------ | 
 
 
 
 
 
 | 31 | 
    --  Test configuration parameters -- | 
 
 
 
 
 
 | 32 | 
    ------------------------------------ | 
 
 
 
 
 
 | 33 | 
  | 
 
 
 
 
 
 | 34 | 
    File_Size   : Count   := 100_000; | 
 
 
 
 
 
 | 35 | 
    Continuous  : constant Boolean := False; | 
 
 
 
 
 
 | 36 | 
  | 
 
 
 
 
 
 | 37 | 
    Header      : constant ZLib.Header_Type := ZLib.Default; | 
 
 
 
 
 
 | 38 | 
                                               --  ZLib.None; | 
 
 
 
 
 
 | 39 | 
                                               --  ZLib.Auto; | 
 
 
 
 
 
 | 40 | 
                                               --  ZLib.GZip; | 
 
 
 
 
 
 | 41 | 
    --  Do not use Header other then Default in ZLib versions 1.1.4 | 
 
 
 
 
 
 | 42 | 
    --  and older. | 
 
 
 
 
 
 | 43 | 
  | 
 
 
 
 
 
 | 44 | 
    Strategy    : constant ZLib.Strategy_Type := ZLib.Default_Strategy; | 
 
 
 
 
 
 | 45 | 
    Init_Random : constant := 10; | 
 
 
 
 
 
 | 46 | 
  | 
 
 
 
 
 
 | 47 | 
    -- End -- | 
 
 
 
 
 
 | 48 | 
  | 
 
 
 
 
 
 | 49 | 
    In_File_Name  : constant String := "testzlib.in"; | 
 
 
 
 
 
 | 50 | 
    --  Name of the input file | 
 
 
 
 
 
 | 51 | 
  | 
 
 
 
 
 
 | 52 | 
    Z_File_Name   : constant String := "testzlib.zlb"; | 
 
 
 
 
 
 | 53 | 
    --  Name of the compressed file. | 
 
 
 
 
 
 | 54 | 
  | 
 
 
 
 
 
 | 55 | 
    Out_File_Name : constant String := "testzlib.out"; | 
 
 
 
 
 
 | 56 | 
    --  Name of the decompressed file. | 
 
 
 
 
 
 | 57 | 
  | 
 
 
 
 
 
 | 58 | 
    File_In   : File_Type; | 
 
 
 
 
 
 | 59 | 
    File_Out  : File_Type; | 
 
 
 
 
 
 | 60 | 
    File_Back : File_Type; | 
 
 
 
 
 
 | 61 | 
    File_Z    : ZLib.Streams.Stream_Type; | 
 
 
 
 
 
 | 62 | 
  | 
 
 
 
 
 
 | 63 | 
    Filter : ZLib.Filter_Type; | 
 
 
 
 
 
 | 64 | 
  | 
 
 
 
 
 
 | 65 | 
    Time_Stamp : Ada.Calendar.Time; | 
 
 
 
 
 
 | 66 | 
  | 
 
 
 
 
 
 | 67 | 
    procedure Generate_File; | 
 
 
 
 
 
 | 68 | 
    --  Generate file of spetsified size with some random data. | 
 
 
 
 
 
 | 69 | 
    --  The random data is repeatable, for the good compression. | 
 
 
 
 
 
 | 70 | 
  | 
 
 
 
 
 
 | 71 | 
    procedure Compare_Streams | 
 
 
 
 
 
 | 72 | 
      (Left, Right : in out Root_Stream_Type'Class); | 
 
 
 
 
 
 | 73 | 
    --  The procedure compearing data in 2 streams. | 
 
 
 
 
 
 | 74 | 
    --  It is for compare data before and after compression/decompression. | 
 
 
 
 
 
 | 75 | 
  | 
 
 
 
 
 
 | 76 | 
    procedure Compare_Files (Left, Right : String); | 
 
 
 
 
 
 | 77 | 
    --  Compare files. Based on the Compare_Streams. | 
 
 
 
 
 
 | 78 | 
  | 
 
 
 
 
 
 | 79 | 
    procedure Copy_Streams | 
 
 
 
 
 
 | 80 | 
      (Source, Target : in out Root_Stream_Type'Class; | 
 
 
 
 
 
 | 81 | 
       Buffer_Size    : in     Stream_Element_Offset := 1024); | 
 
 
 
 
 
 | 82 | 
    --  Copying data from one stream to another. It is for test stream | 
 
 
 
 
 
 | 83 | 
    --  interface of the library. | 
 
 
 
 
 
 | 84 | 
  | 
 
 
 
 
 
 | 85 | 
    procedure Data_In | 
 
 
 
 
 
 | 86 | 
      (Item : out Stream_Element_Array; | 
 
 
 
 
 
 | 87 | 
       Last : out Stream_Element_Offset); | 
 
 
 
 
 
 | 88 | 
    --  this procedure is for generic instantiation of | 
 
 
 
 
 
 | 89 | 
    --  ZLib.Generic_Translate. | 
 
 
 
 
 
 | 90 | 
    --  reading data from the File_In. | 
 
 
 
 
 
 | 91 | 
  | 
 
 
 
 
 
 | 92 | 
    procedure Data_Out (Item : in Stream_Element_Array); | 
 
 
 
 
 
 | 93 | 
    --  this procedure is for generic instantiation of | 
 
 
 
 
 
 | 94 | 
    --  ZLib.Generic_Translate. | 
 
 
 
 
 
 | 95 | 
    --  writing data to the File_Out. | 
 
 
 
 
 
 | 96 | 
  | 
 
 
 
 
 
 | 97 | 
    procedure Stamp; | 
 
 
 
 
 
 | 98 | 
    --  Store the timestamp to the local variable. | 
 
 
 
 
 
 | 99 | 
  | 
 
 
 
 
 
 | 100 | 
    procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count); | 
 
 
 
 
 
 | 101 | 
    --  Print the time statistic with the message. | 
 
 
 
 
 
 | 102 | 
  | 
 
 
 
 
 
 | 103 | 
    procedure Translate is new ZLib.Generic_Translate | 
 
 
 
 
 
 | 104 | 
                                 (Data_In  => Data_In, | 
 
 
 
 
 
 | 105 | 
                                  Data_Out => Data_Out); | 
 
 
 
 
 
 | 106 | 
    --  This procedure is moving data from File_In to File_Out | 
 
 
 
 
 
 | 107 | 
    --  with compression or decompression, depend on initialization of | 
 
 
 
 
 
 | 108 | 
    --  Filter parameter. | 
 
 
 
 
 
 | 109 | 
  | 
 
 
 
 
 
 | 110 | 
    ------------------- | 
 
 
 
 
 
 | 111 | 
    -- Compare_Files -- | 
 
 
 
 
 
 | 112 | 
    ------------------- | 
 
 
 
 
 
 | 113 | 
  | 
 
 
 
 
 
 | 114 | 
    procedure Compare_Files (Left, Right : String) is | 
 
 
 
 
 
 | 115 | 
       Left_File, Right_File : File_Type; | 
 
 
 
 
 
 | 116 | 
    begin | 
 
 
 
 
 
 | 117 | 
       Open (Left_File, In_File, Left); | 
 
 
 
 
 
 | 118 | 
       Open (Right_File, In_File, Right); | 
 
 
 
 
 
 | 119 | 
       Compare_Streams (Stream (Left_File).all, Stream (Right_File).all); | 
 
 
 
 
 
 | 120 | 
       Close (Left_File); | 
 
 
 
 
 
 | 121 | 
       Close (Right_File); | 
 
 
 
 
 
 | 122 | 
    end Compare_Files; | 
 
 
 
 
 
 | 123 | 
  | 
 
 
 
 
 
 | 124 | 
    --------------------- | 
 
 
 
 
 
 | 125 | 
    -- Compare_Streams -- | 
 
 
 
 
 
 | 126 | 
    --------------------- | 
 
 
 
 
 
 | 127 | 
  | 
 
 
 
 
 
 | 128 | 
    procedure Compare_Streams | 
 
 
 
 
 
 | 129 | 
      (Left, Right : in out Ada.Streams.Root_Stream_Type'Class) | 
 
 
 
 
 
 | 130 | 
    is | 
 
 
 
 
 
 | 131 | 
       Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#); | 
 
 
 
 
 
 | 132 | 
       Left_Last, Right_Last : Stream_Element_Offset; | 
 
 
 
 
 
 | 133 | 
    begin | 
 
 
 
 
 
 | 134 | 
       loop | 
 
 
 
 
 
 | 135 | 
          Read (Left, Left_Buffer, Left_Last); | 
 
 
 
 
 
 | 136 | 
          Read (Right, Right_Buffer, Right_Last); | 
 
 
 
 
 
 | 137 | 
  | 
 
 
 
 
 
 | 138 | 
          if Left_Last /= Right_Last then | 
 
 
 
 
 
 | 139 | 
             Ada.Text_IO.Put_Line ("Compare error :" | 
 
 
 
 
 
 | 140 | 
               & Stream_Element_Offset'Image (Left_Last) | 
 
 
 
 
 
 | 141 | 
               & " /= " | 
 
 
 
 
 
 | 142 | 
               & Stream_Element_Offset'Image (Right_Last)); | 
 
 
 
 
 
 | 143 | 
  | 
 
 
 
 
 
 | 144 | 
             raise Constraint_Error; | 
 
 
 
 
 
 | 145 | 
  | 
 
 
 
 
 
 | 146 | 
          elsif Left_Buffer (0 .. Left_Last) | 
 
 
 
 
 
 | 147 | 
                /= Right_Buffer (0 .. Right_Last) | 
 
 
 
 
 
 | 148 | 
          then | 
 
 
 
 
 
 | 149 | 
             Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal."); | 
 
 
 
 
 
 | 150 | 
             raise Constraint_Error; | 
 
 
 
 
 
 | 151 | 
  | 
 
 
 
 
 
 | 152 | 
          end if; | 
 
 
 
 
 
 | 153 | 
  | 
 
 
 
 
 
 | 154 | 
          exit when Left_Last < Left_Buffer'Last; | 
 
 
 
 
 
 | 155 | 
       end loop; | 
 
 
 
 
 
 | 156 | 
    end Compare_Streams; | 
 
 
 
 
 
 | 157 | 
  | 
 
 
 
 
 
 | 158 | 
    ------------------ | 
 
 
 
 
 
 | 159 | 
    -- Copy_Streams -- | 
 
 
 
 
 
 | 160 | 
    ------------------ | 
 
 
 
 
 
 | 161 | 
  | 
 
 
 
 
 
 | 162 | 
    procedure Copy_Streams | 
 
 
 
 
 
 | 163 | 
      (Source, Target : in out Ada.Streams.Root_Stream_Type'Class; | 
 
 
 
 
 
 | 164 | 
       Buffer_Size    : in     Stream_Element_Offset := 1024) | 
 
 
 
 
 
 | 165 | 
    is | 
 
 
 
 
 
 | 166 | 
       Buffer : Stream_Element_Array (1 .. Buffer_Size); | 
 
 
 
 
 
 | 167 | 
       Last   : Stream_Element_Offset; | 
 
 
 
 
 
 | 168 | 
    begin | 
 
 
 
 
 
 | 169 | 
       loop | 
 
 
 
 
 
 | 170 | 
          Read  (Source, Buffer, Last); | 
 
 
 
 
 
 | 171 | 
          Write (Target, Buffer (1 .. Last)); | 
 
 
 
 
 
 | 172 | 
  | 
 
 
 
 
 
 | 173 | 
          exit when Last < Buffer'Last; | 
 
 
 
 
 
 | 174 | 
       end loop; | 
 
 
 
 
 
 | 175 | 
    end Copy_Streams; | 
 
 
 
 
 
 | 176 | 
  | 
 
 
 
 
 
 | 177 | 
    ------------- | 
 
 
 
 
 
 | 178 | 
    -- Data_In -- | 
 
 
 
 
 
 | 179 | 
    ------------- | 
 
 
 
 
 
 | 180 | 
  | 
 
 
 
 
 
 | 181 | 
    procedure Data_In | 
 
 
 
 
 
 | 182 | 
      (Item : out Stream_Element_Array; | 
 
 
 
 
 
 | 183 | 
       Last : out Stream_Element_Offset) is | 
 
 
 
 
 
 | 184 | 
    begin | 
 
 
 
 
 
 | 185 | 
       Read (File_In, Item, Last); | 
 
 
 
 
 
 | 186 | 
    end Data_In; | 
 
 
 
 
 
 | 187 | 
  | 
 
 
 
 
 
 | 188 | 
    -------------- | 
 
 
 
 
 
 | 189 | 
    -- Data_Out -- | 
 
 
 
 
 
 | 190 | 
    -------------- | 
 
 
 
 
 
 | 191 | 
  | 
 
 
 
 
 
 | 192 | 
    procedure Data_Out (Item : in Stream_Element_Array) is | 
 
 
 
 
 
 | 193 | 
    begin | 
 
 
 
 
 
 | 194 | 
       Write (File_Out, Item); | 
 
 
 
 
 
 | 195 | 
    end Data_Out; | 
 
 
 
 
 
 | 196 | 
  | 
 
 
 
 
 
 | 197 | 
    ------------------- | 
 
 
 
 
 
 | 198 | 
    -- Generate_File -- | 
 
 
 
 
 
 | 199 | 
    ------------------- | 
 
 
 
 
 
 | 200 | 
  | 
 
 
 
 
 
 | 201 | 
    procedure Generate_File is | 
 
 
 
 
 
 | 202 | 
       subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; | 
 
 
 
 
 
 | 203 | 
  | 
 
 
 
 
 
 | 204 | 
       package Random_Elements is | 
 
 
 
 
 
 | 205 | 
          new Ada.Numerics.Discrete_Random (Visible_Symbols); | 
 
 
 
 
 
 | 206 | 
  | 
 
 
 
 
 
 | 207 | 
       Gen    : Random_Elements.Generator; | 
 
 
 
 
 
 | 208 | 
       Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10; | 
 
 
 
 
 
 | 209 | 
  | 
 
 
 
 
 
 | 210 | 
       Buffer_Count : constant Count := File_Size / Buffer'Length; | 
 
 
 
 
 
 | 211 | 
       --  Number of same buffers in the packet. | 
 
 
 
 
 
 | 212 | 
  | 
 
 
 
 
 
 | 213 | 
       Density : constant Count := 30; --  from 0 to Buffer'Length - 2; | 
 
 
 
 
 
 | 214 | 
  | 
 
 
 
 
 
 | 215 | 
       procedure Fill_Buffer (J, D : in Count); | 
 
 
 
 
 
 | 216 | 
       --  Change the part of the buffer. | 
 
 
 
 
 
 | 217 | 
  | 
 
 
 
 
 
 | 218 | 
       ----------------- | 
 
 
 
 
 
 | 219 | 
       -- Fill_Buffer -- | 
 
 
 
 
 
 | 220 | 
       ----------------- | 
 
 
 
 
 
 | 221 | 
  | 
 
 
 
 
 
 | 222 | 
       procedure Fill_Buffer (J, D : in Count) is | 
 
 
 
 
 
 | 223 | 
       begin | 
 
 
 
 
 
 | 224 | 
          for K in 0 .. D loop | 
 
 
 
 
 
 | 225 | 
             Buffer | 
 
 
 
 
 
 | 226 | 
               (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1)) | 
 
 
 
 
 
 | 227 | 
              := Random_Elements.Random (Gen); | 
 
 
 
 
 
 | 228 | 
  | 
 
 
 
 
 
 | 229 | 
          end loop; | 
 
 
 
 
 
 | 230 | 
       end Fill_Buffer; | 
 
 
 
 
 
 | 231 | 
  | 
 
 
 
 
 
 | 232 | 
    begin | 
 
 
 
 
 
 | 233 | 
       Random_Elements.Reset (Gen, Init_Random); | 
 
 
 
 
 
 | 234 | 
  | 
 
 
 
 
 
 | 235 | 
       Create (File_In, Out_File, In_File_Name); | 
 
 
 
 
 
 | 236 | 
  | 
 
 
 
 
 
 | 237 | 
       Fill_Buffer (1, Buffer'Length - 2); | 
 
 
 
 
 
 | 238 | 
  | 
 
 
 
 
 
 | 239 | 
       for J in 1 .. Buffer_Count loop | 
 
 
 
 
 
 | 240 | 
          Write (File_In, Buffer); | 
 
 
 
 
 
 | 241 | 
  | 
 
 
 
 
 
 | 242 | 
          Fill_Buffer (J, Density); | 
 
 
 
 
 
 | 243 | 
       end loop; | 
 
 
 
 
 
 | 244 | 
  | 
 
 
 
 
 
 | 245 | 
       --  fill remain size. | 
 
 
 
 
 
 | 246 | 
  | 
 
 
 
 
 
 | 247 | 
       Write | 
 
 
 
 
 
 | 248 | 
         (File_In, | 
 
 
 
 
 
 | 249 | 
          Buffer | 
 
 
 
 
 
 | 250 | 
            (1 .. Stream_Element_Offset | 
 
 
 
 
 
 | 251 | 
                    (File_Size - Buffer'Length * Buffer_Count))); | 
 
 
 
 
 
 | 252 | 
  | 
 
 
 
 
 
 | 253 | 
       Flush (File_In); | 
 
 
 
 
 
 | 254 | 
       Close (File_In); | 
 
 
 
 
 
 | 255 | 
    end Generate_File; | 
 
 
 
 
 
 | 256 | 
  | 
 
 
 
 
 
 | 257 | 
    --------------------- | 
 
 
 
 
 
 | 258 | 
    -- Print_Statistic -- | 
 
 
 
 
 
 | 259 | 
    --------------------- | 
 
 
 
 
 
 | 260 | 
  | 
 
 
 
 
 
 | 261 | 
    procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is | 
 
 
 
 
 
 | 262 | 
       use Ada.Calendar; | 
 
 
 
 
 
 | 263 | 
       use Ada.Text_IO; | 
 
 
 
 
 
 | 264 | 
  | 
 
 
 
 
 
 | 265 | 
       package Count_IO is new Integer_IO (ZLib.Count); | 
 
 
 
 
 
 | 266 | 
  | 
 
 
 
 
 
 | 267 | 
       Curr_Dur : Duration := Clock - Time_Stamp; | 
 
 
 
 
 
 | 268 | 
    begin | 
 
 
 
 
 
 | 269 | 
       Put (Msg); | 
 
 
 
 
 
 | 270 | 
  | 
 
 
 
 
 
 | 271 | 
       Set_Col (20); | 
 
 
 
 
 
 | 272 | 
       Ada.Text_IO.Put ("size ="); | 
 
 
 
 
 
 | 273 | 
  | 
 
 
 
 
 
 | 274 | 
       Count_IO.Put | 
 
 
 
 
 
 | 275 | 
         (Data_Size, | 
 
 
 
 
 
 | 276 | 
          Width => Stream_IO.Count'Image (File_Size)'Length); | 
 
 
 
 
 
 | 277 | 
  | 
 
 
 
 
 
 | 278 | 
       Put_Line (" duration =" & Duration'Image (Curr_Dur)); | 
 
 
 
 
 
 | 279 | 
    end Print_Statistic; | 
 
 
 
 
 
 | 280 | 
  | 
 
 
 
 
 
 | 281 | 
    ----------- | 
 
 
 
 
 
 | 282 | 
    -- Stamp -- | 
 
 
 
 
 
 | 283 | 
    ----------- | 
 
 
 
 
 
 | 284 | 
  | 
 
 
 
 
 
 | 285 | 
    procedure Stamp is | 
 
 
 
 
 
 | 286 | 
    begin | 
 
 
 
 
 
 | 287 | 
       Time_Stamp := Ada.Calendar.Clock; | 
 
 
 
 
 
 | 288 | 
    end Stamp; | 
 
 
 
 
 
 | 289 | 
  | 
 
 
 
 
 
 | 290 | 
 begin | 
 
 
 
 
 
 | 291 | 
    Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); | 
 
 
 
 
 
 | 292 | 
  | 
 
 
 
 
 
 | 293 | 
    loop | 
 
 
 
 
 
 | 294 | 
       Generate_File; | 
 
 
 
 
 
 | 295 | 
  | 
 
 
 
 
 
 | 296 | 
       for Level in ZLib.Compression_Level'Range loop | 
 
 
 
 
 
 | 297 | 
  | 
 
 
 
 
 
 | 298 | 
          Ada.Text_IO.Put_Line ("Level =" | 
 
 
 
 
 
 | 299 | 
             & ZLib.Compression_Level'Image (Level)); | 
 
 
 
 
 
 | 300 | 
  | 
 
 
 
 
 
 | 301 | 
          --  Test generic interface. | 
 
 
 
 
 
 | 302 | 
          Open   (File_In, In_File, In_File_Name); | 
 
 
 
 
 
 | 303 | 
          Create (File_Out, Out_File, Z_File_Name); | 
 
 
 
 
 
 | 304 | 
  | 
 
 
 
 
 
 | 305 | 
          Stamp; | 
 
 
 
 
 
 | 306 | 
  | 
 
 
 
 
 
 | 307 | 
          --  Deflate using generic instantiation. | 
 
 
 
 
 
 | 308 | 
  | 
 
 
 
 
 
 | 309 | 
          ZLib.Deflate_Init | 
 
 
 
 
 
 | 310 | 
                (Filter   => Filter, | 
 
 
 
 
 
 | 311 | 
                 Level    => Level, | 
 
 
 
 
 
 | 312 | 
                 Strategy => Strategy, | 
 
 
 
 
 
 | 313 | 
                 Header   => Header); | 
 
 
 
 
 
 | 314 | 
  | 
 
 
 
 
 
 | 315 | 
          Translate (Filter); | 
 
 
 
 
 
 | 316 | 
          Print_Statistic ("Generic compress", ZLib.Total_Out (Filter)); | 
 
 
 
 
 
 | 317 | 
          ZLib.Close (Filter); | 
 
 
 
 
 
 | 318 | 
  | 
 
 
 
 
 
 | 319 | 
          Close (File_In); | 
 
 
 
 
 
 | 320 | 
          Close (File_Out); | 
 
 
 
 
 
 | 321 | 
  | 
 
 
 
 
 
 | 322 | 
          Open   (File_In, In_File, Z_File_Name); | 
 
 
 
 
 
 | 323 | 
          Create (File_Out, Out_File, Out_File_Name); | 
 
 
 
 
 
 | 324 | 
  | 
 
 
 
 
 
 | 325 | 
          Stamp; | 
 
 
 
 
 
 | 326 | 
  | 
 
 
 
 
 
 | 327 | 
          --  Inflate using generic instantiation. | 
 
 
 
 
 
 | 328 | 
  | 
 
 
 
 
 
 | 329 | 
          ZLib.Inflate_Init (Filter, Header => Header); | 
 
 
 
 
 
 | 330 | 
  | 
 
 
 
 
 
 | 331 | 
          Translate (Filter); | 
 
 
 
 
 
 | 332 | 
          Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter)); | 
 
 
 
 
 
 | 333 | 
  | 
 
 
 
 
 
 | 334 | 
          ZLib.Close (Filter); | 
 
 
 
 
 
 | 335 | 
  | 
 
 
 
 
 
 | 336 | 
          Close (File_In); | 
 
 
 
 
 
 | 337 | 
          Close (File_Out); | 
 
 
 
 
 
 | 338 | 
  | 
 
 
 
 
 
 | 339 | 
          Compare_Files (In_File_Name, Out_File_Name); | 
 
 
 
 
 
 | 340 | 
  | 
 
 
 
 
 
 | 341 | 
          --  Test stream interface. | 
 
 
 
 
 
 | 342 | 
  | 
 
 
 
 
 
 | 343 | 
          --  Compress to the back stream. | 
 
 
 
 
 
 | 344 | 
  | 
 
 
 
 
 
 | 345 | 
          Open   (File_In, In_File, In_File_Name); | 
 
 
 
 
 
 | 346 | 
          Create (File_Back, Out_File, Z_File_Name); | 
 
 
 
 
 
 | 347 | 
  | 
 
 
 
 
 
 | 348 | 
          Stamp; | 
 
 
 
 
 
 | 349 | 
  | 
 
 
 
 
 
 | 350 | 
          ZLib.Streams.Create | 
 
 
 
 
 
 | 351 | 
            (Stream          => File_Z, | 
 
 
 
 
 
 | 352 | 
             Mode            => ZLib.Streams.Out_Stream, | 
 
 
 
 
 
 | 353 | 
             Back            => ZLib.Streams.Stream_Access | 
 
 
 
 
 
 | 354 | 
                                  (Stream (File_Back)), | 
 
 
 
 
 
 | 355 | 
             Back_Compressed => True, | 
 
 
 
 
 
 | 356 | 
             Level           => Level, | 
 
 
 
 
 
 | 357 | 
             Strategy        => Strategy, | 
 
 
 
 
 
 | 358 | 
             Header          => Header); | 
 
 
 
 
 
 | 359 | 
  | 
 
 
 
 
 
 | 360 | 
          Copy_Streams | 
 
 
 
 
 
 | 361 | 
            (Source => Stream (File_In).all, | 
 
 
 
 
 
 | 362 | 
             Target => File_Z); | 
 
 
 
 
 
 | 363 | 
  | 
 
 
 
 
 
 | 364 | 
          --  Flushing internal buffers to the back stream. | 
 
 
 
 
 
 | 365 | 
  | 
 
 
 
 
 
 | 366 | 
          ZLib.Streams.Flush (File_Z, ZLib.Finish); | 
 
 
 
 
 
 | 367 | 
  | 
 
 
 
 
 
 | 368 | 
          Print_Statistic ("Write compress", | 
 
 
 
 
 
 | 369 | 
                           ZLib.Streams.Write_Total_Out (File_Z)); | 
 
 
 
 
 
 | 370 | 
  | 
 
 
 
 
 
 | 371 | 
          ZLib.Streams.Close (File_Z); | 
 
 
 
 
 
 | 372 | 
  | 
 
 
 
 
 
 | 373 | 
          Close (File_In); | 
 
 
 
 
 
 | 374 | 
          Close (File_Back); | 
 
 
 
 
 
 | 375 | 
  | 
 
 
 
 
 
 | 376 | 
          --  Compare reading from original file and from | 
 
 
 
 
 
 | 377 | 
          --  decompression stream. | 
 
 
 
 
 
 | 378 | 
  | 
 
 
 
 
 
 | 379 | 
          Open (File_In,   In_File, In_File_Name); | 
 
 
 
 
 
 | 380 | 
          Open (File_Back, In_File, Z_File_Name); | 
 
 
 
 
 
 | 381 | 
  | 
 
 
 
 
 
 | 382 | 
          ZLib.Streams.Create | 
 
 
 
 
 
 | 383 | 
            (Stream          => File_Z, | 
 
 
 
 
 
 | 384 | 
             Mode            => ZLib.Streams.In_Stream, | 
 
 
 
 
 
 | 385 | 
             Back            => ZLib.Streams.Stream_Access | 
 
 
 
 
 
 | 386 | 
                                  (Stream (File_Back)), | 
 
 
 
 
 
 | 387 | 
             Back_Compressed => True, | 
 
 
 
 
 
 | 388 | 
             Header          => Header); | 
 
 
 
 
 
 | 389 | 
  | 
 
 
 
 
 
 | 390 | 
          Stamp; | 
 
 
 
 
 
 | 391 | 
          Compare_Streams (Stream (File_In).all, File_Z); | 
 
 
 
 
 
 | 392 | 
  | 
 
 
 
 
 
 | 393 | 
          Print_Statistic ("Read decompress", | 
 
 
 
 
 
 | 394 | 
                           ZLib.Streams.Read_Total_Out (File_Z)); | 
 
 
 
 
 
 | 395 | 
  | 
 
 
 
 
 
 | 396 | 
          ZLib.Streams.Close (File_Z); | 
 
 
 
 
 
 | 397 | 
          Close (File_In); | 
 
 
 
 
 
 | 398 | 
          Close (File_Back); | 
 
 
 
 
 
 | 399 | 
  | 
 
 
 
 
 
 | 400 | 
          --  Compress by reading from compression stream. | 
 
 
 
 
 
 | 401 | 
  | 
 
 
 
 
 
 | 402 | 
          Open (File_Back, In_File, In_File_Name); | 
 
 
 
 
 
 | 403 | 
          Create (File_Out, Out_File, Z_File_Name); | 
 
 
 
 
 
 | 404 | 
  | 
 
 
 
 
 
 | 405 | 
          ZLib.Streams.Create | 
 
 
 
 
 
 | 406 | 
            (Stream          => File_Z, | 
 
 
 
 
 
 | 407 | 
             Mode            => ZLib.Streams.In_Stream, | 
 
 
 
 
 
 | 408 | 
             Back            => ZLib.Streams.Stream_Access | 
 
 
 
 
 
 | 409 | 
                                  (Stream (File_Back)), | 
 
 
 
 
 
 | 410 | 
             Back_Compressed => False, | 
 
 
 
 
 
 | 411 | 
             Level           => Level, | 
 
 
 
 
 
 | 412 | 
             Strategy        => Strategy, | 
 
 
 
 
 
 | 413 | 
             Header          => Header); | 
 
 
 
 
 
 | 414 | 
  | 
 
 
 
 
 
 | 415 | 
          Stamp; | 
 
 
 
 
 
 | 416 | 
          Copy_Streams | 
 
 
 
 
 
 | 417 | 
            (Source => File_Z, | 
 
 
 
 
 
 | 418 | 
             Target => Stream (File_Out).all); | 
 
 
 
 
 
 | 419 | 
  | 
 
 
 
 
 
 | 420 | 
          Print_Statistic ("Read compress", | 
 
 
 
 
 
 | 421 | 
                           ZLib.Streams.Read_Total_Out (File_Z)); | 
 
 
 
 
 
 | 422 | 
  | 
 
 
 
 
 
 | 423 | 
          ZLib.Streams.Close (File_Z); | 
 
 
 
 
 
 | 424 | 
  | 
 
 
 
 
 
 | 425 | 
          Close (File_Out); | 
 
 
 
 
 
 | 426 | 
          Close (File_Back); | 
 
 
 
 
 
 | 427 | 
  | 
 
 
 
 
 
 | 428 | 
          --  Decompress to decompression stream. | 
 
 
 
 
 
 | 429 | 
  | 
 
 
 
 
 
 | 430 | 
          Open   (File_In,   In_File, Z_File_Name); | 
 
 
 
 
 
 | 431 | 
          Create (File_Back, Out_File, Out_File_Name); | 
 
 
 
 
 
 | 432 | 
  | 
 
 
 
 
 
 | 433 | 
          ZLib.Streams.Create | 
 
 
 
 
 
 | 434 | 
            (Stream          => File_Z, | 
 
 
 
 
 
 | 435 | 
             Mode            => ZLib.Streams.Out_Stream, | 
 
 
 
 
 
 | 436 | 
             Back            => ZLib.Streams.Stream_Access | 
 
 
 
 
 
 | 437 | 
                                  (Stream (File_Back)), | 
 
 
 
 
 
 | 438 | 
             Back_Compressed => False, | 
 
 
 
 
 
 | 439 | 
             Header          => Header); | 
 
 
 
 
 
 | 440 | 
  | 
 
 
 
 
 
 | 441 | 
          Stamp; | 
 
 
 
 
 
 | 442 | 
  | 
 
 
 
 
 
 | 443 | 
          Copy_Streams | 
 
 
 
 
 
 | 444 | 
            (Source => Stream (File_In).all, | 
 
 
 
 
 
 | 445 | 
             Target => File_Z); | 
 
 
 
 
 
 | 446 | 
  | 
 
 
 
 
 
 | 447 | 
          Print_Statistic ("Write decompress", | 
 
 
 
 
 
 | 448 | 
                           ZLib.Streams.Write_Total_Out (File_Z)); | 
 
 
 
 
 
 | 449 | 
  | 
 
 
 
 
 
 | 450 | 
          ZLib.Streams.Close (File_Z); | 
 
 
 
 
 
 | 451 | 
          Close (File_In); | 
 
 
 
 
 
 | 452 | 
          Close (File_Back); | 
 
 
 
 
 
 | 453 | 
  | 
 
 
 
 
 
 | 454 | 
          Compare_Files (In_File_Name, Out_File_Name); | 
 
 
 
 
 
 | 455 | 
       end loop; | 
 
 
 
 
 
 | 456 | 
  | 
 
 
 
 
 
 | 457 | 
       Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok."); | 
 
 
 
 
 
 | 458 | 
  | 
 
 
 
 
 
 | 459 | 
       exit when not Continuous; | 
 
 
 
 
 
 | 460 | 
  | 
 
 
 
 
 
 | 461 | 
       File_Size := File_Size + 1; | 
 
 
 
 
 
 | 462 | 
    end loop; | 
 
 
 
 
 
 | 463 | 
 end Test; |