#ifndef _OEMMPUTILDATACTRL_H_
#define _OEMMPUTILDATACTRL_H_
/*======================================================
FILE:  OEMMPUtilDataCtrl.h

SERVICES:
   OEM functions for supporting BREW MPUTIL
   Interface

GENERAL DESCRIPTION:
   This file provides the prorotypes of the functions
   that OEMs must provide in order to support the BREW
   MPUTIL interfaces

=====================================================*/
#include "Common.h"
#include "ApiDlink.h"
#include "ApiDBType.h"
#include "AEEMPUtil.h"
#include "AEEMPUtilOM.h"
#include "AEEMPMulti.h"
#include "OEMMPUtilFileCtrl.h"
#include "ApiMs_AslMsa.h"  //PTX808 MSAudio ASL 

// トラック数、全トラック数格納用
#define GET_TRACK_ALL(a)  a & 0xFF
#define GET_TRACK_NUM(a)  (a >> 16) & 0xFF
#define MAKE_TRACK_INT(num,all) (all & 0xFFFF) | (num << 16)

// ▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽
// サンプル独自>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// ▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽

// KMFサンプルデータ型
typedef struct _KMFSampleData {
    char    TitleName[AEE_MPUTIL_TITLE_NAME_SIZE_MAX];
    char    AlbumName[AEE_MPUTIL_ALBUM_NAME_SIZE_MAX];
    char    ArtistName[AEE_MPUTIL_ARTIST_NAME_SIZE_MAX];
    int     nPlayTime;
    int     nJacketImageCount;
    int     nlyricsImageCount;
    int     nPlayCount;
    int     nRate;
    int32   nPlayLastTime;
    boolean bRegister;
    char    cTrackNum;
    char    cRightPerson[AEE_MPUTIL_RIGHT_PERSON_SIZE_MAX];
    char    cSaleOrigin[AEE_MPUTIL_SALE_ORIGIN_SIZE_MAX];
    char    cMmid[AEE_MPUTIL_MMID_SIZE_MAX];
    KDDIDFDEVICE dev;
    char    szFileName[AEE_MPUTIL_FILENAME_SIZE_MAX];
    int     nWallPaperImageCount;
    int     nDataKind;
    char    cInitial;
    //------------------------プラスα
    char    KanaTitleName[AEE_MPUTIL_TITLE_NAME_SIZE_MAX];
    char    KanaAlbumName[AEE_MPUTIL_ALBUM_NAME_SIZE_MAX];
    char    KanaArtistName[AEE_MPUTIL_ARTIST_NAME_SIZE_MAX];
    boolean bIsMUIOK;
    // ============内部リンク===================
    // アーティスト内リンク
    struct _KMFSampleData  *ArtistPrev;
    struct _KMFSampleData  *ArtistNext;
    // アルバム名内リンク
    struct _KMFSampleData  *AlbumPrev;
    struct _KMFSampleData  *AlbumNext;
} KMFSampleData;

// サンプルデータリストノード
typedef struct _SelectNode {
    struct _SelectNode     *pPrev;
    struct _SelectNode     *pNext;
    struct _KMFSampleData  *pData;
} SelectNode;


// エリアリストノード
typedef struct _AreaNode {
    struct _AreaNode     *pPrev;
    struct _AreaNode     *pNext;
    void                 *pArea;
    int                   nAreaSize;
    char                  szFileName[AEE_MPUTIL_FILENAME_SIZE_MAX];
} AreaNode;

extern boolean	        gIsMSMount;	// MS状態

