void CLOG_cput( ptr ) double **ptr;This function moves records from one of the three buffers being merged into the output buffer. When the output buffer is filled, it is sent to the parent. A separate output routine handles output on the root. If the input buffer is emptied (endblock record is read) and corresponds to a child, a new buffer is received from the child. When an endlog record is read on the input buffer, the number of sources is decremented and the time is set to positive infinity so that the empty input source will never have the lowest time.
At entry we assume that *p is pointing to a log record that is not an end-of-block record, and that outbuf is pointing to a buffer that has room in it for the record. We ensure that these conditions are met on exit as well, by sending (or writing, if we are the root) and receiving blocks as necessary.