Copyright years udpated.
[m17n/m17n-lib.git] / src / internal.h
index 9a67711..71020db 100644 (file)
@@ -1,5 +1,5 @@
 /* internal.h -- common header file for the internal CORE and SHELL APIs.
 /* 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
 
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
 
@@ -17,7 +17,7 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the m17n library; if not, write to the Free
 
    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_
    02111-1307, USA.  */
 
 #ifndef _M17N_INTERNAL_H_
@@ -35,6 +35,13 @@ extern int m17n__gui_initialized;
 
 extern int mdebug_hook ();
 
 
 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)       \
 /** Return with code RET while setting merror_code to ERR.  */
 
 #define MERROR(err, ret)       \
@@ -66,6 +73,8 @@ extern int mdebug_hook ();
     exit (err);                \
   } while (0)
 
     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));       \
 #define M_CHECK_CHAR(c, ret)           \
   if ((c) < 0 || (c) > MCHAR_MAX)      \
     MERROR (MERROR_CHAR, (ret));       \
@@ -108,6 +117,9 @@ extern int mdebug_hook ();
       MEMORY_FULL (err);                                       \
   } while (0)
 
       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.
 
 /** The macro MTABLE_REALLOC () changes the size of memory block
     pointed to by P to a size suitable for an array of SIZE objects.
@@ -153,6 +165,8 @@ extern int mdebug_hook ();
 
 #define MSTRUCT_CALLOC(p, err) MTABLE_CALLOC ((p), 1, (err))
 
 
 #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
 
 #define USE_SAFE_ALLOCA \
   int sa_must_free = 0, sa_size = 0
 
@@ -401,21 +415,21 @@ struct _M17NObjectArray
 extern void mdebug__add_object_array (M17NObjectArray *array, char *name);
 
 #define M17N_OBJECT_ADD_ARRAY(array, name)     \
 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)    \
     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)  \
     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
 
     mdebug__unregister_object (&array, object);        \
   else
 
@@ -434,8 +448,8 @@ struct MText
 {
   M17NObject control;
 
 {
   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 Ãæ¤Îʸ»ú¿ô */
 
   /**en Number of characters in the M-text */
   /**ja M-text Ãæ¤Îʸ»ú¿ô */
@@ -526,85 +540,90 @@ struct MText
 
 \f
 
 
 \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 ();
 
 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 {                                 \
   do {                                 \
-    if (mdebug__flag & mdebug_mask)    \
-      fprintf (stderr, (fmt), (arg));  \
+    if (MDEBUG_FLAG ())                        \
+      {                                        \
+       FPRINTF;                        \
+       fflush (mdebug__output);        \
+      }                                        \
   } while (0)
 
   } 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)
 
   } 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)
 
 
   } 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)
 
 
   } while (0)
 
 
@@ -615,10 +634,6 @@ extern void mdebug__print_time ();
    | (((c) & 0xFF00) << 8) | (((c) & 0xFF) << 24))
 
 
    | (((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 ();
 /* Initialize/finalize function.  */
 
 extern int msymbol__init ();