Remove or relocate some functions from matdes.
Jean-baptiste Silvy [Thu, 24 Aug 2006 13:52:21 +0000 (13:52 +0000)]
16 files changed:
scilab/modules/graphics/graphics.vcproj
scilab/modules/graphics/includes/BasicAlgos.h [moved from scilab/modules/graphics/includes/SimpleAlgos.h with 62% similarity]
scilab/modules/graphics/includes/DestroyObjects.h
scilab/modules/graphics/includes/DrawObjects.h
scilab/modules/graphics/includes/Format.h
scilab/modules/graphics/sci_gateway/matdes.c
scilab/modules/graphics/sci_gateway/sci_drawnow.c [moved from scilab/modules/graphics/includes/sci_drawnow.c with 100% similarity]
scilab/modules/graphics/sci_gateway/sci_get.c
scilab/modules/graphics/sci_gateway/sci_plot2d.c
scilab/modules/graphics/sci_gateway/sci_set.c
scilab/modules/graphics/sci_gateway/sci_winsid.c [moved from scilab/modules/graphics/includes/sci_winsid.c with 100% similarity]
scilab/modules/graphics/src/c/BasicAlgos.c [moved from scilab/modules/graphics/src/c/SimpleAlgos.c with 74% similarity]
scilab/modules/graphics/src/c/DestroyObjects.c
scilab/modules/graphics/src/c/DrawObjects.c
scilab/modules/graphics/src/c/Format.c
scilab/modules/graphics/src/c/Plo2dn.c

index bf16956..f5ed034 100644 (file)
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\BasicAlgos.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\BuildObjects.c"
                                >
                        </File>
                                >
                        </File>
                        <File
-                               RelativePath=".\includes\sci_drawnow.c"
+                               RelativePath=".\sci_gateway\sci_drawnow.c"
                                >
                        </File>
                        <File
                                >
                        </File>
                        <File
-                               RelativePath=".\includes\sci_winsid.c"
+                               RelativePath=".\sci_gateway\sci_winsid.c"
                                >
                        </File>
                        <File
                                >
                        </File>
                        <File
-                               RelativePath=".\src\c\SimpleAlgos.c"
-                               >
-                       </File>
-                       <File
                                RelativePath=".\src\c\StringMatrix.c"
                                >
                        </File>
                        Filter="h;hpp;hxx;hm;inl"
                        >
                        <File
+                               RelativePath=".\includes\BasicAlgos.h"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\includes\bcg.h"
                                >
                        </File>
                                >
                        </File>
                        <File
-                               RelativePath=".\includes\SimpleAlgos.h"
-                               >
-                       </File>
-                       <File
                                RelativePath=".\includes\StringMatrix.h"
                                >
                        </File>
@@ -1,13 +1,15 @@
 /*------------------------------------------------------------------------*/
-/* file: SimpleAlgos.h                                                    */
+/* file: BAsicAlgos.h                                                    */
 /* Copyright INRIA 2006                                                   */
 /* Authors : Fabrice Leray, Jean-Baptiste Silvy                           */
 /* desc : Several basic algorithm which can be used in several places in  */
 /*        the code.                                                       */
 /*------------------------------------------------------------------------*/
 
-#ifndef _SIMPLE_ALGOS_H_
-#define _SIMPLE_ALGOS_H_
+#ifndef _BASIC_ALGOS_H_
+#define _BASIC_ALGOS_H_
+
+#include "machine.h"
 
 /**
  * Find the striclty positive minimum value of an array of double.
  */
 double sciFindStPosMin( double x[], int n ) ;
 
-#endif /* _SIMPLE_ALGOS_H_ */
\ No newline at end of file
+/**
+ *     convertion d'entier vers double
+ *     d et s peuvent en fait pointer sur le meme tableau
+ *     car la recopie est fait de n,1,-1
+ *      implicit undefined (a-z)
+ */
+int C2F(entier2d)( integer * n, double * dx,integer * s ) ;
+
+#endif /* _BASIC_ALGOS_H_ */
\ No newline at end of file
index bd3f7a3..d22debc 100644 (file)
@@ -22,6 +22,7 @@
 
 
 extern int DestroyAllGraphicsSons (sciPointObj * pthis); /* DESTROY */
+void AllGraphWinDelete( void ) ;
 
 #define SciGerase() { if( C2F(scigerase)() !=0 ) { Scierror(999,"%s :Requested figure cannot be created \r\n",fname) ; return 0 ; } }
 int C2F(scigerase)( void ) ;
index 02e8217..7ceac44 100644 (file)
@@ -106,7 +106,6 @@ extern BOOL sci_update_frame_bounds_2d(sciPointObj *pobj);  /* DRAWINGS */
 extern void rebuild_strflag( sciPointObj * psubwin, char * STRFLAG); /* DRAWINGS */
 extern int labels2D_draw(sciPointObj * psubwin); /* DRAWINGS */
 
