mirror of
https://github.com/dlang/phobos.git
synced 2025-04-29 22:50:38 +03:00
300 lines
6.7 KiB
D
300 lines
6.7 KiB
D
|
|
/**
|
|
* 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)
|
|
{
|
|
final FILE *stdin = &_iob[0]; ///
|
|
final FILE *stdout = &_iob[1]; ///
|
|
final FILE *stderr = &_iob[2]; ///
|
|
final FILE *stdaux = &_iob[3]; ///
|
|
final 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(in char *,in char *); ///
|
|
FILE * _fsopen(in char *,in char *,int ); ///
|
|
FILE * freopen(in char *,in 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(in char *,FILE *); ///
|
|
char * gets(char *); ///
|
|
int fputc(int,FILE *); ///
|
|
int _fputchar(int); ///
|
|
int puts(in char *); ///
|
|
int ungetc(int,FILE *); ///
|
|
size_t fread(void *,size_t,size_t,FILE *); ///
|
|
size_t fwrite(in void *,size_t,size_t,FILE *); ///
|
|
//int printf(in char *,...); ///
|
|
int fprintf(FILE *,in char *,...); ///
|
|
int vfprintf(FILE *,in char *,va_list); ///
|
|
int vprintf(in char *,va_list); ///
|
|
int sprintf(char *,in char *,...); ///
|
|
int vsprintf(char *,in char *,va_list); ///
|
|
int scanf(in char *,...); ///
|
|
int fscanf(FILE *,in char *,...); ///
|
|
int sscanf(char *,in char *,...); ///
|
|
void setbuf(FILE *,char *); ///
|
|
int setvbuf(FILE *,char *,int,size_t); ///
|
|
int remove(in char *); ///
|
|
int rename(in char *,in char *); ///
|
|
void perror(in 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,in char *,...);
|
|
int _vsnprintf(char *,size_t,in 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,in char *,...);
|
|
int vsnprintf(char *,size_t,in char *,va_list);
|
|
}
|
|
|
|
int unlink(in char *); ///
|
|
FILE * fdopen(int, in char *); ///
|
|
int fgetchar(); ///
|
|
int fputchar(int); ///
|
|
int fcloseall(); ///
|
|
int filesize(in char *); ///
|
|
int flushall(); ///
|
|
int getch(); ///
|
|
int getche(); ///
|
|
int kbhit(); ///
|
|
char * tempnam (in char *dir, in char *pfx); ///
|
|
|
|
wchar_t * _wtmpnam(wchar_t *); ///
|
|
FILE * _wfopen(in wchar_t *, in wchar_t *);
|
|
FILE * _wfsopen(in wchar_t *, in wchar_t *, int);
|
|
FILE * _wfreopen(in wchar_t *, in wchar_t *, FILE *);
|
|
wchar_t * fgetws(wchar_t *, int, FILE *); ///
|
|
int fputws(in wchar_t *, FILE *); ///
|
|
wchar_t * _getws(wchar_t *);
|
|
int _putws(in wchar_t *);
|
|
int wprintf(in wchar_t *, ...); ///
|
|
int fwprintf(FILE *, in wchar_t *, ...); ///
|
|
int vwprintf(in wchar_t *, va_list); ///
|
|
int vfwprintf(FILE *, in wchar_t *, va_list); ///
|
|
int swprintf(wchar_t *, in wchar_t *, ...); ///
|
|
int vswprintf(wchar_t *, in wchar_t *, va_list); ///
|
|
int _snwprintf(wchar_t *, size_t, in wchar_t *, ...);
|
|
int _vsnwprintf(wchar_t *, size_t, in wchar_t *, va_list);
|
|
int wscanf(in wchar_t *, ...); ///
|
|
int fwscanf(FILE *, in wchar_t *, ...); ///
|
|
int swscanf(wchar_t *, in wchar_t *, ...); ///
|
|
int _wremove(in wchar_t *);
|
|
void _wperror(in wchar_t *);
|
|
FILE * _wfdopen(int, in wchar_t *);
|
|
wchar_t * _wtempnam(in wchar_t *, in 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); ///
|