Post

EMCOMM

EMCOMM

EMCOMM

SENSIBLE EMERGENCY COMMUNICATIONS PROTOCOLS

When I first became interested in Ham Radio, it was primarily from a preparedness perspective. “What happens if there is no internet or cellphones?” This took me down the rabbit hole into Emergency Communications (EMCOMM). I was quickly overwhelmed by the vast amount of information available on this topic. This blog post sets out a straightforward and sensible approach to EMCOMM and general communication preparedness.

NOTABLE EMCOMM RESOURCES:

Many excellent resources already exist. Here are a few that I think are very helpful:

AmRRON American Redoubt Radio Operators Network provides a nationwide standardized Signals Operating Instructions (SOI) framework, CH3 (Channel 3) link-up protocol for licensed and unlicensed users, persistent presence nets, STATREP/SITREP reporting, and digital-mode practices (JS8Call, FLAMP/FLMSG, etc.).

Black Swan COMEX focuses on structured AUXCOMM exercises, PACE layering, NVIS for regional coverage, and agency-oriented training/qualification.

The PACE Framework from Black Swan rationale is useful for all modules.

  • Primary: Everyday, on-grid, convenient communications via Internet using Computers and Smart Phones. Voice, text, images, video all shared almost instantaneously.
  • Alternate: Redundant commercial or satellite options like StarLink.
  • Contingency: VHF/UHF line-of-sight, local mesh, repeaters when available.
  • Emergency: HF NVIS + relays for regional/beyond-LOS coverage.

Sensible EMCOMMs practice seamless movement between the layers of the PACE framework.

OH8STN Julian has a wealth of EMCOMM resources available including blog posts, books and extensive YouTube videos.

The Tech Prepper Gaston likewise has great resources available including his YouTube Channel

S2 Underground has daily intel updates (the Wire) and GhostNet protocol. GhostNet manual available here.


INTRO TO STANDARDIZED COMMS

For EMCOMM, standardized report formats exist because they solve several distinct problems at once, and the reasons are fairly universal across emergency communications, military signaling, and amateur radio nets.

  • Bandwidth and time are scarce. On a voice net — especially HF, where propagation windows close and traffic queues build — every second of airtime is a shared resource. A template forces the sender to compress. Instead of an unstructured monologue, you get the minimum viable set of facts. That matters even more on digital modes like JS8Call, packet, or Winlink, where message length directly affects whether it gets through at all.

  • Interoperability between strangers. The people on a net often have never worked together and may not share local context. A fixed format means a station in one state can parse a report from another without asking clarifying questions. This is the same logic behind ICS forms (ICS-213, ICS-214) and the military’s SALUTE and SMEAC structures — the format itself carries meaning, so the receiver knows where to listen for what.

  • Cognitive load under stress. Under fatigue, fear, or time pressure, people lose the ability to organize information spontaneously. A checklist-like structure offloads that organizing work onto the format. It also makes it much harder to forget a critical element — “did they say whether anyone was injured?” becomes unnecessary because the slot exists.

  • Triage and prioritization. When a net control operator receives twenty reports, uniform formatting lets them compare apples to apples and spot anomalies fast. The STATREP/SITREP split is precisely a triage mechanism: routine check-ins stay cheap, so attention and airtime are preserved for reports that actually carry news.

  • Accountability and continuity. Written or logged reports become a record. Someone coming on shift later can read the sequence and reconstruct what happened, when, and who said so. In a prolonged grid-down scenario, that institutional memory is often the difference between coordinated response and everyone reinventing the wheel.

  • Rumour resistance. Structured reporting tends to separate observation from interpretation — what was seen versus what someone thinks it means. That reduces the telephone-game distortion that plagues informal networks and makes it easier for a coordinator to weigh reliability.

  • OPSEC and emissions discipline. Brevity has a security dimension. Short, templated transmissions reduce the amount of exploitable information broadcast over open airwaves — less detail about locations, capabilities, or intentions, and shorter exposure time for direction-finding. Some formats also deliberately abstract sensitive specifics.

  • Trainability. A standard format can be taught, drilled, and evaluated. Skills that are rehearsed to the point of reflex survive adrenaline better than improvised judgment calls.


TWO STANDARDIZED REPORT EXAMPLES

