pod.c
来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 2,398 行 · 第 1/5 页
C
2,398 行
else XtAddCallback(modifyButton, XtNcallback, cannotModify, (XtPointer) NULL); XtAddCallback(modifyButton, XtNdestroyCallback, freeSpace, (XtPointer) object); }}/*ARGSUSED*/static void cannotModify(w, closure, calldata) Widget w; XtPointer closure, calldata;{ displayError(XtParent(XtParent(w)), "Cannot modify this entry!\nClick on this window to continue.");}static XawTextSelectType select_types[] = {XawselectLine, XawselectNull};static Widget createReadPopup(){ Arg args[MAXARGS]; int count = 0; Widget closeButton, keepButton, modifyButton, showAllButton, TextScrolledWindow, AttrWindow, titleView, TextForm, ReadPopup, ReadForm, ButtonForm; ReadPopup = XtCreatePopupShell("Directory Entry", topLevelShellWidgetClass, toplevel, args , 0); /* Top of popup form. */ ReadForm = XtCreateWidget("ReadForm", formWidgetClass, ReadPopup, args, 0); /* Buttons */ ButtonForm = XtCreateManagedWidget("ReadButtonForm", formWidgetClass, ReadForm, args, 0); count = 0; XtSetArg(args[count], XtNheight, Close_height); count++; XtSetArg(args[count], XtNwidth, Close_width); count++; closeButton = XtCreateManagedWidget("closeButton", commandWidgetClass, ButtonForm, args, count); XtAddCallback(closeButton, XtNcallback, readDestroy, (XtPointer) ReadPopup); count = 0; XtSetArg(args[count], XtNheight, Keep_height); count++; XtSetArg(args[count], XtNwidth, Keep_width); count++; keepButton = XtCreateManagedWidget("keepButton", commandWidgetClass, ButtonForm, args, count); XtAddCallback(keepButton, XtNcallback, keepRead, (XtPointer) ReadPopup); count = 0; XtSetArg(args[count], XtNheight, ShowAll_height); count++; XtSetArg(args[count], XtNwidth, ShowAll_width); count++; showAllButton = XtCreateManagedWidget("showAllButton", commandWidgetClass, ButtonForm, args, count); count = 0; XtSetArg(args[count], XtNheight, Modify_height); count++; XtSetArg(args[count], XtNwidth, Modify_width); count++; modifyButton = XtCreateManagedWidget("modifyButton", commandWidgetClass, ButtonForm, args, count); /* End of buttons */ count = 0; XtSetArg(args[count], XtNforceBars, FALSE); count++; XtSetArg(args[count], XtNallowVert, FALSE); count++; XtSetArg(args[count], XtNallowHoriz, TRUE); count++; titleView = XtCreateManagedWidget("titleView", viewportWidgetClass, ReadForm, args, count); count = 0; XtSetArg(args[count], XtNlabel, friendly_base_path); count++; (void) XtCreateManagedWidget("readTitle", commandWidgetClass, titleView, args, count); count = 0; TextScrolledWindow = XtCreateManagedWidget("TextScrolledWindow", viewportWidgetClass, ReadForm, args, count); count = 0; XtSetArg(args[count], XtNborderWidth, 0); count++; TextForm = XtCreateManagedWidget("TextForm", formWidgetClass, TextScrolledWindow, args, count); count = 0; XtSetArg(args[count], XtNresizable, TRUE); count++; XtSetArg(args[count], XtNstring, ""); count++; AttrWindow = XtCreateManagedWidget("AttrWindow", asciiTextWidgetClass, TextForm, args, count); XawTextSetSelectionArray(AttrWindow, select_types); count = 0; XtSetArg(args[count], XtNresizable, TRUE); count++; XtSetArg(args[count], XtNstring, ""); count++; (void) XtCreateManagedWidget("SepWindow", asciiTextWidgetClass, TextForm, args, count); count = 0; XtSetArg(args[count], XtNresizable, TRUE); count++; XtSetArg(args[count], XtNstring, ""); count++; (void) XtCreateManagedWidget("ValWindow", asciiTextWidgetClass, TextForm, args, count); XawFormDoLayout(TextForm, FALSE); /* End of text layout */ XFlush(dpy); XtManageChild(ReadForm); XtRealizeWidget(ReadPopup); CreateBackgroundPixmap(closeButton, Close_bits, Close_width, Close_height); CreateBackgroundPixmap(keepButton, Keep_bits, Keep_width, Keep_height); CreateBackgroundPixmap(showAllButton, ShowAll_bits, ShowAll_width, ShowAll_height); CreateBackgroundPixmap(modifyButton, Modify_bits, Modify_width, Modify_height); if (DefaultDepthOfScreen(screen) == 1) { CreateBackgroundPixmap(ReadForm, gray_bits, gray_width, gray_height); CreateBackgroundPixmap(ButtonForm, gray_bits, gray_width, gray_height); } PhotoWindow = 0; return ReadPopup;}static void AddNewList(list_widget, list_seq, list_size) Widget list_widget; str_seq list_seq; unsigned int list_size;{ Arg args[MAXARGS]; Widget element, scrolwin; int count = 0, n; char name[STRINGLEN], friendly_rdn[STRINGLEN]; char *prev, *object; Dimension width, rwidth; char *trans_start_btn2 = "None <Btn2Up>: set() ListSelectList(", *trans_start_btn3 = "None <Btn3Up>: set() ListSelectMove(", translations[STRINGLEN]; XtTranslations trans_table; scrolwin = (Widget) XtParent(list_widget); count = 0; XtSetArg(args[count], XtNwidth, &width); count++; XtGetValues(scrolwin, args, count); width -= 15; element_number = list_size; *name = '\0'; for (n = 0; n < element_number; n++) { (void) strcat(name, "X"); object = get_from_seq(n+1, list_seq); make_friendly_rdn(friendly_rdn, object, base_path); count = 0; XtSetArg(args[count], XtNlabel, (*friendly_rdn? friendly_rdn: "The World")); count++; XtSetArg(args[count], XtNborderWidth, 0);count++; XtSetArg(args[count], XtNborderColor, WhitePixelOfScreen(screen)); count++; XtSetArg(args[count], XtNhighlightThickness, 1); count++; XtSetArg(args[count], XtNjustify, XtJustifyLeft); count++; if (strlen(name) > 1) { prev = (char *) name + 1; XtSetArg(args[count], XtNfromVert, XtNameToWidget(list_widget, prev)); count++; } element = XtCreateManagedWidget((String) name, commandWidgetClass, list_widget, args, count); XtAddCallback(element, XtNcallback, ListSelect, (XtPointer) object); (void) strcpy(translations, trans_start_btn2); (void) strcat(translations,"\""); (void) strcat(translations, object); (void) strcat(translations,"\""); (void) strcat(translations, ") unset()\n "); (void) strcat(translations, trans_start_btn3); (void) strcat(translations,"\""); (void) strcat(translations, object); (void) strcat(translations,"\""); (void) strcat(translations, ") unset()"); trans_table = XtParseTranslationTable(translations); XtOverrideTranslations(element, trans_table); count = 0; XtSetArg(args[count], XtNwidth, &rwidth); count++; XtGetValues(element, args, count); if (rwidth < width) { count = 0; XtSetArg(args[count], XtNwidth, width); count++; XtSetValues(element, args, count); } }}void readEntryPrint(entry_ptr) char *entry_ptr;{ Widget entry_form = 0; if (curr_read_popup) { entry_form = XtNameToWidget(curr_read_popup, "ReadForm.TextScrolledWindow.TextForm"); entry_print(entry_form, entry_ptr); }}static void entry_print(entry_form, entry_ptr) Widget entry_form; char *entry_ptr;{ Widget attr_list, val_list, sep_list; Arg args[MAXARGS]; int count = 0, attr_count = 0; register char *str_start, *str_end; char save, vals[RESBUF], attrs[RESBUF], seps[RESBUF]; Dimension attr_width = 0, max_attr_width = 0; Dimension val_width = 0, max_val_width = 0; Dimension sep_width; Dimension height; XFontStruct *font; bool do_mail_reverse = FALSE; XawFormDoLayout(entry_form, FALSE); (void) strcpy(vals, ""); (void) strcpy(attrs, ""); (void) strcpy(seps, ""); attr_list = XtNameToWidget(entry_form, "AttrWindow"); val_list = XtNameToWidget(entry_form, "ValWindow"); sep_list = XtNameToWidget(entry_form, "SepWindow"); XawTextDisableRedisplay(attr_list); XawTextDisableRedisplay(val_list); XawTextDisableRedisplay(sep_list); count = 0; XtSetArg(args[count], XtNfont, &font); count++; XtGetValues(attr_list, args, count); str_start = str_end = entry_ptr; while (str_end != NULLCP && *str_end != '\0') { attr_count++; if (*str_end == '\t') { while (isspace(*str_end)) str_end++; str_start = str_end; while (*str_end != '\n' && *str_end != '\0') str_end++; save = *str_end; *str_end = '\0'; (void) strcat(attrs, "\n"); (void) strcat(vals, "\n"); if (do_mail_reverse == TRUE) rfc2greybook(str_start); (void) strcat(vals, str_start); (void) strcat(seps, "\n"); val_width = XTextWidth(font, str_start, strlen(str_start))+ FONTWIDTH(font); if (val_width > max_val_width) max_val_width = val_width; if (save == '\0') str_end--; } else { while (!isspace(*str_end)) str_end++; save = *str_end; *str_end = '\0'; (void) strcat(attrs, "\n"); if (mailformat == greybook && !lexequ(str_start, "rfc822Mailbox")) { do_mail_reverse = TRUE; (void) strcat(attrs, "mailbox"); } else { do_mail_reverse = FALSE; (void) strcat(attrs, str_start); } attr_width = XTextWidth(font, str_start, strlen(str_start)) + FONTWIDTH(font); if (attr_width > max_attr_width) max_attr_width = attr_width; *str_end = save; while (*str_end != '-') str_end++; str_end++; while (isspace(*str_end)) str_end++; str_start = str_end; while (*str_end != '\n' && *str_end != '\0') str_end++; save = *str_end; *str_end = '\0'; (void) strcat(seps, "-\n"); (void) strcat(vals, "\n"); if (do_mail_reverse == TRUE) rfc2greybook(str_start); (void) strcat(vals, str_start); val_width = XTextWidth(font, str_start, strlen(str_start)) + FONTWIDTH(font); if (val_width > max_val_width) max_val_width = val_width; if (save == '\0') str_end--; } str_start = ++str_end; } max_attr_width += FONTWIDTH(font); max_val_width += FONTWIDTH(font); height = ++attr_count * FONTHEIGHT(font); sep_width = FONTWIDTH(font); if (entry_ptr == NULLCP) { (void) strcpy (attrs, "No Attributes found!"); max_attr_width = XTextWidth(font, attrs, strlen(attrs)) + FONTWIDTH(font); } count = 0; XtSetArg(args[count], XtNstring, (attrs+1)); count++; XtSetArg(args[count], XtNwidth, max_attr_width); count++; XtSetArg(args[count], XtNheight, height); count++; XtSetValues(attr_list, args, count); count = 0; XtSetArg(args[count], XtNstring, (vals+1)); count++; XtSetArg(args[count], XtNwidth, max_val_width); count++; XtSetArg(args[count], XtNheight, height); count++; XtSetValues(val_list, args, count); count = 0; XtSetArg(args[count], XtNstring, seps); count++; XtSetArg(args[count], XtNwidth, sep_width); count++; XtSetArg(args[count], XtNheight, height); count++; XtSetValues(sep_list, args, count); XawTextEnableRedisplay(attr_list); XawTextEnableRedisplay(val_list); XawTextEnableRedisplay(sep_list); if (PhotoWindow != NULL && photo_on == TRUE) { XtRealizeWidget(PhotoWindow); print_photo(); } XawFormDoLayout(entry_form, TRUE);}/*ARGSUSED*/static void Quit(widget, closure, callData) Widget widget; XtPointer closure, callData;{ XtUnmapWidget(toplevel); XtDestroyWidget(toplevel); quit(0);}/*ARGSUSED*/static void TSearch(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal num_params;{ StartSearch((Widget) 0, (XtPointer) 0, (XtPointer) 0);}/*ARGSUSED*/static void ClearSearchArea(w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal num_params;{ Arg args[MAXARGS]; int count= 0; XtSetArg(args[count], XtNstring, "\0"); count++; XtSetValues(w, args, count);}/*ARGSUSED*/static void ReadAll(w, closure, calldata) Widget w; XtPointer closure, calldata;{ dsEnqError status; Widget temp_read_popup; char current_path[STRINGLEN]; char *object = (char *) closure; (void) strcpy(current_path, base_path); (void) strcpy(base_path, object); temp_read_popup = curr_read_popup; curr_read_popup = XtParent(XtParent(XtParent(w))); status = read_all(); if (status != Okay) doError(status); else displayReadPopup(); (void) strcpy(base_path, current_path); curr_read_popup = temp_read_popup;}/*ARGSUSED*/static void Read(w, data, calldata) Widget w; XtPointer data, calldata;{ dsEnqError status; if (curr_read_popup == 0) curr_read_popup = createReadPopup(); XFlush(dpy); status = read_config_types(); if (status != Okay) doError(status); else displayReadPopup();}set_search_area(search_area) Widget search_area;{ WidgetList wlist; char name[STRINGLEN]; int count = 0, n; wlist = (WidgetList) XtMalloc((rdn_number + 1) * sizeof(Widget)); name[0] = '\0'; for (n = 0; n < rdn_number; n++) { (void) strcat(name, "x"); wlist[n] = XtNameToWidget(search_area, name); count++; } XtUnmanageChildren(wlist, count); for (n = 0; n < count; n++) XtDestroyWidget(wlist[n]); XtFree(wlist); print_search_area(search_area);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?