import macros
Allan CORNET [Mon, 8 Jun 2009 08:42:33 +0000 (10:42 +0200)]
70 files changed:
scilab/modules/scicos/macros/scicos_scicos/CFORTR2.sci
scilab/modules/scicos/macros/scicos_scicos/Eval_.sci
scilab/modules/scicos/macros/scicos_scicos/FindSBParams.sci
scilab/modules/scicos/macros/scicos_scicos/RemoveMask_.sci
scilab/modules/scicos/macros/scicos_scicos/build_modelica_block.sci
scilab/modules/scicos/macros/scicos_scicos/compile_modelica.sci
scilab/modules/scicos/macros/scicos_scicos/context_evstr.sci
scilab/modules/scicos/macros/scicos_scicos/do_SaveAs.sci
scilab/modules/scicos/macros/scicos_scicos/do_edit_pal.sci
scilab/modules/scicos/macros/scicos_scicos/do_eval.sci
scilab/modules/scicos/macros/scicos_scicos/do_label.sci
scilab/modules/scicos/macros/scicos_scicos/do_region2block.sci
scilab/modules/scicos/macros/scicos_scicos/do_run.sci
scilab/modules/scicos/macros/scicos_scicos/do_saveblockgui.sci
scilab/modules/scicos/macros/scicos_scicos/do_select2block.sci
scilab/modules/scicos/macros/scicos_scicos/do_set_info.sci
scilab/modules/scicos/macros/scicos_scicos/findinlistcmd.sci
scilab/modules/scicos/macros/scicos_scicos/get_errorcmd.sci
scilab/modules/scicos/macros/scicos_scicos/lnkptrcomp.sci
scilab/modules/scicos/macros/scicos_scicos/modipar.sci
scilab/modules/scicos/macros/scicos_scicos/point2pixel.sci
scilab/modules/scicos/macros/scicos_scicos/scicos_diagram.sci
scilab/modules/scicos/macros/scicos_scicos/scicos_flat.sci
scilab/modules/scicos/macros/scicos_scicos/scicos_params.sci
scilab/modules/scicos/macros/scicos_scicos/setvalue.sci
scilab/modules/scicos/macros/scicos_scicos/standard_document.sci
scilab/modules/scicos/macros/scicos_scicos/standard_draw.sci
scilab/modules/scicos/macros/scicos_scicos/validvar.sci
scilab/modules/scicos_blocks/macros/Branching/CLKGotoTagVisibility.sci
scilab/modules/scicos_blocks/macros/Branching/DEMUX.sci
scilab/modules/scicos_blocks/macros/Branching/GotoTagVisibility.sci
scilab/modules/scicos_blocks/macros/Branching/GotoTagVisibilityMO.sci
scilab/modules/scicos_blocks/macros/Branching/MUX.sci
scilab/modules/scicos_blocks/macros/Branching/M_SWITCH.sci
scilab/modules/scicos_blocks/macros/Branching/SELECT_m.sci
scilab/modules/scicos_blocks/macros/Branching/SWITCH2_m.sci
scilab/modules/scicos_blocks/macros/Electrical/Capacitor.sci
scilab/modules/scicos_blocks/macros/Electrical/Inductor.sci
scilab/modules/scicos_blocks/macros/Electrical/OpAmp.sci
scilab/modules/scicos_blocks/macros/Electrical/Resistor.sci
scilab/modules/scicos_blocks/macros/Events/IFTHEL_f.sci
scilab/modules/scicos_blocks/macros/Events/M_freq.sci
scilab/modules/scicos_blocks/macros/IntegerOp/DFLIPFLOP.sci
scilab/modules/scicos_blocks/macros/IntegerOp/DLATCH.sci
scilab/modules/scicos_blocks/macros/IntegerOp/JKFLIPFLOP.sci
scilab/modules/scicos_blocks/macros/IntegerOp/SRFLIPFLOP.sci
scilab/modules/scicos_blocks/macros/Linear/CLR.sci
scilab/modules/scicos_blocks/macros/Linear/CLR_f.sci
scilab/modules/scicos_blocks/macros/Linear/DERIV.sci
scilab/modules/scicos_blocks/macros/Linear/DLR.sci
scilab/modules/scicos_blocks/macros/Linear/DLR_f.sci
scilab/modules/scicos_blocks/macros/Linear/GAINBLK.sci
scilab/modules/scicos_blocks/macros/Linear/INTEGRAL_m.sci
scilab/modules/scicos_blocks/macros/MatrixOp/MATCATH.sci
scilab/modules/scicos_blocks/macros/MatrixOp/MATCATV.sci
scilab/modules/scicos_blocks/macros/MatrixOp/MATMUL.sci
scilab/modules/scicos_blocks/macros/Misc/CBLOCK.sci
scilab/modules/scicos_blocks/macros/Misc/DIFF_f.sci
scilab/modules/scicos_blocks/macros/Misc/DSUPER.sci
scilab/modules/scicos_blocks/macros/Misc/RELATIONALOP.sci
scilab/modules/scicos_blocks/macros/Misc/TEXT_f.sci
scilab/modules/scicos_blocks/macros/NonLinear/PRODUCT.sci
scilab/modules/scicos_blocks/macros/PDE/PDE.sci
scilab/modules/scicos_blocks/macros/Sinks/TOWS_c.sci
scilab/modules/scicos_blocks/macros/Sources/Counter.sci
scilab/modules/scicos_blocks/macros/Sources/FROMWSB.sci
scilab/modules/scicos_blocks/macros/Sources/FROMWS_c.sci
scilab/modules/scicos_blocks/macros/Sources/GENSIN_f.sci
scilab/modules/scicos_blocks/macros/Sources/SLIDER_f.sci
scilab/modules/scicos_blocks/macros/Sources/STEP.sci

index 2c48249..ed64b39 100644 (file)
 // See the file ../license.txt
 //
 
-function [ok,tt]=CFORTR2(funam,tt)
+function [ok,tt,cancel]=CFORTR2(funam,tt)
 
-//** this function provide a skeleton for C/FORTRAN Scicos blocks
+//
+cancel=%f
 
-if tt==[] then //** if the block is empty, put the skeleton inside 
+if tt==[] then
   
   textmp=[
          '#include <math.h>';
          '#include <stdlib.h>';
-         '#include <scicos_block.h>';
+         '#include <scicos/scicos_block.h>';
          'void '+funam+'(scicos_block *block,int flag)';
         ];
   ttext=[];
@@ -122,27 +123,42 @@ else
   textmp=tt;
 end
 
-//** After the editing, try to compile and load the lib 
+tt = textmp
+ok   = %t
+//## set param of scstxtedit
+ptxtedit=scicos_txtedit(clos = 0,...
+          typ  = "Cfunc",...
+          head = ['Function definition in C';
+                  'Here is a skeleton of the functions which';
+                  ' you shoud edit.']);
+
+while 1==1
+
+  [txt,Quit] = scstxtedit(textmp,ptxtedit);
+
+  if ptxtedit.clos==1 then
+    break;
+  end
 
-while %t 
-  [txt] = x_dialog(['Function definition in C';
-                   'Here is a skeleton of the functions which';
-                    'you shoud edit'],..
-                   textmp);
-  
   if txt<>[] then
-    tt = txt
-    [ok] = scicos_block_link(funam,tt,'c'); //** compile, link and load the shared library 
-    if ok then
-      textmp = txt;
+    [libss,ok,cancel]=get_dynamic_lib_dir(txt,funam,'c')
+
+    if ~cancel & ok then
+      [ok]=scicos_block_link(funam,txt,'c',libss)
+      if ok then
+        ptxtedit.clos=1
+        tt=txt
+        ok = %t;
+      end
+      textmp=txt;
     end
-    break;
-  else
+  end
+
+  if Quit==1 then
     ok = %f;
-    break  ;
-  end 
+    cancel =%t;
+    break;
+  end
 end
 
-
 endfunction
index 8a30d87..545bff2 100644 (file)
@@ -40,7 +40,7 @@ function Eval_()
     xset('window',%now_win)
     if ierr==0 then 
       do_terminate()
-      [scs_m,%cpr,needcompile,ok]=do_eval(scs_m,%cpr)
+      [scs_m,%cpr,needcompile,ok]=do_eval(scs_m,%cpr,%scicos_context)
       if needcompile<>4&size(%cpr)>0 then %state0=%cpr.state,end
       alreadyran=%f
     else
index 47f3646..b69e0d5 100644 (file)
@@ -26,43 +26,45 @@ function [params,param_types]=FindSBParams(scs_m,params)
     ['global par_types'
      'par_types=c'
      'x=1;y=x(2)'])
-  funcprot(prot); 
-      
+  funcprot(prot);
+
   global par_types
 
   Fun=scs_m.props.context;
   for i=1:size(scs_m.objs)
     o=scs_m.objs(i);
     if typeof(o)=='Block' then
-      model=o.model;
-      if model.sim=='super'|model.sim=='csuper' then
-        Funi='['+FindSBParams(model.rpar,params)+']'
-      else
-        if typeof(o.graphics.exprs)=="MBLOCK" then //modelica block
-          Funi=[];
-          for j=1:lstsize(o.graphics.exprs.paramv)
-             Funi=[Funi;
-                   '['+o.graphics.exprs.paramv(j)+']'];
-          end
+      if o.gui<>'PAL_f' then
+        model=o.model;
+        if model.sim=='super'|model.sim=='csuper'|model.sim(1)=='asuper' then
+          Funi='['+FindSBParams(model.rpar,params)+']'
         else
-          if type(o.graphics.exprs)==15 then
-            Funi='['+o.graphics.exprs(1)(:)+']';
+          if typeof(o.graphics.exprs)=="MBLOCK" then //modelica block
+            Funi=[];
+            for j=1:lstsize(o.graphics.exprs.paramv)
+               Funi=[Funi;
+                     '['+o.graphics.exprs.paramv(j)+']'];
+            end
           else
-            Funi='['+o.graphics.exprs(:)+']';
-          end
-          par_types=[];
-          execstr('blk='+o.gui+'(''define'')')
-          execstr(o.gui+'(''set'',blk)','errcatch')
+            if type(o.graphics.exprs)==15 then
+              Funi='['+o.graphics.exprs(1)(:)+']';
+            else
+              Funi='['+o.graphics.exprs(:)+']';
+            end
+            par_types=[];
+            execstr('blk='+o.gui+'(''define'')')
+            execstr(o.gui+'(''set'',blk)','errcatch')
 
-          Del=[];kk=1;
-          for jj=1:2:length(par_types)
-            if par_types(jj)=='str' then Del=[Del,kk],end
-            kk=kk+1
+            Del=[];kk=1;
+            for jj=1:2:length(par_types)
+              if par_types(jj)=='str' then Del=[Del,kk],end
+              kk=kk+1
+            end
+            Funi(Del)=[]
           end
-          Funi(Del)=[]
         end
+        Fun=[Fun;Funi]
       end
-      Fun=[Fun;Funi]
     end
   end
   deff('%Font3()',Fun)
@@ -100,6 +102,9 @@ function [params,param_types]=FindSBParams(scs_m,params)
     case 17
       param_types($+1)='lis'
       param_types($+1)=-1
+    else
+      param_types($+1)='gen'
+      param_types($+1)=-1
     end
   end
 //  clearglobal('par_types')  //recursive call, so it cannot be cleared here
index e6fa9d8..d36ee90 100644 (file)
@@ -27,7 +27,7 @@ end
 i=Select(1)
 o=scs_m.objs(i)
 if typeof(o)=='Block' then
-   if o.model.sim=='csuper' & o.model.ipar==1 then  
+   if o.model.sim=='csuper' & isequal(o.model.ipar,1)  then  
       o.model.sim='super'
       o.model.ipar=[] 
       o.gui='SUPER_f'
index 47322a3..af6beeb 100644 (file)
@@ -19,8 +19,7 @@
 // See the file ../license.txt
 //
 
-function [model,ok] = build_modelica_block(blklstm, cmmat, NiM, NoM, name, path)
-
+function [model,ok]=build_modelica_block(blklstm,corinvm,cmmat,NiM,NoM,scs_m,path)
 // given the blocks definitions in blklstm and connections in cmmat this
 // function first create  the associated modelicablock  and writes its code
 // in the file named 'imppart_'+name+'.mo' in the directory given by path
@@ -29,35 +28,50 @@ function [model,ok] = build_modelica_block(blklstm, cmmat, NiM, NoM, name, path)
 // dynamically linked with Scilab.
 // The correspondind model data structure is returned.
 
-//** Thanks to Serge Steer for this "superbe" explanation :) 
-
-name = "imppart_" + stripblanks(name);
-path = pathconvert(stripblanks(path),%t,%t);
 
-[txt,rpar,ipar] = create_modelica1(blklstm,cmmat,name);
+//## get the name of the generated main modelica file
+name=stripblanks(scs_m.props.title(1))+'_im'; 
 
-mputl(txt, path+name+'.mo');
+//## generation of the txt for the main modelica file
+//## plus return ipar/rpar for the model of THE modelica block
+[txt,rpar,ipar]=create_modelica(blklstm,corinvm,cmmat,name,scs_m);
 
-mprintf('   Modelica code generated at '+path+name+'.mo\n'); 
+//## write txt in the file path+name+'.mo'
+path=pathconvert(stripblanks(path),%t,%t)
+mputl(txt,path+name+'.mo');
+mprintf('--------------------------------------------\n\r');
+mprintf('%s',' Main Modelica : '+path+name+'.mo'); mprintf('\n\r');
 
-[ok,name1,nx,nin,nout,ng,nm,nz] = compile_modelica(path+name+'.mo'); //** here we are 
+//## search for 
 
-if ~ok then
-   return
+Mblocks = [];
+for i=1:lstsize(blklstm)
+  if type(blklstm(i).sim)==15 then
+    if blklstm(i).sim(2)==30004 then
+      o = scs_m(scs_full_path(corinvm(i)))
+      Mblocks=[Mblocks;
+              o.graphics.exprs.nameF]
+    end
+  end
 end
 
-// nx is the state dimension
-// ng is the number of surfaces
+//generating XML and Flat_Model
+//## compile modelica files
+[ok,name,nipar,nrpar,nopar,nz,nx,nx_der,nx_ns,nin,nout,nm,ng,dep_u]=compile_modelica(path+name+'.mo',Mblocks);
+
+
+if ~ok then return,end
 
-// build model data structure of the block equivalent to the implicit part
-model = scicos_model(sim = list(name,10004),.. 
-                    in  = ones(nin,1),out=ones(nout,1),..
-                    state  = zeros(nx*2,1),..
-                    dstate = zeros(nz,1),..
-                    rpar   = rpar,..
-                    ipar   = ipar,..
-                    dep_ut = [%f %t],..
-                     nzcross = ng,..
-                     nmode   = nm) ; 
+//nx is the state dimension
+//ng is the number of surfaces
+//name1 of the model+flat
 
+//build model data structure of the block equivalent to the implicit part
+model=scicos_model(sim=list(name,10004),.. 
+                   in=ones(nin,1),out=ones(nout,1),..
+                   state=zeros(nx*2,1),..
+                   dstate=zeros(nz,1),..
+                   rpar=rpar,..
+                   ipar=ipar,..
+                   dep_ut=[dep_u %t],nzcross=ng,nmode=nm)
 endfunction
index 7da052f..d341700 100644 (file)
 // See the file ../license.txt
 //
 
-function [ok, name, nx, nin, nout, ng, nm, nz] = compile_modelica(fil)
-
-  //++ Check that modelica compiler is available
-  //++ Otherwise, give some feedback and quit
-  if ~with_modelica_compiler() then
-    messagebox(sprintf(gettext("%s: Error: Modelica compiler (MODELICAC) is unavailable."), "compile_modelica"),"modal","error");
-    name = ''
-    ok = %f, nx = 0, nin = 0, nout = 0, ng = 0, nm = 0, nz = 0; return
+function [ok,name,nipar,nrpar,nopar,nz,nx,nx_der,nx_ns,nin,nout,nm,ng,dep_u]=compile_modelica(filemo,Mblocks)
+// Copyright INRIA
+  lines(0)
+  if exists('%Modelica_Init','global')==0 then 
+    // Modelica_Init becomes true only in "Modelicainitialize_.sci"
+    %Modelica_Init=%f;
   end
 
-  ng    = 0
-  fil   = pathconvert(fil, %f, %t)
-  mlibs = pathconvert(modelica_libs, %f, %t)
-
-  name = basename(fil)
-  path = strsubst(stripblanks(fil), name + '.mo', '')
-
-  JacobianEnabled = %t
-  if JacobianEnabled then
-    JAC = ' -jac '
-  else
-    JAC = ' '
+  if exists('%Jacobian','global')==0 then 
+    %Jacobian=%t;
   end
 
-  // do not update C code if needcompile == 0
-  // this allows C code modifications for debugging purposes
-  updateC = needcompile <> 0 | fileinfo(path + name + '.c') == []
-
-  if updateC then
-
-    //++ Define some platform-dependent variables and filenames
-    if MSDOS
-      modelicac      = 'modelicac.exe'
-      translator_bin = 'translator.exe'
-      modelicac_err  = 'Wmodelicac.err'
-      translator_err = 'Wtranslator.err'
-      unix_err       = 'Wunix.err'
-    else
-      modelicac      = 'modelicac'
-      translator_bin = 'translator'
-      modelicac_err  = 'Lmodelicac.err'
-      translator_err = 'Ltranslator.err'
-      unix_err       = 'Lunix.err'
-    end
-
-    FlatName = fil
-
-    if MSDOS then
-      //++ Windows platforms: enclose paths in double quotes when they contain spaces
-      if strindex(modelicac, ' ') <> [] then
-        modelicac = '""' + modelicac + '""'
-      end
-      modelicac = modelicac + strcat(' -L ""' + mlibs + '""')
-    else
-      modelicac = modelicac + strcat(' -L '+ mlibs)
-    end
-
-    instr = modelicac + ' ' + FlatName + ' -o ' + path + name + '.c ' + JAC + ' > ' + TMPDIR + filesep() + modelicac_err
-    if MSDOS
-      //++ WINDOWS PLATFORMS: Put the instruction in a batch file instead of
-      //++ executing it directly
-      mputl(instr, path + 'genc.bat');
-      instr = path + 'genc.bat'
-    end
-
-    if fileinfo(SCI + '/bin/translator') <> [] then
-      OUTM = unix(instr) <> 0; // in order to mask the message in the Scilab windows
-    else
-      OUTM = execstr('unix_s(instr);', 'errcatch') <> 0
-    end
-
-    if OUTM then // if_modelicac_fails_then_use_translator
-      MSG1 = mgetl(TMPDIR + filesep() + modelicac_err)
-      if fileinfo(fullfile(SCI, 'bin', translator_bin)) <> [] then // if_translator_exists
-        translator = pathconvert(SCI + filesep() + 'bin' + filesep() + translator_bin, %f, %t)
-        ext = filesep() + '*.mo'
-        molibs = []
-        for k = 1:size(mlibs,'*')
-          molibs = [molibs ; listfiles(mlibs(k) + ext)]
-        end
-        txt = []
-        for k = 1:size(molibs, '*')
-          [pathx, fnamex, extensionx] = fileparts(molibs(k))
-          if (fnamex <> 'MYMOPACKAGE') then
-            txt=[txt ; mgetl(molibs(k))]
-          end
-        end
-        mputl(txt, TMPDIR + '/MYMOPACKAGE.mo');
-        // all Modelica files found in "modelica_libs" directories are
-        // merged into the temporary file  "MYMOPACKAGE.mo". This is done
-        // because in Windows the length of the command line is limited.
-        FlatName   = path + name + '_flattened.mo'
-        translator = translator + strcat(' -lib '+ TMPDIR + '/MYMOPACKAGE.mo')
-        //translator = translator + strcat(' -lib ' + molibs)
-        instr = translator + ' -lib ' + fil + ' -o ' + FlatName + " -command ""' + name + ' x;"" > ' + TMPDIR + filesep() + translator_err
-        if MSDOS
-          mputl(instr, path + 'gent.bat');
-          instr = path + 'gent.bat'
-        end
-        if execstr('unix_s(instr)', 'errcatch') <> 0 then
-          MSG2 = mgetl(TMPDIR + filesep() + translator_err)
-          messagebox(['-------Modelica compiler error:-------'; ..
-                     MSG1; ..
-                     '-------Modelica translator error:-------'; ..
-                     MSG2; ..
-                     'Please read the error message in the Scilab window'],"modal","error");
-          ok = %f, nx = 0, nin = 0, nout = 0, ng = 0, nm = 0, nz = 0; return
-        end
-        instr = modelicac + ' ' + FlatName + ' -o ' + path + name + '.c ' + JAC + ' > ' + TMPDIR + filesep() + unix_err
-        if execstr('unix_s(instr)', 'errcatch') <> 0 then
-          MSG3 = mgetl(TMPDIR + filesep() + unix_err)
-          messagebox(['-------Modelica compiler error (without the translator):-------'; ..
-                     MSG1; ..
-                     '-------Modelica compiler error (with the translator):-------'; ..
-                     MSG3; ..
-                     'Please read the error message in the Scilab window'],"modal","error");
-          ok = %f, nx = 0, nin = 0, nout = 0, ng = 0, nm = 0, nz = 0; return
-        else
-          mprintf('   Flat modelica code generated at ' + FlatName + '\n')
-        end
-      else // if_translator_exists
-        messagebox(['-------Modelica compiler error (without the translator):-------'; ..
-                   MSG1; ..
-                   'Please read the error message in the Scilab window'; ..
-                   ' '; ..
-                   'Please install the Modelica translator (available at www.scicos.org) in ""SCI' + filesep() + 'bin"" and try again'],"modal","error");
-        ok = %f, nx = 0, nin = 0, nout = 0, ng = 0, nm = 0, nz = 0; return
-      end // if_translator_exists
-    end // if_modelicac_fails_then_use_translator
-
-    mprintf('   C code generated at ' + path + name + '.c\n')
+  if exists('%Modelica_ParEmb','global')==0 then 
+    %Modelica_ParEmb=%t;
   end
-
-  Cfile = path + name + '.c'
-
-  if MSDOS then
-    Ofile = path + name + '.obj'
-  else
-    Ofile = path + name + '.o'
+    
+  running="off";
+  try   
+    %_winId=TCL_GetVar("IHMLoc")  
+  catch
+    %_winId="nothing";
+  end
+  if (%_winId <> "nothing") then  
+    running=TCL_EvalStr("winfo exists [sciGUIName "+%_winId+"]")
+  end
+  
+  tmpdir=TMPDIR+'\'; tmpdir=pathconvert(tmpdir,%f,%t)    
+  ext='\*.mo';       ext=pathconvert(ext,%f,%t)  
+  [ok,modelicac,translator,xml2modelica]=Modelica_execs();
+  if ~ok then,
+    name='';
+    dep_u=%t; nipar=0;nrpar=0;nopar=0;nz=0;nx=0;nx_der=0;nx_ns=0;nin=0;nout=0;nm=0;ng=0;
+    return;
   end
 
