#!/usr/bin/perl -s
#  -d creates a .debug camila file

package camila;

use IPC::Open3;  # para redireccionar stdin, stdout stderr dum comando

BEGIN{
$pid=open3(CAM, Reader, Error, "/home/jj/bin/camilax -n ") || print "cant camila\n" ;
}

sub prototype{ 
   for (@_){
   if (m!.met$!){   print CAM qq{load("$_");\n};}
   else        {   print CAM qq{nload("$_");\n};}
   getres();
   }
}

sub cameval {
   my $s=shift;
   print CAM $s;
   getres();
}

sub getres {
  my $r="";
  my @x=();
  my $l;
  print CAM 'princ("\n__JJ__\n")', ";\n";
  while ($l=<Reader>){
    chop $l;
    last if ($l eq "__JJ__");
    push (@x, $l);
  }
  join("\n",@x);
}

sub jjflush2 {
  my $name = shift;
  open(AUX,"> $name " ) or die "cant create $name\n";
  print CAM 'princ("\n__JJ__\n")', ";\n";
  while (<Reader>){
    print "reader2: $_" if $d;
    last if ($_ eq "__JJ__\n");
    print AUX $_;
  }
  close AUX;
  print "eo jjflush2\n" if $d;
}

1;

__END__

my $filename = shift; 

open(STDIN, "< $filename.aux") or die "cant find $filename.aux\n" ;
open(CAL,   "> $filename.cal") or die "cant open $filename.cal\n" ;

print(":\n")if $d;
print CAL '\gdef\@camila{\ifcase\cec
lixo' ;






print(":\n")if $d;
while(<>){
print(".\n")if $d;
  if(/\\cam\@prototype{(.*?)}/){ print CAM "nload(\"$1\");\n" ; jjflush();}
  if(/\\cam\@eval{(.*?)}{(.*)/) {
       $name = "_f$1";
       $corpo = $2;
       for($corpo){ chop; 
           s/;\s*$//;
           s/\\par/\n/g;
           if (/^\s*(\w+)\(([^)]*)\)\s*=/)
               {print CAM "$_;\n"; 
                print CAM 'princ("\\\\or "); 
                           princ(', "'$1", ') ; ' ,
                         "\n" ;
               }
           else
               {print CAM "$name()=$_;\n"; 
                print CAM 'princ("\\\\or "); 
                           princ(', "$name", '()) ; ' ,
                         "\n" ;
               }
       }
       jjflush();
   }
  if(/\\cam\@input{(.*?)}{(.*)/) {
       $corpo = $2;
       $caminput_file = $1;
       for ($corpo){ chop;
          s/\\par/\n/g;
          print CAM $_ ;
       }
       jjflush2($caminput_file );
  }
}

print CAM ' princ( "\\\\fi}\n") ;', "\n" ;

close CAM ;

while (<Reader>){
  print CAL $_;
}

