~ubuntu-branches/ubuntu/precise/cuneiform/precise

« back to all changes in this revision

Viewing changes to cuneiform_src/Kern/hhh/lst3_win.h

  • Committer: Bazaar Package Importer
  • Author(s): Jakub Wilk, c-assert.diff, slovenian-slv.diff
  • Date: 2011-01-26 21:53:07 UTC
  • mfrom: (5.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20110126215307-62x61mcesr607qb7
Tags: 1.0.0+dfsg-2
* Upload to unstable.
* Explicitly build-depend on pkg-config. Thanks to Stefano Rivera for the
  bug report.
* Add Vcs-* fields.
* Use the standard C assert() macro, rather than custom Cuneiform one.
  [c-assert.diff]
* Pass CFLAGS, CXXFLAGS and LDFLAGS (get from dpkg-buildflags) to cmake
  (closes: #608345). Thanks to Sami Liedes for the bug report.
  + Build depend on dpkg-dev (>= 1.15.7).
* Pass --parallel to dh.
  + Bump debhelper minimum version to 7.4.10.
* Update debian/copyright to the latest DEP-5 version.
* Bump year in debian/copyright.
* Explicitly link to GraphicsMagick (rather than via the ImageMagick
  compatibility layer).
* Don't ship /usr/lib/cuneiform/*.so symlinks. These libraries are
  considered private, at least until #598616 is fixed.
* Rename some private variables in debian/rules to make them lowercase.
* Update patch headers.
* Provide proper ‘build-arch’ and ‘build-indep’ targets in debian/rules.
* Document input format in the manual page (closes: #572061). Thanks to
  Janusz S. Bień for the bug report.
* Use ‘slv’ (rather than ‘slo’) as language code for Slovenian.
  [slovenian-slv.diff]
* Fix package description: Slovenian is supported, Slovak is not.
* Improve documentation of the language (-l) option (closes: #602512).
  Thanks to Jari Aalto for the bug report.
* Install reasons file for vrms.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
Copyright (c) 1993-2008, Cognitive Technologies
3
 
All rights reserved.
4
 
 
5
 
����������� ��������� ��������������� � ������������� ��� � ���� ��������� ����,
6
 
��� � � �������� �����, � ����������� ��� ���, ��� ���������� ��������� �������:
7
 
 
8
 
      * ��� ��������� ��������������� ��������� ���� ������ ���������� ���������
9
 
        ���� ����������� �� ��������� �����, ���� ������ ������� � �����������
10
 
        ����� �� ��������.
11
 
      * ��� ��������� ��������������� ��������� ���� � ������������ �/��� �
12
 
        ������ ����������, ������������ ��� ���������������, ������ �����������
13
 
        ��������� ���� ���������� �� ��������� �����, ���� ������ ������� �
14
 
        ����������� ����� �� ��������.
15
 
      * �� �������� Cognitive Technologies, �� ����� �� ����������� �� �����
16
 
        ���� ������������ � �������� �������� ��������� �/��� �����������
17
 
        ���������, ���������� �� ���� ��, ��� ���������������� �����������
18
 
        ����������.
19
 
 
20
 
��� ��������� ������������� ����������� ��������� ���� �/��� ������� ������ "���
21
 
��� ����" ��� ������-���� ���� ��������, ���������� ���� ��� ���������������,
22
 
������� �������� ������������ �������� � ����������� ��� ���������� ����, �� ��
23
 
������������� ���. �� �������� ��������� ���� � �� ���� ������ ����, �������
24
 
����� �������� �/��� �������� �������������� ���������, �� � ���� ������ ��
25
 
��Ѩ� ���������������, ������� ����� �����, ���������, ����������� ���
26
 
������������� ������, ��������� � �������������� ��� ���������� ����������
27
 
������������� ������������� ��������� (������� ������ ������, ��� ������,
28
 
������� ���������, ��� ������ �/��� ������ �������, ���������� ��-�� ��������
29
 
������� ��� �/��� ������ ��������� �������� ��������� � ������� �����������,
30
 
�� �� ������������� ����� ��������), �� �� ������������� ���, ���� ���� �����
31
 
�������� ��� ������ ���� ���� �������� � ����������� ����� ������� � ������.
32
 
 
33
 
Redistribution and use in source and binary forms, with or without modification,
34
 
are permitted provided that the following conditions are met:
35
 
 
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.
44
 
 
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.
55
 
*/
 
2
 Copyright (c) 1993-2008, Cognitive Technologies
 
3
 All rights reserved.
 
4
 
 
5
 Разрешается повторное распространение и использование как в виде исходного кода,
 
6
 так и в двоичной форме, с изменениями или без, при соблюдении следующих условий:
 
7
 
 
8
 * При повторном распространении исходного кода должны оставаться указанное
 
9
 выше уведомление об авторском праве, этот список условий и последующий
 
10
 отказ от гарантий.
 
11
 * При повторном распространении двоичного кода в документации и/или в
 
12
 других материалах, поставляемых при распространении, должны сохраняться
 
13
 указанная выше информация об авторском праве, этот список условий и
 
14
 последующий отказ от гарантий.
 
15
 * Ни название Cognitive Technologies, ни имена ее сотрудников не могут
 
16
 быть использованы в качестве средства поддержки и/или продвижения
 
17
 продуктов, основанных на этом ПО, без предварительного письменного
 
18
 разрешения.
 
19
 
 
20
 ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИМИ ЛИЦАМИ "КАК
 
21
 ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,
 
22
 ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, НО НЕ
 
23
 ОГРАНИЧИВАЯСЬ ИМИ. НИ ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
 
24
 МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, НИ В КОЕМ СЛУЧАЕ НЕ
 
25
 НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ
 
26
 ПОСЛЕДОВАВШИЕ УБЫТКИ, СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИЛИ ПОНЕСЕННЫЕ ВСЛЕДСТВИЕ
 
27
 НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ ПОТЕРИ ДАННЫХ, ИЛИ ДАННЫЕ,
 
28
 СТАВШИЕ НЕГОДНЫМИ, ИЛИ УБЫТКИ И/ИЛИ ПОТЕРИ ДОХОДОВ, ПОНЕСЕННЫЕ ИЗ-ЗА ДЕЙСТВИЙ
 
29
 ТРЕТЬИХ ЛИЦ И/ИЛИ ОТКАЗА ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ,
 
30
 НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМИ СЛУЧАЯМИ), НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ДАЖЕ ЕСЛИ ТАКОЙ
 
31
 ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ И ПОТЕРЬ.
 
32
 
 
33
 Redistribution and use in source and binary forms, with or without modification,
 
34
 are permitted provided that the following conditions are met:
 
35
 
 
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.
 
44
 
 
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.
 
55
 */
56
56
 
57
57
//ifdef EXACT_REG => read_frm use cutted rect
58
58
//#define EXACT_REG
59
59
 
60
60
#include "sys_prog.h"
61
61
 
62
 
 
63
62
/*#include <io.h>*/
64
63
#include <sys/types.h>
65
64
 
69
68
//#define TIGER_CORR
70
69
//#define __MRK__
71
70
//#define __DOT__
72
 
//� ���� ������ ������ �������� �����: FRAME + POINT OldCoor
 
71
//В этом случае формат хранения рамок: FRAME + POINT OldCoor
73
72
//#if defined (__DOT__) || defined (__MRK__)
74
 
  #define OLD_COOR
 
73
#define OLD_COOR
75
74
//#endif
76
75
//#define BLANK
77
76
#ifdef __STR_DLL__
78
 
        #define KREST
79
 
        #define PRAFAX
 
77
#define KREST
 
78
#define PRAFAX
80
79
#endif
81
80
 
82
81
#define DEB_PRA
83
82
#ifndef BLANK
84
 
  #define SPLIT_COL
85
 
  //#define PROF_COL
86
 
  //--��������� �������
87
 
  #define GRAPH
 
83
#define SPLIT_COL
 
84
//#define PROF_COL
 
85
//--Отделение графики
 
86
#define GRAPH
88
87
#endif
89
88
#define PLAIN 0
90
89
#define NORV  1
91
90
 
92
91
#if defined (WIN_MOD) && !defined (__MRK__) && !defined (__DOT__)
93
 
  //#include "resource.h"
 
92
//#include "resource.h"
94
93
#endif
95
 
//�������, ����� ���������, ��� � �������� ������� ����� �������
 
94
//вариант, когда считается, что в метриках смертей стоят глубины
96
95
//#define _DEPTH_
97
96
 
98
97
#define DEBUG
99
98
#define VIZ
100
99
 
101
100
#if defined (VIZ) && defined (DOS_MOD)
102
 
  #define DRAW
 
101
#define DRAW
103
102
#endif
104
103
 
105
104
#define WORK 0
108
107
//#define INTEL
109
108
//#define AU
110
109
//ext - .prn or .prc
111
 
//#define OLD_NAME   � ����� column.c
 
110
//#define OLD_NAME   В файле column.c
112
111
 
113
 
//��� �������. ������������ ����� PRS-����
 
112
//для динамич. переключения длины PRS-кода
114
113
//#define PRS_2_3
115
114
 
116
115
#include "wind32.h"
117
116
 
118
117
#define FRAME struct h_frame
119
 
FRAME { unsigned long start_pos,end_pos; int left,up,right,down; };
120
 
#define TYPE int /*��� ���������� ����� FRAME*/
121
 
 
 
118
FRAME {
 
119
        unsigned long start_pos, end_pos;
 
120
        int left, up, right, down;
 
121
};
 
122
#define TYPE int /*тип расстояний между FRAME*/
122
123
 
123
124
typedef int (*FUN_POMP)(void);
124
 
typedef void (*FUN_MESS)(WORD wPar,DWORD lPar);
 
125
typedef void (*FUN_MESS)(uint16_t wPar, uint32_t lPar);
125
126
typedef int(*COMP_FUN)(void);
126
 
typedef TYPE (*DistFrame)(FRAME*,FRAME*);
 
127
typedef TYPE (*DistFrame)(FRAME*, FRAME*);
127
128
 
128
129
#ifndef CPP
129
 
  //#define CPP
 
130
//#define CPP
130
131
#endif
131
132
 
132
 
//���� ����������� ID4, ID_SYM ������ 4 �����, ����� - 8
 
133
//Если установлено ID4, ID_SYM длиной 4 байта, иначе - 8
133
134
#ifndef BLANK
134
 
  //#define ID4
 
135
//#define ID4
135
136
#endif
136
137
 
137
 
#define ID_SYM struct h_id_sym /*������������� �������*/
 
138
#define ID_SYM struct h_id_sym /*Идентификатор символа*/
138
139
 
139
140
#ifdef ID4
140
 
 ID_SYM {unsigned char col,str,comp,word;};
141
 
 #define CONV uchar
142
 
 #define FL_ID 1
 
141
ID_SYM {unsigned char col,str,comp,word;};
 
142
#define CONV uchar
 
143
#define FL_ID 1
143
144
#else
144
 
 ID_SYM {uint col,str,comp,word;};
145
 
 #define CONV uint
146
 
 #define FL_ID 0
 
145
ID_SYM {
 
146
        uint col, str, comp, word;
 
147
};
 
148
#define CONV uint
 
149
#define FL_ID 0
147
150
#endif
148
151
 
149
152
typedef void * PTR;
151
154
typedef void *** PTR3;
152
155
 
153
156
#if !defined (DOS_MOD)
154
 
  #define _GFILLINTERIOR 0
155
 
  #define _GBORDER 1
 
157
#define _GFILLINTERIOR 0
 
158
#define _GBORDER 1
156
159
#endif
157
160
 
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)
161
164
 
162
 
//��������� ��������� � ������
 
165
//Структура структуры в памяти
163
166
#define PIECE  struct h_piece
164
 
PIECE { int up,down; };
 
167
PIECE {
 
168
        int up, down;
 
169
};
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;
 
174
} FRM_ARR;
167
175
#define BOUND struct h_bound
168
 
BOUND { int left,up,right,down; };
 
176
BOUND {
 
177
        int left, up, right, down;
 
178
};
169
179
#define POS_STR struct h_pos_str
170
180
 
171
 
POS_STR {uint HeadLine:1,buf:15;};
 
181
POS_STR {
 
182
        uint HeadLine :1, buf :15;
 
183
};
172
184
 
173
185
#define STAT_STR struct h_stat_str
174
 
STAT_STR { int dx,dy,dsym,down_line; POS_STR PosStr;};
 
186
STAT_STR {
 
187
        int dx, dy, dsym, down_line;
 
188
        POS_STR PosStr;
 
189
};
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; };
 
