[project @ 2005-01-14 14:30:42 by malcolm]
[ghc-base.git] / Text / Regex / Posix.hsc
index 6664165..afee652 100644 (file)
@@ -6,14 +6,19 @@
 -- 
 -- Maintainer  :  libraries@haskell.org
 -- Stability   :  experimental
--- Portability :  non-portable (needs POSIX regexps)
+-- Portability :  portable
 --
 -- Interface to the POSIX regular expression library.
 --
 -----------------------------------------------------------------------------
 
 -- ToDo: should have an interface using PackedStrings.
+#ifndef __NHC__
 #include "ghcconfig.h"
+#else
+#define HAVE_REGEX_H 1
+#define HAVE_REGCOMP 1
+#endif
 
 module Text.Regex.Posix (
        -- * The @Regex@ type
@@ -43,11 +48,11 @@ module Text.Regex.Posix (
 #include "regex.h"
 #else
 #include "regex/regex.h"
-{-# CBITS regex/reallocf.c #-}
-{-# CBITS regex/regcomp.c #-}
-{-# CBITS regex/regerror.c #-}
-{-# CBITS regex/regexec.c #-}
-{-# CBITS regex/regfree.c #-}
+{-# CFILES cbits/regex/reallocf.c #-}
+{-# CFILES cbits/regex/regcomp.c #-}
+{-# CFILES cbits/regex/regerror.c #-}
+{-# CFILES cbits/regex/regexec.c #-}
+{-# CFILES cbits/regex/regfree.c #-}
 #endif
 
 import Prelude
@@ -106,13 +111,13 @@ regexec (Regex regex_fptr) str = do
 
         if (r /= 0) then return Nothing else do 
 
-        (before,match,after) <- matched_parts str p_match
+          (before,match,after) <- matched_parts str p_match
 
-        sub_strs <- 
-         mapM (unpack str) $ take nsub_int $ tail $
-            iterate (`plusPtr` (#const sizeof(regmatch_t))) p_match
+          sub_strs <- 
+           mapM (unpack str) $ take nsub_int $ tail $
+              iterate (`plusPtr` (#const sizeof(regmatch_t))) p_match
 
-        return (Just (before, match, after, sub_strs))
+          return (Just (before, match, after, sub_strs))
 
 matched_parts :: String -> Ptr CRegMatch -> IO (String, String, String)
 matched_parts string p_match = do
@@ -130,7 +135,7 @@ unpack string p_match = do
   -- the subexpression may not have matched at all, perhaps because it
   -- was optional.  In this case, the offsets are set to -1.
   if (start == -1) then return "" else do
-  return (take (fromIntegral (end-start)) (drop (fromIntegral start) string))
+    return (take (fromIntegral (end-start)) (drop (fromIntegral start) string))
 
 -- -----------------------------------------------------------------------------
 -- The POSIX regex C interface
@@ -169,12 +174,12 @@ unpack string p_match = do
 
 type CRegMatch = ()
 
-foreign import ccall unsafe "regcomp"
+foreign import ccall unsafe "regex.h regcomp"
   c_regcomp :: Ptr CRegex -> CString -> CInt -> IO CInt
 
-foreign import ccall  unsafe "&regfree"
+foreign import ccall  unsafe "regex.h &regfree"
   ptr_regfree :: FunPtr (Ptr CRegex -> IO ())
 
-foreign import ccall unsafe "regexec"
+foreign import ccall unsafe "regex.h regexec"
   c_regexec :: Ptr CRegex -> CString -> CSize
            -> Ptr CRegMatch -> CInt -> IO CInt