private void
    writeChar(
    	char		c )
   	{
    	int rem = current_buffer.length - current_buffer_pos;
    	
    	if ( rem > 0 ){
    		
    		current_buffer[current_buffer_pos++] = (byte)c;
    		
    	}else{
    		
       		int	next_buffer_size = current_buffer.length < BUFFER_DOUBLE_LIMIT?(current_buffer.length << 1):(current_buffer.length + BUFFER_DOUBLE_LIMIT );

    		byte[]	new_buffer = new byte[ next_buffer_size ];
       		
    		new_buffer[ 0 ] = (byte)c;

    		if ( old_buffers == null ){
    			
    			old_buffers = new byte[][]{ current_buffer };
    			
    		}else{
    			
    			byte[][] new_old_buffers = new byte[old_buffers.length+1][];
    			
    			System.arraycopy( old_buffers, 0, new_old_buffers, 0, old_buffers.length );
    			
    			new_old_buffers[ old_buffers.length ] = current_buffer;
    			
    			old_buffers = new_old_buffers;
    		}
    		
    		current_buffer		= new_buffer;
    		current_buffer_pos 	= 1;
     	}
   	}