+#!/usr/bin/perl
+die unless @ARGV==3;
+($primer,$ztype,$output) = @ARGV;
+$output =~ s/^\-o// or die "$output ?";
+
+$gnuplot= "$output.gnuplot.tmp";
+$initdata= "$output.initdata.tmp";
+
+open Z, "$ztype" or die "$ztype $!";
+open G, ">$gnuplot" or die $!;
+
+sub pg ($$) { printf G "%s(u,v) = %s\n", @_ or die $!; }
+
+for (;;) {
+ $!=0; defined($_= <Z>) or die "$ztype $!";
+ s/\r$//;
+ next unless m/^splot\s+([^,]+),([^,]+),([^,]+)\s*$/;
+ pg('x',$1); pg('y',$2); pg('z',$3);
+ last;
+}
+
+printf G "set print \"-\"\n" or die $!;
+close G or die $!;
+
+sub run ($) {
+ print " $_[0]\n";
+ $!=0; system($_[0]); die "$! $?" if $! or $?;
+}
+
+run("./$primer >>$gnuplot");
+run("gnuplot $gnuplot >$initdata");
+
+open I, "$initdata" or die "$initdata $!";
+open B, ">$output.new" or die "$output.new $!";
+
+$_= <I>;
+m/^(\d+) .*/ or die "$_ ?";
+
+$dim= $1;
+for ($i=0; $i<$dim; $i++) {
+ $!=0; defined($_= <I>) or die "$initdata $!";
+ print B pack "d", $_ or die $!;
+}
+
+close B or die $!;
+rename "$output.new",$output or die $!;
+
+print " wrote $output\n";