' Sunrise and Sunset calculation from http://users.electromagnetic.net/bu/astro/sunrise-set.php
' Liberty BASIC (or LBB) version by Richard Russell, http://www.rtrussell.co.uk/  24th May 2014
' We will find the sunrise and sunset for this date:
    day = 20
    month = 5
    year = 2014
' At this location:
    lw = 0.0  ' Longitude West, degrees
    ln = 51.1 ' Latitude North, degrees
' Find the Julian Day for the date in question:
    JD = 2415386 + date$(month;"/";day;"/";year)
' Calculate the Julian Cycle number:
    nStar = (JD - 2451545.0009) - (lw / 360)
    n = int(nStar + 0.5) 
' Approximate the Julian date of solar noon:
    JStar = 2451545.0009 + (lw / 360) + n 
' Calculate the mean solar anomaly:
    M = (357.5291 + 0.98560028 * (JStar - 2451545)) mod 360 
' Calculate the equation of center:
    C = (1.9148 * sinrad(M)) + (0.0200 * sinrad(2*M)) + (0.0003 * sinrad(3*M)) 
' Calculate the ecliptical longitude of the sun:
    lambda = (M + 102.9372 + C + 180) mod 360 
' Calculate an accurate Julian date for solar noon:
    Jtransit = JStar + (0.0053 * sinrad(M)) - (0.0069 * sinrad(2 * lambda)) 
' Calculate the declination of the sun:
    delta = degasn(sinrad(lambda) * sinrad(23.45)) 
' Calculate the hour angle:
    H = degacs((sinrad(-0.83) - sinrad(ln) * sinrad(delta)) / (cosrad(ln) * cosrad(delta))) 
' Go back through the approximation again:
    JStarStar = 2451545.0009 + ((H + lw) / 360) + n 
' Calculate sunset time:
    Jset = JStarStar + (0.0053 * sinrad(M)) - (0.0069 * sinrad(2 * lambda)) 
' Assume that solar noon is half-way between sunrise and sunset (valid for latitudes < 60):
    Jrise = 2 * Jtransit - Jset
' Print results
print "Sunrise: JD = "; using("#######.########", Jrise); ", UTC = "; timefromJD$(Jrise)
print "Sunset:  JD = "; using("#######.########", Jset);  ", UTC = "; timefromJD$(Jset)
print "According to Wolfram Alpha sunrise is at 04:04 UTC and sunset at 19:52 UTC"
end
function sinrad(a)
    sinrad =sin(a / 57.29577951308232088)
end function
function cosrad(a)
    cosrad =cos(a / 57.29577951308232088)
end function
function degasn(n)
    degasn = 57.29577951308232088 * asn(n)
end function
function degacs(n)
    degacs = 57.29577951308232088 * acs(n)
end function
function timefromJD$(jd)
    jd = jd + 0.5
    secs = int((jd - int(jd)) * 24 * 60 * 60 + 0.5)
    mins = int(secs / 60)
    hour = int(mins / 60)
    timefromJD$ = date$(int(jd) - 2415386);" "; _
    dig2$(hour);":";dig2$(mins mod 60);":";dig2$(secs mod 60)
end function
function dig2$(n)
    dig2$ = right$("0";n, 2)
end function