'===========================================================================
' 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:               '<!--- WARNING - Do not change this... ---!>
 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
