1
|
1
|
|
2 /**
|
|
3 * C's <stdio.h>
|
|
4 * Authors: Walter Bright, Digital Mars, www.digitalmars.com
|
|
5 * License: Public Domain
|
|
6 * Macros:
|
|
7 * WIKI=Phobos/StdCStdio
|
|
8 */
|
|
9
|
|
10
|
|
11
|
|
12 module std.c.stdio;
|
|
13
|
|
14 import std.c.stddef;
|
|
15 private import std.c.stdarg;
|
|
16
|
|
17 extern (C):
|
|
18
|
|
19 version (Win32)
|
|
20 {
|
|
21 const int _NFILE = 60; ///
|
|
22 const int BUFSIZ = 0x4000; ///
|
|
23 const int EOF = -1; ///
|
|
24 const int FOPEN_MAX = 20; ///
|
|
25 const int FILENAME_MAX = 256; /// 255 plus NULL
|
|
26 const int TMP_MAX = 32767; ///
|
|
27 const int _SYS_OPEN = 20; ///
|
|
28 const int SYS_OPEN = _SYS_OPEN; ///
|
|
29 const wchar WEOF = 0xFFFF; ///
|
|
30 }
|
|
31
|
|
32 version (linux)
|
|
33 {
|
|
34 const int EOF = -1;
|
|
35 const int FOPEN_MAX = 16;
|
|
36 const int FILENAME_MAX = 4095;
|
|
37 const int TMP_MAX = 238328;
|
|
38 const int L_tmpnam = 20;
|
|
39 }
|
|
40
|
|
41 enum { SEEK_SET, SEEK_CUR, SEEK_END }
|
|
42
|
|
43 struct _iobuf
|
|
44 {
|
|
45 align (1):
|
|
46 version (Win32)
|
|
47 {
|
|
48 char *_ptr;
|
|
49 int _cnt;
|
|
50 char *_base;
|
|
51 int _flag;
|
|
52 int _file;
|
|
53 int _charbuf;
|
|
54 int _bufsiz;
|
|
55 int __tmpnum;
|
|
56 }
|
|
57 version (linux)
|
|
58 {
|
|
59 char* _read_ptr;
|
|
60 char* _read_end;
|
|
61 char* _read_base;
|
|
62 char* _write_base;
|
|
63 char* _write_ptr;
|
|
64 char* _write_end;
|
|
65 char* _buf_base;
|
|
66 char* _buf_end;
|
|
67 char* _save_base;
|
|
68 char* _backup_base;
|
|
69 char* _save_end;
|
|
70 void* _markers;
|
|
71 _iobuf* _chain;
|
|
72 int _fileno;
|
|
73 int _blksize;
|
|
74 int _old_offset;
|
|
75 ushort _cur_column;
|
|
76 byte _vtable_offset;
|
|
77 char[1] _shortbuf;
|
|
78 void* _lock;
|
|
79 }
|
|
80 }
|
|
81
|
|
82 alias _iobuf FILE; ///
|
|
83
|
|
84 enum
|
|
85 {
|
|
86 _F_RDWR = 0x0003,
|
|
87 _F_READ = 0x0001,
|
|
88 _F_WRIT = 0x0002,
|
|
89 _F_BUF = 0x0004,
|
|
90 _F_LBUF = 0x0008,
|
|
91 _F_ERR = 0x0010,
|
|
92 _F_EOF = 0x0020,
|
|
93 _F_BIN = 0x0040,
|
|
94 _F_IN = 0x0080,
|
|
95 _F_OUT = 0x0100,
|
|
96 _F_TERM = 0x0200,
|
|
97 }
|
|
98
|
|
99 version (Win32)
|
|
100 {
|
|
101 extern FILE _iob[_NFILE];
|
|
102 extern void function() _fcloseallp;
|
|
103 extern ubyte __fhnd_info[_NFILE];
|
|
104
|
|
105 enum
|
|
106 {
|
|
107 FHND_APPEND = 0x04,
|
|
108 FHND_DEVICE = 0x08,
|
|
109 FHND_TEXT = 0x10,
|
|
110 FHND_BYTE = 0x20,
|
|
111 FHND_WCHAR = 0x40,
|
|
112 }
|
|
113 }
|
|
114
|
|
115 version (Win32)
|
|
116 {
|
|
117 enum
|
|
118 {
|
|
119 _IOREAD = 1,
|
|
120 _IOWRT = 2,
|
|
121 _IONBF = 4,
|
|
122 _IOMYBUF = 8,
|
|
123 _IOEOF = 0x10,
|
|
124 _IOERR = 0x20,
|
|
125 _IOLBF = 0x40,
|
|
126 _IOSTRG = 0x40,
|
|
127 _IORW = 0x80,
|
|
128 _IOFBF = 0,
|
|
129 _IOAPP = 0x200,
|
|
130 _IOTRAN = 0x100,
|
|
131 }
|
|
132 }
|
|
133
|
|
134 version (linux)
|
|
135 {
|
|
136 enum
|
|
137 {
|
|
138 _IOFBF = 0,
|
|
139 _IOLBF = 1,
|
|
140 _IONBF = 2,
|
|
141 }
|
|
142 }
|
|
143
|
|
144 version (Win32)
|
|
145 {
|
|
146 const FILE *stdin = &_iob[0]; ///
|
|
147 const FILE *stdout = &_iob[1]; ///
|
|
148 const FILE *stderr = &_iob[2]; ///
|
|
149 const FILE *stdaux = &_iob[3]; ///
|
|
150 const FILE *stdprn = &_iob[4]; ///
|
|
151 }
|
|
152
|
|
153 version (linux)
|
|
154 {
|
|
155 extern FILE *stdin;
|
|
156 extern FILE *stdout;
|
|
157 extern FILE *stderr;
|
|
158 }
|
|
159
|
|
160 version (Win32)
|
|
161 {
|
|
162 const char[] _P_tmpdir = "\\";
|
|
163 const wchar[] _wP_tmpdir = "\\";
|
|
164 const int L_tmpnam = _P_tmpdir.length + 12;
|
|
165 }
|
|
166
|
|
167 alias int fpos_t; ///
|
|
168
|
|
169 char * tmpnam(char *); ///
|
|
170 FILE * fopen(char *,char *); ///
|
|
171 FILE * _fsopen(char *,char *,int ); ///
|
|
172 FILE * freopen(char *,char *,FILE *); ///
|
|
173 int fseek(FILE *,int,int); ///
|
|
174 int ftell(FILE *); ///
|
|
175 char * fgets(char *,int,FILE *); ///
|
|
176 int fgetc(FILE *); ///
|
|
177 int _fgetchar(); ///
|
|
178 int fflush(FILE *); ///
|
|
179 int fclose(FILE *); ///
|
|
180 int fputs(char *,FILE *); ///
|
|
181 char * gets(char *); ///
|
|
182 int fputc(int,FILE *); ///
|
|
183 int _fputchar(int); ///
|
|
184 int puts(char *); ///
|
|
185 int ungetc(int,FILE *); ///
|
|
186 size_t fread(void *,size_t,size_t,FILE *); ///
|
|
187 size_t fwrite(void *,size_t,size_t,FILE *); ///
|
|
188 //int printf(char *,...); ///
|
|
189 int fprintf(FILE *,char *,...); ///
|
|
190 int vfprintf(FILE *,char *,va_list); ///
|
|
191 int vprintf(char *,va_list); ///
|
|
192 int sprintf(char *,char *,...); ///
|
|
193 int vsprintf(char *,char *,va_list); ///
|
|
194 int scanf(char *,...); ///
|
|
195 int fscanf(FILE *,char *,...); ///
|
|
196 int sscanf(char *,char *,...); ///
|
|
197 void setbuf(FILE *,char *); ///
|
|
198 int setvbuf(FILE *,char *,int,size_t); ///
|
|
199 int remove(char *); ///
|
|
200 int rename(char *,char *); ///
|
|
201 void perror(char *); ///
|
|
202 int fgetpos(FILE *,fpos_t *); ///
|
|
203 int fsetpos(FILE *,fpos_t *); ///
|
|
204 FILE * tmpfile(); ///
|
|
205 int _rmtmp();
|
|
206 int _fillbuf(FILE *);
|
|
207 int _flushbu(int, FILE *);
|
|
208
|
|
209 int getw(FILE *FHdl); ///
|
|
210 int putw(int Word, FILE *FilePtr); ///
|
|
211
|
|
212 ///
|
|
213 int getchar() { return getc(stdin); }
|
|
214 ///
|
|
215 int putchar(int c) { return putc(c,stdout); }
|
|
216 ///
|
|
217 int getc(FILE *fp) { return fgetc(fp); }
|
|
218 ///
|
|
219 int putc(int c,FILE *fp) { return fputc(c,fp); }
|
|
220
|
|
221 version (Win32)
|
|
222 {
|
|
223 ///
|
|
224 int ferror(FILE *fp) { return fp._flag&_IOERR; }
|
|
225 ///
|
|
226 int feof(FILE *fp) { return fp._flag&_IOEOF; }
|
|
227 ///
|
|
228 void clearerr(FILE *fp) { fp._flag &= ~(_IOERR|_IOEOF); }
|
|
229 ///
|
|
230 void rewind(FILE *fp) { fseek(fp,0L,SEEK_SET); fp._flag&=~_IOERR; }
|
|
231 int _bufsize(FILE *fp) { return fp._bufsiz; }
|
|
232 ///
|
|
233 int fileno(FILE *fp) { return fp._file; }
|
|
234 int _snprintf(char *,size_t,char *,...);
|
|
235 int _vsnprintf(char *,size_t,char *,va_list);
|
|
236 }
|
|
237
|
|
238 version (linux)
|
|
239 {
|
|
240 int ferror(FILE *fp);
|
|
241 int feof(FILE *fp);
|
|
242 void clearerr(FILE *fp);
|
|
243 void rewind(FILE *fp);
|
|
244 int _bufsize(FILE *fp);
|
|
245 int fileno(FILE *fp);
|
|
246 int snprintf(char *,size_t,char *,...);
|
|
247 int vsnprintf(char *,size_t,char *,va_list);
|
|
248 }
|
|
249
|
|
250 int unlink(char *); ///
|
|
251 FILE * fdopen(int, char *); ///
|
|
252 int fgetchar(); ///
|
|
253 int fputchar(int); ///
|
|
254 int fcloseall(); ///
|
|
255 int filesize(char *); ///
|
|
256 int flushall(); ///
|
|
257 int getch(); ///
|
|
258 int getche(); ///
|
|
259 int kbhit(); ///
|
|
260 char * tempnam (char *dir, char *pfx); ///
|
|
261
|
|
262 wchar_t * _wtmpnam(wchar_t *); ///
|
|
263 FILE * _wfopen(wchar_t *, wchar_t *);
|
|
264 FILE * _wfsopen(wchar_t *, wchar_t *, int);
|
|
265 FILE * _wfreopen(wchar_t *, wchar_t *, FILE *);
|
|
266 wchar_t * fgetws(wchar_t *, int, FILE *); ///
|
|
267 int fputws(wchar_t *, FILE *); ///
|
|
268 wchar_t * _getws(wchar_t *);
|
|
269 int _putws(wchar_t *);
|
|
270 int wprintf(wchar_t *, ...); ///
|
|
271 int fwprintf(FILE *, wchar_t *, ...); ///
|
|
272 int vwprintf(wchar_t *, va_list); ///
|
|
273 int vfwprintf(FILE *, wchar_t *, va_list); ///
|
|
274 int swprintf(wchar_t *, wchar_t *, ...); ///
|
|
275 int vswprintf(wchar_t *, wchar_t *, va_list); ///
|
|
276 int _snwprintf(wchar_t *, size_t, wchar_t *, ...);
|
|
277 int _vsnwprintf(wchar_t *, size_t, wchar_t *, va_list);
|
|
278 int wscanf(wchar_t *, ...); ///
|
|
279 int fwscanf(FILE *, wchar_t *, ...); ///
|
|
280 int swscanf(wchar_t *, wchar_t *, ...); ///
|
|
281 int _wremove(wchar_t *);
|
|
282 void _wperror(wchar_t *);
|
|
283 FILE * _wfdopen(int, wchar_t *);
|
|
284 wchar_t * _wtempnam(wchar_t *, wchar_t *);
|
|
285 wchar_t fgetwc(FILE *); ///
|
|
286 wchar_t _fgetwchar_t();
|
|
287 wchar_t fputwc(wchar_t, FILE *); ///
|
|
288 wchar_t _fputwchar_t(wchar_t);
|
|
289 wchar_t ungetwc(wchar_t, FILE *); ///
|
|
290
|
|
291 ///
|
|
292 wchar_t getwchar_t() { return fgetwc(stdin); }
|
|
293 ///
|
|
294 wchar_t putwchar_t(wchar_t c) { return fputwc(c,stdout); }
|
|
295 ///
|
|
296 wchar_t getwc(FILE *fp) { return fgetwc(fp); }
|
|
297 ///
|
|
298 wchar_t putwc(wchar_t c, FILE *fp) { return fputwc(c, fp); }
|
|
299
|
|
300 int fwide(FILE* fp, int mode); ///
|