/*******************************************************************************
;*******************************************************************************
;**                                                                           **
;**                    COPYRIGHT 2001-2012 NUANCE COMMUNICATIONS              **
;**                                                                           **
;**               NUANCE COMMUNICATIONS PROPRIETARY INFORMATION               **
;**                                                                           **
;**     This software is supplied under the terms of a license agreement      **
;**     or non-disclosure agreement with Nuance Communications and may not    **
;**     be copied or disclosed except in accordance with the terms of that    **
;**     agreement.                                                            **
;**                                                                           **
;*******************************************************************************
;**                                                                           **
;**     FileName: et9asys.h                                                   **
;**                                                                           **
;**  Description: Alphabetic system routines header file.                     **
;**                                                                           **
;*******************************************************************************
;******************************************************************************/

#ifndef ET9ASYS_H
#define ET9ASYS_H    1

#include "et9api.h"
#ifdef ET9_ALPHABETIC_MODULE

/* don't mangle the function name if compile under C++ */
#if defined(__cplusplus)
extern "C" {
#endif

/* dev state bits for inhibiting features */

#define ET9DEVSTATEINHBEXACTLOCK                        0       /* < -IDR-                                                         */
#define ET9DEVSTATEINHBNOMDBNWP                         1       /* < -IDR-                                                                     */
#define ET9DEVSTATEINHBTRACECMPLDEMOTE                  2       /* < -IDR-                                                              */

#define ET9DEVSTATEINHBEXACTLOCKMASK                    (1L << ET9DEVSTATEINHBEXACTLOCK)
#define ET9DEVSTATEINHBNOMDBNWPMASK                     (1L << ET9DEVSTATEINHBNOMDBNWP)
#define ET9DEVSTATEINHBTRACECMPLDEMOTEMASK              (1L << ET9DEVSTATEINHBTRACECMPLDEMOTE)

#define ET9DEVSTATEINHBEXACTLOCK_MODE(dwState)          ((dwState) & ET9DEVSTATEINHBEXACTLOCKMASK)
#define ET9DEVSTATEINHBNOMDBNWP_MODE(dwState)           ((dwState) & ET9DEVSTATEINHBNOMDBNWPMASK)
#define ET9DEVSTATEINHBTRACECMPLDEMOTE_MODE(dwState)    ((dwState) & ET9DEVSTATEINHBTRACECMPLDEMOTEMASK)


ET9STATUS ET9FARCALL ET9AWSetPrimaryFence(ET9AWLingInfo * const pLingInfo,
                                          const ET9U8           bFence);

ET9STATUS ET9FARCALL ET9AWSetSecondaryFence(ET9AWLingInfo   * const pLingInfo,
                                            const ET9U8             bFence);

/* word collections */

ET9PRIVATE void ET9FARCALL _ET9AW_InitWordCollections(ET9AWLingInfo    * const pLingInfo,
                                                      const ET9UINT            nMainSize,
                                                      const ET9BOOL            bWillUseAux);

ET9PRIVATE ET9STATUS ET9FARCALL _ET9AW_PushWordCollection(ET9AWLingInfo * const pLingInfo);
ET9PRIVATE ET9STATUS ET9FARCALL _ET9AW_PopWordCollection(ET9AWLingInfo * const pLingInfo);

ET9PRIVATE void ET9FARCALL _ET9AW_ResetWordList(ET9AWLingInfo * const pLingInfo);

/* flex features */

#define ET9_FLEX_FEATURE_ACTIVATE_BIT               0       /* < -IDR-                        */
#define ET9_FLEX_FEATURE_FREE_DOUBLE_BIT            1       /* < -IDR-                                         */
#define ET9_FLEX_FEATURE_FREE_PUNCT_BIT             2       /* < -IDR-                                       */
#define ET9_FLEX_FEATURE_SPC_COMPL_BIT              3       /* < -IDR-                                 */
#define ET9_FLEX_FEATURE_OPTIONAL_BIT               4       /* < -IDR-                                                 */

#define ET9_FLEX_FEATURE_ACTIVATE_MASK              (1 << ET9_FLEX_FEATURE_ACTIVATE_BIT)
#define ET9_FLEX_FEATURE_FREE_DOUBLE_MASK           (1 << ET9_FLEX_FEATURE_FREE_DOUBLE_BIT)
#define ET9_FLEX_FEATURE_FREE_PUNCT_MASK            (1 << ET9_FLEX_FEATURE_FREE_PUNCT_BIT)
#define ET9_FLEX_FEATURE_SPC_COMPL_MASK             (1 << ET9_FLEX_FEATURE_SPC_COMPL_BIT)
#define ET9_FLEX_FEATURE_OPTIONAL_MASK              (1 << ET9_FLEX_FEATURE_OPTIONAL_BIT)

#define ET9_FLEX_FEATURE_ALL_MASK                   (0xFF & ~ET9_FLEX_FEATURE_OPTIONAL_MASK)

#define ET9_FLEX_FEATURE_ACTIVATE_MODE(bState)      ((bState) & ET9_FLEX_FEATURE_ACTIVATE_MASK)
#define ET9_FLEX_FEATURE_FREE_DOUBLE_MODE(bState)   ((bState) & ET9_FLEX_FEATURE_FREE_DOUBLE_MASK)
#define ET9_FLEX_FEATURE_FREE_PUNCT_MODE(bState)    ((bState) & ET9_FLEX_FEATURE_FREE_PUNCT_MASK)
#define ET9_FLEX_FEATURE_SPC_COMPL_MODE(bState)     ((bState) & ET9_FLEX_FEATURE_SPC_COMPL_MASK)
#define ET9_FLEX_FEATURE_OPTIONAL_MODE(bState)      ((bState) & ET9_FLEX_FEATURE_OPTIONAL_MASK)

/* not private */ ET9STATUS ET9FARCALL _ET9AWSetSelectionListMode(ET9AWLingInfo * const pLingInfo,
                                                                  const ET9ASLMODE      eMode);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9AW_IsUsingLM(ET9AWLingInfo * const pLingInfo);

ET9STATUS ET9FARCALL ET9AWSetSpmScoring(ET9AWLingInfo * const pLingInfo);

ET9STATUS ET9FARCALL ET9AWClearSpmScoring(ET9AWLingInfo * const pLingInfo);

#ifdef ET9_USE_FLOAT_FREQS
#define ET9_DB_UNQ_FREQ     1000
#define ET9_DB_MAX_FREQ     0xFFFFFFFF
#else
#define ET9_DB_UNQ_FREQ     10
#define ET9_DB_MAX_FREQ     0xFFFF
#endif

ET9STATUS ET9FARCALL ET9AWSetConvertSymb(ET9AWLingInfo        * const pLingInfo,
                                         const ET9CONVERTSYMBCALLBACK pConvertSymb,
                                         void                 * const pConvertSymbInfo);

/* End don't mangle the function name if compile under C++ */
#if defined (__cplusplus)
    }
#endif

#endif /* ET9_ALPHABETIC_MODULE */
#endif /* !ET9ASYS_H */


/* ----------------------------------< eof >--------------------------------- */
