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

📄 mode_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
📖 第 1 页 / 共 4 页
字号:
}
BOOL is_empty_chapter( char *sz_chapter )
{
  return ( strcmp(sz_chapter, "--") == 0 );
}

BOOL is_valid_title( DWORD *pdwTitle )
{
  DWORD dwTitle = 0;
  char *sz_title = gmsm.sz_title[gmsm.iItemNum];
  char *sz_chapter = gmsm.sz_chapter[gmsm.iItemNum];
  BOOL bValid = FALSE;

  if ( is_empty_title(sz_title)&& is_empty_chapter(sz_chapter))
  {
	bValid = TRUE;
  }
  else if(is_empty_chapter(sz_chapter)&&(direction==UP_DIRECTION 
	  ||direction==DOWN_DIRECTION)&&title_rover&&(!is_empty_title(sz_title)))
  {
  	bValid = FALSE;
  }
  else if((!is_empty_title(sz_title))&&is_empty_chapter(sz_chapter)&&chapter_rover&&direction!=LEFT_DIRECTION)
  {
	bValid = FALSE;
  }
  else
  {
	text_to_num( sz_title, &dwTitle );
  
	bValid = ( (dwTitle >= 1) && (dwTitle <= SI_DVD_AVAILABLE_TITLE) );
  }

  if ( pdwTitle )
	*pdwTitle = dwTitle;

  return bValid;
}


BOOL is_valid_chapter( DWORD dwTitle, DWORD *pdwChapter )
{
  DWORD dwChapter = 0;
  DWORD dwMaxChapters;
  char *sz_chapter = gmsm.sz_chapter[gmsm.iItemNum];
  char *sz_title= gmsm.sz_title[gmsm.iItemNum];
  BOOL bValid = FALSE;

  if ( is_empty_chapter(sz_chapter)&&is_empty_title(sz_title) )//aw0921
  {
	bValid = TRUE;
  }
  else if(is_empty_title(sz_title)&&chapter_rover)
  {
	bValid = FALSE;  
  }
  else if(is_empty_chapter(sz_chapter)&&(!is_empty_title(sz_title))&&((title_rover&&direction!=RIGHT_DIRECTION)||(chapter_rover&&direction!=LEFT_DIRECTION)))
  {

	  	bValid = FALSE;  
	  
  }
  else
  {
	if ( dwTitle < 1 )
	  dwTitle = 1;

	text_to_num( sz_chapter, &dwChapter );
	query_core( CQ_AVAILABLE_CHAPTERS, (void *)dwTitle, (void *) &dwMaxChapters );
#ifdef NO_C_STDLIB
	dbouts("\nAvailable chapters ("); dboutl( dwMaxChapters ); dbouts(")");
#endif

	bValid = (dwChapter <= dwMaxChapters);
  }

  if ( pdwChapter )
	*pdwChapter = dwChapter;
  
  return bValid;
}

static void title_action(char *s)
{
	EVENT evt = 0;
	long dw = 0;
	WORD wTitle = 0;

#ifdef NO_C_STDLIB
	dbouts("\nTitle is "); dbouts(s);
#endif

	text_to_num( s, &dw );
	wTitle = (WORD) dw;

	text_to_num( gmsm.sz_chapter[gmsm.iItemNum], &dw);
	dw = (wTitle << 8) | (BYTE) dw;

#ifdef NO_C_STDLIB
	dbouts(" ProgramListEntry ("); dboutdwx(dw); dbouts(" )");
#endif

	//PM_SetProgramListEntry(gmsm.iItemNum, (WORD) dw );

	if ( dw )
	  enable_next_item();
	
}

static void chapter_action(char *s)
{
	EVENT evt = 0;
	long dw = 0;
	DWORD dwTitle = 0;
	DWORD dwChapter = 0;
	DWORD dwMaxChapters;

#ifdef NO_C_STDLIB
	dbouts("\nChapter is "); dbouts(s);
#endif

	text_to_num( gmsm.sz_title[gmsm.iItemNum], &dwTitle);

	query_core( CQ_AVAILABLE_CHAPTERS, (void *)dwTitle, (void *) &dwMaxChapters );
#ifdef NO_C_STDLIB
	dbouts("\nAvailable chapters ("); dboutl( dwMaxChapters ); dbouts(")");
#endif

	text_to_num( s, &dwChapter );

	dw = ( (dwTitle & 0x00ff) << 8) | (dwChapter & 0x00ff);

#ifdef NO_C_STDLIB
	dbouts("\nProgramListEntry ("); dboutdwx(dw); dbouts(" )");
#endif
	
	//PM_SetProgramListEntry(gmsm.iItemNum, (WORD) dw );

	if ( dw )
	  enable_next_item();
	
}

