You've already forked lazarus-ccr
lazbarcodes: Further refactoring of lbc_maxicode.pas
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8232 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -99,8 +99,11 @@ const
|
|||||||
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36
|
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36
|
||||||
);
|
);
|
||||||
|
|
||||||
|
type
|
||||||
|
TMaxiCodeword = array[0..143] of Integer;
|
||||||
|
|
||||||
var
|
var
|
||||||
maxi_codeword: array[0..143] of Integer;
|
maxi_codeword: TMaxiCodeword;
|
||||||
|
|
||||||
{ Handles error correction of primary message }
|
{ Handles error correction of primary message }
|
||||||
procedure maxi_do_primary_check;
|
procedure maxi_do_primary_check;
|
||||||
@ -580,22 +583,15 @@ begin
|
|||||||
Result := 0;
|
Result := 0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Format structured primary for Mode 2 }
|
{ Format structured primary for Mode 2.
|
||||||
|
Returns FALSE if APostCode is not a numeric string. }
|
||||||
function maxi_do_primary_2(APostCode: String; ACountry, AService: Integer): Boolean;
|
function maxi_do_primary_2(APostCode: String; ACountry, AService: Integer): Boolean;
|
||||||
var
|
var
|
||||||
postcode_number: Integer;
|
postcode_number: Integer;
|
||||||
postcode_length: Integer;
|
postcode_length: Integer;
|
||||||
i: Integer;
|
|
||||||
begin
|
begin
|
||||||
for i := 1 to Length(APostCode) do
|
|
||||||
if not (APostCode[i] in ['0'..'9']) then
|
|
||||||
begin
|
|
||||||
Result := false;
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
|
|
||||||
postcode_length := Length(APostcode);
|
postcode_length := Length(APostcode);
|
||||||
if (APostCode = '') or not TryStrToInt(APostCode, postcode_number) then
|
if (postcode_length = 0) or not TryStrToInt(APostCode, postcode_number) then
|
||||||
begin
|
begin
|
||||||
Result := false;
|
Result := false;
|
||||||
exit;
|
exit;
|
||||||
@ -614,34 +610,6 @@ begin
|
|||||||
|
|
||||||
Result := true;
|
Result := true;
|
||||||
end;
|
end;
|
||||||
(*
|
|
||||||
procedure maxi_do_primary_2(APostCode: TCharDynArray; ACountry, AService: Integer);
|
|
||||||
var
|
|
||||||
postcode_length, postcode_num: Integer;
|
|
||||||
i: Integer;
|
|
||||||
begin
|
|
||||||
for i := 0 to 9 do
|
|
||||||
if (APostCode[i] < '0') or (APostcode[i] > '9') then
|
|
||||||
begin
|
|
||||||
APostCode[i] := #0;
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
|
|
||||||
postcode_length := System.StrLen(PChar(@APostCode[0]));
|
|
||||||
postcode_num := StrToInt(PChar(@APostCode[0]));
|
|
||||||
|
|
||||||
maxi_codeword[0] := ((postcode_num and $03) shl 4) or 2;
|
|
||||||
maxi_codeword[1] := ((postcode_num and $fc) shr 2);
|
|
||||||
maxi_codeword[2] := ((postcode_num and $3f00) shr 8);
|
|
||||||
maxi_codeword[3] := ((postcode_num and $fc000) shr 14);
|
|
||||||
maxi_codeword[4] := ((postcode_num and $3f00000) shr 20);
|
|
||||||
maxi_codeword[5] := ((postcode_num and $3c000000) shr 26) or ((postcode_length and $3) shl 4);
|
|
||||||
maxi_codeword[6] := ((postcode_length and $3c) shr 2) or ((ACountry and $3AC) shl 4);
|
|
||||||
maxi_codeword[7] := (ACountry and $fc) shr 2;
|
|
||||||
maxi_codeword[8] := ((ACountry and $300) shr 8) or ((AService and $f) shl 2);
|
|
||||||
maxi_codeword[9] := ((AService and $3f0) shr 4);
|
|
||||||
end; *)
|
|
||||||
|
|
||||||
|
|
||||||
{ Format structured primary for Mode 3 }
|
{ Format structured primary for Mode 3 }
|
||||||
procedure maxi_do_primary_3(APostCode: String; ACountry, AService: Integer);
|
procedure maxi_do_primary_3(APostCode: String; ACountry, AService: Integer);
|
||||||
@ -676,43 +644,6 @@ begin
|
|||||||
maxi_codeword[9] := ((AService and $3f0) shr 4);
|
maxi_codeword[9] := ((AService and $3f0) shr 4);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
(*
|
|
||||||
procedure maxi_do_primary_3(APostCode: TByteDynArray; ACountry, AService: Integer);
|
|
||||||
var
|
|
||||||
i, len: Integer;
|
|
||||||
P: PChar;
|
|
||||||
begin
|
|
||||||
len := System.StrLen(PChar(@APostCode[0]));
|
|
||||||
to_upper(APostCode);
|
|
||||||
P := PChar(@APostcode[0]);
|
|
||||||
for i := 0 to len-1 do
|
|
||||||
begin
|
|
||||||
// (Capital) letters shifted to Code Set A values
|
|
||||||
if (P^ >= 'A') and (P^ <= 'Z') then
|
|
||||||
byte(P^) := byte(P^) - 64;
|
|
||||||
|
|
||||||
// Not a valid PostCode character
|
|
||||||
if (P^ = #27) or (P^ = #31) or (P^ = #33) or (P^ >= #59) then
|
|
||||||
P^ := ' ';
|
|
||||||
|
|
||||||
// Input characters lower than 27 (NUL - SUB) in Postcode are
|
|
||||||
// interpreted a capital letters in Code Set A (e.g. LF becomes 'J')
|
|
||||||
|
|
||||||
inc(P);
|
|
||||||
end;
|
|
||||||
|
|
||||||
maxi_codeword[0] := ((Ord(APostCode[5]) and $03) shl 4) or 3;
|
|
||||||
maxi_codeword[1] := ((Ord(APostCode[4]) and $03) shl 4) or ((Ord(APostCode[5]) and $3c) shr 2);
|
|
||||||
maxi_codeword[2] := ((Ord(APostCode[3]) and $03) shl 4) or ((Ord(APostCode[4]) and $3c) shr 2);
|
|
||||||
maxi_codeword[3] := ((Ord(APostCode[2]) and $03) shl 4) or ((Ord(APostCode[3]) and $3c) shr 2);
|
|
||||||
maxi_codeword[4] := ((Ord(APostCode[1]) and $03) shl 4) or ((Ord(APostCode[2]) and $3c) shr 2);
|
|
||||||
maxi_codeword[5] := ((Ord(APostCode[0]) and $03) shl 4) or ((Ord(APostCode[1]) and $3c) shr 2);
|
|
||||||
maxi_codeword[6] := ((Ord(APostCode[0]) and $3c) shr 2) or ((ACountry and $3) shl 4);
|
|
||||||
maxi_codeword[7] := (ACountry and $fc) shr 2;
|
|
||||||
maxi_codeword[8] := (((ACountry and $300) shr 8)) or ((AService and $f) shl 2);
|
|
||||||
maxi_codeword[9] := ((AService and $3f0) shr 4);
|
|
||||||
end;
|
|
||||||
*)
|
|
||||||
function maxicode(ASymbol: PZintSymbol; ASource: String): Integer;
|
function maxicode(ASymbol: PZintSymbol; ASource: String): Integer;
|
||||||
var
|
var
|
||||||
i, j, mode, countrycode, service: Integer;
|
i, j, mode, countrycode, service: Integer;
|
||||||
@ -726,12 +657,10 @@ var
|
|||||||
servicestr: string[3];
|
servicestr: string[3];
|
||||||
local_source: String;
|
local_source: String;
|
||||||
begin
|
begin
|
||||||
mode := ASymbol^.Option_1;
|
|
||||||
|
|
||||||
local_source := ASource;
|
local_source := ASource;
|
||||||
|
maxi_codeword := Default(TMaxiCodeword);
|
||||||
|
|
||||||
FillChar(maxi_codeword[0], SizeOf(maxi_codeword), 0);
|
mode := ASymbol^.Option_1;
|
||||||
|
|
||||||
{ mode is not specified }
|
{ mode is not specified }
|
||||||
if (mode <= 0) then
|
if (mode <= 0) then
|
||||||
begin
|
begin
|
||||||
|
Reference in New Issue
Block a user