'===========================================================================
' Subject: PHREAK FONE V2.0                   Date: 07-03-97 (12:01)       
'  Author: Brian Mahocker                     Code: QB, QBasic, PDS        
'  Origin: Kain121182@aol.com               Packet: MODEM.ABC
'===========================================================================
DECLARE SUB EndReport ()
DECLARE SUB delay2 ()
DECLARE SUB EndSounds ()
DECLARE SUB NumbersLD ()
DECLARE SUB delay (Seconds)
DECLARE SUB CloseCom ()
DECLARE SUB BadModem (which)
DECLARE SUB WMS (Status)
DECLARE SUB PrintDScreen ()
DECLARE SUB MakeZeros ()
DECLARE SUB SelectInput (x, y, which)
DECLARE SUB OpenCom ()
DECLARE SUB DialNumber ()
DECLARE SUB CoolPrint (x, y, text$, delay, Cursor)
DECLARE SUB Inputs ()
DECLARE FUNCTION TinyInput$ (x%, y%, Original$, Length%, AutoCap%, Allowed$, highest%, lowest%)
'$DYNAMIC
RANDOMIZE TIMER
DIM SHARED Prefixes(2), Port, NumOfPrefixes, Sounds, Sec, Corr, Digit4, Digit4D$
DIM SHARED FoneNumber$, ND, NL, NumOfBusy, HangUp, TotalFN, Quit, NumSkipped
CLS
'LET Prefixes(1) = 485
'LET Prefixes(2) = 485
'LET Port = 1
'LET NumOfPrefixes = 2
'LET Sounds = 0
'LET Sec = 30
'LET TotalFN = 1000
'LET ND = 399
'LET NL = 600
'LET NumSkipped = 1
'LET NumOfBusy = 23
'LET HangUp = 0

Inputs
'DialNumber
'EndReport
ModemNotOn:
BadModem 1
END

REM $STATIC
SUB BadModem (which)
COLOR 15
IF which = 1 THEN
   PRINT "Modem not on or connected. Please check all connections and make sure"
   PRINT "it is connected properly and is turned on. After you do that, restart"
   PRINT "this program."
END IF
END SUB

SUB CloseCom
IF Port = 1 OR Port = 2 THEN CLOSE #1
IF Port = 3 THEN
   CLOSE #1
   DEF SEG = 64       'point to BIOS data area
   POKE &H0, &HF8     'restore "com1:" address in BIOS data area to com1:
   DEF SEG            'return to DGROUP
END IF
IF Port = 4 THEN
   CLOSE #1
   DEF SEG = 64       'point to BIOS data area
   POKE &H2, &HF8     'restore com2: address in BIOS data area to com2:
   DEF SEG            'return to DGROUP
END IF
END SUB

SUB CoolPrint (x, y, text$, CPdelay, Cursor)
RANDOMIZE TIMER
FOR CP = 1 TO LEN(text$)
   LOCATE , , 0
