#!/usr/bin/perl -w

#
# dymo-address - print on "DYMO 30252" address labels via PostScript laser printer
#
#	VERS	DATE       AUTHOR		COMMENTS
#	1.00	07/13/1996 erco@netcom.com	Initial implementation for avery labels
#	1.10	12/04/2010 erco@3dsite.com	Modified for Dymo 450 printer with 30252 labels
#
# How to use:
#     dymo-address "Some Name" "Main St. Apt 7" "Anytown, CA 91000" | lp -d "LabelWriter_450" -
#     -or-
#     perl -e 'print "Some Name\nMain St. Apt 7\nAnytown, CA 91000\n"' | dymo-address | lp -d LabelWriter_450 -
#

# Handle escaping parens, which are special chars in PostScript
sub PostscriptEscape($) {
    my $s = $_[0];
    $s =~ s/\(/\\\(/g;
    $s =~ s/\)/\\\)/g;
    return($s);
}

# MAIN
{
    my $x = .8;
    my $y = -.1;

    my @lines;
    if ( $#ARGV < 0 ) {
        print STDERR "Enter string for label (6 lines max, hit ^D when done):\n";
        @lines = <STDIN>;
    } else {
        @lines = @ARGV;
    }

    # PostScript header
    print <<"EOF";
%!PS-Adobe-1.0
%%DocumentFonts: Courier-Bold
%%Title: Dymo 450 Label
%%Creator: Erco's Dymo 450 Label printer for 30252 labels
%%Pages: (atend)
%%EndComments
%%EndProlog
%%Page 1 1
save

% -- FROM HERE ON, CONVERT EVERYTHING TO INCHES
72 72 scale

% -- Fonts we might want
/Helv_Font
    { /Helvetica findfont FontSize scalefont setfont 0 setgray } def

/HelvB_Font
    { /Helvetica-Bold findfont FontSize scalefont setfont 0 setgray } def

/HelvC_Font
    { /Helvetica-Condensed findfont FontSize scalefont setfont 0 setgray } def

/HelvCB_Font
    { /Helvetica-Condensed-Bold findfont FontSize scalefont setfont 0 setgray } def

/HelvCBI_Font
    { /Helvetica-Condensed-Bold-Italic findfont FontSize scalefont setfont 0 setgray } def

/Locate
    { x y moveto } def

/Feed
    { /y y FontSize sub def Locate } def

%  --------------------------------------------------------
%  --- DOCUMENT
%  --------------------------------------------------------

  90 rotate
  /FontSize 0.16 def
  Helv_Font
  /x .8 def
  /y -.1 FontSize sub def
  Locate
EOF

    # The lines of text the user supplied
    foreach my $line ( @lines ) {
        chomp($line);
        printf("(%s) show Feed\n", PostscriptEscape($line));
    }

    # PostScript trailer
    print <<"EOF";
showpage
%%Trailer
%%Pages: 1
EOF

    exit(0);
}
