#38 notify backend of lost connection, version bump to 0.3.1
[fanfix.git] / src / jexer / backend / ECMA48Terminal.java
index 518024c5d0099c07d22f5489cb7a69c1ba7a7106..d10437c1f49dd377bce18ac786b9ecfae3555357 100644 (file)
@@ -50,10 +50,12 @@ import jexer.TImage;
 import jexer.bits.Cell;
 import jexer.bits.CellAttributes;
 import jexer.bits.Color;
+import jexer.event.TCommandEvent;
 import jexer.event.TInputEvent;
 import jexer.event.TKeypressEvent;
 import jexer.event.TMouseEvent;
 import jexer.event.TResizeEvent;
+import static jexer.TCommand.*;
 import static jexer.TKeypress.*;
 
 /**
@@ -85,6 +87,8 @@ public class ECMA48Terminal extends LogicalScreen
      * 1024.
      */
     private static final int MAX_COLOR_REGISTERS = 1024;
+    // Black-and-white is possible too.
+    // private static final int MAX_COLOR_REGISTERS = 2;
 
     // ------------------------------------------------------------------------
     // Variables --------------------------------------------------------------
@@ -342,6 +346,16 @@ public class ECMA48Terminal extends LogicalScreen
             int green = (color >>>  8) & 0xFF;
             int blue  =  color         & 0xFF;
 
+            if (MAX_COLOR_REGISTERS == 2) {
+                if (((red * red) + (green * green) + (blue * blue)) < 35568) {
+                    // Black
+                    return 0;
+                }
+                // White
+                return 1;
+            }
+
+
             rgbToHsl(red, green, blue, hsl);
             int hue = hsl[0];
             int sat = hsl[1];
@@ -662,6 +676,14 @@ public class ECMA48Terminal extends LogicalScreen
             // map the BufferedImage colors to their nearest neighbor in RGB
             // space.
 
+            if (MAX_COLOR_REGISTERS == 2) {
+                rgbColors.add(0);
+                rgbColors.add(0xFFFFFF);
+                rgbSortedIndex[0] = 0;
+                rgbSortedIndex[1] = 1;
+                return;
+            }
+
             // We build a palette using the Hue-Saturation-Luminence model,
             // with 5+ bits for Hue, 2+ bits for Saturation, and 1+ bit for
             // Luminance.  We convert these colors to 24-bit RGB, sort them
@@ -1435,6 +1457,11 @@ public class ECMA48Terminal extends LogicalScreen
                         events.clear();
                     }
 
+                    if (output.checkError()) {
+                        // This is EOF.
+                        done = true;
+                    }
+
                     // Wait 20 millis for more data
                     Thread.sleep(20);
                 }
@@ -1446,6 +1473,17 @@ public class ECMA48Terminal extends LogicalScreen
                 done = true;
             }
         } // while ((done == false) && (stopReaderThread == false))
+
+        // Pass an event up to TApplication to tell it this Backend is done.
+        synchronized (eventQueue) {
+            eventQueue.add(new TCommandEvent(cmBackendDisconnect));
+        }
+        if (listener != null) {
+            synchronized (listener) {
+                listener.notifyAll();
+            }
+        }
+
         // System.err.println("*** run() exiting..."); System.err.flush();
     }