| 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; |