image of READY prompt

Wang2200.org

Listing of file='@CLOCK' on disk='vmedia/mvp-cs386-1.30-disk2.wvd.zip'

# Sector 5, program filename = '@CLOCK'
0005 REM .@CLOCK and Calendar display 01/30/89 TBO
0006 REM 11/14/97 MEB FIX TO DISPLAY YRS 1991-2090.  LINE 4050, LINE 110 DELET
     ED.
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)
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>90THEN Y=Y+1900
   : IF Y<91THEN Y=Y+2000
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"