<?xml version="1.0" ?>
<kc>

<title>Wine Traffic</title>

<author contact="http://www.theshell.com/~vinn">Brian Vincent</author>
<issue num="265" date="11 Mar 2005 00:00:00 -0800" />
<intro> <p>This is the 265th issue of the Wine Weekly News publication.
Its main goal is to gravitate. It also serves to inform you of what's going on around Wine. Wine is an open source implementation of the Windows API on top of X and Unix.  Think of it as a Windows compatibility layer.  Wine does not require Microsoft Windows, as it is a completely alternative implementation consisting of 100% Microsoft-free code, but it can optionally use native system DLLs if they are available.   You can find more info at <a href="http://www.winehq.org">www.winehq.org</a></p> </intro>
<stats posts="265" size="1517" contrib="80" multiples="48" lastweek="47">

<person posts="20" size="63" who="Mike Hearn" />
<person posts="15" size="72" who="Paul Vriens" />
<person posts="14" size="36" who="Alexandre Julliard" />
<person posts="9" size="34" who="Dmitry Timoshkov" />
<person posts="8" size="176" who="Jonathan Ernst" />
<person posts="8" size="37" who="James Hawkins" />
<person posts="8" size="21" who="Andreas Mohr" />
<person posts="7" size="24" who="Robert Shearman" />
<person posts="7" size="23" who="Tom Wickline" />
<person posts="6" size="41" who="Raphael" />
<person posts="6" size="21" who="Vincent B&#233;ron" />
<person posts="6" size="19" who="Tony Lambregts" />
<person posts="6" size="17" who="Mike McCormack" />
<person posts="6" size="15" who="Robert Reif" />
<person posts="5" size="17" who="Matthew Mastracci" />
<person posts="5" size="17" who="(peter)" />
<person posts="5" size="15" who="Christian Costa" />
<person posts="5" size="14" who="Scott Ritchie" />
<person posts="5" size="12" who="Francois Gouget" />
<person posts="4" size="152" who="Joris Huizer" />
<person posts="4" size="18" who="Dan Kegel" />
<person posts="4" size="13" who="Brian Vincent" />
<person posts="4" size="13" who="Dimitrie O. Paun" />
<person posts="4" size="13" who="Jakob Eriksson" />
<person posts="4" size="12" who="Andrew Neil Ramage" />
<person posts="4" size="11" who="Troy Rollo" />
<person posts="3" size="19" who="Michael Jung" />
<person posts="3" size="11" who="(wino)" />
<person posts="3" size="10" who="Duane Clark" />
<person posts="3" size="9" who="Maxime Bellenge" />
<person posts="3" size="9" who="Stefan D&#246;singer" />
<person posts="3" size="9" who="Jason Couture" />
<person posts="3" size="8" who="Jeremy Newman" />
<person posts="3" size="8" who="Oliver Stieber" />
<person posts="3" size="8" who="Kuba Ober" />
<person posts="3" size="7" who="George Ginden" />
<person posts="2" size="16" who="Rob D" />
<person posts="2" size="9" who="Uwe Bonnes" />
<person posts="2" size="9" who="Eric Pouech" />
<person posts="2" size="8" who="Jesse Allen" />
<person posts="2" size="6" who="Paul Millar" />
<person posts="2" size="6" who="Rein Klazes" />
<person posts="2" size="6" who="Rob Shearman" />
<person posts="2" size="6" who="(jakov)" />
<person posts="2" size="5" who="Ivan Leo Puoti" />
<person posts="2" size="5" who="Henning Gerhardt" />
<person posts="2" size="5" who="Juan Lang" />
<person posts="2" size="5" who="Krzysztof Foltman" />
<person posts="1" size="183" who="Rizwan Kassim" />
<person posts="1" size="116" who="Steven Edwards" />
<person posts="1" size="13" who="Thomas Kho" />
<person posts="1" size="5" who="Tony Lambregts" />
<person posts="1" size="4" who="T.J. Zeeman" />
<person posts="1" size="4" who="Dietrich Teickner" />
<person posts="1" size="4" who="(jchevrier)" />
<person posts="1" size="3" who="Holly Bostick" />
<person posts="1" size="3" who="Jason Edmeades" />
<person posts="1" size="3" who="luis lenders" />
<person posts="1" size="3" who="Marcus Meissner" />
<person posts="1" size="3" who="Joerg Mayer" />
<person posts="1" size="3" who="Vitaliy Margolen" />
<person posts="1" size="3" who="Paul van Schayck" />
<person posts="1" size="3" who="Michael Stefaniuc" />
<person posts="1" size="3" who="Adam D. Moss" />
<person posts="1" size="3" who="Filip Navara" />
<person posts="1" size="3" who="Maxime BELLENGE" />
<person posts="1" size="2" who="Christoph Frick" />
<person posts="1" size="2" who="Kenneth Porter" />
<person posts="1" size="2" who="Shachar Shemesh" />
<person posts="1" size="2" who="Boaz Harrosh" />
<person posts="1" size="2" who=" (Jakov af Wallby)" />
<person posts="1" size="2" who="Marcus Meissner" />
<person posts="1" size="2" who="Juan Pablo Sousa" />
<person posts="1" size="2" who="Sven Paschukat" />
<person posts="1" size="2" who="Chris Morgan" />
<person posts="1" size="2" who="Michael Lin" />
<person posts="1" size="2" who="C. Scott Ananian" />
<person posts="1" size="2" who="Walt Ogburn" />
<person posts="1" size="2" who="=?gb2312?B?y9W6vA==?=" />

