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

📄 config.c

📁 串口调试工具。非常好的串口调试助手
💻 C
📖 第 1 页 / 共 4 页
字号:
/***********************************************************************//* config.c                                                            *//* --------                                                            *//*           GTKTerm Software                                          *//*                      (c) Julien Schmitt                             *//*                      julien@jls-info.com                            */                      /*                                                                     *//* ------------------------------------------------------------------- *//*                                                                     *//*   Purpose                                                           *//*      Configuration of the serial port                               *//*                                                                     *//*   ChangeLog                                                         *//*      - 0.99.5 : Make the combo list for the device editable         *//*      - 0.99.3 : Configuration for VTE terminal                      *//*      - 0.99.2 : Internationalization                                *//*      - 0.99.1 : fixed memory management bug                         *//*                 test if there are devices found                     *//*      - 0.99.0 : fixed enormous memory management bug ;-)            *//*                 save / read macros                                  *//*      - 0.98.5 : font saved in configuration                         *//*                 bug fixed in memory management                      *//*                 combos set to non editable                          *//*      - 0.98.3 : configuration file                                  *//*      - 0.98.2 : autodetect existing devices                         *//*      - 0.98 : added devfs devices                                   *//*                                                                     *//***********************************************************************/#include <gtk/gtk.h>#include <termios.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <vte/vte.h>#include "serie.h"#include "config.h"#include "widgets.h"#include "parsecfg.h"#include "macros.h"#include "gettext.h"#include "i18n.h"#define NUMBER_OF_DEVICES 16gchar *devices_list[NUMBER_OF_DEVICES] = {  "/dev/ttyS0",  "/dev/ttyS1",  "/dev/ttyS2",  "/dev/ttyS3",  "/dev/tts/0",  "/dev/tts/1",  "/dev/tts/2",  "/dev/tts/3",  "/dev/ttyUSB0",  "/dev/ttyUSB1",  "/dev/ttyUSB2",  "/dev/ttyUSB3",  "/dev/usb/tts/0",  "/dev/usb/tts/1",  "/dev/usb/tts/2",  "/dev/usb/tts/3"};/* Configuration file variables */gchar **port;gint *speed;gint *bits;gint *stopbits;gchar **parity;gchar **flow;gint *wait_delay;gint *wait_char;gint *echo;gint *crlfauto;cfgList **macro_list = NULL;gchar **font;gint *transparency;gint *show_cursor;gint *rows;gint *columns;gint *visual_bell;gint *foreground_red;gint *foreground_blue;gint *foreground_green;gint *background_red;gint *background_blue;gint *background_green;gdouble *background_saturation;cfgStruct cfg[] = {  {"port", CFG_STRING, &port},  {"speed", CFG_INT, &speed},  {"bits", CFG_INT, &bits},  {"stopbits", CFG_INT, &stopbits},  {"parity", CFG_STRING, &parity},  {"flow", CFG_STRING, &flow},  {"wait_delay", CFG_INT, &wait_delay},  {"wait_char", CFG_INT, &wait_char},  {"echo", CFG_BOOL, &echo},  {"crlfauto", CFG_BOOL, &crlfauto},  {"font", CFG_STRING, &font},  {"macros", CFG_STRING_LIST, &macro_list},  {"term_transparency", CFG_BOOL, &transparency},  {"term_show_cursor", CFG_BOOL, &show_cursor},  {"term_rows", CFG_INT, &rows},  {"term_columns", CFG_INT, &columns},  {"term_visual_bell", CFG_BOOL, &visual_bell},  {"term_foreground_red", CFG_INT, &foreground_red},  {"term_foreground_blue", CFG_INT, &foreground_blue},  {"term_foreground_green", CFG_INT, &foreground_green},  {"term_background_red", CFG_INT, &background_red},  {"term_background_blue", CFG_INT, &background_blue},  {"term_background_green", CFG_INT, &background_green},  {"term_background_saturation", CFG_DOUBLE, &background_saturation},  {NULL, CFG_END, NULL}};gchar *config_file;struct configuration_port config;display_config_t term_conf;GtkWidget *Entry, *Bouton_font = NULL;gint Grise_Degrise(GtkWidget *bouton, gpointer pointeur);gint Lis_Font(GtkFontSelectionDialog *fontsel);void Hard_default_configuration(void);void Copy_configuration(int);static void Select_config(gchar *, void *);static void Save_config_file(void);static void load_config(GtkDialog *, gint, GtkTreeSelection *);static void delete_config(GtkDialog *, gint, GtkTreeSelection *);static void save_config(GtkDialog *, gint, GtkWidget *);static void really_save_config(GtkDialog *, gint, gpointer);static gint remove_section(gchar *, gchar *);static void Curseur_OnOff(GtkWidget *, gpointer);static void Selec_couleur(GdkColor *, gfloat, gfloat, gfloat);static gint config_color_fg(GtkWidget *, gpointer);static gint config_color_bg(GtkWidget *, gpointer);static void Transparency_OnOff(GtkWidget *, gpointer);static void change_scale(GtkRange *, gpointer);extern GtkWidget *display;gint Config_Port_Fenetre(GtkWidget *widget, guint param){  GtkWidget *Table, *Label, *Bouton_OK, *Bouton_annule, *Combo, *Dialogue, *Frame, *CheckBouton, *Spin;  static GtkWidget *Combos[8];  GList *liste;  gchar *chaine = NULL;  GtkObject *adj;  struct stat my_stat;  int i;  liste = NULL;  for(i = 0; i < NUMBER_OF_DEVICES; i++)    {      if(stat(devices_list[i], &my_stat) == 0)	liste = g_list_append(liste, devices_list[i]);    }  if(liste == NULL)    {      show_message(_("No valid serial device found in /dev, sorry !\nYou should have at least one of these :\n/dev/ttyS*\n/dev/tts/*\n/dev/ttyUSB*\n/dev/usb/tts/*\n"), MSG_ERR);      return FALSE;    }  Dialogue = gtk_dialog_new();  gtk_window_set_title(GTK_WINDOW(Dialogue), _("Configuration"));  gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(Dialogue)->vbox), 5);    Frame = gtk_frame_new(_("Serial port"));  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->vbox), Frame, FALSE, TRUE, 5);  Table = gtk_table_new(4, 3, FALSE);  gtk_container_add(GTK_CONTAINER(Frame), Table);    Label = gtk_label_new(_("Port :"));  gtk_table_attach(GTK_TABLE(Table), Label, 0, 1, 0, 1, 0, 0, 10, 5);  Label = gtk_label_new(_("Speed :"));  gtk_table_attach(GTK_TABLE(Table), Label, 1, 2, 0, 1, 0, 0, 10, 5);  Label = gtk_label_new(_("Parity :"));  gtk_table_attach(GTK_TABLE(Table), Label, 2, 3, 0, 1, 0, 0, 10, 5);  Combo = gtk_combo_new();  gtk_editable_set_editable(GTK_EDITABLE((GTK_COMBO(Combo)->entry)), TRUE);  gtk_combo_set_popdown_strings(GTK_COMBO(Combo), liste);  gtk_combo_set_value_in_list(GTK_COMBO(Combo), FALSE, FALSE);  chaine = g_strdup(config.port);  if(g_list_find_custom(liste, chaine, (GCompareFunc)strcmp) != NULL)    gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), chaine);  gtk_table_attach(GTK_TABLE(Table), Combo, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);  Combos[0] = Combo;  Combo = gtk_combo_new();  gtk_editable_set_editable(GTK_EDITABLE((GTK_COMBO(Combo)->entry)), FALSE);  g_list_free(liste);  liste = NULL;  liste = g_list_append(liste, "300");  liste = g_list_append(liste, "600");  liste = g_list_append(liste, "1200");  liste = g_list_append(liste, "2400");  liste = g_list_append(liste, "4800");  liste = g_list_append(liste, "9600");  liste = g_list_append(liste, "19200");  liste = g_list_append(liste, "38400");  liste = g_list_append(liste, "57600");  liste = g_list_append(liste, "115200");  gtk_combo_set_popdown_strings(GTK_COMBO(Combo), liste);  gtk_combo_set_value_in_list(GTK_COMBO(Combo), TRUE, FALSE);  g_free(chaine);  chaine = g_strdup_printf("%d", config.vitesse);  gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), chaine);  gtk_table_attach(GTK_TABLE(Table), Combo, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);  Combos[1] = Combo;   Combo = gtk_combo_new();  gtk_editable_set_editable(GTK_EDITABLE((GTK_COMBO(Combo)->entry)), FALSE);  g_list_free(liste);  liste = NULL;  liste = g_list_append(liste, "none");  liste = g_list_append(liste, "even");  liste = g_list_append(liste, "odd");  gtk_combo_set_popdown_strings(GTK_COMBO(Combo), liste);  gtk_combo_set_value_in_list(GTK_COMBO(Combo), TRUE, FALSE);  switch(config.parite)    {    case 0:      gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), "none");      break;    case 1:      gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), "odd");      break;    case 2:      gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), "even");      break;    }  gtk_table_attach(GTK_TABLE(Table), Combo, 2, 3, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);  Combos[2] = Combo;  Label = gtk_label_new(_("Bits :"));  gtk_table_attach(GTK_TABLE(Table), Label, 0, 1, 2, 3, 0, 0, 10, 5);  Label = gtk_label_new(_("Stopbits :"));  gtk_table_attach(GTK_TABLE(Table), Label, 1, 2, 2, 3, 0, 0, 10, 5);  Label = gtk_label_new(_("Flow control :"));  gtk_table_attach(GTK_TABLE(Table), Label, 2, 3, 2, 3, 0, 0, 10, 5);  Combo = gtk_combo_new();  gtk_editable_set_editable(GTK_EDITABLE((GTK_COMBO(Combo)->entry)), FALSE);  g_list_free(liste);  liste = NULL;  liste = g_list_append(liste, "5");  liste = g_list_append(liste, "6");  liste = g_list_append(liste, "7");  liste = g_list_append(liste, "8");  gtk_combo_set_popdown_strings(GTK_COMBO(Combo), liste);  gtk_combo_set_value_in_list(GTK_COMBO(Combo), TRUE, FALSE);  g_free(chaine);  chaine = g_strdup_printf("%d", config.bits);  gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), chaine);  gtk_table_attach(GTK_TABLE(Table), Combo, 0, 1, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);  Combos[3] = Combo;  Combo = gtk_combo_new();  gtk_editable_set_editable(GTK_EDITABLE((GTK_COMBO(Combo)->entry)), FALSE);  g_list_free(liste);  liste = NULL;  liste = g_list_append(liste, "1");  liste = g_list_append(liste, "2");  gtk_combo_set_popdown_strings(GTK_COMBO(Combo), liste);  gtk_combo_set_value_in_list(GTK_COMBO(Combo), TRUE, FALSE);  g_free(chaine);  chaine = g_strdup_printf("%d", config.stops);  gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), chaine);  gtk_table_attach(GTK_TABLE(Table), Combo, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);  Combos[4] = Combo;  g_free(chaine);  Combo = gtk_combo_new();  gtk_editable_set_editable(GTK_EDITABLE((GTK_COMBO(Combo)->entry)), FALSE);  g_list_free(liste);  liste = NULL;  liste = g_list_append(liste, "none");  liste = g_list_append(liste, "RTS/CTS");  liste = g_list_append(liste, "Xon/Xoff");  gtk_combo_set_popdown_strings(GTK_COMBO(Combo), liste);  gtk_combo_set_value_in_list(GTK_COMBO(Combo), TRUE, FALSE);  switch(config.flux)    {    case 0:      gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), "none");      break;    case 1:      gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), "Xon/Xoff");      break;    case 2:      gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(Combo)->entry), "RTS/CTS");      break;    }  gtk_table_attach(GTK_TABLE(Table), Combo, 2, 3, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);  Combos[5] = Combo;  g_list_free(liste);  Frame = gtk_frame_new(_("ASCII file transfer"));  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->vbox), Frame, FALSE, TRUE, 5);  Table = gtk_table_new(2, 2, FALSE);  gtk_container_add(GTK_CONTAINER(Frame), Table);  Label = gtk_label_new(_("End of line delay (milliseconds) :"));  gtk_table_attach_defaults(GTK_TABLE(Table), Label, 0, 1, 0, 1);  adj = gtk_adjustment_new(0.0, 0.0, 500.0, 10.0, 20.0, 0.0);  Spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 0, 0);  gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(Spin), TRUE);  gtk_spin_button_set_value(GTK_SPIN_BUTTON(Spin), (gfloat)config.delai);  gtk_table_attach(GTK_TABLE(Table), Spin, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);  Combos[6] = Spin;  Entry = gtk_entry_new_with_max_length(1);  gtk_widget_set_sensitive(GTK_WIDGET(Entry), FALSE);  gtk_table_attach(GTK_TABLE(Table), Entry, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);  CheckBouton = gtk_check_button_new_with_label(_("Wait for this special character before passing to next line :"));  gtk_signal_connect(GTK_OBJECT(CheckBouton), "clicked", GTK_SIGNAL_FUNC(Grise_Degrise), (gpointer)Spin);  if(config.car != -1)    {      gtk_entry_set_text(GTK_ENTRY(Entry), &(config.car));      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CheckBouton), TRUE);    }  gtk_table_attach_defaults(GTK_TABLE(Table), CheckBouton, 0, 1, 1, 2);  Combos[7] = CheckBouton;  Bouton_OK = gtk_button_new_from_stock(GTK_STOCK_OK);  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton_OK, FALSE, TRUE, 0);  gtk_signal_connect(GTK_OBJECT(Bouton_OK), "clicked", (GtkSignalFunc)Lis_Config, (gpointer)Combos);  gtk_signal_connect_object(GTK_OBJECT(Bouton_OK), "clicked", (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(Dialogue));  Bouton_annule = gtk_button_new_from_stock(GTK_STOCK_CANCEL);  gtk_signal_connect_object(GTK_OBJECT(Bouton_annule), "clicked", (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(Dialogue));  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton_annule, FALSE, TRUE, 0);  gtk_widget_show_all(Dialogue);  return FALSE;}gint Lis_Config(GtkWidget *bouton, GtkWidget **Combos){  gchar *message;  strcpy(config.port, gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combos[0])->entry)));  config.vitesse = atoi(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combos[1])->entry)));  config.bits = atoi(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(Combos[3])->entry)));  config.delai = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(Combos[6]));

⌨️ 快捷键说明

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