qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] Norton Ghost crashes with page fault for me too.
@ 2005-06-13 17:49 Jeff Wiegley
  2005-06-14  2:37 ` jeebs
  2005-06-14 13:54 ` Elefterios Stamatogiannakis
  0 siblings, 2 replies; 26+ messages in thread
From: Jeff Wiegley @ 2005-06-13 17:49 UTC (permalink / raw)
  To: qemu-devel

I noticed that one other person a long time back had
this same problem.

http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00345.html

Basically, when I boot from an original boot/rescue disk created by
Norton Ghost 2003 I also get:

Microsoft (R) Mouse Driver Version 8.20
Copyright (C) Microsoft Corp. 1983-1992
Copyright (C) IBM Corp. 1992-1993
Mouse Driver Installed
Loading...
Page Fault cr2=0fffbbb0 at eip-214; flags=3283
eax=ffffab00 ebx=1a001000 ecx=00000004 edx=ffffbbb0 esi=00281cb1 
edi=00001031
ebp=ffffab7f esp=00003ffc cs=af ds=b7 es=b7 fs=a7 gs=0 ss=a7 error=0004
A:\GHOST>

Which is exactly the same as the original author.

I was wondering if anybody fixed it and if so how?

-- 
Jeff Wiegley, PhD                        http://www.csun.edu/~jeffw
Computer Science Assistant Professor    EA1407 Engineering Addition
California State University Northridge       email   jeffw@csun.edu
18111 Nordhoff Street                 office phone   818.677.3887
Northridge CA 91330-8281            CS Dept. phone   818.677.3398
USA                       (ignore:cea2d3a38843531c7def1deff59114de)

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-13 17:49 [Qemu-devel] Norton Ghost crashes with page fault for me too Jeff Wiegley
@ 2005-06-14  2:37 ` jeebs
  2005-06-14 13:43   ` Ishwar Rattan
  2005-06-14 16:30   ` [Qemu-devel] " Henrik Nordstrom
  2005-06-14 13:54 ` Elefterios Stamatogiannakis
  1 sibling, 2 replies; 26+ messages in thread
From: jeebs @ 2005-06-14  2:37 UTC (permalink / raw)
  To: qemu-devel

As near as I can tell, they haven't done a thing, and weren't the slightest 
bit interested in the bug report.

They don't even seem to keep track of reported bugs.  If a developer happens 
to see a bug report about something he worked on, he might check into it. 
But otherwise it gets forgotten in a day or two.

I'd think that the bug tracker at Savanah would be very useful for a 
project, but apparently it doesn't get used.  I don't think any of the 
devlopers or Fabrice have even suggested it get used to track bugs.

Savanah has a number of useful tools.... bug tracking, file download areas 
(for executables, etc.), task manager.  Even a patch manager, so people can 
submit patches easily.  Lots of things to help developers and users alike.

But none of that gets used.  Everything gets done though a mailing list, 
where it's easy to forget about stuff.  (Or in my case, not even get the 
message, due to spam filtering.)

FreeDOS mouse, various cd changing bugs, and qemu-img raw with 2g+ images 
are three other significant items that have never been fixed.  Plus there 
are times when qemu effects the host's mouse, even after qemu shuts down. 
(Might be a Windows / SDL problem.  Dunno.)

One minor one (but relatively easy to work on) is spaces in filenames.  Qemu 
can't do it in the monitor.  Can make it impossible to change floppies or 
cd's, some times.

I'm not even sure if anybody has investigated the problems.


If a developer has a problem, then they can check into it themselves, of 
course.

All us users can do is make a report and sit back and wait to see if 
anything happens.  Sometimes it can be a long wait.


----- Original Message ----- 
From: "Jeff Wiegley" <jeffw@csun.edu>
To: <qemu-devel@nongnu.org>
Sent: Monday, June 13, 2005 12:49 PM
Subject: [Qemu-devel] Norton Ghost crashes with page fault for me too.


>I noticed that one other person a long time back had
> this same problem.
>
> http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00345.html
>
> Basically, when I boot from an original boot/rescue disk created by
> Norton Ghost 2003 I also get:
>
> Microsoft (R) Mouse Driver Version 8.20
> Copyright (C) Microsoft Corp. 1983-1992
> Copyright (C) IBM Corp. 1992-1993
> Mouse Driver Installed
> Loading...
> Page Fault cr2=0fffbbb0 at eip-214; flags=3283
> eax=ffffab00 ebx=1a001000 ecx=00000004 edx=ffffbbb0 esi=00281cb1 
> edi=00001031
> ebp=ffffab7f esp=00003ffc cs=af ds=b7 es=b7 fs=a7 gs=0 ss=a7 error=0004
> A:\GHOST>
>
> Which is exactly the same as the original author.
>
> I was wondering if anybody fixed it and if so how?
>
> -- 
> Jeff Wiegley, PhD                        http://www.csun.edu/~jeffw
> Computer Science Assistant Professor    EA1407 Engineering Addition
> California State University Northridge       email   jeffw@csun.edu
> 18111 Nordhoff Street                 office phone   818.677.3887
> Northridge CA 91330-8281            CS Dept. phone   818.677.3398
> USA                       (ignore:cea2d3a38843531c7def1deff59114de)
>
>
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14  2:37 ` jeebs
@ 2005-06-14 13:43   ` Ishwar Rattan
  2005-06-14 16:39     ` Henrik Nordstrom
  2005-06-14 16:30   ` [Qemu-devel] " Henrik Nordstrom
  1 sibling, 1 reply; 26+ messages in thread
From: Ishwar Rattan @ 2005-06-14 13:43 UTC (permalink / raw)
  To: qemu-devel

A points to note:

It is free software, doesn't work for you, do not use it.

-ishwar

On Mon, 13 Jun 2005 jeebs@yango.us wrote:

> As near as I can tell, they haven't done a thing, and weren't the slightest
> bit interested in the bug report.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-13 17:49 [Qemu-devel] Norton Ghost crashes with page fault for me too Jeff Wiegley
  2005-06-14  2:37 ` jeebs
@ 2005-06-14 13:54 ` Elefterios Stamatogiannakis
  2005-06-14 15:45   ` Andreas Bollhalder
  1 sibling, 1 reply; 26+ messages in thread
From: Elefterios Stamatogiannakis @ 2005-06-14 13:54 UTC (permalink / raw)
  To: qemu-devel

  If you are using
Windows: Try qvm86 + qemu (there was an old build of these two in freeoszoo)
Linux: Try kqemu + qemu

  There are some problems that the combination of qemu + kqemu or qvm86 
solve.

  lefteris.

Jeff Wiegley wrote:
> I noticed that one other person a long time back had
> this same problem.
> 
> http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00345.html
> 
> Basically, when I boot from an original boot/rescue disk created by
> Norton Ghost 2003 I also get:
> 
> Microsoft (R) Mouse Driver Version 8.20
> Copyright (C) Microsoft Corp. 1983-1992
> Copyright (C) IBM Corp. 1992-1993
> Mouse Driver Installed
> Loading...
> Page Fault cr2=0fffbbb0 at eip-214; flags=3283
> eax=ffffab00 ebx=1a001000 ecx=00000004 edx=ffffbbb0 esi=00281cb1 
> edi=00001031
> ebp=ffffab7f esp=00003ffc cs=af ds=b7 es=b7 fs=a7 gs=0 ss=a7 error=0004
> A:\GHOST>
> 
> Which is exactly the same as the original author.
> 
> I was wondering if anybody fixed it and if so how?
> 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* RE: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 13:54 ` Elefterios Stamatogiannakis
@ 2005-06-14 15:45   ` Andreas Bollhalder
  0 siblings, 0 replies; 26+ messages in thread
From: Andreas Bollhalder @ 2005-06-14 15:45 UTC (permalink / raw)
  To: qemu-devel

I suspect that kernel acceleration (qvm86/kqemu) doesn't work with DOS
(16bit) on a QEMU supported OS (32/64bit).

Andreas

> -----Original Message-----
> From: qemu-devel-bounces+bolle=geodb.org@nongnu.org 
> [mailto:qemu-devel-bounces+bolle=geodb.org@nongnu.org] On 
> Behalf Of Elefterios Stamatogiannakis
> Sent: Tuesday, June 14, 2005 3:55 PM
> To: qemu-devel@nongnu.org
> Subject: Re: [Qemu-devel] Norton Ghost crashes with page 
> fault for me too.
> 
> 
>   If you are using
> Windows: Try qvm86 + qemu (there was an old build of these 
> two in freeoszoo)
> Linux: Try kqemu + qemu
> 
>   There are some problems that the combination of qemu + 
> kqemu or qvm86 
> solve.
> 
>   lefteris.
> 
> Jeff Wiegley wrote:
> > I noticed that one other person a long time back had
> > this same problem.
> > 
> > http://lists.gnu.org/archive/html/qemu-devel/2005-02/msg00345.html
> > 
> > Basically, when I boot from an original boot/rescue disk created
by
> > Norton Ghost 2003 I also get:
> > 
> > Microsoft (R) Mouse Driver Version 8.20
> > Copyright (C) Microsoft Corp. 1983-1992
> > Copyright (C) IBM Corp. 1992-1993
> > Mouse Driver Installed
> > Loading...
> > Page Fault cr2=0fffbbb0 at eip-214; flags=3283
> > eax=ffffab00 ebx=1a001000 ecx=00000004 edx=ffffbbb0 esi=00281cb1 
> > edi=00001031
> > ebp=ffffab7f esp=00003ffc cs=af ds=b7 es=b7 fs=a7 gs=0 
> ss=a7 error=0004
> > A:\GHOST>
> > 
> > Which is exactly the same as the original author.
> > 
> > I was wondering if anybody fixed it and if so how?
> > 
> 
> 
> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel
> 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14  2:37 ` jeebs
  2005-06-14 13:43   ` Ishwar Rattan
@ 2005-06-14 16:30   ` Henrik Nordstrom
  2005-06-14 17:11     ` jeebs
  1 sibling, 1 reply; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-14 16:30 UTC (permalink / raw)
  To: qemu-devel

On Mon, 13 Jun 2005 jeebs@yango.us wrote:

> If a developer has a problem, then they can check into it themselves, of
> course.

Yes.

> All us users can do is make a report and sit back and wait to see if
> anything happens.  Sometimes it can be a long wait.

Or you could go the open-source approach and hire a developer (there is 
plenty on the market if one cares to look) to fix the problems you may 
have. Certainly several (but perhaps not all) of the quirks you mentioned 
doesn't even require any qemu specifik knowledge.

Only relying on the existing qemu developers pride may work in some cases, 
but it should be taken for what it is, not a warranty that things do get 
fixed in the line you want or when.

Regards
Henrik

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 13:43   ` Ishwar Rattan
@ 2005-06-14 16:39     ` Henrik Nordstrom
  2005-06-14 17:14       ` jeebs
  0 siblings, 1 reply; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-14 16:39 UTC (permalink / raw)
  To: qemu-devel

On Tue, 14 Jun 2005, Ishwar Rattan wrote:

> A points to note:
>
> It is free software, doesn't work for you, do not use it.

I would put it in slightly different words:

It's free software (as in free speech, not gratis), if it doesn't work for 
you fix it or have it fixed for you by whatever means you find suitable. 
If you do not want to have it fixed find an alternative which suits you 
better.

