Esempio n. 1
0
/*---------------------------------------------------------------------------*/
Bool LoadLinesSpecInfo (Handle hC, void *vB, Handle Key, int Cnt)
{
	int i;
	uint32_t err32, nTeor, nReal;
	Handle hBlockLineSpec;
	Handle hBlockLinePrev;
	UN_BUFF *pB;
	char *vCurr;
	pB = (UN_BUFF *)vB;
	vCurr = (char *)pB->vCurr;
	nTeor = sizeof (LineInfo);
	for (i=0; i<Cnt; i++)
	{
		/*  ключ к данным  */
		if (i==0)
			hBlockLineSpec = CPAGE_GetBlockFirst (hC, Key);
		else
			hBlockLineSpec = CPAGE_GetBlockNext (hC, hBlockLinePrev, Key);
		err32 = CPAGE_GetReturnCode ();
		if ((err32!=0)||(hBlockLineSpec==NULL))
		{
         #ifdef Almi
			if (i==0)
				AM_Console ("RLTABLE : Ошибка чужой библиотеки - [CPAGE]%s", "[GetBlockFirst]");
			else
				AM_Console ("RLTABLE : Ошибка чужой библиотеки - [CPAGE]%s", "[GetBlockNext]");
         #endif
			return FALSE;
		}
		/*  собственно данные  */
		nReal = CPAGE_GetBlockData (hC, hBlockLineSpec, Key, (void *)vCurr, nTeor);
		err32 = CPAGE_GetReturnCode ();
		if ((nReal!=nTeor)||(err32!=0))
		{
         #ifdef Almi
			AM_Console ("RLTABLE : Ошибка чужой библиотеки - [CPAGE]%s", "[GetBlockData]");
         #endif
			return FALSE;
		}
		hBlockLinePrev = hBlockLineSpec;
		vCurr += nTeor;
	}
	EndLastDataPart (vB, UN_DA_Unknown, UN_DT_LineInfo, nTeor, Cnt);
	return TRUE;
}
Esempio n. 2
0
/*---------------------------------------------------------------------------*/
Bool LoadLinesTotalInfo_rv (Handle hC, void *vB, char *pStr)
{
	uint32_t err32, nTeor, nReal;
	Handle hBlockLine;
	UN_BUFF *pB;
	pB = (UN_BUFF *)vB;
	/*  ключ к данным  */
	hBlockLine = CPAGE_GetBlockFirst (hC, RLINE_BLOCK_TYPE);
	if (!hBlockLine)
	{
		sprintf (pStr, "Линии не выделялись.");
		return RV_EMPTY;
	}
	err32 = CPAGE_GetReturnCode ();
	if (err32!=0)
	{
       #ifdef Almi
		AM_Console ("RLTABLE : Ошибка чужой библиотеки - [CPAGE]%s", "[GetBlockFirst]");
       #endif
		return RV_FALSE;
	}
	/*  собственно данные  */
	nTeor = sizeof (LinesTotalInfo);
	if ((int)nTeor>pB->SizeCurr)
	{
		sprintf (pStr, "Не хватило памяти под 1, инфо-линии!");
		return RV_DOUBT;
	}
	nReal = CPAGE_GetBlockData (hC, hBlockLine, RLINE_BLOCK_TYPE, pB->vCurr, nTeor);
	err32 = CPAGE_GetReturnCode ();
	if ((nReal!=nTeor)||(err32!=0))
	{
      #ifdef Almi
		AM_Console ("RLTABLE : Ошибка чужой библиотеки - [CPAGE]%s", "[GetBlockData]");
      #endif
		return RV_FALSE;
	}
	EndLastDataPart (vB, UN_DA_Unknown, UN_DT_LinesTotalInfo, nTeor, 1);
	return RV_TRUE;
}
Esempio n. 3
0
Bool32 MyGetZher (void **vvZher, int32_t *nZher, int32_t MaxZher, Handle hCPage)
{
	uint32_t err32, nTeor, nReal;
	Handle hBlockZher;
	Handle hBlockPrev;
	int i;
	nTeor = sizeof (void *);
	i=0;
	while (1)
	{
		if (i==0)
			hBlockZher = CPAGE_GetBlockFirst (hCPage, RVERLINE_ZHERTVY_LINIY);
		else
			hBlockZher = CPAGE_GetBlockNext (hCPage, hBlockPrev, RVERLINE_ZHERTVY_LINIY);
		err32 = CPAGE_GetReturnCode ();
		if (err32!=0)
		{
			//if (i==0)
			//	Error_CPage ("[GetBlockFirst]");
			//else
			//	Error_CPage ("[GetBlockNext]");
			return FALSE;
		}
		if (!hBlockZher)
			break;
		if (i>=MaxZher)
			return FALSE;
		nReal = CPAGE_GetBlockData (hCPage, hBlockZher, RVERLINE_ZHERTVY_LINIY, (void *)&(vvZher[i]), nTeor);
		err32 = CPAGE_GetReturnCode ();
		if (!nReal||(err32!=0))
		{
			//Error_CPage ("[SetBlockData]");
			return FALSE;
		}
		hBlockPrev = hBlockZher;
		i++;
	}
	*nZher = i;
	return TRUE;
}
Esempio n. 4
0
void PageMarker::restoreLayout()
{
    image_data_->hCPAGE = CPAGE_RestorePage(TRUE, layout_filename_.c_str());

    if (image_data_->hCPAGE == NULL) {
        Debug() << BOOST_CURRENT_FUNCTION
                << " CPAGE_RestorePage failed with code: "
                << CPAGE_GetReturnCode() << std::endl;

        throw Exception("CPAGE_RestorePage failed");
    }

    CPAGE_SetCurrentPage(CPAGE_GetNumberPage(image_data_->hCPAGE));
    Debug() << "Layout restored from file: \"" << layout_filename_ << "\"\n";
}
Esempio n. 5
0
/*---------------------------------------------------------------------------*/
Bool LoadPicts_rv (Handle hC, void *vB, char *pStr)
{
	int SizeCurr, Deficit, nRc;
	uint32_t err32, nTeor, nReal;
	Bool ret;
	POLY_ Pict;
	Handle hBlockPictSpec;
	Handle hBlockPictPrev;
	UN_BUFF *pB;
	Rect16 *pCurr;
	pB = (UN_BUFF *)vB;
	nRc = 0;
	Deficit = 0;
	pCurr = (Rect16 *)pB->vCurr;
	SizeCurr = pB->SizeCurr;
	nTeor = sizeof (POLY_);
	hBlockPictPrev = NULL;
	while (1)
	{
		/*  ключ к данным  */
		if (hBlockPictPrev==NULL)
			hBlockPictSpec = CPAGE_GetBlockFirst (hC, TYPE_IMAGE);
		else
			hBlockPictSpec = CPAGE_GetBlockNext (hC, hBlockPictPrev, TYPE_IMAGE);
		err32 = CPAGE_GetReturnCode ();
		if (hBlockPictSpec==NULL)
			break;
		if (err32!=0)
		{
			if (hBlockPictPrev==NULL)
				sprintf (pStr, "[GetBlockFirst]");
			else
				sprintf (pStr, "[GetBlockNext]");
			return FALSE;
		}
		/*  собственно данные  */
		nReal = CPAGE_GetBlockData (hC, hBlockPictSpec, TYPE_IMAGE, (void *)(&Pict), nTeor);
		err32 = CPAGE_GetReturnCode ();
		if ((nReal!=nTeor)||(err32!=0))
		{
			sprintf (pStr, "[GetBlockData]");
			return FALSE;
		}
		hBlockPictPrev = hBlockPictSpec;
		if ((int)nTeor > SizeCurr)
		{
			Deficit++;
			continue;
		}
		nRc++;
		ret = MakeRectFromPict (pCurr, (void *)(&Pict));
	#include "am_comm.h"
#ifdef Almi
	#include "ft_rule.h"
		if (!ret)
		{
			if (!AM_Skip (FT_GetKeyOfRule (RU_FT_C_ContWarn)))
				AM_Console ("Не удалось осмыслить картинку!");
			continue;
		}
#endif
		pCurr++;
		SizeCurr -= sizeof (Rect16);
	}
	if (nRc==0)
	{
		sprintf (pStr, "Нет картинок");
		return RV_EMPTY;
	}
	EndLastDataPart (vB, UN_DA_PictReal, UN_DT_Rect16, sizeof (Rect16), nRc);
	if (Deficit > 0)
	{
		sprintf (pStr, "Не хватило памяти под %d %s!", Deficit, "коробки картинок");
		return RV_DOUBT;
	}
	return RV_TRUE;
}
Esempio n. 6
0
Bool32 ModulesInit(Handle  ghStorage)
{
	// CONTEINERS
	if(!CLINE_Init(PUMA_MODULE_CLINE,NULL))
	{
		SetReturnCode_puma(CLINE_GetReturnCode());
		goto lError;
	}
	if(!CFIO_Init(PUMA_MODULE_CFIO,NULL))
	{
		SetReturnCode_puma(CFIO_GetReturnCode());
		goto lError;
	}
	/*
	ghStorage = OpenStorage(szStorage,OS_CREATE);
	if(ghStorage==NULL)
	{
		SetReturnCode_puma(IDS_ERR_CREATESTORAGE);
		goto lError;
	}
	*/
	if(!CIMAGE_Init(PUMA_MODULE_CIMAGE,NULL))
	{
		SetReturnCode_puma(CIMAGE_GetReturnCode());
		goto lError;
	}
	if(!CCOM_Init(PUMA_MODULE_CCOM,NULL))   //  нужна инициализация контейнера CCOM перед
	{               //  вызовом поиска компонент
		SetReturnCode_puma(CCOM_GetReturnCode());
		goto lError;
	}
	if(!CPAGE_Init(PUMA_MODULE_CPAGE,ghStorage))
	{
		SetReturnCode_puma(CPAGE_GetReturnCode());
		goto lError;
	}
	if(!CSTR_Init(PUMA_MODULE_CSTR,ghStorage))
	{
		SetReturnCode_puma(CSTR_GetReturnCode());
		goto lError;
	}
	// RECOGNITIONS
	if(!REXC_Init(PUMA_MODULE_REXC,NULL)) // инициализация библиотеки поиска компонент
	{
		SetReturnCode_puma(REXC_GetReturnCode());
		goto lError;
	}
//	REXC_SetImportData(REXC_OcrPath, GetModulePath());
	if(!RLINE_Init(PUMA_MODULE_RLINE,ghStorage))
	{
		SetReturnCode_puma(RLINE_GetReturnCode());
		goto lError;
	}

    if(!RRECCOM_Init(PUMA_MODULE_RRECCOM,ghStorage))
	{
 		SetReturnCode_puma(RRECCOM_GetReturnCode());
		goto lError;
	}
	RRECCOM_SetImportData(RRECCOM_OcrPath, GetModulePath());

    if(!RSL_Init(PUMA_MODULE_RSL,ghStorage))
	{
 		SetReturnCode_puma(RSL_GetReturnCode());
		goto lError;
	}
	if(!RSTUFF_Init(PUMA_MODULE_RSTUFF,ghStorage))
	{
		SetReturnCode_puma(RSTUFF_GetReturnCode());
		goto lError;
	}
	if(!RMARKER_Init(PUMA_MODULE_RBLOCK,ghStorage))
	{
 		SetReturnCode_puma(RMARKER_GetReturnCode());
		goto lError;
	}
	if(!RBLOCK_Init(PUMA_MODULE_RBLOCK,ghStorage))
	{
		SetReturnCode_puma(RBLOCK_GetReturnCode());
		goto lError;
	}
	if(!RSELSTR_Init(PUMA_MODULE_RBLOCK,ghStorage))
	{
		SetReturnCode_puma(RSELSTR_GetReturnCode());
		goto lError;
	}
    RSTR_SetImportData(RSTR_OcrPath, GetModulePath());
	RSTR_SetImportData(RSTR_pchar_temp_dir, GetModuleTempPath());
	if(!RSTR_Init(PUMA_MODULE_RSTR,ghStorage))
	{
		SetReturnCode_puma(RSTR_GetReturnCode());
		goto lError;
	}

	if(!RFRMT_Init(PUMA_MODULE_RFRMT,ghStorage))
	{
		SetReturnCode_puma(RFRMT_GetReturnCode());
		goto lError;
	}
	if(!RIMAGE_Init(PUMA_MODULE_RIMAGE,ghStorage))
	{
		SetReturnCode_puma(RIMAGE_GetReturnCode());
		goto lError;
	}
	// Инициализируем виртуальные функции
	if(!RPSTR_Init(PUMA_MODULE_RPSTR,ghStorage))
	{
		SetReturnCode_puma(RPSTR_GetReturnCode());
		goto lError;
	}
	if(!RPIC_Init(PUMA_MODULE_RPIC,ghStorage))
	{
		SetReturnCode_puma(RPIC_GetReturnCode());
		goto lError;
	}
	if(!CED_Init(PUMA_MODULE_CED,ghStorage))
	{
		SetReturnCode_puma(CED_GetReturnCode());
		goto lError;
	}
	if(!ROUT_Init(PUMA_MODULE_ROUT,ghStorage))
	{
		SetReturnCode_puma(ROUT_GetReturnCode());
		goto lError;
	}
	else
	{
		if(!ROUT_LoadRec6List("rec6all.dat"))
		{
			SetReturnCode_puma(ROUT_GetReturnCode());
			goto lError;
		}
	}

#ifdef _USE_RVERLINE_
	if(!RVERLINE_Init(PUMA_MODULE_RVERLINE,ghStorage))
	{
		SetReturnCode_puma(RVERLINE_GetReturnCode());
		goto lError;
	}
#endif //_USE_RVERLINE_

#ifdef _USE_RMSEGMENT_
	if(!RMSEGMENT_Init(PUMA_MODULE_RMSEGMENT,ghStorage))
	{
		SetReturnCode_puma(RMSEGMENT_GetReturnCode());
		goto lError;
	}
#endif //_USE_RMSEGMENT_

	if(!RCORRKEGL_Init(PUMA_MODULE_RCORRKEGL,ghStorage))
	{
		goto lError;
	}
//#ifdef _DEBUG

	My_SJTL_Init();
	if( !LDPUMA_Skip(hDebugEnableSaveJtl) )
	{
		My_SJTL_open("one.frm", "one.jtl");
	}
/* FIXME: could not figure out what to do with this in Linux, so disabled it.
	_CrtMemCheckpoint( &g_dbgMemState );
*/
//#endif
return TRUE;
lError:
		ModulesDone(ghStorage);
return FALSE;
}
Esempio n. 7
0
/*---------------------------------------------------------------------------*/
Bool MyReSetLines (void *vLti, int MaxNumLin, Handle hCPage, Handle HoriType
				   , Handle VertType, char *pStr)
{
	int i;
	uint32_t err32, nTeor;//, nReal;
	Bool32 nReal;//differ
	Handle hBlockLine;
	Handle hBlockLineHor;
	Handle hBlockLineVer;
	Handle hBlockLinePrev;
	void *Hor, *Ver;
	LinesTotalInfo *pLti;
	pLti = (LinesTotalInfo *)vLti;
	/***  Общая информация о линиях  ***/
	Hor = pLti->Hor.Lns;
	Ver = pLti->Ver.Lns;
	pLti->Hor.Lns = (LineInfo *)HoriType;
	pLti->Ver.Lns = (LineInfo *)VertType;
	hBlockLine = CPAGE_GetBlockFirst (hCPage, RLINE_BLOCK_TYPE);
	err32 = CPAGE_GetReturnCode ();
	if (err32!=0)
	{
		sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CPAGE][GetBlockFirst]");
		return FALSE;
	}
	nTeor = sizeof (LinesTotalInfo);
	nReal = CPAGE_SetBlockData (hCPage, hBlockLine, RLINE_BLOCK_TYPE, (void *)pLti, nTeor);
	err32 = CPAGE_GetReturnCode ();
