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

📄 mode_m.c

📁 Zoran VP2K731 DVD源代码,极具参考价值!
💻 C
📖 第 1 页 / 共 4 页
字号:
  }
}


static const MS_STATIC mssMenuTitle = {
	{
	0,
	ALIGN_LEFT,
	I_COLOR,
	{16, MS_LINE_0, 200, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	},
	(void *)S_PLAY_MODE
};

//dm
#ifdef D_PROGRAM_SingleKey
//AW0115:according to nintaus cahng to program input
static const MS_STATIC mssProgramInput = {
	{
	  0,
	  ALIGN_LEFT,
	  I_COLOR,
	  {16, MS_LINE_0, 200, MS_LINE_HEIGHT},
	  NO_PARENT,
	  static_user_op,
	},
	(void *) S_PROGRAM
};
#endif		//dm

static const MS_STATIC mssMode = {
  {
	0,
	ALIGN_LEFT,
	I_COLOR,
	{16, MS_LINE_1, 200, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
	
  },

  (void *)S_MODE
};

static const MS_STATIC mssRepeat = {
  {
	0,
	ALIGN_LEFT,
	I_COLOR,
	{16, MS_LINE_2, 200, MS_LINE_HEIGHT},
	NO_PARENT,
	static_user_op,
  },

  (void *)S_REPEAT
};
static const MS_BUTTON msbClearAll =
{
  // MS_STATIC
  {
	// MS_WIDGET
	{
	  MS_HOT_SPOT,
	  ALIGN_LEFT,
	  BUTTON_COLOR,
	  {200, MS_LINE_3+MS_LINE_1, 128, MS_LINE_HEIGHT},
	  NO_PARENT,
	  button_user_op
	},

	(void *) S_CLEAR_ALL
  },

  clear_all_action
};
//AW0227:add this public function to clear the program play mode
void clear_program(void)
{
    clear_all_action();
}
static void clear_all_action(void)
{
  int iItemNum;
//AW0515<<<<:delete this line
#if 0
//  if( mode_get_private_program_size())
//  PM_InitializeProgramList();
#endif
    FOR_ALL_ITEMS(iItemNum)
  {
	if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
	{
	  ClearTitleItem(iItemNum);
	  ClearChapterItem(iItemNum);
	}
	else
	{
	  ClearTrackItem(iItemNum);
	}
  }

#ifdef D_ROVER
  if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
  {
	gmsm.iItemNum = 0;
	init_title_edit(gmsm.mseTitleRover, gmsm.iItemNum);
//AW0117:do not change focus pos	
	init_chapter_edit(gmsm.mseChapterRover, gmsm.iItemNum);
//	MS_change_focus((MS_DIALOG *) ((MS_WIDGET *) gmsm.mseTitleRover)->parent, (MS_WIDGET *) gmsm.mseTitleRover);
  }
  else
  {
	init_track_edit(gmsm.mseTrackRover, gmsm.iItemNum);
//AW0117:do not change foucus pos	
//	MS_change_focus((MS_DIALOG *) ((MS_WIDGET *) gmsm.mseTrackRover)->parent, (MS_WIDGET *) gmsm.mseTrackRover);
  }
#endif // D_ROVER
//AW0117:when all the item been cleared just redisplay them and set the iItenNum  to 0
if(g_disc_type==DEC_DISC_TYPE_DVD_VIDEO||g_disc_type==DEC_DISC_TYPE_DVD_AUDIO)
{
    display_titles(0);
    display_chapters();
}
else
{
    display_tracks(0);
}

    	gmsm.iItemNum = 0;
#ifdef D_ROVER
	if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
	{
	  init_title_edit(gmsm.mseTitleRover, gmsm.iItemNum);
	  init_chapter_edit(gmsm.mseChapterRover, gmsm.iItemNum);
	}
	else
	{
	  init_track_edit(gmsm.mseTrackRover, gmsm.iItemNum);
	}
#endif // D_ROVER
//AW0122:inform the core that the mode already changed here
  mode_set_private_program_size(0);
//AW0122:add this line to change the mode to normal  
//AW0313:if there is no program item just skip it
  PM_SetPlaybackMode((BYTE) PM_PLAYBACK_NORMAL);
	ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);

}


DWORD calc_title_chapter_entry( iItemNum )
{
  char *sz;
  DWORD dw;
  WORD wTitle;
  
  sz = gmsm.sz_title[iItemNum];
  
#ifdef NO_C_STDLIB
  dbouts("\nTitle is "); dbouts(sz);
#endif

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

  sz = gmsm.sz_chapter[iItemNum];

  text_to_num( sz, &dw);
  dw = (wTitle << 8) | (BYTE) dw;

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

//  if ( dw == 0 )
  if ( wTitle == 0 )
	dw = (DWORD) W_INVALID_PROGRAMLISTENTRY;
  
  return dw;
}

DWORD calc_track_entry( iItemNum )
{
  char *sz;
  DWORD dwTrack;
  
  sz = gmsm.sz_track[iItemNum];
  
#ifdef NO_C_STDLIB
  dbouts("\nTrack is "); dbouts(sz);
#endif

  text_to_num( sz, &dwTrack );

  if (( g_disc_type != DEC_DISC_TYPE_CDDA ) && dwTrack)	//dm
	  dwTrack++;										//dm
#ifdef NO_C_STDLIB
  dbouts(" ProgramListEntry ("); dboutdwx(dwTrack); dbouts(" )");
#endif

  if ( dwTrack == 0 )
	dwTrack = (DWORD) W_INVALID_PROGRAMLISTENTRY;
  
  return dwTrack;
}

void mode_send_program(void)
{
  int iItemNum;
  DWORD dw = 0;
  unsigned char list_init=0;
  mode_set_private_program_size(0);
  if(g_disc_type==DEC_DISC_TYPE_DVD_VIDEO) //Note, It is not correct.
  PM_InitializeProgramList();
  FOR_ALL_ITEMS(iItemNum)
  {
	if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
	  dw = calc_title_chapter_entry(iItemNum);
	else
	  dw = calc_track_entry(iItemNum);

	if ( ((DWORD) dw) != W_INVALID_PROGRAMLISTENTRY )
	{
	//AW0313:if the discc is not dvd video disc then only when the item is no null we will initialize the 
	//Porgram list otherwise we jsut skip it
		if(g_disc_type!=DEC_DISC_TYPE_DVD_VIDEO&&(list_init==0))
		{
		  list_init=1;
		   PM_InitializeProgramList();
		 }  
  

		  mode_increment_private_program_size();
#ifdef NO_C_STDLIB
			  dbouts("Itemnum :");  dbouti(iItemNum); dbouts(" EntryNumber:"); dboutdwx(dw);
#endif
		 	 PM_SetProgramListEntry( mode_get_private_program_size(), (WORD) dw );
	}
	else
	{
	  if ( g_disc_type == DEC_DISC_TYPE_DVD_VIDEO )
	  {
		ClearTitleItem(iItemNum);
		ClearChapterItem(iItemNum);
	  }
	  else
	  {
		ClearTrackItem(iItemNum);
	  }
	}
  } 

  if(g_disc_type==DEC_DISC_TYPE_DVD_VIDEO||g_disc_type==DEC_DISC_TYPE_DVD_AUDIO)
  	{
  		if(mode_get_private_program_size())
  		{
  			PM_SetPlaybackMode((BYTE)PM_PLAYBACK_PROGRAM);
		    ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
				g_ui_bModePending = PM_PLAYBACK_PROGRAM;
  		}
//AW0515:when the proglist is 0 the switch to normal playback mode
			else
			{
  			PM_SetPlaybackMode((BYTE)PM_PLAYBACK_NORMAL);
	    	ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
	    }
//AW0515>>>>>>
	}
    else  if ( mode_get_private_program_size() )
    {
	    if ( (g_disc_type == DEC_DISC_TYPE_VCD) || (g_disc_type == DEC_DISC_TYPE_SVCD)||(g_disc_type==DEC_DISC_TYPE_CDDA) )
	    {
		    PM_SetPBC(FALSE);
	        gns.svcd.m_bIsUsingPSD= FALSE;
	    }
    	PM_SetPlaybackMode((BYTE)PM_PLAYBACK_PROGRAM);
			ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
			g_ui_bModePending = PM_PLAYBACK_PROGRAM;
  }
//AW0515:when the proglist is 0 the switch to normal playback mode
	else
	{
		PM_SetPlaybackMode((BYTE)PM_PLAYBACK_NORMAL);
 		ie_send(IE_CORE_SEAMLESS_MODE_CHANGE);
  }
//AW0515>>>>>>

 /* else  
  
  {
		if ( (g_disc_type == DEC_DISC_TYPE_VCD) || (g_disc_type == DEC_DISC_TYPE_SVCD)||(g_disc_type==DEC_DISC_TYPE_CDDA) )
	    {
		    PM_SetPBC(FALSE);
	        gns.svcd.m_bIsUsingPSD= FALSE;
	    }
		  PM_SetPlaybackMode((BYTE)PM_PLAYBACK_NORMAL);

		g_b_mode_pending = PM_PLAYBACK_NORMAL;
  }*/

//AW0130:move out  let it inform the core to change the play mode  
 

}

static void play_program_action(void)
{
#ifdef D_PICTURE_CD_ENABLED
  if (g_disc_type == DEC_DISC_TYPE_JPG)	//DM1026
	b_enable_auto_slideshow = TRUE;	//Get into slide show mode
#endif
  g_ms_bMustClose = TRUE;
  mode_send_program();
//  if( mode_get_private_program_size())
//	{
//			g_in_full_stop=TRUE;
//	}
//	else g_in_full_stop=FALSE; 
}


static const MS_BUTTON msbPlayProgram =
{
  // MS_STATIC
  {
	// MS_WIDGET
	{
	  MS_HOT_SPOT,
	  ALIGN_LEFT,
	  BUTTON_COLOR,
	  //Aw0116:add one more line here
	  {16, MS_LINE_3+MS_LINE_1, 168, MS_LINE_HEIGHT},
	  NO_PARENT,
	  button_user_op,
	},

	(void *) S_PLAY_PROGRAM
  },

  play_program_action
};

static void layout (void)
{

	go_CurrentLayout.m_bBigMemMap = TRUE;
	go_CurrentLayout.m_cPixRes = 0;
	go_CurrentLayout.m_wOriginX = 0;
#ifdef FONT32X24  //DM0605
	go_CurrentLayout.m_wOriginY = MS_LINE_2;
#else
	go_CurrentLayout.m_wOriginY = 60;
#endif
	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);

	rtouts("\nMODE STATIC MENU LAYOUT");
}

