home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 February / PCO_0298.ISO / filesbbs / os2 / netrexx.arj / NETREXX.ZIP / NetRexx / netrexx / lang / Rexx.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-27  |  31.9 KB  |  2,988 lines

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