Thread Rating:
  • 1 Vote(s) - 1 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Lprinting printer control codes?
#11
Thanks for all the input.

Those control codes I gave as examples were, I believe, PCL3 from the time I had my HPIII workhorse. They have continued to work for 25+ years on almost every laser printer I have tried, HP, Brother Lexmark, Canon, Kyocera, etc. even with many "Windows only" printers so I don't think compatibility would be an issue.

In QB64, it appears Lprint can't send chr$(27) to the printer. I have tried printing to a file and then sending the file to the printer and that has worked fine, but, since I have such a large QBasic system (as I said, thousands of Lprint lines scattered throughout) changing all my programs to go first to a file would be very unwieldy. 

Hope I can find a different workaround.

Arnold

I
Reply
#12
I very much doubt this would work. It is a statement that is on by default, but can be turned off, as shown below, and when off it allows the characters to be printed to the screen, like chr$(13), chr$(7), etc. So logically this should not make a difference in printing, as you would think it would want to be default (on) when sending chr$(27) as a printer escape code, but as a last resort, it might be worth one try. It just needs to be placed at the top of the program.

_CONTROLCHR OFF
Reply
#13
(08-04-2022, 02:34 AM)Pete Wrote: I very much doubt this would work. It is a statement that is on by default, but can be turned off, as shown below, and when off it allows the characters to be printed to the screen, like chr$(13), chr$(7), etc. So logically this should not make a difference in printing, as you would think it would want to be default (on) when sending chr$(27) as a printer escape code, but as a last resort, it might be worth one try. It just needs to be placed at the top of the program.

_CONTROLCHR OFF

You were right. I tried it and no luck.
Reply
#14
Hi Guys,

I figured out a (kludgy) workaround. I implemented it in one of my programs and it seems to work (until it doesn't.)

Before I modify all my other programs, I wanted to get your input on possible pitfalls.

At the beginning of the program I open a file, "printer.prn" for Output as file number ff%.

I changed ALL my Lprints to Print #ff%, (something I tried very hard to avoid.)
 
Every time I issue a page feed, Print #ff%, chr$(12), I call this sub:

Sub PrintTheFile
    printfile$ = "printer.prn"
    Close ff%
    Shell _Hide "copy " + printfile$ + " prn"
    Open "O", ff%, printfile$:
End Sub

I probably could have used PRINT instead of COPY. One of the downsides here is that using SHELL copy (or PRINT) sends it out LPT1 so I have to make sure LPT1 is redirected properly.

I found SUBing after each page feed gave me much more control then waiting until the entire job was in the file.

I close the file and reopen it to make sure what I already sent to the printer does not get reprinted.

Any comments would be appreciated.

A
Reply
#15
I too really miss printer control codes. I wish to drive a Laserjet using HPGL. I call HPGL output with a PCL escape code to eg draw a right angled triangle:

'****** test of hpgl
 
LPrint Chr$(27); "E"; 'printer reset
LPrint Chr$(27); "&l1O" 'landscape    0O for portrait
LPrint Chr$(27); "%0B"; 'enter hpgl using previous hpgl cursor posit
LPrint "IN"; 'initialise
LPrint "SC0,40,0,40,2;"; 'working in millimetres
LPrint "SP1PA10,10;" 'select pen1 move to 10,10
LPrint "PD;" 'pen down &
LPrint "PA50,10;"; 'draw (50,10)
LPrint "PA10,20;"; '    (10,20)
LPrint "PA10,10;"; '    (10,10)
'LPRINT CHR$(27); "%0A";    'enter pcl mode
LPrint Chr$(27); "E"; 'reset to end & print

It is not clear from this discussion if it is not possible to add control codes to QB64PE for some technical reason (but apparently CHR$(27) works?) or that it is possible but just hasn't been done?

If the latter can I ask that this is scheduled for a subsequent release please?
Reply
#16
Just open a TCP/IP connection to the printer on port 9100 and send raw printer commands.
Tread on those who tread on you

Reply
#17
Thanks for this, but as a computer novice 'just' seems rather daunting,I have no idea how to do it; in any case the whole point of QB64PE is that it replicates QB4.5.

One of the contributors above says (CHR$12) still works to eject a page - if one escape code works then why can't the others?

I repeat my question - is this because it is technically impossible or because it just hasn't been done?
Reply
#18
So a computer novice is sending raw escape sequences to printers? I'm only changing the method by which they arrive at the printer.

Also, straight from the Wiki page for LPRINT:
"Note: Printer escape codes starting with CHR$(27) will not work with LPRINT and may produce text printing errors."


It looks like the page that Kevin and I worked on is no longer on the Wiki (PE and "official") about how to communicate with a printer via TCP/IP and send pages for print. Oh well.

But I did find the post on the old forum. Code I helped Kevin make: https://qb64forum.alephc.xyz/index.php?t...#msg129378
Tweak it as you see fit. Printing via TCP/IP has worked for me quite often. I may not have been the one who discovered doing it this way (because I have no idea if I was) but I was the one making good use of it for a long, long time. Used it extensively at a previous programming job.
Tread on those who tread on you

Reply
#19
QB4.5 made it easy from within the programme and PCL and HPGL are hardly complex; Arnoldhf above had thousands of LPRINT lines using Escape codes.

With the greatest respect you still haven't answered my question - is it not implemented  because it is technically impossible or because it just hasn't been done?
Reply




Users browsing this thread: 1 Guest(s)