Merge remote branch 'origin/5.2'
Sylvestre Ledru [Mon, 29 Mar 2010 14:38:32 +0000 (16:38 +0200)]
41 files changed:
scilab/CHANGES_5.2.X
scilab/modules/api_scilab/help/en_US/capi/CreateListVarFrom.xml
scilab/modules/api_scilab/help/en_US/capi/CreateListVarFromPtr.xml
scilab/modules/api_scilab/help/en_US/capi/CreateVar.xml
scilab/modules/api_scilab/help/en_US/capi/GetListRhsVar.xml
scilab/modules/api_scilab/help/en_US/capi/GetRhsVar.xml
scilab/modules/api_scilab/help/en_US/capi/GetType.xml
scilab/modules/api_scilab/help/en_US/capi/ScilabCTypes.xml
scilab/modules/api_scilab/help/en_US/capi/howto/CallingAScilabFunctionFromACInterface.xml
scilab/modules/api_scilab/help/en_US/capi/howto/HowToAccessAMatrix_1.xml
scilab/modules/api_scilab/help/en_US/capi/howto/HowToCheckParameters.xml
scilab/modules/api_scilab/help/en_US/capi/howto/HowToCreateAndAccessAList_1.xml
scilab/modules/api_scilab/help/en_US/capi/howto/HowToDealWithOptionalParameters.xml
scilab/modules/api_scilab/help/en_US/capi/istk.xml
scilab/modules/api_scilab/help/en_US/capi/stk.xml
scilab/modules/cacsd/help/en_US/kpure.xml
scilab/modules/cacsd/macros/kpure.sci
scilab/modules/cacsd/macros/krac2.sci
scilab/modules/cacsd/tests/nonreg_tests/bug_6829.dia.ref [new file with mode: 0644]
scilab/modules/cacsd/tests/nonreg_tests/bug_6829.tst [new file with mode: 0644]
scilab/modules/call_scilab/examples/basicExamples/readwriteboolean.c
scilab/modules/call_scilab/examples/basicExamples/readwritecomplexmatrix.c
scilab/modules/call_scilab/examples/basicExamples/readwritematrix.c
scilab/modules/call_scilab/examples/basicExamples/readwritestring.c
scilab/modules/call_scilab/help/en_US/BooleanManagement.xml
scilab/modules/call_scilab/help/en_US/ComplexManagement.xml
scilab/modules/call_scilab/help/en_US/DoubleManagement.xml
scilab/modules/call_scilab/help/en_US/StringManagement.xml
scilab/modules/core/src/fortran/allops.f
scilab/modules/core/tests/nonreg_tests/bug_6816.dia.ref [new file with mode: 0644]
scilab/modules/core/tests/nonreg_tests/bug_6816.tst [new file with mode: 0644]
scilab/modules/hdf5/src/java/org/scilab/modules/hdf5/scilabTypes/ScilabBoolean.java
scilab/modules/hdf5/src/java/org/scilab/modules/hdf5/scilabTypes/ScilabDouble.java
scilab/modules/hdf5/src/java/org/scilab/modules/hdf5/scilabTypes/ScilabInteger.java
scilab/modules/hdf5/src/java/org/scilab/modules/hdf5/scilabTypes/ScilabList.java
scilab/modules/hdf5/src/java/org/scilab/modules/hdf5/scilabTypes/ScilabMList.java
scilab/modules/hdf5/src/java/org/scilab/modules/hdf5/scilabTypes/ScilabString.java
scilab/modules/hdf5/src/java/org/scilab/modules/hdf5/scilabTypes/ScilabTList.java
scilab/modules/hdf5/src/java/org/scilab/modules/hdf5/scilabTypes/ScilabType.java
scilab/modules/matio/tests/nonreg_tests/bug_5466.dia.ref [new file with mode: 0644]
scilab/modules/matio/tests/nonreg_tests/bug_5466.tst [new file with mode: 0644]

index 25778ca..ba3e5be 100644 (file)
@@ -22,7 +22,6 @@ next usage. See bug #6482
 Scilab:
 =======
 
-
 * Title of the main Scilab window changed from 'Console' to 'Scilab Console'.
   See bug #5023
 
@@ -39,6 +38,11 @@ For GNU/Linux, Unix & Mac OS X:
   allows user to access to them throught the Scilab function sciargs:
   scilab -nwni -args 2 3
 
+call_scilab:
+============
+
+* Examples added to show how to manage returned error.
+
 Compilation:
 ============
 
@@ -121,6 +125,9 @@ Bug Fixes:
 * bug 4599 fixed - It was possible create many different variables with the same
                    name in the same scope.
 
+* bug 5466 fixed - "savematfile" no more append variables in file by default, 
+                   file is now reinitialized at each "savematfile" call.
+
 * bug 6472 fixed - Resizing the graphics window after having plotted several 2D
                    curves and a legend caused some of them to disappear.
 
@@ -172,8 +179,12 @@ Bug Fixes:
 
 * bug 6798 fixed - About Matlab to Scilab tools help page updated.
 
+* bug 6816 fixed - Incoherent extraction when there is no index: M()
+
 * bug 6817 fixed - The "xstring" function shifted the start position of the string relative to the string length.
 
+* bug 6829 fixed - kpure fails to compute  when applied to an high degree system
+
 
                 Changes between Versions 5.2.0 and 5.2.1 of Scilab
                 ==================================================
index 5113ebf..49e5eaa 100644 (file)
     <para>A C interface function which allows to create a new Scilab variable
     in a [mt]list</para>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
   </refsection>
 
   <refsection>
index 29aac7e..0eeaa69 100644 (file)
     <para>A C interface function which allows to create a new Scilab parameter
     from a pointer in a [mt]list</para>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
   </refsection>
 
   <refsection>
index 90fd0a2..14fb5ec 100644 (file)
     <para>A C gateway function which allows to create a new Scilab
     parameter</para>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
   </refsection>
 
   <refsection>
index fe1b0e6..808be2c 100644 (file)
     <para>A C gateway function which allows to access a parameter stored in a
     [mt]list transmitted to a Scilab function</para>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
   </refsection>
 
   <refsection>
index 5368a6c..0c0d664 100644 (file)
     <para>A C gateway function which allows to access a argument transmitted
     to a Scilab function</para>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
   </refsection>
 
   <refsection>
