/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void summation_i32s(scicos_block *block,int flag) { if((flag==1)|(flag==6)) { int j = 0,k = 0; int nu = 0,mu = 0,nin = 0; long *y = NULL; int *ipar = NULL; double v = 0.,l = 0.; double *rpar = NULL; long *u = NULL; y = Getint32OutPortPtrs(block,1); nu = GetInPortRows(block,1); mu = GetInPortCols(block,1); ipar = GetIparPtrs(block); rpar = GetRparPtrs(block); nin = GetNin(block); l = pow(2,32)/2; if (nin==1) { v=0; u=Getint32InPortPtrs(block,1); for (j=0;j<nu*mu;j++) { v=v+(double)u[j]; } if (v>=l) v=l-1; else if (v<-l) v=-l; y[0]=(long)v; } else { for (j=0;j<nu*mu;j++) { v=0; for (k=0;k<nin;k++) { u=Getint32InPortPtrs(block,k+1); if(ipar[k]>0) { v=v+(double)u[j]; } else { v=v-(double)u[j];} } if (v>=l) v=l-1; else if (v<-l) v=-l; y[j]=(long)v; } } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void summation_ui16s(scicos_block *block,int flag) { if((flag==1)|(flag==6)) { int j = 0,k = 0; int nu = 0,mu = 0,nin = 0; unsigned short *y = NULL; int *ipar = NULL; double v = 0.,l = 0.; double *rpar = NULL; unsigned short *u = NULL; y = Getuint16OutPortPtrs(block,1); nu = GetInPortRows(block,1); mu = GetInPortCols(block,1); ipar = GetIparPtrs(block); rpar = GetRparPtrs(block); nin = GetNin(block); l = pow(2,16); if (nin==1) { v=0; u=Getuint16InPortPtrs(block,1); for (j=0;j<nu*mu;j++) { v=v+(double)u[j]; } if (v>=l) v=l-1; else if (v<0) v=0; y[0]=(unsigned short)v; } else { for (j=0;j<nu*mu;j++) { v=0; for (k=0;k<nin;k++) { u=Getuint16InPortPtrs(block,k+1); if(ipar[k]>0) { v=v+(double)u[j]; } else { v=v-(double)u[j];} } if (v>=l) v=l-1; else if (v<0) v=0; y[j]=(unsigned short)v; } } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void summation(scicos_block *block, int flag) { int j = 0, k = 0; double *y = GetRealOutPortPtrs(block, 1); int nu = GetInPortRows(block, 1); int mu = GetInPortCols(block, 1); int *ipar = GetIparPtrs(block); if (flag == 1) { if (GetNin(block) == 1) { double *u = GetRealInPortPtrs(block, 1); y[0] = 0.0; for (j = 0; j < nu * mu; j++) { y[0] = y[0] + u[j]; } } else { for (j = 0; j < nu * mu; j++) { y[j] = 0.0; for (k = 0; k < GetNin(block); k++) { double *u = GetRealInPortPtrs(block, k + 1); if (ipar[k] > 0) { y[j] = y[j] + u[j]; } else { y[j] = y[j] - u[j]; } } } } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void foriterator(scicos_block *block, int flag) { void *y = NULL, *u = NULL, *z = NULL; int *ipar = NULL; int so = 0; int nin = 0; z = GetOzPtrs(block, 1); so = GetSizeOfOut(block, 1); if (flag == 1) { y = GetOutPortPtrs(block, 1); memcpy(y, z, so); } else if (flag == 2) { ipar = GetIparPtrs(block); if (*ipar == 0) { if (so == 1) { char *inp; inp = (char *)z; *inp = *inp + 1; } else if (so == 2) { short *inp; inp = (short *)z; *inp = *inp + 1; } else if (so == 4) { long *inp; inp = (long *)z; *inp = *inp + 1; } else if (so == 8) { double *inp; inp = (double *)z; *inp = *inp + 1; } } else { nin = GetNin(block); u = GetInPortPtrs(block, nin); memcpy(z, u, so); } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void summation_ui32n(scicos_block *block,int flag) { if((flag==1)|(flag==6)) { int j = 0,k = 0; int nu = 0,mu = 0,nin = 0; unsigned long *y = NULL; int *ipar = NULL; double *rpar = NULL; unsigned long *u = NULL; y=Getuint32OutPortPtrs(block,1); nu=GetInPortRows(block,1); mu=GetInPortCols(block,1); ipar=GetIparPtrs(block); rpar=GetRparPtrs(block); nin=GetNin(block); if (nin==1) { y[0]=0; u=Getuint32InPortPtrs(block,1); for (j=0;j<nu*mu;j++) { y[0]=y[0]+u[j]; } } else { for (j=0;j<nu*mu;j++) { y[j]=0; for (k=0;k<nin;k++) { u=Getuint32InPortPtrs(block,k+1); if(ipar[k]>0) { y[j]=y[j]+u[j]; } else { y[j]=y[j]-u[j];} } } } } }
static void init(scicos_block *block) { char name[7]; int nch = GetNin(block); int nt = nch+1; MBX *mbx; rtRegisterScope(Getint8OparPtrs(block,1), (char**)&block->oparptr[1], nch); get_a_name(TargetMbxID,name); mbx = (MBX *) RT_typed_named_mbx_init(0,0,name,(MBX_RTAI_SCOPE_SIZE/(nt*sizeof(double)))*(nt*sizeof(double)),FIFO_Q); if(mbx == NULL) { fprintf(stderr, "Cannot init mailbox\n"); exit_on_error(); } *(block->work) = mbx; }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void logic(scicos_block *block, int flag) { char *u = NULL, *y = NULL; char inp, num; int i = 0, nin = 0, nout = 0, mo = 0; char *opar = NULL; nin = GetNin(block); nout = GetNout(block); opar = Getint8OparPtrs(block, 1); mo = GetOparSize(block, 1, 1); if (flag == 1) { num = 0; for (i = 0; i < nin; i++) { u = Getint8InPortPtrs(block, i + 1); inp = *u; if (inp > 0) { inp = 1; } else { inp = 0; } inp = inp << i; num = num + inp; } for (i = 0; i < nout; i++) { y = Getint8OutPortPtrs(block, i + 1); *y = *(opar + num + i * mo); } } if (flag == 6) { u = Getint8InPortPtrs(block, 1); for (i = 0; i < nout; i++) { y = Getint8OutPortPtrs(block, i + 1); *y = *u; } } }
static void inout(scicos_block *block) { MBX * mbx = *(block->work); int i; unsigned int led_mask = 0; int nleds = GetNin(block); double *u; for (i = 0; i < nleds; i++) { u = block->inptr[i]; if (u[0] > 0.1) { led_mask += (1 << i); } else { led_mask += (0 << i); } } RT_mbx_send_if(0, 0, mbx, &led_mask, sizeof(led_mask)); }
static void inout(scicos_block *block) { double *u; MBX *mbx = *(block->work); int ntraces=GetNin(block); struct { double t; double u[ntraces]; } data; int i; data.t=get_scicos_time(); for (i = 0; i < ntraces; i++) { u = block->inptr[i]; data.u[i] = u[0]; } RT_mbx_send_if(0, 0, mbx, &data, sizeof(data)); }
static void init(scicos_block *block) { char ledName[20]; char name[7]; int nch = GetNin(block); int * ipar = GetIparPtrs(block); MBX *mbx; par_getstr(ledName,ipar,1,ipar[0]); rtRegisterLed(ledName,nch); get_a_name(TargetLedMbxID,name); mbx = (MBX *) RT_typed_named_mbx_init(0,0,name,MBX_RTAI_LED_SIZE/sizeof(unsigned int)*sizeof(unsigned int),FIFO_Q); if(mbx == NULL) { fprintf(stderr, "Cannot init mailbox\n"); exit_on_error(); } *(block->work) = mbx; }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void selector_m(scicos_block *block, int flag) { void *u = NULL; void *y = NULL; double *z = NULL; int nu = 0, mu = 0, ic = 0, nev = 0, nin = 0, so = 0; z = GetDstate(block); nin = GetNin(block); ic = (int)z[0]; if (flag < 3) { ic = 0; nev = GetNevIn(block); while (nev >= 1) { ic = ic + 1; nev = nev / 2; } } if (nin > 1) { mu = GetInPortRows(block, ic); nu = GetInPortCols(block, ic); u = GetInPortPtrs(block, ic); so = GetSizeOfOut(block, 1); y = GetOutPortPtrs(block, 1); memcpy(y, u, mu * nu * so); } else { mu = GetInPortRows(block, 1); nu = GetInPortCols(block, 1); u = GetInPortPtrs(block, 1); y = GetOutPortPtrs(block, ic); so = GetSizeOfIn(block, 1); memcpy(y, u, mu * nu * so); } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void summation_i16n(scicos_block *block,int flag) { if((flag==1)|(flag==6)) { int j = 0,k = 0; short *y = Getint16OutPortPtrs(block,1); int nu = GetInPortRows(block,1); int mu = GetInPortCols(block,1); int *ipar=GetIparPtrs(block); int nin = GetNin(block); if (nin==1) { short *u=Getint16InPortPtrs(block,1); y[0]=0; for (j=0;j<nu*mu;j++) { y[0]=y[0]+u[j]; } } else { for (j=0;j<nu*mu;j++) { y[j]=0; for (k=0;k<nin;k++) { short *u=Getint16InPortPtrs(block,k+1); if(ipar[k]>0) { y[j]=y[j]+u[j]; } else { y[j]=y[j]-u[j];} } } } } }
static int inout(scicos_block *block) { struct FlagTestDev * comdev = (struct FlagTestDev *) (*block->work); int i; if (get_scicos_time()==comdev->time){ comdev->step++; } else { comdev->time=get_scicos_time(); comdev->step=1; } printf("Flag 1: update output, step=%d, t=%f\n",comdev->step,comdev->time); if (GetNin(block)>0){ double *u1 = GetRealInPortPtrs(block,1); comdev->data=u1[0]; } if (GetNout(block)>0){ double *y1 = GetRealOutPortPtrs(block,1); y1[0]=comdev->data; } return 0; }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void logicalop_i8(scicos_block *block, int flag) { int i, m, n, nin, k, j, l; int *ipar; char *y, *u; m = GetInPortRows(block, 1); n = GetInPortCols(block, 1); y = Getint8OutPortPtrs(block, 1); ipar = GetIparPtrs(block); nin = GetNin(block); k = ipar[0]; switch (k) { case 0: if (nin == 1) { u = Getint8InPortPtrs(block, 1); if (ipar[1] == 0) { *y = 1; for (i = 0; i < m * n; i++) { if (u[i] <= 0) { *y = 0; break; } } } else { *y = u[0]; for (i = 1; i < m * n; i++) { *y = (*y) & (u[i]); } } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { y[i] = 1; for (j = 1; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); if (u[i] <= 0) { y[i] = 0; break; } } } } else { for (i = 0; i < m * n; i++) { u = Getint8InPortPtrs(block, 1); y[i] = u[i]; for (j = 2; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); y[i] = (y[i]) & (u[i]); } } } } break; case 1: if (nin == 1) { u = Getint8InPortPtrs(block, 1); *y = 0; if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { if (u[i] > 0) { *y = 1; break; } } } else { for (i = 0; i < m * n; i++) { *y = (*y) | (u[i]); } } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { y[i] = 0; for (j = 1; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); if (u[i] > 0) { y[i] = 1; break; } } } } else { for (i = 0; i < m * n; i++) { y[i] = 0; for (j = 1; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); y[i] = (y[i]) | (u[i]); } } } } break; case 2: if (nin == 1) { u = Getint8InPortPtrs(block, 1); if (ipar[1] == 0) { *y = 0; for (i = 0; i < m * n; i++) { if (u[i] <= 0) { *y = 1; break; } } } else { *y = u[0]; for (i = 1; i < m * n; i++) { *y = ((*y) & (u[i])); } *y = ~*y; } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { y[i] = 0; for (j = 1; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); if (u[i] <= 0) { y[i] = 1; break; } } } } else { for (i = 0; i < m * n; i++) { u = Getint8InPortPtrs(block, 1); y[i] = u[i]; for (j = 2; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); y[i] = ((y[i]) & (u[i])); } y[i] = ~y[i]; } } } break; case 3: if (nin == 1) { u = Getint8InPortPtrs(block, 1); if (ipar[1] == 0) { *y = 1; for (i = 0; i < m * n; i++) { if (u[i] > 0) { *y = 0; break; } } } else { *y = 0; for (i = 0; i < m * n; i++) { *y = ((*y) | (u[i])); } *y = ~*y; } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { y[i] = 1; for (j = 1; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); if (u[i] > 0) { y[i] = 0; break; } } } } else { for (i = 0; i < m * n; i++) { u = Getint8InPortPtrs(block, 1); y[i] = u[i]; for (j = 2; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); y[i] = ((y[i]) | (u[i])); } y[i] = ~y[i]; } } } break; case 4: if (nin == 1) { u = Getint8InPortPtrs(block, 1); if (ipar[1] == 0) { l = 0; for (i = 0; i < m * n; i++) { if (u[i] > 0) { l = (l + 1) % 2; } } *y = (char)l; } else { *y = u[0]; for (i = 1; i < m * n; i++) { *y = ((*y) ^ (u[i])); } } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { l = 0; for (j = 1; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); if (u[i] > 0) { l = (l + 1) % 2; } } y[i] = (char)l; } } else { for (i = 0; i < m * n; i++) { u = Getint8InPortPtrs(block, 1); y[i] = u[i]; for (j = 2; j < nin + 1; j++) { u = Getint8InPortPtrs(block, j); y[i] = ((y[i]) ^ (u[i])); } } } } break; case 5: u = Getint8InPortPtrs(block, 1); if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { if (u[i] > 0) { y[i] = 0; } else { y[i] = 1; } } } else { for (i = 0; i < m * n; i++) { y[i] = ~(u[i]); } } break; } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void summation_i8e(scicos_block *block, int flag) { if ((flag == 1) | (flag == 6)) { int j = 0, k = 0; int nu = 0, mu = 0, nin = 0; char *y = NULL; int *ipar = NULL; double v = 0., l = 0.; char *u = NULL; y = Getint8OutPortPtrs(block, 1); nu = GetInPortRows(block, 1); mu = GetInPortCols(block, 1); ipar = GetIparPtrs(block); nin = GetNin(block); l = pow(2, 8) / 2; if (nin == 1) { v = 0; u = Getint8InPortPtrs(block, 1); for (j = 0; j < nu * mu; j++) { v = v + (double)u[j]; } if ((v >= l) | (v < -l)) { scicos_print(_("overflow error")); set_block_error(-4); return; } else { y[0] = (char)v; } } else { for (j = 0; j < nu * mu; j++) { v = 0; for (k = 0; k < nin; k++) { u = Getint8InPortPtrs(block, k + 1); if (ipar[k] > 0) { v = v + (double)u[j]; } else { v = v - (double)u[j]; } } if ((v >= l) | (v < -l)) { scicos_print(_("overflow error")); set_block_error(-4); return; } else { y[j] = (char)v; } } } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void summation_ui32e(scicos_block *block, int flag) { if ((flag == 1) | (flag == 6)) { int j = 0, k = 0; int nu = 0, mu = 0, nin = 0; SCSUINT32_COP *y = NULL; int *ipar = NULL; double v = 0., l = 0.; double *rpar = NULL; SCSUINT32_COP *u = NULL; y = Getuint32OutPortPtrs(block, 1); nu = GetInPortRows(block, 1); mu = GetInPortCols(block, 1); ipar = GetIparPtrs(block); rpar = GetRparPtrs(block); nin = GetNin(block); l = pow(2, 32); if (nin == 1) { v = 0; u = Getuint32InPortPtrs(block, 1); for (j = 0; j < nu * mu; j++) { v = v + (double)u[j]; } if ((v >= l) | (v < 0)) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y[0] = (SCSUINT32_COP)v; } } else { for (j = 0; j < nu * mu; j++) { v = 0; for (k = 0; k < nin; k++) { u = Getuint32InPortPtrs(block, k + 1); if (ipar[k] > 0) { v = v + (double)u[j]; } else { v = v - (double)u[j]; } } if ((v >= l) | (v < 0)) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y[j] = (SCSUINT32_COP)v; } } } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void logicalop_m(scicos_block *block, int flag) { int i = 0, m = 0, n = 0, nin = 0, k = 0, j = 0, l = 0; int *ipar = NULL; double *y = NULL, *u = NULL; m = GetInPortRows(block, 1); n = GetInPortCols(block, 1); y = GetRealOutPortPtrs(block, 1); ipar = GetIparPtrs(block); nin = GetNin(block); k = ipar[0]; switch (k) { case 0: if (nin == 1) { u = GetRealInPortPtrs(block, 1); *y = 1; for (i = 0; i < m * n; i++) { if (u[i] <= 0) { *y = 0; break; } } } else { for (i = 0; i < m * n; i++) { y[i] = 1; for (j = 1; j < nin + 1; j++) { u = GetRealInPortPtrs(block, j); if (u[i] <= 0) { y[i] = 0; break; } } } } break; case 1: if (nin == 1) { u = GetRealInPortPtrs(block, 1); *y = 0; for (i = 0; i < m * n; i++) { if (u[i] > 0) { *y = 1; break; } } } else { for (i = 0; i < m * n; i++) { y[i] = 0; for (j = 1; j < nin + 1; j++) { u = GetRealInPortPtrs(block, j); if (u[i] > 0) { y[i] = 1; break; } } } } break; case 2: if (nin == 1) { u = GetRealInPortPtrs(block, 1); *y = 0; for (i = 0; i < m * n; i++) { if (u[i] <= 0) { *y = 1; break; } } } else { for (i = 0; i < m * n; i++) { y[i] = 0; for (j = 1; j < nin + 1; j++) { u = GetRealInPortPtrs(block, j); if (u[i] <= 0) { y[i] = 1; break; } } } } break; case 3: if (nin == 1) { u = GetRealInPortPtrs(block, 1); *y = 1; for (i = 0; i < m * n; i++) { if (u[i] > 0) { *y = 0; break; } } } else { for (i = 0; i < m * n; i++) { y[i] = 1; for (j = 1; j < nin + 1; j++) { u = GetRealInPortPtrs(block, j); if (u[i] > 0) { y[i] = 0; break; } } } } break; case 4: if (nin == 1) { u = GetRealInPortPtrs(block, 1); l = 0; for (i = 0; i < m * n; i++) { if (u[i] > 0) { l = (l + 1) % 2; } } *y = (double)l; } else { for (i = 0; i < m * n; i++) { l = 0; for (j = 1; j < nin + 1; j++) { u = GetRealInPortPtrs(block, j); if (u[i] > 0) { l = (l + 1) % 2; } } y[i] = (double)l; } } break; case 5: u = GetRealInPortPtrs(block, 1); for (i = 0; i < m * n; i++) { if (u[i] > 0) { y[i] = 0; } else { y[i] = 1; } } break; } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void summation_i16e(scicos_block *block, int flag) { if ((flag == 1) | (flag == 6)) { int j = 0, k = 0; short *y = Getint16OutPortPtrs(block, 1); int nu = GetInPortRows(block, 1); int mu = GetInPortCols(block, 1); int *ipar = GetIparPtrs(block); int nin = GetNin(block); double l = pow(2, 16) / 2; if (nin == 1) { double v = 0.; short *u = Getint16InPortPtrs(block, 1); for (j = 0; j < nu * mu; j++) { v = v + (double)u[j]; } if ((v >= l) | (v < -l)) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y[0] = (short)v; } } else { for (j = 0; j < nu * mu; j++) { double v = 0.; for (k = 0; k < nin; k++) { short *u = Getint16InPortPtrs(block, k + 1); if (ipar[k] > 0) { v = v + (double)u[j]; } else { v = v - (double)u[j]; } } if ((v >= l) | (v < -l)) { sciprint(_("overflow error")); set_block_error(-4); return; } else { y[j] = (short)v; } } } } }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void logicalop_ui32(scicos_block *block, int flag) { int i = 0, m = 0, n = 0, nin = 0, k = 0, j = 0, l = 0; int *ipar = NULL; SCSUINT32_COP *y = NULL, *u = NULL; m = GetInPortRows(block, 1); n = GetInPortCols(block, 1); y = Getuint32OutPortPtrs(block, 1); ipar = GetIparPtrs(block); nin = GetNin(block); k = ipar[0]; switch (k) { case 0: if (nin == 1) { u = Getuint32InPortPtrs(block, 1); if (ipar[1] == 0) { *y = 1; for (i = 0; i < m * n; i++) { if (u[i] <= 0) { *y = 0; break; } } } else { *y = u[0]; for (i = 1; i < m * n; i++) { *y = (*y) & (u[i]); } } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { y[i] = 1; for (j = 1; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); if (u[i] <= 0) { y[i] = 0; break; } } } } else { for (i = 0; i < m * n; i++) { u = Getuint32InPortPtrs(block, 1); y[i] = u[i]; for (j = 2; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); y[i] = (y[i]) & (u[i]); } } } } break; case 1: if (nin == 1) { u = Getuint32InPortPtrs(block, 1); *y = 0; if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { if (u[i] > 0) { *y = 1; break; } } } else { for (i = 0; i < m * n; i++) { *y = (*y) | (u[i]); } } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { y[i] = 0; for (j = 1; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); if (u[i] > 0) { y[i] = 1; break; } } } } else { for (i = 0; i < m * n; i++) { y[i] = 0; for (j = 1; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); y[i] = (y[i]) | (u[i]); } } } } break; case 2: if (nin == 1) { u = Getuint32InPortPtrs(block, 1); if (ipar[1] == 0) { *y = 0; for (i = 0; i < m * n; i++) { if (u[i] <= 0) { *y = 1; break; } } } else { *y = u[0]; for (i = 1; i < m * n; i++) { *y = ((*y) & (u[i])); } *y = ~*y; } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { y[i] = 0; for (j = 1; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); if (u[i] <= 0) { y[i] = 1; break; } } } } else { for (i = 0; i < m * n; i++) { u = Getuint32InPortPtrs(block, 1); y[i] = u[i]; for (j = 2; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); y[i] = ((y[i]) & (u[i])); } y[i] = ~y[i]; } } } break; case 3: if (nin == 1) { u = Getuint32InPortPtrs(block, 1); if (ipar[1] == 0) { *y = 1; for (i = 0; i < m * n; i++) { if (u[i] > 0) { *y = 0; break; } } } else { *y = 0; for (i = 0; i < m * n; i++) { *y = ((*y) | (u[i])); } *y = ~*y; } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { y[i] = 1; for (j = 1; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); if (u[i] > 0) { y[i] = 0; break; } } } } else { for (i = 0; i < m * n; i++) { u = Getuint32InPortPtrs(block, 1); y[i] = u[i]; for (j = 2; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); y[i] = ((y[i]) | (u[i])); } y[i] = ~y[i]; } } } break; case 4: if (nin == 1) { u = Getuint32InPortPtrs(block, 1); if (ipar[1] == 0) { l = 0; for (i = 0; i < m * n; i++) { if (u[i] > 0) { l = (l + 1) % 2; } } *y = (SCSUINT32_COP)l; } else { *y = u[0]; for (i = 1; i < m * n; i++) { *y = ((*y) ^ (u[i])); } } } else { if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { l = 0; for (j = 1; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); if (u[i] > 0) { l = (l + 1) % 2; } } y[i] = (SCSUINT32_COP)l; } } else { for (i = 0; i < m * n; i++) { u = Getuint32InPortPtrs(block, 1); y[i] = u[i]; for (j = 2; j < nin + 1; j++) { u = Getuint32InPortPtrs(block, j); y[i] = ((y[i]) ^ (u[i])); } } } } break; case 5: u = Getuint32InPortPtrs(block, 1); if (ipar[1] == 0) { for (i = 0; i < m * n; i++) { if (u[i] > 0) { y[i] = 0; } else { y[i] = 1; } } } else { for (i = 0; i < m * n; i++) { y[i] = ~(u[i]); } } break; } }
static char const* getFigure(scicos_block * block) { signed int figNum; char const* pFigureUID = NULL; char *pAxe = NULL; int i__1 = 1; sco_data *sco = (sco_data *) * (block->work); int i; // assert the sco is not NULL if (sco == NULL) { return NULL; } // fast path for an existing object if (sco->scope.cachedFigureUID != NULL) { return sco->scope.cachedFigureUID; } figNum = block->ipar[0]; // with a negative id, use the block number indexed from a constant. if (figNum < 0) { figNum = 20000 + get_block_number(); } pFigureUID = getFigureFromIndex(figNum); // create on demand if (pFigureUID == NULL) { pFigureUID = createNewFigureWithAxes(); setGraphicObjectProperty(pFigureUID, __GO_ID__, &figNum, jni_int, 1); // the stored uid is a reference to the figure map, not to the current figure pFigureUID = getFigureFromIndex(figNum); sco->scope.cachedFigureUID = pFigureUID; // set configured parameters setFigureSettings(pFigureUID, block); // allocate the axes through the getter for (i = 0; i < GetNin(block); i++) { pAxe = getAxe(pFigureUID, block, i); /* * Setup according to block settings */ setLabel(pAxe, __GO_X_AXIS_LABEL__, "t"); setLabel(pAxe, __GO_Y_AXIS_LABEL__, "y"); setGraphicObjectProperty(pAxe, __GO_X_AXIS_VISIBLE__, &i__1, jni_bool, 1); setGraphicObjectProperty(pAxe, __GO_Y_AXIS_VISIBLE__, &i__1, jni_bool, 1); setPolylinesBounds(block, i, 0); } } if (sco->scope.cachedFigureUID == NULL) { sco->scope.cachedFigureUID = pFigureUID; } return pFigureUID; }
/*--------------------------------------------------------------------------*/ SCICOS_BLOCKS_IMPEXP void mswitch(scicos_block *block,int flag) { if ((flag==1)||(flag==6)) { int i = 0,j = 0,nin = 0,so = 0,my = 0,ny = 0; int mu = 0,nu = 0; int *ipar = NULL; double *u1 = NULL; void *uj = NULL; void *y = NULL; y = GetOutPortPtrs(block,1); so = GetSizeOfOut(block,1); my = GetOutPortRows(block,1); ny = GetOutPortCols(block,1); u1 = GetRealInPortPtrs(block,1); ipar = GetIparPtrs(block); nin = GetNin(block); i = *(ipar+1); if (i==0) { if (*u1>0) { j=(int)floor(*u1); } else { j=(int)ceil(*u1); } } else if (i==1) { if (*u1>0) { j=(int)floor(*u1+.5); } else { j=(int)ceil(*u1-.5); } } else if (i==2) { j=(int)ceil(*u1); } else if (i==3) { j=(int)floor(*u1); } j=j+1-*ipar; j=Max(j,1); if (nin==2) { mu=GetInPortRows(block,2); nu=GetInPortCols(block,2); uj=GetInPortPtrs(block,2); j=Min(j,mu*nu); memcpy(y,(char *)uj+(j-1)*my*ny*so,my*ny*so); } else { j=Min(j,nin-1); uj=GetInPortPtrs(block,j+1); memcpy(y,uj,my*ny*so); } } }