<? 
 // annsta.h
 //
 // --------------------------------------------------------
 // Stat: generate image
 // --------------------------------------------------------
function f_scaleStep( $iL, $nmax = 30 ) {   // 16      // 0.022
   $n  = log10( $iL );                      // 1       // -1..

   //+echo "n.1 = " . $n . ", ";

   $n0 = $n;       
   settype( $n, "integer" ); 

   // Adjust for negative $n;
   if( $n > $n0 ) 
     $n--;
                
   //+echo "n.2 = " . $n . ", ";

   //$n -= 1;                                 // 0
   $n--;

   $n = pow( 10, $n );                      // 1

   //+echo "n(pow) = " . $n . "<br>";

   if( $iL / $n > $nmax ) {                 // false
      $r[0] = $n * 5;
      $r[1] = 2; //$n * 10;  //every 2nd
      $r[2] = 2; //4; //$n * 20;     
   } else {                                 // true
      $r[0] = $n;                           // 1      
      $r[1] = 5;  //$n * 5;    // every 5th
      $r[2] = 5;
      if(  $iL / $n > 500 )
        $r[2] = 10; //$n * 10;
      if(  $iL / $n < 20 )
        $r[2] = 2;
      if(  $iL / $n < 10 )
        $r[2] = 1;
   }
   return $r;
}
  

