10 REM W0SL PGM FOR IBM PC XLATED BY N9HR 15 REM UPDATED 6/2006 KG4NIQ 20 CLEAR256:MAXFILES=1 40 CLS:KEY OFF:SCREEN 0,0:DEFINT J,U:DIM C(3,3):DIM N$(17) 50 PRINT " MODEL 100 SATELLITE TRACKING PROGRAM" 55 PRINT" TAB=MENU, ESC=EXITS, CTRL-R=RESTART" 60 FOR I=1 TO 1000:NEXT:CLS:D$=DATE$ 130 GOSUB 1150 140 LINC=0:L5=0:W5=0 141 PRINT TAB(3);"** SELECT A SATELLITE TO TRACK **" 145 FOR I=1 TO 12 150 INPUT #1,N$(I),DD,DD,DD,DD,DD,DD,DD,DD,DD,DD,DD,DD,DD 151 NEXT I: CLOSE 1: FOR I=1 TO 12 STEP 3 160 IF I<10 THEN PRINT " "I;"= "N$(I)" "I+1;"= "N$(I+1);" "I+2;"= "N$(I+2):NEXT I 161 PRINT I;"= "N$(I)" "I+1;"= "N$(I+1);" "I+2;"= "N$(I+2):NEXT I 162 REM PRINT " 16 = "N$(16) 165 PRINT "NUMBER"; 180 INPUT Q$:IF Q$="" OR VAL(Q$)>16 THEN 180 190 J=VAL(Q$) 195 GOSUB 1150 197 FOR I=1 TO 12 200 IF I=J THEN INPUT #1,I$,Y3,T0,I0,O0,E0,W0,M0,N0,N1,K0,F0,BA,BN:GOTO 210 205 INPUT #1,DD,DD,DD,DD,DD,DD,DD,DD,DD,DD,DD,DD,DD,DD:NEXT I 210 CLOSE 1:U1=VAL(RIGHT$(D$,2)) 220 IF Y3=U1 OR Y3=U1-1 THEN 230 ELSE PRINT "DATA FOR ";I$;" IS OBSOLETE":STOP 230 P1=3.1415926535#:R0=6378.16:F=298.25 240 G0=75369793000000#:G1=1.0027379093# 250 P2=2*P1:P0=P1/180:F=1/F:L8=L9*P0:S9=SIN(L8):C9=COS(L8) 260 S8=SIN(-W9*P0):C8=COS(W9*P0) 270 R9=R0*(1-(F/2)+(F/2)*COS(2*L8))+H9/1000 280 L8=ATN((1-F)^2*S9/C9):Z9=R9*SIN(L8) 290 X9=R9*COS(L8)*C8:Y9=R9*COS(L8)*S8 300 R6=0:T6=0:GOSUB 1340:GOSUB 1070 310 GOSUB 390:GOSUB 1000 320 U7=U6+11 330 IF U7=>60 THEN U7=U7-60 340 Q$=INKEY$ 350 IF Q$=CHR$(27) THEN CLS:GOSUB 5000 360 IF Q$=CHR$(18) THEN CLS:GOTO 60 365 IF Q$=CHR$(9) THEN CLS:GOSUB 1150:GOTO 140 370 T1=VAL(RIGHT$(TIME$,2)):IF T1=U7 THEN 310 ELSE 340 390 D$=DATE$:U1=VAL(RIGHT$(D$,2)):U2=VAL(LEFT$(D$,2)):U3=VAL(MID$(D$,4,2)) 400 T=INT(30.55*(U2+2))-2*(INT(.1*(U2+7)))-91 410 IF U2>2 THEN IF U1/4=INT(U1/4) THEN T=T+1 420 IF Y3=U1-1 THEN T=T+365 ELSE 440 430 IF Y3/4=INT(Y3/4) THEN T=T+1 440 T$=TIME$:U4=VAL(LEFT$(T$,2)):U4=U4+TIME:U5=VAL(MID$(T$,4,2)) 445 U6=VAL(RIGHT$(T$,2)) 450 T=T+U3+U4/24+U5/1440+U6/86400! 460 AB(1)=COS(BA*P0)*COS(P1+BN*P0) 470 AB(2)=COS(BA*P0)*SIN(P1+BN*P0) 480 AB(3)=-SIN(BA*P0) 490 N=N0+2*(T-T0)*N1:A0=((G0/(N*N))^(1#/3#)) 510 E2=1-E0*E0:E1=SQR(E2):Q0=M0/360+K0 520 K2=9.95*((R0/A0)^3.5)/(E2*E2) 530 S1=SIN(I0*P0):C1=COS(I0*P0) 540 O=O0-(T-T0)*K2*C1:S0=SIN(O*P0):C0=COS(O*P0) 550 W=W0+(T-T0)*K2*(2.5*(C1*C1)-.5) 560 S2=SIN(W*P0):C2=COS(W*P0) 570 C(1,1)=+(C2*C0)-(S2*S0*C1):C(1,2)=-(S2*C0)-(C2*S0*C1):C(1,3)=S0*S1 580 C(2,1)=+(C2*S0)+(S2*C0*C1):C(2,2)=-(S2*S0)+(C2*C0*C1):C(2,3)=-C0*S1 590 C(3,1)=+(S2*S1):C(3,2)=+(C2*S1):C(3,3)=C1 600 AX=C(1,1)*AB(1)+C(1,2)*AB(2)+C(1,3)*AB(3) 610 AY=C(2,1)*AB(1)+C(2,2)*AB(2)+C(2,3)*AB(3) 620 AZ=C(3,1)*AB(1)+C(3,2)*AB(2)+C(3,3)*AB(3) 630 Q=(N0+N1*(T-T0))*(T-T0)+Q0:K=INT(Q):M9=INT((Q-K)*256):M=(Q-K)*P2 640 E=M+E0*SIN(M)+.5*(E0*E0)*SIN(2*M) 650 S3=SIN(E):C3=COS(E):R3=1-E0*C3:M1=E-E0*S3 660 M5=M1-M:IF ABS(M5)>.0001 THEN E=E-M5/R3:GOTO 650 680 X0=A0*(C3-E0):Y0=A0*E1*S3:R=A0*R3 690 X1=X0*C(1,1)+Y0*C(1,2):Y1=X0*C(2,1)+Y0*C(2,2):Z1=X0*C(3,1)+Y0*C(3,2) 700 G7=T*G1+G2:G7=(G7-INT(G7))*P2:S7=-SIN(G7):C7=COS(G7) 710 BX=AX*COS(G7)+AY*SIN(G7) 720 BY=-AX*SIN(G7)+AY*COS(G7) 730 X=+(X1*C7)-(Y1*S7):Y=+(X1*S7)+(Y1*C7):Z=Z1 740 X5=(X-X9):Y5=(Y-Y9):Z5=(Z-Z9):R5=SQR(X5*X5+Y5*Y5+Z5*Z5) 750 Z8=+(X5*C8*C9)+(Y5*S8*C9)+(Z5*S9) 760 X8=-(X5*C8*S9)-(Y5*S8*S9)+(Z5*C9):Y8=+(Y5*C8)-(X5*S8) 770 S5=Z8/R5:C5=SQR(1-S5*S5):E9=ATN(S5/C5)/P0 800 IF X8<0 THEN A9=P1+ATN(Y8/X8) ELSE 820 810 GOTO 850 820 IFX8>0ANDY8>0THENA9=ATN(Y8/X8)ELSEIFX8>0THENA9=P2+ATN(Y8/X8)ELSE 840 830 GOTO 850 840 IF Y8<0 THEN A9=3*P1/2 ELSE A9=P1/2 850 A9=A9/P0 860 IFX<0THENW5=P1+ATN(Y/X)ELSE880 870 GOTO910 880 IFX>0ANDY>0THENW5=ATN(Y/X)ELSEIFX>0THENW5=P2+ATN(Y/X)ELSE900 890 GOTO910 900 IFY<0THENW5=3*P1/2ELSEW5=P1/2 910 W5=360-W5/P0:B5=Z/R:L5=ATN(B5/(SQR(1-B5^2)))/P0 920 F8=(R5-R6)/((T6-6)*86400)*F0*1000/299792.5 930 R6=R5:T6=T 940 LA=(BX*X5+BY*Y5+AZ*Z5)/R5 950 LA=-ATN(LA/SQR(-LA*LA+1#))+P1/2 960 LA=(P1-LA)*180/P1:RETURN 1000 GOSUB 4000:PRINT T$;" "; 1010 IF B=0 AND E9>=0 THEN B=1:BEEP:BEEP:BEEP:BEEP:BEEP:BEEP:BEEP:BEEP:BEEP 1020 IF B=1 AND E9<0 THEN B=0:BEEP:BEEP:BEEP:BEEP:BEEP:BEEP:BEEP:BEEP:BEEP 1050 PRINT TAB(10); 1060 PRINT USING"### ### ##### ###.## ### ###";A9,E9,R5,F8,M9,LA:RETURN 1070 CLS:PRINT"QTH: ";C$;" ";I$;" ";"LAT: "; 1072 PRINTUSING "### ";L5; 1074 PRINT "LONG:"; 1076 PRINTUSING "###";W5 1080 PRINT D$;TAB(10);"AZM ELV RANGE DPLR PHS PA" 1090 PRINT TAB(10);"--- --- ----- ----- --- ---":RETURN 1100 PRINT " MODEL 100/102/200 TRACKING PROGRAM " 1102 PRINT" TAB=MENU, ESC=EXITS, CTRL R=COLD START" 1103 RETURN 1150 OPEN "RAM:KEPLRN.DO"FOR INPUT AS 1:INPUT #1,L9,W9,H9,C$,TIME:RETURN 1340 SY=Y3+1900 1350 X2=INT((SY-1)/100) 1360 G2=2#-X2+INT(X2/4)+INT(365.25*(SY-1))+INT(30.6001*14) 1370 G2=(G2-730550.5#)/36525! 1380 G2=(G2*(G2*(G2*-7.1759593D-11+.00000107759259#)+100.002139#))+.279057273# 1390 G2=G2-INT(G2):RETURN 4000 IF LINC=3 THEN GOTO 4010 ELSE LINC=LINC+1:RETURN 4010 CLS:LINC=0:GOSUB 1070:RETURN 5000 MENU 5010 END