http://marcin-wiacek.fkn.pl/english/zips/mygnokii.tar.gz
[gnokii.git] / xgnokii / xgnokii.c
index ecfe668..233ebd6 100644 (file)
@@ -1,12 +1,8 @@
 /*
 
-  $Id$
-  
   X G N O K I I
 
   A Linux/Unix GUI for Nokia mobile phones.
-  Copyright (C) 1999 Pavel Janík ml., Hugh Blemings
-  & Ján Derfiòák <ja@mail.upjs.sk>.
 
   Released under the terms of the GNU GPL, see file COPYING for more details.
 
 #include "misc.h"
 #include "gsm-common.h"
 #include "gsm-api.h"
-#include "cfgreader.h"
-#include "phones/nk7110.h"
-#include "phones/nk6100.h"
-#include "phones/nk3110.h"
-#include "phones/nk2110.h"
+#include "files/cfgreader.h"
 #include "xgnokii.h"
 #include "xgnokii_common.h"
 #include "xgnokii_lowlevel.h"
 #include "xgnokii_xkeyb.h"
 #include "xgnokii_calendar.h"
 #include "xgnokii_logos.h"
+#include "xgnokii_xring.h"
 #include "xgnokii_cfg.h"
 #include "xgnokii_data.h"
+#include "newmodules/n6110.h"
 
 #include "xpm/logo.xpm"
 #include "xpm/background.xpm"
@@ -111,11 +105,15 @@ gint max_phonebook_sim_number_length;
 
 /* Local variables */
 static char *DefaultXGnokiiDir = XGNOKIIDIR;
+static char *DefaultXGnokiiDocsDir = XGNOKIIDOCSDIR;
 static bool SMSSettingsInitialized = FALSE;
 static bool CallersGroupsInitialized = FALSE;
+static bool SMSFoldersInitialized = FALSE;
 static gint hiddenCallDialog;
 static guint splashRemoveHandler;
 