//	if ((nReal!=nTeor)||(err32!=0))
	if (!nReal||(err32!=0))
	{
		sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CPAGE][SetBlockData]");
		return FALSE;
	}
	pLti->Hor.Lns = (LineInfo *)Hor;
	pLti->Ver.Lns = (LineInfo *)Ver;
	/***  Горизонтальные линии  ***/
	for (i=0; i<pLti->Hor.Cnt; i++)
	{
		if (i==0)
			hBlockLineHor = CPAGE_GetBlockFirst (hCPage, HoriType);
		else
			hBlockLineHor = CPAGE_GetBlockNext (hCPage, hBlockLinePrev, HoriType);
		err32 = CPAGE_GetReturnCode ();
		if (err32!=0)
		{
			if (i==0)
				sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CPAGE][GetBlockFirst]");
			else
				sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CPAGE][GetBlockNext]");
			return FALSE;
		}
		nTeor = sizeof (LineInfo);
		nReal = CPAGE_SetBlockData (hCPage, hBlockLineHor, HoriType, (void *)&(pLti->Hor.Lns[i]), nTeor);
		err32 = CPAGE_GetReturnCode ();
//		if ((nReal!=nTeor)||(err32!=0))
		if (!nReal||(err32!=0))
		{
			sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CPAGE][SetBlockData]");
			return FALSE;
		}
		hBlockLinePrev = hBlockLineHor;
	}
	/***  Вертикальные линии  ***/
	for (i=0; i<pLti->Ver.Cnt; i++)
	{
		if (i==0)
			hBlockLineVer = CPAGE_GetBlockFirst (hCPage, VertType);
		else
			hBlockLineVer = CPAGE_GetBlockNext (hCPage, hBlockLinePrev, VertType);
		err32 = CPAGE_GetReturnCode ();
		if (err32!=0)
		{
			if (i==0)
				sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CPAGE][GetBlockFirst]");
			else
				sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CPAGE][GetBlockNext]");
			return FALSE;
		}
		nTeor = sizeof (LineInfo);
		nReal = CPAGE_SetBlockData (hCPage, hBlockLineVer, VertType, (void *)&(pLti->Ver.Lns[i]), nTeor);
		err32 = CPAGE_GetReturnCode ();
