Computational routine
eng

##
switch2_m

### File content

    #include "scicos_block4.h"
    #include <math.h>
    #include <memory.h>

    void  switch2_m(scicos_block *block,int flag)
    {
      int i,phase,ipar,mu,nu,so;
      int *iparptrs;
      double *rpar;
      double *u2;
      void *y,*u;
      iparptrs=GetIparPtrs(block);
      ipar=*iparptrs;
      rpar=GetRparPtrs(block);
      mu=GetInPortRows(block,1);
      nu=GetInPortCols(block,1);
      u2=GetRealInPortPtrs(block,2);
      y=GetOutPortPtrs(block,1);
      if (flag == 1) {
        phase=get_phase_simulation();
        if (phase==1||block->ng==0){
          i=3;
          if (ipar==0){
    	if (*u2>=*rpar) i=1;
          }else if (ipar==1){
    	if (*u2>*rpar) i=1;
          }else {
    	if (*u2!=*rpar) i=1;
          }
        }else{
          if(block->mode[0]==1){
    	i=1;
          }else if(block->mode[0]==2){
    	i=3;
          }
        }
           u=GetInPortPtrs(block,i);
           so=GetSizeOfOut(block,1);
           memcpy(y,u,mu*nu*so);
      }else if(flag == 9){
        phase=get_phase_simulation();
        block->g[0]=*u2-*rpar;
        if (phase==1){
          i=3;
          if (ipar==0){
    	if (block->g[0]>=0.0) i=1;
          }else if (ipar==1){
    	if (block->g[0]>0.0) i=1;
          }else {
    	if (block->g[0]!=0.0) i=1;
          }
          if(i==1) {
    	block->mode[0]=1;
          }else{
    	block->mode[0]=2;
          }
        }
      }
    }