1 CLS
DIM USL$(255)
COLOR 10, 0: PRINT "LOCAL MAIL v1.0, ";
COLOR 14, 0: PRINT "(c)2003 М.Бабичев"
COLOR 15, 0: PRINT "Добро пожаловать в систему локальной почты!"

'------------------------- Аутентификация :-) ----------------------------
COLOR 15, 0: PRINT "Введите ваше имя: ";
COLOR 12, 0: INPUT "", USER$
IF USER$ = "ALL" THEN GOTO 1
OPEN "MAILS" FOR INPUT AS #1           ' -
DO UNTIL EOF(1)                        '  \
INPUT #1, UNAME$, MSG$, FROM$, D$, T$  '   \  Проверка наличия пользователя
IF USER$ = FROM$ THEN R = R + 1        '   /
LOOP                                   '  /
CLOSE #1                               ' -
IF R > 0 THEN GOTO 5
PRINT "Вы новый пользователь? [Y/N] "
DO
Q0$ = INKEY$
IF Q0$ = "Y" OR Q0$ = "y" OR Q0$ = "Н" OR Q0$ = "н" THEN
        GOTO 3
        ELSEIF Q0$ = "N" OR Q0$ = "n" OR Q0$ = "Т" OR Q0$ = "т" THEN
        GOTO 1
        END IF
LOOP
'-------- Посылаем модератору письмо о регистрации нового юзера ----------
3 OPEN "MAILS" FOR APPEND AS #1
TO$ = "+MODERATOR"
MSG$ = "Новый пользователь " + USER$ + " вошел в систему"
D$ = DATE$
T$ = TIME$
WRITE #1, TO$, MSG$, USER$, D$, T$
CLOSE #1
'------------------------- Главное меню ----------------------------------
5 Q1 = 0
CLS
CLOSE
COLOR 10, 0: PRINT "LOCAL MAIL v1.0, ";
COLOR 14, 0: PRINT "(c)2003 М.Бабичев"
PRINT
COLOR 12, 0: PRINT "   1 "; : COLOR 15, 0: PRINT "- список пользователей"
COLOR 12, 0: PRINT "   2 "; : COLOR 15, 0: PRINT "- читать почту"
COLOR 12, 0: PRINT "   3 "; : COLOR 15, 0: PRINT "- написать письмо"
COLOR 12, 0: PRINT "   4 "; : COLOR 15, 0: PRINT "- удаление писем"
COLOR 12, 0: PRINT "   5 "; : COLOR 15, 0: PRINT "- выход в DOS"
DO
Q1$ = INKEY$
IF Q1$ = "5" THEN GOTO QUIT
IF Q1$ = "4" THEN GOTO 60
IF Q1$ = "3" THEN GOTO 20
IF Q1$ = "2" THEN GOTO 30
IF Q1$ = "1" THEN GOTO 50
LOOP
'--------------------- Пишем письмо --------------------------------------
20
PRINT
COLOR 11, 0: PRINT "------------------------------- Отправка почты --------------------------------"
R = 0
OPEN "MAILS" FOR INPUT AS #1
COLOR 15, 0
PRINT "  (Чтобы послать сообщение всем пользователям, ";
PRINT "напишите письмо адресату "; : COLOR 12, 0: PRINT "ALL"; : PRINT ")"
COLOR 10
PRINT
PRINT "   Письмо адресовано: "; : COLOR 12, 0: INPUT "", TO$
IF TO$ = "ALL" THEN GOTO 25
DO UNTIL EOF(1)  ' Проверка правильности адресата
INPUT #1, UNAME$, MSG$, FROM$, D$, T$
IF TO$ = FROM$ THEN R = R + 1
LOOP
IF R > 0 THEN GOTO 25
COLOR 12: PRINT "Пользователя "; TO$; " в списке нет!"
COLOR 11
PRINT
PRINT "Нажмите любую клавишу..."
SLEEP
CLOSE #1
GOTO 20
25 CLOSE #1
OPEN "MAILS" FOR APPEND AS #1
COLOR 10: PRINT "   Текст письма: "; : COLOR 15: INPUT "", MSG$
D$ = DATE$
T$ = TIME$
WRITE #1, TO$, MSG$, USER$, D$, T$
PRINT
COLOR 13: PRINT "   Ваше письмо сохранено!": COLOR 11
PRINT
PRINT "Нажмите любую клавишу..."
SLEEP
GOTO 5
'--------------------- Читаем письма -------------------------------------
30
PRINT
COLOR 11, 0: PRINT "------------------ Чтение личной почты и общих объявлений ---------------------"
PRINT
CLOSE #1
OPEN "MAILS" FOR INPUT AS #1
COLOR 15: PRINT "   Будете читать общие сообщения? [Y/N]"
M = 0
DO
Q7$ = INKEY$
IF Q7$ = "Y" OR Q7$ = "y" OR Q7$ = "Н" OR Q7$ = "н" THEN
31              DO UNTIL EOF(1)
                INPUT #1, UNAME$, MSG$, FROM$, D$, T$
                IF UNAME$ = "ALL" THEN
                        M = M + 1
                        COLOR 10
                        PRINT
                        PRINT "Сообщение от "; : COLOR 12: PRINT FROM$; : COLOR 10: PRINT " поступило "; : COLOR 13: PRINT D$; ", "; T$
                        COLOR 15: PRINT "-------------------------------------------------------------------------------"
                        PRINT MSG$
                        PRINT "-------------------------------------------------------------------------------"
                        COLOR 14: PRINT "Следующее сообщение? [Y/N]"
                         DO
                         Q2$ = INKEY$
                         IF Q2$ = "Y" OR Q2$ = "y" OR Q2$ = "Н" OR Q2$ = "н" THEN
                          GOTO 31
                         ELSEIF Q2$ = "N" OR Q2$ = "n" OR Q2$ = "Т" OR Q2$ = "т" THEN
                          GOTO 34
                         END IF
                         LOOP
                        GOTO 34
                END IF
                LOOP
                IF M = 0 THEN
                        COLOR 11
                        PRINT
                        PRINT "   НЕТ НИ ОДНОГО ШИРОКОВЕЩАТЕЛЬНОГО СООБЩЕНИЯ!"
                        ELSE COLOR 11: PRINT : PRINT "   ОБЩИХ СООБЩЕНИЙ БОЛЬШЕ НЕТ"
                        END IF
                GOTO 34
        ELSEIF Q7$ = "N" OR Q7$ = "n" OR Q7$ = "Т" OR Q7$ = "т" THEN
                GOTO 34
        END IF
