Computational routine
eng
mswitch
#include "scicos_block4.h"
#include <math.h>
#include <memory.h>
#define max(a,b) ((a) >= (b) ? (a) : (b))
#define min(a,b) ((a) <= (b) ? (a) : (b))
void mswitch(scicos_block *block,int flag)
{
if ((flag==1)||(flag==6)){
int i,j,nin,so,my,ny;
int mu,nu;
int *ipar;
double *u1;
void *uj;
void *y;
j=0;
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,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);
}
}
}