#include "ftptool.h"

#pragma ident   "@(#)create_other.c 1.13     94/08/23"

#ifdef USE_PROTOTYPES
void create_host_popup(void)
#else
void create_host_popup()
#endif
{
	struct passwd *pwd;
	char	domainname[MAXHOSTNAMELEN + 1];
	char	*sundomain;
	Rect	rect;
	int		width, height, x, y;
	Menu	host_menu;
	Menu	host_list_menu;
	Panel	message;

	XSync(dpy, False);
	frame_get_rect(base_window.frame, &rect);

	host_window.frame = (Frame)xv_create(base_window.frame,
		FRAME_CMD,
		XV_LABEL, "Ftptool: Host Information",
		FRAME_SHOW_RESIZE_CORNER, TRUE,
		NULL);

	host_window.panel = xv_get(host_window.frame, FRAME_CMD_PANEL);
	xv_set(host_window.panel,
		XV_HELP_DATA, "ftptool:HostWindow",
		NULL);

	host_window.new = xv_create(host_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "New",
		PANEL_NOTIFY_PROC, host_list_clean_proc,
		NULL);

	host_window.anonymous = xv_create(host_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Anonymous",
		PANEL_NOTIFY_PROC, host_list_clean_proc,
		NULL);

	host_menu = xv_create(XV_NULL,
		MENU,
#ifdef PIN_HOST_LIST
		MENU_GEN_PIN_WINDOW, base_window.frame, "Hosts",
#endif
		MENU_TITLE_ITEM, "Hosts",
		MENU_ITEM,
			MENU_STRING, "No Hosts!",
			NULL,
		NULL);

	host_window.hosts = xv_create(host_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Hosts",
		PANEL_ITEM_MENU, host_menu,
		XV_HELP_DATA, "ftptool:HostsButton",
		NULL);

#ifdef LINT
	host_list_menu = NULL;
	host_list_menu = host_list_menu;
#else
	host_list_menu = xv_create(XV_NULL,
		MENU,
		MENU_GEN_PROC, host_menu_gen,
		MENU_ITEM,
			MENU_STRING, "Save",
			MENU_NOTIFY_PROC, host_save_proc,
			XV_HELP_DATA, "ftptool:HostSaveHostList",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Load",
			MENU_NOTIFY_PROC, host_load_proc,
			XV_HELP_DATA, "ftptool:HostLoadHostList",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Append .netrc",
			MENU_NOTIFY_PROC, host_append_netrc_proc,
			XV_HELP_DATA, "ftptool:HostAppendNetRC",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Add",
			MENU_NOTIFY_PROC, host_list_add_proc,
			XV_HELP_DATA, "ftptool:HostListAdd",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Change",
			MENU_NOTIFY_PROC, host_list_change_proc,
			XV_HELP_DATA, "ftptool:HostListChange",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Delete",
			MENU_NOTIFY_PROC, host_list_delete_proc,
			XV_HELP_DATA, "ftptool:HostListDelete",
			NULL,
		NULL);
#endif

	host_window.host_list_ops = xv_create(host_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Host List",
		PANEL_ITEM_MENU, host_list_menu,
		XV_HELP_DATA, "ftptool:HostListOptions",
		NULL);

	xv_set(host_window.panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		NULL);

	window_fit_height(host_window.panel);

	host_window.basic.panel = xv_create(host_window.frame,
		PANEL,
		PANEL_LAYOUT, PANEL_VERTICAL,
		WIN_BORDER, TRUE,
		XV_SHOW, TRUE,
		NULL);

	host_window.basic.list = xv_create(host_window.basic.panel,
		PANEL_LIST,
		PANEL_LIST_DISPLAY_ROWS, 4,
		PANEL_LABEL_STRING, "Hosts:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_CHOOSE_ONE, TRUE,
		PANEL_CHOOSE_NONE, TRUE,
		PANEL_READ_ONLY, TRUE,
		PANEL_NOTIFY_PROC, host_list_proc,
		XV_HELP_DATA, "ftptool:HostList",
		NULL);

	host_window.basic.host = xv_create(host_window.basic.panel,
		PANEL_TEXT,
		PANEL_NEXT_ROW, xv_row(host_window.basic.panel, 1),
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXHOSTNAMELEN,
		PANEL_LABEL_STRING, "Remote host:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, DEFAULT_HOST,
		PANEL_READ_ONLY, FALSE,
		XV_HELP_DATA, "ftptool:HostWindowHostname",
		NULL);

	host_window.basic.login = xv_create(host_window.basic.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXLOGINLEN,
		PANEL_LABEL_STRING, "Login:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, "anonymous",
		PANEL_READ_ONLY, FALSE,
		PANEL_NOTIFY_STRING, " ",
		PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
		PANEL_NOTIFY_PROC, reject_spaces,
		XV_HELP_DATA, "ftptool:HostWindowLogin",
		NULL);

	pwd = getpwuid(getuid());
	if (pwd == NULL) {
		fprintf(stderr, "Who are you?\n");
		login_name = "unknown";
	} else {
		login_name = strdup(pwd->pw_name);
		if (login_name == NULL) {
			fprintf(stderr, "Out of memory.\n");
			login_name = "unknown";
		}
	}

#ifdef SYSV
	if (sysinfo(SI_SRPC_DOMAIN, domainname, MAXHOSTNAMELEN) == -1) {
#else
	if (getdomainname(domainname, MAXHOSTNAMELEN) == -1) {
#endif
		fprintf(stderr, "What domain is this?\n");
		strcpy(domainname, "unknown");
	}

#ifdef FIX_DOMAIN
	sundomain = index(domainname, '.');
	if (sundomain != NULL)
		sundomain++; /* assume domain XX.Domain.Sun.COM */
	else
		sundomain = domainname;
#else
	sundomain = domainname;
#endif


	if (anonftp_password == NULL) {
		if (index(myhostname, '.'))
			sprintf(scratch, "%s@%s", login_name, myhostname);
		else
			sprintf(scratch, "%s@%s.%s", login_name, myhostname,
			    sundomain);

		anonftp_password = strdup(scratch);
	} else {
		strcpy(scratch, anonftp_password);
	}

	footer_message("Initial password for ftp is %s.", scratch);

	host_window.basic.password = xv_create(host_window.basic.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXPASSWORDLEN,
		PANEL_LABEL_STRING, "Password:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, anonftp_password,
		PANEL_READ_ONLY, FALSE,
		PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
		PANEL_NOTIFY_PROC, connect_proc,
		PANEL_MASK_CHAR, '*',
		XV_HELP_DATA, "ftptool:HostWindowPassword",
		NULL);

	host_window.basic.account = xv_create(host_window.basic.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXPASSWORDLEN,
		PANEL_LABEL_STRING, "Account:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, "",
		PANEL_READ_ONLY, FALSE,
		PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
		PANEL_MASK_CHAR, '*',
		PANEL_NOTIFY_PROC, connect_proc,
		XV_HELP_DATA, "ftptool:HostWindowAccount",
		NULL);

	window_fit_width(host_window.basic.panel);

	host_window.basic.connect = xv_create(host_window.basic.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, " Connect  ",
		PANEL_NOTIFY_PROC, connect_proc,
		XV_HELP_DATA, "ftptool:HostWindowConnectButton",
		NULL);

	xv_set(host_window.basic.panel,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		NULL);

	host_window.basic.dismiss = xv_create(host_window.basic.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Dismiss",
		PANEL_NOTIFY_PROC, dismiss_host_window,
		XV_SHOW, openlook_mode ? FALSE : TRUE,
		XV_HELP_DATA, "ftptool:DismissButton",
		NULL);

	host_window.basic.plus = xv_create(host_window.basic.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "+",
		PANEL_NOTIFY_PROC, plus_proc,
		XV_HELP_DATA, "ftptool:PlusButton",
		NULL);

	xv_set(host_window.basic.panel,
		PANEL_DEFAULT_ITEM, host_window.basic.connect,
		NULL);

	xv_set(host_window.panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		NULL);

	host_window.advanced.panel = xv_create(host_window.frame,
		PANEL,
		PANEL_LAYOUT, PANEL_VERTICAL,
		XV_SHOW, FALSE,
		NULL);

	host_window.advanced.alias = xv_create(host_window.advanced.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXALIASLEN,
		PANEL_LABEL_STRING, "Alias:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, DEFAULT_ALIAS,
		XV_HELP_DATA, "ftptool:HostWindowAlias",
		PANEL_READ_ONLY, FALSE,
		NULL);

	message = xv_create(host_window.advanced.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Last Visited:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:HostWindowLastVisited",
		NULL);

	host_window.advanced.comment = xv_create(host_window.advanced.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXCOMMENTLEN,
		PANEL_LABEL_STRING, "Comment:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, DEFAULT_COMMENT,
		PANEL_READ_ONLY, FALSE,
		XV_HELP_DATA, "ftptool:HostWindowComment",
		NULL);

	/* Make sure the values match the defines in readdir.h */
	host_window.advanced.os_type = xv_create(host_window.advanced.panel,
		PANEL_CHOICE_STACK,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_LABEL_STRING, "Remote host runs:",
		PANEL_CHOICE_STRINGS,
			"UNIX",
			"VMS",
			"DOS",
			"Other",
			NULL,
		PANEL_VALUE, 0,
		PANEL_NOTIFY_PROC, remote_os_proc,
		XV_HELP_DATA, "ftptool:RemoteOSType",
		NULL);

	host_window.advanced.dir_parse = xv_create(host_window.advanced.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXPATHLEN,
		PANEL_LABEL_STRING, "DIR Template:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, UNIX_DIR_PATTERN,
		PANEL_READ_ONLY, FALSE,
		XV_HELP_DATA, "ftptool:HostWindowDirTemplate",
		NULL);

	host_window.advanced.proxy = xv_create(host_window.advanced.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXHOSTNAMELEN,
		PANEL_LABEL_STRING, "Proxy host:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, DEFAULT_PROXY,
		PANEL_READ_ONLY, FALSE,
		PANEL_NOTIFY_STRING, " ",
		PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
		PANEL_NOTIFY_PROC, reject_spaces,
		XV_HELP_DATA, "ftptool:HostWindowProxy",
		NULL);


	host_window.advanced.transfer_mode =
	    xv_create(host_window.advanced.panel,
		PANEL_CHOICE,
		PANEL_LABEL_STRING, "Transfer mode:",
		PANEL_CHOOSE_ONE, TRUE,
		PANEL_CHOOSE_NONE, FALSE,
		PANEL_CHOICE_STRINGS,
			"Binary",
			"ASCII",
			"Tenex",
			/*
			"Image",
			"EBCDIC",
			 */
			NULL,
		XV_HELP_DATA, "ftptool:TransferMode",
		NULL);

	host_window.advanced.remote_auto_cd =
	    xv_create(host_window.advanced.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXPATHLEN,
		PANEL_LABEL_STRING, "Remote CD to:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, ".",
		PANEL_READ_ONLY, FALSE,
		PANEL_NOTIFY_STRING, " ",
		PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
		PANEL_NOTIFY_PROC, reject_spaces,
		XV_HELP_DATA, "ftptool:HostWindowDirectory",
		NULL);


	host_window.advanced.local_auto_cd =
	    xv_create(host_window.advanced.panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXPATHLEN,
		PANEL_LABEL_STRING, "Local CD to:",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_VALUE, ".",
		PANEL_READ_ONLY, FALSE,
		PANEL_NOTIFY_STRING, " ",
		PANEL_NOTIFY_LEVEL, PANEL_SPECIFIED,
		PANEL_NOTIFY_PROC, reject_spaces,
		XV_HELP_DATA, "ftptool:HostWindowLocalDirectory",
		NULL);

	host_window.advanced.minus = xv_create(host_window.advanced.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "-",
		PANEL_NOTIFY_PROC, minus_proc,
		XV_HELP_DATA, "ftptool:MinusButton",
		NULL);

	xv_set(host_window.panel,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		NULL);


	/*
	window_fit(host_window.panel);
	justify_items(host_window.panel, TRUE);
	 */

	/*
	window_fit(host_window.basic.panel);
	 */
	justify_items(host_window.basic.panel, TRUE);

	window_fit_width(host_window.advanced.panel);
	justify_items(host_window.advanced.panel, TRUE);

	xv_set(host_window.advanced.dir_parse,
		XV_SHOW, FALSE,
		NULL);

	xv_set(host_window.advanced.panel,
		WIN_FIT_HEIGHT, 20,
		XV_X, (int)xv_get(host_window.advanced.panel, XV_X) - 3,
		NULL);

	/*
	height = (int)xv_get(host_window.advanced.panel, XV_HEIGHT);
	xv_set(host_window.basic.panel,
		XV_HEIGHT, height,
		NULL);
	 */

	y = (int)xv_get(host_window.advanced.minus, XV_Y);
	x = (int)xv_get(host_window.basic.panel, XV_WIDTH)
		- (int)xv_get(host_window.basic.plus, XV_WIDTH) - 5;

	xv_set(host_window.basic.connect,
		XV_Y, y,
		NULL);
	xv_set(host_window.basic.dismiss,
		XV_Y, y,
		NULL);
	xv_set(host_window.basic.plus,
		XV_Y, y,
		XV_X, x - 2,
		NULL);

	xv_set(host_window.basic.panel,
		WIN_FIT_HEIGHT, 20,
		NULL);


	host_window.advanced.last_visited =
	    xv_create(host_window.advanced.panel,
		PANEL_MESSAGE,
		PANEL_ITEM_X, xv_get(message, XV_X) + xv_get(message, XV_WIDTH)
		    + xv_col(host_window.advanced.panel, 1) / 2,
		PANEL_ITEM_Y, xv_get(message, XV_Y),
		PANEL_LABEL_STRING, "Never",
		XV_HELP_DATA, "ftptool:HostWindowLastVisited",
		NULL);

	/*
	window_fit_height(host_window.panel);
	*/

	window_fit(host_window.frame);

	xv_set(host_window.advanced.panel,
		XV_WIDTH, WIN_EXTEND_TO_EDGE,
		NULL);

	x = rect.r_left - 347;
	y = rect.r_top  + 100;
	width = xv_get(host_window.frame, XV_WIDTH);
	height = xv_get(host_window.frame, XV_HEIGHT);

	set_geometry(host_window.geometry, host_window.frame,
	    width, height, x, y);

	add_dismiss(host_window.basic.panel, host_window.basic.connect,
		host_window.basic.dismiss);

	minus_proc();

	XFlush(dpy);

	hostlist_head = new_hostlist();
	read_ftptoolrc();
	reload_host_list_menu(hostlist_head);
	if (hostlist_head->next) {
		struct hostlist *tmp = hostlist_head->next;

		/* default to first entry */
		if (try_proxy) {
			xv_set(host_window.advanced.proxy,
				PANEL_VALUE, tmp->proxy,
				XV_SHOW, TRUE,
				NULL);
		} else {
			xv_set(host_window.advanced.proxy,
				XV_SHOW, FALSE,
				NULL);
		}
		xv_set(host_window.advanced.alias,
			PANEL_VALUE, tmp->aliasname,
			NULL);
		xv_set(host_window.advanced.last_visited,
			PANEL_VALUE, tmp->last_visited,
			NULL);
		xv_set(host_window.advanced.comment,
			PANEL_VALUE, tmp->comment,
			NULL);
		xv_set(host_window.basic.host,
			PANEL_VALUE, tmp->host,
			NULL);
		xv_set(host_window.basic.login,
			PANEL_VALUE, tmp->login,
			NULL);
		xv_set(host_window.basic.password,
			PANEL_VALUE, tmp->password,
			NULL);
		xv_set(host_window.advanced.transfer_mode,
			PANEL_VALUE, tmp->transfer_mode,
			NULL);
		xv_set(host_window.advanced.remote_auto_cd,
			PANEL_VALUE, tmp->remote_directory,
			NULL);
		xv_set(host_window.advanced.local_auto_cd,
			PANEL_VALUE, tmp->local_directory,
			NULL);
		xv_set(host_window.advanced.os_type,
			PANEL_VALUE, tmp->os_type,
			NULL);
		xv_set(host_window.advanced.dir_parse,
			PANEL_VALUE, tmp->dir_parse,
			NULL);
		if (tmp->os_type == REMOTE_OS_OTHER) {
			xv_set(host_window.advanced.dir_parse,
				XV_SHOW, TRUE,
				NULL);
		} else {
			xv_set(host_window.advanced.dir_parse,
				XV_SHOW, FALSE,
				NULL);
		}
	} else {
		xv_set(host_window.advanced.proxy,
			XV_SHOW, FALSE,
			NULL);
	}
	fix_carets();
	xv_set(host_window.frame,
		WIN_EVENT_PROC, host_event_proc,
		NULL);

}

#ifdef USE_PROTOTYPES
void create_session_log(void)
#else
void create_session_log()
#endif
{
	Rect	rect;
	int		width, height, x, y;

	XSync(dpy, False);

	session_window.frame = xv_create(base_window.frame,
		FRAME_CMD,
		XV_LABEL, "Ftptool: Session Log",
		/*
		XV_WIDTH, rect.r_width,
		 */
		FRAME_SHOW_RESIZE_CORNER, TRUE,
#ifdef XVIEW3
		FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_IN,
#else
		FRAME_CMD_PUSHPIN_IN, TRUE,
#endif
		NULL);

	session_window.panel = xv_get(session_window.frame, FRAME_CMD_PANEL);

	xv_set(session_window.panel,
		XV_HELP_DATA, "ftptool:SessionLog",
		NULL);

	window_fit_height(session_window.panel);

	session_window.log = xv_create(session_window.frame,
		TEXTSW,
		XV_HEIGHT, 100,
		TEXTSW_MEMORY_MAXIMUM, 200000,
		TEXTSW_DISABLE_LOAD, TRUE,
		TEXTSW_READ_ONLY, TRUE,
		NULL);

	height = xv_get(session_window.frame, XV_HEIGHT);

	frame_get_rect(local_window.frame, &rect);

	x = rect.r_left;
	y = rect.r_top + rect.r_height;
	rect.r_top = y;
	rect.r_height = height;
	width = rect.r_width;
	frame_set_rect(session_window.frame, &rect);
	frame_set_rect(session_window.panel, &rect);

	set_geometry(session_window.geometry, session_window.frame,
	    width, height, x, y);

	window_fit(session_window.frame);
#ifdef notdef
	if (logging) {
		xv_set(session_window.frame,
			XV_SHOW, TRUE,
			NULL);
	}
#endif
}

#ifdef USE_PROTOTYPES
void create_about_window(void)
#else
void create_about_window()
#endif
{
	int		width = xv_get(base_window.frame, XV_WIDTH);
	int		height = xv_get(base_window.frame, XV_HEIGHT);
	Rect	*butrect;
	Server_image corner_glyph;

	about_window.frame = xv_create(base_window.frame,
		FRAME_CMD,
		XV_LABEL, "Ftptool: About Ftptool",
#ifdef XVIEW3
		FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_IN,
#else
		FRAME_CMD_PUSHPIN_IN, TRUE,
#endif
		XV_WIDTH, width,
		XV_HEIGHT, height,
		NULL);

	about_window.panel = xv_get(about_window.frame, FRAME_CMD_PANEL);

	xv_set(about_window.panel,
		XV_HELP_DATA, "ftptool:AboutWindow",
		NULL);

	xv_set(about_window.panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		NULL);

	xv_create(about_window.panel,
		PANEL_MESSAGE,
		XV_X, 100,
		PANEL_LABEL_STRING, header_name,
		PANEL_LABEL_BOLD, TRUE,
		NULL);

	xv_create(about_window.panel,
		PANEL_MESSAGE,
		XV_X, 100,
		PANEL_LABEL_STRING, "Copyright 1991-1994",
		PANEL_LABEL_BOLD, TRUE,
		NULL);

	xv_create(about_window.panel,
		PANEL_MESSAGE,
		XV_X, 100,
		PANEL_LABEL_STRING, "Mike Sullivan and Sun Microsystems",
		PANEL_LABEL_BOLD, TRUE,
		NULL);

	xv_create(about_window.panel,
		PANEL_MESSAGE,
		XV_X, 100,
		PANEL_LABEL_STRING, "All Rights Reserved",
		PANEL_LABEL_BOLD, TRUE,
		NULL);

	window_fit_height(about_window.panel);

	about_window.message = xv_create(about_window.frame,
		TEXTSW,
		XV_X, 0,
		XV_WIDTH, WIN_EXTEND_TO_EDGE,
		XV_HEIGHT, 136,
		OPENWIN_SHOW_BORDERS, TRUE,
		TEXTSW_BROWSING, TRUE,
		TEXTSW_DISABLE_LOAD, TRUE,
		NULL);

	about_window.bottom_panel = xv_create(about_window.frame,
		PANEL,
		XV_X, 0,
		NULL);

	about_window.mail = xv_create(about_window.bottom_panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Send Mail...",
		PANEL_NOTIFY_PROC, about_send_proc,
		NULL);

	xv_set(about_window.panel,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		NULL);

	about_window.dismiss = xv_create(about_window.bottom_panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Dismiss",
		PANEL_NOTIFY_PROC, dismiss_about_window,
		XV_HELP_DATA, "ftptool:DismissButton",
		NULL);

	xv_set(about_window.panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		NULL);

	window_fit_height(about_window.bottom_panel);

	butrect = (Rect *)xv_get(about_window.mail, XV_RECT);

	xv_set(about_window.mail,
		XV_X, (int)xv_get(about_window.bottom_panel, XV_WIDTH)/2
		    - butrect->r_width,
		NULL);


	window_fit(about_window.frame);

	corner_glyph = xv_create(XV_NULL, SERVER_IMAGE,
		XV_WIDTH, 64,
		XV_HEIGHT, 64,
		SERVER_IMAGE_DEPTH, 1,
		SERVER_IMAGE_BITS, icon_array,
		NULL);

	xv_create(about_window.panel, PANEL_MESSAGE,
		XV_X, 2,
		XV_Y, xv_get(about_window.panel, XV_HEIGHT)/2 - 32,
		PANEL_LABEL_IMAGE, corner_glyph,
		NULL);

	add_dismiss(about_window.panel, about_window.mail,
		about_window.dismiss);
}

#ifdef USE_PROTOTYPES
void create_feedback_window(void)
#else
void create_feedback_window()
#endif
{
	int		width = xv_get(base_window.frame, XV_WIDTH);
	int		height = xv_get(base_window.frame, XV_HEIGHT);
	Rect	*butrect;

	feedback_window.frame = xv_create(base_window.frame,
		FRAME_CMD,
		XV_LABEL, "Ftptool: Send Feedback",
#ifdef XVIEW3
		FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_OUT,
#else
		FRAME_CMD_PUSHPIN_IN, FALSE,
#endif
		XV_WIDTH, width,
		XV_HEIGHT, height,
		NULL);

	feedback_window.panel = xv_get(feedback_window.frame, FRAME_CMD_PANEL);

	xv_set(feedback_window.panel,
		XV_HELP_DATA, "ftptool:FeedbackWindow",
		NULL);

	xv_set(feedback_window.panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		NULL);

	xv_create(feedback_window.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING,
		    "Your feedback is appreciated. To insure that your message arrives,",
		NULL);

	xv_create(feedback_window.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING,
		    "check that the \"To\" address is valid for your site before clicking \"Send.\"",
		NULL);

	feedback_window.which = xv_create(feedback_window.panel,
		PANEL_CHOICE_STACK,
		PANEL_CHOICE_NROWS, 1,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_LABEL_STRING, "To:",
		PANEL_CHOICE_STRINGS,
			"Mike.Sullivan@Sun.COM",
			"uunet!sun.com!mike.sullivan%male",
			"Other Address",
			NULL,
		PANEL_NOTIFY_PROC, feedback_address_proc,
		NULL);

	feedback_window.other = xv_create(feedback_window.panel, PANEL_TEXT,
		PANEL_LABEL_STRING, "Other:  ",
		PANEL_LABEL_BOLD, TRUE,
		PANEL_VALUE_DISPLAY_LENGTH, 40,
		PANEL_VALUE_STORED_LENGTH, 64,
		PANEL_VALUE, "",
		PANEL_READ_ONLY, FALSE,
		XV_SHOW, FALSE,
		NULL);

	window_fit_height(feedback_window.panel);

	feedback_window.feedback = xv_create(feedback_window.frame,
		TEXTSW,
		XV_X, 0,
		XV_WIDTH, WIN_EXTEND_TO_EDGE,
		XV_HEIGHT, 188,
		OPENWIN_SHOW_BORDERS, TRUE,
		NULL);

	feedback_window.bottom_panel = xv_create(feedback_window.frame,
		PANEL,
		XV_X, 0,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		NULL);

	feedback_window.send = xv_create(feedback_window.bottom_panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Send",
		PANEL_NOTIFY_PROC, feedback_send_proc,
		NULL);

	window_fit_height(feedback_window.bottom_panel);

	butrect = (Rect *)xv_get(feedback_window.send, XV_RECT);

	xv_set(feedback_window.send,
		XV_X, (int)xv_get(feedback_window.bottom_panel, XV_WIDTH)/2
		    - butrect->r_width,
		NULL);

	feedback_window.cancel = xv_create(feedback_window.bottom_panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Cancel",
		PANEL_NOTIFY_PROC, feedback_cancel_proc,
		NULL);


	window_fit(feedback_window.frame);
}

#ifdef USE_PROTOTYPES
void create_file_property_window(struct file_property_window *file_props,
	char *header)
#else
void create_file_property_window(file_props, header)
struct file_property_window *file_props;
char	*header;
#endif
{
	int x_gap;
	int y_gap;
	Rect	rect;
	Rect	*butrect;

	file_props->frame = xv_create(base_window.frame,
		FRAME_PROPS,
		XV_LABEL, header,
#ifdef XVIEW3
		FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_IN,
#else
		FRAME_CMD_PUSHPIN_IN, TRUE,
#endif
		NULL);

	file_props->panel = (Panel)xv_get(file_props->frame, FRAME_PROPS_PANEL);

	x_gap = xv_get(file_props->panel, PANEL_ITEM_X_GAP);

	y_gap = xv_get(file_props->panel, PANEL_ITEM_Y_GAP);

	xv_set(file_props->panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		XV_HELP_DATA, "ftptool:FileProperty",
		NULL);

	file_props->filename = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Name:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:FilePropertyName",
		NULL);

	file_props->owner = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Owner:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:FilePropertyOwner",
		NULL);

	file_props->group = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Group:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:FilePropertyGroup",
		NULL);

	file_props->modtime = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Last Modified:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:FilePropertyModtime",
		NULL);

	file_props->size = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Size:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:FilePropertySize",
		NULL);

	file_props->type = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Type:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:FilePropertyType",
		NULL);

	file_props->perms_message = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_NEXT_ROW, xv_row(file_props->panel, 1),
		PANEL_LABEL_BOLD, TRUE,
		PANEL_LABEL_STRING, "Permissions:",
		NULL);

	file_props->user_perms = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Owner:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:FilePropertyUserPerms",
		NULL);

	file_props->group_perms = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Group:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:FilePropertyGroupPerms",
		NULL);

	file_props->other_perms = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Other:",
		PANEL_LABEL_BOLD, "Other:",
		XV_HELP_DATA, "ftptool:FilePropertyOtherPerms",
		NULL);

	file_props->dismiss = xv_create(file_props->panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Dismiss",
		PANEL_NOTIFY_PROC, dismiss_file_props_window,
		XV_SHOW, openlook_mode ? FALSE : TRUE,
		PANEL_CLIENT_DATA, file_props->frame,
		XV_HELP_DATA, "ftptool:DismissButton",
		NULL);

	window_fit(file_props->panel);
	justify_items(file_props->panel, FALSE);

	file_props->filename = xv_create(file_props->panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 25,
		PANEL_VALUE_STORED_LENGTH, MAXHOSTNAMELEN,
		PANEL_READ_ONLY, TRUE,
		PANEL_ITEM_X, xv_get(file_props->filename, PANEL_ITEM_X)
		    + xv_get(file_props->filename, XV_WIDTH) + x_gap,
		PANEL_ITEM_Y, xv_get(file_props->filename, PANEL_ITEM_Y),
		XV_HELP_DATA, "ftptool:FilePropertyName",
		NULL);

	xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_LABEL_BOLD, TRUE,
		PANEL_LABEL_STRING, "Read  Write Execute",
		PANEL_ITEM_X, xv_get(file_props->perms_message, PANEL_ITEM_X)
		    + xv_get(file_props->perms_message, XV_WIDTH) + x_gap,
		PANEL_ITEM_Y, xv_get(file_props->perms_message, PANEL_ITEM_Y),
		NULL);

	file_props->owner = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_INACTIVE, TRUE,
		PANEL_READ_ONLY, TRUE,
		PANEL_ITEM_X, xv_get(file_props->owner, PANEL_ITEM_X)
		    + xv_get(file_props->owner, XV_WIDTH) + x_gap,
		PANEL_ITEM_Y, xv_get(file_props->owner, PANEL_ITEM_Y),
		XV_HELP_DATA, "ftptool:FilePropertyOwner",
		NULL);

	file_props->group = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_INACTIVE, TRUE,
		PANEL_READ_ONLY, TRUE,
		PANEL_ITEM_X, xv_get(file_props->group, PANEL_ITEM_X)
		    + xv_get(file_props->group, XV_WIDTH) + x_gap,
		PANEL_ITEM_Y, xv_get(file_props->group, PANEL_ITEM_Y),
		XV_HELP_DATA, "ftptool:FilePropertyGroup",
		NULL);

	file_props->modtime = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_INACTIVE, TRUE,
		PANEL_READ_ONLY, TRUE,
		PANEL_ITEM_X, xv_get(file_props->modtime, PANEL_ITEM_X)
		    + xv_get(file_props->modtime, XV_WIDTH) + x_gap,
		PANEL_ITEM_Y, xv_get(file_props->modtime, PANEL_ITEM_Y),
		XV_HELP_DATA, "ftptool:FilePropertyModtime",
		NULL);

	file_props->size = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_INACTIVE, TRUE,
		PANEL_READ_ONLY, TRUE,
		PANEL_ITEM_X, xv_get(file_props->size, PANEL_ITEM_X)
		    + xv_get(file_props->size, XV_WIDTH) + x_gap,
		PANEL_ITEM_Y, xv_get(file_props->size, PANEL_ITEM_Y),
		XV_HELP_DATA, "ftptool:FilePropertySize",
		NULL);

	file_props->type = xv_create(file_props->panel,
		PANEL_MESSAGE,
		PANEL_INACTIVE, TRUE,
		PANEL_READ_ONLY, TRUE,
		PANEL_ITEM_X, xv_get(file_props->type, PANEL_ITEM_X)
		    + xv_get(file_props->type, XV_WIDTH) + x_gap,
		PANEL_ITEM_Y, xv_get(file_props->type, PANEL_ITEM_Y),
		XV_HELP_DATA, "ftptool:FilePropertyType",
		NULL);

	file_props->user_perms = xv_create(file_props->panel,
		PANEL_CHECK_BOX,
		PANEL_INACTIVE, TRUE,
		PANEL_CHOICE_STRINGS,
			"",
			"",
			"",
			NULL,
		PANEL_ITEM_X, xv_get(file_props->user_perms, PANEL_ITEM_X)
		    + xv_get(file_props->user_perms, XV_WIDTH) + x_gap * 2,
		PANEL_ITEM_Y, xv_get(file_props->user_perms, PANEL_ITEM_Y) -
		    y_gap/2,
		XV_HELP_DATA, "ftptool:FilePropertyUserPerms",
		NULL);

	file_props->group_perms = xv_create(file_props->panel,
		PANEL_CHECK_BOX,
		PANEL_INACTIVE, TRUE,
		PANEL_CHOICE_STRINGS,
			"",
			"",
			"",
			NULL,
		PANEL_ITEM_X, xv_get(file_props->group_perms, PANEL_ITEM_X)
		    + xv_get(file_props->group_perms, XV_WIDTH) + x_gap * 2,
		PANEL_ITEM_Y, xv_get(file_props->group_perms, PANEL_ITEM_Y) -
		    y_gap/2,
		XV_HELP_DATA, "ftptool:FilePropertyGroupPerms",
		NULL);

	file_props->other_perms = xv_create(file_props->panel,
		PANEL_CHECK_BOX,
		PANEL_INACTIVE, TRUE,
		PANEL_CHOICE_STRINGS,
			"",
			"",
			"",
			NULL,
		PANEL_ITEM_X, xv_get(file_props->other_perms, PANEL_ITEM_X)
		    + xv_get(file_props->other_perms, XV_WIDTH) + x_gap * 2,
		PANEL_ITEM_Y, xv_get(file_props->other_perms, PANEL_ITEM_Y) -
		    y_gap/2,
		XV_HELP_DATA, "ftptool:FilePropertyOtherPerms",
		NULL);

	window_fit(file_props->panel);
	window_fit(file_props->frame);

	XSync(dpy, False);

	frame_get_rect(file_props->frame, &rect);

	butrect = (Rect *)xv_get(file_props->dismiss, XV_RECT);

	xv_set(file_props->dismiss,
		XV_X, rect.r_width / 2 - butrect->r_width / 2,
		NULL);
}

