Hello world/Line printer: Difference between revisions

m
m (→‎{{header|Wren}}: Minor tidy)
 
(99 intermediate revisions by 47 users not shown)
Line 1:
{{task}}
{{task}} [[Category:Hardware]] [[Category:Printer]]
[[Category:Hardware]]
[[Category:Printer]]
{{omit from|PARI/GP}}
{{omit from|ML/I|Does not have printer-related functions}}
{{omit from|SQL PL|It does not handle attached devices}} <!-- The only way is with an external procedure implemented in Java or C that directly writes in the printer. -->
 
;Task:
Cause a line printer attached to the computer to print a line containing the message <tt>Hello World!</tt>
Cause a line printer attached to the computer to print a line containing the message: &nbsp; <big><code> Hello World! </code></big>
 
 
;Note:
A line printer is not the same as standard output.
 
A &nbsp; [[wp:line printer|line printer]] &nbsp; was an older-style printer which prints one line at a time to a continuous ream of paper.
 
'''Note:''' A line printer is not the same as standard output.
A [[wp:line printer|line printer]] was an older-style printer which prints one line at a time to a continuous ream of paper.
With some systems, a line printer can be any device attached to an appropriate port (such as a parallel port).
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<syntaxhighlight lang="11l">V lp = File(‘/dev/lp0’, ‘w’)
lp.write("Hello World!\n")
lp.close()</syntaxhighlight>
 
=={{header|360 Assembly}}==
<syntaxhighlight lang="360asm">HELLO CSECT
PRINT NOGEN
BALR 12,0
USING *,12
OPEN LNPRNTR
LA 6,HW
PUT LNPRNTR
CLOSE LNPRNTR
EOJ
LNPRNTR DTFPR DEVADDR=SYSLST,IOAREA1=L1
L1 DS 0CL133
HW DC C'Hello World!'
END HELLO</syntaxhighlight>
 
=={{header|Action!}}==
<syntaxhighlight lang="action!">Proc Main()
Open(1,"P:",8,0)
PrintDE(1,"HELLO WORLD!")
Close(1)
Return
</syntaxhighlight>
 
=={{header|Ada}}==
===[[Unix]]===
Assuming that the line printer is attached to /dev/lp0
<syntaxhighlight lang="ada">
<lang Ada>
with Ada.Text_IO; use Ada.Text_IO;
 
Line 30 ⟶ 69:
Close (Printer);
end Print_Line;
</syntaxhighlight>
</lang>
 
=={{header|ALGOL 68}}==
 
This task is VERY system and hardware dependent. The code below works
with Algol 68 Genie and a Linux system without /dev/lp0 but with a
remote printer interfaced via CUPS. Extending it to other
environments is left as an exercise for the reader.
<syntaxhighlight lang="algol68">
BEGIN
STRING printer name = "/dev/lp0";
FILE line printer;
IF open (line printer, printer name, stand out channel) = 0 THEN
put (line printer, ("Hello world", newline));
close (line printer)
ELSE
put (stand error, ("Can't contact line printer on ", printer name, newline));
put (stand error, ("Trying to use lpr(1)", newline));
PIPE printer pipe = execve child pipe ("lpr", "", "");
IF pid OF printer pipe < 0 THEN
put (stand error, ("Oh dear, that didn't seem to work either. Giving up.", newline));
stop
FI;
put (write OF printer pipe, ("Hello world", newline));
close (read OF printer pipe);
close (write OF printer pipe)
FI
END
</syntaxhighlight> {{out}}
<pre>
Can't contact line printer on /dev/lp0
Trying to use lpr(1)
</pre>
 
=={{header|Applesoft BASIC}}==
Line 36 ⟶ 107:
Assumes a printer card is installed in the Apple II's number 1 expansion slot.
 
<langsyntaxhighlight lang="basic">
PR#1
PRINT "HELLO WORLD!"
</syntaxhighlight>
</lang>
 
=={{header|Arturo}}==
<syntaxhighlight lang="arturo">write "/dev/lp0" "Hello World\n"</syntaxhighlight>
 
=={{header|AutoHotkey}}==
<syntaxhighlight lang="autohotkey">
<lang AutoHotkey>
Fileappend, Hello World!, print.txt
Run, print "print.txt"
</syntaxhighlight>
</lang>
 
=={{header|AWK}}==
Unix / Linux:
<syntaxhighlight lang="awk">
<lang AWK>
BEGIN { print("Hello World!") >"/dev/lp0" }
</syntaxhighlight>
</lang>
 
=={{header|BASIC}}==
{{works with|GW-BASIC}}
 
{{works with|QBasic}}
{{works with|MSX BASIC}}
 
{{works with|ZX Spectrum Basic}}
 
{{works with|Liberty BASIC}}
<syntaxhighlight lang="qbasic">LPRINT "Hello World!"</syntaxhighlight>
 
==={{header|BaCon}}===
<lang qbasic>LPRINT "Hello World!"</lang>
Piping data to ''lp'' would also work. This example demonstrates writing to a device.
<syntaxhighlight lang="freebasic">' Hello, printer
READ msg$
DATA "Hello World!\n"
 
' Assume printer is on /dev/lp0
=={{header|Batch File}}==
OPEN "/dev/lp0" FOR DEVICE AS printer
PUTBYTE msg$ TO printer SIZE LEN(msg$)
CLOSE DEVICE printer</syntaxhighlight>
 
==={{header|BASIC256}}===
<lang dos>ECHO Hello world!>PRN</lang>
<syntaxhighlight lang="basic256">printeron
font "Arial", 20, 50
text 10,100, "Hello World!"
printeroff</syntaxhighlight>
 