191
STAT_COL {
 
192
        STAT_STR *stat_str;
 
193
        int dx_col, dy_col, dsym_col, dy_Low, dy_Upp;
 
194
};
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;      //�������. ������������� �� (��� ����� ������. �����)
192
 
   };
 
201
KNOT {
 
202
        KNOT *next, *back;
 
203
};
 
204
KNOT2 {
 
205
        KNOT2 *next, *back;
 
206
        FRAME *f;
 
207
        TYPE dist;
 
208
};
 
209
KNOT3 {
 
210
        KNOT3 *next, *back;
 
211
        FRAME *f;
 
212
        int cl;
 
213
        KNOT3 *beg;
 
214
};
 
215
KNOT4 {
 
216
        KNOT4 *next, *back;
 
217
        FRAME *f;
 
218
};
 
219
FRML {
 
220
        FRML *next, *back;
 
221
        int left, up, right, down;
 
222
};
 
223
AS {
 
224
        KNOT3 ***beg_as; //Двумерный массив голов списков сегментов АС
 
225
        KNOT3 *beg_free; //Ук-ль на голову списка свободных эл-тов списк. прост-ва
 
226
        int kx, ky, dx, dy, xmin, ymin; //Кол-ва и размеры сегментов по осям,начало АС
 
227
        BOUND *bnd; //Габарит. прямоугольник АС (без учета фиктив. полос)
 
228
};
193
229
#define REFER struct h_refer
194
 
