public java.io.Reader getReader() throws java.io.IOException
  {
     if (inBuf == 0 && nextCharInd >= maxNextCharInd)
        return inputStream;
   
     char[] tmp = null, toPush;
     int cnt = 0;
     if (inBuf != 0)
     {
        tmp = new char[2 * inBuf];
        for (int i = 0; i < inBuf; i++)
           if (buffer[i] < 256)
              tmp[cnt++] = (char)buffer[i];
           else
           {
              tmp[cnt++] = (char)(buffer[i]);
              tmp[cnt++] = (char)(buffer[i] >> 8);
           }
     }

     if (nextCharInd > 0 && nextCharInd <= maxNextCharInd)
     {
        toPush = new char[maxNextCharInd - nextCharInd + cnt];

        if (cnt > 0)
           System.arraycopy(tmp, 0, toPush, 0, cnt);

        System.arraycopy(nextCharBuf, cnt, toPush, 0, maxNextCharInd - nextCharInd);
     }
     else
        toPush = tmp;
  
     if (pushbackBufSize < tmp.length)
        inputStream = new java.io.PushbackReader(inputStream);
     ((java.io.PushbackReader)inputStream).unread(toPush);
  
     bufpos = -1;
     tokenBegin = -1;
     maxNextCharInd = 0;
     inBuf = 0;
 
     return inputStream; 
  }