'BAMNIT.BAS '(C)BAM1997 DECLARE SUB getpress () DECLARE SUB lnput (txt$, L%, Row%, Col%) DECLARE SUB slide (Row, texter$) DECLARE SUB delay (seconds!) DECLARE SUB options () DECLARE SUB Connect () DECLARE SUB waitforcall () DECLARE SUB quitit () DECLARE SUB opencom () DECLARE SUB waitconnect () DECLARE SUB talk () DECLARE SUB bar () DECLARE SUB sendfile (file$) DECLARE SUB getfile (file$) DECLARE FUNCTION fixit$ (fixme$) DECLARE FUNCTION menu% () DECLARE FUNCTION fixnum$ (num$) COMMON SHARED comun$, comport%, dialtype$, direc$, volume$, pause, log$, logg, sflag% SCREEN 12 ON ERROR GOTO handler action$ = "openconfig" OPEN "C:\dos\bamnit.cfg" FOR INPUT AS 2 INPUT #2, comport% INPUT #2, dialtype$ INPUT #2, direc$ INPUT #2, volume$ INPUT #2, pause INPUT #2, log$ INPUT #2, logg CLOSE 2 comun$ = "COM" + LTRIM$(RTRIM$(STR$(comport%))) + ": 19200" CLS COLOR 9 slide 5, "BAMN IT!" COLOR 2 slide 6, "Hi-res version" COLOR 1 slide 9, "ΙΝΝΝΝΝΝΝΝΝΝ»" slide 10, "Ί(C)BAM1997Ί" slide 11, "ΘΝΝΝΝΝΝΝΝΝΝΌ" COLOR 4 slide 15, "Press any key" getpress DO choice = menu% SELECT CASE choice CASE 1: CALL Connect CASE 2: CALL waitforcall CASE 3: CALL options CASE 4: CALL quitit END SELECT LOOP SYSTEM handler: SELECT CASE ERR CASE 1: PRINT "NEXT without FOR" CASE 2: PRINT "Syntax error" CASE 3: PRINT "RETURN without GOSUB" CASE 4: PRINT "Out of DATA" CASE 5: PRINT "Illegal function call" CASE 6: PRINT "Overflow" CASE 7: PRINT "Out of memory" CASE 8: PRINT "Label not defined" CASE 9: PRINT "Subscript out of range" CASE 10: PRINT "Duplicate definition" CASE 11: PRINT "Division by zero" CASE 12: PRINT "Illegal in direct mode" CASE 13: PRINT "Type mismatch" CASE 14: PRINT "Out of string space" CASE 16: PRINT "String formula too complex" CASE 17: PRINT "Cannot continue" CASE 18: PRINT "Function not defined" CASE 19: PRINT "No RESUME" CASE 20: PRINT "RESUME without ERROR" CASE 24: PRINT "Device timeout" CASE 25: PRINT "Device fault" CASE 26: PRINT "FOR without NEXT" CASE 27: PRINT "Out of paper" CASE 29: PRINT "WHILE without WEND" CASE 30: PRINT "WEND without WHILE" CASE 33: PRINT "Duplicate label" CASE 35: PRINT "Subprogram not defined" CASE 37: PRINT "Argument-count mismatch" CASE 38: PRINT "Array not defined" CASE 40: PRINT "Variable required" CASE 50: PRINT "FIELD overflow" CASE 51: PRINT "Internal error" CASE 52: PRINT "Bad file name or number" CASE 53: PRINT "File not found" CASE 54: PRINT "Bad file mode" CASE 55: PRINT "File already open" CASE 56: PRINT "FIELD statement active" CASE 57: PRINT "Device I/O error" CASE 58: PRINT "File already exists" CASE 59: PRINT "Bad record length" CASE 61: PRINT "Drive " + ERDEV$ + " full." PRINT "Insert a new disk and press any key." PRINT " to exit." ch$ = INPUT$(1) IF ch$ = CHR$(27) THEN RESUME NEXT ELSE RESUME CASE 62: IF action$ = "openconfig" THEN CALL options CASE 63: PRINT "Bad record number" CASE 64: PRINT "Bad file name" CASE 67: PRINT "Too many files" CASE 68: PRINT "Device unavailable" CASE 69: PRINT "Communication-buffer overflow" CASE 70: PRINT "Permission denied" CASE 71: PRINT "Drive " + ERDEV$ + " not ready." PRINT "Insert a disk and press any key.": getpress RESUME CASE 72: PRINT "Disk-media error" CASE 73: PRINT "Feature unavailable" CASE 74: PRINT "Rename across disks" CASE 75: PRINT "Path/file access error" CASE 76: PRINT "Directory does not exist." PRINT "Create? (y/n)" DO ch$ = INPUT$(1) ch$ = UCASE$(ch$) LOOP UNTIL ch$ = "Y" OR ch$ = "N" IF ch$ = "Y" THEN MKDIR direc$ CHDIR direc$ ELSE RESUME NEXT END IF CASE ELSE: PRINT "Unexpected error": RESET: SYSTEM END SELECT PRINT "Error code:"; ERR RESUME NEXT SUB bar LOCATE 2, 1 COLOR 15 PRINT "ΝΞΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΞΝ" END SUB DIM SHARED handle$ SUB Connect CLS slide 1, "°°°±±²Ί Enter your name Ί²±±°°°" lnput handle$, 10, 3, 35 COLOR 5 slide 5, "°°°±±²Ί Number to call: Ί²±±°°°" lnput numtocall$, 14, 7, 33 numtocall$ = fixnum$(numtocall$) opencom delay .55 PRINT #1, volume$: delay .55 PRINT #1, "+++ATH": delay .55 PRINT #1, "ATD" + dialtype$ + numtocall$ waitconnect END SUB SUB delay (seconds!) STATIC Begin! = TIMER DO UNTIL (TIMER - Begin! > seconds!) OR (TIMER - Begin! < 0) LOOP END SUB FUNCTION fixit$ (fixme$) fixit$ = LTRIM$(RTRIM$(UCASE$(fixme$))) END FUNCTION FUNCTION fixnum$ (num$) DO WHILE INSTR(num$, "-") num$ = LEFT$(num$, INSTR(num$, "-") - 1) + RIGHT$(num$, LEN(num$) - INSTR(num$, "-")) LOOP fixnum$ = num$ END FUNCTION SUB getfile (file$) DO IF LOC(1) <> 0 THEN Inchar$ = INPUT$(1, #1) ELSE Inchar$ = "" LOOP UNTIL LOC(1) = 0 delay .75 OPEN file$ FOR OUTPUT AS #3 PRINT "Receiving " + file$ + "..." IF logg = 1 THEN PRINT #10, "Receiving " + file$ + "..." DO dta$ = INPUT$(1, #1) PRINT #3, dta$; LOOP UNTIL EOF(1) CLOSE #3 PRINT "Done Receiving." IF logg = 1 THEN PRINT #10, "Done Receiving." END SUB SUB getpress DO: LOOP WHILE INKEY$ = "" END SUB SUB lnput (txt$, L%, Row%, Col%) LOCATE Row%, Col% COLOR 12 FOR Times% = 1 TO L% PRINT "-"; NEXT LOCATE Row%, Col% COLOR 15 DO ax$ = INKEY$ SELECT CASE ax$ CASE CHR$(8): IF POS(0) <> 1 AND POS(0) > Col% THEN IF LEN(txt$) > 0 THEN txt$ = LEFT$(txt$, LEN(txt$) - 1) LOCATE , POS(0) - 1 COLOR 12 PRINT "-"; COLOR 15 LOCATE , POS(0) - 1 END IF CASE CHR$(13): PRINT EXIT SUB CASE ELSE: IF LEN(txt$) < L% THEN txt$ = txt$ + ax$ LOCATE , POS(0): PRINT ax$; END IF END SELECT LOOP END SUB FUNCTION menu% CLS DO 'a loop to draw the menu over and over until a valid option is typed COLOR 5 slide 1, "°°°±±²Ί BAMN IT! File Transmit Ί²±±°°°" slide 3, "1. Call someone" slide 4, "2. Wait for call" slide 5, "3. Set options" slide 6, "4. Exit" LOCATE 8, 36 INPUT "Choose: ", ch$ PRINT : PRINT 'go to the next line then skip a line LOOP UNTIL VAL(ch$) >= 1 AND VAL(ch$) <= 4 'until 1,2,3, or 4 is entered menu% = VAL(ch$) 'returns the typed option to the function's caller END FUNCTION 'DIM SHARED comport, direc$, comun$, volume$, pause, log$, logg SUB opencom RESET OPEN comun$ + ",N,8,1,BIN,RB2048,TB2048" FOR RANDOM AS #1 PRINT #1, "ATZ" END SUB SUB options CLOSE 10 DO CLS DO slide 1, "°°°±±²Ί Options Ί²±±°°°" slide 3, "1. Set COM port" slide 4, "2. Set dial mode" slide 5, "3. Set default directory" slide 6, "4. Set modem volume" slide 7, "5. Toggle pause mode" slide 8, "6. Set log information" slide 9, "(Esc to exit)" slide 11, "Choose:" opt$ = INPUT$(1) opt = VAL(opt$) LOOP UNTIL opt >= 1 AND opt <= 6 OR opt$ = CHR$(27) SELECT CASE opt CASE 1 DO LOCATE 13, 1 INPUT "COM port (1 or 2): ", comport% LOOP UNTIL comport% = 1 OR comport% = 2 CASE 2 DO LOCATE 13, 1 PRINT "(T)one or (P)ulse?" dialtype$ = INPUT$(1) dialtype$ = UCASE$(dialtype$) LOOP UNTIL dialtype$ = "T" OR dialtype$ = "P" CASE 3 LOCATE 13, 1 INPUT "Default dir: ", direc$ CHDIR direc$ CASE 4 LOCATE 13, 1 PRINT "Set volume: Loud ²" PRINT " Quiet ±" PRINT " Silent °" IF volume$ = "" THEN volume$ = "ATL/L0" IF volume$ = "ATM/M0" THEN volume = 15 IF volume$ = "ATL/L0" THEN volume = 14 IF volume$ = "ATL3" THEN volume = 13 DO UNTIL K$ = CHR$(13) LOCATE volume, 20 PRINT "" K$ = INKEY$ IF K$ = CHR$(0) + "H" THEN LOCATE volume, 20: PRINT " ": volume = volume - 1 IF K$ = CHR$(0) + "P" THEN LOCATE volume, 20: PRINT " ": volume = volume + 1 IF volume < 13 THEN volume = 13 IF volume > 15 THEN volume = 15 LOOP IF volume = 13 THEN volume$ = "ATL3" IF volume = 14 THEN volume$ = "ATL/L0" IF volume = 15 THEN volume$ = "ATM/M0" CASE 5 LOCATE 13, 1 PRINT "Use pause mode? (Pauses when screen is full, y/n)" DO ch$ = INPUT$(1) ch$ = UCASE$(ch$) LOOP UNTIL ch$ = "Y" OR ch$ = "N" IF ch$ = "Y" THEN pause = 1 IF ch$ = "N" THEN pause = 0 CASE 6 LOCATE 13, 1 PRINT "Use log? (Records modem conversations, y/n)" DO ch$ = INPUT$(1) ch$ = UCASE$(ch$) LOOP UNTIL ch$ = "Y" OR ch$ = "N" IF ch$ = "Y" THEN logg = 1 LOCATE 15, 1 PRINT "(Will be called log.txt)" LOCATE 14, 1 INPUT "Location of log file: ", log$ CHDIR log$ OPEN "log.txt" FOR OUTPUT AS #10 CLOSE 10 LOCATE 16, 1 PRINT "New log file put in " + log$ CHDIR direc$ ELSE logg = 0 END IF END SELECT comun$ = "COM" + LTRIM$(RTRIM$(STR$(comport%))) + ": 19200" IF opt$ = CHR$(27) THEN CLOSE OPEN "C:\dos\bamnit.cfg" FOR OUTPUT AS 2 WRITE #2, comport%, dialtype$, direc$, volume$, pause, log$, logg CLOSE 2 EXIT SUB END IF LOOP END SUB SUB quitit RESET: SYSTEM END SUB SUB sendfile (file$) DO IF LOC(1) <> 0 THEN Inchar$ = INPUT$(1, #1) ELSE Inchar$ = "" LOOP UNTIL LOC(1) = 0 delay .5 OPEN file$ FOR INPUT AS #3 PRINT "Sending " + file$ + "..." IF logg = 1 THEN PRINT #10, "Sending " + file$ + "..." DO dta$ = INPUT$(1, #3) PRINT #1, dta$; PRINT dta$; LOOP UNTIL EOF(3) CLOSE #3 DO IF LOC(1) <> 0 THEN Inchar$ = INPUT$(1, #1) ELSE Inchar$ = "" LOOP UNTIL LOC(1) = 0 PRINT "Done sending." IF logg = 1 THEN PRINT #10, "Done sending." sflag% = 0 END SUB SUB slide (Row, texter$) LOCATE Row, 40 - INT(LEN(texter$) / 2) PRINT texter$ END SUB SUB talk typerow% = 1 typecol% = 1 showrow% = 3 showcol% = 1 CLS bar DO K$ = INKEY$ SELECT CASE K$ CASE CHR$(27): PRINT #1, "+++ATH": PRINT #1, "ATZ": RESET: EXIT SUB CASE CHR$(8) IF typecol% > 1 THEN LOCATE 1, typecol% - 1 PRINT " ", LOCATE 1, typecol% - 1 text$ = LEFT$(text$, LEN(text$) - 1) END IF IF typecol% > 1 THEN typecol% = typecol% - 1 ch$ = "" CASE CHR$(13) 'text$ = text$ + CHR$(13) IF LEFT$(fixit$(text$), 6) = "[SEND]" THEN IF logg = 1 THEN PRINT #10, text$; sflag% = 1 CLS bar 'LOCATE 3, 1: PRINT "Negotiating..." 'IF logg = 1 THEN PRINT #10, "Negotiating..." touse$ = MID$(text$, 8) IF INSTR(filetosend$, " ") THEN filetosend$ = LEFT$(touse$, INSTR(touse$, " ") - 1) ELSE filetosend$ = touse$ END IF OPEN filetosend$ FOR RANDOM AS #3 filesize = (LOF(3) / 1024) filesize$ = fixit$(STR$(CINT(filesize))) + "K" CLOSE 3 PRINT #1, "ώ" PRINT #1, handle$ + " wishes to send" PRINT #1, filetosend$ + "." PRINT #1, "Size is " + filesize$ PRINT #1, "Do you accept? (y/n)" PRINT #1, "ω" 'DO UNTIL dta$ = "χ" OR dta$ = "ψ" IF LOC(1) <> 0 THEN dta$ = INPUT$(1, #1) ELSE dta$ = "" 'LOOP IF dta$ = "χ" THEN PRINT "Reply is yes.": IF logg = 1 THEN PRINT #10, "Reply is yes.": sendfile filetosend$ IF dta$ = "ψ" THEN PRINT "Reply is no.": IF logg = 1 THEN PRINT #10, "Reply is no." sendfile filetosend$ END IF 'text$ = handle$ + ":" + text$ LOCATE showrow%, showcol% COLOR 2 PRINT text$ IF logg = 1 THEN PRINT #10, text$; showrow% = showrow% + 1 showcol% = 1 COLOR 15 PRINT #1, text$ LOCATE 1, 1 PRINT SPACE$(80) typerow% = 1: typecol% = 1 text$ = "" CASE ELSE: IF POS(0) <= 79 - LEN(handle$) THEN LOCATE typerow%, typecol% text$ = text$ + K$ PRINT K$; IF K$ <> "" THEN typecol% = typecol% + 1 END IF END SELECT IF LOC(1) <> 0 THEN Inchar$ = INPUT$(1, #1) ELSE Inchar$ = "" IF Inchar$ <> "" THEN SELECT CASE Inchar$ CASE "ώ": CLS : bar: showcol% = 1: showrow% = 3 CASE "ω" IF sflag% = 0 THEN DO ans$ = INPUT$(1) ans$ = UCASE$(ans$) LOOP UNTIL ans$ = "Y" OR ans$ = "N" IF ans$ = "Y" THEN PRINT #1, "χ" DO LOCATE 10, 1: INPUT "Filename: ", filename$ LOOP UNTIL filename$ <> "" IF logg = 1 THEN PRINT #10, "Filename: " + filename$ PRINT #1, "χ": getfile filename$ END IF IF ans$ = "N" THEN PRINT #1, "ψ" END IF CASE ELSE: LOCATE showrow%, showcol% IF Inchar$ <> CHR$(13) THEN showcol% = showcol% + 1 ELSE showrow% = showrow% + 1 showcol% = 1 END IF PRINT Inchar$ IF logg = 1 THEN IF logg = 1 THEN PRINT #10, Inchar$; END SELECT IF showcol% = 80 THEN showrow% = showrow% + 1: showcol% = 1 IF showrow% = 27 THEN IF pause = 1 THEN LOCATE 28, 1: PRINT "(Press any key to continue)": getpress CLS : bar: showrow% = 3 END IF END IF LOOP END SUB SUB waitconnect CLS CHDIR log$ OPEN "log.txt" FOR OUTPUT AS 10 CHDIR direc$ COLOR 15 PRINT "Waiting for Connection..." Rot$ = "|" Rot% = 0 DO UNTIL RIGHT$(Con$, 8) = "CONNECT " OR RIGHT$(Con$, 4) = "BUSY" ' LOCATE 1, 26: PRINT Rot$ SELECT CASE Rot% CASE 1: Rot$ = "\" CASE 2: Rot$ = "-" CASE 3: Rot$ = "/" CASE 4: Rot$ = "|": Rot% = 0 END SELECT Rot% = Rot% + 1 aa$ = INKEY$ delay .08 IF aa$ = CHR$(27) THEN PRINT #1, "+++ATH": EXIT SUB IF LOC(1) <> 0 THEN PRINT M$; M$ = INPUT$(1, 1) Con$ = Con$ + M$ END IF LOOP IF RIGHT$(Con$, 4) = "BUSY" THEN EXIT SUB bps$ = "1" DO UNTIL VAL(bps$) = 0 IF LOC(1) <> 0 THEN bps$ = INPUT$(1, 1) LOOP DO UNTIL bps$ <> "0" IF LOC(1) <> 0 THEN bps$ = INPUT$(1, 1) LOOP 'IF Ty% = 1 THEN Connect ELSE Chat talk END SUB SUB waitforcall CLS slide 1, "°°°±±²Ί Enter your name Ί²±±°°°" lnput handle$, 10, 3, 35 opencom delay .5 PRINT #1, "+++ATH": delay .5 PRINT #1, volume$: delay .55 PRINT #1, "ATS0=1" waitconnect END SUB