static void on_mode_static_close(void)
 {
 	int iItemNum;
 	
#ifdef NO_C_STDLIB
  rtouts("\nMode static menu screen closed");
#endif

	SAFELY_DELETE(choice1)

	SAFELY_DELETE(choice2)

	gmsm.wState = !MSM_INITIALIZED;


}

static void enable_next_item(void)
{
  if ( gmsm.iItemNum < MAX_DISPLAY_ITEMS - 1 )
#ifdef D_ROVER
	gmsm.iLastSelectableItemNum = gmsm.iItemNum + 1;
#else
  {
	SET_SELECTABLE((MS_STATIC *) gmsm.mseTitle[gmsm.iItemNum + 1]);
	SET_SELECTABLE((MS_STATIC *) gmsm.mseChapter[gmsm.iItemNum + 1]);
  }
#endif // D_ROVER
}

#ifdef D_ROVER
#define enable_next_track	enable_next_item
#else
static void enable_next_track(void)
{
  if ( gmsm.iItemNum < MAX_DISPLAY_ITEMS - 1 )
  {
	SET_SELECTABLE((MS_STATIC *) gmsm.mseTrack[gmsm.iItemNum + 1]);
  }
}
#endif // D_ROVER

#define VALID_ITEM	  ( (strcmp( (char *) gmsm.sz_title[gmsm.iItemNum], "--" ) != 0) &&	  \
						(strcmp( (char *) gmsm.sz_chapter[gmsm.iItemNum], "--" ) != 0) )

