100 CLS : KK = 111.12: DR = 57.296: NN = 60: SS = 69.06 200 HTH$ = "Adelaide": HAT$ = "34.99S": HON$ = "138.54E" ZZ$ = HAT$: GOSUB 600: HAT = ZZ: HAT = HAT / DR ZZ$ = HON$: GOSUB 600: HON = ZZ GC$ = "GREAT CIRCLE DISTANCE & BEARING": PRINT GC$ PRINT "FROM Home QTH ", HTH$: PRINT " Latitude ", HAT$; " degrees" PRINT " Longitude ", HON$; " degrees" PRINT : PRINT "Enter QTH values in degrees and decimals" PRINT "with S or N after latitude & E or W after longitude e.g. 168.2E" PRINT : INPUT "TO Remote QTH name "; QTH$ INPUT " Latitude "; LAT$ ZZ$ = LAT$: GOSUB 600: LAT = ZZ: LAT = LAT / DR INPUT " Longitude "; LON$ ZZ$ = LON$: GOSUB 600: LON = ZZ LDF = (HON - LON) / DR EE = SIN(HAT) * SIN(LAT) + COS(HAT) * COS(LAT) * COS(LDF) DD = -ATN(EE / SQR(ABS(1 - EE * EE))) + 1.57079 CC = (SIN(LAT) - SIN(HAT) * EE) / (COS(HAT) * SIN(DD)) IF CC >= 1 THEN CC = 0: GOTO 300 ELSE IF CC <= -1 THEN CC = 180 / DR: GOTO 300 CC = -ATN(CC / SQR(ABS(1 - CC * CC))) + 1.57079 300 C = INT(CC * DR) IF SIN(LDF) < 0 THEN C = 360 - C R = 180 + C IF R >= 360 THEN R = R - 360 PRINT : PRINT : PRINT GC$ PRINT "TO "; QTH$; " FROM "; HTH$ PRINT : PRINT "DISTANCE =", INT(KK * DD * DR); " km" PRINT , INT(SS * DD * DR); " miles" PRINT , INT(NN * DD * DR); " nautical miles" PRINT : PRINT "BEARING =", C; " degrees", "[Short Path]" PRINT , R; " degrees", "[Long Path]" 400 PRINT : INPUT "Any more to do [Y or N] "; K$ IF K$ = "Y" OR K$ = "y" THEN 100 500 CLS : END 600 YY = 1 IF RIGHT$(ZZ$, 1) = "E" OR RIGHT$(ZZ$, 1) = "e" THEN YY = -1 IF RIGHT$(ZZ$, 1) = "S" OR RIGHT$(ZZ$, 1) = "s" THEN YY = -1 ZZ = YY * VAL(LEFT$(ZZ$, LEN(ZZ$) - 1)) 700 RETURN