+GSM_SMSFolders folders;
+
 static struct CallDialog {
   GtkWidget *dialog;
   GtkWidget *label;
@@ -132,7 +130,7 @@ typedef struct {
   GtkWidget *model;
   GtkWidget *init;
   GtkWidget *bindir;
-  GtkWidget *serial, *infrared, *irda;
+  GtkWidget *serial, *infrared, *mbus;
 } ConnectionWidgets;
 
 typedef struct {
@@ -147,9 +145,10 @@ typedef struct {
 typedef struct {
   GtkWidget *set;
   GtkWidget *number;
+  GtkWidget *defaultrecipient;
   GtkWidget *format;
   GtkWidget *validity;
-  SMS_MessageCenter smsSetting[MAX_SMS_CENTER];
+  GSM_MessageCenter smsSetting[MAX_SMS_CENTER];
 } SMSWidgets;
 
 typedef struct {
@@ -177,16 +176,26 @@ static struct ConfigDialogData
   GtkWidget *help;
 } configDialogData;
 
-static SMS_MessageCenter tempMessageSettings;
+static GSM_MessageCenter tempMessageSettings;
 
 
 static inline void Help1 (GtkWidget *w, gpointer data)
 {
-  gchar *indx = g_strdup_printf ("/help/%s/index.html", xgnokiiConfig.locale);
+  gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/main/index.htm", xgnokiiConfig.locale);
   Help (w, indx);
   g_free (indx);
 }
 
+void GUI_InitSMSFoldersInf (void)
+{
+  if (SMSFoldersInitialized)
+    return;
+
+  GSM->GetSMSFolders(&folders);
+  
+  SMSFoldersInitialized = TRUE;
+  GUIEventSend (GUI_EVENT_SMS_FOLDERS_CHANGED);
+}
 
 void GUI_InitCallerGroupsInf (void)
 {
@@ -208,7 +217,7 @@ void GUI_InitCallerGroupsInf (void)
   xgnokiiConfig.callerGroups[4] = g_strndup( _("Other"), MAX_CALLER_GROUP_LENGTH);
   xgnokiiConfig.callerGroups[5] = g_strndup( _("No group"), MAX_CALLER_GROUP_LENGTH);
 
-  if (phoneMonitor.supported & PM_CALLERGROUP)
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
     for (i = 0; i < 5; i++)
     {
       cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
@@ -245,7 +254,6 @@ static inline void DrawBackground (GtkWidget *data)
                   261, 96);
 }
 
-
 int network_levels[] = {
   152, 69, 11, 3,
   138, 69, 11, 3,
@@ -282,7 +290,6 @@ int battery_levels[] = {
   92, 69, 11, 6
 };
 
-
 static inline void DrawBattery (GtkWidget *data, int batterylevel)
 {
   int i;
@@ -304,7 +311,6 @@ static inline void DrawBattery (GtkWidget *data, int batterylevel)
   }
 }
 
-
 static inline void DrawSMS (GtkWidget *data)
 {
   gdk_draw_pixmap (Pixmap,
@@ -326,12 +332,11 @@ static inline void DrawAlarm (GtkWidget *data)
                   9, 9);
 }
 
-
 static inline void DrawText (GtkWidget *data, int at, char *text)
 {
   static GdkFont *Font;
 
-  Font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-90-*-*-*-*-iso8859-*");
+  Font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-90-*-*-*-*-*-*");
   gdk_draw_string (Pixmap,
                   Font,
                   GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
@@ -411,13 +416,13 @@ static gint Update (gpointer data)
 
   DrawBackground (data);
 
-  DrawNetwork (data, phoneMonitor.rfLevel);
+  DrawNetwork(data, phoneMonitor.rfLevel);
 
-  DrawBattery (data, phoneMonitor.batteryLevel);
+  DrawBattery(data, phoneMonitor.batteryLevel);
 
   if (phoneMonitor.alarm)
     DrawAlarm (data);
-    
+
   if (phoneMonitor.working)
     DrawText (data, 25, phoneMonitor.working);
 
@@ -528,7 +533,7 @@ static void ParseSMSCenters (void)
 
   for (i = 0; i < xgnokiiConfig.smsSets; i++)
   {
-    gchar *row[4];
+    gchar *row[5];
     if (*(configDialogData.sms.smsSetting[i].Name) == '\0')
       row[0] = g_strdup_printf (_("Set %d"), i + 1);
     else
@@ -538,32 +543,32 @@ static void ParseSMSCenters (void)
 
     switch (configDialogData.sms.smsSetting[i].Format)
     {
-    case SMS_FText:
+      case GSMF_Text:
         row[2] = g_strdup (_("Text"));
         break;
 
-    case SMS_FPaging:
+    case GSMF_Paging:
         row[2] = g_strdup (_("Paging"));
         break;
 
-    case SMS_FFax:
+    case GSMF_Fax:
         row[2] = g_strdup (_("Fax"));
         break;
 
-    case SMS_FEmail:
-    case SMS_FUCI:
+    case GSMF_Email:
+    case GSMF_UCI:
         row[2] = g_strdup (_("E-Mail"));
         break;
 
-    case SMS_FERMES:
+    case GSMF_ERMES:
         row[2] = g_strdup (_("ERMES"));
         break;
 
-    case SMS_FX400:
+    case GSMF_X400:
         row[2] = g_strdup (_("X.400"));
         break;
 
-    case SMS_FVoice:
+    case GSMF_Voice:
         row[2] = g_strdup (_("Voice"));
         break;
 
@@ -574,27 +579,27 @@ static void ParseSMSCenters (void)
 
     switch (configDialogData.sms.smsSetting[i].Validity)
     {
-      case SMS_V1H:
+      case GSMV_1_Hour:
         row[3] = g_strdup (_("1 h"));
         break;
 
-      case SMS_V6H:
+      case GSMV_6_Hours:
         row[3] = g_strdup (_("6 h"));
         break;
 
-      case SMS_V24H:
+      case GSMV_24_Hours:
         row[3] = g_strdup (_("24 h"));
         break;
 
-      case SMS_V72H:
+      case GSMV_72_Hours:
         row[3] = g_strdup (_("72 h"));
         break;
 
-      case SMS_V1W:
+      case GSMV_1_Week:
         row[3] = g_strdup (_("1 week"));
         break;
 
-      case SMS_VMax:
+      case GSMV_Max_Time:
         row[3] = g_strdup (_("Max. time"));
         break;
 
@@ -603,9 +608,11 @@ static void ParseSMSCenters (void)
         break;
     }
 
+    row[4] = g_strdup (configDialogData.sms.smsSetting[i].DefaultRecipient);
+    
     gtk_clist_append( GTK_CLIST (SMSClist), row); 
 
-    for (j = 0; j < 4; j++)
+    for (j = 0; j < 5; j++)
       g_free (row[j]);
   }
 
@@ -695,13 +702,14 @@ void GUI_ShowOptions (void)
 
   gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.bindir), xgnokiiConfig.bindir);
 
-  if(!strcmp(xgnokiiConfig.connection, "serial")) {
+  if (!strcmp(xgnokiiConfig.connection, "fbus"))
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.serial), TRUE);
-  } else   if(!strcmp(xgnokiiConfig.connection, "infrared")) {
+
+  if (!strcmp(xgnokiiConfig.connection, "infrared"))
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.infrared), TRUE);
-  } else {
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.irda), TRUE);
-  }
+
+  if (!strcmp(xgnokiiConfig.connection, "mbus"))
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.mbus), TRUE);
 
   /* Phone */
   gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.model), phoneMonitor.phone.model);