-  // get the generated block properties
-  [nx, nin, nout, ng, nm, nz] = analyze_c_code(mgetl(Cfile))
-
-  mprintf('\n\r Modelica blocks are reduced to a block with:')
-  mprintf('\n\r Number of continuous time states: %d',nx)
-  mprintf('\n\r Number of discrete time states  : %d',nz)
-  mprintf('\n\r Number of zero-crossing surfaces: %d',ng)
-  mprintf('\n\r Number of modes  : %d',nm)
-  mprintf('\n\r Number of inputs : %d',nin)
-  mprintf('\n\r Number of outputs: %d',nout)
-  mprintf('\n\r ')
-
-  // below newest(Cfile, Ofile) is used instead of  updateC in case where
-  // Cfile has been manually modified (debug, ...)
-  if newest(Cfile, Ofile) == 1 then
-    //unlink if necessary
-    [a,b] = c_link(name); while a; ulink(b); [a,b] = c_link(name); end
-    //  build the list of external functions libraries
-
-    // remove repreated directories from mlibs
-    rep = []
-    for k = 1:size(mlibs,'*')
-      for j = k+1:size(mlibs,'*')
-        if stripblanks(mlibs(k)) == stripblanks(mlibs(j)) then rep = [rep,j]; end
+  filemo=pathconvert(filemo,%f,%t)  
+  name=basename(filemo)
+  namef=name+'f';
+  Flat=tmpdir+name+'f.mo';
+  Flatxml=tmpdir+name+'f.xml';
+  Flat_functions=tmpdir+name+'f_functions.mo';
+  xmlfile=tmpdir+name+'f_init.xml';       
+  Relfile=tmpdir+name+'f_relations.xml';
+  incidence=tmpdir+name+"_incidence_matrix.xml"
+  xmlfileTMP=tmpdir+name+'Sim.xml';  if MSDOS then,xmlfileTMP=strsubst(xmlfileTMP,'\','\\') ;end
+  Cfile=tmpdir+name+'.c'
+  
+  // macros/scicos/compile_modelica.sci
+  // macros/auto/scicos_simulate.sci
+  // macros/scicos/clickin.sci
+  // macros/scicos/do_eval.sci
+  // macros/scicos/do_run.sci
+  // compile_init_modelica
+  // MIHM
+  
+  if %Jacobian then, JAC=' -jac '; else, JAC=' '; end
+  
+  //do not update C code if needcompile==0 this allows C code
+  //modifications for debuggingS_translator.er purposes  
+
+  updateC=needcompile<>0|fileinfo(Cfile)==[]
+  updateC=updateC | %Modelica_Init 
+  
+  if updateC  then
+    mlibs=pathconvert(modelica_libs,%f,%t)
+
+    molibs=[]
+    mlibsM=pathconvert(TMPDIR+'/Modelica/',%f,%t)      
+    for k=1:size(Mblocks,'r')
+      funam=stripblanks(Mblocks(k))
+      [dirF,nameF,extF]=fileparts(funam);
+      if (extF=='.mo') then
+       molibs=[molibs;""""+funam+""""];
+      else
+       molibs=[molibs;""""+mlibsM+funam+'.mo'+""""]
       end
     end
-    mlibs(rep) = []
-    //--------------------------------
-    libs = []
-    if MSDOS then ext = '\*.lib', else ext='/*.a', end
-    // removing .a or .lib sufixs
-    for k = 1:size(mlibs,'*')
-      aa = listfiles(mlibs(k) + ext)
-      for j = 1:size(aa,'*')
-        [pathx, fnamex, extensionx] = fileparts(aa(j))
-        libsname = fullfile(pathx, fnamex)
-        libs = [libs; libsname]
+    
+    for k=1:size(mlibs,'*')
+      modelica_file=listfiles(mlibs(k)+ext); 
+      if modelica_file<> [] then 
+       molibs=[molibs;""""+modelica_file+""""];
       end
     end
-    // add modelica_libs to the list of directories to be searched for *.h
-    // if MSDOS then ext='\*.h',else ext='/*.h',end
-    EIncludes = ''
-    for k = 1:size(mlibs,'*')
-      EIncludes = EIncludes + '  -I""' + mlibs(k)+ '""'
+    translator_libs=strcat(' -lib '+ molibs);
+    //---->>>>>>>>>-------------------just for OS limitation-------
+    if MSDOS then, Limit=1000;else, Limit=3500;end
+    if (length(translator_libs)>Limit) then 
+      disp(['WARNING!';..
+           'There are too many Modelica files.';..
+           'it would be better to define several ';..
+           'Modelica programs in a single file.'])
+
+      mymopac= pathconvert(TMPDIR+'/MYMOPACKAGE.mo',%f,%t)
+      txt=[];
+      for k=1:size(molibs,'*')
+       [pathx,fnamex,extensionx]=fileparts(molibs(k));
+       if (fnamex<>'MYMOPACKAGE') then 
+         txt=[txt;mgetl(evstr(molibs(k)))];
+       end
+      end
+      mputl(txt,mymopac);     
+      translator_libs= strcat(' -lib ""'+mymopac+'""');
+    end    
+    //---<<<<<<<------------------just for OS limitation-------
+    //---------------------------------------------------------------------
+    instr='""'+translator+'"" '+translator_libs+' -lib ""'+filemo+'"" -o ""'+Flat+'"" -command ""'+name+' '+namef+';"" > ""'+tmpdir+'S_translator.err""';
+    if MSDOS then,   mputl(instr,tmpdir+'gent.bat'), instr=tmpdir+'gent.bat';end
+        
+    if ( %Modelica_Init ) then 
+      if (fileinfo(xmlfile)==[]) then 
+       overwrite=1;//Yes
+      else
+       overwrite=x_message(['The initialization file already exists!';...
+                   'Do you want to overwrite it?'],['Yes','No'])       
+      end
+    else     
+      // do not generate the flat file when it is already generated by
+      // the initialization GUI
+      if (running =="1") then 
+       overwrite=2;//no
+      else
+       overwrite=1;//yes
+      end        
+    end
+       
+    if (overwrite==2) then 
+      commandresult=0;
+    else
+      commandresult=execstr('unix_s(instr)','errcatch')
     end
-    E2 = ''
-    for i = 1:length(EIncludes)
-      if (part(EIncludes, i) == '\') then
-        E2 = E2 + '\'
+    
+    if commandresult==0 then
+      if (%Modelica_Init) then //---------------------------
+       mprintf('%s',' Init XML file : '+xmlfile); mprintf('\n\r');
+       mprintf('%s',' Init Rel file : '+Relfile); mprintf('\n\r');
+       name=Flat;dep_u=%t;//<<ALERT
+       // dep_u of the initialization block is obtained onley when the  C
+        // code is generated.
+       ok=%t,nipar=0;nrpar=0;nopar=0;nz=0;nx=0;nx_der=0;nx_ns=0;nin=0;nout=0;nm=0;ng=0;      
+       return;
+      else
+       mprintf('%s',' Flat Modelica : '+Flat); mprintf('\n\r');
       end
-      E2 = E2 + part(EIncludes, i)
+    else
+      MSG2=mgetl(tmpdir+'S_translator.err');
+      x_message(['-------Modelica translator error message:-----';MSG2]);
+      ok=%f,
+      dep_u=%t; nipar=0;nrpar=0;nopar=0;nz=0;nx=0;nx_der=0;nx_ns=0;nin=0;nout=0;nm=0;ng=0;
+      return
+    end
+    //---------------------------------------------------------------------
+    if fileinfo(Flat_functions)==[] then,
+      Flat_functions=" "; 
+    else
+      Flat_functions='""'+Flat_functions+'""';
     end
 
-    //** build shared library with the C code
-
-    // files=name+'.o';Make=path+'Make'+name;loader=path+name+'.sce'
-    // ierr=execstr('libn=ilib_for_link(name,files,libs,''c'',Make,loader,'''','''',E2)','errcatch')
-    // if ierr<>0 then
-    //   ok=%f;messagebox(['sorry compilation problem';lasterror()],"modal","error");
-    //   return
-    // end
-
-    // executing loader file
-    // if execstr('exec(loader); ','errcatch')<>0 then
-    //   ok=%f;
-    //   messagebox(['Problem while linking generated code';lasterror()],"modal","error");
-    //   return
-    // end
-
-    files = name
-
-    ok = buildnewblock(name, files, '', libs, TMPDIR, '', E2)
-
-    if ~ok then
+    if ((running=="1" )& (fileinfo(xmlfile)<>[])) then // if GUI is running
+      XMLfiles=' -with-init-in ""'+xmlfileTMP+'"" -with-init-out ""'+xmlfileTMP+'""';
+    else
+      XMLfiles='';
+    end      
+    instr='""'+modelicac+'"" ""'+Flat+'""  '+Flat_functions+' '+XMLfiles+' -o ""'+Cfile+'"" '+JAC+' > ""'+tmpdir+'S_modelicac.err""';    
+    if MSDOS then,   mputl(instr,tmpdir+'genm2.bat'), instr=tmpdir+'genm2.bat';end
+    if execstr('unix_s(instr)','errcatch')==0 then  
+      mprintf('%s',' Simltn C code : '+Cfile); mprintf('\n\r');
+    else
+      MSG3= mgetl(tmpdir+'S_modelicac.err');
+      x_message(['-------Modelica compiler error (with the translator):-------';MSG3;...
+                'Please read the error message in the Scilab window']);            
+      ok=%f,dep_u=%t; nipar=0;nrpar=0;nopar=0;nz=0;nx=0;nx_der=0;nx_ns=0;nin=0;nout=0;nm=0;ng=0;      
       return
-    end
+    end     
+    //---------------------------------------------------------------------
+  end // if update
+  
+  [nipar,nrpar,nopar,nz,nx,nx_der,nx_ns,nin,nout,nm,ng,dep_u]=reading_incidence(incidence)
+  
+  mprintf('\n\r Modelica blocks are reduced to a block with:');
+  mprintf('\n\r Number of differential states: %d',nx_der);
+  mprintf('\n\r Number of algebraic states: %d',nx-nx_der);
+  mprintf('\n\r Number of discrete time states  : %d',nz);
+  mprintf('\n\r Number of zero-crossing surfaces: %d',ng);
+  mprintf('\n\r Number of modes  : %d',nm);
+  mprintf('\n\r Number of inputs : %d',nin);
+  mprintf('\n\r Number of outputs: %d',nout);
+  mprintf('\n\r Input/output dependency:[ ');
+  for i=1:nin,if dep_u(i) then mprintf('T ');else,mprintf('F ');end;end; mprintf(']');
+  if %Jacobian then 
+    mprintf('\n\r Analytical Jacobian: enabled  (\%Jacobian=\%t)');
+  else
+    mprintf('\n\r Analytical Jacobian: disabled (\%Jacobian=\%f)');
+  end
+  
+  if %Modelica_ParEmb then 
+    mprintf('\n\r Parameter embedding mode: enabled  (\%Modelica_ParEmb=\%t)');
+  else
+    mprintf('\n\r Parameter embedding mode: disabled (\%Modelica_ParEmb=\%f)');
   end
-endfunction
-
-//------------------------------------------------------------------------------
-
-function [nx, nin, nout, ng, nm, nz] = analyze_c_code(txt)
-
-  match = 'number of variables = '
-  T     = txt(grep(txt(1:10), match)) // look for match in the first 10 lines
-  nx    = evstr(strsubst(T, match, ''))
-
-  match = 'number of inputs = '
-  T     = txt(grep(txt(1:10), match)) // look for match in the first 10 lines
-  nin   = evstr(strsubst(T, match, ''))
-
-  match = 'number of outputs = '
-  T     = txt(grep(txt(1:10), match)) // look for match in the first 10 lines
-  nout  = evstr(strsubst(T, match, ''))
-
-  match = 'number of zero-crossings = '
-  T     = txt(grep(txt(1:10), match)) // look for match in the first 10 lines
-  ng    = evstr(strsubst(T, match ,''))
-
-  match = 'number of modes = '
-  T     = txt(grep(txt(1:10), match)) // look for match in the first 10 lines
-  nm    = evstr(strsubst(T, match, ''))
 
-  match = 'number of discrete variables = '
-  T     = txt(grep(txt(1:10), match)) // look for match in the first 10 lines
-  nz    = evstr(strsubst(T, match, ''))
+  mprintf('\n\r ');
+  
+  ok=Link_modelica_C(Cfile)
 
 endfunction
-
index ba0665b..b8d1d8e 100644 (file)
 // See the file ../license.txt
 //
 
-function [%vv_list,%ierr_vec]=context_evstr(%str,%scicos_context)
+function [%vv_list,%ierr_vec,err_mess,%ok]=context_evstr(%str,%scicos_context,%typ)
+// Copyright INRIA
 // Evaluate Scicos Context utility function
+ %ok=%t
+ err_mess=[];lasterror();
  %mm=getfield(1,%scicos_context)
  for %mi=%mm(3:$)
    if execstr(%mi+'=%scicos_context(%mi)','errcatch')<>0 then
-     disp(lasterror())
+     err_mess=lasterror()
+     if err_mess==[] then err_mess='Error in evaluating '+%mi,end
      %ok=%f
      return
    end
@@ -33,6 +37,14 @@ function [%vv_list,%ierr_vec]=context_evstr(%str,%scicos_context)
  %ierr_vec=zeros(%nn,1)
  %vv_list=list()
  for %kk=1:%nn
-   [%vv_list(%kk),%ierr_vec(%kk)]=evstr(%str(%kk))
+   if %typ(2*%kk-1)(1)<>'str' then
+     [%vv_list(%kk),%ierr_vec(%kk)]=evstr(%str(%kk));
+     %err_mes=lasterror()
+     if %err_mes<>[] then
+       err_mess(%kk)=%err_mes;%ok=%f;
+     end
+   else
+     %vv_list(%kk)=%str(%kk);
+   end
  end
 endfunction
index dbba341..ad13b46 100644 (file)
 //
 
 function [scs_m, edited] = do_SaveAs()
+//
+// Copyright INRIA
+
+  fname=scs_m.props.title(1);
 
-  msg = ["Use .cos extension for binary and .cosf for ASCII file"];
-  fname = savefile('*.cos*', getcwd(), msg) //** alias of uigetfile
+  tit = ["Use .cos extension for binary and .cosf for ascii file"];
+  fname = savefile(['*.cos*';'*.xml'],emptystr(),tit,fname)
 
   if fname==emptystr() then
     return ; //** EXIT point 
@@ -43,8 +47,12 @@ function [scs_m, edited] = do_SaveAs()
    case "" then
      ok = %t
      frmt = 'unformatted'
-     fname = fname+".cos"
-     ext = 'cos'
+     fname=fname+".cos"
+     ext='cos'
+
+   case "xml" then
+    ok = %t
+    frmt = 'xmlformatted'
   else
     message("Only *.cos binary or cosf ascii files allowed");
     return //** EXIT Point 
@@ -79,10 +87,22 @@ function [scs_m, edited] = do_SaveAs()
 
   scs_m;
   scs_m.props.title = [name, path] // Change the title
+  if pal_mode then
+    scs_m.objs(1).graphics.id=name
+    scs_m.objs(1).model.rpar.props.title=[name, path] // Change the title
+  end
   
   // save
   if ext=="cos" then
     save(u,scs_m,%cpr)
+  elseif ext=="xml" then
+    [ok,t]=cos2xml(scs_m,'',%f)
+    if ~ok then 
+      message("Error in xml format")
+      file('close',u)
+      return
+    end
+    mputl(t,u);
   else
   
     ierr = cos2cosf(u,do_purge(scs_m));
@@ -94,6 +114,8 @@ function [scs_m, edited] = do_SaveAs()
   end
   
   file('close',u)
+
+  //** disp("... SaveAs debug"); pause 
   
   //** if the current window is list of the phisically existing Scilab windows list winsid()
   if or(curwin==winsid()) then
@@ -105,5 +127,4 @@ function [scs_m, edited] = do_SaveAs()
     scicos_pal = update_scicos_pal(path,scs_m.props.title(1),fname),
     scicos_pal = resume(scicos_pal)
   end
-
 endfunction
index 1fbd0f4..aa81a6c 100644 (file)
 //
 
 function [scicos_palnew]=do_edit_pal(scicos_pal)
-scicos_palnew=[]
+scicos_palnew=[];
 txt=scicos_pal(:,2);
 txtnew=txt
-ld=%f
-while ld==%f
-  ld=%t
-  txtnew=x_dialog('Edit the list of palettes below',txtnew)
-  if txtnew==[]|txt==txtnew then scicos_palnew=[];return;end
+
+//## set param of scstxtedit
+ptxtedit= scicos_txtedit(clos = 0,...
+           typ  = "palette",...
+           head = 'Edit the list of palettes below');
+
+while %t
+
+  [txtnew,Quit] = scstxtedit(txtnew,ptxtedit);
+
+  if ptxtedit.clos==1 then
+     break;
+  end
+
+  if txtnew==[]|Quit==1 then
+    scicos_palnew=[];
+    break;
+  end
+
   scicos_palnew=[]
+
   for i=1:size(txtnew,1)
     txtnew(i)=stripblanks(txtnew(i))
     l=length(txtnew(i))
@@ -38,13 +53,14 @@ while ld==%f
       m=max([k,h]); 
       n=strindex(txtnew(i),'.cosf')
       if n==[] then n=strindex(txtnew(i),'.cos');end
-      if n==[] then 
-       message('All files must end with .cos or .cosf')
-       scicos_palnew=[]
-       ld=%f;break
+      if n==[] then
+        message('All files must end with .cos or .cosf')
+        scicos_palnew=[]
+        break
       end
       a=part(txtnew(i),m+1:n-1);
       scicos_palnew=[scicos_palnew;[a,txtnew(i)]];
+      ptxtedit.clos = 1
     end
   end
 end
index d1196f2..72e480e 100644 (file)
 // See the file ../license.txt
 //
 
-function [scs_m, cpr, needcompile, ok] = do_eval(scs_m, cpr)
-       // This function (re)-evaluates blocks in the scicos data structure scs_m
+function [scs_m,cpr,needcompile,ok]=do_eval(scs_m,cpr,%scicos_context)
+// This function (re)-evaluates blocks in the scicos data structure scs_m 
 
-       ok = %t
-       needcompile1 = max(2,needcompile)
-       %mprt = funcprot()
-       funcprot(0)
-       getvalue = setvalue;
+ok=%t
+needcompile1=max(2,needcompile)
+%mprt=funcprot()
+funcprot(0) 
+getvalue=setvalue;
+deff('message(txt)','x_message(''In block ''+o.gui+'': ''+txt);global %scicos_prob;%scicos_prob=%t')
 
-       deff('message(txt)','messagebox(''In block '' + o.gui + '': '' + txt,""modal""); %scicos_prob = resume(%t)')
+global %scicos_prob
+%scicos_prob=%f
 
-       %scicos_prob = %f
-       deff('[ok, tt] = FORTR(funam, tt, i, o)','ok = %t')
-       deff('[ok, tt] = CFORTR2(funam, tt, i, o)','ok = %t')
-       deff('[ok, tt] = CFORTR(funam, tt, i, o)','ok = %t')
-       deff('[x, y, ok, gc] = edit_curv(x, y, job, tit, gc)','ok = %t')
-       deff('[ok,tt,dep_ut] = genfunc1(tt, ni, no, nci, nco, nx, nz, nrp, type_)',..
-                       'dep_ut = model.dep_ut; ok = %t')
-       deff('result = dialog(labels, valueini)','result = valueini')
-       %nx = lstsize(scs_m.objs)
-       deff('[ok, tt] = MODCOM(funam, tt, vinp, vout, vparam, vparamv, vpprop)',..
-                '[dirF, nameF, extF]=fileparts(funam);..
-                       tarpath = pathconvert(TMPDIR + ''/Modelica/'', %f, %t);..
-                       if (extF == '''')  then,..
-                                       funam1 = tarpath + nameF + ''.mo'';..
-                       elseif fileinfo(funam) == [] then,..
-                                       funam1 = funam;..
-                       end;..
-                       mputl(tt, funam1);..
-                       compilerpath = pathconvert(SCI + ''/bin/'', %f, %t);..
-                       if MSDOS then,..
-                               compilerpath = compilerpath + ''modelicac.exe'';..
-                       else,..
-                               compilerpath = compilerpath + ''modelicac'';..
-                       end;..
-                       ..
-                       if execstr(''unix_s(compilerpath + '''' -c '''' + funam1 + '''' -o '''' + tarpath + nameF + ''''.moc'''')'',''errcatch'') <> 0 then,..
-                               ok = %f;..
-                       else,..
-                               ok=%t;..
-                       end;')
-       funcprot(%mprt)
+//## overload some functions used in GUI
+deff('[ok,tt]        =  FORTR(funam,tt,i,o)','ok=%t')
+deff('[ok,tt,cancel] =  CFORTR2(funam,tt,i,o)','ok=%t,cancel=%f')
+deff('[ok,tt,cancel] =  CC4(funam,tt,i,o)','ok=%t,cancel=%f')
+deff('[ok,tt]        =  CFORTR(funam,tt,i,o)','ok=%t')
+deff('[x,y,ok,gc]    =  edit_curv(x,y,job,tit,gc)','ok=%t')
+deff('[ok,tt,dep_ut] = genfunc1(tt,ni,no,nci,nco,nx,nz,nrp,type_)',..
+     'dep_ut=model.dep_ut;ok=%t')
+deff('result         = dialog(labels,valueini)','result=valueini')
+deff('[result,Quit]  = scstxtedit(valueini,v2)','result=valueini,Quit=0')
+deff('[ok,tt]        = MODCOM(funam,tt,vinp,vout,vparam,vparamv,vpprop)',..
+     '[dirF,nameF,extF]=fileparts(funam);..
+      tarpath=pathconvert(TMPDIR+''/Modelica/'',%f,%t);..
+      if (extF=='''')  then,..
+         funam1=tarpath+nameF+''.mo'';..
+      elseif fileinfo(funam)==[] then,..
+         funam1=funam;..
+      end;..
+      mputl(tt,funam1);')
+%nx=lstsize(scs_m.objs)
+funcprot(%mprt)
+for %kk=1:%nx
+  o=scs_m.objs(%kk)
+  if typeof(o)=='Block' then
+    model=o.model
+    if model.sim=='super'| (model.sim=='csuper'& ~isequal(model.ipar,1)) then  //exclude mask
+      sblock=model.rpar
+      context=sblock.props.context
+      [scicos_context1,ierr]=script2var(context,%scicos_context)
+      if ierr <>0 then
+       %now_win=xget('window')
+        message(['Cannot evaluate a context';lasterror()])
+       xset('window',%now_win)
+      else
+        [sblock,%w,needcompile2,ok]=do_eval(sblock,list(),scicos_context1)
+        needcompile1=max(needcompile1,needcompile2)
+        if ok then
+          scs_m.objs(%kk).model.rpar=sblock
+       else
+         return
+        end
+      end
+    elseif o.model.sim(1)=='asuper' then
+    else
+      model=o.model
+// should we generate a message here?
+      %scicos_prob=%f
+      ier=execstr('o='+o.gui+'(''set'',o)','errcatch')
+      if ier==0& %scicos_prob==%f then
+        needcompile1=max(needcompile1,needcompile) // for scifunc_block
+        model_n=o.model
+        if or(model.blocktype<>model_n.blocktype)|.. // type 'c','d','z','l'
+            or(model.dep_ut<>model_n.dep_ut)|..
+              (model.nzcross<>model_n.nzcross)|..
+              (model.nmode<>model_n.nmode) then
+         needcompile1=4
+        end
+        if (size(model.in,'*')<>size(model_n.in,'*'))|..
+           (size(model.out,'*')<>size(model_n.out,'*'))|..
+            (size(model.evtin,'*')<>size(model_n.evtin,'*')) then
+         // number of input (evt or regular ) or output  changed
+         needcompile1=4
+        end
+        if model.sim=='input'|model.sim=='output' then
+          if model.ipar<>model_n.ipar then
+             needcompile1=4
+          end
+        end
 
-       for %kk = 1:%nx
-               o = scs_m.objs(%kk)
-               if typeof(o) == 'Block' then
-                       model = o.model
-                       if model.sim == 'super' | (model.sim == 'csuper' & model.ipar <> 1) then  //exclude mask
-                               sblock = model.rpar
-                               context = sblock.props.context
-
-                               [%scicos_context, ierr] = script2var(context, %scicos_context)
-
-                               if ierr <> 0 then
-                                       %now_win = xget('window')
-                                       message(['Cannot evaluate a context '; lasterror()])
-                                       xset('window', %now_win)
-                               else
-                                       [sblock, %w, needcompile2, ok] = do_eval(sblock, list())
-                                       needcompile1 = max(needcompile1, needcompile2)
-                                       if ok then
-                                               scs_m.objs(%kk).model.rpar = sblock
-                                       end
-                               end
-                       else
-                               model = o.model
-
-                               // should we generate a message here ?
-                               ier = execstr('o = ' + o.gui + '(''set'',o)', 'errcatch')
-
-                               if ier == 0 then //++ no error
-                                       needcompile1 = max(needcompile1, needcompile) // for scifunc_block
-                                       model_n = o.model
-                                       if or(model.blocktype <> model_n.blocktype) | .. // type 'c','d','z','l'
-                                                or(model.dep_ut <> model_n.dep_ut) | ..
-                                                (model.nzcross <> model_n.nzcross) | ..
-                                                (model.nmode <> model_n.nmode) then
-                                        needcompile1 = 4
-                                       end
-                                       if (size(model.in,'*')    <> size(model_n.in,'*')) | ..
-                                                (size(model.out,'*')   <> size(model_n.out,'*')) | ..
-                                                (size(model.evtin,'*') <> size(model_n.evtin,'*')) then
-                                        // number of input (evt or regular ) or output  changed
-                                        needcompile1 = 4
-                                       end
-                                       if model.sim == 'input' | model.sim == 'output' then
-                                               if model.ipar <> model_n.ipar then
-                                                        needcompile1 = 4
-                                               end
-                                       end
-                                       scs_m.objs(%kk) = o
-                               end // message for else here
-                       end
-               end
+       itisanMBLOCK=%f
+       if prod(size(model.sim))>1 then
+         if (model.sim(2)==30004) then 
+           itisanMBLOCK=%t
+         end
        end
-
-       needcompile = needcompile1
-
-       if needcompile == 4 then
-               cpr = list()
+       
+       if (prod(size(model.sim))==1 & ~model.equations==list()) | itisanMBLOCK then
+         if ~isequal(model.equations.parameters,model_n.equations.parameters) then
+           param_name   = model.equations.parameters(1);
+            param_name_n = model_n.equations.parameters(1);
+           if ~isequal(param_name,param_name_n) then
+             needcompile1=4
+           else
+             for i=1:length(model.equations.parameters(2))
+               if or((model.equations.parameters(2)(i))<>(model_n.equations.parameters(2)(i))) then
+                 needcompile=0                         
+                 XML=TMPDIR+'/'+stripblanks(scs_m.props.title(1))+'_imf_init.xml';     
+                 XML=pathconvert(XML,%f,%t);    
+                 XMLTMP=TMPDIR+'/'+stripblanks(scs_m.props.title(1))+'_imSim.xml'
+                 XMLTMP=pathconvert(XMLTMP,%f,%t);
+                 if MSDOS then 
+                   cmnd='del /F '+XML+' '+XMLTMP;
+                   if execstr('unix_s(cmnd)','errcatch')<>0 then
+                     x_message(['Unable to delete the XML file']);
+                   end
+                 else
+                   cmnd='rm -f '+XML+' '+XMLTMP
+                   if execstr('unix_s(cmnd)','errcatch')<>0 then
+                     x_message(['Unable to delete the XML file']);
+                   end
+                 end  
+                 
+                 break;
+               end
+             end
+           end
+         end
        end
+       
+        scs_m.objs(%kk)=o
+      else
+       ok=%f
+       return
+      end  
+    end
+  end
+end
+needcompile=needcompile1
+if needcompile==4 then cpr=list(),end
 endfunction
-
index 5eeed97..4998e09 100644 (file)
@@ -41,6 +41,11 @@ function [mod,scs_m]=do_label(%pt,scs_m)
   end
   
   o = scs_m.objs(K)
+  // avoid error with links
+  if typeof(o)<>'Block' then 
+    message("No label can be placed on Links.")  
+    return,
+  end
   model = o.model
   lab = model.label
   [ok,lab] = getvalue('Give block label','label',list('str',1),lab)
index 315e4c4..3d6b7de 100644 (file)
@@ -30,13 +30,13 @@ function [%pt,scs_m] = do_region2block(%pt,scs_m)
 
   win = %win;
   xc = %pt(1); yc = %pt(2);
-  %pt = [] ;
+  %pt=[] ;
   
   scs_m_save = scs_m
   nc_save    = needcompile;
   
   //** block select function 
-  [scs_mb, rect, prt] = get_region2(xc,yc,win) ; //** see file "get_region2.sci"
+  [scs_mb, rect, prt, is_flip] = get_region2(xc,yc,win) ; //** see file "get_region2.sci"
 
   if rect==[] then //** if no rectangle 
     return
@@ -58,6 +58,7 @@ function [%pt,scs_m] = do_region2block(%pt,scs_m)
   sup = SUPER_f('define')
   sup.graphics.orig   = [rect(1)+rect(3)/2-20, rect(2)+rect(4)/2-20]
   sup.graphics.sz     = [40 40]
+  sup.graphics.flip   = or(is_flip)
   
   sup.model.in        = 1
   sup.model.out       = 1
@@ -67,8 +68,7 @@ function [%pt,scs_m] = do_region2block(%pt,scs_m)
   
   // open the superblock in editor
   [ok,sup] = adjust_s_ports(sup) //** looks OK because works on specific 'Block'
-  
-  //** prepare the object that we need to destroy 
+  // detruire la region
   del=[]
   
   for k=1:lstsize(scs_m.objs)
@@ -94,9 +94,7 @@ function [%pt,scs_m] = do_region2block(%pt,scs_m)
   
   needreplay = replayifnecessary() ;
 
-  //** from here you are in drawlater mode () ; 
-  drawlater(); 
-
+  drawlater();
   [scs_m,DEL] = do_delete2(scs_m,del,%t) ; //** VERY dangerous here !
 
   // add super block
@@ -270,8 +268,7 @@ function [%pt,scs_m] = do_region2block(%pt,scs_m)
     nnk=nnk+1
   end
   
-  drawnow(); //** at the end of the operation the diagram is updated 
-
-  [scs_m_save,nc_save,enable_undo,edited,needcompile,needreplay] = resume(scs_m_save,nc_save,%t,%t,4,needreplay)
+  [scs_m_save,nc_save,enable_undo,edited,needcompile,..
+   needreplay] = resume(scs_m_save,nc_save,%t,%t,4,needreplay)
 
 endfunction
index 187d255..2c10faf 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [ok,%tcur,%cpr,alreadyran,needcompile,%state0,solver] = do_run(%cpr)
+function [ok,%tcur,%cpr,alreadyran,needcompile,%state0,solver]=do_run(%cpr)
 // realize action associated to the run button
 // performs necessary diagram (re-)compilation
 // performs simulation initialisation
@@ -31,43 +31,42 @@ function [ok,%tcur,%cpr,alreadyran,needcompile,%state0,solver] = do_run(%cpr)
 // define user possible choices
 
   //** extract tolerances from scs_m.props.tol
-  tolerances = scs_m.props.tol ;
-  //** extract solver type from tolerances
-  solver = tolerances(6) ; 
+  tolerances=scs_m.props.tol
+  //** extract solver from tolerances
+  solver=tolerances(6)
 
   //** update parameters or compilation results
-  [%cpr,%state0_n,needcompile,alreadyran,ok] = do_update(%cpr,%state0,needcompile)
+  [%cpr,%state0_n,needcompile,alreadyran,ok]=do_update(%cpr,%state0,needcompile)
   //** if an error has ocurred in do_update
   //** then we exit from do_run
   if ~ok then
-    %tcur = []
-    alreadyran = %f ;
+    %tcur=[]
+    alreadyran=%f
     return
   end
-
   //** if alreadyran then set the var choice
   if alreadyran then
-    choix = ['Continue';'Restart';'End']
+    choix=['Continue';'Restart';'End']
   else
-    choix = [] ;
+    choix=[]
   end
 
-  issequal = %t;
+  issequal=%t;
   //** initial state has been changed
   if ~isequal(%state0_n,%state0) then
-    issequal = %f
+    issequal=%f
   else
     //** test typeof outtb element
     for i=1:lstsize(%state0_n.outtb)
       if typeof(%state0_n.outtb(i))<>typeof(%state0.outtb(i))
-        issequal = %f
+        issequal=%f
         break
       end
     end
     //** test typeof oz element
     for i=1:lstsize(%state0_n.oz)
       if typeof(%state0_n.oz(i))<>typeof(%state0.oz(i))
-        issequal = %f
+        issequal=%f
         break
       end
     end
@@ -76,117 +75,144 @@ function [ok,%tcur,%cpr,alreadyran,needcompile,%state0,solver] = do_run(%cpr)
   //** if state have changed
   //** finish the simulation via do_terminate()
   if ~issequal then
-     %state0 = %state0_n
-    [alreadyran,%cpr] = do_terminate()
-    choix = []
+     %state0=%state0_n
+    [alreadyran,%cpr]=do_terminate()
+    choix=[]
   end
 
   //** switch appropriate solver
   if %cpr.sim.xptr($)-1<size(%cpr.state.x,'*') & solver<100 then
-    message(["Diagram has been compiled for implicit solver"
-             "switching to implicit Solver"])
-    solver = 100 ; //** Magic number 
-    tolerances(6) = solver ; //** save Magic number solver type
-  elseif (%cpr.sim.xptr($)-1==size(%cpr.state.x,'*')) & (solver==100 & size(%cpr.state.x,'*')<>0) then
-    message(["Diagram has been compiled for explicit solver"
-             "switching to explicit Solver"])
-    solver = 0 ; //** Magic number 
-    tolerances(6) = solver ; //** save Magic number solver type
+    message(['Diagram has been compiled for implicit solver'
+             'switching to implicit Solver'])
+    solver=100
+    tolerances(6)=solver
+  elseif (%cpr.sim.xptr($)-1==size(%cpr.state.x,'*')) & ..
+        (solver==100 & size(%cpr.state.x,'*')<>0) then
+    message(['Diagram has been compiled for explicit solver'
+             'switching to explicit Solver'])
+    solver=0
+    tolerances(6)=solver
   end
 
   //** ask user what to do
   if choix<>[] then
     //** open dialog box
-    to_do = choose(choix,"What do you want to do")
+    to_do=choose(choix,'What do you want to do')
 
     //** if cancel then exit
     if to_do==0 then
-      ok = %f
+      ok=%f
       return
     end
 
     select choix(to_do)
 
-      case "Continue" then 
-        needstart = %f ;
-        state     = %cpr.state ;
+      case 'Continue' then 
+        needstart=%f
+        state=%cpr.state
 
-      case "Restart" then 
-        needstart = %t ;
-        state     = %state0 ;
+      case 'Restart' then 
+        needstart=%t
+        state=%state0
 
-      case "End" then 
-        state     = %cpr.state ;
-        needstart = %t ;
-        tf        = scs_m.props.tf;
+      case 'End' then 
+        state=%cpr.state
+        needstart=%t
+        tf=scs_m.props.tf;
 
         //Alan: ONPEUTPASAPPELLERDOTERMINATEICI?
         //reponse : non, car do_terminate() ne rend
-        //          pas forc�ment la main � l'utilisateur
+        //          pas forcément la main à l'utilisateur
 
         //** run scicosim via 'finish' flag
-        ierr = execstr('[state,t]=scicosim(%cpr.state,%tcur,tf,%cpr.sim,'+..
-                       '''finish'',tolerances)','errcatch')
+        ierr=execstr('[state,t]=scicosim(%cpr.state,%tcur,tf,%cpr.sim,'+..
+                     '''finish'',tolerances)','errcatch')
 
-        %cpr.state = state
-        alreadyran = %f
+        %cpr.state=state
+        alreadyran=%f
 
         //** error case
         if ierr<>0 then
-          str_err = split_lasterror(lasterror());
-          kfun    = curblock()
-          corinv  = %cpr.corinv
+          str_err=split_lasterror(lasterror());
+
+          kfun=curblock()
+          corinv=%cpr.corinv
 
           if kfun<>0 then //** block error
-            path = corinv(kfun)
+            path=corinv(kfun)
             //** get error cmd for the block
-            cmd = get_errorcmd(path,'End problem.',str_err);
+            cmd=get_errorcmd(path,'End problem.',str_err);
             //** send error cmd to scicos via the Scicos_commands global variable
-            global Scicos_commands ; 
-            Scicos_commands = cmd;
+            global Scicos_commands
+            Scicos_commands=cmd;
           else //** simulator error
-            message(["End problem:";str_err])
+            message(['End problem:';str_err])
             scf(curwin);
           end
-          ok = %f
+          ok=%f
         end
-       
+        //xset('window',curwin)
         return
     end
-  
-  else //** Normal first start simulation 
-
-    needstart = %t
-    state     = %state0
-
+  else
+    needstart=%t
+    state=%state0
   end
 
+  //win=xget('window')
   gh_win = gcf();
 
-  //** scicos initialisation
+ //** scicos initialisation
   if needstart then
     //** if the simulation have already ran
     //** and is not finished then call do_terminate
     if alreadyran then
-      [alreadyran,%cpr] = do_terminate()
-      alreadyran = %f ;
+      [alreadyran,%cpr]=do_terminate()
+      alreadyran=%f
     end
     //** set initial values for a new simulation
-    %tcur = 0
-    %cpr.state = %state0
+    %tcur=0
+    %cpr.state=%state0
+
+
     tf=scs_m.props.tf;
     if tf*tolerances==[] then 
-      message(["Simulation parameters not set";"use setup button"]);
+      x_message(['Simulation parameters not set';'use setup button']);
       return;
     end
 
-    //** Run the normal first start simulation here 
-
     //** run scicosim via 'start' flag
-    ierr = execstr('[state,t]=scicosim(%cpr.state,%tcur,tf,%cpr.sim,'+..
-                   '''start'',tolerances)','errcatch')
 
-    %cpr.state = state ; //** save the state 
+    XML=TMPDIR+'/'+stripblanks(scs_m.props.title(1))+'_imf_init.xml';     
+    XML=pathconvert(XML,%f,%t);    
+    XMLTMP=TMPDIR+'/'+stripblanks(scs_m.props.title(1))+'_imSim.xml'
+    XMLTMP=pathconvert(XMLTMP,%f,%t);
+    
+    if fileinfo(XML)<>[] then 
+      if MSDOS then 
+       cmnd='copy /Y /A '+XML+' '+XMLTMP;
+       if execstr('unix_s(cmnd)','errcatch')<>0 then
+         x_message(['Unable to copy XML files']);
+       end
+      else
+       cmnd='cp -f '+XML+' '+XMLTMP;
+       if execstr('unix_s(cmnd)','errcatch')<>0 then
+         x_message(['Unable to copy XML files']);
+       end
+      end     
+      
+      //x_message(['Scicos cannot find the XML data file required for the simulation';..
+      //        'please either compile the diagram, in this case Sccios uses'; 
+      //        'parameters defined in Scicos blocks and the Scicos context';
+      //        'or you can save the XML file defined in the initialization GUI']);
+      //return;
+    end
+
+    
+    ierr=execstr('[state,t]=scicosim(%cpr.state,%tcur,tf,%cpr.sim,'+..
+                 '''start'',tolerances)','errcatch')
+
+    %cpr.state=state
     //** error case
     if ierr<>0 then
       str_err=split_lasterror(lasterror());
@@ -221,8 +247,8 @@ function [ok,%tcur,%cpr,alreadyran,needcompile,%state0,solver] = do_run(%cpr)
   needreplay=%t
 
   //** run scicosim via 'start' flag
-  ierr = execstr('[state,t]=scicosim(%cpr.state,%tcur,tf,%cpr.sim,'+..
-                '''run'',tolerances)','errcatch')
+  ierr=execstr('[state,t]=scicosim(%cpr.state,%tcur,tf,%cpr.sim,'+..
+              '''run'',tolerances)','errcatch')
 
   %cpr.state=state
   //** no error
@@ -232,14 +258,14 @@ function [ok,%tcur,%cpr,alreadyran,needcompile,%state0,solver] = do_run(%cpr)
     //** finish the simulation via do_terminate()
     if tf-t<tolerances(3) then
       //disp('fin');
-      //Alan : j'enl�ve do_terminate ici car do_terminate
+      //Alan : j'enlève do_terminate ici car do_terminate
       //       ne rend pas la main
       //[alreadyran,%cpr]=do_terminate()
       needstart=%t
       alreadyran=%f
       //** run scicosim via 'finish' flag
-      ierr = execstr('[state,t]=scicosim(%cpr.state,tf,tf,%cpr.sim,'+..
-                     '''finish'',tolerances)','errcatch')
+      ierr=execstr('[state,t]=scicosim(%cpr.state,tf,tf,%cpr.sim,'+..
+                   '''finish'',tolerances)','errcatch')
 
       %cpr.state=state
 
@@ -268,16 +294,15 @@ function [ok,%tcur,%cpr,alreadyran,needcompile,%state0,solver] = do_run(%cpr)
     end
   //** error case
   else
-    str_err = split_lasterror(lasterror());
-
-    alreadyran = %f
-    kfun       = curblock()
-    corinv     = %cpr.corinv
-
+    str_err=split_lasterror(lasterror());
+    needstart=%t
+    alreadyran=%f
+    kfun=curblock()
+    corinv=%cpr.corinv
     if kfun<>0 then //** block error
-      path = corinv(kfun)
+      path=corinv(kfun)
       //** get error cmd for the block
-      cmd = get_errorcmd(path,"Simulation problem.",str_err);
+      cmd=get_errorcmd(path,'Simulation problem.',str_err);
       //** send error cmd to scicos via the Scicos_commands global variable
       global Scicos_commands
       Scicos_commands=cmd;
index 3fbf4f1..d22ec38 100644 (file)
@@ -42,9 +42,9 @@ function fname=do_saveblockgui(o)
   if exprs0==[] then 
      txtset='x=arg1,return'
   else
-     tt='%scicos_context.'+exprs0(1);
+     tt='scicos_context.'+exprs0(1);
      for i=2:size(exprs0,1)
-       tt=tt+',%scicos_context.'+exprs0(i),
+       tt=tt+',scicos_context.'+exprs0(i),
      end
      ss=graphics.exprs(2)(3)
 
@@ -61,23 +61,28 @@ function fname=do_saveblockgui(o)
           '    '+sci2exp(bitems)
           '  Ss=..'
           '    '+sci2exp(ss)
-          '  %scicos_context=struct()'
-          '  [ok,'+tt+',exprs]=getvalue(Btitre,Exprs0,Ss,exprs)'
-          '  if ok then'
+          '  scicos_context=struct()'
           '     x=arg1'
+         '  ok=%f'
+         '  while ~ok do'
+          '    [ok,'+tt+',exprs]=getvalue(Btitre,Bitems,Ss,exprs)'
+         '    if ~ok then return;end'
+         '     %scicos_context=scicos_context'
           '     sblock=x.model.rpar'
           '     [%scicos_context,ierr]=script2var(sblock.props.context,%scicos_context)'
           '     if ierr==0 then'
-         '       [sblock,%w,needcompile2,ok]=do_eval(sblock,list())'
-          '       y=max(2,needcompile,needcompile2)'
-          '       x.graphics.exprs=exprs'
-          '       x.model.rpar=sblock'
+         '       [sblock,%w,needcompile2,ok]=do_eval(sblock,list(),%scicos_context)'
+         '       if ok then'
+          '          y=max(2,needcompile,needcompile2)'
+          '          x.graphics.exprs=exprs'
+          '          x.model.rpar=sblock'
+         '          break'
+         '       end'
          '     else'
          '       message(lasterror())'
+         '       ok=%f'
          '     end'
-          ' else '
-          '     x=arg1'
-          ' end ']
+         '  end']
   end
 
 
@@ -110,6 +115,7 @@ function fname=do_saveblockgui(o)
 
   textdef=['  model=scicos_model()']
   model=o.model
+  model.ipar=1;
   cc=getfield(1,model)
   cos2cosf(u,model.rpar,0)
   for ch=cc(2:$)
@@ -135,7 +141,7 @@ function fname=do_saveblockgui(o)
 
   textdef=[textdef;
            '  exprs=[..';
-           '       sci2exp('+exprs0+')'
+           '       sci2exp('+exprs0+',0)'
            '        ]'
           ]
 
index 6b5af20..1048baf 100644 (file)
@@ -25,7 +25,7 @@ function [%pt,scs_m] = do_select2block(%pt,scs_m)
 //** Alan, 15/10/7 : patch for rotated blocks
 //**  
 
-  scs_m_save = scs_m ;
+  scs_m_save = scs_m
   nc_save    = needcompile ; 
 
   keep = [] ; del = [] ;
@@ -65,14 +65,13 @@ function [%pt,scs_m] = do_select2block(%pt,scs_m)
   
   
   prt = splitted_links(scs_m,keep,del) ; //** OK 
-  
-  [reg,DEL] = do_delete2(scs_m,del,%f)   ; //** OK 
-  
+  [reg,DEL]=do_delete2(scs_m,del,%f)   ; //** OK 
   rect = dig_bound(reg) ; 
   nin=0
   nout=0
   ncin=0
   ncout=0
+  is_flip=[]
  
   //add input and output ports
   for k=1:size(prt,1)
@@ -80,6 +79,7 @@ function [%pt,scs_m] = do_select2block(%pt,scs_m)
     k1=prt(k,1); typ=prt(k,5);tp=prt(k,3)
     o1=reg.objs(k1) //block inside the region
     orient=o1.graphics.flip
+    is_flip=[is_flip,orient]
 
     if tp==1 then //input port
       // build the link between block and port
@@ -209,38 +209,31 @@ function [%pt,scs_m] = do_select2block(%pt,scs_m)
     reg.objs(nreg+2)=lk
     reg.objs(k1)=o1
   end
-  reg = do_purge(reg)
-  
-  if lstsize(reg.objs)==0 then
-     return
-  end
-
+  reg=do_purge(reg)
   
-  //** From this point you are in drawlater() mode
-  drawlater(); 
-
-  // superblock should not inherit the context nor the name
+  if lstsize(reg.objs)==0 then return, end
+  //superblock should not inherit the context nor the name
   reg.props.context=' ' 
   reg.props.title(1)='SuperBlock'
 
   sup = SUPER_f('define')
   sup.graphics.orig   = [(rect(1)+rect(3))/2-20,(rect(2)+rect(4))/2-20]
   sup.graphics.sz     = [40 40]
+  sup.graphics.flip   = or(is_flip)
   
   sup.model.in        = 1
   sup.model.out       = 1
   sup.model.rpar      = reg
   sup.model.blocktype = 'h'
   sup.model.dep_ut    = [%f %f]
-  
   // open the superblock in editor
   [ok,sup] = adjust_s_ports(sup)
 
   [scs_m,DEL] = do_delete2(scs_m,keep,%f) //** Quick speed improvement using %f (was %t)
   
-  drawobj(sup); //** draw the super block icon 
+  drawobj(sup)
   
-  scs_m.objs($+1) = sup; 
+  scs_m.objs($+1)=sup
   // connect it
   nn=lstsize(scs_m.objs)  //superblock number
   nnk=nn
@@ -389,18 +382,15 @@ function [%pt,scs_m] = do_select2block(%pt,scs_m)
       end
     end
 
-    lk = scicos_link(xx=xl,yy=yl,ct=prt(k,4:5),from=from,to=to)
-    
-    drawobj(lk); //** draw the link 
+    lk=scicos_link(xx=xl,yy=yl,ct=prt(k,4:5),from=from,to=to)
+    drawobj(lk)
 
     scs_m.objs($+1)=lk
     scs_m.objs(k1)=o1
     nnk=nnk+1
   end
   
-  drawnow(); //** at the end of the operation the diagram is updated 
-
-  [scs_m_save,nc_save,enable_undo,edited,needcompile, needreplay] = resume(scs_m_save,nc_save,%t,%t,4,needreplay);
+  [scs_m_save,nc_save,enable_undo,edited,needcompile,..
+   needreplay]=resume(scs_m_save,nc_save,%t,%t,4,needreplay)
 
 endfunction
-
index 6608c56..280f652 100644 (file)
@@ -27,13 +27,32 @@ if prod(size(info))==0 then
   info = list(' ')
 end
 
-new_info = x_dialog('Set Diagram informations',info(1))
+//new_info = x_dialog('Set Diagram informations',info(1))
+
+//## set param of scstxtedit
+ptxtedit=scicos_txtedit(clos = 0,...
+          typ  = "scsminfo",...
+          head = ['Set Diagram informations']);
+
+while 1==1
+
+  [txt,Quit] = scstxtedit(info(1),ptxtedit);
+
+  if ptxtedit.clos==1 then
+    break;
+  end
+
+  if txt==[]|Quit==1 then
+    new_info=[]
+    ok = %f
+    break;
+  else
+    ok = %t
+    new_info = list(txt)
+    ptxtedit.clos=1
+  end
 
-if new_info==[] then 
-  ok = %f
-else
-  ok = %t
-  new_info = list(new_info)
 end
 
 endfunction
+
index 747d6f4..c366a54 100644 (file)
@@ -28,18 +28,18 @@ function [path]=findinlistcmd(L,v,oper,path)
   for k=1:size(L)
     l=L(k)
     if or(type(l)==(15:17)) then
-      findinlist(l,v,[path,k])
+      findinlistcmd(l,v,oper,[path,k])
     else
       if oper=='=' then
-       if isequal(l,v) then
+       if and(l(:)==v) then
          paths($+1)=[path k]
        end
       elseif oper=='>' then
-       if l > v then 
+       if or(l(:) > v) then 
          paths($+1)=[path k]
        end
       elseif oper=='<' then
-       if l < v then 
+       if or(l(:) < v) then 
          paths($+1)=[path k]
        end
       else
@@ -48,3 +48,4 @@ function [path]=findinlistcmd(L,v,oper,path)
   end
   if firstlevel then path=paths,clearglobal paths,end
 endfunction
+
index f33aabf..1eed2ca 100644 (file)
@@ -54,6 +54,7 @@ function cmd=get_errorcmd(path,scs_m_in,title_err,mess_err)
 //** output : cmd  : the Scicos_commands strings
 //**
 //** Alan, 11/10/07 : Initial rev
+//Copyright INRIA
 
   //** first generate an empty cmd
   cmd=[]
@@ -127,7 +128,6 @@ function cmd=get_errorcmd(path,scs_m_in,title_err,mess_err)
                       [title_err;spec_err;mess_err],0,1,0,-1,0,1)
         //** create cmd
         cmd=['%diagram_path_objective='+sci2exp(obj_path)+';%scicos_navig=1;'
-             'Select=['+string(blk)+',curwin];'+...
              'hilite_obj('+string(blk)+');'+...
              'unhilite_obj('+string(blk)+');']
     else
@@ -135,7 +135,6 @@ function cmd=get_errorcmd(path,scs_m_in,title_err,mess_err)
       spec_err='The hilited '+spec_err+' returns the error :';
       //** create cmd
       cmd=['%diagram_path_objective='+sci2exp(obj_path)+';%scicos_navig=1;'
-           'Select=['+string(blk)+',curwin];'+...
            'hilite_obj('+string(blk)+');'+...
            'message(['''+title_err+''';'+...
               ''''+spec_err+''';'+...
index a37ac01..ed6c80e 100644 (file)
@@ -34,14 +34,17 @@ for blkout=1:length(bllst)
 end
 
 //27/09/07 Alan's patch : do test here for unconnected inputs
-unco=find(inplnk>max(outlnk))
-for j=unco
-  m=maxi(find(inpptr<=j))
-  n=j-inpptr(m)+1
-  lnksz($+1,1)=bllst(m).in(n);
-  lnksz($,2)=bllst(m).in2(n);
-  lnktyp($+1)=bllst(m).intyp(n);
+if inplnk<>[] | outlnk<>[] then
+  unco=find(inplnk>max(outlnk))
+  for j=unco
+    m=maxi(find(inpptr<=j))
+    n=j-inpptr(m)+1
+    lnksz($+1,1)=bllst(m).in(n);
+    lnksz($,2)=bllst(m).in2(n);
+    lnktyp($+1)=bllst(m).intyp(n);
+  end
 end
 
 //lnkptr=cumsum([1;lnkbsz])
 endfunction
+
index 6d7f79e..6281628 100644 (file)
@@ -103,6 +103,12 @@ function [%state0,state,sim,ok]=modipar(newparameters,%state0,state,sim,scs_m,co
            std0(nek+sel)=std0(sel)
          end
        end
+
+        if nek<0 then 
+            st($+nek+1:$)=[],st0($+nek+1:$)=[],
+            if Impl then std($+nek+1:$)=[],std0($+nek+1:$)=[],end
+        end    
+
        xptr(kc+1:$)=xptr(kc+1:$)+nek
        st(xptr(kc):xptr(kc+1)-1)=statek(:),
        st0(xptr(kc):xptr(kc+1)-1)=statek(:),
@@ -119,6 +125,11 @@ function [%state0,state,sim,ok]=modipar(newparameters,%state0,state,sim,scs_m,co
          dst(nek+sel)=dst(sel)
          dst0(nek+sel)=dst0(sel)
        end
+
+        if nek<0 then 
+            dst($+nek+1:$)=[],dst0($+nek+1:$)=[],
+        end    
+
        zptr(kc+1:$)=zptr(kc+1:$)+nek
        dst(zptr(kc):zptr(kc+1)-1)=dstatek(:)
        dst0(zptr(kc):zptr(kc+1)-1)=dstatek(:)
@@ -129,20 +140,20 @@ function [%state0,state,sim,ok]=modipar(newparameters,%state0,state,sim,scs_m,co
           nek=-(ozptr(kc+1)-ozptr(kc))
         elseif ((fun(2)==5) | (fun(2)==10005)) then // sciblocks type 5 | 10005
           if lstsize(odstatek)>0 then
-            nek=1-(ozptr(kc+1)-ozptr(kc)) //nombre d'�tats suppl�mentaires
+            nek=1-(ozptr(kc+1)-ozptr(kc)) //nombre d'états supplémentaires
           else
             nek=-(ozptr(kc+1)-ozptr(kc))
           end
-        elseif ((fun(2)==4) | (fun(2)==10004)) then // C blocks type 4 | 10004
+        elseif ((fun(2)==4) | (fun(2)==10004) | (fun(2)==2004)) then // C blocks type 4 | 10004
           nek=lstsize(odstatek)-(ozptr(kc+1)-ozptr(kc))
         else // other C and sci blocks
           nek=-(ozptr(kc+1)-ozptr(kc))
         end
         sel=ozptr(kc+1):ozptr($)-1
+
         if nek<>0&sel<>[] then
           while lstsize(odst)<max(nek+sel), odst($+1)=[], end
           while lstsize(odst0)<max(nek+sel), odst0($+1)=[], end
-//          if nek>0 then sel=fftshift(sel), end
           if nek>0 then sel=gsort(sel), end
           for j=sel
             odst(j+nek)=odst(j)
@@ -150,13 +161,14 @@ function [%state0,state,sim,ok]=modipar(newparameters,%state0,state,sim,scs_m,co
           end
         end
         ozptr(kc+1:$)=ozptr(kc+1:$)+nek;
+
         if ((type(odstatek)==15) & (type(fun)==15)) then
           if ((fun(2)==5) | (fun(2)==10005)) then // sciblocks
             if lstsize(odstatek)>0 then
               odst(ozptr(kc))=odstatek;
               odst0(ozptr(kc))=odstatek;
             end
-          elseif ((fun(2)==4) | (fun(2)==10004)) then  // C blocks
+          elseif ((fun(2)==4) | (fun(2)==10004) | (fun(2)==2004)) then  // C blocks
             for j=1:lstsize(odstatek)
               odst(ozptr(kc)+j-1)=odstatek(j);
               odst0(ozptr(kc)+j-1)=odstatek(j);
@@ -164,14 +176,30 @@ function [%state0,state,sim,ok]=modipar(newparameters,%state0,state,sim,scs_m,co
           end
         end
 
+        //## rebuild odst list if nek < 0
+        if nek < 0 then
+          n_odst = list(); n_odst0 = list();
+          for j=1:max(ozptr)-1
+            n_odst(j)=odst(j);
+            n_odst0(j)=odst0(j);
+          end
+          odst = n_odst; odst0 = n_odst0;
+          clear n_odst; clear n_odst0;
+        end
+
        //Change real parameters
        nek=prod(size(rpark))-(rpptr(kc+1)-rpptr(kc))
        sel=rpptr(kc+1):rpptr($)-1
        if nek<>0&sel<>[] then
          rpar(nek+sel)=rpar(sel)
        end
+
+        if nek<0 then 
+            rpar($+nek+1:$)=[]
+        end    
+
        rpptr(kc+1:$)=rpptr(kc+1:$)+nek
-       rpar(rpptr(kc):rpptr(kc+1)-1)=rpark,
+       rpar(rpptr(kc):rpptr(kc+1)-1)=rpark(:),
 
        //Change integer parameters
        if type(ipark)==1 then   //scifunc
@@ -180,28 +208,32 @@ function [%state0,state,sim,ok]=modipar(newparameters,%state0,state,sim,scs_m,co
          if nek<>0&sel<>[] then
            ipar(nek+sel)=ipar(sel)
          end
+
+          if nek<0 then 
+              ipar($+nek+1:$)=[]
+          end    
+
          ipptr(kc+1:$)=ipptr(kc+1:$)+nek
-         ipar(ipptr(kc):ipptr(kc+1)-1)=ipark,
+         ipar(ipptr(kc):ipptr(kc+1)-1)=ipark(:),
        end
         //Change objects parameters
         if ((type(opark)<>15) | ...
            (type(fun)<>15)) then //old sci blocks or odstatek not a list
-          neopark=-(opptr(kc+1)-opptr(kc))
+          nek=-(opptr(kc+1)-opptr(kc))
         elseif ((fun(2)==5) | (fun(2)==10005)) then // sciblocks
           if lstsize(opark)>0 then
-            nek=1-(opptr(kc+1)-opptr(kc)) //nombre de param�tres suppl�mentaires
+            nek=1-(opptr(kc+1)-opptr(kc)) //nombre de param�tres suppl�mentaires
           else
             nek=-(opptr(kc+1)-opptr(kc))
           end
-        elseif ((fun(2)==4) | (fun(2)==10004)) then //C blocks
+        elseif ((fun(2)==4) | (fun(2)==10004) | (fun(2)==2004)) then //C blocks
           nek=lstsize(opark)-(opptr(kc+1)-opptr(kc))
         else // other C and sci blocks
-          nek=-(ozptr(kc+1)-ozptr(kc))
+          nek=-(opptr(kc+1)-opptr(kc))
         end
         sel=opptr(kc+1):opptr($)-1
         if nek<>0&sel<>[] then
           while lstsize(opar)<max(nek+sel), opar($+1)=[], end
-  //        if nek>0 then sel=fftshift(sel), end
         if nek>0 then sel=gsort(sel), end
           for j=sel, opar(j+nek)=opar(j); end
         end
@@ -211,10 +243,21 @@ function [%state0,state,sim,ok]=modipar(newparameters,%state0,state,sim,scs_m,co
            if lstsize(opark)>0 then
              opar(opptr(kc))=opark;
            end
-          elseif ((fun(2)==4) | (fun(2)==10004)) then //C blocks
+          elseif ((fun(2)==4) | (fun(2)==10004) | (fun(2)==2004)) then //C blocks
             for j=1:lstsize(opark), opar(opptr(kc)+j-1)=opark(j), end
           end
         end
+        //## rebuild opar list if nek < 0
+        if nek < 0 then
+          n_opar = list();
+          for j=1:max(opptr)-1
+            n_opar(j)=opar(j);
+          end
+          opar = n_opar;
+          clear n_opar;
+        end
+
+
        //Change simulation routine
        if type(sim('funs')(kc))<>13 then   //scifunc
          sim('funs')(kc)=fun(1);
index f7223d9..4ef8fb5 100644 (file)
@@ -23,6 +23,7 @@ function xyp=point2pixel(win,xy)
   old=xget('window');xset('window',win);
   wp=xget('wpos');
   [x,y,r]=xchange(xy(1),xy(2),'f2i');
-  xyp=[wp(1)+x-r(1);wp(2)+y-r(2);]
+  xyp=[wp(1)+x-r(1);wp(2)+y-r(2)]-xget('viewport')'
   xset('window',old);
 endfunction
+
index b260a20..a46d48b 100644 (file)
@@ -23,6 +23,8 @@ function scs_m=scicos_diagram(v1,v2,v3)
   if exists('props','local')==0 then props=scicos_params(),end
   if exists('objs','local')==0 then objs=list(),end
   if exists('version','local')==0 then version='',end
-    
-  scs_m=mlist(['diagram','props','objs','version'],props,objs,version)
+  if exists('contrib','local')==0 then contrib=list(),end
+
+  scs_m=mlist(['diagram','props','objs','version','contrib'],...
+                props,objs,version,contrib)
 endfunction
index 87a3a35..6d5e230 100644 (file)
 // See the file ../license.txt
 //
 
-function  [cor,corinv,links_table,cur_fictitious,sco_mat,ok]=scicos_flat(scs_m,ksup,sco_mat)
+function  [cor,corinv,links_table,cur_fictitious,sco_mat,ok]=scicos_flat(scs_m,ksup,MaxBlock)
 //This function takes a hierarchical Scicos diagram and computes the
 //"flat" equivalent, removing "non computational" blocs like splits.
 //S. Steer, R. Nikoukhah 2003. Copyright INRIA
 
 //NB::--------------------------------------------------------------
-//Modificating this function to take care of the GOTO and FROM blocks
-//A negatif number in cor and in links_table is refer to a GOTO,FROM 
-//or GotoTagVisibility block.
-//Modification of shiftcors. It will not shift the negatives numbers.
+// Modifying this function to take care of the GOTO FROM SampleCLK and VirtualCLK0 blocks.
+// A negatif number in cor and in links_table is refer to a GOTO,FROM 
+// GotoTagVisibility, SampleCLK, VirtualCLK0. in other words the blocks that are virtual.
+// These blocks are removed in the compilation part. 
+// Modification of shiftcors. It will not shift the negatives numbers.
 // A sco_mat is a string matrix composed by the :
-//     - the first column : the negatif of the value of a GOTO or FROM in the cor.
+// For the blocks GOTO, FROM, VirtualCLK0
+//     - the first column : the negatif of the number of the virtual block in the cor.
 //     - the second column: 1 if it is a GOTO; -1 if it is a FROM.
-//     - the third column : the tag value
-//     - the forth column : the tag visibility value in GOTO; 1 for the FROM block
-//     - the fifth column : 1=regular 2=event 3=modelica
+//                           The VirtualCLK0 is considered as a GOTO.
+//     - the third column : the tag value. 'scicostimeclk0' is used in the case of the VirtualCLK0 
+//     - the forth column : the tag visibility
+//                           For the GOTO: + 2: scoped
+//                                         + 3: global
+//                           For the FROM: + 1
+//                           For the VirtualCLK0: 2
+//     - the fifth column : 1=regular 2=event 3=modelica 10=VirtualCLK0
+// For the SampleCLK:
+//     - the first column : the negatif of the number of the virtual block in the cor.
+//     - the second column: the value 1.
+//     - the third column : The frequency value. 
+//     - the forth column : The offset value.
+//     - the fifth column : the value 4.
+// Another two string matrices are used for the GOTO/FROM blocks. The loc_mat it is used when the GOTO
+// block is local. The from_mat to match the local from with the local goto.
+// A tag_exprs matrices is used for the GotoTagVisibility and the VirtualCLK0:
+// it is composed by:
+//       - the first column: The tag value. 'scicostimeclk0' in the VirtualCLK0 case.
+//       - the second column: 1=regular 2=event 3=modelica 10=VirtualCLK0
 // The local and scoped cases are studied in this function. 
 // The global case is studied in the function global_case in c_pass1.
 // A Modification of update_cor in c_pass1. For the negatives numbers 
 // the cor will be set to 0. (In this case the blocks are considered as IN_f ...)
-// Fady NASSIF 05/07/2007
+// Fady NASSIF 2007. INRIA.
 //-------------------------------------------------------------------
 
-  if argn(2)<=1 then ksup=0;end //used for recursion
-  if ksup==0 then   // main scheme
-    MaxBlock=countblocks(scs_m);
-    //last created fictitious block (clock split,clock sum,super_blocks, superbloc))
-    cur_fictitious=MaxBlock
-    path=[];       // for delete_unconnected 
-    scs_m_s=scs_m ;// for delete_unconnected 
-  end
-  //-------------- suppress blocks with an unconnected regular port -------------- 
-  scs_m=delete_unconnected(scs_m);
-  
-  //list of blocks with are not retained in the final block list
-  blocks_to_remove=['CLKSPLIT_f' 'SPLIT_f' 'IMPSPLIT_f' 'CLKSOM_f' 'CLKSOMV_f' 'NRMSOM_f']
-  port_blocks=['IN_f','INIMPL_f','OUT_f','OUTIMPL_f','CLKIN_f','CLKINV_f','CLKOUT_f','CLKOUTV_f']
-  block_goto=['GOTO','CLKGOTO','GOTOMO']
-  block_from=['FROM','CLKFROM','FROMMO']
-  block_tag=['GotoTagVisibility','CLKGotoTagVisibility','GotoTagVisibilityMO']
-  n=lstsize(scs_m.objs) //number of "objects" in the data structure
-  //-------------- initialize outputs --------------
-  nb=0;
-  links_table=[]; // 
-  corinv=list();
-  cor=list();for k=1:n, cor(k)=0;end
+if argn(2)<=1 then ksup=0;end //used for recursion
+if ksup==0 then   // main scheme
+  MaxBlock=countblocks(scs_m);
+  //last created fictitious block (clock split,clock sum,super_blocks, superbloc))
+  cur_fictitious=MaxBlock
+  path=[];       // for delete_unconnected 
+  scs_m_s=scs_m ;// for delete_unconnected 
+end
+//-------------- suppress blocks with an unconnected regular port -------------- 
+scs_m=delete_unconnected(scs_m);
 
-  ok=%t;
-  Links=[] //to memorize links position in the data structure
-  
-  //-------------- Analyse blocks --------------
+//list of blocks with are not retained in the final block list
+blocks_to_remove=['CLKSPLIT_f' 'SPLIT_f' 'IMPSPLIT_f' 'CLKSOM_f' 'CLKSOMV_f' 'NRMSOM_f' 'PAL_f']
+port_blocks=['IN_f','INIMPL_f','OUT_f','OUTIMPL_f','CLKIN_f','CLKINV_f','CLKOUT_f','CLKOUTV_f']
+block_goto=['GOTO','CLKGOTO','GOTOMO']
+block_from=['FROM','CLKFROM','FROMMO']
+block_tag=['GotoTagVisibility','CLKGotoTagVisibility','GotoTagVisibilityMO']
+n=lstsize(scs_m.objs) //number of "objects" in the data structure
+//-------------- initialize outputs --------------
+nb=0;
+links_table=[]; // 
+corinv=list();
+cor=list();for k=1:n, cor(k)=0;end
+
+ok=%t;
+Links=[] //to memorize links position in the data structure
+mod_blk_exist=%f;
+//-------------- Analyse blocks --------------
 loc_mat=[];from_mat=[];tag_exprs=[];sco_mat=[];
-  for k=1:n //loop on all objects
-    o=scs_m.objs(k);
-    x=getfield(1,o);
-    cor(k)=0
-    if x(1)=='Block' then
-      if or(o.gui==block_goto) then
-        //if the goto is local we put it in the loc_from matrix
-       //the loc_mat is composed of:
-       //1st column : the number given to the block.
-       //2nd column : 1 because it is a GOTO
-       //3rd column : the tag of the GOTO.
-       //4th column : A flag identifying the type of the block (regular or event)
-       // if the GOTO is scoped or global we put it in a sco_mat matrix
-       //the sco_mat is composed of:
-       //1st column : the number given to the block.
-       //2nd column : 1 if it is a GOTO, -1 if it is FROM
-       //3rd column : the tag of the GOTO.
-       //4th column : A flag identifying the type of the block (1=regular, 2=event 3=modelica)
-        cur_fictitious=cur_fictitious+1;
-       cor(k)=-cur_fictitious;
-       if (o.graphics.exprs(2)=='1') then
-        loc_mat=[loc_mat;[string(cur_fictitious),string(1),(o.graphics.exprs(1)),string(find(block_goto(:)==o.gui))]]
-        locomat=[];
-         for i=1:size(loc_mat,1)
-         locomat=[locomat;strcat([loc_mat(i,3) loc_mat(i,4)])]
-        end
-        vec=unique(locomat)
-        if size(vec,1)<>size(loc_mat,1) then
-            if flgcdgen<>-1 then path=[numk path];scs_m=all_scs_m; end
-           if (ksup==0)|flgcdgen<>-1  then
-            hilite_path([path,k],"There is another local GOTO in this diagram with the same tag ''"+loc_mat($,3)+"''",%t);
-           else
-             gh_wins = gcf();
-             mxwin=maxi(winsid());
-             scs_show(scs_m,mxwin+1);
-             hilite_obj(k);
-             message("There is another local GOTO in this diagram with the same tag ''"+loc_mat($,3)+"''");
-             gh_del = scf(mxwin+1);
-             unhilite_obj(k);
-            delete(gh_del);
-             scf(gh_wins);
-           end
-           ok=%f;return
-        end
-               else
-        sco_mat=[sco_mat;[string(cur_fictitious),string(1),o.graphics.exprs(1),o.graphics.exprs(2),string(find(block_goto(:)==o.gui))]]
+for k=1:n //loop on all objects
+  o=scs_m.objs(k);
+  x=getfield(1,o);
+  cor(k)=0
+  if x(1)=='Block' then
+    if or(o.gui==block_goto) then
+      cur_fictitious=cur_fictitious+1;
+      cor(k)=-cur_fictitious;
+      if (o.graphics.exprs(2)=='1') then
+       loc_mat=[loc_mat;[string(cur_fictitious),string(1),(o.graphics.exprs(1)),string(find(block_goto(:)==o.gui))]]
+       locomat=[];
+       for i=1:size(loc_mat,1)
+         locomat=[locomat;strcat([loc_mat(i,3) loc_mat(i,4)])]
        end
-      elseif or(o.gui==block_from) then
-       cur_fictitious=cur_fictitious+1;
-       cor(k)=-cur_fictitious
-       sco_mat=[sco_mat;[string(cur_fictitious),string(-1),o.graphics.exprs(1),string(1),string(find(block_from(:)==o.gui))]]
-       from_mat=[from_mat;[string(cur_fictitious),string(-1),o.graphics.exprs(1),string(find(block_from(:)==o.gui))]]
-      elseif or(o.gui==block_tag) then
-       tag_exprs=[tag_exprs;[o.graphics.exprs(1),string(find(block_tag(:)==o.gui))]]
-       cur_fictitious=cur_fictitious+1;
-       cor(k)=-cur_fictitious
-      elseif o.gui=='SampleCLK' then
-        cur_fictitious=cur_fictitious+1;
-        cor(k)=-cur_fictitious
-        sco_mat=[sco_mat;[string(cur_fictitious),string(1),string(o.model.rpar(1)),..
-                          string(o.model.rpar(2)),string(4)]]
-      elseif or(o.gui==blocks_to_remove) then
-       cur_fictitious=cur_fictitious+1;
-       cor(k)=cur_fictitious
-      elseif o.gui=='SUM_f'|o.gui=='SOM_f' then
-       nb=nb+1;
-       corinv(nb)=k;
-       cor(k)=nb
-       //scs_m=adjust_sum(scs_m,k)
-      elseif or(o.gui==port_blocks) then
-       //here we suppose to be inside a superblock
-       //may be we can handle this blocks just as blocks_to_remove
-       if ksup==0 then 
-         scs_m=scs_m_s
-         hilite_path([path,k],'Port blocks must be only used in a Super Block',%f)
-         ok=%f;return
-       end
-       connected=get_connected(scs_m,k)
-       if connected==[] then
-         scs_m=scs_m_s
-         hilite_path([path,k],'This Super Block Input port is unconnected',%t)
+       vec=unique(locomat)
+       if size(vec,1)<>size(loc_mat,1) then
+         if flgcdgen<>-1 then path=[numk path];scs_m=all_scs_m; end
+         if (ksup==0)|flgcdgen<>-1  then
+           hilite_path([path,k],"There is another local GOTO in this diagram with the same tag ''"+loc_mat($,3)+"''",%t);
+         else
+           gh_wins = gcf();
+           mxwin=maxi(winsid());
+           scs_show(scs_m,mxwin+1);
+           hilite_obj(k);
+           message("There is another local GOTO in this diagram with the same tag ''"+loc_mat($,3)+"''");
+           gh_del = scf(mxwin+1);
+           unhilite_obj(k);
+           delete(gh_del);
+           scf(gh_wins);
+         end
          ok=%f;return
        end
-       if or(o.gui==['IN_f','INIMPL_f']) then
-         pind=Pind(1)
-       elseif or(o.gui==['OUT_f','OUTIMPL_f']) then
-         pind=Pind(2)
-       elseif or(o.gui==['CLKIN_f','CLKINV_f']) then
-         pind=Pind(3)
-       elseif or(o.gui==['CLKOUT_f','CLKOUTV_f']) then
-         pind=Pind(4)
-       end 
-       //connect the link to the fictitious bloc replacing the superblock
-       if scs_m.objs(connected).from(1)==k then
-         scs_m.objs(connected).from(1)=-(pind+o.model.ipar)
+      else
+       sco_mat=[sco_mat;[string(cur_fictitious),string(1),o.graphics.exprs(1),o.graphics.exprs(2),string(find(block_goto(:)==o.gui))]]
+      end
+    elseif or(o.gui==block_from) then
+      cur_fictitious=cur_fictitious+1;
+      cor(k)=-cur_fictitious
+      sco_mat=[sco_mat;[string(cur_fictitious),string(-1),o.graphics.exprs(1),string(1),string(find(block_from(:)==o.gui))]]
+      from_mat=[from_mat;[string(cur_fictitious),string(-1),o.graphics.exprs(1),string(find(block_from(:)==o.gui))]]
+    elseif or(o.gui==block_tag) then
+      tag_exprs=[tag_exprs;[o.graphics.exprs(1),string(find(block_tag(:)==o.gui))]]
+      cur_fictitious=cur_fictitious+1;
+      cor(k)=-cur_fictitious
+    elseif o.gui=='SampleCLK' then
+      if o.graphics.peout<>0 then
+        cur_fictitious=cur_fictitious+1;
+        cor(k)=-cur_fictitious
+        [Nf,Df]=rat(o.model.rpar(1),1d-9);
+        [No,Do]=rat(o.model.rpar(2),1d-9);
+        sco_mat=[sco_mat;[string(cur_fictitious),string(1),string(Nf)+'/'+string(Df),..
+                string(No)+'/'+string(Do),string(4)]]
+       end
+      //Adding the VirtualCLK0. Fady 18/11/2007
+    elseif o.gui=='VirtualCLK0' then
+      cur_fictitious=cur_fictitious+1;
+      cor(k)=-cur_fictitious
+      sco_mat=[sco_mat;[string(cur_fictitious),string(1),'scicostimeclk0',..
+                 string(2),string(10)]]
+      tag_exprs=[tag_exprs;['scicostimeclk0',string(10)]]
+    elseif or(o.gui==blocks_to_remove) then
+      cur_fictitious=cur_fictitious+1;
+      cor(k)=cur_fictitious
+    elseif o.gui=='SUM_f'|o.gui=='SOM_f' then
+      nb=nb+1;
+      corinv(nb)=k;
+      cor(k)=nb
+      //scs_m=adjust_sum(scs_m,k)
+    elseif or(o.gui==port_blocks) then
+      //here we suppose to be inside a superblock
+      //may be we can handle this blocks just as blocks_to_remove
+      if ksup==0 then 
+       scs_m=scs_m_s
+       hilite_path([path,k],'Port blocks must be only used in a Super Block',%f)
+       ok=%f;return
+      end
+      connected=get_connected(scs_m,k)
+      if connected==[] then
+       scs_m=scs_m_s
+       hilite_path([path,k],'This Super Block Input port is unconnected',%t)
+       ok=%f;return
+      end
+      if or(o.gui==['IN_f','INIMPL_f']) then
+       pind=Pind(1)
+      elseif or(o.gui==['OUT_f','OUTIMPL_f']) then
+       pind=Pind(2)
+      elseif or(o.gui==['CLKIN_f','CLKINV_f']) then
+       pind=Pind(3)
+      elseif or(o.gui==['CLKOUT_f','CLKOUTV_f']) then
+       pind=Pind(4)
+      end 
+      //connect the link to the fictitious bloc replacing the superblock
+      if scs_m.objs(connected).from(1)==k then
+       scs_m.objs(connected).from(1)=-(pind+o.model.ipar)
+      end
+      if scs_m.objs(connected).to(1)==k then
+       scs_m.objs(connected).to(1)=-(pind+o.model.ipar)
+      end
+    elseif o.model.sim(1)=='asuper' then  
+       nb=nb+1
+      corinv(nb)=k
+      cor(k)=nb
+      if o.graphics.exprs(3).dep_ut($)==%t then
+       sco_mat=[sco_mat;[string(nb) '-1' 'scicostimeclk0' '1' '10']]
+      end
+    elseif o.model.sim=='super'|o.model.sim=='csuper' then
+      path=[path k] //superbloc path in the hierarchy
+      //replace superbloc by a set of fictitious blocks (one per port)
+      //and reconnect links connected to the superblock to these
+      //ficitious blocks
+      Pinds=[];if exists('Pind') then Pinds=Pind,end
+      Pind=[] //base of ports numbering
+      //mprintf("entering superblock at level "+string(size(path,'*'))+"\r\n")
+      nb_pin=size(scs_m.objs(k).graphics('pin'),1);
+      nb_pein=size(scs_m.objs(k).graphics('pein'),1);
+      for port_type=['pin','pout','pein','peout']
+       Pind=[Pind cur_fictitious]
+       ip=scs_m.objs(k).graphics(port_type);
+       ki=find(ip>0)
+       for kk=ki
+         kc=ip(kk)
+         //**  a link is connected to the same sblock on both ends
+         if scs_m.objs(kc).to(1)==scs_m.objs(kc).from(1) then
+           //** regular input port
+           if port_type=='pin' then
+             scs_m.objs(kc).to(1)=-(cur_fictitious+scs_m.objs(kc).to(2));
+             scs_m.objs(kc).to(2)=1
+             
+             if scs_m.objs(kc).from(3)==0 then //** in connected to out
+               scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2)+nb_pin);
+               scs_m.objs(kc).from(2)=1
+             else //** in connected to in
+               scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2));
+               scs_m.objs(kc).from(2)=1
+             end
+             
+             //** regular output port
+           elseif port_type=='pout' then
+             scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2));
+             scs_m.objs(kc).from(2)=1
+             
+             if scs_m.objs(kc).to(3)==0 then //** out connected to out
+               scs_m.objs(kc).to(1)=-(cur_fictitious+scs_m.objs(kc).to(2));
+               scs_m.objs(kc).to(2)=1
+             end
+             
+             //** event input port
+           elseif port_type=='pein' then
+             scs_m.objs(kc).to(1)=-(cur_fictitious+scs_m.objs(kc).to(2));
+             scs_m.objs(kc).to(2)=1
+             
+             scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2)+nb_pein);
+             scs_m.objs(kc).from(2)=1
+             
+             //** peout and pein are never connected to themselves
+           end
+           
+         elseif scs_m.objs(kc).to(1)==k then  // a link going to the superblock
+           scs_m.objs(kc).to(1)=-(cur_fictitious+scs_m.objs(kc).to(2));
+           scs_m.objs(kc).to(2)=1
+           
+         elseif scs_m.objs(kc).from(1)==k then  // a link coming from the superblock
+           scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2));
+           scs_m.objs(kc).from(2)=1
+         end
        end
-       if scs_m.objs(connected).to(1)==k then
-         scs_m.objs(connected).to(1)=-(pind+o.model.ipar)
+       cur_fictitious=cur_fictitious+size(ip,'*')
+      end
+      
+      
+      //Analyze the superblock contents
+      [cors,corinvs,lt,cur_fictitious,scop_mat,ok]=scicos_flat(o.model.rpar,cur_fictitious,MaxBlock)
+      if ~ok then return,end
+      //shifting the scop_mat for regular blocks. Fady 08/11/2007
+      if scop_mat<>[] then
+       v_mat=find(eval(scop_mat(:,1))<MaxBlock)
+       v_mat=v_mat(:)
+       for j=v_mat
+         scop_mat(j,1)=string(eval(scop_mat(j,1))+nb)
        end
-
-      elseif o.model.sim=='super'|o.model.sim=='csuper' then
-       path=[path k] //superbloc path in the hierarchy
-       //replace superbloc by a set of fictitious blocks (one per port)
-        //and reconnect links connected to the superblock to these
-        //ficitious blocks
-       Pinds=[];if exists('Pind') then Pinds=Pind,end
-       Pind=[] //base of ports numbering
-       //mprintf("entering superblock at level '+string(size(path,'*'))+"\r\n")
-        nb_pin=size(scs_m.objs(k).graphics('pin'),1);
-        nb_pein=size(scs_m.objs(k).graphics('pein'),1);
-       for port_type=['pin','pout','pein','peout']
-         Pind=[Pind cur_fictitious]
-         ip=scs_m.objs(k).graphics(port_type);
-          ki=find(ip>0)
-         for kk=ki
-           kc=ip(kk)
-            //**  a link is connected to the same sblock on both ends
-            if scs_m.objs(kc).to(1)==scs_m.objs(kc).from(1) then
-              //** regular input port
-              if port_type=='pin' then
-                scs_m.objs(kc).to(1)=-(cur_fictitious+scs_m.objs(kc).to(2));
-               scs_m.objs(kc).to(2)=1
-
-                if scs_m.objs(kc).from(3)==0 then //** in connected to out
-                 scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2)+nb_pin);
-                 scs_m.objs(kc).from(2)=1
-                else //** in connected to in
-                 scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2));
-                 scs_m.objs(kc).from(2)=1
-                end
-
-              //** regular output port
-              elseif port_type=='pout' then
-               scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2));
-               scs_m.objs(kc).from(2)=1
-
-                if scs_m.objs(kc).to(3)==0 then //** out connected to out
-                 scs_m.objs(kc).to(1)=-(cur_fictitious+scs_m.objs(kc).to(2));
-                 scs_m.objs(kc).to(2)=1
-                end
-
-              //** event input port
-              elseif port_type=='pein' then
-                scs_m.objs(kc).to(1)=-(cur_fictitious+scs_m.objs(kc).to(2));
-               scs_m.objs(kc).to(2)=1
-
-                scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2)+nb_pein);
-               scs_m.objs(kc).from(2)=1
-
-              //** peout and pein are never connected to themselves
-              end
-
-           elseif scs_m.objs(kc).to(1)==k then  // a link going to the superblock
-               scs_m.objs(kc).to(1)=-(cur_fictitious+scs_m.objs(kc).to(2));
-               scs_m.objs(kc).to(2)=1
-
-           elseif scs_m.objs(kc).from(1)==k then  // a link coming from the superblock
-               scs_m.objs(kc).from(1)=-(cur_fictitious+scs_m.objs(kc).from(2));
-               scs_m.objs(kc).from(2)=1
-            end
-         end
-         cur_fictitious=cur_fictitious+size(ip,'*')
+      end
+      //Adding the scop_mat to the old sco_mat.
+      sco_mat=[sco_mat;scop_mat]
+      nbs=size(corinvs) 
+      
+      //catenate superbloc data with current data
+      
+      f=find(lt(:,1)>0&lt(:,1)<=nbs);if f<>[] then lt(f,1)=lt(f,1)+nb,end
+      links_table=[links_table;lt]
+      
+      for kk=1:nbs, corinv(nb+kk)=[k,corinvs(kk)];end
+      cors=shiftcors(cors,nb)
+      //       cur_fictitious=cur_fictitious+nb
+      cor(k)=cors
+      nb=nb+nbs
+      Pind=Pinds
+      path($)=[]
+      
+    else //standard blocks
+      nb=nb+1
+      corinv(nb)=k
+      //[model,ok]=build_block(o.model)
+      cor(k)=nb
+      //Adding the always activated blocks to the sco_mat to take care of the enabling if exists.
+      //Fady 18/11/2007
+      if ~is_modelica_block(o) then
+       if o.model.dep_ut($) then
+         sco_mat=[sco_mat;[string(nb) '-1' 'scicostimeclk0' '1' '10']]
        end