BOOL is_empty_track( char *sz_track )
{
  return ( strcmp(sz_track, "---") == 0 );
}

BOOL is_valid_track( DWORD *pdwTrack )
{
  DWORD dwTrack = 0;
  DWORD dwMaxTracks;
  char *sz_track = gmsm.sz_track[gmsm.iItemNum];
  BOOL bValid = FALSE;

  if ( is_empty_track(sz_track) )
  {
	bValid = TRUE;
  }
  else
  {
	DWORD dwTitle = 0;

	text_to_num( sz_track, &dwTrack );
	query_core( CQ_AVAILABLE_CHAPTERS, (void *)dwTitle, (void *) &dwMaxTracks );
#ifdef NO_C_STDLIB
	dbouts("\nAvailable tracks ("); dboutl( dwMaxTracks ); dbouts(")");
#endif
	bValid = ( dwTrack <= dwMaxTracks );
  }

  if ( pdwTrack )
	*pdwTrack = dwTrack;
  
  return bValid;
}

static void track_action(char *s)
{
	EVENT evt = 0;
	DWORD dwTrack = 0;
	DWORD dwMaxTracks;
	
#ifdef NO_C_STDLIB
	rtouts("\nTrack is "); dbouts(s);
#endif

	query_core( CQ_AVAILABLE_CHAPTERS, (void *)1L, (void *) &dwMaxTracks );
#ifdef NO_C_STDLIB
	rtouts("\nAvailable tracks ("); rtoutl( dwMaxTracks ); rtouts(")");
#endif

	text_to_num( s, &dwTrack );

#ifdef NO_C_STDLIB
	rtouts("\nProgramListEntry ("); rtoutdwx(dwTrack); rtouts(" )");
#endif
	
	//PM_SetProgramListEntry(gmsm.iItemNum, (WORD) dwTrack );

	if ( dwTrack )
	  enable_next_item();
	
}


#define ADD_MSS_ITEM_NUM(_mssItemNum_)	  MS_add_item(dialog_box, (MS_WIDGET *)&_mssItemNum_, 0)

static void init_list(void)
{
  int iItemNum;
  WORD wProgramListSize;
#ifdef D_ROVER
#else
  MS_WIDGET *pWidget;
  MS_POS  mspos;
#endif

  wProgramListSize = mode_get_private_program_size();

#if 1
  ADD_MSS_ITEM_NUM(mssItemNum1);
  ADD_MSS_ITEM_NUM(mssItemNum2);
  ADD_MSS_ITEM_NUM(mssItemNum3);
  ADD_MSS_ITEM_NUM(mssItemNum4);
  ADD_MSS_ITEM_NUM(mssItemNum5);
  ADD_MSS_ITEM_NUM(mssItemNum6);
  ADD_MSS_ITEM_NUM(mssItemNum7);
  ADD_MSS_ITEM_NUM(mssItemNum8);
  ADD_MSS_ITEM_NUM(mssItemNum9);
  ADD_MSS_ITEM_NUM(mssItemNum10);
  ADD_MSS_ITEM_NUM(mssItemNum11);
  ADD_MSS_ITEM_NUM(mssItemNum12);
  ADD_MSS_ITEM_NUM(mssItemNum13);
  ADD_MSS_ITEM_NUM(mssItemNum14);
  ADD_MSS_ITEM_NUM(mssItemNum15);
  ADD_MSS_ITEM_NUM(mssItemNum16);
#endif //

#ifdef D_ROVER
  gmsm.iLastSelectableItemNum = 0;
#else
  FOR_ALL_ITEMS(iItemNum)
#endif // D_ROVER
  {
	if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
	{
#ifdef D_ROVER
	  gmsm.mseTitleRover = MS_create_edit((MS_POS *)&dont_care_pos, i_color, NULL, title_action, MAX_TITLE_DIGITS, MS_HOT_SPOT);
	  init_title_edit( gmsm.mseTitleRover, 0 );
#else
	  // Create title/chapter edit items
	  mspos.x = title_pos_x( iItemNum );
	  mspos.y = title_pos_y( iItemNum );
	  mspos.w = MSM_TITLE_WIDTH;
	  mspos.h = MS_LINE_HEIGHT;
	  strcpy(gmsm.sz_title[iItemNum],"--");
	  gmsm.mseTitle[iItemNum] = MS_create_edit(&mspos, i_color, gmsm.sz_title[iItemNum], title_action, MAX_TITLE_DIGITS, MS_HOT_SPOT);
	  pWidget = (MS_WIDGET *) gmsm.mseTitle[iItemNum];
	  pWidget->user_op = title_override_user_op;
	  MS_add_item(dialog_box, pWidget, (iItemNum == 0));
	  if ( iItemNum > wProgramListSize )
	  {
		SET_NONSELECTABLE((MS_STATIC *) pWidget);
	  }
#endif // D_ROVER

#ifdef D_ROVER
	  gmsm.mseChapterRover = MS_create_edit((MS_POS *)&dont_care_pos, i_color, NULL, chapter_action, MAX_CHAPTER_DIGITS, MS_HOT_SPOT);
	  init_chapter_edit(gmsm.mseChapterRover, 0);
#else
	  mspos.x = chapter_pos_x( iItemNum );
	  mspos.y = chapter_pos_y( iItemNum );
	  mspos.w = MSM_CHAPTER_WIDTH;
	  mspos.h = MS_LINE_HEIGHT;
	  gmsm.mseChapter[iItemNum] = MS_create_edit(&mspos, i_color, gmsm.sz_chapter[iItemNum], chapter_action, MAX_CHAPTER_DIGITS, MS_HOT_SPOT);
	  strcpy(gmsm.sz_chapter[iItemNum],"--");
	  pWidget = (MS_WIDGET *) gmsm.mseChapter[iItemNum];
	  pWidget->user_op = chapter_override_user_op;
	  MS_add_item(dialog_box, pWidget, 0);
	  if ( iItemNum > wProgramListSize )
	  {
		SET_NONSELECTABLE((MS_STATIC *) pWidget);
	  }
#endif // D_ROVER
	}
	else
	{
	  // Create track edit item
#ifdef D_ROVER
	  gmsm.mseTrackRover = MS_create_edit((MS_POS *)&dont_care_pos, i_color, NULL, track_action, MAX_TRACK_NUMBER_DIGITS, MS_HOT_SPOT);
	  init_track_edit(gmsm.mseTrackRover, 0);
#else
	  mspos.x = track_pos_x( iItemNum );
	  mspos.y = track_pos_y( iItemNum );
	  mspos.w = MSM_TRACK_NUMBER_WIDTH;
	  mspos.h = MS_LINE_HEIGHT;
	  strcpy(gmsm.sz_track[iItemNum],"---");
	  gmsm.mseTrack[iItemNum] = MS_create_edit(&mspos, i_color, gmsm.sz_track[iItemNum], track_action, MAX_TRACK_NUMBER_DIGITS, MS_HOT_SPOT);
	  pWidget = (MS_WIDGET *) gmsm.mseTrack[iItemNum];
	  pWidget->user_op = track_override_user_op;
	  MS_add_item(dialog_box, pWidget, (iItemNum == 0));//AW0111:change from 0 to 1
	  if ( iItemNum > wProgramListSize )
	  {
		SET_NONSELECTABLE((MS_STATIC *) pWidget);
	  }
#endif // D_ROVER
	} // if ( g_disc_type ... )

#ifdef D_ROVER
  } //
#else
  } // FOR_ALL_ITEMS
