Interfacing function
eng


BINACCU_c

File content


//BINACCU_c Scicos Binary accumulator function block
//Classical interface function ver1.0 - scilab-3.0
//14 mars 2006 - INRIA - Author : A.Layec
function [x,y,typ]=BINACCU_c(job,arg1,arg2)
x=[];y=[];typ=[]
select job
case 'plot' then
  standard_draw(arg1)
case 'getinputs' then
  [x,y,typ]=standard_inputs(arg1)
case 'getoutputs' then
  [x,y,typ]=standard_outputs(arg1)
case 'getorigin' then
  [x,y]=standard_origin(arg1)
case 'set' then
   x=arg1;
   graphics=arg1.graphics;model=arg1.model;
   exprs=graphics.exprs;

   while %t do

      txt=['Set Binary Accumulator Block'];
      [ok,nbit,nw,ci,nci,ci_sup,cc2_in,cc2_out,herit,exprs]=getvalue(txt,...
      ['Number of bit';'Number of word';'Set output initial condition';
       'Number of additional initial condition';...
       'Set additional initial condition';...
       '2''s complement in input (0:No/1:Yes)';...
       '2''s complement in output (0:No/1:Yes)';...
       'Inherit (no:0, yes:1)'],...
      list('vec',-1,'vec',-1,'vec',-1,'vec',-1,...
           'vec',-1,'vec',-1,'vec',-1,'vec',1),exprs);

      if ~ok then break,end;

      if (size(nbit)==size(nw)&size(nbit)==size(nci)&...
          size(nbit)==size(ci)&size(nbit)==size(cc2_in)&...
          size(nbit)==size(cc2_out)) then
        if (sum(nci)==size(ci_sup,'*')) then
           Nu=size(nbit,'*');
           if ok then
              graphics.exprs=exprs
              nbit=int(nbit);nw=int(nw);nci=int(nci);ci=int(ci)
              cc2_in=int(cc2_in);cc2_out=int(cc2_out)
              nci=nci(:)
              ipar=[cc2_in(:);cc2_out(:);nw(:);nbit(:);[0;cumsum(nci(1:$-1))];ci_sup(:)]
              model.ipar=ipar(:)
              model.dstate=[zeros(Nu,1);ci(:);nci(:)]
              model.in=Nu;model.out=Nu
              if herit==1 then
                model.evtin=[]
                [model,graphics,ok]=check_io(model,graphics,Nu,Nu,[],[]);
              else
                model.evtin=1
                [model,graphics,ok]=check_io(model,graphics,Nu,Nu,1,[]);
              end
              x.graphics=graphics; x.model=model;
              break;
           end
        else
         message('Number of initial conditions parameter doesn''t'+...
                 ' match with dimensions of initial condition parameter');
        end
      else
       message('Inconsistent parameters dimensions');
      end
   end

case 'define' then
  Nu=1
  nbit=3
  nw=4
  ci=0
  nci=0
  ci_sup=0
  cnw=0
  cc2_in=1
  cc2_out=1
  herit=0

  model=scicos_model()
  model.sim=list('binaccu',4)
  model.in=Nu
  model.out=Nu
  model.evtin=1
  model.evtout=[]
  model.dstate=[zeros(Nu,1);zeros(Nu,1);nci(:)]
  model.rpar=[]
  nci=nci(:)
  model.ipar=[cc2_in(:);cc2_out(:);nw(:);nbit(:);[0;cumsum(nci(1:$-1))];ci_sup(:)]
  model.blocktype='d'
  model.firing=[]
  model.dep_ut=[%f %f]

  gr_i=['txt=[''     Binary'';''Accumulator''];';
    'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'');']
  exprs=[string(nbit);string(nw);string(ci);string(nci);...
         sci2exp(ci_sup);string(cc2_in);string(cc2_out);string(herit)]
  x=standard_define([2.5 2],model,exprs,gr_i)
end
endfunction