msg.c revision 8262
18097Sjkh/*
28097Sjkh * The new sysinstall program.
38097Sjkh *
48097Sjkh * This is probably the last program in the `sysinstall' line - the next
58097Sjkh * generation being essentially a complete rewrite.
68097Sjkh *
78262Sjkh * $Id: msg.c,v 1.2 1995/05/01 21:56:29 jkh Exp $
88097Sjkh *
98097Sjkh * Copyright (c) 1995
108097Sjkh *	Jordan Hubbard.  All rights reserved.
118097Sjkh *
128097Sjkh * Redistribution and use in source and binary forms, with or without
138097Sjkh * modification, are permitted provided that the following conditions
148097Sjkh * are met:
158097Sjkh * 1. Redistributions of source code must retain the above copyright
168097Sjkh *    notice, this list of conditions and the following disclaimer,
178097Sjkh *    verbatim and that no modifications are made prior to this
188097Sjkh *    point in the file.
198097Sjkh * 2. Redistributions in binary form must reproduce the above copyright
208097Sjkh *    notice, this list of conditions and the following disclaimer in the
218097Sjkh *    documentation and/or other materials provided with the distribution.
228097Sjkh * 3. All advertising materials mentioning features or use of this software
238097Sjkh *    must display the following acknowledgement:
248097Sjkh *	This product includes software developed by Jordan Hubbard
258097Sjkh *	for the FreeBSD Project.
268097Sjkh * 4. The name of Jordan Hubbard or the FreeBSD project may not be used to
278097Sjkh *    endorse or promote products derived from this software without specific
288097Sjkh *    prior written permission.
298097Sjkh *
308097Sjkh * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
318097Sjkh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
328097Sjkh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
338097Sjkh * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
348097Sjkh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
358097Sjkh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
368097Sjkh * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
378097Sjkh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
388097Sjkh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
398097Sjkh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
408097Sjkh * SUCH DAMAGE.
418097Sjkh *
428097Sjkh */
438097Sjkh
448097Sjkh#include "sysinstall.h"
458097Sjkh#include <stdarg.h>
468097Sjkh
478262Sjkh/* Whack up an informational message on the status line, in stand-out */
488262Sjkhvoid
498262SjkhmsgYap(char *fmt, ...)
508262Sjkh{
518262Sjkh    va_list args;
528262Sjkh    char *errstr;
538262Sjkh    int attrs;
548262Sjkh
558262Sjkh    errstr = (char *)malloc(FILENAME_MAX);
568262Sjkh    errstr[0] = '\0';
578262Sjkh    va_start(args, fmt);
588262Sjkh    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
598262Sjkh    va_end(args);
608262Sjkh    attrs = getattrs(stdscr);
618262Sjkh    attrset(A_BOLD);
628262Sjkh    mvaddstr(23, 0, errstr);
638262Sjkh    attrset(attrs);
648262Sjkh    refresh();
658262Sjkh    free(errstr);
668262Sjkh}
678262Sjkh
688097Sjkh/* Whack up an informational message on the status line */
698097Sjkhvoid
708097SjkhmsgInfo(char *fmt, ...)
718097Sjkh{
728097Sjkh    va_list args;
738097Sjkh    char *errstr;
748262Sjkh    int attrs;
758097Sjkh
768097Sjkh    errstr = (char *)malloc(FILENAME_MAX);
778097Sjkh    errstr[0] = '\0';
788097Sjkh    va_start(args, fmt);
798097Sjkh    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
808097Sjkh    va_end(args);
818262Sjkh    attrs = getattrs(stdscr);
828262Sjkh    attrset(A_NORMAL);
838262Sjkh    mvaddstr(23, 0, errstr);
848262Sjkh    attrset(attrs);
858262Sjkh    refresh();
868097Sjkh    free(errstr);
878097Sjkh}
888097Sjkh
898097Sjkh/* Whack up a warning on the status line */
908097Sjkhvoid
918097SjkhmsgWarn(char *fmt, ...)
928097Sjkh{
938097Sjkh    va_list args;
948097Sjkh    char *errstr;
958262Sjkh    int attrs;
968097Sjkh
978097Sjkh    errstr = (char *)malloc(FILENAME_MAX);
988097Sjkh    strcpy(errstr, "Warning: ");
998097Sjkh    va_start(args, fmt);
1008097Sjkh    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
1018097Sjkh    va_end(args);
1028262Sjkh    attrs = getattrs(stdscr);
1038097Sjkh    beep();
1048262Sjkh    attrset(A_BOLD);
1058262Sjkh    mvaddstr(23, 0, errstr);
1068262Sjkh    attrset(attrs);
1078262Sjkh    refresh();
1088097Sjkh    free(errstr);
1098097Sjkh}
1108097Sjkh
1118097Sjkh/* Whack up an error on the status line */
1128097Sjkhvoid
1138097SjkhmsgError(char *fmt, ...)
1148097Sjkh{
1158097Sjkh    va_list args;
1168097Sjkh    char *errstr;
1178262Sjkh    int attrs;
1188097Sjkh
1198097Sjkh    errstr = (char *)malloc(FILENAME_MAX);
1208097Sjkh    strcpy(errstr, "Error: ");
1218097Sjkh    va_start(args, fmt);
1228097Sjkh    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
1238097Sjkh    va_end(args);
1248097Sjkh    beep();
1258262Sjkh    attrs = getattrs(stdscr);
1268262Sjkh    attrset(A_BOLD);
1278262Sjkh    mvaddstr(23, 0, errstr);
1288262Sjkh    attrset(attrs);
1298262Sjkh    refresh();
1308097Sjkh    free(errstr);
1318097Sjkh}
1328097Sjkh
1338097Sjkh/* Whack up a fatal error on the status line */
1348097Sjkhvoid
1358097SjkhmsgFatal(char *fmt, ...)
1368097Sjkh{
1378097Sjkh    va_list args;
1388097Sjkh    char *errstr;
1398262Sjkh    int attrs;
1408097Sjkh
1418097Sjkh    errstr = (char *)malloc(FILENAME_MAX);
1428097Sjkh    strcpy(errstr, "Fatal Error: ");
1438097Sjkh    va_start(args, fmt);
1448097Sjkh    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
1458097Sjkh    va_end(args);
1468097Sjkh    beep();
1478262Sjkh    attrs = getattrs(stdscr);
1488262Sjkh    attrset(A_BOLD);
1498262Sjkh    mvaddstr(23, 0, errstr);
1508097Sjkh    addstr(" - ");
1518097Sjkh    addstr("PRESS ANY KEY TO ");
1528097Sjkh    if (getpid() == 1)
1538097Sjkh	addstr("REBOOT");
1548097Sjkh    else
1558097Sjkh	addstr("QUIT");
1568262Sjkh    attrset(attrs);
1578262Sjkh    refresh();
1588097Sjkh    free(errstr);
1598097Sjkh    getch();
1608097Sjkh    systemShutdown();
1618097Sjkh}
1628097Sjkh
1638208Sjkh/* Put up a message in a popup confirmation box */
1648208Sjkhvoid
1658208SjkhmsgConfirm(char *fmt, ...)
1668208Sjkh{
1678208Sjkh    va_list args;
1688208Sjkh    char *errstr;
1698208Sjkh
1708208Sjkh    errstr = (char *)malloc(FILENAME_MAX);
1718208Sjkh    va_start(args, fmt);
1728208Sjkh    vsnprintf(errstr, FILENAME_MAX, fmt, args);
1738208Sjkh    va_end(args);
1748208Sjkh    use_helpline(NULL);
1758208Sjkh    use_helpfile(NULL);
1768208Sjkh    dialog_mesgbox("User Confirmation Request", errstr, -1, -1);
1778208Sjkh    free(errstr);
1788208Sjkh}
1798208Sjkh
1808208Sjkh/* Put up a message in a popup yes/no box and return 1 for YES, 0 for NO */
1818208Sjkhint
1828208SjkhmsgYesNo(char *fmt, ...)
1838208Sjkh{
1848208Sjkh    va_list args;
1858208Sjkh    char *errstr;
1868208Sjkh    int ret;
1878208Sjkh
1888208Sjkh    errstr = (char *)malloc(FILENAME_MAX);
1898208Sjkh    va_start(args, fmt);
1908208Sjkh    vsnprintf(errstr, FILENAME_MAX, fmt, args);
1918208Sjkh    va_end(args);
1928208Sjkh    use_helpline(NULL);
1938208Sjkh    use_helpfile(NULL);
1948208Sjkh    ret = dialog_yesno("User Confirmation Request", errstr, -1, -1);
1958208Sjkh    free(errstr);
1968208Sjkh    return ret;
1978208Sjkh}
1988262Sjkh
1998262Sjkh/* Put up a message in an input box and return the value */
2008262Sjkhchar *
2018262SjkhmsgGetInput(char *buf, char *fmt, ...)
2028262Sjkh{
2038262Sjkh    va_list args;
2048262Sjkh    char *errstr;
2058262Sjkh    char *ret;
2068262Sjkh    static input_buffer[256];
2078262Sjkh    int rval;
2088262Sjkh
2098262Sjkh    errstr = (char *)malloc(FILENAME_MAX);
2108262Sjkh    va_start(args, fmt);
2118262Sjkh    vsnprintf(errstr, FILENAME_MAX, fmt, args);
2128262Sjkh    va_end(args);
2138262Sjkh    use_helpline(NULL);
2148262Sjkh    use_helpfile(NULL);
2158262Sjkh    strcpy(input_buffer, buf);
2168262Sjkh    rval = dialog_inputbox("Value Required", errstr, -1, -1, input_buffer);
2178262Sjkh    free(errstr);
2188262Sjkh    if (!rval)
2198262Sjkh	return input_buffer;
2208262Sjkh    else
2218262Sjkh	return NULL;
2228262Sjkh}
2238262Sjkh
224