/* Class struct of libisoburn. Copyright 2007 Vreixo Formoso Lopes and Thomas Schmitt */ #ifndef Isoburn_includeD #define Isoburn_includeD /* <<< transition macro */ #define Libisoburn_no_fifO 1 /* for uint8_t */ #include struct isoburn { /* The libburn drive to which this isoburn object is related Most isoburn calls will use a burn_drive as object handle */ struct burn_drive *drive; /* -1= inappropriate media state detected 0= libburn multi-session media, resp. undecided yet 1= random access media */ int emulation_mode; /* Although rarely used, libburn can operate on several drives simultaneously. */ struct isoburn *prev; struct isoburn *next; /* --- My part --- */ /* Start address as given by image examination (bytes, not blocks) */ off_t min_start_byte; /* Aligned start address to be used for processing (counted in blocks) */ int nwa; /* Eventual freely fabricated isoburn_disc_get_status(). BURN_DISC_UNREADY means that normally emulated status is in effect. */ enum burn_disc_status fabricated_disc_status; #ifndef Libisoburn_no_fifO /* The fifo which is installed between track and libisofs burn_source */ struct burn_source *fifo; #endif /* ! Libisoburn_no_fifO */ /* Indicator wether the most recent burn run worked : -1 = undetermined, ask libburn , 0 = failure , 1 = success To be inquired by isoburn_drive_wrote_well() */ int wrote_well; /* --- Vreixo's part --- */ /* Buffered ISO head from media (should that become part of ecma119_read_opts ?) */ uint8_t target_iso_head[65536]; /* Libisofs image context */ IsoImage *image; #ifdef Libisoburn_no_fifO /* The burn source which transfers data from libisofs to libburn. It has its own fifo. */ struct burn_source *iso_source; #endif /* Libisoburn_no_fifO */ }; /* Creation and disposal function */ int isoburn_new(struct isoburn **objpt, int flag); int isoburn_destroy(struct isoburn **objpt, int flag); /* Eventual readers for public attributes */ /* ( put into separate .h file then ) */ int isoburn_get_emulation_mode(struct isoburn *o, int *pt, int flag); int isoburn_get_target_volset(struct isoburn *o, IsoImage **pt, int flag); /* List management */ int isoburn_get_prev(struct isoburn *o, struct isoburn **pt, int flag); int isoburn_get_next(struct isoburn *o, struct isoburn **pt, int flag); int isoburn_destroy_all(struct isoburn **objpt, int flag); int isoburn_link(struct isoburn *o, struct isoburn *link, int flag); int isoburn_count(struct isoburn *o, int flag); int isoburn_by_idx(struct isoburn *o, int idx, struct isoburn **pt, int flag); int isoburn_find_by_drive(struct isoburn **pt, struct burn_drive *d, int flag); /* Non API inner interfaces */ /* Calls from burn_wrap.c into isofs_wrap.c */ int isoburn_start_emulation(struct isoburn *o, int flag); int isoburn_invalidate_iso(struct isoburn *o, int flag); /* Calls from isofs_wrap.c into burn_wrap.c */ /** Get an eventual isoburn object which is wrapped around the drive. @param pt Eventually returns a pointer to the found object. It is allowed to become NULL if return value is -1 or 0. In this case, the drive is a genuine libburn drive with no emulation activated by isoburn. @param drive The drive to be searched for @param flag unused yet @return -1 unsuitable media, 0 generic media, 1 emulated media. */ int isoburn_find_emulator(struct isoburn **pt, struct burn_drive *drive, int flag); /** Set the start address for an emulated add-on session. The value will be rounded up to the alignment necessary for the media. The aligned value will be divided by 2048 and then put into o->nwa . @param o The isoburn object to be programmed. @param value The start address in bytes @param flag unused yet @return <=0 is failure , >0 success */ int isoburn_set_start_byte(struct isoburn *o, off_t value, int flag); /** Get a data source suitable for read from a drive using burn_read_data() function. @param d drive to read from. Must be grabbed. @return the data source, NULL on error. Must be freed with libisofs iso_data_source_unref() function. Note: this doesn't release the drive. */ IsoDataSource * isoburn_data_source_new(struct burn_drive *d); #endif /* Isoburn_includeD */