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