commit dc9d63ad580656174429e44368fa05c6f61fbd80 from: marcus date: Mon Oct 24 07:34:13 2005 UTC implemented window resizing and pushing to upstream 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;