1010cdda0Smrg 2010cdda0Smrg /*\ 3010cdda0Smrg * 4b4485a66Smrg * COPYRIGHT 1990 5b4485a66Smrg * DIGITAL EQUIPMENT CORPORATION 6b4485a66Smrg * MAYNARD, MASSACHUSETTS 7b4485a66Smrg * ALL RIGHTS RESERVED. 8010cdda0Smrg * 9010cdda0Smrg * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND 10010cdda0Smrg * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. 11010cdda0Smrg * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE 12010cdda0Smrg * FOR ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED 13010cdda0Smrg * WARRANTY. 14010cdda0Smrg * 15010cdda0Smrg * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT 16010cdda0Smrg * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN 17010cdda0Smrg * ADDITION TO THAT SET FORTH ABOVE. 18010cdda0Smrg * 19010cdda0Smrg * Permission to use, copy, modify, and distribute this software and its 20010cdda0Smrg * documentation for any purpose and without fee is hereby granted, provided 21010cdda0Smrg * that the above copyright notice appear in all copies and that both that 22010cdda0Smrg * copyright notice and this permission notice appear in supporting 23010cdda0Smrg * documentation, and that the name of Digital Equipment Corporation not be 24010cdda0Smrg * used in advertising or publicity pertaining to distribution of the 25010cdda0Smrg * software without specific, written prior permission. 26010cdda0Smrg \*/ 27010cdda0Smrg 28010cdda0Smrg#include "utils.h" 29010cdda0Smrg#include <ctype.h> 30010cdda0Smrg#include <stdlib.h> 31010cdda0Smrg 32010cdda0Smrg/***====================================================================***/ 33010cdda0Smrg/*** PRINT FUNCTIONS ***/ 34010cdda0Smrg/***====================================================================***/ 35010cdda0Smrg 36affd2f3fSmrg#define errorFile stderr 37010cdda0Smrg 38010cdda0Smrgvoid 39b4485a66SmrguInformation(const char *s, ...) 40010cdda0Smrg{ 41010cdda0Smrg va_list ap; 42010cdda0Smrg 43010cdda0Smrg va_start(ap, s); 44b4485a66Smrg vfprintf(errorFile, s, ap); 45010cdda0Smrg fflush(errorFile); 46010cdda0Smrg va_end(ap); 47010cdda0Smrg return; 48010cdda0Smrg} 49010cdda0Smrg 50010cdda0Smrg/***====================================================================***/ 51010cdda0Smrg 52010cdda0Smrgvoid 53b4485a66SmrguAction(const char *s, ...) 54010cdda0Smrg{ 55010cdda0Smrg va_list ap; 56010cdda0Smrg 57010cdda0Smrg va_start(ap, s); 58b4485a66Smrg fprintf(errorFile, " "); 59b4485a66Smrg vfprintf(errorFile, s, ap); 60010cdda0Smrg fflush(errorFile); 61010cdda0Smrg va_end(ap); 62010cdda0Smrg return; 63010cdda0Smrg} 64010cdda0Smrg 65010cdda0Smrg/***====================================================================***/ 66010cdda0Smrg 67010cdda0Smrgvoid 68b4485a66SmrguWarning(const char *s, ...) 69010cdda0Smrg{ 70010cdda0Smrg va_list ap; 71010cdda0Smrg 72010cdda0Smrg va_start(ap, s); 73b4485a66Smrg fprintf(errorFile, "Warning: "); 74b4485a66Smrg vfprintf(errorFile, s, ap); 75010cdda0Smrg fflush(errorFile); 76010cdda0Smrg va_end(ap); 77010cdda0Smrg return; 78010cdda0Smrg} 79010cdda0Smrg 80010cdda0Smrg/***====================================================================***/ 81010cdda0Smrg 82010cdda0Smrgvoid 83b4485a66SmrguError(const char *s, ...) 84010cdda0Smrg{ 85010cdda0Smrg va_list ap; 86010cdda0Smrg 87010cdda0Smrg va_start(ap, s); 88b4485a66Smrg fprintf(errorFile, "Error: "); 89b4485a66Smrg vfprintf(errorFile, s, ap); 90010cdda0Smrg fflush(errorFile); 91010cdda0Smrg va_end(ap); 92010cdda0Smrg return; 93010cdda0Smrg} 94010cdda0Smrg 95010cdda0Smrg/***====================================================================***/ 96010cdda0Smrg 97010cdda0Smrgvoid 98b4485a66SmrguFatalError(const char *s, ...) 99010cdda0Smrg{ 100010cdda0Smrg va_list ap; 101010cdda0Smrg 102010cdda0Smrg va_start(ap, s); 103b4485a66Smrg fprintf(errorFile, "Fatal Error: "); 104b4485a66Smrg vfprintf(errorFile, s, ap); 105b4485a66Smrg fprintf(errorFile, " Exiting\n"); 106010cdda0Smrg fflush(errorFile); 107010cdda0Smrg va_end(ap); 108010cdda0Smrg exit(1); 109010cdda0Smrg /* NOTREACHED */ 110010cdda0Smrg} 111010cdda0Smrg 112010cdda0Smrg/***====================================================================***/ 113010cdda0Smrg 114010cdda0Smrgvoid 115b4485a66SmrguInternalError(const char *s, ...) 116010cdda0Smrg{ 117010cdda0Smrg va_list ap; 118010cdda0Smrg 119010cdda0Smrg va_start(ap, s); 120b4485a66Smrg fprintf(errorFile, "Internal error: "); 121b4485a66Smrg vfprintf(errorFile, s, ap); 122010cdda0Smrg fflush(errorFile); 123010cdda0Smrg va_end(ap); 124010cdda0Smrg return; 125010cdda0Smrg} 126010cdda0Smrg 127010cdda0Smrg/***====================================================================***/ 128010cdda0Smrg 129010cdda0Smrg#ifndef HAVE_STRCASECMP 130010cdda0Smrgint 131b4485a66SmrguStrCaseCmp(const char *str1, const char *str2) 132010cdda0Smrg{ 133b4485a66Smrg char buf1[512], buf2[512]; 134010cdda0Smrg char c, *s; 135b4485a66Smrg 136010cdda0Smrg register int n; 137010cdda0Smrg 138b4485a66Smrg for (n = 0, s = buf1; (c = *str1++); n++) { 139b4485a66Smrg if (isupper(c)) 140b4485a66Smrg c = tolower(c); 141b4485a66Smrg if (n > 510) 142b4485a66Smrg break; 143b4485a66Smrg *s++ = c; 144010cdda0Smrg } 145010cdda0Smrg *s = '\0'; 146b4485a66Smrg for (n = 0, s = buf2; (c = *str2++); n++) { 147b4485a66Smrg if (isupper(c)) 148b4485a66Smrg c = tolower(c); 149b4485a66Smrg if (n > 510) 150b4485a66Smrg break; 151b4485a66Smrg *s++ = c; 152010cdda0Smrg } 153010cdda0Smrg *s = '\0'; 154010cdda0Smrg return (strcmp(buf1, buf2)); 155010cdda0Smrg} 156010cdda0Smrg#endif 157