#!/usr/bin/perl
#
#  aufruf: 
#  colors1.pl <Rechnerliste>
#
#
# (c) M.Herweg 12/2001
# lizenz: GPL
#
# Farben und Bilder auf beliebig vielen X-Terminals
#
# auf den terminals darf kein kde2 laufen
# die terminals mussen mit xhost freigeschaltet sein
#


  
################# alle Terminals gleichzeitig auf eine Farbe schalten 
sub ausgabe{
	my($red,$green,$blue) = @_ ;
	my($result);	

	$n = 0;
	while ( $terminals[$n] ) {
		$command=sprintf ("xsetroot -solid #%02x%02x%02x -display %s ", $red, $green ,$blue, $terminals[$n]);
		#print (">>$command<< \n");
		$result = system("$command");
		$result = $result/255;
		if ($result != 0 ){
			die "Fehler beim xsetroot" ;
			}
		$n++;
	} # while

} #sub ausgabe

################## ein .xpm Farbbild auf allen Terminals anzeigen 
sub xpmausgabe{
	my($file) = @_ ;
	my($result);
	
	$n = 0;
	while ( $terminals[$n] ) {

		# print ("xpmroot  $file \n");
		$result = system ("DISPLAY=$terminals[$n] ; xpmroot $file ");
		#$result = $result/255;
		#if ($result != 0 ){
		#	die "Fehler beim xpmroot" ;
		#	}
		$n++;
	} # while

} #sub xpmausgabe


#################  ein .xbm Schwarz/weiss-Bild  auf allen Terminals anzeigen
sub xbmausgabe{
	my($file) = @_ ;
	my($result);
	
	$n = 0;
	while ( $terminals[$n] ) {

		# print ("xsetroot  $file -display $terminals[$n]");
		$result = system ("xsetroot -bitmap $file -display $terminals[$n]");
		#$result = $result/255;
		#if ($result != 0 ){
		#	die "Fehler beim xsetroot" ;
		#	}
		$n++;
	} # while

} #sub xbmausgabe


#################### Lauflicht1  - die gewünschte Farbe läft von monitor zu monitor
################################### es ist immer nur einer an, der rest bleibt dunkel 
sub ll1{
	my($red,$green,$blue,$sleeptime,$loops) = @_ ;
	my($result);	
	my($n);
        my($m);	

	print ("Lauflicht 1\n");
	# erstmal alles dunkel
	ausgabe(0,0,0);

  for ($m=1; $m<=$loops; $m++)
	{	
	$n = 0;
	while ( $terminals[$n] ) {
		$command=sprintf ("xsetroot -solid #%02x%02x%02x -display %s ", $red, $green ,$blue, $terminals[$n]);
		$result = system("$command");
		$result = $result/255;
		if ($result != 0 ){
			die "Fehler beim xsetroot" ;
			}
		sleep ($sleeptime);
		ausgabe(0,0,0);
		#sleep(1);
		$n++;
	} # while
    } # for
} #sub ll1

###############  dasselbe wie Lauflicht1 nur rückwärts
sub ll2{
	my($red,$green,$blue,$sleeptime,$loops) = @_ ;
	my($result);	
	my($n);
        my($m);	

	print ("Lauflicht 2(backwards)\n");
	# erstmal alles dunkel
	ausgabe(0,0,0);

  for ($m=1; $m<=$loops; $m++)
	{	
	$n = $termanz-1;
	while ( $n >=0  ) {
		$command=sprintf ("xsetroot -solid #%02x%02x%02x -display %s ", $red, $green ,$blue, $terminals[$n]);
		$result = system("$command");
		sleep ($sleeptime);
		ausgabe(0,0,0);
		#sleep(1);
		$n--;
	} # while
    } # for
} #sub ll1



################  ein .xbm Bild läuft über die Monitore
sub xbmll{
	my($file,$sleeptime,$loops) = @_ ;
	my($result);	
	my($n);
        my($m);	

	print ("xbm-Lauflicht\n");
	# erstmal alles dunkel
	ausgabe(0,0,0);

  for ($m=1; $m<=$loops; $m++)
	{	
	$n = 0;
	while ( $terminals[$n] ) {
		$result = system ("xsetroot -bitmap $file -display $terminals[$n] ");
		$result = $result/255;
		#if ($result != 0 ){
		#	die "Fehler beim xsetroot" ;
		#	}
		sleep ($sleeptime);
		ausgabe(0,0,0);
		#sleep ($sleeptime);
		$n++;
	} # while
    } # for
} #sub xbmll

####################  ein .xpm Bild läuft über die Monitore
sub xpmll{
	my($file,$sleeptime,$loops) = @_ ;
	my($result);	
	my($n);
        my($m);	
	print ("xPm Lauflicht \n");
	# erstmal alles dunkel
	ausgabe(0,0,0);

  for ($m=1; $m<=$loops; $m++)
	{	
	$n = 0;
	while ( $terminals[$n] ) {
		$result = system ("DISPLAY=$terminals[$n] ; xpmroot $file ");
		$result = $result/255;
		sleep ($sleeptime);
		ausgabe(0,0,0);
		#sleep(1);
		$n++;
	} # while
    } # for
} #sub xpmll