#ifdef USE_PROTOTYPES
void create_tar_file_popup(void)
#else
void create_tar_file_popup()
#endif
{
	Panel_button_item ok;
	Rect	*butrect;
	Panel	panel;

	tar_frame = xv_create(base_window.frame,
		FRAME_CMD,
		XV_LABEL, "Ftptool: Create Tar File",
		NULL);

	panel = xv_get(tar_frame, FRAME_CMD_PANEL);

	xv_set(panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		XV_HELP_DATA, "ftptool:TarFileNameWindow",
		NULL);

	tar_text = xv_create(panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 20,
		PANEL_VALUE_STORED_LENGTH, MAXPATHLEN + 1,
		PANEL_LABEL_STRING, "Tar Filename: ",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		XV_HELP_DATA, "ftptool:TarFileNameText",
		NULL);

	ok = xv_create(panel, PANEL_BUTTON,
		PANEL_NOTIFY_PROC, create_tar_proc,
		PANEL_LABEL_STRING, "Start Tar",
		XV_HELP_DATA, "ftptool:TarFileNameButton",
		NULL);

	xv_set(panel,
		PANEL_DEFAULT_ITEM, ok,
		NULL);

	window_fit(panel);
	window_fit(tar_frame);

	butrect = (Rect *)xv_get(ok, XV_RECT);

	xv_set(ok,
		XV_X, (int)xv_get(panel, XV_WIDTH)/2 - butrect->r_width,
		NULL);
}

