//->!PSCode


int csprtype;
int csdoscreen;


void csoutputspot(void)
{
 prprints("/Dot{180 mul cos exch 180 mul cos add 2 div}def\n");
 prprints("/Line{pop abs}def\n");
 prprints("/Square{abs exch abs 2 copy gt{exch}if pop}def\n");
 prprints("/Ellipse{dup 5 mul 8 div mul exch dup mul add 1 exch sub}def\n");
 prprints("/Circle{dup mul exch dup mul add 1 exch sub}def\n");
}



void cscopiesevent(int user,int view)
{
 string s;

 if(csprtype==0)
 {
  if(csdoscreen)
  {
// csdoscreen=0;
   if(csreadpsscreen())
   {
    prprints(itos(csreadfrequency()));
    prprints(" ");
    prprints(itos(csreadangle()/0x10000));
    csspotname(csreadspot(),s);
    prprints(" {"+s+"} setscreen\n");
   }
   else
   if(csreadseps())
   {
    prprints("45 currentscreen exch pop 3 -1 roll exch setscreen\n");
   }

   if(csreadseps())
   {
    csreadcolour(s);
    prprints("%%PlateColor: "+s+"\n");
   }
  }
 }
}



void csstartpic(int user,int view)
{
 string s;

 if(csprtype==0)
 {
  if(csreadpxpsscreen())
  {

   prprints("GS\n");
   prprints(itos(csreadpxfrequency()));
   prprints(" ");
   prprints(itos(csreadpxangle()/0x10000));
   csspotname(csreadpxspot(),s);
   prprints(" {"+s+"} setscreen\n");
  }
 }
}


 
void csendpic(int user,int view)
{
 if(csprtype==0)
 {
  if(csreadpxpsscreen())
  {

   prprints("GR\n");
  }
 }
}




void csstartseparation(int user,int view)
{
 csdoscreen=1;
}


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

 csprtype=(prinfo(name)>>16) & 0xFFFF;
 csdoscreen=1;
}


void csprcache0(int user,int view)
{
 if(csprtype==0) csoutputspot();     
}



void main(void)
{
 addeventhandler(0x110,0,"cscopiesevent");
 addeventhandler(0x10c,0,"csstartevent");
 addeventhandler(0x111,0,"csstartseparation");
 addeventhandler(0x10e,0,"csprcache0");
 addeventhandler(0x11b,0,"csstartpic");
 addeventhandler(0x11c,0,"csendpic");
}
