Computational routine
eng


bin2dec

File content


/* Modnumlib Scicos interfacing function
 * Copyright (C) 2009-2011 Alan Layec
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */
 
/* bin2dec Scicos Bit vector to integer
 * vector block
 *
 * Type 4 simulation function ver 1.0 - scicoslab4.3
 * 15 Février 2009 - INRIA - Author : A.Layec
 */

/* REVISION HISTORY :
 * $Log$
 */

#include <scicos/scicos_block4.h>
#include "modnum_lib.h"

/* work struct for that block */
typedef struct {
  SCSINT32_COP *u_i;
  SCSINT32_COP *y_i;
} wrk_struct ;

void bin2dec(scicos_block *block,int flag)
{
  SCSREAL_COP *u_d;  /* real */
  SCSREAL_COP *y_d;
  SCSREAL_COP *u_di; /* imag */
  SCSREAL_COP *y_di;

  SCSINT32_COP *u_i;  /* int32 */
  SCSINT32_COP *y_i;
  SCSINT16_COP *u_s;  /* int16 */
  SCSINT16_COP *y_s;
  SCSINT8_COP *u_c;  /* int8 */
  SCSINT8_COP *y_c;

  SCSUINT32_COP *u_ui; /* uint32 */
  SCSUINT32_COP *y_ui;
  SCSUINT16_COP *u_us; /* uint16 */
  SCSUINT16_COP *y_us;
  SCSUINT8_COP *u_uc; /* uint8 */
  SCSUINT8_COP *y_uc;

  /* the struct ptr of that block */
  wrk_struct *ptr;

  int N;
  int msb;
  int insz;
  int outsz;
  int sig;
  int intyp;
  int outtyp;
  int *ipar;
  int i;

  insz   = GetInPortRows(block,1);
  intyp  = GetInType(block,1);
  outsz  = GetOutPortRows(block,1);
  outtyp = GetOutType(block,1);

  ipar = GetIparPtrs(block);
  N    = ipar[0];
  msb  = ipar[1];
  sig  = ipar[2];

  /* init */
  if (flag == 4) {

    if((*(block->work)=(wrk_struct*) scicos_malloc(sizeof(wrk_struct)))==NULL) {
      set_block_error(-16);
      return;
    }

    ptr      = *(block->work);
    ptr->u_i = NULL;
    ptr->y_i = NULL;

    if ((intyp==SCSINT16_N)  || \
        (intyp==SCSINT8_N)   || \
        (intyp==SCSUINT16_N) || \
        (intyp==SCSUINT8_N)  || \
        (intyp==SCSUINT32_N)) {
      if((ptr->u_i=(SCSINT32_COP *) \
           scicos_malloc(insz*sizeof(SCSINT32_COP)))==NULL) {
        set_block_error(-16);
        scicos_free(ptr);
        *(block->work) = NULL;
        return;
      }
    }

    if ((outtyp==SCSINT16_N)  || \
        (outtyp==SCSINT8_N)   || \
        (outtyp==SCSUINT16_N) || \
        (outtyp==SCSUINT8_N)  || \
        (outtyp==SCSUINT32_N)) {
      if((ptr->y_i=(SCSINT32_COP *) \
           scicos_malloc(outsz*sizeof(SCSINT32_COP)))==NULL) {
        set_block_error(-16);
        scicos_free(ptr);
        *(block->work) = NULL;
        return;
      }
    }

  }
  else if(flag == 1) {

    ptr = *(block->work);

    if ((intyp==SCSINT16_N)  || \
        (intyp==SCSINT8_N)   || \
        (intyp==SCSUINT16_N) || \
        (intyp==SCSUINT8_N)  || \
        (intyp==SCSUINT32_N)) {
      u_i = ptr->u_i;
    }

    if ((outtyp==SCSINT16_N)  || \
        (outtyp==SCSINT8_N)   || \
        (outtyp==SCSUINT16_N) || \
        (outtyp==SCSUINT8_N)  || \
        (outtyp==SCSUINT32_N)) {
      y_i = ptr->y_i;
    }

    switch (intyp)
    {
      case SCSREAL_N :  u_d  = GetRealInPortPtrs(block,1);

                        if (outtyp==SCSREAL_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decdd_c(&insz,&N,&msb,&sig,u_d,y_d);
                        }
                        else if (outtyp==SCSCOMPLEX_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decdd_c(&insz,&N,&msb,&sig,u_d,y_d);
                        }
                        else if (outtyp==SCSINT32_N) {
                          y_i  = Getint32OutPortPtrs(block,1);

                          bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);
                        }
                        else if (outtyp==SCSINT16_N) {
                          y_s  = Getint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_s[i];
                          }

                          bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                          for(i=0;i<outsz;i++) {
                            y_s[i] = (SCSINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSINT8_N) {
                          y_c  = Getint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_c[i];
                          }

                          bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                          for(i=0;i<outsz;i++) {
                            y_c[i] = (SCSINT8_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT32_N) {
                          y_ui = Getuint32OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_ui[i];
                          }

                          bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                          for(i=0;i<outsz;i++) {
                            y_ui[i] = (SCSUINT32_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT16_N) {
                          y_us = Getuint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_us[i];
                          }

                          bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                          for(i=0;i<outsz;i++) {
                            y_us[i] = (SCSUINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSUINT8_N) {
                          y_uc = Getuint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_uc[i];
                          }

                          bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                          for(i=0;i<outsz;i++) {
                            y_uc[i] = (SCSUINT8_COP) y_i[i];
                          }
                        }

                        break;

      case SCSCOMPLEX_N :  u_d = GetRealInPortPtrs(block,1);

                           if (outtyp==SCSREAL_N) {
                             y_d  = GetRealOutPortPtrs(block,1);

                             bin2decdd_c(&insz,&N,&msb,&sig,u_d,y_d);
                           }
                           else if (outtyp==SCSCOMPLEX_N) {
                             y_d  = GetRealOutPortPtrs(block,1);

                             bin2decdd_c(&insz,&N,&msb,&sig,u_d,y_d);

                             u_di = GetImagInPortPtrs(block,1);
                             y_di = GetImagOutPortPtrs(block,1);

                             bin2decdd_c(&insz,&N,&msb,&sig,u_di,y_di);
                           }
                           else if (outtyp==SCSINT32_N) {
                             y_i  = Getint32OutPortPtrs(block,1);

                             bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);
                           }
                           else if (outtyp==SCSINT16_N) {
                             y_s  = Getint16OutPortPtrs(block,1);

                             for(i=0;i<outsz;i++) {
                               y_i[i] = (SCSINT32_COP) y_s[i];
                             }

                             bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                             for(i=0;i<outsz;i++) {
                               y_s[i] = (SCSINT16_COP) y_i[i];
                             }
                           }
                           else if (outtyp==SCSINT8_N) {
                             y_c  = Getint8OutPortPtrs(block,1);

                             for(i=0;i<outsz;i++) {
                               y_i[i] = (SCSINT32_COP) y_c[i];
                             }

                             bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                             for(i=0;i<outsz;i++) {
                                y_c[i] = (SCSINT8_COP) y_i[i];
                             }

                           }
                           else if (outtyp==SCSUINT32_N) {
                             y_ui = Getuint32OutPortPtrs(block,1);

                             for(i=0;i<outsz;i++) {
                               y_i[i] = (SCSINT32_COP) y_ui[i];
                             }

                             bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                             for(i=0;i<outsz;i++) {
                               y_ui[i] = (SCSUINT32_COP) y_i[i];
                             }

                           }
                           else if (outtyp==SCSUINT16_N) {
                             y_us = Getuint16OutPortPtrs(block,1);

                             for(i=0;i<outsz;i++) {
                               y_i[i] = (SCSINT32_COP) y_us[i];
                             }

                             bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                             for(i=0;i<outsz;i++) {
                                y_us[i] = (SCSUINT16_COP) y_i[i];
                             }
                           }
                           else if (outtyp==SCSUINT8_N) {
                             y_uc = Getuint8OutPortPtrs(block,1);

                             for(i=0;i<outsz;i++) {
                                y_i[i] = (SCSINT32_COP) y_uc[i];
                             }

                             bin2decdi_c(&insz,&N,&msb,&sig,u_d,y_i);

                             for(i=0;i<outsz;i++) {
                                y_uc[i] = (SCSUINT8_COP) y_i[i];
                            }
                          }

                        break;

      case SCSINT32_N : u_i = Getint32InPortPtrs(block,1);

                        if (outtyp==SCSREAL_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSCOMPLEX_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSINT32_N) {
                          y_i  = Getint32OutPortPtrs(block,1);

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);
                        }
                        else if (outtyp==SCSINT16_N) {
                          y_s  = Getint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_s[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_s[i] = (SCSINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSINT8_N) {
                          y_c  = Getint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_c[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_c[i] = (SCSINT8_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT32_N) {
                          y_ui = Getuint32OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_ui[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_ui[i] = (SCSUINT32_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT16_N) {
                          y_us = Getuint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_us[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_us[i] = (SCSUINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSUINT8_N) {
                          y_uc = Getuint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_uc[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_uc[i] = (SCSUINT8_COP) y_i[i];
                          }
                        }

                        break;

      case SCSINT16_N : u_s = Getint16InPortPtrs(block,1);

                        for(i=0;i<insz;i++) {
                          u_i[i] = (SCSINT32_COP) u_s[i];
                        }

                        if (outtyp==SCSREAL_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSCOMPLEX_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSINT32_N) {
                          y_i  = Getint32OutPortPtrs(block,1);

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);
                        }
                        else if (outtyp==SCSINT16_N) {
                          y_s  = Getint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_s[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_s[i] = (SCSINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSINT8_N) {
                          y_c  = Getint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_c[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_c[i] = (SCSINT8_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT32_N) {
                          y_ui = Getuint32OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_ui[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_ui[i] = (SCSUINT32_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT16_N) {
                          y_us = Getuint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_us[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_us[i] = (SCSUINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSUINT8_N) {
                          y_uc = Getuint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_uc[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_uc[i] = (SCSUINT8_COP) y_i[i];
                          }
                        }

                        for(i=0;i<insz;i++) {
                          u_s[i] = (SCSINT16_COP) u_i[i];
                        }

                        break;

      case SCSINT8_N :  u_c = Getint8InPortPtrs(block,1);

                        for(i=0;i<insz;i++) {
                          u_i[i] = (SCSINT32_COP) u_c[i];
                        }

                        if (outtyp==SCSREAL_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSCOMPLEX_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSINT32_N) {
                          y_i  = Getint32OutPortPtrs(block,1);

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);
                        }
                        else if (outtyp==SCSINT16_N) {
                          y_s  = Getint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_s[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_s[i] = (SCSINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSINT8_N) {
                          y_c  = Getint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_c[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_c[i] = (SCSINT8_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT32_N) {
                          y_ui = Getuint32OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_ui[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_ui[i] = (SCSUINT32_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT16_N) {
                          y_us = Getuint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_us[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_us[i] = (SCSUINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSUINT8_N) {
                          y_uc = Getuint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_uc[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_uc[i] = (SCSUINT8_COP) y_i[i];
                          }
                        }

                        for(i=0;i<insz;i++) {
                          u_c[i] = (SCSINT8_COP) u_i[i];
                        }

                        break;

      case SCSUINT32_N : u_ui = Getuint32InPortPtrs(block,1);

                        for(i=0;i<insz;i++) {
                           u_i[i] = (SCSINT32_COP) u_ui[i];
                        }

                        if (outtyp==SCSREAL_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSCOMPLEX_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSINT32_N) {
                          y_i  = Getint32OutPortPtrs(block,1);

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);
                        }
                        else if (outtyp==SCSINT16_N) {
                          y_s  = Getint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_s[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_s[i] = (SCSINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSINT8_N) {
                          y_c  = Getint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_c[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_c[i] = (SCSINT8_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT32_N) {
                          y_ui = Getuint32OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_ui[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_ui[i] = (SCSUINT32_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT16_N) {
                          y_us = Getuint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_us[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_us[i] = (SCSUINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSUINT8_N) {
                          y_uc = Getuint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_uc[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_uc[i] = (SCSUINT8_COP) y_i[i];
                          }
                        }

                         for(i=0;i<insz;i++) {
                           u_ui[i] = (SCSUINT32_COP) u_i[i];
                         }

                        break;

      case SCSUINT16_N : u_us = Getuint16InPortPtrs(block,1);

                        for(i=0;i<insz;i++) {
                          u_i[i] = (SCSINT32_COP) u_us[i];
                        }

                        if (outtyp==SCSREAL_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSCOMPLEX_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSINT32_N) {
                          y_i  = Getint32OutPortPtrs(block,1);

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);
                        }
                        else if (outtyp==SCSINT16_N) {
                          y_s  = Getint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_s[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_s[i] = (SCSINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSINT8_N) {
                          y_c  = Getint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_c[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_c[i] = (SCSINT8_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT32_N) {
                          y_ui = Getuint32OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_ui[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_ui[i] = (SCSUINT32_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT16_N) {
                          y_us = Getuint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_us[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_us[i] = (SCSUINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSUINT8_N) {
                          y_uc = Getuint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_uc[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_uc[i] = (SCSUINT8_COP) y_i[i];
                          }
                        }

                         for(i=0;i<insz;i++) {
                           u_us[i] = (SCSUINT16_COP) u_i[i];
                         }

                        break;

      case SCSUINT8_N : u_uc = Getuint8InPortPtrs(block,1);

                        for(i=0;i<insz;i++) {
                          u_i[i] = (SCSINT32_COP) u_uc[i];
                        }

                        if (outtyp==SCSREAL_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSCOMPLEX_N) {
                          y_d  = GetRealOutPortPtrs(block,1);

                          bin2decid_c(&insz,&N,&msb,&sig,u_i,y_d);
                        }
                        else if (outtyp==SCSINT32_N) {
                          y_i  = Getint32OutPortPtrs(block,1);

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);
                        }
                        else if (outtyp==SCSINT16_N) {
                          y_s  = Getint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_s[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_s[i] = (SCSINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSINT8_N) {
                          y_c  = Getint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_c[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_c[i] = (SCSINT8_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT32_N) {
                          y_ui = Getuint32OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_ui[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_ui[i] = (SCSUINT32_COP) y_i[i];
                          }

                        }
                        else if (outtyp==SCSUINT16_N) {
                          y_us = Getuint16OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_us[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_us[i] = (SCSUINT16_COP) y_i[i];
                          }
                        }
                        else if (outtyp==SCSUINT8_N) {
                          y_uc = Getuint8OutPortPtrs(block,1);

                          for(i=0;i<outsz;i++) {
                            y_i[i] = (SCSINT32_COP) y_uc[i];
                          }

                          bin2decii_c(&insz,&N,&msb,&sig,u_i,y_i);

                          for(i=0;i<outsz;i++) {
                            y_uc[i] = (SCSUINT8_COP) y_i[i];
                          }
                        }

                        for(i=0;i<insz;i++) {
                          u_uc[i] = (SCSUINT8_COP) u_i[i];
                        }

                        break;
    }

  }
  else  if (flag == 5) {
    ptr = *(block->work);

    scicos_free(ptr->u_i);
    scicos_free(ptr->y_i);
    scicos_free(ptr);
  }
}