msg.c revision 8628
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 * 78628Sjkh * $Id: msg.c,v 1.13 1995/05/18 14:11: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 558317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 568262Sjkh va_start(args, fmt); 578347Sjkh vsnprintf(errstr, FILENAME_MAX, fmt, args); 588262Sjkh va_end(args); 598262Sjkh attrs = getattrs(stdscr); 608314Sjkh attrset(A_REVERSE); 618262Sjkh mvaddstr(23, 0, errstr); 628262Sjkh attrset(attrs); 638262Sjkh refresh(); 648628Sjkh if (OnVTY) 658628Sjkh msgDebug("Informational message `%s'\n", errstr); 668262Sjkh free(errstr); 678262Sjkh} 688262Sjkh 698097Sjkh/* Whack up an informational message on the status line */ 708097Sjkhvoid 718097SjkhmsgInfo(char *fmt, ...) 728097Sjkh{ 738097Sjkh va_list args; 748097Sjkh char *errstr; 758262Sjkh int attrs; 768097Sjkh 778317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 788097Sjkh va_start(args, fmt); 798347Sjkh vsnprintf(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(); 868628Sjkh if (OnVTY) 878628Sjkh msgDebug("Informational message `%s'\n", errstr); 888097Sjkh free(errstr); 898097Sjkh} 908097Sjkh 918097Sjkh/* Whack up a warning on the status line */ 928097Sjkhvoid 938097SjkhmsgWarn(char *fmt, ...) 948097Sjkh{ 958097Sjkh va_list args; 968097Sjkh char *errstr; 978262Sjkh int attrs; 988097Sjkh 998317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 1008097Sjkh strcpy(errstr, "Warning: "); 1018097Sjkh va_start(args, fmt); 1028097Sjkh vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); 1038097Sjkh va_end(args); 1048262Sjkh attrs = getattrs(stdscr); 1058097Sjkh beep(); 1068314Sjkh attrset(A_REVERSE); 1078262Sjkh mvaddstr(23, 0, errstr); 1088262Sjkh attrset(attrs); 1098262Sjkh refresh(); 1108628Sjkh if (OnVTY) 1118628Sjkh msgDebug("Warning message `%s'\n", errstr); 1128097Sjkh free(errstr); 1138097Sjkh} 1148097Sjkh 1158097Sjkh/* Whack up an error on the status line */ 1168097Sjkhvoid 1178097SjkhmsgError(char *fmt, ...) 1188097Sjkh{ 1198097Sjkh va_list args; 1208097Sjkh char *errstr; 1218262Sjkh int attrs; 1228097Sjkh 1238317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 1248097Sjkh strcpy(errstr, "Error: "); 1258097Sjkh va_start(args, fmt); 1268097Sjkh vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); 1278097Sjkh va_end(args); 1288097Sjkh beep(); 1298262Sjkh attrs = getattrs(stdscr); 1308314Sjkh attrset(A_REVERSE); 1318262Sjkh mvaddstr(23, 0, errstr); 1328262Sjkh attrset(attrs); 1338262Sjkh refresh(); 1348628Sjkh if (OnVTY) 1358628Sjkh msgDebug("Error message `%s'\n", errstr); 1368097Sjkh free(errstr); 1378097Sjkh} 1388097Sjkh 1398097Sjkh/* Whack up a fatal error on the status line */ 1408097Sjkhvoid 1418097SjkhmsgFatal(char *fmt, ...) 1428097Sjkh{ 1438097Sjkh va_list args; 1448097Sjkh char *errstr; 1458262Sjkh int attrs; 1468097Sjkh 1478317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 1488097Sjkh strcpy(errstr, "Fatal Error: "); 1498097Sjkh va_start(args, fmt); 1508097Sjkh vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); 1518097Sjkh va_end(args); 1528097Sjkh beep(); 1538262Sjkh attrs = getattrs(stdscr); 1548314Sjkh attrset(A_REVERSE); 1558262Sjkh mvaddstr(23, 0, errstr); 1568097Sjkh addstr(" - "); 1578097Sjkh addstr("PRESS ANY KEY TO "); 1588097Sjkh if (getpid() == 1) 1598097Sjkh addstr("REBOOT"); 1608097Sjkh else 1618097Sjkh addstr("QUIT"); 1628262Sjkh attrset(attrs); 1638262Sjkh refresh(); 1648628Sjkh if (OnVTY) 1658628Sjkh msgDebug("Fatal error `%s'!\n", errstr); 1668097Sjkh free(errstr); 1678097Sjkh getch(); 1688097Sjkh systemShutdown(); 1698097Sjkh} 1708097Sjkh 1718208Sjkh/* Put up a message in a popup confirmation box */ 1728208Sjkhvoid 1738208SjkhmsgConfirm(char *fmt, ...) 1748208Sjkh{ 1758208Sjkh va_list args; 1768208Sjkh char *errstr; 1778208Sjkh 1788317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 1798208Sjkh va_start(args, fmt); 1808208Sjkh vsnprintf(errstr, FILENAME_MAX, fmt, args); 1818208Sjkh va_end(args); 1828208Sjkh use_helpline(NULL); 1838208Sjkh use_helpfile(NULL); 1848628Sjkh if (OnVTY) 1858628Sjkh msgDebug("User confirmation requested (type ALT-F1)\n"); 1868556Sjkh dialog_notify(errstr); 1878208Sjkh free(errstr); 1888208Sjkh} 1898208Sjkh 1908302Sjkh/* Put up a message in a popup information box */ 1918302Sjkhvoid 1928302SjkhmsgNotify(char *fmt, ...) 1938302Sjkh{ 1948302Sjkh va_list args; 1958302Sjkh char *errstr; 1968556Sjkh WINDOW *w; 1978302Sjkh 1988317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 1998302Sjkh va_start(args, fmt); 2008302Sjkh vsnprintf(errstr, FILENAME_MAX, fmt, args); 2018302Sjkh va_end(args); 2028302Sjkh use_helpline(NULL); 2038302Sjkh use_helpfile(NULL); 2048628Sjkh msgDebug("Notify: %s\n", errstr); 2058556Sjkh w = dupwin(newscr); 2068438Sjkh dialog_msgbox("Information Dialog", errstr, -1, -1, 0); 2078556Sjkh touchwin(w); 2088556Sjkh wrefresh(w); 2098556Sjkh delwin(w); 2108302Sjkh free(errstr); 2118302Sjkh} 2128302Sjkh 2138208Sjkh/* Put up a message in a popup yes/no box and return 1 for YES, 0 for NO */ 2148208Sjkhint 2158208SjkhmsgYesNo(char *fmt, ...) 2168208Sjkh{ 2178208Sjkh va_list args; 2188208Sjkh char *errstr; 2198208Sjkh int ret; 2208556Sjkh WINDOW *w; 2218208Sjkh 2228317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 2238208Sjkh va_start(args, fmt); 2248208Sjkh vsnprintf(errstr, FILENAME_MAX, fmt, args); 2258208Sjkh va_end(args); 2268208Sjkh use_helpline(NULL); 2278208Sjkh use_helpfile(NULL); 2288556Sjkh w = dupwin(newscr); 2298628Sjkh if (OnVTY) 2308628Sjkh msgDebug("User decision requested (type ALT-F1)\n"); 2318281Sjkh ret = dialog_yesno("User Confirmation Requested", errstr, -1, -1); 2328556Sjkh touchwin(w); 2338556Sjkh wrefresh(w); 2348556Sjkh delwin(w); 2358208Sjkh free(errstr); 2368208Sjkh return ret; 2378208Sjkh} 2388262Sjkh 2398262Sjkh/* Put up a message in an input box and return the value */ 2408262Sjkhchar * 2418262SjkhmsgGetInput(char *buf, char *fmt, ...) 2428262Sjkh{ 2438262Sjkh va_list args; 2448262Sjkh char *errstr; 2458278Sjkh static char input_buffer[256]; 2468262Sjkh int rval; 2478556Sjkh WINDOW *w; 2488262Sjkh 2498317Sjkh errstr = (char *)safe_malloc(FILENAME_MAX); 2508262Sjkh va_start(args, fmt); 2518262Sjkh vsnprintf(errstr, FILENAME_MAX, fmt, args); 2528262Sjkh va_end(args); 2538262Sjkh use_helpline(NULL); 2548262Sjkh use_helpfile(NULL); 2558302Sjkh if (buf) 2568302Sjkh strcpy(input_buffer, buf); 2578302Sjkh else 2588302Sjkh input_buffer[0] = '\0'; 2598556Sjkh w = dupwin(newscr); 2608628Sjkh if (OnVTY) 2618628Sjkh msgDebug("User input requested (type ALT-F1)\n"); 2628262Sjkh rval = dialog_inputbox("Value Required", errstr, -1, -1, input_buffer); 2638556Sjkh touchwin(w); 2648556Sjkh wrefresh(w); 2658556Sjkh delwin(w); 2668262Sjkh free(errstr); 2678262Sjkh if (!rval) 2688262Sjkh return input_buffer; 2698262Sjkh else 2708262Sjkh return NULL; 2718262Sjkh} 2728262Sjkh 2738347Sjkh/* Write something to the debugging port */ 2748347Sjkhvoid 2758347SjkhmsgDebug(char *fmt, ...) 2768347Sjkh{ 2778347Sjkh va_list args; 2788347Sjkh char *dbg; 2798347Sjkh 2808594Sjkh if (DebugFD == -1) 2818594Sjkh return; 2828347Sjkh dbg = (char *)safe_malloc(FILENAME_MAX); 2838347Sjkh strcpy(dbg, "DEBUG: "); 2848347Sjkh va_start(args, fmt); 2858347Sjkh vsnprintf((char *)(dbg + strlen(dbg)), FILENAME_MAX, fmt, args); 2868347Sjkh va_end(args); 2878347Sjkh write(DebugFD, dbg, strlen(dbg)); 2888347Sjkh free(dbg); 2898347Sjkh} 290