The source language is QBasic, a programming language Microsoft used to distribute with its old DOS operating system. But if you're any kind of programmer, you should be able to translate it to any other modern language. (Heh heh heh.)
DECLARE SUB GetKey (X%) ' H-R charts an H-R diagram for 157 stars with known Mv and B-V. CONST NumPts = 157 ' Number of points. CONST True = -1 CONST False = 0 CONST Blue = 11 CONST LightBlue = 9 CONST White = 15 CONST Yellow = 14 CONST Red = 12 DIM StarName(1 TO NumPts) AS STRING * 17 DIM Cp(1 TO NumPts) AS STRING * 1 DIM Sp(1 TO NumPts) AS STRING * 6 DIM Lum(1 TO NumPts) AS STRING * 6 DIM Mv(1 TO NumPts) AS SINGLE DIM B.V(1 TO NumPts) AS SINGLE ' Determine ranges of each value: MaxM = 0 MinM = 0 MaxB = 0 MinB = 0 FOR I% = 1 TO NumPts READ StarName(I%), Cp(I%), Sp(I%), Lum(I%), Y$, X$ Mv(I%) = VAL(Y$) B.V(I%) = VAL(X$) IF Mv(I%) > MaxM THEN MaxM = Mv(I%) IF Mv(I%) < MinM THEN MinM = Mv(I%) IF B.V(I%) > MaxB THEN MaxB = B.V(I%) IF B.V(I%) < MinB THEN MinB = B.V(I%) NEXT I% ' Find transformation constants to plot the chart neatly on-screen: ' Note: In VGA mode 12, X covers 640 pixels and Y covers 480. To ' provide some margin (10 + whatever), we'll use 600 and 450 (each ' figure is exactly 93.75% of the VGA ranges). DeltaM = 100 * (MaxM - MinM) DeltaB = 100 * (MaxB - MinB) Mlow = 100 * ABS(MinM) Blow = 100 * ABS(MinB) Mfactor = 450 / (100 * MaxM + Mlow) Bfactor = 600 / (100 * MaxB + Blow) 'CLS 'PRINT "Mv and B-V range, width, low intercept, factor:" 'PRINT MinM, MaxM, DeltaM, Mlow, Mfactor 'PRINT MinB, MaxB, DeltaB, Blow, Bfactor ' Plot the points, using appropriate colors: SCREEN 12 WhiteOnly = False FOR I% = 1 TO NumPts Y = Mfactor * (100 * Mv(I%) + Mlow) + 10 X = Bfactor * (100 * B.V(I%) + Blow) + 10 IF WhiteOnly THEN StarColor = White ELSE Class$ = LEFT$(Sp(I%), 1) SELECT CASE Class$ CASE "O": StarColor = Blue CASE "B": StarColor = LightBlue CASE "A": StarColor = White CASE "F": StarColor = Yellow CASE "G": StarColor = Yellow CASE "K": StarColor = Red CASE "M": StarColor = Red CASE "C": StarColor = Red END SELECT END IF PSET (X, Y), StarColor NEXT I% CALL GetKey(X%) ' Clean up and quit: SCREEN 0 COLOR 7, 0, 0 LOCATE 24, 1 SYSTEM DATA "Sirius ", "A", "A1 ", "V ", " 1.42", " 0.00" DATA "Sirius ", "B", "A5 ", "VII ", " 11.20", " -0.12" DATA "Canopus ", "A", "F0 ", "Ia ", " -8.50", " 0.15" DATA "Arcturus ", "A", "K2 p ", "III ", " -0.20", " 1.23" DATA "Alp Cen ", "A", "G2 ", "V ", " 4.37", " 0.68" DATA "Alp Cen ", "B", "K0 ", "V ", " 5.71", " 0.88" DATA "Alp Cen ", "C", "M5 ", "V ", " 15.49", " 1.97" DATA "Vega ", "A", "A0 ", "V ", " 0.50", " 0.00" DATA "Capella ", "A", "G8 ", "III ", " -0.50", " 0.80" DATA "Rigel ", "A", "B8 ", "Ia ", " -7.10", " -0.03" DATA "Procyon ", "A", "F5 ", "IV-V ", " 2.64", " 0.42" DATA "Betelgeuse ", "A", "M2 ", "Iab ", " -6.00", " 1.85" DATA "Achernar ", "A", "B5 ", "IV ", " -1.60", " -0.16" DATA "Hadar ", "A", "B1 ", "II ", " -5.10", " -0.24" DATA "Altair ", "A", "A7 ", "IV-V ", " 2.24", " 0.22" DATA "Aldebaran ", "A", "K5 ", "III ", " -0.80", " 1.54" DATA "Acrux ", "A", "B1 ", "IV ", " -3.80", " 0.10" DATA "Spica ", "A", "B1 ", "V ", " -3.50", " -0.23" DATA "Antares ", "A", "M1 ", "Ib ", " -4.00", " 1.83" DATA "Fomalhaut ", "A", "A3 ", "V ", " 2.00", " 0.09" DATA "Pollux ", "A", "K0 ", "III ", " 0.90", " 1.00" DATA "Deneb ", "A", "A2 ", "Ia ", " -7.50", " 0.09" DATA "Mimosa ", "A", "B0 ", "III ", " -4.30", " -0.23" DATA "Sol ", "A", "G2 ", "V ", " 4.85", " 0.65" DATA "Barnard's Star ", "A", "M5 ", "V ", " 13.22", " 1.74" DATA "Wolf 359 ", "A", "M6 ", "V ", " 16.65", " 2.01" DATA "Lalande 21185 ", "A", "M2 ", "V ", " 10.50", " 1.51" DATA "Luyten 726-8 ", "A", "M5 ", "V ", " 15.46", " 1.85" DATA "Luyten 726-8 ", "B", "M6 ", "V ", " 15.96", " 1.85" DATA "Ross 154 ", "A", "M5 ", "V ", " 13.14", " 1.70" DATA "Ross 248 ", "A", "M6 ", "V ", " 14.78", " 1.91" DATA "18 Eps Eri ", "A", "K2 ", "V ", " 6.14", " 0.88" DATA "Luyten 789-6 ", "A", "M7 ", "V ", " 14.49", " 1.96" DATA "Ross 128 ", "A", "M5 ", "V ", " 13.47", " 1.76" DATA "61 Cyg ", "A", "K5 ", "V ", " 7.56", " 1.17" DATA "61 Cyg ", "B", "K7 ", "V ", " 8.37", " 1.37" DATA "Eps Ind ", "A", "K5 ", "V ", " 7.00", " 1.05" DATA "Struve 2398 ", "A", "M4 ", "V ", " 11.15", " 1.54" DATA "Struve 2398 ", "B", "M5 ", "V ", " 11.94", " 1.59" DATA "Groombridge 34 ", "A", "M1 ", "V ", " 10.39", " 1.56" DATA "Groombridge 34 ", "B", "M6 ", "V ", " 13.37", " 1.80" DATA "Lacaille 9352 ", "A", "M2 ", "V ", " 9.58", " 1.48" DATA "52 Tau Cet ", "A", "G8 ", "V ", " 5.72", " 0.72" DATA "BD +05 1668 ", "A", "M5 ", "V ", " 11.94", " 1.56" DATA "L 725-32 ", "A", "M5 ", "V ", " 14.12", " 1.83" DATA "Lacaille 8760 ", "A", "M0 ", "V ", " 8.74", " 1.40" DATA "Kapteyn's Star ", "A", "M0 ", "V ", " 10.88", " 1.56" DATA "Kruger 60 ", "A", "M3 ", "V ", " 11.87", " 1.62" DATA "Kruger 60 ", "B", "M4 ", "V ", " 13.30", " 1.80" DATA "G 51-15 ", "A", "M? ", "V ", " 17.03", " 2.06" DATA "Van Maanen's Star", "A", "F5 ", "VII ", " 14.20", " 0.56" DATA "BD +50 1725 ", "A", "K7 ", "V ", " 8.32", " 1.36" DATA "40 Omi-2 Eri ", "A", "K0 ", "V ", " 6.01", " 0.82" DATA "40 Omi-2 Eri ", "B", "A3 ", "VII ", " 11.10", " 0.03" DATA "40 Omi-2 Eri ", "C", "M? ", "V ", " 12.75", " 1.66" DATA "Gliese 876 ", "A", "M4 ", "V ", " 11.77", " 1.60" DATA "Alpheratz ", "A", "A0 p ", " ", " 0.30", " -0.11" DATA "Caph ", "A", "F2 ", "IV ", " 1.70", " 0.34" DATA "Ankaa ", "A", "K0 ", "III ", " 0.50", " 1.09" DATA "Schedar ", "A", "K0 ", "II-III", " -0.60", " 1.17" DATA "Diphda ", "A", "K0 ", "III ", " 0.40", " 1.02" DATA "Cih ", "A", "B0 ", "IVe ", " -4.40", " -0.15" DATA "Mirach ", "A", "M0 ", "III ", " -0.10", " 1.58" DATA "Almach ", "A", "K2 ", "III ", " -0.70", " 1.20" DATA "Hamal ", "A", "K2 ", "III ", " -0.10", " 1.15" DATA "Mira ", "A", "Md ", " ", " -0.30", " 1.70" DATA "Polaris ", "A", "F8 ", "Ib ", " -4.60", " 0.60" DATA "Menkar ", "A", "M2 ", "III ", " -0.50", " 1.64" DATA "Algol ", "A", "B8 ", "V ", " -0.20", " -0.05" DATA "Mirfak ", "A", "F5 ", "Ib ", " -4.60", " 0.48" DATA "Bellatrix ", "A", "B2 ", "III ", " -3.60", " -0.22" DATA "El Nath ", "A", "B7 ", "III ", " -1.40", " -0.13" DATA "Arneb ", "A", "F0 ", "Ib ", " -4.70", " 0.21" DATA "Alnilam ", "A", "B0 ", "Ia ", " -6.10", " -0.19" DATA "Alnitak ", "A", "O9.5 ", "Ib ", " -5.90", " -0.21" DATA "Saiph ", "A", "B0.5 ", "Ia ", " -6.70", " -0.17" DATA "Menkalinan ", "A", "A2 ", "IV ", " 0.20", " 0.03" DATA "Mirzam ", "A", "B1 ", "II-III", " -4.70", " -0.23" DATA "Alhena ", "A", "A0 ", "IV ", " -0.10", " 0.00" DATA "Adhara ", "A", "B2 ", "II ", " -4.40", " -0.21" DATA "Wezen ", "A", "F8 ", "Ia ", " -8.00", " 0.65" DATA "Aludra ", "A", "B5 ", "Ia ", " -7.00", " -0.07" DATA "Castor ", "A", "A1 ", "V ", " 0.80", " 0.04" DATA "Avior ", "A", "K0 ", "II ", " -2.10", " 1.27" DATA "Del Vel ", "A", "A0 ", "V ", " 0.30", " 0.04" DATA "Suhail ", "A", "K5 ", "Ib ", " -3.70", " 1.66" DATA "Miaplacidus ", "A", "A0 ", "III ", " -0.40", " 0.00" DATA "Aspidiske ", "A", "F0 ", "Ib ", " -4.70", " 0.18" DATA "Kap Vel ", "A", "B2 ", "IV ", " -2.90", " -0.18" DATA "Alphard ", "A", "K3 ", "III ", " -0.10", " 1.44" DATA "Regulus ", "A", "B7 ", "V ", " -0.70", " -0.11" DATA "Algieba ", "A", "K0 ", "III ", " 0.20", " 1.08" DATA "Merak ", "A", "A1 ", "V ", " 1.00", " -0.02" DATA "Dubhe ", "A", "K0 ", "III ", " 0.00", " 1.07" DATA "Zosma ", "A", "A4 ", "V ", " 1.50", " 0.12" DATA "Denebola ", "A", "A3 ", "V ", " 1.70", " 0.09" DATA "Phecda ", "A", "A0 ", "V ", " 0.60", " 0.00" DATA "Gienah ", "A", "B8 ", "III ", " -1.20", " -0.11" DATA "Gacrux ", "A", "M3 ", "III ", " -0.50", " 1.59" DATA "Muhlifain ", "A", "A0 ", "III ", " -0.50", " -0.01" DATA "Alioth ", "A", "A0 p ", " ", " 0.40", " -0.02" DATA "Mizar ", "A", "A2 ", "V ", " 1.00", " 0.02" DATA "Eps Cen ", "A", "B1 ", "V ", " -3.60", " -0.22" DATA "Alkaid ", "A", "B3 ", "V ", " -0.70", " -0.19" DATA "Zet Cen ", "A", "B2 ", "IV ", " -2.70", " -0.22" DATA "Menkent ", "A", "K0 ", "III-IV", " 1.30", " 1.01" DATA "Eta Cen ", "A", "B3 ", "III ", " -2.90", " -0.19" DATA "Alp Lup ", "A", "B1 ", "III ", " -4.30", " -0.20" DATA "Izar ", "A", "K0 ", "II-III", " -0.90", " 0.97" DATA "Kochab ", "A", "K4 ", "III ", " -0.20", " 1.47" DATA "Alphecca ", "A", "A0 ", "V ", " 0.30", " -0.02" DATA "Dzuba ", "A", "B0 ", "V ", " -3.80", " -0.12" DATA "Acrab ", "A", "B0.5 ", "V ", " -4.30", " -0.07" DATA "Acrab ", "B", "B2 ", "V ", " -2.50", " -0.02" DATA "13 Zet Oph ", "A", "O9.5 ", "V ", " -3.60", " 0.02" DATA "Atria ", "A", "K2 ", "III ", " 0.80", " 1.44" DATA "26 Eps Sco ", "A", "K2 ", "III ", " 0.80", " 1.15" DATA "Sabik ", "A", "A2 ", "V ", " 1.20", " 0.06" DATA "Shaula ", "A", "B2 ", "IV ", " -3.00", " -0.22" DATA "Ras-Alhague ", "A", "A5 ", "III ", " 0.70", " 0.15" DATA "The Sco ", "A", "F0 ", "I-II ", " -5.40", " 0.40" DATA "Kap Sco ", "A", "B2 ", "IV ", " -3.00", " -0.22" DATA "Eltanin ", "A", "K5 ", "III ", " -0.20", " 1.52" DATA "Kaus Australis ", "A", "B9 ", "IV ", " -0.20", " -0.03" DATA "Nunki ", "A", "B3 ", "IV-V ", " -2.00", " -0.22" DATA "Sadir ", "A", "F8 ", "Ib ", " -4.60", " 0.68" DATA "Peacock ", "A", "B3 ", "IV ", " -2.30", " -0.20" DATA "Gienar ", "A", "K0 ", "III ", " 0.50", " 1.03" DATA "Alderamin ", "A", "A7 ", "IV-V ", " 1.70", " 0.22" DATA "Enif ", "A", "K2 ", "Ib ", " -3.60", " 1.52" DATA "Al Nair ", "A", "B5 ", "V ", " 0.10", " -0.13" DATA "Bet Gru ", "A", "M3 ", "II ", " -1.50", " 1.62" DATA "Scheat ", "A", "M2 ", "II-III", " -1.20", " 1.67" DATA "Markab ", "A", "B9 ", "V ", " 0.00", " -0.04" DATA "BD -12 4523 ", "A", "M5 ", "V ", " 12.07", " 1.60" DATA "Ross 614 ", "A", "M7 e ", "V ", " 13.12", " 1.71" DATA "Ross 614 ", "B", "M? ", "V ", " 16.00", " 1.71" DATA "Wolf 424 ", "A", "M6 e ", "V ", " 14.97", " 1.80" DATA "Wolf 424 ", "B", "M6 e ", "V ", " 15.20", " 1.80" DATA "CD -37 15492 ", "A", "M4 ", "V ", " 10.32", " 1.46" DATA "L 1159-16 ", "A", "M8 e ", "V ", " 14.01", " 1.82" DATA "CD -46 11540 ", "A", "M4 ", "V ", " 11.04", " 1.53" DATA "G 158-27 ", "A", "M ", "V ", " 15.39", " 1.95" DATA "CD -49 13515 ", "A", "M1 ", "V ", " 10.32", " 1.46" DATA "CD -44 11909 ", "A", "M5 ", "V ", " 12.60", " 1.65" DATA "BD +68 946 ", "A", "M3.5 ", "V ", " 10.79", " 1.50" DATA "G 208-44/45 ", "A", "M? ", "V? ", " 15.03", " 1.90" DATA "G 208-44/45 ", "B", "M? ", "V? ", " 15.61", " 1.98" DATA "BD +20 2465 ", "A", "M4.5 e", "V ", " 11.00", " 1.54" DATA "L 145-141 ", "A", "C ", "VII ", " 13.07", " 0.19" DATA "70 Oph ", "A", "K0 ", "V ", " 5.76", " 0.86" DATA "70 Oph ", "B", "K5 ", "V ", " 7.54", " 0.86" DATA "BD +43 4305 ", "A", "M5 e ", "V ", " 11.70", " 1.60" DATA "AC +79 3888 ", "A", "M4 ", "VI ", " 12.23", " 1.60" DATA "G 9-38 ", "A", "M ", "V ", " 15.48", " 1.84" DATA "G 9-38 ", "B", "M ", "V ", " 16.34", " 1.93" DATA "BD +15 2620 ", "A", "M4 ", "V ", " 9.91", " 1.44" ' GetKey reads a single keypress and returns a one-byte key ID code. SUB GetKey (X%) DO Key1$ = INKEY$ L% = LEN(Key1$) LOOP UNTIL L% <> 0 IF L% = 1 THEN X% = ASC(Key1$) ELSE X% = 1000 + ASC(RIGHT$(Key1$, 1)) END IF END SUB ' GetKey
Page created: | 04/06/2005 |
Last modified: | 02/09/2011 |
Author: | BPL |