</stats>
<section 
	title="News: Wine 20050305, Linux Gaming" 
	subject="News"
	archive="http://www.hexus.net/content/reviews/review.php?dXJsX3Jldmlld19JRD0xMDExJnVybF9wYWdlPTU=" 
	posts="3"
	startdate="05 Mar 2005 00:00:00 -0800"
	enddate="11 Mar 2005 00:00:00 -0800"
>
<topic>News</topic>
<mention></mention>
<mention>Slashdot</mention>
<mention>News</mention>
<mention>TransGaming</mention>
<mention>Gavriel State</mention>
<mention>cvs</mention>

<p>
Wine 20050310 hath been unleashed.  Alexandre noted the following changes:</p>
<quote who="Alexandre Julliard"><p>
WHAT'S NEW with Wine-20050310: (see 
 <a href="http://cvs.winehq.com/cvsweb/wine/ChangeLog?rev=1.92&amp;content-type=text/x-cvsweb-markup">ChangeLog</a>
 for details)
 <ul>
        <li> Initial implementation of a true Richedit control.</li>
        <li> Shell extension for browsing Unix directories.</li>
        <li> More MSI work.</li>
        <li> PBuffer support in OpenGL.</li>
        <li> Window painting regressions should be fixed.</li>
        <li> Lots of bug fixes.</li></ul></p></quote>

<p>The packaging crew will have binaries available soon, but you
can <a href="http://prdownloads.sourceforge.net/wine/Wine-20050310.tar.gz">
snag the source</a> now.  </p>
<p> 
Slashdot linked to good article at HEXUS.net about 
<a href="http://www.hexus.net/content/reviews/review.php?dXJsX3Jldmlld19JRD0xMDEx">gaming
on Linux</a>.  They covered a lot of different aspects of gaming
including native ports, gaming with TransGaming's Cedega, and
a whole page discussing Wine.  They wrapped it all up with an
<a href="http://www.hexus.net/content/reviews/review.php?dXJsX3Jldmlld19JRD0xMDExJnVybF9wYWdlPTc=">interview
with Lucas Smithen</a> of TransGaming.  Speaking of which, Cedega 4.3
came out this week.  Finally, Gavriel State wrote a column on
<a href="http://www.transgaming.com/gavstates.php">cross-platform 
development</a>.</p>

<p>Joe Barr wrote an article for Newforge about 
<a href="http://software.newsforge.com/software/05/03/02/1449240.shtml?tid=130">
running CwGet</a>, some ham radio software, with Wine:</p>
<quote who="Joe Barr"><p>

I used an audio cable with a mini-jack at each end to connect my Yaesu 
FRG-7700 receiver to the Line In port on my SoundBlaster Live! card. Then I 
found a ham band with some CW activity and started CwGet. I was amazed when I 
saw the CW being decoded real time, as I heard it, but there it was. Yes, 
CwGet would work on Linux, thanks to Wine.</p></quote>

