diff lphobos/std/c/stdio.d @ 1:c53b6e3fe49a trunk

[svn r5] Initial commit. Most things are very rough.
author lindquist
date Sat, 01 Sep 2007 21:43:27 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lphobos/std/c/stdio.d	Sat Sep 01 21:43:27 2007 +0200
@@ -0,0 +1,300 @@
+
+/**
+ * C's <stdio.h>
+ * Authors: Walter Bright, Digital Mars, www.digitalmars.com
+ * License: Public Domain
+ * Macros:
+ *	WIKI=Phobos/StdCStdio
+ */
+
+
+
+module std.c.stdio;
+
+import std.c.stddef;
+private import std.c.stdarg;
+
+extern (C):
+
+version (Win32)
+{
+    const int _NFILE = 60;	///
+    const int BUFSIZ = 0x4000;	///
+    const int EOF = -1;		///
+    const int FOPEN_MAX = 20;	///
+    const int FILENAME_MAX = 256;  /// 255 plus NULL
+    const int TMP_MAX = 32767;	///
+    const int _SYS_OPEN = 20;	///
+    const int SYS_OPEN = _SYS_OPEN;	///
+    const wchar WEOF = 0xFFFF;		///
+}
+
+version (linux)
+{
+    const int EOF = -1;
+    const int FOPEN_MAX = 16;
+    const int FILENAME_MAX = 4095;
+    const int TMP_MAX = 238328;
+    const int L_tmpnam = 20;
+}
+
+enum { SEEK_SET, SEEK_CUR, SEEK_END }
+
+struct _iobuf
+{
+    align (1):
+    version (Win32)
+    {
+	char	*_ptr;
+	int	_cnt;
+	char	*_base;
+	int	_flag;
+	int	_file;
+	int	_charbuf;
+	int	_bufsiz;
+	int	__tmpnum;
+    }
+    version (linux)
+    {
+	char*	_read_ptr;
+	char*	_read_end;
+	char*	_read_base;
+	char*	_write_base;
+	char*	_write_ptr;
+	char*	_write_end;
+	char*	_buf_base;
+	char*	_buf_end;
+	char*	_save_base;
+	char*	_backup_base;
+	char*	_save_end;
+	void*	_markers;
+	_iobuf*	_chain;
+	int	_fileno;
+	int	_blksize;
+	int	_old_offset;
+	ushort	_cur_column;
+	byte	_vtable_offset;
+	char[1]	_shortbuf;
+	void*	_lock;
+    }
+}
+
+alias _iobuf FILE;	///
+
+enum
+{
+    _F_RDWR = 0x0003,
+    _F_READ = 0x0001,
+    _F_WRIT = 0x0002,
+    _F_BUF  = 0x0004,
+    _F_LBUF = 0x0008,
+    _F_ERR  = 0x0010,
+    _F_EOF  = 0x0020,
+    _F_BIN  = 0x0040,
+    _F_IN   = 0x0080,
+    _F_OUT  = 0x0100,
+    _F_TERM = 0x0200,
+}
+
+version (Win32)
+{
+    extern FILE _iob[_NFILE];
+    extern void function() _fcloseallp;
+    extern ubyte __fhnd_info[_NFILE];
+
+    enum
+    {
+	FHND_APPEND	= 0x04,
+	FHND_DEVICE	= 0x08,
+	FHND_TEXT	= 0x10,
+	FHND_BYTE	= 0x20,
+	FHND_WCHAR	= 0x40,
+    }
+}
+
+version (Win32)
+{
+    enum
+    {
+	    _IOREAD	= 1,
+	    _IOWRT	= 2,
+	    _IONBF	= 4,
+	    _IOMYBUF	= 8,
+	    _IOEOF	= 0x10,
+	    _IOERR	= 0x20,
+	    _IOLBF	= 0x40,
+	    _IOSTRG	= 0x40,
+	    _IORW	= 0x80,
+	    _IOFBF	= 0,
+	    _IOAPP	= 0x200,
+	    _IOTRAN	= 0x100,
+    }
+}
+
+version (linux)
+{
+    enum
+    {
+	    _IOFBF = 0,
+	    _IOLBF = 1,
+	    _IONBF = 2,
+    }
+}
+
+version (Win32)
+{
+    const FILE *stdin  = &_iob[0];	///
+    const FILE *stdout = &_iob[1];	///
+    const FILE *stderr = &_iob[2];	///
+    const FILE *stdaux = &_iob[3];	///
+    const FILE *stdprn = &_iob[4];	///
+}
+
+version (linux)
+{
+    extern FILE *stdin;
+    extern FILE *stdout;
+    extern FILE *stderr;
+}
+
+version (Win32)
+{
+    const char[] _P_tmpdir = "\\";
+    const wchar[] _wP_tmpdir = "\\";
+    const int L_tmpnam = _P_tmpdir.length + 12;
+}
+
+alias int fpos_t;	///
+
+char *	 tmpnam(char *);	///
+FILE *	 fopen(char *,char *);	///
+FILE *	 _fsopen(char *,char *,int );	///
+FILE *	 freopen(char *,char *,FILE *);	///
+int	 fseek(FILE *,int,int);	///
+int	 ftell(FILE *);	///
+char *	 fgets(char *,int,FILE *);	///
+int	 fgetc(FILE *);	///
+int	 _fgetchar();	///
+int	 fflush(FILE *);	///
+int	 fclose(FILE *);	///
+int	 fputs(char *,FILE *);	///
+char *	 gets(char *);	///
+int	 fputc(int,FILE *);	///
+int	 _fputchar(int);	///
+int	 puts(char *);	///
+int	 ungetc(int,FILE *);	///
+size_t	 fread(void *,size_t,size_t,FILE *);	///
+size_t	 fwrite(void *,size_t,size_t,FILE *);	///
+//int	 printf(char *,...);	///
+int	 fprintf(FILE *,char *,...);	///
+int	 vfprintf(FILE *,char *,va_list);	///
+int	 vprintf(char *,va_list);	///
+int	 sprintf(char *,char *,...);	///
+int	 vsprintf(char *,char *,va_list);	///
+int	 scanf(char *,...);	///
+int	 fscanf(FILE *,char *,...);	///
+int	 sscanf(char *,char *,...);	///
+void	 setbuf(FILE *,char *);	///
+int	 setvbuf(FILE *,char *,int,size_t);	///
+int	 remove(char *);	///
+int	 rename(char *,char *);	///
+void	 perror(char *);	///
+int	 fgetpos(FILE *,fpos_t *);	///
+int	 fsetpos(FILE *,fpos_t *);	///
+FILE *	 tmpfile();	///
+int	 _rmtmp();
+int      _fillbuf(FILE *);
+int      _flushbu(int, FILE *);
+
+int  getw(FILE *FHdl);	///
+int  putw(int Word, FILE *FilePtr);	///
+
+///
+int  getchar()		{ return getc(stdin);		}
+///
+int  putchar(int c)	{ return putc(c,stdout);	}
+///
+int  getc(FILE *fp)	{ return fgetc(fp);		}
+///
+int  putc(int c,FILE *fp) { return fputc(c,fp);		}
+
+version (Win32)
+{
+    ///
+    int  ferror(FILE *fp)	{ return fp._flag&_IOERR;	}
+    ///
+    int  feof(FILE *fp)	{ return fp._flag&_IOEOF;	}
+    ///
+    void clearerr(FILE *fp)	{ fp._flag &= ~(_IOERR|_IOEOF); }
+    ///
+    void rewind(FILE *fp)	{ fseek(fp,0L,SEEK_SET); fp._flag&=~_IOERR; }
+    int  _bufsize(FILE *fp)	{ return fp._bufsiz; }
+    ///
+    int  fileno(FILE *fp)	{ return fp._file; }
+    int  _snprintf(char *,size_t,char *,...);
+    int  _vsnprintf(char *,size_t,char *,va_list);
+}
+
+version (linux)
+{
+    int  ferror(FILE *fp);
+    int  feof(FILE *fp);
+    void clearerr(FILE *fp);
+    void rewind(FILE *fp);
+    int  _bufsize(FILE *fp);
+    int  fileno(FILE *fp);
+    int  snprintf(char *,size_t,char *,...);
+    int  vsnprintf(char *,size_t,char *,va_list);
+}
+
+int      unlink(char *);	///
+FILE *	 fdopen(int, char *);	///
+int	 fgetchar();	///
+int	 fputchar(int);	///
+int	 fcloseall();	///
+int	 filesize(char *);	///
+int	 flushall();	///
+int	 getch();	///
+int	 getche();	///
+int      kbhit();	///
+char *   tempnam (char *dir, char *pfx);	///
+
+wchar_t *  _wtmpnam(wchar_t *);	///
+FILE *  _wfopen(wchar_t *, wchar_t *);
+FILE *  _wfsopen(wchar_t *, wchar_t *, int);
+FILE *  _wfreopen(wchar_t *, wchar_t *, FILE *);
+wchar_t *  fgetws(wchar_t *, int, FILE *);	///
+int  fputws(wchar_t *, FILE *);	///
+wchar_t *  _getws(wchar_t *);
+int  _putws(wchar_t *);
+int  wprintf(wchar_t *, ...);	///
+int  fwprintf(FILE *, wchar_t *, ...);	///
+int  vwprintf(wchar_t *, va_list);	///
+int  vfwprintf(FILE *, wchar_t *, va_list);	///
+int  swprintf(wchar_t *, wchar_t *, ...);	///
+int  vswprintf(wchar_t *, wchar_t *, va_list);	///
+int  _snwprintf(wchar_t *, size_t, wchar_t *, ...);
+int  _vsnwprintf(wchar_t *, size_t, wchar_t *, va_list);
+int  wscanf(wchar_t *, ...);	///
+int  fwscanf(FILE *, wchar_t *, ...);	///
+int  swscanf(wchar_t *, wchar_t *, ...);	///
+int  _wremove(wchar_t *);
+void  _wperror(wchar_t *);
+FILE *  _wfdopen(int, wchar_t *);
+wchar_t *  _wtempnam(wchar_t *, wchar_t *);
+wchar_t  fgetwc(FILE *);	///
+wchar_t  _fgetwchar_t();
+wchar_t  fputwc(wchar_t, FILE *);	///
+wchar_t  _fputwchar_t(wchar_t);
+wchar_t  ungetwc(wchar_t, FILE *);	///
+
+///
+wchar_t	 getwchar_t()		{ return fgetwc(stdin); }
+///
+wchar_t	 putwchar_t(wchar_t c)	{ return fputwc(c,stdout); }
+///
+wchar_t	 getwc(FILE *fp)	{ return fgetwc(fp); }
+///
+wchar_t	 putwc(wchar_t c, FILE *fp)	{ return fputwc(c, fp); }
+
+int fwide(FILE* fp, int mode);	///