Two useful standardized formats are the ICS 213 and the STATREP.

The Incident Command System (ICS) 213 General Message Form was developed in the 1970s for fighting fires in Southern California. It has become the gold standard for standardized messages, adopted widely by FEMA and ICS Canada and others. It is quite simple and straightforward.

ICS 213 FORM FIELDS:

🏷️ INCIDENT NAME: This is optional

✉️ TO (Recipient): Call sign, unit, or party

📩 FROM (Sender): Call sign, unit, or party

✍️ SUBJECT: Message subject

🗓️ DATE: MMDDYYYY

⏰ TIME: 24 Hour Time

🗨️ MESSAGE: Concise content

A STATREP (Status Report) is essentially a pulse check. It’s designed to simply and efficiently report basic conditions within a region. The purpose is to establish that everything is normal or to flag that there is status information to convey. It’s a streamlined report for routine condition-checking without needing detailed narrative.

STATUS and FIELDS:

STATUS BY COLOUR:

These colours indicate the status of each category in the report.

🟢 GREEN: Normal.

🟡 YELLOW: Degraded.

🔴 RED: Disrupted.

❔UNKNOWN: Unknown status.

STATREP FORM FIELDS:

✉️ TO (Recipient): Call sign, unit, or party

📩 FROM (Sender): Call sign, unit, or party

🚨 PRECEDENCE: Priority or urgency

⏰ DTG (Date Time Group): YYMMDD-HHMMz (Ex: 230929-0100z)

📍 STATE: 2 digit local abbreviation

🌐 GRID: Maiden Head grid square location

📌 MAP PIN: visualize a pushpin on a map on the wall. Colour reflects the WORST/MOST DEGRADED status in your report.

⚡ COMMERCIAL POWER: status of the electrical grid at the report location.

🚰 PUBLIC WATER: status of municipal water system.

🏥 MEDICAL: status of medical support availability.

📻 OVER AIR COMMS: status of public communications such as phone, TV, & radio.

🚗 TRAVEL CONDITIONS: status of road travel ability.

🛜 INTERNET: status of internet service availability at the report location.

⛽ FUEL: status of fuel availability at the report location. Affected fuel type may be listed in the ‘Brief Remarks’ field.

🍔 FOOD AVAILABILITY: status of the food supply at the report location.

👿 CRIMINAL ACTIVITY: status of crime at the report location.

🏘️ CIVIL: status of the general population at the report location.

👨‍💼 POLITICAL: status of the mindset and actions of politicians at the report location.

🗨️ BRIEF REMARKS: succinct, clarifying comments (if needed). Typically left blank for brevity.

These forms can be used digitally or in print versions. Software like FLMSG and Winlink have HTML versions that format the data concisely for sending over radio digitally. AmRRON has a good video on setting this up.

AmRRON additionally has these and other HTML forms you can download.

🐢 I have made shell scripts that will generate these forms for you in plain text. Check them out in the Scripts Section.


TRAINING MODULES

These outlines are designed for radio clubs and individuals as EMCOMM training modules. Each segment covers core theory followed by a practical field exercise. The goal is a sensible approach to self-reliant, infrastructure-independent communications for disaster response, event support, and grid-down scenarios.

1️⃣ Module 1: Equipment Foundations (Radios, Antennas, Batteries/Power)

💡 Theory

Reliable gear is the foundation of a dependable communication strategy. Prioritize portable, battery-efficient, multi-mode capable equipment.

  • Radios: Dual-band VHF/UHF HTs (ex: rugged IP-rated models with GPS/APRS/Bluetooth like BTECH UV-PRO noted in AmRRON discussions); HF transceivers (QRP–100W) for NVIS; license-free CB/FRS/MURS for CH3.
  • Antennas: VHF/UHF – rubber duck, roll-up J-pole, or vehicle magnetic mount. HF NVIS – low horizontal dipoles (0.1–0.25 λ height, ~10–25 ft on 40m/80m). Portable options: end-fed half-waves, linked dipoles or Sphinx style.
  • Power: LiFePO4 or deep-cycle batteries, solar charge controllers, power banks, generators as last resort. Calculate runtime (radio current draw × hours). Include fuses, connectors (Powerpoles), and multi-band options.
  • Supporting: Sound-card interfaces like DigiRig or Bluetooth for digital, GPS, logging software/apps, hard-copy forms, spare parts, waterproof cases.

