Mercurial > projects > ldc
comparison 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 |
comparison
equal
deleted
inserted
replaced
0:a9e71648e74d | 1:c53b6e3fe49a |
---|---|
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); /// |