REFER {uint ss;};
195
 
typedef struct hTITLE_PRS
196
 
{ char Name[4],ScanResX,ScanResY,Thick,Reserv;int SizeX,SizeY;} TITLE_PRS;
197
 
 
 
230
REFER {
 
231
        uint ss;
 
232
};
 
233
typedef struct hTITLE_PRS {
 
234
        char Name[4], ScanResX, ScanResY, Thick, Reserv;
 
235
        int SizeX, SizeY;
 
236
} TITLE_PRS;
198
237
 
199
238
#pragma pack(1)
200
239
 
201
240
#define PAR struct h_par
202
241
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-���������*/
229
 
 int allow_DeSkewCol;
230
 
 int allow_RevizRuleStr;
231
 
 int allow_SeparGraph;
232
 
 int allow_ProcSmall;
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 �������.������ ���� ��������
261
 
 int TypeDoc;
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;/*весовые коэф-ты "рамочной" метрики*/
 
246
        int nums, numw;
 
247
        float al, bet, delx; /*параметры union_str*/
 
248
        float csi, zet;
 
249
        int dp_abs;
 
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-компонент*/
 
272
        int allow_DeSkewCol;
 
273
        int allow_RevizRuleStr;
 
274
        int allow_SeparGraph;
 
275
        int allow_ProcSmall;
 
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;//Завис-ть от вертикал.кратности
 
283
        float EstBnd1;
 
284
        int EstBndSize;//Параметры EstBndStrHist
 
285
        float k_parag; //Относит. критерий красной строки DivideColParag
 
286
        float CutComp1; //Относит.порог вертикал."захода"в сосед.строку FindCutComp
 
287
        //Макс.уровень торчания и Max число торчащих наружу и внутрь от линеек для обнаружения заголовков
 
288
        int Stick, MaxStickOut, MaxStickIn;
 
289
        float StickCoeff;
 
290
        float UnionPairStr1; //ф-ция UnionPairStr
 
