From telecom@delta.eecs.nwu.edu Fri Jul 23 12:37:33 1993
From: TELECOM Moderator 

;************************************************************** ; CALLID.ASP (C) 1992 by Padgett Peterson ; ; CALLID.ASP is a PROCOMM Aspect script file that may be ; used on those telephone lines returning such information. ; This version is being made available as FREEWARE and may ; be included/distributed freely so long as 1) This copyright ; notice remains intact, 2) No changes are made to this ; script, and 3) No charge beyond a minimal distribution ; fee is levied. ; ; As such no warranty is made for fitness of any kind and ; use is strictly at the recipient's own risk. ; ; The program requires a modem that will return Caller-ID ; values when instructed. Use will permit screening of ; calls prior to the line being placed off-hook: if the ; calling number is blocked or does not appear in the file ; CALLID.DAT, the line will not be answered. ; ; One effective use would be on a line having both modem ; and FAX service. If the call is not from a known host, ; the modem will not pick up and the FAX or voice mail ; may connect instead. If this use is selected it will be ; necessary to set the FAX not to answer until sufficient ; time has elapsed after the first ring for the list of known ; numbers to be scanned and a decision made. ; ; CALLID makes use of two files CALLID.DAT, the repository ; of numbers to be answered in the format ;. ; The must contain all digits returned by the ; Caller-ID stream but the format is unimportant since all ; non-numeric characters will be stripped. Syntactically, ; (407)555-1212 is the same as 407.555.1212, 4075551212, or ; 407 555 1212. The second file CALLID.LOG is created or ; appended when the script executes and contains the information ; on calls attempted. ; ; For proper use as a PROCOMM "HOST" the HOST SETUP must be set ; to EXIT on completion. The only known problem at this time ; is the condition if an "approved" number calls the system ; and hangs up before a connection is made. In this case PROCOMM ; may "hang" in the HOST "waiting" mode and will answer the ; next call. This is a problem with the HOST mode that will require ; complete HOST emulation in the ASPECT file to correct (in work). ; ; Version History ; ; 0.71 (beta) 1 November 1992 Southern Bell/Supra FAX/Modem ; version, 1st issue. ; ; For more information contact the author at (407)352-6007 6-9 pm ; EST (no collect calls) or write to POB 1203, Windermere, FLA, ; 34786. Please enclose a #10 SASE. ; ; PROCOMM, PROCOMM+, and ASPECT are registered products of ; Datastorm Inc. (800)326-4799 ; ; Supra FAX/Modem is a product of the Supra Corp. (800)727-8647 ; ;******************************************************************* ; define atcmd "AT^M" ; basic AT command define cichk "AT#CID=?^M" ; these commands are valid for a Supra define cicmd "AT#CID=1^M" ; FAX/Modem with Caller-ID enabled define noans "ATS0=0^M" ; Reset modem to non-answer define ringmsg "RING" define okstr "OK" define erstr "ERROR" define blank " " define logfil "callid.log" ; Log file for received calls define datfil "callid.dat" ; Data files for "approved" numbers ; ; Global Variables ; string idline,strnum,instr,crlf,tmps1,tmps2 integer idlen,tmpn1,flag,dflag,pos,char,nhi ; proc main ; ; strset crlf 10 1 ; ; Setup ; set keys on set display off vidsave 0 box 8 21 15 77 00 box 7 20 14 75 79 atsay 8 28 79 " Caller-ID Handler (C) 1992 by Padgett " ; ; Make sure modem is turned on ; set rxdata on atsay 10 22 79 "Waiting for Modem" transmit noans call getstr with &instr call getstr with &instr strcmp instr okstr 2 if success atsay 10 22 79 "Modem Responding " else atsay 10 22 79 "Modem not responding " set rxdata off waitquiet 2 2 goto enditall endif ; ; Check for Caller-Id supporting modem ; atsay 10 40 79 "- Caller-ID Initializing" set rxdata on transmit cicmd call getstr with instr ; flush command echo call getstr with &instr ; get response strcmp instr erstr 5 ; IF not "ERROR" assume OK ; if success atsay 10 65 79 "- Failed" waitquiet 2 2 goto enditall else atsay 10 65 79 "- Success" call getstr with instr ; flush OK endif ; ; Open the data file ; findfirst datfil if found atsay 11 22 79 "Data File Present" fopen 0 datfil "rt" if success atsay 11 40 79 "- Opened" dflag=1 else atsay 12 22 79 "Data file could not be opened - terminating" waitquiet 2 2 goto enditall endif else atsay 11 22 79 "No Data File - Logging only" dflag=0 endif ; ; Open the LOG file ; openlog: findfirst logfil if found fopen 1 logfil "at" fseek 1 0 2 else log open logfil log close goto openlog endif if success atsay 12 22 79 "Log File -" else atsay 12 22 79 "Log file could not be opened - terminating" waitquiet 2 2 goto close0 endif ; ; Record Date & Time to Log - monkey motion but allows both ; screen and file write if dflag==0 fwrite 1 "Logging only, " 14 endif strset tmps1 32 27 strupdt tmps1 "Opened:" 0 7 date tmps2 strupdt tmps1 tmps2 8 8 time tmps2 1 strupdt tmps1 tmps2 17 8 fatsay 12 42 79 "%.25s" tmps1 strupdt tmps1 crlf 25 1 tmpn1=26 fwrite 1 tmps1 tmpn1 ; ; Create LOG Box ; box 17 21 23 77 00 box 16 20 22 75 79 atsay 17 40 79 "- Received Calls -" ; ; Wait For Ring Signal ; when 0 "RING" call numhan ringlp: atsay 13 22 79 "Waiting for Ring - Press any key to abort" set display off set rxdata off ; if hitkey == 0 goto ringlp endif set keys off goto close1 ; ; End the program ; close1: fclose 1 close0: if dflag == 1 fclose 0 endif enditall: cwhen 0 set rxdata off vidrest 0 set display on exit endproc ; ;---------------------------------------------------------------------- ; ; Procedure to concatenate numbers from a string up to the first blank ; and strip out all other characters proc stripnum strparm in1,out1 intparm j1 integer i1,p1,c1 ; ; Find the limit of what is to be checked ; find in1 ";" p1 if not found strlen in1 p1 endif ; ; Now concatenate just the numbers ; j1 = -1 strset out1 0 40 ; for i1 = 0 upto p1 strpeek in1 i1 c1 if (c1 > 47) && (c1 < 58) j1= j1 + 1 strpoke out1 j1 c1 endif endfor ; endproc ;---------------------------------------------------------- ; ; Procedure to create an input string of characters to ; from the COM port. May also be used to flush the port. ; proc getstr ; strparm gss integer gsj,gsc ; set rxdata on strset gss 0 40 gsj=0 lp2: comgetcd gsc if gsc < 32 if (gsj != 0) || (gsc == -1) goto endit else goto lp2 endif endif strpoke gss gsj gsc gsj = gsj + 1 goto lp2 ; endit: ; endproc ; ;--------------------------------------------------------------------------- ; ; Call Handling Procedure - Procedure is called by WHEN "RING" command ; proc numhan ; cwhen 0 atsay 13 22 79 " Checking Number " chklp: strset instr 0 40 strset tmps2 0 41 call getstr with &instr ; get date strcmp instr "TIME" 4 if not success strcmp instr "RING" ; second string will be RING if no Caller-ID if not success goto chklp else goto endnh endif endif ; scroll 1 18 22 21 74 79 ; new entry so scroll the screen ; fatsay 21 22 79 "%.15s" instr fwrite 1 instr 15 ; log the time call getstr with &tmps1 ; get number call stripnum with tmps1 &tmps2 &idlen ; strip it ; if dflag == 0 atsay 13 22 79 " Logging Calling Number " goto nonum endif ; ; Check the number ; rewind 0 ; while not eof 0 strset idline 0 41 fgets 0 idline call stripnum with idline &strnum &idlen if idlen < 1 goto noline endif strcmp strnum tmps2 idlen if success goto foundnum endif noline: endwhile ; ; Number not found ; atsay 13 22 79 " No Match - " nonum: flag=0 fwrite 1 " No Match " 10 fwrite 1 tmps2 40 fwrite 1 crlf 1 goto wrtnum ; ; Number Found ; foundnum: flag=1 fwrite 1 " Match " 10 ; ; Strip any control characters out of idline ; strlen idline pos for nhi=1 upto pos strpeek idline nhi char if char < 32 strpoke idline nhi 32 endif endfor ; ; Now output the entry to the LOG file ; fwrite 1 idline 40 fwrite 1 crlf 1 strcpy tmps2 idline 40 ; ; Put the Information on the screen also (last 4 numbers) ; wrtnum: fatsay 21 35 79 "%.40s" tmps2 ; ; DOIT ; if flag == 1 vidsave 1 atsay 13 22 79 " Number Matched - Entering HOST mode " HOST transmit noans ; Just to be sure vidrest 1 endif ; endnh: set display off set rxdata off atsay 13 22 79 "System resetting - Waiting for silence " waitquiet 5 forever when 0 "RING" call numhan endproc ;---------------------------------------------------------------------