2025-04-27 07:49:33 -04:00

69 lines
1.9 KiB
C

#include "recogp.h"
#include "recog.h"
// converts from new results buffer to the old results buffer,
// we are assuming that the caller has allocated the buffer to big enough for the
// bigger buffer (the older in this case)
void ConvertToOldResults (int cAlt, int cBoxRes, PVOID pData)
{
int ii, jj;
int cFromBytes, cToBytes;
int cFromSize, cToSize;
HWXRESULTS *pFrom;
BOXRESULTS *pTo;
// point to the last structure in each buffers
cFromSize = sizeof(HWXRESULTS) + (cAlt - 1) * sizeof (WCHAR);
cToSize = sizeof(BOXRESULTS) + (cAlt - 1) * sizeof (SYV);
cFromBytes = (cBoxRes - 1) * cFromSize;
cToBytes = (cBoxRes - 1) * cToSize;
for (ii = cBoxRes - 1; ii >=0 ; ii--, cFromBytes -= cFromSize, cToBytes -= cToSize) {
pFrom = (HWXRESULTS *)((BYTE *)pData + cFromBytes);
pTo = (BOXRESULTS *)((BYTE *)pData + cToBytes);
for (jj = cAlt - 1; jj >=0 ; jj--) {
// No result
if (pFrom->rgChar[jj] == L'\0')
pTo->rgSyv[jj] = SYV_NULL;
else
pTo->rgSyv[jj] = ((DWORD)pFrom->rgChar[jj] | ((DWORD) SYVHI_UNICODE << 16));
}
pTo->hinksetBox = 0;
pTo->indxBox = pFrom->indxBox;
}
}
// converts from old results to new results
// have to provide both buffers because Dest is smaller than Src
void ConvertToNewResults (int cAlt, int cBoxRes, HWXRESULTS *pTo, BOXRESULTS *pFrom)
{
int ii, jj;
int cFromSize, cToSize;
// point to the last structure in each buffers
cFromSize = sizeof(BOXRESULTS) + (cAlt - 1) * sizeof (SYV);
cToSize = sizeof(HWXRESULTS) + (cAlt - 1) * sizeof (WCHAR);
for (ii = 0; ii < cBoxRes ; ii++) {
for (jj = 0; jj < cAlt ; jj++) {
// No result
if (pFrom->rgSyv[jj] == SYV_NULL)
pTo->rgChar[jj] = L'\0';
else
pTo->rgChar[jj] = (WORD) (pFrom->rgSyv[jj] & 0xFFFF);
}
pTo->indxBox = (USHORT)pFrom->indxBox;
pFrom = (BOXRESULTS *)((BYTE *)pFrom + cFromSize);
pTo = (HWXRESULTS *)((BYTE *)pTo + cToSize);
}
}