@@ -738,7 +746,7 @@ void GUI_ShowOptions (void)
   else
   {
     xgnokiiConfig.alarmSupported = TRUE;
-    if (alarm->time.AlarmEnabled)
+    if (alarm->time.IsSet)
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), TRUE);
     else
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE);
@@ -748,7 +756,7 @@ void GUI_ShowOptions (void)
   g_free (alarm);  
 
   /* SMS */
-  if (phoneMonitor.supported & PM_SMS)
+  if (GetModelFeature(FN_SMS)!=0)
   {
     gtk_widget_show (sms_option_frame);
     GUI_InitSMSSettings ();
@@ -758,7 +766,7 @@ void GUI_ShowOptions (void)
 
 
   /* BUSINESS CARD */
-  if (phoneMonitor.supported & PM_SMS)
+  if (GetModelFeature(FN_SMS)!=0)
   {
     gtk_widget_show (user_option_frame);
 
@@ -784,7 +792,7 @@ void GUI_ShowOptions (void)
 
 
   /* Groups */
-  if (phoneMonitor.supported & PM_CALLERGROUP)
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
   {
     gtk_widget_show (cg_names_option_frame);
     GUI_InitCallerGroupsInf ();
@@ -795,7 +803,7 @@ void GUI_ShowOptions (void)
     gtk_widget_hide (cg_names_option_frame);
 
   /* Mail */
-  if (phoneMonitor.supported & PM_SMS)
+  if (GetModelFeature(FN_SMS)!=0)
   {
     gtk_widget_show (mail_option_frame);
     gtk_entry_set_text (GTK_ENTRY (configDialogData.mailbox),
@@ -808,6 +816,9 @@ void GUI_ShowOptions (void)
   gtk_entry_set_text (GTK_ENTRY (configDialogData.help),
                       xgnokiiConfig.helpviewer);
 
+  if (GetModelFeature(FN_SMSCDEFAULT)!=0) {} else
+    gtk_clist_set_column_visibility (GTK_CLIST (SMSClist), 4, (GetModelFeature(FN_SMSCDEFAULT)!=0));
+
   optionsDialogIsOpened = TRUE;
   gtk_widget_show (OptionsDialog);
 }
@@ -833,6 +844,10 @@ static void MainExit (void)
   e->data = NULL;
   GUI_InsertEvent (e);
   pthread_join (monitor_th, NULL); 
+
+  //need to correctly close connection
+  GSM->Terminate();
+
   gtk_main_quit();
 }
 
@@ -841,37 +856,37 @@ static void ShowMenu (GdkEventButton *event)
 {
   GdkEventButton *bevent = (GdkEventButton *) event;
 
-  if (phoneMonitor.supported & PM_KEYBOARD)
+  if (GetModelFeature(FN_KEYPRESS)!=0)
     gtk_widget_show (xkeyb_menu_item);
   else
     gtk_widget_hide (xkeyb_menu_item);
 
-  if (phoneMonitor.supported & PM_NETMONITOR)
+  if (GetModelFeature(FN_NETMONITOR)!=0)
     gtk_widget_show (netmon_menu_item);
   else
     gtk_widget_hide (netmon_menu_item);
 
-  if (phoneMonitor.supported & PM_SMS)
+  if (GetModelFeature(FN_SMS)!=0)
     gtk_widget_show (sms_menu_item);
   else
     gtk_widget_hide (sms_menu_item);
 
-  if (phoneMonitor.supported & PM_CALENDAR)
+  if (GetModelFeature(FN_CALENDAR)!=0)
     gtk_widget_show (calendar_menu_item);
   else
     gtk_widget_hide (calendar_menu_item);
 
-  if (phoneMonitor.supported & PM_DTMF)
+  if (GetModelFeature(FN_DTMF)!=0)
     gtk_widget_show (dtmf_menu_item);
   else
     gtk_widget_hide (dtmf_menu_item);
 
-  if (phoneMonitor.supported & PM_SPEEDDIAL)
+  if (GetModelFeature(FN_SPEEDDIAL)!=0)
     gtk_widget_show (speedDial_menu_item);
   else
     gtk_widget_hide (speedDial_menu_item);
   
-  if (phoneMonitor.supported & PM_DATA)
+  if (GetModelFeature(FN_DATACALLS)!=0)
     gtk_widget_show (data_menu_item);
   else
     gtk_widget_hide (data_menu_item);
@@ -905,7 +920,7 @@ static gint ButtonPressEvent (GtkWidget *widget, GdkEventButton *event)
     else if (event->x >= 190 && event->x <= 210 &&
              event->y >=  70 && event->y <= 85)
     {
-      if (!phoneMonitor.supported & PM_SMS)
+      if (GetModelFeature(FN_SMS)==0)
         phoneMonitor.working = _("SMS not supported!");
       else
         GUI_ShowSMS ();
@@ -913,7 +928,7 @@ static gint ButtonPressEvent (GtkWidget *widget, GdkEventButton *event)
     else if (event->x >= 235 && event->x <= 248 &&
              event->y >=  27 && event->y <= 75) 
     {
-      if (!phoneMonitor.supported & PM_CALENDAR)
+      if (GetModelFeature(FN_CALENDAR)==0)
         phoneMonitor.working = _("Calendar not supported!");
       else
         GUI_ShowCalendar ();
@@ -964,7 +979,7 @@ static void OptionsApplyCallback (GtkWidget *widget, gpointer data )
   }
 
   /* SMS */
-  if (phoneMonitor.supported & PM_SMS)         
+  if (GetModelFeature(FN_SMS)!=0)    
   {
     for (i = 0; i < xgnokiiConfig.smsSets; i++)
       xgnokiiConfig.smsSetting[i] = configDialogData.sms.smsSetting[i];
@@ -972,7 +987,7 @@ static void OptionsApplyCallback (GtkWidget *widget, gpointer data )
   }
 
   /* BUSINESS CARD */
-  if (phoneMonitor.supported & PM_SMS)
+  if (GetModelFeature(FN_SMS)!=0)
   {
     g_free(xgnokiiConfig.user.name);
     xgnokiiConfig.user.name = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.name)));
@@ -991,7 +1006,7 @@ static void OptionsApplyCallback (GtkWidget *widget, gpointer data )
   }
 
   /* GROUPS */
-  if (phoneMonitor.supported & PM_CALLERGROUP)
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
   {
     for ( i = 0; i < 6; i++)
     {
@@ -1005,7 +1020,7 @@ static void OptionsApplyCallback (GtkWidget *widget, gpointer data )
   }
 
   /* Mail */
-  if (phoneMonitor.supported & PM_SMS)         
+  if (GetModelFeature(FN_SMS)!=0)
   {
     g_free(xgnokiiConfig.mailbox);
     xgnokiiConfig.mailbox = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.mailbox)));
@@ -1037,7 +1052,7 @@ static void OptionsSaveCallback (GtkWidget *widget, gpointer data )
     GUI_InsertEvent (e);
   }
 
