PC/GEOS 1.x GERMAN TEXT ENCODING AUDIT

Confirmed seven-character mapping (hexadecimal bytes):
  ä 8A    ö 9A    ü 9F    Ä 80    Ö 85    Ü 86    ß A7
The test sequence äöüÄÖÜß is 8A9A9F808586A7.

This is the native GEOS single-byte character set for these letters. It is
neither CP437 nor Latin-1. The seven values match MacRoman, but this audit does
not assert that every GEOS character is identical to a complete MacRoman codec.
Do not emit UTF-8 strings into native GrDrawText buffers or UI moniker chunks.

Source evidence:
- Include/char.def explicitly defines C_UA_DIERESIS=0x80,
  C_UO_DIERESIS=0x85,C_UU_DIERESIS=0x86,C_LA_DIERESIS=0x8A,
  C_LO_DIERESIS=0x9A,C_LU_DIERESIS=0x9F,C_GERMANDBLS=0xA7.
- Driver/Keyboard/German/Extended/kmapGermanExt.def uses these GEOS constants
  in its normal/shifted keymaps. No DOS-codepage conversion is implied.
- Include/Internal/fontDr.def defines the font face/table/glyph structures
  used to inspect the actual supplied bitmap font.

Actual old runtime font evidence:
- Supplied FONT/BERKELEY.FNT, BSWF format 1.0, font ID 0x0202, name Berkeley.
- SHA256 48e504382f7f8ceb6c955ad7a4f2e6a725e0a280841b11f288c123c69d8d1521.
- All five bitmap faces (9,10,12,14,18 points) cover byte 32 through 255.
- Every one of the seven mapped German bytes has present glyph data,
  CharTableFlags 0(no missing/no-data flag), positive dimensions, and nonzero
  bitmap bits in every face. None resolves to a missing-glyph placeholder.
- The 10 point face begins at file offset 0x1142. Its CharTableEntry array begins
  at face offset 71. German glyph records have these face-relative offsets:
    ä 0x0C16  ö 0x0CE2  ü 0x0D22  Ä 0x0B8D  Ö 0x0BD3  Ü 0x0BE1  ß 0x0D79.
- Decoding the glyph bits shows the expected two-dot umlaut letters and sharp S.
  See font-coverage.json and berkeley-german-glyphs.png. The PNG is explicitly
  a HOST reconstruction from actual font-file bits, not a native screenshot.

Implementation:
- locale_encoding.py exports encode_geos(text), decode_geos(bytes),
  GEOS_GERMAN, and BERKELEY_FONT_ID=0x0202.
- The encoder accepts ASCII plus only the seven audited German letters.
  It raises UnicodeEncodeError for all other characters; it never silently
  substitutes question marks or a DOS/Latin-1 encoding.
- The same encoded bytes belong in native GrDrawText string buffers and in
  the text payload of old UI moniker chunks. Keep their existing structural
  headers separate. Builders that currently call .encode('ascii') must switch
  to this encoder only for the localized build, preserving the English build.
- Explicitly selecting Berkeley 0x0202 for German drawing uses proven glyph
  coverage. The frozen English build uses its existing font unchanged.

Validation boundary:
The mapping, old font availability, glyph shapes, strict codec behavior, and
byte roundtrips are verified from actual bytes/source. GrDrawText rendering,
native UI moniker rendering, and layout in the translated application still
require the separate native emulator acceptance run. This file does not claim
that those runtime checks have already passed.
