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