############## die Farbe  Rot linear von 0 auf 100% hochregeln, auf allen Terminals geleichzeitig
############## die Werte für Grün und Blau beiben unverändert
sub redup {
	print ("red++\n");
	for ( $i=0; $i<=255; $i++  ){
	$red=$i;
	ausgabe($red,$green,$blue);
	}  
}

############## die Farbe  Rot linear von 100% auf 0 runterdimmen, auf allen Terminals geleichzeitig
############## die Werte für Grün und Blau beiben unverändert
sub reddown {
	print ("red--\n");
	for ( $i=255; $i>=0; $i--  ){
	$red=$i;
	ausgabe($red,$green,$blue);
	}  
}

sub greenup {
	print ("green++\n");
	for ( $i=0; $i<=255; $i++  ){
	$green=$i;
	ausgabe($red,$green,$blue);
	}  
}

sub greendown {
	print ("green--\n");
	for ( $i=255; $i>=0; $i--  ){
	$green=$i;
	ausgabe($red,$green,$blue);
	}  
}

sub blueup {
	print ("blue++\n");
	for ( $i=0; $i<=255; $i++  ){
	$blue=$i;
	ausgabe($red,$green,$blue);
	}  
}

sub bluedown {
	print ("blue--\n");
	for ( $i=255; $i>=1; $i--  ){
	$blue=$i;
	ausgabe($red,$green,$blue);
	}  
}


###############  alle Terminals blinken gleichzeitig auf
sub flash1 {
	my($red,$green,$blue,$sleeptime,$loops) = @_ ;

	print ("Flash1 \n");
	for ( $i=1; $i<=$loops; $i++  ){
			ausgabe($red,$green,$blue);
			sleep ($sleeptime);
			ausgabe(0,0,0);
			sleep ($sleeptime);
	}  
	
}

################  alle .xbm Bilder aus der Liste werden nacheinander angezeigt
sub xbmloop{
	for ( $i=1000; $i<=$xbmanz; $i++  ){
	print (" $i, $xbm[$i] \n");
	xbmausgabe($xbm[$i]);
	# sleep (1);
	}

} #sub xbmloop


################  alle .xpm Bilder aus der Liste werden nacheinander angezeigt
sub xpmloop{
	for ( $i=4080; $i<$xpmanz; $i++  ){
	print (" $i, $xpm[$i] \n");
	xpmausgabe($xpm[$i]);
	# sleep (1);
	}

} #sub xpmloop



############### ausgewälte Bilder erscheinen auf ausgewählten Monitoren
############### und bilden zusammen das Wort LINUX
sub linux{

	$n=8;
	$file="l.xpm";
	$result = system ("DISPLAY=$terminals[$n] ; xpmroot $file ");
	$n=7;
	$file="i.xpm";
	$result = system ("DISPLAY=$terminals[$n] ; xpmroot $file ");
	$n=6;
	$file="n.xpm";
	$result = system ("DISPLAY=$terminals[$n] ; xpmroot $file ");
	$n=5;
	$file="u.xpm";
	$result = system ("DISPLAY=$terminals[$n] ; xpmroot $file ");
	$n=4;
	$file="x.xpm";
	$result = system ("DISPLAY=$terminals[$n] ; xpmroot $file ");
}







################## init #####################################



$red="00";
$green="00";
$blue="00";
$display=":0";

if (@ARGV[0]) {
	$termliste = @ARGV[0];
	}
else{
	$termliste="zuhause";
	}



open ( TERMLIST , "< $termliste" ) || die "Fehler beim öffnen von $termliste" ; 
$n = 0;
while ( $zeile = <TERMLIST> ) {
	chop($zeile);
	$terminals[$n] =$zeile.":0";
	$n++;
	}
$termanz=$n;
close TERMLIST;

open ( XPMLIST , "< xpmliste" ) || die "Fehler beim öffnen von $xpmliste" ; 
$n = 0;
while ( $zeile = <XPMLIST> ) {
	# print($zeile);
	chop($zeile);
	$xpm[$n] = $zeile;
	$n++;
	}
$xpmanz=$n;
close XPMLIST;

open ( XBMLIST , "< xbmlist" ) || die "Fehler beim öffnen von $xbmlist" ; 
$n = 0;
while ( $zeile = <XBMLIST> ) {
	# print($zeile);
	chop($zeile);
	$xbm[$n] = $zeile;
	$n++;
	}
$xbmanz=$n;
close XBMLIST;


############  call the functions ################


flash1(0,0,255,1,5);
# flash1(0,255,0);
flash1(255,0,0,0,20);
# flash1(255,255,0);
# flash1(0,255,255);
# flash1(255,0,255);
flash1(255,255,255,0,20);

sleep (1);

ll2(255,0,0,1,3);

ll1(255,255,0,1,3);
ll1(255,255,255,0,30);
# ll1(255,255,255,0);

sleep (1);

xbmll("../../tuxperience.xbm",0,10);
xbmll("../../tuxperience.xbm",1,5);
xpmll("../../tuxperience.xpm",1,2);

sleep (1);


xbmloop;
xpmloop;

sleep (1);

redup;
blueup;
greenup;
reddown;
bluedown;
greendown;

blueup;
greenup;
redup;
bluedown;
greendown;
reddown;

greenup;
blueup;
redup;
greendown;
reddown;
bluedown;

#redup;
#reddown;
#greenup;
#greendown;
#blueup;
#bluedown;

linux;











