⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interface.c

📁 C写的TELNET
💻 C
📖 第 1 页 / 共 5 页
字号:
void setarg(char *s) {/*	   set arguments[n_counter] to s*/   arguments[n_counter] = s;   n_counter++;   }void set_string_opt(char *flag, char *s) {/*   Set argument with flag + opt -- just for code cleanup*/   char *prgopt;   int length;   gchar *value;      value=gnome_config_get_string(s);   length = strlen(value);      if (length != 0) {       prgopt = (char *) malloc (strlen(flag) + length + 2);       sprintf(prgopt, "%s%s", flag, value);       setarg(prgopt);      }}void set_direct_string_opt(char *flag, char *value) {/*   Set argument with string (directly without fetching from config) + opt -- just for code cleanup*/   char *prgopt;   int length;      length = strlen(value);   if (length != 0) {       prgopt = (char *) malloc (strlen(flag) + length + 2);       sprintf(prgopt, "%s%s", flag, value);       setarg(prgopt);      }}void set_flag_opt(char *flag, char *s) {/*   Set argument with flag -- just for code cleanup*/   if (gnome_config_get_bool(s)) setarg(strdup(flag));}void setbutton(GtkWidget *button, gchar *s) {/*   Just for code cleanup*/ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),gnome_config_get_bool(s));  }void setbutton_string(GtkWidget *checkbox, GtkWidget *entry, char *s) {/*   Just for code clean up*/  if (strlen(gnome_config_get_string(s))!= 0) {     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox),TRUE);     gtk_entry_set_text(GTK_ENTRY(entry),gnome_config_get_string(s));    }}void setaccordingto_string(GtkWidget *checkbox, GtkWidget *entry, gchar *s) {/*   Just for code cleanup -- redundancy*/   if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox)))         gnome_config_set_string(s,gtk_entry_get_text(GTK_ENTRY(entry)));    else        gnome_config_set_string(s,"");}void setaccordingto(GtkWidget *obj, gchar *s) {/*   Set the config*/   gboolean b;      b=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(obj));   gnome_config_set_bool(s,b);}void getoption() {/*   Get options & parameters for telnet, ssh, rlogin*/  int x;  n_counter = 0;  for (x=0;x <=15;x++)    arguments[x] = NULL; switch (connection_type) { case 0: { // Case Telnet   setarg(strdup("telnet"));   gnome_config_push_prefix("gnome-telnet/gtelnet/");   // DON'T SORT THE ORDER !! Just Don't. Forbidden -- Prana Oct 21, 2000   set_flag_opt("-8",config_telnet[0]);   set_flag_opt("-E",config_telnet[2]);   set_flag_opt("-F",config_telnet[3]);   set_flag_opt("-L",config_telnet[1]);   set_string_opt("-S",config_telnet[9]);   set_string_opt("-X",config_telnet[10]);   set_flag_opt("-a",config_telnet[4]);   set_flag_opt("-d",config_telnet[7]);   set_string_opt("-e",config_telnet[8]);   set_string_opt("-k",config_telnet[11]);   set_string_opt("-n",config_telnet[12]);   set_flag_opt("-r",config_telnet[5]);   set_flag_opt("-x",config_telnet[6]);   break;} // End option switch case 0 : telnet case 1:  // Case SSH   setarg(strdup("ssh"));   gnome_config_push_prefix("gnome-telnet/gtelnet/");   // DON'T SORT THE ORDER ! It's a taboo -- Prana Oct 21, 2000   set_flag_opt("-n",config_ssh[0]);   set_flag_opt("-A",config_ssh[1]);   set_flag_opt("-X",config_ssh[2]);   set_flag_opt("-t",config_ssh[3]);   set_flag_opt("-v",config_ssh[4]);   set_flag_opt("-P",config_ssh[5]);   set_string_opt("-d",config_ssh[12]);   set_flag_opt("-q",config_ssh[6]);   set_flag_opt("-f",config_ssh[7]);   set_flag_opt("-C",config_ssh[8]);   set_flag_opt("-g",config_ssh[9]);   set_flag_opt("-S",config_ssh[10]);   set_string_opt("-i",config_ssh[12]);   set_string_opt("-e",config_ssh[13]);   set_string_opt("-c",config_ssh[14]);   if (ssh_user)    if (strcmp(ssh_user,""))    {      set_direct_string_opt("-l", ssh_user);      free(ssh_user);    }   break;    // End case SSHcase 3 : { // case RLOGIN  setarg(strdup("rlogin"));  gnome_config_push_prefix("gnome-telnet/gtelnet/");  set_flag_opt("-8",config_ssh[0]);  set_flag_opt("-E",config_ssh[1]);  set_flag_opt("-K",config_ssh[2]);  set_flag_opt("-L",config_ssh[3]);  set_flag_opt("-d",config_ssh[4]);  set_flag_opt("-x",config_ssh[5]);  set_string_opt("-e",config_ssh[6]);  set_string_opt("-k",config_ssh[7]);}} // End Switch   host = strdup( gtk_entry_get_text(GTK_ENTRY(hostname_combo_entry)) );   setarg(host);   if (connection_type==1)   {   	port = strdup( gtk_entry_get_text(GTK_ENTRY(port_entry)) );   	if (strcmp(port,"") != 0) set_direct_string_opt("-p", port);   }   else   {   	port = strdup( gtk_entry_get_text(GTK_ENTRY(port_entry)) );   	if (strcmp(port,"") != 0) setarg(port);   }   arguments[n_counter] = NULL;   gnome_config_pop_prefix();}static void free_everything(void) {/*   Free everything*/   int x;   for (x=0;x <=15;x++) if (arguments[x]!=NULL) free(arguments[x]);}static void run_program(void) {/*   When the user press "Connect" button*/        GtkWidget *msgbox;        getoption();        if (strcmp(host,"")==0)        {           msgbox=create_message_box(_("Please fill in the host name :-)"));           gtk_widget_show(msgbox);           free_everything();           return; // we don't want some crash here tooo :-)        }        gnome_entry_prepend_history(GNOME_ENTRY(hostname_entry),TRUE,host);        gtk_widget_grab_focus (term);	gnome_appbar_set_status(GNOME_APPBAR(app_statusbar),"Connected");        gnome_appbar_set_progress(GNOME_APPBAR(app_statusbar),1.0);        gtk_widget_show(term);        switch(zvt_term_forkpty(ZVT_TERM(term), TRUE)) {        case -1:           on_disconnect_button_clicked(NULL,NULL);           break;        case 0:           execvp(connect_with_program[connection_type],arguments);           break;        } // end switch zvt_term_forkpty        free_everything();}void on_connect_button_clicked (GtkButton *button, gpointer user_data) {    GtkWidget *ssh_dialog_box, *msgbox;    gchar *temp_error;#ifndef HAVE_SETENV    int len = 0;    char *the_variable = NULL;#endif        // 15th October 2000    // Check if the program is available or not...    // I got a report that when SSH is not installed it cannot do SSH ;) hehehe    gnome_config_push_prefix("gnome-telnet/gtelnet/");#ifdef HAVE_SETENV    setenv("TERM",gnome_config_get_string("terminal_type"),1);#else// I forgot who sent me the patch for SunOS..// If you're the person, please let me know and I'll add you to the credit..// patch for SunOS 5.x or Solaris 2.x ..// dirty hack    len = strlen ("TERM")+1+strlen(gnome_config_get_string("terminal_type"));    the_variable = (char *) malloc (len + 1);    sprintf(the_variable, "TERM=%s", gnome_config_get_string("terminal_type") );    putenv(the_variable);    free (the_variable);#endif    gnome_config_sync();    gnome_config_pop_prefix();        if (!gnome_is_program_in_path(connect_with_program[connection_type]))    {      temp_error = (char *) malloc (300);      sprintf(temp_error,"'%s' has not been installed in your machine.\nPlease click the Help button on the toolbar\nand press the \"Click here for more documentation\" button", connect_with_program[connection_type]);      msgbox=create_message_box(temp_error);      gtk_widget_show(msgbox);      free(temp_error);      return; // we don't want some crash here :-)     }       if (connection_type!=ssh)      run_program();    else if (!strchr(gtk_entry_get_text(GTK_ENTRY(hostname_combo_entry)),'@'))   // if there's no username@hostname prompt for user name      {         ssh_dialog_box=create_ssh_dialog();         gtk_widget_show(ssh_dialog);      }   else run_program();}void on_term_died (ZvtTerm *term){	zvt_term_closepty(ZVT_TERM(term));	gnome_appbar_set_status(GNOME_APPBAR(app_statusbar),_("Not connected"));        gnome_appbar_set_progress(GNOME_APPBAR(app_statusbar),0.0);        	zvt_term_reset(ZVT_TERM(term), TRUE);        }void on_disconnect_button_clicked (GtkButton *button, gpointer  user_data)/*   When the user press "Disconnect" button*/{	zvt_term_closepty(ZVT_TERM(term));	gnome_appbar_set_status(GNOME_APPBAR(app_statusbar),_("Not connected"));        gnome_appbar_set_progress(GNOME_APPBAR(app_statusbar),0.0);        	zvt_term_reset(ZVT_TERM(term), TRUE);}void on_about_button_clicked (GtkButton *button, gpointer user_data)/*   Show up the About dialog*/{ about_dialog = create_about_dialog (); gtk_widget_show (about_dialog);}void on_preferences_button_clicked (GtkButton *button, gpointer  user_data)/*   Show preferences dialog*/{  gchar *s;  int x;  property_box = create_property_box ();  gnome_config_push_prefix("gnome-telnet/gtelnet/");/*********** Doing telnet ****************/  for (x=0;x < 8; x++)     setbutton(telnet_checkbox[x].widget,config_telnet[x]);  setbutton_string(telnet_checkbox[8].widget,initchar_entry, config_telnet[8]);  setbutton_string(telnet_checkbox[9].widget,tos_entry, config_telnet[9]);  setbutton_string(telnet_checkbox[10].widget,atype_entry, config_telnet[10]);      setbutton_string(telnet_checkbox[11].widget,realm_entry, config_telnet[11]);    setbutton_string(telnet_checkbox[12].widget,tracefile_entry,config_telnet[12]);    gnome_file_entry_set_default_path(GNOME_FILE_ENTRY(tracefiles_entry),gnome_config_get_string(config_telnet[12]));/*********** Doing ssh ****************/  for (x=0;x < 11; x++)     setbutton(ssh_checkbox[x].widget,config_ssh[x]);   setbutton_string(ssh_checkbox[11].widget,ssh_debug_level, config_ssh[11]);      setbutton_string(ssh_checkbox[12].widget,rsa_identity, config_ssh[12]);   g

⌨️ 快捷键说明

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