-extern int ComputeC_format(sciPointObj * pobj, char * c_format); /* DRAWINGS */ /* inside matdes.c */
 extern int ComputeNbSubTics(sciPointObj * pobj, int nbtics, char logflag, double * grads, int nbsubtics_input); /* DRAWINGS */
 extern int ComputeNbSubTicsFor3dUse(sciPointObj * pobj, int nbtics, char logflag, double * grads, int nbsubtics_input);
 extern int  ComputeCorrectXindAndInsideUD(double Teta,double Alpha, double * dbox, integer *xind, integer *InsideU, integer *InsideD); /* DRAWINGS */
index e98d228..d14c879 100644 (file)
@@ -9,6 +9,10 @@
 #ifndef _FORMAT_H_
 #define _FORMAT_H_
 
+#include "ObjectStructure.h"
+
 int C2F(graduate)(double *xmi, double *xma, double *xi, double *xa, integer *np1, integer *np2, integer *kminr, integer *kmaxr, integer *ar) ;
+int ComputeC_format( sciPointObj * pobj, char * c_format ) ;
+int ComputeXIntervals( sciPointObj * pobj, char xy_type, double ** vector, int * N, int checkdim ) ;
 
 #endif /* _FORMAT_H_ */
\ No newline at end of file
index 8f04bae..23d6579 100644 (file)
@@ -157,487 +157,9 @@ extern sciPointObj *paxesmdl;
 /*-----------------------------------------------------------------------------------*/
 
 
-/* ) */
 