==={{header|BBC BASIC}}===
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang="bbcbasic"> prn% = OPENOUT("PRN:")
PRINT #prn%, "Hello World!"
CLOSE #prn%</langsyntaxhighlight>
 
==={{header|GW-BASIC}}===
{{works with|BASICA}}
{{works with|PC-BASIC}}
{{works with|QBasic}}
<syntaxhighlight lang="qbasic">LPRINT "Hello World!"</syntaxhighlight>
 
==={{header|IS-BASIC}}===
<syntaxhighlight lang="is-basic">LPRINT "Hello World!"</syntaxhighlight>
 
==={{header|MSX Basic}}===
<syntaxhighlight lang="qbasic">LPRINT "Hello World!"</syntaxhighlight>
 
==={{header|True BASIC}}===
<syntaxhighlight lang="qbasic">OPEN #1: PRINTER !Open channel #1 for the printer
PRINT #1: "Hello World!"
END</syntaxhighlight>
 
==={{header|Yabasic}}===
<syntaxhighlight lang="yabasic">open window 100,100
open printer
text 10, 50, "Hello World!"
close printer
close window</syntaxhighlight>
 
=={{header|Batch File}}==
<syntaxhighlight lang="dos">ECHO Hello world!>PRN</syntaxhighlight>
 
=={{header|C}}==
===[[Unix]]===
Assuming that the line printer is attached to /dev/lp0
<langsyntaxhighlight Clang="c">#include <stdio.h>
 
int main()
Line 85 ⟶ 197:
fclose(lp);
return 0;
}</langsyntaxhighlight>
 
=={{header|C++ sharp}}==
<lang cpp>#include <iostream>
#include <fstream>
 
