Interfacing function
eng

##
STEP_FUNCTION

### File content

    function [x,y,typ]=STEP_FUNCTION(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
      // paths to updatable parameters or states
      ppath = list(1)
      newpar=list();
      for path=ppath do
        np=size(path,'*')
        spath=list()
        for k=1:np
          spath($+1)='model'
          spath($+1)='rpar'
          spath($+1)='objs'
          spath($+1)=path(k)
        end
        xx=arg1(spath)// get the block
        execstr('xxn='+xx.gui+'(''set'',xx)')

        if diffobjs(xxn,xx) then
          model=xx.model
          model_n=xxn.model
          if ~is_modelica_block(xx) then
    	modified=or(model.sim<>model_n.sim)|..
    		 ~isequal(model.state,model_n.state)|..
    		 ~isequal(model.dstate,model_n.dstate)|..
    		 ~isequal(model.rpar,model_n.rpar)|..
    		 ~isequal(model.ipar,model_n.ipar)|..
    		 ~isequal(model.label,model_n.label)
    	if or(model.in<>model_n.in)|or(model.out<>model_n.out) then
    	  // input or output port sizes changed
    	  needcompile=1
    	end
    	if or(model.firing<>model_n.firing)  then
    	  // initexe changed
    	  needcompile=2
    	end
    	if model.sim=='input'|model.sim=='output' then
    	  if model.ipar<>model_n.ipar then
    	    needcompile=4
    	  end
    	end
    	if or(model.blocktype<>model_n.blocktype)|..
    	      or(model.dep_ut<>model_n.dep_ut)  then
    	  // type 'c','d','z','l' or dep_ut changed
    	  needcompile=4
    	end
    	if (model.nzcross<>model_n.nzcross)|(model.nmode<>model_n.nmode) then
    	  // size of zero cross changed
    	  needcompile=4
    	end
    	if prod(size(model_n.sim))>1 then
    	  if model_n.sim(2)>1000 then  // Fortran or C Block
    	    if model.sim(1)<>model_n.sim(1) then  //function name has changed
    	      needcompile=4
    	    end
    	  end
    	end
          else //implicit block
    	//force compilation if an implicit block has been edited
    	modified=or(model_n<>model)
    	eq=model.equations;eqn=model_n.equations;
    	if or(eq.model<>eqn.model)|or(eq.inputs<>eqn.inputs)|..
    				      or(eq.outputs<>eqn.outputs) then
    	  needcompile=4
    	end
          end

          // parameter or states changed
          arg1(spath)=xxn// Update
          newpar(size(newpar)+1)=path// Notify modification
        end
      end
      x=arg1
      y=needcompile
      typ=newpar
    case 'define' then
      model = mlist(..
      ['model','sim','in','in2','intyp','out','out2','outtyp','evtin','evtout','state','dstate',..
      'odstate','rpar','ipar','opar','blocktype','firing','dep_ut','label','nzcross','nmode','equations'],..
      'csuper',[],[],1,-1,[],1,[],[],[],[],list(),..
      mlist(['diagram','props','objs'],..
      tlist(..
      ['params','wpar','title','tol','tf','context','void1','options','void2','void3','doc'],..
      [600,450,0,0,600,450],['STEP_FUNCTION','./'],[0.0001;1.000E-06;1.000E-10;100001;0;0],14,..
      ' ',[],..
      tlist(['scsopt','3D','Background','Link','ID','Cmap'],list(%t,33),[8,1],[1,5],..
      list([5,0],[4,0]),[0.8,0.8,0.8]),[],[],list()),..
      list(..
      mlist(['Block','graphics','model','gui','doc'],..
      mlist(..
      ['graphics','orig','sz','flip','exprs','pin','pout','pein','peout','gr_i','id',..
      'in_implicit','out_implicit'],[82.230597,652.6813],[40,40],%t,['1';'0';'1'],[],4,2,2,..
      list(['txt=[''Step''];';'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'');'],8),..
      emptystr(),[],[]),..
      mlist(..
      ['model','sim','in','in2','intyp','out','out2','outtyp','evtin','evtout','state','dstate',..
      'odstate','rpar','ipar','opar','blocktype','firing','dep_ut','label','nzcross','nmode','equations'],..
      list('step_func',4),[],[],1,1,[],1,1,1,[],..
      [],list(),[0;1],[],list(),'c',1,[%f,%t],emptystr(),0,0,list()),'STEP',list()),..
      mlist(['Link','xx','yy','id','thick','ct','from','to'],..
      [102.2306;102.2306;63.708992;63.708992;102.2306;102.2306],..
      [646.96701;622.2884;622.2884;711.98452;711.98452;698.39559],'drawlink',[0,0],[5,-1],..
      [1,1,0],[1,1,1]),..
      mlist(['Block','graphics','model','gui','doc'],..
      mlist(..
      ['graphics','orig','sz','flip','exprs','pin','pout','pein','peout','gr_i','id',..
      'in_implicit','out_implicit'],[150.80203,662.6813],[20,20],%t,'1',4,[],[],[],list(' ',8),..
      emptystr(),[],[]),..
      mlist(..
      ['model','sim','in','in2','intyp','out','out2','outtyp','evtin','evtout','state','dstate',..
      'odstate','rpar','ipar','opar','blocktype','firing','dep_ut','label','nzcross','nmode','equations'],..
      'output',-1,[],1,[],[],1,[],[],[],[],list(),[],1,list(),..
      'c',[],[%f,%f],emptystr(),0,0,list()),'OUT_f',list()),..
      mlist(['Link','xx','yy','id','thick','ct','from','to'],[130.80203;150.80203],..
      [672.6813;672.6813],'drawlink',[0,0],[1,1],[1,1,0],[3,1,1]))),[],list(),'h',[],[%f,%f],emptystr(),..
      0,0,list())
      gr_i=[  'thick=xget(''thickness'')'
    	  'pat=xget(''pattern'')'
    	  'fnt=xget(''font'')'
    	  'xpoly(orig(1)+[0.071;0.413;0.413;0.773]*sz(1),orig(2)+[0.195;0.195;0.635;0.635]*sz(2),'"lines"')';
    	  'xset(''thickness'',thick)'
    	  'xset(''pattern'',pat)'
    	  'xset(''font'',fnt(1),fnt(2))']
      x=standard_define([2 2],model,[],gr_i)
    end
    endfunction