⛏️ index : haiku.git

author Stephan Aßmus <superstippi@gmx.de> 2009-09-03 10:49:55.0 +00:00:00
committer Stephan Aßmus <superstippi@gmx.de> 2009-09-03 10:49:55.0 +00:00:00
commit
3a7cb89cd00fc89e3578747e481ad0989338a592 [patch]
tree
aa229f1623e29646e945a925f594daed3988fd15
parent
5071747f1dbb5d4a0c4744f87801b4af45fc984a
download
3a7cb89cd00fc89e3578747e481ad0989338a592.tar.gz

Merged r32893, r32895, r32901, r32902, r32909, r32910 and r32918.

git-svn-id: file:///srv/svn/repos/haiku/haiku/branches/releases/r1alpha1@32920 a95241bf-73f2-0310-859d-f6bbb57e9c96

Diff

 build/jam/OptionalPackages                           |   2 +-
 docs/userguide/en/bootloader.html                    |  10 ++++++----
 docs/userguide/en/queries.html                       |   4 ++--
 docs/userguide/en/workshop-filetypes+attributes.html |   4 ++--
 headers/os/drivers/USB_printer.h                     |  34 +++++++++-------------------------
 headers/os/drivers/USB_rle.h                         |  74 ++++++++++----------------------------------------------------------------
 headers/os/drivers/USB_spec.h                        | 244 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------
 headers/os/drivers/bus_manager.h                     |  21 +++++----------------
 headers/os/drivers/midi_driver.h                     | 108 ++++++++++++++++++++++++++++++++++----------------------------------------------
 src/apps/installer/CopyEngine.cpp                    |  14 ++++++++++++++
 src/kits/interface/Window.cpp                        |   6 +++++-
 docs/userguide/en/applications/drivesetup.html       |   5 ++++-
 12 files changed, 200 insertions(+), 326 deletions(-)

diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages
index 5e3ebb6..5501acf 100644
--- a/build/jam/OptionalPackages
+++ b/build/jam/OptionalPackages
@@ -261,7 +261,7 @@