index ec73fd5..b7557a1 100644 (file)
@@ -52,7 +52,7 @@
     parameter in the Scilab memory. You must include stack-c.h to benefit from
     this function.</para>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
   </refsection>
 
   <refsection>
index ff0f579..4c67d0e 100644 (file)
@@ -16,7 +16,7 @@
   <refsection>
     <title>Description</title>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
 
     <para>The string/char * datatype in the Scilab memory:</para>
 
index 45888e3..c7d65ec 100644 (file)
@@ -16,7 +16,7 @@
   <refsection>
     <title>Calling a scilab function (macros) from a C interface</title>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
 
     <para>When you write a interface with scilab, you can need to call another
     function directly from your function. You can pass a pointer on scilab
index eca209f..cae0226 100644 (file)
@@ -17,7 +17,7 @@
   <refsection>
     <title>Description</title>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
 
     <para>The goal is to get a matrix of doubles send to a function written in
     C.</para>
index f546316..a60262c 100644 (file)
@@ -17,7 +17,7 @@
   <refsection>
     <title>Description</title>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
 
     <para>The goal is to get a set of parameters via a set of C gateway
     functions and then to perform some checks in the C function.</para>
index 92e1420..b52734f 100644 (file)
@@ -17,7 +17,7 @@
   <refsection>
     <title>Description</title>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
 
     <para>The goal is to get a [mt]list, to get some elements stored in that
     this and to send a new [mt]list using a function written in C.</para>
