RosettaCodeData/Task/Long-year/MoonRock/long-year.moonrock
2026-04-30 12:34:36 -04:00

52 lines
883 B
Text

' Long year
BEGIN DEF
pointer word PtrIsLY~
pointer word PtrWd~
SUB CheckIfLY(Y%, PtrIsLY~)
SUB CalcWD(Y%, PtrWd~)
BEGIN CODE
PRINT "**** List of ISO long years ****\n"
PRINT "Start year: "
INPUT (TmpStr$)
S% = VAL(TmpStr$)
PRINT "\nEnd year: "
INPUT (TmpStr$)
E% = VAL(TmpStr$)
PRINT "\n"
FOR Y% = S% TO E%
CALL CheckIfLY(Y%, VARPTR(IsLY%))
IF IsLY% = TRUE THEN
PRINT Y% + " "
ENDIF
NEXT Y%
PRINT "\n"
END
SUB CheckIfLY(Y%, PtrIsLY~)
' [PtrIsLY~] TRUE iff Y% is a long year
IsLY% = FALSE
CALL CalcWD(Y%, VARPTR(Wd%))
IF Wd% = 4 THEN
IsLY% = TRUE
ENDIF
Y% = Y% - 1
CALL CalcWD(Y%, VARPTR(Wd%))
IF Wd% = 3 THEN
IsLY% = TRUE
ENDIF
[PtrIsLY~] = IsLY%
END SUB
SUB CalcWD(Y%, PtrWd~)
' Weekday of Y%-12-31, 0 = Sunday
Wd% = Y%
Tmp% = Y% \ 4
Wd% = Wd% + Tmp%
Tmp% = Y% \ 100
Wd% = Wd% - Tmp%
Tmp% = Y% \ 400
Wd% = Wd% + Tmp%
Wd% = Wd% MOD 7
[PtrWd~] = Wd%
END SUB