#endif // D_ROVER

} // init_list

#ifdef D_ROVER
static void mode_init_edit(MS_EDIT *msEdit, int iItemNum)
{
  if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
  {
	if ( msEdit == gmsm.mseTitleRover )
	  init_title_edit( msEdit, iItemNum );
	if ( msEdit == gmsm.mseChapterRover )
	  init_chapter_edit( msEdit, iItemNum );
  }
  else
  {
	if( msEdit == gmsm.mseTrackRover )
	  init_track_edit( msEdit, iItemNum );
  }
}


#define FOCUSED_WIDGET(_msDialog_)	  (_msDialog_)->pwli_focus->widget

// Defocus the current item in a dialog
MS_WIDGET *defocus_item(MS_DIALOG *msDialog)
{
  MS_WIDGET *focusWidget= FOCUSED_WIDGET(msDialog);
  
  MS_display(focusWidget);

  return focusWidget;
}

void move_to_item( MS_EDIT *msEdit, int iItemNum )
{
  MS_WIDGET *widget = (MS_WIDGET *) msEdit;
  mode_init_edit(msEdit, iItemNum);
  widget->user_op( widget, MS_UOP_DISPLAY, 1);

  // We must do this because the above user_op doesn't do it for us
  MS_change_focus((MS_DIALOG *) widget->parent, widget);

  gmsm.iItemNum = iItemNum;
}

