#!/usr/bin/perl
$code="";
$st=0;
while(<>){
    if ($st ==0 && getfilename($_,$code)){
	open(HDLR,"> $code");
        $st=1;
    }
    if ($st == 1 &&  getbegcode($_) ){
	$st = 2;
    }
    elsif ($st == 2){
        if (getendcode($_)){
	    $st = 3;
	}
	else {
	    print HDLR $_;
	}
    }
    elsif ($st == 3 && getbegcode($_) ){
	$st = 2;
    }
    elsif ($st == 3 && getfilename($_,$code) ){
	print "newcode:$code\n";
	close HDLR;
	open (HDLR, "> $code");
	$st = 2;
    }
    else{
	    $st = $st;
	}
}

close(HDLR) if ($st == 3);


sub getbegcode{
    if ($_[0] =~ /^\s*\\begin\{lstlisting\}\{.*\}/){
        return 1;
    }
    else{
        #print $_[0];
	return 0;
    }
}

sub getendcode{
    return 1 if ($_[0] =~ /^\s*\\end\{lstlisting\}/);
    return 0;
}

sub getfilename{
    if ($_[0] =~ /^%!file\s*:\s*\b(.*)\s*$/){
        $code = $1;
        print "matched:\n$code\n";
        return 1;
    }
    else{
        #print $_[0];
        return 0;
    }
}
