#!/usr/bin/perl -w use strict; use Socket; undef $/; die "usage: \n" unless(1==@ARGV); my $host=$ARGV[0]; my $myhostname=`hostname`; $myhostname =~ s/\r?\n$//; my $jobname=sprintf "fA%03u%s",$$%1000,$myhostname; my $file=; my $ctrl="H$myhostname\n"; $ctrl.="Ndirectlpr-stdin\n"; die "no USER environment" unless($ENV{USER}); $ctrl.="P$ENV{USER}\n"; # f is "filtered text", l is "raw text", o is "Postscript" $ctrl.="od$jobname\n"; my $port=515; $port=$1 if($host =~ s/:(\d+)$//; my $iaddr=gethostbyname($host) or die; my $paddr=sockaddr_in($port,$iaddr); socket(SOCK,PF_INET,SOCK_STREAM,getprotobyname("tcp")) or die "socket: $!"; connect(SOCK,$paddr) or die "connect: $!"; select((select(SOCK),$|=1)[0]); sub ack($) { read(SOCK,my $byte,1) or die; 1==length($byte) or die; my $val=unpack("C",$byte); die "$_[0]:$val" if($val); print STDERR "$_[0] succeeded\n"; } if(0==length($file)) { print SOCK "\3lpr\n"; print ; exit 0; } print SOCK "\2"."lpr\n"; ack("recvjob"); print SOCK "\2".length($ctrl)." c$jobname\n"; ack("ctrlcmd"); print SOCK $ctrl; print SOCK "\0"; ack("ctrlfile"); print SOCK "\3".length($file)." d$jobname\n"; ack("datacmd"); print SOCK $file; print SOCK "\0"; ack("data"); close(SOCK); 0;