291
        int MinKsym;
 
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 Относит.пороги меры сходства
 
308
        int TypeDoc;
 
309
        int AllowLine;//Включать ли поиск линий
263
310
};
264
311
 
265
312
#define POS_BIT struct h_pos_bit
266
 
POS_BIT
267
 
{
268
 
                uint pos1;
269
 
                uint pos:8,word:1,sym:1,comma:1,parag:1,JoinComp:1,
270
 
               Index:1,Fract:1,MultiPoint:1;
 
313
POS_BIT {
 
314
        uint pos1;
 
315
        uint pos :8, word :1, sym :1, comma :1, parag :1, JoinComp :1, Index :1,
 
316
                        Fract :1, MultiPoint :1;
271
317
};
272
318
#define POS_BIT8 struct h_pos_bit8
273
 
POS_BIT8
274
 
{
275
 
                uint pos1,pos2,pos3;
276
 
                uint pos:8,word:1,sym:1,comma:1,parag:1,JoinComp:1,Index:1,Fract:1,
277
 
               MultiPoint:1;
 
319
POS_BIT8 {
 
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;
278
323
};
279
324
#define POS1_BIT struct h_pos1_bit
280
 
POS1_BIT
281
 
{
 
325
POS1_BIT {
282
326
        int DownL;
283
 
        uint pos:8,cut_comp:2,buf:6;
 
327
        uint pos :8, cut_comp :2, buf :6;
284
328
};
285
329
//POS1_BIT { uint pos:8,cut_comp:2,buf:6; uint pos1; };
286
330
#define POS_INT struct h_pos_int
287
 
POS_INT
288
 
{
289
 
        uint pos:8,word:1,sym:1,comma:1,parag:1,JoinComp:1,
290
 
       Index:1,Fract:1,MultiPoint:1;
 
331
POS_INT {
 
332
        uint pos :8, word :1, sym :1, comma :1, parag :1, JoinComp :1, Index :1,
 
333
                        Fract :1, MultiPoint :1;
291
334
};
292
335
#define POS2_BIT struct h_pos_bit2
293
 
POS2_BIT
294
 
{
 
336
POS2_BIT {
295
337
        uint pos1;
296
 
        uint pos:8;
297
 
  uint AveCrossInt:4;  //����� ����� ����.��������� �������(����� �����������)
298
 
  uint AveCrossFloat:4;//����. ����� ����.��������� �������(��� - 1/16)
 
338
        uint pos :8;
 
339
        uint AveCrossInt :4; //Целая часть сред.сложности символа(числа пересечений)
 
340
        uint AveCrossFloat :4;//Дроб. часть сред.сложности символа(ЦМР - 1/16)
299
341
};
300
342
 
301
343
#define AVE_CROSS(arg) ((POS2_BIT*)&arg)->AveCrossInt+(((POS2_BIT*)&arg)->AveCrossFloat)/16.
302
344
#define POS3_BIT struct h_pos_bit3
303
 
POS3_BIT
304
 
{
 
345
POS3_BIT {
305
346
        uint pos1;
306
 
        uint pos:8;
307
 
  uint NumHole:4; //����� ���
308
 
  uint MaxDepth:4;//����. �������(��� - 1/16 ������ �����)
 
347
        uint pos :8;
 
348
        uint NumHole :4; //Число дыр
 
349
        uint MaxDepth :4;//Макс. глубина(ЦМР - 1/16 высоты рамки)
309
350
};
310
351
 
311
352
#define NUM_HOLE(arg) ((POS3_BIT*)&arg)->NumHole
312
353
#define MAX_DEPTH(arg) ((POS3_BIT*)&arg)->MaxDepth
313
354
 
314
 
/*�������� ���� ������:
315
 
 *next,*back - ������ �� ��������� � ����� �������;
316
 
 *up - ������ �� ������;
317
 
 *down - ������ �� ������ ����� �������;
318
 
 *f - ������ � ������ ����� �� ���������� �����;
319
 
 reg - ������� ������������ ������� ����;
320
 
 typ - �������� ��������������� ������ ��� �������;
321
 
 lev - ������� ���� (��� �� ����� ��������� �������, � �����������, �.�.
322
 
       ���� ������ ������ ����� ���������� �� ������ ���������� �� �����);
323
 
 end - ������� ���������� (1 - ����� �����);
324
 
 buf - ������ */
 
355
/*Описание узла дерева:
 
356
 *next,*back - ссылки по элементам с общим предком;
 
357
 *up - ссылка на предка;
 
358
 *down - ссылка на голову своих дочерей;
 
359
 *f - ссылка в список рамок на объемлющую рамку;
 
360
 reg - признак регулярности данного узла;
 
361
 typ - характер упорядоченности списка его дочерей;
 
362
 lev - уровень узла (это не чисто древесное понятие, а структурное, т.е.
 
363
 узлы одного уровня могут находиться на разном расстоянии от корня);
 
364
 end - признак блокировки (1 - конец блока);
 
365
 buf - резерв */
325
366
#define KNOTG struct h_knotg
326
367
KNOTG {
327
 
        KNOTG *next,*back,*up,*down;
 
368
        KNOTG *next, *back, *up, *down;
328
369
        FRML *f;
329
 
        uint reg:1,typ:4,lev:4,end:1,buf:6;
330
 
      };
 
370
        uint reg :1, typ :4, lev :4, end :1, buf :6;
 
371
};
331
372
 
332
373
#pragma pack(2)
333
 
typedef struct h_spec
334
 
{
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;
336
376
} SPEC;
337
377
 
338
378
#define ORDER(arg)  ((SPEC*) &arg) -> typ
347
387
//typedef TYPE (*DistFrame)(FRAME*,FRAME*);
348
388
 
349
389
#ifdef WIN32
350
 
  //#define _splitpath __splitpath
351
 
  //#define _makepath  __makepath
352
 
  //void _splitpath(const char *f,char *drive,char *dir,char *fname,char *ext);
353
 
  //void _makepath(char *f,
354
 
  //  const char *drive,const char *dir,const char *fname,const char *ext);
 
390
//#define _splitpath __splitpath
 
391
//#define _makepath  __makepath
 
392
//void _splitpath(const char *f,char *drive,char *dir,char *fname,char *ext);
 
393
//void _makepath(char *f,
 
394
//  const char *drive,const char *dir,const char *fname,const char *ext);
355
395
#endif
356
396
 
357
397
#define MAXFILENAME 256
363
403
#define SIZE_SEG 65500
364
404
 
365
405
#ifndef BITS32
366
 
        #define MAX_FRAME 16300
 
406
#define MAX_FRAME 16300
367
407
#else
368
 
                #define MAX_FRAME 32000
 
408
#define MAX_FRAME 32000
369
409
#endif
370
410
 
371
411
#define ENDFILE 0
392
432
#define PI 3.1415926
393
433
#define PI2 1.5708
394
434
#ifndef FALSE
395
 
        #define FALSE 0
396
 
        #define TRUE 1
 
435
#define FALSE 0
 
436
#define TRUE 1
397
437
#endif
398
438
#define COL_TXT FALSE
399
439
#define COL_GRAPH TRUE
400
440
#define UNDEF 2
401
441
long load_pos(long cod);
402
 
void copy_attr(POS_BIT *in,POS_BIT *out);
403
 
void copy_attr48(POS_BIT *in,POS_BIT8 *out);
404
 
long PutStrBit(long pos,POS_INT bit);
 
442
void copy_attr(POS_BIT *in, POS_BIT *out);
 
443
void copy_attr48(POS_BIT *in, POS_BIT8 *out);
 
444
long PutStrBit(long pos, POS_INT bit);
405
445
POS_INT GetStrBit(long pos);
406
446
 
407
 
//��� 4-����. ������
 
447
//Для 4-байт. записи
408
448
#define END_WORD(arg)    ((POS_BIT*) &arg)->word
409
449
#define END_SYM(arg)     ((POS_BIT*) &arg)->sym
410
450
#define COMMA(arg)       ((POS_BIT*) &arg)->comma
414
454
#define FRACT(arg)       ((POS_BIT*) &arg)->Fract
415
455
#define MULTI_POINT(arg) ((POS_BIT*) &arg)->MultiPoint
416
456
 
417
 
//����� ���������� 4-8-�������
 
457
//Общие надстройки 4-8-байтные
418
458
#ifdef ID4
419
 
  #define BIT_POSITION POS_BIT
 
459
#define BIT_POSITION POS_BIT
420
460
#else
421
 
  #define BIT_POSITION POS_BIT8
 
461
#define BIT_POSITION POS_BIT8
422
462
#endif
423
463
 
424
464
#define END_WORD1(arg)    ((BIT_POSITION*) &arg)->word
436
476
 
437
477
#define SPACE_MAX 200
438
478
 
439
 
/*����� TREE1 - ��������� ������ ��������� ������ ���� (�������� �� ������ ��������)
440
 
  ����� ������ � ��� �� ���������*/
 
479
/*Режим TREE1 - генерация дерева структуры общего вида (объемная по памяти операция)
 
480
 иначе дерево в ОЗУ не генерится*/
441
481
/*#define TREE1*/
442
 
/*-----�������-----*/
 
482
/*-----Графика-----*/
443
483
#define EGA 16
444
484
#define CGA 4
445
485
#ifndef ZAGL
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;
448
488
#else
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;
451
491
#endif
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),
461
 
     zpage(int ist);
 
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),
 
500
                zpage(int ist);
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,
 
512
                int k);
 
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);
477
517
#ifdef ZAGL
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;
489
529
#else
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;
497
538
#endif
498
539
#pragma pack(1)
499
 
  #define PRS_ONE1 struct h_prs_one1
 
540
#define PRS_ONE1 struct h_prs_one1
500
541
//#ifdef INTEL
501
 
//�������� �������� pole_bit
502
 
  #ifdef PRS_T
503
 
        typedef unsigned short PRS_ONE;
504
 
    #define WIDTH_PRS 2
505
 
  #else
506
 
    #define PRS_ONE struct h_prs_one
507
 
    PRS_ONE1 {BYTE code; WORD metri; };
508
 
    PRS_ONE
509
 
                {
510
 
                                        uint typ:2, het:1, scob:1, dummi:12;
511
 
                                        BYTE dummi1;
512
 
                };
513
 
    #define WIDTH_PRS 3
514
 
  #endif
 
542
//Вариации описания pole_bit
 
543
#ifdef PRS_T
 
544
typedef unsigned short PRS_ONE;
 
545
#define WIDTH_PRS 2
 
546
#else
 
547
#define PRS_ONE struct h_prs_one
 
548
PRS_ONE1 {
 
549
        uchar code;
 
550
        uint16_t metri;
 
551
};
 
552
PRS_ONE {
 
553
        uint typ :2, het :1, scob :1, dummi :12;
 
554
        uchar dummi1;
 
555
};
 
556
#define WIDTH_PRS 3
 
557
#endif
515
558
//#else
516
559
 
517
560
//#endif
518
561
#pragma pack(2)
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,
 
564
                int size_item);
 
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,
 
