msg.c revision 8281
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 * 78281Sjkh * $Id: msg.c,v 1.4 1995/05/04 19:48:16 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); 1768281Sjkh dialog_mesgbox("User Attention Requested", 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); 1948281Sjkh ret = dialog_yesno("User Confirmation Requested", 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; 2058278Sjkh static char input_buffer[256]; 2068262Sjkh int rval; 2078262Sjkh 2088262Sjkh errstr = (char *)malloc(FILENAME_MAX); 2098262Sjkh va_start(args, fmt); 2108262Sjkh vsnprintf(errstr, FILENAME_MAX, fmt, args); 2118262Sjkh va_end(args); 2128262Sjkh use_helpline(NULL); 2138262Sjkh use_helpfile(NULL); 2148262Sjkh strcpy(input_buffer, buf); 2158262Sjkh rval = dialog_inputbox("Value Required", errstr, -1, -1, input_buffer); 2168262Sjkh free(errstr); 2178262Sjkh if (!rval) 2188262Sjkh return input_buffer; 2198262Sjkh else 2208262Sjkh return NULL; 2218262Sjkh} 2228262Sjkh 223