home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 October / PCO1097.ISO / FilesBBS / OS2 / NETREXX.ARJ / NETREXX.ZIP / NetRexx / netrexx / lang / Rexx.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-08-03  |  31.9 KB  |  2,965 lines

  1. package netrexx.lang;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Enumeration;
  5. import java.util.Hashtable;
  6.  
  7. public class Rexx implements RexxOperators, Serializable {
  8.    public static final int DefaultDigits = 9;
  9.    public static final byte DefaultForm = 0;
  10.    public static final String Lowers = "abcdefghijklmnopqrstuvwxyz";
  11.    public static final String Uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  12.    public static final String Digits09 = "0123456789";
  13.    public static final char[] Hexes = tochararray(toRexx("0123456789ABCDEFabcdef"));
  14.    static final byte ispos = 1;
  15.    static final byte iszero = 0;
  16.    static final byte isneg = -1;
  17.    static final byte NotaNum = -2;
  18.    static final int MinExp = -999999999;
  19.    static final int MaxExp = 999999999;
  20.    static final int MinArg = -999999999;
  21.    static final int MaxArg = 999999999;
  22.    char[] chars;
  23.    byte ind;
  24.    byte form;
  25.    char[] mant;
  26.    int exp;
  27.    int dig;
  28.    Hashtable coll;
  29.    private static final Rexx $$79 = toRexx("0000");
  30.    private static final Rexx $$81 = new Rexx(0);
  31.    // $FF: renamed from: $0 java.lang.String
  32.    private static final String field_0 = "Rexx.nrx";
  33.  
  34.    public Rexx(char var1) {
  35.       char[] var2 = new char[]{var1};
  36.       Rexx var3 = new Rexx(var2, true);
  37.       this.chars = var3.chars;
  38.       this.ind = var3.ind;
  39.       this.mant = var3.mant;
  40.       this.exp = var3.exp;
  41.       this.dig = var3.dig;
  42.       this.form = var3.form;
  43.    }
  44.  
  45.    public Rexx(char[] var1) {
  46.       char[] var2 = new char[var1.length];
  47.       System.arraycopy(var1, 0, var2, 0, var1.length);
  48.       Rexx var3 = new Rexx(var2, true);
  49.       this.chars = var3.chars;
  50.       this.ind = var3.ind;
  51.       this.mant = var3.mant;
  52.       this.exp = var3.exp;
  53.       this.dig = var3.dig;
  54.       this.form = var3.form;
  55.    }
  56.  
  57.    public Rexx(String var1) {
  58.       this(var1.toCharArray(), true);
  59.    }
  60.  
  61.    public Rexx(String[] var1) {
  62.       this(sa2ca(var1), true);
  63.    }
  64.  
  65.    public Rexx(Rexx var1) {
  66.       this.chars = var1.chars;
  67.       this.ind = var1.ind;
  68.       this.mant = var1.mant;
  69.       this.exp = var1.exp;
  70.       this.dig = var1.dig;
  71.       this.form = var1.form;
  72.       this.coll = null;
  73.    }
  74.  
  75.    public Rexx(boolean var1) {
  76.       this.exp = 0;
  77.       this.dig = 9;
  78.       this.form = 0;
  79.       this.mant = new char[1];
  80.       if (var1) {
  81.          this.mant[0] = '1';
  82.          this.ind = 1;
  83.       } else {
  84.          this.mant[0] = '0';
  85.          this.ind = 0;
  86.       }
  87.  
  88.       this.chars = this.mant;
  89.    }
  90.  
  91.    public Rexx(byte var1) {
  92.       this((int)var1);
  93.    }
  94.  
  95.    public Rexx(short var1) {
  96.       this((int)var1);
  97.    }
  98.  
  99.    public Rexx(int var1) {
  100.       this.exp = 0;
  101.       this.dig = 10;
  102.       this.form = 0;
  103.       if (var1 <= 9 && var1 >= -9) {
  104.          this.mant = new char[1];
  105.          if (var1 > 0) {
  106.             this.mant[0] = (char)(48 + var1);
  107.             this.chars = this.mant;
  108.             this.ind = 1;
  109.          } else if (var1 == 0) {
  110.             this.mant[0] = '0';
  111.             this.chars = this.mant;
  112.             this.ind = 0;
  113.          } else {
  114.             this.chars = new char[2];
  115.             this.chars[0] = '-';
  116.             this.chars[1] = (char)(48 - var1);
  117.             this.mant[0] = this.chars[1];
  118.             this.ind = -1;
  119.          }
  120.       } else if (var1 > 0) {
  121.          this.ind = 1;
  122.          this.mant = Integer.toString(var1, 10).toCharArray();
  123.          this.chars = this.mant;
  124.       } else {
  125.          this.ind = -1;
  126.          this.chars = null;
  127.          if (var1 == Integer.MIN_VALUE) {
  128.             this.mant = (new String("2147483648")).toCharArray();
  129.          } else {
  130.             var1 = -var1;
  131.             this.mant = Integer.toString(var1, 10).toCharArray();
  132.          }
  133.       }
  134.    }
  135.  
  136.    public Rexx(long var1) {
  137.       this(String.valueOf(var1).toCharArray(), true);
  138.    }
  139.  
  140.    public Rexx(float var1) {
  141.       this(RexxUtil.doubleToRexx((double)var1, 7));
  142.    }
  143.  
  144.    public Rexx(double var1) {
  145.       this(RexxUtil.doubleToRexx(var1, 16));
  146.    }
  147.  
  148.    Rexx(char[] var1, boolean var2) {
  149.       boolean var4 = false;
  150.       boolean var11 = false;
  151.       byte var12 = 0;
  152.       int var13 = 0;
  153.       char var14 = '\u0000';
  154.       this.chars = var1;
  155.       this.ind = -2;
  156.       if (var1.length != 0) {
  157.          if (var1[0] > '9') {
  158.             if (var1[0] <= 127) {
  159.                return;
  160.             }
  161.  
  162.             if (!Character.isDigit(var1[0])) {
  163.                return;
  164.             }
  165.          }
  166.  
  167.          if (var2) {
  168.             int var3 = var1.length;
  169.             byte var15 = 0;
  170.  
  171.             for(int var20 = var3 - 1; var20 >= var15 && var1[var20] == ' '; --var20) {
  172.                --var3;
  173.                if (var3 == 0) {
  174.                   return;
  175.                }
  176.             }
  177.  
  178.             byte var5 = 0;
  179.             int var6 = -1;
  180.             int var16 = var3 - 1;
  181.  
  182.             for(int var21 = 0; var21 <= var16; ++var21) {
  183.                if (var1[var21] != ' ') {
  184.                   if (var1[var21] == '-') {
  185.                      if (var5 != 0) {
  186.                         return;
  187.                      }
  188.  
  189.                      var5 = -1;
  190.                   } else {
  191.                      if (var1[var21] != '+') {
  192.                         var6 = var21;
  193.                         break;
  194.                      }
  195.  
  196.                      if (var5 != 0) {
  197.                         return;
  198.                      }
  199.  
  200.                      var5 = 1;
  201.                   }
  202.                }
  203.             }
  204.  
  205.             if (var6 >= 0) {
  206.                boolean var7 = false;
  207.                int var8 = 0;
  208.                int var9 = -1;
  209.                int var10 = -1;
  210.                int var17 = var3 - 1;
  211.  
  212.                for(int var22 = var6; var22 <= var17; ++var22) {
  213.                   if (var1[var22] >= '0' && var1[var22] <= '9') {
  214.                      var10 = var22;
  215.                      ++var8;
  216.                   } else if (var1[var22] == '.') {
  217.                      if (var9 >= 0) {
  218.                         return;
  219.                      }
  220.  
  221.                      var9 = var22 - var6;
  222.                   } else {
  223.                      if (var1[var22] == 'e' || var1[var22] == 'E') {
  224.                         if (var22 > var3 - 3) {
  225.                            return;
  226.                         }
  227.  
  228.                         if (var3 - var22 > 11) {
  229.                            return;
  230.                         }
  231.  
  232.                         if (var1[var22 + 1] == '-') {
  233.                            var11 = true;
  234.                         } else {
  235.                            if (var1[var22 + 1] != '+') {
  236.                               return;
  237.                            }
  238.  
  239.                            var11 = false;
  240.                         }
  241.  
  242.                         if (var3 - var22 - 2 > 9) {
  243.                            return;
  244.                         }
  245.  
  246.                         int var18 = var3 - 1;
  247.  
  248.                         for(int var27 = var22 + 2; var27 <= var18; ++var27) {
  249.                            if (var1[var27] < '0') {
  250.                               return;
  251.                            }
  252.  
  253.                            if (var1[var27] > '9') {
  254.                               if (!Character.isDigit(var1[var27])) {
  255.                                  return;
  256.                               }
  257.  
  258.                               var13 = Character.digit(var1[var27], 10);
  259.                               if (var13 < 0) {
  260.                                  return;
  261.                               }
  262.                            } else {
  263.                               var13 = var1[var27] - 48;
  264.                            }
  265.  
  266.                            this.exp = this.exp * 10 + var13;
  267.                         }
  268.  
  269.                         if (var11) {
  270.                            this.exp = -this.exp;
  271.                         }
  272.                         break;
  273.                      }
  274.  
  275.                      if (!Character.isDigit(var1[var22])) {
  276.                         return;
  277.                      }
  278.  
  279.                      var7 = true;
  280.                      var10 = var22;
  281.                      ++var8;
  282.                   }
  283.                }
  284.  
  285.                if (var8 != 0) {
  286.                   if (var9 >= 0) {
  287.                      this.exp = this.exp + var9 - var8;
  288.                   }
  289.  
  290.                   int var33 = var10 - 1;
  291.  
  292.                   for(int var23 = var6; var23 <= var33; ++var23) {
  293.                      if (var1[var23] == '.') {
  294.                         ++var6;
  295.                      } else {
  296.                         if (var1[var23] != '0') {
  297.                            break;
  298.                         }
  299.  
  300.                         ++var6;
  301.                         --var8;
  302.                      }
  303.                   }
  304.  
  305.                   if (var7) {
  306.                      this.mant = new char[var8];
  307.                      var12 = 0;
  308.                      int var19 = var8 - 1;
  309.  
  310.                      for(int var24 = 0; var24 <= var19; ++var24) {
  311.                         if (var1[var6 + var24] == '.') {
  312.                            var12 = 1;
  313.                         }
  314.  
  315.                         var14 = var1[var6 + var24 + var12];
  316.                         if (var14 <= '9') {
  317.                            this.mant[var24] = var14;
  318.                         } else {
  319.                            var13 = Character.digit(var14, 10);
  320.                            if (var13 < 0) {
  321.                               return;
  322.                            }
  323.  
  324.                            this.mant[var24] = (char)(var13 + 48);
  325.                         }
  326.                      }
  327.                   } else if (var8 == this.chars.length) {
  328.                      this.mant = this.chars;
  329.                   } else {
  330.                      this.mant = new char[var8];
  331.                      var12 = 0;
  332.                      int var34 = var8 - 1;
  333.  
  334.                      for(int var25 = 0; var25 <= var34; ++var25) {
  335.                         if (var1[var6 + var25] == '.') {
  336.                            var12 = 1;
  337.                         }
  338.  
  339.                         this.mant[var25] = var1[var6 + var25 + var12];
  340.                      }
  341.                   }
  342.  
  343.                   this.ind = (byte)(this.mant[0] != '0' ? 1 : 0);
  344.                   if (var5 < 0) {
  345.                      this.ind = (byte)(-this.ind);
  346.                   }
  347.  
  348.                }
  349.             }
  350.          }
  351.       }
  352.    }
  353.  
  354.    Rexx() {
  355.    }
  356.  
  357.    public RexxNode getnode(Rexx var1) {
  358.       if (this.coll == null) {
  359.          synchronized(this){}
  360.  
  361.          try {
  362.             if (this.coll == null) {
  363.                this.coll = new Hashtable(37, toRexx("0.67").tofloat());
  364.             }
  365.          } catch (Throwable var5) {
  366.             throw var5;
  367.          }
  368.       }
  369.  
  370.       RexxNode var2 = (RexxNode)this.coll.get(var1);
  371.       if (var2 != null && var2.leaf != null) {
  372.          return var2;
  373.       } else {
  374.          var2 = new RexxNode(new Rexx(this));
  375.          this.coll.put(var1, var2);
  376.          return var2;
  377.       }
  378.    }
  379.  
  380.    public boolean testnode(Rexx var1) {
  381.       if (this.coll == null) {
  382.          return false;
  383.       } else {
  384.          RexxNode var2 = (RexxNode)this.coll.get(var1);
  385.          if (var2 == null) {
  386.             return false;
  387.          } else if (var2.leaf == null) {
  388.             return false;
  389.          } else {
  390.             return var2.leaf != var2.initleaf;
  391.          }
  392.       }
  393.    }
  394.  
  395.    public synchronized Enumeration keys() {
  396.       if (this.coll == null) {
  397.          synchronized(this){}
  398.  
  399.          try {
  400.             if (this.coll == null) {
  401.                this.coll = new Hashtable(37, toRexx("0.67").tofloat());
  402.             }
  403.          } catch (Throwable var3) {
  404.             throw var3;
  405.          }
  406.       }
  407.  
  408.       return this.coll.keys();
  409.    }
  410.  
  411.    public synchronized void copyIndexed(Rexx var1) {
  412.       Object var2 = null;
  413.       Object var3 = null;
  414.       Object var4 = null;
  415.       if (var1.coll != null) {
  416.          Hashtable var5 = var1.coll;
  417.          synchronized(var5){}
  418.  
  419.          try {
  420.             Enumeration var8 = var1.coll.keys();
  421.  
  422.             while(var8.hasMoreElements()) {
  423.                Rexx var9 = (Rexx)var8.nextElement();
  424.                RexxNode var10 = (RexxNode)var1.coll.get(var9);
  425.                if (var10.leaf != null && var10.leaf != var10.initleaf) {
  426.                   this.getnode(var9).leaf = var10.leaf;
  427.                }
  428.             }
  429.          } catch (Throwable var7) {
  430.             throw var7;
  431.          }
  432.  
  433.       }
  434.    }
  435.  
  436.    private final int intlength() {
  437.       if (this.chars == null) {
  438.          this.chars = this.layout();
  439.       }
  440.  
  441.       return this.chars.length;
  442.    }
  443.  
  444.    private final int intwords() {
  445.       if (this.chars == null) {
  446.          this.chars = this.layout();
  447.       }
  448.  
  449.       return RexxWords.words(this.chars);
  450.    }
  451.  
  452.    public String toString() {
  453.       if (this.chars == null) {
  454.          this.chars = this.layout();
  455.       }
  456.  
  457.       return new String(this.chars);
  458.    }
  459.  
  460.    public char[] toCharArray() {
  461.       if (this.chars == null) {
  462.          this.chars = this.layout();
  463.       }
  464.  
  465.       char[] var1 = new char[this.chars.length];
  466.       System.arraycopy(this.chars, 0, var1, 0, this.chars.length);
  467.       return var1;
  468.    }
  469.  
  470.    public char tochar() throws NotCharacterException {
  471.       if (this.chars == null) {
  472.          this.chars = this.layout();
  473.       }
  474.  
  475.       if (this.chars.length != 1) {
  476.          throw new NotCharacterException(String.valueOf(this.chars));
  477.       } else {
  478.          return this.chars[0];
  479.       }
  480.    }
  481.  
  482.    public int hashCode() {
  483.       int var1 = 0;
  484.       boolean var3 = false;
  485.       if (this.chars == null) {
  486.          this.chars = this.layout();
  487.       }
  488.  
  489.       if (this.chars.length < 14) {
  490.          var1 = (this.chars.length + 1) / 2;
  491.       } else {
  492.          var1 = 7;
  493.       }
  494.  
  495.       int var2 = 0;
  496.       int var4 = var1 - 1;
  497.  
  498.       for(int var6 = 0; var6 <= var4; ++var6) {
  499.          var2 = var2 * 7 + this.chars[var6] * 2 + this.chars[this.chars.length - var6 - 1];
  500.       }
  501.  
  502.       return var2;
  503.    }
  504.  
  505.    public boolean equals(Object var1) {
  506.       if (var1 == null) {
  507.          return false;
  508.       } else if (var1 instanceof Rexx) {
  509.          return this.docomparestrict((RexxSet)null, (Rexx)var1) == 0;
  510.       } else if (var1 instanceof String) {
  511.          return this.docomparestrict((RexxSet)null, new Rexx((String)var1)) == 0;
  512.       } else if (var1 instanceof char[]) {
  513.          return this.docomparestrict((RexxSet)null, new Rexx((char[])var1)) == 0;
  514.       } else {
  515.          return false;
  516.       }
  517.    }
  518.  
  519.    public char charAt(int var1) {
  520.       if (this.chars == null) {
  521.          this.chars = this.layout();
  522.       }
  523.  
  524.       return this.chars[var1];
  525.    }
  526.  
  527.    public static char tochar(String var0) throws NotCharacterException {
  528.       if (var0.length() != 1) {
  529.          throw new NotCharacterException(var0);
  530.       } else {
  531.          return var0.charAt(0);
  532.       }
  533.    }
  534.  
  535.    public static char tochar(char[] var0) throws NotCharacterException {
  536.       if (var0.length != 1) {
  537.          throw new NotCharacterException(String.valueOf(var0));
  538.       } else {
  539.          return var0[0];
  540.       }
  541.    }
  542.  
  543.    public static char[] tochararray(char var0) {
  544.       char[] var1 = new char[]{var0};
  545.       return var1;
  546.    }
  547.  
  548.    public static final char[] tochararray(Rexx var0) {
  549.       if (var0 == null) {
  550.          return null;
  551.       } else {
  552.          if (var0.chars == null) {
  553.             var0.chars = var0.layout();
  554.          }
  555.  
  556.          char[] var1 = new char[var0.chars.length];
  557.          System.arraycopy(var0.chars, 0, var1, 0, var0.chars.length);
  558.          return var1;
  559.       }
  560.    }
  561.  
  562.    public static final Rexx toRexx(char[] var0) {
  563.       if (var0 == null) {
  564.          return null;
  565.       } else {
  566.          char[] var1 = new char[var0.length];
  567.          System.arraycopy(var0, 0, var1, 0, var0.length);
  568.          return new Rexx(var1, true);
  569.       }
  570.    }
  571.  
  572.    public static final Rexx toRexx(String var0) {
  573.       return var0 == null ? null : new Rexx(var0.toCharArray(), true);
  574.    }
  575.  
  576.    public static final String toString(Rexx var0) {
  577.       if (var0 == null) {
  578.          return null;
  579.       } else {
  580.          if (var0.chars == null) {
  581.             var0.chars = var0.layout();
  582.          }
  583.  
  584.          return new String(var0.chars);
  585.       }
  586.    }
  587.  
  588.    public int significance() {
  589.       return this.ind == -2 ? 0 : this.mant.length;
  590.    }
  591.  
  592.    public boolean toboolean() throws NotLogicException {
  593.       if (this.ind == 0) {
  594.          return false;
  595.       } else if (this.ind != -2 && this.mant.length == 1 && this.mant[0] == '1') {
  596.          return true;
  597.       } else {
  598.          throw new NotLogicException("Boolean must be 0 or 1.  Found: " + this.toString());
  599.       }
  600.    }
  601.  
  602.    public byte tobyte() throws NumberFormatException {
  603.       int var1 = this.toint();
  604.       if (var1 > 127 | var1 < -128) {
  605.          throw new NumberFormatException("Conversion overflow");
  606.       } else {
  607.          return (byte)var1;
  608.       }
  609.    }
  610.  
  611.    public short toshort() throws NumberFormatException {
  612.       int var1 = this.toint();
  613.       if (var1 > 32767 | var1 < -32768) {
  614.          throw new NumberFormatException("Conversion overflow");
  615.       } else {
  616.          return (short)var1;
  617.       }
  618.    }
  619.  
  620.    public int toint() throws NumberFormatException {
  621.       int var2 = 0;
  622.       boolean var3 = false;
  623.       int var4 = 0;
  624.       boolean var7 = false;
  625.       if (this.ind == -2) {
  626.          throw new NumberFormatException(String.valueOf(this.chars));
  627.       } else if (this.ind == 0) {
  628.          return 0;
  629.       } else {
  630.          int var1 = this.mant.length - 1;
  631.          if (this.exp < 0) {
  632.             var1 += this.exp;
  633.             if (var1 < 0) {
  634.                var2 = 0;
  635.             } else {
  636.                var2 = var1 + 1;
  637.             }
  638.  
  639.             int var8 = this.mant.length - 1;
  640.  
  641.             for(int var10 = var2; var10 <= var8; ++var10) {
  642.                if (this.mant[var10] != '0') {
  643.                   throw new NumberFormatException(toString(toRexx("Decimal part non-zero:").OpCcblank((RexxSet)null, this)));
  644.                }
  645.             }
  646.  
  647.             if (var1 < 0) {
  648.                return 0;
  649.             }
  650.  
  651.             var4 = 0;
  652.          } else {
  653.             if (this.exp + this.mant.length > 10) {
  654.                throw new NumberFormatException("Conversion overflow");
  655.             }
  656.  
  657.             var4 = this.exp;
  658.          }
  659.  
  660.          int var5 = 0;
  661.          int var6 = var5;
  662.          int var13 = var1 + var4;
  663.  
  664.          for(int var12 = 0; var12 <= var13; ++var12) {
  665.             var5 *= 10;
  666.             if (var12 <= var1) {
  667.                var5 += this.mant[var12] - 48;
  668.             }
  669.  
  670.             if (var5 < var6) {
  671.                if (this.ind == -1 && var5 == Integer.MIN_VALUE && var12 == var1 + var4) {
  672.                   return var5;
  673.                }
  674.  
  675.                throw new NumberFormatException("Conversion overflow");
  676.             }
  677.  
  678.             var6 = var5;
  679.          }
  680.  
  681.          if (this.ind > 0) {
  682.             return var5;
  683.          } else {
  684.             return -var5;
  685.          }
  686.       }
  687.    }
  688.  
  689.    public long tolong() throws NumberFormatException {
  690.       int var2 = 0;
  691.       boolean var3 = false;
  692.       int var4 = 0;
  693.       boolean var9 = false;
  694.       if (this.ind == -2) {
  695.          throw new NumberFormatException(String.valueOf(this.chars));
  696.       } else if (this.ind == 0) {
  697.          return 0L;
  698.       } else {
  699.          int var1 = this.mant.length - 1;
  700.          if (this.exp < 0) {
  701.             var1 += this.exp;
  702.             if (var1 < 0) {
  703.                var2 = 0;
  704.             } else {
  705.                var2 = var1 + 1;
  706.             }
  707.  
  708.             int var10 = this.mant.length - 1;
  709.  
  710.             for(int var12 = var2; var12 <= var10; ++var12) {
  711.                if (this.mant[var12] != '0') {
  712.                   throw new NumberFormatException(toString(toRexx("Decimal part non-zero:").OpCcblank((RexxSet)null, this)));
  713.                }
  714.             }
  715.  
  716.             if (var1 < 0) {
  717.                return 0L;
  718.             }
  719.  
  720.             var4 = 0;
  721.          } else {
  722.             if (this.exp + this.mant.length >= 20) {
  723.                throw new NumberFormatException("Conversion overflow");
  724.             }
  725.  
  726.             var4 = this.exp;
  727.          }
  728.  
  729.          long var5 = 0L;
  730.          long var7 = var5;
  731.          int var15 = var1 + var4;
  732.  
  733.          for(int var14 = 0; var14 <= var15; ++var14) {
  734.             var5 *= 10L;
  735.             if (var14 <= var1) {
  736.                var5 += (long)(this.mant[var14] - 48);
  737.             }
  738.  
  739.             if (var5 < var7) {
  740.                if (this.ind < 0 && var5 == Long.MIN_VALUE && var14 == var1 + var4) {
  741.                   return var5;
  742.                }
  743.  
  744.                throw new NumberFormatException("Conversion overflow");
  745.             }
  746.  
  747.             var7 = var5;
  748.          }
  749.  
  750.          if (this.ind > 0) {
  751.             return var5;
  752.          } else {
  753.             return -var5;
  754.          }
  755.       }
  756.    }
  757.  
  758.    public float tofloat() throws NumberFormatException {
  759.       double var1 = this.todouble();
  760.       if (var1 > 3.402823466E38 | var1 < -3.402823466E38) {
  761.          throw new NumberFormatException("Overflow");
  762.       } else {
  763.          return (float)var1;
  764.       }
  765.    }
  766.  
  767.    public double todouble() throws NumberFormatException {
  768.       if (this.ind == -2) {
  769.          throw new NumberFormatException(String.valueOf(this.chars));
  770.       } else {
  771.          if (this.chars == null) {
  772.             this.chars = this.layout();
  773.          }
  774.  
  775.          double var1 = Double.valueOf(new String(this.chars));
  776.          if (Double.isInfinite(var1)) {
  777.             throw new NumberFormatException("Overflow");
  778.          } else {
  779.             return var1;
  780.          }
  781.       }
  782.    }
  783.  
  784.    char[] layoutnum() {
  785.       return this.layout();
  786.    }
  787.  
  788.    private char[] layout() {
  789.       Object var2 = null;
  790.       int var3 = 0;
  791.       int var4 = 0;
  792.       Object var5 = null;
  793.       Object var6 = null;
  794.       if (this.ind == -2) {
  795.          RexxIO.Say("Internal error: Rexx missing number " + String.valueOf(this.chars));
  796.       }
  797.  
  798.       if (this.dig < 0) {
  799.          RexxIO.Say("Internal error: Rexx: bad dig " + String.valueOf(this.dig));
  800.          this.dig = 9;
  801.       }
  802.  
  803.       int var1 = this.exp + this.mant.length;
  804.       if (var1 > this.dig | var1 < -5) {
  805.          StringBuffer var9 = new StringBuffer(this.mant.length + 15);
  806.          if (this.ind == -1) {
  807.             var9.append('-');
  808.          }
  809.  
  810.          var3 = this.exp + this.mant.length - 1;
  811.          if (this.form == 0) {
  812.             var9.append(this.mant[0]);
  813.             if (this.mant.length > 1) {
  814.                var9.append('.').append(this.mant, 1, this.mant.length - 1);
  815.             }
  816.          } else {
  817.             var4 = var3 % 3;
  818.             if (var4 < 0) {
  819.                var4 += 3;
  820.             }
  821.  
  822.             var3 -= var4;
  823.             ++var4;
  824.             if (var4 >= this.mant.length) {
  825.                var9.append(this.mant, 0, this.mant.length);
  826.                int var20 = var4 - this.mant.length;
  827.  
  828.                while(var20 > 0) {
  829.                   --var20;
  830.                   var9.append('0');
  831.                }
  832.             } else {
  833.                var9.append(this.mant, 0, var4).append('.').append(this.mant, var4, this.mant.length - var4);
  834.             }
  835.          }
  836.  
  837.          if (var3 != 0) {
  838.             String var13;
  839.             if (var3 < 0) {
  840.                var13 = "-";
  841.                var3 = -var3;
  842.             } else {
  843.                var13 = "+";
  844.             }
  845.  
  846.             var9.append('E').append(var13).append(var3);
  847.          }
  848.  
  849.          char[] var18 = new char[var9.length()];
  850.          var9.getChars(0, var9.length(), var18, 0);
  851.          return var18;
  852.       } else if (this.exp == 0) {
  853.          if (this.ind >= 0) {
  854.             return this.mant;
  855.          } else {
  856.             char[] var17 = new char[this.mant.length + 1];
  857.             var17[0] = '-';
  858.             System.arraycopy(this.mant, 0, var17, 1, this.mant.length);
  859.             return var17;
  860.          }
  861.       } else {
  862.          StringBuffer var8 = new StringBuffer(this.mant.length + this.dig + 5 + 3 + 10);
  863.          if (this.ind == -1) {
  864.             var8.append('-');
  865.          }
  866.  
  867.          if (var1 < 1) {
  868.             var8.append('0').append('.');
  869.             int var19 = -var1;
  870.  
  871.             while(var19 > 0) {
  872.                --var19;
  873.                var8.append('0');
  874.             }
  875.  
  876.             var8.append(this.mant);
  877.             char[] var16 = new char[var8.length()];
  878.             var8.getChars(0, var8.length(), var16, 0);
  879.             return var16;
  880.          } else if (var1 <= this.mant.length) {
  881.             var8.append(this.mant, 0, var1).append('.').append(this.mant, var1, this.mant.length - var1);
  882.             char[] var15 = new char[var8.length()];
  883.             var8.getChars(0, var8.length(), var15, 0);
  884.             return var15;
  885.          } else {
  886.             var8.append(this.mant);
  887.             int var7 = var1 - this.mant.length;
  888.  
  889.             while(var7 > 0) {
  890.                --var7;
  891.                var8.append('0');
  892.             }
  893.  
  894.             char[] var14 = new char[var8.length()];
  895.             var8.getChars(0, var8.length(), var14, 0);
  896.             return var14;
  897.          }
  898.       }
  899.    }
  900.  
  901.    private char padcheck() throws NotCharacterException {
  902.       if (this.chars == null) {
  903.          this.chars = this.layout();
  904.       }
  905.  
  906.       if (this.chars.length != 1) {
  907.          throw new NotCharacterException(String.valueOf(this.chars));
  908.       } else {
  909.          return this.chars[0];
  910.       }
  911.    }
  912.  
  913.    private int intcheck(int var1, int var2) throws BadArgumentException {
  914.       int var4 = 0;
  915.       if (this.ind == -2) {
  916.          throw new NumberFormatException("Not a number");
  917.       } else {
  918.          int var3 = this.mant.length - 1;
  919.          if (this.exp < 0) {
  920.             byte var5 = 0;
  921.  
  922.             for(int var6 = this.exp + 1; var6 <= var5; ++var6) {
  923.                if (this.mant[var3] != '0') {
  924.                   throw new NumberFormatException(toString(toRexx("Non-zero decimal part in").OpCcblank((RexxSet)null, this)));
  925.                }
  926.  
  927.                --var3;
  928.             }
  929.          }
  930.  
  931.          var4 = this.toint();
  932.          if (var4 < var1) {
  933.             throw new BadArgumentException("Argument " + String.valueOf(var4) + " " + '<' + " " + var1);
  934.          } else if (var4 > var2) {
  935.             throw new BadArgumentException("Argument " + String.valueOf(var4) + " " + '>' + " " + var2);
  936.          } else {
  937.             return var4;
  938.          }
  939.       }
  940.    }
  941.  
  942.    private char optioncheck(String var1) throws BadArgumentException {
  943.       if (this.chars == null) {
  944.          this.chars = this.layout();
  945.       }
  946.  
  947.       if (this.chars.length == 0) {
  948.          throw new BadArgumentException("Null option string");
  949.       } else {
  950.          char var2 = Character.toUpperCase(this.chars[0]);
  951.          if (var1.indexOf(var2) < 0) {
  952.             throw new BadArgumentException("Bad Option character " + var2);
  953.          } else {
  954.             return var2;
  955.          }
  956.       }
  957.    }
  958.  
  959.    public Rexx abbrev(Rexx var1) {
  960.       return this.abbrev(var1, new Rexx(var1.intlength()));
  961.    }
  962.  
  963.    public Rexx abbrev(Rexx var1, Rexx var2) {
  964.       int var3 = var2.intcheck(0, 999999999);
  965.       if (this.chars == null) {
  966.          this.chars = this.layout();
  967.       }
  968.  
  969.       if (var1.chars == null) {
  970.          var1.chars = var1.layout();
  971.       }
  972.  
  973.       return new Rexx(RexxWords.abbrev(this.chars, var1.chars, var3));
  974.    }
  975.  
  976.    public Rexx abs() throws NumberFormatException {
  977.       Object var1 = null;
  978.       if (this.ind == -2) {
  979.          throw new NumberFormatException(String.valueOf(this.chars));
  980.       } else {
  981.          RexxSet var2;
  982.          if (this.mant.length > 9) {
  983.             var2 = new RexxSet(this.mant.length);
  984.          } else {
  985.             var2 = null;
  986.          }
  987.  
  988.          return this.ind >= 0 ? this.OpPlus(var2) : this.OpMinus(var2);
  989.       }
  990.    }
  991.  
  992.    public Rexx b2x() {
  993.       boolean var5 = false;
  994.       if (this.chars == null) {
  995.          this.chars = this.layout();
  996.       }
  997.  
  998.       if (this.chars.length == 0) {
  999.          throw new BadArgumentException("No digits");
  1000.       } else {
  1001.          char[] var1 = new char[(this.chars.length + 3) / 4];
  1002.          int var2 = var1.length - 1;
  1003.          int var3 = 0;
  1004.          int var4 = 1;
  1005.          byte var6 = 0;
  1006.  
  1007.          for(int var7 = this.chars.length - 1; var7 >= var6; --var7) {
  1008.             if (this.chars[var7] != '0') {
  1009.                if (this.chars[var7] != '1') {
  1010.                   throw new BadArgumentException(toString(toRexx("Bad binary").OpCcblank((RexxSet)null, this)));
  1011.                }
  1012.  
  1013.                var3 += var4;
  1014.             }
  1015.  
  1016.             var4 += var4;
  1017.             if (var4 == 16 | var7 == 0) {
  1018.                var1[var2] = Hexes[var3];
  1019.                --var2;
  1020.                var3 = 0;
  1021.                var4 = 1;
  1022.             }
  1023.          }
  1024.  
  1025.          return new Rexx(var1);
  1026.       }
  1027.    }
  1028.  
  1029.    public Rexx centre(Rexx var1) {
  1030.       return this.centre(var1, new Rexx(' '));
  1031.    }
  1032.  
  1033.    public Rexx centre(Rexx var1, Rexx var2) {
  1034.       int var3 = var1.intcheck(0, 999999999);
  1035.       char var4 = var2.padcheck();
  1036.       if (this.chars == null) {
  1037.          this.chars = this.layout();
  1038.       }
  1039.  
  1040.       return toRexx(RexxWords.centre(this.chars, var3, var4));
  1041.    }
  1042.  
  1043.    public Rexx center(Rexx var1) {
  1044.       return this.center(var1, new Rexx(' '));
  1045.    }
  1046.  
  1047.    public Rexx center(Rexx var1, Rexx var2) {
  1048.       return this.centre(var1, var2);
  1049.    }
  1050.  
  1051.    public Rexx changestr(Rexx var1, Rexx var2) {
  1052.       if (this.chars == null) {
  1053.          this.chars = this.layout();
  1054.       }
  1055.  
  1056.       if (var1.chars == null) {
  1057.          var1.chars = var1.layout();
  1058.       }
  1059.  
  1060.       if (var2.chars == null) {
  1061.          var2.chars = var2.layout();
  1062.       }
  1063.  
  1064.       return toRexx(RexxWords.changestr(var1.chars, this.chars, var2.chars));
  1065.    }
  1066.  
  1067.    public Rexx compare(Rexx var1) {
  1068.       return this.compare(var1, new Rexx(' '));
  1069.    }
  1070.  
  1071.    public Rexx compare(Rexx var1, Rexx var2) {
  1072.       char var3 = var2.padcheck();
  1073.       if (this.chars == null) {
  1074.          this.chars = this.layout();
  1075.       }
  1076.  
  1077.       if (var1.chars == null) {
  1078.          var1.chars = var1.layout();
  1079.       }
  1080.  
  1081.       return new Rexx(RexxWords.compare(this.chars, var1.chars, var3));
  1082.    }
  1083.  
  1084.    public Rexx copies(Rexx var1) throws BadArgumentException {
  1085.       int var2 = var1.intcheck(0, 999999999);
  1086.       if (this.chars == null) {
  1087.          this.chars = this.layout();
  1088.       }
  1089.  
  1090.       int var3 = this.chars.length;
  1091.       char[] var4 = new char[var2 * var3];
  1092.       int var5 = 0;
  1093.  
  1094.       for(int var6 = var2; var6 > 0; var5 += var3) {
  1095.          --var6;
  1096.          System.arraycopy(this.chars, 0, var4, var5, var3);
  1097.       }
  1098.  
  1099.       return new Rexx(var4, true);
  1100.    }
  1101.  
  1102.    public Rexx countstr(Rexx var1) {
  1103.       if (this.chars == null) {
  1104.          this.chars = this.layout();
  1105.       }
  1106.  
  1107.       if (var1.chars == null) {
  1108.          var1.chars = var1.layout();
  1109.       }
  1110.  
  1111.       return new Rexx(RexxWords.countstr(var1.chars, this.chars));
  1112.    }
  1113.  
  1114.    public Rexx c2d() {
  1115.       return new Rexx(this.padcheck());
  1116.    }
  1117.  
  1118.    public Rexx c2x() {
  1119.       int var1 = this.padcheck();
  1120.       char[] var2 = tochararray($$79);
  1121.       var2[3] = Hexes[var1 % 16];
  1122.       var1 /= 16;
  1123.       if (var1 == 0) {
  1124.          return (new Rexx(var2)).right(new Rexx((byte)1));
  1125.       } else {
  1126.          var2[2] = Hexes[var1 % 16];
  1127.          var1 /= 16;
  1128.          if (var1 == 0) {
  1129.             return (new Rexx(var2)).right(new Rexx((byte)2));
  1130.          } else {
  1131.             var2[1] = Hexes[var1 % 16];
  1132.             var1 /= 16;
  1133.             if (var1 == 0) {
  1134.                return (new Rexx(var2)).right(new Rexx((byte)3));
  1135.             } else {
  1136.                var2[0] = Hexes[var1 % 16];
  1137.                var1 /= 16;
  1138.                return new Rexx(var2);
  1139.             }
  1140.          }
  1141.       }
  1142.    }
  1143.  
  1144.    public Rexx datatype(Rexx var1) throws BadArgumentException {
  1145.       int var3 = 0;
  1146.       Object var4 = null;
  1147.       char var2 = var1.optioncheck("ABDLMNSUWX");
  1148.       if (this.intlength() == 0) {
  1149.          var3 = 0;
  1150.       } else if (var2 == 'A') {
  1151.          var3 = this.verify(toRexx("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")).OpEqS((RexxSet)null, $$81) ? 1 : 0;
  1152.       } else if (var2 == 'B') {
  1153.          var3 = this.verify(toRexx("01")).OpEqS((RexxSet)null, $$81) ? 1 : 0;
  1154.       } else if (var2 == 'D') {
  1155.          var3 = this.verify(toRexx("0123456789")).OpEqS((RexxSet)null, $$81) ? 1 : 0;
  1156.       } else if (var2 == 'L') {
  1157.          var3 = this.verify(toRexx("abcdefghijklmnopqrstuvwxyz")).OpEqS((RexxSet)null, $$81) ? 1 : 0;
  1158.       } else if (var2 == 'M') {
  1159.          var3 = this.verify(toRexx("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")).OpEqS((RexxSet)null, $$81) ? 1 : 0;
  1160.       } else if (var2 == 'N') {
  1161.          var3 = this.ind != -2 ? 1 : 0;
  1162.       } else if (var2 == 'S') {
  1163.          var3 = this.verify(toRexx('_' + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789")).OpEqS((RexxSet)null, $$81) & this.left(new Rexx((byte)1)).verify(toRexx("0123456789")).OpNotEqS((RexxSet)null, $$81) ? 1 : 0;
  1164.       } else if (var2 == 'U') {
  1165.          var3 = this.verify(toRexx("ABCDEFGHIJKLMNOPQRSTUVWXYZ")).OpEqS((RexxSet)null, $$81) ? 1 : 0;
  1166.       } else if (var2 == 'W') {
  1167.          if (this.ind == -2) {
  1168.             var3 = 0;
  1169.          } else {
  1170.             RexxSet var6;
  1171.             if (this.mant.length > 9) {
  1172.                var6 = new RexxSet(this.mant.length);
  1173.             } else {
  1174.                var6 = null;
  1175.             }
  1176.  
  1177.             var3 = this.OpDiv(var6, new Rexx('1')).pos(new Rexx('.')).OpEqS((RexxSet)null, $$81) ? 1 : 0;
  1178.          }
  1179.       } else {
  1180.          if (var2 != 'X') {
  1181.             throw new NoOtherwiseException();
  1182.          }
  1183.  
  1184.          var3 = this.verify(toRexx(Hexes)).OpEqS((RexxSet)null, $$81) ? 1 : 0;
  1185.       }
  1186.  
  1187.       return new Rexx(var3);
  1188.    }
  1189.  
  1190.    public Rexx delstr(Rexx var1) throws BadArgumentException {
  1191.       return this.delstr(var1, new Rexx(this.intlength()));
  1192.    }
  1193.  
  1194.    public Rexx delstr(Rexx var1, Rexx var2) throws BadArgumentException {
  1195.       int var3 = var1.intcheck(1, 999999999);
  1196.       int var4 = var2.intcheck(0, 999999999);
  1197.       if (this.chars == null) {
  1198.          this.chars = this.layout();
  1199.       }
  1200.  
  1201.       return toRexx(RexxWords.delstr(this.chars, var3, var4));
  1202.    }
  1203.  
  1204.    public Rexx delword(Rexx var1) throws BadArgumentException {
  1205.       return this.delword(var1, new Rexx(this.intwords()));
  1206.    }
  1207.  
  1208.    public Rexx delword(Rexx var1, Rexx var2) throws BadArgumentException {
  1209.       int var3 = var1.intcheck(1, 999999999);
  1210.       int var4 = var2.intcheck(0, 999999999);
  1211.       if (this.chars == null) {
  1212.          this.chars = this.layout();
  1213.       }
  1214.  
  1215.       return toRexx(RexxWords.delword(this.chars, var3, var4));
  1216.    }
  1217.  
  1218.    public Rexx d2c() {
  1219.       int var1 = this.toint();
  1220.       if (var1 < 0 | var1 > 65535) {
  1221.          throw new NumberFormatException(toString(toRexx("Encoding bad").OpCcblank((RexxSet)null, this)));
  1222.       } else {
  1223.          return new Rexx((char)var1);
  1224.       }
  1225.    }
  1226.  
  1227.    public Rexx d2x(Rexx var1) throws BadArgumentException {
  1228.       int var2 = var1.intcheck(0, 999999999);
  1229.       if (this.chars == null) {
  1230.          this.chars = this.layout();
  1231.       }
  1232.  
  1233.       return toRexx(RexxUtil.d2x(this, var2));
  1234.    }
  1235.  
  1236.    public Rexx d2x() {
  1237.       if (this.chars == null) {
  1238.          this.chars = this.layout();
  1239.       }
  1240.  
  1241.       return toRexx(RexxUtil.d2x(this, -1));
  1242.    }
  1243.  
  1244.    public Rexx exists(Rexx var1) {
  1245.       return new Rexx(this.testnode(var1));
  1246.    }
  1247.  
  1248.    public Rexx format() throws BadArgumentException, NumberFormatException {
  1249.       return this.format((Rexx)null, (Rexx)null, (Rexx)null, (Rexx)null, (Rexx)null);
  1250.    }
  1251.  
  1252.    public Rexx format(Rexx var1) throws BadArgumentException, NumberFormatException {
  1253.       return this.format(var1, (Rexx)null, (Rexx)null, (Rexx)null, (Rexx)null);
  1254.    }
  1255.  
  1256.    public Rexx format(Rexx var1, Rexx var2) throws BadArgumentException, NumberFormatException {
  1257.       return this.format(var1, var2, (Rexx)null, (Rexx)null, (Rexx)null);
  1258.    }
  1259.  
  1260.    public Rexx format(Rexx var1, Rexx var2, Rexx var3) throws BadArgumentException, NumberFormatException {
  1261.       return this.format(var1, var2, var3, (Rexx)null, (Rexx)null);
  1262.    }
  1263.  
  1264.    public Rexx format(Rexx var1, Rexx var2, Rexx var3, Rexx var4) throws BadArgumentException, NumberFormatException {
  1265.       return this.format(var1, var2, var3, var4, (Rexx)null);
  1266.    }
  1267.  
  1268.    public Rexx format(Rexx var1, Rexx var2, Rexx var3, Rexx var4, Rexx var5) throws BadArgumentException, NumberFormatException {
  1269.       int var6 = 0;
  1270.       int var7 = 0;
  1271.       int var8 = 0;
  1272.       int var9 = 0;
  1273.       Object var10 = null;
  1274.       if (this.ind == -2) {
  1275.          throw new NumberFormatException(String.valueOf(this.chars));
  1276.       } else {
  1277.          if (var1 == null) {
  1278.             var6 = -1;
  1279.          } else {
  1280.             var6 = var1.intcheck(1, 999999999);
  1281.          }
  1282.  
  1283.          if (var2 == null) {
  1284.             var7 = -1;
  1285.          } else {
  1286.             var7 = var2.intcheck(0, 999999999);
  1287.          }
  1288.  
  1289.          if (var3 == null) {
  1290.             var8 = -1;
  1291.          } else {
  1292.             var8 = var3.intcheck(1, 999999999);
  1293.          }
  1294.  
  1295.          if (var4 == null) {
  1296.             var9 = -1;
  1297.          } else {
  1298.             var9 = var4.intcheck(0, 999999999);
  1299.          }
  1300.  
  1301.          String var15;
  1302.          if (var5 == null) {
  1303.             var15 = "S";
  1304.          } else {
  1305.             var15 = String.valueOf(var5.optioncheck("SE"));
  1306.          }
  1307.  
  1308.          return new Rexx(RexxUtil.format(this, var6, var7, var8, var9, tochar(var15)), true);
  1309.       }
  1310.    }
  1311.  
  1312.    public Rexx insert(Rexx var1) throws BadArgumentException {
  1313.       return this.insert(var1, new Rexx(0), new Rexx(var1.intlength()), new Rexx(' '));
  1314.    }
  1315.  
  1316.    public Rexx insert(Rexx var1, Rexx var2) throws BadArgumentException {
  1317.       return this.insert(var1, var2, new Rexx(var1.intlength()), new Rexx(' '));
  1318.    }
  1319.  
  1320.    public Rexx insert(Rexx var1, Rexx var2, Rexx var3) throws BadArgumentException {
  1321.       return this.insert(var1, var2, var3, new Rexx(' '));
  1322.    }
  1323.  
  1324.    public Rexx insert(Rexx var1, Rexx var2, Rexx var3, Rexx var4) throws BadArgumentException {
  1325.       int var5 = var2.intcheck(0, 999999999);
  1326.       int var6 = var3.intcheck(0, 999999999);
  1327.       char var7 = var4.padcheck();
  1328.       if (this.chars == null) {
  1329.          this.chars = this.layout();
  1330.       }
  1331.  
  1332.       if (var1.chars == null) {
  1333.          var1.chars = var1.layout();
  1334.       }
  1335.  
  1336.       return new Rexx(RexxWords.insert(this.chars, var1.chars, var5, var6, var7), true);
  1337.    }
  1338.  
  1339.    public Rexx lastpos(Rexx var1) throws BadArgumentException {
  1340.       int var2 = this.intlength();
  1341.       if (var2 == 0) {
  1342.          var2 = 1;
  1343.       }
  1344.  
  1345.       return this.lastpos(var1, new Rexx(var2));
  1346.    }
  1347.  
  1348.    public Rexx lastpos(Rexx var1, Rexx var2) throws BadArgumentException {
  1349.       boolean var5 = false;
  1350.       boolean var6 = false;
  1351.       int var3 = var2.intcheck(1, 999999999) - 1;
  1352.       if (this.chars == null) {
  1353.          this.chars = this.layout();
  1354.       }
  1355.  
  1356.       if (var3 >= this.chars.length) {
  1357.          var3 = this.chars.length - 1;
  1358.       }
  1359.  
  1360.       if (var1.chars == null) {
  1361.          var1.chars = var1.layout();
  1362.       }
  1363.  
  1364.       int var4 = var1.chars.length;
  1365.       if (var4 == 0) {
  1366.          return new Rexx(0);
  1367.       } else {
  1368.          var3 = var3 - var4 + 1;
  1369.          byte var7 = 0;
  1370.  
  1371.          label40:
  1372.          for(int var10 = var3; var10 >= var7; --var10) {
  1373.             int var8 = var4 - 1;
  1374.  
  1375.             for(int var11 = 0; var11 <= var8; ++var11) {
  1376.                if (var1.chars[var11] != this.chars[var10 + var11]) {
  1377.                   continue label40;
  1378.                }
  1379.             }
  1380.  
  1381.             return new Rexx(var10 + 1);
  1382.          }
  1383.  
  1384.          return new Rexx(0);
  1385.       }
  1386.    }
  1387.  
  1388.    public Rexx left(Rexx var1) {
  1389.       return this.left(var1, new Rexx(' '));
  1390.    }
  1391.  
  1392.    public Rexx left(Rexx var1, Rexx var2) {
  1393.       return this.substr(new Rexx(1), var1, var2);
  1394.    }
  1395.  
  1396.    public Rexx length() {
  1397.       return new Rexx(this.intlength());
  1398.    }
  1399.  
  1400.    public Rexx lower() throws BadArgumentException {
  1401.       return this.lower(new Rexx(1), this.length());
  1402.    }
  1403.  
  1404.    public Rexx lower(Rexx var1) throws BadArgumentException {
  1405.       return this.lower(var1, this.length());
  1406.    }
  1407.  
  1408.    public Rexx lower(Rexx var1, Rexx var2) throws BadArgumentException {
  1409.       boolean var7 = false;
  1410.       int var3 = var1.intcheck(1, 999999999) - 1;
  1411.       int var4 = var2.intcheck(0, 999999999);
  1412.       if (this.chars == null) {
  1413.          this.chars = this.layout();
  1414.       }
  1415.  
  1416.       int var5 = this.chars.length;
  1417.       if (var5 == 0) {
  1418.          return new Rexx("");
  1419.       } else {
  1420.          char[] var6 = new char[var5];
  1421.          if (var4 < var5 | var3 > 0) {
  1422.             System.arraycopy(this.chars, 0, var6, 0, var5);
  1423.          }
  1424.  
  1425.          int var8 = var5 - 1;
  1426.          int var9 = var4;
  1427.  
  1428.          for(int var10 = var3; var10 <= var8 && var9 > 0; ++var10) {
  1429.             --var9;
  1430.             var6[var10] = Character.toLowerCase(this.chars[var10]);
  1431.          }
  1432.  
  1433.          return new Rexx(var6, true);
  1434.       }
  1435.    }
  1436.  
  1437.    public Rexx max(Rexx var1) throws NumberFormatException {
  1438.       Rexx var3 = null;
  1439.       if (this.ind == -2) {
  1440.          throw new NumberFormatException(String.valueOf(this.chars));
  1441.       } else if (var1.ind == -2) {
  1442.          throw new NumberFormatException(String.valueOf(this.chars));
  1443.       } else {
  1444.          int var2 = 9;
  1445.          if (this.mant.length > var2) {
  1446.             var2 = this.mant.length;
  1447.          }
  1448.  
  1449.          if (var1.mant.length > var2) {
  1450.             var2 = var1.mant.length;
  1451.          }
  1452.  
  1453.          if (this.docompare(new RexxSet(var2), var1) < 0) {
  1454.             var3 = var1;
  1455.          } else {
  1456.             var3 = this;
  1457.          }
  1458.  
  1459.          var2 = 9;
  1460.          if (var3.mant.length > var2) {
  1461.             var2 = var3.mant.length;
  1462.          }
  1463.  
  1464.          return var3.OpPlus(new RexxSet(var2));
  1465.       }
  1466.    }
  1467.  
  1468.    public Rexx min(Rexx var1) throws NumberFormatException {
  1469.       Rexx var3 = null;
  1470.       if (this.ind == -2) {
  1471.          throw new NumberFormatException(String.valueOf(this.chars));
  1472.       } else if (var1.ind == -2) {
  1473.          throw new NumberFormatException(String.valueOf(this.chars));
  1474.       } else {
  1475.          int var2 = 9;
  1476.          if (this.mant.length > var2) {
  1477.             var2 = this.mant.length;
  1478.          }
  1479.  
  1480.          if (var1.mant.length > var2) {
  1481.             var2 = var1.mant.length;
  1482.          }
  1483.  
  1484.          if (this.docompare(new RexxSet(var2), var1) > 0) {
  1485.             var3 = var1;
  1486.          } else {
  1487.             var3 = this;
  1488.          }
  1489.  
  1490.          var2 = 9;
  1491.          if (var3.mant.length > var2) {
  1492.             var2 = var3.mant.length;
  1493.          }
  1494.  
  1495.          return var3.OpPlus(new RexxSet(var2));
  1496.       }
  1497.    }
  1498.  
  1499.    public Rexx overlay(Rexx var1) throws BadArgumentException {
  1500.       return this.overlay(var1, new Rexx(1), new Rexx(var1.intlength()), new Rexx(' '));
  1501.    }
  1502.  
  1503.    public Rexx overlay(Rexx var1, Rexx var2) throws BadArgumentException {
  1504.       return this.overlay(var1, var2, new Rexx(var1.intlength()), new Rexx(' '));
  1505.    }
  1506.  
  1507.    public Rexx overlay(Rexx var1, Rexx var2, Rexx var3) throws BadArgumentException {
  1508.       return this.overlay(var1, var2, var3, new Rexx(' '));
  1509.    }
  1510.  
  1511.    public Rexx overlay(Rexx var1, Rexx var2, Rexx var3, Rexx var4) throws BadArgumentException {
  1512.       int var5 = var2.intcheck(1, 999999999);
  1513.       int var6 = var3.intcheck(0, 999999999);
  1514.       char var7 = var4.padcheck();
  1515.       if (this.chars == null) {
  1516.          this.chars = this.layout();
  1517.       }
  1518.  
  1519.       if (var1.chars == null) {
  1520.          var1.chars = var1.layout();
  1521.       }
  1522.  
  1523.       return new Rexx(RexxWords.overlay(this.chars, var1.chars, var5, var6, var7), true);
  1524.    }
  1525.  
  1526.    public Rexx pos(Rexx var1) throws BadArgumentException {
  1527.       return this.pos(var1, new Rexx(1));
  1528.    }
  1529.  
  1530.    public Rexx pos(Rexx var1, Rexx var2) throws BadArgumentException {
  1531.       boolean var4 = false;
  1532.       boolean var5 = false;
  1533.       int var3 = var2.intcheck(1, 999999999) - 1;
  1534.       if (var1.chars == null) {
  1535.          var1.chars = var1.layout();
  1536.       }
  1537.  
  1538.       if (var1.chars.length == 0) {
  1539.          return new Rexx(0);
  1540.       } else {
  1541.          if (this.chars == null) {
  1542.             this.chars = this.layout();
  1543.          }
  1544.  
  1545.          int var6 = this.chars.length - var1.chars.length;
  1546.  
  1547.          label36:
  1548.          for(int var8 = var3; var8 <= var6; ++var8) {
  1549.             int var7 = var1.chars.length - 1;
  1550.  
  1551.             for(int var9 = 0; var9 <= var7; ++var9) {
  1552.                if (var1.chars[var9] != this.chars[var8 + var9]) {
  1553.                   continue label36;
  1554.                }
  1555.             }
  1556.  
  1557.             return new Rexx(var8 + 1);
  1558.          }
  1559.  
  1560.          return new Rexx(0);
  1561.       }
  1562.    }
  1563.  
  1564.    public Rexx reverse() {
  1565.       boolean var3 = false;
  1566.       if (this.chars == null) {
  1567.          this.chars = this.layout();
  1568.       }
  1569.  
  1570.       int var1 = this.chars.length;
  1571.       if (var1 == 0) {
  1572.          return new Rexx("");
  1573.       } else {
  1574.          char[] var2 = new char[var1];
  1575.          int var4 = var1 - 1;
  1576.  
  1577.          for(int var5 = 0; var5 <= var4; ++var5) {
  1578.             --var1;
  1579.             var2[var5] = this.chars[var1];
  1580.          }
  1581.  
  1582.          return new Rexx(var2, true);
  1583.       }
  1584.    }
  1585.  
  1586.    public Rexx right(Rexx var1) throws NotCharacterException, BadArgumentException {
  1587.       return this.right(var1, new Rexx(' '));
  1588.    }
  1589.  
  1590.    public Rexx right(Rexx var1, Rexx var2) throws NotCharacterException, BadArgumentException {
  1591.       int var7 = 0;
  1592.       int var3 = var1.intcheck(0, 999999999);
  1593.       if (this.chars == null) {
  1594.          this.chars = this.layout();
  1595.       }
  1596.  
  1597.       int var4 = this.chars.length - var3;
  1598.       if (var4 >= 0) {
  1599.          return this.substr(new Rexx(var4 + 1));
  1600.       } else {
  1601.          char var5 = var2.padcheck();
  1602.          char[] var6 = new char[var3];
  1603.          int var8 = -var4 - 1;
  1604.  
  1605.          for(var7 = 0; var7 <= var8; ++var7) {
  1606.             var6[var7] = var5;
  1607.          }
  1608.  
  1609.          System.arraycopy(this.chars, 0, var6, var7, var6.length - var7);
  1610.          return new Rexx(var6, true);
  1611.       }
  1612.    }
  1613.  
  1614.    public Rexx sequence(Rexx var1) throws BadArgumentException, NotCharacterException {
  1615.       boolean var7 = false;
  1616.       char var2 = this.padcheck();
  1617.       char var3 = var1.padcheck();
  1618.       char var4 = var2;
  1619.       int var5 = var3 - var2 + 1;
  1620.       if (var5 <= 0) {
  1621.          throw new BadArgumentException("final<start");
  1622.       } else {
  1623.          char[] var6 = new char[var5];
  1624.          int var8 = var5 - 1;
  1625.  
  1626.          for(int var9 = 0; var9 <= var8; ++var9) {
  1627.             var6[var9] = (char)(var9 + var4);
  1628.          }
  1629.  
  1630.          return new Rexx(var6, true);
  1631.       }
  1632.    }
  1633.  
  1634.    public Rexx sign() throws NumberFormatException {
  1635.       if (this.ind == -2) {
  1636.          throw new NumberFormatException(String.valueOf(this.chars));
  1637.       } else {
  1638.          return new Rexx(this.ind);
  1639.       }
  1640.    }
  1641.  
  1642.    public Rexx space() {
  1643.       return this.space(new Rexx(1), new Rexx(' '));
  1644.    }
  1645.  
  1646.    public Rexx space(Rexx var1) {
  1647.       return this.space(var1, new Rexx(' '));
  1648.    }
  1649.  
  1650.    public Rexx space(Rexx var1, Rexx var2) {
  1651.       int var3 = var1.intcheck(0, 999999999);
  1652.       char var4 = var2.padcheck();
  1653.       if (this.chars == null) {
  1654.          this.chars = this.layout();
  1655.       }
  1656.  
  1657.       return toRexx(RexxWords.space(this.chars, var3, var4));
  1658.    }
  1659.  
  1660.    public Rexx strip() throws BadArgumentException {
  1661.       return this.strip(new Rexx('B'), new Rexx(' '));
  1662.    }
  1663.  
  1664.    public Rexx strip(Rexx var1) throws BadArgumentException {
  1665.       return this.strip(var1, new Rexx(' '));
  1666.    }
  1667.  
  1668.    public Rexx strip(Rexx var1, Rexx var2) throws BadArgumentException {
  1669.       int var5 = 0;
  1670.       int var6 = 0;
  1671.       char var3 = var1.optioncheck("BLT");
  1672.       char var4 = var2.padcheck();
  1673.       if (this.chars == null) {
  1674.          this.chars = this.layout();
  1675.       }
  1676.  
  1677.       if (this.chars.length == 0) {
  1678.          return new Rexx("");
  1679.       } else {
  1680.          if (var3 == 'T') {
  1681.             var5 = 0;
  1682.          } else {
  1683.             int var9 = this.chars.length - 1;
  1684.  
  1685.             for(var5 = 0; var5 <= var9 && this.chars[var5] == var4; ++var5) {
  1686.             }
  1687.  
  1688.             if (var5 == this.chars.length) {
  1689.                return new Rexx("");
  1690.             }
  1691.          }
  1692.  
  1693.          if (var3 == 'L') {
  1694.             var6 = this.chars.length - 1;
  1695.          } else {
  1696.             byte var12 = 0;
  1697.  
  1698.             for(var6 = this.chars.length - 1; var6 >= var12 && this.chars[var6] == var4; --var6) {
  1699.             }
  1700.  
  1701.             if (var6 < 0) {
  1702.                return new Rexx("");
  1703.             }
  1704.          }
  1705.  
  1706.          if (var5 == 0 && var6 == this.chars.length - 1) {
  1707.             return new Rexx(this);
  1708.          } else {
  1709.             int var7 = var6 - var5 + 1;
  1710.             char[] var8 = new char[var7];
  1711.             System.arraycopy(this.chars, var5, var8, 0, var7);
  1712.             return new Rexx(var8, true);
  1713.          }
  1714.       }
  1715.    }
  1716.  
  1717.    public Rexx substr(Rexx var1) throws NotCharacterException, BadArgumentException {
  1718.       return this.substr(var1, new Rexx(this.intlength() + 1 - var1.toint()), new Rexx(' '));
  1719.    }
  1720.  
  1721.    public Rexx substr(Rexx var1, Rexx var2) throws NotCharacterException, BadArgumentException {
  1722.       return this.substr(var1, var2, new Rexx(' '));
  1723.    }
  1724.  
  1725.    public Rexx substr(Rexx var1, Rexx var2, Rexx var3) throws NotCharacterException, BadArgumentException {
  1726.       boolean var9 = false;
  1727.       int var4 = var1.intcheck(1, 999999999) - 1;
  1728.       int var5 = var2.intcheck(0, 999999999);
  1729.       char var6 = var3.padcheck();
  1730.       if (this.chars == null) {
  1731.          this.chars = this.layout();
  1732.       }
  1733.  
  1734.       int var7 = this.chars.length;
  1735.       char[] var8 = new char[var5];
  1736.       if (var4 + var5 <= var7) {
  1737.          System.arraycopy(this.chars, var4, var8, 0, var5);
  1738.       } else {
  1739.          System.arraycopy(this.chars, var4, var8, 0, var7 - var4);
  1740.          int var10 = var5 - 1;
  1741.  
  1742.          for(int var11 = var7 - var4; var11 <= var10; ++var11) {
  1743.             var8[var11] = var6;
  1744.          }
  1745.       }
  1746.  
  1747.       return new Rexx(var8, true);
  1748.    }
  1749.  
  1750.    public Rexx subword(Rexx var1) {
  1751.       return this.subword(var1, this.length());
  1752.    }
  1753.  
  1754.    public Rexx subword(Rexx var1, Rexx var2) {
  1755.       int var3 = var1.intcheck(1, 999999999);
  1756.       int var4 = var2.intcheck(0, 999999999);
  1757.       if (this.chars == null) {
  1758.          this.chars = this.layout();
  1759.       }
  1760.  
  1761.       return toRexx(RexxWords.subword(this.chars, var3, var4));
  1762.    }
  1763.  
  1764.    public Rexx translate(Rexx var1, Rexx var2) {
  1765.       return this.translate(var1, var2, new Rexx(' '));
  1766.    }
  1767.  
  1768.    public Rexx translate(Rexx var1, Rexx var2, Rexx var3) {
  1769.       char var4 = var3.padcheck();
  1770.       if (this.chars == null) {
  1771.          this.chars = this.layout();
  1772.       }
  1773.  
  1774.       if (var1.chars == null) {
  1775.          var1.chars = var1.layout();
  1776.       }
  1777.  
  1778.       if (var2.chars == null) {
  1779.          var2.chars = var2.layout();
  1780.       }
  1781.  
  1782.       return toRexx(RexxUtil.translate(this.chars, var1.chars, var2.chars, var4));
  1783.    }
  1784.  
  1785.    public Rexx trunc() throws BadArgumentException, NumberFormatException {
  1786.       return this.trunc(new Rexx(0));
  1787.    }
  1788.  
  1789.    public Rexx trunc(Rexx var1) throws BadArgumentException, NumberFormatException {
  1790.       if (this.ind == -2) {
  1791.          throw new NumberFormatException(String.valueOf(this.chars));
  1792.       } else {
  1793.          int var2 = var1.intcheck(0, 999999999);
  1794.          return new Rexx(RexxUtil.trunc(this, var2));
  1795.       }
  1796.    }
  1797.  
  1798.    public Rexx upper() throws BadArgumentException {
  1799.       return this.upper(new Rexx(1), this.length());
  1800.    }
  1801.  
  1802.    public Rexx upper(Rexx var1) throws BadArgumentException {
  1803.       return this.upper(var1, this.length());
  1804.    }
  1805.  
  1806.    public Rexx upper(Rexx var1, Rexx var2) throws BadArgumentException {
  1807.       boolean var7 = false;
  1808.       int var3 = var1.intcheck(1, 999999999) - 1;
  1809.       int var4 = var2.intcheck(0, 999999999);
  1810.       if (this.chars == null) {
  1811.          this.chars = this.layout();
  1812.       }
  1813.  
  1814.       int var5 = this.chars.length;
  1815.       if (var5 == 0) {
  1816.          return new Rexx("");
  1817.       } else {
  1818.          char[] var6 = new char[var5];
  1819.          if (var4 < var5 | var3 > 0) {
  1820.             System.arraycopy(this.chars, 0, var6, 0, var5);
  1821.          }
  1822.  
  1823.          int var8 = var5 - 1;
  1824.          int var9 = var4;
  1825.  
  1826.          for(int var10 = var3; var10 <= var8 && var9 > 0; ++var10) {
  1827.             --var9;
  1828.             var6[var10] = Character.toUpperCase(this.chars[var10]);
  1829.          }
  1830.  
  1831.          return new Rexx(var6, true);
  1832.       }
  1833.    }
  1834.  
  1835.    public Rexx verify(Rexx var1) {
  1836.       return this.verify(var1, new Rexx('N'), new Rexx(1));
  1837.    }
  1838.  
  1839.    public Rexx verify(Rexx var1, Rexx var2) {
  1840.       return this.verify(var1, var2, new Rexx(1));
  1841.    }
  1842.  
  1843.    public Rexx verify(Rexx var1, Rexx var2, Rexx var3) {
  1844.       char var4 = var2.optioncheck("NM");
  1845.       int var5 = var3.intcheck(1, 999999999);
  1846.       if (this.chars == null) {
  1847.          this.chars = this.layout();
  1848.       }
  1849.  
  1850.       if (var1.chars == null) {
  1851.          var1.chars = var1.layout();
  1852.       }
  1853.  
  1854.       return var4 == 'N' ? new Rexx(RexxWords.verifyn(this.chars, var1.chars, var5)) : new Rexx(RexxWords.verifym(this.chars, var1.chars, var5));
  1855.    }
  1856.  
  1857.    public Rexx word(Rexx var1) {
  1858.       return this.subword(var1, new Rexx((byte)1));
  1859.    }
  1860.  
  1861.    public Rexx wordindex(Rexx var1) {
  1862.       int var2 = var1.intcheck(1, 999999999);
  1863.       if (this.chars == null) {
  1864.          this.chars = this.layout();
  1865.       }
  1866.  
  1867.       return new Rexx(RexxWords.wordindex(this.chars, var2));
  1868.    }
  1869.  
  1870.    public Rexx wordlength(Rexx var1) {
  1871.       int var2 = var1.intcheck(1, 999999999);
  1872.       if (this.chars == null) {
  1873.          this.chars = this.layout();
  1874.       }
  1875.  
  1876.       return new Rexx(RexxWords.wordlength(this.chars, var2));
  1877.    }
  1878.  
  1879.    public Rexx wordpos(Rexx var1) {
  1880.       return this.wordpos(var1, new Rexx(1));
  1881.    }
  1882.  
  1883.    public Rexx wordpos(Rexx var1, Rexx var2) {
  1884.       int var3 = var2.intcheck(1, 999999999);
  1885.       if (this.chars == null) {
  1886.          this.chars = this.layout();
  1887.       }
  1888.  
  1889.       if (var1.chars == null) {
  1890.          var1.chars = var1.layout();
  1891.       }
  1892.  
  1893.       return new Rexx(RexxWords.wordpos(var1.chars, this.chars, var3));
  1894.    }
  1895.  
  1896.    public Rexx words() {
  1897.       return new Rexx(this.intwords());
  1898.    }
  1899.  
  1900.    public Rexx x2b() {
  1901.       if (this.chars == null) {
  1902.          this.chars = this.layout();
  1903.       }
  1904.  
  1905.       if (this.chars.length == 0) {
  1906.          throw new BadArgumentException("No digits");
  1907.       } else {
  1908.          return new Rexx(RexxUtil.x2b(this));
  1909.       }
  1910.    }
  1911.  
  1912.    public Rexx x2c() {
  1913.       if (this.chars == null) {
  1914.          this.chars = this.layout();
  1915.       }
  1916.  
  1917.       if (this.chars.length == 0) {
  1918.          throw new BadArgumentException("No digits");
  1919.       } else {
  1920.          return new Rexx(RexxUtil.x2c(this));
  1921.       }
  1922.    }
  1923.  
  1924.    public Rexx x2d(Rexx var1) throws BadArgumentException {
  1925.       int var2 = var1.intcheck(0, 999999999);
  1926.       if (this.chars == null) {
  1927.          this.chars = this.layout();
  1928.       }
  1929.  
  1930.       return toRexx(RexxUtil.x2d(this, var2));
  1931.    }
  1932.  
  1933.    public Rexx x2d() {
  1934.       if (this.chars == null) {
  1935.          this.chars = this.layout();
  1936.       }
  1937.  
  1938.       return toRexx(RexxUtil.x2d(this, -1));
  1939.    }
  1940.  
  1941.    public Rexx OpCc(RexxSet var1, Rexx var2) {
  1942.       return this.concat(var1, var2, 0);
  1943.    }
  1944.  
  1945.    public Rexx OpCcblank(RexxSet var1, Rexx var2) {
  1946.       return this.concat(var1, var2, 1);
  1947.    }
  1948.  
  1949.    public boolean OpEq(RexxSet var1, Rexx var2) {
  1950.       return this.docompare(var1, var2) == 0;
  1951.    }
  1952.  
  1953.    public boolean OpNotEq(RexxSet var1, Rexx var2) {
  1954.       return this.docompare(var1, var2) != 0;
  1955.    }
  1956.  
  1957.    public boolean OpLt(RexxSet var1, Rexx var2) {
  1958.       return this.docompare(var1, var2) < 0;
  1959.    }
  1960.  
  1961.    public boolean OpGt(RexxSet var1, Rexx var2) {
  1962.       return this.docompare(var1, var2) > 0;
  1963.    }
  1964.  
  1965.    public boolean OpLtEq(RexxSet var1, Rexx var2) {
  1966.       return this.docompare(var1, var2) <= 0;
  1967.    }
  1968.  
  1969.    public boolean OpGtEq(RexxSet var1, Rexx var2) {
  1970.       return this.docompare(var1, var2) >= 0;
  1971.    }
  1972.  
  1973.    public boolean OpEqS(RexxSet var1, Rexx var2) {
  1974.       return this.docomparestrict(var1, var2) == 0;
  1975.    }
  1976.  
  1977.    public boolean OpNotEqS(RexxSet var1, Rexx var2) {
  1978.       return this.docomparestrict(var1, var2) != 0;
  1979.    }
  1980.  
  1981.    public boolean OpLtS(RexxSet var1, Rexx var2) {
  1982.       return this.docomparestrict(var1, var2) < 0;
  1983.    }
  1984.  
  1985.    public boolean OpGtS(RexxSet var1, Rexx var2) {
  1986.       return this.docomparestrict(var1, var2) > 0;
  1987.    }
  1988.  
  1989.    public boolean OpLtEqS(RexxSet var1, Rexx var2) {
  1990.       return this.docomparestrict(var1, var2) <= 0;
  1991.    }
  1992.  
  1993.    public boolean OpGtEqS(RexxSet var1, Rexx var2) {
  1994.       return this.docomparestrict(var1, var2) >= 0;
  1995.    }
  1996.  
  1997.    public boolean OpOr(RexxSet var1, Rexx var2) {
  1998.       return this.toboolean() | var2.toboolean();
  1999.    }
  2000.  
  2001.    public boolean OpAnd(RexxSet var1, Rexx var2) {
  2002.       return this.toboolean() & var2.toboolean();
  2003.    }
  2004.  
  2005.    public boolean OpXor(RexxSet var1, Rexx var2) {
  2006.       return this.toboolean() ^ var2.toboolean();
  2007.    }
  2008.  
  2009.    public boolean OpNot(RexxSet var1) {
  2010.       return !this.toboolean();
  2011.    }
  2012.  
  2013.    public Rexx OpMinus(RexxSet var1) {
  2014.       if (this.ind == -2) {
  2015.          throw new NumberFormatException(String.valueOf(this.chars));
  2016.       } else {
  2017.          Rexx var2 = new Rexx(this);
  2018.          var2.ind = (byte)(-var2.ind);
  2019.          var2.chars = null;
  2020.          if (var1 == null) {
  2021.             var2.dig = 9;
  2022.             var2.form = 0;
  2023.          } else {
  2024.             var2.dig = var1.digits;
  2025.             var2.form = var1.form;
  2026.          }
  2027.  
  2028.          return var2.check0(var2.dig, false);
  2029.       }
  2030.    }
  2031.  
  2032.    public Rexx OpPlus(RexxSet var1) {
  2033.       if (this.ind == -2) {
  2034.          throw new NumberFormatException(String.valueOf(this.chars));
  2035.       } else {
  2036.          Rexx var2 = new Rexx(this);
  2037.          var2.chars = null;
  2038.          if (var1 == null) {
  2039.             var2.dig = 9;
  2040.             var2.form = 0;
  2041.          } else {
  2042.             var2.dig = var1.digits;
  2043.             var2.form = var1.form;
  2044.          }
  2045.  
  2046.          return var2.check0(var2.dig, false);
  2047.       }
  2048.    }
  2049.  
  2050.    public Rexx OpSub(RexxSet var1, Rexx var2) {
  2051.       if (this.ind == -2) {
  2052.          throw new NumberFormatException(String.valueOf(this.chars));
  2053.       } else if (var2.ind == -2) {
  2054.          throw new NumberFormatException(String.valueOf(var2.chars));
  2055.       } else {
  2056.          Rexx var3 = new Rexx(var2);
  2057.          var3.ind = (byte)(-var3.ind);
  2058.          return this.OpAdd(var1, var3);
  2059.       }
  2060.    }
  2061.  
  2062.    public Rexx OpAdd(RexxSet var1, Rexx var2) {
  2063.       Rexx var5 = null;
  2064.       Object var6 = null;
  2065.       Object var7 = null;
  2066.       int var8 = 0;
  2067.       boolean var9 = false;
  2068.       Object var10 = null;
  2069.       int var11 = 0;
  2070.       int var12 = 0;
  2071.       int var13 = 0;
  2072.       int var14 = 0;
  2073.       char var15 = '\u0000';
  2074.       char var16 = '\u0000';
  2075.       Object var17 = null;
  2076.       if (this.ind == -2) {
  2077.          throw new NumberFormatException(String.valueOf(this.chars));
  2078.       } else if (var2.ind == -2) {
  2079.          throw new NumberFormatException(String.valueOf(var2.chars));
  2080.       } else {
  2081.          int var3 = 9;
  2082.          byte var4 = 0;
  2083.          if (var1 != null) {
  2084.             var3 = var1.digits;
  2085.             var4 = var1.form;
  2086.          }
  2087.  
  2088.          if (this.ind == 0) {
  2089.             var5 = new Rexx(var2);
  2090.             var5.chars = null;
  2091.             var5.dig = var3;
  2092.             var5.form = var4;
  2093.             return var5.check0(var3, false);
  2094.          } else if (var2.ind == 0) {
  2095.             var5 = new Rexx(this);
  2096.             var5.chars = null;
  2097.             var5.dig = var3;
  2098.             var5.form = var4;
  2099.             return var5.check0(var3, false);
  2100.          } else {
  2101.             var5 = new Rexx();
  2102.             var5.dig = var3;
  2103.             var5.form = var4;
  2104.             char[] var24;
  2105.             char[] var25;
  2106.             if (this.exp == var2.exp) {
  2107.                var24 = this.mant;
  2108.                var25 = var2.mant;
  2109.                var5.exp = this.exp;
  2110.             } else if (this.exp > var2.exp) {
  2111.                var8 = this.mant.length + this.exp - var2.exp;
  2112.                if (var8 > var2.mant.length + var3) {
  2113.                   var5 = new Rexx(this);
  2114.                   var5.chars = null;
  2115.                   var5.dig = var3;
  2116.                   var5.form = var4;
  2117.                   return var5.check0(var3, false);
  2118.                }
  2119.  
  2120.                var24 = new char[var8];
  2121.                var25 = var2.mant;
  2122.                var5.exp = var2.exp;
  2123.                System.arraycopy(this.mant, 0, var24, 0, this.mant.length);
  2124.                int var18 = var8 - 1;
  2125.  
  2126.                for(int var28 = this.mant.length; var28 <= var18; ++var28) {
  2127.                   var24[var28] = '0';
  2128.                }
  2129.             } else {
  2130.                var8 = var2.mant.length + var2.exp - this.exp;
  2131.                if (var8 > this.mant.length + var3) {
  2132.                   var5 = new Rexx(var2);
  2133.                   var5.chars = null;
  2134.                   var5.dig = var3;
  2135.                   var5.form = var4;
  2136.                   return var5.check0(var3, false);
  2137.                }
  2138.  
  2139.                var24 = this.mant;
  2140.                var25 = new char[var8];
  2141.                var5.exp = this.exp;
  2142.                System.arraycopy(var2.mant, 0, var25, 0, var2.mant.length);
  2143.                int var40 = var8 - 1;
  2144.  
  2145.                for(int var29 = var2.mant.length; var29 <= var40; ++var29) {
  2146.                   var25[var29] = '0';
  2147.                }
  2148.             }
  2149.  
  2150.             if (this.ind == var2.ind) {
  2151.                var5.mant = charaddsub(var24, var25, 1);
  2152.                var5.ind = this.ind;
  2153.                return var5.check0(var3, false);
  2154.             } else {
  2155.                var5.ind = this.ind;
  2156.                if (var24.length <= var25.length) {
  2157.                   if (var24.length < var25.length) {
  2158.                      char[] var31 = var24;
  2159.                      var24 = var25;
  2160.                      var25 = var31;
  2161.                      var5.ind = (byte)(-var5.ind);
  2162.                   } else {
  2163.                      var11 = 0;
  2164.                      var12 = 0;
  2165.                      var13 = var24.length - 1;
  2166.                      var14 = var25.length - 1;
  2167.  
  2168.                      while(true) {
  2169.                         if (var11 <= var13) {
  2170.                            var15 = var24[var11];
  2171.                         } else {
  2172.                            if (var12 > var14) {
  2173.                               var5.mant = new char[1];
  2174.                               var5.mant[0] = '0';
  2175.                               var5.ind = 0;
  2176.                               var5.exp = 0;
  2177.                               return var5;
  2178.                            }
  2179.  
  2180.                            var15 = '0';
  2181.                         }
  2182.  
  2183.                         if (var12 <= var14) {
  2184.                            var16 = var25[var12];
  2185.                         } else {
  2186.                            var16 = '0';
  2187.                         }
  2188.  
  2189.                         if (var15 != var16) {
  2190.                            if (var15 < var16) {
  2191.                               char[] var32 = var24;
  2192.                               var24 = var25;
  2193.                               var25 = var32;
  2194.                               var5.ind = (byte)(-var5.ind);
  2195.                            }
  2196.                            break;
  2197.                         }
  2198.  
  2199.                         ++var11;
  2200.                         ++var12;
  2201.                      }
  2202.                   }
  2203.                }
  2204.  
  2205.                var5.mant = charaddsub(var24, var25, -1);
  2206.                if (var5.mant.length > var3) {
  2207.                   var5.round(var3);
  2208.                }
  2209.  
  2210.                if (var5.mant[0] == '0') {
  2211.                   int var41 = var5.mant.length;
  2212.  
  2213.                   for(int var30 = 1; var30 <= var41; ++var30) {
  2214.                      if (var30 == var5.mant.length) {
  2215.                         var5.mant = new char[1];
  2216.                         var5.mant[0] = '0';
  2217.                         var5.ind = 0;
  2218.                         var5.exp = 0;
  2219.                         return var5;
  2220.                      }
  2221.  
  2222.                      if (var5.mant[var30] != '0') {
  2223.                         char[] var39 = new char[var5.mant.length - var30];
  2224.                         System.arraycopy(var5.mant, var30, var39, 0, var5.mant.length - var30);
  2225.                         var5.mant = var39;
  2226.                         break;
  2227.                      }
  2228.                   }
  2229.                }
  2230.  
  2231.                return var5;
  2232.             }
  2233.          }
  2234.       }
  2235.    }
  2236.  
  2237.    public Rexx OpMult(RexxSet var1, Rexx var2) {
  2238.       int var3 = 0;
  2239.       byte var4 = 0;
  2240.       Object var6 = null;
  2241.       Object var7 = null;
  2242.       boolean var9 = false;
  2243.       int var10 = 0;
  2244.       Object var11 = null;
  2245.       if (this.ind == -2) {
  2246.          throw new NumberFormatException(String.valueOf(this.chars));
  2247.       } else if (var2.ind == -2) {
  2248.          throw new NumberFormatException(String.valueOf(var2.chars));
  2249.       } else {
  2250.          if (var1 == null) {
  2251.             var3 = 9;
  2252.             var4 = 0;
  2253.          } else {
  2254.             var3 = var1.digits;
  2255.             var4 = var1.form;
  2256.          }
  2257.  
  2258.          Rexx var5 = new Rexx();
  2259.          var5.dig = var3;
  2260.          var5.form = var4;
  2261.          var5.ind = (byte)(this.ind * var2.ind);
  2262.          var5.exp = this.exp + var2.exp;
  2263.          if (var5.exp < -999999999 | var5.exp > 999999999) {
  2264.             throw new ExponentOverflowException();
  2265.          } else {
  2266.             char[] var15;
  2267.             char[] var16;
  2268.             if (this.mant.length < var2.mant.length) {
  2269.                var15 = this.mant;
  2270.                var16 = var2.mant;
  2271.             } else {
  2272.                var15 = var2.mant;
  2273.                var16 = this.mant;
  2274.             }
  2275.  
  2276.             char[] var8 = new char[]{'0'};
  2277.             byte var12 = 0;
  2278.  
  2279.             for(int var17 = var15.length - 1; var17 >= var12; --var17) {
  2280.                var10 = var15[var17] - 48;
  2281.                if (var10 > 0) {
  2282.                   var8 = charaddsub(var8, var16, var10);
  2283.                }
  2284.  
  2285.                if (var17 == 0) {
  2286.                   break;
  2287.                }
  2288.  
  2289.                char[] var19 = new char[var16.length + 1];
  2290.                System.arraycopy(var16, 0, var19, 0, var16.length);
  2291.                var19[var16.length] = '0';
  2292.                var16 = var19;
  2293.             }
  2294.  
  2295.             var5.mant = var8;
  2296.             return var5.check0(var3, false);
  2297.          }
  2298.       }
  2299.    }
  2300.  
  2301.    public Rexx OpDiv(RexxSet var1, Rexx var2) {
  2302.       return this.dodivide('D', var1, var2);
  2303.    }
  2304.  
  2305.    public Rexx OpDivI(RexxSet var1, Rexx var2) {
  2306.       return this.dodivide('I', var1, var2);
  2307.    }
  2308.  
  2309.    public Rexx OpRem(RexxSet var1, Rexx var2) {
  2310.       return this.dodivide('R', var1, var2);
  2311.    }
  2312.  
  2313.    public Rexx OpPow(RexxSet var1, Rexx var2) {
  2314.       int var5 = 0;
  2315.       Object var6 = null;
  2316.       int var9 = 0;
  2317.       if (this.ind == -2) {
  2318.          throw new NumberFormatException(String.valueOf(this.chars));
  2319.       } else {
  2320.          int var3 = var2.intcheck(-999999999, 999999999);
  2321.          Rexx var4 = new Rexx(1);
  2322.          if (var2.exp == 0) {
  2323.             var5 = var2.mant.length;
  2324.          } else {
  2325.             var5 = (new Rexx(var3)).length().toint();
  2326.          }
  2327.  
  2328.          RexxSet var11;
  2329.          if (var1 == null) {
  2330.             var11 = new RexxSet(9 + var5 + 1);
  2331.          } else {
  2332.             var11 = new RexxSet(var1.digits + var5 + 1, var1.form);
  2333.          }
  2334.  
  2335.          Rexx var7 = var4;
  2336.          if (var3 == 0) {
  2337.             return var4;
  2338.          } else {
  2339.             if (var3 < 0) {
  2340.                var3 = -var3;
  2341.             }
  2342.  
  2343.             boolean var8 = false;
  2344.             var9 = 1;
  2345.  
  2346.             while(true) {
  2347.                var3 += var3;
  2348.                if (var3 < 0) {
  2349.                   var8 = true;
  2350.                   var7 = var7.OpMult(var11, this);
  2351.                }
  2352.  
  2353.                if (var9 == 31) {
  2354.                   var11.digits = var11.digits - var5 - 1;
  2355.                   if (var2.ind < 0) {
  2356.                      return var4.OpDiv(var11, var7);
  2357.                   }
  2358.  
  2359.                   return var7.OpDiv(var11, var4);
  2360.                }
  2361.  
  2362.                if (var8) {
  2363.                   var7 = var7.OpMult(var11, var7);
  2364.                }
  2365.  
  2366.                ++var9;
  2367.             }
  2368.          }
  2369.       }
  2370.    }
  2371.  
  2372.    private final Rexx dodivide(char var1, RexxSet var2, Rexx var3) throws NumberFormatException, DivideException, ExponentOverflowException {
  2373.       int var4 = 0;
  2374.       byte var5 = 0;
  2375.       Rexx var7 = null;
  2376.       boolean var11 = false;
  2377.       int var15 = 0;
  2378.       int var16 = 0;
  2379.       int var17 = 0;
  2380.       int var18 = 0;
  2381.       int var19 = 0;
  2382.       Object var20 = null;
  2383.       Object var21 = null;
  2384.       Object var22 = null;
  2385.       Object var24 = null;
  2386.       if (this.ind == -2) {
  2387.          throw new NumberFormatException(String.valueOf(this.chars));
  2388.       } else if (var3.ind == -2) {
  2389.          throw new NumberFormatException(String.valueOf(var3.chars));
  2390.       } else if (var3.ind == 0) {
  2391.          throw new DivideException("Divide by 0");
  2392.       } else {
  2393.          if (var2 == null) {
  2394.             var4 = 9;
  2395.             var5 = 0;
  2396.          } else {
  2397.             var4 = var2.digits;
  2398.             var5 = var2.form;
  2399.          }
  2400.  
  2401.          if (this.ind == 0) {
  2402.             var7 = new Rexx(this);
  2403.             var7.dig = var4;
  2404.             var7.form = var5;
  2405.             return var7;
  2406.          } else {
  2407.             if (this.mant.length > var4 + 1) {
  2408.                this.cut(var4);
  2409.             }
  2410.  
  2411.             if (var3.mant.length > var4 + 1) {
  2412.                var3.cut(var4);
  2413.             }
  2414.  
  2415.             int var8 = this.exp - var3.exp + this.mant.length - var3.mant.length;
  2416.             if (var8 < -999999999 | var8 > 999999999) {
  2417.                throw new ExponentOverflowException();
  2418.             } else if (var8 < 0 && var1 != 'D') {
  2419.                if (var1 == 'I') {
  2420.                   var7 = new Rexx(0);
  2421.                } else {
  2422.                   var7 = new Rexx(this);
  2423.                }
  2424.  
  2425.                var7.dig = var4;
  2426.                var7.form = var5;
  2427.                return var7.check0(var4, true);
  2428.             } else {
  2429.                var7 = new Rexx();
  2430.                var7.ind = (byte)(this.ind * var3.ind);
  2431.                var7.exp = var8;
  2432.                var7.dig = var4;
  2433.                var7.form = var5;
  2434.                var7.mant = new char[var4 + 1];
  2435.                int var9 = var4 + var4 + 1;
  2436.                char[] var10 = new char[var9];
  2437.                System.arraycopy(this.mant, 0, var10, 0, this.mant.length);
  2438.                int var25 = var9 - 1;
  2439.  
  2440.                for(int var34 = this.mant.length; var34 <= var25; ++var34) {
  2441.                   var10[var34] = '0';
  2442.                }
  2443.  
  2444.                char[] var12 = new char[var9];
  2445.                System.arraycopy(var3.mant, 0, var12, 0, var3.mant.length);
  2446.                int var26 = var9 - 1;
  2447.  
  2448.                for(int var35 = var3.mant.length; var35 <= var26; ++var35) {
  2449.                   var12[var35] = '0';
  2450.                }
  2451.  
  2452.                int var13 = (var12[0] - 48) * 10 + var12[1] - 48 + 1;
  2453.                int var14 = 0;
  2454.  
  2455.                label231:
  2456.                while(true) {
  2457.                   var15 = 0;
  2458.  
  2459.                   label228:
  2460.                   while(var10.length >= var12.length) {
  2461.                      if (var10.length == var12.length) {
  2462.                         int var27 = var10.length - 1;
  2463.  
  2464.                         label222: {
  2465.                            for(int var36 = 0; var36 <= var27; ++var36) {
  2466.                               if (var10[var36] < var12[var36]) {
  2467.                                  break label228;
  2468.                               }
  2469.  
  2470.                               if (var10[var36] > var12[var36]) {
  2471.                                  break label222;
  2472.                               }
  2473.                            }
  2474.  
  2475.                            if (var1 != 'R') {
  2476.                               ++var15;
  2477.                               var7.mant[var14] = (char)(var15 + 48);
  2478.                               ++var14;
  2479.                               break label231;
  2480.                            }
  2481.                         }
  2482.  
  2483.                         var16 = var10[0] - 48;
  2484.                      } else {
  2485.                         var16 = (var10[0] - 48) * 10;
  2486.                         if (var10.length > 1) {
  2487.                            var16 = var16 + var10[1] - 48;
  2488.                         }
  2489.                      }
  2490.  
  2491.                      var17 = var16 * 10 / var13;
  2492.                      if (var17 == 0) {
  2493.                         var17 = 1;
  2494.                      }
  2495.  
  2496.                      var15 += var17;
  2497.                      var10 = charaddsub(var10, var12, -var17);
  2498.                      if (var10[0] == '0') {
  2499.                         var18 = var10.length;
  2500.                         int var49 = var18 - 2;
  2501.  
  2502.                         for(var19 = 0; var19 <= var49 && var10[var19] == '0'; ++var19) {
  2503.                            --var18;
  2504.                         }
  2505.  
  2506.                         char[] var45 = new char[var18];
  2507.                         System.arraycopy(var10, var19, var45, 0, var18);
  2508.                         var10 = var45;
  2509.                      }
  2510.                   }
  2511.  
  2512.                   if (var14 != 0 | var15 != 0) {
  2513.                      var7.mant[var14] = (char)(var15 + 48);
  2514.                      ++var14;
  2515.                      if (var14 == var4 + 1 || var10[0] == '0') {
  2516.                         break;
  2517.                      }
  2518.                   }
  2519.  
  2520.                   if (var1 != 'D' && var7.exp <= 0) {
  2521.                      break;
  2522.                   }
  2523.  
  2524.                   --var7.exp;
  2525.                   char[] var46 = new char[var12.length - 1];
  2526.                   System.arraycopy(var12, 0, var46, 0, var12.length - 1);
  2527.                   var12 = var46;
  2528.                }
  2529.  
  2530.                if (var1 == 'I' | var1 == 'R' && var14 + var7.exp > var4) {
  2531.                   throw new DivideException("Integer overflow");
  2532.                } else if (var1 != 'R') {
  2533.                   if (var14 == 0) {
  2534.                      return new Rexx(0);
  2535.                   } else {
  2536.                      if (var14 == var7.mant.length) {
  2537.                         var7.round(var4);
  2538.                         var14 = var4;
  2539.                      }
  2540.  
  2541.                      char[] var47 = new char[var14];
  2542.                      System.arraycopy(var7.mant, 0, var47, 0, var14);
  2543.                      var7.mant = var47;
  2544.                      return var7.check0(var4, true);
  2545.                   }
  2546.                } else if (var14 == 0) {
  2547.                   var7 = new Rexx(this);
  2548.                   var7.chars = null;
  2549.                   var7.dig = var4;
  2550.                   var7.form = var5;
  2551.                   return var7.check0(var4, false);
  2552.                } else if (var10[0] == '0') {
  2553.                   return new Rexx(0);
  2554.                } else {
  2555.                   var7.ind = this.ind;
  2556.                   int var23 = var4 + var4 + 1 - this.mant.length;
  2557.                   var7.exp = var7.exp - var23 + this.exp;
  2558.                   var18 = var10.length;
  2559.                   byte var50 = 1;
  2560.  
  2561.                   for(int var37 = var18 - 1; var37 >= var50 && var7.exp < 0 & var23 > 0 && var10[var37] == '0'; --var37) {
  2562.                      --var18;
  2563.                      ++var7.exp;
  2564.                      --var23;
  2565.                   }
  2566.  
  2567.                   if (var18 < var10.length) {
  2568.                      char[] var48 = new char[var18];
  2569.                      System.arraycopy(var10, 0, var48, 0, var18);
  2570.                      var10 = var48;
  2571.                   }
  2572.  
  2573.                   var7.mant = var10;
  2574.                   if (var7.mant.length <= var4 && var7.exp < -999999999 | var7.exp > 999999999) {
  2575.                      throw new ExponentOverflowException();
  2576.                   } else {
  2577.                      return var7.check0(var4, false);
  2578.                   }
  2579.                }
  2580.             }
  2581.          }
  2582.       }
  2583.    }
  2584.  
  2585.    private final void cut(int var1) {
  2586.       int var2 = this.mant.length - var1 - 1;
  2587.       if (var2 > 0) {
  2588.          this.exp += var2;
  2589.          char[] var3 = new char[var1 + 1];
  2590.          System.arraycopy(this.mant, 0, var3, 0, var1 + 1);
  2591.          this.mant = var3;
  2592.       }
  2593.    }
  2594.  
  2595.    private void round(int var1) throws ExponentOverflowException {
  2596.       Object var3 = null;
  2597.       int var2 = this.mant.length - var1;
  2598.       if (var2 > 0) {
  2599.          this.exp += var2;
  2600.          char[] var7;
  2601.          if (var2 > 1) {
  2602.             var7 = new char[var1 + 1];
  2603.             System.arraycopy(this.mant, 0, var7, 0, var1 + 1);
  2604.          } else {
  2605.             var7 = this.mant;
  2606.          }
  2607.  
  2608.          char[] var4 = new char[]{'5'};
  2609.          char[] var5 = charaddsub(var7, var4, 1);
  2610.          if (var5.length > var1 + 1) {
  2611.             ++this.exp;
  2612.          }
  2613.  
  2614.          if (this.exp < -999999999 | this.exp > 999999999) {
  2615.             throw new ExponentOverflowException();
  2616.          } else {
  2617.             char[] var6 = new char[var1];
  2618.             System.arraycopy(var5, 0, var6, 0, var1);
  2619.             this.mant = var6;
  2620.          }
  2621.       }
  2622.    }
  2623.  
  2624.    private static char[] charaddsub(char[] var0, char[] var1, int var2) {
  2625.       boolean var8 = false;
  2626.       int var9 = 0;
  2627.       int var3 = var0.length - 1;
  2628.       int var4 = var1.length - 1;
  2629.       int var5 = var3;
  2630.       if (var4 > var3) {
  2631.          var5 = var4;
  2632.       }
  2633.  
  2634.       char[] var6 = new char[var5 + 1];
  2635.       int var7 = 0;
  2636.       byte var11 = 0;
  2637.  
  2638.       for(int var12 = var5; var12 >= var11; --var12) {
  2639.          if (var4 < 0) {
  2640.             var9 = var0[var3] - 48 + var7;
  2641.             --var3;
  2642.          } else {
  2643.             if (var3 >= 0) {
  2644.                var9 = var0[var3] - 48 + (var1[var4] - 48) * var2 + var7;
  2645.                --var3;
  2646.             } else {
  2647.                var9 = (var1[var4] - 48) * var2 + var7;
  2648.             }
  2649.  
  2650.             --var4;
  2651.          }
  2652.  
  2653.          if (var9 < 0) {
  2654.             var9 += 100;
  2655.             var7 = var9 / 10 - 10;
  2656.             var6[var12] = (char)(var9 % 10 + 48);
  2657.          } else if (var9 > 9) {
  2658.             var7 = var9 / 10;
  2659.             var6[var12] = (char)(var9 % 10 + 48);
  2660.          } else {
  2661.             var7 = 0;
  2662.             var6[var12] = (char)(var9 + 48);
  2663.          }
  2664.       }
  2665.  
  2666.       if (var7 == 0) {
  2667.          return var6;
  2668.       } else {
  2669.          char[] var10 = new char[var5 + 2];
  2670.          var10[0] = (char)(var7 + 48);
  2671.          System.arraycopy(var6, 0, var10, 1, var5 + 1);
  2672.          return var10;
  2673.       }
  2674.    }
  2675.  
  2676.    private Rexx concat(RexxSet var1, Rexx var2, int var3) {
  2677.       boolean var5 = false;
  2678.       if (this.chars == null) {
  2679.          this.chars = this.layout();
  2680.       }
  2681.  
  2682.       if (var2.chars == null) {
  2683.          var2.chars = var2.layout();
  2684.       }
  2685.  
  2686.       char[] var4 = new char[this.chars.length + var2.chars.length + var3];
  2687.       System.arraycopy(this.chars, 0, var4, 0, this.chars.length);
  2688.       if (var3 > 0) {
  2689.          int var6 = this.chars.length + var3 - 1;
  2690.  
  2691.          for(int var7 = this.chars.length; var7 <= var6; ++var7) {
  2692.             var4[var7] = ' ';
  2693.          }
  2694.       }
  2695.  
  2696.       System.arraycopy(var2.chars, 0, var4, this.chars.length + var3, var2.chars.length);
  2697.       return new Rexx(var4, true);
  2698.    }
  2699.  
  2700.    private static char[] sa2ca(String[] var0) {
  2701.       boolean var3 = false;
  2702.       int var6 = 0;
  2703.       int var1 = var0.length - 1;
  2704.       if (var1 < 0) {
  2705.          return new char[0];
  2706.       } else {
  2707.          int var2 = var1;
  2708.          int var7 = var1;
  2709.  
  2710.          for(int var9 = 0; var9 <= var7; ++var9) {
  2711.             var2 += var0[var9].length();
  2712.          }
  2713.  
  2714.          char[] var4 = new char[var2];
  2715.          int var5 = 0;
  2716.          int var8 = var1;
  2717.  
  2718.          for(int var10 = 0; var10 <= var8; ++var10) {
  2719.             var6 = var0[var10].length();
  2720.             var0[var10].getChars(0, var6, var4, var5);
  2721.             if (var10 == var1) {
  2722.                break;
  2723.             }
  2724.  
  2725.             var5 = var5 + var6 + 1;
  2726.             var4[var5 - 1] = ' ';
  2727.          }
  2728.  
  2729.          return var4;
  2730.       }
  2731.    }
  2732.  
  2733.    private final int docompare(RexxSet var1, Rexx var2) {
  2734.       int var3 = 0;
  2735.       boolean var4 = false;
  2736.       Rexx var5 = null;
  2737.       Object var6 = null;
  2738.       char var13 = '\u0000';
  2739.       char var14 = '\u0000';
  2740.       if (this.ind != -2 && var2.ind != -2) {
  2741.          if (this.ind == var2.ind & this.exp == var2.exp) {
  2742.             var3 = this.mant.length;
  2743.             if (var3 < var2.mant.length) {
  2744.                return (byte)(-this.ind);
  2745.             }
  2746.  
  2747.             if (var3 > var2.mant.length) {
  2748.                return this.ind;
  2749.             }
  2750.  
  2751.             this.dig = 9;
  2752.             if (var1 != null) {
  2753.                this.dig = var1.digits;
  2754.             }
  2755.  
  2756.             if (var3 <= this.dig) {
  2757.                int var29 = var3 - 1;
  2758.  
  2759.                for(int var20 = 0; var20 <= var29; ++var20) {
  2760.                   if (this.mant[var20] < var2.mant[var20]) {
  2761.                      return (byte)(-this.ind);
  2762.                   }
  2763.  
  2764.                   if (this.mant[var20] > var2.mant[var20]) {
  2765.                      return this.ind;
  2766.                   }
  2767.                }
  2768.  
  2769.                return 0;
  2770.             }
  2771.          } else {
  2772.             if (this.ind < var2.ind) {
  2773.                return -1;
  2774.             }
  2775.  
  2776.             if (this.ind > var2.ind) {
  2777.                return 1;
  2778.             }
  2779.          }
  2780.  
  2781.          var5 = new Rexx(var2);
  2782.          var5.ind = (byte)(-var5.ind);
  2783.          Rexx var22 = this.OpAdd(var1, var5);
  2784.          return var22.ind;
  2785.       } else {
  2786.          if (this.chars == null) {
  2787.             this.chars = this.layout();
  2788.          }
  2789.  
  2790.          char[] var7 = this.chars;
  2791.          if (var2.chars == null) {
  2792.             var2.chars = var2.layout();
  2793.          }
  2794.  
  2795.          char[] var8 = var2.chars;
  2796.          int var9 = 0;
  2797.          int var10 = 0;
  2798.          int var11 = var7.length - 1;
  2799.          int var12 = var8.length - 1;
  2800.  
  2801.          for(byte var15 = 0; var11 >= var15 && var7[var11] == ' '; --var11) {
  2802.          }
  2803.  
  2804.          for(byte var16 = 0; var12 >= var16 && var8[var12] == ' '; --var12) {
  2805.          }
  2806.  
  2807.          int var17 = var11;
  2808.  
  2809.          for(var9 = 0; var9 <= var17 && var7[var9] == ' '; ++var9) {
  2810.          }
  2811.  
  2812.          int var18 = var12;
  2813.  
  2814.          for(var10 = 0; var10 <= var18 && var8[var10] == ' '; ++var10) {
  2815.          }
  2816.  
  2817.          while(true) {
  2818.             if (var9 <= var11) {
  2819.                var13 = var7[var9];
  2820.             } else {
  2821.                var13 = ' ';
  2822.             }
  2823.  
  2824.             if (var10 <= var12) {
  2825.                var14 = var8[var10];
  2826.             } else {
  2827.                var14 = ' ';
  2828.             }
  2829.  
  2830.             if (var14 == var13) {
  2831.                if (var14 == ' ' && var9 > var11 && var10 > var12) {
  2832.                   return 0;
  2833.                }
  2834.  
  2835.                ++var9;
  2836.                ++var10;
  2837.             } else {
  2838.                var13 = Character.toLowerCase(var13);
  2839.                var14 = Character.toLowerCase(var14);
  2840.                if (var14 != var13) {
  2841.                   if (var13 < var14) {
  2842.                      return -1;
  2843.                   }
  2844.  
  2845.                   return 1;
  2846.                }
  2847.  
  2848.                ++var9;
  2849.                ++var10;
  2850.             }
  2851.          }
  2852.       }
  2853.    }
  2854.  
  2855.    private final int docomparestrict(RexxSet var1, Rexx var2) {
  2856.       char var9 = '\u0000';
  2857.       char var10 = '\u0000';
  2858.       if (this.chars == null) {
  2859.          this.chars = this.layout();
  2860.       }
  2861.  
  2862.       char[] var3 = this.chars;
  2863.       if (var2.chars == null) {
  2864.          var2.chars = var2.layout();
  2865.       }
  2866.  
  2867.       char[] var4 = var2.chars;
  2868.       int var5 = 0;
  2869.       int var6 = 0;
  2870.       int var7 = var3.length - 1;
  2871.       int var8 = var4.length - 1;
  2872.  
  2873.       while(true) {
  2874.          if (var5 <= var7) {
  2875.             var9 = var3[var5];
  2876.          } else {
  2877.             if (var6 > var8) {
  2878.                return 0;
  2879.             }
  2880.  
  2881.             var9 = '\u0000';
  2882.          }
  2883.  
  2884.          if (var6 <= var8) {
  2885.             var10 = var4[var6];
  2886.          } else {
  2887.             var10 = '\u0000';
  2888.          }
  2889.  
  2890.          if (var10 != var9) {
  2891.             if (var9 < var10) {
  2892.                return -1;
  2893.             }
  2894.  
  2895.             return 1;
  2896.          }
  2897.  
  2898.          ++var5;
  2899.          ++var6;
  2900.       }
  2901.    }
  2902.  
  2903.    private static int mantcompare(char[] var0, char[] var1) {
  2904.       boolean var2 = false;
  2905.       if (var0.length < var1.length) {
  2906.          return -1;
  2907.       } else if (var0.length > var1.length) {
  2908.          return 1;
  2909.       } else {
  2910.          int var3 = var0.length - 1;
  2911.  
  2912.          for(int var4 = 0; var4 <= var3; ++var4) {
  2913.             if (var0[var4] < var1[var4]) {
  2914.                return -1;
  2915.             }
  2916.  
  2917.             if (var0[var4] > var1[var4]) {
  2918.                return 1;
  2919.             }
  2920.          }
  2921.  
  2922.          return 0;
  2923.       }
  2924.    }
  2925.  
  2926.    private final Rexx check0(int var1, boolean var2) {
  2927.       int var3 = 0;
  2928.       boolean var4 = false;
  2929.       Object var5 = null;
  2930.       if (this.mant.length > var1) {
  2931.          this.round(var1);
  2932.       }
  2933.  
  2934.       if (var2) {
  2935.          var3 = this.mant.length;
  2936.          byte var6 = 1;
  2937.  
  2938.          for(int var8 = var3 - 1; var8 >= var6 && this.mant[var8] == '0'; --var8) {
  2939.             --var3;
  2940.             ++this.exp;
  2941.          }
  2942.  
  2943.          if (var3 < this.mant.length) {
  2944.             char[] var10 = new char[var3];
  2945.             System.arraycopy(this.mant, 0, var10, 0, var3);
  2946.             this.mant = var10;
  2947.          }
  2948.       }
  2949.  
  2950.       int var11 = this.mant.length - 1;
  2951.  
  2952.       for(int var9 = 0; var9 <= var11; ++var9) {
  2953.          if (this.mant[var9] != '0') {
  2954.             return this;
  2955.          }
  2956.       }
  2957.  
  2958.       if (this.mant.length == 1 && this.ind == 0 && this.exp == 0) {
  2959.          return this;
  2960.       } else {
  2961.          return new Rexx(0);
  2962.       }
  2963.    }
  2964. }
  2965.