/*******************************************************************************
;*******************************************************************************
;**                                                                           **
;**                  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: et9adbm.h                                                   **
;**                                                                           **
;**  Description: API definition for keyboards. Implemented in et9aspath.c.   **
;**                                                                           **
;*******************************************************************************
;******************************************************************************/


#ifndef _DBM_H_
#define _DBM_H_                 1

/*==========================// */
/*          NOTES           // */
/*==========================// */

/*  Key indexing - The Zdb database uses key indexing 0 - (N - 1), where N is */
/*  the value returned from keyCnt() or letterKeyCnt(). */

/*  Keys are ordered with all letter keys occuring at indexing 0 - (M - 1), where M */
/*  is obtained from letterKeyCnt().  Non-letter keys follow the letter keys */
/*  as M - (N - 1), where N is obtained from keyCnt(). */

/*==========================// */
/*      INCLUDE FILES       // */
/*==========================// */

#include "et9abuildconfig.h"

#include "et9ageometry.h"
#include "et9aword.h"
#include "et9abackend.h"


struct SWDbm_s
{
    BackEnd     *m_backend;
    ET9BOOL     activeLanguageRequiresDoubleLetterGesture;    /* E.g. Finnish, Estonian */
};

    ET9PRIVATE BYTE1 ET9FARCALL SWDbm_keyCnt(SWDbm *pThis);
    ET9PRIVATE BYTE1 ET9FARCALL SWDbm_letterKeyCnt(SWDbm *pThis);
    ET9PRIVATE BYTE1 ET9FARCALL SWDbm_rowCnt(SWDbm *pThis);
    ET9PRIVATE BYTE2 ET9FARCALL SWDbm_keyboardUpperBound (SWDbm *pThis);
    ET9PRIVATE BYTE2 ET9FARCALL SWDbm_keyboardHeight(SWDbm *pThis);
    ET9PRIVATE BYTE1 ET9FARCALL SWDbm_charToKey(SWDbm *pThis, ET9SYMB let);
    ET9PRIVATE BYTE1 ET9FARCALL SWDbm_charToKey1B(SWDbm *pThis, STRACHAR let);
    ET9PRIVATE ET9SYMB ET9FARCALL SWDbm_getKeyName(SWDbm *pThis, BYTE1 key);
    ET9PRIVATE STRACHAR ET9FARCALL SWDbm_getKeyName1B(SWDbm *pThis, BYTE1 key);

    ET9PRIVATE void    ET9FARCALL SWDbm_getKeyCenterScaled(SWDbm *pThis, BYTE1 key, _SWPoint* p);
    ET9PRIVATE BYTE2   ET9FARCALL SWDbm_getRowBoundsScaled(SWDbm *pThis, BYTE1 idx);
    ET9PRIVATE void    ET9FARCALL SWDbm_getKeyPairDataScaled(SWDbm *pThis, BYTE1 key1, BYTE1 key2, _SWVector* v);

#define FREQ_CLASS_COUNT              8                     /* 8 frequency classes in database */
#define FREQ_CLASS_COUNT_MGD         15                     /* 15 frequency class results can be returned from database */

typedef enum ALGORITHM_TYPE_e
{
    ALG_ORIG_NEW2 = 0,                          /* Adopt MGD work in non-MGD */
    ALG_MGD,                                    /* Using MGD database */
    N_ALGORITHMS
}
ALGORITHM_TYPE;

/* Structure containing scaled size information about each key. */
struct SWKEYDATAQVGA
{
    BYTE2   centerX;        /* X coordinate of key */
    BYTE2   centerY;        /* Y coordinate of key */
    BYTE2   minX;           /* Min X coordinate of key */
    BYTE2   minY;           /* Min Y coordinate of key */
    BYTE2   maxX;           /* Max X coordinate of key */
    BYTE2   maxY;           /* Max Y coordinate of key */
};

#endif

/* eof */