-
-
-       //Analyze the superblock contents
-        [cors,corinvs,lt,cur_fictitious,scop_mat,ok]=scicos_flat(o.model.rpar,cur_fictitious)
-       if ~ok then return,end
-       sco_mat=[sco_mat;scop_mat]
-       nbs=size(corinvs) 
-       
-       //catenate superbloc data with current data
-
-       f=find(lt(:,1)>0&lt(:,1)<=nbs);if f<>[] then lt(f,1)=lt(f,1)+nb,end
-       links_table=[links_table;lt]
-       
-       for kk=1:nbs, corinv(nb+kk)=[k,corinvs(kk)];end
-       cors=shiftcors(cors,nb)
-//     cur_fictitious=cur_fictitious+nb
-       cor(k)=cors
-       nb=nb+nbs
-       Pind=Pinds
-       path($)=[]
-
-      else//standard blocks
-       nb=nb+1
-       corinv(nb)=k
-       //[model,ok]=build_block(o.model)
-       cor(k)=nb
+      else
+       mod_blk_exist=%t // Flag for the existance of modelica's blocks
       end
-    elseif x(1)=='Deleted'|x(1)=='Text' then
-       //this objects are ignored
-    else //links
-      Links=[Links k] // memorize their position for use during links analysis
     end
-  end //end of loop on objects
-  
-  if ksup==0&nb==0 then
-    message('Empty diagram')
-    ok=%f
-    return
+  elseif x(1)=='Deleted'|x(1)=='Text' then
+    //this objects are ignored
+  else //links
+    Links=[Links k] // memorize their position for use during links analysis
   end
