msg.c revision 8347
1214501Srpaulo/*
2214501Srpaulo * The new sysinstall program.
3214501Srpaulo *
4214501Srpaulo * This is probably the last program in the `sysinstall' line - the next
5214501Srpaulo * generation being essentially a complete rewrite.
6252726Srpaulo *
7252726Srpaulo * $Id: msg.c,v 1.8 1995/05/07 05:58:57 jkh Exp $
8214501Srpaulo *
9214501Srpaulo * Copyright (c) 1995
10214501Srpaulo *	Jordan Hubbard.  All rights reserved.
11214501Srpaulo *
12214501Srpaulo * Redistribution and use in source and binary forms, with or without
13214501Srpaulo * modification, are permitted provided that the following conditions
14214501Srpaulo * are met:
15214501Srpaulo * 1. Redistributions of source code must retain the above copyright
16214501Srpaulo *    notice, this list of conditions and the following disclaimer,
17214501Srpaulo *    verbatim and that no modifications are made prior to this
18214501Srpaulo *    point in the file.
19214501Srpaulo * 2. Redistributions in binary form must reproduce the above copyright
20214501Srpaulo *    notice, this list of conditions and the following disclaimer in the
21214501Srpaulo *    documentation and/or other materials provided with the distribution.
22214501Srpaulo * 3. All advertising materials mentioning features or use of this software
23214501Srpaulo *    must display the following acknowledgement:
24214501Srpaulo *	This product includes software developed by Jordan Hubbard
25214501Srpaulo *	for the FreeBSD Project.
26214501Srpaulo * 4. The name of Jordan Hubbard or the FreeBSD project may not be used to
27214501Srpaulo *    endorse or promote products derived from this software without specific
28214501Srpaulo *    prior written permission.
29214501Srpaulo *
30214501Srpaulo * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
31214501Srpaulo * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
32214501Srpaulo * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
33214501Srpaulo * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
34214501Srpaulo * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
35214501Srpaulo * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
36214501Srpaulo * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
37214501Srpaulo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
38214501Srpaulo * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
39214501Srpaulo * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
40214501Srpaulo * SUCH DAMAGE.
41214501Srpaulo *
42214501Srpaulo */
43214501Srpaulo
44214501Srpaulo#include "sysinstall.h"
45214501Srpaulo#include <stdarg.h>
46214501Srpaulo
47214501Srpaulo/* Whack up an informational message on the status line, in stand-out */
48214501Srpaulovoid
49214501SrpaulomsgYap(char *fmt, ...)
50214501Srpaulo{
51214501Srpaulo    va_list args;
52214501Srpaulo    char *errstr;
53214501Srpaulo    int attrs;
54214501Srpaulo
55214501Srpaulo    errstr = (char *)safe_malloc(FILENAME_MAX);
56214501Srpaulo    va_start(args, fmt);
57214501Srpaulo    vsnprintf(errstr, FILENAME_MAX, fmt, args);
58214501Srpaulo    va_end(args);
59214501Srpaulo    attrs = getattrs(stdscr);
60214501Srpaulo    attrset(A_REVERSE);
61214501Srpaulo    mvaddstr(23, 0, errstr);
62214501Srpaulo    attrset(attrs);
63214501Srpaulo    refresh();
64214501Srpaulo    free(errstr);
65214501Srpaulo}
66214501Srpaulo
67214501Srpaulo/* Whack up an informational message on the status line */
68214501Srpaulovoid
69214501SrpaulomsgInfo(char *fmt, ...)
70214501Srpaulo{
71214501Srpaulo    va_list args;
72214501Srpaulo    char *errstr;
73214501Srpaulo    int attrs;
74214501Srpaulo
75214501Srpaulo    errstr = (char *)safe_malloc(FILENAME_MAX);
76214501Srpaulo    va_start(args, fmt);
77214501Srpaulo    vsnprintf(errstr, FILENAME_MAX, fmt, args);
78214501Srpaulo    va_end(args);
79214501Srpaulo    attrs = getattrs(stdscr);
80214501Srpaulo    attrset(A_NORMAL);
81214501Srpaulo    mvaddstr(23, 0, errstr);
82214501Srpaulo    attrset(attrs);
83214501Srpaulo    refresh();
84214501Srpaulo    free(errstr);
85214501Srpaulo}
86214501Srpaulo
87214501Srpaulo/* Whack up a warning on the status line */
88214501Srpaulovoid
89214501SrpaulomsgWarn(char *fmt, ...)
90214501Srpaulo{
91214501Srpaulo    va_list args;
92214501Srpaulo    char *errstr;
93214501Srpaulo    int attrs;
94214501Srpaulo
95214501Srpaulo    errstr = (char *)safe_malloc(FILENAME_MAX);
96214501Srpaulo    strcpy(errstr, "Warning: ");
97214501Srpaulo    va_start(args, fmt);
98214501Srpaulo    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
99214501Srpaulo    va_end(args);
100214501Srpaulo    attrs = getattrs(stdscr);
101214501Srpaulo    beep();
102214501Srpaulo    attrset(A_REVERSE);
103214501Srpaulo    mvaddstr(23, 0, errstr);
104214501Srpaulo    attrset(attrs);
105214501Srpaulo    refresh();
106214501Srpaulo    free(errstr);
107214501Srpaulo}
108214501Srpaulo
109214501Srpaulo/* Whack up an error on the status line */
110214501Srpaulovoid
111214501SrpaulomsgError(char *fmt, ...)
112214501Srpaulo{
113214501Srpaulo    va_list args;
114214501Srpaulo    char *errstr;
115214501Srpaulo    int attrs;
116214501Srpaulo
117214501Srpaulo    errstr = (char *)safe_malloc(FILENAME_MAX);
118214501Srpaulo    strcpy(errstr, "Error: ");
119214501Srpaulo    va_start(args, fmt);
120214501Srpaulo    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
121214501Srpaulo    va_end(args);
122214501Srpaulo    beep();
123214501Srpaulo    attrs = getattrs(stdscr);
124214501Srpaulo    attrset(A_REVERSE);
125214501Srpaulo    mvaddstr(23, 0, errstr);
126214501Srpaulo    attrset(attrs);
127214501Srpaulo    refresh();
128214501Srpaulo    free(errstr);
129214501Srpaulo}
130214501Srpaulo
131214501Srpaulo/* Whack up a fatal error on the status line */
132214501Srpaulovoid
133214501SrpaulomsgFatal(char *fmt, ...)
134214501Srpaulo{
135214501Srpaulo    va_list args;
136214501Srpaulo    char *errstr;
137214501Srpaulo    int attrs;
138214501Srpaulo
139214501Srpaulo    errstr = (char *)safe_malloc(FILENAME_MAX);
140214501Srpaulo    strcpy(errstr, "Fatal Error: ");
141214501Srpaulo    va_start(args, fmt);
142214501Srpaulo    vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args);
143214501Srpaulo    va_end(args);
144214501Srpaulo    beep();
145214501Srpaulo    attrs = getattrs(stdscr);
146    attrset(A_REVERSE);
147    mvaddstr(23, 0, errstr);
148    addstr(" - ");
149    addstr("PRESS ANY KEY TO ");
150    if (getpid() == 1)
151	addstr("REBOOT");
152    else
153	addstr("QUIT");
154    attrset(attrs);
155    refresh();
156    free(errstr);
157    getch();
158    systemShutdown();
159}
160
161/* Put up a message in a popup confirmation box */
162void
163msgConfirm(char *fmt, ...)
164{
165    va_list args;
166    char *errstr;
167
168    errstr = (char *)safe_malloc(FILENAME_MAX);
169    va_start(args, fmt);
170    vsnprintf(errstr, FILENAME_MAX, fmt, args);
171    va_end(args);
172    use_helpline(NULL);
173    use_helpfile(NULL);
174    dialog_mesgbox("User Attention Requested", errstr, -1, -1);
175    free(errstr);
176}
177
178/* Put up a message in a popup information box */
179void
180msgNotify(char *fmt, ...)
181{
182    va_list args;
183    char *errstr;
184
185    errstr = (char *)safe_malloc(FILENAME_MAX);
186    va_start(args, fmt);
187    vsnprintf(errstr, FILENAME_MAX, fmt, args);
188    va_end(args);
189    use_helpline(NULL);
190    use_helpfile(NULL);
191    dialog_notify(errstr);
192    free(errstr);
193}
194
195/* Put up a message in a popup yes/no box and return 1 for YES, 0 for NO */
196int
197msgYesNo(char *fmt, ...)
198{
199    va_list args;
200    char *errstr;
201    int ret;
202
203    errstr = (char *)safe_malloc(FILENAME_MAX);
204    va_start(args, fmt);
205    vsnprintf(errstr, FILENAME_MAX, fmt, args);
206    va_end(args);
207    use_helpline(NULL);
208    use_helpfile(NULL);
209    ret = dialog_yesno("User Confirmation Requested", errstr, -1, -1);
210    free(errstr);
211    return ret;
212}
213
214/* Put up a message in an input box and return the value */
215char *
216msgGetInput(char *buf, char *fmt, ...)
217{
218    va_list args;
219    char *errstr;
220    static char input_buffer[256];
221    int rval;
222
223    errstr = (char *)safe_malloc(FILENAME_MAX);
224    va_start(args, fmt);
225    vsnprintf(errstr, FILENAME_MAX, fmt, args);
226    va_end(args);
227    use_helpline(NULL);
228    use_helpfile(NULL);
229    if (buf)
230	strcpy(input_buffer, buf);
231    else
232	input_buffer[0] = '\0';
233    rval = dialog_inputbox("Value Required", errstr, -1, -1, input_buffer);
234    free(errstr);
235    if (!rval)
236	return input_buffer;
237    else
238	return NULL;
239}
240
241/* Write something to the debugging port */
242void
243msgDebug(char *fmt, ...)
244{
245    va_list args;
246    char *dbg;
247
248    dbg = (char *)safe_malloc(FILENAME_MAX);
249    strcpy(dbg, "DEBUG: ");
250    va_start(args, fmt);
251    vsnprintf((char *)(dbg + strlen(dbg)), FILENAME_MAX, fmt, args);
252    va_end(args);
253    write(DebugFD, dbg, strlen(dbg));
254    free(dbg);
255}
256