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
�������� ��� ������ ���� ���� �������� � ����������� ����� ������� � ������.
33
Redistribution and use in source and binary forms, with or without modification,
34
are permitted provided that the following conditions are met:
36
* Redistributions of source code must retain the above copyright notice,
37
this list of conditions and the following disclaimer.
38
* Redistributions in binary form must reproduce the above copyright notice,
39
this list of conditions and the following disclaimer in the documentation
40
and/or other materials provided with the distribution.
41
* Neither the name of the Cognitive Technologies nor the names of its
42
contributors may be used to endorse or promote products derived from this
43
software without specific prior written permission.
45
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
46
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
49
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
52
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
54
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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
ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ И ПОТЕРЬ.
33
Redistribution and use in source and binary forms, with or without modification,
34
are permitted provided that the following conditions are met:
36
* Redistributions of source code must retain the above copyright notice,
37
this list of conditions and the following disclaimer.
38
* Redistributions in binary form must reproduce the above copyright notice,
39
this list of conditions and the following disclaimer in the documentation
40
and/or other materials provided with the distribution.
41
* Neither the name of the Cognitive Technologies nor the names of its
42
contributors may be used to endorse or promote products derived from this
43
software without specific prior written permission.
45
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
46
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
49
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
52
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
54
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57
57
//ifdef EXACT_REG => read_frm use cutted rect
58
58
//#define EXACT_REG
60
60
#include "sys_prog.h"
63
62
/*#include <io.h>*/
64
63
#include <sys/types.h>
151
154
typedef void *** PTR3;
153
156
#if !defined (DOS_MOD)
154
#define _GFILLINTERIOR 0
157
#define _GFILLINTERIOR 0
158
161
#define do0(p1,p2,p3) for(p1=(int)(p2); p1<=(int)(p3); ++p1)
159
162
#define dou(p1,p2,p3) for(p1=(p2); p1<=(p3); ++p1)
160
163
#define doi(p1,p2,p3) for(p1=(int)(p2); p1>=(int)(p3); --p1)
162
//��������� ��������� � ������
165
//Структура структуры в памяти
163
166
#define PIECE struct h_piece
164
PIECE { int up,down; };
165
170
#define POINT_H POINT *
166
typedef struct hFRM_ARR {FRAME **FrmArr,**frm; int NumArr,NumFrm,AllFrm;} FRM_ARR;
171
typedef struct hFRM_ARR {
172
FRAME **FrmArr, **frm;
173
int NumArr, NumFrm, AllFrm;
167
175
#define BOUND struct h_bound
168
BOUND { int left,up,right,down; };
177
int left, up, right, down;
169
179
#define POS_STR struct h_pos_str
171
POS_STR {uint HeadLine:1,buf:15;};
182
uint HeadLine :1, buf :15;
173
185
#define STAT_STR struct h_stat_str
174
STAT_STR { int dx,dy,dsym,down_line; POS_STR PosStr;};
187
int dx, dy, dsym, down_line;
175
190
#define STAT_COL struct h_stat_col
176
STAT_COL { STAT_STR *stat_str; int dx_col,dy_col,dsym_col,dy_Low,dy_Upp; };
193
int dx_col, dy_col, dsym_col, dy_Low, dy_Upp;
177
195
#define KNOT struct h_knot
178
196
#define KNOT2 struct h_knot2
179
197
#define KNOT3 struct h_knot3
180
198
#define KNOT4 struct h_knot4
181
199
#define FRML struct h_frml
182
200
#define AS struct h_as
183
KNOT { KNOT *next,*back; };
184
KNOT2 { KNOT2 *next,*back; FRAME *f; TYPE dist;};
185
KNOT3 { KNOT3 *next,*back; FRAME *f; int cl;KNOT3 *beg;};
186
KNOT4 { KNOT4 *next,*back; FRAME *f;};
187
FRML { FRML *next,*back; int left,up,right,down; };
188
AS { KNOT3 ***beg_as; //��������� ������ ����� ������� ��������� ��
189
KNOT3 *beg_free; //��-�� �� ������ ������ ��������� ��-��� �����. �����-��
190
int kx,ky,dx,dy,xmin,ymin; //���-�� � ������� ��������� �� ����,������ ��
191
BOUND *bnd; //�������. ������������� �� (��� ����� ������. �����)
221
int left, up, right, down;
224
KNOT3 ***beg_as; //Двумерный массив голов списков сегментов АС
225
KNOT3 *beg_free; //Ук-ль на голову списка свободных эл-тов списк. прост-ва
226
int kx, ky, dx, dy, xmin, ymin; //Кол-ва и размеры сегментов по осям,начало АС
227
BOUND *bnd; //Габарит. прямоугольник АС (без учета фиктив. полос)
193
229
#define REFER struct h_refer
195
typedef struct hTITLE_PRS
196
{ char Name[4],ScanResX,ScanResY,Thick,Reserv;int SizeX,SizeY;} TITLE_PRS;
233
typedef struct hTITLE_PRS {
234
char Name[4], ScanResX, ScanResY, Thick, Reserv;
201
240
#define PAR struct h_par
203
float ax,ay,percent_kgv; int xmin_abs,ymin_abs; /*��������� filtr_size*/
204
float ax_as,ay_as; /*��������� ���������*/
205
int kv;/*������� ����-�� "��������" �������*/
206
int nums,numw; float al,bet,delx; /*��������� union_str*/
207
float csi,zet;int dp_abs;
208
/*clust_as:�������.������ ��������� csi � ������� zet,
209
dp_abs - �������.����� ������������� ������ ������.���������� � �������*/
210
float k10,k11,size_win_word,num_por; int dh_word; //divide_word_str
211
int g1,g2; /*�����.����� ������� � ��������� � ��������(����-�� ��� ave_x)*/
212
int maxhg; /*����.���������� ������ ����������� � ���������*/
213
float minhg;/*���.���������� ������ ����������� � �������(minh=minnhg*kstr)*/
214
int midhg; /*����.���������� ������� ������ ����-�� � ���������*/
215
int v1,v2; /*�����.����� ������� � ��������� � ��������(����-�� ��� ave_y)*/
216
int maxhv; /*����.���������� ������ ����������� � ���������*/
217
float minhv;/*���.���������� ������ ����������� � �������(minh=minnhg*kstr)*/
218
int midhv; /*����.���������� ������� ������ ����-�� � ���������*/
219
float ag,bg,gg,dg;/*��������� ��������� union_comp*/
220
float com1,com2,com3;/*��������� ��������� find_comma*/
221
float por_mono;/*����� �� % ������ ����� ����� � ���� ��� ��������������*/
222
int allow_colH,allow_colV;/*1-���������� H- ��� V-�����������*/
223
int allow_union_str;/*1-���������� ������� �����*/
224
int allow_cut_str;/*1-���������� ����� �����*/
225
int allow_filtr_size;/*1-���������� ������� �� ��������*/
226
int allow_union_comp;/*1-���������� ��������� ����� �� ���������.������*/
227
int allow_cut_comp;/*[1-���������� ��������. ����� �����*/
228
int allow_cut_prs;/*[1-���������� ��������. ����� PRS-���������*/
230
int allow_RevizRuleStr;
231
int allow_SeparGraph;
233
int allow_RevizEstStrAfterDeSkewCol;
234
int allow_DeSkewColFragm;
235
int allow_DeSkewAll; //���������� ���� ����� ��������
236
int allow_SplitCol; //���������� ����������� �����-�����
237
float cut_str1;/*����-� ��� ������ ������ ��������� ������*/
238
float cut_str2;/*������������������ ��������� � ������ ��������*/
239
float cut_str_a,cut_str_b;//�����-�� �� ��������.���������
240
float EstBnd1; int EstBndSize;//��������� EstBndStrHist
241
float k_parag; //�������. �������� ������� ������ DivideColParag
242
float CutComp1; //�������.����� ��������."������"� �����.������ FindCutComp
243
//����.������� �������� � Max ����� �������� ������ � ������ �� ������ ��� ����������� ����������
244
int Stick,MaxStickOut,MaxStickIn;float StickCoeff;
245
float UnionPairStr1; //�-��� UnionPairStr
246
int MinKsym; float PercKsym; //AnalysRuler
247
float MinMax1,MinMax2;int NumIterL,NumIterW;//��������� EstBndMinMax
248
int MaxDelh,DelLine,DepthSearch;//��������� DeSkewCol
249
//��������� ���-�� RevizRuleCol ��������� ������ �����
250
int RevizRuleDelMax;//������� ��� ������������ � ��������� AnalysRule
251
float RevizRuleC1;//����-� ��� SizeLow ������ ������ ������
252
float RevizRuleC2;//C2*ksym - min-����� ����� � �������� ������������
253
float RevizRuleC3;//C3*ksym - ����� ����� �������� EstBndMinMax
254
int RevizRuleC4; //���.����� ����� � �������� ����-�� MM-������ ������
255
float RevizRuleK1;//�������.����� �������� ��-������ ������ EstBndMinMax
256
float RevizRuleK2;//�������.����� �������� ����� ��� ����������
257
int PenV; //ClassFrmSmall - Penv
258
float WeightBetwLine;//ClassFrmEnv -�������� ������������� �� VERT ��� ������.���.
259
float ax_as_other,ay_as_other,RelThresholdOther;//ClassFrmOther
260
float ThresholdXFrmCol,ThresholdYFrmCol;//ClustCOL �������.������ ���� ��������
262
int AllowLine;//�������� �� ����� �����
242
float ax, ay, percent_kgv;
243
int xmin_abs, ymin_abs; /*параметры filtr_size*/
244
float ax_as, ay_as; /*параметры развертки*/
245
int kv;/*весовые коэф-ты "рамочной" метрики*/
247
float al, bet, delx; /*параметры union_str*/
250
/*clust_as:относит.пороги буквенный csi и словный zet,
251
dp_abs - абсолют.порог присоединения тонких изолир.фрагментов к строкам*/
252
float k10, k11, size_win_word, num_por;
253
int dh_word; //divide_word_str
254
int g1, g2; /*миним.длина колонки и интервала в символах(коэф-ты при ave_x)*/
255
int maxhg; /*Макс.допустимая высота гистограммы в интервале*/
256
float minhg;/*мин.допустимая высота гистограммы в колонке(minh=minnhg*kstr)*/
257
int midhg; /*Макс.допустимая средняя высота гист-мы в интервале*/
258
int v1, v2; /*миним.длина колонки и интервала в символах(коэф-ты при ave_y)*/
259
int maxhv; /*Макс.допустимая высота гистограммы в интервале*/
260
float minhv;/*мин.допустимая высота гистограммы в колонке(minh=minnhg*kstr)*/
261
int midhv; /*Макс.допустимая средняя высота гист-мы в интервале*/
262
float ag, bg, gg, dg;/*Параметры процедуры union_comp*/
263
float com1, com2, com3;/*Параметры процедуры find_comma*/
264
float por_mono;/*порог на % общего числа рамок в окне для моноспейсности*/
265
int allow_colH, allow_colV;/*1-разрешение H- или V-колонизации*/
266
int allow_union_str;/*1-разрешение слияния строк*/
267
int allow_cut_str;/*1-разрешение резки строк*/
268
int allow_filtr_size;/*1-разрешение фильтра по размерам*/
269
int allow_union_comp;/*1-разрешение наведения рамок на многосвяз.символ*/
270
int allow_cut_comp;/*[1-разрешение вертикал. резки рамок*/
271
int allow_cut_prs;/*[1-разрешение вертикал. резки PRS-компонент*/
273
int allow_RevizRuleStr;
274
int allow_SeparGraph;
276
int allow_RevizEstStrAfterDeSkewCol;
277
int allow_DeSkewColFragm;
278
int allow_DeSkewAll; //Запрещение всех видов вращений
279
int allow_SplitCol; //Запрещение колонизации снизу-вверх
280
float cut_str1;/*коэф-т для грубой оценки кратности строки*/
281
float cut_str2;/*репрезантативность кратности в длинах символов*/
282
float cut_str_a, cut_str_b;//Завис-ть от вертикал.кратности
284
int EstBndSize;//Параметры EstBndStrHist
285
float k_parag; //Относит. критерий красной строки DivideColParag
286
float CutComp1; //Относит.порог вертикал."захода"в сосед.строку FindCutComp
287
//Макс.уровень торчания и Max число торчащих наружу и внутрь от линеек для обнаружения заголовков
288
int Stick, MaxStickOut, MaxStickIn;
290
float UnionPairStr1; //ф-ция UnionPairStr
292
float PercKsym; //AnalysRuler
293
float MinMax1, MinMax2;
294
int NumIterL, NumIterW;//Параметры EstBndMinMax
295
int MaxDelh, DelLine, DepthSearch;//Параметры DeSkewCol
296
//Параметры алг-ма RevizRuleCol уточнения линеек строк
297
int RevizRuleDelMax;//Коридор для согласования с линейками AnalysRule
298
float RevizRuleC1;//Коэф-т при SizeLow порога высоты строки
299
float RevizRuleC2;//C2*ksym - min-число рамок в коридоре согласования
300
float RevizRuleC3;//C3*ksym - порог числа итераций EstBndMinMax
301
int RevizRuleC4; //Мин.число рамок в коридоре сост-ти MM-оценки линеек
302
float RevizRuleK1;//Относит.порог тонкости ММ-оценки строки EstBndMinMax
303
float RevizRuleK2;//Относит.порог тонкости рамки для отбраковки
304
int PenV; //ClassFrmSmall - Penv
305
float WeightBetwLine;//ClassFrmEnv -критерий зацепленности по VERT для привед.окр.
306
float ax_as_other, ay_as_other, RelThresholdOther;//ClassFrmOther
307
float ThresholdXFrmCol, ThresholdYFrmCol;//ClustCOL Относит.пороги меры сходства
309
int AllowLine;//Включать ли поиск линий
265
312
#define POS_BIT struct h_pos_bit
269
uint pos:8,word:1,sym:1,comma:1,parag:1,JoinComp:1,
270
Index:1,Fract:1,MultiPoint:1;
315
uint pos :8, word :1, sym :1, comma :1, parag :1, JoinComp :1, Index :1,
316
Fract :1, MultiPoint :1;
272
318
#define POS_BIT8 struct h_pos_bit8
276
uint pos:8,word:1,sym:1,comma:1,parag:1,JoinComp:1,Index:1,Fract:1,
320
uint pos1, pos2, pos3;
321
uint pos :8, word :1, sym :1, comma :1, parag :1, JoinComp :1, Index :1,
322
Fract :1, MultiPoint :1;
279
324
#define POS1_BIT struct h_pos1_bit
283
uint pos:8,cut_comp:2,buf:6;
327
uint pos :8, cut_comp :2, buf :6;
285
329
//POS1_BIT { uint pos:8,cut_comp:2,buf:6; uint pos1; };
286
330
#define POS_INT struct h_pos_int
289
uint pos:8,word:1,sym:1,comma:1,parag:1,JoinComp:1,
290
Index:1,Fract:1,MultiPoint:1;
332
uint pos :8, word :1, sym :1, comma :1, parag :1, JoinComp :1, Index :1,
333
Fract :1, MultiPoint :1;
292
335
#define POS2_BIT struct h_pos_bit2
297
uint AveCrossInt:4; //����� ����� ����.��������� �������(����� �����������)
298
uint AveCrossFloat:4;//����. ����� ����.��������� �������(��� - 1/16)
339
uint AveCrossInt :4; //Целая часть сред.сложности символа(числа пересечений)
340
uint AveCrossFloat :4;//Дроб. часть сред.сложности символа(ЦМР - 1/16)
301
343
#define AVE_CROSS(arg) ((POS2_BIT*)&arg)->AveCrossInt+(((POS2_BIT*)&arg)->AveCrossFloat)/16.
302
344
#define POS3_BIT struct h_pos_bit3
307
uint NumHole:4; //����� ���
308
uint MaxDepth:4;//����. �������(��� - 1/16 ������ �����)
348
uint NumHole :4; //Число дыр
349
uint MaxDepth :4;//Макс. глубина(ЦМР - 1/16 высоты рамки)
311
352
#define NUM_HOLE(arg) ((POS3_BIT*)&arg)->NumHole
312
353
#define MAX_DEPTH(arg) ((POS3_BIT*)&arg)->MaxDepth
314
/*�������� ���� ������:
315
*next,*back - ������ �� ��������� � ����� �������;
316
*up - ������ �� ������;
317
*down - ������ �� ������ ����� �������;
318
*f - ������ � ������ ����� �� ���������� �����;
319
reg - ������� ������������ ������� ����;
320
typ - �������� ��������������� ������ ��� �������;
321
lev - ������� ���� (��� �� ����� ��������� �������, � �����������, �.�.
322
���� ������ ������ ����� ���������� �� ������ ���������� �� �����);
323
end - ������� ���������� (1 - ����� �����);
355
/*Описание узла дерева:
356
*next,*back - ссылки по элементам с общим предком;
357
*up - ссылка на предка;
358
*down - ссылка на голову своих дочерей;
359
*f - ссылка в список рамок на объемлющую рамку;
360
reg - признак регулярности данного узла;
361
typ - характер упорядоченности списка его дочерей;
362
lev - уровень узла (это не чисто древесное понятие, а структурное, т.е.
363
узлы одного уровня могут находиться на разном расстоянии от корня);
364
end - признак блокировки (1 - конец блока);
325
366
#define KNOTG struct h_knotg
327
KNOTG *next,*back,*up,*down;
368
KNOTG *next, *back, *up, *down;
329
uint reg:1,typ:4,lev:4,end:1,buf:6;
370
uint reg :1, typ :4, lev :4, end :1, buf :6;
333
typedef struct h_spec
335
uint reg:1,typ:4,lev:4,end:1,buf:6;
374
typedef struct h_spec {
375
uint reg :1, typ :4, lev :4, end :1, buf :6;
338
378
#define ORDER(arg) ((SPEC*) &arg) -> typ
437
477
#define SPACE_MAX 200
439
/*����� TREE1 - ��������� ������ ��������� ������ ���� (�������� �� ������ ��������)
440
����� ������ � ��� �� ���������*/
479
/*Режим TREE1 - генерация дерева структуры общего вида (объемная по памяти операция)
480
иначе дерево в ОЗУ не генерится*/
441
481
/*#define TREE1*/
442
/*-----�������-----*/
482
/*-----Графика-----*/
446
extern int nxn,nyn,nxk,nyk,KX,KY,gr_regim;
447
extern float xnn,ynn,xkk,ykk,xmm,ymm;
486
extern int nxn, nyn, nxk, nyk, KX, KY, gr_regim;
487
extern float xnn, ynn, xkk, ykk, xmm, ymm;
449
int nxn,nyn,nxk,nyk,KX,KY,gr_regim;
450
float xnn,ynn,xkk,ykk,xmm,ymm;
489
int nxn,nyn,nxk,nyk,KX,KY,gr_regim;
490
float xnn,ynn,xkk,ykk,xmm,ymm;
452
void pointt_w(int x1,int y1,int krat,int ifil);
453
void point_w(int x1,int y1), point(int x,int y), vect_w(int x1,int y1),
454
vector_w(int x1,int y1,int x2,int y2), vect(int x,int y),
455
vector(int x1,int y1,int x2,int y2), clear(void),
456
pause_internal(void), opn1(void), win_real(void),
457
bounds_frm(int ii,FRAME **frm,int nx),
458
BoundsRect(int ii,RECT *frm,int nx),
459
polygon_w(int *x,int *y,int n,int col,int zap,int krat,int ifil),
460
polygon(int *x,int *y,int n,int col,int zap,int krat,int ifil),
492
void pointt_w(int x1, int y1, int krat, int ifil);
493
void point_w(int x1, int y1), point(int x, int y), vect_w(int x1, int y1),
494
vector_w(int x1, int y1, int x2, int y2), vect(int x, int y), vector(
495
int x1, int y1, int x2, int y2), clear(void), pause_internal(
496
void), opn1(void), win_real(void), bounds_frm(int ii,
497
FRAME **frm, int nx), BoundsRect(int ii, RECT *frm, int nx),
498
polygon_w(int *x, int *y, int n, int col, int zap, int krat, int ifil),
499
polygon(int *x, int *y, int n, int col, int zap, int krat, int ifil),
462
501
int setcol(int i);
463
void point_f(float x1,float y1);
464
int getch1(void),shift(void),ctrl(void),alt(void);
465
void image_frm(FRAME *f,int col,int line_style,int fill);
466
void image_frame(FRAME **frm,int k,int col,int line_style,int fill);
467
void image_bnd(BOUND *f,int col,int line_style,int fill);
468
void image_rect(RECT *f,int col,int line_style,int fill);
469
void scale_image(float ax,float ay);
470
void move_image(int nx,int ny);
502
void point_f(float x1, float y1);
503
int getch1(void), shift(void), ctrl(void), alt(void);
504
void image_frm(FRAME *f, int col, int line_style, int fill);
505
void image_frame(FRAME **frm, int k, int col, int line_style, int fill);
506
void image_bnd(BOUND *f, int col, int line_style, int fill);
507
void image_rect(RECT *f, int col, int line_style, int fill);
508
void scale_image(float ax, float ay);
509
void move_image(int nx, int ny);
471
510
int analys_key(int *fl);
472
int hist_int(char *name,int *x,int n,int Xmin,int Xmax,int reg,int *y,int k);
473
void mess(char *s1,char *s2,char *s3,char *s4);
474
DWORD SendMessage_m(WORD wParam,DWORD lParam);
475
int chk_string(FRAME ***str,int *ksym,int k_str,FRAME **frms);
511
int hist_int(char *name, int *x, int n, int Xmin, int Xmax, int reg, int *y,
513
void mess(char *s1, char *s2, char *s3, char *s4);
514
uint32_t SendMessage_m(uint16_t wParam, uint32_t lParam);
515
int chk_string(FRAME ***str, int *ksym, int k_str, FRAME **frms);
476
516
int chk_ptr(void *ptr);
478
int Esc= 27,Enter= 13,Del=1083,Delete=1008,Tab=1009,Home=1071,End1=1079,
479
Ins=1082,Up=1072,Down=1080,Left=1075,Right=1077,PgUp=1073,PgDown=1081,
480
CtrlEsc=2027,CtrlEnter=2010,CtrlDel=2127,CtrlDelete=2147,CtrlTab=2148,
481
CtrlHome=2119,CtrlEnd=2117,CtrlIns=2146,CtrlUp=2141,
482
CtrlDown=2145,CtrlLeft=2115,CtrlRight=2116,CtrlPgUp=2132,CtrlPgDown=2118,
483
AltEsc=3001,AltEnter=3028,AltDel=3014,AltDelete=3163,AltTab=3165,
484
AltHome=3151,AltEnd=3159,AltIns=3162,AltUp=3152,
485
AltDown=3160,AltLeft=3155,AltRight=3157,AltPgUp=3153,AltPgDown=3161,
486
ShiftEsc=4027,ShiftEnter=4013,ShiftDel=4083,ShiftDelete=4008,ShiftTab=4009,
487
ShiftHome=4071,ShiftEnd=4079,ShiftIns=4082,ShiftUp=4072,ShiftDown=4080,
488
ShiftLeft=4075,ShiftRight=4077,ShiftPgUp=4073,ShiftPgDown=4081;
518
int Esc= 27,Enter= 13,Del=1083,Delete=1008,Tab=1009,Home=1071,End1=1079,
519
Ins=1082,Up=1072,Down=1080,Left=1075,Right=1077,PgUp=1073,PgDown=1081,
520
CtrlEsc=2027,CtrlEnter=2010,CtrlDel=2127,CtrlDelete=2147,CtrlTab=2148,
521
CtrlHome=2119,CtrlEnd=2117,CtrlIns=2146,CtrlUp=2141,
522
CtrlDown=2145,CtrlLeft=2115,CtrlRight=2116,CtrlPgUp=2132,CtrlPgDown=2118,
523
AltEsc=3001,AltEnter=3028,AltDel=3014,AltDelete=3163,AltTab=3165,
524
AltHome=3151,AltEnd=3159,AltIns=3162,AltUp=3152,
525
AltDown=3160,AltLeft=3155,AltRight=3157,AltPgUp=3153,AltPgDown=3161,
526
ShiftEsc=4027,ShiftEnter=4013,ShiftDel=4083,ShiftDelete=4008,ShiftTab=4009,
527
ShiftHome=4071,ShiftEnd=4079,ShiftIns=4082,ShiftUp=4072,ShiftDown=4080,
528
ShiftLeft=4075,ShiftRight=4077,ShiftPgUp=4073,ShiftPgDown=4081;
490
extern int Esc,Enter,Del,Delete,Tab,Home,End1,Ins,Up,Down,Left,Right,PgUp,PgDown,
491
CtrlEsc,CtrlEnter,CtrlDel,CtrlDelete,CtrlTab,CtrlHome,CtrlEnd,CtrlIns,
492
CtrlUp,CtrlDown,CtrlLeft,CtrlRight,CtrlPgUp,CtrlPgDown,
493
AltEsc,AltEnter,AltDel,AltDelete,AltTab,AltHome,AltEnd,AltIns,
494
AltUp,AltDown,AltLeft,AltRight,AltPgUp,AltPgDown,
495
ShiftEsc,ShiftEnter,ShiftDel,ShiftDelete,ShiftTab,ShiftHome,ShiftEnd,
496
ShiftIns,ShiftUp,ShiftDown,ShiftLeft,ShiftRight,ShiftPgUp,ShiftPgDown;
530
extern int Esc, Enter, Del, Delete, Tab, Home, End1, Ins, Up, Down, Left,
531
Right, PgUp, PgDown, CtrlEsc, CtrlEnter, CtrlDel, CtrlDelete, CtrlTab,
532
CtrlHome, CtrlEnd, CtrlIns, CtrlUp, CtrlDown, CtrlLeft, CtrlRight,
533
CtrlPgUp, CtrlPgDown, AltEsc, AltEnter, AltDel, AltDelete, AltTab,
534
AltHome, AltEnd, AltIns, AltUp, AltDown, AltLeft, AltRight, AltPgUp,
535
AltPgDown, ShiftEsc, ShiftEnter, ShiftDel, ShiftDelete, ShiftTab,
536
ShiftHome, ShiftEnd, ShiftIns, ShiftUp, ShiftDown, ShiftLeft,
537
ShiftRight, ShiftPgUp, ShiftPgDown;
499
#define PRS_ONE1 struct h_prs_one1
540
#define PRS_ONE1 struct h_prs_one1
501
//�������� �������� pole_bit
503
typedef unsigned short PRS_ONE;
506
#define PRS_ONE struct h_prs_one
507
PRS_ONE1 {BYTE code; WORD metri; };
510
uint typ:2, het:1, scob:1, dummi:12;
542
//Вариации описания pole_bit
544
typedef unsigned short PRS_ONE;
547
#define PRS_ONE struct h_prs_one
553
uint typ :2, het :1, scob :1, dummi :12;
519
/*-------------��������� �-���-------------*/
520
int init_lst(KNOT ***knot,int *k_bloc,int max_knot,KNOT **beg_free,int size_item);
521
KNOT *inc_lst(KNOT **beg,KNOT **beg_free);
522
KNOT *inc_after_lst(KNOT *ptr,KNOT **beg,KNOT **beg_free);
523
void del_lst(KNOT *ptr,KNOT **beg,KNOT **beg_free);
524
KNOT* DelLstNext(KNOT *ptr,KNOT **beg,KNOT **beg_free);
525
void free_lst(KNOT **knot,int k_bloc);
526
int memmove_m(void *out,void *in,long size);
527
int alloc_seg(KNOT **kn,int *kb,int max_knot,uint size_item,int *size_bloc);
562
/*-------------Прототипы ф-ций-------------*/
563
int init_lst(KNOT ***knot, int *k_bloc, int max_knot, KNOT **beg_free,
565
KNOT *inc_lst(KNOT **beg, KNOT **beg_free);
566
KNOT *inc_after_lst(KNOT *ptr, KNOT **beg, KNOT **beg_free);
567
void del_lst(KNOT *ptr, KNOT **beg, KNOT **beg_free);
568
KNOT* DelLstNext(KNOT *ptr, KNOT **beg, KNOT **beg_free);
569
void free_lst(KNOT **knot, int k_bloc);
570
int memmove_m(void *out, void *in, long size);
571
int alloc_seg(KNOT **kn, int *kb, int max_knot, uint size_item, int *size_bloc);
528
572
uint determine_free_memory(uint size);
529
573
void print_ptr(KNOT *beg);
530
574
void print_ptr_invert(KNOT *beg);
531
void pr_ptr(KNOT *ptr,char *str);
532
int read_frm(char *file_frm,FRAME ***frm_arr,int *k_arr_frm,FRAME ***frm,int *k_frm);
575
void pr_ptr(KNOT *ptr, char *str);
576
int read_frm(char *file_frm, FRAME ***frm_arr, int *k_arr_frm, FRAME ***frm,
533
578
void GetOldCoor(FRAME *f, POINT *old);
534
void RestoreOldCoorFrm (FRAME *f,FRAME *fo,float tg_ang);
535
void RestoreOldCoorRect(FRAME *f,RECT *fo);
536
int read_frmW(char *file_frm,POINT_H *CentrW,int *SizeX_W,int *SizeY_W,
579
void RestoreOldCoorFrm(FRAME *f, FRAME *fo, float tg_ang);
580
void RestoreOldCoorRect(FRAME *f, RECT *fo);
581
int read_frmW(char *file_frm, POINT_H *CentrW, int *SizeX_W, int *SizeY_W,
538
583
void PASC free_frm(FRAME **frm_arr,int k_arr_frm,FRAME **frm);
539
int unfold(FRAME **frm,int k_frm,TYPE *dist1,int ave_y,BOUND *bnd);
540
int clust_unfold(FRAME **frm,int k_frm,TYPE *dist,TYPE dp,
541
int max_cl,int *k_cl1,KNOT3 **beg_free1,KNOT3 **beg_cl);
542
int viz_clust_word(FRAME **frm,int k_frm,int k_cl,KNOT3 **beg_cl);
543
int comp_left(FRAME **a,FRAME **b);
544
int sort_lett(int k_cl,KNOT3 **beg_free1,KNOT3 **beg_cl,COMP_FUN CompFun);
545
int cut_word_unfold(int *k_cl1,KNOT3 **beg_cl);
546
int project_frm(FRAME **frm,int k_frm,float tg_ang,
547
int AllowW,POINT_H CentrW,long k_frmW);
584
int unfold(FRAME **frm, int k_frm, TYPE *dist1, int ave_y, BOUND *bnd);
585
int clust_unfold(FRAME **frm, int k_frm, TYPE *dist, TYPE dp, int max_cl,
586
int *k_cl1, KNOT3 **beg_free1, KNOT3 **beg_cl);
587
int viz_clust_word(FRAME **frm, int k_frm, int k_cl, KNOT3 **beg_cl);
588
int comp_left(FRAME **a, FRAME **b);
589
int sort_lett(int k_cl, KNOT3 **beg_free1, KNOT3 **beg_cl, COMP_FUN CompFun);
590
int cut_word_unfold(int *k_cl1, KNOT3 **beg_cl);
591
int project_frm(FRAME **frm, int k_frm, float tg_ang, int AllowW,
592
POINT_H CentrW, long k_frmW);
548
593
/*TYPE dist_frm(FRAME *f1,FRAME *f2);*/
549
594
//long time(void);
550
void sort_int(TYPE *a,int num,int *nodr);
551
int comp1(TYPE *a,TYPE *b);
552
int compF(float *a,float *b);
553
int compare(TYPE *a,TYPE *b);
554
int comp_long(DWORD *a,DWORD *b);
595
void sort_int(TYPE *a, int num, int *nodr);
596
int comp1(TYPE *a, TYPE *b);
597
int compF(float *a, float *b);
598
int compare(TYPE *a, TYPE *b);
599
int comp_long(uint32_t *a, uint32_t *b);
556
601
// void u4sort(void *base, int num, int width, int (*compare)());
558
int search_int(int *x,int n,int a);
559
#define TYPE int /*��� ����������� ������*/
603
int search_int(int *x, int n, int a);
604
#define TYPE int /*тип сортируемых данных*/
560
605
float tg(float ang);
561
606
//int est_struct(char *file_frm,char *file_pcx,FRAME ***frm_arr,int *k_arr_frm,
562
607
// FRAME ***frm1,int *k_frm1);
563
int filtr_size(FRAME **frm,int *k_frm1,int *kg1,int *kv1,int *kgv1,
564
int ave_x,int ave_y);
565
int ClassFrmSize(FRAME **frm,int *k_frm,int *k_small,int xmin,int ymin,int ymin1);
566
int ClassFrmSmall(FRAME **frm,int k_frm,int k_small,int *IndSmall,BOUND *bnd,
567
KNOT3 **beg_str,FRAME **frms,int k_str,int size_x,int size_y);
568
int d_small(FRAME *l,FRAME *s,int k);
569
int init_par(char *PathName,int reg);
570
int init_arr_frm(FRAME ***frm_arr,int *k_arr_frm,FRAME ***frm,int k_frm);
571
int est_frame_word(FRAME **frmw,int k_cl,KNOT3 **beg_cl);
572
int EstBndMinMax(short *up,short *down,int n,int NumIter,
573
short *t,short *b,int AveY,float k1,float k2);
574
int imax(short *x,int n,char *pr,int *imax);
575
int imin(short *x,int n,char *pr,int *imin);
576
int MaxArr(int *x,int n,int *PosExtr);
577
int MinArr(int *x,int n,int *PosExtr);
578
int ReAnalysStr(FRAME **f,int k,int Reg);
579
int RevizRule(BOUND *bnds,int dU,int dL,FRAME **str,int ksym,int DelMax,int flUpp);
580
int RevizRuleCol(BOUND *bnds,FRAME ***str,int *ksym,int k_str,int DelMax);
581
int ImFrmRule(FRAME ***str,int *ksym,int k_str,BOUND *bnd_str,int in);
608
int filtr_size(FRAME **frm, int *k_frm1, int *kg1, int *kv1, int *kgv1,
609
int ave_x, int ave_y);
610
int ClassFrmSize(FRAME **frm, int *k_frm, int *k_small, int xmin, int ymin,
612
int ClassFrmSmall(FRAME **frm, int k_frm, int k_small, int *IndSmall,
613
BOUND *bnd, KNOT3 **beg_str, FRAME **frms, int k_str, int size_x,
615
int d_small(FRAME *l, FRAME *s, int k);
616
int init_par(char *PathName, int reg);
617
int init_arr_frm(FRAME ***frm_arr, int *k_arr_frm, FRAME ***frm, int k_frm);
618
int est_frame_word(FRAME **frmw, int k_cl, KNOT3 **beg_cl);
619
int EstBndMinMax(short *up, short *down, int n, int NumIter, short *t,
620
short *b, int AveY, float k1, float k2);
621
int imax(short *x, int n, char *pr, int *imax);
622
int imin(short *x, int n, char *pr, int *imin);
623
int MaxArr(int *x, int n, int *PosExtr);
624
int MinArr(int *x, int n, int *PosExtr);
625
int ReAnalysStr(FRAME **f, int k, int Reg);
626
int RevizRule(BOUND *bnds, int dU, int dL, FRAME **str, int ksym, int DelMax,
628
int RevizRuleCol(BOUND *bnds, FRAME ***str, int *ksym, int k_str, int DelMax);
629
int ImFrmRule(FRAME ***str, int *ksym, int k_str, BOUND *bnd_str, int in);
582
630
#define COEFF 300
583
int est_angle_word(int k_cl,KNOT3 **beg_cl,float *tg_ang);
631
int est_angle_word(int k_cl, KNOT3 **beg_cl, float *tg_ang);
584
632
//int DeSkewCol(BOUND *bnd_str,FRAME ***str,int *ksym,int k_str,int del,
585
633
// int MaxDelh,int k);
586
int DeSkewCol(BOUND *bnd_str,FRAME ***str,int *ksym,int k_str,int del,
587
int MaxDelh,int k,FRAME **frm,int k_frm);
588
/*�������-������ � �������������� ��*/
634
int DeSkewCol(BOUND *bnd_str, FRAME ***str, int *ksym, int k_str, int del,
635
int MaxDelh, int k, FRAME **frm, int k_frm);
636
/*Кластер-анализ с использованием АС*/
589
637
#define MAX_ENV 100
590
638
#define DIST_LETTER 0
591
639
#define DIST_WORD 1
594
642
#define DIST_LINE1 4
595
643
#define DIST_DOT 5
596
644
#define DIST_DIAG 6
597
void bound_frm(FRAME **frm,int k_frm,BOUND* bnd);
598
static int comp(TYPE *a,TYPE *b);
599
int est_size_frm(FRAME **frm,int k_frm,int *size_x,int *size_y,int step);
600
void PutUpDown(KNOT3 *beg,int reg,short up,short down);
601
void GetUpDown(KNOT3 *beg,int reg,short *up,short *down);
602
TYPE dist_word(FRAME *f1,FRAME *f2);
603
int Statist(int *arr,int n,int *ave,int *sig,int *med,int *mod,int regim);
604
int statis2(TYPE *arr,int n,TYPE *med,TYPE *mod,int SizeWin,int *NumMod);
605
int statis1(TYPE *arr,int n,TYPE *ave1,TYPE *sig1,TYPE *med,TYPE *mod,int regim);
606
int statis(TYPE *arr,int n,TYPE *ave1,TYPE *sig1,TYPE *med,TYPE *mod,int regim);
607
int statisF(float *arr,int n,float *ave,float *sig,float *med,float *mod);
608
int sort_str(int k_str,KNOT3 **beg_str,FRAME **frms);
609
int sort1_str(int k_str,FRAME ***str,int *ksym,FRAME **frms);
610
int comp_vert(FRAME **a,FRAME **b);
645
void bound_frm(FRAME **frm, int k_frm, BOUND* bnd);
646
static int comp(TYPE *a, TYPE *b);
647
int est_size_frm(FRAME **frm, int k_frm, int *size_x, int *size_y, int step);
648
void PutUpDown(KNOT3 *beg, int reg, short up, short down);
649
void GetUpDown(KNOT3 *beg, int reg, short *up, short *down);
650
TYPE dist_word(FRAME *f1, FRAME *f2);
651
int Statist(int *arr, int n, int *ave, int *sig, int *med, int *mod, int regim);
652
int statis2(TYPE *arr, int n, TYPE *med, TYPE *mod, int SizeWin, int *NumMod);
653
int statis1(TYPE *arr, int n, TYPE *ave1, TYPE *sig1, TYPE *med, TYPE *mod,
655
int statis(TYPE *arr, int n, TYPE *ave1, TYPE *sig1, TYPE *med, TYPE *mod,
657
int statisF(float *arr, int n, float *ave, float *sig, float *med, float *mod);
658
int sort_str(int k_str, KNOT3 **beg_str, FRAME **frms);
659
int sort1_str(int k_str, FRAME ***str, int *ksym, FRAME **frms);
660
int comp_vert(FRAME **a, FRAME **b);
611
661
//int gen_str(KNOT3 **beg_str,int k_str,FRAME ***str,int *ksym);
612
int gen_str(KNOT3 **beg_str,int k_str,FRAME ***str,int *ksym,FRAME **frm,
613
int *IndSmall,int k_frm,int k_small);
614
int union_str(int *k_str1,FRAME **frms,KNOT3 **beg_str,int *ksym,
615
KNOT3 **beg_freew,int size_x,int size_y);
616
int dist_x(FRAME *f1,FRAME *f2);
618
(FRAME ****str1,int **ksym1,int *k_str1,FRAME ***frms1,int size_x,int kmax_str);
662
int gen_str(KNOT3 **beg_str, int k_str, FRAME ***str, int *ksym, FRAME **frm,
663
int *IndSmall, int k_frm, int k_small);
664
int union_str(int *k_str1, FRAME **frms, KNOT3 **beg_str, int *ksym,
665
KNOT3 **beg_freew, int size_x, int size_y);
666
int dist_x(FRAME *f1, FRAME *f2);
667
int cut_str(FRAME ****str1, int **ksym1, int *k_str1, FRAME ***frms1,
668
int size_x, int kmax_str);
619
669
float f_inc(int v_krat);
620
int divide_str_substr(int k,int ns,FRAME ****str1,int **ksym1,int *k_str1,
621
FRAME*** frms1,int kmax_str,BOUND *bnd_str);
622
void out_vih(FRAME ***str,int *ksym,int k_str,char *file);
623
int divide_str_word(FRAME ***str,int *ksym,int k_str,int size_x);
624
int DivideColParag(FRAME ***str,int *ksym,int k_str,int size_x);
625
int union_comp(FRAME **f,int ksym,int ave_x,int ave_y);
626
int TestPoint(FRAME f1,FRAME f2,int fl,int ave_y);
627
int find_comma(FRAME **f,int ksym,FRAME *frms,int ave_x,int ave_y);
628
int DetectHeadLine(FRAME ***str,int *ksym,int k_str,FRAME **frms,int ave_y);
629
int UnionPairStr(FRAME ***str,int *ksym,int *k_str1,FRAME **frms,int SizeY);
630
int CalcHist(int *x,int *krat,int n,int *MinX,int *MaxX,int **hist);
631
int EstBndStrHist(FRAME **f,int n,BOUND *bnd,int ksym_ave,int size_x);
632
int AnalysRuler(FRAME **str,int ksym,BOUND *frms,int DelMax,int DelMin,
633
int *AllU,int *AllD);
634
int est_monospace(FRAME ***str,int *ksym,int k_str,int *space1);
635
int DetectColGraph(POINT_H CentrW,long k_frmw,FRAME ***str,int *ksym,int k_str,
636
BOUND bndt,BOUND *BndStr);
637
int calc_frm_str(FRAME **str,int ksym,BOUND *bnd);
670
int divide_str_substr(int k, int ns, FRAME ****str1, int **ksym1, int *k_str1,
671
FRAME*** frms1, int kmax_str, BOUND *bnd_str);
672
void out_vih(FRAME ***str, int *ksym, int k_str, char *file);
673
int divide_str_word(FRAME ***str, int *ksym, int k_str, int size_x);
674
int DivideColParag(FRAME ***str, int *ksym, int k_str, int size_x);
675
int union_comp(FRAME **f, int ksym, int ave_x, int ave_y);
676
int TestPoint(FRAME f1, FRAME f2, int fl, int ave_y);
677
int find_comma(FRAME **f, int ksym, FRAME *frms, int ave_x, int ave_y);
678
int DetectHeadLine(FRAME ***str, int *ksym, int k_str, FRAME **frms, int ave_y);
679
int UnionPairStr(FRAME ***str, int *ksym, int *k_str1, FRAME **frms, int SizeY);
680
int CalcHist(int *x, int *krat, int n, int *MinX, int *MaxX, int **hist);
681
int EstBndStrHist(FRAME **f, int n, BOUND *bnd, int ksym_ave, int size_x);
682
int AnalysRuler(FRAME **str, int ksym, BOUND *frms, int DelMax, int DelMin,
683
int *AllU, int *AllD);
684
int est_monospace(FRAME ***str, int *ksym, int k_str, int *space1);
685
int DetectColGraph(POINT_H CentrW, long k_frmw, FRAME ***str, int *ksym,
686
int k_str, BOUND bndt, BOUND *BndStr);
687
int calc_frm_str(FRAME **str, int ksym, BOUND *bnd);
638
688
void corr_title_prs(char *file_prs_out);
639
uint mark_term(uint typ_term,uint param);
640
void image_prs_str(uint *sym,int len,int col);
689
uint mark_term(uint typ_term, uint param);
690
void image_prs_str(uint *sym, int len, int col);
641
691
char *getpath(char *buf);
642
//����� ����� ���������
643
int CutComp(FRAME ***str,int *ksym,int k_str,FRAME **frms,FRAME **frm,int *k_frm);
644
int FindCutComp(FRAME ***str,int *ksym,int k_str,FRAME **frms,int SizeY);
645
int breath(int **pprs,int j,int *jj);
646
//int CutVertComp(WORD **pprs,int *num,int up,int down,
692
//Резка рамок компонент
693
int CutComp(FRAME ***str, int *ksym, int k_str, FRAME **frms, FRAME **frm,
695
int FindCutComp(FRAME ***str, int *ksym, int k_str, FRAME **frms, int SizeY);
696
int breath(int **pprs, int j, int *jj);
697
//int CutVertComp(uint16_t **pprs,int *num,int up,int down,
647
698
// int *LineCut,int reg,int dir,int *nn_alt,int *nCurrA,int *found_max);
648
int CutVertComp(int **pprs,int *num,int up,int down,
649
int *LineCut,int reg,int dir,int *num_alt,int *nCurrA,int *found_max);
699
int CutVertComp(int **pprs, int *num, int up, int down, int *LineCut, int reg,
700
int dir, int *num_alt, int *nCurrA, int *found_max);
662
#define MAX_LEV 6 /*����.����� �������*/
663
//==��������.������==
713
#define MAX_LEV 6 /*макс.число уровней*/
714
//==Иерархич.индекс==
669
#define MAX_COL 45 /*����.����� ��������. �������*/
670
/*����� ���� �������, ����� ���������, ������� � ������ �� �������*/
671
int search_col(FRAME **frm,int k_frm,int *intr,int *k_int1,BOUND *bnd,
672
int ave_dir,int ave_ort,int reg);
673
int inc_g(KNOTG *after,KNOTG **begg,KNOTG **freeg,KNOTG **ptrg,
674
FRML **begf,FRML **freef,FRML **ptrf, int lev);
675
int est_string(FRAME **frm,int k_frm,FRAME ****str1,int **ksym1,int *k_str1);
676
int EstSizeUppLow_Col(FRAME ***str,int *ksym,int k_str,BOUND *bnd_str,
677
int *SizeUpp,int *SizeLow);
678
int inc_g(KNOTG *after,KNOTG **begg,KNOTG **freeg,KNOTG **ptrg,
679
FRML **begf,FRML **freef,FRML **ptrf, int lev);
680
int class_frm_col(FRAME **frm,int k_frm,BOUND *bnd,int ave_x,int ave_y,int reg,
681
int *intr,int *k_int);
682
int calc_stat_col(FRAME ***str,int *ksym,int k_str,BOUND *bnd_str);
683
//---����������� "�����-�����"----
684
long DistMinFrm(FRAME *f1,FRAME *f2);
685
int DistFrmCol(FRAME *f1,FRAME *f2,int ph,int pv);
686
int GenAS(FRAME **frm,int k_frm,int dx,int dy,BOUND *bnd,KNOT3 *beg_free,
687
int value,AS *As,RECT Rect);
688
int EstBetwLine(AS *As,int *BetwLine,int k_frm);
689
int ClassFrmEnv(FRAME **frm,int *k_frm1,int *k_izo1,AS *As,int BetwLine,
691
int ClassFrmOther(FRAME **frm, int *k_frm1,int k_other,KNOT3 **beg_cl,int k_cl,
692
KNOT3 *beg_free,int AveX,int AveY,int BetwLine,BOUND *bnd,
693
int *intr,int *k_col);
694
int SplitCol(FRAME **frm,int *k_frm1,int SizeXGlob,int SizeYGlob,BOUND *bndc,
695
KNOT3 **beg_free1,int **intr1,int *kcol,int *NumMax);
696
//--��������� ������ �� �������--
697
int CalcHistVert(FRAME ***f1,int k_str,int *ksym1,BOUND *bnds1);
698
int OrtFoure(float *y,float *Re,float *Im,float *ys,float *Err,int k,int p,
699
int na,int beg,int end);
720
#define MAX_COL 45 /*Макс.число терминал. колонок*/
721
/*Рамки всех уровней, кроме компонент, связаны в списки по уровням*/
722
int search_col(FRAME **frm, int k_frm, int *intr, int *k_int1, BOUND *bnd,
723
int ave_dir, int ave_ort, int reg);
724
int inc_g(KNOTG *after, KNOTG **begg, KNOTG **freeg, KNOTG **ptrg, FRML **begf,
725
FRML **freef, FRML **ptrf, int lev);
727
est_string(FRAME **frm, int k_frm, FRAME ****str1, int **ksym1,
729
int EstSizeUppLow_Col(FRAME ***str, int *ksym, int k_str, BOUND *bnd_str,
730
int *SizeUpp, int *SizeLow);
731
int inc_g(KNOTG *after, KNOTG **begg, KNOTG **freeg, KNOTG **ptrg, FRML **begf,
732
FRML **freef, FRML **ptrf, int lev);
733
int class_frm_col(FRAME **frm, int k_frm, BOUND *bnd, int ave_x, int ave_y,
734
int reg, int *intr, int *k_int);
735
int calc_stat_col(FRAME ***str, int *ksym, int k_str, BOUND *bnd_str);
736
//---Колонизация "снизу-вверх"----
737
long DistMinFrm(FRAME *f1, FRAME *f2);
738
int DistFrmCol(FRAME *f1, FRAME *f2, int ph, int pv);
739
int GenAS(FRAME **frm, int k_frm, int dx, int dy, BOUND *bnd, KNOT3 *beg_free,
740
int value, AS *As, RECT Rect);
741
int EstBetwLine(AS *As, int *BetwLine, int k_frm);
742
int ClassFrmEnv(FRAME **frm, int *k_frm1, int *k_izo1, AS *As, int BetwLine,
744
int ClassFrmOther(FRAME **frm, int *k_frm1, int k_other, KNOT3 **beg_cl,
745
int k_cl, KNOT3 *beg_free, int AveX, int AveY, int BetwLine,
746
BOUND *bnd, int *intr, int *k_col);
747
int SplitCol(FRAME **frm, int *k_frm1, int SizeXGlob, int SizeYGlob,
748
BOUND *bndc, KNOT3 **beg_free1, int **intr1, int *kcol, int *NumMax);
749
//--Отделение текста от графики--
750
int CalcHistVert(FRAME ***f1, int k_str, int *ksym1, BOUND *bnds1);
751
int OrtFoure(float *y, float *Re, float *Im, float *ys, float *Err, int k,
752
int p, int na, int beg, int end);
702
LONG filelength_m(FILE *stream);
755
int32_t filelength_m(FILE *stream);
704
int hread_m(void *buf,int size,int count,FILE *stream);
705
int CopyFile_my(char *NameIn,char *NameOut);
706
int fgets_m(char *str,int max_len,FILE *f);
757
int hread_m(void *buf, int size, int count, FILE *stream);
758
int CopyFile_my(char *NameIn, char *NameOut);
759
int fgets_m(char *str, int max_len, FILE *f);
707
760
char get_kod(FILE *f);
708
int fgets1_m(char *str,int max_len,FILE *f);
761
int fgets1_m(char *str, int max_len, FILE *f);
709
762
char get1_kod(FILE *f);
710
char *get_param(char *str,char *param,int max_len);
711
char *get1_param(char *str,char *param,int max_len);
763
char *get_param(char *str, char *param, int max_len);
764
char *get1_param(char *str, char *param, int max_len);
717
extern long na,ko,pos1; extern FILE *fip,*out,*out_rb;
719
extern void *low; /*������ ������� �������� ��������� - ��� ��������*/
720
extern char *s1,*s2,*s3; /*��������� ��� �����������*/
722
extern int count,rou;
724
extern STAT_COL stat_col;
725
extern int dx_prs,dy_prs;
726
extern int k_prop,k_mono;
728
extern char dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];
729
extern char Fullpath[255];
730
extern int SizeXGlob,SizeYGlob;
732
extern int NumCut; extern FRAME *Cut;
733
extern int SizeX_W,SizeY_W;
734
extern float AveNumCrossCol,AveNumCross1Col,AveThickCol,AveThick1Col;
736
extern int CountCol,Percent1,Percent2,Percent3,NumColt;
737
extern char FileParStr[MAXFILENAME];
738
extern WORD ScanResolution;extern float MulScanRes;
740
extern FUN_POMP pump;
741
extern FUN_MESS FunMessage;
742
extern int WidthPRS,MaxShtrih;
770
extern long na,ko,pos1; extern FILE *fip,*out,*out_rb;
772
extern void *low; /*нижняя граница загрузки программы - для контроля*/
773
extern char *s1,*s2,*s3; /*Сообщения для интерактива*/
775
extern int count,rou;
777
extern STAT_COL stat_col;
778
extern int dx_prs,dy_prs;
779
extern int k_prop,k_mono;
781
extern char dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];
782
extern char Fullpath[255];
783
extern int SizeXGlob,SizeYGlob;
785
extern int NumCut; extern FRAME *Cut;
786
extern int SizeX_W,SizeY_W;
787
extern float AveNumCrossCol,AveNumCross1Col,AveThickCol,AveThick1Col;
789
extern int CountCol,Percent1,Percent2,Percent3,NumColt;
790
extern char FileParStr[MAXFILENAME];
791
extern uint16_t ScanResolution;extern float MulScanRes;
793
extern FUN_POMP pump;
794
extern FUN_MESS FunMessage;
795
extern int WidthPRS,MaxShtrih;
746
long na=0,ko=-1,pos1; FILE *fip,*out,*out_rb;
748
void *low; /*������ ������� �������� ��������� - ��� ��������*/
749
const char *s1="Esc - continue;",*s2="Up,Down,Left,Right - Move image;",
750
*s3="Ctrl/<Up,Down,Left,Right> - Scale image";
751
const char *abcd="|\\-/";
753
int h_term;/*������� ������� ������ PRS-�����(��� ������ � ����������)*/
754
STAT_COL stat_col;/*���������� �� ������� ������� �������*/
755
int dx_prs,dy_prs;/*�������� PRS-�����*/
756
int k_prop,k_mono;//���-�� �������. � ���������. ������� � ����� ������ ����������
757
int upi;/*������� ����� ��� ���������*/
758
char drive[_MAX_DRIVE],dir[_MAX_DIR],fname[_MAX_FNAME],ext[_MAX_EXT];
760
//char NameFuncErr[100],Buff[60]; int NumErr;
761
int SizeXGlob,SizeYGlob;
763
int NumCut; FRAME *Cut; //������� � ����� ����������� ���������
765
float AveNumCrossCol,AveNumCross1Col,AveThickCol,AveThick1Col;
767
int CountCol,Percent1=5,Percent2=55,Percent3=40,NumColt;
768
char FileParStr[MAXFILENAME];
769
WORD ScanResolution;float MulScanRes;//���������� ������� � ������.���������
770
int Break_on=0; // if == 1 => break process
771
FUN_POMP pump; // ��������� � �����
772
FUN_MESS FunMessage; //� ������ DLL ������ SendMessage
773
int WidthPRS,MaxShtrih;
799
long na=0,ko=-1,pos1; FILE *fip,*out,*out_rb;
801
void *low; /*нижняя граница загрузки программы - для контроля*/
802
const char *s1="Esc - continue;",*s2="Up,Down,Left,Right - Move image;",
803
*s3="Ctrl/<Up,Down,Left,Right> - Scale image";
804
const char *abcd="|\\-/";
806
int h_term;/*Счетчик текущей высоты PRS-линии(для записи в терминатор)*/
807
STAT_COL stat_col;/*Статистика по строкам текущей колонки*/
808
int dx_prs,dy_prs;/*Габариты PRS-файла*/
809
int k_prop,k_mono;//Кол-ва пропорц. и моноспейс. колонок и общая оценка моноспейса
810
int upi;/*Счетчик строк для рисовалки*/
811
char drive[_MAX_DRIVE],dir[_MAX_DIR],fname[_MAX_FNAME],ext[_MAX_EXT];
813
//char NameFuncErr[100],Buff[60]; int NumErr;
814
int SizeXGlob,SizeYGlob;
816
int NumCut; FRAME *Cut; //Счетчик и буфер разрезанных компонент
818
float AveNumCrossCol,AveNumCross1Col,AveThickCol,AveThick1Col;
820
int CountCol,Percent1=5,Percent2=55,Percent3=40,NumColt;
821
char FileParStr[MAXFILENAME];
822
uint16_t ScanResolution;float MulScanRes;//Разрешения сканера и нормир.множитель
823
int Break_on=0; // if == 1 => break process
824
FUN_POMP pump; // вставляем в цикле
825
FUN_MESS FunMessage; //в режиме DLL вместо SendMessage
826
int WidthPRS,MaxShtrih;
777
/*dv - ��������. ������=�������� �� ������� �����,������ � �������
778
dg - ��������. ������ - ���������� ����� ������� �� �����������,
779
���� ��� �� �������������, ���� ������ ����������*/
830
/*dv - вертикал. размер=минимуму из невязок низов,верхов и середин
831
dg - горизонт. размер - расстояние между рамками по горизонтали,
832
если они не перекрываются, либо размер перекрытия*/
780
833
/*#define dist_frm(f1,f2,dist) { int dv,d_up,d_down;\
781
834
d_up= abs(f1->up - f2->up); \
782
835
d_down=abs(f1->down - f2->down); \
818
871
int find1_beg(int right,FRAME **str,int ksym,int lev);
819
872
void union1_frm(FRAME **frm,int k_frm,BOUND *bnd);
821
//---------�������� �����------------
874
//---------ОПИСАНИЕ ЛИНИЙ------------
824
#error ...... NOT MAIN5 ......
877
#error ...... NOT MAIN5 ......
829
// #include "detlin.h"
832
int ReadLines(char *FileLine,LINES *Lines1,int *NumStretchAll1);
833
int TestLines(LINES *Lines1);
834
int EstAngleLine(LINES *Lines1,float *tg_ang1,int NumStretchAll);
835
//int PASC CorrectImage(BMPL *obmp,RECT *lpRect,int nRect);
836
//int PASC PutImage(BMPL *obmp,char *outname,int teep);
837
int Free_Line(LINES *Lines);
838
//--����������� ������������ ��������� �����--
841
#define COINCIDE_STRETCH 4
842
//--���������� �����--
848
#define DOUBLE_LINE 1
850
#define HIDDEN_LINE 3
852
#define MAX_TYPE_LINE 6
853
//--�����. ��� �����. (.) �������--
856
//���.�������, ��� ������� ��� ������ ������� ���� ������� �����
857
//fi|10' |20' |30' |60' |90' |120' |150' |180' |210' |
858
//tg|.0029|.0058|.0087|.0175|.0262|.0349|.0437|.0524|.0612|
859
#define MIN_TANG .001
864
typedef struct hSTRET
865
{ short xn,xk,yn,yk;//Stretch-Coordinate
866
float k; //������� ������ ����� y=kx+b
867
short thickness; //������� ������� �������
868
float angle; //���� ������� = atan2(..)
869
BYTE FeatOrient; //HOR_LINE || VER_LINE
870
BYTE TypeLine; //��� ����� DOT_LINE || SOLID_LINE || DOUBLE_LINE
871
short LenShadow; //����� ����������
872
void *ptr; //���������. ��-�� (��� FindDot)
875
typedef struct hSTRET_P
877
short Feat; //POINT_BEG || POINT_END
880
int GetConnectLine(STRET_P *Obj1,STRET_P *Obj2,long ThresEvkl);
881
int GetConnAxis(STRET *Obj1,STRET *Obj2);
882
int ClustLine(LINES *Lines, short NumStretchAll,float *tg_ang1,long ThresEvkl,
883
int size_x,int size_y,STRET **LineV,short *NumLV,STRET **LineH,short *NumLH,
884
FRAME **frm,int *NumFrm);
885
int MetrRectSoAxis(FRAME *ff,KNOT3 *ptr,KNOT3 **beg_cl);
886
int UnionEtalonClust(KNOT3 **beg_cl,KNOT3 **bs, int *k_bs,FRAME *ff,RECT **ReUn);
887
void UnionStret(STRET *Stret,int *IndStretLine,int Num,BYTE Orient,
888
STRET *Stret1,int RegDouble);
889
int compKNOT3_STRET_xn(KNOT3 **a,KNOT3 **b);
890
int compKNOT3_STRET_yn(KNOT3 **a,KNOT3 **b);
891
int comp_STRET_xn(STRET**a,STRET**b);
892
int comp_STRET_yn(STRET**a,STRET**b);
893
int ProcSoAxis(BYTE Orient,STRET *Stret1,short NumS,BOUND bnd,
894
float ThresDelOrient,short ThresShadow,short ThresDouble,
895
int size_x,int size_y,
896
KNOT3 **beg_cl,KNOT3 **beg_free1,short *k_cl1,STRET_P **PtrObj,
898
short FilterPiecesLines(FRAME **frm,int *k_frm1,
899
float kX,float kY,int SizeX,int SizeY,short Thickness);
900
short FilterPiecesLines1(FRAME **frm,int *k_frm1,STRET *Stret,short NumStret,
901
int Reg,short Thickness,short ThrShadow);
902
short LikeFrmLineV(STRET *s, FRAME *f,short ThrShadow);
903
short LikeFrmLineH(STRET *s, FRAME *f,short ThrShadow);
904
short AccumulDelRect(int *nRect,short Num,RECT *Rect,int Reg,STRET *s,
905
short MaxDelPix,BMPL *Bmp,float si,float co,float tg_ang);
906
void CreateRect(int xn,int xk,int yn,int yk,STRET *s,RECT *r,int Reg,
908
int CopyBMPLMem(BMPL *BmpIn,BMPL *BmpOut);
882
// #include "detlin.h"
885
int ReadLines(char *FileLine,LINES *Lines1,int *NumStretchAll1);
886
int TestLines(LINES *Lines1);
887
int EstAngleLine(LINES *Lines1,float *tg_ang1,int NumStretchAll);
888
//int PASC CorrectImage(BMPL *obmp,RECT *lpRect,int nRect);
889
//int PASC PutImage(BMPL *obmp,char *outname,int teep);
890
int Free_Line(LINES *Lines);
891
//--Диагностика тестировщика структуры линий--
894
#define COINCIDE_STRETCH 4
895
//--Ориентация линии--
901
#define DOUBLE_LINE 1
903
#define HIDDEN_LINE 3
905
#define MAX_TYPE_LINE 6
906
//--Начал. или конеч. (.) отрезка--
909
//Мин.тангенс, при котором еще делаем поворот всей системы линий
910
//fi|10' |20' |30' |60' |90' |120' |150' |180' |210' |
911
//tg|.0029|.0058|.0087|.0175|.0262|.0349|.0437|.0524|.0612|
912
#define MIN_TANG .001
916
typedef struct hSTRET
917
{ short xn,xk,yn,yk;//Stretch-Coordinate
918
float k; //Тангенс наклон линии y=kx+b
919
short thickness; //средняя толщина отрезка
920
float angle; //Угол наклона = atan2(..)
921
uchar FeatOrient; //HOR_LINE || VER_LINE
922
uchar TypeLine; //Тип линии DOT_LINE || SOLID_LINE || DOUBLE_LINE
923
short LenShadow; //Длина перекрытия
924
void *ptr; //вспомогат. ук-ль (для FindDot)
927
typedef struct hSTRET_P
929
short Feat; //POINT_BEG || POINT_END
932
int GetConnectLine(STRET_P *Obj1,STRET_P *Obj2,long ThresEvkl);
933
int GetConnAxis(STRET *Obj1,STRET *Obj2);
934
int ClustLine(LINES *Lines, short NumStretchAll,float *tg_ang1,long ThresEvkl,
935
int size_x,int size_y,STRET **LineV,short *NumLV,STRET **LineH,short *NumLH,
936
FRAME **frm,int *NumFrm);
937
int MetrRectSoAxis(FRAME *ff,KNOT3 *ptr,KNOT3 **beg_cl);
938
int UnionEtalonClust(KNOT3 **beg_cl,KNOT3 **bs, int *k_bs,FRAME *ff,RECT **ReUn);
939
void UnionStret(STRET *Stret,int *IndStretLine,int Num,uchar Orient,
940
STRET *Stret1,int RegDouble);
941
int compKNOT3_STRET_xn(KNOT3 **a,KNOT3 **b);
942
int compKNOT3_STRET_yn(KNOT3 **a,KNOT3 **b);
943
int comp_STRET_xn(STRET**a,STRET**b);
944
int comp_STRET_yn(STRET**a,STRET**b);
945
int ProcSoAxis(uchar Orient,STRET *Stret1,short NumS,BOUND bnd,
946
float ThresDelOrient,short ThresShadow,short ThresDouble,
947
int size_x,int size_y,
948
KNOT3 **beg_cl,KNOT3 **beg_free1,short *k_cl1,STRET_P **PtrObj,
950
short FilterPiecesLines(FRAME **frm,int *k_frm1,
951
float kX,float kY,int SizeX,int SizeY,short Thickness);
952
short FilterPiecesLines1(FRAME **frm,int *k_frm1,STRET *Stret,short NumStret,
953
int Reg,short Thickness,short ThrShadow);
954
short LikeFrmLineV(STRET *s, FRAME *f,short ThrShadow);
955
short LikeFrmLineH(STRET *s, FRAME *f,short ThrShadow);
956
short AccumulDelRect(int *nRect,short Num,RECT *Rect,int Reg,STRET *s,
957
short MaxDelPix,BMPL *Bmp,float si,float co,float tg_ang);
958
void CreateRect(int xn,int xk,int yn,int yk,STRET *s,RECT *r,int Reg,
960
int CopyBMPLMem(BMPL *BmpIn,BMPL *BmpOut);
911
//�������� � ��300-dpi SCAN RESOLUTION
963
//пересчет к не300-dpi SCAN RESOLUTION
912
964
#define NORM_SCAN(value) ((int)(MulScanRes*value))
914
966
#include "undef32.h"
916
968
#include "wind32.h"
917
969
#define NOT_ALLOC -3
918
//�������� �-��� ��������������
970
//Основная ф-ция структурайзера
920
int PASC est_column(char *file_frm,char *file_prs,INF_TREE **InfStr);
972
int PASC est_column(char *file_frm,char *file_prs,INF_TREE **InfStr);
922
974
int PASC FreeInfTree(INF_TREE *Inf);
923
975
void PASC SetMessage(FUN_MESS ExtFunMessage);
924
976
void PASC SetBreakStr(FUN_POMP Ext_pump);
925
977
void PASC OnBreakStr(int ExtBreak_on);
926
978
void PASC InitEstStruct(FUN_MESS ExtFunMessage,FUN_POMP Ext_pump,
927
char **ParStruct,char **ParTabl,char **ParLine);
979
char **ParStruct,char **ParTabl,char **ParLine);
928
980
void PASC CloseEstStruct(char *ParStruct,char *ParTabl,char *ParLine);
929
981
int TestBreak(void);
930
982
void FreeAllStruct(FRAME **frm_arr,int k_arr_frm,FRAME **frm,
931
STRET *LineV,STRET *LineH,INF_TREE *Inf);
983
STRET *LineV,STRET *LineH,INF_TREE *Inf);
933
985
int EstBottomStr(FRAME **f,int NumSym,int *Bottom,int dyLow,int dyUpp);
934
986
int DetectIndice(FRAME ***sym,int *ksym,int *kstr,BOUND *bnds,int dyLow,int dyUpp);
936
988
int FindFractCell(FRAME ***sym,int *ksym,STAT_CELL *StatCell);
938
990
int FindMultiPointCell(FRAME ***sym,int *ksym,int kstr,STAT_CELL *StatCell);
939
//--�������������� ������--
991
//--Внутриячеистый фильтр--
940
992
int FilterNoiseCell(KNOTT *Knott,STAT_CELL *StatCell,INF_CELL *InfCell,FRAME **frm);
942
994
int GetCriptDir(char *path,int len);
943
995
int GetTypeDoc(void);
945
// int WINAPI adv4prs_conv(char *prs_name,BMPL *BmpIn,int teep);
946
// int /*FAR PASCAL _export */ WINAPI _export ConvertImage(char far *infile,char far *outfile,int teepBMPHorFILE,
947
// int teep,float tg_ugol);
997
// int WINAPI adv4prs_conv(char *prs_name,BMPL *BmpIn,int teep);
998
// int /*FAR PASCAL _export */ WINAPI _export ConvertImage(char far *infile,char far *outfile,int teepBMPHorFILE,
999
// int teep,float tg_ugol);
950
1002
//=== K R E S T ===
951
1003
int EstAnglePlain(FRAME **frm,int NumFrm,float *tg_ang);
952
1004
int PASC DetectStringRECT(RECT *Rect,int NumFrm,float tg_ang,
953
RECT ***StrRect1,int **NumSym1,int *NumStr1);
1005
RECT ***StrRect1,int **NumSym1,int *NumStr1);
954
1006
//=== P R A F A X ===
955
1007
int PASC InitExtrSym
956
(char *FileRb,int WidthPRS,FRAME ***frm,int *NumFrm,int Reg,FRAME *kramki);
1008
(char *FileRb,int WidthPRS,FRAME ***frm,int *NumFrm,int Reg,FRAME *kramki);
957
1009
void PASC CloseExtrSym(FRAME **frm);
958
1010
int PASC DetectLineRaster(char *file_pcx,char *FileOut,STRET **Stret1,
959
int *NumStretchAll1);
1011
int *NumStretchAll1);
960
1012
int PASC SaveLine(int flPRA,STRET *Stret,int NumStret);
961
1013
int PASC ExtractComp(PRS_ONE *sym1,long *LenSym,FRAME *ff,char **symH1);
962
1014
int PASC ExtractComp3(PRS_ONE *sym1,long *LenSym,FRAME *ff,char **symH1);