#!/usr/bin/env python

import pydvdread
import sys

def bcdtoint(bcd):
	base = 1
	ret = 0
	while bcd:
		assert bcd % 16 < 10, 'invalid bcd digit in: %#x' % bcd
		ret += bcd % 16 * base
		base *= 10
		bcd /= 16
	return ret

def strdvdtime(tobj):
	return '%x:%02x:%02x.%02x' % (tobj.hour, tobj.minute, tobj.second,
		    tobj.frame_u & 0x3f)

def dumppgc(j):
	print 'nr_of_progs:', j.nr_of_programs
	print 'nr_of_cells:', j.nr_of_cells
	print 'time:', strdvdtime(j.playback_time)
	for k in range(j.nr_of_programs):
		print 'program_map[%d]:' % k, pydvdread.uchar_getitem(
		    j.program_map, k)
	for k in range(j.nr_of_cells):
		l = pydvdread.cell_playback_getitem(j.cell_playback, k)
		print 'cell_playback[%d]:' % k, '%d-%d' % (l.first_sector,
		    l.last_sector), strdvdtime(l.playback_time)

try:
	dvd = pydvdread.DVD('/dev/null')
except ValueError:
	pass
except:
	assert 0, 'Failed to fail.'

dvd = pydvdread.DVD('/dev/rdisk1')
print dvd, ', '.join(map(repr, dvd))
try:
	print `dvd[(5, 5)]`
except IndexError:
	pass
except:
	assert 0, 'Failed to fail.'

print 'vmg'
ifo = dvd.getifo(0)
assert ifo.txtdt_mgi is None
print 'ifo:', `ifo`
print '# vts:', ifo.vmgi_mat.vmg_nr_of_title_sets
print 'provider:', `ifo.vmgi_mat.provider_identifier`
print 'nr_of_srpts:', ifo.tt_srpt.nr_of_srpts
for i in range(ifo.tt_srpt.nr_of_srpts):
	print `ifo.tt_srpt.title`
	j = pydvdread.title_info_getitem(ifo.tt_srpt.title, i)
	print 'playbacktype:', j.pb_ty.multi_or_random_pgc_title, j.pb_ty.jlc_exists_in_cell_cmd, j.pb_ty.jlc_exists_in_prepost_cmd, j.pb_ty.jlc_exists_in_button_cmd, j.pb_ty.jlc_exists_in_tt_dom, j.pb_ty.chapter_search_or_play, j.pb_ty.title_or_time_play
	print '# angles:', j.nr_of_angles
	print '# ptts:', j.nr_of_ptts
	print 'parental id:', j.parental_id
	print 'title set #:', j.title_set_nr
	print 'vts ttn:', j.vts_ttn

for ifonum in range(ifo.vmgi_mat.vmg_nr_of_title_sets):
	print 'vts'
	ifo = dvd.getifo(1 + ifonum)
	print 'ifo:', `ifo`
	print dir(ifo)
	print '# of srpts:', ifo.vts_ptt_srpt.nr_of_srpts
	for i in range(ifo.vts_ptt_srpt.nr_of_srpts):
		print 'title #:', i
		j = pydvdread.ttu_getitem(ifo.vts_ptt_srpt.title, i)
		print '# of ptts:', j.nr_of_ptts
		for i in range(j.nr_of_ptts):
			k = pydvdread.ptt_info_getitem(j.ptt, i)
			print 'pgcn:', k.pgcn
			print 'pgn:', k.pgn

	print 'pgc:', `ifo.vts_pgcit.nr_of_pgci_srp`
	for i in range(ifo.vts_pgcit.nr_of_pgci_srp):
		dumppgc(pydvdread.pgci_srp_getitem(ifo.vts_pgcit.pgci_srp, i).pgc)