[project @ 2001-04-02 16:10:32 by rrt]
[ghc-hetmet.git] / ghc / lib / std / cbits / stgio.h
index 2bce94b..9734281 100644 (file)
+/* -----------------------------------------------------------------------------
+ * $Id: stgio.h,v 1.28 2001/04/02 16:10:33 rrt Exp $
+ *
+ * (c) The GRASP/AQUA Project, Glasgow University, 1994-1999
+ *
+ * Helper code for GHC's IO subsystem.
+ *
+ * ---------------------------------------------------------------------------*/
+
 #ifndef STGIO_H
 #define STGIO_H
 
-#include "fileObject.h"
+#include "StgDLL.h"  /* for DLL_IMPORT_STDLIB */
 
-/* Decls for routines in ghc/lib/cbits/ only used there.
- * This file is used when compiling the Haskell library
- * that _ccalls_ those routines; and when compiling those
- * routines (to check consistency).
- */
-
-/* closeFile.lc */
-StgAddr allocMemory__ PROTO((StgInt));
-
-/* closeFile.lc */
-StgInt closeFile PROTO((StgForeignObj,StgInt));
-
-/* createDirectory.lc */
-StgInt createDirectory PROTO((StgByteArray));
-
-/* directoryAux.lc */
-StgAddr openDir__ PROTO((StgByteArray));
-StgAddr readDir__ PROTO((StgAddr));
-
-/* echoAux.lc */
-StgInt setTerminalEcho PROTO((StgForeignObj, StgInt));
-StgInt getTerminalEcho PROTO((StgForeignObj));
-StgInt isTerminalDevice PROTO((StgForeignObj));
-
-/* env.lc */
-char * strDup          PROTO((const char *));
-int    setenviron      PROTO((char **));
-int    copyenv         (STG_NO_ARGS);
-int    _setenv         PROTO((char *));
-int    delenv          PROTO((char *));
-
-/* errno.lc */
-extern int ghc_errno;
-extern int ghc_errtype;
-void   cvtErrno(STG_NO_ARGS);
-void   stdErrno(STG_NO_ARGS);
-StgAddr getErrStr__(STG_NO_ARGS);
-StgInt  getErrNo__(STG_NO_ARGS);
-StgInt  getErrType__(STG_NO_ARGS);
-
-/* execvpe.lc */
-int    execvpe PROTO((char *, char **, char **));
-
-/* fileEOF.lc */
-StgInt fileEOF PROTO((StgForeignObj));
-/* fileGetc.lc */
-StgInt fileGetc PROTO((StgForeignObj));
-
-/* fileLookAhead.lc */
-StgInt fileLookAhead PROTO((StgForeignObj));
-StgInt ungetChar PROTO((StgForeignObj,StgChar));
-
-/* fileObject.lc */
-void    setBufFlags PROTO((StgForeignObj, StgInt));
-void    setBufWPtr  PROTO((StgForeignObj, StgInt));
-StgInt  getBufWPtr  PROTO((StgForeignObj));
-void    setBuf      PROTO((StgForeignObj, StgAddr, StgInt));
-StgAddr getBuf      PROTO((StgForeignObj));
-StgAddr getWriteableBuf PROTO((StgForeignObj));
-StgAddr getBufStart PROTO((StgForeignObj,StgInt));
-StgInt  getBufSize  PROTO((StgForeignObj));
-void    setFilePtr  PROTO((StgForeignObj, StgAddr));
-StgAddr getFilePtr  PROTO((StgForeignObj));
-void    setConnectedTo  PROTO((StgForeignObj, StgForeignObj, StgInt));
-void    setPushbackBufSize PROTO((StgInt));
-StgInt  getPushbackBufSize (STG_NO_ARGS);
-void    setNonBlockingIOFlag__ PROTO((StgForeignObj));
-void    clearNonBlockingIOFlag__ PROTO((StgForeignObj));
-void    setConnNonBlockingIOFlag__ PROTO((StgForeignObj));
-void    clearConnNonBlockingIOFlag__ PROTO((StgForeignObj));
-StgInt  getFileFd  PROTO((StgForeignObj));
-StgInt  getConnFileFd  PROTO((StgForeignObj));
-
-/* filePosn.lc */
-StgInt getFilePosn PROTO((StgForeignObj));
-StgInt setFilePosn PROTO((StgForeignObj, StgInt));
-
-/* filePutc.lc */
-StgInt filePutc    PROTO((StgForeignObj, StgChar));
-
-/* fileSize.lc */
-StgInt fileSize    PROTO((StgForeignObj, StgByteArray));
-
-/* flushFile.lc */
-StgInt flushFile   PROTO((StgForeignObj));
-StgInt flushBuffer PROTO((StgForeignObj));
-StgInt flushReadBuffer PROTO((StgForeignObj));
-
-/* freeFile.lc */
-void freeStdFile PROTO((StgForeignObj));
-void freeFile PROTO((StgForeignObj));
-void freeStdFileObject PROTO((StgForeignObj));
-void freeFileObject PROTO((StgForeignObj));
-
-/* getBufferMode.lc */
-StgInt getBufferMode PROTO((StgForeignObj));
-
-/* getClockTime.lc */
-StgInt getClockTime PROTO((StgByteArray, StgByteArray));
-StgAddr        showTime     PROTO((I_, StgByteArray, StgByteArray));
-StgAddr        toClockSec   PROTO((I_, I_, I_, I_, I_, I_, I_, StgByteArray));
-StgAddr        toLocalTime  PROTO((I_, StgByteArray, StgByteArray));
-StgAddr        toUTCTime    PROTO((I_, StgByteArray, StgByteArray));
-
-/* getCPUTime.lc */
-StgByteArray getCPUTime PROTO((StgByteArray));
-StgInt clockTicks();
-
-/* getCurrentDirectory.lc */
-StgAddr getCurrentDirectory(STG_NO_ARGS);
-
-/* getLock.lc */
-int     lockFile    PROTO((int, int));
-int     unlockFile  PROTO((int));
-StgInt getLock     PROTO((StgInt, StgInt));
-
-/* inputReady.lc */
-StgInt inputReady  PROTO((StgForeignObj,StgInt));
-
-/* openFile.lc */
-IOFileObject* openFile    PROTO((StgByteArray, StgInt, StgInt, StgInt));
-IOFileObject* openFd      PROTO((StgInt, StgInt, StgInt));
-IOFileObject* openStdFile PROTO((StgInt, StgInt, StgInt));
-
-/* readFile.lc */
-StgInt readBlock PROTO((StgForeignObj));
-StgInt readChunk PROTO((StgForeignObj,StgAddr,StgInt));
-StgInt readLine PROTO((StgForeignObj));
-StgInt readChar PROTO((StgForeignObj));
-
-/* removeDirectory.lc */
-StgInt removeDirectory PROTO((StgByteArray));
-
-/* removeFile.lc */
-StgInt removeFile PROTO((StgByteArray));
-
-/* renameDirectory.lc */
-StgInt renameDirectory PROTO((StgByteArray, StgByteArray));
-
-/* renameFile.lc */
-StgInt renameFile PROTO((StgByteArray, StgByteArray));
-
-/* seekFile.lc */
-StgInt seekFile  PROTO((StgForeignObj, StgInt, StgInt, StgByteArray));
-StgInt seekFileP PROTO((StgForeignObj));
-
-/* setBuffering.lc */
-StgInt setBuffering PROTO((StgForeignObj, StgInt));
-
-/* setCurrentDirectory.lc */
-StgInt setCurrentDirectory PROTO((StgByteArray));
-
-/* showTime.lc */
-StgAddr showTime PROTO((StgInt, StgByteArray, StgByteArray));
-
-/* system.lc */
-StgInt systemCmd PROTO((StgByteArray));
-
-/* toLocalTime.lc */
-StgAddr toLocalTime PROTO((StgInt, StgByteArray, StgByteArray));
-
-/* toUTCTime.lc */
-StgAddr toUTCTime PROTO((StgInt, StgByteArray, StgByteArray));
-
-/* toClockSec.lc */
-StgAddr toClockSec PROTO((StgInt, StgInt, StgInt, StgInt, StgInt, StgInt, StgInt, StgByteArray));
+#include "stgerror.h"
+#include "fileObject.h"
 