int main(){
std::ofstream lprFile;
lprFile.open( "/dev/lp0" );
lprFile << "Hello World!\n";
lprFile.close();
return 0;
}</lang>
=={{header|C#}}==
"My Printer" should be replaced with the friendly name of the printer.
This is to avoid the extra step of locating the default printer,
which is out of scope of this example.
 
<langsyntaxhighlight Clang="c sharp">
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class DOCINFOA
Line 163 ⟶ 264:
ClosePrinter(hPrinter);
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
<syntaxhighlight lang="cpp">#include <iostream>
#include <fstream>
 
int main(){
std::ofstream lprFile;
lprFile.open( "/dev/lp0" );
lprFile << "Hello World!\n";
lprFile.close();
return 0;
}</syntaxhighlight>
 
=={{header|Clipper}}==
<langsyntaxhighlight Clipperlang="clipper">SET PRINT ON
SET CONSOLE OFF
? "Hello World!"
SET PRINT OFF
SET CONSOLE ON
</syntaxhighlight>
</lang>
 
=={{header|Clojure}}==
Translated from Java (mechanically, as I don't understand how to test a line printer):
<syntaxhighlight lang="clojure">(ns rosetta-code.line-printer
(:import java.io.FileWriter))
 
(defn -main [& args]
(with-open [wr (new FileWriter "/dev/lp0")]
(.write wr "Hello, World!")))</syntaxhighlight>
 
=={{header|COBOL}}==
<langsyntaxhighlight COBOLlang="cobol">IDENTIFICATION DIVISION.
PROGRAM-ID. GOODBYE-WORLD-PRINTER.
 
Line 181 ⟶ 303:
UPON PRINTER
END-DISPLAY.
STOP RUN.</langsyntaxhighlight>
 
=={{header|Commodore BASIC}}==
Most Commodore printer peripherals operate off the IEC bus commonly as device 4 or 5. It is also possible that some printers may be connected through the RS-232 serial port (typically device 2). This example assumes a device on the IEC bus with a default setting of device 4. This example does not utilize any printer control codes to change font, pitch, quality, graphics, etc., as those can vary between brands and models of printer.
 
<syntaxhighlight lang="commodorebasicv2">
10 rem rosetta code - "Hello World" on line printer
20 open 7,4 : rem open <logical file number>, <device number>
30 print#7,"hello world!" : rem print line as shown to logical file number
40 close 7 : rem close the file number
</syntaxhighlight>
 
 
=={{header|Common Lisp}}==
Assuming that the line printer is attached to /dev/lp0
<syntaxhighlight lang="lisp">(defun main ()
(with-open-file (stream "/dev/lp0"
:direction :output
:if-exists :append)
(format stream "Hello World~%")))
(main)
</syntaxhighlight>
 
=={{header|D}}==
<langsyntaxhighlight lang="d">import std.stdio;
 
void main()
Line 191 ⟶ 334:
lp.writeln("Hello World!");
}
</syntaxhighlight>
</lang>
 
=={{header|Delphi}}==
<langsyntaxhighlight Delphilang="delphi">program Project1;
 
{$APPTYPE CONSOLE}
Line 207 ⟶ 350:
Writeln(lPrinterAsTextFile, 'Hello World!');
CloseFile(lPrinterAsTextFile);
end.</langsyntaxhighlight>
 
=={{header|Diego}}==
Once the caller has met the computer and its printer...
<syntaxhighlight lang="diego">with_computer(comp1)_printer(lp1)_text(Hello World!);</syntaxhighlight>
If the caller is the computer...
<syntaxhighlight lang="diego">with_printer(lp1)_text(Hello World!);</syntaxhighlight>
 
=={{header|Dragon}}==
<syntaxhighlight lang="dragon">
select "files"
 
f2 = fopen("E:\my.txt", "w")
f = "my data"
writeText(f2,f)
flush(f2)
fclose(f2)
</syntaxhighlight>
 
=={{header|EchoLisp}}==
EchoLisp supports a virtual printer which is not stdout. It is actually an extensible division of the HTML document, with printer pages as subdivisions. Printer and pages may be hidden/shown at convenience.
<syntaxhighlight lang="lisp">
(printer-font "Courier") ;; change printer font
(printer-page "ROSETTA CODE") ;; starts a new page with nice header
(printer-writeln "Hello World!") ;; prints new line (not seen on stdout)
</syntaxhighlight>
 
=={{header|EDSAC order code}}==
This program uses self-modifying code to loop through an array of characters. Since the EDSAC character set does not include lower-case letters or exclamation marks, we actually print <tt>HELLO WORLD</tt> followed by a carriage return and a line feed. Strings cannot be null-terminated, because 0 happens to be the character code for <tt>P</tt>; instead, we mark the final character by including a 1 (which has no printable effect) in the least significant bit.
<syntaxhighlight lang="edsac">[ Hello world
===========
 
A program for the EDSAC
 
Can be used to print any character string:
the string (including necessary *F and #F
characters) should be stored in sequential
memory addresses beginning at @+17.
 
The last character of the string should be
marked with a 1 in the least significant
bit. This can be coded by using D in place
of F, e.g. AD would be an 'A' as the last
character
 
Works with Initial Orders 2 ]
 
T56K
GK
 
[ 0 ] O17@ [ Print character ]
 
[ 1 ] H17@ [ AND character with 1: ]
C15@ [ if the result is 1, we ]
S15@ [ have reached the end ]
E13@ [ of the string ]
 
T14@ [ Modify the orders in ]
A@ [ addresses @+0 and @+1 ]
A16@ [ to point to the next ]
T@ [ character ]
A1@
A16@
T1@
E@
 
[ 13 ] ZF
 
[ 14 ] PF
[ 15 ] PD
[ 16 ] P1F [ NB Least significant bit
is not part of address,
so add 2 not 1 ]
 
[ 17 ] *F [ Letter shift ]
HF
EF
LF
LF
OF
!F [ Blank ]
WF
OF
RF
LF
DF
@F [ Carriage return ]
&D [ Line feed + 1 ]
 
EZPF</syntaxhighlight>
 
=== Alternative ===
As noted, null in the sense of zero cannot be used as a string terminator on EDSAC. However, it is possible to use the EDSAC null, whose 5-bit code is 10000. The subroutine below demonstrates this.
 
After the string characters, the terminating null is also sent to the teleprinter. This is because the teleprinter had a one-character buffer, so that an O order did not print its own character immediately, but stored it in the buffer and printed the character set up by the previous O order (Wilkes, Wheeler & Gill, 1951 edition, page 50). Sending the terminating null to the teleprinter ensures that the last character of the string is printed at the same time as the rest.
 
The EDSAC PC simulator allows .F for null and *F for letter shift, but it seems from WWG that on the original EDSAC these had to be input as K4096F and K2048F respectively.
<syntaxhighlight lang="edsac">
[Alternative "Hello World" for Rosetta Code]
 
[Subroutine to print a string.]
[Parameter: A order for first character follows subroutine call (G order).]
[Modified 2022-07-13: A order for first character was formerly passed in 0F.]
[String is terminated with EDSAC null, which is printed]
T56K GK [load at 56; set relative addressing]
A18@ U17@ [plant return link, increasing address by 3
instead of 2 as usual]
S19@ [make A order to load A order after subroutine call]
T4@ [plant in code]
[4] AF [(planted) load A order after subroutine call]
[5] T6@ [loop: plant A order for next character]
[6] AF [load next character]
UF [to 0F for printing; keep it in acc]
OF [output to teleprinter]
E12@ [if char >= 0, not EDSAC null]
A20@ [if char < 0, add 15 to test for EDSAC null]
G16@ [jump to exit if null]
[12] TF [clear acc]
A6@ A2F [inc address in A order above]
G5@ [loop back, because top 5 bits = A = 11100]
[16] TF [clear acc on exit (EDSAC convention)]
[17] ZF [(planted) jump back to caller]
[18] U3F [constant for making return link]
[19] U1F [constant for picking up parameter]
[20] K2048F [constant for testing final null]
 
[Main routine]
T96K GK [load at 96; set relative addressing
[Enter with acc = 0]
[0] A@ G56F [call print subroutine]
A4@ [A order for first character of string]
ZF [subroutine returns here; halt machine]
[4] K2048F HF EF LF LF OF !F WF OF RF LF DF @F &F K4096F
[The above string is: letter shift, 'HELLO WORLD', CR, LF, null]
EZ [define entry point]
PF [acc = 0 on entry]
[end]
</syntaxhighlight>
 
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
! Hello World in ERRE language
PROGRAM HELLO
BEGIN
!$REDIR
PRINT("Hello World !")
!$NOREDIR
END PROGRAM
</syntaxhighlight>
 
Prints on LPT1: (if exists) without opening a file.
'''Note''': !$... is a directive pragma not a part of
the language.
 
=={{header|Factor}}==
Prints through Unix "lpr" command.
 
<langsyntaxhighlight lang="factor">( scratchpad ) USE: io.encodings.utf8
( scratchpad ) USE: io.launcher
( scratchpad ) "lpr" utf8 [ "Hello World!" print ] with-process-writer</langsyntaxhighlight>
 
=={{header|Forth}}==
Forth systems currently run on everything from bare metal to modern multi-user operating systems and printers are handled differently on each. This demonstration shows a common way that text output is re-directed to printers and/or other devices by vectoring the action of the Forth word EMIT. Emit takes one character off the stack and outputs it to a device. By defining all I/O with the primitive operation EMIT, we can vector the output anywhere we choose, even on hardware with no O/S. Here we show a very basic printer device driver for an embedded system that adds I/O re-direction to the system's Forth language.
<syntaxhighlight lang="forth">\ No operating system, embedded device, printer output example
 
defer emit \ deferred words in Forth are a place holder for an
\ execution token (XT) that is assigned later.
\ When executed the deferred word simply runs that assigned routine
 
: type ( addr count -- ) \ type a string uses emit
bounds ?do i c@ emit loop ; \ type is used by all other text output words in the system
 
HEX
: CR ( -- ) 0A emit 0D emit ; \ send a carriage return, linefeed pair with emit
 
\ memory mapped I/O addresses for the printer port
B02E constant scsr \ serial control status register
B02F constant scdr \ serial control data register
 
: printer-emit ( char -- ) \ output 'char' to the printer serial port
begin scsr C@ 80 and until \ loop until the port shows a ready bit
scdr C! \ C! (char store) writes a byte to an address
20 ms ; \ 32 mS delay to prevent over-runs
 
: console-emit ( char -- ) ... \ defined in the Forth system, usually assembler
 
\ vector control words
: >console ['] console-emit is EMIT ; \ assign the execution token of console-emit to EMIT
: >printer ['] printer-emit is EMIT ; \ assign the execution token of printer-emit to EMIT</syntaxhighlight>
 
Usage Examples:
<pre>
S" Hello Console World!" TYPE CR \ default output goes to console
S" Hello Printer World!" >PRINTER TYPE CR \ re-direct to printer
>CONSOLE \ return output to console
</pre>
 
=={{header|Fortran}}==
Fortran I/O statements refer to logical unit numbers to select the file. The device associated with a unit number depends on the computer installation, and can also be arranged via instructions to the operating system. A value such as 6 is often the default for the lineprinter on mainframe systems but on PCs it might be for the computer screen. Thus the "6". The "1" is the label number of the FORMAT statement.
 
Output to the lineprinter has a "carriage control character" as the first output position, thus a lineprinter capable of 120 characters to a line would be fed up to 12'''1''' characters of output, the first printing position (column one on the lineprinter output) would receive the ''second'' character of the output, and so on. This could cause surprises. A <code>FORMAT (I6,etc)</code> rather than <code>FORMAT(1X,I5,etc)</code> used to print a five-digit integer at the start of a line (with the leading space being supplied by the first of the six supplied by I6) works well and saves a little on the complexity of the format statement, but if the integer's value were to exceed 99999, say be 100000, the first character is no longer a space but a one, and so the output will suddenly be one line to a page...
 
The protocol was to act on the carriage control, then print the line. The character code interpretations were
+ No movement - thus overprint.
(a blank) Advance one line.
0 Advance two lines - thus leave a blank line.
1 Page throw.
The page-throw was actually a "skip to control column 1"; that is, the lineprinter has an associated paper tape in a loop with holes punched in certain columns of the tape and the tape would be advanced one position for each line advance. The length of the loop matches the number of lines to a page of printout, or was twice that number, etc. A hole in column one of the loop would be aligned (by the human operator during setup) with the top-of-form paper position and when a carriage control of "1" was acted on, the lineprinter would skip forwards until the "1" hole was detected. A carriage control character of "2" would thus skip onwards until a hole in column two was detected - and if there was no such hole, the skip wouldn't stop until the human operator noticed. Thus, many control tapes had all columns punched across, not just one. However, this ability was more properly used in producing vast outputs with subsections to a page suitably marked by suitable holes. The benefit was firstly that the printer skipped to a hole mark more rapidly than via a sequence of "advance one" or "advance two" commands, and secondly, the program did not need to generate such sequences nor have then saved via output spooling. But all relied on the right output being matched to the right tape. This was more typical at COBOL installations.
 
It is because of the first character disappearing as carriage control that the "list" style output (as in <code>WRITE (6,*) "Hello World!"</code>) always starts a line of output with a space. This form does not require a FORMAT statement.
 
Since for a new job, output would commence with the lineprinter already at the top of a new page, an overprint (no carriage advance) thus means writing to the very first line. If however, top-of-page placement was not assured at your installation, then "1HELLO WORLD!" would do.
<syntaxhighlight lang="fortran"> WRITE (6,1)
1 FORMAT ("+HELLO WORLD!")
END </syntaxhighlight>
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
Open Lpt "Lpt:" As #1 '' prints to default printer
Print #1, "Hello World!"
Close #1</syntaxhighlight>
 
=={{header|FutureBasic}}==
The legacy lprint statemenet sends a line of text to the printer. The @(col,row) and %(h,v) options specify where on the page the line should be printed (see the print statement); if you don't specify one of these, the line is printed at the current pen position, usually just under the previously-printed line. lprint is inefficient if you are printing many lines to a page because it reroutes the output each time lprint is executed. In such cases, it's better to execute a sequence of print statements, with the entire sequence preceded by a single route _toPrinter statement and followed by a single route _toScreen statement. FB progammers today use much more sophisticated printer functions designed for complex pagination.
<syntaxhighlight lang="futurebasic">
// lprint [@(col,row)|%(h,v)] "Hello,World!"
lprint "Hello,World!"
route _toScreen
close lprint
</syntaxhighlight>
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 234 ⟶ 600:
 
fmt.Fprintln(lp0, "Hello World!")
}</langsyntaxhighlight>
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">new File('/dev/lp0').write('Hello World!\n')
</syntaxhighlight>
</lang>
 
=={{header|GUISS}}==
 
<langsyntaxhighlight lang="guiss">Start,Programs,Accessories,Notepad,Type:Goodbye World[pling],
Menu:File,Print,Button:OK</langsyntaxhighlight>
 
=={{header|Harbour}}==
<langsyntaxhighlight lang="visualfoxpro">SET PRINT ON
SET CONSOLE OFF
? "Hello World!"
SET PRINT OFF
SET CONSOLE ON</langsyntaxhighlight>
 
=={{header|Haskell}}==
<syntaxhighlight lang="haskell">import System.Process (ProcessHandle, runCommand)
 
main :: IO ProcessHandle
<lang haskell>
main = runCommand "echo \"Hello World!\" | lpr"</syntaxhighlight>
import System.Cmd
 
cmd = "echo \"Hello World!\" | lpr"
 
main = system cmd
</lang>
 
=={{header|Icon}} and {{header|Unicon}}==
Line 266 ⟶ 628:
Works in both languages, provided printer is attached to <tt>/dev/lp0</tt>.
 
<langsyntaxhighlight lang="unicon">procedure main()
write(open("/dev/lp0","w"),"Hello, world!")
end</langsyntaxhighlight>
 
=={{header|Integer BASIC}}==
Line 276 ⟶ 638:
=={{header|J}}==
 
<langsyntaxhighlight lang="j">require'print'
print'Hello world!'</langsyntaxhighlight>
 
=={{header|Java}}==
 
<langsyntaxhighlight lang="java">import java.io.FileWriter;
import java.io.IOException;
Line 294 ⟶ 656:
}
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
{{works with|Node.js}}
<langsyntaxhighlight lang="javascript">// This example runs on Node.js
var fs = require('fs');
// Assuming lp is at /dev/lp0
var lp = fs.openSync('/dev/lp0', 'w');
fs.writeSync(lp, 'Hello, world!\n');
fs.close(lp);</langsyntaxhighlight>
{{works with|Firefox}}
{{works with|Chromium}}
<langsyntaxhighlight lang="javascript">
document.write("Hello World!");
print(); //Opens a dialog.
</syntaxhighlight>
</lang>
 
=={{header|Joy}}==
<syntaxhighlight lang="joy">"/dev/lp" "w" fopen "Hello World!\n" fputchars fclose.</syntaxhighlight>
 
=={{header|Julia}}==
<syntaxhighlight lang="julia">
lineprinter = Sys.iswindows() ? "LPT3" : "/dev/lp0"
lp = open(lineprinter, "w")
write(lp, "Hello world")
</syntaxhighlight>
 
=={{header|Kotlin}}==
{{Works with|Ubuntu|14.04}}
<syntaxhighlight lang="scala">import java.io.File
 
fun main(args: Array<String>) {
val text = "Hello World!\n"
File("/dev/lp0").writeText(text)
}</syntaxhighlight>
 
=={{header|Lasso}}==
 
<langsyntaxhighlight lang="lasso">File_Write: '/dev/lp0', 'Hello world', -FileOverWrite;</langsyntaxhighlight>
 
=={{header|Locomotive Basic}}==
 
<langsyntaxhighlight lang="locobasic">10 PRINT #8, "Hello World!"</langsyntaxhighlight>
 
=={{header|M2000 Interpreter}}==
We can use printer like a page printer
<syntaxhighlight lang="m2000 interpreter">
Printer {
\\ just change the current layer to Print Page
\\ Using Layer { } we can change to basic console layer inside any layer
Print "Hello World!"
}
</syntaxhighlight>
 
Or we can use ANSI output using a file for export in Lpt1
 
<syntaxhighlight lang="m2000 interpreter">
Try ok {
Open "Lpt1" For OutPut As N '' prints to Lpt1 if exist a printer
Print #N, "Hello World!"
Close #N
}
If Not Ok Then Print "Can't Print"
</syntaxhighlight>
 
If we have a file in current dir we can use a Dos command:
<syntaxhighlight lang="m2000 interpreter">
Dos "Print /d:lpt1 file " +quote$(dir$+"this.txt");
</syntaxhighlight>
Using ; at the end of DOS command we have no open terminal
 
<syntaxhighlight lang="m2000 interpreter">
Dos "command" [, sleep time after call] [;]
</syntaxhighlight>
 
=={{header|Maple}}==
<syntaxhighlight lang="maple">lprint("Hello World!")</syntaxhighlight>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">commandstring = "echo Hello World! | lpr -P Printer01"
Run[commandstring]</langsyntaxhighlight>
 
=={{header|MATLAB}} / {{header|Octave}}==
===[[Unix]]===
Assuming that the line printer is attached to /dev/lp0
<langsyntaxhighlight Matlablang="matlab"> fid = fopen('/dev/lp0');
fprintf(fid,'Hello World!\n');
fclose(fid);</langsyntaxhighlight>
 
=={{header|Nimrod}}==
Assuming that the line printer is attached to /dev/lp0:
<lang nimrod>var lp = open("/dev/lp0", fmWrite)
lp.writeln "Hello World"
lp.close()</lang>
 
=={{header|MIXAL}}==
<syntaxhighlight lang="mixal">
<lang MIXAL>
LPR EQU 18
STRING EQU 2000
Line 349 ⟶ 758:
ALF D!
END START
</syntaxhighlight>
</lang>
 
=={{header|N/t/roff}}==
 
/.ROFF/, being a document formatting language, is especially suited for formatting documents and sending them to printers of nearly all types. In fact, /.ROFF/ has been used to print documents on line printers.
To send the output to the line printer, you must compile the source file with the following command on the shell, assuming the source file is <code>file.roff</code> and that the line printer is already setup properly.
 
<code>
nroff -Tlpr file.roff
</code>
 
In this case, you must use NROFF, not TROFF, to compile the source file, as NROFF is better-suited for monospaced, typewriter-style line formatting.
 
Because /.ROFF/ is a document formatting language, the majority of lines in a typical /.ROFF/ source file is to be textual input. This input is typeset directly onto the output medium. Therefore, the user need not call a procedure to print text to any terminal.
 
<syntaxhighlight lang="n/t/roff">
Hello World!
</syntaxhighlight>
 
=={{header|Nim}}==
Assuming that the line printer is attached to /dev/lp0:
<syntaxhighlight lang="nim">var lp = open("/dev/lp0", fmWrite)
lp.writeLine "Hello World"
lp.close()</syntaxhighlight>
 
=={{header|OCaml}}==
Assuming that the line printer is attached to /dev/lp0
<langsyntaxhighlight lang="ocaml">let () =
let oc = open_out "/dev/lp0" in
output_string oc "Hello world!\n";
close_out oc ;;</langsyntaxhighlight>
 
=={{header|Oforth}}==
<syntaxhighlight lang="oforth">File new("/dev/lp0") dup open(File.WRITE) "Hello world\n" << close</syntaxhighlight>
 
=={{header|Ol}}==
<syntaxhighlight lang="scheme">
(define p (open-output-file "/dev/lp0"))
(when p
(print-to p "Hello world!")
(close-port p))
</syntaxhighlight>
 
=={{header|OpenEdge/Progress}}==
<langsyntaxhighlight lang="progress">OUTPUT TO PRINTER.
PUT UNFORMATTED "Hello world!" SKIP.
OUTPUT CLOSE.</langsyntaxhighlight>
 
=={{header|Pascal}}==
Line 367 ⟶ 810:
{{libheader|Printer}}
Example from the FreePascal documentation:
<langsyntaxhighlight lang="pascal">program testprn;
uses printer;
var i: integer;
Line 387 ⟶ 830:
writeln ( 'Done.' )
{$endif}
end.</langsyntaxhighlight>
 
=={{header|Perl}}==
Assuming that the line printer is attached to /dev/lp0
<langsyntaxhighlight lang="perl">open O, ">", "/dev/lp0";
print O "Hello World!\n";
close O;</langsyntaxhighlight>
 
=={{header|Perl 6Phix}}==
If you have not got something appropriate attached, this will just hang. Other values you can try, on windows: "AUX", "COM1", "COM2", "LPT1"
<lang perl6>given open '/dev/lp0', :w { # Open the device for writing as the default
<!--<syntaxhighlight lang="phix">-->
.say('Hello World!'); # Send it the string
<span style="color: #004080;">integer</span> <span style="color: #000000;">fn</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">open</span><span style="color: #0000FF;">(</span><span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #000000;">WIN32</span><span style="color: #0000FF;">?</span><span style="color: #008000;">"PRN"</span><span style="color: #0000FF;">:</span><span style="color: #008000;">"/dev/lp0"</span><span style="color: #0000FF;">),</span><span style="color: #008000;">"w"</span><span style="color: #0000FF;">)</span>
.close;
<span style="color: #008080;">if</span> <span style="color: #000000;">fn</span><span style="color: #0000FF;">=-</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
# ^ The prefix "." says "use the default device here"
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"some error"</span><span style="color: #0000FF;">)</span>
}</lang>
<span style="color: #008080;">else</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Hello World!"</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">close</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fn</span><span style="color: #0000FF;">)</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"success!"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
<!--</syntaxhighlight>-->
 
=={{header|PHP}}==
<langsyntaxhighlight PHPlang="php"><?php
file_put_contents('/dev/lp0', 'Hello world!');
?></langsyntaxhighlight>
 
<langsyntaxhighlight PHPlang="php"><?php
fclose(STDOUT);
$STDOUT = fopen('/dev/lp0', 'a');
echo 'Hello world!';
?></langsyntaxhighlight>
 
=={{header|Picat}}==
{{works with|Picat}}
<syntaxhighlight lang="picat">
main =>
Printer = open("/dev/lp0", write),
println(Printer, "Hello, world!"),
flush(Printer),
close(Printer).
</syntaxhighlight>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(out '(lpr "-P" "Printer01")
(prinl "Hello world") )</langsyntaxhighlight>
 
=={{header|PL/I}}==
<langsyntaxhighlight lang="pli">
hello: procedure options(main);
put skip list('Hello world.');
end hello;</langsyntaxhighlight>
 
=={{header|PostScript}}==
Technically not really correct, as this has to be sent to the printer directly.
It will output Hello world, then, though.
<langsyntaxhighlight lang="postscript"><</PageSize [595 842]>> setpagedevice % set page size to DIN A4
/Courier findfont % use Courier
12 scalefont setfont % 12 pt
28 802 moveto % 1 cm from the top and left edges
(Hello world) show % draw the string</langsyntaxhighlight>
 
=={{header|Prolog}}==
{{works with|SWI Prolog}}
<syntaxhighlight lang="prolog">
:- initialization(main).
 
main :-
open("/dev/lp0", write, Printer),
writeln(Printer, "Hello, world!"),
flush_output(Printer),
close(Printer).
</syntaxhighlight>
 
=={{header|PureBasic}}==
{{libheader|PureLPRINT}}
<langsyntaxhighlight PureBasiclang="purebasic">MyPrinter$ = LPRINT_GetDefaultPrinter()
If LPRINT_OpenPrinter(MyPrinter$)
If LPRINT_StartDoc("Printing a RC-Task")
Line 443 ⟶ 915:
EndIf
LPRINT_ClosePrinter()
EndIf</langsyntaxhighlight>
 
=={{header|Python}}==
Assuming that the line printer is attached to /dev/lp0:
<langsyntaxhighlight lang="python">lp = open("/dev/lp0")
lp.write("Hello World!\n")
lp.close()</langsyntaxhighlight>
 
If the above code gives you the error "IOError: File not open for writing", try:
<langsyntaxhighlight lang="python">lp = open("/dev/lp0","w")
lp.write("Hello World!\n")
lp.close()</langsyntaxhighlight>
 
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">
#lang racket
(define (print text)
Line 470 ⟶ 942:
(λ() (displayln text)))))
(print "Hello World!")
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
 
