* Improve block parameters errors (types and sizes) reporting. 63/10363/2
Clément DAVID [Wed, 30 Jan 2013 17:17:06 +0000 (18:17 +0100)]
Change-Id: Icc9eab69cf7af9a80442fd510862b6d3d30268c8

scilab/CHANGES_5.4.X
scilab/modules/scicos/macros/scicos_scicos/do_eval.sci
scilab/modules/scicos/macros/scicos_scicos/setvalue.sci

index 96f2bb4..6f91788 100644 (file)
@@ -97,6 +97,8 @@ Xcos
 
 * Add an implicit Fixed-size stop ODE solver : Implicit Runge-Kutta 4(5). Also benefits from the CVode rootfinding feature.
 
+* Improve block parameters errors (types and sizes) reporting.
+
 * Bug #10040 fixed - VARIABLE_DELAY documentation does not fully describe the
                      initial value behavioral.
 
index dfcf7b6..c574f54 100644 (file)
@@ -118,13 +118,16 @@ for %kk=1:%nx
     else
       model=o.model
         if ~isdef(o.gui) | ~or(type(evstr(o.gui) == [13 11])) then
-            uid = o.doc(1)
-            uid = [full_uids uid];
-            
-            html = "<html><body>";
-            html = html + "<em>" + gettext("Evaluation problem: Unknown block") + "</em><br/>";
-            html = html + "</body></html>";
-            warnBlockByUID(uid, html);
+            if length(o.doc) >= 1 then
+                uid = [full_uids o.doc(1)];
+                
+                html = "<html><body>";
+                html = html + "<em>" + gettext("Evaluation problem: Unknown block") + "</em><br/>";
+                html = html + "</body></html>";
+                warnBlockByUID(uid, html);
+            else
+                error("do_eval: " + gettext("Evaluation problem: Unknown block") + " " + o.gui);
+            end
         end
 
       %scicos_prob=%f
index 7b269a7..1496812 100644 (file)
@@ -136,7 +136,7 @@ while %t do
       if and(type(%vv)<>[1 8]) then %nok=-%kk,break,end
       %sz=%typ(2*%kk);if type(%sz)==10 then %sz=evstr(%sz),end
       [%mmmm,%nnnnn]=size(%vv)
-      %ssss=string(%sz(1))+' x '+string(%sz(2))
+      %ssss=string(%sz(1))+'-by-'+string(%sz(2)) + " matrix"
       if %mmmm*%nnnnn==0 then
        if  %sz(1)>=0&%sz(2)>=0&%sz(1)*%sz(2)<>0 then %noooo=%kk,break,end
       else
@@ -183,9 +183,9 @@ while %t do
       if and(type(%vv)<>[1 8]) then %nok=-%kk,break,end
       %sz=%typ(2*%kk);if type(%sz)==10 then %sz=evstr(%sz),end
       if %sz(1)<0 then
-       %ssss='1 x *'
+       %ssss='1-by-n matrix'
       else
-       %ssss='1 x '+string(%sz(1))
+       %ssss='1-by-'+string(%sz(1))+' matrix'
       end
       [%mmmm,%nnnnn]=size(%vv)
       if %mmmm<>1 then %noooo=%kk,break,end,
@@ -199,9 +199,9 @@ while %t do
       if and(type(%vv)<>[1 8]) then %nok=-%kk,break,end
       %sz=%typ(2*%kk);if type(%sz)==10 then %sz=evstr(%sz),end
       if %sz(1)<0 then
-       %ssss='* x 1'
+        %ssss='m-by-1 matrix'
       else
-       %ssss=string(%sz(1))+' x 1'
+        %ssss=string(%sz(1))+'-by-1 matrix'
       end
       [%mmmm,%nnnnn]=size(%vv)
       if %nnnnn<>1 then %noooo=%kk,break,end,
@@ -231,7 +231,7 @@ while %t do
       if typeof(%vv)<>'rational' then %noooo=-%kk,break,end
       %sz=%typ(2*%kk);if type(%sz)==10 then %sz=evstr(%sz),end
       [%mmmm,%nnnnn]=size(%vv(2))
-      %ssss=string(%sz(1))+' x '+string(%sz(2))
+      %ssss=string(%sz(1))+'-by-'+string(%sz(2))
       if %mmmm*%nnnnn==0 then
        if  %sz(1)>=0&%sz(2)>=0&%sz(1)*%sz(2)<>0 then %noooo=%kk,break,end
       else
@@ -242,26 +242,29 @@ while %t do
       //accept all
     else
       str = gettext("%s: Type %s is not implemented.\n");
-      mess = msprintf(str, 'setvalue', %typ(2*%kk-1));
-      warnBlockByUID(arg1.doc(1), mess); // arg1 is from the block interface function
-      error(mess);
+      mess = msprintf(str, arg1.gui + '(''set'')', %typ(2*%kk-1));
+      if length(arg1.doc) > 0 then
+        warnBlockByUID(arg1.doc(1), mess); // arg1 is from the block interface function
+      else
+        error(mess);
+      end
     end
     execstr('%'+string(%kk)+'=%vv')
     clear %vv
   end
   if %noooo>0 then
-    str = gettext("%s: invalid dimension for ''%s'', waiting for %s");
-    mess = msprintf(str, 'setvalue', %lables(%noooo), %ssss);
+    str = gettext("%s: Wrong size for block parameter ''%s'': %s expected, getting %s");
+    mess = msprintf(str, arg1.gui + '(''set'')', %lables(%noooo), %ssss, %ini(%noooo));
     if length(arg1.doc) > 0 then
         warnBlockByUID(arg1.doc(1), mess); // arg1 is from the block interface function
-    else
+    else    
         disp(mess);
     end
     %ini=%str
     %ok=%f;break
   elseif %noooo<0 then
-    str = gettext("%s: incorrect type for ''%s'', getting %s");
-    mess = msprintf(str, 'setvalue', %lables(-%noooo), %typ(-2*%noooo-1));
+    str = gettext("%s: Wrong type for block parameter ''%s'': %s(%s) expected, getting %s");
+    mess = msprintf(str, arg1.gui + '(''set'')', %lables(-%noooo), %typ(-2*%noooo-1), string(%typ(-2*%noooo)), %ini(-%noooo));
     if length(arg1.doc) > 0 then
         warnBlockByUID(arg1.doc(1), mess); // arg1 is from the block interface function
     else