home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 May / PCO_5_97.ISO / FilesBBS / OS2 / NETREXX.ARJ / NETREXX.ZIP / NetRexx / netrexx / lang / Rexx.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-02-18  |  32.4 KB  |  2,960 lines

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