📄 xfilter.c
字号:
(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 + -