Interfacing function
eng


LOGICAL_OP

File content


function [x,y,typ]=LOGICAL_OP(job,arg1,arg2)
x=[];y=[];typ=[]
select job
 case 'plot' then
  VOP=['AND', 'OR', 'NAND', 'NOR', 'XOR','NOT']
  OPER=VOP(evstr( arg1.graphics.exprs(2))+1)
  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;exprs=graphics.exprs
  model=arg1.model;
  if size(exprs,1)==2 then exprs=[exprs;sci2exp(1);sci2exp(0)];end
  while %t do
    [ok,nin,rule,Datatype,tp,exprs]=getvalue('Set parameters',..
	['Number of inputs';..
	 'Operator: AND (0), OR (1), NAND (2), NOR (3), XOR (4), NOT (5)'
         'Datatype (1=double 3=int32 ...)';..
         'Bitwise Rule(0=No 1=yes)'],..
	list('vec',1,'vec',1,'vec',1,'vec',1),exprs)
    if ~ok then break,end
    nin=int(nin);rule=int(rule);tp=int(tp)
    if nin<1 then
      message('Number of inputs must be >=1 ');ok=%f
    elseif (rule<0)|(rule>5) then
      message('Incorrect operator '+string(rule)+' ; must be 0 to 5.');ok=%f
    elseif (rule==5)&(nin>1) then
      message('Only one input allowed for NOT operation')
      nin=1
    elseif ((Datatype==1)&(tp~=0))
      message ("Bitwise Rule is only activated when Data type is integer");ok=%f
    end
    if ok then
      if (tp~=0) then tp=1; end
      if Datatype==1 then
	model.sim=list('logicalop',4)
	model.ipar=[rule],
      else
        if Datatype==3|Datatype==9 then 
	  model.sim=list('logicalop_i32',4)
        elseif Datatype==4 then
	  model.sim=list('logicalop_i16',4)
        elseif Datatype==5 then
	  model.sim=list('logicalop_i8',4)
        elseif Datatype==6 then
	  model.sim=list('logicalop_ui32',4)
        elseif Datatype==7 then
	  model.sim=list('logicalop_ui16',4)
        elseif Datatype==8 then
	  model.sim=list('logicalop_ui8',4)
        else message ("Datatype is not supported");ok=%f;
        end
        model.ipar=[rule;tp];
      end
      if ok then
	it=Datatype*ones(nin,1);
	ot=Datatype;
	in=[-ones(nin,1) -2*ones(nin,1)]
      	if (rule<>5)&(nin==1) then
	    out=[1 1]
	    [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
        else
	    out=[-1 -2]
	    [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
        end
      end
      if ok then
	graphics.exprs=exprs;
	x.graphics=graphics;x.model=model
	break
      end
    end
  end
case 'define' then
  in=[-1;-1]
  ipar=[0]
  nin=2
  
  model=scicos_model()
  model.sim=list('logicalop',4)
  model.in=in
  model.out=-1
  model.ipar=ipar
  model.blocktype='c'
  model.dep_ut=[%t %f]
  
  exprs=[string(nin);string(ipar)]
  gr_i=['xstringb(orig(1),orig(2),[''Logical Op'';OPER],sz(1),sz(2),''fill'');']
  x=standard_define([2.5 2],model,exprs,gr_i)
end
endfunction