#!/bin/sh
# \
exec tclsh "$0"  ${1+"$@"}

# 
# Cisco 7960 command-line dialer
# v0.1
# 14th April 2005
# 
# Copyright 2005 Nabeel Jafferali.
# All rights reserved.
#
# Usage:
#	tclsh cisco.tcl [option(s)] number-to-be-dialed
#
# Options:
#	-v: Verbose (default: no)
#	-h: Use headset (default: no)
#	-<line-number>: Use line <line-number> (default: 1)
#
# Note:
#	Change "set ip" and "set password" lines below to reflect
#	correct IP and password of phone.

package require Expect

set ip <ip-address>
set password <password>
exp_log_user 0
set verbose 0
set headset 0

proc help {} {
	puts stdout "Cisco 7960 command-line dialer\nv0.1\n\nCopyright 2005 Nabeel Jafferali.\nAll rights reserved.\n\nUsage:\n\ttclsh cisco.tcl \[option(s)\] number-to-be-dialed\n\nOptions:\n\t-v: Verbose (default: no)\n\t-h: Use headset (default: no)\n\t-<line-number>: Use line <line-number> (default: 1)\n"
	exit
}
	
proc invalid {} {
	puts stdout "Usage: tclsh cisco.tcl \[options(s)\] number-to-be-dialed\nTry 'tclsh cisco.tcl -?' for more information.\n"
	exit
}

set line 1
while {[llength $argv]>0} {
	set flag [lindex $argv 0]
	if {0==[regexp "^-" $flag]} break
	set argv [lrange $argv 1 end]
	switch -- $flag \
	"-1" {
		set line 1
	} "-2" {
		set line 2
	} "-3" {
		set line 3
	} "-4" {
		set line 4
	} "-5" {
		set line 5
	} "-6" {
		set line 6
	} "-v" {
		set verbose 1
	} "-h" {
		set headset 1
	} "-?" {
		help
	} default {
		invalid
	}
}

if {0==[llength $argv]} invalid

if {$verbose} {
	exp_log_user 1
}
set timeout 60
spawn telnet $ip
expect "Password :"
sleep .5
send "$password\r"
expect {
	"Password :" {
		puts stdout "Invalid password"
		exit
	}		
	">" {
		sleep .5
		send "test open\r"
	}
}
expect ">"
sleep .5
send "test key line$line\r"
set y [split [lindex $argv 0] {}]
foreach digit $y {
	expect ">"
	sleep .5
	send "test key $digit\r"
}
expect ">"
sleep .5
send "test key soft4\r"
expect ">"
sleep .5
send "test key soft1\r"
expect ">"
sleep .5
send "test key soft3\r"
if {$headset} {
	expect ">"
	sleep .5
	send "test key headset\r"
}
expect ">"
sleep .5
send "test close\r"
expect ">"
sleep .5
send "exit\r"
close
wait