-  if (phoneMonitor.supported & PM_CALLERGROUP)
+  if (GetModelFeature(FN_CALLERGROUPS)!=0)
   {
     cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
     cg->number = 0;
@@ -1135,7 +1150,13 @@ static GtkWidget *CreateMenu (void)
   gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate",
                              GTK_SIGNAL_FUNC (GUI_ShowLogosWindow), NULL);
   gtk_widget_show(logos_menu_item);
-  
+
+  logos_menu_item = gtk_menu_item_new_with_label (_("Ringtones"));
+  gtk_menu_append (GTK_MENU (menu), logos_menu_item);
+  gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate",
+                             GTK_SIGNAL_FUNC (GUI_ShowRingtonesWindow), NULL);
+  gtk_widget_show(logos_menu_item);  
+
   dtmf_menu_item = gtk_menu_item_new_with_label (_("DTMF"));
   gtk_menu_append (GTK_MENU (menu), dtmf_menu_item);
   gtk_signal_connect_object (GTK_OBJECT (dtmf_menu_item), "activate",
@@ -1195,7 +1216,7 @@ static GtkWidget *CreateAboutDialog (void)
 {
   GtkWidget *dialog;
   GtkWidget *button, *hbox, *label;
-  gchar buf[2000];
+  gchar buf[200];
 
   dialog = gtk_dialog_new ();
   gtk_window_set_title (GTK_WINDOW (dialog), _("About"));
@@ -1215,12 +1236,8 @@ static GtkWidget *CreateAboutDialog (void)
   gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
   gtk_widget_show (hbox);
 
-  g_snprintf (buf, 2000, _("xgnokii version: %s\ngnokii version: %s\n\n\
-Copyright (C) 1999,2000 Pavel Janík ml.,\nHugh Blemings, Jan Derfinak and others\n\
-xgnokii is free software, covered by the GNU General Public License, and you are\n\
-welcome to change it and/or distribute copies of it under certain conditions.\n\
-There is absolutely no waranty for xgnokii. See GPL for details.\n"),
-              XVERSION, VERSION);
+  g_snprintf (buf, 200, _("xgnokii version: %s\ngnokii version: %s\n\n\
+Copyright (C) 1999 Pavel Janík ml.,\nHugh Blemings & Jan Derfinak\n"), XVERSION, VERSION);
   label = gtk_label_new ((gchar *) buf);
   gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
   gtk_widget_show (label);
@@ -1346,6 +1363,13 @@ static void OkEditSMSSetDialog (GtkWidget *w, gpointer data)
   configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number[GSM_MAX_SMS_CENTER_LENGTH]
     = '\0';
 
+  strncpy(configDialogData.sms.smsSetting
+          [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient,
+          gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.defaultrecipient)),
+          GSM_MAX_RECIPIENT_LENGTH);
+  configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient[GSM_MAX_RECIPIENT_LENGTH]
+    = '\0';
+
   configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format
     = tempMessageSettings.Format;
 
@@ -1372,7 +1396,7 @@ static inline void EditSMSSetDialogClick (GtkWidget        *clist,
 static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
 {
   static GtkWidget *dialog = NULL;
-  GtkWidget *button, *label, *hbox, *menu, *item;
+  GtkWidget *button, *label, *label2, *hbox, *hbox2, *menu, *item;
 
   if (GTK_CLIST (SMSClist)->selection == NULL)
     return;
@@ -1429,10 +1453,25 @@ static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
     gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.number, FALSE, FALSE, 2);
     gtk_widget_show (configDialogData.sms.number);
 
+    hbox2 = gtk_hbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox2, FALSE, FALSE, 9);
+    if (GetModelFeature(FN_SMSCDEFAULT)!=0) 
+      gtk_widget_show (hbox2);
+
+    label2 = gtk_label_new (_("Default recipient:"));
+    gtk_box_pack_start(GTK_BOX(hbox2), label2, FALSE, FALSE, 2);
+    if (GetModelFeature(FN_SMSCDEFAULT)!=0) 
+      gtk_widget_show (label2);
+
+    configDialogData.sms.defaultrecipient = gtk_entry_new_with_max_length(GSM_MAX_RECIPIENT_LENGTH - 1);
+    gtk_widget_set_usize (configDialogData.sms.defaultrecipient, 110, 22);
+    gtk_box_pack_end(GTK_BOX(hbox2), configDialogData.sms.defaultrecipient, FALSE, FALSE, 2);
+    if (GetModelFeature(FN_SMSCDEFAULT)!=0) 
+      gtk_widget_show (configDialogData.sms.defaultrecipient);
+
     hbox = gtk_hbox_new (FALSE, 0);
     gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9);
     gtk_widget_show (hbox);
