home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 November / PCO_1198.ISO / filesbbs / os2 / netrexx.arj / NETREXX.ZIP / NetRexx / netrexx / lang / Rexx.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-09-01  |  32.5 KB  |  3,037 lines

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