Exemplo n.º 1
0
/*--------------------------------------------------------------------------*/ 
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;
			}
		}
	}
}
Exemplo n.º 2
0
/*--------------------------------------------------------------------------*/ 
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;
			}
		}
	}
}
Exemplo n.º 3
0
/*--------------------------------------------------------------------------*/
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];
                    }
                }
            }
        }
    }
}
Exemplo n.º 4
0
/*--------------------------------------------------------------------------*/
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);
        }
    }
}
Exemplo n.º 5
0
/*--------------------------------------------------------------------------*/ 
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];}
				}
			}
		}
	}
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
/*--------------------------------------------------------------------------*/
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;
        }
    }
}
Exemplo n.º 8
0
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));

}
Exemplo n.º 9
0
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));
}
Exemplo n.º 10
0
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;

}
Exemplo n.º 11
0
/*--------------------------------------------------------------------------*/
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);
    }
}
Exemplo n.º 12
0
/*--------------------------------------------------------------------------*/ 
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;
}
Exemplo n.º 14
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;
    }
}
Exemplo n.º 15
0
/*--------------------------------------------------------------------------*/
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;
                }
            }
        }
    }
}
Exemplo n.º 16
0
/*--------------------------------------------------------------------------*/
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;
                }
            }
        }
    }
}
Exemplo n.º 17
0
/*--------------------------------------------------------------------------*/
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;
    }
}
Exemplo n.º 18
0
/*--------------------------------------------------------------------------*/
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;
                }
            }
        }
    }
}
Exemplo n.º 19
0
/*--------------------------------------------------------------------------*/
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;
    }
}
Exemplo n.º 20
0
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;
}
Exemplo n.º 21
0
/*--------------------------------------------------------------------------*/ 
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);
		}
	}
}