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