]> git.mxchange.org Git - flightgear.git/blob - src/FDM/UIUCModel/uiuc_menu_fog.cpp
Robert Deters:
[flightgear.git] / src / FDM / UIUCModel / uiuc_menu_fog.cpp
1 /**********************************************************************
2                                                                        
3  FILENAME:     uiuc_menu_fog.cpp
4
5 ----------------------------------------------------------------------
6
7  DESCRIPTION:  reads input data for specified aircraft and creates 
8                approporiate data storage space
9
10 ----------------------------------------------------------------------
11
12  STATUS:       alpha version
13
14 ----------------------------------------------------------------------
15
16  REFERENCES:   based on "menu reader" format of Michael Selig
17
18 ----------------------------------------------------------------------
19
20  HISTORY:      04/04/2003   initial release
21
22 ----------------------------------------------------------------------
23
24  AUTHOR(S):    Robert Deters      <rdeters@uiuc.edu>
25                Michael Selig      <m-selig@uiuc.edu>
26
27 ----------------------------------------------------------------------
28
29  VARIABLES:
30
31 ----------------------------------------------------------------------
32
33  INPUTS:       n/a
34
35 ----------------------------------------------------------------------
36
37  OUTPUTS:      n/a
38
39 ----------------------------------------------------------------------
40
41  CALLED BY:    uiuc_menu()
42
43 ----------------------------------------------------------------------
44
45  CALLS TO:     check_float() if needed
46                d_2_to_3() if needed
47                d_1_to_2() if needed
48                i_1_to_2() if needed
49                d_1_to_1() if needed
50
51  ----------------------------------------------------------------------
52
53  COPYRIGHT:    (C) 2003 by Michael Selig
54
55  This program is free software; you can redistribute it and/or
56  modify it under the terms of the GNU General Public License
57  as published by the Free Software Foundation.
58
59  This program is distributed in the hope that it will be useful,
60  but WITHOUT ANY WARRANTY; without even the implied warranty of
61  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
62  GNU General Public License for more details.
63
64  You should have received a copy of the GNU General Public License
65  along with this program; if not, write to the Free Software
66  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
67  USA or view http://www.gnu.org/copyleft/gpl.html.
68
69 **********************************************************************/
70
71 #include <simgear/compiler.h>
72
73 #if defined( __MWERKS__ )
74 // -dw- optimizer chokes (big-time) trying to optimize humongous
75 // loop/switch statements
76 #pragma optimization_level 0
77 #endif
78
79 #include <cstdlib>
80 #include <string>
81 #include STL_IOSTREAM
82
83 #include "uiuc_menu_fog.h"
84
85 SG_USING_STD(cerr);
86 SG_USING_STD(cout);
87 SG_USING_STD(endl);
88
89 #ifndef _MSC_VER
90 SG_USING_STD(exit);
91 #endif
92
93 void parse_fog( const string& linetoken2, const string& linetoken3,
94                 const string& linetoken4, const string& linetoken5, 
95                 const string& linetoken6, const string& linetoken7, 
96                 const string& linetoken8, const string& linetoken9,
97                 const string& linetoken10, const string& aircraft_directory,
98                 LIST command_line ) {
99   double token_value;
100   int token_value_convert1;
101   istrstream token3(linetoken3.c_str());
102   istrstream token4(linetoken4.c_str());
103   istrstream token5(linetoken5.c_str());
104   istrstream token6(linetoken6.c_str());
105   istrstream token7(linetoken7.c_str());
106   istrstream token8(linetoken8.c_str());
107   istrstream token9(linetoken9.c_str());
108   istrstream token10(linetoken10.c_str());
109
110     switch(fog_map[linetoken2])
111       {
112       case fog_segments_flag:
113         {
114           if (check_float(linetoken3))
115             token3 >> token_value_convert1;
116           else
117             uiuc_warnings_errors(1, *command_line);
118           
119           if (token_value_convert1 < 1 || token_value_convert1 > 100)
120             uiuc_warnings_errors(1, *command_line);
121           
122           fog_field = true;
123           fog_point_index = 0;
124           delete[] fog_time;
125           delete[] fog_value;
126           fog_segments = token_value_convert1;
127           fog_time = new double[fog_segments+1];
128           fog_time[0] = 0.0;
129           fog_value = new int[fog_segments+1];
130           fog_value[0] = 0;
131           
132           break;
133         }
134       case fog_point_flag:
135         {
136           if (check_float(linetoken3))
137             token3 >> token_value;
138           else
139             uiuc_warnings_errors(1, *command_line);
140           
141           if (token_value < 0.1)
142             uiuc_warnings_errors(1, *command_line);
143           
144           if (check_float(linetoken4))
145             token4 >> token_value_convert1;
146           else
147             uiuc_warnings_errors(1, *command_line);
148           
149           if (token_value_convert1 < -1000 || token_value_convert1 > 1000)
150             uiuc_warnings_errors(1, *command_line);
151           
152           if (fog_point_index == fog_segments || fog_point_index == -1)
153             uiuc_warnings_errors(1, *command_line);
154           
155           fog_point_index++;
156           fog_time[fog_point_index] = token_value;
157           fog_value[fog_point_index] = token_value_convert1;
158           
159           break;
160         }
161       default:
162         {
163           if (ignore_unknown_keywords) {
164             // do nothing
165           } else {
166             // print error message
167             uiuc_warnings_errors(2, *command_line);
168           }
169           break;
170         }
171       };
172 }