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

📄 filer.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*	@(#)filer.c 1.1 92/07/30 SMI	*//*****************************************************************************//*			4.0	filer.c					     *//*****************************************************************************/#include <suntool/sunview.h>#include <suntool/panel.h>#include <suntool/tty.h>#include <suntool/textsw.h>#include <suntool/seln.h>#include <suntool/alert.h>#include <sys/stat.h>	    /* stat call needed to verify existence of files *//* these objects are global so their attributes can be modified or retrieved */Frame		base_frame, edit_frame, ls_flags_frame;Panel		panel, ls_flags_panel;Tty		ttysw;Textsw		editsw;Panel_item	dir_item, fname_item, filing_mode_item, done_item;int		quit_confirmed_from_panel;#define		MAX_FILENAME_LEN	256#define		MAX_PATH_LEN		1024char *getwd();main(argc, argv)    int	   argc;    char **argv;{    static Notify_value filer_destroy_func();    void	ls_flags_proc();    base_frame = window_create(NULL, FRAME,		 FRAME_ARGS,		argc, argv,		 FRAME_LABEL,		"filer",		 FRAME_PROPS_ACTION_PROC, ls_flags_proc,		 FRAME_PROPS_ACTIVE, TRUE,		 FRAME_NO_CONFIRM,	TRUE,		 0);    (void) notify_interpose_destroy_func(base_frame, filer_destroy_func);    create_panel_subwindow();    create_tty_subwindow();    create_edit_popup();    create_ls_flags_popup();    quit_confirmed_from_panel = 0;    window_main_loop(base_frame);    exit(0);	/* NOTREACHED */}create_tty_subwindow(){    ttysw = window_create(base_frame, TTY, 0);}create_edit_popup(){    edit_frame = window_create(base_frame, FRAME,		 FRAME_SHOW_LABEL, TRUE,		 0);    editsw = window_create(edit_frame, TEXTSW, 0);}create_panel_subwindow(){    void ls_proc(), ls_flags_proc(), quit_proc(), edit_proc(), 	edit_sel_proc(), del_proc();    char current_dir[MAX_PATH_LEN];    panel = window_create(base_frame, PANEL, 0);    (void) panel_create_item(panel, PANEL_BUTTON,	PANEL_LABEL_X,			ATTR_COL(0),	PANEL_LABEL_Y,			ATTR_ROW(0),	PANEL_LABEL_IMAGE, 		panel_button_image(panel, "List Directory", 0, 0),	PANEL_NOTIFY_PROC, 		ls_proc,	0);    (void) panel_create_item(panel, PANEL_BUTTON,	PANEL_LABEL_IMAGE, 		panel_button_image(panel, "Set ls flags", 0, 0),	PANEL_NOTIFY_PROC, 		ls_flags_proc,	0);    (void) panel_create_item(panel, PANEL_BUTTON,	PANEL_LABEL_IMAGE, 		panel_button_image(panel, "Edit", 0, 0),	PANEL_NOTIFY_PROC, 		edit_proc,	0);    (void) panel_create_item(panel, PANEL_BUTTON,	PANEL_LABEL_IMAGE, 		panel_button_image(panel, "Delete", 0, 0),	PANEL_NOTIFY_PROC, 		del_proc,	0);    (void) panel_create_item(panel, PANEL_BUTTON,	PANEL_LABEL_IMAGE, 		panel_button_image(panel, "Quit", 0, 0),	PANEL_NOTIFY_PROC, quit_proc,	0);    filing_mode_item = panel_create_item(panel, PANEL_CYCLE,	PANEL_LABEL_X,			ATTR_COL(0),	PANEL_LABEL_Y,			ATTR_ROW(1),	PANEL_LABEL_STRING,		"Filing Mode:",	PANEL_CHOICE_STRINGS,		"Use \"File:\" item",					"Use Current Selection", 0,	0);    (void) panel_create_item(panel, PANEL_MESSAGE,	PANEL_LABEL_X,			ATTR_COL(0),	PANEL_LABEL_Y,			ATTR_ROW(2),	0);    dir_item = panel_create_item(panel, PANEL_TEXT,	PANEL_LABEL_X,			ATTR_COL(0),	PANEL_LABEL_Y,			ATTR_ROW(3),	PANEL_VALUE_DISPLAY_LENGTH,	60,	PANEL_VALUE,			getwd(current_dir),	PANEL_LABEL_STRING,		"Directory: ",	0);    fname_item = panel_create_item(panel, PANEL_TEXT,	PANEL_LABEL_X,			ATTR_COL(0),	PANEL_LABEL_Y,			ATTR_ROW(4),	PANEL_LABEL_DISPLAY_LENGTH,	60,	PANEL_LABEL_STRING,		"File:  ",	0);    window_fit_height(panel);    window_set(panel, PANEL_CARET_ITEM, fname_item, 0);}create_ls_flags_popup(){    void done_proc();    ls_flags_frame = window_create(base_frame, FRAME, 0);    ls_flags_panel = window_create(ls_flags_frame, PANEL, 0);    panel_create_item(ls_flags_panel, PANEL_MESSAGE,		PANEL_ITEM_X,		ATTR_COL(14),		PANEL_ITEM_Y,		ATTR_ROW(0),		PANEL_LABEL_STRING,	"Options for ls command",		PANEL_CLIENT_DATA,	"   ",		0);    panel_create_item(ls_flags_panel, PANEL_CYCLE,		PANEL_ITEM_X,		ATTR_COL(0),		PANEL_ITEM_Y,		ATTR_ROW(1),		PANEL_DISPLAY_LEVEL,	PANEL_CURRENT,		PANEL_LABEL_STRING,	"Format:                          ",		PANEL_CHOICE_STRINGS,	"Short", "Long", 0,		PANEL_CLIENT_DATA,	" 1 ",		0);    panel_create_item(ls_flags_panel, PANEL_CYCLE,		PANEL_ITEM_X,		ATTR_COL(0),		PANEL_ITEM_Y,		ATTR_ROW(2),		PANEL_DISPLAY_LEVEL,	PANEL_CURRENT,		PANEL_LABEL_STRING,	"Sort Order:                      ",		PANEL_CHOICE_STRINGS,	"Descending", "Ascending", 0,		PANEL_CLIENT_DATA,	" r ",		0);    panel_create_item(ls_flags_panel, PANEL_CYCLE,		PANEL_ITEM_X,		ATTR_COL(0),		PANEL_ITEM_Y,		ATTR_ROW(3),		PANEL_DISPLAY_LEVEL,	PANEL_CURRENT,		PANEL_LABEL_STRING,	"Sort criterion:                  ",		PANEL_CHOICE_STRINGS,	"Name", "Modification Time",					"Access Time", 0,		PANEL_CLIENT_DATA,	" tu",		0);    panel_create_item(ls_flags_panel, PANEL_CYCLE,		PANEL_ITEM_X,		ATTR_COL(0),		PANEL_ITEM_Y,		ATTR_ROW(4),		PANEL_DISPLAY_LEVEL,	PANEL_CURRENT,		PANEL_LABEL_STRING,	"For directories, list:           ",		PANEL_CHOICE_STRINGS,	"Contents", "Name Only", 0,		PANEL_CLIENT_DATA,	" d ",		0);    panel_create_item(ls_flags_panel, PANEL_CYCLE,		PANEL_ITEM_X,		ATTR_COL(0),		PANEL_ITEM_Y,		ATTR_ROW(5),		PANEL_DISPLAY_LEVEL,	PANEL_CURRENT,		PANEL_LABEL_STRING,	"Recursively list subdirectories? ",		PANEL_CHOICE_STRINGS,	"No", "Yes", 0,		PANEL_CLIENT_DATA,	" R ",		0);    panel_create_item(ls_flags_panel, PANEL_CYCLE,		PANEL_ITEM_X,		ATTR_COL(0),		PANEL_ITEM_Y,		ATTR_ROW(6),		PANEL_DISPLAY_LEVEL,	PANEL_CURRENT,		PANEL_LABEL_STRING,	"List '.' files?                  ",		PANEL_CHOICE_STRINGS,	"No", "Yes", 0,		PANEL_CLIENT_DATA,	" a ",		0);    panel_create_item(ls_flags_panel, PANEL_CYCLE,		PANEL_ITEM_X,		ATTR_COL(0),		PANEL_ITEM_Y,		ATTR_ROW(6),		PANEL_DISPLAY_LEVEL,	PANEL_CURRENT,		PANEL_LABEL_STRING,	"Indicate type of file?           ",		PANEL_CHOICE_STRINGS,	"No", "Yes", 0,		PANEL_CLIENT_DATA,	" F ",		0);    done_item = panel_create_item(ls_flags_panel, PANEL_BUTTON,		PANEL_ITEM_X,		ATTR_COL(0),		PANEL_ITEM_Y,		ATTR_ROW(7),		PANEL_LABEL_IMAGE, 	panel_button_image(panel, "Done", 0, 0),		PANEL_NOTIFY_PROC, 	done_proc,		0);    window_fit(ls_flags_panel); /* fit panel around its items */    window_fit(ls_flags_frame); /* fit frame around its panel */}char *compose_ls_options(){    static char  flags[20];    char 	*ptr;    char 	 flag;    int 	 first_flag = TRUE;    Panel_item	 item;    char 	*client_data;    int 	 index;    ptr = flags;    panel_each_item(ls_flags_panel, item)	if (item != done_item) {	    client_data = panel_get(item, PANEL_CLIENT_DATA, 0);	    index = (int)panel_get_value(item);	    flag = client_data[index];	    if (flag != ' ') {	        if (first_flag) {		    *ptr++     = '-';		    first_flag = FALSE;	        }	        *ptr++ = flag;	    }	}    panel_end_each    *ptr = '\0';    return flags;}voidls_proc(){    static char previous_dir[MAX_PATH_LEN];    char *current_dir;    char cmdstring[100];	/* dir_item's value can be 80, plus flags */    current_dir = (char *)panel_get_value(dir_item);    if (strcmp(current_dir, previous_dir)) {	chdir((char *)panel_get_value(dir_item));	strcpy(previous_dir, current_dir);    }    sprintf(cmdstring, "ls %s %s/%s\n",		compose_ls_options(),		current_dir,		panel_get_value(fname_item));    ttysw_input(ttysw, cmdstring, strlen(cmdstring));}voidls_flags_proc(){    window_set(ls_flags_frame, WIN_SHOW, TRUE, 0);}voiddone_proc(){    window_set(ls_flags_frame, WIN_SHOW, FALSE, 0);}/* return a pointer to the current selection */char *get_selection(){    static char	  filename[MAX_FILENAME_LEN];    Seln_holder	  holder;    Seln_request *buffer;    holder = seln_inquire(SELN_PRIMARY);    buffer = seln_ask(&holder, SELN_REQ_CONTENTS_ASCII, 0, 0);    strncpy(	filename, buffer->data + sizeof(Seln_attribute), MAX_FILENAME_LEN);    return(filename);}/* return 1 if file exists, else print error message and return 0 */stat_file(filename)    char  *filename;{    static char previous_dir[MAX_PATH_LEN];    char  *current_dir;    char   this_file[MAX_PATH_LEN];    struct stat statbuf;    current_dir = (char *)panel_get_value(dir_item);    if (strcmp(current_dir, previous_dir)) {	chdir((char *)panel_get_value(dir_item));	strcpy(previous_dir, current_dir);    }    sprintf(this_file, "%s/%s", current_dir, filename);    if (stat(this_file, &statbuf) < 0) {

⌨️ 快捷键说明

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