/* HOMECLI.CMD                                                              */
/* Ez a program létesíti a kapcsolatot a munkahelyi SLIP szerverrel;        */ 
/* elvégzi a beléptetést (login) és a "route-olást".                        */
/* Másold be ezt a file-t a \TCPIP\BIN vagy az \MPTN\BIN könyvtárba az      */
/* otthoni gépen.                                                           */
/* Ezt a programot a HOMECLI.CFG file hívja meg.                            */

/* Konfiguráció: Állítsd be az alábbi REXX változókat:                      */

/* Soros port konfigurációja és a modem parancsok                           */
modeminit     = 'AT&F&C1&D2'       /* a modem inicializációja               */
modemsetparms = 'ATL2M' 	   /* alacsony hangerô                      */
modemreset    = 'ATZ'		   /* modem reszet parancs                  */
phonenumber   = '2784775'	   /* a hívni kívánt telefonszám            */

/* Internet címek, számítógép nevek                                         */
ipaddress  = '130.161.41.18'	 /* Az otthoni PC IP címe (sl0 interfész)   */
gateway    = '130.161.41.99'	 /* A munkahelyi PC IP címe (sl0 interfész) */
netmask    = '255.255.255.0'

/* Az alábbi paramétereket csak akkor kell megadni, ha az otthoni gép       */
/* (saját/belsô) hálózaton van.                                             */
desthostname = 'munka'	   /* Munkahelyi PC neve. A DNS-nek ismernie kell!  */
macaddress   = '00:c0:55:66:77:88'    /* Az otthoni PC MAC (adapter) címe.  */

/* A felhasználó adatai.                                                    */
username = 'xxxx'	    /* a login név a munkahelyi gépen               */
password = 'yyyy'	    /* a jelszó a munkahelyi gépen                  */

/* Ha az otthoni gép belsô hálózaton van, akkor cseréld ki az Ethercard='F' */
/* sort Ethercard='T'-re!                                                   */
Ethercard = 'F' 	    /* nincs otthoni hálózat                        */

/******  Az alábbi REXX programrészleten elvileg NEM kell módosítani! *******/

/* Define routines for errorhandling                                        */
signal on error name errorhandler
signal on failure name errorhandler
signal on halt name errorhandler

/* signal on novalue name errorhandler                                      */
signal on syntax name errorhandler
signal on notready name errorhandler

/* Load RexxUtility functions                                               */
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs

parse arg interface

/*--------------------------------------------------------------------------*/
/*                   Initialization and Main Script Code                    */
/*--------------------------------------------------------------------------*/

dialcmd = 'atdt'phonenumber
say 'A hívási parancs:' dialcmd
try=0

/* Set some definitions for easier COM strings                              */
cr='0d'x
crlf='0d0a'x

say ''
say 'OS/2 SLIP kliens program (interface' interface')'

goback:

/* Flush any stuff left over from previous COM activity                     */
call flush_receive

/* Modem inicializálás                                                      */
/* Lehet, hogy ezt a részt a modemedhez kell alakítani.                     */
call lineout , 'Reszetelem a modemet...'
call send modeminit || cr
call waitfor 'OK', 5 ; call flush_receive 'echo'
call send modemsetparms || cr
call waitfor 'OK', 5 ; call flush_receive 'echo'
 if RC = 1 then do
    call lineout , 'A modem nem reszetelôdik... Ujra próbálom...'
    call send '+++'
    call waitfor 'OK',3
    call send modemreset || cr
    call waitfor 'OK', 3
  end

tryagain:

/* Itt hívjuk a szervert                                                    */
try=try+1
call charout , try' Tárcsázok...   '

call send dialcmd || cr
call waitfor 'BUSY', 12

if(RC > 0) then do
   say 'Lehetséges kapcsolat' || cr
   signal GoOn
end
call SysSleep(3)
say cr
signal TryAgain

GoOn:
/* Handle login.  We wait for standard strings, and then flush anything     */
/* else to take care of trailing spaces, etc..                              */
/* call send cr                                                             */
call waitfor 'User:',70 ; call flush_receive 'echo'
 if RC = 1 then do
    call lineout , 'A szerver nem válaszol... Ujra próbálom'
    signal TryAgain
  end
call send username || cr
call waitfor 'Password:' ; call flush_receive 'echo'
call send password || cr
say ''

