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.