Interfacing function
eng


SHIFT

File content


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