#ifdef USE_PROTOTYPES
void create_load_save_popup(Frame *framep, Panel *textp, Panel *buttonp)
#else
void create_load_save_popup(framep, textp, buttonp)
Frame	*framep;
Panel	*textp;
Panel	*buttonp;
#endif
{
	Frame frame;
	Panel panel;
	Panel text;
	Panel button;
	Rect	*butrect;

	frame = xv_create(base_window.frame,
		FRAME_CMD,
		NULL);

	panel = xv_get(frame, FRAME_CMD_PANEL);

	xv_set(panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		NULL);

	text = xv_create(panel,
		PANEL_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 40,
		PANEL_VALUE_STORED_LENGTH, MAXPATHLEN + 1,
		PANEL_LABEL_STRING, "Filename: ",
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		XV_HELP_DATA, "ftptool:LoadSaveBatchList",
		NULL);

	button = xv_create(panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Load",
		NULL);

	xv_set(panel, PANEL_DEFAULT_ITEM, button, NULL);

	window_fit(panel);
	window_fit(frame);

	butrect = (Rect *)xv_get(button, XV_RECT);
	xv_set(button,
		XV_X, (int)xv_get(panel, XV_WIDTH)/2 - butrect->r_width,
		NULL);

	*framep = frame;
	*textp = text;
	*buttonp = button;
}

