• GoldED+ Unicode-Ausgabe

    From Eugene Subbotin@2:5075/35 to All on Fri Aug 28 21:43:30 2026
    Hello All!

    Habe einen GoldED+ gebaut, der Text intern als UTF-8 h„lt. Nach drauáen
    „ndert sich dabei nichts - in die Echos schreibt er weiter das, was
    XLATEXPORT sagt, also CP437 oder CP850 wie bisher.

    Was das bringt:
    - Nachrichten in verschiedenen Zeichens„tzen stehen in einem Echo
    nebeneinander und werden jede in ihrem eigenen angezeigt - CP437,
    CP850, CP852, CP866, KOI8-R, ISO-8859, UTF-8
    - unter Linux, BSD und macOS braucht es weder luit noch eine eigene
    screen-Sitzung in einem alten Zeichensatz - er l„uft im normalen
    UTF-8-Terminal, so wie es ist
    - im Windows Terminal und in der conhost belegt ein breites Zeichen
    (CJK) seine zwei Zellen, statt in eine gequetscht zu werden und den
    Rest der Zeile zu verschieben
    - den Zeichensatz holt er sich vom System, einzustellen ist nichts
    - umkodiert wird ber iconv, unter Windows ber die Codepage-API des
    Systems, unter OS/2 ber ULS. Die .chs-Tabellen braucht keiner mehr,
    diese drei kennen alle Paare von sich aus. Unter DOS ebenfalls - im
    Archiv liegt ein Build mit GNU libiconv, statisch gelinkt

    Zum ersten Punkt ein eigener Absatz, denn darum geht es eigentlich.
    Frher lag der Text intern einbyteweise, und damit hing alles am
    Zeichensatz des Terminals. Eine Nachricht mit CHRS: CP866 hatte auf
    einem CP437-Schirm schlicht keinen Platz - kyrillische Buchstaben gibt
    es in CP437 nicht. Umgekehrt genauso: Umlaute und Akzente fehlen in
    CP866 vollst„ndig. Heraus kamen Fragezeichen oder Mll, und wer in
    gemischten Echos las, sah die halbe Nachricht zerlegt. Jetzt ist der
    Schirm UTF-8, und darin ist fr alles Platz: eine deutsche Nachricht
    in CP850, eine russische in CP866 und eine polnische in CP852 liegen
    im selben Echo nebeneinander und werden alle drei so angezeigt, wie
    sie geschrieben wurden.

    Nebenbei ist CHRS: IBMPC sauber aufgel”st. Der Bezeichner ist alt und
    unscharf: erst meinte er CP437, sp„ter "die Codepage der Maschine, auf
    der die Nachricht geschrieben wurde". Bisher ging das aus Versehen gut
    - eine IBMPC-Tabelle richtete niemand ein, die Bytes liefen unver„ndert
    durch, und unter einem passenden Terminal kam das Richtige heraus.
    Nimmt man IBMPC dagegen w”rtlich als CP437, zerf„llt eine russische
    Nachricht. Aufgel”st wird er jetzt ausdrcklich: auf den Zeichensatz
    der Sitzung, solange der einbyteweise ist, und in einer UTF-8-Sitzung
    auf die DOS-Codepage, die das Locale nahelegt. Steht daneben ein
    ^ACODEPAGE:, hat das Vorrang, so wie FTS-5003 es verlangt.

    CHRS: ASCII wird strikt als siebenbittiges ISO 646-1 genommen, wie im
    Standard. Behauptet eine Nachricht ASCII und fhrt trotzdem Bytes ber
    0x7F mit sich, werden daraus Fragezeichen - aber die ist vom Absender
    falsch ausgezeichnet, und die alten asc_*-Tabellen taten genau dasselbe.

    Der Nodelist muss neu kompiliert werden. Im Index lag der Name in 36
    Bytes, und das waren 36 Zeichen, solange ein Zeichen ein Byte war. In
    UTF-8 kostet jeder Umlaut ein Byte extra - fr deutsche Namen reicht
    das meist immer noch. Kyrillisch, Griechisch und dergleichen kosten
    dagegen zwei Bytes je Buchstabe, und da ist bei siebzehn Zeichen
    Schluss: ein russischer Name mit 21 Zeichen braucht 41 Bytes und wurde mittendrin abgeschnitten. Das Feld fasst jetzt 80. Damit „ndert sich
    das Satzformat, ein altes .gxn nimmt GoldED+ nicht mehr an - lasst das
    goldnode aus demselben Archiv darberlaufen.

    An Konfigurationsschlsseln sind zwei dazugekommen:

    XLATCONFIGSET - in welchem Zeichensatz GoldEDs eigene Dateien
    geschrieben sind: golded.cfg, die Sprachdatei, die
    Templates, die Tagline-Dateien, die Hilfe
    XLATAREASET - in welchem Zeichensatz die Echo-Beschreibungen in
    der Area-Datei des Tossers stehen. Fehlt er, gilt
    XLATCONFIGSET

    Beide Zeilen geh”ren ganz an den Anfang der Konfiguration, vor jede
    Zeile mit einem nicht-englischen Wert: die Werte werden umkodiert,
    w„hrend die Datei gelesen wird. Der typische Fall ist ein Terminal,
    das l„ngst UTF-8 spricht, w„hrend Konfiguration und Sprachdatei in
    CP850 geblieben sind:

    XLATCONFIGSET CP850

    Dazu gibt es die Umgebungsvariable GOLDED_CONSOLE (nur Windows): cells
    oder stream, falls GoldED nicht richtig err„t, wie Deine Konsole
    breite Zeichen zeichnet.

    Und wer tats„chlich in UTF-8 schreiben will - dafr gibt es die Echos
    UTF-8 und UTF8.FTN.MESSAGING. Beim Uplink bestellen und dort in jeder beliebigen Sprache schreiben. Ich habe dafr eine eigene Gruppe:

    GROUP UTF-8;
    MEMBER UTF-8, UTF8.FTN.MESSAGING
    XLATIMPORT UTF-8
    XLATEXPORT UTF-8
    ENDGROUP

    In allen anderen Echos bleibt dabei alles so, wie es war.

    Gebaut sind fnfzehn Varianten - DOS, OS/2, Windows (MSVC6
    eingeschlossen), Linux, macOS, Solaris, Haiku:

    https://github.com/evs38/golded-plus/releases

    Wer selbst baut:

    git clone https://github.com/evs38/golded-plus.git

    Der Zweig unicode ist dort der voreingestellte. Gebaut wird wie
    gewohnt, mit cmake oder make PLATFORM=lnx; Einzelheiten stehen in
    INSTALL und docs/building.txt.

    Woraus gebaut wird: auf den Unixen braucht es curses und iconv.

    Zu curses ein eigenes Wort, denn gerade ist šbergangszeit und man
    vergreift sich leicht. Die Arbeit mit breiten Zeichen steckte in einer
    eigenen Bibliothek namens ncursesw, und in vielen Systemen gibt es die
    so nicht mehr - seit ncurses 6 liegen alle breiten Funktionen direkt
    in der normalen ncurses, und ncursesw ist entweder nur noch ein
    Verweis darauf oder ganz verschwunden. In pkgsrc etwa gibt es keine
    eigene ncursesw mehr, nur noch ncurses - und die kann es bereits. Auf
    „lteren Systemen sind es dagegen weiterhin zwei verschiedene Pakete,
    und gebraucht wird das mit dem "w".

    Die Regel ist einfach: gibt es im System ein ncursesw, nimm das. Gibt
    es keines, stecken die breiten Funktionen schon in der normalen
    ncurses, dann nimm die. Der Build sagt anschlieáend selbst, was er
    gefunden hat und ob es breite Zeichen kann.

    iconv steckt unter Linux in der libc selbst, unter BSD und macOS
    installiert man blicherweise libiconv aus den Paketen dazu.

    Unter Windows braucht es weder das eine noch das andere: den Schirm
    zeichnet die Konsole selbst, umkodiert wird ber die Codepage-API des
    Systems. Unter OS/2 dasselbe - VIO fr den Schirm, ULS frs Umkodieren.
    Unter DOS wird libiconv fr djgpp gebraucht, sofern mit ICONV=1 gebaut
    wird.

    An Build-Schaltern sind dazugekommen (im make so, in cmake dasselbe
    ber -D, bei den letzten beiden mit dem Pr„fix GOLD_):

    GOLD_UTF8=0 Text weiter einbyteweise halten, wie bisher.
    Voreingestellt ist 1, auáer unter DOS
    WIDE_NCURSES=0 mit dem alten, achtbittigen curses arbeiten, auch
    wenn eine Bibliothek mit Untersttzung fr breite
    Zeichen gefunden wurde
    EXTERNAL_CURSES=0 curses nur aus dem System nehmen, nicht aus den
    Paketen
    EXTERNAL_ICONV=0 dasselbe fr iconv

    Voreingestellt werden curses und iconv auf den Unixen aus dem
    Paketmanager genommen (/usr/pkg, /usr/local, /opt/homebrew, /opt/local, /opt/csw), das System ist der Rckfall: das ncurses aus den Paketen ist
    meist neuer und kann breite Zeichen, und das libiconv aus den Paketen
    kennt mehr Zeichens„tze.

    Unter OS/2 l„uft das Umkodieren ber ULS, die Unicode-Untersttzung des Systems. Sie wird von selbst genommen, sobald die Header des OS/2
    Toolkit gefunden werden; fehlen sie, wird auf Tabellen gebaut.

    Der DOS-Build im Archiv ist mit ICONV=1 gebaut, libiconv fr djgpp ist
    statisch einkompiliert, .chs-Tabellen braucht es dort also nicht. Ohne
    ICONV=1 bleibt DOS auf den Tabellen, wie gehabt.

    Fehler drften reichlich drin sein: GoldED ist ein riesiger Baukasten,
    ber Jahre gewachsen, und alle seine Funktionen kennt l„ngst niemand
    mehr :) Angefasst wurde dabei fast alles, wo Text auf den Schirm kommt.
    Wer also etwas findet - schreib, ich sehe es mir an.

    * Originally in FIDOSOFT.GER
    * Crossposted in GOLDED.GER

    Eugene

    ... It's full of stars!
    --- GoldED+/BSD 1.1.5-b20260828 (NetBSD 11.0 Intel Core Haswell)
    * Origin: FireFox Station (2:5075/35)