Regards
Henrik

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 16:30   ` [Qemu-devel] " Henrik Nordstrom
@ 2005-06-14 17:11     ` jeebs
  2005-06-15 13:20       ` Henrik Nordstrom
  0 siblings, 1 reply; 26+ messages in thread
From: jeebs @ 2005-06-14 17:11 UTC (permalink / raw)
  To: qemu-devel

"Henrik Nordstrom"

>> All us users can do is make a report and sit back and wait to see if
>> anything happens.  Sometimes it can be a long wait.
>
> Or you could go the open-source approach and hire a developer (there is

That's more than a little extreme.

Frankly, it'd be a heck of a lot cheaper to buy and use vmware.... Oh 
wait... I *do* use vmware.

I'm not silly enough to actually depend on qemu.  Qemu is an opensource 
project that I hope I will be able to use someday.  Until that time, I'm 
helping the development as best I can.

> plenty on the market if one cares to look) to fix the problems you may 
> have. Certainly several (but perhaps not all) of the quirks you mentioned 
> doesn't even require any qemu specifik knowledge.

They would require at least some knowledge.  Some of them more than a little 
amount.

> Only relying on the existing qemu developers pride may work in some cases, 
> but it should be taken for what it is, not a warranty that things do get 
> fixed in the line you want or when.

No, I know there's no warranty.

But it gets more than a little darn frustrating when you are enthused about 
the project, you try to help the devlopers and project by deliberately doing 
the testing to find bugs and problems, you report the bugs and problems..... 
And nothing happens.

Not an acknowledgement.  Not a fix.  Nothing.

Not that week.  Not that month.  Not the next month.  Basically, the effort 
you deliberately put into finding bugs and reporting the bugs has 
disappeared.

I don't expect bugs to get fixed in 36 hours.  No, of course not.  Or even 
in a week or so.  But it would be nice if the bug reports didn't just 
disappear into the void.



As I said in my other message, Savanah has facilities for helping users and 
developers alike.

Ways to report bugs (so they don't get lost)  (Really... Do you know what 
bugs still exist in qemu???  No.  Nobody does.  Because they get forgotten 
about in a few days.  Or the interested parties may miss the messages due to 
spam filtering.)

Ways for bugs to be confirmed.

Ways for developers to submit patches (so they don't get lost in spam 
filtering.)

And so on.


Qem is outgrowing the 'mailing list' approach.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 16:39     ` Henrik Nordstrom
@ 2005-06-14 17:14       ` jeebs
  2005-06-14 17:40         ` Henrik Nordstrom
  2005-06-14 20:27         ` Jim C. Brown
  0 siblings, 2 replies; 26+ messages in thread
From: jeebs @ 2005-06-14 17:14 UTC (permalink / raw)
  To: qemu-devel

From: "Henrik Nordstrom" <hno@marasystems.com>

>> A points to note:
>>
>> It is free software, doesn't work for you, do not use it.
>
> I would put it in slightly different words:
>
> It's free software (as in free speech, not gratis), if it doesn't work for 
> you fix it or have it fixed for you by whatever means you find suitable. 
> If you do not want to have it fixed find an alternative which suits you 
> better.

Not all of us are developers.

The best that many can do is test qemu and report problems when they are 
found.

Some of us do a bit more, by deliberately testing qemu with lots of 
software, looking for bugs.  And reporting bugs when they are found.

But that's no excuse for bug reports to just vanish into the void.  Without 
an awknowledgement or somebody writting it down as a bug in qemu that needs 
to get fixed eventually.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 17:14       ` jeebs
@ 2005-06-14 17:40         ` Henrik Nordstrom
  2005-06-14 18:51           ` jeebs
  2005-06-14 20:27         ` Jim C. Brown
  1 sibling, 1 reply; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-14 17:40 UTC (permalink / raw)
  To: qemu-devel

On Tue, 14 Jun 2005 jeebs@yango.us wrote:

>> It's free software (as in free speech, not gratis), if it doesn't work for
>> you fix it or have it fixed for you by whatever means you find suitable.
>> If you do not want to have it fixed find an alternative which suits you
>> better.
>
> Not all of us are developers.

And is why I said .. "or have it fixed for you by whatever means you find 
suitable.". With a little imagination you will realize there is many 
options

   a) Politely tell the current developers about the bug and hope they 
eventually fix it.

   b) Try to fix it yourself.

   c) Convince someone more knowledgeable in programming than you to fix 
the problem for you.

   d) Hire a qemu developer to have the problem fixed for you.

   d) Hire a independent developer to have the problem fixed for you.

   e) Wine about the problem to make sure it won't get fixed for you, or if 
you are lucky pisses someone off to the point that they acually fixes the 
problem just to get you silent.

and many more..

> The best that many can do is test qemu and report problems when they are
> found.

Then you have to accept that the developers do the best they can in their 
interest for the benefit of all.

> But that's no excuse for bug reports to just vanish into the void.  Without
> an awknowledgement or somebody writting it down as a bug in qemu that needs
> to get fixed eventually.

There rarely is a void these days. If you send a bug report to a public 
mailinglist then it

   a) Gets archived

   b) Other people later having the same problem quite likely finds it in 
the archives and refers to it when reporting the same issue again if it 
still isn't fixed.

So even if there is no official bugtracking tool (which depending on the 
developer situation can be good or bad) the report isn't really lost.

If you send bug reports in private directly to one developer then there 
may be a void if that developer decides the bug is not interesting for him 
to work on at that time.

Regards
Henrik

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 17:40         ` Henrik Nordstrom
@ 2005-06-14 18:51           ` jeebs
  2005-06-15  4:08             ` Herbert Poetzl
  0 siblings, 1 reply; 26+ messages in thread
From: jeebs @ 2005-06-14 18:51 UTC (permalink / raw)
  To: qemu-devel

From: "Henrik Nordstrom"


>> The best that many can do is test qemu and report problems when they are
>> found.
>
> Then you have to accept that the developers do the best they can in their 
> interest for the benefit of all.

Generally, the way open source works is that a bug that directly effects a 
developer, gets fixed.  They get annoyed enough they stop what they are 
doing and fix it.

A bug that directly effects code they have written, might get checked into.

If it's a bug they can live with or work around, it doesn't get fixed.  And 
probably not reported, for that matter.

If it's a bug that effects an OS that they don't use, it gets ignored. 
(Hence, the Windows builds were broken for a long time and nobody noticed it 
or if they did notice, didn't bother to fix it.)


>> But that's no excuse for bug reports to just vanish into the void. 
>> Without
>> an awknowledgement or somebody writting it down as a bug in qemu that 
>> needs
>> to get fixed eventually.
>
> There rarely is a void these days. If you send a bug report to a public 
> mailinglist then it

That makes the very very large assumption that the developers deliberately 
go looking through the back message archives for bugs that haven't been 
fixed.

After a couple days, people just forget about reported bugs.


>   b) Other people later having the same problem quite likely finds it in 
> the archives and refers to it when reporting the same issue again if it 
> still isn't fixed.

Similar bugs can show up in different ways.

Even when a bug does show up repeatedly, and effects many people, doesn't 
mean anybody cares to look into it.

It just turns into one of those consistant bugs that everybody knows about 
but no longer think of as a bug.  It becomes a 'feature' or a 'quirk'. 
"It's just the way qemu does things" kind of mental shift.

The cd changing bugs are excellent examples.

They've been around for so long that most people in here no longer even 
think of them as bugs.  They are just simply quirks in qemu.  And because 
they are no longer 'bugs' but 'quirks', nobody even thinks to look into it.

Never mind whether they would find the bug or be able to fix it.  It's been 
around so long that they don't even *think* of it as a bug anymore, so they 
don't even *think* to look at it.

(I"m not saying the cd changing bugs are absolutely critical.  Yes, it does 
prevent some OS's from being installed!  But it doesn't crash qemu, etc.  It 
does show how a bug can stop being thought of as a bug.)

> So even if there is no official bugtracking tool (which depending on the 
> developer situation can be good or bad) the report isn't really lost.

Technically, yes, it does get archived.

But effectively it gets lost because it's no longer immediately visible as a 
bug.  You have to specifically go looking for bug reports through the 
archives.  And then go looking through the messages again to see if it's 
been fixed.  (Either partially or fully.)


Mailing lists can be very convenient.

But they also make it easy for things to get essentially lost.  If something 
isn't in a recent message, then your brain just tends to forget about it 
after a few days.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 17:14       ` jeebs
  2005-06-14 17:40         ` Henrik Nordstrom
@ 2005-06-14 20:27         ` Jim C. Brown
  2005-06-14 20:54           ` [Qemu-devel] " Ronald
                             ` (2 more replies)
  1 sibling, 3 replies; 26+ messages in thread
From: Jim C. Brown @ 2005-06-14 20:27 UTC (permalink / raw)
  To: qemu-devel

On Tue, Jun 14, 2005 at 12:14:05PM -0500, jeebs@yango.us wrote:
> Not all of us are developers.
> 
> The best that many can do is test qemu and report problems when they are 
> found.
> 
> Some of us do a bit more, by deliberately testing qemu with lots of 
> software, looking for bugs.  And reporting bugs when they are found.

If you really want a bug to be fixed badly, and you have no idea of how to fix
it, what you need to do is contact the developer of that code and let that
person know about the bug.

E.g. I'm the developer of the gtk2 interface for qemu, and I have no idea about
what bugs it may have as no one has reported any to me. In fact, I have no idea
if anyone is even using it because I get no direct feedback. This is especially
true for using the gtk2 interface under Windows, because I am unable to test
the code there. If someone who could test it did, and told me about the bug,
I'd fix it right away.

The only problem with this approach is that the section of code you are interested
in having fixed may not have an active developer (person left a while ago or
it was a section written by Fabrice himself that he doesn't have time to go
over anymore). In that case, there isn't much you can do. Documenting bugs is
still good because a) we can let other users know its a known bug and b) when
a new maintainer for that section of code comes along, they'll be able to get
started on the fixes right away. But this is only satisfactory if you are a very
patient person.

> 
> But that's no excuse for bug reports to just vanish into the void.  Without 
> an awknowledgement or somebody writting it down as a bug in qemu that needs 
> to get fixed eventually.
> 

No one looks at the Savanah bug tracker because its never been used. If you were
to say submit every unfixed bug you found there, just maybe those of us who
bother to look every once in a while will see it and fix it.

Do this often enough and others will use it, etc... the qemu user forum and
the qemu irc channel developed in much the same way.

-- 
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
  2005-06-14 20:27         ` Jim C. Brown
@ 2005-06-14 20:54           ` Ronald
  2005-06-14 21:15           ` [Qemu-devel] " jeebs
  2005-06-14 21:46           ` [Qemu-devel] " Heike C. Zimmerer
  2 siblings, 0 replies; 26+ messages in thread
From: Ronald @ 2005-06-14 20:54 UTC (permalink / raw)
  To: qemu-devel

Le Tue, 14 Jun 2005 16:27:12 -0400, Jim C. Brown a écrit :


> E.g. I'm the developer of the gtk2 interface for qemu, and I have no idea
> about what bugs it may have as no one has reported any to me. In fact, I
> have no idea if anyone is even using it because I get no direct feedback.
> This is especially true for using the gtk2 interface under Windows,
> because I am unable to test the code there. If someone who could test it
> did, and told me about the bug, I'd fix it right away.

If I can get gtk2 to work on windows , be sure I'll report/share , but
at this time I have had no success with gtk-2.4 (something about
mms-bitfields and gtk_box) on win98 (that's all I have), at least I can
build but can't run it with -use-gtk. 

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 20:27         ` Jim C. Brown
  2005-06-14 20:54           ` [Qemu-devel] " Ronald
@ 2005-06-14 21:15           ` jeebs
  2005-06-14 22:18             ` Jim C. Brown
  2005-06-14 21:46           ` [Qemu-devel] " Heike C. Zimmerer
  2 siblings, 1 reply; 26+ messages in thread
From: jeebs @ 2005-06-14 21:15 UTC (permalink / raw)
  To: qemu-devel

"Jim C. Brown"


>> Some of us do a bit more, by deliberately testing qemu with lots of
>> software, looking for bugs.  And reporting bugs when they are found.
>
> If you really want a bug to be fixed badly, and you have no idea of how to 
> fix
> it, what you need to do is contact the developer of that code and let that
> person know about the bug.

That's not really practical, because most of us would have no idea who to 
contact.


> E.g. I'm the developer of the gtk2 interface for qemu, and I have no idea 
> about
> what bugs it may have as no one has reported any to me. In fact, I have no 
> idea
> if anyone is even using it because I get no direct feedback. This is 
> especially
> true for using the gtk2 interface under Windows, because I am unable to 
> test
> the code there. If someone who could test it did, and told me about the 
> bug,
> I'd fix it right away.

I do use the Windows builds...

I'm willing to do some testing.  But you'll have to tell me how to do the 
gtk2 interface under windows.....

The only interface I know of is the regular SDL interface in the windows 
version.

But yes, if you really do want somebody to test it, and do want feedback, 
then I am willing to try.  It wont be a major test for hours and hours kind 
of thing.  But I can play around with it for a while and see if there are 
any obvious problems.


Contrary to what some might suspect, I *am* willing to test qemu and report 
bugs.  But only for as long as I think it might do any good, and that I'm 
not being ignored.

Even the acknowledgement of a bug can be a major encouragement to find and 
report new problems.


> over anymore). In that case, there isn't much you can do. Documenting bugs 
> is
> still good because a) we can let other users know its a known bug and b) 
> when
> a new maintainer for that section of code comes along, they'll be able to 
> get
> started on the fixes right away. But this is only satisfactory if you are 
> a very
> patient person.

I have been willing to do that.

But it gets significantly frustrating when you see the same problems month 
after month after month, etc.

Bug reporting tends to feel a lot like shouting in a room full of deaf 
people...

And bug reports get lost so easily.

If you aren't the developer of that piece of code, what are the odds that 
you are actually going to remember the bug in a few days?


> No one looks at the Savanah bug tracker because its never been used. If 
> you were
> to say submit every unfixed bug you found there, just maybe those of us 
> who
> bother to look every once in a while will see it and fix it.

I have thought about it.

I've even started to do it a few times.  Come to think of it, I even did 
that a few times in the past year.

But since it's not used, and none of the developers suggest it being used, I 
tend to get the feeling that it'd be a waste of time.

Right now, there are 50 bugs reported, and 50 bugs open.

http://savannah.nongnu.org/bugs/?group=qemu


> Do this often enough and others will use it, etc... the qemu user forum 
> and
> the qemu irc channel developed in much the same way.

The qemu user forum does get regular comments about bugs etc.

