bug 8177 format was modified by some macros and not restored 18/2218/2
Allan CORNET [Wed, 6 Oct 2010 15:03:36 +0000 (17:03 +0200)]
Change-Id: Ia3ef7c895af96d1a7be39689fbe53be0c699ec4d

scilab/CHANGES_5.3.X
scilab/modules/cacsd/macros/trfmod.sci
scilab/modules/core/tests/nonreg_tests/bug_8177.tst [new file with mode: 0644]
scilab/modules/helptools/macros/xmltoformat.sci
scilab/modules/scicos/macros/scicos_scicos/cos2xml.sci

index 29f7fc8..7e4711f 100644 (file)
@@ -121,6 +121,8 @@ Bug Fixes:
 
 * bug 8164 fixed - Typo in the fileparts help page.
 
+* bug 8177 fixed - format mode was modified by some macros and not restored.
+
 * bug 8202 fixed - Typo in the the localization.
 
 
index e7ee023..f05107a 100644 (file)
@@ -1,15 +1,15 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) INRIA - 
-// 
+// Copyright (C) INRIA -
+//
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
-// are also available at    
+// are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
 
 function h=trfmod(h,job)
 // hm=trfmod(h [,job])
-// To visualize the pole-zero structure of a SISO transfer function h 
+// To visualize the pole-zero structure of a SISO transfer function h
 //     job='p' : visualization of polynomials (default)
 //     job='f' : visualization of natural frequencies and damping
 //
@@ -41,19 +41,21 @@ function h=trfmod(h,job)
   else
     error(msprintf(gettext("%s: Wrong type for input argument #%d: Linear state space or a transfer function expected.\n"),"trfmod",1))
   end
-  
-  
+
+
   //
-  format('v',15)
+  ft = format();
+  format('v', 15);
+  
   [lhs,rhs]=argn(0)
   if rhs==1 then job='p',end
   //
   if type(h('num'))==1 then h('num')=poly(h('num'),varn(h('den')),'c'),end
   if type(h('den'))==1 then h('den')=poly(h('den'),varn(h('num')),'c'),end
-  
+
   var=varn(h('num')),nv=length(var);
   while part(var,nv)==' ' then nv=nv-1,end;var=part(var,1:nv);
-  
+
   fnum=polfact(h('num'))
   fden=polfact(h('den'))
   g=coeff(fnum(1))/coeff(fden(1))
@@ -67,12 +69,12 @@ function h=trfmod(h,job)
       num=[num;pol2str(p)]
     else
       if degree(p)==2 then
-       p=coeff(p)
-       omeg=sqrt(p(1))
-       xsi=p(2)/(2*omeg)
-       num=[num;string(omeg)+'    '+string(xsi)]
+    p=coeff(p)
+    omeg=sqrt(p(1))
+    xsi=p(2)/(2*omeg)
+    num=[num;string(omeg)+'    '+string(xsi)]
       else
-       num=[num;string(-coeff(p,0))]
+    num=[num;string(-coeff(p,0))]
       end
     end
   end
@@ -84,18 +86,18 @@ function h=trfmod(h,job)
       den=[den;pol2str(p)]
     else
       if degree(p)==2 then
-       p=coeff(p)
-       omeg=sqrt(p(1))
-       xsi=p(2)/(2*omeg)
-       den=[den;string(omeg)+'    '+string(xsi)]
+    p=coeff(p)
+    omeg=sqrt(p(1))
+    xsi=p(2)/(2*omeg)
+    den=[den;string(omeg)+'    '+string(xsi)]
       else
-       den=[den;string(-coeff(p,0))]
+    den=[den;string(-coeff(p,0))]
       end
     end
   end
-  
+
   txt=[_("Gain :");string(g);_("Numerator :");num;_("Denominator :");den]
-  
+
   id=[]
   if job=='p' then
     tit=[gettext("Irreducible Factors of transfer function (click below)")]
@@ -107,7 +109,7 @@ function h=trfmod(h,job)
     id=find(t==_("Denominator :"))
   end
   txt=t;
-  
+
   tgain=txt(2)
   tnum=txt(4:id-1)
   tden=txt(id+1:prod(size(txt)))
@@ -119,23 +121,23 @@ function h=trfmod(h,job)
     if job=='p' then
       t=' ';
       for k=1:length(txt),
-       tk=part(txt,k),
-       if tk<>' ' then t=t+tk,end
+    tk=part(txt,k),
+    if tk<>' ' then t=t+tk,end
       end
       f=1;if t<>' ' then f=evstr(t),end
     else
       if txt==part(' ',1:length(txt)) then