-/* scirects */
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*-----------------------------------------------------------------------------------*/
-int scixclearsubwin(char *fname,unsigned long fname_len)
-{ 
-  unsigned long hdl;
-  sciPointObj *subwin, *tmpsubwin;
-  integer m,n,l,i,numrow,numcol,outindex,j=0;
-
-  SciWin();
-  CheckRhs(0,1);
-  CheckLhs(0,1);
-  if (version_flag() == 0) {
-    tmpsubwin = (sciPointObj *) sciGetSelectedSubWin (sciGetCurrentFigure ());
-    if (Rhs <= 0) { 
-      sciSetdrawmode (FALSE); 
-      numrow = 1;
-      numcol = 1;
-      CreateVar(Rhs+1,"h",&numrow,&numcol,&outindex);
-      hstk(outindex)[0] = sciGetHandle((sciPointObj *) sciGetSelectedSubWin (sciGetCurrentFigure ()));
-      LhsVar(1) = Rhs+1;
-      return 0;
-    }
-
-    switch(VarType(1)) 
-      {
-      case 1: /* clearsubwin(handle) */
-       GetRhsVar(1,"h",&m,&n,&l); 
-       for (i = 0; i < n*m; i++) {
-         hdl = (unsigned long)*hstk(l+i);            /* Puts the value of the Handle to hdl */ 
-         subwin = sciGetPointerFromHandle(hdl);  
-         if (subwin == NULL) {
-           Scierror(999,"%s :the handle is not or no more valid\r\n",fname);
-           return 0;
-         } 
-         if (sciGetEntityType (subwin) != SCI_SUBWIN) {
-           Scierror(999,"%s:  handle does not reference a sub_window",fname);
-           return 0;
-         }
-         else  {
-           /*hdltab[j] = hdl; ???? SS*/
-           j++;
-           sciSetSelectedSubWin (subwin);
-           sciSetdrawmode (FALSE); 
-         }         
-       } 
-       break;
-      case 10:/*  clearsubwin('all') */
-       GetRhsVar(1,"c",&m,&n,&l);
-       if (strcmp(cstk(l),"all") == 0){ 
-         sciXclear();  
-         LhsVar(1) = 0;
-         return 0;}
-       else{
-         Scierror(999,"%s: 'all' or an handle on a subwindow is expected\r\n",fname);
-         return 0;}
-       break; 
-      default: 
-       Scierror(999,"%s: 'all' or an handle on a subwindow is expected\r\n",fname);
-       return 0;
-       break;
-      }
-    sciSetSelectedSubWin (tmpsubwin); 
-  }
-
-  LhsVar(1) = 0;
-  return 0;
-}
-/*-----------------------------------------------------------------------------------*/
-/* erase a graphic window if necessary */
-/*-----------------------------------------------------------------------------------*/
-
-/*-----------------------------------------------------------------------------------*/
-/*     convertion d'entier vers double */
-/*     d et s peuvent en fait pointer sur le meme tableau */
-/*     car la recopie est fait de n,1,-1 */
-/*      implicit undefined (a-z) */
-/*-----------------------------------------------------------------------------------*/
-int C2F(entier2d)(integer *n,double *dx,integer *s)
-{
-  integer ix;
-  for (ix = *n -1 ; ix >= 0; --ix) dx[ix] = (double) s[ix];
-  return 0;
-} 
-/*-----------------------------------------------------------------------------------*/
-/*     convertion de float vers double */
-/*     d et s peuvent en fait pointer sur le meme tableau */
-/*     car la recopie est fait de n,1,-1 */
-/* Parameter adjustments */
-/*-----------------------------------------------------------------------------------*/
-int C2F(simple2d)(integer *n,double *dx,float *s)
-{
-  integer ix;
-  for (ix = *n-1 ; ix >= 0; --ix)  dx[ix] = (double) s[ix];
-  return 0;
-} 
-/*-----------------------------------------------------------------------------------*/
-int ComputeC_format(sciPointObj * pobj, char * c_format)
-{
-  int i,j;
-  char pos;
-  char xy_type;
-  double *x = NULL;
-  double *y = NULL;
-  int *nx = NULL;
-  int *ny = NULL;
-  char * format = NULL;
-  sciPointObj * psubwin = sciGetSelectedSubWin (sciGetCurrentFigure ());
-  int  xpassed = 0, ypassed = 0, Nx, Ny, x3, y3;
-
-
-  if(sciGetEntityType(pobj) != SCI_AXES){
-    sciprint("Error: ComputeFormat must be used with SCI_AXES objects\n");
-    return -1;
-  }
-
-  /*  strcpy(pos,pAXES_FEATURE(pobj)->dir); */
-  /*   strcpy(xy_type,pAXES_FEATURE (pobj)->tics); */
-  pos = pAXES_FEATURE(pobj)->dir;
-  xy_type = pAXES_FEATURE (pobj)->tics;
-  /* Allocating space before re-copying values to not polluate the good values 
-     that will be used inside Axes.c */
-  if((x=MALLOC((pAXES_FEATURE (pobj)->nx)*sizeof(double)))==NULL){
-    sciprint("Memory allocation failed in ComputeFormat\n");
-    return -1;
-  }
-
-  if((y=MALLOC((pAXES_FEATURE (pobj)->ny)*sizeof(double)))==NULL){
-    sciprint("Memory allocation failed in ComputeFormat\n");
-    return -1;
-  }
-
-  if((nx=MALLOC(sizeof(int)))==NULL){
-    sciprint("Memory allocation failed in ComputeFormat\n");
-    return -1;
-  }  
-  
-  if((ny=MALLOC(sizeof(int)))==NULL){
-    sciprint("Memory allocation failed in ComputeFormat\n");
-    return -1;
-  } 
-
-  if((format=MALLOC(5*(sizeof(char ))+1))==NULL){
-    sciprint("Memory allocation failed in ComputeFormat\n");
-    return -1;
-  } 
-  
-  nx[0] = pAXES_FEATURE (pobj)->nx;
-  for(i=0;i<(*nx);i++)  x[i] = pAXES_FEATURE(pobj)->vx[i];  
-  
-  ny[0] = pAXES_FEATURE (pobj)->ny;
-  for(i=0;i<(*ny);i++)  y[i] = pAXES_FEATURE(pobj)->vy[i];
-
-  format = pAXES_FEATURE (pobj)->format;
-
-  /* Algo. here */
-  if(xy_type == 'i') {  
-    switch ( pos ) {
-    case 'u' : case 'd' :  
-      if(pSUBWIN_FEATURE(psubwin)->logflags[0] == 'n')
-       while (x[3]>10)  x[3]=floor(x[3]/2); 
-      else{
-       if(x[3] > 12){ /* F.Leray arbitrary value=12 for the moment */
-         x3=(int)x[3];     /* if x[3]>12 algo is triggered to search a divisor */
-         for(j=x3-1;j>1;j--)
-           if(x3%j == 0){
-             x[3]=j; 
-             xpassed = 1;
-           }
-         if(xpassed != 1) x[3] = 1;
-       }
-      }
-      
-      break;
-    case 'r' : case 'l' :
-      if(pSUBWIN_FEATURE(psubwin)->logflags[1] == 'n')
-       while (y[3]>10)  y[3]=floor(y[3]/2);
-      else{
-       if(y[3] > 12){
-         y3=(int)y[3];
-         for(j=y3-1;j>1;j--)
-           if(y3%j == 0){
-             y[3]=j;
-             ypassed = 1;
-           }
-         if(ypassed != 1) y[3] = 1;
-       }
-      }
-    }
-  }
-  
-      
-  /** Real to Pixel values **/
-  switch ( xy_type ) 
-    {
-    case 'v' : Nx= *nx; Ny= *ny; break;
-    case 'r' :
-      switch ( pos ) {
-      case 'u' : case 'd' : Nx = (int) x[2]+1; break;
-      case 'r' : case 'l' : Ny = (int) y[2]+1; break;
-      }
-      break;
-    case 'i' : 
-      switch ( pos ) {
-      case 'u' : case 'd' : Nx = (int) x[3]+1; break; 
-      case 'r' : case 'l' : Ny = (int) y[3]+1; break;
-      }
-      break;
-    default: 
-      sciprint("Sci_Axis: wrong type argument xy_type\r\n");
-    }
-  switch (pos ) 
-    {
-    case 'u' : 
-    case 'd' :
-      /** Horizontal axes **/
-      /*   barlength =  (integer) (Cscale.WIRect1[3]/50.0); */
-      /** compute a format **/
-      /*   if (str == NULL && format == NULL )   */
-      if (format == NULL )  
-       switch (xy_type ) {
-       case 'v' : ChoixFormatE1(c_format,x,Nx);break;
-       case 'r' : ChoixFormatE (c_format,x[0],x[1],(x[1]-x[0])/x[2]);break;
-       case 'i' : 
-         ChoixFormatE (c_format,
-                       (x[0] * exp10(x[2])),
-                       (x[1] * exp10(x[2])),
-                       ((x[1] * exp10(x[2])) - (x[0] * exp10(x[2])))/x[3]); break; /* Adding F.Leray 06.05.04 */
-         
-       }
-      break;
-      /** the horizontal segment **/
-    case 'r' : 
-    case 'l' :
-      
-      /** Vertical axes **/
-      /*   barlength =  (integer) (Cscale.WIRect1[2]/75.0); */
-      /*   if (str == NULL &&  format == NULL )   */
-      if (format == NULL ) 
-       switch (xy_type ) {
-       case 'v' : ChoixFormatE1(c_format,y,Ny);break;
-       case 'r' : ChoixFormatE(c_format,y[0],y[1],(y[1]-y[0])/y[2]);break;
-       case 'i' : 
-         ChoixFormatE (c_format,
-                       (y[0] * exp10(y[2])),
-                       (y[1] * exp10(y[2])),
-                       ((y[1] * exp10(y[2])) - (y[0] * exp10(y[2])))/y[3]); break; /* Adding F.Leray 06.05.04 */
-       }
-      /** the vertical segment **/
-      break;
-    }
-  
-  /* c_format should be filled now */
-
-  FREE(x); x = NULL;
-  FREE(y); y = NULL;
-  FREE(nx); nx = NULL;
-  FREE(ny); ny = NULL;
-  FREE(format); format = NULL;
-  
-  return 0;
-  
-}
-
-
-/*-----------------------------------------------------------------------------------*/
-int ComputeXIntervals(sciPointObj *pobj, char xy_type, double **vector, int * N, int checkdim)
-{
-  int i;
-  sciAxes * ppaxes = pAXES_FEATURE (pobj);
-  /*   double * outvector = NULL; */
-  double * val = NULL; /* reprensents ppaxes->x or ppaxes->y */
-  int nval;
-
-  int n;
-
-  /* draw an horizontal axis : YES (horizontal axis) or NO (vertical axis) */
-  BOOL ishoriz = (ppaxes->nx > ppaxes->ny)? TRUE : FALSE; 
-  
-  if(ishoriz == TRUE){
-    val  = ppaxes->vx;
-    nval = ppaxes->nx; 
-  }
-  else{
-    val  = ppaxes->vy;
-    nval = ppaxes->ny;
-  }
-  
-  if(xy_type == 'v')
-    {
-      *N = n = nval;
-       
-      if((*vector = (double *) MALLOC(n*sizeof(double ))) == NULL){
-       strcpy(error_message,"No memory left for allocating temporary tics_labels");
-       return -1;
-      }
-         
-      for(i=0;i<n;i++)
-       (*vector)[i] = val[i];
-    }
-  else if(xy_type == 'r')
-    {
-      double step = 0;
-      
-      *N = n = (int)val[2]+1; /* intervals number is given by  ppaxes->x or ppaxes->y */
-      
-      if(checkdim){
-       if(nval != 3)
-         sciprint("Warning: tics_coord must be changed, xy_type is 'r' and tics_coord dimension is not 3\n");
-       
-       if(nval < 3){
-         sciprint("Error: tics_coord must be changed FIRST, xy_type is 'r' and tics_coord dimension < 3\n");
-         *vector = (double *) NULL;
-         return -1;
-       }
-      }
-         
-      if((*vector = (double *) MALLOC(n*sizeof(double ))) == NULL){
-       strcpy(error_message,"No memory left for allocating temporary tics_labels");
-       return -1;
-      }
-         
-      step = (val[1] - val[0])/(n-1);
-         
-      for(i=0;i<n-1;i++)
-       (*vector)[i] = val[0] + i*step;
-         
-      (*vector)[n-1] = val[1]; /* xmax */
-         
-    }
-  else if(xy_type == 'i')
-    {
-      double step = 0;
-      
-      *N = n = (int)val[3]+1;
-      
-      if(checkdim){
-       if(nval != 4)
-         sciprint("Warning: tics_coord must be changed, xy_type is 'i' and tics_coord dimension is not 4\n");
-       
-       if(nval < 4){
-         sciprint("Error: tics_coord must be changed FIRST, xy_type is 'i' and tics_coord dimension < 4\n");
-         *vector = (double *) NULL;
-         return -1;
-       }
-      }
-      
-      if((*vector =(double *)  MALLOC(n*sizeof(double ))) == NULL){
-       strcpy(error_message,"No memory left for allocating temporary tics_labels");
-       return -1;
-      }
-      
-      step = (val[1]*exp10(val[2]) - val[0]*exp10(val[2]))/val[3];
-      
-      
-      for(i=0;i<n-1;i++)
-       (*vector)[i] = val[0]*exp10(val[2]) + i*step;
-      
-      (*vector)[n-1] = val[1]*exp10(val[2]); /* xmax */
-      
-    }
-  
-  
-  /*   /\* I recopy the algo. used inside Axes.c to have exactly the same strings intervals *\/ */
-  /*   /\* START *\/ */
-  /*   if(xy_type == 'i') {     /\* Adding F.Leray 05.03.04*\/ */
-  /*     /\*F.Leray Modification on 09.03.04*\/ */
-  /*     switch ( pos ) { */
-  /*     case 'u' : case 'd' :   */
-  /*       if(ppsubwin->logflags[0] == 'n') */
-  /*   while (x[3]>10)  x[3]=floor(x[3]/2);  */
-  /*       else{ */
-  /*   if(x[3] > 12){ /\* F.Leray arbitrary value=12 for the moment *\/ */
-  /*     x3=(int)x[3];     /\* if x[3]>12 algo is triggered to search a divisor *\/ */
-  /*     for(j=x3-1;j>1;j--) */
-  /*       if(x3%j == 0){ */
-  /*         x[3]=j;  */
-  /*         xpassed = 1; */
-  /*       } */
-  /*     if(xpassed != 1) x[3] = 1; */
-  /*   } */
-  /*       } */
-         
-  /*       break; */
-  /*     case 'r' : case 'l' : */
-  /*       if(ppsubwin->logflags[1] == 'n') */
-  /*   while (y[3]>10)  y[3]=floor(y[3]/2); */
-  /*       else{ */
-  /*   if(y[3] > 12){ */
-  /*     y3=(int)y[3]; */
-  /*     for(j=y3-1;j>1;j--) */
-  /*       if(y3%j == 0){ */
-  /*         y[3]=j; */
-  /*         ypassed = 1; */
-  /*       } */
-  /*     if(ypassed != 1) y[3] = 1; */
-  /*   } */
-  /*       } */
-       
-  /*       break; */
-  /*     } */
-  /*   } */
-
-  
-
-  /*   /\* END *\/  */
-
-  
-  return 0;
-}
-/*-----------------------------------------------------------------------------------*/
-void AllGraphWinDelete(void)
-{
-       if (version_flag() == 0) /*  New Graphic Mode */
-       {
-               integer iflag=0,num=0;
-               int *ArrayWGraph=NULL;
-
-               sciGetIdFigure (ArrayWGraph,&num,&iflag);
-               
-               if (num > 0)
-               {
-                       int i=0;
-                       ArrayWGraph=(int*)MALLOC(sizeof(int)*num);
-
-                       iflag = 1;
-                       sciGetIdFigure (ArrayWGraph,&num,&iflag);
-
-                       for (i=0;i<num;i++)
-                       {
-                               C2F (deletewin) (&ArrayWGraph[i]);
-                               FREE (ArrayWGraph);
-                       }
-                       ArrayWGraph=NULL;
-               }
-       }
-       else /* Old Graphics mode */
-       {       
-               integer iflag = 0, num, *ids = (integer *) 0;
-
-               C2F (getwins) (&num, ids, &iflag);
-               if (num > 0)
-               {
-                       ids = MALLOC ((unsigned) num * sizeof (integer));
-               }
-               
-               iflag = 1;
-
-               if (ids != NULL)
-               {
-                       int i;
-                       C2F (getwins) (&num, ids, &iflag);
-                       for (i = 0; i < num; i++)
-                       C2F (deletewin) (&ids[i]);
-                       FREE (ids);
-               }
-       }
-}
 /*-----------------------------------------------------------------------------------*/
 /**
  * Method called for relocating handles. The input should contains a vector of handles
index dd6fae2..bb644cc 100644 (file)
@@ -20,6 +20,7 @@
 #include "DestroyObjects.h"
 #include "StringMatrix.h"
 #include "Xcall1.h"
+#include "Format.h"
 
 #include "intcommongraphics.h"
 
index cb685df..910ce3a 100644 (file)
@@ -15,7 +15,7 @@
 #include "BuildObjects.h"
 #include "DestroyObjects.h"
 #include "GetProperty.h"
-#include "SimpleAlgos.h"
+#include "BasicAlgos.h"
 #include "sciCall.h"
 #include "dr1Call.h"
 #include "DefaultCommandArg.h"
index 5edfbf4..9396d5a 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "intcommongraphics.h"
 #include "Xcall1.h"
+#include "Format.h"
 
 
 #include "MALLOC.h" /* MALLOC */
