--- /dev/null
+#include "libzmpeg3.h"
+
+ztitle_t::
+title_t(zmpeg3_t *zsrc, char *fpath)
+{
+ fs = new fs_t(zsrc, fpath);
+ src = zsrc;
+}
+
+ztitle_t::
+title_t(zmpeg3_t *zsrc)
+{
+ fs = new fs_t(*zsrc->fs);
+ src = zsrc;
+}
+
+ztitle_t::
+~title_t()
+{
+ delete fs;
+ if( cell_table_allocation )
+ delete [] cell_table;
+}
+
+ztitle_t::
+title_t(ztitle_t &title)
+{
+ src = title.src;
+ fs = new fs_t(*title.fs);
+ total_bytes = title.total_bytes;
+ start_byte = title.start_byte;
+ end_byte = title.end_byte;
+
+ if( title.cell_table_size && title.cell_table ) {
+ cell_table_allocation = title.cell_table_allocation;
+ cell_table = new cell_t[cell_table_allocation];
+ cell_table_size = title.cell_table_size;
+ for( int i=0; i<cell_table_size; ++i ) {
+ cell_table[i] = title.cell_table[i];
+ }
+ }
+}
+
+int ztitle_t::
+dump_title()
+{
+ printf("path %s "_LX"-"_LX" cell_table_size %d\n",
+ fs->path, start_byte, end_byte, cell_table_size);
+ for( int i=0; i<cell_table_size; ++i ) {
+ printf(_LX"-"_LX" "_LX"-"_LX"\n",
+ cell_table[i].title_start, cell_table[i].title_end,
+ cell_table[i].program_start, cell_table[i].program_end);
+ }
+ return 0;
+}
+
+void ztitle_t::
+extend_cell_table()
+{
+ if( !cell_table || cell_table_allocation <= cell_table_size ) {
+ long new_allocation = cell_table_allocation ?
+ 2*cell_table_size : 64;
+ cell_t *new_table = new cell_t[new_allocation];
+ for( int i=0; i<cell_table_size; ++i )
+ new_table[i] = cell_table[i];
+ delete [] cell_table;
+ cell_table = new_table;
+ cell_table_allocation = new_allocation;
+ }
+}
+
+void ztitle_t::
+new_cell(int cell_no, int64_t title_start, int64_t title_end,
+ int64_t program_start, int64_t program_end, int discontinuity)
+{
+ extend_cell_table();
+ cell_t *cell = &cell_table[cell_table_size];
+ cell->cell_no = cell_no;
+ cell->title_start = title_start;
+ cell->title_end = title_end;
+ cell->program_start = program_start;
+ cell->program_end = program_end;
+ cell->cell_time = -1.;
+ cell->discontinuity = discontinuity;
+ ++cell_table_size;
+}
+
+int ztitle_t::
+print_cells(FILE *output)
+{
+ if( cell_table ) {
+ for( int i=0; i<cell_table_size; ++i ) {
+ cell_t *cell = &cell_table[i];
+ fprintf(output, "REGION: "_LX"-"_LX" "_LX"-"_LX"\n",
+ cell->program_start, cell->program_end,
+ cell->title_start, cell->title_end);
+ }
+ }
+ return 0;
+}
+