Interfacing function
eng

##
READC_f

### File content

    function [x,y,typ]=READC_f(job,arg1,arg2)
    // Copyright INRIA
    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=x.model;
      graphics=arg1.graphics;exprs=graphics.exprs
      out=model.out
      dstate=model.dstate
      ipar=model.ipar
      imask=9+ipar(1)
      tmask=ipar(imask)
      lunit=dstate(3)
      fname=exprs(3)
      frmt=exprs(4)
      while %t do
        [ok,tmask1,outmask,fname1,frmt1,M,N,offset,swap,exprs]=getvalue(..
    	['Set READC block parameters';
    	 'Read is done on a binary file'],..
    	['Time record selection';
    	 'Outputs record selection';
    	 'Input file name';
    	 'Input Format';
    	 'Record size';
    	 'Buffer size (in records)';
    	 'Initial record index';
    	 'Swap mode 0/1'],..
    	 list('vec',-1,'vec',-1,'str',1,'str',1,'vec',1,'vec',1,'vec',1,'vec',1),..
    	 exprs)
        if ~ok then break,end //user cancel modification
        fname1=stripblanks(fname1)
        frmt1=stripblanks(frmt1)
        fmts=['s','l','d','f','c','us','ul','uc','ull','uls','ubl','ubs',..
    	   'dl','fl','ll','sl','db','fb','lb','sb']
        if prod(size(tmask1))>1 then
          message('Time record selection must be a scalar or an empty matrix')
        elseif and(frmt1<>fmts) then
          message(['Incorrect format, valid formats are:'
    	      strcat(fmts,', ')])
        elseif alreadyran&fname1<>fname then
          message(['You cannot modify Output file name when running';'End current simulation first'])
        elseif N<>ipar(6)&alreadyran then
          message(['You cannot modify buffer length when running';'End current simulation first'])
        elseif alreadyran&size(tmask1)<>size(tmask) then
          message(['You cannot modify time management when running';'End current simulation first'])
        elseif N<1 then
          message('Buffer size must be at least 1')
        elseif swap<>0&swap<>1 then
          message('Swap mode must be 0 or 1')
        else
          if tmask1==[] then ievt=0;tmask1=0;outpt=[];else ievt=1;outpt=1;end
          out=size(outmask,'*')
          [model,graphics,ok]=check_io(model,graphics,[],out,1,outpt)
          frmt1=part(frmt1,1:3);
          if ok then
    	if ievt==0 then
    	  model.firing=-1
    	else
    	  model.firing=0
    	end
    	ipar=[length(fname1);
    	    str2code(frmt1);
    	    ievt;
    	    N;
    	    M;
    	    swap;
    	    offset
    	    str2code(fname1);
    	    tmask1
    	    outmask(:)]
    	if prod(size(dstate))<>(N*M)+3 then
    	  dstate=[-1;-1;lunit;zeros(N*M,1)]
    	end
    	model.dstate=dstate;model.ipar=ipar
    	graphics.exprs=exprs;
    	x.graphics=graphics;x.model=model
    	break
          end
        end
      end
    case 'define' then
      frmt='d  '
      fname='foo'
      lunit=0
      N=20;
      M=1
      rpar=[]
      tmask=0
      swap=0
      offset=1
      outmask=1
      ievt=0
      nout=size(outmask,'*')

      ipar=[length(fname);str2code(frmt);ievt;N;M;swap;offset;str2code(fname);
          tmask;outmask]
      model=scicos_model()
      model.sim=list('readc',2)
      model.out=nout
      model.evtin=1
      model.evtout=[]
      model.dstate=[1;1;lunit;zeros(N*M,1)]
      model.ipar=[length(fname);str2code(frmt);ievt;N;M;swap;offset;str2code(fname);
    	      tmask;outmask]
      model.blocktype='d'
      model.firing=-1
      model.dep_ut=[%f %f]

      exprs=['[]';
    	sci2exp(outmask);
    	fname;
    	frmt;
    	string(M);
    	string(N);
    	string(offset);
    	string(swap)]
      gr_i=['txt=[''read from'';''C binary file''];';
        'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'')']
      x=standard_define([3 2],model,exprs,gr_i)
    end
    endfunction