'=========================================================================== ' Subject: E-MAIL PROGRAM Date: 06-24-97 (21:26) ' Author: Michael G. Stewart Code: QB, QBasic, PDS ' Origin: mikegs@juno.com Packet: MISC.ABC '=========================================================================== DECLARE SUB clearm () DECLARE SUB writem () DECLARE SUB choice () DECLARE SUB readm () DECLARE SUB mainscreen () DECLARE SUB login () DECLARE SUB quit () DECLARE SUB center (row%, text$) DECLARE SUB button (x1%, y1%, x2%, y2%, UpDown%) DECLARE SUB intro () DECLARE SUB getmouse (mode%) DECLARE SUB initmouse () DECLARE SUB mouse (OnOff%) DECLARE SUB readdata () DECLARE FUNCTION Interupt% (Num%, ax%, bx%, cx%, dx%) DIM SHARED xcoord%, ycoord%, click% DIM SHARED ml%(45) DIM SHARED fln$ DIM SHARED n$ DEFINT A-Z readdata initmouse getmouse mode% intro login choice MS.Data: ' DATA 55,8b,ec,56,57 DATA 8b,76,0c,8b,04 DATA 8b,76,0a,8b,1c DATA 8b,76,08,8b,0c DATA 8b,76,06,8b,14 DATA cd,21 DATA 8b,76,0c,89,04 DATA 8b,76,0a,89,1c DATA 8b,76,08,89,0c DATA 8b,76,06,89,14 DATA 5f,5e,5d DATA ca,08,00 DATA # SUB button (x1, y1, x2, y2, UpDown) SELECT CASE UpDown CASE 1 'unpushed LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 15 LINE (x1, y1)-(x1, y2 + 1), 15 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 8 LINE (x2 + 1, y2 + 1)-(x2 + 1, y1), 8 CASE 2 'pushed LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 8 LINE (x1, y1)-(x1, y2 + 1), 8 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 15 LINE (x2 + 1, y2 + 1)-(x2 + 1, y1), 15 CASE 3 '[] LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 15 LINE (x1, y1)-(x1, y2 + 1), 15 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 0 LINE (x1 + 2, y1 + 2)-(x2 - 2, y2 - 2), 8, B LINE (x1 + 2, y1 + 2)-(x2 - 2, y1 + 1), 8, BF CASE 4 '_ LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 15 LINE (x1, y1)-(x1, y2 + 1), 15 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 8 LINE (x2 + 1, y2 + 1)-(x2 + 1, y1), 8 LINE (x1 + 2, y2 - 2)-(x2 - 2, y2 - 1), 8, BF CASE 5 'X LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 15 LINE (x1, y1)-(x1, y2 + 1), 15 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 8 LINE (x2 + 1, y2 + 1)-(x2 + 1, y1), 8 LINE (x1 + 4, y1 + 3)-(x1 + 7, y1 + 6), 8, BF LINE (x1 + 3, y1 + 2)-(x1 + 4, y1 + 3), 8, BF LINE (x1 + 2, y1 + 1)-(x1 + 3, y1 + 2), 8, BF LINE (x1 + 7, y1 + 2)-(x1 + 8, y1 + 3), 8, BF LINE (x1 + 8, y1 + 1)-(x1 + 9, y1 + 2), 8, BF LINE (x1 + 3, y1 + 6)-(x1 + 4, y1 + 7), 8, BF LINE (x1 + 2, y1 + 7)-(x1 + 2, y1 + 8), 8, BF LINE (x1 + 7, y1 + 6)-(x1 + 8, y1 + 7), 8, BF LINE (x1 + 8, y1 + 7)-(x1 + 9, y1 + 8), 8, BF CASE 6 '\/ a = (x2 - x1) / 2 b = (y2 - y1) / 2 LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 15 LINE (x1, y1)-(x1, y2 + 1), 15 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 8 LINE (x2 + 1, y2 + 1)-(x2 + 1, y1), 8 LINE (x1 + a, y2 - 2)-(x1 + 2, y1 + 2), 8 LINE (x1 + a, y2 - 2)-(x2 - 2, y1 + 2), 8 LINE (x1 + 2, y1 + 2)-(x2 - 2, y1 + 2), 8 PAINT (x1 + 5, y1 + 5), 8, 8 CASE 50 'X disabled LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 15 LINE (x1, y1)-(x1, y2 + 1), 15 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 8 LINE (x2 + 1, y2 + 1)-(x2 + 1, y1), 8 LINE (x1 + 4, y1 + 3)-(x1 + 7, y1 + 6), 15, BF LINE (x1 + 3, y1 + 2)-(x1 + 4, y1 + 3), 15, BF LINE (x1 + 2, y1 + 1)-(x1 + 3, y1 + 2), 15, BF LINE (x1 + 7, y1 + 2)-(x1 + 8, y1 + 3), 15, BF LINE (x1 + 8, y1 + 1)-(x1 + 9, y1 + 2), 15, BF LINE (x1 + 3, y1 + 6)-(x1 + 4, y1 + 7), 15, BF LINE (x1 + 2, y1 + 7)-(x1 + 2, y1 + 8), 15, BF LINE (x1 + 7, y1 + 6)-(x1 + 8, y1 + 7), 15, BF LINE (x1 + 8, y1 + 7)-(x1 + 9, y1 + 8), 15, BF CASE 30 '[] Disabled LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 15 LINE (x1, y1)-(x1, y2 + 1), 15 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 0 LINE (x1 + 2, y1 + 2)-(x2 - 2, y2 - 2), 15, B LINE (x1 + 2, y1 + 2)-(x2 - 2, y1 + 1), 15, BF CASE 40 '_ Disabled LINE (x1, y1)-(x2, y2), 7, BF LINE (x1, y1)-(x2 - 1, y1), 15 LINE (x1, y1)-(x1, y2 + 1), 15 LINE (x1, y2 + 1)-(x2 + 1, y2 + 1), 8 LINE (x2 + 1, y2 + 1)-(x2 + 1, y1), 8 LINE (x1 + 2, y2 - 2)-(x2 - 2, y2 - 1), 15, BF END SELECT END SUB SUB center (row%, text$) LOCATE row%, 41 - LEN(text$) / 2 PRINT text$; END SUB SUB choice mainscreen button 150, 125, 490, 225, 1 LINE (151, 126)-(489, 224), 1, BF center 17, "Your E-Mail Options Are:" button 200, 172, 250, 187, 1 LINE (201, 173)-(249, 186), 1, BF LOCATE 23, 27 PRINT "Read" button 290, 172, 340, 187, 1 LINE (291, 173)-(339, 186), 1, BF center 23, "Write" button 380, 172, 430, 187, 1 LINE (381, 173)-(429, 186), 1, BF LOCATE 23, 49 PRINT "Clear" mouse 1 DO getmouse 0 IF click% = 1 AND xcoord% >= 200 AND xcoord% <= 250 AND ycoord% >= 172 AND ycoord% <= 187 THEN button 200, 172, 250, 187, 2: readm IF click% = 1 AND xcoord% >= 290 AND xcoord% <= 340 AND ycoord% >= 172 AND ycoord% <= 187 THEN button 290, 172, 340, 187, 2: writem IF click% = 1 AND xcoord% >= 380 AND xcoord% <= 430 AND ycoord% >= 172 AND ycoord% <= 187 THEN button 380, 172, 430, 187, 2: clearm IF click% = 1 AND xcoord% >= 629 AND xcoord% <= 639 AND ycoord% >= 1 AND ycoord% <= 10 THEN button 629, 1, 639, 10, 2: SLEEP 1: button 629, 1, 639, 10, 5: quit LOOP mouse 0 END SUB SUB clearm fln$ = n$ + ".eml" OPEN fln$ FOR OUTPUT AS #7 CLOSE #7 choice END SUB SUB getmouse (mode%) R% = Interupt%(&H33, 3, bx%, cx%, dx%) click% = bx% IF mode% THEN xcoord% = cx% / 16 + 1 ycoord% = dx% / 16 + 1 ELSE xcoord% = cx% ycoord% = dx% END IF END SUB SUB initmouse 'Calls mouse interrupts... R% = Interupt%(&H33, 0, bx%, cx%, dx%) END SUB FUNCTION Interupt% (Num%, ax%, bx%, cx%, dx%) IF ml%(0) = 0 THEN 'Error, no MS.Data statment... BEEP BEEP END END IF DEF SEG = VARSEG(ml%(0)) POKE VARPTR(ml%(0)) + 26, Num% CALL ABSOLUTE(ax%, bx%, cx%, dx%, VARPTR(ml%(0))) Interupt% = ax% END FUNCTION SUB intro LOGO$ = _ "C14 D30 R30 U30 L30 BF4 P14,14 C0 BD20 U4 R1 F3 D1 L4 BE2 P0,0 BG2 BU4 E10 F4 G10 H2 E10 BH2 C12 E3 F4 G3 H4 BR3 P12,12 C3 BL3 BG10 BD5 BL1 L2 D2 R2 BL2 D2 R2 BU2 BR2 R2 BR2 BD2 U4 F2 E2 D4 BR2 U3 E1 F1 D3 U2 L1 R1 BR2 BU2 R1 D4 L1 R2 L1 U4 R1 BR2 D4 R2 C4 BD5 L2 R1 D4 U4 BR2 BD4 U4 F2 E2 D4" _ SCREEN 12: WIDTH 80, 30 PAINT (71, 1), 3, 3 button 200, 180, 440, 300, 1 LINE (202, 182)-(438, 298), 15, B LINE (204, 184)-(436, 296), 0, BF LINE (205, 185)-(435, 295), 4, B LINE (199, 179)-(442, 302), 3, B COLOR 4 center 13, "QBasic E-Mail" center 14, " for Windows 95" COLOR 14 center 16, "Press any key or click mouse" COLOR 4 center 17, "(C) 1997 Gascan Inc." center 18, "All Rights Reseved" DRAW "BM210,190" DRAW "X" + VARPTR$(LOGO$) mouse 1 DO getmouse 0 IF click% = 1 OR click% = 2 THEN EXIT DO IF INKEY$ <> "" THEN EXIT DO LOOP WHILE INKEY$ = "" mouse 0 END SUB SUB login SCREEN 9 WIDTH 80, 43 CLS COLOR 15, 1 button 200, 85, 440, 200, 1 LINE (199, 84)-(442, 202), 3, B LINE (201, 86)-(439, 98), 1, BF LOCATE 12, 28 PRINT "QBasic E-Mail - Login" button 427, 87, 437, 97, 50 button 202, 98, 438, 198, 2 LINE (204, 100)-(436, 196), 1, BF PAINT (1, 1), 3, 3 COLOR 14 center 22, "To Create a New Account," center 23, "Type 'Create' at the Prompt." COLOR 15 LOCATE 14, 28 PRINT "Account Name: " button 323, 101, 390, 111, 2 LINE (324, 102)-(389, 111), 1, BF LOCATE 16, 28 PRINT "Password: " button 323, 118, 390, 128, 2 LINE (324, 119)-(389, 128), 1, BF LOCATE 14, 42 INPUT "", n$ IF n$ = "Mike" THEN pass$ = "2928751" ELSEIF n$ = "justin" THEN pass$ = "123" ELSEIF n$ = "ginanne" THEN pass$ = "8484" ELSEIF n$ = "Kim" THEN pass$ = "sew" ELSEIF n$ = "Quit" THEN quit ELSE COLOR 4 center 18, "Incorrect Login" SLEEP 2 login END IF LOCATE 16, 42 b = LEN(pass$) FOR a = 1 TO b PRINT "*"; NEXT a LOCATE 16, 42 COLOR 1 INPUT "", p$ COLOR 15 IF p$ <> pass$ THEN COLOR 4 center 18, "Password Incorrect!" SLEEP 2 login ELSE center 18, "Login Correct!" center 19, "Loading Account:" nme$ = UCASE$(n$) acc$ = nme$ + "@GASCAN.QBASIC.EML" center 20, acc$ LOCATE 21, 32 PRINT "Please Wait"; FOR a = 1 TO 5 PRINT "."; SLEEP 1 NEXT a END IF fln$ = n$ + ".eml" END SUB SUB mainscreen CLS COLOR 15, 1 LOCATE 1 PRINT " QBasic E-Mail - "; fln$ button 629, 1, 639, 10, 5 FOR a% = 3 TO 41 LOCATE a%, 1 PRINT SPACE$(80) NEXT a% LOCATE 3, 1 PRINT STRING$(80, 205) END SUB SUB mouse (OnOff%) IF OnOff% = 0 THEN OnOff% = 2 ELSE OnOff% = 1 R% = Interupt%(&H33, OnOff%, bx%, cx%, dx%) END SUB SUB quit mouse 0 SYSTEM END SUB SUB readdata 'Reads machine language thingy MS.Data... RESTORE MS.Data DEF SEG = VARSEG(ml%(0)) FOR i% = 0 TO 99 READ Octet$ IF Octet$ = "#" THEN EXIT FOR POKE VARPTR(ml%(0)) + i%, VAL("&H" + Octet$) NEXT i% END SUB SUB readm mainscreen COLOR 15 fln$ = n$ + ".eml" OPEN fln$ FOR INPUT AS #2 a% = 3 DO UNTIL EOF(2) 'do untill end of file DO WHILE rec$ <> "End of Message" 'do untill end of message DO WHILE a% <> 40 'do untill end of screen a% = a% + 1 LINE INPUT #2, rec$ LOCATE a%, 2 PRINT rec$ IF rec$ = "End of Message" THEN EXIT DO LOOP IF rec$ = "End of Message" THEN EXIT DO LOCATE a% + 1, 2 PRINT "Press Esc to view next page." a% = 3 SLEEP mainscreen LOOP rec$ = "" LOCATE a% + 2, 2 a% = 3 PRINT "Press any key to view next message." SLEEP mainscreen LOOP a% = 3 CLOSE #2 OPEN "all.eml" FOR INPUT AS #2 DO UNTIL EOF(2) 'do untill end of file DO WHILE rec$ <> "End of Message" 'do untill end of message DO WHILE a% <> 40 'do untill end of screen a% = a% + 1 LINE INPUT #2, rec$ LOCATE a%, 2 PRINT rec$ IF rec$ = "End of Message" THEN EXIT DO LOOP IF rec$ = "End of Message" THEN EXIT DO LOCATE a% + 1, 2 PRINT "Press Esc to view next page." a% = 3 SLEEP mainscreen LOOP rec$ = "" IF EOF(2) THEN EXIT DO LOCATE a% + 2, 2 a% = 3 PRINT "Press any key to view next message." SLEEP mainscreen LOOP CLOSE #2 COLOR 12 center 42, "End of E-Mail File, Or No E-Mail In File." center 43, "Press Enter to Continue." SLEEP choice END SUB SUB writem mouse 0 mainscreen COLOR 14 center 4, "To Write Mail, you will be using MS-DOS edit." center 5, "When you are done writing your E-Mail," center 6, "Press Alt, F, X, Enter." center 7, "Do Not Write Past Column 78" center 8, "Try to Keep your Message to 40 Lines." COLOR 15 center 10, "Choose the person to write to:" COLOR 14 center 12, "E-Mail Address (Name)" COLOR 15 center 13, "Mike@GASCAN.QBASIC.EML (Michael G. Stewart)" center 14, "justin@GASCAN.QBASIC.EML (Justin C. Stewart)" center 15, "ginanne@GASCAN.QBASIC.EML (Ginanne K. Stewart)" center 16, "Kim@GASCAN.QBASIC.EML (Kim Stewart)" center 17, "Internet@GASCAN.QBASIC.EML (Anyone Else)" center 18, "All@GASCAN.QBASIC.EML (All Users)" mouse 1 DO getmouse 0 LOCATE 10, 1: PRINT ycoord% IF click% = 1 AND ycoord% >= 96 AND ycoord% < 104 THEN wrto$ = "Mike": EXIT DO IF click% = 1 AND ycoord% >= 104 AND ycoord% < 112 THEN wrto$ = "justin": EXIT DO IF click% = 1 AND ycoord% >= 112 AND ycoord% < 120 THEN wrto$ = "ginanne": EXIT DO IF click% = 1 AND ycoord% >= 120 AND ycoord% < 128 THEN wrto$ = "Kim": EXIT DO IF click% = 1 AND ycoord% >= 128 AND ycoord% < 136 THEN wrto$ = "Internet": EXIT DO IF click% = 1 AND ycoord% >= 136 AND ycoord% < 144 THEN wrto$ = "All": EXIT DO LOOP mouse 0 COLOR 14 IF wrto$ = "Mike" THEN center 13, "Mike@GASCAN.QBASIC.EML (Michael G. Stewart)" ELSEIF wrto$ = "justin" THEN center 14, "justin@GASCAN.QBASIC.EML (Justin C. Stewart)" ELSEIF wrto$ = "ginanne" THEN center 15, "ginanne@GASCAN.QBASIC.EML (Ginanne K. Stewart)" ELSEIF wrto$ = "Kim" THEN center 16, "Kim@GASCAN.QBASIC.EML (Kim Stewart)" ELSEIF wrto$ = "Internet" THEN center 17, "Internet@GASCAN.QBASIC.EML (Anyone Else)" COLOR 15 LOCATE 19, 30 INPUT "E-Mail Address: ", iadd$ ELSEIF wrto$ = "All" THEN center 18, "6) All@GASCAN.QBASIC.EML (All Users)" END IF LOCATE 21, 30 INPUT "Subject: ", sub$ SLEEP 5 SCREEN 0 WIDTH 80, 25 COLOR 7, 0 CLS SHELL "edit temp.eml" fln$ = wrto$ + ".eml" frm$ = n$ + "@GASCAN.QBASIC.EML" OPEN "temp.eml" FOR INPUT AS #6 OPEN fln$ FOR APPEND AS #4 PRINT #4, "Date: "; DATE$ PRINT #4, "Time: "; TIME$ PRINT #4, "Subject: "; sub$ PRINT #4, "From: "; frm$ PRINT #4, STRING$(78, 196) DO WHILE NOT EOF(6) LINE INPUT #6, mess$ PRINT #4, mess$ LOOP PRINT #4, "End of Message" CLOSE #4 CLOSE #6 KILL "temp.eml" SCREEN 9 WIDTH 80, 43 CLS COLOR 15, 1 choice END SUB