pod.c

来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 2,398 行 · 第 1/5 页

C
2,398
字号
}/*ARGSUSED*/static void List(w, closure, calldata)     Widget w;     XtPointer closure, calldata;{  int indx;  char string[1024], mess[1024];  dsEnqError status;  Cursor time_cur = XCreateFontCursor(dpy, XC_watch);  Cursor normal_cur = XCreateFontCursor(dpy, XC_left_ptr);  message(outer, "Listing, Please Stand By......");  XFlush(dpy);  XDefineCursor(dpy, XtWindow(outer), time_cur);  XFlush(dpy);  status = list_start();  XDefineCursor(dpy, XtWindow(outer), normal_cur);  XFlush(dpy);  kill_message();  make_friendly(friendly_base_path, base_path);  switch(status) {  case listsizelimit:  case adminlimit_w_partial:  case timelimit_w_partial:    (void) strcpy(mess, "Results of list under ");    if (strlen(base_path) > 3) {      indx = 0;      while (friendly_base_path[indx] != ',' && 	     friendly_base_path[indx] != '\0') indx++;      friendly_base_path[indx] = '\0';      (void) strcat(mess, (char *) friendly_base_path);    } else      (void) strcat(mess, "The World");    switch (status) {    case listsizelimit:      (void) sprintf(string, 		      "List size limit exceeded. Only %d items displayed.", 		      entry_number);       break;    case adminlimit_w_partial:      (void) sprintf(string,		     "%s. %s. %d %s.",		     "Administrative limit reached",		     "Partial results only",		     entry_number,		     "items displayed");      break;    case timelimit_w_partial:            (void) sprintf (string,			    "%s. %s. %d %s.",			    "Time limit reached",			    "Partial results only",			    entry_number,			    "items displayed");      break;    }    createList(dnseq, mess, string);    dnseq = 0;    break;  case Okay:    (void) strcpy(mess, "Results of list under ");    if (strlen(base_path) > 3) {      indx = 0;      while (friendly_base_path[indx] != ',' && 	     friendly_base_path[indx] != '\0') indx++;      friendly_base_path[indx] = '\0';      (void) strcat(mess, (char *) friendly_base_path);    } else      (void) strcat(mess, "The World");    createList(dnseq, mess, "");    dnseq = 0;    break;  default:    dnseq = 0;    entry_number = 0;    doError(status);  }}/*ARGSUSED*/static void ListSelect(w, object, calldata)     Widget w;     XtPointer object, calldata;{  char *entry_name, parent[STRINGLEN];  entry_name = (char *) object;    (void) strcpy(parent, base_path);  (void) strcpy(base_path, entry_name);  make_friendly(friendly_base_path, base_path);  if (!is_dit_leaf(entry_name)) {    if (read_all_flag == TRUE) {      Read((Widget) 0, (XtPointer) 0, (XtPointer) 0);    }       Move((Widget) 0, (XtPointer) entry_name, (XtPointer) 0);  } else {    Read((Widget) 0, (XtPointer) 0, (XtPointer) 0);    (void) strcpy(base_path, parent);  }}/*ARGSUSED*/static void ListSelectMove(w, event, params, num_params)     Widget w;     XEvent *event;     String *params;     Cardinal num_params;{  char temp_path[STRINGLEN];  Widget search_area = XtNameToWidget(outer, 				      "PosForm.PosScrolledWindow.PosWindow");  (void) strcpy(temp_path, base_path);  (void) strcpy(base_path, params[0]);  if (!is_dit_leaf(base_path)) {    goto_addr();    set_search_area(search_area);    SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);    XFlush(dpy);  } else {    (void) strcpy(base_path, temp_path);    displayError(outer,		 "Cannot move to a leaf entry!\n\Click on this window to continue");  }}/*ARGSUSED*/static void ListSelectList(w, event, params, num_params)     Widget w;     XEvent *event;     String *params;     Cardinal num_params;{  Widget search_area = XtNameToWidget(outer, 				      "PosForm.PosScrolledWindow.PosWindow");  char temp_path[STRINGLEN];  (void) strcpy(temp_path, base_path);  (void) strcpy(base_path, params[0]);  if (!is_dit_leaf(base_path)) {    List((Widget) 0, (XtPointer) 0, (XtPointer) 0);        goto_addr();    set_search_area(search_area);    SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);    XFlush(dpy);  } else {    (void) strcpy(base_path, temp_path);    displayError(outer, 		 "Cannot list under this entry!\n\Click on this window to continue");  }}/*ARGSUSED*/static void DnList(w, event, params, num_params)     Widget w;     XEvent *event;     String *params;     Cardinal num_params;{  Widget search_area = XtNameToWidget(outer, 				      "PosForm.PosScrolledWindow.PosWindow");  register char *end = base_path;  int rdnlevel = atoi(params[0]);  if (rdnlevel == 0) *base_path = '\0';  else if (rdn_number > (int) (rdnlevel+1)) {    while (rdnlevel) {      while (*end != '@') end++;      if (*end == '@') end++;      rdnlevel--;    }    *--end = '\0';  }   List((Widget) 0, (XtPointer) 0, (XtPointer) 0);  goto_addr();  set_search_area(search_area);  SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);  XFlush(dpy);}/*ARGSUSED*/static void DnMove(w, event, params, num_params)     Widget w;     XEvent *event;     String *params;     Cardinal num_params;{  register char *end;  Widget search_area = XtNameToWidget(outer, 				      "PosForm.PosScrolledWindow.PosWindow");  int rdnlevel = atoi(params[0]);  end = base_path;  if (rdnlevel == 0) *base_path = '\0';  else if (rdn_number > (int) (rdnlevel+1)) {    while (rdnlevel) {      while (*end != '@') end++;      if (*end == '@') end++;      rdnlevel--;    }    *--end = '\0';  }   goto_addr();  set_search_area(search_area);  SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);  XFlush(dpy);}  /*ARGSUSED*/static void DnMoveRead(w, rdnlevel, calldata)     Widget w;     XtPointer rdnlevel, calldata;{  Widget search_area;  char *end;  dsEnqError status;  search_area = XtNameToWidget(outer, "PosForm.PosScrolledWindow.PosWindow");  end = base_path;  if (rdnlevel == 0) *base_path = '\0';  else if (rdn_number > (int) (rdnlevel+1)) {    while (rdnlevel) {      while (*end != '@') end++;      if (*end == '@') end++;      rdnlevel--;    }    *--end = '\0';  }   goto_addr();  set_search_area(search_area);  SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);  XFlush(dpy);  if (read_all_flag == TRUE) {    if (curr_read_popup == 0) curr_read_popup = createReadPopup();    status = read_config_types();        if (status != Okay)      doError(status);    else {      displayReadPopup();    }  }}/*ARGSUSED*/static void Move(w, closure, calldata)     Widget w;     XtPointer closure, calldata;{  Widget search_area;  char *new_base;  search_area = XtNameToWidget(outer, "PosForm.PosScrolledWindow.PosWindow");    new_base = (char *) closure;  (void) strcpy(base_path, new_base);  make_friendly(friendly_base_path, new_base);  set_search_area(search_area);  goto_addr();  SetType((Widget) 0, (XtPointer) typeindx, (XtPointer) 0);}static void CreateMessagePopup(){  int count;  Arg args[MAXARGS];  count = 0;  standby = XtCreatePopupShell("POD: Working.",  			       transientShellWidgetClass,			       toplevel, args, count);  count = 0;  XtSetArg(args[count], XtNresize, FALSE); count++;  (void) XtCreateManagedWidget("standby", labelWidgetClass,			       standby, args, count);  XtRealizeWidget(standby);}static void CreateVersionPopup(){  Widget title, piccy, version_label, text_form;  Arg args[MAXARGS];  int count;  /* Have to hard to code the version number in! */  char *version = "Version 2.4 29th May 1991",       *title_string = "Pod - POpup Directory",       *author_string = "by\n\Andrew Findlay, Damanjit Mahl, Stefan Nahajski\n\Brunel University";    count = 0;  version_popup = XtCreatePopupShell("About Pod", transientShellWidgetClass,				     toplevel, args, count);    count = 0;  text_form = XtCreateManagedWidget("verForm", formWidgetClass,				    version_popup, args, count);  count = 0;  XtSetArg(args[count], XtNlabel, title_string); count++;  XtSetArg(args[count], XtNresizable, TRUE); count++;  title = XtCreateManagedWidget("verTitle", labelWidgetClass,				text_form, args, count);  count = 0;  XtSetArg(args[count], XtNlabel, version); count++;  XtSetArg(args[count], XtNfromVert, title); count++;  XtSetArg(args[count], XtNresizable, TRUE); count++;  version_label = XtCreateManagedWidget("verLabel", labelWidgetClass,					text_form, args, count);  count = 0;  XtSetArg(args[count], XtNlabel, ""); count++;  XtSetArg(args[count], XtNfromVert, version_label); count++;  XtSetArg(args[count], XtNwidth, work_width); count++;  XtSetArg(args[count], XtNheight, work_height); count++;  XtSetArg(args[count], XtNresizable, TRUE); count++;  piccy = XtCreateManagedWidget("teamPic", labelWidgetClass,				text_form, args, count);  count = 0;  XtSetArg(args[count], XtNlabel, author_string); count++;  XtSetArg(args[count], XtNfromVert, piccy); count++;  XtSetArg(args[count], XtNresizable, TRUE); count++;  (void) XtCreateManagedWidget("authLabel", labelWidgetClass,			       text_form, args, count);  XtRealizeWidget(version_popup);  CreateBackgroundPixmap(piccy, work_bits, work_width, work_height);}/* ARGSUSED */static void ShowVersion(w, closure, calldata)     Widget w;     XtPointer closure, calldata;{  Widget title, authors, version_label, text_form, piccy;  Position x, y;  Dimension width, label_width;  Arg args[MAXARGS];  int count;    text_form = XtNameToWidget(version_popup, "verForm");  title = XtNameToWidget(text_form, "verTitle");  authors = XtNameToWidget(text_form, "authLabel");  version_label = XtNameToWidget(text_form, "verLabel");  piccy = XtNameToWidget(text_form, "teamPic");  PopupMessage(version_popup, w, text_form, (String) NULL, XtGrabNone);  count = 0;  XtSetArg(args[count], XtNwidth, &width); count++;  XtGetValues(text_form, args, count);  count = 0;  XtSetArg(args[count], XtNwidth, &label_width); count++;  XtSetArg(args[count], XtNy, &y); count++;  XtGetValues(authors, args, count);  x = (Position) ((width - label_width) /2);  XtMoveWidget(authors, x, y);  count = 0;  XtSetArg(args[count], XtNwidth, &label_width); count++;  XtSetArg(args[count], XtNy, &y); count++;  XtGetValues(title, args, count);    x = (Position) ((width - label_width) /2);  XtMoveWidget(title, x, y);  count = 0;  XtSetArg(args[count], XtNwidth, &label_width); count++;  XtSetArg(args[count], XtNy, &y); count++;  XtGetValues(piccy, args, count);    x = (Position) ((width - label_width) /2);  XtMoveWidget(piccy, x, y);  count = 0;  XtSetArg(args[count], XtNwidth, &label_width); count++;  XtSetArg(args[count], XtNy, &y); count++;  XtGetValues(version_label, args, count);    x = (Position) ((width - label_width) /2);  XtMoveWidget(version_label, x, y);  XRaiseWindow(dpy, XtWindow(version_popup));}/* ARGSUSED */static void HideVersion(w, event, params, num_params)     Widget w;     XEvent *event;     String *params;     Cardinal num_params;{  XtPopdown(version_popup);}static void CreateErrorPopup(){  Widget text;  int count;  Arg args[MAXARGS];  count = 0;  error_popup = XtCreatePopupShell("POD: <Directory Error>", 				   transientShellWidgetClass,				   toplevel, args, count);  count = 0;  XtSetArg(args[count], XtNresize, FALSE); count++;  text = XtCreateManagedWidget("error_popup", commandWidgetClass,			       error_popup, args, count);  XtAddCallback(text, XtNcallback, killError, (XtPointer) 0);  XtRealizeWidget(error_popup);}static void doError(status)     dsEnqError status;{  char show_message[STRINGLEN];  entry_number = 0;  switch(status) {  case timelimit:    displayError      (outer,       "Time limit reached.\nClick on this window to continue");    break;  case adminlimit:    displayError      (outer,        "Administrative limit reached.\nClick on this window to continue");    break;  case nothingfound:    dnseq = 0;    displayError      (outer, "Nothing found!\nClick on this window to continue");    break;  case localdsaerror:    dnseq = 0;    displayError      (outer,    "Problem with remote directory server.\nClick on this window to continue");    break;  case remotedsaerror:    dnseq = 0;    displayError      (outer, 

⌨️ 快捷键说明

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