// 楽曲ラベルデータ
/*
extern  SelectNode    *gLabelAA; 	// "あ"行ラベル一覧
extern  int            gLabelAACount;
extern  SelectNode    *gLabelKA; 	// "か"行ラベル一覧
extern  int            gLabelKACount;
extern  SelectNode    *gLabelSA; 	// "さ"行ラベル一覧
extern  int            gLabelSACount;
extern  SelectNode    *gLabelTA; 	// "た"行ラベル一覧
extern  int            gLabelTACount;
extern  SelectNode    *gLabelNA; 	// "な"行ラベル一覧
extern  int            gLabelNACount;
extern  SelectNode    *gLabelHA; 	// "は"行ラベル一覧
extern  int            gLabelHACount;
extern  SelectNode    *gLabelMA; 	// "ま"行ラベル一覧
extern  int            gLabelMACount;
extern  SelectNode    *gLabelYA; 	// "や"行ラベル一覧
extern  int            gLabelYACount;
extern  SelectNode    *gLabelLA; 	// "ら"行ラベル一覧
extern  int            gLabelLACount;
extern  SelectNode    *gLabelWA; 	// "わ"行ラベル一覧
extern  int            gLabelWACount;
extern  SelectNode    *gLabelabc; 	// "abc"行ラベル一覧
extern  int            gLabelabcCount;
extern  SelectNode    *gLabeldef; 	// "def"行ラベル一覧
extern  int            gLabeldefCount;
extern  SelectNode    *gLabelghi; 	// "ghi"行ラベル一覧
extern  int            gLabelghiount;
extern  SelectNode    *gLabeljkl; 	// "jkl"行ラベル一覧
extern  int            gLabeljklCount;
extern  SelectNode    *gLabelmno; 	// "mno"行ラベル一覧
extern  int            gLabelmnoCount;
extern  SelectNode    *gLabelpqrs; 	// "pqrs"行ラベル一覧
extern  int            gLabelpqrsCount;
extern  SelectNode    *gLabeltuv; 	// "tuv"行ラベル一覧
extern  int            gLabeltuvCount;
extern  SelectNode    *gLabelwxyz; 	// "wxyz"行ラベル一覧
extern  int            gLabelwxyzCount;
extern  SelectNode    *gLabelKIGO; 	// "記号"行ラベル一覧
extern  int            gLabelKIGOCount;
extern  SelectNode    *gLabelSONOTA;	// "その他"行ラベル一覧
extern  int            gLabelSONOTACount;
*/
//-----------------------------------
//**********処理マクロ群*************
//-----------------------------------
/*
// 内部リストのテールを取得する
#define  GET_LISTTAILE( p, next, dt )  { \
    KMFSampleData *_pNode; \
    for ( _pNode = p; _pNode; _pNode = _pNode->##next ) { \
        dt = _pNode; \
    } \
}
// 内部リストの先頭を取得する
#define  GET_LISTHEAD( p, prev, dt )  { \
    KMFSampleData *_pNode; \
    for ( _pNode = p; _pNode; _pNode = _pNode->##prev ) { \
        dt = _pNode; \
    } \
}
// 内部リストより絞込み楽曲リストを生成する
#define  CREATE_SELECTLIST( p, prev, dt, cnt )  { \
    KMFSampleData *_pNode; \
    SelectNode    *_pSelTop = NULL; \
    cnt = 0; \
    for ( _pNode = p; _pNode; _pNode = _pNode->##prev ) { \
        SelectNode* _pSelNode = (SelectNode*)sys_malloc( sizeof( SelectNode ) ); \
        cnt ++; \
        _pSelNode->pData = _pNode; \
        _pSelNode->pPrev = NULL; \
        _pSelNode->pNext = _pSelTop; \
        if ( _pSelTop ) { \
            _pSelTop->pPrev = _pSelNode; \
        } \
        _pSelTop = _pSelNode; \
    }\
    dt = _pSelTop; \
}
// 絞込み楽曲リストを複製する
#define  COPY_SELECTLIST( moto, saki, cnt )  { \
    SelectNode    *_pNode  = NULL; \
    SelectNode    *_pNode2 = NULL; \
    cnt = 0; \
    if ( moto ) { \
        saki = sys_malloc( sizeof( SelectNode ) ); \
        ((SelectNode*)saki)->pPrev = NULL; \
        ((SelectNode*)saki)->pNext = NULL; \
        ((SelectNode*)saki)->pData = moto->pData; \
        _pNode2 = (SelectNode*)saki; \
        for ( _pNode = moto->pNext; _pNode; _pNode = _pNode->pNext ) { \
            SelectNode* _pNewNode = (SelectNode*)sys_malloc( sizeof( SelectNode ) ); \
            _pNewNode->pData = _pNode->pData; \
            _pNewNode->pNext = NULL; \
            _pNewNode->pPrev = _pNode2; \
            _pNode2->pNext   = _pNewNode; \
            _pNode2 = _pNewNode; \
            cnt ++;\
        } \
    } \
}

// 絞込み楽曲リストにノードをソートして追加
#define  ADDSORT_SELECTLIST( list, node, datastr )  { \
    SelectNode * _pNode = list; \
    SelectNode * _pPrev = NULL; \
    while ( _pNode ) { \
        if ( 0 >= STRCMP( node->pData->##datastr, _pNode->pData->##datastr ) ) { \
            if ( _pPrev ) { \
                _pPrev->pNext = node; \
                node->pPrev   = _pPrev; \
                node->pNext   = _pNode; \
                _pNode->pPrev  = node; \
                break; \
            } \
        } \
        _pPrev = _pNode; \
        _pNode = _pNode->pNext; \
    } \
    if ( NULL == _pNode ) { \
        _pPrev->pNext = node; \
        node->pPrev   = _pPrev; \
        node->pNext   = NULL; \
    } \
}
// 絞込み楽曲リストにノードをソートして追加
#define  ADDSORTNUM_SELECTLIST( list, node, datastr )  { \
    SelectNode * _pNode = list; \
    SelectNode * _pPrev = NULL; \
    while ( _pNode ) { \
        if ( node->pData->##datastr >= _pNode->pData->##datastr ) { \
            if ( _pPrev ) { \
                _pPrev->pNext = node; \
                node->pPrev   = _pPrev; \
                node->pNext   = _pNode; \
                _pNode->pPrev  = node; \
                break; \
            } \
        } \
        _pPrev = _pNode; \
        _pNode = _pNode->pNext; \
    } \
    if ( NULL == _pNode ) { \
        _pPrev->pNext = node; \
        node->pPrev   = _pPrev; \
        node->pNext   = NULL; \
    } \
}


// 絞込み楽曲リストを開放する
#define  DELETE_SELECTLIST( p )  { \
    SelectNode    *_pNode = NULL; \
    SelectNode    *_pNext = NULL; \
    for ( _pNode = p; _pNode; _pNode = _pNext ) { \
        _pNext = _pNode->pNext; \
        sys_free( _pNode ); \
    } \
}
// 絞込み楽曲リストからノードを取り外す
#define  RELEASE_SELECTNODE( top, nd )  { \
    if ( top == nd ) { \
        top = nd->pNext; \
        if ( NULL != top ) { \
            top->pPrev = NULL; \
        } \
    } else { \
        nd->pPrev->pNext = nd->pNext; \
        if ( NULL != nd->pNext ) { \
            nd->pNext->pPrev = nd->pPrev; \
        } \
    } \
    nd->pNext = NULL; \
    nd->pPrev = NULL; \
}
// 絞込み楽曲リストの指定番号ノードを取得する
#define  GET_SELECTNODE( top, nd, num )  { \
    int  _i; \
    nd = top; \
    for ( _i = 0; _i != num; _i++ ) { \
        nd = nd->pNext; \
    } \
}
// 絞込み楽曲リストの尻尾を取得する
#define  GET_SELECTLISTTAILE( p, dt )  { \
    SelectNode *_pNode; \
    for ( _pNode = p; _pNode; _pNode = _pNode->pNext ) { \
        dt = _pNode; \
    } \
}


// ラベルのチェック範囲を取得する
#define GET_LABEL_NUM( source, se ) { \
    if ( 0 == STRCMP( source, "あ" ) ) { se[0][0] = 'ｱ';  se[0][1]= 'ｵ'; \
        se[1][0] = 'ｧ';  se[1][1]= 'ｫ';\
    } \
    else if ( 0 == STRCMP( source, "か" ) ) { se[0][0] = 'ｶ'; se[0][1] = 'ｺ'; } \
    else if ( 0 == STRCMP( source, "さ" ) ) { se[0][0] = 'ｻ'; se[0][1] = 'ｿ'; } \
    else if ( 0 == STRCMP( source, "た" ) ) { se[0][0] = 'ﾀ'; se[0][1] = 'ﾄ'; \
        se[1][0] = 'ｯ';  se[1][1]= 'ｯ';\
    } \
    else if ( 0 == STRCMP( source, "な" ) ) { se[0][0] = 'ﾅ'; se[0][1] = 'ﾉ'; } \
    else if ( 0 == STRCMP( source, "は" ) ) { se[0][0] = 'ﾊ'; se[0][1] = 'ﾎ'; } \
    else if ( 0 == STRCMP( source, "ま" ) ) { se[0][0] = 'ﾏ'; se[0][1] = 'ﾓ'; } \
    else if ( 0 == STRCMP( source, "や" ) ) { se[0][0] = 'ﾔ'; se[0][1] = 'ﾖ'; \
        se[1][0] = 'ｬ';  se[1][1]= 'ｮ';\
    } \
    else if ( 0 == STRCMP( source, "ら" ) ) { se[0][0] = 'ﾗ'; se[0][1] = 'ﾛ'; } \
    else if ( 0 == STRCMP( source, "わ" ) ) { se[0][0] = 'ﾜ'; se[0][1] = 'ﾝ'; \
        se[1][0] = 'ｦ';  se[1][1]= 'ｦ';\
    } \
    else if ( 0 == STRCMP( source, "abc" ) ) { se[0][0] = 'A'; se[0][1] = 'C'; \
        se[1][0] = se[0][0]+0x20;  se[1][1] = se[0][1] + 0x20;\
    } \
    else if ( 0 == STRCMP( source, "def" ) ) { se[0][0] = 'D'; se[0][1] = 'E'; \
        se[1][0] = se[0][0]+0x20;  se[1][1] = se[0][1] + 0x20;\
    } \
    else if ( 0 == STRCMP( source, "ghi" ) ) { se[0][0] = 'G'; se[0][1] = 'I'; \
        se[1][0] = se[0][0]+0x20;  se[1][1] = se[0][1] + 0x20;\
    } \
    else if ( 0 == STRCMP( source, "jkl" ) ) { se[0][0] = 'J'; se[0][1] = 'L'; \
        se[1][0] = se[0][0]+0x20;  se[1][1] = se[0][1] + 0x20;\
    } \
    else if ( 0 == STRCMP( source, "mno" ) ) { se[0][0] = 'M'; se[0][1] = 'O'; \
        se[1][0] = se[0][0]+0x20;  se[1][1] = se[0][1] + 0x20;\
    } \
    else if ( 0 == STRCMP( source, "pqrs" ) ) { se[0][0] = 'P'; se[0][1] = 'S'; \
        se[1][0] = se[0][0]+0x20;  se[1][1] = se[0][1] + 0x20;\
    } \
    else if ( 0 == STRCMP( source, "tuv" ) ) { se[0][0] = 'T'; se[0][1] = 'V'; \
        se[1][0] = se[0][0]+0x20;  se[1][1] = se[0][1] + 0x20;\
    } \
    else if ( 0 == STRCMP( source, "wxyz" ) ) { se[0][0] = 'W'; se[0][1] = 'Z'; \
        se[1][0] = se[0][0]+0x20;  se[1][1] = se[0][1] + 0x20;\
    } \
    else if ( 0 == STRCMP( source, "記号" ) ) { \
        se[0][0] = '!'; se[0][1] = '/'; \
        se[1][0] = ':'; se[1][1] = '@'; \
        se[2][0] = '['; se[2][1] = '`'; \
        se[3][0] = '{'; se[3][1] = '~'; \
        se[4][0] = '｡'; se[4][1] = '､'; \
    } \
    else if ( 0 == STRCMP( source, "その他" ) ) { \
        se[0][0] = '!'; se[0][1] = '/'; \
        se[1][0] = ':'; se[1][1] = '@'; \
        se[2][0] = '｡'; se[2][1] = '､'; \
        se[3][0] = 'A'; se[3][1] = '~'; \
        se[4][0] = 'ｦ'; se[4][1] = 'ｯ'; \
        se[5][0] = 'ｱ'; se[5][1] = 'ﾝ'; \
    } \
}
*/

