1 /* -----------------------------------------------------------------------------
2 * $Id: HsBase.h,v 1.6 2002/03/26 23:50:56 sof Exp $
4 * (c) The University of Glasgow 2001-2002
6 * Definitions for package `core' which are visible in Haskell land.
8 * ---------------------------------------------------------------------------*/
19 #ifdef HAVE_SYS_TYPES_H
20 #include <sys/types.h>
25 #ifdef HAVE_SYS_STAT_H
49 #if defined(HAVE_GETTIMEOFDAY)
50 # ifdef HAVE_SYS_TIME_H
51 # include <sys/time.h>
53 #elif defined(HAVE_GETCLOCK)
54 # ifdef HAVE_SYS_TIMERS_H
56 # include <sys/timers.h>
59 #if defined(HAVE_TIME_H)
62 #ifdef HAVE_SYS_TIMEB_H
63 #include <sys/timeb.h>
68 #ifdef HAVE_SYS_TIMES_H
69 #include <sys/times.h>
71 #if defined(HAVE_WINSOCK_H) && defined(__MINGW32__)
78 #if !defined(mingw32_TARGET_OS) && !defined(irix_TARGET_OS)
79 # if defined(HAVE_SYS_RESOURCE_H)
80 # include <sys/resource.h>
85 #include <sys/syscall.h>
86 #define getrusage(a, b) syscall(SYS_GETRUSAGE, a, b)
87 #define HAVE_GETRUSAGE
91 #ifdef HAVE_SYS_WAIT_H
101 #if defined(__MINGW32__)
104 #include "timeUtils.h"
111 HsInt systemCmd(HsAddr cmd);
113 /* in inputReady.c */
114 int inputReady(int fd, int msecs, int isSock);
116 /* -----------------------------------------------------------------------------
117 64-bit operations, defined in longlong.c
118 -------------------------------------------------------------------------- */
120 #ifdef SUPPORT_LONG_LONGS
122 StgInt stg_gtWord64 (StgWord64, StgWord64);
123 StgInt stg_geWord64 (StgWord64, StgWord64);
124 StgInt stg_eqWord64 (StgWord64, StgWord64);
125 StgInt stg_neWord64 (StgWord64, StgWord64);
126 StgInt stg_ltWord64 (StgWord64, StgWord64);
127 StgInt stg_leWord64 (StgWord64, StgWord64);
129 StgInt stg_gtInt64 (StgInt64, StgInt64);
130 StgInt stg_geInt64 (StgInt64, StgInt64);
131 StgInt stg_eqInt64 (StgInt64, StgInt64);
132 StgInt stg_neInt64 (StgInt64, StgInt64);
133 StgInt stg_ltInt64 (StgInt64, StgInt64);
134 StgInt stg_leInt64 (StgInt64, StgInt64);
136 StgWord64 stg_remWord64 (StgWord64, StgWord64);
137 StgWord64 stg_quotWord64 (StgWord64, StgWord64);
139 StgInt64 stg_remInt64 (StgInt64, StgInt64);
140 StgInt64 stg_quotInt64 (StgInt64, StgInt64);
141 StgInt64 stg_negateInt64 (StgInt64);
142 StgInt64 stg_plusInt64 (StgInt64, StgInt64);
143 StgInt64 stg_minusInt64 (StgInt64, StgInt64);
144 StgInt64 stg_timesInt64 (StgInt64, StgInt64);
146 StgWord64 stg_and64 (StgWord64, StgWord64);
147 StgWord64 stg_or64 (StgWord64, StgWord64);
148 StgWord64 stg_xor64 (StgWord64, StgWord64);
149 StgWord64 stg_not64 (StgWord64);
151 StgWord64 stg_uncheckedShiftL64 (StgWord64, StgInt);
152 StgWord64 stg_uncheckedShiftRL64 (StgWord64, StgInt);
153 StgInt64 stg_uncheckedIShiftL64 (StgInt64, StgInt);
154 StgInt64 stg_uncheckedIShiftRL64 (StgInt64, StgInt);
155 StgInt64 stg_uncheckedIShiftRA64 (StgInt64, StgInt);
157 StgInt64 stg_intToInt64 (StgInt);
158 StgInt stg_int64ToInt (StgInt64);
159 StgWord64 stg_int64ToWord64 (StgInt64);
161 StgWord64 stg_wordToWord64 (StgWord);
162 StgWord stg_word64ToWord (StgWord64);
163 StgInt64 stg_word64ToInt64 (StgWord64);
165 StgInt64 stg_integerToInt64 (StgInt sa, StgByteArray /* Really: mp_limb_t* */ da);
166 StgWord64 stg_integerToWord64 (StgInt sa, StgByteArray /* Really: mp_limb_t* */ da);
168 #endif /* SUPPORT_LONG_LONGS */
170 /* -----------------------------------------------------------------------------
173 These functions are given as inlines here for when compiling via C,
174 but we also generate static versions into the cbits library for
175 when compiling to native code.
176 -------------------------------------------------------------------------- */
179 #define INLINE extern inline
183 __hscore_sigaddset( sigset_t * set, int s )
184 { return sigaddset(set,s); }
186 INLINE int __hscore_s_isreg(m) { return S_ISREG(m); }
187 INLINE int __hscore_s_isdir(m) { return S_ISDIR(m); }
188 INLINE int __hscore_s_isfifo(m) { return S_ISFIFO(m); }
189 INLINE int __hscore_s_isblk(m) { return S_ISBLK(m); }
190 INLINE int __hscore_s_ischr(m) { return S_ISCHR(m); }
192 INLINE int __hscore_s_issock(m) { return S_ISSOCK(m); }
195 #ifndef mingw32_TARGET_OS
197 __hscore_sigemptyset( sigset_t *set )
198 { sigemptyset(set); }
202 __hscore_memcpy_dst_off( char *dst, int dst_off, char *src, size_t sz )
203 { return memcpy(dst+dst_off, src, sz); }
206 __hscore_memcpy_src_off( char *dst, char *src, int src_off, size_t sz )
207 { return memcpy(dst, src+src_off, sz); }
210 __hscore_supportsTextMode()
212 #if defined(mingw32_TARGET_OS)
213 return HS_BOOL_FALSE;
252 __hscore_o_wronly( void )
262 __hscore_o_rdwr( void )
272 __hscore_o_append( void )
282 __hscore_o_creat( void )
292 __hscore_o_excl( void )
302 __hscore_o_trunc( void )
312 __hscore_o_noctty( void )
322 __hscore_o_nonblock( void )
332 __hscore_seek_set( void )
338 __hscore_seek_end( void )
344 __hscore_setmode( HsInt fd, HsBool toBin )
346 #if defined(__MINGW32__)
347 return setmode(fd,(toBin == HS_BOOL_TRUE) ? _O_BINARY : _O_TEXT);
354 __hscore_PrelHandle_write( HsInt fd, HsBool isSock, HsAddr ptr,
357 #if defined(__MINGW32__)
359 return send(fd,ptr + off, sz, 0);
362 return write(fd,ptr + off, sz);
366 __hscore_PrelHandle_read( HsInt fd, HsBool isSock, HsAddr ptr,
369 #if defined(__MINGW32__)
371 return recv(fd,ptr + off, sz, 0);
374 return read(fd,ptr + off, sz);
378 #if defined(__MINGW32__)
380 __hscore_Time_ghcTimezone( void ) { return &_timezone; }
383 __hscore_Time_ghcTzname( void ) { return _tzname; }
387 __hscore_mkdir( HsAddr pathName, HsInt mode )
389 #if defined(__MINGW32__)
390 return mkdir(pathName);
392 return mkdir(pathName,mode);
397 __hscore_lstat( HsAddr fname, HsAddr st )
400 return lstat((const char*)fname, (struct stat*)st);
402 return stat((const char*)fname, (struct stat*)st);
406 INLINE HsInt __hscore_path_max() { return PATH_MAX; }
408 INLINE mode_t __hscore_R_OK() { return R_OK; }
409 INLINE mode_t __hscore_W_OK() { return W_OK; }
410 INLINE mode_t __hscore_X_OK() { return X_OK; }
412 INLINE mode_t __hscore_S_IRUSR() { return S_IRUSR; }
413 INLINE mode_t __hscore_S_IWUSR() { return S_IWUSR; }
414 INLINE mode_t __hscore_S_IXUSR() { return S_IXUSR; }
417 __hscore_d_name( struct dirent* d )
419 #ifndef mingw32_TARGET_OS
420 return (HsAddr)(&d->d_name);
422 return (HsAddr)(d->d_name);
427 __hscore_end_of_dir( void )
429 #ifndef mingw32_TARGET_OS
437 __hscore_free_dirent(HsAddr dEnt)
445 __hscore_sizeof_stat( void )
447 return sizeof(struct stat);
450 INLINE time_t __hscore_st_mtime ( struct stat* st ) { return st->st_mtime; }
451 INLINE off_t __hscore_st_size ( struct stat* st ) { return st->st_size; }
452 INLINE mode_t __hscore_st_mode ( struct stat* st ) { return st->st_mode; }
455 INLINE tcflag_t __hscore_lflag( struct termios* ts ) { return ts->c_lflag; }
458 __hscore_poke_lflag( struct termios* ts, tcflag_t t ) { ts->c_lflag = t; }
460 INLINE unsigned char*
461 __hscore_ptr_c_cc( struct termios* ts )
462 { return (unsigned char*) &ts->c_cc; }
466 __hscore_sizeof_termios( void )
468 #ifndef mingw32_TARGET_OS
469 return sizeof(struct termios);
476 __hscore_sizeof_sigset_t( void )
478 #ifndef mingw32_TARGET_OS
479 return sizeof(sigset_t);
486 __hscore_echo( void )
497 __hscore_tcsanow( void )
508 __hscore_icanon( void )
517 INLINE int __hscore_vmin( void )
526 INLINE int __hscore_vtime( void )
535 INLINE int __hscore_sigttou( void )
544 INLINE int __hscore_sig_block( void )
553 INLINE int __hscore_sig_setmask( void )
563 __hscore_f_getfl( void )
573 __hscore_f_setfl( void )