From cc37b87508c91b5d4f21fd4bbc298104ae7de1dc Mon Sep 17 00:00:00 2001 From: short <> Date: Tue, 27 Nov 2001 22:01:30 +0000 Subject: [PATCH] :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Tue Nov 27 22:58 CET 2001 --- utils/sendsms | 458 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 458 insertions(+) create mode 100644 utils/sendsms diff --git a/utils/sendsms b/utils/sendsms new file mode 100644 index 0000000..d38dc95 --- /dev/null +++ b/utils/sendsms @@ -0,0 +1,458 @@ +#!/bin/bash +############################################################################### +# +# SENDSMS -- Script to send sms by 'gnokii' +# Author : Gabriele Zappi - Rimini +# History: +# feb 17, 2001 Script created (v1.0) +############################################################################### +# $Id$ +############################################################################### +############################################################################### +# PROGNAME=`basename $0` + +# var settings. + +PROGNAME=${0##*/} +VERSION="1.02" +GNOKII=gnokii +PID=$$ +SMSDIR=~/tmp/sms +TMP=~/tmp/SMStmp.$PID +BACKTITLE="SENDSMS V$VERSION" +AUTHOR="Gabriele Zappi - Rimini " + +help() { +echo "$PROGNAME: $BACKTITLE - A gnokii interface for sending SMS." +echo "Written by $AUTHOR" + +echo -e "\ +\n\ +Usage: $PROGNAME [OPTION]...\n\ +\n\ +Examples:\n\ + $PROGNAME # simply run $PROGNAME in standard mode\n\ + $PROGNAME --simulate # Simulates. doesn't really send sms (for debug)\n\ + echo \"Hello Beauty ;-)\" | $PROGNAME --smsset\n\ + # Preset \"Hello Beauty ;-)\" as SMS message.\n\ + $PROGNAME --smsset < mymessage.txt\n\ + # Preset contents of file mymessage.txt \n\ + as SMS message.\n\ + $PROGNAME --version # Display version, author and quits.\n\ +\n\ +NOTE:\n\ +If you require to pickup number from phone's memory (really from SIM card),\n\ +for the first time, it anyway reads phonebook from your cellular phone. \n\ +(It may take a while... please, be patient ;-) \n\ +\n\ +Available options:\n\ + --debug, -D May bother with more debugging messages ;-)\n\ + For debugging purpose.\n\ + --simul[ate], -S Simulation mode. Doesn't really send SMS by phone. \n\ + Only simulates. For debugging purpose.\n\ + --forcememread, -F Forces $PROGNAME to read phonebook from SIM card,\n\ + and to parse the generated file in order to update\n\ + the numbers' list (useful only if required to pickup\n\ + number from the phone's memory). see NOTE.\n\ + --skipgnokiicheck, -K Skip the test of the presence of binary 'gnokii'.\n\ + (It must be somewhere in your \$PATH). It allows you\n\ + to try this script program, even if you don't have\n\ + 'gnokii' already. ;)\n\ + --smsset, --setsms Allows you to preset a SMS message from STDIN. (pipe\n\ + or input redirection).\n\ + This message will be proposed on the 'SMS message'\n\ + field during the program input cycle.\n\ + --help, -h, /h display this help and exit\n\ + --version, -V output version information and exit" +echo +exit 0 +} + +acex() +{ + rm -rf $TMP >/dev/null 2>&1 + clear + exit $1 +} + +parse_stdin() { + # Switch initialization + SW_DEBUG=no + SW_SIMUL=no + SW_FORCEMREAD=no + SW_SKIPGNOKITST=no + SW_PRESETSMS=no + PRESETSMS="" + + while [ -n "$1" ] + do + case "$1" in + --help|-h|/h) + help + ;; + --version|-V) + echo + echo "$BACKTITLE - A gnokii interface for sending SMS." + echo "Written by $AUTHOR" + echo + exit 0 + ;; + --simul*|-S) + SW_SIMUL=yes + ;; + --debug*|-D) + SW_DEBUG=yes + SW_SIMUL=yes + ;; + --forcememread|-F) + SW_FORCEMREAD=yes + ;; + --skipgnokiicheck|-K) + SW_SKIPGNOKITST=yes + ;; + --smsset|--msgset|--setsms) + SW_PRESETSMS=yes + # will read from stdin + echo "reading sms from stdin .." + PRESETSMS=`cat` + ;; + *) + echo "$PROGNAME: Invalid parameter: " + help + ;; + esac + shift + done +} + +sure_to_quit() { + dialog --backtitle "$BACKTITLE" \ + --yesno "Really sure to quit? " 6 50 + if [ $? -eq 0 ]; then + acex 0 + fi +} + +SMS_phoneread() { +dialog --backtitle "$BACKTITLE" --infobox "Reading phonebook by phone's SIM\n Please wait" 4 40 +$GNOKII --getmemory SM 1 130 > $SMSDIR/.SMlist.temp +} + +SMS_choicefrommem() { + # read from phonebook. + if [ "$SW_FORCEMREAD" = "yes" ] ; then + readsim=1 + elif [ -s $SMSDIR/.SMlist.sim ]; then + dialog --backtitle "INSERT NUMBER(s).." \ + --yesno "A SIM phonebook file is already present. \ + Do you want to read phone memory anyway?" 8 60 + if [ $? -eq 0 ] ; then + readsim=1 + else + readsim=0 + fi + else + readsim=1 + fi + + ERROR=0 + if [ $readsim -eq 1 ] ; then + SMS_phoneread + if [ $? -ne 0 ] ; then + dialog --backtitle "INSERT NUMBER(s).." \ + --msgbox "ERROR during reading memory from your phone... \ + Insert manually destination number." 8 60 + ERROR=1 + else + mv -f $SMSDIR/.SMlist.temp $SMSDIR/.SMlist.sim + fi + fi + + if [ $ERROR -eq 0 ]; then + # Parsing sim file... + if [ ! -s $SMSDIR/.SMlist.chklst -o ! -s $SMSDIR/.SMlist.choice \ + -o $readsim -eq 1 ] ; then + > $SMSDIR/.SMlist.menu + > $SMSDIR/.SMlist.chklst + > $SMSDIR/.SMlist.choice + totrows=`cat $SMSDIR/.SMlist.sim | wc -l` + rownow=0 + (while read riga + do + rownow=`expr $rownow + 1` + perc=`expr $rownow \* 100 / $totrows` + pos=`echo $riga | cut -f4 -d";"` + name=`echo $riga | cut -f1 -d";"` + num=`echo $riga | cut -f2 -d";"` + if [ -n "$pos" -a -n "$num" ] ; then + echo -e "$pos \"$name - $num\"" >> $SMSDIR/.SMlist.menu + echo -e "$pos \"$name - $num\" off" >> $SMSDIR/.SMlist.chklst + echo "$pos;$num" >> $SMSDIR/.SMlist.choice + fi + echo $perc + done < $SMSDIR/.SMlist.sim) | dialog \ + --gauge "Parsing phonebook file..." 12 70 0 + fi + + chkok=0 + option=0 + while [ $chkok -eq 0 ] + do + eval dialog --backtitle \"SENDSM CKECKLIST\" \ + --checklist \"Check your MEMORY number\(s\).\ + \\nPress ESC key \for options..... \" \ + 16 60 9 \ + `cat $SMSDIR/.SMlist.chklst` 2> $TMP/rspTEMP02 + option=$? + if [ $option -eq 255 ] ; then + dialog --backtitle "SENDSM CKECKLIST" --menu \ + "Options sub-menus for Phonebook choise list:" \ + 10 50 4 \ + "1" "Sort by Memory Pos" \ + "2" "Sort by Names" \ + "9" "Quit $PROGNAME" 2> $TMP/rspTEMP04 + if [ $? -eq 0 ]; then + sorttype=`cat $TMP/rspTEMP04` + case $sorttype in + 1) sort -n $SMSDIR/.SMlist.chklst > $TMP/.SMlist.tmp + mv -f $TMP/.SMlist.tmp $SMSDIR/.SMlist.chklst + ;; + 2) sort +1 $SMSDIR/.SMlist.chklst > $TMP/.SMlist.tmp + mv -f $TMP/.SMlist.tmp $SMSDIR/.SMlist.chklst + ;; + 9) sure_to_quit + ;; + esac + fi + else + chkok=1 + fi + done + + if [ $? -eq 0 ] ; then + for val in `cat $TMP/rspTEMP02` + do + tok1=`eval echo $val` + tok2=`grep "^$tok1;" $SMSDIR/.SMlist.choice` + tok3=`echo $tok2 | cut -f2 -d";"` + if [ -z "$NUMBERS" ] ; then + NUMBERS="$tok3" + else + NUMBERS="$NUMBERS $tok3" + fi + done + fi + fi +} + +########################################################################### +########################################################################### +# MAIN PROCEDURE # +########################################################################### +########################################################################### + +parse_stdin $* + +# This is the 'help' test... +# if [ "$1" = "--help" -o "$1" = "/h" ] ; then +# help +# fi + +if ! type -all "dialog" >/dev/null 2>&1 ; then +echo +echo "${PROGNAME}: error:" +echo "Can't find 'dialog', i can't run without 'dialog' on your system." +echo "You can get a compiled elf version of 'dialog' from here." +echo "http://www.tux.org/pub/people/kent-robotti/index.html" +echo "ftp://ftp.tux.org/pub/people/kent-robotti 'dialog-0.9a-15.elf.tar.gz'" +echo +exit 1 +fi + +if [ $SW_SKIPGNOKITST = no ] ; then + if ! type -all "$GNOKII" >/dev/null 2>&1 ; then + echo + echo "${PROGNAME}: error:" + echo "Can't find 'gnokii'. This script needs 'gnokii' in order to work." + echo "You can get a version of 'gnokii' from following links:" + echo "GNOKII: http://multivac.fatburen.org/gnokii/ , http://www.gnokii.org/" + echo + echo " Pavel Janik (who is to thank for a vast part of the 6110 development) " + echo "also keeps an ftp archive of some recent things." + echo " " + echo "Source code and pre-compiled binaries for gnokii are available from " + echo "a number of sites" + echo + echo "ftp.gnokii.org located in California, USA" + echo "linuxcare.com.au located in Canberra, Australia" + echo "multivac.fatburen.org located in Stockholm, Sweden " + echo + echo "Pre release versions are kept here, maintained by Pawel Kot" + echo "urtica.linuxnews.pl located in Warsaw, Poland" + echo + echo "MYGNOKII (can handle other newer Nokia models...)" + echo "--------" + echo "Marcin Wiacek -> mailto:marcin-wiacek@topnet.pl" + echo "http://marcin-wiacek.topnet.pl (http://www.fkn.pl/marcinw) -> netmonitor," + echo "firmware, mygnokii (GSM & Nokia)" + echo "http://grumble.zereau.com/gnokii/ &" + echo "http://www.mds.mdh.se/~cel95eig/mygnokii/ -> mygnokii mirrors" + echo + exit 1 + fi +fi + +if [ ! -d ~/tmp ]; then +mkdir ~/tmp +chmod 755 ~/tmp +fi + +if [ ! -d $SMSDIR ]; then +mkdir -p $SMSDIR +chmod 755 $SMSDIR +fi + +if [ -d $TMP ]; then + rm -rf $TMP +fi +mkdir -p $TMP +chmod 700 $TMP + + +echo "$BACKTITLE" > $TMP/txtTEMP01 +echo >> $TMP/txtTEMP01 +echo "Written by Gabriele Zappi " >> $TMP/txtTEMP01 +echo >> $TMP/txtTEMP01 +echo "This script is a front-end to type SMS messages directly" >> $TMP/txtTEMP01 +echo "from your computer and send them using gnokii through" >> $TMP/txtTEMP01 +echo "your cellular phone connected to your computer." >> $TMP/txtTEMP01 +echo >> $TMP/txtTEMP01 +echo "Press [Enter] to continue with SENDSMS." >> $TMP/txtTEMP01 + +dialog --backtitle "$BACKTITLE" --textbox "$TMP/txtTEMP01" 14 70 +TURN=0 + +while true +do + echo "Please, enter in the box below, your SMS message." > $TMP/txtTEMP$$ + echo "Remember that it cannot be longer than 160 chars." >> $TMP/txtTEMP$$ + echo " " >> $TMP/txtTEMP$$ + echo "Press [ESC] or [CANCEL] to quit the program. " >> $TMP/txtTEMP$$ + + len=999 + if [ $TURN -eq 0 ]; then + if [ "$SW_PRESETSMS" = "yes" ]; then + echo "$PRESETSMS" > $TMP/rspTEMP01 + else + > $TMP/rspTEMP01 + fi + fi + while test "$len" -le 0 -o "$len" -gt 160 + do + dialog --backtitle "INSERT SMS ....." \ + --inputbox "`cat $TMP/txtTEMP$$`" 10 70 "`cat $TMP/rspTEMP01`" \ + 2> $TMP/rspTEMP01 + if [ $? -ne 0 ] ; then + sure_to_quit + fi + len=`cat $TMP/rspTEMP01 | wc -c ` + + if [ $len -le 0 -o $len -gt 160 ] ; then + echo "Invalid SMS: It must be < 160 chars and > 0 long.." > $TMP/txtTEMP02 + dialog --textbox "$TMP/txtTEMP02" 6 70 + fi + done + + NUMBERS="" + okcycle=0 + while [ "$NUMBERS" = "" -o "$okcycle" -eq 0 ] + do + dialog --backtitle "INSERT NUMBER(s).." \ + --yesno "would you like to pick up number(s) \ + from your phone memory" 8 60 + + + if [ $? -eq 0 ] ; then # Yes, gimme num from phonebook. + SMS_choicefrommem + fi + + # Manual telephone number completion or insertion. + echo "Please, insert/modify in the box below, the NUMBER(S)" > $TMP/txtTEMP$$ + echo "where you want to send the message to. " >> $TMP/txtTEMP$$ + echo "(Multiple numbers must be separated by a space.) " >> $TMP/txtTEMP$$ + echo "Press [ESC] or [CANCEL] to quit the program. " >> $TMP/txtTEMP$$ + echo " " >> $TMP/txtTEMP$$ + echo "OUTGOING MESSAGE: " >> $TMP/txtTEMP$$ + echo -n " " + cat $TMP/rspTEMP01 | cut -c1-60 >> $TMP/txtTEMP$$ + cat $TMP/rspTEMP01 | cut -c61-120 >> $TMP/txtTEMP$$ + cat $TMP/rspTEMP01 | cut -c121-160 >> $TMP/txtTEMP$$ + + okcycle=1 + dialog --backtitle "INSERT NUMBER(s).." \ + --inputbox "`cat $TMP/txtTEMP$$`" \ + 16 70 "$NUMBERS" 2> $TMP/rspTEMP03 + + if [ $? -ne 0 ] ; then + sure_to_quit + okcycle=0 + else + NUMBERS=`cat $TMP/rspTEMP03` + if [ "$NUMBERS" = "" ] ; then + dialog --backtitle "INSERT NUMBER(s).." \ + --infobox "Number cannot be empty.\n Try again.." 4 28 + sleep 2 + okcycle=0 + fi + fi + done + + # Last confirmation before sending messages.... + + okcycle=0 + while [ $okcycle -eq 0 ] + do + echo "Ok. If you confirm the operation, the the SMS" > $TMP/txtTEMP$$ + echo "is going to be sent to the selected number(s)." >> $TMP/txtTEMP$$ + echo >> $TMP/txtTEMP$$ + echo "Press [ESC] to quit the program. " >> $TMP/txtTEMP$$ + echo "Press [CANCEL] to return to SMS input. " >> $TMP/txtTEMP$$ + dialog --backtitle "$BACKTITLE" \ + --yesno "`cat $TMP/txtTEMP$$`" 9 60 + case $? in + 0) + okcycle=1;; + 1) + TURN=`expr $TURN + 1` + continue 2;; + 255) + sure_to_quit ;; + esac + done + TURN=`expr $TURN + 1` + + for num in $NUMBERS + do + # echo "Sending sms to number $num ... " + dialog --backtitle "$BACKTITLE" --infobox "Sending sms to number $num ...\n Please wait" 4 45 + if [ "$SW_SIMUL" = "yes" ] ; then + sleep 2 + else + $GNOKII --sendsms $num < $TMP/rspTEMP01 > /dev/null 2>&1 + fi + if [ $? -eq 0 ] ; then + dialog --backtitle "$BACKTITLE" \ + --infobox "Message correctly sent to number $num !" 3 55 + else + dialog --backtitle "$BACKTITLE" \ + --infobox "Sent Failed to num $num! Sorry!" 3 55 + fi + sleep 2 + done + +done + + +acex 0 +# zap - fin qui + -- 1.8.3.1