-
     label = gtk_label_new (_("Sending Format:"));
     gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
     gtk_widget_show (label);
@@ -1444,28 +1483,28 @@ static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
     item = gtk_menu_item_new_with_label (_("Text"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetFormat),
-                        (gpointer) SMS_FText);
+                        (gpointer) GSMF_Text);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
     item = gtk_menu_item_new_with_label (_("Fax"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetFormat),
-                        (gpointer) SMS_FFax);
+                        (gpointer) GSMF_Fax);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
     item = gtk_menu_item_new_with_label (_("Paging"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetFormat),
-                        (gpointer) SMS_FPaging);
+                        (gpointer) GSMF_Paging);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
     item = gtk_menu_item_new_with_label (_("E-Mail"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetFormat),
-                        (gpointer) SMS_FEmail);
+                        (gpointer) GSMF_Email);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
@@ -1488,42 +1527,42 @@ static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
     item = gtk_menu_item_new_with_label (_("Max. Time"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetValidity),
-                        (gpointer) SMS_VMax);
+                        (gpointer) GSMV_Max_Time);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
     item = gtk_menu_item_new_with_label (_("1 h"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetValidity),
-                        (gpointer) SMS_V1H);
+                        (gpointer) GSMV_1_Hour);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
     item = gtk_menu_item_new_with_label (_("6 h"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetValidity),
-                        (gpointer) SMS_V6H);
+                        (gpointer) GSMV_6_Hours);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
     item = gtk_menu_item_new_with_label (_("24 h"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetValidity),
-                        (gpointer) SMS_V24H);
+                        (gpointer) GSMV_24_Hours);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
     item = gtk_menu_item_new_with_label (_("72 h"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetValidity),
-                        (gpointer) SMS_V72H);
+                        (gpointer) GSMV_72_Hours);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
     item = gtk_menu_item_new_with_label (_("1 week"));
     gtk_signal_connect (GTK_OBJECT (item), "activate",
                         GTK_SIGNAL_FUNC(SetValidity),
-                        (gpointer) SMS_V1W);
+                        (gpointer) GSMV_1_Week);
     gtk_widget_show (item);
     gtk_menu_append (GTK_MENU (menu), item);
 
