Open a printer device
Syntax
Open Lpt ["[LPT[x]:][Printer_Name][,TITLE=Doc_Title][,EMU=TTY]"] [For Input|Output] As #filenum
Usage
Open Lpt "LPT..." As [#]filenum
or
result = Open Lpt( "LPT..." As [#]filenum )
Parameters
x
Specifies a port number. If omitted, output is sent to the system print spooler.
Printer_Name
Name of printer to open. This parameter is ignored on DOS.
TITLE=Doc_Title
Title of the print job as seen by the printer spooler. This parameter is ignored on DOS.
EMU=TTY
Emulation of TTY output on a windows GDI printer, using driver text imaging. This parameter is ignored on DOS and Linux.
For Input|Output
clause is allowed for compatibility, but it is ignored.
filenum
An unused file number to assign to the device.
Return Value
Zero is returned if Open Lpt completed successfully, otherwise a non-zero value is returned to indicate failure.
Description
Open Lpt opens a connection to a printer device. The connection is treated like a file, so data may be written to the printer using
Print and
Put # commands.
Any printer attached to the system may be opened with
Open Lpt
Open Lpt "LPT:" ... will try to open the default printer on Windows and Linux, and "LPT1:" on DOS.
LPrint will automatically try to open the default printer on Windows and Linux, and
"LPT1:" on DOS.
Platform specific notes:
Windows
The argument EMU=TTY assumes printable ASCII or Unicode text, and applies printer driver text imaging to the input. EMU=TTY also allows the usage of CR, LF, BS, TAB, FF, etc., for virtual print-head movement...even when the printer is a GDI printer and therefore doesn't itself understand these special characters. If ",EMU=TTY" is omitted, the data must be sent in the printer's language (ESC/P, HPGL, PostScript, etc...). Other useful emulation modes aren't supported yet.
Linux
A printer spooler available through lp must be installed to access printers by name or a default printer. Spooler access was tested only with CUPS, but other spoolers may work that are invoked through lp. Port are zero based on linux. "LPT1:" corresponds with "/dev/lp0".
The data must be sent in the printer's language (ESC/P, HPGL, PostScript, etc...). Emulation modes aren't supported yet.
DOS
FreeBASIC does not support print spoolers on DOS. Printers must be accessible through "LPTx:".
The data must be sent in the printer's language (ESC/P, HPGL, PostScript, etc...). Emulation modes aren't supported yet.
Example
' Send some text to the Windows printer on LPT1:, using driver text imaging.
Open Lpt "LPT1:EMU=TTY" For Output As #1
Print #1, "Testing!"
Close
' Sends contents of text file test.txt to Windows printer named "ReceiptPrinter"
Dim RptInput As String
Dim PrintFileNum As Integer, RptFileFileNum As Integer
RptFileFileNum = FreeFile
Open "test.txt" For Input As #RptFileFileNum
PrintFileNum = FreeFile
Open Lpt "LPT:ReceiptPrinter,TITLE=ReceiptWinTitle,EMU=TTY" As _
#PrintFilenum
While (EOF(RptFileFileNum) = 0)
Line Input #RptFileFileNum, RptInput
Print #PrintFileNum, RptInput
Wend
Close #PrintFileNum ' Interestingly, does not require CHR(12). But if pagination is desired, CHR(12) is the way.
Close #RptFileFileNum
Print "Press any key to end program..."
GetKey
End
'This simple program will print a PostScript file to a PostScript compatible printer.
Dim As UByte FFI, PPO
Dim As String temp
FFI = FreeFile()
Open "sample.ps" For Input Access Read As #FFI
PPO = FreeFile()
Open Lpt "LPT1:" For Output As #PPO
While (EOF(FFI) = 0)
Line Input #FFI, temp
Print #PPO, temp
Wend
Close #FFI
Close #PPO
Print "Printing Completed!"
Dialect Differences
- In the -lang qb dialect the old syntax is supported OPEN "LPT:..." . This syntax used in the other dialects will open a regular file.
See also