-/* writeError.lc */
-void    writeErrString__ PROTO((StgAddr, StgByteArray, StgInt));
-/* writeFile.lc */
-StgInt writeFile PROTO((StgAddr, StgForeignObj, StgInt));
-StgInt writeBuf  PROTO((StgForeignObj, StgAddr, StgInt));
-StgInt writeBufBA  PROTO((StgForeignObj, StgByteArray, StgInt));
-StgInt writeFileObject PROTO((StgForeignObj, StgInt));
-StgInt writeBuffer PROTO((StgForeignObj, StgInt));
+/* Function prototypes for the I/O subsytem... */
+
+/* closeFile.c */
+StgAddr allocMemory__ (StgInt);
+
+/* closeFile.c */
+StgInt closeFile (StgForeignPtr,StgInt);
+
+/* echoAux.c */
+StgInt setTerminalEcho (StgForeignPtr, StgInt);
+StgInt getTerminalEcho (StgForeignPtr);
+StgInt isTerminalDevice (StgForeignPtr);
+
+/* env.c */
+char * strDup          (const char *);
+int    setenviron      (char **);
+int    copyenv         (void);
+int    _setenv         (char *);
+int    delenv          (char *);
+
+/* errno.c */
+DLL_IMPORT_STDLIB extern       int ghc_errno;
+DLL_IMPORT_STDLIB extern       int ghc_errtype;
+DLL_IMPORT_STDLIB extern       char* ghc_errstr;
+
+void   cvtErrno(void);
+void   stdErrno(void);
+void    convertErrno(void);
+StgAddr getErrStr__(void);
+StgInt  getErrNo__(void);
+StgInt  getErrType__(void);
+
+/* execvpe.c */
+int    execvpe (char *, char **, char **);
+
+/* fileEOF.c */
+StgInt fileEOF (StgForeignPtr);
+/* fileGetc.c */
+StgInt fileGetc (StgForeignPtr);
+
+/* fileLookAhead.c */
+StgInt fileLookAhead (StgForeignPtr);
+StgInt ungetChar (StgForeignPtr,StgChar);
+
+/* fileObject.c */
+void    setBufFlags (StgForeignPtr, StgInt);
+void    setBufWPtr  (StgForeignPtr, StgInt);
+StgInt  getBufWPtr  (StgForeignPtr);
+void    setBuf      (StgForeignPtr, StgAddr, StgInt);
+StgAddr getBuf      (StgForeignPtr);
+StgAddr getWriteableBuf (StgForeignPtr);
+StgAddr getBufStart (StgForeignPtr,StgInt);
+StgInt  getBufSize  (StgForeignPtr);
+void    setFilePtr  (StgForeignPtr, StgAddr);
+StgAddr getFilePtr  (StgForeignPtr);
+void    setConnectedTo  (StgForeignPtr, StgForeignPtr, StgInt);
+void    setPushbackBufSize (StgInt);
+StgInt  getPushbackBufSize (void);
+void    setNonBlockingIOFlag__ (StgForeignPtr);
+void    clearNonBlockingIOFlag__ (StgForeignPtr);
+void    setConnNonBlockingIOFlag__ (StgForeignPtr);
+void    clearConnNonBlockingIOFlag__ (StgForeignPtr);
+StgInt  getFileFd  (StgForeignPtr);
+StgInt  getConnFileFd  (StgForeignPtr);
+StgInt  fill_up_line_buffer(IOFileObject*);
+
+/* filePosn.c */
+StgInt getFilePosn (StgForeignPtr);
+StgInt setFilePosn (StgForeignPtr, StgInt, StgByteArray);
+
+/* filePutc.c */
+StgInt filePutc    (StgForeignPtr, StgChar);
+
+/* fileSize.c */
+StgInt fileSize    (StgForeignPtr, StgByteArray);
+StgInt fileSize_int64 (StgForeignPtr, StgByteArray);
+
+/* flushFile.c */
+StgInt flushFile   (StgForeignPtr);
+StgInt flushBuffer (StgForeignPtr);
+StgInt flushReadBuffer (StgForeignPtr);
+void   flushConnectedBuf (StgForeignPtr);
+
+/* freeFile.c */
+void freeStdFile (StgAddr);
+void freeStdFileObject (StgAddr);
+void freeFileObject (StgAddr);
+
+StgAddr ref_freeStdFileObject (void);
+StgAddr ref_freeFileObject    (void);
+
+/* getBufferMode.c */
+StgInt getBufferMode (StgForeignPtr);
+
+/* getCPUTime.c */
+StgInt getCPUTime (StgByteArray);
+StgInt clockTicks(void);
+
+/* getLock.c */
+int     lockFile    (int, int, int);
+int     unlockFile  (int);
+StgInt getLock     (StgInt, StgInt);
+
+/* inputReady.c */
+StgInt inputReady  (StgForeignPtr, StgInt);
+
+/* openFile.c */
+IOFileObject* openFile    (StgByteArray, StgInt, StgInt);
+IOFileObject* openFd      (StgInt, StgInt, StgInt);
+IOFileObject* openStdFile (StgInt, StgInt);
+
+/* progargs.c */
+StgAddr get_prog_argv(void);
+StgInt  get_prog_argc(void);
+
+/* readFile.c */
+StgInt readBlock (StgForeignPtr);
+StgInt readChunk (StgForeignPtr,StgAddr,StgInt,StgInt);
+StgInt readLine  (StgForeignPtr);
+StgInt readChar  (StgForeignPtr);
+
+/* seekFile.c */
+StgInt seekFile  (StgForeignPtr, StgInt, StgInt, StgByteArray);
+StgInt seekFile_int64 (StgForeignPtr, StgInt, StgInt64);
+StgInt seekFileP (StgForeignPtr);
+
+/* setBinaryMode.c */
+StgInt setBinaryMode__ (StgForeignPtr, StgInt);
+
+/* setBuffering.c */
+StgInt setBuffering (StgForeignPtr, StgInt);
+StgInt  const_BUFSIZ (void);
+
+/* setCurrentDirectory.c */
+StgInt setCurrentDirectory (StgByteArray);
+
+/* showTime.c */
+StgInt showTime (StgInt, StgByteArray, StgInt, StgByteArray);
+
+/* system.c */
+StgInt systemCmd (StgByteArray);
+
+/* writeError.c */
+StgAddr addrOf_ErrorHdrHook(void);
+void    writeErrString__ (StgAddr, StgByteArray, StgInt);
+
+/* writeFile.c */
+StgInt writeBuf  (StgForeignPtr, StgAddr, StgInt, StgInt);
+StgInt writeBufBA  (StgForeignPtr, StgByteArray, StgInt, StgInt);
+StgInt writeFileObject (StgForeignPtr, StgInt);
+StgInt writeBuffer (StgForeignPtr, StgInt);
+StgInt  write_ (StgForeignPtr ptr, StgAddr buf, StgInt len);
+
+/* tcSetAttr.c */
+#ifdef HAVE_TERMIOS_H
+#include <termios.h>
+int tcSetAttr (int fd, int options, const struct termios *tp);
+#endif
 
 #endif /* ! STGIO_H */
+
+