#include "scicos_block.h"#include <math.h>#include "machine.h"Include dependency graph for cmscope.c:

Go to the source code of this file.
Functions | |
| void | cmscope (scicos_block *block, int flag) |
Variables | |
| static int | c__1 = 1 |
| static int | c__0 = 0 |
| static int | c_n1 = -1 |
| static int | c__3 = 3 |
| static double | c_b103 = 0. |
| void cmscope | ( | scicos_block * | block, | |
| int | flag | |||
| ) |
Definition at line 11 of file cmscope.c.
References buf, C2F, c__0, c__1, c__3, c_b103, c_n1, cur, dr(), dr1(), dset(), F2C(), get_block_number(), get_scicos_time(), getlabel(), i, i__, scicos_block::inptr, scicos_block::insz, int, scicos_block::ipar, it, j, kfun, n, n1, n2, na, scicos_block::nin, scicos_block::nipar, nu, NULL, scicos_block::rpar, scicos_free(), scicos_malloc(), scicosclip(), sciwin(), set_block_error(), setscale2d(), sum(), t, v, and scicos_block::work.
00012 { 00013 double t; 00014 double *z__; 00015 double *rpar; 00016 int *ipar, nipar,nu; 00017 00018 //** Patch to OLD graphics 00019 00020 int default_graphics ; 00021 00022 00023 00024 static int cur = 0; 00025 static int verb = 0; 00026 00027 int i__1, i__2, i__3,nwid,kk,i,j,sum; 00028 00029 int kfun; 00030 00031 static double rect[4]; 00032 static int kwid; 00033 extern int C2F(getlabel)(); 00034 extern int C2F(dset)(); 00035 static int i__, k, n, v; 00036 static double frect[4], tsave; 00037 static int n1, n2; 00038 extern int C2F(plot2d)(), C2F(setscale2d)(); 00039 static int na; 00040 extern int C2F(dr)(); 00041 static double dt, dv; 00042 static int it, nxname; 00043 extern int C2F(sciwin)(), C2F(dr1)(), C2F(scicosclip)(); 00044 static char buf[40]; 00045 static int wid, iwd; 00046 static double per; 00047 static int nax[4], ilt, iwp; 00048 00049 /* Scicos block simulator */ 00050 /* ipar(1) = win_num */ 00051 /* ipar(2) = number of subwindows (input ports) */ 00052 /* ipar(3) = buffer size */ 00053 /* ipar(4:5) : window position */ 00054 /* ipar(6:7) : window dimension */ 00055 /* ipar(8:7+ipar(2)) = input port sizes */ 00056 /* ipar(8+ipar(2):7+ipar(2)+nu) = line type for ith curve */ 00057 /* rpar(1)=dt */ 00058 /* rpar(2)=periode */ 00059 /* rpar(3)=ymin_1 */ 00060 /* rpar(4)=ymax_1 */ 00061 /* ... */ 00062 /* rpar(2*k+1)=ymin_k */ 00063 /* rpar(2*k+2)=ymax_k */ 00064 00065 nu=block->insz[0]; 00066 rpar=block->rpar; 00067 ipar=block->ipar; 00068 nipar=block->nipar; 00069 t=get_scicos_time(); 00070 00071 --ipar; 00072 --rpar; 00073 00074 wid = ipar[1]; 00075 if(wid==-1){ 00076 wid=20000+get_block_number(); 00077 } 00078 nwid = ipar[2]; 00079 n = ipar[3]; 00080 per = rpar[2]; 00081 dt = rpar[1]; 00082 00083 if (flag == 2) { 00084 z__=*block->work; 00085 --z__; 00086 k = (int) z__[1]; 00087 if (k > 0) { 00088 n1 = (int) (z__[k + 1] / per); 00089 if (z__[k + 1] < 0.) { 00090 --n1; 00091 } 00092 } else { 00093 n1 = 0; 00094 } 00095 00096 tsave = t; 00097 if (dt > 0.) { 00098 t = z__[k + 1] + dt; 00099 } 00100 00101 n2 = (int) (t / per); 00102 if (t < 0.) { 00103 --n2; 00104 } 00105 00106 /* add new point to the buffer */ 00107 ++k; 00108 z__[k + 1] = t; 00109 kk=0; 00110 for (i=0;i<block->nin;++i){ 00111 for (j = 0; j <block->insz[i] ; ++j) { 00112 z__[n + 1 + kk * n + k] =block->inptr[i][j] ; 00113 ++kk; 00114 } 00115 } 00116 z__[1] = (double) k; 00117 if (n1 == n2 && k < n) { 00118 t = tsave; 00119 return ; 00120 } 00121 00122 /* plot 1:K points of the buffer */ 00123 C2F(dr1)("xget\000", "window\000", &verb, &cur, &na, &v, &v, &v, &dv, &dv, 00124 &dv, &dv); 00125 if (cur != wid) { 00126 C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, 00127 &dv, &dv); 00128 } 00129 C2F(dr1)("xset\000", "use color\000", &c__1, &c__0, &c__0, &c__0, &c__0, & 00130 v, &dv, &dv, &dv, &dv); 00131 C2F(dr1)("xset\000", "dashes\000", &c__0, &c__0, &c__0, &c__0, &c__0, &v, 00132 &dv, &dv, &dv, &dv); 00133 C2F(dr1)("xsetdr\000", "Rec\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, & 00134 dv); 00135 ilt = ipar[2] + 8; 00136 it = 0; 00137 /* loop on input ports */ 00138 if (k > 0) { 00139 i__1 = nwid; 00140 for (kwid = 1; kwid <= i__1; ++kwid) { 00141 rect[0] = per * n1; 00142 rect[1] = rpar[(kwid << 1) + 1]; 00143 rect[2] = per * (n1 + 1); 00144 rect[3] = rpar[(kwid << 1) + 2]; 00145 frect[0] = 0.; 00146 frect[1] = (kwid - 1) * (1. / nwid); 00147 frect[2] = 1.; 00148 frect[3] = 1. / nwid; 00149 C2F(setscale2d)(frect, rect, "nn\000"); 00150 C2F(scicosclip)(&c__1); 00151 /* loop on input port elements */ 00152 i__2 = ipar[kwid + 7]; 00153 for (i__ = 1; i__ <= i__2; ++i__) { 00154 C2F(dr1)("xpolys\000", "v\000", &v, &v, &ipar[ilt + it], & 00155 c__1, &k, &v, &z__[2], &z__[n + 2 + it * n], &dv, 00156 &dv); 00157 ++it; 00158 } 00159 C2F(scicosclip)(&c__0); 00160 } 00161 } 00162 /* shift buffer left */ 00163 z__[2] = z__[k + 1]; 00164 sum=0; 00165 for (i=0;i<block->nin;++i){ 00166 sum=sum+block->insz[i]; 00167 } i__1 = sum; 00168 for (i__ = 1; i__ <= i__1; ++i__) { 00169 z__[n + 1 + (i__ - 1) * n + 1] = z__[n + 1 + (i__ - 1) * n + k]; 00170 } 00171 z__[1] = 1.; 00172 if (n1 != n2) { 00173 /* clear window */ 00174 nax[0] = 2; 00175 nax[1] = 10; 00176 nax[2] = 5; 00177 nax[3] = 4; 00178 C2F(dr1)("xclear\000", "v\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, 00179 &dv); 00180 C2F(dr1)("xset\000", "use color\000", &c__1, &c__0, &c__0, &c__0, & 00181 c__0, &v, &dv, &dv, &dv, &dv); 00182 C2F(dr)("xstart\000", "v\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, & 00183 dv, &dv); 00184 C2F(dr1)("xset\000", "dashes\000", &c__0, &c__0, &c__0, &c__0, &c__0, 00185 &v, &dv, &dv, &dv, &dv); 00186 i__1 = nwid; 00187 for (kwid = 1; kwid <= i__1; ++kwid) { 00188 rect[0] = per * (n1 + 1); 00189 rect[1] = rpar[(kwid << 1) + 1]; 00190 rect[2] = per * (n1 + 2); 00191 rect[3] = rpar[(kwid << 1) + 2]; 00192 frect[0] = 0.; 00193 frect[1] = (kwid - 1) * (1. / nwid); 00194 frect[2] = 1.; 00195 frect[3] = 1. / nwid; 00196 C2F(setscale2d)(frect, rect, "nn\000"); 00197 C2F(plot2d)(rect, &rect[1], &c__1, &c__1, &c_n1, "011", "xlines", rect, 00198 nax); 00199 } 00200 } 00201 t = tsave; 00202 00203 } else if (flag == 4) { 00204 sum=0; 00205 for (i=0;i<block->nin;++i){ 00206 sum=sum+block->insz[i]; 00207 } 00208 if ((*block->work= 00209 scicos_malloc(sizeof(double)*(1+ipar[3]*(1+sum))))== NULL ) { 00210 set_block_error(-16); 00211 return; 00212 } 00213 z__=*block->work; 00214 --z__; 00215 z__[1]=-1.0; 00216 nax[0] = 2; 00217 nax[1] = 10; 00218 nax[2] = 5; 00219 nax[3] = 4; 00220 n1 = (int) (t / per); 00221 if (t <= 0.) { 00222 --n1; 00223 } 00224 00225 //** --------------------- 00226 // default_graphics = getVersionFlag() ; 00227 // setVersionFlag(1) ; //** force the old graphics 00228 00229 C2F(sciwin)(); 00230 C2F(dr1)("xget\000", "window\000", &verb, &cur, &na, &v, &v, &v, &dv, &dv, 00231 &dv, &dv); 00232 if (cur != wid) { 00233 C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, 00234 &dv, &dv); 00235 } 00236 iwp = 4; 00237 if (ipar[iwp] >= 0) { 00238 C2F(dr1)("xset\000", "wpos\000", &ipar[iwp], &ipar[iwp + 1], &v, &v, & 00239 v, &v, &dv, &dv, &dv, &dv); 00240 } 00241 iwd = 6; 00242 if (ipar[iwd] >= 0) { 00243 C2F(dr1)("xset\000", "wdim\000", &ipar[iwd], &ipar[iwd + 1], &v, &v, & 00244 v, &v, &dv, &dv, &dv, &dv); 00245 } 00246 C2F(dr1)("xsetdr\000", "Rec\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, & 00247 dv); 00248 C2F(dr1)("xset\000", "use color\000", &c__1, &c__0, &c__0, &c__0, &c__0, & 00249 v, &dv, &dv, &dv, &dv); 00250 C2F(dr1)("xset\000", "alufunction\000", &c__3, &c__0, &c__0, &c__0, &c__0, 00251 &v, &dv, &dv, &dv, &dv); 00252 C2F(dr1)("xclear\000", "v\000", &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, & 00253 dv); 00254 C2F(dr)("xstart\000", "v\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, &dv, & 00255 dv); 00256 C2F(dr1)("xset\000", "dashes\000", &c__0, &c__0, &c__0, &c__0, &c__0, &v, 00257 &dv, &dv, &dv, &dv); 00258 nxname = 40; 00259 kfun=get_block_number(); 00260 C2F(getlabel)(&kfun, buf, &nxname); 00261 if (nxname > 39) { 00262 nxname = 39; 00263 } 00264 i__1 = nxname; 00265 *(buf+i__1)=*"\000"; 00266 if ((nxname == 1 && *(unsigned char *)buf == ' ') || nxname == 0) { 00267 } else { 00268 C2F(dr)("xname\000", buf, &v, &v, &v, &v, &v, &v, &dv, &dv, &dv, &dv); 00269 } 00270 i__1 = nwid; 00271 for (kwid = 1; kwid <= i__1; ++kwid) { 00272 rect[0] = per * (n1 + 1); 00273 rect[1] = rpar[(kwid << 1) + 1]; 00274 rect[2] = per * (n1 + 2); 00275 rect[3] = rpar[(kwid << 1) + 2]; 00276 frect[0] = 0.; 00277 frect[1] = (kwid - 1) * (1. / nwid); 00278 frect[2] = 1.; 00279 frect[3] = 1. / nwid; 00280 C2F(setscale2d)(frect, rect, "nn\000"); 00281 C2F(plot2d)(rect, &rect[1], &c__1, &c__1, &c_n1, "011", buf, rect, nax); 00282 } 00283 00284 z__[1] = 0.; 00285 z__[2] = t; 00286 i__1 = sum * n; 00287 C2F(dset)(&i__1, &c_b103, &z__[3], &c__1); 00288 00289 //** --- restore the graphics mode 00290 // setVersionFlag(default_graphics); 00291 00292 } else if (flag == 5) { 00293 z__=*block->work; 00294 --z__; 00295 k = (int) z__[1]; 00296 if (k <= 1) { 00297 scicos_free(*block->work); 00298 return ; 00299 } 00300 C2F(dr1)("xget\000", "window\000", &verb, &cur, &na, &v, &v, &v, &dv, &dv, 00301 &dv, &dv); 00302 if (cur != wid) { 00303 C2F(dr1)("xset\000", "window\000", &wid, &v, &v, &v, &v, &v, &dv, &dv, 00304 &dv, &dv); 00305 } 00306 C2F(dr1)("xset\000", "use color\000", &c__1, &c__0, &c__0, &c__0, &c__0, & 00307 v, &dv, &dv, &dv, &dv); 00308 00309 ilt = ipar[2] + 8; 00310 it = 0; 00311 n1 = (int) (z__[2] / per); 00312 /* loop on input ports */ 00313 i__1 = nwid; 00314 for (kwid = 1; kwid <= i__1; ++kwid) { 00315 rect[0] = per * (n1 + 0); 00316 rect[1] = rpar[(kwid << 1) + 1]; 00317 rect[2] = per * (n1 + 1); 00318 rect[3] = rpar[(kwid << 1) + 2]; 00319 frect[0] = 0.; 00320 frect[1] = (kwid - 1) * (1. / nwid); 00321 frect[2] = 1.; 00322 frect[3] = 1. / nwid; 00323 F2C(setscale2d)(frect, rect, "nn\000"); 00324 F2C(scicosclip)(&c__1); 00325 /* loop on input port elements */ 00326 i__2 = ipar[kwid + 7]; 00327 for (i__ = 1; i__ <= i__2; ++i__) { 00328 i__3 = k - 1; 00329 C2F(dr1)("xpolys\000", "v\000", &v, &v, &ipar[ilt + it], &c__1, & 00330 i__3, &v, &z__[2], &z__[n + 2 + it * n], &dv, &dv); 00331 ++it; 00332 } 00333 C2F(scicosclip)(&c__0); 00334 } 00335 scicos_free(*block->work); 00336 } 00337 }
Here is the call graph for this function:

1.5.1