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:
64
64
#include <stdlib.h>
65
65
#include <string.h>
67
67
#include "struct.h"
70
struct pairs {INT x,y; CHAR f;};
70
struct pairs {int16_t x,y; char f;};
71
71
typedef struct pairs pairs;
74
extern INT page_nIncline;
75
extern INT line_number;
78
static INT row,row_prev;
79
static INT incline_prev;
82
static INT skew_pool_fill(CSTR_line,pairs *);
83
static INT skew_pool_refill(CSTR_line ln,pairs *pool);
84
static INT skew_pool_refill2(CSTR_line ln,pairs *pool);
86
static INT incl_init(INT,pairs *);
87
static WORD skew_stat(INT,CSTR_line,INT,pairs *);
73
extern int16_t nIncline;
74
extern int16_t page_nIncline;
75
extern int16_t line_number;
78
static int16_t row,row_prev;
79
static int16_t incline_prev;
82
static int16_t skew_pool_fill(CSTR_line,pairs *);
83
static int16_t skew_pool_refill(CSTR_line ln,pairs *pool);
84
static int16_t skew_pool_refill2(CSTR_line ln,pairs *pool);
86
static int16_t incl_init(int16_t,pairs *);
87
static uint16_t skew_stat(int16_t,CSTR_line,int16_t,pairs *);
88
88
static void total_skew();
116
116
l=skew_stat(nIncline,ln,skew_pool_n,skew_pool);
119
while ((l1=skew_stat((INT)(nIncline-1),ln,skew_pool_n,skew_pool))>l)
119
while ((l1=skew_stat((int16_t)(nIncline-1),ln,skew_pool_n,skew_pool))>l)
120
120
{ nIncline--; l=l1;}
121
121
if (nIncline==inclini)
122
while ((l1=skew_stat((INT)(nIncline+1),ln,skew_pool_n,skew_pool))>l)
122
while ((l1=skew_stat((int16_t)(nIncline+1),ln,skew_pool_n,skew_pool))>l)
123
123
{ nIncline++; l=l1;}
129
static INT skew_pool_fill(CSTR_line ln,pairs *pool)
129
static int16_t skew_pool_fill(CSTR_line ln,pairs *pool)
133
133
CSTR_rast rst=CSTR_GetFirstRaster(ln);
205
205
if ( (attr.difflg&64) && !(attr.difflg&4))
206
206
continue; // skip totally forbidden
208
p->y=(INT)(attr.r_row+attr.h - attrlin.row);//-1);
208
p->y=(int16_t)(attr.r_row+attr.h - attrlin.row);//-1);
215
static INT incl_init(INT n,pairs *pool)
215
static int16_t incl_init(int16_t n,pairs *pool)
217
INT i,incl,shift,m,d;
218
LONG sx,sy,sxy,sx2,w,sigma,dd;
217
int16_t i,incl,shift,m,d;
218
int32_t sx,sy,sxy,sx2,w,sigma,dd;
221
221
for (p=pool,sx=sy=sxy=sx2=i=0; i<n; i++,p++)
225
sxy+=((LONG)p->x)*(p->y);
226
sx2+=((LONG)p->x)*(p->x);
225
sxy+=((int32_t)p->x)*(p->y);
226
sx2+=((int32_t)p->x)*(p->x);
228
228
w=(n*((sx2+128)/256)-((sx+8)/16)*((sx+8)/16));
230
230
{relab=0; return nIncline;}
231
231
dd=8*(n*sxy-sx*sy);
232
incl=(INT)((dd+((dd>0)?w/2:-w/2))/w);
233
shift=(INT)((((sx2+128)/256)*sy-((sxy+8)/16)*((sx+8)/16)+w/2)/w);
232
incl=(int16_t)((dd+((dd>0)?w/2:-w/2))/w);
233
shift=(int16_t)((((sx2+128)/256)*sy-((sxy+8)/16)*((sx+8)/16)+w/2)/w);
234
234
for (p=pool,w=i=0; i<n; i++,p++)
237
d=p->y-(INT)((dd+((dd>0)?1024:-1024))/2048)-shift;
236
dd=(int32_t)incl*p->x;
237
d=p->y-(int16_t)((dd+((dd>0)?1024:-1024))/2048)-shift;
293
293
#define HIMAX 1000
295
static WORD skew_stat(INT incl,CSTR_line ln,INT pool_n,pairs *pool)
295
static uint16_t skew_stat(int16_t incl,CSTR_line ln,int16_t pool_n,pairs *pool)
300
300
CSTR_attr attrlin;
302
302
CSTR_GetLineAttr(ln, &attrlin);
303
im=(INT)(2*attrlin.hei);
303
im=(int16_t)(2*attrlin.hei);
304
304
if (im<0 || im>=HIMAX) return 0;
305
305
memset(hist,0,HIMAX);// Piter change im) for HIMAX;
306
306
for (i=0; i<pool_n; i++)
308
d=im/2+pool[i].y-(INT)((LONG)incl*pool[i].x/2048);
308
d=im/2+pool[i].y-(int16_t)((int32_t)incl*pool[i].x/2048);
309
309
if (d>0 && d<HIMAX) hist[d]++;
311
311
for (l=i=0; i<im; i++)
312
l+=(WORD)hist[i]*hist[i];
312
l+=(uint16_t)hist[i]*hist[i];
316
316
static void total_skew()
320
320
if (relab) return;
321
321
if (line_number>1 && abs(row-row_prev)<=DPREVL)