home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1
/
HamRadio.cdr
/
freq
/
qstmuf
/
qstmuf13.bas
next >
Wrap
BASIC Source File
|
1990-01-25
|
13KB
|
363 lines
100 REM SEE END FOR INFO
110 DEF FNC(Z) = 1.5708 - ATN(Z / SQR(1 -Z*Z))
120 KEY OFF
130 SCREEN 0
140 CLS
150 DIM M5(24)
160 ANS2$="N"
170 A$ = " "
180 M = 31
190 M$="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
200 P9=3.14159
210 R9=P9/180
220 P1=2*P9
230 R1=180/P9
240 P0=P9/2
250 CLS
260 COLOR 4,7
270 PRINT
280 PRINT"** QSTMUF V1.3 - MUF FORECAST PROGRAM - NBS MODIFIED BY PKH **"
290 COLOR 11,0
300 PRINT
301 REM PUT ANY COORDINATES YOU WANT IN THE FOLLOWING LINES PER FORMAT
310 PRINT "Reference Coordinates: Berna Radio, Switzerland 48.9,-7.5"
320 PRINT SPC(24)"Gander Radio, NFLD 49.0,54.5"
330 PRINT SPC(24)"Honolulu ARINC, HI 21.3,157.9"
340 PRINT SPC(24)"London Speedbird, UK 51.5,1.0"
350 PRINT SPC(24)"Melbourne (Suntree), FL 28.3,80.7"
360 PRINT SPC(24)"Miami Marine, FL 25.6,80.3"
370 PRINT SPC(24)"New York ARINC, NY 40.6,73.7"
380 PRINT SPC(24)"San Juan ARINC, PR 18.4,66.0"
390 PRINT SPC(24)"WWV, Boulder, CO 40.0,105.0"
400 PRINT
410 PRINT
420 COLOR 11,0
430 IF ANS2$="y" OR ANS2$="Y" THEN 540
431 REM PUT YOUR OWN TRANSMITTER NAME HERE IN LINE 440 USING FORMAT SHOWN
440 INPUT "Use Melbourne (Suntree) as the Transmitter (Y or N) ";ANS3$
450 IF ANS3$="y" OR ANS3$="Y" THEN 470
460 IF ANS3$="n" OR ANS3$="N" THEN 500 ELSE BEEP: GOTO 440
461 REM PUT YOUR OWN LAT L1 AND LONG W1 IN 470 AND 480 IN FORMAT SHOWN
470 L1=28.3
480 W1=80.7
490 GOTO 630
500 INPUT "Transmitter lat (- = south), long (- = east) = ";L1,W1
510 GOTO 580
520 IF L1<-90 THEN 560
530 IF L1>90 THEN 560
540 PRINT "Using transmitter lat (- = south), long (- = east) = ";L1;",";W1
550 GOTO 580
560 BEEP: COLOR 14,0: PRINT "Invalid latitude. Must be in range (-90,+90)."
570 COLOR 11,0: GOTO 500
580 IF W1<-360 THEN 610
590 IF W1>360 THEN 610
600 GOTO 630
610 BEEP: COLOR 14,0: PRINT "Invalid longitude. Must be in range (-360,+360)."
620 COLOR 11,0: GOTO 500
621 REM PUT YOUR OWN FAVORITE TARGET IN LINE 630 IN FORMAT SHOWN
630 INPUT "Use Berna Radio as the Receiver (Y or N) ";ANS4$
640 IF ANS4$="y" OR ANS4$="Y" THEN 660
650 IF ANS4$="n" OR ANS4$="N" THEN 690 ELSE BEEP: GOTO 630
651 REM PUT LAT LONG OF YOUR FAVORITE TARGET IN LINES 660 AND 670 IN FORMAT SHOWN
660 L2=48.9
670 W2=-7.5
680 GOTO 800
690 INPUT "Receiver lat (- = south), long (- = east) = ";L2,W2
700 IF L2<-90 THEN 730
710 IF L2>90 THEN 730
720 GOTO 750
730 BEEP: COLOR 14,0: PRINT "Invalid latitude. Must be in range (-90,+90)."
740 COLOR 11,0: GOTO 690
750 IF W2<-360 THEN 780
760 IF W2>360 THEN 780
770 GOTO 800
780 BEEP: COLOR 14,0: PRINT"Invalid longitude. Must be in range (-360,+360)."
790 COLOR 11,0: GOTO 690
800 D$=MID$(DATE$,4,2): M1$=LEFT$(DATE$,2): Y$=RIGHT$(DATE$,4)
810 IF VAL(MID$(DATE$,4,1))=0 THEN Q$=MID$(DATE$,5,1) ELSE Q$=MID$(DATE$,4,2)
820 D6=VAL(Q$): M0=VAL(M1$)
830 PRINT "Use system date ("D6","M0") for desired forecast ";
840 INPUT "(Y or N) ";ANS8$
850 IF ANS8$ = "N" OR ANS8$ = "n" THEN 880
860 IF ANS8$ = "Y" OR ANS8$ = "y" THEN 990 ELSE BEEP: GOTO 800
870 GOTO 990
880 INPUT "Date for which forecast desired (dd,mm) = ";D6,M0
890 IF M0<1 THEN 920
900 IF M0>12 THEN 920
910 GOTO 940
920 BEEP: COLOR 14,0: PRINT "Invalid month. Must be in range (1,12)."
930 COLOR 11,0: GOTO 880
940 IF D6<1 THEN 970
950 IF D6>M THEN 970
960 GOTO 990
970 BEEP: COLOR 14,0: PRINT "Invalid day. Must be in range (1,";M;")."
980 COLOR 11,0: GOTO 880
981 REM YOU SHOULD SET SOLARFLUX=nnn IN DOS SO IT CAN BE READ OUT HERE
990 S$=ENVIRON$("SOLARFLUX")
1000 S8=VAL(S$)
1010 IF S8 < 58 OR S8> 300 THEN 1060 ELSE 1020
1020 PRINT "Use 10.7cm solar flux " S$ " as set in Environment";
1030 INPUT " (Y or N) ";ANS5$
1040 IF ANS5$ = "Y" OR ANS5$ = "y" THEN 1130
1050 IF ANS5$ = "N" OR ANS5$ = "n" THEN 1090 ELSE BEEP: GOTO 1020
1060 INPUT "Solar flux set in environment unusable. Use default 215 ";ANS9$
1070 IF ANS9$ = "Y" OR ANS9$ = "y" THEN S8=215: GOTO 1130
1080 IF ANS9$ = "N" OR ANS9$ = "n" THEN 1090 ELSE BEEP: GOTO 1060
1090 INPUT"Use sunspot number (1), or 10.7cm solar flux (2) ";SUN1
1100 IF SUN1 = 1 THEN 1150
1110 IF SUN1 = 2 THEN 1120 ELSE BEEP: GOTO 1090
1120 INPUT "10.7 cm solar flux number to use = ";S8
1130 S9 = -62 + 1.08*S8
1140 GOTO 1170
1150 INPUT "Sunspot number to use = ";S9
1160 S8 = (S9+62)/1.08
1170 IF S9>0 THEN 1200
1180 BEEP: COLOR 14,0: PRINT "Invalid sunspot number. Must be non-negative."
1190 COLOR 11,0: GOTO 1090
1200 COLOR 11,0
1210 INPUT"Do you wish to save data to a file (Y or N) ";ANS$
1220 IF ANS$ = "N" OR ANS$ = "n" THEN 1240
1230 IF ANS$ = "Y" OR ANS$ = "y" THEN GOSUB 3220 ELSE BEEP: GOTO 1210
1240 INPUT"Do you wish to copy to the printer (Y or N) ";PRI$
1250 IF PRI$ = "N" OR PRI$ = "n" THEN 1270
1260 IF PRI$ = "Y" OR PRI$ = "y" THEN 1270 ELSE BEEP: GOTO 1240
1270 REM **BEARING ROUTINE**
1280 REM *** returns bearing in BRG and arc distance in D
1290 REM *** bearing is from transmitter to receiver
1300 GOSUB 3390
1310 REM *** conversion factors from arc to (km,naut miles,stat miles)
1320 K = 111.11 : N = 60 : S = 69.041
1330 M = 57.29577951308238#
1340 CLS
1350 COLOR 4,7
1360 A$=MID$(M$,3*M0-2,3)
1370 PRINT"** QSTMUF V1.3 - MUF FORECAST PROGRAM - NBS MODIFIED BY PKH **"
1380 COLOR 11,0:PRINT
1390 PRINT "FORECAST DATE : ";D6 A$ " "Y$
1400 PRINT "SOLAR ACTIVITY : Sunspot Nr. = ";S9;" Solar Flux = ";S8
1440 PRINT "TRANSMITTER : ";"Lat (- = S): ";L1;" Long (- = E): ";W1
1480 PRINT "RECEIVER : ";"Lat (- = S): ";L2;" Long (- = E): ";W2
1490 PRINT "BEARING TO RECR:";:PRINT USING"#####.##";BRG;:PRINT" Degrees"
1500 PRINT "DISTANCE : ";:PRINT USING"#####.##";D*M*K;:PRINT" Km, ";:PRINT USING"#####.##";D*M*S;:PRINT" SM, ";:PRINT USING"#####.##";D*M*N;:PRINT" NM"
1510 PRINT
1520 PRINT " HOUR(UT) MUF(MHZ) HOUR(UT) MUF(MHZ)"
1530 PRINT " -------------------------------------------------------"
1540 L1 = L1*R9
1550 W1 = W1*R9
1560 L2 = L2*R9
1570 W2 = W2*R9
1580 FOR T5=0 TO 11
1590 GOSUB 1940
1600 T5$ = STR$(T5)
1610 M5(T5) = INT(J9*100+1)/100
1620 J9$ = STR$(INT(J9))
1630 PRINT TAB(8)USING"##";T5;
1640 PRINT TAB(20)USING"##.#";M5(T5);
1650 T5=T5+12
1660 GOSUB 1940
1670 T5$ = STR$(T5)
1680 M5(T5) = INT(J9*100+1)/100
1690 J9$ = STR$(INT(J9))
1700 PRINT TAB(40)USING"##";T5;
1710 PRINT TAB(52)USING"##.#";M5(T5)
1720 T5=T5-12
1730 NEXT T5
1740 L1 = L1/R9
1750 W1 = W1/R9
1760 L2 = L2/R9
1770 W2 = W2/R9
1780 IF ANS$ = "Y" OR ANS$ = "y" THEN GOSUB 2860
1790 IF PRI$ = "Y" OR PRI$ = "y" THEN GOSUB 3330 ELSE 1810
1800 IF PRI$ = "Y" OR PRI$ = "y" THEN LCOPY
1810 FOR I = 1 TO 15000: NEXT I:PRINT
1820 COLOR 14,0
1830 INPUT "Enter N for next case, R to repeat case, or Q to Quit ";A1$
1840 IF A1$ = "Q" OR A1$ = "q" THEN 1920
1850 IF A1$ = "R" OR A1$ = "r" THEN 1200
1860 IF A1$ = "N" OR A1$ = "n" THEN 1870 ELSE BEEP: GOTO 1820
1870 COLOR 11,0
1880 INPUT "Do you wish to use same Transmitter lat/long (Y/N) ";ANS2$
1890 IF ANS2$ = "Y" OR ANS2$ = "y" GOTO 1910
1900 IF ANS2$ = "N" OR ANS2$ = "n" GOTO 1910 ELSE BEEP: GOTO 1880
1910 GOTO 250
1920 BEEP : CLS
1930 SYSTEM : END
1940 REM - MINIMUF 3.5
1950 K7 = SIN(L1)*SIN(L2) + COS(L1)*COS(L2)*COS(W2-W1)
1960 IF K7>=-1 THEN 1990
1970 K7 = -1
1980 GOTO 2010
1990 IF K7<=1 THEN 2010
2000 K7 = 1
2010 G1 = FNC(K7)
2020 K6 = 1.59*G1
2030 IF K6 >=1 THEN 2050
2040 K6 = 1
2050 K5 = 1/K6
2060 J9 = 100
2070 FOR K1 = 1/(2*K6) TO 1-1/(2*K6) STEP .9999-1/K6
2080 IF K5 = 1 THEN 2100
2090 K5 = .5
2100 P = SIN(L2)
2110 Q = COS(L2)
2120 A = (SIN(L1) - P*COS(G1)) / (Q*SIN(G1))
2130 B = G1*K1
2140 C = P*COS(B) + Q*SIN(B)*A
2150 D = (COS(B) - C*P) / (Q*SQR(1-C^2))
2160 IF D=>-1 THEN 2190
2170 D = -1
2180 GOTO 2210
2190 IF D<=1 THEN 2210
2200 D = 1
2210 D = FNC(D)
2220 W0 = W2 + SGN(SIN(W1-W2))*D
2230 IF W0=>0 THEN 2250
2240 W0 = W0 + P1
2250 IF W0 < P1 THEN 2270
2260 W0 = W0 - P1
2270 IF C=>-1 THEN 2300
2280 C = -1
2290 GOTO 2320
2300 IF C<=1 THEN 2320
2310 C = 1
2320 L0 = P0 - FNC(C)
2330 Y1 = .0172*(10+(M0-1)*30.4+D6)
2340 Y2 = .409*COS(Y1)
2350 K8 = 3.82*W0+12+.13*(SIN(Y1)+1.2*SIN(2*Y1))
2360 K8 = K8-12*(1+SGN(K8-24))*SGN(ABS(K8-24))
2370 IF COS(L0+Y2)>-.26 THEN 2460
2380 K9 = 0
2390 G0 = 0
2400 M9 = 2.5*G1*K5
2410 IF M9<=P0 THEN 2430
2420 M9 = P0
2430 M9 = SIN(M9)
2440 M9 = 1+2.5*M9*SQR(M9)
2450 GOTO 2710
2460 K9 = (-.26+SIN(Y2)*SIN(L0))/(COS(Y2)*COS(L0)+.001)
2470 K9 = 12-ATN(K9/SQR(ABS(1-K9*K9)))*7.63944
2480 T = K8-K9/2+12*(1-SGN(K8-K9/2))*SGN(ABS(K8-K9/2))
2490 T4 = K8+K9/2-12*(1+SGN(K8+K9/2-24))*SGN(ABS(K8+K9/2-24))
2500 C0 = ABS(COS(L0+Y2))
2510 T9 = 9.7*C0^9.600001
2520 IF T9>.1 THEN 2540
2530 T9 = .1
2540 M9 = 2.5*G1*K5
2550 IF M9 <= P0 THEN 2570
2560 M9 = P0
2570 M9 = SIN(M9)
2580 M9 = 1+2.5*M9*SQR(M9)
2590 IF T4<T THEN 2620
2600 IF (T5-T)*(T4-T5)>0 THEN 2630
2610 GOTO 2760
2620 IF (T5-T4)*(T-T5)>0 THEN 2760
2630 T6 = T5+12*(1+SGN(T-T5))*SGN(ABS(T-T5))
2640 G9 = P9*(T6-T)/K9
2650 G8 = P9*T9/K9
2660 U = (T-T6)/T9
2670 G0 = C0*(SIN(G9)+G8*(EXP(U)-COS(G9)))/(1+G8*G8)
2680 G7 = C0*(G8*(EXP(-K9/T9)+1))*EXP((K9-24)/2)/(1+G8*G8)
2690 IF G0=>G7 THEN 2710
2700 G0 = G7
2710 G2 = (1+S9/250)*M9*SQR(6+58*SQR(G0))
2720 G2 = G2*(1-.1*EXP((K9-24)/3))
2730 G2 = G2*(1+(1-SGN(L1)*SGN(L2))*.1)
2740 G2 = G2*(1-.1*(1+SGN(ABS(SIN(L0))-COS(L0))))
2750 GOTO 2820
2760 T6 = T5+12*(1+SGN(T4-T5))*SGN(ABS(T4-T5))
2770 G8 = P9*T9/K9
2780 U = (T4-T6)/2
2790 U1 = -K9/T9
2800 G0 = C0*(G8*(EXP(U1)+1))*EXP(U)/(1+G8*G8)
2810 GOTO 2710
2820 IF G2>J9 THEN 2840
2830 J9 = G2
2840 NEXT K1
2850 RETURN
2860 OPEN FILEN$ FOR APPEND AS #1
2870 PRINT# 1, "** QSTMUF V1.3 - MUF FORECAST PROGRAM - NBS MODIFIED BY PKH **"
2880 COLOR 11,0:PRINT# 1,
2890 PRINT# 1, "FORECAST DATE : ";D6 A$ " "Y$
2900 PRINT# 1, "SOLAR ACTIVITY : Sunspot Nr. = ";S9;" Solar Flux = ";S8
2940 PRINT# 1, "TRANSMITTER : ";"Lat (- = S): ";L1;" Long (- = E): ";W1
2980 PRINT# 1, "RECEIVER : ";"Lat (- = S): ";L2;" Long (- = E): ";W2
2990 PRINT# 1, "BEARING TO RECR:";:PRINT# 1, USING"#####.##";BRG;:PRINT# 1, " Degrees"
3000 PRINT# 1, "DISTANCE : ";:PRINT# 1, USING"#####.##";D*M*K;:PRINT# 1, " Km, ";:PRINT# 1, USING"#####.##";D*M*S;:PRINT# 1, " SM, ";:PRINT# 1, USING"#####.##";D*M*N;:PRINT# 1, " NM"
3010 PRINT# 1,
3020 PRINT# 1, " HOUR(UT) MUF(MHZ) HOUR(UT) MUF(MHZ)"
3030 PRINT# 1, " -------------------------------------------------------"
3040 L1 = L1*R9
3050 W1 = W1*R9
3060 L2 = L2*R9
3070 W2 = W2*R9
3080 FOR T5=0 TO 11
3090 PRINT# 1, TAB(8)USING"##";T5;
3100 PRINT# 1, TAB(20)USING"##.#";M5(T5);
3110 T5=T5+12
3120 PRINT# 1, TAB(40)USING"##";T5;
3130 PRINT# 1, TAB(52)USING"##.#";M5(T5)
3140 T5=T5-12
3150 NEXT T5
3160 CLOSE #1
3170 L1 = L1/R9
3180 W1 = W1/R9
3190 L2 = L2/R9
3200 W2 = W2/R9
3210 RETURN
3220 FILEN$="C:\WORKING\QSTMUF13.DAT"
3230 INPUT "Use default filespec (C:\WORKING\QSTMUF13.DAT) ";ANS6$
3240 IF ANS6$ = "Y" OR ANS6$ = "y" THEN 3320
3250 IF ANS6$ = "N" OR ANS6$ = "n" THEN 3260 ELSE BEEP: GOTO 3220
3260 INPUT "Complete filespec of data file, including path ";FILEN$
3270 IF FILEN$ = "" THEN BEEP: GOTO 3220
3280 PRINT "Filespec is " FILEN$ ", correct ";
3290 INPUT "(Y or N) ";ANS7$
3300 IF ANS7$ = "Y" OR ANS7$ = "y" THEN 3320 ELSE 3310
3310 IF ANS7$ = "N" OR ANS7$ = "n" THEN 3220 ELSE BEEP: GOTO 3220
3320 RETURN
3330 PCK = INP(889)
3340 IF PCK = 223 THEN 3380 ELSE BEEP
3350 PRINT "Printer is not ready. Turn printer on immediately."
3360 PCK = INP(889)
3370 IF PCK = 223 THEN 3380 ELSE 3360
3380 RETURN
3390 REM ******************* NEW BEARING ROUTINE
3400 REM *** routine is by J. Hall and C. Hutchinson ARRL HQ., July 1981
3410 Q=57.29577951308238#
3420 A = L1 / Q
3430 B = L2 / Q
3440 L = (W1-W2) / Q
3450 E = SIN(A)*SIN(B) + COS(A)*COS(B)*COS(L)
3460 D = -ATN(E/SQR(1-E*E))+1.57079
3470 BRG = (SIN(B)-SIN(A)*E) / (COS(A)*SIN(D))
3480 IF BRG>=1 THEN BRG=0:GOTO 3500 ELSE IF BRG<=-1 THEN BRG=180/Q:GOTO 3500
3490 BRG = -ATN(BRG/SQR(1-BRG*BRG))+1.57079
3500 BRG = BRG * Q
3510 IF SIN(L)<0 THEN BRG = 360 - BRG
3520 RETURN
3530 END
3540 REM***************************************************
3550 REM MINI IBM-PC MUF DRIVER
3560 REM NATIONAL OCEANIC AND ATMOSPHERIC ADMINISTRATION
3570 REM BOULDER, COLORADO
3580 REM version 1.0 AUGUST 1985
3590 REM version 1.1 JULY 1986
3600 REM version 1.2 JANUARY 1989
3610 REM version 1.3 NOVEMBER 1989
3620 REM
3630 REM TAKEN FROM: QST, DEC.82 MINIMUF 3.5 R.B.ROSE, NOSC
3640 REM MODIFIED BY PAUL K. HEIM, JAN '89 FOR SUNTREE QTH
3650 REM MODIFIED BY PAUL K. HEIM, NOV '89 TO USE "SOLARFLUX"
3660 REM AS SET IN THE COMPUTER'S DOS ENVIRONMENT
3670 REM AND EXTENSIVE ERROR TRAPPING. CHANGED PRINT
3680 REM PROVISIONS TO USE LCOPY AND ADDED DEFAULT
3690 REM FILESPEC, SOLAR FLUX, TRANSMITTER AND
3700 REM RECEIVER LOCATIONS, BEEPS ADDED, USE SYSTEM
3710 REM DATE AND DEFAULT SOLAR FLUX OPTIONS.
3720 REM***************************************************
3730 REM
3740 REM UTILIZATION OF FUNCTION:
3750 REM
3760 REM ARCCOS X = PI/2 - ARCTAN (X / SQR(1 - X*X))
3770 REM