move FrameworkName from corlib to System
[mcs.git] / class / corlib / System / CStreamWriter.cs
blob0d871489f3f38f638a9d9ae57817eaa1cb4e8955
1 //
2 // System.CStreamWriter
3 //
4 // Authors:
5 // Dietmar Maurer (dietmar@ximian.com)
6 // Paolo Molaro (lupus@ximian.com)
7 // Dick Porter (dick@ximian.com)
8 //
9 // (c) 2006 Novell, Inc. http://www.novell.com
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
22 //
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
25 //
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 #if !NET_2_1
35 using System;
36 using System.Text;
38 namespace System.IO {
39 class CStreamWriter : StreamWriter {
40 TermInfoDriver driver;
42 public CStreamWriter (Stream stream, Encoding encoding)
43 : base (stream, encoding)
45 driver = (TermInfoDriver) ConsoleDriver.driver;
48 public override void Write (char [] buffer, int index, int count)
50 if (count <= 0)
51 return;
53 if (!driver.Initialized) {
54 try {
55 base.Write (buffer, index, count);
56 } catch (IOException) {
59 return;
62 lock (this) {
63 int last = index + count;
64 int i = index;
65 int n = 0;
66 char c;
68 do {
69 c = buffer [i++];
71 if (driver.IsSpecialKey (c)) {
72 // flush what we have
73 if (n > 0) {
74 try {
75 base.Write (buffer, index, n);
76 } catch (IOException) {
79 n = 0;
82 // write the special key
83 driver.WriteSpecialKey (c);
85 index = i;
86 } else {
87 n++;
89 } while (i < last);
91 if (n > 0) {
92 // write out the remainder of the buffer
93 try {
94 base.Write (buffer, index, n);
95 } catch (IOException) {
101 public override void Write (char val)
103 lock (this) {
104 try {
105 if (driver.IsSpecialKey (val))
106 driver.WriteSpecialKey (val);
107 else
108 InternalWriteChar (val);
109 } catch (IOException) {
114 public void WriteKey (ConsoleKeyInfo key)
116 lock (this) {
117 ConsoleKeyInfo copy = new ConsoleKeyInfo (key);
118 if (driver.IsSpecialKey (copy))
119 driver.WriteSpecialKey (copy);
120 else
121 InternalWriteChar (copy.KeyChar);
125 public void InternalWriteString (string val)
127 try {
128 base.Write (val);
129 } catch (IOException) {
133 public void InternalWriteChar (char val)
135 try {
136 base.Write (val);
137 } catch (IOException) {
141 public void InternalWriteChars (char [] buffer, int n)
143 try {
144 base.Write (buffer, 0, n);
145 } catch (IOException) {
149 public override void Write (char [] val)
151 Write (val, 0, val.Length);
154 public override void Write (string val)
156 if (val == null)
157 return;
159 if (driver.Initialized)
160 Write (val.ToCharArray ());
161 else {
162 try {
163 base.Write (val);
164 } catch (IOException){
171 #endif