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