100 REM **IK2PIH LOCCALC** 105 DIM L(6):N=3.141593/180 110 PRINT CHR$(13) 115 PRINT "---------------------" 120 PRINT " IK2PIH LOCCALC" 125 PRINT "---------------------" 130 PRINT CHR$(13) 135 PRINT "1.BEAM HEADING & DIST" 140 PRINT "2.LON/LAT TO LOCATOR" 145 PRINT "3.END" 150 PRINT CHR$(13) 155 INPUT "YOUR CHOICE";J$ 160 Z=VAL(LEFT$(J$,1)) 165 IF Z<1 OR Z>3 THEN PRINT "WRONG CHOICE!":GOTO 155 170 IF Z=1 THEN GOSUB 200 175 IF Z=2 THEN GOSUB 375 180 IF Z<>3 THEN 110 185 END 190 REM 195 REM **HEADING/DISTANCE** 200 PRINT CHR$(13) 205 PRINT "---INSERT YOUR LOC---" 210 PRINT "TO QUIT ENTER 'END'" 215 PRINT "INSTEAD OF A LOCATOR" 220 PRINT CHR$(13) 225 INPUT "YOUR LOC";L$:GOSUB 485 230 IF Y=-2 THEN RETURN 235 IF Y=0 THEN PRINT "WRONG LOC!":GOTO 225 240 GOSUB 555 245 MO=LO:MA=LA 250 PRINT CHR$(13) 255 PRINT "LOC = ";L$ 260 PRINT "LON =";MO;" DEG" 265 PRINT "LAT =";MA;" DEG" 270 PRINT CHR$(13) 275 PRINT "---INSERT A LOC---" 280 PRINT "TO QUIT ENTER 'END'" 285 PRINT "INSTEAD OF A LOCATOR" 290 PRINT CHR$(13) 295 INPUT "LOC";L$:GOSUB 485 300 IF Y=-2 THEN RETURN 305 IF Y=0 THEN PRINT "WRONG LOC!":GOTO 295 310 GOSUB 555 315 OO=LO:OA=LA:GOSUB 595 320 PRINT CHR$(13) 325 PRINT "LON =";OO;" DEG" 330 PRINT "LAT =";OA;" DEG" 335 PRINT CHR$(13) 340 PRINT "HEAD=";H;" DEG" 345 PRINT "DIST=";DK;" KM" 350 PRINT "DIST=";DM;" MLS" 355 PRINT "---------------------" 360 GOTO 270 365 REM 370 REM **LON/LAT TO LOC** 375 PRINT CHR$(13) 380 PRINT "INPUT FORMAT: CNNN.DD" 385 PRINT CHR$(13) 390 PRINT SPC(5);"C = W/E/N/S" 395 PRINT "NNN.DD = DECIMAL DEG" 400 PRINT CHR$(13) 405 INPUT "LON";I$ 410 S=0:GOSUB 675 415 IF Y=0 THEN PRINT "WRONG LON!":GOTO 405 420 LO=B 425 INPUT "LAT";I$ 430 S=1:GOSUB 675 435 IF Y=0 THEN PRINT "WRONG LAT!":GOTO 425 440 LA=B 445 PRINT CHR$(13) 450 PRINT "LON=";LO 455 PRINT "LAT=";LA 460 GOSUB 765 465 PRINT "LOC= ";L$ 470 RETURN 475 REM 480 REM **CHECK LOCATOR** 485 E=LEN(L$) 490 IF E=4 THEN L$=L$+"LM":E=6 495 IF L$="END" THEN Y=-2:RETURN 500 IF E<>6 THEN Y=0:RETURN 505 Y=-1 510 FOR X=1 TO 6 515 A=ASC(MID$(L$,X,1)) 520 IF (A<65 OR A>82) AND (X=1 OR X=2) THEN Y=0 525 IF (A<48 OR A>57) AND (X=3 OR X=4) THEN Y=0 530 IF (A<65 OR A>88) AND (X=5 OR X=6) THEN Y=0 535 NEXT X 540 RETURN 545 REM 550 REM **LOC TO LON/LAT** 555 FOR X=1 TO 6 560 L(X)=ASC(MID$(L$,X,1)) 565 NEXT X 570 LO=-180+(L(1)-65)*20+(L(3)-48)*2+(L(5)-64.5)/12 575 LA=-90+(L(2)-65)*10+(L(4)-48)+(L(6)-64.5)/24 580 RETURN 585 REM 590 REM **COORD TO HEAD/DIST** 595 CA=COS(MO*N):CB=COS(MA*N) 600 CC=COS(OO*N):CD=COS(OA*N) 605 SA=SIN(MO*N):SB=SIN(MA*N) 610 SC=SIN(OO*N):SD=SIN(OA*N) 615 C=(CC*CA*CB*CD)+(SC*SA*CB*CD)+(SB*SD) 620 D=SQR(-C*C+1) 625 DK=(ATN(-C/D)+2*ATN(1))*6378:DM=DK/1.609 630 B=(SC*CA*CD)-(CC*SA*CD) 635 A=(CB*SD)-(SB*CD*CC*CA)-(SB*CD*SC*SA) 640 H=ABS(ATN(B/A))/N 645 IF B>=0 AND A<0 THEN H=180-H 650 IF B<0 AND A<0 THEN H=180+H 655 IF B<0 AND A>=0 THEN H=360-H 660 RETURN 665 REM 670 REM **CHECK LON/LAT** 675 Y=-1 680 IF LEN(I$)<>7 THEN Y=0:RETURN 685 FOR X=1 TO 7 690 A=ASC(MID$(I$,X,1)) 695 IF S=0 AND A<>69 AND A<>87 AND X=1 THEN Y=0 700 IF S=1 AND A<>78 AND A<>83 AND X=1 THEN Y=0 705 IF (A<48 OR A>57) AND X<>1 AND X<>5 THEN Y=0 710 IF A<>46 AND X=5 THEN Y=0 715 NEXT X 720 IF Y=0 THEN RETURN 725 B=VAL(RIGHT$(I$,6)) 730 A=ASC(LEFT$(I$,1)) 735 IF A=87 OR A=83 THEN B=-B 740 IF (B<-180 OR B>180) AND S=0 THEN Y=0 745 IF (B<-90 OR B>90) AND S=1 THEN Y=0 750 RETURN 755 REM 760 REM **LOC FROM LON/LAT** 765 L1=(LO+180)/20:L2=(LA+90)/10 770 A=INT(L1):B=INT(L2) 775 L1=(L1-A)*10:L2=(L2-B)*10 780 C=INT(L1):D=INT(L2) 785 E=INT((L1-C)*24):F=INT((L2-D)*24) 790 L(1)=A+65:L(2)=B+65 795 L(3)=C+48:L(4)=D+48 800 L(5)=E+65:L(6)=F+65 805 L$="" 810 FOR X=1 TO 6 815 L$=L$+CHR$(L(X)) 820 NEXT X 825 RETURN