<syntaxhighlight lang="raku" line>my $lp = open '/dev/lp0', :w;
$lp.say: 'Hello World!';
$lp.close;</syntaxhighlight>
 
Or using <code>given</code> to avoid having to write the variable name repeatedly:
 
<syntaxhighlight lang="raku" line>given open '/dev/lp0', :w {
.say: 'Hello World!';
.close;
}</syntaxhighlight>
 
=={{header|REXX}}==
Line 476 ⟶ 962:
but a shell command could be used.
<br><br>In DOS (or under Windows):
<syntaxhighlight lang="rexx">/*REXX program prints a string to the (DOS) line printer via redirection to a printer.*/
<lang rexx>str='Hello World'
$= 'Hello World!' /*define a string to be used for output*/
'@ECHO' str ">PRN"</lang>
'@ECHO' $ ">PRN" /*stick a fork in it, we're all done. */</syntaxhighlight>
 
=={{header|Ring}}==
<syntaxhighlight lang="ring">
lp = fopen("/dev/lp0","w") fputs(lp,"Hello world!") fclose(lp)
</syntaxhighlight>
 
=={{header|RPG}}==
{{works with|ILE RPG}}
<syntaxhighlight lang="rpg">
<lang RPG>
Fqsysprt O F 80 printer
C except
Line 487 ⟶ 979:
Oqsysprt E
O 11 'Hello world'
</syntaxhighlight>
</lang>
 
