void TextWindow::ClearSuper(void) {
    HideEditControl();

    memset(this, 0, sizeof(*this));
    MakeColorTable(fgColors, fgColorTable);
    MakeColorTable(bgColors, bgColorTable);

    ClearScreen();
    Show();
}
Example #2
0
int PMCodeEncoder::encode(PMCodeEncodeParameter param, PMCodeImageData &result) {
	int i = 0, ret = 1;

	PMCodeColorCodeSetting colorCode = param.getPMCodeColorCodeSetting();
	for (i = 0; i < param.getLayer(); i++) {
		g_ColorCodeSettingDefinition[i] = colorCode.getColorCode(i);
	}

	MakeColorTable(param.getLayer(), param.getLayer());

	ret = check(param);
	if (ret != TRUE) return ret;

	ret = mCPMCodeEncode.SetPMCodeData(param.getData(),
			              param.getDataSize(),
			              param.getLayer(),
			              param.getVersion(),
			              param.getErrorCorrection(),
			              param.getMaskAuto(),
			              param.getModuleSize(),
			              param.getExtension(),
			              param.getNote());
	if (ret != RESULT_OK) return ret;

	ret = mCPMCodeEncode.EncodePMCode();
	if (ret != RESULT_OK) return ret;

	char	*image;
	UINT	imageSize;
	int		width, height;
	ret = mCPMCodeEncode.GetPMCodeImageData(&image, &imageSize, &width, &height);
	if (ret != RESULT_OK) return ret;
	result.setImage(image);
	result.setImageSize(imageSize);
	result.setWidth(width);
	result.setHeight(height);

	return RESULT_OK;
}
Example #3
0
int CPMCodeDecode::DecodePMCode () {

	CQRCodeDecode	*pQRCodeDecode						= NULL;
	UINT			uiDecodeDataSize;
	char			*szQRCodeImage = NULL;
	int				iQRCodeImageSize;
	int				iQRCodeLengthSize;
	long			lColorCode;
	int				iRet;
	CReedSolomon	cReedSolomon;
	BOOL			bRet;
	int				iDataSize;
	int				iBlockSize;
	int				iCorrectPos = 0;
	int				iCorrectDataSize;
	int				iRSBlock1;
	int				iRSBlock2;
	BYTE			szCorrectBuf [256];
	BYTE			szWork [256];
	char			*szDecodeData = NULL;

	if (m_szDecodeData != NULL) {
		free (m_szDecodeData);
		m_szDecodeData = NULL;
		m_uiDecodeDataSize = 0;
	}

	if (m_szBaseImage == NULL || m_uiBaseImageSize == 0) {
		return RESULT_ERROR_IMAGEFILE_READ_YET;
	}

	m_iVersion		= SYM2VER(m_Width);
	m_iSymbolSize	= m_Width;

	iRet = GetColorCode (g_PMCodeColor, m_szBaseImage, m_uiBaseImageSize, m_iSymbolSize, m_iVersion);
	if(RESULT_OK != iRet){
		return iRet;
	}

	m_iLayer = GetLayerCount (m_szBaseImage, m_uiBaseImageSize, m_iSymbolSize);

	if(0 == m_iLayer){
		return RESULT_ERROR_ANALYSIS_LAYER;
	}

	if (m_iVersion < 3) {
		MakeColorTable (3, m_iLayer);
	} else {
		MakeColorTable (6, m_iLayer);
	}

	iQRCodeLengthSize	= CalcPitch (BIT_COUNT_8, m_iSymbolSize);
	iQRCodeImageSize	= iQRCodeLengthSize * m_iSymbolSize;

	if (szQRCodeImage != NULL){
		free (szQRCodeImage);
		szQRCodeImage = NULL;
	}
	szQRCodeImage = (char *)malloc (iQRCodeImageSize + 1);
	if (szQRCodeImage == NULL) {
		return RESULT_ERROR_SECURE_MEMORY;
	}
	memset (szQRCodeImage, '\0', iQRCodeImageSize + 1);				
	pQRCodeDecode = new CQRCodeDecode;

	m_szDecodeData = (char *)realloc (m_szDecodeData, (QR_VersonInfo[m_iVersion].ncAllCodeWord * m_iLayer) + 1);
	memset (m_szDecodeData, '\0', (QR_VersonInfo[m_iVersion].ncAllCodeWord * m_iLayer) + 1);

	for (int i = 0; i < m_iLayer; i ++ ) {
#if PM_CODE_COLOR
		if (g_ColorCodeSetting == 0) {
			lColorCode = g_ColorCodeSettingDefinition [i];	
		} else {
			if (m_iLayer == 3) {
				lColorCode = g_ColorCodeSetting3 [i];	
			} else if (m_iLayer >9) {
				lColorCode = g_ColorCodeSetting10to24 [i];	
			} else {
				lColorCode = g_ColorCodeSetting4to9 [i];	
			}
		}
#else
		lColorCode = g_PMCodeColor [i];
#endif
		if (lColorCode == 0) {
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			return RESULT_ERROR_NON_SUPORT_COLOR;
		}
		iRet = PMCodeToQRCode (m_szBaseImage, m_uiBaseImageSize, lColorCode
										, szQRCodeImage, iQRCodeImageSize, m_iSymbolSize);
		if(RESULT_OK != iRet){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			return RESLUT_ERROR_LAYER_RESOLUTION;
		}

		iRet = pQRCodeDecode->SetQRCodeImage (szQRCodeImage, iQRCodeImageSize, m_iVersion);
		if(RESULT_OK != iRet){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			return RESULT_ERROR_SECURE_MEMORY;
		}

		uiDecodeDataSize = pQRCodeDecode->DecodeQRCodeImage ();
		if(0 == uiDecodeDataSize){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			return RESULT_ERROR_ANALYSIS_QR_IMAGE;
		}

		m_iMaskPattern [i] = pQRCodeDecode->GetMaskNumber ();
		iRet = pQRCodeDecode->GetQRCodeStatus (&m_iRSLevel);
		if(RESULT_OK != iRet){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			return RESULT_ERROR_ANALYSIS_QR_STATUS;
		}
		if (szDecodeData != NULL) {
			free (szDecodeData);
			szDecodeData = NULL;
		}
		szDecodeData = (char *)malloc (uiDecodeDataSize + 1);
		memset (szDecodeData, '\0', uiDecodeDataSize + 1);
		iRet = pQRCodeDecode->GetDecodeData (szDecodeData, uiDecodeDataSize);

		if(RESULT_OK != iRet){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			return RESULT_ERROR_ANALYSIS_QR_DECODE;
		}

		iDataSize = uiDecodeDataSize;
		iCorrectPos = 0;
		iRSBlock1 = QR_VersonInfo[m_iVersion].RS_BlockInfo1 [m_iRSLevel].ncRSBlock;
		iRSBlock2 = QR_VersonInfo[m_iVersion].RS_BlockInfo2 [m_iRSLevel].ncRSBlock;

		for (int j = 0; j < (iRSBlock1 + iRSBlock2); j ++) {
			if (QR_VersonInfo[m_iVersion].RS_BlockInfo1 [m_iRSLevel].ncRSBlock > j){
				iBlockSize = QR_VersonInfo[m_iVersion].RS_BlockInfo1 [m_iRSLevel].ncAllCodeWord;
				cReedSolomon.SetCorrectCodeSize (iBlockSize	- QR_VersonInfo[m_iVersion].RS_BlockInfo1 [m_iRSLevel].ncDataCodeWord);
			} else {
				iBlockSize = QR_VersonInfo[m_iVersion].RS_BlockInfo2 [m_iRSLevel].ncAllCodeWord;
				cReedSolomon.SetCorrectCodeSize (iBlockSize - QR_VersonInfo[m_iVersion].RS_BlockInfo2 [m_iRSLevel].ncDataCodeWord);
			}
			memset (szWork, NULL, sizeof (szWork));
			memset (szCorrectBuf, NULL, sizeof (szCorrectBuf));

			if (iDataSize < iBlockSize) {
				memcpy (szWork, &szDecodeData [iCorrectPos], iDataSize);
				bRet = cReedSolomon.Decode (szWork, iBlockSize, szCorrectBuf, &iCorrectDataSize);
				if(bRet != TRUE){
					free (szQRCodeImage);
					szQRCodeImage = NULL;
					delete pQRCodeDecode;
					pQRCodeDecode = NULL;
					free (szDecodeData);
					szDecodeData = NULL;
					return RESULT_ERROR_ANALYSIS_QR_BIG_BLOCK_DECODE;
				}
			} else {
				memcpy (szWork, &szDecodeData [iCorrectPos], iBlockSize);
				bRet = cReedSolomon.Decode (szWork, iBlockSize, szCorrectBuf, &iCorrectDataSize);
				if(bRet != TRUE){
					free (szQRCodeImage);
					szQRCodeImage = NULL;
					delete pQRCodeDecode;
					pQRCodeDecode = NULL;
					free (szDecodeData);
					szDecodeData = NULL;
					return RESULT_ERROR_ANALYSIS_QR_SMALL_BLOCK_DECODE;
				}
			}
			memcpy (&m_szDecodeData [m_uiDecodeDataSize], szCorrectBuf, iCorrectDataSize);
			m_uiDecodeDataSize += iCorrectDataSize;
			iCorrectPos += iBlockSize;
			iDataSize -= iBlockSize;
		}
		if (szDecodeData != NULL) {
			free (szDecodeData);
			szDecodeData = NULL;
		}
	}
	delete pQRCodeDecode;
	pQRCodeDecode = NULL;

	if (szQRCodeImage != NULL) {
		free (szQRCodeImage);
		szQRCodeImage = NULL;
	}
	return m_uiDecodeDataSize;
}