home *** CD-ROM | disk | FTP | other *** search
Wrap
100 DEFINT I-N:COLOR 2,0 110 DIM LEGEND$(10),MENU$(20),MONTH$(12),XDAT(5),YDAT(5),X(1000),Y(1000),XS(400),YS(400),XI(3),XT(3),XU(3),PREFIX$(20),COUNTRY$(20),XLAT(20),XLONG(20) 120 DIM FREQ(10),WAVE.LEN(10),TX.LOSS(10),RX.LOSS(10),REF.LOSS(10),ABSORB.LOSS(10),PR(10) 130 DATA Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec 140 FOR I=0 TO 11:READ MONTH$(I):NEXT 150 DATA " Menu Options "," ","1*-Select DX Prefix ","2- Specify Country Name","3- Specify Lat/Lon ","4- Change Sunspot # " 160 DATA "5- Select Date/Time ","6- Use Real Time ","7- Select Short Path ","8- Select Long Path ","9- Quit " 170 DATA " "," Choose One " 180 N.MENU=13:FOR I=1 TO N.MENU:READ MENU$(I):NEXT I 190 DATA 3.5,7,10.1,14,18.5,21,24.5,28.5:NFREQ=8 200 FOR I=1 TO NFREQ:READ FREQ(I):WAVE.LEN(I)=300/FREQ(I):NEXT I 210 DATA Prfx,Ctry,Lat/Lon,Dat/Tim,R Time,ShPth,LngPth,ChParams,Quit 220 FOR I=1 TO 9:READ LEGEND$(I):NEXT I 230 '$DYNAMIC 240 DIM NSTORE(32500),ZPREFIX$(500),ZCOUNTRY$(500),ZLAT(500),ZLONG(500) 250 '$STATIC 300 DEF FNASIN(X) 310 IF ABS(X)>=.999999 THEN FNASIN=SGN(X)*2*ATN(1):EXIT DEF 320 FNASIN=ATN(X/SQR(1-X*X)) 330 END DEF 340 DEF FNACOS(X) 350 FNACOS=2*ATN(1)-FNASIN(X) 360 END DEF 370 DEF FNATN2(X,Y) 380 IF ABS(X)<.00001 THEN FNATN2=SGN(Y)*2*ATN(1):EXIT DEF 390 IF ABS(Y)<.00001 THEN FNATN2=2*ATN(1)*(1-SGN(X)):EXIT DEF 400 IF Y>=0 AND X>0 THEN FNATN2=ATN(Y/X):EXIT DEF 410 IF Y>=0 AND X<0 THEN FNATN2=2*ATN(1)-ATN(X/Y):EXIT DEF 420 IF X>0 THEN FNATN2=ATN(Y/X):EXIT DEF 430 FNATN2=-2*ATN(1)-ATN(X/Y) 440 END DEF 450 DEF FNT.MOD(T,T0)= T-.5*T0*(1+SGN(T-T0))*SGN(ABS(T-T0)) 460 DEF FNXFORM(X) 470 XFORM=X-HOME.LON:IF XFORM>180 THEN XFORM=XFORM-360 480 IF XFORM<-180 THEN XFORM=360+XFORM 490 FNXFORM=XFORM 500 END DEF 510 DEF FNDIG$(X) 520 KX=X:AA$=MID$(STR$(KX),2):FNDIG$=AA$:IF LEN(AA$)=1 THEN FNDIG$="0"+AA$ 530 END DEF 540 DEF FNDB(X)=10*LOG(X)/LOG(10) 550 DEF FNDBI(X)=10^(.1*X) 800 PI=4*ATN(1):CNV=180/PI:RE=6364 810 T.DRAW=20 820 'CALL CLOCKON(0) 830 ON KEY(1) GOSUB 11000:ON KEY(2) GOSUB 11010:ON KEY(3) GOSUB 11020:ON KEY(4) GOSUB 11030: 840 ON KEY(5) GOSUB 11040:ON KEY(6) GOSUB 11050:ON KEY(7) GOSUB 11060:ON KEY(8) GOSUB 11070:ON KEY(9) GOSUB 11080 1000 PRINT:PRINT 1010 PRINT " DX Mapping and HF Propagation Prediction Program " 1020 PRINT " Adapted from MINIMUF 3.5 " 1030 PRINT " by Dennis Murray " 1040 PRINT :PRINT 1050 PRINT " This program is in the Public Domain for non-commercial " 1060 PRINT " use only by anyone who wants to use it or adapt it to 1070 PRINT " suit their needs. The author takes no responsibility for " 1080 PRINT " guaranteeing that it will work on your machine, nor for " 1090 PRINT " supporting this software. It works on AT-compatible machines" 1100 PRINT " and requires an EGA Graphics Adapter with color display " 1110 PRINT " capable of using BASIC screen mode 9 (640x350 16 color )." 1120 PRINT " Modification of the source code will be necessary to make it" 1130 PRINT " run in other graphics modes. It is designed to be compiled" 1140 PRINT " using Microsoft Quick Basic v2.0 or later, but it can be " 1150 PRINT " compiled using Borland Turbo Basic also. " 1160 PRINT :PRINT 1170 PRINT " You are on your own if it doesn't work on your machine!" 1180 PRINT " ( What do you want for free? )" 1190 PRINT:PRINT " Hit any key to proceed";:A$=INPUT$(1):CLS 1500 'READ ATLAS 1510 PRINT :LOCATE 13,16,0:COLOR 20,14,0:PRINT " Fetching DX Atlas .. Wait a While "; 1520 OPEN "I",2,"MAPPER.ATL" :K=0 1530 IF EOF(2 ) THEN N.ATL=K:CLOSE 2:GOTO 1600 1540 K=K+1:INPUT #2,ZPREFIX$(K),ZLAT(K),ZLONG(K),ZCOUNTRY$(K) 1550 GOTO 1530 1600 COLOR 2,0:CLS:PRINT:PRINT 1610 PRINT USING " ### DX Atlas Entries Loaded";N.ATL:PRINT 1620 PRINT 2000 OPEN "I",2,"MAPPER.DEF" :INPUT #2,HOME.LAT,HOME.LON,SSN,T.DRAW 2010 INPUT #2,H.TXANT,TX.POL$,GT 2020 INPUT #2,H.RXANT,RX.POL$,GR 2030 INPUT #2,PT,E.MIN:CLOSE 2 2040 SCREEN 9 :COLOR 2 2050 'RENTRY POINT 2060 CLS 0 :COLOR 2 2070 PRINT " Default Values Which Will Be Used Unless Changed" 2080 PRINT: 2090 PRINT USING " 1- Sunspot Number = ### ";SSN 2100 PRINT USING " 2- Home Latitude/Longitude = ###.# N / ####.# W";HOME.LAT,-HOME.LON 2110 PRINT USING " 3- Auto Redraw of Solar Terminator Every ### min";T.DRAW 2120 PRINT USING " 4- Home Antenna Height=###.# ft. .. \ \ Polarization .. Gain=###.# dBi";H.TXANT*3.28,TX.POL$,GT 2130 PRINT USING " 5- DX Antenna Height=###.# ft. .. \ \ Polarization .. Gain=###.# dBi";H.RXANT*3.28,RX.POL$,GR 2140 PRINT USING " 6- Home Transmitter Power Output=#### Watts";PT 2150 PRINT USING " 7- Minimum Elevation Angle=###.# deg";E.MIN 2160 PRINT 2170 PRINT " Enter (1-7) to change ... Anything else to accept"; 2180 A$=INPUT$(1):N=VAL(A$):PRINT :PRINT 2190 IF N=1 THEN INPUT "Enter New Sunspot Number ";SSN:CLS:GOTO 2050 2200 IF N=3 THEN INPUT "Enter Auto Redraw Interval (Minutes)";T.DRAW:CLS:GOTO 2050 2210 IF N=4 THEN INPUT "Enter Home Ant Ht (ft), Pol (H/V), and Gain (dB)";H.TXANT,TX.POL$,GT:H.TXANT=H.TXANT/3.28:A$=LEFT$(TX.POL$,1):IF A$="H" OR A$="h" THEN TX.POL$="Hor":CLS:GOTO 2050 ELSE TX.POL$="Vert":CLS:GOTO 2050 2220 IF N=5 THEN INPUT "Enter DX Ant Ht (ft), Pol (H/V), and Gain (dB)";H.RXANT,RX.POL$,GR:H.RXANT=H.RXANT/3.28:A$=LEFT$(RX.POL$,1):IF A$="H" OR A$="h" THEN RX.POL$="Hor":CLS:GOTO 2050 ELSE RX.POL$="Vert":CLS:GOTO 2050 2230 IF N=6 THEN INPUT "Enter Home Transmit Power Output (W)";PT:CLS:GOTO 2050 2240 IF N=7 THEN INPUT "Enter Min Elevation Launch Angle (deg)";E.MIN:CLS:GOTO 2050 2250 IF N<>2 THEN 3000 2260 INPUT "Enter Home Lat/Lon (+ For North Lat and West Lon) ";HOME.LAT,HOME.LON:HOME.LON=-HOME.LON 2270 HOME.LON=HOME.LON MOD 360:IF HOME.LON>180 THEN HOME.LON=HOME.LON-360 2280 IF HOME.LON<-180 THEN HOME.LON=360+HOME.LON 2290 CLS :MAP.FLAG%=-1:GOTO 2050 3000 OPEN "O",2,"MAPPER.DEF": 3010 PRINT #2,HOME.LAT,HOME.LON,SSN,T.DRAW 3020 PRINT #2,H.TXANT;",",TX.POL$;",",GT 3030 PRINT #2,H.RXANT;",",RX.POL$;",",GR 3040 PRINT #2,PT;",",E.MIN 3050 CLOSE 2 :CLS 0 3060 IF LEFT$(TX.POL$,1)="V" THEN TX.POL%=-1 3070 IF LEFT$(RX.POL$,1)="V" THEN RX.POL%=-1 3080 ON TIMER(60*T.DRAW) GOSUB REDRAW 3090 IF MAP.FLAG% THEN GOSUB LAT.LON.SCRN:GOSUB FETCH.MAP :GOTO RESTORE.SCREEN 3100 CALL PTR86(NSEG,NOFF,VARPTR(NSTORE(0))) 3120 DEF SEG=NSEG:BLOAD "MAPPER.SCR",NOFF:DEF SEG 3500 RESTORE.SCREEN: 3510 TIMER ON 3520 GOSUB GET.DATE:GOSUB LAT.LON.SCRN 3530 CLS:PAINT (0,0),0,7 3540 GOSUB DRAW.TERMINATOR 3550 PUT (XBEGIN,YBEGIN),NSTORE,OR 3560 GOSUB PAINT.OCEANS 3570 GOSUB DRAW.LAT.LON 3580 LOCATE 25,1:FOR I=1 TO 9:COLOR 2:PRINT " F"+CHR$(48+I);:COLOR 14:PRINT LEGEND$(I);:NEXT I 4000 MENU: 4010 FOR I=1 TO 9:KEY(I) ON:NEXT I 4020 A$=INKEY$:IF A$="" THEN 4020 4030 FOR I=1 TO 9:KEY(I) OFF:NEXT I 4040 ON OP% GOTO 4100,4200,4300,4500,4600,4700,4800,4400,4900 4100 'LOCATION BY PREFIX 4110 GOSUB GET.PREFIX :IF K>0 THEN GOTO PATH.CALCULATION 4120 GOSUB DELAY:GOTO MENU 4200 'LOCATION BY COUNTRY NAME 4210 GOSUB GET.COUNTRY :IF K>0 THEN GOTO PATH.CALCULATION 4220 GOSUB DELAY:GOTO MENU 4300 'LAT/LON 4310 GOSUB CLEAR.TEXT:PRINT "Enter DX Lat/Long " 4320 INPUT XLAT,XLONG:XLONG=-XLONG:K=1:XLAT(1)=XLAT:XLONG(1)=XLONG 4330 PREFIX$(1)="":COUNTRY$(1)="Lat= "+STR$(XLAT)+" .. Long= "+STR$(-XLONG) 4340 GOTO 5010 4400 'NEW SSN 4405 CLS 0:GOTO 2000 4410 GOSUB CLEAR.TEXT:INPUT "Enter Sunspot Num ";SSN:GOSUB 9220:GOTO MENU 4500 'NEW DATE 4510 TIMER OFF:GOSUB CLEAR.TEXT:GOSUB GET.NEW.DATE:GOTO 3530 4600 'REAL TIME MODE 4610 GOTO RESTORE.SCREEN 4700 'SET SHORT PATH 4710 PATH%=0:GOTO MENU: 4800 'SET LONG PATH 4810 PATH%=-1:GOTO MENU 4900 END 5000 PATH.CALCULATION: 5010 XLAT=XLAT(K):XLONG=XLONG(K): 5020 LOCATE 1,26:PRINT SPACE$(54);:LOCATE 1,26 5030 COLOR 14:A$=LEFT$(" "+PREFIX$(K)+" "+COUNTRY$(K),48)+" ":L=LEN(A$):B$=A$:IF L< 48 THEN B$=" "+STRING$(47,"*")+" ":MID$(B$,(49-L)/2)=A$ 5040 PRINT B$; 5050 CALL MINIMUF(HOME.LAT,HOME.LON,XLAT,XLONG,PATH%,M0+1,D0,T0,SSN,NHOPS,F.MUF,F.LUF,E.CUTOFF) 5060 LOCATE 2,26:PRINT SPACE$(54):LOCATE 2,26 5070 PRINT USING "Fmuf=##.# Fluf=##.# F-Ecof=##.# MHz ## Hops";F.MUF,F.LUF,E.CUTOFF,NHOPS 5080 CALL TRANSFORM(XLAT,XLONG,X,Y,-1) 5090 IF PATH% THEN PATH$="Long " ELSE PATH$="Short" 5100 LOCATE 1,1:PRINT USING "Predicting \ \ Path to";PATH$ 5110 RNG=SQR(X^2+Y^2)*PI*RE:IF PATH% THEN RNG=2*PI*RE-RNG:X=-X:Y=-Y 5120 AZIM=FNATN2(Y,X)*CNV 5130 IF AZIM<0 THEN AZIM=360+AZIM 5140 LOCATE 2,1:PRINT SPACE$(24);:LOCATE 2,1 5150 PRINT USING"Range=#####km,#####nm";RNG,RNG/1.85; 5160 LOCATE 3,1:PRINT SPACE$(24);:LOCATE 3,1 5170 PRINT USING "Az=#### El=###.# deg";AZIM,ELEV;:COLOR 2 5180 GOSUB PRINT.STRENGTH 5190 CLAT=COS(XLAT/CNV):SLAT=SIN(XLAT/CNV) 5200 XLONG=FNXFORM(XLONG) 5210 CLONG=COS(XLONG/CNV):SLONG=SIN(XLONG/CNV) 5220 XT(1)=CLAT*CLONG:XT(2)=CLAT*SLONG:XT(3)=SLAT 5230 XI(1)=COS(HOME.LAT/CNV):XI(2)=0:XI(3)=SIN(HOME.LAT/CNV) 5240 IF ERASE.FLAG% THEN NCOLOR =2:CALL MYLINE(NCOLOR,X(),Y(),IPTS,XDAT(),YDAT()) 5250 IPTS=101:IF PATH% THEN DPATH=-270/(CNV*(IPTS-1)) ELSE DPATH=90/(CNV*(IPTS-1)) 5260 J=0:FOR JJ=1 TO IPTS:RHO=COS((JJ-1)*DPATH):RHO1=SIN((JJ-1)*DPATH) 5270 SUM=0:FOR K=0 TO 3:XU(K)=XT(K)*RHO1+XI(K)*RHO:SUM=SUM+XU(K)^2:NEXT K 5280 SUM=SQR(SUM):FOR K=1 TO 3:XU(K)=XU(K)/SUM:NEXT K 5290 J=J+1:Y(J)=CNV*ATN(XU(3)/SQR(XU(1)^2+XU(2)^2)) 5300 XU(1)=XU(1)/COS(Y(J)/CNV):XU(2)=XU(2)/COS(Y(J)/CNV) 5310 IF XU(1)<> 0 THEN X(J)=CNV*ATN(XU(2)/XU(1)) ELSE X(J)=90*SGN(XU(2)) 5320 IF XU(1)<0 THEN IF X(J)<0 THEN X(J)=180+X(J) ELSE X(J)=-180+X(J) 5330 NEXT JJ:ERASE.FLAG%=-1:CALL MYLINE(14,X(),Y(),IPTS,XDAT(),YDAT()) 5340 GOTO MENU 6000 GET.PREFIX: 'FETCH COUNTRY DATA 6010 COLOR 2: 6020 GOSUB CLEAR.TEXT 6030 INPUT "Enter DX Prefix";PF$ :L2=LEN(PF$):CALL UPPER.CASE(PF$) 6040 LOCATE 5,1:PRINT SPACE$(24);:LOCATE 5,1:JP=0 6050 K=1 6060 IF JP>N.ATL THEN GOTO 6120 6070 JP=JP+1:PREFIX$(K)=ZPREFIX$(JP):COUNTRY$(K)=ZCOUNTRY$(JP):XLAT(K)=ZLAT(JP):XLONG(K)=ZLONG(JP) 6080 L1=LEN(PREFIX$(K)):A$=PF$:IF L2>L1 THEN A$=LEFT$(A$,L1) 6090 IF INSTR(PREFIX$(K),A$)=0 THEN 6060 6100 PRINT USING "## ";K;:PRINT LEFT$(PREFIX$(K)+" "+COUNTRY$(K),20):K=K+1 6110 IF K<18 THEN 6060 6120 PRINT :IF K=1 THEN PRINT PF$ +" Not Found ";:K=-1:RETURN 6130 INPUT "Select one ";K 6140 IF K=0 THEN K=1:IF JP=N.ATL THEN PRINT PF$ +" Not Found ";:K=-1:RETURN ELSE GOSUB CLEAR.TEXT:GOTO 6060 6150 GOSUB CLEAR.TEXT 6160 XLONG(K)=-XLONG(K):RETURN 7000 GET.COUNTRY: 'FETCH COUNTRY DATA 7010 COLOR 2: 7020 GOSUB CLEAR.TEXT 7030 PRINT "Enter Country Name ":INPUT CTY$ :L2=LEN(CTY$):CALL UPPER.CASE(CTY$) 7040 LOCATE 5,1:PRINT SPACE$(24);:LOCATE 6,1:PRINT SPACE$(24);:LOCATE 5,1:JP=0 7050 K=1 7060 IF JP>N.ATL THEN GOTO 7130 7070 JP=JP+1:PREFIX$(K)=ZPREFIX$(JP):COUNTRY$(K)=ZCOUNTRY$(JP):XLAT(K)=ZLAT(JP):XLONG(K)=ZLONG(JP) 7080 L1=LEN(COUNTRY$(K)):A$=CTY$:IF L2>L1 THEN A$=LEFT$(A$,L1) 7090 COUNTRY$=COUNTRY$(K):CALL UPPER.CASE(COUNTRY$) 7100 IF INSTR(COUNTRY$,A$)=0 THEN 7060 7110 PRINT USING "## ";K;:PRINT LEFT$(PREFIX$(K)+" "+COUNTRY$(K),20):K=K+1 7120 IF K<18 THEN 7060 7130 PRINT :IF K=1 THEN PRINT CTY$ +" Not Found ";:K=-1:RETURN 7140 INPUT "Select one ";K 7150 IF K=0 THEN K=1:IF JP=N.ATL THEN PRINT CTY$ +" Not Found ";:K=-1:RETURN ELSE GOSUB CLEAR.TEXT:GOTO 7060 7160 GOSUB CLEAR.TEXT 7170 XLONG(K)=-XLONG(K):RETURN 8000 PAINT.OCEANS: 'PAINT OCEANS 8010 NCOLOR=7 8020 PAINT (FNXFORM(6),0), 1,7 'PAINT OCEANS BLUE 8030 PAINT (FNXFORM(45),-5), 1,7 'PAINT OCEANS BLUE 8040 PAINT (FNXFORM(60),0), 1,7 'PAINT OCEANS BLUE 8050 PAINT (FNXFORM(75),0), 1,7 'PAINT OCEANS BLUE 8060 PAINT (FNXFORM(90),0), 1,7 'PAINT OCEANS BLUE 8070 PAINT (FNXFORM(105),-15), 1,7 'PAINT OCEANS BLUE 8080 PAINT (FNXFORM(120),-15), 1,7 'PAINT OCEANS BLUE 8090 PAINT (FNXFORM(135),15), 1,7 'PAINT OCEANS BLUE 8100 PAINT (FNXFORM(150),0), 1,7 'PAINT OCEANS BLUE 8110 PAINT (FNXFORM(180),88), 1,7 'PAINT OCEANS BLUE 8120 PAINT (FNXFORM(90),88), 1,7 'PAINT OCEANS BLUE 8130 PAINT (FNXFORM(0),88), 1,7 'PAINT OCEANS BLUE 8140 PAINT (FNXFORM(-90),88), 1,7 'PAINT OCEANS BLUE 8150 PAINT (FNXFORM(-180),88), 1,7 'PAINT OCEANS BLUE 8160 PAINT (FNXFORM(165),0), 1,7 'PAINT OCEANS BLUE 8170 PAINT (FNXFORM(180),0), 1,7 'PAINT OCEANS BLUE 8180 PAINT (FNXFORM(-165),0), 1,7 'PAINT OCEANS BLUE 8190 PAINT (FNXFORM(-150),0), 1,7 'PAINT OCEANS BLUE 8200 PAINT (FNXFORM(-135),0), 1,7 'PAINT OCEANS BLUE 8210 PAINT (FNXFORM(-120),0), 1,7 'PAINT OCEANS BLUE 8220 PAINT (FNXFORM(-105),0), 1,7 'PAINT OCEANS BLUE 8230 PAINT (FNXFORM(-90),0), 1,7 'PAINT OCEANS BLUE 8240 PAINT (FNXFORM(-45),5), 1,7 'PAINT OCEANS BLUE 8250 PAINT (FNXFORM(-30),0), 1,7 'PAINT OCEANS BLUE 8260 PAINT (FNXFORM(-15),0), 1,7 'PAINT OCEANS BLUE 8270 PAINT (FNXFORM(58),-5), 1,7 'PAINT OCEANS BLUE 8280 PAINT (FNXFORM(-124),34), 1,7 'PAINT OCEANS BLUE 8290 PAINT (FNXFORM(-70),32), 1,7 'PAINT OCEANS BLUE 8300 PAINT (FNXFORM(5),40), 1,7 'PAINT MED SEA BLUE 8310 PAINT (FNXFORM(-95),45), 2,7 'PAINT USA YELLOW 8320 PAINT (FNXFORM(-120),42), 2,7 'PAINT USA YELLOW 8330 PAINT (FNXFORM(-76),42), 2,7 'PAINT USA YELLOW 8340 PAINT (FNXFORM(-150),65), 2,7 'PAINT ALASKA YELLOW 8350 PAINT (FNXFORM(51.5),43), 1,7 'CASPIAN SEA 8360 PAINT (FNXFORM(-90),60), 1,7 'HUDSONS BAY 8370 PAINT (FNXFORM(-90),23), 1,7 'GULF OF MEXICO 8380 RETURN 8500 DRAW.LAT.LON: 'DRAW LAT/LON LINES 8510 FOR XLAT=-90 TO 90 STEP 30 8520 LINE (-180,XLAT)-(180,XLAT),6:NEXT 8530 FOR XLON=-180 TO 180 STEP 60 8540 LINE (XLON,-90)-(XLON,90),6:NEXT 8550 RETURN 9000 DRAW.TERMINATOR: 'CALCULATE TERMINATOR 9010 M0=VAL(D$)-1:D0=VAL(MID$(D$,4)):T0=VAL(T$)+VAL(MID$(T$,4))/60 9020 D0$=FNDIG$(D0):H0$=FNDIG$(INT(T0)):M0$=FNDIG$(60*(T0-INT(T0))) 9030 YR.ANG=.0172*(10+30.4*M0+D0):TILT=-.409*COS(YR.ANG) 9040 T.NOON=12+.13*SIN(YR.ANG)+.156*SIN(2*YR.ANG) 9050 IF M0>=4 AND M0<=10 THEN T.NOON=T.NOON+1 'DAYLIGHT SAVINGS TIME 9060 DT=-2*PI*(T0-T.NOON)/24 +HOME.LON/CNV 9070 CP=COS(TILT):SP=SIN(TILT):CD=COS(DT):SD=SIN(DT) 9080 LL=0:FOR L=1 TO 363:XL=L:CL=COS(XL/CNV):SL=SIN(XL/CNV) 9090 X1=-(SP*CD*CL+SD*SL) 9100 Y1=-(SP*SD*CL-CD*SL) 9110 Z1=CP*CL 9120 LL=LL+1:XS(LL)=CNV*FNASIN(Z1):YS0=CNV*FNATN2(X1,Y1):YS(LL)=YS0-HOME.LON 9130 IF ABS(YS(LL))>180 THEN YS(LL)=YS(LL)-360*SGN(YS(LL)) 9140 IF LL>1 AND ABS(YS(LL)-YS(LL-1))>60 THEN GOSUB 9260 9150 NEXT L 9160 CALL MYLINE(7,YS(),XS(),LL,XDAT(),YDAT()) 9170 X1=CP*CD:Y1=CP*SD:Z1=-SP 9180 X2=CNV*FNASIN(Z1):Y2=CNV*FNATN2(X1,Y1)-HOME.LON 9190 IF ABS(Y2)>180 THEN Y2=Y2-360*SGN(Y2) 9200 IF ABS(Y2)>178 THEN Y2=178*SGN(Y2) 9210 PAINT (Y2,X2),4,7 9220 COLOR 14:LOCATE 3,1:PRINT SPACE$(79);:LOCATE 3,26: 9230 PRINT USING "\\ \ \ \\:\\ Local .. Sunspot Number = ####";D0$,MONTH$(M0),H0$,M0$,SSN; 9240 COLOR 2 9250 RETURN 9260 YS=YS(LL):YS(LL)=180*SGN(YS(LL-1)):CALL MYLINE(7,YS(),XS(),LL,XDAT(),YDAT()) 9270 YS(1)=180*SGN(YS):YS(2)=YS: 9280 XS(1)=XS(LL):XS(2)=XS(LL):LL=2 :RETURN 10000 SUB TRANSFORM(X0,Y0,X2,Y2,POLAR%) STATIC 10010 STATIC CT0,ST0,NFLAG 10020 SHARED CNV,PI,HOME.LAT,HOME.LON 10030 IF NOT NFLAG THEN GOTO INITIALIZE 10040 NORMAL: 10050 X=X0:Y=Y0 10060 Y=FNXFORM(Y):IF NOT POLAR% THEN X2=X:Y2=Y:EXIT SUB 10070 CT=COS(X/CNV):ST=SIN(X/CNV):CP=COS(Y/CNV):SP=SIN(Y/CNV) 10080 X1=CT0*ST-ST0*CT*CP 10090 Y1=CT*SP:Z1=ST0*ST+CT0*CT*CP 10100 LAM!=FNACOS(Z1):PSI=FNATN2(X1,Y1) 10110 R=LAM!/PI:X2=R*SIN(PSI):Y2=R*COS(PSI) 10120 EXIT SUB 10130 INITIALIZE: 10140 CT0=COS(HOME.LAT/CNV):ST0=SIN(HOME.LAT/CNV) 10150 NFLAG=-1:GOTO NORMAL 10160 END SUB 11000 OP%=1:RETURN 4030 11010 OP%=2:RETURN 4030 11020 OP%=3:RETURN 4030 11030 OP%=4:RETURN 4030 11040 OP%=5:RETURN 4030 11050 OP%=6:RETURN 4030 11060 OP%=7:RETURN 4030 11070 OP%=8:RETURN 4030 11080 OP%=9:RETURN 4030 12000 FETCH.MAP: 'WORLD MAP DATA INPUT 12010 OPEN "I",1,"WORLDMAP.DAT": 12020 INPUT #1,X,Y :J=1 12030 I=0 12040 INPUT #1,X,Y :J=J+1 :Y=FNXFORM(Y) 12050 IF ABS(X)> 900 THEN CLOSE:GOTO 12120 12060 IF ABS(X)>91 THEN GOSUB DRAW.LINE:GOTO 12030 12070 IF ABS(X-Y(I)) > 20 THEN GOSUB DRAW.LINE:I=0:GOTO 12100 12080 IF ABS(Y-X(I))>20 AND ABS(X(I))<170 THEN GOSUB DRAW.LINE:I=0:GOTO 12100 12090 IF ABS(Y-X(I))>20 THEN I=I+1:X(I)=181*SGN(X(I-1)):Y(I)=X:GOSUB DRAW.LINE:Y(1)=X:X(1)=-181*SGN(X(I-1)):I=1 12100 I=I+1:Y(I)=X:X(I)=Y 12110 GOTO 12040 12120 GET (-180,-90)-(179,89) ,NSTORE 12130 CALL PTR86(NSEG,NOFF,VARPTR(NSTORE(0))) 12140 DEF SEG=NSEG:BSAVE "MAPPER.SCR",NOFF,&HFDE8:DEF SEG 12150 RETURN 13000 LAT.LON.SCRN: 13010 COLOR 2,0 13020 XBEGIN=-180:XEND=180:YBEGIN=-90:YEND=90 13030 CALL SCALE(XBEGIN,XEND,YBEGIN,YEND,XDAT(),YDAT()) 13040 NCOLOR=7:NX.BEGIN=200:NX.END=600:NY.BEGIN=17:NY.END=300:XTIC=30:YTIC=15 13050 CALL AXES(NCOLOR,NX.BEGIN,NX.END,NY.BEGIN,NY.END,XDAT(),YDAT(),XTIC,YTIC) 13060 LINE (-179.5,-89.5) -(179.5,89.5),7,B:COLOR 2 13070 RETURN 14000 REDRAW: 14010 GOSUB GET.DATE:GOSUB LAT.LON.SCRN 14020 CLS:PAINT (0,0),0,7 14030 GOSUB DRAW.TERMINATOR 14040 PUT (-180,-90),NSTORE,OR 14050 GOSUB PAINT.OCEANS 14060 GOSUB DRAW.LAT.LON 14070 TIMER ON 14080 RETURN 15000 GET.NEW.DATE: 'ENTER NEW DATE AND TIME 15010 INPUT "Date (MM-DD) ";D$ 15020 INPUT "Time (HH:MM) ";T$ 15030 IF D$="" THEN D$=DATE$ 15040 IF T$="" THEN T$=TIME$ 15050 RETURN 16000 GET.DATE: D$=DATE$:T$=TIME$ 16010 RETURN 17000 DRAW.LINE: CALL MYLINE(NCOLOR,X(),Y(),I,XDAT(),YDAT()):COLOR 2:LOCATE 1,1:PRINT "RECORD ";JJ,J;:'A$=INPUT$(1) 17010 JJ=J:RETURN 18000 CLEAR.TEXT: FOR J=5 TO 24:LOCATE J,1:PRINT SPACE$(24);:NEXT J:LOCATE 5,1:RETURN 19000 DELAY: 19010 FOR KK=1 TO 10000:NEXT KK:RETURN 20000 PRINT.STRENGTH: 20010 LOCATE 5,1:COLOR 14 20020 PRINT "Signal Predictions (dB)":PRINT:PRINT "Freq Lref Labs Prcv":PRINT " Ltx Lrx " 20030 PR.BEST=-1000:N.BEST=1:NO.PATH%=-1:FOR I=1 TO NFREQ:IF FREQ(I)<1.2*F.MUF AND PR(I)>PR.BEST THEN PR.BEST=PR(I):N.BEST=I 20040 IF PR(I)>-20 AND FREQ(I)>.8*F.LUF AND FREQ(I)<1.2*F.MUF THEN NO.PATH%=0:PRINT USING "##.# ###.# ###.# #### ";FREQ(I),-REF.LOSS(I),ABSORB.LOSS(I),PR(I) 20045 IF PR(I)>-20 AND FREQ(I)>.8*F.LUF AND FREQ(I)<1.2*F.MUF THEN NO.PATH%=0:PRINT USING " ###.# ###.# ";-TX.LOSS(I),-RX.LOSS(I) 20050 NEXT I:I=N.BEST 20054 IF NO.PATH% THEN PRINT USING "##.# ###.# ###.# #### ";FREQ(I),-REF.LOSS(I),ABSORB.LOSS(I),PR(I) 20056 IF NO.PATH% THEN PRINT USING " ###.# ###.# ";-TX.LOSS(I),-RX.LOSS(I) 20060 IF NO.PATH% THEN PRINT:PRINT "No Feasible Freq" 20062 IF NO.PATH% THEN PRINT "Best of Bad Lot is Shown" 20070 RETURN 35000 SUB REFLECT(ELEV,WAVE.LEN,SEA%,RMAGV,VPHASE,RMAGH,HPHASE,REFLECT.LOSS) STATIC 35010 'REFLECTION COEFFICIENT CALCULATION 35020 SHARED CNV,PI 35030 IF SEA% THEN ER=80:EI=-60*WAVE.LEN*4:DH=4 ELSE ER=15:EI=-60*WAVE.LEN*.01:DH=10 35040 RHO=EXP(-2*(2*PI*DH*SIN(ELEV/CNV)/WAVE.LEN)^2) 35050 CA=COS(ELEV/CNV)^2:SA=SIN(ELEV/CNV):SQ1=ER-CA:PQ1=.5*ATN(EI/SQ1):SMAG=SQR(SQ1^2+EI^2) 35060 SMAG=SQR(SMAG):SQ1=SMAG*COS(PQ1):SQ2=SMAG*SIN(PQ1): 35070 DENH=(SQR((SA+SQ1)^2+SQ2^2)):PHASE1=SQ2:PHASE2=SA+SQ1:GOSUB 35150:HPHASE=PHASE 35080 NUMH!=(SQR((SA-SQ1)^2+SQ2^2)):PHASE1=-SQ2:PHASE2=SA-SQ1:GOSUB 35150:HPHASE1=PHASE 35090 RMAGH=NUMH!/DENH:HPHASE=HPHASE1-HPHASE 35100 DENV=SQR((SA*ER+SQ1)^2+(EI*SA+SQ2)^2):PHASE1=(EI*SA+SQ2):PHASE2=(ER*SA+SQ1):GOSUB 35150:VPHASE=PHASE 35110 NUMV!=SQR((SA*ER-SQ1)^2+(EI*SA-SQ2)^2):PHASE1=(EI*SA-SQ2):PHASE2=(ER*SA-SQ1):GOSUB 35150:VPHASE1=PHASE 35120 RMAGV=NUMV!/DENV:VPHASE=VPHASE1-VPHASE 35130 REFLECT.LOSS=FNDB(.5*(RMAGH^2+RMAGV^2)*RHO^2) 35140 EXIT SUB 35150 '4 QUADRANT ARC TANGENT 35160 IF PHASE2>0 THEN PHASE=ATN(PHASE1/PHASE2):RETURN 35170 IF PHASE1<0 THEN PHASE=-PI+ATN(PHASE1/PHASE2) ELSE PHASE=PI+ATN(PHASE1/PHASE2) 35180 RETURN 35190 END SUB 36000 SUB MULTIPATH(ELEV,WAVE.LEN,H.ANTENNA,XMULTV,XMULTH) STATIC 36010 ' MULTIPATH CALCULATION 36020 SHARED CNV,PI 36030 CALL REFLECT(ELEV,WAVE.LEN,0,RMAGV,VPHASE,RMAGH,HPHASE,REFLECT.LOSS) 36040 ALPHAV=VPHASE-4*PI*H.ANTENNA*SIN(ELEV/CNV)/WAVE.LEN:XMULTV=FNDB((1+RMAGV*COS(ALPHAV))^2+(RMAGV*SIN(ALPHAV))^2) 36050 ALPHAH=HPHASE-4*PI*H.ANTENNA*SIN(ELEV/CNV)/WAVE.LEN:XMULTH=FNDB((1+RMAGH*COS(ALPHAH))^2+(RMAGH*SIN(ALPHAH))^2) 36060 XMULT=FNDB(.5*(FNDBI(XMULTV)+FNDBI(XMULTH))) 36070 END SUB 39000 SUB MINIMUF(TLAT,TLON,RLAT,RLON,LPATH%,MONTH,DAY,TIME,SSN,NHOPS,F.MUF,F.LUF,E.CUTOFF) STATIC 39010 WIDTH LPRINT 128 39020 DIM M$(37),A$(4),M(12) 39030 SHARED H.TXANT,H.RXANT,TX.POL%,RX.POL% ,FREQ(),WAVE.LEN(),NFREQ,TX.LOSS(),RX.LOSS(),REF.LOSS(),ABSORB.LOSS(),PT,GT,GR,PR(),E.MIN,ELEV 39040 RE=6364:PI=3.141593: RPD=PI/180: PI2=2*PI: CNV=180/PI: PI.D2=PI/2: X$=STRING$(79,61) 39050 GMT=TIME-TLON/15 :GMT=FNT.MOD(GMT,24) 39060 T.LAT=TLAT*RPD: T.LON=-TLON*RPD: R.LAT=RLAT*RPD: R.LON=-RLON*RPD: 39070 PHI=CNV*FNASIN(RE*COS(E.MIN/CNV)/(RE+300)):TH=180-PHI-90-E.MIN:GR.MAX=2*TH*RE/CNV 39080 GOSUB 40000 :REM TO MAIN CALCULATION LOOP 39090 EXIT SUB 40000 REM MINIMUF 4.1 CALCULATION LOOP 40010 COS.GRNG=SIN(T.LAT)*SIN(R.LAT)+COS(T.LAT)*COS(R.LAT)*COS(R.LON-T.LON) 40020 GRNG=FNACOS(COS.GRNG) :IF LPATH% THEN GRNG=2*PI-GRNG 40030 NHOPS=1+FIX(RE*GRNG/GR.MAX) 'NUMBER OF 3500 KM HOPS 40040 HOP.INV=1!/NHOPS 40050 F.MUF=100:E.CUTOFF=0:F.LUF=0 40060 ANG=.5*GRNG/CSNG(NHOPS):R.SLANT=SQR(RE^2+(RE+300)^2-2*RE*(RE+300)*COS(ANG)) 40070 ELEV=CNV*FNACOS((RE+300)*SIN(ANG)/R.SLANT) 40080 PHID=CNV*FNASIN(RE*COS(ELEV/CNV)/(RE+90)) ' INCIDENCE ANGLE ON D LAYER AT 90 KM 40090 PATH.LOSS=2*FNDB(4*PI*R.SLANT*2*NHOPS*1000) 40100 ANG=GRNG/(1+NHOPS):EL.MAX=ATN(1/TAN(ANG)-(RE/(RE+300))/SIN(ANG)):IF EL.MAX<18/CNV THEN EL.MAX=18/CNV 40110 SEC.EINC= 1/SQR(1-( (RE/(RE+110)) *COS(EL.MAX) )^2) 40120 FOR I=1 TO NFREQ 40130 CALL MULTIPATH(ELEV,WAVE.LEN(I),H.TXANT,XMULTV,XMULTH):IF TX.POL% THEN TX.LOSS(I)=XMULTV ELSE TX.LOSS(I)=XMULTH 40140 CALL MULTIPATH(ELEV,WAVE.LEN(I),H.RXANT,XMULTV,XMULTH):IF RX.POL% THEN RX.LOSS(I)=XMULTV ELSE RX.LOSS(I)=XMULTH 40150 REF.LOSS(I)=0:ABSORB.LOSS(I)=0:NEXT I 40160 FOR KHOP=1 TO NHOPS:PATH.FRAC=(KHOP-.5)/NHOPS: 40170 REFL.PATH.FRAC=CSNG(KHOP-1!)/NHOPS 40180 SIN.RLAT=SIN(R.LAT) 40190 COS.RLAT=COS(R.LAT) 40200 COS.RAZIM=(SIN(T.LAT)-SIN.RLAT*COS(GRNG))/(COS.RLAT*SIN(GRNG)) 40210 CTRL.RNG=GRNG*PATH.FRAC :REFL.RNG=GRNG*REFL.PATH.FRAC 40220 SIN.CLAT=SIN.RLAT*COS(CTRL.RNG)+COS.RLAT*SIN(CTRL.RNG)*COS.RAZIM 40230 SIN.RFLAT=SIN.RLAT*COS(REFL.RNG)+COS.RLAT*SIN(REFL.RNG)*COS.RAZIM 40240 COS.CLON=(COS(CTRL.RNG)-SIN.CLAT*SIN.RLAT)/(COS.RLAT*SQR(1-SIN.CLAT^2)) 40250 COS.RFLON=(COS(REFL.RNG)-SIN.RFLAT*SIN.RLAT)/(COS.RLAT*SQR(1-SIN.RFLAT^2)) 40260 CLON=FNACOS(COS.CLON) :RFLON=FNACOS(COS.RFLON) 40270 C.LON=R.LON+SGN(SIN(T.LON-R.LON))*CLON 40280 IF C.LON<0 THEN C.LON=C.LON+PI2 40290 IF C.LON>=PI2 THEN C.LON=C.LON-PI2 40300 C.LAT=PI.D2-FNACOS(SIN.CLAT) 40310 RF.LON=R.LON+SGN(SIN(T.LON-R.LON))*RFLON 40320 IF RF.LON<0 THEN RF.LON=RF.LON+PI2 40330 IF RF.LON>=PI2 THEN RF.LON=RF.LON-PI2 40340 RF.LAT=(PI.D2-FNACOS(SIN.RFLAT))*CNV:RFL=CNV*RF.LON:RF.LON=FNXFORM(-CNV*RF.LON):IF REFL.PATH.FRAC=0 THEN 40380 40350 IF POINT(RF.LON,RF.LAT) =1 THEN SEA%=-1 ELSE SEA%=0 40360 FOR I=1 TO NFREQ:CALL REFLECT(ELEV,WAVE.LEN(I),SEA%,RMV,VP,RMH,HP,REFLECT.LOSS) 40370 REF.LOSS(I)=REF.LOSS(I)+REFLECT.LOSS:NEXT I 40380 YR.ANGLE=.0172*(10+(MONTH-1)*30.4+DAY) 40390 TILT.ANGLE=.409*COS(YR.ANGLE) :COSX1=-1:COSX2=-1:COSX3=-1 40400 T.NOON=3.82*C.LON+12+.13*(SIN(YR.ANGLE)+1.2*SIN(2*YR.ANGLE)) 40410 T.NOON=FNT.MOD(T.NOON,24) 40420 IF COS(C.LAT+TILT.ANGLE)>-.26 THEN GOTO SUN.LIGHT 40430 T.SUN=0 40440 COSX=0 40450 M.FACT!=2.5*GRNG*HOP.INV 40460 IF M.FACT!>PI.D2 THEN M.FACT!=PI.D2 40470 M.FACT!=SIN(M.FACT!) 40480 M.FACT!=1+2.5*M.FACT!*SQR(M.FACT!) 40490 GOTO MUF.CALC 40500 SUN.LIGHT: 40510 T.SUN=(-.26+SIN(TILT.ANGLE)*SIN(C.LAT))/(COS(TILT.ANGLE)*COS(C.LAT)+9.999999E-04) 40520 T.SUN=12-ATN(T.SUN/SQR(ABS(1-T.SUN*T.SUN)))*7.639437 40530 T.RISE=T.NOON-T.SUN/2+12*(1-SGN(T.NOON-T.SUN/2))*SGN(ABS(T.NOON-T.SUN/2)) 40540 T.SET=T.NOON+T.SUN/2-12*(1+SGN(T.NOON+T.SUN/2-24))*SGN(ABS(T.NOON+T.SUN/2-24)) 40550 COS.ZEN=ABS(COS(C.LAT+TILT.ANGLE)) 40560 T.RELAX=9.7*COS.ZEN^9.600001 40570 IF T.RELAX <.1 THEN T.RELAX=.1 40580 M.FACT!=2.5*GRNG*HOP.INV 40590 IF M.FACT!>PI.D2 THEN M.FACT!=PI.D2 40600 M.FACT!=SIN(M.FACT!) 40610 M.FACT!=1+2.5*M.FACT!*SQR(M.FACT!) 40620 IF T.SET<T.RISE THEN GOTO CHECK.TIME 40630 IF (GMT-T.RISE)*(T.SET-GMT)>0 THEN GOTO DAY.TIME 40800 NITE.TIME: 40810 GMT0=GMT+12*(1+SGN(T.SET-GMT))*SGN(ABS(T.SET-GMT)) 40820 U0=PI*T.RELAX/T.SUN 40830 U=(T.SET-GMT0)/2 40840 U1=-T.SUN/T.RELAX 40850 FRAC.SUN=PI*(GMT0-T.SET)/(24-T.SUN) 40860 COSX=COS.ZEN*(U0*(EXP(U1)+1))*EXP(U)/(1+U0*U0):COSX1=COSX 40870 FRAC.SUN=0 40880 GOTO MUF.CALC 40900 CHECK.TIME: 40910 IF (GMT-T.SET)*(T.RISE-GMT)>0 THEN GOTO NITE.TIME 41000 DAY.TIME: 41010 GMT0=GMT+12*(1+SGN(T.RISE-GMT))*SGN(ABS(T.RISE-GMT)) 41020 TAU0=PI*(GMT0-T.RISE)/T.SUN 41030 U0=PI*T.RELAX/T.SUN 41040 U=(T.RISE-GMT0)/T.RELAX 41050 FRAC.SUN=PI*(GMT0-T.RISE)/T.SUN 41060 COSX=COS.ZEN*(SIN(TAU0)+U0*(EXP(U)-COS(TAU0)))/(1+U0*U0) :COSX2=COSX 41070 ALT.COSX=COS.ZEN*(U0*(EXP(-T.SUN/T.RELAX)+1))*EXP((T.SUN-24)/2)/(1+U0*U0):COSX3=ALT.COSX 41080 IF COSX=>ALT.COSX THEN GOTO MUF.CALC 41090 COSX=ALT.COSX 42000 MUF.CALC: 42010 MUF!=(1+SSN/250)*SQR(6+58*SQR(COSX)) 42020 FVERT=MUF! 42030 MUF!=MUF!*(1-.1*EXP((T.SUN-24)/3)) 42040 MUF!=MUF!*(1+(1-SGN(T.LAT)*SGN(R.LAT))*.1) 42050 MUF!=MUF!*(1-.1*(1+SGN(ABS(SIN(C.LAT))-COS(C.LAT)))) 42060 FVERT1=MUF!:MUF!=M.FACT!*MUF!: 43000 IF MUF!<F.MUF THEN F.MUF=MUF! 43010 GOSUB ECUTOFF:GOSUB D.LOSS:GOSUB SIGNAL.STRENGTH: 43020 'GOSUB PRINT.STUFF 43030 NEXT KHOP 43040 RETURN 45000 ECUTOFF: 'CALCULATE E LAYER CUTOFF FREQ 45010 E.FACT=.2:IF T.SUN=0 THEN GOTO ESCREEN 45020 IF T.SUN*FRAC.SUN=0 THEN GOTO ESCREEN 45030 E.COSX=COS.ZEN*SIN(PI*(GMT0-T.RISE)/T.SUN) 45040 IF E.COSX >.174 THEN E.FACT=E.COSX^.3 ELSE E.FACT=(FNACOS(E.COSX)*CNV-76)^-.4 45050 ESCREEN: 45060 E.SCREEN=(3.4+.00544*SSN)*E.FACT*SEC.EINC 45070 IF E.SCREEN>7 THEN E.LUF=(1.33*E.SCREEN-3.31)^2/7 ELSE E.LUF=.91*E.SCREEN -.37 45080 IF F.LUF<E.LUF THEN F.LUF=E.LUF 45090 IF E.CUTOFF<E.SCREEN THEN E.CUTOFF=E.SCREEN 45100 RETURN 46000 D.LOSS: ' CALCULATE D REGION ABSORPTION 46010 CHI=CNV*FNACOS(COS.ZEN*SIN(PI*(GMT0-T.RISE)/T.SUN)) 46020 IF CHI < 102 THEN XLOSS=1.5*430*(1+.0035*SSN)*COS(.881*CHI/CNV)^.75/(COS(PHID/CNV)) ELSE XLOSS=0 46030 FOR I=1 TO NFREQ:ABSORB.LOSS(I)=ABSORB.LOSS(I)+XLOSS/(FREQ(I)+1.8)^2 :NEXT I 46040 RETURN 46500 SIGNAL.STRENGTH: 'CALCULATE SIGNAL STRENGTH 46510 FOR I=1 TO NFREQ 46520 PR(I)=FNDB(PT)+GT+TX.LOSS(I)+GR+RX.LOSS(I)+REF.LOSS(I)-ABSORB.LOSS(I)+2*FNDB(WAVE.LEN(I))-PATH.LOSS 46530 PR(I)=PR(I)-FNDB(.0000005^2/50) 46540 NEXT I:RETURN 47000 PRINT.STUFF: 47010 LPRINT USING "KHOP = ### GMT= ### Fv=#####.# Fv1=#####.# Mf= ##.### MUF= #####.# ";KHOP,GMT,FVERT,FVERT1,M.FACT!,MUF! 47020 LPRINT USING " E.SCREEN=#####.# E.LUF=#####.# E.CUTOFF=#####.# F.LUF= #####.# ";E.SCREEN,E.LUF,E.CUTOFF,F.LUF 47030 LPRINT USING " C.LAT=####.# C.LON=####.# YR.ANGLE=####.# TILT.ANGLE=####.# COS.ZEN=##.###";C.LAT*CNV,C.LON*CNV ,YR.ANGLE*CNV,TILT.ANGLE*CNV,COS.ZEN 47040 LPRINT USING " R.LAT=####.# R.LON=####.# ELEV=####.# PHID=####.# R.SLANT=##### PATH.LOSS=####.#";RF.LAT,RFL,ELEV,PHID,R.SLANT,PATH.LOSS 47050 FOR I=1 TO NFREQ 47060 LPRINT USING " F= ###.# TX.LOSS=###.# RX.LOSS=###.# REF.LOSS=###.# ABSORB=###.# PR= ###.# ###";FREQ(I),TX.LOSS(I),RX.LOSS(I),REF.LOSS(I),ABSORB.LOSS(I),PR(I),SEA% 47070 NEXT I 47080 LPRINT "":RETURN 47090 LPRINT USING " T.NOON=###.# T.SUN=###.# T.RISE=###.# T.SET=###.# T.RELAX=###.# ";T.NOON,T.SUN,T.RISE,T.SET,T.RELAX 47100 LPRINT USING " COSX=###.## COSX1=###.## COSX2=###.## COSX3=###.##";COSX,COSX1,COSX2,COSX3 47110 LPRINT USING " TLAT=###.# TLON=###.# RLAT=###.# RLON=###.# GRNG=##### SSN=#### ";TLAT,TLON,RLAT,RLON,RE*GRNG,SSN 47120 LPRINT "":RETURN 48000 REM CALCULATION OF SUNSPOT NUMBER FROM SOLAR FLUX 48010 SSN=-103.7767+1.797429*SF-(3.384356E-03)*SF^2+(4.525515E-06)*SF^3 48020 SSN=INT(100*SSN+.5)/100 48030 RETURN 50000 END SUB 51000 ' VIDEO GRAPHICS FOR QUICK BASIC 51010 ' EMULATION OF CALCOMP ROUTINES 51020 ' 52000 SUB SCALE(XBEGIN,XEND,YBEGIN,YEND,XDAT(1),YDAT(1)) STATIC 52010 ' SCALING ROUTINE TO SCALE PLOTS TO THE UNITS OF 52020 ' THE DATA TO BE PLOTTED 52030 WINDOW (XBEGIN,YBEGIN)-(XEND,YEND) 52040 XDAT(1)=XEND-XBEGIN:YDAT(1)=YEND-YBEGIN 52050 XDAT(2)=XBEGIN:YDAT(2)=YBEGIN 52060 XDAT(3)=XEND:YDAT(3)=YEND 52070 END SUB 52080 ' 53000 SUB AXES(NCOLOR,NX.BEGIN,NX.END,NY.BEGIN,NY.END,XDAT(1),YDAT(1),XTIC,YTIC) STATIC 53010 ' DRAW BOX WITH AXES AND TIC MARKS 53020 ' NX..,NY.. ARE DOT VALUES WHICH DEFINE THE BEGINNING & END 53030 ' OF EACH AXIS IN VIDEO DOT UNITS 0<=DX<=639, 0<=DY<=349 53040 ' Y VALUES ARE DEFINED WITH 0 AT BOTTOM OF SCREEN. 53050 ' XTIC,YTIC ARE THE TIC SPACINGS IN UNITS OF THE DATA TO BE 53060 ' PLOTTED VIA SCALE AND MYLINE. XDAT AND YDAT ARE SCALING DATA IN 53070 ' SAME UNITS FROM SCALE ROUTINE. 53080 ' NCOLOR IS THE FOREGROUND COLOR 53090 DEFINT I-N :COLOR NCOLOR 53100 IF NX.BEGIN <0 THEN NX.BEGIN=0 ELSE IF NX.BEGIN > 639 THEN NX.BEGIN=639 53110 IF NX.END <0 THEN NX.END =0 ELSE IF NX.END > 639 THEN NX.END =639 53120 IF NY.BEGIN <0 THEN NY.BEGIN=0 ELSE IF NY.BEGIN > 349 THEN NY.BEGIN=349 53130 IF NY.END <0 THEN NY.END =0 ELSE IF NY.END > 349 THEN NY.END =349 53140 VIEW (NX.BEGIN,349-NY.BEGIN)-(NX.END,349-NY.END),,NCOLOR 53150 DY.TIC=.01*ABS(XDAT(1)):DX.TIC=.01*ABS(YDAT(1)) 53160 FOR X=XDAT(2) TO XDAT(3) STEP XTIC 53170 LINE (X,YDAT(2))- STEP (0, DX.TIC) 53180 LINE (X,YDAT(3))- STEP (0,-DX.TIC) 53190 NEXT X 53200 FOR Y=YDAT(2) TO YDAT(3) STEP YTIC 53210 LINE (XDAT(2),Y)- STEP ( DY.TIC,0) 53220 LINE (XDAT(3),Y)- STEP (-DY.TIC,0) 53230 NEXT Y 53240 END SUB 53250 ' 54000 SUB MYLINE(NCOLOR,X(1),Y(1),NPTS,XDAT(1),YDAT(1)) STATIC 54010 DEFINT I-N 54020 FOR I=2 TO NPTS 54030 IF ABS( X(I)-X(I-1) ) >.3*XDAT(1) OR ABS( Y(I)-Y(I-1) ) >.3*YDAT(1) THEN 54050 54040 LINE (X(I-1),Y(I-1))-(X(I),Y(I)),NCOLOR 54050 NEXT I 54060 END SUB 55000 SUB UPPER.CASE(A$) STATIC 55010 L=LEN(A$):IF L=0 THEN EXIT SUB 55020 FOR I=1 TO L 55030 K=ASC(MID$(A$,I,1)) 55040 IF K>=97 AND K<=122 THEN MID$(A$,I,1)=CHR$(K-32) 55050 NEXT I 55060 END SUB