This commit was generated by cvs2svn to compensate for changes in r33, which
[gnokii.git] / utils / sendsms
diff --git a/utils/sendsms b/utils/sendsms
new file mode 100644 (file)
index 0000000..d38dc95
--- /dev/null
@@ -0,0 +1,458 @@
+#!/bin/bash 
+###############################################################################
+#
+#      SENDSMS   --  Script to send sms by 'gnokii'
+#   Author : Gabriele Zappi - Rimini <gzappi@inwind.it>
+#      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 <gzappi@inwind.it>"
+
+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 <gzappi@inwind.it> " >> $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
+