JPG wrote:Another Thank You to all who responded. This will allow me to test the read portion of my 'project'.
The font created bar codes does however require manual keyboard input.
My 'need' is to create them by software that reads text and creates the barcode. Hence the interest in PCL / bitmap. Either may be too much more effort than a wire matrix printer would require.
One question re PCL - does merely having esc code sequences trigger pcl responses, or does it need to be 'turned on' somehow? My printer prints esc codes as a symbol looking like <-.
JPG here is a BASIC program that I wrote in the 80's that might give you some ideas. I will look for my POS SW and see what I can come up with. I could write you something if you wanted me to. It would give me an opportunity to pay one of you guys at least, back a little .....
1 '<BARCODE.BAS> To print code 3 of 9 Bar codes on H.P. Laserjet printer. Richard Jones RJ Enterprises/Zia Software
2 'Modified 4/16/87 to add sequencial counting and produced
3 'Developed from LASERBAR.BAS .
4 'output for mailing-type labels. Change lines 384-389 for your label format.
5 'Lines 500-980 are from CODE39.BAS 05/18/85
6
7
8
9
10 CLS:KEY OFF
20 ESC$ = CHR$(27):LJ$ = "T" 'FLAG FOR LASETJET PRINTER VS TEST MODE
30 BAR$=CHR$(186)+CHR$(179)+CHR$(221)+CHR$(179)+CHR$(186)
40 DIM B(100)
50 LPRINT CHR$(27);"E";:'***** Initialize LaserJet
100 '*************************
101 '** menu system **
102 '*************************
108 GOSUB 6200 'INITIALIZE VARS
110 CLS
111 COLOR 15,0:LOCATE 2,29:PRINT BAR$;" LASERBAR ";BAR$
112 LOCATE 3,38:PRINT"by"
113 LOCATE 4,34:PRINT"Richard Jones":COLOR 7,0
114 LOCATE 6,26:PRINT"modified 4/87 "
115 IF LJ$ = "F" THEN LOCATE 9,25:PRINT"*** Non-LaserJet test mode ***"
120 LOCATE 12,21:PRINT "ÍÍÍÍÍÍÍÍÍÍ MENU OF THE DAY: ÍÍÍÍÍÍÍÍÍÍ"
130 LOCATE 14,22:PRINT "1) .......... Print sequential codes"
140 LOCATE 15,22:PRINT "2) .......... Print a custom message"
150 LOCATE 16,22:PRINT "Q) .......... Quit barcode program"
190 LOCATE 19,22:PRINT "Please choose from the menu ÍÍ> ";
200 ANS$ = INKEY$
210 IF ANS$ = "" THEN GOTO 200
212 Q = ASC(ANS$):IF Q>96 AND Q<123 THEN Q = Q-32:ANS$=CHR$(Q)
213 IF ANS$ = "*" THEN IF LJ$ = "F" THEN LJ$ = "T" ELSE LJ$ = "F"
220 IF ANS$ = "1" THEN GOSUB 300
230 IF ANS$ = "2" THEN GOSUB 400
240 IF ANS$ = "Q" THEN GOTO 9999 'unified end of program
290 GOTO 100
300 '********** HERE IS THE SEQUENTIAL NUMBER DRIVER CODE **********
310 CLS
320 LOCATE 6,15:PRINT"ÍÍÍÍÍ SEQUENTIAL NUMBER BARCODE GENERATOR ÍÍÍÍÍ"
330 LOCATE 10,23:PRINT"Beginning barcode # ÍÍ> .............";
340 LOCATE 10,47:INPUT;"",MSG$
350 LOCATE 12,23:PRINT"Number of barcodes to print ÍÍ> ";:INPUT;"",MAX
360 LOCATE 14,23:PRINT"Left margin adjustment ÍÍ> ";:INPUT;"",K
370 LOCATE 17,23:PRINT"Make sure printer is ready,"
372 LOCATE 18,23:PRINT"then press <RETURN> to begin"
380 LOCATE 19,23:PRINT"or press <ESC> to abort... ";
381 ANS$ = INKEY$
382 IF ANS$ = "" THEN GOTO 381
383 IF ANS$ = ESC$ THEN RETURN
384 LN = 4:MSG# = VAL(MSG$) 'LINE NUMBER TO START ON
385 FOR INDEX = 1 TO MAX
386 ANS$ = INKEY$:IF ANS$ = ESC$ THEN RETURN
387 GOSUB 6000:GOSUB 500 'CONVERT NUMBER BACK TO STRING AND SEND TO PRINTER
388 MSG# = MSG# + 1
389 LN = LN + 6: IF LN > 53 THEN LN = 4 : LPRINT CHR$(12) 'PRINT EVERY 6 LINES
390 NEXT INDEX
391 LPRINT CHR$(12);:'FORM FEED
392 LPRINT CHR$(27);"E";:'RESET PRINTER
393 WIDTH "LPT1:",80
394 RETURN
399 REM
400 '********* CUSTOM MESSAGE ROUTINE FROM ORIGINAL PROGRAM *********
401 CLS
402 LOCATE 10,1:INPUT"Message [13 Characters max] OR [enter 'END' to EXIT]";MSG$
410 IF MSG$="END" THEN RETURN
411 IF MSG$="end" THEN RETURN
415 IF LEN(MSG$)>13 THEN GOTO 400
420 PRINT"Column to start printing ( 0 -";(80-LEN(MSG$)*2);")";:INPUT K
430 IF K>(80-LEN(MSG$)*2) OR K<0 THEN GOTO 420
440 INPUT"Line # to start printing (0-52) ";LN
450 IF LN<0 OR LN>52 THEN GOTO 440
490 GOSUB 500
491 LPRINT CHR$(12);:'FORM FEED
492 LPRINT CHR$(27);"E";:'RESET PRINTER
493 WIDTH "LPT1:",80
499 RETURN
500 '***** decode message into bar code
502 GOSUB 6200 'INITIALIZE VARIABLES
510 LOCATE 23,1:PRINT SPC(78);
512 LOCATE 23,20:PRINT"Now printing ==> ";
520 L=LEN(MSG$)
530 FOR X=1 TO L
540 TEST$=MID$(MSG$,X,1)
541 '***** NOW CONVERT ALL TO UPPERCASE
542 Q = ASC(TEST$):IF Q>96 AND Q<123 THEN Q = Q-32:TEST$=CHR$(Q)
545 PRINT TEST$;
546 '********** NEXT LINE FOR TESTING ON NON-LASERJETS **********
547 IF LJ$ <> "T" THEN LPRINT TEST$;
550 IF TEST$="1" THEN L$=WB$+NS$+NB$+WS$+NB$+NS$+NB$+NS$+WB$ :GOTO 990
560 IF TEST$="2" THEN L$=NB$+NS$+WB$+WS$+NB$+NS$+NB$+NS$+WB$ :GOTO 990
570 IF TEST$="3" THEN L$=WB$+NS$+WB$+WS$+NB$+NS$+NB$+NS$+NB$ :GOTO 990
580 IF TEST$="4" THEN L$=NB$+NS$+NB$+WS$+WB$+NS$+NB$+NS$+WB$ :GOTO 990
590 IF TEST$="5" THEN L$=WB$+NS$+NB$+WS$+WB$+NS$+NB$+NS$+NB$ :GOTO 990
600 IF TEST$="6" THEN L$=NB$+NS$+WB$+WS$+WB$+NS$+NB$+NS$+NB$ :GOTO 990
610 IF TEST$="7" THEN L$=NB$+NS$+NB$+WS$+NB$+NS$+WB$+NS$+WB$ :GOTO 990
620 IF TEST$="8" THEN L$=WB$+NS$+NB$+WS$+NB$+NS$+WB$+NS$+NB$ :GOTO 990
630 IF TEST$="9" THEN L$=NB$+NS$+WB$+WS$+NB$+NS$+WB$+NS$+NB$ :GOTO 990
640 IF TEST$="0" THEN L$=NB$+NS$+NB$+WS$+WB$+NS$+WB$+NS$+NB$ :GOTO 990
650 IF TEST$="A" THEN L$=WB$+NS$+NB$+NS$+NB$+WS$+NB$+NS$+WB$ :GOTO 990
660 IF TEST$="B" THEN L$=NB$+NS$+WB$+NS$+NB$+WS$+NB$+NS$+WB$ :GOTO 990
670 IF TEST$="C" THEN L$=WB$+NS$+WB$+NS$+NB$+WS$+NB$+NS$+NB$ :GOTO 990
680 IF TEST$="D" THEN L$=NB$+NS$+NB$+NS$+WB$+WS$+NB$+NS$+WB$ :GOTO 990
690 IF TEST$="E" THEN L$=WB$+NS$+NB$+NS$+WB$+WS$+NB$+NS$+NB$ :GOTO 990
700 IF TEST$="F" THEN L$=NB$+NS$+WB$+NS$+WB$+WS$+NB$+NS$+NB$ :GOTO 990
710 IF TEST$="G" THEN L$=NB$+NS$+NB$+NS$+NB$+WS$+WB$+NS$+WB$ :GOTO 990
720 IF TEST$="H" THEN L$=WB$+NS$+NB$+NS$+NB$+WS$+WB$+NS$+NB$ :GOTO 990
730 IF TEST$="I" THEN L$=NB$+NS$+WB$+NS$+NB$+WS$+WB$+NS$+NB$ :GOTO 990
740 IF TEST$="J" THEN L$=NB$+NS$+NB$+NS$+WB$+WS$+WB$+NS$+NB$ :GOTO 990
750 IF TEST$="K" THEN L$=WB$+NS$+NB$+NS$+NB$+NS$+NB$+WS$+WB$ :GOTO 990
760 IF TEST$="L" THEN L$=NB$+NS$+WB$+NS$+NB$+NS$+NB$+WS$+WB$ :GOTO 990
770 IF TEST$="M" THEN L$=WB$+NS$+WB$+NS$+NB$+NS$+NB$+WS$+NB$ :GOTO 990
780 IF TEST$="N" THEN L$=NB$+NS$+NB$+NS$+WB$+NS$+NB$+WS$+WB$ :GOTO 990
790 IF TEST$="O" THEN L$=WB$+NS$+NB$+NS$+WB$+NS$+NB$+WS$+NB$ :GOTO 990
800 IF TEST$="P" THEN L$=NB$+NS$+WB$+NS$+WB$+NS$+NB$+WS$+NB$ :GOTO 990
810 IF TEST$="Q" THEN L$=NB$+NS$+NB$+NS$+NB$+NS$+WB$+WS$+WB$ :GOTO 990
820 IF TEST$="R" THEN L$=WB$+NS$+NB$+NS$+NB$+NS$+WB$+WS$+NB$ :GOTO 990
830 IF TEST$="S" THEN L$=NB$+NS$+WB$+NS$+NB$+NS$+WB$+WS$+NB$ :GOTO 990
840 IF TEST$="T" THEN L$=NB$+NS$+NB$+NS$+WB$+NS$+WB$+WS$+NB$ :GOTO 990
850 IF TEST$="U" THEN L$=WB$+WS$+NB$+NS$+NB$+NS$+NB$+NS$+WB$ :GOTO 990
860 IF TEST$="V" THEN L$=NB$+WS$+WB$+NS$+NB$+NS$+NB$+NS$+WB$ :GOTO 990
870 IF TEST$="W" THEN L$=WB$+WS$+WB$+NS$+NB$+NS$+NB$+NS$+NB$ :GOTO 990
880 IF TEST$="X" THEN L$=NB$+WS$+NB$+NS$+WB$+NS$+NB$+NS$+WB$ :GOTO 990
890 IF TEST$="Y" THEN L$=WB$+WS$+NB$+NS$+WB$+NS$+NB$+NS$+NB$ :GOTO 990
900 IF TEST$="Z" THEN L$=NB$+WS$+WB$+NS$+WB$+NS$+NB$+NS$+NB$ :GOTO 990
910 IF TEST$="-" THEN L$=NB$+WS$+NB$+NS$+NB$+NS$+WB$+NS$+WB$ :GOTO 990
920 IF TEST$="." THEN L$=WB$+WS$+NB$+NS$+NB$+NS$+WB$+NS$+NB$ :GOTO 990
930 IF TEST$=" " THEN L$=NB$+WS$+WB$+NS$+NB$+NS$+WB$+NS$+NB$ :GOTO 990
940 IF TEST$="*" THEN L$=NB$+WS$+NB$+NS$+WB$+NS$+WB$+NS$+NB$ :GOTO 990
950 IF TEST$="$" THEN L$=NB$+WS$+NB$+WS$+NB$+WS$+NB$+NS$+NB$ :GOTO 990
960 IF TEST$="/" THEN L$=NB$+WS$+NB$+WS$+NB$+NS$+NB$+WS$+NB$ :GOTO 990
970 IF TEST$="+" THEN L$=NB$+WS$+NB$+NS$+NB$+WS$+NB$+WS$+NB$ :GOTO 990
980 IF TEST$="%" THEN L$=NB$+NS$+NB$+WS$+NB$+WS$+NB$+WS$+NB$ :GOTO 990
985 PRINT :PRINT "INVALID CHARACTER [";TEST$;"] DETECTED IN INPUT! - ABORTED -": GOTO 9999
990 L$=L$+NS$:S2$=S2$+L$:NEXT X
991 '********** NEXT LINE FOR TESTING ON NON-LASERJETS **********
992 IF LJ$ <> "T" THEN RETURN
1000 S4$=S1$+S2$+S1$
1010 S=LEN(S4$):IF INT(S/8)<>S/8 THEN S4$="0"+S4$:GOTO 1010
1020 C=S/8 :' FIND OUT HOW MANY BYTES TO SEND TO PRINTER
1030 FOR Y=0 TO C-1
1040 S5$=MID$(S4$,Y*8+1,8)
1050 GOSUB 5000
1060 B(Y+1)=D
1070 NEXT Y
2000 'SEND BYTES B(1)...B(C) TO PRINTER
2040 'WIDTH "LPT1:",255:'DISABLE CR/LF
2050 LPRINT CHR$(27);"*t100R";:'SET RESOLUTION TO 100 DPI
2060 K$="&a"+MID$(STR$(K),2,LEN(STR$(K)))+"C":LPRINT CHR$(27);K$;:'PLACE CURSOR AT COL K
2062 LN$="&a"+MID$(STR$(LN),2,LEN(STR$(LN)))+"R":LPRINT CHR$(27);LN$;:'PLACE CURSOR AT LINE LN
2064 LPRINT CHR$(27);"*r1A";:'START RASTER GRAPHIC MODE
2068 C$=MID$(STR$(C),2,LEN(STR$(C)))
2070 C$="*b"+C$+"W"
2072 FOR Y=1 TO 35:'BAR CODE HEIGHT - 35 DOTS
2074 LPRINT CHR$(27);C$;
2076 FOR X=1 TO C
2078 LPRINT CHR$(B(X));
2080 NEXT X
2082 NEXT Y
2084 LPRINT CHR$(27);"*rB";:'END RASTER GRAPHIC MODE
2188 LPRINT:LPRINT SPC(K);"*";MSG$;"*"
2999 RETURN
5000 'CONVERT BIN TO DEC SUB
5001 ' INPUT 8-BIT S5$, OUTPUT D
5005 D=0
5010 FOR X=1 TO 8
5030 D=D+VAL(MID$(S5$,X,1))*2^(8-X)
5040 NEXT X
5050 RETURN
6000 '********** CONVERT NUMBER TO STRING - PRESERVE LEFTMOST ZEROS **********
6010 COUNT = 1
6020 WHILE MID$(MSG$,COUNT,1) = "0":COUNT = COUNT + 1:WEND
6040 COUNT = COUNT - 1
6050 ZEROS$ = STRING$(COUNT,"0")
6060 MSG$=STR$(MSG#):MSG$=ZEROS$+RIGHT$(MSG$,LEN(MSG$)-1)
6099 RETURN
6200 '********** INITIALIZE VARIABLES **********
6210 S1$="":S2$="":S4$="":S5$=""
6220 NS$="0"
6230 WS$="000"
6240 NB$="1"
6250 WB$="111"
6260 S1$=NB$+WS$+NB$+NS$+WB$+NS$+WB$+NS$+NB$+NS$
6299 RETURN
9999 SYSTEM