index 2332d77..773cb81 100644 (file)
@@ -17,7 +17,7 @@
   <refsection>
     <title>Description</title>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
 
     <para>The goal is to get a set of optional parameters via a C gateway and
     then to perform some checks in the C function (number of optional
index 5444547..cddce19 100644 (file)
@@ -41,7 +41,7 @@
     <para>This C gateway function returns a pointer to an integer to access
     data stored at a given position in the Scilab memory.</para>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
   </refsection>
 
   <refsection>
index e794e05..776a6cd 100644 (file)
@@ -41,7 +41,7 @@
     <para>This C gateway function returns a pointer to a double to access data
     stored at a given position in the Scilab memory .</para>
 
-    <para>WARNING: this API is deprecated. It will be removed in Scilab 6. Please use the new API instead.</para>
+    <para>WARNING: This API is deprecated from Scilab 5.2.0 and is going to be removed with Scilab 6.0. Please use <link linkend="api_scilab">API Scilab</link> (the new Scilab API).</para>
   </refsection>
 
   <refsection>
index fa74ae2..b7cae81 100644 (file)
       <varlistentry>
         <term>tol</term>
         <listitem>
-          <para>vector with 2 elements <literal>[epsK epsI]</literal>. <literal>epsK</literal> is a tolerance used to determine if two values of  <literal>K</literal> can be considered as  equal <literal>epsI</literal> is a tolerance used to determine if a root is imaginary or not. The default value is <literal>[1e-6 1e-6 ]</literal> </para>
+          <para>a positive scalar.  tolerance used to determine if a
+          root is imaginary or not. The default value is
+          <literal>1e-6</literal> </para>
         </listitem>
       </varlistentry>
       <varlistentry>
         <term>K</term>
         <listitem>
-          <para>Real vector, the vector of gains for which at least one closed loop pole is imaginary. </para>
+          <para>Real vector, the vector of gains for which at least
+          one closed loop pole is imaginary. </para>
         </listitem>
       </varlistentry>
       <varlistentry>
         <term>R</term>
         <listitem>
-          <para>Complex vector, the imaginary closed loop poles associated with the  values of  <literal>K</literal>.</para>
+          <para>Complex vector, the imaginary closed loop poles
+          associated with the values of <literal>K</literal>.</para>
         </listitem>
       </varlistentry>
     </variablelist>
   <refsection>
     <title>Examples</title>
     <programlisting role="example"><![CDATA[ 
-s=poly(0,'s');
-h=syslin('c',(s-1)/(1+5*s+s^2+s^3))
+
+num=real(poly([-1+%i, -1-%i, -1+8*%i  -1-8*%i],'s'));
+den=real(poly([0.5 0.5  -6+7*%i  -6-7*%i  -3 -7 -11],'s'));
+h=num/den;
+
+[K,Y]=kpure(h)
 clf();evans(h)
-K=kpure(h)
-hf=h/.K(1)
-roots(denom(hf))
+plot(real(Y),imag(Y),'+r')
+
+num=real(poly([-1+%i*1, -1-%i*1, 2+%i*8  2-%i*8 -2.5+%i*13 -2.5-%i*13],'s'));
+den=real(poly([1 1 3+%i*3 3-%i*3 -15+%i*7  -15-%i*7  -3 -7 -11],'s'));
+h=num/den;
+
+[K,Y]=kpure(h)
+clf();evans(h,100000)
+plot(real(Y),imag(Y),'+r')
+
+
+
  ]]></programlisting>
   </refsection>
   <refsection>
+    <title>Author</title>
+    <para>Serge Steer, INRIA</para>
+  </refsection>
+  <refsection>
     <title>See Also</title>
     <simplelist type="inline">
       <member>
index 2f1d4c8..5df9503 100644 (file)
@@ -7,59 +7,43 @@
 // are also available at    
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
-function [y,R]=kpure(sl,eps)
+function [K,R]=kpure(sl,eps)
+//if sl is a transfert function N(S)/D(s) kpure looks for K producing
+//pure  imaginary roots for
+//  P(s)=D(s)+K*N(s)
+//There is a pair of pure imaginary poles if and only if
+//  P(%i*q)=0  (1)
+// and
+//  P(-%i*q)=0 (2)
+// because N and D are polynomials with real coefficients.
+  
+//Author: Serge Steer, INRIA
   y=[];R=[];
-  if argn(2)==1 then eps=[1e-6,1e-6],end
+  msg=_("%s: Wrong type for input argument #%d: Linear state space or a transfer function expected.\n")
+  if argn(2)==1 then eps=1e-6,end
+  if size(eps,'*')==2 then  eps=eps(2),end //compatibility
   select typeof(sl)
   case 'rational' then
-    if size(sl.num,'*') > 1 then error(95,1),end
+    if size(sl.num,'*') <> 1 then 
+      error(msprintf(msg,"kpure",1))
+    end
   case 'state-space' then
+    if size(sl.D,'*') <> 1 then 
+      error(msprintf(msg,"kpure",1))
+    end
     sl=ss2tf(sl)
-    if size(sl.num,'*') > 1 then error(95,1),end
   else
-    error(msprintf(gettext("%s: Wrong type for input argument #%d: Linear state space or a transfer function expected.\n"),"kpure",1))
+    error(msprintf(msg,"kpure",1))
   end
-  if sl.dt<>'c' then 
-    error(msprintf(gettext("%s: Wrong value for input argument #%d: Continuous time system expected.\n"),"kpure",1))
-  end
-  if size(sl.num,'*')<>1 then
-    error(msprintf(gettext("%s: Wrong size for input argument #%d: Single input, single output system expected.\n"),"kpure",1))
-  end
-
-  //build the Routh table of the given system
-  r=routh_t(sl,poly(0,'k')),
-  [s,t]=size(r);
-  
-  //Check of infinite solution
-  for i=1:s,
-    if and(coeff(r(i,:))==0) then 
-      error(msprintf(gettext("%s: Infinite solution.\n"),"kpure")),
-    end
-  end,
-
-  z=0;u=0;
-
-  for i=1:s,
-    k=roots(gcd(r(i,:)));// k is must be real
-    k=real(k)
-    //k(k<=0)=[]; //remove negative and zero values
-    h=prod(size(k)),
-    if h>0 then
-      for j=1:h,
-       if and(abs(k(j)-y)>eps(1)) then //remove duplicated k's
-         //compute the poles of the closed loop
-         wr=roots(k(j)*sl.num+sl.den) 
-         //retains k if at least one closed loop pole is imaginary            
-         [w,ki]=mini(abs(real(wr)))
-         if w<eps(2) then 
-           y=[y real(k(j))],
-           R=[R wr(ki)]
-         end
-       end
-      end,
-    end;
-  end;
-
-  [y,k]=gsort(y)
-  R=R(k)
+  //(1) give K(s)=-D(s)/N(s)
+  s=poly(0,varn(sl.den))
+  K=-sl.den/sl.num;
+  // replace K by the previous value in (2) and find the roots
+  s=roots(numer(horner(sl.den,-s)+K*horner(sl.num,-s)),'e');
+  //retain pure imaginary roots
+  s=imag(s(abs(real(s))<eps));
+  R=(s(s>0).'*%i);
+  //find the K(s) values K(s)=-D(s)/N(s)
+  K=-real(freq(den,num,R))
 endfunction
index 0247c94..e4bc115 100644 (file)
@@ -7,32 +7,33 @@
 // are also available at    
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
-function kp=krac2(n)
-
-  select typeof(n)
+function [kp,s]=krac2(sys)
+//The denominator of the closed loop system is den(s)+K*num(s). So the
+//  the closed loops poles verify K(s)=-den(s)/num(s)
+//The real axis breakaway points occurs at the extrema of the K(s)
+// so at the point where K'=dK/ds = 0
+// K'=-(den'*num-den*num')/num^2
+// K'= 0 --> den'*num-den*num'=0
+//  http://www.scribd.com/doc/21374148/An-Introduction-to-Control-Systems
+  select typeof(sys)
   case 'rational' then
-    [n,d,dom]=n(['num','den','dt'])
   case 'state-space' then
-    n=ss2tf(n);[n,d,dom]=n(['num','den','dt'])
+    sys=ss2tf(sys);
   else
      error(msprintf(gettext("%s: Wrong type for input argument #%d: Linear state space or a transfer function expected.\n"),"krac2",1))
   end
-  if dom<>'c' then 
-    error(msprintf(gettext("%s: Wrong value for input argument #%d: Continuous time system expected.\n"),"krac2",1))
-  end
-  if size(n,'*')<>1 then
+  if size(sys,'*')<>1 then
     error(msprintf(gettext("%s: Wrong size for input argument #%d: Single input, single output system expected.\n"),"krac2",1))
   end
-
-  x=[];
-  q1=derivat(n/d);s=roots(q1(2));
-  //
-  for a=s',
-    if abs(imag(a))<=10*%eps then 
-      x=[x;a],
-    end,
-  end
-  //x(x==0)=[]
-  if x==[] then;return,end
-  kp=gsort(-real(freq(d,n,real(x))))
+  num=sys.num
+  den=sys.den
+  s=roots(derivat(num)*den-derivat(den)*num,'e')
+  //collect the real roots only
+  i=find(abs(imag(s))<=10*%eps)
+  if i==[] then kp=[],s=[];return,end
+  s=s(i)'
+  kp=-real(freq(den,num,real(s)))
+  i=find(kp>=0)
+  kp=kp(i)
+  s=s(i)
 endfunction
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_6829.dia.ref b/scilab/modules/cacsd/tests/nonreg_tests/bug_6829.dia.ref
new file mode 100644 (file)
index 0000000..2616fdd
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 6829 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6829
+//
+// <-- Short Description -->
+//  kpure fails to compute  gains when applied to an high degree system
+num=real(poly([-1+%i*1, -1-%i*1, 2+%i*8  2-%i*8 -2.5+%i*13 -2.5-%i*13],'s'));
+den=real(poly([1 1 3+%i*3 3-%i*3 -15+%i*7  -15-%i*7  -3 -7 -11],'s'));
+h=num/den;
+[K,Y]=kpure(h);
+n=size(K,'*');
+if n<>4 then bugmes();quit;end
+for i=1:n
+  r=roots(denom(h/.K(i)));
+  r=r(abs(real(r))<1e-6);//pure imaginary
+  r=r(imag(r)>0); //retains only positive imaginary part
+  if r==[] then bugmes();quit;end
+  if abs(r-Y(i))>1e-10 then bugmes();quit;end
+end
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_6829.tst b/scilab/modules/cacsd/tests/nonreg_tests/bug_6829.tst
new file mode 100644 (file)
index 0000000..d69cffc
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 6829 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6829
+//
+// <-- Short Description -->
+//  kpure fails to compute  gains when applied to an high degree system
+
+num=real(poly([-1+%i*1, -1-%i*1, 2+%i*8  2-%i*8 -2.5+%i*13 -2.5-%i*13],'s'));
+den=real(poly([1 1 3+%i*3 3-%i*3 -15+%i*7  -15-%i*7  -3 -7 -11],'s'));
+h=num/den;
+
+[K,Y]=kpure(h);
+n=size(K,'*');
+if n<>4 then pause,end
+for i=1:n
+  r=roots(denom(h/.K(i)));
+  r=r(abs(real(r))<1e-6);//pure imaginary
+  r=r(imag(r)>0); //retains only positive imaginary part
+  if r==[] then pause,end
+  if abs(r-Y(i))>1e-10 then pause,end
+end
index 186bba3..ce8c7e0 100644 (file)
@@ -41,11 +41,17 @@ int main(void)
                        /* NOTE that it is an array of int and not an array of double */
                        int rowA=1, colA=4; /* Size of the matrix */
                        char variableName[]="A";
+                       SciErr sciErr;
 
                        /*
                         Write it into Scilab's memory
                         */
-                       createNamedMatrixOfBoolean(pvApiCtx, variableName, rowA, colA, A);
+                       sciErr = createNamedMatrixOfBoolean(pvApiCtx, variableName, rowA, colA, A);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
                        /*
                         * Prior to Scilab 5.2:
                         * C2F(cwritebmat)(variableName, &rowA, &colA, A,strlen(variableName)); 
@@ -65,9 +71,15 @@ int main(void)
                        int B[]={0,0,0,0,1,0,0,1};   /* Declare the matrix */
                        int rowB=2, colB=4; /* Size of the matrix */
                        char variableNameB[] = "B";
+                       SciErr sciErr;
 
                        /* Write it into Scilab's memory */
-                       createNamedMatrixOfBoolean(pvApiCtx, variableNameB, rowB, colB, B);
+                       sciErr = createNamedMatrixOfBoolean(pvApiCtx, variableNameB, rowB, colB, B);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
                        /*
                         * Prior to Scilab 5.2:
                         * C2F(cwritebmat)(variableNameB, &rowB, &colB, B, strlen(variableNameB)); 
@@ -88,9 +100,15 @@ int main(void)
                        int *matrixOfBoolean = NULL; /* Int instead of double */
 
                        char variableToBeRetrieved[] = "A";
-               
+                       SciErr sciErr;
+
                        /* First, retrieve the size of the matrix */
-                       readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, NULL);
+                       sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, NULL);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
                        /* 
                         * Prior to Scilab 5.2:
                         * C2F(cmatbptr)(variableToBeRetrieved, &rowA_, &colA_, &lp, strlen(variableToBeRetrieved));
@@ -100,7 +118,12 @@ int main(void)
                        matrixOfBoolean=(int*)malloc((rowA_*colA_)*sizeof(int));
 
                        /* Load the matrix */