// KPLサンプルデータ型
typedef struct _KPLSampleData {
    char ListName[AEE_MPUTIL_PLNAME_SIZE_MAX];
    int  nListID;
    int  nDataSize;
    KDDIDFDEVICE dev;
    char szFileName[AEE_MPUTIL_FILENAME_SIZE_MAX];
} KPLSampleData;

extern  KPLSampleData *gKPLAll;		// 全プレイリスト

// プレイリストテーブル
typedef struct _S_PlayListTable {
        uint16       Count;                              // プレイリスト数
//        uint16       Index[OEMMPUTIL_MAX_ALL_PLAYLIST];  // プレイリスト管理データのIndex
}S_PlayListTable;

// △△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<サンプル独自
// △△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△


//-----------------------------------------------------------------------------
// 共通編
//-----------------------------------------------------------------------------
extern HFWD MemMgrMalloc( unsigned long );
extern void *MemMgrLock_GetPtr( HFWD );
//extern void MemMgrUnlock( HFWD );
//extern void MemMgrFree( HFWD );

//-----------------------------------------------------------------------------
// Typedef Definitions
//-----------------------------------------------------------------------------
typedef unsigned char  uchar;
typedef unsigned int   uint;
typedef unsigned long  ulong;

//#define  _NO_REQUEST           // check2! 仕様上あり得ないはず(多分)
//#define  _NO_REQUEST2          // check2! デジエ質疑にてないはず
//#define  _NO_REQUEST3          // check2! OTS吉田氏解釈では非サポート(API制御で弾く)

// 各種最大数
// PTX808IMP_MSA mod 2006.1.17 yamamoto 2000件対応 if1
#define  OEMMPUTIL_MAX_DFALL_SONG         MUSIC_FILE_MAX
// PTX808IMP_MSA mod 2006.1.17 yamamoto 2000件対応 endif
#define  OEMMPUTIL_MAX_MSNML_SONG         1000           // MS 着うたフルフォルダ最大楽曲数
#define  OEMMPUTIL_MAX_MSPC_SONG          1000           // MS PC連携フォルダ最大楽曲数
#define  OEMMPUTIL_MAX_MSALL_SONG         (OEMMPUTIL_MAX_MSNML_SONG + OEMMPUTIL_MAX_MSPC_SONG)
#define  OEMMPUTIL_MAX_ALL_SONG           (OEMMPUTIL_MAX_DFALL_SONG + OEMMPUTIL_MAX_MSALL_SONG)
#define  OEMMPUTIL_MAX_DF_PLAYLIST        2000           // DF プレイリスト最大数
#define  OEMMPUTIL_MAX_MS_PLAYLIST        1000           // MS プレイリスト最大数
#define  OEMMPUTIL_MAX_ALL_PLAYLIST       (OEMMPUTIL_MAX_DF_PLAYLIST + OEMMPUTIL_MAX_MS_PLAYLIST)

// 楽曲管理データINDEX
#define  OEMMPUTIL_INDEX_DF_SONG          0                                                   // DF 開始
#define  OEMMPUTIL_INDEX_MSNML_SONG       OEMMPUTIL_MAX_DFALL_SONG                            // MS 着うたフル開始
#define  OEMMPUTIL_INDEX_MSPC_SONG        (OEMMPUTIL_INDEX_MSNML_SONG+OEMMPUTIL_MAX_MSNML_SONG) // MS PC連携開始

// プレイリスト管理データINDEX
#define  OEMMPUTIL_INDEX_DF_PLAYLIST      0                                                   // DF プレイリスト開始INDEX
#define  OEMMPUTIL_INDEX_MS_PLAYLIST      OEMMPUTIL_MAX_DF_PLAYLIST                           // MS プレイリスト開始INDEX
#define  OEMMPUTIL_INDEX_LAST_PLAYLIST    OEMMPUTIL_MAX_ALL_PLAYLIST                          // プレイリスト最後のINDEX

// その他
#define  OEMMPUTIL_MAX_LABEL               21             // LABEL種類数 20→21 TRK117
#define  OEMMPUTIL_MAX_JPN_LABEL           11             // 日本語LABEL種類数
#define  OEMMPUTIL_MAX_ENG_LABEL           8             // 英語LABEL種類数 PTX808 LabelSelect
#define  OEMMPUTIL_ALL_LABEL               OEMMPUTIL_MAX_JPN_LABEL+OEMMPUTIL_MAX_ENG_LABEL // 日本語/英語LABEL合計 PTX808 LabelSelect
#define  OEMMPUTIL_NO_DLINKID              0xFFFFFFFF     // DlinkIDなし(IMP管理ファイル/楽曲管理データ未使用)
#define  OEMMPUTIL_RSV_DLINKID             0xFFFFFFFE     // DlinkID予約(IMP管理ファイル/楽曲管理データ使用領域予約)
#define  OEMMPUTIL_NO_DEVICENAME           0              // プレイリストデバイス名設定なし(プレイリスト管理データ未使用)
#define  OEMMPUTIL_RSV_DEVICENAME          0xFFFFFFFF     // プレイリストデバイス名予約(プレイリスト管理データ使用領域予約)
#define  OEMMPUTIL_DATAINIMPFILE           100            // 1IMP管理ファイル内楽曲データ最大数
#define  OEMMPUTIL_NO_INDEX                0xFFFF         // リンクSTOPPER/データなし
#define  OEMMPUTIL_NO_IMPMNGNUM            9999           // IMP管理ファイル番号異常値 TRK1992
#define  OEMMPUTIL_MAX_ETC_LABEL           3              // LabelMngDataの”他”ラベル該当数 PTX808 LabelSelect

