2 * Copyright (C) 2008 - 2016 The Geeqie Team
4 * Authors: Vladimir Nadvornik, Laurent Monin
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #include "logwindow.h"
25 #include "ui_fileops.h"
27 #include <glib/gprintf.h>
33 static gchar *regexp = NULL;
35 void set_regexp(gchar *cmd_regexp)
37 regexp = g_strdup(cmd_regexp);
42 return g_strdup(regexp);
45 static gboolean log_msg_cb(gpointer data)
48 log_window_append(buf, LOG_MSG);
53 static gboolean log_normal_cb(gpointer data)
56 log_window_append(buf, LOG_NORMAL);
61 void log_domain_printf(const gchar *domain, const gchar *format, ...)
66 gint ret_comp, ret_exec;
70 buf = g_strdup_vprintf(format, ap);
73 if (regexp && command_line && buf)
75 if (g_strcmp0(buf,"\n"))
77 ret_comp = regcomp(®ex, regexp, 0);
80 ret_exec = regexec(®ex, buf, 0, NULL, 0);
82 filtered_buf = g_strconcat(buf, "\n", NULL);
85 print_term(filtered_buf);
86 if (strcmp(domain, DOMAIN_INFO) == 0)
87 g_idle_add(log_normal_cb, filtered_buf);
89 g_idle_add(log_msg_cb, filtered_buf);
98 if (strcmp(domain, DOMAIN_INFO) == 0)
99 g_idle_add(log_normal_cb, buf);
101 g_idle_add(log_msg_cb, buf);
106 * Debugging only functions
111 static gint debug_level = DEBUG_LEVEL_MIN;
114 gint get_debug_level(void)
119 void set_debug_level(gint new_level)
121 debug_level = CLAMP(new_level, DEBUG_LEVEL_MIN, DEBUG_LEVEL_MAX);
124 void debug_level_add(gint delta)
126 set_debug_level(debug_level + delta);
129 gint required_debug_level(gint level)
131 return (debug_level >= level);
134 static gint timeval_delta(struct timeval *result, struct timeval *x, struct timeval *y)
136 if (x->tv_usec < y->tv_usec)
138 gint nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
139 y->tv_usec -= 1000000 * nsec;
143 if (x->tv_usec - y->tv_usec > 1000000)
145 gint nsec = (x->tv_usec - y->tv_usec) / 1000000;
146 y->tv_usec += 1000000 * nsec;
150 result->tv_sec = x->tv_sec - y->tv_sec;
151 result->tv_usec = x->tv_usec - y->tv_usec;
153 return x->tv_sec < y->tv_sec;
156 const gchar *get_exec_time(void)
158 static gchar timestr[30];
159 static struct timeval start_tv = {0, 0};
160 static struct timeval previous = {0, 0};
161 static gint started = 0;
163 struct timeval tv = {0, 0};
164 static struct timeval delta = {0, 0};
166 gettimeofday(&tv, NULL);
168 if (start_tv.tv_sec == 0) start_tv = tv;
170 tv.tv_sec -= start_tv.tv_sec;
171 if (tv.tv_usec >= start_tv.tv_usec)
172 tv.tv_usec -= start_tv.tv_usec;
175 tv.tv_usec += 1000000 - start_tv.tv_usec;
179 if (started) timeval_delta(&delta, &tv, &previous);
184 g_snprintf(timestr, sizeof(timestr), "%5d.%06d (+%05d.%06d)", (gint)tv.tv_sec, (gint)tv.tv_usec, (gint)delta.tv_sec, (gint)delta.tv_usec);
189 void init_exec_time(void)
195 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */