Commit Diff


commit - f85347a147b2baddd375a8877f42c7bf93844d45
commit + dc9d63ad580656174429e44368fa05c6f61fbd80
blob - ef6923f0ca63e904e5c8ac2494b1dc596c59de99
blob + e1f7dd36b80f44b319e144bb467c52c059668e08
--- de/mud/jta/default.conf
+++ de/mud/jta/default.conf
@@ -87,7 +87,7 @@ Terminal.scrollBar		=	West
 Terminal.id			=	vt320
 Terminal.buffer			=	100
 Terminal.size			=	[80,24]
-Terminal.resize			=	font
+Terminal.resize			=	screen
 Terminal.font			=	Monospaced
 Terminal.fontStyle		=	plain
 Terminal.fontSize		=	11
blob - a74d3b46a3bdd5a648dda0eecb1268797e464668
blob + 72a84b796c6837e65668d91fb4ade18841d5f5e3
--- de/mud/jta/plugin/Telnet.java
+++ de/mud/jta/plugin/Telnet.java
@@ -33,6 +33,7 @@ import de.mud.jta.PluginBus;
 import de.mud.jta.event.OnlineStatusListener;
 import de.mud.jta.event.ConfigurationListener;
 import de.mud.jta.event.TelnetCommandListener;
+import de.mud.jta.event.SetWindowSizeListener;
 import de.mud.jta.event.TerminalTypeRequest;
 import de.mud.jta.event.WindowSizeRequest;
 import de.mud.jta.event.LocalEchoRequest;
@@ -108,6 +109,16 @@ public class Telnet extends Plugin implements FilterPl
       }
     });
 
+    bus.registerPluginListener(new SetWindowSizeListener() {
+      public void setWindowSize(int columns, int rows) {
+        try {
+	  handler.setWindowSize(columns,rows);
+        } catch (java.io.IOException e) {
+          System.err.println("IO Exception in set window size");
+        }
+      }
+    });
+
     bus.registerPluginListener(new ConfigurationListener() {
       public void setConfiguration(PluginConfig config) {
         configure(config);
blob - 731107b3955acf9336fc455e02de65b15fb66dfa
blob + 945ca811f393572f3611150d574ed47b5a25d8b0
--- de/mud/jta/plugin/Terminal.java
+++ de/mud/jta/plugin/Terminal.java
@@ -37,6 +37,7 @@ import de.mud.jta.event.OnlineStatusListener;
 import de.mud.jta.event.ReturnFocusListener;
 import de.mud.jta.event.SoundRequest;
 import de.mud.jta.event.TelnetCommandRequest;
+import de.mud.jta.event.SetWindowSizeRequest;
 import de.mud.jta.event.TerminalTypeListener;
 import de.mud.jta.event.WindowSizeListener;
 import de.mud.terminal.vt320;
@@ -152,6 +153,10 @@ public class Terminal extends Plugin
       public void sendTelnetCommand(byte cmd) {
         bus.broadcast(new TelnetCommandRequest(cmd));
       }
+
+      public void setWindowSize(int c, int r) {
+        bus.broadcast(new SetWindowSizeRequest(c,r));
+      }
     };
 
     // create terminal
@@ -453,7 +458,7 @@ public class Terminal extends Plugin
         int idx = tmp.indexOf(',');
         int width = Integer.parseInt(tmp.substring(1, idx).trim());
         int height = Integer.parseInt(tmp.substring(idx + 1, tmp.length() - 1).trim());
-        emulation.setScreenSize(width, height);
+        emulation.setScreenSize(width, height, false);
       } catch (Exception e) {
         error("screen size is wrong: " + tmp);
         error("error: " + e);
blob - 59e436530b747ecdb34339bf3671627aeaf3d3c6
blob + 5a3110afca4bd86b8c739cce71174901cd39adf1
--- de/mud/telnet/TelnetProtocolHandler.java
+++ de/mud/telnet/TelnetProtocolHandler.java
@@ -204,7 +204,26 @@ public abstract class TelnetProtocolHandler {
     write(b);
   }
 
+  /**
+   * Send the new Window Size (via NAWS)
+   */
+  public void setWindowSize(int columns,int rows)
+    throws IOException {
+    if(debug > 2) System.err.println("sending NAWS");
 
+    if (receivedDX[TELOPT_NAWS] != DO) {
+    	System.err.println("not allowed to send NAWS? (DONT NAWS)");
+	return;
+    }
+    write(IAC);write(SB);write(TELOPT_NAWS);
+    write((byte) (columns >> 8));
+    write((byte) (columns & 0xff));
+    write((byte) (rows >> 8));
+    write((byte) (rows & 0xff));
+    write(IAC);write(SE);
+  }
+
+
   /**
    * Handle an incoming IAC SB <type> <bytes> IAC SE
    * @param type type of SB
blob - f1b93d1f8703d07bf6ebf59204d9c854fa5edc94
blob + c1f0734beaf8a5911f1508436d16774cc858a9dd
--- de/mud/terminal/SwingTerminal.java
+++ de/mud/terminal/SwingTerminal.java
@@ -655,7 +655,7 @@ public class SwingTerminal extends Component
 
     switch (resizeStrategy) {
       case RESIZE_SCREEN:
-        buffer.setScreenSize(w / charWidth, buffer.height = h / charHeight);
+        buffer.setScreenSize(w / charWidth, buffer.height = h / charHeight, true);
         break;
       case RESIZE_FONT:
         int height = h / buffer.height;
blob - 5158d81780c0df3e87f33eb143483feb77799c4e
blob + 9fdb3f4c43333a0bb2e290e8d1353489c90da81c
--- de/mud/terminal/VDUBuffer.java
+++ de/mud/terminal/VDUBuffer.java
@@ -95,7 +95,7 @@ public class VDUBuffer {
    */
   public VDUBuffer(int width, int height) {
     // set the display screen size
-    setScreenSize(width, height);
+    setScreenSize(width, height, false);
   }
 
   /**
@@ -690,7 +690,7 @@ public class VDUBuffer {
    * @param w of the screen
    * @param h of the screen
    */
-  public void setScreenSize(int w, int h) {
+  public void setScreenSize(int w, int h, boolean broadcast) {
     char cbuf[][];
     int abuf[][];
     int bsize = bufSize;
blob - c130419433419519ae4de2bc8ca10646ee37b6f0
blob + 193ad59a31fc43cb31fde0e2eedc82391cfa8fdd
--- de/mud/terminal/vt320.java
+++ de/mud/terminal/vt320.java
@@ -81,6 +81,22 @@ public abstract class vt320 extends VDUBuffer implemen
   protected void sendTelnetCommand(byte cmd) {
   }
 
+  /** 
+   * Sent the changed window size from the terminal to all listeners.
+   */
+  protected void setWindowSize(int c, int r) {
+    /* To be overridden by Terminal.java */
+  }
+
+  public void setScreenSize(int c, int r, boolean broadcast) {
+	System.err.println("setscreensize ("+c+","+r+","+broadcast+")");
+	super.setScreenSize(c,r,false);
+	if (broadcast) {
+	  setWindowSize(c, r); /* broadcast up */
+	}
+  }
+
+
   /**
    * Create a new vt320 terminal and intialize it with useful settings.
    */
@@ -1863,7 +1879,7 @@ public abstract class vt320 extends VDUBuffer implemen
             for (int i = 0; i <= DCEvar; i++) {
               switch (DCEvars[i]) {
                 case 3: /* 80 columns*/
-                  setScreenSize(80, getRows());
+                  setScreenSize(80, getRows(), true);
                   break;
                 case 4: /* scrolling mode, smooth */
                   break;
@@ -1905,7 +1921,7 @@ public abstract class vt320 extends VDUBuffer implemen
                   vt52mode = false;
                   break;
                 case 3: /* 132 columns*/
-                  setScreenSize(132, getRows());
+                  setScreenSize(132, getRows(), true);
                   break;
                 case 6: /* DECOM: move inside margins. */
                   moveoutsidemargins = false;
@@ -1972,7 +1988,7 @@ public abstract class vt320 extends VDUBuffer implemen
                   vt52mode = true;
                   break;
                 case 3: /* 80 columns*/
-                  setScreenSize(80, getRows());
+                  setScreenSize(80, getRows(), true);
                   break;
                 case 6: /* DECOM: move outside margins. */
                   moveoutsidemargins = true;