/* Biorhythms task for Rosetta Code https://rosettacode.org/wiki/Biorhythms Translated from FreeBASIC to FutureBasic Rich Love May 24, 2024 Oct 16, 2024 fixed the percentage amounts */ local fn Gregorian(db As str255) As short short M, Y, D Y = val(Left$(db,4)) : M = Val(Mid$(db,6,2)) : D = Val(Right$(db,2)) short N = (M+9) - Int((M+9)/12) * 12 short W = Y - Int(N/10) short G = 365 * W + Int(W/4) - Int(W/100) + Int(W/400) G += Int((N*306+5)/10)+(D-1) end fn = G void local fn Biorhythm(Birthdate As str255, Targetdate As str255) str255 TextArray(4,2) TextArray(0,0) = "up and rising" TextArray(1,0) = "up but falling" TextArray(2,0) = "down and falling" TextArray(3,0) = "down but rising" TextArray(0,1) = "peak" TextArray(1,1) = "transition" TextArray(2,1) = "valley" TextArray(3,1) = "transition" short DaysBetween = fn Gregorian(Targetdate) - fn Gregorian(Birthdate) + 1 short positionP = DaysBetween Mod 23 short positionE = DaysBetween Mod 28 short positionM = DaysBetween Mod 33 short quadrantP = Int(4 * positionP / 23) short quadrantE = Int(4 * positionE / 28) short quadrantM = Int(4 * positionM / 33) short percentageP = int(100 * Sin(2 * (pi * positionP) / 23)) short percentageE = int(100 * Sin(2 * (pi * positionE) / 28)) short percentageM = int(100 * Sin(2 * (pi * positionM) / 33)) str255 textP, textE, textM, Header1Text, Header2Text Select Case percentageP Case > 95 textP = "Physical day " + str$(positionP) + " : " + "peak" Case < -95 textP = "Physical day " + str$(positionP) + " : " + "valley" Case -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 textP = "Physical day " + str$(positionP) + " : " + "critical transition" Case Else textP = "Physical day " + str$(positionP) + " : " + str$(percentageP) + "% (" + TextArray(quadrantP,0) + ")" End Select Select Case percentageE Case > 95 textE = "Emotional day " + STR$(positionE) + " : " + "peak" Case < -95 textE = "Emotional day " + STR$(positionE) + " : " + "valley" Case -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 textE = "Emotional day " + STR$(positionE) + " : " + "critical transition" Case Else textE = "Emotional day " + STR$(positionE) + " : " + str$(percentageE) + "% (" + TextArray(quadrantE,0) + ")" End Select Select Case percentageM Case > 95 textM = "Mental day " + str$(positionM)+ " : " + "peak" Case < - 95 textM = "Mental day " + str$(positionM) + " : " + "valley" Case -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 textM = "Mental day " + str$(positionM) + " : " + "critical transition" Case Else textM = "Mental day " + str$(positionM) + " : " + str$(percentageM) + "% (" + TextArray(quadrantM,0) + ")" End Select Header1Text = "Born " + Birthdate + ", Target " + Targetdate Header2Text = "Day " + str$(DaysBetween) Print Header1Text Print Header2Text Print textP Print textE Print textM Print end fn window 1, @"Biorhythms" windowcenter(1) WindowSetBackgroundColor(1,fn ColorBlack) print // Lets do four different birthdates and target dates text ,,fn colorCyan fn Biorhythm("1943-03-09", "1972-07-11") text ,,fn colorGreen fn Biorhythm("1809-02-12", "1863-11-19") // DOB for Abraham Lincoln text ,,fn colorYellow fn Biorhythm("1809-01-12", "1863-11-19") text ,,fn colorWhite fn Biorhythm("1943-03-09", "1972-07-11") // Bobby Fisher Chess Tournament handleevents