home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fb.zip / octave / SCRIPTS.ZIP / scripts.fat / control / sysidx.m < prev    next >
Text File  |  1999-12-24  |  3KB  |  76 lines

  1. ## Copyright (C) 1999 Auburn University. All rights reserved.
  2. ##
  3. ## This file is part of Octave.
  4. ##
  5. ## Octave is free software; you can redistribute it and/or modify it
  6. ## under the terms of the GNU General Public License as published by the
  7. ## Free Software Foundation; either version 2, or (at your option) any
  8. ## later version.
  9. ##
  10. ## Octave is distributed in the hope that it will be useful, but WITHOUT
  11. ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12. ## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13. ## for more details.
  14. ##
  15. ## You should have received a copy of the GNU General Public License
  16. ## along with Octave; see the file COPYING.  If not, write to the Free
  17. ## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
  18. ##
  19. ## Written by A. S. Hodel, a.s.hodel@eng.auburn.edu
  20.  
  21.  
  22. function idxvec = sysidx (sys, sigtype, signamelist)
  23.  
  24.   ## idxvec = sysidx(sys,sigtype,signamelist)
  25.   ## return indices of signals with specified signal names
  26.   ## inputs:
  27.   ##   sys:         OCST system data structure
  28.   ##   sigtype:     signal type to be selected: "in", "out", "st"
  29.   ##   signamelist: list of desired signal names
  30.   ## outputs:
  31.   ##   idxvec: vector of signal indices (appropriate for use with sysprune)
  32.  
  33.   if(nargin != 3)         usage("idxvec = sysidx(sys,sigtype,signamelist)");
  34.   elseif(!is_struct(sys)) error("sys must be a system data structure");
  35.   elseif(!isstr(sigtype)) error("sigtype must be a string");
  36.   elseif(rows(sigtype) != 1) 
  37.               error("sigtype (%d x %d) must be a single string", ...
  38.                 rows(sigtype),columns(sigtype));
  39.   elseif(!is_siglt(signamelist)) 
  40.               error("signamelist must be a list of strings");
  41.   endif
  42.  
  43.   sigtype_list = list("input","output","state");
  44.   sigtnum = 0;
  45.   for idx = 1:length(sigtype_list)
  46.     thistype = nth(sigtype_list,idx);
  47.     if(strcmp(sigtype, thistype(1:length(sigtype)) )) sigtnum = idx; endif
  48.   endfor
  49.   if(sigtnum == 0)  error("Illegal sigtype value = %s\n",sigtype); endif
  50.  
  51.   syssiglist = sysgetsg(sys,sigtype);
  52.  
  53.   for idx = 1:length(signamelist)
  54.     signame = nth(signamelist,idx);
  55.     idxvec(idx) = 0;
  56.     nsigs = sysdimen(sys,sigtype);
  57.     for jdx = 1:nsigs
  58.       ## printf("idx=%d jdx=%d signame=-%s- thissig=-%s-\n",idx,jdx,signame, ...
  59.       ##   sysgetsg(sys,sigtype,jdx,1));
  60.       if(strcmp(signame,sysgetsg(sys,sigtype,jdx,1)))
  61.     if(idxvec(idx) != 0)
  62.       warning("Duplicate system input %s (%d,%d)\n", ...
  63.         sysgetsg(sys,sigtype,jdx,1),jdx,idxvec(idx));
  64.     else
  65.       idxvec(idx) = jdx;
  66.     endif
  67.       endif
  68.     endfor
  69.     if(idxvec(idx) == 0)
  70.       error("Did not find %s %s",nth(sigtype_list,sigtnum),signame);
  71.     endif
  72.   endfor
  73.  
  74.  
  75. endfunction
  76.