24 |
#include <gtk/gtk.h> |
#include <gtk/gtk.h> |
25 |
#include <stdio.h> |
#include <stdio.h> |
26 |
#include <stdlib.h> |
#include <stdlib.h> |
27 |
|
#include <sys/types.h> |
28 |
|
#include <sys/stat.h> |
29 |
|
#include <unistd.h> |
30 |
|
#include <time.h> |
31 |
|
|
32 |
#include "callbacks_menu.h" |
#include "callbacks_menu.h" |
33 |
#include "callbacks_printdialog.h" |
#include "callbacks_printdialog.h" |
57 |
extern GList *logwindowlist; |
extern GList *logwindowlist; |
58 |
|
|
59 |
#if WANT_HAMLIB |
#if WANT_HAMLIB |
60 |
extern GList *riglist; |
extern GList *riglist; |
61 |
|
extern gchar *xlogdir; |
62 |
|
gint saved_fd; |
63 |
|
gint tracetimer = -1; |
64 |
|
fileinfo finfo; |
65 |
#endif |
#endif |
66 |
|
|
67 |
void |
void |
990 |
gtk_widget_show (dialogsdialog); |
gtk_widget_show (dialogsdialog); |
991 |
} |
} |
992 |
|
|
993 |
|
/* check if tracefile has changed */ |
994 |
|
static int fileupdated(void) |
995 |
|
{ |
996 |
|
struct stat s; |
997 |
|
gint status; |
998 |
|
|
999 |
|
if (finfo.filename) |
1000 |
|
{ |
1001 |
|
status = stat (finfo.filename, &s); |
1002 |
|
if (finfo.modified != s.st_mtime) |
1003 |
|
return 1; |
1004 |
|
} |
1005 |
|
return -1; |
1006 |
|
} |
1007 |
|
|
1008 |
|
|
1009 |
|
static gint |
1010 |
|
updatetrace (gpointer data) |
1011 |
|
{ |
1012 |
|
GtkWidget *tracetextview; |
1013 |
|
GtkTextBuffer *buffer; |
1014 |
|
GtkTextIter start, end; |
1015 |
|
GtkTextMark *mark; |
1016 |
|
FILE *fd; |
1017 |
|
gint numread = 0; |
1018 |
|
gchar buf[1025]; |
1019 |
|
|
1020 |
|
fflush(stderr); |
1021 |
|
if (fileupdated ()) |
1022 |
|
{ |
1023 |
|
if ((fd = fopen(finfo.filename, "r"))) |
1024 |
|
{ |
1025 |
|
tracetextview = lookup_widget((GtkWidget *)data, "tracetextview"); |
1026 |
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tracetextview)); |
1027 |
|
gtk_text_buffer_get_bounds (buffer, &start, &end); |
1028 |
|
fseek (fd, finfo.filesize, SEEK_SET); |
1029 |
|
while (!feof(fd)) |
1030 |
|
{ |
1031 |
|
numread = fread(buf, 1, 1024, fd); |
1032 |
|
gtk_text_buffer_insert (buffer, &end, buf, numread); |
1033 |
|
mark = gtk_text_buffer_get_mark (buffer, "insert"); |
1034 |
|
gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(tracetextview), |
1035 |
|
mark, 0.0, FALSE, 0.0, 1.0); |
1036 |
|
} |
1037 |
|
fclose (fd); |
1038 |
|
} |
1039 |
|
} |
1040 |
|
return 1; |
1041 |
|
} |
1042 |
|
|
1043 |
void |
void |
1044 |
on_trace_hamlib_activate(GtkMenuItem * menuitem, gpointer user_data) |
on_trace_hamlib_activate(GtkMenuItem * menuitem, gpointer user_data) |
1045 |
{ |
{ |
1046 |
#if WANT_HAMLIB |
#if WANT_HAMLIB |
1047 |
GtkWidget *tracedialog; |
GtkWidget *tracedialog, *tracelabel; |
1048 |
|
gint hamlibresult; |
1049 |
|
gchar *tracestr; |
1050 |
|
|
1051 |
|
/* redirect stderr to a file and start the file monitor, |
1052 |
|
stop and start hamlib with tracing enabled */ |
1053 |
tracedialog = create_tracedialog(); |
tracedialog = create_tracedialog(); |
1054 |
gtk_widget_set_sensitive (mainwindow, 0); |
|
1055 |
|
saved_fd = dup (STDERR_FILENO); |
1056 |
|
finfo.filename = g_strdup_printf ( "%s/hamlib.out", xlogdir); |
1057 |
|
stop_hamlib(); |
1058 |
|
finfo.fd = freopen (finfo.filename, "w", stderr); |
1059 |
|
hamlibresult = start_hamlib (preferences.radio, preferences.device, |
1060 |
|
RIG_DEBUG_TRACE, preferences.polltime); |
1061 |
|
tracetimer = gtk_timeout_add (1000, (GtkFunction) updatetrace, tracedialog); |
1062 |
|
|
1063 |
|
tracelabel = lookup_widget(tracedialog, "tracelabel"); |
1064 |
|
tracestr = g_strdup_printf ( _("Saving to %s"), finfo.filename); |
1065 |
|
gtk_label_set_text (GTK_LABEL (tracelabel), tracestr); |
1066 |
|
g_free(tracestr); |
1067 |
gtk_widget_show (tracedialog); |
gtk_widget_show (tracedialog); |
1068 |
#endif |
#endif |
1069 |
} |
} |