home *** CD-ROM | disk | FTP | other *** search
- /* SLIPStart.rexx ver 1.3 Feb. 3, 1995 by Travis Pascoe */
- /* pasc8891@raven.csrv.uidaho.edu */
- /* */
- /* SLIPStart is an ARexx script used to connect to a host with */
- /* dynamic slip IP assignment and initialize the AmiTCP stack. */
- /* The script is based on a script by Bradley Tinder with several */
- /* blatant errors and bugs removed (sorry Bradley). [Bradley was */
- /* inspired by Dave Bolen's REXX/2 SLIPUP.CMD for IBM OS/2.] */
- /* This script is intended mainly as a model and an example for */
- /* automating SLIP dialup. */
- /* */
- /* Requirements: ARexx (obviously) */
- /* rexxserdev.library ver 5.02+ (see Aminet) */
- /* by Joseph M. Stivaletta */
- /* AmiTCP ver 3.0b+ */
- /* */
- /* Usage: From a cli, type: rx slipstart */
- /* */
- /* Warning: You WILL need to modify the script in several */
- /* places to suit your host dialup terminal. */
- /* Follow the comments below for assistance. */
- /* The example below works with my university's */
- /* Xylogics terminal server. */
-
-
- if ~show('L',"rexxsupport.library") then
- if ~addlib('rexxsupport.library', 0, -30, 0) then exit 41
- if ~show('L', "rexxserdev.library") then
- if ~addlib( 'rexxserdev.library', 0, -30, 0) then exit 42
-
- signal on break_c
- cr = '0d'x
- initstr1 = 'ATZ'||cr /* modem init, change as desired */
- initstr2 = 'AT&D0'||cr /* set ignore carrier detect !! */
- dialstr = 'atdt555-1234'||cr /* number to dial */
- slip_cmd = '30'||cr /* selection number for SLIP */
- username = 'myname'||cr /* change to your account name */
- passwd = 'mypassword'||cr /* change to your account passwd */
-
- dh = SerOpen('serial.device', 0)
- if (dh == 0) then do; say 'Cannot open serial.device'; exit 43; end
- check = SerClear(dh)
- /* I use 38400 modem-computer speed, change as desired */
- check = SerSetParms(dh, 38400, 8, N, 1, 0, 250000, 4096)
- buffer = AllocMem(4096)
- junk = c2d(buffer)
- check = 0
- connected = 0 /* flag for modem connection -- suggested by */
- /* _Bucky_ of IRC fame. */
- /* (makes ctrl-c breaks a little cleaner...thanks) */
-
- say 'Dialing SLIP service... '
- SerWrite(dh, initstr1, length(initstr1))
- Delay(200)
- SerWrite(dh, initstr2, length(initstr2))
- do forever /* loop until connect, use ctrl-c to break out */
- delay(100)
- if (check == 0) then
- do
- result = SerWrite(dh, dialstr, length(dialstr))
- check = 1
- totalstr = ''
- end
- status = SerQuery(dh)
- parse upper var status valid bytes_read .
- rcvdstrg = SerRead(dh, junk, bytes_read)
- totalstr = totalstr||rcvdstrg
- check = modem_query(totalstr)
- if (check == 100) then leave
- if (check == 101) then do; check = 0; say 'BUSY'; end
- if (check == 102) then do; check = 0; say 'NO CARRIER'; end
- end
- connect = 1
- parse var totalstr .'CONNECT ' speed+5 +2 totalstr
- say 'Connected at '||speed||'.'
-
- call wait_str(']:') /* these chars signal the first terminal */
- /* prompt, change as needed */
- SerWrite(dh, slip_cmd, length(slip_cmd))
- say 'SLIP selection made.'
-
- call wait_str('Username: ') /* wait for username prompt, change */
- /* as needed */
- SerWrite(dh, username, length(username))
- say 'Username sent.'
-
- call wait_str('Password: ') /* wait for password prompt, change */
- /* as needed */
- SerWrite(dh, passwd, length(passwd))
- say 'Password sent.'
- call wait_str('Annex') /* annex string signals the line */
- /* that contains the dynamic IP */
-
- SerClose(dh)
- /* the parse command below extracts the IP address from rcvdstr, */
- /* change as needed (should work with variable length IPs now) */
- parse var rcvdstr . 'Your address is ' a '.' b '.' c '.' d '.'.
- slip_ip = a||'.'||b||'.'||c||'.'||d
- say 'Current SLIP address is: '||slip_ip
- time_ip = time('c')||' '||date()
- say 'Connect time: '||time_ip
-
- address command
- 'setenv ip '||slip_ip /* ip is the current dynamic IP */
- 'setenv iptime '||time_ip /* iptime is the connect time */
- 'copy ENV:ip ENVARC:oldip' /* save ip as oldip for SLIPresume */
- 'copy ENV:iptime ENVARC:oldiptime'
- /* I use cslip and 38400 modem-computer speed, change as desired */
- 'echo >ENV:sana2/rhcslip0.config "serial.device 0 38400 $ip"'
- /* change hostname and alias as desired */
- 'echo >AmiTCP:db/netdb-myhost "HOST $ip me.mydomain.edu me"'
- /* change domain as needed */
- 'echo >>AmiTCP:db/netdb-myhost "DOMAIN 129.123.45.6"'
- /* change nameserver as needed */
- 'echo >>AmiTCP:db/netdb-myhost "NAMESERVER 129.123.123.4"'
- 'startnet'
- /* if using rhslip above, use rhslip here also otherwise rhcslip */
- 'online rhcslip.device 0'
-
- call FreeMem(buffer,4096)
- exit 0
-
- /* Exit point for "Break C" or ^C */
- /*----------------------------------------*/
- break_c:
- say '***Break'
- if connected ~= 0 then /* Thanks again _Bucky_ 8) */
- do
- say 'Hanging up modem.'
- check = SerWrite(dh, '+++', 3)
- check = Delay(100)
- check = SerWrite(dh, 'ATH0'||cr , 5)
- end
- SerClose(dh)
- FreeMem(buffer,4096)
- exit 20
-
- /* wait_str returns when arg is received */
- /* ---------------------------------------*/
- wait_str:
- teststr = arg(1)
- check = 0
- do until (check ~= 0)
- status = SerQuery(dh)
- parse upper var status valid bytes_read .
- rcvdstr = SerRead(dh, junk, bytes_read)
- totalstr = totalstr||rcvdstr
- check = pos(teststr,totalstr)
- Delay(20)
- end
- rcvdstr = totalstr
- totalstr = ''
- return 0
-
- /* modem_query determine modem status */
- /*----------------------------------------*/
- modem_query:
- teststr = arg(1)
- if (pos('CONNECT' , teststr) ~= 0) then return 100
- if (pos('BUSY' , teststr) ~= 0) then return 101
- if (pos('NO CARRIER', teststr) ~= 0) then return 102
- return 200
-