Listing of file='@CLOCK' on disk='vmedia/toolbox.wvd.zip'
# Sector 609, program filename = '@CLOCK'
0010 REM .@CLOCK and Calendar display 01/30/89 TBO
0011 % DATA SAVE DC OPEN T#0,(6) "TBO.MSGS": STOP #
0012 DIM L$1,P$09,A$124,B$1,D0$7,H$(12)31,M0$80,M0$(10)80,C1$6,C2$6,M$(1)8,M0
0013 DIM T1$(10)2,T2$(10)2,M1$(10)80
0014 LOAD T#0,"SYS CRTS"8000,8900BEG 15
0015 RESTORE LINE7990
: BIN(B$)=#TERM+48
0016 READ A$
: ERRORA$="@CLOCKM "&B$&" This terminal"
0018 CONVERT STR(A$,9,2)TO T
: IF T<>#TERMTHEN 16
: M$(1)=A$
: M9=10
0020 SELECT PRINT /005(80)
: $PSTAT="@CLOCK"
0022 REM %0 M0 Global? 1=yes, @M$( (n)80 Global msgs
: REM .Part.1=xxxxUNIV define on next line
0024 M0=1
: SELECT @PART"3270UNIV"
: ERRORM0=0
0026 GOTO 100
0032 REM %.Send a message
: IF M0=1THEN 34
: PRINT "Global memory is not loaded for inter-terminal messages"
: RETURN
0034 DEFFN'31
: DIM M$79
: RESTORE LINE7990
0035 READ A$
: ERRORGOTO 37
0036 PRINT "Term. ";STR(A$,10,2);" is ";STR(A$,12,28);
: GOTO 35
0037 T=#TERM
: INPUT "Message for terminal",T
0038 PRINT " BOLD TYPE..message text"
: LINPUT -M$
0040 $TRAN(STR(M$,1,9),"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz")
R
0042 IF M0=1THEN @M$(T)=M$
0044 IF M0=0THEN RETURN
: IF @M$(T)=" "THEN 46
: GOSUB 205
: PRINT AT(22,0);"Waiting for acknowledge -- key anything to return "
: $IF OFF /001,44
: RETURN
0046 C2$=TIME
: PRINT AT(22,0,79);"Message received at ";STR(C2$,,2);":";STR(C2$,3,2);":"
;STR(C2$,5,2)
: RETURN
0058 REM %0 L$ L$1 Letter, P$ P$10 Phrase, A$ A$80 work area, B$ B$1 work are
a
0060 REM %0 T9$ HH-MM-SS, H9 Hour, M9 Minute, S Second, T9 Timer
0070 REM %0 D$ MM-DD-YY
0080 REM %0 D0$ Days off, H$( Holidays
0090 REM %0 M0$ Next message, M0$( Message stack
0100 D9$,D$=DATE
: D1$=STR(D$,3,2)&"/"&STR(D$,5,2)&"/"&STR(D$,1,2)
0110 IF D$<>"000101"THEN 115
: $BREAK
: GOTO 100
0115 DIM C0$(9)80
: GOSUB 1250
: REM /.GET 00.00.00
0120 REM .Days off Holidays
0123 REM .89..A$="1/1, 2/20, 5/30, 7/4, 9/4,11/23, 11/24, 12/25"
0125 A$="11/25, 12/26, 1/2, 1/1, 2/20, 5/29, 7/4, 9/4,11/23, 11/24, 12/25"
0130 D0$="HMTWTFH"
: GOSUB '52(D0$,A$)
: REM /.Set days off and holidays for calendar
0135 GOSUB 5000
: M0$=M0$(1)
: T9$=TIME
: ERRORSTOP "No Clock"#
0136 REM %.Set keyboard
0137 DIM F$(30)2
: F$()=HEX(01000169024302530342035204F0045005060516064A065A07490759060A061A
07090719030D031D020C021C024C025C034D035D081F)
0140 REM %.Using real-time clock
0145 PRINT HEX(0306);
: GOSUB 3000
: M4=M
: Y4=Y
: PRINT AT(3,2);BOX(9,76);AT(2,1);BOX(11,78)
: GOSUB 230
0150 DATA LOAD DC OPEN T#0,M$(1)
: ERRORGOTO 160
0155 DATA LOAD DC #0,D$,M0$()
: ERRORGOTO 160
0160 IF D9$<>D$THEN GOSUB 5900
: REM %.Adjust NOTES to current clock
: B=0
0165 B=B+1
: M0$=M0$(B)
: IF M0$=" "THEN 170
: IF STR(M0$,3,1)="/"THEN 170
: IF STR(T9$,,5)<STR(M0$,,5)THEN 170
: IF B<9THEN 165
0170 FOR C=1TO 9
: M0$(C)=M0$(B)
: IF B<9THEN B=B+1
: NEXT C
0200 M0$=M0$(1)
: C1$=" "
: PRINT AT(2,27);"W A N G C S a n d D S "
0202 GOSUB 205
: $IF OFF /001,202
: GOSUB 625
: GOTO 202
0204 REM %^.Main Clock loop
: $BREAK10
0205 C2$=TIME
: IF C1$=C2$THEN 204
0206 IF M0=0THEN 208
: IF @M$(#TERM)=" "THEN 208
: P$=@M$(#TERM)
: GOSUB 710
: PRINT AT(21,0);STR(@M$(#TERM),10)
: @M$(#TERM)=" "
0208 T9$=C1$XOR C2$
: B=POS(T9$<>HEX(00))
: T9$=STR(C2$,1,2)&":"&STR(C2$,3,2)&":"&STR(C2$,5,2)
0210 P$=T9$
: I=4
: ON BGOTO 212,212,214,214,215,216,217
0212 CONVERT STR(T9$,1,2)TO H
: IF H>12THEN CONVERT H-12TO STR(P$,1,2),(##)
: B=5
: GOTO 218
0214 B=32
: P$=STR(P$,4)
: GOTO 218
0215 B=41
: P$=STR(P$,5)
: GOTO 218
0216 B=59
: P$=STR(P$,7)
: GOTO 218
0217 B=68
: P$=STR(P$,8)
0218 GOSUB 260
: C1$=C2$
: D$=DATE
: IF D$<>D9$THEN 10
0220 IF STR(T9$,,5)=STR(M0$,,5)THEN GOSUB 610
: RETURN
0230 C2$=TIME
: T9$=STR(C2$,1,2)&":"&STR(C2$,3,2)&":"&STR(C2$,5,2)
: RETURN
0258 REM %^.Print a phrase
0260 IF P$=" "THEN RETURN
0280 L$=P$
: P$=STR(P$,2)
0285 RESTORE LINE2060
0290 READ A$
0300 IF B>80THEN B=0
0310 I1=I
0320 B$=A$
: IF B$=L$THEN 340
: IF STR(A$,,2)<>"//"THEN 290
: GOTO 260
0330 REM %.Print a letter
0340 PRINT AT(I,B);HEX(060202020F);
: SELECT PRINT /005(80)
0345 IF STR(P$,LEN(P$),1)<>"0"THEN 350
: IF P$="0"THEN 510
: IF P$=":00"THEN 510
: IF P$="0:00"THEN 510
: IF P$=":00:00"THEN 510
: IF P$="0:00:00"THEN 510
0350 FOR A=3TO 72STEP 8
0370 C$=STR(A$,A,7)
0380 $TRAN(C$,HEX(2030FF31F832F433CB34C735FA36F537EB38D739FB41F742EA43D544F045
C346ED47DE482020))R
0390 PRINT STR(C$,1,7);HEX(0A08080808080808);
: NEXT A
: PRINT HEX(0202000F);
0400 B=B+9
0410 GOTO 260
0510 C=0
: FOR A=3TO 72STEP 8
: C=C+1
: C$=STR(A$,A,7)
: $TRAN(C$,HEX(2030FF31F832F433CB34C735FA36F537FA36F537EB38D739FB41F742EA43
D544F045C346ED47DE482020))R
: PRINT AT(I+C-1,B);STR(C$,,7);" ";STR(C0$(C),B+8,72-B)
: NEXT A
: PRINT HEX(0202000F);
: RETURN
0600 REM .Logic to display messages from list at specified times
0610 P$=STR(M0$,7,9)
: IF P$="CLEAR"THEN 615
: IF P$="START.JOB"THEN 900
: GOSUB 710
: PRINT AT(21,0);M0$
: GOTO 620
0615 PRINT AT(R0,C0);BOX(-1,-3)
: PRINT AT(13,0,10*80)
: GOSUB 3000
0620 M0$=M0$(2)
: FOR B=1TO 9
: M0$(B)=M0$(B+1)
: NEXT B
: RETURN
0625 KEYIN B$,,640
0630 PRINT AT(R0,C0);BOX(-1,-3)
: PRINT AT(13,0,10*80)
: IF B$=" "THEN 635
: M4=M
: Y4=Y
: GOSUB 3000
: RETURN
0635 PRINT "Key NOTE (s.f.'6) to display messages for this terminal"
: PRINT " -- permanent reminders are DATA statements at lines 6100 +"
: PRINT "Key INSERT to enter current reminder messages"
: PRINT "Key DELETE to remove messages"
0636 PRINT "Key <- PREV or NEXT -> to shift months display"
: PRINT "Key CANCEL/EDIT to return to main menu"
: PRINT "Key EXEC to show current month"
0638 PRINT "hh:mm START.JOB FileName --- Special NOTE form to LOAD RUN ";HEX(2
2);"FileName";HEX(22)
: IF G<>1THEN PRINT "Key '31 to send a message to another terminal"
: RETURN
0640 PRINT AT(R0,C0);BOX(-1,-3)
: PRINT AT(13,0,10*80)
: $TRAN(B$,F$())R
: ON B$GOTO 635,720,770,645,665,5710,5810,32
: IF B$<>HEX(00)THEN 635
: PRINT HEX(020D0C030F)
: $PSTAT="MainMenu"
: LOAD DC T#0,"START"
0645 PRINT HEX(020D0C030F)
: LIMITS T#0,M$(1),T,T,T,T
: IF T<>2THEN 648
0646 DATA LOAD DC OPEN T#0,M$(1)
: DATA SAVE DC #0,D9$,M0$()
: DATA SAVE DC #0,END
0648 LOAD DC T#0,"START"
0650 REM %.Display list of pending messages
0665 PRINT "Messages for this terminal"
: FOR A=1TO 10
: IF M0$(A)<>" "THEN PRINT M0$(A)
: NEXT A
: RETURN
0710 PRINT AT(R0,C0);BOX(-1,-3);HEX(07)
: B=0
: I=13
: PRINT AT(I,B,9*80);
: GOSUB 260
: SELECT P1
: FOR K=1TO 5
: PRINT HEX(01070D)
: NEXT K
: SELECT P
: RETURN
0720 PRINT AT(R0,C0);BOX(-1,-3);
: REM /.ADVANCE CALENDAR ONE MONTH
0730 M2,M4=M4+1
: Y2=Y4
: IF M2<13THEN 740
: M2,M4=1
: Y4,Y2=Y2+1
0740 GOSUB '206(0,M2,Y2,R,7)
0750 M2,M4=M4+1
: Y2=Y4
: IF M2<13THEN 760
: M2,M4=1
: Y4,Y2=Y2+1
0760 GOSUB '206(0,M2,Y2,R,45)
: RETURN
0770 PRINT AT(R0,C0);BOX(-1,-3);
: REM /.LOOK BACK ON CALENDAR ONE MONTH
0780 M2,M4=M4-1
: Y2=Y4
: IF M2>0THEN 790
: M2,M4=12
: Y4,Y2=Y2-1
0790 GOSUB '206(0,M2,Y2,R,45)
0800 M2,M4=M4-1
: Y2=Y4
: IF M2>0THEN 810
: M2,M4=12
: Y4,Y2=Y2-1
0810 GOSUB '206(0,M2,Y2,R,7)
: RETURN
0850 DEFFN'4
0860 PRINT HEX(020D0C030F);
: LINPUT "phrase",-P$
0870 B=0
: I=8
0880 GOSUB 260
0890 $IF ON /001,860
: GOTO 890
0900 REM .START.JOB
: P$=STR(M0$,17,8)
: LIMITS T#0,P$,A,B,C,D
: IF D=1THEN LOAD RUN P$
0920 PRINT HEX(03);"UNABLE TO PROCEED -- PROGRAM NOT FOUND "
: PRINT M0$
: STOP #
1250 P$="00:00:00"
: B=5
1260 L$=P$
: P$=STR(P$,2)
: RESTORE LINE2060
1290 READ A$
: IF B>80THEN B=0
: B$=A$
: IF B$<>L$THEN 1290
1340 I=1
: FOR A=3TO 72STEP 8
: C$=STR(A$,A,7)
: $TRAN(C$,HEX(2030FF31F832F433CB34C735FA36F537EB38D739FB41F742EA43D544F045
C346ED47DE482020))R
: STR(C0$(I),B,7)=STR(C$,1,7)
: I=I+1
: NEXT A
1400 B=B+9
: IF P$<>" "THEN 1260
: RETURN
2000 REM %.2236-DE special character structure
2010 REM .. 0 1 2 3 4 5 6 7 8 9 A B C D E F G H mnemonic
2020 REM ..-- SS -- -- SS SS -S S- SS SS SS SS -S S- -- SS S- -S top
2030 REM ..-- SS -S S- -S S- -S S- -S S- -S S- -S S- -- -- SS SS mid
2040 REM ..-- SS SS SS -- -- SS SS -S S- SS SS -S S- SS -- -S S- low
2050 REM ..20 FF F8 F4 CB C7 FA F5 EB D7 FB F7 EA D5 F0 C3 ED DE alternate ch
ar
2060 DATA "0.2111113.1100011.1100011.1100011.1100011.1100011.4111115."
2070 DATA "1.0021100.0001100.0001100.0001100.0001100.0001100.0011110."
2080 DATA "2.2111113.1100215.0002150.0021500.0215000.2150000.1111111."
2090 DATA "3.2111113.1100011.0000011.001111B.0000011.1100011.4111115."
2100 DATA "4.0000021.0002111.0021511.0215011.2111111.0000011.0000011."
2110 DATA "5.1111111.1100000.1100000.4111113.0000011.1100011.4111115."
2120 DATA "6.2111113.1100000.1100000.1111113.1100011.1100011.4111115."
2130 DATA "7.1111111.0000215.0002150.0021500.0215000.2150000.1500000."
2140 DATA "8.2111113.1100011.4100015.0A111B0.2100013.1100011.4111115."
2150 DATA "9.2111113.1100011.1100011.4111111.0000215.0002150.0021500."
2160 DATA ":.0000000.0000000.0001000.0000000.0000000.0001000.0000000."
2180 DATA "A.0061700.0611170.6190817.1900081.1111111.1100011.1100011."
2190 DATA "B.1111130.1100013.1100015.11111B0.1100013.1100015.1111150."
2200 DATA "C.2111113.1100011.1100000.1100000.1100000.1100011.4111115."
2210 DATA "D.1111130.1100011.1100011.1100011.1100011.1100011.1111150."
2220 DATA "E.1111111.1100000.1100000.1111100.1100000.1100000.1111111."
2230 DATA "F.1111111.1100000.1100000.1111100.1100000.1100000.1100000."
2240 DATA "G.0111110.1100011.1100000.1100111.1100011.1100011.0111110."
2250 DATA "H.1100011.1100011.1100011.1111111.1100011.1100011.1100011."
2260 DATA "I.0111110.00C1D00.00C1D00.00C1D00.00C1D00.00C1D00.0111110."
2270 DATA "J.0001111.0000110.0000110.0000110.0000110.1100110.0411150."
2280 DATA "K.1100215.1102150.1121500.111B000.1141300.1104130.1100413."
2290 DATA "L.1100000.1100000.1100000.1100000.1100000.1100011.1111111."
2300 DATA "M.1300021.1130211.1111111.1101011.1100011.1100011.1100011."
2310 DATA "N.1100011.1130011.1113011.1111311.1104111.1100411.1100011."
2320 DATA "O.0111110.1100011.1100011.1100011.1100011.1100011.0111110."
2330 DATA "P.1111110.1100011.1100011.1111110.1100000.1100000.1100000."
2340 DATA "Q.2111113.1100011.1100011.1100011.1100011.1104311.4111143."
2350 DATA "R.1111130.1100011.1100011.1111150.1141300.1104130.1100413."
2360 DATA "S.2111113.1100001.1100000.4111113.0000011.1300011.4111115."
2370 DATA "T.1111111.10C1D01.00C1D00.00C1D00.00C1D00.00C1D00.0011100."
2380 DATA "U.1100011.1100011.1100011.1100011.1100011.1100011.4111115."
2390 DATA "V.1700061.1100011.1170611.8110119.0111110.0811190.0081900."
2400 DATA "W.1100011.1100011.1100011.1100011.1121311.1150411.1500041."
2410 DATA "X.1300021.4130215.0411150.00A1B00.0211130.2150413.1500041."
2420 DATA "Y.1300021.4130215.0411150.00C1D00.00C1D00.00C1D00.00C1D00."
2430 DATA "Z.1111111.0000215.0002150.0021500.0215000.2150000.1111111."
2440 DATA " .0000000.0000000.0000000.0000000.0000000.0000000.0000000."
2450 DATA "!.0011100.0011100.0011100.0011100.0011100.0000000.0011100."
2455 DATA "?.2111113.1100011.0000011.0011150.0011000.0000000.0011000."
2456 DATA "..0000000.0000000.0000000.0000000.0000000.0000000.0011000."
2457 DATA "/.0000002.0000020.0000200.0002000.0020000.0200000.2000000."
2510 DATA "%.0000021.0110215.0002150.0021500.0215000.2150110.1500000."
2540 DATA "#.0000000.0110110.1111111.0110110.1111111.0110110.0000000."
2550 DATA ";.0000000.0000000.0001000.0000000.0000000.0001000.0011000."
2560 DATA ",.0000000.0000000.0000000.0000000.0000000.0001000.0011000."
2570 DATA "'.0001000.0001000.0000000.0000000.0000000.0000000.0000000."
2580 DATA "-.0000000.0000000.0000000.0111110.0000000.0000000.0000000."
2600 DATA "..0000000.0000000.0000000.0000000.0000000.0000000.0011000."
2610 DATA "+.0000000.0000000.0011100.1111111.0011100.0000000.0000000."
2620 DATA "=.0000000.0000000.0111110.0000000.0111110.0000000.0000000."
2640 DATA "$.2111113.1101001.1101000.4111113.0001011.1301011.4111115."
2650 DATA "*.0000000.4130215.0411150.1111111.0211130.2150413.0000000."
2660 DATA "@.2111113.1000001.1000001.1000000.1000000.1000000.4111111."
2670 DATA "&.0000000.0000000.0000000.0000000.0000000.0000000.0000000."
2680 DATA "(.0000000.0000000.0000000.0000000.0000000.0000000.0000000."
2690 DATA ").0000000.0000000.0000000.0000000.0000000.0000000.0000000."
2700 DATA ">.0000000.0000000.0000000.0000000.0000000.0000000.0000000."
2710 DATA "<.0000000.0000000.0000000.0000000.0000000.0000000.0000000."
2720 DATA "[.0001100.0001000.0001000.0001000.0001000.0001000.0001100."
2730 DATA "].0011000.0001000.0001000.0001000.0001000.0001000.0011000."
2970 REM %^.Calendar logic
2980 REM "GETDATE" -- get date from user
: REM 11/14/79 BP
: REM REV 1/7/80
: REM The 1st record in the file "DATE" will contain the new date (mm/dd/yy
yy)
2990 DIM T$10,Q$1
3000 A=24
: R=13
: PRINT AT(R,0,10*80)
: T$=D1$
: GOSUB 4040
: RETURN
4030 STOP "DATE NOT CORRECT"#
4040 $UNPACK(D=HEX(002F))T$TO M,D,Y
: ERROR$UNPACK(D=HEX(002C))T$TO M,D,Y
: ERRORPRINT HEX(07);
: GOTO 4030
4050 IF M<>INT(M)OR M<1OR M>12THEN 4030
: IF D<>INT(D)OR D<1OR D>31THEN 4030
: IF Y<>INT(Y)OR Y<0THEN 4030
: IF Y<100THEN Y=Y+1900
4060 REM CONVERT TO STANDARD FORM
: T$="00/00/0000"
: CONVERT MTO STR(T$,1,2),(##)
: CONVERT DTO STR(T$,4,2),(##)
: CONVERT YTO STR(T$,7,4),(####)
4070 GOSUB '50(M)
: M1$=M$
: GOSUB '51(M,D,Y)
: PRINT HEX(020402000E);AT(0,0,80);AT(0,(80-LEN(D$)-LEN(M$)-12)/2);D$;" "
;M$;D;HEX(08);",";Y;HEX(0F)
4080 GOSUB '206(D,M,Y,R,7)
: M2=MOD(M,12)+1
: Y2=Y
: IF M2=1THEN Y2=Y+1
: GOSUB '206(0,M2,Y2,R,45)
: M$=M1$
4090 RETURN
4110 REM %'206 -- DISPLAY CALENDAR MONTH
: REM ENTRY--
: REM D0=day to highlight (or 0)
: REM M1=month (1-12)
: REM Y1=year (eg, 1979)
: REM R=row to start display on
: REM C=column to start display on
: REM DISPLAY is 8 X 28
4120 DEFFN'206(D0,M1,Y1,R,C)
: GOSUB '50(M1)
: Y3=Y1
: M3=M1
4130 IF M1>2THEN 4140
: M1=M1+12
: Y1=Y1-1
4140 REM CALCULATE DAY OF WEEK MONTH BEGINS ON
: D1=1
: T=MOD(1+D1+INT((13*M1+3)/5)+INT(5*Y1/4)-INT(Y1/100)+INT(Y1/400),7)+1
4150 REM DISPLAY MONTH
: T=2-T
: PRINT AT(R,C,28);AT(R,C+(28-LEN(M$)-5)/2);M$;Y3
: PRINT AT(R+1,C);"Sun Mon Tue Wed Thu Fri Sat "
: FOR W=1TO 6
: PRINT AT(R+1+W,C);
: FOR D3=1TO 7
: IF T=D0AND T<>0THEN PRINT HEX(020404000E);BOX(1,3);
: ELSE GOTO 4154
: R0=R+1+W
: C0=C+(D3*4)-4
4154 IF T>0AND T<32THEN IF STR(H$(M3),T,1)="H"THEN PRINT HEX(020400020E);
4156 IF STR(D0$,D3,1)="H"THEN PRINT HEX(020400020E);
4158 IF T>0AND T<=D9THEN PRINTUSING " ## ";T;
: ELSE PRINT " ";
: IF T=D0THEN PRINT HEX(0F0204020F);
: T=T+1
: PRINT HEX(0F);
: NEXT D3,W
: RETURN
4160 REM %'50 -- GET NAME OF MONTH
: REM ENTRY--
: REM M1=month (1-12)
: REM RETURN--
: REM M$=name of month
: REM D9=no. of days in month
4170 DEFFN'50(M1)
: RESTORE LINE4170,2*M1-1
: READ M$,D9
: IF MOD(Y,4)=0AND M1=2THEN D9=D9+1
: RETURN
: DATA "January",31,"February",28,"March",31,"April",30,"May",31,"June",30,
"July",31,"August",31,"September",30,"October",31,"November",30,"December
",31
4180 REM %'51 -- GET NAME OF DAY OF WEEK
: REM ENTRY--
: REM M1=month (1-12)
: REM D1=day (1-31)
: REM Y1=year
: REM RETURN--
: REM D$=name of day
: REM T=day of week (1-7)
4190 DEFFN'51(M1,D1,Y1)
: IF M1>2THEN 4200
: M1=M1+12
: Y1=Y1-1
4200 T=MOD(1+D1+INT((13*M1+3)/5)+INT(5*Y1/4)-INT(Y1/100)+INT(Y1/400),7)+1
: RESTORE LINE4200,T
: READ D$
: RETURN
: DATA "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturda
y"
4980 REM %.'52 Denote days off and holidays
4990 DEFFN'52(D0$,A$)
5000 B=POS(A$=",")
: IF B=0THEN B=LEN(A$)+1
: P$=STR(A$,,B-1)
: A$=STR(A$,B+1)
5010 $UNPACK(D=HEX(002F))P$TO M,D
: ERRORGOTO 5070
5020 IF M<1OR M>12THEN 5070
: IF D<1OR D>31THEN 5070
5030 STR(H$(M),D,1)="H"
: ERRORGOTO 5070
5040 GOTO 5000
5050 PRINT P$
: IF A$<>" "THEN 5000
: STOP #
5070 IF P$=" "THEN RETURN
: PRINT "ERROR IN HOLIDAYS"
: PRINT P$
: STOP #
5700 REM %^.Message stack handling
5705 REM %.Insert
: REM .HH.mm or MM/DD hh.mm
5710 GOSUB 5780
: PRINT AT(13,0);
: M0$="hh:mm BOLD TYPE insert message"
: LINPUT STR(M0$,,79)
: B=0
: IF VER(M0$,"hh:mm")=5THEN 5780
: IF VER(M0$,"##/## ##:##")=11THEN 5790
: IF VER(M0$,"##:##")<>5THEN 5710
5712 IF STR(M0$,,2)>"06"THEN 5715
: STR(M0$,,1)="1"
: ADD(STR(M0$,2,1),02)
5715 IF STR(T9$,,5)>STR(M0$,,5)THEN 5710
5718 $TRAN(STR(M0$,7,9),"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
)R
5720 B=B+1
: IF B>9THEN 5780
: IF M0$(B)=" "THEN 5770
5730 IF STR(M0$(B),3,1)=":"THEN IF STR(M0$,,5)>STR(M0$(B),,5)THEN 5720
: FOR C=8TO BSTEP -1
: M0$(C+1)=M0$(C)
: NEXT C
5770 M0$(B)=M0$
5780 M0$=M0$(1)
: PRINT AT(13,0,10*80);
: GOSUB 665
: RETURN
5790 B=B+1
: IF B>9THEN 5780
: IF STR(M0$(B),3,1)<>" "THEN 5790
: GOTO 5770
5805 REM %.Delete
5810 GOSUB 5780
: PRINT AT(13,0);
: M0$="hh:mm or ALL -- DELETE message"
: LINPUT -STR(M0$,,79)
: IF STR(M0$,,3)="ALL"THEN 5825
: IF VER(M0$,"hh:mm")=5THEN 5780
: C=9
: IF VER(M0$,"##/## ##:##")=11THEN 5820
: IF VER(M0$,"##:##")<>5THEN 5810
: C=5
: IF STR(T9$,,C)>STR(M0$,,C)THEN 5810
5820 GOSUB 5835
: GOTO 5780
5825 M0$()=" "
: GOTO 5780
5835 B=0
5840 B=B+1
: IF B>9THEN RETURN
: IF STR(M0$(B),,C)<>STR(M0$,,C)THEN 5840
: FOR C=BTO 9
: M0$(C)=M0$(C+1)
: NEXT C
: RETURN
5890 REM %.First time for @CLOCK today
: REM .Remove old hh.mm messages Set=Z
: REM .Fix this day mm/dd messages to sort first /hh.mm
: REM .Remove old mm/dd messages
5900 FOR B=1TO M9
: M0$=M0$(B)
: IF STR(M0$,3,1)=":"OR M0$=" "THEN M0$="Z"
: IF STR(M0$,,5)<>STR(D1$,,5)THEN 5905
: STR(M0$,,1)="/"
: STR(M0$,2)=STR(M0$,7)
5905 IF STR(M0$,3,1)<>"/"THEN 5910
: IF STR(M0$,,5)>STR(D1$,,5)THEN 5910
: M0$="Z"
5910 M0$(B)=M0$
: NEXT B
5915 REM .Message list in M0$()
: REM ./hh.mm will sort first
: REM .MM/DD hh.mm
: REM .Z. messages will sort last
5920 MAT SORTM0$()TO T1$(),T2$()
: MAT MOVE M0$(),T2$()TO M1$()
: MAT COPY M1$()TO M0$()
5928 REM .Remove adjust time and remove Z messages
5930 FOR B=1TO M9
: IF STR(M0$(B),,1)="/"THEN M0$(B)=STR(M0$(B),2)
: IF STR(M0$(B),,1)="Z"THEN M0$(B)=" "
: NEXT B
: B=0
5940 IF M0$(1)=" "THEN 6000
: RETURN
5990 REM %^.Message stack
5995 REM .Messages for output at specific times
5999 % REM.."HH:MM BLOCKCAPS Upper/lower text"
6000 RESTORE LINE6100
6002 READ A$
: ERRORRETURN
6004 IF A$=" "THEN RETURN
: IF STR(T9$,1,5)>STR(A$,1,5)THEN 6002
: B=B+1
: M0$(B)=A$
: GOTO 6002
6100 DATA "08:00 -WELCOME- Grab a cup of coffee, you look terrible"
: DATA "09:00 CLEAR"
6120 DATA "12:00 ..LUNCH.."
: DATA "13:00 CLEAR"
6140 DATA "17:00 .GO HOME.","18:30 CLEAR"
6150 DATA " "
: REM /.End of standard msgs
7990 REM .MSGfiles ## Terminal description
8000 REM .SYS CRTS 9/26/86
: REM ."Msg.File # Crt description................"
8010 DATA "@CLOCKM 1 Main system terminal"
8020 DATA "MSGS.ccc 2 ISWU demo -- 2436 DW"
8030 DATA "MSGS.ccc 3 ISWU demo -- 2436-DW"
8040 DATA "MSGS.ccc 4 ISWU demo -- 2436-WP"
8050 DATA "MSGS.ccc 5 TBO office -- CRT on cart"
8060 DATA "MSGS.ccc 6 Bob Rainville office"
8070 DATA "MSGS.ccc 7 TBO office PC"
8080 DATA "@CLOCKM 8 Unassigned port"