/* $NetBSD: msg_sys.def,v 1.1.1.1 1997/09/26 21:16:38 phil Exp $ */ /* * 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 */ void beep (void) { 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; 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 beep (); } else if (count < max_chars && isprint(ch)) { if (do_echo) waddch (msg_win, ch); val[count++] = ch; } else beep (); if (do_echo) wrefresh(msg_win); } if (do_echo) waddch(msg_win, '\n'); if (count != 0) val[count] = '\0'; /* Do a string copy if needed to get default */ if (count == 0 && def != NULL && val != def) strncpy (val, def, max_chars); } 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; }