-       f=1
+    f=1
       else
-       f=evstr(txt)
-       select prod(size(f))
-       case 1 then
-         f=poly(f,var)
-       case 2 then
-         f=poly([f(1)*f(1), 2*f(1)*f(2),1],var,'c')
-       else 
-         error(msprintf(gettext("%s: Incorrect answer.\n"),"trfmod"))
-       end
+    f=evstr(txt)
+    select prod(size(f))
+    case 1 then
+      f=poly(f,var)
+    case 2 then
+      f=poly([f(1)*f(1), 2*f(1)*f(2),1],var,'c')
+    else
+      error(msprintf(gettext("%s: Incorrect answer.\n"),"trfmod"))
+    end
       end
     end
     num=num*f
@@ -148,23 +150,23 @@ function h=trfmod(h,job)
     if job=='p' then
       t=' ';
       for k=1:length(txt),
-       tk=part(txt,k),
-       if tk<>' ' then t=t+tk,end
+    tk=part(txt,k),
+    if tk<>' ' then t=t+tk,end
       end
       f=1;if t<>' ' then f=evstr(t),end
     else
       if txt==part(' ',1:length(txt)) then
-       f=1
+    f=1
       else
-       f=evstr(txt)
-       select prod(size(f))
-       case 1 then
-         f=poly(f,var)
-       case 2 then
-         f=poly([f(1)*f(1), 2*f(1)*f(2),1],var,'c')
-       else 
-         error(msprintf(gettext("%s: Incorrect answer.\n"),"trfmod"))
-       end
+    f=evstr(txt)
+    select prod(size(f))
+    case 1 then
+      f=poly(f,var)
+    case 2 then
+      f=poly([f(1)*f(1), 2*f(1)*f(2),1],var,'c')
+    else
+      error(msprintf(gettext("%s: Incorrect answer.\n"),"trfmod"))
+    end
       end
     end
     den=den*f
@@ -172,6 +174,6 @@ function h=trfmod(h,job)
   x=evstr(tgain)/coeff(den,degree(den))
   h('num')=num*x
   h('den')=den/coeff(den,degree(den))
-  format(10)
+  format(ft(2),ft(1));
   if flag=='lss' then h=tf2ss(h),end
 endfunction
diff --git a/scilab/modules/core/tests/nonreg_tests/bug_8177.tst b/scilab/modules/core/tests/nonreg_tests/bug_8177.tst
new file mode 100644 (file)
index 0000000..6686314
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - DIGITEO - Allan CORNET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- Non-regression test for bug 8079 -->
+//
+// <-- INTERACTIVE TEST -->
+// 
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=8177
+//
+// <-- Short Description -->
+// format mode was modified by some macros and not restored
+
+
+ft1 = format();
+exec("SCI/contrib/toolbox_skeleton/builder.sce");
+ft2 = format();
+if ~and(ft1 == ft2) then pause, end
+
+ft3 = format();
+W = ssrand(1,1,6);
+r = trfmod(W, "p");
+ft4 = format();
+if ~and(ft3 == ft4) then pause, end
index 1c0400b..61edfe6 100644 (file)
@@ -2,6 +2,7 @@
 // Copyright (C) 2008 INRIA - Pierre MARECHAL <pierre.marechal@inria.fr>
 // Copyright (C) 2008-2010 DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
 // Copyright (C) 2009 DIGITEO - Vincent COUVERT <vincent.couvert@scilab.org>
+// Copyright (C) 2010 DIGITEO - Allan CORNET
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -1037,8 +1038,10 @@ function xmlfiles = x2f_get_xml_files(directory)
 
     if xmlpaths<>[] then
         infos = fileinfo(xmlpaths);
+        ft = format();
         format(20);
         lmt   = string(infos(:,7));
+        format(ft(2),ft(1));
     else
         lmt   = [];
     end
index 0797a7b..5bb70da 100644 (file)
 //
 // See the file ../license.txt
 //
-function [ok,t]=cos2xml(scs_m,name,atomicflag)
- ok=%t;t=[];format(20);
- if argn(2)<3 then atomicflag=%f,end 
- if exists('scicos_scicoslib')==0 then load("SCI/modules/scicos/macros/scicos_scicos/lib") ;,end
+function [ok, t] = cos2xml(scs_m, name, atomicflag)
+ ok = %t;
+ t=[];
+ ft = format();
+ format(20);
+ if argn(2)<3 then atomicflag=%f,end
+ if exists('scicos_scicoslib') ==0 then load("SCI/modules/scicos/macros/scicos_scicos/lib"),end
  exec(loadpallibs,-1) //to load the palettes libraries
  Bn='OBJ';
  tit=scs_m.props.title(1);
  version=scs_m.version
