xenocara/app/xkbcomp/utils.h

272 lines
8.0 KiB
C
Raw Normal View History

2006-11-25 13:07:29 -07:00
#ifndef UTILS_H
#define UTILS_H 1
/*\
*
2011-01-11 13:56:40 -07:00
* COPYRIGHT 1990
* DIGITAL EQUIPMENT CORPORATION
* MAYNARD, MASSACHUSETTS
* ALL RIGHTS RESERVED.
2006-11-25 13:07:29 -07:00
*
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
* SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
* DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE
* FOR ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED
* WARRANTY.
*
* IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT
* RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN
* ADDITION TO THAT SET FORTH ABOVE.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Digital Equipment Corporation not be
* used in advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
2011-01-11 13:56:40 -07:00
\*/
2006-11-25 13:07:29 -07:00
/***====================================================================***/
#include <stdio.h>
#include <X11/Xos.h>
#include <X11/Xfuncproto.h>
#include <X11/Xfuncs.h>
#include <stddef.h>
2015-01-25 04:44:55 -07:00
#ifdef HAVE_CONFIG_H
2011-01-11 13:56:40 -07:00
#include "config.h"
2015-01-25 04:44:55 -07:00
#endif
2006-11-25 13:07:29 -07:00
#ifndef NUL
#define NUL '\0'
#endif
/***====================================================================***/
#ifndef OPAQUE_DEFINED
2011-01-11 13:56:40 -07:00
typedef void *Opaque;
2006-11-25 13:07:29 -07:00
#endif
#ifndef NullOpaque
#define NullOpaque ((Opaque)NULL)
#endif
#ifndef BOOLEAN_DEFINED
2011-01-11 13:56:40 -07:00
typedef char Boolean;
2006-11-25 13:07:29 -07:00
#endif
#ifndef True
#define True ((Boolean)1)
#define False ((Boolean)0)
#endif /* ndef True */
#define booleanText(b) ((b)?"True":"False")
#ifndef COMPARISON_DEFINED
2011-01-11 13:56:40 -07:00
typedef int Comparison;
2006-11-25 13:07:29 -07:00
#define Greater ((Comparison)1)
#define Equal ((Comparison)0)
#define Less ((Comparison)-1)
#define CannotCompare ((Comparison)-37)
#define comparisonText(c) ((c)?((c)<0?"Less":"Greater"):"Equal")
#endif
/***====================================================================***/
2011-01-11 13:56:40 -07:00
extern Opaque uAlloc(unsigned /* size */
);
extern Opaque uCalloc(unsigned /* n */ ,
unsigned /* size */
);
extern Opaque uRealloc(Opaque /* old */ ,
unsigned /* newSize */
);
extern Opaque uRecalloc(Opaque /* old */ ,
unsigned /* nOld */ ,
unsigned /* nNew */ ,
unsigned /* newSize */
);
extern void uFree(Opaque /* ptr */
);
2006-11-25 13:07:29 -07:00
#define uTypedAlloc(t) ((t *)uAlloc((unsigned)sizeof(t)))
#define uTypedCalloc(n,t) ((t *)uCalloc((unsigned)n,(unsigned)sizeof(t)))
#define uTypedRealloc(pO,n,t) ((t *)uRealloc((Opaque)pO,((unsigned)n)*sizeof(t)))
#define uTypedRecalloc(pO,o,n,t) ((t *)uRecalloc((Opaque)pO,((unsigned)o),((unsigned)n),sizeof(t)))
#if (defined mdHasAlloca) && (mdHasAlloca)
#define uTmpAlloc(n) ((Opaque)alloca((unsigned)n))
#define uTmpFree(p)
#else
#define uTmpAlloc(n) uAlloc(n)
#define uTmpFree(p) uFree(p)
#endif
/***====================================================================***/
2011-01-11 13:56:40 -07:00
extern Boolean uSetErrorFile(char * /* name */
);
2006-11-25 13:07:29 -07:00
#define INFO6 uInformation
#define INFO5 uInformation
#define INFO4 uInformation
#define INFO3 uInformation
#define INFO2 uInformation
#define INFO1 uInformation
#define INFO uInformation
2011-01-11 13:56:40 -07:00
extern void
uInformation(const char * /* s */ , ...
2011-08-28 05:21:51 -06:00
) _X_ATTRIBUTE_PRINTF(1, 2);
2006-11-25 13:07:29 -07:00
#define ACTION6 uAction
#define ACTION5 uAction
#define ACTION4 uAction
#define ACTION3 uAction
#define ACTION2 uAction
#define ACTION1 uAction
#define ACTION uAction
2011-01-11 13:56:40 -07:00
extern void uAction(const char * /* s */ , ...
2011-08-28 05:21:51 -06:00
) _X_ATTRIBUTE_PRINTF(1, 2);
2006-11-25 13:07:29 -07:00
#define WARN6 uWarning
#define WARN5 uWarning
#define WARN4 uWarning
#define WARN3 uWarning
#define WARN2 uWarning
#define WARN1 uWarning
#define WARN uWarning
2011-01-11 13:56:40 -07:00
extern void uWarning(const char * /* s */ , ...
2011-08-28 05:21:51 -06:00
) _X_ATTRIBUTE_PRINTF(1, 2);
2006-11-25 13:07:29 -07:00
#define ERROR6 uError
#define ERROR5 uError
#define ERROR4 uError
#define ERROR3 uError
#define ERROR2 uError
#define ERROR1 uError
#define ERROR uError
2011-01-11 13:56:40 -07:00
extern void uError(const char * /* s */ , ...
2011-08-28 05:21:51 -06:00
) _X_ATTRIBUTE_PRINTF(1, 2);
2006-11-25 13:07:29 -07:00
#define FATAL6 uFatalError
#define FATAL5 uFatalError
#define FATAL4 uFatalError
#define FATAL3 uFatalError
#define FATAL2 uFatalError
#define FATAL1 uFatalError
#define FATAL uFatalError
2011-01-11 13:56:40 -07:00
extern void uFatalError(const char * /* s */ , ...
2012-05-15 00:11:32 -06:00
) _X_ATTRIBUTE_PRINTF(1, 2) _X_NORETURN;
2006-11-25 13:07:29 -07:00
/* WSGO stands for "Weird Stuff Going On" */
#define WSGO6 uInternalError
#define WSGO5 uInternalError
#define WSGO4 uInternalError
#define WSGO3 uInternalError
#define WSGO2 uInternalError
#define WSGO1 uInternalError
#define WSGO uInternalError
2011-01-11 13:56:40 -07:00
extern void uInternalError(const char * /* s */ , ...
2011-08-28 05:21:51 -06:00
) _X_ATTRIBUTE_PRINTF(1, 2);
2006-11-25 13:07:29 -07:00
2011-01-11 13:56:40 -07:00
extern void uSetPreErrorMessage(char * /* msg */
);
2006-11-25 13:07:29 -07:00
2011-01-11 13:56:40 -07:00
extern void uSetPostErrorMessage(char * /* msg */
);
2006-11-25 13:07:29 -07:00
2011-01-11 13:56:40 -07:00
extern void uSetErrorPrefix(char * /* void */
);
2006-11-25 13:07:29 -07:00
2011-01-11 13:56:40 -07:00
extern void uFinishUp(void);
2006-11-25 13:07:29 -07:00
/***====================================================================***/
#define NullString ((char *)NULL)
#define uStringText(s) ((s)==NullString?"<NullString>":(s))
#define uStringEqual(s1,s2) (uStringCompare(s1,s2)==Equal)
#define uStringPrefix(p,s) (strncmp(p,s,strlen(p))==0)
#define uStringCompare(s1,s2) (((s1)==NullString||(s2)==NullString)?\
(s1)!=(s2):strcmp(s1,s2))
#define uStrCaseEqual(s1,s2) (uStrCaseCmp(s1,s2)==0)
#ifdef HAVE_STRCASECMP
2012-05-15 00:11:32 -06:00
#include <strings.h>
2006-11-25 13:07:29 -07:00
#define uStrCaseCmp(s1,s2) (strcasecmp(s1,s2))
#define uStrCasePrefix(p,s) (strncasecmp(p,s,strlen(p))==0)
#else
2011-01-11 13:56:40 -07:00
extern int uStrCaseCmp(const char * /* s1 */ ,
const char * /* s2 */
);
extern int uStrCasePrefix(const char * /* p */ ,
char * /* str */
);
2006-11-25 13:07:29 -07:00
#endif
#ifdef HAVE_STRDUP
2012-05-15 00:11:32 -06:00
#include <string.h>
2011-01-11 13:56:40 -07:00
#define uStringDup(s1) ((s1) ? strdup(s1) : NULL)
2006-11-25 13:07:29 -07:00
#else
2011-01-11 13:56:40 -07:00
extern char *uStringDup(const char * /* s1 */
);
2006-11-25 13:07:29 -07:00
#endif
/***====================================================================***/
#ifndef DEBUG_VAR
#define DEBUG_VAR debugFlags
#endif
extern
2011-01-11 13:56:40 -07:00
unsigned int DEBUG_VAR;
2006-11-25 13:07:29 -07:00
2011-01-11 13:56:40 -07:00
extern void uDebug(char * /* s */ , ...
2011-08-28 05:21:51 -06:00
) _X_ATTRIBUTE_PRINTF(1, 2);
2006-11-25 13:07:29 -07:00
2011-01-11 13:56:40 -07:00
extern void uDebugNOI( /* no indent */
char * /* s */ , ...
2011-08-28 05:21:51 -06:00
) _X_ATTRIBUTE_PRINTF(1, 2);
2006-11-25 13:07:29 -07:00
2011-01-11 13:56:40 -07:00
extern Boolean uSetDebugFile(char *name);
2006-11-25 13:07:29 -07:00
2011-01-11 13:56:40 -07:00
extern FILE *uDebugFile;
extern int uDebugIndentLevel;
extern int uDebugIndentSize;
2006-11-25 13:07:29 -07:00
#define uDebugIndent(l) (uDebugIndentLevel+=(l))
#define uDebugOutdent(l) (uDebugIndentLevel-=(l))
2015-01-25 04:44:55 -07:00
#ifdef DEBUG
2006-11-25 13:07:29 -07:00
#define uDEBUG(f,s) { if (DEBUG_VAR&(f)) uDebug(s);}
#define uDEBUG1(f,s,a) { if (DEBUG_VAR&(f)) uDebug(s,a);}
#define uDEBUG2(f,s,a,b) { if (DEBUG_VAR&(f)) uDebug(s,a,b);}
#define uDEBUG3(f,s,a,b,c) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c);}
#define uDEBUG4(f,s,a,b,c,d) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c,d);}
#define uDEBUG5(f,s,a,b,c,d,e) { if (DEBUG_VAR&(f)) uDebug(s,a,b,c,d,e);}
#define uDEBUG_NOI(f,s) { if (DEBUG_VAR&(f)) uDebug(s);}
#define uDEBUG_NOI1(f,s,a) { if (DEBUG_VAR&(f)) uDebugNOI(s,a);}
#define uDEBUG_NOI2(f,s,a,b) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b);}
#define uDEBUG_NOI3(f,s,a,b,c) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c);}
#define uDEBUG_NOI4(f,s,a,b,c,d) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c,d);}
#define uDEBUG_NOI5(f,s,a,b,c,d,e) { if (DEBUG_VAR&(f)) uDebugNOI(s,a,b,c,d,e);}
#else
#define uDEBUG(f,s)
#define uDEBUG1(f,s,a)
#define uDEBUG2(f,s,a,b)
#define uDEBUG3(f,s,a,b,c)
#define uDEBUG4(f,s,a,b,c,d)
#define uDEBUG5(f,s,a,b,c,d,e)
#define uDEBUG_NOI(f,s)
#define uDEBUG_NOI1(f,s,a)
#define uDEBUG_NOI2(f,s,a,b)
#define uDEBUG_NOI3(f,s,a,b,c)
#define uDEBUG_NOI4(f,s,a,b,c,d)
#define uDEBUG_NOI5(f,s,a,b,c,d,e)
#endif
#endif /* UTILS_H */