577
                int *k_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,
537
 
    long *k_frm);
 
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,
 
582
                long *k_frm);
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);
555
600
 
556
601
//      void  u4sort(void *base, int  num, int  width, int  (*compare)());
557
602
 
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,
 
611
                int ymin1);
 
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,
 
614
                int size_y);
 
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,
 
627
                int flUpp);
 
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,
 
654
                int regim);
 
655
int statis(TYPE *arr, int n, TYPE *ave1, TYPE *sig1, TYPE *med, TYPE *mod,
 
656
                int regim);
 
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);
617
 
int cut_str
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,
 
694
                int *k_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);
650
 
//==�����������==
 
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);
 
701
//==Колонизация==
651
702
#define UNSORT 0
652
703
#define HOR    1
653
704
#define VER    2
659
710
#define TABL   8
660
711
#define FORMUL 9
661
712
#define SLOPE  10
662
 
#define MAX_LEV  6 /*����.����� �������*/
663
 
//==��������.������==
 
713
#define MAX_LEV  6 /*макс.число уровней*/
 
714
//==Иерархич.индекс==
664
715
#define LET 1
665
716
#define WRD 2
666
717
#define STR 3
667
718
#define COL 4
668
719
#define COLVT 5
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,
690
 
    int AveX,int AveY);
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);
 