GetCoolPrintColor:
   LET col = INT(RND * 3) + 1
   IF col = lastcol THEN GOTO GetCoolPrintColor
   IF col = 1 THEN LET co = 7
   IF col = 2 THEN LET co = 8
   IF col = 3 THEN LET co = 15
   LET lastcol = col
   LET coo$ = INKEY$
   IF UCASE$(MID$(text$, CP, 1)) = "A" THEN COLOR co: LOCATE x, y: PRINT "a": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "B" THEN COLOR co: LOCATE x, y: PRINT "B": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "C" THEN COLOR co: LOCATE x, y: PRINT "C": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "D" THEN COLOR co: LOCATE x, y: PRINT "D": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "E" THEN COLOR co: LOCATE x, y: PRINT "e": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "F" THEN COLOR co: LOCATE x, y: PRINT "F": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "G" THEN COLOR co: LOCATE x, y: PRINT "G": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "H" THEN COLOR co: LOCATE x, y: PRINT "H": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "I" THEN COLOR co: LOCATE x, y: PRINT "i": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "J" THEN COLOR co: LOCATE x, y: PRINT "J": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "K" THEN COLOR co: LOCATE x, y: PRINT "K": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "L" THEN COLOR co: LOCATE x, y: PRINT "L": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "M" THEN COLOR co: LOCATE x, y: PRINT "M": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "N" THEN COLOR co: LOCATE x, y: PRINT "N": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "O" THEN COLOR co: LOCATE x, y: PRINT "o": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "P" THEN COLOR co: LOCATE x, y: PRINT "P": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "Q" THEN COLOR co: LOCATE x, y: PRINT "Q": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "R" THEN COLOR co: LOCATE x, y: PRINT "R": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "S" THEN COLOR co: LOCATE x, y: PRINT "S": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "T" THEN COLOR co: LOCATE x, y: PRINT "T": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "U" THEN COLOR co: LOCATE x, y: PRINT "u": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "V" THEN COLOR co: LOCATE x, y: PRINT "V": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "W" THEN COLOR co: LOCATE x, y: PRINT "W": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "X" THEN COLOR co: LOCATE x, y: PRINT "X": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "Y" THEN COLOR co: LOCATE x, y: PRINT "y": LET y = y + 1
   IF UCASE$(MID$(text$, CP, 1)) = "Z" THEN COLOR co: LOCATE x, y: PRINT "Z": LET y = y + 1
   IF MID$(text$, CP, 1) = "(" THEN COLOR co: LOCATE x, y: PRINT "(": LET y = y + 1
   IF MID$(text$, CP, 1) = ")" THEN COLOR co: LOCATE x, y: PRINT ")": LET y = y + 1
   IF MID$(text$, CP, 1) = "=" THEN COLOR co: LOCATE x, y: PRINT "=": LET y = y + 1
   IF MID$(text$, CP, 1) = "-" THEN COLOR co: LOCATE x, y: PRINT "-": LET y = y + 1
   IF MID$(text$, CP, 1) = "@" THEN COLOR co: LOCATE x, y: PRINT "@": LET y = y + 1
   IF MID$(text$, CP, 1) = "." THEN COLOR co: LOCATE x, y: PRINT ".": LET y = y + 1
   IF MID$(text$, CP, 1) = "^" THEN COLOR co: LOCATE x, y: PRINT CHR$(34): LET y = y + 1
   IF MID$(text$, CP, 1) = ":" THEN COLOR co: LOCATE x, y: PRINT ":": LET y = y + 1
   IF MID$(text$, CP, 1) = "/" THEN COLOR co: LOCATE x, y: PRINT "/": LET y = y + 1
   IF MID$(text$, CP, 1) = "#" THEN COLOR co: LOCATE x, y: PRINT "#": LET y = y + 1
   IF MID$(text$, CP, 1) = "?" THEN COLOR co: LOCATE x, y: PRINT "?": LET y = y + 1
   IF MID$(text$, CP, 1) = "0" THEN COLOR co: LOCATE x, y: PRINT "0": LET y = y + 1
   IF MID$(text$, CP, 1) = "1" THEN COLOR co: LOCATE x, y: PRINT "1": LET y = y + 1
   IF MID$(text$, CP, 1) = "2" THEN COLOR co: LOCATE x, y: PRINT "2": LET y = y + 1
   IF MID$(text$, CP, 1) = "3" THEN COLOR co: LOCATE x, y: PRINT "3": LET y = y + 1
   IF MID$(text$, CP, 1) = "4" THEN COLOR co: LOCATE x, y: PRINT "4": LET y = y + 1
   IF MID$(text$, CP, 1) = "5" THEN COLOR co: LOCATE x, y: PRINT "5": LET y = y + 1
   IF MID$(text$, CP, 1) = "6" THEN COLOR co: LOCATE x, y: PRINT "6": LET y = y + 1
   IF MID$(text$, CP, 1) = "7" THEN COLOR co: LOCATE x, y: PRINT "7": LET y = y + 1
   IF MID$(text$, CP, 1) = "8" THEN COLOR co: LOCATE x, y: PRINT "8": LET y = y + 1
   IF MID$(text$, CP, 1) = "9" THEN COLOR co: LOCATE x, y: PRINT "9": LET y = y + 1
   IF MID$(text$, CP, 1) = " " THEN COLOR co: LOCATE x, y: PRINT " ": LET y = y + 1
   'FOR de = 1 TO CPdelay: NEXT de
   IF coo$ = CHR$(27) THEN END
