Mercurial > hg > octave-thorsten
diff scripts/control/system/sysidx.m @ 3430:65b3519ac3a1
[project @ 2000-01-14 03:44:03 by jwe]
author | jwe |
---|---|
date | Fri, 14 Jan 2000 03:50:02 +0000 (2000-01-14) |
parents | |
children | a892190f4977 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scripts/control/system/sysidx.m @@ -0,0 +1,54 @@ +## 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. + +## 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) + +function idxvec = sysidx (sys, sigtype, signamelist) + + 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) + [nr, nc] = size (sigtype); + error ("sigtype (%d x %d) must be a single string", nr, nc); + endif + + ## extract correct set of signal names values + [idxvec, msg] = listidx (list ("in", "out", "st", "yd"), sigtype); + if (msg) + error ("invalid 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")); + endif + +endfunction