SHIFT
function [x,y,typ]=SHIFT(job,arg1,arg2)
// Copyright INRIA
x=[];y=[];typ=[];
select job
case 'plot' then
sgn=arg1.model.ipar
VOP=["Arithmetic", "Circular"]
OPER=VOP(evstr( arg1.graphics.exprs(3))+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
model=arg1.model
exprs=graphics.exprs
while %t do
[ok,Datatype,nb,np,exprs]=getvalue('Set Shift block parameters',..
['Datatype (3=int32 4=int16 5=int8 ...)';..
'Number of bits to shift left (use negatif number to shift right)';..
'Shifttype(0=Arithmetic 1=Circular)'],..
list('vec',1,'vec',1,'vec',1),exprs)
if ~ok then break,end
if (np~=0 & np~=1) then message ("shifttyp is not supported");ok=%f;end
it=Datatype;
ot=Datatype;
// model.sim=list('shift_ia',4)
if (Datatype==3 | Datatype==6) then
if nb>0 then
select np
case 0 then model.sim=list('shift_32_LA',4)
case 1 then model.sim=list('shift_32_LC',4)
end
elseif nb<0
select np
case 0 then
select Datatype
case 3 model.sim=list('shift_32_RA',4)
case 6 model.sim=list('shift_u32_RA',4)
end
case 1 then model.sim=list('shift_32_RC',4)
end
end
elseif (Datatype==4 | Datatype==7) then
if nb>0 then
select np
case 0 then model.sim=list('shift_16_LA',4)
case 1 then model.sim=list('shift_16_LC',4)
end
elseif nb<0
select np
case 0 then
select Datatype
case 4 model.sim=list('shift_16_RA',4)
case 7 model.sim=list('shift_u16_RA',4)
end
case 1 then model.sim=list('shift_16_RC',4)
end
end
elseif (Datatype==5 | Datatype==8) then
if nb>0 then
select np
case 0 then model.sim=list('shift_8_LA',4)
case 1 then model.sim=list('shift_8_LC',4)
end
elseif nb<0
select np
case 0 then
select Datatype
case 5 model.sim=list('shift_8_RA',4)
case 8 model.sim=list('shift_u8_RA',4)
end
case 1 then model.sim=list('shift_8_RC',4)
end
end
else message("Datatype is not supported");ok=%f;
end
if ok then
[model,graphics,ok]=set_io(model,graphics,...
list([-1,-2],it),...
list([-1,-2],ot),[],[])
end
if ok then
model.ipar=nb
graphics.exprs=exprs
x.graphics=graphics;x.model=model
break
end
end
case 'define' then
sgn=[0;0]
OPER=0;
model=scicos_model()
model.sim=list('shift_32_LA',4)
model.in=-1
model.out=-1
model.in2=-2
model.out2=-2
model.intyp=3
model.outtyp=3
model.rpar=[]
model.ipar=sgn
model.blocktype='c'
model.dep_ut=[%t %f]
exprs=[sci2exp(3);sci2exp(0);sci2exp(0)]
gr_i=['xstringb(orig(1),orig(2),[OPER;'' Shift ''],sz(1),sz(2),''fill'')']
x=standard_define([3 2],model, exprs,gr_i)
end
endfunction