=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/plot/if.c,v retrieving revision 1.25 retrieving revision 1.36 diff -u -p -r1.25 -r1.36 --- OpenXM_contrib2/asir2000/plot/if.c 2013/12/20 02:27:17 1.25 +++ OpenXM_contrib2/asir2000/plot/if.c 2017/09/04 01:57:53 1.36 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/plot/if.c,v 1.24 2013/12/19 05:48:24 saito Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/plot/if.c,v 1.35 2017/09/01 01:48:40 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -61,6 +61,8 @@ static struct oEGT ltime; static double r0; double get_rtime(); +void MSGdraw(char *); +char msg[128]; #if defined(ITV_TIME_CHECK) void tstart() { @@ -102,8 +104,9 @@ int open_canvas(NODE arg){ wsize=(LIST)ARG0(arg); wname=(STRING)ARG1(arg); - can=canvas[id=search_canvas()]; - can->mode=MODE_INTERACTIVE; + id=search_canvas(); + can=canvas[id]; + can->mode=modeNO(INTERACTIVE); if(!wsize){ can->width=DEFAULTWIDTH; can->height=DEFAULTHEIGHT; @@ -117,7 +120,6 @@ int open_canvas(NODE arg){ return id; } - int plot(NODE arg,int fn){ int id; NODE n; @@ -126,6 +128,8 @@ int plot(NODE arg,int fn){ LIST xrange,yrange,zrange,wsize; STRING wname; V v; + Real r; + double rr; formula=(P)ARG0(arg); xrange=(LIST)ARG1(arg); @@ -143,16 +147,20 @@ int plot(NODE arg,int fn){ n=BDY(yrange);can->vy=VR((P)BDY(n));n=NEXT(n); can->qymin=(Q)BDY(n);n=NEXT(n);can->qymax=(Q)BDY(n); can->ymin=ToReal(can->qymin);can->ymax=ToReal(can->qymax); - } + } else if ( !formula || NUM(formula) ) { + devalr(CO,(Obj)formula,(Obj *)&r); rr = ToReal(r); + can->ymin=rr-1; can->ymax=rr+1; + } can->mode=fn; if(zrange){ - n=BDY(zrange); can->zmin=ToReal(BDY(n)); + n=NEXT(BDY(zrange)); + can->zmin=ToReal(BDY(n)); n=NEXT(n);can->zmax=ToReal(BDY(n)); n=NEXT(n); - if(can->mode==MODE_CONPLOT)can->nzstep=QTOS((Q)BDY(n)); + if(can->mode==modeNO(CONPLOT))can->nzstep=n?QTOS((Q)BDY(n)):MAXGC; else { can->vx=VR((P)BDY(BDY(zrange))); - can->nzstep=QTOS((Q)BDY(n)); + can->nzstep=n?QTOS((Q)BDY(n)):DEFAULTPOLARSTEP; } } if(!wsize){ @@ -162,29 +170,28 @@ int plot(NODE arg,int fn){ can->width=QTOS((Q)BDY(BDY(wsize))); can->height=QTOS((Q)BDY(NEXT(BDY(wsize)))); } - if(wname) can->wname = BDY(wname); + if(wname) can->wname=BDY(wname); else can->wname=""; can->formula=formula; - if(can->mode==MODE_PLOT){ + if(can->mode==modeNO(PLOT)){ //plot + can->prec=argc(arg)==7 ? QTOS((Q)ARG6(arg)) : 0; plotcalc(can); create_canvas(can); plot_print(display,can); - } else if(can->mode==MODE_POLARPLOT){ - //polarplot - polarplotcalc(can); + } else if(can->mode==modeNO(POLARPLOT)){ + polarcalc(can); create_canvas(can); plot_print(display,can); } else { - //ifplot,conplot create_canvas(can); - ifplotmainOld(can); + ifplotmain(can); } copy_to_canvas(can); return id; } -void ifplotmainOld(struct canvas *can){ +void ifplotmain(struct canvas *can){ int i,width,height; double ** tabe; @@ -194,7 +201,7 @@ void ifplotmainOld(struct canvas *can){ define_cursor(can->window,runningcur); set_busy(can); set_selection(); calc(tabe,can,0); - if_printOld(display,tabe,can); + if_print(display,tabe,can); reset_selection(); reset_busy(can); define_cursor(can->window,normalcur); } @@ -209,7 +216,7 @@ int memory_plot(NODE arg,LIST *bytes){ double **tabe; int i; BYTEARRAY barray; - Q qw,qh; + Q qw,qh,prec; formula=(P)ARG0(arg); xrange=(LIST)ARG1(arg); @@ -229,13 +236,14 @@ int memory_plot(NODE arg,LIST *bytes){ if( zrange ){ n=NEXT(BDY(zrange)); can->zmin=ToReal(BDY(n)); n=NEXT(n); can->zmax=ToReal(BDY(n)); - if(n=NEXT(n)) can->nzstep=QTOS((Q)BDY(n)); + n=NEXT(n); + if(n) can->nzstep=QTOS((Q)BDY(n)); else can->nzstep=MAXGC; - can->mode=MODE_CONPLOT; + can->mode=modeNO(CONPLOT); } else - can->mode=MODE_IFPLOT; + can->mode=modeNO(IFPLOT); } else - can->mode=MODE_PLOT; + can->mode=modeNO(PLOT); if( !wsize ){ can->width=DEFAULTWIDTH; can->height=DEFAULTHEIGHT; } else { @@ -244,7 +252,8 @@ int memory_plot(NODE arg,LIST *bytes){ } can->wname=""; can->formula=formula; - if( can->mode == MODE_PLOT ){ + if( can->mode==modeNO(PLOT)){ + can->prec = argc(arg)==6 ? QTOS((Q)ARG5(arg)) : 0; plotcalc(can); memory_print(can,&barray); STOQ(can->width,qw); STOQ(can->height,qh); @@ -261,47 +270,48 @@ int memory_plot(NODE arg,LIST *bytes){ n=mknode(3,qw,qh,barray); MKLIST(*bytes,n); } + return 0; } int plotover(NODE arg){ - int id,orgcolor,color; + int id; + unsigned int orgcolor; P formula; struct canvas *can; VL vl,vl0; id=QTOS((Q)ARG0(arg)); formula=(P)ARG1(arg); - color=QTOS((Q)ARG2(arg)); - can=canvas[id]; orgcolor=can->color; - can->color=color; + if(argc(arg)==3) can->color=QTOS((Q)ARG2(arg)); + else can->color=0; get_vars_recursive((Obj)formula,&vl); for(vl0=vl;vl0;vl0=NEXT(vl0)) if(vl0->v->attr==(pointer)V_IND) if(vl->v!=can->vx && vl->v!=can->vy)return -1; - if(argc(arg)==3) can->color=QTOS((Q)ARG2(arg)); - else can->color=0; -#if !defined(VISUAL) +#if !defined(VISUAL) && !defined(__MINGW32__) set_drawcolor(can->color); #endif current_can=can; can->formula=formula; - if(can->mode==MODE_PLOT){ + if(can->mode==modeNO(PLOT)){ + can->prec = argc(arg)==3 ? QTOS((Q)ARG2(arg)) : 0; plotcalc(can); plot_print(display,can); - } else ifplotmainOld(can); + } else ifplotmain(can); copy_to_canvas(can); - can->color=color; -#if !defined(VISUAL) + can->color=orgcolor; +#if !defined(VISUAL) && !defined(__MINGW32__) set_drawcolor(can->color); #endif - return index; + return id; } int drawcircle(NODE arg){ -#if !defined(VISUAL) - int id,index,wx,wy,wr,c; +#if !defined(VISUAL) && !defined(__MINGW32__) + int id,index,wx,wy,wr; + unsigned int c; pointer ptr; Q ret; LIST xyr; @@ -329,7 +339,8 @@ int drawcircle(NODE arg){ } int draw_obj(NODE arg){ - int index,color,x,y,u,v,len,r; + int index,x,y,u,v,len,r; + unsigned int color; NODE obj,n; RealVect *vect; struct canvas *can; @@ -374,14 +385,15 @@ int draw_obj(NODE arg){ set_lasterror("draw_obj : invalid request"); return -1; } -#if !defined(VISUAL) +#if !defined(VISUAL) && !defined(__MINGW32__) set_drawcolor(can->color); #endif return 0; } int draw_string(NODE arg){ - int index,x,y,color; + int index,x,y; + unsigned int color; char *str; NODE pos; struct canvas *can; @@ -406,7 +418,7 @@ int draw_string(NODE arg){ x=(int)ToReal((Q)ARG0(pos)); y=(int)ToReal((Q)ARG1(pos)); draw_character_string(display,can,x,y,str,color); -#if !defined(VISUAL) +#if !defined(VISUAL) && !defined(__MINGW32__) set_drawcolor(can->color); #endif return 0; @@ -423,6 +435,7 @@ int clear_canvas(NODE arg){ copy_to_canvas(can); // clear the history can->history=0; + return 0; } #define RealtoDbl(r) ((r)?BDY(r):0.0) @@ -451,7 +464,7 @@ int arrayplot(NODE arg){ can->width=QTOS((Q)BDY(BDY(wsize))); can->height=QTOS((Q)BDY(NEXT(BDY(wsize)))); } - can->wname=wname; can->formula=0; can->mode=MODE_PLOT; + can->wname=wname; can->formula=0; can->mode=modeNO(PLOT); create_canvas(can); w=array->len; h=can->height; @@ -488,7 +501,7 @@ int arrayplot(NODE arg){ copy_to_canvas(can); return id; } - +/* void ifplot_resize(struct canvas *can,POINT spos,POINT epos){ struct canvas *ncan; struct canvas fakecan; @@ -497,7 +510,6 @@ void ifplot_resize(struct canvas *can,POINT spos,POINT Q s,t; int new; int w,h,m; - if(XC(spos)precise && !can->wide){ fakecan=*can; @@ -561,7 +573,7 @@ void ifplot_resize(struct canvas *can,POINT spos,POINT if(can->precise && !can->wide){ current_can=can; alloc_pixmap(ncan); -#if defined(VISUAL) +#if defined(VISUAL) || defined(__MINGW32__) ncan->real_can=can; #endif qifplotmain(ncan); @@ -575,15 +587,13 @@ void ifplot_resize(struct canvas *can,POINT spos,POINT } } } +*/ void plot_resize(struct canvas *can,POINT spos,POINT epos){ struct canvas *ncan; - Q dx,dx2,xmin,xmax,xmid; + Q dx,dx2,xmin,xmax,xmid,sx,ex,cw,ten,two,s,t; double dy,ymin,ymax,ymid; - Q sx,ex,cw,ten,two; - Q s,t; - int new; - int w,h,m; + int new,w,h,m; if( XC(spos)wname=can->wname; ncan->vx=can->vx; ncan->vy=can->vy; ncan->formula=can->formula; + ncan->color=can->color; w=XC(epos)-XC(spos); h=YC(epos)-YC(spos); m=MAX(can->width,can->height); if( w>h ){ - ncan->width=m; ncan->height=m * h/w; + ncan->width=m; + ncan->height=m * h/w; } else { - ncan->width=m * w/h; ncan->height=m; + ncan->width=m * w/h; + ncan->height=m; } if( can->wide ){ STOQ(10,ten); STOQ(2,two); subq(can->qxmax,can->qxmin,&t); mulq(t,ten,&dx); addq(can->qxmax,can->qxmin,&t); divq(t,two,&xmid); divq(dx,two,&dx2); subq(xmid,dx2,&xmin); addq(xmid,dx2,&xmax); - dy=(can->ymax-can->ymin)*10; ymid=(can->ymax+can->ymin)/2; ymin=ymid-dy/2; ymax=ymid+dy/2; } else { subq(can->qxmax,can->qxmin,&dx); - xmin=can->qxmin; xmax=can->qxmax; - + xmin=can->qxmin; + xmax=can->qxmax; dy=can->ymax-can->ymin; - ymin=can->ymin; ymax=can->ymax; + ymin=can->ymin; + ymax=can->ymax; } STOQ(XC(spos),sx); STOQ(XC(epos),ex); STOQ(can->width,cw); mulq(sx,dx,&t); divq(t,cw,&s); addq(xmin,s,&ncan->qxmin); mulq(ex,dx,&t); divq(t,cw,&s); addq(xmin,s,&ncan->qxmax); ncan->xmin=ToReal(ncan->qxmin); ncan->xmax=ToReal(ncan->qxmax); - ncan->ymin=ymax-YC(epos)*dy/can->height; ncan->ymax=ymax-YC(spos)*dy/can->height; - + ncan->prec = can->prec; create_canvas(ncan); - plotcalc(ncan); - plot_print(display,ncan); + + switch (ncan->mode){ + case 0://IFPLOT + case 1://CONPLOT + ifplotmain(ncan); + break; + case 2://PLOT + plotcalc(ncan); + plot_print(display,ncan); + break; + case 4://POLARPLOT + polarcalc(ncan); + plot_print(display,ncan); + break; + case 30://MEMORY_PLOT + break; + case 31://ARRAYPLOT + break; + case 33://DRAWCIRCLE + break; + case 34://DRAW_OBJ + break; + case 35://DRAW_STRING + break; + case 36://OBJ_CP + break; + case 6://IFPLOTD + case 7://IFPLOTQ + case 8://IFPLOTB + case 9://INEQND + case 10://INEQNQ + case 11://INEQNB + case 21://CONPLOTD + case 22://CONPLOTQ + case 23://CONPLOTB + case 24://ITVIFPLOT + //ifplotNG + ifplotmainNG(ncan); + break; + case 12://INEQNDAND + case 13://INEQNQAND + case 14://INEQNBAND + case 15://INEQNDOR + case 16://INEQNQOR + case 17://INEQNBOR + case 18://INEQNDXOR + case 19://INEQNQXOR + case 20://INEQNBXOR + case 25://PLOTOVERD + case 26://PLOTOVERQ + case 27://PLOTOVERB + //ifplotOP + ifplotmainNG(ncan); + break; + case 38://POLARPLOTD + //polarplotNG + polarcalcNG(ncan); + polar_print(display,ncan); + break; + } copy_to_canvas(ncan); } } @@ -651,25 +721,23 @@ void qifplotmain(struct canvas *can) } //*******************ifplotNG -int ifplotNG(NODE arg,char *func){ - int id,orgcolor,color,op_code; +int ifplotNG(NODE arg,int func){ + int id,op_code; + unsigned int color; NODE n; struct canvas *can; P formula; LIST xrange,yrange,zrange,wsize; STRING wname; + can=canvas[id=search_canvas()]; formula=(P)ARG0(arg); - color=QTOS((Q)ARG1(arg)); + can->color=QTOS((Q)ARG1(arg)); xrange=(LIST)ARG2(arg); yrange=(LIST)ARG3(arg); zrange=(LIST)ARG4(arg); wsize=(LIST)ARG5(arg); wname=(STRING)ARG6(arg); - - can=canvas[id=search_canvas()]; - orgcolor=can->color; - can->color=color; can->division=0; // set canvas data if(xrange){ @@ -697,67 +765,52 @@ int ifplotNG(NODE arg,char *func){ if(wname) can->wname=BDY(wname); else can->wname=""; can->formula=formula; - set_drawcolor(color); - if(!strcmp(func,"ifplot"))can->mode=MODE_IFPLOT; - else if(!strcmp(func,"ifplotD"))can->mode=MODE_IFPLOTD; - else if(!strcmp(func,"ifplotQ"))can->mode=MODE_IFPLOTQ; - else if(!strcmp(func,"ifplotB"))can->mode=MODE_IFPLOTB; - else if(!strcmp(func,"ineqnD"))can->mode=MODE_INEQND; - else if(!strcmp(func,"ineqnQ"))can->mode=MODE_INEQNQ; - else if(!strcmp(func,"ineqnB"))can->mode=MODE_INEQNB; - else if(!strcmp(func,"conplotD"))can->mode=MODE_CONPLOTD; - else if(!strcmp(func,"conplotQ"))can->mode=MODE_CONPLOTQ; - else if(!strcmp(func,"conplotB"))can->mode=MODE_CONPLOTB; - else if(!strcmp(func,"itvifplot")){ - can->mode=MODE_ITVIFPLOT; - can->division=QTOS((Q)ARG7(arg)); - } - else can->mode=MODE_IFPLOTD; + set_drawcolor(can->color); + can->mode=func; create_canvas(can); - ifplotmain(can); - set_drawcolor(orgcolor); + ifplotmainNG(can); copy_to_canvas(can); - can->color=orgcolor; return id; } -int ifplotOP(NODE arg,char *func){ - //ineqnor[D,Q,B],ineqnand[D,Q,B],ineqnxor[D,Q,b] - int index,orgcolor,color,op_code; - NODE n; - struct canvas *can; +int ifplotOP(NODE arg,int func){ + //ineqnor[D,Q,B],ineqnand[D,Q,B],ineqnxor[D,Q,b],plotover[D,Q,B] + int index,op_code; + unsigned int orgcolor,color; P formula; - //s_id,fname,w_id,poly,color + struct canvas *can; + VL vl,vl0; + NODE n; + index=QTOS((Q)ARG0(arg)); formula=(P)ARG1(arg); color=QTOS((Q)ARG2(arg)); + // set canvas data can=canvas[index]; orgcolor=can->color; can->color=color; - // set canvas data can->formula=formula; - if(!strcmp(func,"ineqnandD"))can->mode=MODE_INEQNANDD; - else if(!strcmp(func,"ineqnandQ"))can->mode=MODE_INEQNANDQ; - else if(!strcmp(func,"ineqnandB"))can->mode=MODE_INEQNANDB; - else if(!strcmp(func,"ineqnorD"))can->mode=MODE_INEQNORD; - else if(!strcmp(func,"ineqnorQ"))can->mode=MODE_INEQNORQ; - else if(!strcmp(func,"ineqnorB"))can->mode=MODE_INEQNORB; - else if(!strcmp(func,"ineqnxorD"))can->mode=MODE_INEQNXORD; - else if(!strcmp(func,"ineqnxorQ"))can->mode=MODE_INEQNXORQ; - else if(!strcmp(func,"ineqnxorB"))can->mode=MODE_INEQNXORB; - else if(!strcmp(func,"plotoverD"))can->mode=MODE_PLOTOVERD; - else if(!strcmp(func,"plotoverQ"))can->mode=MODE_PLOTOVERQ; - else if(!strcmp(func,"plotoverB"))can->mode=MODE_PLOTOVERB; - else can->mode=MODE_IFPLOTD; + current_can=can; + get_vars_recursive((Obj)formula,&vl); + for(vl0=vl;vl0;vl0=NEXT(vl0)) + if(vl0->v->attr==(pointer)V_IND) + if(vl->v!=can->vx && vl->v!=can->vy)return -1; +#if !defined(VISUAL) && !defined(__MINGW32__) + set_drawcolor(can->color); +#endif + can->mode=func; set_drawcolor(color); - ifplotmain(can); + ifplotmainNG(can); set_drawcolor(orgcolor); copy_to_canvas(can); can->color=orgcolor; +#if !defined(VISUAL) && !defined(__MINGW32__) + set_drawcolor(can->color); +#endif return index; } -void ifplotmain(struct canvas *can){ +void ifplotmainNG(struct canvas *can){ int width,height,i,j,ix,iy,**mask; double **tabe; @@ -768,103 +821,103 @@ void ifplotmain(struct canvas *can){ set_busy(can); set_selection(); set_drawcolor(can->color); switch(can->mode){ - case MODE_IFPLOTD: + case 6://IFPLOTD calc(tabe,can,0); - if_print(display,tabe,can,1); + if_printNG(display,tabe,can,1); break; - case MODE_IFPLOTQ: + case 7://IFPLOTQ calcq(tabe,can,0); - if_print(display,tabe,can,1); + if_printNG(display,tabe,can,1); break; - case MODE_IFPLOTB: + case 8://IFPLOTB calcb(tabe,can,0); - if_print(display,tabe,can,0); + if_printNG(display,tabe,can,0); break; -#if defined(INTERVAL) - case MODE_INEQND: + case 9://INEQND calc(tabe,can,0); area_print(display,tabe,can,0); break; - case MODE_INEQNQ: + case 10://INEQNQ calcq(tabe,can,0); area_print(display,tabe,can,0); break; - case MODE_INEQNB: + case 11://INEQNB calcb(tabe,can,0); area_print(display,tabe,can,0); break; - case MODE_INEQNANDD: + case 12://INEQNFAND calc(tabe,can,0); - area_print(display,tabe,can,0); + area_print(display,tabe,can,2); break; - case MODE_INEQNANDQ: + case 13://INEQNQAND calcq(tabe,can,0); area_print(display,tabe,can,2); break; - case MODE_INEQNANDB: + case 14://INEQNBAND calcb(tabe,can,0); area_print(display,tabe,can,2); break; - case MODE_INEQNORD: + case 15://INEQNDOR calc(tabe,can,0); area_print(display,tabe,can,3); break; - case MODE_INEQNORQ: + case 16://INEQNQOR calcq(tabe,can,0); area_print(display,tabe,can,3); break; - case MODE_INEQNORB: + case 17://INEQNBOR calcb(tabe,can,0); area_print(display,tabe,can,3); break; - case MODE_INEQNXORD: + case 18://INEQNDXOR calc(tabe,can,0); area_print(display,tabe,can,4); break; - case MODE_INEQNXORQ: + case 19://INEQNQXOR calcq(tabe,can,0); area_print(display,tabe,can,4); break; - case MODE_INEQNXORB: + case 20://INEQNBXOR calcb(tabe,can,0); area_print(display,tabe,can,4); break; - case MODE_CONPLOTD: + case 21://CONPLOTD calc(tabe,can,0); con_print(display,tabe,can); break; - case MODE_CONPLOTB: - calcb(tabe,can,0); + case 22://CONPLOTQ + calcq(tabe,can,0); con_print(display,tabe,can); break; - case MODE_CONPLOTQ: - calcq(tabe,can,0); + case 23://CONPLOTB + calcb(tabe,can,0); con_print(display,tabe,can); break; - case MODE_PLOTOVERD: +#if defined(INTERVAL) + case 24://ITVIFPLOT: + itvcalc(tabe,can,1); + if_printNG(display,tabe,can,1); + break; +#endif + case 25://PLOTOVERD calc(tabe,can,0); over_print(display,tabe,can,0); break; - case MODE_PLOTOVERQ: + case 26://PLOTOVERQ: calcq(tabe,can,0); over_print(display,tabe,can,0); break; - case MODE_PLOTOVERB: + case 27://PLOTOVERB: calcb(tabe,can,0); over_print(display,tabe,can,0); break; - case MODE_ITVIFPLOT: - itvcalc(tabe,can,1); - if_print(display,tabe,can,1); - break; -#endif } set_drawcolor(can->color); reset_selection(); reset_busy(can); define_cursor(can->window,normalcur); } -#if defined(INTERVAL) +#if !defined(VISUAL) && !defined(__MINGW32__) int objcp(NODE arg){ int idsrc, idtrg, op_code; struct canvas *cansrc, *cantrg; @@ -962,142 +1015,62 @@ void obj_op(struct canvas *cansrc, struct canvas *cant count_and_flush(); flush(); } - -//ifplotNG -/* -int ineqnover(NODE arg) -{ - int id; - struct canvas *can; - int orgcolor, op_code; - - id = QTOS((Q)ARG0(arg)); - can = canvas[id]; - orgcolor = can->color; - can->formula = (P)ARG1(arg); - can->color = QTOS((Q)ARG2(arg)); - op_code = QTOS((Q)ARG3(arg)); - can->mode = MODE_INEQNP; - ineqnmain(can, orgcolor, op_code); - return id; -} -void ineqnmain(struct canvas *can, int orgcolor, int op_code) -{ - int **mask; - double **tbl; - int i,j; - - current_can = can; - tbl = (double **)ALLOCA((can->height+1)*sizeof(double *)); - for ( i = 0; i <= can->height; i++ ) - tbl[i] = (double *)ALLOCA((can->width+1)*sizeof(double)); - mask = (int **)ALLOCA(can->height*sizeof(int *)); - for ( i = 0; i < can->height; i++) - mask[i] = (int *)ALLOCA(can->width*sizeof(int)); - - define_cursor(can->window,runningcur); - set_busy(can); set_selection(); -// ineqncalc(tbl, can, 1); - calc(tab,can,1); - for (j = 0; j < can->height; j++){ - for (i = 0; i < can->width; i++){ - if ( tbl[j][i] >= 0 ){ - if ( (tbl[j+1][i] <= 0 ) || - (tbl[j][i+1] <= 0) || - (tbl[j+1][i+1] <= 0) ) mask[j][i] = 0; - else mask[j][i] = 1; - } else { - if( (tbl[j+1][i] >= 0) || - (tbl[j][i+1] >= 0) || - (tbl[j+1][i+1] >= 0) ) mask[j][i] = 0; - else mask[j][i] = -1; - } - } - } - area_print(display, mask, can, op_code); - reset_selection(); - reset_busy(can); - define_cursor(can->window,normalcur); -#if !defined(VISUAL) - set_drawcolor(orgcolor); - can->color = orgcolor; #endif - copy_to_canvas(can); -} -*/ + int polarplotNG(NODE arg){ - int id,color,orgcolor; + int i,id,width,height; NODE n; struct canvas *can; - P formula; - LIST xrange,wsize; + LIST range,geom; STRING wname; V v; - formula=(P)ARG0(arg); - xrange=(LIST)ARG1(arg); - color=QTOS((Q)ARG2(arg)); - wsize=(LIST)ARG3(arg); + id=search_canvas(); + can=canvas[id]; + can->mode=modeNO(POLARPLOTD); + can->formula=(P)ARG0(arg); + can->color=QTOS((Q)ARG1(arg)); + range=(LIST)ARG2(arg); + geom=(LIST)ARG3(arg); wname=(STRING)ARG4(arg); - can=canvas[id=search_canvas()]; - if(xrange){ - n=BDY(xrange); can->vx=VR((P)BDY(n)); n=NEXT(n); - can->qxmin=(Q)BDY(n); n=NEXT(n); can->qxmax=(Q)BDY(n); - can->xmin=ToReal(can->qxmin); can->xmax=ToReal(can->qxmax); + if(range){ + n=NEXT(BDY(range)); + can->zmin=ToReal(BDY(n)); + n=NEXT(n);can->zmax=ToReal(BDY(n)); + n=NEXT(n); + can->vx=VR((P)BDY(BDY(range))); + can->nzstep=n?QTOS((Q)BDY(n)):DEFAULTPOLARSTEP; } - can->mode=MODE_POLARPLOT; - if(!wsize){ - can->width=DEFAULTWIDTH; - can->height=DEFAULTHEIGHT; - } else { - can->width=QTOS((Q)BDY(BDY(wsize))); - can->height=QTOS((Q)BDY(NEXT(BDY(wsize)))); + if(geom){ + can->width=width=QTOS((Q)BDY(BDY(geom))); + can->height=height=QTOS((Q)BDY(NEXT(BDY(geom)))); } if(wname)can->wname=BDY(wname); else can->wname=""; - can->formula=formula; - orgcolor=can->color; - can->color=color; - polarplotcalc(can); + polarcalcNG(can); create_canvas(can); - plot_print(display,can); - can->color=orgcolor; - copy_to_canvas(can); + set_drawcolor(can->color); + polar_print(display,can); + reset_selection(); + reset_busy(can); + define_cursor(can->window,normalcur); return id; } -int plotoverD(NODE arg){ - int index, color; - P formula; +void MSGdraw(char *str){ + int id,x,y; struct canvas *can; - VL vl,vl0; - index=QTOS((Q)ARG0(arg)); - formula=(P)ARG1(arg); - can=canvas[index]; - color=can->color; - if(!can->window)return -1; - get_vars_recursive((Obj)formula,&vl); - for(vl0=vl;vl0;vl0=NEXT(vl0)) - if(vl0->v->attr==(pointer)V_IND) - if(vl->v!=can->vx && vl->v!=can->vy) return -1; - if(argc(arg)== 3)can->color=QTOS((Q)ARG2(arg)); - else can->color=0; -#if !defined(VISUAL) - set_drawcolor(can->color); -#endif - current_can=can; - can->formula=formula; - if(can->mode==MODE_PLOT){ - calcq(can); - plot_print(display,can); - } else ifplotmain(can); - copy_to_canvas(can); - can->color=color; -#if !defined(VISUAL) - set_drawcolor(can->color); -#endif - return index; + id=search_canvas(); + can=canvas[id]; + can->mode=modeNO(INTERACTIVE); + can->width=300; + can->height=300; + can->wname="MSG"; + x=100; + y=100; + create_canvas(can); + draw_character_string(display,can,x,y,str,0xff0000); } -#endif +