function [x,y,typ]=WhileIterator(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 model=arg1.model;graphics=arg1.graphics;exprs=graphics.exprs while %t do [ok,nbre_iter,w_typ,resetstate,ext_out,iter_dtype,exprs]=.. getvalue('While Iterator parameters',.. [ 'Number of Iteration (-1 : unlimited)'; 'While type (1=while 0=do while)'; 'State when starting (0=held 1=reset)'; 'Show iteration variable(0=No 1=Yes)'; 'Iteration Datatype (1=Double 3=int32 4=int16 5=int8)'],.. list('vec',1,'vec',1,'vec',1,'vec',1,'vec',1),exprs); if ~ok then break,end if and(w_typ<>[0,1]) then message('While type must be zero or one');ok=%f; elseif and(ext_out<>[0,1]) then message('Show Iteration Variable must be zero or one');ok=%f; elseif and(iter_dtype<>[1,3,4,5]) then message('Data type must be one three four five');ok=%f; elseif ((nbre_iter<-1)|(nbre_iter<>floor(nbre_iter))) then message(['Number of Iteration must be:';' * an integer greater than 0';' * -1']);ok=%f; elseif and(resetstate<>[0,1]) then message('State when starting must be zero or one');ok=%f; end if ok then out=ones(ext_out,2); ot=iter_dtype*ones(size(out,1),1); in=[[1 1];ones(w_typ,2)]; it=iter_dtype*ones(size(in,1),1); [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[]) if ok then //if ((size(old_in,'*')<>size(in(:,1),'*')) | old_ext_i<>ext_i) then graphics.pin=zeros(size(in,1),1);end vv=['double','','int32','int16','int8'] execstr('model.odstate=list('+vv(iter_dtype)+'(1))'); graphics.exprs=exprs; model.ipar=[]; x.model=model;x.graphics=graphics; break; end end end case 'define' then model=scicos_model() junction_name='whileiterator'; funtyp=4; model.sim=list(junction_name,funtyp) model.in=[1;1] model.in2=[1;1] model.intyp=[1;1] model.out=[] model.out2=[] model.outtyp=[] model.evtin=[]; model.evtout=[] model.state=[] model.dstate=[]; model.odstate=list(1); model.rpar=[] model.ipar=[] model.blocktype='d' model.firing=[] model.dep_ut=[%f %f] exprs=['5';'1';'0';'0';'1'] gr_i=[ '[x,y,typ]=standard_inputs(o) '; 'dd=sz(1)/16,de=2*sz(1)/8;'; 'if ~arg1.graphics.flip then dd=6*sz(1)/8;de=sz(1)/16;end'; 'if ~exists(''%zoom'') then %zoom=1, end;' 'for k=1:size(x,''*'')'; ' if typ(k)==1'; 'if k==1 then' ' txt=''Cond'';'; 'else' ' txt=''IC'';'; 'end'; 'rectstr=stringbox(txt,orig(1)+dd,y(k)-4,0,1,1);' 'w=(rectstr(1,3)-rectstr(1,2))*%zoom;' 'h=(rectstr(2,2)-rectstr(2,4))*%zoom;' 'xstringb(orig(1)+dd,y(k)-4,txt,w,h,''fill'')'; 'end'; 'end'; 'if arg1.graphics.exprs(2)==''1'' then'; ' xstringb(orig(1)+de,orig(2),['' while {'';'' .... '';''} ''],3*sz(1)/4,sz(2),''fill'');'; 'else'; ' xstringb(orig(1)+de,orig(2),['' do {'';'' .... '';''} while ''],3*sz(1)/4,sz(2),''fill'');'; 'end';] x=standard_define([4 2],model,exprs,gr_i) end endfunction