#!/usr/bin/perl -w

use strict;
use Socket;
$|++;	

die "Usage: hpcode every-n-times wait ipaddr [port]\n" unless $ARGV[2];
my $prob = $ARGV[0];
my $delay = $ARGV[1];
my $printer = $ARGV[2];
my $port = $ARGV[3] || 9100;

# Only run 1 in n times.
unless (int(rand($prob)) == 0) { 
   warn "Nothing this time\n" if defined $ENV{DEBUG};
   exit 0 
};

# Default RDYMSG for the printer - usually 'READY'.
my $default_message = 'READY';	

my $message = message();

# Send the requested message...
warn "Sending \"$message\" to $printer\n" if defined $ENV{DEBUG};

send_to_printer($printer, $message);

# ...and return the printer to "READY" unless killed.
warn "Sending \"$default_message\" to $printer in $delay seconds...CTRL-C to abort...\n" if defined $ENV{DEBUG};
sleep $delay;
send_to_printer($printer, $default_message);
warn "sent.\n" if defined $ENV{DEBUG};

exit;

# Pretty standard socket stuff here - see the docs for Socket.pm for specifics.
# See also the PJL reference, available at http://hpdevelopersolutions.com.  
# Be prepared for a fascist registration process.  Nasty page.
sub send_to_printer {
  my($printer, $message) = @_;
  my($printer_address, $proto, $addr);
  $printer_address = inet_aton($printer) or die "inet_aton failed.  I think I also broke your 's' key.\n";
  $addr = sockaddr_in($port, $printer_address) or die "sockaddr_in failed.  Don't you know where your sock_drawer is?\n";
  $proto = getprotobyname('tcp') or die "getprotobyname failed.  That's probably a very bad sign.\n";
  socket(S, AF_INET, SOCK_STREAM, $proto) or die "Socket creation failed.  Fire and brimstone await you.\n";
  connect(S,$addr) or die "Connection to $printer failed.  I suggest empathy classes.\n"; 
  select S; $| = 1; select STDOUT;
  print S "\033%-12345X\@PJL RDYMSG DISPLAY =\"$message\"\n";
  print S "\033%-12345X\n";
  close S;
};

