/****************************************************************************
 * 
 *  $Id: pnbastsd.h,v 1.2 1999/01/29 18:32:10 hboone Exp $
 * 
 *  Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
 *  
 *  http://www.real.com/devzone
 *
 *  This file is a replacement for the basetsd.h file from VC++ 6.0.
 *  This will automatically be included by pntypes.h when using VC++
 *  6.0 or greater. This file correctly defines the basic sized types
 *  so they don't conflict with the G2 SDK.
 *
 */

#if !(defined(_MSC_VER) && (_MSC_VER > 1100))
#error pnbastsd.h is only intended for use with Microsoft VC++ 6.0 or higher
#endif

#ifndef _BASETSD_H_
#define _BASETSD_H_

#ifdef __cplusplus
extern "C" {
#endif

/*
 * The following types were defined in pntypes.h and so are intentionally
 * not included in this file. They are left here for documentation purposes.
 */
#if 0
typedef int LONG32;
typedef int INT32;
typedef unsigned int ULONG32;
typedef unsigned int UINT32;
#endif

/*
 * The following types are 32 bits wide and unsigned.
 */
typedef unsigned int *PULONG32;
typedef unsigned int DWORD32, *PDWORD32;
typedef unsigned int *PUINT32;

/*
 * INT_PTR is the same size as a pointer.  Its size changes with pointer 
 * size (32 bit or 64 bit).  HALF_PTR is half the size of a pointer.
 */
#ifdef _WIN64

typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;

#define MAXINT_PTR (0x7fffffffffffffffI64)
#define MININT_PTR (0x8000000000000000I64)
#define MAXUINT_PTR (0xffffffffffffffffUI64)

typedef unsigned int UHALF_PTR, *PUHALF_PTR;
typedef int HALF_PTR, *PHALF_PTR;

#define MAXUHALF_PTR (0xffffffffUL)
#define MAXHALF_PTR (0x7fffffffL)
#define MINHALF_PTR (0x80000000L)

#pragma warning(disable:4311)   /* type cast truncation */

#if !defined(__midl)
__inline
unsigned long
HandleToUlong(
    void *h
    )
{
    return((unsigned long) h );
}

__inline
unsigned long
PtrToUlong(
    void  *p
    )
{
    return((unsigned long) p );
}

__inline
unsigned short
PtrToUshort(
    void  *p
    )
{
    return((unsigned short) p );
}

__inline
long
PtrToLong(
    void  *p
    )
{
    return((long) p );
}

__inline
short
PtrToShort(
    void  *p
    )
{
    return((short) p );
}
#endif
#pragma warning(3:4311)   /* type cast truncation */

#else


typedef long INT_PTR, *PINT_PTR;
typedef unsigned long UINT_PTR, *PUINT_PTR;

#define MAXINT_PTR (0x7fffffffL)
#define MININT_PTR (0x80000000L)
#define MAXUINT_PTR (0xffffffffUL)

typedef unsigned short UHALF_PTR, *PUHALF_PTR;
typedef short HALF_PTR, *PHALF_PTR;

#define MAXUHALF_PTR 0xffff
#define MAXHALF_PTR 0x7fff
#define MINHALF_PTR 0x8000

#define HandleToUlong( h ) ((ULONG) (h) )
#define PtrToUlong( p ) ((ULONG) (p) )
#define PtrToLong( p ) ((LONG) (p) )
#define PtrToUshort( p ) ((unsigned short) (p) )
#define PtrToShort( p ) ((short) (p) )

#endif

/*
 * Basic SIZE_T support.
 */
typedef UINT_PTR SIZE_T, *PSIZE_T;
typedef INT_PTR SSIZE_T, *PSSIZE_T;

/*
 * These types are 64 bits wide and signed.
 */
typedef __int64 LONG64, *PLONG64;
typedef __int64 INT64, *PINT64;

/*
 * These types are 64 bits wide and unsigned.
 */
typedef unsigned __int64 ULONG64, *PULONG64;
typedef unsigned __int64 DWORD64, *PDWORD64;
typedef unsigned __int64 UINT64, *PUINT64;

#ifdef __cplusplus
}
#endif

#endif /* _BASETSD_H_ */
