-# $Id: Makefile,v 1.14 2001/07/04 20:40:19 chorns Exp $
+# $Id: Makefile,v 1.15 2001/07/06 00:58:15 ekohl Exp $
#
# ReactOS Operating System
#
io/write.o
OBJECTS_MATH = \
+ math/acos.o \
math/adjust.o \
+ math/asin.o \
+ math/atan.o \
+ math/atan2.o \
+ math/cabs.o \
+ math/ceil.o \
+ math/cos.o \
+ math/cosh.o \
+ math/exp.o \
+ math/fabs.o \
+ math/floor.o \
+ math/fmod.o \
+ math/frexp.o \
+ math/ftol.o \
+ math/huge_val.o \
+ math/hypot.o \
+ math/j0_y0.o \
+ math/j1_y1.o \
+ math/jn_yn.o \
+ math/ldexp.o \
+ math/log.o \
+ math/log10.o \
math/modf.o \
math/pow.o \
+ math/sin.o \
+ math/sinh.o \
+ math/sqrt.o \
+ math/stubs.o \
+ math/tan.o \
+ math/tanh.o
OBJECTS_MISC = \
misc/amsg.o \
OBJECTS_STDIO = \
stdio/allocfil.o \
+ stdio/clearerr.o \
stdio/fclose.o \
+ stdio/fdopen.o \
stdio/feof.o \
stdio/ferror.o \
stdio/fflush.o \
+ stdio/fgetc.o \
+ stdio/fgetchar.o \
+ stdio/fgetpos.o \
stdio/fgets.o \
stdio/filbuf.o \
stdio/fileno.o \
stdio/fopen.o \
stdio/fprintf.o \
stdio/fputc.o \
+ stdio/fputchar.o \
stdio/fputs.o \
stdio/fread.o \
+ stdio/freopen.o \
stdio/fscanf.o \
+ stdio/fseek.o \
+ stdio/fsetpos.o \
+ stdio/fsopen.o \
+ stdio/ftell.o \
stdio/fwalk.o \
stdio/fwrite.o \
stdio/getc.o \
+ stdio/getchar.o \
+ stdio/gets.o \
+ stdio/getw.o \
+ stdio/perror.o \
+ stdio/popen.o \
stdio/printf.o \
stdio/putc.o \
stdio/putchar.o \
stdio/puts.o \
+ stdio/putw.o \
stdio/remove.o \
+ stdio/rename.o \
+ stdio/rewind.o \
+ stdio/rmtmp.o \
stdio/scanf.o \
+ stdio/setbuf.o \
stdio/setvbuf.o \
stdio/sprintf.o \
stdio/sscanf.o \
stdio/stdhnd.o \
stdio/tempnam.o \
+ stdio/tmpfile.o \
+ stdio/tmpnam.o \
stdio/ungetc.o \
stdio/vfprintf.o \
stdio/vfscanf.o \
-; $Id: msvcrt.def,v 1.9 2001/07/04 16:39:37 ekohl Exp $
+; $Id: msvcrt.def,v 1.10 2001/07/06 00:58:15 ekohl Exp $
;
; ReactOS MSVCRT Compatibility Library
;
;----------------------------------------------------------------------
; C Undecorated Symbols
;----------------------------------------------------------------------
-; _CIacos
-; _CIasin
-; _CIatan
-; _CIatan2
-; _CIcos
-; _CIcosh
-; _CIexp
-; _CIfmod
-; _CIlog
-; _CIlog10
-; _CIpow
-; _CIsin
-; _CIsinh
-; _CIsqrt
-; _CItan
-; _CItanh
+_CIacos
+_CIasin
+_CIatan
+_CIatan2
+_CIcos
+_CIcosh
+_CIexp
+_CIfmod
+_CIlog
+_CIlog10
+_CIpow
+_CIsin
+_CIsinh
+_CIsqrt
+_CItan
+_CItanh
; _CxxThrowException
; _EH_prolog
; _Getdays
; _Getmonths
; _Gettnames
-; _HUGE
+_HUGE DATA
; _Strftime
_XcptFilter
; __CxxFrameHandler
_beginthread
_beginthreadex
_c_exit
-; _cabs
+_cabs
; _callnewh
_cexit
_cgets
; _expand
_fcloseall
; _fcvt
-; _fdopen
-; _fgetchar
-; _fgetwchar
+_fdopen
+_fgetchar
+_fgetwchar
_filbuf
; _fileinfo
_filelength
_fpclass
_fpieee_flt
_fpreset
-; _fputchar
-; _fputwchar
-; _fsopen
+_fputchar
+_fputwchar
+_fsopen
_fstat
_fstati64
; _ftime
-; _ftol
+_ftol
_fullpath
_futime
; _gcvt
; _getmbcp
_getpid
; _getsystime
-; _getw
+_getw
; _getws
_global_unwind2
; _heapadd
; _heapset
; _heapused
; _heapwalk
-; _hypot
+_hypot
_i64toa
_i64tow
_initterm
_isnan
_itoa
_itow
-; _j0
-; _j1
-; _jn
+_j0
+_j1
+_jn
_kbhit
; _lfind
_loaddll
; _outp
; _outpd
; _outpw
-; _pclose
+_pclose
_pctype DATA
_pgmptr DATA
_pipe
-; _popen
+_popen
_purecall
_putch
_putenv
-; _putw
+_putw
_putws
_pwctype DATA
_read
_rmdir
-; _rmtmp
+_rmtmp
_rotl
_rotr
; _safe_fdiv
; _wexecve
; _wexecvp
; _wexecvpe
-; _wfdopen
+_wfdopen
_wfindfirst
_wfindfirsti64
_wfindnext
_wfindnexti64
-; _wfopen
-; _wfreopen
-; _wfsopen
+_wfopen
+_wfreopen
+_wfsopen
_wfullpath
_wgetcwd
_wgetdcwd
_wmkdir
; _wmktemp
_wopen
-; _wperror
+_wperror
; _wpgmptr DATA
-; _wpopen
+_wpopen
_wputenv
_wremove
-; _wrename
+_wrename
_write
_wrmdir
_wsearchenv
; _wstrdate
; _wstrtime
; _wsystem
-; _wtempnam
-; _wtmpnam
+_wtempnam
+_wtmpnam
_wtoi
_wtoi64
_wtol
_wunlink
_wutime
-; _y0
-; _y1
-; _yn
+_y0
+_y1
+_yn
abort
abs
-; acos
+acos
asctime
-; asin
-; atan
-; atan2
+asin
+atan
+atan2
atexit
atof
atoi
atol
bsearch
calloc
-; ceil
-; clearerr
+ceil
+clearerr
; clock
-; cos
-; cosh
+cos
+cosh
ctime
; difftime
div
exit
-; exp
-; fabs
+exp
+fabs
fclose
feof
ferror
fflush
-; fgetc
-; fgetpos
+fgetc
+fgetpos
fgets
-; fgetwc
+fgetwc
; fgetws
-; floor
-; fmod
+floor
+fmod
fopen
fprintf
fputc
; fputws
fread
free
-; freopen
-; frexp
+freopen
+frexp
fscanf
-; fseek
-; fsetpos
-; ftell
+fseek
+fsetpos
+ftell
fwprintf
fwrite
fwscanf
getc
-; getchar
+getchar
getenv
-; gets
+gets
getwc
; getwchar
gmtime
iswxdigit
isxdigit
labs
-; ldexp
+ldexp
ldiv
; localeconv
localtime
-; log
-; log10
+log
+log10
; longjmp
malloc
; mblen
memset
mktime
modf
-; perror
+perror
pow
printf
putc
putwchar
qsort
raise
-; rand
+rand
realloc
remove
-; rename
-; rewind
+rename
+rewind
scanf
-; setbuf
+setbuf
; setlocale
setvbuf
signal
-; sin
-; sinh
+sin
+sinh
sprintf
-; sqrt
-; srand
+sqrt
+srand
sscanf
strcat
strchr
swprintf
swscanf
; system
-; tan
-; tanh
+tan
+tanh
time
-; tmpfile
-; tmpnam
+tmpfile
+tmpnam
tolower
toupper
towlower
--- /dev/null
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+#include <msvcrt/stdio.h>
+#include <msvcrt/errno.h>
+#include <msvcrt/internal/file.h>
+
+#ifdef clearerr
+#undef clearerr
+void clearerr(FILE *stream);
+#endif
+
+void
+clearerr(FILE *f)
+{
+ if (!__validfp (f)) {
+ __set_errno (EINVAL);
+ return;
+ }
+ f->_flag &= ~(_IOERR|_IOEOF);
+}
--- /dev/null
+#include <msvcrt/stdio.h>
+#include <msvcrt/internal/file.h>
+
+FILE * __alloc_file(void);
+
+FILE *_fdopen(int handle, char *mode)
+{
+ FILE *file;
+ int rw;
+
+ if (handle == 0)
+ return stdin;
+
+ if (handle == 1)
+ return stdout;
+
+ if (handle == 2)
+ return stderr;
+
+ if (handle == 3)
+ return stdaux;
+
+ if (handle == 4)
+ return stdprn;
+
+ file = __alloc_file();
+ if (file == NULL)
+ return NULL;
+ file->_file = handle;
+
+ rw = (mode[1] == '+') || (mode[1] && (mode[2] == '+'));
+
+ if (*mode == 'a')
+ _lseek(handle, 0, SEEK_END);
+
+ file->_cnt = 0;
+ file->_file = handle;
+ file->_bufsiz = 0;
+
+// The mode of the stream must be compatible with the mode of the file descriptor.
+// this should be checked.
+
+ if (rw)
+ file->_flag = _IOREAD | _IOWRT;
+ else if (*mode == 'r')
+ file->_flag = _IOREAD;
+ else
+ file->_flag = _IOWRT;
+
+ file->_base = file->_ptr = NULL;
+
+ return file;
+}
+
+FILE *_wfdopen(int handle, wchar_t *mode)
+{
+ FILE *file;
+ int rw;
+
+ if (handle == 0)
+ return stdin;
+
+ if (handle == 1)
+ return stdout;
+
+ if (handle == 2)
+ return stderr;
+
+ if (handle == 3)
+ return stdaux;
+
+ if (handle == 4)
+ return stdprn;
+
+ file = __alloc_file();
+ if (file == NULL)
+ return NULL;
+ file->_file = handle;
+
+ rw = (mode[1] == L'+') || (mode[1] && (mode[2] == L'+'));
+
+ if (*mode == L'a')
+ _lseek(handle, 0, SEEK_END);
+
+ file->_cnt = 0;
+ file->_file = handle;
+ file->_bufsiz = 0;
+
+// The mode of the stream must be compatible with the mode of the file descriptor.
+// this should be checked.
+
+ if (rw)
+ file->_flag = _IOREAD | _IOWRT;
+ else if (*mode == L'r')
+ file->_flag = _IOREAD;
+ else
+ file->_flag = _IOWRT;
+
+ file->_base = file->_ptr = NULL;
+
+ return file;
+}
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS system libraries
+ * FILE: lib/crtdll/stdio/fgetc.c
+ * PURPOSE: Get a character string from stdin
+ * PROGRAMER: Boudewijn Dekker
+ * UPDATE HISTORY:
+ * 28/12/98: Appropriated for Reactos
+ 25/02/99: Added fgetwc
+ */
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+#include <msvcrt/stdio.h>
+#include <msvcrt/internal/file.h>
+
+int fgetc(FILE *f)
+{
+ return getc(f);
+}
+
+wint_t fgetwc(FILE *f)
+{
+ return getwc(f);
+}
--- /dev/null
+#include <msvcrt/stdio.h>
+#include <msvcrt/conio.h>
+
+int _fgetchar(void)
+{
+ return _getch();
+}
+
+int _fgetwchar(void)
+{
+ return _getch();
+}
\ No newline at end of file
--- /dev/null
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+#include <msvcrt/stdio.h>
+#include <msvcrt/errno.h>
+
+int fgetpos(FILE *stream, fpos_t *pos)
+{
+ if (stream && pos)
+ {
+ *pos = (fpos_t)ftell(stream);
+ return 0;
+ }
+ //errno = EFAULT;
+ return 1;
+}
f->_base = f->_ptr = NULL;
return f;
}
+
+FILE* _wfopen(const wchar_t *file, const wchar_t *mode)
+{
+ FILE *f;
+ int fd, rw, oflags = 0;
+ wchar_t tbchar;
+
+ if (file == 0)
+ return 0;
+ if (mode == 0)
+ return 0;
+
+ f = __alloc_file();
+ if (f == NULL)
+ return NULL;
+
+ rw = (mode[1] == L'+') || (mode[1] && (mode[2] == L'+'));
+
+ switch (*mode)
+ {
+ case L'a':
+ oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ case L'r':
+ oflags = rw ? O_RDWR : O_RDONLY;
+ break;
+ case L'w':
+ oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ default:
+ return (NULL);
+ }
+ if (mode[1] == L'+')
+ tbchar = mode[2];
+ else
+ tbchar = mode[1];
+ if (tbchar == L't')
+ oflags |= O_TEXT;
+ else if (tbchar == L'b')
+ oflags |= O_BINARY;
+ else
+ oflags |= (_fmode & (O_TEXT|O_BINARY));
+
+ fd = _wopen(file, oflags, 0);
+ if (fd < 0)
+ return NULL;
+
+// ms crtdll ensures that writes will end up at the end of file in append mode
+// we just move the file pointer to the end of file initially
+ if (*mode == L'a')
+ lseek(fd, 0, SEEK_END);
+
+ f->_cnt = 0;
+ f->_file = fd;
+ f->_bufsiz = 0;
+ if (rw)
+ f->_flag = _IOREAD | _IOWRT;
+ else if (*mode == L'r')
+ f->_flag = _IOREAD;
+ else
+ f->_flag = _IOWRT;
+
+ f->_base = f->_ptr = NULL;
+ return f;
+}
--- /dev/null
+#include <msvcrt/stdio.h>
+#include <msvcrt/conio.h>
+
+
+int _fputchar(int c)
+{
+ return _putch(c);
+}
+
+int _fputwchar(wchar_t c)
+{
+ //return _putch(c);
+ return 0;
+}
--- /dev/null
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+
+#include <msvcrt/sys/types.h>
+#include <msvcrt/stdio.h>
+#include <msvcrt/fcntl.h>
+#include <msvcrt/io.h>
+#include <msvcrt/internal/file.h>
+
+
+FILE *freopen(const char *file, const char *mode, FILE *f)
+{
+ int fd, rw, oflags=0;
+ char tbchar;
+
+ if (file == 0 || mode == 0 || f == 0)
+ return 0;
+
+ rw = (mode[1] == '+');
+
+ fclose(f);
+
+ switch (*mode) {
+ case 'a':
+ oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ case 'r':
+ oflags = rw ? O_RDWR : O_RDONLY;
+ break;
+ case 'w':
+ oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ default:
+ return NULL;
+ }
+ if (mode[1] == '+')
+ tbchar = mode[2];
+ else
+ tbchar = mode[1];
+ if (tbchar == 't')
+ oflags |= O_TEXT;
+ else if (tbchar == 'b')
+ oflags |= O_BINARY;
+ else
+ oflags |= (_fmode & (O_TEXT|O_BINARY));
+
+ fd = _open(file, oflags, 0666);
+ if (fd < 0)
+ return NULL;
+
+ if (*mode == 'a')
+ lseek(fd, 0, SEEK_END);
+
+ f->_cnt = 0;
+ f->_file = fd;
+ f->_bufsiz = 0;
+ if (rw)
+ f->_flag = _IOREAD | _IOWRT;
+ else if (*mode == 'r')
+ f->_flag = _IOREAD;
+ else
+ f->_flag = _IOWRT;
+
+ f->_base = f->_ptr = NULL;
+ return f;
+}
+
+FILE *_wfreopen(const wchar_t *file, const wchar_t *mode, FILE *f)
+{
+ int fd, rw, oflags=0;
+ wchar_t tbchar;
+
+ if (file == 0 || mode == 0 || f == 0)
+ return 0;
+
+ rw = (mode[1] == L'+');
+
+ fclose(f);
+
+ switch (*mode) {
+ case L'a':
+ oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ case L'r':
+ oflags = rw ? O_RDWR : O_RDONLY;
+ break;
+ case L'w':
+ oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ default:
+ return NULL;
+ }
+ if (mode[1] == L'+')
+ tbchar = mode[2];
+ else
+ tbchar = mode[1];
+ if (tbchar == L't')
+ oflags |= O_TEXT;
+ else if (tbchar == L'b')
+ oflags |= O_BINARY;
+ else
+ oflags |= (_fmode & (O_TEXT|O_BINARY));
+
+ fd = _wopen(file, oflags, 0666);
+ if (fd < 0)
+ return NULL;
+
+ if (*mode == L'a')
+ lseek(fd, 0, SEEK_END);
+
+ f->_cnt = 0;
+ f->_file = fd;
+ f->_bufsiz = 0;
+ if (rw)
+ f->_flag = _IOREAD | _IOWRT;
+ else if (*mode == L'r')
+ f->_flag = _IOREAD;
+ else
+ f->_flag = _IOWRT;
+
+ f->_base = f->_ptr = NULL;
+ return f;
+}
--- /dev/null
+/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+
+#include <msvcrt/stdio.h>
+#include <msvcrt/errno.h>
+#include <msvcrt/fcntl.h>
+#include <msvcrt/io.h>
+#include <msvcrt/internal/file.h>
+
+
+int fseek(FILE *f, long offset, int ptrname)
+{
+ long p = -1; /* can't happen? */
+ if ( f == NULL ) {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ f->_flag &= ~_IOEOF;
+ if (!OPEN4WRITING(f))
+ {
+ if (f->_base && !(f->_flag & _IONBF))
+ {
+ p = ftell(f);
+ if (ptrname == SEEK_CUR)
+ {
+ offset += p;
+ ptrname = SEEK_SET;
+ }
+ /* check if the target position is in the buffer and
+ optimize seek by moving inside the buffer */
+ if (ptrname == SEEK_SET && (f->_flag & (_IOUNGETC|_IOREAD|_IOWRT )) == 0
+ && p-offset <= f->_ptr-f->_base && offset-p <= f->_cnt)
+ {
+ f->_ptr+=offset-p;
+ f->_cnt+=p-offset;
+ return 0;
+ }
+ }
+
+ p = lseek(fileno(f), offset, ptrname);
+ f->_cnt = 0;
+ f->_ptr = f->_base;
+ f->_flag &= ~_IOUNGETC;
+ }
+ else
+ {
+ p = fflush(f);
+ return lseek(fileno(f), offset, ptrname) == -1 || p == EOF ?
+ -1 : 0;
+ }
+ return p==-1 ? -1 : 0;
+}
--- /dev/null
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+#include <msvcrt/stdio.h>
+#include <msvcrt/errno.h>
+#include <msvcrt/internal/file.h>
+
+int fsetpos(FILE *stream,const fpos_t *pos)
+{
+ if (stream && pos)
+ {
+ fseek(stream, (long)(*pos), SEEK_SET);
+ return 0;
+ }
+ __set_errno(EFAULT);
+ return -1;
+}
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS system libraries
+ * FILE: lib/crtdll/conio/kbhit.c
+ * PURPOSE: Checks for keyboard hits
+ * PROGRAMER: Boudewijn Dekker
+ * UPDATE HISTORY:
+ * 28/12/98: Created
+ */
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+
+#include <msvcrt/sys/types.h>
+#include <msvcrt/stdio.h>
+#include <msvcrt/io.h>
+#include <msvcrt/fcntl.h>
+#include <msvcrt/share.h>
+#include <msvcrt/internal/file.h>
+
+
+FILE * __alloc_file(void);
+
+
+FILE* _fsopen(const char *file, const char *mode, int shflag)
+{
+ FILE *f;
+ int fd, rw, oflags = 0;
+ char tbchar;
+
+ int shf;
+
+ if (file == 0)
+ return 0;
+ if (mode == 0)
+ return 0;
+
+ f = __alloc_file();
+ if (f == NULL)
+ return NULL;
+
+ rw = (mode[1] == '+') || (mode[1] && (mode[2] == '+'));
+
+ switch (*mode)
+ {
+ case 'a':
+ oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ case 'r':
+ oflags = rw ? O_RDWR : O_RDONLY;
+ break;
+ case 'w':
+ oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ default:
+ return (NULL);
+ }
+ if (mode[1] == '+')
+ tbchar = mode[2];
+ else
+ tbchar = mode[1];
+ if (tbchar == 't')
+ oflags |= O_TEXT;
+ else if (tbchar == 'b')
+ oflags |= O_BINARY;
+ else
+ oflags |= (_fmode & (O_TEXT|O_BINARY));
+
+ if ( shflag == _SH_DENYNO )
+ shf = _S_IREAD | _S_IWRITE;
+ else if( shflag == _SH_DENYRD )
+ shf = _S_IWRITE;
+ else if( shflag == _SH_DENYRW )
+ shf = 0;
+ else if( shflag == _SH_DENYWR )
+ shf = _S_IREAD;
+ else
+ shf = _S_IREAD | _S_IWRITE;
+
+ fd = _open(file, oflags, shf);
+ if (fd < 0)
+ return NULL;
+
+// ms crtdll ensures that writes will end up at the end of file in append mode
+// we just move the file pointer to the end of file initially
+ if (*mode == 'a')
+ lseek(fd, 0, SEEK_END);
+
+ f->_cnt = 0;
+ f->_file = fd;
+ f->_bufsiz = 0;
+ if (rw)
+ f->_flag = _IOREAD | _IOWRT;
+ else if (*mode == 'r')
+ f->_flag = _IOREAD;
+ else
+ f->_flag = _IOWRT;
+
+ f->_base = f->_ptr = NULL;
+ return f;
+}
+
+FILE* _wfsopen(const wchar_t *file, const wchar_t *mode, int shflag)
+{
+ FILE *f;
+ int fd, rw, oflags = 0;
+ wchar_t tbchar;
+
+ int shf;
+
+ if (file == 0)
+ return 0;
+ if (mode == 0)
+ return 0;
+
+ f = __alloc_file();
+ if (f == NULL)
+ return NULL;
+
+ rw = (mode[1] == L'+') || (mode[1] && (mode[2] == L'+'));
+
+ switch (*mode)
+ {
+ case L'a':
+ oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ case L'r':
+ oflags = rw ? O_RDWR : O_RDONLY;
+ break;
+ case L'w':
+ oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
+ break;
+ default:
+ return (NULL);
+ }
+ if (mode[1] == L'+')
+ tbchar = mode[2];
+ else
+ tbchar = mode[1];
+ if (tbchar == L't')
+ oflags |= O_TEXT;
+ else if (tbchar == L'b')
+ oflags |= O_BINARY;
+ else
+ oflags |= (_fmode & (O_TEXT|O_BINARY));
+
+ if ( shflag == _SH_DENYNO )
+ shf = _S_IREAD | _S_IWRITE;
+ else if( shflag == _SH_DENYRD )
+ shf = _S_IWRITE;
+ else if( shflag == _SH_DENYRW )
+ shf = 0;
+ else if( shflag == _SH_DENYWR )
+ shf = _S_IREAD;
+ else
+ shf = _S_IREAD | _S_IWRITE;
+
+ fd = _wopen(file, oflags, shf);
+ if (fd < 0)
+ return NULL;
+
+// ms crtdll ensures that writes will end up at the end of file in append mode
+// we just move the file pointer to the end of file initially
+ if (*mode == L'a')
+ lseek(fd, 0, SEEK_END);
+
+ f->_cnt = 0;
+ f->_file = fd;
+ f->_bufsiz = 0;
+ if (rw)
+ f->_flag = _IOREAD | _IOWRT;
+ else if (*mode == L'r')
+ f->_flag = _IOREAD;
+ else
+ f->_flag = _IOWRT;
+
+ f->_base = f->_ptr = NULL;
+ return f;
+}
--- /dev/null
+/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+
+#include <msvcrt/stdio.h>
+//#include <crtdll/unistd.h>
+#include <msvcrt/fcntl.h>
+#include <msvcrt/io.h>
+#include <msvcrt/errno.h>
+#include <msvcrt/internal/file.h>
+
+
+long ftell(FILE *f)
+{
+ long tres;
+ int adjust=0;
+
+ if (!f)
+ {
+ __set_errno(EBADF);
+ return -1;
+ }
+
+ if (f->_cnt < 0)
+ f->_cnt = 0;
+ else if (f->_flag&_IOREAD)
+ {
+ adjust = - f->_cnt;
+ }
+ else if (f->_flag&(_IOWRT))
+ {
+ if (f->_base && (f->_flag&_IONBF)==0)
+ adjust = f->_ptr - f->_base;
+ }
+ else
+ return -1;
+
+ tres = lseek(fileno(f), 0L, SEEK_CUR);
+ if (tres<0)
+ return tres;
+ tres += adjust;
+
+ //f->_cnt = f->_bufsiz - tres;
+ //f->_ptr = f->_base + tres;
+
+ return tres;
+}
--- /dev/null
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+#include <msvcrt/stdio.h>
+#include <msvcrt/internal/file.h>
+
+#undef getchar
+int
+getchar(void)
+{
+ return getc(stdin);
+}
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS system libraries
+ * FILE: lib/crtdll/stdio/gets.c
+ * PURPOSE: Get a character string from stdin
+ * PROGRAMER: DJ Delorie
+ * UPDATE HISTORY:
+ * 28/12/98: Appropriated for Reactos
+ */
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+#include <msvcrt/stdio.h>
+
+char *gets(char *s)
+{
+ int c;
+ char *cs;
+
+ cs = s;
+ while ((c = getchar()) != '\n' && c != EOF)
+ *cs++ = c;
+ if (c == EOF && cs==s)
+ return NULL;
+ *cs++ = '\0';
+ return s;
+}
+
+#if 0
+/* Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+link_warning (gets, "the `gets' function is dangerous and should not be used.")
+
+
+/* Read a newline-terminated multibyte string from stdin into S,
+ removing the trailing newline. Return S or NULL. */
+
+char *
+gets (s)
+ char *s;
+{
+ register char *p = s;
+ register int c;
+ FILE *stream = stdin;
+ int l;
+
+ if (!__validfp (stream) || p == NULL)
+ {
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ if (feof (stream) || ferror (stream))
+ return NULL;
+
+ while ((c = getc(stdin)) != EOF) {
+ if (c == '\n')
+ break;
+ if ( isascii(c) )
+ *cs++ = c;
+#ifdef _MULTIBYTE
+ else if ( isleadbyte(c) ) {
+ l = mblen(c);
+ while(l > 0 ) {
+ c = getchar();
+ if ( isleadbyte(c) || c == EOF )
+ return NULL; // encoding error
+ *cs++ = c;
+ l--;
+ }
+ }
+#endif
+ else
+ return NULL; // suspicious input
+ }
+
+ *p = '\0';
+
+ /* Return null if we had an error, or if we got EOF
+ before writing any characters. */
+
+ if (ferror (stream) || (feof (stream) && p == s))
+ return NULL;
+
+ return s;
+}
+
+#endif
--- /dev/null
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA. */
+
+#include <msvcrt/stdio.h>
+
+/* Read a word (int) from STREAM. */
+int _getw(FILE *stream)
+{
+ int w;
+
+ /* Is there a better way? */
+ if (fread( &w, sizeof(w), 1, stream) != 1)
+ return(EOF);
+ return(w);
+}
--- /dev/null
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+#include <msvcrt/stdio.h>
+#include <msvcrt/string.h>
+#include <msvcrt/errno.h>
+
+
+#ifdef perror
+#undef perror
+void perror(const char *s);
+#endif
+
+void perror(const char *s)
+{
+ fprintf(stderr, "%s: %s\n", s, _strerror(NULL));
+}
+
+void _wperror(const wchar_t *s)
+{
+ fwprintf(stderr, L"%s: %S\n", s, _strerror(NULL));
+}
--- /dev/null
+
+#include <windows.h>
+#include <msvcrt/io.h>
+#include <msvcrt/errno.h>
+#include <msvcrt/stdio.h>
+#include <msvcrt/stdlib.h>
+#include <msvcrt/string.h>
+#include <msvcrt/internal/file.h>
+
+
+FILE *_popen (const char *cm, const char *md) /* program name, pipe mode */
+{
+ FILE *pf;
+ HANDLE hReadPipe, hWritePipe;
+ STARTUPINFOA StartupInfo;
+ PROCESS_INFORMATION ProcessInformation;
+
+ // fixme CreatePipe
+
+// if ( !CreatePipe(&hReadPipe,&hWritePipe,NULL,1024))
+// return NULL;
+
+ StartupInfo.cb = sizeof(STARTUPINFOA);
+ if ( md == "r" ) {
+ StartupInfo.hStdOutput = hWritePipe;
+ }
+ else if ( md == "w" ) {
+ StartupInfo.hStdInput = hReadPipe;
+ }
+
+ if (CreateProcessA("cmd.exe",(char *)cm,NULL,NULL,TRUE,
+ CREATE_NEW_CONSOLE,NULL,NULL,
+ &StartupInfo,
+ &ProcessInformation) == FALSE)
+ return NULL;
+
+ if ( *md == 'r' )
+ {
+ pf = _fdopen(__fileno_alloc(hReadPipe, _fmode) , "r");
+ }
+ else
+ {
+ pf = _fdopen( __fileno_alloc(hWritePipe, _fmode) , "w");
+ }
+
+ pf->_name_to_remove = ProcessInformation.hProcess;
+
+ return pf;
+}
+
+
+int _pclose (FILE *pp)
+{
+ fclose(pp);
+ printf("Terminate Process\n");
+// if (!TerminateProcess(pp->_name_to_remove,0))
+// return -1;
+ return 0;
+}
+
+
+FILE *_wpopen (const wchar_t *cm, const wchar_t *md) /* program name, pipe mode */
+{
+ FILE *pf;
+ HANDLE hReadPipe, hWritePipe;
+ STARTUPINFOW StartupInfo;
+ PROCESS_INFORMATION ProcessInformation;
+
+ // fixme CreatePipe
+
+// if ( !CreatePipe(&hReadPipe,&hWritePipe,NULL,1024))
+// return NULL;
+
+ StartupInfo.cb = sizeof(STARTUPINFOW);
+ if (*md == L'r')
+ {
+ StartupInfo.hStdOutput = hWritePipe;
+ }
+ else if (*md == L'w')
+ {
+ StartupInfo.hStdInput = hReadPipe;
+ }
+
+ if (CreateProcessW(L"cmd.exe",(wchar_t *)cm,NULL,NULL,TRUE,
+ CREATE_NEW_CONSOLE,NULL,NULL,
+ &StartupInfo,
+ &ProcessInformation) == FALSE)
+ return NULL;
+
+ if (*md == L'r')
+ {
+ pf = _wfdopen(__fileno_alloc(hReadPipe, _fmode) , L"r");
+ }
+ else
+ {
+ pf = _wfdopen( __fileno_alloc(hWritePipe, _fmode) , L"w");
+ }
+
+ pf->_name_to_remove = ProcessInformation.hProcess;
+
+ return pf;
+}
--- /dev/null
+/* Copyright (C) 1991 Free Software Foundation, Inc.
+ * This file is part of the GNU C Library.
+ *
+ * The GNU C Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * The GNU C Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with the GNU C Library; see the file COPYING.LIB. If
+ * not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+ * Cambridge, MA 02139, USA. */
+
+
+#include <msvcrt/stdio.h>
+
+
+/* Write the word (int) W to STREAM. */
+int _putw(int w,FILE *stream)
+{
+ /* Is there a better way? */
+ if (fwrite( &w, sizeof(w), 1, stream) < 1)
+ return(EOF);
+ return(0);
+}
--- /dev/null
+#include <windows.h>
+#include <msvcrt/stdio.h>
+#include <msvcrt/io.h>
+
+
+int rename(const char *old_, const char *new_)
+{
+ if (old_ == NULL || new_ == NULL)
+ return -1;
+
+ if (!MoveFileA(old_,new_))
+ return -1;
+
+ return 0;
+}
+
+int _wrename(const wchar_t *old_, const wchar_t *new_)
+{
+ if (old_ == NULL || new_ == NULL)
+ return -1;
+
+ if (!MoveFileW(old_,new_))
+ return -1;
+
+ return 0;
+}
+
--- /dev/null
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+
+#include <msvcrt/stdio.h>
+#include <msvcrt/io.h>
+#include <msvcrt/internal/file.h>
+
+
+void rewind(FILE *f)
+{
+ fflush(f);
+ lseek(fileno(f), 0L, SEEK_SET);
+ f->_cnt = 0;
+ f->_ptr = f->_base;
+ f->_flag &= ~(_IOERR|_IOEOF|_IOAHEAD);
+}
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS system libraries
+ * FILE: lib/crtdll/stdio/rmtmp.c
+ * PURPOSE: remove temporary files in current directory
+ * PROGRAMMER: Boudewijn ( ariadne@xs4all.nl)
+ * UPDATE HISTORY:
+ * Created 19/01/99
+ * NOTE Not tested.
+ */
+
+#include <msvcrt/stdio.h>
+#include <msvcrt/string.h>
+#include <msvcrt/internal/file.h>
+
+#ifndef F_OK
+ #define F_OK 0x01
+#endif
+#ifndef R_OK
+ #define R_OK 0x02
+#endif
+#ifndef W_OK
+ #define W_OK 0x04
+#endif
+#ifndef X_OK
+ #define X_OK 0x08
+#endif
+#ifndef D_OK
+ #define D_OK 0x10
+#endif
+
+// should be replace by a closure of the tmp files
+extern __file_rec *__file_rec_list;
+
+int _rmtmp( void )
+{
+/*
+loop files and check for name_to_remove
+*/
+ __file_rec *fr = __file_rec_list;
+ __file_rec **last_fr = &__file_rec_list;
+
+ int total_closed = 0;
+ int i = 0;
+ char temp_name[260];
+
+ /* Try to find an empty slot */
+ while (fr)
+ {
+ last_fr = &(fr->next);
+
+ /* If one of the existing slots is available, return it */
+ for (i=0; i<fr->count; i++) {
+ if (fr->files[i]->_name_to_remove != NULL) {
+ if ( _access(fr->files[i]->_name_to_remove,W_OK) ) {
+ strcpy(temp_name,fr->files[i]->_name_to_remove);
+ fclose(fr->files[i]);
+ remove(temp_name);
+ total_closed++;
+ }
+ }
+ }
+
+ /* If this one is full, go to the next */
+ if (fr->count == __FILE_REC_MAX)
+ fr = fr->next;
+ else
+ /* it isn't full, we can add to it */
+ break;
+ }
+ return total_closed;
+}
--- /dev/null
+/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
+#include <msvcrt/stdio.h>
+#include <msvcrt/stdlib.h>
+#include <msvcrt/internal/file.h>
+
+void setbuf(FILE *f, char *buf)
+{
+ if (buf)
+ setvbuf(f, buf, _IOFBF, BUFSIZ);
+ else
+ setvbuf(f, 0, _IONBF, BUFSIZ);
+}
char *_tempnam(const char *dir,const char *prefix )
{
- char *TempFileName = malloc(MAX_PATH);
- char *d;
- if ( dir == NULL )
- d = getenv("TMP");
- else
- d = (char *)dir;
-
- if ( GetTempFileNameA(d, prefix, 0, TempFileName ) == 0 ) {
- free(TempFileName);
- return NULL;
- }
-
- return TempFileName;
+ char *TempFileName = malloc(MAX_PATH);
+ char *d;
+
+ if (dir == NULL)
+ d = getenv("TMP");
+ else
+ d = (char *)dir;
+
+ if (GetTempFileNameA(d, prefix, 0, TempFileName) == 0)
+ {
+ free(TempFileName);
+ return NULL;
+ }
+
+ return TempFileName;
+}
+
+wchar_t *_wtempnam(const wchar_t *dir,const wchar_t *prefix)
+{
+ wchar_t *TempFileName = malloc(MAX_PATH);
+ wchar_t *d;
+
+ if (dir == NULL)
+ d = _wgetenv(L"TMP");
+ else
+ d = (wchar_t *)dir;
+
+ if (GetTempFileNameW(d, prefix, 0, TempFileName) == 0)
+ {
+ free(TempFileName);
+ return NULL;
+ }
+
+ return TempFileName;
}
--- /dev/null
+/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+
+#include <msvcrt/stdio.h>
+#include <msvcrt/string.h>
+#include <msvcrt/stdlib.h>
+#include <msvcrt/errno.h>
+#include <msvcrt/fcntl.h>
+//#include <msvcrt/unistd.h>
+#include <msvcrt/io.h>
+#include <msvcrt/share.h>
+#include <msvcrt/internal/file.h>
+
+
+FILE * __alloc_file(void);
+
+FILE *
+tmpfile(void)
+{
+ int temp_fd;
+ FILE *f;
+ char *temp_name = tmpnam(0);
+ char *n_t_r = (char *)malloc(L_tmpnam);
+
+ if (!n_t_r)
+ return 0;
+
+ /* We could have a race condition, whereby another program
+ (in another virtual machine, or if the temporary file is
+ in a directory which is shared via a network) opens the
+ file returned by `tmpnam' between the call above and the
+ moment when we actually open the file below. This loop
+ retries the call to `tmpnam' until we actually succeed
+ to create the file which didn't exist before. */
+ do {
+ // errno = 0;
+ temp_fd = _open(temp_name, 0, SH_DENYRW);
+ // if ( errno == ENOENT )
+// break;
+ } while (temp_fd == -1 && (temp_name = tmpnam(0)) != 0);
+
+ if (temp_name == 0)
+ return 0;
+
+ /* This should have been fdopen(temp_fd, "wb+"), but `fdopen'
+ is non-ANSI. So we need to dump some of its guts here. Sigh... */
+ f = __alloc_file();
+ if (f)
+ {
+ f->_file = temp_fd;
+ f->_cnt = 0;
+ f->_bufsiz = 0;
+ f->_flag = _IORMONCL | _IOREAD | _IOWRT;
+ f->_name_to_remove = n_t_r;
+ strcpy(f->_name_to_remove, temp_name);
+ f->_base = f->_ptr = NULL;
+ }
+ else
+ {
+ close(temp_fd);
+ remove(temp_name);
+ free(n_t_r);
+ }
+ return f;
+}
--- /dev/null
+#include <windows.h>
+#include <msvcrt/stdio.h>
+#include <msvcrt/string.h>
+
+
+char *tmpnam(char *s)
+{
+ char PathName[MAX_PATH];
+ static char static_buf[MAX_PATH];
+
+ GetTempPathA(MAX_PATH, PathName);
+ GetTempFileNameA(PathName, "ARI", 007, static_buf);
+ strcpy(s, static_buf);
+
+ return s;
+}
+
+wchar_t *_wtmpnam(wchar_t *s)
+{
+ wchar_t PathName[MAX_PATH];
+ static wchar_t static_buf[MAX_PATH];
+
+ GetTempPathW(MAX_PATH, PathName);
+ GetTempFileNameW(PathName, L"ARI", 007, static_buf);
+ wcscpy(s, static_buf);
+
+ return s;
+}