X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2FRuntime.java;h=1af6f7303cb1343696f27c158b6e53aab5e009b2;hp=0543fd0aff3ec0aabc137c5c3ba54ac324d39ca2;hb=f3c650e13377bcb68dfa3571dc7561bc60e76ffd;hpb=2db6b04d7557a26e3b9e7440e7968aaec262216f diff --git a/src/org/ibex/nestedvm/Runtime.java b/src/org/ibex/nestedvm/Runtime.java index 0543fd0..1af6f73 100644 --- a/src/org/ibex/nestedvm/Runtime.java +++ b/src/org/ibex/nestedvm/Runtime.java @@ -157,7 +157,8 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { } } - addFD(new StdinFD(System.in)); + InputStream stdin = Boolean.valueOf(getSystemProperty("nestedvm.textstdin")).booleanValue() ? new TextInputStream(System.in) : System.in; + addFD(new StdinFD(stdin)); addFD(new StdoutFD(System.out)); addFD(new StdoutFD(System.err)); } @@ -1215,6 +1216,42 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { public FStat _fstat() { return new FStat() { public int type() { return S_IFCHR; } }; } } + // FEATURE: TextInputStream: This is pretty inefficient but it is only used for reading from the console on win32 + static class TextInputStream extends InputStream { + private int pushedBack = -1; + private final InputStream parent; + public TextInputStream(InputStream parent) { this.parent = parent; } + public int read() throws IOException { + if(pushedBack != -1) { int c = pushedBack; pushedBack = -1; return c; } + int c = parent.read(); + if(c == '\r' && (c = parent.read()) != '\n') { pushedBack = c; return '\r'; } + return c; + } + public int read(byte[] buf, int pos, int len) throws IOException { + boolean pb = false; + if(pushedBack != -1 && len > 0) { + buf[0] = (byte) pushedBack; + pushedBack = -1; + pos++; len--; pb = true; + } + int n = parent.read(buf,pos,len); + if(n == -1) return -1; + for(int i=0;i