- if exists('supername') then 
+ if exists('supername') then
    Bn=supername+'_',
    if atomicflag then flg='yes'; else flg='no';end
    head=['   <Diagram Name=""'+tit+'"">'
          '   <ScicosVersion Name=""'+version+'"" />'
-        '   <AtomicDiagram Atomic=""'+flg+'"" />']
+         '   <AtomicDiagram Atomic=""'+flg+'"" />']
    tail=['   </Diagram>']
    [%scicos_context,ierr]=script2var(scs_m.props.context,%scicos_context)
  else
    head=['<?xml version=""1.0"" encoding=""UTF-8""?>'
          ' <ScicosModel Name=""'+tit+'"" >'
          '   <Diagram Name=""'+tit+'"">'
-        '   <ScicosVersion Name=""'+version+'"" />']
+         '   <ScicosVersion Name=""'+version+'"" />']
    tail=[
        '    </Diagram>'
        ' </ScicosModel>']
@@ -58,29 +61,29 @@ function [ok,t]=cos2xml(scs_m,name,atomicflag)
    o=objs(k)
    x=getfield(1,o);
    if x(1)=='Block' then
-    //disp('it is block');//pause      
+    //disp('it is block');//pause
     if o.model.sim=='super'|o.model.sim=='csuper'|o.model.sim(1)=='asuper' then
-       supername=name
-       t=[t;
-           '<Block Name=""'+name+'"" >']
-       if o.model.sim(1)=='asuper' then
-         atomicflag=%t;
-         [ok,t1]=cos2xml(o.model.rpar,name,%t);
-       else
-         atomicflag=%f;
-         [ok,t1]=cos2xml(o.model.rpar,name,%f);
-       end
-       if ~ok then t=[];ok=%f;return; end
-       xml_txt=block2xml(o,2,t1,atomicflag)
-       t=[t;
-          xml_txt;
-           '</Block>' ]
+    supername=name
+    t=[t;
+        '<Block Name=""'+name+'"" >']
+    if o.model.sim(1)=='asuper' then
+      atomicflag=%t;
+      [ok,t1]=cos2xml(o.model.rpar,name,%t);
+    else
+      atomicflag=%f;
+      [ok,t1]=cos2xml(o.model.rpar,name,%f);
+    end
+    if ~ok then t=[];ok=%f;return; end
+    xml_txt=block2xml(o,2,t1,atomicflag)
+    t=[t;
+       xml_txt;
+        '</Block>' ]
     else //standard block
       xml_txt=block2xml(o,1);
-       t=[t;
-           '<Block Name=""'+name+'"" >';
-           xml_txt;
-           '</Block>'];
+        t=[t;
+        '<Block Name=""'+name+'"" >';
+        xml_txt;
+        '</Block>'];
     end
    elseif x(1)=='Deleted' then
      t=[t;'   <Deleted Name=""'+name+'""></Deleted>']