static MS_UOP title_override_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
	MS_EDIT *ms_edit = (MS_EDIT *) widget;
	
	if ( (uop == MS_UOP_ENTER) || (uop == MS_UOP_CLEAR) || (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
	{
	  gmsm.iItemNum = title_item_number(widget);
	}
    //AW0117:add iItemNum test when move up
    if((gmsm.iItemNum==0||gmsm.iItemNum==4||gmsm.iItemNum==8||gmsm.iItemNum==12)&&uop==MS_UOP_UP)
    {
        uop=MS_UOP_NOP;
        return;
    }    
//AW0117:end

	// Allow access to next item when leaving a valid one
	if ( uop == MS_UOP_DOWN )
	{
	  if VALID_ITEM
	  {
		enable_next_item();
	  }
	}

	uop = edit_user_op(widget, uop, param);
	
	return uop;
}

static MS_UOP chapter_override_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
	MS_EDIT *ms_edit = (MS_EDIT *) widget;
	
	if ( (uop == MS_UOP_ENTER) || (uop == MS_UOP_CLEAR) || (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
	{
	  gmsm.iItemNum = chapter_item_number(widget);
	}
//AW0117:add iItemNum test when move up
    if((gmsm.iItemNum==0||gmsm.iItemNum==4||gmsm.iItemNum==8||gmsm.iItemNum==12)&&uop==MS_UOP_UP)
    {
        uop=MS_UOP_NOP;
        return;
    }    
//AW0117:end

	// Allow access to next item when leaving a valid one
	if ( (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
	{
	  if VALID_ITEM
	  {
		enable_next_item();
	  }
	}

	uop = edit_user_op(widget, uop, param);
	
	return uop;
}

static MS_UOP track_override_user_op(MS_WIDGET *widget,MS_UOP uop,char param)
{
	MS_EDIT *ms_edit = (MS_EDIT *) widget;
	
	if ( (uop == MS_UOP_ENTER) || (uop == MS_UOP_CLEAR) || (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
	{
	  gmsm.iItemNum = track_item_number(widget);
	}
//AW0117:add test to prevent from move to inlvaid pos
    if((gmsm.iItemNum==0||gmsm.iItemNum==4||gmsm.iItemNum==8||gmsm.iItemNum==12)&&uop==MS_UOP_UP)
    {
        uop=MS_UOP_NOP;
        return;
    }    
//AW0117:end

	// Allow access to next item when leaving a valid one
	if ( (uop == MS_UOP_RIGHT) || (uop == MS_UOP_DOWN) )
	{
	  if ( strcmp( (char *) gmsm.sz_track[gmsm.iItemNum], "---" ) != 0 )
	  {
		enable_next_track();
	  }
	}

	uop = edit_user_op(widget, uop, param);
	
	return uop;
}

BOOL is_empty_title( char *sz_title )
{
  return ( strcmp(sz_title, "--") == 0 );

⌨️ 快捷键说明

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