Mercurial > projects > ldc
comparison tango/tango/stdc/stdio.d @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:5825d48b27d1 | 132:1700239cab2e |
---|---|
1 /** | |
2 * D header file for C99. | |
3 * | |
4 * Copyright: Public Domain | |
5 * License: Public Domain | |
6 * Authors: Sean Kelly, Walter Bright | |
7 * Standards: ISO/IEC 9899:1999 (E) | |
8 */ | |
9 module tango.stdc.stdio; | |
10 | |
11 private | |
12 { | |
13 import tango.stdc.stdarg; | |
14 import tango.stdc.stddef; | |
15 import tango.stdc.config; | |
16 } | |
17 | |
18 extern (C): | |
19 | |
20 version( Win32 ) | |
21 { | |
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 | |
30 const int _NFILE = 60; | |
31 const char[] _P_tmpdir = "\\"; | |
32 const wchar[] _wP_tmpdir = "\\"; | |
33 const int L_tmpnam = _P_tmpdir.length + 12; | |
34 } | |
35 else version( linux ) | |
36 { | |
37 //const int BUFSIZ = 0x4000; | |
38 const int EOF = -1; | |
39 const int FOPEN_MAX = 16; | |
40 const int FILENAME_MAX = 4095; | |
41 const int TMP_MAX = 238328; | |
42 const int L_tmpnam = 20; | |
43 } | |
44 else version( darwin ) | |
45 { | |
46 const int EOF = -1; | |
47 const int FOPEN_MAX = 20; | |
48 const int FILENAME_MAX = 1024; | |
49 const int TMP_MAX = 308915776; | |
50 const int L_tmpnam = 1024; | |
51 | |
52 private | |
53 { | |
54 struct __sbuf | |
55 { | |
56 ubyte* _base; | |
57 int _size; | |
58 } | |
59 | |
60 struct __sFILEX | |
61 { | |
62 | |
63 } | |
64 } | |
65 } | |
66 else | |
67 { | |
68 static assert( false ); | |
69 } | |
70 | |
71 enum | |
72 { | |
73 SEEK_SET, | |
74 SEEK_CUR, | |
75 SEEK_END | |
76 } | |
77 | |
78 struct _iobuf | |
79 { | |
80 align (1): | |
81 version( Win32 ) | |
82 { | |
83 char* _ptr; | |
84 int _cnt; | |
85 char* _base; | |
86 int _flag; | |
87 int _file; | |
88 int _charbuf; | |
89 int _bufsiz; | |
90 int __tmpnum; | |
91 } | |
92 else version( linux ) | |
93 { | |
94 char* _read_ptr; | |
95 char* _read_end; | |
96 char* _read_base; | |
97 char* _write_base; | |
98 char* _write_ptr; | |
99 char* _write_end; | |
100 char* _buf_base; | |
101 char* _buf_end; | |
102 char* _save_base; | |
103 char* _backup_base; | |
104 char* _save_end; | |
105 void* _markers; | |
106 _iobuf* _chain; | |
107 int _fileno; | |
108 int _blksize; | |
109 int _old_offset; | |
110 ushort _cur_column; | |
111 byte _vtable_offset; | |
112 char[1] _shortbuf; | |
113 void* _lock; | |
114 } | |
115 else version( darwin ) | |
116 { | |
117 ubyte* _p; | |
118 int _r; | |
119 int _w; | |
120 short _flags; | |
121 short _file; | |
122 __sbuf _bf; | |
123 int _lbfsize; | |
124 | |
125 int* function(void*) _close; | |
126 int* function(void*, char*, int) _read; | |
127 fpos_t* function(void*, fpos_t, int) _seek; | |
128 int* function(void*, char *, int) _write; | |
129 | |
130 __sbuf _ub; | |
131 __sFILEX* _extra; | |
132 int _ur; | |
133 | |
134 ubyte[3] _ubuf; | |
135 ubyte[1] _nbuf; | |
136 | |
137 __sbuf _lb; | |
138 | |
139 int _blksize; | |
140 fpos_t _offset; | |
141 } | |
142 } | |
143 | |
144 alias _iobuf FILE; | |
145 | |
146 enum | |
147 { | |
148 _F_RDWR = 0x0003, | |
149 _F_READ = 0x0001, | |
150 _F_WRIT = 0x0002, | |
151 _F_BUF = 0x0004, | |
152 _F_LBUF = 0x0008, | |
153 _F_ERR = 0x0010, | |
154 _F_EOF = 0x0020, | |
155 _F_BIN = 0x0040, | |
156 _F_IN = 0x0080, | |
157 _F_OUT = 0x0100, | |
158 _F_TERM = 0x0200, | |
159 } | |
160 | |
161 version( Win32 ) | |
162 { | |
163 enum | |
164 { | |
165 _IOFBF = 0, | |
166 _IOREAD = 1, | |
167 _IOWRT = 2, | |
168 _IONBF = 4, | |
169 _IOMYBUF = 8, | |
170 _IOEOF = 0x10, | |
171 _IOERR = 0x20, | |
172 _IOLBF = 0x40, | |
173 _IOSTRG = 0x40, | |
174 _IORW = 0x80, | |
175 _IOTRAN = 0x100, | |
176 _IOAPP = 0x200, | |
177 } | |
178 | |
179 extern void function() _fcloseallp; | |
180 | |
181 version (GNU) { | |
182 extern FILE[_NFILE]* _imp___iob; | |
183 | |
184 const FILE* stdin; | |
185 const FILE* stdout; | |
186 const FILE* stderr; | |
187 const FILE* stdaux; | |
188 const FILE* stdprn; | |
189 | |
190 static this() { | |
191 stdin = &(*_imp___iob)[0]; | |
192 stdout = &(*_imp___iob)[1]; | |
193 stderr = &(*_imp___iob)[2]; | |
194 stdaux = &(*_imp___iob)[3]; | |
195 stdprn = &(*_imp___iob)[4]; | |
196 } | |
197 } else { | |
198 extern FILE[_NFILE] _iob; | |
199 | |
200 const FILE* stdin = &_iob[0]; | |
201 const FILE* stdout = &_iob[1]; | |
202 const FILE* stderr = &_iob[2]; | |
203 const FILE* stdaux = &_iob[3]; | |
204 const FILE* stdprn = &_iob[4]; | |
205 } | |
206 } | |
207 else version( linux ) | |
208 { | |
209 enum | |
210 { | |
211 _IOFBF = 0, | |
212 _IOLBF = 1, | |
213 _IONBF = 2, | |
214 } | |
215 | |
216 extern FILE* stdin; | |
217 extern FILE* stdout; | |
218 extern FILE* stderr; | |
219 } | |
220 else version( darwin ) | |
221 { | |
222 extern FILE[3] __sF; | |
223 const FILE* stdin = &__sF[0]; | |
224 const FILE* stdout = &__sF[1]; | |
225 const FILE* stderr = &__sF[2]; | |
226 } | |
227 else | |
228 { | |
229 static assert( false ); | |
230 } | |
231 | |
232 alias int fpos_t; | |
233 | |
234 int remove(char* filename); | |
235 int rename(char* from, char* to); | |
236 | |
237 FILE* tmpfile(); | |
238 char* tmpnam(char* s); | |
239 | |
240 int fclose(FILE* stream); | |
241 int fflush(FILE* stream); | |
242 FILE* fopen(char* filename, char* mode); | |
243 FILE* freopen(char* filename, char* mode, FILE* stream); | |
244 | |
245 void setbuf(FILE* stream, char* buf); | |
246 int setvbuf(FILE* stream, char* buf, int mode, size_t size); | |
247 | |
248 int fprintf(FILE* stream, char* format, ...); | |
249 int fscanf(FILE* stream, char* format, ...); | |
250 int sprintf(char* s, char* format, ...); | |
251 int sscanf(char* s, char* format, ...); | |
252 int vfprintf(FILE* stream, char* format, va_list arg); | |
253 int vfscanf(FILE* stream, char* format, va_list arg); | |
254 int vsprintf(char* s, char* format, va_list arg); | |
255 int vsscanf(char* s, char* format, va_list arg); | |
256 int vprintf(char* format, va_list arg); | |
257 int vscanf(char* format, va_list arg); | |
258 int printf(char* format, ...); | |
259 int scanf(char* format, ...); | |
260 | |
261 int fgetc(FILE* stream); | |
262 int fputc(int c, FILE* stream); | |
263 | |
264 char* fgets(char* s, int n, FILE* stream); | |
265 int fputs(char* s, FILE* stream); | |
266 char* gets(char* s); | |
267 int puts(char* s); | |
268 | |
269 extern (D) | |
270 { | |
271 int getchar() { return getc(stdin); } | |
272 int putchar(int c) { return putc(c,stdout); } | |
273 int getc(FILE* stream) { return fgetc(stream); } | |
274 int putc(int c, FILE* stream) { return fputc(c,stream); } | |
275 } | |
276 | |
277 int ungetc(int c, FILE* stream); | |
278 | |
279 size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream); | |
280 size_t fwrite(void* ptr, size_t size, size_t nmemb, FILE* stream); | |
281 | |
282 int fgetpos(FILE* stream, fpos_t * pos); | |
283 int fsetpos(FILE* stream, fpos_t* pos); | |
284 | |
285 int fseek(FILE* stream, c_long offset, int whence); | |
286 c_long ftell(FILE* stream); | |
287 | |
288 version( Win32 ) | |
289 { | |
290 extern (D) | |
291 { | |
292 void rewind(FILE* stream) { fseek(stream,0L,SEEK_SET); stream._flag&=~_IOERR; } | |
293 void clearerr(FILE* stream) { stream._flag &= ~(_IOERR|_IOEOF); } | |
294 int feof(FILE* stream) { return stream._flag&_IOEOF; } | |
295 int ferror(FILE* stream) { return stream._flag&_IOERR; } | |
296 } | |
297 int _snprintf(char*,size_t,char*,...); | |
298 alias _snprintf snprintf; | |
299 | |
300 int _vsnprintf(char* s, size_t n, char* format, va_list arg); | |
301 alias _vsnprintf vsnprintf; | |
302 } | |
303 else version( linux ) | |
304 { | |
305 void rewind(FILE* stream); | |
306 void clearerr(FILE* stream); | |
307 int feof(FILE* stream); | |
308 int ferror(FILE* stream); | |
309 int fileno(FILE *); | |
310 | |
311 int snprintf(char* s, size_t n, char* format, ...); | |
312 int vsnprintf(char* s, size_t n, char* format, va_list arg); | |
313 } | |
314 else version( darwin ) | |
315 { | |
316 void rewind(FILE*); | |
317 void clearerr(FILE*); | |
318 int feof(FILE*); | |
319 int ferror(FILE*); | |
320 int fileno(FILE*); | |
321 | |
322 int snprintf(char*, size_t, char*, ...); | |
323 int vsnprintf(char*, size_t, char*, va_list); | |
324 } | |
325 else | |
326 { | |
327 static assert( false ); | |
328 } | |
329 | |
330 void perror(char* s); | |
331 | |
332 int fwprintf(FILE* stream, wchar_t* format, ...); | |
333 int fwscanf(FILE* stream, wchar_t* format, ...); | |
334 int swprintf(wchar_t* s, size_t n, wchar_t* format, ...); | |
335 int swscanf(wchar_t* s, wchar_t* format, ...); | |
336 int vfwprintf(FILE* stream, wchar_t* format, va_list arg); | |
337 int vfwscanf(FILE* stream, wchar_t* format, va_list arg); | |
338 int vswprintf(wchar_t* s, size_t n, wchar_t* format, va_list arg); | |
339 int vswscanf(wchar_t* s, wchar_t* format, va_list arg); | |
340 int vwprintf(wchar_t* format, va_list arg); | |
341 int vwscanf(wchar_t* format, va_list arg); | |
342 int wprintf(wchar_t* format, ...); | |
343 int wscanf(wchar_t* format, ...); | |
344 | |
345 wint_t fgetwc(FILE* stream); | |
346 wint_t fputwc(wchar_t c, FILE* stream); | |
347 | |
348 wchar_t* fgetws(wchar_t* s, int n, FILE* stream); | |
349 int fputws(wchar_t* s, FILE* stream); | |
350 | |
351 extern (D) | |
352 { | |
353 wint_t getwchar() { return fgetwc(stdin); } | |
354 wint_t putwchar(wchar_t c) { return fputwc(c,stdout); } | |
355 wint_t getwc(FILE* stream) { return fgetwc(stream); } | |
356 wint_t putwc(wchar_t c, FILE* stream) { return fputwc(c, stream); } | |
357 } | |
358 | |
359 wint_t ungetwc(wint_t c, FILE* stream); | |
360 int fwide(FILE* stream, int mode); |