1 /**********************************************************************
3 FILENAME: uiuc_menu_mass.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: reads input data for specified aircraft and creates
8 approporiate data storage space
10 ----------------------------------------------------------------------
14 ----------------------------------------------------------------------
16 REFERENCES: based on "menu reader" format of Michael Selig
18 ----------------------------------------------------------------------
20 HISTORY: 04/04/2003 initial release
21 06/30/2003 (RD) replaced istrstream with istringstream
22 to get rid of the annoying warning about
23 using the strstream header
25 ----------------------------------------------------------------------
27 AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
28 Michael Selig <m-selig@uiuc.edu>
30 ----------------------------------------------------------------------
34 ----------------------------------------------------------------------
38 ----------------------------------------------------------------------
42 ----------------------------------------------------------------------
44 CALLED BY: uiuc_menu()
46 ----------------------------------------------------------------------
48 CALLS TO: check_float() if needed
54 ----------------------------------------------------------------------
56 COPYRIGHT: (C) 2003 by Michael Selig
58 This program is free software; you can redistribute it and/or
59 modify it under the terms of the GNU General Public License
60 as published by the Free Software Foundation.
62 This program is distributed in the hope that it will be useful,
63 but WITHOUT ANY WARRANTY; without even the implied warranty of
64 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
65 GNU General Public License for more details.
67 You should have received a copy of the GNU General Public License
68 along with this program; if not, write to the Free Software
69 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
70 USA or view http://www.gnu.org/copyleft/gpl.html.
72 **********************************************************************/
74 #include <simgear/compiler.h>
76 #if defined( __MWERKS__ )
77 // -dw- optimizer chokes (big-time) trying to optimize humongous
78 // loop/switch statements
79 #pragma optimization_level 0
86 #include "uiuc_menu_mass.h"
96 void parse_mass( const string& linetoken2, const string& linetoken3,
97 const string& linetoken4, const string& linetoken5,
98 const string& linetoken6, const string& linetoken7,
99 const string& linetoken8, const string& linetoken9,
100 const string& linetoken10, const string& aircraft_directory,
101 LIST command_line ) {
103 istringstream token3(linetoken3.c_str());
104 istringstream token4(linetoken4.c_str());
105 istringstream token5(linetoken5.c_str());
106 istringstream token6(linetoken6.c_str());
107 istringstream token7(linetoken7.c_str());
108 istringstream token8(linetoken8.c_str());
109 istringstream token9(linetoken9.c_str());
110 istringstream token10(linetoken10.c_str());
112 switch(mass_map[linetoken2])
116 if (check_float(linetoken3))
117 token3 >> token_value;
119 uiuc_warnings_errors(1, *command_line);
121 Weight = token_value;
122 Mass = Weight * INVG;
123 massParts -> storeCommands (*command_line);
128 if (check_float(linetoken3))
129 token3 >> token_value;
131 uiuc_warnings_errors(1, *command_line);
134 massParts -> storeCommands (*command_line);
139 if (check_float(linetoken3))
140 token3 >> token_value;
142 uiuc_warnings_errors(1, *command_line);
145 massParts -> storeCommands (*command_line);
150 if (check_float(linetoken3))
151 token3 >> token_value;
153 uiuc_warnings_errors(1, *command_line);
156 massParts -> storeCommands (*command_line);
161 if (check_float(linetoken3))
162 token3 >> token_value;
164 uiuc_warnings_errors(1, *command_line);
167 massParts -> storeCommands (*command_line);
172 if (check_float(linetoken3))
173 token3 >> token_value;
175 uiuc_warnings_errors(1, *command_line);
178 massParts -> storeCommands (*command_line);
181 case Mass_appMass_ratio_flag:
183 if (check_float(linetoken3))
184 token3 >> token_value;
186 uiuc_warnings_errors(1, *command_line);
188 Mass_appMass_ratio = token_value;
189 massParts -> storeCommands (*command_line);
192 case I_xx_appMass_ratio_flag:
194 if (check_float(linetoken3))
195 token3 >> token_value;
197 uiuc_warnings_errors(1, *command_line);
199 I_xx_appMass_ratio = token_value;
200 massParts -> storeCommands (*command_line);
203 case I_yy_appMass_ratio_flag:
205 if (check_float(linetoken3))
206 token3 >> token_value;
208 uiuc_warnings_errors(1, *command_line);
210 I_yy_appMass_ratio = token_value;
211 massParts -> storeCommands (*command_line);
214 case I_zz_appMass_ratio_flag:
216 if (check_float(linetoken3))
217 token3 >> token_value;
219 uiuc_warnings_errors(1, *command_line);
221 I_zz_appMass_ratio = token_value;
222 massParts -> storeCommands (*command_line);
225 case Mass_appMass_flag:
227 if (check_float(linetoken3))
228 token3 >> token_value;
230 uiuc_warnings_errors(1, *command_line);
232 Mass_appMass = token_value;
233 massParts -> storeCommands (*command_line);
236 case I_xx_appMass_flag:
238 if (check_float(linetoken3))
239 token3 >> token_value;
241 uiuc_warnings_errors(1, *command_line);
243 I_xx_appMass = token_value;
244 massParts -> storeCommands (*command_line);
247 case I_yy_appMass_flag:
249 if (check_float(linetoken3))
250 token3 >> token_value;
252 uiuc_warnings_errors(1, *command_line);
254 I_yy_appMass = token_value;
255 massParts -> storeCommands (*command_line);
258 case I_zz_appMass_flag:
260 if (check_float(linetoken3))
261 token3 >> token_value;
263 uiuc_warnings_errors(1, *command_line);
265 I_zz_appMass = token_value;
266 massParts -> storeCommands (*command_line);
271 if (ignore_unknown_keywords) {
274 // print error message
275 uiuc_warnings_errors(2, *command_line);