//		if ((nReal!=nTeor)||(err32!=0))
		if (!nReal||(err32!=0))
		{
			sprintf (pStr, "RLTABLE : Ошибка чужой библиотеки - [CPAGE][SetBlockData]");
			return FALSE;
		}
		hBlockLinePrev = hBlockLineVer;
	}
	return TRUE;
}
Esempio n. 8
0
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
//Bool32 AboutLines(PRSPreProcessImage Image, Bool32 *BadScan, int32_t *ScanQual)
//{
//	return TRUE;
//}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
Bool32 CalcIncline(PRSPreProcessImage Image)
{
	int SizeWork,SizeMain;
	char Str[256];
	Bool ret, WasLine, ManyComp;
	Bool CalcMuchSkew, TalkMuchSkew;
	uint16_t Code;
	int32_t SkewReg, Skew, SkewLocVerLin;
	Rect16 RcReg;
    PAGEINFO info = {0};
	UN_BUFF MainBuff = {0};
	void *vMain;
	char *cWork;
	Handle hCPage=Image->hCPAGE;
	CLINE_handle hCLINE=*((CLINE_handle*)Image->phCLINE);

	GetPageInfo(hCPage,&info);

	/*  2. Инициализация.  */
		/***  переменные  ***/
    WasLine = 0;
		/***  организация памяти  ***/
	GiveMainBuff (&vMain, &SizeMain);
	MainBuff.vBuff    = vMain;
	MainBuff.SizeBuff = SizeMain;
	MainBuff.vCurr    = MainBuff.vBuff;
	MainBuff.SizeCurr = MainBuff.SizeBuff;
	GiveWorkBuff (&cWork, &SizeWork);
		/***  линии  ***/
//	if(!LDPUMA_Skip(hUseCLine))
		ret=LoadLinesVP_rv(hCLINE,UN_LD_LinesVP2,&MainBuff,Str,&Code);
//	else
//	    ret = LoadLinesVP_rv (hCPage, UN_LD_LinesVP, (void *)(&MainBuff), Str, &Code);
	if ((ret!=RV_TRUE)&&(ret!=RV_EMPTY))
	{
		SetReturnCode_rstuff (Code);
		return ret;
	}
	WasLine = (ret==RV_TRUE);
		/***  компоненты  ***/
	ret = LoadComps_rv (*(Image->phCCOM), (void *)(&MainBuff), Str, 0); //t-e-d
	if (ret==RV_DOUBT)
	{
		SetReturnCode_rstuff (Code);
		CleanLastDataPart ((void *)(&MainBuff));
	}
	ManyComp = (ret==RV_TRUE)&&(MainBuff.nPartUnits[MainBuff.nPart-1]>10000);
	if (ManyComp)
	{
		CleanLastDataPart ((void *)(&MainBuff));
	}
	if (ret==RV_DOUBT||ManyComp)
	{
			ret = LoadComps_rv (*(Image->phCCOM), (void *)(&MainBuff), Str, 3); //t-e-d
			if (ret==RV_DOUBT)
			{
				SetReturnCode_rstuff (Code);
				CleanLastDataPart ((void *)(&MainBuff));
			}
	}
	if (ret!=RV_TRUE)
	{
		return ret;
	}

	RcReg.left=0;
	RcReg.right=(int16_t)info.Width;
	RcReg.top=0;
    RcReg.bottom=(int16_t)info.Height;
	SkewReg=0;
	Bool ContWarn = 0;
	SkewLocVerLin = 0;
	CalcMuchSkew = (!LDPUMA_Skip(hCalcMuchSkew));
	TalkMuchSkew = (!LDPUMA_Skip(hTalkMuchSkew));

//  5.1 Определяем угол наклона страницы (ее заполнения в целом).
//	if(!LDPUMA_Skip(hUseCLine))
		ret=ConvertLinesToAM_rv (UN_LD_LinesVP2, UN_LD_LinesAM, (void *)(&MainBuff)
			,(int *)cWork, SizeWork / sizeof (int), &RcReg, SkewReg, Str, ContWarn);
//	else
//		ret = ConvertLinesToAM_rv (UN_LD_LinesVP, UN_LD_LinesAM, (void *)(&MainBuff)
//			,(int *)cWork, SizeWork / sizeof (int), &RcReg, SkewReg, Str, ContWarn); // f-t-e-d
	if (ret==RV_DOUBT)
	{
			SetReturnCode_rstuff (Code);
	}
	if (ret!=RV_TRUE)
		return ret;

	SMetric_SetImportData(SMetric_ResolX, (void *)info.DPIX);
	SMetric_SetImportData(SMetric_ResolY, (void *)info.DPIY);
	ret = SMetric_FindMainSkew ((void *)(&MainBuff), cWork, SizeWork, &Skew
			, &SkewLocVerLin, &RcReg, SkewReg, Str, CalcMuchSkew, TalkMuchSkew);
	if (ret!=RV_TRUE)
		return ret;
	info.Incline2048 = Skew*2;
	info.SkewLocVerLin2048 = SkewLocVerLin*2;
	if(!CPAGE_SetPageData(Image->hCPAGE,PT_PAGEINFO,&info,sizeof(PAGEINFO)))
	{
		SetReturnCode_rstuff(CPAGE_GetReturnCode());
		return FALSE;
	}

	return TRUE;
}