#include "top.h"
#define DEFAULT_WIDTH 80
extern int disp_bufsize;
extern char *disp_lbuf;
static boolean_t
log_p_skipl(void);
static boolean_t
log_p_printl(const char *a_format, ...);
static boolean_t
log_p_println(const char *a_format, ...);
static boolean_t
log_p_vprintln(boolean_t a_newline, const char *a_format, va_list a_p);
boolean_t
log_run(void)
{
boolean_t retval;
unsigned i, remain;
disp_lbuf = (char *)malloc(DEFAULT_WIDTH + 1);
if (disp_lbuf == NULL) {
retval = TRUE;
goto RETURN;
}
disp_lbuf[0]='\0';
disp_bufsize = DEFAULT_WIDTH + 1;
if (samp_init(log_p_skipl, log_p_printl, log_p_println, log_p_vprintln,
log_p_vprintln)) {
retval = TRUE;
goto RETURN;
}
i = 0;
while (1) {
if (samp_run()) {
retval = TRUE;
goto RETURN;
}
if (fflush(stdout) == EOF) {
retval = TRUE;
goto RETURN;
}
i++;
if (top_opt_l && i == top_opt_l_samples) {
break;
}
if (log_p_skipl()) {
retval = TRUE;
goto RETURN;
}
for (remain = top_opt_s; (remain = sleep(remain)) != 0;) {
}
}
samp_fini();
retval = FALSE;
RETURN:
return retval;
}
static boolean_t
log_p_skipl(void)
{
boolean_t retval;
if (fwrite("\n", 1, 1, stdout) != 1) {
retval = TRUE;
goto RETURN;
}
retval = FALSE;
RETURN:
return retval;
}
static boolean_t
log_p_printl(const char *a_format, ...)
{
boolean_t retval;
va_list ap;
va_start(ap, a_format);
retval = log_p_vprintln(FALSE, a_format, ap);
va_end(ap);
return retval;
}
static boolean_t
log_p_println(const char *a_format, ...)
{
boolean_t retval;
va_list ap;
va_start(ap, a_format);
retval = log_p_vprintln(TRUE, a_format, ap);
va_end(ap);
return retval;
}
static boolean_t
log_p_vprintln(boolean_t a_newline, const char *a_format, va_list a_p)
{
boolean_t retval;
if (vprintf(a_format, a_p) == -1) {
retval = TRUE;
goto RETURN;
}
if (a_newline) {
if (fwrite("\n", 1, 1, stdout) != 1) {
retval = TRUE;
goto RETURN;
}
}
retval = FALSE;
RETURN:
return retval;
}