[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]
{
From: MAYNARD PHILBROOK
Subj: Re: bar codes
---------------------------------------------------------------------------
HB> I'm in need of bar code type code. I want to print custom bar codes
HB> and be able to scan them into an application. I also want to be able
HB> to do this directly from my application, not via a third party or a tsr
HB> program.
}
{$F-,D-,S-,R-,V-,I-}
{ Prints 3 Of 9 Bar Codes other wise known as Code 39 }
{ May only work on EPSON or IBM Dot Matrix Printer !! }
Uses Printer;
{$V-}
Const { Set up Defalt Settings }
Resolution:Byte = 2; { Vertical Grid Width per Line }
Hight :Byte = 3; { Number of rows to Print }
Passes :Byte = 2; { Number for Passing for Darkness }
Density :Byte = 1; { Printer Graphic Mode L or Z }
Graphic_Mode:Array[1..2] of String[1] = ('L','Z');
grid :array[0..43] of string[12] =
('110100101011', {1}
'101100101011', {2}
'110110010101', {3}
'101001101011', {4}
'110100110101', {5}
'101100110101', {6}
'101001011011', {7}
'110100101101', {8}
'101100101101', {9}
'101001101101', {0}
'110101001011', {A}
'101101001011', {B}
'110110100101', {C}
'101011001011', {D}
'110101100101', {E}
'101101100101', {F}
'101010011011', {G}
'110101001101', {H}
'101101001101', {I}
'101011001101', {J}
'110101010011', {K}
'101101010011', {L}
'110110101001', {M}
'101011010011', {N}
'110101101001', {O}
'101101101001', {P}
'101010110011', {Q}
'110101011001', {R}
'101101011001', {S}
'101011011001', {T}
'110010101011', {U}
'100110101011', {V}
'110011010101', {W}
'100101101011', {X}
'110010110101', {Y}
'100110110101', {Z}
'100101011011', {-}
'110010101101', {.}
'100110101101', { }
'100101101101', {*}
'100100100101', {'$'}
'100100101001', {/}
'100101001001', {+}
'101001001001'); {%}
Function Get_Grid(Yup:Char):String; { Translations Function }
Var
PT :Word;
Begin
Get_Grid := '';
Case Yup Of
'1'..'9':Get_Grid := Grid[ Ord( Yup) -$31];
'0' :Get_Grid := Grid[9];
'A'..'Z':Get_Grid := Grid[10+Ord(Yup)-65];
'-' :Get_Grid := Grid[36];
'.' :Get_grid := Grid[37];
' ' :Get_Grid := Grid[38];
'*' :Get_Grid := Grid[39];
'$' :Get_Grid := Grid[40];
'/' :Get_Grid := Grid[41];
'+' :Get_Grid := Grid[42];
'%' :Get_Grid := Grid[43];
End;
End;
Procedure Send_Char(Yup :Char);
Var
Hold :String;
L, G :Word;
Out_Bar :Byte;
Begin
Hold := Get_Grid(Upcase(Yup));
If Hold <> '' Then
Begin
Write(Lst,#27,Graphic_Mode[ Density ]); { Printer in Graph Mode }
Write(Lst,Char((Resolution * 12)+Resolution),#0); { How many Bytes ?}
For L := 1 To 12 Do { All 12 Chars }
Begin
If Hold[L] ='1' Then Out_bar := 255 Else Out_bar := 0;
For G := 1 To Resolution Do Write(Lst, Char(Out_Bar));
End;
For L := 1 To Resolution Do Write(Lst, #0); { Charactor Separator }
End;
End;
Var
Number_IN :String[15];
L,LC, DS :Word;
T :Byte;
Begin
Val(ParamStr(1), T, DS ); { Adjust Parameters if Needed }
If DS = 0 Then Resolution := T; { Width Ratio }
Val(ParamStr(2), T, DS );
If DS = 0 Then Hight := T; { Vertical Size of Label }
Val(ParamStr(3), T, DS );
If DS = 0 THen Passes := T; { For Darkness adjust }
Val(ParamStr(4), T, DS );
If (DS = 0)and( T in [1..2]) Then Density := T; { Printer Mode }
Repeat
ReadLn(Number_IN);
If Number_IN <> '' Then
Begin
Write(Lst,#27+'1'); { Set 7/72 Line Spacing }
For LC := 1 to Hight Do {Hight Loop }
Begin
For DS := 1 To Passes Do { Double Strike }
Begin
Send_Char('*'); { Must Create a '*' @ start & end }
For L := 1 To Byte(Number_IN[0]) Do Send_Char(Number_IN [ L ]);
Send_Char('*');
Write(Lst,#13);
End;
If Lc < Hight Then WriteLn(Lst) else WriteLn(Lst,#27,'2');
End;
{ Print Number underneath Bars in center or close to it any ways }
WriteLn(Lst,' ':Resolution,Number_IN:((Byte(Number_IN[0])*(Resolution Div (Byte(Number_In[0])) div 2))));
End;
Until Number_In = '';
End.
[Back to PRINTING SWAG index] [Back to Main SWAG index] [Original]