00001 #include "ObjectStructure.h"
00002 #include "GetProperty.h"
00003 #include "SetProperty.h"
00004 #include "Xcall1.h"
00005 #include "CurrentObjectsManagement.h"
00006 #include "ObjectSelection.h"
00007
00008 #include "MALLOC.h"
00009
00010
00011
00012
00013
00014
00015
00016 #include <string.h>
00017 #include <stdio.h>
00018 #include "math_graphics.h"
00019 #include "PloEch.h"
00020 #include "sciprint.h"
00021 #include "clipping.h"
00022
00023 typedef void (f_xcall1) (char *,char *,integer *,integer *,integer *,integer *,integer *,integer *,
00024 double *,double *,double *,double *,integer,integer );
00025 typedef void (*func) (char *,char *,integer *,integer *,integer *,integer *,integer *,integer *,
00026 double *,double *,double *,double *,integer,integer );
00027 extern int C2F(sciwin) (void);
00028 extern int scilab_shade(integer *polyx, integer *polyy, integer *fill, integer polysize, integer flag);
00029
00030 static void GSciString (int,integer *x,integer *y,char *StrMat,integer *w,integer *h);
00031 static void Myalloc1 (integer **xm,integer n,integer *err);
00032 static void Myalloc (integer **xm,integer **ym, integer n, integer *err);
00033
00034 static f_xcall1 xset_1, drawarc_1, fillarcs_1 ,drawarcs_1 ,fillpolyline_1 ,drawarrows_1 ;
00035 static f_xcall1 drawaxis_1 ,cleararea_1 ,xclick_1 ,xclick_any_1 ,xgetmouse_1 ,fillarc_1 ;
00036 static f_xcall1 fillrectangle_1 ,drawpolyline_1 ,fillpolylines_1 ,drawpolymark_1 ,displaynumbers_1 ;
00037 static f_xcall1 drawpolylines_1 ,drawrectangle_1 ,drawrectangles_1 ,drawsegments_1 ,displaystring_1 ;
00038 static f_xcall1 boundingbox_1 ,xstringb_1 ;
00039 static f_xcall1 xinit_1;
00040
00041
00042 #ifndef __STDC__
00043 #define const
00044 #endif
00045
00046
00047 #ifdef _MSC_VER
00048 extern int scilab_shade(integer *polyx, integer *polyy, integer *fill, integer polysize, integer flag);
00049 #endif
00050
00051 const struct funreplace * in_word_set (register const char *str, register unsigned int len);
00052 void xclick_2(char *fname, char *str, integer *ibutton, integer *iflag, integer *istr, integer *x1, integer *yy1, integer *x7, double *x, double *y, double *dx3, double *dx4, integer lx0, integer lx1);
00053 void xgetmouse2(char *fname, char *str, integer *ibutton, integer *iflag, integer *x1, integer *yy1, integer *x6, integer *x7, double *x, double *y, double *dx3, double *dx4, integer lx0, integer lx1);
00054
00055
00056
00057 struct funreplace { char *name; f_xcall1 *action; };
00058
00059 #define TOTAL_KEYWORDS 39
00060 #define MIN_WORD_LENGTH 4
00061 #define MAX_WORD_LENGTH 9
00062 #define MIN_HASH_VALUE 10
00063 #define MAX_HASH_VALUE 114
00064
00065
00066 #ifdef __GNUC__
00067 __inline
00068 #else
00069 #ifdef __cplusplus
00070 inline
00071 #endif
00072 #endif
00073 static unsigned int
00074 hash (str, len)
00075 register const char *str;
00076 register unsigned int len;
00077 {
00078 static const unsigned char asso_values[] =
00079 {
00080 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00081 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00082 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00083 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00084 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00085 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00086 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00087 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00088 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00089 115, 115, 115, 115, 115, 115, 115, 0, 5, 5,
00090 10, 0, 20, 25, 115, 0, 115, 35, 35, 35,
00091 15, 10, 15, 115, 5, 10, 0, 25, 115, 1,
00092 15, 0, 115, 115, 115, 115, 115, 115, 115, 115,
00093 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00094 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00095 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00096 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00097 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00098 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00099 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00100 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00101 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00102 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00103 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00104 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
00105 115, 115, 115, 115, 115, 115
00106 };
00107 return len + asso_values[(unsigned char)str[3]] + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[1]] + asso_values[(unsigned char)str[len - 1]];
00108 }
00109
00110 #ifdef __GNUC__
00111 __inline
00112 #endif
00113 const struct funreplace *
00114 in_word_set (register const char *str, register unsigned int len)
00115 {
00116 static const struct funreplace wordlist[] =
00117 {
00118 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
00119 {""},
00120 {"xarea", fillpolyline_1},
00121 {""}, {""}, {""},
00122 {"xset", xset_1},
00123 {"xrect", drawrectangle_1},
00124 {"xstart", (func) C2F(dr)},
00125 {"xarrow", drawarrows_1},
00126 {""},
00127 {"xarc", drawarc_1},
00128 {"xinit", xinit_1},
00129 {"xsetdr", (func) C2F(dr)},
00130 {""},
00131 {""},
00132 {""},
00133 {"xarcs", drawarcs_1},
00134 {"xrects", drawrectangles_1},
00135 {"xreplay", (func) C2F(dr)},
00136 {"xstringb", xstringb_1},
00137 {"xget", (func) C2F(dr)},
00138 {"xaxis", drawaxis_1},
00139 {"xfrect", fillrectangle_1},
00140 {""}, {""},
00141 {"xgetmouse", xgetmouse_1},
00142 {"xfarc", fillarc_1},
00143 {"xgetdr", (func) C2F(dr)},
00144 {""}, {""},
00145 {"xend", (func) C2F(dr)},
00146 {""},
00147 {"xfarcs", fillarcs_1},
00148 {""}, {""}, {""},
00149 {"xclea", cleararea_1},
00150 {""},
00151 {"xstring", displaystring_1},
00152 {""},
00153 {"xclickany", xclick_any_1},
00154 {"xsegs", drawsegments_1},
00155 {"xclear", (func) C2F(dr)},
00156 {"xselect", (func) C2F(dr)},
00157 {""}, {""},
00158 {"xname", (func) C2F(dr)},
00159 {"xmarks", drawpolymark_1},
00160 {""},
00161 {"xstringl", boundingbox_1},
00162 {""}, {""},
00163 {"xgfont", (func) C2F(dr)},
00164 {""}, {""}, {""}, {""},
00165 {"xlines", drawpolyline_1},
00166 {"xliness", fillpolylines_1},
00167 {""}, {""}, {""},
00168 {"xlfont", (func) C2F(dr)},
00169 {""}, {""}, {""}, {""},
00170 {"xpolys", drawpolylines_1},
00171 {""}, {""}, {""}, {""},
00172 {"xclick", xclick_1},
00173 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
00174 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
00175 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
00176 {""}, {""}, {""}, {""}, {""},
00177 {"xnum", displaynumbers_1}
00178 };
00179
00180 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
00181 {
00182 register int key = hash (str, len);
00183
00184 if (key <= MAX_HASH_VALUE && key >= 0)
00185 {
00186 register const char *s = wordlist[key].name;
00187
00188 if (*str == *s && !strcmp (str + 1, s + 1))
00189 return &wordlist[key];
00190 }
00191 }
00192 return 0;
00193 }
00194
00195
00196 int C2F(dr1)( char x0[],char x1[],integer *x2,integer *x3,integer *x4,integer *x5,integer *x6,
00197 integer *x7,double *dx1,double *dx2,double *dx3,double *dx4,
00198 integer lx0, integer lx1)
00199 {
00200 const struct funreplace *fr;
00201 fr=in_word_set(x0,strlen(x0));
00202 if ( fr != NULL )
00203 {
00204 (*(fr->action))(x0,x1,x2,x3,x4,x5,x6,x7,dx1,dx2,dx3,dx4,lx0,lx1);
00205 }
00206 else
00207 {
00208 sciprint("\n Unknow X operator <%s>\r\n",x0);
00209 }
00210 return(0);
00211 }
00212
00213
00214
00215
00216
00217
00218 static char FPF[32]={'\0'};
00219
00220 char * getFPF(void)
00221 {
00222 return(FPF);
00223 }
00224
00225 int C2F(xsetg)(char * str,char * str1,integer lx0,integer lx1)
00226 {
00227 if ( strcmp(str,"fpf") == 0)
00228 {
00229 strncpy(FPF,str1,32);
00230 }
00231 else if ( strcmp(str,"auto clear")==0)
00232 {
00233 sciPointObj * subwin = sciGetFirstTypedSelectedSon(sciGetCurrentFigure(), SCI_SUBWIN);
00234 if (strcmp(str1,"on")==0 )
00235 {
00236 sciSetAddPlot( subwin,FALSE);
00237 }
00238 else{
00239 sciSetAddPlot( subwin,TRUE);
00240 }
00241 }
00242 else if ( strcmp(str,"default")==0)
00243 {
00244 FPF[0]='\0';
00245 }
00246 else
00247 {
00248 sciprint("xset(arg,<string>): Unrecognized arg: %s\r\n",str);
00249 }
00250 return 0;
00251 }
00252
00253 int C2F(xgetg)( char * str, char * str1, integer * len,integer lx0,integer lx1)
00254 {
00255 if ( strcmp(str,"fpf") == 0)
00256 {
00257 strncpy(str1,FPF,32);
00258 *len= strlen(str1);
00259 }
00260 else if ( strcmp(str,"auto clear")==0)
00261 {
00262 int autoclear;
00263 sciPointObj * subwin = sciGetFirstTypedSelectedSon( sciGetCurrentFigure(), SCI_SUBWIN ) ;
00264 autoclear = !(sciGetAddPlot(subwin));
00265 if (autoclear == 1)
00266 {
00267 strncpy(str1,"on",2);
00268 *len=2;
00269 }
00270 else
00271 {
00272 strncpy(str1,"off",3);
00273 *len=3;
00274 }
00275 }
00276 return 0;
00277 }
00278
00279
00280
00281
00282
00283 void xinit_1(char *fname, char *str, integer *x1, integer *x2, integer *x3, integer *x4, integer *x5, integer *x6, double *dx1, double *dx2, double *dx3, double *dx4, integer lx0, integer lx1)
00284 {
00285 C2F(dr)(fname,str,x1,x2,x3,x4,x5,x6,dx1,dx2,dx3,dx4,lx0,lx1);
00286 }
00287
00288
00289
00290
00291
00292
00293 void xset_1(char *fname, char *str, integer *x1, integer *x2, integer *x3, integer *x4, integer *x5, integer *x6, double *dx1, double *dx2, double *dx3, double *dx4, integer lx0, integer lx1)
00294 {
00295
00296 if (strcmp(str,"clipping")==0)
00297 {
00299 integer xx1,yy1,w1,h1,n=1;
00300 C2F(echelle2d)(dx1,dx2,&xx1,&yy1,&n,&n,"f2i",3L);
00301 C2F(echelle2dl)(dx3,dx4,&w1,&h1,&n,&n,"f2i");
00302 C2F(dr)(fname,str,&xx1,&yy1,&w1,&h1,x5,x6,dx1,dx2,dx3,dx4,lx0,lx1);
00303 }
00304 else if (strcmp(str,"clipping-p")==0)
00305 {
00306
00307 C2F(dr)(fname,"clipping",x1,x2,x3,x4,x5,x6,dx1,dx2,dx3,dx4,lx0,lx1);
00308 }
00309 else if (strcmp(str,"clipgrf")==0)
00310 {
00312 frame_clip_on();
00313 }
00314 else
00315 {
00316 C2F(dr)(fname,str,x1,x2,x3,x4,x5,x6,dx1,dx2,dx3,dx4,lx0,lx1);
00317 }
00318 }
00319
00320
00321
00322
00323
00324 void drawarc_1(char *fname, char *str, integer *v1, integer *v2, integer *v3, integer *v4, integer *angle1, integer *angle2, double *x, double *y, double *width, double *height, integer lx0, integer lx1)
00325 {
00326 integer x1,yy1,w1,h1,n=1;
00327 x1 = XDouble2Pixel(*x);
00328 yy1 = YDouble2Pixel(*y);
00329 C2F(echelle2dl)(width,height,&w1,&h1,&n,&n,"f2i");
00330 C2F(dr)(fname,str,&x1,&yy1,&w1,&h1,angle1,angle2,PD0,PD0,PD0,PD0,lx0,lx1);
00331 }
00332
00333
00334
00335
00336
00337 void fillarcs_1(char *fname, char *str, integer *v1, integer *fillvect, integer *n, integer *x6, integer *x7, integer *x8, double *vects, double *dx2, double *dx3, double *dx4, integer lx0, integer lx1)
00338 {
00339 integer *xm,err=0,n2;
00340 Myalloc1(&xm,6*(*n),&err);
00341 if (err == 1) return;
00342 C2F(ellipse2d)(vects,xm,(n2=6*(*n),&n2),"f2i");
00343 C2F(dr)(fname,str,xm,fillvect,n,x6,x7,x8,PD0,dx2,dx3,dx4,lx0,lx1);
00344 FREE(xm) ;
00345 }
00346
00347
00348
00349
00350
00351 void drawarcs_1(char *fname, char *str, integer *v1, integer *style, integer *n, integer *x6, integer *x7, integer *x8, double *vects, double *dx2, double *dx3, double *dx4, integer lx0, integer lx1)
00352 {
00353 integer *xm,err=0,n2;
00354 Myalloc1(&xm,6*(*n),&err);
00355 if (err == 1) return;
00356 C2F(ellipse2d)(vects,xm,(n2=6*(*n),&n2),"f2i");
00357 C2F(dr)(fname,str,xm,style,n,x6,x7,x8,PD0,dx2,dx3,dx4,lx0,lx1);
00358 FREE(xm) ;
00359 }
00360
00361
00362
00363
00364 void fillpolyline_1(char *fname, char *str, integer *n, integer *v1, integer *v2, integer *closeflag, integer *x7, integer *x8, double *vx, double *vy, double *dx3, double *dx4, integer lx0, integer lx1)
00365 {
00366 integer *xm,*ym,err=0,n2=1;
00367 Myalloc(&xm,&ym,*n,&err);
00368 if (err == 1) return;
00369 C2F(echelle2d)(vx,vy,xm,ym,n,&n2,"f2i",3L);
00370 C2F(dr)(fname,str,n,xm,ym,closeflag,x7,x8,PD0,PD0,dx3,dx4,lx0,lx1);
00371 FREE(xm) ;
00372 FREE(ym) ;
00373 }
00374
00375
00376
00377
00378
00379 void drawarrows_1(char *fname, char *str, integer *style, integer *iflag, integer *n, integer *v3, integer *x7, integer *x8, double *vx, double *vy, double *as, double *dx4, integer lx0, integer lx1)
00380 {
00381 integer *xm,*ym,err=0,n2=1,n1=1,ias,ias1;
00382 Myalloc(&xm,&ym,*n,&err);
00383 if (err == 1) return;
00384 C2F(echelle2d)(vx,vy,xm,ym,n,&n2,"f2i",3L);
00385
00386 if ( *as < 0.0 )
00387 {
00388 int i;
00389 double Mnorm=0.0;
00390 for (i=0 ; i < *n/2 ; i++)
00391 {
00392 double dx,dy;
00393 dx=( vx[2*i+1]-vx[2*i]);
00394 dy=( vy[2*i+1]-vy[2*i]);
00395 Mnorm += sqrt(dx*dx+dy*dy);
00396 }
00397 if ( *n != 0)
00398 Mnorm /= (*n/2);
00399 *as = Mnorm/5.0;
00400 }
00401 C2F(echelle2dl)(as,as,&ias,&ias1,&n1,&n1,"f2i");
00402 ias=10*ias;
00403 C2F(dr)(fname,str,xm,ym,n,&ias,style,iflag,PD0,PD0,PD0,dx4,lx0,lx1);
00404 FREE(xm) ;
00405 FREE(ym) ;
00406 }
00407
00408
00409
00410
00411
00412 void drawaxis_1(char *fname, char *str, integer *v1, integer *nsteps, integer *v2, integer *v3, integer *x7, integer *x8, double *alpha, double *size, double *initpoint, double *dx4, integer lx0, integer lx1)
00413 {
00414 integer initpoint1[2],alpha1;
00415 double size1[3];
00416 alpha1=inint( *alpha);
00417 C2F(axis2d)(alpha,initpoint,size,initpoint1,size1);
00418
00419 C2F(dr)(fname,str,&alpha1,nsteps,PI0,initpoint1,x7,x8,size1,PD0,PD0,PD0,lx0,lx1);
00420 }
00421
00422
00423
00424
00425 void cleararea_1(char *fname, char *str, integer *v1, integer *v2, integer *v3, integer *v4, integer *x7, integer *x8, double *x, double *y, double *w, double *h, integer lx0, integer lx1)
00426 {
00427 integer x1,yy1,w1,h1,n=1;
00428 x1 = XDouble2Pixel(*x);
00429 yy1 = YDouble2Pixel(*y);
00430 C2F(echelle2dl)(w,h,&w1,&h1,&n,&n,"f2i");
00431 C2F(dr)(fname,str,&x1,&yy1,&w1,&h1,x7,x8,PD0,PD0,PD0,PD0,lx0,lx1);
00432 }
00433
00434
00435
00436 void xclick_1(char *fname, char *str, integer *ibutton, integer *iflag, integer *istr, integer *x5, integer *x6, integer *x7, double *x, double *y, double *dx3, double *dx4, integer lx0, integer lx1)
00437 {
00438 integer x1,yy1,n=1;
00439 C2F(dr)(fname,str,ibutton,&x1,&yy1,iflag,istr,x7,PD0,PD0,dx3,dx4,lx0,lx1);
00440 if (*ibutton != -100) C2F(echelle2d)(x,y,&x1,&yy1,&n,&n,"i2f",3L);
00441 }
00442
00443
00444
00445 void xclick_2(char *fname, char *str, integer *ibutton, integer *iflag, integer *istr, integer *x1, integer *yy1, integer *x7, double *x, double *y, double *dx3, double *dx4, integer lx0, integer lx1)
00446 {
00447 integer n=1;
00448 C2F(dr)(fname,str,ibutton,x1,yy1,iflag,istr,x7,PD0,PD0,dx3,dx4,lx0,lx1);
00449 if (*ibutton != -100) C2F(echelle2d)(x,y,x1,yy1,&n,&n,"i2f",3L);
00450 }
00451
00452
00453
00454 void xclick_any_1(char *fname, char *str, integer *ibutton, integer *iwin, integer *iflag, integer *x5, integer *x6, integer *x7, double *x, double *y, double *dx3, double *dx4, integer lx0, integer lx1)
00455 {
00456 integer x1,y1_,n=1;
00457 integer verb=0,cur,na;
00458 C2F(dr)(fname,str,ibutton,&x1,&y1_,iwin,iflag,x7,PD0,PD0,PD0,PD0,lx0,lx1);
00459 if (*ibutton>=0){
00460 C2F(dr)("xget","window",&verb,&cur,&na,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00461 C2F(dr)("xset","window",iwin,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00462 C2F(echelle2d)(x,y,&x1,&y1_,&n,&n,"i2f",3L);
00463 C2F(dr)("xset","window",&cur,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00464 }
00465 }
00466
00467
00468
00469
00470 void xgetmouse_1(char *fname, char *str, integer *ibutton, integer *iflag, integer *v2, integer *x5, integer *x6, integer *x7, double *x, double *y, double *dx3, double *dx4, integer lx0, integer lx1)
00471 {
00472 integer x1,yy1,n=1;
00473 C2F(dr)(fname,str,ibutton,&x1,&yy1,iflag,x6,x7,PD0,PD0,dx3,dx4,lx0,lx1);
00474 if (*ibutton != -100) C2F(echelle2d)(x,y,&x1,&yy1,&n,&n,"i2f",3L);
00475 }
00476
00477
00478
00479
00480 void xgetmouse2(char *fname, char *str, integer *ibutton, integer *iflag, integer *x1, integer *yy1, integer *x6, integer *x7, double *x, double *y, double *dx3, double *dx4, integer lx0, integer lx1)
00481 {
00482 integer n=1;
00483 C2F(dr)(fname,str,ibutton,x1,yy1,iflag,x6,x7,PD0,PD0,dx3,dx4,lx0,lx1);
00484
00485 if (*ibutton != -100) C2F(echelle2d)(x,y,x1,yy1,&n,&n,"i2f",3L);
00486 }
00487
00488
00489
00490
00491
00492 void fillarc_1(char *fname, char *str, integer *v1, integer *v2, integer *v3, integer *v4, integer *angle1, integer *angle2, double *x, double *y, double *width, double *height, integer lx0, integer lx1)
00493 {
00494 integer x1,yy1,w1,h1,n=1;
00495 x1 = XDouble2Pixel(*x);
00496 yy1 = YDouble2Pixel(*y);
00497 C2F(echelle2dl)(width,height,&w1,&h1,&n,&n,"f2i");
00498 C2F(dr)(fname,str,&x1,&yy1,&w1,&h1,angle1,angle2,PD0,PD0,PD0,PD0,lx0,lx1);
00499 }
00500
00501
00502
00503
00504 void fillrectangle_1(char *fname, char *str, integer *v1, integer *v2, integer *v3, integer *v4, integer *x7, integer *x8, double *x, double *y, double *width, double *height, integer lx0, integer lx1)
00505 {
00506 integer x1,yy1,w1,h1,n=1;
00507 x1 = XDouble2Pixel(*x);
00508 yy1 = YDouble2Pixel(*y);
00509 C2F(echelle2dl)(width,height,&w1,&h1,&n,&n,"f2i");
00510 C2F(dr)(fname,str,&x1,&yy1,&w1,&h1,x7,x8,PD0,PD0,PD0,PD0,lx0,lx1);
00511 }
00512
00513
00514
00515
00516
00517 void drawpolyline_1(char *fname, char *str, integer *n, integer *v1, integer *v2, integer *closeflag, integer *x7, integer *x8, double *vx, double *vy, double *dx3, double *dx4, integer lx0, integer lx1)
00518 {
00519 integer *xm,*ym,err=0,n2=1;
00520 Myalloc(&xm,&ym,*n,&err);
00521 if (err == 1) return;
00522 C2F(echelle2d)(vx,vy,xm,ym,n,&n2,"f2i",3L);
00523 C2F(dr)(fname,str,n,xm,ym,closeflag,x7,x8,PD0,PD0,dx3,dx4,lx0,lx1);
00524 FREE(xm) ;
00525 FREE(ym) ;
00526 }
00527
00528
00529
00530
00531
00532 void fillpolylines_1(char *fname, char *str, integer *v1, integer *v2, integer *fillvect, integer *n, integer *p, integer *x8, double *vx, double *vy, double *dx3, double *dx4, integer lx0, integer lx1)
00533 {
00534 integer *xm,*ym,err=0,i,j;
00535 integer *px,*py;
00536 Myalloc(&xm,&ym,(*n)*(*p),&err);
00537 if (err == 1) return;
00538 C2F(echelle2d)(vx,vy,xm,ym,n,p,"f2i",3L);
00539
00540
00541 if (*v1==2) {
00542 px=(integer *)MALLOC(((*p)+1)*sizeof(integer));
00543 py=(integer *)MALLOC(((*p)+1)*sizeof(integer));
00544 if (px==NULL || py==NULL) {
00545 sciprint("fillpolylines_1 : malloc No more Place\n");
00546 return;
00547 }
00548 for (i=0 ; i< (*n) ;i++) {
00549 for (j=0; j<(*p); j++) {
00550 px[j]=xm[(*p)*i+j];
00551 py[j]=ym[(*p)*i+j];
00552 }
00553 px[*p]=px[0];
00554 py[*p]=py[0];
00555 scilab_shade(px,py,&fillvect[(*p)*i],*p,(fillvect[(*p)*i]));
00556 }
00557 FREE(px);
00558 FREE(py);
00559 }
00560 else C2F(dr)(fname,str,xm,ym,fillvect,n,p,x8,PD0,PD0,dx3,dx4,lx0,lx1);
00561
00562
00563
00564
00565 }
00566
00567
00568
00569 void drawpolymark_1(char *fname, char *str, integer *n, integer *v1, integer *v2, integer *x6, integer *x7, integer *x8, double *vx, double *vy, double *dx3, double *dx4, integer lx0, integer lx1)
00570 {
00571 integer *xm,*ym,err=0,n2=1;
00572 Myalloc(&xm,&ym,*n,&err);
00573 if (err == 1) return;
00574 C2F(echelle2d)(vx,vy,xm,ym,n,&n2,"f2i",3L);
00575 C2F(dr)(fname,str,n,xm,ym,x6,x7,x8,PD0,PD0,dx3,dx4,lx0,lx1);
00576 FREE(xm) ;
00577 FREE(ym) ;
00578 }
00579
00580
00581
00582
00583
00584 void displaynumbers_1(char *fname, char *str, integer *v1, integer *v2, integer *v3, integer *v4, integer *n, integer *flag, double *x, double *y, double *z, double *alpha, integer lx0, integer lx1)
00585 {
00586 integer *xm,*ym,err=0,n2=1;
00587 Myalloc(&xm,&ym,*n,&err);
00588 if (err == 1) return;
00589 C2F(echelle2d)(x,y,xm,ym,n,&n2,"f2i",3L);
00590 C2F(dr)(fname,str,xm,ym,PI0,PI0,n,flag,z,alpha,PD0,PD0,lx0,lx1);
00591 FREE(xm) ;
00592 FREE(ym) ;
00593 }
00594
00595
00596
00597
00598
00599 void drawpolylines_1(char *fname, char *str, integer *v1, integer *v2, integer *drawvect, integer *n, integer *p, integer *x8, double *vx, double *vy, double *dx3, double *dx4, integer lx0, integer lx1)
00600 {
00601 integer *xm,*ym,err=0;
00602 Myalloc(&xm,&ym,(*n)*(*p),&err);
00603 if (err == 1) return;
00604 C2F(echelle2d)(vx,vy,xm,ym,n,p,"f2i",3L);
00605 C2F(dr)(fname,str,xm,ym,drawvect,n,p,x8,PD0,PD0,dx3,dx4,lx0,lx1);
00606 FREE(xm) ;
00607 FREE(ym) ;
00608 }
00609
00610
00611
00612 void drawrectangle_1(char *fname, char *str, integer *v1, integer *v2, integer *v3, integer *v4, integer *x7, integer *x8, double *x, double *y, double *w, double *h, integer lx0, integer lx1)
00613 {
00614 integer xm[4],n2=4;
00615 double vect[4];
00616 vect[0]=*x;vect[1]=*y;vect[2]=*w;vect[3]=*h;
00617 C2F(rect2d)(vect,xm,&n2,"f2i");
00618 C2F(dr)(fname,str,xm,xm+1,xm+2,xm+3,x7,x8,PD0,PD0,PD0,PD0,lx0,lx1);
00619 }
00620
00621
00622
00623 void drawrectangles_1(char *fname, char *str, integer *v1, integer *fillvect, integer *n, integer *x6, integer *x7, integer *x8, double *vects, double *dx2, double *dx3, double *dx4, integer lx0, integer lx1)
00624 {
00625 integer *xm,err=0,n2;
00626 Myalloc1(&xm,4*(*n),&err);
00627 if (err == 1) return;
00628 C2F(rect2d)(vects,xm,(n2=4*(*n),&n2),"f2i");
00629 C2F(dr)(fname,str,xm,fillvect,n,x6,x7,x8,PD0,dx2,dx3,dx4,lx0,lx1);
00630 FREE(xm) ;
00631 }
00632
00633
00634
00635 void drawsegments_1(char *fname, char *str, integer *style, integer *iflag, integer *n, integer *x6, integer *x7, integer *x8, double *vx, double *vy, double *dx3, double *dx4, integer lx0, integer lx1)
00636 {
00637 integer *xm,*ym,err=0,n2=1;
00638 Myalloc(&xm,&ym,*n,&err);
00639 if (err == 1) return;
00640 C2F(echelle2d)(vx,vy,xm,ym,n,&n2,"f2i",3L);
00641 C2F(dr)(fname,str,xm,ym,n,style,iflag,x8,PD0,PD0,dx3,dx4,lx0,lx1);
00642 FREE(xm) ;
00643 FREE(ym) ;
00644 }
00645
00646
00647
00648 void displaystring_1(char *fname, char *string, integer *v1, integer *v2, integer *v3, integer *flag, integer *x7, integer *x8, double *x, double *y, double *angle, double *dx4, integer lx0, integer lx1)
00649 {
00650 integer x1,yy1;
00651 x1 = XDouble2Pixel(*x);
00652 yy1 = YDouble2Pixel(*y);
00653 C2F(dr)(fname,string,&x1,&yy1,PI0,flag,x7,x8,angle,PD0,PD0,dx4,lx0,lx1);
00654 }
00655
00656
00657
00658
00659
00660
00661 void boundingbox_1(char *fname, char *string, integer *v1, integer *v2, integer *v3, integer *x6, integer *x7, integer *x8, double *x, double *y, double *rect, double *dx4, integer lx0, integer lx1)
00662 {
00663 integer x1,yy1,n=1,rect1[4];
00664
00665 x1 = XDouble2Pixel(*x);
00666 yy1 = YDouble2Pixel(*y);
00667
00668 C2F(dr)(fname,string,&x1,&yy1,rect1,x6,x7,x8,PD0,PD0,PD0,dx4,lx0,lx1);
00669
00670
00671 C2F(echelle2d)(rect,rect+1,rect1,rect1+1,&n,&n,"i2f",3L);
00672 C2F(echelle2dl)(rect+2,rect+3,rect1+2,rect1+3,&n,&n,"i2f");
00673
00674 }
00675
00676
00677
00678
00679
00680
00681 #define FONTMAXSIZE 6
00682
00683 void xstringb_1(char *fname, char *str, integer *fflag, integer *v2, integer *v3, integer *v4, integer *x7, integer *x8, double *xd, double *yd, double *wd, double *hd, integer lx0, integer lx1)
00684 {
00685 integer x,y,w,h,wbox,hbox,size,n=1;
00686 integer fontid[2],narg,verbose=0;
00687 x = XDouble2Pixel(*xd);
00688 y = YDouble2Pixel(*yd);
00689 C2F(echelle2dl)(wd,hd,&wbox,&hbox,&n,&n,"f2i");
00690 C2F(sciwin)();
00691 C2F(dr)("xget","font",&verbose,fontid,&narg,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00692 size = FONTMAXSIZE;
00693 w = wbox + 1;
00694 h = hbox + 1;
00695
00696 if ( *fflag == 1 )
00697 {
00698 while ( (w > wbox || h > hbox) && size >=0 )
00699 {
00700 size--;
00701 C2F(dr)("xset","font",fontid,&size,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00702 GSciString(0,&x,&y,str,&w,&h);
00703 }
00704 }
00705 else
00706 GSciString(0,&x,&y,str,&w,&h);
00707 x = (int) (x + (wbox - w)/2.0);
00708 y = (int) (y - (hbox - h)/2.0);
00709 GSciString(1,&x,&y,str,&w,&h);
00710 C2F(dr)("xset","font",fontid,fontid+1,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
00711 }
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721 void GSciString(int Dflag, integer *x, integer *y, char *StrMat, integer *w, integer *h)
00722 {
00723 char *p = StrMat,*p1,*p2,*plast;
00724 integer yi=*y;
00725 integer wc =0;
00726 char name[4];
00727 GetDriver1(name,PI0,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0);
00728 p1 = plast = p+ strlen(p);
00729 while (1)
00730 {
00731 integer logrect[4];
00732 double angle=0.0;
00733
00734 integer flag=0;
00735 p2 =p1 ; *p1 = '\0';
00736 while ( p1 != p && *p1 != '\n' )
00737 p1--;
00738 if ( Dflag == 1)
00739 C2F(dr)("xstring",( p1 == p ) ? p1 : p1 +1,
00740 x,&yi,PI0,&flag,PI0,PI0,&angle,PD0,PD0,PD0,0L,0L);
00741 C2F(dr)("xstringl",
00742 ( p1 == p ) ? p1 : p1 +1,
00743 x,&yi,logrect,PI0,PI0,PI0,
00744 PD0,PD0,PD0,PD0,0L,0L);
00745 if ( p2 != plast) *p2 = '\n';
00746 wc = Max( wc , logrect[2]);
00747 if ( p == p1 )
00748 {
00749 yi=yi- logrect[3];
00750 break;
00751 }
00752 else
00753 {
00754 yi=(int) (yi-1.2*logrect[3]);
00755 }
00756 }
00757 *w = wc ;
00758 *h = *y - yi;
00759 }
00760
00761
00762
00763
00764
00765 static void Myalloc(integer **xm, integer **ym, integer n, integer *err)
00766 {
00767 if ( n != 0)
00768 {
00769 *xm= MALLOC( n * sizeof(integer) ) ;
00770 *ym= MALLOC( n * sizeof(integer) ) ;
00771 if ( *xm == 0 || *ym == 0 )
00772 {
00773 sciprint("malloc: Running out of memory\n");
00774 *err=1;
00775 }
00776 }
00777 }
00778
00779 static void Myalloc1(integer **xm, integer n, integer *err)
00780 {
00781 if ( n != 0)
00782 {
00783 if (( *xm= MALLOC( n * sizeof(integer))) == 0 )
00784 {
00785 sciprint("malloc: Running out of memory\n");
00786 *err=1;
00787 }
00788 }
00789 }
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802