Mercurial > hg > octave-thorsten
view scripts/control/sysidx.m @ 3240:2e74d8aa1a20
[project @ 1999-04-07 18:33:23 by jwe]
author | jwe |
---|---|
date | Wed, 07 Apr 1999 18:34:20 +0000 |
parents | 98e15955107e |
children | 6dd06d525de6 |
line wrap: on
line source
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); 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 endfunction