Compucolor.org – Virtual Media

Listing of file='CIRCLE.BAS;01' on disk='vmedia/source-sector.ccvf'

1 CLEAR 8500:DIM H$(256):PLOT 27,24,8,27,4:PRINT "LOA CLR.DSP":PLOT 27,27
2 QB$= "THIS PROGRAM ENABLES THE GREAT CIRCLE DISTANCE AND "
3 QC$= "BEARING BETWEEN TWO POINTS TO BE CALCULATED AS WELL "
4 QD$= "AS SATELLITE AZIMUTH,ELEVATION AND LOCATION.  PRESS RETURN FOR INSTRUCTIONS: "
5 QA$= QB$+ QC$+ QD$
6 QA= 1:QB= 40:QC= 7:QD= 47:QE= 148:QF= 29
7 QH= 128
8 U2= 1:U3= 1:PLOT 3,64,0
9 FOR U4= QDTO QCSTEP - 1
10 PLOT 3,64,0:FOR U5= 1TO QB:NEXT U5
11 PLOT 3,QH,U4,QF,2:PRINT MID$ (QA$,U2,U3)
12 IF U3> QETHEN FOR U6= 1TO U3- QE:PLOT 3,QH,U4+ QE,QF,2:NEXT U6
13 U3= U3+ 1:NEXT U4:U3= U3- 1:U2= U2+ 1
14 FOR U6= 1TO QE
15 PLOT 3,QH,QC,QF,2:PRINT MID$ (QA$,U2,U3)
16 IF U3> QETHEN PLOT 3,UU,QC+ QE- U6,QF,2
17 U2= U2+ 1
18 PLOT 3,64,0:FOR U5= 1TO QB:NEXT U5
19 NEXT U6:INPUT "";MS$
20 UA= 0:KQ= 0:PLOT 12,15
21 P= 3.14159265:RH= .1512
22 PRINT "THIS PROGRAM PERMITS THE FOLLOWING TO BE CALCULATED:"
23 PRINT :PRINT :PRINT "(A) THE GREAT CIRCLE DISTANCE AND BEARINGS BETWEEN ANY PLACES   ON EARTH. (ENTER 1)"
24 PRINT :PRINT "(B) THE AZIMUTH AND ELEVATION OF A GIVEN SATELLITE AT ANY PLACE ON EARTH. (ENTER 2)"
25 PRINT :PRINT "(C) THE POSITION OF AN EQUATORIAL SATELLITE VISIBLE AT A GIVEN  ELEVATION.(ENTER 3)"
26 PRINT :PRINT "(D) THE LOCATION FILE MAY BE ALPHABETICALLY SORTED (ENTER 4)"
27 PRINT :PRINT "(E) DATA GIVING THE LOCATION OF 256 PLACES OR  SATELLITES MAY BE    STORED (ENTER 5),PRINTED OUT (ENTER 6)";
28 PRINT " OR CHANGED (ENTER 7)     FOR EASY REFERENCE."
29 PRINT :PRINT :INPUT "ENTER REQUIRED FUNCTION:";BS
30 PLOT 12,15:FILE "R",1,"C",1
31 CX= 0:ON BSGOTO 63,66,67,166,34,149,33,32
32 FILE "C",1:GOTO 20
33 CX= 1
34 PLOT 12,15:PRINT "LOCATION DATA STORAGE AND CHANGE PROGRAM"
35 PRINT :IF CX= 1THEN INPUT "ENTER RECORD NUMBER:";JJ
36 PRINT :INPUT "ENTER LOCATION NAME: ";A$
37 PRINT :INPUT "ENTER TWO CHARACTER LOCATION CODE:";AB$
38 IF CX= 1THEN 52
39 FOR JJ= 1TO 256
40 GET 1,JJ;SA$[2],SB$[22]
41 IF SA$= "  "THEN 52
42 IF SA$= AB$THEN 44
43 NEXT JJ
44 FOR XV= 22TO 1STEP - 1
45 IF ASC (MID$ (SB$,XV,1))< > 32THEN 47
46 NEXT XV
47 KA$= LEFT$ (SB$,XV)
48 PRINT :PRINT "THERE IS ALREADY A LOCATION "KA$" WITH CODE "AB$
49 PRINT :INPUT "DO YOU WISH TO UPDATE THIS LOCATION CODE? (Y/N):";FG$
50 IF FG$= "Y"THEN 52
51 GOTO 32
52 PRINT :INPUT "ENTER LATITUDE( H,DG,MM,SS ): ";B$,C,D,E
53 PRINT :INPUT "ENTER LONGITUDE (H,DG,MM,SS): ";Y$,F,G,H
54 CA= (F+ G/ 60+ H/ 3600)* P/ 180
55 IF Y$= "W"THEN CA= CA* - 1
56 AA= (C+ D/ 60+ E/ 3600)* P/ 180
57 IF B$= "S"THEN AA= AA* - 1
58 PUT 1,JJ;AB$[2],A$[22],AA,CA
59 PRINT :PRINT "ENTER (8) TO RETURN TO MENU,(7) TO CHANGE  STORED DATA,(6)TO "
60 PRINT :INPUT "PRINT OUT DATA, OR (5) TO ENTER NEW DATA.";BS:GOTO 31
61 PLOT 12,15:PRINT :IF KQ= 1THEN 66
62 IF UA= 1THEN 67
63 PRINT :INPUT "ENTER FIRST LOCATION CODE:";XR$
64 IF UA= 0THEN PRINT :INPUT "ENTER SECOND LOCATION CODE:";XS$:GOTO 71
65 GOTO 69
66 KQ= 1:PRINT :INPUT "ENTER SATELLITE CODE:";XR$:IF UA= 0THEN 68
67 UA= 1
68 PRINT :INPUT "ENTER STATION CODE:";XS$:IF UA= 0THEN 71
69 PRINT :INPUT "ENTER SATELLITE ELEVATION (DEGREES):";AA
70 PRINT :INPUT "ENTER SATELLITE DIRECTION (EAST OR WEST):";EW$
71 PRINT :PRINT "** CALCULATING **"
72 IF UA= 1THEN 77
73 FOR ZZ= 1TO 256
74 GET 1,ZZ;AB$[2],A$[22],AA,CA
75 IF AB$= XR$THEN 77
76 NEXT ZZ:GOTO 165
77 FOR ZY= 1TO 256
78 GET 1,ZY;CD$[2],I$[22],BB,CB
79 IF CD$= XS$THEN 81
80 NEXT ZY:GOTO 165
81 FOR XV= 22TO 1STEP - 1
82 IF ASC (MID$ (I$,XV,1))< > 32THEN 84
83 NEXT XV
84 I$= LEFT$ (I$,XV):IF UA= 1THEN 122
85 FOR XW= 22TO 1STEP - 1
86 IF ASC (MID$ (A$,XW,1))< > 32THEN 88
87 NEXT XW
88 A$= LEFT$ (A$,XW)
89 LS= SIN (CA- CB):LC= COS (CA- CB):LN= CB- CA
90 TH= COS (AA)* COS (BB)* LC+ SIN (AA)* SIN (BB)
91 TA= SQR (1/ (TH* TH)- 1)
92 TZ= ATN (TA):TP= TZ
93 IF TH< 0THEN TP= P- TZ
94 TX= TP* 180/ P
96 NM= 60* TX
97 KM= 1.852* NM
98 SM= KM/ 1.609344
99 IF LN= 0THEN 116
100 IF ABS (LN)= PTHEN 111
101 IF SIN (AA)= 1OR SIN (BB)= - 1THEN 121
102 IF SIN (AA)= - 1OR SIN (BB)= 1THEN 120
103 GQ= LS/ SIN (TP):XA= COS (BB)* GQ* - 1:XB= COS (AA)* GQ
104 YA= XA/ SQR (1- (XA* XA)):YB= XB/ SQR (1- (XB* XB)):ZA= ATN (YA)
105 ZB= ATN (YB):QA= ATN (LC* TAN (AA)):QB= ATN (LC* TAN (BB))
106 IF QA> BBTHEN ZA= P- ZA
107 IF ZA< 0THEN ZA= ZA+ 2* P
108 IF QB> AATHEN ZB= P- ZB
109 IF ZB< 0THEN ZB= ZB+ 2* P
110 DZ= ZA* 180/ P:DY= ZB* 180/ P:GOTO 133
111 IF SGN (AA)= 1AND SGN (BB)= 1THEN 119
112 IF SGN (AA)= - 1AND SGN (BB)= - 1THEN 118
113 IF SGN (AA)= 1THEN 115
114 IF ABS (BB)> ABS (AA)THEN 118
115 IF ABS (AA)> ABS (BB)THEN 119
116 IF AA> BBTHEN 121
117 GOTO 120
118 DZ= 180:DY= 180:GOTO 133
119 DZ= 0:DY= 0:GOTO 133
120 DZ= 0:DY= 180:GOTO 133
121 DZ= 180:DY= 0:GOTO 133
122 AA= AA* P/ 180:CQ= RH* COS (AA)* COS (AA):DQ= SIN (AA)* COS (AA):FQ= (1/ (COS (AA)* COS (AA))):JQ= SQR (FQ- RH* RH):LQ= (CQ+ DQ* JQ)/ COS (BB)
123 IF LQ> 1THEN PLOT 28:PRINT "IMPOSSIBLE ALTITUDE":GOTO 144
124 CT= ATN (SQR ((1/ (LQ* LQ))- 1)):B$= "W"
125 IF LEFT$ (EW$,1)= "W"THEN CT= CT* - 1
126 CR= CT+ CB
127 IF CR> PTHEN CR= CR- 2* P
128 IF CR< - PTHEN CR= 2* P- CR
129 CS= ABS (CR* 180/ P):F= INT (CS):G= INT ((CS- F)* 60):H= INT ((((CS- F)* 60)- G)* 60)
130 IF SGN (CR)= 1THEN B$= "E"
131 PLOT 28
132 PRINT "THE SATELLITE LONGITUDE IS: "B$;F;G;H:GOTO 144
133 IF KQ= 0THEN 137
134 SW= ATN ((COS (TP)- RH)/ SIN (TP))* 180/ P
135 IF SW< 0THEN PLOT 28:PRINT "SATELLITE BELOW HORIZON":GOTO 144
136 PLOT 28:PRINT "THE ELEVATION OF "A$;" AT "I$;" IS "SW;" DEGREES":GOTO 143
137 PLOT 28:PRINT "THE GREAT CIRCLE DISTANCE BETWEEN"
138 PRINT :PRINT A$;" AND ";I$;" IS "
139 PRINT :PRINT NM" NAUTICAL MILES"
140 PRINT :PRINT SM;" STATUTE MILES"
141 PRINT :PRINT KM;" KILOMETRES "
142 PRINT :PRINT "THE BEARING OF ";I$;" AT ";A$;" IS ";DZ;" DEGREES"
143 PRINT :PRINT "THE BEARING OF ";A$;" AT ";I$;" IS ";DY;" DEGREES"
144 PRINT :PRINT "PRESS RETURN TO CALCULATE DATA FROM THE SAME STARTING POINT,"
145 PRINT :INPUT "D FOR DIFFERENT START, OR E TO RETURN TO THE MENU:";VG$
146 IF VG$= "E"THEN 32
147 IF VG$= "D"THEN 61
148 PRINT :PLOT 12,15:GOTO 64
149 LJ= 1:AU= 25
150 PLOT 12:PRINT "RECORD"TAB( 10)"CODE"TAB( 25)"NAME"TAB( 41)"LATITUDE    LONGITUDE":PRINT
151 FOR LJ= LJTO AU
152 GET 1,LJ;SA$[2],A$[22],AA,CA
153 IF SA$= "  "THEN 59
154 AR= ABS (AA* 180/ P):CR= ABS (CA* 180/ P):AR= AR+ 5^ - 6:CR= CR+ 5^ - 6
155 C= INT (AR):D= INT ((AR- C)* 60):E= INT ((((AR- C)* 60)- D)* 60)
156 F= INT (CR):G= INT ((CR- F)* 60):H= INT ((((CR- F)* 60)- G)* 60)
157 IF SGN (AA)= 1THEN B$= "N":GOTO 159
158 B$= "S"
159 IF SGN (CA)= 1THEN Y$= "E":GOTO 161
160 Y$= "W"
161 PRINT ""LJTAB( 11)""SA$TAB( 17)""A$TAB( 40)""B$;""C;D;E;TAB( 52)""Y$;""F;G;H
162 IF LJ= AUTHEN 164
163 NEXT LJ
164 PLOT 3,16,29:INPUT "PRESS RETURN TO SEE REST OF LIST";JC$:AU= AU+ 25:LJ= LJ+ 1:GOTO 150
165 PRINT :PRINT :PRINT "CAN'T FIND LOCATION CODE. CHECK LIST!!":FOR II= 1TO 1500:NEXT :GOTO 32
166 PLOT 12,27,11:GG= 0:FOR JJ= 1TO 256
167 GET 1,JJ;SB$[32]
168 IF LEFT$ (SB$,2)= "  "THEN 171
169 PRINT JJ,MID$ (SB$,3,22):H$(JJ)= SB$
170 NEXT JJ
171 AB= JJ- 2:PRINT "COMMENCING TO SORT":PRINT "CURRENT SORT INCREMENT:"
172 L= (2^ INT (LOG (AB+ 1)/ LOG (2)))- 1
173 L= INT (L/ 2):PRINT L:IF L< 1THEN 178
174 FOR I= 1TO L:FOR J= I+ LTO AB+ 1STEP L:K= J:T$= H$(K)
175 IF MID$ (H$(K- L),3,22)< = MID$ (T$,3,22)THEN 177
176 H$(K)= H$(K- L):K= K- L:IF K> LTHEN 175
177 H$(K)= T$:NEXT J,I:GOTO 173
178 PRINT "ENTERING DATA:":FOR BJ= 1TO JJ- 1
179 PRINT BJSPC( 1)MID$ (H$(BJ),3,22):PUT 1,BJ;H$(BJ)[32]:NEXT BJ
180 PRINT "FILE SORTING COMPLETE!":FOR XR= 1TO 500:NEXT XR:GOTO 32