source: trunk/Packages/lazbarcodes/src/zint.pp

Last change on this file was 123, checked in by chronos, 3 years ago
  • Added: QR code image visible in contact others tab. It can be saved as image to file.
File size: 9.4 KB
Line 
1
2unit zint;
3interface
4
5{
6 Automatically converted by H2Pas 1.0.0 from zint.h
7 The following command line parameters were used:
8 zint.h
9}
10
11{$IFDEF FPC}
12 {$MODE objfpc}{$H+}
13 {$MODESWITCH AdvancedRecords}
14//{$PACKRECORDS C}
15{$ENDIF}
16
17 { zint.h - definitions for libzint
18
19 libzint - the open source barcode library
20 Copyright (C) 2009-2017 Robin Stuart <rstuart114@gmail.com>
21
22 Redistribution and use in source and binary forms, with or without
23 modification, are permitted provided that the following conditions
24 are met:
25
26 1. Redistributions of source code must retain the above copyright
27 notice, this list of conditions and the following disclaimer.
28 2. Redistributions in binary form must reproduce the above copyright
29 notice, this list of conditions and the following disclaimer in the
30 documentation and/or other materials provided with the distribution.
31 3. Neither the name of the project nor the names of its contributors
32 may be used to endorse or promote products derived from this software
33 without specific prior written permission.
34
35 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
36 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
38 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
39 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
40 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
41 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
42 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
43 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
44 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
45 SUCH DAMAGE.
46 }
47
48type
49 { Pointer to line }
50 PointerTo_zint_render_line=^zint_render_line;
51 PointerTo_PointerTo_zint_render_line=^PointerTo_zint_render_line;
52 zint_render_line = record
53 x : single;
54 y : single;
55 length : single;
56 width : single;
57 next : PointerTo_zint_render_line; // Pointer to next line;
58 end;
59 PZintRenderLine = ^zint_render_line;
60 PPZintRenderLine = ^PZintRenderLine;
61
62 { Suggested string width, may be 0 if none recommended }
63 { Pointer to character }
64 PointerTo_zint_render_string=^zint_render_string;
65 PointerTo_PointerTo_zint_render_string=^PointerTo_zint_render_string;
66 zint_render_string = record
67 x : single;
68 y : single;
69 fsize : single;
70 width : single; // Suggested string width, may be 0 if none recommended
71 length : longint;
72 text : ^byte;
73 next : PointerTo_zint_render_string; // Pointer to next character
74 end;
75 PZintRenderString = ^zint_render_string;
76 PPZintRenderString = ^PZintRenderString;
77
78 { Pointer to ring }
79 PointerTo_zint_render_ring=^zint_render_ring;
80 PointerTo_PointerTo_zint_render_ring=^PointerTo_zint_render_ring;
81 zint_render_ring = record
82 x : single;
83 y : single;
84 radius : single;
85 line_width : single;
86 next : PointerTo_zint_render_ring; // Pointer to next ring
87 end;
88
89 { Pointer to hexagon }
90 PointerTo_zint_render_hexagon=^zint_render_hexagon;
91 PointerTo_PointerTo_zint_render_hexagon=^PointerTo_zint_render_hexagon;
92 zint_render_hexagon = record
93 x : single;
94 y : single;
95 next : PointerTo_zint_render_hexagon; // ^Pointer to next hexagon;
96 end;
97
98 PointerTo_zint_render=^zint_render;
99 zint_render = record
100 width : single;
101 height : single;
102 lines : ^zint_render_line; // Pointer to first line
103 strings : ^zint_render_string; // Pointer to first string
104 rings : ^zint_render_ring; // Pointer to first ring
105 hexagons : ^zint_render_hexagon; // Pointer to first hexagon
106 // added by wp
107 exact_width: single; // exact width of symbol after rendering. symbol^.width may be wrong...
108 exact_height: single; // height of symbol after rendering.
109 scale: single; // scale factor used for rendering
110 end;
111 PZintRender = ^zint_render;
112
113const
114 ZINT_ROWS_MAX = 178;
115 ZINT_COLS_MAX = 178;
116 GL_CONST = 2.8346; // = 72 / 25.4 --> conversion pixels to mm
117
118type
119 TColorChars = array[0..9] of char;
120
121 PointerTo_zint_symbol = ^zint_symbol;
122 zint_symbol = record
123 symbology : longint;
124 height : longint;
125 whitespace_width : longint;
126 border_width : longint;
127 output_options : longint;
128 fgcolour : TColorChars;
129 bgcolour : TColorChars;
130 outfile : array[0..255] of char;
131 scale : single;
132 option_1 : longint;
133 option_2 : longint;
134 option_3 : longint;
135 option : longint; // added by wp
136 show_hrt : longint;
137 input_mode : longint;
138 text : array[0..127] of byte;
139 rows : longint;
140 width : longint;
141 primary : array[0..127] of char;
142 encoded_data : array[0..ZINT_ROWS_MAX-1] of bitpacked array[0..ZINT_COLS_MAX-1] of boolean; // wp: changed to bitpacked
143 row_height : array[0..ZINT_ROWS_MAX-1] of longint; // Largest symbol is 177x177 QR Code
144 errtxt : array[0..99] of char;
145 bitmap : ^char;
146 bitmap_width : longint;
147 bitmap_height : longint;
148 rendered : ^zint_render;
149 // added by wp
150 font_height: integer;
151 function GetText: String;
152 procedure SetText(const AText: String);
153 function GetErrorText: String;
154 procedure SetErrorText(const AErrTxt: String);
155 end;
156 PZintSymbol = ^zint_symbol;
157
158 TCharDynArray = array of char;
159
160const
161 { Tbarcode 7 codes }
162 BARCODE_CODE11 = 1;
163 BARCODE_C25MATRIX = 2;
164 BARCODE_C25INTER = 3;
165 BARCODE_C25IATA = 4;
166 BARCODE_C25LOGIC = 6;
167 BARCODE_C25IND = 7;
168 BARCODE_CODE39 = 8;
169 BARCODE_EXCODE39 = 9;
170 BARCODE_EANX = 13;
171 BARCODE_EAN128 = 16;
172 BARCODE_CODABAR = 18;
173 BARCODE_CODE128 = 20;
174 BARCODE_DPLEIT = 21;
175 BARCODE_DPIDENT = 22;
176 BARCODE_CODE16K = 23;
177 BARCODE_CODE49 = 24;
178 BARCODE_CODE93 = 25;
179 BARCODE_FLAT = 28;
180 BARCODE_RSS14 = 29;
181 BARCODE_RSS_LTD = 30;
182 BARCODE_RSS_EXP = 31;
183 BARCODE_TELEPEN = 32;
184 BARCODE_UPCA = 34;
185 BARCODE_UPCE = 37;
186 BARCODE_POSTNET = 40;
187 BARCODE_MSI_PLESSEY = 47;
188 BARCODE_FIM = 49;
189 BARCODE_LOGMARS = 50;
190 BARCODE_PHARMA = 51;
191 BARCODE_PZN = 52;
192 BARCODE_PHARMA_TWO = 53;
193 BARCODE_PDF417 = 55;
194 BARCODE_PDF417TRUNC = 56;
195 BARCODE_MAXICODE = 57;
196 BARCODE_QRCODE = 58;
197 BARCODE_CODE128B = 60;
198 BARCODE_AUSPOST = 63;
199 BARCODE_AUSREPLY = 66;
200 BARCODE_AUSROUTE = 67;
201 BARCODE_AUSREDIRECT = 68;
202 BARCODE_ISBNX = 69;
203 BARCODE_RM4SCC = 70;
204 BARCODE_DATAMATRIX = 71;
205 BARCODE_EAN14 = 72;
206 BARCODE_CODABLOCKF = 74;
207 BARCODE_NVE18 = 75;
208 BARCODE_JAPANPOST = 76;
209 BARCODE_KOREAPOST = 77;
210 BARCODE_RSS14STACK = 79;
211 BARCODE_RSS14STACK_OMNI = 80;
212 BARCODE_RSS_EXPSTACK = 81;
213 BARCODE_PLANET = 82;
214 BARCODE_MICROPDF417 = 84;
215 BARCODE_ONECODE = 85;
216 BARCODE_PLESSEY = 86;
217
218 // Tbarcode 8 codes
219 BARCODE_TELEPEN_NUM = 87;
220 BARCODE_ITF14 = 89;
221 BARCODE_KIX = 90;
222 BARCODE_AZTEC = 92;
223 BARCODE_DAFT = 93;
224 BARCODE_MICROQR = 97;
225
226 // Tbarcode 9 codes
227 BARCODE_HIBC_128 = 98;
228 BARCODE_HIBC_39 = 99;
229 BARCODE_HIBC_DM = 102;
230 BARCODE_HIBC_QR = 104;
231 BARCODE_HIBC_PDF = 106;
232 BARCODE_HIBC_MICPDF = 108;
233 BARCODE_HIBC_BLOCKF = 110;
234 BARCODE_HIBC_AZTEC = 112;
235
236 // Zint specific
237 BARCODE_AZRUNE = 128;
238 BARCODE_CODE32 = 129;
239 BARCODE_EANX_CC = 130;
240 BARCODE_EAN128_CC = 131;
241 BARCODE_RSS14_CC = 132;
242 BARCODE_RSS_LTD_CC = 133;
243 BARCODE_RSS_EXP_CC = 134;
244 BARCODE_UPCA_CC = 135;
245 BARCODE_UPCE_CC = 136;
246 BARCODE_RSS14STACK_CC = 137;
247 BARCODE_RSS14_OMNI_CC = 138;
248 BARCODE_RSS_EXPSTACK_CC = 139;
249 BARCODE_CHANNEL = 140;
250 BARCODE_CODEONE = 141;
251 BARCODE_GRIDMATRIX = 142;
252
253 BARCODE_NO_ASCII = 1;
254 BARCODE_BIND = 2;
255 BARCODE_BOX = 4;
256 BARCODE_STDOUT = 8;
257 READER_INIT = 16;
258 SMALL_TEXT = 32;
259
260 DATA_MODE = 0;
261 UNICODE_MODE = 1;
262 GS1_MODE = 2;
263 KANJI_MODE = 3;
264 SJIS_MODE = 4;
265
266 DM_SQUARE = 100;
267
268 WARN_INVALID_OPTION = 2;
269 ERROR_TOO_LONG = 5;
270 ERROR_INVALID_DATA = 6;
271 ERROR_INVALID_CHECK = 7;
272 ERROR_INVALID_OPTION = 8;
273 ERROR_ENCODING_PROBLEM = 9;
274 ERROR_FILE_ACCESS = 10;
275 ERROR_MEMORY = 11;
276
277implementation
278
279function zint_symbol.GetErrorText: String;
280var
281 i: Integer;
282begin
283 Result := '';
284 SetLength(Result, 100);
285 for i := 0 to 99 do
286 begin
287 if errtxt[i] = #0 then
288 begin
289 SetLength(Result, i);
290 exit;
291 end;
292 Result[i+1] := errtxt[i];
293 end;
294end;
295
296function zint_symbol.GetText: String;
297var
298 i: Integer;
299begin
300 Result := '';
301 SetLength(Result, 128);
302 for i := 0 to 127 do
303 begin
304 if text[i] = 0 then
305 begin
306 SetLength(Result, i);
307 exit;
308 end;
309 Result[i+1] := char(text[i]);
310 end;
311end;
312
313procedure zint_symbol.SetErrorText(const AErrTxt: String);
314var
315 i, n: Integer;
316begin
317 n := Length(AErrTxt);
318 if n > 100 then n := 100;
319 FillChar(errtxt, 100, 0);
320 for i := 1 to n do
321 errtxt[i-1] := AErrTxt[i];
322end;
323
324procedure zint_symbol.SetText(const AText: String);
325var
326 i, n: Integer;
327begin
328 n := Length(AText);
329 if n > 128 then n := 128;
330 FillChar(text, 128, 0);
331 for i := 1 to n do
332 text[i-1] := ord(AText[i]);
333end;
334
335end.
Note: See TracBrowser for help on using the repository browser.