BOOL is_valid_entry( MS_WIDGET *msWidget )
{
  DWORD dw;
  BOOL bValid;
  
  if ( msWidget == (MS_WIDGET *) gmsm.mseTitleRover )
  {
	  title_rover=1;
	bValid = is_valid_title( &dw );
  }
  else
  if ( msWidget == (MS_WIDGET *) gmsm.mseChapterRover )
  {
	  chapter_rover=1;
	  is_valid_title( &dw );
	bValid = is_valid_chapter( dw, NULL );
  }

  else
  if ( msWidget == (MS_WIDGET *) gmsm.mseTrackRover )
	bValid = is_valid_track( NULL );

  if ( !bValid )
	msWidget->user_op( msWidget, MS_UOP_CLEAR, 1 );

  if ( bValid && (msWidget == (MS_WIDGET *) gmsm.mseTitleRover) )
  {
	  title_rover=1;
	bValid = is_valid_chapter( dw, NULL );
	if ( !bValid )
	{
	  init_title_edit( gmsm.mseTitleRover, gmsm.iItemNum );
	  msWidget = (MS_WIDGET *) gmsm.mseTitleRover;
	  msWidget->user_op( msWidget, MS_UOP_CLEAR, 0 );
	  init_chapter_edit( gmsm.mseChapterRover, gmsm.iItemNum );
	  msWidget = (MS_WIDGET *) gmsm.mseChapterRover;
	  msWidget->user_op( msWidget, MS_UOP_CLEAR, 0 );
	 
	  bValid = TRUE;
	}
  }
		title_rover=0;
		chapter_rover=0;
  return bValid;
}

//
// Handle an UP key in the program dialog
//
// -- Move to the title/chapter/track on the line above, when possible
//
MS_UOP handle_up( MS_WIDGET *mswDialog, MS_UOP uop, char param )
{
  int iItemNum = gmsm.iItemNum;
  MS_DIALOG *msDialog = (MS_DIALOG *) mswDialog;
  MS_WIDGET *focusWidget;
  direction=UP_DIRECTION;//AW0921
  if ( !is_valid_entry(FOCUSED_WIDGET(msDialog)) )
  {
    direction=DOWN_DIRECTION;//AW0921
  	uop = MS_UOP_NOP;
  }
  else
  {
//AW0117:Adds bigger than 0 test to prevent to the invlid pos
    if(iItemNum==0||iItemNum==4||iItemNum==8||iItemNum==12)
    {
		uop=MS_UOP_NOP;
        return;
    }
	if ( (iItemNum > 0) && ( item_pos_y(iItemNum - 1) < item_pos_y(iItemNum) )&&item_pos_y(iItemNum)>0 )
	{
	  // Defocus the current item
	  focusWidget = defocus_item(msDialog);

	  // Make the roving widget represent the new item
	  move_to_item((MS_EDIT *)focusWidget, iItemNum - 1);
	  uop = MS_UOP_NOP;
	}
  }
  
  return uop;
}

//
// Handle a DOWN key in the program dialog
//
// -- Move to the title/chapter/track on the line below, when possible
//
MS_UOP handle_down( MS_WIDGET *mswDialog, MS_UOP uop, char param )
{
  int iItemNum = gmsm.iItemNum;
  MS_WIDGET *focusWidget;
  MS_DIALOG *msDialog = (MS_DIALOG *) mswDialog;
  
  if ( !is_valid_entry(FOCUSED_WIDGET(msDialog)) )
  	uop = MS_UOP_NOP;
  else
  {
	if ( (iItemNum < (MAX_DISPLAY_ITEMS - 1)) &&
#ifdef DISABLE_SMART_SELECTABLE
		((iItemNum + 1) <= gmsm.iLastSelectableItemNum) &&
#endif // DISABLE_SMART_SELECTABLE
		(item_pos_y(iItemNum + 1) > item_pos_y(iItemNum)) &&item_pos_y(iItemNum)<MS_LINE_3)
	{
	  // Defocus the current item
	  focusWidget = defocus_item(msDialog);

	  // Make the roving widget represent the new item
	  move_to_item( (MS_EDIT *)focusWidget, iItemNum + 1);
	  uop = MS_UOP_NOP;
	}
  }

  return uop;
}

//
// Handle a LEFT key in the program dialog
//
// If focus is:
//
//	  track #iItemNum: move to track #(iItemNum - ITEMS_PER_COLUMN) when possible
//
//	  title #iItemNum: move to chapter #(iItemNum - ITEMS_PER_COLUMN) when possible
//	  chapter #iItemNum: move to title #iItemNum
//
MS_UOP handle_left( MS_WIDGET *mswDialog, MS_UOP uop, char param )
{
  MS_DIALOG *msDialog = (MS_DIALOG *) mswDialog;
  int iItemNum = gmsm.iItemNum;
  MS_WIDGET *focusWidget;
    direction=LEFT_DIRECTION;//AW0921
  focusWidget = FOCUSED_WIDGET( msDialog );
  if ( !is_valid_entry(focusWidget) )
  {
  	  direction=DOWN_DIRECTION;//AW0921
      uop = MS_UOP_NOP;
  }
  else
  {
	if ( focusWidget == (MS_WIDGET *) gmsm.mseChapterRover )
	{
	  defocus_item(msDialog);
	  move_to_item(gmsm.mseTitleRover, iItemNum);
	}
	else

⌨️ 快捷键说明

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