Artifact cc4740f508204014bf9be8476aad06900ca14c2b6a1b5bb8f49650ea6372185c:
- Executable file
r37/lisp/csl/jlisp/LispOutputStream.java
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 3429) [annotate] [blame] [check-ins using] [more...]
// // This file is part of the Jlisp implementation of Standard Lisp // Copyright \u00a9 (C) Codemist Ltd, 1998-2000. // import java.io.*; class LispOutputStream extends LispStream { boolean closeMe; LispOutputStream(String n) throws IOException // to a named file { super(n); wr = new BufferedWriter(new FileWriter(nameConvert(n))); closeMe = true; Jlisp.openOutputFiles.add(this); } LispOutputStream(File n) throws IOException // to a named file { super(n.getName()); wr = new BufferedWriter(new FileWriter(n)); closeMe = true; Jlisp.openOutputFiles.add(this); } LispOutputStream(String n, boolean appendp) throws IOException // to a file, but with an "append" option { super(n); wr = new BufferedWriter(new FileWriter(nameConvert(n), appendp)); closeMe = true; Jlisp.openOutputFiles.add(this); } LispOutputStream() // uses standard input, no extra buffering. // but note that I have made it a Writer already... { super("<stdout>"); wr = Jlisp.out; closeMe = false; Jlisp.openOutputFiles.add(this); } void flush() { try { wr.flush(); } catch (IOException e) {} } void close() { Jlisp.openOutputFiles.removeElement(this); try { wr.flush(); if (closeMe) wr.close(); } catch (IOException e) {} } void print(String s) { if (s == null) s = "null"; char [] v = s.toCharArray(); // It *MAY* be better to use getChars here and move data into a pre-allocated // array of characters. try { int p = 0; for (int i=0; i<v.length; i++) { char c = v[i]; // In counting columns here I do not take any account of // (a) tab // (b) backspace // (c) '\p' and any other oddities // in fact I just count anything apart from '\n' as one character position. if (c == '\n') { wr.write(v, p, i-p); wr.write(eol); p = i+1; column = 0; } // There is a delicacy here. If the user issues ('\r' '\n') rather than // just '\n' I need to take action. What I do is to ignore the '\r' and // map the '\n' onto a platform-specific end-of-line. else if (c == '\r') { wr.write(v, p, i-p); p = i+1; column = 0; } else column++; } wr.write(v, p, v.length-p); } catch (IOException e) {} } void println(String s) { if (s == null) s = "null"; char [] v = s.toCharArray(); try { int p = 0; for (int i=0; i<v.length; i++) { char c = v[i]; if (c == '\n') { wr.write(v, p, i-p); wr.write(eol); p = i+1; } else if (c == '\r') { wr.write(v, p, i-p); p = i+1; } } wr.write(v, p, v.length-p); wr.write(eol); } catch (IOException e) {} column = 0; } } // end of LispOutputStream.java