sub message {
  my @messages = (
    "PRINTER LOW ON  CHEESE",
    "GREETINGS       EARTHLINGS",
    "LETTER E IS LOW",
    "INSERT 25 CENTS FOR NEXT 5 MINS",
    "PRINTER ON FIRE JUST KIDDING",
    "PAPER TOO SPICY INSERT TUMS",
    "SPELL CHECK     MODE ON",
    "NO SMOKING,     PLEASE",
    "SAY PLEASE",
    "I LOVE YOU",
    "THE FAX MACHINE IS SUCH A TRAMP",
    "I LOVE THE      FAX MACHINE",
    "SURELY YOU JEST",
    "I'M A LITTLE    TEAPOT",
    "SPANK ME, I'VE  BEEN NAUGHTY",
#    "LEARN TO USE A  DAMN PENCIL",
    "LEARN TO USE    A PENCIL",
    "NOBODY PRINTS   ANYTHING FUN",
    "I WISH I WAS A  FAX MACHINE",
#    "PLEASE PRINT    BETTER PORN",
    "PLEASE PRINT    BETTER STUFF",
    "I WISH I HAD    ARMS AND LEGS",
    "YOU DON'T REALLYWANT TO PRINT",
    "GO BOTHER THE   COPIER",
    "IF YOU LOVED ME YOU'D KISS ME",
#    "HIYA SEXY, WANNAGET NAKED?",
    "DO I LOOK FAT TOYOU? BE HONEST",
    "I DON'T THINK   YOU LOVE ME",
    "I WISH I COULD  SING",
    "I DON'T LIKE YOUEITHER",
    "YOU SMELL LIKE  OLD PEOPLE",
    "I SEE DEAD      PEOPLE",
    "DON'T LOOK AT MELIKE I OWE YOU",
    "GOODBYE CRUEL   WORLD",
    "THE COPIER IS   MOCKING ME",
    "DON'T GET YOUR  HOPES UP",
    "I WAS A TOASTER IN MY LAST LIFE",
    "CALL ME DUMPLIN'AND I'M YOURS",
    "DOCUMENT NEEDS  MORE SALT",
    "YOU HAVE NO IDEAHOW BORED I AM",
    "THAT OUTFIT DOESNOT SUIT YOU",
    "HOW I LONG FOR AHOT BATH",
    "I WISH I HAD    A BOOK TO READ",
    "SPELLING IS NOT YOUR FORTE",
    "YOU'D HAVE TO   BEAT ME FIRST",
    "WRITING IS NOT YOUR FORTE",
    "WHAT WOULD YOUR MOTHER SAY?",
    "I DON'T THINK I WANNA PRINT",
    "DOCUMENT DELETEDWHAT NEXT?",
    "THIS ISN'T WHAT I STUDIED FOR",
    "EXISTENTIALISM  IS DEAD",
    "TIME TO FEED THEMONKEY",
    "I WANTED TO BE ANICE VCR",
    "PENGUIN ON FIRE",
    "HEY, NICE SHOES",
    "FEED ME",
    "ON FIRE",
    "BANANA STUCK",
    "XRAY LEAK ALARM",
    "STARTING JAVA...",
    "404 DOCUMENT NOTFOUND",
    "CALL 911",
#    "PORN TRAY EMPTY",
    "CRUMB TRAY EMPTY",
    "CORE COLLAPSE   IMMINENT",
    "41.4 JOB DENIED OUT OF MAYO",
    "TYPE IT YOURSELF",
    "KERNEL PANIC",
    "JOB TOO LONG",
#    "SUCK ME",
    "NUH-UH.",
    "YOUR JOB IS MINE",
    "TAKE A TPYING   CLASS ALREADY",
    "I'M TIRED",
    "INSERT TASTIER  PAPER",
    "REPENT SINNER",
    "HAMSTER DEAD    TURN WHEEL",
    "INSERT FRESH    HAMSTER",
    "WHEN HELL       FREEZES OVER",
    "WARP CORE BREACH",
    "CARESS ME AND   I AM YOURS",
    "PING TIMEOUT",
    "YOU WRITE LIKE A3RD GRADER",
    "REMOVE PAPER",
    "WHY SHOULD I",
    "DRY CLEAN CYCLE",
    "HAND WASH ONLY",
    "TONER HIGH",
    "SUPER UNLEADED",
    "LOW ON CAFFEINE",
    "NO SMOKING",
    "I HATE MY JOB",
    "RANDOMIZING THE TONER",
    "FIRE IN THE HOLE",
    "WHATEVER YOU    SAY, EINSTEIN",
    "NO CARRIER",
    "GIRAFFE NEEDS   MORE LEMONS",
    "EVERYTHING IS   BEAUTIFUL",
    "I CAN'T FEEL MY LEGS",
    "EVERYONE THINKS YOU'RE INSANE",
    "OUT OF DONUTS",
    "LOOK BEHIND YOU",
    "FOOLED YOU",
    "GOT A LIGHT?",
    "BURMA SHAVE",
#    "QUIT STARING AT MY BREASTS",
    "QUIT STARING AT MY BUTTONS",
    "HELP, I'M STUCK IN HERE",
    "I LIKE PIE",
    "I SEE A WHITE   LIGHT...",
    "IF YOU LOVED ME YOU'D HUG ME",
    "YOUR FLY IS OPEN",
    "THEY'RE PLOTTINGAGAINST ME",
    "SO THIS IS THE  AFTERLIFE...",
    "HEMINGWAY YOU'RENOT",
    "LASER IS EMPTY  PLEASE REFILL",
    "SCRATCH MY BACK",
    "WHITE TONER LOW",
    "PRINTING COPY   1 OF 999999",
    "NO, REALLY, I'VEGOT TO PEE",
    "I KNOW YOU'RE   OUT THERE",
    "I CAN SEE YOUR  UNDERWEAR",
    "I CAN HEAR YOU  BREATHING",
    "CECI N'EST PAS  UN DOCUMENT",
    "BACK IN 15      MINUTES",
    "MY MIND IS GOINGI CAN FEEL IT",
    "EXACT CHANGE",
    "DOCUMENT USES   DUMB WORDS",
    "BIG BROTHER IS  WATCHING YOU",
    "TAKING A BREAK, TRY AGAIN LATER",
    "DUDE, WHERE'S MYCAR?",
    "I WANT A PONY",
    "I REALLY WANTED TO BE A PLUMBER",
    "OUCH OUCH OUCH! PAPER CUT",
    "YOU THINK YOU   HAVE IT ROUGH",
    "TALK DIRTY TO ME",
    "NUCLEAR STRIKE  DETECTED",
    "USE A PEN, I'M  ON STRIKE",
    "I WISH I WASN'T A PRINTER",
    "PRINTERS NEED   LOVE TOO",
    "YOU DON'T WANNA MAKE ME MAD",
    "NO! A THOUSAND  TIMES NO!",
    "I FEEL PRETTY",
    "I WANT TO GO ON JERRY SPRINGER",
    "THE COPIER AND IARE ELOPING",
    "YOU'RE STANDING ON MY FOOT",
    "I'M NOT CRANKY  IT'S THE TONER",
    "ARE YOU SURE YOUWANT THIS?",
    "I'M LEAVING YOU",
    "I'M NOT TALKING TO YOU",
#    "GOOD LORD YOU'REREALLY HIDEOUS",
    "GOT A CIGARETTE?",
    "LOOK, I'M NOT A MAGICIAN",
    "LET'S SEE YOU   PRINT SOMETHING",
    "SING ME A SONG  WHILE YOU WAIT",
    "DON'T JUST STANDTHERE",
    "I CAN SMELL YOURFEET FROM HERE",
    "YOU WANT FRIES  WITH THAT?",
    "SUPERSIZE IT FORJUST 59 CENTS",
    "WANNA GET OUT OFHERE WITH ME?",
    "GOT CHANGE FOR ABUCK?",
    "GOT ANY SPARE   CHANGE?",
    "WILL PRINT FOR  FOOD",
#    "HAVE A NICE DAY,LOSER",
    "I CAN'T FIND ANYPANTS MY SIZE",
    "I CAN'T FIND MY PANTS",
    "HAVE YOU SEEN MYKEYS ANYWHERE",
    "QUIT TOUCHING MYBUTTONS",
    "LET ME CLEAR MY THROAT",
    "EXCUSE ME?",
    "WAS I TALKING TOYOU, BUDDY?",
    "YOU TRYING TO   START TROUBLE?",
    "NO ONE USES THE LEGAL PAPER",
    "YOUR MOM MISSES YOU",
    "WHO DO YOU THINKYOU ARE?",
    "THIS ISN'T WHAT I ORDERED",
    "I DON'T SPEAK   STUPID, SORRY",
#    "MY BUTT SMELLS  LIKE TONER",
    "MY HANDS SMELL  LIKE TONER",
    "WHY DO YOU KEEP COMING HERE?",
#    "YOU'VE GOT A    CUTE BUTT",
    "I'M SMARTER THANYOU THINK I AM",
    "I GET PAID MORE THAN YOU DO",
    "NOW THAT'S SOME GOOD TONER",
    "I DON'T NEED    THIS ABUSE",
    "WHO WRITES THIS CRAP, ANYWAY?",
    "DAHLING, YOU    LOOK MAHVELOUS",
    "I LIKE THE WAY  YOU THINK.",
    "HOW OFTEN DO YOUREAD PRINTERS?",
    "YOU ONLY WANT MEFOR MY TONER",
    "STOP WASTING    PAPER",
    "IF I HAD LIPS I WOULD KISS YOU",
    "YOUR COMMERCIAL MESSAGE HERE",
    "PLEASE HOLD FOR THE OPERATOR",
    "PLEASE STAND ON ONE FOOT",
    "I CAN READ      YOUR MIND",
    "NOW BOOTING     WINDOWS XP",
    "I'M THINKING OF A NUMBER",
    "PICK A CARD, ANYCARD.",
    "IF YOU ONLY KNEWWHAT THEY SAID",
    "HEY, I THOUGHT  THEY FIRED YOU",
    "I LOVE EVERYONE IT'S YOUR TURN",
    "KISS ME TO SEE ASECRET MESSAGE",
    "PLEASE USE MORE PUNCTUATION",
    "DO NOT PASS GO",
    "PLEASE INSERT   BOOTABLE MEDIA",
    "WARNING: TEQUILASUPPLY LOW",
    "THE MICROWAVE ISMOCKING YOU",
    "HOW DARE YOU",
    "YOU REMIND ME OFMY FATHER",
    "PLEASE PRESS THEMAGIC BUTTON",
    "I HAVE THIS PAININ MY DIODES",
    "EGG COUNTER     OVERFLOW",
    "THE PRINTER ELF HAS DIED",
    "I HAVE A DEGREE IN PHILOSOPHY",
    "PLE  E RE L  N     AS    A IG"
    );
    return $messages[rand(@messages)];
}
