1 /* -----------------------------------------------------------------------------
2 * $Id: stgio.h,v 1.24 2000/11/07 10:42:57 simonmar Exp $
4 * (c) The GRASP/AQUA Project, Glasgow University, 1994-1999
6 * Helper code for GHC's IO subsystem.
8 * ---------------------------------------------------------------------------*/
13 #include "StgDLL.h" /* for DLL_IMPORT_STDLIB */
16 #include "fileObject.h"
18 /* Function prototypes for the I/O subsytem...
22 StgAddr allocMemory__ (StgInt);
25 StgInt closeFile (StgForeignPtr,StgInt);
27 /* createDirectory.c */
28 StgInt createDirectory (StgByteArray);
31 StgAddr openDir__ (StgByteArray);
32 StgAddr readDir__ (StgAddr);
33 StgAddr get_dirent_d_name (StgAddr);
34 StgWord get_stat_st_mode (StgAddr);
35 StgInt64 get_stat_st_mtime(StgAddr);
36 void set_stat_st_mtime(StgByteArray, StgByteArray);
37 StgInt sizeof_stat (void);
38 StgInt prim_stat (StgAddr,StgAddr);
39 StgWord const_S_IRUSR (void);
40 StgWord const_S_IWUSR (void);
41 StgWord const_S_IXUSR (void);
42 StgWord const_R_OK (void);
43 StgWord const_W_OK (void);
44 StgWord const_X_OK (void);
45 StgWord const_F_OK (void);
46 StgInt prim_S_ISDIR (StgWord);
47 StgInt prim_S_ISREG (StgWord);
50 StgInt setTerminalEcho (StgForeignPtr, StgInt);
51 StgInt getTerminalEcho (StgForeignPtr);
52 StgInt isTerminalDevice (StgForeignPtr);
55 char * strDup (const char *);
56 int setenviron (char **);
62 DLL_IMPORT_STDLIB extern int ghc_errno;
63 DLL_IMPORT_STDLIB extern int ghc_errtype;
64 DLL_IMPORT_STDLIB extern char* ghc_errstr;
68 void convertErrno(void);
69 StgAddr getErrStr__(void);
70 StgInt getErrNo__(void);
71 StgInt getErrType__(void);
74 int execvpe (char *, char **, char **);
77 StgInt fileEOF (StgForeignPtr);
79 StgInt fileGetc (StgForeignPtr);
82 StgInt fileLookAhead (StgForeignPtr);
83 StgInt ungetChar (StgForeignPtr,StgChar);
86 void setBufFlags (StgForeignPtr, StgInt);
87 void setBufWPtr (StgForeignPtr, StgInt);
88 StgInt getBufWPtr (StgForeignPtr);
89 void setBuf (StgForeignPtr, StgAddr, StgInt);
90 StgAddr getBuf (StgForeignPtr);
91 StgAddr getWriteableBuf (StgForeignPtr);
92 StgAddr getBufStart (StgForeignPtr,StgInt);
93 StgInt getBufSize (StgForeignPtr);
94 void setFilePtr (StgForeignPtr, StgAddr);
95 StgAddr getFilePtr (StgForeignPtr);
96 void setConnectedTo (StgForeignPtr, StgForeignPtr, StgInt);
97 void setPushbackBufSize (StgInt);
98 StgInt getPushbackBufSize (void);
99 void setNonBlockingIOFlag__ (StgForeignPtr);
100 void clearNonBlockingIOFlag__ (StgForeignPtr);
101 void setConnNonBlockingIOFlag__ (StgForeignPtr);
102 void clearConnNonBlockingIOFlag__ (StgForeignPtr);
103 StgInt getFileFd (StgForeignPtr);
104 StgInt getConnFileFd (StgForeignPtr);
105 StgInt fill_up_line_buffer(IOFileObject*);
108 StgInt getFilePosn (StgForeignPtr);
109 StgInt setFilePosn (StgForeignPtr, StgInt, StgByteArray);
112 StgInt filePutc (StgForeignPtr, StgChar);
115 StgInt fileSize (StgForeignPtr, StgByteArray);
116 StgInt fileSize_int64 (StgForeignPtr, StgByteArray);
119 StgInt flushFile (StgForeignPtr);
120 StgInt flushBuffer (StgForeignPtr);
121 StgInt flushReadBuffer (StgForeignPtr);
122 void flushConnectedBuf (StgForeignPtr);
125 void freeStdFile (StgAddr);
126 void freeStdFileObject (StgAddr);
127 void freeFileObject (StgAddr);
129 StgAddr ref_freeStdFileObject (void);
130 StgAddr ref_freeFileObject (void);
132 /* getBufferMode.c */
133 StgInt getBufferMode (StgForeignPtr);
136 StgInt getClockTime (StgByteArray, StgByteArray);
137 StgInt prim_getClockTime(StgByteArray, StgByteArray);
140 StgInt getCPUTime (StgByteArray);
141 StgInt clockTicks(void);
143 /* getCurrentDirectory.c */
144 StgAddr getCurrentDirectory(void);
146 /* getDirectoryContents.c */
147 StgAddr getDirectoryContents (StgByteArray);
150 int lockFile (int, int, int);
151 int unlockFile (int);
152 StgInt getLock (StgInt, StgInt);
155 StgInt inputReady (StgForeignPtr, StgInt);
158 IOFileObject* openFile (StgByteArray, StgInt, StgInt);
159 IOFileObject* openFd (StgInt, StgInt, StgInt);
160 IOFileObject* openStdFile (StgInt, StgInt);
163 StgAddr get_prog_argv(void);
164 StgInt get_prog_argc(void);
167 StgInt readBlock (StgForeignPtr);
168 StgInt readChunk (StgForeignPtr,StgAddr,StgInt,StgInt);
169 StgInt readLine (StgForeignPtr);
170 StgInt readChar (StgForeignPtr);
172 /* removeDirectory.c */
173 StgInt removeDirectory (StgByteArray);
176 StgInt removeFile (StgByteArray);
178 /* renameDirectory.c */
179 StgInt renameDirectory (StgByteArray, StgByteArray);
182 StgInt renameFile (StgByteArray, StgByteArray);
185 StgInt seekFile (StgForeignPtr, StgInt, StgInt, StgByteArray);
186 StgInt seekFile_int64 (StgForeignPtr, StgInt, StgInt64);
187 StgInt seekFileP (StgForeignPtr);
189 /* setBinaryMode.c */
190 StgInt setBinaryMode__ (StgForeignPtr, StgInt);
193 StgInt setBuffering (StgForeignPtr, StgInt);
194 StgInt const_BUFSIZ (void);
196 /* setCurrentDirectory.c */
197 StgInt setCurrentDirectory (StgByteArray);
200 StgInt showTime (StgInt, StgByteArray, StgInt, StgByteArray);
203 StgInt systemCmd (StgByteArray);
206 StgInt get_tm_sec ( StgAddr );
207 StgInt get_tm_min ( StgAddr );
208 StgInt get_tm_hour ( StgAddr );
209 StgInt get_tm_mday ( StgAddr );
210 StgInt get_tm_mon ( StgAddr );
211 StgInt get_tm_year ( StgAddr );
212 StgInt get_tm_wday ( StgAddr );
213 StgInt get_tm_yday ( StgAddr );
214 StgInt get_tm_isdst ( StgAddr );
215 StgAddr prim_ZONE ( StgAddr );
216 StgInt prim_GMTOFF ( StgAddr );
217 void prim_SETZONE ( StgAddr, StgAddr );
218 StgInt sizeof_word ( void );
219 StgInt sizeof_struct_tm ( void );
220 StgInt sizeof_time_t ( void );
221 char* get_ZONE ( StgAddr );
224 StgInt toLocalTime (StgInt, StgByteArray, StgByteArray);
225 StgInt prim_toLocalTime ( StgInt64,StgByteArray );
228 StgInt toUTCTime (StgInt, StgByteArray, StgByteArray);
229 StgInt prim_toUTCTime ( StgInt64,StgByteArray );
232 StgInt toClockSec (StgInt, StgInt, StgInt, StgInt, StgInt, StgInt, StgInt, StgInt, StgByteArray);
235 StgAddr addrOf_ErrorHdrHook(void);
236 void writeErrString__ (StgAddr, StgByteArray, StgInt);
239 StgInt writeBuf (StgForeignPtr, StgAddr, StgInt, StgInt);
240 StgInt writeBufBA (StgForeignPtr, StgByteArray, StgInt, StgInt);
241 StgInt writeFileObject (StgForeignPtr, StgInt);
242 StgInt writeBuffer (StgForeignPtr, StgInt);
243 StgInt write_ (StgForeignPtr ptr, StgAddr buf, StgInt len);
245 #endif /* ! STGIO_H */