Hello world/Line printer

Revision as of 02:46, 7 July 2011 by rosettacode>TimToady (→‎{{header|Perl}}: use 3-arg form, also add Perl 6 entry)

Cause a line printer attached to the computer to print a line containing the message Hello World!

Task
Hello world/Line printer
You are encouraged to solve this task according to the task description, using any language you may know.

Note: A line printer is not the same as standard output. A 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).

Ada

Unix

Assuming that the line printer is attached to /dev/lp0 <lang Ada> with Ada.Text_IO; use Ada.Text_IO;

procedure Print_Line is

  Printer : File_Type;

begin

  begin
     Open (Printer, Mode => Out_File, Name => "/dev/lp0");
  exception
     when others =>
        Put_Line ("Unable to open printer.");
        return;
  end;
  Set_Output (Printer);
  Put_Line ("Hello World!");
  Close (Printer);

end Print_Line; </lang>

Applesoft BASIC

Assumes a printer card is installed in the Apple II's number 1 expansion slot.

<lang basic> PR#1 PRINT "HELLO WORLD!" </lang>

AutoHotkey

<lang AutoHotkey> Fileappend, Hallo World!, print.txt Run, print "print.txt" </lang>

AWK

<lang AWK> BEGIN { print("Hello World!") >"/dev/lp0" } </lang>

BASIC

Works with: QBasic
Works with: ZX Spectrum Basic
Works with: Liberty BASIC

<lang qbasic>LPRINT "Hello World!"</lang>

Batch File

<lang dos>ECHO Hello world!>PRN</lang>

BBC BASIC

<lang bbcbasic> prn% = OPENOUT("PRN:")

     PRINT #prn%, "Hello World!"
     CLOSE #prn%</lang>

C

Unix

Assuming that the line printer is attached to /dev/lp0 <lang C>#include <stdio.h>

int main() {

  FILE *lp;
  lp = fopen("/dev/lp0","w");
  fprintf(lp,"Hello world!\n");
  fclose(lp);
  return 0;

}</lang>

C++

This example is incorrect. Please fix the code and remove this message.

Details: Outputs to stdout

<lang cpp>#include <iostream>

int main() {

   std::cout << "Hello world!" << std::endl; // std::endl provides a portable descriptor for line ending.
   return 0;

}</lang>


Delphi

<lang Delphi>program Project1;

{$APPTYPE CONSOLE}

uses Printers;

var

 lPrinterAsTextFile: TextFile;

begin

 AssignPrn(lPrinterAsTextFile);
 Rewrite(lPrinterAsTextFile);
 Writeln(lPrinterAsTextFile, 'Hello World!');
 CloseFile(lPrinterAsTextFile);

end.</lang>

Factor

This example is incorrect. Please fix the code and remove this message.

Details: Outputs to stdout, not a line printer.

<lang factor> USE: io IN: hello-world

hello ( -- ) "Hello World!" print ;

MAIN: hello</lang>

when you want a fully working program or in the listener:

<lang factor>"Hello World!" print</lang>

Haskell

<lang haskell> import System.Cmd

cmd = "echo \"Hello World!\" | lpr"

main = system cmd </lang>

Integer BASIC

See Applesoft BASIC.

J

<lang j>require'print' print'Hello world!'</lang>

OCaml

Assuming that the line printer is attached to /dev/lp0 <lang ocaml>let () =

 let oc = open_out "/dev/lp0" in
 output_string oc "Hello world!\n";
 close_out oc ;;</lang>

Perl

Assuming that the line printer is attached to /dev/lp0 <lang perl>open O, ">", "/dev/lp0"; print O "Hello World!\n"; close O;</lang>

Perl 6

<lang perl6>given open '>', '/dev/lp0' {

   .say('Hello, World!');
   .close;

}</lang>

PHP

This example is incorrect. Please fix the code and remove this message.

Details: Outputs to stdout

<lang PHP><?php echo 'Hello world!'; ?></lang>

PicoLisp

<lang PicoLisp>(out '(lpr "-P" "Printer01")

  (prinl "Hello world") )</lang>

PL/I

<lang PL/I> hello: procedure options (main);

  put ('Hello world.');

end hello; </lang>

PostScript

Technically not really correct as this has to be sent to the printer directly. It will output Hello world, then, though. <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</lang>

PureBasic

Library: PureLPRINT

<lang PureBasic>MyPrinter$ = LPRINT_GetDefaultPrinter() If LPRINT_OpenPrinter(MyPrinter$)

 If LPRINT_StartDoc("Printing a RC-Task")
   LPRINT_Print(Chr(27) + "E") ; PCL reset for HP Printers
   LPRINT_PrintN("Hello World!")
   LPRINT_NewPage()
   LPRINT_EndDoc()
 EndIf
 LPRINT_ClosePrinter()  

EndIf</lang>

Python

Assuming that the line printer is attached to /dev/lp0 <lang python>lp = open("/dev/lp0") lp.write("Hello World!/n") lp.close()</lang>

REXX

There is no direct way for REXX programs to write to the printer, but
a shell command could be used.

In DOS (or under Windows): <lang rexx> str='Hello World' '@ECHO' str ">PRN" </lang>

Ruby

Assumes that lpr command reaches printer.

<lang ruby>open("| lpr", "w") { |f| f.puts "Hello World!" }</lang>

Tcl

Unix

<lang tcl>exec lp << "Hello World!"</lang> <lang tcl>set f [open |lp w] puts $f "Hello World!" close $f</lang>

Windows

<lang tcl>set f [open prn w] puts $f "Hello World!" close $f</lang>

UNIX Shell

Use one of the following lines.

<lang bash># Use the default printer queue, with lp(1) or lpr(1).

  1. 1. The system must have a printer queue.
  2. 2. The printer queue must understand plain text.
  3. 3. System V has lp(1). BSD has lpr(1).
  4. CUPS has both lp(1) and lpr(1).

echo 'Hello World!' | lp echo 'Hello World!' | lpr

  1. Use a character device.
  2. 1. The device must understand plain text.
  3. 2. You must have write permission for the device.
  4. 3. Some systems have /dev/lp0, /dev/lp1, ...
  5. 4. BSD has /dev/lpt0, /dev/lpt1, ... for the parallel ports;
  6. and /dev/ulpt0, /dev/ulpt1, ... for the USB printers.
  7. Note that intermingling can occur if two processes write to the device at the
  8. same time. Using the print spooler method above avoids this problem,

echo 'Hello World!' >/dev/lp0 echo 'Hello World!' >/dev/lpt0 echo 'Hello World!' >/dev/ulpt0</lang>