<p>Joe included 
<a href="http://www.newsforge.com/blob.pl?id=acfc422ea2392aaef5d85576316c0ec2">a
screenshot</a> to go along with it.  I'm not a ham operator, but it looks like
the software is useful.</p>

<p>In completely unrelated news, Nobel Prize winning physicist Hans Bethe died
last weekend at age 98.  I've always loved physics, as well as the history of
science in general.  Bethe was one of the last links to the old age of 
physics before relativity and quantum theory.  I was sort of sad to see his
passing didn't make much news.  If you want to hear an excellent discussion 
of physics, check out Cornell's
<a href="http://bethe.cornell.edu/">Quicktime movies of Bethe</a> from
1999. </p> 

</section>
<section 
	title="Winecfg &amp; Unixfs" 
	subject="unixfs"
	archive="http://www.winehq.com/hypermail/wine-devel/2005/03/0314.html" 
	posts="4"
	startdate="08 Mar 2005 00:00:00 -0800"
	enddate="08 Mar 2005 00:00:00 -0800"
>
<topic>Configuration</topic>
<mention>Chris Morgan</mention>
<mention></mention>

<p>The winecfg tool (that someday will be used, we promise) requires
a way to access the the complete underlying Unix filesystem.  It's a
Winelib app, so there's multiple ways of doing this.  Michael Jung 
put together a patch last week, but it wasn't committed.  He asked
what was wrong with it:</p>
<quote who="Michael Jung"><p>

Could you please tell me if you consider the unixfs shell namespace extension, 
which I've sent to wine-patches last week, a sensible way to go in order to 
access the unix filesystem from winecfg? I know that there is room for 
improvements, and I'm working on it. But if you think it is not the right 
thing to do, I will stop working on it and save some time for other stuff.
</p></quote>

<p>Alexandre explained what was going on:</p>
<quote who="Alexandre Julliard"><p>
I think the extension itself is perfectly reasonable. The thing I'm
not sure about is creating a brand new dll for it, adding
Wine-specific dlls should be avoided if possible.</p></quote>

<p>Michael thought of a another way to do it:</p>
<quote who="Michael Jung"><p>
Would you consider it more reasonable to implement unixfs as a part of 
shell32? We would not have to alter the APIs exported by shell32 to do this.
Wine's shell32 would just recognize more CLSID's than the original one.
</p></quote>

<p>Michael then went ahead and came up with a patch to add the unixfs
support to shell32 instead.  Alexandre committed the patch the next
day as well as one to add support to winecfg to browse the filesystem.
So, if you click that <i>Browse</i> button in winecfg, it now comes back
with a nice selection window rather than informing you of unimplemented
functionality.</p>

<p>Along similar lines, Chris Morgan wondered why we weren't using winecfg yet.
The tool is in pretty good shape, it just doesn't actually modify the
registry.  To make things a little more confusing, the config file isn't
installed by default any more so some options appear to be in limbo.  Mike
Hearn explained what was blocking the move:</p>
<quote who="Mike Hearn"><p>
Somebody needs to write a patch to migrate the configuration branch across
to a new one, disable the pre-existing config file (renaming it?) and then
use it.
</p><p>
At least, I think that is what is needed. Alexandre may have other ideas.
</p></quote>

</section>
<section
        title="Drive Management"
        subject="Drive detection stuff"
        archive="http://www.winehq.org/hypermail/wine-devel/2005/03/0142.html"
        posts="24"
        startdate="04 Mar 2005 00:00:00 -0800"
>
<topic>Configuration</topic>

<mention></mention>

<p>While we're on the topic drives and setting up drives,
Mike Hearn went through and outlined some problems that 
need to be addressed.  If you're looking for a way to get
involved with Wine, some of these are good ways:</p>

<quote who="Mike Hearn"><p>
So, there are 4 obvious problems with our current drive management code:
<ol>
<li> We add links to the floppy drive. We should blacklist it, as it causes
  a big delay in the file open dialogs as we poll the drive which sits
  there spinning its motors naval-gazing. How many people still use
  floppy disks in 2005 anyway? I'm hoping the answer is "virtually none"
  <br /><br />
  An alternative solution would be to poll the drives in a non-blocking
  manner, though I'm not sure this would work for apps which do their own
  file dialogs like Office.
  </li>

