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 + -
显示快捷键?