AmRRON and Black Swan both stress austere, long-duration operation without commercial power. Test everything offline.

🏞️ Field Exercise

Set up a complete portable station in a local park or open field with no grid power. Deploy a VHF antenna and or a simple NVIS dipole. Run radios on battery for 1–2 hours while logging power draw and signal reports from other stations. Pack/unpack under a time limit.

Parks on the Air is a great way to get started with EMMCOMM preparedness. A club or individuals can do a POTA Activation and try to make 10 contacts.

Debrief any failures (connector issues, antenna height effects, battery life, etc) in an after action report.


2️⃣ Module 2: Local VHF/UHF Communications Plans and CH3 Integration

💡 Theory

Line-of-sight VHF/UHF handles tactical local coordination (neighborhood to county/RM).

  • National simplex: 146.520 MHz (2m FM calling), 446.000 MHz (70cm). Local ARES/RACES or club frequencies/repeaters as primary when available; simplex as fallback.
  • AmRRON commonly uses 146.420 MHz simplex (and 144.500 digital).
  • CH3 Project - AmRRON cornerstone for non-ham integration): Channel 3 on CB (26.985 MHz), FRS/GMRS (462.6125 MHz). No privacy codes. “3-2-1” method: set to CH3, transmit/listen ~2 minutes, every hour on the hour (or monitor ±5 min around the hour to conserve power).
  • Plans: Simplex calling → move to working frequency; net schedules; priority traffic handling.

💬 Field Exercise

Teams of 3 deploy to separate locations (1–8 km apart). Conduct a simplex net on 146.52 or other local frequency. Simultaneously run CH3 attempts (or simulated with FRS). Pass short tactical messages and one formal report (STATREP or ICS213). Measure range vs. terrain/antenna height. Relay one message from “CH3” to the ham net.


3️⃣ Module 3: LoRa Mesh Networks (Meshtastic / MeshCore)

💡 Theory

Low-power LoRa (~915 MHz, license-free) enables encrypted text and position sharing via self-forming meshes. Compliments voice radios: text/GPS for logistics, voice for urgency.

  • Nodes (ESP32 + LoRa boards, ~$30–50) form meshes; phones connect via Bluetooth. Store-and-forward or repeater models (Meshtastic flooding vs. MeshCore designated repeaters). Ranges: 3–16+ km depending on terrain, antennas, and density. Solar-powered nodes for fixed coverage.
  • Limitations: Low bandwidth (short texts only); congestion in dense networks; not a full replacement for voice or long-haul. Layer with VHF/UHF and HF. Useful for family/group coordination or team tracking inside a response area.
  • Integration: Position beacons can bridge toward APRS in some setups.

🕸️ Field Exercise

Deploy 4–6 nodes (personal + 1–2 elevated/solar repeaters). Form a mesh, exchange status messages and GPS positions on a phone map. Simulate a “team movement” and resource request. Measure hop reliability and battery life over 2–4 hours. Compare with a concurrent VHF voice net.


4️⃣ Module 4: HF NVIS for Regional Communications

💡 Theory

Near-Vertical Incidence Skywave (NVIS) fills the 50–650 km gap between VHF/UHF LOS and conventional HF DX. High-angle radiation reflects from the ionosphere for reliable regional coverage independent of terrain or infrastructure.

  • Frequencies: Typically 80m (night) and 40m (day) in mid-latitudes; check critical frequency (foF2). AmRRON examples include 3.818 LSB voice / 3.588 USB digital (80m) and 7.242 LSB / 7.110 USB (40m).
  • Antennas: Low horizontal dipoles or inverted-Vs.
  • Black Swan emphasizes NVIS + radio relays in the Emergency PACE layer when LOS is insufficient. Low power digital modes have the advantage.
  • Propagation: Monitor beacons or use tools; daytime higher frequencies, nighttime lower.

🗺️ Field Exercise

Deploy portable NVIS dipoles at two or more sites 80–250 km apart (or use local stations simulating distance). Exchange voice and digital reports on 40m/80m. Compare signal quality with higher antennas. Log propagation conditions and power used. Include a relay station if needed.


