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

📄 xfilter.c

📁 `smith.motif.tar.Z includes the source code for the book "Designing X clients with Xt/Motif," by Je
💻 C
📖 第 1 页 / 共 2 页
字号:
			(XtPointer) xfilter_FILE, NULL, NULL},		{menu_END, NULL, NULL, NULL, NULL, NULL, NULL},	};	Arg args[10];	int i;	Widget mainWindow, menuBar, optionFrame, optionBox,		textFrame, textWindow, inputMenu, outputMenu,		filterButton, inputOption, outputOption,		filterFrame, filterBox, filterLabel;	i = 0;	XtSetArg(args[i], XmNhorizontalSpacing, (XtArgVal) 5); i++;	XtSetArg(args[i], XmNverticalSpacing, (XtArgVal) 5); i++;	mainWindow = XtCreateManagedWidget("mainWindow",		xmFormWidgetClass, topLevel, args, i);	menuBar = create_menu_bar(mainWindow);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNtopWidget, (XtArgVal) menuBar); i++;	optionFrame = XtCreateManagedWidget("optionFrame",		xmFrameWidgetClass, mainWindow, args, i);	i = 0;	XtSetArg(args[i], XmNmarginWidth, (XtArgVal) 5); i++;	XtSetArg(args[i], XmNorientation, (XtArgVal) XmHORIZONTAL); i++;	optionBox = XtCreateManagedWidget("optionBox",		xmRowColumnWidgetClass, optionFrame, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNtopWidget, (XtArgVal) optionFrame); i++;	filterFrame = XtCreateManagedWidget("filterFrame",		xmFrameWidgetClass, mainWindow, args, i);	i = 0;	XtSetArg(args[i], XmNmarginWidth, (XtArgVal) 5); i++;	XtSetArg(args[i], XmNmarginHeight, (XtArgVal) 5); i++;	filterBox = XtCreateManagedWidget("filterBox",		xmFormWidgetClass, filterFrame, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNbottomAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNlabelString,		XmStringCreateLtoR("Filter", char_set)); i++;	filterButton = XtCreateManagedWidget("filterButton",		xmPushButtonWidgetClass, filterBox, args, i);	XtAddCallback(filterButton, XmNactivateCallback, Filter, NULL);		i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNbottomAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNleftWidget, (XtArgVal) filterButton); i++;	XtSetArg(args[i], XmNlabelString,		XmStringCreateLtoR(" Filter: ", char_set)); i++;	filterLabel = XtCreateManagedWidget("filterLabel",		xmLabelWidgetClass, filterBox, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNbottomAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNleftWidget, (XtArgVal) filterLabel); i++;	filterText = XtCreateManagedWidget("filterText",		xmTextWidgetClass, filterBox, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNtopWidget, (XtArgVal) filterFrame); i++;	XtSetArg(args[i], XmNbottomAttachment, (XtArgVal) XmATTACH_FORM); i++;	textFrame = XtCreateManagedWidget("textFrame",		xmFrameWidgetClass, mainWindow, args, i);	i = 0;	textWindow = XtCreateManagedWidget("textWindow",		xmScrolledWindowWidgetClass, textFrame, args, i);	i = 0;	XtSetArg(args[i], XmNeditMode, (XtArgVal) XmMULTI_LINE_EDIT); i++;	XtSetArg(args[i], XmNautoShowCursorPosition, (XtArgVal) True); i++;	XtSetArg(args[i], XmNscrollHorizontal, (XtArgVal) True); i++;	XtSetArg(args[i], XmNscrollVertical, (XtArgVal) True); i++;	textWindowText = XtCreateManagedWidget("textWindowText",		xmTextWidgetClass, textWindow, args, i);	inputMenu = XmCreatePulldownMenu(optionBox, "inputMenu", NULL, 0);	create_menus(inputMenu, input_menu, char_set);	i = 0;	XtSetArg(args[i], XmNmarginWidth, (XtArgVal) 0); i++;	XtSetArg(args[i], XmNlabelString,		XmStringCreateLtoR("Input:", char_set)); i++;	XtSetArg(args[i], XmNsubMenuId, inputMenu); i++;	XtSetArg(args[i], XmNmenuHistory, input_menu[0].id); i++;	inputOption = XmCreateOptionMenu(optionBox, "inputOption", args, i);	XtManageChild(inputOption);	outputMenu = XmCreatePulldownMenu(optionBox, "outputMenu", NULL, 0);	create_menus(outputMenu, output_menu, char_set);	i = 0;	XtSetArg(args[i], XmNlabelString,		XmStringCreateLtoR("Output:", char_set)); i++;	XtSetArg(args[i], XmNsubMenuId, outputMenu); i++;	XtSetArg(args[i], XmNmenuHistory, output_menu[2].id); i++;	outputOption = XmCreateOptionMenu(optionBox, "outputOption", args, i);	XtManageChild(outputOption);}	/* create_main_window *//*create_menu_bar() creates the application-level menu bar,including pull-down menus and menu entries.*/static Widget create_menu_bar(parent)Widget parent;{	static menu_entry file_menu[] = {		{menu_ENTRY, "Set File(s)...", "menuSetFileButton", SetFile,			NULL, NULL, NULL},		{menu_ENTRY, "Dismiss", "menuExitButton", Dismiss,			NULL, NULL, NULL},		{menu_END, NULL, NULL, NULL, NULL, NULL, NULL},	};	static menu_entry menus[] = {		{menu_SUBMENU, "File", "menuFileButton", NULL, NULL, file_menu, NULL},		{menu_END, NULL, NULL, NULL, NULL, NULL, NULL},	};	static menu_entry help_menu[] = {		{menu_ENTRY, "General...", "menuGenHelpButton",			Help, (XtPointer) 0, NULL, NULL},		{menu_ENTRY, "Files...", "menuFileHelpButton",			Help, (XtPointer) 1, NULL, NULL},		{menu_ENTRY, "Info...", "menuInfoHelpButton",			Help, (XtPointer) 2, NULL, NULL},		{menu_END, NULL, NULL, NULL, NULL, NULL, NULL},	};	Arg args[10];	int i;	Widget menuBar;	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	menuBar = XmCreateMenuBar(parent, "menuBar", args, i);	XtManageChild(menuBar);	create_menus(menuBar, menus, char_set);	help_create_pulldown_menu(menuBar, help_menu, xfilter_help_data, char_set);	return menuBar;}	/* create_menu_bar *//*create_dialogs() creates the dialog box used for settingfilenames for the input and output file options, and theuser-message dialog box.*/static void create_dialogs(){	Arg args[10];	int i;	Dimension height, margin_height;	Widget filePane, fileBox, fileLabel, fileInputLabel, fileOutputLabel,		fileInputBox, fileOutputBox, fileCommandBox, fileDismissButton;	i = 0;	XtSetArg(args[i], XmNallowShellResize, (XtArgVal) True); i++;	XtSetArg(args[i], XmNmappedWhenManaged, (XtArgVal) False); i++;	fileShell = XtCreatePopupShell("fileShell", topLevelShellWidgetClass,		topLevel, args, i);/*	fileShell = XtAppCreateShell(NULL, xfilter_APP_CLASS,		topLevelShellWidgetClass, XtDisplay(topLevel), args, i);*/	i = 0;	XtSetArg(args[i], XmNsashWidth, (XtArgVal) 1); i++;	XtSetArg(args[i], XmNsashHeight, (XtArgVal) 1); i++;	filePane = XtCreateManagedWidget("filePane",		xmPanedWindowWidgetClass, fileShell, args, i);	i = 0;	XtSetArg(args[i], XmNhorizontalSpacing, (XtArgVal) 5); i++;	XtSetArg(args[i], XmNverticalSpacing, (XtArgVal) 5); i++;	fileBox = XtCreateManagedWidget("fileBox",		xmFormWidgetClass, filePane, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNlabelString,		XmStringCreateLtoR("Set filenames for file input/output options:",			char_set)); i++;	XtSetArg(args[i], XmNalignment, (XtArgVal) XmALIGNMENT_CENTER); i++;	fileLabel = XtCreateManagedWidget("fileLabel",		xmLabelWidgetClass, fileBox, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNtopWidget, (XtArgVal) fileLabel); i++;	fileInputBox = XtCreateManagedWidget("fileInputBox",		xmFormWidgetClass, fileBox, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNtopWidget, (XtArgVal) fileInputBox); i++;	fileOutputBox = XtCreateManagedWidget("fileOutputBox",		xmFormWidgetClass, fileBox, args, i);	i = 0;	XtSetArg(args[i], XmNborderWidth, (XtArgVal) 0); i++;	XtSetArg(args[i], XmNorientation, (XtArgVal) XmHORIZONTAL); i++;	fileCommandBox = XtCreateManagedWidget("fileCommandBox",		xmRowColumnWidgetClass, filePane, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNbottomAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNlabelString,		XmStringCreateLtoR("Input:  ", char_set)); i++;	fileInputLabel = XtCreateManagedWidget("fileInputLabel",		xmLabelWidgetClass, fileInputBox, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNbottomAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNleftWidget, (XtArgVal) fileInputLabel); i++;	fileInputText = XtCreateManagedWidget("fileInputText",		xmTextWidgetClass, fileInputBox, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNbottomAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNlabelString,		XmStringCreateLtoR("Output: ", char_set)); i++;	fileOutputLabel = XtCreateManagedWidget("fileOutputLabel",		xmLabelWidgetClass, fileOutputBox, args, i);	i = 0;	XtSetArg(args[i], XmNleftAttachment, (XtArgVal) XmATTACH_WIDGET); i++;	XtSetArg(args[i], XmNrightAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNtopAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNbottomAttachment, (XtArgVal) XmATTACH_FORM); i++;	XtSetArg(args[i], XmNleftWidget, (XtArgVal) fileOutputLabel); i++;	fileOutputText = XtCreateManagedWidget("fileOutputText",		xmTextWidgetClass, fileOutputBox, args, i);	i = 0;	XtSetArg(args[i], XmNlabelString,		XmStringCreateLtoR("Dismiss", char_set)); i++;	XtSetArg(args[i], XmNmarginWidth, (XtArgVal) 0); i++;	fileDismissButton = XtCreateManagedWidget("fileDismissButton",		xmPushButtonWidgetClass, fileCommandBox, args, i);	XtAddCallback(fileDismissButton,		XmNactivateCallback, FileDismiss, NULL);	i = 0;	XtSetArg(args[i], XmNmarginHeight, &margin_height); i++;	XtGetValues(fileCommandBox, args, i);	i = 0;	XtSetArg(args[i], XmNheight, &height); i++;	XtGetValues(fileDismissButton, args, i);	i = 0;	XtSetArg(args[i], XmNpaneMinimum,		(XtArgVal) (height + (margin_height * 2))); i++;	XtSetArg(args[i], XmNpaneMaximum,		(XtArgVal) (height + (margin_height * 2))); i++;	XtSetValues(fileCommandBox, args, i);	remove_sash_traversal(filePane);	i = 0;	XtSetArg(args[i], XmNdialogTitle,		XmStringCreateLtoR("xfilter", char_set)); i++;	XtSetArg(args[i], XmNokLabelString,		XmStringCreateLtoR("  OK  ", char_set)); i++;	messageDialog = (Widget) XmCreateInformationDialog(topLevel,		"messageDialog", args, i);	XtUnmanageChild((Widget) XmMessageBoxGetChild(messageDialog,		XmDIALOG_CANCEL_BUTTON));	XtUnmanageChild((Widget) XmMessageBoxGetChild(messageDialog,		XmDIALOG_HELP_BUTTON));	i = 0;	XtSetArg(args[i], XmNdialogTitle,		XmStringCreateLtoR("xfilter", char_set)); i++;	XtSetArg(args[i], XmNmessageString,		XmStringCreateLtoR("File already exists!", char_set)); i++;	XtSetArg(args[i], XmNokLabelString,		XmStringCreateLtoR("Overwrite File", char_set)); i++;	overwriteDialog = (Widget) XmCreateQuestionDialog(topLevel,		"overwriteDialog", args, i);	XtUnmanageChild((Widget) XmMessageBoxGetChild(overwriteDialog,		XmDIALOG_HELP_BUTTON));	XtAddCallback(overwriteDialog, XmNokCallback,		OverwriteOK, NULL);	XtAddCallback(overwriteDialog, XmNcancelCallback,		OverwriteCancel, NULL);}	/* create_dialogs *//*print_help_info() prints a short message about how `xfilter' works.*/static void print_help_info(){	printf("\nusage:  xfilter\n\\n\`xfilter' applies a UNIX filter, as specified in the text\n\entry area labeled \"Filter:\", (with or without options)\n\to common X data storage locations.  It uses the specified\n\input and output devices/locations as analogs to standard\n\input and standard output files in a command line execution\n\of the filter.  If no filter is specified, pressing the\n\\"Filter\" button simply copies the input to the output.\n\For example, setting \"Input:\" to \"Primary selection\",\n\\"Output:\" to \"Text window\", and \"Filter:\" to \"spell\", will\n\apply spell(1) to the selected text, reporting questionable\n\word spellings in `xfilter's scrollable text window.\n\");}	/* print_help_info *//*initialize_shell_icons() sets the icon(s).*/static void initialize_shell_icons(){#include "xfilter.icon"	Arg args[1];	icon_pixmap = XCreateBitmapFromData(XtDisplay(topLevel),		RootWindowOfScreen(XtScreen(topLevel)), xfilter_bits,		xfilter_width, xfilter_height);	XtSetArg(args[0], XtNiconPixmap, (XtArgVal) icon_pixmap);	XtSetValues(topLevel, args, 1);	XtSetValues(help_shell(), args, 1);	XtSetValues(fileShell, args, 1);}	/* initialize_shell_icons *//*dispatch_filter_operation() is a top-level dispatcher thatmakes the appropriate filter request.*/static void dispatch_filter_operation(w)Widget w;{	char *file_spec;	switch (input_type) {		case xfilter_PRIMARY:			filter_primary_selection(w);			break;		case xfilter_CUT_BUFFER:			filter_cut_buffer(w);			break;		case xfilter_XCLIPBOARD:			filter_clipboard_selection(w);			break;		case xfilter_FILE:			file_spec = XmTextGetString(fileInputText);			if (!*file_spec) {				user_message("No input file specified.");				XtFree(file_spec);				break;			}			filter_file(w, file_spec);			XtFree(file_spec);			break;		default:			break;	}}	/* dispatch_filter_operation *//*handle_close_buttons() accommodates the "Close" buttons.  The actionsshould be hard-coded -- the user should not be allowed to override theXmUNMAP default for pop-ups.*/static void handle_close_buttons(){	Atom xfilter_DELETE_WINDOW;	Arg arg;	xfilter_DELETE_WINDOW = XmInternAtom(XtDisplay(topLevel),		"WM_DELETE_WINDOW", False);	XtSetArg(arg, XmNdeleteResponse, (XtArgVal) XmDO_NOTHING);	XtSetValues(topLevel, &arg, 1);	XtSetValues(help_shell(), &arg, 1);	XtSetValues(fileShell, &arg, 1);	XtSetValues(XtParent(messageDialog), &arg, 1);	XtSetValues(XtParent(overwriteDialog), &arg, 1);	XmAddWMProtocolCallback(topLevel, xfilter_DELETE_WINDOW,		Close, NULL);	XmAddWMProtocolCallback(help_shell(), xfilter_DELETE_WINDOW,		UnmapWindow, (caddr_t) help_shell());	XmAddWMProtocolCallback(fileShell, xfilter_DELETE_WINDOW,		UnmapWindow, (caddr_t) fileShell);	XmAddWMProtocolCallback(XtParent(messageDialog), xfilter_DELETE_WINDOW,		UnmanageWindow, (caddr_t) messageDialog);	XmAddWMProtocolCallback(XtParent(overwriteDialog), xfilter_DELETE_WINDOW,		UnmanageWindow, (caddr_t) overwriteDialog);}	/* handle_close_buttons */

⌨️ 快捷键说明

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