-                       readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, matrixOfBoolean);
+                       sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, matrixOfBoolean);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
                        /* 
                         * Prior to Scilab 5.2:
                         * C2F(creadbmat)(variableToBeRetrieved,&rowA_,&colA_,matrixOfBoolean,strlen(variableToBeRetrieved) );
@@ -127,9 +150,10 @@ int main(void)
                        int *matrixOfBooleanB = NULL; /* Int instead of double */
 
                        char variableToBeRetrievedB[] = "B";
+                       SciErr sciErr;
 
                        /* First, retrieve the size of the matrix */
-                       readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
+                       sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
                        /*
                         * Prior to Scilab 5.2:
                         * C2F(cmatbptr)(variableToBeRetrievedB, &rowB_, &colB_, &lp_, strlen(variableToBeRetrievedB));
@@ -139,8 +163,13 @@ int main(void)
                        matrixOfBooleanB=(int*)malloc((rowB_*colB_)*sizeof(int));
 
                        /* Load the matrix */
-                       readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfBooleanB);
+                       sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfBooleanB);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
 
+                       
                        /*
                         * Prior to Scilab 5.2:
                         * C2F(creadbmat)(variableToBeRetrievedB,&rowB_,&colB_,matrixOfBooleanB,strlen(variableToBeRetrievedB) );
index e4bd045..94ae152 100644 (file)
@@ -44,14 +44,19 @@ int main(void)
                                                        * (note that colA = sizeof(A)/2 
                                                        */
                char variableName[]="A";
+               SciErr sciErr;
 
-/* Write it into Scilab's memory */
-               createNamedComplexMatrixOfDouble(pvApiCtx,variableName,rowA,colA, A, A_img);
+               /* Write it into Scilab's memory */
+               sciErr = createNamedComplexMatrixOfDouble(pvApiCtx,variableName,rowA,colA, A, A_img);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
 
-/*
- * Prior to Scilab 5.2:
- * C2F(cwritecmat)(variableName, &rowA, &colA, A,strlen(variableName));
- */
+               /*
+                * Prior to Scilab 5.2:
+                * C2F(cwritecmat)(variableName, &rowA, &colA, A,strlen(variableName));
+                */
                printf("Display from Scilab of A:\n");
                SendScilabJob("disp(A);"); /* Display A */
        }
@@ -73,8 +78,14 @@ int main(void)
 
                int rowB=2, colB=4; /* Size of the matrix */
                char variableNameB[] = "B";
-/* Write it into Scilab's memory */
-               createNamedComplexMatrixOfDouble(pvApiCtx,variableNameB, rowB, colB, B, B_img);
+               SciErr sciErr;
+
+               /* Write it into Scilab's memory */
+               sciErr = createNamedComplexMatrixOfDouble(pvApiCtx,variableNameB, rowB, colB, B, B_img);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
 
 /*
  * Prior to Scilab 5.2:
@@ -96,9 +107,14 @@ int main(void)
                double *matrixOfComplex_img = NULL;
 
                char variableToBeRetrieved[] = "A";
+               SciErr sciErr;
 
                /* First, retrieve the size of the matrix */
-               readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, NULL, NULL);
+               sciErr = readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, NULL, NULL);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
 
 /*
  * Prior to Scilab 5.2:
@@ -110,7 +126,12 @@ int main(void)
                matrixOfComplex_img = (double*)malloc((rowA_*colA_*2)*sizeof(double));
 
                /* Load the matrix */
