📄 flmenu.c
字号:
case FTYPE_STILL:
vFlClNext();
vFlSetCmdTarget(FL_CMD_TARGET_JPEG);
break;
case FTYPE_AV:
// 20050503, PL00000140, set PBC state to SV_PRE_PLAY so that we don't accept setup key from here.
vSetSharedInfo(SI_PBC_STATE, SV_PRE_PLAY) ;
vFlClNext();
//vFlSetCmdTarget(FL_CMD_TARGET_MPEG);
vFlSetCmdTarget(FL_CMD_TARGET_MENU);
break;
}
break;
#ifdef ISO_AUTO_PLAY
case FL_CMDPATH_ATPLY_0:
vFlCmdQueryItem(_bFlRefListId, _wFlAtplyIdx);
break;
case FL_CMDPATH_ATPLY_1:
_bFlMnCurItemIdx = _wFlCurAdoIdx % FLMN_ITEM_N;
#ifdef FL_AUTO_PLAY_SYNC_MENU
vFlMnDrawPage();
fgFlMnEntItem(_bFlMnCurItemIdx);
#endif
vFlCmdClickItem(_bFlMnListId, _wFlCurAdoIdx);
break;
#endif
}
}
else
{
// - error occurs, mark the number of item is negative
vFlCmdDone();
switch(bFlClPath())
{
case FL_CMDPATH_CHG_LIST:
bType = bSharedInfo(FL_LIST_FIELD(_bFlMnListId));
switch (bType)
{
case FLPARM_LIST_FOLDER:
#if defined (DATA_DISC_SUPPORT_DISC_LIST)
bType = FLPARM_LIST_DISC;
_wFlCurAdoIdx = _wFlFdIdx;
#elif defined (DATA_DISC_SUPPORT_PLAY_LIST)
bType = FLPARM_LIST_PLAYLIST;
_wFlCurAdoIdx = _wFlFlIdx;
#else
_wFlCurAdoIdx = _wFlPlIdx;
#endif
break;
#ifdef DATA_DISC_SUPPORT_DISC_LIST
case FLPARM_LIST_DISC:
#if defined (DATA_DISC_SUPPORT_PLAY_LIST)
bType = FLPARM_LIST_PLAYLIST;
_wFlCurAdoIdx = _wFlFlIdx;
#else
bType = FLPARM_LIST_FOLDER;
_wFlCurAdoIdx = _wFlPlIdx;
#endif
break;
#endif
case FLPARM_LIST_INVALID:
#ifdef DATA_DISC_SUPPORT_PLAY_LIST
case FLPARM_LIST_PLAYLIST:
#endif
bType = FLPARM_LIST_FOLDER;
_wFlCurAdoIdx = _wFlPlIdx;
break;
}
#if 0
if (bType == FLPARM_LIST_PLAYLIST)
{
vSetSharedInfo(SI_DDISC_MIXED_TYPE_MODE, SV_ON);
vSetSharedInfo(SI_DDISC_CONC_AV_MODE, SV_OFF);
}
else
{
vSetSharedInfo(SI_DDISC_MIXED_TYPE_MODE, SV_OFF);
vSetSharedInfo(SI_DDISC_CONC_AV_MODE, SV_ON);
}
#endif
if (bType == FLPARM_LIST_FOLDER)
{
// 20050819, if PCD, don't display parent dir.
if (fgIsPcdPlay())
{
vFlCmdSet(_bFlMnListId, bType,
0x0, _wBaseDir, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
}
else
{
vFlCmdSet(_bFlMnListId, bType,
FLPARM_INC_PARENT, _wBaseDir, FLPARM_FF_DIR|FLMN_DEF_FFAC, FLPARM_SO_GDIR);
}
}
else
{
vFlCmdSet(_bFlMnListId, bType, 0xFF,
0xFFFF, FLMN_DEF_FFAC, FLPARM_SO_GDIR);
}
break;
default:
//vFlCmdDone();
_bFlMnCurItemIdx = 0xFF;
_bFlMnItemNs = 0xFF;
break;
}
}
return;
}
#ifdef DATA_DISC_SUPPORT_PLAY_LIST
/**
* Check the return value of command "FLCMD_RM_FROM_PL".
*/
void vFlMnRetRmFromPl(void) large
{
WORD wBlkPtr;
BYTE bRCode;
wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
bRCode = bSharedInfo(wBlkPtr ++);
vFlCmdDone();
if (bRCode == FLRET_S_OK)
{
// - successful
_wFlMnListLen = bSharedInfo(wBlkPtr ++);
if (_wFlMnListLen)
{
if (_bFlMnCurItemIdx >= _wFlMnListLen)
_bFlMnCurItemIdx--;
if (fgFlClLock(FL_CMDPATH_PL_RM))
fgFlCmdGetItems(_bFlMnListId, 0x0);
}
else
{
fgFlMnChgListType();
}
}
else
{
// - error occurs
_wFlMnListLen = 0xFF;
}
return;
}
/**
* Check the return value of command "FLCMD_CLEAN".
*/
static void vFlMnRetRmAllFromPl(void) large
{
WORD wBlkPtr;
BYTE bRCode;
vFlCmdDone();
wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
bRCode = bSharedInfo(wBlkPtr ++);
if (bRCode == FLRET_S_OK)
{
// - successful
fgFlMnChgListType();
}
else
{
// - error occurs
}
}
#endif
static void vFlMnRetQueryItem(void) large
{
WORD wBlkPtr, wTmp;
BYTE bRCode;
BYTE bTmp1, bTmp2;
wBlkPtr = FL_CMD_BLK_SA + 1;
bRCode = bSharedInfo(wBlkPtr ++);
if ((bRCode != FLRET_S_OK) || !fgFlClIsLock())
return;
vFlCmdDone();
switch (bFlClPath())
{
case FL_CMDPATH_ATPLY_0:
vFlClNext();
wBlkPtr += 5;
bLoByte(wTmp) = bSharedInfo(wBlkPtr);
bHiByte(wTmp) = bSharedInfo(wBlkPtr + 1);
if (_wFlCurAdoDir != wTmp)
{
_wFlCurAdoDir = wTmp;
bLoByte(_wFlCurAdoIdx) = bSharedInfo(wBlkPtr + 2);
bHiByte(_wFlCurAdoIdx) = bSharedInfo(wBlkPtr + 3);
vFlCmdSet(_bFlMnListId, FLPARM_LIST_FOLDER,
FLPARM_INC_PARENT, _wFlCurAdoDir, FLPARM_FF_DIR|FLMN_DEF_FFAC, FLPARM_SO_GDIR);
}
else
{
bLoByte(wTmp) = bSharedInfo(wBlkPtr + 2);
bHiByte(wTmp) = bSharedInfo(wBlkPtr + 3);
bTmp1 = (BYTE) (wTmp % FLMN_ITEM_N);
bTmp2 = (BYTE) (_wFlCurAdoIdx % FLMN_ITEM_N);
if ((bTmp1 > bTmp2) && (bTmp1 < (bTmp2 + FLMN_ITEM_N)))
{
vFlCmdClickItem(_bFlMnListId, _wFlCurAdoIdx);
}
else
{
fgFlCmdGetItems(_bFlMnListId, _wFlCurAdoIdx - (_wFlCurAdoIdx % FLMN_ITEM_N));
}
}
break;
}
return;
}
////////////////////////////////////////////////////////////////////////////////
//
/**
* This function draw the file name of the given item by the
* new OSD command "vpast_msg_addr".
*
* It also demos how to get item info from descriptor.
*/
void vFlMnDrawItem(BYTE bItemIdx) large
{
DWRD dwAddr;
WORD wPos;
BYTE bFType, bStrLen;
WORD wIdx, wDirIdx;
BYTE pbStr[4];
BOOL fgIsPrnt = TRUE;
wPos = FL_ITEM_FIELD(bItemIdx);
// - collect misc info
bFType = bSharedInfo(wPos + 5);
bLoByte(wIdx) = bSharedInfo(wPos + 6);
bHiByte(wIdx) = bSharedInfo(wPos + 7);
if (bFType == FTYPE_DIR)
{
bLoByte(wDirIdx) = bSharedInfo(wPos + 12);
bHiByte(wDirIdx) = bSharedInfo(wPos + 13);
}
// - collect name info
bLoByte(wLoWord(dwAddr)) = bSharedInfo(wPos);
bHiByte(wLoWord(dwAddr)) = bSharedInfo(wPos + 1);
bLoByte(wHiWord(dwAddr)) = bSharedInfo(wPos + 2);
bHiByte(wHiWord(dwAddr)) = bSharedInfo(wPos + 3);
bStrLen = bSharedInfo(wPos + 4);
// - preprocess the name string
if (!((bStrLen == 1) && (bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr)) == 0x01)))
{
fgIsPrnt = FALSE;
vFlMnPProcName(&dwAddr, &bStrLen);
}
// - paste icon
vOsdPasteBmpXY(_prFlMnItemTbl[bItemIdx].wLeft,
_prFlMnItemTbl[bItemIdx].wTop,
FL_MENU_WB, bFlMnGetIconIdx(bFType));
// - paste the message of file name
_wStartX = _prFlMnItemTbl[bItemIdx].wLeft + FL_ICON_W;
_wStartY = _prFlMnItemTbl[bItemIdx].wTop;
//if (bStrLen == 0)
if (fgIsPrnt)
{
// - special case " .." as the string of parent dir
pbStr[0] = 3;
pbStr[1] = ' ';
pbStr[2] = pbStr[3] = '.';
vOsdShowStr(FL_MENU_WB, pbStr);
}
else
{
vPasteMsgAddr(FL_MENU_WB, bStrLen, dwAddr);
}
if (fgFlMnIsCurrPlayItem(bItemIdx))
{
//vFlMnHiliItem(bItemIdx, TRUE);
vFlMnHiliOn(bItemIdx, FLMN_HILI_PLAY, FLMN_CLR_BG, FLMN_CLR_PLAY);
}
return;
}
/**
* Preprocess the given name string. The namae string is given by
* pointer to it and its length. We adjust the pointer and the len to
* indicate the new string.
*
* The current preprocess includes:
* 1. Cut out the extension name
* 2. Etc ...
*/
void vFlMnPProcName(DWRD *pdwAddr, BYTE *pbLen) large
{
BYTE bChar, bIdx, bLen;
DWRD dwAddr;
if (!pdwAddr || !pbLen)
return;
dwAddr = (DWRD)(*pdwAddr);
bLen = (*pbLen);
// - move the pointer to the end of the string
dwAddr += (DWRD)bLen;
// - check each char
for (bIdx = 1; bIdx < bLen; bIdx ++)
{
dwAddr --;
bChar = bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr));
if (bChar == '.')
break;
}
// - cut out the ext
if (bIdx < bLen)
bLen -= bIdx;
#ifdef FLMN_DONT_SHOW_NONPRINTABLE_CHAR
dwAddr = (DWRD)(*pdwAddr);
for (bIdx = 0; bIdx < bLen; bIdx++, dwAddr++)
{
bChar = bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr));
if ((bChar < 0x20) || (bChar > 0x7E))
{
WriteDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr), '_');
}
}
#endif
if (bLen > FLMN_FILENANE_LEN)
bLen = FLMN_FILENANE_LEN;
(*pbLen) = bLen;
}
#if 1//def JPG_INFO
static void vShowJpegInfo(void) large
{
BYTE pbStr[9], i;
WORD wTmp;
pbStr[0] = 8;
wTmp = (WORD) bSharedInfo(SI_JPG_ORG_WIDTH_HI) * 256 + (WORD) bSharedInfo(SI_JPG_ORG_WIDTH_LO);
wTmp = wWRDToBCD(wTmp);
pbStr[1] = BCD_HI(bHiByte(wTmp)) + '0';
pbStr[2] = BCD_LO(bHiByte(wTmp)) + '0';
pbStr[3] = BCD_HI(bLoByte(wTmp)) + '0';
pbStr[4] = BCD_LO(bLoByte(wTmp)) + '0';
for (i=1; i<=4; i++)
{
if (pbStr[i] == '0')
pbStr[i] = ' ';
else
break;
}
wTmp = (WORD) bSharedInfo(SI_JPG_ORG_HEIGHT_HI) * 256 + (WORD) bSharedInfo(SI_JPG_ORG_HEIGHT_LO);
wTmp = wWRDToBCD(wTmp);
pbStr[5] = BCD_HI(bHiByte(wTmp)) + '0';
pbStr[6] = BCD_LO(bHiByte(wTmp)) + '0';
pbStr[7] = BCD_HI(bLoByte(wTmp)) + '0';
pbStr[8] = BCD_LO(bLoByte(wTmp)) + '0';
for (i=5; i<=8; i++)
{
if (pbStr[i] == '0')
pbStr[i] = ' ';
else
break;
}
vOsdPosShowArg(OSD_POS_FS_INFO_BAR, OSD_MSG_FL_RESOLUTION, OSD_NO_DISAPPEAR, pbStr);
}
#endif
/**
* Check the return value of command "FLCMD_CLICK_ITEM".
*/
void vFlMnRetClickItem(void) large
{
WORD wBlkPtr, wItem;
BYTE bRCode;
wBlkPtr = FL_CMD_BLK_SA + 1; // - shift to the parameter block
bRCode = bSharedInfo(wBlkPtr ++);
vFlCmdDone();
if (bRCode == FLRET_S_OK)
{
// - successful
switch (bSharedInfo(wBlkPtr ++))
{
case FTYPE_DIR:
// - we clicked a dir, the list goes into it.
// re-get items for redraw later
vFlMnRdListInfo(_bFlMnListId);
bLoByte(wItem) = bSharedInfo(wBlkPtr ++);
bHiByte(wItem) = bSharedInfo(wBlkPtr);
_bFlMnCurItemIdx = wItem % FLMN_ITEM_N;
fgFlCmdGetItems(_bFlMnListId, wItem - _bFlMnCurItemIdx);
break;
case FTYPE_JPG:
// - we clicked a JPEG file
switch (bFlClPath())
{
case FL_CMDPATH_CHG_CMDTGT:
case FL_CMDPATH_RPLC_CMDTGT:
case FL_CMDPATH_SEL_2:
vFlClRls();
break;
case FL_CMDPATH_CLICK:
vFlClRls();
#ifdef JPG_PREVIEW_SUPPORT
if (_bPreview == PREVIEW_STATE_FINISHED)
{
// - clicked for preview
_bPreview = PREVIEW_STATE_IDLE;
}
else
#endif
{
// - clicked for selection
if (fgFlClLock(FL_CMDPATH_CHG_CMDTGT))
vFlSetCmdTarget(FL_CMD_TARGET_JPEG);
}
break;
}
break;
#ifdef CDDA_USE_CDFS
case FTYPE_CDA:
case FTYPE_DTS:
#endif
case FTYPE_MP1:
case FTYPE_MP2:
case FTYPE_MP3:
case FTYPE_WMA:
// - we clicked a Audio file
switch (bFlClPath())
{
case FL_CMDPATH_SEL_2:
#if defined(CDG_SUPPORT) && defined(CDDA_USE_CDFS)
if (!((bSharedInfo(SI_CDG_DISC) == SV_ON) && (bSharedInfo(SI_FS_FSTYPE) == FSTYPE_CDFS)))
#endif
{
vFlMnDrawPage();
vFlMnHiliItem(_bFlMnCurItemIdx, TRUE);
}
_wFlCurAdoDir = wFlMnGetListBaseDir(_bFlMnListId);
_wFlCurAdoIdx = wFlGetItemIdx(_bFlMnCurItemIdx);
vFlIpShowInfo(IP_INFO_FILE_INDEX, 0, _wFlCurAdoIdx);
break;
#ifdef ISO_AUTO_PLAY
case FL_CMDPATH_ATPLY_1:
break;
#endif
}
vFlClRls();
break;
case FTYPE_MPG:
case FTYPE_DAT:
case FTYPE_VOB:
case FTYPE_AVI:
case FTYPE_TS1:
case FTYPE_TS2:
case FTYPE_TS3:
vFlClRls();
vFlSetCmdTarget(FL_CMD_TARGET_MPEG);
break;
default:
// - other case
break;
}
}
else
{
// - error occurs, do nothing
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -