annotate lphobos/std/stdio.d @ 837:331a176c1f4f

Removed error on naked, not fully complete, but I'll be doing more work on it during this Christmas, and some things do work. Fixed taking delegate of final class method. see mini/delegate3.d.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 09 Dec 2008 14:07:30 +0100
parents 5825d48b27d1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
1
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
2 // Written in the D programming language.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
3
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
4 /* Written by Walter Bright and Andrei Alexandrescu
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
5 * www.digitalmars.com
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
6 * Placed in the Public Domain.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
7 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
8
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
9 /********************************
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
10 * Standard I/O functions that extend $(B std.c.stdio).
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
11 * $(B std.c.stdio) is automatically imported when importing
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
12 * $(B std.stdio).
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
13 * Macros:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
14 * WIKI=Phobos/StdStdio
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
15 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
16
18
c05ef76f1c20 [svn r22] * Forgot to add std.stdio
lindquist
parents:
diff changeset
17 module std.stdio;
c05ef76f1c20 [svn r22] * Forgot to add std.stdio
lindquist
parents:
diff changeset
18
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
19 public import std.c.stdio;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
20
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
21 import std.format;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
22 import std.utf;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
23 import std.string;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
24 import std.gc;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
25 import std.c.stdlib;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
26 import std.c.string;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
27 import std.c.stddef;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
28
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
29
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
30 version (DigitalMars)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
31 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
32 version (Windows)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
33 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
34 // Specific to the way Digital Mars C does stdio
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
35 version = DIGITAL_MARS_STDIO;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
36 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
37 }
22
a6360e68134a [svn r26] * Fixed templates defining a constant value
lindquist
parents: 21
diff changeset
38
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
39 version (DIGITAL_MARS_STDIO)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
40 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
41 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
42 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
43 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
44 // Specific to the way Gnu C does stdio
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
45 version = GCC_IO;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
46 import std.c.linux.linux;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
47 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
48
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
49 version (DIGITAL_MARS_STDIO)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
50 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
51 extern (C)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
52 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
53 /* **
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
54 * Digital Mars under-the-hood C I/O functions
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
55 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
56 int _fputc_nlock(int, FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
57 int _fputwc_nlock(int, FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
58 int _fgetc_nlock(FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
59 int _fgetwc_nlock(FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
60 int __fp_lock(FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
61 void __fp_unlock(FILE*);
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 58
diff changeset
62 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
63 alias _fputc_nlock FPUTC;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
64 alias _fputwc_nlock FPUTWC;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
65 alias _fgetc_nlock FGETC;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
66 alias _fgetwc_nlock FGETWC;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
67
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
68 alias __fp_lock FLOCK;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
69 alias __fp_unlock FUNLOCK;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
70 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
71 else version (GCC_IO)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
72 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
73 /* **
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
74 * Gnu under-the-hood C I/O functions; see
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
75 * http://www.gnu.org/software/libc/manual/html_node/I_002fO-on-Streams.html#I_002fO-on-Streams
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
76 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
77 extern (C)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
78 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
79 int fputc_unlocked(int, FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
80 int fputwc_unlocked(wchar_t, FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
81 int fgetc_unlocked(FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
82 int fgetwc_unlocked(FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
83 void flockfile(FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
84 void funlockfile(FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
85 ssize_t getline(char**, size_t*, FILE*);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
86 ssize_t getdelim (char**, size_t*, int, FILE*);
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 58
diff changeset
87 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
88
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
89 alias fputc_unlocked FPUTC;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
90 alias fputwc_unlocked FPUTWC;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
91 alias fgetc_unlocked FGETC;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
92 alias fgetwc_unlocked FGETWC;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
93
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
94 alias flockfile FLOCK;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
95 alias funlockfile FUNLOCK;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
96 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
97 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
98 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
99 static assert(0, "unsupported C I/O system");
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
100 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
101
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
102
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
103 /*********************
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
104 * Thrown if I/O errors happen.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
105 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
106 class StdioException : Exception
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
107 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
108 uint errno; // operating system error code
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
109
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
110 this(char[] msg)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
111 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
112 super(msg);
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 58
diff changeset
113 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
114
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
115 this(uint errno)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
116 { char* s = strerror(errno);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
117 super(std.string.toString(s).dup);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
118 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
119
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
120 static void opCall(char[] msg)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
121 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
122 throw new StdioException(msg);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
123 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
124
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
125 static void opCall()
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
126 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
127 throw new StdioException(getErrno());
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 58
diff changeset
128 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
129 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
130
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
131 private
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
132 void writefx(FILE* fp, TypeInfo[] arguments, void* argptr, int newline=false)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
133 { int orientation;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
134
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
135 orientation = fwide(fp, 0);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
136
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
137 /* Do the file stream locking at the outermost level
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
138 * rather than character by character.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
139 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
140 FLOCK(fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
141 scope(exit) FUNLOCK(fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
142
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
143 if (orientation <= 0) // byte orientation or no orientation
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
144 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
145 void putc(dchar c)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
146 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
147 if (c <= 0x7F)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
148 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
149 FPUTC(c, fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
150 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
151 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
152 { char[4] buf;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
153 char[] b;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
154
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
155 b = std.utf.toUTF8(buf, c);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
156 for (size_t i = 0; i < b.length; i++)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
157 FPUTC(b[i], fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
158 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
159 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
160
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
161 std.format.doFormat(&putc, arguments, argptr);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
162 if (newline)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
163 FPUTC('\n', fp);
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 58
diff changeset
164 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
165 else if (orientation > 0) // wide orientation
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
166 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
167 version (Windows)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
168 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
169 void putcw(dchar c)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
170 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
171 assert(isValidDchar(c));
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
172 if (c <= 0xFFFF)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
173 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
174 FPUTWC(c, fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
175 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
176 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
177 { wchar[2] buf;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
178
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
179 buf[0] = cast(wchar) ((((c - 0x10000) >> 10) & 0x3FF) + 0xD800);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
180 buf[1] = cast(wchar) (((c - 0x10000) & 0x3FF) + 0xDC00);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
181 FPUTWC(buf[0], fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
182 FPUTWC(buf[1], fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
183 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
184 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
185 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
186 else version (linux)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
187 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
188 void putcw(dchar c)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
189 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
190 FPUTWC(c, fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
191 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
192 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
193 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
194 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
195 static assert(0);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
196 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
197
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
198 std.format.doFormat(&putcw, arguments, argptr);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
199 if (newline)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
200 FPUTWC('\n', fp);
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 58
diff changeset
201 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
202 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
203
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
204
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
205 /***********************************
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
206 * Arguments are formatted per the
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
207 * $(LINK2 std_format.html#format-string, format strings)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
208 * and written to $(B stdout).
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
209 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
210
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
211 void writef(...)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
212 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
213 writefx(stdout, _arguments, _argptr, 0);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
214 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
215
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
216 /***********************************
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
217 * Same as $(B writef), but a newline is appended
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
218 * to the output.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
219 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
220
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
221 void writefln(...)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
222 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
223 writefx(stdout, _arguments, _argptr, 1);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
224 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
225
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
226 /***********************************
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
227 * Same as $(B writef), but output is sent to the
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
228 * stream fp instead of $(B stdout).
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
229 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
230
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
231 void fwritef(FILE* fp, ...)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
232 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
233 writefx(fp, _arguments, _argptr, 0);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
234 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
235
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
236 /***********************************
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
237 * Same as $(B writefln), but output is sent to the
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
238 * stream fp instead of $(B stdout).
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
239 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
240
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
241 void fwritefln(FILE* fp, ...)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
242 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
243 writefx(fp, _arguments, _argptr, 1);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
244 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
245
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
246 /**********************************
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
247 * Read line from stream fp.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
248 * Returns:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
249 * null for end of file,
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
250 * char[] for line read from fp, including terminating '\n'
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
251 * Params:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
252 * fp = input stream
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
253 * Throws:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
254 * $(B StdioException) on error
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
255 * Example:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
256 * Reads $(B stdin) and writes it to $(B stdout).
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
257 ---
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
258 import std.stdio;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
259
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
260 int main()
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
261 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
262 char[] buf;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
263 while ((buf = readln()) != null)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
264 writef("%s", buf);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
265 return 0;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
266 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
267 ---
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
268 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
269 char[] readln(FILE* fp = stdin)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
270 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
271 char[] buf;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
272 readln(fp, buf);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
273 return buf;
18
c05ef76f1c20 [svn r22] * Forgot to add std.stdio
lindquist
parents:
diff changeset
274 }
c05ef76f1c20 [svn r22] * Forgot to add std.stdio
lindquist
parents:
diff changeset
275
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
276 /**********************************
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
277 * Read line from stream fp and write it to buf[],
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
278 * including terminating '\n'.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
279 *
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
280 * This is often faster than readln(FILE*) because the buffer
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
281 * is reused each call. Note that reusing the buffer means that
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
282 * the previous contents of it need to be copied if needed.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
283 * Params:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
284 * fp = input stream
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
285 * buf = buffer used to store the resulting line data. buf
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
286 * is resized as necessary.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
287 * Returns:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
288 * 0 for end of file, otherwise
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
289 * number of characters read
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
290 * Throws:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
291 * $(B StdioException) on error
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
292 * Example:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
293 * Reads $(B stdin) and writes it to $(B stdout).
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
294 ---
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
295 import std.stdio;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
296
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
297 int main()
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 58
diff changeset
298 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
299 char[] buf;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
300 while (readln(stdin, buf))
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
301 writef("%s", buf);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
302 return 0;
18
c05ef76f1c20 [svn r22] * Forgot to add std.stdio
lindquist
parents:
diff changeset
303 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
304 ---
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
305 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
306 size_t readln(FILE* fp, inout char[] buf)
94
61615fa85940 [svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca").
lindquist
parents: 58
diff changeset
307 {
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
308 version (DIGITAL_MARS_STDIO)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
309 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
310 FLOCK(fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
311 scope(exit) FUNLOCK(fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
312
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
313 if (__fhnd_info[fp._file] & FHND_WCHAR)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
314 { /* Stream is in wide characters.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
315 * Read them and convert to chars.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
316 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
317 static assert(wchar_t.sizeof == 2);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
318 buf.length = 0;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
319 int c2;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
320 for (int c; (c = FGETWC(fp)) != -1; )
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
321 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
322 if ((c & ~0x7F) == 0)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
323 { buf ~= c;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
324 if (c == '\n')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
325 break;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
326 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
327 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
328 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
329 if (c >= 0xD800 && c <= 0xDBFF)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
330 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
331 if ((c2 = FGETWC(fp)) != -1 ||
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
332 c2 < 0xDC00 && c2 > 0xDFFF)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
333 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
334 StdioException("unpaired UTF-16 surrogate");
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
335 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
336 c = ((c - 0xD7C0) << 10) + (c2 - 0xDC00);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
337 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
338 std.utf.encode(buf, c);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
339 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
340 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
341 if (ferror(fp))
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
342 StdioException();
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
343 return buf.length;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
344 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
345
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
346 auto sz = std.gc.capacity(buf.ptr);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
347 //auto sz = buf.length;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
348 buf = buf.ptr[0 .. sz];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
349 if (fp._flag & _IONBF)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
350 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
351 /* Use this for unbuffered I/O, when running
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
352 * across buffer boundaries, or for any but the common
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
353 * cases.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
354 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
355 L1:
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
356 char *p;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
357
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
358 if (sz)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
359 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
360 p = buf.ptr;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
361 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
362 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
363 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
364 sz = 64;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
365 p = cast(char*) std.gc.malloc(sz);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
366 std.gc.hasNoPointers(p);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
367 buf = p[0 .. sz];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
368 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
369 size_t i = 0;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
370 for (int c; (c = FGETC(fp)) != -1; )
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
371 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
372 if ((p[i] = c) != '\n')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
373 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
374 i++;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
375 if (i < sz)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
376 continue;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
377 buf = p[0 .. i] ~ readln(fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
378 return buf.length;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
379 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
380 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
381 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
382 buf = p[0 .. i + 1];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
383 return i + 1;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
384 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
385 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
386 if (ferror(fp))
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
387 StdioException();
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
388 buf = p[0 .. i];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
389 return i;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
390 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
391 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
392 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
393 int u = fp._cnt;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
394 char* p = fp._ptr;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
395 int i;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
396 if (fp._flag & _IOTRAN)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
397 { /* Translated mode ignores \r and treats ^Z as end-of-file
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
398 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
399 char c;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
400 while (1)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
401 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
402 if (i == u) // if end of buffer
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
403 goto L1; // give up
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
404 c = p[i];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
405 i++;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
406 if (c != '\r')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
407 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
408 if (c == '\n')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
409 break;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
410 if (c != 0x1A)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
411 continue;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
412 goto L1;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
413 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
414 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
415 { if (i != u && p[i] == '\n')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
416 break;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
417 goto L1;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
418 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
419 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
420 if (i > sz)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
421 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
422 buf = cast(char[])std.gc.malloc(i);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
423 std.gc.hasNoPointers(buf.ptr);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
424 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
425 if (i - 1)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
426 memcpy(buf.ptr, p, i - 1);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
427 buf[i - 1] = '\n';
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
428 if (c == '\r')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
429 i++;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
430 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
431 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
432 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
433 while (1)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
434 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
435 if (i == u) // if end of buffer
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
436 goto L1; // give up
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
437 auto c = p[i];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
438 i++;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
439 if (c == '\n')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
440 break;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
441 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
442 if (i > sz)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
443 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
444 buf = cast(char[])std.gc.malloc(i);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
445 std.gc.hasNoPointers(buf.ptr);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
446 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
447 memcpy(buf.ptr, p, i);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
448 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
449 fp._cnt -= i;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
450 fp._ptr += i;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
451 buf = buf[0 .. i];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
452 return i;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
453 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
454 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
455 else version (GCC_IO)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
456 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
457 if (fwide(fp, 0) > 0)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
458 { /* Stream is in wide characters.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
459 * Read them and convert to chars.
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
460 */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
461 FLOCK(fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
462 scope(exit) FUNLOCK(fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
463 version (Windows)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
464 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
465 buf.length = 0;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
466 int c2;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
467 for (int c; (c = FGETWC(fp)) != -1; )
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
468 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
469 if ((c & ~0x7F) == 0)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
470 { buf ~= c;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
471 if (c == '\n')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
472 break;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
473 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
474 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
475 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
476 if (c >= 0xD800 && c <= 0xDBFF)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
477 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
478 if ((c2 = FGETWC(fp)) != -1 ||
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
479 c2 < 0xDC00 && c2 > 0xDFFF)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
480 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
481 StdioException("unpaired UTF-16 surrogate");
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
482 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
483 c = ((c - 0xD7C0) << 10) + (c2 - 0xDC00);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
484 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
485 std.utf.encode(buf, c);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
486 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
487 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
488 if (ferror(fp))
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
489 StdioException();
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
490 return buf.length;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
491 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
492 else version (linux)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
493 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
494 buf.length = 0;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
495 for (int c; (c = FGETWC(fp)) != -1; )
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
496 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
497 if ((c & ~0x7F) == 0)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
498 buf ~= c;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
499 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
500 std.utf.encode(buf, cast(dchar)c);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
501 if (c == '\n')
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
502 break;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
503 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
504 if (ferror(fp))
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
505 StdioException();
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
506 return buf.length;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
507 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
508 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
509 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
510 static assert(0);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
511 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
512 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
513
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
514 char *lineptr = null;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
515 size_t n = 0;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
516 auto s = getdelim(&lineptr, &n, '\n', fp);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
517 scope(exit) free(lineptr);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
518 if (s < 0)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
519 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
520 if (ferror(fp))
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
521 StdioException();
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
522 buf.length = 0; // end of file
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
523 return 0;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
524 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
525 buf = buf.ptr[0 .. std.gc.capacity(buf.ptr)];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
526 if (s <= buf.length)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
527 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
528 buf.length = s;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
529 buf[] = lineptr[0 .. s];
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
530 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
531 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
532 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
533 buf = lineptr[0 .. s].dup;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
534 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
535 return s;
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
536 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
537 else
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
538 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
539 static assert(0);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
540 }
18
c05ef76f1c20 [svn r22] * Forgot to add std.stdio
lindquist
parents:
diff changeset
541 }
131
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
542
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
543 /** ditto */
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
544 size_t readln(inout char[] buf)
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
545 {
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
546 return readln(stdin, buf);
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
547 }
5825d48b27d1 [svn r135] * Merged DMD 1.025 *
lindquist
parents: 94
diff changeset
548