Greetings
Since this is my First Post on this Forum I thought I might
supply some useful code along with a question. I have been
using this code for over 10 yrs .Works well on many types
of printers using HP PCL & GL control codes. Of course would
work best using laser printers.
My question is this.
Since the procedure relys on direct output to the printer,
How can it be altered to run under VFP since no direct
output is possible in VFP, or is it ?
***************************************
PROCEDURE BARPRN
* Public variables supplied to this procedure are
* UPCPRN (characters to be converted to bar code)
* DRES (resolution of printer to print) suggest 150
* BH (height of bar code in dots) normal 12-24
UPCPRN=ALLTRIM(UPCPRN)
BARm=UPCPRN
******************************** YOUR CODE TO
* DECIDE WHETHER TO PRINT CODE39 OR UPC BAR
* CODE. MAKE SURE YOU HAVE ONLY THE CHARACTERS
* LISTED IN BARUPC & BAR39 SECTIONS BELOW.
IF LEN(UPCPRN)=12 .AND. SUBSTR(UPCPRN,3,1)#'-'
BH=13
DO BARUPC WITH BARm
ELSE
BH=24
DO BAR39 WITH BARm
ENDIF
********************************
IF LEN(BARm)=0
LOOP
ENDIF
P=P+REPLICATE(CHR(0),8-(LEN(P) % 8))
P2=""
Z=CHR(0)
I=1
DO WHILE I<LEN(P)
B=0
FOR J=1 TO 8
B=IIF(SUBSTR(P,I,1)=Z,B*2,B*2+1)
I=I+1
ENDFOR
P2=P2+CHR(B)
ENDDO
??? CHR(27)+"*r0F"
* Put printer in graphics mode
??? CHR(27)+"*t"+DRES+"R"+CHR(27)+"*r1A"
* Set the resolution and start point
FOR H=1 TO BH
* Repeat until desired height BH
??? CHR(27)+"*b"+ALLTRIM(STR(LEN(P2),3))+"W"+P2
* Send byte length and print one row
ENDFOR
??? CHR(27)+"*rB"
* End graphics mode
RETURN
************************
PROCEDURE BAR39
PARAMETERS BARm
PRIVATE ns,ws,nb,wb,wb1,wb2,wb3,wb4
PRIVATE ws1,ws2,ws3,nb1,nb2,nb3,nb4
PRIVATE ns1,ns2,ns3,ns4,msg,t,x
IF TYPE('BARm')#"C"
RETURN ""
ENDIF
* Var must be character type
IF AT("*"," "+BARm)>1
RETURN
ENDIF
* Var can not contain *
MSG="*"+UPPER(BARm)+"*"
* Code 39 starts & ends with an *
ns=CHR(0)+CHR(0)
ws=CHR(0)+CHR(0)+CHR(0)+CHR(0)
nb=CHR(255)
wb=CHR(255)+CHR(255)+CHR(255)
* Set up the PCL codes needed for BAR & SPACE
WB1=wb+ns+nb
WB2=wb+ns+wb
WB3=wb+ws+wb
WB4=wb+ws+nb
WS1=ws+nb+ns
WS2=ws+wb+ns
WS3=ws+nb+ws
NB1=nb+ns+wb
NB2=nb+ns+nb
NB3=nb+ws+wb
NB4=nb+ws+nb
NS1=ns+wb+ws
NS2=ns+nb+ws
NS3=ns+nb+ns
NS4=ns+wb+ns
* DEFINE ALL THE COMBOS NEEDED*
PUBLIC P
p=""
FOR x=1 TO LEN(MSG)
t=SUBSTR(MSG,x,1)
DO CASE
CASE t="1"
p=p+WB1+WS1+NB1
CASE t="2"
p=p+NB1+WS1+NB1
CASE t="3"
p=p+WB2+WS1+NB2
CASE t="4"
p=p+NB2+WS2+NB1
CASE t="5"
p=p+WB1+WS2+NB2
CASE t="6"
p=p+NB1+WS2+NB2
CASE t="7"
p=p+NB2+WS1+WB2
CASE t="8"
p=p+WB1+WS1+WB1
CASE t="9"
p=p+NB1+WS1+WB1
CASE t="0"
p=p+NB2+WS2+WB1
CASE t="A"
p=p+WB1+NS2+NB1
CASE t="B"
p=p+NB1+NS2+NB1
CASE t="C"
p=p+WB2+NS2+NB2
CASE t="D"
p=p+NB2+NS1+NB1
CASE t="E"
p=p+WB1+NS1+NB2
CASE t="F"
p=p+NB1+NS1+NB2
CASE t="G"
p=p+NB2+NS2+WB2
CASE t="H"
p=p+WB1+NS2+WB1
CASE t="I"
p=p+NB1+NS2+WB1
CASE t="J"
p=p+NB2+NS1+WB1
CASE t="K"
p=p+WB1+NS3+NB3
CASE t="L"
p=p+NB1+NS3+NB3
CASE t="M"
p=p+WB2+NS3+NB4
CASE t="N"
p=p+NB2+NS4+NB3
CASE t="O"
p=p+WB1+NS4+NB4
CASE t="P"
p=p+NB1+NS4+NB4
CASE t="Q"
p=p+NB2+NS3+WB3
CASE t="R"
p=p+WB1+NS3+WB4
CASE t="S"
p=p+NB1+NS3+WB4
CASE t="T"
p=p+NB2+NS4+WB4
CASE t="U"
p=p+WB4+NS3+NB1
CASE t="V"
p=p+NB3+NS3+NB1
CASE t="W"
p=p+WB3+NS3+NB2
CASE t="X"
p=p+NB4+NS4+NB1
CASE t="Y"
p=p+WB4+NS4+NB2
CASE t="Z"
p=p+NB3+NS4+NB2
CASE t="-"
p=p+NB4+NS3+WB2
CASE t="."
p=p+WB4+NS3+WB1
CASE t=" "
p=p+NB3+NS3+WB1
CASE t="*"
p=p+NB4+NS4+WB1
CASE t="$"
p=p+NB4+WS3+NB2
CASE t="/"
p=p+NB4+WS1+NB4
CASE t="+"
p=p+NB4+NS2+NB4
CASE t="%"
p=p+NB2+WS3+NB4
OTHERWISE
RETURN
ENDCASE
p=p+ns
* BUILD THE STRING CHAR BY CHAR
ENDFOR
RETURN
************************
PROCEDURE BARupc
PARAMETERS BARm
PRIVATE b1,b2,b3,b4
PRIVATE s1,s2,s3,s4,msg,t
IF TYPE('BARm')#"C"
RETURN ""
ENDIF
MSG=UPPER(BARm)
s1=CHR(0)
s2=CHR(0)+CHR(0)
s3=CHR(0)+CHR(0)+CHR(0)
s4=CHR(0)+CHR(0)+CHR(0)+CHR(0)
b1=CHR(255)
b2=CHR(255)+CHR(255)
b3=CHR(255)+CHR(255)+CHR(255)
b4=CHR(255)+CHR(255)+CHR(255)+CHR(255)
PUBLIC P
p=""
p=p+b1+s1+b1
FOR x=1 TO 6
t=SUBSTR(MSG,x,1)
DO CASE
CASE t="1"
p=p+s2+b2+s2+b1
CASE t="2"
p=p+s2+b1+s2+b2
CASE t="3"
p=p+s1+b4+s1+b1
CASE t="4"
p=p+s1+b1+s3+b2
CASE t="5"
p=p+s1+b2+s3+b1
CASE t="6"
p=p+s1+b1+s1+b4
CASE t="7"
p=p+s1+b3+s1+b2
CASE t="8"
p=p+s1+b2+s1+b3
CASE t="9"
p=p+s3+b1+s1+b2
CASE t="0"
p=p+s3+b2+s1+b1
OTHERWISE
RETURN
ENDCASE
ENDFOR
p=p+s1+b1+s1+b1+s1
FOR x=7 TO 12
t=SUBSTR(MSG,x,1)
DO CASE
CASE t="1"
p=p+b2+s2+b2+s1
CASE t="2"
p=p+b2+s1+b2+s2
CASE t="3"
p=p+b1+s4+b1+s1
CASE t="4"
p=p+b1+s1+b3+s2
CASE t="5"
p=p+b1+s2+b3+s1
CASE t="6"
p=p+b1+s1+b1+s4
CASE t="7"
p=p+b1+s3+b1+s2
CASE t="8"
p=p+b1+s2+b1+s3
CASE t="9"
p=p+b3+s1+b1+s2
CASE t="0"
p=p+b3+s2+b1+s1
OTHERWISE
RETURN
ENDCASE
ENDFOR
p=p+b1+s1+b1
RETURN
Charlie Huff
CJ's Homecenter
From the Star Trek Generation
Since this is my First Post on this Forum I thought I might
supply some useful code along with a question. I have been
using this code for over 10 yrs .Works well on many types
of printers using HP PCL & GL control codes. Of course would
work best using laser printers.
My question is this.
Since the procedure relys on direct output to the printer,
How can it be altered to run under VFP since no direct
output is possible in VFP, or is it ?
***************************************
PROCEDURE BARPRN
* Public variables supplied to this procedure are
* UPCPRN (characters to be converted to bar code)
* DRES (resolution of printer to print) suggest 150
* BH (height of bar code in dots) normal 12-24
UPCPRN=ALLTRIM(UPCPRN)
BARm=UPCPRN
******************************** YOUR CODE TO
* DECIDE WHETHER TO PRINT CODE39 OR UPC BAR
* CODE. MAKE SURE YOU HAVE ONLY THE CHARACTERS
* LISTED IN BARUPC & BAR39 SECTIONS BELOW.
IF LEN(UPCPRN)=12 .AND. SUBSTR(UPCPRN,3,1)#'-'
BH=13
DO BARUPC WITH BARm
ELSE
BH=24
DO BAR39 WITH BARm
ENDIF
********************************
IF LEN(BARm)=0
LOOP
ENDIF
P=P+REPLICATE(CHR(0),8-(LEN(P) % 8))
P2=""
Z=CHR(0)
I=1
DO WHILE I<LEN(P)
B=0
FOR J=1 TO 8
B=IIF(SUBSTR(P,I,1)=Z,B*2,B*2+1)
I=I+1
ENDFOR
P2=P2+CHR(B)
ENDDO
??? CHR(27)+"*r0F"
* Put printer in graphics mode
??? CHR(27)+"*t"+DRES+"R"+CHR(27)+"*r1A"
* Set the resolution and start point
FOR H=1 TO BH
* Repeat until desired height BH
??? CHR(27)+"*b"+ALLTRIM(STR(LEN(P2),3))+"W"+P2
* Send byte length and print one row
ENDFOR
??? CHR(27)+"*rB"
* End graphics mode
RETURN
************************
PROCEDURE BAR39
PARAMETERS BARm
PRIVATE ns,ws,nb,wb,wb1,wb2,wb3,wb4
PRIVATE ws1,ws2,ws3,nb1,nb2,nb3,nb4
PRIVATE ns1,ns2,ns3,ns4,msg,t,x
IF TYPE('BARm')#"C"
RETURN ""
ENDIF
* Var must be character type
IF AT("*"," "+BARm)>1
RETURN
ENDIF
* Var can not contain *
MSG="*"+UPPER(BARm)+"*"
* Code 39 starts & ends with an *
ns=CHR(0)+CHR(0)
ws=CHR(0)+CHR(0)+CHR(0)+CHR(0)
nb=CHR(255)
wb=CHR(255)+CHR(255)+CHR(255)
* Set up the PCL codes needed for BAR & SPACE
WB1=wb+ns+nb
WB2=wb+ns+wb
WB3=wb+ws+wb
WB4=wb+ws+nb
WS1=ws+nb+ns
WS2=ws+wb+ns
WS3=ws+nb+ws
NB1=nb+ns+wb
NB2=nb+ns+nb
NB3=nb+ws+wb
NB4=nb+ws+nb
NS1=ns+wb+ws
NS2=ns+nb+ws
NS3=ns+nb+ns
NS4=ns+wb+ns
* DEFINE ALL THE COMBOS NEEDED*
PUBLIC P
p=""
FOR x=1 TO LEN(MSG)
t=SUBSTR(MSG,x,1)
DO CASE
CASE t="1"
p=p+WB1+WS1+NB1
CASE t="2"
p=p+NB1+WS1+NB1
CASE t="3"
p=p+WB2+WS1+NB2
CASE t="4"
p=p+NB2+WS2+NB1
CASE t="5"
p=p+WB1+WS2+NB2
CASE t="6"
p=p+NB1+WS2+NB2
CASE t="7"
p=p+NB2+WS1+WB2
CASE t="8"
p=p+WB1+WS1+WB1
CASE t="9"
p=p+NB1+WS1+WB1
CASE t="0"
p=p+NB2+WS2+WB1
CASE t="A"
p=p+WB1+NS2+NB1
CASE t="B"
p=p+NB1+NS2+NB1
CASE t="C"
p=p+WB2+NS2+NB2
CASE t="D"
p=p+NB2+NS1+NB1
CASE t="E"
p=p+WB1+NS1+NB2
CASE t="F"
p=p+NB1+NS1+NB2
CASE t="G"
p=p+NB2+NS2+WB2
CASE t="H"
p=p+WB1+NS2+WB1
CASE t="I"
p=p+NB1+NS2+WB1
CASE t="J"
p=p+NB2+NS1+WB1
CASE t="K"
p=p+WB1+NS3+NB3
CASE t="L"
p=p+NB1+NS3+NB3
CASE t="M"
p=p+WB2+NS3+NB4
CASE t="N"
p=p+NB2+NS4+NB3
CASE t="O"
p=p+WB1+NS4+NB4
CASE t="P"
p=p+NB1+NS4+NB4
CASE t="Q"
p=p+NB2+NS3+WB3
CASE t="R"
p=p+WB1+NS3+WB4
CASE t="S"
p=p+NB1+NS3+WB4
CASE t="T"
p=p+NB2+NS4+WB4
CASE t="U"
p=p+WB4+NS3+NB1
CASE t="V"
p=p+NB3+NS3+NB1
CASE t="W"
p=p+WB3+NS3+NB2
CASE t="X"
p=p+NB4+NS4+NB1
CASE t="Y"
p=p+WB4+NS4+NB2
CASE t="Z"
p=p+NB3+NS4+NB2
CASE t="-"
p=p+NB4+NS3+WB2
CASE t="."
p=p+WB4+NS3+WB1
CASE t=" "
p=p+NB3+NS3+WB1
CASE t="*"
p=p+NB4+NS4+WB1
CASE t="$"
p=p+NB4+WS3+NB2
CASE t="/"
p=p+NB4+WS1+NB4
CASE t="+"
p=p+NB4+NS2+NB4
CASE t="%"
p=p+NB2+WS3+NB4
OTHERWISE
RETURN
ENDCASE
p=p+ns
* BUILD THE STRING CHAR BY CHAR
ENDFOR
RETURN
************************
PROCEDURE BARupc
PARAMETERS BARm
PRIVATE b1,b2,b3,b4
PRIVATE s1,s2,s3,s4,msg,t
IF TYPE('BARm')#"C"
RETURN ""
ENDIF
MSG=UPPER(BARm)
s1=CHR(0)
s2=CHR(0)+CHR(0)
s3=CHR(0)+CHR(0)+CHR(0)
s4=CHR(0)+CHR(0)+CHR(0)+CHR(0)
b1=CHR(255)
b2=CHR(255)+CHR(255)
b3=CHR(255)+CHR(255)+CHR(255)
b4=CHR(255)+CHR(255)+CHR(255)+CHR(255)
PUBLIC P
p=""
p=p+b1+s1+b1
FOR x=1 TO 6
t=SUBSTR(MSG,x,1)
DO CASE
CASE t="1"
p=p+s2+b2+s2+b1
CASE t="2"
p=p+s2+b1+s2+b2
CASE t="3"
p=p+s1+b4+s1+b1
CASE t="4"
p=p+s1+b1+s3+b2
CASE t="5"
p=p+s1+b2+s3+b1
CASE t="6"
p=p+s1+b1+s1+b4
CASE t="7"
p=p+s1+b3+s1+b2
CASE t="8"
p=p+s1+b2+s1+b3
CASE t="9"
p=p+s3+b1+s1+b2
CASE t="0"
p=p+s3+b2+s1+b1
OTHERWISE
RETURN
ENDCASE
ENDFOR
p=p+s1+b1+s1+b1+s1
FOR x=7 TO 12
t=SUBSTR(MSG,x,1)
DO CASE
CASE t="1"
p=p+b2+s2+b2+s1
CASE t="2"
p=p+b2+s1+b2+s2
CASE t="3"
p=p+b1+s4+b1+s1
CASE t="4"
p=p+b1+s1+b3+s2
CASE t="5"
p=p+b1+s2+b3+s1
CASE t="6"
p=p+b1+s1+b1+s4
CASE t="7"
p=p+b1+s3+b1+s2
CASE t="8"
p=p+b1+s2+b1+s3
CASE t="9"
p=p+b3+s1+b1+s2
CASE t="0"
p=p+b3+s2+b1+s1
OTHERWISE
RETURN
ENDCASE
ENDFOR
p=p+b1+s1+b1
RETURN
Charlie Huff
CJ's Homecenter
From the Star Trek Generation