#include<stdio.h>
#include<stdlib.h>  /* exit() */
#include<string.h>

#define FIG2PDF_RO
#include "fig2pdf.h"

void read_colour(char *p){
  int obj,ncol,i,debug;
  unsigned int colour;
  double r,g,b;

  debug=flags&DEBUG_MASK;

  i=sscanf(p,"%d %d #%x",&obj,&ncol,&colour);

  if (i!=3){
    fprintf(stderr,"Read error in read_colour\n");
    exit(1);
  }

  if ((ncol<32)||(ncol>MAX_COL)){
    fprintf(stderr,"Invalid colour in read_colour\n");
    exit(1);
  }

  b=(colour&0xff)/255.0;
  colour>>=8;
  g=(colour&0xff)/255.0;
  colour>>=8;
  r=(colour&0xff)/255.0;

  fig_colours[ncol]=malloc(20);
  if (!fig_colours[ncol]){
    fprintf(stderr,"Malloc error in read_colour\n");
    exit(1);
  }

  sprintf(fig_colours[ncol],"%5.3f %5.3f %5.3f",r,g,b);

  if (debug>1) fprintf(stderr,"Read user colour %d as %s\n",
		       ncol,fig_colours[ncol]);
}

char* fill_col(int colour, int fill){
  static char string[20];
  double r,g,b;

  if ((colour<-1)||(colour>MAX_COL)) return NULL;
  if (fill<0) return NULL;

  if ((colour==-1)||(colour==0)){
    r=1-fill/20.0;
    sprintf(string,"%5.3f %5.3f %5.3f",r,r,r);
    return string;
  }

  if (!fig_colours[colour]) return NULL;

  if (fill==20){
    strcpy(string,fig_colours[colour]);
    return string;
  }

  sscanf(fig_colours[colour],"%lf %lf %lf",&r,&g,&b);

  if (fill<20){
    r*=fill/20.0;
    g*=fill/20.0;
    b*=fill/20.0;
  }
  else if (fill<40){
    r+=(1-r)*((fill-20)/20.0);
    g+=(1-g)*((fill-20)/20.0);
    b+=(1-b)*((fill-20)/20.0);
  }
  else r=g=b=1.0;

  sprintf(string,"%5.3f %5.3f %5.3f",r,g,b);
  return string;

}
