------------------------------------------------------------------------------ -- File: Zip_with_many_files.adb -- Description: Demo/test: -- - stuff a large number of files into a .zip file -- - test the (2 ** 16 - 2) limit of the Zip_32 archive -- format and the automatic promotion to Zip_64. -- Author: Gautier de Montmollin ------------------------------------------------------------------------------ with Zip.Create; use Zip.Create; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; with Ada.Strings.Fixed; use Ada.Strings.Fixed; with Ada.Text_IO; procedure Zip_with_many_files is procedure Create_with_many (n : Positive) is stream : aliased Zip_File_Stream; archive : Zip_Create_Info; procedure Add_one_entry (file_name : String; rep : Natural) is begin Zip.Create.Add_String ( Info => archive, Contents => "..." & rep * ("Hello! My name is: """ & file_name & '"' & ASCII.LF), Name_in_archive => file_name, Creation_time => use_clock ); end Add_one_entry; function Leading_zeros (i, zeros : Integer) return String is pad : constant Integer := 10 ** zeros; str : String (1 .. zeros + 2); begin Put (str, i + pad); return str (3 .. str'Last); end Leading_zeros; n_img : constant String := Integer'Image (n); procedure Create_with_Trace (file_name : String) is begin Ada.Text_IO.Put_Line (file_name); Create_Archive (archive, stream'Unchecked_Access, file_name); end Create_with_Trace; begin Create_with_Trace ("many_" & n_img (n_img'First + 1 .. n_img'Last) & ".zip"); for i in 1 .. n loop Add_one_entry ( "Entry #" & Leading_zeros (i, 5) & ".txt", Integer'Max (0, i / 100 - 10) ); end loop; Finish (archive); end Create_with_many; begin Create_with_many (2 ** 12); Create_with_many (2 ** 13); Create_with_many (2 ** 14); Create_with_many (2 ** 15); Create_with_many (2 ** 16 - 2); Create_with_many (2 ** 16 - 1); -- Should promote archive to Zip_64 mode. end Zip_with_many_files;