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