Exemplo n.º 1
1
void f(int x[][6], int r, int c)
{
	if(r==6)
	{
		if(CheckStoneNum(x))
		{
			N++;
			show(x);
		}
		return;
	}

	if(x[r][c]==1)  // 已经放有了棋子
	{
		GoNext(x,r,c);
		return;
	}
	
	int rr = GetRowStoneNum(x,r);
	int cc = GetColStoneNum(x,c);

	if(cc>=3)  // 本列已满
		GoNext(x,r,c);  
	else if(rr>=3)  // 本行已满
		f(x, r+1, 0);   
	else
	{
		x[r][c] = 1;
		GoNext(x,r,c);
		x[r][c] = 0;
		
		if(!(3-rr >= 6-c || 3-cc >= 6-r))  // 本行或本列严重缺子,则本格不能空着!
			GoNext(x,r,c);  
	}
}
Exemplo n.º 2
0
struct Cluster AddIndex(struct Cluster Cluster, int i)
{
	struct Indexes *Index;
	struct Indexes *root;
	root = Cluster.root;
	if(!(root))
		Cluster.root = CreatePoint(i);
	else
	{
		Index = CreatePoint(i);
		while(GoNext(root))
			root = GoNext(root);
		root->Next_Point = Index;
	}
	return Cluster;
}
Exemplo n.º 3
0
bool TScanTable::Find(TKey key)
{
	for (Reset(); !IsEnd(); GoNext())
	{
		Eff++;
		if (pRec[curr].GetKey() == key)
			return true;
	}
	return false;
}
Exemplo n.º 4
0
int GetClusterNumOfPoints(struct Cluster Cluster)
{
	int n=0;
	struct Indexes *root;
	root = Cluster.root;
	while(root)
	{
		n++;
		root = GoNext(root);
	}
	return n;
}
Exemplo n.º 5
0
double GetY(struct Points *Field, struct Cluster Cluster, int i)
{
	int j = 0;
	struct Indexes *root;
	root = Cluster.root;
	while(j<i)
	{
		root = GoNext(root);
		j++;
	}
	return Field[root->Index].y;
}
Exemplo n.º 6
0
int CRebaseDlg::StateAction()
{
	switch(this->m_RebaseStage)
	{
	case CHOOSE_BRANCH:
	case CHOOSE_COMMIT_PICK_MODE:
		if(StartRebase())
			return -1;
		m_RebaseStage = REBASE_START;
		GoNext();
		break;
	}

	return 0;
}
Exemplo n.º 7
0
void Clear_Points(struct Cluster *Clusters, int NumOfClusters)
{	
	int i;
	struct Indexes *tmp, *root;
	
	#pragma omp parallel for private(i)
	for(i=0;i<NumOfClusters;i++)
	{
		root = Clusters[i].root;
		while(root)
		{
			tmp = root;
			root = GoNext(root);
			free(tmp);
		}
		Clusters[i].root = NULL;
	}
	
	return;
}
Exemplo n.º 8
0
void Output_Data(struct Cluster* Clusters, struct Points* Field, int NumOfClusters)
{
	int i;
	double x, y;
	struct Indexes *root;
	
	FILE *fo;
	fo = fopen("output.txt","w");
	for(i=0;i<NumOfClusters;i++)
	{
		root = Clusters[i].root;
		fprintf(fo,"%d Cluster: Center x = %lf y = %lf\n", i+1, Clusters[i].x, Clusters[i].y);
		while(root)
		{
			fprintf(fo,"%lf %lf\n", Field[root->Index].x, Field[root->Index].y);
			root = GoNext(root);
		}
		fprintf(fo,"\n\n");
	}
	fclose(fo);
	return;
}
Exemplo n.º 9
0
/*GoChild - Navigate to child element.
ename - if non-null filters child elements by name, otherwise navigates to first child element
returns True if child element found
*/
Bool CXMLElement::GoChild(char *ename, bool p_inc_text) //go to next child
{
	if (!isinited()) return False;
	xmlNodePtr telement = element;
	if (telement->children) {
			telement = telement->children;
			while (telement != NULL)
			{
				if (telement->type == XML_ELEMENT_NODE)
					break;
				if (p_inc_text && ename == NULL && (telement->type == XML_TEXT_NODE || telement->type == XML_CDATA_SECTION_NODE))
					break;
				telement = telement->next;
			}
			if (!telement)
				return False;
			element = telement;
			if (ename && util_strnicmp((char *)element->name,ename, strlen(ename)) != 0)
					return GoNext(ename);
			return True;
	}
	return False;
}
Exemplo n.º 10
0
int CEdit::MsgProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch (msg)
    {
    case WM_INITDIALOG:
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            BeginPaint(hWnd,&ps);
            Redraw();
            EndPaint(hWnd,&ps);
        }
        break;
    case WM_LBUTTONUP:
        lbutton=false;
        HandleMouse(LOWORD(lParam),HIWORD(lParam),wParam);        
        PostMessage(hWnd,WM_PAINT,0,0);
        break;
    case WM_LBUTTONDOWN:
        lbutton=true;
        HandleMouse(LOWORD(lParam),HIWORD(lParam),wParam);
        PostMessage(hWnd,WM_PAINT,0,0);
        break;
    case WM_RBUTTONUP:
        rbutton=false;
        HandleMouse(LOWORD(lParam),HIWORD(lParam),wParam);
        PostMessage(hWnd,WM_PAINT,0,0);
        break;
    case WM_RBUTTONDOWN:
        rbutton=true;
        HandleMouse(LOWORD(lParam),HIWORD(lParam),wParam);
        PostMessage(hWnd,WM_PAINT,0,0);
        break;  
    case WM_MOUSEMOVE:
        HandleMouse(LOWORD(lParam),HIWORD(lParam),wParam);
        break;
    case WM_VSCROLL:
        if((HWND)lParam == GetDlgItem(hWnd, IDC_LUMINABAR))
        {
            switch(LOWORD(wParam))
            {
            case SB_TOP:
                nLumina=0;
                break;
            case SB_BOTTOM:
                nLumina=255;
                break;
            case SB_LINEUP:
                if (nLumina)
                    nLumina--;
                break;
            case SB_LINEDOWN:
                if (nLumina<255)
                    nLumina++;
                break;
            case SB_PAGEUP:
                nLumina-=10;
                if (nLumina<0)      nLumina=0;
                break;
            case SB_PAGEDOWN:
                nLumina+=10;
                if (nLumina>255)    nLumina=255;
                break;
            case SB_THUMBPOSITION:
            case SB_THUMBTRACK:
                nLumina=HIWORD(wParam);
                break;
            }
            UpdateLumina((HWND)lParam);
        } 
        else if ((HWND)lParam == GetDlgItem(hWnd, IDC_ALPHABAR))
        {
            switch(LOWORD(wParam))
            {
            case SB_TOP:
                nAlpha=0;
                break;
            case SB_BOTTOM:
                nAlpha=255;
                break;
            case SB_LINEUP:
                if (nAlpha)
                    nAlpha--;
                break;
            case SB_LINEDOWN:
                if (nAlpha<255)
                    nAlpha++;
                break;
            case SB_PAGEUP:
                nAlpha-=10;
                if (nAlpha<0)       nAlpha=0;
                break;
            case SB_PAGEDOWN:
                nAlpha+=10;
                if (nAlpha>255)     nAlpha=255;
                break;
            case SB_THUMBPOSITION:
            case SB_THUMBTRACK:
                nAlpha=HIWORD(wParam);
                break;
            }
            UpdateAlpha((HWND)lParam);
        }
        PostMessage(hWnd,WM_PAINT,0,0);
        break;
        
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case ID_TILEED_NEXT:    GoNext();                           break;
        case ID_TILEED_PREV:    GoPrev();                           break;
            
        case ID_TILEED_UNDO:    Undo();                             break;
        case ID_TILEED_REDO:    Redo();                             break;
            
        case ID_TILEED_CLEAR:   curimage.Clear(nCurcolour[1]);      break;
        case ID_TILEED_ROTATE:  curimage.Rotate();                  break;
        case ID_TILEED_FLIP:    curimage.Flip();                    break;
        case ID_TILEED_MIRROR:  curimage.Mirror();                  break;
        case ID_TILEED_EXIT:    PostMessage(hWnd, WM_CLOSE, 0, 0);  break;
        default:
            return HandleCommand(hWnd,wParam);                                                                                // unknown message?  Pass it down to the derived class
        }
        
        PostMessage(hWnd,WM_PAINT,0,0);
        break;
    case WM_CLOSE:
        EndDialog(hWnd,0);
        break;
    }
    return 0;
}
Exemplo n.º 11
0
//----------------------------------------------------------------------------
//!	\brief	handle OK key press function for any GUI's, 
//----------------------------------------------------------------------------
void CReturnDlg::OnOK()
{
	Beep1();
	CString str;
	switch(m_iLevel)
	{
	case PASSWORD_INPUT: //Password Input
		if (m_strPassword.GetLength() == 0)
		{
			Beep();
			return;
		}
		if (!CheckPassword())
		{
			m_IncorrectTimes++;
			if (m_IncorrectTimes >= 5)
			{
				CDataFile::Save(L"CLERK PW", L"On");
				CDialog::OnCancel();
			}
			else
			{
				Beep();
				m_strPassword = L"";
				m_strMsg2.SetCaption(L"");
			}
		    return;
		}
		break;
	case AMOUNT_INPUT:
		str = m_strMsg2.m_szCaption;
		str.Remove('$');
		str.Remove(' ');
		str.Remove('.');
		str.Remove(', ');
		str.TrimLeft('0');
		if (str.GetLength() == 0)
		{
			Beep();
			return;
		}
		PutParam(m_TRREC.Amount, str);
		m_strAmount = m_strMsg2.m_szCaption;
		break;
	case CLERK_INPUT:
		str = m_strMsg2.m_szCaption;
		PutParam(m_TRREC.ClerkID, str);
		break;
	case RECEIP_TINPUT:
		str = m_strMsg2.m_szCaption;
		PutParam(m_TRREC.ReceiptNo, str);
		break;
	case ENTERCARD_INPUT:
		if (!m_KeyEntry)
		{
			Beep();
			return;
		}
		KillTimer(1);
		str = m_strMsg2.m_szCaption;
		if (str.GetLength() < 10 || str.GetLength() > 19)
		{
			Beep();
			return;
		}
		PutParam(m_TRREC.Account, str);
		ProcessManualCard(m_TRREC.Account);
		m_iLevel = MANUALENTRYY-1;
		break;
	case DEBITCARDENTRY:
		KillTimer(1);
		break;
	case DEBITCASHBACK: //CASHBACK
		m_strCashback = m_strMsg2.m_szCaption;
		break;
	case DEBITSURCHARGEFEE: //surcharge fee
		break;
	case DEBITTIPSELECT: //TipSelect
		break;
	case DEBITTOTALCOMFIRM: // TotalComfirm
		break;
//	case DEBITSELECTACCOUNT: // SelectAccount
//		break;
	case DEBITONLINEPIN: //OnlinePin
		break;
	case DEBITMERCHANTCOPY: // for merchant copy of the receipt
		return;
	case DEBITCUSTOMERCOPY: // for Customer copy of the receipt
		KillTimer(1);
		Print(2);
		break;
	case DEBITWAITCOPYEND: // waiting for Customer copy of the receipt ending...
//		KillTimer(1);
		return;
// == == == == == == == == == == == == == = EMV Chip Card Debit Sale :C chip page 122 == == == == == == == == == == == == == = 
	case CHIPENTRYY:
		KillTimer(1);
		break;
	case SELECT_LANGUAGE: //select language
	case SELECT_APPLICATIION: //select application
	case APPLICATION_CONFIRM: //select comfirm
		Beep();
		return;
/*	case CHIP_DEBITCASHBACK: //CASHBACK
		m_strCashback = m_strMsg2.m_szCaption;
		break;
	case CHIP_DEBITSURCHARGEFEE: //surcharge fee
		break;
	case CHIP_DEBITTIPSELECT: //TipSelect
		break;
	case CHIP_DEBITTOTALCOMFIRM: // TotalComfirm
		break;
//	case CHIP_DEBITSELECTACCOUNT: // SelectAccount
//		break;
*/	case CHIP_DEBITENTERPIN: //EnterPin
		break;
	case CHIP_PASSTOCLERK: //pass to clerk
		KillTimer(1);
		GoToLevel(DOTRANSACTION);
		return;
	case CHIP_DEBITMERCHANTCOPY: // for merchant copy of the receipt
		return;
	case CHIP_DEBITCUSTOMERCOPY: // for Customer copy of the receipt
		KillTimer(1);
		Print(2);
		break;
	case CHIP_DEBITWAITCOPYEND: // waiting for Customer copy of the receipt ending...
//		KillTimer(1);
		return;
// == == == == == == == == == == == == == = Credit Card Sale :C Swiped page 75 == == == == == == == == == == == == == == == == == = 
	case CREDITSWIPEENTRYY: //Fraud Check
		str = m_strMsg2.m_szCaption;
		GoToLevel(DOTRANSACTION);
		return;
//		PutParam(m_TRREC.FraudNo, str);  //Fix me later
//		break;
	case CREDITSWIPETOCUSTOMER:
		KillTimer(1);
		break;
	case CREDITSWIPETIPSELECT: //TipSelect
		break;
	case CREDITSWIPETOTALCOMFIRM: // TotalComfirm
		break;
	case CREDITSWIPETOCLERK:   //Pass to clerk
		KillTimer(1);
		GoToLevel(DOTRANSACTION);
		return;
	case CREDITMERCHANTCOPY: // for merchant copy of the receipt
		return;
	case CREDITCUSTOMERCOPY: // for Customer copy of the receipt
		KillTimer(1);
		Print(2);
		break;
	case CREDITWAITCOPYEND: // waiting for Customer copy of the receipt ending...
//		KillTimer(1);
		return;
// == == == == == == == == == == == = /Manual Entry == == == == == == == == == == == == == == == == == == == == == == = 
	case MANUALENTRYY: //Fraud Check
		str = m_strMsg2.m_szCaption;
		if (str.GetLength() != SZ_EXPIRY_DATE)
		{
			Beep();
			return;
		}
		str = m_strMsg2.m_szCaption.Mid(2,2) + m_strMsg2.m_szCaption.Mid(0,2) ;
		PutParam(m_TRREC.ExpDate, str);
		break;
	case MANUAL_IMPRINT_CARD:
		break;
	case MANUAL_SWIPETOCUSTOMER:
		KillTimer(1);
		break;
	case MANUAL_SWIPETIPSELECT: //TipSelect
		break;
	case MANUAL_SWIPETOTALCOMFIRM: // TotalComfirm
		break;
	case MANUAL_SWIPETOCLERK:   //Pass to clerk
		KillTimer(1);
		GoToLevel(DOTRANSACTION);
		return;

// == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == = 
	case CANCELENTRY: 
		KillTimer(1);
		break;
	case CANCELTOCLERK:
		KillTimer(1);
		CDialog::OnCancel();
		return;
	case ERRORENTRY:
		KillTimer(1);
		if ( m_TRREC.bEmvTransaction)
		{
			GoToLevel(EMV_REMOVE_CARD);
		}
		else
			CDialog::OnCancel();
		return;
	case ERRORENTRY1:
		KillTimer(1);
		GoToLevel(m_iNextLevel);
		return;

// == == == == == == == Display Window == == == == == 
	case DISPLAY_WINDOW:
		if (CDisplay::GetMask() & MASK_OK)
			CDisplay::SetKeyReturn(KEY_ENTER);
		return;
	case EMV_SELECT_LANGUAGE: //EMV Select language
	case EMV_CONFIRM_AMOUNT: //EMV confirm amount
	case EMV_SELECT_ACCOUNT: //EMV select account
		m_strMsg2.m_nFormat = DT_LEFT;
		ShowText(L"Please Wait...", L"Do not remove", L"Card!");
		m_iLevel = EMV_WAIT;
		SetKeyReturn(KEY_ENTER);
		return;
	case EMV_PASS_COUSTOMER: //pass to customer
		SetKeyReturn(KEY_ENTER);
		return;
	case CHIP_DEBITCASHBACK: //CASHBACK
		m_strCashback = m_strMsg2.m_szCaption;
		break;
	case CHIP_DEBITSURCHARGEFEE: //surcharge fee
	case CHIP_DEBITTIPSELECT: //TipSelect
	case CHIP_DEBITTOTALCOMFIRM: // TotalComfirm
		break;
	case CHIP_DEBITSELECTACCOUNT: // SelectAccount
		Beep();
		return;
	default:
//		CDialog::OnOK();
		return;
	}
	GoNext();
	SetFocus();
}
Exemplo n.º 12
0
//----------------------------------------------------------------------------
//!	\brief	this is main work loop function for any GUI's entry, 
// param  index is for GUI's index id
//----------------------------------------------------------------------------
void CReturnDlg::WorkLoop(int index)
{
	TCHAR buf[10] = { L"" };
	m_strMsg.m_nFormat = DT_LEFT;
	m_strMsg2.m_nFormat = DT_RIGHT;
	m_Bt.ShowWindow(SW_HIDE);
	m_Bt1.ShowWindow(SW_HIDE);
	m_strMsg.SetColor(RGB(0, 0, 0),RGB( 255,255,255));
	m_strMsg1.SetColor(RGB(0, 0, 0),RGB( 255,255,255));

	CString str = L"";
	CString str1 = L"";
	int i = 0;
	switch(index)
	{
	case PASSWORD_INPUT: //Password Input
		m_bGoBackFlag = FALSE;
		for(i = 0;i<m_strPassword.GetLength();i++)
			str += L"*";

		ShowText(L"Enter Password", L"", str);
		break;
	case AMOUNT_INPUT: //Amout Input
		m_bGoBackFlag = FALSE;
		ShowText(L"Enter Amount", L"", m_strAmount);
		break;
	case CLERK_INPUT:  //Clerk ID input
		if (CDataFile::Read(L"CLERK ID", buf) && CString(buf) == L"Off")
		{
			m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			m_bGoBackFlag = FALSE;
			ShowText(L"Enter Clerk", L"Id", L"");
			break;
		}
	case RECEIP_TINPUT:  //Receipt input
		if (CDataFile::Read(L"RECEIPT", buf) && CString(buf) == L"Off")
		{
			m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			m_bGoBackFlag = FALSE;
			ShowText(L"Enter Receipt", L"Number", L"");
		}
		break;
	case ENTERCARD_INPUT:  //Card enter and manual Entry
		m_bGoBackFlag = FALSE;
		if (!OpenDevice())
		{
			m_strErr1 = L"fail open device";
			PostMessage(ERROR_MESSAGE, 2, 1);
			break;
		}
		m_strMsg.m_nFormat = DT_RIGHT;
		m_strMsg2.m_nFormat = DT_LEFT;
		ShowText(m_strAmount, L"Insert/Swipe/Tap", L"or Key Card #");
		SetTimer(1, 30000, NULL);
		break;

// debit card 
	case DEBITCARDENTRY:
		m_bCancelPrint = TRUE;
		m_bGoBackFlag = FALSE;
		ShowText(L"Pass to", L"Customer", L"");
		SetTimer(1, 3000, NULL);
		m_bCancelInCustomer = TRUE;
		break;
	case DEBITCASHBACK: //CASHBACK
		if (m_bReturnFlag)
		{
			m_bGoBackFlag?GoBack():GoNext();
			break;
		}
		
		if (CDataFile::Read(L"CASHBACK", buf) && CString(buf) == L"Off")
		{
			m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			m_bGoBackFlag = FALSE;
			str = L"Enter Cashback";
			str1 = L"Amount";
			CString str2 = L"$0.00";
			ShowText(str, str1, str2);
		}
		break;
	case DEBITSURCHARGEFEE: //surcharge fee
		if (m_bReturnFlag)
		{
			m_bGoBackFlag?GoBack():GoNext();
			break;
		}
		if (!CDataFile::Read(L"SURCHARGE", buf))
		{
			m_bGoBackFlag?GoBack():GoNext();
			return;
		}
		if (CString(buf) == L"$0.00" || CString(buf) == L"")
		{
			m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			m_bGoBackFlag = FALSE;
			m_Bt.SetValue(1, L"  Cancel", IDB_CANCEL);
			m_Bt.ShowWindow(SW_SHOW);
			m_Bt1.SetValue(3, L"  OK", IDB_OK);
			m_Bt1.ShowWindow(SW_SHOW);
			str.Format(L"        %s  OK?", CString(buf));
			ShowText(L"Fee", str, L"");
			m_strSurcharge = CString(buf);
			break;
		}
	case DEBITTIPSELECT: //TipSelect
		if (m_bReturnFlag)
		{
			m_bGoBackFlag?GoBack():GoNext();
			break;
		}
		GetTipValue();
		break;
	case DEBITTOTALCOMFIRM: // TotalComfirm
		m_bGoBackFlag = FALSE;
		if (DoConfirm(m_bReturnFlag))
			GoNext();
		else
			OnCancel();
		break;
	case DEBITSELECTACCOUNT: // SelectAccount
		m_bGoBackFlag = FALSE;
		m_Bt.SetValue(1, L"  CHEQUE");
		m_Bt1.SetValue(3, L"  SAVING");
		m_Bt.ShowWindow(SW_SHOW);
		m_Bt1.ShowWindow(SW_SHOW);
		ShowText(L"Select Account", L"", L"");
		break;
	case DEBITONLINEPIN: //OnlinePin
		if (!EnterOnlinePin())
		{
			m_strErr1 = L"EnterOnlinePin";
			PostMessage(ERROR_MESSAGE, 2, 1);
		}
		else
		{
			ShowText(L"Please Wait...", L"", L"");
			GoToLevel(DOTRANSACTION);
		}
		break;
	case DEBITMERCHANTCOPY: // for merchant copy of the receipt
		if (m_TRREC.ComStatus == ST_OK  &&
				m_TRREC.TranStatus == ST_APPROVED)
			str = L"APPROVED";
		else
			str = L"Unsuccessful";
		m_strMsg2.m_nFormat = DT_LEFT;
		ShowText(str, L"Retrieve Card", L"Pass to Clerk");
		Print();
		break;
	case DEBITCUSTOMERCOPY: // for Customer copy of the receipt
		ShowText(L"Press OK for", L"customer copy", L"");
		SetTimer(1, 30000, NULL);
		break;
	case DEBITWAITCOPYEND: // waiting for Customer copy of the receipt ending...
		if (m_TRREC.ComStatus == ST_OK  &&
				m_TRREC.TranStatus == ST_APPROVED)
		{
			str.Format(L"AUTH : %s", CString(m_TRREC.AuthCode));
			m_strMsg2.m_nFormat = DT_LEFT;
			str1.Format(L"Inv.#: %s", CString(m_TRREC.InvoiceNo));
			ShowText(L"APPROVED", str, str1);
		}
		else
		{
			str.Format(L"Declined %s", CString(m_TRREC.RespCode));
			ShowText(L"Unsuccessful", str, L"");
		}
		break;
	case DEBITEND: // ending...
		CDialog::OnCancel();
		break;
// == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == 
	case MANUALENTRYY: //Manual Entry enter expiry
		m_strMsg.SetCaption(L"Enter Expiry");
		m_strMsg1.SetCaption(L"Date           MMYY");
		m_strMsg2.SetCaption(L"");
		break;
	case MANUAL_IMPRINT_CARD:  //imprint card
		m_strMsg.SetCaption(L"Imprint Card");
		m_strMsg1.SetCaption(L"Press OK");
		m_strMsg2.SetCaption(L"");
		break;

// == == == == == == == == == == == == == = EMV Chip Card Debit Sale :C chip page 122 == == == == == == == == == == == == == = 
	case CHIPENTRYY:
		m_bCancelPrint = TRUE;
		m_bGoBackFlag = FALSE;
		ShowText(L"Pass to", L"Customer", L"");
		SetTimer(1, 3000, NULL);
		m_bCancelInCustomer = TRUE;
		break;
	case SELECT_LANGUAGE:
		if (SupportEnglishOrFrench())
		{
			// get first language found will be selected
			// EMVSelectLanguage(???);
			m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			m_bGoBackFlag = FALSE;
			m_Bt.SetValue(1, L" English");
			m_Bt.ShowWindow(SW_SHOW);
			m_Bt1.SetValue(3, L" Francais");
			m_Bt1.ShowWindow(SW_SHOW);
			str.Format(L"        %s  OK?", CString(buf));
			ShowText(L"Select language", L"Choisir langue", L"");
		}
		break;
	case SELECT_APPLICATIION:
/*		if (!IsEMVMultiApplication())
		{
			//Select this single Application
			m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			m_bGoBackFlag = FALSE;
			m_Bt.SetValue(1, L"   No");
			m_Bt.ShowWindow(SW_SHOW);
			m_Bt1.SetValue(3, L"   Yes");
			m_Bt1.ShowWindow(SW_SHOW);
			str = GetNextEMVApplicationLabel();
			ShowText(L"Select", str, L"");
		}
	*/	break;
	case APPLICATION_CONFIRM:
		m_bGoBackFlag = FALSE;
		m_Bt.SetValue(1, L"   No");
		m_Bt.ShowWindow(SW_SHOW);
		m_Bt1.SetValue(3, L"   Yes");
		m_Bt1.ShowWindow(SW_SHOW);
		ShowText(m_strCurrentApplicationLabel, L"OK?", L"");
		break;

	case CHIP_DEBITCASHBACK: //CASHBACK
		m_bCancelPrint = TRUE;
		if (m_TRREC.CardType == CARD_CREDIT)
		{
			m_bGoBackFlag?GoBack():GoNext();
			return;
		}

		if (CDataFile::Read(L"CASHBACK", buf) && CString(buf) == L"Off")
		{
			m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			m_bGoBackFlag = FALSE;
			str = L"Enter Cashback";
			str1 = L"Amount";
			CString str2 = m_strCashback;//L"$0.00";
			ShowText(str, str1, str2);
		}
		break;
	case CHIP_DEBITSURCHARGEFEE: //surcharge fee
		if (m_TRREC.CardType == CARD_CREDIT)
		{
			m_bGoBackFlag?GoBack():GoNext();
			return;
		}

		if (!CDataFile::Read(L"SURCHARGE", buf))
		{
			m_bGoBackFlag?GoBack():GoNext();
			return;
		}
		if (CString(buf) == L"$0.00" || CString(buf) == L"")
		{
			m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			m_bGoBackFlag = FALSE;
			m_Bt.SetValue(1, L"  Cancel", IDB_CANCEL);
			m_Bt.ShowWindow(SW_SHOW);
			m_Bt1.SetValue(3, L"  OK", IDB_OK);
			m_Bt1.ShowWindow(SW_SHOW);
			str.Format(L"        %s  OK?", CString(buf));
			ShowText(L"Fee", str, L"");
			m_strSurcharge = CString(buf);
			break;
		}
	case CHIP_DEBITTIPSELECT: //TipSelect
		GetTipValue();
		break;
	case CHIP_DEBITTOTALCOMFIRM: // TotalComfirm
		m_bGoBackFlag = FALSE;
		if (DoConfirm(m_bReturnFlag))
			GoNext();
		else
			OnCancel();
		break;
	case CHIP_DEBITSELECTACCOUNT: // SelectAccount
		if (m_TRREC.CardType == CARD_CREDIT)
		{
//			m_bGoBackFlag?GoBack():GoNext();
			m_strMsg2.m_nFormat = DT_LEFT;
			ShowText(L"Please Wait...", L"Do not remove", L"Card!");
			m_iLevel = EMV_WAIT;
			SetKeyReturn(KEY_ENTER);
			return;
		}

		m_bGoBackFlag = FALSE;
		m_Bt.SetValue(1, L"  CHEQUE");
		m_Bt1.SetValue(3, L"  SAVING");
		m_Bt.ShowWindow(SW_SHOW);
		m_Bt1.ShowWindow(SW_SHOW);
		ShowText(L"Select Account", L"", L"");
		break;
	case CHIP_DEBITENTERPIN: //EnterPin
		if (!EMVEnterPin())//Fix me later
		{
			m_strErr1 = L"EMVEnterPin";
			PostMessage(ERROR_MESSAGE, 2, 1);
		}
		else
		{
			if (m_TRREC.CardType == CARD_CREDIT)
			{
				GoNext();
			}
			else
			{
				ShowText(L"Please Wait...", L"", L"");
				GoToLevel(DOTRANSACTION);
			}
		}
		break;
	case CHIP_PASSTOCLERK: //Pass to clerk
		ShowText(L"Pass to clerk", L"Do not remove card", L"");
		SetTimer(1, 3000, NULL);
		break;

	case CHIP_DEBITMERCHANTCOPY: // for merchant copy of the receipt
		if (m_TRREC.ComStatus == ST_OK  &&
				m_TRREC.TranStatus == ST_APPROVED)
			str = L"APPROVED";
		else
			str = L"Unsuccessful";
		m_strMsg2.m_nFormat = DT_LEFT;
		ShowText(str, L"Remove card", L"Pass to clerk");
		Print();
		break;
	case CHIP_DEBITCUSTOMERCOPY: // for Customer copy of the receipt
		ShowText(L"Press OK for", L"customer copy", L"");
		SetTimer(1, 30000, NULL);
		break;
	case CHIP_DEBITWAITCOPYEND: // waiting for Customer copy of the receipt ending...
		if (m_TRREC.ComStatus == ST_OK  &&
				m_TRREC.TranStatus == ST_APPROVED)
		{
			str.Format(L"AUTH : %s", CString(m_TRREC.AuthCode));
			m_strMsg2.m_nFormat = DT_LEFT;
			str1.Format(L"Inv.#: %s", CString(m_TRREC.InvoiceNo));
			ShowText(L"APPROVED", str, str1);
		}
		else
		{
			str.Format(L"Declined %s", CString(m_TRREC.RespCode));
			ShowText(L"Unsuccessful", str, L"");
		}
		break;
	case CHIP_DEBITEND: // ending...
		if (GetScrStatus() == SCR_POWER_ON)	
			ShowText(L"Please",L"Remove Card",L"");
		else
			CDialog::OnCancel();
		break;
// == == == == == == == == == == == == == = Credit Card Sale :C Swiped page 75 == == == == == == == == == == == == == == == == == = 
	case CREDITSWIPEENTRYY://FRAUD CHECK
		m_bCancelPrint = TRUE;
		m_bGoBackFlag = FALSE;
	    if (CDataFile::Read(L"FRAUD CHECK", buf) && CString(buf) == L"Off")
		{
			if (m_bReturnFlag)
				GoToLevel(DOTRANSACTION);
			else
				m_bGoBackFlag?GoBack():GoNext();
		}
		else
		{
			ShowText(L"Enter Last", L"4 Digits", L"");
		}
		break;
	case CREDITSWIPETOCUSTOMER:
	case MANUAL_SWIPETOCUSTOMER:
		if (m_bReturnFlag)
		{
			m_bGoBackFlag?GoBack():GoNext();
			break;
		}
		if (CDataFile::Read(L"TIP PROMPT", buf) && CString(buf) == L"Off")
		{
			m_iLevel = DOTRANSACTION;
			GoToLevel(m_iLevel);
		}
		else
		{
			ShowText(L"Pass to", L"Customer", L"");
			SetTimer(1, 3000, NULL);
			m_bCancelInCustomer = TRUE;
			m_bGoBackFlag = FALSE;
		}
		break;
	case CREDITSWIPETIPSELECT: //TipSelect
	case MANUAL_SWIPETIPSELECT: //TipSelect
		if (m_bReturnFlag)
		{
			m_bGoBackFlag?GoBack():GoNext();
			break;
		}
		GetTipValue();
		break;
	case CREDITSWIPETOTALCOMFIRM: // TotalComfirm
	case MANUAL_SWIPETOTALCOMFIRM: // TotalComfirm
		m_bGoBackFlag = FALSE;
		if (m_bReturnFlag)
		{
			m_bGoBackFlag?GoBack():GoNext();
			break;
		}
		if (DoConfirm(m_bReturnFlag))
			GoNext();
		else
			OnCancel();
		break;
	case CREDITSWIPETOCLERK:  //Pass to clerk
	case MANUAL_SWIPETOCLERK:  //Pass to clerk
		ShowText(L"Pass to", L"clerk", L"");
		SetTimer(1, 3000, NULL);
		break;
	case CREDITMERCHANTCOPY: // for merchant copy of the receipt
		m_strMsg2.m_nFormat = DT_LEFT;
		if (m_TRREC.ComStatus == ST_OK  &&
				m_TRREC.TranStatus == ST_APPROVED)
		{
			str.Format(L"AUTH : %s", CString(m_TRREC.AuthCode));
			m_strMsg2.m_nFormat = DT_LEFT;
			str1.Format(L"Inv.#: %s", CString(m_TRREC.InvoiceNo));
			ShowText(L"APPROVED", str, str1);
		}
		else
		{
			if (strlen(m_TRREC.HostRespText)  > 0)
				str = CString(m_TRREC.HostRespText);
			else
				str.Format(L"Declined %s", CString(m_TRREC.RespCode));
			ShowText(L"Unsuccessful", str, L"");
		}
		Print();
		break;
	case CREDITCUSTOMERCOPY: // for Customer copy of the receipt
		ShowText(L"Press OK for", L"customer copy", L"");
		SetTimer(1, 30000, NULL);
		break;
	case CREDITWAITCOPYEND: // waiting for Customer copy of the receipt ending...
		if (m_TRREC.ComStatus == ST_OK  &&
				m_TRREC.TranStatus == ST_APPROVED)
		{
			str.Format(L"AUTH : %s", CString(m_TRREC.AuthCode));
			m_strMsg2.m_nFormat = DT_LEFT;
			str1.Format(L"Inv.#: %s", CString(m_TRREC.InvoiceNo));
			ShowText(L"APPROVED", str, str1);
		}
		else
		{
			str.Format(L"Declined %s", CString(m_TRREC.RespCode));
			ShowText(L"Unsuccessful", str, L"");
		}
		break;
	case CREDITEND: // ending...
//	case MANUAL_END: // ending...
		CDialog::OnCancel();
		break;

// == == == == == == == == == == == == == == Do transaction (connect to host) == == == == == == == = 
	case DOTRANSACTION:
		DoTransaction();
		break;
	case CANCELENTRY:
		m_bCancelFlag = TRUE;
		ShowText(L"Transaction", L"Cancelled", L"");
		SetTimer(1, 30000, NULL);
		if (m_TRREC.CardError == CARD_NO_ERROR
			&& m_bCancelPrint)
			Print(0);
		break;
	case CANCELTOCLERK:
		if(m_TRREC.bEmvTransaction)
		{
			GoToLevel(EMV_REMOVE_CARD);
			break;
		}
		if (m_bCancelInCustomer)
		{
			ShowText(L"Pass to", L"Clerk", L"");
			SetTimer(1, 3000, NULL);
		}
		else
			CDialog::OnCancel();
		break;

// == == == == == == == Display Window == == == == == 
	case DISPLAY_WINDOW:
		m_strMsg2.m_nFormat = DT_LEFT;
		str = CDisplay::GetLine(1);
		if (str.GetLength() > 0)
			m_strTitle.SetCaption(str);

		str = CDisplay::GetLine(2);
		ShowText(str, CDisplay::GetLine(3), CDisplay::GetLine(4));
		SetDisplayButton();
		break;

	case EMV_SELECT_LANGUAGE: //EMV Select language
		m_Bt.SetValue(1, L" English");
		m_Bt.ShowWindow(SW_SHOW);
		m_Bt1.SetValue(3, L" Francais");
		m_Bt1.ShowWindow(SW_SHOW);
		ShowText(L"Select language", L"Choisir langue", L"");
		break;
	
	case EMV_CONFIRM_AMOUNT: //EMV confirm amount
		str.Format(L"     $ %s  OK?", DealAmountStr(m_TRREC.TotalAmount));
		m_strMsg2.m_nFormat = DT_LEFT;
		ShowText(L"Total :", str, L"Press OK to confirm");
		break;

	case EMV_SELECT_ACCOUNT: //EMV select account
		m_Bt.SetValue(1, L"  CHEQUE");
		m_Bt1.SetValue(3, L"  SAVING");
		m_Bt.ShowWindow(SW_SHOW);
		m_Bt1.ShowWindow(SW_SHOW);
		ShowText(L"Select Account", L"", L"");
		break;
	
	case EMV_REMOVE_CARD: //EMV Remove Card
		if (GetScrStatus() == SCR_POWER_ON)
			ShowText(L"Please",L"Remove Card",L"");
		else
			CDialog::OnCancel();
		break;
	
	case EMV_PASS_COUSTOMER: //EMV Remove Card
		ShowText(L"Pass to", L"Customer", L"");
		break;
	
	case EMV_START: //EMV Remove Card
		StartEMV();
		break;
	}
}
Exemplo n.º 13
0
//----------------------------------------------------------------------------
//!	\brief	Message entry function for any GUI's, 
//----------------------------------------------------------------------------
LRESULT CReturnDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	CString strTemp; 
	DWORD len = 0;
   DWORD decode = 0;

	if (wParam == 1)
	{
//	TRACE(L"CEnterCardDlg RFID event = %x\n", message);
		BYTE buf[2048] = {0};
		DWORD len;
		switch(message)
		{
			case RFID_EVENT_READY:
				m_RFID.GetData();
				m_iKeyStatus =  KEY_CTLS;
				m_TRREC.EntryMode = ENTRY_MODE_CTLS;
				m_RFID.GetData((BYTE*)buf, &len);
				CloseDevice();
				ProcessCtlsTLV((USHORT)len, (BYTE*)buf);
				if (m_TRREC.CtlsData.C2[0] == 0x05)		// EMV
				{
					m_TRREC.bEmvTransaction = TRUE;
					m_TRREC.bEmvCtlsTransaction = TRUE;
					m_TRREC.bCtlsTransaction = TRUE;
				}
				else if (m_TRREC.CtlsData.C2[0] == 0x04)	// MSR
				{
					m_TRREC.bEmvTransaction = FALSE;
					m_TRREC.bEmvCtlsTransaction = FALSE;
					m_TRREC.bCtlsTransaction = TRUE;
				}
				else if (m_TRREC.CtlsData.C2[0] == 0x06)	// Terminated
				{
					// Get error code from C3
					TRACE(L"RFID ERROR\n");
					return 0;
				}
				else
				{
//					assert(FALSE);
					m_strErr1 = L"CARD NOT SUPPORT";
					ErrorExit(ENTERCARD_INPUT);
					return 0;
				}
				
				m_TRREC.CardType = CARD_CREDIT;	// FIXME: will change when have FLASH support
				m_TRREC.CardError = ProcessSwipedCard(m_TRREC.Track2);
				
				// FIXME: CTLS kernel currently doesn't return AID for VISA, just fake it for now.
				if (m_TRREC.bEmvCtlsTransaction && strcmp("V ", m_TRREC.ServType) == 0)
				{
					strcpy(m_TRREC.EmvData.AID, "A0000000031010");				
				}
				
				m_iLevel = DOTRANSACTION;
				WorkLoop(m_iLevel);
				return 0;
				break;
			case RFID_EVENT_TIMEOUT:
				m_RFID.Cancel();
				TRACE(L"RFID_EVENT_TIMEOUT\n");
				PostMessage(ERROR_MESSAGE, 2, 5);
				break;
			case RFID_EVENT_CANCELLED:
				break;
			case RFID_EVENT_ERROR:
				m_RFID.Cancel();
				ReOpenRFID();
				break;
			default:
				break;	
		}	
	}
	else if (wParam == 0)
	{
		switch(message)
		{
			case MSR_EVENT_DEV_OFFLINE :
				m_strErr1 = L"MSR Open Fail !";
				ErrorExit();
				return NULL;
			case MSR_EVENT_DATA_READY :
			case MSR_EVENT_CT_STATUS :
			case MSR_EVENT_READ_ERROR :
				m_MSR.MsrGetTrackData();
				m_MSR.GetMSRData(2, (BYTE*)m_TRREC.Track2, &len, &decode);
				m_TRREC.CardError = ProcessSwipedCard(m_TRREC.Track2);
				if (m_TRREC.CardError != CARD_NO_ERROR)
				{
					m_strErr1 = L"CARD NOT SUPPORT";
					CloseDevice();
					ErrorExit(ENTERCARD_INPUT);
					return 0;
				}

				m_iKeyStatus =  KEY_MSR;
				m_TRREC.EntryMode = ENTRY_MODE_SWIPED;

				CloseDevice();
/*
				if (m_TRREC.CardType == CARD_DEBIT)
					m_iLevel = DEBITCARDENTRY;
				else if (m_TRREC.CardType == CARD_CREDIT)
					m_iLevel = CREDITSWIPEENTRYY;
*/
				m_iLevel = DOTRANSACTION;
				WorkLoop(m_iLevel);

				return 0;
		}
	}
	else if (wParam == 2 && message == ERROR_MESSAGE)
	{ 
		if (lParam == 1) //error
		{
			ErrorExit();
		}
		else if (lParam == 2) //for jump to other level
			WorkLoop(m_iLevel);
		else if (lParam == 3) // print done
		{
			m_bPrintDone = TRUE;
			GoNext();
		}
		else if (lParam == 4) //Can't print
		{
			m_strErr1 = L"Can't Print";
			ErrorExit();
		}
		else if (lParam == 5) //RFID time out and restart it
		{
			ReOpenRFID();
		}
		else if (lParam == 6) //Show CDisplay window
		{
			if(!m_bCancelFlag)
				GoToLevel(DISPLAY_WINDOW);
		}
	}
	return CDialog::DefWindowProc(message, wParam, lParam);
}
Exemplo n.º 14
0
//----------------------------------------------------------------------------
//!	\brief	handle button press function for any GUI's, 
//----------------------------------------------------------------------------
void CReturnDlg::OnBnClickedButton(UINT nID)
{
	switch(m_iLevel)
	{
	case DEBITSELECTACCOUNT: // SelectAccount
		if (nID == IDC_BUTTON1)
			m_TRREC.AcctType = ACCT_CHEQUE;
		else
			m_TRREC.AcctType = ACCT_SAVING;
		GoNext();
		break;
	case DEBITSURCHARGEFEE: //surcharge fee
	case CHIP_DEBITSURCHARGEFEE: //surcharge fee
		if (nID == IDC_BUTTON1)
			CDialog::OnCancel();
		else
			OnOK();
		break;
	case SELECT_LANGUAGE: //EMV Select language
		if (nID == IDC_BUTTON1)
			EMVSelectLanguage(ENGLISH);
		else
			EMVSelectLanguage(FRENCH);
		GoNext();
		break;
	case SELECT_APPLICATIION: //select application
		if (nID == IDC_BUTTON1)
			GoToLevel(SELECT_APPLICATIION);
		else
			GoNext();
		break;
	case APPLICATION_CONFIRM: //select comfirm
		if (nID == IDC_BUTTON1)
			GoToLevel(SELECT_APPLICATIION);
		else
			GoNext();
		break;

// == == == == == == == Display Window == == == == == 
	case DISPLAY_WINDOW:
		CDisplay::SetKeyReturn(KEY_BUT1+nID-IDC_BUTTON1);
		break;
	case EMV_SELECT_LANGUAGE: //EMV Select language
	case EMV_SELECT_ACCOUNT: //EMV select account
		m_Bt.ShowWindow(SW_HIDE);
		m_Bt1.ShowWindow(SW_HIDE);
		m_strMsg2.m_nFormat = DT_LEFT;
		ShowText(L"Please Wait...", L"Do not remove", L"Card!");
		m_iLevel = EMV_WAIT;
		SetKeyReturn(KEY_BUT1+nID-IDC_BUTTON1);
		break;
	case CHIP_DEBITSELECTACCOUNT: // SelectAccount
		m_Bt.ShowWindow(SW_HIDE);
		m_Bt1.ShowWindow(SW_HIDE);
		if(nID == IDC_BUTTON1)
			m_TRREC.AcctType = ACCT_CHEQUE;
		else
			m_TRREC.AcctType = ACCT_SAVING;
		m_strMsg2.m_nFormat = DT_LEFT;
		ShowText(L"Please Wait...",L"Do not remove",L"Card!");
		m_iLevel = EMV_WAIT;
		SetKeyReturn(KEY_ENTER);
		break;
	}
}
Exemplo n.º 15
0
	void Line2f::CleanOutLine(list<Line2f>& outline, float minDist2)
	{
		Line2f* last = &outline.back();
		bool done = false;
		int idx = 0;
		if (outline.begin() == outline.end())
		  return;
		for(list<Line2f>::iterator pIt = outline.begin(); !done; )
		{
			Vector2f Va = last->vertices.back();
			Vector2f Vb = pIt->vertices.front();

			Vector2f Na = last->src;
			Vector2f Nb = pIt->src;

			float Ao = atan2f(Na.y-Nb.y, Na.x-Nb.x);
			float Aa = atan2f(Va.y-Nb.y, Va.x-Nb.x);
			float Ab = atan2f(Vb.y-Nb.y, Vb.x-Nb.x);

			if( IsAngleInBetween(Aa, Ab, Ao) )
			{
				Vector2f ip0;
				Vector2f ip1;
				float t0;
				float t1;

				if( last->vertices.size() > 1 )
				{
					Vector2f Pa = pIt->src;
					list<Line2f>::iterator pIt2 = pIt;
					GoNext(outline, pIt2);
					Vector2f Pb = pIt2->src;

					while( last->vertices.size() > 1 )
					{
						Vb = *(--(--last->vertices.end()));
						if( linePointDist2D_Segments2(Pa, Pb, Vb) < minDist2 )
						{
							Va = Vb;
							last->vertices.pop_back();
						}
						else
						{
							break;
						}
					}
				}

				if( last->vertices.size() > 1 )
				{
					Vb = *(--(--last->vertices.end()));
					Nb = last->src;
				}
				else
				{
					list<Line2f>::iterator pIt2 = pIt;
					GoPrev(outline, pIt2);
					GoPrev(outline, pIt2);
					Vb = pIt2->vertices.back();
					Nb = pIt2->src;
				}
				// TODO flawed logic here, we wish to extend Va so that the segment Va-Vb is perpendicular to Va-Nb
				float OrigLength = (Nb-Na).length();
				float TransLength = (Vb-Va).length();
				if( OrigLength > TransLength )
				{
					Va = Vb+(Va-Vb)*(OrigLength/TransLength);
				}


				int intersectionPoints = 0;
				while( intersectionPoints == 0)
				{
					Vector2f Pa = pIt->src;
					Na = pIt->vertices.front();
					if( pIt->vertices.size() > 1 )
					{
						pIt->vertices.pop_front();
						Nb = pIt->vertices.front();
		
						list<Line2f>::iterator pIt2 = pIt;
						GoPrev(outline, pIt2);
						Pa = pIt2->src;
					}
					else
					{
						pIt = outline.erase(pIt);
						if( pIt == outline.end() )
						{
							if( outline.size() == 0) return; // this outline shrank to death
							done = true;
							pIt = outline.begin();
						}
						Nb = pIt->vertices.front();
					}
					Vector2f Pb = pIt->src;

					// TODO flawed logic here, we wish to extend Na so that the segment Na-Nb is perpendicular to Na-Pa
					OrigLength = (Pb-Pa).length();
					TransLength = (Nb-Na).length();
					if( OrigLength > TransLength )
					{
						Na = Nb+(Na-Nb)*(OrigLength/TransLength);
					}
					
					intersectionPoints = intersect2D_Segments(Vb, Va, Na, Nb, ip0, ip1, t0, t1);
					switch( intersectionPoints )
					{
					case 0:
						// just loop again.
						break;
					case 1:
						last->vertices.back() = ip0;
						break;
					case 2:
						// this should be impossible, but floating point precision will probably make us end up here.
						assert("If this assertion ever happen, go into the CleanOutLine and remove it. You can safely ignore it and continue!");
						break; 
					}
				}
			}
			last = &(*pIt);
			pIt++;
			done = done || pIt == outline.end();
			idx++;
		}
	}