Return to the Printing Tips
Sending a printer control character from RPG
The simplest way is by sending the control code(s) with a special prefix which in essence means "send the following byte(s) straight to
the printer with no translation to ASCII". This is the so-called "ASCII transparency" command for *SCS printers (which is what the
printer is emulating).
The prefix is simply x'03' followed by a 1-byte binary count of the byte(s) to pass thru transparently, followed by the data byte(s). So
if you needed just one byte to be sent, say x'0A' (which is Ctrl-J), then you would output x'03010A' from the RPG program.
To output two bytes, x'AABB', you would send x'0302AABB' etc.
The printer file named in the O-specs (eg QPRINT) will also need to be changed (or overridden) to not replace unprintable characters (ie
those under x'40'). Otherwise the string x'03010A' would be changed to blanks by the system before being sent to the printer.
For example: OVRPRTF QPRINT RPLUNPRT(*NO)
Verify that Ctrl-J is really the right code. In ASCII, that is the "line feed" character and is routinely used to advance to the next
print line, typically in conjunction with Ctrl-M which is the "carriage return" character. This pair of characters is sometimes
referred to as CR/LF.
Doug
FYI, Ctrl-A through Ctrl-Z are decimal 1 through Decimal 26. So, a Ctrl-M would be decimal 13 or x'0D' in hex since M is the 13th letter of the
alphabet (English alphabet anyway). If you don't know how to convert decimal to hexadecimal, now is the time to learn.
[report a broken link by clicking here]