gfindchip.c

来自「linux操作系统下的红外驱动的测试程序」· C语言 代码 · 共 194 行

C
194
字号
#include <gtk/gtk.h>#include <stdio.h>#include <string.h>void dialog_close_cb(GtkWidget * w, gpointer data){	gtk_widget_destroy(data);}void show_dialog(char *title, char *body){	GtkWidget *dialog, *button, *label;	dialog = gtk_dialog_new();	gtk_window_set_title(GTK_WINDOW(dialog), title);	gtk_container_border_width(GTK_CONTAINER(dialog), 5);	label = gtk_label_new(body);	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE,			   TRUE, 0);	gtk_widget_show(label);	button = gtk_button_new_with_label(" Close ");	gtk_signal_connect(GTK_OBJECT(button), "clicked",			   GTK_SIGNAL_FUNC(dialog_close_cb), dialog);	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),			   button, FALSE, FALSE, 0);	gtk_widget_show(button);	gtk_widget_show(dialog);	gtk_widget_grab_focus(button);}void about(void){	show_dialog("About gFindChip 0.01", "gFindChip 0.01\n\n\Copyright (c) 2000 Jonathan Hudson <jrhudson@bigfoot.com>,\n\Copyright (c) 2000 Dag Brattli <dagb@cs.uit.no>,\n\All Rights Reserved.\n\n\This program is free software; you can redistribute it and/or modify\n\it under the terms of the GNU General Public License as published by\n\the Free Software Foundation; either version 2 of the License, or\n\(at your option) any later version.\n\\n\This program is distributed in the hope that it will be useful,\n\but WITHOUT ANY WARRANTY; without even the implied warranty of\n\MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\GNU General Public License for more details.\n\\n\You should have received a copy of the GNU General Public License\n\along with this program; if not, write to the Free Software\n\Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n\USA.");}static GtkItemFactoryEntry menu_items[] = {	{"/_File", NULL, NULL, 0, "<Branch>"},	{"/File/Quit", "<control>Q", gtk_main_quit, 0, NULL},	{"/_Help", NULL, NULL, 0, "<LastBranch>"},	{"/_Help/About", NULL, about, 0, NULL},};void get_main_menu(GtkWidget * window, GtkWidget ** menubar){	int nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);	GtkItemFactory *item_factory;	GtkAccelGroup *accel_group;	accel_group = gtk_accel_group_new();	item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>",					    accel_group);	gtk_item_factory_create_items(item_factory, nmenu_items,				      menu_items, NULL);	gtk_accel_group_attach(accel_group, GTK_OBJECT(window));	if (menubar)		*menubar =		    gtk_item_factory_get_widget(item_factory, "<main>");}void MakeResultLabel(GtkWidget * table, GtkWidget * button[], int i,		     char *label){	int x, y, n;	x = 2 * (i % 3);	y = i / 3;	n = i * 2 + 1;	button[n] = gtk_label_new(label);	gtk_label_set_justify(GTK_LABEL(button[n]), GTK_JUSTIFY_LEFT);	gtk_table_attach_defaults(GTK_TABLE(table), button[n], x + 1,				  x + 2, y, y + 1);	gtk_widget_show(button[n]);}void MakeStaticLabels(GtkWidget * table, GtkWidget * button[]){	int i, x, y, n;	static char *labels[] = { "Chip:", "Model:", "Version:",		"Control I/O:", "SIR I/O:", "FIR I/O:",		"IRQ:", "DMA:"	};	for (i = 0; i < 8; i++) {		x = 2 * (i % 3);		y = i / 3;		n = i * 2;		button[n] = gtk_label_new(labels[i]);		gtk_label_set_justify(GTK_LABEL(button[n]),				      GTK_JUSTIFY_LEFT);		gtk_table_attach_defaults(GTK_TABLE(table), button[n], x,					  x + 1, y, y + 1);		gtk_widget_show(button[n]);	}}int main(int argc, char *argv[]){	GtkWidget *window;	GtkWidget *main_vbox;	GtkWidget *menubar;	GtkWidget *table;	GtkWidget *button[16];	FILE *fp;	int i = 0;	gtk_init(&argc, &argv);	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);	gtk_signal_connect(GTK_OBJECT(window), "destroy",			   GTK_SIGNAL_FUNC(gtk_main_quit), "WM destroy");	gtk_window_set_title(GTK_WINDOW(window), "gFindChip");	main_vbox = gtk_vbox_new(FALSE, 1);	gtk_container_border_width(GTK_CONTAINER(main_vbox), 1);	gtk_container_add(GTK_CONTAINER(window), main_vbox);	gtk_widget_show(main_vbox);	get_main_menu(window, &menubar);	gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, TRUE, 0);	gtk_widget_show(menubar);	table = gtk_table_new(3, 6, 1);	gtk_container_set_border_width(GTK_CONTAINER(window), 2);	gtk_container_add(GTK_CONTAINER(main_vbox), table);	MakeStaticLabels(table, button);	if ((fp = popen("findchip", "r"))) {		char buf[128];		char *p1, *p0, *p2;		if (fgets(buf, sizeof(buf), fp)) {			p0 = strchr(buf, '\n');			*p0 = 0;			for (i = 0, p1 = buf; (p2 = strchr(p1, ',')); i++) {				*p2 = 0;				if (p1 != p2) {					MakeResultLabel(table, button, i,							p1);				}				p1 = p2 + 1;			}			if (*p1) {				MakeResultLabel(table, button, i, p1);			}		}		pclose(fp);	}	if (i == 0) {		show_dialog("gFindChip",			    "Unable to find any known IR chip");	}	gtk_widget_show(table);	gtk_widget_show(window);	gtk_main();	return (0);}

⌨️ 快捷键说明

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