-               readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, matrixOfComplex, matrixOfComplex_img);
+               sciErr = readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, matrixOfComplex, matrixOfComplex_img);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
 
 /*
  * Prior to Scilab 5.2:
@@ -148,10 +169,15 @@ int main(void)
                double *matrixOfComplexB = NULL;
                double *matrixOfComplexB_img = NULL;
                char variableToBeRetrievedB[] = "B";
-
+               SciErr sciErr;
                /* First, retrieve the size of the matrix */
 
-               readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL, NULL);
+               sciErr = readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL, NULL);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
 /*
  * Prior to Scilab 5.2:
  * C2F(cmatcptr)(variableToBeRetrievedB, &rowB_, &colB_, &lp_, strlen(variableToBeRetrievedB));
@@ -162,13 +188,17 @@ int main(void)
                matrixOfComplexB_img = (double*)malloc((rowB_*colB_)*sizeof(double));
 
                /* Load the matrix */
-               readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfComplexB, matrixOfComplexB_img);
-
-/*
- * Prior to Scilab 5.2:
- * C2F(creadcmat)(variableToBeRetrievedB,&rowB_,&colB_,matrixOfComplexB,strlen(variableToBeRetrievedB) );
- */
+               sciErr = readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfComplexB, matrixOfComplexB_img);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
 
+               /*
+                * Prior to Scilab 5.2:
+                * C2F(creadcmat)(variableToBeRetrievedB,&rowB_,&colB_,matrixOfComplexB,strlen(variableToBeRetrievedB) );
+                */
+               
                printf("\n");
                printf("Display from B raw - real part (size: %d, %d):\n",rowB_, colB_);
                for(i=0; i < rowB_*colB_; i++) /* *2 is because complex part is store
index 48e550e..04cbec3 100644 (file)
@@ -39,11 +39,17 @@ int main(void)
                double A[] = {1,3,3,2};   /* Declare the matrix */
                int rowA = 1, colA = 4; /* Size of the matrix */
                char variableName[] = "A";
+               SciErr sciErr;
 
                /*
                 * Write it into Scilab's memory 
                 */
-               createNamedMatrixOfDouble(pvApiCtx,variableName,rowA,colA, A);
+               sciErr = createNamedMatrixOfDouble(pvApiCtx,variableName,rowA,colA, A);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
                /*
                 * Prior to Scilab 5.2:
                 * C2F(cwritemat)(variableName, &rowA, &colA, A,strlen(variableName));
@@ -63,11 +69,17 @@ int main(void)
                double B[] = {1,3,4,9,2,8,3,2};   /* Declare the matrix */
                int rowB = 2, colB = 4; /* Size of the matrix */
                char variableNameB[] = "B";
+               SciErr sciErr;
 
                /*
                 * Write it into Scilab's memory 
                 */
                createNamedMatrixOfDouble(pvApiCtx,variableNameB,rowB,colB, B);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
                /*
                 * Prior to Scilab 5.2:
                 * C2F(cwritemat)(variableNameB, &rowB, &colB, B, strlen(variableNameB));
@@ -87,9 +99,15 @@ int main(void)
                double *matrixOfDouble = NULL;
 
                char variableToBeRetrieved[]="A";
+               SciErr sciErr;
 
                /* First, retrieve the size of the matrix */
-               readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, NULL);
+               sciErr = readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, NULL);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
                /* 
                 * Prior to Scilab 5.2:
                 *      C2F(cmatptr)(variableToBeRetrieved, &rowA_, &colA_, &lp, strlen(variableToBeRetrieved));
@@ -100,7 +118,12 @@ int main(void)
                matrixOfDouble=(double*)malloc((rowA_*colA_)*sizeof(double));
 
                /* Load the matrix */
-               readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, matrixOfDouble);
+               sciErr = readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, matrixOfDouble);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
                /* 
                 * Prior to Scilab 5.2:
                 * C2F(creadmat)(variableToBeRetrieved,&rowA_,&colA_,matrixOfDouble,strlen(variableToBeRetrieved) );
@@ -128,9 +151,15 @@ int main(void)
                int i = 0, j = 0;
 
                char variableToBeRetrievedB[] = "B";
+               SciErr sciErr;
 
                /* First, retrieve the size of the matrix */
-               readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
+               sciErr = readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
                /* 
                 * Prior to Scilab 5.2:
                 * C2F(cmatptr)(variableToBeRetrievedB, &rowB_, &colB_, &lp_, strlen(variableToBeRetrievedB));
@@ -141,7 +170,12 @@ int main(void)
                matrixOfDoubleB = (double*)malloc((rowB_*colB_)*sizeof(double));
 
                /* Load the matrix */
-               readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfDoubleB);
+               sciErr = readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfDoubleB);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
                /* 
                 * Prior to Scilab 5.2:
                 * C2F(creadmat)(variableToBeRetrievedB,&rowB_,&colB_,matrixOfDoubleB,strlen(variableToBeRetrievedB) );
index 929bae9..58dec52 100644 (file)
@@ -40,9 +40,15 @@ int main(void)
                myMatrixOfString[0]="my Message";
                myMatrixOfString[1]="on two lines";
                char variableName[] = "A";
+               SciErr sciErr;
 
                /* Write it into Scilab's memory */
-               createNamedMatrixOfString(pvApiCtx, variableName, row, col, myMatrixOfString);
+               sciErr = createNamedMatrixOfString(pvApiCtx, variableName, row, col, myMatrixOfString);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
                /*
                 * Prior to Scilab 5.2
                 * C2F(cwritechain)(variableName, &sizeOfMyString  , myString, strlen(variableName), sizeOfMyString); 
@@ -64,12 +70,19 @@ int main(void)
                int row = 2, col = 2; /* Size of the matrix */
                /* Declare the string */
                char **myMatrixOfStringB = (char**)malloc(sizeof(char*) * row * col);
+               SciErr sciErr;
+
                myMatrixOfStringB[0]="My";
                myMatrixOfStringB[1]="String";
                myMatrixOfStringB[2]="Great";
                myMatrixOfStringB[3]=";)";
                char variableNameB[] = "B";
