#!/bin/sh
#Barry Kauler GPL 2007.
#called from pupdial.
#v405 july 2008: total overhaul.
#Translated for Russian by Pro.

MSGMDM3=""
if [ -h /dev/modem ];then
 MODEMDEV="`readlink /dev/modem`"
 MSGMDM3="
ПОРТ: /dev/modem подключен к ${MODEMDEV}."
fi

#Поиск всех загруженных модулей модема...
ALSAMODEMINFO="`cat /proc/asound/pcm 2>/dev/null | grep ' Modem :'`"
MODEMMODS="`lsmod | grep -E '^agrserial |^cdc_acm |^esscom |^Intel536 |^Intel537 |^ltserial |^martian_dev |^mwave |^pctel |^pl2303 |^slamr |^slusb |^snd_via82xx_modem |^snd_atiixp_modem |^snd_intel8x0m |^snd_hda_intel |^dgcusbdcp' | cut -f 1 -d ' '`"
[ "$ALSAMODEMINFO" = "" ] && MODEMMODS="`echo "$MODEMMODS" | grep -v '^snd_'`"
SNDMOD="`echo "$MODEMMODS" | grep '^snd_' | head -n 1`"
MODEMMODS="`echo "$MODEMMODS" | tr '\n' ' '`"
MMCNT=`echo "$MODEMMODS" | wc -w`

MSGMDM2=""
#if [ "$SNDMOD" != "" ];then
# MSGMDM2="
#Замечание, этот ${SNDMOD} является ALSA устройством поэтому он также поддерживает встроенный модем (port ttySL0)."
#fi

case $MMCNT in
 0)
#v412 Проверка драйверов модемов, которые не были определены автоматически.
 MODEM_MAP='Intel536 8086:1040 #v2.17 эта информация не включена в модуль
Intel537 e159:0001 #v2.17 эта информация не включена в модуль
mwave 1014:007d #отсутствует в modinfo.
agrserial 11c1:048c #v4.00 отсутствует в modinfo. Agere chip.
agrserial 11c1:048f #v4.00 отсутствует в modinfo. Agere chip.
'
 VENDEVS="`cat /proc/bus/usb/devices | grep '^P: ' | tr -s ' ' | tr '=' ' ' | cut -f 3,5 -d ' ' | tr ' ' ':'`"
 [ "$VENDEVS" != "" ] && VENDEVS="$VENDEVS
"
 VENDEVS="$VENDEVS`lspci | cut -f 4 -d ' '`"
 MODULE="`echo "$MODEM_MAP" | grep -E "$VENDEVS" | head -n 1 | cut -f 1 -d ' '`"
 [ "$MODULE" != "" -a "`lsmod | grep -e "^$MODULE "`" != "" ] && MODULE=""
 if [ "$MODULE" != "" ];then
  MSGMDM1="ВНИМАНИЕ: неопознанный модем, поддерживаемый модулем  '$MODULE', может быть установлен и подключен. Для его использования выберите Меню > Система > BootManager и добавьте новый модуль $MODULE."
 else
#v412 end
  MSGMDM1="Печально, Puppy ничего не нашел при загрузке. Проверьте, включен ли модем. Если включен, то он, видимо, не поддерживается в Puppy. Жаль, но Вам придётся сменить модем -- старые модемы для последовательных портов предпочтительнее! Подойдут и некоторые USB модемы."
 fi #v412
 ;;
 1)
  MSGMDM1="Puppy обнаружил модем при запуске и загрузил для него драйвер:
${MODEMMODS}${MSGMDM2}${MSGMDM3}"
 ;;
 *)
  MSGMDM1="Puppy обнаружил более одного модема при запуске и загрузил следующие драйверы:
${MODEMMODS}${MSGMDM2}${MSGMDM3}"
 ;;
esac



