utils.h revision 0e20ee16
10e20ee16Smrg#ifndef UTILS_H 20e20ee16Smrg#define UTILS_H 1 30e20ee16Smrg 40e20ee16Smrg /*\ 50e20ee16Smrg * $Xorg: utils.h,v 1.3 2000/08/17 19:54:50 cpqbld Exp $ 60e20ee16Smrg * 70e20ee16Smrg * COPYRIGHT 1990 80e20ee16Smrg * DIGITAL EQUIPMENT CORPORATION 90e20ee16Smrg * MAYNARD, MASSACHUSETTS 100e20ee16Smrg * ALL RIGHTS RESERVED. 110e20ee16Smrg * 120e20ee16Smrg * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND 130e20ee16Smrg * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. 140e20ee16Smrg * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE 150e20ee16Smrg * FOR ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED 160e20ee16Smrg * WARRANTY. 170e20ee16Smrg * 180e20ee16Smrg * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT 190e20ee16Smrg * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN 200e20ee16Smrg * ADDITION TO THAT SET FORTH ABOVE. 210e20ee16Smrg * 220e20ee16Smrg * Permission to use, copy, modify, and distribute this software and its 230e20ee16Smrg * documentation for any purpose and without fee is hereby granted, provided 240e20ee16Smrg * that the above copyright notice appear in all copies and that both that 250e20ee16Smrg * copyright notice and this permission notice appear in supporting 260e20ee16Smrg * documentation, and that the name of Digital Equipment Corporation not be 270e20ee16Smrg * used in advertising or publicity pertaining to distribution of the 280e20ee16Smrg * software without specific, written prior permission. 290e20ee16Smrg \*/ 300e20ee16Smrg/* $XFree86: xc/programs/xkbprint/utils.h,v 1.5 2001/07/25 15:05:25 dawes Exp $ */ 310e20ee16Smrg 320e20ee16Smrg/***====================================================================***/ 330e20ee16Smrg 340e20ee16Smrg#include <stdio.h> 350e20ee16Smrg#include <X11/Xos.h> 360e20ee16Smrg#include <X11/Xfuncproto.h> 370e20ee16Smrg#include <X11/Xfuncs.h> 380e20ee16Smrg#include <stdarg.h> 390e20ee16Smrg#include <stddef.h> 400e20ee16Smrg 410e20ee16Smrg_XFUNCPROTOBEGIN 420e20ee16Smrg 430e20ee16Smrg 440e20ee16Smrg#ifndef NUL 450e20ee16Smrg#define NUL '\0' 460e20ee16Smrg#endif 470e20ee16Smrg 480e20ee16Smrg/***====================================================================***/ 490e20ee16Smrg 500e20ee16Smrg#ifndef OPAQUE_DEFINED 510e20ee16Smrgtypedef void *Opaque; 520e20ee16Smrg#endif 530e20ee16Smrg#ifndef NullOpaque 540e20ee16Smrg#define NullOpaque ((Opaque)NULL) 550e20ee16Smrg#endif 560e20ee16Smrg 570e20ee16Smrg#ifndef BOOLEAN_DEFINED 580e20ee16Smrgtypedef char Boolean; 590e20ee16Smrg#endif 600e20ee16Smrg 610e20ee16Smrg#ifndef True 620e20ee16Smrg#define True ((Boolean)1) 630e20ee16Smrg#define False ((Boolean)0) 640e20ee16Smrg#endif /* ndef True */ 650e20ee16Smrg#define booleanText(b) ((b)?"True":"False") 660e20ee16Smrg 670e20ee16Smrg#ifndef COMPARISON_DEFINED 680e20ee16Smrgtypedef int Comparison; 690e20ee16Smrg 700e20ee16Smrg#define Greater ((Comparison)1) 710e20ee16Smrg#define Equal ((Comparison)0) 720e20ee16Smrg#define Less ((Comparison)-1) 730e20ee16Smrg#define CannotCompare ((Comparison)-37) 740e20ee16Smrg#define comparisonText(c) ((c)?((c)<0?"Less":"Greater"):"Equal") 750e20ee16Smrg#endif 760e20ee16Smrg 770e20ee16Smrg#ifdef notyet 780e20ee16Smrgtypedef union { 790e20ee16Smrg int i; 800e20ee16Smrg unsigned u; 810e20ee16Smrg void *p; 820e20ee16Smrg void *(*fp)(); 830e20ee16Smrg} Union; 840e20ee16Smrg#endif 850e20ee16Smrg 860e20ee16Smrg/***====================================================================***/ 870e20ee16Smrg 880e20ee16Smrgextern Opaque uAlloc( 890e20ee16Smrg unsigned /* size */ 900e20ee16Smrg); 910e20ee16Smrgextern Opaque uCalloc( 920e20ee16Smrg unsigned /* n */, 930e20ee16Smrg unsigned /* size */ 940e20ee16Smrg); 950e20ee16Smrgextern Opaque uRealloc( 960e20ee16Smrg Opaque /* old */, 970e20ee16Smrg unsigned /* newSize */ 980e20ee16Smrg); 990e20ee16Smrgextern Opaque uRecalloc( 1000e20ee16Smrg Opaque /* old */, 1010e20ee16Smrg unsigned /* nOld */, 1020e20ee16Smrg unsigned /* nNew */, 1030e20ee16Smrg unsigned /* newSize */ 1040e20ee16Smrg); 1050e20ee16Smrgextern void uFree( 1060e20ee16Smrg Opaque /* ptr */ 1070e20ee16Smrg); 1080e20ee16Smrg 1090e20ee16Smrg#define uTypedAlloc(t) ((t *)uAlloc((unsigned)sizeof(t))) 1100e20ee16Smrg#define uTypedCalloc(n,t) ((t *)uCalloc((unsigned)n,(unsigned)sizeof(t))) 1110e20ee16Smrg#define uTypedRealloc(pO,n,t) ((t *)uRealloc((Opaque)pO,((unsigned)n)*sizeof(t))) 1120e20ee16Smrg#define uTypedRecalloc(pO,o,n,t) ((t *)uRecalloc((Opaque)pO,((unsigned)o),((unsigned)n),sizeof(t))) 1130e20ee16Smrg#if (defined mdHasAlloca) && (mdHasAlloca) 1140e20ee16Smrg#define uTmpAlloc(n) ((Opaque)alloca((unsigned)n)) 1150e20ee16Smrg#define uTmpFree(p) 1160e20ee16Smrg#else 1170e20ee16Smrg#define uTmpAlloc(n) uAlloc(n) 1180e20ee16Smrg#define uTmpFree(p) uFree(p) 1190e20ee16Smrg#endif 1200e20ee16Smrg 1210e20ee16Smrg/***====================================================================***/ 1220e20ee16Smrg 1230e20ee16Smrgextern Boolean uSetErrorFile ( char *name ); 1240e20ee16Smrgextern void uInformation ( char *s, ...); 1250e20ee16Smrgextern void uAction ( char *s, ... ); 1260e20ee16Smrgextern void uWarning ( char *s, ... ); 1270e20ee16Smrgextern void uError ( char *s, ... ); 1280e20ee16Smrgextern void uFatalError(char *s,...); 1290e20ee16Smrgextern void uInternalError ( char *s, ... ); 1300e20ee16Smrg 1310e20ee16Smrg/***====================================================================***/ 1320e20ee16Smrg 1330e20ee16Smrg#define NullString ((char *)NULL) 1340e20ee16Smrg 1350e20ee16Smrg#define uStringText(s) ((s)==NullString?"<NullString>":(s)) 1360e20ee16Smrg#define uStringEqual(s1,s2) (uStringCompare(s1,s2)==Equal) 1370e20ee16Smrg#define uStringPrefix(p,s) (strncmp(p,s,strlen(p))==0) 1380e20ee16Smrg#define uStringCompare(s1,s2) (strcmp(s1,s2)) 1390e20ee16Smrg#define uStrCaseEqual(s1,s2) (uStrCaseCmp(s1,s2)==0) 1400e20ee16Smrg#ifdef HAVE_STRCASECMP 1410e20ee16Smrg#define uStrCaseCmp(s1,s2) (strcasecmp(s1,s2)) 1420e20ee16Smrg#define uStrCasePrefix(p,s) (strncasecmp(p,s,strlen(p))==0) 1430e20ee16Smrg#else 1440e20ee16Smrgextern int uStrCaseCmp( 1450e20ee16Smrg char * /* s1 */, 1460e20ee16Smrg char * /* s2 */ 1470e20ee16Smrg); 1480e20ee16Smrgextern int uStrCasePrefix( 1490e20ee16Smrg char * /* p */, 1500e20ee16Smrg char * /* str */ 1510e20ee16Smrg); 1520e20ee16Smrg#endif 1530e20ee16Smrg#ifdef HAVE_STRDUP 1540e20ee16Smrg#define uStringDup(s1) (strdup(s1)) 1550e20ee16Smrg#else 1560e20ee16Smrgextern char *uStringDup( 1570e20ee16Smrg char * /* s1 */ 1580e20ee16Smrg); 1590e20ee16Smrg#endif 1600e20ee16Smrg 1610e20ee16Smrg/***====================================================================***/ 1620e20ee16Smrg 1630e20ee16Smrg#ifdef ASSERTIONS_ON 1640e20ee16Smrg#define uASSERT(where,why) \ 1650e20ee16Smrg {if (!(why)) uFatalError("assertion botched in %s ( why )\n",where);} 1660e20ee16Smrg#else 1670e20ee16Smrg#define uASSERT(where,why) 1680e20ee16Smrg#endif 1690e20ee16Smrg 1700e20ee16Smrg/***====================================================================***/ 1710e20ee16Smrg 1720e20ee16Smrg#ifndef DEBUG_VAR 1730e20ee16Smrg#define DEBUG_VAR debugFlags 1740e20ee16Smrg#endif 1750e20ee16Smrg 1760e20ee16Smrg#ifdef DEBUG_VAR_NOT_LOCAL 1770e20ee16Smrgextern 1780e20ee16Smrg#endif 1790e20ee16Smrgunsigned int DEBUG_VAR; 1800e20ee16Smrg 1810e20ee16Smrgextern void uDebug( char *s, ... ); 1820e20ee16Smrgextern void uDebugNOI( char *s, ... ); /* no indent */ 1830e20ee16Smrgextern Boolean uSetDebugFile( 1840e20ee16Smrg char *name 1850e20ee16Smrg); 1860e20ee16Smrgextern FILE *uDebugFile; 1870e20ee16Smrgextern int uDebugIndentLevel; 1880e20ee16Smrgextern int uDebugIndentSize; 1890e20ee16Smrg#define uDebugIndent(l) (uDebugIndentLevel+=(l)) 1900e20ee16Smrg#define uDebugOutdent(l) (uDebugIndentLevel-=(l)) 1910e20ee16Smrg#ifdef DEBUG_ON 1920e20ee16Smrg#define uDEBUG(f,s) { if (DEBUG_VAR&(f)) uDebug(s);} 1930e20ee16Smrg#define uDEBUG1(f,s,a) { if (DEBUG_VAR&(f)) uDebug(s,a);} 1940e20ee16Smrg#define uDEBUG2(f,s,a,b) { if (DEBUG_VAR&(f)) uDebug(s,a,b);} 1950e20ee16Smrg#define uDEBUG3(f,s,a,b,c) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c);} 1960e20ee16Smrg#define uDEBUG4(f,s,a,b,c,d) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c,d);} 1970e20ee16Smrg#define uDEBUG5(f,s,a,b,c,d,e) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c,d,e);} 1980e20ee16Smrg#define uDEBUG_NOI(f,s) { if (DEBUG_VAR&(f)) uDebug(s);} 1990e20ee16Smrg#define uDEBUG_NOI1(f,s,a) { if (DEBUG_VAR&(f)) uDebugNOI(s,a);} 2000e20ee16Smrg#define uDEBUG_NOI2(f,s,a,b) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b);} 2010e20ee16Smrg#define uDEBUG_NOI3(f,s,a,b,c) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c);} 2020e20ee16Smrg#define uDEBUG_NOI4(f,s,a,b,c,d) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c,d);} 2030e20ee16Smrg#define uDEBUG_NOI5(f,s,a,b,c,d,e) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c,d,e);} 2040e20ee16Smrg#else 2050e20ee16Smrg#define uDEBUG(f,s) 2060e20ee16Smrg#define uDEBUG1(f,s,a) 2070e20ee16Smrg#define uDEBUG2(f,s,a,b) 2080e20ee16Smrg#define uDEBUG3(f,s,a,b,c) 2090e20ee16Smrg#define uDEBUG4(f,s,a,b,c,d) 2100e20ee16Smrg#define uDEBUG5(f,s,a,b,c,d,e) 2110e20ee16Smrg#define uDEBUG_NOI(f,s) 2120e20ee16Smrg#define uDEBUG_NOI1(f,s,a) 2130e20ee16Smrg#define uDEBUG_NOI2(f,s,a,b) 2140e20ee16Smrg#define uDEBUG_NOI3(f,s,a,b,c) 2150e20ee16Smrg#define uDEBUG_NOI4(f,s,a,b,c,d) 2160e20ee16Smrg#define uDEBUG_NOI5(f,s,a,b,c,d,e) 2170e20ee16Smrg#endif 2180e20ee16Smrg 2190e20ee16Smrgextern Boolean uSetEntryFile( 2200e20ee16Smrg char *name 2210e20ee16Smrg); 2220e20ee16Smrgextern void uEntry(int l, char *s, ... ); 2230e20ee16Smrgextern void uExit( 2240e20ee16Smrg int l,char *rtVal 2250e20ee16Smrg); 2260e20ee16Smrg#ifdef ENTRY_TRACKING_ON 2270e20ee16Smrg#define ENTRY_BIT 0x10 2280e20ee16Smrg#define LOW_ENTRY_BIT 0x1000 2290e20ee16Smrg#define ENTER (DEBUG_VAR&ENTRY_BIT) 2300e20ee16Smrg#define FLAG(fLag) (DEBUG_VAR&(fLag)) 2310e20ee16Smrg 2320e20ee16Smrgextern int uEntryLevel; 2330e20ee16Smrg 2340e20ee16Smrg#define uENTRY(s) { if (ENTER) uEntry(1,s);} 2350e20ee16Smrg#define uENTRY1(s,a) { if (ENTER) uEntry(1,s,a);} 2360e20ee16Smrg#define uENTRY2(s,a,b) { if (ENTER) uEntry(1,s,a,b);} 2370e20ee16Smrg#define uENTRY3(s,a,b,c) { if (ENTER) uEntry(1,s,a,b,c);} 2380e20ee16Smrg#define uENTRY4(s,a,b,c,d) { if (ENTER) uEntry(1,s,a,b,c,d);} 2390e20ee16Smrg#define uENTRY5(s,a,b,c,d,e) { if (ENTER) uEntry(1,s,a,b,c,d,e);} 2400e20ee16Smrg#define uENTRY6(s,a,b,c,d,e,f) { if (ENTER) uEntry(1,s,a,b,c,d,e,f);} 2410e20ee16Smrg#define uENTRY7(s,a,b,c,d,e,f,g) { if (ENTER) uEntry(1,s,a,b,c,d,e,f,g);} 2420e20ee16Smrg#define uRETURN(v) { if (ENTER) uEntryLevel--; return(v); } 2430e20ee16Smrg#define uVOIDRETURN { if (ENTER) uEntryLevel--; return; } 2440e20ee16Smrg 2450e20ee16Smrg#define uFLAG_ENTRY(w,s) { if (FLAG(w)) uEntry(0,s);} 2460e20ee16Smrg#define uFLAG_ENTRY1(w,s,a) { if (FLAG(w)) uEntry(0,s,a);} 2470e20ee16Smrg#define uFLAG_ENTRY2(w,s,a,b) { if (FLAG(w)) uEntry(0,s,a,b);} 2480e20ee16Smrg#define uFLAG_ENTRY3(w,s,a,b,c) { if (FLAG(w)) uEntry(0,s,a,b,c);} 2490e20ee16Smrg#define uFLAG_ENTRY4(w,s,a,b,c,d) { if (FLAG(w)) uEntry(0,s,a,b,c,d);} 2500e20ee16Smrg#define uFLAG_ENTRY5(w,s,a,b,c,d,e) { if (FLAG(w)) uEntry(0,s,a,b,c,d,e);} 2510e20ee16Smrg#define uFLAG_ENTRY6(w,s,a,b,c,d,e,f) { if (FLAG(w)) uEntry(0,s,a,b,c,d,e,f);} 2520e20ee16Smrg#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);} 2530e20ee16Smrg#define uFLAG_RETURN(v) { return(v);} 2540e20ee16Smrg#define uFLAG_VOIDRETURN { return; } 2550e20ee16Smrg#else 2560e20ee16Smrg#define uENTRY(s) 2570e20ee16Smrg#define uENTRY1(s,a) 2580e20ee16Smrg#define uENTRY2(s,a1,a2) 2590e20ee16Smrg#define uENTRY3(s,a1,a2,a3) 2600e20ee16Smrg#define uENTRY4(s,a1,a2,a3,a4) 2610e20ee16Smrg#define uENTRY5(s,a1,a2,a3,a4,a5) 2620e20ee16Smrg#define uENTRY6(s,a1,a2,a3,a4,a5,a6) 2630e20ee16Smrg#define uENTRY7(s,a1,a2,a3,a4,a5,a6,a7) 2640e20ee16Smrg#define uRETURN(v) { return(v); } 2650e20ee16Smrg#define uVOIDRETURN { return; } 2660e20ee16Smrg 2670e20ee16Smrg#define uFLAG_ENTRY(f,s) 2680e20ee16Smrg#define uFLAG_ENTRY1(f,s,a) 2690e20ee16Smrg#define uFLAG_ENTRY2(f,s,a,b) 2700e20ee16Smrg#define uFLAG_ENTRY3(f,s,a,b,c) 2710e20ee16Smrg#define uFLAG_ENTRY4(f,s,a,b,c,d) 2720e20ee16Smrg#define uFLAG_ENTRY5(f,s,a,b,c,d,e) 2730e20ee16Smrg#define uFLAG_ENTRY6(f,s,a,b,c,d,e,g) 2740e20ee16Smrg#define uFLAG_ENTRY7(f,s,a,b,c,d,e,g,h) 2750e20ee16Smrg#define uFLAG_RETURN(v) { return(v);} 2760e20ee16Smrg#define uFLAG_VOIDRETURN { return; } 2770e20ee16Smrg#endif 2780e20ee16Smrg 2790e20ee16Smrg_XFUNCPROTOEND 2800e20ee16Smrg 2810e20ee16Smrg#endif /* UTILS_H */ 2820e20ee16Smrg 2830e20ee16Smrg 284