════════════════════════════════════════════════════════════════════════════════
                    DOS GAMES LAUNCHER - DOKUMENTATIONSDATEI
════════════════════════════════════════════════════════════════════════════════

 INHALTSVERZEICHNIS
 ──────────────────────────────────────────────────────────────────────────────
    1. Programmbeschreibung
    2. Lizenz
    3. Systemvoraussetzungen
    4. Installation
    5. AUTOEXEC.BAT-Integration und Errorlevel (Rückgabewerte)
    6. Dateien im Lieferumfang und zur Laufzeit
    7. Konfiguration der LAUNCHER.INI
    8. Tastaturbelegung
    9. Marker-System
   10. Genre-Filter (TAB)
   11. Diagnose-System: [INI]-Indikator und LAUNCHER.LOG
   12. Warnmeldungen
   13. Limits und Begrenzungen
   14. Zeichensatz: UTF-8 vs. CP437
   15. Sicheres Speichern der Marker
   16. Hinweise und bekannte Einschränkungen
   17. Versionsgeschichte


════════════════════════════════════════════════════════════════════════════════
1. PROGRAMMBESCHREIBUNG
════════════════════════════════════════════════════════════════════════════════

 Der DOS GAMES LAUNCHER ist ein kompaktes 16-Bit-Real-Mode-Programm für MS-DOS,
 das eine übersichtliche, durchsuchbare und kategorisierbare Liste von DOS-
 Spielen (oder beliebigen anderen Programmen) auf den Bildschirm zeichnet, sie
 mit der Tastatur bedienbar macht und das ausgewählte Spiel per Batchdatei
 startet.

 KERNIDEE
   - Eine einzige Konfigurationsdatei (LAUNCHER.INI) beschreibt die gesamte
     Sammlung samt Ordnerstruktur, Kategorien und Startbefehlen.
   - Pro Eintrag wird ein Block aus Batch-Befehlen mitgeführt. Beim Start
     schreibt der Launcher diese Befehle in _RUN.BAT und beendet sich.
     AUTOEXEC.BAT (oder eine eigene Batchdatei) führt _RUN.BAT aus, löscht sie
     und ruft den Launcher erneut auf.
   - Das Programm ist eine einzige EXE-Datei (~12 KB), lässt sich per LOADHIGH
     in den hohen Speicher laden und benötigt keinerlei Laufzeitbibliotheken
     oder Treiber außer dem normalen DOS- und VGA-Textmodus.

 EINSATZBEREICHE
   - Spielesammlung auf einem Retro-PC (echte Hardware) bequem anwählen.
   - Universeller Programmstarter unter DOSBox, DOSBox Staging, DOSBox-X, PCem
     und 86Box für eine gepflegte Benutzeroberfläche.
   - Bootbares USB- oder Floppy-System mit kuratierter Programmliste.


════════════════════════════════════════════════════════════════════════════════
2. LIZENZ
════════════════════════════════════════════════════════════════════════════════

 DOS GAMES LAUNCHER  v1.10 (DE)
 Copyright (c) 2026 ThoMiEn. Alle Rechte vorbehalten.
 https://www.thomien.de

 Freeware - kostenlose private, nicht-kommerzielle Nutzung.
 Weitergabe nur in unveränderter Originalform zugelassen!
 Modifikation, Rev-Eng. und kommerzielle Nutzung untersagt!
 Die Nutzung erfolgt auf eigene Gefahr!

 Der Quellcode dieses Programms ist nicht Bestandteil der Distribution und wird
 vom Autor nicht öffentlich gemacht. Jegliche Form der Disassemblierung, Dekom-
 pilierung oder anderweitiger Rekonstruktion des Quellcodes (Reverse
 Engineering) ist ausdrücklich untersagt, ebenso jede Modifikation der mitge-
 lieferten LAUNCHER.EXE oder die Erstellung abgeleiteter Werke. Erlaubt ist
 ausschließlich die unveränderte Nutzung und Weitergabe der Originaldateien.

 Mit der Verwendung dieser Software erklärt sich der Anwender mit diesen Bedin-
 gungen einverstanden. Bei Verbreitung muss diese LAUNCHER.TXT, die
 LAUNCHER.EXE und die Original-LAUNCHER.INI sowie die im Header enthaltenen
 Copyright-Vermerke vollständig und unverändert mitgeliefert werden. Eine Auf-
 nahme in kommerzielle Pakete, Bundles, Magazin-Cover-CDs/-DVDs oder kosten-
 pflichtige Downloads ist ohne ausdrückliche schriftliche Genehmigung des Au-
 tors untersagt.


════════════════════════════════════════════════════════════════════════════════
3. SYSTEMVORAUSSETZUNGEN
════════════════════════════════════════════════════════════════════════════════

 - MS-DOS 3.0 oder kompatibel.
 - 386 oder neuer (das Programm nutzt 386-Befehle).
 - VGA-/EGA-/CGA-Textmodus 80x25 (Standard-DOS-Textmodus).
 - Ca. 16 KB freier konventioneller Speicher (LOADHIGH-tauglich).
 - Editor zur Bearbeitung von LAUNCHER.INI in UTF-8.


════════════════════════════════════════════════════════════════════════════════
4. INSTALLATION
════════════════════════════════════════════════════════════════════════════════

 1. Kopieren Sie LAUNCHER.EXE und LAUNCHER.INI in ein Verzeichnis Ihrer Wahl.
 2. Passen Sie LAUNCHER.INI an Ihre Programmsammlung an (siehe Abschnitt 7).
 3. Optional: Tragen Sie das Schleifen-Konstrukt in Ihre AUTOEXEC.BAT ein,
    damit der Launcher beim Booten automatisch erscheint (siehe Abschnitt 5).

 HINWEIS
   Die LAUNCHER.EXE muss aus ihrem eigenen Verzeichnis gestartet werden, damit
   LAUNCHER.INI, _RUN.BAT, LAUNCHER.LOG und LAUNCHER.TMP im selben Pfad gefun-
   den bzw. angelegt werden.


════════════════════════════════════════════════════════════════════════════════
5. AUTOEXEC.BAT-INTEGRATION UND ERRORLEVEL (RÜCKGABEWERTE)
════════════════════════════════════════════════════════════════════════════════

 EMPFOHLENES SCHLEIFEN-KONSTRUKT

   @echo off
   :loop
   c:
   cd \launcher
   launcher.exe
   if errorlevel 2 goto end
   if errorlevel 1 goto dos
   if exist _run.bat call _run.bat
   if exist _run.bat del _run.bat
   goto loop
   :dos
   command
   goto loop
   :end
   exit

   Tragen Sie bei "c:" und "cd \launcher" Laufwerk und Verzeichnis Ihrer
   LAUNCHER.EXE ein; liegt sie direkt im Stammverzeichnis, genügt "cd \".
   Diese beiden Zeilen müssen INNERHALB der Schleife stehen, nicht davor —
   sie sind der Grund, warum die Schleife nicht hängenbleibt:

   - Nach F10 landen Sie in der DOS-Shell. Wechseln Sie dort mit "cd" das
     Verzeichnis und beenden die Shell mit EXIT, liegt LAUNCHER.EXE nicht
     mehr im aktuellen Verzeichnis. Ohne die beiden Zeilen ruft die Schleife
     dann endlos ein Programm auf, das dort nicht existiert.
   - Dasselbe passiert, wenn ein Spiel abstürzt, bevor sein Batch-Block mit
     "cd.." zurückwechselt. Auch dann bliebe die Schleife in einem Unter-
     verzeichnis stecken.

   Das "@echo off" gehört an den Anfang der AUTOEXEC.BAT. Ohne es schreibt
   DOS jede Zeile der Schleife mit: beim Sprung in die DOS-Shell stünden
   sonst "if errorlevel ..." und "command" auf dem Bildschirm. Es wirkt auch
   auf _RUN.BAT, die ja per CALL gestartet wird — die Befehlszeilen der
   Spiele erscheinen dann ebenfalls nicht mehr, nur noch das, was das Spiel
   selbst ausgibt.

 VERHALTEN
   - ENTER auf einem Eintrag startet das gewählte Programm: der Launcher
     schreibt den Batch-Block des Eintrags in _RUN.BAT und beendet sich mit
     Errorlevel 0. Das Schleifen-Konstrukt führt _RUN.BAT aus, löscht sie und
     startet den Launcher neu.
   - F10 verlässt den Launcher mit Errorlevel 1 in einen interaktiven DOS-
     Shell-Aufruf (COMMAND). Verlässt der Benutzer die Shell per EXIT, wird der
     Launcher wieder geladen.
   - ESC verlässt den Launcher mit Errorlevel 2 endgültig (Schleife bricht ab).

 ABBRUCH BEIM START
   Kommt der Launcher gar nicht erst hoch, gibt er eine Meldung aus und
   beendet sich sofort:

     LAUNCHER.INI nicht gefunden oder nicht lesbar!  Errorlevel 1
     LAUNCHER.INI enthält keine Titel!               Errorlevel 1
     Nicht genug Speicher!                           Errorlevel 2

   Errorlevel 1 und 2 sind damit doppelt belegt — einmal durch F10 bzw. ESC,
   einmal durch diese Abbrüche. Im Schleifen-Konstrukt landet man bei Error-
   level 1 in der DOS-Shell und kann die LAUNCHER.INI dort berichtigen; nach
   EXIT startet der Launcher erneut.