=={{header|RPL}}==
"Hello world!" PR1
 
=={{header|Ruby}}==
Assumes that <code>lpr</code> command reaches printer.
 
<langsyntaxhighlight lang="ruby">open("| lpr", "w") { |f| f.puts "Hello World!" }</langsyntaxhighlight>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic"> shell$("echo \"Hello World!\" | lpr")</langsyntaxhighlight>
 
=={{header|Rust}}==
===Unix===
<syntaxhighlight lang="rust">use std::fs::OpenOptions;
use std::io::Write;
 
fn main() {
let file = OpenOptions::new().write(true).open("/dev/lp0").unwrap();
file.write(b"Hello, World!").unwrap();
}</syntaxhighlight>
 
=={{header|Salmon}}==
Assuming /dev/lp0 accesses the printer:
 
<langsyntaxhighlight Salmonlang="salmon">open_output_text_file("/dev/lp0").print("Hello World!");</langsyntaxhighlight>
 
Assuming lpr is a command that prints to a printer:
<langsyntaxhighlight Salmonlang="salmon">`echo "Hello World!" | lpr`;</langsyntaxhighlight>
 
=={{header|Scala}}==
{{libheader|Scala}}
===All platforms===
<langsyntaxhighlight lang="scala">import java.awt.print.PrinterException
import scala.swing.TextArea
 
