MODULE logging ! see also logging.h ! macro LOGBUF accumulates log output into logging_buffer ! flush_plugin points to a procedure pointer that typically prints all lines in the buffer and prepends tags ! This module provides a default implementation of flush_plugin but the top-level driver is welcome to override it. IMPLICIT NONE SAVE PRIVATE INTERFACE SUBROUTINE plugin(buf) CHARACTER(*), INTENT(IN) :: buf(:) END SUBROUTINE plugin END INTERFACE PROCEDURE(plugin), POINTER :: flush_plugin => default_flush_plugin INTEGER, PARAMETER :: bufsize=10000 CHARACTER(bufsize) :: logging_buf(100) INTEGER :: logging_lineno=0 PUBLIC :: logging_buf, logging_lineno, flush_log, flush_plugin CONTAINS SUBROUTINE flush_log CALL flush_plugin(logging_buf(1:logging_lineno)) logging_lineno=0 END SUBROUTINE flush_log SUBROUTINE default_flush_plugin(buf) CHARACTER(*), INTENT(IN) :: buf(:) INTEGER :: i DO i=1, SIZE(buf) PRINT *, 'INFO : ', TRIM(buf(i)) END DO END SUBROUTINE default_flush_plugin END MODULE logging