//->Fill applet PS code


int fill_prtype;


void fillps_defs(void)
{

 prprints("\n% Begin OvationPro Fill applet functions\n\n");

 prprints("/op_getsteps {dtransform\n");
 prprints("matrix defaultmatrix idtransform dup mul exch dup mul add sqrt\n"); // distance
 prprints("currentscreen pop pop\n"); // frequency per inch
 prprints("72 div\n");                // frequency per unit
 prprints("mul\n");                   // lines
 prprints("dup 1 lt {pop 1} if\n");
 prprints("dup 256 gt {pop 256} if\n");

 prprints("} bind def\n");

// linear fill code

 prprints("/op_flin{\n");
 prprints("[1 256 div 0 0 1 256 div 0 0] concat\n");

 prprints("/op_eb exch 255 div def\n");
 prprints("/op_eg exch 255 div def\n");
 prprints("/op_er exch 255 div def\n");

 prprints("/op_sb exch 255 div def\n");
 prprints("/op_sg exch 255 div def\n");
 prprints("/op_sr exch 255 div def\n");

 prprints("/op_y1 exch def\n");
 prprints("/op_y0 exch def\n");
 prprints("/op_x1 exch def\n");
 prprints("/op_x0 exch def\n");

 prprints("/op_ry exch def\n");
 prprints("/op_rx exch def\n");

 prprints("concat\n");

 prprints("op_x0 0 lt\n");
 prprints("{op_sr op_sg op_sb setrgbcolor\n");
 prprints("op_x0 op_y0 0 op_x0 sub op_y1 op_y0 sub rectfill} if\n");

 prprints("/op_x0 0 def\n");

 prprints("/op_steps op_rx op_rx op_getsteps def\n");
 prprints("/op_dx op_rx op_steps div def\n");
 prprints("/op_dr op_er op_sr sub op_steps div def\n");
 prprints("/op_dg op_eg op_sg sub op_steps div def\n");
 prprints("/op_db op_eb op_sb sub op_steps div def\n");

 prprints("1 1 op_steps {pop \n");

 prprints(" op_sr op_sg op_sb setrgbcolor\n");
 prprints("/op_sr op_sr op_dr add def\n");
 prprints("/op_sg op_sg op_dg add def\n");
 prprints("/op_sb op_sb op_db add def\n");
 prprints("op_x0 op_y0 op_dx op_y1 op_y0 sub rectfill\n");
 prprints("/op_x0 op_x0 op_dx add def\n");

 prprints("} for\n");

 prprints("op_x0 op_x1 lt\n");
 prprints("{op_er op_eg op_eb setrgbcolor\n");
 prprints("op_x0 op_y0 op_x1 op_x0 sub op_y1 op_y0 sub rectfill} if\n");


 prprints("}bind def\n");


// bi-linear fill code

 prprints("/op_fblin{\n");
 prprints("[1 256 div 0 0 1 256 div 0 0] concat\n");

 prprints("/op_eb exch 255 div def\n");
 prprints("/op_eg exch 255 div def\n");
 prprints("/op_er exch 255 div def\n");

 prprints("/op_sb exch 255 div def\n");
 prprints("/op_sg exch 255 div def\n");
 prprints("/op_sr exch 255 div def\n");

 prprints("/op_y1 exch def\n");
 prprints("/op_y0 exch def\n");
 prprints("/op_x1 exch def\n");
 prprints("/op_x0 exch def\n");

 prprints("/op_ry exch def\n");
 prprints("/op_rx exch def\n");

 prprints("concat\n");

 prprints("op_x0 0 op_rx sub lt\n");           // x0<-rx
 prprints("{op_er op_eg op_eb setrgbcolor\n");
 prprints("op_x0 op_y0 0 op_rx sub op_x0 sub op_y1 op_y0 sub rectfill} if\n");

 prprints("/op_x0 0 op_rx sub def\n");         // x0=-rx

 prprints("/op_steps op_rx op_rx op_getsteps def\n");
 prprints("/op_dx op_rx op_steps div def\n");
 prprints("/op_dr op_er op_sr sub op_steps div def\n");
 prprints("/op_dg op_eg op_sg sub op_steps div def\n");
 prprints("/op_db op_eb op_sb sub op_steps div def\n");

 prprints("/op_sr op_er def\n");
 prprints("/op_sg op_eg def\n");
 prprints("/op_sb op_eb def\n");

 prprints("1 1 op_steps {pop \n");             // x0 from -rx to 0

 prprints(" op_sr op_sg op_sb setrgbcolor\n");
 prprints("/op_sr op_sr op_dr sub def\n");
 prprints("/op_sg op_sg op_dg sub def\n");
 prprints("/op_sb op_sb op_db sub def\n");
 prprints("op_x0 op_y0 op_dx op_y1 op_y0 sub rectfill\n");
 prprints("/op_x0 op_x0 op_dx add def\n");

 prprints("} for\n");


 prprints("1 1 op_steps {pop \n");            // x0 from 0 to rx

 prprints(" op_sr op_sg op_sb setrgbcolor\n");
 prprints("/op_sr op_sr op_dr add def\n");
 prprints("/op_sg op_sg op_dg add def\n");
 prprints("/op_sb op_sb op_db add def\n");
 prprints("op_x0 op_y0 op_dx op_y1 op_y0 sub rectfill\n");
 prprints("/op_x0 op_x0 op_dx add def\n");

 prprints("} for\n");



 prprints("op_x0 op_x1 lt\n");
 prprints("{op_er op_eg op_eb setrgbcolor\n");
 prprints("op_x0 op_y0 op_x1 op_x0 sub op_y1 op_y0 sub rectfill} if\n");


 prprints("}bind def\n");




// quad-linear fill code

 prprints("/op_fqlin{\n");
 prprints("[1 256 div 0 0 1 256 div 0 0] concat\n");

 prprints("/op_eb exch 255 div def\n");
 prprints("/op_eg exch 255 div def\n");
 prprints("/op_er exch 255 div def\n");

 prprints("/op_sb exch 255 div def\n");
 prprints("/op_sg exch 255 div def\n");
 prprints("/op_sr exch 255 div def\n");

 prprints("/op_y1 exch def\n");
 prprints("/op_y0 exch def\n");
 prprints("/op_x1 exch def\n");
 prprints("/op_x0 exch def\n");

 prprints("/op_ry exch def\n");
 prprints("/op_rx exch def\n");

 prprints("concat\n");

 prprints("op_er op_eg op_eb setrgbcolor\n");
 prprints("op_x0 op_y0 op_x1 op_x0 sub op_y1 op_y0 sub rectfill");

 prprints("/op_x0 0 op_rx sub def\n");         // x0=-rx
 prprints("/op_x1 op_rx def\n");
 prprints("/op_y0 0 op_ry sub def\n");
 prprints("/op_y1 op_ry def\n");

 prprints("/op_steps op_rx op_ry op_getsteps def\n");
 prprints("/op_dx op_rx op_steps div def\n");
 prprints("/op_dy op_ry op_steps div def\n");
 prprints("/op_dr op_er op_sr sub op_steps div def\n");
 prprints("/op_dg op_eg op_sg sub op_steps div def\n");
 prprints("/op_db op_eb op_sb sub op_steps div def\n");


 prprints("1 1 op_steps {pop \n");             // x0 from -rx to 0

 prprints(" op_er op_eg op_eb setrgbcolor\n");
 prprints("/op_er op_er op_dr sub def\n");
 prprints("/op_eg op_eg op_dg sub def\n");
 prprints("/op_eb op_eb op_db sub def\n");
 prprints("newpath op_x0 0 moveto 0 op_y0 lineto op_x1 0 lineto\n");
 prprints("0 op_y1 lineto closepath fill\n");
 prprints("/op_x0 op_x0 op_dx add def\n");
 prprints("/op_x1 op_x1 op_dx sub def\n");
 prprints("/op_y0 op_y0 op_dy add def\n");
 prprints("/op_y1 op_y1 op_dy sub def\n");

 prprints("} for\n");


 prprints("}bind def\n");






// radial fill code

 prprints("/op_frad{\n");
 prprints("[1 256 div 0 0 1 256 div 0 0] concat\n");

 prprints("/op_eb exch 255 div def\n");
 prprints("/op_eg exch 255 div def\n");
 prprints("/op_er exch 255 div def\n");

 prprints("/op_sb exch 255 div def\n");
 prprints("/op_sg exch 255 div def\n");
 prprints("/op_sr exch 255 div def\n");

 prprints("/op_y1 exch def\n");
 prprints("/op_y0 exch def\n");
 prprints("/op_x1 exch def\n");
 prprints("/op_x0 exch def\n");

 prprints("/op_ry exch def\n");
 prprints("/op_rx exch def\n");

 prprints("concat\n");

 prprints("op_er op_eg op_eb setrgbcolor\n");
 prprints("op_x0 op_y0 op_x1 op_x0 sub op_y1 op_y0 sub rectfill\n");


 prprints("op_rx op_ry scale");     // now work on 0..1

 prprints("/op_x0 1 def\n");

 prprints("/op_steps 1 1 op_getsteps def\n");
 prprints("/op_dx 1 op_steps div def\n");
 prprints("/op_dr op_er op_sr sub op_steps div def\n");
 prprints("/op_dg op_eg op_sg sub op_steps div def\n");
 prprints("/op_db op_eb op_sb sub op_steps div def\n");


 prprints("1 1 op_steps {pop \n");             // x0 from 1 to 0

 prprints(" op_er op_eg op_eb setrgbcolor\n");
 prprints("/op_er op_er op_dr sub def\n");
 prprints("/op_eg op_eg op_dg sub def\n");
 prprints("/op_eb op_eb op_db sub def\n");

 prprints("0 0 op_x0 0 360 arc fill\n");

 prprints("/op_x0 op_x0 op_dx sub def\n");


 prprints("} for\n");


 prprints("}bind def\n");






 prprints("\n% End OvationPro Fill applet functions\n\n");

}