-               createNamedMatrixOfString(pvApiCtx, variableNameB, row, col, myMatrixOfStringB);
+               sciErr = createNamedMatrixOfString(pvApiCtx, variableNameB, row, col, myMatrixOfStringB);
+               if(sciErr.iErr)
+               {
+                       printError(&sciErr, 0);
+               }
+
 
                printf("\n");
                printf("Display from Scilab of B:\n");
@@ -87,19 +100,35 @@ int main(void)
                        int* piAddr     = NULL;
                        int* piLen      = NULL;
                        char** pstData  = NULL;
+                       SciErr sciErr;
 
                        //fisrt call to retrieve dimensions
-                       readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved,&iRows, &iCols, NULL, NULL);
+                       sciErr = readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved,&iRows, &iCols, NULL, NULL);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
                        piLen = (int*)malloc(sizeof(int) * iRows * iCols);
                        //second call to retrieve length of each string
-                       readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved, &iRows, &iCols, piLen, NULL);
+                       sciErr = readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved, &iRows, &iCols, piLen, NULL);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
                        pstData = (char**)malloc(sizeof(char*) * iRows * iCols);
                        for(i = 0 ; i < iRows * iCols ; i++)
                                {
                                        pstData[i] = (char*)malloc(sizeof(char) * (piLen[i] + 1));//+ 1 for null termination
                                }
                        //third call to retrieve data
-                       readNamedMatrixOfString(pvApiCtx, variableToBeRetrieved, &iRows, &iCols, piLen, pstData);
+                       sciErr = readNamedMatrixOfString(pvApiCtx, variableToBeRetrieved, &iRows, &iCols, piLen, pstData);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
 
                        printf("\n");
                        printf("Load and display of A:\n");
@@ -133,19 +162,35 @@ int main(void)
                        int* piAddr     = NULL;
                        int* piLen      = NULL;
                        char** pstData  = NULL;
+                       SciErr sciErr;
 
                        //fisrt call to retrieve dimensions
-                       readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved,&iRows, &iCols, NULL, NULL);
+                       sciErr = readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved,&iRows, &iCols, NULL, NULL);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
                        piLen = (int*)malloc(sizeof(int) * iRows * iCols);
                        //second call to retrieve length of each string
-                       readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved, &iRows, &iCols, piLen, NULL);
+                       sciErr = readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved, &iRows, &iCols, piLen, NULL);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
                        pstData = (char**)malloc(sizeof(char*) * iRows * iCols);
                        for(i = 0 ; i < iRows * iCols ; i++)
                                {
                                        pstData[i] = (char*)malloc(sizeof(char) * (piLen[i] + 1));//+ 1 for null termination
                                }
                        //third call to retrieve data
-                       readNamedMatrixOfString(pvApiCtx, variableToBeRetrieved, &iRows, &iCols, piLen, pstData);
+                       sciErr = readNamedMatrixOfString(pvApiCtx, variableToBeRetrieved, &iRows, &iCols, piLen, pstData);
+                       if(sciErr.iErr)
+                       {
+                               printError(&sciErr, 0);
+                       }
+
 
                        printf("\n");
                        printf("Load and display of B:\n");                     
index fdfd7fe..49048ef 100644 (file)
 int B[]={0,0,0,0,1,0,0,1};   /* Declare the matrix */
 int rowB=2, colB=4; /* Size of the matrix */
 char variableNameB[] = "B";
+SciErr sciErr;
 
 /* Write it into Scilab's memory */
-createNamedMatrixOfBoolean(pvApiCtx, variableNameB, rowB, colB, B);
+sciErr = createNamedMatrixOfBoolean(pvApiCtx, variableNameB, rowB, colB, B);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 /*
  * Prior to Scilab 5.2:
  * C2F(cwritebmat)(variableNameB, &rowB, &colB, B, strlen(variableNameB)); 
@@ -74,9 +80,14 @@ int i = 0, j = 0;
 int *matrixOfBooleanB = NULL; /* Int instead of double */
 
 char variableToBeRetrievedB[] = "B";
-
+SciErr sciErr;
 /* First, retrieve the size of the matrix */
-readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
+sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 /*
  * Prior to Scilab 5.2:
  * C2F(cmatbptr)(variableToBeRetrievedB, &rowB_, &colB_, &lp_, strlen(variableToBeRetrievedB));
@@ -86,7 +97,12 @@ readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL)
 matrixOfBooleanB=(int*)malloc((rowB_*colB_)*sizeof(int));
 
 /* Load the matrix */
-readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfBooleanB);
+sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfBooleanB);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 /*
  * Prior to Scilab 5.2:
  * C2F(creadbmat)(variableToBeRetrievedB,&rowB_,&colB_,matrixOfBooleanB,strlen(variableToBeRetrievedB) );
index 25126c9..7974c7e 100644 (file)
@@ -64,9 +64,14 @@ double B_img[]={1,0.233,-1,-0.2,0.5,42,-23,123};   /* Declare the matrix */
 
 int rowB=2, colB=4; /* Size of the matrix */
 char variableNameB[] = "B";
+SciErr sciErr;
 
 /* Write it into Scilab's memory */
-createNamedComplexMatrixOfDouble(pvApiCtx,variableNameB,rowB,colB, B, B_img);
+sciErr = createNamedComplexMatrixOfDouble(pvApiCtx,variableNameB,rowB,colB, B, B_img);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
 
 /*
  * Prior to Scilab 5.2:
@@ -84,9 +89,14 @@ int i = 0,j = 0;
 double *matrixOfComplexB = NULL;
 double *matrixOfComplexB_img = NULL;
 char variableToBeRetrievedB[] = "B";
+SciErr sciErr;
 
 /* First, retrieve the size of the matrix */
 readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL, NULL);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
 
 /*
  * Prior to Scilab 5.2:
@@ -98,7 +108,12 @@ matrixOfComplexB = (double*)malloc((rowB_*colB_)*sizeof(double));
 matrixOfComplexB_img = (double*)malloc((rowB_*colB_)*sizeof(double));
 
 /* Load the matrix */
-readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfComplexB, matrixOfComplexB_img);
+sciErr = readNamedComplexMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfComplexB, matrixOfComplexB_img);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 
 /*
  * Prior to Scilab 5.2:
index 4437cf0..b96e81a 100644 (file)
 double B[] = {1,3,4,9,2,8,3,2};   /* Declare the matrix */
 int rowB = 2, colB = 4; /* Size of the matrix */
 char variableNameB[] = "B";
