So something like this:
Code:
' increment date if day changed over
'
if DayChanged = 1 then
calday = calday + 1
if calday > caldim[calmonth-1] then
calday = 1
calmonth = calmonth + 1
endif
if calmonth > 12 then
calmonth = 1
calyear = calyear + 1
endif
'
DayChanged = 0
gosub setcal
endif ' DayChanged
'
‘
goto main
‘
This is the calendar that is called as a subroutine called “setcal”:
Code:
'
' ******************* set calendar date and find day of week *******************
'
setcal: ' find leap year status
caldim[0] = 31 ' set default days in month table
caldim[1] = 28 ' days in February is changed to 29 by the program
caldim[2] = 31 '
caldim[3] = 30 '
caldim[4] = 31 '
caldim[5] = 30 '
caldim[6] = 31 '
caldim[7] = 31 '
caldim[8] = 30 '
caldim[9] = 31 '
caldim[10] = 30 '
caldim[11] = 31 '
'
calleap = 0 ' clear leap year status
if calyear // 4 = 0 then '
calleap = 1 ' set leap year status
if calyear // 100 = 0 then '
calleap = 0 ' clear leap year status
if calyear // 400 = 0 then '
calleap = 1 ' set leap year status
endif '
endif '
endif '
'
if calleap = 1 then '
caldim[1] = 29 '
endif '
'
calbadentry = 0 ' reset calendar bad entry status
if calmonth = 0 then ' check for invalid date input
calbadentry = 1 '
calmonth = 1 '
endif '
if calmonth > 12 then '
calbadentry = 1 '
calmonth = 1 '
endif '
if calday = 0 then '
calbadentry = 1 '
calday = 1 '
endif '
if calday > caldim[calmonth-1] then
calbadentry = 1 '
calday = 1 '
endif '
if calyear < 1800 then ' implement lower year range restriction
calbadentry = 1 ' prevent far away dates slowing program down
calyear = 1800 '
endif '
if calyear > 2300 then ' implement higher year range restriction
calbadentry = 1 ' in case of errors far into the future
calyear = 2300 '
endif ' the hardware probably won't last that long
'
' day of week
'
xwork = 2310 ' find best epoch year to iterate from
cacnt = 12 '
while xwork >= calyear '
gosub epochyears '
cacnt = cacnt - 1 '
wend '
'
'
cwork = 0 ' working variable for days
'
for cacnt = xwork to calyear - 1' iterate years from epoch year
calleapx = 0 ' clear leap year status
if cacnt // 4 = 0 then '
calleapx = 1 ' set leap year status
if cacnt // 100 = 0 then '
calleapx = 0 ' clear leap year status
if cacnt // 400 = 0 then '
calleapx = 1 ' set leap year status
endif '
endif '
endif '
'
if calleapx = 0 then ' add days over the years from epoch
cwork = (cwork + 365)//7 '
else '
cwork = (cwork + 366)//7 '
endif '
'
next cacnt '
'
if calleap = 1 then ' fix day of month table for current year
caldim[1] = 29 '
else '
caldim[1] = 28 '
endif '
'
cacnt = calmonth-1 ' add days for elapsed months of current year
while cacnt > 0 '
xwork = caldim[cacnt-1] '
cwork = (cwork + xwork)//7 '
cacnt = cacnt - 1 '
wend '
'
cacnt = calday-1 ' add days elapsed of current month
xwork = 0 '
while cacnt > 0 '
xwork = xwork + 1 '
cacnt = cacnt - 1 '
wend '
cwork = (cwork + xwork)//7 '
'
'
caldow = cwork + 1 ' shift range for display so 0=Sunday, 6=Saturday.
if caldow = 7 then caldow = 0 '
return
'
'
epochyears:
lookup2 cacnt,[1798,1849,1900,1951,1990,2035,2052,2091,2125,2153,2198,2227,2244],xwork
return
'