1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        JULI:  ONE PAGE JULIAN CALENDAR
4  REM
5  REM        36279 REV  A   6/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
8  REM  THIS PROGRAM WILL GENERATE A HANDY 1 PAGE JULIAN CALENDAR
9  REM  FOR USE WITH TIME SHARE SYSTEMS
10  REM WRITTEN BY PAUL WITTMAN ON 12/29/72   (364/72)
11  REM DIM Z(3)
12  PRINT "THIS PROGRAM WILL GENERATE A CALENDAR OF DATES VERSUS"
20  PRINT "THE DAY OF THE YEAR"
30  PRINT "WHAT YEAR DO YOU WANT";
40  INPUT Y
45  GOSUB 3000
50  DIM M[13],C$[10],D[13,31]
60  DATA 31,31,28,31,30,31,30,31,31,30,31,30,31
70  FOR C=1 TO 13
80  READ M[C]
90  NEXT C
91  FOR C=1 TO 31
92  D[1,C]=C
93  NEXT C
95  T=Y/100
97  FOR T1=1 TO 2
100  IF INT(100*T+.01)=INT(100*(INT(T)+.001)) THEN 110
102  T=Y/4
104  NEXT T1
106  GOTO 115
110  IF T1=1 THEN 115
111  M[3]=29
115  D1=0
120  FOR C=2 TO 13
130  FOR G=1 TO M[C]
140  D[C,G]=D1+G
150  NEXT G
160  FOR G=M[C]+1 TO 31
170  D[C,G]=0
190  NEXT G
200  D1=D1+M[C]
210  NEXT C
220  C$="1234567890"
230  DIM P$[64]
240  GOSUB 1000
250  PRINT 
260  PRINT 
270  PRINT 
280  PRINT 
290  PRINT TAB(18)"CALENDAR FOR YEAR"Y
300  PRINT 
310  PRINT 
311  DIM H$[39]
312  DATA "DAYJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
313  READ H$
320  FOR H=1 TO 13
330  S=H*5-4
332  T=H*3-2
335  P$[S,S+2]=H$[T,T+2]
340  NEXT H
350  PRINT P$
360  PRINT 
370  FOR C=1 TO 31
400  N=D[1,C]
410  GOSUB 2000
420  GOSUB 1000
440  IF Z[2]#0 THEN 455
450  P$[1,1]=" "
451  GOTO 470
455  P$[1,1]=C$[Z[2],Z[2]]
470  IF Z[3]#0 THEN 490
480  P$[2,2]="0"
485  GOTO 495
490  P$[2,2]=C$[Z[3],Z[3]]
495  FOR W=1 TO 12
500  N=D[W+1,C]
520  W1=W*5+1
522  IF N=0 THEN 670
530  GOSUB 2000
540  IF Z[1]#0 THEN 560
550  P$[W1,W1]=" "
555  GOTO 570
560  P$[W1,W1]=C$[Z[1],Z[1]]
570  IF Z[2]#0 OR Z[1]#0 THEN 590
580  P$[W1+1,W1+1]=" "
585  GOTO 630
590  IF Z[2]#0 THEN 620
600  P$[W1+1,W1+1]="0"
610  GOTO 630
620  P$[W1+1,W1+1]=C$[Z[2],Z[2]]
630  IF Z[3]#0 THEN 660
640  P$[W1+2,W1+2]="0"
650  GOTO 662
660  P$[W1+2,W1+2]=C$[Z[3],Z[3]]
662  N=D[W+1,C]
664  IF INT((N-D9)/7)#(N-D9)/7 THEN 670
666  P$[W1+3,W1+3]="*"
670  NEXT W
675  PRINT P$
680  NEXT C
900  PRINT 
910  PRINT 
920  PRINT TAB(20)"SUNDAYS ARE SHOWN WITH AN *"
999  STOP 
1000  FOR B=1 TO 64
1020  NEXT B
1030  RETURN 
2000  REM  THIS SUB BRINGS BACK 3 NOS. = TO THE 3 DIGITS OF NUMBER
2010  REM  ENTER WITH NUMBER N, LEAVE WITH NUMBERS Z(I)
2020  FOR Z1=3 TO 1 STEP -1
2030  N=N/10
2040  Z[Z1]=INT(10*(N-INT(N))+.001)
2050  NEXT Z1
2060  RETURN 
3000  Y1=Y-1
3005  D9=37+INT(Y1/4)+Y1+INT(Y1/400)-INT(Y1/100)
3010  Q=7000
3020  IF D9-Q <= 0 THEN 3050
3030  D9=D9-Q
3040  GOTO 3020
3050  IF Q=7 THEN 3080
3060  Q=Q/10
3070  GOTO 3020
3080  D9=D9+1
3090  IF D9<8 THEN 3200
3100  D9=D9-7
3110  GOTO 3090
3200  D9=10-D9
3202  IF D9<8 THEN 3210
3204  D9=D9-7
3210  RETURN 
9999  END 