LOOP
34
M = 0
PRINT : COLOR 11: PRINT "   Письма, адресованные "; : COLOR 12: PRINT USER$: COLOR 10
CLOSE #1
OPEN "MAILS" FOR INPUT AS #1
35 DO UNTIL EOF(1)
INPUT #1, UNAME$, MSG$, FROM$, D$, T$
 IF UNAME$ = USER$ THEN
        M = M + 1
        COLOR 10
        PRINT
        PRINT "Письмо от "; : COLOR 12: PRINT FROM$; : COLOR 10: PRINT " поступило "; : COLOR 13: PRINT D$; ", "; T$
        COLOR 15: PRINT "-------------------------------------------------------------------------------"
        PRINT MSG$
        PRINT "-------------------------------------------------------------------------------"
        COLOR 14: PRINT "Следующее письмо? [Y/N]"
          DO
          Q2$ = INKEY$
          IF Q2$ = "Y" OR Q2$ = "y" OR Q2$ = "Н" OR Q2$ = "н" THEN
                GOTO 35
               ELSEIF Q2$ = "N" OR Q2$ = "n" OR Q2$ = "Т" OR Q2$ = "т" THEN
                GOTO 39
               END IF
          LOOP
        CLOSE #1
        GOTO 5
 END IF
LOOP
IF M = 0 THEN
        COLOR 11
        PRINT "   ВАМ НЕ АДРЕСОВАНО НИ ОДНОГО ПИСЬМА!"
        ELSE COLOR 11: PRINT : PRINT "   ПИСЕМ БОЛЬШЕ НЕТ"
        END IF
39 PRINT
COLOR 11
PRINT "Нажмите любую клавишу..."
SLEEP
GOTO 5
'--------------------- Список юзеров -------------------------------------
50
PRINT
COLOR 11, 0: PRINT "----------------------- Пользователи почтовой системы -------------------------"
PRINT
COLOR 14, 0
OPEN "MAILS" FOR INPUT AS #1
I = 0              'Предотвращаем повтор имен юзеров
DO UNTIL EOF(1)
 INPUT #1, UNAME$, MSG$, FROM$, D$, T$
 USL$(I) = FROM$
 I = I + 1
LOOP
' Вывод списка юзеров на экран
PRINT "   "; USL$(0)
 FOR K = 1 TO I
        X = 0
        FOR L = 0 TO K - 1
         IF USL$(K) = USL$(L) THEN X = 1
        NEXT L
        IF X = 0 THEN PRINT "   "; USL$(K)
 NEXT K
I = 0
COLOR 11
PRINT
PRINT "Нажмите любую клавишу..."
SLEEP
GOTO 5
'--------------------- Удаление писем ------------------------------------
60
PRINT
COLOR 11, 0: PRINT "------------------------- Удаление выбранной почты ----------------------------"
OPEN "MAILS" FOR INPUT AS #1
IF USER$ = "+MODERATOR" THEN GOTO 70
OPEN "MAIL.TMP" FOR OUTPUT AS #2
PRINT : COLOR 10
PRINT "Какие письма нужно удалить?"
PRINT
COLOR 12, 0: PRINT "   1 "; : COLOR 15, 0: PRINT "- всю почту, адресованную Вам"
COLOR 12, 0: PRINT "   2 "; : COLOR 15, 0: PRINT "- старые письма (присланы более 3-х дней назад)"
COLOR 12, 0: PRINT "   3 "; : COLOR 15, 0: PRINT "- письма, присланные определенным пользователем"
COLOR 12, 0: PRINT "   4 "; : COLOR 15, 0: PRINT "- (вернуться в главное меню)"
DO
Q10$ = INKEY$
IF Q10$ = "1" THEN
        K = 1
        GOTO 61
        END IF
