1b33c96954667ba382fa595baf7b31290bfdd517vboxsync----------------------------------------------------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- ZLib for Ada thick binding. --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- Open source license information is in the zlib.ads file. --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync----------------------------------------------------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- Test/demo program for the generic read interface.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncprocedure Read is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ------------------------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Test configuration parameters --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ------------------------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync File_Size : Stream_Element_Offset := 100_000;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Continuous : constant Boolean := False;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- If this constant is True, the test would be repeated again and again,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- with increment File_Size for every iteration.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Header : constant ZLib.Header_Type := ZLib.Default;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Do not use Header other than Default in ZLib versions 1.1.4 and older.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Init_Random : constant := 8;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- We are using the same random sequence, in case of we catch bug,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- so we would be able to reproduce it.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Pack_Size : Stream_Element_Offset;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Offset : Stream_Element_Offset;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync subtype Visible_Symbols
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync is Stream_Element range 16#20# .. 16#7E#;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync package Random_Elements is new
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Ada.Numerics.Discrete_Random (Visible_Symbols);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Period : constant Stream_Element_Offset := 200;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Period constant variable for random generator not to be very random.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Bigger period, harder random.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read_Buffer : Stream_Element_Array (1 .. 2048);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read_First : Stream_Element_Offset;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read_Last : Stream_Element_Offset;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Reset;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Read
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Item : out Stream_Element_Array;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Last : out Stream_Element_Offset);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- this procedure is for generic instantiation of
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- reading data from the File_In.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Read is new ZLib.Read
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read_Buffer,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Rest_First => Read_First,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Rest_Last => Read_Last);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Read
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Item : out Stream_Element_Array;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Last : out Stream_Element_Offset) is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Last := Stream_Element_Offset'Min
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Item'Last,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Item'First + File_Size - Offset);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync for J in Item'First .. Last loop
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if J < Item'First + Period then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Item (J) := Random_Elements.Random (Gen);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Item (J) := Item (J - Period);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Offset := Offset + 1;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Reset --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Reset is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Random_Elements.Reset (Gen, Init_Random);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Pack_Size := 0;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Offset := 1;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read_First := Read_Buffer'Last + 1;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read_Last := Read_Buffer'Last;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync for Level in ZLib.Compression_Level'Range loop
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync & ZLib.Compression_Level'Image (Level));
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Deflate using generic instantiation.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Header => Header);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Stream_Element_Offset'Image (File_Size) & " ->");
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Buffer : Stream_Element_Array (1 .. 1024);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Last : Stream_Element_Offset;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read (Filter, Buffer, Last);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Pack_Size := Pack_Size + Last - Buffer'First + 1;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync exit when Last < Buffer'Last;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size));
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync exit when not Continuous;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync File_Size := File_Size + 1;