Update of /cvsroot/morphix/datetimeconf/src In directory sc8-pr-cvs1:/tmp/cvs-serv18289 Modified Files: callbacks.c callbacks.h interface.c libdatetime.c libdatetime.h main.c Log Message: added UTC handling Index: callbacks.c =================================================================== RCS file: /cvsroot/morphix/datetimeconf/src/callbacks.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** callbacks.c 25 Oct 2003 19:40:34 -0000 1.1.1.1 --- callbacks.c 26 Oct 2003 00:00:15 -0000 1.2 *************** *** 15,18 **** --- 15,19 ---- gboolean time_changed; gboolean ntp_changed; + gboolean utc_changed; tz_struct *nearest_timezone; tz_struct *selected_timezone; *************** *** 39,42 **** --- 40,44 ---- { GtkWidget *ntpcheck = lookup_widget(MainWindow,"checkbutton1"); + GtkWidget *utccheck = lookup_widget(MainWindow,"checkbutton2"); GtkWidget *combo = lookup_widget(MainWindow,"combo1"); *************** *** 44,50 **** if (time_changed == TRUE) { write_date_time(&dt); ! } if (ntp_changed == TRUE) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ntpcheck))) { --- 46,58 ---- if (time_changed == TRUE) { + debug("Time has changed, setting and syncing hardware clock\n"); write_date_time(&dt); ! sync_hardware_clock(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(utccheck))); + } + if (utc_changed == TRUE) { + debug("UTC has been changed, writing to bootscript defaults\n"); sync_hardware_clock(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(utccheck))); + set_system_utc(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(utccheck))); + } if (ntp_changed == TRUE) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ntpcheck))) { *************** *** 158,161 **** --- 166,176 ---- } + void set_utc_changed() { + if (realised == TRUE) { + debug("UTC has been changed\n"); + utc_changed = TRUE; + } + } + void on_calendar1_day_selected (GtkCalendar *calendar, *************** *** 219,222 **** --- 234,245 ---- { set_time_changed(); + } + + + void + on_checkbutton2_toggled (GtkToggleButton *togglebutton, + gpointer user_data) + { + set_utc_changed(); } Index: callbacks.h =================================================================== RCS file: /cvsroot/morphix/datetimeconf/src/callbacks.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** callbacks.h 25 Oct 2003 19:40:34 -0000 1.1.1.1 --- callbacks.h 26 Oct 2003 00:00:15 -0000 1.2 *************** *** 70,71 **** --- 70,75 ---- on_spinbutton3_changed (GtkEditable *editable, gpointer user_data); + + void + on_checkbutton2_toggled (GtkToggleButton *togglebutton, + gpointer user_data); Index: interface.c =================================================================== RCS file: /cvsroot/morphix/datetimeconf/src/interface.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** interface.c 25 Oct 2003 19:40:32 -0000 1.1.1.1 --- interface.c 26 Oct 2003 00:00:15 -0000 1.2 *************** *** 283,287 **** gtk_widget_show (checkbutton2); gtk_box_pack_start (GTK_BOX (vbox3), checkbutton2, FALSE, FALSE, 0); - gtk_widget_set_sensitive (checkbutton2, FALSE); label2 = gtk_label_new (_("Timezone")); --- 283,286 ---- *************** *** 344,347 **** --- 343,349 ---- g_signal_connect ((gpointer) drawingarea1, "expose_event", G_CALLBACK (on_drawingarea1_expose_event), + NULL); + g_signal_connect ((gpointer) checkbutton2, "toggled", + G_CALLBACK (on_checkbutton2_toggled), NULL); g_signal_connect ((gpointer) helpbutton1, "clicked", Index: libdatetime.c =================================================================== RCS file: /cvsroot/morphix/datetimeconf/src/libdatetime.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** libdatetime.c 25 Oct 2003 19:40:34 -0000 1.1.1.1 --- libdatetime.c 26 Oct 2003 00:00:15 -0000 1.2 *************** *** 143,147 **** if (!g_file_get_contents(ZONETAB,&zones,&zones_len,NULL)) { ! /* error */ } --- 143,147 ---- if (!g_file_get_contents(ZONETAB,&zones,&zones_len,NULL)) { ! return FALSE; } *************** *** 196,200 **** } g_strfreev(zone_array); ! // free(zones); return TRUE; } --- 196,200 ---- } g_strfreev(zone_array); ! // free(zones); /* think something of zones isn't copied, segfaults when uncommented, need to run splint on this... */ return TRUE; } *************** *** 237,246 **** */ ! gboolean sync_hardware_clock() { gchar cmdline[256]; ! sprintf(cmdline,"/sbin/hwclock --systohc"); exec_command(cmdline); } void restart_ntp_client() { --- 237,326 ---- */ ! gboolean sync_hardware_clock(gboolean utc) { gchar cmdline[256]; ! debug("Sycing hardware clock, utc: %d\n",utc); ! if (utc == TRUE) { ! sprintf(cmdline,"/sbin/hwclock --systohc --utc"); ! } ! else { ! sprintf(cmdline,"/sbin/hwclock --systohc"); ! } exec_command(cmdline); + + return TRUE; + } + + gboolean check_system_utc() { + gchar **utc_array = NULL; + gchar *utc_string = NULL; + gint utc_len, i; + gboolean utc = FALSE; + + if (!g_file_get_contents(BOOT_SCRIPT_DEFAULTS,&utc_string,&utc_len,NULL)) { + return FALSE; + } + + /* generate a modules script */ + utc_array = g_strsplit(utc_string,"\n",0); + if (utc_array == NULL || utc_string == NULL) { + debug("Error: unable to read default bootscript info\n"); + return FALSE; + } + for (i = 0; utc_array[i] != NULL; i++) { + if (strcmp(utc_array[i],"UTC=no") == 0) { + utc = FALSE; + break; + } + if (strcmp(utc_array[i],"UTC=yes") == 0) { + utc = TRUE; + break; + } + } + g_strfreev(utc_array); + free(utc_string); + + debug("parsed bootscript defaults, utc: %d\n",utc); + + return utc; } + gboolean set_system_utc(gboolean utc) { + gchar **utc_array = NULL; + gchar *utc_string = NULL; + gint utc_len, i; + + FILE *fp = NULL; + if (!g_file_get_contents(BOOT_SCRIPT_DEFAULTS,&utc_string,&utc_len,NULL)) { + return FALSE; + } + + /* generate a modules script */ + utc_array = g_strsplit(utc_string,"\n",0); + if (utc_array == NULL || utc_string == NULL) { + debug("Error: unable to read default bootscript info\n"); + return FALSE; + } + fp = fopen(BOOT_SCRIPT_DEFAULTS,"w"); + for (i = 0; utc_array[i] != NULL; i++) { + if (strncmp(utc_array[i],"UTC=",4) == 0) { + if (utc == TRUE) { + debug("Setting UTC to yes\n"); + fprintf(fp,"UTC=yes\n"); + } + else { + debug("Setting UTC to no\n"); + fprintf(fp,"UTC=no\n"); + } + } + else { + fprintf(fp,"%s\n",utc_array[i]); + } + } + fclose(fp); + g_strfreev(utc_array); + free(utc_string); + return TRUE; + } + void restart_ntp_client() { Index: libdatetime.h =================================================================== RCS file: /cvsroot/morphix/datetimeconf/src/libdatetime.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** libdatetime.h 25 Oct 2003 19:40:34 -0000 1.1.1.1 --- libdatetime.h 26 Oct 2003 00:00:15 -0000 1.2 *************** *** 7,10 **** --- 7,11 ---- #define NTPCONF "/etc/ntp.conf" #define TIMEZONE_FILE "/etc/timezone" + #define BOOT_SCRIPT_DEFAULTS "/etc/default/rcS" #define DEBUG *************** *** 38,42 **** gboolean write_date_time(struct tm *dm); struct tm* get_current_date_time(); ! gboolean sync_hardware_clock(); void restart_ntp_client(); gboolean read_current_timezone(); --- 39,44 ---- gboolean write_date_time(struct tm *dm); struct tm* get_current_date_time(); ! gboolean sync_hardware_clock(gboolean utc); ! gboolean set_system_utc(gboolean utc); void restart_ntp_client(); gboolean read_current_timezone(); Index: main.c =================================================================== RCS file: /cvsroot/morphix/datetimeconf/src/main.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** main.c 25 Oct 2003 19:40:34 -0000 1.1.1.1 --- main.c 26 Oct 2003 00:00:15 -0000 1.2 *************** *** 19,22 **** --- 19,23 ---- extern gboolean ntp_changed; extern gboolean time_changed; + extern gboolean utc_changed; extern tz_struct *nearest_timezone; extern tz_struct *selected_timezone; *************** *** 45,51 **** --- 46,55 ---- time_changed = FALSE; ntp_changed = FALSE; + utc_changed = FALSE; } void setup_dtconf() { + GtkWidget *utccheckbutton = lookup_widget(MainWindow,"checkbutton2"); + if (!read_zone_info()) { debug("Error: Can't read zone info, exitting\n"); *************** *** 53,57 **** } struct tm *dt = get_current_date_time(); ! set_date_time(*dt); debug("Set date/time\n"); do_ntp_server(); --- 57,62 ---- } struct tm *dt = get_current_date_time(); ! set_date_time(*dt); ! gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(utccheckbutton),check_system_utc()); debug("Set date/time\n"); do_ntp_server(); |