<li> We don't add any device symlinks. Some programs need these
  eg d:: -&gt; /dev/cdrom</li>

<li> The artwork in the file pickers sucks ass. Sorry, it does. It's ugly as
  sin and for some reason the Desktop icon is an arrow, not a desk.
  <br /><br />
  This doesn't matter when you only have C: and Z: drives. It does matter
  when you have 2 CD drives, 2 Windows drives, a floppy and a few other
  drives.
  <br /><br />
  Fixing this is theoretically easy but for some reason it never gets
  done. If any of you non-coders are reading this and want to contribute
  then this would be a good way to start. Good artwork already exists,
  it's just a case of finding it, converting it to the right format and
  getting the new bitmaps into CVS.</li>

<li> We don't detect new drives as they are mounted into the system, eg if I
  start a Windows program and then realize that my work is actually on a
  USB key, if I plug that key in Nautilus and GTK+ (and probably KDE)
  apps will detect it and see it, but we won't. Not even if I restart the
  app! This is bad.<br /><br />
  <br /><br />
  Fixing this is not, in theory, super hard. When HAL detects a new
  hotplug device it modifies the fstab file and mounts. If we watch the
  /etc/fstab file for changes and rerun drive detection therefore we can
  make this all magically work. Problems are:
  <ul>
     <li> Who triggers the resync? The wineserver is the obvious choice as
       there is only 1 per wineprefix but we'd need to integrate FAM
       support for that</li>
     <li> How do we broadcast to apps that the drive definitions changed
       so we can update the UI, flush any caches etc?</li></ul></li></ol>
</p></quote>

<p>Alexandre didn't think device symlinks were necessary and asked
if Mike knew of a specific case where they were needed.  He said 
only exotic setups really needed it, and even then it should be 
possible to fix it.  With regard to the last point, Boaz Harrosh
briefly explained what Windows does,
<quote who="Boaz Harrosh">
 There is an API to watch for File
 System changes. From files (for editors), to folders and drives. The
 standard Shell control (Used in file dialogs and Explorer) uses this API
 by default. Also apps that do their own Dialogs like office.</quote></p>

<p>Andi Mohr thought implementing that in Wine was the way to go:</p>
<quote who="Andreas Mohr"><p>
Ah, so this means that the directory change notification mechanism
applies to volume notification as well? Or is it still a somewhat separate
API?
</p><p>
Nevermind, at least you just told us that this API exists, so we should
try to get the hal/hotplug/fam stuff integratedf towards this API.
</p></quote>

<p>Steven Edwards also provided some info on how Windows manages the
same thing:</p>
<quote who="Steven Edwards"><p>
 I think the umpnpmgr.exe in windows takes care of all of this for the applications and explorer
 using the APIs you listed. I don't know how we would really fit in the Windows design here. 
 <ul><a href="http://msdn.microsoft.com/library/en-us/kmarch/pnpcomp.wmf">
 http://msdn.microsoft.com/library/en-us/kmarch/pnpcomp.wmf</a></ul></p></quote>

<p>Oliver Stieber had another link for ideas on how to manage it in Linux,
<quote who="Oliver Stieber">
take a look at how ivman 
<a href="http://ivman.sourceforge.net/">http://ivman.sourceforge.net/</a>
does things.</quote>  Ivman aims to be a frontend to HAL events. </p>