Line 522 ⟶ 1,027:
}
println("Document printed.")
}</langsyntaxhighlight>
 
===[[Unix]]===
Assuming device is attached to lp0
<langsyntaxhighlight Scalalang="scala">object LinePrinter extends App {
import java.io.{ FileWriter, IOException }
{
Line 533 ⟶ 1,038:
lp0.close()
}
}</langsyntaxhighlight>
 
=={{header|Scheme}}==
===[[Unix]]===
Assuming device is attached to lp0
<langsyntaxhighlight lang="scheme">(call-with-output-file "/dev/lp0"
  (lambda (printer)
    (write "Hello World!" printer)))</langsyntaxhighlight>
 
=={{header|Seed7}}==
Assuming that the line printer is attached to /dev/lp0:
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
const proc: main is func
Line 553 ⟶ 1,058:
writeln(lp, "Hello world!");
close(lp);
end func;</langsyntaxhighlight>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">Sys.open(\var fh, '>', '/dev/lp0') \
&& fh.printlnsay("Hello World!") \
&& fh.close;</langsyntaxhighlight>
 
=={{header|Simula}}==
{{works with|SIMULA-67}}
<langsyntaxhighlight lang="simula">BEGIN
OUTTEXT("Hello World!");
OUTIMAGE
END</langsyntaxhighlight>
 
