1275793eaSopenharmony_ci---------------------------------------------------------------- 2275793eaSopenharmony_ci-- ZLib for Ada thick binding. -- 3275793eaSopenharmony_ci-- -- 4275793eaSopenharmony_ci-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- 5275793eaSopenharmony_ci-- -- 6275793eaSopenharmony_ci-- Open source license information is in the zlib.ads file. -- 7275793eaSopenharmony_ci---------------------------------------------------------------- 8275793eaSopenharmony_ci 9275793eaSopenharmony_ci-- $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $ 10275793eaSopenharmony_ci 11275793eaSopenharmony_ci-- The program has a few aims. 12275793eaSopenharmony_ci-- 1. Test ZLib.Ada95 thick binding functionality. 13275793eaSopenharmony_ci-- 2. Show the example of use main functionality of the ZLib.Ada95 binding. 14275793eaSopenharmony_ci-- 3. Build this program automatically compile all ZLib.Ada95 packages under 15275793eaSopenharmony_ci-- GNAT Ada95 compiler. 16275793eaSopenharmony_ci 17275793eaSopenharmony_ciwith ZLib.Streams; 18275793eaSopenharmony_ciwith Ada.Streams.Stream_IO; 19275793eaSopenharmony_ciwith Ada.Numerics.Discrete_Random; 20275793eaSopenharmony_ci 21275793eaSopenharmony_ciwith Ada.Text_IO; 22275793eaSopenharmony_ci 23275793eaSopenharmony_ciwith Ada.Calendar; 24275793eaSopenharmony_ci 25275793eaSopenharmony_ciprocedure Test is 26275793eaSopenharmony_ci 27275793eaSopenharmony_ci use Ada.Streams; 28275793eaSopenharmony_ci use Stream_IO; 29275793eaSopenharmony_ci 30275793eaSopenharmony_ci ------------------------------------ 31275793eaSopenharmony_ci -- Test configuration parameters -- 32275793eaSopenharmony_ci ------------------------------------ 33275793eaSopenharmony_ci 34275793eaSopenharmony_ci File_Size : Count := 100_000; 35275793eaSopenharmony_ci Continuous : constant Boolean := False; 36275793eaSopenharmony_ci 37275793eaSopenharmony_ci Header : constant ZLib.Header_Type := ZLib.Default; 38275793eaSopenharmony_ci -- ZLib.None; 39275793eaSopenharmony_ci -- ZLib.Auto; 40275793eaSopenharmony_ci -- ZLib.GZip; 41275793eaSopenharmony_ci -- Do not use Header other then Default in ZLib versions 1.1.4 42275793eaSopenharmony_ci -- and older. 43275793eaSopenharmony_ci 44275793eaSopenharmony_ci Strategy : constant ZLib.Strategy_Type := ZLib.Default_Strategy; 45275793eaSopenharmony_ci Init_Random : constant := 10; 46275793eaSopenharmony_ci 47275793eaSopenharmony_ci -- End -- 48275793eaSopenharmony_ci 49275793eaSopenharmony_ci In_File_Name : constant String := "testzlib.in"; 50275793eaSopenharmony_ci -- Name of the input file 51275793eaSopenharmony_ci 52275793eaSopenharmony_ci Z_File_Name : constant String := "testzlib.zlb"; 53275793eaSopenharmony_ci -- Name of the compressed file. 54275793eaSopenharmony_ci 55275793eaSopenharmony_ci Out_File_Name : constant String := "testzlib.out"; 56275793eaSopenharmony_ci -- Name of the decompressed file. 57275793eaSopenharmony_ci 58275793eaSopenharmony_ci File_In : File_Type; 59275793eaSopenharmony_ci File_Out : File_Type; 60275793eaSopenharmony_ci File_Back : File_Type; 61275793eaSopenharmony_ci File_Z : ZLib.Streams.Stream_Type; 62275793eaSopenharmony_ci 63275793eaSopenharmony_ci Filter : ZLib.Filter_Type; 64275793eaSopenharmony_ci 65275793eaSopenharmony_ci Time_Stamp : Ada.Calendar.Time; 66275793eaSopenharmony_ci 67275793eaSopenharmony_ci procedure Generate_File; 68275793eaSopenharmony_ci -- Generate file of specified size with some random data. 69275793eaSopenharmony_ci -- The random data is repeatable, for the good compression. 70275793eaSopenharmony_ci 71275793eaSopenharmony_ci procedure Compare_Streams 72275793eaSopenharmony_ci (Left, Right : in out Root_Stream_Type'Class); 73275793eaSopenharmony_ci -- The procedure comparing data in 2 streams. 74275793eaSopenharmony_ci -- It is for compare data before and after compression/decompression. 75275793eaSopenharmony_ci 76275793eaSopenharmony_ci procedure Compare_Files (Left, Right : String); 77275793eaSopenharmony_ci -- Compare files. Based on the Compare_Streams. 78275793eaSopenharmony_ci 79275793eaSopenharmony_ci procedure Copy_Streams 80275793eaSopenharmony_ci (Source, Target : in out Root_Stream_Type'Class; 81275793eaSopenharmony_ci Buffer_Size : in Stream_Element_Offset := 1024); 82275793eaSopenharmony_ci -- Copying data from one stream to another. It is for test stream 83275793eaSopenharmony_ci -- interface of the library. 84275793eaSopenharmony_ci 85275793eaSopenharmony_ci procedure Data_In 86275793eaSopenharmony_ci (Item : out Stream_Element_Array; 87275793eaSopenharmony_ci Last : out Stream_Element_Offset); 88275793eaSopenharmony_ci -- this procedure is for generic instantiation of 89275793eaSopenharmony_ci -- ZLib.Generic_Translate. 90275793eaSopenharmony_ci -- reading data from the File_In. 91275793eaSopenharmony_ci 92275793eaSopenharmony_ci procedure Data_Out (Item : in Stream_Element_Array); 93275793eaSopenharmony_ci -- this procedure is for generic instantiation of 94275793eaSopenharmony_ci -- ZLib.Generic_Translate. 95275793eaSopenharmony_ci -- writing data to the File_Out. 96275793eaSopenharmony_ci 97275793eaSopenharmony_ci procedure Stamp; 98275793eaSopenharmony_ci -- Store the timestamp to the local variable. 99275793eaSopenharmony_ci 100275793eaSopenharmony_ci procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count); 101275793eaSopenharmony_ci -- Print the time statistic with the message. 102275793eaSopenharmony_ci 103275793eaSopenharmony_ci procedure Translate is new ZLib.Generic_Translate 104275793eaSopenharmony_ci (Data_In => Data_In, 105275793eaSopenharmony_ci Data_Out => Data_Out); 106275793eaSopenharmony_ci -- This procedure is moving data from File_In to File_Out 107275793eaSopenharmony_ci -- with compression or decompression, depend on initialization of 108275793eaSopenharmony_ci -- Filter parameter. 109275793eaSopenharmony_ci 110275793eaSopenharmony_ci ------------------- 111275793eaSopenharmony_ci -- Compare_Files -- 112275793eaSopenharmony_ci ------------------- 113275793eaSopenharmony_ci 114275793eaSopenharmony_ci procedure Compare_Files (Left, Right : String) is 115275793eaSopenharmony_ci Left_File, Right_File : File_Type; 116275793eaSopenharmony_ci begin 117275793eaSopenharmony_ci Open (Left_File, In_File, Left); 118275793eaSopenharmony_ci Open (Right_File, In_File, Right); 119275793eaSopenharmony_ci Compare_Streams (Stream (Left_File).all, Stream (Right_File).all); 120275793eaSopenharmony_ci Close (Left_File); 121275793eaSopenharmony_ci Close (Right_File); 122275793eaSopenharmony_ci end Compare_Files; 123275793eaSopenharmony_ci 124275793eaSopenharmony_ci --------------------- 125275793eaSopenharmony_ci -- Compare_Streams -- 126275793eaSopenharmony_ci --------------------- 127275793eaSopenharmony_ci 128275793eaSopenharmony_ci procedure Compare_Streams 129275793eaSopenharmony_ci (Left, Right : in out Ada.Streams.Root_Stream_Type'Class) 130275793eaSopenharmony_ci is 131275793eaSopenharmony_ci Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#); 132275793eaSopenharmony_ci Left_Last, Right_Last : Stream_Element_Offset; 133275793eaSopenharmony_ci begin 134275793eaSopenharmony_ci loop 135275793eaSopenharmony_ci Read (Left, Left_Buffer, Left_Last); 136275793eaSopenharmony_ci Read (Right, Right_Buffer, Right_Last); 137275793eaSopenharmony_ci 138275793eaSopenharmony_ci if Left_Last /= Right_Last then 139275793eaSopenharmony_ci Ada.Text_IO.Put_Line ("Compare error :" 140275793eaSopenharmony_ci & Stream_Element_Offset'Image (Left_Last) 141275793eaSopenharmony_ci & " /= " 142275793eaSopenharmony_ci & Stream_Element_Offset'Image (Right_Last)); 143275793eaSopenharmony_ci 144275793eaSopenharmony_ci raise Constraint_Error; 145275793eaSopenharmony_ci 146275793eaSopenharmony_ci elsif Left_Buffer (0 .. Left_Last) 147275793eaSopenharmony_ci /= Right_Buffer (0 .. Right_Last) 148275793eaSopenharmony_ci then 149275793eaSopenharmony_ci Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal."); 150275793eaSopenharmony_ci raise Constraint_Error; 151275793eaSopenharmony_ci 152275793eaSopenharmony_ci end if; 153275793eaSopenharmony_ci 154275793eaSopenharmony_ci exit when Left_Last < Left_Buffer'Last; 155275793eaSopenharmony_ci end loop; 156275793eaSopenharmony_ci end Compare_Streams; 157275793eaSopenharmony_ci 158275793eaSopenharmony_ci ------------------ 159275793eaSopenharmony_ci -- Copy_Streams -- 160275793eaSopenharmony_ci ------------------ 161275793eaSopenharmony_ci 162275793eaSopenharmony_ci procedure Copy_Streams 163275793eaSopenharmony_ci (Source, Target : in out Ada.Streams.Root_Stream_Type'Class; 164275793eaSopenharmony_ci Buffer_Size : in Stream_Element_Offset := 1024) 165275793eaSopenharmony_ci is 166275793eaSopenharmony_ci Buffer : Stream_Element_Array (1 .. Buffer_Size); 167275793eaSopenharmony_ci Last : Stream_Element_Offset; 168275793eaSopenharmony_ci begin 169275793eaSopenharmony_ci loop 170275793eaSopenharmony_ci Read (Source, Buffer, Last); 171275793eaSopenharmony_ci Write (Target, Buffer (1 .. Last)); 172275793eaSopenharmony_ci 173275793eaSopenharmony_ci exit when Last < Buffer'Last; 174275793eaSopenharmony_ci end loop; 175275793eaSopenharmony_ci end Copy_Streams; 176275793eaSopenharmony_ci 177275793eaSopenharmony_ci ------------- 178275793eaSopenharmony_ci -- Data_In -- 179275793eaSopenharmony_ci ------------- 180275793eaSopenharmony_ci 181275793eaSopenharmony_ci procedure Data_In 182275793eaSopenharmony_ci (Item : out Stream_Element_Array; 183275793eaSopenharmony_ci Last : out Stream_Element_Offset) is 184275793eaSopenharmony_ci begin 185275793eaSopenharmony_ci Read (File_In, Item, Last); 186275793eaSopenharmony_ci end Data_In; 187275793eaSopenharmony_ci 188275793eaSopenharmony_ci -------------- 189275793eaSopenharmony_ci -- Data_Out -- 190275793eaSopenharmony_ci -------------- 191275793eaSopenharmony_ci 192275793eaSopenharmony_ci procedure Data_Out (Item : in Stream_Element_Array) is 193275793eaSopenharmony_ci begin 194275793eaSopenharmony_ci Write (File_Out, Item); 195275793eaSopenharmony_ci end Data_Out; 196275793eaSopenharmony_ci 197275793eaSopenharmony_ci ------------------- 198275793eaSopenharmony_ci -- Generate_File -- 199275793eaSopenharmony_ci ------------------- 200275793eaSopenharmony_ci 201275793eaSopenharmony_ci procedure Generate_File is 202275793eaSopenharmony_ci subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; 203275793eaSopenharmony_ci 204275793eaSopenharmony_ci package Random_Elements is 205275793eaSopenharmony_ci new Ada.Numerics.Discrete_Random (Visible_Symbols); 206275793eaSopenharmony_ci 207275793eaSopenharmony_ci Gen : Random_Elements.Generator; 208275793eaSopenharmony_ci Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10; 209275793eaSopenharmony_ci 210275793eaSopenharmony_ci Buffer_Count : constant Count := File_Size / Buffer'Length; 211275793eaSopenharmony_ci -- Number of same buffers in the packet. 212275793eaSopenharmony_ci 213275793eaSopenharmony_ci Density : constant Count := 30; -- from 0 to Buffer'Length - 2; 214275793eaSopenharmony_ci 215275793eaSopenharmony_ci procedure Fill_Buffer (J, D : in Count); 216275793eaSopenharmony_ci -- Change the part of the buffer. 217275793eaSopenharmony_ci 218275793eaSopenharmony_ci ----------------- 219275793eaSopenharmony_ci -- Fill_Buffer -- 220275793eaSopenharmony_ci ----------------- 221275793eaSopenharmony_ci 222275793eaSopenharmony_ci procedure Fill_Buffer (J, D : in Count) is 223275793eaSopenharmony_ci begin 224275793eaSopenharmony_ci for K in 0 .. D loop 225275793eaSopenharmony_ci Buffer 226275793eaSopenharmony_ci (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1)) 227275793eaSopenharmony_ci := Random_Elements.Random (Gen); 228275793eaSopenharmony_ci 229275793eaSopenharmony_ci end loop; 230275793eaSopenharmony_ci end Fill_Buffer; 231275793eaSopenharmony_ci 232275793eaSopenharmony_ci begin 233275793eaSopenharmony_ci Random_Elements.Reset (Gen, Init_Random); 234275793eaSopenharmony_ci 235275793eaSopenharmony_ci Create (File_In, Out_File, In_File_Name); 236275793eaSopenharmony_ci 237275793eaSopenharmony_ci Fill_Buffer (1, Buffer'Length - 2); 238275793eaSopenharmony_ci 239275793eaSopenharmony_ci for J in 1 .. Buffer_Count loop 240275793eaSopenharmony_ci Write (File_In, Buffer); 241275793eaSopenharmony_ci 242275793eaSopenharmony_ci Fill_Buffer (J, Density); 243275793eaSopenharmony_ci end loop; 244275793eaSopenharmony_ci 245275793eaSopenharmony_ci -- fill remain size. 246275793eaSopenharmony_ci 247275793eaSopenharmony_ci Write 248275793eaSopenharmony_ci (File_In, 249275793eaSopenharmony_ci Buffer 250275793eaSopenharmony_ci (1 .. Stream_Element_Offset 251275793eaSopenharmony_ci (File_Size - Buffer'Length * Buffer_Count))); 252275793eaSopenharmony_ci 253275793eaSopenharmony_ci Flush (File_In); 254275793eaSopenharmony_ci Close (File_In); 255275793eaSopenharmony_ci end Generate_File; 256275793eaSopenharmony_ci 257275793eaSopenharmony_ci --------------------- 258275793eaSopenharmony_ci -- Print_Statistic -- 259275793eaSopenharmony_ci --------------------- 260275793eaSopenharmony_ci 261275793eaSopenharmony_ci procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is 262275793eaSopenharmony_ci use Ada.Calendar; 263275793eaSopenharmony_ci use Ada.Text_IO; 264275793eaSopenharmony_ci 265275793eaSopenharmony_ci package Count_IO is new Integer_IO (ZLib.Count); 266275793eaSopenharmony_ci 267275793eaSopenharmony_ci Curr_Dur : Duration := Clock - Time_Stamp; 268275793eaSopenharmony_ci begin 269275793eaSopenharmony_ci Put (Msg); 270275793eaSopenharmony_ci 271275793eaSopenharmony_ci Set_Col (20); 272275793eaSopenharmony_ci Ada.Text_IO.Put ("size ="); 273275793eaSopenharmony_ci 274275793eaSopenharmony_ci Count_IO.Put 275275793eaSopenharmony_ci (Data_Size, 276275793eaSopenharmony_ci Width => Stream_IO.Count'Image (File_Size)'Length); 277275793eaSopenharmony_ci 278275793eaSopenharmony_ci Put_Line (" duration =" & Duration'Image (Curr_Dur)); 279275793eaSopenharmony_ci end Print_Statistic; 280275793eaSopenharmony_ci 281275793eaSopenharmony_ci ----------- 282275793eaSopenharmony_ci -- Stamp -- 283275793eaSopenharmony_ci ----------- 284275793eaSopenharmony_ci 285275793eaSopenharmony_ci procedure Stamp is 286275793eaSopenharmony_ci begin 287275793eaSopenharmony_ci Time_Stamp := Ada.Calendar.Clock; 288275793eaSopenharmony_ci end Stamp; 289275793eaSopenharmony_ci 290275793eaSopenharmony_cibegin 291275793eaSopenharmony_ci Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); 292275793eaSopenharmony_ci 293275793eaSopenharmony_ci loop 294275793eaSopenharmony_ci Generate_File; 295275793eaSopenharmony_ci 296275793eaSopenharmony_ci for Level in ZLib.Compression_Level'Range loop 297275793eaSopenharmony_ci 298275793eaSopenharmony_ci Ada.Text_IO.Put_Line ("Level =" 299275793eaSopenharmony_ci & ZLib.Compression_Level'Image (Level)); 300275793eaSopenharmony_ci 301275793eaSopenharmony_ci -- Test generic interface. 302275793eaSopenharmony_ci Open (File_In, In_File, In_File_Name); 303275793eaSopenharmony_ci Create (File_Out, Out_File, Z_File_Name); 304275793eaSopenharmony_ci 305275793eaSopenharmony_ci Stamp; 306275793eaSopenharmony_ci 307275793eaSopenharmony_ci -- Deflate using generic instantiation. 308275793eaSopenharmony_ci 309275793eaSopenharmony_ci ZLib.Deflate_Init 310275793eaSopenharmony_ci (Filter => Filter, 311275793eaSopenharmony_ci Level => Level, 312275793eaSopenharmony_ci Strategy => Strategy, 313275793eaSopenharmony_ci Header => Header); 314275793eaSopenharmony_ci 315275793eaSopenharmony_ci Translate (Filter); 316275793eaSopenharmony_ci Print_Statistic ("Generic compress", ZLib.Total_Out (Filter)); 317275793eaSopenharmony_ci ZLib.Close (Filter); 318275793eaSopenharmony_ci 319275793eaSopenharmony_ci Close (File_In); 320275793eaSopenharmony_ci Close (File_Out); 321275793eaSopenharmony_ci 322275793eaSopenharmony_ci Open (File_In, In_File, Z_File_Name); 323275793eaSopenharmony_ci Create (File_Out, Out_File, Out_File_Name); 324275793eaSopenharmony_ci 325275793eaSopenharmony_ci Stamp; 326275793eaSopenharmony_ci 327275793eaSopenharmony_ci -- Inflate using generic instantiation. 328275793eaSopenharmony_ci 329275793eaSopenharmony_ci ZLib.Inflate_Init (Filter, Header => Header); 330275793eaSopenharmony_ci 331275793eaSopenharmony_ci Translate (Filter); 332275793eaSopenharmony_ci Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter)); 333275793eaSopenharmony_ci 334275793eaSopenharmony_ci ZLib.Close (Filter); 335275793eaSopenharmony_ci 336275793eaSopenharmony_ci Close (File_In); 337275793eaSopenharmony_ci Close (File_Out); 338275793eaSopenharmony_ci 339275793eaSopenharmony_ci Compare_Files (In_File_Name, Out_File_Name); 340275793eaSopenharmony_ci 341275793eaSopenharmony_ci -- Test stream interface. 342275793eaSopenharmony_ci 343275793eaSopenharmony_ci -- Compress to the back stream. 344275793eaSopenharmony_ci 345275793eaSopenharmony_ci Open (File_In, In_File, In_File_Name); 346275793eaSopenharmony_ci Create (File_Back, Out_File, Z_File_Name); 347275793eaSopenharmony_ci 348275793eaSopenharmony_ci Stamp; 349275793eaSopenharmony_ci 350275793eaSopenharmony_ci ZLib.Streams.Create 351275793eaSopenharmony_ci (Stream => File_Z, 352275793eaSopenharmony_ci Mode => ZLib.Streams.Out_Stream, 353275793eaSopenharmony_ci Back => ZLib.Streams.Stream_Access 354275793eaSopenharmony_ci (Stream (File_Back)), 355275793eaSopenharmony_ci Back_Compressed => True, 356275793eaSopenharmony_ci Level => Level, 357275793eaSopenharmony_ci Strategy => Strategy, 358275793eaSopenharmony_ci Header => Header); 359275793eaSopenharmony_ci 360275793eaSopenharmony_ci Copy_Streams 361275793eaSopenharmony_ci (Source => Stream (File_In).all, 362275793eaSopenharmony_ci Target => File_Z); 363275793eaSopenharmony_ci 364275793eaSopenharmony_ci -- Flushing internal buffers to the back stream. 365275793eaSopenharmony_ci 366275793eaSopenharmony_ci ZLib.Streams.Flush (File_Z, ZLib.Finish); 367275793eaSopenharmony_ci 368275793eaSopenharmony_ci Print_Statistic ("Write compress", 369275793eaSopenharmony_ci ZLib.Streams.Write_Total_Out (File_Z)); 370275793eaSopenharmony_ci 371275793eaSopenharmony_ci ZLib.Streams.Close (File_Z); 372275793eaSopenharmony_ci 373275793eaSopenharmony_ci Close (File_In); 374275793eaSopenharmony_ci Close (File_Back); 375275793eaSopenharmony_ci 376275793eaSopenharmony_ci -- Compare reading from original file and from 377275793eaSopenharmony_ci -- decompression stream. 378275793eaSopenharmony_ci 379275793eaSopenharmony_ci Open (File_In, In_File, In_File_Name); 380275793eaSopenharmony_ci Open (File_Back, In_File, Z_File_Name); 381275793eaSopenharmony_ci 382275793eaSopenharmony_ci ZLib.Streams.Create 383275793eaSopenharmony_ci (Stream => File_Z, 384275793eaSopenharmony_ci Mode => ZLib.Streams.In_Stream, 385275793eaSopenharmony_ci Back => ZLib.Streams.Stream_Access 386275793eaSopenharmony_ci (Stream (File_Back)), 387275793eaSopenharmony_ci Back_Compressed => True, 388275793eaSopenharmony_ci Header => Header); 389275793eaSopenharmony_ci 390275793eaSopenharmony_ci Stamp; 391275793eaSopenharmony_ci Compare_Streams (Stream (File_In).all, File_Z); 392275793eaSopenharmony_ci 393275793eaSopenharmony_ci Print_Statistic ("Read decompress", 394275793eaSopenharmony_ci ZLib.Streams.Read_Total_Out (File_Z)); 395275793eaSopenharmony_ci 396275793eaSopenharmony_ci ZLib.Streams.Close (File_Z); 397275793eaSopenharmony_ci Close (File_In); 398275793eaSopenharmony_ci Close (File_Back); 399275793eaSopenharmony_ci 400275793eaSopenharmony_ci -- Compress by reading from compression stream. 401275793eaSopenharmony_ci 402275793eaSopenharmony_ci Open (File_Back, In_File, In_File_Name); 403275793eaSopenharmony_ci Create (File_Out, Out_File, Z_File_Name); 404275793eaSopenharmony_ci 405275793eaSopenharmony_ci ZLib.Streams.Create 406275793eaSopenharmony_ci (Stream => File_Z, 407275793eaSopenharmony_ci Mode => ZLib.Streams.In_Stream, 408275793eaSopenharmony_ci Back => ZLib.Streams.Stream_Access 409275793eaSopenharmony_ci (Stream (File_Back)), 410275793eaSopenharmony_ci Back_Compressed => False, 411275793eaSopenharmony_ci Level => Level, 412275793eaSopenharmony_ci Strategy => Strategy, 413275793eaSopenharmony_ci Header => Header); 414275793eaSopenharmony_ci 415275793eaSopenharmony_ci Stamp; 416275793eaSopenharmony_ci Copy_Streams 417275793eaSopenharmony_ci (Source => File_Z, 418275793eaSopenharmony_ci Target => Stream (File_Out).all); 419275793eaSopenharmony_ci 420275793eaSopenharmony_ci Print_Statistic ("Read compress", 421275793eaSopenharmony_ci ZLib.Streams.Read_Total_Out (File_Z)); 422275793eaSopenharmony_ci 423275793eaSopenharmony_ci ZLib.Streams.Close (File_Z); 424275793eaSopenharmony_ci 425275793eaSopenharmony_ci Close (File_Out); 426275793eaSopenharmony_ci Close (File_Back); 427275793eaSopenharmony_ci 428275793eaSopenharmony_ci -- Decompress to decompression stream. 429275793eaSopenharmony_ci 430275793eaSopenharmony_ci Open (File_In, In_File, Z_File_Name); 431275793eaSopenharmony_ci Create (File_Back, Out_File, Out_File_Name); 432275793eaSopenharmony_ci 433275793eaSopenharmony_ci ZLib.Streams.Create 434275793eaSopenharmony_ci (Stream => File_Z, 435275793eaSopenharmony_ci Mode => ZLib.Streams.Out_Stream, 436275793eaSopenharmony_ci Back => ZLib.Streams.Stream_Access 437275793eaSopenharmony_ci (Stream (File_Back)), 438275793eaSopenharmony_ci Back_Compressed => False, 439275793eaSopenharmony_ci Header => Header); 440275793eaSopenharmony_ci 441275793eaSopenharmony_ci Stamp; 442275793eaSopenharmony_ci 443275793eaSopenharmony_ci Copy_Streams 444275793eaSopenharmony_ci (Source => Stream (File_In).all, 445275793eaSopenharmony_ci Target => File_Z); 446275793eaSopenharmony_ci 447275793eaSopenharmony_ci Print_Statistic ("Write decompress", 448275793eaSopenharmony_ci ZLib.Streams.Write_Total_Out (File_Z)); 449275793eaSopenharmony_ci 450275793eaSopenharmony_ci ZLib.Streams.Close (File_Z); 451275793eaSopenharmony_ci Close (File_In); 452275793eaSopenharmony_ci Close (File_Back); 453275793eaSopenharmony_ci 454275793eaSopenharmony_ci Compare_Files (In_File_Name, Out_File_Name); 455275793eaSopenharmony_ci end loop; 456275793eaSopenharmony_ci 457275793eaSopenharmony_ci Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok."); 458275793eaSopenharmony_ci 459275793eaSopenharmony_ci exit when not Continuous; 460275793eaSopenharmony_ci 461275793eaSopenharmony_ci File_Size := File_Size + 1; 462275793eaSopenharmony_ci end loop; 463275793eaSopenharmony_ciend Test; 464