void AddToBuffer (int b)
{
if (buffer == null) {
buffer = new char [1024];
} else if (writepos >= buffer.Length) {
char [] newbuf = new char [buffer.Length * 2];
Buffer.BlockCopy (buffer, 0, newbuf, 0, buffer.Length);
buffer = newbuf;
}
buffer [writepos++] = (char) b;
}