5️⃣ Module 5: Digital Modes

💡 Theory

Digital modes provide accuracy, efficiency, and weak-signal capability for formal traffic, positions, and situational awareness.

  • Winlink: Radio email (with ICS forms) via HF/VHF packet, VARA/Mercury HF, ARDOP, etc. Peer-to-peer or via gateways. Ideal for formal messages when internet is down. Widely used by ARES, Red Cross, and agencies.
  • APRS: 144.390 MHz (US) for position, short messages, weather. Digipeaters/igates extend range.
  • JS8Call: Weak-signal keyboard mode popular in AmRRON for beacons, path quality, and messaging. Computer time sync critical.
  • Others (AmRRON-style): FLAMP/FLMSG (reliable file/form transfer), Contestia, MFSK, etc. Persistent presence and beaconing help assess paths.
  • Best practice: Prioritize accuracy over speed; use forms; authenticate where possible (AmRRON uses PGP for official traffic).

💻 Field Exercise

Station A sends a STATREP via Winlink (VHF packet or HF) to Station B. Simultaneously run JS8Call beacons/messages and APRS position reports. Practice receiving and logging. Simulate gateway failure and switch to pure peer-to-peer. Measure success rates and times.


6️⃣ Module 6: Net Operations, Message Handling, and Protocols

💡 Theory

Standardized procedures prevent chaos.

  • Net types: Directed (Net Control Station), open, persistent presence (AmRRON style – continuous monitoring between scheduled nets).
  • AmRRON SOI elements: Emergency net schedules, AmCON levels guiding activity, STATREP (status reports), SITREP. Regional rolling nets on designated HF frequencies.
  • Traffic handling: Priority order, phonetic alphabet, brevity, formal vs. informal. ICS forms via digital or voice.
  • Black Swan: Structured AUXCOMM nets, training for agency support, qualification.
  • Logging: Every contact, traffic, and condition. Battery and OPSEC considerations.

📣 Field Exercise

Run a directed net (local VHF + one HF participant). Pass priority and routine traffic (including one digital). Practice CH3 check-ins and relay. Include an AmCON-style status update. Debrief discipline, accuracy, and battery use.


7️⃣ Module 7: Disaster Response and Event Communication Coordination

💡 Theory

Integrate all of the modules for real scenarios.

  • Disaster Response: Assess local situation (STATREP), establish local nets (VHF/UHF + mesh + CH3), escalate regional via NVIS/HF, pass formal traffic (Winlink/ICS), coordinate with ARES/RACES or agencies without interfering. AmRRON focuses on filling gaps and civil defense; Black Swan on agency-volunteer integration via exercises.
  • Coordination: Pre-plan frequencies, positions, net schedule, and backup power. Practice resource tracking (APRS/mesh) and formal reporting.

⚠️ Integrated Field Exercise (Capstone)

Scenario: Simulated multi-day power/comms outage or severe weather event (or a real public-service event).

  1. Establish local mesh + VHF simplex/CH3 net.
  2. Deploy NVIS for regional contact.
  3. Pass STATREPs and resource requests via JS8Call/Winlink/APRS.
  4. Simulate escalation (priority traffic, relay).
  5. Maintain operations for several hours on battery/solar only.
  6. Conduct hotwash (informal debrief held right after an event) and written After Action Report with the following categories:

A. Overview / Event Identification

  • Event name
  • Event date and activation period (start/end times)
  • Assignment number or exercise ID
  • Reporter name and call sign
  • Submission date

B. Introduction and Background

  • Purpose of the operation
  • Context (training exercise, actual emergency, public service event, etc.)
  • Objectives going into the event

C. Description of Event

  • Nature of the activity
  • Agencies or organizations served
  • Geographic areas involved
  • Duration and person-hours logged

D. Chronological Summary / Timeline

  • Time-stamped key events throughout the operation
  • Activation sequence, critical communications, and demobilization

E. Personnel and Resources

  • Names, call signs, and assigned positions/duties
  • Shift times and operational locations
  • Equipment used
  • Net Control Stations and frequency assignments

F. Performance Assessment

  • What worked well
  • What didn’t work / challenges encountered
  • Problems encountered and mitigation methods

