diff --git a/generate_header.py b/generate_header.py
new file mode 100755
index 0000000..ea85576
--- /dev/null
+++ b/generate_header.py
@@ -0,0 +1,184 @@
+#!python3
+# -*- coding: utf-8 -*-
+# vim:fenc=utf-8
+#
+# Copyright © 2023 Adrien Destugues <pulkomandy@pulkomandy.tk>
+#
+# Distributed under terms of the MIT license.
+
+"""
+generate locale_strings.h from .cs file
+
+This is normally done on Amiga systems using SimpleCat. However, that is not open source, and
+cannot be run anywhere else.
+"""
+
+import argparse
+
+parser = argparse.ArgumentParser(prog = "generate_locale_strings_header",
+    description = "Generate locale_strings.h from SimpleCat .cs file")
+
+parser.add_argument("input")
+parser.add_argument("-o", "--output", default="locale_strings.h")
+
+args = parser.parse_args()
+
+# Parse input
+# Generate "strings" array with dictionaries of 'name' -> 'text' strings
+
+infile = open(args.input, "r", encoding="iso-8859-15")
+
+state = 0
+strings = []
+
+for line in infile:
+    line = line.strip()
+
+    # Ignore comments and empty lines
+    if len(line) == 0 or line[0] == '#':
+        continue
+
+    if state == 0:
+        name = line
+        state = 1
+    elif state == 1:
+        strings.append({"name": name, "text": line})
+        state = 2
+    elif state == 2 and line[0] == ';':
+        state = 0
+
+# Write output
+
+outfile = open(args.output, "w", encoding="iso-8859-15")
+
+outfile.write("""
+#ifndef Locale_Strings
+#define Locale_Strings 1
+
+/* Locale Catalog Source File
+ *
+ * Automatically generated by generate_header.py
+ * Do NOT edit by hand!
+ *
+ */
+
+
+
+/****************************************************************************/
+
+
+#ifndef EXEC_TYPES_H
+#include <exec/types.h>
+#endif
+
+#ifdef CATCOMP_ARRAY
+#undef CATCOMP_NUMBERS
+#undef CATCOMP_STRINGS
+#define CATCOMP_NUMBERS
+#define CATCOMP_STRINGS
+#endif
+
+#ifdef CATCOMP_BLOCK
+#undef CATCOMP_STRINGS
+#define CATCOMP_STRINGS
+#endif
+
+
+
+/****************************************************************************/
+
+
+#ifdef CATCOMP_NUMBERS
+
+""")
+
+i = 0
+for string in strings:
+    outfile.write(f"#define {string['name']} {i}\n")
+    i = i + 1
+
+outfile.write(f"\n#define CATCOMP_LASTID {i - 1}")
+
+outfile.write("""
+
+#endif /* CATCOMP_NUMBERS */
+
+
+/****************************************************************************/
+
+
+#ifdef CATCOMP_STRINGS
+
+""")
+
+for string in strings:
+    outfile.write(f"#define {string['name']}_STR \"{string['text']}\"\n")
+
+outfile.write("""
+#endif /* CATCOMP_STRINGS */
+
+
+/****************************************************************************/
+
+
+#ifdef CATCOMP_ARRAY
+
+struct CatCompArrayType
+{
+    LONG   cca_ID;
+    STRPTR cca_Str;
+};
+
+static const struct CatCompArrayType CatCompArray[] =
+{
+""")
+
+for string in strings:
+    outfile.write(f"    {{{string['name']},(STRPTR){string['name']}_STR}},\n")
+
+outfile.write("""};
+
+#endif /* CATCOMP_ARRAY */
+
+
+/****************************************************************************/
+
+
+#ifdef CATCOMP_BLOCK
+
+static const char CatCompBlock[] =
+{
+""")
+
+i = 0
+for string in strings:
+    i0 = i >> 24
+    i1 = i >> 16
+    i2 = i >> 8
+    i3 = i >> 0
+    l = len(string['text']) + 1
+    odd = False
+    if (l & 1) != 0:
+        odd = True
+        l = l + 1
+    l0 = l >> 8
+    l1 = l
+    outfile.write(f"    \"\\x{i0:02X}\\x{i1:02X}\\x{i2:02X}\\x{i3:02X}\\x{l0:02X}\\x{l1:02X}\"\n")
+    if odd:
+        outfile.write(f"    {string['name']}_STR \"\\x00\\x00\"\n")
+    else:
+        outfile.write(f"    {string['name']}_STR \"\\x00\"\n")
+    i = i + 1
+
+outfile.write("""};
+
+#endif /* CATCOMP_BLOCK */
+
+
+/****************************************************************************/
+
+
+
+#endif /* Locale_Strings */
+
+""")