<p>Jacek Caban had an idea for improving Wine's artwork,
<quote who="Jacek Caban">
I know two (maybe there are more) projects that have done really
nice artwork: xpde (<a href="http://www.xpde.com">www.xpde.com</a>)
and KDE xp style
(<a href="http://kdelook.org/content/show.php?content=1499">
http://kdelook.org/content/show.php?content=1499</a>). The main problem
is that both have GPL licence, but we could ask authors to let us use them
in Wine. Their icons are really cool and I belive Wine would look much
better with them.</quote></p>

</section>
<section
        title="Steam Working"
        subject="Let's fix Steam!"
        archive="http://www.winehq.org/hypermail/wine-devel/2005/03/0294.html"
        posts="4"
        startdate="08 Mar 2005 00:00:00 -0800"
>
<topic>Fixes</topic>

<mention></mention>
<mention>Microsoft</mention>
<mention>cvs</mention>

<p>Scott Ritchie thought Valve's Steam would be a good app
to get working with Wine.  Steam acts as a peer to peer client that
lets you download and run HalfLife 1 games (HL2 is currently not
working with Wine's DirectX implementation.)  Scott described the
current state:</p>
<quote who="Scott Ritchie"><p>
Steam has had a serious problem for quite some time, failing with a
strange debug assertion error popup at the dreaded 27% mark.
</p><p>
What's interesting, however, is that Steam works perfectly in Crossover
4.1 - since I don't think Steam is supported, this is not due to a
special hack, and the failure in Steam therefore represents a serious
regression in Wine.
</p><p>
This, quite simply, will be a really cool app to get working again.
Plus, we'll need it to try out Half Life 2 once you awesome Direct3D
boys finish up your work :)
</p><p>
So, where do we go about this?  The installer demonstrating the error
can be downloaded easily from 
<a href="http://www.steampowered.com/">http://www.steampowered.com/</a>
</p></quote>

<p>Stefan D&#246;singer downloaded it and reported success:</p>
<quote who="Stefan Dosinger"><p>
I downloaded steam, ran it with 
wine(cvs from 3/6/2005) and it WORKED without doing anything special. 
</p><p>
Wine just told me that it has to download the mozilla active X control and 
crashed because of a missing dll(MSVCR70.dll). I'll get this dll and do some 
more testing.
</p></quote>

<p>Stefan wrote back several hours later and described his progress:</p>
<quote who="Stefan Dosinger"><p>
Steam runs indeed nice with wine. I don't know why it works all over the 
sudden, but it works ;-)
</p><p>
These are the problems I found:
<ul>
<li>Microsoft Internet explorer needed: I didn't get the builtin shdocvw working. 
The automatical download of the Mozilla active X control didn't work. I 
downloaded it manually and installed it but it still didn't work

Can someone give me a hint how I make the builtin shdocvw work?</li>

<li>No keyboard without Desktop mode. It seems like wine doesn't pass the Steam 
Windows to the Window Manager(KDE / KWM in my case). To make the keyboard 
working I have to use the Desktop mode. Managed = N doesn't work.</li>

<li>I can't move the Window in Managed mode. With Desktop and Managed = N it 
works.</li>

<li>Steam sometimes causes crashes if I cancel it with Strg+C.</li></ul></p>
</quote>

</section>

<section 
	title="Winebuild Changes" 
	subject="winebuild changes"
	archive="http://www.winehq.org/hypermail/wine-devel/2005/03/0243.html" 
	posts="2"
	startdate="06 Mar 2005 00:00:00 -0800"
	enddate="07 Mar 2005 00:00:00 -0800"
>
<topic>Build Process</topic>
<mention></mention>
<mention>Dimi Paun</mention>

<p>Dimi Paun figured out a way to solve a problem that
popped up this week, but asked for comments on the
changes:</p>
<quote who="Dimitrie Paun"><p>
Ivan found that on Windows .exe's can export functions, just
like DLLs. He needs this for his work on ntoskrnl.exe.
</p><p>
To support this, we need a bit of an interface change to
winebuild. I've put together a simple patch to see if you
are OK with such a change. If so, I'll finish it, and
modify winegcc accordingly.
</p><p>
So, thing will change as follows:
<ul>
OLD: <code>winebuild --dll=mystuff.spec</code><br />
NEW: <code>winebuild --dll -E mystuff.spec</code><br /><br />

OLD: <code>winebuild --def=mystuff.spec</code><br />
NEW: <code>winebuild --def -E mystuff.spec</code><br /><br />

OLD: <code>winebuild --exe=myprog.exe</code><br />
NEW: <code>winebuild --exe -F myprog.exe</code></ul>

</p><p>
to build an .exe with arbitrary exports, we would do:
<ul><code>
winebuild --exe -F myprog.exe -E mystuff.spec
</code></ul>
</p></quote>

<p>Alexandre looked over it and approved of the idea.</p>