IF Q10$ = "2" THEN
        K = 2
        GOTO 61
        END IF
IF Q10$ = "3" THEN
        PRINT : COLOR 14
        PRINT "   Введите имя пользователя: "; : COLOR 12: INPUT "", KILL$
        K = 3
        GOTO 61
        END IF
IF Q10$ = "4" THEN GOTO 5
LOOP
61
DO UNTIL EOF(1)
INPUT #1, UNAME$, MSG$, FROM$, D$, T$
 IF K = 1 THEN
        IF NOT UNAME$ = USER$ THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSEIF K = 2 THEN
        IF NOT (UNAME$ = USER$ AND ((VAL(MID$(DATE$, 4, 2)) - VAL(MID$(D$, 4, 2)) > 3) OR ((VAL(MID$(DATE$, 1, 2)) - VAL(MID$(D$, 1, 2)) > 0)))) THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSEIF K = 3 THEN
        IF NOT (UNAME$ = USER$ AND FROM$ = KILL$) THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSE GOTO 5
 END IF
LOOP
CLOSE
KILL "MAILS"
NAME "MAIL.TMP" AS "MAILS"
PRINT
COLOR 13: PRINT "   Выбранные Вами письма удалены!": COLOR 11
PRINT
PRINT "Нажмите любую клавишу..."
SLEEP
GOTO 5

70
OPEN "MODERAT.TMP" FOR OUTPUT AS #2
PRINT : COLOR 10
PRINT "Добро пожаловать, MODERATOR! Какие письма нужно удалить?"
PRINT
COLOR 12, 0: PRINT "   1 "; : COLOR 15, 0: PRINT "- всю почту, адресованную Вам"
COLOR 12, 0: PRINT "   2 "; : COLOR 15, 0: PRINT "- старые письма (присланы более 3-х дней назад)"
COLOR 12, 0: PRINT "   3 "; : COLOR 15, 0: PRINT "- письма, присланные определенным пользователем"
COLOR 12, 0: PRINT "   4 "; : COLOR 13, 0: PRINT "- ВСЮ почту выбранного пользователя"
COLOR 12, 0: PRINT "   5 "; : COLOR 13, 0: PRINT "- ВСЕ широковещательные сообщения!"
COLOR 12, 0: PRINT "   6 "; : COLOR 13, 0: PRINT "- ВСЕ старые письма (более 7-х суток)!"
COLOR 12, 0: PRINT "   7 "; : COLOR 15, 0: PRINT "- (вернуться в главное меню)"
DO
Q33$ = INKEY$
IF Q33$ = "1" THEN
        K = 1
        GOTO 71
        END IF
IF Q33$ = "2" THEN
        K = 2
        GOTO 71
        END IF
IF Q33$ = "3" THEN
        PRINT : COLOR 14
        PRINT "   Введите имя пользователя: "; : COLOR 12: INPUT "", KILL$
        K = 3
        GOTO 71
        END IF
IF Q33$ = "4" THEN
        PRINT : COLOR 14
        PRINT "   Пользователь, чья почта подлежит удалению: "; : COLOR 12: INPUT "", KILLUS$
        K = 4
        GOTO 71
        END IF
IF Q33$ = "5" THEN
        K = 5
        GOTO 71
        END IF
IF Q33$ = "6" THEN
        K = 6
        GOTO 71
        END IF

IF Q33$ = "7" THEN GOTO 5
LOOP
71
DO UNTIL EOF(1)
INPUT #1, UNAME$, MSG$, FROM$, D$, T$
 IF K = 1 THEN
        IF NOT UNAME$ = USER$ THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSEIF K = 2 THEN
        IF NOT (UNAME$ = USER$ AND ((VAL(MID$(DATE$, 4, 2)) - VAL(MID$(D$, 4, 2)) > 3) OR ((VAL(MID$(DATE$, 1, 2)) - VAL(MID$(D$, 1, 2)) > 0)))) THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSEIF K = 3 THEN
        IF NOT (UNAME$ = USER$ AND FROM$ = KILL$) THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSEIF K = 4 THEN
        IF NOT UNAME$ = KILLUS$ THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSEIF K = 5 THEN
        IF NOT UNAME$ = "ALL" THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSEIF K = 6 THEN
        IF NOT (((VAL(MID$(DATE$, 4, 2)) - VAL(MID$(D$, 4, 2)) > 7) OR ((VAL(MID$(DATE$, 1, 2)) - VAL(MID$(D$, 1, 2)) > 0)))) THEN WRITE #2, UNAME$, MSG$, FROM$, D$, T$
 ELSE GOTO 5
 END IF
LOOP
CLOSE
KILL "MAILS"
NAME "MODERAT.TMP" AS "MAILS"
PRINT
COLOR 13: PRINT "   Выбранные Вами письма удалены!": COLOR 11
PRINT
PRINT "Нажмите любую клавишу..."
SLEEP
GOTO 5


'--------------------- Выход из программы --------------------------------
QUIT:
CLS
COLOR 7, 0
END

