Mercurial > hg > octave-lyh
changeset 3414:f6c1c9deb22a
[project @ 2000-01-10 16:43:05 by hodelas]
sysidx now calls listidx to identify signal indices.
author | hodelas |
---|---|
date | Mon, 10 Jan 2000 16:43:05 +0000 |
parents | 604ede10160f |
children | 48aa44151317 |
files | scripts/control/is_signal_list.m scripts/control/listidx.m scripts/control/sysidx.m |
diffstat | 3 files changed, 89 insertions(+), 130 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/control/is_signal_list.m +++ b/scripts/control/is_signal_list.m @@ -1,36 +1,32 @@ -## Copyright (C) 1996, 1998 Auburn University. All rights reserved. -## -## This file is part of Octave. -## -## Octave is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by the -## Free Software Foundation; either version 2, or (at your option) any -## later version. -## -## Octave is distributed in the hope that it will be useful, but WITHOUT -## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -## for more details. -## -## You should have received a copy of the GNU General Public License -## along with Octave; see the file COPYING. If not, write to the Free -## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. +# Copyright (C) 1996,1998,2000 Auburn University. All rights reserved. +# +# This file is part of Octave. +# +# Octave is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any +# later version. +# +# Octave is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with Octave; see the file COPYING. If not, write to the Free +# Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -## -*- texinfo -*- -## @deftypefn {Function File} {@var{flg} =} is_signal_list (@var{mylist}) -## Returns true if mylist is a list of individual strings (legal for -## input to @var{syssetsignals}). -## @end deftypefn - -function flg = is_signal_list (mylist) - - flg = is_list(mylist); - if(flg) - for ii=1:length(mylist) - if(!(isstr(nth(mylist,ii)) & rows(nth(mylist,ii)) ==1) ) - flg = 0; - endif - endfor - endif +function flg = is_signal_list(mylist) +# function flg = is_signal_list(mylist) +# returns true if mylist is a list of individual strings. +# +flg = is_list(mylist); +if(flg) + for ii=1:length(mylist) + if(!(isstr(nth(mylist,ii)) & rows(nth(mylist,ii)) ==1) ) + flg = 0; + endif + endfor +endif endfunction
--- a/scripts/control/listidx.m +++ b/scripts/control/listidx.m @@ -1,4 +1,4 @@ -## Copyright (C) 1996, 1998 Auburn University. All rights reserved. +## Copyright (C) 2000 Auburn University. All rights reserved. ## ## This file is part of Octave. ## @@ -16,31 +16,24 @@ ## along with Octave; see the file COPYING. If not, write to the Free ## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. -## -*- texinfo -*- -## @deftypefn {Function File} {[@var{idxvec}, @var{errmsg}] =} listidx(@var{listvar}, @var{strlist}) +## [idxvec, errmsg] = listidx(listvar, strlist) ## return indices of string entries in listvar that match strings in strlist -## @strong{Inputs} -## @table @var -## @item listvar -## list of strings to be searched -## @item strlist -## list of strings to be located in listvar. -## @end table -## @strong{Note} @var{listvar}, @var{strlist} may be passed as strings or -## string matrices; in this case, each entry is processed by deblank() -## prior to searching for the entries of @var{strlist} in @var{listvar}. -## @strong{Outputs} -## @table @var -## @item idxvec -## vector of indices in @var{listvar}; -## @var{listvar}(@var{idxvec}(@var{k})) == @var{strlist}(@var{kk}). -## @item errmsg -## if strlist contains a string not in @var{listvar}, then -## an error message is returned in @var{errmsg}. If only one output -## argument is requested, e.g., @code{idxvec = listidex(listvar, strlist)}, -## then @var{listidx} prints @var{errmsg} to the screen and exits with +## Inputs: +## listvar: list of strings to be searched +## strlist: list of strings to be located in listvar. +## Note: listvar, strlist may be passed as strings or string matrices; +## in this case, each entry is processed by deblank() prior to searching +## for the entries of strlist in listvar. +## Outputs: +## idxvec +## vector of indices in listvar; +## listvar(idxvec(k)) == strlist(kk). +## errmsg +## if strlist contains a string not in listvar, then +## an error message is returned in errmsg. If only one output +## argument is requested, e.g., idxvec = listidx(listvar, strlist), +## then listidx prints errmsg to the screen and exits with ## an error. -## @end table ## function [idxvec,errmsg] = listidx(listvar,strlist) @@ -55,7 +48,6 @@ for kk=1:rows(tmp) strlist(kk) = deblank(tmp(kk,:)); endfor - strlist endif if(isstr(listvar)) @@ -66,12 +58,23 @@ endfor endif -if(!is_signal_list(listvar)) error("listvar must be a list of strings"); -elseif(!is_signal_list(strlist)) error("strlist must be a list of strings"); +## initialize size of idxvec (for premature return) +idxvec = zeros(length(strlist),1); + +errmsg = ""; +if(!is_signal_list(listvar)) + errmsg = "listvar must be a list of strings"; +elseif(!is_signal_list(strlist)) + errmsg = "strlist must be a list of strings"; +endif + +if(length(errmsg)) + if(nargout < 2) error(errmsg); + else return; + endif endif nsigs = length(listvar); -idxvec = zeros(length(strlist),1); for idx = 1:length(strlist) signame = nth(strlist,idx); for jdx = 1:nsigs
--- a/scripts/control/sysidx.m +++ b/scripts/control/sysidx.m @@ -1,74 +1,34 @@ -## Copyright (C) 1999 Auburn University. All rights reserved. -## -## This file is part of Octave. -## -## Octave is free software; you can redistribute it and/or modify it -## under the terms of the GNU General Public License as published by the -## Free Software Foundation; either version 2, or (at your option) any -## later version. -## -## Octave is distributed in the hope that it will be useful, but WITHOUT -## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -## for more details. -## -## You should have received a copy of the GNU General Public License -## along with Octave; see the file COPYING. If not, write to the Free -## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. - -## idxvec = sysidx(sys,sigtype,signamelist) -## return indices of signals with specified signal names -## inputs: -## sys: OCST system data structure -## sigtype: signal type to be selected: "in", "out", "st" -## signamelist: list of desired signal names -## outputs: -## idxvec: vector of signal indices (appropriate for use with sysprune) - -## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu> - -function idxvec = sysidx (sys, sigtype, signamelist) +function idxvec = sysidx(sys,sigtype,signamelist) +# idxvec = sysidx(sys,sigtype,signamelist) +# return indices of signals with specified signal names +# inputs: +# sys: OCST system data structure +# sigtype: signal type to be selected: "in", "out", "st" +# signamelist: list of desired signal names +# outputs: +# idxvec: vector of signal indices (appropriate for use with sysprune) - if(nargin != 3) usage("idxvec = sysidx(sys,sigtype,signamelist)"); - elseif(!is_struct(sys)) error("sys must be a system data structure"); - elseif(!isstr(sigtype)) error("sigtype must be a string"); - elseif(rows(sigtype) != 1) - error("sigtype (%d x %d) must be a single string", ... - rows(sigtype),columns(sigtype)); - elseif(!is_signal_list(signamelist)) - error("signamelist must be a list of strings"); - endif - - sigtype_list = list("input","output","state"); - sigtnum = 0; - for idx = 1:length(sigtype_list) - thistype = nth(sigtype_list,idx); - if(strcmp(sigtype, thistype(1:length(sigtype)) )) sigtnum = idx; endif - endfor - if(sigtnum == 0) error("Illegal sigtype value = %s\n",sigtype); endif - - syssiglist = sysgetsignals(sys,sigtype); +if(nargin != 3) + usage("idxvec = sysidx(sys,sigtype,signamelist)"); +elseif(!is_struct(sys)) + error("sys must be a system data structure"); +elseif(!isstr(sigtype)) + error("sigtype must be a string"); +elseif(rows(sigtype) != 1) + error("sigtype (%d x %d) must be a single string", ... + rows(sigtype),columns(sigtype)); +end - for idx = 1:length(signamelist) - signame = nth(signamelist,idx); - idxvec(idx) = 0; - nsigs = sysdimensions(sys,sigtype); - for jdx = 1:nsigs - ## printf("idx=%d jdx=%d signame=-%s- thissig=-%s-\n",idx,jdx,signame, ... - ## sysgetsignals(sys,sigtype,jdx,1)); - if(strcmp(signame,sysgetsignals(sys,sigtype,jdx,1))) - if(idxvec(idx) != 0) - warning("Duplicate system input %s (%d,%d)\n", ... - sysgetsignals(sys,sigtype,jdx,1),jdx,idxvec(idx)); - else - idxvec(idx) = jdx; - endif - endif - endfor - if(idxvec(idx) == 0) - error("Did not find %s %s",nth(sigtype_list,sigtnum),signame); - endif - endfor +# extract correct set of signal names values +[idxvec,msg] = listidx( list("in","out","st","yd"), sigtype); +if(msg) + error("Illegal sigtype=%s",sigtype); +endif +syssiglist = sysgetsignals(sys,sigtype); +[idxvec,msg] = listidx(syssiglist,signamelist); +if(length(msg)) + error("sysidx(sigtype=%s): %s",sigtype, strrep(msg,"strlist","signamelist")); +end endfunction