// UPC.cpp: implementation of the CUPC class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "UPCAE.h" #include "UPC.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CUPC::CUPC() { m_nSymbology = UPCA; } CUPC::CUPC(int nSymbology) { m_nSymbology = nSymbology; } CUPC::~CUPC() { } void CUPC::LoadData(CString csMessage, double dNarrowBar, double dFinalHeight, long nGuardbarHeight, HDC hDC, int nStartingXPixel, int nStartingYPixel, double dRatio) { m_nGuardbarHeight = nGuardbarHeight; //standardize the message int nLen = csMessage.GetLength(); int i,nNumberOfAdditionZero = m_nSymbology == UPCA ? 11 - nLen : 7 - nLen; if (nNumberOfAdditionZero > 0){ // missing some numbers for (i = 0 ; i < nNumberOfAdditionZero ; i ++) csMessage = '0' + csMessage ;// just adding zeros at the head of message } else if (nNumberOfAdditionZero < 0){ if (m_nSymbology == UPCA) csMessage.Delete(10,-nNumberOfAdditionZero); else csMessage.Delete(6,-nNumberOfAdditionZero); } CBarcode::LoadData(csMessage,dNarrowBar,dFinalHeight,hDC,nStartingXPixel,nStartingYPixel,dRatio); } long CUPC::CalculateCheckSumDigit() { int i, nLen, nSum = 0, nItem; nLen = m_csMessage.GetLength(); for (i = 0 ; i < nLen ; i++){ nItem = i%2 ? ((int)m_csMessage.GetAt(i)-48)*1 : ((int)m_csMessage.GetAt(i)-48)*3; nSum += nItem; } nSum %= 10; return (10-nSum)%10; } CString CUPC::RetrieveSystemNumberPattern(int iSystemNumber /* = 0 */, int iNumber) { CString strCharPattern; if (iSystemNumber == 0){ switch (iNumber){ case 0: strCharPattern = "EEEOOO"; break; case 1: strCharPattern = "EEOEOO"; break; case 2: strCharPattern = "EEOOEO"; break; case 3: strCharPattern = "EEOOOE"; break; case 4: strCharPattern = "EOEEOO"; break; case 5: strCharPattern = "EOOEEO"; break; case 6: strCharPattern = "EOOOEE"; break; case 7: strCharPattern = "EOEOEO"; break; case 8: strCharPattern = "EOEOOE"; break; case 9: strCharPattern = "EOOEOE"; break; } } else{ switch(iNumber){ case 0: strCharPattern = "OOOEEE"; break; case 1: strCharPattern = "OOEOEE"; break; case 2: strCharPattern = "OOEEOE"; break; case 3: strCharPattern = "OOEEEO"; break; case 4: strCharPattern = "OEOOEE"; break; case 5: strCharPattern = "OEEOOE"; break; case 6: strCharPattern = "OEEEOO"; break; case 7: strCharPattern = "OEOEOE"; break; case 8: strCharPattern = "OEOEEO"; break; case 9: strCharPattern = "OEEOEO"; break; } } return strCharPattern; } CString CUPC::RetrieveLeftOddParityPattern(int iNumber) { CString strCharPattern; switch(iNumber){ case 0: strCharPattern = "sssbbsb"; break; case 1: strCharPattern = "ssbbssb"; break; case 2: strCharPattern = "ssbssbb"; break; case 3: strCharPattern = "sbbbbsb"; break; case 4: strCharPattern = "sbsssbb"; break; case 5: strCharPattern = "sbbsssb"; break; case 6: strCharPattern = "sbsbbbb"; break; case 7: strCharPattern = "sbbbsbb"; break; case 8: strCharPattern = "sbbsbbb"; break; case 9: strCharPattern = "sssbsbb"; break; } return strCharPattern; } CString CUPC::RetrieveLeftEvenParityPattern(int iNumber) { CString strCharPattern; switch(iNumber){ case 0: strCharPattern = "sbssbbb"; break; case 1: strCharPattern = "sbbssbb"; break; case 2: strCharPattern = "ssbbsbb"; break; case 3: strCharPattern = "sbssssb"; break; case 4: strCharPattern = "ssbbbsb"; break; case 5: strCharPattern = "sbbbssb"; break; case 6: strCharPattern = "ssssbsb"; break; case 7: strCharPattern = "ssbsssb"; break; case 8: strCharPattern = "sssbssb"; break; case 9: strCharPattern = "ssbsbbb"; break; } return strCharPattern; } CString CUPC::RetrieveLeftPattern(int iNumber) { CString strCharPattern; switch(iNumber){ case 0: strCharPattern = "sssbbsb"; break; case 1: strCharPattern = "ssbbssb"; break; case 2: strCharPattern = "ssbssbb"; break; case 3: strCharPattern = "sbbbbsb"; break; case 4: strCharPattern = "sbsssbb"; break; case 5: strCharPattern = "sbbsssb"; break; case 6: strCharPattern = "sbsbbbb"; break; case 7: strCharPattern = "sbbbsbb"; break; case 8: strCharPattern = "sbbsbbb"; break; case 9: strCharPattern = "sssbsbb"; break; } return strCharPattern; } CString CUPC::RetrieveRightPattern(int iNumber) { CString strCharPattern; switch(iNumber){ case 0: strCharPattern = "bbbssbs"; break; case 1: strCharPattern = "bbssbbs"; break; case 2: strCharPattern = "bbsbbss"; break; case 3: strCharPattern = "bssssbs"; break; case 4: strCharPattern = "bsbbbss"; break; case 5: strCharPattern = "bssbbbs"; break; case 6: strCharPattern = "bsbssss"; break; case 7: strCharPattern = "bsssbss"; break; case 8: strCharPattern = "bssbsss"; break; case 9: strCharPattern = "bbbsbss"; break; } return strCharPattern; } void CUPC::DrawPattern(CString csPattern) { int i,nXPixel,nYPixel; CDC oDC; // attach to the device context oDC.Attach(m_hDC); // initialize X pixel value nXPixel = m_nStartingXPixel; for (i=0;i