Skip to content

Open Lpt

Paul Squires edited this page Oct 19, 2026 · 2 revisions

Home › File I/O Functions › Open Lpt

Open Lpt

Opens a printer on a file number, so Print # and Put # send data to it.

Syntax

Open Lpt ["[LPT[x]:][Printer_Name][,TITLE=Doc_Title][,EMU=TTY]"] [For Input|Output] As #filenumber

Parameters

  • x
  • Printer_Name
  • TITLE=Doc_Title
  • EMU=TTY
  • filenumber

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.

The error code returned by Open Lpt can be checked using Err in the next line. The function version of Open Lpt returns directly the error code as a 32 bit Long.

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.

Return Value

A 32 bit Long: 0 is returned if Open Lpt() completed successfully, otherwise a non-zero value is returned to indicate failure.

Remarks

Usage

Open Lpt "LPT..." As [#]filenumber

or

result = Open Lpt( "LPT..."[,] As [#]filenumber )

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

Examples

' 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 Long, RptFileFileNum As Long

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 Long 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!"

Category: File I/O Functions
Kind: keyword


Reproduced from the FreeBASIC Wiki Manual under the GNU Free Documentation License 1.3 — with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. Copyright © the FreeBASIC project and wiki contributors. See License.

Clone this wiki locally