#define  OEMMPUTIL_RATE_MIN                0
#define  OEMMPUTIL_RATE_MAX                5

#define  OEMMPUTIL_MAXFILENAME             256// checkサイズ
#define  OEMMPUTIL_MAXSONGINPLAYLIST       30// 1005

#define  OEMMPUTIL_LIMIT_OK                (BYTE)0 // TRK1355
#define  OEMMPUTIL_LIMIT_NG                (BYTE)1 // TRK1355

//-----------------------------------------------------------------------------
// 内部データ制御編
//-----------------------------------------------------------------------------
// 絞り込み条件(複数の条件で絞り込んでるケースもあり)
#define  OEMMPUTIL_SELECT_NOTHING      0x0000        // 絞り込みなし
#define  OEMMPUTIL_SELECT_SONGNAME     0x0001        // 楽曲名で絞り込み
#define  OEMMPUTIL_SELECT_SONGLABEL    0x0002        // 楽曲ラベルで絞り込み
#define  OEMMPUTIL_SELECT_ARTISTNAME   0x0004        // アーティスト名で絞り込み
#define  OEMMPUTIL_SELECT_ARTISTLABEL  0x0008        // アーティストラベルで絞り込み
#define  OEMMPUTIL_SELECT_ALBUMNAME    0x0010        // アルバム名で絞り込み
#define  OEMMPUTIL_SELECT_ALBUMLABEL   0x0020        // アルバムラベルで絞り込み
#define  OEMMPUTIL_SELECT_TOP20        0x0040        // トップ２０で絞り込み
#define  OEMMPUTIL_SELECT_TOPRATE      0x0080        // トップレートで絞り込み
#define  OEMMPUTIL_SELECT_TOPDATE      0x0100        // 最近聴いた曲で絞り込み
#define  OEMMPUTIL_SELECT_MMID         0x0200        // MMIDで絞り込み
// PTX808IMP_MSA add 2006.1.26 ooshima if1
#define  OEMMPUTIL_SELECT_MSA		   0x0400        // MSA全曲で絞り込み
#define  OEMMPUTIL_SELECT_MSAGROUP	   0x0800        // MSAグロープで絞り込み
#define  OEMMPUTIL_SELECT_ALLDATA      0x1000        // MSA混在で絞り込み
// PTX808IMP_MSA add 2006.1.26 ooshima endif

// ラベル絞り込み条件
#define  OEMMPUTIL_LSELECT_NOTHING     0x0000        // なし
#define  OEMMPUTIL_LSELECT_JPNSONG     0x0001        // 日本語楽曲名
#define  OEMMPUTIL_LSELECT_ENGSONG     0x0002        // 英語楽曲名
#define  OEMMPUTIL_LSELECT_JPNARTIST   0x0010        // 日本語アーティスト名
#define  OEMMPUTIL_LSELECT_ENGARTIST   0x0020        // 英語アーティスト名
#define  OEMMPUTIL_LSELECT_JPNALBUM    0x0100        // 日本語アルバム名
#define  OEMMPUTIL_LSELECT_ENGALBUM    0x0200        // 英語アルバム名

// 絞り込み楽曲情報
typedef struct _S_SelectInfo {
        HFWD         SelectType;                         // 絞り込み情報
        char         DeleteFlag;                         // インスタンス生成中楽曲削除フラグ TRK2895
        char         reserve2;                           // 
        HFWD         reserve[6];                         // 
        char         MMID[IMP_MMID_LEN];                 // MMID
}S_SelectInfo;

// 絞り込みリスト TRK1451で追加
typedef struct _S_SelectList {
        HFWD         SelectCount;                        // 絞り込み楽曲数
        HFWD         SelectCurrent;                      // カレント位置
        HFWD         SelectList[OEMMPUTIL_MAX_ALL_SONG]; // 絞り込み楽曲の楽曲管理データIndex(先頭からSelectCountまで)
}S_SelectList;

// 絞り込みテーブル check9!
typedef struct _S_SelectTable {
        HFWD         Count;                              // 絞り込み楽曲数
        HFWD         SelectType;                         // 絞り込み条件
        HFWD         LabelSelectType;                    // ラベル絞り込み条件
        HFWD         Current;                            // カレント位置(絞り込み先頭からの参照中の楽曲相対位置)：未使用？
        HFWD         CurrentIndex;                       // カレント位置にある楽曲の楽曲管理データへのIndex
        HFWD         cMMIDSeek;                          // MMID絞り込み数 1005
        HFWD         CurrentMMIndex;                     //                1005
        HFWD         reserve;                            //                1005
        S_SelectInfo SelectInfo[OEMMPUTIL_MAX_ALL_SONG]; // 絞り込み楽曲情報
        int          LanguageID;                         // GetLabelCountの言語種別 2005.09.03 matsumi suzuki
        HFWD         Top20[20] ;                         // トップ２０テーブル TRK139 2005.10.03 鈴木
        HFWD         TopDate[20] ;                       // 最近聴いた曲テーブル TRK139 2005.10.03 鈴木
        HFWD         MMIDSeek[OEMMPUTIL_MAXSONGINPLAYLIST] ;// MMID絞り込みSEEK順 1005
        S_SelectList SelectList;                         // 絞り込みリスト TRK1451で追加
        // TRK2883 HFWD         PlayListSort[OEMMPUTIL_MAX_ALL_PLAYLIST] ; // TRK2057 2005/11/16 プレイリスト用ソートテーブル 鈴木
        // PTX808IMP_MSA add 2006.1.12 ooshima if1
        HFWD         MSACount;                           // MSA絞り込み楽曲数
        HFWD         MSACurrentIndex;                    // カレント位置
        HFWD         MSAGroupNo;                         // MSAグループ番号
        HFWD         MSAGroupCount;                      // MSAグループ数
        //HFWD         MSASeekAllIndex;                    // KMF/MSA混在リストSeek位置
        ulong         MSASeekAllIndex;                    // KMF/MSA混在リストSeek位置
        // PTX808IMP_MSA add 2006.1.12 ooshima endif

// 以下、吉田氏追加
//    void        *pSelectData;    		     // 絞込み楽曲情報
//    uint16       nSelectCount;                       // 絞込み楽曲数
//    void        *pSubData; 	   		     // 絞込みその他情報
//    uint16       nSubCount;	                     // 絞込みその他情報数
//    boolean      bLabelFlag[12];   		     // ラベルフラグ
//    char      ** pLabelStr;
//    void        *pCurrentData;                       // カレントデータ
}S_SelectTable;


