1 // constellation.cpp
2 //
3 // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9
10 #include <iostream>
11 #include <celutil/util.h>
12 #include "celestia.h"
13 #include "constellation.h"
14
15 using namespace std;
16
17
18 struct Constellation_s {
19 const char *name;
20 const char *gen;
21 const char *abbr;
22 };
23
24 static struct Constellation_s constellationInfo[] = {
25 { "Aries", "Arietis", "Ari" },
26 { "Taurus", "Tauri", "Tau" },
27 { "Gemini", "Geminorum", "Gem" },
28 { "Cancer", "Cancri", "Cnc" },
29 { "Leo", "Leonis", "Leo" },
30 { "Virgo", "Virginis", "Vir" },
31 { "Libra", "Librae", "Lib" },
32 { "Scorpius", "Scorpii", "Sco" },
33 { "Sagittarius", "Sagittarii", "Sgr" },
34 { "Capricornus", "Capricorni", "Cap" },
35 { "Aquarius", "Aquarii", "Aqr" },
36 { "Pisces", "Piscium", "Psc" },
37 { "Ursa Major", "Ursae Majoris", "UMa" },
38 { "Ursa Minor", "Ursae Minoris", "UMi" },
39 { "Bootes", "Bootis", "Boo" },
40 { "Orion", "Orionis", "Ori" },
41 { "Canis Major", "Canis Majoris", "CMa" },
42 { "Canis Minor", "Canis Minoris", "CMi" },
43 { "Lepus", "Leporis", "Lep" },
44 { "Perseus", "Persei", "Per" },
45 { "Andromeda", "Andromedae", "And" },
46 { "Cassiopeia", "Cassiopeiae", "Cas" },
47 { "Cepheus", "Cephei", "Cep" },
48 { "Cetus", "Ceti", "Cet" },
49 { "Pegasus", "Pegasi", "Peg" },
50 { "Carina", "Carinae", "Car" },
51 { "Puppis", "Puppis", "Pup" },
52 { "Vela", "Velorum", "Vel" },
53 { "Hercules", "Herculis", "Her" },
54 { "Hydra", "Hydrae", "Hya" },
55 { "Centaurus", "Centauri", "Cen" },
56 { "Lupus", "Lupi", "Lup" },
57 { "Ara", "Arae", "Ara" },
58 { "Ophiuchus", "Ophiuchi", "Oph" },
59 { "Serpens", "Serpentis", "Ser" },
60 { "Aquila", "Aquilae", "Aql" },
61 { "Auriga", "Aurigae", "Aur" },
62 { "Corona Australis", "Coronae Australis", "CrA" },
63 { "Corona Borealis", "Coronae Borealis", "CrB" },
64 { "Corvus", "Corvi", "Crv" },
65 { "Crater", "Crateris", "Crt" },
66 { "Cygnus", "Cygni", "Cyg" },
67 { "Delphinus", "Delphini", "Del" },
68 { "Draco", "Draconis", "Dra" },
69 { "Equuleus", "Equulei", "Equ" },
70 { "Eridanus", "Eridani", "Eri" },
71 { "Lyra", "Lyrae", "Lyr" },
72 { "Piscis Austrinus", "Piscis Austrini", "PsA" },
73 { "Sagitta", "Sagittae", "Sge" },
74 { "Triangulum", "Trianguli", "Tri" },
75 { "Antlia", "Antliae", "Ant" },
76 { "Apus", "Apodis", "Aps" },
77 { "Caelum", "Caeli", "Cae" },
78 { "Camelopardalis", "Camelopardalis", "Cam" },
79 { "Canes Venatici", "Canum Venaticorum", "CVn" },
80 { "Chamaeleon", "Chamaeleontis", "Cha" },
81 { "Circinus", "Circini", "Cir" },
82 { "Columba", "Columbae", "Col" },
83 { "Coma Berenices", "Comae Berenices", "Com" },
84 { "Crux", "Crucis", "Cru" },
85 { "Dorado", "Doradus", "Dor" },
86 { "Fornax", "Fornacis", "For" },
87 { "Grus", "Gruis", "Gru" },
88 { "Horologium", "Horologii", "Hor" },
89 { "Hydrus", "Hydri", "Hyi" },
90 { "Indus", "Indi", "Ind" },
91 { "Lacerta", "Lacertae", "Lac" },
92 { "Leo Minor", "Leonis Minoris", "LMi" },
93 { "Lynx", "Lyncis", "Lyn" },
94 { "Microscopium", "Microscopii", "Mic" },
95 { "Monoceros", "Monocerotis", "Mon" },
96 { "Mensa", "Mensae", "Men" },
97 { "Musca", "Muscae", "Mus" },
98 { "Norma", "Normae", "Nor" },
99 { "Octans", "Octantis", "Oct" },
100 { "Pavo", "Pavonis", "Pav" },
101 { "Phoenix", "Phoenicis", "Phe" },
102 { "Pictor", "Pictoris", "Pic" },
103 { "Pyxis", "Pyxidis", "Pyx" },
104 { "Reticulum", "Reticuli", "Ret" },
105 { "Sculptor", "Sculptoris", "Scl" },
106 { "Scutum", "Scuti", "Sct" },
107 { "Sextans", "Sextantis", "Sex" },
108 { "Telescopium", "Telescopii", "Tel" },
109 { "Triangulum Australe", "Trianguli Australis", "TrA" },
110 { "Tucana", "Tucanae", "Tuc" },
111 { "Volans", "Volantis", "Vol" },
112 { "Vulpecula", "Vulpeculae", "Vul" }
113 };
114
115 static Constellation **constellations = NULL;
116
117
Constellation(const char * _name,const char * _genitive,const char * _abbrev)118 Constellation::Constellation(const char *_name, const char *_genitive, const char *_abbrev)
119 {
120 name = string(_name);
121 genitive = string(_genitive);
122 abbrev = string(_abbrev);
123 }
124
getConstellation(unsigned int n)125 Constellation* Constellation::getConstellation(unsigned int n)
126 {
127 if (constellations == NULL)
128 initialize();
129
130 if (constellations == NULL ||
131 n >= sizeof(constellationInfo) / sizeof(constellationInfo[0]))
132 return NULL;
133 else
134 return constellations[n];
135 }
136
getConstellation(const string & name)137 Constellation* Constellation::getConstellation(const string& name)
138 {
139 if (constellations == NULL)
140 initialize();
141
142 for (unsigned int i = 0;
143 i < sizeof(constellationInfo) / sizeof(constellationInfo[0]);
144 i++)
145 {
146 if (compareIgnoringCase(name, constellationInfo[i].abbr) == 0 ||
147 compareIgnoringCase(name, constellationInfo[i].gen) == 0 ||
148 compareIgnoringCase(name, constellationInfo[i].name) == 0)
149 {
150 return constellations[i];
151 }
152 }
153
154 return NULL;
155 }
156
getName()157 string Constellation::getName()
158 {
159 return name;
160 }
161
getGenitive()162 string Constellation::getGenitive()
163 {
164 return genitive;
165 }
166
getAbbreviation()167 string Constellation::getAbbreviation()
168 {
169 return abbrev;
170 }
171
initialize()172 void Constellation::initialize()
173 {
174 int nConstellations = sizeof(constellationInfo) / sizeof(constellationInfo[0]);
175 constellations = new Constellation* [nConstellations];
176
177 if (constellations != NULL)
178 {
179 for (int i = 0; i < nConstellations; i++)
180 {
181 constellations[i] = new Constellation(constellationInfo[i].name,
182 constellationInfo[i].gen,
183 constellationInfo[i].abbr);
184 }
185 }
186 }
187