NEXT CP
NextL:
IF Cursor = 0 THEN LOCATE , , 0
IF Cursor = 1 THEN LOCATE , , 1
END SUB

SUB delay (Seconds)
LET T! = TIMER
LET SpeedDelay! = Seconds
DO
LET DNKey$ = INKEY$
   IF UCASE$(DNKey$) = "S" THEN GOTO SkipNumber1
   IF UCASE$(DNKey$) = "Q" THEN GOTO Quit1
   IF UCASE$(DNKey$) = "P" THEN
      DO
         LET Pause$ = INKEY$
      LOOP UNTIL Pause$ <> ""
   END IF
LOOP UNTIL TIMER - T! >= SpeedDelay!
SkipNumber1:
LET NumSkipped = NumSkipped + 1
LOCATE 5, 33: PRINT "    "
CoolPrint 5, 33, LTRIM$(STR$(Sec)), 0, 0
GOTO EndOfDelay1Sub
Quit1:
LET Quit = 1
EndOfDelay1Sub:
END SUB

SUB delay2
LET TempSec = Sec
LET Sec = Sec - 1
DO
LET T! = TIMER
LET SpeedDelay! = 1
DO
   LET DNKey$ = INKEY$
   IF UCASE$(DNKey$) = "S" THEN GOTO SkipNumber
   IF UCASE$(DNKey$) = "Q" THEN GOTO Quit
   IF UCASE$(DNKey$) = "P" THEN
      DO
         LET Pause$ = INKEY$
      LOOP UNTIL Pause$ <> ""
   END IF
LOOP UNTIL TIMER - T! >= SpeedDelay!
CoolPrint 5, 33, LTRIM$(STR$(Sec)), 0, 0
IF HangUp = 1 THEN
   INPUT #1, SeeIfBusy$
   IF SeeIfBusy$ = "BUSY" THEN
      LET NumOfBusy = NumOfBusy + 1
      WMS 5
      delay 1
      GOTO AfterD2Sub
   END IF
END IF
LET Sec = Sec - 1
LOOP
AfterD2Sub:
LET Sec = TempSec
LOCATE 5, 33: PRINT "    "
CoolPrint 5, 33, LTRIM$(STR$(Sec)), 0, 0
GOTO EndOfDelay2Sub
SkipNumber:
LET NumSkipped = NumSkipped + 1
LET Sec = TempSec
LOCATE 5, 33: PRINT "    "
CoolPrint 5, 33, LTRIM$(STR$(Sec)), 0, 0
GOTO EndOfDelay2Sub
Quit:
LET Quit = 1
EndOfDelay2Sub:
END SUB

SUB DialNumber
PrintDScreen
LET NL = NumOfPrefixes * 10000: LET ND = 0
LET TotalFN = NL
LET Quit = 0
CoolPrint 7, 33, STR$(ND), 0, 0
CoolPrint 8, 33, STR$(NL), 0, 0
OpenCom
FOR Prefix = 1 TO NumOfPrefixes
   LET Number3$ = STR$(Prefixes(Prefix))
   CoolPrint 3, 33, LTRIM$(Number3$), 0, 0
   FOR Digit4 = 6402 TO 6402
      MakeZeros
      LET FoneNumber$ = LTRIM$(RTRIM$(Number3$)) + "-" + LTRIM$(RTRIM$(Digit4D$))
      CoolPrint 4, 33, FoneNumber$, 0, 0
      CoolPrint 5, 33, LTRIM$(STR$(Sec)), 0, 0
      WMS 1
      PRINT #1, "ATZ"
      delay 1
      IF Sounds = 0 THEN : WMS 4: PRINT #1, "ATM0DT" + FoneNumber$
      IF Sounds = 1 THEN : WMS 2: PRINT #1, "ATDT" + FoneNumber$
      delay 3.5
      WMS 3
      delay2
      IF Quit = 1 THEN
         CloseCom
         EndReport
         END
      END IF
      LET ND = ND + 1
      LET NL = NL - 1
      NumbersLD
   NEXT Digit4