// ラベルデータ
typedef struct _S_LabelData {
        BYTE         size;                               // ラベル長
        char         label[7];                           // ラベル
}S_LabelData;

//IMP管理名称情報
typedef struct _NNameData {	
	char			Name[IMP_NAME_LEN]; 				/*  名称						*/
	char			Yomi[IMP_YOMI_LEN]; 				/*  名称読み					*/
    char			 YomiNull[2];						 // 名称読みNULターミネート分
    unsigned short	 reserve2;							 // 
    ulong			 YomiHash;							 // 名称読み32文字以降識別子
	unsigned short	NameSize; 							/*  名称サイズ					*/
	unsigned short	YomiSize; 							/*  名称読みサイズ				*/
	// TRK976 unsigned short	reserve[2];
	ulong           NameHash;                           // 名称64文字以降識別子
}ST_NIMP_NAME;

/* IMP管理情報 */
typedef struct _NIMPMngData {
	unsigned short	PlayCount;							/*  再生回数					*/
	unsigned short	Rate;								/*  ﾚｰﾄ情報						*/
	unsigned int	LastPlayDate;						/*  再生終了日時				*/
	unsigned int	TruckNo;							/*  トラックNo.					*/
	DLINKNUM		DlinkID;							/*  DlinkID						*/
	char			MMID[IMP_MMID_LEN];					/*  MMID						*/
    ST_NIMP_NAME	Title;								/*  楽曲名						*/
    ST_NIMP_NAME	Artist;								/*  アーティスト名				*/
    ST_NIMP_NAME	Album;								/*  アルバム名					*/
    unsigned long   FileTime;                           /*  ファイル保存日時            */
    uchar           LimitCheck;                         /*  再生制限有無(0:無/1:有)     */
    uchar           reserve1;
    uchar           reserve2;
    uchar           reserve3;
	int				reserve4[2];
} ST_NIMP_INFO;

//-----------------------------------------------------------------------------
// 管理ファイル・データ更新編
//-----------------------------------------------------------------------------
// IMP管理データ編集用状態番号
enum {
  OEMMPUTIL_ST_DFINIT = 0,          // 初期設定中
  OEMMPUTIL_ST_DFCHECK1,            // DFデータ整合性中1
  OEMMPUTIL_ST_DFCHECK2,            // DFデータ整合性中2
  OEMMPUTIL_ST_DFUIMCHECK,          // DF UIM整合性チェック中
  OEMMPUTIL_ST_MSINIT,              // MS管理データ作成中
  OEMMPUTIL_ST_MSINITPLAYLIST,      // MSプレイリスト作成中
  OEMMPUTIL_ST_MSCHECK1,            // MSデータ整合性チェック中1
  OEMMPUTIL_ST_MSCHECK2,            // MSデータ整合性チェック中2
//  OEMMPUTIL_ST_MSFILEDELETE,        // IMP管理ファイル更新中 7/27削除
  OEMMPUTIL_ST_DATADELETE,          // データ削除中 10/04
  OEMMPUTIL_ST_IDLE                 // アイドル
};

// 状態管理情報
typedef struct _S_StatusInfo {
        int       StatusNumber;            // IMP管理データ編集のための状態番号
}S_StatusInfo;

// DFデータ整合性チェック情報
typedef struct _S_DFCheck {
        HFWD      CB_MemID;                // 引継ぎ用メモリID
        DLINKNUM *pDlinkList;              // 楽曲一覧ポインタ
        BYTE     *pDlinkChkList;           // 楽曲一覧の楽曲データ有無チェックリストポインタ
        BYTE     *pMngDataChkList;         // 楽曲管理データの楽曲有無チェックリストポインタ
        HFWD      MemID_DlinkList;         // 楽曲一覧メモリID
        HFWD      MemID_DlinkChkList;      // 楽曲一覧の楽曲データ有無チェックリストメモリID
        HFWD      MemID_MngDataChkList;    // 楽曲管理データの楽曲有無チェックリストメモリID
        int       cCHAKUFULL;              // 着うたフルフォルダ楽曲一覧数
        int       cPCCOOP;                 // ＰＣ連携フォルダ楽曲一覧数
        HFWD      ListIndex;               // チェックリストの次処理対象番号
}S_DFCheck;

// MS管理データ作成情報
typedef struct _S_MSInit {
        HFWD      CB_MemID;                // 引継ぎ用メモリID
        HFWD      MngNo;                   // 次処理IMP管理ファイル番号
}S_MSInit;

// MSデータ整合性チェック情報
typedef struct _S_MSCheck {
        HFWD      CB_MemID;                // 引継ぎ用メモリID
        DLINKNUM *pFileList;               // 楽曲一覧ポインタ
        BYTE     *pFileChkList;            // 楽曲一覧の楽曲データ有無チェックリストポインタ
        BYTE     *pMngDataChkList;         // 楽曲管理データの楽曲有無チェックリストポインタ
        HFWD      MemID_FileList;          // 楽曲一覧メモリID
        HFWD      MemID_FileChkList;       // 楽曲一覧の楽曲データ有無チェックリストメモリID
        HFWD      MemID_MngDataChkList;    // 楽曲管理データの楽曲有無チェックリストメモリID
        int       cCHAKUFULL;              // 着うたフルフォルダ楽曲一覧数
        int       cPCCOOP;                 // ＰＣ連携フォルダ楽曲一覧数
        HFWD      ListIndex;               // チェックリストの次処理対象番号
        HFWD      MemID_IMPFile;           // IMP管理ファイル用メモリID       TRK1992
        short     IMPChgFlg;               // IMP管理ファイル更新可否フラグ   TRK1992
        short     IMPChgCnt;               // IMP管理ファイル更新カウント     TRK1992
        ST_NIMP_INFO  *pIMPFile;           // IMP管理ファイル用データポインタ TRK1992
}S_MSCheck;

// 楽曲追加通知情報
typedef struct _S_RepAddSong {
        HFWD   CB_MemID;                   // 引継ぎ用メモリID
        int    Device_name;                // デバイス名称
        int    Folder_name;                // フォルダ名称
        DLINKNUM  DlinkID;                 // DlinkIDorショートファイル名
        IMP_MusicInformation *pMusicDataInfo; // 楽曲情報ポインタ
        HFWD   MusicDataInfo_MemID;        // 楽曲情報メモリID
        HFWD   TIndex;                     // 楽曲管理データ作成位置(全体のINDEX)
        HFWD   FIndex;                     // 楽曲管理データ作成位置(フォルダ内のINDEX)
}S_RepAddSong;

// 楽曲削除通知情報
typedef struct _S_RepDelSong {
        HFWD   CB_MemID;                   // 引継ぎ用メモリID
        int    Device_name;                // デバイス名称
        int    Folder_name;                // フォルダ名称
        HFWD   FIndex;                     // 楽曲管理データ削除位置(フォルダ内のINDEX)
}S_RepDelSong;

