From 0c8af95e42915a727477d4913daf64388056e20e Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Wed, 27 Apr 2016 20:45:05 +0200 Subject: [PATCH] Initial version --- Makefile | 14 ++++ README | 6 ++ main.c | 190 +++++++++++++++++++++++++++++++++++++++++++ mysql_console_16.xpm | 23 ++++++ 4 files changed, 233 insertions(+) create mode 100644 Makefile create mode 100644 README create mode 100644 main.c create mode 100644 mysql_console_16.xpm diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fe1f797 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +CFLAGS = -O2 -Wall `pkg-config --cflags --libs gtk+-2.0` +EXE = mysql_console + +all: + $(CC) -o $(EXE) $(CFLAGS) main.c + +debug: + $(CC) -DDEBUG -o $(EXE) $(CFLAGS) -g main.c + +clean: + rm -f $(EXE) + +.PHONY: clean all debug + diff --git a/README b/README new file mode 100644 index 0000000..2fc4de7 --- /dev/null +++ b/README @@ -0,0 +1,6 @@ +This little GTK2 app opens a terminal in which is logs in to a server +via SSH and opens up the MySQL command line client. Why I wrote a C +app for this, I can’t recall. + +I release this for the public domain, hoping that someone may learn +something from it. \ No newline at end of file diff --git a/main.c b/main.c new file mode 100644 index 0000000..af6a225 --- /dev/null +++ b/main.c @@ -0,0 +1,190 @@ +#include +#include +#include +#include + +static char * mysql_console_16_xpm[] = { +"16 16 4 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"@ c #808080", +" ", +" ", +" .............. ", +".++++++++++++++.", +".++++++++++++++.", +".+@@@++@@+++@++.", +".+@+++@++@++@++.", +".+@@++@++@++@++.", +".+++@+@++@++@++.", +".+++@+@++@++@++.", +".+@@@++@@+++@@+.", +".++++++++@@++++.", +".++++++++++++++.", +" .............. ", +" ", +" "}; + +GtkWidget *window, + *ssh_user_field, + *ssh_host_field, + *mysql_user_field, + *mysql_db_field, + *mysql_pass_field, + *ok_gomb; + +void +destroy_window(GtkWidget *window, gpointer data) +{ + gtk_main_quit(); +} + +void +ok_clicked(GtkWidget *gomb, gpointer data) +{ + gchar *cmd; + gint len; + + if ((strlen(gtk_entry_get_text(GTK_ENTRY(ssh_host_field))) > 0) && (strlen(gtk_entry_get_text(GTK_ENTRY(mysql_user_field))) > 0) && (strlen(gtk_entry_get_text(GTK_ENTRY(mysql_db_field))) > 0)) + { + len = 87 + + (strlen(gtk_entry_get_text(GTK_ENTRY(ssh_user_field))) * 2) + + ((strlen(gtk_entry_get_text(GTK_ENTRY(ssh_user_field))) > 0) ? 1 : 0) + + (strlen(gtk_entry_get_text(GTK_ENTRY(ssh_host_field))) * 2) + + (strlen(gtk_entry_get_text(GTK_ENTRY(mysql_user_field))) * 2) + + strlen(gtk_entry_get_text(GTK_ENTRY(mysql_pass_field))) + + (strlen(gtk_entry_get_text(GTK_ENTRY(mysql_db_field))) * 2); + cmd = g_malloc(len); + memset(cmd, 0, len); + +#ifdef DEBUG + printf("%d\n", strlen("gnome-terminal -t \"MySQL console - %s%s%s - %s@%s\" -x ssh -t %s%s%s mysql -u %s -p%s %s")); +#endif /* DEBUG */ + sprintf( + cmd, + "gnome-terminal -t \"MySQL console - %s%s%s - %s@%s\" -x ssh -t %s%s%s mysql -u %s -p%s %s", + gtk_entry_get_text(GTK_ENTRY(ssh_user_field)), + (strlen(gtk_entry_get_text(GTK_ENTRY(ssh_user_field))) > 0) ? "@" : "", + gtk_entry_get_text(GTK_ENTRY(ssh_host_field)), + gtk_entry_get_text(GTK_ENTRY(mysql_user_field)), + gtk_entry_get_text(GTK_ENTRY(mysql_db_field)), + gtk_entry_get_text(GTK_ENTRY(ssh_user_field)), + (strlen(gtk_entry_get_text(GTK_ENTRY(ssh_user_field))) > 0) ? "@" : "", + gtk_entry_get_text(GTK_ENTRY(ssh_host_field)), + gtk_entry_get_text(GTK_ENTRY(mysql_user_field)), + gtk_entry_get_text(GTK_ENTRY(mysql_pass_field)), + gtk_entry_get_text(GTK_ENTRY(mysql_db_field)) + ); + + gtk_widget_hide(window); + system(cmd); + gtk_widget_destroy(window); + } + else + { + GtkWidget *dialog; + + dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Kötelező kitölteni az SSH host, MySQL felhasználónév és MySQL adatbázis mezőket!"); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_hide(dialog); + } +} + +void +cancel_clicked(GtkWidget *gomb, gpointer data) +{ + gtk_widget_destroy(window); +} + +void +entry_activate(GtkWidget *entry, gpointer data) +{ + gtk_button_clicked(GTK_BUTTON(ok_gomb)); +} + +gboolean +window_keypress(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event->keyval == GDK_Escape) + { + gtk_widget_destroy(window); + return TRUE; + } + return FALSE; +} + +int +main(int argc, char **argv) +{ + GtkWidget *ssh_user_label, + *ssh_host_label, + *mysql_user_label, + *mysql_db_label, + *mysql_pass_label, + *megsem_gomb, + *tabla; + + GdkPixbuf *window_icon; + + gtk_init(&argc, &argv); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + + ssh_user_label = gtk_label_new("SSH felhasználónév:"); + ssh_user_field = gtk_entry_new(); + + ssh_host_label = gtk_label_new("SSH host:"); + ssh_host_field = gtk_entry_new(); + + mysql_user_label = gtk_label_new("MySQL user:"); + mysql_user_field = gtk_entry_new(); + + mysql_db_label = gtk_label_new("MySQL adatbázis:"); + mysql_db_field = gtk_entry_new(); + + mysql_pass_label = gtk_label_new("MySQL jelszó:"); + mysql_pass_field = gtk_entry_new(); + + ok_gomb = gtk_button_new_from_stock(GTK_STOCK_OK); + megsem_gomb = gtk_button_new_from_stock(GTK_STOCK_CANCEL); + + tabla = gtk_table_new(6, 2, FALSE); + + gtk_table_attach_defaults(GTK_TABLE(tabla), ssh_host_label, 0, 1, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(tabla), ssh_host_field, 1, 2, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(tabla), ssh_user_label, 0, 1, 1, 2); + gtk_table_attach_defaults(GTK_TABLE(tabla), ssh_user_field, 1, 2, 1, 2); + gtk_table_attach_defaults(GTK_TABLE(tabla), mysql_user_label, 0, 1, 2, 3); + gtk_table_attach_defaults(GTK_TABLE(tabla), mysql_user_field, 1, 2, 2, 3); + gtk_table_attach_defaults(GTK_TABLE(tabla), mysql_pass_label, 0, 1, 3, 4); + gtk_table_attach_defaults(GTK_TABLE(tabla), mysql_pass_field, 1, 2, 3, 4); + gtk_table_attach_defaults(GTK_TABLE(tabla), mysql_db_label, 0, 1, 4, 5); + gtk_table_attach_defaults(GTK_TABLE(tabla), mysql_db_field, 1, 2, 4, 5); + gtk_table_attach_defaults(GTK_TABLE(tabla), ok_gomb, 0, 1, 5, 6); + gtk_table_attach_defaults(GTK_TABLE(tabla), megsem_gomb, 1, 2, 5, 6); + + gtk_container_add(GTK_CONTAINER(window), tabla); + + gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(destroy_window), NULL); + gtk_signal_connect(GTK_OBJECT(ok_gomb), "clicked", GTK_SIGNAL_FUNC(ok_clicked), NULL); + gtk_signal_connect(GTK_OBJECT(megsem_gomb), "clicked", GTK_SIGNAL_FUNC(cancel_clicked), NULL); + gtk_signal_connect(GTK_OBJECT(ssh_host_field), "activate", GTK_SIGNAL_FUNC(entry_activate), NULL); + gtk_signal_connect(GTK_OBJECT(ssh_user_field), "activate", GTK_SIGNAL_FUNC(entry_activate), NULL); + gtk_signal_connect(GTK_OBJECT(mysql_user_field), "activate", GTK_SIGNAL_FUNC(entry_activate), NULL); + gtk_signal_connect(GTK_OBJECT(mysql_pass_field), "activate", GTK_SIGNAL_FUNC(entry_activate), NULL); + gtk_signal_connect(GTK_OBJECT(mysql_db_field), "activate", GTK_SIGNAL_FUNC(entry_activate), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key-press-event", GTK_SIGNAL_FUNC(window_keypress), NULL); + + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS); + gtk_window_set_title(GTK_WINDOW(window), "MySQL console"); + window_icon = gdk_pixbuf_new_from_xpm_data((const char **)mysql_console_16_xpm); + gtk_window_set_default_icon(window_icon); + + gtk_widget_show_all(window); + + gtk_main(); + + return 0; +} + diff --git a/mysql_console_16.xpm b/mysql_console_16.xpm new file mode 100644 index 0000000..425300a --- /dev/null +++ b/mysql_console_16.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static char * mysql_konzol_16_xpm[] = { +"16 16 4 1", +" c None", +". c #000000", +"+ c #FFFFFF", +"@ c #808080", +" ", +" ", +" .............. ", +".++++++++++++++.", +".++++++++++++++.", +".+@@@++@@+++@++.", +".+@+++@++@++@++.", +".+@@++@++@++@++.", +".+++@+@++@++@++.", +".+++@+@++@++@++.", +".+@@@++@@+++@@+.", +".++++++++@@++++.", +".++++++++++++++.", +" .............. ", +" ", +" "};