33
33
** added logo to QR in svg format
34
34
** added jpeg format
35
35
** Date: 2024-09-08
36
- ** added some postal 4-state barcodes
37
- ** * Royal Mail 4-State Customer Code
38
- ** * Australia Post 4-State Customer Barcode
39
- ** * Dutch PostNL KIX
36
+ ** added some postal 4-state barcodes
37
+ ** * Royal Mail 4-State Customer Code
38
+ ** * Australia Post 4-State Customer Barcode
39
+ ** * Dutch PostNL KIX
40
+ ** Date: 2024-10-21
41
+ ** compile on database 12.2 and older
40
42
******************************************************************************
41
43
******************************************************************************
42
44
Copyright (C) 2016-2024 by Anton Scheffer
@@ -2725,18 +2727,17 @@ THE SOFTWARE.
2725
2727
--
2726
2728
procedure init_rm_alfabet
2727
2729
is
2730
+ l_chr varchar2(1);
2728
2731
begin
2729
- l_4s := tp_4s
2730
- ( '0' => 'TTFF', '1' => 'TDAF', '2' => 'TDFA', '3' => 'DTAF'
2731
- , '4' => 'DTFA', '5' => 'DDAA', '6' => 'TADF', '7' => 'TFTF'
2732
- , '8' => 'TFDA', '9' => 'DATF', 'A' => 'DADA', 'B' => 'DFTA'
2733
- , 'C' => 'TAFD', 'D' => 'TFAD', 'E' => 'TFFT', 'F' => 'DAAD'
2734
- , 'G' => 'DAFT', 'H' => 'DFAT', 'I' => 'ATDF', 'J' => 'ADTF'
2735
- , 'K' => 'ADDA', 'L' => 'FTTF', 'M' => 'FTDA', 'N' => 'FDTA'
2736
- , 'O' => 'ATFD', 'P' => 'ADAD', 'Q' => 'ADFT', 'R' => 'FTAD'
2737
- , 'S' => 'FTFT', 'T' => 'FDAT', 'U' => 'AADD', 'V' => 'AFTD'
2738
- , 'W' => 'AFDT', 'X' => 'FATD', 'Y' => 'FADT', 'Z' => 'FFTT'
2739
- );
2732
+ for i in 1 .. 36
2733
+ loop
2734
+ l_chr := substr( '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, 1 );
2735
+ l_4s( l_chr ) := substr( 'TTFFTDAFTDFADTAFDTFADDAATADFTFTF'
2736
+ || 'TFDADATFDADADFTATAFDTFADTFFTDAAD'
2737
+ || 'DAFTDFATATDFADTFADDAFTTFFTDAFDTA'
2738
+ || 'ATFDADADADFTFTADFTFTFDATAADDAFTD'
2739
+ || 'AFDTFATDFADTFFTT', i * 4 - 3, 4 );
2740
+ end loop;
2740
2741
end init_rm_alfabet;
2741
2742
--
2742
2743
function apsc( p_val varchar2 )
@@ -2757,28 +2758,24 @@ THE SOFTWARE.
2757
2758
then
2758
2759
raise_application_error( -20001, 'Australian POST barcode should start with a 8 digits DPID' );
2759
2760
end if;
2760
- l_nc :=
2761
- tp_4s( '0' => '00', '1' => '01', '2' => '02', '3' => '10', '4' => '11'
2762
- , '5' => '12', '6' => '20', '7' => '21', '8' => '22', '9' => '30'
2763
- );
2764
- l_cc :=
2765
- tp_4s( 'A' => '000', 'B' => '001', 'C' => '002', 'D' => '010'
2766
- , 'E' => '011', 'F' => '012', 'G' => '020', 'H' => '021'
2767
- , 'I' => '022', 'J' => '100', 'K' => '101', 'L' => '102'
2768
- , 'M' => '110', 'N' => '111', 'O' => '112', 'P' => '120'
2769
- , 'Q' => '121', 'R' => '122', 'S' => '200', 'T' => '201'
2770
- , 'U' => '202', 'V' => '210', 'W' => '211', 'X' => '212'
2771
- , 'Y' => '220', 'Z' => '221', '0' => '222', '1' => '300'
2772
- , '2' => '301', '3' => '302', '4' => '310', '5' => '311'
2773
- , '6' => '312', '7' => '320', '8' => '321', '9' => '322'
2774
- , 'a' => '023', 'b' => '030', 'c' => '031', 'd' => '032'
2775
- , 'e' => '033', 'f' => '103', 'g' => '113', 'h' => '123'
2776
- , 'i' => '130', 'j' => '131', 'k' => '132', 'l' => '133'
2777
- , 'm' => '203', 'n' => '213', 'o' => '223', 'p' => '230'
2778
- , 'q' => '231', 'r' => '232', 's' => '233', 't' => '303'
2779
- , 'u' => '313', 'v' => '323', 'w' => '330', 'x' => '331'
2780
- , 'y' => '332', 'z' => '333', ' ' => '003', '#' => '013'
2781
- );
2761
+ --
2762
+ for i in 26 .. 35
2763
+ loop
2764
+ l_chr := utl_i18n.raw_to_char( to_char( i + 22, 'fm0X' ), 'US7ASCII' );
2765
+ l_nc( l_chr ) := trunc( ( i - 26 ) / 3 ) || mod( i - 26, 3 );
2766
+ l_cc( l_chr ) := trunc( i / 9 ) || mod( trunc( i / 3 ), 3 ) || mod( i, 3 );
2767
+ end loop;
2768
+ for i in 0 .. 25
2769
+ loop
2770
+ l_chr := utl_i18n.raw_to_char( to_char( i + 65, 'fm0X' ), 'US7ASCII' );
2771
+ l_cc( l_chr ) := trunc( i / 9 ) || mod( trunc( i / 3 ), 3 ) || mod( i, 3 );
2772
+ l_chr := utl_i18n.raw_to_char( to_char( i + 97, 'fm0X' ), 'US7ASCII' );
2773
+ l_cc( l_chr ) := trunc( ( i + 2 ) / 7 )
2774
+ || case when mod( i + 2, 7 ) > 2 then 3 else mod( i + 2, 7 ) end
2775
+ || case when mod( i + 6, 7 ) > 2 then 3 else mod( i + 6, 7 ) end;
2776
+ end loop;
2777
+ l_cc( ' ' ) := '003';
2778
+ l_cc( '#' ) := '013';
2782
2779
--
2783
2780
if l_len = 8
2784
2781
then -- Standard Customer Barcode
@@ -2840,8 +2837,6 @@ THE SOFTWARE.
2840
2837
then
2841
2838
raise_application_error( -20001, 'invalid Australian POST barcode' );
2842
2839
end if;
2843
- --dbms_output.put_line( length( l_val ) );
2844
- --dbms_output.put_line( replace( replace( replace( replace( l_val, '0', 'F' ), '1','A' ), '2', 'D' ), '3', 'T' ) );
2845
2840
return l_val;
2846
2841
end apsc;
2847
2842
--
@@ -2859,22 +2854,12 @@ THE SOFTWARE.
2859
2854
begin
2860
2855
init_rm_alfabet;
2861
2856
--
2862
- l_top := tp_checksum
2863
- ( '0' => 1, '1' => 1, '2' => 1, '3' => 1, '4' => 1, '5' => 1
2864
- , '6' => 2, '7' => 2, '8' => 2, '9' => 2, 'A' => 2, 'B' => 2
2865
- , 'C' => 3, 'D' => 3, 'E' => 3, 'F' => 3, 'G' => 3, 'H' => 3
2866
- , 'I' => 4, 'J' => 4, 'K' => 4, 'L' => 4, 'M' => 4, 'N' => 4
2867
- , 'O' => 5, 'P' => 5, 'Q' => 5, 'R' => 5, 'S' => 5, 'T' => 5
2868
- , 'U' => 0, 'V' => 0, 'W' => 0, 'X' => 0, 'Y' => 0, 'Z' => 0
2869
- );
2870
- l_bottom := tp_checksum
2871
- ( '0' => 1, '1' => 2, '2' => 3, '3' => 4, '4' => 5, '5' => 0
2872
- , '6' => 1, '7' => 2, '8' => 3, '9' => 4, 'A' => 5, 'B' => 0
2873
- , 'C' => 1, 'D' => 2, 'E' => 3, 'F' => 4, 'G' => 5, 'H' => 0
2874
- , 'I' => 1, 'J' => 2, 'K' => 3, 'L' => 4, 'M' => 5, 'N' => 0
2875
- , 'O' => 1, 'P' => 2, 'Q' => 3, 'R' => 4, 'S' => 5, 'T' => 0
2876
- , 'U' => 1, 'V' => 2, 'W' => 3, 'X' => 4, 'Y' => 5, 'Z' => 0
2877
- );
2857
+ for i in 1 .. 36
2858
+ loop
2859
+ l_chr := substr( '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, 1 );
2860
+ l_top( l_chr ) := mod( trunc( ( i + 5 ) / 6 ), 6 );
2861
+ l_bottom( l_chr ) := mod( i, 6 );
2862
+ end loop;
2878
2863
--
2879
2864
l_val := l_val || 'A'; -- start code
2880
2865
for i in 1 .. length( p_val )
@@ -5471,7 +5456,6 @@ THE SOFTWARE.
5471
5456
l_p := 0;
5472
5457
for l in 1 .. 16
5473
5458
loop
5474
- --dbms_output.put_line( 'inithuf: ' || l || ' ' || p_bits( l + 1 ) );
5475
5459
for i in 1 .. p_bits( l + 1 )
5476
5460
loop
5477
5461
l_huffm_size( l_p ) := l;
@@ -5502,7 +5486,6 @@ THE SOFTWARE.
5502
5486
for p in 0 .. l_huffm_size.last - 1
5503
5487
loop
5504
5488
l_tmp := p_val( p + 1 );
5505
- --dbms_output.put_line( 'inithuf: ' || p || ' ' || l_huffm_code(p) || ' ' || l_huffm_size(p) || ' ' || l_tmp );
5506
5489
l_DC_AC_matrix( p_idx )( l_tmp )( 0 ) := l_huffm_code( p );
5507
5490
l_DC_AC_matrix( p_idx )( l_tmp )( 1 ) := l_huffm_size( p );
5508
5491
end loop;
@@ -5591,7 +5574,9 @@ THE SOFTWARE.
5591
5574
--
5592
5575
l_huffm_buf := 0;
5593
5576
l_huffm_bits := 0;
5594
- l_lastDCvalue := tp_tn( 0 => 0, 1 => 0, 2 => 0 );
5577
+ l_lastDCvalue( 0 ) := 0;
5578
+ l_lastDCvalue( 1 ) := 0;
5579
+ l_lastDCvalue( 2 ) := 0;
5595
5580
end init_huffman;
5596
5581
--
5597
5582
procedure init_color( p_idx pls_integer, p_rgb varchar2 )
@@ -5617,7 +5602,6 @@ THE SOFTWARE.
5617
5602
l_buf number := bitand( p_code, power( 2, p_size ) - 1 );
5618
5603
l_bits pls_integer := l_huffm_bits + p_size;
5619
5604
begin
5620
- --dbms_output.put_line( 'bufferIt: ' || p_code || ' ' || p_size );
5621
5605
l_buf := l_buf * power( 2, 24 - l_bits );
5622
5606
l_buf := l_buf + l_huffm_buf - bitand( l_buf, l_huffm_buf );
5623
5607
while l_bits >= 8
@@ -5710,12 +5694,10 @@ THE SOFTWARE.
5710
5694
then
5711
5695
huffman_buffer( l_tmp2, l_bits );
5712
5696
end if;
5713
- -- xyab
5714
5697
l_idx := l_idx + 1;
5715
5698
l_r := 0;
5716
5699
for k in 1 ..63
5717
5700
loop
5718
- --dbms_output.put_line( 't: ' || k || ' ' || l_natural_order( k ) || ' ' || p_dct( l_natural_order( k ) ) );
5719
5701
l_tmp1 := p_dct( l_natural_order( k ) );
5720
5702
if l_tmp1 = 0
5721
5703
then
@@ -5741,7 +5723,6 @@ THE SOFTWARE.
5741
5723
l_bits := l_bits + 1;
5742
5724
l_tmp1 := trunc( l_tmp1 / 2 );
5743
5725
end loop;
5744
- --dbms_output.put_line( ' t: ' || l_r || ' ' || l_bits || ' ' || ( 16 * l_r + l_bits ) || ' ' || l_tmp2 );
5745
5726
l_r := 16 * l_r + l_bits;
5746
5727
huffman_buffer( l_DC_AC_matrix( l_idx )( l_r )( 0 )
5747
5728
, l_DC_AC_matrix( l_idx )( l_r )( 1 )
@@ -5786,7 +5767,6 @@ THE SOFTWARE.
5786
5767
l_idx pls_integer;
5787
5768
l_dct tp_tn;
5788
5769
begin
5789
- --dbms_output.put_line( 'forwardDCT' );
5790
5770
for i in 0 .. 7
5791
5771
loop
5792
5772
for j in 0 .. 7
@@ -5877,9 +5857,7 @@ THE SOFTWARE.
5877
5857
loop
5878
5858
l_idx := i * 8 + j;
5879
5859
l_dct( l_idx ) := round( l_block( i )( j ) * l_divisors( sign( p_comp ) )( l_idx ) );
5880
- --dbms_output.put( ' ' || l_dct( l_idx ) );
5881
5860
end loop;
5882
- --dbms_output.put_line( '' );
5883
5861
end loop;
5884
5862
return l_dct;
5885
5863
end dct;
@@ -5994,8 +5972,6 @@ THE SOFTWARE.
5994
5972
end loop;
5995
5973
end loop;
5996
5974
end if;
5997
- --dbms_output.put_line( l_m.count || 'x' || l_m(0).count );
5998
- --dbms_output.put_line( l_m.count || 'x' || l_m(l_m.last).count );
5999
5975
--
6000
5976
init_matrix( nvl( check_int( p_parm, 'quality', 100, 1 ), 100 ) );
6001
5977
init_huffman;
0 commit comments