# Curl
if [ IsOptionalHaikuImagePackageAdded Expat ] {
if [ IsOptionalHaikuImagePackageAdded Curl ] {
	if $(TARGET_ARCH) != x86 {
		Echo "No optional package Curl available for $(TARGET_ARCH)" ;
	} else {
diff --git a/docs/userguide/en/bootloader.html b/docs/userguide/en/bootloader.html
index b2c1767..c941af3 100644
--- a/docs/userguide/en/bootloader.html
+++ b/docs/userguide/en/bootloader.html
@@ -26,9 +26,9 @@

<div class="topnav">
	<p>
		«&#160;&#160;<a href="installation.html">Installing Haiku</a>
<!--		«&#160;&#160;<a href="installation.html">Installing Haiku</a>
		&#160;&#160;::&#160;&#160;
		<a href="contents.html" class="uplink">Contents</a>
-->		<a href="contents.html" class="uplink">Contents</a>
		&#160;&#160;::&#160;&#160;
		<a href="filesystem-layout.html">Filesystem layout</a>&#160;&#160;»
	</p>
@@ -54,6 +54,8 @@
- Don't call the BIOS<br />
- Disable APM<br />
- Disable ACPI<br />
- Disable IO-APIC<br />
- Enable serial debug output</i>
- Enable on screen debug output</i>
</p></td></tr>
<tr><td class="onelinetop"><b>Select fail safe video mode</b></td><td>&#160;</td><td>If you had to activate the option <i>Use fail-safe video mode</i>, you can set resolution and color depth.</td></tr>
@@ -78,9 +80,9 @@

<div class="bottomnav">
	<p>
		«&#160;&#160;<a href="installation.html">Installing Haiku</a>
<!--		«&#160;&#160;<a href="installation.html">Installing Haiku</a>
		&#160;&#160;::&#160;&#160;
		<a href="contents.html" class="uplink">Contents</a>
-->		<a href="contents.html" class="uplink">Contents</a>
		&#160;&#160;::&#160;&#160;
		<a href="filesystem-layout.html">Filesystem layout</a>&#160;&#160;»
	</p>
diff --git a/docs/userguide/en/queries.html b/docs/userguide/en/queries.html
index 1821fc3..9c2ee09 100644
--- a/docs/userguide/en/queries.html
+++ b/docs/userguide/en/queries.html
@@ -121,8 +121,8 @@
<li><p>With <span class="menu">File | Edit Query</span> or <span class="key">ALT</span>&#160;<span class="key">G</span> you get back to your Find window to refine your query.</p></li>
<li><p>A query is live, i.e. if a file that matches your search criteria appears or disappears from your system, this change is reflected in your results in real-time.</p></li>
</ul>
<p>You can assign a sensible attribute layout for query results of a specific filetype. Open a folder containing files of the filetype you'd like to create a template for and arrange the attributes how you'd like to have query results presented. Copy this layout with <span class="menu">Attributes | Copy Attributes</span>.</p>
<p>Open <span class="path">/boot/home/config/settings/Tracker/DefaultQueryTemplates</span>, create a new folder and rename it to <i>group/filetype</i>, replacing slashes with underscores, e.g."audio_x-mp3". Open the new folder and paste in the layout with <span class="menu">Attributes | Paste Attributes</span>.</p>
<p>You can assign a sensible attribute layout for query results of a specific filetype. Open a folder containing files of the filetype you'd like to create a template for and arrange the attributes how you'd like to have query results presented. Copy this layout with <span class="menu">Attributes | Copy Layout</span>.</p>
<p>Open <span class="path">/boot/home/config/settings/Tracker/DefaultQueryTemplates</span>, create a new folder and rename it to <i>group/filetype</i>, replacing slashes with underscores, e.g."audio_x-mp3". Open the new folder and paste in the layout with <span class="menu">Attributes | Paste Layout</span>.</p>

</div>

diff --git a/docs/userguide/en/workshop-filetypes+attributes.html b/docs/userguide/en/workshop-filetypes+attributes.html
index d90a858..1be3192 100644
--- a/docs/userguide/en/workshop-filetypes+attributes.html
+++ b/docs/userguide/en/workshop-filetypes+attributes.html
@@ -194,9 +194,9 @@
<a id="query-db" name="query-db">Querying the database</a></h1>
<p>Several hours of grunt work later, we have a nice little database that you can query to find all your Christina Ricci movies that have a 7+ rating...  :)</p>
<p>You can assign a sensible attribute layout for query results of a specific filetype.<br />
Open the folder containing your DVDdb files and arrange the attributes how you'd like to have query results presented. Copy this layout with <span class="menu">Attributes | Copy Attributes</span>.</p>
Open the folder containing your DVDdb files and arrange the attributes how you'd like to have query results presented. Copy this layout with <span class="menu">Attributes | Copy Layout</span>.</p>
<p>Open <span class="path">/boot/home/config/settings/Tracker/DefaultQueryTemplates</span>, create a new folder and rename it to <i>group/filetype</i>, replacing slashes with underscores; in our case "applications_DVDdb".</p>
<p>Open the new folder and paste in the layout with <span class="menu">Attributes | Paste Attributes</span>. Voilà:</p>
<p>Open the new folder and paste in the layout with <span class="menu">Attributes | Paste Layout</span>. Voilà:</p>
<img src="images/workshop-filetypes+attributes-images/query-dvddb.png" alt="query-dvddb.png" />

</div>
diff --git a/headers/os/drivers/USB_printer.h b/headers/os/drivers/USB_printer.h
index fc4e266..2b0bbf6 100644
--- a/headers/os/drivers/USB_printer.h
+++ b/headers/os/drivers/USB_printer.h
@@ -1,36 +1,20 @@
/* 
** USB_printer.h
**
** Copyright 1999, Be Incorporated. All Rights Reserved.
**
*/

/*
 * Copyright 2009, Haiku Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _USB_PRINTER_H
#define _USB_PRINTER_H

#include <Drivers.h>

#ifdef __cplusplus
extern "C" {
#endif
#include <Drivers.h>

/* ioctl() opcodes for usb_printer driver */

enum
{
	USB_PRINTER_GET_DEVICE_ID = B_DEVICE_OP_CODES_END+1
enum {
	USB_PRINTER_GET_DEVICE_ID = B_DEVICE_OP_CODES_END + 1
};


/* Maximum length of the DEVICE_ID. User MUST allocate this size
when calling USB_PRINTER_GET_DEVICE_ID ioctl() */

#define USB_PRINTER_DEVICE_ID_LENGTH	256


	/* buffer size to be handed to above ioctl() call */

#ifdef __cplusplus
}
#endif

#endif
#endif	/* _USB_PRINTER_H */
diff --git a/headers/os/drivers/USB_rle.h b/headers/os/drivers/USB_rle.h
index 0b437d7..31caad1 100644
--- a/headers/os/drivers/USB_rle.h
+++ b/headers/os/drivers/USB_rle.h
@@ -1,91 +1,35 @@
/* 
** USB_rle.h
**
** Copyright 1999, Be Incorporated. All Rights Reserved.
**
*/

/*
 * Copyright 2009, Haiku Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _USB_RLE_H
#define _USB_RLE_H

#ifdef __cplusplus
extern "C" {
#endif

struct _usbd_param_hdr;

/*
Run Length encoding records for isochronous IN transfers.

Run Length encoding records are used to identify which samples in
the buffer are good which are bad and which are missing. 
Bad bytes are not extracted from the buffer, but are padded to next
nearest sample boundary.  The ultimate consumer of the buffer
should also receive the RLE array.

RLE records are constructed based on the following rules:
#include <SupportDefs.h>

1.	an RLE record contains a sample count and a status 
	(good, bad, missing or unknown). A buffer has
	associated with it an array of rle records. The number of 
	rle records available is specified in the RLE header. The
	number used is also in the RLE header.

2.	Within the scope of a buffer, successive packets with the
	same completion status are represented with (1) rle record.
	For example, after three transactions which have completion
	status of success, the byte count in the rle record for this
	position in the data stream represents the bytes received in
	all three packets.
struct _usbd_param_hdr;

3.	New rle records are initialized each time the status for a
	given packet differs from that of the previous packet.

*/
/* Run length encoding for isochronous in transfers */

#define RLE_GOOD       1
#define RLE_BAD        2
#define RLE_MISSING    3
#define RLE_UNKNOWN    4

/*
Name:    rle
Purpose: used to represent the state of a portion of a data buffer
Fields:
	rle_status		will contain only the values: RLE_GOOD, RLE_BAD, RLE_MISSING
	sample_count	the number of usb samples in the buffer associated with this rle
					record.
Notes:
	If the buffer length field in queue_buffer_single structure changes to an
	uint32 from uin16, then the sample_count data type must 
	track this change.
*/
/* data buffer state */
typedef struct rle {
	uint16	rle_status;
	uint16	sample_count;
} rle;


/*
Name:    rlea
Purpose: used as the primary rle information data structure between the
	USB driver stack and a consuming client.

Fields:
	length		the number of rle records available in this structure.
	num_valid	filled in by the USB driver. indicates the number of valid 
				records filled.
	rles[]		unconstrained array of rle records.
*/
typedef struct rlea {
	uint16	length;
	uint16	num_valid;
	rle		rles[1];
} rlea;


#ifdef __cplusplus
}
#endif

#endif
#endif	/* _USB_RLE_H */
diff --git a/headers/os/drivers/USB_spec.h b/headers/os/drivers/USB_spec.h
index 29398fb..0f07a1e 100644
--- a/headers/os/drivers/USB_spec.h
+++ b/headers/os/drivers/USB_spec.h
@@ -1,152 +1,134 @@
/* 
** USB_spec.h
**
** Copyright 1999, Be Incorporated. All Rights Reserved.
**
** This file contains structures and constants based on the USB Specification 1.1
**
*/

/*
 * Copyright 2009, Haiku Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _USB_SPEC_H
#define _USB_SPEC_H


#ifdef __cplusplus
extern "C" {
#endif

/* request types (target & direction) for  send_request() */
/* cf USB Spec Rev 1.1, table 9-2, p 183 */
#define USB_REQTYPE_DEVICE_IN         0x80
#define USB_REQTYPE_DEVICE_OUT        0x00
#define USB_REQTYPE_INTERFACE_IN      0x81
#define USB_REQTYPE_INTERFACE_OUT     0x01
#define USB_REQTYPE_ENDPOINT_IN       0x82
#define USB_REQTYPE_ENDPOINT_OUT      0x02
#define USB_REQTYPE_OTHER_OUT         0x03
#define USB_REQTYPE_OTHER_IN          0x83

/* request types for send_request() */
/* cf USB Spec Rev 1.1, table 9-2, p 183 */
#define USB_REQTYPE_STANDARD          0x00
#define USB_REQTYPE_CLASS             0x20
#define USB_REQTYPE_VENDOR            0x40
#define USB_REQTYPE_RESERVED          0x60
#define USB_REQTYPE_MASK              0x9F

/* standard request values for send_request() */
/* cf USB Spec Rev 1.1, table 9-4, p 187 */
#define USB_REQUEST_GET_STATUS           0
#define USB_REQUEST_CLEAR_FEATURE        1
#define USB_REQUEST_SET_FEATURE          3
#define USB_REQUEST_SET_ADDRESS          5
#define USB_REQUEST_GET_DESCRIPTOR       6
#define USB_REQUEST_SET_DESCRIPTOR       7
#define USB_REQUEST_GET_CONFIGURATION    8
#define USB_REQUEST_SET_CONFIGURATION    9
#define USB_REQUEST_GET_INTERFACE       10
#define USB_REQUEST_SET_INTERFACE       11
#define USB_REQUEST_SYNCH_FRAME         12

/* used by {set,get}_descriptor() */
/* cf USB Spec Rev 1.1, table 9-5, p 187 */
#define USB_DESCRIPTOR_DEVICE            1
#define USB_DESCRIPTOR_CONFIGURATION     2
#define USB_DESCRIPTOR_STRING            3
#define USB_DESCRIPTOR_INTERFACE         4
#define USB_DESCRIPTOR_ENDPOINT          5

/* used by {set,clear}_feature() */
/* cf USB Spec Rev 1.1, table 9-6, p 188 */
#include <SupportDefs.h>


/* Request types (target/direction) for send_request() */
#define USB_REQTYPE_DEVICE_IN				0x80
#define USB_REQTYPE_DEVICE_OUT				0x00
#define USB_REQTYPE_INTERFACE_IN			0x81
#define USB_REQTYPE_INTERFACE_OUT			0x01
#define USB_REQTYPE_ENDPOINT_IN				0x82
#define USB_REQTYPE_ENDPOINT_OUT			0x02
#define USB_REQTYPE_OTHER_OUT				0x03
#define USB_REQTYPE_OTHER_IN				0x83

/* Request types for send_request() */
#define USB_REQTYPE_STANDARD				0x00
#define USB_REQTYPE_CLASS					0x20
#define USB_REQTYPE_VENDOR					0x40
#define USB_REQTYPE_RESERVED				0x60
#define USB_REQTYPE_MASK					0x9f

/* Standard request values for send_request() */
#define USB_REQUEST_GET_STATUS				0
#define USB_REQUEST_CLEAR_FEATURE			1
#define USB_REQUEST_SET_FEATURE				3
#define USB_REQUEST_SET_ADDRESS				5
#define USB_REQUEST_GET_DESCRIPTOR			6
#define USB_REQUEST_SET_DESCRIPTOR			7
#define USB_REQUEST_GET_CONFIGURATION		8
#define USB_REQUEST_SET_CONFIGURATION		9
#define USB_REQUEST_GET_INTERFACE			10
#define USB_REQUEST_SET_INTERFACE			11
#define USB_REQUEST_SYNCH_FRAME				12

/* Used by {set|get}_descriptor() */
#define USB_DESCRIPTOR_DEVICE				1
#define USB_DESCRIPTOR_CONFIGURATION		2
#define USB_DESCRIPTOR_STRING				3
#define USB_DESCRIPTOR_INTERFACE			4
#define USB_DESCRIPTOR_ENDPOINT				5

/* Used by {set|clear}_feature() */
#define USB_FEATURE_DEVICE_REMOTE_WAKEUP	1
#define USB_FEATURE_ENDPOINT_HALT			0

#define USB_ENDPOINT_ATTR_CONTROL		0x00
#define USB_ENDPOINT_ATTR_ISOCHRONOUS	0x01
#define USB_ENDPOINT_ATTR_BULK			0x02 
#define USB_ENDPOINT_ATTR_INTERRUPT		0x03 
#define USB_ENDPOINT_ATTR_MASK			0x03 

#define USB_ENDPOINT_ADDR_DIR_IN	 	0x80
#define USB_ENDPOINT_ADDR_DIR_OUT		0x00


typedef struct { 
	/* cf USB Spec Rev 1.1, table 9-7, p 197 */
	uint8 length;
	uint8 descriptor_type;          /* USB_DESCRIPTOR_DEVICE */
	uint16 usb_version;             /* USB_DESCRIPTOR_DEVICE_LENGTH */
	uint8 device_class;
	uint8 device_subclass;
	uint8 device_protocol;
	uint8 max_packet_size_0;
	uint16 vendor_id;
	uint16 product_id;
	uint16 device_version;
	uint8 manufacturer;
	uint8 product;
	uint8 serial_number;
	uint8 num_configurations;
#define USB_ENDPOINT_ATTR_CONTROL			0x00
#define USB_ENDPOINT_ATTR_ISOCHRONOUS		0x01
#define USB_ENDPOINT_ATTR_BULK				0x02
#define USB_ENDPOINT_ATTR_INTERRUPT			0x03
#define USB_ENDPOINT_ATTR_MASK				0x03

#define USB_ENDPOINT_ADDR_DIR_IN			0x80
#define USB_ENDPOINT_ADDR_DIR_OUT			0x00


typedef struct usb_device_descriptor {
	uint8	length;
	uint8	descriptor_type;
	uint16	usb_version;
	uint8	device_class;
	uint8	device_subclass;
	uint8	device_protocol;
	uint8	max_packet_size_0;
	uint16	vendor_id;
	uint16	product_id;
	uint16	device_version;
	uint8	manufacturer;
	uint8	product;
	uint8	serial_number;
	uint8	num_configurations;
} _PACKED usb_device_descriptor;

typedef struct {
	/* cf USB Spec Rev 1.1, table 9-8, p 199 */
	uint8 length;
	uint8 descriptor_type;          /* USB_DESCRIPTOR_CONFIGURATION */
	uint16 total_length;            /* USB_DESCRIPTOR_CONFIGURATION_LENGTH */
	uint8 number_interfaces;
	uint8 configuration_value;
	uint8 configuration;
	uint8 attributes;
	uint8 max_power;
typedef struct usb_configuration_descriptor {
	uint8	length;
	uint8	descriptor_type;
	uint16	total_length;
	uint8	number_interfaces;
	uint8	configuration_value;
	uint8	configuration;
	uint8	attributes;
	uint8	max_power;
} _PACKED usb_configuration_descriptor;

typedef struct {
	/* cf USB Spec Rev 1.1, table 9-9, p 202 */
	uint8 length;
	uint8 descriptor_type;          /* USB_DESCRIPTOR_INTERFACE */
	uint8 interface_number;         /* USB_DESCRIPTOR_INTERFACE_LENGTH  */
	uint8 alternate_setting;
	uint8 num_endpoints;
	uint8 interface_class;
	uint8 interface_subclass;
	uint8 interface_protocol;
	uint8 interface;
typedef struct usb_interface_descriptor {
	uint8	length;
	uint8	descriptor_type;
	uint8	interface_number;
	uint8	alternate_setting;
	uint8	num_endpoints;
	uint8	interface_class;
	uint8	interface_subclass;
	uint8	interface_protocol;
	uint8	interface;
} _PACKED usb_interface_descriptor;

typedef struct {
	/* cf USB Spec Rev 1.1, table 9-10, p 203 */
	uint8 length;
	uint8 descriptor_type;          /* USB_DESCRIPTOR_ENDPOINT */
	uint8 endpoint_address;         /* USB_DESCRIPTOR_ENDPOINT_LENGTH */
	uint8 attributes;
	uint16 max_packet_size;
	uint8 interval;
typedef struct usb_endpoint_descriptor {
	uint8	length;
	uint8	descriptor_type;
	uint8	endpoint_address;
	uint8	attributes;
	uint16	max_packet_size;
	uint8	interval;
} _PACKED usb_endpoint_descriptor;

typedef struct {
	/* cf USB Spec Rev 1.1, table 9-12, p 205 */
	uint8 length;                   /* USB_DESCRIPTOR_STRING */
	uint8 descriptor_type;
	uchar string[1];
typedef struct usb_string_descriptor {
	uint8	length;
	uint8	descriptor_type;
	uchar	string[1];
} _PACKED usb_string_descriptor;

typedef struct {
	uint8 length;
	uint8 descriptor_type;
	uint8 data[1];
typedef struct usb_generic_descriptor {
	uint8	length;
	uint8	descriptor_type;
	uint8	data[1];
} _PACKED usb_generic_descriptor;

typedef union {
	usb_generic_descriptor generic;
	usb_device_descriptor device;
	usb_interface_descriptor interface;
	usb_endpoint_descriptor endpoint;
	usb_configuration_descriptor configuration;
	usb_string_descriptor string;
typedef union usb_descriptor {
	usb_generic_descriptor			generic;
	usb_device_descriptor			device;
	usb_interface_descriptor		interface;
	usb_endpoint_descriptor			endpoint;
	usb_configuration_descriptor	configuration;
	usb_string_descriptor			string;
} usb_descriptor;

#ifdef __cplusplus
}
#endif

#endif
#endif	/* _USB_SPEC_H */
diff --git a/headers/os/drivers/bus_manager.h b/headers/os/drivers/bus_manager.h
index e894f7f..36930e4 100644
--- a/headers/os/drivers/bus_manager.h
+++ b/headers/os/drivers/bus_manager.h
@@ -1,21 +1,13 @@
/*******************************************************************************
/
/	File:			bus_managers.h
/
/	Description:	bus manager API
/
/	Copyright 1998, Be Incorporated, All Rights Reserved.
/
*******************************************************************************/

/*
 * Copyright 2009, Haiku Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _BUS_MANAGER_H
#define _BUS_MANAGER_H


#include <module.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct bus_manager_info bus_manager_info;

@@ -24,8 +16,5 @@
	status_t		(*rescan)();
};

#ifdef __cplusplus
}
#endif

#endif	/* _BUS_MANAGER_H */
diff --git a/headers/os/drivers/midi_driver.h b/headers/os/drivers/midi_driver.h
index 147dce4..88c7157 100644
--- a/headers/os/drivers/midi_driver.h
+++ b/headers/os/drivers/midi_driver.h
@@ -1,28 +1,16 @@
/* ++++++++++
	FILE:	midi_driver.h
	REVS:	$Revision: 1.1 $
	NAME:	herold
	DATE:	Tue Jun  4 15:23:29 PDT 1996

	Interface to /dev/midi, the midi driver
+++++ */
/*
	Copyright 1999, Be Incorporated.   All Rights Reserved.
	This file may be used under the terms of the Be Sample Code License.
*/

 * Copyright 2009, Haiku Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _MIDI_DRIVER_H
#define _MIDI_DRIVER_H


#include <Drivers.h>
#include <module.h>

/* -----
	ioctl codes
----- */

/* the old opcodes are deprecated, and may or may not work 
   in newer drivers */
/* deprecated interface */
enum {
	B_MIDI_GET_READ_TIMEOUT = B_MIDI_DRIVER_BASE,
	B_MIDI_SET_READ_TIMEOUT,
@@ -34,85 +22,49 @@
	B_MIDI_SET_READ_TIMEOUT_OLD
};

/* the default timeout when you open a midi driver */

#define B_MIDI_DEFAULT_TIMEOUT 1000000000000000LL

/*	Usage:
	To read, set "data" to a pointer to your buffer, and "size" to the 
	maximum size of this buffer. On return, "when" will contain the time 
	at which the data was received (first byte) and "size" will contain 
	the actual amount of data read.
	Call ioctl(fd, B_MIDI_TIMED_READ, &midi_timed_data, sizeof(midi_timed_data));
	To write, set "when" to when you want the first byte to go out the 
	wire, set "data" to point to your data, and set "size" to the size 
	of your data.
	Call ioctl(fd, B_MIDI_TIMED_WRITE, &midi_timed_data, sizeof(midi_timed_data));
*/
typedef struct {
	bigtime_t when;
	size_t size;
	unsigned char * data;
	bigtime_t	when;
	size_t		size;
	uint8*		data;
} midi_timed_data;


/* The MIDI parser returns the number of bytes that a message contains, given the */
/* initial byte. For some messages, this is not known until the second byte is seen. */
/* For such messages, a state > 0 is returned as well as some count > 0. When state */
/* is > 0, you should call (*parse) for the next byte as well, which might modify */
/* the returned message size. Message size will always be returned with the current */
/* byte being counted as byte 1. A return of 0 means that the byte initiates a new */
/* message. SysX is handled by returning max_size until the end or next initial message */
/* is seen. So your loop looks something like: */
/* 
  uint32 state = 0;	// Only set this to 0 the first time you call the parser.
                  // preserve the 'state' between invocations of your read() hook.
  int todo = 0;
  unsigned char * end = in_buf+buf_size
  unsigned char * out_buf = in_buf;
  while (true) {
    uchar byte = read_midi();
    if (!todo || state) {
      todo = (*parser->parse)(&state, byte, end-out_buf);
    }
    if (todo < 1) {
      unput_midi(byte);
    } else {
      *(out_buf++) = byte;
      todo--;
    }
    if (todo < 1 || out_buf >= end) {
      received_midi_message(in_buf, out_buf-in_buf);
      todo = 0;
    }
  }
   */

#define B_MIDI_PARSER_MODULE_NAME "media/midiparser/v1"

typedef struct _midi_parser_module_info {
	module_info	minfo;
	int		(*parse)(uint32 * state, uchar byte, size_t max_size);
	int		_reserved_;
	int			(*parse)(uint32* state, uchar byte, size_t maxSize);
	int			_reserved_;
} midi_parser_module_info;


#define B_MPU_401_MODULE_NAME "generic/mpu401/v1"

enum {
	B_MPU_401_ENABLE_CARD_INT = 1,
	B_MPU_401_DISABLE_CARD_INT
};

typedef struct _generic_mpu401_module {
	module_info minfo;
	status_t (*create_device)(int port, void ** out_storage, uint32 workarounds, void (*interrupt_op)(int32 op, void * card), void * card);
	status_t (*delete_device)(void * storage);
	status_t (*open_hook)(void * storage, uint32 flags, void ** out_cookie);
	status_t (*close_hook)(void * cookie);
	status_t (*free_hook)(void * cookie);
	status_t (*control_hook)(void * cookie, uint32 op, void * data, size_t len);
	status_t (*read_hook)(void * cookie, off_t pos, void * data, size_t * len);
	status_t (*write_hook)(void * cookie, off_t pos, const void * data, size_t * len);
	bool (*interrupt_hook)(void * cookie);
	int	_reserved_;
	module_info	minfo;
	status_t	(*create_device)(int port, void** _handle, uint32 workArounds,
					void (*interruptOp)(int32 op, void* card), void* card);
	status_t	(*delete_device)(void* handle);
	status_t	(*open_hook)(void* storage, uint32 flags, void** _cookie);
	status_t	(*close_hook)(void* cookie);
	status_t	(*free_hook)(void* cookie);
	status_t	(*control_hook)(void* cookie, uint32 op, void* data,
					size_t length);
	status_t	(*read_hook)(void* cookie, off_t pos, void* data,
					size_t* _length);
	status_t	(*write_hook)(void* cookie, off_t pos, const void* data,
					size_t* _length);
	bool		(*interrupt_hook)(void* cookie);
	int			_reserved_;
} generic_mpu401_module;


#endif
#endif	/* _MIDI_DRIVER_H */
diff --git a/src/apps/installer/CopyEngine.cpp b/src/apps/installer/CopyEngine.cpp
index a3a014d..6aa3c35 100644
--- a/src/apps/installer/CopyEngine.cpp
+++ b/src/apps/installer/CopyEngine.cpp
@@ -533,6 +533,20 @@
			printf("ignoring '%s'.\n", name);
			return false;
		}
		if (strcmp("rr_moved", name) == 0) {
			printf("ignoring '%s'.\n", name);
			return false;
		}
	}
	if (level == 1 && S_ISREG(statInfo.st_mode)) {
		if (strcmp("boot.catalog", name) == 0) {
			printf("ignoring '%s'.\n", name);
			return false;
		}
		if (strcmp("haiku-boot-floppy.image", name) == 0) {
			printf("ignoring '%s'.\n", name);
			return false;
		}
	}
	return true;
}
diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp
index da9769c..e464fb2 100644
--- a/src/kits/interface/Window.cpp
+++ b/src/kits/interface/Window.cpp
@@ -1983,6 +1983,10 @@
bool
BWindow::IsMinimized() const
{
	BAutolock locker(const_cast<BWindow*>(this));
	if (!locker.IsLocked())
		return false;

	// Hiding takes precendence over minimization!!!
	if (IsHidden())
		return false;
@@ -2456,7 +2460,7 @@
	// Set size limits now if needed
	_CheckSizeLimits();

	MoveTo(BLayoutUtils::AlignInFrame(rect, Size(), 
	MoveTo(BLayoutUtils::AlignInFrame(rect, Size(),
		BAlignment(B_ALIGN_HORIZONTAL_CENTER,
			B_ALIGN_VERTICAL_CENTER)).LeftTop());
}
diff --git a/docs/userguide/en/applications/drivesetup.html b/docs/userguide/en/applications/drivesetup.html
index aa4ba9e..269524a 100644
--- a/docs/userguide/en/applications/drivesetup.html
+++ b/docs/userguide/en/applications/drivesetup.html
@@ -44,7 +44,10 @@
<tr><td>Settings:</td><td></td><td><span class="path">~/config/settings/DriveSetup</span></td></tr>
</table>
<p><br/></p>
<p>Documentation is still missing. If you want to work on it, please announce it on the <a href="http://www.freelists.org/list/haiku-doc">Documentation mailing list</a> to avoid duplication.</p>
<p>DriveSetup is a tool to create, delete and initialize partitions. At this time it can't resize or move existing partitions, so that you'll either need an unpartitioned volume (perhaps an external USB drive or another harddisk) or do the initial setup with a tool like the <a href="http://gparted.sourceforge.net/livecd.php">GParted LiveCD</a> to provide the space for another partition.</p>
<img src="../images/apps-images/drivesetup.png" alt="drivesetup.png" />
<p>At the top is a graphical representation of all partitions inside the device chosen in the list below it. Besides a maximum of 4 primary partitions, each of those can contain a number of extended/logical partitions. You may have to expand such a list with the widget that appears in that case in front of that device to see the details of every logical partition.</p>
<p>You can mount and unmount volumes from the <span class="menu">Partition</span> menu.</p>

</div>
<!--