@@ -1540,25 +1579,29 @@ static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
                       configDialogData.sms.smsSetting
                       [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number);
 
+  gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.defaultrecipient),
+                      configDialogData.sms.smsSetting
+                      [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient);
+
   switch (configDialogData.sms.smsSetting
           [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format)
   {
-    case SMS_FText:
+    case GSMF_Text:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
                                    0);
       break;
 
-    case SMS_FPaging:
+    case GSMF_Paging:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
                                    2);
       break;
 
-    case SMS_FFax:
+    case GSMF_Fax:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
                                    1);
       break;
 
-    case SMS_FEmail:
+    case GSMF_Email:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
                                    3);
       break;
@@ -1571,32 +1614,32 @@ static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
   switch (configDialogData.sms.smsSetting
           [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity)
   {
-    case SMS_V1H:
+    case GSMV_1_Hour:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
                                    1);
       break;
 
-    case SMS_V6H:
+    case GSMV_6_Hours:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
                                    2);
       break;
 
-    case SMS_V24H:
+    case GSMV_24_Hours:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
                                    3);
       break;
 
-    case SMS_V72H:
+    case GSMV_72_Hours:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
                                    4);
       break;
 
-    case SMS_V1W:
+    case GSMV_1_Week:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
                                    5);
       break;
 
-    case SMS_VMax:
+    case GSMV_Max_Time:
       gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
                                    0);
       break;
@@ -1622,7 +1665,7 @@ static GtkWidget *CreateOptionsDialog (void)
   GtkWidget *button, *hbox, *vbox, *label, *notebook, *frame, *clistScrolledWindow;
   register gint i;
   GtkAdjustment *adj;
