backlash.c

Go to the documentation of this file.
00001 
00002 #include "scicos_block.h"
00003 #include <math.h>
00004 
00005 void backlash(scicos_block *block,int flag)
00006 { 
00007   double* rw,t;
00008   if (flag == 4){/* the workspace is used to store previous values */
00009     if ((*block->work=   scicos_malloc(sizeof(double)* 4))== NULL ) {
00010       set_block_error(-16);
00011       return;
00012     }
00013     rw=*block->work; 
00014     t=get_scicos_time();
00015     rw[0]=t;
00016     rw[1]=t;
00017     rw[2]=block->rpar[0];
00018     rw[3]=block->rpar[0];
00019   }else  if (flag == 5){
00020     scicos_free(*block->work);
00021   }else  if (flag == 1) {
00022     rw=*block->work;
00023     t=get_scicos_time();
00024     if(t>rw[1]) {
00025       rw[0]=rw[1];
00026       rw[2]=rw[3];
00027     }
00028     rw[1]=t;
00029     if(block->inptr[0][0]>rw[2]+block->rpar[1]/2){
00030       rw[3]=block->inptr[0][0]-block->rpar[1]/2;
00031     } else if (block->inptr[0][0]<rw[2]-block->rpar[1]/2){
00032       rw[3]=block->inptr[0][0]+block->rpar[1]/2;
00033     } else {
00034       rw[3]=rw[2];
00035     }
00036     block->outptr[0][0]=rw[3];
00037   }  else if (flag == 9) {
00038     rw=*block->work;
00039     t=get_scicos_time();
00040     if(t>rw[1]){
00041       block->g[0] = block->inptr[0][0]-block->rpar[1]/2-rw[3];
00042       block->g[1] = block->inptr[0][0]+block->rpar[1]/2-rw[3];
00043     }else{
00044       block->g[0] = block->inptr[0][0]-block->rpar[1]/2-rw[2];
00045       block->g[1] = block->inptr[0][0]+block->rpar[1]/2-rw[2];
00046     }
00047   } 
00048 }

Generated on Sun Mar 4 15:03:59 2007 for Scilab [trunk] by  doxygen 1.5.1