#!/usr/bin/perl
#	This is a very brief script that demonstrates send_slow(). This
#command is chiefly for talking to modems and the like where if you send
#it stuff too fast it can get mad at you.
#	Also demonstrated is how to talk to a bidirectional device
#handle.
#
#	This example has been changed in 1.05 so that it actually works. :-)

use Expect;

$device="/dev/modem" unless $device = shift(@ARGV);

# open the device
open(DEVICE,"+>$device") || die "Couldn't open $device, $!\n";

# Expectize it. note the \* which we do because we didn't use the OO
# method of opening the device.
$modem=Expect->exp_init(\*DEVICE);
# Let's watch the output. Once again, output isn't automatically
# watched since it was an initialized handlde and not a process.
$modem->log_stdout(1);

# Put it in raw mode w/ no echoing so it will operate as expected.
$modem->exp_stty('raw','-echo');

# Send it an ATZH0\r to reset its state.
print "Initializing modem\n";
$modem->send_slow(.5,"ATZH0\r");

# How about we look for an OK?
$modem->expect(30,'-re','^OK\r?$')|| warn "Never got OK from modem\n";
print "Modem initialized.\n";

# Now let's interact with it so the user can talk to it, dial it out,
# whatever. This is basically a poor man's term program.
# When you interact() with a handle it puts STDIN in raw mode so
# you are assured of interacting cleanly, no escape chars, etc.
# This is usually what you want. Here however it's nice to be able to
# escape from the session without doing any extra work. So let's make
# an escape character of ^W.
print "Beginning interaction, escape character is ^W.\n";
$modem->interact(\*STDIN,"\027");

# Done? Reset the modem, close the handle.
print $modem "+++";
sleep 3;
print $modem "ATZH0\r";
sleep 1;
# Grab any output ready on the handle, toss it.
$modem->expect(0);
$modem->hard_close();