+SciErr sciErr;
 
 /*
  * Write it into Scilab's memory 
  */
-createNamedMatrixOfDouble(pvApiCtx,variableNameB,rowB,colB, B); /* pvApiCtx is a global variable */
+sciErr = createNamedMatrixOfDouble(pvApiCtx,variableNameB,rowB,colB, B); /* pvApiCtx is a global variable */
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 /*
  * Prior to Scilab 5.2:
  * C2F(cwritemat)(variableNameB, &rowB, &colB, B, strlen(variableNameB));
@@ -79,10 +85,15 @@ int rowB_ = 0, colB_ = 0, lp_ = 0;
 double *matrixOfDoubleB = NULL;
 int i = 0, j = 0;
 char variableToBeRetrievedB[] = "B";
-
+SciErr sciErr;
 
 /* First, retrieve the size of the matrix */
-readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
+sciErr = readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 /* 
  * Prior to Scilab 5.2:
  * C2F(cmatptr)(variableToBeRetrievedB, &rowB_, &colB_, &lp_, strlen(variableToBeRetrievedB));
@@ -93,7 +104,12 @@ readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
 matrixOfDoubleB = (double*)malloc((rowB_*colB_)*sizeof(double));
 
 /* Load the matrix */
-readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfDoubleB);
+sciErr = readNamedMatrixOfDouble(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfDoubleB);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 /* 
  * Prior to Scilab 5.2:
  * C2F(creadmat)(variableToBeRetrievedB,&rowB_,&colB_,matrixOfDoubleB,strlen(variableToBeRetrievedB) );
index fa00614..499cb55 100644 (file)
@@ -54,9 +54,15 @@ int row = 1, col = 1; /* Size of the matrix */
 char **myMatrixOfString = (char**)malloc(sizeof(char*) * row * col);
 myMatrixOfString[0]="my Message";
 char variableName[] = "A";
+SciErr sciErr;
 
 /* Write it into Scilab's memory */
