1 REM **G01 INPUT YEAR**
5 CLS
6 R% = 0
7 S% = 0
8 T% = 0
9 U% = 0
10 PRINT "-- The Hebrew Calendar (HOLY DAYS) --"
15 PRINT ""
20 PRINT "Input the year YYYY from (-3761 TO 2399)"
21 INPUT "to calculate HOLY DAYS";YEAR%
25 LET BENCH%=-3761
29 REM **G02 GETTING CYCLES**
30 IF YEAR% >= 0 THEN LET CYCLES%=ABS(INT(BENCH%-YEAR%+1)/19)
31 IF YEAR% >= 0 THEN LET EY=INT(19*(ABS(BENCH%-YEAR%+1)/19-CYCLES%)+0.5)
32 IF YEAR% < 0 THEN LET CYCLES%=ABS(INT((BENCH%-YEAR%)/19 + 0.5))
33 IF YEAR% < 0 THEN LET EY=INT(19*(ABS(BENCH%-YEAR%)/19-CYCLES%)+0.5)
50 REM WORKING
52 CLS
53 PRINT "" : PRINT "" : PRINT "" : PRINT "              **WORKING**"
55 REM
59 REM **L01**
60 IF YEAR% < 142 GOTO 61 ELSE GOTO 68
61 IF EY >= 2 THEN LET L = 1
62 IF EY >= 5 THEN LET L = 2
63 IF EY >= 7 THEN LET L = 3
64 IF EY >= 10 THEN LET L = 4
65 IF EY >= 13 THEN LET L = 5
66 IF EY >= 16 THEN LET L = 6
67 IF EY >= 18 THEN LET L = 7 : GOTO 80
68 IF YEAR% > 142 GOTO 69 ELSE GOTO 80
69 IF EY >= 3 THEN LET L = 1
70 IF EY >= 6 THEN LET L = 2
71 IF EY >= 8 THEN LET L = 3
72 IF EY >= 11 THEN LET L = 4
73 IF EY >= 14 THEN LET L = 5
74 IF EY >= 17 THEN LET L = 6
75 IF EY >= 19 THEN LET L = 7
80 LET C = EY - L
81 REM
90 REM **G03: MULTIPLY THE MOLAD DAY ADVANCEMENT CYCLES**
91 LET ACTD = CYCLES% * 2
92 LET BTH = CYCLES% * 16
93 LET CCTV = CYCLES% * 595
95 REM
100 REM **G04: MULTIPLY THE MOLAD DAY ADVANCEMENT LEAP YEAR**
101 LET ALTD = L * 5
102 LET BLTH = L * 21
103 LET CLTP = L * 589
105 REM
110 REM **G05:MULTIPLY THE MOLAD DAY ADVANCEMENT COMMON YEAR**
111 LET AYTD = C * 4
112 LET BCYTH = C * 8
113 LET CYTP = C * 876
115 REM
119 REM **G06:MULTIPLY THE MOLAD DAY ADVANCEMENTS**
120 LET AGTD = ACTD + ALTD + AYTD 
121 LET BGTH = BTH + BLTH + BCYTH 
122 LET CGTP = INT(CCTP + CLTP + CYTP+0.5) 
123 LET BGTH = INT(CGTP/1080) + BGTH 
124 LET CGTP = INT(1080 * (CGTP/1080-INT(CGTP/1080))+0.5) 
125 LET AGTD = INT(BGTH/24) + AGTD 
126 LET BGTH = INT((BGTH/24-INT(BGTH/24))*24+0.5)
127 LET AGTD = INT(7 * (AGTD/7-INT(AGTD/7))+0.5) 
128 REM
130 REM **G07:REDUCING THE MOLAD DAY ADVANCEMENT
131 LET AGTD = AGTD + 1 
132 LET BGTH = BGTH + 23 
133 LET CGTP = CGTP + 204 
134 LET BGTH = INT(CGTP/1080) + BGTH 
135 LET CGTP = 1080 * ((CGTP/1080)-INT(CGTP/1080)) 
136 LET AGTD = INT(BGTH/24) + AGTD 
137 LET BGTH = INT(24 * ((BGTH/24)-INT(BGTH/24))+0.5) 
138 LET MDD = INT(AGTD+0.5)
139 LET BMH = BGTH
140 LET CMP1 = CGTP
141 IF MDD = 8 THEN LET MDD = 1
145 REM
160 REM **G08:MULTIPLY THE MOLAD DATE ADVANCEMENT CYCLES
161 LET AXTD = CYCLES% * 0
162 LET BXTH = CYCLES% * -1
163 LET CXTP = CYCLES% * -485
170 REM **G09:MULTIPLY THE MOLAD DATE ADVANCEMENT COMMON YEARS
171 LET ACXTD = C * -10
172 LET BCXTH = C * -21
173 LET CCXTP = C * -204 
180 REM **G10:MULTIPLY THE MOLAD DATE ADVANCEMENT LEAP YEAR
181 LET ALXD = L * 18
182 LET BLXH = L * 15
183 LET CLXP = L * 589
185 REM **G11:ADDING THE MOLAD DATE ADVANCEMENT
186 LET AZGTD = AXTD + ACXTD + ALXD 
187 LET BZGTH = BXTH + BCXTH + BLXH 
188 LET CZGTP = CXTP + CCXTP + CLXP 
189 REM
194 V1 = CZGTP/1080 : LET BZGTH = (SGN(V1) * INT(ABS(V1))) + BZGTH 
195 V2 = CZGTP/1080 : LET CZGTP = INT(1080 * (V2 - INT((SGN(V2) * INT(ABS(V2)))+0.5))+0.5)
197 V3 = BZGTH/24 : LET AZGTD = (SGN(V3) * INT(ABS(V3))) + AZGTD 
198 V4 = BZGTH/24 : LET BZGTH = INT(24 * (V4 - (SGN(V4) * INT(ABS(V4))))+0.5)
199 REM
200 REM **M01: ADDING THE MOLAD DATE TO THE BENCH MARK
201 IF AZGTD < 0 THEN LET ABD2 = 6 
202 IF AZGTD >= 0 THEN LET ABD2 = 6 
203 LET AMD1 = AZGTD + ABD2 
204 LET AMD2 = AMD1 
205 LET BMH1 = BZGTH + 23 
206 LET BMH2 = BMH1 
207 LET CMP1 = CZGTP + 204 
208 LET CMP2 = CMP1 
209 IF CMP2<0 THEN LET CMP2 = CMP2+1080 : LET bmh2=(bmh2-1)
211 IF CMP2 > 1080 THEN LET CMP2 = CMP2-1080 : LET bmh2=(bmh2+1)
213 IF bmh2 < 0 THEN LET bmh2 = bmh2+24 : LET amd2=(amd2-1)
215 IF bmh2 > 24 THEN LET bmh2 = bmh2-24 : LET amd2=(amd2+1)
217 IF amd2 < 0 AND azgtd < 0 THEN LET amd2 = amd2+30
218 REM
220 REM **L02:MAKING ROMAN LEAP YEAR CORRECTIONS
221 IF YEAR% >= 0 THEN LET RM = 4*(YEAR%/4-INT(YEAR%/4))
222 IF RM = 0 AND YEAR% >= 0 THEN LET ALPLUS = 0 
224 IF RM = 2 AND YEAR% >= 0 THEN LET ALPLUS = 12 
225 IF RM = 3 AND YEAR% >= 0 THEN LET ALPLUS = 19
226 IF YEAR% < 0 THEN LET RM = 4*(YEAR%/4-INT(YEAR%/4))
227 IF RM = 1 AND YEAR% < 0 THEN LET ALPLUS = 0
228 IF RM = 0 AND YEAR% < 0 THEN LET ALPLUS = 6
229 IF RM = 3 AND YEAR% < 0 THEN LET ALPLUS = 12
230 IF RM = 2 AND YEAR% < 0 THEN LET ALPLUS = 18
231 REM
240 REM **L03:MAKING ROMAN LEAP YEAR CORRECTIONS
241 LET BDPLUS = 0 
242 IF YEAR% < 1582 THEN GOTO 260
243 IF YEAR% <= 1699 THEN BDPLUS = 10 : GOTO 260
244 IF YEAR% <= 1799 THEN BDPLUS = 11 : GOTO 260
245 IF YEAR% <= 1899 THEN BDPLUS = 12 : GOTO 260
246 IF YEAR% <= 2099 THEN BDPLUS = 13 : GOTO 260
247 IF YEAR% <= 2199 THEN BDPLUS = 14 : GOTO 260
248 IF YEAR% <= 2299 THEN BDPLUS = 15 : GOTO 260
249 IF YEAR% <= 2399 THEN BDPLUS = 16 : GOTO 260
250 IF YEAR% <= 2499 THEN BDPLUS = 17 : GOTO 260
251 IF YEAR% <= 2599 THEN BDPLUS = 18 : GOTO 260
260 REM **C01
261 LET CF$ = "Y"
262 V5 = (BENCH%-YEAR%)/19 : LET Y34 = 19*ABS(V5-(SGN(V5) * INT(ABS(V5))))
263 LET Y34 = -INT(-Y34) 
264 IF YEAR% > 142 THEN GOTO 265
265 IF Y34 = 3 THEN LET CF$ = "Y" : GOTO 280
266 IF Y34 = 6 THEN LET CF$ = "Y" : GOTO 280
267 IF Y34 = 8 THEN LET CF$ = "Y" : GOTO 280
268 IF Y34 = 11 THEN LET CF$ = "Y" : GOTO 280
269 IF Y34 = 14 THEN LET CF$ = "Y" : GOTO 280
270 IF Y34 = 17 THEN LET CF$ = "Y" : GOTO 280
271 IF Y34 = 19 THEN LET CF$ = "Y" : GOTO 280
272 IF YEAR% <= 142 THEN GOTO 273
273 IF Y34 = 2 THEN LET CF$ = "N" : GOTO 280
274 IF Y34 = 5 THEN LET CF$ = "N" : GOTO 280
275 IF Y34 = 7 THEN LET CF$ = "N" : GOTO 280
276 IF Y34 = 10 THEN LET CF$ = "N" : GOTO 280
277 IF Y34 = 13 THEN LET CF$ = "N" : GOTO 280
278 IF Y34 = 16 THEN LET CF$ = "N" : GOTO 280
279 IF Y34 = 18 THEN LET CF$ = "N" : GOTO 280 
280 REM **C02:COMMON YEAR FOLLOWING AN INTERCALARY YEAR
281 LET DF$ = "N" 
282 IF YEAR% > 142 AND Y34 = 1 THEN LET DF$ = "Y" 
284 IF YEAR% > 142 AND (Y34 - 1) = 3 THEN LET DF$ = "Y"
285 IF YEAR% > 142 AND (Y34 - 1) = 6 THEN LET DF$ = "Y"
286 IF YEAR% > 142 AND (Y34 - 1) = 8 THEN LET DF$ = "Y"
287 IF YEAR% > 142 AND (Y34 - 1) = 11 THEN LET DF$ = "Y"
288 IF YEAR% > 142 AND (Y34 - 1) = 14 THEN LET DF$ = "Y"
289 IF YEAR% > 142 AND (Y34 - 1) = 17 THEN LET DF$ = "Y"
290 IF YEAR% > 142 AND (Y34 - 1) = 19 THEN LET DF$ = "Y"
291 IF YEAR% <= 142 AND (Y34 - 1) = 2 THEN LET DF$ = "Y"
293 IF YEAR% <= 142 AND (Y34 - 1) = 5 THEN LET DF$ = "Y"
294 IF YEAR% <= 142 AND (Y34 - 1) = 7 THEN LET DF$ = "Y"
295 IF YEAR% <= 142 AND (Y34 - 1) = 10 THEN LET DF$ = "Y"
296 IF YEAR% <= 142 AND (Y34 - 1) = 13 THEN LET DF$ = "Y"
297 IF YEAR% <= 142 AND (Y34 - 1) = 16 THEN LET DF$ = "Y"
298 IF YEAR% <= 142 AND (Y34 - 1) = 18 THEN LET DF$ = "Y"
300 REM **G12:ADDING THE ROMAN YEAR CORRECTIONS
301 LET MM2 = 1708.26 
302 LET AGM = MM2 
303 LET BMH2 = BMH2 + ALPLUS 
304 V6 = BMH2/24 : LET AMD2 = INT((SGN(V6) * INT(ABS(V6)))+0.5) + AMD2 
305 V7 = BMH2/24 : LET BMH2 = 24*(V7 - (SGN(V7) * INT(ABS(V7))))
306 LET AMD2 = BDPLUS + AMD2 
307 LET AGM = (AMD2)/100 + AGM 
308 LET MM2 = MM2 + BDPLUS 
309 IF AMD2 > 30 THEN LET AMD2 = AMD2 - 30 
311 LET ATD = MDD
312 IF ATD = 1 THEN LET MT$ = "SUNDAY "
313 IF ATD = 2 THEN LET MT$ = "MONDAY "
314 IF ATD = 3 THEN LET MT$ = "TUESDAY "
315 IF ATD = 4 THEN LET MT$ = "WEDNESDAY"
316 IF ATD = 5 THEN LET MT$ = "THURSDAY"
317 IF ATD = 6 THEN LET MT$ = "FRIDAY "
318 IF ATD = 7 THEN LET MT$ = "SABBATH "
320 REM **L04:APPLYING POSTPONEMENT RULES 1 TO 4
323 IF bmh1 > 12 THEN LET ATD = ATD + 1 : LET AMD2 = AMD2 + 1 : LET R% = 1
324 IF ATD = 8 THEN LET ATD = 1 : LET R% = 1 : GOTO 325
325 REM
327 IF ATD = 1 THEN LET ATD = 2 : LET AMD2 = AMD2 + 1 : LET S% = 2 : GOTO 332
330 IF ATD = 4 THEN LET ATD = 5 : LET AMD2 = AMD2 + 1 : LET S% = 2 : GOTO 332
331 IF ATD = 6 THEN LET ATD = 7 : LET AMD2 = AMD2 + 1 : LET S% = 2 : GOTO 332
332 LET W = 0 : LET Z = 0
336 IF ATD = 3 AND (AMD = 3 OR bmh1 >= 3) AND CMP1 >= 204 THEN LET W = 1 : GOTO 337
337 IF W = 1 AND CF$ = "Y" THEN LET ATD = 5 : LET AMD2 = AMD2 + 2 : LET T% = 3
340 IF ATD = 2 AND (AMD2 = 2 OR bmh1 >= 9) AND CMP1 >= 589 THEN LET Z = 1 : GOTO 341
341 IF Z = 1 AND CF$ = "Y" AND DF$ = "Y" THEN LET ATD = 3 : LET AMD2 = AMD2 + 1 : LET U% = 4
360 REM **G98:DISPLAY THE MOLAD RESULTS
361 REM PRINT "POSTPONEMENT RULES:";R%;",";S%;",";T%;",";U%
362 REM PRINT "ATD:";ATD;" ,";YEAR%;" MOLAD:";AMD2;"D";BMH;"H";CMP1;"P"
370 REM **G13: ANNUAL FESTIVALS DATA ROUTER**
371 ON INT((ATD/2)+0.5) GOTO 372, 388, 404, 421
372 RESTORE 470 : GOTO 450 : REM MONDAY SCHEDULE
388 RESTORE 480 : GOTO 450 : REM TUESDAY SCHEDULE
404 RESTORE 490 : GOTO 450 : REM THURSDAY SCHEDULE
421 RESTORE 500 : GOTO 450 : REM SABBATH SCHEDULE
450 READ M$,PD,DT$,PUBD,FUBT$,LUBD,LUBT$
460 READ PND,PENT$,AD,AT$,FOTD,FOTT$,LGDD,LGDT$
465 GOTO 503
470 DATA "MONDAY ",6,"FRIDAY ",7,"SABBATH ",6,"FRIDAY "
475 DATA 1,"SUNDAY ",4,"WEDNESDAY",2,"MONDAY ",2,"MONDAY "
480 DATA "TUESDAY ",7,"SABBATH ",1,"SUNDAY ",7,"SABBATH "
485 DATA 1,"SUNDAY ",5,"THURSDAY",3,"TUESDAY ",3,"TUESDAY "
490 DATA "THURSDAY",2,"MONDAY ",3,"TUESDAY ",2,"MONDAY "
495 DATA 1,"SUNDAY ",7,"SABBATH ",5,"THURSDAY",5,"THURSDAY"
500 DATA "SABBATH ",4,"WEDNESDAY",5,"THURSDAY",4,"WEDNESDAY"
505 DATA 1,"SUNDAY ",2,"MONDAY ",7,"SABBATH ",7,"SABBATH "
503 REM **G14:GETTING THE DATES OF THE ANNUAL FESTIVALS
504 IF AZGTD < 0 THEN LET TN = (AMD2/100) + 9 + (2000/1000000) : GOTO 508
506 IF AZGTD >= 0 THEN LET TN = (AMD2/100) + 10 + (2000/100000) : GOTO 508
508 IF ATD = 2 THEN LET PPLUS = 44
509 IF ATD = 3 THEN LET PPLUS = 43
510 IF ATD = 5 THEN LET PPLUS = 48
511 IF ATD = 7 THEN LET PPLUS = 46
514 LET MM = INT(TN)
515 LET DD = INT(100*(TN - (SGN(TN) * INT(ABS(TN)))))
516 LET Y = YEAR% : LET D=DD : LET M=MM
517 cls
518 PRINT "Spring Holy Days:" : PRINT ""
519 REM **FINAL DISPLAY**
520 LET Y = YEAR% : LET D=DD : LET M=MM
521 S = 164
522 D=D-S
523 IF D>0 GOTO 528
524 M=M-1: IF M>0 GOTO 526
525 M=12:Y=Y-1
526 GOSUB 2000
527 D=D+LM: GOTO 523
528 PRINT "Passover : ";DT$;", ";M;"/";D;"/";Y
530 LET Y = YEAR% : LET D=DD : LET M=MM
531 S = 163
532 D=D-S
533 IF D>0 GOTO 538
534 M=M-1: IF M>0 GOTO 536
535 M=12:Y=Y-1
536 GOSUB 2000
537 D=D+LM: GOTO 533
538 PRINT "Days of : ";FUBT$;", ";M;"/";D;"/";Y
540 LET Y = YEAR% : LET D=DD : LET M=MM
541 S = 157
542 D=D-S
543 IF D>0 GOTO 548
544 M=M-1: IF M>0 GOTO 546
545 M=12:Y=Y-1
546 GOSUB 2000
547 D=D+LM: GOTO 543
548 PRINT "Unld Bread: ";LUBT$;", ";M;"/";D;"/";Y
549 LET Y = YEAR% : LET D=DD : LET M=MM
550 S = 157-PPLUS
551 D=D-S
552 IF D>0 GOTO 557
553 M=M-1: IF M>0 GOTO 555
554 M=12:Y=Y-1
555 GOSUB 2000
556 D=D+LM: GOTO 552
557 PRINT "Pentecost : ";PENT$;", ";M;"/";D;"/";Y : PRINT "" : INPUT "To view next page, (n)ext:"; NN$
558 IF INKEY$ = "" THEN GOTO 559
559 LET Y = YEAR% : LET D=DD : LET M=MM : CLS
560 PRINT "Fall Holy Days:" : PRINT "" : PRINT "Trumpet : ";M$;", ";M;"/";D;"/";Y
561 LET Y = YEAR% : LET D=DD : LET M=MM
562 A = 9
563 FOR I = 1 TO A
564 D = D + 1
565 GOSUB 1000
566 IF D > ML THEN D = 1 : M = M + 1
567 IF M > 12 THEN M = 1 : Y = Y + 1
568 NEXT I
569 PRINT "Atonement : ";AT$;", ";M;"/";D;"/";Y
570 LET Y = YEAR% : LET D=DD : LET M=MM
571 A = 14
572 FOR I = 1 TO A
573 D = D + 1
574 GOSUB 1000
575 IF D > ML THEN D = 1 : M = M + 1
576 IF M > 12 THEN M = 1 : Y = Y + 1
577 NEXT I
578 PRINT "The Feast  : ";FOTT$;", ";M;"/";D;"/";Y
580 LET Y = YEAR% : LET D=DD : LET M=MM
581 A = 21
582 FOR I = 1 TO A
583 D = D + 1
584 GOSUB 1000
585 IF D > ML THEN D = 1 : M = M + 1
586 IF M > 12 THEN M = 1 : Y = Y + 1
587 NEXT I
588 PRINT "Last G Day: ";LGDT$;", ";M;"/";D;"/";Y
589 PRINT "" 
590 INPUT "To view (p)revious page, or (e)nd:"; PP$ 
599 IF PP$ = "P" or PP$ = "p" THEN GOTO 517 
600 IF PP$ = "E" or PP$ = "e" GOTO 610
610 END
1000 REM --- SUBROUTINE: DAYS IN MONTH (ML) ---
1010 IF M=1 OR M=3 OR M=5 OR M=7 OR M=8 OR M=10 OR M=12 THEN ML=31:RETURN
1020 IF M=4 OR M=6 OR M=9 OR M=11 THEN ML=30:RETURN
1030 IF M=2 THEN ML=28:IF (Y/4)=INT(Y/4) THEN ML=29
1040 RETURN
2000 REM --- SUBROUTINE: DAYS IN MONTH (LM) ---
2100 LM=31:IF M=4 OR M=6 OR M=9 OR M=11 THEN LM=30
2300 RETURN