| The following command procedures are used on our system to
have a modem call us back. I'm not saying they can't be improved,
because they can be; but they work.
We have a captive account which has TOME1.COM as its LGICMD
file. We dial in, log into this account, enter a number in
the form 999-9999, it logs out and calls us back. Note you
cannot make it dial outside of the DTNs or the local area code
with this procedure as is. Also, this captive account has
LOG_IO and PHYS_IO privileges.
I believe there might be a tool like this somewhere. It probably
does things like use an authorization database and logs who
dialed in, when they called and the number they dialed.
Good Luck!
_Mike
$ ! TOME1.COM 25-APR-84 R. RADKIEWICZ
$ ! LOGIN DETECTOR - TERERMINE IF INTERACTIVE OR BATCH ENTRY
$ !
$ IF F$MODE() .EQS. "BATCH" THEN EXIT
$ !
$ @TOME
$ LO
$!
$! TOME.COM 24-APR-84 R. RADKIEWICZ
$! MODIFIED 27-MAY-86 R. ANDREWS
$!
$! Control file to dial a modem
$!
$ ON ERROR THEN GOTO DONE
$
$ SAY :=WRITE SYS$OUTPUT
$
$! This creates the ^B symbol for the modem autodialer
$
$ CTL_B[0,7]=%X02
$ CTL_A[0,7]=%X01
$!
$! List of all lines to dial out on.
$!
$ MODEM_LINE1="TXB1:"
$ MODEM_LINE2="TXB0:"
$ MODEM_LINE3="TXA0:"
$ MODEM_LINE4="TXA1:"
$ MODEM_LINE5="TXC1:"
$ MODEM_LINE6="TXD1:"
$
$!
$! Number of modem lines.
$!
$ NUMBER_OF_MODEMS = 6
$!
$!
$ COUNT = 1
$!
$!
$ IF F$MODE() .EQS. "BATCH" THEN GOTO DONE
$ MY_TER = F$GETJPI("","TERMINAL")
$!
$!
$! Scan loop looking for a free modem line - method is to look for
$! a line with no owner PID, this is determined by the null length
$! of the PID = 4 spaces.
$
$ WHO_LOOP:
$ T_DEV = MODEM_LINE'COUNT'
$ PID = F$GETDVI("''T_DEV'","PID")
$ PIDL = F$LENGTH(PID)
$ IF 'PIDL' .EQ. 4 THEN GOTO SAY_T
$ IF T_DEV .EQS. MY_TER THEN GOTO SAY_T
$ COUNT=COUNT+1
$ IF 'COUNT' .GT. 'NUMBER_OF_MODEMS'+1 THEN GOTO NO_MODEM
$ GOTO WHO_LOOP
$ GOTO DONE
$ SAY_T:
$! SAY "''T_DEV' WILL BE USED FOR CALL"
$
$!
$! Ask for the telephone number to be called
$!
$ SAY ""
$ SAY ""
$ ASK_P:
$ IN_NUMB = " "
$ INQUIRE IN_NUMB "Enter phone number you wish to call"
$ NUML = F$LENGTH(IN_NUMB)
$ IF NUML .EQ. 0 THEN GOTO DONE
$!
$ SAY "Is ''IN_NUMB' the correct number? (Y or N) <Y>"
$ INQUIRE YN " "
$ IF YN .EQS. "N" THEN GOTO ASK_P
$ EQL = F$LOCATE("=",IN_NUMB)
$ IF EQL .NE. NUML THEN GOTO RE_DO
$!
$ SAY "Is this number a local DDO call? (Y or N) <Y>"
$ INQUIRE YN1 " "
$ IF YN1 .EQS. "N" THEN GOTO LONG_D
$ DIAL_T = "9="
$ GOTO PARSE_N
$!
$ LONG_D:
$ DIAL_T = "8="
$ GOTO PARSE_N
$!
$ RE_DO:
$ SAY "Do not include the 1,8,9 or = in the number to indicate outside dial"
$ GOTO ASK_P
$!
$! Parse the entered number for dashes(-), we check for nothing else.
$! First pass look is here
$!
$ PARSE_N:
$ DASH = F$LOCATE("-",IN_NUMB)
$! IF DASH .EQ. NUML-1 THEN GOTO CONT_DIAL
$ IF DASH .EQ. NUML THEN GOTO CONT_DIAL
$! SAY "DASH = ''DASH' NUML = ''NUML'"
$ O_NUM = F$EXTRACT(0,DASH,IN_NUMB)
$ I_NUM = O_NUM + F$EXTRACT(DASH+1,(NUML-(DASH+1)),IN_NUMB)
$ DASH1 = F$LOCATE("-",I_NUM)
$! IF DASH1 .EQ. NUML-1 THEN GOTO CONT_DIAL
$ IF DASH1 .EQ. NUML THEN GOTO CONT_DIAL
$!
$! Loop here to scan for addional dashes
$!
$ DO_DASH:
$ NUM1 = F$LENGTH(I_NUM)
$ O_NUM = F$EXTRACT(0,DASH1,I_NUM)
$ I_NUM = O_NUM + F$EXTRACT(DASH1+1,(NUM1-(DASH1+1)),I_NUM)
$
$ DASH1 = F$LOCATE("-",I_NUM)
$! IF DASH1 .NE. NUM1-1 THEN GOTO DO_DASH
$ IF DASH1 .NE. NUM1 THEN GOTO DO_DASH
$
$!
$! Build the number data file and the batch control file starting here
$!
$ CONT_DIAL:
$ SAY " Dialing ''I_NUM' using ''T_DEV'"
$ SAY ""
$ SAY "If you do not get a call back after 2 minutes try again."
$ SAY ""
$ CONT = ""
$ TO_CALL = "''CTL_B'''DIAL_T'''I_NUM'"
$ N_FILE = F$PID(CONT)
$ DELETE/BEFORE=TODAY 0*.*;*
$!
$! This is the number data file
$ D_FILE = "''N_FILE'.TMP"
$!
$ OPEN/WRITE OUTFIL 'D_FILE'
$ WRITE OUTFIL "''TO_CALL'"
$ CLOSE OUTFIL
$! SAY "FILE ''D_FILE' CONTAINS THE NUMBER TO DIAL OUT ON ''T_DEV'"
$!
$! This is the batch control file
$ B_FILE = "''N_FILE'.COM"
$ TIME = F$TIME()
$!
$ OPEN/WRITE OUTFILE 'B_FILE'
$ WRITE OUTFILE "$! Batch file to call ''IN_NUMB' using ''T_DEV'"
$ WRITE OUTFILE "$!"
$ WRITE OUTFILE "$! Dialing ''TO_CALL' at ''TIME'"
$ WRITE OUTFILE "$!"
$ WRITE OUTFILE "$ SET VERIFY"
$ WRITE OUTFILE "$ SET PROC/PRIV=ALL"
$ WRITE OUTFILE "$ WAIT 00:00:02"
$ WRITE OUTFILE "$ SET TER/PERM/SPEED=1200 ''T_DEV'"
$ WRITE OUTFILE "$ COPY ''D_FILE' ''T_DEV'"
$ WRITE OUTFILE "$!"
$ WRITE OUTFILE "$ WAIT 00:00:02"
$ WRITE OUTFILE "$ SET TER/PERM/AUTOBAUD ''T_DEV'"
$ WRITE OUTFILE "$ ! DEL ''D_FILE';*"
$ WRITE OUTFILE "$ SET NOVERIFY"
$ WRITE OUTFILE "$ SHOW DAY"
$ WRITE OUTFILE "$ EXIT"
$ CLOSE OUTFILE
$! SAY "FILE ''B_FILE' IS THE BATCH CONTROL FILE FOR CALL"
$!
$
$! SUBMIT/NOLOG/AFTER=:00:04 'B_FILE'
$ SUBMIT/que=tome$batch/AFTER=:00:10/KEEP/NOPRINT 'B_FILE'
$
$ GOTO DONE
$!
$ NO_MODEM:
$ SAY "THERE ARE NO FREE MODEMS AT THIS TIME TRY AGAIN LATER"
$ GOTO DONE
$ NO_NO:
$ SAY "THIS PROCEDURE IS DESIGENED TO RUN FROM MODEM LINES ONLY"
$ GOTO DONE
$!
$ DONE:
$ LO
|