=={{header|Slope}}==
<syntaxhighlight>(file-append-to "/dev/lp0" "Hello world!")</syntaxhighlight>
 
=={{header|Smalltalk}}==
{{works with|Smalltalk/X}}
portable (dispatches to one of bellow):
<syntaxhighlight lang="smalltalk">s := PrinterStream defaultPrinter new.
s nextPutLine:'Hello, world'.
s close</syntaxhighlight>
===[[Unix]]===
<syntaxhighlight lang="smalltalk">s := PipeStream writingTo:'lpr'.
s nextPutLine:'Hello, world'.
s close.</syntaxhighlight>
alternative:
<syntaxhighlight lang="smalltalk">'/dev/lp0' asFilename writingFileDo:[:s |
s nextPutLine:'Hello, world'.
]</syntaxhighlight>
===[[Windows]]===
<syntaxhighlight lang="smalltalk">s := WinPrinterStream new.
s nextPutLine:'Hello, world'.
s close.</syntaxhighlight>
 
=={{header|SNOBOL4}}==
Line 573 ⟶ 1,100:
By default, the variable "input" is associated with standard input, and the variable "output" is associated with standard output.
 
<langsyntaxhighlight SNOBOL4lang="snobol4"> output = "Hello, world."</langsyntaxhighlight>
 
