driversetup.c

来自「一个可以替代windows ODBC驱动程序管理器的通用ODBC数据库引擎」· C语言 代码 · 共 752 行 · 第 1/2 页

C
752
字号
/* *  driversetup.c * *  $Id: driversetup.c,v 1.1 2001/06/07 00:49:40 source Exp $ * *  The iODBC driver manager. * *  Copyright (C) 2001 by OpenLink Software <iodbc@openlinksw.com> * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Library General Public *  License as published by the Free Software Foundation; either *  version 2 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Library General Public License for more details. * *  You should have received a copy of the GNU Library General Public *  License along with this library; if not, write to the Free *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include "gui.h"static char* STRCONN = "%s\0Driver=%s\0Setup=%s\0\0";static int STRCONN_NB_TOKENS = 3;char *szKeysColumnNames[] = {  "Keyword",  "Value"};char *szKeysButtons[] = {  "_Add",  "_Update"};static voidaddkeywords_to_list (GtkWidget *widget, LPCSTR attrs,    TDRIVERSETUP *driversetup_t){  char *curr, *cour;  char *data[2];  if (!GTK_IS_CLIST (widget))    return;  gtk_clist_clear (GTK_CLIST (widget));  for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1))    {      if (!strncasecmp (curr, "Driver=", STRLEN ("Driver=")))	{	  gtk_entry_set_text (GTK_ENTRY (driversetup_t->driver_entry),	      curr + STRLEN ("Driver="));	  continue;	}      if (!strncasecmp (curr, "Setup=", STRLEN ("Setup=")))	{	  gtk_entry_set_text (GTK_ENTRY (driversetup_t->setup_entry),	      curr + STRLEN ("Setup="));	  continue;	}      data[0] = curr;      if ((cour = strchr (curr, '=')))	{	  data[1] = cour + 1;	  *cour = 0;	  gtk_clist_append (GTK_CLIST (widget), data);	  *cour = '=';	}      else	{	  data[1] = "";	  gtk_clist_append (GTK_CLIST (widget), data);	}    }  if (GTK_CLIST (widget)->rows > 0)    gtk_clist_sort (GTK_CLIST (widget));}static voidparse_attribute_line (TDRIVERSETUP *driversetup_t, LPCSTR driver,    LPCSTR attrs, BOOL add){  char *curr, *cour;  if (driver)    {      gtk_entry_set_text (GTK_ENTRY (driversetup_t->name_entry), driver);      if (add)	gtk_entry_set_editable (GTK_ENTRY (driversetup_t->name_entry), FALSE);      else	gtk_entry_set_editable (GTK_ENTRY (driversetup_t->name_entry), TRUE);    }  addkeywords_to_list (driversetup_t->key_list, attrs, driversetup_t);}static voiddriver_file_choosen (GtkWidget *widget, TDRIVERSETUP *driversetup_t){  if (driversetup_t)    {      gtk_entry_set_text (GTK_ENTRY (driversetup_t->driver_entry),	  gtk_file_selection_get_filename (GTK_FILE_SELECTION (driversetup_t->		  filesel)));      driversetup_t->filesel = NULL;    }}static voidsetup_file_choosen (GtkWidget *widget, TDRIVERSETUP *driversetup_t){  if (driversetup_t)    {      gtk_entry_set_text (GTK_ENTRY (driversetup_t->setup_entry),	  gtk_file_selection_get_filename (GTK_FILE_SELECTION (driversetup_t->		  filesel)));      driversetup_t->filesel = NULL;    }}static voiddriversetup_browsedriver_clicked (GtkWidget *widget,    TDRIVERSETUP *driversetup_t){  GtkWidget *filesel;  if (driversetup_t)    {      filesel = gtk_file_selection_new ("Choose your driver library ...");      gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);      gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel),	  gtk_entry_get_text (GTK_ENTRY (driversetup_t->driver_entry)));      /* Ok button events */      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->	      ok_button), "clicked", GTK_SIGNAL_FUNC (driver_file_choosen),	  driversetup_t);      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->	      ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL);      /* Cancel button events */      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->	      cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit),	  NULL);      /* Close window button events */      gtk_signal_connect (GTK_OBJECT (filesel), "delete_event",	  GTK_SIGNAL_FUNC (gtk_main_quit), NULL);      driversetup_t->filesel = filesel;      gtk_widget_show_all (filesel);      gtk_main ();      gtk_widget_destroy (filesel);      driversetup_t->filesel = NULL;    }}static voiddriversetup_browsesetup_clicked (GtkWidget *widget,    TDRIVERSETUP *driversetup_t){  GtkWidget *filesel;  if (driversetup_t)    {      filesel = gtk_file_selection_new ("Choose your setup library ...");      gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);      gtk_file_selection_set_filename (GTK_FILE_SELECTION (filesel),	  gtk_entry_get_text (GTK_ENTRY (driversetup_t->setup_entry)));      /* Ok button events */      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->	      ok_button), "clicked", GTK_SIGNAL_FUNC (setup_file_choosen),	  driversetup_t);      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->	      ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit), NULL);      /* Cancel button events */      gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (filesel)->	      cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit),	  NULL);      /* Close window button events */      gtk_signal_connect (GTK_OBJECT (filesel), "delete_event",	  GTK_SIGNAL_FUNC (gtk_main_quit), NULL);      driversetup_t->filesel = filesel;      gtk_widget_show_all (filesel);      gtk_main ();      gtk_widget_destroy (filesel);      driversetup_t->filesel = NULL;    }}static voiddriversetup_add_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t){  char *szKey;  char *data[2];  int i = 0;  if (driversetup_t)    {      data[0] = gtk_entry_get_text (GTK_ENTRY (driversetup_t->key_entry));      if (!STRLEN (data[0]))	goto done;      data[1] = gtk_entry_get_text (GTK_ENTRY (driversetup_t->value_entry));      for (i = 0; i < GTK_CLIST (driversetup_t->key_list)->rows; i++)	{	  gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list), i, 0,	      &szKey);	  if (!strcmp (szKey, data[0]))	    {	      gtk_clist_remove (GTK_CLIST (driversetup_t->key_list), i);	      break;	    }	}      gtk_clist_append (GTK_CLIST (driversetup_t->key_list), data);      if (GTK_CLIST (driversetup_t->key_list)->rows > 0)	gtk_clist_sort (GTK_CLIST (driversetup_t->key_list));    done:      gtk_entry_set_text (GTK_ENTRY (driversetup_t->key_entry), "");      gtk_entry_set_text (GTK_ENTRY (driversetup_t->value_entry), "");    }}static voiddriversetup_update_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t){  char *data[2];  if (driversetup_t && GTK_CLIST (driversetup_t->key_list)->selection != NULL)    {      data[0] = gtk_entry_get_text (GTK_ENTRY (driversetup_t->key_entry));      data[1] = gtk_entry_get_text (GTK_ENTRY (driversetup_t->value_entry));      gtk_clist_remove (GTK_CLIST (driversetup_t->key_list),	  GPOINTER_TO_INT (GTK_CLIST (driversetup_t->key_list)->selection->	      data));      if (STRLEN (data[0]))	{	  gtk_clist_append (GTK_CLIST (driversetup_t->key_list), data);	  if (GTK_CLIST (driversetup_t->key_list)->rows > 0)	    gtk_clist_sort (GTK_CLIST (driversetup_t->key_list));	}      gtk_entry_set_text (GTK_ENTRY (driversetup_t->key_entry), "");      gtk_entry_set_text (GTK_ENTRY (driversetup_t->value_entry), "");    }}static voiddriversetup_list_select (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDRIVERSETUP *driversetup_t){  char *szKey, *szValue;  if (driversetup_t && GTK_CLIST (driversetup_t->key_list)->selection != NULL)    {      gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list),	  GPOINTER_TO_INT (GTK_CLIST (driversetup_t->key_list)->selection->	      data), 0, &szKey);      gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list),	  GPOINTER_TO_INT (GTK_CLIST (driversetup_t->key_list)->selection->	      data), 1, &szValue);      gtk_entry_set_text (GTK_ENTRY (driversetup_t->key_entry), szKey);      gtk_entry_set_text (GTK_ENTRY (driversetup_t->value_entry), szValue);      gtk_widget_set_sensitive (driversetup_t->bupdate, TRUE);    }}static voiddriversetup_list_unselect (GtkWidget *widget, gint row, gint column,    GdkEvent *event, TDRIVERSETUP *driversetup_t){  if (driversetup_t)    {      gtk_widget_set_sensitive (driversetup_t->bupdate, FALSE);      gtk_entry_set_text (GTK_ENTRY (driversetup_t->key_entry), "");      gtk_entry_set_text (GTK_ENTRY (driversetup_t->value_entry), "");    }}static voiddriversetup_ok_clicked (GtkWidget *widget, TDRIVERSETUP *driversetup_t){  char *curr, *cour, *szKey, *szValue;  int i = 0, size;  if (driversetup_t)    {      driversetup_t->connstr = (char *) malloc (sizeof (char) * (size =	      ((STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				  name_entry))) ?		      STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				  name_entry))) + 1 : 0) +		  (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				  driver_entry))) ?		      STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				  driver_entry))) + STRLEN ("Driver=") +		      1 : 0) +		  (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				  setup_entry))) ?		      STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				  setup_entry))) + STRLEN ("Setup=") +		      1 : 0) + 1)));      if (driversetup_t->connstr)	{	  for (curr = STRCONN, cour = driversetup_t->connstr;	      i < STRCONN_NB_TOKENS; i++, curr += (STRLEN (curr) + 1))	    switch (i)	      {	      case 0:		if (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				name_entry))))		  {		    sprintf (cour, curr,			gtk_entry_get_text (GTK_ENTRY (driversetup_t->				name_entry)));		    cour += (STRLEN (cour) + 1);		  }		break;	      case 1:		if (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				driver_entry))))		  {		    sprintf (cour, curr,			gtk_entry_get_text (GTK_ENTRY (driversetup_t->				driver_entry)));		    cour += (STRLEN (cour) + 1);		  }		break;	      case 2:		if (STRLEN (gtk_entry_get_text (GTK_ENTRY (driversetup_t->				setup_entry))))		  {		    sprintf (cour, curr,			gtk_entry_get_text (GTK_ENTRY (driversetup_t->				setup_entry)));		    cour += (STRLEN (cour) + 1);		  }		break;	      };	  for (i = 0; i < GTK_CLIST (driversetup_t->key_list)->rows; i++)	    {	      gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list), i, 0,		  &szKey);	      gtk_clist_get_text (GTK_CLIST (driversetup_t->key_list), i, 1,		  &szValue);	      cour = (char *) driversetup_t->connstr;	      driversetup_t->connstr =		  (LPSTR) malloc (size + STRLEN (szKey) + STRLEN (szValue) +		  2);	      if (driversetup_t->connstr)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?