diff scripts/control/system/syscont.m @ 4460:cef48c4b902d

[project @ 2003-07-11 18:37:48 by jwe]
author jwe
date Fri, 11 Jul 2003 18:37:48 +0000
parents 22bd65326ec1
children b8105302cfe8
line wrap: on
line diff
--- a/scripts/control/system/syscont.m
+++ b/scripts/control/system/syscont.m
@@ -41,48 +41,51 @@
 
 function [csys, Acd, Ccd] = syscont (sys)
 
-  save_empty = empty_list_elements_ok;
-  empty_list_elements_ok = 1;
+  save_warn_empty_list_elements = warn_empty_list_elements;
+  unwind_protect
+    warn_empty_list_elements = 0;
 
-  if (nargin != 1)
-    usage("[csys,Acd,Ccd,Dcd] = syscont(sys)");
-  elseif (!isstruct(sys))
-    error("sys must be in system data structure form");
-  endif
+    if (nargin != 1)
+      usage("[csys,Acd,Ccd,Dcd] = syscont(sys)");
+    elseif (!isstruct(sys))
+      error("sys must be in system data structure form");
+    endif
 
-  sys = sysupdate (sys, "ss");
-  [n_tot, st_c, st_d, y_c, y_d] = __syscont_disc__ (sys);        # get ranges
+    sys = sysupdate (sys, "ss");
+    [n_tot, st_c, st_d, y_c, y_d] = __syscont_disc__ (sys);        # get ranges
 
-  ## assume there's nothing there; build partitions as appropriate
-  Acc = Acd = Bcc = Ccc = Ccd = Dcc = [];
+    ## assume there's nothing there; build partitions as appropriate
+    Acc = Acd = Bcc = Ccc = Ccd = Dcc = [];
 
-  if(isempty(st_c) & isempty(y_c))
-    error("syscont: expecting continous states and/or continous outputs");
-  elseif (isempty(st_c))
-    warning("syscont: no continuous states");
-  elseif(isempty(y_c))
-    warning("syscont: no continuous outputs");
-  endif
+    if(isempty(st_c) & isempty(y_c))
+      error("syscont: expecting continous states and/or continous outputs");
+    elseif (isempty(st_c))
+      warning("syscont: no continuous states");
+    elseif(isempty(y_c))
+      warning("syscont: no continuous outputs");
+    endif
 
-  [sys_a, sys_b, sys_c, sys_d ] = sys2ss(sys);
-  [sys_stname, sys_inname, sys_outname] = sysgetsignals(sys);
-  [sys_n, sys_nz, sys_m, sys_p] = sysdimensions(sys);
-  if(!isempty(st_c))
-    Acc = sys_a(st_c,st_c);
-    stname = sys_stname(st_c);
-    Bcc = sys_b(st_c,:);
-    Ccc = sys_c(y_c,st_c);
-    Acd = sys_a(st_c,st_d);
-  else
-    stname=[];
-  endif
-  outname = sys_outname(y_c);
-  Dcc = sys_d(y_c,:);
-  Ccd = sys_c(y_c,st_d);
-  inname = sys_inname;
+    [sys_a, sys_b, sys_c, sys_d ] = sys2ss(sys);
+    [sys_stname, sys_inname, sys_outname] = sysgetsignals(sys);
+    [sys_n, sys_nz, sys_m, sys_p] = sysdimensions(sys);
+    if(!isempty(st_c))
+      Acc = sys_a(st_c,st_c);
+      stname = sys_stname(st_c);
+      Bcc = sys_b(st_c,:);
+      Ccc = sys_c(y_c,st_c);
+      Acd = sys_a(st_c,st_d);
+    else
+      stname=[];
+    endif
+    outname = sys_outname(y_c);
+    Dcc = sys_d(y_c,:);
+    Ccd = sys_c(y_c,st_d);
+    inname = sys_inname;
 
-  csys = ss2sys(Acc,Bcc,Ccc,Dcc,0,sys_n,0,stname,inname,outname);
+    csys = ss2sys(Acc,Bcc,Ccc,Dcc,0,sys_n,0,stname,inname,outname);
 
-  empty_list_elements_ok = save_empty;
+  unwind_protect_cleanup
+    warn_empty_list_elements = save_warn_empty_list_elements;
+  end_unwind_protect
 
 endfunction