#!/usr/local/bin/perl -w

# Dieses Skript ließt eine mit "bmp2eagle.exe" erzeugte Datei ein und 
# faßt zeilenweise die einzelnen Rechtecke zusammen, so daß die Datei-
# größe und damit die Geschwindigkeit beim Einlesen in Eagle um ein viel-
# faches verkürzt wird.
#
#     Aufruf:  bmp2eagle_opti.pl <Dateiname>
#
# Die original Datei bleibt erhalten. Die Ausgabe erfolgt in:
#     Dateiname.opti.scr
#
# Wichtig: Vor dem Einlesen der .scr Datei in Eagle bitte den Layer
#          wählen! Die Layer-Angaben der Ursprungs-Datei werden nicht
#          übernommen!
#
# Ich habe dieses Perl-Skript nur einmal verwendet und nicht weiter auf
# mögliche Fehler geprüft. Wenn jemand Korrekturen/Verbesserungen vor-
# nimmt, würde ich mich über eine Info per Email freuen.
# Ich übernehme keinerlei Haftung bei Verwendung dieses Skriptes.
#
# MT
#    info@hardwareker.de
#
#

use strict;


my @actual;
my @next;
my $status="actual";
my $linecount=1;

#print $ARGV[0], "\n";

open (FILE1, "$ARGV[0]") || die "kann Datei nicht öffnen: $!";
open (FILE2, ">$ARGV[0]".".opti.scr") || die "kann Datei nicht öffnen: $!";
while (<FILE1>)  {
    if ($_=~/^rect/i) {
        if ($status eq "actual") {
            @actual= ($_ =~ /\d+\.\d+/gi);
            print "\n   bitte warten... \n";
            #print $actual[0]," ";
            #print $actual[1]," ";
            #print $actual[2]," ";
            #print $actual[3],"\n";
            $status="next";
            next
            }
        elsif ($status eq "next") {
            @next= ($_ =~ /\d+\.\d+/gi);
            #print $next[0]," ";
            #print $next[1]," ";
            #print $next[2]," ";
            #print $next[3],"\n";
            if (($actual[1]==$next[1])and($actual[3]==$next[3])and($actual[2]==$next[0])) {
                $actual[2]=$next[2];
                next
                }
            else {
                print FILE2 "Rect (",$actual[0]," ",$actual[1],") (",$actual[2]," ",$actual[3],");\n";
                $linecount++;
                #print $linecount, "\n";
                @actual=@next;
                next
                }
            }
        else {
            die "error in status: §status";
            }
        }
    }
print "\n";
print $linecount," Zeilen in Datei ", $ARGV[0],".opti.scr geschrieben\n";

close FILE1 or die "can't close file: $!";
close FILE2 or die "can't close file: $!";


















