//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:  

Abstract:

Platform independent CPCCard Tuple functions

Notes: 
--*/
#ifndef __PCTUPLE_H_
#define __PCTUPLE_H_
#define TUPLE_COMMON_MEMORY_FLAG    0x80000000
#define TUPLE_LONGLINK_FLAG         0x40000000
#define TUPLE_ADDRESS_MASK          0x03ffffff   // 24-Bit Address 

class CPCTuple
{
public:
    CPCTuple()
    {
        ;};
    virtual ~CPCTuple()
    {
        ;};
    virtual STATUS  CardGetFirstTuple( PCARD_TUPLE_PARMS pGetTupleParms );
    STATUS          CardGetNextTuple( PCARD_TUPLE_PARMS pGetTupleParms );
    STATUS          CardGetTupleData( PCARD_DATA_PARMS pGetTupleData );
    virtual STATUS CardGetParsedTuple( UINT8   DesiredTuple,
                                       PVOID pBuf,
                                       PUINT pnItems )
    {
        return CERR_BAD_ARGS;
    }
protected:
    virtual STATUS  GetDesiredTupe( PCARD_TUPLE_PARMS pGetTupleParms );
private:
    virtual BYTE    GetTupleByte( DWORD dwIndex ) = 0;
};

#endif

