/*******************************************************************************
;*******************************************************************************
;**                                                                           **
;**                  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: et9imu.h                                                    **
;**                                                                           **
;**  Description: Keyboard layout module for ET9.                             **
;**                                                                           **
;*******************************************************************************
;******************************************************************************/

#ifndef ET9IMU_H
#define ET9IMU_H 1


#include "et9api.h"

/* don't mangle the function name if compile under C++ */
#if defined(__cplusplus)
extern "C" {
#endif


#define EXACTINLIST(dwState)        (dwState & ET9SLEXACTINLIST)
#define BUILDABLEEXACT(dwState)     (dwState & ET9SLBUILDABLEEXACT)

#define ET9UNDEFINEDKEYVALUE        0xFFFF
#define ET9UNDEFINEDTAPVALUE        0xFFFF

#define UNDEFINED_STORE_INDEX       0xFFFF       /* < -IDR-                                                                   */

typedef enum {
    ET9KeyLookupKind_Undef = 0,
    ET9KeyLookupKind_Std,
    ET9KeyLookupKind_Free,

    ET9KeyLookupKind_Last

} _ET9KeyLookupKind;

/*------------------------------------------------------------------
 * Functions
 *------------------------------------------------------------------*/

ET9PRIVATE ET9STATUS ET9FARCALL _ET9WordSymbInit(ET9WordSymbInfo * const pWordSymbInfo);

ET9PRIVATE void ET9FARCALL _ET9ImminentSymb(ET9WordSymbInfo    * const pWordSymbInfo,
                                            const ET9U8                bCurrIndexInList,
                                            const ET9BOOL              bImplicitLock,
                                            const ET9BOOL              bAddingSymb);

ET9PRIVATE void ET9FARCALL _ET9ContentExplicified(ET9WordSymbInfo * const pWordSymbInfo);

ET9PRIVATE void ET9FARCALL _ET9InvalidateOneSymb(ET9WordSymbInfo * const pWordSymbInfo, const ET9U8 bIndex);
ET9PRIVATE void ET9FARCALL _ET9InvalidateOneLock(ET9WordSymbInfo * const pWordSymbInfo, const ET9U8 bIndex);
ET9PRIVATE void ET9FARCALL _ET9InvalidateSymbInfo(ET9WordSymbInfo * const pWordSymbInfo);
ET9PRIVATE void ET9FARCALL _ET9InvalidateSelList(ET9WordSymbInfo * const pWordSymbInfo);

ET9PRIVATE void ET9FARCALL _ET9ValidateOneSymb(ET9WordSymbInfo * const pWordSymbInfo, const ET9U8 bIndex);
ET9PRIVATE void ET9FARCALL _ET9ValidateAllSymbs(ET9WordSymbInfo * const pWordSymbInfo);
ET9PRIVATE void ET9FARCALL _ET9ValidateOneSymbAW(ET9WordSymbInfo * const pWordSymbInfo, const ET9U8 bIndex);

ET9PRIVATE void ET9FARCALL _ET9ClearShiftInfo(ET9WordSymbInfo * const pWordSymbInfo);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9IsMagicStringKey(ET9WordSymbInfo *pWordSymbInfo);

ET9PRIVATE void ET9FARCALL _ET9SaveWord(ET9WordSymbInfo   * const pWordSymbInfo,
                                        ET9SYMB           * const pString,
                                        const ET9U16              wLen);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9_IsLastSavedWord(ET9WordSymbInfo   const * const pWordSymbInfo,
                                                   ET9SYMB           const * const pString,
                                                   const ET9U16                    wLen,
                                                   ET9BOOL                 * const pbHasShiftOrCapsGesture);

ET9PRIVATE void ET9FARCALL _ET9ExplicifyWord(ET9WordSymbInfo   * const pWordSymbInfo,
                                             ET9SimpleWord     * const pWord);

ET9PRIVATE ET9STATUS ET9FARCALL ET9MoveSymbs(ET9WordSymbInfo * const pWordSymbInfo,
                                             const ET9U8             bFromIndex,
                                             const ET9U8             bToIndex,
                                             const ET9U8             bCount);

ET9PRIVATE ET9STATUS ET9FARCALL _ET9LockWord(ET9WordSymbInfo   * const pWordSymbInfo,
                                             ET9SimpleWord      * const pWord);

ET9PRIVATE void ET9FARCALL _ET9TrackInputEvents(ET9WordSymbInfo * const pWordSymbInfo, const ET9InputEvent eInputEvent);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9IsAutoCapSituation(ET9WordSymbInfo const * const pWordSymbInfo,
                                                     ET9SYMB         const * const psString,
                                                     const ET9U16                  wStringLen);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9HasTraceInfo(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9HasTraceOnlyInfo(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9HasRegionalInfo(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9HasDiscreteOnlyInfo(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9HasAllShiftedInfo(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9HasExplicitNumber(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9IsInhibitTapOverrideAfterTrace(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9IsInhibitDelayedReorderAfterTrace(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9STATUS ET9FARCALL _ET9SettingsInhibited(ET9WordSymbInfo const * const pWordSymbInfo);

ET9PRIVATE ET9STATUS ET9FARCALL _ET9_SetAutoLocale(ET9WordSymbInfo   * const pWordSymbInfo,
                                                   const ET9U32              dwLocale);

ET9PRIVATE void ET9FARCALL _ET9_GetDefaultLocale(ET9U32 * const pdwLocale, ET9BOOL * const pbManual);

ET9PRIVATE ET9STATUS ET9FARCALL _ET9_GetKeyPositionForSymbol(ET9WordSymbInfo   * const pWordSymbInfo,
                                                             const ET9SYMB             sSymbol,
                                                             ET9TracePoint     * const pPoint,
                                                             _ET9KeyLookupKind * const peLookupKind);

ET9PRIVATE ET9BOOL ET9FARCALL _ET9HasSpaceInRegion(ET9WordSymbInfo const * const pWordSymbInfo, const ET9UINT bSymbIndex);

/* End don't mangle the function name if compile under C++ */
#if defined (__cplusplus)
    }
#endif

#endif /* ET9IMU_H */
/* ----------------------------------< eof >--------------------------------- */

