PROGRAM WATCHR,1.0
!
!                          ============================
!                         //   BACKGROUND PROGRAM TO  \\
!                        // WATCH FOR REMINDER MESSAGE \\
!                       //==============================\\
!                      <<    BY THE GREAT & MIGHTY OZ    >>
!       //==============\\==============================//==============\\
!       ||       * * * * *   E D I T   H I S T O R Y   * * * * *        ||
!       ||                                                              ||
!       ||  8/27/85 program created. /dmm                               ||
!       ||          Companion program to REMIND.RUN                     ||
!       ||          Must have SYSMEM.SBR loaded into system memory.     ||
!       ||          Because of the number of times it is called I       ||
!       ||          suggest that you have RDATE.SBR loaded into         ||
!       ||          either SYSTEM or USER memory. /dmm                  ||
!       ||                                                              ||
!       \\==============<<============================>>================//
!                        \\==========================//
!
!
!                       //=============================\\
!                       || REMINDER FILE RECORD LAYOUT ||>>>----------->+
!                       \\=============================//               !
!                                                                       !
MAP1 REMIND                                     !<-------------------<<<+
       MAP2 RDATE,S,6                          !<--date to send-----<<<+
       MAP2 RSEND                              !<--message area-----<<<+
               MAP3 RTIME                      !<--time to send-----<<<+
                       MAP4 RHOUR,S,2          !       <--hour------<<<+
                       MAP4 RMIN,S,2           !       <--minute----<<<+
               MAP3 RNAME,S,6                  !<--job name---------<<<+
               MAP3 RMESAG,S,70                !<--message to send--<<<+
               MAP3 RBEEPS,B,1                 !<--number of beeps--<<<+
MAP1 RRECSIZE,F,,102
MAP1 DUMREM
       MAP2 JUNK,S,2
       MAP2 ORGREM,F
       MAP2 RECREM,F
       MAP2 MAXREM,F
       MAP2 DELREM,F

!                       //===========================\\
!                       || SYSMEM TRANSFER WORK AREA ||>>>------------->+
!                       \\===========================//                 !
!                                                                       !
MAP1 RECV                                       !<-------------------<<<+
       MAP2 F'RCV,B,1,1                        !<--set to receive---<<<+
       MAP2 RCVFLG,B,1,0                       !<--status flag------<<<+
MAP1 MSGTXT                                     !<--message received-<<<+
       MAP2 JTIME                                                      !
               MAP3 JHOUR,S,2                                          !
               MAP3 JMIN,S,2                                           !
       MAP2 JNAME,S,6                                                  !
       MAP2 JMESAG,S,70                                                !
       MAP2 JBEEPS,B,1                         !                       v
MAP1 MSGNAM,S,6,"TICKLE"                        !<--recv message name<<<+
MAP1 SEND,B,1,0                                 !<--set to send------<<<+
MAP1 SNDTXT,S,1                                 !<--dummy area-------<<<+
MAP1 SNDNAM,S,6,"GOTCHA"                        !<--send message name<<<+
MAP1 MESSAGES(200)                              !<--hold 200 messages<<<+
       MAP2 MTIME
               MAP3 MHOUR,S,2
               MAP3 MMIN,S,2
       MAP2 MNAME,S,6
       MAP2 MMESAG,S,70
       MAP2 MBEEPS,B,1
MAP1 USERS
       MAP2 JOBNAMS(30),S,6
       MAP2 TRMDEFS(30),S,6
MAP1 STORAGE
       MAP2 FILENAME,S,10,"USERS.DAT"
       MAP2 RECSIZ99,F,6,LEN(USERS)
       MAP2 BEEPS(30),F
       MAP2 OLD'DATE,S,6
       MAP2 FILNAM,S,20
       MAP2 NUMFIL,F,6,30
       MAP2 TODAY,S,6
MAP1 STIME
       MAP2 SHOUR,S,2
       MAP2 SMIN,S,2
       FILEBASE 1
       XCALL RDATE,FLTDAY : TODAY=FLTDAY USING "#ZZZZZ"
       OPEN #99, FILENAME, RANDOM, RECSIZ99, FILE99
       FILE99 = 1 : READ #99, USERS : CLOSE #99
       CALL LOADEM