// 楽曲削除情報
typedef struct _S_DelSong {
        HFWD    CB_MemID;                  // 引継ぎ用メモリID
        void   *pCB;                       // コールバックイベント通知時のデータポインタ
        int     Device_name;               // デバイス名称
        int     Folder_name;               // フォルダ名称
        int     Mng_number;                // IMP管理ファイル番号
        int     Music_number;              // IMP管理ファイル内楽曲位置(番号)
        HFWD    TIndex;                    // 楽曲管理データ削除位置(全体のINDEX)
        HFWD    FIndex;                    // 楽曲管理データ削除位置(フォルダ内のINDEX)
        S_SelectTable *pSelectTable;       // 絞り込みテーブルポインタ
        //PTX808 ST_MSA_DIR_INFOエリアMalloc化 2006.2.9 toida if1
        HFWD    TrackInfoID;               // 引継ぎ用メモリID
        ST_MSA_DIR_INFO *pTrackInfo;       // 引継ぎ用メモリID(DATA)
        //PTX808 ST_MSA_DIR_INFOエリアMalloc化 endif
}S_DelSong;

// プレイリスト更新情報
typedef struct _ChgPlayList {
        HFWD      CB_MemID;                // 引継ぎ用メモリID
        HFWD      DATA_MemID;              // 引継ぎ用メモリID(DATA)
        void     *pCB;                     // コールバックイベント通知時のデータポインタ
        int       Device_name;             // デバイス名称
        DLINKNUM  DlinkID;                 // DlinkIDorショートファイル名
        char     *pData;                   // プレイリストデータエリアポインタ
        uint32    dwDataSize;              // プレイリストデータサイズ
        HFWD      Name_MemID;              // 新プレイリストファイル名用メモリID 1021 TRK725
        char     *pFileName;               // 新プレイリストファイル名           1021 TRK725
}S_ChgPlayList;

// プレイリスト登録情報
typedef struct _AddPlayList {
        HFWD      CB_MemID;                // 引継ぎ用メモリID
        HFWD      DATA_MemID;              // 引継ぎ用メモリID(DATA)
        void     *pCB;                     // コールバックイベント通知時のデータポインタ
        int       Device_name;             // デバイス名称
        char     *pData;                   // プレイリストデータエリアポインタ
        uint32    dwDataSize;              // プレイリストデータサイズ
        char      szFileName[AEE_MPUTIL_FILENAME_SIZE_MAX +1];// プレイリストファイル名
        HFWD      PLIndex;                 // プレイリスト管理データの登録Index
}S_AddPlayList;

// 楽曲情報更新情報
typedef struct _UpdateSong {
        HFWD      CB_MemID;                // 引継ぎ用メモリID
        void     *pCB;                     // コールバックイベント通知時のデータポインタ
        HFWD      TIndex;                  // 楽曲管理データ更新位置(全体のINDEX)
        int       nParmID;                 // 更新種別(再生回数/レート情報)
        int       Value;                   // 更新値
}S_UpdateSong;

// 楽曲詳細情報取得情報
typedef struct _GetInfoData {
        HFWD               CB_MemID;       // 引継ぎ用メモリID
        HFWD               DATA_MemID;     // 引継ぎ用メモリID(DATA)
        void              *pCB;            // コールバックイベント通知時のデータポインタ
        HFWD               TIndex;         // 楽曲管理データ更新位置(全体のINDEX)
        HFWD               FIndex;         // 楽曲管理データ削除位置(フォルダ内のINDEX)
        int                Device_name;    // デバイス名称
        int                Folder_name;    // フォルダ名称
        DLINKNUM           DlinkID;        // DlinkIDorショートファイル名
        AEEMPUtilDataInfo *pDataInfo;      // 楽曲詳細情報エリアポインタ
        IMP_MusicInformation *pMusicInfo;  // 楽曲全詳細情報エリアポインタ
        HFWD               MusicInfo_MemID;// 楽曲全詳細情報エリアメモリID
        // PTX808IMP_MSA add 2006.1.12 ooshima if1
        S_SelectTable     *SelectTable;	   // セレクトテーブル
        HFWD              TrackInfoID;     // 引継ぎ用メモリID
        ST_MSA_TRACK_INFO *pTrackInfo;     // 引継ぎ用メモリID(DATA)
        // PTX808IMP_MSA add 2006.1.12 ooshima endif
        // PTX808 ジャケ写サイズ規制対処 2006/2/20 if1
        char              *pImage;         // イメージデータ読み込みエリアポインタ
        HFWD              Image_MemID;    // イメージデータ読み込みエリアメモリID
        // PTX808 ジャケ写サイズ規制対処 2006/2/20 endif
}S_GetInfoData;

// ▼TRK2085 静止画像データ取得情報
typedef struct _S_GetImage{
  ulong    ImageSize;         // 画像サイズ
  char    *pImage;            // 画像データポインタ
  HFWD     I_MemID;           // 画像データMemID
  HFWD     reserve[3];        // リザーブ領域
} S_GetImage;
// ▲TRK2085

// 静止画像取得情報
typedef struct _GetImageData {
        HFWD                CB_MemID;      // 引継ぎ用メモリID
        HFWD                DATA_MemID;    // 引継ぎ用メモリID(DATA)
        void               *pCB;           // コールバックイベント通知時のデータポインタ
        int                 Device_name;   // デバイス名称
        int                 Folder_name;   // フォルダ名称
        DLINKNUM            DlinkID;       // DlinkIDorショートファイル名
        AEEMPUtilImageInfo *pImageInfo;    // 楽曲データの各種静止画情報エリアポインタ
        char               *pImageDataName;// 静止画ファイル名出力エリアポインタ
//TRK805        char               *pImage;        // イメージデータ読み込みエリアポインタ
        S_GetImage         *pImage;        // イメージデータ読み込みエリアポインタ TRK2085
        HFWD                Image_MemID;   // イメージデータ読み込みエリアメモリID
//TRK805        ulong               ImageSize;     // イメージデータサイズ 差分＋
        // PTX808IMP_MSA add 2006.1.12 ooshima if1
        HFWD                TIndex;        // 楽曲管理データ更新位置(全体のINDEX)
        S_SelectTable       *SelectTable;  // セレクトテーブル
        // PTX808IMP_MSA add 2006.1.12 ooshima endif
}S_GetImageData;

// PTX808IMP_MSA mod 2006.1.17 yamamoto 歌詞カード保持 if1
typedef struct _GetWordsData{
	char *pWordsName;	// 静止画ファイル名出力エリアポインタ
	HFWD Name_MemID;	// 静止画ファイル名出力エリアメモリID
	S_GetImage *pWordsData;	// イメージデータ読み込みエリアポインタ
	HFWD Data_MemID;	// イメージデータ読み込みエリアメモリID
}S_GetWordsData;
// PTX808IMP_MSA mod 2006.1.17 yamamoto 歌詞カード保持 endif

