home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l455 / 2.ddi / MUTOOLS2.DI$ / PASS2.M < prev    next >
Encoding:
Text File  |  1993-03-11  |  2.2 KB  |  81 lines

  1. %function [od,odl,fromsys,gains,er] = pass2(i,ard,arl,names,namelen,sysd)
  2. % this works on the data between colons on a INPUT_TO_SYS, determining
  3. % which system the outputs come from (FROMSYS), which particular
  4. % outputs (OD), and the scalar gain (GAINS).
  5.  
  6. function [od,odl,fromsys,gains,er]=pass2(i,ard,arl,names,namelen,sysdata)
  7.  er = 0;
  8.  maxl = 0;
  9.  od = [];
  10.  odl = [];
  11.  fromsys = [];
  12.  gains = [];
  13.  [num,dummy] = size(ard);
  14.  var = ard(i,1:arl(i));
  15.  lvar = length(var);
  16.  signs = find(var=='+'|var=='-');
  17.  signs = [signs length(var)+1];
  18.  for j=1:length(signs)-1
  19.    if var(signs(j)) == '+'
  20.      pm = 1;
  21.    else
  22.      pm = -1;
  23.    end
  24.    data = var(signs(j)+1:signs(j+1)-1);
  25.    anymult = find(data=='*');
  26.    if isempty(anymult)
  27.      gains = [gains ; pm];
  28.    elseif length(anymult) > 1
  29.      er = 1;
  30.      return
  31.    else
  32. % test to see if const premult the input or output
  33.      if chstr(data(1:anymult-1)) == 1
  34.       er = 4;
  35.       return
  36.      end
  37.      gains = [gains ; pm*eval(data(1:anymult-1))];
  38.      data = data(anymult+1:length(data));
  39.    end
  40.    lparen = find(data=='(');
  41.    rparen = find(data==')');
  42.    if length(lparen) == 0 & length(rparen) == 0
  43.      [iloc,finderr] = findsys(names,namelen,data);
  44.      if finderr == 1
  45.        er = 5;
  46.        return
  47.      end
  48.      fromsys = [fromsys ; iloc];
  49.      tmp = ['1:' int2str(sysdata(2,iloc)) ];
  50.      od = [od ; [tmp mtblanks(3*lvar-length(tmp))] ];
  51.      odl = [odl ; length(tmp)];
  52.      if length(tmp) > maxl
  53.        maxl = length(tmp);
  54.      end
  55.    elseif length(lparen) == 1 & length(rparen) == 1
  56.      if (rparen(1) == length(data)) & (lparen(1) < rparen(1))
  57.        [iloc,finderr] = findsys(names,namelen,data(1:lparen(1)-1));
  58.        if finderr == 1
  59.          er = 5;
  60.          return
  61.        end
  62.        fromsys = [fromsys ; iloc];
  63.        tmp = data(lparen(1)+1:rparen(1)-1);
  64.        od = [od ; [tmp mtblanks(3*lvar-length(tmp))] ];
  65.        odl = [odl ; length(tmp)];
  66.        if length(tmp) > maxl
  67.          maxl = length(tmp);
  68.        end
  69.      else
  70.        er = 2;
  71.        return
  72.      end
  73.    else
  74.      er = 3;
  75.      return
  76.    end
  77.  end
  78.  od = od(:,1:maxl);
  79. %
  80. % Copyright MUSYN INC 1991,  All Rights Reserved
  81.