Martin Wodrich <[EMAIL PROTECTED]> wrote on 03.03.04:

> Hans-Juergen Taenzer schrieb am 02.03.04 um 22:08:

>> Irgendjemand sagte mal, da� Ermitteln der aktuellen Codpage w�re
>> unm�glich, oder zumindest schwierig

Nicht irgendjemand, sondern Jochen Gehring.  Ich hab' mal rumgekramt und
<[EMAIL PROTECTED]> (in c.o.p.d)
gefunden:

----------8<----------
>So 'ne CP-Testroutine

function ActiveCodepage:word;assembler;
asm
       mov ax,$6601    { DOS: Get CP-Table }
       int 21h
       mov ax,bx
end;

aber wenn noch keine CP-definiert wurde (also auch wenn DISPLAY.SYS
garnicht installiert ist) liefert das den Wert, der in der
Config.sys bei COUNTRY angegeben wurde, wenn da "country=049,850..."
steht bekommt man 850 zur�ckgeliefert, auch wenn man CP437 hat...
----------8<----------

Wobei noch zu pr�fen w�re, was man zur�ckbekommt, wenn DISPLAY.SYS nicht
installiert und bei COUNTRY gar keine Codepage angegeben ist...

Wer CP437 benutzt, hat DISPLAY.SYS i.d.R. nicht installiert.

> Die Frage ist wohl haups�chlich, welche Nebenwirkungen das unter
> Windows hat.

Und welche Nicht-Wirkungen.  Ich behaupte mal, da� man damit die in
einer DOS-Box aktive Codepage weder ermitteln noch setzen kann.

>> (im Zusammenhang mit der Frage, ob es nicht sinnvoll w�re, da�
>> FreeXP sich nach der aktuell eingestellten Codepage beim Anwender
>> richtet, anstat cp437 zu fordern). ;)

> Mit der von dir geposten Funktion, k�nnte man zumindest wenn sie
> funktioniert, innerhalb von FreeXp immer CP437 einstellen.

Ich bin mir ziemlich sicher, da� HJT darauf nicht hinauswollte.  Aus den
bisherigen per Mail gef�hrten Threads schlie�e ich einfach mal, da� er
sich eine flexible L�sung vorstellt:  XP pr�ft die Codepage und verh�lt
sich entsprechend.

Wobei "verh�lt sich entsprechend" im gegenw�rtigen Zustand nur bedeuten
kann: Es finden andere Konvertiertabellen Anwendung.  Ist CP437 aktiv,
wird von/nach CP437 konvertiert, entsprechend wird im Falle CP850 oder
anderer Codepages verfahren.

Abgesehen davon, da� das die inzwischen ohnehin schon sehr hohe Anzahl
an Konvertiertabellen - je nachdem, wieviele und welche Codepages man
unterst�tzen will - um ein Vielfaches erh�hen w�rde, scheitert diese
Idee IMO schon an folgenden Umst�nden (Aufz�hlung unvollst�ndig):


1. Da die Konvertierung eingehender Nachrichten endg�ltig ist -
   Multiparts mal au�en vor gelassen - w�re man schon nach der
   Konvertierung der allerersten Nachricht f�r alle Zeiten auf die zu
   diesem Zeitpunkt aktive Codepage festgelegt, wenn man keine
   Falschdarstellung fr�herer Nachrichten in Kauf nehmen will.

   Die vermutete Flexibilit�t ist also gar nicht gegeben, sondern w�rde
   nur auf andere Art und Weise und zu einem Zeitpunkt stattfinden, an
   dem sich der XP-User der Folgen der von ihm eingestellten Codepage
   gar nicht bewu�t ist.  Eine sp�tere Korrektur ist nicht mehr m�glich,
   eine Re-Konvertierung ebensowenig.


