2
2
Copyright (c) 1993-2008, Cognitive Technologies
5
����������� ��������� ��������������� � ������������� ��� � ���� ��������� ����,
6
��� � � �������� �����, � ����������� ��� ���, ��� ���������� ��������� �������:
8
* ��� ��������� ��������������� ��������� ���� ������ ���������� ���������
9
���� ����������� �� ��������� �����, ���� ������ ������� � �����������
11
* ��� ��������� ��������������� ��������� ���� � ������������ �/��� �
12
������ ����������, ������������ ��� ���������������, ������ �����������
13
��������� ���� ���������� �� ��������� �����, ���� ������ ������� �
14
����������� ����� �� ��������.
15
* �� �������� Cognitive Technologies, �� ����� �� ����������� �� �����
16
���� ������������ � �������� �������� ��������� �/��� �����������
17
���������, ���������� �� ���� ��, ��� ���������������� �����������
20
��� ��������� ������������� ����������� ��������� ���� �/��� ������� ������ "���
21
��� ����" ��� ������-���� ���� ��������, ���������� ���� ��� ���������������,
22
������� �������� ������������ �������� � ����������� ��� ���������� ����, �� ��
23
������������� ���. �� �������� ��������� ���� � �� ���� ������ ����, �������
24
����� �������� �/��� �������� �������������� ���������, �� � ���� ������ ��
25
��Ѩ� ���������������, ������� ����� �����, ���������, ����������� ���
26
������������� ������, ��������� � �������������� ��� ���������� ����������
27
������������� ������������� ��������� (������� ������ ������, ��� ������,
28
������� ���������, ��� ������ �/��� ������ �������, ���������� ��-�� ��������
29
������� ��� �/��� ������ ��������� �������� ��������� � ������� �����������,
30
�� �� ������������� ����� ��������), �� �� ������������� ���, ���� ���� �����
31
�������� ��� ������ ���� ���� �������� � ����������� ����� ������� � ������.
5
Разрешается повторное распространение и использование как в виде исходного кода,
6
так и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
8
* При повторном распространении исходного кода должны оставаться указанное
9
выше уведомление об авторском праве, этот список условий и последующий
11
* При повторном распространении двоичного кода в документации и/или в
12
других материалах, поставляемых при распространении, должны сохраняться
13
указанная выше информация об авторском праве, этот список условий и
14
последующий отказ от гарантий.
15
* Ни название Cognitive Technologies, ни имена ее сотрудников не могут
16
быть использованы в качестве средства поддержки и/или продвижения
17
продуктов, основанных на этом ПО, без предварительного письменного
20
ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИМИ ЛИЦАМИ "КАК
21
ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,
22
ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, НО НЕ
23
ОГРАНИЧИВАЯСЬ ИМИ. НИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
24
МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, НИ В КОЕМ СЛУЧАЕ НЕ
25
НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ
26
ПОСЛЕДОВАВШИЕ УБЫТКИ, СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИЛИ ПОНЕСЕННЫЕ ВСЛЕДСТВИЕ
27
НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ ПОТЕРИ ДАННЫХ, ИЛИ ДАННЫЕ,
28
СТАВШИЕ НЕГОДНЫМИ, ИЛИ УБЫТКИ И/ИЛИ ПОТЕРИ ДОХОДОВ, ПОНЕСЕННЫЕ ИЗ-ЗА ДЕЙСТВИЙ
29
ТРЕТЬИХ ЛИЦ И/ИЛИ ОТКАЗА ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ,
30
НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМИ СЛУЧАЯМИ), НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ДАЖЕ ЕСЛИ ТАКОЙ
31
ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ И ПОТЕРЬ.
33
33
Redistribution and use in source and binary forms, with or without modification,
34
34
are permitted provided that the following conditions are met:
71
71
extern Handle hDebugAutoTemplate;
73
static Word32 key=2; //��� snap'�
74
static Word8 buffer[256];
73
static uint32_t key=2; //для snap'а
74
static uchar buffer[256];
75
75
static char *message = (char *)buffer;
78
//============ ������� ��� ���������� =================//
78
//============ Функции для интервалов =================//
80
80
static Bool32 intersect (CCOM_interval16 *f, CCOM_interval16 *s)
82
82
if (f->l==0 || s->l==0)
85
Int16 fbeg=BEGIN(*f),sbeg=BEGIN(*s);
85
int16_t fbeg=BEGIN(*f),sbeg=BEGIN(*s);
86
86
return fbeg<=sbeg && sbeg<=f->e || fbeg<=s->e && s->e<=f->e || sbeg<=fbeg && f->e<=s->e;
89
static Int16 distance (CCOM_interval16 *f, CCOM_interval16 *s)
89
static int16_t distance (CCOM_interval16 *f, CCOM_interval16 *s)
91
91
if (f->l==0 || s->l==0)
94
Int16 fbeg=BEGIN(*f),sbeg=BEGIN(*s);
95
Int16 ro1=sbeg-f->e,ro2=fbeg-s->e;
94
int16_t fbeg=BEGIN(*f),sbeg=BEGIN(*s);
95
int16_t ro1=sbeg-f->e,ro2=fbeg-s->e;
96
96
return MAX(ro1,ro2);
378
378
void Ocomp::ShowCavity()
380
for (Int32 i=nCavBeg; i<nCavEnd; i++)
380
for (int32_t i=nCavBeg; i<nCavEnd; i++)
382
Int16 h=(Int16)(pComp->upper+i);
382
int16_t h=(int16_t)(pComp->upper+i);
383
383
Point16 beg1={pComp->left+ints[i].left.e,h},end1={beg1.x+1,h};
384
384
LDPUMA_DrawLine(hWndTurn,&beg1,&end1,0,wRGB(0,0,255),PEN_WIDTH,key);
385
385
Point16 beg2={pComp->left+BEGIN(ints[i].right),h},end2={beg2.x+1,h};
430
430
SetOne(toAdd); return;
433
Int32 i,Ithird=pComp->nWidth/3,IIthird=2*Ithird;
433
int32_t i,Ithird=pComp->nWidth/3,IIthird=2*Ithird;
434
434
CCOM_interval16 set[4];
435
435
set[0]=left; set[1]=middle; set[2]=right; set[3]=*toAdd;
436
436
CCOM_interval16 *curr,*next;
437
437
CCOM_interval16 *first=set,*sec=set+1,*third=set+2,*add=set+3;
439
reorder(set,4); // � ������� ����������� ������
440
if (set[0].l) // ����� 4 ��������� - ���� ���� ����������
439
reorder(set,4); // в порядке возрастания концов
440
if (set[0].l) // всего 4 интервала - пару надо объединить
442
Int32 distmin=MAXWIDTH,imin;
442
int32_t distmin=MAXWIDTH,imin;
443
443
for (i=0,curr=set+i,next=curr+1; i<3; i++,curr++,next++)
445
Int16 dist=distance(curr,next);
445
int16_t dist=distance(curr,next);
446
446
if (dist<distmin) { distmin=dist; imin=i; };
448
448
set[imin+1]=join(set+imin,set+imin+1);
449
memmove(set+1,set,imin*sizeof(CCOM_interval16)); //��������� ������
449
memmove(set+1,set,imin*sizeof(CCOM_interval16)); //поджимаем вправо
450
450
memset(set,0,sizeof(CCOM_interval16));
453
//�������� <= 3 ��������� - ����������, ���� �����
453
//осталось <= 3 интервала - объединяем, если нужно
458
458
for (i=1,curr=set+i,next=curr+1; i<3; i++,curr++,next++)
460
Int16 dist=distance(curr,next);
460
int16_t dist=distance(curr,next);
461
461
if (dist<curr->l && dist<next->l)
464
464
*next=join(curr,next);
465
memmove(set+1,set,i*sizeof(CCOM_interval16)); //��������� ������
465
memmove(set+1,set,i*sizeof(CCOM_interval16)); //поджимаем вправо
471
//������������ �� ������
472
if (set[1].l) // 3 ��������� - ������ ����� �������
471
//распределяем по местам
472
if (set[1].l) // 3 интервала - кладем слева направо
474
474
left=set[1]; middle=set[2]; right=set[3];
476
else if (set[2].l) // 2 ��������� - ������������ �� ���� ���������
476
else if (set[2].l) // 2 интервала - распределяем по трем вакансиям
478
Int32 mid=set[3].e-set[3].l/2;
478
int32_t mid=set[3].e-set[3].l/2;
481
481
left=set[2]; middle=set[3]; memset(&right,0,sizeof(right));
572
Int32 lm=0,lc=0,rm=0,rc=0;
573
Int16 um=pComp->upper,bm=nPageHeight-(um+pComp->h);
572
int32_t lm=0,lc=0,rm=0,rc=0;
573
int16_t um=pComp->upper,bm=nPageHeight-(um+pComp->h);
574
574
for (i=0; i<nHeight; i++)
576
576
TripleInterval *intv=ints+i;
577
577
#ifdef DRAWTPIPLEINT
578
Int32 color=wRGB(0,0,255);
579
Int16 h=(Int16)(pComp->upper+i);
578
int32_t color=wRGB(0,0,255);
579
int16_t h=(int16_t)(pComp->upper+i);
581
581
Point16 beg={pComp->left+intv->left.e-intv->left.l,h},end={pComp->left+intv->left.e,h};
582
582
LDPUMA_DrawLine(hWndTurn,&beg,&end,0,wRGB(0,0,255),PEN_WIDTH,key);