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