similarity index 74%
rename from scilab/modules/graphics/src/c/SimpleAlgos.c
rename to scilab/modules/graphics/src/c/BasicAlgos.c
index 64651fd..acac3c4 100644 (file)
@@ -1,12 +1,12 @@
 /*------------------------------------------------------------------------*/
-/* file: SimpleAlgos.c                                                    */
+/* file: BasicAlgos.c                                                     */
 /* Copyright INRIA 2006                                                   */
 /* Authors : Fabrice Leray, Jean-Baptiste Silvy                           */
 /* desc : Several basic algorithm which can be used in several places in  */
 /*        the code.                                                       */
 /*------------------------------------------------------------------------*/
 
-#include "SimpleAlgos.h"
+#include "BasicAlgos.h"
 
 /*------------------------------------------------------------------------*/
 double sciFindStPosMin( double x[], int n )
@@ -32,4 +32,11 @@ double sciFindStPosMin( double x[], int n )
   /* if we have found at least one positive value in x, min strictly positive */
   return min ;
 }
-/*------------------------------------------------------------------------*/
\ No newline at end of file
+/*------------------------------------------------------------------------*/
+int C2F(entier2d)( integer * n, double * dx,integer * s )
+{
+  integer ix;
+  for (ix = *n -1 ; ix >= 0; --ix) { dx[ix] = (double) s[ix]; }
+  return 0;
+}  
+/*------------------------------------------------------------------------*/
index 6ea095f..b34a156 100644 (file)
@@ -967,3 +967,51 @@ int updateMerge( sciPointObj * pSubwin )
   return 0 ;
 }
 /*-----------------------------------------------------------------------------------------*/
