#!/usr/bin/perl -w
use Tk;


#####################################################################################################
# LIZENZ
#
# Dieses Programm steht unter der Bierlizenz!
# Du kannst es benutzen, veraender und kopieren, wie du willst.
# Wenn wir uns mal treffen und du meinst es ist es Wert - gib mir ein Bier aus :-)
# Svenna
#
# scripts@svenna.de
# www.svenna.de
#
# ...nachbearbeitet von Franz Fischer (Franz.FD.Fischer@web.de)
# Ich nehm ein alkoholfreies Helles ;-D
#
#
# Aenderungen der urspruenglichen Version:
# - Drucker wird auch erkannt, wenn lpq in deutsch die Bereitsschaft des Druckers meldet (wie bei mir *g*)
# - Papierabmessungen korrigiert / praezisiert (mathematisch nach DIN-Norm)
# - Von Graustufenscan auf Schwarz-/Weissscan umgestellt
# - Temporaere Dateien werden nach Abschluss des Kopiervorgangs wieder geloescht
# - zusaetzliche Parameter eingefuegt (ohne die es aber auch gehen wuerde)
# - Ausgabedialog entfernt, da zum Zeitpunkt des Erscheinens sowieso noch keine einzige Kopie
#   erstellt wurde
# - Konsolenausgaben zur Fehlersuche eingefuegt
# - Tippfehler in der Kopfzeile des Fensters korrigiert und Skript neu formatiert ;-)
#
# TODOs: (Freiwillige bitte vortreten! *g*)
# - Ueberpruefung einfuegen, ob alle notwendigen Pakete installiert sind.
# - Dialog um die Wählbarkeit zwischen Gray, Lineart und Color ergaenzen (Farbkopien waeren doch auch
#   nicht schlecht, oder? ;-)
# - Dialog um die Möglichkeit erweitern, mit einer hoeheren Aufloesung zu scannen (Standard-
#   einstellung bei Druckern ist meist 600 dpi)
#####################################################################################################


# Scanner erkennen
$scanner = `scanimage -L`;

# Drucker erkennen
$printer = `lpq`;
$printer =~ /^(.*) (is ready|ist bereit)/;
$printer = $1;
$text = "";

if ($scanner =~ /(\w+:libusb:\d{3}:\d{3})/) {
	$scanner = $1;
	$text="Scanner: $scanner\n";
	$text.="Drucker: $printer\n";
}
else {
	$text="Immer erst den Scanner anschließen ;-) \n";
}


# graphische Ausgabe
	$mw = MainWindow->new;
	$anzeige = $mw->title("ScanCopy"); 
	$anzeige = $mw->Label(-justify=>'left', -text=>$text )->pack();
	$mw->Label( -text=>"Anzahl der Kopien:" )->pack;
	$scale = $mw->Scale(-from=>1, -to=>20, -orient=>'horizontal')->pack;
	$mw->Button(-text => "Kopieren", -command => sub{ copy() },)->pack(-side => 'left' );
	$mw->Button(-text => "Abbrechen", -command => sub{ exit },)->pack(-side => 'left' );

MainLoop;

# Anwendungslogik
sub copy {
 	$anzahl = $scale->get;
	print "scanne...\n";
	system("/usr/bin/scanimage -d $scanner --mode Lineart --resolution 300 -x 210 -y 297 > /tmp/kopie.pbm");
	print "konvertiere zu Postscript...\n";
	system("/usr/bin/pnmtops -noturn -equalpixels -dpi 300 -width 8.2677 " .
		"-height 11.6929 /tmp/kopie.pbm > /tmp/kopie.ps");
	print "loesche temporaere pbm-Datei...\n";
	unlink("/tmp/kopie.pbm");
	print "drucke Postscript-Datei...\n";
	system("/usr/bin/lpr -r -h -P$printer -# $anzahl /tmp/kopie.ps");
}

