chiark / gitweb /
3d works
[moebius2.git] / generator
1 #!/usr/bin/perl
2 die unless @ARGV==3;
3 ($primer,$ztype,$output) = @ARGV;
4 $output =~ s/^\-o// or die "$output ?";
5
6 $gnuplot= "$output.gnuplot.tmp";
7 $initdata= "$output.initdata.tmp";
8
9 open Z, "$ztype" or die "$ztype $!";
10 open G, ">$gnuplot" or die $!;
11
12 sub pg ($$) { printf G "%s(u,v) = %s\n", @_ or die $!; }
13
14 for (;;) {
15     $!=0; defined($_= <Z>) or die "$ztype $!";
16     s/\r$//;
17     next unless m/^splot\s+([^,]+),([^,]+),([^,]+)\s*$/;
18     pg('x',$1); pg('y',$2); pg('z',$3);
19     last;
20 }
21
22 printf G "set print \"-\"\n" or die $!;
23 close G or die $!;
24
25 sub run ($) {
26     print "    $_[0]\n";
27     $!=0; system($_[0]); die "$! $?" if $! or $?;
28 }
29
30 run("./$primer >>$gnuplot");
31 run("gnuplot $gnuplot >$initdata");
32
33 open I, "$initdata" or die "$initdata $!";
34 open B, ">$output.new" or die "$output.new $!";
35
36 $_= <I>;
37 m/^(\d+) .*/ or die "$_ ?";
38
39 $dim= $1;
40 for ($i=0; $i<$dim; $i++) {
41     $!=0; defined($_= <I>) or die "$initdata $!";
42     print B pack "d", $_ or die $!;
43 }
44
45 close B or die $!;
46 rename "$output.new",$output or die $!;
47
48 print "    wrote $output\n";