Пример #1
0
Bool32 FillPicsInTables(Handle hCCOM, Handle hCPAGE)
{
	POLY_	block;
	Handle h = NULL;

	CCOM_comp * comp;

	for(h = CPAGE_GetBlockFirst(hCPAGE,POSSIBLE_PICTURES);
	h!=NULL;
	h = CPAGE_GetBlockNext(hCPAGE,h,POSSIBLE_PICTURES))
	{
		CPAGE_GetBlockData(hCPAGE,h,POSSIBLE_PICTURES, &block, sizeof(block));
		CPAGE_DeleteBlock(hCPAGE, h);

		if (nPics % PICS_QUANTUM == 0)
		{
			pPics = (CCOM_comp *) realloc (pPics,
				(size_t) ((nPics / PICS_QUANTUM + 1)* PICS_QUANTUM * sizeof (CCOM_comp)));
		}


		comp = &pPics[nPics++];
		comp->upper = block.com.Vertex[0].y;
		comp->left  = block.com.Vertex[0].x;
		comp->w     = block.com.Vertex[1].x - block.com.Vertex[0].x;
		comp->h     = block.com.Vertex[2].y - block.com.Vertex[1].y;
	}

	return TRUE;
}
Пример #2
0
Bool32 SearchNewLines( PRSPreProcessImage Image )
{
    Bool32 ret = TRUE;
    bool searchlines = LDPUMA_Skip(Image->hDebugCancelSearchDotLines) && !LDPUMA_Skip(hDotLine);
    Handle hSaveImage = CPAGE_CreateBlock(Image->hCPAGE, RSL_VERLINE, 0, 0, Image, sizeof (RSPreProcessImage));

    if(LDPUMA_Skip(Image->hDebugCancelVerifyLines))
    {
        ret=RLINE_LinesPass1(Image->hCPAGE,*(Image->phCCOM),Image->phCLINE,Image->pgneed_clean_line, searchlines, (uchar)Image->gnLanguage);

        if (ret && !gbRSLT)
            ret = RLINE_LinesPass2(*(Image->phCCOM),Image->phCLINE, Image->hCPAGE);
    }

    CPAGE_DeleteBlock(Image->hCPAGE, hSaveImage);

    return ret;
}
Пример #3
0
//###########################################
// Если блоки конвертируемы один в другой, тогда имеет смысл оставить только один,
// наиболее полный тип. Именно это и делает эта функция.
//
CPAGE_FUNC(Bool32)  CPAGE_UpdateBlocks( Handle hPage, Handle type )
{
	PROLOG;
	Bool32  rc = TRUE;
	uint32_t	size = 0;
	char *	lpData = NULL;
	Handle  temporaray = 0;

	SetReturnCode_cpage(IDS_ERR_NO);
#ifdef _DEBUG
	_ASSERT(CPAGE_GetNameInternalType(type));
#endif

	SetReturnCode_cpage(IDS_ERR_NO);

	Handle hBlock = CPAGE_GetBlockFirst(hPage,type);
	if(!hBlock)
	{
		rc = TRUE;
		goto lOut;
	}
	// Создадим временные блоки и удалим старые.
	// Тем самым предотвращаем зацикливание.
	temporaray = CPAGE_GetInternalType("temporary");
	while(hBlock)
	{
		Handle hNextBlock = CPAGE_GetBlockNext(hPage,hBlock,type);// type - запрашиваемый тип блока
		Handle dwType	  = CPAGE_GetBlockType(hPage,hBlock); // dwType - Реальный тип блока
		if(dwType != type) // Была произведена конвертация из типа dwType !
		{
			uint32_t UserNum = CPAGE_GetBlockUserNum(hPage,hBlock);
			uint32_t Flags   = CPAGE_GetBlockFlags(hPage,hBlock);
			if(lpData == NULL)
			{ // Определим необходимый размер и отведем память.
				size = CPAGE_GetBlockData(hPage,hBlock,type,NULL,0);
				if(size)
				{
					lpData = (char *)myAlloc(size);
					if(!lpData)
					{
						rc = FALSE;
						SetReturnCode_cpage(IDS_ERR_NO_MEMORY);
						break;
					}
				}
				else
				{
					SetReturnCode_cpage(IDS_ERR_DISCREP);
					rc = FALSE;
					break;
				}
			}
			if(CPAGE_GetBlockData(hPage,hBlock,type,lpData,size)==size)
			{
				CPAGE_DeleteBlock(hPage,hBlock);
				if(!CPAGE_CreateBlock(hPage,temporaray, UserNum , Flags, lpData, size))
				{
					SetReturnCode_cpage(IDS_ERR_NO_MEMORY);
					rc = FALSE;
					break;
				}
			}
		}
		hBlock = hNextBlock;
	}
	// Переименуем временные блоки
	if(lpData) // Проверка на существование таких блоков
	{
		myFree(lpData);
		for(hBlock = CPAGE_GetBlockFirst(hPage,temporaray);
			hBlock;
			hBlock = CPAGE_GetBlockNext(hPage,hBlock,temporaray))
		{
			BLOCK_H_H(hPage,hBlock).SetType(type);
		}
	}
lOut:EPILOG;
return rc;
}