utils.h revision 010cdda0
1010cdda0Smrg#ifndef UTILS_H 2010cdda0Smrg#define UTILS_H 1 3010cdda0Smrg 4010cdda0Smrg /*\ 5010cdda0Smrg * $Xorg: utils.h,v 1.3 2000/08/17 19:54:51 cpqbld Exp $ 6010cdda0Smrg * 7010cdda0Smrg * COPYRIGHT 1990 8010cdda0Smrg * DIGITAL EQUIPMENT CORPORATION 9010cdda0Smrg * MAYNARD, MASSACHUSETTS 10010cdda0Smrg * ALL RIGHTS RESERVED. 11010cdda0Smrg * 12010cdda0Smrg * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND 13010cdda0Smrg * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. 14010cdda0Smrg * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE 15010cdda0Smrg * FOR ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED 16010cdda0Smrg * WARRANTY. 17010cdda0Smrg * 18010cdda0Smrg * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT 19010cdda0Smrg * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN 20010cdda0Smrg * ADDITION TO THAT SET FORTH ABOVE. 21010cdda0Smrg * 22010cdda0Smrg * Permission to use, copy, modify, and distribute this software and its 23010cdda0Smrg * documentation for any purpose and without fee is hereby granted, provided 24010cdda0Smrg * that the above copyright notice appear in all copies and that both that 25010cdda0Smrg * copyright notice and this permission notice appear in supporting 26010cdda0Smrg * documentation, and that the name of Digital Equipment Corporation not be 27010cdda0Smrg * used in advertising or publicity pertaining to distribution of the 28010cdda0Smrg * software without specific, written prior permission. 29010cdda0Smrg \*/ 30010cdda0Smrg/* $XFree86: xc/programs/xkbutils/utils.h,v 1.5 2001/07/25 15:05:26 dawes Exp $ */ 31010cdda0Smrg 32010cdda0Smrg/***====================================================================***/ 33010cdda0Smrg 34010cdda0Smrg#include <stdio.h> 35010cdda0Smrg#include <X11/Xos.h> 36010cdda0Smrg#include <X11/Xfuncproto.h> 37010cdda0Smrg#include <X11/Xfuncs.h> 38010cdda0Smrg#include <stdarg.h> 39010cdda0Smrg#include <stddef.h> 40010cdda0Smrg 41010cdda0Smrg_XFUNCPROTOBEGIN 42010cdda0Smrg 43010cdda0Smrg 44010cdda0Smrg#ifndef NUL 45010cdda0Smrg#define NUL '\0' 46010cdda0Smrg#endif 47010cdda0Smrg 48010cdda0Smrg/***====================================================================***/ 49010cdda0Smrg 50010cdda0Smrg#ifndef OPAQUE_DEFINED 51010cdda0Smrgtypedef void *Opaque; 52010cdda0Smrg#endif 53010cdda0Smrg#ifndef NullOpaque 54010cdda0Smrg#define NullOpaque ((Opaque)NULL) 55010cdda0Smrg#endif 56010cdda0Smrg 57010cdda0Smrg#ifndef BOOLEAN_DEFINED 58010cdda0Smrgtypedef char Boolean; 59010cdda0Smrg#endif 60010cdda0Smrg 61010cdda0Smrg#ifndef True 62010cdda0Smrg#define True ((Boolean)1) 63010cdda0Smrg#define False ((Boolean)0) 64010cdda0Smrg#endif /* ndef True */ 65010cdda0Smrg#define booleanText(b) ((b)?"True":"False") 66010cdda0Smrg 67010cdda0Smrg#ifndef COMPARISON_DEFINED 68010cdda0Smrgtypedef int Comparison; 69010cdda0Smrg 70010cdda0Smrg#define Greater ((Comparison)1) 71010cdda0Smrg#define Equal ((Comparison)0) 72010cdda0Smrg#define Less ((Comparison)-1) 73010cdda0Smrg#define CannotCompare ((Comparison)-37) 74010cdda0Smrg#define comparisonText(c) ((c)?((c)<0?"Less":"Greater"):"Equal") 75010cdda0Smrg#endif 76010cdda0Smrg 77010cdda0Smrg#ifdef notyet 78010cdda0Smrgtypedef union { 79010cdda0Smrg int i; 80010cdda0Smrg unsigned u; 81010cdda0Smrg void *p; 82010cdda0Smrg void *(*fp)(); 83010cdda0Smrg} Union; 84010cdda0Smrg#endif 85010cdda0Smrg 86010cdda0Smrg/***====================================================================***/ 87010cdda0Smrg 88010cdda0Smrgextern Opaque uAlloc( 89010cdda0Smrg unsigned /* size */ 90010cdda0Smrg); 91010cdda0Smrgextern Opaque uCalloc( 92010cdda0Smrg unsigned /* n */, 93010cdda0Smrg unsigned /* size */ 94010cdda0Smrg); 95010cdda0Smrgextern Opaque uRealloc( 96010cdda0Smrg Opaque /* old */, 97010cdda0Smrg unsigned /* newSize */ 98010cdda0Smrg); 99010cdda0Smrgextern Opaque uRecalloc( 100010cdda0Smrg Opaque /* old */, 101010cdda0Smrg unsigned /* nOld */, 102010cdda0Smrg unsigned /* nNew */, 103010cdda0Smrg unsigned /* newSize */ 104010cdda0Smrg); 105010cdda0Smrgextern void uFree( 106010cdda0Smrg Opaque /* ptr */ 107010cdda0Smrg); 108010cdda0Smrg 109010cdda0Smrg#define uTypedAlloc(t) ((t *)uAlloc((unsigned)sizeof(t))) 110010cdda0Smrg#define uTypedCalloc(n,t) ((t *)uCalloc((unsigned)n,(unsigned)sizeof(t))) 111010cdda0Smrg#define uTypedRealloc(pO,n,t) ((t *)uRealloc((Opaque)pO,((unsigned)n)*sizeof(t))) 112010cdda0Smrg#define uTypedRecalloc(pO,o,n,t) ((t *)uRecalloc((Opaque)pO,((unsigned)o),((unsigned)n),sizeof(t))) 113010cdda0Smrg#if (defined mdHasAlloca) && (mdHasAlloca) 114010cdda0Smrg#define uTmpAlloc(n) ((Opaque)alloca((unsigned)n)) 115010cdda0Smrg#define uTmpFree(p) 116010cdda0Smrg#else 117010cdda0Smrg#define uTmpAlloc(n) uAlloc(n) 118010cdda0Smrg#define uTmpFree(p) uFree(p) 119010cdda0Smrg#endif 120010cdda0Smrg 121010cdda0Smrg/***====================================================================***/ 122010cdda0Smrg 123010cdda0Smrgextern Boolean uSetErrorFile ( char *name ); 124010cdda0Smrgextern void uInformation ( char *s, ...); 125010cdda0Smrgextern void uAction ( char *s, ... ); 126010cdda0Smrgextern void uWarning ( char *s, ... ); 127010cdda0Smrgextern void uError ( char *s, ... ); 128010cdda0Smrgextern void uFatalError(char *s,...); 129010cdda0Smrgextern void uInternalError ( char *s, ... ); 130010cdda0Smrg 131010cdda0Smrg/***====================================================================***/ 132010cdda0Smrg 133010cdda0Smrg#define NullString ((char *)NULL) 134010cdda0Smrg 135010cdda0Smrg#define uStringText(s) ((s)==NullString?"<NullString>":(s)) 136010cdda0Smrg#define uStringEqual(s1,s2) (uStringCompare(s1,s2)==Equal) 137010cdda0Smrg#define uStringPrefix(p,s) (strncmp(p,s,strlen(p))==0) 138010cdda0Smrg#define uStringCompare(s1,s2) (strcmp(s1,s2)) 139010cdda0Smrg#define uStrCaseEqual(s1,s2) (uStrCaseCmp(s1,s2)==0) 140010cdda0Smrg#ifdef HAVE_STRCASECMP 141010cdda0Smrg#define uStrCaseCmp(s1,s2) (strcasecmp(s1,s2)) 142010cdda0Smrg#define uStrCasePrefix(p,s) (strncasecmp(p,s,strlen(p))==0) 143010cdda0Smrg#else 144010cdda0Smrgextern int uStrCaseCmp( 145010cdda0Smrg char * /* s1 */, 146010cdda0Smrg char * /* s2 */ 147010cdda0Smrg); 148010cdda0Smrgextern int uStrCasePrefix( 149010cdda0Smrg char * /* p */, 150010cdda0Smrg char * /* str */ 151010cdda0Smrg); 152010cdda0Smrg#endif 153010cdda0Smrg#ifdef HAVE_STRDUP 154010cdda0Smrg#define uStringDup(s1) (strdup(s1)) 155010cdda0Smrg#else 156010cdda0Smrgextern char *uStringDup( 157010cdda0Smrg char * /* s1 */ 158010cdda0Smrg); 159010cdda0Smrg#endif 160010cdda0Smrg 161010cdda0Smrg/***====================================================================***/ 162010cdda0Smrg 163010cdda0Smrg#ifdef ASSERTIONS_ON 164010cdda0Smrg#define uASSERT(where,why) \ 165010cdda0Smrg {if (!(why)) uFatalError("assertion botched in %s ( why )\n",where);} 166010cdda0Smrg#else 167010cdda0Smrg#define uASSERT(where,why) 168010cdda0Smrg#endif 169010cdda0Smrg 170010cdda0Smrg/***====================================================================***/ 171010cdda0Smrg 172010cdda0Smrg#ifndef DEBUG_VAR 173010cdda0Smrg#define DEBUG_VAR debugFlags 174010cdda0Smrg#endif 175010cdda0Smrg 176010cdda0Smrg#ifdef DEBUG_VAR_NOT_LOCAL 177010cdda0Smrgextern 178010cdda0Smrg#endif 179010cdda0Smrgunsigned int DEBUG_VAR; 180010cdda0Smrg 181010cdda0Smrgextern void uDebug( char *s, ... ); 182010cdda0Smrgextern void uDebugNOI( char *s, ... ); /* no indent */ 183010cdda0Smrgextern Boolean uSetDebugFile( 184010cdda0Smrg char *name 185010cdda0Smrg); 186010cdda0Smrgextern FILE *uDebugFile; 187010cdda0Smrgextern int uDebugIndentLevel; 188010cdda0Smrgextern int uDebugIndentSize; 189010cdda0Smrg#define uDebugIndent(l) (uDebugIndentLevel+=(l)) 190010cdda0Smrg#define uDebugOutdent(l) (uDebugIndentLevel-=(l)) 191010cdda0Smrg#ifdef DEBUG_ON 192010cdda0Smrg#define uDEBUG(f,s) { if (DEBUG_VAR&(f)) uDebug(s);} 193010cdda0Smrg#define uDEBUG1(f,s,a) { if (DEBUG_VAR&(f)) uDebug(s,a);} 194010cdda0Smrg#define uDEBUG2(f,s,a,b) { if (DEBUG_VAR&(f)) uDebug(s,a,b);} 195010cdda0Smrg#define uDEBUG3(f,s,a,b,c) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c);} 196010cdda0Smrg#define uDEBUG4(f,s,a,b,c,d) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c,d);} 197010cdda0Smrg#define uDEBUG5(f,s,a,b,c,d,e) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c,d,e);} 198010cdda0Smrg#define uDEBUG_NOI(f,s) { if (DEBUG_VAR&(f)) uDebug(s);} 199010cdda0Smrg#define uDEBUG_NOI1(f,s,a) { if (DEBUG_VAR&(f)) uDebugNOI(s,a);} 200010cdda0Smrg#define uDEBUG_NOI2(f,s,a,b) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b);} 201010cdda0Smrg#define uDEBUG_NOI3(f,s,a,b,c) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c);} 202010cdda0Smrg#define uDEBUG_NOI4(f,s,a,b,c,d) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c,d);} 203010cdda0Smrg#define uDEBUG_NOI5(f,s,a,b,c,d,e) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c,d,e);} 204010cdda0Smrg#else 205010cdda0Smrg#define uDEBUG(f,s) 206010cdda0Smrg#define uDEBUG1(f,s,a) 207010cdda0Smrg#define uDEBUG2(f,s,a,b) 208010cdda0Smrg#define uDEBUG3(f,s,a,b,c) 209010cdda0Smrg#define uDEBUG4(f,s,a,b,c,d) 210010cdda0Smrg#define uDEBUG5(f,s,a,b,c,d,e) 211010cdda0Smrg#define uDEBUG_NOI(f,s) 212010cdda0Smrg#define uDEBUG_NOI1(f,s,a) 213010cdda0Smrg#define uDEBUG_NOI2(f,s,a,b) 214010cdda0Smrg#define uDEBUG_NOI3(f,s,a,b,c) 215010cdda0Smrg#define uDEBUG_NOI4(f,s,a,b,c,d) 216010cdda0Smrg#define uDEBUG_NOI5(f,s,a,b,c,d,e) 217010cdda0Smrg#endif 218010cdda0Smrg 219010cdda0Smrgextern Boolean uSetEntryFile( 220010cdda0Smrg char *name 221010cdda0Smrg); 222010cdda0Smrgextern void uEntry(int l, char *s, ... ); 223010cdda0Smrgextern void uExit( 224010cdda0Smrg int l,char *rtVal 225010cdda0Smrg); 226010cdda0Smrg#ifdef ENTRY_TRACKING_ON 227010cdda0Smrg#define ENTRY_BIT 0x10 228010cdda0Smrg#define LOW_ENTRY_BIT 0x1000 229010cdda0Smrg#define ENTER (DEBUG_VAR&ENTRY_BIT) 230010cdda0Smrg#define FLAG(fLag) (DEBUG_VAR&(fLag)) 231010cdda0Smrg 232010cdda0Smrgextern int uEntryLevel; 233010cdda0Smrg 234010cdda0Smrg#define uENTRY(s) { if (ENTER) uEntry(1,s);} 235010cdda0Smrg#define uENTRY1(s,a) { if (ENTER) uEntry(1,s,a);} 236010cdda0Smrg#define uENTRY2(s,a,b) { if (ENTER) uEntry(1,s,a,b);} 237010cdda0Smrg#define uENTRY3(s,a,b,c) { if (ENTER) uEntry(1,s,a,b,c);} 238010cdda0Smrg#define uENTRY4(s,a,b,c,d) { if (ENTER) uEntry(1,s,a,b,c,d);} 239010cdda0Smrg#define uENTRY5(s,a,b,c,d,e) { if (ENTER) uEntry(1,s,a,b,c,d,e);} 240010cdda0Smrg#define uENTRY6(s,a,b,c,d,e,f) { if (ENTER) uEntry(1,s,a,b,c,d,e,f);} 241010cdda0Smrg#define uENTRY7(s,a,b,c,d,e,f,g) { if (ENTER) uEntry(1,s,a,b,c,d,e,f,g);} 242010cdda0Smrg#define uRETURN(v) { if (ENTER) uEntryLevel--; return(v); } 243010cdda0Smrg#define uVOIDRETURN { if (ENTER) uEntryLevel--; return; } 244010cdda0Smrg 245010cdda0Smrg#define uFLAG_ENTRY(w,s) { if (FLAG(w)) uEntry(0,s);} 246010cdda0Smrg#define uFLAG_ENTRY1(w,s,a) { if (FLAG(w)) uEntry(0,s,a);} 247010cdda0Smrg#define uFLAG_ENTRY2(w,s,a,b) { if (FLAG(w)) uEntry(0,s,a,b);} 248010cdda0Smrg#define uFLAG_ENTRY3(w,s,a,b,c) { if (FLAG(w)) uEntry(0,s,a,b,c);} 249010cdda0Smrg#define uFLAG_ENTRY4(w,s,a,b,c,d) { if (FLAG(w)) uEntry(0,s,a,b,c,d);} 250010cdda0Smrg#define uFLAG_ENTRY5(w,s,a,b,c,d,e) { if (FLAG(w)) uEntry(0,s,a,b,c,d,e);} 251010cdda0Smrg#define uFLAG_ENTRY6(w,s,a,b,c,d,e,f) { if (FLAG(w)) uEntry(0,s,a,b,c,d,e,f);} 252010cdda0Smrg#define uFLAG_ENTRY7(w,s,a,b,c,d,e,f,g) { if(FLAG(w))uEntry(0,s,a,b,c,d,e,f,g);} 253010cdda0Smrg#define uFLAG_RETURN(v) { return(v);} 254010cdda0Smrg#define uFLAG_VOIDRETURN { return; } 255010cdda0Smrg#else 256010cdda0Smrg#define uENTRY(s) 257010cdda0Smrg#define uENTRY1(s,a) 258010cdda0Smrg#define uENTRY2(s,a1,a2) 259010cdda0Smrg#define uENTRY3(s,a1,a2,a3) 260010cdda0Smrg#define uENTRY4(s,a1,a2,a3,a4) 261010cdda0Smrg#define uENTRY5(s,a1,a2,a3,a4,a5) 262010cdda0Smrg#define uENTRY6(s,a1,a2,a3,a4,a5,a6) 263010cdda0Smrg#define uENTRY7(s,a1,a2,a3,a4,a5,a6,a7) 264010cdda0Smrg#define uRETURN(v) { return(v); } 265010cdda0Smrg#define uVOIDRETURN { return; } 266010cdda0Smrg 267010cdda0Smrg#define uFLAG_ENTRY(f,s) 268010cdda0Smrg#define uFLAG_ENTRY1(f,s,a) 269010cdda0Smrg#define uFLAG_ENTRY2(f,s,a,b) 270010cdda0Smrg#define uFLAG_ENTRY3(f,s,a,b,c) 271010cdda0Smrg#define uFLAG_ENTRY4(f,s,a,b,c,d) 272010cdda0Smrg#define uFLAG_ENTRY5(f,s,a,b,c,d,e) 273010cdda0Smrg#define uFLAG_ENTRY6(f,s,a,b,c,d,e,g) 274010cdda0Smrg#define uFLAG_ENTRY7(f,s,a,b,c,d,e,g,h) 275010cdda0Smrg#define uFLAG_RETURN(v) { return(v);} 276010cdda0Smrg#define uFLAG_VOIDRETURN { return; } 277010cdda0Smrg#endif 278010cdda0Smrg 279010cdda0Smrg_XFUNCPROTOEND 280010cdda0Smrg 281010cdda0Smrg#endif /* UTILS_H */ 282010cdda0Smrg 283010cdda0Smrg 284