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); ///