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

📄 fv.find.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifndef lintstatic  char sccsid[] = "@(#)fv.find.c 1.1 92/07/30 Copyr 1988 Sun Micro";#endif/*	Copyright (c) 1987, 1988, Sun Microsystems, Inc.  All Rights Reserved.	Sun considers its source code as an unpublished, proprietary	trade secret, and it is available only under strict license	provisions.  This copyright notice is placed here only to protect	Sun in the event the source is deemed a published work.  Dissassembly,	decompilation, or other means of reducing the object code to human	readable form is prohibited by the license agreement under which	this code is provided to the user or company in possession of this	copy.	RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the 	Government is subject to restrictions as set forth in subparagraph 	(c)(1)(ii) of the Rights in Technical Data and Computer Software 	clause at DFARS 52.227-7013 and in similar clauses in the FAR and 	NASA FAR Supplement. */#include <stdio.h>#include <sys/wait.h>#include <sys/time.h>#include <sys/resource.h>#include <sys/ioctl.h>#include <sys/file.h>#include <sys/types.h>#include <sys/stat.h>#include <pwd.h>#ifdef SV1#include <suntool/sunview.h>#include <suntool/panel.h>#include <suntool/text.h>#include <suntool/canvas.h>#include <suntool/scrollbar.h>#else#include <view2/view2.h>#include <view2/panel.h>#include <view2/text.h>#include <view2/canvas.h>#include <view2/scrollbar.h>#endif#include "fv.port.h"#include "fv.h"#include "fv.extern.h"#define FINDPROG 	"/usr/bin/find"#define MAXFIND		512#define CANVAS_ROWS	8#define EMPTY		(-1)extern errno;extern char *sys_errlist[];extern time_t time();static Frame Find_frame;static Frame Find_panel;static Canvas Find_canvas;static PAINTWIN Pw;static Scrollbar Find_canvassb;static Panel_item Nameitem, Owneritem, Beforeitem, Afteritem, Patternitem;static Panel_item Nametoggle, Ownertoggle, Casetoggle, Fromitem;static Panel_item Find_button, Cancel_button, Open_button;static FILE *Ptyfp;static char *Line = "/dev/ptyXX";#define LENDEVPTY	9#define LENDEV		5static int Pid;static int Master, Slave;static int Nfound;static int Found_chosen = EMPTY;static char *Found[MAXFIND];static int Find_canvas_y;static void find_button();static void cancel_button();static void open_button();static void done();static Notify_value find_input();#define NITEMS 6static char *Label[NITEMS] = {	"Find files from folder:",	"Name:",	"Owner:",	"Modified After:",	"Modified Before:",	"File contains text pattern:"};#ifdef SV1# ifdef PROTO#  define VALUE_COL	26# else#  define VALUE_COL	29# endif#else# define VALUE_COL	17#endiffv_find_object(){	if (!Find_frame)		make_popup();	else	{		panel_set(Fromitem, PANEL_VALUE, Fv_path, 0);#ifdef OPENLOOK		panel_set(Open_button, PANEL_INACTIVE, TRUE, 0);#endif	}	if ((int)window_get(Find_frame, WIN_SHOW) == FALSE)		fv_winright(Find_frame);	window_set(Find_frame, WIN_SHOW, TRUE, 0);}staticmake_popup(){	extern Canvas fv_create_listbox();	static void open_notify();	Panel panel;	/* XXX Small font problem in Sunview 1 */	if ((Find_frame = window_create(Fv_frame, #ifdef SV1		FRAME,		FRAME_LABEL, "fileview: Find",# ifdef PROTO		FRAME_CLASS, FRAME_CLASS_COMMAND,		FRAME_ADJUSTABLE, FALSE,# endif#else		FRAME_CMD,		FRAME_SHOW_FOOTER, TRUE,		FRAME_CMD_PUSHPIN_IN, TRUE,		FRAME_LABEL, " Find",#endif		FRAME_DONE_PROC, done,		FRAME_SHOW_LABEL, TRUE,		FRAME_NO_CONFIRM, TRUE,		    0)) == NULL ||#ifndef SV1	    (panel = vu_get(Find_frame, FRAME_CMD_PANEL)) == NULL)#else	    (panel = window_create(Find_frame, PANEL, 		0)) == NULL)#endif	{		fv_putmsg(TRUE, Fv_message[MEWIN], 0, 0);		return;	}	Fromitem = panel_create_item(panel, PANEL_TEXT,		PANEL_LABEL_STRING, Label[0],		PANEL_VALUE_DISPLAY_LENGTH, 25,		PANEL_LABEL_BOLD, TRUE,		PANEL_VALUE, Fv_path,		PANEL_ITEM_Y, ATTR_ROW(0),		PANEL_VALUE_X, ATTR_COL(VALUE_COL),		0);	Nameitem = panel_create_item(panel, PANEL_TEXT,		PANEL_LABEL_STRING, Label[1],		PANEL_VALUE_DISPLAY_LENGTH, 15,		PANEL_LABEL_BOLD, TRUE,		PANEL_ITEM_Y, ATTR_ROW(1),		PANEL_VALUE_X, ATTR_COL(VALUE_COL),		0);	Nametoggle = panel_create_item(panel, PANEL_CHOICE,		PANEL_CHOICE_STRINGS, "Included", "Excluded", 0,		PANEL_ITEM_Y, ATTR_ROW(1)-CHOICE_OFFSET,		0);	Owneritem = panel_create_item(panel, PANEL_TEXT,		PANEL_LABEL_STRING, Label[2],		PANEL_VALUE_DISPLAY_LENGTH, 15,		PANEL_LABEL_BOLD, TRUE,		PANEL_ITEM_Y, ATTR_ROW(2),		PANEL_VALUE_X, ATTR_COL(VALUE_COL),		0);	Ownertoggle = panel_create_item(panel, PANEL_CHOICE,		PANEL_CHOICE_STRINGS, "Included", "Excluded", 0,		PANEL_ITEM_Y, ATTR_ROW(2)-CHOICE_OFFSET,		0);	Afteritem = panel_create_item(panel, PANEL_TEXT,		PANEL_LABEL_STRING, Label[3],		PANEL_LABEL_BOLD, TRUE,		PANEL_VALUE_DISPLAY_LENGTH, 15,		PANEL_VALUE_STORED_LENGTH, 16,		PANEL_ITEM_Y, ATTR_ROW(3),		PANEL_VALUE_X, ATTR_COL(VALUE_COL),		0);	panel_create_item(panel, PANEL_MESSAGE,		PANEL_LABEL_STRING, "(mm/dd/yy)",		PANEL_LABEL_BOLD, TRUE,		0);	Beforeitem = panel_create_item(panel, PANEL_TEXT,		PANEL_LABEL_STRING, Label[4],		PANEL_LABEL_BOLD, TRUE,		PANEL_VALUE_DISPLAY_LENGTH, 15,		PANEL_VALUE_STORED_LENGTH, 16,		PANEL_ITEM_Y, ATTR_ROW(4),		PANEL_VALUE_X, ATTR_COL(VALUE_COL),		0);	panel_create_item(panel, PANEL_MESSAGE,		PANEL_LABEL_STRING, "(mm/dd/yy)",		PANEL_LABEL_BOLD, TRUE,		0);	Patternitem = panel_create_item(panel, PANEL_TEXT,		PANEL_LABEL_STRING, Label[5],		PANEL_LABEL_BOLD, TRUE,		PANEL_VALUE_DISPLAY_LENGTH, 15,		PANEL_ITEM_Y, ATTR_ROW(5),		PANEL_VALUE_X, ATTR_COL(VALUE_COL),		0);	Casetoggle = panel_create_item(panel, PANEL_TOGGLE,		PANEL_CHOICE_STRINGS, "Ignore Case", 0,		PANEL_ITEM_Y, ATTR_ROW(5)-CHOICE_OFFSET,		0);	Find_button = panel_create_item(panel, PANEL_BUTTON,		MY_BUTTON_IMAGE(panel, "Find"),		PANEL_NOTIFY_PROC, find_button,		PANEL_ITEM_Y, ATTR_ROW(6),		PANEL_ITEM_X, ATTR_COL(VALUE_COL-5),		0);	Cancel_button = panel_create_item(panel, PANEL_BUTTON,		MY_BUTTON_IMAGE(panel, "Stop"),#ifdef OPENLOOK		PANEL_INACTIVE, TRUE,#endif		PANEL_NOTIFY_PROC, cancel_button, 0);	Open_button = panel_create_item(panel, PANEL_BUTTON,		MY_BUTTON_IMAGE(panel, "Open"),#ifdef OPENLOOK		PANEL_INACTIVE, TRUE,#endif		PANEL_NOTIFY_PROC, open_button, 0);	Find_panel = panel;	if ((Find_canvas = fv_create_listbox(Find_frame,		512, &Found_chosen, &Nfound, Found, open_notify)) == NULL)		return;	window_fit(Find_panel);	window_set(Find_canvas, WIN_BELOW, Find_panel,		WIN_WIDTH, window_get(Find_panel, WIN_WIDTH),		WIN_HEIGHT, ATTR_ROWS(7),		0);#ifdef SV1	Pw = (PAINTWIN)canvas_pixwin(Find_canvas);#else	Pw = (PAINTWIN)vu_get(Find_canvas, CANVAS_NTH_PAINT_WINDOW, 0);#endif	Find_canvassb = (Scrollbar)window_get(Find_canvas, WIN_VERTICAL_SCROLLBAR);#ifdef PROTO	frame_set_font_size(Find_frame, (int)window_get(Fv_frame, WIN_FONT_SIZE));#endif	window_fit(Find_frame);}static voidfind_button(){	int i, pid, after_days, before_days, today;	char *from, *name, *owner, *after, *before, *pattern;	char *av[30], buf[10], buf1[10];	union wait status;	/* Get and check name, owner, modify time, and pattern parameters */	from = (char *)panel_get(Fromitem, PANEL_VALUE);	name = (char *)panel_get(Nameitem, PANEL_VALUE);	owner = (char *)panel_get(Owneritem, PANEL_VALUE);	after = (char *)panel_get(Afteritem, PANEL_VALUE);	before = (char *)panel_get(Beforeitem, PANEL_VALUE);	pattern = (char *)panel_get(Patternitem, PANEL_VALUE);	if (*from == 0)	{		error(FALSE, Fv_message[MSEARCH], Fv_path);		from = Fv_path;	}	if (*name == 0 && *owner == 0 && *after == 0 && *before == 0 && 		*pattern == 0)	{		/* Supply default parameter */		*name = '*';		*(name+1) = 0;	}	if (*after && (after_days = calc_days(after)) == -1)	{		error(TRUE, Fv_message[MEDATE], "After");		return;	}	if (*before && (before_days = calc_days(before)) == -1)	{		error(TRUE, Fv_message[MEDATE], "Before");		return;	}	today = today_in_days();	if (*owner && getunum(owner) == -1)	{		error(TRUE, Fv_message[MEOWNER], owner);		return;	}	/* Get canvas ready for find's output... */	for (i=0; i < Nfound; i++)		free(Found[i]);	Nfound = 0;	Find_canvas_y = 0;	Found_chosen = EMPTY;	pw_writebackground(Pw, 0, 0, 		(int)window_get(Find_canvas, CANVAS_WIDTH),		(int)window_get(Find_canvas, CANVAS_HEIGHT), PIX_CLR);	if (scrollbar_get(Find_canvassb, SCROLL_VIEW_START))		scrollbar_scroll_to(Find_canvassb, 0);	window_set(Find_canvas, CANVAS_HEIGHT, MAXFIND*Fv_fontsize.y, 0);	/* Fork off the find... */	Master = getMaster();	if (Master < 0) {		error(TRUE, Fv_message[MEPTY], 0);		return;	}	/* Don't block if no process has status to report */ 	while (wait3(&status, WNOHANG, (struct rusage *)0) > 0)		continue;	if ((pid = fork()) < 0) {		error(TRUE, sys_errlist[errno], 0);		return;	}	if (pid == 0) {		/* child */		i = open("/dev/tty", O_RDWR);		if (i >= 0) {			(void) ioctl(i, TIOCNOTTY, (char *)0);			(void) close(i);		}		Slave = getSlave();		(void) close(Master);		(void) dup2(Slave, 0);		(void) dup2(Slave, 1);		(void) dup2(Slave, 2);		for (i = getdtablesize() - 1; i >= 3; i--)

⌨️ 快捷键说明

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