📄 ans
字号:
play_message $PASSWD_CH "#" fi fi fi $RM -f $TMP1 $RM -f $TMP2 }#-------------------------------------------------------------------------# remote_mode(void)#-------------------------------------------------------------------------remote_mode() { local N local ABORT local OPTIONS get_passwd $TMP1 if [ $? -eq 1 ]; then $DIFF -q $PASSWD $TMP1 > $NULL if [ $? -ne 0 ]; then play_message $WRONG_PASSWD "#" log "Wrong passwd: $($CAT $TMP1)" else OPTIONS="1234#bd" ABORT=false while [ $ABORT = false ]; do play_message $REMOTE_MENU $OPTIONS N=$? play_beep if [ $N -eq 0 ]; then # Listen for the command. $VMCP -c"$AT_SILENCE_DIS" -wOK $VMCP -c"$AT_VRX" -W"\cCONNECT\r\n" -e -t15 -x$OPTIONS N=$? $VMCP -c"\c\n" -wVCON $VMCP -c"$AT_SILENCE_ENA" -wOK fi case $N in 1) log "Retrieving messages" retrieve_messages ;; 2) play_message $GREETING "#" play_beep ;; 3) log "Changing greeting" change_greeting ;; 4) log "Changing password" change_password ;; *) log "Leaving remote menu" ABORT=true ;; esac done fi fi $RM -f $TMP1 }#-------------------------------------------------------------------------# retrieve_messages(void)#-------------------------------------------------------------------------retrieve_messages() { local I local N local LC local FNAME play_message $GET_MSGS_MNU "#" # Create a list of messages to play. $FIND $VOICEDIR -name "*.${EXT}" -type f -maxdepth 1 | $SORT > $TMP1 # Create a list of messages to delete. $CP $NULL $TMP2 I=1 LC=$($WC -l < $TMP1) while [ $I -le $LC ]; do FNAME=$($SED -n ${I},${I}p $TMP1) play_message $FNAME "649#" case $? in 0|1) # Next message. I=$[$I + 1] ;; 2) # Previous message. if [ $I -gt 1 ]; then I=$[$I - 1]; fi ;; 3) # Add filename to delete. $ECHO $FNAME >> $TMP2 play_message $MSG_DELETED "#" I=$[$I + 1] ;; *) # Exit from retrieving messages. I=$[$LC + 1] ;; esac # Signal end of message. play_beep done $RM -f $(cat $TMP2) $RM -f $TMP1 $RM -f $TMP2 }#-------------------------------------------------------------------------# change_greeting(void)#-------------------------------------------------------------------------change_greeting() { play_message $CH_GREETING "#" record_message $TMP1 "#9bqsd" case $? in 1) $MV -f $TMP1 $GREETING log "Greeting changed" ;; *) $RM -f $TMP1 log "Greeting unchanged" ;; esac }#-------------------------------------------------------------------------# fax_call(filename)# Receive a fax and store it in ${FAXDIR}/filename#-------------------------------------------------------------------------fax_call() { $VMCP -c"$AT_FAX" -wOK exec $EFAX -d $DEVICE -v chewmainr -x "#${LOCK}" -or -i "E0X3" -i "+FCLASS=2;+FCR=1;\Q1" -c "1,5,0,2,0,0,0,0" -l "+39 55 291568" -z "&F" -r ${FAXDIR}/${1} }#-------------------------------------------------------------------------# data_call(void)#-------------------------------------------------------------------------data_call() { $VMCP -c"$AT_DATA" -wOK $VMCP -c"$AT_A" -t60 -w"\cCONNECT" if [ $? -eq 0 ]; then exec $AGETTY -h -t60 38400,19200,9600,4800,2400,1200 $TTYS fi }#-------------------------------------------------------------------------# do_stop(void)#-------------------------------------------------------------------------do_stop() { if [ -f $STOPFILE ]; then log "Stopfile already exists: it will NOT answer" else if $TOUCH $STOPFILE; then log "Stopfile created: it will NOT answer" fi fi if [ -f $LOCK ]; then if $KILL $($CAT $LOCK); then log "$DEVICE unlocked" else log "Can't unlock $DEVICE" fi else log "It seems that $DEVICE is not locked" fi }#-------------------------------------------------------------------------# do_start(void)#-------------------------------------------------------------------------do_start() { if $RM -f $STOPFILE; then log "Stopfile removed: it WILL answer" fi }#-------------------------------------------------------------------------# do_play(void)#-------------------------------------------------------------------------do_play() { local FILE local WASSTOP if [ -f $STOPFILE ]; then WASSTOP=true; else WASSTOP=false; fi do_stop $ECHO "Playing $($LS ${VOICEDIR}/*.$EXT | $WC -w) message(s) in ${VOICEDIR}" $VMCP -c"$AT_VOICE" -wOK $VMCP -c"$AT_PLAYDEV" -wVCON for FILE in ${VOICEDIR}/*.${EXT}; do if [ -f $FILE ]; then $LS -lG $FILE | $CUT -b21- $VMCP -c"$AT_VTX" -wCONNECT $VMCP -k -e -q -t$TIMEOUT -i$FILE $VMCP -c"\c\020\003" -wVCON fi done $VMCP -c"$AT_H" -wOK if [ $WASSTOP = false ]; then do_start; fi }#-------------------------------------------------------------------------# do_delete(void)#-------------------------------------------------------------------------do_delete() { local R $ECHO -n "Remove all messages from ${VOICEDIR}? [N/y] " read R if [ "$R" = "y" -o "$R" = "Y" ]; then $RM ${VOICEDIR}/*.${EXT} fi }#-------------------------------------------------------------------------# do_now(void)#-------------------------------------------------------------------------do_now() { if [ -f $STOPFILE ]; then log "Can't answer now: ans is stopped" else if [ -f $LOCK ]; then $TOUCH $DOITNOW if $KILL $($CAT $LOCK); then log "$DEVICE unlocked" else log "Can't unlock $DEVICE" $RM -f $DOITNOW fi else log "Can't answer now: $DEVICE is not locked by ans" fi fi }#-------------------------------------------------------------------------# MAIN LOOP#-------------------------------------------------------------------------# Check for command line argument.if [ $# -gt 0 ]; then case $1 in now) do_now; exit ;; stop) do_stop; exit ;; start) do_start; exit ;; play) do_play; exit ;; delete) do_delete; exit ;; *) $ECHO "Answering machine script for voice modems." $ECHO -e "Usage: $0 [OPTION]" $ECHO -e "\tnow\t\tforce a running process to answer immediately" $ECHO -e "\tplay\t\tplay received messages" $ECHO -e "\tdelete\t\tdelete received messages" $ECHO -e "\tstop\t\tprevent a running process from answering the phone" $ECHO -e "\tstart\t\tresume a running process answering the phone" $ECHO -e "Without option, start waiting for a call." exit ;; esacfiif [ ! -d $VOICEDIR -o ! -w $VOICEDIR ]; then log "$VOICEDIR: No such directory or permission denied" exitfiif [ ! -d $FAXDIR -o ! -w $FAXDIR ]; then log "$FAXDIR: No such directory or permission denied" exitfiif [ -f $LOCK ]; then log "Device $DEVICE locked by PID $($CAT $LOCK)" exitfiumask $UMASKlog "Resetting the modem and waiting for $WAITRINGS rings"wait_rings $WAITRINGS# Generate a filename for the incoming message.MSGNAME=$($DATE +%y%m%d%H%M%S)# Answer the call.$VMCP -c"$AT_VOICE" -wOK$VMCP -c"$AT_SILENCE_ENA" -wOK$VMCP -c"$AT_A" -wVCON# Play the greeting only if needed.if [ -f $DOITNOW ]; then $RM -f $DOITNOW N=0else play_message $GREETING "c2e3#ht" N=$?fi# Discriminate call...case $N in 0) log "Receiving a Voice call" voice_call $MSGNAME ;; 1|2) log "Receiving a Fax" fax_call $MSGNAME ;; 3|4) log "Receiving a Data call" data_call ;; 5) log "Entering remote mode" remote_mode ;; 6|7) log "Answer aborted" ;;esac$VMCP -c"$AT_H" -wOK
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -