2007-03-08 04:03:40 +08:00
|
|
|
/* -*-C-*-
|
|
|
|
********************************************************************************
|
|
|
|
*
|
|
|
|
* File: protos.h (Formerly protos.h)
|
|
|
|
* Description:
|
|
|
|
* Author: Mark Seaman, SW Productivity
|
|
|
|
* Created: Fri Oct 16 14:37:00 1987
|
|
|
|
* Modified: Fri Jul 12 10:06:55 1991 (Dan Johnson) danj@hpgrlj
|
|
|
|
* Language: C
|
|
|
|
* Package: N/A
|
|
|
|
* Status: Reusable Software Component
|
|
|
|
*
|
|
|
|
* (c) Copyright 1987, Hewlett-Packard Company.
|
|
|
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
** you may not use this file except in compliance with the License.
|
|
|
|
** You may obtain a copy of the License at
|
|
|
|
** http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
** Unless required by applicable law or agreed to in writing, software
|
|
|
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
** See the License for the specific language governing permissions and
|
|
|
|
** limitations under the License.
|
|
|
|
*
|
|
|
|
*********************************************************************************/
|
|
|
|
#ifndef PROTOS_H
|
|
|
|
#define PROTOS_H
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------
|
|
|
|
I n c l u d e s
|
|
|
|
----------------------------------------------------------------------*/
|
|
|
|
#include "bitvec.h"
|
|
|
|
#include "cutil.h"
|
2007-07-18 09:15:07 +08:00
|
|
|
#include "unichar.h"
|
2007-03-08 04:03:40 +08:00
|
|
|
|
|
|
|
/*----------------------------------------------------------------------
|
|
|
|
T y p e s
|
|
|
|
----------------------------------------------------------------------*/
|
|
|
|
typedef BIT_VECTOR *CONFIGS;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
FLOAT32 A;
|
|
|
|
FLOAT32 B;
|
|
|
|
FLOAT32 C;
|
|
|
|
FLOAT32 X;
|
|
|
|
FLOAT32 Y;
|
|
|
|
FLOAT32 Angle;
|
|
|
|
FLOAT32 Length;
|
|
|
|
} PROTO_STRUCT;
|
|
|
|
typedef PROTO_STRUCT *PROTO;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
INT16 NumProtos;
|
|
|
|
INT16 MaxNumProtos;
|
|
|
|
PROTO Prototypes;
|
|
|
|
INT16 NumConfigs;
|
|
|
|
INT16 MaxNumConfigs;
|
|
|
|
CONFIGS Configurations;
|
|
|
|
} CLASS_STRUCT;
|
|
|
|
typedef CLASS_STRUCT *CLASS_TYPE;
|
|
|
|
typedef CLASS_STRUCT *CLASSES;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------
|
|
|
|
C o n s t a n t s
|
|
|
|
----------------------------------------------------------------------*/
|
2007-07-18 09:15:07 +08:00
|
|
|
#define NUMBER_OF_CLASSES MAX_NUM_CLASSES
|
2007-03-08 04:03:40 +08:00
|
|
|
#define Y_OFFSET -40.0
|
|
|
|
#define FEATURE_SCALE 100.0
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------
|
|
|
|
V a r i a b l e s
|
|
|
|
----------------------------------------------------------------------*/
|
|
|
|
extern CLASS_STRUCT TrainingData[];
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------
|
|
|
|
M a c r o s
|
|
|
|
----------------------------------------------------------------------*/
|
|
|
|
/**********************************************************************
|
|
|
|
* AddProtoToConfig
|
|
|
|
*
|
|
|
|
* Set a single proto bit in the specified configuration.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define AddProtoToConfig(Pid,Config) \
|
|
|
|
(SET_BIT (Config, Pid))
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* RemoveProtoFromConfig
|
|
|
|
*
|
|
|
|
* Clear a single proto bit in the specified configuration.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define RemoveProtoFromConfig(Pid,Config) \
|
|
|
|
(reset_bit (Config, Pid))
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* ClassOfChar
|
|
|
|
*
|
|
|
|
* Return the class of a particular ASCII character value.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define ClassOfChar(Char) \
|
|
|
|
((TrainingData [Char].NumProtos) ? \
|
|
|
|
(& TrainingData [Char]) : \
|
|
|
|
NO_CLASS)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* ProtoIn
|
|
|
|
*
|
|
|
|
* Choose the selected prototype in this class record. Return the
|
|
|
|
* pointer to it (type PROTO).
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define ProtoIn(Class,Pid) \
|
|
|
|
(& (Class)->Prototypes [Pid])
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* ConfigIn
|
|
|
|
*
|
|
|
|
* Choose the selected prototype configuration in this class record.
|
|
|
|
* Return it as type 'BIT_VECTOR'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define ConfigIn(Class,Cid) \
|
|
|
|
((Class)->Configurations [Cid])
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* NumProtosIn
|
|
|
|
*
|
|
|
|
* Return the number of prototypes in this class. The 'Class' argument
|
|
|
|
* is of type 'CLASS_TYPE'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define NumProtosIn(Class) \
|
|
|
|
((Class)->NumProtos)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* NumConfigsIn
|
|
|
|
*
|
|
|
|
* Return the number of configurations in this class. The 'Class' argument
|
|
|
|
* is of type 'CLASS_TYPE'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define NumConfigsIn(Class) \
|
|
|
|
((Class)->NumConfigs)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* CoefficientA
|
|
|
|
*
|
|
|
|
* Return the first parameter of the prototype structure. This is the
|
|
|
|
* A coefficient in the line representation of "Ax + By + C = 0". The
|
|
|
|
* 'Proto' argument is of type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define CoefficientA(Proto) \
|
|
|
|
((Proto)->A)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* CoefficientB
|
|
|
|
*
|
|
|
|
* Return the second parameter of the prototype structure. This is the
|
|
|
|
* B coefficient in the line representation of "Ax + By + C = 0". The
|
|
|
|
* 'Proto' argument is of type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define CoefficientB(Proto) \
|
|
|
|
((Proto)->B)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* CoefficientC
|
|
|
|
*
|
|
|
|
* Return the third parameter of the prototype structure. This is the
|
|
|
|
* C coefficient in the line representation of "Ax + By + C = 0". The
|
|
|
|
* 'Proto' argument is of type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define CoefficientC(Proto) \
|
|
|
|
((Proto)->C)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* ProtoAngle
|
|
|
|
*
|
|
|
|
* Return the angle parameter of the prototype structure. The
|
|
|
|
* 'Proto' argument is of type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define ProtoAngle(Proto) \
|
|
|
|
((Proto)->Angle)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* ProtoX
|
|
|
|
*
|
|
|
|
* Return the X parameter of the prototype structure. The 'Proto'
|
|
|
|
* argument is of type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define ProtoX(Proto) \
|
|
|
|
((Proto)->X)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* ProtoY
|
|
|
|
*
|
|
|
|
* Return the angle parameter of the prototype structure. The 'Proto'
|
|
|
|
* argument is of type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define ProtoY(Proto) \
|
|
|
|
((Proto)->Y)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* ProtoLength
|
|
|
|
*
|
|
|
|
* Return the length parameter of the prototype structure. The
|
|
|
|
* 'Proto' argument is of type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define ProtoLength(Proto) \
|
|
|
|
((Proto)->Length)
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* PrintProto
|
|
|
|
*
|
|
|
|
* Print out the contents of a prototype. The 'Proto' argument is of
|
|
|
|
* type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define PrintProto(Proto) \
|
|
|
|
(cprintf ("X=%4.2f, Y=%4.2f, Angle=%4.2f", \
|
|
|
|
ProtoX (Proto), \
|
|
|
|
ProtoY (Proto), \
|
|
|
|
ProtoLength (Proto), \
|
|
|
|
ProtoAngle (Proto))) \
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* PrintProtoLine
|
|
|
|
*
|
|
|
|
* Print out the contents of a prototype. The 'Proto' argument is of
|
|
|
|
* type 'PROTO'.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
#define PrintProtoLine(Proto) \
|
|
|
|
(cprintf ("A=%4.2f, B=%4.2f, C=%4.2f", \
|
|
|
|
CoefficientA (Proto), \
|
|
|
|
CoefficientB (Proto), \
|
|
|
|
CoefficientC (Proto))) \
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------
|
|
|
|
F u n c t i o n s
|
|
|
|
----------------------------------------------------------------------*/
|
2007-07-18 09:15:07 +08:00
|
|
|
int AddConfigToClass(CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
int AddProtoToClass(CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
FLOAT32 ClassConfigLength(CLASS_TYPE Class, BIT_VECTOR Config);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
FLOAT32 ClassProtoLength(CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void CopyProto(PROTO Src, PROTO Dest);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void FillABC(PROTO Proto);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void FreeClass(CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void FreeClassFields(CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void InitPrototypes();
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
CLASS_TYPE NewClass(int NumProtos, int NumConfigs);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void PrintProtos(CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void ReadClassFile();
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void ReadClassFromFile(FILE *File, UNICHAR_ID unichar_id);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void ReadConfigs(register FILE *File, CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void ReadProtos(register FILE *File, CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
int SplitProto(CLASS_TYPE Class, int OldPid);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void WriteOldConfigFile(FILE *File, CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
2007-07-18 09:15:07 +08:00
|
|
|
void WriteOldProtoFile(FILE *File, CLASS_TYPE Class);
|
2007-03-08 04:03:40 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
#if defined(__STDC__) || defined(__cplusplus)
|
|
|
|
# define _ARGS(s) s
|
|
|
|
#else
|
|
|
|
# define _ARGS(s) ()
|
|
|
|
#endif*/
|
|
|
|
|
|
|
|
/* protos.c *
|
|
|
|
int AddConfigToClass
|
|
|
|
_ARGS((CLASS_TYPE Class));
|
|
|
|
|
|
|
|
int AddProtoToClass
|
|
|
|
_ARGS((CLASS_TYPE Class));
|
|
|
|
|
|
|
|
FLOAT32 ClassConfigLength
|
|
|
|
_ARGS((CLASS_TYPE Class,
|
|
|
|
BIT_VECTOR Config));
|
|
|
|
|
|
|
|
FLOAT32 ClassProtoLength
|
|
|
|
_ARGS((CLASS_TYPE Class));
|
|
|
|
|
|
|
|
void CopyProto
|
|
|
|
_ARGS((PROTO Src,
|
|
|
|
PROTO Dest));
|
|
|
|
|
|
|
|
void FillABC
|
|
|
|
_ARGS((PROTO Proto));
|
|
|
|
|
|
|
|
void FreeClass
|
|
|
|
_ARGS((CLASS_TYPE Class));
|
|
|
|
|
|
|
|
void FreeClassFields
|
|
|
|
_ARGS((CLASS_TYPE Class));
|
|
|
|
|
|
|
|
void InitPrototypes
|
|
|
|
_ARGS((void));
|
|
|
|
|
|
|
|
CLASS_TYPE NewClass
|
|
|
|
_ARGS((int NumProtos,
|
|
|
|
int NumConfigs));
|
|
|
|
|
|
|
|
void PrintProtos
|
|
|
|
_ARGS((CLASS_TYPE Class));
|
|
|
|
|
|
|
|
void ReadClassFile
|
|
|
|
_ARGS((void));
|
|
|
|
|
|
|
|
void ReadClassFromFile
|
|
|
|
_ARGS((FILE *File,
|
|
|
|
int ClassChar));
|
|
|
|
|
|
|
|
void ReadConfigs
|
|
|
|
_ARGS((FILE *File,
|
|
|
|
CLASS_TYPE Class));
|
|
|
|
|
|
|
|
void ReadProtos
|
|
|
|
_ARGS((FILE *File,
|
|
|
|
CLASS_TYPE Class));
|
|
|
|
|
|
|
|
int SplitProto
|
|
|
|
_ARGS((CLASS_TYPE Class,
|
|
|
|
int OldPid));
|
|
|
|
|
|
|
|
void WriteOldConfigFile
|
|
|
|
_ARGS((FILE *File,
|
|
|
|
CLASS_TYPE Class));
|
|
|
|
|
|
|
|
void WriteOldProtoFile
|
|
|
|
_ARGS((FILE *File,
|
|
|
|
CLASS_TYPE Class));
|
|
|
|
|
|
|
|
#undef _ARGS
|
|
|
|
*/
|
|
|
|
#endif
|