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