msg.c revision 8438
134355Sjb/*
234355Sjb * The new sysinstall program.
389985Sbde *
4151317Sdavidxu * This is probably the last program in the `sysinstall' line - the next
534355Sjb * generation being essentially a complete rewrite.
634355Sjb *
764002Speter * $Id: msg.c,v 1.9 1995/05/08 06:06:26 jkh Exp $
834355Sjb *
934355Sjb * Copyright (c) 1995
1034355Sjb *	Jordan Hubbard.  All rights reserved.
1134355Sjb *
1234355Sjb * Redistribution and use in source and binary forms, with or without
1334355Sjb * modification, are permitted provided that the following conditions
1434355Sjb * are met:
1534355Sjb * 1. Redistributions of source code must retain the above copyright
1634355Sjb *    notice, this list of conditions and the following disclaimer,
1734355Sjb *    verbatim and that no modifications are made prior to this
1834355Sjb *    point in the file.
1934355Sjb * 2. Redistributions in binary form must reproduce the above copyright
2034355Sjb *    notice, this list of conditions and the following disclaimer in the
2134355Sjb *    documentation and/or other materials provided with the distribution.
2234355Sjb * 3. All advertising materials mentioning features or use of this software
2334355Sjb *    must display the following acknowledgement:
2434355Sjb *	This product includes software developed by Jordan Hubbard
2534355Sjb *	for the FreeBSD Project.
2634355Sjb * 4. The name of Jordan Hubbard or the FreeBSD project may not be used to
2734355Sjb *    endorse or promote products derived from this software without specific
2834355Sjb *    prior written permission.
2934355Sjb *
3034355Sjb * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
3134355Sjb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
3234355Sjb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
3334355Sjb * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
3434355Sjb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3534355Sjb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3634355Sjb * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
3734355Sjb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3834355Sjb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3934355Sjb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
4034355Sjb * SUCH DAMAGE.
4134355Sjb *
4234355Sjb */
4334355Sjb
4434355Sjb#include "sysinstall.h"
4534355Sjb#include <stdarg.h>
4634355Sjb
4734355Sjb/* Whack up an informational message on the status line, in stand-out */
4834355Sjbvoid
4934355SjbmsgYap(char *fmt, ...)
5034355Sjb{
5134355Sjb    va_list args;
5234355Sjb    char *errstr;
5334355Sjb    int attrs;
5434355Sjb
5534355Sjb    errstr = (char *)safe_malloc(FILENAME_MAX);
5634355Sjb    va_start(args, fmt);
5734355Sjb    vsnprintf(errstr, FILENAME_MAX, fmt, args);
5834355Sjb    va_end(args);
5934355Sjb    attrs = getattrs(stdscr);
6034355Sjb    attrset(A_REVERSE);
6134355Sjb    mvaddstr(23, 0, errstr);
6234355Sjb    attrset(attrs);
6334355Sjb    refresh();
6434355Sjb    free(errstr);
6534355Sjb}
6634355Sjb
6734355Sjb/* Whack up an informational message on the status line */
6834355Sjbvoid
6934355SjbmsgInfo(char *fmt, ...)
7034355Sjb{
7134355Sjb    va_list args;
7234355Sjb    char *errstr;
7334355Sjb    int attrs;
7434355Sjb
7534355Sjb    errstr = (char *)safe_malloc(FILENAME_MAX);
7634355Sjb    va_start(args, fmt);
7734355Sjb    vsnprintf(errstr, FILENAME_MAX, fmt, args);
7834355Sjb    va_end(args);
7934355Sjb    attrs = getattrs(stdscr);
8034355Sjb    attrset(A_NORMAL);
8134355Sjb    mvaddstr(23, 0, errstr);
8234355Sjb    attrset(attrs);
8334355Sjb    refresh();
8434355Sjb    free(errstr);
8534355Sjb}
8634355Sjb
8734355Sjb/* Whack up a warning on the status line */
8834355Sjbvoid
8934355SjbmsgWarn(char *fmt, ...)
9034355Sjb{
9134355Sjb    va_list args;
9234355Sjb    char *errstr;
9334355Sjb    int attrs;
9434355Sjb
9534355Sjb    errstr = (char *)safe_malloc(FILENAME_MAX);
9634355Sjb    strcpy(errstr, "Warning: ");
9734355Sjb    va_start(args, fmt);
9834355Sjb    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
9934355Sjb    va_end(args);
10034355Sjb    attrs = getattrs(stdscr);
10134355Sjb    beep();
10234355Sjb    attrset(A_REVERSE);
10334355Sjb    mvaddstr(23, 0, errstr);
10434355Sjb    attrset(attrs);
10534355Sjb    refresh();
10634355Sjb    free(errstr);
10734355Sjb}
10834355Sjb
10934355Sjb/* Whack up an error on the status line */
110127891Sdfrvoid
11134355SjbmsgError(char *fmt, ...)
11234355Sjb{
11334355Sjb    va_list args;
11434355Sjb    char *errstr;
11534355Sjb    int attrs;
11634355Sjb
11734355Sjb    errstr = (char *)safe_malloc(FILENAME_MAX);
11834355Sjb    strcpy(errstr, "Error: ");
11934355Sjb    va_start(args, fmt);
12045065Salc    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
12145065Salc    va_end(args);
12234355Sjb    beep();
12334355Sjb    attrs = getattrs(stdscr);
12434355Sjb    attrset(A_REVERSE);
12534355Sjb    mvaddstr(23, 0, errstr);
12634355Sjb    attrset(attrs);
12734355Sjb    refresh();
12834355Sjb    free(errstr);
12934355Sjb}
13034355Sjb
13134355Sjb/* Whack up a fatal error on the status line */
13234355Sjbvoid
13334355SjbmsgFatal(char *fmt, ...)
13434355Sjb{
13534355Sjb    va_list args;
13634355Sjb    char *errstr;
13734355Sjb    int attrs;
13834355Sjb
13934355Sjb    errstr = (char *)safe_malloc(FILENAME_MAX);
14034355Sjb    strcpy(errstr, "Fatal Error: ");
14134355Sjb    va_start(args, fmt);
14234355Sjb    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
14335938Sdyson    va_end(args);
14434355Sjb    beep();
14534355Sjb    attrs = getattrs(stdscr);
14634355Sjb    attrset(A_REVERSE);
14734355Sjb    mvaddstr(23, 0, errstr);
14834355Sjb    addstr(" - ");
14934355Sjb    addstr("PRESS ANY KEY TO ");
15034355Sjb    if (getpid() == 1)
15134355Sjb	addstr("REBOOT");
15234355Sjb    else
15334355Sjb	addstr("QUIT");
15434355Sjb    attrset(attrs);
15534355Sjb    refresh();
15634355Sjb    free(errstr);
15734355Sjb    getch();
15834355Sjb    systemShutdown();
15934355Sjb}
16034355Sjb
161137875Smarks/* Put up a message in a popup confirmation box */
16234355Sjbvoid
16334355SjbmsgConfirm(char *fmt, ...)
16434355Sjb{
16534355Sjb    va_list args;
16634355Sjb    char *errstr;
16735938Sdyson
16835938Sdyson    errstr = (char *)safe_malloc(FILENAME_MAX);
16935938Sdyson    va_start(args, fmt);
17035938Sdyson    vsnprintf(errstr, FILENAME_MAX, fmt, args);
17135938Sdyson    va_end(args);
17235938Sdyson    use_helpline(NULL);
17335938Sdyson    use_helpfile(NULL);
17435938Sdyson    dialog_mesgbox("User Attention Requested", errstr, -1, -1);
175147814Sjhb    free(errstr);
176147814Sjhb}
17751138Salfred
17851138Salfred/* Put up a message in a popup information box */
17934355Sjbvoid
18034355SjbmsgNotify(char *fmt, ...)
18134355Sjb{
18234355Sjb    va_list args;
18334355Sjb    char *errstr;
18434355Sjb
18534355Sjb    errstr = (char *)safe_malloc(FILENAME_MAX);
18634355Sjb    va_start(args, fmt);
18734355Sjb    vsnprintf(errstr, FILENAME_MAX, fmt, args);
18834355Sjb    va_end(args);
18934355Sjb    use_helpline(NULL);
19056115Speter    use_helpfile(NULL);
19156115Speter    dialog_msgbox("Information Dialog", errstr, -1, -1, 0);
19234355Sjb    free(errstr);
19334355Sjb}
19434355Sjb
19534355Sjb/* Put up a message in a popup yes/no box and return 1 for YES, 0 for NO */
19634355Sjbint
19734355SjbmsgYesNo(char *fmt, ...)
19834355Sjb{
19934355Sjb    va_list args;
20034355Sjb    char *errstr;
20134355Sjb    int ret;
20234925Sdufault
20334925Sdufault    errstr = (char *)safe_malloc(FILENAME_MAX);
20434925Sdufault    va_start(args, fmt);
20534925Sdufault    vsnprintf(errstr, FILENAME_MAX, fmt, args);
20634925Sdufault    va_end(args);
20734925Sdufault    use_helpline(NULL);
20834925Sdufault    use_helpfile(NULL);
20934925Sdufault    ret = dialog_yesno("User Confirmation Requested", errstr, -1, -1);
21035938Sdyson    free(errstr);
21140931Sdg    return ret;
21246155Sphk}
21351791Smarcel
21451791Smarcel/* Put up a message in an input box and return the value */
21551791Smarcelchar *
21651791SmarcelmsgGetInput(char *buf, char *fmt, ...)
217112895Sjeff{
218112895Sjeff    va_list args;
21956272Srwatson    char *errstr;
22056272Srwatson    static char input_buffer[256];
22156272Srwatson    int rval;
22256272Srwatson
22356272Srwatson    errstr = (char *)safe_malloc(FILENAME_MAX);
22456272Srwatson    va_start(args, fmt);
22556272Srwatson    vsnprintf(errstr, FILENAME_MAX, fmt, args);
22656272Srwatson    va_end(args);
22754803Srwatson    use_helpline(NULL);
22854803Srwatson    use_helpfile(NULL);
22954803Srwatson    if (buf)
23055943Sjasone	strcpy(input_buffer, buf);
23156115Speter    else
23256115Speter	input_buffer[0] = '\0';
23359288Sjlemon    rval = dialog_inputbox("Value Required", errstr, -1, -1, input_buffer);
23459288Sjlemon    free(errstr);
23561719Srwatson    if (!rval)
23675039Srwatson	return input_buffer;
23775039Srwatson    else
23875427Srwatson	return NULL;
23983652Speter}
24083796Srwatson
24185891Sphk/* Write something to the debugging port */
24290889Sjulianvoid
24390889SjulianmsgDebug(char *fmt, ...)
24490889Sjulian{
245103972Sarchie    va_list args;
246103972Sarchie    char *dbg;
247103972Sarchie
248100897Srwatson    dbg = (char *)safe_malloc(FILENAME_MAX);
249100897Srwatson    strcpy(dbg, "DEBUG: ");
250100897Srwatson    va_start(args, fmt);
251100897Srwatson    vsnprintf((char *)(dbg + strlen(dbg)), FILENAME_MAX, fmt, args);
252100897Srwatson    va_end(args);
253100897Srwatson    write(DebugFD, dbg, strlen(dbg));
25496084Smux    free(dbg);
25597372Smarcel}
25699856Salfred