Implemented AvoidObject behaviour and TextLCD
[des2015.git] / mart / ev3 / ex2 / nl / ru / des / LCDPrinter.java
1 package nl.ru.des;
2
3 import java.io.IOException;
4 import java.io.OutputStream;
5 import java.io.PrintStream;
6 import java.util.Deque;
7 import java.util.LinkedList;
8
9 import lejos.hardware.lcd.TextLCD;
10 import lejos.utility.Delay;
11
12 public class LCDPrinter{
13 public static final int PRINTDELAY = 50;
14
15 private static Deque<String> buffer = new LinkedList<String>();
16
17 public static void startLCDPrinter(final TextLCD glcd) {
18 new Thread(new Runnable(){
19 @Override
20 public void run() {
21 while (true) {
22 if (!buffer.isEmpty()) {
23 String c = buffer.remove();
24 if(c.length() > glcd.getTextWidth()){
25 buffer.addFirst(c.substring(glcd.getTextWidth(), c.length()));
26 c = c.substring(0, glcd.getTextWidth());
27 }
28 glcd.scroll();
29 glcd.drawString(c, 0, glcd.getTextHeight()-1);
30 }
31 Delay.msDelay(PRINTDELAY);
32 }
33 }
34 }).start();
35 LCDPrinter.print("LCDThread started");
36 }
37
38 public static void print(String s){
39 buffer.addLast(s);
40 }
41
42 public static PrintStream getPrefixedPrintstream(final String prefix, final TextLCD glcd){
43 return new PrintStream(new OutputStream(){
44 private char[] line = new char[glcd.getTextWidth()];
45 private int index = 0;
46
47 @Override
48 public void write(int b) throws IOException {
49 if(index == line.length-prefix.length() || b == '\n'){
50 LCDPrinter.print(prefix + String.valueOf(line, 0, index));
51 index = 0;
52 } else {
53 line[index++] = (char)b;
54 }
55 }
56 });
57 }
58 }