'EpochStepping.bas
FramesPerSecond = 5000
LastHit~&& = EpochTime~&& 'assume the start point is at 100%
Stepping = 10 '0..10 where 10 is 100%, 9 is 90%
Do
    k$ = InKey$
    If k$ <> "" Then LastHit~&& = EpochTime~&&: Stepping = 10
    Select Case EpochTime~&& - LastHit~&&
        Case Is > 13 * 60: Stepping = 0 'the 13th minute is maximum idleness
        Case Is > 9 * 60: Stepping = 1
        Case Is > 8 * 60: Stepping = 2
        Case Is > 7 * 60: Stepping = 3
        Case Is > 6 * 60: Stepping = 4
        Case Is > 5 * 60: Stepping = 5
        Case Is > 4 * 60: Stepping = 6
        Case Is > 3 * 60: Stepping = 7
        Case Is > 2 * 60: Stepping = 8
        Case Is > 1 * 60: Stepping = 9
        Case Else
    End Select
    Locate 1, 1
    Print "Epoch ="; EpochTime~&&
    Print "Stepping (10..0) ="; Stepping; " "
    Print "_LIMIT ="; Int(FramesPerSecond * (Stepping * .1)); "(+1)    "
    _Display
    _Limit Int(FramesPerSecond * (Stepping * .1)) + 1 'to avoid 0
Loop

Function EpochTime~&&
    DATEstamp$ = Date$: TIMEstamp$ = Time$
    Do While DATEstamp$ <> Date$ 'redo
        DATEstamp$ = Date$: TIMEstamp$ = Time$
    Loop
    m = Val(Left$(DATEstamp$, 2))
    d~&& = Val(Mid$(DATEstamp$, 4, 2))
    y~&& = Val(Right$(DATEstamp$, 4)) - 1970
    For i = 1 To m
        Select Case i 'Add the number of days for each previous month passed
            Case 1: d~&& = d~&& 'January doestn't have any carry over days.
            Case 2, 4, 6, 8, 9, 11: d~&& = d~&& + 31
            Case 3: d~&& = d~&& + 28
            Case 5, 7, 10, 12: d~&& = d~&& + 30
        End Select
    Next
    d~&& = d~&& + y~&& * 365
    For i = 2 To y Step 4
        If m > 2 Then d~&& = d~&& + 1 'add an extra day for leap year every 4 years, starting in 1970
    Next
    d~&& = d~&& - 1 'for year 2000
    EpochTime~&& = d~&& * 24 * 60 * 60 + Val(Left$(TIMEstamp$, 2)) * 3600 + Val(Mid$(TIMEstamp$, 4, 2)) * 60 + Val(Right$(TIMEstamp$, 2))
End Function

