52 lines
883 B
Text
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
|