'=========================================================================== ' Subject: NETWORK ACCESSORY WITH EMAILING Date: 08-26-97 (14:44) ' Author: Michael G. Stewart Code: QB, QBasic, PDS ' Origin: mikegs@juno.com Packet: NETWORK.ABC '=========================================================================== 'Access Levels (Logon.Level) ' 1 = System Operator (SysOp) ' 2 = Registered User ' 3 = Guest '-------------------- 'To End Program, Press [ESC] After Logging Off '-------------------- 'This Is A Program To Assist Networks. 'Put QBasic On The Network Drive. 'Run This Program From Any Directory. 'The First Time You Run It, It Will Set Up The Files ' In The Same Directory QBasic Is In. 'All Files Can Be Accessed At The Same Time. 'You Need To Write Up A Network Information Page. ' Save It As "info.net" In The Directory That QBasic ' Is In. '-------------------- 'If you wish to use this code (or any parts of it) ' in a program of your own, then do so, but realize ' this is under no warranty of any kind. The only thing ' I ask you to do is include my name in your program. '-------------------- 'QNET (C) 1997 Arrowhead Corporation, Public Domain. 'mikegs@juno.com '-------------------- 'Have Fun! DECLARE SUB winterm () DECLARE SUB winnote () DECLARE SUB newpass () DECLARE SUB info () DECLARE SUB wincalc () DECLARE SUB wincal () DECLARE SUB deletemail () DECLARE SUB logoff () DECLARE FUNCTION linput$ () DECLARE SUB writemail () DECLARE SUB bluescreen () DECLARE SUB readmail () DECLARE SUB viewinfo () DECLARE SUB killuser () DECLARE SUB sususer () DECLARE SUB settimedate () DECLARE SUB windows () DECLARE SUB dos () DECLARE SUB email () DECLARE SUB keywait () DECLARE SUB adduser () DECLARE FUNCTION Menu% () DECLARE SUB mainmenu () DECLARE FUNCTION sinput$ (Text$) DECLARE SUB login () DECLARE SUB center (Row%, Text$) DECLARE SUB drawscreen (title$) DECLARE SUB percent (Row%, Col%, pct%) drawscreen "Welcome! Loading And Starting QNet 1.0" percent 10, 15, 0 DIM SHARED options(1 TO 9) AS STRING * 20 TYPE mun num AS INTEGER END TYPE DIM SHARED N AS mun TYPE user login AS STRING * 7 password AS STRING * 7 level AS INTEGER END TYPE DIM SHARED logon AS user TYPE mail from AS STRING * 7 going AS STRING * 7 subject AS STRING * 50 id AS STRING * 50 message AS STRING * 800 END TYPE DIM SHARED emails AS mail TYPE info login AS STRING * 7 firstname AS STRING * 10 lastname AS STRING * 10 midini AS STRING * 1 number AS INTEGER END TYPE DIM SHARED file AS info SLEEP 1 percent 10, 15, 34 ON ERROR GOTO setup OPEN "user.net" FOR INPUT AS #1 CLOSE ON ERROR GOTO 0 OPEN "user.net" FOR RANDOM AS #1 OPEN "info.net" FOR RANDOM AS #2 OPEN "num.net" FOR RANDOM AS #3 setupdone: SLEEP 1 percent 10, 15, 64 SLEEP 1 percent 10, 15, 100 login setup: CLOSE BEEP percent 10, 15, 50 center 13, "Input SysOp Password: " LOCATE 13, 47 pass1$ = sinput$("") center 14, "Confirm SO Password: " LOCATE 14, 47 pass2$ = sinput$("") IF pass1$ = pass2$ THEN pass$ = pass1$ ELSE BEEP: GOTO setup N.num = 2 logon.login = "Guest" logon.password = "NONE" logon.level = 3 file.login = "Guest" file.firstname = "Guest" file.lastname = "Guest" file.midini = "" file.number = 1 OPEN "user.net" FOR RANDOM AS #1 OPEN "info.net" FOR RANDOM AS #2 OPEN "num.net" FOR RANDOM AS #3 PUT #3, 1, N PUT #1, 1, logon PUT #2, 1, file logon.login = "Sysop" logon.password = pass$ logon.level = 1 file.login = "Sysop" file.firstname = "System" file.lastname = "Operator" file.midini = "" file.number = 2 PUT #1, 2, logon PUT #2, 2, file GOTO setupdone RESUME SUB adduser drawscreen "Register/Add User" COLOR 15, 0 LOCATE 4, 1 PRINT "First Name: " PRINT "Last Name: " PRINT "Middle Initial: " PRINT "Login Name: " PRINT "Password: " LOCATE 4, 13: INPUT "", firstname$ LOCATE 5, 12: INPUT "", lastname$ LOCATE 6, 17: INPUT "", midini$ LOCATE 7, 13: INPUT "", logins$ LOCATE 8, 11: password$ = sinput$("") a% = logon.level N.num = N.num + 1 PRINT "User Number:"; N.num PRINT "User Added!" file.firstname = firstname$ file.lastname = lastname$ file.midini = midini$ file.login = logins$ file.number = N.num logon.login = logins$ logon.password = password$ logon.level = 2 PUT #1, file.number, logon PUT #2, file.number, file PUT #3, 1, N IF a% = 3 THEN GET #1, 1, logon GET #2, 1, file ELSEIF a% = 1 THEN GET #1, 2, logon GET #2, 2, file END IF SLEEP 3 mainmenu END SUB SUB bluescreen COLOR 15, 1 FOR a% = 3 TO 23 LOCATE a%, 1 PRINT SPACE$(80) NEXT a% END SUB SUB center (Row%, Text$) LOCATE Row%, 41 - (LEN(Text$) / 2) PRINT Text$ END SUB SUB deletemail files$ = logon.login + ".eml" KILL files$ drawscreen "E-Mail File Deleted!" SLEEP 3 email END SUB SUB dos CLS PRINT "To Return To This Program, Type 'Exit'." SHELL PRINT "Ending DOS Shell" SLEEP 3 mainmenu END SUB SUB drawscreen (title$) COLOR 7, 0 CLS COLOR 15, 1 PRINT SPACE$(80) center 1, " QNET V 1.1 by Arrowhead Corporation " FOR a% = 3 TO 23 LOCATE a% PRINT STRING$(80, 177) NEXT a% COLOR 7, 0 center 2, title$ END SUB SUB email drawscreen "E-Mail Menu" options$(1) = "Read Mail" options$(2) = "Write Mail" options$(3) = "Delete Mail" options$(4) = "Main Menu" options$(5) = "Logoff" FOR a% = 6 TO 9 options$(a%) = "----" NEXT a% DO o = Menu% IF o = 1 THEN readmail IF o = 2 THEN writemail IF o = 3 THEN deletemail IF o = 4 THEN mainmenu IF o = 5 THEN logoff IF o > 5 THEN BEEP LOOP END SUB SUB info drawscreen "QNET Information" bluescreen OPEN "info.net" FOR BINARY AS #4 FOR a% = 4 TO 24 LOCATE a%, 1 IF EOF(4) THEN EXIT FOR LINE INPUT #4, infos$ PRINT infos$ NEXT a% keywait CLOSE #4 mainmenu END SUB SUB keywait WHILE INKEY$ = "": WEND END SUB SUB killuser drawscreen "Delete User" LOCATE 5, 1: PRINT "Input Number or Login or Name: " LOCATE 5, 32: INPUT "", look$ b% = 0 DO b% = b% + 1 LOCATE 6, 1 PRINT "Searching Files For: "; look$; "! " IF b% < 11 THEN percent 7, 15, 0 FOR a% = b% TO 10 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 11 END IF IF b% > 10 AND b% < 21 THEN percent 7, 15, 20 FOR a% = b% TO 20 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 21 END IF IF b% > 20 AND b% < 31 THEN percent 7, 15, 40 FOR a% = b% TO 30 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 31 END IF IF b% > 30 AND b% < 41 THEN percent 7, 15, 60 FOR a% = b% TO 40 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 41 END IF IF b% > 40 AND b% < 51 THEN percent 7, 15, 80 FOR a% = b% TO 20 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 52 END IF IF b% = 52 THEN PRINT "No Match Found!" SLEEP 3 GET #2, 2, file mainmenu END IF BEEP PRINT "Delete"; file.number, file.login, file.firstname; " "; file.midini; ", "; file.lastname; " "; INPUT "? Y,N: ", del$ IF UCASE$(del$) <> "N" THEN EXIT DO LOOP file.login = "" file.firstname = "" file.midini = "" file.lastname = "" logon.login = "" logon.password = "" logon.level = 1 PUT #1, file.number, logon PUT #2, file.number, file PRINT "Deleted!" BEEP SLEEP 3 GET #1, 2, logon GET #2, 2, file mainmenu END SUB FUNCTION linput$ DO LOCATE CSRLIN, POS(1), 1 a = a + 1 kbd$ = "" DO WHILE kbd$ = "" kbd$ = "" kbd$ = INKEY$ LOOP IF kbd$ = CHR$(13) THEN EXIT DO IF kbd$ = CHR$(8) THEN in$ = LEFT$(in$, a - 1) a = a - 1 LOCATE CSRLIN, POS(1) - 1 PRINT " " LOCATE CSRLIN, POS(1) - 1 ELSE in$ = in$ + kbd$ a = a + 1 PRINT kbd$; END IF LOOP linput$ = in$ END FUNCTION SUB login drawscreen "Login" COLOR 15, 0 LOCATE 4 PRINT SPACE$(160) center 4, "Please Enter Your Login Name And Password." center 5, "If You Are Not A Registered User, Type 'Guest' At The Prompt." center 9, "Login Name: " center 11, "Password: " LOCATE 9, 43: INPUT "", logins$ IF logins$ = "Guest" THEN GET #1, 1, logon GET #2, 1, file LOCATE 11, 43 PRINT logon.password GOSUB goahead END IF LOCATE 11, 43: pass$ = sinput$("") logins$ = LEFT$(logins$ + " ", 7) pass$ = LEFT$(pass$ + " ", 7) DO a% = a% + 1 GET #1, a%, logon IF logins$ = logon.login THEN EXIT DO IF a% > 50 THEN EXIT DO LOOP GET #2, a%, file IF a% = 51 THEN COLOR 4, 0 center 13, "Incorrect Login Name!" SLEEP 3 login ELSE IF logon.password <> pass$ THEN COLOR 4, 0 center 13, "Password Incorrect!" SLEEP 3 login ELSE goahead: COLOR 2, 0 goahead$ = "Login And Password Correct!" center 13, goahead$ goahead$ = file.firstname + " " + file.midini + " " + file.lastname center 14, goahead$ SLEEP 3 mainmenu END IF END IF END SUB SUB logoff drawscreen "Logging Off! Good Bye!" GET #1, 51, logon GET #2, 51, user CLS SCREEN 12 LINE (200, 1)-(440, 45), 7, BF LINE (280, 46)-(360, 90), 4, BF LINE (125, 91)-(515, 91), 7 LINE (125, 91)-(320, 479), 7 LINE (515, 91)-(320, 479), 7 CIRCLE (320, 200), 100, 7 CIRCLE (320, 200), 99, 4 CIRCLE (320, 200), 98, 4 CIRCLE (320, 200), 97, 4 CIRCLE (320, 200), 96, 4 CIRCLE (320, 200), 95, 4 PAINT (127, 92), 7, 7 LINE (340, 103)-(245, 265), 4 LINE (300, 103)-(395, 265), 4 LINE (320, 103)-(235, 250), 4 LINE (320, 103)-(405, 250), 4 LINE (300, 103)-(340, 103), 4 LINE (235, 250)-(245, 265), 4 LINE (405, 250)-(395, 265), 4 CIRCLE (320, 150), 100, 4, 4.047111, 5.372889 CIRCLE (320, 130), 100, 4, 4.047111, 5.372889 PAINT (320, 110), 4, 4 PAINT (310, 110), 4, 4 PAINT (330, 110), 4, 4 PAINT (310, 130), 4, 4 PAINT (330, 130), 4, 4 PAINT (320, 235), 4, 4 PAINT (260, 235), 4, 4 PAINT (380, 235), 4, 4 center 2, " Press Any Key " DO WHILE kbd$ = "" kbd$ = "" kbd$ = INKEY$ IF kbd$ = CHR$(27) THEN SYSTEM LOCATE 5, 27 PRINT TIME$ LOCATE 5, 47 PRINT DATE$ LOOP CLS SCREEN 0 WIDTH 80, 25 login END SUB SUB mainmenu drawscreen "Main Menu" SELECT CASE logon.level CASE 1 'SysOp options$(1) = "Add User" options$(2) = "View User's Record" options$(3) = "Delete User" options$(4) = "Suspend User" options$(5) = "Set Time And Date" options$(6) = "Windows" options$(7) = "DOS" options$(8) = "E-Mail" options$(9) = "Logoff" o = Menu% IF o = 1 THEN adduser IF o = 2 THEN viewinfo IF o = 3 THEN killuser IF o = 4 THEN sususer IF o = 5 THEN settimedate IF o = 6 THEN windows IF o = 7 THEN dos IF o = 8 THEN email IF o = 9 THEN logoff CASE 2 'Registered User options$(1) = "Calculator (Win)" options$(2) = "Calender (Win)" options$(3) = "Terminal (Win)" options$(4) = "Notepad (Win)" options$(5) = "Windows" options$(6) = "DOS" options$(7) = "E-Mail" options$(8) = "Change Password" options$(9) = "Logoff" o = Menu% IF o = 1 THEN wincalc IF o = 2 THEN wincal IF o = 3 THEN winterm IF o = 4 THEN winnote IF o = 5 THEN windows IF o = 6 THEN dos IF o = 7 THEN email IF o = 8 THEN newpass IF o = 9 THEN logoff CASE 3 'Guest options$(1) = "Register" options$(2) = "Network Information" options$(3) = "Calculator (Win)" options$(4) = "Calender (Win)" options$(5) = "Terminal (Win)" options$(6) = "Notepad (Win)" options$(7) = "Windows" options$(8) = "DOS" options$(9) = "Logoff" o = Menu% IF o = 1 THEN adduser IF o = 2 THEN info IF o = 3 THEN wincalc IF o = 4 THEN wincal IF o = 5 THEN winterm IF o = 6 THEN winnote IF o = 7 THEN windows IF o = 8 THEN dos IF o = 9 THEN logoff END SELECT END SUB FUNCTION Menu% COLOR 15, 0 FOR a% = 1 TO 9 LOCATE a% + 3, 25 PRINT a%; SPACE$(32) LOCATE a% + 3, 30 PRINT options$(a%) NEXT a% cur% = 1 DO FOR a% = 1 TO 9 LOCATE a% + 3, 24 PRINT " " NEXT a% LOCATE cur% + 3, 24 PRINT ">" DO kbd$ = "" kbd$ = INKEY$ IF kbd$ = CHR$(13) THEN GOSUB chosen IF kbd$ = CHR$(0) + CHR$(&H48) THEN cur% = cur% - 1 IF cur% = 0 THEN cur% = 9 EXIT DO ELSEIF kbd$ = CHR$(0) + CHR$(&H50) THEN cur% = cur% + 1 IF cur% = 10 THEN cur% = 1 EXIT DO END IF IF VAL(kbd$) THEN cur% = VAL(kbd$) EXIT DO END IF LOOP LOOP chosen: Menu% = cur% END FUNCTION SUB newpass drawscreen "Change Password" LOCATE 4, 1 pass1$ = sinput$("Old Password: ") IF logon.password = pass1$ THEN pass2$ = sinput$("New Password: ") logon.password = pass2$ PUT #1, file.number, logon ELSE BEEP END IF mainmenu END SUB SUB percent (Row%, Col%, pct%) LOCATE Row%, Col% COLOR 15, 0 PRINT SPACE$(50) LOCATE Row% + 1, Col% + 23 PRINT pct% LOCATE Row%, Col% IF pct% > 0 THEN FOR a% = 2 TO pct% STEP 2 PRINT "Û"; NEXT a% END IF END SUB SUB readmail drawscreen "Read Mail" bluescreen files$ = logon.login + ".eml" OPEN files$ FOR RANDOM AS #4 LEN = LEN(emails) IF LOF(4) / 914 > 0 THEN FOR a% = 1 TO LOF(4) / 914 bluescreen LOCATE 4, 1 GET #4, a%, emails PRINT "Message ID: "; emails.id PRINT "From: "; emails.from PRINT "Subject: "; emails.subject PRINT STRING$(80, "Ä") mess$ = emails.message FOR b% = 1 TO 10 c% = (b% * 80) - 79 PRINT MID$(mess$, c%, 80) NEXT b% PRINT STRING$(80, "Ä") center 19, "Press Any Key For Next Message" keywait NEXT a% ELSE center 10, "No E-Mail Messages!" END IF center 19, "Press Any Key To Return To Menu" CLOSE #4 keywait email END SUB SUB settimedate drawscreen "Set Date And Time" curtime$ = "Current Time: " + TIME$ curdate$ = "Current Date: " + DATE$ center 5, curtime$ center 6, curdate$ INPUT "Change Time (N or Time[hh:mm:ss]): ", chtime$ IF UCASE$(chtime$) <> "N" THEN TIME$ = chtime$ END IF INPUT "Change Date (N or Time[mm-dd-yyyy]): ", chtime$ IF UCASE$(chtime$) <> "N" THEN DATE$ = chtime$ END IF curtime$ = "Current Time: " + TIME$ curdate$ = "Current Date: " + DATE$ center 9, curtime$ center 10, curdate$ SLEEP 3 mainmenu END SUB FUNCTION sinput$ (Text$) PRINT Text$; DO LOCATE CSRLIN, POS(1), 1 a = a + 1 kbd$ = "" DO WHILE kbd$ = "" kbd$ = "" kbd$ = INKEY$ LOOP IF kbd$ = CHR$(13) THEN EXIT DO IF kbd$ = CHR$(8) THEN in$ = LEFT$(in$, a - 1) a = a - 1 LOCATE CSRLIN, POS(1) - 1 PRINT " " LOCATE CSRLIN, POS(2) - 1 ELSE in$ = in$ + kbd$ a = a + 1 PRINT "*"; END IF LOOP sinput$ = in$ END FUNCTION SUB sususer drawscreen "Delete User" LOCATE 5, 1: PRINT "Input Number or Login or Name: " LOCATE 5, 32: INPUT "", look$ b% = 0 DO b% = b% + 1 LOCATE 6, 1 PRINT "Searching Files For: "; look$; "! " IF b% < 11 THEN percent 7, 15, 0 FOR a% = b% TO 10 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 11 END IF IF b% > 10 AND b% < 21 THEN percent 7, 15, 20 FOR a% = b% TO 20 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 21 END IF IF b% > 20 AND b% < 31 THEN percent 7, 15, 40 FOR a% = b% TO 30 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 31 END IF IF b% > 30 AND b% < 41 THEN percent 7, 15, 60 FOR a% = b% TO 40 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 41 END IF IF b% > 40 AND b% < 51 THEN percent 7, 15, 80 FOR a% = b% TO 20 GET #2, a%, file IF file.firstname = look$ THEN b% = 51: EXIT FOR IF file.lastname = look$ THEN b% = 51: EXIT FOR IF file.number = VAL(look$) THEN b% = 51: EXIT FOR IF file.login = look$ THEN b% = 51: EXIT FOR NEXT a% b% = 52 END IF percent 7, 15, 100 IF b% = 52 THEN PRINT "No Match Found!" SLEEP 3 GET #2, 2, file mainmenu END IF BEEP PRINT "Suspend"; file.number, file.login, file.firstname; " "; file.midini; ", "; file.lastname; " "; INPUT "? Y,N: ", del$ IF UCASE$(del$) <> "N" THEN EXIT DO LOOP GET #1, file.number, user user.access = 3 PUT #1, file.number, user PRINT "Suspended!" BEEP SLEEP 3 GET #1, 2, user GET #2, 2, file mainmenu END SUB SUB viewinfo drawscreen "View User Information" bluescreen LOCATE 4, 1 PRINT "Number", "Login Name", "First Name M Last Name" FOR a% = 1 TO 15 GET #2, a%, file PRINT file.number, file.login, file.firstname; " "; file.midini; " "; file.lastname NEXT a% keywait LOCATE 5, 1 FOR a% = 16 TO 30 GET #2, a%, file PRINT file.number, file.login, file.firstname; " "; file.midini; " "; file.lastname NEXT a% keywait LOCATE 5, 1 FOR a% = 31 TO 45 GET #2, a%, file PRINT file.number, file.login, file.firstname; " "; file.midini; " "; file.lastname NEXT a% keywait LOCATE 5, 1 FOR a% = 46 TO 60 GET #2, a%, file PRINT file.number, file.login, file.firstname; " "; file.midini; " "; file.lastname NEXT a% keywait GET #2, 2, file mainmenu END SUB SUB wincal CLS SHELL "Calender" mainmenu END SUB SUB wincalc SHELL "calc" mainmenu END SUB SUB windows drawscreen "Windows" center 9, "Press ALT+TAB To Use Windows" center 10, "When Done In Windows, Click On The QNET Button" center 11, "To Return To The Main Menu, Press Enter" WHILE INKEY$ <> CHR$(13): WEND mainmenu END SUB SUB winnote CLS SHELL "notepad" mainmenu END SUB SUB winterm CLS SHELL "terminal" mainmenu END SUB SUB writemail drawscreen "Write E-mail" bluescreen LOCATE 4, 1 id$ = RTRIM$(logon.login) + RIGHT$(DATE$, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2) + LEFT$(TIME$, 2) + MID$(TIME$, 4, 2) PRINT "Message ID: "; id$ INPUT "To: ", to$ INPUT "Subject: ", sub$ PRINT STRING$(80, "Ä") mess$ = linput$ LOCATE 18, 1 PRINT STRING$(80, "Ä") PRINT "Press Any Key To Send" keywait emails.id = id$ emails.subject = sub$ emails.going = to$ emails.from = logon.login emails.message = mess$ files$ = emails.going + ".eml" OPEN files$ FOR RANDOM AS #4 LEN = LEN(emails) a% = (LOF(4) / 914) + 1 PUT #4, a%, emails PRINT "Sent!" SLEEP 3 CLOSE #4 email END SUB