Found this on an 8" floppy tonight. BASIC Rev. 5.1 [CP/M Version] -------------------------------------------------------------------------------- 10 ' THIS PROGRAM A:SATAIM.BAS WAS WRITTEN BY D.C. HARRIS 1/30/82 20 ' 30 ' THIS PROGRAM WILL CALCULATE THE AZIMUTH AND ELEVATION NEEDED TO 40 ' AIM A TVRO ANTENNA TO ENABLE IT TO RECEIVE ANY SATELLITE LISTED 50 ' IN THE TABLES PRINTED BY THIS PROGRAM. YOU MAY ADD OTHER SATELLITE 60 ' OR CITIES IF YOU DESIRE BY ANSWERING THE PROGRAM QUESTIONS. 70 ' 80 ' DATA FOR THE SATELLITIES 90 ' 100 DATA 15 110 DATA COMSTAR 3,-87,WESTAR 3,-91,COMSTAR 2,-95,WESTAR 1,-99,ANIK 1,-104 120 DATA ANIK 2,-109,ANIK 3,-114,SATCOM 2,-119,WESTAR 2,-123,COMSTAR 1,-128 130 DATA SATCOM 3,-132,SATCOM 1,-135,SPARE,0,SPARE,0,SPARE,0 140 ' 150 ' DATA FOR THE CITIES 160 ' 170 DATA 13 180 DATA WASHINGTON D.C.,39,-77,LOS ANGELES,34,-118,NEW YORK,40.5,-74 190 DATA ATLANTA,33.5,-84.5,MIAMI,25.75,-80.25,JACKSONVILLE,30.5,-81.5 200 DATA TAMPA,28,-82.75,ANCHORAGE,60.8,-147,NOME,65,-165 210 DATA LITTLE ROCK,34.75,-92.25,WAYNESBORO,38.1,-78.8,SPARE,0,0,SPARE,0,0 220 ' 230 ' READ THE DATA ABOVE INTO CITY AND SATELLITE ARRAYS 240 ' 250 ' N = NUMBER OF SATELLITIES, SN$( ) ARRAY CONTAINS CITY NAMES 260 ' SN( ) ARRAY CONTAINS LONGITUDES FOR THE CITIES 270 ' M=NUMBER OF CITIES,CN$( ) ARRAY IS CITY NAMES, CL( ) ARRAY IS LATITUDES 280 ' CM( ) ARRAY IS CITY LONGITUDES 290 ' 300 ' FIRST READ SATELLITE DATA 310 ' 320 READ N 330 DIM SN$(15),SN(15),E(15),A(15) 340 FOR I = 1 TO N :READ SN$(I) :READ SN(I) :NEXT I 350 ' 360 ' NEXT READ CITY DATA 370 ' 380 READ M 390 DIM CN$(13),CL(13),CM(13) 400 FOR I = 1 TO M :READ CN$(I) :READ CL(I) :READ CM(I) :NEXT I 410 GOTO 520 420 ' 430 ' THIS IS CURSOR POSITIONING SUBROUTINE FOR BOTTOM LINE ON DISPLAY 440 ' 450 PRINT CHR$(27);CHR$(61);CHR$(52);CHR$(32) 460 PRINT " " 470 PRINT CHR$(27);CHR$(61);CHR$(52);CHR$(32) 480 RETURN 490 ' 500 ' TITLE AND HEADER SECTION 510 ' 520 PRINT CHR$(26) 'CLEAR SCREEN 530 PRINT TAB(10);"THIS IS THE GEOSYNCHRONOUS SATELLITE LOCATION PROGRAM 540 PRINT :PRINT 550 PRINT TAB(10);"WRITTEN 1/30/82 BY D. C. HARRIS. IT WILL LOCATE ANY" 560 PRINT TAB(10);"SATELLITE BY GIVING THE ELEVATION AND AZIMUTH TO AIM" 570 PRINT TAB(10);"AN ANTENNA FROM ANY CITY. SOME CITIES AND SATELLITIES" 580 PRINT TAB(10);"ARE LISTED WITHIN THE PROGRAM AND YOU WILL HAVE THE OPTION" 590 PRINT TAB(10);"OF ADDING ADDITIONAL CITIES AND/OR SATELLITIES" 600 PRINT :PRINT 610 INPUT " PRESS ANY KEY AND <RET> TO CONTINUE ";KB$ 620 ' 630 ' PRINT TABLE OF SATELLITES AND CITIES 640 ' 650 PRINT CHR$(26) 'CLEAR SCREEN 660 PRINT TAB(10);"LIST OF SATELLITES AND CITIES INCLUDED IN PROGRAM" 670 PRINT 680 ' 690 ' FIRST THE LIST OF SATELLITIES AND THEIR POSITIONS 700 ' 710 PRINT TAB(5);"SATELLITIE";TAB(20);"LONGITUDE";TAB(40);"SATELLITE";TAB(55); 720 PRINT "LONGITUDE" 730 FOR I = 1 TO N STEP 2 740 IF SN(I) = 0 THEN 780 750 PRINT TAB(5);SN$(I);TAB(20);SN(I); 760 IF SN(I+1)=0 THEN PRINT " " ELSE PRINT TAB(40);SN$(I+1);TAB(55);SN(I+1) 770 IF SN(I+2) = 0 OR I + 2 > N GOTO 790 780 NEXT I 790 PRINT 800 ' 810 ' NEXT LIST THE CITIES AND THEIR LOCATONS 820 ' 830 PRINT "CITY";TAB(20);"LATITUDE";TAB(30);"LONGITUDE";TAB(40); 840 PRINT "CITY";TAB(60);"LATITUDE";TAB(70);"LONGITUDE" 850 FOR I = 1 TO M STEP 2 860 IF CL(I) = 0 THEN 950 'NO MORE DATA AVAILABLE 870 PRINT CN$(I);TAB(20);CL(I);TAB(30);CM(I);TAB(40); 880 IF I + 1 > M THEN PRINT " " 890 IF I + 1 > M THEN 910 900 IF CL(I+1) = 0 THEN PRINT " " ELSE PRINT CN$(I+1);TAB(60);CL(I+1);TAB(70);CM(I+1) 910 NEXT I 920 ' 930 ' ASK QUESTION TO DETERMINE IF CITIES OR SATELLITIES SHOULD BE ADDED 940 ' 950 GOSUB 450 960 INPUT "WOULD YOU LIKE TO ADD A CITY OR A SATELLITE <YES OR NO> ";KB$ 970 IF LEFT$(KB$,1) <> "Y" AND LEFT$(KB$,1) <> "N" THEN 950 ELSE PRINT 980 IF LEFT$(KB$,1) = "N" THEN 1450 'GO TO CALCULATION AND PRINT 990 GOSUB 450 1000 INPUT "ENTER <BIRD> FOR ADDING SATELLITE OR <CITY> FOR ADDING CITY ";KB$ 1010 IF LEFT$(KB$,1) <> "B" AND LEFT$(KB$,1) <> "C" THEN 990 1020 IF LEFT$(KB$,1) = "C" THEN 1190 'GO GET CITY INPUT 1030 ' 1040 ' GET NEW SATELLITE DATA 1050 ' 1060 PRINT CHR$(26) 1070 FOR I = 1 TO N 'INSERT NEW DATA IN OPEN SPOT IF ANY 1080 IF SN(I) <> 0 THEN 1140 ELSE PRINT 'LOOK FOR NEXT OPEN SPOT 1090 PRINT "ENTER SATELLITE, LONGITUDE (DEGREES AND MINUTES), AND LONGITUDE DIRECTION " 1100 INPUT "USE THE FORM OF <NAME,DEGREES,MINUTES,WEST> ";SN$(I),DG,MN,KB$ 1110 IF (DG < 0 OR DG > 180) OR (MN < 0 OR MN > 60) OR (LEFT$(KB$,1) <> "E" AND LEFT$(KB$,1) <> "W") THEN 1090 1120 SN(I) = DG + (MN/60) :IF LEFT$(KB$,1) = "W" THEN SN(I) = -SN(I) 1130 GOTO 650 'GO AND PRINT NEW SATELLITE AND CITY TABLE 1140 NEXT I 1150 GOTO 1360 1160 ' 1170 ' THIS IS CITY INPUT SECTION 1180 ' 1190 PRINT CHR$(26) 'CLEAR SCREEN 1200 FOR I = 1 TO M 1210 IF CL(I) <> 0 THEN 1320 ' GO FIND EMPTY SLOT FOR NEW DATA 1220 INPUT "ENTER THE NAME OF THE CITY ";CN$(I) :PRINT :PRINT 1230 PRINT "ENTER THE LATITUDE IN DEGREES AND MINUTES FOR ";CN$(I) 1240 INPUT "IN THE FORM OF <DEGREES,MINUTES> ";DG,MN :PRINT :PRINT 1250 IF (DG < 0 OR DG > 180) OR (MN < 0 OR MN > 60) THEN 1220 1260 CL(I) = DG + (MN/60) 1270 PRINT "ENTER LONGITUDE IN DEGREES AND MIN AND DIRECTION FOR ";CN$(I) 1280 INPUT "IN THE FORM OF <DEGREES,MINUTES,WEST> ";DG,MN,KB$ :PRINT :PRINT 1290 IF (DG < 0 OR DG > 180) OR (MN < 0 OR MN > 60) OR (LEFT$(KB$,1) <> "W" AND LEFT$(KB$,1) <> "E") THEN 1270 1300 CM(I) = DG + (MN/60) :IF LEFT$(KB$,1) = "W" THEN CM(I) = -CM(I) 1310 GOTO 650 'GO AND PRINT NEW SATELLITE AND CITY TABLES 1320 NEXT I 1330 ' 1340 ' ARRAYS ARE FULL IF MORE ARE DESIRED YOU MUST CHANGE THE ARRAY SIZES 1350 ' 1360 PRINT CHR$(26) 1370 INPUT "NO MORE DATA ALLOWED DO YOU WANT TO CONTINUE <YES OR NO> ";KB$ 1380 IF LEFT$(KB$,1) <> "Y" THEN END ELSE GOTO 650 1390 ' 1400 ' THIS IS SECTION THAT WILL DO THE CALCULATIONS OF LOOK ANGLES 1410 ' 1420 ' THE FOLLOWING PRINT STATEMENT POSITIONS THE CURSOR TO BOTTOM OF DISPLAY 1430 ' IT IS USED REPEATEDLY TO STAY ON BOTTOM LINE TO KEEP TABLES IN SIGHT 1440 ' 1450 GOSUB 450 1460 INPUT "WHAT CITY ABOVE ARE YOU INTERESTED IN ";KB$ 1470 ' 1480 ' LOOK FOR THE CITY NAME THAT WAS ENTERED 1490 ' 1500 FOR I = 1 TO N 1510 IF KB$ = CN$(I) THEN 1560 1520 NEXT I 1530 GOSUB 450 1540 INPUT "NO MATCH IN TABLE TRY AGAIN TO NAME CITY ";KB$ 1550 GOTO 1500 1560 PRINT CHR$(26) 'CLEAR SCREEN 1570 ' 1580 ' THIS SECTION DETERMINES IF YOU WOULD LIKE A HARD COPY 1590 ' 1600 IFLAG = 0 1610 PRINT CHR$(26) :FOR K = 1 TO 10 :PRINT :NEXT K 1620 INPUT "WOULD YOU LIKE A HARD COPY OF THIS DATA ";KB$ 1630 IF LEFT$(KB$,1) = "Y" THEN IFLAG = 1 1640 PRINT CHR$(26) :FOR K = 1 TO 10 :PRINT :NEXT K 1650 PRINT TAB(20);"!!!!!!!!!! THINKING !!!!!!!!!!" 1660 ' 1670 ' NOW LET'S DO THE CALCULATIONS TO GET ELEVATIONS AND AZMIUTHS OF EACH 1680 ' SATELLITE LISTED IN THE DATA STATEMENTS PLUS THE ONES YOU ADDED 1690 ' 1700 FOR K = 1 TO N 'INCLUDE ALL SATELLITES 1710 IF SN(K) = 0 OR CM(0) THEN 2070 1720 T = SN(K) - CM(I) 'GET DIFFERENCE IN LONGITUDES 1730 TA = ABS(T) 'GET ABSOLUTE VALUE OF DIFFERENCE 1740 IF TA < 180 THEN 1770 1750 TS = SGN(T) 'SAVE SIGN (NEGATIVE OR POSITIVE) OF LONGITUDE DIFF 1760 T = -1 * ((TS * 360) - T) 1770 EP = T 1780 PI=3.14159 :RD=360/(2 * PI) :T=T/RD :CL(I) = CL(I)/RD :EP = EP/RD 1790 H = 35500! :R = 6378 1800 ' 1810 ' COMPUTE MODIFIED RECEIVER LATITUDE 1820 ' 1830 X = SQR(1 - .5 * (COS(CL(I)) + COS(EP))) 1840 ML = 2 * (ATN(X/SQR(-X*X+1))) 1850 ' 1860 ' NOW COMPUTE THE ELEVATION LOOK ANGLE 1870 ' 1880 E(K) = (PI / 2) - (ML + ATN(R * SIN(ML)/(R * (1 - COS(ML) * H)))) 1890 ' 1900 ' NOW COMPUTE THE LOOK AZIMUTH 1910 ' 1920 IF EP = 0 THEN YA = PI 1930 IF EP = 0 THEN 1980 1940 ZA = 1 / TAN(EP/2) :ZB = TAN(CL(I)/2) :YA = ATN(ZA*ZB) + ATN(ZA * (1/ZB)) 1950 ' 1960 ' NOW CONVERT ANGLES BACK TO DEGREES 1970 ' 1980 YA = YA * RD :E(K) = INT(E(K)*RD) :CL(I) = CL(I) * RD 1990 ' 2000 ' CORRECT LOOK AZIMUTH FOR NORTH / SOUTH HEMISPHERE 2010 ' 2020 IF CL(I) < 0 THEN 2060 2030 YA = 360 + YA 2040 A(K) = YA MOD 360 2050 GOTO 2070 2060 A(K) = INT(180 + YA) 2070 NEXT K 2080 ' 2090 ' NOW PRINT THE DATA CALCULATED ABOVE 2100 ' 2110 IF IFLAG <> 1 THEN 2220 2120 ' 2130 ' PRINT HARD COPY HEADER IF SO REQUESTED 2140 ' 2150 LPRINT TAB(20);"LOOK ANGLES FROM ";CN$(I) 2160 LPRINT TAB(15);"LATITUDE = ";CL(I);" LONGITUDE = ";CM(I) 2170 LPRINT :LPRINT :LPRINT "SATELLITE";TAB(15);"AZIMUTH";TAB(25);"ELEVATION"; 2180 LPRINT TAB(40);"SATELLITE";TAB(55);"AZIMUTH";TAB(65);"ELEVATION" 2190 ' 2200 ' PRINT THE CRT HEADER 2210 ' 2220 PRINT CHR$(26) 'CLEAR THE SCREEN 2230 PRINT TAB(20);"LOOK ANGLES FROM ";CN$(I) 2240 PRINT TAB(15);"LATITUDE = ";CL(I);" LONGITUDE = ";CM(I) 2250 PRINT :PRINT :PRINT "SATELLITE";TAB(15);"AZIMUTH";TAB(25);"ELEVATION"; 2260 PRINT TAB(40);"SATELLITE";TAB(55);"AZIMUTH";TAB(65);"ELEVATION" 2270 PRINT 2280 FOR J = 1 TO N STEP 2 2290 IF IFLAG <> 1 THEN 2390 2300 ' 2310 ' PRINT DATA ON HARD COPY TERMINAL 2320 ' 2330 LPRINT SN$(J);TAB(15);A(J);TAB(25);E(J); 2340 IF J+1 > N THEN 2390 2350 IF E(J+1) <> 0 THEN LPRINT TAB(40);SN$(J+1);TAB(55);A(J+1);TAB(65);E(J+1) 2360 ' 2370 ' PRINT DATA ON CRT 2380 ' 2390 PRINT SN$(J);TAB(15);A(J);TAB(25);E(J); 2400 IF J+1 > N THEN 2440 2410 IF E(J+1) <> 0 THEN PRINT TAB(40);SN$(J+1);TAB(55);A(J+1);TAB(65);E(J+1) 2420 IF J+2 > N THEN 2440 2430 IF E(J+2) = 0 THEN 2450 2440 NEXT J 2450 IF IFLAG = 1 THEN LPRINT CHR$(12) 'FORM FEED TO GET PAPER OUT 2460 GOSUB 450 2470 END