void fill_copiesevent(int user,int view)
{
 if(fill_prtype==0)
 {
  fillps_defs();
 }
}





int fill_code(int type,int a,int b,int c,int d,int e,int f,int rx,int ry,
                                                 int x0,int y0,int x1,int y1)
{
 int col;

 if(fill_prtype==0)
 {
  prprints("["+dpstring(a,4)+" "+dpstring(b,4)+" "+dpstring(c,4)+" "+dpstring(d,4)+" "+itos(e)+" "+itos(f)+"]\n");

  prprints(itos(rx)+" "+itos(ry)+"\n");

  prprints(itos(x0)+" "+itos(x1)+" "+itos(y0)+" "+itos(y1)+"\n");

  col=fillgetcolour(0);
  prprints(itos(col & 0xFF)+" "+itos((col>>8)&0xFF)+" "+itos((col>>16)&0xFF)+"\n");
  col=fillgetcolour(255);
  prprints(itos(col & 0xFF)+" "+itos((col>>8)&0xFF)+" "+itos((col>>16)&0xFF)+"\n");

  if(type==0) prprints("op_flin\n");
  else
  if(type==1) prprints("op_fblin\n");
  else
  if(type==2) prprints("op_fqlin\n");
  else
  if(type==3) prprints("op_frad\n");

  return(0);
 }

 return(1);
}





void fill_startevent(int user,int view)
{
 string name;

 fill_prtype=(prinfo(name)>>16) & 0xFFFF;
}




void main(void)
{
 addeventhandler(0x110,0,"fill_copiesevent");
 addeventhandler(0x10c,0,"fill_startevent");
}
