ftp.nice.ch/pub/next/unix/communication/pcomm.NIHS.bs.tar.gz#/pcomm/Source/x_win.c

This is x_win.c in view mode; [Download] [Up]

/*
 * Display the file transfer window, and invoke the transfer protocol.
 */

#include <stdio.h>
#include <curses.h>
#include "config.h"
#include "dial_dir.h"
#include "misc.h"
#include "xmodem.h"

void
xfer_win(list, up, type)
char *list;
int up, type;
{
	extern int fd;
	WINDOW *xf_win, *newwin();
	int ack_error, fast;
	void xmodem_mode(), input_off(), line_set(), st_line();

	touchwin(stdscr);
	refresh();
	st_line("");

	xf_win = newwin(15, 44, 2, 30);
	/*
	 * This window should be in the non-blocking mode, so we can
	 * scan the keyboard for input while transferring a file.
	 */
	tty_noblock(0, TRUE);
					/* basic window stuff */
	mvwaddstr(xf_win, 2, 14, "Protocol:");
	mvwaddstr(xf_win, 3, 13, "File name:");
	mvwaddstr(xf_win, 4, 13, "File size:");
	mvwaddstr(xf_win, 5, 4, "Error check method:");
	mvwaddstr(xf_win, 6, 5, "Est transfer time:");
	mvwaddstr(xf_win, 7, 11, "Block count:");
	mvwaddstr(xf_win, 8, 6, "Percent complete:");
	mvwaddstr(xf_win, 9, 5, "Bytes transferred:");
	mvwaddstr(xf_win, 10, 5, "Errors this block:");
	mvwaddstr(xf_win, 11, 5, "Total error count:");
	mvwaddstr(xf_win, 12, 10, "Last message: NONE");
	box(xf_win, VERT, HORZ);

	if (up)
		mvwattrstr(xf_win, 0, 17, A_BOLD, " Uploading ");
	else
		mvwattrstr(xf_win, 0, 16, A_BOLD, " Downloading ");

	mvwaddstr(xf_win, 14, 11, " Press <ESC> to abort ");
	wrefresh(xf_win);
					/* fix up the terminal mode */
	input_off();
	xmodem_mode(fd);

	/*
	 * Is your terminal slower than the xfer baud rate?  For example:
	 * I'm at home with my PC and 1200 baud modem; I call my system
	 * at work so I can use their 2400 baud modems to call some other
	 * system.  In this case, I don't wanna spend too much time updating
	 * my screen at 1200 baud, when I'm transferring the file at 2400 baud.
	 */
	fast = 0;

	if (my_speed() >= dir->baud[dir->d_cur])
		fast++;

	if (up)
		ack_error = send_xmodem(xf_win, list, type, fast);
	else
		ack_error = rcv_xmodem(xf_win, list, type, fast);

	tty_noblock(0, FALSE);
					/* prompt for a key on errors */
	if (ack_error) {
		beep();
		clear_line(xf_win, 13, 9, TRUE);
		wattrstr(xf_win, A_BOLD, "Press any key to continue");
		wrefresh(xf_win);
		wgetch(xf_win);
	}
	werase(xf_win);
	wrefresh(xf_win);
	delwin(xf_win);
					/* undo what xmodem_mode() did */
	line_set();
	return;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.