Select
Keywords: main

Subsections

- Library
- Description
- Dialog Box
- Default properties
- Interfacing function
- Computational function (type 2)

##
Select

### Library

Branching

### Description

This block routes one of the regular inputs to the unique regular output. the choice of which input is to be routed is done, initially by the "initial connected input" parameter. Then, every time the block is activated through its i-th input activation port, the i-th regular input value port is put to the regular output.

### Dialog Box

Set parameters |
number of inputs | 2
initial connected input | 1

- number of inputs:a scalar. Number of regular and event inputs.
- initial connected input: an integer. It must be between 1 and the number of inputs.

### Default properties

- always active: no
- direct-feedthrough: yes
- zero-crossing: no
- mode: no
- number/sizes of inputs: 2 / -1 -1
- number/sizes of outputs: 1 / -1
- number/sizes of activation inputs: 2 / 1 1
- number/sizes of activation outputs: 0 /
- continuous-time state: no
- discrete-time state: yes
- name of computational function: selector

### Interfacing function

`scilab/macros/scicos_blocks/branching/SELECT_f.sci`

### Computational function (type 2)

    /* Copyright INRIA */
    #include "../machine.h"

    void
    selector(flag,nevprt,t,xd,x,nx,z,nz,tvec,ntvec,rpar,nrpar,
    	       ipar,nipar,inptr,insz,nin,outptr,outsz,nout)
    integer *flag,*nevprt,*nx,*nz,*ntvec,*nrpar,ipar[],*nipar,insz[],*nin,outsz[],*nout;
    double x[],xd[],z[],tvec[],rpar[];
    double *inptr[],*outptr[],*t;

    {
        int k;
        double *y;
        double *u;
        int nev,ic;

        ic=(int)z[0];
        if ((*flag)<3) {
    	ic=-1;
    	nev=*nevprt;
    	while (nev>=1) {
    	    ic=ic+1;
    	    nev=nev/2;
    	}
        }
        if (*nin>1) {
          y=(double *)outptr[0];
          u=(double *)inptr[ic];
          for (k=0;k<outsz[0];k++)
    	*(y++)=*(u++);
        }
        else {
          y=(double *)outptr[ic];
          u=(double *)inptr[0];
          for (k=0;k<outsz[0];k++)
    	*(y++)=*(u++);
        }
    }