You can associate the variable "print" with lpt1 (the default local printer port) using the output() function:
 
<langsyntaxhighlight SNOBOL4lang="snobol4"> output(.print,25,"lpt1")
print = "Hello, world."</langsyntaxhighlight>
 
=={{header|Swift}}==
<syntaxhighlight lang="swift">import Foundation
 
let out = NSOutputStream(toFileAtPath: "/dev/lp0", append: true)
let data = "Hello, World!".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
out?.open()
out?.write(UnsafePointer<UInt8>(data!.bytes), maxLength: data!.length)
out?.close()</syntaxhighlight>
 
=={{header|Tcl}}==
 
===[[Unix]]===
<langsyntaxhighlight lang="tcl">exec lp << "Hello World!"</langsyntaxhighlight>
<langsyntaxhighlight lang="tcl">set f [open |lp w]
puts $f "Hello World!"
close $f</langsyntaxhighlight>
 
===[[Windows]]===
 
<langsyntaxhighlight lang="tcl">set f [open prn w]
puts $f "Hello World!"
close $f</langsyntaxhighlight>
 
=={{header|UNIX Shell}}==
Use ''one'' of the following lines.
 
<langsyntaxhighlight lang="bash"># Use the default printer queue, with lp(1) or lpr(1).
# 1. The system must have a printer queue.
# 2. The printer queue must understand plain text.
Line 617 ⟶ 1,153:
echo 'Hello World!' >/dev/lp0
echo 'Hello World!' >/dev/lpt0
echo 'Hello World!' >/dev/ulpt0</langsyntaxhighlight>
 
=={{header|Wisp}}==
===[[Unix]]===
Assuming that the device is attached to lp0
<syntaxhighlight lang="wisp">call-with-output-file "/dev/lp0"
λ : printer
write "Hello World!" printer</syntaxhighlight>
 
=={{header|Wren}}==
It is not currently possible to communicate with the printer using Wren-cli. So we need to write a minimal embedded program (no error checking) so the C host can do this for us.
<syntaxhighlight lang="wren">/* Hello_world_Line_printer.wren */
 
class C {
foreign static lprint(s)
}
 
C.lprint("Hello World!")</syntaxhighlight>
<br>
We now embed this in the following C program, compile and run it.
<syntaxhighlight lang="c">/* gcc Hello_world_Line_printer.c -o Hello_world_Line_printer -lwren -lm */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "wren.h"
 
/* C <=> Wren interface functions */
 
void C_lprint(WrenVM* vm) {
const char *arg = wrenGetSlotString(vm, 1);
char command[strlen(arg) + 13];
strcpy(command, "echo \"");
strcat(command, arg);
strcat(command, "\" | lp");
system(command);
}
 
WrenForeignMethodFn bindForeignMethod(
WrenVM* vm,
const char* module,
const char* className,
bool isStatic,
const char* signature) {
if (strcmp(module, "main") == 0) {
if (strcmp(className, "C") == 0) {
if (isStatic && strcmp(signature, "lprint(_)") == 0) return C_lprint;
}
}
return NULL;
}
 
static void writeFn(WrenVM* vm, const char* text) {
printf("%s", text);
}
 
char *readFile(const char *fileName) {
FILE *f = fopen(fileName, "r");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
rewind(f);
char *script = malloc(fsize + 1);
fread(script, 1, fsize, f);
fclose(f);
script[fsize] = 0;
return script;
}
 
int main(int argc, char **argv) {
WrenConfiguration config;
wrenInitConfiguration(&config);
config.writeFn = &writeFn;
config.bindForeignMethodFn = &bindForeignMethod;
WrenVM* vm = wrenNewVM(&config);
const char* module = "main";
const char* fileName = "Hello_world_Line_printer.wren";
char *script = readFile(fileName);
WrenInterpretResult result = wrenInterpret(vm, module, script);
wrenFreeVM(vm);
free(script);
return 0;
}</syntaxhighlight>
 
=={{header|X86 Assembly}}==
<syntaxhighlight lang="asm">;Assemble with: tasm, tlink /t
;assume direction bit is clear (so si increments)
.model tiny
.code
org 100h
start: mov si, offset msg ;point to message
jmp pr20
 
pr10: mov ah, 0 ;write character to printer
mov dx, 0 ;LPT1
int 17h
pr20: lodsb ;al, ds:[si++]
cmp al, 0 ;terminator?
jne pr10 ;loop if not
ret ;return to OS
 
msg db "Hello World!", 0ch, 0 ;0ch = form feed (for laser printer)
end start</syntaxhighlight>
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code Text=12;
Text(2, "Hello World!
");</langsyntaxhighlight>
 
The 2 directs the output to the printer (LPT1).
9,482

edits