-  //-------------- Analyse  links -------------- 
-  for k=Links
-    o=scs_m.objs(k);
-    f=0
-    if o.from(1)<0|o.from(1)>MaxBlock then //Link coming from a superblock input port
-    else
-      o.from(1)=cor(o.from(1));
-    end
-    if o.to(1)<0 |o.to(1)>MaxBlock then //Link going to a superblock output port
-    else
-      o.to(1)=cor(o.to(1)),
-    end
+end //end of loop on objects
 
-    if o.ct(2)==2 //implicit links
-      //if abs(o.from(1))==125|abs(o.to(1))==125 then pause,end
-      links_table=[links_table
-                  o.from(1:3)    o.ct(2) 
-                  o.to(1:3)      o.ct(2) ]
-    else //regular or event links
-      links_table=[links_table
-                  o.from(1:2)  -1  o.ct(2) //outputs are tagged with -1 
-                  o.to(1:2)    1   o.ct(2) ] //inputs are tagged with 1
-    end
+if ksup==0&nb==0 then
+  message('Empty diagram')
+  ok=%f
+  return
+end
+//-------------- Analyse  links -------------- 
+for k=Links
+  o=scs_m.objs(k);
+  f=0
+  if o.from(1)<0|o.from(1)>MaxBlock then //Link coming from a superblock input port
+  else
+    o.from(1)=cor(o.from(1));
+  end
+  if o.to(1)<0 |o.to(1)>MaxBlock then //Link going to a superblock output port
+  else
+    o.to(1)=cor(o.to(1)),
+  end
+  
+  if o.ct(2)==2 //implicit links
+    //if abs(o.from(1))==125|abs(o.to(1))==125 then pause,end
+    links_table=[links_table
+       o.from(1:3)    o.ct(2) 
+       o.to(1:3)      o.ct(2) ]
+  else //regular or event links
+    links_table=[links_table
+       o.from(1:2)  -1  o.ct(2) //outputs are tagged with -1 
+       o.to(1:2)    1   o.ct(2) ] //inputs are tagged with 1
+  end
+end
+// Warning in case of modelica's blocks in an enabled diagram.
+// Fady 18/11/2007
+tof=find((sco_mat(:,2)=='1')& (sco_mat(:,5)=='10'))
+if tof<>[] then
+  if mod_blk_exist then
+    message('Warning the enable does not consider the modelica blocks')
   end
+end
 //----------------------Goto From Analyses--------------------------
 // Local case