G. Lessons Learned

  • Observations on system effectiveness
  • Identifying failure points without assigning blame or using names/callsigns
  • Discussion of how to correct deficiencies

H. Recommendations

  • Proposed improvements for future operations
  • Training needs identified
  • Equipment or procedure changes recommended

🎱 Module 8: Clandestine Comm Layers

💡 Theory

Encryption Flow:

🔓 Plain Text ➡️ 🔐 Transmitted Cipher Text ➡️ 🔐 Plain Text🔓

Ham Radio and encryption doesn’t generally mix. You can legally test sending encrypted messages - providing you post the cryptographic keys publicly.

This module is for absolute worst case scenarios where rule of law no longer applies. In typical EMCOMM scenarios, your adversary is nature, propagation difficulties and bureaucracy. This scenario adds governance hostilities and malicious threat actors to the list. Secure comms becomes essential.

Rule of thumb: Digital modes of encrypted communication are going to be the most efficient and least error prone.

0-20km - the obvious choice here is LoRa mesh radio (Meshtastic/MeshCore). It’s simple and encrypted right out of the box - providing your not using the public channel. The public channel is sent in the clear/un-encrypted. Mesh payloads are capped around 239 bytes, which forces you to write like a telegram — an advantage, not a bug. Keep it concise.

For both 0-400km (HF NVIS) and >400km (Skywave), you can send an encrypted message in a variety of ways, like a Winlink email or a JS8Call message.

The one time pad is the ultimate in encryption security. It’s unbreakable IF you use it correctly. It does require everyone to have copies of the pads in advance. So this requires some advanced preparation.

I have some basic tutorials on Authentication and DianaOTP, including bash scripts available for generating one time pads from the terminal and instructions for securely disseminating the pads with key exchange asymmetric encryption.

🔐 Encryption Exercise

🚨 Reminder: encryption over ham frequencies is strictly illegal in the United States (FCC: Under 47 CFR § 97.113). And are likewise illegal on FRS/GMRS in Canada. Unlike the US, Canadian Radiocommunication Regulations (Section 47.b) do permit encryption on amateur radio only if the keys and ciphers are not secret.

Using the tutorials above, generate some one time pads and exchange them in your EMCOMM team. Encrypt a simple message like “Solar flare expected tomorrow.” Send the encrypted message over a regular internet email, like Gmail, to practice the technique and to simulate sending via Winlink.

To transmit the encrypted message via voice, you would simply speak the key phonetically of the One Time Pad, then speak the encrypted message phonetically. “Golf Hotel Oscar Hotel Zulu” etc. The receiving station would record your transmitted message and decrypt it using their One Time Pad. Again, digital sending would be preferable for error prevention and anonymity.

🔒 Encryption Overview

🔑 Symmetric Encryption:

  • One shared key/password locks and unlocks the message.
  • Same key on both sides — sender and receiver must both have it.
  • Strength: Quick & concise for transmitting
  • Weakness: how do you safely get the key to the other person?

🔑🔑Asymmetric Encryption:

  • Two mathematically linked keys: a public one and a private one.
  • Public key encrypts (anyone can have it);
  • Private key decrypts (only you have it).
  • Strength: Solves the key-sharing problem
  • Weakness: keys are much bigger.

💾 Software: Encryption software is freely available for anyone to use. Older options like PGP (Pretty Good Privacy)/GPG (GNU Privacy Guard) or modern options like AGE (Actually Good Encryption) are good options. With this software you can encrypt files and messages either symmetrically or asymmetrically.

🪎 Resources:

Encryption Simply Explained

Symmetric encryption tutorial using AGE

Asymmetric encrytion tutorial using GPG

Note: Both of the software programs shown here are capable of doing symmetric and asymmetric encryption. AGE is the more modern version and probably should be the default choice now.


🤔 ADDITIONAL RECOMMENDATIONS

  • Training Cadence: Monthly theory + quarterly field exercises. Participate in AmRRON T-REX or Black Swan COMEX when possible.
  • Documentation: Maintain a personal or club comms plan binder (frequencies, schedules, forms, SOI excerpts).
  • Legal: Always Operate within license privileges except during real emergencies which threaten loss of life.

🐢 SCRIPTS

