100 ! ********************************************************************** 110 ! Program JSATS.800 Utg}va 1.0 1984-04-23 120 ! av Torbj|rn Alm 130 ! Ins{nd av Torbj|rn Alm 140 ! F|r ABC800M ABC800C ABC802 ABC806 150 ! Testad p} ABC806 160 ! 170 ! Screened by --"-TCP-"-- 180 ! ********************************************************************** 190 ! -------------------------------------------------! 200 ! * J S A T S ! 210 ! * ========= ! 220 ! * Ber{kna relativa positioner f|r Jupiters 4 ! 230 ! * Galileiska m}nar f|r godtyckliga dagar och ! 240 ! * tider. De kan visas med norr upp}t eller med ! 250 ! * s|der upp}t som de ses i ett teleskop. Man kan ! 260 ! * visa st{llningarna 5 g}nger i f|ljd med upp ! 270 ! * till 24 timmars f|rskjutning. Programmet efter ! 280 ! * JSATS i Celestial Basic, Sybex ! 290 ! * av Eric Burgess, F.S.R.S. ! 300 ! * ABC-800 version Torbj|rn Alm ABC-116 830914 ! 310 ! ------------------------------------------------! 320 DOUBLE : EXTEND 330 ; CHR$(12%);' J S A T S' : ; ' =========' 340 ; 'Program f|r ber{kning av relativa positionen f|r Galileiska Jupiterm}nar' 350 ; 'Skall S|der vara upp}t(J/N)?'; : GET A$ : ; A$ 360 IF INSTR(1%,'YyJj',A$) THEN Fl=1 ELSE Fl=0 370 INPUT 'Ange datum (y,m,d)';Y,M,Da : Ly=0 380 IF Y/4-INT(Y/4)=0 AND Y/100-INT(Y/100)<>0 Ly=1 390 IF Da<=0 OR Da>31 OR M<=0 OR M>12 OR Y<1000 THEN 330 400 IF M=2 AND Da>28+Ly THEN 330 410 INPUT 'Tidzon ';Tz : IF Tz<-12 OR Tz>12 THEN 330 420 INPUT 'Lokal tid ';Lt : IF Lt<0 OR Lt>24 THEN 330 430 INPUT 'Antal konsekutiva displays (max 4)';Nd : IF Nd>4 Nd=4 440 INPUT 'Intervall i timmar(MAX 24)';In : IF In<=0 OR In>24 THEN In=24 450 ; 'Nu k|r vi ig}ng' 460 L=1 : WHILE L<=Nd 470 Yp=Y : Mp=M : Dp=Da : IF L=1 Ut=Lt+Tz 480 ! correct for day, month & year end 490 IF Ut>24 Ut=Ut-24 : Da=Da+1 500 IF M=2 AND Da=29+Ly M=3 : Da=1 510 IF Da=31 AND (M=4 OR M=6 OR M=9 OR M=11) M=M+1 : Da=1 520 IF Da>31 M=M+1 : Da=1 530 IF M=13 M=1 : Y=Y+1 540 IF Fl<>1 Yp=Y : Mp=M : Dp=Da 550 T=Ut/24 : Yc=Y : Mc=M : Dc=Da+T 560 IF Mc<=2 Yc=Y-1 : Mc=M+12 570 Td=INT(365.25*Yc)+INT((Mc+1)*30.6001)+Dc 580 Yz=INT(Yc/100) 590 ! calc days since Epoch 1900 600 I=Td-Yz+2+INT(Yz/4)-694025.5 610 ! deg/day*nbr day + postnr ot epoch 620 A=FNMd(I*203.40586+84.55061) 630 B=FNMd(I*101.2916323+41.50155) 640 C=FNMd(I*50.23451687+109.97702) 650 D=FNMd(I*21.48798021+176.35864) 660 P1=FNMd(I*.9856003+358.476) 670 I2=FNMd(I*8.30853E-02+225.328) 680 P2=FNMd(I*.9025179+221.647) 690 P2=P2+(SIN(FNRad(2*P1))/50)+(SIN(FNRad(P1))/.521) 700 P3=(SIN(FNRad(2*I2))*.1673)+(SIN(FNRad(I2))*5.5372) 710 P1=SQR(28.07-(COS(FNRad(P2))*10.406)) : J=SIN(FNRad(P2))/P1 720 I3=57.2958*(ATN((SIN(FNRad(J)))/SQR(1-(SIN(FNRad(J)))^2))) 730 I3=I3*57.2958 740 P1=P1/173 750 S1=5.906*FNZ(A,203.405863) : S2=9.367*FNZ(B,101.2916323) 760 S3=14.989*FNZ(C,50.23451687) 770 S4=26.364*FNZ(D,21.48798021) 780 IF Fl S1=-S1 : S2=-S2 : S3=-S3 : S4=-S4 790 IF L>1 THEN 940 800 ; CHR$(12%);' JSATS' : ; ' ======' 810 ; 'Avst}nd i Jupiter-radier = 71 100 km eller 44 180 miles' 820 ; 'F|r datum ' Yp ' ' Mp ' ' Dp ' kl' Lt ' tidzon=' Tz 830 ; 'F|r datum ' Y ' ' M ' ' Da ' kl ' Ut ' u.t.' 840 Em=M 850 ; : ; TAB(8) 'Io(I).......' S1 860 ; TAB(8) 'Europa(E)....' S2 870 ; TAB(8) 'Ganymedes(G)' S3 880 ; TAB(8) 'Callisto(C) ' S4 890 ; : ; ' Minus betyder till v{nster om Jupiter, plus till h|ger'; 900 IF Fl ; 'med S upp}t' ELSE ; 'med N upp}t' 910 ; 'F|r grafisk display tryck return' : GET A$ 920 ! grafic display of jovian satelites ------ 930 Lt=Ut-Tz 940 IF Lt<=0 Dp=Da-1 : Lt=Lt+24 ELSE 990 950 IF Dp<1 Mp=Em-1 ELSE 990 960 IF Mp=2 Dp=28+Ly : GOTO 990 970 IF Mp=4 OR Mp=6 OR Mp=9 OR Mp=11 Dp=30 ELSE Dp=31 980 IF Mp=0 Mp=12 : Yp=Y-1 990 IF L>1 THEN 1050 1000 IF Fl ; TAB(30) 'S' ELSE ; TAB(30) 'N' 1010 ; 'Jupiter..J' TAB(30) '!' TAB(45) 'IO ..... I' 1020 ; 'Europa...E' TAB(30) '!' TAB(45) 'Ganymede G' 1030 ; 'Callisto C' TAB(30) '!' 1040 ; STRING$(55%,45%) 1050 ; Yp ' ' Mp ' ' Dp ' At ' Lt ' hr Zone ' Tz 1060 ; ' . . . . . . ' Ut ' hrs ' Em ' ' Da : ; 1070 B$=SPACE$(60) 1080 MID$(B$,30,1)='J' ! Jupiter in the middle 1090 MID$(B$,30+INT(S1),1)='I' 1100 MID$(B$,30+INT(S2),1)='E' 1110 MID$(B$,30+INT(S3),1)='G' 1120 MID$(B$,30+INT(S4),1)='C' 1130 ; B$ 1140 Ut=Ut+In 1150 IF Ut>24 Ut=Ut-24 : Da=Da+1 1160 IF M=2 AND Da=29+Ly M=3 : Da=1 : GOTO 1200 1170 IF Da<31 THEN 1200 1180 IF M=4 OR M=6 OR M=9 OR M=11 M=M+1 : Da=1 : GOTO 1200 1190 IF Da>31 M=M+1 : Da=1 1200 IF M=13 M=1 : Y=Y+1 1210 L=L+1 : WEND : ; 'klart' : GET A$ : GOTO 330 1220 DEF FNRad(X)=X*PI/180 1230 DEF FNMd(Zz) LOCAL Z 1240 Z=(Zz/360-INT(Zz/360))*360 1250 IF Z<0 Z=Z+360 1260 RETURN Z 1270 FNEND 1280 DEF FNZ(Z1,Z2)=SIN(FNRad(Z1+I3-P3-(P1*Z2)))