9000  REM ** CALENDAR DEMONSTRATION **
9001  REM ** WRITTEN BY STEVE HTDPHCK **
9002  REM
9003  DIM Y$[72],Z$[72],A[504],B$[72],B[12],E[42,12],J$[72],M$[72],C$[72]
9004  DIM A$[72],G$[72],H$[72],I$[72],E$[72],D$[72]
9005  DIM L[80],F$[72],P$[72],U$[72],L$[72],T$[72],S$[72],O$[72],N$[72]
9006  REM * SETS OUTPUT STRING TO SPACES
9007  LET Y$[1,72]=" "
9008  LET Z$[1,72]=" "
9009  LET K0=S1=0
9010  LET H$="0123456789"
9011  REM * READ LAST DAY OF MONTH
9012  FOR I=1 TO 12
9013  READ B[I]
9014  NEXT I
9015  DATA 31,28,31,30,31,30,31,31,30,31,30,31
9016  PRINT 
9017  LET G$=" S  M  T  W  T  F  S"
9018  REM * INPUT DATA SECTION
9019  PRINT "CALENDAR FOR WHAT YEAR";
9020  INPUT J$
9021  I$=J$
9022  IF J$="END" THEN 9305
9023  IF J$="STOP" THEN 9305
9024  IF J$="AID" THEN 9086
9025  LET Y=0
9026  FOR I=1 TO LEN(J$)
9027  FOR J=1 TO 10
9028  IF J$[I,I]=H$[J,J] THEN 9031
9029  NEXT J
9030  GOTO 9036
9031  LET Y=Y*10+J-1
9032  NEXT I
9033  GOSUB 9292
9034  IF Y#INT(Y) OR Y<0 THEN 9036
9035  GOTO 9038
9036  PRINT "     ENTRY IGNORED.  INVALID YEAR."
9037  GOTO 9019
9038  IF Y<1582 THEN 9086
9039  IF Y>2^23-1 THEN 9086
9040  PRINT "ANY PARTICULAR MONTH (Y OR N)";
9041  INPUT B$
9042  IF B$="END" THEN 9019
9043  IF B$="STOP" THEN 9086
9044  IF B$[1,1]="Y" THEN 9048
9045  IF B$[1,1]="N" THEN 9067
9046  PRINT "     ANSWER 'Y' OR 'YES'.....'N' OR 'NO'"
9047  GOTO 9040
9048  PRINT "WHAT MONTH";
9049  INPUT C$
9050  IF C$="STOP" THEN 9305
9051  IF C$="END" THEN 9040
9052  IF C$#"AID" THEN 9055
9053  PRINT "    ENTER '1' FOR JANUARY, '2' FOR FEBRUARY, ETC."
9054  GOTO 9048
9055  B1=0
9056  FOR I=1 TO LEN(C$)
9057  FOR J=1 TO 10
9058  IF C$[I,I]=H$[J,J] THEN 9061
9059  NEXT J
9060  GOTO 9065
9061  B1=B1*10+J-1
9062  NEXT I
9063  IF B1 <= 0 OR B1>12 OR B1#INT(B1) THEN 9065
9064  GOTO 9067
9065  PRINT "     ENTRY IGNORED, IVALID MONTH."
9066  GOTO 9048
9067  IF B$[1,1]="N" THEN 9082
9068  PRINT '10'10"====="'10'10
9069  GOSUB 9253
9070  REM * SPACE COUNTER
9071  X3=0
9072  FOR S3=1 TO 5
9073  IF C$[S3,S3]=" " THEN 9075
9074  GOTO 9077
9075  X3=X3+1
9076  NEXT S3
9077  PRINT TAB(19-X3);C$;TAB(38-LEN(I$));I$
9078  PRINT 
9079  PRINT TAB(18);G$
9080  GOTO 9116
9081  REM * PAGE SEPERATOR
9082  REM
9083  PRINT 
9084  GOSUB 9306
9085  IF Y >= 1582 THEN 9089
9086  PRINT "     ENTER A YEAR AFTER 1581 AND BEFORE 8388608."
9087  GOTO 9019
9088  REM * HEADINGS
9089  PRINT 
9090  PRINT TAB(23);"CALENDAR FOR THE YEAR ";I$
9091  PRINT 
9092  PRINT 
9093  I=1
9094  PRINT 
9095  PRINT 
9096  PRINT 
9097  REM * TAB VALUES
9098  B=5
9099  C=31
9100  D=55
9101  REM * K0= NO OF GROUPS OF 3 MONTHS PRINTED
9102  K0=K0+1
9103  GOTO K0 OF 9105,9107,9109,9111
9104  REM * PRINT MONTH HEADINGS
9105  PRINT TAB(B);J$;TAB(C);F$;TAB(D);M$
9106  GOTO 9112
9107  PRINT TAB(B);P$;TAB(C);E$;TAB(D);U$
9108  GOTO 9112
9109  PRINT TAB(B);L$;TAB(C);T$;TAB(D);S$
9110  GOTO 9112
9111  PRINT TAB(B);O$;TAB(C);N$;TAB(D);D$
9112  PRINT 
9113  PRINT G$;TAB(25);G$;TAB(50);G$
9114  GOTO I OF 9116,9190,9191,9191
9115  REM * CHECKS FOR LEAP YEARS
9116  H=7
9117  L=0
9118  L=INT((Y-1201)/400)-INT((Y-1501)/100)+INT((Y-1581)/4)
9119  I1=Y-INT(Y/100)*100
9120  IF I1 <> 0 THEN 9123
9121  IF I1-INT(I1/4)*4=0 THEN 9125
9122  GOTO 9133
9123  IF Y-INT(Y/4)*4=0 THEN 9125
9124  GOTO 9133
9125  FOR X=1600 TO Y STEP 400
9126  IF Y=X THEN 9130
9127  NEXT X
9128  GOSUB 9280
9129  IF S1=1 THEN 9133
9130  R=366
9131  B[2]=29
9132  GOTO 9134
9133  R=365
9134  M=365*(Y-1583)+L
9135  N=M-INT(M/7)*7
9136  REM * ROUTINE TO DETERMINE PROPER DATES
9137  H=H+N
9138  IF H <= 7 THEN 9140
9139  H=H-7
9140  GOTO 9141
9141  FOR S=1 TO 12
9142  FOR T=1 TO H-1
9143  E[T,S]=0
9144  NEXT T
9145  FOR T=H TO B[S]+H-1
9146  E[T,S]=T-H+1
9147  NEXT T
9148  FOR T=B[S]+H TO 42
9149  E[T,S]=0
9150  NEXT T
9151  H=H+B[S]-INT(B[S]/7)*7
9152  IF H <= 7 THEN 9154
9153  H=H-7
9154  NEXT S
9155  Q=W=0
9156  FOR V=1 TO 12
9157  FOR U=1 TO 42
9158  W=W+1
9159  A[W]=E[U,V]
9160  NEXT U
9161  NEXT V
9162  IF B$[1,1]="N" THEN 9191
9163  FOR X=0 TO 5
9164  I=-2
9165  J=0
9166  FOR V=1 TO 7
9167  I=I+3
9168  J=J+3
9169  A=A[V+7*X+42*B1-42]
9170  A1=INT(A/10)
9171  B=A-A1*10
9172  IF A=0 THEN 9177
9173  C$[1,1]=H$[A1+1,A1+1]
9174  C$[2,2]=H$[B+1,B+1]
9175  IF A<10 THEN 9180
9176  GOTO 9178
9177  C$="   "
9178  A$[I,J]=C$
9179  GOTO 9183
9180  A$[I,I]=" "
9181  C$[1,1]=" "
9182  A$[I,J]=C$
9183  NEXT V
9184  PRINT TAB(18);A$
9185  NEXT X
9186  PRINT 
9187  PRINT 
9188  GOTO 9242
9189  REM
9190  REM
9191  FOR X=0 TO 5
9192  R=-2
9193  S=0
9194  FOR U=0 TO 2
9195  FOR V=1+7*X TO 7+7*X
9196  R=R+3
9197  S=S+3
9198  REM * TO RIGHT JUSTIFY OUPUT DATE
9199  A=A[V+42*U]
9200  IF A=0 THEN 9208
9201  A1=INT(A/10)
9202  B=A-A1*10
9203  C$[1,1]=H$[A1+1,A1+1]
9204  C$[2,2]=H$[B+1,B+1]
9205  IF C$="0" THEN 9208
9206  IF A<10 THEN 9211
9207  GOTO 9209
9208  C$="   "
9209  Z$[R,S]=C$
9210  GOTO 9214
9211  Z$[R,R]=" "
9212  C$[1,1]=" "
9213  Z$[R,S]=C$
9214  NEXT V
9215  NEXT U
9216  REM * TO PLACE INTO STRING FOR OUTPUT
9217  FOR G=1 TO 21
9218  Y$[G,G]=Z$[G,G]
9219  NEXT G
9220  FOR G=1 TO 4
9221  Y$[21+G,21+G]=" "
9222  NEXT G
9223  FOR G=22 TO 42
9224  Y$[G+4,G+4]=Z$[G,G]
9225  NEXT G
9226  FOR G=1 TO 4
9227  Y$[46+G,46+G]=" "
9228  NEXT G
9229  FOR G=43 TO 63
9230  Y$[G+8,G+8]=Z$[G,G]
9231  NEXT G
9232  PRINT Y$
9233  NEXT X
9234  PRINT 
9235  FOR X=1 TO 378
9236  A[X]=A[X+126]
9237  NEXT X
9238  Q=Q+1
9239  IF Q=4 THEN 9242
9240  I=I+1
9241  GOTO 9095
9242  PRINT '10'10'10'10'10'10'10"====="'10'10'10'10'10'10'10
9243  PRINT "MORE (Y OR N)";
9244  INPUT C$
9245  RESTORE 
9246  IF C$[1,1]="Y" THEN 9007
9247  IF C$[1,1]="N" THEN 9305
9248  IF C$="END" THEN 9305
9249  IF C$="STOP" THEN 9305
9250  PRINT "     ANSWER 'Y' OR 'YES'.....'N' OR 'NO'"
9251  GOTO 9243
9252  REM * TO DETERMINE WHAT MONTH
9253  GOTO B1 OF 9255,9257,9259,9261,9263,9265,9267,9269,9271,9273,9275,9277
9254  RETURN 
9255  C$=J$
9256  RETURN 
9257  C$=F$
9258  RETURN 
9259  C$=M$
9260  RETURN 
9261  C$=P$
9262  RETURN 
9263  C$=E$
9264  RETURN 
9265  C$=U$
9266  RETURN 
9267  C$=L$
9268  RETURN 
9269  C$=T$
9270  RETURN 
9271  C$=S$
9272  RETURN 
9273  C$=O$
9274  RETURN 
9275  C$=N$
9276  RETURN 
9277  C$=D$
9278  RETURN 
9279  REM * DETERMINES IF CENTURY YEAR
9280  Z$=I$
9281  K=LEN(Z$)
9282  IF Z$[K-1,K-1]="0" THEN 9285
9283  S1=0
9284  RETURN 
9285  IF Z$[K,K]="0" THEN 9288
9286  S1=0
9287  RETURN 
9288  S1=1
9289  RETURN 
9290  STOP 
9291  PRINT 
9292  J$=" JANUARY "
9293  F$="FEBRUARY "
9294  M$="  MARCH  "
9295  P$="  APRIL  "
9296  E$="   MAY   "
9297  U$="  JUNE   "
9298  L$="  JULY   "
9299  T$=" AUGUST "
9300  S$="SEPTEMBER"
9301  O$=" OCTOBER "
9302  N$="NOVEMBER "
9303  D$="DECEMBER "
9304  RETURN 
9305  STOP 
9306  PRINT '10'10'10'10'10'10'10"====="'10'10'10'10'10
9307  RETURN 
9308  END 