NEXT Prefix
CloseCom
EndSounds
END SUB

SUB EndReport
CLS
CoolPrint 1, 1, "Phreak Fone - Ver 2.0 - By: Brian Mahocker - Contact me at ^Kain121182@AOL.COM^", 1, 0
CoolPrint 3, 24, "--== Phreak Fone end report ==--", 200, 0
LET ERNOP$ = "Number of prefixes :" + STR$(NumOfPrefixes)
LET ERNOFN$ = "Total number of fone numbers :" + STR$(TotalFN)
LET ERNOFND$ = "Total number of fone numbers dialed :" + STR$(ND)
LET PNND = TotalFN - ND: LET ERNOFNND$ = "Total number of fone numbers not dialed :" + STR$(PNND)
LET ERNONS$ = "Number of fone numbers skipped :" + STR$(NumSkipped)
LET ERNOPOP$ = "Number of pissed off people :" + STR$(ND - NumOfBusy - NumSkipped)
LET ERNOBS$ = "Number of busy signals :" + STR$(NumOfBusy)
CoolPrint 5, 22, ERNOP$, 200, 0
CoolPrint 7, 12, ERNOFN$, 200, 0
CoolPrint 8, 5, ERNOFND$, 200, 0
CoolPrint 9, 1, ERNOFNND$, 200, 0
CoolPrint 11, 10, ERNONS$, 200, 0
CoolPrint 12, 13, ERNOPOP$, 200, 0
CoolPrint 13, 18, ERNOBS$, 200, 0
END
END SUB

SUB EndSounds
FOR s1 = 500 TO 1000
   SOUND s1, .1
NEXT s1
FOR s2 = 1000 TO 500 STEP -1
   SOUND s2, .1
NEXT s2
FOR s31 = 600 TO 750
   SOUND s31, .1
NEXT s31
FOR s32 = 600 TO 500 STEP -1
   SOUND s32, .1
NEXT s32
FOR s31 = 600 TO 750
   SOUND s31, .1
NEXT s31
FOR s32 = 600 TO 500 STEP -1
   SOUND s32, .1
NEXT s32
FOR s31 = 600 TO 750
   SOUND s31, .1
NEXT s31
FOR s32 = 600 TO 500 STEP -1
   SOUND s32, .1
NEXT s32
EndReport
END SUB