@@ -89,7 +92,7 @@ function [ok,t]=cos2xml(scs_m,name,atomicflag)
      t=[t;
         '<Text Name=""'+name+'"" >';
         xml_txt;
-        '</Text>']; 
+        '</Text>'];
    else //links
     xml_txt=block2xml(o);
      t=[t;
@@ -100,7 +103,10 @@ function [ok,t]=cos2xml(scs_m,name,atomicflag)
  end //end of loop on objects
   t=[t;
     '</Objects>'];
-t=[head;'   '+t;tail]
+  t=[head;'   '+t;tail]
+  
+  format(ft(2),ft(1));
+  
 endfunction
 
 function xml_txt=block2xml(o,flag,t1,atomicflag)
@@ -109,61 +115,61 @@ function xml_txt=block2xml(o,flag,t1,atomicflag)
  for i=2:size(x,'*')
    if x(i)=='context' then
      xml_txt=[xml_txt;
-        '   <'+x(1)+' id='''+x(i)+''' >';
-        '      '+xml_subst(sci2exp(o(x(i)),0));
-        '    </'+x(1)+'>'];
+     '   <'+x(1)+' id='''+x(i)+''' >';
+     '      '+xml_subst(sci2exp(o(x(i)),0));
+     '    </'+x(1)+'>'];
    elseif x(1)=='Link'|(x(1)=='params' & x(i)<>'options') then
      xml_txt=[xml_txt;
-        '   <'+x(1)+' id='''+x(i)+''' value='''+sci2exp(o(x(i)),0)+''' />'];
+     '   <'+x(1)+' id='''+x(i)+''' value='''+sci2exp(o(x(i)),0)+''' />'];
    elseif x(i)=='doc'|x(i)=='void'| x(i)=='gui' then
      //S. Steer strcat added because of a bug in sci2exp for functions
      xml_txt=[xml_txt;
-        ' <'+x(i)+' id='''+x(i)+''' value='''+strcat(sci2exp(o(x(i)),0))+''' />'];
+     ' <'+x(i)+' id='''+x(i)+''' value='''+strcat(sci2exp(o(x(i)),0))+''' />'];
    else
      if x(i)<>'model' then
        xml_txt=[xml_txt;
-          ' <'+x(1)+' id='''+x(i)+''' >'];
+       ' <'+x(1)+' id='''+x(i)+''' >'];
      end
      xx=getfield(1,evstr('o.'+x(i)));
      for j=2:size(xx,'*')
-       if x(i)=='model' & xx(j)<>'rpar'         
+       if x(i)=='model' & xx(j)<>'rpar'
        elseif xx(j)=='gr_i' then
-        xml_txt=[xml_txt;
-            '   <'+x(i)+' id='''+xx(j)+'''>';
-            '      '+xml_subst(sci2exp(o(x(i))(xx(j)),0));
-            '   </'+x(i)+'>'];
+     xml_txt=[xml_txt;
+         '   <'+x(i)+' id='''+xx(j)+'''>';
+         '      '+xml_subst(sci2exp(o(x(i))(xx(j)),0));
+         '   </'+x(i)+'>'];
        elseif xx(j)=='exprs' then
-        if flag==2 & atomicflag then
-          xml_txt=[xml_txt;
-              '   <'+x(i)+' id='''+xx(j)+'''>';
-              '       <p>'+xml_subst(sci2exp(o(x(i))(xx(j))(1),90))+'</p>';
-              '   </'+x(i)+'>'];
-        else
-          xml_txt=[xml_txt;
-              '   <'+x(i)+' id='''+xx(j)+'''>';
-              '       <p>'+xml_subst(sci2exp(o(x(i))(xx(j)),90))+'</p>';
-              '   </'+x(i)+'>'];
-        end
+     if flag==2 & atomicflag then
+       xml_txt=[xml_txt;
+           '   <'+x(i)+' id='''+xx(j)+'''>';
+           '       <p>'+xml_subst(sci2exp(o(x(i))(xx(j))(1),90))+'</p>';
+           '   </'+x(i)+'>'];
+     else
+       xml_txt=[xml_txt;
+           '   <'+x(i)+' id='''+xx(j)+'''>';
+           '       <p>'+xml_subst(sci2exp(o(x(i))(xx(j)),90))+'</p>';
+           '   </'+x(i)+'>'];
+     end
        elseif xx(j)=='rpar' & flag==2 then
-        xml_txt=[xml_txt;
-            ' <Block  id=''diagram'' >';
-            '      '+t1;
-            ' </Block>'];
+     xml_txt=[xml_txt;
+         ' <Block  id=''diagram'' >';
+         '      '+t1;
+         ' </Block>'];
        elseif xx(j)=='rpar' then
-        xml_txt=[xml_txt;
-            ' <'+x(1)+' id=''diagram'' >';
-            ' </'+x(1)+'>'];
+     xml_txt=[xml_txt;
+         ' <'+x(1)+' id=''diagram'' >';
+         ' </'+x(1)+'>'];
        elseif xx(j)=='3D' then
-        xml_txt=[xml_txt;
-            '   <'+x(i)+' id='''+xx(j)+''' value='''+sci2exp(o(x(i))(j),0)+''' />'];
+     xml_txt=[xml_txt;
+         '   <'+x(i)+' id='''+xx(j)+''' value='''+sci2exp(o(x(i))(j),0)+''' />'];
        else
-        xml_txt=[xml_txt;
-            '   <'+x(i)+' id='''+xx(j)+''' value='''+xml_subst(strsubst(sci2exp(o(x(i))(xx(j)),0),' ',''))+''' />'];
+     xml_txt=[xml_txt;
+         '   <'+x(i)+' id='''+xx(j)+''' value='''+xml_subst(strsubst(sci2exp(o(x(i))(xx(j)),0),' ',''))+''' />'];
        end
      end
      if x(i)<>'model' then
        xml_txt=[xml_txt;
-          ' </'+x(1)+'>'];
+       ' </'+x(1)+'>'];
      end
    end
  end