#!/usr/bin/perl
#
$file  = $ARGV[0];


if ($file eq ""){
	print "\nusage: ./convert file.bmp\n\n";
	exit;
}

print "opening $file...\n";

open(IN, "<$file");
@in = <IN>;
$fbuf = join("", @in);
close(IN);

@img = split("EBMP", $fbuf);
$cnt = @img -1-1; #piccount, skip first
print("\nFOUND ".$cnt." images\n");
print("\nOutput Image: 80x".($cnt*60)." (=".$cnt." images)\n\n");

# now prepare our output image:
# ###############################################
$output = "      ";
$header = "";
$width = 80; 
$height= 60*$cnt;
$depth = 8;

# ppm header;
$header .= "P6\n$width $height\n255\n";


for($x=1; $x<$cnt; $x++){
  $fbuf = substr(@img[$x],10);

  @data = split("\xF9\x83\xEF\x3F", $fbuf);
  print "got: ".@data." lines\n";

  $i=0;
  $z=0;
  for (; $i<@data; $i++){
	if (length(@data[$i])==34){
		if ($z != 15){
			$output .= substr(@data[$i],1,31); 
			$z++;
		}else{
			$output .= substr(@data[$i],7,31-6);
			$z=0;
		}
	}elsif(length(@data[$i])==19){
		$output .= substr(@data[$i],1,16);
		print "len=".length(@data[$i])."\n";
	}
  }

  #$output .= "##############################";
  #print "size= ".length($output)."\n";

  #fill image buffer:
  print "[";
  for ($i=length($output); $i<$x*80*60; $i++){
    $output.=" ";
    print ".";
  }
  print "]\n";
  print "size= ".length($output)."\n";
 
  $output .= "   ooo";
  #$output .= "      #######################";

    
}

#fill image buffer:
for ($i=length($output); $i<80*60*@img; $i++){
  $output.=" ";
}

print "writing out.ppm...\n";
open (OUT, ">out.ppm");
print OUT $header;
#print OUT $output;
for ($i=0; $i<length($output); $i++){
  $c = substr($output, $i, 1);
  
  #rgb323
  #$r = int(255*( (ord($c) & 0xE0)>>5)/7.0);
  #$g = int(255*( (ord($c) & 0x18)>>3)/3.0);
  #$b = int(255*( (ord($c) & 0x07)>>0)/7.0);
  
  #it is rgb 332 !!
  $r = int(255*( (ord($c) & 0xE0)>>5)/7.0);
  $g = int(255*( (ord($c) & 0x1C)>>2)/7.0);
  $b = int(255*( (ord($c) & 0x03)>>0)/3.0);
  
  print OUT chr($r).chr($g).chr($b);
  #print "rgb: $r,$g,$b\n";
  #"$c$c$c";
  #print "<$c$c$c>\n";
}
close(OUT);

print "done... exiting...\n\n";


