c041f4dc4e46e014dc8bac0c1edad3caa3450508
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
;
9 import lejos
.hardware
.lcd
.TextLCD
;
10 import lejos
.utility
.Delay
;
12 public class LCDPrinter
{
13 public static final int PRINTDELAY
= 50;
15 private static class Message
{
19 public Message(String msg
, boolean nl
){
25 private static Deque
<Message
> buffer
= new LinkedList
<Message
>();
27 public static void startLCDPrinter(final TextLCD glcd
) {
28 new Thread(new Runnable(){
32 if (!buffer
.isEmpty()) {
33 Message c
= buffer
.remove();
34 if(c
.msg
.length() > glcd
.getTextWidth()){
35 buffer
.addFirst(new Message(c
.msg
.substring(glcd
.getTextWidth(), c
.msg
.length()), c
.nl
));
36 c
.msg
= c
.msg
.substring(0, glcd
.getTextWidth());
41 glcd
.clear(glcd
.getTextHeight()-1);
43 glcd
.drawString(c
.msg
, 0, glcd
.getTextHeight()-1);
45 Delay
.msDelay(PRINTDELAY
);
49 LCDPrinter
.print("LCDThread started");
52 public static void print(String s
){
56 public synchronized static void print(String s
, boolean nl
){
57 buffer
.addLast(new Message(s
, nl
));
60 public static PrintStream
getPrefixedPrintstream(final String prefix
, final TextLCD glcd
){
61 return new PrintStream(new OutputStream(){
62 private char[] line
= new char[glcd
.getTextWidth()];
63 private int index
= 0;
66 public void write(int b
) throws IOException
{
67 if(index
== line
.length
-prefix
.length() || b
== '\n'){
68 LCDPrinter
.print(prefix
+ String
.valueOf(line
, 0, index
));
71 line
[index
++] = (char)b
;