--- /dev/null
+--- qemu-0.7.0/Makefile.orig 2005-04-27 22:52:05.000000000 +0200
++++ qemu-0.7.0/Makefile 2005-05-01 13:13:53.934977792 +0200
+@@ -54,21 +54,21 @@
+ common de-ch es fo fr-ca hu ja mk nl-be pt sl tr
+
+ install: all
+- mkdir -p "$(bindir)"
+- install -m 755 -s $(TOOLS) "$(bindir)"
+- mkdir -p "$(datadir)"
++ mkdir -p "$(DESTDIR)$(bindir)"
++ install -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
++ mkdir -p "$(DESTDIR)$(datadir)"
+ install -m 644 pc-bios/bios.bin pc-bios/vgabios.bin \
+ pc-bios/vgabios-cirrus.bin \
+ pc-bios/ppc_rom.bin \
+ pc-bios/proll.elf \
+- pc-bios/linux_boot.bin "$(datadir)"
+- mkdir -p "$(docdir)"
+- install -m 644 qemu-doc.html qemu-tech.html "$(docdir)"
++ pc-bios/linux_boot.bin "$(DESTDIR)$(datadir)"
++ mkdir -p "$(DESTDIR)$(docdir)"
++ install -m 644 qemu-doc.html qemu-tech.html "$(DESTDIR)$(docdir)"
+ ifndef CONFIG_WIN32
+- mkdir -p "$(mandir)/man1"
+- install qemu.1 qemu-img.1 "$(mandir)/man1"
+- mkdir -p "$(datadir)/keymaps"
+- install -m 644 $(addprefix keymaps/,$(KEYMAPS)) "$(datadir)/keymaps"
++ mkdir -p "$(DESTDIR)$(mandir)/man1"
++ install qemu.1 qemu-img.1 "$(DESTDIR)$(mandir)/man1"
++ mkdir -p "$(DESTDIR)$(datadir)/keymaps"
++ install -m 644 $(addprefix keymaps/,$(KEYMAPS)) "$(DESTDIR)$(datadir)/keymaps"
+ endif
+ for d in $(TARGET_DIRS); do \
+ $(MAKE) -C $$d $@ || exit 1 ; \
+--- qemu-0.6.0/Makefile.target.orig 2004-10-16 12:43:34.780448720 +0200
++++ qemu-0.6.0/Makefile.target 2004-10-16 12:45:08.871144760 +0200
+@@ -340,7 +340,7 @@
+
+ install: all
+ ifneq ($(PROGS),)
+- install -m 755 -s $(PROGS) "$(bindir)"
++ install -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
+ endif
+
+ ifneq ($(wildcard .depend),)
+++ /dev/null
-diff -ur qemu-0.9.0-o/dyngen.c qemu-0.9.0/dyngen.c
---- qemu-0.9.0-o/dyngen.c 2007-02-06 14:44:57.000000000 -0700
-+++ qemu-0.9.0/dyngen.c 2007-02-06 14:46:11.000000000 -0700
-@@ -1692,6 +1692,9 @@
- #else
- fprintf(outfile, " extern void %s();\n", name);
- #endif
-+#if defined(HOST_PPC)
-+ uint8_t *blr_addr = NULL;
-+#endif
-
- for(i = 0, rel = relocs;i < nb_relocs; i++, rel++) {
- host_ulong offset = get_rel_offset(rel);
-@@ -2053,6 +2056,9 @@
- #else
- #error unsupport object format
- #endif
-+ if (blr_addr)
-+ fprintf(outfile, " *(uint32_t *)(gen_code_ptr + %d) = 0x48000000 | %d;\n",
-+ blr_addr - p_start, p_end - blr_addr);
- }
- #elif defined(HOST_S390)
- {
-diff -ur qemu-0.9.0-o/dyngen.c.orig qemu-0.9.0/dyngen.c.orig
---- qemu-0.9.0-o/dyngen.c.orig 2007-02-05 16:01:54.000000000 -0700
-+++ qemu-0.9.0/dyngen.c.orig 2007-02-06 14:44:57.000000000 -0700
-@@ -1206,13 +1206,11 @@
- } else if (strstart(sym_name, "__op_gen_label", &p)) {
- snprintf(name, name_size, "gen_labels[param%s]", p);
- } else {
--#ifdef HOST_SPARC
- if (sym_name[0] == '.')
- snprintf(name, name_size,
- "(long)(&__dot_%s)",
- sym_name + 1);
- else
--#endif
- snprintf(name, name_size, "(long)(&%s)", sym_name);
- }
- }
-@@ -1706,14 +1704,12 @@
- !strstart(sym_name, "__op_param", NULL) &&
- !strstart(sym_name, "__op_jmp", NULL) &&
- !strstart(sym_name, "__op_gen_label", NULL)) {
--#if defined(HOST_SPARC)
- if (sym_name[0] == '.') {
- fprintf(outfile,
- "extern char __dot_%s __asm__(\"%s\");\n",
- sym_name+1, sym_name);
- continue;
- }
--#endif
- #if defined(__APPLE__)
- /* set __attribute((unused)) on darwin because we wan't to avoid warning when we don't use the symbol */
- fprintf(outfile, "extern char %s __attribute__((unused));\n", sym_name);
-Only in qemu-0.9.0: dyngen.c.rej
--- /dev/null
+diff --exclude=CVS -upr qemu/hw/parallel.c qemu-sandbox/hw/parallel.c
+--- qemu/hw/parallel.c 2005-01-23 13:42:59.000000000 -0700
++++ qemu-sandbox/hw/parallel.c 2005-03-12 19:00:37.000000000 -0700
+@@ -22,6 +22,9 @@
+ * THE SOFTWARE.
+ */
+ #include "vl.h"
++#include <sys/ioctl.h>
++#include <linux/parport.h>
++#include <linux/ppdev.h>
+
+ //#define DEBUG_PARALLEL
+
+@@ -43,15 +46,6 @@
+ #define PARA_CTR_AUTOLF 0x02 /* Auto linefeed complement */
+ #define PARA_CTR_STROBE 0x01 /* Strobe complement */
+
+-struct ParallelState {
+- uint8_t data;
+- uint8_t status; /* read only register */
+- uint8_t control;
+- int irq;
+- int irq_pending;
+- CharDriverState *chr;
+-};
+-
+ static void parallel_update_irq(ParallelState *s)
+ {
+ if (s->irq_pending)
+@@ -70,29 +64,29 @@ static void parallel_ioport_write(void *
+ #endif
+ switch(addr) {
+ case 0:
+- s->data = val;
++ qemu_pp_write_data(s, (uint8_t)val);
+ parallel_update_irq(s);
+ break;
+ case 2:
++ qemu_pp_write_control(s, (uint8_t)val);
+ if ((val & PARA_CTR_INIT) == 0 ) {
+- s->status = PARA_STS_BUSY;
+- s->status |= PARA_STS_ACK;
+- s->status |= PARA_STS_ONLINE;
+- s->status |= PARA_STS_ERROR;
++ s->status = PARA_STS_BUSY;
++ s->status |= PARA_STS_ACK;
++ s->status |= PARA_STS_ONLINE;
++ s->status |= PARA_STS_ERROR;
+ }
+ else if (val & PARA_CTR_SELECT) {
+- if (val & PARA_CTR_STROBE) {
+- s->status &= ~PARA_STS_BUSY;
+- if ((s->control & PARA_CTR_STROBE) == 0)
+- qemu_chr_write(s->chr, &s->data, 1);
+- } else {
+- if (s->control & PARA_CTR_INTEN) {
+- s->irq_pending = 1;
+- }
+- }
++ if (val & PARA_CTR_STROBE) {
++ s->status &= ~PARA_STS_BUSY;
++ if ((s->control & PARA_CTR_STROBE) == 0)
++ qemu_chr_write(s->chr, &s->data, 1);
++ } else {
++ if (s->control & PARA_CTR_INTEN) {
++ s->irq_pending = 1;
++ }
++ }
+ }
+ parallel_update_irq(s);
+- s->control = val;
+ break;
+ }
+ }
+@@ -105,25 +99,25 @@ static uint32_t parallel_ioport_read(voi
+ addr &= 7;
+ switch(addr) {
+ case 0:
+- ret = s->data;
++ ret = qemu_pp_read_data(s);
+ break;
+ case 1:
+- ret = s->status;
++ ret = qemu_pp_read_status(s);
+ s->irq_pending = 0;
+ if ((s->status & PARA_STS_BUSY) == 0 && (s->control & PARA_CTR_STROBE) == 0) {
+- /* XXX Fixme: wait 5 microseconds */
+- if (s->status & PARA_STS_ACK)
+- s->status &= ~PARA_STS_ACK;
+- else {
+- /* XXX Fixme: wait 5 microseconds */
+- s->status |= PARA_STS_ACK;
+- s->status |= PARA_STS_BUSY;
+- }
++ /* XXX Fixme: wait 5 microseconds */
++ if (s->status & PARA_STS_ACK)
++ s->status &= ~PARA_STS_ACK;
++ else {
++ /* XXX Fixme: wait 5 microseconds */
++ s->status |= PARA_STS_ACK;
++ s->status |= PARA_STS_BUSY;
++ }
+ }
+ parallel_update_irq(s);
+ break;
+ case 2:
+- ret = s->control;
++ ret = qemu_pp_read_control(s);
+ break;
+ }
+ #ifdef DEBUG_PARALLEL
+Only in qemu-sandbox: kqemu
+Only in qemu-sandbox: qemu-doc.html
+Only in qemu-sandbox: qemu-img.1
+Only in qemu-sandbox: qemu-tech.html
+Only in qemu-sandbox: qemu.1
+diff --exclude=CVS -upr qemu/vl.c qemu-sandbox/vl.c
+--- qemu/vl.c 2005-03-13 02:43:36.000000000 -0700
++++ qemu-sandbox/vl.c 2005-03-13 07:16:54.000000000 -0700
+@@ -46,6 +46,8 @@
+ #include <libutil.h>
+ #endif
+ #else
++#include <linux/parport.h>
++#include <linux/ppdev.h>
+ #include <linux/if.h>
+ #include <linux/if_tun.h>
+ #include <pty.h>
+@@ -1028,10 +1030,14 @@ CharDriverState *qemu_chr_open_null(void
+ return chr;
+ }
+
++
++
++
+ #ifndef _WIN32
+
+ typedef struct {
+ int fd_in, fd_out;
++ int parport_device;
+ /* for nographic stdio only */
+ IOCanRWHandler *fd_can_read;
+ IOReadHandler *fd_read;
+@@ -1084,6 +1090,76 @@ static void fd_chr_add_read_handler(Char
+ }
+ }
+
++uint8_t qemu_pp_read_status(ParallelState *s)
++{
++ uint8_t ret, status;
++ FDCharDriver *fd = s->chr->opaque;
++
++ if (fd->parport_device) {
++ ioctl(fd->fd_out, PPRSTATUS, &status);
++ ret = status;
++ } else {
++ ret = s->status;
++ }
++
++ return ret;
++}
++
++
++uint8_t qemu_pp_read_control(ParallelState *s)
++{
++ uint8_t ret, control;
++ FDCharDriver *fd = s->chr->opaque;
++
++ if (fd->parport_device) {
++ ioctl(fd->fd_out, PPRCONTROL, &control);
++ ret = control;
++ } else {
++ ret = s->control;
++ }
++
++ return ret;
++
++}
++uint8_t qemu_pp_read_data(ParallelState *s)
++{
++ uint8_t ret, data;
++ FDCharDriver *fd = s->chr->opaque;
++
++ if (fd->parport_device) {
++ ioctl(fd->fd_out, PPRDATA, &data);
++ ret = data;
++ } else {
++ ret = s->data;
++ }
++
++ return ret;
++}
++void qemu_pp_write_data(ParallelState *s, uint8_t val)
++{
++ uint8_t data;
++ FDCharDriver *fd = s->chr->opaque;
++
++ if (fd->parport_device) {
++ data = (uint8_t)val;
++ ioctl(fd->fd_out, PPWDATA, &data);
++ } else {
++ s->data = val;
++ }
++}
++
++void qemu_pp_write_control(ParallelState *s, uint8_t val)
++{
++ uint8_t control;
++ FDCharDriver *fd = s->chr->opaque;
++
++ if (fd->parport_device) {
++ control = (uint8_t)val;
++ ioctl(fd->fd_out, PPWCONTROL, &control);
++ } else {
++ s->control = val;
++ }
++}
+ /* open a character device to a unix fd */
+ CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
+ {
+@@ -1263,6 +1339,24 @@ CharDriverState *qemu_chr_open_stdio(voi
+ return chr;
+ }
+
++CharDriverState *qemu_chr_open_dev(const char *filename)
++{
++ int fd = 0;
++
++ fd = open(filename, O_RDWR);
++ CharDriverState *s = qemu_chr_open_fd(fd, fd);
++
++ if (strstr(filename, "parport") != NULL) {
++ if (ioctl(((FDCharDriver *)s->opaque)->fd_in, PPCLAIM) == 0) {
++ ((FDCharDriver *)s->opaque)->parport_device = 1;
++ } else {
++ ((FDCharDriver *)s->opaque)->parport_device = 0;
++ }
++ }
++
++ return s;
++}
++
+ #if defined(__linux__)
+ CharDriverState *qemu_chr_open_pty(void)
+ {
+@@ -1297,11 +1391,14 @@ CharDriverState *qemu_chr_open(const cha
+ return qemu_chr_open_pty();
+ } else if (!strcmp(filename, "stdio")) {
+ return qemu_chr_open_stdio();
+- } else
+-#endif
++ } else {
++ return qemu_chr_open_dev(filename);
++ }
++#else
+ {
+ return NULL;
+ }
++#endif
+ }
+
+ /***********************************************************/
+diff --exclude=CVS -upr qemu/vl.h qemu-sandbox/vl.h
+--- qemu/vl.h 2005-03-13 02:43:36.000000000 -0700
++++ qemu-sandbox/vl.h 2005-03-13 07:16:54.000000000 -0700
+@@ -199,6 +199,17 @@ typedef struct CharDriverState {
+ void *opaque;
+ } CharDriverState;
+
++
++typedef struct ParallelState {
++ uint8_t data;
++ uint8_t status; /* read only register */
++ uint8_t control;
++ int irq;
++ int irq_pending;
++ CharDriverState *chr;
++} ParallelState;
++
++
+ void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
+ int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
+ void qemu_chr_send_event(CharDriverState *s, int event);
+@@ -206,6 +217,13 @@ void qemu_chr_add_read_handler(CharDrive
+ IOCanRWHandler *fd_can_read,
+ IOReadHandler *fd_read, void *opaque);
+ void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event);
++
++
++uint8_t qemu_pp_read_status(ParallelState *s);
++uint8_t qemu_pp_read_control(ParallelState *s);
++uint8_t qemu_pp_read_data(ParallelState *s);
++void qemu_pp_write_data(ParallelState *s, uint8_t data);
++void qemu_pp_write_control(ParallelState *s, uint8_t control);
+
+ /* consoles */
+
+@@ -643,8 +661,6 @@ typedef struct SerialState SerialState;
+ SerialState *serial_init(int base, int irq, CharDriverState *chr);
+
+ /* parallel.c */
+-
+-typedef struct ParallelState ParallelState;
+ ParallelState *parallel_init(int base, int irq, CharDriverState *chr);
+
+ /* i8259.c */