#ifndef BURN__STRUCTURE_H
#define BURN__STRUCTURE_H

struct isrc
{
	int has_isrc;
	char country[2];	/* each must be 0-9, A-Z */
	char owner[3];		/* each must be 0-9, A-Z */
	unsigned char year;	/* must be 0-99 */
	unsigned int serial;	/* must be 0-99999 */
};

struct burn_track
{
	int refcnt;
	struct burn_toc_entry *entry;
	unsigned char indices;
	/* lba address of the index */
	unsigned int index[99];
	/** number of 0 bytes to write before data */
	int offset;
	/** how much offset has been used */
	int offsetcount;
	/** Number of zeros to write after data */
	int tail;
	/** how much tail has been used */
	int tailcount;
	/** 1 means Pad with zeros, 0 means start reading the next track */
	int pad;
	/** Data source */
	struct burn_source *source;
	/** End of Source flag */
	int eos;
	/** The audio/data mode for the entry. Derived from control and
	    possibly from reading the track's first sector. */
	int mode;
	/** The track contains interval one of a pregap */
	int pregap1;
	/** The track contains interval two of a pregap */
	int pregap2;
	/** The track contains a postgap */
	int postgap;
	struct isrc isrc;
};

struct burn_session
{
	unsigned char firsttrack;
	unsigned char lasttrack;
	int hidefirst;
	unsigned char start_m;
	unsigned char start_s;
	unsigned char start_f;
	struct burn_toc_entry *leadout_entry;

	int tracks;
	struct burn_track **track;
	int refcnt;
};

struct burn_disc
{
	int sessions;
	struct burn_session **session;
	int refcnt;
};

int burn_track_get_shortage(struct burn_track *t);

#endif /* BURN__STRUCTURE_H */