'===========================================================================
' Subject: DIAL-UP CHAT (CONNECT)             Date: 04-22-97 (21:08)       
'  Author: Mike G. Stewart                    Code: QB, QBasic, PDS        
'  Origin: mikegs@juno.com                  Packet: MODEM.ABC
'===========================================================================
'Connectt.bas: Dial-Up Chat
'Program written by Mike Stewart
'(C) 1997 M Stewart
'Public Domain
'I changed the program CONNECT.BAS a lot to make this program.
'This program can be changed a lot.
'Use it to start your own network.
'Just include my name in the program that you write, in the credits or something.
'Have Fun! :-)

DECLARE SUB Keyscan ()
DECLARE SUB Delay (td!)
DECLARE SUB dial (Num$)
COMMON SHARED ModemIn$

PRINT "Call Mike Stewart at (509) 292-8751 to Confirm Dial-Up Chat is Active."
PRINT "Press any key to continue with Dial-Up Chat."
SLEEP

INPUT "Is (509) 292-8751 Long Distance? <y,n> ", l$
INPUT "Do You Have Call Waiting? <y,n> ", c$
LET c$ = UCASE$(c$)
LET l$ = UCASE$(l$)

ON ERROR GOTO Handler
ON COM(2) GOSUB GetBuf
COM(2) ON

IF l$ = "Y" AND c$ = "Y" THEN dial ("*70,1-(509)292-8751") 'phone numbers according to line settings
IF l$ = "N" AND c$ = "Y" THEN dial ("*70,292-8751")
IF l$ = "Y" AND c$ = "N" THEN dial ("1-(509)292-8751")
IF l$ = "N" AND c$ = "N" THEN dial ("292-8751")


DO
 CALL Keyscan      ' You're online now. Stay in this loop forever.
LOOP

Handler:
RESUME NEXT

GetBuf:
InStr$ = INPUT$(LOC(1), #1)

   DO
      BackSpace = INSTR(InStr$, CHR$(8))
      IF BackSpace THEN
         MID$(InStr$, BackSpace) = CHR$(29)
      END IF
   LOOP WHILE BackSpace

   DO
      LineFeed = INSTR(InStr$, CHR$(10))
      IF LineFeed THEN
         InStr$ = LEFT$(InStr$, LineFeed - 1) + MID$(InStr$, LineFeed + 1)
      END IF
   LOOP WHILE LineFeed

   ModemIn$ = RIGHT$(ModemIn$ + InStr$, 10240)
   PRINT (InStr$);
RETURN


SUB Delay (td!)
  TimeDelay! = (TIMER + td!) MOD 86400
  WHILE TimeDelay! > TIMER: WEND
END SUB

SUB dial (Num$)

OPEN "COM2:9600,N,8,1" FOR RANDOM AS #1

CLS
LOCATE 25, 40: PRINT "ALT-X to exit.."
LOCATE 1, 1, 1
  PRINT #1, "ATZ"
  CALL Delay(1.25)
  PRINT #1, "ATS7=45 S0=0 V1 M0"     ' modem initialization string
  CALL Delay(1.25)

DO
  CALL Delay(1)
  PRINT "Dialing ....."
  PRINT #1, "atdt" + Num$ + CHR$(13)

 TimeDelay! = TIMER + 40

   DO UNTIL TIMER > TimeDelay!
       CALL Keyscan
       test = INSTR(RIGHT$(ModemIn$, 20), "CONNECT")
        IF test THEN result = -1: EXIT DO
       test = INSTR(RIGHT$(ModemIn$, 5), "BUSY")
        IF test THEN result = 0: EXIT DO
       test = INSTR(RIGHT$(ModemIn$, 12), "NO DIALTONE")
        IF test THEN result = 0: CALL Delay(2): EXIT DO
       test = INSTR(RIGHT$(ModemIn$, 11), "NO CARRIER")
        IF test THEN result = 0: CALL Delay(2): EXIT DO

   LOOP

LOOP UNTIL result

FOR t = 1 TO 5            ' It answered! ring the alarm!
  SOUND 750, 2
  SOUND 550, 2
  SOUND 650, 2
  IF INKEY$ <> "" THEN EXIT FOR
NEXT

END SUB

SUB Keyscan
a$ = INKEY$
    IF a$ = CHR$(0) + CHR$(45) THEN CLOSE : END
    PRINT #1, a$;
END SUB