// 楽曲移動通知情報
typedef struct _RepMoveSonga {
        HFWD                CB_MemID;      // 引継ぎ用メモリID
        void               *pCB;           // コールバックイベント通知時のデータポインタ
        int                 SrcDevice_name;// 移動前デバイス名称
        int                 SrcFolder_name;// 移動前フォルダ名称
        HFWD                SrcFIndex;     // 移動前楽曲管理データ位置(フォルダ内のINDEX)
        HFWD                SrcTIndex;     // 移動前楽曲管理データ位置(全体のINDEX)
        int                 DstDevice_name;// 移動前デバイス名称
        int                 DstFolder_name;// 移動後フォルダ名称
        HFWD                DstFIndex;     // 移動後楽曲管理データ位置(フォルダ内のINDEX)
        HFWD                DstTIndex;     // 移動後楽曲管理データ位置(全体のINDEX)
        DLINKNUM            DstDlinkID;    // 移動後DlinkIDorショートファイル名
}S_RepMoveSong;


//-----------------------------------------------------------------------------
// 管理データ制御編
//-----------------------------------------------------------------------------

// 名称データ
typedef struct _S_NameData {
        char         Name[IMP_NAME_LEN];                 // 名称
        char         Yomi[IMP_YOMI_LEN];                 // 名称読み
        char         YomiNull[2];                        // 名称読みNULターミネート分
        HFWD         reserve;                            // 
        ulong        YomiHash;                           // 名称読み32文字以降識別子
        HFWD         NameSize;                           // 名称サイズ
        HFWD         YomiSize;                           // 名称読みサイズ
	    ulong        NameHash;                           // 名称64文字以降識別子 TRK976
}S_NameData;

// 楽曲管理データ
typedef struct _S_SongMngData {
//        HFWD         Index;                              // INDEX(配列位置)
        HFWD         PlayCount;                          // 再生回数
        HFWD         Rate;                               // レート情報
//        HFWD         Reserve;

        uint         LastPlayDate;                       // 再生最終日時
        unsigned long FileTime;                          // ファイル保存日時
        uchar        TrackNum;                           // トラックNo.
        uchar        AllTrackCount;                      // 全トラック数
        HFWD         reserve2;
        DLINKNUM     DlinkID;                            // DlinkID/楽曲ファイル番号
        char         MMID[IMP_MMID_LEN];                 // MMID

        S_NameData   Title;                              // 楽曲名
        S_NameData   Artist;                             // アーティスト名
        S_NameData   Album;                              // アルバム名

        HFWD         AllTitleFWIdx;                      // 全楽曲名の読みによる順リンクIndex
        HFWD         AllTitleRVIdx;                      // 全楽曲名の読みによる逆リンクIndex
        HFWD         AllArtistFWIdx;                     // 全アーティスト名の読みによる順リンクIndex
        HFWD         AllArtistRVIdx;                     // 全アーティスト名の読みによる逆リンクIndex
        HFWD         AllAlbumFWIdx;                      // 全アルバム名の読みによる順リンクIndex
        HFWD         AllAlbumRVIdx;                      // 全アルバム名の読みによる逆リンクIndex
        HFWD         ArtistTitleFWIdx;                   // 0922 アーティスト毎の楽曲名の読みによる順リンクIndex
        HFWD         ArtistTitleRVIdx;                   // 0922 アーティスト毎の楽曲名の読みによる逆リンクIndex
//0922        HFWD         ArtistTitleDateFWIdx;               // アーティスト毎のファイル保存日時による順リンクIndex
//0922        HFWD         ArtistTitleDateRVIdx;               // アーティスト毎のファイル保存日時による逆リンクIndex
        HFWD         ArtistAlbumFWIdx;                   // アーティスト毎のアルバム名の読みによる順リンクIndex
        HFWD         ArtistAlbumRVIdx;                   // アーティスト毎のアルバム名の読みによる逆リンクIndex
        HFWD         AlbumFWIdx;                         // アルバム毎のトラック番号による順リンクIndex
        HFWD         AlbumRVIdx;                         // アルバム毎のトラック番号による逆リンクIndex
        HFWD         AllDateFWIdx;                       // 全楽曲のファイル保存日時による順リンクIndex
        HFWD         AllDateRVIdx;                       // 全楽曲のファイル保存日時による逆リンクIndex

        BYTE         UIMCheck;                           // UIMチェック結果
        BYTE         LimitCheck;                         // 再生制限有無(0:無/1:有)

        DLINKNUM     RSVDlinkID;                         // 805TRK2070 予約DlinkID　OEMMPUTIL_RSV_DLINKID(予約状態)時のみ有効
        BYTE         reserve[2];
}S_SongMngData;

// 楽曲管理リンクデータ
typedef struct _S_SongMngData_L {
        HFWD           CountDF;                          // DF楽曲数
        HFWD           CountMSUta;                       // MS着うたフル楽曲数
        HFWD           CountMSPC;                        // MS PC連携楽曲数
        HFWD           reserve[5];                       // 
                                                         // 楽曲管理データへのポインタ
        S_SongMngData *pSongMngData[OEMMPUTIL_MAX_ALL_SONG];
        HFWD           DFMemID;                          // DF楽曲管理データエリアメモリID
        HFWD           reserve2;                         // 
        HFWD           MSUtaMemID[10];                   // MS着うたフル楽曲管理データエリアメモリID
        HFWD           MSPCMemID[10];                    // MSPC連携楽曲管理データエリアメモリID
        HFWD           reserve3[2];                      // 
}S_SongMngData_L;

// プレイリストデータ
typedef struct _S_PlayListData {
        int          Device_name;                        // デバイス名称(DForMS)
        int          reserve;
        DLINKNUM     DlinkID;                            // DlinkID/配列番号
		ulong        FileTime;
}S_PlayListData;

// プレイリスト管理リンクデータ
typedef struct _S_PlayListMngData {
//TRK1330        HFWD           Count;                                   // プレイリスト楽曲数
        HFWD           DFCount;                                 // DFプレイリスト楽曲数
        HFWD           MSCount;                                 // MSプレイリスト楽曲数
//TRK1330        HFWD           reserve[7];                              // 
        HFWD           reserve[6];                              // リザーブ領域
        S_PlayListData PlayListData[OEMMPUTIL_MAX_ALL_PLAYLIST];// プレイリストデータ
}S_PlayListMngData;

/* プレイリストソートデータ */// TRK2883
typedef struct _S_PlayListSort {
        HFWD         Count;
        HFWD         PlayListSort[OEMMPUTIL_MAX_ALL_PLAYLIST] ;
}S_PlayListSort;

// ラベル管理リンクデータ
typedef struct _S_LabelMngData {
        HFWD TitleHdIndex[OEMMPUTIL_MAX_LABEL];     // 全楽曲の各ラベル先頭の楽曲管理データIndex
        HFWD TitleTlIndex[OEMMPUTIL_MAX_LABEL];     // 全楽曲の各ラベル最終の楽曲管理データIndex
        HFWD ArtistNameHdIndex[OEMMPUTIL_MAX_LABEL];// 全アーティストの各ラベル先頭の楽曲管理データIndex
        HFWD ArtistNameTlIndex[OEMMPUTIL_MAX_LABEL];// 全アーティストの各ラベル最終の楽曲管理データIndex
        HFWD AlbumNameHdIndex[OEMMPUTIL_MAX_LABEL]; // 全アルバム名の各ラベル先頭の楽曲管理データIndex
        HFWD AlbumNameTlIndex[OEMMPUTIL_MAX_LABEL]; // 全アルバム名の各ラベル最終の楽曲管理データIndex
}S_LabelMngData;

