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 + -
显示快捷键?