00001 #include "scicos_block.h"
00002 #include <math.h>
00003 #include "machine.h"
00004 static int c__1 = 1;
00005 static int c__0 = 0;
00006 static int c_n1 = -1;
00007 static int c__3 = 3;
00008 static integer c__5 = 5;
00009 static integer c__6 = 6;
00010
00011 void bouncexy(scicos_block *block,int flag)
00012 {
00013 int nevprt=block->nevprt;
00014 double t;
00015 double *z__;
00016 int nz;
00017 double *rpar;
00018 int nrpar, *ipar, nipar;
00019 double *u,*y;
00020 int nu,kfun;
00021
00022
00023 static int cur = 0;
00024 static int verb = 0;
00025 static int c400=400;
00026 int i__1;
00027
00028 static double rect[4];
00029 extern int C2F(getlabel)();
00030 static double xmin, ymin, xmax, ymax;
00031 extern int C2F(sxevents)();
00032 static int i__, n, v;
00033 extern int C2F(plot2d)();
00034 static int na;
00035 extern int C2F(dr)();
00036 static double dv;
00037 static int on;
00038 static double zz[10];
00039 static int nxname;
00040 extern int C2F(sciwin)(), C2F(dr1)();
00041 static char buf[40];
00042 static int wid, nax[4];
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 nevprt=block->nevprt;
00055 nz=block->nz;
00056 nrpar=block->nrpar;
00057 nipar=block->nipar;
00058 nu=block->insz[0];
00059 z__=block->z;
00060 rpar=block->rpar;
00061 ipar=block->ipar;
00062 u=block->inptr[0];
00063 y=block->inptr[1];
00064 t=get_scicos_time();
00065
00066
00067
00068 --u;
00069 --y;
00070 --ipar;
00071 --rpar;
00072 --z__;
00073
00074
00075
00076 if (flag == 2) {
00077 wid = ipar[1];
00078 n = nu;
00079
00080 C2F(dr1)("xget\000", "window\000", &verb, &cur, &na, &v, &v, &v, &dv, &dv,
00081 &dv, &dv);
00082 if (cur != wid) {
00083 C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv,
00084 &dv, &dv);
00085 }
00086 C2F(dr1)("xsetdr\000", "X11\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
00087 dv);
00088 rect[0] = xmin;
00089 rect[1] = ymin;
00090 rect[2] = xmax;
00091 rect[3] = ymax;
00092 C2F(plot2d)(rect, &rect[1], &c__1, &c__1, &c_n1, "030", buf, rect, nax);
00093
00094 i__1 = nu;
00095 for (i__ = 1; i__ <= i__1; ++i__) {
00096 z__[(i__ - 1) * 6 + 1] = u[i__] - z__[(i__ - 1) * 6 + 3] / 2;
00097 z__[(i__ - 1) * 6 + 2] = y[i__] + z__[(i__ - 1) * 6 + 4] / 2;
00098 }
00099 C2F(dr1)("xset\000", "wwpc\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
00100 dv);
00101 C2F(dr1)("xfarcs\000", "v\000", &v, &ipar[3], &n, &v, &v, &v, &z__[1], &
00102 dv, &dv, &dv);
00103 xmin = rpar[1];
00104 xmax = rpar[2];
00105 ymin = rpar[3];
00106 ymax = rpar[4];
00107 zz[0] = xmin;
00108 zz[1] = xmin;
00109 zz[2] = xmax;
00110 zz[3] = xmax;
00111 zz[4] = xmin;
00112 zz[5] = ymax;
00113 zz[6] = ymin;
00114 zz[7] = ymin;
00115 zz[8] = ymax;
00116 zz[9] = ymax;
00117 C2F(dr1)("xpolys\000", "v\000", &v, &v, &c__1, &c__1, &c__5, &v, zz, &zz[5], &dv, &dv);
00118 C2F(dr1)("xset\000", "wshow\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
00119 dv);
00120 } else if (flag == 4) {
00121 wid = ipar[1];
00122 n = nu;
00123 xmin = rpar[1];
00124 xmax = rpar[2];
00125 ymin = rpar[3];
00126 ymax = rpar[4];
00127 nax[0] = 2;
00128 nax[1] = 10;
00129 nax[2] = 2;
00130 nax[3] = 10;
00131 C2F(sciwin)();
00132
00133 C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv,
00134 &dv, &dv);
00135
00136 C2F(dr1)("xset\000", "wdim\000", &c400, &c400, &v, &v, &
00137 v, &v, &dv, &dv, &dv, &dv);
00138 C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv,
00139 &dv, &dv);
00140
00141 C2F(dr1)("xsetdr\000", "X11\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
00142 dv);
00143 on = 1;
00144 C2F(dr1)("xset\000", "pixmap\000", &on, &v, &v, &v, &v, &v, &dv, &dv, &dv,
00145 &dv);
00146 rect[0] = xmin;
00147 rect[1] = ymin;
00148 rect[2] = xmax;
00149 rect[3] = ymax;
00150 C2F(dr1)("xset\000", "use color\000", &c__1, &c__0, &c__0, &c__0, &c__0, &
00151 v, &dv, &dv, &dv, &dv);
00152 C2F(dr1)("xset\000", "alufunction\000", &c__3, &c__0, &c__0, &c__0, &c__0,
00153 &v, &dv, &dv, &dv, &dv);
00154 C2F(dr1)("xclear\000", "v\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
00155 dv);
00156 C2F(dr)("xstart\000", "v\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
00157 dv);
00158 C2F(dr1)("xset\000", "thickness\000", &c__1, &v, &v, &v, &v, &v, &dv, &dv,
00159 &dv, &dv);
00160 C2F(dr1)("xset\000", "dashes\000", &c__0, &c__0, &c__0, &c__0, &c__0, &v,
00161 &dv, &dv, &dv, &dv);
00162 C2F(plot2d)(rect, &rect[1], &c__1, &c__1, &c_n1, "030", buf, rect, nax);
00163
00164 zz[0] = xmin;
00165 zz[1] = xmin;
00166 zz[2] = xmax;
00167 zz[3] = xmax;
00168 zz[4] = xmin;
00169 zz[5] = ymax;
00170 zz[6] = ymin;
00171 zz[7] = ymin;
00172 zz[8] = ymax;
00173 zz[9] = ymax;
00174 C2F(dr1)("xpolys\000", "v\000", &v, &v, &c__1, &c__1, &c__5, &v, zz, &zz[5], &dv, &dv);
00175 C2F(dr1)("xset\000", "wshow\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
00176 dv);
00177 nxname = 40;
00178 kfun=get_block_number();
00179 C2F(getlabel)(&kfun, buf, &nxname);
00180 if (nxname > 39) {
00181 nxname = 39;
00182 }
00183 i__1 = nxname;
00184 *(buf+i__1)=*"\000";
00185 if (nxname == 1 && *(unsigned char *)buf == ' ' || nxname == 0) {
00186 } else {
00187 C2F(dr)("xname\000", buf, &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &dv);
00188 }
00189 C2F(sxevents)();
00190 }
00191 C2F(dr1)("xsetdr\000", "Rec\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &
00192 dv);
00193 }