I wrote shell scripts to help operators generate standardized reports in the terminal. The scripts output the reports to Standard Output that can then be copied into an email, saved to a file, relayed by voice, etc. all without the need for special software. However, FLMSG is a really great HTML implementation for standardized communication forms. Winlink also supports them.

For each of the following scripts, copy the code and save it to a scriptname.sh

Make the file executable with:

1
chmod + x statrep.sh

Then run the script with:

1
./statrep.sh

ICS 213 GENERATOR SCRIPT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
=============================
===ICS 213 GENERAL MESSAGE===
=============================
1. INCIDENT NAME: fatty
2. TO: asdf
3. FROM: asdf
4. SUBJECT: as;kj;a
5. DATE: asdfsa
6. TIME: asdfasdf
7. MESSAGE:
Fattttt
╭─jason@paschal ~/Downloads/V5.0-Forms_27Nov2024-1
╰─$ cat ./ics213.sh
#!/usr/bin/env bash

# ICS 213 General Message Form Generator
# This script prompts the user for standard ICS 213 fields and outputs
# a formatted plain-text message suitable for email, print, or voice transmission.

clear
echo "======================================="
echo "===ICS 213 GENERAL MESSAGE GENERATOR==="
echo "======================================="
echo "Please fill in the following fields:"
echo ""

# Defaults for date/time
DEFAULT_DATE=$(date +%m-%d-%Y)
DEFAULT_TIME=$(date +%H:%M)

# Prompting for fields
read -p "1. Incident Name: " INCIDENT_NAME
read -p "2. To (Name and Position/Title): " TO_FIELD
read -p "3. From (Name and Position/Title): " FROM_FIELD
read -p "4. Subject: " SUBJECT
read -p "5. Date (MM-DD-YYYY) [$DEFAULT_DATE]: " MSG_DATE
MSG_DATE=${MSG_DATE:-$DEFAULT_DATE}
read -p "6. Time (HH:MM) [$DEFAULT_TIME]: " MSG_TIME
MSG_TIME=${MSG_TIME:-$DEFAULT_TIME}

echo "7. Message Body (Press Ctrl+D on a new line when finished):"
echo "-----------------------------------------------------------"
MESSAGE=$(cat)

# Outputting the formatted ICS 213 Form
clear
cat << EOF
=============================
===ICS 213 GENERAL MESSAGE===
=============================
1. INCIDENT NAME: ${INCIDENT_NAME:-[N/A]}
2. TO: ${TO_FIELD:-[N/A]}
3. FROM: ${FROM_FIELD:-[N/A]}
4. SUBJECT: ${SUBJECT:-[N/A]}
5. DATE: ${MSG_DATE}
6. TIME: ${MSG_TIME}
7. MESSAGE:
${MESSAGE:-[No message provided]}
EOF

STATREP GENERATOR SCRIPT

Copy the following code and save it into a file called statrep.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/env bash
# amrron_statrep_v5.1.sh
# Interactive generator for AmRRON Status Report v5.1
# Outputs plain text suitable for email or voice transmission.
# Green / empty defaults are omitted (matching the form’s “don’t transmit Green by default” behavior).

set -euo pipefail

echo "==========================================="
echo "=== AmRRON Status Report v5.1 Generator ==="
echo "==========================================="
echo "Press Enter to accept defaults (empty/Green are omitted from output)."
echo

# Helper: prompt with optional default
prompt() {
  local var_name="$1"
  local prompt_text="$2"
  local default="${3:-}"
  local input
  if [[ -n "$default" ]]; then
    read -rp "$prompt_text [$default]: " input
    printf -v "$var_name" '%s' "${input:-$default}"
  else
    read -rp "$prompt_text: " input
    printf -v "$var_name" '%s' "$input"
  fi
}

# Helper: prompt for status (G/Y/R/U)
prompt_status() {
  local var_name="$1"
  local label="$2"
  local input
  echo
  echo "$label"
  echo "  [Enter]=Green (omit)  Y=Yellow  R=Red  U=Unknown"
  read -rp "Status: " input
  input="${input^^}"  # uppercase
  case "$input" in
    Y|R|U) printf -v "$var_name" '%s' "$input" ;;
    *)     printf -v "$var_name" '%s' "" ;;  # empty = Green
  esac
}

# --- Collect fields ---
prompt TO       "1a. To (Recipient)"
prompt FROM     "1b. From (Sender)"