2. Da jeder eine andere Codepage verwenden k�nnte, w�ren Quell- und
   Zielzeichensatz nicht mehr eindeutig definiert, ein Pufferaustausch
   zwischen Usern und/oder anderen XP-Versionen mithin nicht mehr
   ohne weiteres problemlos m�glich.  Die Entstehung einer im Hinblick
   auf den verwendeten Zeichensatz inkonsistenten Messagebase ist nicht
   unwahrscheinlich.

   Wenn auch zuk�nftige Versionen das �ber einen neuen Header zum Teil
   (!) abfedern k�nnten - �ltere Versionen k�nnen es nicht.


3. XP verwendet - ob gut oder nicht, es ist so - als Basis das ZConnect-
   Format und damit auch den ZConnect-Zeichensatz.  Und das ist nun mal
   CP437 mit leichten Abweichungen (sofern kein ISO-Header vorhanden).

   Sicher sollte man sich nicht zu strikt an den letzten ZC-Draft
   klammern (XP hat sich schon immer erlaubt, nicht in allen Punkten
   100%ig ZC-konform zu sein), aber diese Abweichung w�re zu gravierend.

   Man denke nur an ZC-Gates, die, wenn sie sich an die ZC-Specs halten,
   ja ebenfalls nach CP437 (bzw. eben ZC-Zeichensatz) konvertieren.  Da
   wird einem die Entscheidung ja bereits von au�en abgenommen.


4. FidoNet und Maus arbeiten �berwiegend ebenfalls mit CP437 (AFAIK).


Es g�be genau nur eine M�glichkeit, langfristig eine echte
Flexibilisierung zu erreichen: Eingehende Nachrichten immer erst zur
Anzeige zu konvertieren und bei ausgehenden Nachrichten die Codepage zu
pr�fen, um dann entsprechend zu konvertieren.

Was aber - siehe oben - selbst unter DOS nur bedingt funktioniert und in
der DOS-Box vermutlich gar nicht (jedenfalls nicht mit der geposteten
Routine).  Es ist zudem die L�sung, die maximal inkompatibel mit anderen
bzw. �lteren Versionen w�re.

Solange in XP aber eine Zeichensatzkonvertierung eingehender Nachrichten
stattfindet, gibt es nur eine sinnvolle M�glichkeit, n�mlich die
Festlegung auf eine einheitliche Codepage f�r die MsgBase.  Man kann die
theoretisch und mit viel Aufwand �ndern auf CP850, aber dann w�re man
halt darauf festgelegt (also auch nicht flexibler).  Da XP zudem von
beginn an CP437 verwendet und es demzufolge eine nicht unerhebliche
Anzahl an MPUFFERn in CP437 gibt, w�rde ich es f�r kl�ger halten, bei
CP437 zu bleiben.

Da� die XP-Oberfl�che selbst seit jeher eine Reihe von Zeichen benutzt,
die nur in CP437 existieren und daher auch diesbzgl. eine gr�ndliche
�berarbeitung erforderlich w�re, wenn man andere Codepages nutzen
wollte, sei hier nur am Rande erw�hnt.


Wenn Du, Hans-J�rgen, sagst ...

----------8<----------
>> (im Zusammenhang mit der Frage, ob es nicht sinnvoll w�re, da� FreeXP
>> sich nach der aktuell eingestellten Codepage beim Anwender richtet,
>> anstat cp437 zu fordern). ;)
----------8<----------

... dann ist das ein flott hingeschmissener und sicher nicht unpopul�rer
Wunsch, aber bevor irgendjemand dazu auch nur eine Codezeile schreibt,
mu� ein stimmiges Design her, das u.a. die oben angesprochenen Punkte
ber�cksichtigt und die dort angesprochenen Probleme weitestgehend l�st.

Wie man es nicht machen sollte, ist bei OpenXP ja erst k�rzlich in
d.c.s.c deutlich geworden (hoffe ich jedenfalls).


        Michael
------------------------------------------------------------------------
FreeXP Entwickler-Mailingliste
[EMAIL PROTECTED]
http://www.freexp.de/cgi-bin/mailman/listinfo/dev-list

Antwort per Email an