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

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

/*
 * Display the TTY setup, query for changes.  A non-zero return code
 * means something was changed.
 */

#include <stdio.h>
#include <curses.h>
#include "config.h"
#include "misc.h"
#include "modem.h"

int
tty_setup()
{
	WINDOW *tt_win, *newwin();
	char message[80], *str, *get_str();
	int num, i, j, ret_code;
	static int tty_prompt();
	void create_modem(), del_modem(), error_win();
	static void disp_tty(), del_tty();

	tt_win = newwin(23, 80, 0, 0);

	horizontal(tt_win, 0, 0, 34);
	mvwattrstr(tt_win, 0, 35, A_BOLD, "TTY Setup");
	horizontal(tt_win, 0, 45, 34);
	mvwaddstr(tt_win, 2, 22, "TTY name");
	mvwaddstr(tt_win, 2, 37, "Modem name");
	mvwaddstr(tt_win, 2, 51, "Init speed");
					/* display the current TTY list */
	disp_tty(tt_win);
					/* prompt for options */
	mvwaddstr(tt_win, 15, 20, "A) Add a TTY entry");
	mvwaddstr(tt_win, 16, 20, "D) Delete a TTY entry");
	horizontal(tt_win, 19, 0, 80);
	mvwattrstr(tt_win, 20, 0, A_BOLD, "OPTION ==> ");
	mvwaddstr(tt_win, 20, 58, "Press <ESC> to return");
	wmove(tt_win, 20, 12);
	touchwin(tt_win);
	wrefresh(tt_win);
					/* get the option */
	ret_code = 0;
	while ((str = get_str(tt_win, 2, "01234356789AaDd", "")) != NULL) {
		switch(*str) {
			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
				i = atoi(str);
					/* if beyond t_entries */
				if (i > modem->t_entries) {
					beep();
					break;
				}

					/* change the entry  */
				if (tty_prompt(tt_win, i-1)) {

					/* requires modem update? */
					create_modem(modem->tname[i-1]);
					del_modem();
					ret_code++;
				}
				break;
			case 'a':
			case 'A':	/* add an entry */
				if (modem->t_entries == NUM_TTY) {
					sprintf(message, "\"%s\"", modem->m_path);
					error_win(0, "No empty TTY slots in modem/TTY database", message);
					break;
				}
					/* prompt for info */
				j = modem->t_entries;
				if (tty_prompt(tt_win, j)) {

					/* add modem entry? */
					modem->t_entries++;
					create_modem(modem->tname[j]);
					ret_code++;
				}
				break;
			case 'd':
			case 'D':	/* delete an entry */
				mvwaddstr(tt_win, 21, 0, "Entry number to delete: ");
				wrefresh(tt_win);
				while ((num = get_num(tt_win, 4)) != -1) {
					/* valid range */
					if (!num || num>modem->t_entries) {
						beep();
						mvwaddstr(tt_win, 21, 24, "   ");
						wmove(tt_win, 21, 24);
						wrefresh(tt_win);
						continue;
					}
					del_tty(num-1);
					del_modem();

					/* show the new list */
					disp_tty(tt_win);
					ret_code++;
					break;
				}
				break;
			default:
				beep();
				break;
		}
		mvwaddstr(tt_win, 20, 12, "  ");
		clear_line(tt_win, 21, 0, FALSE);
		clear_line(tt_win, 22, 0, FALSE);
		wmove(tt_win, 20, 12);
		wrefresh(tt_win);
	}
	delwin(tt_win);
	return(ret_code);
}

/*
 * Display the current TTY list.  No scrolling yet, so if your NUM_TTY is
 * greater than ten, this routine will need some work.
 */

static void
disp_tty(win)
WINDOW *win;
{
	int i;

	for (i=0; i<NUM_TTY; i++)
		mvwprintw(win, i+4, 20, "%2d) %-14.14s %-14.14s  %d\n",
		 i+1, modem->tty[i], modem->tname[i], modem->init_sp[i]);
	return;
}

/*
 * Prompt the user for the TTY database info.  A non-zero return code means
 * something was changed.  The second argument is the zero based index.
 */

static int
tty_prompt(win, i)
WINDOW *win;
int i;
{
	char *ans, t_tty[80], t_tname[80], *str_prompt(), *menu_prompt();
	char *str_rep(), *strcpy();
	static char *v_baud[8] = {"0", "300", "1200", "2400", "4800", "9600",
	 "19200", NULL};
					/* get temp TTY */
	if ((ans = str_prompt(win, i+4, 24, "TTY name", "")) == NULL)
		return(0);

	strcpy(t_tty, ans);
	clear_line(win, 21, 0, FALSE);

					/* get temp tname */
	if ((ans = str_prompt(win, i+4, 39, "Modem name", "")) == NULL)
		return(0);

	strcpy(t_tname, ans);
	clear_line(win, 21, 0, FALSE);

					/* get maximum baud */
	if ((ans = menu_prompt(win, i+4, 55, "Init speed", v_baud)) == NULL)
		return(0);

	wrefresh(win);
					/* store 'em for real */
	modem->tty[i] = str_rep(modem->tty[i], t_tty);
	modem->tname[i] = str_rep(modem->tname[i], t_tname);
	modem->init_sp[i] = atoi(ans);

	return(1);
}

/*
 * Delete a TTY entry.  Since the list must be contiguous, we collapse the
 * list to cover the hole we made.
 */

static void
del_tty(i)
int i;
{
	extern char *null_ptr;
	int j;
	char *str_rep();
	void free_ptr();
					/* collapse the list */
	for (j=i; j<modem->t_entries-1; j++) {
		modem->tty[j] = str_rep(modem->tty[j], modem->tty[j+1]);
		modem->tname[j] = str_rep(modem->tname[j], modem->tname[j+1]);
		modem->init_sp[j] = modem->init_sp[j+1];
	}
	j = modem->t_entries-1;
					/* zap the entry */
	free_ptr(modem->tty[j]);
	free_ptr(modem->tname[j]);
	modem->tty[j] = null_ptr;
	modem->tname[j] = null_ptr;
	modem->init_sp[j] = 0;
					/* update the count */
	modem->t_entries--;
	if (modem->t_cur >= modem->t_entries)
		modem->t_cur = -1;
	return;
}

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