mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1127 lines
49 KiB
1127 lines
49 KiB
|
|
/**************************************************************************
|
|
* *
|
|
* LOWLEVEL.H Created: 28 May 1991. *
|
|
* *
|
|
* This file contains the items needed for the low word processing *
|
|
* part of the recognizer which are needed only in kernel variant. *
|
|
* *
|
|
**************************************************************************/
|
|
|
|
#ifndef LOW_LEVEL_INCLUDED
|
|
#define LOW_LEVEL_INCLUDED
|
|
|
|
#include "ams_mg.h"
|
|
#include "floats.h"
|
|
|
|
#define NEW_VERSION _TRUE /* New version - born in Sept.1992 */
|
|
|
|
#define LOW_INLINE _FALSE /* If small low-level functions should be */
|
|
/* expanded inline (as macros). */
|
|
|
|
#define USE_FRM_WORD _FALSE /* _TRUE - makes it able to provide */
|
|
/* formulas wordbreaking and */
|
|
/* recogn. enhancing by cost of */
|
|
/* code enlarging. */
|
|
/* _FALSE- no fromula wordbreaking and */
|
|
/* additional enhancement, but */
|
|
/* code size reduces. */
|
|
|
|
|
|
|
|
/**************************************************************************/
|
|
/* CODES OF SPECIAL POINTS */
|
|
/**************************************************************************/
|
|
/* */
|
|
#define EMPTY 0x00 /* empty mark */
|
|
#define MINW 0x01 /* wide minimum */
|
|
#define MINN 0x02 /* narrow minimum */
|
|
#define MAXW 0x03 /* wide maximum */
|
|
#define MAXN 0x04 /* narrow maximum */
|
|
#define _MINX 0x11 /* */
|
|
#define _MAXX 0x13 /* */
|
|
#define MINXY 0x21 /* */
|
|
#define MAXXY 0x23 /* */
|
|
#define MINYX 0x31 /* */
|
|
#define MAXYX 0x33 /* */
|
|
#define SHELF 0x05 /* shelf */
|
|
#define CROSS 0x06 /* crossing */
|
|
#define STROKE 0x07 /* stroke */
|
|
#define DOT 0x08 /* point */
|
|
#define STICK 0x09 /* hypothetical stick */
|
|
#define HATCH 0x0a /* crossing with the stroke */
|
|
/* #define BIRD 0x12 */ /* */
|
|
/* #define STAFF 0x21 */ /* */
|
|
#define ANGLE 0x0b /* angle */
|
|
#define BEG 0x10 /* beginning of unbroken group of points */
|
|
#define END 0x20 /* end of the unbroken group of points */
|
|
#define DROP 0x44 /* break */
|
|
|
|
//GIT - new marks for SDS
|
|
#define SDS_INTERSECTED 0x80
|
|
#define SDS_ISOLATE 0x81
|
|
/* */
|
|
/**************************************************************************/
|
|
/* Constants - direction setters for extrema searching. */
|
|
/* They are bits in the variable and may be combined using "|". */
|
|
/**************************************************************************/
|
|
|
|
#define EMPTY_DIR 0x0000
|
|
#define X_DIR 0x0001
|
|
#define Y_DIR 0x0002
|
|
#define XY_DIR 0x0004
|
|
#define YX_DIR 0x0008
|
|
|
|
/**************************************************************************/
|
|
/* CONSTANTS DEFINITION */
|
|
/**************************************************************************/
|
|
/* */
|
|
|
|
#define MAXBUF 8000 /* max size */
|
|
/* buffer of data */
|
|
#define LOWBUF (MAXBUF+3) /* size of buffer for */
|
|
/* lower level. */
|
|
#define SPECVAL 640 /* masssive measurity */
|
|
/* structure of special*/
|
|
/* points . */
|
|
#define N_GR_BORD 50 /* Size of an array of */
|
|
/* moveable SPECL elems*/
|
|
#define N_ABSNUM 50 /* Size of an array of */
|
|
/* moveable SPECL elems*/
|
|
#define UMSPC 50 /* */
|
|
/* */
|
|
#define N_SDS 200 /* Size of SDS array */
|
|
/* */
|
|
#define LENTH_E 64 /* */
|
|
/* */
|
|
#define LENTH_Q 64 /* */
|
|
/* */
|
|
#define LENTH_S 128 /* */
|
|
/* */
|
|
#define ALEF 32767 /* the biggest number */
|
|
/* y (for regime EGA ).*/
|
|
#define SQRT_ALEF 181 /* sqrt(ALEF) */
|
|
/* */
|
|
#define ELEM 0 /* the smallest */
|
|
/* bite number */
|
|
/* without sign */
|
|
#define BREAK -1 /* number-symbol of */
|
|
/* style break */
|
|
#define RIGHT 319 /* the most right point*/
|
|
/* */
|
|
#define CONSTVAL 8 /* max number of files */
|
|
/* with constants */
|
|
/* */
|
|
#define ABSENCE 1 /* */
|
|
/* */
|
|
#define NOABSENCE 0 /* */
|
|
/* */
|
|
#define CELLSIZE 7 /*size of rastre square*/
|
|
/* */
|
|
#define END_OF_WORDS 0xff /* End of list */
|
|
/* */
|
|
#define UNDEF -2 /* Undef value for in- */
|
|
/* dexes in arrays etc.*/
|
|
/* */
|
|
/* */
|
|
/***************************************************************************/
|
|
/* STRUCTURE OF DATA FOR LOW LEVEL */
|
|
/***************************************************************************/
|
|
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
#if defined(FOR_GERMAN) || defined(FOR_FRENCH) || defined(FOR_INTERNATIONAL)
|
|
|
|
typedef struct
|
|
{
|
|
_SHORT GroupNum ;
|
|
_SHORT numMin ;
|
|
_CHAR tH ;
|
|
_CHAR bH ;
|
|
_CHAR UmEls ;
|
|
_CHAR ElsUm ;
|
|
_CHAR UmDot ;
|
|
_CHAR DotUm ;
|
|
_CHAR UmStr ;
|
|
_CHAR StrUm ;
|
|
_CHAR UmCom ;
|
|
_CHAR ComUm ;
|
|
_CHAR CrossFeature ;
|
|
_CHAR PositionFeature ;
|
|
|
|
}
|
|
_UM_MARKS ,
|
|
_PTR p_UM_MARKS ;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
p_UM_MARKS pUmMarks ;
|
|
_SHORT Um_buf_Len ;
|
|
_SHORT tmpUMnumber ;
|
|
_SHORT termSpecl ;
|
|
_SHORT termSpecl1 ;
|
|
}
|
|
_UM_MARKS_CONTROL , _PTR p_UM_MARKS_CONTROL ;
|
|
|
|
#endif /* FOR_GERMAN... */
|
|
|
|
/********************************************************/
|
|
/* Lines description structures: */
|
|
/********************************************************/
|
|
|
|
typedef struct SDB_TYPE
|
|
{
|
|
_SHORT s ;
|
|
_SHORT a ;
|
|
_SHORT dL ;
|
|
_SHORT iLmax ;
|
|
_SHORT dR ;
|
|
_SHORT iRmax ;
|
|
_SHORT d ;
|
|
_SHORT imax ;
|
|
_LONG l ;
|
|
_SHORT cr ;
|
|
_SHORT ld ;
|
|
_SHORT lg ;
|
|
} _SAD ;
|
|
|
|
typedef _SAD _PTR p_SAD ;
|
|
|
|
|
|
/* cr == (BASE*d/s); "Curvity" */
|
|
/* ld == (BASE*l/s); */
|
|
/* lg == (BASE*l/(length of all part between breaks)); */
|
|
/* ooo "l" */
|
|
/* ooooooo | ooo */
|
|
/* ooo | o ooOO */
|
|
/* ooo | oo ooo */
|
|
/* oo | oo oo */
|
|
/* oo | "d" o o */
|
|
/* ------- OO -------------- | ---------- o --------- o ---------- */
|
|
/* ------- "s"| o o */
|
|
/* ------------ o o */
|
|
/* "a" - slope of this > --------OO oo */
|
|
/* (BASE*"dy"/"dx") oo oo */
|
|
/* ooo */
|
|
|
|
|
|
typedef struct _SDS_TYPE
|
|
{
|
|
_SHORT mark ;
|
|
_SHORT ibeg ;
|
|
_SHORT iend ;
|
|
_SHORT xmax ;
|
|
_SHORT xmin ;
|
|
_SHORT ymax ;
|
|
_SHORT ymin ;
|
|
|
|
_SAD des ;
|
|
} _SDS ;
|
|
|
|
typedef _SDS _PTR p_SDS ;
|
|
|
|
typedef struct _SDS_CONTROL_TYPE
|
|
{
|
|
_SHORT sizeSDS ;
|
|
_SHORT iBegLock_SDS ;
|
|
_SHORT lenSDS ;
|
|
p_SDS pSDS ;
|
|
}
|
|
_SDS_CONTROL ;
|
|
|
|
typedef _SDS_CONTROL _PTR p_C_SDS ;
|
|
|
|
/* links description structure */
|
|
typedef enum
|
|
{
|
|
ARC_UNKNOWN = 0 ,
|
|
ARC_LEFT ,
|
|
ARC_RIGHT ,
|
|
ARC_UP ,
|
|
ARC_DOWN ,
|
|
ARC_UP_LEFT ,
|
|
ARC_DOWN_LEFT ,
|
|
ARC_UP_RIGHT ,
|
|
ARC_DOWN_RIGHT ,
|
|
ARC_LINE_VERT ,
|
|
ARC_LINE_HOR ,
|
|
ARC_LINE_SLASH ,
|
|
ARC_LINE_BACKSLASH ,
|
|
ARC_S_LIKE ,
|
|
ARC_Z_LIKE ,
|
|
ARC_SHORT
|
|
}
|
|
_ARC_TYPE ;
|
|
|
|
/* new links description structure */
|
|
typedef enum
|
|
{
|
|
LINK_UNKNOWN = 0, // 0
|
|
LINK_HCR_CCW , // 1
|
|
LINK_LCR_CCW , // 2
|
|
LINK_MCR_CCW , // 3
|
|
LINK_SCR_CCW , // 4
|
|
LINK_TCR_CCW , // 5
|
|
LINK_LINE , // 6
|
|
LINK_TCR_CW , // 7
|
|
LINK_SCR_CW , // 8
|
|
LINK_MCR_CW , // 9
|
|
LINK_LCR_CW , // 10
|
|
LINK_HCR_CW , // 11
|
|
LINK_HS_LIKE , // 12
|
|
LINK_S_LIKE , // 13
|
|
LINK_Z_LIKE , // 14
|
|
LINK_HZ_LIKE // 15
|
|
}
|
|
_LINK_TYPE ;
|
|
|
|
/*--------------- SPECIAL POINTS DESCRIPTOR ------------------------------*/
|
|
|
|
typedef struct SPEC_TYPE
|
|
{
|
|
_UCHAR mark ;
|
|
_UCHAR code ;
|
|
_UCHAR attr ;
|
|
_UCHAR other ;
|
|
_SHORT ibeg ;
|
|
_SHORT iend ;
|
|
_SHORT ipoint0 ;
|
|
_SHORT ipoint1 ;
|
|
struct SPEC_TYPE near * next ;
|
|
struct SPEC_TYPE near * prev ;
|
|
} SPECL, _PTR p_FSPECL; /* grafy.h definitions */
|
|
|
|
typedef SPECL near* p_SPECL ;
|
|
|
|
/*--------------- LIST OF CONSTANTS --------------------------------------*/
|
|
|
|
typedef struct CON_TYPE /* table for interpolaton constants */
|
|
{
|
|
_SHORT horda ; /* chord of normalizaton */
|
|
_SHORT dlt0 ; /* */
|
|
_SHORT nsr ; /* */
|
|
_SHORT j_step ; /* beginning steps of crossings */
|
|
_SHORT i_step ; /* search */
|
|
_SHORT eps_y ; /* environs of extremums marking out*/
|
|
_SHORT eps_x ; /* and preliminary marking out */
|
|
/* of shelves */
|
|
_SHORT eps_py ; /* max.(vertical and horisontal) */
|
|
_SHORT eps_px ; /* sizes of 'points */
|
|
_SHORT eps_st ; /* max stroke legnth */
|
|
_SHORT a0 ; /* */
|
|
_SHORT b0 ; /* */
|
|
_SHORT lf0 ; /* */
|
|
_SHORT lz0 ; /* */
|
|
_SHORT a1 ; /* */
|
|
_SHORT b1 ; /* */
|
|
_SHORT lf1 ; /* */
|
|
_SHORT lz1 ; /* */
|
|
_SHORT a2 ; /* */
|
|
_SHORT b2 ; /* */
|
|
_SHORT lf2 ; /* */
|
|
_SHORT lz2 ; /* */
|
|
_SHORT a3 ; /* */
|
|
_SHORT b3 ; /* */
|
|
_SHORT lf3 ; /* */
|
|
_SHORT lz3 ; /* */
|
|
}
|
|
CONSTS ;
|
|
|
|
/*--------------- HEIGHTS ------------------------------------------------*/
|
|
typedef struct { /* If y<=y_US_, then height==_US_ */
|
|
_SHORT y_US1_ ;
|
|
_SHORT y_US2_ ;
|
|
_SHORT y_UE1_ ;
|
|
_SHORT y_UE2_ ;
|
|
_SHORT y_UI1_ ;
|
|
_SHORT y_UI2_ ;
|
|
_SHORT y_MD_ ;
|
|
_SHORT y_DI1_ ;
|
|
_SHORT y_DI2_ ;
|
|
_SHORT y_DE1_ ;
|
|
_SHORT y_DE2_ ;
|
|
_SHORT y_DS1_ ;
|
|
_SHORT y_DS2_ ;
|
|
}
|
|
HEIGHTS_DEF ;
|
|
|
|
/*--------------- BUFFER'S STRUCTURE -------------------------------------*/
|
|
|
|
typedef struct
|
|
{
|
|
p_SHORT ptr ; /* Pointer to buffer. */
|
|
_SHORT nSize ; /* # of _SHORTs in buffer. */
|
|
}
|
|
BUF_DESCR, _PTR p_BUF_DESCR ;
|
|
|
|
/*--------------- NUMBER OF BEGIN & END OF POINTS GROUP ------------------*/
|
|
|
|
typedef struct
|
|
{
|
|
_SHORT iBeg ;
|
|
_SHORT iEnd ;
|
|
_RECT GrBox ;
|
|
}
|
|
POINTS_GROUP, _PTR p_POINTS_GROUP ;
|
|
|
|
/*--------------- LOW LEVEL MAIN DATA STRUCTURE --------------------------*/
|
|
|
|
#define NUM_BUF 4 /* buffers quantity */
|
|
|
|
typedef struct
|
|
{
|
|
rc_type _PTR rc ;
|
|
BUF_DESCR buffers[NUM_BUF] ;
|
|
|
|
PS_point_type _PTR p_trace ;
|
|
_SHORT nLenXYBuf ;
|
|
p_SHORT xBuf ;
|
|
p_SHORT yBuf ;
|
|
|
|
p_SHORT x ;
|
|
p_SHORT y ;
|
|
_SHORT ii ;
|
|
|
|
p_SPECL specl ;
|
|
_SHORT nMaxLenSpecl ;
|
|
_SHORT len_specl ;
|
|
_SHORT LastSpeclIndex ;
|
|
|
|
p_SHORT pAbsnum ;
|
|
_SHORT lenabs ;
|
|
_SHORT rmAbsnum ;
|
|
p_POINTS_GROUP pGroupsBorder ;
|
|
_SHORT lenGrBord ;
|
|
_SHORT rmGrBord ;
|
|
|
|
_SHORT iBegBlankGroups ;
|
|
#if defined(FOR_GERMAN) || defined(FOR_FRENCH) || defined(FOR_INTERNATIONAL)
|
|
p_UM_MARKS_CONTROL pUmMarksControl ;
|
|
#endif
|
|
p_C_SDS p_cSDS ; /* array of geometric features */
|
|
_SHORT VertSticksNum ;
|
|
p_POINTS_GROUP pVS_Collector ;
|
|
_SHORT padding ;
|
|
_SHORT slope ;
|
|
_SHORT width_letter ;
|
|
_SHORT StepSure ;
|
|
_RECT box ;
|
|
/* the smallest and the biggest y */
|
|
/* the smallest and the biggest x */
|
|
HEIGHTS_DEF hght ;
|
|
_SHORT o_little ;
|
|
_SHORT z_little ;
|
|
}
|
|
low_type, _PTR p_low_type ;
|
|
|
|
typedef p_low_type p_LowData ;
|
|
|
|
|
|
#if PG_DEBUG
|
|
_VOID draw_SDS(p_low_type low_data);
|
|
#endif
|
|
|
|
_SHORT GetLinkBetweenThisAndNextXr(p_low_type low_data,p_SPECL pXr,
|
|
xrd_el_type _PTR xrd_elem);
|
|
_SHORT RecountBegEndInSDS(p_low_type low_data);
|
|
/* bCalc determines, whether or not to calculate some features in this function */
|
|
_SHORT iMostFarDoubleSide( p_SHORT xArray, p_SHORT yArray, p_SDS pSDS,
|
|
p_SHORT pxd, p_SHORT pyd, _BOOL bCalc ) ;
|
|
|
|
/***************************************************************************/
|
|
/* FUNCTIONS */
|
|
/***************************************************************************/
|
|
|
|
/*------------------------- module lk_begin ------------------------------*/
|
|
|
|
_SHORT lk_begin(low_type _PTR low_data); /*beginning working out of elem.*/
|
|
|
|
_SHORT get_last_in_specl(low_type _PTR low_data);
|
|
|
|
_SHORT Sort_specl(p_SPECL specl,_SHORT l_specl); /*sorting SPECL in time*/
|
|
|
|
_SHORT Clear_specl(p_SPECL specl,_SHORT len_specl);
|
|
_SHORT extremum(_UCHAR code,_SHORT beg,_SHORT end,_SHORT _PTR y);
|
|
/*------------------------ module lk_cross ------------------------------*/
|
|
|
|
_SHORT lk_cross(low_type _PTR low_data); /*sorting out of elem. crossings*/
|
|
|
|
/*------------------------ module lk_next ------------------------------*/
|
|
/* Parsing of different arcs on the ends: */
|
|
_SHORT lk_duga( low_type _PTR low_data );
|
|
|
|
/*------------------------ module low_3 -------------------------------*/
|
|
|
|
_SHORT FindDArcs ( low_type _PTR pld ) ; /* see fig. at the */
|
|
/* func. text */
|
|
|
|
/* Checks, if some _IU(D)_s should be _UU(D)_ and vice versa: */
|
|
_VOID Adjust_I_U ( low_type _PTR low_data ) ;
|
|
|
|
_BOOL FindSideExtr( low_type _PTR low_data ) ;
|
|
|
|
_BOOL PostFindSideExtr( low_type _PTR low_data );
|
|
|
|
_SHORT RestoreColons( low_type _PTR low_data );
|
|
#if !defined (FOR_GERMAN)
|
|
_BOOL RestoreApostroph(p_low_type low_data,p_SPECL pCurr); /*Eric*/
|
|
#endif
|
|
/*------------------------ module breaks -------------------------------*/
|
|
_SHORT xt_st_zz(low_type _PTR low_data); /* working out of tear-off parts */
|
|
_BOOL find_CROSS(p_low_type low_data,_SHORT ibeg_X,_SHORT iend_X,
|
|
p_SPECL _PTR pCross);
|
|
|
|
/*------------------------ module FILTER -------------------------------*/
|
|
|
|
_SHORT Filt( low_type _PTR pLowData ,
|
|
_SHORT t_horda , _SHORT fl_absence ) ;
|
|
|
|
_SHORT PreFilt( _SHORT t_horda , low_type _PTR p_low_data ) ;
|
|
_VOID Errorprov(low_type _PTR low_data) ; /* check tablete co-ordinates*/
|
|
|
|
/*------------------------ module INIT_GRF -------------------------------*/
|
|
|
|
_VOID AcceptEps( _SHORT a,_SHORT b,_SHORT lf,_SHORT lz,p_SHORT eps ) ;
|
|
|
|
_VOID AcceptNbcut (_VOID) ;
|
|
|
|
_VOID glob_low_init( _VOID ) ; /* initialisation of globals */
|
|
|
|
/*----------------------- module CHECK, PICT, CROSS ---------------------*/
|
|
|
|
_SHORT InitSpecl( low_type _PTR low_data, _SHORT n ) ;
|
|
|
|
_SHORT InitSpeclElement( SPECL _PTR specl ) ;
|
|
|
|
|
|
_SHORT Mark( low_type _PTR low_data ,
|
|
_UCHAR mark , _UCHAR code, _UCHAR attr , _UCHAR other ,
|
|
_SHORT begin, _SHORT end , _SHORT ipoint0, _SHORT ipoint1 ) ;
|
|
|
|
_SHORT MarkSpecl( low_type _PTR low_data , SPECL _PTR p_tmpSpecl ) ;
|
|
|
|
_BOOL NoteSpecl( low_type _PTR pLowData , SPECL _PTR pTmpSpecl ,
|
|
SPECL _PTR pSpecl , _SHORT _PTR pLspecl ,
|
|
_SHORT limSpecl ) ;
|
|
|
|
#if PG_DEBUG
|
|
|
|
_VOID PaintSpeclElement( low_type _PTR pLowData, SPECL _PTR pNewSpecl,
|
|
SPECL _PTR pSpecl , _SHORT _PTR pLspecl );
|
|
#endif
|
|
|
|
p_SPECL LastElemAnyKind ( p_SPECL pSpecl , _UCHAR kind_of_mark ) ;
|
|
|
|
p_SPECL FirstElemAnyKind ( p_SPECL pSpecl , _UCHAR kind_of_mark ) ;
|
|
|
|
_SHORT Pict( low_type _PTR low_data ) ;
|
|
|
|
_SHORT Surgeon( low_type _PTR pLowData ) ;
|
|
|
|
_SHORT OperateSpeclArray( low_type _PTR pLowData ) ;
|
|
|
|
#define NO_CONTACT 0x0000
|
|
#define END_RESTRICTION 0x0001
|
|
#define ANY_OCCUARANCE 0x0002
|
|
#define END_INSIDE 0x0004
|
|
#define IP0_INSIDE 0x0008
|
|
#define BEG_INSIDE 0x0010
|
|
#define TOTALY_INSIDE 0x0020
|
|
#define TOTALY_COVERED 0x0040
|
|
#define MOD_SKIP 0x0080
|
|
|
|
_SHORT SpcElemFirstOccArr( low_type _PTR pLowData, p_INT pModeWord ,
|
|
p_POINTS_GROUP pTrajectoryCut, _UCHAR mark ) ;
|
|
|
|
#define NREDUCTION 5
|
|
#define NREDUCTION_FOR_BORDER 0
|
|
|
|
_SHORT Extr( low_type _PTR low_data, _SHORT eps_fy,
|
|
_SHORT eps_fx , _SHORT eps_fxy , _SHORT eps_fyx ,
|
|
_SHORT nMaxReduct , _SHORT extr_axis ) ;
|
|
|
|
_SHORT Cross( low_type _PTR low_data ) ;
|
|
|
|
|
|
|
|
_SHORT Clash( _SHORT _PTR x, _SHORT _PTR y, _SHORT i, _SHORT j,
|
|
_SHORT of, _SHORT bf ) ;
|
|
|
|
/***************************************************************************/
|
|
/* module LOW_UTIL */
|
|
/***************************************************************************/
|
|
|
|
#define LEFT_OUTSIDE 1
|
|
#define RIGHT_OUTSIDE 2
|
|
#define LEFT_SHIFT 3
|
|
#define RIGHT_SHIFT 4
|
|
#define INSIDE 5
|
|
#define COVERS 6
|
|
|
|
|
|
_VOID SetXYToInitial ( low_type _PTR pLowData ) ;
|
|
|
|
_SHORT LowAlloc( _SHORT _PTR _PTR buffer,
|
|
_SHORT num_buffers , _SHORT len_buf ,
|
|
low_type _PTR pLowData ) ;
|
|
|
|
_SHORT low_dealloc( _SHORT _PTR _PTR buffer ) ;
|
|
|
|
_SHORT alloc_rastr( _ULONG _PTR _PTR rastr ,
|
|
_SHORT num_rastrs,_SHORT len_rastr ) ;
|
|
|
|
_SHORT dealloc_rastr( _ULONG _PTR _PTR rastr ) ;
|
|
|
|
_BOOL AllocSpecl ( p_SPECL _PTR ppSpecl, _SHORT nElements ) ;
|
|
|
|
_VOID DeallocSpecl ( p_SPECL _PTR ppSpecl ) ;
|
|
|
|
_BOOL CreateSDS ( low_type _PTR pLowData , _SHORT nSDS ) ;
|
|
|
|
_VOID DestroySDS( low_type _PTR pLowData ) ;
|
|
_SHORT MaxPointsGrown(
|
|
#ifdef FORMULA
|
|
_TRACE trace,
|
|
#endif /*FORMULA*/
|
|
_SHORT nPoints ) ;
|
|
/* Max # of points */
|
|
/* after "Errorprov" or oth-*/
|
|
/* er functions in "x" and */
|
|
/* "y" arrays. nPoints - */
|
|
/* initial value. */
|
|
_INT MaxesCount( p_SHORT xyArr, low_type _PTR pLowData ) ;
|
|
/* Counts (and returns) the total number of */
|
|
/* x- or y-maxima in the whole trajectory. */
|
|
|
|
_BOOL BorderForSpecSymbol ( low_type _PTR pLowData , rc_type _PTR rc );
|
|
/* If the trace looks like some special */
|
|
/* symbol (fraction line,"-","=","+"), then */
|
|
/* finds borders for it and returns _TRUE, */
|
|
/* otherwise does nothing and returns _FALSE. */
|
|
|
|
_LONG DistanceSquare ( _INT i1, _INT i2, p_SHORT xAr, p_SHORT yAr ) ;
|
|
/* The square of the distance between */
|
|
/* points #i1 and #i2. */
|
|
|
|
#if 0
|
|
#define PRESERVE_GLOB_EXTR _TRUE /* For usage as parameter */
|
|
/* "bPreserveGlobExtr" in funct- */
|
|
/* ion "SmoothXY". */
|
|
|
|
_BOOL SmoothXY ( p_SHORT x, p_SHORT y,
|
|
_INT iLeft, _INT iRight,
|
|
_INT nTimes, _BOOL bPreserveGlobExtr );
|
|
#endif
|
|
|
|
/* This function computes the square of the distance of the */
|
|
/* point (xPoint,yPoint) to the straight line going through */
|
|
/* (x1,y1) and (x2,y2). See figure in the function code. */
|
|
_LONG QDistFromChord ( _INT x1, _INT y1,
|
|
_INT x2, _INT y2,
|
|
_INT xPoint, _INT yPoint );
|
|
|
|
#define CURV_MAX (1000L)
|
|
#define CURV_NORMA (100L)
|
|
|
|
_SHORT CurvMeasure ( p_SHORT x, p_SHORT y,
|
|
_INT iBeg, _INT iEnd,
|
|
_INT iMostFar );
|
|
|
|
/* This function computes the distance whose "circle" */
|
|
/* is the 8-angles figure: */
|
|
_INT Distance8 ( _INT x1, _INT y1,
|
|
_INT x2, _INT y2 );
|
|
|
|
#if PG_DEBUG
|
|
_VOID SetNewAttr ( p_SPECL pElem, _UCHAR hght, _UCHAR fb_dir );
|
|
/* Clears attrs and sets */
|
|
/* specified height and cir- */
|
|
/* cle direction. */
|
|
#else
|
|
#define SetNewAttr(el,h,fb) (el)->attr = (((h)&_umd_) | ((fb)&_fb_))
|
|
#endif
|
|
|
|
#if (PG_DEBUG || PG_DEBUG_WIN)
|
|
p_SPECL BadSPECLPtr (_VOID);
|
|
#define REF(elem) ((elem)? (elem):BadSPECLPtr())
|
|
#define CHECK_PTR(p) {if ((p)==_NULL) BadSPECLPtr();}
|
|
#else
|
|
#define REF(elem) (elem)
|
|
#define CHECK_PTR(p) {}
|
|
#endif /*!(PG_DEBUG || PG_DEBUG_WIN)*/
|
|
|
|
#define ANY_CROSSING(pElem) ( REF(pElem)->mark==CROSS \
|
|
|| REF(pElem)->mark==HATCH \
|
|
|| REF(pElem)->mark==STICK )
|
|
#define IU_OR_ID(pElem) (REF(pElem)->code==_IU_ || REF(pElem)->code==_ID_)
|
|
/* #define SET_XTST_BITS(pElem) {SetBit(pElem,X_XT); SetBit(pElem,X_ST);}*/
|
|
#define NULL_OR_ZZ(pElem) ( (pElem)==_NULL \
|
|
|| REF(pElem)->code==_ZZZ_ \
|
|
|| REF(pElem)->code==_ZZ_ \
|
|
|| REF(pElem)->code==_Z_ \
|
|
|| REF(pElem)->code==_FF_ )
|
|
|
|
#define ANY_BREAK(pElem) ( REF(pElem)->code==_ZZZ_ \
|
|
|| REF(pElem)->code==_ZZ_ \
|
|
|| REF(pElem)->code==_Z_ \
|
|
|| REF(pElem)->code==_FF_ )
|
|
#define ANY_ARC_WITH_TAIL(pElem) ( REF(pElem)->code==_UUR_ \
|
|
|| REF(pElem)->code==_UUL_ \
|
|
|| REF(pElem)->code==_UDR_ \
|
|
|| REF(pElem)->code==_UDL_)
|
|
|
|
#define ANY_GAMMA_SMALL(pElem) ( REF(pElem)->code==_GUs_ \
|
|
|| REF(pElem)->code==_GDs_ \
|
|
|| REF(pElem)->code==_Gl_ \
|
|
|| REF(pElem)->code==_Gr_)
|
|
|
|
#define ANY_ANGLE(pElem) ( REF(pElem)->code==_ANl \
|
|
|| REF(pElem)->code==_ANr \
|
|
|| REF(pElem)->code==_AN_UR \
|
|
|| REF(pElem)->code==_AN_UL \
|
|
)
|
|
#define XT_OR_ST(pElem) ( REF(pElem)->code==_XT_ \
|
|
|| REF(pElem)->code==_ST_)
|
|
#define ANY_MOVEMENT(pElem) ( REF(pElem)->code==_TZ_ \
|
|
|| REF(pElem)->code==_TS_ \
|
|
|| REF(pElem)->code==_BL_ \
|
|
|| REF(pElem)->code==_BR_)
|
|
#if LOW_INLINE
|
|
#define IsAnyCrossing(e) ANY_CROSSING(e)
|
|
#define Is_IU_or_ID(e) IU_OR_ID(e)
|
|
#define NULL_or_ZZ_this(el) NULL_OR_ZZ(el)
|
|
#define NULL_or_ZZ_after(el) NULL_or_ZZ_this(REF(el)->next)
|
|
#define NULL_or_ZZ_before(el) NULL_or_ZZ_this(REF(el)->prev)
|
|
#define IsAnyBreak(el) ANY_BREAK(el)
|
|
#define IsAnyArcWithTail(el) ANY_ARC_WITH_TAIL(el)
|
|
#define IsAnyGsmall(el) ANY_GAMMA_SMALL(el)
|
|
#define IsAnyAngle(el) ANY_ANGLE(el)
|
|
#define IsXTorST(el) XT_OR_ST(el)
|
|
#define IsAnyMovement(el) ANY_MOVEMENT(el)
|
|
#else
|
|
_BOOL IsAnyCrossing ( p_SPECL pElem ); /* Checks if the "Elem" has the */
|
|
/* HATCH,CROSS or STICK mark. */
|
|
_BOOL IsAnyBreak( p_SPECL pElem ); /* Checks if the "Elem" is BREAK*/
|
|
_BOOL Is_IU_or_ID ( p_SPECL pElem );
|
|
/* _VOID SetXTSTBits ( p_SPECL pElem );*/ /* Sets both XT and ST bits */
|
|
/* (frequently used operation). */
|
|
_BOOL NULL_or_ZZ_this ( p_SPECL pElem );
|
|
_BOOL NULL_or_ZZ_after ( p_SPECL pElem );
|
|
_BOOL NULL_or_ZZ_before( p_SPECL pElem );
|
|
_BOOL IsAnyArcWithTail(p_SPECL pElem);
|
|
_BOOL IsAnyGsmall(p_SPECL pElem);
|
|
_BOOL IsAnyAngle(p_SPECL pElem);
|
|
_BOOL IsXTorST(p_SPECL pElem);
|
|
_BOOL IsAnyMovement(p_SPECL pElem);
|
|
#endif /*LOW_INLINE*/
|
|
|
|
p_SPECL SkipAnglesAfter ( p_SPECL pElem );
|
|
p_SPECL SkipAnglesBefore ( p_SPECL pElem );
|
|
|
|
p_SPECL FindStrongElemAfter ( p_SPECL pElem );
|
|
p_SPECL FindStrongElemBefore ( p_SPECL pElem );
|
|
_BOOL IsUpperElem ( p_SPECL pElem );
|
|
_BOOL IsLowerElem ( p_SPECL pElem );
|
|
|
|
_BOOL IsStrongElem ( p_SPECL pElem );
|
|
_BOOL X_IsBreak ( p_xrd_el_type pXr );
|
|
_BOOL X_IsStrongElem( p_xrd_el_type pXr );
|
|
|
|
_INT iRefPoint( p_SPECL pElem, p_SHORT y );
|
|
_UCHAR HeightInLine ( _SHORT y, /* Calculating height in */
|
|
low_type _PTR pLowData ); /* the line of the point */
|
|
/* with abs.coord "y". */
|
|
_UCHAR MidPointHeight ( p_SPECL pElem, low_type _PTR pLowData );
|
|
/* The height of the middle point */
|
|
/* of the "pElem" */
|
|
_INT iMidPointPlato ( _INT iFirst, _INT iToStop, p_SHORT val, p_SHORT y );
|
|
|
|
|
|
_BOOL GetBoxFromTrace ( _TRACE trace,
|
|
_INT iLeft, _INT iRight,
|
|
p_RECT pRect );
|
|
_VOID GetTraceBox ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iLeft, _INT iRight,
|
|
p_RECT pRect );
|
|
|
|
_BOOL GetTraceBoxInsideYZone ( p_SHORT x, p_SHORT y,
|
|
_INT ibeg, _INT iend,
|
|
_SHORT yUpZone, _SHORT yDnZone,
|
|
p_RECT pRect,
|
|
p_SHORT ixmax,p_SHORT ixmin,p_SHORT iymax,p_SHORT iymin);
|
|
#define size_cross(jb,je,x,y,pr) GetTraceBox((x),(y),(jb),(je),(pr))
|
|
|
|
/* Values of (*ptRetCod) after "ClosedSquare" worked: */
|
|
|
|
#define RETC_OK ((_SHORT)0)
|
|
#define RETC_NO_PTS_IN_TRAJECTORY ((_SHORT)1)
|
|
#define RETC_BREAK_WHERE_SHOULDNT ((_SHORT)2)
|
|
|
|
_LONG ClosedSquare( p_SHORT xTrace, p_SHORT yTrace,
|
|
_INT iBeg, _INT iEnd, p_SHORT ptRetCod );
|
|
_LONG TriangleSquare( p_SHORT x, p_SHORT y,
|
|
_INT i1, _INT i2, _INT i3 );
|
|
_SHORT CurvFromSquare( p_SHORT x, p_SHORT y,
|
|
_INT iBeg, _INT iEnd );
|
|
_LONG LengthOfTraj( p_SHORT xTrace, p_SHORT yTrace,
|
|
_INT iBeg, _INT iEnd, p_LONG pChord ,p_SHORT ptRetCod );
|
|
/* Calc. angle cos */
|
|
_LONG cos_pointvect ( _INT xbeg1, _INT ybeg1,
|
|
_INT xend1, _INT yend1,
|
|
_INT xbeg2, _INT ybeg2,
|
|
_INT xend2, _INT yend2 );
|
|
_LONG cos_vect( _INT beg1, _INT end1, /* beg and end first */
|
|
_INT beg2, _INT end2, /* and second vector's */
|
|
_SHORT _PTR x, _SHORT _PTR y);
|
|
_LONG cos_horizline ( _INT beg1, _INT end1,
|
|
_SHORT _PTR x, _SHORT _PTR y);
|
|
_LONG cos_normalslope ( _INT beg1, _INT end1,
|
|
_INT slope, _SHORT _PTR x, _SHORT _PTR y );
|
|
|
|
_UCHAR GetBit (p_SPECL elem,_SHORT bitnum);
|
|
_BOOL SetBit (p_SPECL elem, _SHORT bitnum);
|
|
_BOOL ClrBit (p_SPECL elem, _SHORT bitnum);
|
|
|
|
_INT ixMin ( _INT iStart, _INT iEnd, p_SHORT xArray, p_SHORT yArray );
|
|
_INT ixMax ( _INT iStart, _INT iEnd, p_SHORT xArray, p_SHORT yArray );
|
|
_INT iXYweighted_max_right ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iStart, _INT nDepth,
|
|
_INT xCoef, _INT yCoef );
|
|
_INT iXmax_right ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iStart, _INT nDepth );
|
|
_INT iXmin_right ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iStart, _INT nDepth );
|
|
_INT iXmax_left ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iStart, _INT nDepth );
|
|
_INT iXmin_left ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iStart, _INT nDepth );
|
|
#define iYup_right(y,iStart,nDepth) (iXmin_right((y),(y),(iStart),(nDepth)))
|
|
#define iYdown_right(y,iStart,nDepth) (iXmax_right((y),(y),(iStart),(nDepth)))
|
|
#define iYup_left(y,iStart,nDepth) (iXmin_left((y),(y),(iStart),(nDepth)))
|
|
#define iYdown_left(y,iStart,nDepth) (iXmax_left((y),(y),(iStart),(nDepth)))
|
|
_BOOL xMinMax ( _INT ibeg, _INT iend,
|
|
p_SHORT x, p_SHORT y,
|
|
p_SHORT pxMin, p_SHORT pxMax );
|
|
_BOOL yMinMax ( _INT ibeg, _INT iend,
|
|
p_SHORT y,
|
|
p_SHORT pyMin, p_SHORT pyMax );
|
|
_INT iyMin ( _INT iStart, _INT iEnd, p_SHORT yArray );
|
|
|
|
_INT iyMax ( _INT iStart, _INT iEnd, p_SHORT yArray );
|
|
_INT iYup_range ( p_SHORT yArray, _INT iStart, _INT iEnd );
|
|
_INT iYdown_range ( p_SHORT yArray, _INT iStart, _INT iEnd );
|
|
|
|
_INT iClosestToXY ( _INT iBeg, _INT iEnd,
|
|
p_SHORT xAr, p_SHORT yAr,
|
|
_SHORT xRef, _SHORT yRef );
|
|
_INT iClosestToY( p_SHORT yAr, _INT iBeg, _INT iEnd, _SHORT yVal );
|
|
|
|
_BOOL FindCrossPoint ( _SHORT x1, _SHORT y1, _SHORT x2, _SHORT y2,
|
|
_SHORT x3, _SHORT y3, _SHORT x4, _SHORT y4,
|
|
p_SHORT pxAnswer, p_SHORT pyAnswer );
|
|
_BOOL is_cross ( _SHORT x1, _SHORT y1, _SHORT x2, _SHORT y2,
|
|
_SHORT x3, _SHORT y3, _SHORT x4, _SHORT y4 );
|
|
_INT iMostFarFromChord ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iLeft, _INT iRight );
|
|
|
|
/* Constants - return values of the "SideExtr" */
|
|
/* function: */
|
|
/* "NO_SIDE_EXTR" Must be ZERO */
|
|
|
|
#define NO_SIDE_EXTR 0
|
|
#define SIDE_EXTR_LIKE_1ST 1
|
|
#define SIDE_EXTR_LIKE_2ND 2
|
|
#define SIDE_EXTR_LIKE_1ST_WEAK 3
|
|
#define SIDE_EXTR_LIKE_2ND_WEAK 4
|
|
|
|
#if defined(FOR_GERMAN) || defined(FOR_FRENCH)
|
|
#define SIDE_EXTR_TRACE_FOR_er 5
|
|
#endif /*FOR_GERMAN*/
|
|
|
|
/* Constant for usage as "bStrict" argument of "SideExtr": */
|
|
|
|
#define STRICT_ANGLE_STRUCTURE _TRUE
|
|
_INT SideExtr( p_SHORT x, p_SHORT y,
|
|
_INT iBeg, _INT iEnd,
|
|
_INT nSlope,
|
|
p_SHORT xBuf, p_SHORT yBuf,
|
|
p_SHORT ind_back,
|
|
p_INT piSideExtr,
|
|
_BOOL bStrict );
|
|
|
|
_INT iMostCurvedPoint( p_SHORT x, p_SHORT y,
|
|
_INT iBeg, _INT iEnd, _INT nCurvAll );
|
|
|
|
/* "CurrIndex" finds the current index of the point */
|
|
/* with the "ind_old" source index (i.e. on the un- */
|
|
/* modified trajectory). Or UNDEF, if this wasn't */
|
|
/* found. */
|
|
_SHORT CurrIndex ( p_SHORT indBack, _INT ind_old, _INT nIndexes );
|
|
_SHORT SlopeShiftDx ( _SHORT dy, _INT slope );
|
|
|
|
#define STRICT_OVERLAP _TRUE
|
|
_BOOL xHardOverlapRect ( p_RECT pr1, p_RECT pr2, _BOOL bStrict );
|
|
_BOOL yHardOverlapRect ( p_RECT pr1, p_RECT pr2, _BOOL bStrict );
|
|
_BOOL HardOverlapRect ( p_RECT pr1, p_RECT pr2, _BOOL bStrict );
|
|
|
|
#define STRICT_IN _TRUE
|
|
_BOOL SoftInRect ( p_RECT pr1, p_RECT pr2, _BOOL bStrict );
|
|
|
|
_BOOL IsRightGulfLikeIn3 ( p_SHORT x, p_SHORT y,
|
|
_INT iBeg, _INT iEnd,
|
|
p_INT piGulf );
|
|
_INT brk_right ( p_SHORT yArray,
|
|
_INT iStart, _INT iEnd );
|
|
|
|
|
|
_INT brk_left ( p_SHORT yArray,
|
|
_INT iStart, _INT iEnd );
|
|
_INT nobrk_right ( p_SHORT yArray,
|
|
_INT iStart, _INT iEnd );
|
|
_INT nobrk_left ( p_SHORT yArray,
|
|
_INT iStart, _INT iEnd );
|
|
#define _FIRST 0
|
|
#define _MEAD 1
|
|
#define _LAST 2
|
|
|
|
_SHORT NewIndex ( p_SHORT indBack , p_SHORT newY ,
|
|
_SHORT ind_old , _SHORT nIndexes , _SHORT fl ) ;
|
|
|
|
|
|
_SHORT R_ClosestToLine( p_SHORT xAr, p_SHORT yAr, PS_point_type _PTR pRef,
|
|
p_POINTS_GROUP pLine , p_SHORT p_iClosest ) ;
|
|
_VOID DefLineThresholds ( p_low_type pLowData ) ;
|
|
_LONG SquareDistance ( _SHORT xBeg , _SHORT yBeg,
|
|
_SHORT xEnd , _SHORT yEnd );
|
|
|
|
#define INIT 1
|
|
#define NOINIT 0
|
|
|
|
_SHORT InitGroupsBorder( low_type _PTR pLowData , _SHORT fl_BoxInit ) ;
|
|
|
|
_INT GetGroupNumber( low_type _PTR pLowData , _INT iPoint ) ;
|
|
|
|
_BOOL HeightMeasure( _INT iBeg, _INT iEnd, low_type _PTR pLowData ,
|
|
p_UCHAR pUpperHeight, p_UCHAR pLowerHeight ) ;
|
|
|
|
_SHORT IsPointCont( low_type _PTR pLowData, _INT iPoint, _UCHAR mark );
|
|
|
|
|
|
/* Return values of the function "DefineWritingStep": */
|
|
|
|
//with bUseMediana == _TRUE
|
|
#define STEP_INDEPENDENT 0
|
|
#define STEP_MEDIANA 1
|
|
#define STEP_COMBINED 2
|
|
//with bUseMediana == _FALSE
|
|
#define STEP_SURE STEP_INDEPENDENT
|
|
#define STEP_REJECT STEP_MEDIANA
|
|
#define STEP_UNSURE STEP_COMBINED
|
|
_SHORT DefineWritingStep( low_type _PTR low_data,
|
|
p_SHORT pxWrtStep,
|
|
_BOOL bUseMediana );
|
|
|
|
_BOOL IsInnerAngle ( p_SHORT xArray, p_SHORT yArray,
|
|
SPECL _PTR pFrst, SPECL _PTR pLast,
|
|
SPECL _PTR pAngle );
|
|
_INT CalcDistBetwXr(p_SHORT xTrace,p_SHORT yTrace,
|
|
_INT ibeg1,_INT iend1,_INT ibeg2,_INT iend2,
|
|
p_SHORT Retcod);
|
|
|
|
_BOOL CurveHasSelfCrossing( p_SHORT x, p_SHORT y,
|
|
_INT iBeg, _INT iEnd,
|
|
p_INT pInd1, p_INT pInd2,
|
|
_LONG lMinAbsSquare );
|
|
|
|
#define POINT_ON_BORDER 0
|
|
#define POINT_INSIDE 1
|
|
#define POINT_OUTSIDE 2
|
|
/* in case of moving those two prototypes below, move defines above with them */
|
|
_SHORT IsPointInsideArea(p_SHORT pxBorder,p_SHORT pyBorder,_INT NumPntsInBorder,
|
|
_SHORT xPoint,_SHORT yPoint,p_SHORT position);
|
|
_BOOL IsPointOnBorder(p_SHORT pxBorder,p_SHORT pyBorder,_INT Pnt1st,_INT Pnt2nd,
|
|
_SHORT xPoint,_SHORT yPoint,p_BOOL pbIsCross);
|
|
|
|
_BOOL GetTraceBoxWithoutXT_ST(p_low_type low_data,_INT ibeg,_INT iend,p_RECT pRect);
|
|
_BOOL IsPointBelongsToXT_ST(_INT iPoint,p_SPECL specl);
|
|
/***************************************************************************/
|
|
/* module TRANSFRM */
|
|
/***************************************************************************/
|
|
_SHORT transfrmN(low_type _PTR low_data); /* */
|
|
/***************************************************************************/
|
|
/* module OVER */
|
|
/***************************************************************************/
|
|
_SHORT measure_slope(low_type _PTR low_data); /* calculation of */
|
|
/* slope */
|
|
/* */
|
|
_SHORT def_over(low_type _PTR low_data); /* setting OVR */
|
|
/* */
|
|
/***************************************************************************/
|
|
/* module ANGLE */
|
|
/***************************************************************************/
|
|
_SHORT angl(low_type _PTR low_data); /* search for angles */
|
|
/* */
|
|
/* */
|
|
_SHORT angle_direction(_SHORT x0, /* calculate any angle direction */
|
|
_SHORT y0, /* vector of angle direction*/
|
|
_SHORT slope); /* script slope */
|
|
/* */
|
|
/***************************************************************************/
|
|
/* module LU_SPECL */
|
|
/***************************************************************************/
|
|
|
|
p_SPECL NewSPECLElem( low_type _PTR low_data );
|
|
_VOID DelFromSPECLList ( p_SPECL pElem );
|
|
_VOID DelThisAndNextFromSPECLList ( p_SPECL pElem );
|
|
_VOID DelCrossingFromSPECLList ( p_SPECL pElem );
|
|
_VOID SwapThisAndNext ( p_SPECL pElem );
|
|
_VOID Insert2ndAfter1st ( p_SPECL p1st, p_SPECL p2nd );
|
|
_VOID InsertCrossing2ndAfter1st ( p_SPECL p1st, p_SPECL p2nd );
|
|
_VOID Move2ndAfter1st ( p_SPECL p1st, p_SPECL p2nd );
|
|
_VOID MoveCrossing2ndAfter1st ( p_SPECL p1st, p_SPECL p2nd );
|
|
|
|
#define ATTACH_2nd_TO_1st(p1,p2) {if (p1) {(p1)->next=(p2); } if(p2)(p2)->prev=(p1);}
|
|
#define CROSS_IN_TIME(p1,p2) ( p1 && p2 && (p1)->iend >= (p2)->ibeg \
|
|
&& (p2)->iend >= (p1)->ibeg )
|
|
#define FIRST_IN_SECOND(p1,p2) ( p1 && p2 && (p1)->ibeg >= (p2)->ibeg \
|
|
&& (p1)->iend <= (p2)->iend )
|
|
|
|
#if LOW_INLINE
|
|
#define Attach2ndTo1st(p1,p2) ATTACH_2nd_TO_1st(p1,p2)
|
|
#define CrossInTime(p1,p2) CROSS_IN_TIME(p1,p2)
|
|
#define FirstBelongsTo2nd(p1,p2) FIRST_IN_SECOND(p1,p2)
|
|
#else
|
|
_VOID Attach2ndTo1st ( p_SPECL p1st, p_SPECL p2nd );
|
|
_BOOL CrossInTime ( p_SPECL p1st, p_SPECL p2nd ); /* TRUE if some part */
|
|
/* of trajectory belongs to */
|
|
/* both elems. */
|
|
_BOOL FirstBelongsTo2nd ( p_SPECL p1st, p_SPECL p2nd ); /* TRUE if all */
|
|
/* trajectory of the 1st elem */
|
|
/* is part of that of the 2nd */
|
|
/* one */
|
|
#endif /*LOW_INLINE*/
|
|
|
|
_VOID RefreshElem ( p_SPECL pElem,
|
|
_UCHAR mark, _UCHAR code, _UCHAR attr
|
|
#if !NEW_VERSION
|
|
, _SHORT bitToSet
|
|
#endif /*NEW_VERSION*/
|
|
); /* Set the fields of "pElem". */
|
|
|
|
p_SPECL FindMarkRight ( p_SPECL pElem, _UCHAR mark ); /* Goes "next" */
|
|
/* until "mark" is found or end */
|
|
/* of specl. If pElem->mark==mark*/
|
|
/* returns pElem. */
|
|
p_SPECL FindMarkLeft ( p_SPECL pElem, _UCHAR mark ); /* Same, but "prev" */
|
|
|
|
/***************************************************************************/
|
|
/* module CONVERT */
|
|
/***************************************************************************/
|
|
_SHORT exchange( low_type _PTR low_data,
|
|
xrdata_type _PTR xrd);
|
|
|
|
_SHORT form_pseudo_xr_data(low_type _PTR low_data, xrdata_type _PTR xrdata);
|
|
|
|
/***************************************************************************/
|
|
/* module CIRCLE */
|
|
/***************************************************************************/
|
|
_SHORT Circle(low_type _PTR low_data); /* */
|
|
/* */
|
|
|
|
|
|
/***************************************************************************/
|
|
/* module frm_word */
|
|
/***************************************************************************/
|
|
|
|
_BOOL MayBeFrline ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iBeg, _INT iEnd,
|
|
_SHORT xRange );
|
|
|
|
/* Possible return values of "chk_sign" function: */
|
|
|
|
#define SGN_NOT_SIGN 0 /* CHE: This MUST be zero !!! */
|
|
#define SGN_SOME 1 /* Some of the possible signs listed */
|
|
/* below in "#define"'s */
|
|
#define SGN_PLUS 2
|
|
#define SGN_EQUAL 3
|
|
|
|
_SHORT chk_sign ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iBeg, _INT iEnd,
|
|
_SHORT xRange, _SHORT yRange );
|
|
|
|
/* Definition for "chk_slash" function: */
|
|
#define WHOLE_TRAJECTORY _TRUE
|
|
_BOOL chk_slash (p_SHORT xArray, p_SHORT yArray,
|
|
_INT iLeft, _INT iRight,
|
|
_SHORT yRange, _BOOL bWholeTrj );
|
|
_VOID FindStraightPart ( p_SHORT xArray, p_SHORT yArray,
|
|
p_INT piBeg, p_INT piEnd);
|
|
|
|
_BOOL delta_interval ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iLeft, _INT iRight,
|
|
_INT nMaxRectRatio,
|
|
_INT nSlope,
|
|
p_LONG pldxSum, p_LONG pldySum,
|
|
p_LONG plNumIntervals,
|
|
_BOOL bThrowBigAndSmall );
|
|
#if USE_FRM_WORD
|
|
|
|
/* Constants for usage as "bIncrementalBreak" parameter values: */
|
|
#define INCREMENTAL_BREAK _TRUE
|
|
#define NOT_INCREMENTAL_BREAK (!INCREMENTAL_BREAK)
|
|
_SHORT FrmWordBreak ( _TRACE trace, _INT nPoints,
|
|
_BOOL bIncrementalBreak,
|
|
p_SHORT pn1stWrdPoints,
|
|
p_SHORT pnFrLinePoints );
|
|
_VOID ResetFrmWordBreak(_VOID); /* Should be called before the passing */
|
|
/* the first stroke of the new formula. */
|
|
/***************************************************************************/
|
|
/* module LOW_UTIL */
|
|
/***************************************************************************/
|
|
_INT brk_left_trace ( PS_point_type _PTR trace,
|
|
_INT iStart, _INT iEnd );
|
|
_INT nobrk_left_trace ( PS_point_type _PTR trace,
|
|
_INT iStart, _INT iEnd );
|
|
_INT brk_right_trace ( PS_point_type _PTR trace,
|
|
_INT iStart, _INT iEnd );
|
|
_INT nobrk_right_trace ( PS_point_type _PTR trace,
|
|
_INT iStart, _INT iEnd );
|
|
_SHORT Xmean_range ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT iStart, _INT iEnd );
|
|
_SHORT Ymean_range ( p_SHORT yArray, _INT iStart, _INT iEnd );
|
|
_SHORT Yup_range ( p_SHORT yArray, _INT iStart, _INT iEnd );
|
|
_SHORT Ydown_range ( p_SHORT yArray, _INT iStart, _INT iEnd );
|
|
_VOID xy_to_trace ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT nPoints, _TRACE trace );
|
|
#endif /*USE_FRM_WORD*/
|
|
|
|
_VOID trace_to_xy ( p_SHORT xArray, p_SHORT yArray,
|
|
_INT nPoints, _TRACE trace );
|
|
|
|
/***************************************************************************/
|
|
/* module SPECWIN */
|
|
/***************************************************************************/
|
|
_SHORT low_level(PS_point_type _PTR trace, /* completeness of low level */
|
|
xrdata_type _PTR xrdata, /* */
|
|
rc_type _PTR rc );
|
|
|
|
_INT BaselineAndScale(low_type _PTR pLowData);
|
|
|
|
_BOOL PrepareLowData(low_type _PTR pLowData,
|
|
PS_point_type _PTR trace,
|
|
rc_type _PTR rc,
|
|
p_SHORT _PTR pbuffer);
|
|
|
|
_VOID FillLowDataTrace(low_type _PTR pLowData,
|
|
PS_point_type _PTR trace);
|
|
|
|
_VOID GetLowDataRect (low_type _PTR pLowData);
|
|
|
|
_INT AnalyzeLowData(low_type _PTR pLowData,
|
|
PS_point_type _PTR trace);
|
|
|
|
/***************************************************************************/
|
|
#endif /* LOW_LEVEL_INCLUDED */
|
|
/***************************************************************************/
|