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); } }
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; }
bool TScanTable::Find(TKey key) { for (Reset(); !IsEnd(); GoNext()) { Eff++; if (pRec[curr].GetKey() == key) return true; } return false; }
int GetClusterNumOfPoints(struct Cluster Cluster) { int n=0; struct Indexes *root; root = Cluster.root; while(root) { n++; root = GoNext(root); } return n; }
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; }
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; }
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; }
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; }
/*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; }
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; }
//---------------------------------------------------------------------------- //! \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(); }
//---------------------------------------------------------------------------- //! \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; } }
//---------------------------------------------------------------------------- //! \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); }
//---------------------------------------------------------------------------- //! \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; } }
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++; } }