Merge branch 'master' into x86_64

This commit is contained in:
Alex Smith 2012-07-21 14:17:22 +01:00
commit 5f6b522746
32 changed files with 1121 additions and 612 deletions

View File

@ -435,7 +435,7 @@ if [ IsOptionalHaikuImagePackageAdded WebPositive ] {
HAIKU_BUILD_FEATURE_WEBKIT = 1 ;
}
HAIKU_WEBKIT_FILE = haikuwebkit-1.1.2-x86-gcc4-2012-07-11.zip ;
HAIKU_WEBKIT_FILE = haikuwebkit-1.1.3-x86-gcc4-2012-07-20-1.zip ;
if $(HAIKU_BUILD_FEATURE_WEBKIT) {
if $(TARGET_ARCH) != x86 {

View File

@ -385,9 +385,8 @@ protected:
virtual void DoLayout();
private:
void _Init(bool showHorizontalScrollbar);
void _Init();
void _GetChildViewRects(const BRect& bounds,
bool showHorizontalScrollBar,
BRect& titleRect, BRect& outlineRect,
BRect& vScrollBarRect,
BRect& hScrollBarRect);
@ -404,6 +403,7 @@ private:
bool fSortingEnabled;
float fLatchWidth;
border_style fBorderStyle;
bool fShowingHorizontalScrollBar;
};
#endif // _COLUMN_LIST_VIEW_H

View File

@ -0,0 +1,53 @@
/*
* Copyright 2007-2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef _ARGUMENT_VECTOR_H
#define _ARGUMENT_VECTOR_H
#include <SupportDefs.h>
namespace BPrivate {
class ArgumentVector {
public:
enum ParseError {
NO_ERROR,
NO_MEMORY,
UNTERMINATED_QUOTED_STRING,
TRAILING_BACKSPACE
};
public:
ArgumentVector();
~ArgumentVector();
int32 ArgumentCount() const { return fCount; }
const char* const* Arguments() const { return fArguments; }
char** DetachArguments();
// Caller must free() -- it's all one big allocation at the
// returned pointer.
ParseError Parse(const char* commandLine,
const char** _errorLocation = NULL);
private:
struct Parser;
private:
char** fArguments;
int32 fCount;
};
} // namespace BPrivate
using BPrivate::ArgumentVector;
#endif // _ARGUMENT_VECTOR_H

View File

@ -4,10 +4,16 @@
*
* Copyright (c) 2003 by Siarzhuk Zharski <imker@gmx.li>
* Distributed under the terms of the MIT License.
*
* Authors:
* Alexander von Gluck IV, kallisti5@unixzen.com
*/
#include "FTDI.h"
#include "FTDIRegs.h"
FTDIDevice::FTDIDevice(usb_device device, uint16 vendorID, uint16 productID,
const char *description)
: SerialDevice(device, vendorID, productID, description),
@ -46,7 +52,7 @@ FTDIDevice::AddDevice(const usb_configuration_info *config)
}
if (pipesSet >= 3) {
if (ProductID() == PRODUCT_FTDI_8U100AX)
if (ProductID() == 0x8372) // AU100AX
fHeaderLength = 1;
else
fHeaderLength = 0;
@ -84,7 +90,8 @@ FTDIDevice::SetLineCoding(usb_cdc_line_coding *lineCoding)
lineCoding->databits);
int32 rate = 0;
if (ProductID() == PRODUCT_FTDI_8U100AX) {
if (ProductID() == 0x8372) {
// AU100AX
switch (lineCoding->speed) {
case 300: rate = ftdi_sio_b300; break;
case 600: rate = ftdi_sio_b600; break;

View File

@ -4,16 +4,24 @@
*
* Copyright (c) 2003 by Siarzhuk Zharski <imker@gmx.li>
* Distributed under the terms of the MIT License.
*
* Authors:
* Alexander von Gluck IV, kallisti5@unixzen.com
*/
#ifndef _USB_FTDI_H_
#define _USB_FTDI_H_
#include "SerialDevice.h"
/* supported vendor and product ids */
#define VENDOR_FTDI 0x0403
#define PRODUCT_FTDI_8U100AX 0x8372
#define PRODUCT_FTDI_8U232AM 0x6001
#define VENDOR_FTDI 0x0403
const usb_serial_device kFTDIDevices[] = {
{VENDOR_FTDI, 0x8372, "FTDI 8U100AX serial converter"},
{VENDOR_FTDI, 0x6001, "FTDI 8U232AM serial converter"}
};
#define FTDI_BUFFER_SIZE 64
@ -40,4 +48,5 @@ private:
uint8 fStatusLSR;
};
#endif //_USB_FTDI_H_

View File

@ -8,13 +8,19 @@
#ifndef _USB_KLSI_H_
#define _USB_KLSI_H_
#include "SerialDevice.h"
/* supported vendor and product ids */
#define VENDOR_PALM 0x0830
#define VENDOR_KLSI 0x05e9
#define PRODUCT_PALM_CONNECT 0x0080
#define PRODUCT_KLSI_KL5KUSB105D 0x00c0
#define VENDOR_PALM 0x0830
#define VENDOR_KLSI 0x05e9
const usb_serial_device kKLSIDevices[] = {
{VENDOR_PALM, 0x0080, "PalmConnect RS232"},
{VENDOR_KLSI, 0x00c0, "KLSI KL5KUSB105D"}
};
/* protocol defines */
#define KLSI_SET_REQUEST 0x01
@ -58,4 +64,5 @@ virtual void OnWrite(const char *buffer, size_t *numBytes,
virtual void OnClose();
};
#endif //_USB_KLSI_H_

View File

@ -4,36 +4,43 @@
*
* Copyright (c) 2003-2004 by Siarzhuk Zharski <imker@gmx.li>
* Distributed under the terms of the MIT License.
*
* Authors:
* Alexander von Gluck IV, kallisti5@unixzen.com
*/
#ifndef _USB_PROLIFIC_H_
#define _USB_PROLIFIC_H_
#include "ACM.h"
/* supported vendor and product ids */
#define VENDOR_PROLIFIC 0x067b
#define VENDOR_IODATA 0x04bb
#define VENDOR_ATEN 0x0557
#define VENDOR_TDK 0x04bf
#define VENDOR_RATOC 0x0584
#define VENDOR_ELECOM 0x056e
#define VENDOR_SOURCENEXT 0x0833
#define VENDOR_HAL 0x0b41
#define VENDOR_HAL 0x0b41
#define VENDOR_IODATA 0x04bb
#define VENDOR_RATOC 0x0584
#define VENDOR_SOURCENEXT 0x0833
#define VENDOR_TDK 0x04bf
const usb_serial_device kProlificDevices[] = {
{VENDOR_PROLIFIC, 0x04bb, "PL2303 Serial adapter (IODATA USB-RSAQ2)"},
{VENDOR_PROLIFIC, 0x2303, "PL2303 Serial adapter (ATEN/IOGEAR UC232A)"},
{VENDOR_ATEN, 0x2008, "Aten Serial adapter"},
{VENDOR_ELECOM, 0x5003, "Elecom UC-SGT"},
{VENDOR_HAL, 0x0011, "HAL Corporation Crossam2+USB"},
{VENDOR_IODATA, 0x0a03, "I/O Data USB serial adapter USB-RSAQ1"},
{VENDOR_RATOC, 0xb000, "Ratoc USB serial adapter REX-USB60"},
{VENDOR_SOURCENEXT, 0x039f, "SOURCENEXT KeikaiDenwa 8"},
{VENDOR_SOURCENEXT, 0x039f, "SOURCENEXT KeikaiDenwa 8 with charger"},
{VENDOR_TDK, 0x0117, "TDK USB-PHS Adapter UHA6400"}
};
#define PRODUCT_IODATA_USBRSAQ 0x0a03
#define PRODUCT_PROLIFIC_RSAQ2 0x04bb
#define PRODUCT_ATEN_UC232A 0x2008
#define PRODUCT_PROLIFIC_PL2303 0x2303
#define PRODUCT_TDK_UHA6400 0x0117
#define PRODUCT_RATOC_REXUSB60 0xb000
#define PRODUCT_ELECOM_UCSGT 0x5003
#define PRODUCT_SOURCENEXT_KEIKAI8 0x039f
#define PRODUCT_SOURCENEXT_KEIKAI8_CHG 0x012e
#define PRODUCT_HAL_IMR001 0x0011
/* protocol defines */
#define PROLIFIC_SET_REQUEST 0x01
#define PROLIFIC_BUF_SIZE 256
struct request_item;
@ -55,4 +62,5 @@ private:
bool fIsHX;
};
#endif //_USB_PROLIFIC_H_

View File

@ -4,7 +4,12 @@
*
* Copyright (c) 2003 by Siarzhuk Zharski <imker@gmx.li>
* Distributed under the terms of the MIT License.
*
* Authors:
* Alexander von Gluck IV, kallisti5@unixzen.com
*/
#include <new>
#include "SerialDevice.h"
@ -714,451 +719,47 @@ SerialDevice *
SerialDevice::MakeDevice(usb_device device, uint16 vendorID,
uint16 productID)
{
const char *description = NULL;
switch (vendorID) {
case VENDOR_IODATA:
case VENDOR_ATEN:
case VENDOR_TDK:
case VENDOR_RATOC:
case VENDOR_PROLIFIC:
case VENDOR_ELECOM:
case VENDOR_SOURCENEXT:
case VENDOR_HAL:
{
switch (productID) {
case PRODUCT_PROLIFIC_RSAQ2:
description = "PL2303 Serial adapter (IODATA USB-RSAQ2)";
break;
case PRODUCT_IODATA_USBRSAQ:
description = "I/O Data USB serial adapter USB-RSAQ1";
break;
case PRODUCT_ATEN_UC232A:
description = "Aten Serial adapter";
break;
case PRODUCT_TDK_UHA6400:
description = "TDK USB-PHS Adapter UHA6400";
break;
case PRODUCT_RATOC_REXUSB60:
description = "Ratoc USB serial adapter REX-USB60";
break;
case PRODUCT_PROLIFIC_PL2303:
description = "PL2303 Serial adapter (ATEN/IOGEAR UC232A)";
break;
case PRODUCT_ELECOM_UCSGT:
description = "Elecom UC-SGT";
break;
case PRODUCT_SOURCENEXT_KEIKAI8:
description = "SOURCENEXT KeikaiDenwa 8";
break;
case PRODUCT_SOURCENEXT_KEIKAI8_CHG:
description = "SOURCENEXT KeikaiDenwa 8 with charger";
break;
case PRODUCT_HAL_IMR001:
description = "HAL Corporation Crossam2+USB";
break;
}
if (description == NULL)
break;
return new(std::nothrow) ProlificDevice(device, vendorID, productID,
description);
// FTDI Serial Device
for (uint32 i = 0; i < sizeof(kFTDIDevices)
/ sizeof(kFTDIDevices[0]); i++) {
if (vendorID == kFTDIDevices[i].vendorID
&& productID == kFTDIDevices[i].productID) {
return new(std::nothrow) FTDIDevice(device, vendorID, productID,
kFTDIDevices[i].deviceName);
}
case VENDOR_FTDI:
{
switch (productID) {
case PRODUCT_FTDI_8U100AX:
description = "FTDI 8U100AX serial converter";
break;
case PRODUCT_FTDI_8U232AM:
description = "FTDI 8U232AM serial converter";
break;
}
if (description == NULL)
break;
return new(std::nothrow) FTDIDevice(device, vendorID, productID,
description);
}
case VENDOR_PALM:
case VENDOR_KLSI:
{
switch (productID) {
case PRODUCT_PALM_CONNECT:
description = "PalmConnect RS232";
break;
case PRODUCT_KLSI_KL5KUSB105D:
description = "KLSI KL5KUSB105D";
break;
}
if (description == NULL)
break;
return new(std::nothrow) KLSIDevice(device, vendorID, productID,
description);
}
case VENDOR_RENESAS:
{
switch (productID) {
case 0x0053:
description = "Renesas RX610 RX-Stick";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_AKATOM:
{
switch (productID) {
case 0x066A:
description = "AKTAKOM ACE-1001";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_PIRELLI:
{
switch (productID) {
case 0xE000:
case 0xE003:
description = "Pirelli DP-L10 GSM Mobile";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_CYPHERLAB:
{
switch (productID) {
case 0x1000:
description = "Cipherlab CCD Barcode Scanner";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_GEMALTO:
{
switch (productID) {
case 0x5501:
description = "Gemalto contactless smartcard reader";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_DIGIANSWER:
{
switch (productID) {
case 0x000A:
description = "Digianswer ZigBee MAC device";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_MEI:
{
switch (productID) {
case 0x1100:
case 0x1101:
description = "MEI Acceptor";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_DYNASTREAM:
{
switch (productID) {
case 0x1003:
case 0x1004:
case 0x1006:
description = "Dynastream ANT development board";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_KNOCKOFF:
{
switch (productID) {
case 0xAA26:
description = "Knock-off DCU-11";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_SIEMENS:
{
switch (productID) {
case 0x10C5:
description = "Siemens MC60";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_NOKIA:
{
switch (productID) {
case 0xAC70:
description = "Nokia CA-42";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_SILICON:
{
switch (productID) {
case 0x0F91:
case 0x1101:
case 0x1601:
case 0x800A:
case 0x803B:
case 0x8044:
case 0x804E:
case 0x8053:
case 0x8054:
case 0x8066:
case 0x806F:
case 0x807A:
case 0x80CA:
case 0x80DD:
case 0x80F6:
case 0x8115:
case 0x813D:
case 0x813F:
case 0x814A:
case 0x814B:
case 0x8156:
case 0x815E:
case 0x818B:
case 0x819F:
case 0x81A6:
case 0x81AC:
case 0x81AD:
case 0x81C8:
case 0x81E2:
case 0x81E7:
case 0x81E8:
case 0x81F2:
case 0x8218:
case 0x822B:
case 0x826B:
case 0x8293:
case 0x82F9:
case 0x8341:
case 0x8382:
case 0x83A8:
case 0x83D8:
case 0x8411:
case 0x8418:
case 0x846E:
case 0x8477:
case 0x85EA:
case 0x85EB:
case 0x8664:
case 0x8665:
case 0xEA60:
case 0xEA61:
case 0xEA71:
case 0xF001:
case 0xF002:
case 0xF003:
case 0xF004:
description = "Silicon Labs CP210x USB UART converter";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_SILICON2:
{
switch (productID) {
case 0xEA61:
description = "Silicon Labs GPRS USB Modem";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_SILICON3:
{
switch (productID) {
case 0xEA6A:
description = "Silicon Labs GPRS USB Modem 100EU";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_BALTECH:
{
switch (productID) {
case 0x9999:
description = "Balteck card reader";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_OWEN:
{
switch (productID) {
case 0x0004:
description = "Owen AC4 USB-RS485 Converter";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_CLIPSAL:
{
switch (productID) {
case 0x0303:
description = "Clipsal 5500PCU C-Bus USB interface";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_JABLOTRON:
{
switch (productID) {
case 0x0001:
description = "Jablotron serial interface";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_WIENER:
{
switch (productID) {
case 0x0010:
case 0x0011:
case 0x0012:
case 0x0015:
description = "W-IE-NE-R Plein & Baus GmbH device";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_WAVESENSE:
{
switch (productID) {
case 0xAAAA:
description = "Wavesense Jazz blood glucose meter";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_VAISALA:
{
switch (productID) {
case 0x0200:
description = "Vaisala USB instrument";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_ELV:
{
switch (productID) {
case 0xE00F:
description = "ELV USB I²C interface";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_WAGO:
{
switch (productID) {
case 0x07A6:
description = "WAGO 750-923 USB Service";
break;
}
if (description != NULL)
goto SILICON;
break;
}
case VENDOR_DW700:
{
switch (productID) {
case 0x9500:
description = "DW700 GPS USB interface";
break;
}
if (description != NULL)
goto SILICON;
break;
}
SILICON:
return new(std::nothrow) SiliconDevice(device, vendorID, productID,
description);
}
// KLSI Serial Device
for (uint32 i = 0; i < sizeof(kKLSIDevices)
/ sizeof(kKLSIDevices[0]); i++) {
if (vendorID == kKLSIDevices[i].vendorID
&& productID == kKLSIDevices[i].productID) {
return new(std::nothrow) KLSIDevice(device, vendorID, productID,
kKLSIDevices[i].deviceName);
}
}
// Prolific Serial Device
for (uint32 i = 0; i < sizeof(kProlificDevices)
/ sizeof(kProlificDevices[0]); i++) {
if (vendorID == kProlificDevices[i].vendorID
&& productID == kProlificDevices[i].productID) {
return new(std::nothrow) ProlificDevice(device, vendorID, productID,
kProlificDevices[i].deviceName);
}
}
// Silicon Serial Device
for (uint32 i = 0; i < sizeof(kSiliconDevices)
/ sizeof(kSiliconDevices[0]); i++) {
if (vendorID == kSiliconDevices[i].vendorID
&& productID == kSiliconDevices[i].productID) {
return new(std::nothrow) SiliconDevice(device, vendorID, productID,
kSiliconDevices[i].deviceName);
}
}
// Otherwise, return standard ACM device
return new(std::nothrow) ACMDevice(device, vendorID, productID,
"CDC ACM compatible device");
}

View File

@ -4,12 +4,24 @@
*
* Copyright (c) 2003 by Siarzhuk Zharski <imker@gmx.li>
* Distributed under the terms of the MIT License.
*
* Authors:
* Alexander von Gluck IV, kallisti5@unixzen.com
*/
#ifndef _USB_DEVICE_H_
#define _USB_DEVICE_H_
#include "Driver.h"
struct usb_serial_device {
uint32 vendorID;
uint32 productID;
const char* deviceName;
};
class SerialDevice {
public:
SerialDevice(usb_device device,

View File

@ -1,6 +1,9 @@
/*
* Copyright 2011, Adrien Destugues <pulkomandy@pulkomandy.ath.cx>
* Distributed under the terms of the MIT License.
*
* Authors:
* Alexander von Gluck IV, kallisti5@unixzen.com
*/

View File

@ -1,12 +1,133 @@
/*
* Copyright 2011, Adrien Destugues <pulkomandy@pulkomandy.ath.cx>
* Distributed under the terms of the MIT License.
*
* Authors:
* Alexander von Gluck IV, kallisti5@unixzen.com
*/
#ifndef _USB_SILICON_H_
#define _USB_SILICON_H_
#include "SerialDevice.h"
/* supported vendor and product ids */
#define VENDOR_RENESAS 0x045B
#define VENDOR_AKATOM 0x0471
#define VENDOR_PIRELLI 0x0489
#define VENDOR_CYPHERLAB 0x0745
#define VENDOR_GEMALTO 0x08E6
#define VENDOR_DIGIANSWER 0x08FD
#define VENDOR_MEI 0x0BED
#define VENDOR_DYNASTREAM 0x0FCF
#define VENDOR_KNOCKOFF 0x10A6
#define VENDOR_SIEMENS 0x10AB
#define VENDOR_NOKIA 0x10B5
#define VENDOR_SILICON 0x10C4
#define VENDOR_SILICON2 0x10C5
#define VENDOR_SILICON3 0x10CE
#define VENDOR_BALTECH 0x13AD
#define VENDOR_OWEN 0x1555
#define VENDOR_CLIPSAL 0x166A
#define VENDOR_JABLOTRON 0x16D6
#define VENDOR_WIENER 0x16DC
#define VENDOR_WAVESENSE 0x17F4
#define VENDOR_VAISALA 0x1843
#define VENDOR_ELV 0x18EF
#define VENDOR_WAGO 0x1BE3
#define VENDOR_DW700 0x413C
const usb_serial_device kSiliconDevices[] = {
{VENDOR_RENESAS, 0x0053, "Renesas RX610 RX-Stick"},
{VENDOR_AKATOM, 0x066A, "AKTAKOM ACE-1001"},
{VENDOR_PIRELLI, 0xE000, "Pirelli DP-L10 GSM Mobile"},
{VENDOR_PIRELLI, 0xE003, "Pirelli DP-L10 GSM Mobile"},
{VENDOR_CYPHERLAB, 0x1000, "Cipherlab CCD Barcode Scanner"},
{VENDOR_GEMALTO, 0x5501, "Gemalto contactless smartcard reader"},
{VENDOR_DIGIANSWER, 0x000A, "Digianswer ZigBee MAC device"},
{VENDOR_MEI, 0x1100, "MEI Acceptor"},
{VENDOR_MEI, 0x1101, "MEI Acceptor"},
{VENDOR_DYNASTREAM, 0x1003, "Dynastream ANT development board"},
{VENDOR_DYNASTREAM, 0x1004, "Dynastream ANT development board"},
{VENDOR_DYNASTREAM, 0x1006, "Dynastream ANT development board"},
{VENDOR_KNOCKOFF, 0xAA26, "Knock-off DCU-11"},
{VENDOR_SIEMENS, 0x10C5, "Siemens MC60"},
{VENDOR_NOKIA, 0xAC70, "Nokia CA-42"},
{VENDOR_BALTECH, 0x9999, "Balteck card reader"},
{VENDOR_OWEN, 0x0004, "Owen AC4 USB-RS485 Converter"},
{VENDOR_CLIPSAL, 0x0303, "Clipsal 5500PCU C-Bus USB interface"},
{VENDOR_JABLOTRON, 0x0001, "Jablotron serial interface"},
{VENDOR_WIENER, 0x0010, "W-IE-NE-R Plein & Baus GmbH device"},
{VENDOR_WIENER, 0x0011, "W-IE-NE-R Plein & Baus GmbH device"},
{VENDOR_WIENER, 0x0012, "W-IE-NE-R Plein & Baus GmbH device"},
{VENDOR_WIENER, 0x0015, "W-IE-NE-R Plein & Baus GmbH device"},
{VENDOR_WAVESENSE, 0xAAAA, "Wavesense Jazz blood glucose meter"},
{VENDOR_VAISALA, 0x0200, "Vaisala USB instrument"},
{VENDOR_ELV, 0xE00F, "ELV USB I²C interface"},
{VENDOR_WAGO, 0x07A6, "WAGO 750-923 USB Service"},
{VENDOR_DW700, 0x9500, "DW700 GPS USB interface"},
{VENDOR_SILICON, 0x0F91, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x1101, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x1601, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x800A, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x803B, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8044, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x804E, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8053, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8054, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8066, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x806F, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x807A, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x80CA, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x80DD, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x80F6, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8115, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x813D, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x813F, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x814A, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x814B, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8156, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x815E, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x818B, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x819F, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x81A6, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x81AC, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x81AD, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x81C8, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x81E2, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x81E7, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x81E8, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x81F2, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8218, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x822B, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x826B, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8293, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x82F9, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8341, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8382, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x83A8, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x83D8, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8411, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8418, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x846E, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8477, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x85EA, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x85EB, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8664, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0x8665, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0xEA60, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0xEA61, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0xEA71, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0xF001, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0xF002, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0xF003, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON, 0xF004, "Silicon Labs CP210x USB UART converter"},
{VENDOR_SILICON2, 0xEA61, "Silicon Labs GPRS USB Modem"},
{VENDOR_SILICON3, 0xEA6A, "Silicon Labs GPRS USB Modem 100EU"}
};
class SiliconDevice : public SerialDevice {
public:
SiliconDevice(usb_device device, uint16 vendorID,
@ -98,30 +219,5 @@ status_t WriteConfig(CP210XRequest request, uint16_t* data,
size_t size);
};
#define VENDOR_RENESAS 0x045B
#define VENDOR_AKATOM 0x0471
#define VENDOR_PIRELLI 0x0489
#define VENDOR_CYPHERLAB 0x0745
#define VENDOR_GEMALTO 0x08E6
#define VENDOR_DIGIANSWER 0x08FD
#define VENDOR_MEI 0x0BED
#define VENDOR_DYNASTREAM 0x0FCF
#define VENDOR_KNOCKOFF 0x10A6
#define VENDOR_SIEMENS 0x10AB
#define VENDOR_NOKIA 0x10B5
#define VENDOR_SILICON 0x10C4
#define VENDOR_SILICON2 0x10C5
#define VENDOR_SILICON3 0x10CE
#define VENDOR_BALTECH 0x13AD
#define VENDOR_OWEN 0x1555
#define VENDOR_CLIPSAL 0x166A
#define VENDOR_JABLOTRON 0x16D6
#define VENDOR_WIENER 0x16DC
#define VENDOR_WAVESENSE 0x17F4
#define VENDOR_VAISALA 0x1843
#define VENDOR_ELV 0x18EF
#define VENDOR_WAGO 0x1BE3
#define VENDOR_DW700 0x413C
#endif //_USB_SILICON_H_

View File

@ -183,7 +183,7 @@ fs_readdir(fs_volume *_vol, fs_vnode *_node, void *_cookie, struct dirent *buf,
TRACE("fs_readdir - ENTER (sizeof(buf)=%d, bufsize=%d, num=%d\n",
sizeof(buf), bufsize, *num);
if (!ns || !node || !cookie || !num || bufsize < sizeof(buf)) {
if (!ns || !node || !cookie || !num || bufsize < sizeof(*buf)) {
result = EINVAL;
goto exit;
}

View File

@ -407,8 +407,8 @@ SonixCamDevice::ReadIIC(uint8 address, uint8 *data)
if (!Sensor())
return B_NO_INIT;
//dprintf(ID "sonix_i2c_write_multi(, %02x, %d, {%02x, %02x, %02x, %02x, %02x})\n", slave, count, d0, d1, d2, d3, d4);
buffer[0] = (1 << 4) | Sensor()->Use400kHz()?0x01:0
| Sensor()->UseRealIIC()?0x80:0;
buffer[0] = (1 << 4) | (Sensor()->Use400kHz()?0x01:0)
| (Sensor()->UseRealIIC()?0x80:0);
buffer[1] = Sensor()->IICWriteAddress();
buffer[2] = address;
buffer[7] = 0x10; /* absolutely no idea why V4L2 driver use that value */
@ -421,8 +421,8 @@ SonixCamDevice::ReadIIC(uint8 address, uint8 *data)
//dprintf(ID "sonix_i2c_write_multi(, %02x, %d, {%02x, %02x, %02x, %02x, %02x})\n", slave, count, d0, d1, d2, d3, d4);
buffer[0] = (1 << 4) | Sensor()->Use400kHz()?0x01:0
| 0x02 | Sensor()->UseRealIIC()?0x80:0; /* read 1 byte */
buffer[0] = (1 << 4) | (Sensor()->Use400kHz()?0x01:0)
| 0x02 | (Sensor()->UseRealIIC()?0x80:0); /* read 1 byte */
buffer[1] = Sensor()->IICReadAddress();//IICWriteAddress
buffer[7] = 0x10; /* absolutely no idea why V4L2 driver use that value */
err = WriteReg(SN9C102_I2C_SETUP, buffer, 8);

View File

@ -7,6 +7,7 @@
#include <Alert.h>
#include <Button.h>
#include <Catalog.h>
#include <FindDirectory.h>
#include <LayoutBuilder.h>
#include <MediaDefs.h>
#include <MediaNode.h>
@ -23,8 +24,6 @@
#include <TimeSource.h>
#include <TranslationKit.h>
#include <storage/FindDirectory.h>
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "CodyCam"

View File

@ -56,7 +56,7 @@ static const char* kUsage =
"\n"
"Options:\n"
" -h, --help - Print this usage info and exit.\n"
" -c, --cli - Use command line user interface (not yet implemented)\n"
" -c, --cli - Use command line user interface\n"
;
@ -88,6 +88,13 @@ struct Options {
};
struct DebuggedProgramInfo {
team_id team;
thread_id thread;
bool stopInMain;
};
static bool
parse_arguments(int argc, const char* const* argv, bool noOutput,
Options& options)
@ -174,25 +181,104 @@ parse_arguments(int argc, const char* const* argv, bool noOutput,
return true;
}
static status_t
global_init()
{
status_t error = TypeHandlerRoster::CreateDefault();
if (error != B_OK)
return error;
error = ValueHandlerRoster::CreateDefault();
if (error != B_OK)
return error;
return B_OK;
}
/**
* Finds or runs the program to debug, depending on the command line options.
* @param options The parsed command line options.
* @param _info The info for the program to fill in. Will only be filled in
* if successful.
* @return \c true, if the program has been found or ran.
*/
static bool
get_debugged_program(const Options& options, DebuggedProgramInfo& _info)
{
team_id team = options.team;
thread_id thread = options.thread;
bool stopInMain = false;
// If command line arguments were given, start the program.
if (options.commandLineArgc > 0) {
printf("loading program: \"%s\" ...\n", options.commandLineArgv[0]);
// TODO: What about the CWD?
thread = load_program(options.commandLineArgv,
options.commandLineArgc, false);
if (thread < 0) {
// TODO: Notify the user!
fprintf(stderr, "Error: Failed to load program \"%s\": %s\n",
options.commandLineArgv[0], strerror(thread));
return false;
}
team = thread;
// main thread ID == team ID
stopInMain = true;
}
// no parameters given, prompt the user to attach to a team
if (team < 0 && thread < 0)
return false;
// no team, but a thread -- get team
if (team < 0) {
printf("no team yet, getting thread info...\n");
thread_info threadInfo;
status_t error = get_thread_info(thread, &threadInfo);
if (error != B_OK) {
// TODO: Notify the user!
fprintf(stderr, "Error: Failed to get info for thread \"%ld\": "
"%s\n", thread, strerror(error));
return false;
}
team = threadInfo.team;
}
printf("team: %ld, thread: %ld\n", team, thread);
_info.team = team;
_info.thread = thread;
_info.stopInMain = stopInMain;
return true;
}
/**
* Creates a TeamDebugger for the given team. If userInterface is given,
* that user interface is used (the caller retains its reference), otherwise
* a graphical user interface is created.
*/
static TeamDebugger*
start_team_debugger(team_id teamID, SettingsManager* settingsManager,
TeamDebugger::Listener* listener, thread_id threadID = -1,
bool stopInMain = false, bool useCLI = false)
bool stopInMain = false, UserInterface* userInterface = NULL)
{
if (teamID < 0)
return NULL;
UserInterface* userInterface = useCLI
? (UserInterface*)new(std::nothrow) CommandLineUserInterface
: (UserInterface*)new(std::nothrow) GraphicalUserInterface;
BReference<UserInterface> userInterfaceReference;
if (userInterface == NULL) {
// TODO: Notify the user!
fprintf(stderr, "Error: Out of memory!\n");
return NULL;
userInterface = new(std::nothrow) GraphicalUserInterface;
if (userInterface == NULL) {
// TODO: Notify the user!
fprintf(stderr, "Error: Out of memory!\n");
return NULL;
}
userInterfaceReference.SetTo(userInterface, true);
}
BReference<UserInterface> userInterfaceReference(userInterface, true);
status_t error = B_NO_MEMORY;
@ -213,6 +299,7 @@ start_team_debugger(team_id teamID, SettingsManager* settingsManager,
return debugger;
}
// #pragma mark - Debugger application class
@ -247,6 +334,26 @@ private:
};
// #pragma mark - CliDebugger
class CliDebugger : private TeamDebugger::Listener {
public:
CliDebugger();
~CliDebugger();
bool Run(const Options& options);
private:
// TeamDebugger::Listener
virtual void TeamDebuggerStarted(TeamDebugger* debugger);
virtual void TeamDebuggerQuit(TeamDebugger* debugger);
};
// #pragma mark - Debugger application class
Debugger::Debugger()
:
BApplication(kDebuggerSignature),
@ -266,11 +373,7 @@ Debugger::~Debugger()
status_t
Debugger::Init()
{
status_t error = TypeHandlerRoster::CreateDefault();
if (error != B_OK)
return error;
error = ValueHandlerRoster::CreateDefault();
status_t error = global_init();
if (error != B_OK)
return error;
@ -348,62 +451,22 @@ Debugger::ArgvReceived(int32 argc, char** argv)
return;
}
team_id team = options.team;
thread_id thread = options.thread;
bool stopInMain = false;
// If command line arguments were given, start the program.
if (options.commandLineArgc > 0) {
printf("loading program: \"%s\" ...\n", options.commandLineArgv[0]);
// TODO: What about the CWD?
thread = load_program(options.commandLineArgv,
options.commandLineArgc, false);
if (thread < 0) {
// TODO: Notify the user!
fprintf(stderr, "Error: Failed to load program \"%s\": %s\n",
options.commandLineArgv[0], strerror(thread));
return;
}
team = thread;
// main thread ID == team ID
stopInMain = true;
}
// no parameters given, prompt the user to attach to a team
if (team < 0 && thread < 0)
DebuggedProgramInfo programInfo;
if (!get_debugged_program(options, programInfo))
return;
// If we've got
if (team < 0) {
printf("no team yet, getting thread info...\n");
thread_info threadInfo;
status_t error = get_thread_info(thread, &threadInfo);
if (error != B_OK) {
// TODO: Notify the user!
fprintf(stderr, "Error: Failed to get info for thread \"%ld\": "
"%s\n", thread, strerror(error));
return;
}
team = threadInfo.team;
}
printf("team: %ld, thread: %ld\n", team, thread);
TeamDebugger* debugger = _FindTeamDebugger(team);
TeamDebugger* debugger = _FindTeamDebugger(programInfo.team);
if (debugger != NULL) {
printf("There's already a debugger for team: %ld\n", team);
printf("There's already a debugger for team: %ld\n", programInfo.team);
debugger->Activate();
return;
}
start_team_debugger(team, &fSettingsManager, this, thread, stopInMain);
start_team_debugger(programInfo.team, &fSettingsManager, this,
programInfo.thread, programInfo.stopInMain);
}
// TeamDebugger::Listener
void
Debugger::TeamDebuggerStarted(TeamDebugger* debugger)
{
@ -479,8 +542,79 @@ Debugger::_FindTeamDebugger(team_id teamID) const
}
// #pragma mark - CliDebugger
CliDebugger::CliDebugger()
{
}
CliDebugger::~CliDebugger()
{
}
bool
CliDebugger::Run(const Options& options)
{
// initialize global objects and settings manager
status_t error = global_init();
if (error != B_OK) {
fprintf(stderr, "Error: Global initialization failed: %s\n",
strerror(error));
return false;
}
SettingsManager settingsManager;
error = settingsManager.Init();
if (error != B_OK) {
fprintf(stderr, "Error: Settings manager initialization failed: "
"%s\n", strerror(error));
return false;
}
// create the command line UI
CommandLineUserInterface* userInterface
= new(std::nothrow) CommandLineUserInterface;
if (userInterface == NULL) {
fprintf(stderr, "Error: Out of memory!\n");
return false;
}
BReference<UserInterface> userInterfaceReference(userInterface, true);
// get/run the program to be debugged and start the team debugger
DebuggedProgramInfo programInfo;
if (!get_debugged_program(options, programInfo))
return false;
if (start_team_debugger(programInfo.team, &settingsManager, this,
programInfo.thread, programInfo.stopInMain, userInterface)
== NULL) {
return false;
}
userInterface->Run();
return true;
}
void
CliDebugger::TeamDebuggerStarted(TeamDebugger* debugger)
{
}
void
CliDebugger::TeamDebuggerQuit(TeamDebugger* debugger)
{
}
// #pragma mark -
int
main(int argc, const char* const* argv)
{
@ -494,19 +628,19 @@ main(int argc, const char* const* argv)
parse_arguments(argc, argv, false, options);
if (options.useCLI) {
// TODO: implement
fprintf(stderr, "Error: Command line interface unimplemented\n");
return 1;
} else {
Debugger app;
status_t error = app.Init();
if (error != B_OK) {
fprintf(stderr, "Error: Failed to init application: %s\n",
strerror(error));
return 1;
}
app.Run();
CliDebugger debugger;
return debugger.Run(options) ? 0 : 1;
}
Debugger app;
status_t error = app.Init();
if (error != B_OK) {
fprintf(stderr, "Error: Failed to init application: %s\n",
strerror(error));
return 1;
}
app.Run();
return 0;
}

View File

@ -169,12 +169,13 @@ Application Debugger :
# user_interface
UserInterface.cpp
# user_interface/cli
CliCommand.cpp
CommandLineUserInterface.cpp
# user_interface/gui
GraphicalUserInterface.cpp
# user_interface/cli
CommandLineUserInterface.cpp
# user_interface/gui/model
VariablesViewState.cpp
VariablesViewStateHistory.cpp

View File

@ -0,0 +1,20 @@
/*
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include "CliCommand.h"
CliCommand::CliCommand(const char* summary, const char* usage)
:
fSummary(summary),
fUsage(usage)
{
}
CliCommand::~CliCommand()
{
}

View File

@ -0,0 +1,33 @@
/*
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef CLI_COMMAND_H
#define CLI_COMMAND_H
#include <Referenceable.h>
class CliContext;
class CliCommand : public BReferenceable {
public:
CliCommand(const char* summary,
const char* usage);
virtual ~CliCommand();
const char* Summary() const { return fSummary; }
const char* Usage() const { return fUsage; }
virtual void Execute(int argc, const char* const* argv,
CliContext& context) = 0;
private:
const char* fSummary;
const char* fUsage;
};
#endif // CLI_COMMAND_H

View File

@ -0,0 +1,13 @@
/*
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef CLI_CONTEXT_H
#define CLI_CONTEXT_H
class CliContext {
};
#endif // CLI_CONTEXT_H

View File

@ -1,19 +1,115 @@
/*
* Copyright 2011, Rene Gollent, rene@gollent.com.
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include "CommandLineUserInterface.h"
#include <stdio.h>
#include <algorithm>
#include <ArgumentVector.h>
#include <Referenceable.h>
#include "CliCommand.h"
#include "CliContext.h"
// #pragma mark - CommandEntry
struct CommandLineUserInterface::CommandEntry {
CommandEntry(const BString& name, CliCommand* command)
:
fName(name),
fCommand(command)
{
}
const BString& Name() const
{
return fName;
}
CliCommand* Command() const
{
return fCommand.Get();
}
private:
BString fName;
BReference<CliCommand> fCommand;
};
// #pragma mark - HelpCommand
struct CommandLineUserInterface::HelpCommand : CliCommand {
HelpCommand(CommandLineUserInterface* userInterface)
:
CliCommand("print a list of all commands",
"%s\n"
"Prints a list of all commands."),
fUserInterface(userInterface)
{
}
virtual void Execute(int argc, const char* const* argv, CliContext& context)
{
fUserInterface->_PrintHelp();
}
private:
CommandLineUserInterface* fUserInterface;
};
// #pragma mark - HelpCommand
struct CommandLineUserInterface::QuitCommand : CliCommand {
QuitCommand(CommandLineUserInterface* userInterface)
:
CliCommand("quit Debugger",
"%s\n"
"Quits Debugger."),
fUserInterface(userInterface)
{
}
virtual void Execute(int argc, const char* const* argv, CliContext& context)
{
fUserInterface->fListener->UserInterfaceQuitRequested();
}
private:
CommandLineUserInterface* fUserInterface;
};
// #pragma mark - CommandLineUserInterface
CommandLineUserInterface::CommandLineUserInterface()
:
fTeam(NULL),
fListener(NULL),
fCommands(20, true),
fShowSemaphore(-1),
fShown(false),
fTerminating(false)
{
}
CommandLineUserInterface::~CommandLineUserInterface()
{
if (fShowSemaphore >= 0)
delete_sem(fShowSemaphore);
}
@ -27,33 +123,59 @@ CommandLineUserInterface::ID() const
status_t
CommandLineUserInterface::Init(Team* team, UserInterfaceListener* listener)
{
return B_UNSUPPORTED;
fTeam = team;
fListener = listener;
status_t error = _RegisterCommands();
if (error != B_OK)
return error;
fShowSemaphore = create_sem(0, "show CLI");
if (fShowSemaphore < 0)
return fShowSemaphore;
return B_OK;
}
void
CommandLineUserInterface::Show()
{
fShown = true;
release_sem(fShowSemaphore);
}
void
CommandLineUserInterface::Terminate()
{
fTerminating = true;
if (fShown) {
// TODO: Signal the thread so it wakes up!
// Wait for input loop to finish.
while (acquire_sem(fShowSemaphore) == B_INTERRUPTED) {
}
} else {
// The main thread will still be blocked in Run(). Unblock it.
delete_sem(fShowSemaphore);
fShowSemaphore = -1;
}
}
status_t
CommandLineUserInterface::LoadSettings(const TeamUISettings* settings)
{
return B_UNSUPPORTED;
return B_OK;
}
status_t
CommandLineUserInterface::SaveSettings(TeamUISettings*& settings) const
{
return B_UNSUPPORTED;;
return B_OK;
}
@ -71,3 +193,144 @@ CommandLineUserInterface::SynchronouslyAskUser(const char* title,
{
return 0;
}
void
CommandLineUserInterface::Run()
{
// Wait for the Show() semaphore to be released.
status_t error;
do {
error = acquire_sem(fShowSemaphore);
} while (error == B_INTERRUPTED);
if (error != B_OK)
return;
_InputLoop();
// Release the Show() semaphore to signal Terminate().
release_sem(fShowSemaphore);
}
/*static*/ status_t
CommandLineUserInterface::_InputLoopEntry(void* data)
{
return ((CommandLineUserInterface*)data)->_InputLoop();
}
status_t
CommandLineUserInterface::_InputLoop()
{
while (!fTerminating) {
// read a command line
printf("debugger> ");
fflush(stdout);
char buffer[256];
if (fgets(buffer, sizeof(buffer), stdin) == NULL)
break;
// parse the command line
ArgumentVector args;
const char* parseErrorLocation;
switch (args.Parse(buffer, &parseErrorLocation)) {
case ArgumentVector::NO_ERROR:
break;
case ArgumentVector::NO_MEMORY:
printf("Insufficient memory parsing the command line.\n");
continue;
case ArgumentVector::UNTERMINATED_QUOTED_STRING:
printf("Parse error: Unterminated quoted string starting at "
"character %zu.\n", parseErrorLocation - buffer + 1);
continue;
case ArgumentVector::TRAILING_BACKSPACE:
printf("Parse error: trailing backspace.\n");
continue;
}
if (args.ArgumentCount() == 0)
continue;
_ExecuteCommand(args.ArgumentCount(), args.Arguments());
}
return B_OK;
}
status_t
CommandLineUserInterface::_RegisterCommands()
{
if (_RegisterCommand("help", new(std::nothrow) HelpCommand(this)) &&
_RegisterCommand("quit", new(std::nothrow) QuitCommand(this))) {
return B_OK;
}
return B_NO_MEMORY;
}
bool
CommandLineUserInterface::_RegisterCommand(const BString& name,
CliCommand* command)
{
BReference<CliCommand> commandReference(command, true);
if (name.IsEmpty() || command == NULL)
return false;
CommandEntry* entry = new(std::nothrow) CommandEntry(name, command);
if (entry == NULL || !fCommands.AddItem(entry)) {
delete entry;
return false;
}
return true;
}
void
CommandLineUserInterface::_ExecuteCommand(int argc, const char* const* argv)
{
const char* commandName = argv[0];
size_t commandNameLength = strlen(commandName);
CommandEntry* firstEntry = NULL;
for (int32 i = 0; CommandEntry* entry = fCommands.ItemAt(i); i++) {
if (entry->Name().Compare(commandName, commandNameLength) == 0) {
if (firstEntry != NULL) {
printf("Ambiguous command \"%s\".\n", commandName);
return;
}
firstEntry = entry;
}
}
if (firstEntry == NULL) {
printf("Unknown command \"%s\".\n", commandName);
return;
}
CliContext context;
firstEntry->Command()->Execute(argc, argv, context);
}
void
CommandLineUserInterface::_PrintHelp()
{
// determine longest command name
int32 longestCommandName = 0;
for (int32 i = 0; CommandEntry* entry = fCommands.ItemAt(i); i++) {
longestCommandName
= std::max(longestCommandName, entry->Name().Length());
}
// print the command list
for (int32 i = 0; CommandEntry* entry = fCommands.ItemAt(i); i++) {
printf("%*s - %s\n", (int)longestCommandName, entry->Name().String(),
entry->Command()->Summary());
}
}

View File

@ -1,14 +1,21 @@
/*
* Copyright 2011, Rene Gollent, rene@gollent.com.
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef COMMAND_LINE_USER_INTERFACE_H
#define COMMAND_LINE_USER_INTERFACE_H
#include <ObjectList.h>
#include <String.h>
#include "UserInterface.h"
class CliCommand;
class CommandLineUserInterface : public UserInterface {
public:
CommandLineUserInterface();
@ -33,6 +40,40 @@ public:
const char* message, const char* choice1,
const char* choice2, const char* choice3);
void Run();
// Called by the main thread, when
// everything has been set up. Enters the
// input loop.
private:
struct CommandEntry;
typedef BObjectList<CommandEntry> CommandList;
struct HelpCommand;
struct QuitCommand;
// GCC 2 support
friend struct HelpCommand;
friend struct QuitCommand;
private:
static status_t _InputLoopEntry(void* data);
status_t _InputLoop();
status_t _RegisterCommands();
bool _RegisterCommand(const BString& name,
CliCommand* command);
void _ExecuteCommand(int argc,
const char* const* argv);
void _PrintHelp();
private:
Team* fTeam;
UserInterfaceListener* fListener;
CommandList fCommands;
sem_id fShowSemaphore;
bool fShown;
bool fTerminating;
};

View File

@ -118,9 +118,6 @@ private:
BPoint fScrollOffsetStart;
uint32 fMouseFilterMode;
BBitmap* fOffsreenBitmap;
BView* fOffsreenView;
};
#endif // CANVAS_VIEW_H

View File

@ -13,12 +13,12 @@
#include <Alert.h>
#include <Catalog.h>
#include <FilePanel.h>
#include <FindDirectory.h>
#include <IconEditorProtocol.h>
#include <Locale.h>
#include <Message.h>
#include <Mime.h>
#include <Path.h>
#include <storage/FindDirectory.h>
#include "support_settings.h"
@ -331,7 +331,7 @@ IconEditorApp::_LastFilePath(path_kind which)
path = fLastOpenPath.String();
break;
}
if (!path) {
if (path == NULL) {
BPath homePath;
if (find_directory(B_USER_DIRECTORY, &homePath) == B_OK)
@ -372,7 +372,11 @@ IconEditorApp::_RestoreSettings()
// Compensate offset for next window...
fLastWindowFrame.OffsetBy(-kWindowOffset, -kWindowOffset);
}
settings.FindMessage("window settings", &fLastWindowSettings);
BMessage lastSettings;
if (settings.FindMessage("window settings", &lastSettings)
== B_OK) {
fLastWindowSettings = lastSettings;
}
int32 mode;
if (settings.FindInt32("export mode", &mode) >= B_OK)

View File

@ -16,6 +16,7 @@
#include <Catalog.h>
#include <ControlLook.h>
#include <FilePanel.h>
#include <FindDirectory.h>
#include <LayoutBuilder.h>
#include <Locale.h>
#include <Menu.h>
@ -31,8 +32,6 @@
#include <StringView.h>
#include <TextControl.h>
#include <storage/FindDirectory.h>
#include "MediaFileInfoView.h"
#include "MediaFileListView.h"
#include "MessageConstants.h"

View File

@ -140,7 +140,7 @@ TabContainerView::MouseDown(BPoint where)
// Middle click outside tabs should always open a new tab.
fClickCount = 2;
} else if (clicks > 1)
fClickCount = fClickCount++;
fClickCount++;
else
fClickCount = 1;
}

View File

@ -728,9 +728,10 @@ BColumnListView::BColumnListView(BRect rect, const char* name,
fSelectionMessage(NULL),
fSortingEnabled(true),
fLatchWidth(kLatchWidth),
fBorderStyle(border)
fBorderStyle(border),
fShowingHorizontalScrollBar(showHorizontalScrollbar)
{
_Init(showHorizontalScrollbar);
_Init();
}
@ -742,9 +743,10 @@ BColumnListView::BColumnListView(const char* name, uint32 flags,
fSelectionMessage(NULL),
fSortingEnabled(true),
fLatchWidth(kLatchWidth),
fBorderStyle(border)
fBorderStyle(border),
fShowingHorizontalScrollBar(showHorizontalScrollbar)
{
_Init(showHorizontalScrollbar);
_Init();
}
@ -1857,8 +1859,8 @@ BColumnListView::PreferredSize()
BRect outlineRect;
BRect vScrollBarRect;
BRect hScrollBarRect;
_GetChildViewRects(Bounds(), !fHorizontalScrollBar->IsHidden(),
titleRect, outlineRect, vScrollBarRect, hScrollBarRect);
_GetChildViewRects(Bounds(), titleRect, outlineRect, vScrollBarRect,
hScrollBarRect);
// Start with the extra width for border and scrollbars etc.
size.width = titleRect.left - Bounds().left;
size.width += Bounds().right - titleRect.right;
@ -1901,8 +1903,8 @@ BColumnListView::DoLayout()
BRect outlineRect;
BRect vScrollBarRect;
BRect hScrollBarRect;
_GetChildViewRects(Bounds(), !fHorizontalScrollBar->IsHidden(),
titleRect, outlineRect, vScrollBarRect, hScrollBarRect);
_GetChildViewRects(Bounds(), titleRect, outlineRect, vScrollBarRect,
hScrollBarRect);
fTitleView->MoveTo(titleRect.LeftTop());
fTitleView->ResizeTo(titleRect.Width(), titleRect.Height());
@ -1923,7 +1925,7 @@ BColumnListView::DoLayout()
void
BColumnListView::_Init(bool showHorizontalScrollbar)
BColumnListView::_Init()
{
SetViewColor(B_TRANSPARENT_32_BIT);
@ -1940,8 +1942,8 @@ BColumnListView::_Init(bool showHorizontalScrollbar)
BRect outlineRect;
BRect vScrollBarRect;
BRect hScrollBarRect;
_GetChildViewRects(bounds, showHorizontalScrollbar, titleRect, outlineRect,
vScrollBarRect, hScrollBarRect);
_GetChildViewRects(bounds, titleRect, outlineRect, vScrollBarRect,
hScrollBarRect);
fOutlineView = new OutlineView(outlineRect, &fColumns, &fSortColumns, this);
AddChild(fOutlineView);
@ -1959,7 +1961,7 @@ BColumnListView::_Init(bool showHorizontalScrollbar)
"horizontal_scroll_bar", fTitleView, 0.0, bounds.Width(), B_HORIZONTAL);
AddChild(fHorizontalScrollBar);
if (!showHorizontalScrollbar)
if (!fShowingHorizontalScrollBar)
fHorizontalScrollBar->Hide();
fOutlineView->FixScrollBar(true);
@ -1967,9 +1969,8 @@ BColumnListView::_Init(bool showHorizontalScrollbar)
void
BColumnListView::_GetChildViewRects(const BRect& bounds,
bool showHorizontalScrollbar, BRect& titleRect, BRect& outlineRect,
BRect& vScrollBarRect, BRect& hScrollBarRect)
BColumnListView::_GetChildViewRects(const BRect& bounds, BRect& titleRect,
BRect& outlineRect, BRect& vScrollBarRect, BRect& hScrollBarRect)
{
titleRect = bounds;
titleRect.bottom = titleRect.top + kTitleHeight;
@ -1980,7 +1981,7 @@ BColumnListView::_GetChildViewRects(const BRect& bounds,
outlineRect = bounds;
outlineRect.top = titleRect.bottom + 1.0;
outlineRect.right -= B_V_SCROLL_BAR_WIDTH;
if (showHorizontalScrollbar)
if (fShowingHorizontalScrollBar)
outlineRect.bottom -= B_H_SCROLL_BAR_HEIGHT;
vScrollBarRect = bounds;
@ -1989,7 +1990,7 @@ BColumnListView::_GetChildViewRects(const BRect& bounds,
#endif
vScrollBarRect.left = vScrollBarRect.right - B_V_SCROLL_BAR_WIDTH;
if (showHorizontalScrollbar)
if (fShowingHorizontalScrollBar)
vScrollBarRect.bottom -= B_H_SCROLL_BAR_HEIGHT;
hScrollBarRect = bounds;

View File

@ -361,8 +361,11 @@ BSoundFile::_ref_to_file(const entry_ref *ref)
raw = &mf.u.raw_audio;
}
if (raw == NULL)
if (raw == NULL) {
delete media;
delete file;
return B_ERROR;
}
fSamplingRate = (int)raw->frame_rate;
fChannelCount = raw->channel_count;

View File

@ -0,0 +1,203 @@
/*
* Copyright 2007-2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include <ArgumentVector.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <vector>
struct ArgumentVector::Parser {
ParseError Parse(const char* commandLine, const char*& _errorLocation)
{
// init temporary arg/argv storage
fCurrentArg.clear();
fCurrentArgStarted = false;
fArgVector.clear();
fTotalStringSize = 0;
for (; *commandLine; commandLine++) {
char c = *commandLine;
// whitespace delimits args and is otherwise ignored
if (isspace(c)) {
_PushCurrentArg();
continue;
}
const char* errorBase = commandLine;
switch (c) {
case '\'':
// quoted string -- no quoting
while (*++commandLine != '\'') {
c = *commandLine;
if (c == '\0') {
_errorLocation = errorBase;
return UNTERMINATED_QUOTED_STRING;
}
_PushCharacter(c);
}
break;
case '"':
// quoted string -- some quoting
while (*++commandLine != '"') {
c = *commandLine;
if (c == '\0') {
_errorLocation = errorBase;
return UNTERMINATED_QUOTED_STRING;
}
if (c == '\\') {
c = *++commandLine;
if (c == '\0') {
_errorLocation = errorBase;
return UNTERMINATED_QUOTED_STRING;
}
// only '\' and '"' can be quoted, otherwise the
// the '\' is treated as a normal char
if (c != '\\' && c != '"')
_PushCharacter('\\');
}
_PushCharacter(c);
}
break;
case '\\':
// quoted char
c = *++commandLine;
if (c == '\0') {
_errorLocation = errorBase;
return TRAILING_BACKSPACE;
}
_PushCharacter(c);
break;
default:
// normal char
_PushCharacter(c);
break;
}
}
// commit last arg
_PushCurrentArg();
return NO_ERROR;
}
const std::vector<std::string>& ArgVector() const
{
return fArgVector;
}
size_t TotalStringSize() const
{
return fTotalStringSize;
}
private:
void _PushCurrentArg()
{
if (fCurrentArgStarted) {
fArgVector.push_back(fCurrentArg);
fTotalStringSize += fCurrentArg.length() + 1;
fCurrentArgStarted = false;
}
}
void _PushCharacter(char c)
{
if (!fCurrentArgStarted) {
fCurrentArg = "";
fCurrentArgStarted = true;
}
fCurrentArg += c;
}
private:
// temporaries
std::string fCurrentArg;
bool fCurrentArgStarted;
std::vector<std::string> fArgVector;
size_t fTotalStringSize;
};
ArgumentVector::ArgumentVector()
:
fArguments(NULL),
fCount(0)
{
}
ArgumentVector::~ArgumentVector()
{
free(fArguments);
}
char**
ArgumentVector::DetachArguments()
{
char** arguments = fArguments;
fArguments = NULL;
fCount = 0;
return arguments;
}
ArgumentVector::ParseError
ArgumentVector::Parse(const char* commandLine, const char** _errorLocation)
{
free(DetachArguments());
ParseError error;
const char* errorLocation = commandLine;
try {
Parser parser;
error = parser.Parse(commandLine, errorLocation);
if (error == NO_ERROR) {
// Create a char* array and copy everything into a single
// allocation.
int count = parser.ArgVector().size();
size_t arraySize = (count + 1) * sizeof(char*);
fArguments = (char**)malloc(
arraySize + parser.TotalStringSize());
if (fArguments != 0) {
char* argument = (char*)(fArguments + count + 1);
for (int i = 0; i < count; i++) {
fArguments[i] = argument;
const std::string& sourceArgument = parser.ArgVector()[i];
size_t argumentSize = sourceArgument.length() + 1;
memcpy(argument, sourceArgument.c_str(), argumentSize);
argument += argumentSize;
}
fArguments[count] = NULL;
fCount = count;
} else
error = NO_MEMORY;
}
} catch (...) {
error = NO_MEMORY;
}
if (error != NO_ERROR && _errorLocation != NULL)
*_errorLocation = errorLocation;
return error;
}

View File

@ -15,6 +15,7 @@ UsePrivateHeaders kernel libroot ;
StaticLibrary libshared.a :
AboutMenuItem.cpp
AboutWindow.cpp
ArgumentVector.cpp
CalendarView.cpp
ColorQuantizer.cpp
CommandPipe.cpp

View File

@ -5,7 +5,8 @@
#include "device.h"
#include "kernel.h"
#include <compat/sys/kernel.h>
int ticks;

View File

@ -215,7 +215,7 @@ void
openlog_team(const char *ident, int options, int facility)
{
if (ident != NULL)
strcpy(sTeamContext.ident, ident);
strlcpy(sTeamContext.ident, ident, sizeof(sTeamContext.ident));
sTeamContext.options = options;
sTeamContext.facility = SYSLOG_FACILITY(facility);

View File

@ -89,7 +89,7 @@ remove_dir_contents(Path& path, bool force, bool removeAttributes)
{
// open the dir
DIR* dir = opendir(path.GetPath());
if (dir < 0) {
if (dir == NULL) {
fprintf(stderr, "Error: Failed to open dir \"%s\": %s\n",
path.GetPath(), strerror(errno));
return;