A stream's tt(write) member calls tt(xputn) to write tt(nChars) characters
into the device. As with tt(xsgetn) the tt(nChar) characters might not be
available in the current buffer. In those cases tt(overflow) is called to
refresh the buffer. Room for some bytes may still be available, and at each
cycle the number of available locations are copied from the member's tt(buf)
parameter to the tt(streambuf's) write buffer, calling tt(overflow) if there's
no space available anymore in the current write buffer. So tt(xsputn), while
there are (still) characters to be written to the device, must
    itemization(
    it() determine whether the current buffer contains some space;
    it() if not, it must call tt(overflow);
    it() the number of available characters are copied to the device's 
        write-buffer;
    it() the number of bytes to write is reduced by the number of available
        bytes; 
    it() the tt(buf) pointer and the counters are updated using the
        number of written bytes. 
    )

Here is a skeleton of tt(xsputn):
    verbinclude(-a examples/xsputn.cc)