#ifdef USE_PROTOTYPES
void create_schedule_window(void)
#else
void create_schedule_window()
#endif
{
	Menu	host_menu;
	Menu	options_menu;
	Menu	list_menu;
	Panel	message;
	int	x, y, width, height;

	schedule_window.frame = (Frame)xv_create(base_window.frame,
		FRAME_CMD,
		XV_LABEL, "Ftptool: Schedule Batch Transfer",
		FRAME_SHOW_RESIZE_CORNER, TRUE,
		FRAME_SHOW_FOOTER, TRUE,
		XV_HELP_DATA, "ftptool:ScheduleWindow",
		NULL);

	schedule_window.panel = xv_get(schedule_window.frame, FRAME_CMD_PANEL);

	xv_set(schedule_window.panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		NULL);

	schedule_window.process = xv_create(schedule_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Process Batch",
		PANEL_NOTIFY_PROC, batch_process_proc,
		XV_HELP_DATA, "ftptool:ProcessBatch",
		NULL);

	xv_set(schedule_window.panel,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		NULL);

	host_menu = xv_create(XV_NULL,
		MENU,
		MENU_GEN_PIN_WINDOW, base_window.frame, "Hosts",
		MENU_TITLE_ITEM, "Hosts",
		MENU_ITEM,
			MENU_STRING, "No Hosts!",
			NULL,
		NULL);

	schedule_window.hosts = xv_create(schedule_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Hosts",
		PANEL_ITEM_MENU, host_menu,
		XV_HELP_DATA, "ftptool:ScheduleHosts",
		NULL);

#ifdef LINT
	options_menu = NULL;
	options_menu = options_menu;
#else
	options_menu = xv_create(XV_NULL,
		MENU,
		MENU_ITEM,
			MENU_STRING, "Set Current",
			MENU_NOTIFY_PROC, set_current_schedule_proc,
			XV_HELP_DATA, "ftptool:ScheduleCurrent",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Add",
			MENU_NOTIFY_PROC, schedule_add_proc,
			XV_HELP_DATA, "ftptool:ScheduleAdd",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Change",
			MENU_NOTIFY_PROC, schedule_change_proc,
			XV_HELP_DATA, "ftptool:ScheduleChange",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Delete",
			MENU_NOTIFY_PROC, schedule_delete_proc,
			XV_HELP_DATA, "ftptool:ScheduleDelete",
			NULL,
		NULL);
#endif

	schedule_window.options = xv_create(schedule_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Options",
		PANEL_ITEM_MENU, options_menu,
		XV_HELP_DATA, "ftptool:ScheduleOptions",
		NULL);


	schedule_window.dismiss = xv_create(schedule_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Dismiss",
		PANEL_NOTIFY_PROC, dismiss_schedule_window,
		XV_SHOW, openlook_mode ? FALSE : TRUE,
		XV_HELP_DATA, "ftptool:DismissButton",
		NULL);

	xv_set(schedule_window.panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		NULL);

	message = xv_create(schedule_window.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Time Now:",
		PANEL_LABEL_BOLD, TRUE,
		XV_HELP_DATA, "ftptool:ScheduleTime",
		NULL);

	schedule_window.direction = xv_create(schedule_window.panel,
		PANEL_CHOICE,
		PANEL_LABEL_STRING, "Action:",
		PANEL_CHOOSE_ONE, TRUE,
		PANEL_CHOICE_STRINGS,
			"Receive From",
			"Send to",
			NULL,
		XV_HELP_DATA, "ftptool:ScheduleDirection",
		PANEL_NOTIFY_PROC, action_choice_proc,
		NULL);

	schedule_window.menu_name = xv_create(schedule_window.panel,
		PANEL_TEXT,
		PANEL_LABEL_STRING, "Target:",
		PANEL_VALUE, "",
		PANEL_READ_ONLY, TRUE,
		PANEL_VALUE_DISPLAY_LENGTH, 30,
		PANEL_VALUE_STORED_LENGTH, MAXHOSTNAMELEN,
		XV_HELP_DATA, "ftptool:ScheduleTarget",
		NULL);


	schedule_window.hour = xv_create(schedule_window.panel,
		PANEL_NUMERIC_TEXT,
		PANEL_MIN_VALUE, 0,
		PANEL_MAX_VALUE, 23,
		PANEL_VALUE_STORED_LENGTH, 20,
		PANEL_VALUE_DISPLAY_LENGTH, 2,
		PANEL_LABEL_STRING, "Hour:",
		XV_HELP_DATA, "ftptool:ScheduleHour",
		NULL);

	schedule_window.month = xv_create(schedule_window.panel,
		PANEL_CHOICE_STACK,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		PANEL_LABEL_STRING, "Date:",
		PANEL_CHOICE_STRINGS,
			"Jan", "Feb", "Mar", "Apr",
			"May", "Jun", "Jul", "Aug",
			"Sep", "Oct", "Nov", "Dec",
			NULL,
		PANEL_VALUE, 0,
		XV_HELP_DATA, "ftptool:ScheduleMonth",
		NULL);

	schedule_window.repeat = xv_create(schedule_window.panel,
		PANEL_CHECK_BOX,
		PANEL_CHOICE_STRINGS,
			"",
			NULL,
		PANEL_LABEL_STRING, "Repeat:",
		PANEL_NOTIFY_PROC, repeat_check_box,
		XV_HELP_DATA, "ftptool:ScheduleRepeat",
		NULL);

	window_fit(schedule_window.panel);
	justify_items(schedule_window.panel, TRUE);

	schedule_window.receive_list = xv_create(schedule_window.panel,
		PANEL_LIST,
		PANEL_LIST_DISPLAY_ROWS, 6,
		PANEL_LAYOUT, PANEL_VERTICAL,
		PANEL_CHOOSE_NONE, TRUE,
		PANEL_CHOOSE_ONE, FALSE,
		PANEL_READ_ONLY, TRUE,
		PANEL_NOTIFY_PROC, receive_list_proc,
		XV_HELP_DATA, "ftptool:BatchReceiveList",
		NULL);

	list_menu = xv_get(schedule_window.receive_list, PANEL_ITEM_MENU);

	xv_set(list_menu,
		MENU_GEN_PROC, receive_list_menu_gen,
		MENU_TITLE_ITEM, "Batch Receive",
		MENU_ITEM,
			MENU_STRING, "",
			MENU_FEEDBACK, FALSE,
			NULL,
		MENU_ITEM,
			MENU_STRING, "Delete",
			MENU_NOTIFY_PROC, receive_list_delete_proc,
			XV_HELP_DATA, "ftptool:BatchReceiveDelete",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Copy to Local",
			MENU_NOTIFY_PROC, batchget_proc,
			XV_HELP_DATA, "ftptool:BatchReceiveCopy",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Load",
			MENU_NOTIFY_PROC, show_load_receive_list_proc,
			XV_HELP_DATA, "ftptool:BatchLoad",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Save",
			MENU_NOTIFY_PROC, show_save_receive_list_proc,
			XV_HELP_DATA, "ftptool:BatchSave",
			NULL,
		NULL);

	schedule_window.send_list = xv_create(schedule_window.panel,
		PANEL_LIST,
		PANEL_LIST_DISPLAY_ROWS, 6,
		PANEL_LAYOUT, PANEL_VERTICAL,
		PANEL_CHOOSE_NONE, TRUE,
		PANEL_CHOOSE_ONE, FALSE,
		PANEL_READ_ONLY, TRUE,
		PANEL_ITEM_X, xv_get(schedule_window.receive_list, XV_X),
		PANEL_ITEM_Y, xv_get(schedule_window.receive_list, XV_Y),
		PANEL_NOTIFY_PROC, send_list_proc,
		XV_HELP_DATA, "ftptool:BatchSendList",
		XV_SHOW, FALSE,
		NULL);

	list_menu = xv_get(schedule_window.send_list, PANEL_ITEM_MENU);

	xv_set(list_menu,
		MENU_GEN_PROC, send_list_menu_gen,
		MENU_TITLE_ITEM, "Batch Send",
		MENU_ITEM,
			MENU_STRING, "",
			MENU_FEEDBACK, FALSE,
			NULL,
		MENU_ITEM,
			MENU_STRING, "Delete",
			MENU_NOTIFY_PROC, send_list_delete_proc,
			XV_HELP_DATA, "ftptool:BatchSendDelete",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Copy to Remote",
			MENU_NOTIFY_PROC, batchput_proc,
			XV_HELP_DATA, "ftptool:BatchSendCopy",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Load",
			MENU_NOTIFY_PROC, show_load_send_list_proc,
			XV_HELP_DATA, "ftptool:BatchLoad",
			NULL,
		MENU_ITEM,
			MENU_STRING, "Save",
			MENU_NOTIFY_PROC, show_save_send_list_proc,
			XV_HELP_DATA, "ftptool:BatchSave",
			NULL,
		NULL);

	xv_set(schedule_window.panel,
		PANEL_LAYOUT, PANEL_HORIZONTAL,
		NULL);


	schedule_window.current_time = xv_create(schedule_window.panel,
		PANEL_MESSAGE,
		PANEL_ITEM_X, xv_get(message, XV_X) + xv_get(message, XV_WIDTH)
		    + xv_col(schedule_window.panel, 1) / 2,
		PANEL_ITEM_Y, xv_get(message, XV_Y),
		PANEL_LABEL_STRING, "",
		XV_HELP_DATA, "ftptool:ScheduleTime",
		NULL);

	schedule_window.minute = xv_create(schedule_window.panel,
		PANEL_NUMERIC_TEXT,
		PANEL_VALUE_STORED_LENGTH, 20,
		PANEL_VALUE_DISPLAY_LENGTH, 2,
		PANEL_MIN_VALUE, 0,
		PANEL_MAX_VALUE, 59,
		PANEL_LABEL_STRING, "Minute:",
		PANEL_ITEM_X, xv_get(schedule_window.hour, XV_X)
		    + xv_get(schedule_window.hour, XV_WIDTH)
		    + xv_col(schedule_window.panel, 1),
		PANEL_ITEM_Y, xv_get(schedule_window.hour, XV_Y),
		XV_HELP_DATA, "ftptool:ScheduleMinute",
		NULL);

	schedule_window.day = xv_create(schedule_window.panel,
		PANEL_NUMERIC_TEXT,
		PANEL_VALUE_STORED_LENGTH, 20,
		PANEL_VALUE_DISPLAY_LENGTH, 2,
		PANEL_MIN_VALUE, 1,
		PANEL_MAX_VALUE, 31,
		PANEL_ITEM_X, xv_get(schedule_window.month, XV_X)
		    + xv_get(schedule_window.month, XV_WIDTH)
		    + xv_col(schedule_window.panel, 1),
		PANEL_ITEM_Y, xv_get(schedule_window.month, XV_Y)
		    + xv_row(schedule_window.panel, 1)/8,
		XV_HELP_DATA, "ftptool:ScheduleDay",
		NULL);

	schedule_window.year = xv_create(schedule_window.panel,
		PANEL_NUMERIC_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 4,
		PANEL_VALUE_STORED_LENGTH, 40,
		PANEL_MIN_VALUE, 1992,
		PANEL_MAX_VALUE, 2999,
		PANEL_ITEM_X, xv_get(schedule_window.day, XV_X)
		    + xv_get(schedule_window.day, XV_WIDTH)
		    + xv_col(schedule_window.panel, 1),
		PANEL_ITEM_Y, xv_get(schedule_window.day, XV_Y),
		XV_HELP_DATA, "ftptool:ScheduleYear",
		NULL);

	schedule_window.repeat_minutes = xv_create(schedule_window.panel,
		PANEL_NUMERIC_TEXT,
		PANEL_VALUE_DISPLAY_LENGTH, 4,
		PANEL_VALUE_STORED_LENGTH, 40,
		PANEL_MIN_VALUE, 1,
		PANEL_MAX_VALUE, 100000,
		PANEL_VALUE, 1,
		PANEL_ITEM_X, xv_get(schedule_window.repeat, XV_X)
		    + xv_get(schedule_window.repeat, XV_WIDTH)
		    + xv_col(schedule_window.panel, 2),
		PANEL_ITEM_Y, xv_get(schedule_window.repeat, XV_Y) + 5,
		PANEL_NOTIFY_PROC, repeat_minute_check,
		XV_HELP_DATA, "ftptool:ScheduleRepeatMinutes",
		NULL);

	schedule_window.repeat_message = xv_create(schedule_window.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "minutes",
		PANEL_VALUE, 1,
		PANEL_ITEM_X, xv_get(schedule_window.repeat_minutes, XV_X)
		    + xv_get(schedule_window.repeat_minutes, XV_WIDTH)
		    + xv_col(schedule_window.panel, 1),
		PANEL_ITEM_Y, xv_get(schedule_window.repeat_minutes, XV_Y),
		XV_HELP_DATA, "ftptool:ScheduleRepeatMinutes",
		NULL);

	window_fit(schedule_window.panel);
	window_fit(schedule_window.frame);

	xv_set(schedule_window.repeat_minutes,
		XV_SHOW, FALSE,
		NULL);

	xv_set(schedule_window.repeat_message,
		XV_SHOW, FALSE,
		NULL);

	xv_set(schedule_window.frame,
		WIN_EVENT_PROC, schedule_event_proc,
		NULL);
	x = xv_get(schedule_window.frame, XV_X);
	y = xv_get(schedule_window.frame, XV_Y);
	width = xv_get(schedule_window.frame, XV_WIDTH);
	height = xv_get(schedule_window.frame, XV_HEIGHT);
	set_geometry(schedule_window.geometry, schedule_window.frame,
	    width, height, x, y);

	/* create load/save popup.  */
	create_load_save_popup(&schedule_window.lsframe,
	    &schedule_window.filename, &schedule_window.lsbutton);
}