// 楽曲/プレイリスト一覧情報
typedef struct _S_SongList {
        HFWD      FIndex;                             // 楽曲orプレイリスト管理データIndex
        DLINKNUM  DlinkID;                            // 楽曲orプレイリストファイルのDlinkID
}S_SongList;

/*======================================================*/
#define __0915__
#define __0916__

#define OEMMPUTIL_K_ADDSONG  1
#define OEMMPUTIL_K_DELSONG  2
#define OEMMPUTIL_K_MOVESONG 3
#define OEMMPUTIL_K_RENEW    4
#define OEMMPUTIL_K_NOACTION 9 // 805TRK2070 UpDate無効

//#ifdef __0915__
typedef struct _S_FDCOM {
        void  *pNext;
        HFWD   CB_MemID;                   // 引継ぎ用メモリID
        HFWD   kind;
}S_FDCOM;
//TRK2253 typedef struct _S_OEMMPUTIL_FD_QUE {
//TRK2253         S_FDCOM   *hp;
//TRK2253         S_FDCOM   *tp;
//TRK2253 }S_OEMMPUTIL_FD_QUE;

typedef struct _S_NRepAddSong {
        S_FDCOM   FDcom;
        int       Device_name;                // デバイス名称
        int       Folder_name;                // フォルダ名称
        DLINKNUM  DlinkID;                    // DlinkIDorショートファイル名
        HFWD      TIndex;                     // 楽曲管理データ作成位置(全体のINDEX)
        HFWD      FIndex;                     // 楽曲管理データ作成位置(フォルダ内のINDEX)
}S_NRepAddSong;

typedef struct _S_NRepDelSong {
        S_FDCOM FDcom;
        int     Device_name;               // デバイス名称
        int     Folder_name;               // フォルダ名称
        int     Mng_number;                // IMP管理ファイル番号
        int     Music_number;              // IMP管理ファイル内楽曲位置(番号)
        HFWD    TIndex;                    // 楽曲管理データ削除位置(全体のINDEX)
        HFWD    FIndex;                    // 楽曲管理データ削除位置(フォルダ内のINDEX)
        S_SelectTable *pSelectTable;       // 絞り込みテーブルポインタ
}S_NRepDelSong;

typedef struct _S_NRepMoveSong {
        S_FDCOM   FDcom;
        int       SrcDevice_name;// 移動前デバイス名称
        int       SrcFolder_name;// 移動前フォルダ名称
        HFWD      SrcFIndex;     // 移動前楽曲管理データ位置(フォルダ内のINDEX)
        HFWD      SrcTIndex;     // 移動前楽曲管理データ位置(全体のINDEX)
        int       DstDevice_name;// 移動前デバイス名称
        int       DstFolder_name;// 移動後フォルダ名称
        HFWD      DstFIndex;     // 移動後楽曲管理データ位置(フォルダ内のINDEX)
        HFWD      DstTIndex;     // 移動後楽曲管理データ位置(全体のINDEX)
        DLINKNUM  DstDlinkID;    // 移動後DlinkIDorショートファイル名
}S_NRepMoveSong;

typedef struct _S_ReNew {
        S_FDCOM   FDcom;
        int       Device_name;                // デバイス名称
        int       Folder_name;                // フォルダ名称
        DLINKNUM  DlinkID;                    // DlinkIDorショートファイル名
        HFWD      FIndex;                     // 楽曲管理データ作成位置(フォルダ内のINDEX)
        HFWD      TIndex;// TRK1355           // 楽曲管理データ作成位置(全体のINDEX)
}S_ReNew;

//▼TRK2253
typedef union _U_FD_QUEDATA{
        S_NRepAddSong  U_AData;
        S_NRepDelSong  U_DData;
        S_NRepMoveSong U_MData;
        S_ReNew        U_RData;
}U_FD_QUEDATA;

typedef struct _S_OEMMPUTIL_FD_QUE {
        U_FD_QUEDATA   *hp;
        U_FD_QUEDATA   *tp;
        HFWD      CB_MemID;               // 引継ぎ用メモリID
}S_OEMMPUTIL_FD_QUE;
//▲TRK2253

//#endif

/*======================================================*/


// 以降、吉田氏作成
/*======================================================
FILE:  OEMMPUtilCB.h

SERVICES:
   OEM functions for supporting BREW MPUTIL
   Interface

GENERAL DESCRIPTION:
   This file provides the prorotypes of the functions
   that OEMs must provide in order to support the BREW
   MPUTIL interfaces

=====================================================*/
//#include "AEE.h"

// コールバックイベント
enum {
    MPUTIL_CB_DEFAULT = 0,		// CBイベントその他(未定義)
    MPUTIL_CB_DF_CONSISTENCY_CHECK,	// DFデータ整合性チェック
    MPUTIL_CB_UIM_CONSISTENCY_CHECK,	// UIM整合性チェック
    MPUTIL_CB_MS_CONTROL_DATA_CREATE,	// MS管理データ作成
    MPUTIL_CB_MS_PLAYLIST_DATA_CREATE,	// MSプレイリストデータ作成
    MPUTIL_CB_MS_CONSISTENCY_CHECK,	// MSデータ整合性チェック
    MPUTIL_CB_MS_CONTROL_FILE_UPDATE,	// IMP管理ファイル更新
    MPUTIL_CB_ADD_KMF,			// 楽曲追加
    MPUTIL_CB_DELETE_KMF,		// 楽曲削除
    MPUTIL_CB_ADD_KPL,			// プレイリスト追加
    MPUTIL_CB_DELETE_KPL,		// プレイリスト削除
    MPUTIL_CB_MS_INSERT,		// MS挿入
    MPUTIL_CB_MS_EXTRACT,		// MS抜き取り
    MPUTIL_CB_NATIVE,			// Native DF割込み
    MPUTIL_CB_DECODE,                   // 画像でコード処理
// UIQ119[S] MMIDマッチング
    MPUTIL_CB_MATCH_MMID                // MMIDマッチング
// UIQ119[S] MMIDマッチング
};

typedef void (*MPUTILCBFUNC) ( int eCbType, void * pUserData );
typedef void (*MPUTILMSCBFUNC) ( int eCbType, void * pUserData, void *pUpData );

// コールバック初期化
extern void MPUTIL_I_CBInit();
// コールバック設定
extern int  MPUTIL_I_CBSet( MPUTILCBFUNC CbFunc, int eCbType, void * pData, boolean bIsMemoryFree );
extern int  MPUTIL_I_MSCBSet( MPUTILMSCBFUNC CbFunc, int eCbType, void * pData, boolean bIsMemoryFree, void * pCBData );//0922
#endif // _OEMMPUTILDATACTRL_H_
