1 // ----------------------------------------------------------------------------
2 // Copyright (C) 2014
3 // David Freese, W1HKJ
4 //
5 // This file is part of flmsg
6 //
7 // flrig is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // flrig is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program. If not, see <http://www.gnu.org/licenses/>.
19 // ----------------------------------------------------------------------------
20
21 #include <stdlib.h>
22 #include <iostream>
23 #include <fstream>
24 #include <cstring>
25 #include <ctime>
26 #include <sys/types.h>
27 #include <sys/stat.h>
28 #include <stdio.h>
29 #include <errno.h>
30
31 #include <FL/Fl.H>
32 #include <FL/Enumerations.H>
33 #include <FL/Fl_Window.H>
34 #include <FL/Fl_Button.H>
35 #include <FL/Fl_Group.H>
36 #include <FL/Fl_Sys_Menu_Bar.H>
37 #include <FL/x.H>
38 #include <FL/Fl_Help_Dialog.H>
39 #include <FL/Fl_Menu_Item.H>
40 #include <FL/Fl_File_Icon.H>
41
42 #include "config.h"
43 #include "flmsg_config.h"
44
45 #include "flmsg.h"
46 #include "templates.h"
47 #include "debug.h"
48 #include "util.h"
49 #include "gettext.h"
50 #include "flmsg_dialog.h"
51 #include "flinput2.h"
52 #include "date.h"
53 #include "calendar.h"
54 #include "icons.h"
55 #include "fileselect.h"
56 #include "wrap.h"
57 #include "status.h"
58 #include "parse_xml.h"
59
60 #ifdef WIN32
61 # include "flmsgrc.h"
62 # include "compat.h"
63 # define dirent fl_dirent_no_thanks
64 #endif
65
66 #include <FL/filename.H>
67 #include "dirent-check.h"
68
69 #include <FL/x.H>
70 #include <FL/Fl_Pixmap.H>
71 #include <FL/Fl_Image.H>
72
73 using namespace std;
74
75 const char mars_ineei_precedent[] = "RPIFM";
76
77 string ineei_buff;
78 string def_mars_ineei_filename = "";
79 string base_mars_ineei_filename = "";
80 string def_mars_ineei_TemplateName = "";
81 bool using_mars_ineei_template = false;
82
83 // mars_ineei fields
84
85 string mars_ineei_DE = ":de:";
86 string mars_ineei_NBR = ":nbr:";
87 string mars_ineei_PREC = ":prec:";
88 string mars_ineei_DTG = ":dtg:";
89 string mars_ineei_FMNAME = ":fmname:";
90 string mars_ineei_FMCALL = ":fmcall:";
91 string mars_ineei_FMSTATE = ":fmstate:";
92 string mars_ineei_TOPOS = ":topos:";
93 string mars_ineei_TOCALL = ":tocall:";
94 string mars_ineei_TOSTATE = ":tostate:";
95 string mars_ineei_INFO1POS = ":info1pos:";
96 string mars_ineei_INFO1CALL = ":info1call:";
97 string mars_ineei_INFO1STATE = ":info1state:";
98 string mars_ineei_INFO2POS = ":info2pos:";
99 string mars_ineei_INFO2CALL = ":info2call:";
100 string mars_ineei_INFO2STATE = ":info2state:";
101 string mars_ineei_INFO3POS = ":info3pos:";
102 string mars_ineei_INFO3CALL = ":info3call:";
103 string mars_ineei_INFO3STATE = ":info3state:";
104 string mars_ineei_INFO4POS = ":info4pos:";
105 string mars_ineei_INFO4CALL = ":info4call:";
106 string mars_ineei_INFO4STATE = ":info4state:";
107 string mars_ineei_INFO5POS = ":info5pos:";
108 string mars_ineei_INFO5CALL = ":info5call:";
109 string mars_ineei_INFO5STATE = ":info5state:";
110 string mars_ineei_INFO6POS = ":info6pos:";
111 string mars_ineei_INFO6CALL = ":info6call:";
112 string mars_ineei_INFO6STATE = ":info6state:";
113 string mars_ineei_INFO7POS = ":info7pos:";
114 string mars_ineei_INFO7CALL = ":info7call:";
115 string mars_ineei_INFO7STATE = ":info7state:";
116 string mars_ineei_INFO8POS = ":info8pos:";
117 string mars_ineei_INFO8CALL = ":info8call:";
118 string mars_ineei_INFO8STATE = ":info8state:";
119 string mars_ineei_INFO9POS = ":info9pos:";
120 string mars_ineei_INFO9CALL = ":info9call:";
121 string mars_ineei_INFO9STATE = ":info9state:";
122 string mars_ineei_INFO10POS = ":info10pos:";
123 string mars_ineei_INFO10CALL = ":info10call:";
124 string mars_ineei_INFO10STATE = ":info10state:";
125 string mars_ineei_INCIDENT = ":incident:";
126 string mars_ineei_REF = ":ref:";
127 string mars_ineei_STATE = ":state:";
128 string mars_ineei_1A_INCIDENT = ":1a_incident:";
129 string mars_ineei_1A_LOCATION = ":1a_location:";
130 string mars_ineei_1A_TIME = ":1a_time:";
131 string mars_ineei_1B_MEDFACSTS = ":1b_medfacsts:";
132 string mars_ineei_1C_TRNPSTS = ":1c_trnpsts:";
133 string mars_ineei_1D_DAMAGE = ":1d_damage:";
134 string mars_ineei_1E_UTILSTS = ":1e_utilsts:";
135 string mars_ineei_1F_COMMSTS = ":1f_commsts:";
136 string mars_ineei_1G_INFOSRC = ":1g_infosrc:";
137 string mars_ineei_1G_INFOTIME = ":1g_infotime:";
138 string mars_ineei_1H_REMARKS = ":1h_remarks:";
139
140 string s_mars_ineei_DE;
141 string s_mars_ineei_NBR;
142 string s_mars_ineei_PREC = "R";
143 string s_mars_ineei_DTG;
144 string s_mars_ineei_FMNAME;
145 string s_mars_ineei_FMCALL;
146 string s_mars_ineei_FMSTATE;
147 string s_mars_ineei_TOPOS;
148 string s_mars_ineei_TOCALL;
149 string s_mars_ineei_TOSTATE;
150 string s_mars_ineei_INFO1POS;
151 string s_mars_ineei_INFO1CALL;
152 string s_mars_ineei_INFO1STATE;
153 string s_mars_ineei_INFO2POS;
154 string s_mars_ineei_INFO2CALL;
155 string s_mars_ineei_INFO2STATE;
156 string s_mars_ineei_INFO3POS;
157 string s_mars_ineei_INFO3CALL;
158 string s_mars_ineei_INFO3STATE;
159 string s_mars_ineei_INFO4POS;
160 string s_mars_ineei_INFO4CALL;
161 string s_mars_ineei_INFO4STATE;
162 string s_mars_ineei_INFO5POS;
163 string s_mars_ineei_INFO5CALL;
164 string s_mars_ineei_INFO5STATE;
165 string s_mars_ineei_INFO6POS;
166 string s_mars_ineei_INFO6CALL;
167 string s_mars_ineei_INFO6STATE;
168 string s_mars_ineei_INFO7POS;
169 string s_mars_ineei_INFO7CALL;
170 string s_mars_ineei_INFO7STATE;
171 string s_mars_ineei_INFO8POS;
172 string s_mars_ineei_INFO8CALL;
173 string s_mars_ineei_INFO8STATE;
174 string s_mars_ineei_INFO9POS;
175 string s_mars_ineei_INFO9CALL;
176 string s_mars_ineei_INFO9STATE;
177 string s_mars_ineei_INFO10POS;
178 string s_mars_ineei_INFO10CALL;
179 string s_mars_ineei_INFO10STATE;
180 string s_mars_ineei_INCIDENT;
181 string s_mars_ineei_REF;
182 string s_mars_ineei_STATE;
183 string s_mars_ineei_1A_INCIDENT;
184 string s_mars_ineei_1A_LOCATION;
185 string s_mars_ineei_1A_TIME;
186 string s_mars_ineei_1B_MEDFACSTS;
187 string s_mars_ineei_1C_TRNPSTS;
188 string s_mars_ineei_1D_DAMAGE;
189 string s_mars_ineei_1E_UTILSTS;
190 string s_mars_ineei_1F_COMMSTS;
191 string s_mars_ineei_1G_INFOSRC;
192 string s_mars_ineei_1G_INFOTIME;
193 string s_mars_ineei_1H_REMARKS;
194
cb_mars_ineei_SetDTG()195 void cb_mars_ineei_SetDTG()
196 {
197 txt_mars_ineei_DTG->value(szDateTime());
198 }
199
clear_mars_ineei_fields()200 void clear_mars_ineei_fields()
201 {
202 s_mars_ineei_DE.clear();
203 s_mars_ineei_NBR.clear();
204 s_mars_ineei_PREC = "M";
205 s_mars_ineei_DTG.clear();
206 s_mars_ineei_FMNAME.clear();
207 s_mars_ineei_FMCALL.clear();
208 s_mars_ineei_FMSTATE.clear();
209 s_mars_ineei_TOPOS.clear();
210 s_mars_ineei_TOCALL.clear();
211 s_mars_ineei_TOSTATE.clear();
212 s_mars_ineei_INFO1POS.clear();
213 s_mars_ineei_INFO1CALL.clear();
214 s_mars_ineei_INFO1STATE.clear();
215 s_mars_ineei_INFO2POS.clear();
216 s_mars_ineei_INFO2CALL.clear();
217 s_mars_ineei_INFO2STATE.clear();
218 s_mars_ineei_INFO3POS.clear();
219 s_mars_ineei_INFO3CALL.clear();
220 s_mars_ineei_INFO3STATE.clear();
221 s_mars_ineei_INFO4POS.clear();
222 s_mars_ineei_INFO4CALL.clear();
223 s_mars_ineei_INFO4STATE.clear();
224 s_mars_ineei_INFO5POS.clear();
225 s_mars_ineei_INFO5CALL.clear();
226 s_mars_ineei_INFO5STATE.clear();
227 s_mars_ineei_INFO6POS.clear();
228 s_mars_ineei_INFO6CALL.clear();
229 s_mars_ineei_INFO6STATE.clear();
230 s_mars_ineei_INFO7POS.clear();
231 s_mars_ineei_INFO7CALL.clear();
232 s_mars_ineei_INFO7STATE.clear();
233 s_mars_ineei_INFO8POS.clear();
234 s_mars_ineei_INFO8CALL.clear();
235 s_mars_ineei_INFO8STATE.clear();
236 s_mars_ineei_INFO9POS.clear();
237 s_mars_ineei_INFO9CALL.clear();
238 s_mars_ineei_INFO9STATE.clear();
239 s_mars_ineei_INFO10POS.clear();
240 s_mars_ineei_INFO10CALL.clear();
241 s_mars_ineei_INFO10STATE.clear();
242 s_mars_ineei_INCIDENT.clear();
243 s_mars_ineei_REF.clear();
244 s_mars_ineei_STATE.clear();
245 s_mars_ineei_1A_INCIDENT.clear();
246 s_mars_ineei_1A_LOCATION.clear();
247 s_mars_ineei_1A_TIME.clear();
248 s_mars_ineei_1B_MEDFACSTS.clear();
249 s_mars_ineei_1C_TRNPSTS.clear();
250 s_mars_ineei_1D_DAMAGE.clear();
251 s_mars_ineei_1E_UTILSTS.clear();
252 s_mars_ineei_1F_COMMSTS.clear();
253 s_mars_ineei_1G_INFOSRC.clear();
254 s_mars_ineei_1G_INFOTIME.clear();
255 s_mars_ineei_1H_REMARKS.clear();
256 }
257
check_mars_ineei_fields()258 bool check_mars_ineei_fields()
259 {
260 string temp;
261 if (s_mars_ineei_DE != txt_mars_ineei_DE->value()) return true;
262 if (s_mars_ineei_NBR != txt_mars_ineei_NBR->value()) return true;
263 temp = mars_ineei_precedent[sel_mars_ineei_PREC->index()];
264 if (s_mars_ineei_PREC != temp) return true;
265 if (s_mars_ineei_DTG != txt_mars_ineei_DTG->value()) return true;
266 if (s_mars_ineei_FMNAME != txt_mars_ineei_FMNAME->value()) return true;
267 if (s_mars_ineei_FMCALL != txt_mars_ineei_FMCALL->value()) return true;
268 if (s_mars_ineei_FMSTATE != txt_mars_ineei_FMSTATE->value()) return true;
269 if (s_mars_ineei_TOPOS != txt_mars_ineei_TOPOS->value()) return true;
270 if (s_mars_ineei_TOCALL != txt_mars_ineei_TOCALL->value()) return true;
271 if (s_mars_ineei_TOSTATE != txt_mars_ineei_TOSTATE->value()) return true;
272 if (s_mars_ineei_INFO1POS != txt_mars_ineei_INFO1POS->value()) return true;
273 if (s_mars_ineei_INFO1CALL != txt_mars_ineei_INFO1CALL->value()) return true;
274 if (s_mars_ineei_INFO1STATE != txt_mars_ineei_INFO1STATE->value()) return true;
275 if (s_mars_ineei_INFO2POS != txt_mars_ineei_INFO2POS->value()) return true;
276 if (s_mars_ineei_INFO2CALL != txt_mars_ineei_INFO2CALL->value()) return true;
277 if (s_mars_ineei_INFO2STATE != txt_mars_ineei_INFO2STATE->value()) return true;
278 if (s_mars_ineei_INFO3POS != txt_mars_ineei_INFO3POS->value()) return true;
279 if (s_mars_ineei_INFO3CALL != txt_mars_ineei_INFO3CALL->value()) return true;
280 if (s_mars_ineei_INFO3STATE != txt_mars_ineei_INFO3STATE->value()) return true;
281 if (s_mars_ineei_INFO4POS != txt_mars_ineei_INFO4POS->value()) return true;
282 if (s_mars_ineei_INFO4CALL != txt_mars_ineei_INFO4CALL->value()) return true;
283 if (s_mars_ineei_INFO4STATE != txt_mars_ineei_INFO4STATE->value()) return true;
284 if (s_mars_ineei_INFO5POS != txt_mars_ineei_INFO5POS->value()) return true;
285 if (s_mars_ineei_INFO5CALL != txt_mars_ineei_INFO5CALL->value()) return true;
286 if (s_mars_ineei_INFO5STATE != txt_mars_ineei_INFO5STATE->value()) return true;
287 if (s_mars_ineei_INFO6POS != txt_mars_ineei_INFO6POS->value()) return true;
288 if (s_mars_ineei_INFO6CALL != txt_mars_ineei_INFO6CALL->value()) return true;
289 if (s_mars_ineei_INFO6STATE != txt_mars_ineei_INFO6STATE->value()) return true;
290 if (s_mars_ineei_INFO7POS != txt_mars_ineei_INFO7POS->value()) return true;
291 if (s_mars_ineei_INFO7CALL != txt_mars_ineei_INFO7CALL->value()) return true;
292 if (s_mars_ineei_INFO7STATE != txt_mars_ineei_INFO7STATE->value()) return true;
293 if (s_mars_ineei_INFO8POS != txt_mars_ineei_INFO8POS->value()) return true;
294 if (s_mars_ineei_INFO8CALL != txt_mars_ineei_INFO8CALL->value()) return true;
295 if (s_mars_ineei_INFO8STATE != txt_mars_ineei_INFO8STATE->value()) return true;
296 if (s_mars_ineei_INFO9POS != txt_mars_ineei_INFO9POS->value()) return true;
297 if (s_mars_ineei_INFO9CALL != txt_mars_ineei_INFO9CALL->value()) return true;
298 if (s_mars_ineei_INFO9STATE != txt_mars_ineei_INFO9STATE->value()) return true;
299 if (s_mars_ineei_INFO10POS != txt_mars_ineei_INFO10POS->value()) return true;
300 if (s_mars_ineei_INFO10CALL != txt_mars_ineei_INFO10CALL->value()) return true;
301 if (s_mars_ineei_INFO10STATE != txt_mars_ineei_INFO10STATE->value()) return true;
302 if (s_mars_ineei_INCIDENT != txt_mars_ineei_INCIDENT->value()) return true;
303 if (s_mars_ineei_REF != txt_mars_ineei_REF->value()) return true;
304 if (s_mars_ineei_STATE != txt_mars_ineei_STATE->value()) return true;
305 if (s_mars_ineei_1A_INCIDENT != txt_mars_ineei_1A_INCIDENT->value()) return true;
306 if (s_mars_ineei_1A_LOCATION != txt_mars_ineei_1A_LOCATION->value()) return true;
307 if (s_mars_ineei_1A_TIME != txt_mars_ineei_1A_TIME->value()) return true;
308 if (s_mars_ineei_1B_MEDFACSTS != txt_mars_ineei_1B_MEDFACSTS->value()) return true;
309 if (s_mars_ineei_1C_TRNPSTS != txt_mars_ineei_1C_TRNPSTS->value()) return true;
310 if (s_mars_ineei_1D_DAMAGE != txt_mars_ineei_1D_DAMAGE->value()) return true;
311 if (s_mars_ineei_1E_UTILSTS != txt_mars_ineei_1E_UTILSTS->value()) return true;
312 if (s_mars_ineei_1F_COMMSTS != txt_mars_ineei_1F_COMMSTS->value()) return true;
313 if (s_mars_ineei_1G_INFOSRC != txt_mars_ineei_1G_INFOSRC->value()) return true;
314 if (s_mars_ineei_1G_INFOTIME != txt_mars_ineei_1G_INFOTIME->value()) return true;
315 if (s_mars_ineei_1H_REMARKS != txt_mars_ineei_1H_REMARKS->value()) return true;
316 return false;
317 }
318
update_mars_ineei_fields()319 void update_mars_ineei_fields()
320 {
321 s_mars_ineei_DE = txt_mars_ineei_DE->value();
322 s_mars_ineei_NBR = txt_mars_ineei_NBR->value();
323 s_mars_ineei_PREC.clear();
324 s_mars_ineei_PREC = mars_ineei_precedent[sel_mars_ineei_PREC->index()];
325 s_mars_ineei_DTG = txt_mars_ineei_DTG->value();
326 s_mars_ineei_FMNAME = txt_mars_ineei_FMNAME->value();
327 s_mars_ineei_FMCALL = txt_mars_ineei_FMCALL->value();
328 s_mars_ineei_FMSTATE = txt_mars_ineei_FMSTATE->value();
329 s_mars_ineei_TOPOS = txt_mars_ineei_TOPOS->value();
330 s_mars_ineei_TOCALL = txt_mars_ineei_TOCALL->value();
331 s_mars_ineei_TOSTATE = txt_mars_ineei_TOSTATE->value();
332 s_mars_ineei_INFO1POS = txt_mars_ineei_INFO1POS->value();
333 s_mars_ineei_INFO1CALL = txt_mars_ineei_INFO1CALL->value();
334 s_mars_ineei_INFO1STATE = txt_mars_ineei_INFO1STATE->value();
335 s_mars_ineei_INFO2POS = txt_mars_ineei_INFO2POS->value();
336 s_mars_ineei_INFO2CALL = txt_mars_ineei_INFO2CALL->value();
337 s_mars_ineei_INFO2STATE = txt_mars_ineei_INFO2STATE->value();
338 s_mars_ineei_INFO3POS = txt_mars_ineei_INFO3POS->value();
339 s_mars_ineei_INFO3CALL = txt_mars_ineei_INFO3CALL->value();
340 s_mars_ineei_INFO3STATE = txt_mars_ineei_INFO3STATE->value();
341 s_mars_ineei_INFO4POS = txt_mars_ineei_INFO4POS->value();
342 s_mars_ineei_INFO4CALL = txt_mars_ineei_INFO4CALL->value();
343 s_mars_ineei_INFO4STATE = txt_mars_ineei_INFO4STATE->value();
344 s_mars_ineei_INFO5POS = txt_mars_ineei_INFO5POS->value();
345 s_mars_ineei_INFO5CALL = txt_mars_ineei_INFO5CALL->value();
346 s_mars_ineei_INFO5STATE = txt_mars_ineei_INFO5STATE->value();
347 s_mars_ineei_INFO6POS = txt_mars_ineei_INFO6POS->value();
348 s_mars_ineei_INFO6CALL = txt_mars_ineei_INFO6CALL->value();
349 s_mars_ineei_INFO6STATE = txt_mars_ineei_INFO6STATE->value();
350 s_mars_ineei_INFO7POS = txt_mars_ineei_INFO7POS->value();
351 s_mars_ineei_INFO7CALL = txt_mars_ineei_INFO7CALL->value();
352 s_mars_ineei_INFO7STATE = txt_mars_ineei_INFO7STATE->value();
353 s_mars_ineei_INFO8POS = txt_mars_ineei_INFO8POS->value();
354 s_mars_ineei_INFO8CALL = txt_mars_ineei_INFO8CALL->value();
355 s_mars_ineei_INFO8STATE = txt_mars_ineei_INFO8STATE->value();
356 s_mars_ineei_INFO9POS = txt_mars_ineei_INFO9POS->value();
357 s_mars_ineei_INFO9CALL = txt_mars_ineei_INFO9CALL->value();
358 s_mars_ineei_INFO9STATE = txt_mars_ineei_INFO9STATE->value();
359 s_mars_ineei_INFO10POS = txt_mars_ineei_INFO10POS->value();
360 s_mars_ineei_INFO10CALL = txt_mars_ineei_INFO10CALL->value();
361 s_mars_ineei_INFO10STATE = txt_mars_ineei_INFO10STATE->value();
362 s_mars_ineei_INCIDENT = txt_mars_ineei_INCIDENT->value();
363 s_mars_ineei_REF = txt_mars_ineei_REF->value();
364 s_mars_ineei_STATE = txt_mars_ineei_STATE->value();
365 s_mars_ineei_1A_INCIDENT = txt_mars_ineei_1A_INCIDENT->value();
366 s_mars_ineei_1A_LOCATION = txt_mars_ineei_1A_LOCATION->value();
367 s_mars_ineei_1A_TIME = txt_mars_ineei_1A_TIME->value();
368 s_mars_ineei_1B_MEDFACSTS = txt_mars_ineei_1B_MEDFACSTS->value();
369 s_mars_ineei_1C_TRNPSTS = txt_mars_ineei_1C_TRNPSTS->value();
370 s_mars_ineei_1D_DAMAGE = txt_mars_ineei_1D_DAMAGE->value();
371 s_mars_ineei_1E_UTILSTS = txt_mars_ineei_1E_UTILSTS->value();
372 s_mars_ineei_1F_COMMSTS = txt_mars_ineei_1F_COMMSTS->value();
373 s_mars_ineei_1G_INFOSRC = txt_mars_ineei_1G_INFOSRC->value();
374 s_mars_ineei_1G_INFOTIME = txt_mars_ineei_1G_INFOTIME->value();
375 s_mars_ineei_1H_REMARKS = txt_mars_ineei_1H_REMARKS->value();
376 }
377
update_mars_ineeiform()378 void update_mars_ineeiform()
379 {
380 txt_mars_ineei_DE->value(s_mars_ineei_DE.c_str());
381 txt_mars_ineei_NBR->value(s_mars_ineei_NBR.c_str());
382
383 size_t n = strchr(mars_ineei_precedent, s_mars_ineei_PREC[0]) - mars_ineei_precedent;
384 if (n < 0) n = 0;
385 if (n > 4) n = 4;
386 sel_mars_ineei_PREC->index(n);
387
388 txt_mars_ineei_DTG->value(s_mars_ineei_DTG.c_str());
389 txt_mars_ineei_FMNAME->value(s_mars_ineei_FMNAME.c_str());
390 txt_mars_ineei_FMCALL->value(s_mars_ineei_FMCALL.c_str());
391 txt_mars_ineei_FMSTATE->value(s_mars_ineei_FMSTATE.c_str());
392 txt_mars_ineei_TOPOS->value(s_mars_ineei_TOPOS.c_str());
393 txt_mars_ineei_TOCALL->value(s_mars_ineei_TOCALL.c_str());
394 txt_mars_ineei_TOSTATE->value(s_mars_ineei_TOSTATE.c_str());
395 txt_mars_ineei_INFO1POS->value(s_mars_ineei_INFO1POS.c_str());
396 txt_mars_ineei_INFO1CALL->value(s_mars_ineei_INFO1CALL.c_str());
397 txt_mars_ineei_INFO1STATE->value(s_mars_ineei_INFO1STATE.c_str());
398 txt_mars_ineei_INFO2POS->value(s_mars_ineei_INFO2POS.c_str());
399 txt_mars_ineei_INFO2CALL->value(s_mars_ineei_INFO2CALL.c_str());
400 txt_mars_ineei_INFO2STATE->value(s_mars_ineei_INFO2STATE.c_str());
401 txt_mars_ineei_INFO3POS->value(s_mars_ineei_INFO3POS.c_str());
402 txt_mars_ineei_INFO3CALL->value(s_mars_ineei_INFO3CALL.c_str());
403 txt_mars_ineei_INFO3STATE->value(s_mars_ineei_INFO3STATE.c_str());
404 txt_mars_ineei_INFO4POS->value(s_mars_ineei_INFO4POS.c_str());
405 txt_mars_ineei_INFO4CALL->value(s_mars_ineei_INFO4CALL.c_str());
406 txt_mars_ineei_INFO4STATE->value(s_mars_ineei_INFO4STATE.c_str());
407 txt_mars_ineei_INFO5POS->value(s_mars_ineei_INFO5POS.c_str());
408 txt_mars_ineei_INFO5CALL->value(s_mars_ineei_INFO5CALL.c_str());
409 txt_mars_ineei_INFO5STATE->value(s_mars_ineei_INFO5STATE.c_str());
410 txt_mars_ineei_INFO6POS->value(s_mars_ineei_INFO6POS.c_str());
411 txt_mars_ineei_INFO6CALL->value(s_mars_ineei_INFO6CALL.c_str());
412 txt_mars_ineei_INFO6STATE->value(s_mars_ineei_INFO6STATE.c_str());
413 txt_mars_ineei_INFO7POS->value(s_mars_ineei_INFO7POS.c_str());
414 txt_mars_ineei_INFO7CALL->value(s_mars_ineei_INFO7CALL.c_str());
415 txt_mars_ineei_INFO7STATE->value(s_mars_ineei_INFO7STATE.c_str());
416 txt_mars_ineei_INFO8POS->value(s_mars_ineei_INFO8POS.c_str());
417 txt_mars_ineei_INFO8CALL->value(s_mars_ineei_INFO8CALL.c_str());
418 txt_mars_ineei_INFO8STATE->value(s_mars_ineei_INFO8STATE.c_str());
419 txt_mars_ineei_INFO9POS->value(s_mars_ineei_INFO9POS.c_str());
420 txt_mars_ineei_INFO9CALL->value(s_mars_ineei_INFO9CALL.c_str());
421 txt_mars_ineei_INFO9STATE->value(s_mars_ineei_INFO9STATE.c_str());
422 txt_mars_ineei_INFO10POS->value(s_mars_ineei_INFO10POS.c_str());
423 txt_mars_ineei_INFO10CALL->value(s_mars_ineei_INFO10CALL.c_str());
424 txt_mars_ineei_INFO10STATE->value(s_mars_ineei_INFO10STATE.c_str());
425 txt_mars_ineei_INCIDENT->value(s_mars_ineei_INCIDENT.c_str());
426 txt_mars_ineei_REF->value(s_mars_ineei_REF.c_str());
427 txt_mars_ineei_STATE->value(s_mars_ineei_STATE.c_str());
428 txt_mars_ineei_1A_INCIDENT->value(s_mars_ineei_1A_INCIDENT.c_str());
429 txt_mars_ineei_1A_LOCATION->value(s_mars_ineei_1A_LOCATION.c_str());
430 txt_mars_ineei_1A_TIME->value(s_mars_ineei_1A_TIME.c_str());
431 txt_mars_ineei_1B_MEDFACSTS->value(s_mars_ineei_1B_MEDFACSTS.c_str());
432 txt_mars_ineei_1C_TRNPSTS->value(s_mars_ineei_1C_TRNPSTS.c_str());
433 txt_mars_ineei_1D_DAMAGE->value(s_mars_ineei_1D_DAMAGE.c_str());
434 txt_mars_ineei_1E_UTILSTS->value(s_mars_ineei_1E_UTILSTS.c_str());
435 txt_mars_ineei_1F_COMMSTS->value(s_mars_ineei_1F_COMMSTS.c_str());
436 txt_mars_ineei_1G_INFOSRC->value(s_mars_ineei_1G_INFOSRC.c_str());
437 txt_mars_ineei_1G_INFOTIME->value(s_mars_ineei_1G_INFOTIME.c_str());
438 txt_mars_ineei_1H_REMARKS->value(s_mars_ineei_1H_REMARKS.c_str());
439 }
440
clear_mars_ineei_form()441 void clear_mars_ineei_form()
442 {
443 clear_mars_ineei_fields();
444 txt_mars_ineei_DE->value("");
445 txt_mars_ineei_NBR->value("");
446 sel_mars_ineei_PREC->index(4);
447 txt_mars_ineei_DTG->value("");
448 txt_mars_ineei_FMNAME->value("");
449 txt_mars_ineei_FMCALL->value("");
450 txt_mars_ineei_FMSTATE->value("");
451 txt_mars_ineei_TOPOS->value("");
452 txt_mars_ineei_TOCALL->value("");
453 txt_mars_ineei_TOSTATE->value("");
454 txt_mars_ineei_INFO1POS->value("");
455 txt_mars_ineei_INFO1CALL->value("");
456 txt_mars_ineei_INFO1STATE->value("");
457 txt_mars_ineei_INFO2POS->value("");
458 txt_mars_ineei_INFO2CALL->value("");
459 txt_mars_ineei_INFO2STATE->value("");
460 txt_mars_ineei_INFO3POS->value("");
461 txt_mars_ineei_INFO3CALL->value("");
462 txt_mars_ineei_INFO3STATE->value("");
463 txt_mars_ineei_INFO4POS->value("");
464 txt_mars_ineei_INFO4CALL->value("");
465 txt_mars_ineei_INFO4STATE->value("");
466 txt_mars_ineei_INFO5POS->value("");
467 txt_mars_ineei_INFO5CALL->value("");
468 txt_mars_ineei_INFO5STATE->value("");
469 txt_mars_ineei_INFO6POS->value("");
470 txt_mars_ineei_INFO6CALL->value("");
471 txt_mars_ineei_INFO6STATE->value("");
472 txt_mars_ineei_INFO7POS->value("");
473 txt_mars_ineei_INFO7CALL->value("");
474 txt_mars_ineei_INFO7STATE->value("");
475 txt_mars_ineei_INFO8POS->value("");
476 txt_mars_ineei_INFO8CALL->value("");
477 txt_mars_ineei_INFO8STATE->value("");
478 txt_mars_ineei_INFO9POS->value("");
479 txt_mars_ineei_INFO9CALL->value("");
480 txt_mars_ineei_INFO9STATE->value("");
481 txt_mars_ineei_INFO10POS->value("");
482 txt_mars_ineei_INFO10CALL->value("");
483 txt_mars_ineei_INFO10STATE->value("");
484 txt_mars_ineei_INCIDENT->value("");
485 txt_mars_ineei_REF->value("");
486 txt_mars_ineei_STATE->value("");
487 txt_mars_ineei_1A_INCIDENT->value("");
488 txt_mars_ineei_1A_LOCATION->value("");
489 txt_mars_ineei_1A_TIME->value("");
490 txt_mars_ineei_1B_MEDFACSTS->value("");
491 txt_mars_ineei_1C_TRNPSTS->value("");
492 txt_mars_ineei_1D_DAMAGE->value("");
493 txt_mars_ineei_1E_UTILSTS->value("");
494 txt_mars_ineei_1F_COMMSTS->value("");
495 txt_mars_ineei_1G_INFOSRC->value("");
496 txt_mars_ineei_1G_INFOTIME->value("");
497 txt_mars_ineei_1H_REMARKS->value("");
498 }
499
make_mars_ineei_buff(bool compress=false)500 void make_mars_ineei_buff(bool compress = false)
501 {
502 string mbuff;
503 mbuff.clear();
504 mbuff.append( lineout( mars_ineei_DE, s_mars_ineei_DE ) );
505 mbuff.append( lineout( mars_ineei_NBR, s_mars_ineei_NBR ) );
506 mbuff.append( lineout( mars_ineei_PREC, s_mars_ineei_PREC ) );
507 mbuff.append( lineout( mars_ineei_DTG, s_mars_ineei_DTG ) );
508 mbuff.append( lineout( mars_ineei_FMNAME, s_mars_ineei_FMNAME ) );
509 mbuff.append( lineout( mars_ineei_FMCALL, s_mars_ineei_FMCALL ) );
510 mbuff.append( lineout( mars_ineei_FMSTATE, s_mars_ineei_FMSTATE ) );
511 mbuff.append( lineout( mars_ineei_TOPOS, s_mars_ineei_TOPOS ) );
512 mbuff.append( lineout( mars_ineei_TOCALL, s_mars_ineei_TOCALL ) );
513 mbuff.append( lineout( mars_ineei_TOSTATE, s_mars_ineei_TOSTATE ) );
514 mbuff.append( lineout( mars_ineei_INFO1POS, s_mars_ineei_INFO1POS ) );
515 mbuff.append( lineout( mars_ineei_INFO1CALL, s_mars_ineei_INFO1CALL ) );
516 mbuff.append( lineout( mars_ineei_INFO1STATE, s_mars_ineei_INFO1STATE ) );
517 mbuff.append( lineout( mars_ineei_INFO2POS, s_mars_ineei_INFO2POS ) );
518 mbuff.append( lineout( mars_ineei_INFO2CALL, s_mars_ineei_INFO2CALL ) );
519 mbuff.append( lineout( mars_ineei_INFO2STATE, s_mars_ineei_INFO2STATE ) );
520 mbuff.append( lineout( mars_ineei_INFO3POS, s_mars_ineei_INFO3POS ) );
521 mbuff.append( lineout( mars_ineei_INFO3CALL, s_mars_ineei_INFO3CALL ) );
522 mbuff.append( lineout( mars_ineei_INFO3STATE, s_mars_ineei_INFO3STATE ) );
523 mbuff.append( lineout( mars_ineei_INFO4POS, s_mars_ineei_INFO4POS ) );
524 mbuff.append( lineout( mars_ineei_INFO4CALL, s_mars_ineei_INFO4CALL ) );
525 mbuff.append( lineout( mars_ineei_INFO4STATE, s_mars_ineei_INFO4STATE ) );
526 mbuff.append( lineout( mars_ineei_INFO5POS, s_mars_ineei_INFO5POS ) );
527 mbuff.append( lineout( mars_ineei_INFO5CALL, s_mars_ineei_INFO5CALL ) );
528 mbuff.append( lineout( mars_ineei_INFO5STATE, s_mars_ineei_INFO5STATE ) );
529 mbuff.append( lineout( mars_ineei_INFO6POS, s_mars_ineei_INFO6POS ) );
530 mbuff.append( lineout( mars_ineei_INFO6CALL, s_mars_ineei_INFO6CALL ) );
531 mbuff.append( lineout( mars_ineei_INFO6STATE, s_mars_ineei_INFO6STATE ) );
532 mbuff.append( lineout( mars_ineei_INFO7POS, s_mars_ineei_INFO7POS ) );
533 mbuff.append( lineout( mars_ineei_INFO7CALL, s_mars_ineei_INFO7CALL ) );
534 mbuff.append( lineout( mars_ineei_INFO7STATE, s_mars_ineei_INFO7STATE ) );
535 mbuff.append( lineout( mars_ineei_INFO8POS, s_mars_ineei_INFO8POS ) );
536 mbuff.append( lineout( mars_ineei_INFO8CALL, s_mars_ineei_INFO8CALL ) );
537 mbuff.append( lineout( mars_ineei_INFO8STATE, s_mars_ineei_INFO8STATE ) );
538 mbuff.append( lineout( mars_ineei_INFO9POS, s_mars_ineei_INFO9POS ) );
539 mbuff.append( lineout( mars_ineei_INFO9CALL, s_mars_ineei_INFO9CALL ) );
540 mbuff.append( lineout( mars_ineei_INFO9STATE, s_mars_ineei_INFO9STATE ) );
541 mbuff.append( lineout( mars_ineei_INFO10POS, s_mars_ineei_INFO10POS ) );
542 mbuff.append( lineout( mars_ineei_INFO10CALL, s_mars_ineei_INFO10CALL ) );
543 mbuff.append( lineout( mars_ineei_INFO10STATE, s_mars_ineei_INFO10STATE ) );
544 mbuff.append( lineout( mars_ineei_INCIDENT, s_mars_ineei_INCIDENT ) );
545 mbuff.append( lineout( mars_ineei_REF, s_mars_ineei_REF));
546 mbuff.append( lineout( mars_ineei_STATE, s_mars_ineei_STATE));
547 mbuff.append( lineout( mars_ineei_1A_INCIDENT, s_mars_ineei_1A_INCIDENT));
548 mbuff.append( lineout( mars_ineei_1A_LOCATION, s_mars_ineei_1A_LOCATION));
549 mbuff.append( lineout( mars_ineei_1A_TIME, s_mars_ineei_1A_TIME));
550 mbuff.append( lineout( mars_ineei_1B_MEDFACSTS, s_mars_ineei_1B_MEDFACSTS));
551 mbuff.append( lineout( mars_ineei_1C_TRNPSTS, s_mars_ineei_1C_TRNPSTS));
552 mbuff.append( lineout( mars_ineei_1D_DAMAGE, s_mars_ineei_1D_DAMAGE));
553 mbuff.append( lineout( mars_ineei_1E_UTILSTS, s_mars_ineei_1E_UTILSTS));
554 mbuff.append( lineout( mars_ineei_1F_COMMSTS, s_mars_ineei_1F_COMMSTS));
555 mbuff.append( lineout( mars_ineei_1G_INFOSRC, s_mars_ineei_1G_INFOSRC));
556 mbuff.append( lineout( mars_ineei_1G_INFOTIME, s_mars_ineei_1G_INFOTIME));
557 mbuff.append( lineout( mars_ineei_1H_REMARKS, s_mars_ineei_1H_REMARKS ) );
558
559 if (compress) compress_maybe(mbuff);
560 ineei_buff.append(mbuff);
561 }
562
read_mars_ineei_buffer(string data)563 void read_mars_ineei_buffer(string data)
564 {
565 clear_mars_ineei_fields();
566 // search the file buffer for each of the mars_ineei fields
567
568 s_mars_ineei_DE = findstr(data, mars_ineei_DE);
569 s_mars_ineei_NBR = findstr(data, mars_ineei_NBR);
570 s_mars_ineei_PREC = findstr(data, mars_ineei_PREC);
571 s_mars_ineei_DTG = findstr(data, mars_ineei_DTG);
572 s_mars_ineei_FMNAME = findstr(data, mars_ineei_FMNAME);
573 s_mars_ineei_FMCALL = findstr(data, mars_ineei_FMCALL);
574 s_mars_ineei_FMSTATE = findstr(data, mars_ineei_FMSTATE);
575 s_mars_ineei_TOPOS = findstr(data, mars_ineei_TOPOS);
576 s_mars_ineei_TOCALL = findstr(data, mars_ineei_TOCALL);
577 s_mars_ineei_TOSTATE = findstr(data, mars_ineei_TOSTATE);
578 s_mars_ineei_INFO1POS = findstr(data, mars_ineei_INFO1POS);
579 s_mars_ineei_INFO1CALL = findstr(data, mars_ineei_INFO1CALL);
580 s_mars_ineei_INFO1STATE = findstr(data, mars_ineei_INFO1STATE);
581 s_mars_ineei_INFO2POS = findstr(data, mars_ineei_INFO2POS);
582 s_mars_ineei_INFO2CALL = findstr(data, mars_ineei_INFO2CALL);
583 s_mars_ineei_INFO2STATE = findstr(data, mars_ineei_INFO2STATE);
584 s_mars_ineei_INFO3POS = findstr(data, mars_ineei_INFO3POS);
585 s_mars_ineei_INFO3CALL = findstr(data, mars_ineei_INFO3CALL);
586 s_mars_ineei_INFO3STATE = findstr(data, mars_ineei_INFO3STATE);
587 s_mars_ineei_INFO4POS = findstr(data, mars_ineei_INFO4POS);
588 s_mars_ineei_INFO4CALL = findstr(data, mars_ineei_INFO4CALL);
589 s_mars_ineei_INFO4STATE = findstr(data, mars_ineei_INFO4STATE);
590 s_mars_ineei_INFO5POS = findstr(data, mars_ineei_INFO5POS);
591 s_mars_ineei_INFO5CALL = findstr(data, mars_ineei_INFO5CALL);
592 s_mars_ineei_INFO5STATE = findstr(data, mars_ineei_INFO5STATE);
593 s_mars_ineei_INFO6POS = findstr(data, mars_ineei_INFO6POS);
594 s_mars_ineei_INFO6CALL = findstr(data, mars_ineei_INFO6CALL);
595 s_mars_ineei_INFO6STATE = findstr(data, mars_ineei_INFO6STATE);
596 s_mars_ineei_INFO7POS = findstr(data, mars_ineei_INFO7POS);
597 s_mars_ineei_INFO7CALL = findstr(data, mars_ineei_INFO7CALL);
598 s_mars_ineei_INFO7STATE = findstr(data, mars_ineei_INFO7STATE);
599 s_mars_ineei_INFO8POS = findstr(data, mars_ineei_INFO8POS);
600 s_mars_ineei_INFO8CALL = findstr(data, mars_ineei_INFO8CALL);
601 s_mars_ineei_INFO8STATE = findstr(data, mars_ineei_INFO8STATE);
602 s_mars_ineei_INFO9POS = findstr(data, mars_ineei_INFO9POS);
603 s_mars_ineei_INFO9CALL = findstr(data, mars_ineei_INFO9CALL);
604 s_mars_ineei_INFO9STATE = findstr(data, mars_ineei_INFO9STATE);
605 s_mars_ineei_INFO10POS = findstr(data, mars_ineei_INFO10POS);
606 s_mars_ineei_INFO10CALL = findstr(data, mars_ineei_INFO10CALL);
607 s_mars_ineei_INFO10STATE = findstr(data, mars_ineei_INFO10STATE);
608 s_mars_ineei_INCIDENT = findstr(data, mars_ineei_INCIDENT);
609 s_mars_ineei_REF = findstr(data, mars_ineei_REF);
610 s_mars_ineei_STATE = findstr(data, mars_ineei_STATE);
611 s_mars_ineei_1A_INCIDENT = findstr(data, mars_ineei_1A_INCIDENT);
612 s_mars_ineei_1A_LOCATION = findstr(data, mars_ineei_1A_LOCATION);
613 s_mars_ineei_1A_TIME = findstr(data, mars_ineei_1A_TIME);
614 s_mars_ineei_1B_MEDFACSTS = findstr(data, mars_ineei_1B_MEDFACSTS);
615 s_mars_ineei_1C_TRNPSTS = findstr(data, mars_ineei_1C_TRNPSTS);
616 s_mars_ineei_1D_DAMAGE = findstr(data, mars_ineei_1D_DAMAGE);
617 s_mars_ineei_1E_UTILSTS = findstr(data, mars_ineei_1E_UTILSTS);
618 s_mars_ineei_1F_COMMSTS = findstr(data, mars_ineei_1F_COMMSTS);
619 s_mars_ineei_1G_INFOSRC = findstr(data, mars_ineei_1G_INFOSRC);
620 s_mars_ineei_1G_INFOTIME = findstr(data, mars_ineei_1G_INFOTIME);
621 s_mars_ineei_1H_REMARKS = findstr(data, mars_ineei_1H_REMARKS);
622
623 update_mars_ineeiform();
624 }
625
cb_mars_ineei_new()626 void cb_mars_ineei_new()
627 {
628 if (check_mars_ineei_fields()) {
629 if (fl_choice2("Form modified, save?", "No", "Yes", NULL) == 1) {
630 update_header(CHANGED);
631 cb_mars_ineei_save();
632 }
633 }
634 clear_mars_ineei_form();
635 def_mars_ineei_filename = ICS_msg_dir;
636 def_mars_ineei_filename.append("new").append(FMARSINEEI_EXT);
637 show_filename(def_mars_ineei_filename);
638 using_mars_ineei_template = false;
639 }
640
cb_mars_ineei_import()641 void cb_mars_ineei_import()
642 {
643 fl_alert2("Not implemented");
644 }
645
cb_mars_ineei_export()646 void cb_mars_ineei_export()
647 {
648 fl_alert2("Not implemented");
649 }
650
cb_mars_ineei_wrap_import(string wrapfilename,string inpbuffer)651 void cb_mars_ineei_wrap_import(string wrapfilename, string inpbuffer)
652 {
653 clear_mars_ineei_form();
654 read_mars_ineei_buffer(inpbuffer);
655 def_mars_ineei_filename = ICS_msg_dir;
656 def_mars_ineei_filename.append(wrapfilename);
657 show_filename(def_mars_ineei_filename);
658 using_mars_ineei_template = false;
659 }
660
eval_mars_ineei_fsize()661 int eval_mars_ineei_fsize()
662 {
663 Ccrc16 chksum;
664 evalstr.assign("[WRAP:beg][WRAP:lf][WRAP:fn ");
665 evalstr.append(base_mars_ineei_filename).append("]");
666 update_mars_ineei_fields();
667 update_header(FROM);
668 evalstr.append(header("<mars_ineei>"));
669 ineei_buff.clear();
670 make_mars_ineei_buff(true);
671 if (ineei_buff.empty()) return 0;
672 compress_maybe( ineei_buff );
673 evalstr.append( ineei_buff );
674 evalstr.append("[WRAP:chksum ").append(chksum.scrc16(evalstr)).append("][WRAP:end]");
675 return evalstr.length();
676 }
677
cb_mars_ineei_wrap_export()678 void cb_mars_ineei_wrap_export()
679 {
680 if (check_mars_ineei_fields()) {
681 if (fl_choice2("Form modified, save?", "No", "Yes", NULL) == 0)
682 return;
683 update_header(CHANGED);
684 }
685 update_mars_ineei_fields();
686
687 if (base_mars_ineei_filename == string("new").append(FMARSINEEI_EXT) ||
688 base_mars_ineei_filename == string("default").append(FMARSINEEI_EXT) )
689 if (!cb_mars_ineei_save_as()) return;
690
691 string wrapfilename = WRAP_send_dir;
692 wrapfilename.append(base_mars_ineei_filename);
693 wrapfilename.append(".wrap");
694 const char *p = FSEL::saveas(
695 "Save as wrap file",
696 "Wrap file\t*.{wrap,WRAP}",
697 wrapfilename.c_str());
698 if (p) {
699 string pext = fl_filename_ext(p);
700 wrapfilename = p;
701
702 update_header(FROM);
703 ineei_buff.assign(header("<mars_ineei>"));
704 make_mars_ineei_buff(true);
705 export_wrapfile(base_mars_ineei_filename, wrapfilename, ineei_buff, pext != ".wrap");
706
707 ineei_buff.assign(header("<mars_ineei>"));
708 make_mars_ineei_buff(false);
709 write_mars_ineei(def_mars_ineei_filename);
710 }
711 }
712
cb_mars_ineei_wrap_autosend()713 void cb_mars_ineei_wrap_autosend()
714 {
715 if (check_mars_ineei_fields()) {
716 if (fl_choice2("Form modified, save?", "No", "Yes", NULL) == 0)
717 return;
718 update_header(CHANGED);
719 }
720 update_mars_ineei_fields();
721
722 if (base_mars_ineei_filename == string("new").append(FMARSINEEI_EXT) ||
723 base_mars_ineei_filename == string("default").append(FMARSINEEI_EXT) )
724 if (!cb_mars_ineei_save_as()) return;
725
726 update_header(FROM);
727 ineei_buff.assign(header("<mars_ineei>"));
728 make_mars_ineei_buff(true);
729 xfr_via_socket(base_mars_ineei_filename, ineei_buff);
730
731 ineei_buff.assign(header("<mars_ineei>"));
732 make_mars_ineei_buff(false);
733 write_mars_ineei(def_mars_ineei_filename);
734 }
735
cb_mars_ineei_load_template()736 void cb_mars_ineei_load_template()
737 {
738 string def_mars_ineei_filename = def_mars_ineei_TemplateName;
739 const char *p = FSEL::select(
740 "Open template file",
741 string("Template file\t*").append(TMARSINEEI_EXT).c_str(),
742 def_mars_ineei_filename.c_str());
743 if (p) {
744 clear_mars_ineei_form();
745 read_data_file(p);
746 def_mars_ineei_TemplateName = p;
747 show_filename(def_mars_ineei_TemplateName);
748 using_mars_ineei_template = true;
749 }
750 }
751
cb_mars_ineei_save_template()752 void cb_mars_ineei_save_template()
753 {
754 if (!using_mars_ineei_template) {
755 cb_mars_ineei_save_as_template();
756 return;
757 }
758 string def_mars_ineei_filename = def_mars_ineei_TemplateName;
759 const char *p = FSEL::saveas(
760 "Save template file",
761 string("Template file\t*").append(TMARSINEEI_EXT).c_str(),
762 def_mars_ineei_filename.c_str());
763 if (p) {
764 update_header(CHANGED);
765 update_mars_ineei_fields();
766 ineei_buff.assign(header("<mars_ineei>"));
767 make_mars_ineei_buff();
768 write_mars_ineei(p);
769 }
770 }
771
cb_mars_ineei_save_as_template()772 void cb_mars_ineei_save_as_template()
773 {
774 string def_mars_ineei_filename = def_mars_ineei_TemplateName;
775 const char *p = FSEL::saveas(
776 "Save as template file",
777 string("Template file\t*").append(TMARSINEEI_EXT).c_str(),
778 def_mars_ineei_filename.c_str());
779 if (p) {
780 const char *pext = fl_filename_ext(p);
781 def_mars_ineei_TemplateName = p;
782 if (strlen(pext) == 0) def_mars_ineei_TemplateName.append(TMARSINEEI_EXT);
783 remove_spaces_from_filename(def_mars_ineei_TemplateName);
784
785 clear_header();
786 update_header(CHANGED);
787 update_mars_ineei_fields();
788 ineei_buff.assign(header("<mars_ineei>"));
789 make_mars_ineei_buff();
790 write_mars_ineei(def_mars_ineei_TemplateName);
791
792 show_filename(def_mars_ineei_TemplateName);
793 using_mars_ineei_template = true;
794 }
795 }
796
cb_mars_ineei_open()797 void cb_mars_ineei_open()
798 {
799 const char *p = FSEL::select(
800 _("Open data file"),
801 string("ICS-net\t*").append(FMARSINEEI_EXT).c_str(),
802 def_mars_ineei_filename.c_str());
803 if (!p) return;
804 if (strlen(p) == 0) return;
805 clear_mars_ineei_form();
806 read_data_file(p);
807 using_mars_ineei_template = false;
808 def_mars_ineei_filename = p;
809 show_filename(def_mars_ineei_filename);
810 }
811
write_mars_ineei(string s)812 void write_mars_ineei(string s)
813 {
814 FILE *filenet = fopen(s.c_str(), "w");
815 if (!filenet) return;
816 make_mars_ineei_buff();
817 fwrite(ineei_buff.c_str(), ineei_buff.length(), 1, filenet);
818 fclose(filenet);
819 }
820
cb_mars_ineei_save_as()821 bool cb_mars_ineei_save_as()
822 {
823 const char *p;
824 string newfilename;
825
826 string name = named_file();
827 if (!name.empty()) {
828 name.append(FMARSINEEI_EXT);
829 newfilename = ICS_msg_dir;
830 newfilename.append(name);
831 } else
832 newfilename = def_mars_ineei_filename;
833
834 p = FSEL::saveas(
835 _("Save data file"),
836 string("ICS-net\t*").append(FMARSINEEI_EXT).c_str(),
837 newfilename.c_str());
838
839 if (!p) return false;
840 if (strlen(p) == 0) return false;
841
842 if (progStatus.sernbr_fname) update_sernbr();
843
844 const char *pext = fl_filename_ext(p);
845 def_mars_ineei_filename = p;
846 if (strlen(pext) == 0) def_mars_ineei_filename.append(FMARSINEEI_EXT);
847
848 remove_spaces_from_filename(def_mars_ineei_filename);
849
850 update_header(NEW);
851 update_mars_ineei_fields();
852 ineei_buff.assign(header("<mars_ineei>"));
853 make_mars_ineei_buff();
854 write_mars_ineei(def_mars_ineei_filename);
855
856 using_mars_ineei_template = false;
857 show_filename(def_mars_ineei_filename);
858 return true;
859 }
860
cb_mars_ineei_save()861 void cb_mars_ineei_save()
862 {
863 if (base_mars_ineei_filename == string("new").append(FMARSINEEI_EXT) ||
864 base_mars_ineei_filename == string("default").append(FMARSINEEI_EXT) ||
865 using_mars_ineei_template == true) {
866 cb_mars_ineei_save_as();
867 return;
868 }
869 if (check_mars_ineei_fields()) update_header(CHANGED);
870 update_mars_ineei_fields();
871 ineei_buff.assign(header("<mars_ineei>"));
872 make_mars_ineei_buff();
873 write_mars_ineei(def_mars_ineei_filename);
874
875 using_mars_ineei_template = false;
876 }
877
justify_remarks(string instr,int start_count)878 string justify_remarks(string instr, int start_count)
879 {
880 // strip new lines
881 string tmp = instr;
882 size_t nl = 0;
883 while ((nl = tmp.find("\n")) != string::npos)
884 if (nl == tmp.length() -1)
885 tmp.erase(nl,1);
886 else
887 tmp[nl] = ' ';
888 size_t dsp = 0;
889 while ((dsp = tmp.find(" ")) != string::npos)
890 tmp.erase(dsp, 1);
891 while ((dsp = tmp.find(" .")) != string::npos)
892 tmp.erase(dsp, 1);
893
894 // limit line lengths
895 int cc = start_count;
896 size_t sp = 0;
897 while (sp < tmp.length()) {
898 if (tmp[sp] == ' ' && cc == progStatus.charcount) {
899 tmp[sp] = '\n';
900 cc = 0;
901 } else if (cc > progStatus.charcount) { // back up to previous space
902 int n = 0;
903 while (sp && cc && tmp[sp] != '\n') {
904 sp--; cc--;
905 if (++n > 20) { // oops
906 tmp.insert(sp, 1, '\n');
907 cc = 0;
908 } else if (tmp[sp] == ' ') {
909 tmp[sp] = '\n';
910 cc = 0;
911 }
912 }
913 }
914 sp++; cc++;
915 }
916 return tmp;
917 }
918
formated_output(string target)919 string formated_output( string target )
920 {
921 string formnet = target;
922 string temp;
923 string field_str;
924 string to_str = ":to:";
925 string fm_str = ":fm:";
926 string info_str = ":info:";
927 string ref_str = ":1ref:";
928 string onea_str = ":1a:";
929 string oneg_str = ":1g:";
930
931 replacestr(formnet, mars_ineei_DE, s_mars_ineei_DE);
932 replacestr(formnet, mars_ineei_NBR, s_mars_ineei_NBR);
933 replacestr(formnet, mars_ineei_PREC, s_mars_ineei_PREC);
934 replacestr(formnet, mars_ineei_DTG, s_mars_ineei_DTG);
935
936 field_str.clear();
937 if (!s_mars_ineei_FMNAME.empty()) field_str.append(s_mars_ineei_FMNAME).append(" / ");
938 if (!s_mars_ineei_FMCALL.empty()) field_str.append(s_mars_ineei_FMCALL).append(" / ");
939 if (!s_mars_ineei_FMSTATE.empty()) field_str.append(s_mars_ineei_FMSTATE);
940 replacestr(formnet, fm_str, field_str);
941
942 field_str.clear();
943 if (!s_mars_ineei_TOPOS.empty()) field_str.append(s_mars_ineei_TOPOS).append(" / ");
944 if (!s_mars_ineei_TOCALL.empty()) field_str.append(s_mars_ineei_TOCALL).append(" / ");
945 if (!s_mars_ineei_TOSTATE.empty()) field_str.append(s_mars_ineei_TOSTATE);
946 replacestr(formnet, to_str, field_str);
947
948 field_str.clear();
949 if (!s_mars_ineei_INFO1CALL.empty() || !s_mars_ineei_INFO1POS.empty()) {
950 field_str.append("\nINFO: ");
951 if (!s_mars_ineei_INFO1POS.empty()) field_str.append(s_mars_ineei_INFO1POS).append(" / ");
952 field_str.append(s_mars_ineei_INFO1CALL);
953 if (!s_mars_ineei_INFO1STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO1STATE);
954 }
955 if (!s_mars_ineei_INFO2CALL.empty() || !s_mars_ineei_INFO2POS.empty()) {
956 if (field_str.empty()) field_str.append("\nINFO: ");
957 else field_str.append("\n ");
958 if (!s_mars_ineei_INFO2POS.empty()) field_str.append(s_mars_ineei_INFO2POS).append(" / ");
959 field_str.append(s_mars_ineei_INFO2CALL);
960 if (!s_mars_ineei_INFO2STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO2STATE);
961 }
962 if (!s_mars_ineei_INFO3CALL.empty() || !s_mars_ineei_INFO3POS.empty()) {
963 if (field_str.empty()) field_str.append("\nINFO: ");
964 else field_str.append("\n ");
965 if (!s_mars_ineei_INFO3POS.empty()) field_str.append(s_mars_ineei_INFO3POS).append(" / ");
966 field_str.append(s_mars_ineei_INFO3CALL);
967 if (!s_mars_ineei_INFO3STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO3STATE);
968 }
969 if (!s_mars_ineei_INFO4CALL.empty() || !s_mars_ineei_INFO4POS.empty()) {
970 if (field_str.empty()) field_str.append("\nINFO: ");
971 else field_str.append("\n ");
972 if (!s_mars_ineei_INFO4POS.empty()) field_str.append(s_mars_ineei_INFO4POS).append(" / ");
973 field_str.append(s_mars_ineei_INFO4CALL);
974 if (!s_mars_ineei_INFO4STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO4STATE);
975 }
976 if (!s_mars_ineei_INFO5CALL.empty() || !s_mars_ineei_INFO5POS.empty()) {
977 if (field_str.empty()) field_str.append("\nINFO: ");
978 else field_str.append("\n ");
979 if (!s_mars_ineei_INFO5POS.empty()) field_str.append(s_mars_ineei_INFO5POS).append(" / ");
980 field_str.append(s_mars_ineei_INFO5CALL);
981 if (!s_mars_ineei_INFO5STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO5STATE);
982 }
983 if (!s_mars_ineei_INFO6CALL.empty() || !s_mars_ineei_INFO6POS.empty()) {
984 if (field_str.empty()) field_str.append("\nINFO: ");
985 else field_str.append("\n ");
986 if (!s_mars_ineei_INFO6POS.empty()) field_str.append(s_mars_ineei_INFO6POS).append("/");
987 field_str.append(s_mars_ineei_INFO6CALL);
988 if (!s_mars_ineei_INFO6STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO6STATE);
989 }
990 if (!s_mars_ineei_INFO7CALL.empty() || !s_mars_ineei_INFO7POS.empty()) {
991 if (field_str.empty()) field_str.append("\nINFO: ");
992 else field_str.append("\n ");
993 if (!s_mars_ineei_INFO7POS.empty()) field_str.append(s_mars_ineei_INFO7POS).append("/");
994 field_str.append(s_mars_ineei_INFO7CALL);
995 if (!s_mars_ineei_INFO7STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO7STATE);
996 }
997 if (!s_mars_ineei_INFO8CALL.empty() || !s_mars_ineei_INFO8POS.empty()) {
998 if (field_str.empty()) field_str.append("\nINFO: ");
999 else field_str.append("\n ");
1000 if (!s_mars_ineei_INFO8POS.empty()) field_str.append(s_mars_ineei_INFO8POS).append("/");
1001 field_str.append(s_mars_ineei_INFO8CALL);
1002 if (!s_mars_ineei_INFO8STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO8STATE);
1003 }
1004 if (!s_mars_ineei_INFO9CALL.empty() || !s_mars_ineei_INFO9POS.empty()) {
1005 if (field_str.empty()) field_str.append("\nINFO: ");
1006 else field_str.append("\n ");
1007 if (!s_mars_ineei_INFO9POS.empty()) field_str.append(s_mars_ineei_INFO9POS).append("/");
1008 field_str.append(s_mars_ineei_INFO9CALL);
1009 if (!s_mars_ineei_INFO9STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO9STATE);
1010 }
1011 if (!s_mars_ineei_INFO10CALL.empty() || !s_mars_ineei_INFO10POS.empty()) {
1012 if (field_str.empty()) field_str.append("\nINFO: ");
1013 else field_str.append("\n ");
1014 if (!s_mars_ineei_INFO10POS.empty()) field_str.append(s_mars_ineei_INFO10POS).append("/");
1015 field_str.append(s_mars_ineei_INFO10CALL);
1016 if (!s_mars_ineei_INFO10STATE.empty()) field_str.append(" / ").append(s_mars_ineei_INFO10STATE);
1017 }
1018 replacestr(formnet, info_str, field_str);
1019
1020 replacestr(formnet, mars_ineei_INCIDENT, s_mars_ineei_INCIDENT);
1021 replacestr(formnet, mars_ineei_INCIDENT, s_mars_ineei_INCIDENT); // 2 in form
1022
1023 field_str.clear();
1024 if (!s_mars_ineei_REF.empty()) field_str.append(s_mars_ineei_REF);
1025 if (!s_mars_ineei_STATE.empty()) field_str.append(" ").append(s_mars_ineei_STATE);
1026 temp = justify_remarks(field_str, strlen("1. REF EVENT IDENTIFIER: "));
1027 replacestr(formnet, ref_str, temp);
1028
1029 field_str.clear();
1030 if (!s_mars_ineei_1A_INCIDENT.empty()) field_str.append(s_mars_ineei_1A_INCIDENT);
1031 if (!s_mars_ineei_1A_LOCATION.empty()) field_str.append(s_mars_ineei_1A_LOCATION);
1032 if (!s_mars_ineei_1A_TIME.empty()) field_str.append(s_mars_ineei_1A_TIME);
1033 temp = justify_remarks(field_str, strlen("A. INCIDENT LOCATION TIME: "));
1034 replacestr(formnet, onea_str, temp);
1035
1036 temp = justify_remarks(s_mars_ineei_1B_MEDFACSTS, strlen("B. EMERGENCY MEDICAL: "));
1037 replacestr(formnet, mars_ineei_1B_MEDFACSTS, temp);
1038 temp = justify_remarks(s_mars_ineei_1C_TRNPSTS, strlen("C. LOCAL TRANSPORTATION: "));
1039 replacestr(formnet, mars_ineei_1C_TRNPSTS, temp);
1040 temp = justify_remarks(s_mars_ineei_1D_DAMAGE, strlen("D. GENERAL DAMAGE DESCRIPTION: "));
1041 replacestr(formnet, mars_ineei_1D_DAMAGE, temp);
1042 temp = justify_remarks(s_mars_ineei_1E_UTILSTS, strlen("E. UTILITY STATUS: "));
1043 replacestr(formnet, mars_ineei_1E_UTILSTS, temp);
1044 temp = justify_remarks(s_mars_ineei_1F_COMMSTS, strlen("F. COMMUNICATIONS STATUS: "));
1045 replacestr(formnet, mars_ineei_1F_COMMSTS, temp);
1046
1047 field_str.clear();
1048 if (!s_mars_ineei_1G_INFOSRC.empty()) field_str.append(s_mars_ineei_1G_INFOSRC);
1049 if (!s_mars_ineei_1G_INFOTIME.empty()) field_str.append(" ").append(s_mars_ineei_1G_INFOTIME);
1050 temp = justify_remarks(field_str, strlen("G. SOURCE OF INFO: "));
1051 replacestr(formnet, oneg_str, temp);
1052
1053 temp = justify_remarks(s_mars_ineei_1H_REMARKS, strlen("H. REMARKS: "));
1054 replacestr(formnet, mars_ineei_1H_REMARKS, temp);
1055 return formnet;
1056 }
1057
cb_mars_ineei_html()1058 void cb_mars_ineei_html()
1059 {
1060 string fname_name = fl_filename_name(def_mars_ineei_filename.c_str());
1061 size_t p = fname_name.rfind('.');
1062 if (p != string::npos) fname_name.erase(p);
1063
1064 update_mars_ineei_fields();
1065
1066 string mars_ineei_fname = ICS_dir;
1067 mars_ineei_fname.append(fname_name);
1068 mars_ineei_fname.append(".html");
1069
1070 string textout = formated_output( mars_ineei_html_template );
1071
1072 FILE *filenet = fopen(mars_ineei_fname.c_str(), "w");
1073 fprintf(filenet,"%s", textout.c_str());
1074 fclose(filenet);
1075
1076 open_url(mars_ineei_fname.c_str());
1077 }
1078
cb_mars_ineei_textout()1079 void cb_mars_ineei_textout()
1080 {
1081 string mars_ineei_fname = ICS_dir;
1082 mars_ineei_fname.append("mars_ineei.txt");
1083
1084 update_mars_ineei_fields();
1085
1086 string textout = formated_output( mars_ineei_text_template );
1087
1088 FILE *filenet = fopen(mars_ineei_fname.c_str(), "w");
1089 fprintf(filenet,"%s", textout.c_str());
1090 fclose(filenet);
1091
1092 open_url(mars_ineei_fname.c_str());
1093 }
1094
1095 /*
1096 ========================================================================
1097 DE (CALL SIGN MSG NUMBER)
1098 (PRECEDENCE) (DTG OF MSG IN Z TIME FORMAT: DYTTTTZ MON YEAR)
1099 FM (LAST NAME/CALL SIGN ST OF SENDING STATION)
1100 TO RD/AAA1RD MA (POSITION/CALLSIGN ST OF RECIPIENT)
1101 INFO REOO/AAM1RE NH (POSITION/CALLSIGN ST OF INFO COPY)
1102 INFO (POSITION/CALL SIGN ST OF INFO COPY STATION)
1103 BT
1104 (MARS EXERCISE OR ACTUAL INCIDENT)
1105 SUBJECT: IN/EEI REPORT
1106 1. REF (USE APPOPRIATE EVENT IDENTIFIER) / STATE
1107 A. (INCIDENT & LOCATION & TIME)
1108 B. (EMERGENCY MEDICAL FACILITY STATUS)
1109 C. (LOCAL TRANSPORTATION STATUS)
1110 D. (GENERAL DAMAGE CHARACTERISTICS)
1111 E. (AREA UTILITY STATUS)
1112 F. (COMMUNICATION STATUS)
1113 G. (INFORMATION SOURCE/TIME)
1114 H. (1H_REMARKS)
1115 (MARS EXERCISE OR ACTUAL INCIDENT)
1116 BT
1117 /EX
1118 NNNN
1119 ========================================================================
1120 DE AFA5FE/T NR 1
1121 R 061535Z OCT 2012
1122 FM DAVE ANTRY / AFA5FE/T IL
1123 TO: AFN2EC NY
1124 INFO: AFD4EC SC
1125 AFE5EC WI
1126 AFF5IL IL
1127 BT
1128 REF. MARS EXERCISE
1129 SUBJ. EEI REPORT
1130 1. REF EVENT IDENTIFIER: BLACK ICE
1131 A. INCIDENT LOCATION TIME: ST. CLAIR COUNTY ILLINOIS
1132 B. EMERGENCY MEDICAL: NOT AFFECTED
1133 C. LOCAL TRANSPORTATION: ALL SECONDARY ROADS ICE COVERED AND IMPASSABLE
1134 D. GENERAL DAMAGE DESCRIPTION: MAJOR WINTER ICE STORM.
1135 E. UTILITY STATUS: LOCALIZED POWER OUTAGES ARE ALREADY OCCURING.
1136 F. COMMUNICATIONS STATUS: OPERATIONAL
1137 G. SOURCE OF INFO: ST. CLAIR COUNTY EMERGENCY SERVICES DISASTER AGENCY
1138 OFFICAL
1139 H. REMARKS: SECONDARY ROADS IMPASSABLE DUE TO PLOWS CONCENTRATING ON MAIN
1140 HIGHWAYS. EXPECT MAIN HIGHWAYS TO BECOME IMPASSABLE AND MAJOR POWER OUTAGES
1141 PUTTING MOST COMMUNICATIONS CENTERS ON EMERGENCY BACKUP POWER IF FORECASTED
1142 ICE ACCUMLATIONS OF UP TO 2 INCHES DURING OVERNIGHT HOURS OCCURS.
1143 MARS EXERCISE
1144 BT
1145 NNNN
1146 */
1147