+/* -----------------------------------------------------------------------------
+ * $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
-/* 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 */
-StgInt closeFile PROTO((StgForeignObj));
-
-/* createDirectory.lc */
-StgInt createDirectory PROTO((StgByteArray));
-
-/* directoryAux.lc */
-StgAddr openDir__ PROTO((StgByteArray));
-StgAddr readDir__ PROTO((StgAddr));
-
-/* 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);
-
-/* 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));
-
-/* filePosn.lc */
-StgInt getFilePosn PROTO((StgForeignObj));
-StgInt setFilePosn PROTO((StgForeignObj, StgInt));
-
-/* filePutc.lc */
-StgInt filePutc PROTO((StgForeignObj, StgInt));
-
-/* fileSize.lc */
-StgInt fileSize PROTO((StgForeignObj, StgByteArray));
-
-/* flushFile.lc */
-StgInt flushFile PROTO((StgForeignObj));
-
-/* freeFile.lc */
-void freeStdFile PROTO((StgForeignObj));
-void freeFile 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);
+#include "StgDLL.h" /* for DLL_IMPORT_STDLIB */
+
+#include "stgerror.h"
+#include "fileObject.h"
+
+/* 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
-/* getLock.lc */
-int lockFile PROTO((int, int));
-int unlockFile PROTO((int));
-StgInt getLock PROTO((StgForeignObj, StgInt));
-
-/* inputReady.lc */
-StgInt inputReady PROTO((StgForeignObj,StgInt));
-
-/* openFile.lc */
-StgAddr openFile PROTO((StgByteArray, StgByteArray));
-StgAddr openFd PROTO((StgInt, StgByteArray));
-
-/* readFile.lc */
-StgInt readBlock PROTO((StgAddr, StgForeignObj, StgInt));
-StgInt readLine PROTO((StgAddr, StgForeignObj, StgInt));
-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));
+#endif /* ! STGIO_H */
-/* writeFile.lc */
-StgInt writeFile PROTO((StgAddr, StgForeignObj, StgInt));
-#endif /* ! STGIO_H */