+ p_type = p_command[5] & 0x0F;
+ switch ( p_type )
+ {
+ case 0x02:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Title Entry", p_command[4], p_command[3]);
+ break;
+ case 0x03:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Root Menu", p_command[4], p_command[3]);
+ break;
+ case 0x04:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Subpicture Menu", p_command[4], p_command[3]);
+ break;
+ case 0x05:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Audio Menu", p_command[4], p_command[3]);
+ break;
+ case 0x06:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Angle Menu", p_command[4], p_command[3]);
+ break;
+ case 0x07:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) Chapter Menu", p_command[4], p_command[3]);
+ break;
+ default:
+ msg_Dbg( &sys.demuxer, "JumpSS VTSM (vts %d, ttn %d) <unknown>", p_command[4], p_command[3]);
+ break;
+ }
+
+ p_chapter = sys.BrowseCodecPrivate( 1, MatchVTSMNumber, &p_command[4], 1, p_segment );
+
+ if ( p_segment != NULL && p_chapter != NULL )
+ {
+ // find the title in the VTS
+ p_chapter = p_chapter->BrowseCodecPrivate( 1, MatchTitleNumber, &p_command[3], 1 );
+ if ( p_chapter != NULL )
+ {
+ // find the specified menu in the VTSM
+ p_chapter = p_segment->BrowseCodecPrivate( 1, MatchPgcType, &p_type, 1 );
+ if ( p_chapter != NULL )
+ {
+ sys.JumpTo( *p_segment, p_chapter );
+ f_result = true;
+ }
+ }
+ else
+ msg_Dbg( &sys.demuxer, "Title (%d) does not exist in this VTS", p_command[3] );
+ }
+ else
+ msg_Dbg( &sys.demuxer, "DVD Domain VTS (%d) not found", p_command[4] );