⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flmenu.c

📁 MTK 1389E SOURCE CODE
💻 C
📖 第 1 页 / 共 5 页
字号:
          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 + -