════════════════════════════════════════════════════════════════════════════════
6. DATEIEN IM LIEFERUMFANG UND ZUR LAUFZEIT
════════════════════════════════════════════════════════════════════════════════

 LAUNCHER.EXE  Das Programm selbst.
 LAUNCHER.INI  Konfiguration der Programm-Sammlung.
 LAUNCHER.TXT  Diese Dokumentation.

     _RUN.BAT  Wird beim Programmstart geschrieben. Enthält den Batch-Block des
               gewählten Eintrags. Wird von der AUTOEXEC.BAT-Schleife nach Aus-
               führung gelöscht.
 LAUNCHER.LOG  Wird bei der ersten Diagnose-Warnung angelegt. Bleibt bei saube-
               rer INI nicht existent bzw. wird gelöscht.
 LAUNCHER.TMP  Tritt nur kurzzeitig beim Speichern auf. Bei einem Umbenennungs-
               fehler nach erfolgreichem Löschen der Original-INI bleibt sie
               bewusst stehen — der Benutzer kann sie dann von Hand in
               LAUNCHER.INI umbenennen.


════════════════════════════════════════════════════════════════════════════════
7. KONFIGURATION DER LAUNCHER.INI
════════════════════════════════════════════════════════════════════════════════

 GRUNDREGELN
   - UTF-8 ist verpflichtend! Der Launcher prüft die Datei streng nach dem
     UTF-8-Standard (RFC 3629) und erkennt dabei auch versteckt fehlerhafte
     Zeichenfolgen. Bei Verstoß: rotes [INI] und entsprechende Meldung.
   - Eine BOM am Datei-Anfang wird toleriert, aber gemeldet.
   - Zeilen, die mit ';' beginnen, sind Kommentare und werden überall still
     ignoriert.
   - Die Datei darf maximal 32 KB groß sein.

            SYNTAX  FUNKTION
   ───────────────  ───────────────────────────────────────────────────────────
                 ;  Kommentar: Wird ignoriert. Auch innerhalb von Batch-Blöcken
                    und vor dem ersten Sektionskopf erlaubt.
           [Titel]  Einzelner Titel ohne Genre.
     [Titel;GENRE]  Titel mit Genre. Beim Drücken von TAB lassen sich nur Ein-
                    träge eines Genres anzeigen.
          [Titel]!  Marker Stufe 1 (laufend, gelb).
    [Titel;GENRE]!  Marker Stufe 1 (laufend, gelb).
         [Titel]!!  Marker Stufe 2 (durchgespielt, grün).
   [Titel;GENRE]!!  Marker Stufe 2 (durchgespielt, grün).
        [Titel]!!!  Marker Stufe 3 (Problem, rot).
  [Titel;GENRE]!!!  Marker Stufe 3 (Problem, rot).
   [+Gruppentitel]  Öffnet einen Ordner/eine Gruppe. Folgende Einträge gehören
                    zur Gruppe, bis [-] folgt. Gruppen erlauben kein Genre und
                    keine Marker-Suffixe.
               [-]  Schließt die aktuelle Gruppe.

   Marker werden mit der Leertaste durchgeschaltet (0 -> 1 -> 2 -> 3 -> 0) und
   beim Marker-Wechsel sofort und ausfallsicher in die INI zurückgeschrieben
   (siehe Abschnitt 15).

   Beliebige Textzeilen unterhalb eines Sektionskopfs gehören zum Batch-Block
   dieses Eintrags. Sie werden beim Start in _RUN.BAT geschrieben — mit drei
   Ausnahmen:
   - Zeilen, die mit ';' beginnen, werden nicht übernommen.
   - Zeilen, die mit "REM" beginnen, werden nicht übernommen (unabhängig von
     Groß-/Kleinschreibung).
   - Zeilen, die mit '[' beginnen, werden nicht übernommen.

   Hat ein Eintrag nach diesen Filtern keine ausführbaren Zeilen mehr, wird er
   ausgegraut und ist mit ENTER nicht startbar (das ist der reguläre Weg, um
   reine Platzhalter-Sektionen anzulegen, ohne Diagnosewarnungen zu erzeugen).

 BEISPIEL
   [+Das Schwarze Auge - Die Nordland-Trilogie]
   [Teil 1: Die Schicksalsklinge;ROLLENSPIEL]!!
   cd dsa1
   imgmount d cd-rom\1.cue -t cdrom
   if not exist sound.cfg soundset.exe
   intro.exe
   schickm.exe
   mount -u d
   cd..
   [Teil 2: Sternenschweif;ROLLENSPIEL]!
   cd dsa2
   imgmount d cd-rom\1.cue cd-rom\2.cue -t cdrom
   schweif.exe
   mount -u d
   cd..
   [Teil 3: Schatten über Riva;ROLLENSPIEL]
   cd dsa3
   imgmount d cd-rom\1.cue -t cdrom
   cd data
   if not exist riva.cfg setup.exe
   cd..
   riva.exe
   mount -u d
   cd..
   [-]

   [Indiana Jones and the Fate of Atlantis;POINT-AND-CLICK-ADVENTURE]
   cd ij2
   atlantis.exe v mo s
   rem          │ │  ├ i = Internal speaker
   rem          │ │  ├ a = Adlib(tm) sounds
   rem          │ │  ├ s = SoundBlaster(tm) sound
   rem          │ │  └ r = Roland(tm) sounds
   rem          │ ├─── k = Keyboard
   rem          │ ├─── j = Joystick
   rem          │ └── mo = Mouse
   rem          ├───── v = VGA graphics
   rem          ├───── m = MCGA graphics
   rem          └───── e = EGA graphics
   cd..

 WAS BEI EINTRÄGEN UND GRUPPEN UNTERSTÜTZT WIRD
   - Eine Verschachtelungsebene (Gruppe -> Spiel). Verschachtelte Gruppen sind
     nicht zulässig und werden gemeldet.
   - Ein Genre wird immer in Großbuchstaben umgewandelt (auch die deutschen
     Umlaute ä/ö/ü/é werden zu Ä/Ö/Ü/É; aus ß wird "SS"). Gleiche Genres in
     unterschiedlicher Schreibweise fasst der Launcher dadurch zusammen.
   - Maximal 16 verschiedene Genres werden gespeichert; weitere werden gemeldet
     und ignoriert.


