# Check if a particular year is a LEAP year

By definition, a year is a **LEAP** year if all of these conditions are true …

a) The number is a whole multiple of 4

b) If the number is a whole multiple of 100 it is also a whole multiple of 400

So, 1600 and 2000 are LEAP years … but 1700, 1800, 1900 and 2100 are NOT LEAP years.

You deploy this subroutine (**IsThisALeapYear**) by supplying the value to be checked in variable **[IsThisALeapYear/Input]** … and upon return, examine the contents of **[IsThisAleapYear/Answer]** for values “True” or “False”… here is an example code snippet …

```
SetVar "[IsThisALeapYear/Input]" "[TextEntry1]"
GoSub "IsThisALeapYear"
If "[IsThisAleapYear/Answer]" "=" "True"
AlertBox "Yes" "[TextEntry1] is a LEAP year"
Else
AlertBox "No" "[TextEntry1] is NOT a LEAP year"
EndIf
```

Note that the subroutine expects the year to include the century … if you supply the short form value of (say) 32, it will be treated like the year 32 (i.e. in the first century).

And here is the subroutine you would paste in your App’s **SubRoutines** section …

```
:IsThisALeapYear
... examines [IsThisALeapYear/Input] and returns True/False in [IsThisALeapYear/Answer]
...
... if not divisible by 4, not a leap year
Math "[IsThisALeapYear/Input]/4" "0" "[IsThisALeapYear/Y1]"
Math "[IsThisALeapYear/Input]-([IsThisALeapYear/Y1]*4)" "0" "[IsThisALeapYear/Y2]"
If "[IsThisALeapYear/Y2]" "<>" "!0"
SetVar "[IsThisALeapYear/Answer]" "False"
Return
EndIf
...
... divisible by 4 ... if not divisible by 100, it is leap year
Math "[IsThisALeapYear/Input]/100" "0" "[IsThisALeapYear/Y1]"
Math "[IsThisALeapYear/Input]-([IsThisALeapYear/Y1]*100)" "0" "[IsThisALeapYear/Y2]"
If "[IsThisALeapYear/Y2]" "<>" "!0"
SetVar "[IsThisALeapYear/Answer]" "True"
Return
EndIf
...
... divisible by 4 ... divisible by 100 ... if divisible by 400, it is leap year
Math "[IsThisALeapYear/Input]/400" "0" "[IsThisALeapYear/Y1]"
Math "[IsThisALeapYear/Input]-([IsThisALeapYear/Y1]*400)" "0" "[IsThisALeapYear/Y2]"
If "[IsThisALeapYear/Y2]" "=" "!0"
SetVar "[IsThisALeapYear/Answer]" "True"
Return
Else
SetVar "[IsThisALeapYear/Answer]" "False"
Return
EndIf
...
Return
```

Of course, if you plan on using such a function in many projects, you might consider turning the subroutine into a VisualNEO Win Function … something you might **Call** from any pub in your computer … for example …

```
Call "gkIsThisALeapYear" "[TextEntry1]" "[Result]"
```

## Comments