84
80
extern P2GLOBALS p2globals;
86
82
#include "ligas.h" // 01.06.2001 E.P.
89
Bool32 p2_StoreVersions(CSTR_rast rast,RecVersions *rver)
92
UniVersions cver,*ver;
94
INT lang=p2globals.language;
96
if( lang==LANG_ENGLISH && p2globals.multy_language )
99
if(!rast) return FALSE;
101
memset(ver,0,sizeof(UniVersions));
102
ver->lnAltCnt = MIN(REC_MAX_VERS,rver->lnAltCnt);
103
ver->lnAltMax = REC_MAX_VERS;
105
for(i=0;i<ver->lnAltCnt;i++)
107
let = rver->Alt[i].Code;
108
//strcpy(ver->Alt[i].Code , decode_ASCII_to_[let]);
109
RSTR_p2_DecodeCode(ver->Alt[i].Code,let);
110
ver->Alt[i].Liga = let;
111
ver->Alt[i].Prob = rver->Alt[i].Prob;
112
ver->Alt[i].Method = rver->Alt[i].Method;
113
//ver->Alt[i].Charset = CodePages[lang]; // Oleg
114
ver->Alt[i].Charset = RSTR_p2_GetCodePage(lang);
115
ver->Alt[i].Info = rver->Alt[i].Info;
118
return CSTR_StoreCollectionUni(rast,ver);
84
Bool32 p2_StoreVersions(CSTR_rast rast, RecVersions *rver) {
86
UniVersions cver, *ver;
88
int16_t lang = p2globals.language;
90
if (lang == LANG_ENGLISH && p2globals.multy_language)
96
memset(ver, 0, sizeof(UniVersions));
97
ver->lnAltCnt = MIN(REC_MAX_VERS, rver->lnAltCnt);
98
ver->lnAltMax = REC_MAX_VERS;
100
for (i = 0; i < ver->lnAltCnt; i++) {
101
let = rver->Alt[i].Code;
102
//strcpy(ver->Alt[i].Code , decode_ASCII_to_[let]);
103
RSTR_p2_DecodeCode(ver->Alt[i].Code, let);
104
ver->Alt[i].Liga = let;
105
ver->Alt[i].Prob = rver->Alt[i].Prob;
106
ver->Alt[i].Method = rver->Alt[i].Method;
107
//ver->Alt[i].Charset = CodePages[lang]; // Oleg
108
ver->Alt[i].Charset = RSTR_p2_GetCodePage(lang);
109
ver->Alt[i].Info = rver->Alt[i].Info;
112
return CSTR_StoreCollectionUni(rast, ver);
120
114
/////////////////
122
static void StoreOneInterval( Word8 *raster, int b, int e)
125
Word8 mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
130
raster[ i>>3 ] |= mask[ i&7 ];
116
static void StoreOneInterval(uchar *raster, int b, int e) {
118
uchar mask[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
122
for (i = b; i < e; i++) {
123
raster[i >> 3] |= mask[i & 7];
136
static Bool32 Lines2Raster(CCOM_lnhead *linerep, Int16 size,
142
CCOM_interval * inter;
144
if( !w || !h || w > rec->lnPixWidth || h > rec->lnPixHeight )
147
ww = REC_GW_WORD8(rec->lnPixWidth);
149
for(line=linerep,len=0; len<size && line->lth; len+=line->lth,line=(CCOM_lnhead *)((intptr_t)line+line->lth))
151
Word8 *buf=&rec->Raster[ line->row*ww ];
152
for(inter = (CCOM_interval*)(line+1), i=0; i<line->h; i++, inter++,buf+=ww)
153
StoreOneInterval( buf, inter->e-inter->l, MIN(w,inter->e));
129
static Bool32 Lines2Raster(CCOM_lnhead *linerep, int16_t size, int16_t w,
130
int16_t h, RecRaster *rec) {
133
CCOM_interval * inter;
135
if (!w || !h || w > rec->lnPixWidth || h > rec->lnPixHeight)
138
ww = REC_GW_WORD8(rec->lnPixWidth);
140
for (line = linerep, len = 0; len < size && line->lth; len += line->lth, line
141
= (CCOM_lnhead *) ((intptr_t) line + line->lth)) {
142
uchar *buf = &rec->Raster[line->row * ww];
143
for (inter = (CCOM_interval*) (line + 1), i = 0; i < line->h; i++, inter++, buf
145
StoreOneInterval(buf, inter->e - inter->l, MIN(w, inter->e));
159
151
// �������� �����, �������� ������, �� �������� ����������
161
153
// Bool32 p2_Line2Raster(c_comp *comp, RecRaster *rec)
162
// lp = (Word8 *)(comp+1);
154
// lp = (uchar *)(comp+1);
155
// lt = *(int16_t*)lp;
166
P2_FUNC(Bool32) p2_Comp2Raster(Int16 lt,Word8 *lp,Int16 w,Int16 h,
158
P2_FUNC(Bool32) p2_Comp2Raster(int16_t lt,uchar *lp,int16_t w,int16_t h,
174
// if( !comp || !rec )
178
rec->lnPixHeight = h;
179
rec->lnRasterBufSize=REC_MAX_RASTER_SIZE;
183
// rec->lnPixWidth >>= comp->scale;
184
// rec->lnPixHeight >>= comp->scale;
187
if( rec->lnPixWidth <= 0 ||
188
rec->lnPixHeight <= 0 )
191
memset( rec->Raster, 0 , REC_GW_WORD8(rec->lnPixWidth)*rec->lnPixHeight);
193
// lp = (Word8 *)(comp+1);
196
w=(Int16)rec->lnPixWidth;
197
h=(Int16)rec->lnPixHeight;
199
// do { // comps cycle - in CCOM_GetRaster if numcomp>1
200
// if( (*lt) <= 2 ) break;
201
ret = Lines2Raster((CCOM_lnhead*)&lp[2],(Int16)(lt-2), w, h ,rec);
166
// if( !comp || !rec )
170
rec->lnPixHeight = h;
171
rec->lnRasterBufSize=REC_MAX_RASTER_SIZE;
175
// rec->lnPixWidth >>= comp->scale;
176
// rec->lnPixHeight >>= comp->scale;
179
if( rec->lnPixWidth <= 0 ||
180
rec->lnPixHeight <= 0 )
183
memset( rec->Raster, 0 , REC_GW_WORD8(rec->lnPixWidth)*rec->lnPixHeight);
185
// lp = (uchar *)(comp+1);
186
// lt = *(int16_t*)lp;
188
w=(int16_t)rec->lnPixWidth;
189
h=(int16_t)rec->lnPixHeight;
191
// do { // comps cycle - in CCOM_GetRaster if numcomp>1
192
// if( (*lt) <= 2 ) break;
193
ret = Lines2Raster((CCOM_lnhead*)&lp[2],(int16_t)(lt-2), w, h ,rec);
195
// lt = (int16_t*)lp;
210
static int fir1[256]=
211
{8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,
212
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
213
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
214
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
215
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
216
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
217
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
218
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
219
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
220
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
221
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
222
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
223
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
224
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
225
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
226
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
202
static int fir1[256] = { 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3,
203
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
204
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
205
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
206
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
207
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
208
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
209
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
210
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
211
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
212
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
228
static int las1[256]=
229
{8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
230
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
231
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
232
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
233
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
234
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
235
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
236
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
214
static int las1[256] = { 8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0,
215
1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0,
216
1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0,
217
1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0,
218
1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0,
219
1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
238
7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
239
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
240
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
241
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
242
6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
243
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
244
5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
245
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0} ;
221
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0,
222
3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
223
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0,
224
3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
225
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0,
226
3, 0, 1, 0, 2, 0, 1, 0 };
247
228
//////////////////////
248
229
///////////////////////////////////
249
static void MoveWindowRow0(BYTE *outrow,BYTE *inrow,int SizeByte,int fir)
251
memcpy(outrow,inrow,SizeByte);
230
static void MoveWindowRow0(uchar *outrow, uchar *inrow, int SizeByte, int fir) {
231
memcpy(outrow, inrow, SizeByte);
254
static void MoveWindowRow2(BYTE *outrow,BYTE *inrow,int SizeByte,int fir)
260
for(i=0;i<SizeByte;i++)
261
outrow[i]=(inrow[i]<<1)|(inrow[i+1]>>7);
264
for(i=0;i<SizeByte;i++)
265
outrow[i]=(inrow[i]<<2)|(inrow[i+1]>>6);
268
for(i=0;i<SizeByte;i++)
269
outrow[i]=(inrow[i]<<3)|(inrow[i+1]>>5);
272
for(i=0;i<SizeByte;i++)
273
outrow[i]=(inrow[i]<<4)|(inrow[i+1]>>4);
276
for(i=0;i<SizeByte;i++)
277
outrow[i]=(inrow[i]<<5)|(inrow[i+1]>>3);
280
for(i=0;i<SizeByte;i++)
281
outrow[i]=(inrow[i]<<6)|(inrow[i+1]>>2);
284
for(i=0;i<SizeByte;i++)
285
outrow[i]=(inrow[i]<<7)|(inrow[i+1]>>1);
290
// outrow[SizeByte-1] |= (BYTE)tiffWindow.maska;
293
void MoveWindowRow1(BYTE *outrow,BYTE *inrow,int SizeByte,int fir)
300
for(i=0;i<SizeByte;i++)
301
outrow[i]=(inrow[i]<<1)|(inrow[i+1]>>7);
302
outrow[SizeByte]=inrow[SizeByte]<<1;
305
for(i=0;i<SizeByte;i++)
306
outrow[i]=(inrow[i]<<2)|(inrow[i+1]>>6);
307
outrow[SizeByte]=inrow[SizeByte]<<2;
310
for(i=0;i<SizeByte;i++)
311
outrow[i]=(inrow[i]<<3)|(inrow[i+1]>>5);
312
outrow[SizeByte]=inrow[SizeByte]<<3;
315
for(i=0;i<SizeByte;i++)
316
outrow[i]=(inrow[i]<<4)|(inrow[i+1]>>4);
317
outrow[SizeByte]=inrow[SizeByte]<<4;
320
for(i=0;i<SizeByte;i++)
321
outrow[i]=(inrow[i]<<5)|(inrow[i+1]>>3);
322
outrow[SizeByte]=inrow[SizeByte]<<5;
325
for(i=0;i<SizeByte;i++)
326
outrow[i]=(inrow[i]<<6)|(inrow[i+1]>>2);
327
outrow[SizeByte]=inrow[SizeByte]<<6;
330
for(i=0;i<SizeByte;i++)
331
outrow[i]=(inrow[i]<<7)|(inrow[i+1]>>1);
332
outrow[SizeByte]=inrow[SizeByte]<<7;
337
// outrow[SizeByte] |= (BYTE)tiffWindow.maska;
340
static void (*MoveWindowRow)(BYTE *orow,BYTE *irow,int SizeByte,int fir);
341
static Word8 tmpRaster[REC_MAX_RASTER_SIZE];
234
static void MoveWindowRow2(uchar *outrow, uchar *inrow, int SizeByte, int fir) {
238
for (i = 0; i < SizeByte; i++)
239
outrow[i] = (inrow[i] << 1) | (inrow[i + 1] >> 7);
242
for (i = 0; i < SizeByte; i++)
243
outrow[i] = (inrow[i] << 2) | (inrow[i + 1] >> 6);
246
for (i = 0; i < SizeByte; i++)
247
outrow[i] = (inrow[i] << 3) | (inrow[i + 1] >> 5);
250
for (i = 0; i < SizeByte; i++)
251
outrow[i] = (inrow[i] << 4) | (inrow[i + 1] >> 4);
254
for (i = 0; i < SizeByte; i++)
255
outrow[i] = (inrow[i] << 5) | (inrow[i + 1] >> 3);
258
for (i = 0; i < SizeByte; i++)
259
outrow[i] = (inrow[i] << 6) | (inrow[i + 1] >> 2);
262
for (i = 0; i < SizeByte; i++)
263
outrow[i] = (inrow[i] << 7) | (inrow[i + 1] >> 1);
269
// outrow[SizeByte-1] |= (uchar)tiffWindow.maska;
272
void MoveWindowRow1(uchar *outrow, uchar *inrow, int SizeByte, int fir) {
277
for (i = 0; i < SizeByte; i++)
278
outrow[i] = (inrow[i] << 1) | (inrow[i + 1] >> 7);
279
outrow[SizeByte] = inrow[SizeByte] << 1;
282
for (i = 0; i < SizeByte; i++)
283
outrow[i] = (inrow[i] << 2) | (inrow[i + 1] >> 6);
284
outrow[SizeByte] = inrow[SizeByte] << 2;
287
for (i = 0; i < SizeByte; i++)
288
outrow[i] = (inrow[i] << 3) | (inrow[i + 1] >> 5);
289
outrow[SizeByte] = inrow[SizeByte] << 3;
292
for (i = 0; i < SizeByte; i++)
293
outrow[i] = (inrow[i] << 4) | (inrow[i + 1] >> 4);
294
outrow[SizeByte] = inrow[SizeByte] << 4;
297
for (i = 0; i < SizeByte; i++)
298
outrow[i] = (inrow[i] << 5) | (inrow[i + 1] >> 3);
299
outrow[SizeByte] = inrow[SizeByte] << 5;
302
for (i = 0; i < SizeByte; i++)
303
outrow[i] = (inrow[i] << 6) | (inrow[i + 1] >> 2);
304
outrow[SizeByte] = inrow[SizeByte] << 6;
307
for (i = 0; i < SizeByte; i++)
308
outrow[i] = (inrow[i] << 7) | (inrow[i + 1] >> 1);
309
outrow[SizeByte] = inrow[SizeByte] << 7;
315
// outrow[SizeByte] |= (uchar)tiffWindow.maska;
318
static void (*MoveWindowRow)(uchar *orow, uchar *irow, int SizeByte, int fir);
319
static uchar tmpRaster[REC_MAX_RASTER_SIZE];
342
320
/////////////////
343
int p2_rotateRecRaster(RecRaster *rec,int ninc)
345
int xbyte8 = REC_GW_WORD8(rec->lnPixWidth);
346
int xbyte = (rec->lnPixWidth+7)>>3;
347
int yrow = rec->lnPixHeight;
353
int max_shift,outXbit,outXbyte;
358
//rec->lnPixWidth=erect_raster_value(tmpRaster,(INT)rec->lnPixWidth,(INT)yrow,(INT)ninc);
360
max_shift=((long)(yrow-1)*ninc)/2048;
362
max_shift = -max_shift;
368
outXbit = rec->lnPixWidth + max_shift;
369
outXbyte=(outXbit+7)>>3;
371
memset (tmpRaster, 0, outXbyte*yrow);
377
for (tmpRas=tmpRaster,tmpBuf=rec->Raster,i=0; i < yrow ;
378
i++, tmpRas+=outXbyte, tmpBuf+=xbyte8 )
381
c=((long)(i+1-yrow)*ninc)/2048;
383
c=max_shift- (((long)(yrow-1-i)*ninc)/2048);
385
rr = tmpRas + (c>>3) ;
389
rr[0]=(tmpBuf[0]>>s1); // first
390
for( j=1; j<xbyte; j++)
391
rr[j] = (tmpBuf[j-1]<<s2) | (tmpBuf[j]>>s1);
393
if( outXbyte > xbyte )
394
rr[j]=tmpBuf[j-1]<<s2;
399
// rec->lnPixWidth=erect_raster_value(tmpRaster,(INT)rec->lnPixWidth,(INT)yrow,(INT)ninc);
401
// ����� ��������� ������� !
402
for(i=0,firCol=outXbit;i<outXbyte;i++)
405
for(j=0;j<yrow;j++,tmpBuf+=outXbyte)
408
k=(i<<3)+fir1[*tmpBuf];
412
if(firCol < outXbit ) break;
415
for(i=outXbyte-1,lasCol=0;i>=0;i--)
418
for(j=0;j<yrow;j++,tmpBuf+=outXbyte)
421
k=(i<<3)+8-las1[*tmpBuf];
425
if(lasCol > 0) break;
428
// ����� �������� ���������� ���� ?
429
if( firCol >= lasCol )
432
rec->lnPixWidth = lasCol-firCol;
433
outByte=(rec->lnPixWidth+7)>>3;
434
xbyte8 = REC_GW_WORD8(rec->lnPixWidth);
436
tmpBuf=tmpRaster+(firCol>>3);
438
memset(tmpRas,0,xbyte8*yrow);
441
if( (firCol&7) == 0) MoveWindowRow=MoveWindowRow0;
442
else if( ((lasCol-1)&7) >= ((lasCol-1-firCol)&7) )
443
MoveWindowRow=MoveWindowRow1;
444
else MoveWindowRow=MoveWindowRow2;
447
for (i =0; i < yrow; i++, tmpBuf+=outXbyte,tmpRas+=xbyte8)
448
MoveWindowRow(tmpRas,tmpBuf,outByte,firCol);
321
int p2_rotateRecRaster(RecRaster *rec, int ninc) {
322
int xbyte8 = REC_GW_WORD8(rec->lnPixWidth);
323
int xbyte = (rec->lnPixWidth + 7) >> 3;
324
int yrow = rec->lnPixHeight;
330
int max_shift, outXbit, outXbyte;
335
//rec->lnPixWidth=erect_raster_value(tmpRaster,(int16_t)rec->lnPixWidth,(int16_t)yrow,(int16_t)ninc);
337
max_shift = ((long) (yrow - 1) * ninc) / 2048;
339
max_shift = -max_shift;
344
outXbit = rec->lnPixWidth + max_shift;
345
outXbyte = (outXbit + 7) >> 3;
347
memset(tmpRaster, 0, outXbyte * yrow);
353
for (tmpRas = tmpRaster, tmpBuf = rec->Raster, i = 0; i < yrow; i++, tmpRas
354
+= outXbyte, tmpBuf += xbyte8) {
356
c = ((long) (i + 1 - yrow) * ninc) / 2048;
358
c = max_shift - (((long) (yrow - 1 - i) * ninc) / 2048);
360
rr = tmpRas + (c >> 3);
364
rr[0] = (tmpBuf[0] >> s1); // first
365
for (j = 1; j < xbyte; j++)
366
rr[j] = (tmpBuf[j - 1] << s2) | (tmpBuf[j] >> s1);
368
if (outXbyte > xbyte)
369
rr[j] = tmpBuf[j - 1] << s2;
374
// rec->lnPixWidth=erect_raster_value(tmpRaster,(int16_t)rec->lnPixWidth,(int16_t)yrow,(int16_t)ninc);
376
// ����� ��������� ������� !
377
for (i = 0, firCol = outXbit; i < outXbyte; i++) {
378
tmpBuf = tmpRaster + i;
379
for (j = 0; j < yrow; j++, tmpBuf += outXbyte)
381
k = (i << 3) + fir1[*tmpBuf];
385
if (firCol < outXbit)
389
for (i = outXbyte - 1, lasCol = 0; i >= 0; i--) {
390
tmpBuf = tmpRaster + i;
391
for (j = 0; j < yrow; j++, tmpBuf += outXbyte)
393
k = (i << 3) + 8 - las1[*tmpBuf];
401
// ����� �������� ���������� ���� ?
402
if (firCol >= lasCol)
405
rec->lnPixWidth = lasCol - firCol;
406
outByte = (rec->lnPixWidth + 7) >> 3;
407
xbyte8 = REC_GW_WORD8(rec->lnPixWidth);
409
tmpBuf = tmpRaster + (firCol >> 3);
410
tmpRas = rec->Raster;
411
memset(tmpRas, 0, xbyte8 * yrow);
413
if ((firCol & 7) == 0)
414
MoveWindowRow = MoveWindowRow0;
415
else if (((lasCol - 1) & 7) >= ((lasCol - 1 - firCol) & 7))
416
MoveWindowRow = MoveWindowRow1;
418
MoveWindowRow = MoveWindowRow2;
421
for (i = 0; i < yrow; i++, tmpBuf += outXbyte, tmpRas += xbyte8)
422
MoveWindowRow(tmpRas, tmpBuf, outByte, firCol);
453
void p2_TextWord(CSTR_rast c,CSTR_rast stop, char *intxt,BOOL ansi)
459
for(*txt='\0'; c && c!=stop; c=CSTR_GetNextRaster (c,CSTR_f_all))
461
CSTR_GetAttr(c, &attr);
462
if( !(attr.flg & (CSTR_f_let|CSTR_f_punct|CSTR_f_bad|CSTR_f_space)) )
464
CSTR_GetCollectionUni(c, &vers);
468
strcat(txt,vers.Alt[0].Code);
472
for(txt=intxt;*txt;txt++)
473
*txt=stdAnsiToAscii(*txt);
427
void p2_TextWord(CSTR_rast c, CSTR_rast stop, char *intxt, Bool ansi) {
432
for (*txt = '\0'; c && c != stop; c = CSTR_GetNextRaster(c, CSTR_f_all)) {
433
CSTR_GetAttr(c, &attr);
435
& (CSTR_f_let | CSTR_f_punct | CSTR_f_bad | CSTR_f_space)))
437
CSTR_GetCollectionUni(c, &vers);
441
strcat(txt, vers.Alt[0].Code);
444
for (txt = intxt; *txt; txt++)
445
*txt = stdAnsiToAscii(*txt);
476
448
//////////////////
477
void p2_FillTxt(CSTR_line cc,char *intxt,BOOL ansi)
479
CSTR_rast first=CSTR_GetFirstRaster(cc);
480
CSTR_rast last=CSTR_GetLastRaster(cc);
482
p2_TextWord(CSTR_GetNext(first),last,intxt,ansi);
449
void p2_FillTxt(CSTR_line cc, char *intxt, Bool ansi) {
450
CSTR_rast first = CSTR_GetFirstRaster(cc);
451
CSTR_rast last = CSTR_GetLastRaster(cc);
454
p2_TextWord(CSTR_GetNext(first), last, intxt, ansi);
484
456
//////////////////////////////
485
Int32 p2_TextProb(CSTR_line cc,CSTR_rast first,CSTR_rast last, char *intxt,int maxTxt)
494
first=CSTR_GetNext( CSTR_GetFirstRaster(cc));
495
last=CSTR_GetLastRaster(cc);
498
for(c=first,*txt='\0'; c && c!=last; c=CSTR_GetNextRaster (c,CSTR_f_all))
500
CSTR_GetAttr(c, &attr);
501
if( !(attr.flg & (CSTR_f_let|CSTR_f_punct|CSTR_f_bad|CSTR_f_space)) )
503
CSTR_GetCollectionUni(c, &vers);
508
strcat(txt,vers.Alt[0].Code);
509
sprintf(txt+strlen(txt),"(%d)",vers.Alt[0].Prob);
512
if( (int)strlen(txt) >= maxTxt)
518
for(txt=intxt;*txt;txt++)
519
*txt=stdAnsiToAscii(*txt);
522
return strlen(intxt);
457
int32_t p2_TextProb(CSTR_line cc, CSTR_rast first, CSTR_rast last, char *intxt,
465
first = CSTR_GetNext(CSTR_GetFirstRaster(cc));
466
last = CSTR_GetLastRaster(cc);
469
for (c = first, *txt = '\0'; c && c != last; c = CSTR_GetNextRaster(c,
471
CSTR_GetAttr(c, &attr);
473
& (CSTR_f_let | CSTR_f_punct | CSTR_f_bad | CSTR_f_space)))
475
CSTR_GetCollectionUni(c, &vers);
479
strcat(txt, vers.Alt[0].Code);
480
sprintf(txt + strlen(txt), "(%d)", vers.Alt[0].Prob);
483
if ((int) strlen(txt) >= maxTxt)
489
for (txt = intxt; *txt; txt++)
490
*txt = stdAnsiToAscii(*txt);
493
return strlen(intxt);
524
495
//////////////////
525
static Word32 oddEvenFlag=CSTR_fn_val2odd;
526
Int32 p2_setOddEvenFlag(CSTR_rast first,CSTR_rast last)
532
for (numCell=0,curr=first; curr&&curr!=last; curr=CSTR_GetNextRaster (curr, CSTR_f_all))
534
CSTR_GetAttr(curr,&cur);
535
if(! ( cur.flg & CSTR_f_let) )
538
cur.flg_new |= oddEvenFlag;
539
CSTR_SetAttr(curr,&cur);
545
if( oddEvenFlag == CSTR_fn_val2odd)
546
oddEvenFlag = CSTR_fn_val2even;
548
oddEvenFlag = CSTR_fn_val2odd;
496
static uint32_t oddEvenFlag = CSTR_fn_val2odd;
497
int32_t p2_setOddEvenFlag(CSTR_rast first, CSTR_rast last) {
502
for (numCell = 0, curr = first; curr && curr != last; curr
503
= CSTR_GetNextRaster(curr, CSTR_f_all)) {
504
CSTR_GetAttr(curr, &cur);
505
if (!(cur.flg & CSTR_f_let))
508
cur.flg_new |= oddEvenFlag;
509
CSTR_SetAttr(curr, &cur);
515
if (oddEvenFlag == CSTR_fn_val2odd)
516
oddEvenFlag = CSTR_fn_val2even;
518
oddEvenFlag = CSTR_fn_val2odd;
553
523
/* Function returns UPPER CASE variant of the letter. */
554
BYTE p2_to_upperASCII( BYTE c )
556
if ( c >= (BYTE)'a' && c <= (BYTE)'z') return c - (BYTE)'a' + (BYTE)'A';
557
if(p2globals.language==LANG_RUSSIAN)
560
if ( c >= (BYTE)'�' && c <= (BYTE)'�') return c - (BYTE)'�' + (BYTE)'�';
561
if ( c >= (BYTE)'�' && c <= (BYTE)'�') return c - (BYTE)'�' + (BYTE)'�';
524
uchar p2_to_upperASCII(uchar c) {
525
if (c >= (uchar) 'a' && c <= (uchar) 'z')
526
return c - (uchar) 'a' + (uchar) 'A';
527
if (p2globals.language == LANG_RUSSIAN) {
529
if (c >= (uchar) '�' && c <= (uchar) '�')
530
return c - (uchar) '�' + (uchar) '�';
531
if (c >= (uchar) '�' && c <= (uchar) '�')
532
return c - (uchar) '�' + (uchar) '�';
566
/* Function returns LOWER CASE variant of the letter. */
567
BYTE p2_to_lowerASCII(BYTE c)
569
if ( c >= (BYTE)'A' && c <= (BYTE)'Z') return c - (BYTE)'A'+ (BYTE)'a' ;
570
if(p2globals.language==LANG_RUSSIAN)
573
if ( c >= (BYTE)'�' && c <= (BYTE)'�') return c - (BYTE)'�'+ (BYTE)'�' ;
574
if ( c >= (BYTE)'�' && c <= (BYTE)'�') return c - (BYTE)'�'+ (BYTE)'�' ;
537
/* Function returns LOWER CASE variant of the letter. */
538
uchar p2_to_lowerASCII(uchar c) {
539
if (c >= (uchar) 'A' && c <= (uchar) 'Z')
540
return c - (uchar) 'A' + (uchar) 'a';
541
if (p2globals.language == LANG_RUSSIAN) {
543
if (c >= (uchar) '�' && c <= (uchar) '�')
544
return c - (uchar) '�' + (uchar) '�';
545
if (c >= (uchar) '�' && c <= (uchar) '�')
546
return c - (uchar) '�' + (uchar) '�';
579
Bool32 p2_is_lowerASCII(BYTE ch)
551
Bool32 p2_is_lowerASCII(uchar ch) {
582
if(p2globals.language==LANG_RUSSIAN)
585
if((ch >=(BYTE)'�' && ch <=(BYTE)'�') ||
586
(ch >=(BYTE)'�' && ch <=(BYTE)'�')
590
if(ch >= 'a' && ch <= 'z') return TRUE;
553
if (p2globals.language == LANG_RUSSIAN) {
555
if ((ch >= (uchar) '�' && ch <= (uchar) '�') || (ch >= (uchar) '�'
556
&& ch <= (uchar) '�'))
559
if (ch >= 'a' && ch <= 'z')
593
563
/////////////////////
594
Bool32 p2_is_upperASCII(BYTE ch)
596
if(p2globals.language==LANG_RUSSIAN)
598
if(ch >=(BYTE)'�' && ch <=(BYTE)'�')
601
if(ch >= 'A' && ch <= 'Z') return 1;
564
Bool32 p2_is_upperASCII(uchar ch) {
565
if (p2globals.language == LANG_RUSSIAN) {
566
if (ch >= (uchar) '�' && ch <= (uchar) '�')
569
if (ch >= 'A' && ch <= 'Z')
604
573
//////////////////
605
static Word8 rus_alias []="��⡂8"; // "�����8"
606
static Word8 eng_alias []="rnr68B";
574
static uchar rus_alias[] = "��⡂8"; // "�����8"
575
static uchar eng_alias[] = "rnr68B";
608
Word8 p2_rsadd_get_alias_class(Word8 let,Word8 lang)
611
if( lang==LANG_RUSSIAN )
613
else if( lang==LANG_ENGLISH )
577
uchar p2_rsadd_get_alias_class(uchar let, uchar lang) {
579
if (lang == LANG_RUSSIAN)
581
else if (lang == LANG_ENGLISH)
622
590
/////////////////////