Windows NT port.
[idzebra-moved-to-github.git] / dfa / dfa.c
index 199ebea..f55b69a 100644 (file)
--- a/dfa/dfa.c
+++ b/dfa/dfa.c
@@ -1,10 +1,17 @@
 /*
- * Copyright (C) 1994-1996, Index Data I/S 
+ * Copyright (C) 1994-1997, Index Data I/S 
  * All rights reserved.
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: dfa.c,v $
- * Revision 1.15  1997-02-10 10:19:20  adam
+ * Revision 1.17  1997-09-18 08:59:17  adam
+ * Extra generic handle for the character mapping routines.
+ *
+ * Revision 1.16  1997/09/05 15:29:57  adam
+ * Changed prototype for chr_map_input - added const.
+ * Added support for C++, headers uses extern "C" for public definitions.
+ *
+ * Revision 1.15  1997/02/10 10:19:20  adam
  * Added facility for open character sets, eg [a-].
  *
  * Revision 1.14  1996/10/29 13:57:22  adam
@@ -418,10 +425,11 @@ static int read_charset (void)
             break;
         if (parse_info->cmap)
         {
-            char **mapto, mapfrom[2];
+            const char **mapto;
+           char mapfrom[2];
             const char *mcp = mapfrom;
             mapfrom[0] = ch0;
-            mapto = (*parse_info->cmap)(&mcp, 1);
+            mapto = (*parse_info->cmap)(parse_info->cmap_data, &mcp, 1);
             assert (mapto);
             ch0 = mapto[0][0];
         }
@@ -447,10 +455,11 @@ static int read_charset (void)
 #endif
             if (!open_range && parse_info->cmap)
             {
-                char **mapto, mapfrom[2];
+                const char **mapto;
+               char mapfrom[2];
                 const char *mcp = mapfrom;
                 mapfrom[0] = ch1;
-                mapto = (*parse_info->cmap) (&mcp, 1);
+                mapto = (*parse_info->cmap) (parse_info->cmap_data, &mcp, 1);
                 assert (mapto);
                 ch1 = mapto[0][0];
             }
@@ -474,7 +483,7 @@ static int read_charset (void)
 
 static int map_l_char (void)
 {
-    char **mapto;
+    const char **mapto;
     const char *cp0 = (const char *) (expr_ptr-1);
     int i = 0, len = strlen(cp0);
 
@@ -487,7 +496,7 @@ static int map_l_char (void)
     if (!parse_info->cmap)
         return L_CHAR;
 
-    mapto = (*parse_info->cmap) (&cp0, len);
+    mapto = (*parse_info->cmap) (parse_info->cmap_data, &cp0, len);
     assert (mapto);
     
     expr_ptr = (const unsigned char *) cp0;
@@ -1101,9 +1110,11 @@ struct DFA *dfa_init (void)
     return dfa;
 }
 
-void dfa_set_cmap (struct DFA *dfa, char **(*cmap)(const char **from, int len))
+void dfa_set_cmap (struct DFA *dfa, void *vp,
+                  const char **(*cmap)(void *vp, const char **from, int len))
 {
     dfa->parse_info->cmap = cmap;
+    dfa->parse_info->cmap_data = vp;
 }
 
 int dfa_parse (struct DFA *dfa, const char **pattern)