1 /**********************************************************************
3 FILENAME: uiuc_menu_gear.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
71 **********************************************************************/
73 #include <simgear/compiler.h>
75 #if defined( __MWERKS__ )
76 // -dw- optimizer chokes (big-time) trying to optimize humongous
77 // loop/switch statements
78 #pragma optimization_level 0
85 #include "uiuc_menu_gear.h"
95 void parse_gear( const string& linetoken2, const string& linetoken3,
96 const string& linetoken4, const string& linetoken5,
97 const string& linetoken6, const string& linetoken7,
98 const string& linetoken8, const string& linetoken9,
99 const string& linetoken10, const string& aircraft_directory,
100 LIST command_line ) {
102 istringstream token3(linetoken3.c_str());
103 istringstream token4(linetoken4.c_str());
104 istringstream token5(linetoken5.c_str());
105 istringstream token6(linetoken6.c_str());
106 istringstream token7(linetoken7.c_str());
107 istringstream token8(linetoken8.c_str());
108 istringstream token9(linetoken9.c_str());
109 istringstream token10(linetoken10.c_str());
111 switch(gear_map[linetoken2])
117 if (index < 0 || index >= 16)
118 uiuc_warnings_errors(1, *command_line);
119 if (check_float(linetoken4))
120 token4 >> token_value;
122 uiuc_warnings_errors(1, *command_line);
123 D_gear_v[index][0] = token_value;
124 gear_model[index] = true;
131 if (index < 0 || index >= 16)
132 uiuc_warnings_errors(1, *command_line);
133 if (check_float(linetoken4))
134 token4 >> token_value;
136 uiuc_warnings_errors(1, *command_line);
137 D_gear_v[index][1] = token_value;
138 gear_model[index] = true;
145 if (index < 0 || index >= 16)
146 uiuc_warnings_errors(1, *command_line);
147 if (check_float(linetoken4))
148 token4 >> token_value;
150 uiuc_warnings_errors(1, *command_line);
151 D_gear_v[index][2] = token_value;
152 gear_model[index] = true;
159 if (index < 0 || index >= 16)
160 uiuc_warnings_errors(1, *command_line);
161 if (check_float(linetoken4))
162 token4 >> token_value;
164 uiuc_warnings_errors(1, *command_line);
165 cgear[index] = token_value;
166 gear_model[index] = true;
173 if (index < 0 || index >= 16)
174 uiuc_warnings_errors(1, *command_line);
175 if (check_float(linetoken4))
176 token4 >> token_value;
178 uiuc_warnings_errors(1, *command_line);
179 kgear[index] = token_value;
180 gear_model[index] = true;
187 if (index < 0 || index >= 16)
188 uiuc_warnings_errors(1, *command_line);
189 if (check_float(linetoken4))
190 token4 >> token_value;
192 uiuc_warnings_errors(1, *command_line);
193 muGear[index] = token_value;
194 gear_model[index] = true;
197 case strutLength_flag:
201 if (index < 0 || index >= 16)
202 uiuc_warnings_errors(1, *command_line);
203 if (check_float(linetoken4))
204 token4 >> token_value;
206 uiuc_warnings_errors(1, *command_line);
207 strutLength[index] = token_value;
208 gear_model[index] = true;
213 if (check_float(linetoken3))
214 token3 >> token_value;
216 uiuc_warnings_errors(1, *command_line);
219 gear_max = token_value;
224 if (check_float(linetoken3))
225 token3 >> token_value;
227 uiuc_warnings_errors(1, *command_line);
230 gear_rate = token_value;
235 if (ignore_unknown_keywords) {
238 // print error message
239 uiuc_warnings_errors(2, *command_line);