home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 1992-08-18 | 28.7 KB | 1,223 lines
Path: sparky!uunet!usc!elroy.jpl.nasa.gov!swrinde!mips!msi!dcmartin From: Mike.Sullivan@EBay.Sun.COM (Mike Sullivan {AKA Simon BarSinister}) Newsgroups: comp.sources.x Subject: v18i094: Ftptool 4.3 (XVIEW), Part12/12 Message-ID: <1992Aug18.153829.29201@msi.com> Date: 18 Aug 92 15:38:29 GMT References: <csx-18i083-ftptool-4.3@uunet.UU.NET> Sender: dcmartin@msi.com (David C. Martin - Moderator) Organization: Molecular Simulations, Inc. Lines: 1209 Approved: dcmartin@msi.com Originator: dcmartin@fascet Submitted-by: Mike.Sullivan@EBay.Sun.COM (Mike Sullivan {AKA Simon BarSinister}) Posting-number: Volume 18, Issue 94 Archive-name: ftptool-4.3/part12 #!/bin/sh # this is part.12 (part 12 of a multipart archive) # do not concatenate these parts, unpack them in order with /bin/sh # file button_funcs.c continued # if test ! -r _shar_seq_.tmp; then echo 'Please unpack part 1 first!' exit 1 fi (read Scheck if test "$Scheck" != 12; then echo Please unpack part "$Scheck" next! exit 1 else exit 0 fi ) < _shar_seq_.tmp || exit 1 if test ! -f _shar_wnt_.tmp; then echo 'x - still skipping button_funcs.c' else echo 'x - continuing file button_funcs.c' sed 's/^X//' << 'SHAR_EOF' >> 'button_funcs.c' && X NULL); X xv_set(tool_property_window.directory_lists.cache, X PANEL_VALUE, dircache_size, X NULL); X xv_set(tool_property_window.directory_lists.remote_sort, X PANEL_VALUE, remote_sort_mode, X NULL); X xv_set(tool_property_window.directory_lists.remote_sortdir, X PANEL_VALUE, remote_sort_direction, X NULL); X xv_set(tool_property_window.directory_lists.remote_dotfiles, X PANEL_VALUE, remote_showdotfiles, X NULL); X xv_set(tool_property_window.directory_lists.remote_group, X PANEL_VALUE, group_remote_files, X NULL); X set_remote_sort_order(remote_sort_direction); X xv_set(tool_property_window.directory_lists.local_sort, X PANEL_VALUE, local_sort_mode, X NULL); X xv_set(tool_property_window.directory_lists.local_sortdir, X PANEL_VALUE, local_sort_direction, X NULL); X set_local_sort_order(local_sort_direction); X xv_set(tool_property_window.directory_lists.local_dotfiles, X PANEL_VALUE, local_showdotfiles, X NULL); X xv_set(tool_property_window.directory_lists.local_group, X PANEL_VALUE, group_local_files, X NULL); } X #ifdef USE_PROTOTYPES void viewers_props_reset_proc(void) #else void viewers_props_reset_proc() #endif { X xv_set(tool_property_window.viewers.viewer, X PANEL_VALUE, default_viewer, X NULL); X xv_set(tool_property_window.viewers.archive, X PANEL_VALUE, archive_viewer, X NULL); X xv_set(tool_property_window.viewers.postscript, X PANEL_VALUE, postscript_viewer, X NULL); } X char about_message[] = "Ftptool was written by Mike Sullivan in Course Development \n\ X 1. To make it easier for Sun training centers to retrieve\n\ X course material from our server. \n\ X 2. To learn about XView and X (somewhat). \n\ X 3. To make FTP easier to use. \n\ \n\ Ftptool is still under development, so suggestions (and bug reports, of course!) are welcome (although bug reports aren't _quite_ so welcome :-). Send mail to me with the \"Send Mail\" button below.\n\ \n\ Retrieve the HISTORY file in the Tools directory on yavin.ebay (via anonymous FTP) to see what's changed, and what's planned. \n\ \n\ There is now an ftptool-users alias on yavin.ebay.sun.com. I'll notify this alias of new releases. \n\ \n\ Credits:\n\ \n\ This about window is based on code from Larry Wake. Well, it is more like completely his code.\n\ \n\ The code dealing with pseudo-terminals (which I now think I understand) is from UNIX Network Programming by Richard Stevens.\n\ \n\ Many of the features in Ftptool were suggested by members of the internal tstech alias/newsgroup, along with the Internet community. Thanks to everyone!\n\ \n\ Ported to 386 SVR4 by Jerry Whelan <guru@stasi.bradley.edu>. \n\ \n\ Ported to Ultrix by Robert Evans <Robert.Evans@cm.cf.ac.uk>. \n\ " ; X #ifdef USE_PROTOTYPES void about_proc(void) #else void about_proc() #endif { X textsw_reset(about_window.message, 0, 0); X textsw_insert(about_window.message, about_message, X strlen(about_message)); X textsw_normalize_view(about_window.message, 0); X xv_set(about_window.frame, XV_SHOW, TRUE, NULL); } X char *sort_dir_strings[] = { X "Alphabetical", "Reverse Alphabetical", X "Least Recently Changed", "Most Recently Changed", X "Smallest First", "Largest First", }; X #ifdef USE_PROTOTYPES void remote_sort_choice_proc(void) #else void remote_sort_choice_proc() #endif { X int val; X X /* get the new value, and change the strings appropriately */ X X val = xv_get(tool_property_window.directory_lists.remote_sort, X PANEL_VALUE); X set_remote_sort_order(val); X } X #ifdef USE_PROTOTYPES void set_remote_sort_order(int val) #else void set_remote_sort_order(val) int val; #endif { X xv_set(tool_property_window.directory_lists.remote_sortdir, X PANEL_CHOICE_STRINGS, X sort_dir_strings[2 * val], X sort_dir_strings[2 * val + 1], X NULL, X NULL); } X #ifdef USE_PROTOTYPES void local_sort_choice_proc(void) #else void local_sort_choice_proc() #endif { X int val; X X /* get the new value, and change the strings appropriately */ X X val = xv_get(tool_property_window.directory_lists.local_sort, X PANEL_VALUE); X set_local_sort_order(val); X } X #ifdef USE_PROTOTYPES void set_local_sort_order(int val) #else void set_local_sort_order(val) int val; #endif { X xv_set(tool_property_window.directory_lists.local_sortdir, X PANEL_CHOICE_STRINGS, X sort_dir_strings[2 * val], X sort_dir_strings[2 * val + 1], X NULL, X NULL); } X #ifdef USE_PROTOTYPES void about_send_proc(void) #else void about_send_proc() #endif { X xv_set(feedback_window.frame, X XV_SHOW, TRUE, X NULL); } X #define OTHER_ADDRESS 2 #define TO_LEN 64 #define MAILER "/usr/ucb/mail" X #ifdef USE_PROTOTYPES void feedback_address_proc(Panel_item item, unsigned int value, X Event *event) #else void feedback_address_proc(item, value, event) Panel_item item; unsigned int value; Event *event; #endif { X if (value == OTHER_ADDRESS) { X xv_set(feedback_window.other, X XV_SHOW, TRUE, X NULL); X } else { X xv_set(feedback_window.other, X XV_SHOW, FALSE, X NULL); X } X } X X #ifdef USE_PROTOTYPES void feedback_send_proc(Panel_item item, Event *event) #else void feedback_send_proc(item, event) Panel_item item; Event *event; #endif { X FILE *pp; X char addr[TO_LEN + 1], buf[BUFSIZ+1]; X int addr_sel, last_was_NL=0; X Textsw_index cur_pos, next_pos; X char *sigfile; X FILE *sigfp; X int ch; X X static char *fb_cmd = NULL; X X if ((int)xv_get(feedback_window.feedback, TEXTSW_LENGTH) == 0) { X footer_message("No text in message.", (char *)NULL); X xv_set(item, X PANEL_NOTIFY_STATUS, XV_ERROR, X NULL); X return; X } X X addr_sel = (int)xv_get(feedback_window.which, PANEL_VALUE); X if (addr_sel == OTHER_ADDRESS) X strncpy(addr, X (char *)xv_get(feedback_window.other, PANEL_VALUE), TO_LEN); X else X strncpy(addr, (char *)xv_get(feedback_window.which, X PANEL_CHOICE_STRING, addr_sel), TO_LEN); X X if (addr[0] == '\0') { X footer_message("No address specified.", (char *)NULL); X xv_set(item, PANEL_NOTIFY_STATUS, XV_ERROR, NULL); X return; X } X X if (fb_cmd == NULL) X fb_cmd = (char *)malloc((unsigned int)(strlen(MAILER) + TO_LEN + 1)); X X X sprintf(fb_cmd, "%s %s", MAILER, addr); X if ((pp = popen(fb_cmd, "w")) == NULL) { X footer_message("popen error; couldn't send feedback message!"); X xv_set(item, PANEL_NOTIFY_STATUS, XV_ERROR, NULL); X return; X } X X fprintf(pp, "~s %s Comment\n\n", header_name); X X fprintf(pp, "\n"); X X next_pos = 0; X cur_pos = next_pos - BUFSIZ; X while (next_pos == cur_pos + BUFSIZ) { X cur_pos = next_pos; X next_pos = (Textsw_index)xv_get(feedback_window.feedback, X TEXTSW_CONTENTS, cur_pos, buf, BUFSIZ); X if ((next_pos - cur_pos) != 0) { X buf[next_pos - cur_pos] = '\0'; X fprintf(pp, "%s", buf); X last_was_NL = (buf[next_pos-cur_pos-1] == '\n'); X } X } X /* X * Force last char out to be a newline X */ X if (!last_was_NL) X putc('\n', pp); X X sigfile = find_dotfile(".signature"); X if (sigfile) { X sigfp = fopen(sigfile, "r"); X if (sigfp != NULL) { X while ((ch = getc(sigfp)) != EOF) X putc(ch, pp); X fclose(sigfp); X } X free(sigfile); X } X X if(pclose(pp) != 0) { X footer_message("Mail failed -- message not sent!", (char *)NULL); X xv_set(item, PANEL_NOTIFY_STATUS, XV_ERROR, NULL); X return; X } X textsw_reset(feedback_window.feedback, 0, 0); X } X X #ifdef USE_PROTOTYPES void feedback_cancel_proc(void) #else void feedback_cancel_proc() #endif { X textsw_reset(feedback_window.feedback, 0, 0); } X #ifdef USE_PROTOTYPES Panel_setting reject_spaces(Panel_item item, Event *event) #else Panel_setting reject_spaces(item, event) Panel_item item; Event *event; #endif { X switch (event_action(event)) { X case ' ': X case '\t': X return PANEL_NONE; X default: X return (panel_text_notify(item, event)); X } } X #ifdef USE_PROTOTYPES void host_window_choice_proc(Panel_item item, unsigned int value, X Event *event) #else void host_window_choice_proc(item, value, event) Panel_item item; unsigned int value; Event *event; #endif { X if (value == 1) { X xv_set(host_window.advanced.proxy, X XV_SHOW, TRUE, X NULL); X } else { X xv_set(host_window.advanced.proxy, X XV_SHOW, FALSE, X NULL); X } } X #ifdef USE_PROTOTYPES void remote_delete_proc(void) #else void remote_delete_proc() #endif { X int nitems, row; X struct dirlist *tmp; X int mode, dirchanged=0; X char *name = NULL; X X xfer_buttons_inactive(); X if (ping_server()) X goto out; X nitems = xv_get(base_window.list, PANEL_LIST_NROWS); X /* start at 1 to skip '..' */ X for (row = 1; row < nitems; row++) X if (xv_get(base_window.list, PANEL_LIST_SELECTED, row)) { X tmp = (struct dirlist *)xv_get(base_window.list, X PANEL_LIST_CLIENT_DATA, row); X mode = tmp->mode & S_IFMT; X switch(mode) { X case S_IFDIR: X if (delete_remote_dir(tmp->name)) X goto out; X dirchanged++; X remote_list_ndirs--; X break; X case S_IFREG: X if (delete_remote_file(tmp->name, "DELE")) X goto out; X dirchanged++; X remote_list_nfiles--; X break; X case S_IFLNK: X name = linkname(tmp->name); X if (name == NULL) X break; X if (delete_remote_file(name, "DELE")) X goto out; X remote_list_nfiles--; X dirchanged++; X free(name); X name = NULL; X break; X default: X remote_list_nothers--; X footer_message("Ignoring non-file/directory %s.", X tmp->name, (char *)NULL); X log_message("Ignoring non-file.\n"); X break; X } X xv_set(base_window.list, X PANEL_LIST_SELECT, row, FALSE, X NULL); X remote_show_items(); X } X out: X if (name) X free(name); X if (dirchanged) { X which_remote_file = strdup("."); X if (which_remote_file == NULL) { X fprintf(stderr,"Out of memory.\n"); X } else { X dowhat=DOREMOTECDFORCE; X notify_stop(); X } X } X xfer_buttons_active(); X if (timedout) X timeout_disconnect(); X return; } X #ifdef USE_PROTOTYPES void local_delete_proc(void) #else void local_delete_proc() #endif { X int nitems, row; X struct dirlist *tmp; X int mode, dirchanged=0; X char *name = NULL; X X xfer_buttons_inactive(); X nitems = xv_get(local_window.list, PANEL_LIST_NROWS); X /* start at 1 to skip .. */ X for (row = 1; row < nitems; row++) X if (xv_get(local_window.list, PANEL_LIST_SELECTED, row)) { X tmp = (struct dirlist *)xv_get(local_window.list, X PANEL_LIST_CLIENT_DATA, row); X mode = tmp->mode & S_IFMT; X switch(mode) { X case S_IFDIR: X if (delete_local_dir(tmp->name)) X goto out; X local_list_ndirs--; X dirchanged++; X break; X case S_IFREG: X if (delete_local_file(tmp->name, unlink)) X goto out; X dirchanged++; X local_list_nfiles--; X break; X case S_IFLNK: X name = linkname(tmp->name); X if (delete_local_file(name, unlink)) X goto out; X dirchanged++; X local_list_nfiles--; X free(name); X name = NULL; X break; X default: X local_list_nothers--; X local_footer_message("Ignoring non-file/directory %s.", X tmp->name, (char *)NULL); X log_message("Ignoring non-file.\n"); X break; X } X xv_set(local_window.list, X PANEL_LIST_SELECT, row, FALSE, X NULL); X local_show_items(); X } X out: X if (name) X free(name); X if (dirchanged) X change_local_dir(".", 1); X xfer_buttons_active(); X if (timedout) X timeout_disconnect(); X return; } X #ifdef USE_PROTOTYPES void show_load_receive_list_proc(void) #else void show_load_receive_list_proc() #endif { X xv_set(schedule_window.lsbutton, X PANEL_LABEL_STRING, "Load", X PANEL_NOTIFY_PROC, load_receive_list_proc, X NULL); X xv_set(schedule_window.lsframe, X XV_LABEL, "Load Receive Batch List", X XV_SHOW, TRUE, X NULL); } X #ifdef USE_PROTOTYPES void show_save_receive_list_proc(void) #else void show_save_receive_list_proc() #endif { X xv_set(schedule_window.lsbutton, X PANEL_LABEL_STRING, "Save", X PANEL_NOTIFY_PROC, save_receive_list_proc, X NULL); X xv_set(schedule_window.lsframe, X XV_LABEL, "Save Receive Batch List", X XV_SHOW, TRUE, X NULL); } X #ifdef USE_PROTOTYPES void show_load_send_list_proc(void) #else void show_load_send_list_proc() #endif { X xv_set(schedule_window.lsbutton, X PANEL_LABEL_STRING, "Load", X PANEL_NOTIFY_PROC, load_send_list_proc, X NULL); X xv_set(schedule_window.lsframe, X XV_LABEL, "Load Send Batch List", X XV_SHOW, TRUE, X NULL); } X #ifdef USE_PROTOTYPES void show_save_send_list_proc(void) #else void show_save_send_list_proc() #endif { X xv_set(schedule_window.lsbutton, X PANEL_LABEL_STRING, "Save", X PANEL_NOTIFY_PROC, save_send_list_proc, X NULL); X xv_set(schedule_window.lsframe, X XV_LABEL, "Save Send Batch List", X XV_SHOW, TRUE, X NULL); } X #ifdef USE_PROTOTYPES void load_send_list_proc(void) #else void load_send_list_proc() #endif { X char *filename; X X filename = expand_dirname((char *)xv_get(schedule_window.filename, X PANEL_VALUE)); X if (filename == NULL) X return; X X load_batch_list(schedule_window.send_list, filename); X free(filename); } X #ifdef USE_PROTOTYPES void save_send_list_proc(void) #else void save_send_list_proc() #endif { X char *filename; X X filename = expand_dirname((char *)xv_get(schedule_window.filename, X PANEL_VALUE)); X if (filename == NULL) X return; X X save_batch_list(schedule_window.send_list, filename); X free(filename); } X #ifdef USE_PROTOTYPES void load_receive_list_proc(void) #else void load_receive_list_proc() #endif { X char *filename; X X filename = expand_dirname((char *)xv_get(schedule_window.filename, X PANEL_VALUE)); X if (filename == NULL) X return; X X load_batch_list(schedule_window.receive_list, filename); X free(filename); } X #ifdef USE_PROTOTYPES void save_receive_list_proc(void) #else void save_receive_list_proc() #endif { X char *filename; X X filename = expand_dirname((char *)xv_get(schedule_window.filename, X PANEL_VALUE)); X if (filename == NULL) X return; X X save_batch_list(schedule_window.receive_list, filename); X free(filename); } X #ifdef USE_PROTOTYPES void add_batch_send_proc(void) #else void add_batch_send_proc() #endif { X struct dirlist *tmp; X int nitems, row; X int mode; X char *name; X X nitems = xv_get(local_window.list, PANEL_LIST_NROWS); X /* ignore '..' */ X for (row = 1; row < nitems; row++) { X if (xv_get(local_window.list, PANEL_LIST_SELECTED, row) == FALSE) X continue; X tmp = (struct dirlist *)xv_get(local_window.list, X PANEL_LIST_CLIENT_DATA, row); X mode = tmp->mode & S_IFMT; X if (non_unix) X mode = S_IFREG; X switch(mode) { X case S_IFDIR: X add_batchname(schedule_window.send_list, tmp->name, tmp->mode, X tmp->size, local_dircache.first->name); X local_list_ndirs--; X break; X case S_IFREG: X add_batchname(schedule_window.send_list, tmp->name, tmp->mode, X tmp->size, local_dircache.first->name); X local_list_nfiles--; X break; X case S_IFLNK: X name = linkname(tmp->name); X if (name == NULL) X break; X add_batchname(schedule_window.send_list, name, tmp->mode, X tmp->size, local_dircache.first->name); X local_list_nfiles--; X free(name); X break; X default: X footer_message("Ignoring non-directory/file %s", X tmp->name, (char *)NULL); X local_list_nothers--; X break; X } X xv_set(local_window.list, X PANEL_LIST_SELECT, row, FALSE, X NULL); X local_show_items(); X } X change_local_list_menu(); } X #ifdef USE_PROTOTYPES void add_batch_receive_proc(void) #else void add_batch_receive_proc() #endif { X struct dirlist *tmp; X int nitems, row; X int mode; X char *name; X X nitems = xv_get(base_window.list, PANEL_LIST_NROWS); X /* ignore '..' */ X for (row = 1; row < nitems; row++) { X if (xv_get(base_window.list, PANEL_LIST_SELECTED, row) == FALSE) X continue; X tmp = (struct dirlist *)xv_get(base_window.list, X PANEL_LIST_CLIENT_DATA, row); X mode = tmp->mode & S_IFMT; X if (non_unix) X mode = S_IFREG; X switch(mode) { X case S_IFDIR: X add_batchname(schedule_window.receive_list, tmp->name, tmp->mode, X tmp->size, remote_dircache.first->name); X remote_list_ndirs--; X break; X case S_IFREG: X add_batchname(schedule_window.receive_list, tmp->name, tmp->mode, X tmp->size, remote_dircache.first->name); X remote_list_nfiles--; X break; X case S_IFLNK: X name = linkname(tmp->name); X if (name == NULL) X break; X add_batchname(schedule_window.receive_list, name, tmp->mode, X tmp->size, remote_dircache.first->name); X remote_list_nfiles--; X free(name); X break; X default: X footer_message("Ignoring non-directory/file %s", X tmp->name, (char *)NULL); X remote_list_nothers--; X break; X } X xv_set(base_window.list, X PANEL_LIST_SELECT, row, FALSE, X NULL); X remote_show_items(); X } X change_remote_list_menu(); } X #ifdef USE_PROTOTYPES void props_inf_check_box(Panel_item item, Event *event) #else void props_inf_check_box(item, event) Panel_item item; Event *event; #endif { X if (xv_get(item, PANEL_VALUE) == 1) { X xv_set(tool_property_window.directory_lists.cache, X PANEL_INACTIVE, TRUE, X NULL); X } else { X xv_set(tool_property_window.directory_lists.cache, X PANEL_INACTIVE, FALSE, X NULL); X } } X #ifdef USE_PROTOTYPES void quit_proc(void) #else void quit_proc() #endif { X destroy_func((Notify_client)NULL, DESTROY_PROCESS_DEATH); X /* should not be connected now */ X if (connected) X return; X dowhat = DOQUIT; X notify_stop(); } X #ifdef USE_PROTOTYPES void switch_category(int value, int show) #else void switch_category(value, show) int value; int show; #endif { X Panel panel; X Panel_item apply; X void (*apply_func)(); X X switch (value) { X default: X fprintf(stderr, "Invalid category in switch_category.\n"); X /* fall through */ X case 0: X panel = tool_property_window.ftptool.panel; X apply = tool_property_window.ftptool.apply; X break; X case 1: X panel = tool_property_window.directory_lists.panel; X apply = tool_property_window.directory_lists.apply; X break; X case 2: X panel = tool_property_window.viewers.panel; X apply = tool_property_window.viewers.apply; X break; X } X if (show == TRUE) { X int width; X X width = xv_get(panel, XV_WIDTH); X X xv_set(tool_property_window.panel, X XV_WIDTH, width, X NULL); X xv_set(panel, X XV_SHOW, TRUE, X NULL); X xv_set(tool_property_window.frame, X XV_WIDTH, width, X XV_HEIGHT, xv_get(panel, XV_HEIGHT) X + xv_get(tool_property_window.panel, XV_HEIGHT), X NULL); X tool_property_window.apply= apply; X } else { X apply_func = (void (*)())xv_get(apply, PANEL_NOTIFY_PROC); X (*apply_func)(); X xv_set(panel, X XV_SHOW, FALSE, X NULL); X } } X #ifdef USE_PROTOTYPES void category_proc(void) #else void category_proc() #endif { X int value; X static int oldvalue = 0; X X value = xv_get(tool_property_window.category, PANEL_VALUE); X X switch_category(oldvalue, FALSE); X switch_category(value, TRUE); X oldvalue = value; } X #ifdef USE_PROTOTYPES void dismiss_local_window(void) #else void dismiss_local_window() #endif { X xv_set(local_window.frame, X XV_SHOW, FALSE, #ifdef XVIEW3 X FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_OUT, #else X FRAME_CMD_PUSHPIN_IN, FALSE, #endif X NULL); } X #ifdef USE_PROTOTYPES void dismiss_host_window(void) #else void dismiss_host_window() #endif { X xv_set(host_window.frame, X XV_SHOW, FALSE, #ifdef XVIEW3 X FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_OUT, #else X FRAME_CMD_PUSHPIN_IN, FALSE, #endif X NULL); } X #ifdef USE_PROTOTYPES void dismiss_about_window(void) #else void dismiss_about_window() #endif { X xv_set(about_window.frame, X XV_SHOW, FALSE, #ifdef XVIEW3 X FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_OUT, #else X FRAME_CMD_PUSHPIN_IN, FALSE, #endif X NULL); } X #ifdef USE_PROTOTYPES void dismiss_file_props_window(Panel_item item, Event *event) #else void dismiss_file_props_window(item, event) Panel_item item; Event *event; #endif { X Frame frame; X X frame = xv_get(item, PANEL_CLIENT_DATA); X xv_set(frame, X XV_SHOW, FALSE, #ifdef XVIEW3 X FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_OUT, #else X FRAME_CMD_PUSHPIN_IN, FALSE, #endif X NULL); } X #ifdef USE_PROTOTYPES void dismiss_schedule_window(void) #else void dismiss_schedule_window() #endif { X xv_set(schedule_window.frame, X XV_SHOW, FALSE, #ifdef XVIEW3 X FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_OUT, #else X FRAME_CMD_PUSHPIN_IN, FALSE, #endif X NULL); } X #ifdef USE_PROTOTYPES void dismiss_status_window(void) #else void dismiss_status_window() #endif { X xv_set(status_window.frame, X XV_SHOW, FALSE, #ifdef XVIEW3 X FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_OUT, #else X FRAME_CMD_PUSHPIN_IN, FALSE, #endif X NULL); } X #ifdef USE_PROTOTYPES void dir_list_proc(void) #else void dir_list_proc() #endif { X dowhat = DODIR; X notify_stop(); } X #ifdef USE_PROTOTYPES void ls_list_proc(void) #else void ls_list_proc() #endif { X dowhat = DOLS; X notify_stop(); } X #ifdef USE_PROTOTYPES void list_remote_dir(void) #else void list_remote_dir() #endif { X FILE *din = NULL; X X xfer_buttons_inactive(); X if (ping_server()) X goto out; X if (dowhat == DODIR) X din = open_remote_ls(0); X else X din = open_remote_ls(1); X if (din == NULL) { X goto out; X } X while (next_remote_line(din) != NULL) { X log_message(response_line); X log_char('\n'); X } out: X if (din) X close_remote_ls(din); X xfer_buttons_active(); X if (timedout) X timeout_disconnect(); } X #ifdef USE_PROTOTYPES void save_layout_func(void) #else void save_layout_func() #endif { X char *filename=NULL; X FILE *fp; X char *false = "False"; X char *true = "True"; X X host_window.visible = xv_get(host_window.frame, XV_SHOW) == TRUE; X X host_window.advanced.visible = X xv_get(host_window.advanced.panel, XV_SHOW) == TRUE; X X local_window.visible = xv_get(local_window.frame, XV_SHOW) == TRUE; X schedule_window.visible = xv_get(schedule_window.frame, XV_SHOW) == TRUE; X status_window.visible = xv_get(status_window.frame, XV_SHOW) == TRUE; X X defaults_set_boolean("ftptool.HostInfoVisible", host_window.visible); X X defaults_set_boolean("ftptool.HostInfoAdvancedVisible", X host_window.advanced.visible); X X defaults_set_boolean("ftptool.LocalWindowVisible", local_window.visible); X X defaults_set_boolean("ftptool.BatchWindowVisible", schedule_window.visible); X X defaults_set_boolean("ftptool.StatusWindowVisible", status_window.visible); X X save_geometry(base_window.geometry, base_window.frame); X save_geometry(local_window.geometry, local_window.frame); X save_geometry(host_window.geometry, host_window.frame); X save_geometry(schedule_window.geometry, schedule_window.frame); X save_geometry(session_window.geometry, session_window.frame); X save_geometry(status_window.geometry, status_window.frame); X X defaults_set_string("ftptool.RemoteWindowGeometry", base_window.geometry); X X defaults_set_string("ftptool.LocalWindowGeometry", local_window.geometry); X X defaults_set_string("ftptool.HostWindowGeometry", host_window.geometry); X X defaults_set_string("ftptool.BatchWindowGeometry", schedule_window.geometry); X X defaults_set_string("ftptool.SessionWindowGeometry", X session_window.geometry); X X defaults_set_string("ftptool.StatusWindowGeometry", status_window.geometry); X X filename = find_dotfile(FTPTOOL_LAYOUT); X if (filename == NULL) { X if ((filename = create_dotfile(FTPTOOL_LAYOUT, 0644)) == NULL) X return; X } X if ((fp = fopen(filename, "w")) == NULL) { X footer_message("Could not save layout: %s", sys_errlist[errno], X (char *)NULL); X return; X } X fprintf(fp, "ftptool.HostInfoVisible:\t%s\n", X (host_window.visible == 0) ? false : true); X fprintf(fp, "ftptool.HostInfoAdvancedVisible:\t%s\n", X (host_window.advanced.visible == 0) ? false : true); X fprintf(fp, "ftptool.LocalWindowVisible:\t%s\n", X (local_window.visible == 0) ? false : true); X fprintf(fp, "ftptool.BatchWindowVisible:\t%s\n", X (schedule_window.visible == 0) ? false : true); X fprintf(fp, "ftptool.StatusWindowVisible:\t%s\n", X (status_window.visible == 0) ? false : true); X X fprintf(fp, "ftptool.RemoteWindowGeometry:\t%s\n", base_window.geometry); X fprintf(fp, "ftptool.LocalWindowGeometry:\t%s\n", local_window.geometry); X fprintf(fp, "ftptool.HostWindowGeometry:\t%s\n", host_window.geometry); X fprintf(fp, "ftptool.BatchWindowGeometry:\t%s\n", schedule_window.geometry); X fprintf(fp, "ftptool.SessionWindowGeometry:\t%s\n", X session_window.geometry); X fprintf(fp, "ftptool.StatusWindowGeometry:\t%s\n", status_window.geometry); X fclose(fp); X footer_message("Layout saved to %s.", filename, (char *)NULL); X free(filename); } X #ifdef USE_PROTOTYPES void local_doubleclick(struct dirlist *tmp) #else void local_doubleclick(tmp) struct dirlist *tmp; #endif { X xfer_buttons_inactive(); X if (S_ISLNK(tmp->mode)) { X char *name; X X name = linkname(tmp->name); X if (name != NULL) { X if (change_local_dir(name, 0) == ENOTDIR) { X /* Try to view a file */ X (void)view_local_file(name, DOLOCALVIEW, (int *)NULL); X } X free(name); X } X } else if (S_ISDIR(tmp->mode)) { X change_local_dir(tmp->name, 0); X } else if (S_ISREG(tmp->mode)) { X (void)view_local_file(tmp->name, DOLOCALVIEW, (int *)NULL); X } X xfer_buttons_active(); } X #ifdef USE_PROTOTYPES void remote_doubleclick(void) #else void remote_doubleclick() #endif { X if (which_remote_file == NULL) X return; X xfer_buttons_inactive(); X if (S_ISLNK(which_remote_mode) || non_unix) { X char *name; X X name = linkname(which_remote_file); X if (name != NULL) { X if (change_remote_dir(name, 0) == ENOTDIR) { X /* Try to view a file */ X (void)view_remote_file(name, which_remote_size); X } X free(name); X } X } else if (S_ISDIR(which_remote_mode)) { X change_remote_dir(which_remote_file, 0); X } else if (S_ISREG(which_remote_mode)) { X (void)view_remote_file(which_remote_file, which_remote_size); X } X free(which_remote_file); X which_remote_file = NULL; X which_remote_mode = 0; X which_remote_size = 0; X xfer_buttons_active(); } X #ifdef USE_PROTOTYPES void plus_proc(void) #else void plus_proc() #endif { X xv_set(host_window.frame, X XV_WIDTH, (int)xv_get(host_window.basic.panel, XV_WIDTH) X + (int)xv_get(host_window.advanced.panel, XV_WIDTH), X NULL); X xv_set(host_window.panel, X XV_WIDTH, (int)xv_get(host_window.frame, XV_WIDTH), X NULL); X xv_set(host_window.advanced.panel, X XV_HEIGHT, xv_get(host_window.basic.panel, XV_HEIGHT), X WIN_BORDER, TRUE, X XV_SHOW, TRUE, X NULL); X window_fit(host_window.panel); X window_fit(host_window.frame); X xv_set(host_window.basic.plus, X PANEL_INACTIVE, TRUE, X NULL); X xv_set(host_window.basic.plus, X PANEL_NOTIFY_STATUS, XV_ERROR, X NULL); } X #ifdef USE_PROTOTYPES void minus_proc(void) #else void minus_proc() #endif { X xv_set(host_window.basic.plus, X PANEL_INACTIVE, FALSE, X NULL); X xv_set(host_window.advanced.panel, X XV_SHOW, FALSE, X NULL); X window_fit(host_window.panel); X xv_set(host_window.panel, X WIN_BORDER, FALSE, X NULL); X window_fit(host_window.frame); X xv_set(host_window.advanced.minus, X PANEL_NOTIFY_STATUS, XV_ERROR, X NULL); } SHAR_EOF echo 'File button_funcs.c is complete' && chmod 0644 button_funcs.c || echo 'restore of button_funcs.c failed' Wc_c="`wc -c < 'button_funcs.c'`" test 44896 -eq "$Wc_c" || echo 'button_funcs.c: original size 44896, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi rm -f _shar_seq_.tmp echo You have unpacked the last part exit 0 -- Senior Systems Scientist mail: dcmartin@msi.com Molecular Simulations, Inc. uucp: uunet!dcmartin 796 North Pastoria Avenue at&t: 408/522-9236 Sunnyvale, California 94086 fax: 408/732-0831