1999-06-19 04:40:29 +04:00
|
|
|
/* $NetBSD: msg_sys.def,v 1.5 1999/06/19 00:40:29 cgd Exp $ */
|
1997-09-27 01:16:38 +04:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Copyright 1997 Piermont Information Systems Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Written by Philip A. Nelson for Piermont Information Systems Inc.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
|
|
* must display the following acknowledgement:
|
|
|
|
* This product includes software develooped for the NetBSD Project by
|
|
|
|
* Piermont Information Systems Inc.
|
|
|
|
* 4. The name of Piermont Information Systems Inc. may not be used to endorse
|
|
|
|
* or promote products derived from this software without specific prior
|
|
|
|
* written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
|
|
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
|
|
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
|
|
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
static WINDOW *msg_win = NULL;
|
|
|
|
static char cbuffer [ MAXSTR ];
|
|
|
|
static int do_echo = 1;
|
|
|
|
|
|
|
|
/* Routines */
|
|
|
|
|
1999-04-25 13:10:07 +04:00
|
|
|
void msg_beep (void)
|
1997-09-27 01:16:38 +04:00
|
|
|
{
|
|
|
|
fprintf (stderr, "\a");
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_window(WINDOW *window)
|
|
|
|
{
|
|
|
|
msg_win = window;
|
|
|
|
}
|
|
|
|
|
|
|
|
char *msg_string (int msg_no)
|
|
|
|
{
|
|
|
|
return msg_list[msg_no];
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_clear(void)
|
|
|
|
{
|
|
|
|
wclear (msg_win);
|
|
|
|
wrefresh (msg_win);
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_standout(void)
|
|
|
|
{
|
|
|
|
wstandout(msg_win);
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_standend(void)
|
|
|
|
{
|
|
|
|
wstandend(msg_win);
|
|
|
|
}
|
|
|
|
|
|
|
|
int msg_vprintf (char *fmt, va_list ap)
|
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
ret = vsnprintf (cbuffer, MAXSTR, fmt, ap);
|
|
|
|
waddstr (msg_win, cbuffer);
|
|
|
|
wrefresh (msg_win);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_display(int msg_no, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start(ap, msg_no);
|
|
|
|
wclear (msg_win);
|
|
|
|
wmove (msg_win, 0, 0);
|
|
|
|
(void)msg_vprintf (msg_list[msg_no], ap);
|
|
|
|
va_end(ap);
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_display_add(int msg_no, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start (ap, msg_no);
|
|
|
|
(void)msg_vprintf (msg_list[msg_no], ap);
|
|
|
|
va_end (ap);
|
|
|
|
}
|
|
|
|
|
|
|
|
int msg_printf (char *fmt, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
int res;
|
|
|
|
|
|
|
|
va_start (ap, fmt);
|
|
|
|
wclear (msg_win);
|
|
|
|
wmove (msg_win, 0, 0);
|
|
|
|
res = msg_vprintf (fmt, ap);
|
|
|
|
va_end (ap);
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
int msg_printf_add (char *fmt, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
int res;
|
|
|
|
|
|
|
|
va_start (ap, fmt);
|
|
|
|
res = msg_vprintf (fmt, ap);
|
|
|
|
va_end (ap);
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void msg_vprompt (char *msg, char *def, char *val, int max_chars,
|
|
|
|
va_list ap)
|
|
|
|
{
|
|
|
|
int ch;
|
|
|
|
int count = 0;
|
|
|
|
int y,x;
|
1999-06-19 04:00:48 +04:00
|
|
|
char *ibuf = alloca(max_chars);
|
1997-09-27 01:16:38 +04:00
|
|
|
|
|
|
|
msg_vprintf (msg, ap);
|
|
|
|
if (def != NULL && *def) {
|
|
|
|
waddstr (msg_win, " [");
|
|
|
|
waddstr (msg_win, def);
|
|
|
|
waddstr (msg_win, "]");
|
|
|
|
}
|
|
|
|
waddstr (msg_win, ": ");
|
|
|
|
wrefresh (msg_win);
|
|
|
|
|
|
|
|
while ((ch = wgetch(msg_win)) != '\n') {
|
|
|
|
if (ch == 0x08 || ch == 0x7f) { /* bs or del */
|
|
|
|
if (count > 0) {
|
|
|
|
count--;
|
|
|
|
if (do_echo) {
|
|
|
|
getyx(msg_win, y, x);
|
|
|
|
x--;
|
|
|
|
wmove(msg_win, y, x);
|
|
|
|
wdelch(msg_win);
|
|
|
|
}
|
|
|
|
} else
|
1999-04-25 13:10:07 +04:00
|
|
|
msg_beep ();
|
1999-06-19 04:13:19 +04:00
|
|
|
} else if (ch == 0x15) { /* ^U; line kill */
|
|
|
|
while (count > 0) {
|
|
|
|
count--;
|
|
|
|
if (do_echo) {
|
|
|
|
getyx(msg_win, y, x);
|
|
|
|
x--;
|
|
|
|
wmove(msg_win, y, x);
|
|
|
|
wdelch(msg_win);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (count < (max_chars - 1) && isprint(ch)) {
|
1997-09-27 01:16:38 +04:00
|
|
|
if (do_echo)
|
|
|
|
waddch (msg_win, ch);
|
1999-06-19 04:00:48 +04:00
|
|
|
ibuf[count++] = ch;
|
1997-09-27 01:16:38 +04:00
|
|
|
} else
|
1999-04-25 13:10:07 +04:00
|
|
|
msg_beep ();
|
1997-09-27 01:16:38 +04:00
|
|
|
if (do_echo)
|
|
|
|
wrefresh(msg_win);
|
|
|
|
}
|
|
|
|
if (do_echo)
|
|
|
|
waddch(msg_win, '\n');
|
|
|
|
|
1999-06-19 04:00:48 +04:00
|
|
|
/* copy the appropriate string to the output */
|
|
|
|
if (count != 0) {
|
|
|
|
ibuf[count] = '\0';
|
|
|
|
strcpy(val, ibuf); /* size known to be OK */
|
1999-06-19 04:40:29 +04:00
|
|
|
} else if (def != NULL && val != def) {
|
1999-06-19 04:00:48 +04:00
|
|
|
strncpy(val, def, max_chars);
|
|
|
|
val[max_chars - 1] = '\0';
|
|
|
|
}
|
1997-09-27 01:16:38 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
void msg_prompt_addstr (char *fmt, char *def, char *val, int max_chars, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start (ap, max_chars);
|
|
|
|
msg_vprompt (fmt, def, val, max_chars, ap);
|
|
|
|
va_end(ap);
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_prompt_add (int msg_no, char *def, char *val, int max_chars, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start (ap, max_chars);
|
|
|
|
msg_vprompt (msg_list[msg_no], def, val, max_chars, ap);
|
|
|
|
va_end(ap);
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_prompt_str (char *msg, char *def, char *val, int max_chars, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start (ap, max_chars);
|
|
|
|
wclear (msg_win);
|
|
|
|
wmove (msg_win, 0, 0);
|
|
|
|
msg_vprompt (msg, def, val, max_chars, ap);
|
|
|
|
va_end (ap);
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_prompt (int msg_no, char *def, char *val, int max_chars, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start (ap, max_chars);
|
|
|
|
wclear (msg_win);
|
|
|
|
wmove (msg_win, 0, 0);
|
|
|
|
msg_vprompt (msg_list[msg_no], def, val, max_chars, ap);
|
|
|
|
va_end (ap);
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_noecho()
|
|
|
|
{
|
|
|
|
do_echo = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void msg_echo()
|
|
|
|
{
|
|
|
|
do_echo = 1;
|
|
|
|
}
|