2 // System.CStreamWriter
5 // Dietmar Maurer (dietmar@ximian.com)
6 // Paolo Molaro (lupus@ximian.com)
7 // Dick Porter (dick@ximian.com)
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:
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
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.
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)
53 if (!driver.Initialized) {
55 base.Write (buffer, index, count);
56 } catch (IOException) {
63 int last = index + count;
71 if (driver.IsSpecialKey (c)) {
75 base.Write (buffer, index, n);
76 } catch (IOException) {
82 // write the special key
83 driver.WriteSpecialKey (c);
92 // write out the remainder of the buffer
94 base.Write (buffer, index, n);
95 } catch (IOException) {
101 public override void Write (char val)
105 if (driver.IsSpecialKey (val))
106 driver.WriteSpecialKey (val);
108 InternalWriteChar (val);
109 } catch (IOException) {
114 public void WriteKey (ConsoleKeyInfo key)
117 ConsoleKeyInfo copy = new ConsoleKeyInfo (key);
118 if (driver.IsSpecialKey (copy))
119 driver.WriteSpecialKey (copy);
121 InternalWriteChar (copy.KeyChar);
125 public void InternalWriteString (string val)
129 } catch (IOException) {
133 public void InternalWriteChar (char val)
137 } catch (IOException) {
141 public void InternalWriteChars (char [] buffer, int n)
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)
159 if (driver.Initialized)
160 Write (val.ToCharArray ());
164 } catch (IOException){