BEGIN:
       XCALL SYSMEM,RECV,MSGNAM,MSGTXT
       IF RCVFLG CALL SET'MSG
       CALL GET'TIME
       CALL GET'DATE
       IF VAL(MTIME(1))=0 GOTO BEGIN
       IF STIME >= MTIME(1) CALL SEND'IT
       GOTO BEGIN
SET'MSG:
       FOR I = 1 TO 200
       IF MNAME(I)="" MESSAGES(I)=MSGTXT : GOTO SET'OK
       IF JTIME < MTIME(I) GOTO SHIFT
       NEXT I
SET'OK:
       IF LOADING=0 XCALL SYSMEM,SEND,SNDNAM,SNDTXT
       RETURN
SHIFT:
       FOR X = 200 TO I+1 STEP -1
       MESSAGES(X)=MESSAGES(X-1)
       NEXT X
       MESSAGES(I)=MSGTXT
       IF LOADING=0 XCALL SYSMEM,SEND,SNDNAM,SNDTXT
       RETURN
GET'TIME:
       T=TIME
       CLOCK=60
       HOURS=INT(T/(CLOCK^2))
       MINS=INT(T/CLOCK)-(HOURS*60)
       IF LSTMIN # MINS CALL CHK'BEEPS
       SHOUR=HOURS USING "#Z"
       SMIN=MINS USING "#Z"
       RETURN
GET'DATE:
       XCALL RDATE,FLTDAY
       TODAY=FLTDAY USING "#ZZZZZ"
       IF OLD'DATE # TODAY CALL LOADEM
       RETURN
CHK'BEEPS:
       LSTMIN=MINS
       FOR X = 1 TO NUMFIL
       IF BEEPS(X) # 0 CALL BEEP
       NEXT X
       RETURN
BEEP:
       BEEPS(X)=BEEPS(X)-1
       FOR J = 1 TO 5
       OPEN #1,"TRM:"+TRMDEFS(X),OUTPUT
       ? #1;CHR(7);
       CLOSE #1
       FOR I = 1 TO 1000
       NEXT I
       NEXT J
       RETURN
SEND'IT:
       FOR X = 1 TO NUMFIL
       IF JOBNAMS(X)=MNAME(1) GOTO THIS'ONE
       NEXT X
       RETURN
THIS'ONE:
       OPEN #1,"TRM:"+TRMDEFS(X),OUTPUT
       IF MMESAG(1)="" GOTO CLEAR'MSG
       BEEPS(X)=MBEEPS(1)
       ? #1;CHR(7);" ";
       ? #1;"f"+MMESAG(1)+"  "+MHOUR(1)+":"+MMIN(1)
       ? #1;"g";
CLEAR:
       CLOSE #1
       FOR X=1 TO 199
       MESSAGES(X)=MESSAGES(X+1)
       MESSAGES(X+1)=""
       NEXT X
       RETURN
CLEAR'MSG:
       ? #1;" ";
       ? #1;"f"+SPACE(78)
       ? #1;"g";
       ? #1;"h";
       GOTO CLEAR
LOADEM:
       FOR I = 1 TO 200
       MESSAGES(I)=""
       NEXT I
       FILID=9999
       FILNAM="REMIND.DAT"
       OPEN #FILID,FILNAM,RANDOM,RRECSIZE,RECNUM
       CALL GET'TIME
       RECNUM=1
       READ #FILID,DUMREM
       ? TAB(24,1);TAB(-1,9);"Loading messages, please wait...";
       FOR RECNUM=2 TO RECREM
       READ #FILID,REMIND
       IF RDATE=TODAY AND RTIME >= STIME CALL LOADIT
       NEXT RECNUM
       ? TAB(24,1);TAB(-1,9);
       CLOSE #FILID
       OLD'DATE=TODAY
       RETURN
LOADIT:
       LOADING=1
       MSGTXT=RSEND
       CALL SET'MSG
       LOADING=0
       RETURN