+void AllGraphWinDelete( void )
+{
+  if (version_flag() == 0) /*  New Graphic Mode */
+  {
+    integer iflag=0,num=0;
+    int *ArrayWGraph=NULL;
+
+    sciGetIdFigure (ArrayWGraph,&num,&iflag);
+
+    if (num > 0) 
+    {
+      int i=0;
+      ArrayWGraph=(int*)MALLOC(sizeof(int)*num);
+
+      iflag = 1;
+      sciGetIdFigure (ArrayWGraph,&num,&iflag);
+
+      for (i=0;i<num;i++)
+      {
+        C2F (deletewin) (&ArrayWGraph[i]);
+        FREE (ArrayWGraph);
+      }
+      ArrayWGraph=NULL;
+    }
+  }
+  else /* Old Graphics mode */
+  {    
+    integer iflag = 0, num, *ids = (integer *) 0;
+
+    C2F (getwins) (&num, ids, &iflag);
+    if (num > 0)
+    {
+      ids = MALLOC ((unsigned) num * sizeof (integer));
+    }
+
+    iflag = 1;
+
+    if (ids != NULL)
+    {
+      int i;
+      C2F (getwins) (&num, ids, &iflag);
+      for (i = 0; i < num; i++)
+        C2F (deletewin) (&ids[i]);
+      FREE (ids);
+    }
+  }
+}
+/*-----------------------------------------------------------------------------------------*/
\ No newline at end of file
index 90f399a..d01aeab 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "math_graphics.h"
 #include "graphicSession.h"
