#if !defined(AFX_AIDLISTAPP_H__353D88E1_F4DC_4C87_8421_F2E3E00F3384__INCLUDED_)
#define AFX_AIDLISTAPP_H__353D88E1_F4DC_4C87_8421_F2E3E00F3384__INCLUDED_
#if _MSC_VER > 1000 #pragma once
#endif // _MSC_VER > 1000
#include \
#include \
class CAIDListApp {
public: int GetMatchedAIDItem(BYTE *ucAID,BYTE ucAIDLen,AIDITEM *pItem); void DestoryAIDList(); void AddAIDItem(AIDITEM *pItem); CAIDListApp(); virtual ~CAIDListApp(); CPtrList m_listOfAIDs; };
#endif
// !defined(AFX_AIDLISTAPP_H__353D88E1_F4DC_4C87_8421_F2E3E00F3384__INCLUDED_)
// AIDListApp.cpp: implementation of the CAIDListApp class. //
//////////////////////////////////////////////////////////////////////
#include \
#include \#include \
#ifdef _DEBUG #undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif
extern CFormater Formater;
////////////////////////////////////////////////////////////////////// // Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAIDListApp::CAIDListApp() { }
CAIDListApp::~CAIDListApp() { DestoryAIDList(); }
//添加终端AID列表项
void CAIDListApp::AddAIDItem(AIDITEM *pItem) { m_listOfAIDs.AddTail(pItem); }
//销毁AID列表
void CAIDListApp::DestoryAIDList() { AIDITEM *pItem = NULL; while(!m_listOfAIDs.IsEmpty()) { pItem = (AIDITEM*)m_listOfAIDs.RemoveHead(); delete pItem; } }
//终端应用与IC 卡应用的匹配
int CAIDListApp::GetMatchedAIDItem(BYTE *ucAID, BYTE ucAIDLen, AIDITEM *pItem) { POSITION pos; AIDITEM *pTemAID; pos = m_listOfAIDs.GetHeadPosition(); for (int i=0; i< m_listOfAIDs.GetCount(); i++) { pTemAID = (AIDITEM*)m_listOfAIDs.GetNext(pos); if ((ucAIDLen >= pTemAID->ucAIDLen) && (0 == memcmp(ucAID,pTemAID->ucAID,pTemAID->ucAIDLen))) { memcpy(pItem,pTemAID,sizeof(AIDITEM)); if (ucAIDLen == pTemAID->ucAIDLen) return AIDEXACTMATCH; else return AIDPARTMATCH; } } return AIDNOMATCH; }
// CandidateListApp.h: interface for the CCandidateListApp class. //
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CANDIDATELISTAPP_H__ACA72C65_0814_479B_9AB5_3BFC42284E4C__INCLUDED_) #define
AFX_CANDIDATELISTAPP_H__ACA72C65_0814_479B_9AB5_3BFC42284E4C__INCLUDED_
#if _MSC_VER > 1000 #pragma once
#endif // _MSC_VER > 1000
#include \#include \
class CCandidateListApp {
public: void DestoryCandidateList(); BOOL IsCandidateListEmpty(); BOOL RemoveCandidateList(BYTE *ucAID,BYTE ucAIDLen); BOOL InsertCandidateList(APPITEM &pItem); CCandidateListApp(); virtual ~CCandidateListApp(); CList m_listOfApps; };
#endif
// !defined(AFX_CANDIDATELISTAPP_H__ACA72C65_0814_479B_9AB5_3BFC42284E4C__INCLUDED_)
// CandidateListApp.cpp: implementation of the CCandidateListApp class. //
//////////////////////////////////////////////////////////////////////
#include \
#include \
#ifdef _DEBUG #undef THIS_FILE
static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif
////////////////////////////////////////////////////////////////////// // Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCandidateListApp::CCandidateListApp() { }
CCandidateListApp::~CCandidateListApp() { DestoryCandidateList(); } /*
应用优先指示器 bit4-1:
0000-未指定优先级
xxxx-应用显示和选择的顺序,取值从1-15,最高优先级为1 */
//向候选列表插入新的数据项
BOOL CCandidateListApp::InsertCandidateList(APPITEM &pItem) { POSITION pos; APPITEM HeadItem; if (m_listOfApps.GetCount() == 0) { m_listOfApps.AddHead(pItem); } else { if((pItem.ucPriority & 0x0F) == 0) { m_listOfApps.AddTail(pItem); } else { pos = m_listOfApps.GetHeadPosition(); HeadItem = m_listOfApps.GetNext(pos); if ((HeadItem.ucPriority & 0x0F) == 0 || (HeadItem.ucPriority & 0x0F) > (pItem.ucPriority & 0x0F)) { m_listOfApps.InsertBefore(pos,pItem); } else { int i; for (i = 0; i < m_listOfApps.GetCount()-1;i++) { APPITEM TempItem; TempItem = m_listOfApps.GetNext(pos); if ((TempItem.ucPriority & 0x0F) == 0 || (TempItem.ucPriority & 0x0F) > (pItem.ucPriority & 0x0F)) { m_listOfApps.InsertBefore(pos,pItem); break; } } if (i == m_listOfApps.GetCount()-1) m_listOfApps.AddTail(pItem);
} } } return TRUE; }
//从候选列表中移除某个特定的数据项
BOOL CCandidateListApp::RemoveCandidateList(BYTE *ucAID, BYTE ucAIDLen) { POSITION pos; APPITEM TempItem; pos = m_listOfApps.GetHeadPosition(); for (int i = 0; i< m_listOfApps.GetCount();i++) { TempItem = m_listOfApps.GetNext(pos); if ((TempItem.ucAIDLen == ucAIDLen) && (0 == memcpy(TempItem.ucAID,ucAID,ucAIDLen))) { m_listOfApps.RemoveAt(pos); break; } } return TRUE; }
//判断候选列表是否为空
BOOL CCandidateListApp::IsCandidateListEmpty() { return (m_listOfApps.GetCount() > 0)?FALSE:TRUE; }
//销毁候选列表
void CCandidateListApp::DestoryCandidateList() { m_listOfApps.RemoveAll(); }
// ICParam.h: interface for the CICParam class. //
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ICPARAM_H__C61A7169_C356_48E6_8B8F_18201FE6EE23__INCLUDED_) #define AFX_ICPARAM_H__C61A7169_C356_48E6_8B8F_18201FE6EE23__INCLUDED_
#if _MSC_VER > 1000 #pragma once
#endif // _MSC_VER > 1000