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

📄 pcd_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
📖 第 1 页 / 共 5 页
字号:
	NO_PARENT,
	static_user_op,
	},
	(void *)SC_TMP_MSG_ADDR
};

static const MS_STATIC tmp_string = {
	{
	MS_ASCII | MS_STRING_ON_SC,
	ALIGN_LEFT_PAD,
	I_COLOR,
	{TMP_X, MS_LINE_0, 96, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)SC_TMP_STR_ADDR
};
#endif // D_PICTURE_CD_ENABLED

// ZORAN CDE0815 : Moved from display.c
//#ifdef MILLENO
// ZORAN CDE0605 : Move track/time to left and make narrower
#define MSS_TRACK_X			296
#define MSS_TRACK_WIDTH		(2 * MP3M_FONT_WIDTH)
// ZORAN CDE0605 >>>

const MS_STATIC mp3_track_stat = {
	{
// ZORAN CDE0605 : Move track/time to left and make narrower
#ifdef DISABLE
	0,
#else
	MS_ASCII,
#endif // DISABLE
	ALIGN_LEFT,
	SCREEN_COLOR,
// ZORAN CDE0605 : Move track/time to left and make narrower
	{MSS_TRACK_X, MS_LINE_0, MSS_TRACK_WIDTH, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
// <<< ZORAN CDE0606 : Make "Track" narrower:
#ifdef DISABLE
	(char *)S_TRACK
#else
	(void *) "T:"
#endif // DISABLE
};

// <<< ZORAN CDE0605 : Move track_stat to left
#define MSS_TRACK_NUM_X			  (MSS_TRACK_X + MSS_TRACK_WIDTH)
// ZORAN CDE0710 : Widen track number
#define MSS_TRACK_NUM_WIDTH		  (8 * MP3M_FONT_WIDTH)
// ZORAN CDE0605 >>>

const MS_STATIC mp3_track_num_stat = {
	{
	MS_ASCII | MS_STRING_ON_SC,
	ALIGN_LEFT_PAD,
	SCREEN_COLOR,
// ZORAN CDE0605 : Move track/time to left
	{MSS_TRACK_NUM_X, MS_LINE_0, MSS_TRACK_NUM_WIDTH, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(char *)SC_CURRENT_TIME_MSG_ADDR
};

// <<< ZORAN CDE0927 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
// <<< ZORAN CDE0605 : Move track_stat to left
#define PCDM_MSS_TRACK_NUM_X			  (PCDM_MSS_TMP_MSG_X + MSS_TMP_MSG_WIDTH + 24)
// ZORAN CDE0710 : Widen track number
#define PCDM_MSS_TRACK_NUM_WIDTH		  ((MAX_TRACK_DIGITS+1) * MP3M_FONT_WIDTH)
// ZORAN CDE0605 >>>

const MS_STATIC jpg_track_num_stat = {
	{
	MS_ASCII | MS_STRING_ON_SC,
	ALIGN_LEFT_PAD,
	SCREEN_COLOR,
// ZORAN CDE0605 : Move track/time to left
	{PCDM_MSS_TRACK_NUM_X, MS_LINE_0, PCDM_MSS_TRACK_NUM_WIDTH, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(char *)SC_CURRENT_TIME_MSG_ADDR
};
#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE0927 >>>

// <<< ZORAN CDE0605 : Move track_stat to left
#define MSS_TIME_X			  (MSS_TRACK_NUM_X + MSS_TRACK_NUM_WIDTH)
// ZORAN CDE0713 : Widen MP3 time
#define MSS_TIME_WIDTH		  (6 * MP3M_FONT_WIDTH)
// ZORAN CDE0605 >>>

const MS_STATIC mp3_time_stat = {
	{
	MS_ASCII | MS_STRING_ON_SC,
	ALIGN_LEFT,
	SCREEN_COLOR,
// ZORAN CDE0605 : Move track_stat to left
	{MSS_TIME_X, MS_LINE_0, MSS_TIME_WIDTH, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(char *)SC_TOTAL_TIME_MSG_ADDR
};

// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
#define MSS_TRACKS_X		(PCDM_MSS_TRACK_NUM_X + PCDM_MSS_TRACK_NUM_WIDTH)
#define MSS_TRACKS_WIDTH	(16 * MP3M_FONT_WIDTH)

const MS_STATIC jpg_track_stat = {
	{
	MS_ASCII,
	ALIGN_LEFT,
	SCREEN_COLOR,
	{MSS_TRACKS_X, MS_LINE_0, MSS_TRACKS_WIDTH, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *) "Pictures on Disc"
};
#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE0924 >>>

// <<< ZORAN CDE1008 >>>
#ifdef D_PICTURE_CD_ENABLED
 BOOL mp3m_can_zoom( void )
{
	return ( IS_STATE(MP3M_STATE_IMAGE_OPEN));
}
#endif // D_PICTURE_CD_ENABLED
// ZORAN CDE1008 >>>

#if 1 //def DISABLE
// ZORAN CDE0816 : Change selected item in track list when track changes
void list_goto_track(WORD wTrackNext);
#endif

// <<< ZORAN CDE0927 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
static void pcdm_refresh_track( void )
{
	static_user_op((MS_WIDGET*)&jpg_track_num_stat, MS_UOP_DISPLAY, !C_FOCUSED);
	static_user_op((MS_WIDGET*)&jpg_track_stat, MS_UOP_DISPLAY, !C_FOCUSED);
}
#endif // D_PICTURE_CD_ENABLED
/// ZORAN CDE0927 >>>

// ZORAN CDE0815 : Changed name from refresh_mp3_track
  void mp3_refresh_track(void) 
{
	// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
	if ( IS_STATE(MP3M_STATE_LIST_INITIALIZED) && !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
	{
		if ( g_ui_active_menu_id == MP3_MENU_ID )
		{
			static_user_op((MS_WIDGET*)&mp3_track_stat, MS_UOP_DISPLAY, !C_FOCUSED);
			static_user_op((MS_WIDGET*)&mp3_track_num_stat, MS_UOP_DISPLAY, !C_FOCUSED);
		}
		else
		{
			pcdm_refresh_track();
		}
	} // if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#else
	static_user_op((MS_WIDGET*)&mp3_track_stat, MS_UOP_DISPLAY, !C_FOCUSED);
	static_user_op((MS_WIDGET*)&mp3_track_num_stat, MS_UOP_DISPLAY, !C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED

// ZORAN CDE0924 >>>

#if 1 //def DISABLE
	// ZORAN CDE0816 : Change selected item in track list when track changes
	list_goto_track(SI_CDDA_TRACK_NUM);
#endif
}

// ZORAN CDE0815 : Changed name from refresh_mp3_time
 void mp3_refresh_time(void) 
{
#ifdef D_PICTURE_CD_ENABLED
	if ( g_ui_active_menu_id == MP3_MENU_ID )
	if ( IS_STATE(MP3M_STATE_LIST_INITIALIZED) && !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
		static_user_op((MS_WIDGET*)&mp3_time_stat, MS_UOP_DISPLAY, !C_FOCUSED);
}
//#endif // MILLENO
// ZORAN CDE0815 >>>

#define I_COLOR_IMAGE	MAKE_MS_COLOR( COLOR_INDEX_WHITE, COLOR_INDEX_TRANSPARENT, COLOR_INDEX_TRANSPARENT )

 void pcdm_tmp_string_display(char *str)
{

#ifdef DISABLE
	MS_hide((MS_WIDGET*)&tmp_string,(MS_DIALOG *)screen);
#endif
	sc_SetBytes(SC_TMP_STR_ADDR, 0, strlen(str)+1, (BYTE*)str );
#ifdef D_PICTURE_CD_ENABLED
	gmp3m.pmssTmpString->widget.color = (IS_STATE(MP3M_STATE_IMAGE_OPEN) ? I_COLOR_IMAGE : I_COLOR);
	static_user_op((MS_WIDGET*)gmp3m.pmssTmpString, MS_UOP_DISPLAY, !C_FOCUSED);
#else
	static_user_op((MS_WIDGET*)&tmp_string,MS_UOP_DISPLAY, !C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
}

//dm
static void mp3m_permanent_msg_display(OSD_MESSAGES msg)
{
	#ifdef DISABLE
	static OSD_MESSAGES prev = -1;
	if (prev != msg) {
		MS_hide((MS_WIDGET*)&tmp_msg,(MS_DIALOG *)screen);
		prev = msg;
	}
#endif // DISABLE

// <<< ZORAN CDE0118 : SC_TMP_MSG_SZ is 1!
//	sc_Write(SC_TMP_MSG_ADDR,4,(Sc_cont *)&msg);
	sc_Write(SC_TMP_MSG_ADDR,1,(Sc_cont *)&msg);
// ZORAN CDE0118 >>>
#ifdef D_PICTURE_CD_ENABLED
	gmp3m.pmssTmpMsg->widget.color = (IS_STATE(MP3M_STATE_IMAGE_OPEN) ? I_COLOR_IMAGE : I_COLOR);
	static_user_op((MS_WIDGET*) gmp3m.pmssTmpMsg, MS_UOP_DISPLAY, !C_FOCUSED);
#else
	static_user_op((MS_WIDGET*)&tmp_msg, MS_UOP_DISPLAY, !C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
}
//dm
static void mp3m_tmp_msg_display(OSD_MESSAGES msg)
{
#ifdef DISABLE
	static OSD_MESSAGES prev = -1;
	if (prev != msg) {
		MS_hide((MS_WIDGET*)&tmp_msg,(MS_DIALOG *)screen);
		prev = msg;
	}
#endif // DISABLE
// <<< ZORAN CDE0118 : SC_TMP_MSG_SZ is 1!
//	sc_Write(SC_TMP_MSG_ADDR,4,(Sc_cont *)&msg);
	sc_Write(SC_TMP_MSG_ADDR,1,(Sc_cont *)&msg);
// ZORAN CDE0118 >>>
#ifdef D_PICTURE_CD_ENABLED
	gmp3m.pmssTmpMsg->widget.color = (IS_STATE(MP3M_STATE_IMAGE_OPEN) ? I_COLOR_IMAGE : I_COLOR);
	static_user_op((MS_WIDGET*) gmp3m.pmssTmpMsg, MS_UOP_DISPLAY, !C_FOCUSED);
#else
	static_user_op((MS_WIDGET*)&tmp_msg, MS_UOP_DISPLAY, !C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED
}

static void *dir_name_address( int iDirIndex )
{
  void *pv;
  
  pv = (void *) (WORD) (gi_FirstDirLoc + (iDirIndex * (DIRNAME_SZ / 4)));

  return pv;
}

static void reset_directory_vars(void)
{
  gmp3m.dirBounds.iFirstFileIndex = -1;
  gmp3m.dirBounds.iLastFileIndex = -1;
  gmp3m.dirBounds.iLastItemNum = -1;
}

static MS_UOP change_directory(void)
{
  int iDirNum = gmp3m.iDirNum;
  int iFirstFileIndex;
  
  if ( g_dir_list_count > 1 )
  {
	iDirNum++;
	if ( iDirNum >= g_dir_list_count )
	  iDirNum = 0;

#ifdef D_PICTURE_CD_ENABLED
	gmp3m.pmssDirName->text = dir_name_address(iDirNum);
	if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
		static_user_op((MS_WIDGET *) gmp3m.pmssDirName, MS_UOP_DISPLAY, C_FOCUSED);
#else
	mssDirName.text = dir_name_address(iDirNum);
	static_user_op((MS_WIDGET *) &mssDirName, MS_UOP_DISPLAY, C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED

	// Start from the beginning and relist files
	if ( iDirNum > gmp3m.iDirNum )
	{
		iFirstFileIndex = gmp3m.dirBounds.iLastFileIndex + 1;
	}
	else
	{
		iFirstFileIndex = 0;
	}
	
	reset_directory_vars();

	gmp3m.iDirNum = iDirNum;
	
#ifdef D_PICTURE_CD_ENABLED
	if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
		mp3m_erase_menu();

	list_files(iFirstFileIndex);

#ifdef D_PICTURE_CD_ENABLED
	if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
	{
		MS_refresh((MS_DIALOG *) screen);

		update_scroll_statics();
	}
  }
  
  return 0;
}

// <<< ZORAN CDE1003 : Handle previous image functionality
static MS_UOP previous_directory(void)
{
  int iDirNum = gmp3m.iDirNum;
  int iFirstFileIndex;
  
  if ( g_dir_list_count > 1 )
  {
	iDirNum--;
	if ( iDirNum < 0 )
	  iDirNum = g_dir_list_count - 1;

#ifdef D_PICTURE_CD_ENABLED
	gmp3m.pmssDirName->text = dir_name_address(iDirNum);
	if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
		static_user_op((MS_WIDGET *) gmp3m.pmssDirName, MS_UOP_DISPLAY, C_FOCUSED);
#else
	mssDirName.text = dir_name_address(iDirNum);
	static_user_op((MS_WIDGET *) &mssDirName, MS_UOP_DISPLAY, C_FOCUSED);
#endif // D_PICTURE_CD_ENABLED

	reset_directory_vars();

	gmp3m.iDirNum = iDirNum;
	
#ifdef D_PICTURE_CD_ENABLED
	if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
		mp3m_erase_menu();

	list_files(0);

#ifdef D_PICTURE_CD_ENABLED
	if ( !IS_STATE(MP3M_STATE_IMAGE_OPEN) )
#endif // D_PICTURE_CD_ENABLED
	{
		MS_refresh((MS_DIALOG *) screen);

		update_scroll_statics();
	}
  }
  
  return 0;
}
// ZORAN CDE1003 >>>

static MS_UOP dirName_user_op(MS_WIDGET *widget,MS_UOP uop,char param) 
{
	MS_STATIC *mss = (MS_STATIC *)widget;
	if ( uop == MS_UOP_ENTER )
	{
	  uop = change_directory();
	  return uop;
	}
	
	if ( uop == MS_UOP_DISPLAY )
	{
#ifdef NO_C_STDLIB
		rtouts("\ndirname_user_op: DISPLAY");
#endif
		static_user_op(widget, uop, param);
		
		if ( g_dir_list_count > 1 )
		{
// REMINDER The second OSD_PutRect doesn't work (!?), so for now disable
// ( We're trying to display a 2-pixel wide line underneath and to at the right edge of the widget
#ifdef DISABLE
		  MS_POS msPos = widget->pos;
		  
		  // Underline
		  OSD_PutRect(msPos.x, msPos.y + msPos.h - 2, msPos.w, 2, FG_COLOR(widget->color));

		  // Right line
		  OSD_PutRect(msPos.x + msPos.w - 8, msPos.y, 2, msPos.h - 2, FG_COLOR(widget->color));
#endif // DISABLE
		}
		
		return MS_UOP_NOP;

	}
	
	static_user_op(widget, uop, param);
	if ( uop != 0 )
	{
	  switch (uop)
	  {
		  case MS_UOP_LEFT:
#ifdef NO_C_STDLIB
			  rtouts("\ndirname_user_op: left key");
#endif
			  break;

		  case MS_UOP_RIGHT:
#ifdef NO_C_STDLIB
			  rtouts("\ndirname_user_op: right key");
#endif
			  break;

		  case MS_UOP_UP:
#ifdef NO_C_STDLIB
			  rtouts("\ndirname_user_op: up key");
#endif
			  break;

		  case MS_UOP_DOWN:
#ifdef NO_C_STDLIB
			  rtouts("\ndirname_user_op: down key");
#endif
			  break;
	  }
	}
	return uop;
}

static void layout (void)
{

	go_CurrentLayout.m_bBigMemMap = TRUE;
	go_CurrentLayout.m_cPixRes = 0;

	// OSD can't start displaying at an arbitrary x-position, so we use 0 instead of X_OFFSET
	go_CurrentLayout.m_wOriginX = 0;

	// This can be set arbitrarily, as long as the m_wOriginY + m_wHeight <= video standard's height
	go_CurrentLayout.m_wOriginY = 60;

	go_CurrentLayout.m_wWidth = 720;
	go_CurrentLayout.m_wHeight = MS_MAX_LINES_BIGMM;
	go_CurrentLayout.m_cNbrHole = 0;
	go_CurrentLayout.m_cInitColor = 0;
	go_CurrentLayout.m_cNbrColor = 16;
	go_CurrentLayout.m_pColorPalette = (OSD_Palette *)MenuBitmapColor;

	OSDSetLayout();
	OSDSetFont(0);

#ifdef NO_C_STDLIB
	rtouts("\nMP3 LAYOUT");
	
	rtouts("\nSizeof(gmp3m) = "); rtouti(sizeof(gmp3m));
#endif
}

// <<< ZORAN CDE0816 : Define BUTTON_NUMBER_TO_TRACK macro
#define BUTTON_NUMBER_TO_TRACK(_buttonNumber_)	  (gmp3m.firstDisplayed.iFileIndex + _buttonNumber_ + 1)
#define TRACK_TO_BUTTON_NUMBER(_track_)	  (_track_ - gmp3m.firstDisplayed.iFileIndex - 1)

// <<< ZORAN CDE0924 : Implement PictureCD Browser
#ifdef D_PICTURE_CD_ENABLED
void close_slideshow( void )
{
	CLEAR_STATE( MP3M_STATE_SLIDESHOW_ACTIVE );
	timer_remove( gmp3m.pSlideshowTimer );

⌨️ 快捷键说明

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