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

📄 flmenu.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 5 页
字号:

#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();
        //PL00003441, set _bFlMnCurItemIdx/_bFlMnItemNs to 0 so that when it recover, the hilight is in first item
        _bFlMnCurItemIdx = 0x0;
        _bFlMnItemNs = 0x0;
        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);
  }
#if defined(SUPPORT_RUSSIAN_FILE_NAME) && defined(SUPPORT_THAI)
		vSetFsCodePage(4);
#endif

  // - 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
  {
#ifdef SUPPORT_KOREAN_FILE_NAME
     vPasteMsgAddr(FL_MENU_WB, bStrLen, dwAddr, bSharedInfo(SI_JOLIET_LEVEL));
#else
    vPasteMsgAddr(FL_MENU_WB, bStrLen, dwAddr);
#endif
  }

  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;
#ifdef SUPPORT_THAI 
	DWRD dwWriteAddr;
	BYTE bWriteLen,bTableIdx;
	WORD wTmp;
#endif

  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;
  }
  #ifdef SUPPORT_THAI
  dwAddr = (DWRD)(*pdwAddr);
	  dwWriteAddr = dwAddr;
	  bWriteLen = 0;
	  for (bIdx = 0; bIdx < bLen; bIdx++) 
	  {
		bChar = bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr));   
		dwAddr ++;
	  
	   if(bChar == 0x0E)
		  {
		  bChar = bReadDRAMTbl(bLoByte(wHiWord(dwAddr)), wLoWord(dwAddr));
		   dwAddr ++;
			wTmp = 0x0E00 + bChar;
			for(bTableIdx = 0x00;bTableIdx <= 0x7f;bTableIdx ++)
			{
			  if(wTmp == cp874[bTableIdx])
			  { 
				WriteDRAMTbl(bLoByte(wHiWord(dwWriteAddr)), wLoWord(dwWriteAddr), (bTableIdx + 0x80));
				dwWriteAddr ++;
				bWriteLen ++;
				break;
			  }
			}
		  }
	   else 						  //ASC case
		  {
			WriteDRAMTbl(bLoByte(wHiWord(dwWriteAddr)), wLoWord(dwWriteAddr), bChar);
			dwWriteAddr ++; 
			bWriteLen ++;
		  }    
	  }   
#endif

  // - 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 0//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())
      {
      
#ifdef MP3_LAST_MEMORY
		case FL_CMDPATH_INIT_0:
		    vFlSetCmdTarget(FL_CMD_TARGET_MENU);
			fgFlMnEntItem(_bFlMnCurItemIdx);
			break;
#endif
        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();
      #ifdef MP3_LYRICS_V1_SUPPORT
      fgFlMp3LyricsInit();
      #endif
      break;
    case FTYPE_MPG:
    case FTYPE_DAT:
    case FTYPE_VOB:
    case FTYPE_AVI:
    case FTYPE_TS1:
    case FTYPE_TS2:
    case FTYPE_TS3:
#ifdef SUPPORT_MP3_DIVX_PLAYBACK
    case FTYPE_MIDV:
#endif
      vFlClRls();
      vFlSetCmdTarget(FL_CMD_TARGET_MPEG);
      break;
    default:
      // - other case
      break;
    }
  }
  else
  {
    // - error occurs, do nothing
  }

  return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -