Hi,

in Sachen "User-Agent:" soll optional sowohl die Compiler-Plattform (bei
uns 'DOS16') als auch die Plattform ausgegeben werden können, unter der
XP (bzw. der UUZ) aktuell läuft.  Des weiteren soll angegeben werden
können, ob man die genaue Version ('WinXP', aber ohne genaue
Versionsnummer) oder nur die Versionsfamilie ('Win9x', 'WinNT')
ausgegeben haben will.

Nun hab ich mal versucht, aus 'writever()' und 'memstat' in xp5.pas
schlau zu werden (hab mich damit noch nie im Detail beschäftigt) und das
für meine Zwecke anzupassen.  Vielleicht kann sich mal jemand den Code
unten ansehen und eine Einschätzung geben, ob das wohl so laufen würde.
Wenn am Ende ein Leerstring zurückkommt, soll es plain DOS sein (da
würde dann auch nichts zusätzlich ausgegeben werden, weil ich
'DOS16/DOS6' o.ä. etwas dämlich fände, IMO spielt die Version da auch
keine wesentliche Rolle).

Was mir noch nicht so ganz klar ist:

1. Was ist denn case WinVersion of 1?  Windows 1.x/2.x?

2. Ich bin nicht sicher, ob die Reihenfolge in 'writever' eine Rolle
   spielt.  Muß die OS/2 => Linux => Win lauten?  Oder ist
   sichergestellt, daß 'WinVersion' wirklich immer 0 zurückgibt, wenn es
   kein Windows ist?

DOSBOX kann ich im Moment noch nicht berücksichtigen, weil der Code in
meiner Arbeitsumgebung noch nicht drin ist.  Here we go:

----------8<----------
    os:='';
    case WinVersion of              { erstmal alle Windows-Versionen prüfen }
    { 1 : os:=??? }
      2 : os:='Win3.x';
      3 : if osfamily then
            os:='Win9x'
          else begin
            if lo(TrueWinVersion)<5 then
              os:='Win95'
            else case lo(dosversion) of
              7 : os:='Win98';
              8 : os:='WinMe';
            end;
          end;
      4 : if (lo(WinNTVersion)=0) or osfamily then      { ohne XP_NTVDM.DLL }
            os:='WinNT'
          else begin
            if lo(WinNTVersion) in [5,6] then            { mit XP_NTVDM.DLL }
            begin
              if hi(WinNTVersion)=0 then
                os:='Win2K'
              else
                os:='WinXP';
            end
            else os:='WinNT';
          end;
    else begin
      if lo(dosversion)>=10 then
        os:='OS2'
      else if DOSEmuVersion<>'' then
        os:='Linux[DOSEMU]'
    end;
    end;  { case }
    if os<>'' then
      ua:=ua+iifs(hascompos,'/',iifs(hasbracket,'; (',' ('))+os;
----------8<----------


        Michael
------------------------------------------------------------------------
FreeXP Entwickler-Mailingliste
Dev-List@freexp.de
http://www.freexp.de/cgi-bin/mailman/listinfo/dev-list

Antwort per Email an