[project @ 2001-12-21 15:07:20 by simonmar]
[ghc-base.git] / include / HsCore.h
index d07e829..3a13197 100644 (file)
@@ -1,5 +1,7 @@
 /* -----------------------------------------------------------------------------
- * $Id: HsCore.h,v 1.4 2001/09/14 11:25:57 simonmar Exp $
+ * $Id: HsCore.h,v 1.5 2001/12/21 15:07:26 simonmar Exp $
+ *
+ * (c) The University of Glasgow 2001-2002
  *
  * Definitions for package `core' which are visible in Haskell land.
  *
@@ -63,6 +65,9 @@
 #ifdef HAVE_SYS_TIMES_H
 #include <sys/times.h>
 #endif
+#ifdef HAVE_WINSOCK_H
+#include <winsock.h>
+#endif
 
 #if !defined(mingw32_TARGET_OS) && !defined(irix_TARGET_OS)
 # if defined(HAVE_SYS_RESOURCE_H)
 #ifdef HAVE_VFORK_H
 #include <vfork.h>
 #endif
+#include "lockFile.h"
+#include "dirUtils.h"
+#include "errUtils.h"
+#include "PrelIOUtils.h"
 
-extern inline int s_isreg_wrap(m)  { return S_ISREG(m);  }
-extern inline int s_isdir_wrap(m)  { return S_ISDIR(m);  }
-extern inline int s_isfifo_wrap(m) { return S_ISFIFO(m); }
-extern inline int s_isblk_wrap(m)  { return S_ISBLK(m);  }
-extern inline int s_ischr_wrap(m)  { return S_ISCHR(m);  }
-#ifdef S_ISSOCK
-extern inline int s_issock_wrap(m) { return S_ISSOCK(m); }
+#ifdef _WIN32
+#include <io.h>
+#include <fcntl.h>
 #endif
 
-extern inline void *
-memcpy_wrap_dst_off(char *dst, int dst_off, char *src, size_t sz)
-{ return memcpy(dst+dst_off, src, sz); }
+/* in ghc_errno.c */
+int *ghcErrno(void);
 
-extern inline void *
-memcpy_wrap_src_off(char *dst, char *src, int src_off, size_t sz)
-{ return memcpy(dst, src+src_off, sz); }
+/* in system.c */
+HsInt systemCmd(HsAddr cmd);
 
-extern inline int
-read_ba_wrap(int fd, void *ptr, HsInt off, int size)
-{ return read(fd, ptr + off, size); }
+/* in inputReady.c */
+int inputReady(int fd, int msecs, int isSock);
 
-extern inline int
-write_wrap(int fd, void *ptr, HsInt off, int size)
-{ return write(fd, ptr + off, size); }
+/* -----------------------------------------------------------------------------
+   INLINE functions.
 
-extern inline int
-read_wrap(int fd, void *ptr, HsInt off, int size)
-{ return read(fd, ptr + off, size); }
+   These functions are given as inlines here for when compiling via C,
+   but we also generate static versions into the cbits library for
+   when compiling to native code.
+   -------------------------------------------------------------------------- */
 
-#include "lockFile.h"
+#ifndef INLINE
+#define INLINE extern inline
+#endif
 
-#include "HsFFI.h"
+INLINE int __hscore_s_isreg(m)  { return S_ISREG(m);  }
+INLINE int __hscore_s_isdir(m)  { return S_ISDIR(m);  }
+INLINE int __hscore_s_isfifo(m) { return S_ISFIFO(m); }
+INLINE int __hscore_s_isblk(m)  { return S_ISBLK(m);  }
+INLINE int __hscore_s_ischr(m)  { return S_ISCHR(m);  }
+#ifdef S_ISSOCK
+INLINE int __hscore_s_issock(m) { return S_ISSOCK(m); }
+#endif
 
-/* in ghc_errno.c */
-int *ghcErrno(void);
+INLINE void
+__hscore_sigemptyset( sigset_t *set )
+{ sigemptyset(set); }
 
-/* in system.c */
-HsInt systemCmd(HsAddr cmd);
+INLINE void *
+__hscore_memcpy_dst_off( char *dst, int dst_off, char *src, size_t sz )
+{ return memcpy(dst+dst_off, src, sz); }
 
-/* in inputReady.c */
-int inputReady(int fd, int msecs);
+INLINE void *
+__hscore_memcpy_src_off( char *dst, char *src, int src_off, size_t sz )
+{ return memcpy(dst, src+src_off, sz); }
+
+INLINE HsBool
+__hscore_supportsTextMode()
+{
+#if defined(mingw32_TARGET_OS)
+  return HS_BOOL_FALSE;
+#else
+  return HS_BOOL_TRUE;
+#endif
+}
+
+INLINE HsInt
+__hscore_bufsiz()
+{
+  return BUFSIZ;
+}
+
+INLINE HsInt
+__hscore_seek_cur()
+{
+  return SEEK_CUR;
+}
+
+INLINE HsInt
+__hscore_o_binary()
+{
+#ifdef HAVE_O_BINARY
+  return O_BINARY;
+#else
+  return 0;
+#endif
+}
+
+INLINE HsInt
+__hscore_seek_set()
+{
+  return SEEK_SET;
+}
+
+INLINE HsInt
+__hscore_seek_end()
+{
+  return SEEK_END;
+}
+
+INLINE HsInt
+__hscore_setmode( HsInt fd, HsBool toBin )
+{
+#ifdef _WIN32
+  return setmode(fd,(toBin == HS_BOOL_TRUE) ? _O_BINARY : _O_TEXT);
+#else
+  return 0;
+#endif  
+}
+
+INLINE HsInt
+__hscore_PrelHandle_write( HsInt fd, HsBool isSock, HsAddr ptr, 
+                          HsInt off, int sz )
+{
+#ifdef _WIN32
+  if (isSock) {
+    return send(fd,ptr + off, sz, 0);
+  }
+#endif
+  return write(fd,ptr + off, sz);
+}
+
+INLINE HsInt
+__hscore_PrelHandle_read( HsInt fd, HsBool isSock, HsAddr ptr, 
+                         HsInt off, int sz )
+{
+#ifdef _WIN32
+  if (isSock) {
+    return recv(fd,ptr + off, sz, 0);
+  }
+#endif
+  return read(fd,ptr + off, sz);
+
+}
 
 #endif
+