echo
echo "2. Size and Scope"
echo "  [Enter]=My Location  C=My Community  N=My County  R=My Region  O=Other Location"
read -rp "Code: " SCOPE
SCOPE="${SCOPE^^}"
case "$SCOPE" in
  C) SCOPE_TXT="My Community" ;;
  N) SCOPE_TXT="My County" ;;
  R) SCOPE_TXT="My Region" ;;
  O) SCOPE_TXT="Other Location" ;;
  *) SCOPE_TXT="My Location"; SCOPE="" ;;
esac

prompt DTG      "3. DTG (YYMMDD-HHMMz)"
prompt STATE    "4. State (2-letter)"
prompt GRID     "5. Grid (Maidenhead)"

echo
echo "6. Map Pin (should reflect worst status below)"
echo "  [Enter]=Green (omit)  Y=Yellow  R=Red"
read -rp "Map Pin: " MAP_PIN
MAP_PIN="${MAP_PIN^^}"
[[ "$MAP_PIN" =~ ^[YR]$ ]] || MAP_PIN=""

prompt_status POWER   "7. Commercial Power"
prompt_status WATER   "8. Public Water"
prompt_status MEDICAL "9. Medical"
prompt_status OTA     "10. Over Air Comms"
prompt_status TRAVEL  "11. Travel Conditions"
prompt_status INTERNET "12. Internet"
prompt_status FUEL    "13. Fuel"
prompt_status FOOD    "14. Food"
prompt_status CRIME   "15. Criminal Activity"
prompt_status CIVIL   "16. Civil"
prompt_status POLITICAL "17. Political"

echo
echo "18. Brief remarks (Type your remarks. Type 'DONE' on a new line or press Enter on an empty line when finished):"
echo "   (Include City and State first if reporting a location other than your own)"
REMARKS=""
while IFS= read -r line; do
    [[ "$line" == "DONE" ]] && break
    [[ -z "$line" && -z "$REMARKS" ]] && break
    if [[ -z "$REMARKS" ]]; then
        REMARKS="$line"
    else
        REMARKS="$REMARKS"$'\n'$line
    fi
done

# --- Generate output ---
{
  echo "==================="
  echo "AmRRON STATREP v5.1"
  echo "==================="
  echo

  [[ -n "$TO" ]]   && echo "1a. To: $TO"
  [[ -n "$FROM" ]] && echo "1b. From: $FROM"
  echo "2. Size and Scope: $SCOPE_TXT"
  [[ -n "$DTG" ]]   && echo "3. DTG: $DTG"
  [[ -n "$STATE" ]] && echo "4. State: $STATE"
  [[ -n "$GRID" ]]  && echo "5. Grid: $GRID"

  [[ -n "$MAP_PIN" ]] && echo "6. Map Pin: $MAP_PIN"

  [[ -n "$POWER" ]]     && echo "7. Commercial Power: $POWER"
  [[ -n "$WATER" ]]     && echo "8. Public Water: $WATER"
  [[ -n "$MEDICAL" ]]   && echo "9. Medical: $MEDICAL"
  [[ -n "$OTA" ]]       && echo "10. Over Air Comms: $OTA"
  [[ -n "$TRAVEL" ]]    && echo "11. Travel Conditions: $TRAVEL"
  [[ -n "$INTERNET" ]]  && echo "12. Internet: $INTERNET"
  [[ -n "$FUEL" ]]      && echo "13. Fuel: $FUEL"
  [[ -n "$FOOD" ]]      && echo "14. Food: $FOOD"
  [[ -n "$CRIME" ]]     && echo "15. Criminal Activity: $CRIME"
  [[ -n "$CIVIL" ]]     && echo "16. Civil: $CIVIL"
  [[ -n "$POLITICAL" ]] && echo "17. Political: $POLITICAL"

  if [[ -n "$REMARKS" ]]; then
    echo
    echo "18. Brief remarks:"
    echo "$REMARKS"
  fi

  echo
  echo "============="
  echo "End of Report"
  echo "============="
  echo "Filename: CALL-ST-RR-YYMMDD-HHMMZ-REPORT"
}

73 de VE5REV

This post is licensed under CC BY 4.0 by the author.