-  gchar *titles[4] = { _("Set's name"), _("Center number"), _("Format"), _("Validity")};
+  gchar *titles[5] = { _("Set's name"), _("Center number"), _("Format"), _("Validity"), _("Default recipient")};
 
   dialog = gtk_dialog_new ();
   gtk_window_set_title (GTK_WINDOW (dialog), _("Options"));
@@ -1736,22 +1779,22 @@ static GtkWidget *CreateOptionsDialog (void)
   gtk_widget_show (hbox);
 
   label = gtk_label_new (_("Connection:"));
-  gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 3);
   gtk_widget_show (label);
 
   configDialogData.connection.infrared = gtk_radio_button_new_with_label (NULL, _("infrared"));
   gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.infrared, TRUE, FALSE, 2);
   gtk_widget_show (configDialogData.connection.infrared);
-  
+
   configDialogData.connection.serial = gtk_radio_button_new_with_label ( 
-            gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.infrared)), _("serial"));
+            gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.infrared)), _("fbus"));
   gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.serial, TRUE, FALSE, 2);
   gtk_widget_show (configDialogData.connection.serial);
-  
-  configDialogData.connection.irda = gtk_radio_button_new_with_label ( 
-            gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.infrared)), _("irda"));
-  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.irda, TRUE, FALSE, 2);
-  gtk_widget_show (configDialogData.connection.irda);
+
+  configDialogData.connection.mbus = gtk_radio_button_new_with_label ( 
+            gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.serial)), _("mbus"));
+  gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.mbus, TRUE, FALSE, 2);
+  gtk_widget_show (configDialogData.connection.mbus);
 
   /***  Phone notebook  ***/
   frame = gtk_frame_new (_("Phone information"));
@@ -1828,7 +1871,7 @@ static GtkWidget *CreateOptionsDialog (void)
   gtk_container_add (GTK_CONTAINER (vbox), hbox);
   gtk_widget_show (hbox);
 
-  label = gtk_label_new (_("Names length:"));
+  label = gtk_label_new ("Names length:");
   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
   gtk_widget_show (label);
 
@@ -1836,7 +1879,7 @@ static GtkWidget *CreateOptionsDialog (void)
   gtk_container_add (GTK_CONTAINER (vbox), hbox);
   gtk_widget_show (hbox);
 
-  label = gtk_label_new (_("SIM:"));
+  label = gtk_label_new ("SIM:");
   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
   gtk_widget_show (label);
 
@@ -1854,7 +1897,7 @@ static GtkWidget *CreateOptionsDialog (void)
   gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.phoneNameLen, FALSE, FALSE, 2);
   gtk_widget_show (configDialogData.phone.phoneNameLen);
 
-  label = gtk_label_new (_("Phone:"));
+  label = gtk_label_new ("Phone:");
   gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 2);
   gtk_widget_show (label);
 
@@ -1907,7 +1950,7 @@ static GtkWidget *CreateOptionsDialog (void)
   label = gtk_label_new (_("SMS"));
   gtk_notebook_append_page (GTK_NOTEBOOK (notebook), sms_option_frame, label);
 
-  SMSClist = gtk_clist_new_with_titles (4, titles);
+  SMSClist = gtk_clist_new_with_titles (5, titles);
   gtk_clist_set_shadow_type (GTK_CLIST (SMSClist), GTK_SHADOW_OUT);
   gtk_clist_column_titles_passive (GTK_CLIST (SMSClist));
   gtk_clist_set_auto_sort (GTK_CLIST (SMSClist), FALSE);
@@ -1916,6 +1959,7 @@ static GtkWidget *CreateOptionsDialog (void)
   gtk_clist_set_column_width (GTK_CLIST (SMSClist), 1, 115);
   gtk_clist_set_column_width (GTK_CLIST (SMSClist), 2, 40);
   gtk_clist_set_column_width (GTK_CLIST (SMSClist), 3, 55);
+  gtk_clist_set_column_width (GTK_CLIST (SMSClist), 4, 100);
 //  gtk_clist_set_column_justification (GTK_CLIST (SMSClist), 1, GTK_JUSTIFY_RIGHT);
 
   clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
@@ -1926,6 +1970,7 @@ static GtkWidget *CreateOptionsDialog (void)
                       TRUE, TRUE, 10);
 
   gtk_widget_show (SMSClist);
