63
63
#include <string.h>
65
65
#include <stdlib.h>
68
66
#include "status.h"
69
67
#include "discrim.h"
73
71
/************************************************************/
74
extern INT LeftDistance(BYTE *RASTER,INT dx);
75
extern INT RightDistance(BYTE *RASTER,INT dx);
76
extern segment * go_line(segment *s,WORD num);
72
extern int16_t LeftDistance(uchar *RASTER,int16_t dx);
73
extern int16_t RightDistance(uchar *RASTER,int16_t dx);
74
extern segment * go_line(segment *s,uint16_t num);
78
76
/************************************************************/
79
static INT long_line( PBYTE seg,INT w,INT line,INT part);
77
static int16_t long_line( puchar seg,int16_t w,int16_t line,int16_t part);
82
80
#define bytlen(c) ((c+7)>>3)
170
168
/* ���ਬ����� �� ࠧ��稥 㣫�� �� ������ ⨯�� angles */
171
static INT check_angles(BYTE let,INT dy)
169
static int16_t check_angles(uchar let,int16_t dy)
173
INT non_sim=0,non_num=0,p;
174
INT deskr[]={0,40,80,200,240}; // 0, 50, 120, ...
171
int16_t non_sim=0,non_num=0,p;
172
int16_t deskr[]={0,40,80,200,240}; // 0, 50, 120, ...
176
174
/* default_corners - ������ 㣫� */
177
175
if( (p=non_similar_angles(default_corners[let].tl,angles.tl,
250
248
if( num_jmps==1 && back_jmps>=1 || /* 1+ 1- */
251
249
num_jmps>1 && back_jmps>1 ) /* 2+ 2- */
253
return(BYTE)num_jmps ;
251
return(uchar)num_jmps ;
256
254
/* ����� NUM_LINES ����ﭨ� �� �� ���� */
257
255
/* �ய�᪠�� ��砫�� ����� ��-�� ᪠窮� ����� DIST_LIN */
258
256
/* ������ 㣫� ��।������ ��� � ��뢠�饩 �ணࠬ�� */
259
257
/* ���ࠢ����� �������� ������ D_X */
260
static BYTE get_lines(BYTE *RASTER, INT D_X, INT dx,
261
INT (*Distance)(BYTE *, INT) , INT h)
258
static uchar get_lines(uchar *RASTER, int16_t D_X, int16_t dx,
259
int16_t (*Distance)(uchar *, int16_t) , int16_t h)
265
263
memset( buf_lines,0,sizeof(buf_lines));
302
300
return( calc_one_angle(h) );
305
BYTE Let_Width_Bottom_Right_Curve[]="�����";
303
uchar Let_Width_Bottom_Right_Curve[]="�����";
306
304
/* ���ਬ����� �� 㣫� ᨬ���� let, h - ����, type - ���ᨢ����� */
307
INT discr_angles(BYTE let, INT h, INT type)
305
int16_t discr_angles(uchar let, int16_t h, int16_t type)
310
308
default_corners = (CRN *)(type ? def_corn_cs : def_corn);
312
310
memcpy(&cut_crn,&cut_crn0,sizeof(cut_crn));
314
default_corners[(BYTE)'�'].tr=0;
312
default_corners[(uchar)'�'].tr=0;
315
313
if( MEMCHR(Let_Width_Bottom_Right_Curve,let,
316
314
sizeof(Let_Width_Bottom_Right_Curve)) )
317
315
memcpy(&cut_crn,&cut_crn1,sizeof(cut_crn));
320
318
if( multy_language )
322
default_corners[(BYTE)'5'].tl=N_C;
323
default_corners[(BYTE)'5'].bl=A_C;
320
default_corners[(uchar)'5'].tl=N_C;
321
default_corners[(uchar)'5'].bl=A_C;
325
323
if (!is_turkish_language(language)) // 21.05.2002 E.P.
326
default_corners[(BYTE)'�'].tr=N_C;
324
default_corners[(uchar)'�'].tr=N_C;
328
default_corners[(BYTE)'�'].tr=N_C;
326
default_corners[(uchar)'�'].tr=N_C;
331
329
return check_angles(let,h);
334
332
/* �쪮 ��ப ���� �� �࠭��� ���������� */
335
static BYTE is_angle(BYTE *RASTER, INT D_X, INT dx,
336
INT (*Distance)(BYTE *, INT) , INT h, INT dest)
333
static uchar is_angle(uchar *RASTER, int16_t D_X, int16_t dx,
334
int16_t (*Distance)(uchar *, int16_t) , int16_t h, int16_t dest)
340
338
for(zero=i=0;i<h;i++,RASTER+=D_X)
341
339
zero += ( Distance(RASTER,dx)==dest );
361
359
memset(&cut_crn0,0,sizeof(cut_crn));
362
360
memset(&cut_crn1,0,sizeof(cut_crn));
364
skip = long_line(segment,(INT)(_rst->w/3),0,0);
362
skip = long_line(segment,(int16_t)(_rst->w/3),0,0);
365
363
angles.tl =get_lines(rt+D_X*skip,D_X,dx,LeftDistance,h);
366
364
if( cutl && is_angle(rt+D_X*skip,D_X,dx,LeftDistance,4,0) )
369
skip = long_line(segment,(INT)(_rst->w/3),(INT)(_rst->h-1),0);
370
angles.bl =get_lines(rb-D_X*skip,(INT)(-D_X),dx,LeftDistance,h);
371
if( cutl && is_angle(rb-D_X*skip,(INT)(-D_X),dx,LeftDistance,4,0) )
367
skip = long_line(segment,(int16_t)(_rst->w/3),(int16_t)(_rst->h-1),0);
368
angles.bl =get_lines(rb-D_X*skip,(int16_t)(-D_X),dx,LeftDistance,h);
369
if( cutl && is_angle(rb-D_X*skip,(int16_t)(-D_X),dx,LeftDistance,4,0) )
374
skip = long_line(segment,(INT)(_rst->w/3),0,1);
372
skip = long_line(segment,(int16_t)(_rst->w/3),0,1);
375
373
angles.tr =get_lines(rt+D_X*skip,D_X,dx,RightDistance,h);
376
if( cutr && is_angle(rt,(INT)(D_X*skip),dx,RightDistance,4,right_dest) )
374
if( cutr && is_angle(rt,(int16_t)(D_X*skip),dx,RightDistance,4,right_dest) )
379
skip = long_line(segment,(INT)(_rst->w/3),(INT)(_rst->h-1),1);
380
angles.br =get_lines(rb-D_X*skip,(INT)(-D_X),dx,RightDistance,h);
381
if( cutr && is_angle(rb-D_X*skip,(INT)(-D_X),dx,RightDistance,4,right_dest) )
377
skip = long_line(segment,(int16_t)(_rst->w/3),(int16_t)(_rst->h-1),1);
378
angles.br =get_lines(rb-D_X*skip,(int16_t)(-D_X),dx,RightDistance,h);
379
if( cutr && is_angle(rb-D_X*skip,(int16_t)(-D_X),dx,RightDistance,4,right_dest) )
384
382
memcpy(ang,&angles,4*sizeof(ang[0]));
388
INT long_line( PBYTE seg,INT w,INT line,INT part)
386
int16_t long_line( puchar seg,int16_t w,int16_t line,int16_t part)