════════════════════════════════════════════════════════════════════════════════
8. TASTATURBELEGUNG
════════════════════════════════════════════════════════════════════════════════

    TASTE  FUNKTION
 ────────  ────────────────────────────────────────────────────────────────────
    ENTER  Aktuellen (aktiven) Eintrag starten.
    SPACE  Marker-Stufe durchschalten (0 -> 1 -> 2 -> 3 -> 0).
      TAB  Genre-Filter durchschalten (ALLE GENRES -> ... -> ALLE GENRES). In-
           aktiv, wenn höchstens ein Genre erkannt wurde.
 0–9, A–Z  Springt zum nächsten Eintrag, dessen Name mit diesem Zeichen beginnt
           (ignoriert Groß-/Kleinschreibung, mit Schleifenumbruch).
        +  Alle Ordner aufklappen.
        -  Alle Ordner zuklappen.
        ←  Auf Titel in einer Gruppe: zur Gruppe springen.
           Auf offener Gruppe: Ordner zuklappen.
        →  Ordner aufklappen.
        ↑  Auswahlbalken eine Zeile hoch.
        ↓  Auswahlbalken eine Zeile runter.
    Bild↑  Eine Seite hoch.
    Bild↓  Eine Seite runter.
     Pos1  Sprung zum Listenanfang.
     Ende  Sprung zum Listenende.
       F1  Information zum Lizenztext.
      F10  Launcher beenden und Sprung zur DOS-Shell.
      ESC  Launcher beenden und Schleife verlassen.

 DYNAMISCHE RÜCKMELDUNG
   Inaktive Tasten werden in der zweizeiligen Statusleiste am unteren Bild-
   schirmrand grau dargestellt — und beim Drücken ebenfalls ignoriert. Anzeige
   und Funktion stimmen also immer überein. So sieht der Benutzer auf einen
   Blick, was im aktuellen Kontext möglich ist.


════════════════════════════════════════════════════════════════════════════════
9. MARKER-SYSTEM
════════════════════════════════════════════════════════════════════════════════

 Der Launcher erlaubt, jedem aktiven Eintrag eine von vier Stufen zuzuweisen:

   0 = Keine Markierung
   1 = Laufend (gelb)
   2 = Durchgespielt (grün)
   3 = Problem (rot)

 Die Stufen 1–3 werden in der Liste als farbiges "*" hinter dem Eintrag ange-
 zeigt (gelb/grün/rot), die Stufe 0 ist ohne Symbol.

 BEDIENUNG
   Auf dem Eintrag stehen, Leertaste drücken — die Stufe rotiert:

     0 -> 1 -> 2 -> 3 -> 0.

   Die Änderung wird sofort in der INI gespeichert (ausfallsicher über
   LAUNCHER.TMP, siehe Abschnitt 15).


════════════════════════════════════════════════════════════════════════════════
10. GENRE-FILTER (TAB)
════════════════════════════════════════════════════════════════════════════════

 Jedes Spiel kann optional einer Kategorie zugeordnet werden:

   [Titel-1;GENRE-1]
   [Titel-2;GENRE-2]

 TAB schaltet zwischen den Filtern durch:

   ALLE GENRES -> GENRE-1 -> GENRE-2 -> ALLE GENRES

 BEI AKTIVEM FILTER WERDEN
   - Spiele direkt nach passendem Genre gefiltert.
   - Gruppen nur angezeigt, wenn mindestens ein Titel im Filter passt.
   - Titel nur angezeigt, wenn ihr Genre passt und ihre Gruppe offen ist.

 SONDERFÄLLE
   - Kein oder nur ein Genre in der INI: TAB ist deaktiviert.
   - Gibt es genau ein Genre und trägt jeder Titel es auch, zeigt der untere
     Rand dessen Namen statt "ALLE GENRES". Sobald auch nur ein Titel ohne
     Genre dabei ist, steht dort "ALLE GENRES".
   - Vom Genre-Namen sind im unteren Rand maximal 43 Zeichen sichtbar; längere
     Namen werden auf 40 Zeichen plus "..." gekürzt.
   - Maximal 16 Genres werden registriert; weitere lösen eine Warnung aus.
   - Vereinheitlichung: Großschreibung inkl. ä/ö/ü/é -> Ä/Ö/Ü/É, ß -> SS.
     Schreibvarianten werden dadurch automatisch zusammengefasst.


════════════════════════════════════════════════════════════════════════════════
11. DIAGNOSE-SYSTEM: [INI]-INDIKATOR UND LAUNCHER.LOG
════════════════════════════════════════════════════════════════════════════════

 [INI]-INDIKATOR
   Oben rechts im Rahmen erscheint dauerhaft der dreifarbige Indikator:

   GRÜN  Keine Warnungen. INI vollständig sauber.
   GELB  Nur doppelte Titel oder doppelte Gruppen festgestellt.
         Das ist erlaubt, aber meist unbeabsichtigt — daher der Hinweis.
    ROT  Mindestens eine "echte" Warnung. Details in LAUNCHER.LOG.

 LAUNCHER.LOG
   - Die Datei wird erst im Moment der ersten "echten" Warnung angelegt.
   - Zeichensatz: UTF-8 (lesbar in modernen Editoren).
   - Sie beginnt mit der Kopfzeile "LAUNCHER.INI - DIAGNOSE", danach folgt
     eine Zeile pro Warnung. Die Zeilennummer steht rechtsbündig, damit die
     Doppelpunkte genau untereinander stehen:

          Zeile 1: <Meldung>
         Zeile 42: <Meldung>
        Zeile 386: <Meldung>

   Warnungen, die die ganze Datei betreffen, tragen statt einer Zeilennummer
   das Wort "Datei" — der Doppelpunkt sitzt an derselben Stelle:

            Datei: <Meldung>

   Wie breit die Spalte ist, richtet sich nach der höchsten Zeilennummer der
   geladenen Datei. Eine INI mit 26 Zeilen braucht zwei Spalten, eine mit
   1300 Zeilen vier. So bleibt kein Platz ungenutzt.

   - Gab es beim Einlesen keine einzige Warnung, wird eine eventuell übrig
     gebliebene alte LAUNCHER.LOG gelöscht.
   - Wenn ein Schreibfehler auftritt, wird die Protokollierung automatisch ab-
     geschaltet. Das Programm läuft im Hintergrund normal weiter, speichert
     aber keine neuen Meldungen mehr.


════════════════════════════════════════════════════════════════════════════════
12. WARNMELDUNGEN
════════════════════════════════════════════════════════════════════════════════

 Die Nummern und WC_-Kürzel dienen nur der Bezugnahme in dieser Datei. In
 LAUNCHER.LOG steht ausschließlich der Meldungstext — weder Nummer noch
 Kürzel tauchen dort auf.

 CODE  SYNTAX       MELDUNG IN LAUNCHER.LOG
 ────  ───────────  ───────────────────────────────────────────────────────────
    1  WC_FILEBIG   INI größer als 32 KB - Rest wird ignoriert
    2  WC_MAXGAMES  Mehr als 128 Einträge - Rest wird ignoriert
    3  WC_NAMELEN   Name länger als 70 Zeichen - wird abgeschnitten
    4  WC_POOLFULL  Namensspeicher voll - Name wird abgeschnitten
    5  WC_GENFULL   Mehr als 16 Genres - Genre wird ignoriert
    6  WC_NOBRK     '[' ohne schließendes ']' - Zeile verworfen
    7  WC_BANGS     Mehr als 3 Marker-Zeichen - Zeile verworfen
    8  WC_CLOSEX    '[-' mit Zusatztext - gilt als Titel
    9  WC_GRPGEN    Genre an einer Gruppenzeile - nicht erlaubt
   10  WC_GRPMARK   Marker an einer Gruppenzeile - wird ignoriert
   11  WC_NESTED    Verschachtelte Gruppe - innere überschreibt äußere
   12  WC_UNCLOSED  Gruppe nicht geschlossen - [-] fehlt am Datei-Ende
   13  WC_EMPTY     Leerer Sektionsname
   14  WC_DUPSEMI   Mehrere ';' im Titel - ab dem ersten gilt Genre
   15  WC_ORPH1     Inhalt vor der ersten Sektion - wird ignoriert
   16  WC_ORPH2     Inhalt nach [-] vor nächster Sektion - ignoriert
   17  WC_IOERR     Lesefehler bei der INI
   18  WC_BADCHAR   Unbekanntes Sonderzeichen - wird als ? angezeigt
   19  WC_BOM       Unsichtbare Kennung am Datei-Anfang (BOM)
   20  WC_TXTAFTER  Text nach ']' am Zeilenende - Zeile verworfen
   21  WC_NOTUTF8   INI ist nicht UTF-8 - bitte als UTF-8 speichern
   22  WC_NUL       Null-Zeichen (Code 0) - INI vermutlich beschädigt
   23  WC_SEMIBAT   ';'-Kommentar im Batch - DOS bricht beim Start ab
   24  WC_CLOSEMRK  Marker an '[-]' - wird ignoriert
   25  WC_WHITENM   Sektionsname nur aus Leerzeichen/Tabs
   26  WC_EMPTYGRP  (abgeschaltet, siehe unten)
   27  WC_GENREDUP  (abgeschaltet, siehe unten)
   28  WC_BRACKETS  Zusätzliche '[' oder ']' im Sektionsnamen
   29  WC_CTRLCHAR  Steuerzeichen im Sektionsnamen
   30  WC_INNERWS   Leerzeichen direkt nach '[' oder vor ']'
   31  WC_LINEEND   Zeilenenden nicht durchgehend CRLF (DOS-Standard)
   32  WC_NOEOL     Datei endet ohne Zeilenumbruch
   33  WC_BATLINE   Batch-Zeile länger als 128 Zeichen - DOS-Grenze
   34  WC_DUPGROUP  (abgeschaltet, siehe unten)
   35  WC_STRAYCL   '[-]' ohne offene Gruppe - wird ignoriert
   36  WC_DEADGRP   (abgeschaltet, siehe unten)
   37  WC_MARKDEAD  (abgeschaltet, siehe unten)

 Fünf Codes sind absichtlich abgeschaltet und erscheinen nie im Protokoll:

   26  Gruppe ohne Einträge (leerer Ordner)
   27  Gleiches Genre in abweichender Schreibweise
   34  Gruppenname mehrfach vergeben
   36  Gruppe, deren Einträge alle ausgegraut sind
   37  Marker an einem ausgegrauten Eintrag

 Die zugrunde liegenden Fälle sind entweder erlaubt (leere Gruppen als Platz-
 halter) oder werden durch die Vereinheitlichung der Genre-Schreibweise schon
 vorher abgefangen. Doppelte Titel und doppelte Gruppen wiederum werden bewusst
 nicht protokolliert, sondern nur durch den gelben Indikator signalisiert.

 Manche Meldungen erscheinen nur einmal, auch wenn der Fall mehrfach auftritt:
 2, 15, 31 und 32 höchstens einmal je Datei, 16 einmal je '[-]' und 33 einmal
 je Eintrag.


════════════════════════════════════════════════════════════════════════════════
13. LIMITS UND BEGRENZUNGEN
════════════════════════════════════════════════════════════════════════════════

 128  Einträge insgesamt (inkl. Gruppenkopfzeilen).
  17  Sichtbare Zeilen pro Seite.
  16  Eindeutige Genres.
  70  Maximale Sektionsnamen-Länge in Zeichen (nach Umwandlung für DOS).
  32  Maximale INI-Dateigröße in KB.
   8  Namensspeicher insgesamt in KB (Titel und Genres zusammen).
 128  Maximale Batch-Zeilenlänge in Zeichen (Grenze von MS-DOS).

 Die 70 Zeichen sind die Speichergrenze. Sichtbar ist weniger, denn
 Einrückung, Ordnersymbol und Marker brauchen selbst Platz. Was nicht passt,
 wird mit "..." gekürzt:

   66  Zeichen bei Titel ohne Marker.
   64  Zeichen bei Titel mit Marker.
   62  Zeichen bei Titel in einem Ordner ohne Marker.
   60  Zeichen bei Titel in einem Ordner mit Marker.
   62  Zeichen bei aufgeklappten Ordnername.
   52  Zeichen bei zugeklappten Ordnername
       (bei zwei- oder dreistelliger Titelzahl je ein Zeichen weniger).

 Rechts bleibt immer eine Spalte frei, damit der Text nicht am Rahmen klebt.


════════════════════════════════════════════════════════════════════════════════
14. ZEICHENSATZ: UTF-8 vs. CP437
════════════════════════════════════════════════════════════════════════════════

 Hier treffen zwei Zeichensätze aufeinander: moderne Editoren speichern Text
 als UTF-8, der DOS-Bildschirm stellt dagegen den alten Zeichensatz CP437 dar.
 Der Launcher hält beide sauber auseinander:

     Bildschirm  CP437  Umlaute als DOS-Zeichen.
   LAUNCHER.INI  UTF-8  Pflicht — so speichern moderne Editoren.
   LAUNCHER.LOG  UTF-8  Damit das Protokoll am PC lesbar bleibt.

 Beim Einlesen übersetzt der Launcher jeden Namen für die Anzeige nach CP437,
 legt das Ergebnis aber in einer Kopie ab. Der Originaltext der INI bleibt un-
 verändert, damit beim Speichern nichts verloren geht.

 Übersetzt werden alle 128 Sonderzeichen des DOS-Zeichensatzes:
   - Deutsche Umlaute (ä, ö, ü, Ä, Ö, Ü und ß).
   - Französische, spanische und skandinavische Akzentzeichen.
   - Griechische Buchstaben sowie mathematische Zeichen.
   - Rahmen- und Blockgrafikzeichen.

 SONDERFÄLLE
   - Zeichen, die der DOS-Zeichensatz nicht kennt (z. B. Emoji), erscheinen
     als "?" und werden gemeldet.
   - Falsch gespeicherte Zeichen werden ebenfalls zu "?".
   - Steuerzeichen im Namen (außer Tabulator) werden gemeldet.


════════════════════════════════════════════════════════════════════════════════
15. SICHERES SPEICHERN DER MARKER
════════════════════════════════════════════════════════════════════════════════

 WANN GESPEICHERT WIRD
   Sobald die Leertaste auf einem aktiven Eintrag die Marker-Stufe ändert.
   Der Launcher schreibt die LAUNCHER.INI dann sofort neu.

   Dabei entfernt er Marker, die er ohnehin nicht beachtet: ein "!" hinter
   einer Gruppenzeile wie "[+Gruppentitel]!" verschwindet beim nächsten Spei-
   chern. Für diesen Fall stand vorher schon eine Warnung im Protokoll. Ein
   "!" hinter "[-]" bleibt dagegen stehen — diese Zeile ist kein Eintrag und
   wird unverändert durchgereicht.

 DATENSICHERHEIT
   Die vorhandene LAUNCHER.INI wird nie direkt überschrieben. Stattdessen:

   1. Der vollständige neue Inhalt wird in LAUNCHER.TMP geschrieben.
   2. Jeder Schreibvorgang wird geprüft. Meldet DOS einen Fehler oder kommen
      weniger Zeichen an als verlangt, gilt der Vorgang als gescheitert.
   3. LAUNCHER.TMP wird geschlossen.
   4. Die alte LAUNCHER.INI wird gelöscht.
   5. LAUNCHER.TMP wird in LAUNCHER.INI umbenannt.

 WENN ETWAS SCHIEFGEHT
   - Fehler beim Schreiben oder Schließen, also noch vor dem Löschen der
     alten Datei: LAUNCHER.TMP wird verworfen, LAUNCHER.INI bleibt
     unverändert.
   - Fehler beim Umbenennen, also nach dem Löschen der alten Datei:
     LAUNCHER.TMP bleibt absichtlich stehen. Sie enthält alle Daten vollstän-
     dig und kann von Hand in LAUNCHER.INI umbenannt werden.
   - Ist die LAUNCHER.INI größer als 32 KB, wurde sie beim Laden abgeschnit-
     ten. Der Launcher speichert dann gar nicht, sondern meldet das und lässt
     die Datei unangetastet — andernfalls ginge alles hinter der 32-KB-Grenze
     verloren. Die Marker-Änderung wird zurückgenommen.

   Scheitert das Speichern, nimmt der Launcher die Marker-Änderung auf dem
   Bildschirm zurück — Anzeige und Datei bleiben so immer gleich — und
   schreibt den Grund rot in die Zeile des Auswahlbalkens. Die Meldung bleibt
   stehen, bis die nächste Taste gedrückt wird; die Liste bleibt dabei
   sichtbar, der Launcher wird nicht verlassen.

   Diese Meldungen gibt es:

     Speichern fehlgeschlagen - Markierung nicht übernommen!
     Umbenennen fehlgeschlagen - Daten liegen in LAUNCHER.TMP!
     INI größer als 32 KB - Marker werden nicht gespeichert!

   Auf demselben Weg meldet sich auch ein Fehler beim Spielstart:

     _RUN.BAT konnte nicht erstellt werden!

 In keinem Fall gehen Daten verloren. Schlimmstenfalls muss eine Datei von
 Hand umbenannt werden.


════════════════════════════════════════════════════════════════════════════════
16. HINWEISE UND BEKANNTE EINSCHRÄNKUNGEN
════════════════════════════════════════════════════════════════════════════════

 - Das Programm setzt einen 80x25-Textmodus voraus. Grafische Modi werden nicht
   angesteuert.
 - LAUNCHER.INI muss als UTF-8 ohne BOM gespeichert werden. BOM löst eine War-
   nung aus, wird aber toleriert.
 - Es wird eine Verschachtelungsebene unterstützt (Gruppe -> Titel).
   Tiefer verschachtelte Strukturen sind nicht vorgesehen.
 - Mehrere ";" im Titel sind nicht erlaubt; das erste ";" trennt Titel und
   Genre, weitere ";" lösen eine Warnmeldung aus.
 - Beim Marker-Wechsel wird die INI jedes Mal komplett zurückgeschrieben. Auf
   Disketten oder sehr langsamen Medien ist das spürbar.
 - Beim Beenden (F10/ESC) wird keine INI geschrieben — nur Marker-Änderungen
   werden persistent. Die INI wird beim Marker-Wechsel sofort gespeichert,
   nicht erst beim Beenden.
 - Gruppen können geöffnet/geschlossen werden, aber dieser Zustand ist nicht
   persistent — beim Neustart sind alle Gruppen wieder im Standard-Zustand
   (geschlossen).


════════════════════════════════════════════════════════════════════════════════
17. VERSIONSGESCHICHTE
════════════════════════════════════════════════════════════════════════════════

 v1.00 (DE)

   - Erste Veröffentlichung.


 v1.10 (DE)

   - Ende-Taste: Bei genau 128 sichtbaren Einträgen sprang die Auswahl zwar auf
     den letzten Eintrag, das Fenster blieb aber am Listenanfang stehen. Der
     Auswahlbalken war dadurch nicht mehr zu sehen und ließ sich mit den Pfeil-
     tasten auch nicht zurückholen.
   - Bild↑: Stand die Auswahl auf Eintrag 128, sprang die Taste an den Listen-
     anfang statt eine Seite nach oben.
   - Mehr als 128 Einträge: Der Batch-Block des 128. Eintrags wuchs bis zum
     Datei-Ende. Beim Start schrieb der Launcher dann den gesamten Rest der
     LAUNCHER.INI in _RUN.BAT — samt der [Titel]-Zeilen, die DOS anschließend
     als Befehle auszuführen versuchte.
   - Ordner mit 100 bis 109 Titeln zeigten eine falsche Anzahl an: statt
     "(105 Titel)" erschien "(15 Titel)". Derselbe Rechenfehler steckte in der
     Titelzählung der Fußleiste: aus "106/106" wurde dort "16/16".
   - Ein Titel mit leerem Genre, also "[Name;]", zerstörte beim ersten Bild-
     schirmaufbau den gesamten Bildschirminhalt. Der Launcher war damit sofort
     unbedienbar.
   - War die LAUNCHER.INI größer als 32 KB, ging beim Setzen eines Markers
     alles hinter der 32-KB-Grenze unwiederbringlich verloren. Der Launcher
     speichert in diesem Fall jetzt gar nicht und sagt warum.
   - Ein "[-]" noch vor dem ersten Eintrag machte diesen ersten Eintrag dauer-
     haft unstartbar.
   - Verworfene Sektionszeilen — etwa "[" ohne schließende Klammer — landeten
     im Batch-Block des vorherigen Eintrags und damit in _RUN.BAT, wo DOS sie
     als Befehl auszuführen versuchte.
   - Nach einem Schreibfehler legte der Launcher die LAUNCHER.LOG neu an und
     vernichtete dabei alle bis dahin gesammelten Meldungen.
   - Ein Genre mit genau 256 Zeichen wurde als leeres Genre abgelegt.
   - Die Fußleiste zeigte bei genau einem Genre dessen Namen, auch wenn Titel
     ohne dieses Genre in der Liste standen. Sie behauptete damit einen Filter,
     der gar nicht aktiv war.
   - Die Meldung zu den Zeilenenden sprach von "gemischten" Zeilenenden, auch
     wenn eine Datei durchgehend nur LF benutzte. Sie heißt jetzt
     "Zeilenenden nicht durchgehend CRLF (DOS-Standard)".
   - Alle Meldungen in LAUNCHER.LOG sind in verständlichem Deutsch neu gefasst.
     Abschnitt 12 gibt sie jetzt wortgleich wieder.
   - "LAUNCHER.INI nicht gefunden!" heißt jetzt
     "LAUNCHER.INI nicht gefunden oder nicht lesbar!" — die Meldung erscheint
     auch dann, wenn die Datei zwar vorhanden, aber nicht lesbar ist.

   - Der Launcher schaltet beim Start selbst in den Textmodus 80x25. Zuvor
     zeichnete er ins Leere, wenn ein gestartetes Spiel den Grafikmodus hinter-
     lassen hatte.
   - Scheitert das Speichern der INI, wird die Marker-Änderung auf dem Bild-
     schirm zurückgenommen, damit Anzeige und Datei übereinstimmen.
   - Zwischen Titel und rechtem Rahmen bleibt jetzt immer eine Spalte frei.
     Vorher konnte ein Name direkt am Rahmen enden. Die sichtbaren Längen ste-
     hen in Abschnitt 13.
   - Fehlermeldungen erscheinen rot in der Zeile des Auswahlbalkens und ver-
     schwinden beim nächsten Tastendruck. Vorher wurde dafür der ganze Bild-
     schirm geleert und auf eine Taste gewartet — die Liste war weg und musste
     neu aufgebaut werden.
   - Ein zugeklappter Ordner ohne Titel zeigt jetzt "(0 Titel)". Vorher fehlte
     die Zahl ganz, was wie ein Fehler aussah und nicht erkennen ließ, warum
     sich beim Aufklappen nichts tut.
   - Das empfohlene Schleifen-Konstrukt beginnt mit "@echo off" und wechselt
     zu Beginn jedes Durchlaufs in das Verzeichnis der LAUNCHER.EXE
     (Abschnitt 5). Ohne diesen Wechsel blieb die Schleife hängen, sobald
     man in der DOS-Shell das Verzeichnis gewechselt hatte oder ein Spiel
     abgestürzt war, bevor sein "cd.." lief.
   - Die Kopfzeile der LAUNCHER.LOG heißt jetzt "LAUNCHER.INI - DIAGNOSE",
     und die Zeilennummern stehen rechtsbündig. Dadurch stehen die Doppel-
     punkte aller Protokollzeilen exakt untereinander, auch bei den
     "Datei"-Zeilen ohne Nummer. Die Spaltenbreite richtet sich nach der
     höchsten Zeilennummer der jeweiligen Datei.

   - Die Dokumentation wurde komplett überarbeitet.