-createNamedMatrixOfString(pvApiCtx, variableName, row, col, myMatrixOfString);
+sciErr = createNamedMatrixOfString(pvApiCtx, variableName, row, col, myMatrixOfString);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 /*
  * Prior to Scilab 5.2
  * C2F(cwritechain)(variableName, &sizeOfMyString  , myString, strlen(variableName), sizeOfMyString); 
@@ -78,19 +84,34 @@ int i,j;
 int* piAddr     = NULL;
 int* piLen      = NULL;
 char** pstData  = NULL;
+SciErr sciErr;
 
 //fisrt call to retrieve dimensions
-readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved,&iRows, &iCols, NULL, NULL);
+sciErr = readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved,&iRows, &iCols, NULL, NULL);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 piLen = (int*)malloc(sizeof(int) * iRows * iCols);
 //second call to retrieve length of each string
-readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved, &iRows, &iCols, piLen, NULL);
+sciErr = readNamedMatrixOfString(pvApiCtx,variableToBeRetrieved, &iRows, &iCols, piLen, NULL);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
+
 pstData = (char**)malloc(sizeof(char*) * iRows * iCols);
 for(i = 0 ; i < iRows * iCols ; i++)
        {
                pstData[i] = (char*)malloc(sizeof(char) * (piLen[i] + 1));//+ 1 for null termination
        }
 //third call to retrieve data
-readNamedMatrixOfString(pvApiCtx, variableToBeRetrieved, &iRows, &iCols, piLen, pstData);
+sciErr = readNamedMatrixOfString(pvApiCtx, variableToBeRetrieved, &iRows, &iCols, piLen, pstData);
+if(sciErr.iErr)
+{
+       printError(&sciErr, 0);
+}
 
 printf("\n");
 printf("Load and display of A:\n");
index 910ef97..328a58e 100644 (file)
@@ -66,8 +66,10 @@ c     .     every thing can be inserted in a list
       elseif(fin.eq.3) then
 c     .  extraction
          if(icall.ne.4) then
-            if(rhs.eq.1) then
+            if(rhs.le.1) then
 c     .     a() -->a
+               if (rhs.eq.0) rhs=rhs+1
+               call ref2val
                goto 81
             endif
             nt=1
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_6816.dia.ref b/scilab/modules/core/tests/nonreg_tests/bug_6816.dia.ref
new file mode 100644 (file)
index 0000000..3ede5bb
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2005-2010 - INRIA - Serge.Steer@inria.fr
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug6816 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6816
+//
+// <-- Short Description -->
+//incoherent extraction when there is no index M()
+M=33;l=list(M);
+if or(M()<>M) then bugmes();quit;end
+if or(l(1)()<>M) then bugmes();quit;end
+M='xxx';l=list(M);
+if or(M()<>M) then bugmes();quit;end
+if or(l(1)()<>M) then bugmes();quit;end
+M=%s+1;l=list(M);
+if or(M()<>M) then bugmes();quit;end
+if or(l(1)()<>M) then bugmes();quit;end
+M=tlist('foo');l=list(M);
+if or(M()<>M) then bugmes();quit;end
+if or(l(1)()<>M) then bugmes();quit;end
+clear M
+M.a=33;;l=list(M);
+if or(M()<>M) then bugmes();quit;end
+if or(l(1)()<>M) then bugmes();quit;end
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_6816.tst b/scilab/modules/core/tests/nonreg_tests/bug_6816.tst
new file mode 100644 (file)
index 0000000..4430ee8
--- /dev/null
@@ -0,0 +1,37 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2005-2010 - INRIA - Serge.Steer@inria.fr
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug6816 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=6816
+//
+// <-- Short Description -->
+//incoherent extraction when there is no index M()
+M=33;l=list(M);
+if or(M()<>M) then pause,end
+if or(l(1)()<>M) then pause,end
+
+M='xxx';l=list(M);
+if or(M()<>M) then pause,end
+if or(l(1)()<>M) then pause,end
+
+M=%s+1;l=list(M);
+if or(M()<>M) then pause,end
+if or(l(1)()<>M) then pause,end
+
+
+M=tlist('foo');l=list(M);
+if or(M()<>M) then pause,end
+if or(l(1)()<>M) then pause,end
+
+clear M
+M.a=33;;l=list(M);
+if or(M()<>M) then pause,end
+if or(l(1)()<>M) then pause,end
index 43f6a36..be4775d 100644 (file)
@@ -12,6 +12,9 @@
 
 package org.scilab.modules.hdf5.scilabTypes;
 
+/**
+ * This class provides a wrapping on the Scilab boolean datatype
+ */
 public class ScilabBoolean implements ScilabType {
 
        /* the boolean data */
index c8f6dab..eab9fae 100644 (file)
 
 package org.scilab.modules.hdf5.scilabTypes;
 
+/**
+ * This class provides a wrapping on the Scilab Double datatype<br />
+ * Note that double is the default datatype in Scilab
+ */
 public class ScilabDouble implements ScilabType {
 
        private double[][] realPart;
index 56068aa..a559e07 100644 (file)
@@ -12,6 +12,9 @@
 
 package org.scilab.modules.hdf5.scilabTypes;
 
+/**
+ * This class provides a wrapping on the Scilab Integer datatype
+ */
 public class ScilabInteger implements ScilabType {
 
        private Long[][] data;
@@ -19,9 +22,13 @@ public class ScilabInteger implements ScilabType {
        private boolean bUnsigned;
 
        public enum IntegerType{
+               /** Integer of size 8 */
                TYPE8,
+               /** Integer of size 16 */
                        TYPE16,
+               /** Integer of size 32 */
                        TYPE32,
+               /** Integer of size 64 */
                        TYPE64
                        }
        
index 27e37bf..b42a6cb 100644 (file)
@@ -14,6 +14,9 @@ package org.scilab.modules.hdf5.scilabTypes;
 
 import java.util.ArrayList;
 
+/**
+ * This class provides a wrapping on the Scilab List datatype
+ */
 public class ScilabList extends ArrayList<ScilabType> implements ScilabType {
     public int getHeight() {
                if (isEmpty()) {
index 6140f84..356d79d 100644 (file)
@@ -14,6 +14,9 @@ package org.scilab.modules.hdf5.scilabTypes;
 
 import java.util.ArrayList;
 
+/**
+ * This class provides a wrapping on the Scilab Mlist datatype
+ */
 public class ScilabMList extends ArrayList<ScilabType> implements ScilabType {
    
     public ScilabMList() {
index 1566347..bc5bdf1 100644 (file)
@@ -12,6 +12,9 @@
 
 package org.scilab.modules.hdf5.scilabTypes;
 
+/**
+ * This class provides a wrapping on the Scilab String datatype
+ */
 public class ScilabString implements ScilabType {
 
        private String[][] data;
index 13858d8..59743f8 100644 (file)
@@ -14,6 +14,9 @@ package org.scilab.modules.hdf5.scilabTypes;
 
 import java.util.ArrayList;
 
+/**
+ * This class provides a wrapping on the Scilab TList datatype
+ */
 public class ScilabTList extends ArrayList<ScilabType> implements ScilabType {
 
     public ScilabTList() {
index 83c9361..de4faf5 100644 (file)
@@ -14,27 +14,27 @@ package org.scilab.modules.hdf5.scilabTypes;
 
 import java.io.Serializable;
 
-/*
+/**
  * This interface specifies what is a Scilab types
  */
 public interface ScilabType extends Serializable, Cloneable {
 
     /**
-     * Return the width (number of element) of the stored data
+     * Return the width (number of elements) of the stored data
      *
      * @return the width
         */
        public int getWidth();
        
     /**
-     * Return the height (number of element) of the stored data
+     * Return the height (number of elements) of the stored data
      *
      * @return the height
         */
        public int getHeight();
        
     /**
-     * Display the matrix
+     * Display the data
      *
      * @return the pretty print
         */
diff --git a/scilab/modules/matio/tests/nonreg_tests/bug_5466.dia.ref b/scilab/modules/matio/tests/nonreg_tests/bug_5466.dia.ref
new file mode 100644 (file)
index 0000000..d004ba4
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Vincent COUVERT <vincent.couvert@scilab.org>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 5466 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=5466
+//
+// <-- Short Description -->
+// I met some problems while saving scilab variables in a Matlab data file. Some times, the variables are not written in the data file.
+A = sprand(400,400,0.01);
+B = sprand(100,100,0.1);
+savematfile(TMPDIR + filesep() + "bug_5466.mat","A","B");
+WARNING: Option -v7 added.
+clear
+loadmatfile(TMPDIR + filesep() + "bug_5466.mat","A","B");
+if or(size(A)<>[400 400]) then bugmes();quit;end
+if or(size(B)<>[100 100]) then bugmes();quit;end
+clear
+A = rand(10,10);
+savematfile(TMPDIR + filesep() + "bug_5466.mat","A");
+WARNING: Option -v7 added.
+clear
+loadmatfile(TMPDIR + filesep() + "bug_5466.mat","A");
+if or(size(A)<>[10 10]) then bugmes();quit;end
diff --git a/scilab/modules/matio/tests/nonreg_tests/bug_5466.tst b/scilab/modules/matio/tests/nonreg_tests/bug_5466.tst
new file mode 100644 (file)
index 0000000..4f1349e
--- /dev/null
@@ -0,0 +1,31 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Vincent COUVERT <vincent.couvert@scilab.org>
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 5466 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=5466
+//
+// <-- Short Description -->
+// I met some problems while saving scilab variables in a Matlab data file. Some times, the variables are not written in the data file.
+
+A = sprand(400,400,0.01);
+B = sprand(100,100,0.1);
+savematfile(TMPDIR + filesep() + "bug_5466.mat","A","B");
+clear
+loadmatfile(TMPDIR + filesep() + "bug_5466.mat","A","B");
+
+if or(size(A)<>[400 400]) then pause;end
+if or(size(B)<>[100 100]) then pause;end
+
+clear
+A = rand(10,10);
+savematfile(TMPDIR + filesep() + "bug_5466.mat","A");
+clear
+loadmatfile(TMPDIR + filesep() + "bug_5466.mat","A");
+if or(size(A)<>[10 10]) then pause;end
+                    
\ No newline at end of file