-  if loc_mat<>[] then
-     for i=1:size(loc_mat,1)
-       index1=find((from_mat(:,2)=='-1')&(from_mat(:,3)==loc_mat(i,3))&(from_mat(:,4)==loc_mat(i,4)))
-       for j=index1
-            index2=find(links_table(:,1)==-evstr(from_mat(j,1)))
-//          for k=index2
-//               links_table(k,1)=-evstr(loc_mat(i,1))
-//          end
-            if index2<>[] then
-                links_table(index2',1)=-evstr(loc_mat(i,1))
-            end
-            index2=find(sco_mat(:,1)==from_mat(j,1))
-            sco_mat(index2',:)=[]
-       end
+if loc_mat<>[] then
+  for i=1:size(loc_mat,1)
+    index1=find((from_mat(:,2)=='-1')&(from_mat(:,3)==loc_mat(i,3))&(from_mat(:,4)==loc_mat(i,4)))
+    for j=index1
+      index2=find(links_table(:,1)==-evstr(from_mat(j,1)))
+      //            for k=index2
+      //                 links_table(k,1)=-evstr(loc_mat(i,1))
+      //            end
+      if index2<>[] then
+       links_table(index2',1)=-evstr(loc_mat(i,1))
       end
-   end
+      index2=find(sco_mat(:,1)==from_mat(j,1))
+      sco_mat(index2',:)=[]
+    end
+  end
+end
 //scoped case
-   if tag_exprs<>[] then
-   //to be modified !!!!!
-//      vec=unique(tag_exprs)
-      for i=1:size(tag_exprs,1)
-         index=find((tag_exprs(:,1)==tag_exprs(i,1))&(tag_exprs(:,2)==tag_exprs(i,2)))
-          if size(index,'*') > 1  then
-             message(["Error In Compilation. You cannot have multiple GotoTagVisibility";..
-                      " with the same tag value in the same scs_m"])
-             ok=%f;
-             return
-          end
-      end 
-
-      for i=1:size(tag_exprs,1)
-          index=find((sco_mat(:,2)=='1')&(sco_mat(:,3)==tag_exprs(i,1))&(sco_mat(:,4)=='2')&(sco_mat(:,5)==tag_exprs(i,2)))
-          if index<>[] then
-          if size(index,'*')>1 then
-             message(["Error in compilation";"Multiple GOTO are taged by the same GotoTagVisibility"])
-             ok=%f
-             return
-          end
-          index1=find((sco_mat(:,2)=='-1')&(sco_mat(:,3)==tag_exprs(i,1))&(sco_mat(:,5)==tag_exprs(i,2)))
-          if index1<>[] then
-          for j=index1
-               index2=find(links_table(:,1)==-evstr(sco_mat(j,1)))
-               if index2<>[] then
-                  links_table(index2',1)=-evstr(sco_mat(index,1))
-               end
-          end
-          end
-              sco_mat([index1';index'],:)=[]
-              //sco_mat(index,:)=[]
-          end
+if tag_exprs<>[] then
+  //to be modified !!!!!
+  //      vec=unique(tag_exprs)
+  for i=1:size(tag_exprs,1)
+    index=find((tag_exprs(:,1)==tag_exprs(i,1))&(tag_exprs(:,2)==tag_exprs(i,2)))
+    if size(index,'*') > 1  then
+      message(["Error In Compilation. You cannot have multiple GotoTagVisibility";..
+             " with the same tag value in the same scs_m"])
+      ok=%f;
+      return
+    end
+  end 
+  
+  for i=1:size(tag_exprs,1)
+    index=find((sco_mat(:,2)=='1')&(sco_mat(:,3)==tag_exprs(i,1))&(sco_mat(:,4)=='2')&(sco_mat(:,5)==tag_exprs(i,2)))
+    if index<>[] then
+      if size(index,'*')>1 then
+       message(["Error in compilation";"Multiple GOTO are taged by the same GotoTagVisibility"])
+       ok=%f
+       return
       end
-   end
+      index1=find((sco_mat(:,2)=='-1')&(sco_mat(:,3)==tag_exprs(i,1))&(sco_mat(:,5)==tag_exprs(i,2)))
+      if index1<>[] then
+       for j=index1
+         index2=find(links_table(:,1)==-evstr(sco_mat(j,1)))
+         if index2<>[] then
+           links_table(index2',1)=-evstr(sco_mat(index,1))
+         end
+         //linking the always active blocks to the VirtualCLK0 if exists.
+         if sco_mat(j,5)=='10' then
+           links_table($+1,:)=[-evstr(sco_mat(index,1)) 1 -1 -1]
+           links_table($+1,:)=[evstr(sco_mat(j,1)) 0 1 -1]
+         end 
+       end
+      end
+      sco_mat([index1';index'],:)=[]
+      //sco_mat(index,:)=[]
+    end
+  end
+end
 //global case
 // function global_case in c_pass1
 //------------------------------------------------------------------------
index 471944b..42bca9c 100644 (file)
@@ -31,7 +31,7 @@ function params=scicos_params(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)
     end
   end
   if exists('tf','local')==0 then tf=100000,end
-  if exists('tol','local')==0 then tol=[1.d-4,1.d-6,1.d-10,tf+1,0,0],end
+  if exists('tol','local')==0 then tol=[1.d-6,1.d-6,1.d-10,tf+1,0,0],end
   if exists('context','local')==0 then context=[],end
   void1=[]
   if exists('options','local')==0 then options=default_options(),end
@@ -45,3 +45,4 @@ function params=scicos_params(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)
               void3,doc)
 
 endfunction
+
index b2d56fb..13a40eb 100644 (file)
@@ -83,6 +83,7 @@ return;end
 //
 // 05/02/07 -Alan- : update to %20 rhs parameters
 //
+// Copyright INRIA
 [%lhs,%rhs]=argn(0)
 
 %nn=prod(size(%lables))
@@ -110,7 +111,7 @@ while %t do
     end
   end
 
-  [%vv_list,%ierr_vec]=context_evstr(%str,%scicos_context);
+  [%vv_list,%ierr_vec]=context_evstr(%str,%scicos_context,%typ);
 
   %noooo=0
   for %kk=1:%nn
@@ -149,7 +150,7 @@ while %t do
        %noooo=-%kk,break,
       end
       if %ierr<>0 then %noooo=-%kk;break,end
-      if type(%vv)>2 then %noooo=-%kk,break,end
+      if (type(%vv)>2 & type(%vv)<>8) then %noooo=-%kk,break,end
       %sz=%typ(2*%kk);if type(%sz)==10 then %sz=evstr(%sz),end
       %ssss=string(%sz(1))
       %nnnnn=prod(size(%vv))
@@ -218,6 +219,8 @@ while %t do
        if %sz(1)>=0 then if %mmmm<>%sz(1) then %noooo=%kk,break,end,end
        if %sz(2)>=0 then if %nnnnn<>%sz(2) then %noooo=%kk,break,end,end
       end
+    case 'gen'
+      //accept all
     else
       error('Incorrect type :'+%typ(2*%kk-1))
     end
index d8a2e09..d7febba 100644 (file)
 
 function texte = standard_document(objet, k)
 //**
-//**   
-// standard_document - Scicos block documentation 
+// standard_document - Scicos block documentation
 //
 
   type_objet = typeof(objet)
-  //
+
   select type_objet
+    //## texte ##//
+    case "Text" then
+      texte = 'This is a TEXT block'
 
-   case "Text" then
-    texte = 'This is a TEXT block'
-    
+    //## Blocks ##//
     case "Block" then
-    //- Initialisations 
-    modele = objet.model
-    graphique = objet.graphics
-    macro = objet.gui
-    //
-    fonction = modele.sim
-    if prod(size(fonction)) > 1 then
-      if fonction(2) == 0 then
-       language = '0 (Scilab function type Scicos 2.2)'
-      elseif fonction(2) == 1  then
-       language = '1 (Fortran or C code)'
-      elseif fonction(2) == 2 then
-       language = '2 (C code)'
-      elseif fonction(2) == 3 then
-       language = '3 (Scilab function)'
-      elseif fonction(2) == 4 then
-       language = '4 (C code)'
-      elseif fonction(2) == 5 then
-       language = '5 (Scilab function)'
-      elseif fonction(2) == 99 then
-       language = '99 (Scicos debug block)'
-       elseif fonction(2) < 0  then
-       language = '<0 (synchro block)'
-      elseif fonction(2) <10000 then
-       language = string(fonction(2))+'  (dynamic link or...)'
+      modele    = objet.model
+      graphique = objet.graphics
+      macro     = objet.gui
+
+      //## function type
+      fonction  = modele.sim
+      if prod(size(fonction)) > 1 then
+        if fonction(2) == 0 then
+          language = '0 (Scilab function type Scicos 2.2)'
+        elseif fonction(2) == 1  then
+          language = '1 (Fortran or C code)'
+        elseif fonction(2) == 2 then
+          language = '2 (C code)'
+        elseif fonction(2) == 3 then
+          language = '3 (Scilab function)'
+        elseif fonction(2) == 4 then
+          language = '4 (C code)'
+        elseif fonction(2) == 5 then
+          language = '5 (Scilab function)'
+        elseif fonction(2) == 99 then
+          language = '99 (Scicos debug block)'
+         elseif fonction(2) < 0  then
+          language = '<0 (synchro block)'
+        elseif fonction(2) <10000 then
+          language = string(fonction(2))+' (dynamic link or...)'
+        else
+          language = string(fonction(2))+' (internally implicit bloc)'
+        end
       else
-       language = string(fonction(2))+'  (internally implicit bloc)'
+       if modele.equations==list() then
+         language = '0 (Scilab function type Scicos 2.2)'
+       else
+         language = 'Implicit Modelica block'
+       end
       end
-    else
-      if modele.equations==list() then
-       language = '0 (Scilab function type Scicos 2.2)'
+
+      //## block type
+      if modele.blocktype == 'l' then
+        typ= 'synchro'
+      elseif modele.blocktype == 'x'
+        typ= 'x-type'
+      elseif modele.blocktype == 'm'
+        typ = 'memory'
       else
-       language= 'implicit Modelica block'
+        typ = 'regular'
       end
-    end
-    //
-
-    if modele.blocktype == 'l' then
-      typ= 'synchro'
-    elseif modele.blocktype == 'x'
-      typ= 'x-type'
-    elseif modele.blocktype == 'm'
-      typ = 'memory'
-    else
-      typ = 'regular'
-    end
-    //
-    if modele.dep_ut(1) then
-      dependance_u = 'yes'
-    else
-      dependance_u = 'no'
 
-    end
+      //## dep_u
+      if modele.dep_ut(1) then
+        dependance_u = 'yes'
+      else
+        dependance_u = 'no'
+      end
 
-    if modele.dep_ut(2) then
-      dependance_t = 'yes'
-    else
-      dependance_t = 'no'
-    end
-    //
-    identification = graphique.id
-
-    //- Informations generales 
-
-    if modele.sim=='super'|modele.sim=='csuper' then
-      texte = ['General Information'; 
-              '--------------------';' '
-              'object type                : Super Block';   ..
-              'Identification             : '+identification; ..
-              'Object number in diagram   : '+string(k); ' ';  ..
-              'Drawing function           : '+macro;' ']
-    else
-      texte = ['General Information'; 
-              '--------------------';' '
-              'object type                : bloc standard';   ..
-              'Identification             : '+identification; ..
-              'Object number in diagram   : '+string(k); ' ';  ..
-              'Drawing function           : '+macro;           ..
-              'Simulation function        : '+fonction(1);     ..
-              'Simulation Function type   : '+language;' ';    ..
-              'Bloc type                  : '+typ;             ..
-              'Direct feed through        : '+dependance_u;    ..
-              'Permanently active         : '+dependance_t]
-      if %cpr<>list()&needcompile<>4 then
-       cor = %cpr.cor
-       corinv = %cpr.corinv
-       path=list()
-       for kp=1:size(super_path,'*'),path(kp)=super_path(kp);end
-       path($+1)=k
-       ind=cor(path)
-
-       if ind>0&ind<=size(corinv) then
-         txt = ['Compiled structure Index   : '+string(cor(path)); ' ']
-       else
-         txt = ['Compiled structure Index   : suppressed'; ' ']
-       end
+      //## dep_t
+      if modele.dep_ut(2) then
+        dependance_t = 'yes'
       else
-       txt = ['Compiled structure Index   : Not available';' ']
+        dependance_t = 'no'
       end
-      texte=[texte;txt]
-    end
-    //- Entrees / sorties 
-
-    //tableau = ['Port type', 'Number', 'Size', 'Link'; '-', '-', '-', '-']
-    tableau = ['Port type', 'Number', 'I/E', 'Size', 'Data type', 'Link';
-               '-', '-', '-', '-', '-', '-']
-    //- Entrees standard
-    for i = 1 : min(size(modele.in,'*'),size(graphique.pin,'*'))
-      // General information
-      txt = ['Regular input', string(i)]
-      // Info. for implicit/explicit port
-      ierr=execstr('tt=string(graphique.in_implicit(i))','errcatch')
-      if ierr<>0 then
-        txt = [txt, '?'] //not specified
+
+      //
+      identification = graphique.id
+
+      //- Informations generales
+      if modele.sim=='super'|modele.sim=='csuper' then
+        texte = ['General Information';
+                 '-------------------';
+                 ' '
+                 'Object type                : Super Block';
+                 'Identification             : '+identification;
+                 'Object number in diagram   : '+string(k);
+                 ' '
+                 'Drawing function           : '+macro
+                 ' ']
       else
-        if tt==[] then 
-          txt = [txt, '?'] //not specified
-        else 
-          txt = [txt, tt]
+        texte = ['General Information';
+                 '--------------------';
+                 ' '
+                 'Object type                : bloc standard';
+                 'Identification             : '+identification;
+                 'Object number in diagram   : '+string(k);
+                 ' ';
+                 'Drawing function           : '+macro;
+                 'Simulation function        : '+fonction(1);
+                 'Simulation Function type   : '+language;
+                 ' ';
+                 'Bloc type                  : '+typ;
+                 'Direct feed through        : '+dependance_u;
+                 'Permanently active         : '+dependance_t]
+
+        if %cpr<>list()&needcompile<>4 then
+          cor = %cpr.cor
+          corinv = %cpr.corinv
+          path=list()
+          for kp=1:size(super_path,'*')
+            path(kp)=super_path(kp);
+          end
+          path($+1)=k
+          ind=cor(path)
+
+          if ind>0&ind<=size(corinv) then
+            txt = ['Compiled structure Index   : '+string(cor(path));
+                   ' ']
+          else
+            txt = ['Compiled structure Index   : suppressed';
+                   ' ']
+          end
+        else
+          txt = ['Compiled structure Index   : Not available';
+                 ' ']
         end
+        texte=[texte;txt]
+
       end
-      // Info. for size of port
-      txt = [txt ,'['];
-      tt=string(modele.in(i)) //first dim.
-      if tt==[] then 
-        txt($) = txt($)+'?' //not specified
-      else 
-        txt($) = txt($)+tt
-      end
-      txt($)=txt($)+';'
-      ierr=execstr('tt=string(modele.in2(i))','errcatch')//sec. dim.
-      if ierr<>0 then 
-        txt($) = txt($)+'?' //not specified
-      else
-        if tt==[] then 
+
+      //- Entrees / sorties
+      tableau = ['Port type', 'Number', 'I/E', 'Size', 'Data type', 'Link';
+                 '-', '-', '-', '-', '-', '-']
+
+      //- Entrees standard
+      for i = 1 : min(size(modele.in,'*'),size(graphique.pin,'*'))
+        // General information
+        txt = ['Regular input', string(i)]
+
+        // Info. for implicit/explicit port
+        ierr=execstr('tt=string(graphique.in_implicit(i))','errcatch')
+        if ierr<>0 then
+          txt = [txt, '?'] //not specified
+        else
+          if tt==[] then
+            txt = [txt, '?'] //not specified
+          else
+            txt = [txt, tt]
+          end
+        end
+
+        // Info. for size of port
+        txt = [txt ,'['];
+        tt=string(modele.in(i)) //first dim.
+        if tt==[] then
           txt($) = txt($)+'?' //not specified
-        else 
+        else
           txt($) = txt($)+tt
         end
-      end
-      txt($)=txt($)+']'
-      // Info for data type
-      ierr=execstr('ttyp=modele.intyp(i)','errcatch')
-      if ierr<> 0 then
-        tt='?' //not specified
-      else
-        if ttyp==-1 then tt='-1'
-        elseif ttyp==1 tt='double'
-        elseif ttyp==2 tt='complex'
-        elseif ttyp==3 tt='int32'
-        elseif ttyp==4 tt='int16'
-        elseif ttyp==5 tt='int8'
-        elseif ttyp==6 tt='uint32'
-        elseif ttyp==7 tt='uint16'
-        elseif ttyp==8 tt='uint8'
-        else tt='?' //Unknown
+        txt($)=txt($)+';'
+        ierr=execstr('tt=string(modele.in2(i))','errcatch')//sec. dim.
+        if ierr<>0 then 
+          txt($) = txt($)+'?' //not specified
+        else
+          if tt==[] then 
+            txt($) = txt($)+'?' //not specified
+          else
+            txt($) = txt($)+tt
+          end
+        end
+        txt($)=txt($)+']'
+
+        // Info for data type
+        ierr=execstr('ttyp=modele.intyp(i)','errcatch')
+        if ierr<> 0 then
+          tt='?' //not specified
+        else
+          if ttyp==-1 then tt='-1'
+          elseif ttyp==1 tt='double'
+          elseif ttyp==2 tt='complex'
+          elseif ttyp==3 tt='int32'
+          elseif ttyp==4 tt='int16'
+          elseif ttyp==5 tt='int8'
+          elseif ttyp==6 tt='uint32'
+          elseif ttyp==7 tt='uint16'
+          elseif ttyp==8 tt='uint8'
+          else tt='?' //Unknown
+          end
         end
+        txt = [txt, tt]
+
+        //Info for link
+        txt = [txt,string(graphique.pin(i))]
+
+        //update tableau
+        tableau = [tableau; txt]
       end
-      txt = [txt, tt]
-      //Info for link
-      txt = [txt,string(graphique.pin(i))]
-      //update tableau
-      tableau = [tableau; txt]
-    end
 
-    //- Sorties standard
-    for i = 1 : min(size(modele.out,'*'),size(graphique.pout,'*'))
-      //General informations.
-      txt = ['Regular output', string(i)]
-      // Info. for implicit/explicit port
-      ierr=execstr('tt=string(graphique.out_implicit(i))','errcatch')
-      if ierr<>0 then
-          txt = [txt, '?'] //not specified
-      else
-        if tt==[] then 
+      //- Sorties standard
+      for i = 1 : min(size(modele.out,'*'),size(graphique.pout,'*'))
+        //General informations.
+        txt = ['Regular output', string(i)]
+        // Info. for implicit/explicit port
+        ierr=execstr('tt=string(graphique.out_implicit(i))','errcatch')
+        if ierr<>0 then
           txt = [txt, '?'] //not specified
-        else 
-          txt = [txt, tt]
+        else
+          if tt==[] then
+            txt = [txt, '?'] //not specified
+          else
+            txt = [txt, tt]
+          end
         end
-      end
-      // Info. for size of port
-      txt = [txt ,'['];
-      tt=string(modele.out(i)) //first dim.
-      if tt==[] then 
-        txt($) = txt($)+'?' //not specified
-      else 
-        txt($) = txt($)+tt
-      end
-      txt($)=txt($)+';'
-      ierr=execstr('tt=string(modele.out2(i))','errcatch') //sec. dim.
-      if ierr<>0 then
-          txt($) = txt($)+ '?' //not specified
-      else
-        if tt==[] then 
+
+        // Info. for size of port
+        txt = [txt ,'['];
+        tt=string(modele.out(i)) //first dim.
+        if tt==[] then
+          txt($) = txt($)+'?' //not specified
+        else
+          txt($) = txt($)+tt
+        end
+        txt($)=txt($)+';'
+        ierr=execstr('tt=string(modele.out2(i))','errcatch') //sec. dim.
+        if ierr<>0 then
           txt($) = txt($)+ '?' //not specified
-        else 
-          txt($) = txt($)+ tt
+        else
+          if tt==[] then
+            txt($) = txt($)+ '?' //not specified
+          else
+            txt($) = txt($)+ tt
+          end
         end
-      end
-      txt($)=txt($)+']'
-      // Info for data type
-      ierr=execstr('ttyp=modele.outtyp(i)','errcatch')
-      if ierr<>0 then
-        tt='?' //not specified
-      else
-        if ttyp==-1 then tt='-1'
-        elseif ttyp==1 then tt='double'
-        elseif ttyp==2 tt='complex'
-        elseif ttyp==3 tt='int32'
-        elseif ttyp==4 tt='int16'
-        elseif ttyp==5 tt='int8'
-        elseif ttyp==6 tt='uint32'
-        elseif ttyp==7 tt='uint16'
-        elseif ttyp==8 tt='uint8'
-        else tt='?' //Unknown
+        txt($)=txt($)+']'
+
+        // Info for data type
+        ierr=execstr('ttyp=modele.outtyp(i)','errcatch')
+        if ierr<>0 then
+          tt='?' //not specified
+        else
+          if ttyp==-1 then tt='-1'
+          elseif ttyp==1 then tt='double'
+          elseif ttyp==2 tt='complex'
+          elseif ttyp==3 tt='int32'
+          elseif ttyp==4 tt='int16'
+          elseif ttyp==5 tt='int8'
+          elseif ttyp==6 tt='uint32'
+          elseif ttyp==7 tt='uint16'
+          elseif ttyp==8 tt='uint8'
+          else tt='?' //Unknown
+          end
         end
+        txt = [txt, tt]
+
+        //Info for link
+        txt = [txt,string(graphique.pout(i))]
+        //update tableau
+        tableau = [tableau; txt]
       end
-      txt = [txt, tt]
-      //Info for link
-      txt = [txt,string(graphique.pout(i))]
-      //update tableau
-      tableau = [tableau; txt]
-    end
 
-    //- Entrees evenements 
-    for i = 1 : min(size(modele.evtin,'*'),size(graphique.pein,'*'))
-      tableau = [tableau; 'Event input', string(i),'',..
-                string(modele.evtin(i)),'', string(graphique.pein(i))]
-    end
-    //- Sorties evenements 
-    for i = 1 : min(size(modele.evtout,'*'),size(graphique.peout,'*'))
-      tableau = [tableau; 'Event output', string(i),'',..
-                string(modele.evtout(i)),'', string(graphique.peout(i))]
-    end
-    //
-    texte = [texte; 'Input / output'; 
-            '--------------';
-            ' '
-            tabule(tableau); ' ']
-    // Documentation
-    documentation=objet.doc
-    if type(documentation)==15 then
-      if size(documentation)>=2 then
-       funname=documentation(1);doc=documentation(2)
-       if type(funname)==10 then 
-         ierr=execstr('docfun='+funname,'errcatch')
-         if ierr<>0 then
-           messagebox('function '+funname+' not found',"modal","error");
-           return
-         end
-       else
-         docfun=funname
-       end
-       ierr=execstr('doc=docfun(''get'',doc)','errcatch')
-       if ierr==0&doc<>[] then
-         texte = [texte; 'Documentation'; 
-                  '-------------';
-                  ' '
-                  doc; ' ']
-       end
+      //- Entrees evenements
+      for i = 1 : min(size(modele.evtin,'*'),size(graphique.pein,'*'))
+        tableau = [tableau; 'Event input', string(i),'',..
+                   string(modele.evtin(i)),'', string(graphique.pein(i))]
       end
-    end
 
-    //= Liaisons 
+      //- Sorties evenements
+      for i = 1 : min(size(modele.evtout,'*'),size(graphique.peout,'*'))
+        tableau = [tableau; 'Event output', string(i),'',..
+                   string(modele.evtout(i)),'', string(graphique.peout(i))]
+      end
+
+      //
+      texte = [texte;
+               'Input / output';
+               '--------------';
+               ' '
+               tabule(tableau);
+               ' ']
+
+      //- Documentation
+      documentation=objet.doc
+      if type(documentation)==15 then
+        if size(documentation)>=2 then
+          funname=documentation(1);
+          doc=documentation(2)
+          if type(funname)==10 then
+            ierr=execstr('docfun='+funname,'errcatch')
+            if ierr<>0 then
+              x_message('function '+funname+' not found')
+              return
+            end
+          else
+            docfun=funname
+          end
+          ierr=execstr('doc=docfun(''get'',doc)','errcatch')
+          if ierr==0&doc<>[] then
+            texte = [texte;
+                     'Documentation';
+                     '-------------';
+                     ' '
+                     doc;
+                     ' ']
+          end
+        end
+      end
+
+    //## Liens ##//
     case 'Link' then
-    //- Initialisation 
-    identification = objet.id
-    if objet.ct(2) == 1 then
-      sous_type = 'Regular Link'
-    else
-      sous_type = 'Event link'
-    end
-    //- Informations generales 
-    texte = ['General informations'; 
-            '--------------------';' '
-            'Object type                : '+sous_type;
-            'Object Identification      : '+identification'; 
-            'Object number in diagram   : '+string(k); ' ']
-    from=objet.from
-    if %cpr<>list() then
-      if sous_type == 'Regular Link' then 
-       scs_m_tmp=scs_m
-       
-       while %t
-         obji=scs_m_tmp.objs(from(1))
-         if obji.model.sim=='lsplit' then
-           
-         elseif obji.model.sim=='super' then
-           super_path;super_path($+1)=from(1)
-           scs_m_tmp=obji.model.rpar
-           for obji=scs_m_tmp.objs
-             if typeof(obji)=='Block' then
-               if obji.model.sim=='output'&obji.model.ipar==from(2) then
-                 break
-               end
-             end
-           end
-         else
-           break
-         end
-         #link=obji.graphics.pin
-         from=scs_m_tmp.objs(#link).from
-       end
-       cor = %cpr.cor
-       path=list()
-       for kp=1:size(super_path,'*'),path(kp)=super_path(kp);end
-       path($+1)=from(1)
-       ind=cor(path)
-       if type(ind)==1 then
-         kl=%cpr.sim('outlnk')(%cpr.sim('outptr')(ind)+(from(2)-1));
-          kmin=[];kmax=[];count=1;
-          for j=1:size(%cpr.state('outtb'))
-            if j==kl then
-              kmin=count;
-              kmax=count+size(%cpr.state.outtb(j),'*')-1;
-              break
+      identification = objet.id
+      if objet.ct(2) == 1 then
+        sous_type = 'Regular Link'
+      else
+        sous_type = 'Event link'
+      end
+
+      //- Informations generales
+      texte = ['General informations';
+               '--------------------';
+               ' '
+               'Object type                : '+sous_type;
+               'Identification             : '+identification';
+               'Object number in diagram   : '+string(k);
+               ' ']
+
+      //- Compiled link memory zone
+      from=objet.from
+      if %cpr<>list() then
+        if sous_type == 'Regular Link' then
+          scs_m_tmp=scs_m
+
+          while %t
+            obji=scs_m_tmp.objs(from(1))
+            if obji.model.sim=='lsplit' then
+
+            elseif obji.model.sim=='super' then
+              super_path;
+              super_path($+1)=from(1)
+              scs_m_tmp=obji.model.rpar
+              for obji=scs_m_tmp.objs
+                if typeof(obji)=='Block' then
+                  if obji.model.sim=='output'&obji.model.ipar==from(2) then
+                    break
+                  end
+                end
+              end
             else
-              count=count+size(%cpr.state.outtb(j),'*');
+              break
             end
+            #link=obji.graphics.pin
+            from=scs_m_tmp.objs(#link).from
           end
-          txt =   ['Compiled link memory zone  : outtb('+string(kl)+')']
-          txt=[txt;'                     Area  : ['+string(kmin)+':'+string(kmax)+']']
-          txt=[txt;'                     Type  : '+typeof(%cpr.state.outtb(kl))']
-          txt=[txt;'                     Size  : '+sci2exp(size(%cpr.state.outtb(kl)))';' ']
-       else
-         txt = ['Compiled link memory zone  : Not available';' ']
-       end
+
+          cor = %cpr.cor
+          path=list()
+          for kp=1:size(super_path,'*')
+            path(kp)=super_path(kp);
+          end
+          path($+1)=from(1)
+          ind=cor(path)
+
+          if type(ind)==1&ind<>0 then
+            kl=%cpr.sim('outlnk')(%cpr.sim('outptr')(ind)+(from(2)-1));
+            kmin=[];kmax=[];count=1;
+            for j=1:size(%cpr.state('outtb'))
+              if j==kl then
+                kmin=count;
+                kmax=count+size(%cpr.state.outtb(j),'*')-1;
+                break
+              else
+                count=count+size(%cpr.state.outtb(j),'*');
+              end
+            end
+
+            txt = ['Compiled link memory zone  : outtb('+string(kl)+')']
+            txt = [txt;
+                   '                     Area  : ['+string(kmin)+':'+string(kmax)+']']
+            txt = [txt;
+                   '                     Type  : '+typeof(%cpr.state.outtb(kl))']
+            txt = [txt;
+                   '                     Size  : '+sci2exp(size(%cpr.state.outtb(kl)))';
+                   ' ']
+          else
+            txt = ['Compiled link memory zone  : Not available';' ']
+          end
+        end
+      else
+        txt = ['Compiled link memory zone  : Not available';' ']
       end
+      texte=[texte;txt]
+
+      //- Connexions
+      tableau = [' ', 'Block', 'Port' ;
+                 '-', '-', '-';
+                 'From', string(objet.from(1:2));
+                 'to', string(objet.to(1:2))]
+
+      texte = [texte;
+               'Connections';
+               '-----------';
+               ' '
+               tabule(tableau);
+               ' ']
+    //#####//
     else
-      txt = ['Compiled link memory zone  : Not available';' ']
+      texte=[]
     end
-    texte=[texte;txt]   
-    
-    //- Connexions 
-
-    tableau = [' ', 'Block', 'Port' ; '-', '-', '-'; 
-              'From', string(objet.from(1:2)); 
-              'to', string(objet.to(1:2))] 
-    texte = [texte; 
-            'Connections'; 
-            '-----------';' ' 
-            tabule(tableau); ' ']
-    //
-  else
-    texte=[]
-  end
 endfunction
index 4140fe1..5f23ec4 100644 (file)
@@ -26,191 +26,244 @@ function standard_draw (o, frame, draw_ports, up)
 //**
 //** 21 Nov 2006 : some save/restore patch moved to upper level "drawobj.sci"
 //**
-
-  xf = 60
-  yf = 40
+  xf = 60 ; yf = 40 ;
 
   [lhs,rhs] = argn(0)
 
-  if rhs == 1 then
-      frame = %t
+  if rhs==1 then
+      frame=%t
   end
 
-  if rhs < 3 then
+  if rhs<3 then
       draw_ports = standard_draw_ports     //** left right ports
                                            //** the function 'standard_draw_ports' it's copied in 'draw_ports'
-  elseif rhs == 4 then                     //** otherwise
-      draw_ports = standard_draw_ports_up  //** up / down ports
+  elseif rhs==4 then                       //** otherwise 
+      draw_ports = standard_draw_ports_up  //** up / down ports 
   end                                      //** the function 'standard_draw_ports_up' it's copied in 'draw_ports'
 
-  nin    = size(o.model.in,    1);
-  nout   = size(o.model.out,   1);
-  clkin  = size(o.model.evtin, 1);
-  clkout = size(o.model.evtout,1);
-  [orig, sz, orient] = (o.graphics.orig, o.graphics.sz, o.graphics.flip)
+  nin   = size(o.model.in,1);
+  nout  = size(o.model.out,1);
+  clkin = size(o.model.evtin,1);
+  clkout= size(o.model.evtout,1);
+  [orig,sz,orient] = (o.graphics.orig,o.graphics.sz,o.graphics.flip)
 
-//** Default values -------------------
-  thick  = 1 //** patch Simone
-  e      = 4
+  //** Default values -------------------
+  thick = 1              ; //** patch Simone
+  e = 4 ;
   With3D = options('3D')(1)
-//** ----------------------------------
+  //** ----------------------------------
+
 
-//** local handler (read/write) = semiglobalhandler (read/only)
+  gh_curwin = gh_current_window     ; //** get the handle of the current graphics window
 
   gr_i = o.graphics.gr_i
 
   if type(gr_i) == 15 then
-    [gr_i, coli] = gr_i(1:2) ;
+     [gr_i,coli] = gr_i(1:2) ;
   else
-    coli = [] ;
+      coli = [] ;
   end
 
-  // draw box
+  //** --------------------------------------- draw box ------------------------------------------------
   if frame then
-
     if With3D then  //** this is the code relative to the block's "window dressing"
-
-      //**---------- 3D Mode ON ------------------------------------------------
-
-      #Color3D = options('3D')(2); 
-
-      xrect(orig(1)+e, orig(2)+sz(2), sz(1)-e, sz(2)-e) ;
-      gh_e            = gce(); 
-      gh_e.thickness  = 1    ; //** one pixel thick  
-      gh_e.foreground = #Color3D ; 
-
-      if coli<>[] then
-        gh_e.fill_mode = "on"  ;
-        gh_e.background = coli ;
+      //**---------- 3D Mode ON -----------------------------------------------------------------------
+      #Color3D = options('3D')(2)
+      // xpoly([orig(1)+e;orig(1)+sz(1);orig(1)+sz(1)],[orig(2)+sz(2);orig(2)+sz(2);orig(2)+e],'lines')
+      xrect( orig(1)+e, orig(2)+sz(2), sz(1)-e, sz(2)-e) ;
+      gh_e = gce(); //** new graphics :)
+      gh_e.thickness = 0 ;
+      gh_e.foreground = #Color3D ;
+
+      if coli<>[] then 
+          gh_e.fill_mode = "on"  ;
+          gh_e.background = coli ;
       end
 
-      xx = [ orig(1)  orig(1)+sz(1)-e  orig(1)+sz(1)  orig(1)+e  orig(1)+e     orig(1)];
-
-      yy = [ orig(2)  orig(2)          orig(2)+e      orig(2)+e  orig(2)+sz(2)  orig(2)+sz(2)-e ];
+      xx = [ orig(1)   , orig(1)
+            orig(1)   , orig(1)+sz(1)-e
+            orig(1)+e , orig(1)+sz(1)
+            orig(1)+e , orig(1)+e] ;
+
+      yy = [orig(2)         , orig(2)
+           orig(2)+sz(2)-e , orig(2)
+           orig(2)+sz(2)   , orig(2)+e
+           orig(2)+e       , orig(2)+e];
+
+      xfpolys(xx,yy,-[1,1]*#Color3D); //** fill a set of polygons
+      gh_e = gce()              ;
+      gh_c = gh_e.children(1:2) ;
+      gh_c.foreground = default_color(0) ;
+      gh_c.thickness = 2 ;
+
+    else //** not in 3D mode 
+      //**----------3D Mode OFF -------------------------------------------------------------------------
+      e = 0 ;
+      xrect(orig(1),orig(2)+sz(2),sz(1),sz(2)) ;
+      gh_e = gce()       ;
+      gh_e.thickness = 2 ;
+
+      if coli<>[] then 
+          gh_e.fill_mode = "on"  ;
+          gh_e.background = coli ;
+      end
 
-      xfpoly(xx,yy); //** fill a set of polygons
-      gh_e            = gce(); 
-      gh_e.background = #Color3D;
-      gh_e.line_mode ="off"; 
+    end //** of 3D mode ON/OFF
+  end //** of the frame mode
+  draw_ports(o) ; //** 'standard_draw_ports' or 'standard_draw_ports_up'
+//** --------------------------------------------------------------------------------------------------------------
 
-    else //** not in 3D mode
+//** ---- scs_m , %cpr Indexes Show including information on internal superblocks ---------------------------------
+  if exists('%scicos_with_grid') then
+    if %scicos_with_grid then
+      scs_m_i=[]; cpr_i=[] ; sflag=[] ;
+      win_id = gh_curwin.figure_id
 
-      //**----------3D Mode OFF ------------------------------------------------
+      kc = find(win_id==windows(:,2))
 
-      e = 0
-      xrect(orig(1),orig(2)+sz(2),sz(1),sz(2))
-      gh_e = gce()
-      gh_e.thickness = 2
+      pal = windows(kc,1);
 
-      if coli <> [] then
-          gh_e.fill_mode = "on"
-          gh_e.background = coli
-      end
+      if pal > 0 then
+        if ~exists('scs_m_index') then scs_m_index=-1, end
+        [scs_m_i, cpr_i, sflag] = get2index(o, scs_m_index);
 
-    end //** of 3D mode ON/OFF
-
-  end //** of the frame mode
+        txt_index = [];
+         if scs_m_i<>[] & cpr_i<>[] then
+            if sflag<>[] then
+              txt_index = string(scs_m_i)+"s, "+cpr_i+"c";
+            else
+              txt_index = string(scs_m_i)+"s, "+string(cpr_i)+"c";
+           end
+         end
 
-  draw_ports(o) ; //** 'standard_draw_ports' or 'standard_draw_ports_up'
+        gh_axes = gca(); //** get the Axes proprieties
 
-//** ---------------------------------------------------------------------------
-//** - scs_m , %cpr Indexes Show including information on internal superblocks -
+        // draw indexes
+        if txt_index<>[] then
+          //** Save font state
+          axes_font_style = gh_axes.font_style ;
+          axes_font_size  = gh_axes.font_size  ;
+          //** axes_font_color = gh_axes.font_color ; //** optional
 
-//** quick and dirty patch to show the scs_s and %cpr indexes
-if exists('%scicos_with_grid') then
-  if %scicos_with_grid then
-    scs_m_i=[]; cpr_i=[] ; sflag=[] ;
-    gh_curwin = gh_current_window     ; //** get the handle of the current graphics window
-    win_id = gh_curwin.figure_id
+          gh_axes.font_style = options.ID(1)(1) ;
+          gh_axes.font_size  = options.ID(1)(2) ;
 
-    kc = find(win_id==windows(:,2))
+          //@@ compute bbox
+          rect = stringbox(txt_index, orig(1), orig(2), 0,...
+                           options.ID(1)(1), options.ID(1)(2));
 
-    pal = windows(kc,1);
+          w=(rect(1,3)-rect(1,2)) * %zoom;
+          w = max(w, sz(1));
+          h=(rect(2,2)-rect(2,4)) * 1.3 * %zoom/1.4;
 
-    if pal > 0 then
-      if ~exists('scs_m_index') then scs_m_index=-1, end
-      [scs_m_i, cpr_i, sflag] = get2index(o, scs_m_index);
+          //@@ fill txt_index in a box
+          xstringb(orig(1) + sz(1) / 2 - w / 2, orig(2) + sz(2), txt_index , w, h,'fill') ;
 
-      txt_index = [];
-       if scs_m_i<>[] & cpr_i<>[] then
-          if sflag<>[] then
-            txt_index = string(scs_m_i)+"s, "+cpr_i+"c";
-          else
-            txt_index = string(scs_m_i)+"s, "+string(cpr_i)+"c";
-         end
-       end
-
-      gh_axes = gca(); //** get the Axes proprieties
-
-      // draw indexes
-      if txt_index<>[] then
-        //** Save font state
-        axes_font_style = gh_axes.font_style ;
-        axes_font_size  = gh_axes.font_size  ;
-        //** axes_font_color = gh_axes.font_color ; //** optional
-
-        gh_axes.font_style = options.ID(1)(1) ;
-        gh_axes.font_size  = options.ID(1)(2) ;
-        //** font color not yet used
-        rectangle = xstringl(orig(1), orig(2), txt_index) ;
-        w = max(rectangle(3), sz(1)) ;
-        h = rectangle(4) * 0.5 ;
-        xstringb(orig(1) + sz(1) / 2 - w / 2, orig(2) + sz(2) + h , txt_index , w, h) ;
-
-        //** Restore font state
-        gh_axes.font_style = axes_font_style ;
-        gh_axes.font_size  = axes_font_size  ;
-        //** gh_axes.font_color = axes_font_color ; //** optional
+          //** Restore font state
+          gh_axes.font_style = axes_font_style ;
+          gh_axes.font_size  = axes_font_size  ;
+          //** gh_axes.font_color = axes_font_color ; //** optional
+        end
       end
     end
+  end //** of on/off control
+//** --------------------------------------------------------------------------------------------------------------
+
+//** --------------------------------- draw gr_i ---------------------------------
+  o_size=size(gh_curwin.children.children)
+  deff('c=scs_color(c)',' ') ; //** on line function definition
+  gr_i = [gr_i]; //** simple but not simpler :)
+  model = o.model
+  if With3D & frame then
+    orig = orig + e ;
+    sz   = sz - e   ;
   end
-end //** of on/off control
+  //@@ Alan,28/11/08 : protect variables of standard_draw
+  deff('ierr=exec_gr_i(gr_i)','ierr=execstr(gr_i,''errcatch'',''n'');') ; //** on line function definition
+  //** Check of the graphics object has generated any error
+  if exec_gr_i(gr_i)<>0 then
+    message(['Error in Icon defintion'; lasterror()])
+  end
+//** -----------------------------------------------------------------------------
 
-//** -------------------------------- Identification ---------------------------
+//** -------------------------------- Identification --------------------------------------------------------------
 
   ident = o.graphics.id
 
-  gh_axes = gca(); //** get the Axes proprieties
-
   // draw Identification
   if ident<>[] & ident<>'' then
 
+      //@@ that's for label, not for ident
+      //ident = '[' + stripblanks(ident) + ']'
+      //ident = '-' + stripblanks(ident) + '-'
+
+      //@@ compute bbox of gr object
+      p_size=size(gh_curwin.children.children);
+      if p_size(1)-o_size(1)<>0 then
+        glue(gh_curwin.children.children(1:1:(p_size(1)-o_size(1))));
+        rect=dig_bound_compound(1)
+        //@@ Alan,28/11/08 : I redraw all here because glue/unglue op change
+        //@@                 some properties of objects in the compound
+        //unglue(gh_curwin.children.children(1))
+        delete(gh_curwin.children.children(1))
+        exec_gr_i(gr_i) //@@ no test here : this have been done previously
+      else
+        rect=[orig(1) orig(2) orig(1)+sz(1) orig(2)+sz(2)]
+      end
+      if With3D & frame then
+        rect(1,1)=rect(1,1)-e
+        rect(1,2)=rect(1,2)-e
+        orig = orig - e ;
+        sz   = sz + e   ;
+      end
+      //rect(1,1)=min(rect(1,1),orig(1))
+      rect(1,2)=min(rect(1,2),orig(2))
+      //rect(1,3)=max(rect(1,3),orig(1)+sz(1))
+      rect(1,4)=max(rect(1,4),orig(2)+sz(2))
+
+      gh_axes = gca(); //** get the Axes properties
+
       //** Save font state
       axes_font_style = gh_axes.font_style ;
       axes_font_size  = gh_axes.font_size  ;
-      //** axes_font_color = gh_axes.font_color ; //** optional
+      axes_font_color = gh_axes.font_color ; //** optional
 
       gh_axes.font_style = options.ID(1)(1) ;
       gh_axes.font_size  = options.ID(1)(2) ;
-      //** font color not yet used
-      rectangle = xstringl(orig(1), orig(2), ident) ;
-      w = max(rectangle(3), sz(1)) ;
-      h = rectangle(4) * 1.3 ;
-      xstringb(orig(1) + sz(1) / 2 - w / 2, orig(2) - h , ident , w, h) ;
-
-     //** Restore font state
-     gh_axes.font_style = axes_font_style ;
-     gh_axes.font_size  = axes_font_size  ;
-     //** gh_axes.font_color = axes_font_color ; //** optional
-
-  end
-//** --------------------------- Identification End ----------------------------
-
-  deff('c=scs_color(c)',' ') //** on line function definition
-
-  gr_i = [ gr_i ] //** simple but not simpler :)
-
-  model = o.model
+      gh_axes.font_color = options.ID(1)(3) ; //@@
+
+      //@@ compute bbox
+      rectstr = stringbox(ident, rect(1,1), rect(1,2), 0,...
+                       options.ID(1)(1), options.ID(1)(2));
+      w=(rectstr(1,3)-rectstr(1,2)) * %zoom;
+      h=(rectstr(2,2)-rectstr(2,4)) * %zoom;
+
+      //@@ fill ident in a box
+      xstringb(orig(1) + sz(1) / 2 - w / 2, rect(1,2) - (h*1.1) , ident , w, h,'fill') ;
+
+      //@@ set visible
+      if gh_curwin.children.children(1).type == 'Text' then
+        if options.ID(1)(4)==0 then
+          gh_curwin.children.children(1).visible="off"
+        else
+          gh_curwin.children.children(1).visible="on"
+        end
+      else //@@compound
+        for i=1:size(gh_curwin.children.children(1).children,1)
+          if options.ID(1)(4)==0 then
+            gh_curwin.children.children(1).children(i).visible="off"
+          else
+            gh_curwin.children.children(1).children(i).visible="on"
+          end
+        end
+      end
 
-  if With3D & frame then
-    orig = orig + e ;
-    sz   = sz - e   ;
-  end
+      //** Restore font state
+      gh_axes.font_style = axes_font_style ;
+      gh_axes.font_size  = axes_font_size  ;
+      gh_axes.font_color = axes_font_color ; //** optional
 
-  //** Check of the graphics object has generated any error
-  if execstr(gr_i,'errcatch','n')<>0 then
-    message(['Error in Icon defintion'; lasterror()])
   end
+//** --------------------------- Identification End --------------------------------------------------------------
 
 endfunction
-
index 709d76e..ad13c4b 100644 (file)
@@ -21,6 +21,7 @@
 
 function r=validvar(s)
 //Serge Steer, 08/10/2007
+//Alan restricted validvar for operation, 29/03/08
 
   //check if the string s is a valid identifier
     s=stripblanks(s)
@@ -38,7 +39,8 @@ function r=validvar(s)
     if instr.lhs(1).name<>'ans' then return,end
 
     //expression should be just a reference to s
-    if instr.expression.operator<>'ext'  then return,end
+    if typeof(instr.expression)<>'operation' then return, end
+    if instr.expression.operator<>'ext' then return,end
     if size(instr.expression.operands)<>1 then return,end
     if instr.expression.operands(1).name<>s  then return,end
 
index 8d8f7f7..cf3cafe 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=CLKGotoTagVisibility(job,arg1,arg2)
+function [x,y,typ] = CLKGotoTagVisibility(job,arg1,arg2)
   x=[];y=[],typ=[]
   select job
    case 'plot' then
@@ -65,18 +65,29 @@ function [x,y,typ]=CLKGotoTagVisibility(job,arg1,arg2)
    exprs='A'
    gr_i=['xstringb(orig(1),orig(2),[''{''+arg1.graphics.exprs(1)+''}''],sz(1),sz(2),''fill'');';
          'wd=xget(''wdim'').*[1.016,1.12];';
-              'thick=xget(''thickness'');xset(''thickness'',2);';
-              'p=wd(2)/wd(1);p=1;';
-              'xarcs([orig(1)+0.05*sz(1);';
-              'orig(2)+0.95*sz(2);';
-                 '0.9*sz(1)*p;';
-                 '0.9*sz(2);';
-                 '0;';
-              '360*64],scs_color(5));';
-              'xset(''thickness'',thick)']
- //        'g=gca();'
-    //     'g.children.font_foreground=5']
+         'thick=xget(''thickness'');xset(''thickness'',2);';
+         'p=wd(2)/wd(1);p=1;';
+         'xarcs([orig(1)+0.05*sz(1);';
+         'orig(2)+0.95*sz(2);';
+         '0.9*sz(1)*p;';
+         '0.9*sz(2);';
+         '0;';
+         '360*64],scs_color(5));';
+         'txt=[''Goto Tag'';''Visibility'' ];'
+         'style=5;'
+         'gh_axes = gca();'
+         'axes_font_style = gh_axes.font_style ;'
+         'axes_font_size  = gh_axes.font_size  ;'
+         'gh_axes.font_style = 5;'
+         'gh_axes.font_size  = 1;'
+         'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+         'if ~exists(''%zoom'') then %zoom=1, end;'
+         'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+         'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+         'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-5,txt,w,h,''fill'');'
+         'gh_axes.font_style = axes_font_style ;'
+         'gh_axes.font_size  = axes_font_size  ;'
+         'xset(''thickness'',thick)']
    x=standard_define([2 2],model,exprs,gr_i)
-   x.graphics.id=["Goto Tag";"Visibility"]
   end
 endfunction
\ No newline at end of file
index 2ab5fca..6b543da 100644 (file)
@@ -72,10 +72,17 @@ function [x,y,typ]=DEMUX(job,arg1,arg2)
     model.blocktype='c'
     model.firing=[]
     model.dep_ut=[%t %f]
-    
+
     exprs=string(out)
-    gr_i=''  //'xstringb(orig(1),orig(2),''Demux'',sz(1),sz(2),''fill'')'
+    gr_i=['txt=''Demux'';'
+          'style=5;'
+          'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+          'if ~exists(''%zoom'') then %zoom=1, end;'
+          'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+          'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+          'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+          'e=gce();'
+          'e.font_style=style;']
     x=standard_define([.5 2],model,exprs,gr_i)
-    x.graphics.id="Demux"
   end
 endfunction
index a6756d7..4c6364b 100644 (file)
@@ -63,8 +63,21 @@ function [x,y,typ]=GotoTagVisibility(job,arg1,arg2)
    model.firing=%f
    model.dep_ut=[%f %f]
    exprs='A'
-   gr_i=['xstringb(orig(1),orig(2),[''{''+arg1.graphics.exprs(1)+''}''],sz(1),sz(2),''fill'');']
+   gr_i=['xstringb(orig(1),orig(2),[''{''+arg1.graphics.exprs(1)+''}''],sz(1),sz(2),''fill'');'
+         'txt=[''Goto Tag'';''Visibility'' ];'
+         'style=5;'
+         'gh_axes = gca();'
+         'axes_font_style = gh_axes.font_style ;'
+         'axes_font_size  = gh_axes.font_size  ;'
+         'gh_axes.font_style = 5;'
+         'gh_axes.font_size  = 1;'
+         'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+         'if ~exists(''%zoom'') then %zoom=1, end;'
+         'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+         'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+         'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-5,txt,w,h,''fill'');'
+         'gh_axes.font_style = axes_font_style ;'
+         'gh_axes.font_size  = axes_font_size  ;']
    x=standard_define([2 2],model,exprs,gr_i)
-   x.graphics.id=["Goto Tag";"Visibility"]
   end
-endfunction
\ No newline at end of file
+endfunction
index d38179e..103b645 100644 (file)
@@ -65,18 +65,29 @@ function [x,y,typ]=GotoTagVisibilityMO(job,arg1,arg2)
    exprs='A'
    gr_i=['xstringb(orig(1),orig(2),[''{''+arg1.graphics.exprs(1)+''}''],sz(1),sz(2),''fill'');';
          'wd=xget(''wdim'').*[1.016,1.12];';
-              'thick=xget(''thickness'');xset(''thickness'',2);';
-              'p=wd(2)/wd(1);p=1;';
-              'xarcs([orig(1)+0.05*sz(1);';
-              'orig(2)+0.95*sz(2);';
-                 '0.9*sz(1)*p;';
-                 '0.9*sz(2);';
-                 '0;';
-              '360*64],scs_color(3));';
-              'xset(''thickness'',thick)']
- //        'g=gca();'
-    //     'g.children.font_foreground=5']
+         'thick=xget(''thickness'');xset(''thickness'',2);';
+         'p=wd(2)/wd(1);p=1;';
+         'xarcs([orig(1)+0.05*sz(1);';
+         'orig(2)+0.95*sz(2);';
+         '0.9*sz(1)*p;';
+         '0.9*sz(2);';
+         '0;';
+         '360*64],scs_color(3));';
+         'txt=[''Goto Tag'';''Visibility'' ];'
+         'style=5;'
+         'gh_axes = gca();'
+         'axes_font_style = gh_axes.font_style ;'
+         'axes_font_size  = gh_axes.font_size  ;'
+         'gh_axes.font_style = 5;'
+         'gh_axes.font_size  = 1;'
+         'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+         'if ~exists(''%zoom'') then %zoom=1, end;'
+         'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+         'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+         'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-5,txt,w,h,''fill'');'
+         'gh_axes.font_style = axes_font_style ;'
+         'gh_axes.font_size  = axes_font_size  ;'
+         'xset(''thickness'',thick)']
    x=standard_define([2 2],model,exprs,gr_i)
-   x.graphics.id=["Goto Tag";"Visibility"]
   end
-endfunction
\ No newline at end of file
+endfunction
index 06f4776..bfa637f 100644 (file)
@@ -73,8 +73,15 @@ case 'set' then
   model.dep_ut=[%t %f]
 
   exprs=string(in)
-  gr_i=' ' //'xstringb(orig(1),orig(2),''Mux'',sz(1),sz(2),''fill'')'
+  gr_i=['txt=''Mux'';'
+        'style=5;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();'
+        'e.font_style=style;']
   x=standard_define([.5 2],model,exprs,gr_i)
-  x.graphics.id="Mux"
 end
 endfunction
index 70a3c92..8c97d07 100644 (file)
@@ -41,14 +41,23 @@ case 'set' then
        list('vec',1,'vec',1,'vec',1),exprs)
     if ~ok then break,end
     nin=int(nin);base=int(base);
-    if nin<2 then
-      message('Number of inputs must be >=2 ')
+    if nin<1 then
+      message('Number of inputs must be >=1 ')
      elseif ~((base==1)|(base==0)) then
       message('base indexing must be 1 or 0')
     elseif ~((rule==1)|(rule==0)|(rule==2)|(rule==3)) then
       message('incorrect rounding rule')
     else
-      [model,graphics,ok]=check_io(model,graphics,[1;-ones(nin,1)],-1,[],[])
+      if nin==1 then
+       in=[1 1;-1 1];out=[1 1];
+      else
+       in1=[1;-ones(nin,1)];in2=[1;-2*ones(nin,1)];
+       in=[in1 in2];out=[-1 -2];
+      end
+      it=[-1;-2*ones(nin,1)];
+      ot=-2;
+      [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
+      //[model,graphics,ok]=check_io(model,graphics,[1;-ones(nin,1)],-1,[],[])
       if ok then
        graphics.exprs=exprs;
        model.ipar=[base;rule],
index 3c7f449..82a0d58 100644 (file)
@@ -41,7 +41,7 @@ case 'set' then
     if ~ok then break,end
     if z0>nin|z0<=0 then
       message('initial connected input is not a valid input port number')
-    elseif ((typ<1)|(typ>8)) message("Datatype is not supported");ok=%f;
+    elseif ((typ<1)|(typ>8))& (typ<>-1) message("Datatype is not supported");ok=%f;
     else
       it=typ*ones(1,nin)
       ot=typ
index 25a34c6..1b849e6 100644 (file)
@@ -53,7 +53,7 @@ function [x,y,typ]=SWITCH2_m(job,arg1,arg2)
        model.nmode=0
        model.nzcross=0
       end
-      if ((ot<1)|(ot>8)) message("Datatype is not supported");ok=%f;end
+      if ((ot<1)|(ot>8))&(ot<>-1) message("Datatype is not supported");ok=%f;end
       if ok then
        it(1)=ot;
        it(2)=1;
index 2ddbe62..ecb837b 100644 (file)
@@ -80,8 +80,15 @@ case 'define' then
        '  xstring(orig(1)+sz(1)*1/12,orig(2)+sz(2)*3/4,''-'');';
        '  xstring(orig(1)+sz(1)*7/8,orig(2)+sz(2)*3/4,''+'');';
        'end'
-       'rect=xstringl(0,0,''C=''+C)'
-        'xstring(orig(1)+(sz(1)-rect(3))/2,orig(2)-rect(4)*1.2,''C= ''+C);'
+        'txt=''C= ''+C;'
+        'style=2;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();'
+        'e.font_style=style;'
        ];
   x=standard_define([2 1.1],model,exprs,list(gr_i,0))
   x.graphics.in_implicit=['I']
index 603db57..c387daf 100644 (file)
@@ -20,6 +20,7 @@
 //
 
 function [x,y,typ]=Inductor(job,arg1,arg2)
+// Copyright INRIA
 x=[];y=[];typ=[];
 select job
   case 'plot' then
@@ -63,15 +64,21 @@ case 'define' then
   exprs=string(L)
 
   gr_i=['tt=linspace(0.04,0.96,100)'';'
-       'xpoly(tt*sz(1)+orig(1),+orig(2)+abs(sin(18*(tt-0.04)))*sz(2),""lines"");';
-       'xx=orig(1)+[0 0.04 0.04 0.04 0]*sz(1);';
-       'yy=orig(2)+[1/2 1/2 0  1/2 1/2]*sz(2);';
-       'xpoly(xx,yy) ';
-       'xx=orig(1)+[0.96 0.96 1   0.96 0.96 ]*sz(1);';
-       'yy=orig(2)+[abs(sin(18*0.92))   1/2   1/2 1/2 abs(sin(18*0.92))]*sz(2);';
-       'xpoly(xx,yy) ';
-       'rect=xstringl(0,0,''L=''+L)'
-       'xstring(orig(1)+(sz(1)-rect(3))/2,orig(2)-rect(4)*1.2,''L=''+L)' ] 
+        'xpoly(tt*sz(1)+orig(1),+orig(2)+abs(sin(18*(tt-0.04)))*sz(2),""lines"");';
+        'xx=orig(1)+[0 0.04 0.04 0.04 0]*sz(1);';
+        'yy=orig(2)+[1/2 1/2 0  1/2 1/2]*sz(2);';
+        'xpoly(xx,yy) ';
+        'xx=orig(1)+[0.96 0.96 1   0.96 0.96 ]*sz(1);';
+        'yy=orig(2)+[abs(sin(18*0.92))   1/2   1/2 1/2 abs(sin(18*0.92))]*sz(2);';
+        'xpoly(xx,yy) ';
+        'txt=''L= ''+L;'
+        'style=2;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();']
  
   x=standard_define([2 0.9],model,exprs,list(gr_i,0))
   x.graphics.in_implicit=['I']
index 034624f..084da2d 100644 (file)
@@ -78,8 +78,15 @@ case 'define' then
     'end';
     'yy=orig(2)+[35,35,12,24,24,24,48,48,48,60,35,35]*(sz(2)/70);';
     'xpoly(xx,yy);';
-    'xstring(orig(1)+13*(sz(1)/32),orig(2)+30*(sz(2)/70),''OP'');';
-       ''];
+    'txt=''OP'';'
+    'style=2;'
+    'rectstr=stringbox(txt,orig(1)+13*(sz(1)/32),orig(2)+30*(sz(2)/70),0,style,0);'
+    'if ~exists(''%zoom'') then %zoom=1, end;'
+    'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+    'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+    'xstringb(orig(1)+13*(sz(1)/32),orig(2)+30*(sz(2)/70),txt,w,h,''fill'');'
+    'e=gce();'
+    'e.font_style=style;']
   x=standard_define([2 2],model,exprs,gr_i)
   x.graphics.in_implicit=['I';'I']
   x.graphics.out_implicit=['I']
index 9b44f87..164143e 100644 (file)
@@ -65,11 +65,17 @@ case 'define' then
   model.in=ones(size(mo.inputs,'*'),1)
   model.out=ones(size(mo.outputs,'*'),1)
   exprs=string(R)
-  gr_i=[ 'xx=[0,1,1,7,7,8,7,7,1,1]/8;';
-        'yy=[1,1,0,0,1,1,1,2,2,1]/2;';
-        'xpoly(orig(1)+xx*sz(1),orig(2)+yy*sz(2)); '
-        'rect=xstringl(0,0,''R=''+R)'
-        'xstring(orig(1)+(sz(1)-rect(3))/2,orig(2)-rect(4)*1.2,''R=''+R);']  
+  gr_i=['xx=[0,1,1,7,7,8,7,7,1,1]/8;';
+        'yy=[1,1,0,0,1,1,1,2,2,1]/2;';
+        'xpoly(orig(1)+xx*sz(1),orig(2)+yy*sz(2)); '
+        'txt=''R= ''+R;'
+        'style=2;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();']
   x=standard_define([2 0.18],model,exprs,list(gr_i,0))
   x.graphics.in_implicit=['I']
   x.graphics.out_implicit=['I']
index 00bf06e..d3495a4 100644 (file)
@@ -39,10 +39,11 @@ case 'set' then
   while %t do
     [ok,inh,nmod,exprs]=getvalue('Set parameters',..
        ['Inherit (1: no, 0: yes)';'zero-crossing (0: no, 1: yes)'],..
-                                list('vec',1,'vec',1),exprs)
+       list('vec',1,'vec',1),exprs)
     if ~ok then break,end
+    model.dep_ut=[%t %f];  //compatibility
     if nmod<>0 then nmod=1,end
-    if inh==0 then inh=[]; else inh=1;end
+    if inh<>1 then inh=[]; end
     [model,graphics,ok]=check_io(model,graphics,1,[],inh,[1;1])
       if ok then
        graphics.exprs=exprs;
index 6ed5386..74694c9 100644 (file)
@@ -47,57 +47,9 @@ case 'set' then
       message("The |Offset| must be less than the Frequency");ok=%f
     end
     if ok then
-      v=[frequ;offset];
-      v=v(find(v<>0));
-      min_v=min(v);max_v=max(v);
-      if (max_v/min_v)>1e5 then message(['The difference between the frequencies is very large';..
-             'the clocks could not be synchronized']);
-        ok=%f;
-       return; 
-      end
-      [pgcd,den]=fixedpointgcd(v);
-      off=0;
-      [m1,k]=uni(frequ,offset);
-      frd=m1.*(den)
-      frequ=frequ(k);
-      frd1=round((frequ.*(den)));
-      frd1=uint32(frd1);
-      ppcm=lcm(frd1);
-      frd1=double(frd1);
-      frd=double(frd);
-      offset=offset(k);
-      mat=[];
-      for i=1:size(frd,'*')
-       mat1=[offset(i)*double(den):frd1(i):double(ppcm)]';
-       mat=[mat;[mat1 2^(i-1)*ones(size(mat1,'*'),1)]];
-      end
-      [n,k]=gsort(mat(:,1),'g','i');
-      mat=mat(k,:);
-      if size(mat,1)>1 then
-       while (find(mat(1:$-1,1)==mat(2:$,1))<>[]) then
-         ind=find(mat(1:$-1,1)==mat(2:$,1));
-         ind=ind(1);
-         mat(ind,2)=mat(ind,2)+mat(ind+1,2);
-         mat(ind+1,:)=[];
-       end
-       m=[mat(2,1);mat(2:$,1)-mat(1:$-1,1)];
-       m=[m,mat(:,2),mat(:,1)];
-       count=1;
-       if find(m(:,3)==0)<>[] then
-         m(find(m(:,3)==0),:)=[];
-         count=0;
-       end
-       mn=(2**size(m1,'*'))-1;
-       fir=-ones(1,mn);
-       fir(mat(1,2))=mat(1,1)/double(den);
-      else
-       m=[frd1 1 frd1];
-       mat=m;
-       count=0;
-       off=offset;
-       fir=off;
-      end
-      if or(model.rpar(:)<>[frequ;offset]) then needcompile=4;y=needcompile,end
+      [m,den,off,count,m1,fir,frequ,offset,ok]=mfrequ_clk(frequ,offset);
+    end
+    if ok then
       model.opar=list(m,double(den),off,count)
       mn=(2**size(m1,'*'))-1;
       [model,graphics,ok]=set_io(model,graphics,list(),list(),1,ones(mn,1))
@@ -111,7 +63,6 @@ case 'set' then
       break
     end
   end
-  needcompile=resume(needcompile)
 case 'define' then
   model=scicos_model()
    model.sim=list('m_frequ',4)
@@ -122,48 +73,34 @@ case 'define' then
   model.blocktype='d'
   model.firing=[0 -1 -1]
   model.dep_ut=[%f %f]
-
   exprs=[sci2exp([1;2]);sci2exp([0;0])]
-     gr_i=[
-//            'a=evstr(arg1.graphics.exprs(1))';
-//            '[x,y,typ]=standard_outputs(arg1) ';
-//            'xx=[x,orig(1)+sz(1)]';
-//            'for i=1:size(a,''*'')';
-//        'xstringb(x(2^(i-1))-sz(1)/16,orig(2)+sz(2)/32,string(a(i)),xx(2**(i-1)+1)-xx(2**(i-1)),sz(2)/16)';
-//            'end';
-           'xstringb(orig(1),orig(2),[''      Multiple    '';''    Frequency    ''],sz(1),sz(2));']
+     gr_i=['xstringb(orig(1),orig(2),[''      Multiple    '';''    Frequency    ''],sz(1),sz(2),''fill'');']
   x=standard_define([2.5 2],model,exprs,gr_i)
 end
 endfunction
-
-function [value,denom_com]=fixedpointgcd(v)
-x=log10(v);
-f=round((min(x)+max(x))/2);
-v=v./10^(f);
-[N,D]=rat(v,1d-5);
-denom_com=lcm(uint32(D));
-N=uint32(N)*denom_com./uint32(D);
-value=gcd(N);
-if f>0 then value=value*10^f;
-else denom_com=double(denom_com)*10^(-f);
-end
-endfunction
-
 function [m,k]=uni(fr,of)
 k=[];
 m=[];
+ot=[];
 for i=1:size(fr,'*')
+     istreated=%f;
      ind=find(m==fr(i));
      if ind==[] then
          m=[m;fr(i)];
+         ot=[ot;of(i)];
          k=[k;i];
      else
          for j=ind
-              if of(i)<> of(j) then
-                 m=[m;fr(i)];
-                 k=[k;i];
-              end
+           if of(i)==ot(j) then
+              istreated=%t
+            end
+         end
+         if ~istreated then
+            m=[m;fr(i)];
+           ot=[ot;of(i)]
+            k=[k;i];
          end
       end
 end
-endfunction 
+endfunction
index 2d372f8..e50c0cf 100644 (file)
@@ -20,6 +20,7 @@
 //
 
 function [x,y,typ]=DFLIPFLOP(job,arg1,arg2)
+// Copyright INRIA
   x=[];y=[],typ=[]
   select job
    case 'plot' then
@@ -1778,15 +1779,43 @@ function [x,y,typ]=DFLIPFLOP(job,arg1,arg2)
        model.firing=%f
        model.dep_ut=[%t %f]
        model.rpar=scs_m
-       gr_i=['[x,y,typ]=standard_inputs(o) ';
-         'dd=sz(1)/8,de=6*sz(1)/8';
-         'xstring(orig(1)+dd,y(1)-4,''D'')';
-         'xstring(orig(1)+dd,y(2)-4,''clk'')';
-         'xstring(orig(1)+dd,y(3)-4,''en'')';
-         '[x,y,typ]=standard_outputs(o) ';
-         'xstring(orig(1)+de,y(1)-4,''Q'')';
-         'xstring(orig(1)+5*dd,y(2)-4,''!Q'')']
+        gr_i=['[x,y,typ]=standard_inputs(o) ';
+              'dd=sz(1)/8,de=5.5*sz(1)/8';
+              'if ~exists(''%zoom'') then %zoom=1, end;'
+              'txt=''D'';'
+              'rectstr=stringbox(txt,orig(1)+dd,y(1)-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(1)-4,txt,w,h,''fill'')';
+              'txt=''clk'';'
+              'rectstr=stringbox(txt,orig(1)+dd,y(2)-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(2)-4,txt,w,h,''fill'')';
+              'txt=''en'';'
+              'rectstr=stringbox(txt,orig(1)+dd,y(3)-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(3)-4,txt,w,h,''fill'')';
+              '[x,y,typ]=standard_outputs(o) ';
+              'txt=''Q'';'
+              'rectstr=stringbox(txt,orig(1)+de,y(1)-4,0,1,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+de,y(1)-4,txt,w,h,''fill'')';
+              'txt=''!Q'';'
+              'rectstr=stringbox(txt,orig(1)+4.5*dd,y(2)-4,0,1,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+4.5*dd,y(2)-4,txt,w,h,''fill'')';
+              'txt=''D FLIP-FLOP'';'
+              'style=5;'
+              'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+              'e=gce();'
+              'e.font_style=style;']
        x=standard_define([2 3],model,[],gr_i)
-       x.graphics.id="D FLIP-FLOP"
   end
-endfunction
\ No newline at end of file
+endfunction
index f25b03f..f2e7d29 100644 (file)
@@ -181,7 +181,7 @@ scs_m.objs(4)=scicos_block(..
                        sz=[40,40],..
                        flip=%t,..
                        theta=0,..
-                       exprs="1",..
+                       exprs="5",..
                        pin=5,..
                        pout=9,..
                        pein=6,..
@@ -541,12 +541,36 @@ scs_m.objs(19)=scicos_link(..
     model.dep_ut=[%t %f]
     model.rpar=scs_m
     gr_i=['[x,y,typ]=standard_inputs(o) ';
-         'dd=sz(1)/8,de=6*sz(1)/8';
-         'xstring(orig(1)+dd,y(1)-4,''D'')';
-         'xstring(orig(1)+dd,y(2)-4,''C'')';
-         'xstring(orig(1)+de,y(1)-4,''Q'')';
-         'xstring(orig(1)+5*dd,y(2)-4,''!Q'')']
+          'dd=sz(1)/8,de=5.5*sz(1)/8';
+          'txt=''D'';'
+          'if ~exists(''%zoom'') then %zoom=1, end;'
+          'rectstr=stringbox(txt,orig(1)+dd,y(1)-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(1)-4,txt,w,h,''fill'')';
+          'txt=''C'';'
+          'rectstr=stringbox(txt,orig(1)+dd,y(2)-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(2)-4,txt,w,h,''fill'')';
+          'txt=''Q'';'
+          'rectstr=stringbox(txt,orig(1)+de,y(1)-4,0,1,1);'
+          'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+          'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+          'xstringb(orig(1)+de,y(1)-4,txt,w,h,''fill'')';
+          'txt=''!Q'';'
+          'rectstr=stringbox(txt,orig(1)+4.5*dd,y(2)-4,0,1,1);'
+          'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+          'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+          'xstringb(orig(1)+4.5*dd,y(2)-4,txt,w,h,''fill'')';
+          'txt=''DLATCH'';'
+          'style=5;'
+          'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+          'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+          'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+          'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+          'e=gce();'
+          'e.font_style=style;']
     x=standard_define([2 3],model,[],gr_i)
-    x.graphics.id="DLATCH"
   end
 endfunction
index 2efc534..445d37b 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=JKFLIPFLOP(job,arg1,arg2)
+function [x,y,typ] = JKFLIPFLOP(job,arg1,arg2)
   x=[];y=[],typ=[]
   select job
    case 'plot' then
@@ -821,15 +821,43 @@ function [x,y,typ]=JKFLIPFLOP(job,arg1,arg2)
        model.dep_ut=[%t %f]
        model.rpar=scs_m
        gr_i=['[x,y,typ]=standard_inputs(o) ';
-         'dd=sz(1)/8,de=6*sz(1)/8';
-         'xstring(orig(1)+dd,y(1)-4,''J'')';
-         'xstring(orig(1)+dd,y(2)-4,''clk'')';
-         'xstring(orig(1)+dd,y(3)-4,''K'')';
-         '[x,y,typ]=standard_outputs(o) ';
-         'xstring(orig(1)+de,y(1)-4,''Q'')';
-         'xstring(orig(1)+5*dd,y(2)-4,''!Q'')']
+              'dd=sz(1)/8,de=5.5*sz(1)/8';
+              'txt=''J'';'
+              'if ~exists(''%zoom'') then %zoom=1, end;'
+              'rectstr=stringbox(txt,orig(1)+dd,y(1)-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(1)-4,txt,w,h,''fill'')';
+              'txt=''clk'';'
+              'rectstr=stringbox(txt,orig(1)+dd,y(2)-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(2)-4,txt,w,h,''fill'')';
+              'txt=''K'';'
+              'rectstr=stringbox(txt,orig(1)+dd,y(3)-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(3)-4,txt,w,h,''fill'')';
+              '[x,y,typ]=standard_outputs(o) ';
+              'txt=''Q'';'
+              'rectstr=stringbox(txt,orig(1)+de,y(1)-4,0,1,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+de,y(1)-4,txt,w,h,''fill'')';
+              'txt=''!Q'';'
+              'rectstr=stringbox(txt,orig(1)+4.5*dd,y(2)-4,0,1,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+4.5*dd,y(2)-4,txt,w,h,''fill'')';
+              'txt=''JK FLIP-FLOP'';'
+              'style=5;'
+              'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+              'e=gce();'
+              'e.font_style=style;']
        x=standard_define([2 3],model,[],gr_i)
-       x.graphics.id="JK FLIP-FLOP"
   end
 endfunction
 
index 0954a3c..3ca5728 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=SRFLIPFLOP(job,arg1,arg2)
+function [x,y,typ] = SRFLIPFLOP(job,arg1,arg2)
   x=[];y=[],typ=[]
   select job
    case 'plot' then
@@ -436,13 +436,37 @@ function [x,y,typ]=SRFLIPFLOP(job,arg1,arg2)
        model.dep_ut=[%t %f]
        model.rpar=scs_m
        gr_i=['[x,y,typ]=standard_inputs(o) ';
-         'dd=sz(1)/8,de=6*sz(1)/8';
-         'xstring(orig(1)+dd,y(1)-4,''S'')';
-         'xstring(orig(1)+dd,y(2)-4,''R'')';
-         '[x,y,typ]=standard_outputs(o) ';
-         'xstring(orig(1)+de,y(1)-4,''Q'')';
-         'xstring(orig(1)+5*dd,y(2)-4,''!Q'')']
+              'dd=sz(1)/8,de=5.5*sz(1)/8';
+              'txt=''S'';'
+              'if ~exists(''%zoom'') then %zoom=1, end;'
+              'rectstr=stringbox(txt,orig(1)+dd,y(1)-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(1)-4,txt,w,h,''fill'')';
+              'txt=''R'';'
+              'rectstr=stringbox(txt,orig(1)+dd,y(2)-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(2)-4,txt,w,h,''fill'')';
+              '[x,y,typ]=standard_outputs(o) ';
+              'txt=''Q'';'
+              'rectstr=stringbox(txt,orig(1)+de,y(1)-4,0,1,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+de,y(1)-4,txt,w,h,''fill'')';
+              'txt=''!Q'';'
+              'rectstr=stringbox(txt,orig(1)+4.5*dd,y(2)-4,0,1,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+4.5*dd,y(2)-4,txt,w,h,''fill'')';
+              'txt=''SR FLIP-FLOP'';'
+              'style=5;'
+              'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+              'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+              'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+              'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+              'e=gce();'
+              'e.font_style=style;']
        x=standard_define([2 3],model,[],gr_i)
-       x.graphics.id="SR FLIP-FLOP"
   end
 endfunction
\ No newline at end of file
index 6be8a24..a8cc2e3 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=CLR(job,arg1,arg2)
+function [x,y,typ] = CLR(job,arg1,arg2)
 x=[];y=[];typ=[]
 select job
 case 'plot' then
@@ -37,6 +37,7 @@ case 'set' then
   x0=model.state
   rpar=model.rpar
   ns=prod(size(x0));nin=1;nout=1
+  %scicos_context;
   %scicos_context.s=%s
   while %t do
     [ok,num,den,exprs]=getvalue('Set continuous SISO transfer parameters',..
index 9a1c544..db6ee81 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=CLR_f(job,arg1,arg2)
+function [x,y,typ] = CLR_f(job,arg1,arg2)
 x=[];y=[];typ=[]
 select job
 case 'plot' then
@@ -37,6 +37,7 @@ case 'set' then
   x0=model.state
   rpar=model.rpar
   ns=prod(size(x0));nin=1;nout=1
+  %scicos_context;
   %scicos_context.s=%s
   while %t do
     [ok,num,den,exprs]=getvalue('Set continuous SISO transfer parameters',..
index 6661406..c3b1a0f 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=DERIV(job,arg1,arg2)
+function [x,y,typ] = DERIV(job,arg1,arg2)
 x=[];y=[];typ=[]
 select job
 case 'plot' then
@@ -41,9 +41,18 @@ case 'define' then
   model.dep_ut=[%t %f]
   
   exprs=[]
-  gr_i=['xstringb(orig(1),orig(2),''  du/dt  '',sz(1),sz(2),''fill'');']
+  gr_i=['xstringb(orig(1),orig(2),'' du/dt   '',sz(1),sz(2),''fill'');'
+        'txt=''s'';'
+        'style=5;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();'
+        'e.font_style=style;']
   x=standard_define([2 2],model,exprs,gr_i)
-  x.graphics.id='s'
 end
 endfunction
 
+
index 5b313e4..7d2d1fb 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=DLR(job,arg1,arg2)
+function [x,y,typ] = DLR(job,arg1,arg2)
 x=[];y=[];typ=[]
 select job
 case 'plot' then
@@ -35,7 +35,8 @@ case 'set' then
   graphics=arg1.graphics;exprs=graphics.exprs
   model=arg1.model;
   x0=model.dstate;ns=prod(size(x0));
-    %scicos_context.z=%z
+  %scicos_context;
+  %scicos_context.z=%z
   while %t do
     [ok,num,den,exprs]=getvalue('Set discrete SISO transfer parameters',..
        ['Numerator (z)';
index a8554e1..e9b0e90 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=DLR_f(job,arg1,arg2)
+function [x,y,typ] = DLR_f(job,arg1,arg2)
 x=[];y=[];typ=[]
 select job
 case 'plot' then
@@ -35,6 +35,7 @@ case 'set' then
   graphics=arg1.graphics;exprs=graphics.exprs
   model=arg1.model;
   x0=model.dstate;ns=prod(size(x0));
+  %scicos_context
   %scicos_context.z=%z
   while %t do
     [ok,num,den,exprs]=getvalue('Set discrete SISO transfer parameters',..
index ebb8b2d..6feb6c0 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=GAINBLK(job,arg1,arg2)
+function [x,y,typ] = GAINBLK(job,arg1,arg2)
   
   x=[];y=[];typ=[];
   
@@ -31,23 +31,27 @@ function [x,y,typ]=GAINBLK(job,arg1,arg2)
     orig=arg1.graphics.orig;
     sz=arg1.graphics.sz;
     orient=arg1.graphics.flip;
-    if length(arg1.graphics.exprs(1))>3 then
-       gain="-K-"
+
+    if length(arg1.graphics.exprs(1))>6 then
+       gain=part(arg1.graphics.exprs(1),1:4)+'..'
     else 
        gain=arg1.graphics.exprs(1);
     end
+    ll=length(arg1.graphics.exprs(1))
+    a=ll/(1+ll)/2
 //     gain=evstr(arg1.graphics.exprs(1));
 //     if size(gain,'*')==1 then gain=string(gain);
 //     else gain="-K-";
 //     end
     if orient then
+      
       xx=orig(1)+[0 1 0 0]*sz(1);
       yy=orig(2)+[0 1/2 1 0]*sz(2);
       x1=0
     else
       xx=orig(1)+[0   1 1 0]*sz(1);
       yy=orig(2)+[1/2 0 1 1/2]*sz(2);
-      x1=1/4
+      x1=1-2*a
     end
     gr_i=arg1.graphics.gr_i;
     if type(gr_i)==15 then
@@ -57,14 +61,14 @@ function [x,y,typ]=GAINBLK(job,arg1,arg2)
 //     pcoli=xget('pattern');xset('pattern',coli)
 //     xstringb(orig(1)+x1*sz(1),orig(2),gain,(1-x1)*sz(1),sz(2));
 //     xset('pattern',pcoli)
-       xstringb(orig(1)+x1*sz(1),orig(2),gain,(1-x1)*sz(1),sz(2));
+       xstringb(orig(1)+(x1)*sz(1),orig(2)+sz(2)*a,gain,sz(1)*(2*a),sz(2)*(1-2*a),'fill');
       else
        xpoly(xx,yy,'lines');
-       xstringb(orig(1)+x1*sz(1),orig(2),gain,(1-x1)*sz(1),sz(2));
+       xstringb(orig(1)+(x1)*sz(1),orig(2)+sz(2)*a,gain,sz(1)*(2*a),sz(2)*(1-2*a),'fill');
       end
     else
       xpoly(xx,yy,'lines');
-      xstringb(orig(1)+x1*sz(1),orig(2),gain,(1-x1)*sz(1),sz(2));
+      xstringb(orig(1)+(x1)*sz(1),orig(2)+sz(2)*a,gain,sz(1)*(2*a),sz(2)*(1-2*a),'fill');
     end
     xf=60
     yf=40
index 25fbe3f..d51d095 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=INTEGRAL_m(job,arg1,arg2)
+function [x,y,typ] = INTEGRAL_m(job,arg1,arg2)
 x=[];y=[];typ=[];
 select job
 case 'plot' then
@@ -128,11 +128,19 @@ case 'define' then
         'pat=xget(''pattern'')'
         'fnt=xget(''font'')'
         'xpoly(orig(1)+[0.7;0.62;0.549;0.44;0.364;0.291]*sz(1),orig(2)+[0.947;0.947;0.884;0.321;0.255;0.255]*sz(2),"'lines"')'
+        'txt=''1/s'';'
+        'style=5;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();'
+        'e.font_style=style;'
         'xset(''thickness'',thick)'
         'xset(''pattern'',pat)'
         'xset(''font'',fnt(1),fnt(2))'
        ]
   x=standard_define([2 2],model,exprs,gr_i)
-  x.graphics.id="1/s"
 end
 endfunction
index 7bb62f4..6a4b091 100644 (file)
@@ -20,7 +20,6 @@
 //
 
 function [x,y,typ]=MATCATH(job,arg1,arg2)
-//
 x=[];y=[];typ=[];
 select job
 case 'plot' then
@@ -34,34 +33,24 @@ case 'getorigin' then
 case 'set' then
   x=arg1
   model=arg1.model;graphics=arg1.graphics;label=graphics.exprs
-  if size(label,'*')==14 then label(9)=[],end //compatiblity
+  if size(label,'*')>1 then //compatibility
+    label='size(evstr('+label(2)+'),''*'')';
+  end
   while %t do
-    [ok,typ,l1,lab]=..
+    [ok,nin,lab]=..
         getvalue('Set MATCATH block parameters',..
-        ['Datatype(1=real double  2=Complex)';
-        'number of columns of each matrix'],..
-         list('vec',1,'mat',[-1 1]),label)
+        ['Number of input'],..
+         list('vec',1),label);
     if ~ok then break,end
-    l1=l1(:);
-    if (typ==1) then
-       junction_name='mat_cath';
-       ot=1;
-       it=[ones(size(l1,1),1)'];
-    elseif (typ==2) then
-       junction_name='matz_cath';
-       ot=2;
-       it=[2*ones(size(l1,1),1)'];
-    else message("Datatype is not supported");ok=%f;
-    end
-    if ok then
-      label=lab
-      in=[-ones(size(l1,1),1) l1]
-      out=[-1,sum(l1)]
-      [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
-    end
+    label=lab
+    in=[-1*(ones(nin,1)) -([2:nin+1]')];
+    out=[-1 0]
+    it=-1*(ones(nin,1));
+    ot=-1;
+    [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
     if ok then
       funtyp=4;
-      model.sim=list(junction_name,funtyp)
+      model.sim=list('mat_cath',funtyp)
       graphics.exprs=label
       arg1.graphics=graphics
       arg1.model=model
@@ -70,7 +59,6 @@ case 'set' then
     end
   end
 case 'define' then
-  l1=[2;2]
   model=scicos_model()
   junction_name='mat_cath';
   funtyp=4;
@@ -78,9 +66,9 @@ case 'define' then
   model.in=[-1;-1]
   model.in2=[-2;-3]
   model.intyp=[1 1]
-  model.out=1
-  model.out2=1
-  model.outtyp=1
+  model.out=-1
+  model.out2=0
+  model.outtyp=-1
   model.evtin=[]
   model.evtout=[]
   model.state=[]
@@ -90,9 +78,8 @@ case 'define' then
   model.blocktype='c' 
   model.firing=[]
   model.dep_ut=[%t %f]
-  label=[sci2exp(1);sci2exp(l1)];
+  label=[sci2exp(2)];
   gr_i=['text=[''Horiz'';'' Cat''];';'xstringb(orig(1),orig(2),text,sz(1),sz(2),''fill'');']
   x=standard_define([2 3],model,label,gr_i)
 end
 endfunction
-
index 3cf314a..b624851 100644 (file)
@@ -19,8 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=MATCATV(job,arg1,arg2)
-//
+function [x,y,typ] = MATCATV(job,arg1,arg2)
 x=[];y=[];typ=[];
 select job
 case 'plot' then
@@ -34,34 +33,24 @@ case 'getorigin' then
 case 'set' then
   x=arg1
   model=arg1.model;graphics=arg1.graphics;label=graphics.exprs
-  if size(label,'*')==14 then label(9)=[],end //compatiblity
+  if size(label,'*')>1 then //compatibility
+    label='size(evstr('+label(2)+'),''*'')'; 
+  end
   while %t do
-    [ok,typ,l1,lab]=..
+    [ok,nin,lab]=..
         getvalue('Set MATCATV block parameters',..
-        ['Datatype(1=real double  2=Complex)';
-        'number of line of each matrix'],..
-         list('vec',1,'mat',[-1 1]),label)
+        ['Number od inputs'],..
+         list('vec',1),label)
     if ~ok then break,end
-    l1=l1(:);
-    if (typ==1) then
-       junction_name='mat_catv';
-       ot=1;
-       it=[ones(size(l1,1),1)'];
-    elseif (typ==2) then
-       junction_name='matz_catv';
-       ot=2;
-       it=[2*ones(size(l1,1),1)'];
-    else message("Datatype is not supported");ok=%f;
-    end
-    if ok then
-      label=lab
-      in=[l1 -ones(size(l1,1),1)]
-      out=[sum(l1),-1]
-      [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
-    end
+    label=lab
+    in=[-([2:nin+1]') -ones(nin,1)]
+    it= -ones(nin,1);
+    ot=-1;
+    out=[0 -1]
+    [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
     if ok then
       funtyp=4;
-      model.sim=list(junction_name,funtyp)
+      model.sim=list('mat_catv',funtyp)
       graphics.exprs=label
       arg1.graphics=graphics
       arg1.model=model
@@ -75,12 +64,12 @@ case 'define' then
   junction_name='mat_catv';
   funtyp=4;
   model.sim=list(junction_name,funtyp)
-  model.in=[-1;-1]
-  model.in2=[-2;-3]
-  model.intyp=[1 1]
-  model.out=1
-  model.out2=1
-  model.outtyp=1
+  model.in2=[-1;-1]
+  model.in=[-2;-3]
+  model.intyp=[-1 -1]
+  model.out=0
+  model.out2=-1
+  model.outtyp=-1
   model.evtin=[]
   model.evtout=[]
   model.state=[]
@@ -90,7 +79,7 @@ case 'define' then
   model.blocktype='c' 
   model.firing=[]
   model.dep_ut=[%t %f]
-  label=[sci2exp(1);sci2exp(l1)];
+  label=[sci2exp(2)];
   gr_i=['text=[''Vert'';'' Cat''];';'xstringb(orig(1),orig(2),text,sz(1),sz(2),''fill'');']
   x=standard_define([2 3],model,label,gr_i)
 end
index d91f785..12e3e0c 100644 (file)
@@ -19,8 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=MATMUL(job,arg1,arg2)
-//
+function [x,y,typ] = MATMUL(job,arg1,arg2)
 x=[];y=[];typ=[];
 select job
 case 'plot' then
@@ -33,45 +32,125 @@ case 'getorigin' then
   [x,y]=standard_origin(arg1)
 case 'set' then
   x=arg1
-  graphics=arg1.graphics;label=graphics.exprs
-  model=arg1.model;
+  graphics=x.graphics;label=graphics.exprs
+  model=x.model;
+  if model.ipar==[] then model.ipar=1;end
   if size(label,'*')==1 then label(2)=sci2exp(1),end //compatiblity
+  if size(label,'*')==2 then label(3)=sci2exp(1);end //compatibility
   while %t do
-    [ok,typ,rule,exprs]=getvalue('Set MATMUL Block',..
-           ['Datatype(1=real double 2=Complex)';
-            'Multiplication rule (1= * 2= .* )'],list('vec',1,'vec',1),label)
+    [ok,dtype,rule,np,exprs]=getvalue(['Set MATMUL parameter';
+                                 'For the Multipication rule:';
+                                 '    1= Matrix by Matrix';
+                                 '    2= Matrix by Matrix element wise ';
+                                 '    3= Matrix by Scalar';
+                                 'In the third case the second input will be the scalar'],..
+           ['Datatype(1=real double 2=Complex 3=int32 ...)';
+            'Multiplication rule';
+            'Do on Overflow(0=Nothing 1=Saturate 2=Error)'],list('vec',1,'vec',1,'vec',1),label)
     if ~ok then break,end
-    if (typ<>1&typ<>2) then message("type is not supported");ok=%f;end
-    if rule<>2 then rule=1;end
-    if ((typ==1)&(rule==1)) then
-       junction_name='matmul_m';
-    elseif ((typ==2)&(rule==1)) then
-       junction_name='matzmul_m';
-    elseif((typ==1)&(rule==2)) then
-       junction_name='matmul2_m';
-    elseif((typ==2)&(rule==2)) then
-       junction_name='matzmul2_m';
+    rule=int(rule)
+    if (dtype<1|dtype>8) then message("type is not supported");ok=%f;end
+    if (rule<1|rule>3) then message('Multiplication rule must be only 1,2 or 3');ok=%f;end
+    if (dtype==1|dtype==2) then np=0;end
+    TABMIN=[0;0;-(2^31);-(2^15);-(2^7);0;0;0]
+    TABMAX=[0;0;(2^31)-1;(2^15)-1;(2^7)-1;(2^32)-1;(2^16)-1;(2^8)-1]
+    if rule==2 then
+       if np==0 then
+         model.sim=list('matmul2_m',4)
+       elseif np==1 then
+         model.sim=list('matmul2_s',4)
+       else 
+        model.sim=list('matmul2_e',4)
+       end
+    elseif rule==3 then 
+       if np==0 then
+         model.sim=list('matbyscal',4)
+       elseif np==1 then
+         model.sim=list('matbyscal_s',4)
+       else 
+        model.sim=list('matbyscal_e',4)
+       end
+    else
+    if (dtype==1) then
+        model.sim=list('matmul_m',4);
+    elseif (dtype==2) then
+        model.sim=list('matzmul_m',4);
+    elseif dtype==3 then
+         if np==0 then
+             model.sim=list('matmul_i32n',4)
+         elseif np==1 then
+             model.sim=list('matmul_i32s',4)
+         else 
+            model.sim=list('matmul_i32e',4)
+         end
+    elseif dtype==4 then
+         if np==0 then
+             model.sim=list('matmul_i16n',4)
+         elseif np==1 then
+             model.sim=list('matmul_i16s',4)
+         else 
+            model.sim=list('matmul_i16e',4)
+         end
+    elseif dtype==5 then
+         if np==0 then
+             model.sim=list('matmul_i8n',4)
+         elseif np==1 then
+             model.sim=list('matmul_i8s',4)         
+         else 
+            model.sim=list('matmul_i8e',4)
+         end
+    elseif dtype==6 then
+          if np==0 then
+             model.sim=list('matmul_ui32n',4)
+          elseif np==1 then
+             model.sim=list('matmul_ui32s',4)
+          else 
+            model.sim=list('matmul_ui32e',4)
+          end
+    elseif dtype==7 then
+         if np==0 then
+             model.sim=list('matmul_ui16n',4)
+         elseif np==1 then
+             model.sim=list('matmul_ui16s',4)
+         else 
+            model.sim=list('matmul_ui16e',4)
+         end
+    elseif dtype==8 then
+         if np==0 then
+             model.sim=list('matmul_ui8n',4)
+         elseif np==1 then
+             model.sim=list('matmul_ui8s',4)
+         else 
+            model.sim=list('matmul_ui8e',4)
+         end
+    end
     end
-    it=typ*ones(1,2);
-    ot=typ
+    kmin=TABMIN(dtype);kmax=TABMAX(dtype)
+    it=dtype*ones(1,2);
+    ot=dtype
     if rule==1 then
-       in=[model.in model.in2];
-       out=[model.out model.out2];
-    else
+       in=[-1 -2;-2 -3];
+       out=[-1 -3];
+    elseif rule==2 then
        in=[-1 -2;-1 -2]
        out=[-1 -2]
+    else
+        in=[-1 -2;1 1]
+       out=[-1 -2]
     end
-    funtyp=4;
+    [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
     if ok then
+      //if model.ipar<>np then needcompile=1;end
       label=exprs;
-      [model,graphics,ok]=set_io(model,graphics,list(in,it),list(out,ot),[],[])
-      model.sim=list(junction_name,funtyp);
+      model.ipar=rule
+      model.rpar=[kmin;kmax]
       graphics.exprs=label;
-      arg1.graphics=graphics;arg1.model=model;
-      x=arg1
-      break
+      x.graphics=graphics;x.model=model;
+      arg1=x
+      break;
     end
   end
+   //needcompile=resume(needcompile)
 case 'define' then
   model=scicos_model()
   model.sim=list('matmul_m',4)
index 9e089fe..81473da 100644 (file)
 // See the file ../license.txt
 //
 
-function [x,y,typ] = CBLOCK(job,arg1,arg2)
-//
+function [x,y,typ]=CBLOCK(job,arg1,arg2)
 x=[];y=[];typ=[];
-
 select job
-
-case "plot" then
+case 'plot' then
   standard_draw(arg1)
-
-case "getinputs" then
+case 'getinputs' then
   [x,y,typ]=standard_inputs(arg1)
-
-case "getoutputs" then
+case 'getoutputs' then
   [x,y,typ]=standard_outputs(arg1)
-
-case "getorigin" then
+case 'getorigin' then
   [x,y]=standard_origin(arg1)
-
-case "set" then
-  x = arg1
-  model = arg1.model;
-  graphics = arg1.graphics;
-  label    = graphics.exprs;
-  
+case 'set' then
+  x=arg1
+ model=arg1.model;graphics=arg1.graphics;
+ label=graphics.exprs;
   while %t do
     [ok,junction_name,impli,i,o,ci,co,xx,ng,z,rpar,ipar,auto0,depu,dept,lab]=..
         getvalue('Set C-Block2 block parameters',..
         ['simulation function';
         'is block implicit? (y,n)';
-         'input ports sizes';
-         'output ports sizes';
-         'input event ports sizes';
-         'output events ports sizes';
-         'initial continuous state';
-        'number of zero crossing surfaces';
-         'initial discrete state';
-         'Real parameters vector';
-         'Integer parameters vector';      
-         'initial firing vector (<0 for no firing)';
-         'direct feedthrough (y or n)';                                       
-         'time dependence (y or n)'],..
+        'input ports sizes';
+        'output ports sizes';
+        'input event ports sizes';
+        'output events ports sizes';
+        'initial continuous state';
+       'number of zero crossing surfaces';
+        'initial discrete state';
+        'Real parameters vector';
+        'Integer parameters vector';      
+        'initial firing vector (<0 for no firing)';
+        'direct feedthrough (y or n)';                                       
+        'time dependence (y or n)'],..
          list('str',1,'str',1,'vec',-1,'vec',-1,'vec',-1,'vec',-1,..
          'vec',-1,'vec',1,'vec',-1,'vec',-1,'vec',-1,'vec','sum(%6)',..
          'str',1,'str',1),label(1))
-    
-    if ~ok then
-      break
-    end
-    
-    label(1) = lab
-    funam = stripblanks(junction_name)
-    xx=xx(:); z=z(:); rpar=rpar(:); ipar=int(ipar(:));
-    nx = size(xx,1); nz=size(z,1);
-    i =int(i(:));
-    o =int(o(:));nout=size(o,1);
+    if ~ok then break,end
+    label(1)=lab
+    funam=stripblanks(junction_name)
+    xx=xx(:);z=z(:);rpar=rpar(:);ipar=int(ipar(:));
+    nx=size(xx,1);nz=size(z,1);
+    i=int(i(:));
+    o=int(o(:));nout=size(o,1);
     ci=int(ci(:));nevin=size(ci,1);
     co=int(co(:));nevout=size(co,1);
-    
-    if part(impli,1)=='y' then
-      funtyp = 12004 ; //** implicit function 
-    else
-      funtyp = 2004  ; //** explicit function 
-    end
-    
+    if part(impli,1)=='y' then funtyp=12004, else funtyp=2004,end
     if [ci;co]<>[] then
-      if maxi([ci;co])>1 then
-        message("vector event links not supported");
-        ok = %f
-      end
+      if maxi([ci;co])>1 then message('vector event links not supported');ok=%f;end
     end
-
-    depu = stripblanks(depu);if part(depu,1)=='y' then depu=%t; else depu=%f;end
-    dept = stripblanks(dept);if part(dept,1)=='y' then dept=%t; else dept=%f;end
-    dep_ut = [depu dept];
+    depu=stripblanks(depu);if part(depu,1)=='y' then depu=%t; else depu=%f;end
+    dept=stripblanks(dept);if part(dept,1)=='y' then dept=%t; else dept=%f;end
+    dep_ut=[depu dept];
     
-    if funam==' ' then
-      break
-    end
 
-    tt = label(2);
+    if funam==' ' then break,end
 
     if model.sim(1)<>funam|sign(size(model.state,'*'))<>sign(nx)|..
          sign(size(model.dstate,'*'))<>sign(nz)|model.nzcross<>ng|..
-          sign(size(model.evtout,'*'))<>sign(nevout) then
+    sign(size(model.evtout,'*'))<>sign(nevout) then
       tt=[]
     end
 
-    [ok,tt] = CFORTR2(funam,tt) ; //** generate the standard skeleton or edit previous 
-    if ~ok then                   //** defined C functions   
-        break
-    end
-    
-    [model,graphics,ok] = check_io(model,graphics,i,o,ci,co); 
-  
-    //** if the last check is OK, the new parameters are stored in the model 
+    tt=label(2);
+    while %t
+
+    [ok,tt,cancel]=CFORTR2(funam,tt)
+    if ~ok then
+        if cancel then break,end
+    else
+    [model,graphics,ok]=check_io(model,graphics,i,o,ci,co)
     if ok then
-      model.sim = list(funam,funtyp)
-      model.in  = i
-      model.out = o
-      model.evtin = ci
-      model.evtout = co
-      model.state  = xx
-      model.dstate = z
-      model.rpar   = rpar
-      model.ipar   = ipar
-      model.firing = auto0
-      model.dep_ut = dep_ut
-      model.nzcross = ng
-      label(2) = tt
-      x.model  = model
-      graphics.exprs = label
-      x.graphics     = graphics
-      break ; //** exit positively from the loop 
+      model.sim=list(funam,funtyp)
+      model.in=i
+      model.out=o
+      model.evtin=ci
+      model.evtout=co
+      model.state=xx
+      model.dstate=z
+      model.rpar=rpar
+      model.ipar=ipar
+      model.firing=auto0
+      model.dep_ut=dep_ut
+      model.nzcross=ng
+      label(2)=tt
+      x.model=model
+      graphics.exprs=label
+      x.graphics=graphics
+      break
     end
-
-  end //** while(1) loop 
-
-case "define" then
-  in  = 1
-  out = 1
-  clkin = []
-  clkout = []
-  x0 = []
-  z0 = []
-  typ = 'c'
-  auto = []
-  rpar = []
-  ipar = []
-  funam = 'toto'
-  ng = 0
-
-  model = scicos_model()
-  model.sim = list(' ',2004)
-  model.in = in
-  model.out = out
-  model.evtin = clkin
-  model.evtout = clkout
-  model.state = x0
-  model.dstate = z0
-  model.rpar = rpar
-  model.ipar = ipar
-  model.blocktype = typ
-  model.firing = auto
-  model.dep_ut = [%t %f]
-  model.nzcross = ng
-
-  label = list([funam,'n',sci2exp(in),sci2exp(out),sci2exp(clkin),sci2exp(clkout),..
-              sci2exp(x0),sci2exp(0),sci2exp(z0),sci2exp(rpar),sci2exp(ipar),..
-              sci2exp(auto),'y','n']',[])
-
-  gr_i = ['xstringb(orig(1),orig(2),''C block2'',sz(1),sz(2),''fill'');']
-  x    = standard_define([2 2],model,label,gr_i)
+  end
+  end
+  if ok|cancel then break,end
+  end
+
+case 'define' then
+  in=1
+  out=1
+  clkin=[]
+  clkout=[]
+  x0=[]
+  z0=[]
+  typ='c'
+  auto=[]
+  rpar=[]
+  ipar=[]
+  funam='toto'
+  ng=0
+
+model=scicos_model()
+model.sim=list(' ',2004)
+model.in=in
+model.out=out
+model.evtin=clkin
+model.evtout=clkout
+model.state=x0
+model.dstate=z0
+model.rpar=rpar
+model.ipar=ipar
+model.blocktype=typ
+model.firing=auto
+model.dep_ut=[%t %f]
+model.nzcross=ng
+
+label=list([funam,'n',sci2exp(in),sci2exp(out),sci2exp(clkin),sci2exp(clkout),..
+          sci2exp(x0),sci2exp(0),sci2exp(z0),sci2exp(rpar),sci2exp(ipar),..
+          sci2exp(auto),'y','n']',[])
+
+  gr_i=['xstringb(orig(1),orig(2),''C block2'',sz(1),sz(2),''fill'');']
+  x=standard_define([2 2],model,label,gr_i)
 end
-
 endfunction
 
 
index 1ddb1ab..b7204fb 100644 (file)
@@ -57,7 +57,7 @@ case 'define' then
   model.dep_ut=[%f %t]
   
   exprs=[strcat(sci2exp(x0(1)));strcat(sci2exp(x0(2)))]
-  gr_i=['xstringb(orig(1),orig(2),''  s  '',sz(1),sz(2),''fill'');']
+  gr_i=['xstringb(orig(1),orig(2),'' s   '',sz(1),sz(2),''fill'');']
   x=standard_define([2 2],model,exprs,gr_i)
 end
 endfunction
index 91aebc3..771dc94 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=DSUPER(job,arg1,arg2)
+function [x,y,typ] = DSUPER(job,arg1,arg2)
 x=[];y=[],typ=[]
 
 select job
@@ -41,22 +41,23 @@ case 'set' then
  bitems=graphics.exprs(2)(2)(2:$)
  if exprs0==[] then x=arg1,return,end
 
- tt='%scicos_context.'+exprs0(1);
+ tt='scicos_context.'+exprs0(1);
  for i=2:size(exprs0,1)
-   tt=tt+',%scicos_context.'+exprs0(i),
+   tt=tt+',scicos_context.'+exprs0(i),
  end
 
  ss=graphics.exprs(2)(3)
- %scicos_context=struct()
+scicos_context=struct()
  execstr('[ok,'+tt+',exprs]=getvalue(btitre,bitems,ss,exprs)')
  
  if ok then
   x=arg1
+  %scicos_context=scicos_context;
   context=[x.model.rpar.props.context]
   [%scicos_context,ierr]=script2var(context,%scicos_context)
   if ierr==0 then 
     sblock=x.model.rpar
-    [sblock,%w,needcompile2,ok]=do_eval(sblock,list())
+    [sblock,%w,needcompile2,ok]=do_eval(sblock,list(),%scicos_context)
     y=max(2,needcompile,needcompile2)
     x.graphics.exprs(1)=exprs
     x.model.rpar=sblock
index e8deddf..c1776c4 100644 (file)
 // See the file ../license.txt
 //
 
-function [x,y,typ]=RELATIONALOP(job,arg1,arg2)
+function [x,y,typ] = RELATIONALOP(job,arg1,arg2)
 x=[];y=[];typ=[]
 select job
  case 'plot' then
-  VOP=['==', '~=', '<', '<=', '>=','>']
+  VOP=['==', '~=', '<', '<=', '>','>=']
   OPER=VOP(evstr( arg1.graphics.exprs(1))+1)
   standard_draw(arg1)
 case 'getinputs' then
@@ -39,7 +39,7 @@ case 'set' then
   if size(exprs,1)==2 then exprs=[exprs;sci2exp(1)]; end
   while %t do
     [ok,rule,zcr,Datatype,exprs]=getvalue('Set parameters',..
-       ['Operator: == (0), ~= (1), < (2), <= (3), >= (4), > (5)';..
+       ['Operator: == (0), ~= (1), < (2), <= (3), > (4), >= (5)';..
         'Use zero crossing (no: 0), (yes: 1)'
          'Datatype (1=double 3=int32 ...)'],..
        list('vec',1,'vec',1,'vec',1),exprs)
@@ -50,7 +50,7 @@ case 'set' then
     end
     if (Datatype==1) then
         model.sim=list('relational_op',4)
-    elseif (Datatype==3) then
+    elseif (Datatype==3|Datatype==9) then
         model.sim=list('relational_op_i32',4)
     elseif(Datatype==4) then
         model.sim=list('relational_op_i16',4)
index 99cc2a6..d913f59 100644 (file)
@@ -20,6 +20,7 @@
 //
 
 function [x,y,typ]=TEXT_f(job,arg1,arg2)
+// Copyright INRIA
 //** 22-23 Aug 2006: some carefull adjustements for the fonts
 //**                 inside the new graphics datastructure  
 x=[]; y=[]; typ=[];
@@ -48,21 +49,32 @@ case 'plot' then //normal  position
   gh_winpal.font_style = model.ipar(1) ; 
   gh_winpal.font_size  = model.ipar(2) ;
   
-   
+  //@@ compute bbox
+  rect = stringbox(model.rpar, graphics.orig(1), graphics.orig(2));
+
+  w=(rect(1,3)-rect(1,2)) * %zoom;
+  h=(rect(2,2)-rect(2,4)) * %zoom/1.4 * 1.2;
+
   //** special case for Windows 
   if MSDOS then
     //** xset('pattern',scs_m.props.options.Background(1))
     gh_winpal.font_color = scs_m.props.options.Background(1) ;
     
-    xstring(graphics.orig(1),graphics.orig(2),model.rpar)
+    //@@ fill txt_index in a box
+    xstringb(rect(1,1),rect(2,1), model.rpar, w, h,'fill') ;
+
+    //xstring(graphics.orig(1),graphics.orig(2),model.rpar)
   end
   
   //** set the new parameters 
   //** xset('pattern', default_color(1))  ;
   gh_winpal.font_color = default_color(1) ;
   
+  //@@ fill txt_index in a box
+  xstringb(rect(1,1),rect(2,1), model.rpar, w, h,'fill') ;
+
   //** print the string 
-  xstring(graphics.orig(1), graphics.orig(2), model.rpar)
+  //xstring(graphics.orig(1), graphics.orig(2), model.rpar)
   
   //** restore the old settings 
   //** xset('font',oldfont(1),oldfont(2))
index 0c25aa9..91aa50a 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=PRODUCT(job,arg1,arg2)
+function [x,y,typ] = PRODUCT(job,arg1,arg2)
 x=[];y=[];typ=[];
 select job
 case 'plot' then
@@ -37,8 +37,10 @@ case 'set' then
   model=arg1.model
   exprs=graphics.exprs
   while %t do
-    [ok,sgn,exprs]=getvalue('Set multiplication block parameters',..
-'Number of inputs or sign vector (multiplication: + 1, division: -1)',list('vec',-1),exprs)
+    [ok,sgn,exprs]=getvalue(['         Set multiplication block parameters';
+                             '(multiplication is set with + 1, division with -1)';''],...
+                            'Number of inputs or sign vector',...
+                            list('vec',-1),exprs)
     if ~ok then break,end
     sgn=sgn(:);
     if size(sgn,1)==1 then 
@@ -99,8 +101,16 @@ case 'define' then
        'end';
        'xx=sz(1)*[.8 .8 .4  .4]+orig(1)+de';
        'yy=sz(2)*[.2 .8 .8  .2]+orig(2)';
-       'xpoly(xx,yy,''lines'')']
+       'xpoly(xx,yy,''lines'')'
+        'txt=''Product'';'
+        'style=5;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();'
+        'e.font_style=style;']
   x=standard_define([2 3],model, exprs,gr_i)
-  x.graphics.id="Product"
 end
 endfunction
index ed04dde..5295f96 100644 (file)
@@ -20,6 +20,7 @@
 //
 
 function [x,y,typ]=PDE(job,arg1,arg2)
+// développé par EADS-CCR
 // fonction graphic du bloc, elle permet le dessin et l'initialisation du bloc                //
 // Reference: "Scicos user guid", http://www.scicos.org                                       //
 //--------------------------------------------------------------------------------------------//
@@ -78,7 +79,7 @@ case 'set' then
       label(3)=lab;
       rdnom=stripblanks(rdnom);     
       if rdnom==emptystr() then 
-        ok1=%f;messagebox('sorry C file name not defined',"modal","error");
+        ok1=%f;x_message('sorry C file name not defined');
       end
       if ok1 then break,end
     end
@@ -97,7 +98,7 @@ case 'set' then
         elseif (signe == 0) then,
           delta=0;
         else
-          messagebox(['le discriminant n''est pas constant,'; 'Vous devez choisir son signe dans l''IHM'],"modal","error");
+          x_message(['le discriminant n''est pas constant,'; 'Vous devez choisir son signe dans l''IHM']);
           return;
         end
       else
@@ -106,7 +107,7 @@ case 'set' then
       if (delta==[]) then, delta=0; end        
       type_meth=arbre_decision(delta); 
     end
-    // a voir si c'est � rajouter pour ne pas regenerer dans le cas d'eval
+    // a voir si c'est à rajouter pour ne pas regenerer dans le cas d'eval
     //if ~ok then
             [flag_type,rdnom,DF_type,tt]=translate(CI,CI1,CLa_type,CLa_exp,CLb_type,CLb_exp,oper,type_meth,degre,a_domaine,..
              b_domaine,Nbr_maillage,a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,a6,b6,a7,b7,rdnom,mesures);
@@ -155,11 +156,12 @@ case 'set' then
     end
      
     // Ecriture, compilation et linkage du code
-    if (fun(3) == "clickin") then 
+    // if (fun(3) == "clickin") then  
+      // always ulink and link 
       [ok1]=CFORTREDP(rdnom,tt);
       if ~ok1 then break,end
-    end
-    
+    //end
     if ~ok then
           [model,graphics,ok]=check_io(model,graphics,ones(k,1),out(:),[],[])
     end
index 1217a01..0fcc3f1 100644 (file)
 // See the file ../license.txt
 //
 
-//19 sept 2007
-
 function [x,y,typ]=TOWS_c(job,arg1,arg2)
 x=[];y=[];typ=[]
 select job
 case 'plot' then
+  varnam=string(arg1.graphics.exprs(2))
   standard_draw(arg1)
 case 'getinputs' then
   [x,y,typ]=standard_inputs(arg1)
@@ -70,7 +69,6 @@ case 'set' then
           model.blocktype = 'd';
         end
         model.ipar=[nz;length(varnam);str2code(varnam)]
-        graphics.id=string(varnam)
         graphics.exprs=exprs
         x.graphics=graphics;
         x.model=model;
@@ -97,11 +95,18 @@ case 'define' then
   model.blocktype = 'd';
   model.firing    = [];
   model.dep_ut    = [%f %f];
-
-  gr_i=['txt=[''To workspace''];';
-        'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'');']
+  gr_i=['xstringb(orig(1),orig(2),''To workspace'',sz(1),sz(2),''fill'')'
+        'txt=varnam;'
+        'style=5;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();'
+        'e.font_style=style;']
   exprs=[string(nz),string(varnam),string(herit)]
   x=standard_define([3.5 2],model,exprs,gr_i)
-  x.graphics.id=string(varnam)
 end
 endfunction
+
index 290dd76..0f735e6 100644 (file)
 // See the file ../license.txt
 //
 
-function [x,y,typ]=Counter(job,arg1,arg2)
+function [x,y,typ] = Counter(job,arg1,arg2)
 x=[];y=[];typ=[];
 select job
  case 'plot' then
   graphics=arg1.graphics;
+  ierr=execstr('(evstr(graphics.exprs(3))==1)','errcatch')
+  if ierr<>0 then graphics.exprs(3)='1';end
   if (evstr(graphics.exprs(3))==1) then
   from=graphics.exprs(1)
   to=graphics.exprs(2)
index 214262a..10d79e9 100644 (file)
 // See the file ../license.txt
 //
 
-function [x,y,typ]=FROMWSB(job,arg1,arg2)
+function [x,y,typ] = FROMWSB(job,arg1,arg2)
 x=[];y=[],typ=[]
 select job
 case 'plot' then
+  varnam=string(arg1.model.rpar.objs(1).graphics.exprs(1))
   standard_draw(arg1)
 case 'getinputs' then
   [x,y,typ]=standard_inputs(arg1)
@@ -97,7 +98,7 @@ case 'set' then
           needcompile=4
         end
       end
-     //parameter or states changed
+      //parameter or states changed
       arg1(spath)=xxn// Update
       newpar(size(newpar)+1)=path// Notify modification
       y=max(y,needcompile)
@@ -105,9 +106,6 @@ case 'set' then
   end
   x=arg1
   typ=newpar
-  //## modif made by hand
-  varnam=arg1.model.rpar.objs(1).graphics.exprs(1)
-  x.graphics.id=string(varnam)
 case 'define' then
 scs_m_1=scicos_diagram(..
         version="scicos4.2",..
@@ -244,10 +242,17 @@ model=scicos_model(..
          nzcross=0,..
          nmode=0,..
          equations=list())
-  gr_i='xstringb(orig(1),orig(2),''From workspace'',sz(1),sz(2),''fill'')';
-  x=standard_define([3.5 2],model,[],gr_i)
   //## modif made by hand
-  varnam=scs_m_1.objs(1).graphics.exprs(1)
-  x.graphics.id=string(varnam)
+  gr_i=['xstringb(orig(1),orig(2),''From workspace'',sz(1),sz(2),''fill'')'
+        'txt=varnam;'
+        'style=5;'
+        'rectstr=stringbox(txt,orig(1),orig(2),0,style,1);'
+        'if ~exists(''%zoom'') then %zoom=1, end;'
+        'w=(rectstr(1,3)-rectstr(1,2))*%zoom;'
+        'h=(rectstr(2,2)-rectstr(2,4))*%zoom;'
+        'xstringb(orig(1)+sz(1)/2-w/2,orig(2)-h-4,txt,w,h,''fill'');'
+        'e=gce();'
+        'e.font_style=style;']
+  x=standard_define([3.5 2],model,[],gr_i)
 end
 endfunction
index 8bdea8d..159acfd 100644 (file)
@@ -19,7 +19,7 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=FROMWS_c(job,arg1,arg2)
+function [x,y,typ] = FROMWS_c(job,arg1,arg2)
 x=[];y=[];typ=[];
 select job
 case 'plot' then
@@ -43,17 +43,17 @@ case 'set' then
        list('str',1,'vec',1,'vec',1,'vec',1),exprs)
     if ~ok then break,end
     if ~(Method==0 | Method==1| Method==2| Method==3) then 
-      messagebox('Interpolation method should be chosen in [0,1,2,3]',"modal","error");
+      x_message('Interpolation method should be chosen in [0,1,2,3]');
       ok=%f;
     end
 
     if ~(ZC==0 | ZC==1) then 
-      messagebox('Zero crossing should be either 0 or 1',"modal","error");
+      x_message('Zero crossing should be either 0 or 1');
       ok=%f;
     end
 
     if ~(OutEnd==0 | OutEnd==1| OutEnd==2) then 
-      messagebox('Output at end option should be either 0 or 1',"modal","error");
+      x_message('Output at end option should be either 0 or 1');
       ok=%f;
     end
 
index b79b232..7a7422e 100644 (file)
@@ -36,7 +36,7 @@ case 'set' then
   model=arg1.model;
   while %t do
     [ok,M,F,P,exprs]=getvalue(['Set Gen_SIN Block'],..
-           ['Magnitude';'Frequency';'phase'],..
+           ['Magnitude';'Frequency (rad/s)';'phase'],..
            list('vec',1,'vec',1,'vec',1),exprs)
     if ~ok then break,end
     if F<0 then
index 9159283..e81f69f 100644 (file)
@@ -19,7 +19,8 @@
 // See the file ../license.txt
 //
 
-function [x,y,typ]=SLIDER_f(job,arg1,arg2)
+function [x,y,typ] = SLIDER_f(job,arg1,arg2)
+//
 x=[];y=[];typ=[]
 select job
 case 'plot' then
index 938da1f..46a737c 100644 (file)
@@ -20,6 +20,7 @@
 //
 
 function [x,y,typ]=STEP(job,arg1,arg2)
+// Copyright INRIA
 x=[];y=[];typ=[];
 select job
 case 'plot' then
@@ -53,9 +54,13 @@ case 'set' then
       [model,graphics,ok]=check_io(model,graphics,[],size(fi,'*'),1,1)
     end
     if ok then
-      rpar=[in;fi]
-      model.rpar=rpar
       model.firing=temps
+      if temps==0 then
+         rpar=[fi;fi]
+      else
+         rpar=[in;fi]
+      end
+      model.rpar=rpar
       graphics.exprs=exprs
       x.graphics=graphics;x.model=model
       break
@@ -71,7 +76,7 @@ case 'define' then
   model.firing=1
   model.rpar=rpar
   model.blocktype='c'
-  model.dep_ut=[%f %t]
+  model.dep_ut=[%f %f]
   
   exprs=[string(1);string(rpar)]
   gr_i=['txt=[''Step''];';