Mercurial > 510Connectbot
changeset 405:d3c5480e8441
fix broken fillRegenerationBuffer/fillScreenArray attempt to handle missing attributes; fix setfield outside screen boundaries
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Fri, 24 Oct 2014 14:19:06 -0700 |
parents | ec74f347ab5f |
children | 4038389cb7ce |
files | src/com/five_ten_sg/connectbot/service/TerminalMonitor.java src/org/tn5250j/framework/tn5250/tnvt.java |
diffstat | 2 files changed, 23 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/src/com/five_ten_sg/connectbot/service/TerminalMonitor.java Tue Oct 21 13:11:59 2014 -0700 +++ b/src/com/five_ten_sg/connectbot/service/TerminalMonitor.java Fri Oct 24 14:19:06 2014 -0700 @@ -429,7 +429,7 @@ } else { // ignore setfield outside screen boundaries - if ((l >= buffer.height) || (c + len >= buffer.width)) return; + if ((l >= buffer.height) || (c + len > buffer.width)) return; } buffer.setField(l, c, da);
--- a/src/org/tn5250j/framework/tn5250/tnvt.java Tue Oct 21 13:11:59 2014 -0700 +++ b/src/org/tn5250j/framework/tn5250/tnvt.java Fri Oct 24 14:19:06 2014 -0700 @@ -1142,32 +1142,26 @@ int len = rows * cols; ScreenPlanes planes = screen52.planes; - for (int y = 0; y < len; y++) { // save the screen data - if (planes.isAttributePlace(y)) { - la = planes.getCharAttr(y); - sa[sac++] = (byte) la; - } - else { - if (planes.getCharAttr(y) != la) { + try { + for (int y = 0; y < len; y++) { // save the screen data + if (planes.isAttributePlace(y)) { la = planes.getCharAttr(y); - sac = max(sac--, 0); sa[sac++] = (byte) la; } - - //LDC: Check to see if it is an displayable character. If not, - // do not convert the character. - // The characters on screen are in unicode - //sa[sac++] = - // (byte)codePage.uni2ebcdic(screen52.screen[y].getChar()); - char ch = planes.getChar(y); - byte byteCh = (byte) ch; - - if (isDataUnicode(ch)) - byteCh = codePage.uni2ebcdic(ch); - - sa[min(sac++, len - 1)] = byteCh; + else { + // The characters on screen are in unicode + char ch = planes.getChar(y); + byte byteCh; + if (isDataUnicode(ch)) byteCh = codePage.uni2ebcdic(ch); + else byteCh = (byte) ch; + sa[sac++] = byteCh; + } } } + catch (Exception exc) { + Log.i(TAG, exc.getMessage()); + exc.printStackTrace(); + } } private final void fillRegenerationBuffer(ByteArrayOutputStream sc, int rows, int cols) @@ -1206,24 +1200,12 @@ sa[sac++] = (byte) la; } else { - if (planes.getCharAttr(y) != la) { - la = planes.getCharAttr(y); - sac = max(sac--, 0); - sa[sac++] = (byte) la; - } - - //LDC: Check to see if it is an displayable character. If not, - // do not convert the character. // The characters on screen are in unicode - //sa[sac++] = - // (byte)codePage.uni2ebcdic(screen52.screen[y].getChar()); char ch = planes.getChar(y); - byte byteCh = (byte) ch; - - if (isDataUnicode(ch)) - byteCh = codePage.uni2ebcdic(ch); - - sa[min(sac++, len - 1)] = byteCh; + byte byteCh; + if (isDataUnicode(ch)) byteCh = codePage.uni2ebcdic(ch); + else byteCh = (byte) ch; + sa[sac++] = byteCh; } } } @@ -1369,15 +1351,10 @@ la = b; } else { - //LDC - 12/02/2003 - Check to see if it is an displayable - // character. If not, - // do not convert the character. // The characters on screen are in unicode - char ch = (char) b; - - if (isDataEBCDIC(b)) - ch = codePage.ebcdic2uni(b); - + char ch; + if (isDataEBCDIC(b)) ch = codePage.ebcdic2uni(b); + else ch = b; planes.setScreenCharAndAttr(y, ch, la, false); } }