function f_staImage( $im_file, $buf, $pos, $aBuf, &$wid, &$hei, $seqname, $wm, $opt ) {

   //$dx1 = 50+16; //+40;
   $dx1 = 50 +10;
   $dx2 = 10+10; //+10 + 5;
   //if( $iFS  < 20 ) $dx1 -= 30;

   $dy1 = 20+10 - 5 + 10;
   $dy2 = 20; //+10;

   if( strlen($seqname) > 16 ) $seqname = substr( $seqname, 0, 16 );

   //$title = "Statistics of " . substr( $buf, 1, $pos - 4 ) . 
   //                     " (" . substr( $buf, $pos - 2, 2 ) .")";
   $title = substr( $buf, $pos - 2, 2 ) . ": " . substr( $buf, 1, $pos - 4 ); 
    
   $aParm = split( "[ \r\n]+", $aBuf[0], 13 ); //11 );  // +prob
   $nn = $aParm[7];
   settype( $nn, "integer" );

   // prob + freq:
   $prob = $aParm[10] . " " . $aParm[11] . ", " . $aParm[8] . " " . $aParm[9];
   
   //+echo "nn=" . $nn . "<br>";

   $aPow = split( "[ \r\n]+", $aBuf[1], $nn+1 );
   $aUp  = split( "[ \r\n]+", $aBuf[2], $nn+1 );
   $aLow = split( "[ \r\n]+", $aBuf[3], $nn+1 );
  
   for( $i = 1; $i <= $nn; $i++ ) {
     settype( $aPow[$i], "double" );
     settype( $aUp[$i] , "double" );
     settype( $aLow[$i], "double" );
   }

   // Extra Last Pow:
   if( $nn == 1 )
     $aPow[2] = $aPow[1] * 2;
   else {
     $iWk = 0;
     for( $i = 1; $i < ($nn - 1 + 1); $i++ ) {
       $iWk2 = $aPow[$i+1] - $aPow[$i];
       if( $iWk < $iWk2 )
         $iWk = $iWk2;           // max
     }
     //- if( $iWk < 8*5 ) $iWk = 8 * 5;           // to set number
     $aPow[$nn + 1] = $aPow[$nn] + $iWk * 1.2; 
     
   }

   // Split factor $yk:

   $upMore = FALSE;             // Up half not enlarged 
   $iWk = $aUp[$nn] + $aLow[1];
   if( $iWk == 0.0 ) {
     $yk = 0.5;                   
   } else {
     $yk = $aUp[$nn] / $iWk;
     if( $yk > 0.75 ) $yk = 0.75;
     if( $yk < 0.25 ) {
       $yk = 0.25;
       $upMore = TRUE;
     }
   }
   //+ echo "iWk=" . $iWk . "<br>";               // *********
   //+ echo "yk=" . $yk . "<br>";


   $pow_dy = 14; //10;        // pow line width
   $powY   = ($hei - $dy1 - $dy2 - $pow_dy - 20) * $yk + $dy1;

   // Scales:
   $xScale = ($wid - $dx1 - $dy2 - 20 ) / $aPow[$nn + 1];   // or /max ! ******** 
   settype($xScale, "integer" );

   $yScale = 100; //10;  // if only zeros - 100!
   if( $aUp[$nn] != 0.0 && !$upMore ) {
     $yScale = ($powY - $dy1 - 20. ) / $aUp[$nn];   // double
   } else {
     if( $aLow[1] != 0.0 ) {
        $yScale = ($hei - ($powY + $pow_dy) - $dy2 - 20. ) / $aLow[1];   // double
     }
   }
     


   //$wid   = 500;
   //$hei = 350; 

   $k     = imagecreate( $wid, $hei );
   $white = imagecolorResolve($k,255,255,255);
   imagefilledrectangle( $k, 0, 0, $wid, $hei, $white );


   //+$dx = ($wid - $dx1 - $dx2 ) / $iFS ;
   //+$dy = ($hei - $dy1 - $dy2 ) / $iFS ;
   $gray  = imagecolorResolve($k,200,200,200);
   $lgray = imagecolorResolve($k,222,222,222);
   $brown = imagecolorResolve($k,102,  51,  0);
   $black = imagecolorResolve($k,  0,  0,  0);
   $green = imagecolorResolve($k,  0, 128,  0);
   $green2= imagecolorResolve($k,  0, 160,  0);

   $green3= imagecolorResolve($k,  0, 175,  0);
   $green4= imagecolorResolve($k,  0, 190,  0);
   $green5= imagecolorResolve($k,  0, 210,  0);

   $lgreen= imagecolorResolve($k,  0, 200,  0);
   $blue  = imagecolorResolve($k,  0,   0,  255);
   $red2  = imagecolorResolve($k,  200, 0,  0);

   $red3  = imagecolorResolve($k,  220, 0,  0);
   $red4  = imagecolorResolve($k,  245, 0,  0);
   $red5  = imagecolorResolve($k,  255, 128,  0);

   $yellow= imagecolorResolve($k,  200, 200,  0);
   $yellow2= imagecolorResolve($k, 240, 200,  0);
   $lwhite= imagecolorResolve($k,  255, 250,  255);
   $lwhite2= imagecolorResolve($k,  247, 247,  255);

   f_imFrame( $k, $wid, $hei, $dx1, $dx2, $dy1, $dy2 );

   imageString( $k, 3,   5, 3, $seqname, $green );
   imageString( $k, 2,   $wid - strlen($wm)*6 - 10, 3, $wm, $blue );
   //+imageString( $k, 5, 150, 3,"CROSS-REFERENCE MAP OF THE FOUND SEQUENSES", $brown );
   imageString( $k, 5, ($wid - strlen($title)*9 )*0.5, 3   , $title, $brown );

   //+$prob = "Prob 0.322220, Freq 0.003118";
   imageString( $k, 2, ($wid - strlen($prob) *6 )*0.5, 3+15, $prob , $brown );


   // X:

   // power bar:
   //imagefilledrectangle( $k, $dx1+1, $powY+1, $wid - $dx2 - 1, $powY + $pow_dy - 1,
   imagefilledrectangle( $k, $dx1+1, $powY+3, $wid - $dx2 - 1, $powY + $pow_dy - 2,
                         $yellow2 );

   // X-line	
	 //ImageLine     ( $k, $dx1, $powY          , $wid - $dx2, $powY          , $brown);	
	 //ImageLine     ( $k, $dx1, $powY + $pow_dy, $wid - $dx2, $powY + $pow_dy, $brown);
	 ImageLine     ( $k, $dx1, $powY + 2      , $wid - $dx2, $powY + 2      , $brown);	
	 ImageLine     ( $k, $dx1, $powY + $pow_dy - 1, $wid - $dx2, $powY + $pow_dy - 1, $brown);

   // Power:	
   ImageString( $k, 2, $dx1 - 20 - 5*6 - 2, $powY+1,  "POWER", $brown ); 
	 ImageFilledRectangle( $k, $dx1 - 20,$powY+5, $dx1 - 15, $powY + $pow_dy - 5, $brown ); // $yellow);
	 $aPoi = Array( $dx1 - 15, $powY+3, $dx1 - 7, $powY + $pow_dy*0.5,
                             $dx1 - 15,$powY + $pow_dy - 3);
	 ImageFilledPolygon  ( $k, $aPoi, 3, $brown);



   $r  = f_scaleStep( $aPow[$nn+1] ); // 30 - default
   $y  = $powY + 1;
   $y2 = $powY + $pow_dy - 1;
   //+echo "r[0]=". $r[0] . "<br>";
   //for( $n = $r[0]; $n < aPow[$nn+1]; $n += $r[0] ) {
   for( $n = $r[0], $i = 1; ($dx1 +$n*$xScale) < ($wid - $dx2 - 10); $n += $r[0], $i++ ) {
      $x = $dx1 + $n * $xScale;

      imageDashedLine( $k, $x, $dy1 + 10, $x, $powY - 1, $lgray );
      imageDashedLine( $k, $x, $hei - $dy2 - 10, $x, $powY + $pow_dy+ 1, $lgray );

      $iC = $brown;
      //if( $n % $r[1] == 0 ) $iC = $green;
      if( $i % $r[1] == 0 ) {
        //+imageLine( $k, $x  , $y, $x  , $y + 2, $iC );
        //+imageLine( $k, $x+1, $y, $x+1, $y + 2, $iC );

        //+imageLine( $k, $x  , $y2, $x  , $y2 - 2, $iC );
        //+imageLine( $k, $x+1, $y2, $x+1, $y2 - 2, $iC );


        imageLine( $k, $x  , $y, $x  , $y - 2, $iC );
        imageLine( $k, $x+1, $y, $x+1, $y - 2, $iC );

        imageLine( $k, $x  , $y2, $x  , $y2 + 2, $iC );
        imageLine( $k, $x+1, $y2, $x+1, $y2 + 2, $iC );
      } else {
        $iC = $green;
        //+imageLine( $k, $x  , $y, $x  , $y + 1, $iC );
        imageLine( $k, $x  , $y, $x  , $y - 1, $iC );
        $iC = $red2;
        //+imageLine( $k, $x  , $y2, $x , $y2 - 1, $iC );
        imageLine( $k, $x  , $y2, $x , $y2 + 1, $iC );
      }
      if( $i % $r[2] == 0 ) {
        //imageString( $k, 1, $x+2, $y+2, $n, $black); //$brown );
        //+imageString( $k, 2, $x+2, $y+2 - 2, $n, $black); //$brown );
        imageString( $k, 2, $x, $y+2 - 2, $n, $black); //$brown );
      }
   }
   // X.0
   imageString( $k, 2, $dx1+2, $y+2 - 2, "0", $black); //$brown );

   // Y.up:
   //$r  = f_scaleStep( $aUp[$nn]+$aLow[1], 30 );
   $wk = ($hei - $dy1 - $dy2 - 10 - 10)/ $yScale;
   $r  = f_scaleStep( $wk, 30 );
   //-$r  = f_scaleStep( $wk, 20 );

   //+echo "y.r[0]=". $r[0] . ", num=" . $wk . "<br>";
   //+echo "y.r[1]=". $r[1] . "<br>";

   $x  = $dx1+1;
   for( $n = $r[0], $i = 1; ($powY - $n*$yScale) > ($dy1+10); $n += $r[0], $i++ ) {
      $y = $powY - $n * $yScale;
      //echo "y=" . $y . "<br>";

      imageDashedLine( $k, $x, $y, $wid - $dx2 - 2, $y, $lgray );

      $iC = $brown;
      if( $i % $r[1] == 0 ) {
        imageLine( $k, $x, $y    , $x+2, $y, $iC );
        imageLine( $k, $x, $y - 1, $x+2, $y - 1, $iC );

      } else {
        $iC = $green;
        imageLine( $k, $x, $y, $x+1, $y, $iC );
      }
      if( $i % $r[2] == 0 ) {
        $wk = $n;
        settype( $wk, "string" );
        $ni = strlen( $wk );
        imageString( $k, 2, $x - $ni*7 - 5, $y - 6, $wk, $brown );
      }
     //if( $i > 20 ) break;
   } 

   // Y.low:
   for( $n = $r[0], $i = 1; ($powY +$pow_dy + $n*$yScale) < ($hei - $dy2 - 10);
        $n += $r[0], $i++ )
   {
      $y = $powY +$pow_dy + $n * $yScale;
      //echo "y=" . $y . "<br>";

      imageDashedLine( $k, $x, $y, $wid - $dx2 - 2, $y, $lgray );

      $iC = $brown;
      if( $i % $r[1] == 0 ) {
        imageLine( $k, $x, $y    , $x+2, $y, $iC );
        imageLine( $k, $x, $y - 1, $x+2, $y - 1, $iC );

      } else {
        $iC = $green;
        imageLine( $k, $x, $y, $x+1, $y, $iC );
      }
      if( $i % $r[2] == 0 ) {
        $wk = $n;
        
        settype( $wk, "string" );
        $ni = strlen( $wk );
        imageString( $k, 2, $x - $ni*7 - 5, $y - 6, $wk, $brown );
      }
     //if( $i > 20 ) break;
   } 


   // Columns:

   $upLab  = -1;
   $lowLab = 2;
   $xLab   = 0;
   for( $i = 1; $i <= $nn; $i++ ) {
     
     // Up;
     $x1 = $dx1 + $aPow[$i  ] * $xScale;
     $x2 = $dx1 + $aPow[$i+1] * $xScale - 2;
     $y  = $powY - $aUp[$i  ] * $yScale;
     if( ($powY - $y) < 2 ) $y = $powY - 2;   // Zero and about
     //echo "Up=" . $aUp[$i  ] . "<br>";
     imageFilledRectangle( $k, $x1, $y, $x2, $powY, $green2 );
     //imageRectangle( $k, $x1, $y, $x2, $powY, $green2 );

     // Addition to the last col:
     if( $i == $nn ) {
       imageFilledRectangle( $k, $x2+1, $y, $x2+1+2, $powY, $green3 );
       imageFilledRectangle( $k, $x2+4, $y, $x2+4+2, $powY, $green4 );
       imageFilledRectangle( $k, $x2+7, $y, $x2+7+3, $powY, $green5 );
       imageDashedLine    ( $k, $x2+11, $y, $x2+11 , $powY, $green5 );
     }

     // Low;
     //$x1 = $dx1 + $aPow[$i  ] * $xScale;
     //$x2 = $dx1 + $aPow[$i+1] * $xScale - 2;
     $y  = $powY + $pow_dy + $aLow[$i  ] * $yScale;
     if( ($y - $powY - $pow_dy) < 2 ) $y = $powY + $pow_dy + 2;
     //echo "Low=" . $aLow[$i  ] . "<br>";
     //+imageFilledRectangle( $k, $x1, $powY + $pow_dy, $x2, $y , $red2 );
     imageFilledRectangle( $k, $x1, $powY + $pow_dy+1, $x2, $y , $red2 );
     //imageRectangle( $k, $x1, $powY + $pow_dy, $x2, $y , $red2 );

     // Addition to the last col:
     if( $i == $nn ) {
       //imageFilledRectangle( $k, $x2+1, $y, $x2+1+3, $powY, $green3 );
       imageFilledRectangle( $k, $x2+1, $powY + $pow_dy+1, $x2+1+2, $y , $red3 );
       imageFilledRectangle( $k, $x2+4, $powY + $pow_dy+1, $x2+4+2, $y , $red4 );
       imageFilledRectangle( $k, $x2+7, $powY + $pow_dy+1, $x2+7+3, $y , $red5 );
       imageDashedLine    ( $k, $x2+11, $powY + $pow_dy+1, $x2+11 , $y , $red5 );
     }

     //+if( ( $lowLab - $aLow[$i]) > (abs( $lowLab )* 0.1) ) {
     //++if( ( $lowLab - $aLow[$i]) > (abs( $lowLab )* 0.22) ) {
     if( ( $lowLab - $aLow[$i])* $yScale > 12 ) {
       $lowLab = $aLow[$i];
       $wk = $lowLab;
       //settype( $wk, "double" );  // 7E 005
       imageString( $k, 2, $x1+1, $y + 1, round($wk, 4), $brown );
       $xLab = $x1;

     } else {
       if( ($aLow[$i] < $lowLab) && ( $x1 > ($xLab + 6*7) ) ) {
         //+echo "xLab=" . $xLab . ", x1=" . $x1 . "<br>";
         $xLab = $x1;
         $lowLab = $aLow[$i];
         imageString( $k, 2, $x1+1, $y, round($lowLab,4),  $brown ); //$red2 );
       } 

     }
   }
   


   // Only upper labels:
   $xLab = 0;
   for( $i = 1; $i <= $nn; $i++ ) {
     
     // Up;
     $x1 = $dx1 + $aPow[$i  ] * $xScale;
     $x2 = $dx1 + $aPow[$i+1] * $xScale - 2;
     $y  = $powY - $aUp[$i  ] * $yScale;
     //if( ($powY - $y) < 2 ) $y = $powY - 2;
     //+if( ($aUp[$i] - $upLab) > (abs( $upLab )* 0.1) ) {
     //++if( ($aUp[$i] - $upLab) > (abs( $upLab )* 0.22) ) {

     // Exists y-space:
     if( ($aUp[$i] - $upLab)*$yScale > 12 ) {
       $upLab = $aUp[$i];
       if( $y < ($powY - 14 ) ) {
         imageString( $k, 2, $x1+2, $y, round($upLab,4), $white );
       } else {
         imageString( $k, 2, $x1+2, $y - 14, round($upLab,4), $black );
         $upLab += ( 14/ $yScale );
       }
       $xLab = $x1;
     } else {

       // Exists x-space:
       if( ($aUp[$i] > $upLab) && ( $x1 > ($xLab + 6*7) ) ) {
         $xLab  = $x1;
         $upLab = $aUp[$i];
         //imageString( $k, 2, $x1+2, $y, round($upLab,4), $white );
         if( $y < ($powY - 14 ) ) {
           imageString( $k, 2, $x1+2, $y, round($upLab,4), $white );
         } else {
           imageString( $k, 2, $x1+2, $y - 14, round($upLab,4), $black );
           $upLab += ( 14/ $yScale );
         }

       } else {

         // Last: moved due to no "standard space":
         if( $i == $nn && ($aUp[$i] > $upLab) ) {

           // Adjust x:
           if( $x1 < ($xLab + 6*7) )
               $x1 = ($xLab + 6*7);

           // Adjust y:
           $wk = $dy1 - $y + 14 + 1;
           if( $wk > 0 ) 
              $y -= $wk;

           $upLab = $aUp[$i];
           imageString( $k, 2, $x1+2, $y - 14, round($upLab,4), $black );
         }   

       } 
     }

   }


     
  
/***
   $keys = array_keys( $aFS );

   $sfont = 2;
   $sdy   = $dy * 0.4;
   if( $iFS > 19) {
       $sfont = 1;
       $sdy   = 0;
   }
   // Diagonal
   for( $i = 0; $i < $iFS; $i++ ) {
      $x = $dx1+$dx*$i;
      $y = $dy1+$dy*$i;
      imagefilledrectangle( $k, $x, $y, $x + $dx, $y + $dy, $lgray );
      //imageString( $k, 3, 5, $y + ($dy * 0.5), $keys[$i], $brown );
      //+imageString( $k, 1, 5, $y + ($dy * 0.5), $aNumName[ $keys[$i] ], $brown );
      //imageString( $k, 1, ( $i % 2 == 0 ? 5 : 45 ), $y + ($dy * 0.1),
      //     $aNumName[ $keys[$i] ], $brown );
      if( $iFS > 39) 
        $iWk = ( $i % 2 == 0 ? 5 : 45 ) + 5;
      else
        $iWk = 5 + 5;


      if( isset($aNumName[ $keys[$i] ]) )   
            imageString( $k, $sfont, $iWk, $y + $sdy, $aNumName[ $keys[$i] ], $brown );
      else
            imageString( $k, $sfont, $iWk, $y + $sdy, "*" . $keys[$i], $brown );

      //$dxx = 2;             // only for 5 in Hor ?

      //if( $i % 2 == 0 ) {
      //  $wk = " " . ($i+1);
      //if( ($i+1) % 5 == 0 ) {

      //+if( $iFS > 19 &&  (($i+1) % 5 != 0) )  continue;

      // Skip last if prev has been displayed:
      if( $iFS > 19 &&  (($i+1) % 5 == 1) && ($i == ($iFS - 1)) ) continue;

      // Display only 1st and every 5th:
      if( $iFS > 19 &&  (($i+1) % 5 != 0) && $i > 0 && ($i != ($iFS - 1)) ) continue;

        $wk = " " . ($i+1);
        if( $i < 99 ) $wk = " " . $wk;
        if( $i < 9  ) $wk = " " . $wk;
        
        //if( $i > 8  ) $dxx = 0;
              
        
        // Vert:
        //imageString( $k, 1, $dx1 - 24, $y + ($dy * 0.1), $wk, $brown );   // 0.1 0.2 0.5
        imageString( $k, 1, $dx1 - 24, $y , $wk, $brown );   // 0.1 0.2 0.5
        imageString( $k, 1, $wid - $dx2 +4, $y , $i+1, $brown );   // 0.1 0.2 0.5

        // Skip last hor if also 2nd prev has been displayed:
        if( $iFS > 19 && ((($i+1) % 5 == 1)||(($i+1) % 5 == 2))&& ($i == ($iFS - 1)) )
           continue;

        // Hor:
        imageString( $k, 1, $x, $dy1 - 10       , $i+1, $brown );   // 0.1 0.2 0.5
        imageString( $k, 1, $x, $hei - $dy2 + 2 , $i+1, $brown );   // 0.1 0.2 0.5

      //}
   }
   

   $fmot = fopen( $F_M2M, "r" );
   $i = 1;
   $i = 0;
   while( $buf = fgets( $fmot, 128 ) )    {

    if( substr( $buf, 0,5 ) == "Super" ) {
      //f_smOut( $buf, $i++, "a" );  //echo $buf;
      $parts = split( "[ ]+", $buf, 8 );

      //$pos  = strpos( $buf, ".dat" );
      //$ix   = $aFS[substr( $buf, $pos + 5, 6 )];
      //$pos2 = strpos( $buf, ".dat", $pos + 10 );
      //$iy   = $aFS[substr( $buf, $pos2 + 5, 6 )];
      
      //$power = substr( $buf, $pos2 + 12, 6 );
      //+echo "part2=", $parts[2], "*<br>";
      $ix    = $aFS[ $parts[2] ];
      $iy    = $aFS[ $parts[4] ];
      $power = $parts[5];
      settype( $power, "double" );

      if( $i == 0 ) {
        $pmin = $power;
        $pmax = $power;
      } else {
        if( $pmin > $power ) $pmin = $power;
        if( $pmax < $power ) $pmax = $power;
        //echo " pmm = ", $pmin, ",",$pmax, "<br>";
      }
      //echo "p = *", $power, "*<br>";
      $i++;
      // ? $wk = $ix . "," . $iy;
      $wk = "$ix,$iy";
      if( !isset( $aSS[$wk] ) ) {
          $aSS[$wk] = $power;
      } else {
          $p = $aSS[$wk];
          if( $power > $p )
             $aSS[$wk] = $power;
      }
      //$x = $dx1+$dx*($ix - 1);
      //$y = $dy1+$dy*($iy - 1);
      //$ic = f_clr( $k, $power, 4, 15 );
      //imagefilledrectangle( $k, $x, $y, $x + $dx, $y + $dy, $ic ); //$brown );
    }
   }
   fclose( $fmot );

   $keys = array_keys( $aSS );
   $imedi = count( $keys ) * 0.5;
   settype( $imedi, "integer" );
   $pmedi = $pmax;   // init

   for( $i = 0; $i < count( $keys ); $i++ ) {
      $xy    = $keys[$i];
      $power = $aSS[ $xy ];
      if( $i == $imedi ) $pmedi = $power;

      $pos   = strpos( $xy, "," );
      $ix    = substr( $xy, 0, $pos  );
      $iy    = substr( $xy, $pos + 1 );
      settype( $ix, "integer" );
      settype( $iy, "integer" );

      $x = $dx1+$dx*($ix - 1);
      $y = $dy1+$dy*($iy - 1);
      $ic = f_clr( $k, $power, $pmax, $pmin );
      //+imagefilledrectangle( $k, $x, $y, $x + $dx, $y + $dy, $ic ); //$brown );
      //imageArc ( $k, $x + $dx * 0.5, $y + $dy * 0.5, $dx - 1, $dy - 1, 0, 360, $ic ); //$brown );
      $xs = ($dx - 1) * $power / $pmax;
      if( $xs < 3 ) $xs = 3;
      $ys = ($dy - 1) * $power / $pmax;
      if( $ys < 3 ) $ys = 3;

      //+imageArc ( $k, $x + $dx * 0.5, $y + $dy * 0.5, $xs, $ys, 0, 360, $ic ); //$brown );
      //+imageFill( $k, $x + $dx * 0.5, $y + $dy * 0.5, $ic );
   
      // rect ?
      imagefilledrectangle( $k, $x, $y, $x + $dx, $y + $dy, $ic ); //$brown );

    }

   // Lines:
   for( $i = 0; $i < $iFS + 1; $i++ ) {
      $x = $dx1+$dx*$i;
      $y = $dy1+$dy*$i;
      imageLine( $k, $dx1, $y  , $wid - $dx2, $y          , $lgray );
      imageLine( $k, $x  , $dy1, $x         , $hei - $dy2 , $lgray );
      //imageString( $k, 3, 5, $y + ($dy * 0.5), $keys[$i], $brown );
   }
**/   
   // Internal frame
	 ImageRectangle( $k, $dx1, $dy1           , $wid - $dx2, $hei - $dy2    , $brown);


   ImageString( $k, 3, $dx1+3+3, $dy1 +2, "Probability to predict", $green2 ); 
   $wk = "Failure to predict";
   ImageString( $k, 3, $wid - $dx2 - 3 - strlen($wk) * 9, $hei - $dy2 - 13, $wk, $red2 ); 

/**
	 // Legends:
   $sp   = 20;   // leg.space
   $yleg = $hei - 20;
   ImageString( $k, 2, $dx1, $yleg, "Legends:  ", $brown ); 

   $xleg = $dx1 + 10*6; // + $sp;
   $ic = f_clr( $k, $pmax, $pmax, $pmin );
   imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + 14, $yleg + 13, $ic ); 
   $xleg += (14 + 4);
   ImageString( $k, 2, $xleg, $yleg, $pmax . " (max power)", $brown ); 
   
   $xleg += (18 * 6 + $sp);
   $ic = f_clr( $k, $pmedi, $pmax, $pmin );
   imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + 14, $yleg + 13, $ic ); 
   $xleg += (14 + 4);
   ImageString( $k, 2, $xleg, $yleg, $pmedi, $brown ); 

   $xleg += (6 * 6 + $sp);
   $ic = f_clr( $k, $pmin, $pmax, $pmin );
   imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + 14, $yleg + 13, $ic ); 
   $xleg += (14 + 4);
   ImageString( $k, 2, $xleg, $yleg, $pmin . " (min)", $brown ); 

   // Opt Line:
   ImageStringUp( $k, 1, $wid - 17, $hei - $dy2 - 2,  $opt, $brown );
**/
   // Opt Line:
   ImageString( $k, 1, $dx1, $hei - 16,  $opt, $brown );

   // Image file:
   ImageStringUp( $k, 1, $wid - 16, $hei - $dy2 - 1,  $im_file, $brown );

   // *******************************************
   //$er = imageGif( $k, $im_file );                // ************ Linux GIF
   $er = imagePng( $k, $im_file );
   // *******************************************
}
?>