/* Now configure this machine for the appropriate address,                  */
'ifconfig sl0' ipaddress gateway 'netmask 'netmask
'route add default 'gateway' 1'

/* If Home machine is on a Home Ethernet, proxy arp handles packets going   */
/* to Work machine                                                          */
if Ethercard='T' then
   'arp -s 'desthostname macaddress 'pub'

say 'IP cím: 'ipaddress
say 'gateway: 'gateway

/* Kész a kapcsolat!                                                        */
exit 0

/*--------------------------------------------------------------------------*/

/* Errorhandler */
errorhandler:
say copies('=',79)
say 'HIBA T™RTÉNT:'
say '   Condition:' condition('c')
say '   Instruction:' condition('i')
say '   Description:' condition('d')
say '   Status:' condition('s')
say '   Line:' sigl
say copies('=',79)
return 0

/*--------------------------------------------------------------------------*/
/*                            send ( sendstring)                            */
/*..........................................................................*/
/*                                                                          */
/* Routine to send a character string off to the modem.                     */
/*                                                                          */
/*--------------------------------------------------------------------------*/

send:

   parse arg sendstring
   call slip_com_output interface , sendstring

   return


/*--------------------------------------------------------------------------*/
/*                    waitfor ( waitstring , [timeout] )                    */
/*..........................................................................*/
/*                                                                          */
/* Waits for the supplied string to show up in the COM input.  All input    */
/* from the time this function is called until the string shows up in the   */
/* input is accumulated in the "waitfor_buffer" variable.                   */
/*                                                                          */
/* If timeout is specified, it says how long to wait if data stops showing  */
/* up on the COM port (in seconds).                                         */
/*                                                                          */
/*--------------------------------------------------------------------------*/

waitfor:

   parse arg waitstring , timeout

   if timeout = '' then
     timeout = 5000    /* L O N G   delay if not specified */
   waitfor_buffer = '' ; done = -1; curpos = 1
   ORI_TIME=TIME('E')

   if (remain_buffer = 'REMAIN_BUFFER') then do
      remain_buffer = ''
   end

   do while (done = -1)
      if (remain_buffer \= '') then do
         line = remain_buffer
         remain_buffer = ''
       end
       else do
         line = slip_com_input(interface,,10)
      end
      waitfor_buffer = waitfor_buffer || line
      index = pos(waitstring,waitfor_buffer)
      if (index > 0) then do
         remain_buffer = substr(waitfor_buffer,index+length(waitstring))
         waitfor_buffer = delstr(waitfor_buffer,index+length(waitstring))
         done = 0
      end
      call charout , substr(waitfor_buffer,curpos)
      curpos = length(waitfor_buffer)+1
      if ((done \= 0) & (TIME('E')>timeout)) then do
        call lineout , ' WAITFOR: timed out '
        done = 1
       end
   end
   timeout=0
   RC=done
 return RC



/*--------------------------------------------------------------------------*/
/*                               readpass ()                                */
/*..........................................................................*/
/*                                                                          */
/* Routine used to read a password from the user without echoing the        */
/* password to the screen.                                                  */
/*                                                                          */
/*--------------------------------------------------------------------------*/

readpass:

  answer = ''
  do until key = cr
    key = slip_getch()
    if key \= cr then do
      answer = answer || key
    end
  end
  say ''
  return answer


/*--------------------------------------------------------------------------*/
/*                             flush_receive ()                             */
/*..........................................................................*/
/*                                                                          */
/* Routine to flush any pending characters to be read from the COM port.    */
/* Reads everything it can until nothing new shows up for 100ms, at which   */
/* point it returns.                                                        */
/*                                                                          */
/* The optional echo argument, if 1, says to echo flushed information.      */
/*                                                                          */
/*--------------------------------------------------------------------------*/

flush_receive:

   parse arg echo

   /* If echoing the flush - take care of waitfor remaining buffer */
   if (echo \= '') & (length(remain_buffer) > 0) then do
      call charout , remain_buffer
      remain_buffer = ''
   end

   /* Eat anything left in the modem or COM buffers */
   /* Stop when nothing new appears for 100ms.      */

   do until line = ''
     line = slip_com_input(interface,,100)
     if echo \= '' then
        call charout , line
   end

   return