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