# HG changeset patch # User Carl Byington # Date 1402711561 25200 # Node ID 294435151b0cca39a0cd8751d2dcea827dde0d8f # Parent cc7e3588a0f32390b24bd637e09078f162bebdef use 5250 encryption config entry diff -r cc7e3588a0f3 -r 294435151b0c src/com/five_ten_sg/connectbot/service/TerminalMonitor.java --- a/src/com/five_ten_sg/connectbot/service/TerminalMonitor.java Fri Jun 13 16:24:59 2014 -0700 +++ b/src/com/five_ten_sg/connectbot/service/TerminalMonitor.java Fri Jun 13 19:06:01 2014 -0700 @@ -332,10 +332,9 @@ public synchronized void setField(int l, int c, char[] data, int offset) { Log.i(TAG, "setField()"); - byte[] d = charsToBytes(data); - byte[] b = new byte[d.length - offset]; - System.arraycopy(d, offset, b, 0, d.length - offset); - buffer.write(b); + char[] d = new char[data.length - offset]; + System.arraycopy(data, offset, d, 0, data.length - offset); + buffer.setField(l, c, d); } public synchronized void getField(int l, int c, int len) { diff -r cc7e3588a0f3 -r 294435151b0c src/com/five_ten_sg/connectbot/transport/AbsTransport.java --- a/src/com/five_ten_sg/connectbot/transport/AbsTransport.java Fri Jun 13 16:24:59 2014 -0700 +++ b/src/com/five_ten_sg/connectbot/transport/AbsTransport.java Fri Jun 13 19:06:01 2014 -0700 @@ -48,6 +48,8 @@ public void debug(String s) { Log.d(TAG, s); } + + // terminal key listener sending to the host @Override public void write(byte[] b) { try { @@ -70,6 +72,7 @@ Log.e(TAG, "Problem writing outgoing data in vt320() thread", e); } } + // We don't use telnet sequences. @Override public void sendTelnetCommand(byte cmd) { @@ -78,11 +81,6 @@ @Override public void setWindowSize(int c, int r) { } - // test for changed screen contents - @Override - public void testChanged() { - if (bridge.monitor != null) bridge.monitor.testChanged(); - } // play beep noise @Override public void beep() { @@ -91,6 +89,13 @@ else manager.sendActivityNotification(host); } + + // test for changed screen contents + @Override + public void testChanged() { + if (bridge.monitor != null) bridge.monitor.testChanged(); + } + // relay socket writing to the screen // bridge.monitor placement of new characters @Override public void putChar(int c, int l, char ch, int attributes) { @@ -131,6 +136,9 @@ super.setCursorPosition(c, l); } + + // monitor setField() + }; diff -r cc7e3588a0f3 -r 294435151b0c src/com/five_ten_sg/connectbot/transport/TN5250.java --- a/src/com/five_ten_sg/connectbot/transport/TN5250.java Fri Jun 13 16:24:59 2014 -0700 +++ b/src/com/five_ten_sg/connectbot/transport/TN5250.java Fri Jun 13 19:06:01 2014 -0700 @@ -130,24 +130,39 @@ Log.d(TAG, s); } - // terminal key listener sending to the host + // monitor injecting a field + @Override + public void setField(int l, int c, char [] d) { + screen52.setField(l, c, d); + } + + // terminal key listener sending to local screen @Override public void write(byte[] b) { + if (bridge.monitor != null) bridge.monitor.hostData(b); screen52.sendKeys(new String(b)); } @Override public void write(int b) { + if (bridge.monitor != null) bridge.monitor.hostData(b); screen52.sendKeys(new String(new byte[] {(byte)b})); } @Override public void keyPressed(int keyCode, char keyChar, int modifiers) { - String s; if (mnemonics.containsKey(keyCode)) { - s = mnemonics.get(keyCode); - if (s != "") screen52.sendKeys(s); + String s = mnemonics.get(keyCode); + if (s != "") { + if (bridge.monitor != null) bridge.monitor.hostData(s); + screen52.sendKeys(s); + } } } // 5250 writing to the screen + // test for changed screen contents + @Override + public void testChanged() { + if (bridge.monitor != null) bridge.monitor.testChanged(); + } @Override public void putChar(int c, int l, char ch, int attributes) { if (bridge.monitor != null) bridge.monitor.screenChanged(l, c); @@ -230,7 +245,7 @@ handler.setSSLType(encryption); screen52.setVT(handler); screen52.setBuffer(buffer); - connected = handler.connect(host.getHostname(), host.getPort()); + connected = handler.connect(host.getHostname(), host.getPort(), buffer); if (connected) bridge.onConnected(); } diff -r cc7e3588a0f3 -r 294435151b0c src/de/mud/terminal/vt320.java --- a/src/de/mud/terminal/vt320.java Fri Jun 13 16:24:59 2014 -0700 +++ b/src/de/mud/terminal/vt320.java Fri Jun 13 19:06:01 2014 -0700 @@ -66,6 +66,17 @@ } /** + * inject field contents as if typed + */ + public void setField(int l, int c, char [] d) { + // ignore line and column, just send the bytes to the host. + int n = d.length; + byte [] b = new byte [n]; + for (int i=0; i dsq; - private tnvt vt; private byte[] abyte2; private FileOutputStream fw; private BufferedOutputStream dw; @@ -30,9 +31,10 @@ - public DataStreamProducer(tnvt vt, BufferedInputStream in, BlockingQueue queue, byte[] init) { - bin = in; - this.vt = vt; + public DataStreamProducer(tnvt vt, BufferedInputStream bin, vt320 buffer, BlockingQueue queue, byte[] init) { + this.bin = bin; + this.vt = vt; + this.buffer = buffer; baosin = new ByteArrayOutputStream(); dsq = queue; abyte2 = init; @@ -162,7 +164,7 @@ int i = 0; while(!done) { - + if (bin.available() == 0) buffer.testChanged(); i = bin.read(); // WVL - LDC : 16/07/2003 : TR.000345 diff -r cc7e3588a0f3 -r 294435151b0c src/org/tn5250j/framework/tn5250/Screen5250.java --- a/src/org/tn5250j/framework/tn5250/Screen5250.java Fri Jun 13 16:24:59 2014 -0700 +++ b/src/org/tn5250j/framework/tn5250/Screen5250.java Fri Jun 13 19:06:01 2014 -0700 @@ -2682,6 +2682,24 @@ updateCursorLoc(); } + /* + * set the content of the field at (l,c) to d + * if l == -1, set the current field contents to d + */ + public void setField(int l, int c, char [] d) { + ScreenField cf; + if (l >= 0) { + int position = l * numCols + c; + isInField(position, true); + } + if ((d != null) && (d.length > 0)) { + cf = screenFields.getCurrentField(); + cf.setString(new String(d)); + lastPos = cf.getStartPos(); + } + updateDirty(); + } + /** * Set the current working field to the field number specified. * @@ -2690,6 +2708,7 @@ * @return true or false whether it was sucessful */ public boolean gotoField(int f) { + public boolean gotoField(int f) { int sizeFields = screenFields.getSize(); diff -r cc7e3588a0f3 -r 294435151b0c src/org/tn5250j/framework/tn5250/ScreenField.java --- a/src/org/tn5250j/framework/tn5250/ScreenField.java Fri Jun 13 16:24:59 2014 -0700 +++ b/src/org/tn5250j/framework/tn5250/ScreenField.java Fri Jun 13 19:06:01 2014 -0700 @@ -51,13 +51,12 @@ // startRow = row; // startCol = col; - startPos = (row * s.getColumns()) + col; - endPos = startPos + length -1; cursorProg = 0; - fieldId = 0; - length = len; - endPos = startPos + length -1; - this.attr = attr; + fieldId = 0; + length = len; + startPos = (row * s.getColumns()) + col; + endPos = startPos + length - 1; + this.attr = attr; setFFWs(ffw1,ffw2); setFCWs(fcw1,fcw2); @@ -169,8 +168,6 @@ } protected String getText() { - - StringBuffer text = new StringBuffer(); getKeyPos(endPos); int x = length; @@ -372,7 +369,7 @@ return (getFieldShift() == 7); } - + public boolean isRightToLeft() { return (getFieldShift() == 0x04); } @@ -580,6 +577,10 @@ " mdt = " + mdt; } + public int getStartPos() { + return startPos; + } + int startPos = 0; int endPos = 0; boolean mdt = false; diff -r cc7e3588a0f3 -r 294435151b0c src/org/tn5250j/framework/tn5250/ScreenFields.java --- a/src/org/tn5250j/framework/tn5250/ScreenFields.java Fri Jun 13 16:24:59 2014 -0700 +++ b/src/org/tn5250j/framework/tn5250/ScreenFields.java Fri Jun 13 19:06:01 2014 -0700 @@ -427,7 +427,7 @@ public void gotoFieldNext() { - // sanity check - we where getting null pointers after a restore of screen + // sanity check - we were getting null pointers after a restore of screen // and cursor was not positioned on a field when returned // *** Note *** to myself // maybe this is fixed I will have to check this some time diff -r cc7e3588a0f3 -r 294435151b0c src/org/tn5250j/framework/tn5250/tnvt.java --- a/src/org/tn5250j/framework/tn5250/tnvt.java Fri Jun 13 16:24:59 2014 -0700 +++ b/src/org/tn5250j/framework/tn5250/tnvt.java Fri Jun 13 19:06:01 2014 -0700 @@ -265,7 +265,7 @@ } - public final boolean connect(String hostname, int port) { + public final boolean connect(String hostname, int port, vt320 buffer) { try { this.hostname = hostname; this.port = port; @@ -308,7 +308,7 @@ } - producer = new DataStreamProducer(this, bin, dsq, abyte0); + producer = new DataStreamProducer(this, bin, buffer, dsq, abyte0); pthread = new Thread(producer); // pthread.setPriority(pthread.MIN_PRIORITY); pthread.setPriority(Thread.NORM_PRIORITY);