Mercurial > projects > ldc
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); ///