/* internal.h -- common header file for the internal CORE and SHELL APIs.
- Copyright (C) 2003, 2004
+ Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
National Institute of Advanced Industrial Science and Technology (AIST)
Registration Number H15PRO112
You should have received a copy of the GNU Lesser General Public
License along with the m17n library; if not, write to the Free
- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
02111-1307, USA. */
#ifndef _M17N_INTERNAL_H_
extern int mdebug_hook ();
+#if ENABLE_NLS
+#include <libintl.h>
+#define _(String) dgettext ("m17n-lib", String)
+#else
+#define _(String) (String)
+#endif
+
/** Return with code RET while setting merror_code to ERR. */
#define MERROR(err, ret) \
exit (err); \
} while (0)
+#define MFAILP(cond) ((cond) ? 0 : mdebug_hook ())
+
#define M_CHECK_CHAR(c, ret) \
if ((c) < 0 || (c) > MCHAR_MAX) \
MERROR (MERROR_CHAR, (ret)); \
MEMORY_FULL (err); \
} while (0)
+#define MTABLE_CALLOC_SAFE(p, size) \
+ ((p) = (void *) calloc (sizeof (*(p)), (size)))
+
/** The macro MTABLE_REALLOC () changes the size of memory block
pointed to by P to a size suitable for an array of SIZE objects.
#define MSTRUCT_CALLOC(p, err) MTABLE_CALLOC ((p), 1, (err))
+#define MSTRUCT_CALLOC_SAFE(p) MTABLE_CALLOC_SAFE ((p), 1)
+
#define USE_SAFE_ALLOCA \
int sa_must_free = 0, sa_size = 0
extern void mdebug__add_object_array (M17NObjectArray *array, char *name);
#define M17N_OBJECT_ADD_ARRAY(array, name) \
- if (mdebug__flag & MDEBUG_FINI) \
+ if (mdebug__flags[MDEBUG_FINI]) \
mdebug__add_object_array (&array, name); \
else
extern void mdebug__register_object (M17NObjectArray *array, void *object);
#define M17N_OBJECT_REGISTER(array, object) \
- if (mdebug__flag & MDEBUG_FINI) \
+ if (mdebug__flags[MDEBUG_FINI]) \
mdebug__register_object (&array, object); \
else
extern void mdebug__unregister_object (M17NObjectArray *array, void *object);
#define M17N_OBJECT_UNREGISTER(array, object) \
- if (mdebug__flag & MDEBUG_FINI) \
+ if (mdebug__flags[MDEBUG_FINI]) \
mdebug__unregister_object (&array, object); \
else
{
M17NObject control;
- enum MTextFormat format : 16;
- enum MTextCoverage coverage : 16;
+ unsigned format : 16;
+ unsigned coverage : 16;
/**en Number of characters in the M-text */
/**ja M-text Ãæ¤Îʸ»ú¿ô */
\f
-enum MDebugMaskBit
+enum MDebugFlag
{
- MDEBUG_INIT = 0x01,
- MDEBUG_FINI = 0x02,
- MDEBUG_CHARSET = 0x04,
- MDEBUG_CODING = 0x08,
- MDEBUG_DATABASE = 0x10,
- MDEBUG_FONT = 0x0100,
- MDEBUG_FONT_FLT = 0x0200,
- MDEBUG_FONT_OTF = 0x0400,
- MDEBUG_INPUT = 0x0800,
- MDEBUG_MAX
+ MDEBUG_INIT,
+ MDEBUG_FINI,
+ MDEBUG_CHARSET,
+ MDEBUG_CODING,
+ MDEBUG_DATABASE,
+ MDEBUG_FONT,
+ MDEBUG_FLT,
+ MDEBUG_FONTSET,
+ MDEBUG_INPUT,
+ MDEBUG_ALL,
+ MDEBUG_MAX = MDEBUG_ALL
};
-extern int mdebug__flag;
+extern int mdebug__flags[MDEBUG_MAX];
+extern FILE *mdebug__output;
extern void mdebug__push_time ();
extern void mdebug__pop_time ();
extern void mdebug__print_time ();
-#define MDEBUG_PRINT(msg) \
- do { \
- if (mdebug__flag & mdebug_mask) \
- fprintf (stderr, (msg)); \
- } while (0)
+#define MDEBUG_FLAG() mdebug__flags[mdebug_flag]
-#define MDEBUG_PRINT1(fmt, arg) \
+#define MDEBUG_PRINT0(FPRINTF) \
do { \
- if (mdebug__flag & mdebug_mask) \
- fprintf (stderr, (fmt), (arg)); \
+ if (MDEBUG_FLAG ()) \
+ { \
+ FPRINTF; \
+ fflush (mdebug__output); \
+ } \
} while (0)
-#define MDEBUG_PRINT2(fmt, arg1, arg2) \
- do { \
- if (mdebug__flag & mdebug_mask) \
- fprintf (stderr, (fmt), (arg1), (arg2)); \
- } while (0)
+#define MDEBUG_PRINT(msg) \
+ MDEBUG_PRINT0 (fprintf (mdebug__output, "%s", (msg)))
-#define MDEBUG_PRINT3(fmt, arg1, arg2, arg3) \
- do { \
- if (mdebug__flag & mdebug_mask) \
- fprintf (stderr, (fmt), (arg1), (arg2), (arg3)); \
- } while (0)
+#define MDEBUG_PRINT1(fmt, arg) \
+ MDEBUG_PRINT0 (fprintf (mdebug__output, (fmt), (arg)))
-#define MDEBUG_PRINT4(fmt, arg1, arg2, arg3, arg4) \
- do { \
- if (mdebug__flag & mdebug_mask) \
- fprintf (stderr, (fmt), (arg1), (arg2), (arg3), (arg4)); \
- } while (0)
+#define MDEBUG_PRINT2(fmt, arg1, arg2) \
+ MDEBUG_PRINT0 (fprintf (mdebug__output, (fmt), (arg1), (arg2)))
-#define MDEBUG_PRINT5(fmt, arg1, arg2, arg3, arg4, arg5) \
- do { \
- if (mdebug__flag & mdebug_mask) \
- fprintf (stderr, (fmt), (arg1), (arg2), (arg3), (arg4), (arg5)); \
- } while (0)
+#define MDEBUG_PRINT3(fmt, arg1, arg2, arg3) \
+ MDEBUG_PRINT0 (fprintf (mdebug__output, (fmt), (arg1), (arg2), (arg3)))
+#define MDEBUG_PRINT4(fmt, arg1, arg2, arg3, arg4) \
+ MDEBUG_PRINT0 (fprintf (mdebug__output, (fmt), (arg1), (arg2), (arg3), (arg4)))
-#define MDEBUG_PUSH_TIME() \
- do { \
- if (mdebug__flag & mdebug_mask) \
- mdebug__push_time (); \
+#define MDEBUG_PRINT5(fmt, arg1, arg2, arg3, arg4, arg5) \
+ MDEBUG_PRINT0 (fprintf (mdebug__output, (fmt), (arg1), (arg2), (arg3), (arg4), (arg5)))
+
+#define MDEBUG_DUMP(prefix, postfix, call) \
+ do { \
+ if (MDEBUG_FLAG ()) \
+ { \
+ fprintf (mdebug__output, "%s", prefix); \
+ call; \
+ fprintf (mdebug__output, "%s", postfix); \
+ fflush (mdebug__output); \
+ } \
} while (0)
+#define MDEBUG_PUSH_TIME() \
+ do { \
+ if (MDEBUG_FLAG ()) \
+ mdebug__push_time (); \
+ } while (0)
-#define MDEBUG_POP_TIME() \
- do { \
- if (mdebug__flag & mdebug_mask) \
- mdebug__pop_time (); \
+
+#define MDEBUG_POP_TIME() \
+ do { \
+ if (MDEBUG_FLAG ()) \
+ mdebug__pop_time (); \
} while (0)
-#define MDEBUG_PRINT_TIME(tag, ARG_LIST) \
- do { \
- if (mdebug__flag & mdebug_mask) \
- { \
- fprintf (stderr, " [%s] ", tag); \
- mdebug__print_time (); \
- fprintf ARG_LIST; \
- fprintf (stderr, "\n"); \
- } \
+#define MDEBUG_PRINT_TIME(tag, ARG_LIST) \
+ do { \
+ if (MDEBUG_FLAG ()) \
+ { \
+ fprintf (mdebug__output, " [%s] ", tag); \
+ mdebug__print_time (); \
+ fprintf ARG_LIST; \
+ fprintf (mdebug__output, "\n"); \
+ } \
} while (0)
| (((c) & 0xFF00) << 8) | (((c) & 0xFF) << 24))
-extern void *(*mdatabase__finder) (MSymbol tag1, MSymbol tag2,
- MSymbol tag3, MSymbol tag4);
-extern void *(*mdatabase__loader) (void *);
-
/* Initialize/finalize function. */
extern int msymbol__init ();