예제 #1
0
int GrPlotZeroEnd(char *name,char *buf,int sze,void *data) {

  struct GrPlotBlock *blk;
  struct GrPlotZero *ptr;
  struct GrPlotData *plt;

  blk=(struct GrPlotBlock *) data;
  if (blk==NULL) return -1;
  ptr=(struct GrPlotZero *) blk->data;
  if (ptr==NULL) return -1;
  plt=ptr->plt;

  if (strcmp(name,blk->name)==0) {
    struct PlotData *plot;
    plot=plt->plot;
    if (plot==NULL) return -1;
    if (ptr->state !=1) return -1;

    if (strcmp(name,"xzero")==0) 
    PlotXzero(plot,plt->num,ptr->min,ptr->max,
              ptr->color,ptr->mask,ptr->width,ptr->dash);

    if (strcmp(name,"yzero")==0) 
    PlotYzero(plot,plt->num,ptr->min,ptr->max,
              ptr->color,ptr->mask,ptr->width,ptr->dash);

    if (ptr->dash !=NULL) RplotFreeDash(ptr->dash);
    free(ptr);
    GrPlotRestore(blk);
    return 0;
  }
  return 0;
}
예제 #2
0
int GrPlotIncludeEnd(char *name,char *buf,int sze,void *data) {
  int s=0;
  struct GrPlotBlock *blk;
  struct GrPlotInclude *ptr;
  struct GrPlotIncludeBlock *inc;
  struct XMLdata *xml;

  blk=(struct GrPlotBlock *) data;
  if (blk==NULL) return -1;
  ptr=(struct GrPlotInclude *) blk->data;
  if (ptr==NULL) return -1;
  inc=ptr->inc;
  if (inc==NULL) return -1;
  if (strcmp(name,blk->name)==0) {
  
    if (ptr->name==NULL) return -1;
    
    xml=blk->xml;
    GrPlotRestore(blk);

    if (inc->user !=NULL) 
       s=(inc->user)(ptr->name,GrPlotIncludeUser,xml,inc->data);


    free(ptr->name);
    free(ptr);
    return s;
  }
  return 0;
}
예제 #3
0
int GrPlotBarPlotEnd(char *name,char *buf,int sze,void *data) {
  void *fp;
  double xval,yval;
  struct GrPlotBlock *blk;
  struct GrPlotBarPlot *ptr;
  struct GrPlotData *plt;

  blk=(struct GrPlotBlock *) data;
  if (blk==NULL) return -1;
  ptr=(struct GrPlotBarPlot *) blk->data;
  if (ptr==NULL) return -1;
  plt=ptr->plt;

  if (strcmp(name,blk->name)==0) {
    struct PlotData *plot;
    plot=plt->plot;
    if (plot==NULL) return -1;
   
    if ((ptr->state & 0x05) !=0x05) return -1;
    if (ptr->name==NULL) return -1;
    if (ptr->x==NULL) return -1;
    if (ptr->y==NULL) return -1;
  
    /* do the plot here */

    if ((plt->file.open !=NULL) &&
        (plt->file.close!=NULL) &&
        (plt->file.read !=NULL)) {
      fp=(plt->file.open)(ptr->name,ptr->encode,ptr->x,ptr->y,
                          plt->file.data);
      if (fp !=NULL) {
        while ( (plt->file.read)(fp,ptr->encode,ptr->x,ptr->y,
                                &xval,&yval,plt->file.data) !=-1) {

          if (xval<ptr->xdmin) continue;
          if (xval>ptr->xdmax) continue;
	  if (yval<ptr->ydmin) continue;
          if (yval>ptr->ydmax) continue;

     
          PlotBar(plot,plt->num,xval,yval,ptr->w,ptr->o,
                  ptr->xmin,ptr->xmax,ptr->ymin,ptr->ymax,
                  ptr->or,ptr->fill,ptr->color,ptr->mask,ptr->width,ptr->dash);

        }
        (plt->file.close)(fp,plt->file.data);
      } 
    }
    free(ptr->name);
    if (ptr->encode !=NULL) free(ptr->encode);
    free(ptr->x);
    free(ptr->y);    
    if (ptr->dash !=NULL) RplotFreeDash(ptr->dash);
    free(ptr);
    GrPlotRestore(blk);
    return 0;
  }
  return 0;
}
예제 #4
0
int GrPlotAxisEnd(char *name,char *buf,int sze,void *data) {

  struct GrPlotBlock *blk;
  struct GrPlotAxis *ptr;
  struct GrPlotData *plt;

  blk=(struct GrPlotBlock *) data;
  if (blk==NULL) return -1;
  ptr=(struct GrPlotAxis *) blk->data;
  if (ptr==NULL) return -1;
  plt=ptr->plt;

  if (strcmp(name,blk->name)==0) {
    struct PlotData *plot;
    plot=plt->plot;
    if (plot==NULL) return -1;
    if (ptr->state !=1) return -1;

    plot->major_wdt=ptr->major_size;
    plot->minor_wdt=ptr->minor_size;
    plot->major_hgt=ptr->major_size;
    plot->minor_hgt=ptr->minor_size;

    if (strcmp(name,"xaxis")==0) 
    PlotXaxis(plot,plt->num,ptr->min,ptr->max,ptr->major,ptr->minor,
              ptr->flg,ptr->color,ptr->mask,ptr->width);


    if (strcmp(name,"yaxis")==0) 
    PlotYaxis(plot,plt->num,ptr->min,ptr->max,ptr->major,ptr->minor,
              ptr->flg,ptr->color,ptr->mask,ptr->width);

    if (strcmp(name,"xaxislog")==0) 
    PlotXaxisLog(plot,plt->num,ptr->min,ptr->max,ptr->major,ptr->minor,
              ptr->flg,ptr->color,ptr->mask,ptr->width);

    if (strcmp(name,"yaxislog")==0) 
    PlotYaxisLog(plot,plt->num,ptr->min,ptr->max,ptr->major,ptr->minor,
              ptr->flg,ptr->color,ptr->mask,ptr->width);

     

    free(ptr);
    GrPlotRestore(blk);
    return 0;
  }
  return 0;
}
예제 #5
0
int GrPlotShapeEnd(char *name,char *buf,int sze,void *data) {

  struct GrPlotBlock *blk;
  struct GrPlotShape *ptr;
  struct GrPlotData *plt;

  blk=(struct GrPlotBlock *) data;
  if (blk==NULL) return -1;
  ptr=(struct GrPlotShape *) blk->data;
  if (ptr==NULL) return -1;
  plt=ptr->plt;

  if (strcmp(name,blk->name)==0) {
    struct PlotData *plot;
    plot=plt->plot;
    if (plot==NULL) return -1;
   
    if (ptr->state !=0x03) return -1;

    if (ptr->off !=NULL) {
      ptr->x=(ptr->off)->x+ptr->x*(ptr->off)->w;
      ptr->y=(ptr->off)->y+ptr->y*(ptr->off)->h;
      ptr->w=ptr->w*(ptr->off)->w;
      ptr->h=ptr->h*(ptr->off)->h;
      
    }
 
    if (strcmp(name,"rectangle")==0)    
       PlotRectangle(plot,plt->num,ptr->matrix,ptr->x,ptr->y,ptr->w,ptr->h,
             ptr->xmin,ptr->xmax,ptr->ymin,ptr->ymax,
             ptr->fill,ptr->color,ptr->mask,ptr->width,ptr->dash);
    
    if (strcmp(name,"ellipse")==0)    
       PlotEllipse(plot,plt->num,ptr->matrix,ptr->x,ptr->y,ptr->w,ptr->h,
             ptr->xmin,ptr->xmax,ptr->ymin,ptr->ymax,
             ptr->fill,ptr->color,ptr->mask,ptr->width,ptr->dash);
   


    if (ptr->matrix !=NULL) free(ptr->matrix);
    if (ptr->dash !=NULL) RplotFreeDash(ptr->dash);
    free(ptr);
    GrPlotRestore(blk);
    return 0;
  }
  return 0;
}
예제 #6
0
int GrPlotTickEnd(char *name,char *buf,int sze,void *data) {

  struct GrPlotBlock *blk;
  struct GrPlotTick *ptr;

  blk=(struct GrPlotBlock *) data;
  if (blk==NULL) return -1;
  ptr=(struct GrPlotTick *) blk->data;
  if (ptr==NULL) return -1;
 
  if (strcmp(name,blk->name)==0) {
    free(ptr);
    GrPlotRestore(blk);
    return 0;
  }
  return 0;
}
예제 #7
0
int GrPlotImageNameEnd(char *name,char *buf,int sze,void *data) {

  struct GrPlotBlock *blk;
  struct GrPlotImageName *ptr;
  struct GrPlotData *plt;

  blk=(struct GrPlotBlock *) data;
  if (blk==NULL) return -1;
  ptr=(struct GrPlotImageName *) blk->data;
  if (ptr==NULL) return -1;
  plt=ptr->plt;

  if (strcmp(name,blk->name)==0) {
    struct PlotData *plot;
    plot=plt->plot;
    if (plot==NULL) return -1;
    if (ptr->state !=0x01) return -1;
    if (ptr->name==NULL) return -1;
    
    if (ptr->off !=NULL) {
      ptr->x+=(ptr->off)->x;
      ptr->y+=(ptr->off)->y;
    }


    PlotImageName(plot,plt->num,ptr->matrix,ptr->name,ptr->dx,ptr->dy,
             ptr->x,ptr->y,
             ptr->xmin,ptr->xmax,ptr->ymin,ptr->ymax,
             ptr->mask);
    
    if (ptr->matrix !=NULL) free(ptr->matrix);
    free(ptr->name);
    free(ptr);
    GrPlotRestore(blk);
    return 0;
  }
  return 0;
}
예제 #8
0
int GrPlotStringEnd(char *name,char *buf,int sze,void *data) {

  struct GrPlotBlock *blk;
  struct GrPlotString *ptr;

  blk=(struct GrPlotBlock *) data;
  if (blk==NULL) return -1;
  ptr=(struct GrPlotString *) blk->data;
  if (ptr==NULL) return -1;
 
  if (strcmp(name,blk->name)==0) {
     int i,j,c,k=0,s=0;
    int match;
    char *symbol[]={"\"","\\","<",">","&",0};
    char *entity[]={"&quot;","&apos;","&lt;","&gt;","&amp;",0};
    int state[]={0,0,0,0,0,0};
    char *stack=NULL,*tmp=NULL;

    if (ptr->buf==NULL) return -1;
    stack=malloc(strlen(ptr->buf)+1);
    for (j=0;ptr->buf[j] !=0;j++) {
       c=ptr->buf[j];
       match=0;
       for (i=0;entity[i] !=0;i++) {
         if (entity[i][state[i]]==c) {
            state[i]++;
            match=1;
         } else state[i]=0;
         if (entity[i][state[i]]==0) break;
       }
       if (entity[i] !=NULL) {
	 ptr->buf[k]=symbol[i][0];
         k++;
         state[i]=0;
         s=0;
         continue;
       }
   

       if (match==1) {
         stack[s]=c;
         s++; 
         continue;
       } else if (s>0) {
         for (i=0;i<s;i++) ptr->buf[k+i]=stack[i];
         k+=s;
         s=0;
       }
       ptr->buf[k]=c;
       k++;
    }
    ptr->buf[k]=0;
    tmp=realloc(ptr->buf,k+1);
    *(ptr->txt)=tmp;
    free(stack);
    free(ptr);
    GrPlotRestore(blk);
    return 0;
  }
  return 0;
}