1#!perl -w
2#
3# Simple command-line terminal emulator
4# by Andrej Mikus
5# with small modifications by Bill Birthisel
6# no local echo at either end
7#
8
9use lib './blib/lib','../blib/lib'; # can run from here or distribution base
10use Device::SerialPort 0.05;
11use Term::ReadKey;
12
13use strict;
14
15my $file = "/dev/ttyS0";
16my $ob = Device::SerialPort->new ($file) or die "Can't start $file\n";
17    # next test will die at runtime unless $ob
18
19my $c;
20my $p1 = "Simple Terminal Emulator\n";
21$p1 .= "Type CAPITAL Q to quit\n\n";
22print $p1;
23$p1 =~ s/\n/\r\n/ogs;
24$ob->write ($p1);
25
26for ( ;; ) {
27    if ( $c = $ob -> input ) {
28	$c =~ s/\r/\n/ogs;
29	print $c;
30	last if $c =~ /Q/;
31	$c =~ s/\n/\r\n/ogs;
32        $ob -> write ( $c );
33    }
34
35    if ( defined ( $c = ReadKey ( -1 ) ) ) {
36	$c =~ s/\r/\n/ogs;
37	$c =~ s/\n/\r\n/ogs;
38        $ob -> write ( $c );
39	last if $c eq 'Q';
40    }
41    select undef, undef, undef, 0.04; # 25/sec.
42}
43
44$ob -> close or die "Close failed: $!\n";
45undef $ob;  # closes port AND frees memory in perl
46