+
   gtk_widget_show (clistScrolledWindow);
 
   hbox = gtk_hbox_new (FALSE, 0);
@@ -2241,8 +2286,6 @@ static void TopLevelWindow (void)
   struct sigaction act;
 
   GUI_MainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_window_set_wmclass (GTK_WINDOW (GUI_MainWindow), "MainWindow", "Xgnokii");
-/*  gtk_window_set_decorated (GTK_WINDOW (GUI_MainWindow), GTK_FALSE); */
   gtk_widget_realize (GUI_MainWindow);
 
   BackgroundPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background);
@@ -2298,6 +2341,7 @@ static void TopLevelWindow (void)
   GUI_CreateCalendarWindow ();
   GUI_CreateLogosWindow ();
   GUI_CreateDataWindow();
+  GUI_CreateRingtonesWindow ();
   CreateErrorDialog (&errorDialog, GUI_MainWindow);
   CreateInfoDialog (&infoDialog, GUI_MainWindow);
   CreateInCallDialog ();
@@ -2307,7 +2351,7 @@ static void TopLevelWindow (void)
   act.sa_flags = SA_NOCLDSTOP;
   sigaction (SIGCHLD, &act, NULL);
 
-#if __unices__
+#if defined(__svr4__) || defined(__FreeBSD__)
   act.sa_handler = SIG_IGN;
   sigemptyset (&(act.sa_mask));
   sigaction (SIGALRM, &act, NULL);
@@ -2372,29 +2416,36 @@ static gint RemoveSplash (GtkWidget *Win)
 
 static void ReadConfig (void)
 {
-#ifdef WIN32
-  xgnokiiConfig.locale = "";
-#else
+  /* Read config file */
+  if (CFG_ReadConfig(&xgnokiiConfig.model, &xgnokiiConfig.port,
+                 &xgnokiiConfig.initlength, &xgnokiiConfig.connection,
+                &xgnokiiConfig.bindir, &xgnokiiConfig.synchronizetime,false) < 0) {
+    exit(-1);
+  }
+  
+#ifndef WIN32
   if ((xgnokiiConfig.locale = getenv ("LC_ALL")) == NULL)
     if ((xgnokiiConfig.locale = getenv ("LC_MESSAGES")) == NULL)
       if ((xgnokiiConfig.locale = getenv ("LANG")) == NULL)
         xgnokiiConfig.locale = "POSIX";
 #endif
-  if (readconfig(&xgnokiiConfig.model, &xgnokiiConfig.port,
-           &xgnokiiConfig.initlength, &xgnokiiConfig.connection,
-           &xgnokiiConfig.bindir) < 0)
-  {
-    exit(-1);
-  }
-  
+
   GUI_ReadXConfig();
   max_phonebook_name_length = atoi (xgnokiiConfig.maxPhoneLen);
   max_phonebook_sim_name_length = atoi (xgnokiiConfig.maxSIMLen);
   
 #ifndef WIN32
   xgnokiiConfig.xgnokiidir = DefaultXGnokiiDir;
+  xgnokiiConfig.xgnokiidocsdir = DefaultXGnokiiDocsDir;
 #endif
-  max_phonebook_number_length = max_phonebook_sim_number_length = GSM_MAX_PHONEBOOK_NUMBER_LENGTH;
+  if (CheckModel (N6110_Information, xgnokiiConfig.model, CurrentConnectionType)) {
+    max_phonebook_number_length = N6110_MAX_PHONEBOOK_NUMBER_LENGTH;
+    max_phonebook_sim_number_length = N6110_MAX_PHONEBOOK_NUMBER_LENGTH;
+  }
+  else
+  {
+    max_phonebook_number_length = max_phonebook_sim_number_length = GSM_MAX_PHONEBOOK_NUMBER_LENGTH;
+  }
 
   xgnokiiConfig.callerGroups[0] = xgnokiiConfig.callerGroups[1] =
   xgnokiiConfig.callerGroups[2] = xgnokiiConfig.callerGroups[3] =
@@ -2426,5 +2477,5 @@ int main (int argc, char *argv[])
 
   gtk_main ();
 
-  return (0);
+  return(0);
 }