SUB Inputs
StartInputs:
CLS
CoolPrint 1, 1, "Phreak Fone - Ver 2.0 - By: Brian Mahocker - Contact me at ^Kain121182@AOL.COM^", 1, 0
CoolPrint 3, 1, "HoW MaNy PReFiXeS? (Prefix = XXX-6402) Max 15 : ", 200, 1
LET NumOfPrefixes$ = TinyInput$(3, 49, "", 2, 1, "123450", 15, 0)
LET NOP = VAL(NumOfPrefixes$): REDIM Prefixes(0), Prefixes(NOP)   'ReDIM
CoolPrint 4, 1, "Which modem port? : ", 200, 0
SelectInput 4, 21, 1
CoolPrint 5, 1, "Modem sounds on or off? : ", 200, 0
SelectInput 5, 27, 2
CoolPrint 6, 1, "How many seconds for each number? : ", 200, 1
LET Sec$ = TinyInput$(6, 37, "", 2, 1, "1234567890", 0, 0)
CoolPrint 7, 1, "Hang up modem if fone number is busy? : ", 200, 0
SelectInput 7, 41, 4
CoolPrint 8, 1, "Are these settings correct? : ", 200, 0
SelectInput 8, 31, 3
IF Corr = 1 THEN GOTO InputPre
IF Corr = 0 THEN GOTO StartInputs
InputPre:
CLS
CoolPrint 1, 1, "Phreak Fone - Ver 2.0 - By: Brian Mahocker - Contact me at ^Kain121182@AOL.COM^", 1, 0
CoolPrint 3, 1, "INPuT PReFiXeS:", 200, 0
LET x = 4
FOR IP = 1 TO VAL(NumOfPrefixes$)
   LET IPT$ = "#" + STR$(IP) + " - "
   CoolPrint x, 5, IPT$, 200, 1
   IF x = 4 THEN LET TempPre$ = TinyInput$(4, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 5 THEN LET TempPre$ = TinyInput$(5, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 6 THEN LET TempPre$ = TinyInput$(6, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 7 THEN LET TempPre$ = TinyInput$(7, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 8 THEN LET TempPre$ = TinyInput$(8, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 9 THEN LET TempPre$ = TinyInput$(9, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 10 THEN LET TempPre$ = TinyInput$(10, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 11 THEN LET TempPre$ = TinyInput$(11, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 12 THEN LET TempPre$ = TinyInput$(12, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 13 THEN LET TempPre$ = TinyInput$(13, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 14 THEN LET TempPre$ = TinyInput$(14, 11, "", 3, 1, "1234567890", 0, 100)
   IF x = 15 THEN LET TempPre$ = TinyInput$(15, 11, "", 3, 1, "1234567890", 0, 100)
   LET TempPre = VAL(TempPre$)
   LET Prefixes(IP) = TempPre
   LET x = x + 1
NEXT IP
LET NumOfPrefixes = VAL(NumOfPrefixes$)
LET Sec = VAL(Sec$)
DialNumber
END SUB

SUB MakeZeros
IF Digit4 > -1 AND Digit4 < 10 THEN LET Digit4D$ = "000" + LTRIM$(STR$(Digit4))
IF Digit4 > 9 AND Digit4 < 100 THEN LET Digit4D$ = "00" + LTRIM$(STR$(Digit4))
IF Digit4 > 99 AND Digit4 < 1000 THEN LET Digit4D$ = "0" + LTRIM$(STR$(Digit4))
IF Digit4 > 999 AND Digit4 < 10000 THEN LET Digit4D$ = LTRIM$(STR$(Digit4))
END SUB

SUB NumbersLD
CoolPrint 7, 33, STR$(ND), 0, 0
CoolPrint 8, 33, STR$(NL) + "     ", 0, 0
END SUB

SUB OpenCom
ON ERROR GOTO ModemNotOn
IF Port = 1 THEN OPEN "COM1:9600,N,8,1" FOR RANDOM AS #1
IF Port = 2 THEN OPEN "COM2:9600,N,8,1" FOR RANDOM AS #1
IF Port = 3 THEN
   DEF SEG = 64       'move QuickBASIC segment pointer to BIOS data area
   POKE &H0, &HE8     'change com1: address in BIOS data area to com3:
   DEF SEG            'return to QB's DGROUP
   OPEN "COM1:9600,N,8,1" FOR RANDOM AS #1
END IF
IF Port = 4 THEN
   DEF SEG = 64       'move QuickBASIC segment pointer to BIOS data area
   POKE &H2, &HE8     'change com2: address in BIOS data area to com4:
   DEF SEG            'return to DGROUP
   OPEN "COM2:9600,N,8,1" FOR RANDOM AS #1
END IF
END SUB

SUB PrintDScreen
CLS
CoolPrint 1, 1, "Phreak Fone - Ver 2.0 - By: Brian Mahocker - Contact me at ^Kain121182@AOL.COM^", 1, 0
CoolPrint 3, 16, "Current Prefix : ", 100, 0
CoolPrint 4, 11, "Current Fone Number : ", 100, 0
CoolPrint 5, 18, "Seconds Left : ", 100, 0
CoolPrint 7, 16, "Numbers Dialed : ", 100, 0
CoolPrint 8, 18, "Numbers Left : ", 100, 0
CoolPrint 10, 10, "Current Modem Status : ", 100, 0
CoolPrint 15, 1, "To skip the current fone number, press ^S^.", 200, 0
CoolPrint 16, 1, "To pause the count down, press ^P^, then press it again to continue.", 200, 0
CoolPrint 17, 1, "To quit the operation, press ^Q^.", 200, 0
END SUB

SUB SelectInput (x, y, which)
IF which = 1 THEN GOTO SI1
IF which = 2 THEN GOTO SI2
IF which = 3 THEN GOTO SI3
IF which = 4 THEN GOTO SI4
SI1:
LET SI1Cur = 1
LOCATE x, y, 0
COLOR 7: PRINT "["; : COLOR 15: PRINT "1"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "2"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "3"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "4"; : COLOR 7: PRINT "]"
PrintSI1:
LOCATE x, y, 0
IF SI1Cur = 1 THEN COLOR 7: PRINT "["; : COLOR 15: PRINT "1"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "2"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "3"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "4"; : COLOR 7: PRINT "]"
IF SI1Cur = 2 THEN COLOR 7: PRINT "["; : COLOR 8: PRINT "1"; : COLOR 7: PRINT "/"; : COLOR 15: PRINT "2"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "3"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "4"; : COLOR 7: PRINT "]"
IF SI1Cur = 3 THEN COLOR 7: PRINT "["; : COLOR 8: PRINT "1"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "2"; : COLOR 7: PRINT "/"; : COLOR 15: PRINT "3"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "4"; : COLOR 7: PRINT "]"
IF SI1Cur = 4 THEN COLOR 7: PRINT "["; : COLOR 8: PRINT "1"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "2"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "3"; : COLOR 7: PRINT "/"; : COLOR 15: PRINT "4"; : COLOR 7: PRINT "]"
DO
LET SI1$ = INKEY$
IF SI1$ = CHR$(0) + CHR$(77) AND SI1Cur = 1 THEN LET SI1Cur = 2: GOTO PrintSI1
IF SI1$ = CHR$(0) + CHR$(77) AND SI1Cur = 2 THEN LET SI1Cur = 3: GOTO PrintSI1
IF SI1$ = CHR$(0) + CHR$(77) AND SI1Cur = 3 THEN LET SI1Cur = 4: GOTO PrintSI1
IF SI1$ = CHR$(0) + CHR$(77) AND SI1Cur = 4 THEN LET SI1Cur = 1: GOTO PrintSI1
IF SI1$ = CHR$(0) + CHR$(75) AND SI1Cur = 1 THEN LET SI1Cur = 4: GOTO PrintSI1
IF SI1$ = CHR$(0) + CHR$(75) AND SI1Cur = 2 THEN LET SI1Cur = 1: GOTO PrintSI1
IF SI1$ = CHR$(0) + CHR$(75) AND SI1Cur = 3 THEN LET SI1Cur = 2: GOTO PrintSI1
IF SI1$ = CHR$(0) + CHR$(75) AND SI1Cur = 4 THEN LET SI1Cur = 3: GOTO PrintSI1
IF SI1$ = CHR$(13) THEN GOTO SI1Enter
LOOP

SI1Enter:
IF SI1Cur = 1 THEN LET Port = 1
IF SI1Cur = 2 THEN LET Port = 2
IF SI1Cur = 3 THEN LET Port = 3
IF SI1Cur = 4 THEN LET Port = 4
GOTO AfterSI:
SI2:
LET SI2Cur = 1
LOCATE x, y, 0
COLOR 7: PRINT "["; : COLOR 15: PRINT "oN"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "oFF"; : COLOR 7: PRINT "]"
PrintSI2:
LOCATE x, y, 0
IF SI2Cur = 1 THEN COLOR 7: PRINT "["; : COLOR 15: PRINT "oN"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "oFF"; : COLOR 7: PRINT "]"
IF SI2Cur = 2 THEN COLOR 7: PRINT "["; : COLOR 8: PRINT "oN"; : COLOR 7: PRINT "/"; : COLOR 15: PRINT "oFF"; : COLOR 7: PRINT "]"
DO
LET SI2$ = INKEY$
IF SI2$ = CHR$(0) + CHR$(77) AND SI2Cur = 1 THEN LET SI2Cur = 2: GOTO PrintSI2
IF SI2$ = CHR$(0) + CHR$(77) AND SI2Cur = 2 THEN LET SI2Cur = 1: GOTO PrintSI2
IF SI2$ = CHR$(0) + CHR$(75) AND SI2Cur = 2 THEN LET SI2Cur = 1: GOTO PrintSI2
IF SI2$ = CHR$(0) + CHR$(75) AND SI2Cur = 1 THEN LET SI2Cur = 2: GOTO PrintSI2
IF SI2$ = CHR$(13) THEN GOTO SI2Enter
LOOP
SI2Enter:
IF SI2Cur = 1 THEN LET Sounds = 1
IF SI2Cur = 2 THEN LET Sounds = 0
GOTO AfterSI:
SI3:
LET SI3Cur = 1
LOCATE x, y, 0
COLOR 7: PRINT "["; : COLOR 15: PRINT "y"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "N"; : COLOR 7: PRINT "]"
PrintSI3:
LOCATE x, y, 0
IF SI3Cur = 1 THEN COLOR 7: PRINT "["; : COLOR 15: PRINT "y"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "N"; : COLOR 7: PRINT "]"
IF SI3Cur = 2 THEN COLOR 7: PRINT "["; : COLOR 8: PRINT "y"; : COLOR 7: PRINT "/"; : COLOR 15: PRINT "N"; : COLOR 7: PRINT "]"
DO
LET SI3$ = INKEY$
IF SI3$ = CHR$(0) + CHR$(77) AND SI3Cur = 1 THEN LET SI3Cur = 2: GOTO PrintSI3
IF SI3$ = CHR$(0) + CHR$(77) AND SI3Cur = 2 THEN LET SI3Cur = 1: GOTO PrintSI3
IF SI3$ = CHR$(0) + CHR$(75) AND SI3Cur = 2 THEN LET SI3Cur = 1: GOTO PrintSI3
IF SI3$ = CHR$(0) + CHR$(75) AND SI3Cur = 1 THEN LET SI3Cur = 2: GOTO PrintSI3
IF SI3$ = CHR$(13) THEN GOTO SI3Enter
LOOP
SI3Enter:
IF SI3Cur = 1 THEN LET Corr = 1
IF SI3Cur = 2 THEN LET Corr = 0
GOTO AfterSI:
SI4:
LET SI4Cur = 1
LOCATE x, y, 0
COLOR 7: PRINT "["; : COLOR 15: PRINT "y"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "N"; : COLOR 7: PRINT "]"
PrintSI4:
LOCATE x, y, 0
IF SI4Cur = 1 THEN COLOR 7: PRINT "["; : COLOR 15: PRINT "y"; : COLOR 7: PRINT "/"; : COLOR 8: PRINT "N"; : COLOR 7: PRINT "]"
IF SI4Cur = 2 THEN COLOR 7: PRINT "["; : COLOR 8: PRINT "y"; : COLOR 7: PRINT "/"; : COLOR 15: PRINT "N"; : COLOR 7: PRINT "]"
DO
LET SI4$ = INKEY$
IF SI4$ = CHR$(0) + CHR$(77) AND SI4Cur = 1 THEN LET SI4Cur = 2: GOTO PrintSI4
IF SI4$ = CHR$(0) + CHR$(77) AND SI4Cur = 2 THEN LET SI4Cur = 1: GOTO PrintSI4
IF SI4$ = CHR$(0) + CHR$(75) AND SI4Cur = 2 THEN LET SI4Cur = 1: GOTO PrintSI4
IF SI4$ = CHR$(0) + CHR$(75) AND SI4Cur = 1 THEN LET SI4Cur = 2: GOTO PrintSI4
IF SI4$ = CHR$(13) THEN GOTO SI4Enter
LOOP
SI4Enter:
IF SI4Cur = 1 THEN LET HangUp = 1
IF SI4Cur = 2 THEN LET HangUp = 0
GOTO AfterSI:





AfterSI:
LOCATE , , 1
END SUB

DEFINT A-Z
FUNCTION TinyInput$ (x, y, Original$, Length, AutoCap, Allowed$, highest, lowest)
StartOfI:
COLOR 15
LOCATE x, y, 1
PRINT Original$ + SPACE$(Length - LEN(Original$));
LOCATE x, y, 1
LET CursorPos = x + 2
DO
DO
   Ky$ = INKEY$
LOOP UNTIL Ky$ <> ""
  IF AutoCap THEN Ky$ = UCASE$(Ky$)
TinyInputColor:
  LET col = INT(RND * 3) + 1
  IF lcol = col THEN GOTO TinyInputColor
  IF col = 1 THEN LET co = 7
  IF col = 2 THEN LET co = 8
  IF col = 3 THEN LET co = 15
  LET lcol = col
  SELECT CASE ASC(Ky$)             'integer compares are faster than
                                   'string compares
     CASE 13                       '<Enter> time to go
       TinyInput$ = total$         'Function returns our string
       IF total$ = "" THEN GOTO AfterBlankString
       LOCATE , , 0:  EXIT DO'off cursor; exit loop to exit function
AfterBlankString:
     CASE 8                        'Backspace
       IF LEN(total$) THEN total$ = LEFT$(total$, LEN(total$) - 1)
       LOCATE x, y: PRINT total$ + " ";
       LOCATE , POS(0) - 1
    
     CASE 27                       'Escape (doesn't exit??)
        IF AutoCap THEN Ky$ = UCASE$(Ky$)
        total$ = "":
        LOCATE x, y
        PRINT SPACE$(Length); : LOCATE , y
        IF AutoCap THEN Ky$ = UCASE$(Ky$)
   
     CASE 1 TO 8, 11 TO 255       'all other keys (exc. tab & lf)
        IF LEN(Allowed$) THEN IF INSTR(Allowed$, Ky$) = 0 THEN Ky$ = ""
        IF LEN(Ky$) AND LEN(total$) < Length THEN
            total$ = total$ + Ky$
            COLOR co
            PRINT Ky$;
        END IF
    END SELECT
LOOP
IF highest <> 0 THEN
   IF VAL(total$) > highest THEN
      LET total$ = ""
      GOTO StartOfI
   END IF
END IF
IF lowest <> 0 THEN
   IF VAL(total$) < lowest THEN
      LET total$ = ""
      GOTO StartOfI
   END IF
END IF

LOCATE x, y: PRINT total$
END FUNCTION

DEFSNG A-Z
SUB WMS (Status)
IF Status = 1 THEN
   LOCATE 10, 33
   PRINT "                                           "
   CoolPrint 10, 33, "Initalizing Modem", 0, 0
END IF
IF Status = 2 THEN
   LOCATE 10, 33
   PRINT "                                           "
   LET WMSFN$ = "Dialing " + FoneNumber$
   CoolPrint 10, 33, WMSFN$, 0, 0
END IF
IF Status = 3 THEN
   LOCATE 10, 33
   PRINT "                                           "
   CoolPrint 10, 33, "Waiting. . .", 0, 0
END IF
IF Status = 4 THEN
   LOCATE 10, 33
   PRINT "                                           "
   LET WMSFN$ = "Dialing " + FoneNumber$ + " (With Sounds OFF)"
   CoolPrint 10, 33, WMSFN$, 0, 0
END IF
IF Status = 5 THEN
   LOCATE 10, 33
   PRINT "                                           "
   CoolPrint 10, 33, "Fone number is busy, hanging up.", 0, 0
END IF
END SUB