726
int
 
727
                est_string(FRAME **frm, int k_frm, FRAME ****str1, int **ksym1,
 
728
                                int *k_str1);
 
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,
 
743
                int AveX, int AveY);
 
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);
700
753
 
701
754
#ifndef V_LOCK
702
 
LONG filelength_m(FILE *stream);
 
755
int32_t filelength_m(FILE *stream);
703
756
 
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);
712
765
#endif
713
766
 
714
767
#ifndef MAIN
715
 
  extern PAR par;
716
 
  extern int viz,extr;
717
 
  extern long na,ko,pos1; extern FILE *fip,*out,*out_rb;
718
 
  extern long PRSMAX;
719
 
  extern void *low; /*������ ������� �������� ��������� - ��� ��������*/
720
 
  extern char *s1,*s2,*s3; /*��������� ��� �����������*/
721
 
  extern char *abcd;
722
 
  extern int count,rou;
723
 
  extern int h_term;
724
 
  extern STAT_COL stat_col;
725
 
  extern int dx_prs,dy_prs;
726
 
  extern int k_prop,k_mono;
727
 
  extern int upi;
728
 
  extern char dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];
729
 
  extern char Fullpath[255];
730
 
  extern int SizeXGlob,SizeYGlob;
731
 
  extern REFER *fiv;
732
 
  extern int NumCut; extern FRAME *Cut;
733
 
  extern int SizeX_W,SizeY_W;
734
 
  extern float AveNumCrossCol,AveNumCross1Col,AveThickCol,AveThick1Col;
735
 
  extern int KbAll;
736
 
  extern int CountCol,Percent1,Percent2,Percent3,NumColt;
737
 
  extern char FileParStr[MAXFILENAME];
738
 
  extern WORD ScanResolution;extern float MulScanRes;
739
 
  extern int Break_on;
740
 
  extern FUN_POMP pump;
741
 
  extern FUN_MESS FunMessage;
742
 
  extern int WidthPRS,MaxShtrih;
 
768
extern PAR par;
 
769
extern int viz,extr;
 
770
extern long na,ko,pos1; extern FILE *fip,*out,*out_rb;
 
771
extern long PRSMAX;
 
772
extern void *low; /*нижняя граница загрузки программы - для контроля*/
 
773
extern char *s1,*s2,*s3; /*Сообщения для интерактива*/
 
774
extern char *abcd;
 
775
extern int count,rou;
 
776
extern int h_term;
 
777
extern STAT_COL stat_col;
 
778
extern int dx_prs,dy_prs;
 
779
extern int k_prop,k_mono;
 
780
extern int upi;
 
781
extern char dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];
 
782
extern char Fullpath[255];
 
783
extern int SizeXGlob,SizeYGlob;
 
784
extern REFER *fiv;
 
785
extern int NumCut; extern FRAME *Cut;
 
786
extern int SizeX_W,SizeY_W;
 
787
extern float AveNumCrossCol,AveNumCross1Col,AveThickCol,AveThick1Col;
 
788
extern int KbAll;
 
789
extern int CountCol,Percent1,Percent2,Percent3,NumColt;
 
790
extern char FileParStr[MAXFILENAME];
 
791
extern uint16_t ScanResolution;extern float MulScanRes;
 
792
extern int Break_on;
 
793
extern FUN_POMP pump;
 
794
extern FUN_MESS FunMessage;
 
795
extern int WidthPRS,MaxShtrih;
743
796
#else
744
 
  PAR par;
745
 
  int viz=0,extr=0;
746
 
  long na=0,ko=-1,pos1; FILE *fip,*out,*out_rb;