export MAINDIALOG="
<window title=\"PupDial - определение модема\" icon-name=\"gtk-connect\">
 <vbox>

  <hbox>
   <text  use-markup=\"true\"><label>\"<b>Нажмите на кнопку для запуска 'wvdialconf' - программы автоматического поиска и настройки модема для использования в PupDial. Она создаст или обновит файл /etc/wvdial.conf и установит ссылку /dev/modem на нужный порт модема:</b>\"</label></text>
   <button>
    <label>ОПРЕДЕЛИТЬ</label>
    <action type=\"exit\">SETUP</action>
   </button>
  </hbox>
 
 <frame Ручная настройка>
 
  <text><label>Можно выполнить ручную проверку и настройку модема...</label></text>
 
  <frame Модем для последовательного порта>
  <hbox>
   <text><label>Нажмите соответствующую кнопку для проверки внешнего модема для последовательного порта или внутреннего ISA модема (а иногда и PCI). Замечание: Порт 'ttyS0' обычно является аналогом 'com1' в DOS/Windows. Он наиболее часто используется, поэтому убедитесь, что к нему не подключено другое устройство (например, мышь). В случае успешной проверки будет настроена ссылка /dev/modem и записаны базовые настройки в файл /etc/wvdial.conf. (Если модемы не обнаружены при старте Puppy, можно нажать кнопку ОПРЕДЕЛИТЬ)</label></text>
   <vbox>
    <button>
     <label>ttyS0</label>
     <action>/usr/sbin/modemtest ttyS0 &</action>
     <action type=\"exit\">TTYSN</action>
    </button>
    <button>
     <label>ttyS1</label>
     <action>/usr/sbin/modemtest ttyS1 &</action>
     <action type=\"exit\">TTYSN</action>
    </button>
    <button>
     <label>ttyS2</label>
     <action>/usr/sbin/modemtest ttyS2 &</action>
     <action type=\"exit\">TTYSN</action>
    </button>
    <button>
     <label>ttyS3</label>
     <action>/usr/sbin/modemtest ttyS3 &</action>
     <action type=\"exit\">TTYSN</action>
    </button>
    <button>
     <label>ttyS4</label>
     <action>/usr/sbin/modemtest ttyS4 &</action>
     <action type=\"exit\">TTYSN</action>
    </button>
   </vbox>
  </hbox>
  </frame>
  
  <frame Автоматическое определение>
   <hbox>
    <text><label>\"Большинство модемов определяются Puppy при запуске (но они должны быть включены и подключены).
     ${MSGMDM1}\"</label></text>
    
   <vbox>
   <button>
    <label>ПОМОЩЬ</label>
    <action>/usr/sbin/modemprobe_help &</action>
   </button>
   </vbox>
   </hbox>
  </frame>
  
  <hbox>
   <text><label>Нажмите на эту кнопку для помещения драйвера модема в 'Чёрный' список. Замечание: Для повторного автоопределения модема нажмите кнопку ОЧИСТИТЬ и перезагрузите Puppy.</label></text>
   <vbox>
   <button>
    <label>'ЧЁРНЫЙ' СПИСОК</label>
    <action>/usr/sbin/bootmanager blacklist &</action>
   </button>
   </vbox>
  </hbox>
  <hbox>
   <text><label>Нажмите на эту кнопку для очистки текущих настроек модема. Будет удалена ссылка /dev/modem, что даст возможность заново определить модем при запуске и обновлена запись 'Modem' в файле /etc/wvdial.conf:</label></text>
   <vbox>
   <button>
    <label>ОЧИСТИТЬ</label>
    <action>/usr/sbin/modemprobe_erase</action>
   </button>
   </vbox>
  </hbox>
 
 </frame>
  
 </vbox>
</window>
"

#echo "$MAINDIALOG" >/tmp/MAINDIALOG
RETSTRING="`gtkdialog3 --program=MAINDIALOG`"
#echo "RETSTRING=$RETSTRING"

#v405 getting some weird stuff on stdout from gtkdialog3, fix...
#все строки имеют формат: variable="value" ...
xRETSTRING="`echo "$RETSTRING" | grep -E '^[a-zA-Z0-9]+=\".*\"$'`"

eval "$xRETSTRING"

[ "$EXIT" != "SETUP" ] && exit

yaf-splash -font "8x16" -outline 0 -margin 4 -bg orange -text "Пожалуйста ждите, поиск модемов..." &
X1PID=$!

rm -f /tmp/wvdial.conf 2>/dev/null

#v4.06 begin
DEVM=""
[ -f /etc/wvdial.conf ] && CONFDIR="etc" || CONFDIR="tmp"
wvdialconf /$CONFDIR/wvdial.conf >/tmp/logwvdialprobe 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ];then #найден модем и установлен в wvdial.conf
 if [ "`grep '/dev/modem' /$CONFDIR/wvdial.conf`" != "" ];then #modem = /dev/modem - substitute /dev/modem target
  echo "s/\/dev\/modem/\/dev\/`readlink /dev/modem`/g" > /tmp/sedscript
  sed -i -f /tmp/sedscript /$CONFDIR/wvdial.conf #replace device in-place
  sync
 elif [ "`grep '/dev/ttyS_' /$CONFDIR/wvdial.conf`" != "" ];then
  #Convert ttyS_ link name to actual node name (e.g., ttyS_536ep -> 536ep)
  TMPDEVM="`cat /$CONFDIR/wvdial.conf | tr -s ' ' | grep '^Modem = ' | head -n 1 | cut -f 3 -d ' ' | cut -f 3 -d '/'`" #file name
  if [ -h /dev/$TMPDEVM ];then #it's a link to the correct device node name
   echo "s/\/dev\/$TMPDEVM/\/dev\/`readlink /dev/$TMPDEVM`/g" > /tmp/sedscript
   sed -i -f /tmp/sedscript /$CONFDIR/wvdial.conf #replace device in-place
   sync
  fi
 fi
 DEVM="`cat /$CONFDIR/wvdial.conf | tr -s ' ' | grep '^Modem = ' | head -n 1 | cut -f 3 -d ' '`"
fi
#v4.06 end

kill $X1PID

if [ "$DEVM" != "" ];then #4.06 определение найденных модемов (and not /dev/modem)
 xDEVM="`echo -n "$DEVM" | cut -f 3,4 -d '/'`"
 ln -snf $xDEVM /dev/modem #v4.06

 if [ -f /tmp/wvdial.conf ];then
  grep -v '^;' /tmp/wvdial.conf > /etc/wvdial.conf
  rm -f /tmp/wvdial.conf
  echo 'Carrier Check = no
Dial Command = ATDT
Phone = MYISPPHONENUM
Username = MYUSERNAME
Password = MYPASSWORD

[Dialer isp2]
Phone = MY2ISPPHONENUM
Username = MY2USERNAME
Password = MY2PASSWORD' >> /etc/wvdial.conf
 fi
fi

sync
#leafpad /tmp/logwvdialprobe
exit $RETVAL #v4.06 Notify caller whether wvdialconf found a modem