#ifdef USE_PROTOTYPES
void create_status_window(void)
#else
void create_status_window()
#endif
{
	Rect	*butrect;
	Rect	rect;
	Panel_item	status_message;
	Panel_item	size_message;
	int		x;
	int		y;
	int		width;
	int		height;

	frame_get_rect(base_window.frame, &rect);

	status_window.frame = xv_create(base_window.frame,
		FRAME_CMD,
		XV_LABEL, "Ftptool: Transfer Status",
		XV_HELP_DATA, "ftptool:StatusWindow",
		FRAME_SHOW_FOOTER, TRUE,
		NULL);

	status_window.panel = xv_get(status_window.frame, FRAME_CMD_PANEL);

	xv_set(status_window.panel,
		PANEL_LAYOUT, PANEL_VERTICAL,
		WIN_BORDER, TRUE,
		NULL);

	status_message = xv_create(status_window.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Status:",
		PANEL_LABEL_BOLD, TRUE,
		NULL);

	size_message = xv_create(status_window.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Size:",
		PANEL_LABEL_BOLD, TRUE,
		NULL);

	status_window.total_gauge = xv_create(status_window.panel,
		PANEL_GAUGE,
		PANEL_NEXT_ROW, xv_row(status_window.panel, 1) / 2,
		PANEL_LABEL_STRING, "Total:",
		PANEL_LABEL_BOLD, TRUE,
		PANEL_MIN_VALUE, 0,
		PANEL_MAX_VALUE, 100,
		PANEL_GAUGE_WIDTH, 200,
		PANEL_TICKS, 21,
		XV_HELP_DATA, "ftptool:TotalGauge",
		NULL);

	status_window.dismiss = xv_create(status_window.panel,
		PANEL_BUTTON,
		PANEL_LABEL_STRING, "Dismiss",
		PANEL_NOTIFY_PROC, dismiss_status_window,
		XV_HELP_DATA, "ftptool:DismissButton",
		NULL);

	xv_set(status_window.panel,
		WIN_FIT_HEIGHT, 10,
		WIN_FIT_WIDTH, 10,
		NULL);

	justify_items(status_window.panel, TRUE);

	status_window.message = xv_create(status_window.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "Not Transferring",
		PANEL_ITEM_X, xv_get(status_message, XV_X)
		    + xv_get(status_message, XV_WIDTH)
		    + xv_col(status_window.panel, 1) / 2,
		PANEL_ITEM_Y, xv_get(status_message, XV_Y),
		NULL);

	status_window.size = xv_create(status_window.panel,
		PANEL_MESSAGE,
		PANEL_LABEL_STRING, "0 bytes",
		PANEL_ITEM_X, xv_get(size_message, XV_X)
		    + xv_get(size_message, XV_WIDTH)
		    + xv_col(status_window.panel, 1) / 2,
		PANEL_ITEM_Y, xv_get(size_message, XV_Y),
		NULL);

	xv_set(status_window.panel,
		WIN_FIT_HEIGHT, 10,
		WIN_FIT_WIDTH, 10,
		NULL);

	butrect = (Rect *)xv_get(status_window.dismiss, XV_RECT);
	xv_set(status_window.dismiss,
		XV_X, xv_get(status_window.panel, XV_WIDTH) / 2
		    - butrect->r_width / 2,
		XV_SHOW, openlook_mode ? FALSE : TRUE,
		NULL);

	window_fit(status_window.frame);

	x = rect.r_left - xv_get(status_window.frame, XV_WIDTH);
	y = rect.r_top;
	width = xv_get(status_window.frame, XV_WIDTH);
	height = xv_get(status_window.frame, XV_HEIGHT);

	set_geometry(status_window.geometry, status_window.frame,
	    width, height, x, y);
}


syntax highlighted by Code2HTML, v. 0.9.1