</section>
<section 
	title="Wine Patch to Work With Valgrind" 
	subject="Wine &amp; Valgrind 2.2.0"
	archive="http://www.winehq.com/hypermail/wine-devel/2005/03/0397.html" 
	posts="1"
	startdate="09 Mar 2005 00:00:00 -0800"
>
<topic>Memory Management</topic>
<mention></mention>
<mention>Rob Shearman</mention>
<mention>cvs</mention>

<p>For anyone wanting to find memory problems, Rob Shearman
posted 
<a href="http://www.winehq.com/hypermail/wine-devel/2005/03/att-0397/01-valgrind.diff">a
patch</a> to make Wine work with Valgrind 2.2.0:</p>
<quote who="Robert Shearman"><p>
I notice there has been interest from developers wanting to run valgrind
with wine. I have been doing this successfully with the attached patch
applied. Note that there are some false positives from the thread start
routines caused by a bug in valgrind. Apparantly this is fixed in the
latest cvs, but I have not tried it. I find the --tool=memcheck option
the most useful, which can be used for finding the source of memory
corruption.
</p></quote>
</section>
<section 
	title="Wine's Server Protocol" 
	subject="server/protocol.def documentation"
	archive="http://www.winehq.com/hypermail/wine-devel/2005/03/0336.html" 
	posts="8"
	startdate="08 Mar 2005 00:00:00 -0800"
	enddate="10 Mar 2005 00:00:00 -0800"
>
<topic>Architecture</topic>
<mention>Mike Hearn</mention>
<mention></mention>
<mention>Mike McCormack</mention>

<p>James Hawkins needed some help to understand wineserver:</p>
<quote who="James Hawkins"><p>
I now understand the purpose of SERVER_START_REQ et al, but now I'm in
server/protocol.def and I'm trying to add a protocol definition for
load_key.  load_key is implemented in server/registry.c, but is not in
server/protocol.def so, if I'm correct, I can't make a call to
load_key from ntdll yet.  I am trying to add load_key to protocol.def,
but I don't know the semantics of this file.  Is there any
documentation available for this topic, or does anyone have any
information that could be added to the docs?</p></quote>

<p>Mike Hearn asked James what problems he was running into.  James
replied:</p>
<quote who="James Hawkins"><p>
I guess it's not so much that I can't understand it when I read
through the code and read the comments, but that we should document
this so whoever needs to work with the server next won't have to take
time to read through the necessary files to understand it.  There's
also a big possibility that I'm not understanding this correctly. 
Some things that would be nice to see in documentation are:
<ul>
<li> server protocol design decisions (ie why we use do...while(0) loops
in SERVER_START_REQ as explained by Mike H)</li>

<li> api like wine_server_add_data, wine_server_call</li>
<li> adding a server function to protocol.def</li>
<li> protocol.def: @REQ, @REPLY, @END</li>
<li> protocol.def: VARARG...when to use it, syntax etc</li>
<li> why we use DECL_HANDLER and what should go in it</li>
<li> why there is a function and then its counterpart DECL_HANDLER</li>
</ul></p><p>

The biggest question I have right now (because I understand minimally
the points listed) is why api in protocol.def have different
parameters than their reg counterparts and even ntdll api.
</p><p>
What I'm getting at is that these things are an integral part of wine,
and there isn't any documentation for it.  If someone would be willing
to write documentation for this topic, then wine and its developers
would definitely benefit.
</p></quote>

<p>Mike McCormack pointed out that comments tend to bitrot and including
them can lead to outdated information.  Alexandre explained,
<quote who="Alexandre Julliard">
protocol.def itself is the documentation of the protocol, there is no
need for more. It's pretty much self-explaining anyway, and people who
can't figure it out by reading the code have no business messing
around with the server protocol. Consider it as the entrance exam for
server hacking ;-)</quote></p>

<p>Juan Lang thought it might be worth giving a pointer to protocol.def,
<quote who="Juan Lang">
Okay, fair enough.  I think what's missing, though, is a dev guide entry
on where this thing is, and (briefly) how to extend it.  But since
experienced wine hackers seem to figure this out anyway, there may be no
need.</quote></p>

</section></kc>