+#include "Format.h"
 
 #include "MALLOC.h" /* MALLOC */
 
index 5d418f7..026c9c2 100644 (file)
  *                : change [xmi,xmax] for pretty graduation 
  *--------------------------------------------------------------------------*/
 
-#include <math.h>
 #include <string.h>
 #include <stdio.h>
 #include "math_graphics.h"
 #include "Graphics.h" 
 #include "Format.h"
+#include "MALLOC.h"
+#include "GetProperty.h"
 
 /* Add those lines for FD algo on Theticks */
 #define ROUND(x) (x<0?ceil((x)-0.5):floor((x)+0.5))
@@ -881,6 +882,270 @@ int GradEqual(const double grads[],const int *ngrads)
   return 1;
 }
 
+/*-----------------------------------------------------------------------------------*/
+int ComputeC_format(sciPointObj * pobj, char * c_format)
+{
+  int i,j;
+  char pos;
+  char xy_type;
+  double *x = NULL;
+  double *y = NULL;
+  int *nx = NULL;
+  int *ny = NULL;
+  char * format = NULL;
+  sciPointObj * psubwin = sciGetSelectedSubWin (sciGetCurrentFigure ());
+  int  xpassed = 0, ypassed = 0, Nx, Ny, x3, y3;
+
+
+  if(sciGetEntityType(pobj) != SCI_AXES){
+    sciprint("Error: ComputeFormat must be used with SCI_AXES objects\n");
+    return -1;
+  }
+
+  pos = pAXES_FEATURE(pobj)->dir;
+  xy_type = pAXES_FEATURE (pobj)->tics;
+  /* Allocating space before re-copying values to not polluate the good values 
+  that will be used inside Axes.c */
+  if((x=MALLOC((pAXES_FEATURE (pobj)->nx)*sizeof(double)))==NULL){
+    sciprint("Memory allocation failed in ComputeFormat\n");
+    return -1;
+  }
+
+  if((y=MALLOC((pAXES_FEATURE (pobj)->ny)*sizeof(double)))==NULL){
+    sciprint("Memory allocation failed in ComputeFormat\n");
+    return -1;
+  }
+
+  if((nx=MALLOC(sizeof(int)))==NULL){
+    sciprint("Memory allocation failed in ComputeFormat\n");
+    return -1;
+  }  
+
+  if((ny=MALLOC(sizeof(int)))==NULL){
+    sciprint("Memory allocation failed in ComputeFormat\n");
+    return -1;
+  } 
+
+  if((format=MALLOC(5*(sizeof(char ))+1))==NULL){
+    sciprint("Memory allocation failed in ComputeFormat\n");
+    return -1;
+  } 
+
+  nx[0] = pAXES_FEATURE (pobj)->nx;
+  for(i=0;i<(*nx);i++)  x[i] = pAXES_FEATURE(pobj)->vx[i];  
+
+  ny[0] = pAXES_FEATURE (pobj)->ny;
+  for(i=0;i<(*ny);i++)  y[i] = pAXES_FEATURE(pobj)->vy[i];
+
+  format = pAXES_FEATURE (pobj)->format;
+
+  /* Algo. here */
+  if(xy_type == 'i') {  
+    switch ( pos ) {
+    case 'u' : case 'd' :  
+      if(pSUBWIN_FEATURE(psubwin)->logflags[0] == 'n')
+        while (x[3]>10)  x[3]=floor(x[3]/2); 
+      else{
+        if(x[3] > 12){ /* F.Leray arbitrary value=12 for the moment */
+          x3=(int)x[3];     /* if x[3]>12 algo is triggered to search a divisor */
+          for(j=x3-1;j>1;j--)
+            if(x3%j == 0){
+              x[3]=j; 
+              xpassed = 1;
+            }
+            if(xpassed != 1) x[3] = 1;
+        }
+      }
+
+      break;
+    case 'r' : case 'l' :
+      if(pSUBWIN_FEATURE(psubwin)->logflags[1] == 'n')
+        while (y[3]>10)  y[3]=floor(y[3]/2);
+      else{
+        if(y[3] > 12){
+          y3=(int)y[3];
+          for(j=y3-1;j>1;j--)
+            if(y3%j == 0){
+              y[3]=j;
+              ypassed = 1;
+            }
+            if(ypassed != 1) y[3] = 1;
+        }
+      }
+    }
+  }
+
+
+  /** Real to Pixel values **/
+  switch ( xy_type ) 
+  {
+  case 'v' : Nx= *nx; Ny= *ny; break;
+  case 'r' :
+    switch ( pos ) {
+  case 'u' : case 'd' : Nx = (int) x[2]+1; break;
+  case 'r' : case 'l' : Ny = (int) y[2]+1; break;
+    }
+    break;
+  case 'i' : 
+    switch ( pos ) {
+  case 'u' : case 'd' : Nx = (int) x[3]+1; break; 
+  case 'r' : case 'l' : Ny = (int) y[3]+1; break;
+    }
+    break;
+  default: 
+    sciprint("Sci_Axis: wrong type argument xy_type\r\n");
+  }
+  switch (pos ) 
+  {
+  case 'u' : 
+  case 'd' :
+    /** Horizontal axes **/
+    /*   barlength =  (integer) (Cscale.WIRect1[3]/50.0); */
+    /** compute a format **/
+    /*   if (str == NULL && format == NULL )   */
+    if (format == NULL )  
+      switch (xy_type ) {
+  case 'v' : ChoixFormatE1(c_format,x,Nx);break;
+  case 'r' : ChoixFormatE (c_format,x[0],x[1],(x[1]-x[0])/x[2]);break;
+  case 'i' : 
+    ChoixFormatE (c_format,
+      (x[0] * exp10(x[2])),
+      (x[1] * exp10(x[2])),
+      ((x[1] * exp10(x[2])) - (x[0] * exp10(x[2])))/x[3]); break; /* Adding F.Leray 06.05.04 */
+
+    }
+    break;
+    /** the horizontal segment **/
+  case 'r' : 
+  case 'l' :
+
+    /** Vertical axes **/
+    /*   barlength =  (integer) (Cscale.WIRect1[2]/75.0); */
+    /*   if (str == NULL &&  format == NULL )   */
+    if (format == NULL ) 
+      switch (xy_type ) {
+  case 'v' : ChoixFormatE1(c_format,y,Ny);break;
+  case 'r' : ChoixFormatE(c_format,y[0],y[1],(y[1]-y[0])/y[2]);break;
+  case 'i' : 
+    ChoixFormatE (c_format,
+      (y[0] * exp10(y[2])),
+      (y[1] * exp10(y[2])),
+      ((y[1] * exp10(y[2])) - (y[0] * exp10(y[2])))/y[3]); break; /* Adding F.Leray 06.05.04 */
+    }
+    /** the vertical segment **/
+    break;
+  }
+
+  /* c_format should be filled now */
+
+  FREE(x); x = NULL;
+  FREE(y); y = NULL;
+  FREE(nx); nx = NULL;
+  FREE(ny); ny = NULL;
+  FREE(format); format = NULL;
+
+  return 0;
+
+}
+/*-----------------------------------------------------------------------------------*/
+int ComputeXIntervals( sciPointObj * pobj, char xy_type, double ** vector, int * N, int checkdim )
+{
+  int i;
+  sciAxes * ppaxes = pAXES_FEATURE (pobj);
+  double * val = NULL; /* reprensents ppaxes->x or ppaxes->y */
+  int nval;
+
+  int n;
+
+  /* draw an horizontal axis : YES (horizontal axis) or NO (vertical axis) */
+  BOOL ishoriz = (ppaxes->nx > ppaxes->ny)? TRUE : FALSE; 
+
+  if(ishoriz == TRUE){
+    val  = ppaxes->vx;
+    nval = ppaxes->nx; 
+  }
+  else{
+    val  = ppaxes->vy;
+    nval = ppaxes->ny;
+  }
+
+  if(xy_type == 'v')
+  {
+    *N = n = nval;
+
+    if((*vector = (double *) MALLOC(n*sizeof(double ))) == NULL){
+      sciprint("No memory left for allocating temporary tics_labels\n");
+      return -1;
+    }
+
+    for(i=0;i<n;i++)
+      (*vector)[i] = val[i];
+  }
+  else if(xy_type == 'r')
+  {
+    double step = 0;
+
+    *N = n = (int)val[2]+1; /* intervals number is given by  ppaxes->x or ppaxes->y */
+
+    if(checkdim){
+      if(nval != 3)
+        sciprint("Warning: tics_coord must be changed, xy_type is 'r' and tics_coord dimension is not 3\n");
+
+      if(nval < 3){
+        sciprint("Error: tics_coord must be changed FIRST, xy_type is 'r' and tics_coord dimension < 3\n");
+        *vector = (double *) NULL;
+        return -1;
+      }
+    }
+
+    if((*vector = (double *) MALLOC(n*sizeof(double ))) == NULL){
+      sciprint("No memory left for allocating temporary tics_labels");
+      return -1;
+    }
+
+    step = (val[1] - val[0])/(n-1);
+
+    for(i=0;i<n-1;i++)
+      (*vector)[i] = val[0] + i*step;
+
+    (*vector)[n-1] = val[1]; /* xmax */
+
+  }
+  else if(xy_type == 'i')
+  {
+    double step = 0;
+
+    *N = n = (int)val[3]+1;
+
+    if(checkdim){
+      if(nval != 4)
+        sciprint("Warning: tics_coord must be changed, xy_type is 'i' and tics_coord dimension is not 4\n");
+
+      if(nval < 4){
+        sciprint("Error: tics_coord must be changed FIRST, xy_type is 'i' and tics_coord dimension < 4\n");
+        *vector = (double *) NULL;
+        return -1;
+      }
+    }
+
+    if((*vector =(double *)  MALLOC(n*sizeof(double ))) == NULL){
+      sciprint("No memory left for allocating temporary tics_labels");
+      return -1;
+    }
+
+    step = (val[1]*exp10(val[2]) - val[0]*exp10(val[2]))/val[3];
+
+
+    for(i=0;i<n-1;i++)
+      (*vector)[i] = val[0]*exp10(val[2]) + i*step;
+
+    (*vector)[n-1] = val[1]*exp10(val[2]); /* xmax */
+
+  }
+
+  return 0;
+}
+/*-----------------------------------------------------------------------------------*/
 
 #undef ROUND
 #undef ABS
index 87ad231..ec8c2c1 100644 (file)
@@ -23,7 +23,7 @@
 #include "DrawObjects.h"
 #include "BuildObjects.h"
 #include "Axes.h"
-#include "SimpleAlgos.h"
+#include "BasicAlgos.h"
 
 
 #include "MALLOC.h" /* MALLOC */