747
 
  long PRSMAX;
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="|\\-/";
752
 
  int count=0,rou=0;
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];
759
 
  char Fullpath[255];
760
 
  //char NameFuncErr[100],Buff[60]; int NumErr;
761
 
  int SizeXGlob,SizeYGlob;
762
 
  REFER *fiv;
763
 
  int NumCut; FRAME *Cut; //������� � ����� ����������� ���������
764
 
  int SizeX_W,SizeY_W;
765
 
  float AveNumCrossCol,AveNumCross1Col,AveThickCol,AveThick1Col;
766
 
  int KbAll;
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;
 
797
PAR par;
 
798
int viz=0,extr=0;
 
799
long na=0,ko=-1,pos1; FILE *fip,*out,*out_rb;
 
800
long PRSMAX;
 
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="|\\-/";
 
805
int count=0,rou=0;
 
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];
 
812
char Fullpath[255];
 
813
//char NameFuncErr[100],Buff[60]; int NumErr;
 
814
int SizeXGlob,SizeYGlob;
 
815
REFER *fiv;
 
816
int NumCut; FRAME *Cut; //Счетчик и буфер разрезанных компонент
 
817
int SizeX_W,SizeY_W;
 
818
float AveNumCrossCol,AveNumCross1Col,AveThickCol,AveThick1Col;
 
819
int KbAll;
 
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;
774
827
#endif
775
828
 
776
 
/*�������*/
777
 
/*dv - ��������. ������=�������� �� ������� �����,������ � �������
778
 
  dg - ��������. ������ - ���������� ����� ������� �� �����������,
779
 
  ���� ��� �� �������������, ���� ������ ����������*/
 
829
/*Макросы*/
 
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);  \
798
851
 
799
852
#define DH_FRM(a,b) DIST_V(a->left,a->right,b->left,b->right)
800
853
 
801
 
//���.�����. �/������� ����� *f1,*f2, long Zv,Zh
 
854
//Мин.расст. м/точками рамок *f1,*f2, long Zv,Zh
802
855
#define DIST_MIN_FRM(f1,f2) \
803
856
  ((Zv=DIST_V(f1->up,f1->down,f2->up,f2->down)), \
804
857
  (Zh=DIST_V(f1->left,f1->right,f2->left,f2->right)), \
805
858
  (Zv >= 0 ? ((Zh < 0) ? Zh*Zh : 0) : ((Zh >= 0) ? Zv*Zv : Zh*Zh+Zv*Zv)))
806
 
//���� ��-�� <0,1> � ������.�������� ph,pv �� ����� ����-���, int ZZv,ZZh
 
859
//Мера сх-ва <0,1> с раздел.порогами ph,pv по обеим коор-там, int ZZv,ZZh
807
860
 
808
861
#define DIST_FRM_COL(f1,f2,ph,pv) \
809
862
  ((ZZv=DIST_V(f1->up,f1->down,f2->up,f2->down)), \
810
863
  (ZZh=DIST_V(f1->left,f1->right,f2->left,f2->right)), \
811
864
  (ZZv >= pv && ZZh >= ph ? 1:0))
812
865
 
813
 
//�������
 
866
//Утилиты
814
867
void tik(int k_tik);
815
868
void init_font(void);
816
869
void mess_f(char *s,int x,int y,int col);
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);
820
873
 
821
 
//---------�������� �����------------
 
874
//---------ОПИСАНИЕ ЛИНИЙ------------
822
875
 
823
876
#ifndef MAIN5
824
 
   #error  ...... NOT MAIN5 ......
 
877
#error  ...... NOT MAIN5 ......
825
878
#endif
826
879
 
827
880
#ifdef MAIN5
828
 
  #include "undef32.h"
829
 
  //  #include "detlin.h"
830
 
    #include "lindefs.h"
831
 
  #include "wind32.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
 
  //--����������� ������������ ��������� �����--
839
 
  #define NULL_LINE 1
840
 
  #define NULL_THICK 2
841
 
  #define COINCIDE_STRETCH 4
842
 
  //--���������� �����--
843
 
  #define HOR_LINE 1
844
 
  #define VER_LINE 2
845
 
  #define SLOPE_LINE 4
846
 
  //--��� �����--
847
 
  #define SOLID_LINE  0
848
 
  #define DOUBLE_LINE 1
849
 
  #define THICK_LINE  2
850
 
  #define HIDDEN_LINE 3
851
 
  #define DOT_LINE    4
852
 
  #define MAX_TYPE_LINE 6
853
 
  //--�����. ��� �����. (.) �������--
854
 
  #define POINT_BEG 1
855
 
  #define POINT_END 2
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
860
 
 
861
 
 
862
 
        #pragma pack(1)
863
 
 
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)
873
 
  } STRET;
874
 
 
875
 
  typedef struct hSTRET_P
876
 
  { STRET *Stret;
877
 
    short Feat;  //POINT_BEG || POINT_END
878
 
  } STRET_P;
879
 
 
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,
897
 
    STRET **Line1);
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,
907
 
       int *nRect);
908
 
  int CopyBMPLMem(BMPL *BmpIn,BMPL *BmpOut);
 
881
#include "undef32.h"
 
882
//  #include "detlin.h"
 
883
#include "lindefs.h"
 
884
#include "wind32.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
//--Диагностика тестировщика структуры линий--
 
892
#define NULL_LINE 1
 
893
#define NULL_THICK 2
 
894
#define COINCIDE_STRETCH 4
 