About the best we can tell them is something like "Yes, that looks like a 
bug.  No, it probaly isn't going to get fixed any time soon.  No, most of 
the qemu developers don't visit here."

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
  2005-06-14 20:27         ` Jim C. Brown
  2005-06-14 20:54           ` [Qemu-devel] " Ronald
  2005-06-14 21:15           ` [Qemu-devel] " jeebs
@ 2005-06-14 21:46           ` Heike C. Zimmerer
  2005-06-14 22:43             ` Jim C. Brown
  2 siblings, 1 reply; 26+ messages in thread
From: Heike C. Zimmerer @ 2005-06-14 21:46 UTC (permalink / raw)
  To: qemu-devel

"Jim C. Brown" <jma5@umd.edu> writes:

> E.g. I'm the developer of the gtk2 interface for qemu, and I have no
> idea about what bugs it may have as no one has reported any to
> me. In fact, I have no idea if anyone is even using it because I get
> no direct feedback.

I'm using the snapshots from dad-answers.com/qemu/, and from time to
time did a grep for gtk through the entire source tree, but didn't
find any mention of it there.

Maybe I've missed something, so could you explain how to get hold of
the gtk code?  Thanks.

- Heike

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 21:15           ` [Qemu-devel] " jeebs
@ 2005-06-14 22:18             ` Jim C. Brown
  2005-06-14 23:02               ` jeebs
  0 siblings, 1 reply; 26+ messages in thread
From: Jim C. Brown @ 2005-06-14 22:18 UTC (permalink / raw)
  To: qemu-devel

On Tue, Jun 14, 2005 at 04:15:41PM -0500, jeebs@yango.us wrote:
> "Jim C. Brown"
> 
> 
> >> Some of us do a bit more, by deliberately testing qemu with lots of
> >> software, looking for bugs.  And reporting bugs when they are found.
> >
> > If you really want a bug to be fixed badly, and you have no idea of how to 
> > fix
> > it, what you need to do is contact the developer of that code and let that
> > person know about the bug.
> 
> That's not really practical, because most of us would have no idea who to 
> contact.
> 

I didn't think about that. I generally ask that on the irc channel, and get
my answer there. Or I search the archives to see who was working on the code.

But if there is no developer, it may take a lot of work just to find that out.

> 
> > E.g. I'm the developer of the gtk2 interface for qemu, and I have no idea 
> > about
> > what bugs it may have as no one has reported any to me. In fact, I have no 
> > idea
> > if anyone is even using it because I get no direct feedback. This is 
> > especially
> > true for using the gtk2 interface under Windows, because I am unable to 
> > test
> > the code there. If someone who could test it did, and told me about the 
> > bug,
> > I'd fix it right away.
> 
> I do use the Windows builds...
> 
> I'm willing to do some testing.  But you'll have to tell me how to do the 
> gtk2 interface under windows.....
> 

Well, you will need to apply the patches and compile from source yourself.
Not to mention, you'll have to download the windows versions of the GTK2
libraries (you can probably get binaries).

Let me know if you need clearer instructions.

> The only interface I know of is the regular SDL interface in the windows 
> version.
> 

They should look identical. Fabrice mentioned some SDL keyboard bugs,
presumably you won't see those in the GTK version.

I'll let you know now: Fullscreen mode won't work. The mouse will be grabbed
(and made ungrabbable until you exit "fullscreen" mode) and the window will
be moved to the top left corner of the screen. Otherwise, no difference (if
my code works). Everything else should work identically between the two.

> But yes, if you really do want somebody to test it, and do want feedback, 
> then I am willing to try.  It wont be a major test for hours and hours kind 
> of thing.  But I can play around with it for a while and see if there are 
> any obvious problems.
> 

That would be great.

> But it gets significantly frustrating when you see the same problems month 
> after month after month, etc.
> 

Only report it the first time you see it.

> Bug reporting tends to feel a lot like shouting in a room full of deaf 
> people...
> 
> And bug reports get lost so easily.
> 
> If you aren't the developer of that piece of code, what are the odds that 
> you are actually going to remember the bug in a few days?
> 

If you are the developer, you will remember the bug. Otherwise, it doesn't
really matter if you remember or not (in the sense that forgetting will hurt
things).

> 
> > No one looks at the Savanah bug tracker because its never been used. If 
> > you were
> > to say submit every unfixed bug you found there, just maybe those of us 
> > who
> > bother to look every once in a while will see it and fix it.
> 
> I have thought about it.
> 
> I've even started to do it a few times.  Come to think of it, I even did 
> that a few times in the past year.
> 
> But since it's not used, and none of the developers suggest it being used, I 
> tend to get the feeling that it'd be a waste of time.
> 
> Right now, there are 50 bugs reported, and 50 bugs open.
> 
> http://savannah.nongnu.org/bugs/?group=qemu
> 

Some one of those bugs have actually been fixed. A patch was sent a while
ago that got rid of bug #9441 IDE multimode failure. (Long before the bug itself
was submitted.) So was the gcc 3.4 bug (which includes a link to the patch).
Etc.

I have to take that back. Savannah bug tracker is not a good way to go, as e.g.
even if the bugs are fixed none of the developers can say so or close the bug.
Only Fabrice has access. Also, only he has commit access so good patches, such
as the graphics patch, don't always make it in right away.

Still, not enough developers have had issues with the way Fabrice runs things,
so thats not likely to change.

> 
> > Do this often enough and others will use it, etc... the qemu user forum 
> > and
> > the qemu irc channel developed in much the same way.
> 
> The qemu user forum does get regular comments about bugs etc.
> 
> About the best we can tell them is something like "Yes, that looks like a 
> bug.  No, it probaly isn't going to get fixed any time soon.  No, most of 
> the qemu developers don't visit here."
> 

Yes, more communication is needed. We shouldnt be bothered by bugs which have
patches to fix them or bugs that are a non issue or bugs that are easily
worked around, and users should be able to find the answers to this easily.
But I am not entirely sure why this is not the case right now, so I have no
bright idea to suggest. Someone else will have to fill the void here.


As a side note, I have a hackish patch that will allow you to change the cdrom
in the monitor to a filename that includes spaces. It was not a difficult change
to implement. I don't see why you couldn't have fixed that yourself (if it hasn't
already been fixed in main CVS).

-- 
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
  2005-06-14 21:46           ` [Qemu-devel] " Heike C. Zimmerer
@ 2005-06-14 22:43             ` Jim C. Brown
  2005-06-15 17:28               ` jeebs
  2005-06-15 18:11               ` Heike C. Zimmerer
  0 siblings, 2 replies; 26+ messages in thread
From: Jim C. Brown @ 2005-06-14 22:43 UTC (permalink / raw)
  To: hcz, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 984 bytes --]

On Tue, Jun 14, 2005 at 11:46:32PM +0200, Heike C. Zimmerer wrote:
> "Jim C. Brown" <jma5@umd.edu> writes:
> 
> > E.g. I'm the developer of the gtk2 interface for qemu, and I have no
> > idea about what bugs it may have as no one has reported any to
> > me. In fact, I have no idea if anyone is even using it because I get
> > no direct feedback.
> 
> I'm using the snapshots from dad-answers.com/qemu/, and from time to
> time did a grep for gtk through the entire source tree, but didn't
> find any mention of it there.
> 
> Maybe I've missed something, so could you explain how to get hold of
> the gtk code?  Thanks.
> 
> - Heike
> 

They weren't committed to the CVS tree yet. You'll need to get it in patch
form. I'm reattaching all the necessary patches and files here, so you can get
it all in one place. (The .c files I've attached should be dropped in the main qemu
directory).

-- 
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.

[-- Attachment #2: qemu-gtk-patch.diff --]
[-- Type: text/plain, Size: 4575 bytes --]

diff -u qemu.orig/Makefile.target qemu/Makefile.target
--- qemu.orig/Makefile.target	Mon May 30 19:42:28 2005
+++ qemu/Makefile.target	Mon May 30 19:57:26 2005
@@ -357,6 +357,10 @@
 ifdef CONFIG_SDL
 VL_OBJS+=sdl.o
 endif
+ifdef CONFIG_GTK
+VL_OBJS+=gtk2.o
+VL_OBJS+=fullscreen.o
+endif
 ifdef CONFIG_COCOA
 VL_OBJS+=cocoa.o
 COCOA_LIBS=-F/System/Library/Frameworks -framework Cocoa
@@ -392,13 +396,19 @@
 endif
 
 $(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
-	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS)
+	$(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(GTK_LIBS) $(FS_LIBS) $(VL_LIBS)
 
 cocoa.o: cocoa.m
 	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
 
 sdl.o: sdl.c keymaps.c sdl_keysym.h
 	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
+
+gtk2.o: gtk2.c keymaps.c gdk_keysym.h fullscreen.h
+	$(CC) $(CFLAGS) $(DEFINES) $(GTK_CFLAGS) -c -o $@ $<
+
+fullscreen.o: $(FSDRV) fullscreen.h
+	$(CC) $(CFLAGS) $(DEFINES) -c -o $@ $<
 
 sdlaudio.o: sdlaudio.c
 	$(CC) $(CFLAGS) $(DEFINES) $(SDL_CFLAGS) -c -o $@ $<
diff -u qemu.orig/configure qemu/configure
--- qemu.orig/configure	Mon May 30 19:40:14 2005
+++ qemu/configure	Mon May 30 20:10:11 2005
@@ -15,6 +15,7 @@
 TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o"
 TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}"
 TMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S"
+TMPF="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}-conf"
 
 # default parameters
 prefix=""
@@ -171,6 +172,10 @@
   ;;
   --disable-sdl) sdl="no"
   ;;
