stubs for TTableWidget
[fanfix.git] / src / jexer / net / TelnetInputStream.java
index 1764b88303ebf416806a6eb0f490d183e36ba8c8..3e74561a40c20e6ea9b166dea9de4d2e24e00f1c 100644 (file)
@@ -3,7 +3,7 @@
  *
  * The MIT License (MIT)
  *
- * Copyright (C) 2017 Kevin Lamonte
+ * Copyright (C) 2019 Kevin Lamonte
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -199,6 +199,15 @@ public class TelnetInputStream extends InputStream implements SessionInfo {
         this.language = language;
     }
 
+    /**
+     * Get the terminal type as reported by the telnet Terminal Type option.
+     *
+     * @return the terminal type
+     */
+    public String getTerminalType() {
+        return master.terminalType;
+    }
+
     /**
      * Text window width getter.
      *
@@ -311,6 +320,7 @@ public class TelnetInputStream extends InputStream implements SessionInfo {
 
         // If we got something, return it.
         if (rc > 0) {
+            readBufferEnd += rc;
             readBufferStart++;
             return readBuffer[readBufferStart - 1];
         }
@@ -926,25 +936,41 @@ public class TelnetInputStream extends InputStream implements SessionInfo {
                 if (subnegBuffer.get(i) == (byte)TELNET_IAC) {
                     i++;
                 }
-                windowWidth = subnegBuffer.get(i) * 256;
+                int width = subnegBuffer.get(i);
+                if (width < 0) {
+                    width += 256;
+                }
+                windowWidth = width * 256;
 
                 i++;
                 if (subnegBuffer.get(i) == (byte)TELNET_IAC) {
                     i++;
                 }
-                windowWidth += subnegBuffer.get(i);
+                width = subnegBuffer.get(i);
+                windowWidth += width;
+                if (width < 0) {
+                    windowWidth += 256;
+                }
 
                 i++;
                 if (subnegBuffer.get(i) == (byte)TELNET_IAC) {
                     i++;
                 }
-                windowHeight = subnegBuffer.get(i) * 256;
+                int height = subnegBuffer.get(i);
+                if (height < 0) {
+                    height += 256;
+                }
+                windowHeight = height * 256;
 
                 i++;
                 if (subnegBuffer.get(i) == (byte)TELNET_IAC) {
                     i++;
                 }
-                windowHeight += subnegBuffer.get(i);
+                height = subnegBuffer.get(i);
+                windowHeight += height;
+                if (height < 0) {
+                    windowHeight += 256;
+                }
             }
             break;