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 // ---------------------------------------------------------------------
76 // ics 203 field variables and template variables
77 // ---------------------------------------------------------------------
78 
79 string ics203_incident					= ":inc:";
80 string ics203_date						= ":dat:";
81 string ics203_time						= ":tim:";
82 string ics203_op_period					= ":opp:";
83 string ics203_incident_commander		= ":icc:";
84 string ics203_incident_deputy			= ":icd:";
85 string ics203_incident_safety_officer	= ":ics:";
86 string ics203_incident_info_officer		= ":ici:";
87 string ics203_liaison_officer			= ":icl:";
88 string ics203_prepared_by				= ":pre:";
89 string ics203_agency					= ":agency[n]:"; // 7
90 string ics203_agency_name				= ":agency_name[n]:"; // 7
91 string ics203_planning_chief			= ":planning_chief:";
92 string ics203_planning_deputy			= ":planning_deputy:";
93 string ics203_resources_unit			= ":resources_unit:";
94 string ics203_situation_unit			= ":situation_unit:";
95 string ics203_documentation_unit		= ":documentation_unit:";
96 string ics203_demobilization_unit		= ":demobilization_unit:";
97 string ics203_tech_spc					= ":tech_spc[n]:"; // 3
98 string ics203_logistics_chief			= ":logistics_chief:";
99 string ics203_logistics_deputy			= ":logistics_deputy:";
100 string ics203_support_director			= ":support_director:";
101 string ics203_supply_unit				= ":supply_unit:";
102 string ics203_facilities_unit			= ":facilities_unit:";
103 string ics203_ground_support			= ":ground_support:";
104 string ics203_service_director			= ":service_director:";
105 string ics203_communications_unit		= ":communications_unit:";
106 string ics203_medical_unit				= ":medical_unit:";
107 string ics203_food_unit					= ":food_unit:";
108 string ics203_ops_chief					= ":ops_chief:";
109 string ics203_ops_deputy				= ":ops_deputy:";
110 string ics203_b1_director				= ":b1_director:";
111 string ics203_b1_deputy					= ":b1_deputy:";
112 string ics203_b1_div					= ":b1_div[n]:"; // 4
113 string ics203_b1_grp					= ":b1_grp[n]:"; // 4
114 string ics203_b2_director				= ":b2_director:";
115 string ics203_b2_deputy					= ":b2_deputy:";
116 string ics203_b2_div					= ":b2_div[n]:"; // 4
117 string ics203_b2_grp					= ":b2_grp[n]:"; // 4
118 string ics203_b3_director				= ":b3_director:";
119 string ics203_b3_deputy					= ":b3_deputy:";
120 string ics203_b3_div					= ":b3_div[n]:"; // 4
121 string ics203_b3_grp					= ":b3_grp[n]:"; // 4
122 string ics203_air_ops_br_dir			= ":air_ops_br_dir:";
123 string ics203_air_tactical_group_sup	= ":air_tactical_group_sup:";
124 string ics203_air_support_group_sup		= ":air_support_group_sup:";
125 string ics203_helicopter_coordinator	= ":helicopter_coordinator:";
126 string ics203_air_tanker_fixed_wing		= ":air_tanker_fixed_wing:";
127 string ics203_finance_chief				= ":finance_chief:";
128 string ics203_finance_deputy			= ":finance_deputy:";
129 string ics203_time_unit					= ":time_unit:";
130 string ics203_procurement_unit			= ":procurement_unit:";
131 string ics203_claims_unit				= ":claims_unit:";
132 string ics203_cost_unit					= ":cost_unit:";
133 
134 string s203_incident;
135 string s203_date;
136 string s203_time;
137 string s203_op_period;
138 string s203_incident_commander;
139 string s203_incident_deputy;
140 string s203_incident_safety_officer;
141 string s203_incident_info_officer;
142 string s203_liaison_officer;
143 string s203_prepared_by;
144 string s203_agency[7];
145 string s203_agency_name[7];
146 string s203_planning_chief;
147 string s203_planning_deputy;
148 string s203_resources_unit;
149 string s203_situation_unit;
150 string s203_documentation_unit;
151 string s203_demobilization_unit;
152 string s203_tech_spc[3];
153 string s203_logistics_chief;
154 string s203_logistics_deputy;
155 string s203_support_director;
156 string s203_supply_unit;
157 string s203_facilities_unit;
158 string s203_ground_support;
159 string s203_service_director;
160 string s203_communications_unit;
161 string s203_medical_unit;
162 string s203_food_unit;
163 string s203_ops_chief;
164 string s203_ops_deputy;
165 string s203_b1_director;
166 string s203_b1_deputy;
167 string s203_b1_div[5];
168 string s203_b1_grp[5];
169 string s203_b2_director;
170 string s203_b2_deputy;
171 string s203_b2_div[5];
172 string s203_b2_grp[5];
173 string s203_b3_director;
174 string s203_b3_deputy;
175 string s203_b3_div[5];
176 string s203_b3_grp[5];
177 string s203_air_ops_br_dir;
178 string s203_air_tactical_group_sup;
179 string s203_air_support_group_sup;
180 string s203_helicopter_coordinator;
181 string s203_air_tanker_fixed_wing;
182 string s203_finance_chief;
183 string s203_finance_deputy;
184 string s203_time_unit;
185 string s203_procurement_unit;
186 string s203_claims_unit;
187 string s203_cost_unit;
188 
189 // =====================================================================
190 
191 string buff203;
192 string def_203_filename = "";
193 string base_203_filename = "";
194 string def_203_TemplateName = "";
195 bool using_ics203_template = false;
196 
cb_203_set_date()197 void cb_203_set_date()
198 {
199 	txt_203_date->value(szDate(progStatus.dtformat));
200 }
201 
cb_203_set_time()202 void cb_203_set_time()
203 {
204 	txt_203_time->value(szTime(progStatus.UTC));
205 }
206 
clear_203fields()207 void clear_203fields()
208 {
209 	s203_incident.clear();
210 	s203_date.clear();
211 	s203_time.clear();
212 	s203_op_period.clear();
213 	s203_incident_commander.clear();
214 	s203_incident_deputy.clear();
215 	s203_incident_safety_officer.clear();
216 	s203_incident_info_officer.clear();
217 	s203_liaison_officer.clear();
218 	s203_prepared_by.clear();
219 	s203_planning_chief.clear();
220 	s203_planning_deputy.clear();
221 	s203_resources_unit.clear();
222 	s203_situation_unit.clear();
223 	s203_documentation_unit.clear();
224 	s203_demobilization_unit.clear();
225 	s203_logistics_chief.clear();
226 	s203_logistics_deputy.clear();
227 	s203_support_director.clear();
228 	s203_supply_unit.clear();
229 	s203_facilities_unit.clear();
230 	s203_ground_support.clear();
231 	s203_service_director.clear();
232 	s203_communications_unit.clear();
233 	s203_medical_unit.clear();
234 	s203_food_unit.clear();
235 	s203_ops_chief.clear();
236 	s203_ops_deputy.clear();
237 	s203_b1_director.clear();
238 	s203_b1_deputy.clear();
239 	s203_b2_director.clear();
240 	s203_b2_deputy.clear();
241 	s203_b3_director.clear();
242 	s203_b3_deputy.clear();
243 	s203_air_ops_br_dir.clear();
244 	s203_air_tactical_group_sup.clear();
245 	s203_air_support_group_sup.clear();
246 	s203_helicopter_coordinator.clear();
247 	s203_air_tanker_fixed_wing.clear();
248 	s203_finance_chief.clear();
249 	s203_finance_deputy.clear();
250 	s203_time_unit.clear();
251 	s203_procurement_unit.clear();
252 	s203_claims_unit.clear();
253 	s203_cost_unit.clear();
254 
255 	for (int i = 0; i < 7; i++) {
256 		s203_agency[i].clear();
257 		s203_agency_name[i].clear();
258 	}
259 	for (int i = 0; i < 3; i++) {
260 		s203_tech_spc[i].clear();
261 	}
262 	for (int i = 0; i < 5; i++) {
263 		s203_b1_div[i].clear();
264 		s203_b1_grp[i].clear();
265 		s203_b2_div[i].clear();
266 		s203_b2_grp[i].clear();
267 		s203_b3_div[i].clear();
268 		s203_b3_grp[i].clear();
269 	}
270 }
271 
check_203fields()272 bool check_203fields() {
273 	if (s203_incident != txt_203_incident->value())
274 		return true;
275 	if (s203_date != txt_203_date->value())
276 		return true;
277 	if (s203_time != txt_203_time->value())
278 		return true;
279 	if (s203_op_period != txt_203_op_period->value())
280 		return true;
281 	if (s203_incident_commander != txt_203_incident_commander->value())
282 		return true;
283 	if (s203_incident_deputy != txt_203_incident_deputy->value())
284 		return true;
285 	if (s203_incident_safety_officer != txt_203_incident_safety_officer->value())
286 		return true;
287 	if (s203_incident_info_officer != txt_203_incident_info_officer->value())
288 		return true;
289 	if (s203_liaison_officer != txt_203_liaison_officer->value())
290 		return true;
291 	if (s203_prepared_by != txt_203_prepared_by->value())
292 		return true;
293 	if (s203_planning_chief != txt_203_planning_chief->value())
294 		return true;
295 	if (s203_planning_deputy != txt_203_planning_deputy->value())
296 		return true;
297 	if (s203_resources_unit != txt_203_resources_unit->value())
298 		return true;
299 	if (s203_situation_unit != txt_203_situation_unit->value())
300 		return true;
301 	if (s203_documentation_unit != txt_203_documentation_unit->value())
302 		return true;
303 	if (s203_demobilization_unit != txt_203_demobilization_unit->value())
304 		return true;
305 	if (s203_logistics_chief != txt_203_logistics_chief->value())
306 		return true;
307 	if (s203_logistics_deputy != txt_203_logistics_deputy->value())
308 		return true;
309 	if (s203_support_director != txt_203_support_director->value())
310 		return true;
311 	if (s203_supply_unit != txt_203_supply_unit->value())
312 		return true;
313 	if (s203_facilities_unit != txt_203_facilities_unit->value())
314 		return true;
315 	if (s203_ground_support != txt_203_ground_support->value())
316 		return true;
317 	if (s203_service_director != txt_203_service_director->value())
318 		return true;
319 	if (s203_communications_unit != txt_203_communications_unit->value())
320 		return true;
321 	if (s203_medical_unit != txt_203_medical_unit->value())
322 		return true;
323 	if (s203_food_unit != txt_203_food_unit->value())
324 		return true;
325 	if (s203_ops_chief != txt_203_ops_chief->value())
326 		return true;
327 	if (s203_ops_deputy != txt_203_ops_deputy->value())
328 		return true;
329 	if (s203_b1_director != txt_203_b1_director->value())
330 		return true;
331 	if (s203_b1_deputy != txt_203_b1_deputy->value())
332 		return true;
333 	if (s203_b2_director != txt_203_b2_director->value())
334 		return true;
335 	if (s203_b2_deputy != txt_203_b2_deputy->value())
336 		return true;
337 	if (s203_b3_director != txt_203_b3_director->value())
338 		return true;
339 	if (s203_b3_deputy != txt_203_b3_deputy->value())
340 		return true;
341 	if (s203_air_ops_br_dir != txt_203_air_ops_br_dir->value())
342 		return true;
343 	if (s203_air_tactical_group_sup != txt_203_air_tactical_group_sup->value())
344 		return true;
345 	if (s203_air_support_group_sup != txt_203_air_support_group_sup->value())
346 		return true;
347 	if (s203_helicopter_coordinator != txt_203_helicopter_coordinator->value())
348 		return true;
349 	if (s203_air_tanker_fixed_wing != txt_203_air_tanker_fixed_wing->value())
350 		return true;
351 	if (s203_finance_chief != txt_203_finance_chief->value())
352 		return true;
353 	if (s203_finance_deputy != txt_203_finance_deputy->value())
354 		return true;
355 	if (s203_time_unit != txt_203_time_unit->value())
356 		return true;
357 	if (s203_procurement_unit != txt_203_procurement_unit->value())
358 		return true;
359 	if (s203_claims_unit != txt_203_claims_unit->value())
360 		return true;
361 	if (s203_cost_unit != txt_203_cost_unit->value())
362 		return true;
363 
364 	for (int i = 0; i < 7; i++) {
365 		if (s203_agency[i] != txt_203_agency[i]->value())
366 			return true;
367 		if (s203_agency_name[i] != txt_203_agency_name[i]->value())
368 			return true;
369 	}
370 
371 	for (int i = 0; i < 3; i++) {
372 		if (s203_tech_spc[i] != txt_203_tech_spc[i]->value())
373 			return true;
374 	}
375 
376 	for (int i = 0; i < 5; i++) {
377 		if (s203_b1_div[i] != txt_203_b1_div[i]->value())
378 			return true;
379 		if (s203_b1_grp[i] != txt_203_b1_grp[i]->value())
380 			return true;
381 		if (s203_b2_div[i] != txt_203_b2_div[i]->value())
382 			return true;
383 		if (s203_b2_grp[i] != txt_203_b2_grp[i]->value())
384 			return true;
385 		if (s203_b3_div[i] != txt_203_b3_div[i]->value())
386 			return true;
387 		if (s203_b3_grp[i] != txt_203_b3_grp[i]->value())
388 			return true;
389 	}
390 	return false;
391 }
392 
update_203fields()393 void update_203fields()
394 {
395 	s203_incident = txt_203_incident->value();
396 	s203_date = txt_203_date->value();
397 	s203_time = txt_203_time->value();
398 	s203_op_period = txt_203_op_period->value();
399 	s203_incident_commander = txt_203_incident_commander->value();
400 	s203_incident_deputy = txt_203_incident_deputy->value();
401 	s203_incident_safety_officer = txt_203_incident_safety_officer->value();
402 	s203_incident_info_officer = txt_203_incident_info_officer->value();
403 	s203_liaison_officer = txt_203_liaison_officer->value();
404 	s203_prepared_by = txt_203_prepared_by->value();
405 	s203_planning_chief = txt_203_planning_chief->value();
406 	s203_planning_deputy = txt_203_planning_deputy->value();
407 	s203_resources_unit = txt_203_resources_unit->value();
408 	s203_situation_unit = txt_203_situation_unit->value();
409 	s203_documentation_unit = txt_203_documentation_unit->value();
410 	s203_demobilization_unit = txt_203_demobilization_unit->value();
411 	s203_logistics_chief = txt_203_logistics_chief->value();
412 	s203_logistics_deputy = txt_203_logistics_deputy->value();
413 	s203_support_director = txt_203_support_director->value();
414 	s203_supply_unit = txt_203_supply_unit->value();
415 	s203_facilities_unit = txt_203_facilities_unit->value();
416 	s203_ground_support = txt_203_ground_support->value();
417 	s203_service_director = txt_203_service_director->value();
418 	s203_communications_unit = txt_203_communications_unit->value();
419 	s203_medical_unit = txt_203_medical_unit->value();
420 	s203_food_unit = txt_203_food_unit->value();
421 	s203_ops_chief = txt_203_ops_chief->value();
422 	s203_ops_deputy = txt_203_ops_deputy->value();
423 	s203_b1_director = txt_203_b1_director->value();
424 	s203_b1_deputy = txt_203_b1_deputy->value();
425 	s203_b2_director = txt_203_b2_director->value();
426 	s203_b2_deputy = txt_203_b2_deputy->value();
427 	s203_b3_director = txt_203_b3_director->value();
428 	s203_b3_deputy = txt_203_b3_deputy->value();
429 	s203_air_ops_br_dir = txt_203_air_ops_br_dir->value();
430 	s203_air_tactical_group_sup = txt_203_air_tactical_group_sup->value();
431 	s203_air_support_group_sup = txt_203_air_support_group_sup->value();
432 	s203_helicopter_coordinator = txt_203_helicopter_coordinator->value();
433 	s203_air_tanker_fixed_wing = txt_203_air_tanker_fixed_wing->value();
434 	s203_finance_chief = txt_203_finance_chief->value();
435 	s203_finance_deputy = txt_203_finance_deputy->value();
436 	s203_time_unit = txt_203_time_unit->value();
437 	s203_procurement_unit = txt_203_procurement_unit->value();
438 	s203_claims_unit = txt_203_claims_unit->value();
439 	s203_cost_unit = txt_203_cost_unit->value();
440 
441 	for (int i = 0; i < 7; i++) {
442 		s203_agency[i] = txt_203_agency[i]->value();
443 		s203_agency_name[i] = txt_203_agency_name[i]->value();
444 	}
445 
446 	for (int i = 0; i < 3; i++) {
447 		s203_tech_spc[i] = txt_203_tech_spc[i]->value();
448 	}
449 
450 	for (int i = 0; i < 5; i++) {
451 		s203_b1_div[i] = txt_203_b1_div[i]->value();
452 		s203_b1_grp[i] = txt_203_b1_grp[i]->value();
453 		s203_b2_div[i] = txt_203_b2_div[i]->value();
454 		s203_b2_grp[i] = txt_203_b2_grp[i]->value();
455 		s203_b3_div[i] = txt_203_b3_div[i]->value();
456 		s203_b3_grp[i] = txt_203_b3_grp[i]->value();
457 	}
458 }
459 
update_203form()460 void update_203form()
461 {
462 	txt_203_incident->value(s203_incident.c_str());
463 	txt_203_date->value(s203_date.c_str());
464 	txt_203_time->value(s203_time.c_str());
465 	txt_203_op_period->value(s203_op_period.c_str());
466 	txt_203_incident_commander->value(s203_incident_commander.c_str());
467 	txt_203_incident_deputy->value(s203_incident_deputy.c_str());
468 	txt_203_incident_safety_officer->value(s203_incident_safety_officer.c_str());
469 	txt_203_incident_info_officer->value(s203_incident_info_officer.c_str());
470 	txt_203_liaison_officer->value(s203_liaison_officer.c_str());
471 	txt_203_prepared_by->value(s203_prepared_by.c_str());
472 	txt_203_planning_chief->value(s203_planning_chief.c_str());
473 	txt_203_planning_deputy->value(s203_planning_deputy.c_str());
474 	txt_203_resources_unit->value(s203_resources_unit.c_str());
475 	txt_203_situation_unit->value(s203_situation_unit.c_str());
476 	txt_203_documentation_unit->value(s203_documentation_unit.c_str());
477 	txt_203_demobilization_unit->value(s203_demobilization_unit.c_str());
478 	txt_203_logistics_chief->value(s203_logistics_chief.c_str());
479 	txt_203_logistics_deputy->value(s203_logistics_deputy.c_str());
480 	txt_203_support_director->value(s203_support_director.c_str());
481 	txt_203_supply_unit->value(s203_supply_unit.c_str());
482 	txt_203_facilities_unit->value(s203_facilities_unit.c_str());
483 	txt_203_ground_support->value(s203_ground_support.c_str());
484 	txt_203_service_director->value(s203_service_director.c_str());
485 	txt_203_communications_unit->value(s203_communications_unit.c_str());
486 	txt_203_medical_unit->value(s203_medical_unit.c_str());
487 	txt_203_food_unit->value(s203_food_unit.c_str());
488 	txt_203_ops_chief->value(s203_ops_chief.c_str());
489 	txt_203_ops_deputy->value(s203_ops_deputy.c_str());
490 	txt_203_b1_director->value(s203_b1_director.c_str());
491 	txt_203_b1_deputy->value(s203_b1_deputy.c_str());
492 	txt_203_b2_director->value(s203_b2_director.c_str());
493 	txt_203_b2_deputy->value(s203_b2_deputy.c_str());
494 	txt_203_b3_director->value(s203_b3_director.c_str());
495 	txt_203_b3_deputy->value(s203_b3_deputy.c_str());
496 	txt_203_air_ops_br_dir->value(s203_air_ops_br_dir.c_str());
497 	txt_203_air_tactical_group_sup->value(s203_air_tactical_group_sup.c_str());
498 	txt_203_air_support_group_sup->value(s203_air_support_group_sup.c_str());
499 	txt_203_helicopter_coordinator->value(s203_helicopter_coordinator.c_str());
500 	txt_203_air_tanker_fixed_wing->value(s203_air_tanker_fixed_wing.c_str());
501 	txt_203_finance_chief->value(s203_finance_chief.c_str());
502 	txt_203_finance_deputy->value(s203_finance_deputy.c_str());
503 	txt_203_time_unit->value(s203_time_unit.c_str());
504 	txt_203_procurement_unit->value(s203_procurement_unit.c_str());
505 	txt_203_claims_unit->value(s203_claims_unit.c_str());
506 	txt_203_cost_unit->value(s203_cost_unit.c_str());
507 
508 	for (int i = 0; i < 7; i++) {
509 		txt_203_agency[i]->value(s203_agency[i].c_str());
510 		txt_203_agency_name[i]->value(s203_agency_name[i].c_str());
511 	}
512 	for (int i = 0; i < 3; i++) {
513 		txt_203_tech_spc[i]->value(s203_tech_spc[i].c_str());
514 	}
515 	for (int i = 0; i < 5; i++) {
516 		txt_203_b1_div[i]->value(s203_b1_div[i].c_str());
517 		txt_203_b1_grp[i]->value(s203_b1_grp[i].c_str());
518 		txt_203_b2_div[i]->value(s203_b2_div[i].c_str());
519 		txt_203_b2_grp[i]->value(s203_b2_grp[i].c_str());
520 		txt_203_b3_div[i]->value(s203_b3_div[i].c_str());
521 		txt_203_b3_grp[i]->value(s203_b3_grp[i].c_str());
522 	}
523 }
524 
clear_203_form()525 void clear_203_form()
526 {
527 	clear_203fields();
528 
529 	txt_203_incident->value("");
530 	txt_203_date->value("");
531 	txt_203_time->value("");
532 	txt_203_op_period->value("");
533 	txt_203_incident_commander->value("");
534 	txt_203_incident_deputy->value("");
535 	txt_203_incident_safety_officer->value("");
536 	txt_203_incident_info_officer->value("");
537 	txt_203_liaison_officer->value("");
538 	txt_203_prepared_by->value("");
539 	txt_203_planning_chief->value("");
540 	txt_203_planning_deputy->value("");
541 	txt_203_resources_unit->value("");
542 	txt_203_situation_unit->value("");
543 	txt_203_documentation_unit->value("");
544 	txt_203_demobilization_unit->value("");
545 	txt_203_logistics_chief->value("");
546 	txt_203_logistics_deputy->value("");
547 	txt_203_support_director->value("");
548 	txt_203_supply_unit->value("");
549 	txt_203_facilities_unit->value("");
550 	txt_203_ground_support->value("");
551 	txt_203_service_director->value("");
552 	txt_203_communications_unit->value("");
553 	txt_203_medical_unit->value("");
554 	txt_203_food_unit->value("");
555 	txt_203_ops_chief->value("");
556 	txt_203_ops_deputy->value("");
557 	txt_203_b1_director->value("");
558 	txt_203_b1_deputy->value("");
559 	txt_203_b2_director->value("");
560 	txt_203_b2_deputy->value("");
561 	txt_203_b3_director->value("");
562 	txt_203_b3_deputy->value("");
563 	txt_203_air_ops_br_dir->value("");
564 	txt_203_air_tactical_group_sup->value("");
565 	txt_203_air_support_group_sup->value("");
566 	txt_203_helicopter_coordinator->value("");
567 	txt_203_air_tanker_fixed_wing->value("");
568 	txt_203_finance_chief->value("");
569 	txt_203_finance_deputy->value("");
570 	txt_203_time_unit->value("");
571 	txt_203_procurement_unit->value("");
572 	txt_203_claims_unit->value("");
573 	txt_203_cost_unit->value("");
574 
575 	for (int i = 0; i < 7; i++) {
576 		txt_203_agency[i]->value("");
577 		txt_203_agency_name[i]->value("");
578 	}
579 	for (int i = 0; i < 3; i++) {
580 		txt_203_tech_spc[i]->value("");
581 	}
582 	for (int i = 0; i < 5; i++) {
583 		txt_203_b1_div[i]->value("");
584 		txt_203_b1_grp[i]->value("");
585 		txt_203_b2_div[i]->value("");
586 		txt_203_b2_grp[i]->value("");
587 		txt_203_b3_div[i]->value("");
588 		txt_203_b3_grp[i]->value("");
589 	}
590 }
591 
ics_n(string & subst,int n)592 string &ics_n(string & subst, int n)
593 {
594 	static string garbage = "#$^*!";
595 	size_t pos = subst.find("[");
596 	if (pos == string::npos) return garbage;
597 	pos++;
598 	subst[pos] = '0' + n;
599 	return subst;
600 }
601 
make_buff203(bool compress=false)602 void make_buff203(bool compress = false)
603 {
604 	string mbuff;
605 	mbuff.clear();
606 	mbuff.append( lineout( ics203_incident, s203_incident ) );
607 	mbuff.append( lineout( ics203_date, s203_date ) );
608 	mbuff.append( lineout( ics203_time, s203_time ) );
609 	mbuff.append( lineout( ics203_op_period, s203_op_period ) );
610 	mbuff.append( lineout( ics203_incident_commander, s203_incident_commander ) );
611 	mbuff.append( lineout( ics203_incident_deputy, s203_incident_deputy ) );
612 	mbuff.append( lineout( ics203_incident_safety_officer, s203_incident_safety_officer ) );
613 	mbuff.append( lineout( ics203_incident_info_officer, s203_incident_info_officer ) );
614 	mbuff.append( lineout( ics203_liaison_officer, s203_liaison_officer ) );
615 	mbuff.append( lineout( ics203_prepared_by, s203_prepared_by ) );
616 	mbuff.append( lineout( ics203_planning_chief, s203_planning_chief ) );
617 	mbuff.append( lineout( ics203_planning_deputy, s203_planning_deputy ) );
618 	mbuff.append( lineout( ics203_resources_unit, s203_resources_unit ) );
619 	mbuff.append( lineout( ics203_situation_unit, s203_situation_unit ) );
620 	mbuff.append( lineout( ics203_documentation_unit, s203_documentation_unit ) );
621 	mbuff.append( lineout( ics203_demobilization_unit, s203_demobilization_unit ) );
622 	mbuff.append( lineout( ics203_logistics_chief, s203_logistics_chief ) );
623 	mbuff.append( lineout( ics203_logistics_deputy, s203_logistics_deputy ) );
624 	mbuff.append( lineout( ics203_support_director, s203_support_director ) );
625 	mbuff.append( lineout( ics203_supply_unit, s203_supply_unit ) );
626 	mbuff.append( lineout( ics203_facilities_unit, s203_facilities_unit ) );
627 	mbuff.append( lineout( ics203_ground_support, s203_ground_support ) );
628 	mbuff.append( lineout( ics203_service_director, s203_service_director ) );
629 	mbuff.append( lineout( ics203_communications_unit, s203_communications_unit ) );
630 	mbuff.append( lineout( ics203_medical_unit, s203_medical_unit ) );
631 	mbuff.append( lineout( ics203_food_unit, s203_food_unit ) );
632 	mbuff.append( lineout( ics203_ops_chief, s203_ops_chief ) );
633 	mbuff.append( lineout( ics203_ops_deputy, s203_ops_deputy ) );
634 	mbuff.append( lineout( ics203_b1_director, s203_b1_director ) );
635 	mbuff.append( lineout( ics203_b1_deputy, s203_b1_deputy ) );
636 	mbuff.append( lineout( ics203_b2_director, s203_b2_director ) );
637 	mbuff.append( lineout( ics203_b2_deputy, s203_b2_deputy ) );
638 	mbuff.append( lineout( ics203_b3_director, s203_b3_director ) );
639 	mbuff.append( lineout( ics203_b3_deputy, s203_b3_deputy ) );
640 	mbuff.append( lineout( ics203_air_ops_br_dir, s203_air_ops_br_dir ) );
641 	mbuff.append( lineout( ics203_air_tactical_group_sup, s203_air_tactical_group_sup ) );
642 	mbuff.append( lineout( ics203_air_support_group_sup, s203_air_support_group_sup ) );
643 	mbuff.append( lineout( ics203_helicopter_coordinator, s203_helicopter_coordinator ) );
644 	mbuff.append( lineout( ics203_air_tanker_fixed_wing, s203_air_tanker_fixed_wing ) );
645 	mbuff.append( lineout( ics203_finance_chief, s203_finance_chief ) );
646 	mbuff.append( lineout( ics203_finance_deputy, s203_finance_deputy ) );
647 	mbuff.append( lineout( ics203_time_unit, s203_time_unit ) );
648 	mbuff.append( lineout( ics203_procurement_unit, s203_procurement_unit ) );
649 	mbuff.append( lineout( ics203_claims_unit, s203_claims_unit ) );
650 	mbuff.append( lineout( ics203_cost_unit, s203_cost_unit ) );
651 
652 	for (int i = 0; i < 7; i++) {
653 		mbuff.append( lineout( ics_n( ics203_agency, i ), s203_agency[i] ) );
654 		mbuff.append( lineout( ics_n( ics203_agency_name, i ), s203_agency_name[i] ) );
655 	}
656 	for (int i = 0; i < 3; i++) {
657 		mbuff.append( lineout( ics_n( ics203_tech_spc, i ), s203_tech_spc[i] ) );
658 	}
659 	for (int i = 0; i < 5; i++) {
660 		mbuff.append( lineout( ics_n( ics203_b1_div, i ), s203_b1_div[i] ) );
661 		mbuff.append( lineout( ics_n( ics203_b1_grp, i ), s203_b1_grp[i] ) );
662 		mbuff.append( lineout( ics_n( ics203_b2_div, i ), s203_b2_div[i] ) );
663 		mbuff.append( lineout( ics_n( ics203_b2_grp, i ), s203_b2_grp[i] ) );
664 		mbuff.append( lineout( ics_n( ics203_b3_div, i ), s203_b3_div[i] ) );
665 		mbuff.append( lineout( ics_n( ics203_b3_grp, i ), s203_b3_grp[i] ) );
666 	}
667 	if (compress) compress_maybe(mbuff);
668 	buff203.append(mbuff);
669 }
670 
read_203_buffer(string data)671 void read_203_buffer(string data)
672 {
673 	clear_203fields();
674 	read_header(data);
675 
676 	s203_incident = findstr(data, ics203_incident);
677 	s203_date = findstr(data, ics203_date);
678 	s203_time = findstr(data, ics203_time);
679 	s203_op_period = findstr(data, ics203_op_period);
680 	s203_incident_commander = findstr(data, ics203_incident_commander);
681 	s203_incident_deputy = findstr(data, ics203_incident_deputy);
682 	s203_incident_safety_officer = findstr(data, ics203_incident_safety_officer);
683 	s203_incident_info_officer = findstr(data, ics203_incident_info_officer);
684 	s203_liaison_officer = findstr(data, ics203_liaison_officer);
685 	s203_prepared_by = findstr(data, ics203_prepared_by);
686 	s203_planning_chief = findstr(data, ics203_planning_chief);
687 	s203_planning_deputy = findstr(data, ics203_planning_deputy);
688 	s203_resources_unit = findstr(data, ics203_resources_unit);
689 	s203_situation_unit = findstr(data, ics203_situation_unit);
690 	s203_documentation_unit = findstr(data, ics203_documentation_unit);
691 	s203_demobilization_unit = findstr(data, ics203_demobilization_unit);
692 	s203_logistics_chief = findstr(data, ics203_logistics_chief);
693 	s203_logistics_deputy = findstr(data, ics203_logistics_deputy);
694 	s203_support_director = findstr(data, ics203_support_director);
695 	s203_supply_unit = findstr(data, ics203_supply_unit);
696 	s203_facilities_unit = findstr(data, ics203_facilities_unit);
697 	s203_ground_support = findstr(data, ics203_ground_support);
698 	s203_service_director = findstr(data, ics203_service_director);
699 	s203_communications_unit = findstr(data, ics203_communications_unit);
700 	s203_medical_unit = findstr(data, ics203_medical_unit);
701 	s203_food_unit = findstr(data, ics203_food_unit);
702 	s203_ops_chief = findstr(data, ics203_ops_chief);
703 	s203_ops_deputy = findstr(data, ics203_ops_deputy);
704 	s203_b1_director = findstr(data, ics203_b1_director);
705 	s203_b1_deputy = findstr(data, ics203_b1_deputy);
706 	s203_b2_director = findstr(data, ics203_b2_director);
707 	s203_b2_deputy = findstr(data, ics203_b2_deputy);
708 	s203_b3_director = findstr(data, ics203_b3_director);
709 	s203_b3_deputy = findstr(data, ics203_b3_deputy);
710 	s203_air_ops_br_dir = findstr(data, ics203_air_ops_br_dir);
711 	s203_air_tactical_group_sup = findstr(data, ics203_air_tactical_group_sup);
712 	s203_air_support_group_sup = findstr(data, ics203_air_support_group_sup);
713 	s203_helicopter_coordinator = findstr(data, ics203_helicopter_coordinator);
714 	s203_air_tanker_fixed_wing = findstr(data, ics203_air_tanker_fixed_wing);
715 	s203_finance_chief = findstr(data, ics203_finance_chief);
716 	s203_finance_deputy = findstr(data, ics203_finance_deputy);
717 	s203_time_unit = findstr(data, ics203_time_unit);
718 	s203_procurement_unit = findstr(data, ics203_procurement_unit);
719 	s203_claims_unit = findstr(data, ics203_claims_unit);
720 	s203_cost_unit = findstr(data, ics203_cost_unit);
721 
722 	for (int i = 0; i < 7; i++) {
723 		s203_agency[i] = findstr(data, ics_n( ics203_agency, i) );
724 		s203_agency_name[i] = findstr(data, ics_n( ics203_agency_name, i) );
725 	}
726 	for (int i = 0; i < 3; i++) {
727 		s203_tech_spc[i] = findstr(data, ics_n( ics203_tech_spc, i) );
728 	}
729 	for (int i = 0; i < 5; i++) {
730 		s203_b1_div[i] = findstr(data, ics_n( ics203_b1_div, i) );
731 		s203_b1_grp[i] = findstr(data, ics_n( ics203_b1_grp, i) );
732 		s203_b2_div[i] = findstr(data, ics_n( ics203_b2_div, i) );
733 		s203_b2_grp[i] = findstr(data, ics_n( ics203_b2_grp, i) );
734 		s203_b3_div[i] = findstr(data, ics_n( ics203_b3_div, i) );
735 		s203_b3_grp[i] = findstr(data, ics_n( ics203_b3_grp, i) );
736 	}
737 	update_203form();
738 }
739 
cb_203_new()740 void cb_203_new()
741 {
742 	if (check_203fields()) {
743 		if (fl_choice2("Form modified, save?", "No", "Yes", NULL) == 1) {
744 			update_header(CHANGED);
745 			cb_203_save();
746 		}
747 	}
748 	clear_203_form();
749 	clear_header();
750 	def_203_filename = ICS_msg_dir;
751 	def_203_filename.append("new").append(F203_EXT);
752 	show_filename(def_203_filename);
753 	using_ics203_template = false;
754 }
755 
cb_203_import()756 void cb_203_import()
757 {
758 	fl_alert2("Not implemented");
759 }
760 
cb_203_export()761 void cb_203_export()
762 {
763 	fl_alert2("Not implemented");
764 }
765 
cb_203_wrap_import(string wrapfilename,string inpbuffer)766 void cb_203_wrap_import(string wrapfilename, string inpbuffer)
767 {
768 	clear_203_form();
769 	read_203_buffer(inpbuffer);
770 	def_203_filename = ICS_msg_dir;
771 	def_203_filename.append(wrapfilename);
772 	show_filename(def_203_filename);
773 	using_ics203_template = false;
774 }
775 
eval_203_fsize()776 int eval_203_fsize()
777 {
778 	Ccrc16 chksum;
779 	evalstr.append("[WRAP:beg][WRAP:lf][WRAP:fn ");
780 	evalstr.append(base_203_filename).append("]");
781 	update_203fields();
782 	update_header(FROM);
783 	evalstr.append(header("<ics203>"));
784 	buff203.clear();
785 	make_buff203(true);
786 	if (buff203.empty()) return 0;
787 	compress_maybe( buff203 );
788 	evalstr.append( buff203 );
789 	evalstr.append("[WRAP:chksum ").append(chksum.scrc16(evalstr)).append("][WRAP:end]");
790 	return evalstr.length();
791 }
792 
cb_203_wrap_export()793 void cb_203_wrap_export()
794 {
795 	if (check_203fields()) {
796 		if (fl_choice2("Form modified, save?", "No", "Yes", NULL) == 0)
797 			return;
798 		update_header(CHANGED);
799 	}
800 	update_203fields();
801 
802 	if (base_203_filename == string("new").append(F203_EXT) ||
803 		base_203_filename == string("default").append(F203_EXT) )
804 		if (!cb_203_save_as()) return;
805 
806 	string wrapfilename = WRAP_send_dir;
807 	wrapfilename.append(base_203_filename);
808 	wrapfilename.append(".wrap");
809 	const char *p = FSEL::saveas(
810 			"Save as wrap file",
811 			"Wrap file\t*.{wrap,WRAP}",
812 			wrapfilename.c_str());
813 	if (p) {
814 		string pext = fl_filename_ext(p);
815 		wrapfilename = p;
816 		update_header(FROM);
817 		buff203.assign(header("<ics203>"));
818 		make_buff203(true);
819 		export_wrapfile(base_203_filename, wrapfilename, buff203, pext != ".wrap");
820 
821 		buff203.assign(header("<ics203>"));
822 		make_buff203(true);
823 		write_203(def_203_filename);
824 	}
825 }
826 
cb_203_wrap_autosend()827 void cb_203_wrap_autosend()
828 {
829 	if (check_203fields()) {
830 		if (fl_choice2("Form modified, save?", "No", "Yes", NULL) == 0)
831 			return;
832 		update_header(CHANGED);
833 	}
834 	update_203fields();
835 
836 	if (base_203_filename == string("new").append(F203_EXT) ||
837 		base_203_filename == string("default").append(F203_EXT) )
838 		if (!cb_203_save_as()) return;
839 
840 	update_header(FROM);
841 	buff203.assign(header("<ics203>"));
842 	make_buff203(true);
843 	xfr_via_socket(base_203_filename, buff203);
844 
845 	buff203.assign(header("<ics203>"));
846 	make_buff203(true);
847 	write_203(def_203_filename);
848 }
849 
cb_203_load_template()850 void cb_203_load_template()
851 {
852 	string def_203_filename = def_203_TemplateName;
853 	const char *p = FSEL::select(
854 			"Open template file",
855 			string("Template file\t*").append(T203_EXT).c_str(),
856 			def_203_filename.c_str());
857 	if (p) {
858 		clear_203_form();
859 		read_data_file(p);
860 		def_203_TemplateName = p;
861 		show_filename(def_203_TemplateName);
862 		using_ics203_template = true;
863 	}
864 }
865 
cb_203_save_template()866 void cb_203_save_template()
867 {
868 	if (!using_ics203_template) {
869 		cb_203_save_as_template();
870 		return;
871 	}
872 	string def_203_filename = def_203_TemplateName;
873 	const char *p = FSEL::saveas(
874 			"Save template file",
875 			string("Template file\t*").append(T203_EXT).c_str(),
876 			def_203_filename.c_str());
877 	if (p) {
878 		update_header(CHANGED);
879 		buff203.assign(header("<ics203>"));
880 		make_buff203();
881 		write_203(p);
882 	}
883 }
884 
cb_203_save_as_template()885 void cb_203_save_as_template()
886 {
887 	string def_203_filename = def_203_TemplateName;
888 	const char *p = FSEL::saveas(
889 			"Save as template file",
890 			string("Template file\t*").append(T203_EXT).c_str(),
891 			def_203_filename.c_str());
892 	if (p) {
893 		const char *pext = fl_filename_ext(p);
894 		def_203_TemplateName = p;
895 		if (strlen(pext) == 0) def_203_TemplateName.append(T203_EXT);
896 		remove_spaces_from_filename(def_203_TemplateName);
897 		clear_header();
898 		update_header(CHANGED);
899 		buff203.assign(header("<ics203>"));
900 		make_buff203();
901 		write_203(def_203_TemplateName);
902 		show_filename(def_203_TemplateName);
903 		using_ics203_template = true;
904 	}
905 }
906 
cb_203_open()907 void cb_203_open()
908 {
909 	const char *p = FSEL::select(
910 			_("Open data file"),
911 			string("ICS-203\t*").append(F203_EXT).c_str(),
912 			def_203_filename.c_str());
913 	if (!p) return;
914 	if (strlen(p) == 0) return;
915 	clear_203_form();
916 	read_data_file(p);
917 	using_ics203_template = false;
918 	def_203_filename = p;
919 	show_filename(def_203_filename);
920 }
921 
write_203(string s)922 void write_203(string s)
923 {
924 	FILE *file203 = fopen(s.c_str(), "w");
925 	if (!file203) return;
926 
927 	fwrite(buff203.c_str(), buff203.length(), 1, file203);
928 	fclose(file203);
929 }
930 
cb_203_save_as()931 bool cb_203_save_as()
932 {
933 	const char *p;
934 	string newfilename;
935 
936 	string name = named_file();
937 	if (!name.empty()) {
938 		name.append(F203_EXT);
939 		newfilename = ICS_msg_dir;
940 		newfilename.append(name);
941 	} else
942 		newfilename = def_203_filename;
943 
944 	p = FSEL::saveas(
945 			_("Save data file"),
946 			string("ICS-203\t*").append(F203_EXT).c_str(),
947 			newfilename.c_str());
948 
949 	if (!p) return false;
950 	if (strlen(p) == 0) return false;
951 
952 	if (progStatus.sernbr_fname) update_sernbr();
953 
954 	const char *pext = fl_filename_ext(p);
955 	def_203_filename = p;
956 	if (strlen(pext) == 0) def_203_filename.append(F203_EXT);
957 
958 	remove_spaces_from_filename(def_203_filename);
959 	update_203fields();
960 	update_header(NEW);
961 	buff203.assign(header("<ics203>"));
962 	make_buff203();
963 	write_203(def_203_filename);
964 
965 	using_ics203_template = false;
966 	show_filename(def_203_filename);
967 	return true;
968 }
969 
cb_203_save()970 void cb_203_save()
971 {
972 	if (base_203_filename == string("new").append(F203_EXT) ||
973 		base_203_filename == string("default").append(F203_EXT) ||
974 		using_ics203_template == true) {
975 		cb_203_save_as();
976 		return;
977 	}
978 	if (check_203fields()) update_header(CHANGED);
979 	update_203fields();
980 	buff203.assign(header("<ics203>"));
981 	make_buff203();
982 	write_203(def_203_filename);
983 	using_ics203_template = false;
984 }
985 
cb_203_html()986 void cb_203_html()
987 {
988 	string fname_name = fl_filename_name(def_203_filename.c_str());
989 	size_t p = fname_name.rfind('.');
990 	if (p != string::npos) fname_name.erase(p);
991 
992 	string ics203_fname = ICS_dir;
993 	ics203_fname.append(fname_name);
994 	ics203_fname.append(".html");
995 
996 	string html_text = "";
997 
998 	update_203fields();
999 	string form203 = ics203_html_template;
1000 	replacestr(form203, TITLE, fname_name);
1001 
1002 	replacestr(form203, ics203_incident, s203_incident );
1003 	replacestr(form203, ics203_date, s203_date );
1004 	replacestr(form203, ics203_time, s203_time );
1005 	replacestr(form203, ics203_op_period, s203_op_period );
1006 	replacestr(form203, ics203_incident_commander, s203_incident_commander );
1007 	replacestr(form203, ics203_incident_deputy, s203_incident_deputy );
1008 	replacestr(form203, ics203_incident_safety_officer, s203_incident_safety_officer );
1009 	replacestr(form203, ics203_incident_info_officer, s203_incident_info_officer );
1010 	replacestr(form203, ics203_liaison_officer, s203_liaison_officer );
1011 	replacestr(form203, ics203_prepared_by, s203_prepared_by );
1012 	replacestr(form203, ics203_planning_chief, s203_planning_chief );
1013 	replacestr(form203, ics203_planning_deputy, s203_planning_deputy );
1014 	replacestr(form203, ics203_resources_unit, s203_resources_unit );
1015 	replacestr(form203, ics203_situation_unit, s203_situation_unit );
1016 	replacestr(form203, ics203_documentation_unit, s203_documentation_unit );
1017 	replacestr(form203, ics203_demobilization_unit, s203_demobilization_unit );
1018 	replacestr(form203, ics203_logistics_chief, s203_logistics_chief );
1019 	replacestr(form203, ics203_logistics_deputy, s203_logistics_deputy );
1020 	replacestr(form203, ics203_support_director, s203_support_director );
1021 	replacestr(form203, ics203_supply_unit, s203_supply_unit );
1022 	replacestr(form203, ics203_facilities_unit, s203_facilities_unit );
1023 	replacestr(form203, ics203_ground_support, s203_ground_support );
1024 	replacestr(form203, ics203_service_director, s203_service_director );
1025 	replacestr(form203, ics203_communications_unit, s203_communications_unit );
1026 	replacestr(form203, ics203_medical_unit, s203_medical_unit );
1027 	replacestr(form203, ics203_food_unit, s203_food_unit );
1028 	replacestr(form203, ics203_ops_chief, s203_ops_chief );
1029 	replacestr(form203, ics203_ops_deputy, s203_ops_deputy );
1030 	replacestr(form203, ics203_b1_director, s203_b1_director );
1031 	replacestr(form203, ics203_b1_deputy, s203_b1_deputy );
1032 	replacestr(form203, ics203_b2_director, s203_b2_director );
1033 	replacestr(form203, ics203_b2_deputy, s203_b2_deputy );
1034 	replacestr(form203, ics203_b3_director, s203_b3_director );
1035 	replacestr(form203, ics203_b3_deputy, s203_b3_deputy );
1036 	replacestr(form203, ics203_air_ops_br_dir, s203_air_ops_br_dir );
1037 	replacestr(form203, ics203_air_tactical_group_sup, s203_air_tactical_group_sup );
1038 	replacestr(form203, ics203_air_support_group_sup, s203_air_support_group_sup );
1039 	replacestr(form203, ics203_helicopter_coordinator, s203_helicopter_coordinator );
1040 	replacestr(form203, ics203_air_tanker_fixed_wing, s203_air_tanker_fixed_wing );
1041 	replacestr(form203, ics203_finance_chief, s203_finance_chief );
1042 	replacestr(form203, ics203_finance_deputy, s203_finance_deputy );
1043 	replacestr(form203, ics203_time_unit, s203_time_unit );
1044 	replacestr(form203, ics203_procurement_unit, s203_procurement_unit );
1045 	replacestr(form203, ics203_claims_unit, s203_claims_unit );
1046 	replacestr(form203, ics203_cost_unit, s203_cost_unit );
1047 
1048 	for (int i = 0; i < 7; i++) {
1049 		replacestr(form203, ics_n( ics203_agency, i ), s203_agency[i] );
1050 		replacestr(form203, ics_n( ics203_agency_name, i ), s203_agency_name[i] );
1051 	}
1052 	for (int i = 0; i < 3; i++) {
1053 		replacestr(form203, ics_n( ics203_tech_spc, i ), s203_tech_spc[i] );
1054 	}
1055 	for (int i = 0; i < 5; i++) {
1056 		replacestr(form203, ics_n( ics203_b1_div, i ), s203_b1_div[i] );
1057 		replacestr(form203, ics_n( ics203_b1_grp, i ), s203_b1_grp[i] );
1058 		replacestr(form203, ics_n( ics203_b2_div, i ), s203_b2_div[i] );
1059 		replacestr(form203, ics_n( ics203_b2_grp, i ), s203_b2_grp[i] );
1060 		replacestr(form203, ics_n( ics203_b3_div, i ), s203_b3_div[i] );
1061 		replacestr(form203, ics_n( ics203_b3_grp, i ), s203_b3_grp[i] );
1062 	}
1063 
1064 	FILE *file203 = fopen(ics203_fname.c_str(), "w");
1065 	fprintf(file203,"%s", form203.c_str());
1066 	fclose(file203);
1067 
1068 	open_url(ics203_fname.c_str());
1069 }
1070 
cb_203_msg_type()1071 void cb_203_msg_type()
1072 {
1073 	if (tabs_msg_type->value() == tab_ics203 ) {
1074 		tab_ics203_type->value(tab_203_1);
1075 		show_filename(def_203_filename);
1076 	}
1077 }
1078 
cb_203_textout()1079 void cb_203_textout()
1080 {
1081 	string ics203_fname = ICS_dir;
1082 	ics203_fname.append("ics203.txt");
1083 
1084 	update_203fields();
1085 	string form203 = ics203_text_template;
1086 
1087 	replacestr(form203, ics203_incident, s203_incident );
1088 	replacestr(form203, ics203_date, s203_date );
1089 	replacestr(form203, ics203_time, s203_time );
1090 	replacestr(form203, ics203_op_period, s203_op_period );
1091 	replacestr(form203, ics203_incident_commander, s203_incident_commander );
1092 	replacestr(form203, ics203_incident_deputy, s203_incident_deputy );
1093 	replacestr(form203, ics203_incident_safety_officer, s203_incident_safety_officer );
1094 	replacestr(form203, ics203_incident_info_officer, s203_incident_info_officer );
1095 	replacestr(form203, ics203_liaison_officer, s203_liaison_officer );
1096 	replacestr(form203, ics203_prepared_by, s203_prepared_by );
1097 	replacestr(form203, ics203_planning_chief, s203_planning_chief );
1098 	replacestr(form203, ics203_planning_deputy, s203_planning_deputy );
1099 	replacestr(form203, ics203_resources_unit, s203_resources_unit );
1100 	replacestr(form203, ics203_situation_unit, s203_situation_unit );
1101 	replacestr(form203, ics203_documentation_unit, s203_documentation_unit );
1102 	replacestr(form203, ics203_demobilization_unit, s203_demobilization_unit );
1103 	replacestr(form203, ics203_logistics_chief, s203_logistics_chief );
1104 	replacestr(form203, ics203_logistics_deputy, s203_logistics_deputy );
1105 	replacestr(form203, ics203_support_director, s203_support_director );
1106 	replacestr(form203, ics203_supply_unit, s203_supply_unit );
1107 	replacestr(form203, ics203_facilities_unit, s203_facilities_unit );
1108 	replacestr(form203, ics203_ground_support, s203_ground_support );
1109 	replacestr(form203, ics203_service_director, s203_service_director );
1110 	replacestr(form203, ics203_communications_unit, s203_communications_unit );
1111 	replacestr(form203, ics203_medical_unit, s203_medical_unit );
1112 	replacestr(form203, ics203_food_unit, s203_food_unit );
1113 	replacestr(form203, ics203_ops_chief, s203_ops_chief );
1114 	replacestr(form203, ics203_ops_deputy, s203_ops_deputy );
1115 	replacestr(form203, ics203_b1_director, s203_b1_director );
1116 	replacestr(form203, ics203_b1_deputy, s203_b1_deputy );
1117 	replacestr(form203, ics203_b2_director, s203_b2_director );
1118 	replacestr(form203, ics203_b2_deputy, s203_b2_deputy );
1119 	replacestr(form203, ics203_b3_director, s203_b3_director );
1120 	replacestr(form203, ics203_b3_deputy, s203_b3_deputy );
1121 	replacestr(form203, ics203_air_ops_br_dir, s203_air_ops_br_dir );
1122 	replacestr(form203, ics203_air_tactical_group_sup, s203_air_tactical_group_sup );
1123 	replacestr(form203, ics203_air_support_group_sup, s203_air_support_group_sup );
1124 	replacestr(form203, ics203_helicopter_coordinator, s203_helicopter_coordinator );
1125 	replacestr(form203, ics203_air_tanker_fixed_wing, s203_air_tanker_fixed_wing );
1126 	replacestr(form203, ics203_finance_chief, s203_finance_chief );
1127 	replacestr(form203, ics203_finance_deputy, s203_finance_deputy );
1128 	replacestr(form203, ics203_time_unit, s203_time_unit );
1129 	replacestr(form203, ics203_procurement_unit, s203_procurement_unit );
1130 	replacestr(form203, ics203_claims_unit, s203_claims_unit );
1131 	replacestr(form203, ics203_cost_unit, s203_cost_unit );
1132 
1133 	for (int i = 0; i < 7; i++) {
1134 		replacestr(form203, ics_n( ics203_agency, i ), s203_agency[i] );
1135 		replacestr(form203, ics_n( ics203_agency_name, i ), s203_agency_name[i] );
1136 	}
1137 	for (int i = 0; i < 3; i++) {
1138 		replacestr(form203, ics_n( ics203_tech_spc, i ), s203_tech_spc[i] );
1139 	}
1140 	for (int i = 0; i < 5; i++) {
1141 		replacestr(form203, ics_n( ics203_b1_div, i ), s203_b1_div[i] );
1142 		replacestr(form203, ics_n( ics203_b1_grp, i ), s203_b1_grp[i] );
1143 		replacestr(form203, ics_n( ics203_b2_div, i ), s203_b2_div[i] );
1144 		replacestr(form203, ics_n( ics203_b2_grp, i ), s203_b2_grp[i] );
1145 		replacestr(form203, ics_n( ics203_b3_div, i ), s203_b3_div[i] );
1146 		replacestr(form203, ics_n( ics203_b3_grp, i ), s203_b3_grp[i] );
1147 	}
1148 
1149 	FILE *file203 = fopen(ics203_fname.c_str(), "w");
1150 	fprintf(file203,"%s", form203.c_str());
1151 	fclose(file203);
1152 
1153 	open_url(ics203_fname.c_str());
1154 }
1155