#! /usr/bin/nawk -f
#
# convert vector data into a Gnuplot command script
#
BEGIN {
    i=0; imax=0;
    j=1; jmax=1;
    initial=0;
}
$0 !~ "^#" &&  NF==2 {
    ++i;
    u[i,j]=$1;
    v[i,j]=$2;
    if( $1 != "NA" && $2 != "NA"){
      if( $1 < 0 ) uabs=-$1;  else uabs=$1;
      if( $2 < 0 ) vabs=-$2;  else vabs=$2;
      if(initial == 0){
        umax=uabs;
        vmax=vabs;
        initial=1;
      }
      if( uabs > umax ) umax=uabs;
      if( vabs > vmax ) vmax=vabs;
    }
}
NF==0 && i!=0 {
    inum[j]=i;
    if( i  > imax ) imax=i;
    jmax=j;
    ++j;
    i=0;
}
$0 !~ "^#" && NF==1 {
    fprintf(stderr,"Warning, single datum for a vector.\n");
}
$0 !~ "^#" && NF==3 {
    fprintf(stderr,"Sorry, the 3D implimentation has not yet done.\n");
}
$0 !~ "^#" && NF==4 {
    fprintf(stderr,"Sorry, free position map has not yet impremented.\n");
}
$0 !~ "^#" && NF >= 3 {
    fprintf(stderr,"Warning I ignore the 3rd. field and its followings\n");
}
END {
    if (i!=0) jmax=j;
    if (title=="")  title="Gnu-plot VECTOR map";
    if (time=="" || time=="ON" || time=="on") time="time"; else time="notime";
    if (xlabel=="") xlabel="X";
    if (ylabel=="") ylabel="Y";
    if (x0=="") x0=1;
    if (y0=="") y0=1;
    if (dx==0) dx=1;
    if (dy==0) dy=1;
    if (margin==0) margin=0.1;
    if (xref==0) xref=x0-dx -dx*imax*margin/2;
    if (yref==0) yref=y0-dy -dy*jmax*margin/2;
    if (refMarkStyle==0) refMarkStyle=0;
    if (uunit=="")
             if(unit!="") uunit=unit;  else uunit="";
    if (vunit=="")
             if(unit!="") vunit=unit;  else vunit="";
    if (uref==0)
             if (ref!=0)  uref=ref;  else  uref=umax;
    if (vref==0)
             if (ref!=0)  vref=ref;  else  vref=vmax;
    if (mag==0){
      magx = dx/uref *0.9;
      if(magx > 0) amagx=magx;  else  amagx = -magx;
      magy = dy/vref *0.9;
      if(magy > 0) amagy=magy;  else  amagy = -magy;
      if(amagx < amagy) mag=amagx; else mag=amagy;
    }
    if (xmag==0) xmag=mag;
    if (ymag==0) ymag=mag;
    printf( "set title '%s'\n",title);
    printf( "set xlabel '%s'\n",xlabel);
    printf( "set ylabel '%s'\n",ylabel);
    print "set noarrow";
    print "set nolabel";
    printf( "set xrange [%g:%g] \n", \
            x0-dx-dx*imax*margin, x0+dx*imax*(1+margin/2) );
    printf( "set yrange [%g:%g] \n", \
            y0-dy-dy*jmax*margin, y0+dy*jmax*(1+margin/2) );
    for(j=1; j<=jmax; ++j){
      for(i=1; i<=inum[j]; ++i){
        if( u[i,j] != "NA" && v[i,j] != "NA"){
          x = x0 + dx*(i-1);
          y = y0 + dy*(j-1);
          if( u[i,j] == 0 && v[i,j] == 0 ){
            style="nohead";
          }else{
            style="head";
          }
          printf( "set arrow from %g, %g to %g, %g %s\n",\
                     x,  y,   x+xmag*u[i,j], y+ymag*v[i,j],  style );
        }
      }
    }
    printf( "set arrow from %g, %g to %g, %g head\n",\
                            xref, yref,  xref+xmag*uref, yref );
    printf( "set arrow from %g, %g to %g, %g head\n",\
                            xref, yref,  xref, yref+ymag*vref );
    printf( "set label '%g%s' at %g,%g left\n",\
                        uref, uunit, xref+xmag*uref, yref); 
    printf( "set label '%g%s' at %g,%g right\n",\
                        vref, vunit, xref, yref+ymag*vref); 
    printf( "set %s\n",time);
    print "set nokey";
    print "set parame";
    print "set samples 2";
    printf( "plot %g, %g with point 1 %d\n", xref, yref,refMarkStyle );
}
