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