RELATIONALOP
function [x,y,typ]=RELATIONALOP(job,arg1,arg2)
x=[];y=[];typ=[]
select job
case 'plot' then
VOP=['==', '~=', '<', '<=', '>=','>']
OPER=VOP(evstr( arg1.graphics.exprs(1))+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)]; end
while %t do
[ok,rule,zcr,Datatype,exprs]=getvalue('Set parameters',..
['Operator: == (0), ~= (1), < (2), <= (3), >= (4), > (5)';..
'Use zero crossing (no: 0), (yes: 1)'
'Datatype (1=double 3=int32 ...)'],..
list('vec',1,'vec',1,'vec',1),exprs)
if ~ok then break,end
rule=int(rule);if zcr<>0 then zcr=1,end
if (rule<0)|(rule>5) then
message('Incorrect operator '+string(rule)+' ; must be 0 to 5.')
end
if (Datatype==1) then
model.sim=list('relational_op',4)
elseif (Datatype==3) then
model.sim=list('relational_op_i32',4)
elseif(Datatype==4) then
model.sim=list('relational_op_i16',4)
elseif(Datatype==5) then
model.sim=list('relational_op_i8',4)
elseif(Datatype==6) then
model.sim=list('relational_op_ui32',4)
elseif(Datatype==7) then
model.sim=list('relational_op_ui16',4)
elseif(Datatype==8) then
model.sim=list('relational_op_ui8',4)
else message("Datatype is not supported");ok=%f;
end
if ok then
it=Datatype*ones(1,2)
ot=Datatype
in=[-1 -2;-1 -2]
out=[-1 -2]
[model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
end
if ok then
graphics.exprs=exprs;
model.ipar=[rule],
model.nzcross=zcr,
model.nmode=zcr,
x.graphics=graphics;x.model=model
break
end
end
case 'define' then
ipar=[2]
model=scicos_model()
model.sim=list('relationalop',4)
model.in=[1;1]
model.out=1
model.ipar=ipar
model.blocktype='c'
model.dep_ut=[%t %f]
exprs=[string(ipar);string(0)]
gr_i=['xstringb(orig(1),orig(2),[''Relational'';''Op : ''+OPER],sz(1),sz(2),''fill'');']
x=standard_define([2.5 2],model,exprs,gr_i)
end
endfunction