1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156 | with Ada.Characters.Handling,
Ada.Numerics.Float_Random,
Ada.Streams.Stream_IO;
with Bar_Codes, Bar_Codes_Media;
procedure Bar_Codes_Test is
procedure Spit (kind : Bar_Codes.Kind_Of_Code; file_name_part, text : String) is
use Bar_Codes, Bar_Codes_Media;
use Ada.Characters.Handling, Ada.Streams.Stream_IO;
png : File_Type;
prefix : constant String := "test " & To_Lower (kind'Image) & ' ';
begin
if file_name_part = "" then
Create (png, Out_File, prefix & text & ".png");
else
Create (png, Out_File, prefix & file_name_part & ".png");
end if;
if Code_2D_Square (kind) then
-- Square 2D codes need square modules.
PNG_Bar_Code (kind, 2, 2, text, Stream (png).all);
else
case kind is
when Code_1D =>
-- 1D modules are as high as you wish.
PNG_Bar_Code (kind, 2, 30, text, Stream (png).all);
when Code_DM_Rectangular =>
PNG_Bar_Code (kind, 2, 2, text, Stream (png).all);
when others =>
pragma Assert (Code_2D_Square (kind));
end case;
end if;
Close (png);
end Spit;
procedure Test_128 is
use Bar_Codes;
use Ada.Numerics.Float_Random;
chunks : constant := 2;
c : Character := ASCII.DEL;
msg : String (1 .. 128 / chunks);
rnd : String (1 .. 50);
gen : Generator;
n : Positive;
begin
for chunk in 1 .. chunks loop
for i in msg'Range loop
msg (i) := c;
if c > ASCII.NUL then
c := Character'Pred (c);
end if;
end loop;
Spit (Code_128, chunk'Image, msg);
end loop;
Spit (Code_128, "vn1", "0520");
Spit (Code_128, "vn2", "993512176004535560");
Spit (Code_128, "", "12345abc1234abc1234567a123bcdef12345");
Reset (gen, 1);
for iter in 1 .. 9 loop
for i in rnd'Range loop
rnd (i) := Character'Val (32 + Integer (Random (gen) * 95.0));
end loop;
-- Put a few non-printable characters...
for i in rnd'Range loop
if Random (gen) < 0.1 then
rnd (i) := ASCII.ESC;
end if;
end loop;
-- Put a few sequences of digits...
for i in rnd'Range loop
if Random (gen) < 0.08 then
n := 1 + Integer (Random (gen) * 6.0);
for j in i .. Integer'Min (rnd'Last, i + n) loop
rnd (j) := Character'Val (Character'Pos ('0') + Integer (Random (gen) * 9.0));
end loop;
end if;
end loop;
Spit (Code_128, "rnd" & iter'Image, rnd);
-- Digits only (must be all with subcode C):
for i in rnd'Range loop
rnd (i) := Character'Val (Character'Pos ('0') + Integer (Random (gen) * 9.0));
end loop;
Spit (Code_128, "rnd digits" & iter'Image, rnd);
end loop;
end Test_128;
procedure Test_MSI is
begin
Spit (Bar_Codes.Code_MSI, "", "1234567890");
Spit (Bar_Codes.Code_MSI, "", "1234576890");
Spit (Bar_Codes.Code_MSI, "", "12345678901");
Spit (Bar_Codes.Code_MSI, "", "998877665544332211");
Spit (Bar_Codes.Code_MSI, "", "97531");
Spit (Bar_Codes.Code_MSI, "", "24680");
end Test_MSI;
procedure Test_EAN13 is
begin
for initial_digit in Character range '0' .. '9' loop
Spit (Bar_Codes.Code_EAN13, (1 => initial_digit), initial_digit & "12345678901");
end loop;
end Test_EAN13;
procedure Test_UPCA is
begin
Spit (Bar_Codes.Code_UPCA, "", "12345678901");
end Test_UPCA;
procedure Test_2D is
blabla : constant String :=
"The Corporate Bullshit Generator " &
" *** " &
"Short URL (for bookmark and sharing): http://cbsg.sf.net " &
" *** " &
"A pre-integrated, non-deterministic and high-performance intellect " &
"deepens mobility spaces. " &
"Offshorings expediently generate our world-class and fast-paced brand image. " &
"A segmentation influences the decision makers, while multi-divisional, " &
"service-oriented, pipelines quickly streamline evolutions. " &
"Above-average next steps incentivise the initiator; nevertheless " &
"the enablers orchestrate the adjustments. A continual increase in " &
"margins goes hand-in-hand with a measured gain in task efficiency." &
" *** " &
"The project Ada Bar Codes provides a package for generating " &
"various types of bar codes on different output formats," &
"such as PDF, SVG or bitmaps." &
" *** " &
"Zip-Ada is a programming library for dealing with the Zip compressed " &
"archive file format. The full sources of Zip-Ada are in Ada, " &
"compilable on every compiler and for every system. For more details, " &
"read the files zipada.txt and zip.ads from the archive below." &
" *** " &
"GLOBE_3D stands for GL Object Based Engine for 3D." &
"GL stands for Graphics Library, created by SGI. " &
"SGI stands for Silicon Graphics, Inc. " &
"Short description: GLOBE_3D is a free, open-source," &
"real-time 3D Engine written in Ada, based on OpenGL.";
begin
for c in Bar_Codes.Code_2D loop
Spit (c, "blabla 0001", blabla (1 .. 0001));
Spit (c, "blabla 0010", blabla (1 .. 0010));
Spit (c, "blabla 0035", blabla (1 .. 0035));
Spit (c, "blabla 0100", blabla (1 .. 0100));
Spit (c, "blabla 0250", blabla (1 .. 0250));
Spit (c, "blabla 0500", blabla (1 .. 0500));
Spit (c, "blabla full", blabla);
end loop;
end Test_2D;
begin
Test_128;
Test_MSI;
Test_EAN13;
Test_UPCA;
Test_2D;
end Bar_Codes_Test;
|