/[xlog]/xlog/src/log.c
ViewVC logotype

Diff of /xlog/src/log.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by pa4tu, Sat Oct 19 17:50:20 2002 UTC revision 1.2 by pa4tu, Thu Nov 21 19:57:46 2002 UTC
# Line 33  Line 33 
33  #if HAVE_DIRENT_H  #if HAVE_DIRENT_H
34  #       include <dirent.h>  #       include <dirent.h>
35  #       define NAMLEN(dirent) strlen((dirent)->d_name)  #       define NAMLEN(dirent) strlen((dirent)->d_name)
36  #else  #else
37  #       define dirent direct  #       define dirent direct
38  #       define NAMLEN(dirent) (dirent)->d_namlen  #       define NAMLEN(dirent) (dirent)->d_namlen
39  #       if HAVE_SYS_NDIR_H  #       if HAVE_SYS_NDIR_H
# Line 60  extern gchar **qso; Line 60  extern gchar **qso;
60    
61  /* extracted name of the log from filename  /* extracted name of the log from filename
62     returned string should be free'd */     returned string should be free'd */
63  gchar *logname(gchar *filename)  gchar *
64    logname (gchar * filename)
65  {  {
66          gchar *logname;    gchar *logname;
67          gchar **split = g_strsplit(filename, ".", 1);    gchar **split = g_strsplit (filename, ".", 1);
68          logname = g_strdup(split[0]);    logname = g_strdup (split[0]);
69          g_strfreev(split);    g_strfreev (split);
70          return(logname);    return (logname);
71  }  }
72    
73  /* prepend qsos to the log */  /* prepend qsos to the log */
74  gint fillin_clist(LOGDB *handle, qso_t q[], gpointer arg) {  gint
75          logtype *logw = (logtype *)arg;  fillin_clist (LOGDB * handle, qso_t q[], gpointer arg)
76          gint newrow;  {
77      logtype *logw = (logtype *) arg;
78          state.qsos++;    gint newrow;
79          logw->qsos++;  
80          q[NR] = g_strdup_printf("%d", logw->qsos);    state.qsos++;
81          newrow = gtk_clist_prepend(GTK_CLIST(logw->clist), q);    logw->qsos++;
82          if (preferences.logcolor == 1)    q[NR] = g_strdup_printf ("%d", logw->qsos);
83                  setcallstyle(logw->clist, newrow, preferences.themecolor,    newrow = gtk_clist_prepend (GTK_CLIST (logw->clist), q);
84                          preferences.themefont);    if (preferences.logcolor == 1)
85          return 0;      setcallstyle (logw->clist, newrow, preferences.themecolor,
86                      preferences.themefont);
87      return 0;
88  }  }
89    
90  /* create a new struct for a log */  /* create a new struct for a log */
91  static logtype *new_logwindow(void)  static logtype *
92    new_logwindow (void)
93  {  {
94          logtype *newlog;    logtype *newlog;
95          gint i;    gint i;
96    
97          newlog = g_new0(struct logtype, 1);    newlog = g_new0 (struct logtype, 1);
98          newlog->scrolledwindow = NULL;    newlog->scrolledwindow = NULL;
99          newlog->clist = NULL;    newlog->clist = NULL;
100          newlog->label = NULL;    newlog->label = NULL;
101          newlog->logname = NULL;    newlog->logname = NULL;
102          newlog->logchanged = FALSE;    newlog->logchanged = FALSE;
103          newlog->qsos = 0;    newlog->qsos = 0;
104          newlog->columns = 0;    newlog->columns = 0;
105          for (i = 0; i < QSO_FIELDS; i++)    for (i = 0; i < QSO_FIELDS; i++)
106                  newlog->logfields[i] = -1;      newlog->logfields[i] = -1;
107          return(newlog);    return (newlog);
108  }  }
109    
110  /* open a log and return a struct */  /* open a log and return a struct */
111  logtype *openlog(LOGDB *lp, gchar *name, gint page)  logtype *
112    openlog (LOGDB * lp, gchar * name, gint page)
113  {  {
114          logtype *logwindow;    logtype *logwindow;
115          gint i, j;    gint i, j;
116          GtkWidget *columnlabel;    GtkWidget *columnlabel;
117          gchar *logn;    gchar *logn;
118    
119          logwindow = new_logwindow();    logwindow = new_logwindow ();
120          logwindow->scrolledwindow = gtk_scrolled_window_new (NULL, NULL);    logwindow->scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
121          gtk_widget_show(logwindow->scrolledwindow);    gtk_widget_show (logwindow->scrolledwindow);
122          gtk_container_add (GTK_CONTAINER (mainnotebook), logwindow->scrolledwindow);    gtk_container_add (GTK_CONTAINER (mainnotebook), logwindow->scrolledwindow);
123          gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(logwindow->scrolledwindow),    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW
124                  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);                                    (logwindow->scrolledwindow),
125          logwindow->clist = gtk_clist_new(QSO_FIELDS);                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
126          gtk_widget_show(logwindow->clist);    logwindow->clist = gtk_clist_new (QSO_FIELDS);
127          gtk_signal_connect (GTK_OBJECT(logwindow->clist), "select_row",    gtk_widget_show (logwindow->clist);
128                  GTK_SIGNAL_FUNC (on_log_select_row), NULL);    gtk_signal_connect (GTK_OBJECT (logwindow->clist), "select_row",
129          gtk_container_add(GTK_CONTAINER(logwindow->scrolledwindow), logwindow->clist);                        GTK_SIGNAL_FUNC (on_log_select_row), NULL);
130      gtk_container_add (GTK_CONTAINER (logwindow->scrolledwindow),
131          logwindow->columns = lp->column_nr;                       logwindow->clist);
132          for (j = 0; j < QSO_FIELDS; j++)  
133      logwindow->columns = lp->column_nr;
134      for (j = 0; j < QSO_FIELDS; j++)
135        {
136          gtk_clist_set_column_auto_resize (GTK_CLIST (logwindow->clist), j,
137                                            TRUE);
138          logwindow->logfields[j] = lp->column_fields[j];
139        }
140      gtk_clist_column_titles_show (GTK_CLIST (logwindow->clist));
141    
142      columnlabel = gtk_label_new ("NR");
143      gtk_clist_set_column_widget (GTK_CLIST (logwindow->clist), NR, columnlabel);
144      gtk_clist_column_title_passive (GTK_CLIST (logwindow->clist), NR);
145    
146      /* see which fields are in the log and add a column label */
147      for (j = 1; j < QSO_FIELDS; j++)
148        {
149          for (i = 0; i < lp->column_nr; i++)
150          {          {
151                  gtk_clist_set_column_auto_resize(GTK_CLIST(logwindow->clist), j, TRUE);            if (j == lp->column_fields[i])
152                  logwindow->logfields[j] = lp->column_fields[j];              break;
         }  
         gtk_clist_column_titles_show (GTK_CLIST (logwindow->clist));  
   
         columnlabel = gtk_label_new("NR");  
         gtk_clist_set_column_widget(GTK_CLIST(logwindow->clist), NR, columnlabel);  
         gtk_clist_column_title_passive(GTK_CLIST(logwindow->clist), NR);  
   
         /* see which fields are in the log and add a column label */  
         for (j = 1; j < QSO_FIELDS; j++)  
         {  
                 for (i = 0; i < lp->column_nr; i++)  
                 {  
                         if (j == lp->column_fields[i])  
                         break;  
                 }  
                 if (j == U1)  
                         columnlabel = gtk_label_new(preferences.freefield1);  
                 else if (j == U2)  
                         columnlabel = gtk_label_new(preferences.freefield2);  
                 else  
                         columnlabel = gtk_label_new(strfield(j));  
                 gtk_clist_set_column_widget(GTK_CLIST(logwindow->clist), j, columnlabel);  
                 gtk_clist_column_title_passive(GTK_CLIST(logwindow->clist), j);  
                 if (i == lp->column_nr) /* field not found, hide this column */  
                         gtk_clist_set_column_visibility(GTK_CLIST(logwindow->clist), j, FALSE);  
153          }          }
154          if (j == U1)
155            columnlabel = gtk_label_new (preferences.freefield1);
156          else if (j == U2)
157            columnlabel = gtk_label_new (preferences.freefield2);
158          else
159            columnlabel = gtk_label_new (strfield (j));
160          gtk_clist_set_column_widget (GTK_CLIST (logwindow->clist), j,
161                                       columnlabel);
162          gtk_clist_column_title_passive (GTK_CLIST (logwindow->clist), j);
163          if (i == lp->column_nr)   /* field not found, hide this column */
164            gtk_clist_set_column_visibility (GTK_CLIST (logwindow->clist), j,
165                                             FALSE);
166        }
167    
168      logn = logname (name);
169      logwindow->label = gtk_label_new (logn);
170      gtk_widget_show (logwindow->label);
171      gtk_notebook_set_tab_label (GTK_NOTEBOOK (mainnotebook),
172                                  gtk_notebook_get_nth_page (GTK_NOTEBOOK
173                                                             (mainnotebook),
174                                                             page),
175                                  logwindow->label);
176      gtk_misc_set_padding (GTK_MISC (logwindow->label), 10, 0);
177      setlabelstyle (logwindow->label, preferences.themecolor,
178                     preferences.themefont);
179      logwindow->logname = g_strdup (logn);
180    
181          logn = logname(name);    g_free (logn);
182          logwindow->label = gtk_label_new(logn);    return (logwindow);
         gtk_widget_show(logwindow->label);  
         gtk_notebook_set_tab_label(GTK_NOTEBOOK (mainnotebook),  
                 gtk_notebook_get_nth_page(GTK_NOTEBOOK (mainnotebook), page), logwindow->label);  
         gtk_misc_set_padding(GTK_MISC(logwindow->label), 10, 0);  
         setlabelstyle(logwindow->label, preferences.themecolor, preferences.themefont);  
         logwindow->logname = g_strdup(logn);  
           
         g_free(logn);  
         return(logwindow);  
183  }  }
184    
185  /* saving of the log */  /* saving of the log */
186  void savelog(gpointer arg, gchar *logfile, gint type)  void
187    savelog (gpointer arg, gchar * logfile, gint type)
188  {  {
189          LOGDB *lp;    LOGDB *lp;
190          gint i, j;    gint i, j;
191          GtkWidget *widget;    GtkWidget *widget;
192          gchar *label, **item, *tmpu1, *tmpu2;    gchar *label, **item, *tmpu1, *tmpu2;
193          gint fields[QSO_FIELDS], widths[QSO_FIELDS];    gint fields[QSO_FIELDS], widths[QSO_FIELDS];
194          logtype *logw = (logtype *)arg;    logtype *logw = (logtype *) arg;
195          FILE *ifp, *ofp;    FILE *ifp, *ofp;
196          gchar buf[1024];    gchar buf[1024];
197    
198    
199          gtk_clist_freeze(GTK_CLIST(logw->clist));    gtk_clist_freeze (GTK_CLIST (logw->clist));
200          item = g_new0(gchar *, QSO_FIELDS);    item = g_new0 (gchar *, QSO_FIELDS);
201    
202          /* how many columns do we have and what are the labels, skip first field */    /* how many columns do we have and what are the labels, skip first field */
203          /* ----> unknown fields have a fixed label */    /* ----> unknown fields have a fixed label */
204          for (i = 0; i < logw->columns; i++)    for (i = 0; i < logw->columns; i++)
205        {
206          widget =
207            gtk_clist_get_column_widget (GTK_CLIST (logw->clist),
208                                         logw->logfields[i]);
209          gtk_label_get (GTK_LABEL (widget), &label);
210          if (logw->logfields[i] == U1)
211            fields[i] = U1;
212          else if (logw->logfields[i] == U2)
213            fields[i] = U2;
214          else
215            fields[i] = parse_field_name (label);
216          widths[i] = parse_field_width (fields[i]);
217        }
218    
219      if (type == TYPE_ADIF)
220        lp =
221          log_file_create ("/tmp/xlog.adi", type, logw->columns, fields, widths);
222      else
223        lp = log_file_create (logfile, type, logw->columns, fields, widths);
224    
225      if (lp)
226        {
227          for (i = GTK_CLIST (logw->clist)->rows - 1; i >= 0; i--)
228          {          {
229                  widget = gtk_clist_get_column_widget(GTK_CLIST(logw->clist), logw->logfields[i]);            for (j = 0; j < logw->columns; j++)
230                  gtk_label_get(GTK_LABEL(widget), &label);              gtk_clist_get_text (GTK_CLIST (logw->clist), i,
231                  if (logw->logfields[i] == U1)                                  logw->logfields[j], &item[fields[j]]);
232                          fields[i] = U1;            log_file_qso_append (lp, item);
                 else if (logw->logfields[i] == U2)  
                         fields[i] = U2;  
                 else  
                         fields[i] = parse_field_name(label);  
                 widths[i] = parse_field_width(fields[i]);  
233          }          }
234                  log_file_close (lp);
235          if (type == TYPE_ADIF)        if (type == TYPE_ADIF)    /* search and replace U1 and U2 when using ADIF */
                 lp = log_file_create("/tmp/xlog.adi", type, logw->columns, fields, widths);  
         else  
                 lp = log_file_create(logfile, type, logw->columns, fields, widths);  
   
         if (lp)  
236          {          {
237                  for (i = GTK_CLIST(logw->clist)->rows - 1 ; i >= 0 ; i--)            ifp = fopen ("/tmp/xlog.adi", "r");
238                  {            ofp = fopen (logfile, "w");
239                          for (j = 0; j < logw->columns; j++)            if (ifp && ofp)
240                                  gtk_clist_get_text(GTK_CLIST(logw->clist), i, logw->logfields[j], &item[fields[j]]);              {
241                  log_file_qso_append(lp, item);                while (fgets (buf, 1024, ifp))
                 }  
                 log_file_close(lp);  
                 if (type == TYPE_ADIF) /* search and replace U1 and U2 when using ADIF */  
242                  {                  {
243                          ifp = fopen("/tmp/xlog.adi", "r");                    tmpu1 = strreplace (buf, "U1", preferences.freefield1);
244                          ofp = fopen(logfile, "w");                    tmpu2 = strreplace (tmpu1, "U2", preferences.freefield2);
245                          if (ifp && ofp)                    fputs (tmpu2, ofp);
                         {  
                                 while (fgets(buf, 1024, ifp))  
                                 {  
                                         tmpu1 = strreplace(buf, "U1", preferences.freefield1);  
                                         tmpu2 = strreplace(tmpu1, "U2", preferences.freefield2);  
                                         fputs(tmpu2, ofp);  
                                 }  
                                 fclose(ifp);  
                                 fclose(ofp);  
                         }  
246                  }                  }
247                  fclose (ifp);
248                  fclose (ofp);
249                }
250          }          }
251          else      }
252          {    else
253                  update_statusbar(_("Creation of logfile failed"));      {
254          }        update_statusbar (_("Creation of logfile failed"));
255          gtk_clist_thaw(GTK_CLIST(logw->clist));      }
256          g_free(item);    gtk_clist_thaw (GTK_CLIST (logw->clist));
257      g_free (item);
258  }  }
259    
260    
261  /* look for logs in dir */  /* look for logs in dir */
262  GString *getlogs(gchar *path, gint filetype)  GString *
263    getlogs (gchar * path, gint filetype)
264  {  {
265          DIR *directory;    DIR *directory;
266          struct dirent *dirEntry;    struct dirent *dirEntry;
267          gchar *filen;    gchar *filen;
268          GString *logs = g_string_new("");    GString *logs = g_string_new ("");
269    
270          directory = opendir(path);    directory = opendir (path);
271          while (NULL != (dirEntry = readdir(directory)))    while (NULL != (dirEntry = readdir (directory)))
272        {
273          filen = g_strdup (dirEntry->d_name);
274          if (dirEntry->d_type == DT_REG)   /* only regular files */
275          {          {
276                  filen = g_strdup(dirEntry->d_name);            if (filetype == 0)    /* type xlog */
277                  if (dirEntry->d_type == DT_REG) /* only regular files */              {
278                  g_strreverse (filen);
279                  if (g_strncasecmp (filen, "golx.", 5) == 0)
280                  {                  {
281                  if (filetype == 0) /* type xlog */                    g_string_append (logs, dirEntry->d_name);
282                  {                    g_string_append_c (logs, '\n');
                         g_strreverse(filen);  
                         if (g_strncasecmp(filen, "golx.", 5) == 0)  
                         {  
                                 g_string_append(logs, dirEntry->d_name);  
                                 g_string_append_c(logs, '\n');  
                         }  
283                  }                  }
284                  else /* other types */              }
285              else                  /* other types */
286                {
287                  if ((g_strcasecmp (filen, "..") != 0)
288                      && (g_strcasecmp (filen, ".") != 0))
289                  {                  {
290                          if ((g_strcasecmp(filen, "..") != 0)                    g_string_append (logs, dirEntry->d_name);
291                                  && (g_strcasecmp(filen, ".") != 0))                    g_string_append_c (logs, '\n');
                         {  
                                 g_string_append(logs, dirEntry->d_name);  
                                 g_string_append_c(logs, '\n');  
                         }  
                 }  
292                  }                  }
293                }
294          }          }
295          return (logs);      }
296      return (logs);
297  }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26