// here begins test code:

class Tokenizer {
    StringBuffer buf = new StringBuffer();

    Socket input_char = new CharSocket() {
	public void message(char c) {
	    if (Character.isWhitespace(c)) {
		if (buf.length() > 0)
		    output_token.message(buf.toString());
		buf.setLength(0);
	    }
	    else
		buf.append(c);
	}
    };

    Socket output_token;
}

class Printer {
    Socket input_string = new StringSocket() {
	public void message(String s) {
	    System.out.println(s);
	}
    };
}

class Test {
    public static void main(String[] args) {
	Tokenizer tokenizer = new Tokenizer();
	Printer printer = new Printer();
	tokenizer.output_token = printer.input_string;

	tokenizer.input_char.message('a');
	tokenizer.input_char.message('b');
	tokenizer.input_char.message('c');
	tokenizer.input_char.message(' ');
	tokenizer.input_char.message('c');
	tokenizer.input_char.message('a');
	tokenizer.input_char.message('b');
	tokenizer.input_char.message(' ');
	tokenizer.input_char.message('z');
    }
}