895
//--Ориентация линии--
 
896
#define HOR_LINE 1
 
897
#define VER_LINE 2
 
898
#define SLOPE_LINE 4
 
899
//--Тип линии--
 
900
#define SOLID_LINE  0
 
901
#define DOUBLE_LINE 1
 
902
#define THICK_LINE  2
 
903
#define HIDDEN_LINE 3
 
904
#define DOT_LINE    4
 
905
#define MAX_TYPE_LINE 6
 
906
//--Начал. или конеч. (.) отрезка--
 
907
#define POINT_BEG 1
 
908
#define POINT_END 2
 
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
 
913
 
 
914
#pragma pack(1)
 
915
 
 
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)
 
925
}STRET;
 
926
 
 
927
typedef struct hSTRET_P
 
928
{       STRET *Stret;
 
929
        short Feat; //POINT_BEG || POINT_END
 
930
}STRET_P;
 
931
 
 
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,
 
949
                STRET **Line1);
 
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,
 
959
                int *nRect);
 
960
int CopyBMPLMem(BMPL *BmpIn,BMPL *BmpOut);
909
961
#endif
910
962
/**/
911
 
//�������� � ��300-dpi SCAN RESOLUTION
 
963
//пересчет к не300-dpi SCAN RESOLUTION
912
964
#define NORM_SCAN(value) ((int)(MulScanRes*value))
913
 
//�����������
 
965
//Диагностика
914
966
#include "undef32.h"
915
 
  #include "tabl.h"
 
967
#include "tabl.h"
916
968
#include "wind32.h"
917
969
#define NOT_ALLOC -3
918
 
//�������� �-��� ��������������
 
970
//Основная ф-ция структурайзера
919
971
#ifndef GLOB
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);
921
973
#endif
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);
932
 
//--�������--
 
983
                STRET *LineV,STRET *LineH,INF_TREE *Inf);
 
984
//--Индексы--
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);
935
 
//--�����--
 
987
//--Дроби--
936
988
int FindFractCell(FRAME ***sym,int *ksym,STAT_CELL *StatCell);
937
 
//--����������--
 
989
//--Многоточия--
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);
941
993
//--
942
994
int GetCriptDir(char *path,int len);
943
995
int GetTypeDoc(void);
944
996
#ifdef DLL_MOD
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);
948
1000
#endif
949
1001
 
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);
968
1020
#define CALL_STR 0
969
1021
#define CALL_BOX 1
970
1022
 
971
 
int  init_file_prs (char *file_prs,FRAME **frm,int NumFrm,int TypeCall);
972
 
int  init_file_prs3(char *file_prs,FRAME **frm,int NumFrm,int TypeCall);
 
1023
int init_file_prs (char *file_prs,FRAME **frm,int NumFrm,int TypeCall);
 
1024
int init_file_prs3(char *file_prs,FRAME **frm,int NumFrm,int TypeCall);
973
1025
void FreePrsLine(void);
974
1026
 
975
 
int   ProjectFrm(FRAME **frm,int NumFrm,float tg_ang);
976
 
int   ProjectFrm1024(FRAME **frm,int NumFrm,Int32 Skew1024);
977
 
int   EstIntrvlHor(FRAME **frm,int num,BOUND *bnd,int dxAS,int dyAS,
978
 
         RECT *Limit,int MinVol,float MinPerc,int limDX,int limDY,
979
 
         int *dsym,int *AveX,int *AveY);
 
1027
int ProjectFrm(FRAME **frm,int NumFrm,float tg_ang);
 
1028
int ProjectFrm1024(FRAME **frm,int NumFrm,int32_t Skew1024);
 
1029
int EstIntrvlHor(FRAME **frm,int num,BOUND *bnd,int dxAS,int dyAS,
 
1030
                RECT *Limit,int MinVol,float MinPerc,int limDX,int limDY,
 
1031
                int *dsym,int *AveX,int *AveY);
980
1032
 
981
 
        #pragma pack()
 
1033
#pragma pack()
982
1034
 
983
1035
#ifndef CPP
984
1036
#ifdef __cplusplus
986
1038
#endif
987
1039
#endif
988
1040
 
989
 
                        #define STRUCT_INI "struct.ini"
990
 
 
991
 
 
 
1041
#define STRUCT_INI "struct.ini"
992
1042
 
993
1043
#ifdef __cplusplus
994
1044
// extern "C" {
995
1045
#endif
996
1046
 
997
 
void  u4sort(void *base, int  num, int  width, int  (*compare)());
998
 
int clust_as(FRAME **frm,int k_frm,KNOT3 **beg_pr,TYPE dp,int size_x,
999
 
        int size_y,BOUND *bnd,int max_cl,int *k_cl1,KNOT3 **beg_free1,KNOT3 **beg_cl,
1000
 
        TYPE (*dist_frame)(FRAME*,FRAME*), int reg);
 
1047
void u4sort(void *base, int num, int width, int(*compare)());
 
1048
int clust_as(FRAME **frm, int k_frm, KNOT3 **beg_pr, TYPE dp, int size_x,
 
1049
                int size_y, BOUND *bnd, int max_cl, int *k_cl1, KNOT3 **beg_free1,
 
1050
                KNOT3 **beg_cl, TYPE(*dist_frame)(FRAME*, FRAME*), int reg);
1001
1051
 
1002
1052
#ifdef __cplusplus
1003
1053
// }