added support for copying moves
[fleet.git] / src / edu / berkeley / fleet / Term.java
1 package edu.berkeley.fleet;
2
3 import de.mud.telnet.*;
4 import de.mud.telnet.modules.*;
5 import de.mud.telnet.display.*;
6 import java.awt.*;
7 import java.awt.event.*;
8 import javax.swing.*;
9 import javax.swing.event.*;
10 import javax.swing.table.*;
11 import javax.swing.border.*;
12 import java.net.*;
13 import java.io.*;
14
15 public class Term extends vt320 implements ComponentListener {
16     private final InputStream is;
17     private final OutputStream os;
18
19     public Term(InputStream is, OutputStream os) { this.is = is; this.os = os; addComponentListener(this); }
20
21     public void componentResized(ComponentEvent e) { repaint(); }
22     public void componentMoved(ComponentEvent e) { }
23     public void componentHidden(ComponentEvent e) { }
24     public void componentShown(ComponentEvent e) { }
25
26     private class ListenerThread extends Thread {
27         public void run() {
28             try {
29                 byte[] buf = new byte[1024];
30                 while(true) {
31                     int numread = is.read(buf, 0, buf.length);
32                     if (numread==-1) break;
33                     if (numread==0) continue;
34                     Term.this.putString(new String(buf, 0, numread, "US-ASCII"));
35                 }
36             } catch (Exception e) {
37                 e.printStackTrace();
38             }
39         }
40     }
41     boolean listenerStarted = false;
42     public void paint(Graphics g) {
43         if (!listenerStarted) { listenerStarted = true; new ListenerThread().start(); }
44         super.paint(g);
45     }
46     public synchronized void putString(String s) { super.putString(s); }
47     public synchronized boolean send(String s) {
48         try {
49             os.write(s.getBytes("US-ASCII"));
50             os.flush();
51             return true;
52         } catch (Exception e) {
53             e.printStackTrace();
54         }
55         return false;
56     }
57 }