+  --enable-gtk) gtk="yes"
+  ;;
+  --set-fs-driver=*) fsdrv=`echo $opt | cut -d '=' -f 2`
+  ;;
   --enable-fmod) fmod="yes"
   ;;
   --fmod-lib=*) fmod_lib=${opt#--fmod-lib=}
@@ -311,6 +316,62 @@
 fi # cross compilation
 fi # -z $sdl
 
+##########################################
+# GTK probe
+
+gtk_too_old=no
+
+if test -z "$gtk" ; then
+
+gtk=no
+
+# normal GTK probe
+cat > $TMPC << EOF
+#include <stdlib.h>
+#include <gtk/gtk.h>
+int main(int argc, char **argv) { gtk_init(&argc, &argv); return EXIT_SUCCESS; }
+EOF
+
+if $cc -o $TMPE `pkg-config --cflags --libs gtk+-2.0 2> /dev/null` $TMPC 2> /dev/null ; then
+_gtkversion=`pkg-config --modversion gtk+-2.0 | sed 's/[^0-9]//g'`
+if test "$_sdlversion" -lt 240 ; then
+  gtk_too_old=yes
+else
+  gtk=yes
+
+fi
+
+fi # gtk compile test
+
+fi # -z $gtk
+
+if [ "$gtk" = "yes" ]; then
+
+if [ "$fsdrv" = "" ] ; then
+
+if [ "$bsd" = "yes" -o "$linux" = "yes" ]; then
+  fsdrv=xvid_fs.c
+else
+  fsdrv=null_fs.c
+fi
+
+fi # fsdrv test
+
+if [ "$fsdrv" = "xvid_fs.c" -o "$fsdrv" = "null_fs.c" ]; then
+  echo "fsdrv=$fsdrv" >> $TMPF
+else
+  echo "Warning: unknown gtk fullscreen driver: $fsdrv - using null driver"
+  echo 'fsdrv=null_fs.c' >> $TMPF
+  fsdrv=null_fs.c
+fi
+
+if [ "$fsdrv" = "xvid_fs.c" ]; then
+  FS_LIBS="-lX11 -lXxf86vm -lXext -L/usr/X11R6/lib"
+  echo 'FS_LIBS="-lX11 -lXxf86vm -lXext -L/usr/X11R6/lib"' >> $TMPF
+fi
+
+fi # gtk=yes test
+
 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
 cat << EOF
 
@@ -434,6 +495,8 @@
 if test "$sdl" != "no" ; then
     echo "SDL static link   $sdl_static"
 fi
+echo "GTK support       $gtk"
+echo "GTK FS driver     $fsdrv"
 echo "mingw32 support   $mingw32"
 echo "Adlib support     $adlib"
 echo -n "FMOD support      $fmod"
@@ -643,6 +706,8 @@
 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"`
 echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h
 
+. $TMPF
+
 if test "$target_cpu" = "i386" ; then
   echo "TARGET_ARCH=i386" >> $config_mak
   echo "#define TARGET_ARCH \"i386\"" >> $config_h
@@ -720,6 +785,17 @@
     fi
 fi
 
+if test "$gtk" = "yes" ; then
+    . $TMPF
+    echo "#define CONFIG_GTK 1" >> $config_h
+    echo "CONFIG_GTK=yes" >> $config_mak
+    echo "GTK_LIBS=`pkg-config --libs gtk+-2.0`" >> $config_mak
+    echo "GTK_CFLAGS=`pkg-config --cflags gtk+-2.0`" >> $config_mak
+    echo "FSDRV=$fsdrv" >> $config_mak
+    echo "FS_LIBS=$FS_LIBS" >> $config_mak
+    echo "" >> $config_mak
+fi
+
 if test "$cocoa" = "yes" ; then
     echo "#define CONFIG_COCOA 1" >> $config_h
     echo "CONFIG_COCOA=yes" >> $config_mak
@@ -739,4 +815,4 @@
     done
 fi
 
-rm -f $TMPO $TMPC $TMPE $TMPS
+rm -f $TMPO $TMPC $TMPE $TMPS $TMPF
diff -u qemu.orig/vl.h qemu/vl.h
--- qemu.orig/vl.h	Mon May 30 19:40:14 2005
+++ qemu/vl.h	Sat May 28 16:16:18 2005
@@ -579,6 +579,9 @@
 /* sdl.c */
 void sdl_display_init(DisplayState *ds, int full_screen);
 
+/* gtk2.c */
+void gtk2_display_init(DisplayState *ds, int full_screen);
+
 /* cocoa.m */
 void cocoa_display_init(DisplayState *ds, int full_screen);
 

[-- Attachment #3: vl.c.diff --]
[-- Type: text/plain, Size: 1611 bytes --]

--- vl.c.orig	Tue May 31 14:53:22 2005
+++ vl.c	Tue May 31 14:52:55 2005
@@ -147,6 +147,7 @@
 TextConsole *vga_console;
 CharDriverState *serial_hds[MAX_SERIAL_PORTS];
 CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
+int use_gtk = 0;
 #ifdef TARGET_I386
 int win2k_install_hack = 0;
 #endif
@@ -2877,6 +2878,7 @@
     QEMU_OPTION_cirrusvga,
     QEMU_OPTION_g,
     QEMU_OPTION_std_vga,
+    QEMU_OPTION_use_gtk,
     QEMU_OPTION_monitor,
     QEMU_OPTION_serial,
     QEMU_OPTION_parallel,
@@ -2947,6 +2949,7 @@
     { "localtime", 0, QEMU_OPTION_localtime },
     { "isa", 0, QEMU_OPTION_isa },
     { "std-vga", 0, QEMU_OPTION_std_vga },
+    { "use-gtk", 0, QEMU_OPTION_use_gtk },
     { "monitor", 1, QEMU_OPTION_monitor },
     { "serial", 1, QEMU_OPTION_serial },
     { "parallel", 1, QEMU_OPTION_parallel },
@@ -3345,6 +3348,9 @@
             case QEMU_OPTION_std_vga:
                 cirrus_vga_enabled = 0;
                 break;
+            case QEMU_OPTION_use_gtk:
+                use_gtk = 1;
+                break;
             case QEMU_OPTION_g:
                 {
                     const char *p;
@@ -3599,7 +3605,17 @@
     if (nographic) {
         dumb_display_init(ds);
     } else {
+#if defined(CONFIG_GTK)
 #if defined(CONFIG_SDL)
+	/* so we can choose */
+	if (use_gtk)
+        gtk2_display_init(ds, full_screen);
+	else
+        sdl_display_init(ds, full_screen);
+#else
+        gtk2_display_init(ds, full_screen);
+#endif
+#elif defined(CONFIG_SDL)
         sdl_display_init(ds, full_screen);
 #elif defined(CONFIG_COCOA)
         cocoa_display_init(ds, full_screen);

[-- Attachment #4: gtk2.c --]
[-- Type: text/plain, Size: 21578 bytes --]

/*
 * QEMU GTK2 display driver
 * based on SDL driver by Fabrice
 * 
 * Copyright (c) 2005 Jim Brown
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
#include "vl.h"

#include <gtk/gtk.h>
#include <gdk/gdk.h>

#include "fullscreen.h"

/* define our own bitshift enums to allow qemugtk to know difference between left and right alt - something gtk doesnt provide in its modifiers mask. this uses qemu's own modifier_state[] map in order to guess correctly */
typedef enum
{
	gtkshiftleft = 1 << 0,
	gtkshiftright = 1 << 1,
	gtkcontrolleft = 1 << 2,
	gtkcontrolright = 1 << 3,
	gtkaltleft = 1 << 4,
	gtkaltright = 1 << 5,
	gtkcapslock = 1 << 6
} gtk2keymod;


static GtkWidget *screen;
static GdkImage *image=NULL;
static GdkCursor *invisible_cursor;
static int ox = 0, oy = 0;
static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
static int last_vm_running;
static int gui_saved_grab;
static int gui_fullscreen;
static int gui_key_modifier_pressed;
static int gui_keysym;
static int gui_fullscreen_initial_grab;
static int gui_grab_code = gtkaltleft | gtkcontrolleft;
static uint8_t modifiers_state[256];
static unsigned int cw, ch;
static gint cx, cy;

static gboolean gtk2_expose(GtkWidget *wid, GdkEventExpose *event)
{
    gdk_draw_image(wid->window, wid->style->fg_gc[GTK_WIDGET_STATE(wid)], image, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height);
    return TRUE;
}

static void gtk2_update(DisplayState *ds, int x, int y, int w, int h)
{
    //    printf("updating x=%d y=%d w=%d h=%d\n", x, y, w, h);
    GdkEventExpose ev;
    ev.area.x = x;
    ev.area.y = y;
    ev.area.width = w;
    ev.area.height = h;
    gtk2_expose(screen, &ev);
}

static void gtk2_resize(DisplayState *ds, int w, int h)
{

    //    printf(" resizing to %d %d\n", w, h);

    if (gui_fullscreen)
    {
        if (cw != w || ch != h)
            fullscreen_switch(cx, cy, w, h); /* changing video modes */
        //gtk_window_fullscreen(GTK_WINDOW(screen));
    }
    else
    {
        //gtk_window_unfullscreen(GTK_WINDOW(screen));
    }

    cw = w; ch = h;

    if (image)
	 g_object_unref(image);

/* gdk_visual_get_best_with_depth() ??? but then how to paint onto window? */
    image = gdk_image_new(GDK_IMAGE_NORMAL, gdk_visual_get_system(), w, h);
    gdk_image_set_colormap(image, gdk_colormap_get_system());

    gtk_window_set_default_size(GTK_WINDOW(screen), w, h);
    gtk_widget_set_size_request(screen, w, h);
    gtk_window_resize(GTK_WINDOW(screen), w, h);

    ds->data = image->mem;
    ds->linesize = image->bpl;
    ds->depth = image->bits_per_pixel;
    ds->width = w;
    ds->height = h;
    gtk2_update(ds, 0, 0, w, h);
}

/* generic keyboard conversion */

#include "gdk_keysym.h"
#include "keymaps.c"

static kbd_layout_t *kbd_layout = NULL;

static uint8_t gtk2_keyevent_to_keycode_generic(const GdkEventKey *ev)
{
    int keysym;
    /* workaround for X11+SDL bug with AltGR - is it still needed for Gtk2? */
    keysym = ev->keyval;
    if (keysym == 0 && ev->hardware_keycode == 113)
	keysym = GDK_Mode_switch;
    return keysym2scancode(kbd_layout, keysym);
}

/* specific keyboard conversions from scan codes */

#if defined(_WIN32)

static uint8_t gtk2_keyevent_to_keycode(const GdkEventKey *ev)
{
    return ev->hardware_keycode; /* does this work on win32 gtk? */
}

#else

static const uint8_t x_keycode_to_pc_keycode[61] = {
   0xc7,      /*  97  Home   */
   0xc8,      /*  98  Up     */
   0xc9,      /*  99  PgUp   */
   0xcb,      /* 100  Left   */
   0x4c,        /* 101  KP-5   */
   0xcd,      /* 102  Right  */
   0xcf,      /* 103  End    */
   0xd0,      /* 104  Down   */
   0xd1,      /* 105  PgDn   */
   0xd2,      /* 106  Ins    */
   0xd3,      /* 107  Del    */
   0x9c,      /* 108  Enter  */
   0x9d,      /* 109  Ctrl-R */
   0x0,       /* 110  Pause  */
   0xb7,      /* 111  Print  */
   0xb5,      /* 112  Divide */
   0xb8,      /* 113  Alt-R  */
   0xc6,      /* 114  Break  */   
   0x0,         /* 115 */
   0x0,         /* 116 */
   0x0,         /* 117 */
   0x0,         /* 118 */
   0x0,         /* 119 */
   0x70,         /* 120 Hiragana_Katakana */
   0x0,         /* 121 */
   0x0,         /* 122 */
   0x73,         /* 123 backslash */
   0x0,         /* 124 */
   0x0,         /* 125 */
   0x0,         /* 126 */
   0x0,         /* 127 */
   0x0,         /* 128 */
   0x79,         /* 129 Henkan */
   0x0,         /* 130 */
   0x7b,         /* 131 Muhenkan */
   0x0,         /* 132 */
   0x7d,         /* 133 Yen */
   0x0,         /* 134 */
   0x0,         /* 135 */
   0x47,         /* 136 KP_7 */
   0x48,         /* 137 KP_8 */
   0x49,         /* 138 KP_9 */
   0x4b,         /* 139 KP_4 */
   0x4c,         /* 140 KP_5 */
   0x4d,         /* 141 KP_6 */
   0x4f,         /* 142 KP_1 */
   0x50,         /* 143 KP_2 */
   0x51,         /* 144 KP_3 */
   0x52,         /* 145 KP_0 */
   0x53,         /* 146 KP_. */
   0x47,         /* 147 KP_HOME */
   0x48,         /* 148 KP_UP */
   0x49,         /* 149 KP_PgUp */
   0x4b,         /* 150 KP_Left */
   0x4c,         /* 151 KP_ */
   0x4d,         /* 152 KP_Right */
   0x4f,         /* 153 KP_End */
   0x50,         /* 154 KP_Down */
   0x51,         /* 155 KP_PgDn */
   0x52,         /* 156 KP_Ins */
   0x53,         /* 157 KP_Del */
};

static uint8_t gtk2_keyevent_to_keycode(const GdkEventKey *ev)
{
    int keycode;

    keycode = ev->hardware_keycode;

    if (keycode < 9) {
	keycode = 0;
    } else if (keycode < 97) {
	keycode -= 8; /* just an offset */
    } else if (keycode < 158) {
	/* use conversion table */
	keycode = x_keycode_to_pc_keycode[keycode - 97];
    } else {
	keycode = 0;
    }
    return keycode;
}

#endif

static void reset_keys(void)
{
    int i;
    for(i = 0; i < 256; i++) {
	if (modifiers_state[i]) {
	    if (i & 0x80)
		kbd_put_keycode(0xe0);
	    kbd_put_keycode(i | 0x80);
	    modifiers_state[i] = 0;
	}
    }
}

/* convert GDK modifiers and invoke ugly hack to distinguish
between left and right shift/control/alt */
static guint gtk2_GetModState(const GdkEventKey *ev)
{
	guint key = 0, keyval = ev->keyval, state = ev->state;
	switch(keyval)
	{
		case GDK_Shift_L:
			if (ev->type != GDK_KEY_RELEASE)
				key |= gtkshiftleft;
			keyval = 1;
			break;
		case GDK_Shift_R:
			if (ev->type != GDK_KEY_RELEASE)
				key |= gtkshiftright;
			keyval = 1;
			break;
		case GDK_Control_L:
			if (ev->type != GDK_KEY_RELEASE)
				key |= gtkcontrolleft;
			keyval = 2;
			break;
		case GDK_Control_R:
			if (ev->type != GDK_KEY_RELEASE)
				key |= gtkcontrolright;
			keyval = 2;
			break;
		case GDK_Alt_L:
			if (ev->type != GDK_KEY_RELEASE)
				key |= gtkaltleft;
			keyval = 3;
			break;
		case GDK_Alt_R:
			if (ev->type != GDK_KEY_RELEASE)
				key |= gtkaltright;
			keyval = 3;
			break;
		case GDK_Caps_Lock:
			if (ev->type != GDK_KEY_RELEASE)
				key |= gtkcapslock;
			keyval = 4;
			break;
		default:
			keyval = 0;
			break;
	}
	if (keyval != 1 && (state & GDK_SHIFT_MASK))
	{
		if (modifiers_state[0x2a])
			key |= gtkshiftleft;
		if (modifiers_state[0x36])
			key |= gtkshiftright;
	}
	if (keyval != 2 && (state & GDK_CONTROL_MASK))
	{
		if (modifiers_state[0x1d])
			key |= gtkcontrolleft;
		if (modifiers_state[0x9d])
			key |= gtkcontrolright;
	}
	if (keyval != 3 && (state & GDK_MOD1_MASK)) /* fixme: need to do a check to make sure that alt is mapped to GDK_MOD1_MASK in the GDK_Keymap */
	{
		if (modifiers_state[0x38])
			key |= gtkaltleft;
		if (modifiers_state[0xb8])
			key |= gtkaltright;
	}
	if (keyval != 4 && (state & GDK_LOCK_MASK))
		key |= gtkcapslock;
	return key;
}

static void gtk2_process_key(GdkEventKey *ev)
{
    int keycode, v;

    if (ev->keyval == GDK_Pause) {
	/* specific case */
	v = 0;
	if (ev->type == GDK_KEY_RELEASE)
	    v |= 0x80;
	kbd_put_keycode(0xe1);
	kbd_put_keycode(0x1d | v);
	kbd_put_keycode(0x45 | v);
	return;
    }

    if (kbd_layout) {
	keycode = gtk2_keyevent_to_keycode_generic(ev);
    } else {
	keycode = gtk2_keyevent_to_keycode(ev);
    }

    switch(keycode) {
    case 0x00:
	/* sent when leaving window: reset the modifiers state */
	reset_keys();
	return;
    case 0x2a:                          /* Left Shift */
    case 0x36:                          /* Right Shift */
    case 0x1d:                          /* Left CTRL */
    case 0x9d:                          /* Right CTRL */
    case 0x38:                          /* Left ALT */
    case 0xb8:                         /* Right ALT */
	if (ev->type == GDK_KEY_RELEASE)
	    modifiers_state[keycode] = 0;
	else
	    modifiers_state[keycode] = 1;
	break;
    case 0x45: /* num lock */
    case 0x3a: /* caps lock */
	/* GTK does send the key up event, so we dont generate it */
	/*kbd_put_keycode(keycode);
	kbd_put_keycode(keycode | 0x80);
	return;*/
	break;
    }

    /* now send the key code */
    if (keycode & 0x80)
	kbd_put_keycode(0xe0);
    if (ev->type == GDK_KEY_RELEASE)
	kbd_put_keycode(keycode | 0x80);
    else
	kbd_put_keycode(keycode & 0x7f);
}

static void gtk2_update_caption(void)
{
    char buf[1024];
    strcpy(buf, "QEMU");
    if (!vm_running) {
	strcat(buf, " [Stopped]");
    }
    if (gui_grab) {
	strcat(buf, " - Press Ctrl-Alt to exit grab");
    }
    gtk_window_set_title(GTK_WINDOW(screen), buf);
}

/* what a nasty hack. this should be a part of the GDK, not external!!! */
#include "gdk_set_window_pointer.c"

static void gtk2_grab_start(void)
{
    gint y;
    guint events;
    GdkModifierType state; /* dummy var */
    events = GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_SCROLL_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK;
    y = gdk_pointer_grab(screen->window, TRUE, events, screen->window, invisible_cursor, GDK_CURRENT_TIME);
    if (y)
	printf("GTK Warning - pointer grab failed!\n");
    y = gdk_keyboard_grab(screen->window, TRUE, GDK_CURRENT_TIME);
    if (y)
	printf("GTK Warning - keyboard grab failed!\n");
    /* do a dummy read to avoid moving mouse - set ox and oy to stay in sync */
    gdk_window_get_pointer(screen->window, &ox, &oy, &state);
    gui_grab = 1;
    gtk2_update_caption();
}

static void gtk2_grab_end(void)
{
    gdk_pointer_ungrab(GDK_CURRENT_TIME);
    gdk_keyboard_ungrab(GDK_CURRENT_TIME);
    gdk_window_set_pointer(screen->window, cx, cy);
    gui_grab = 0;
    gtk2_update_caption();
}

static gboolean gtk2_send_mouse_scroll(GtkWidget *wid, GdkEventScroll *ev)
{
    int x, y, dx, dy, dz, state, buttons;
    if (gui_grab)
    {

    x = ev->x;
    y = ev->y;
    state = ev->state;
    buttons = 0;
    dx = x - ox;
    dy = y - oy;
    ox = x;
    oy = y;
    buttons = 0;
    if ((state & GDK_BUTTON1_MASK))
	buttons |= MOUSE_EVENT_LBUTTON;
    if ((state & GDK_BUTTON3_MASK))
	buttons |= MOUSE_EVENT_RBUTTON;
    if ((state & GDK_BUTTON2_MASK))
	buttons |= MOUSE_EVENT_MBUTTON;
    /* test wheel - copied from Sebastien Bechet's gtk.c */
    dz = 0;
    if ((state & GDK_BUTTON4_MASK) || ev->direction == GDK_SCROLL_UP)
	dz--;
    if ((state & GDK_BUTTON5_MASK) || ev->direction == GDK_SCROLL_DOWN)
	dz++;
    kbd_mouse_event(dx, dy, dz, buttons);

    }
    return TRUE;
}

static gboolean gtk2_send_mouse_button(GtkWidget *wid, GdkEventButton *ev)
{
    int x, y, dx, dy, dz, state, buttons;
    if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS)
        return TRUE; /* double or triple click - superflurious - ignore */
    if (gui_grab)
    {

    x = ev->x;
    y = ev->y;
    state = ev->state;
    buttons = 0;
    dx = x - ox;
    dy = y - oy;
    ox = x;
    oy = y;
    buttons = 0;
    if ((state & GDK_BUTTON1_MASK) || ev->button == 1)
	buttons |= MOUSE_EVENT_LBUTTON;
    if ((state & GDK_BUTTON3_MASK) || ev->button == 3)
	buttons |= MOUSE_EVENT_RBUTTON;
    if ((state & GDK_BUTTON2_MASK) || ev->button == 2)
	buttons |= MOUSE_EVENT_MBUTTON;
    /* XXX: test wheel */
    dz = 0;
    if ((state & GDK_BUTTON4_MASK) || ev->button == 4)
	dz--;
    if ((state & GDK_BUTTON5_MASK) || ev->button == 5)
	dz++;
    kbd_mouse_event(dx, dy, dz, buttons);

    }
    else
    {

    if (ev->button == 1 && ev->type == GDK_BUTTON_PRESS)
    {
	/* start grabbing all events */
	gtk2_grab_start();
    }

    }
    return TRUE;
}

static gboolean gtk2_send_mouse_move(GtkWidget *wid, GdkEventMotion *ev)
{
    int x, y, dx, dy, dz, state, buttons;
    if (gui_grab)
    {

    if (ev->is_hint)
    {
	gdk_window_get_pointer(ev->window, &x, &y, (GdkModifierType*)&state);
    }
    else
    {
	x = ev->x;
	y = ev->y;
	state = ev->state;
    }
    dx = x - ox;
    dy = y - oy;
    ox = x;
    oy = y;
    buttons = 0;
    if (state & GDK_BUTTON1_MASK)
	buttons |= MOUSE_EVENT_LBUTTON;
    if (state & GDK_BUTTON3_MASK)
	buttons |= MOUSE_EVENT_RBUTTON;
    if (state & GDK_BUTTON2_MASK)
	buttons |= MOUSE_EVENT_MBUTTON;
    /* XXX: test wheel */
    dz = 0;
    if (state & GDK_BUTTON4_MASK)
	dz--;
    if (state & GDK_BUTTON5_MASK)
	dz++;

    /* wrap the x,y coordinates back onto the window */
    if (ev->x <= (cw/4))
        x = ((3*cw/4)-1);
    if (ev->y <= (ch/4))
        y = ((3*ch/4)-1);
    if (ev->x >= (3*cw/4))
        x = (cw/4)+1;
    if (ev->y >= (3*ch/4))
        y = (ch/4)+1;

    gdk_window_set_pointer(screen->window, (gint)x, (gint)y);

    kbd_mouse_event(dx, dy, dz, buttons);

    }
    return TRUE;
}

static void toggle_full_screen(DisplayState *ds)
{
    gui_fullscreen = !gui_fullscreen;
    gtk2_resize(ds, image->width, image->height);
    if (gui_fullscreen) {
	gui_saved_grab = gui_grab;
	gtk2_grab_start();
        gtk_window_get_position(GTK_WINDOW(screen), &cx, &cy);
	/* ignore window manager decorations when in fullscreen mode */
	gtk_window_set_gravity(GTK_WINDOW(screen), GDK_GRAVITY_STATIC);
	gtk_window_move(GTK_WINDOW(screen), 0, 0);
        fullscreen_switch(cx, cy, ds->width, ds->height);
    } else {
        fullscreen_reset();
	gtk_window_set_gravity(GTK_WINDOW(screen), GDK_GRAVITY_NORTH_WEST);
	gtk_window_move(GTK_WINDOW(screen), cx, cy);
	if (!gui_saved_grab)
	    gtk2_grab_end();
    }
    vga_invalidate_display();
    vga_update_display();
}

static gboolean gtk2_key_press(GtkWidget *wid, GdkEventKey *ev, DisplayState *ds)
{
	int mod_state;
	    if (ev->type == GDK_KEY_PRESS) {
		mod_state = (gtk2_GetModState(ev) & (int)gui_grab_code) == (int)gui_grab_code;
		gui_key_modifier_pressed = mod_state;
		if (gui_key_modifier_pressed) {
		    int keycode;
		    keycode = gtk2_keyevent_to_keycode(ev);
		    switch(keycode) {
		    case 0x21: /* 'f' key on US keyboard */
			toggle_full_screen(ds);
			gui_keysym = 1;
			break;
		    case 0x02 ... 0x0a: /* '1' to '9' keys */ 
			console_select(keycode - 0x02);
			if (is_active_console(vga_console)) {
			    /* tell the vga console to redisplay itself */
			    vga_invalidate_display();
			} else {
			    /* display grab if going to a text console */
			    if (gui_grab)
				gtk2_grab_end();
			}
			gui_keysym = 1;
			break;
		    default:
			break;
		    }
		} else if (!is_active_console(vga_console)) {
		    int keysym;
		    keysym = 0;
		    if (ev->state & GDK_CONTROL_MASK) {
			switch(ev->keyval) {
			case GDK_Up: keysym = QEMU_KEY_CTRL_UP; break;
			case GDK_Down: keysym = QEMU_KEY_CTRL_DOWN; break;
			case GDK_Left: keysym = QEMU_KEY_CTRL_LEFT; break;
			case GDK_Right: keysym = QEMU_KEY_CTRL_RIGHT; break;
			case GDK_Home: keysym = QEMU_KEY_CTRL_HOME; break;
			case GDK_End: keysym = QEMU_KEY_CTRL_END; break;
			case GDK_Page_Up: keysym = QEMU_KEY_CTRL_PAGEUP; break;
			case GDK_Page_Down: keysym = QEMU_KEY_CTRL_PAGEDOWN; break;
			default: break;
			}
		    } else {
			switch(ev->keyval) {
			case GDK_Up: keysym = QEMU_KEY_UP; break;
			case GDK_Down: keysym = QEMU_KEY_DOWN; break;
			case GDK_Left: keysym = QEMU_KEY_LEFT; break;
			case GDK_Right: keysym = QEMU_KEY_RIGHT; break;
			case GDK_Home: keysym = QEMU_KEY_HOME; break;
			case GDK_End: keysym = QEMU_KEY_END; break;
			case GDK_Page_Up: keysym = QEMU_KEY_PAGEUP; break;
			case GDK_Page_Down: keysym = QEMU_KEY_PAGEDOWN; break;
			case GDK_BackSpace: keysym = QEMU_KEY_BACKSPACE; break;
			case GDK_Delete: keysym = QEMU_KEY_DELETE; break;
			default: break;
			}
		    }
		    if (keysym) {
			kbd_put_keysym(keysym);
		    } /*else if (ev->key.keysym.unicode != 0) {
			kbd_put_keysym(ev->key.keysym.unicode);
		    }*/
		}
	    } else if (ev->type == GDK_KEY_RELEASE) {
		mod_state = (gtk2_GetModState(ev) & gui_grab_code);
		if (!mod_state) {
		    if (gui_key_modifier_pressed) {
			if (gui_keysym == 0) {
			    /* exit/enter grab if pressing Ctrl-Alt */
			    if (!gui_grab)
				gtk2_grab_start();
			    else
				gtk2_grab_end();
			    /* SDL does not send back all the
			       modifiers key, so we must correct it */
			    reset_keys();
			    return TRUE;
			}
			gui_key_modifier_pressed = 0;
			gui_keysym = 0;
		    }
		}
	    }
	    if (is_active_console(vga_console)) 
		gtk2_process_key(ev);
	return TRUE;
}

static void gtk2_refresh(DisplayState *ds)
{
    if (last_vm_running != vm_running) {
	last_vm_running = vm_running;
	gtk2_update_caption();
    }
    if (ds->data != image->mem)
    {
	ds->data = image->mem;
    }

    if (is_active_console(vga_console))                                         
	vga_update_display();                                                   
    while (gtk_events_pending())
	gtk_main_iteration();
}

static void gtk2_cleanup(void) 
{
    gtk_main_quit();
    fullscreen_cleanup();
}

static gboolean gtk2_deletewin(void)
{
    /* signal qemu that its time to shut itself off - this is the place that we hook to trap attempts to close the main qemu window */
    qemu_system_shutdown_request();
    return TRUE; /* dont close the window right away! give qemu time to think */
}

static void gtk2_destroy(void)
{
    /* ideally we would call a hook here so qemu could clean itself up */
    gtk2_cleanup();
}

void gtk2_display_init(DisplayState *ds, int full_screen)
{
    int events;

#if defined(__APPLE__)
    /* always use generic keymaps */
    if (!keyboard_layout)
	keyboard_layout = "en-us";
#endif
    if(keyboard_layout) {
	kbd_layout = init_keyboard_layout(keyboard_layout);
	if (!kbd_layout)
	    exit(1);
    }

    if (!gtk_init_check (0,NULL))
    {
	fprintf(stderr, "Could not load GTK\n");
	exit(0);
    }
    fullscreen_init();

/* note: adding GDK_DRAG_* and GDK_DROP_* would provide a mechanism for supporting drag and drop between host and guest */
    events = GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_SCROLL_MASK | GDK_STRUCTURE_MASK;

    screen = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_events(screen, events);
    gtk_window_set_default_size(GTK_WINDOW(screen), 720, 400);
    gtk_widget_set_size_request(screen, 720, 400);

    g_signal_connect(G_OBJECT(screen), "delete_event", G_CALLBACK(gtk2_deletewin), NULL);
    g_signal_connect(G_OBJECT(screen), "destroy", G_CALLBACK(gtk2_destroy), NULL);
    gtk_container_set_border_width(GTK_CONTAINER(screen), 10);

    gtk_signal_connect(GTK_OBJECT(screen), "expose_event", (GtkSignalFunc) gtk2_expose, NULL);
    gtk_signal_connect(GTK_OBJECT(screen), "motion_notify_event", (GtkSignalFunc) gtk2_send_mouse_move, NULL);
    gtk_signal_connect(GTK_OBJECT(screen), "button_press_event", (GtkSignalFunc) gtk2_send_mouse_button, NULL);
    gtk_signal_connect(GTK_OBJECT(screen), "button_release_event", (GtkSignalFunc) gtk2_send_mouse_button, NULL);
    gtk_signal_connect(GTK_OBJECT(screen), "scroll_event", (GtkSignalFunc) gtk2_send_mouse_scroll, NULL);
    gtk_signal_connect(GTK_OBJECT(screen), "key_press_event", (GtkSignalFunc) gtk2_key_press, ds);
    gtk_signal_connect(GTK_OBJECT(screen), "key_release_event", (GtkSignalFunc) gtk2_key_press, ds);

    ds->dpy_update = gtk2_update;
    ds->dpy_resize = gtk2_resize;
    ds->dpy_refresh = gtk2_refresh;

    gchar nullpixdata[1] = { 0 };
    GdkColor nullcolor = { 0, 0, 0, 0 };
    GdkPixmap *invis = gdk_bitmap_create_from_data(screen->window, nullpixdata, 1, 1);
    invisible_cursor = gdk_cursor_new_from_pixmap(invis, invis, &nullcolor, &nullcolor, 0, 0);

    gtk2_resize(ds, 720, 400);
    gtk2_update_caption();
    gui_grab = 0;

    gtk_window_set_policy(GTK_WINDOW(screen), FALSE, FALSE, FALSE);
    gtk_widget_show(screen);
    if (full_screen) {
	gui_fullscreen = 1;
	gui_fullscreen_initial_grab = 1;
	gtk2_grab_start();
    }
}

[-- Attachment #5: gdk_keysym.h --]
[-- Type: text/plain, Size: 8786 bytes --]

#include <gdk/gdkkeysyms.h>

typedef struct {
	const char* name;
	int keysym;
} name2keysym_t;
static name2keysym_t name2keysym[]={
/* ascii */
    { "space",                0x020},
    { "exclam",               0x021},
    { "quotedbl",             0x022},
    { "numbersign",           0x023},
    { "dollar",               0x024},
    { "percent",              0x025},
    { "ampersand",            0x026},
    { "apostrophe",           0x027},
    { "parenleft",            0x028},
    { "parenright",           0x029},
    { "asterisk",             0x02a},
    { "plus",                 0x02b},
    { "comma",                0x02c},
    { "minus",                0x02d},
    { "period",               0x02e},
    { "slash",                0x02f},
    { "0",                    0x030},
    { "1",                    0x031},
    { "2",                    0x032},
    { "3",                    0x033},
    { "4",                    0x034},
    { "5",                    0x035},
    { "6",                    0x036},
    { "7",                    0x037},
    { "8",                    0x038},
    { "9",                    0x039},
    { "colon",                0x03a},
    { "semicolon",            0x03b},
    { "less",                 0x03c},
    { "equal",                0x03d},
    { "greater",              0x03e},
    { "question",             0x03f},
    { "at",                   0x040},
    { "A",                    0x041},
    { "B",                    0x042},
    { "C",                    0x043},
    { "D",                    0x044},
    { "E",                    0x045},
    { "F",                    0x046},
    { "G",                    0x047},
    { "H",                    0x048},
    { "I",                    0x049},
    { "J",                    0x04a},
    { "K",                    0x04b},
    { "L",                    0x04c},
    { "M",                    0x04d},
    { "N",                    0x04e},
    { "O",                    0x04f},
    { "P",                    0x050},
    { "Q",                    0x051},
    { "R",                    0x052},
    { "S",                    0x053},
    { "T",                    0x054},
    { "U",                    0x055},
    { "V",                    0x056},
    { "W",                    0x057},
    { "X",                    0x058},
    { "Y",                    0x059},
    { "Z",                    0x05a},
    { "bracketleft",          0x05b},
    { "backslash",            0x05c},
    { "bracketright",         0x05d},
    { "asciicircum",          0x05e},
    { "underscore",           0x05f},
    { "grave",                0x060},
    { "a",                    0x061},
    { "b",                    0x062},
    { "c",                    0x063},
    { "d",                    0x064},
    { "e",                    0x065},
    { "f",                    0x066},
    { "g",                    0x067},
    { "h",                    0x068},
    { "i",                    0x069},
    { "j",                    0x06a},
    { "k",                    0x06b},
    { "l",                    0x06c},
    { "m",                    0x06d},
    { "n",                    0x06e},
    { "o",                    0x06f},
    { "p",                    0x070},
    { "q",                    0x071},
    { "r",                    0x072},
    { "s",                    0x073},
    { "t",                    0x074},
    { "u",                    0x075},
    { "v",                    0x076},
    { "w",                    0x077},
    { "x",                    0x078},
    { "y",                    0x079},
    { "z",                    0x07a},
    { "braceleft",            0x07b},
    { "bar",                  0x07c},
    { "braceright",           0x07d},
    { "asciitilde",           0x07e},

/* latin 1 extensions */
{ "nobreakspace",         0x0a0},
{ "exclamdown",           0x0a1},
{ "cent",         	  0x0a2},
{ "sterling",             0x0a3},
{ "currency",             0x0a4},
{ "yen",                  0x0a5},
{ "brokenbar",            0x0a6},
{ "section",              0x0a7},
{ "diaeresis",            0x0a8},
{ "copyright",            0x0a9},
{ "ordfeminine",          0x0aa},
{ "guillemotleft",        0x0ab},
{ "notsign",              0x0ac},
{ "hyphen",               0x0ad},
{ "registered",           0x0ae},
{ "macron",               0x0af},
{ "degree",               0x0b0},
{ "plusminus",            0x0b1},
{ "twosuperior",          0x0b2},
{ "threesuperior",        0x0b3},
{ "acute",                0x0b4},
{ "mu",                   0x0b5},
{ "paragraph",            0x0b6},
{ "periodcentered",       0x0b7},
{ "cedilla",              0x0b8},
{ "onesuperior",          0x0b9},
{ "masculine",            0x0ba},
{ "guillemotright",       0x0bb},
{ "onequarter",           0x0bc},
{ "onehalf",              0x0bd},
{ "threequarters",        0x0be},
{ "questiondown",         0x0bf},
{ "Agrave",               0x0c0},
{ "Aacute",               0x0c1},
{ "Acircumflex",          0x0c2},
{ "Atilde",               0x0c3},
{ "Adiaeresis",           0x0c4},
{ "Aring",                0x0c5},
{ "AE",                   0x0c6},
{ "Ccedilla",             0x0c7},
{ "Egrave",               0x0c8},
{ "Eacute",               0x0c9},
{ "Ecircumflex",          0x0ca},
{ "Ediaeresis",           0x0cb},
{ "Igrave",               0x0cc},
{ "Iacute",               0x0cd},
{ "Icircumflex",          0x0ce},
{ "Idiaeresis",           0x0cf},
{ "ETH",                  0x0d0},
{ "Eth",                  0x0d0},
{ "Ntilde",               0x0d1},
{ "Ograve",               0x0d2},
{ "Oacute",               0x0d3},
{ "Ocircumflex",          0x0d4},
{ "Otilde",               0x0d5},
{ "Odiaeresis",           0x0d6},
{ "multiply",             0x0d7},
{ "Ooblique",             0x0d8},
{ "Oslash",               0x0d8},
{ "Ugrave",               0x0d9},
{ "Uacute",               0x0da},
{ "Ucircumflex",          0x0db},
{ "Udiaeresis",           0x0dc},
{ "Yacute",               0x0dd},
{ "THORN",                0x0de},
{ "Thorn",                0x0de},
{ "ssharp",               0x0df},
{ "agrave",               0x0e0},
{ "aacute",               0x0e1},
{ "acircumflex",          0x0e2},
{ "atilde",               0x0e3},
{ "adiaeresis",           0x0e4},
{ "aring",                0x0e5},
{ "ae",                   0x0e6},
{ "ccedilla",             0x0e7},
{ "egrave",               0x0e8},
{ "eacute",               0x0e9},
{ "ecircumflex",          0x0ea},
{ "ediaeresis",           0x0eb},
{ "igrave",               0x0ec},
{ "iacute",               0x0ed},
{ "icircumflex",          0x0ee},
{ "idiaeresis",           0x0ef},
{ "eth",                  0x0f0},
{ "ntilde",               0x0f1},
{ "ograve",               0x0f2},
{ "oacute",               0x0f3},
{ "ocircumflex",          0x0f4},
{ "otilde",               0x0f5},
{ "odiaeresis",           0x0f6},
{ "division",             0x0f7},
{ "oslash",               0x0f8},
{ "ooblique",             0x0f8},
{ "ugrave",               0x0f9},
{ "uacute",               0x0fa},
{ "ucircumflex",          0x0fb},
{ "udiaeresis",           0x0fc},
{ "yacute",               0x0fd},
{ "thorn",                0x0fe},
{ "ydiaeresis",           0x0ff},
{"EuroSign", GDK_EuroSign},

    /* modifiers */
{"Control_L", GDK_Control_L},
{"Control_R", GDK_Control_R},
{"Alt_L", GDK_Alt_L},
{"Alt_R", GDK_Alt_R},
{"Caps_Lock", GDK_Caps_Lock},
{"Meta_L", GDK_Meta_L},
{"Meta_R", GDK_Meta_R},
{"Shift_L", GDK_Shift_L},
{"Shift_R", GDK_Shift_R},
{"Super_L", GDK_Super_L},
{"Super_R", GDK_Super_R},

    /* special keys */
{"BackSpace", GDK_BackSpace},
{"Tab", GDK_Tab},
{"Return", GDK_Return},
{"Right", GDK_Right},
{"Left", GDK_Left},
{"Up", GDK_Up},
{"Down", GDK_Down},
{"Page_Down", GDK_Page_Down},
{"Page_Up", GDK_Page_Up},
{"Insert", GDK_Insert},
{"Delete", GDK_Delete},
{"Home", GDK_Home},
{"End", GDK_End},
{"Scroll_Lock", GDK_Scroll_Lock},
{"F1", GDK_F1},
{"F2", GDK_F2},
{"F3", GDK_F3},
{"F4", GDK_F4},
{"F5", GDK_F5},
{"F6", GDK_F6},
{"F7", GDK_F7},
{"F8", GDK_F8},
{"F9", GDK_F9},
{"F10", GDK_F10},
{"F11", GDK_F11},
{"F12", GDK_F12},
{"F13", GDK_F13},
{"F14", GDK_F14},
{"F15", GDK_F15},
{"Sys_Req", GDK_Sys_Req},
{"KP_0", GDK_KP_0},
{"KP_1", GDK_KP_1},
{"KP_2", GDK_KP_2},
{"KP_3", GDK_KP_3},
{"KP_4", GDK_KP_4},
{"KP_5", GDK_KP_5},
{"KP_6", GDK_KP_6},
{"KP_7", GDK_KP_7},
{"KP_8", GDK_KP_8},
{"KP_9", GDK_KP_9},
{"KP_Add", GDK_KP_Add},
{"KP_Decimal", GDK_KP_Decimal},
{"KP_Divide", GDK_KP_Divide},
{"KP_Enter", GDK_KP_Enter},
{"KP_Equal", GDK_KP_Equal},
{"KP_Multiply", GDK_KP_Multiply},
{"KP_Subtract", GDK_KP_Subtract},
{"help", GDK_Help},
{"Menu", GDK_Menu},
{"Power", GDK_VoidSymbol},
{"Print", GDK_Print},
{"Mode_switch", GDK_Mode_switch},
{"Multi_Key", GDK_Multi_key},
{"Num_Lock", GDK_Num_Lock},
{"Pause", GDK_Pause},
{"Escape", GDK_Escape},

{0,0},
};

[-- Attachment #6: gdk_set_window_pointer.c --]
[-- Type: text/plain, Size: 1262 bytes --]

/* TODO: figure out how to handle linux framebuffer case - need to call the gdk-fb specific handle_mouse_movement() function in gdkmouse-fb.c ... that gets ugly fast .. */

#ifndef _WIN32

#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <X11/X.h>

 GdkWindow*
gdk_window_set_pointer (GdkWindow       *window,
                       gint            x,
                       gint            y)
{
  GdkWindow *return_val;

  return_val = NULL;
  XWarpPointer (GDK_WINDOW_XDISPLAY(window), None, GDK_WINDOW_XID(window), 0, 0, 0, 0, x, y);

  return return_val;
}

#else

/* untested code based on MSDN library code... URL is :

                  http://msdn.microsoft.com/library/default.asp?url=/library/
                  en-us/winui/winui/windowsuserinterface/resources/cursors/
                  usingcursors.asp         

Someone who codes on Windows want to tell me how to actually make this work??

*/

#include <windows.h>

 GdkWindow*
gdk_window_set_pointer (GdkWindow       *window,
                       gint            x,
                       gint            y)
{
	GdkWindow *return_val;
	POINT pt;
	pt.x = x;
	pt.y = y;
	ClientToScreen(GDK_WINDOW_HWND(window), &pt);
	SetCursorPos(pt.x, pt.y);
	return_val = NULL;
	return return_val;
}

#endif


[-- Attachment #7: xvid_fs.c --]
[-- Type: text/plain, Size: 2298 bytes --]

/* Use X11 Xvid extension to implement fullscreen mode */

#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/xf86dga.h>
#include <X11/extensions/xf86vmode.h>

static Display *dpy;
static XF86VidModeModeInfo **mode_list;
static XF86VidModeModeInfo * modeinfo;
static int count;

int fullscreen_init(void)
{
	int event, error, dotclock;
	XF86VidModeModeLine * modeline;

	/* load up X display and make sure we have the Xvid extention */
	dpy = XOpenDisplay(""); /* FIXME: make this the one that Gtk uses */
	if (dpy == NULL)
		return 0;
	if (!XF86VidModeQueryExtension(dpy, &event, &error))
		return 0;

	/* get list of all modes */
	XF86VidModeGetAllModeLines(dpy, XDefaultScreen(dpy), &count, &mode_list);

	/* get current modeline */
	modeline = (XF86VidModeModeLine *)malloc(sizeof(XF86VidModeModeLine));
	XF86VidModeGetModeLine(dpy, XDefaultScreen(dpy), &dotclock, modeline);

	/* convert to ModeInfo structure */
	modeinfo = (XF86VidModeModeInfo *)malloc(sizeof(XF86VidModeModeInfo));
	modeinfo->dotclock = dotclock;
	modeinfo->hdisplay = modeline->hdisplay;
	modeinfo->hsyncstart = modeline->hsyncstart;
	modeinfo->hsyncend = modeline->hsyncend;
	modeinfo->htotal = modeline->htotal;
	modeinfo->vdisplay = modeline->vdisplay;
	modeinfo->vsyncstart = modeline->vsyncstart;
	modeinfo->vsyncend = modeline->vsyncend;
	modeinfo->vtotal = modeline->vtotal;
	modeinfo->flags = modeline->flags;
	modeinfo->privsize = modeline->privsize;
	modeinfo->private = modeline->private;
	free(modeline);

	return 1;
}

int fullscreen_switch(int x, int y, int w, int h)
{
	int i;
	for (i = 0; i < count; i++)
	{
		if (w == mode_list[i]->hdisplay)
			if (h == mode_list[i]->vdisplay)
			{
				XF86VidModeSwitchToMode(dpy, XDefaultScreen(dpy), mode_list[i]);
				XF86VidModeSetViewPort(dpy, XDefaultScreen(dpy), 0, 0);
				XFlush(dpy);
				return 1;
			}
	}
	return 0;
}

int fullscreen_reset(void)
{
	XF86VidModeSwitchToMode(dpy, XDefaultScreen(dpy), modeinfo);
	XFlush(dpy);
	return 1;
}

void fullscreen_cleanup(void)
{
	int i;
	if (modeinfo->privsize != 0)
		free(modeinfo->private);
	free(modeinfo);
	for (i = 0; i < count; i++)
	{
		if (mode_list[i]->privsize != 0)
			free(mode_list[i]->private);
		free(mode_list[i]);
	}
	free(mode_list);
}

[-- Attachment #8: null_fs.c --]
[-- Type: text/plain, Size: 326 bytes --]

/* dummy functions - return successful but dont actually change the mode */
/* use this with Win32 GTK until someone writes a win32_fs.c */

int fullscreen_init(void)
{
	return 1;
}

int fullscreen_switch(int x, int y, int w, int h)
{
	return 1;
}

int fullscreen_reset(void)
{
	return 1;
}

void fullscreen_cleanup(void)
{
}

[-- Attachment #9: fullscreen.h --]
[-- Type: text/plain, Size: 163 bytes --]

/* fullscreen defines */

int fullscreen_init(void);
int fullscreen_switch(int x, int y, int w, int h);
int fullscreen_reset(void);
void fullscreen_cleanup(void);

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 22:18             ` Jim C. Brown
@ 2005-06-14 23:02               ` jeebs
  2005-06-15  9:23                 ` Jernej Simončič
  2005-06-15 13:36                 ` Henrik Nordstrom
  0 siblings, 2 replies; 26+ messages in thread
From: jeebs @ 2005-06-14 23:02 UTC (permalink / raw)
  To: qemu-devel

"Jim C. Brown"

>> I'm willing to do some testing.  But you'll have to tell me how to do the
>> gtk2 interface under windows.....
>>
>
> Well, you will need to apply the patches and compile from source yourself.
> Not to mention, you'll have to download the windows versions of the GTK2
> libraries (you can probably get binaries).

I'll have to hunt around.  I'm not familiar with gtk2.

>> But it gets significantly frustrating when you see the same problems 
>> month
>> after month after month, etc.
>
> Only report it the first time you see it.

And then sit back and wait for it to be forgotten....[grimace]


> Some one of those bugs have actually been fixed. A patch was sent a while
> ago that got rid of bug #9441 IDE multimode failure. (Long before the bug 
> itself
> was submitted.) So was the gcc 3.4 bug (which includes a link to the 
> patch).
> Etc.

Yes, I'm sure some of them are fixed...  Nobody is even looking there. 
Except for the occasional user trying to be helpful, it's been ignored.

Meanwhile, all those possibly helpful bug reports by users have gone to 
waste.

> I have to take that back. Savannah bug tracker is not a good way to go, as 
> e.g.
> even if the bugs are fixed none of the developers can say so or close the 
> bug.
> Only Fabrice has access. Also, only he has commit access so good patches, 
> such
> as the graphics patch, don't always make it in right away.

I can't comment about how to close bugs...  I've never done that.

As for submitting patches, Savanah has a facility to do that, too.  They can 
be submitted seperately.  I would expect the most that would be needed would 
be registration.  (The qemu page doesn't have it enabled, but Savanah has 
that ability.  I've seen it on other projects.)

> Yes, more communication is needed. We shouldnt be bothered by bugs which 
> have
> patches to fix them or bugs that are a non issue or bugs that are easily

Seperate patches aren't necessarily the right thing to do....

Most are *users*.  They aren't going to build their own.  They will download 
one of the pre-made binaries, which is likely to be just CVS.  Maybe with 
one or two critical patches, but maybe not.

A good way to help this area would be a compile farm doing nightly builds! 
This has been suggested before.

That way, everybody can get up to date cvs builds.  With the important 
patches applied.


> As a side note, I have a hackish patch that will allow you to change the 
> cdrom
> in the monitor to a filename that includes spaces. It was not a difficult 
> change
> to implement. I don't see why you couldn't have fixed that yourself (if it 
> hasn't
> already been fixed in main CVS).

I don't think it's been fixed in cvs.  Although I admit I haven't checked 
with the last couple cvs builds.

As for fixing it myself...

I'm not really a developer.

I used to write some C code.  Nothing really fancy.

But that's been a while.  I haven't even had a compiler installed for about 
two years.

I only recently did one when somebody in the qemu-user's forum explained how 
to compile the cvs version under windows.  Until then, I didn't even know 
how to compile qemu.  Qemu does it in the linux style, and I wasn't familiar 
with that.

Getting back up to speed in C would take me a little while.  Getting up to 
speed with qemu, and familiar with the style that Fabrice uses, etc. would 
take more time.

And although I might be able to fix one or two trivial bugs, I seriously 
doubt I'd be able to do the others.  They require significant knowledge of 
qemu, and of how the hardware is supposed to work and how it's being 
emulated.  Not everybody can just 'jump in' and do that kind of work.

It's not time that I want to waste.

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 18:51           ` jeebs
@ 2005-06-15  4:08             ` Herbert Poetzl
  0 siblings, 0 replies; 26+ messages in thread
From: Herbert Poetzl @ 2005-06-15  4:08 UTC (permalink / raw)
  To: jeebs; +Cc: qemu-devel

On Tue, Jun 14, 2005 at 01:51:10PM -0500, jeebs@yango.us wrote:
> From: "Henrik Nordstrom"
> 
> 
> >> The best that many can do is test qemu and report problems when they are
> >> found.
> >
> > Then you have to accept that the developers do the best they can in their 
> > interest for the benefit of all.
> 
> Generally, the way open source works is that a bug that directly effects a 
> developer, gets fixed.  They get annoyed enough they stop what they are 
> doing and fix it.
> 
> A bug that directly effects code they have written, might get checked into.
> 
> If it's a bug they can live with or work around, it doesn't get fixed.  And 
> probably not reported, for that matter.
> 
> If it's a bug that effects an OS that they don't use, it gets ignored. 
> (Hence, the Windows builds were broken for a long time and nobody noticed it 
> or if they did notice, didn't bother to fix it.)

well, sounds sane to me, or do you fix your
neighbors broken kitchen sink, just because
you heard him complain about it, instead of
fixing your own?

> >> But that's no excuse for bug reports to just vanish into the void. 
> >> Without
> >> an awknowledgement or somebody writting it down as a bug in qemu that 
> >> needs
> >> to get fixed eventually.
> >
> > There rarely is a void these days. If you send a bug report to a public 
> > mailinglist then it
> 
> That makes the very very large assumption that the developers deliberately 
> go looking through the back message archives for bugs that haven't been 
> fixed.

if there _are_ good reasons for them to do
so, they'll probably do it ...

> After a couple days, people just forget about reported bugs.

and real bugs pop up again and again ... which
is a very good method to filter real bugs from
coincidential issues ...

> >   b) Other people later having the same problem quite likely finds it in 
> > the archives and refers to it when reporting the same issue again if it 
> > still isn't fixed.
> 
> Similar bugs can show up in different ways.
> 
> Even when a bug does show up repeatedly, and effects many people, doesn't 
> mean anybody cares to look into it.

so?

> It just turns into one of those consistant bugs that everybody knows about 
> but no longer think of as a bug.  It becomes a 'feature' or a 'quirk'. 
> "It's just the way qemu does things" kind of mental shift.
> 
> The cd changing bugs are excellent examples.
> 
> They've been around for so long that most people in here no longer even 
> think of them as bugs.  They are just simply quirks in qemu.  And because 
> they are no longer 'bugs' but 'quirks', nobody even thinks to look into it.
> 
> Never mind whether they would find the bug or be able to fix it.  It's been 
> around so long that they don't even *think* of it as a bug anymore, so they 
> don't even *think* to look at it.
> 
> (I"m not saying the cd changing bugs are absolutely critical.  Yes, it does 
> prevent some OS's from being installed!  But it doesn't crash qemu, etc.  It 
> does show how a bug can stop being thought of as a bug.)

if somebody cares enough, s/he will fix it or
make sure that it gets fixed ... whining is
probably the worst way to achieve this ...

> > So even if there is no official bugtracking tool (which depending on the 
> > developer situation can be good or bad) the report isn't really lost.
> 
> Technically, yes, it does get archived.
> 
> But effectively it gets lost because it's no longer immediately visible as a 
> bug.  You have to specifically go looking for bug reports through the 
> archives.  And then go looking through the messages again to see if it's 
> been fixed.  (Either partially or fully.)
> 
> 
> Mailing lists can be very convenient.
> 
> But they also make it easy for things to get essentially lost.  If something 
> isn't in a recent message, then your brain just tends to forget about it 
> after a few days.

you are free to collect and prepare the bug
reports for them, just create your own page
with a list of (for you or others) relevant
bugs and possible fixes/workarounds. I'm pretty
confident the developers will make good use of
this page (if you do the collecting part) and
a bunch of issues will get fixed pretty fast ...

ah, and don't forget to announce it on the ML

best,
Herbert

> _______________________________________________
> Qemu-devel mailing list
> Qemu-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/qemu-devel

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 23:02               ` jeebs
@ 2005-06-15  9:23                 ` Jernej Simončič
  2005-06-15 17:30                   ` jeebs
  2005-06-15 13:36                 ` Henrik Nordstrom
  1 sibling, 1 reply; 26+ messages in thread
From: Jernej Simončič @ 2005-06-15  9:23 UTC (permalink / raw)
  To: jeebs@yango.us on [qemu-devel]

On Wednesday, June 15, 2005, 1:02:45, jeebs@yango.us wrote:

> I'll have to hunt around.  I'm not familiar with gtk2.

http://www.gimp.org/win32/ has the development headers and libraries for
GTK+ 2.4 and 2.6 (compiling GTK+ on Windows is a PITA).

-- 
< Jernej Simoncic ><><><><>< http://deepthought.ena.si/ >

If you're feeling good, don't worry, you'll get over it.
       -- Law of mental health

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 17:11     ` jeebs
@ 2005-06-15 13:20       ` Henrik Nordstrom
  0 siblings, 0 replies; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-15 13:20 UTC (permalink / raw)
  To: qemu-devel

On Tue, 14 Jun 2005 jeebs@yango.us wrote:

> But it gets more than a little darn frustrating when you are enthused about
> the project, you try to help the devlopers and project by deliberately doing
> the testing to find bugs and problems, you report the bugs and problems.....
> And nothing happens.
>
> Not an acknowledgement.  Not a fix.  Nothing.
>
> Not that week.  Not that month.  Not the next month.  Basically, the effort
> you deliberately put into finding bugs and reporting the bugs has
> disappeared.

This I buy. But I am not that convinced a bug reporting tool automatically 
helps the situation.

A (open) bug reporting tool is only meaningful if there is developer 
resources to keep active track of the open bugs. If there isn't developer 
resources to actively monitor and work with the bug reporting tool the 
bugs just accumulate to the point that the reports looses their value. 
This can be seen in quite many of the projects on savanna where the number 
of bug reports is huge, and noone actively manages them so you don't 
really know if a bug still exists or if it will get acted upon.. but it is 
true that the reports doesn't get lost and sometimes it actually results 
in the bug being fixed years later provided the bug report has the 
relevant information to identify the problem.

But from experience being the Squid HTTP Proxy release maintainer on an 
estimate about 20-30% of my time is spent on monitoring bug reports which 
doesn't really get anywhere (usually the reporter never comes back with 
requested additional information, or the problem is an old problen fixed 
in the current version). Another 20% is spent on invalid bug reports 
(configuration errors, bad builds, incorrect patching, not Squid being the 
cause to the problems etc). Levaing about 50% of my available time for 
real bug reports and development. While we do have (and use) a bug 
tracking tool most of the important bugs is discovered either from 
mailinglist discussions or internal testing. The perhaps most important 
benefit we have from the bug reporting tools is as a scratchpad for 
preleminary versions of the patches and to track forward porting of 
patches from the stable version to the development version.

Regards
Henrik

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-14 23:02               ` jeebs
  2005-06-15  9:23                 ` Jernej Simončič
@ 2005-06-15 13:36                 ` Henrik Nordstrom
  1 sibling, 0 replies; 26+ messages in thread
From: Henrik Nordstrom @ 2005-06-15 13:36 UTC (permalink / raw)
  To: qemu-devel

On Tue, 14 Jun 2005 jeebs@yango.us wrote:

> Seperate patches aren't necessarily the right thing to do....

It is without question.

It really hurts a project in long term is if users by default run 
something else than the main version.

> A good way to help this area would be a compile farm doing nightly builds!
> This has been suggested before.

Setting up a build farm (or scripts for an existing farm if there is one 
suitable) is a very good task for a user wanting to contribute to the 
project.

Having developers time spent on configuring a build farm is waste of 
resources.

Regards
Henrik

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
  2005-06-14 22:43             ` Jim C. Brown
@ 2005-06-15 17:28               ` jeebs
  2005-06-15 18:54                 ` Jim C. Brown
  2005-06-15 18:11               ` Heike C. Zimmerer
  1 sibling, 1 reply; 26+ messages in thread
From: jeebs @ 2005-06-15 17:28 UTC (permalink / raw)
  To: qemu-devel

"Jim C. Brown"

> They weren't committed to the CVS tree yet. You'll need to get it in patch
> form. I'm reattaching all the necessary patches and files here, so you can 
> get
> it all in one place. (The .c files I've attached should be dropped in the 
> main qemu
> directory).

Here are the steps I did.

I follwed the mingw compilation instructions posted in the qemu-user's 
forum.  Just to make sure that my setup was working.

>From http://www.gimp.org/win32/  I downloaded the recommended versions of:

atk-1.8.0.zip
atk-dev-1.8.0.zip
gettext-runtime-0.13.1.zip
glib-2.4.7.zip
glib-dev-2.4.7.zip
gtk+-2.4.14.zip
gtk+-dev-2.4.14.zip
libiconv-1.9.1.bin.woe32.zip
pango-1.4.1.zip
pango-dev-1.4.1.zip
pkgconfig-0.15.zip

I unzipped those in the msys/mingw directory.

I then ran the msys program to get a 'linux shell'.

I did a make clean in qemu.

I copied all your files to the qemu directory.

I did "patch <qemu-gtk-patch.diff" and "patch <vl.c.diff"  Was I supposed to 
use any options?

I did:

./configure --target-list=i386-softmmu --static --enable-gtk

and got:

Install prefix    /c/Program Files/Qemu
BIOS directory    /c/Program Files/Qemu
binary directory  /c/Program Files/Qemu
Source path       /home/Admin/qemu
C compiler        gcc
make              make
host CPU          i386
host big endian   no
target list       i386-softmmu
gprof enabled     no
static build      yes
SDL support       yes
SDL static link   yes
GTK support       yes
GTK FS driver     null_fs.c
mingw32 support   yes
Adlib support     no
FMOD support      no
kqemu support     no

Then 'make' and I got this error right at the end...

H:/MSys/home/Admin/qemu/gdk_set_window_pointer.c:45: undefined reference to 
`GDK_WINDOW_HWND'

(Plus, the usual assortment of warnings in a typical qemu build.)

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Norton Ghost crashes with page fault for me too.
  2005-06-15  9:23                 ` Jernej Simončič
@ 2005-06-15 17:30                   ` jeebs
  0 siblings, 0 replies; 26+ messages in thread
From: jeebs @ 2005-06-15 17:30 UTC (permalink / raw)
  To: qemu-devel

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 314 bytes --]

From: "Jernej Simonèiè"

>> I'll have to hunt around.  I'm not familiar with gtk2.

>http://www.gimp.org/win32/ has the development headers and libraries for
>GTK+ 2.4 and 2.6 (compiling GTK+ on Windows is a PITA).

Thanks for the link....

It was starting to look a bit more complicated than I could deal with...

^ permalink raw reply	[flat|nested] 26+ messages in thread

* [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
  2005-06-14 22:43             ` Jim C. Brown
  2005-06-15 17:28               ` jeebs
@ 2005-06-15 18:11               ` Heike C. Zimmerer
  1 sibling, 0 replies; 26+ messages in thread
From: Heike C. Zimmerer @ 2005-06-15 18:11 UTC (permalink / raw)
  To: qemu-devel

"Jim C. Brown" <jma5@umd.edu> writes:

>> Maybe I've missed something, so could you explain how to get hold of
>> the gtk code?  Thanks.

> I'm reattaching all the necessary patches and files here, so you can get
> it all in one place. (The .c files I've attached should be dropped in the main qemu
> directory).

Thanks.  Though I'm not familiar with gtk2 internals, I hope to be
able to provide some useful feedback within the next few days.

- Heike

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [Qemu-devel] Re: Norton Ghost crashes with page fault for me too.
  2005-06-15 17:28               ` jeebs
@ 2005-06-15 18:54                 ` Jim C. Brown
  0 siblings, 0 replies; 26+ messages in thread
From: Jim C. Brown @ 2005-06-15 18:54 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 2285 bytes --]

On Wed, Jun 15, 2005 at 12:28:35PM -0500, jeebs@yango.us wrote:
> Here are the steps I did.
> 
> I follwed the mingw compilation instructions posted in the qemu-user's 
> forum.  Just to make sure that my setup was working.
> 
> >From http://www.gimp.org/win32/  I downloaded the recommended versions of:
> 
> atk-1.8.0.zip
> atk-dev-1.8.0.zip
> gettext-runtime-0.13.1.zip
> glib-2.4.7.zip
> glib-dev-2.4.7.zip
> gtk+-2.4.14.zip
> gtk+-dev-2.4.14.zip
> libiconv-1.9.1.bin.woe32.zip
> pango-1.4.1.zip
> pango-dev-1.4.1.zip
> pkgconfig-0.15.zip
> 
> I unzipped those in the msys/mingw directory.
> 
> I then ran the msys program to get a 'linux shell'.
> 
> I did a make clean in qemu.
> 
> I copied all your files to the qemu directory.

Looks like you did everything correctly.

> 
> I did "patch <qemu-gtk-patch.diff" and "patch <vl.c.diff"  Was I supposed to 
> use any options?
> 

No.

> I did:
> 
> ./configure --target-list=i386-softmmu --static --enable-gtk
> 
> and got:
> 
> Install prefix    /c/Program Files/Qemu
> BIOS directory    /c/Program Files/Qemu
> binary directory  /c/Program Files/Qemu
> Source path       /home/Admin/qemu
> C compiler        gcc
> make              make
> host CPU          i386
> host big endian   no
> target list       i386-softmmu
> gprof enabled     no
> static build      yes
> SDL support       yes
> SDL static link   yes
> GTK support       yes
> GTK FS driver     null_fs.c
> mingw32 support   yes
> Adlib support     no
> FMOD support      no
> kqemu support     no
> 
> Then 'make' and I got this error right at the end...
> 
> H:/MSys/home/Admin/qemu/gdk_set_window_pointer.c:45: undefined reference to 
> `GDK_WINDOW_HWND'
> 
> (Plus, the usual assortment of warnings in a typical qemu build.)
> 

I don't know how to fix that. GDK_WINDOW_HWND() is defined in a file called
gdkwin32.h

I've attached a modified version that includes gdkwin32.h directly. Just put
this file in qemu's directory (overwriting the old file). If you have gdkwin32.h
in your gdk include directory this should fix the error.

If this version doesn't work I'll try to write a replacement marco (gtk uses many
internal macros - sometimes it can get real ugly).

-- 
Infinite complexity begets infinite beauty.
Infinite precision begets infinite perfection.

[-- Attachment #2: gdk_set_window_pointer.c --]
[-- Type: text/plain, Size: 1309 bytes --]

/* TODO: figure out how to handle linux framebuffer case - need to call the gdk-fb specific handle_mouse_movement() function in gdkmouse-fb.c ... that gets ugly fast .. */

#ifndef _WIN32

#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <X11/X.h>

 GdkWindow*
gdk_window_set_pointer (GdkWindow       *window,
                       gint            x,
                       gint            y)
{
  GdkWindow *return_val;

  return_val = NULL;
  XWarpPointer (GDK_WINDOW_XDISPLAY(window), None, GDK_WINDOW_XID(window), 0, 0, 0, 0, x, y);

  return return_val;
}

#else

/* untested code based on MSDN library code... URL is :

                  http://msdn.microsoft.com/library/default.asp?url=/library/
                  en-us/winui/winui/windowsuserinterface/resources/cursors/
                  usingcursors.asp         

Someone who codes on Windows want to tell me how to actually make this work??

*/

#include <gdk/gdk.h>
#include <gdk/gdkwin32.h>
#include <windows.h>

 GdkWindow*
gdk_window_set_pointer (GdkWindow       *window,
                       gint            x,
                       gint            y)
{
	GdkWindow *return_val;
	POINT pt;
	pt.x = x;
	pt.y = y;
	ClientToScreen(GDK_WINDOW_HWND(window), &pt);
	SetCursorPos(pt.x, pt.y);
	return_val = NULL;
	return return_val;
}

#endif


^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2005-06-15 18:58 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-13 17:49 [Qemu-devel] Norton Ghost crashes with page fault for me too Jeff Wiegley
2005-06-14  2:37 ` jeebs
2005-06-14 13:43   ` Ishwar Rattan
2005-06-14 16:39     ` Henrik Nordstrom
2005-06-14 17:14       ` jeebs
2005-06-14 17:40         ` Henrik Nordstrom
2005-06-14 18:51           ` jeebs
2005-06-15  4:08             ` Herbert Poetzl
2005-06-14 20:27         ` Jim C. Brown
2005-06-14 20:54           ` [Qemu-devel] " Ronald
2005-06-14 21:15           ` [Qemu-devel] " jeebs
2005-06-14 22:18             ` Jim C. Brown
2005-06-14 23:02               ` jeebs
2005-06-15  9:23                 ` Jernej Simončič
2005-06-15 17:30                   ` jeebs
2005-06-15 13:36                 ` Henrik Nordstrom
2005-06-14 21:46           ` [Qemu-devel] " Heike C. Zimmerer
2005-06-14 22:43             ` Jim C. Brown
2005-06-15 17:28               ` jeebs
2005-06-15 18:54                 ` Jim C. Brown
2005-06-15 18:11               ` Heike C. Zimmerer
2005-06-14 16:30   ` [Qemu-devel] " Henrik Nordstrom
2005-06-14 17:11     ` jeebs
2005-06-15 13:20       ` Henrik Nordstrom
2005-06-14 13:54 ` Elefterios Stamatogiannakis
2005-06-14 15:45   ` Andreas Bollhalder

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).