Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 6f44afa6f3ab6654285944d888dcdfb9 > files > 21

libisoburn-devel-1.1.8-1.fc14.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libisoburn: libisoburn-1.1.8/libisoburn/libisoburn.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">libisoburn&#160;<span id="projectnumber">1.1.8</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">libisoburn-1.1.8/libisoburn/libisoburn.h</div>  </div>
</div>
<div class="contents">
<a href="libisoburn_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00002"></a>00002 <span class="comment">/*</span>
<a name="l00003"></a>00003 <span class="comment">  Lower level API definition of libisoburn.</span>
<a name="l00004"></a>00004 <span class="comment"></span>
<a name="l00005"></a>00005 <span class="comment">  Copyright 2007-2011 Vreixo Formoso Lopes &lt;metalpain2002@yahoo.es&gt;</span>
<a name="l00006"></a>00006 <span class="comment">                  and Thomas Schmitt &lt;scdbackup@gmx.net&gt;</span>
<a name="l00007"></a>00007 <span class="comment">  Provided under GPL version 2 or later.</span>
<a name="l00008"></a>00008 <span class="comment">*/</span>
<a name="l00009"></a>00009 <span class="comment"></span>
<a name="l00010"></a>00010 <span class="comment">/**                           Overview</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment">libisoburn is a frontend for libraries libburn and libisofs which enables</span>
<a name="l00013"></a>00013 <span class="comment">creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported</span>
<a name="l00014"></a>00014 <span class="comment">by libburn. This includes media like DVD+RW, which do not support multi-session</span>
<a name="l00015"></a>00015 <span class="comment">management on media level and even plain disk files or block devices.</span>
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">The price for that is thorough specialization on data files in ISO-9660</span>
<a name="l00018"></a>00018 <span class="comment">filesystem images. So libisoburn is not suitable for audio (CD-DA) or any</span>
<a name="l00019"></a>00019 <span class="comment">other CD layout which does not entirely consist of ISO-9660 sessions.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">Note that there is a higher level of API: xorriso.h. One should not mix it</span>
<a name="l00022"></a>00022 <span class="comment">with the API calls of libisoburn.h, libisofs.h, and libburn.h.</span>
<a name="l00023"></a>00023 <span class="comment"></span>
<a name="l00024"></a>00024 <span class="comment"></span>
<a name="l00025"></a>00025 <span class="comment">                          Connector functions</span>
<a name="l00026"></a>00026 <span class="comment"></span>
<a name="l00027"></a>00027 <span class="comment">libisofs and libburn do not depend on each other but share some interfaces</span>
<a name="l00028"></a>00028 <span class="comment">by which they can cooperate.</span>
<a name="l00029"></a>00029 <span class="comment">libisoburn establishes the connection between both modules by creating the</span>
<a name="l00030"></a>00030 <span class="comment">necessary interface objects and attaching them to the right places.</span>
<a name="l00031"></a>00031 <span class="comment"></span>
<a name="l00032"></a>00032 <span class="comment"></span>
<a name="l00033"></a>00033 <span class="comment">                          Wrapper functions </span>
<a name="l00034"></a>00034 <span class="comment"></span>
<a name="l00035"></a>00035 <span class="comment">The priciple of this frontend is that you may use any call of libisofs or</span>
<a name="l00036"></a>00036 <span class="comment">libburn unless it has a  isoburn_*()  wrapper listed in the following function</span>
<a name="l00037"></a>00037 <span class="comment">documentation.</span>
<a name="l00038"></a>00038 <span class="comment"></span>
<a name="l00039"></a>00039 <span class="comment">E.g. call isoburn_initialize() rather than iso_init(); burn_initialize();</span>
<a name="l00040"></a>00040 <span class="comment">and call isoburn_drive_scan_and_grab() rather than burn_drive_scan_and_grab().</span>
<a name="l00041"></a>00041 <span class="comment">But you may call  burn_disc_get_profile()  directly if you want to display</span>
<a name="l00042"></a>00042 <span class="comment">the media type.</span>
<a name="l00043"></a>00043 <span class="comment"></span>
<a name="l00044"></a>00044 <span class="comment">The wrappers will transparently provide the necessary emulations which</span>
<a name="l00045"></a>00045 <span class="comment">are appropriate for particular target drives and media states.</span>
<a name="l00046"></a>00046 <span class="comment">To learn about them you have to read both API descriptions: the one of</span>
<a name="l00047"></a>00047 <span class="comment">the wrapper and the one of the underlying libburn or libisofs call.</span>
<a name="l00048"></a>00048 <span class="comment"></span>
<a name="l00049"></a>00049 <span class="comment">Macros BURN_* and functions burn_*() are documented in &lt;libburn/libburn.h&gt;</span>
<a name="l00050"></a>00050 <span class="comment">Macros ISO_* and functions iso_*() are documented in &lt;libisofs/libisofs.h&gt;</span>
<a name="l00051"></a>00051 <span class="comment"></span>
<a name="l00052"></a>00052 <span class="comment"></span>
<a name="l00053"></a>00053 <span class="comment">                             Usage model</span>
<a name="l00054"></a>00054 <span class="comment"></span>
<a name="l00055"></a>00055 <span class="comment">There may be an input drive and an output drive. Either of them may be missing</span>
<a name="l00056"></a>00056 <span class="comment">with the consequence that no reading resp. writing is possible.</span>
<a name="l00057"></a>00057 <span class="comment">Both drive roles can be fulfilled by the same drive.</span>
<a name="l00058"></a>00058 <span class="comment"></span>
<a name="l00059"></a>00059 <span class="comment">Input can be a random access readable libburn drive:</span>
<a name="l00060"></a>00060 <span class="comment">  optical media, regular files, block devices.</span>
<a name="l00061"></a>00061 <span class="comment">Output can be any writeable libburn drive:</span>
<a name="l00062"></a>00062 <span class="comment">  writeable optical media in burner, writeable file objects (no directories).</span>
<a name="l00063"></a>00063 <span class="comment"></span>
<a name="l00064"></a>00064 <span class="comment">libburn demands rw-permissions to drive device file resp. file object.</span>
<a name="l00065"></a>00065 <span class="comment"></span>
<a name="l00066"></a>00066 <span class="comment">If the input drive provides a suitable ISO RockRidge image, then its tree</span>
<a name="l00067"></a>00067 <span class="comment">may be loaded into memory and can then be manipulated by libisofs API calls.</span>
<a name="l00068"></a>00068 <span class="comment">The loading is done by isoburn_read_image() under control of</span>
<a name="l00069"></a>00069 <span class="comment">struct isoburn_read_opts which the application obtains from libisoburn</span>
<a name="l00070"></a>00070 <span class="comment">and manipulates by the family of isoburn_ropt_set_*() functions.</span>
<a name="l00071"></a>00071 <span class="comment"></span>
<a name="l00072"></a>00072 <span class="comment">Writing of result images is controlled by libisofs related parameters</span>
<a name="l00073"></a>00073 <span class="comment">in a struct isoburn_imgen_opts which the application obtains from libisoburn</span>
<a name="l00074"></a>00074 <span class="comment">and manipulates by the family of isoburn_igopt_set_*() functions.</span>
<a name="l00075"></a>00075 <span class="comment"></span>
<a name="l00076"></a>00076 <span class="comment">All multi-session aspects are handled by libisoburn according to these</span>
<a name="l00077"></a>00077 <span class="comment">settings. The application does not have to analyze media state and write</span>
<a name="l00078"></a>00078 <span class="comment">job parameters. It rather states its desires which libisoburn tries to</span>
<a name="l00079"></a>00079 <span class="comment">fulfill, or else will refuse to start the write run.</span>
<a name="l00080"></a>00080 <span class="comment"></span>
<a name="l00081"></a>00081 <span class="comment"></span>
<a name="l00082"></a>00082 <span class="comment">              Setup for Growing, Modifying or Blind Growing</span>
<a name="l00083"></a>00083 <span class="comment"></span>
<a name="l00084"></a>00084 <span class="comment">The connector function family offers alternative API calls for performing</span>
<a name="l00085"></a>00085 <span class="comment">the setup for several alternative image generation strategies.</span>
<a name="l00086"></a>00086 <span class="comment"></span>
<a name="l00087"></a>00087 <span class="comment">Growing:</span>
<a name="l00088"></a>00088 <span class="comment">If input and output drive are the same, then isoburn_prepare_disc() is to</span>
<a name="l00089"></a>00089 <span class="comment">be used. It will lead to an add-on session on appendable or overwriteable</span>
<a name="l00090"></a>00090 <span class="comment">media with existing ISO image. With blank media it will produce a first</span>
<a name="l00091"></a>00091 <span class="comment">session.</span>
<a name="l00092"></a>00092 <span class="comment"></span>
<a name="l00093"></a>00093 <span class="comment">Modifying:</span>
<a name="l00094"></a>00094 <span class="comment">If the output drive is not the input drive, and if it bears blank media</span>
<a name="l00095"></a>00095 <span class="comment">or overwriteable without a valid ISO image, then one may produce a consolidated</span>
<a name="l00096"></a>00096 <span class="comment">image with old and new data. This will copy file data from an eventual input</span>
<a name="l00097"></a>00097 <span class="comment">drive with valid image, add any newly introduced data from the local</span>
<a name="l00098"></a>00098 <span class="comment">filesystem, and produce a first session on output media.</span>
<a name="l00099"></a>00099 <span class="comment">To prepare for such an image generation run, use isoburn_prepare_new_image().</span>
<a name="l00100"></a>00100 <span class="comment"></span>
<a name="l00101"></a>00101 <span class="comment">Blind Growing:</span>
<a name="l00102"></a>00102 <span class="comment">This method reads the old image from one drive and writes the add-on session</span>
<a name="l00103"></a>00103 <span class="comment">to a different drive. That output drive is nevertheless supposed to</span>
<a name="l00104"></a>00104 <span class="comment">finally lead to the same medium from where the session was loaded. Usually it</span>
<a name="l00105"></a>00105 <span class="comment">will be stdio:/dev/fd/1 (i.e. stdout) being piped into some burn program</span>
<a name="l00106"></a>00106 <span class="comment">like with this classic gesture:</span>
<a name="l00107"></a>00107 <span class="comment">  mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev</span>
<a name="l00108"></a>00108 <span class="comment">Blind growing is prepared by the call isoburn_prepare_blind_grow().</span>
<a name="l00109"></a>00109 <span class="comment">The input drive should be released immediately after this call in order</span>
<a name="l00110"></a>00110 <span class="comment">to allow the consumer of the output stream to access that drive for writing.</span>
<a name="l00111"></a>00111 <span class="comment"></span>
<a name="l00112"></a>00112 <span class="comment">After either of these setups, some peripheral libburn drive parameter settings</span>
<a name="l00113"></a>00113 <span class="comment">like  burn_write_opts_set_simulate(),  burn_write_opts_set_multi(),</span>
<a name="l00114"></a>00114 <span class="comment"> burn_drive_set_speed(),  burn_write_opts_set_underrun_proof()  should be made.</span>
<a name="l00115"></a>00115 <span class="comment">Do not set the write mode. It will be chosen by libisoburn so it matches job</span>
<a name="l00116"></a>00116 <span class="comment">and media state.</span>
<a name="l00117"></a>00117 <span class="comment"></span>
<a name="l00118"></a>00118 <span class="comment">                           Writing the image</span>
<a name="l00119"></a>00119 <span class="comment"></span>
<a name="l00120"></a>00120 <span class="comment">Then one may start image generation and write threads by isoburn_disc_write().</span>
<a name="l00121"></a>00121 <span class="comment">Progress may be watched at the output drive by burn_drive_get_status() and</span>
<a name="l00122"></a>00122 <span class="comment">isoburn_get_fifo_status().</span>
<a name="l00123"></a>00123 <span class="comment"></span>
<a name="l00124"></a>00124 <span class="comment">At some time, the output drive will be BURN_DRIVE_IDLE indicating that</span>
<a name="l00125"></a>00125 <span class="comment">writing has ended.</span>
<a name="l00126"></a>00126 <span class="comment">One should inquire isoburn_drive_wrote_well() to learn about overall success.</span>
<a name="l00127"></a>00127 <span class="comment"></span>
<a name="l00128"></a>00128 <span class="comment">Finally one must call isoburn_activate_session() which will complete any</span>
<a name="l00129"></a>00129 <span class="comment">eventual multi-session emulation.</span>
<a name="l00130"></a>00130 <span class="comment"></span>
<a name="l00131"></a>00131 <span class="comment"></span>
<a name="l00132"></a>00132 <span class="comment">                         Application Constraints</span>
<a name="l00133"></a>00133 <span class="comment"></span>
<a name="l00134"></a>00134 <span class="comment">Applications shall include libisofs/libisofs.h , libburn/libburn.h and this</span>
<a name="l00135"></a>00135 <span class="comment">file itself: libisoburn/libisoburn.h .</span>
<a name="l00136"></a>00136 <span class="comment">They shall link with -lisofs -lburn -lisoburn or with the .o files emerging</span>
<a name="l00137"></a>00137 <span class="comment">from building those libraries from their sources.</span>
<a name="l00138"></a>00138 <span class="comment"></span>
<a name="l00139"></a>00139 <span class="comment">Applications must use 64 bit off_t.</span>
<a name="l00140"></a>00140 <span class="comment">E.g. on 32-bit GNU/Linux by defining</span>
<a name="l00141"></a>00141 <span class="comment">  #define _LARGEFILE_SOURCE</span>
<a name="l00142"></a>00142 <span class="comment">  #define _FILE_OFFSET_BITS 64</span>
<a name="l00143"></a>00143 <span class="comment">The minimum requirement is to interface with the library by 64 bit signed</span>
<a name="l00144"></a>00144 <span class="comment">integers where libisofs.h or libisoburn.h prescribe off_t.</span>
<a name="l00145"></a>00145 <span class="comment">Failure to do so may result in surprising malfunction or memory faults.</span>
<a name="l00146"></a>00146 <span class="comment"></span>
<a name="l00147"></a>00147 <span class="comment">Application files which include libisofs/libisofs.h or libisoburn/libisoburn.h</span>
<a name="l00148"></a>00148 <span class="comment">must provide definitions for uint32_t and uint8_t.</span>
<a name="l00149"></a>00149 <span class="comment">This can be achieved either:</span>
<a name="l00150"></a>00150 <span class="comment">- by using autotools which will define HAVE_STDINT_H or HAVE_INTTYPES_H </span>
<a name="l00151"></a>00151 <span class="comment">  according to its ./configure tests,</span>
<a name="l00152"></a>00152 <span class="comment">- or by defining the macros HAVE_STDINT_H resp. HAVE_INTTYPES_H according</span>
<a name="l00153"></a>00153 <span class="comment">  to the local situation,</span>
<a name="l00154"></a>00154 <span class="comment">- or by appropriately defining uint32_t and uint8_t by other means,</span>
<a name="l00155"></a>00155 <span class="comment">  e.g. by including inttypes.h before including libisofs.h and libisoburn.h</span>
<a name="l00156"></a>00156 <span class="comment"></span>
<a name="l00157"></a>00157 <span class="comment">*/</span>
<a name="l00158"></a>00158 <span class="preprocessor">#ifdef HAVE_STDINT_H</span>
<a name="l00159"></a>00159 <span class="preprocessor"></span><span class="preprocessor">#include &lt;stdint.h&gt;</span>
<a name="l00160"></a>00160 <span class="preprocessor">#else</span>
<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_INTTYPES_H</span>
<a name="l00162"></a>00162 <span class="preprocessor"></span><span class="preprocessor">#include &lt;inttypes.h&gt;</span>
<a name="l00163"></a>00163 <span class="preprocessor">#endif</span>
<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00165"></a>00165 <span class="preprocessor"></span>
<a name="l00166"></a>00166 
<a name="l00167"></a>00167 <span class="comment">/* Important: If you add a public API function then add its name to file</span>
<a name="l00168"></a>00168 <span class="comment">                  libisoburn/libisoburn.ver</span>
<a name="l00169"></a>00169 <span class="comment">*/</span>
<a name="l00170"></a>00170 
<a name="l00171"></a>00171 
<a name="l00172"></a>00172                           <span class="comment">/* API functions */</span>
<a name="l00173"></a>00173 
<a name="l00174"></a>00174 <span class="comment"></span>
<a name="l00175"></a>00175 <span class="comment">/** Initialize libisoburn, libisofs and libburn.</span>
<a name="l00176"></a>00176 <span class="comment">    Wrapper for : iso_init() and burn_initialize()</span>
<a name="l00177"></a>00177 <span class="comment">    @since 0.1.0</span>
<a name="l00178"></a>00178 <span class="comment">    @param msg  A character array for eventual messages (e.g. with errors)</span>
<a name="l00179"></a>00179 <span class="comment">    @param flag Bitfield for control purposes (unused yet, submit 0) </span>
<a name="l00180"></a>00180 <span class="comment">    @return 1 indicates success, 0 is failure</span>
<a name="l00181"></a>00181 <span class="comment">*/</span>
<a name="l00182"></a>00182 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#aa58f43296f4d524e74f11b33bbd338d4" title="Overview.">isoburn_initialize</a>(<span class="keywordtype">char</span> msg[1024], <span class="keywordtype">int</span> flag);
<a name="l00183"></a>00183 
<a name="l00184"></a>00184 <span class="comment"></span>
<a name="l00185"></a>00185 <span class="comment">/** Check whether all features of header file libisoburn.h from the given</span>
<a name="l00186"></a>00186 <span class="comment">    major.minor.micro revision triple can be delivered by the library version</span>
<a name="l00187"></a>00187 <span class="comment">    which is performing this call.</span>
<a name="l00188"></a>00188 <span class="comment">    An application of libisoburn can easily memorize the version of the</span>
<a name="l00189"></a>00189 <span class="comment">    libisoburn.h header in its own code. Immediately after isoburn_initialize()</span>
<a name="l00190"></a>00190 <span class="comment">    it should simply do this check:</span>
<a name="l00191"></a>00191 <span class="comment">        if (! isoburn_is_compatible(isoburn_header_version_major,</span>
<a name="l00192"></a>00192 <span class="comment">                                    isoburn_header_version_minor,</span>
<a name="l00193"></a>00193 <span class="comment">                                    isoburn_header_version_micro, 0))</span>
<a name="l00194"></a>00194 <span class="comment">           ...refuse to start the program with this dynamic library version...</span>
<a name="l00195"></a>00195 <span class="comment">    @since 0.1.0</span>
<a name="l00196"></a>00196 <span class="comment">    @param major obtained at build time</span>
<a name="l00197"></a>00197 <span class="comment">    @param minor obtained at build time</span>
<a name="l00198"></a>00198 <span class="comment">    @param micro obtained at build time</span>
<a name="l00199"></a>00199 <span class="comment">    @param flag Bitfield for control purposes. Unused yet. Submit 0.</span>
<a name="l00200"></a>00200 <span class="comment">    @return 1= library can work for caller</span>
<a name="l00201"></a>00201 <span class="comment">            0= library is not usable in some aspects. Caller must restrict</span>
<a name="l00202"></a>00202 <span class="comment">               itself to an earlier API version or must not use this libray</span>
<a name="l00203"></a>00203 <span class="comment">               at all.</span>
<a name="l00204"></a>00204 <span class="comment">*/</span>
<a name="l00205"></a>00205 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a14906202187dd02f7d5d8b231ae43c0f" title="Check whether all features of header file libisoburn.h from the given major.minor.micro revision triple can be delivered by the library version which is performing this call.">isoburn_is_compatible</a>(<span class="keywordtype">int</span> major, <span class="keywordtype">int</span> minor, <span class="keywordtype">int</span> micro, <span class="keywordtype">int</span> flag);
<a name="l00206"></a>00206 
<a name="l00207"></a>00207 <span class="comment"></span>
<a name="l00208"></a>00208 <span class="comment">/** Obtain the three release version numbers of the library. These are the</span>
<a name="l00209"></a>00209 <span class="comment">    numbers encountered by the application when linking with libisoburn,</span>
<a name="l00210"></a>00210 <span class="comment">    i.e. possibly not before run time.</span>
<a name="l00211"></a>00211 <span class="comment">    Better do not base the fundamental compatibility decision of an application</span>
<a name="l00212"></a>00212 <span class="comment">    on these numbers. For a reliable check use isoburn_is_compatible().</span>
<a name="l00213"></a>00213 <span class="comment">    @since 0.1.0</span>
<a name="l00214"></a>00214 <span class="comment">    @param major The maturity version (0 for now, as we are still learning)</span>
<a name="l00215"></a>00215 <span class="comment">    @param minor The development goal version.</span>
<a name="l00216"></a>00216 <span class="comment">    @param micro The development step version. This has an additional meaning:</span>
<a name="l00217"></a>00217 <span class="comment"></span>
<a name="l00218"></a>00218 <span class="comment">                 Pare numbers indicate a version with frozen API. I.e. you can</span>
<a name="l00219"></a>00219 <span class="comment">                 rely on the same set of features to be present in all</span>
<a name="l00220"></a>00220 <span class="comment">                 published releases with that major.minor.micro combination.</span>
<a name="l00221"></a>00221 <span class="comment">                 Features of a pare release will stay available and ABI</span>
<a name="l00222"></a>00222 <span class="comment">                 compatible as long as the SONAME of libisoburn stays &quot;1&quot;.</span>
<a name="l00223"></a>00223 <span class="comment">                 Currently there are no plans to ever change the SONAME.</span>
<a name="l00224"></a>00224 <span class="comment">                 </span>
<a name="l00225"></a>00225 <span class="comment">                 Odd numbers indicate that API upgrades are in progress.</span>
<a name="l00226"></a>00226 <span class="comment">                 I.e. new features might be already present or they might</span>
<a name="l00227"></a>00227 <span class="comment">                 be still missing. Newly introduced features may be changed</span>
<a name="l00228"></a>00228 <span class="comment">                 incompatibly or even be revoked before release of a pare</span>
<a name="l00229"></a>00229 <span class="comment">                 version.</span>
<a name="l00230"></a>00230 <span class="comment">                 So micro revisions {1,3,5,7,9} should never be used for</span>
<a name="l00231"></a>00231 <span class="comment">                 dynamic linking unless the proper library match can be</span>
<a name="l00232"></a>00232 <span class="comment">                 guaranteed by external circumstances.</span>
<a name="l00233"></a>00233 <span class="comment"></span>
<a name="l00234"></a>00234 <span class="comment">    @return 1 success, &lt;=0 might in future become an error indication</span>
<a name="l00235"></a>00235 <span class="comment">*/</span>
<a name="l00236"></a>00236 <span class="keywordtype">void</span> <a class="code" href="libisoburn_8h.html#aaf166fb1f5a1f566767601efc8062765" title="Obtain the three release version numbers of the library.">isoburn_version</a>(<span class="keywordtype">int</span> *major, <span class="keywordtype">int</span> *minor, <span class="keywordtype">int</span> *micro);
<a name="l00237"></a>00237 
<a name="l00238"></a>00238 <span class="comment"></span>
<a name="l00239"></a>00239 <span class="comment">/** The minimum version of libisofs to be used with this version of libisoburn</span>
<a name="l00240"></a>00240 <span class="comment">    at compile time.</span>
<a name="l00241"></a>00241 <span class="comment">    @since 0.1.0</span>
<a name="l00242"></a>00242 <span class="comment">*/</span>
<a name="l00243"></a><a class="code" href="libisoburn_8h.html#a29cbc9fd7504ff2ac172e1082b099d2d">00243</a> <span class="preprocessor">#define isoburn_libisofs_req_major  1</span>
<a name="l00244"></a><a class="code" href="libisoburn_8h.html#acaefba42509167733ab88b8bb4187c6a">00244</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_libisofs_req_minor  1</span>
<a name="l00245"></a><a class="code" href="libisoburn_8h.html#afedecbd726e1be7a1d3792f036f398e6">00245</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_libisofs_req_micro  6 </span>
<a name="l00246"></a>00246 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00247"></a>00247 <span class="comment">/** The minimum version of libburn to be used with this version of libisoburn</span>
<a name="l00248"></a>00248 <span class="comment">    at compile time.</span>
<a name="l00249"></a>00249 <span class="comment">    @since 0.1.0</span>
<a name="l00250"></a>00250 <span class="comment">*/</span>
<a name="l00251"></a><a class="code" href="libisoburn_8h.html#a8104e36f3cadcefb20a1e7cf54c96b62">00251</a> <span class="preprocessor">#define isoburn_libburn_req_major  1</span>
<a name="l00252"></a><a class="code" href="libisoburn_8h.html#aaa714369f556775d559dcc359c2be9d6">00252</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_libburn_req_minor  1</span>
<a name="l00253"></a><a class="code" href="libisoburn_8h.html#a7302a1366e58f869318bf0d0b895e739">00253</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_libburn_req_micro  8</span>
<a name="l00254"></a>00254 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00255"></a>00255 <span class="comment">/** The minimum compile time requirements of libisoburn towards libjte are</span>
<a name="l00256"></a>00256 <span class="comment">    the same as of a suitable libisofs towards libjte.</span>
<a name="l00257"></a>00257 <span class="comment">    So use these macros from libisofs.h :</span>
<a name="l00258"></a>00258 <span class="comment">      iso_libjte_req_major</span>
<a name="l00259"></a>00259 <span class="comment">      iso_libjte_req_minor</span>
<a name="l00260"></a>00260 <span class="comment">      iso_libjte_req_micro</span>
<a name="l00261"></a>00261 <span class="comment">    @since 0.6.4</span>
<a name="l00262"></a>00262 <span class="comment">*/</span>
<a name="l00263"></a>00263 <span class="comment"></span>
<a name="l00264"></a>00264 <span class="comment">/** The minimum version of libisofs to be used with this version of libisoburn</span>
<a name="l00265"></a>00265 <span class="comment">    at runtime. This is checked already in isoburn_initialize() which will</span>
<a name="l00266"></a>00266 <span class="comment">    refuse on outdated version. So this call is for information purposes after</span>
<a name="l00267"></a>00267 <span class="comment">    successful startup only.</span>
<a name="l00268"></a>00268 <span class="comment">    @since 0.1.0</span>
<a name="l00269"></a>00269 <span class="comment">    @param major isoburn_libisofs_req_major as seen at build time</span>
<a name="l00270"></a>00270 <span class="comment">    @param minor as seen at build time</span>
<a name="l00271"></a>00271 <span class="comment">    @param micro as seen at build time</span>
<a name="l00272"></a>00272 <span class="comment">    @return 1 success, &lt;=0 might in future become an error indication</span>
<a name="l00273"></a>00273 <span class="comment">*/</span>
<a name="l00274"></a>00274 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a9d487d0c7b6757b9554237bb5850b0b8" title="The minimum compile time requirements of libisoburn towards libjte are the same as of a suitable libi...">isoburn_libisofs_req</a>(<span class="keywordtype">int</span> *major, <span class="keywordtype">int</span> *minor, <span class="keywordtype">int</span> *micro);
<a name="l00275"></a>00275 
<a name="l00276"></a>00276 <span class="comment"></span>
<a name="l00277"></a>00277 <span class="comment">/** The minimum version of libjte to be used with this version of libisoburn</span>
<a name="l00278"></a>00278 <span class="comment">    at runtime. The use of libjte is optional and depends on configure</span>
<a name="l00279"></a>00279 <span class="comment">    tests. It can be prevented by ./configure option --disable-libjte .</span>
<a name="l00280"></a>00280 <span class="comment">    This is checked already in isoburn_initialize() which will refuse on</span>
<a name="l00281"></a>00281 <span class="comment">    outdated version. So this call is for information purposes after</span>
<a name="l00282"></a>00282 <span class="comment">    successful startup only.</span>
<a name="l00283"></a>00283 <span class="comment">    @since 0.6.4</span>
<a name="l00284"></a>00284 <span class="comment">*/</span>
<a name="l00285"></a>00285 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ab6b8d8dba36c5cea8d24223fee0a6fec" title="The minimum version of libjte to be used with this version of libisoburn at runtime.">isoburn_libjte_req</a>(<span class="keywordtype">int</span> *major, <span class="keywordtype">int</span> *minor, <span class="keywordtype">int</span> *micro);
<a name="l00286"></a>00286 
<a name="l00287"></a>00287 <span class="comment"></span>
<a name="l00288"></a>00288 <span class="comment">/** The minimum version of libburn to be used with this version of libisoburn</span>
<a name="l00289"></a>00289 <span class="comment">    at runtime. This is checked already in isoburn_initialize() which will</span>
<a name="l00290"></a>00290 <span class="comment">    refuse on outdated version. So this call is for information purposes after</span>
<a name="l00291"></a>00291 <span class="comment">    successful startup only.</span>
<a name="l00292"></a>00292 <span class="comment">    @since 0.1.0</span>
<a name="l00293"></a>00293 <span class="comment">    @param major isoburn_libburn_req_major as seen at build time</span>
<a name="l00294"></a>00294 <span class="comment">    @param minor as seen at build time</span>
<a name="l00295"></a>00295 <span class="comment">    @param micro as seen at build time</span>
<a name="l00296"></a>00296 <span class="comment">    @return 1 success, &lt;=0 might in future become an error indication</span>
<a name="l00297"></a>00297 <span class="comment">*/</span>
<a name="l00298"></a>00298 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ae3849780df7e041d4efbb3c06b1816c8" title="The minimum version of libburn to be used with this version of libisoburn at runtime.">isoburn_libburn_req</a>(<span class="keywordtype">int</span> *major, <span class="keywordtype">int</span> *minor, <span class="keywordtype">int</span> *micro);
<a name="l00299"></a>00299 
<a name="l00300"></a>00300 <span class="comment"></span>
<a name="l00301"></a>00301 <span class="comment">/** These three release version numbers tell the revision of this header file</span>
<a name="l00302"></a>00302 <span class="comment">    and of the API it describes. They are memorized by applications at build</span>
<a name="l00303"></a>00303 <span class="comment">    time.</span>
<a name="l00304"></a>00304 <span class="comment">    @since 0.1.0</span>
<a name="l00305"></a>00305 <span class="comment">*/</span>
<a name="l00306"></a><a class="code" href="libisoburn_8h.html#a19e35f892eb3322ca895a87a52812e5d">00306</a> <span class="preprocessor">#define isoburn_header_version_major  1</span>
<a name="l00307"></a><a class="code" href="libisoburn_8h.html#a8316296232074ad0413a45f45db30d5f">00307</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_header_version_minor  1</span>
<a name="l00308"></a><a class="code" href="libisoburn_8h.html#ac002a84b305a15866af5ff0f4dd81a3c">00308</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_header_version_micro  8</span>
<a name="l00309"></a>00309 <span class="preprocessor"></span><span class="comment">/** Note:</span>
<a name="l00310"></a>00310 <span class="comment">    Above version numbers are also recorded in configure.ac because libtool</span>
<a name="l00311"></a>00311 <span class="comment">    wants them as parameters at build time.</span>
<a name="l00312"></a>00312 <span class="comment">    For the library compatibility check, ISOBURN_*_VERSION in configure.ac</span>
<a name="l00313"></a>00313 <span class="comment">    are not decisive. Only the three numbers here do matter.</span>
<a name="l00314"></a>00314 <span class="comment">*/</span><span class="comment"></span>
<a name="l00315"></a>00315 <span class="comment">/** Usage discussion:</span>
<a name="l00316"></a>00316 <span class="comment"></span>
<a name="l00317"></a>00317 <span class="comment">Some developers of the libburnia project have differing</span>
<a name="l00318"></a>00318 <span class="comment">opinions how to ensure the compatibility of libaries</span>
<a name="l00319"></a>00319 <span class="comment">and applications.</span>
<a name="l00320"></a>00320 <span class="comment"></span>
<a name="l00321"></a>00321 <span class="comment">It is about whether to use at compile time and at runtime</span>
<a name="l00322"></a>00322 <span class="comment">the version numbers isoburn_header_version_* provided here.</span>
<a name="l00323"></a>00323 <span class="comment">Thomas Schmitt advises to use them.</span>
<a name="l00324"></a>00324 <span class="comment">Vreixo Formoso advises to use other means.</span>
<a name="l00325"></a>00325 <span class="comment"></span>
<a name="l00326"></a>00326 <span class="comment">At compile time:</span>
<a name="l00327"></a>00327 <span class="comment"></span>
<a name="l00328"></a>00328 <span class="comment">Vreixo Formoso advises to leave proper version matching</span>
<a name="l00329"></a>00329 <span class="comment">to properly programmed checks in the the application&#39;s</span>
<a name="l00330"></a>00330 <span class="comment">build system, which will eventually refuse compilation.</span>
<a name="l00331"></a>00331 <span class="comment"></span>
<a name="l00332"></a>00332 <span class="comment">Thomas Schmitt advises to use the macros defined here</span>
<a name="l00333"></a>00333 <span class="comment">for comparison with the application&#39;s requirements of</span>
<a name="l00334"></a>00334 <span class="comment">library revisions and to eventually break compilation.</span>
<a name="l00335"></a>00335 <span class="comment"></span>
<a name="l00336"></a>00336 <span class="comment">Both advises are combinable. I.e. be master of your</span>
<a name="l00337"></a>00337 <span class="comment">build system and have #if checks in the source code</span>
<a name="l00338"></a>00338 <span class="comment">of your application, nevertheless.</span>
<a name="l00339"></a>00339 <span class="comment"></span>
<a name="l00340"></a>00340 <span class="comment">At runtime (via *_is_compatible()):</span>
<a name="l00341"></a>00341 <span class="comment"></span>
<a name="l00342"></a>00342 <span class="comment">Vreixo Formoso advises to compare the application&#39;s</span>
<a name="l00343"></a>00343 <span class="comment">requirements of library revisions with the runtime</span>
<a name="l00344"></a>00344 <span class="comment">library. This is to allow runtime libraries which are</span>
<a name="l00345"></a>00345 <span class="comment">young enough for the application but too old for</span>
<a name="l00346"></a>00346 <span class="comment">the lib*.h files seen at compile time.</span>
<a name="l00347"></a>00347 <span class="comment"></span>
<a name="l00348"></a>00348 <span class="comment">Thomas Schmitt advises to compare the header</span>
<a name="l00349"></a>00349 <span class="comment">revisions defined here with the runtime library.</span>
<a name="l00350"></a>00350 <span class="comment">This is to enforce a strictly monotonous chain</span>
<a name="l00351"></a>00351 <span class="comment">of revisions from app to header to library,</span>
<a name="l00352"></a>00352 <span class="comment">at the cost of excluding some older libraries.</span>
<a name="l00353"></a>00353 <span class="comment"></span>
<a name="l00354"></a>00354 <span class="comment">These two advises are mutually exclusive.</span>
<a name="l00355"></a>00355 <span class="comment"></span>
<a name="l00356"></a>00356 <span class="comment">-----------------------------------------------------</span>
<a name="l00357"></a>00357 <span class="comment"></span>
<a name="l00358"></a>00358 <span class="comment">For an implementation of the Thomas Schmitt approach,</span>
<a name="l00359"></a>00359 <span class="comment">see libisoburn/burn_wrap.c : isoburn_initialize()</span>
<a name="l00360"></a>00360 <span class="comment">This connects libisoburn as &quot;application&quot; with libisofs</span>
<a name="l00361"></a>00361 <span class="comment">as &quot;library&quot;.</span>
<a name="l00362"></a>00362 <span class="comment"></span>
<a name="l00363"></a>00363 <span class="comment">The compatible part of Vreixo Formoso&#39;s approach is implemented</span>
<a name="l00364"></a>00364 <span class="comment">in configure.ac LIBBURN_REQUIRED, LIBISOFS_REQUIRED.</span>
<a name="l00365"></a>00365 <span class="comment">In isoburn_initialize() it would rather test by</span>
<a name="l00366"></a>00366 <span class="comment">  iso_lib_is_compatible(isoburn_libisofs_req_major,...</span>
<a name="l00367"></a>00367 <span class="comment">than by</span>
<a name="l00368"></a>00368 <span class="comment">  iso_lib_is_compatible(iso_lib_header_version_major,...</span>
<a name="l00369"></a>00369 <span class="comment">and would leave out the ugly compile time traps.</span>
<a name="l00370"></a>00370 <span class="comment"></span>
<a name="l00371"></a>00371 <span class="comment">*/</span>
<a name="l00372"></a>00372 
<a name="l00373"></a>00373 <span class="comment"></span>
<a name="l00374"></a>00374 <span class="comment">/** Announce to the library an application provided method for immediate</span>
<a name="l00375"></a>00375 <span class="comment">    delivery of messages. It is used when no drive is affected directly or</span>
<a name="l00376"></a>00376 <span class="comment">    if the drive has no own msgs_submit() method attached by</span>
<a name="l00377"></a>00377 <span class="comment">    isoburn_drive_set_msgs_submit.</span>
<a name="l00378"></a>00378 <span class="comment">    If no method is preset or if the method is set to NULL then libisoburn</span>
<a name="l00379"></a>00379 <span class="comment">    delivers its messages through the message queue of libburn.</span>
<a name="l00380"></a>00380 <span class="comment">    @param msgs_submit   The function call which implements the method</span>
<a name="l00381"></a>00381 <span class="comment">    @param submit_handle Handle to be used as first argument of msgs_submit</span>
<a name="l00382"></a>00382 <span class="comment">    @param submit_flag   Flag to be used as last argument of msgs_submit</span>
<a name="l00383"></a>00383 <span class="comment">    @param flag          Unused yet, submit 0</span>
<a name="l00384"></a>00384 <span class="comment">    @since 0.2.0</span>
<a name="l00385"></a>00385 <span class="comment">*/</span>
<a name="l00386"></a>00386 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ac5f08443402146b5b404c0ba3e81a799" title="Note: Above version numbers are also recorded in configure.ac because libtool wants them as parameter...">isoburn_set_msgs_submit</a>(<span class="keywordtype">int</span> (*msgs_submit)(<span class="keywordtype">void</span> *handle, <span class="keywordtype">int</span> error_code,
<a name="l00387"></a>00387                                                   <span class="keywordtype">char</span> msg_text[], <span class="keywordtype">int</span> os_errno,
<a name="l00388"></a>00388                                                   <span class="keywordtype">char</span> severity[], <span class="keywordtype">int</span> flag),
<a name="l00389"></a>00389                                <span class="keywordtype">void</span> *submit_handle, <span class="keywordtype">int</span> submit_flag, <span class="keywordtype">int</span> flag);
<a name="l00390"></a>00390 
<a name="l00391"></a>00391 <span class="comment"></span>
<a name="l00392"></a>00392 <span class="comment">/** Aquire a target drive by its filesystem path resp. libburn persistent</span>
<a name="l00393"></a>00393 <span class="comment">    address.</span>
<a name="l00394"></a>00394 <span class="comment">    Wrapper for: burn_drive_scan_and_grab()</span>
<a name="l00395"></a>00395 <span class="comment">    @since 0.1.0</span>
<a name="l00396"></a>00396 <span class="comment">    @param drive_infos On success returns a one element array with the drive</span>
<a name="l00397"></a>00397 <span class="comment">                  (cdrom/burner). Thus use with driveno 0 only. On failure</span>
<a name="l00398"></a>00398 <span class="comment">                  the array has no valid elements at all.</span>
<a name="l00399"></a>00399 <span class="comment">                  The returned array should be freed via burn_drive_info_free()</span>
<a name="l00400"></a>00400 <span class="comment">                  when the drive is no longer needed. But before this is done</span>
<a name="l00401"></a>00401 <span class="comment">                  one has to call isoburn_drive_release(drive_infos[0].drive).</span>
<a name="l00402"></a>00402 <span class="comment">    @param adr    The persistent address of the desired drive.</span>
<a name="l00403"></a>00403 <span class="comment">    @param load   1 attempt to load the disc tray. 0 no attempt,rather failure.</span>
<a name="l00404"></a>00404 <span class="comment">    @return       1 = success , 0 = drive not found , &lt;0 = other error</span>
<a name="l00405"></a>00405 <span class="comment">*/</span>
<a name="l00406"></a>00406 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a99b60ccbeca26a24d14f3d3b6787c950" title="Aquire a target drive by its filesystem path resp.">isoburn_drive_scan_and_grab</a>(<span class="keyword">struct</span> burn_drive_info *drive_infos[],
<a name="l00407"></a>00407                                 <span class="keywordtype">char</span>* adr, <span class="keywordtype">int</span> load);
<a name="l00408"></a>00408 
<a name="l00409"></a>00409 <span class="comment"></span>
<a name="l00410"></a>00410 <span class="comment">/** Aquire a target drive by its filesystem path resp. libburn persistent</span>
<a name="l00411"></a>00411 <span class="comment">    address. This is a modern successor of isoburn_drive_scan_and_grab().  </span>
<a name="l00412"></a>00412 <span class="comment">    Wrapper for: burn_drive_scan_and_grab()</span>
<a name="l00413"></a>00413 <span class="comment">    @since 0.1.2</span>
<a name="l00414"></a>00414 <span class="comment">    @param drive_infos On success returns a one element array with the drive</span>
<a name="l00415"></a>00415 <span class="comment">                  (cdrom/burner). Thus use with driveno 0 only. On failure</span>
<a name="l00416"></a>00416 <span class="comment">                  the array has no valid elements at all.</span>
<a name="l00417"></a>00417 <span class="comment">                  The returned array should be freed via burn_drive_info_free()</span>
<a name="l00418"></a>00418 <span class="comment">                  when the drive is no longer needed. But before this is done</span>
<a name="l00419"></a>00419 <span class="comment">                  one has to call isoburn_drive_release(drive_infos[0].drive).</span>
<a name="l00420"></a>00420 <span class="comment">    @param adr    The persistent address of the desired drive.</span>
<a name="l00421"></a>00421 <span class="comment">    @param flag   bit0= attempt to load the disc tray.</span>
<a name="l00422"></a>00422 <span class="comment">                        Else: failure if not loaded.</span>
<a name="l00423"></a>00423 <span class="comment">                  bit1= regard overwriteable media as blank</span>
<a name="l00424"></a>00424 <span class="comment">                  bit2= if the drive is a regular disk file:</span>
<a name="l00425"></a>00425 <span class="comment">                        truncate it to the write start address when writing</span>
<a name="l00426"></a>00426 <span class="comment">                        begins</span>
<a name="l00427"></a>00427 <span class="comment">                  bit3= if the drive reports a read-only profile try to read</span>
<a name="l00428"></a>00428 <span class="comment">                        table of content by scanning for ISO image headers.</span>
<a name="l00429"></a>00429 <span class="comment">                        (depending on media type and drive this might</span>
<a name="l00430"></a>00430 <span class="comment">                         help or it might make the resulting toc even worse)</span>
<a name="l00431"></a>00431 <span class="comment">                  bit4= do not emulate table of content on overwriteable media</span>
<a name="l00432"></a>00432 <span class="comment">                  bit5= ignore ACL from external filesystems</span>
<a name="l00433"></a>00433 <span class="comment">                  bit6= ignore POSIX Extended Attributes from external</span>
<a name="l00434"></a>00434 <span class="comment">                        filesystems</span>
<a name="l00435"></a>00435 <span class="comment">                  bit7= pretend read-only profile and scan for table of content</span>
<a name="l00436"></a>00436 <span class="comment">                  bit8= re-assess already aquired (*drive_infos)[0] rather</span>
<a name="l00437"></a>00437 <span class="comment">                        than aquiring adr</span>
<a name="l00438"></a>00438 <span class="comment">                        @since 1.1.8</span>
<a name="l00439"></a>00439 <span class="comment">    @return       1 = success , 0 = drive not found , &lt;0 = other error</span>
<a name="l00440"></a>00440 <span class="comment">*/</span>
<a name="l00441"></a>00441 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a09fd9613bc6e76fb1269d6b99a63e400" title="Aquire a target drive by its filesystem path resp.">isoburn_drive_aquire</a>(<span class="keyword">struct</span> burn_drive_info *drive_infos[],
<a name="l00442"></a>00442                          <span class="keywordtype">char</span>* adr, <span class="keywordtype">int</span> flag);
<a name="l00443"></a>00443 <span class="comment"></span>
<a name="l00444"></a>00444 <span class="comment">/** Aquire a drive from the burn_drive_info[] array which was obtained by</span>
<a name="l00445"></a>00445 <span class="comment">    a previous call of burn_drive_scan(). </span>
<a name="l00446"></a>00446 <span class="comment">    Wrapper for: burn_drive_grab()</span>
<a name="l00447"></a>00447 <span class="comment">    @since 0.1.0</span>
<a name="l00448"></a>00448 <span class="comment">    @param drive The drive to grab. E.g. drive_infos[1].drive .</span>
<a name="l00449"></a>00449 <span class="comment">                 Call isoburn_drive_release(drive) when it it no longer needed.</span>
<a name="l00450"></a>00450 <span class="comment">    @param load  1 attempt to load the disc tray. 0 no attempt, rather failure.</span>
<a name="l00451"></a>00451 <span class="comment">    @return      1 success, &lt;=0 failure</span>
<a name="l00452"></a>00452 <span class="comment">*/</span>
<a name="l00453"></a>00453 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a36d843f4423996896e38ed84463d1348" title="Aquire a drive from the burn_drive_info[] array which was obtained by a previous call of burn_drive_s...">isoburn_drive_grab</a>(<span class="keyword">struct</span> burn_drive *drive, <span class="keywordtype">int</span> load);
<a name="l00454"></a>00454 
<a name="l00455"></a>00455 <span class="comment"></span>
<a name="l00456"></a>00456 <span class="comment">/** Attach to a drive an application provided method for immediate</span>
<a name="l00457"></a>00457 <span class="comment">    delivery of messages.</span>
<a name="l00458"></a>00458 <span class="comment">    If no method is set or if the method is set to NULL then libisoburn</span>
<a name="l00459"></a>00459 <span class="comment">    delivers messages of the drive through the global msgs_submit() method</span>
<a name="l00460"></a>00460 <span class="comment">    set by isoburn_set_msgs_submiti() or by the message queue of libburn.</span>
<a name="l00461"></a>00461 <span class="comment">    @since 0.2.0</span>
<a name="l00462"></a>00462 <span class="comment">    @param d     The drive to which this function, handle and flag shall apply</span>
<a name="l00463"></a>00463 <span class="comment">    @param msgs_submit   The function call which implements the method</span>
<a name="l00464"></a>00464 <span class="comment">    @param submit_handle Handle to be used as first argument of msgs_submit</span>
<a name="l00465"></a>00465 <span class="comment">    @param submit_flag   Flag to be used as last argument of msgs_submit</span>
<a name="l00466"></a>00466 <span class="comment">    @param flag          Unused yet, submit 0</span>
<a name="l00467"></a>00467 <span class="comment">*/</span>
<a name="l00468"></a>00468 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a76146832c4f46733da97e31891e0a3e6" title="Attach to a drive an application provided method for immediate delivery of messages.">isoburn_drive_set_msgs_submit</a>(<span class="keyword">struct</span> burn_drive *d,
<a name="l00469"></a>00469                             <span class="keywordtype">int</span> (*msgs_submit)(<span class="keywordtype">void</span> *handle, <span class="keywordtype">int</span> error_code,
<a name="l00470"></a>00470                                                <span class="keywordtype">char</span> msg_text[], <span class="keywordtype">int</span> os_errno,
<a name="l00471"></a>00471                                                <span class="keywordtype">char</span> severity[], <span class="keywordtype">int</span> flag),
<a name="l00472"></a>00472                             <span class="keywordtype">void</span> *submit_handle, <span class="keywordtype">int</span> submit_flag, <span class="keywordtype">int</span> flag);
<a name="l00473"></a>00473 
<a name="l00474"></a>00474 <span class="comment"></span>
<a name="l00475"></a>00475 <span class="comment">/** Inquire the medium status. Expect the whole spectrum of libburn BURN_DISC_*</span>
<a name="l00476"></a>00476 <span class="comment">    with multi-session media. Emulated states with random access media are</span>
<a name="l00477"></a>00477 <span class="comment">    BURN_DISC_BLANK and BURN_DISC_APPENDABLE.</span>
<a name="l00478"></a>00478 <span class="comment">    Wrapper for: burn_disc_get_status()</span>
<a name="l00479"></a>00479 <span class="comment">    @since 0.1.0</span>
<a name="l00480"></a>00480 <span class="comment">    @param drive The drive to inquire.</span>
<a name="l00481"></a>00481 <span class="comment">    @return The status of the drive, or what kind of disc is in it.</span>
<a name="l00482"></a>00482 <span class="comment">            Note: BURN_DISC_UNGRABBED indicates wrong API usage</span>
<a name="l00483"></a>00483 <span class="comment">*/</span>
<a name="l00484"></a>00484 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00485"></a>00485 <span class="preprocessor"></span><span class="keyword">enum</span> burn::burn_disc_status <a class="code" href="libisoburn_8h.html#a105552999c6a7d81288fa2f9c3bfd682" title="Inquire the medium status.">isoburn_disc_get_status</a>(<span class="keyword">struct</span> burn_drive *drive);
<a name="l00486"></a>00486 <span class="preprocessor">#else</span>
<a name="l00487"></a>00487 <span class="preprocessor"></span><span class="keyword">enum</span> burn_disc_status <a class="code" href="libisoburn_8h.html#a105552999c6a7d81288fa2f9c3bfd682" title="Inquire the medium status.">isoburn_disc_get_status</a>(<span class="keyword">struct</span> burn_drive *drive);
<a name="l00488"></a>00488 <span class="preprocessor">#endif</span>
<a name="l00489"></a>00489 <span class="preprocessor"></span>
<a name="l00490"></a>00490 <span class="comment"></span>
<a name="l00491"></a>00491 <span class="comment">/** Tells whether the medium can be treated by isoburn_disc_erase().</span>
<a name="l00492"></a>00492 <span class="comment">    Wrapper for: burn_disc_erasable()</span>
<a name="l00493"></a>00493 <span class="comment">    @since 0.1.0</span>
<a name="l00494"></a>00494 <span class="comment">    @param d     The drive to inquire.</span>
<a name="l00495"></a>00495 <span class="comment">    @return      0=not erasable , else erasable</span>
<a name="l00496"></a>00496 <span class="comment">*/</span>
<a name="l00497"></a>00497 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a0013002bd2f7011bbf059af9eafd61df" title="Tells whether the medium can be treated by isoburn_disc_erase().">isoburn_disc_erasable</a>(<span class="keyword">struct</span> burn_drive *d);
<a name="l00498"></a>00498 
<a name="l00499"></a>00499 <span class="comment"></span>
<a name="l00500"></a>00500 <span class="comment">/** Mark the medium as blank. With multi-session media this will call</span>
<a name="l00501"></a>00501 <span class="comment">    burn_disc_erase(). With random access media, an eventual ISO-9660</span>
<a name="l00502"></a>00502 <span class="comment">    filesystem will get invalidated by altering its start blocks on the medium.</span>
<a name="l00503"></a>00503 <span class="comment">    In case of success, the medium is in status BURN_DISC_BLANK afterwards.</span>
<a name="l00504"></a>00504 <span class="comment">    Wrapper for: burn_disc_erase()</span>
<a name="l00505"></a>00505 <span class="comment">    @since 0.1.0</span>
<a name="l00506"></a>00506 <span class="comment">    @param drive The drive with the medium to erase.</span>
<a name="l00507"></a>00507 <span class="comment">    @param fast 1=fast erase, 0=thorough erase</span>
<a name="l00508"></a>00508 <span class="comment">               With DVD-RW, fast erase yields media incapable of multi-session.</span>
<a name="l00509"></a>00509 <span class="comment">*/</span>
<a name="l00510"></a>00510 <span class="keywordtype">void</span> <a class="code" href="libisoburn_8h.html#a4c272b8eb0e270ad4b8db520ffde1985" title="Mark the medium as blank.">isoburn_disc_erase</a>(<span class="keyword">struct</span> burn_drive *drive, <span class="keywordtype">int</span> fast);
<a name="l00511"></a>00511 
<a name="l00512"></a>00512 <span class="comment"></span>
<a name="l00513"></a>00513 <span class="comment">/** Set up isoburn_disc_get_msc1() to return a fabricated value.</span>
<a name="l00514"></a>00514 <span class="comment">    This makes only sense between aquiring the drive and reading the</span>
<a name="l00515"></a>00515 <span class="comment">    image. After isoburn_read_image() it will confuse the coordination</span>
<a name="l00516"></a>00516 <span class="comment">    of libisoburn and libisofs.</span>
<a name="l00517"></a>00517 <span class="comment">    Note: Sessions and tracks are counted beginning with 1, not with 0.</span>
<a name="l00518"></a>00518 <span class="comment">    @since 0.1.6</span>
<a name="l00519"></a>00519 <span class="comment">    @param d        The drive where msc1 is to be set</span>
<a name="l00520"></a>00520 <span class="comment">    @param adr_mode Determines how to interpret adr_value and to set msc1.</span>
<a name="l00521"></a>00521 <span class="comment">                    If adr_value shall represent a number then decimal ASCII</span>
<a name="l00522"></a>00522 <span class="comment">                    digits are expected.</span>
<a name="l00523"></a>00523 <span class="comment">                    0= start lba of last session in TOC, ignore adr_value</span>
<a name="l00524"></a>00524 <span class="comment">                    1= start lba of session number given by adr_value</span>
<a name="l00525"></a>00525 <span class="comment">                    2= start lba of track given number by adr_value</span>
<a name="l00526"></a>00526 <span class="comment">                    3= adr_value itself is the lba to be used</span>
<a name="l00527"></a>00527 <span class="comment">                    4= start lba of last session with volume id</span>
<a name="l00528"></a>00528 <span class="comment">                       given by adr_value</span>
<a name="l00529"></a>00529 <span class="comment">    @param adr_value A string describing the value to be eventually used.</span>
<a name="l00530"></a>00530 <span class="comment">    @param flag Bitfield for control purposes.</span>
<a name="l00531"></a>00531 <span class="comment">                bit0= @since 0.2.2</span>
<a name="l00532"></a>00532 <span class="comment">                      with adr_mode 3: adr_value might be 16 blocks too high</span>
<a name="l00533"></a>00533 <span class="comment">                      (e.g. -C stemming from growisofs). Probe for ISO head</span>
<a name="l00534"></a>00534 <span class="comment">                      at adr_value-16 and eventually adjust setting. </span>
<a name="l00535"></a>00535 <span class="comment">                bit1= insist in seeing a disc object with at least one session</span>
<a name="l00536"></a>00536 <span class="comment">                bit2= with adr_mode 4: use adr_value as regular expression</span>
<a name="l00537"></a>00537 <span class="comment">*/</span>
<a name="l00538"></a>00538 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#aef16c1cfed6fcfdf6fbd9b691b6f9b60" title="Set up isoburn_disc_get_msc1() to return a fabricated value.">isoburn_set_msc1</a>(<span class="keyword">struct</span> burn_drive *d, <span class="keywordtype">int</span> adr_mode, <span class="keywordtype">char</span> *adr_value,
<a name="l00539"></a>00539                      <span class="keywordtype">int</span> flag);
<a name="l00540"></a>00540 
<a name="l00541"></a>00541 
<a name="l00542"></a>00542 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l00543"></a>00543 <span class="comment">/* </span>
<a name="l00544"></a>00544 <span class="comment"></span>
<a name="l00545"></a>00545 <span class="comment">  Wrappers for emulation of TOC on overwriteable media</span>
<a name="l00546"></a>00546 <span class="comment"></span>
<a name="l00547"></a>00547 <span class="comment">  Media which match the overwriteable usage model lack of a history of sessions</span>
<a name="l00548"></a>00548 <span class="comment">  and tracks. libburn will not even hand out a burn_disc object for them and</span>
<a name="l00549"></a>00549 <span class="comment">  always declare them blank. libisoburn checks for a valid ISO filesystem</span>
<a name="l00550"></a>00550 <span class="comment">  header at LBA 0 and eventually declares them appendable.</span>
<a name="l00551"></a>00551 <span class="comment">  Nevertheless one can only determine an upper limit of the size of the overall</span>
<a name="l00552"></a>00552 <span class="comment">  image (by isoburn_get_min_start_byte()) but not a list of stored sessions</span>
<a name="l00553"></a>00553 <span class="comment">  and their LBAs, as it is possible with true multi-session media.</span>
<a name="l00554"></a>00554 <span class="comment"></span>
<a name="l00555"></a>00555 <span class="comment">  The following wrappers add the capability to obtain a session and track TOC</span>
<a name="l00556"></a>00556 <span class="comment">  from emulated multi-session images on overwriteables if the first session</span>
<a name="l00557"></a>00557 <span class="comment">  was written by libisoburn-0.1.6 or later (i.e. with a header copy at LBA 32).</span>
<a name="l00558"></a>00558 <span class="comment"></span>
<a name="l00559"></a>00559 <span class="comment">  Be aware that the structs emitted by these isoburn calls are not compatible</span>
<a name="l00560"></a>00560 <span class="comment">  with the libburn structs. I.e. you may use them only with isoburn_toc_*</span>
<a name="l00561"></a>00561 <span class="comment">  calls. </span>
<a name="l00562"></a>00562 <span class="comment">  isoburn_toc_disc needs to be freed after use. isoburn_toc_session and</span>
<a name="l00563"></a>00563 <span class="comment">  isoburn_toc_track vanish together with their isoburn_toc_disc.</span>
<a name="l00564"></a>00564 <span class="comment">*/</span>
<a name="l00565"></a>00565 
<a name="l00566"></a>00566 <span class="comment">/* Opaque handles to media, session, track */</span>
<a name="l00567"></a>00567 <span class="keyword">struct </span>isoburn_toc_disc;
<a name="l00568"></a>00568 <span class="keyword">struct </span>isoburn_toc_session;
<a name="l00569"></a>00569 <span class="keyword">struct </span>isoburn_toc_track;
<a name="l00570"></a>00570 
<a name="l00571"></a>00571 <span class="comment"></span>
<a name="l00572"></a>00572 <span class="comment">/** Obtain a master handle for the table of content.</span>
<a name="l00573"></a>00573 <span class="comment">    This handle governs allocated resources which have to be released by</span>
<a name="l00574"></a>00574 <span class="comment">    isoburn_toc_disc_free() when no longer needed.</span>
<a name="l00575"></a>00575 <span class="comment">    Wrapper for: burn_drive_get_disc()</span>
<a name="l00576"></a>00576 <span class="comment">    @since 0.1.6</span>
<a name="l00577"></a>00577 <span class="comment">    @param d   The drive with the medium to inspect</span>
<a name="l00578"></a>00578 <span class="comment">    @return    NULL in case there is no content info, else it is a valid handle</span>
<a name="l00579"></a>00579 <span class="comment">*/</span>
<a name="l00580"></a>00580 <span class="keyword">struct </span>isoburn_toc_disc *<a class="code" href="libisoburn_8h.html#ad44c170ef0efed537e5dd6b5f3a5f501" title="Obtain a master handle for the table of content.">isoburn_toc_drive_get_disc</a>(<span class="keyword">struct</span> burn_drive *d);
<a name="l00581"></a>00581 
<a name="l00582"></a>00582 <span class="comment"></span>
<a name="l00583"></a>00583 <span class="comment">/** Tell the number of 2048 byte blocks covered by the table of content.</span>
<a name="l00584"></a>00584 <span class="comment">    This number includes the eventual gaps between sessions and tracks.</span>
<a name="l00585"></a>00585 <span class="comment">    So this call is not really a wrapper for burn_disc_get_sectors().</span>
<a name="l00586"></a>00586 <span class="comment">    @since 0.1.6</span>
<a name="l00587"></a>00587 <span class="comment">    @param disc  The master handle of the medium</span>
<a name="l00588"></a>00588 <span class="comment">    @return      Number of blocks, &lt;=0 indicates unknown or unreadable state</span>
<a name="l00589"></a>00589 <span class="comment">*/</span>
<a name="l00590"></a>00590 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a66686b2eeed685343be5b79456b4e6a7" title="Tell the number of 2048 byte blocks covered by the table of content.">isoburn_toc_disc_get_sectors</a>(<span class="keyword">struct</span> isoburn_toc_disc *disc);
<a name="l00591"></a>00591 
<a name="l00592"></a>00592 <span class="comment"></span>
<a name="l00593"></a>00593 <span class="comment">/** Get the array of session handles from the table of content.</span>
<a name="l00594"></a>00594 <span class="comment">    Wrapper for: burn_disc_get_sessions()</span>
<a name="l00595"></a>00595 <span class="comment">    @since 0.1.6</span>
<a name="l00596"></a>00596 <span class="comment">    @param disc The master handle of the medium</span>
<a name="l00597"></a>00597 <span class="comment">    @param num returns the number of sessions in the array</span>
<a name="l00598"></a>00598 <span class="comment">    @return the address of the array of session handles</span>
<a name="l00599"></a>00599 <span class="comment">*/</span>
<a name="l00600"></a>00600 <span class="keyword">struct </span>isoburn_toc_session **<a class="code" href="libisoburn_8h.html#a05d91853be0ff5ad282aabbbdbef2249" title="Get the array of session handles from the table of content.">isoburn_toc_disc_get_sessions</a>(
<a name="l00601"></a>00601                                       <span class="keyword">struct</span> isoburn_toc_disc *disc, <span class="keywordtype">int</span> *num);
<a name="l00602"></a>00602 
<a name="l00603"></a>00603 <span class="comment"></span>
<a name="l00604"></a>00604 <span class="comment">/** Tell the number of 2048 byte blocks covered by a particular session.</span>
<a name="l00605"></a>00605 <span class="comment">    Wrapper for: burn_session_get_sectors()</span>
<a name="l00606"></a>00606 <span class="comment">    @since 0.1.6</span>
<a name="l00607"></a>00607 <span class="comment">    @param s The session handle</span>
<a name="l00608"></a>00608 <span class="comment">    @return number of blocks, &lt;=0 indicates unknown or unreadable state</span>
<a name="l00609"></a>00609 <span class="comment">*/</span>
<a name="l00610"></a>00610 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#aa8cd9a7a0fd8364f86596b9032964116" title="Tell the number of 2048 byte blocks covered by a particular session.">isoburn_toc_session_get_sectors</a>(<span class="keyword">struct</span> isoburn_toc_session *s);
<a name="l00611"></a>00611 
<a name="l00612"></a>00612 <span class="comment"></span>
<a name="l00613"></a>00613 <span class="comment">/** Obtain a copy of the entry which describes the end of a particular session.</span>
<a name="l00614"></a>00614 <span class="comment">    Wrapper for: burn_session_get_leadout_entry()</span>
<a name="l00615"></a>00615 <span class="comment">    @since 0.1.6</span>
<a name="l00616"></a>00616 <span class="comment">    @param s The session handle</span>
<a name="l00617"></a>00617 <span class="comment">    @param entry A pointer to memory provided by the caller. It will be filled</span>
<a name="l00618"></a>00618 <span class="comment">                 with info according to struct burn_toc_entry as defined</span>
<a name="l00619"></a>00619 <span class="comment">                 in libburn.h</span>
<a name="l00620"></a>00620 <span class="comment">*/</span>
<a name="l00621"></a>00621 <span class="keywordtype">void</span> <a class="code" href="libisoburn_8h.html#a34fe688ed75030b2c2940fc83f941d28" title="Obtain a copy of the entry which describes the end of a particular session.">isoburn_toc_session_get_leadout_entry</a>(<span class="keyword">struct</span> isoburn_toc_session *s,
<a name="l00622"></a>00622                                        <span class="keyword">struct</span> burn_toc_entry *entry);
<a name="l00623"></a>00623 
<a name="l00624"></a>00624 <span class="comment"></span>
<a name="l00625"></a>00625 <span class="comment">/** Get the array of track handles from a particular session.</span>
<a name="l00626"></a>00626 <span class="comment">    Wrapper for: burn_session_get_tracks()</span>
<a name="l00627"></a>00627 <span class="comment">    @since 0.1.6</span>
<a name="l00628"></a>00628 <span class="comment">    @param s The session handle</span>
<a name="l00629"></a>00629 <span class="comment">    @param num returns the number of tracks in the array</span>
<a name="l00630"></a>00630 <span class="comment">    @return the address of the array of track handles,</span>
<a name="l00631"></a>00631 <span class="comment">            NULL if no tracks are registered with session s</span>
<a name="l00632"></a>00632 <span class="comment">*/</span>
<a name="l00633"></a>00633 <span class="keyword">struct </span>isoburn_toc_track **<a class="code" href="libisoburn_8h.html#a12d267c47ac6de356c87ebaf0090adf5" title="Get the array of track handles from a particular session.">isoburn_toc_session_get_tracks</a>(
<a name="l00634"></a>00634                                       <span class="keyword">struct</span> isoburn_toc_session *s, <span class="keywordtype">int</span> *num);
<a name="l00635"></a>00635 
<a name="l00636"></a>00636 <span class="comment"></span>
<a name="l00637"></a>00637 <span class="comment">/** Obtain a copy of the entry which describes a particular track.</span>
<a name="l00638"></a>00638 <span class="comment">    Wrapper for: burn_track_get_entry()</span>
<a name="l00639"></a>00639 <span class="comment">    @since 0.1.6</span>
<a name="l00640"></a>00640 <span class="comment">    @param t The track handle</span>
<a name="l00641"></a>00641 <span class="comment">    @param entry A pointer to memory provided by the caller. It will be filled</span>
<a name="l00642"></a>00642 <span class="comment">                 with info according to struct burn_toc_entry as defined</span>
<a name="l00643"></a>00643 <span class="comment">                 in libburn.h</span>
<a name="l00644"></a>00644 <span class="comment">*/</span>
<a name="l00645"></a>00645 <span class="keywordtype">void</span> <a class="code" href="libisoburn_8h.html#a1379c505013f8011444b25a2d7861da4" title="Obtain a copy of the entry which describes a particular track.">isoburn_toc_track_get_entry</a>(<span class="keyword">struct</span> isoburn_toc_track *t,
<a name="l00646"></a>00646                                  <span class="keyword">struct</span> burn_toc_entry *entry);
<a name="l00647"></a>00647 
<a name="l00648"></a>00648 <span class="comment"></span>
<a name="l00649"></a>00649 <span class="comment">/** Obtain eventual ISO image parameters of an emulated track. This info was</span>
<a name="l00650"></a>00650 <span class="comment">    gained with much effort and thus gets cached in the track object.</span>
<a name="l00651"></a>00651 <span class="comment">    If this call returns 1 then one can save a call of isoburn_read_iso_head()</span>
<a name="l00652"></a>00652 <span class="comment">    with return mode 1 which could cause an expensive read operation.</span>
<a name="l00653"></a>00653 <span class="comment">    @since 0.4.0</span>
<a name="l00654"></a>00654 <span class="comment">    @param t            The track handle</span>
<a name="l00655"></a>00655 <span class="comment">    @param start_lba    Returns the start address of the ISO session</span>
<a name="l00656"></a>00656 <span class="comment">    @param image_blocks Returns the number of 2048 bytes blocks</span>
<a name="l00657"></a>00657 <span class="comment">    @param volid        Caller provided memory for the volume id</span>
<a name="l00658"></a>00658 <span class="comment">    @param flag         unused yet, submit 0</span>
<a name="l00659"></a>00659 <span class="comment">    @return             0= not an emulated ISO session , 1= reply is valid</span>
<a name="l00660"></a>00660 <span class="comment">*/</span>
<a name="l00661"></a>00661 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a60d584c5ceaadf4e108b2882f14b5909" title="Obtain eventual ISO image parameters of an emulated track.">isoburn_toc_track_get_emul</a>(<span class="keyword">struct</span> isoburn_toc_track *t, <span class="keywordtype">int</span> *start_lba,
<a name="l00662"></a>00662                                <span class="keywordtype">int</span> *image_blocks, <span class="keywordtype">char</span> volid[33], <span class="keywordtype">int</span> flag);
<a name="l00663"></a>00663 
<a name="l00664"></a>00664 
<a name="l00665"></a>00665 <span class="comment"></span>
<a name="l00666"></a>00666 <span class="comment">/** Release the memory associated with a master handle of a medium.</span>
<a name="l00667"></a>00667 <span class="comment">    The handle is invalid afterwards and may not be used any more.</span>
<a name="l00668"></a>00668 <span class="comment">    Wrapper for: burn_disc_free()</span>
<a name="l00669"></a>00669 <span class="comment">    @since 0.1.6</span>
<a name="l00670"></a>00670 <span class="comment">    @param disc The master handle of the medium</span>
<a name="l00671"></a>00671 <span class="comment">*/</span>
<a name="l00672"></a>00672 <span class="keywordtype">void</span> <a class="code" href="libisoburn_8h.html#ab2c5f1230b0cabbb15c88358e58a9a6c" title="Release the memory associated with a master handle of a medium.">isoburn_toc_disc_free</a>(<span class="keyword">struct</span> isoburn_toc_disc *disc);
<a name="l00673"></a>00673 
<a name="l00674"></a>00674 <span class="comment"></span>
<a name="l00675"></a>00675 <span class="comment">/** Try whether the data at the given address look like a ISO 9660</span>
<a name="l00676"></a>00676 <span class="comment">    image header and obtain its alleged size. Depending on the info mode</span>
<a name="l00677"></a>00677 <span class="comment">    one other string of text information can be retrieved too.</span>
<a name="l00678"></a>00678 <span class="comment">    @since 0.1.6</span>
<a name="l00679"></a>00679 <span class="comment">    @param d     The drive with the medium to inspect</span>
<a name="l00680"></a>00680 <span class="comment">    @param lba   The block number from where to read</span>
<a name="l00681"></a>00681 <span class="comment">    @param image_blocks  Returns the number of 2048 bytes blocks in the session</span>
<a name="l00682"></a>00682 <span class="comment">    @param info  Caller provided memory, enough to take eventual info reply</span>
<a name="l00683"></a>00683 <span class="comment">    @param flag bit0-7: info return mode</span>
<a name="l00684"></a>00684 <span class="comment">                 0= do not return anything in info (do not even touch it)</span>
<a name="l00685"></a>00685 <span class="comment">                 1= copy volume id to info (info needs 33 bytes)</span>
<a name="l00686"></a>00686 <span class="comment">                 2= @since 0.2.2 :</span>
<a name="l00687"></a>00687 <span class="comment">                    copy 64 kB header to info (needs 65536 bytes) </span>
<a name="l00688"></a>00688 <span class="comment">                bit13= @since 0.2.2:</span>
<a name="l00689"></a>00689 <span class="comment">                      do not read head from medium but use first 64 kB from</span>
<a name="l00690"></a>00690 <span class="comment">                      info</span>
<a name="l00691"></a>00691 <span class="comment">                bit14= check both half buffers (not only second)</span>
<a name="l00692"></a>00692 <span class="comment">                       return 2 if found in first block</span>
<a name="l00693"></a>00693 <span class="comment">                bit15= return -1 on read error</span>
<a name="l00694"></a>00694 <span class="comment">    @return &gt;0 seems to be a valid ISO image, 0 format not recognized, &lt;0 error</span>
<a name="l00695"></a>00695 <span class="comment">*/</span>
<a name="l00696"></a>00696 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a497e01b5e817364eabb606abaa5539ae" title="Try whether the data at the given address look like a ISO 9660 image header and obtain its alleged si...">isoburn_read_iso_head</a>(<span class="keyword">struct</span> burn_drive *d, <span class="keywordtype">int</span> lba,
<a name="l00697"></a>00697                           <span class="keywordtype">int</span> *image_blocks, <span class="keywordtype">char</span> *info, <span class="keywordtype">int</span> flag);
<a name="l00698"></a>00698 
<a name="l00699"></a>00699 <span class="comment"></span>
<a name="l00700"></a>00700 <span class="comment">/** Try to convert the given entity address into various entity addresses</span>
<a name="l00701"></a>00701 <span class="comment">    which would describe it.</span>
<a name="l00702"></a>00702 <span class="comment">    Note: Sessions and tracks are counted beginning with 1, not with 0.</span>
<a name="l00703"></a>00703 <span class="comment">    @since 0.3.2</span>
<a name="l00704"></a>00704 <span class="comment">    @param d        The drive where msc1 is to be set</span>
<a name="l00705"></a>00705 <span class="comment">    @param adr_mode Determines how to interpret the input adr_value.</span>
<a name="l00706"></a>00706 <span class="comment">                    If adr_value shall represent a number then decimal ASCII</span>
<a name="l00707"></a>00707 <span class="comment">                    digits are expected.</span>
<a name="l00708"></a>00708 <span class="comment">                    0= start lba of last session in TOC, ignore adr_value</span>
<a name="l00709"></a>00709 <span class="comment">                    1= start lba of session number given by adr_value</span>
<a name="l00710"></a>00710 <span class="comment">                    2= start lba of track given number by adr_value</span>
<a name="l00711"></a>00711 <span class="comment">                    3= adr_value itself is the lba to be used</span>
<a name="l00712"></a>00712 <span class="comment">                    4= start lba of last session with volume id</span>
<a name="l00713"></a>00713 <span class="comment">                       given by adr_value</span>
<a name="l00714"></a>00714 <span class="comment">    @param adr_value A string describing the value to be eventually used.</span>
<a name="l00715"></a>00715 <span class="comment">    @param lba       returns the block address of the entity, -1 means invalid</span>
<a name="l00716"></a>00716 <span class="comment">    @param track     returns the track number of the entity, -1 means invalid</span>
<a name="l00717"></a>00717 <span class="comment">    @param session   returns the session number of the entity, -1 means invalid</span>
<a name="l00718"></a>00718 <span class="comment">    @param volid     returns the volume id of the entity if it is a ISO session</span>
<a name="l00719"></a>00719 <span class="comment">    @param flag      Bitfield for control purposes.</span>
<a name="l00720"></a>00720 <span class="comment">                     bit2= with adr_mode 4: use adr_value as regular expression</span>
<a name="l00721"></a>00721 <span class="comment">    @return          &lt;=0 error , 1 ok, ISO session, 2 ok, not an ISO session</span>
<a name="l00722"></a>00722 <span class="comment">*/</span>
<a name="l00723"></a>00723 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a0c358e49233528b7625bf3be0cbf00ec" title="Try to convert the given entity address into various entity addresses which would describe it...">isoburn_get_mount_params</a>(<span class="keyword">struct</span> burn_drive *d,
<a name="l00724"></a>00724                              <span class="keywordtype">int</span> adr_mode, <span class="keywordtype">char</span> *adr_value,
<a name="l00725"></a>00725                              <span class="keywordtype">int</span> *lba, <span class="keywordtype">int</span> *track, <span class="keywordtype">int</span> *session,
<a name="l00726"></a>00726                              <span class="keywordtype">char</span> volid[33], <span class="keywordtype">int</span> flag);
<a name="l00727"></a>00727 
<a name="l00728"></a>00728 
<a name="l00729"></a>00729 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l00730"></a>00730 <span class="comment">/*</span>
<a name="l00731"></a>00731 <span class="comment"></span>
<a name="l00732"></a>00732 <span class="comment">  Options for image reading.</span>
<a name="l00733"></a>00733 <span class="comment"></span>
<a name="l00734"></a>00734 <span class="comment">  An application shall create an option set object by isoburn_ropt_new(),</span>
<a name="l00735"></a>00735 <span class="comment">  program it by isoburn_ropt_set_*(), use it with isoburn_read_image(),</span>
<a name="l00736"></a>00736 <span class="comment">  and finally delete it by isoburn_ropt_destroy().</span>
<a name="l00737"></a>00737 <span class="comment"></span>
<a name="l00738"></a>00738 <span class="comment">*/</span>
<a name="l00739"></a>00739 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l00740"></a>00740 
<a name="l00741"></a>00741 <span class="keyword">struct </span>isoburn_read_opts;
<a name="l00742"></a>00742 <span class="comment"></span>
<a name="l00743"></a>00743 <span class="comment">/** Produces a set of image read options, initialized with default values.</span>
<a name="l00744"></a>00744 <span class="comment">    @since 0.1.0</span>
<a name="l00745"></a>00745 <span class="comment">    @param o the newly created option set object</span>
<a name="l00746"></a>00746 <span class="comment">    @param flag  Bitfield for control purposes. Submit 0 for now.</span>
<a name="l00747"></a>00747 <span class="comment">    @return 1=ok , &lt;0 = failure</span>
<a name="l00748"></a>00748 <span class="comment">*/</span>
<a name="l00749"></a>00749 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#afd49e3c76e806a1f0bfadf32b3582e28" title="Produces a set of image read options, initialized with default values.">isoburn_ropt_new</a>(<span class="keyword">struct</span> isoburn_read_opts **o, <span class="keywordtype">int</span> flag);
<a name="l00750"></a>00750 
<a name="l00751"></a>00751 <span class="comment"></span>
<a name="l00752"></a>00752 <span class="comment">/** Deletes an option set which was created by isoburn_ropt_new().</span>
<a name="l00753"></a>00753 <span class="comment">    @since 0.1.0</span>
<a name="l00754"></a>00754 <span class="comment">    @param o The option set to work on</span>
<a name="l00755"></a>00755 <span class="comment">    @param flag  Bitfield for control purposes. Submit 0 for now.</span>
<a name="l00756"></a>00756 <span class="comment">    @return 1= **o destroyed , 0= *o was already NULL (harmless)</span>
<a name="l00757"></a>00757 <span class="comment">*/</span>
<a name="l00758"></a>00758 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a102229ed3d6485db02e9bc98e113e0a6" title="Deletes an option set which was created by isoburn_ropt_new().">isoburn_ropt_destroy</a>(<span class="keyword">struct</span> isoburn_read_opts **o, <span class="keywordtype">int</span> flag);
<a name="l00759"></a>00759 
<a name="l00760"></a>00760 <span class="comment"></span>
<a name="l00761"></a>00761 <span class="comment">/** Which existing ISO 9660 extensions in the image to read or not to read.</span>
<a name="l00762"></a>00762 <span class="comment">    Whether to read the content of an existing image at all.</span>
<a name="l00763"></a>00763 <span class="comment">    The bits can be combined by | resp. inquired by &amp;.</span>
<a name="l00764"></a>00764 <span class="comment">    @since 0.1.0</span>
<a name="l00765"></a>00765 <span class="comment">    @param ext Bitfield:</span>
<a name="l00766"></a>00766 <span class="comment">               bit0= norock</span>
<a name="l00767"></a>00767 <span class="comment">                     Do not read Rock Ridge extensions</span>
<a name="l00768"></a>00768 <span class="comment">               bit1= nojoliet</span>
<a name="l00769"></a>00769 <span class="comment">                     Do not read Joliet extensions</span>
<a name="l00770"></a>00770 <span class="comment">               bit2= noiso1999</span>
<a name="l00771"></a>00771 <span class="comment">                     Do not read ISO 9660:1999 enhanced tree</span>
<a name="l00772"></a>00772 <span class="comment">               bit3= preferjoliet</span>
<a name="l00773"></a>00773 <span class="comment">                     When both Joliet and RR extensions are present, the RR</span>
<a name="l00774"></a>00774 <span class="comment">                     tree is used. If you prefer using Joliet, set this to 1.</span>
<a name="l00775"></a>00775 <span class="comment">               bit4= pretend_blank</span>
<a name="l00776"></a>00776 <span class="comment">                     Always create empty image.Ignore any image on input drive.</span>
<a name="l00777"></a>00777 <span class="comment">               bit5= noaaip</span>
<a name="l00778"></a>00778 <span class="comment">                     @since 0.3.4</span>
<a name="l00779"></a>00779 <span class="comment">                     Do not load AAIP information from image. This information</span>
<a name="l00780"></a>00780 <span class="comment">                     eventually contains ACL or XFS-style Extended Attributes.</span>
<a name="l00781"></a>00781 <span class="comment">               bit6= noacl</span>
<a name="l00782"></a>00782 <span class="comment">                     @since 0.3.4</span>
<a name="l00783"></a>00783 <span class="comment">                     Do not obtain ACL from external filesystem objects (e.g.</span>
<a name="l00784"></a>00784 <span class="comment">                     local filesystem files).</span>
<a name="l00785"></a>00785 <span class="comment">               bit7= noea</span>
<a name="l00786"></a>00786 <span class="comment">                     @since 0.3.4</span>
<a name="l00787"></a>00787 <span class="comment">                     Do not obtain XFS-style Extended Attributes from external</span>
<a name="l00788"></a>00788 <span class="comment">                     filesystem objects (e.g.  local filesystem files).</span>
<a name="l00789"></a>00789 <span class="comment">               bit8= noino</span>
<a name="l00790"></a>00790 <span class="comment">                     @since 0.4.0</span>
<a name="l00791"></a>00791 <span class="comment">                     Do not load eventual inode numbers from RRIP entry PX,</span>
<a name="l00792"></a>00792 <span class="comment">                     but generate a new unique inode number for each imported</span>
<a name="l00793"></a>00793 <span class="comment">                     IsoNode object.</span>
<a name="l00794"></a>00794 <span class="comment">                     PX inode numbers allow to mark families of hardlinks by</span>
<a name="l00795"></a>00795 <span class="comment">                     giving all family members the same inode number. libisofs</span>
<a name="l00796"></a>00796 <span class="comment">                     keeps the PX inode numbers unaltered when IsoNode objects</span>
<a name="l00797"></a>00797 <span class="comment">                     get written into an ISO image.</span>
<a name="l00798"></a>00798 <span class="comment">               bit9= nomd5</span>
<a name="l00799"></a>00799 <span class="comment">                     @since 0.4.2</span>
<a name="l00800"></a>00800 <span class="comment">                     Do not load the eventual MD5 checksum array.</span>
<a name="l00801"></a>00801 <span class="comment">                     Do not check eventual session_md5 tags.</span>
<a name="l00802"></a>00802 <span class="comment">              bit10= nomd5tag</span>
<a name="l00803"></a>00803 <span class="comment">                     @since 1.0.4</span>
<a name="l00804"></a>00804 <span class="comment">                     Do not check eventual session_md5 tags although bit9</span>
<a name="l00805"></a>00805 <span class="comment">                     is not set.</span>
<a name="l00806"></a>00806 <span class="comment">    @return    1 success, &lt;=0 failure</span>
<a name="l00807"></a>00807 <span class="comment">*/</span>
<a name="l00808"></a><a class="code" href="libisoburn_8h.html#a394bb48f1726cca237f9987f7a3b8cd7">00808</a> <span class="preprocessor">#define isoburn_ropt_norock         1</span>
<a name="l00809"></a><a class="code" href="libisoburn_8h.html#afcac1b2e889c51a6c99b6c9a917b2220">00809</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_nojoliet       2</span>
<a name="l00810"></a><a class="code" href="libisoburn_8h.html#abc151b239b42570d4c0e973915ca0244">00810</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_noiso1999      4</span>
<a name="l00811"></a><a class="code" href="libisoburn_8h.html#a644f2579bcce5c5bf20d524adb4b038a">00811</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_preferjoliet   8</span>
<a name="l00812"></a><a class="code" href="libisoburn_8h.html#a6bd94239eaa91b157a9db5928079ed07">00812</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_pretend_blank 16</span>
<a name="l00813"></a><a class="code" href="libisoburn_8h.html#a13d9a71188cf60f0b6727310fdf73301">00813</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_noaaip        32</span>
<a name="l00814"></a><a class="code" href="libisoburn_8h.html#ac8f0118d2e6a3d025fb00afdfadbe5ca">00814</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_noacl         64</span>
<a name="l00815"></a><a class="code" href="libisoburn_8h.html#a2633f4ef48f2c97116e270708e9e841e">00815</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_noea         128</span>
<a name="l00816"></a><a class="code" href="libisoburn_8h.html#a6c9ae6bfd14c7ffac9750fb4e2284c1e">00816</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_noino        256</span>
<a name="l00817"></a><a class="code" href="libisoburn_8h.html#aa73791a3ccfdeb82feb9c2cb10054afb">00817</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_nomd5        512</span>
<a name="l00818"></a><a class="code" href="libisoburn_8h.html#a664d112c0a2537aa9fd0f73f8a5ce1be">00818</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_nomd5tag    1024</span>
<a name="l00819"></a>00819 <span class="preprocessor"></span>
<a name="l00820"></a>00820 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#af66a66b76e7f1c77b796d9045b019fe9">isoburn_ropt_set_extensions</a>(<span class="keyword">struct</span> isoburn_read_opts *o, <span class="keywordtype">int</span> ext);
<a name="l00821"></a>00821 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#afdda19c029386e610306b0e7ed89535f">isoburn_ropt_get_extensions</a>(<span class="keyword">struct</span> isoburn_read_opts *o, <span class="keywordtype">int</span> *ext);
<a name="l00822"></a>00822 
<a name="l00823"></a>00823 <span class="comment"></span>
<a name="l00824"></a>00824 <span class="comment">/** Default attributes to use if no RockRidge extension gets loaded.</span>
<a name="l00825"></a>00825 <span class="comment">    @since 0.1.0</span>
<a name="l00826"></a>00826 <span class="comment">    @param o    The option set to work on</span>
<a name="l00827"></a>00827 <span class="comment">    @param uid  user id number (see /etc/passwd)</span>
<a name="l00828"></a>00828 <span class="comment">    @param gid  group id number (see /etc/group)</span>
<a name="l00829"></a>00829 <span class="comment">    @param mode  permissions (not file type) as of man 2 stat.</span>
<a name="l00830"></a>00830 <span class="comment">                 With directories, r-permissions will automatically imply</span>
<a name="l00831"></a>00831 <span class="comment">                 x-permissions. See isoburn_ropt_set_default_dirperms() below.</span>
<a name="l00832"></a>00832 <span class="comment">    @return      1 success, &lt;=0 failure</span>
<a name="l00833"></a>00833 <span class="comment">*/</span>
<a name="l00834"></a>00834 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a699b16d196c1e4a1c862638d638f362c" title="Default attributes to use if no RockRidge extension gets loaded.">isoburn_ropt_set_default_perms</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00835"></a>00835                                    uid_t uid, gid_t gid, mode_t mode);
<a name="l00836"></a>00836 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ad5191b91f46e178e7b6a773f48f64c0c">isoburn_ropt_get_default_perms</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00837"></a>00837                                    uid_t *uid, gid_t *gid, mode_t *mode);
<a name="l00838"></a>00838 <span class="comment"></span>
<a name="l00839"></a>00839 <span class="comment">/** Default attributes to use on directories if no RockRidge extension</span>
<a name="l00840"></a>00840 <span class="comment">    gets loaded.</span>
<a name="l00841"></a>00841 <span class="comment">    Above call isoburn_ropt_set_default_perms() automatically adds</span>
<a name="l00842"></a>00842 <span class="comment">    x-permissions to r-permissions for directories. This call here may</span>
<a name="l00843"></a>00843 <span class="comment">    be done afterwards to set independend permissions for directories,</span>
<a name="l00844"></a>00844 <span class="comment">    especially to override the automatically added x-permissions.</span>
<a name="l00845"></a>00845 <span class="comment">    @since 0.1.0</span>
<a name="l00846"></a>00846 <span class="comment">    @param o    The option set to work on</span>
<a name="l00847"></a>00847 <span class="comment">    @param mode permissions (not file type) as of man 2 stat.</span>
<a name="l00848"></a>00848 <span class="comment">    @return     1 success, &lt;=0 failure</span>
<a name="l00849"></a>00849 <span class="comment">*/</span>
<a name="l00850"></a>00850 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a3e3a4f4e76f5bd5de5018725f2e977e7" title="Default attributes to use on directories if no RockRidge extension gets loaded.">isoburn_ropt_set_default_dirperms</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00851"></a>00851                                       mode_t mode);
<a name="l00852"></a>00852 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ae5f6cdd66e49b14a95130a2fe0f2c854">isoburn_ropt_get_default_dirperms</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00853"></a>00853                                       mode_t *mode);
<a name="l00854"></a>00854 
<a name="l00855"></a>00855 <span class="comment"></span>
<a name="l00856"></a>00856 <span class="comment">/** Set the character set for reading RR file names from ISO images.</span>
<a name="l00857"></a>00857 <span class="comment">    @since 0.1.0</span>
<a name="l00858"></a>00858 <span class="comment">    @param o             The option set to work on</span>
<a name="l00859"></a>00859 <span class="comment">    @param input_charset Set this to NULL to use the default locale charset</span>
<a name="l00860"></a>00860 <span class="comment">                         For selecting a particular character set, submit its</span>
<a name="l00861"></a>00861 <span class="comment">                         name, e.g. as listed by program iconv -l.</span>
<a name="l00862"></a>00862 <span class="comment">                         Example: &quot;UTF-8&quot;. </span>
<a name="l00863"></a>00863 <span class="comment">    @return              1 success, &lt;=0 failure</span>
<a name="l00864"></a>00864 <span class="comment">*/</span>
<a name="l00865"></a>00865 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#af79c3e9d6a0d6736c4fb672d6c645c5e" title="Set the character set for reading RR file names from ISO images.">isoburn_ropt_set_input_charset</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00866"></a>00866                                    <span class="keywordtype">char</span> *input_charset);
<a name="l00867"></a>00867 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a36dc54109456db1036e8419f7847fee8">isoburn_ropt_get_input_charset</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00868"></a>00868                                    <span class="keywordtype">char</span> **input_charset);
<a name="l00869"></a>00869 
<a name="l00870"></a>00870 <span class="comment"></span>
<a name="l00871"></a>00871 <span class="comment">/**</span>
<a name="l00872"></a>00872 <span class="comment">    Enable or disable methods to automatically choose an input charset.</span>
<a name="l00873"></a>00873 <span class="comment">    This eventually overrides the name set via isoburn_ropt_set_input_charset()</span>
<a name="l00874"></a>00874 <span class="comment">    @since 0.3.8</span>
<a name="l00875"></a>00875 <span class="comment">    @param o      The option set to work on</span>
<a name="l00876"></a>00876 <span class="comment">    @param mode   Bitfield for control purposes:</span>
<a name="l00877"></a>00877 <span class="comment">                  bit0= allow to set the input character set automatically from</span>
<a name="l00878"></a>00878 <span class="comment">                        attribute &quot;isofs.cs&quot; of root directory.</span>
<a name="l00879"></a>00879 <span class="comment">                  Submit any other bits with value 0.</span>
<a name="l00880"></a>00880 <span class="comment">    @return       1 success, &lt;=0 failure</span>
<a name="l00881"></a>00881 <span class="comment"> */</span>
<a name="l00882"></a>00882 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a446dc34fa13faebb12a24d9b676383b3" title="Enable or disable methods to automatically choose an input charset.">isoburn_ropt_set_auto_incharset</a>(<span class="keyword">struct</span> isoburn_read_opts *o, <span class="keywordtype">int</span> mode);
<a name="l00883"></a>00883 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a09ffa7e518972d9e62377720dace65eb">isoburn_ropt_get_auto_incharset</a>(<span class="keyword">struct</span> isoburn_read_opts *o, <span class="keywordtype">int</span> *mode);
<a name="l00884"></a>00884 
<a name="l00885"></a>00885 <span class="comment"></span>
<a name="l00886"></a>00886 <span class="comment">/** Control an offset to be applied to all block address pointers in the ISO</span>
<a name="l00887"></a>00887 <span class="comment">    image in order to compensate for an eventual displacement of the image</span>
<a name="l00888"></a>00888 <span class="comment">    relative to the start block address for which it was produced.</span>
<a name="l00889"></a>00889 <span class="comment">    E.g. if track number 2 from CD gets copied into a disk file and shall then</span>
<a name="l00890"></a>00890 <span class="comment">    be loaded as ISO filesystem, then the directory tree and all data file</span>
<a name="l00891"></a>00891 <span class="comment">    content of the track copy will become readable by setting the track start</span>
<a name="l00892"></a>00892 <span class="comment">    address as displacement and -1 as displacement_sign.</span>
<a name="l00893"></a>00893 <span class="comment">    Data file content outside the track will of course not be accessible and</span>
<a name="l00894"></a>00894 <span class="comment">    eventually produce read errors.</span>
<a name="l00895"></a>00895 <span class="comment">    @since 0.6.6</span>
<a name="l00896"></a>00896 <span class="comment">    @param o                  The option set to work on</span>
<a name="l00897"></a>00897 <span class="comment">    @param displacement       0 or a positive number</span>
<a name="l00898"></a>00898 <span class="comment">    @param displacement_sign  Determines wether to add or subtract displacement</span>
<a name="l00899"></a>00899 <span class="comment">                              to block addresses before applying them to the</span>
<a name="l00900"></a>00900 <span class="comment">                              storage object for reading:</span>
<a name="l00901"></a>00901 <span class="comment">                              +1 = add , -1= subtract , else keep unaltered</span>
<a name="l00902"></a>00902 <span class="comment">*/</span>
<a name="l00903"></a>00903 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a12fb5b05223c507c0aaee737e69c4843" title="Control an offset to be applied to all block address pointers in the ISO image in order to compensate...">isoburn_ropt_set_displacement</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00904"></a>00904                                uint32_t displacement, <span class="keywordtype">int</span> displacement_sign);
<a name="l00905"></a>00905 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#aceaeb9159f090815797246c691a1df63">isoburn_ropt_get_displacement</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00906"></a>00906                                uint32_t *displacement, <span class="keywordtype">int</span> *displacement_sign);
<a name="l00907"></a>00907 
<a name="l00908"></a>00908 <span class="comment">/* If you get here because of a compilation error like</span>
<a name="l00909"></a>00909 <span class="comment"></span>
<a name="l00910"></a>00910 <span class="comment">       /usr/include/libisoburn/libisoburn.h:895: error:</span>
<a name="l00911"></a>00911 <span class="comment">       expected declaration specifiers or &#39;...&#39; before &#39;uint32_t&#39;</span>
<a name="l00912"></a>00912 <span class="comment"></span>
<a name="l00913"></a>00913 <span class="comment">   then see above paragraph &quot;Application Constraints&quot; about the definition</span>
<a name="l00914"></a>00914 <span class="comment">   of uint32_t.</span>
<a name="l00915"></a>00915 <span class="comment">*/</span>
<a name="l00916"></a>00916 
<a name="l00917"></a>00917 <span class="comment"></span>
<a name="l00918"></a>00918 <span class="comment">/** After calling function isoburn_read_image() there are informations</span>
<a name="l00919"></a>00919 <span class="comment">    available in the option set.</span>
<a name="l00920"></a>00920 <span class="comment">    This info can be obtained as bits in parameter has_what. Like:</span>
<a name="l00921"></a>00921 <span class="comment">      joliet_available = (has_what &amp; isoburn_ropt_has_joliet);</span>
<a name="l00922"></a>00922 <span class="comment">    @since 0.1.0</span>
<a name="l00923"></a>00923 <span class="comment">    @param o     The option set to work on</span>
<a name="l00924"></a>00924 <span class="comment">    @param size  Number of image data blocks, 2048 bytes each.</span>
<a name="l00925"></a>00925 <span class="comment">    @param has_what Bitfield:</span>
<a name="l00926"></a>00926 <span class="comment">           bit0= has_rockridge</span>
<a name="l00927"></a>00927 <span class="comment">                 RockRidge extension info is available (POSIX filesystem)</span>
<a name="l00928"></a>00928 <span class="comment">           bit1= has_joliet</span>
<a name="l00929"></a>00929 <span class="comment">                 Joliet extension info is available (suitable for MS-Windows)</span>
<a name="l00930"></a>00930 <span class="comment">           bit2= has_iso1999</span>
<a name="l00931"></a>00931 <span class="comment">                 ISO version 2 Enhanced Volume Descriptor is available.</span>
<a name="l00932"></a>00932 <span class="comment">                 This is rather exotic.</span>
<a name="l00933"></a>00933 <span class="comment">           bit3= has_el_torito</span>
<a name="l00934"></a>00934 <span class="comment">                 El-Torito boot record is present</span>
<a name="l00935"></a>00935 <span class="comment">    @return  1 success, &lt;=0 failure</span>
<a name="l00936"></a>00936 <span class="comment">*/</span>
<a name="l00937"></a><a class="code" href="libisoburn_8h.html#a024b18d6c8a47cbe6e64e79fb8ec27f2">00937</a> <span class="preprocessor">#define isoburn_ropt_has_rockridge 1</span>
<a name="l00938"></a><a class="code" href="libisoburn_8h.html#a12ec8766f28f6454e337fb8d78ddc5e6">00938</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_has_joliet    2</span>
<a name="l00939"></a><a class="code" href="libisoburn_8h.html#a3f050adb899292f7ed25dc1ba6916049">00939</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_has_iso1999   4</span>
<a name="l00940"></a><a class="code" href="libisoburn_8h.html#a825263bf06ceac1cd22808514d94de1d">00940</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_ropt_has_el_torito 8</span>
<a name="l00941"></a>00941 <span class="preprocessor"></span>
<a name="l00942"></a>00942 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a1f86a92e2e15b0588a0fcc38f3f09995">isoburn_ropt_get_size_what</a>(<span class="keyword">struct</span> isoburn_read_opts *o,
<a name="l00943"></a>00943                                uint32_t *size, <span class="keywordtype">int</span> *has_what);
<a name="l00944"></a>00944 
<a name="l00945"></a>00945 <span class="comment">/* ts A90122 */</span>
<a name="l00946"></a>00946 <span class="comment">/* &gt;&gt;&gt; to be implemented:</span>
<a name="l00947"></a>00947 <span class="comment">#define isoburn_ropt_has_acl          64</span>
<a name="l00948"></a>00948 <span class="comment">#define isoburn_ropt_has_ea          128</span>
<a name="l00949"></a>00949 <span class="comment">*/</span>
<a name="l00950"></a>00950 
<a name="l00951"></a>00951 
<a name="l00952"></a>00952 
<a name="l00953"></a>00953 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l00954"></a>00954 <span class="comment">/*                      End of Options for image reading                   */</span>
<a name="l00955"></a>00955 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l00956"></a>00956 
<a name="l00957"></a>00957 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l00958"></a>00958 <span class="comment">/*</span>
<a name="l00959"></a>00959 <span class="comment"></span>
<a name="l00960"></a>00960 <span class="comment">  Options for image generation by libisofs and image transport to libburn.</span>
<a name="l00961"></a>00961 <span class="comment"></span>
<a name="l00962"></a>00962 <span class="comment">  An application shall create an option set by isoburn_igopt_new(),</span>
<a name="l00963"></a>00963 <span class="comment">  program it by isoburn_igopt_set_*(), use it with either</span>
<a name="l00964"></a>00964 <span class="comment">  isoburn_prepare_new_image() or isoburn_prepare_disc(), and finally delete</span>
<a name="l00965"></a>00965 <span class="comment">  it by isoburn_igopt_destroy().</span>
<a name="l00966"></a>00966 <span class="comment"></span>
<a name="l00967"></a>00967 <span class="comment">*/</span>
<a name="l00968"></a>00968 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l00969"></a>00969 
<a name="l00970"></a>00970 <span class="keyword">struct </span>isoburn_imgen_opts;
<a name="l00971"></a>00971 <span class="comment"></span>
<a name="l00972"></a>00972 <span class="comment">/** Produces a set of generation and transfer options, initialized with default</span>
<a name="l00973"></a>00973 <span class="comment">    values.</span>
<a name="l00974"></a>00974 <span class="comment">    @since 0.1.0</span>
<a name="l00975"></a>00975 <span class="comment">    @param o the newly created option set object</span>
<a name="l00976"></a>00976 <span class="comment">    @param flag  Bitfield for control purposes. Submit 0 for now.</span>
<a name="l00977"></a>00977 <span class="comment">    @return 1=ok , &lt;0 = failure</span>
<a name="l00978"></a>00978 <span class="comment">*/</span>
<a name="l00979"></a>00979 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#afe8634f299c837274e026f760f8f07b8" title="Produces a set of generation and transfer options, initialized with default values.">isoburn_igopt_new</a>(<span class="keyword">struct</span> isoburn_imgen_opts **o, <span class="keywordtype">int</span> flag);
<a name="l00980"></a>00980 
<a name="l00981"></a>00981 <span class="comment"></span>
<a name="l00982"></a>00982 <span class="comment">/** Deletes an option set which was created by isoburn_igopt_new().</span>
<a name="l00983"></a>00983 <span class="comment">    @since 0.1.0</span>
<a name="l00984"></a>00984 <span class="comment">    @param o     The option set to give up</span>
<a name="l00985"></a>00985 <span class="comment">    @param flag  Bitfield for control purposes. Submit 0 for now.</span>
<a name="l00986"></a>00986 <span class="comment">    @return 1= **o destroyed , 0= *o was already NULL (harmless)</span>
<a name="l00987"></a>00987 <span class="comment">*/</span>
<a name="l00988"></a>00988 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a66598ec6ace42a9266fd390e0b46868b" title="Deletes an option set which was created by isoburn_igopt_new().">isoburn_igopt_destroy</a>(<span class="keyword">struct</span> isoburn_imgen_opts **o, <span class="keywordtype">int</span> flag);
<a name="l00989"></a>00989 
<a name="l00990"></a>00990 <span class="comment"></span>
<a name="l00991"></a>00991 <span class="comment">/** ISO level to write at.</span>
<a name="l00992"></a>00992 <span class="comment">    @since 0.1.0</span>
<a name="l00993"></a>00993 <span class="comment">    @param o     The option set to work on</span>
<a name="l00994"></a>00994 <span class="comment">    @param level is a term of the ISO 9660 standard. It should be one of:</span>
<a name="l00995"></a>00995 <span class="comment">                 1= filenames restricted to form 8.3</span>
<a name="l00996"></a>00996 <span class="comment">                 2= filenames allowed up to 31 characters</span>
<a name="l00997"></a>00997 <span class="comment">                 3= file content may be larger than 4 GB - 1.</span>
<a name="l00998"></a>00998 <span class="comment">    @return      1 success, &lt;=0 failure</span>
<a name="l00999"></a>00999 <span class="comment">*/</span>
<a name="l01000"></a>01000 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ae3c8be579e14121451fe01a66d6ab146" title="ISO level to write at.">isoburn_igopt_set_level</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> level);
<a name="l01001"></a>01001 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a7ac9b90d61040933bb2a88ff46966072">isoburn_igopt_get_level</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> *level);
<a name="l01002"></a>01002 
<a name="l01003"></a>01003 <span class="comment"></span>
<a name="l01004"></a>01004 <span class="comment">/** Which extensions to support.</span>
<a name="l01005"></a>01005 <span class="comment">    @since 0.1.0</span>
<a name="l01006"></a>01006 <span class="comment">    @param o     The option set to work on</span>
<a name="l01007"></a>01007 <span class="comment">    @param ext Bitfield:</span>
<a name="l01008"></a>01008 <span class="comment">           bit0= rockridge</span>
<a name="l01009"></a>01009 <span class="comment">                 Rock Ridge extensions add POSIX file attributes like</span>
<a name="l01010"></a>01010 <span class="comment">                 owner, group, access permissions, long filenames. Very</span>
<a name="l01011"></a>01011 <span class="comment">                 advisable if the designed audience has Unix style systems.</span>
<a name="l01012"></a>01012 <span class="comment">           bit1= joliet</span>
<a name="l01013"></a>01013 <span class="comment">                 Longer filenames for Windows systems.</span>
<a name="l01014"></a>01014 <span class="comment">                 Weaker than RockRidge, but also readable with GNU/Linux.</span>
<a name="l01015"></a>01015 <span class="comment">           bit2= iso1999</span>
<a name="l01016"></a>01016 <span class="comment">                 This is rather exotic. Better do not surprise the readers.</span>
<a name="l01017"></a>01017 <span class="comment">           bit3= hardlinks</span>
<a name="l01018"></a>01018 <span class="comment">                 Enable hardlink consolidation. IsoNodes which refer to the</span>
<a name="l01019"></a>01019 <span class="comment">                 same source object and have the same properties will get</span>
<a name="l01020"></a>01020 <span class="comment">                 the same ISO image inode numbers.</span>
<a name="l01021"></a>01021 <span class="comment">                 If combined with isoburn_igopt_rrip_version_1_10 below,</span>
<a name="l01022"></a>01022 <span class="comment">                 then the PX entry layout of RRIP-1.12 will be used within</span>
<a name="l01023"></a>01023 <span class="comment">                 RRIP-1.10 (mkisofs does this without causing visible trouble).</span>
<a name="l01024"></a>01024 <span class="comment">           bit5= aaip</span>
<a name="l01025"></a>01025 <span class="comment">                 The libisofs specific SUSP based extension of ECMA-119 which</span>
<a name="l01026"></a>01026 <span class="comment">                 can encode ACL and XFS-style Extended Attributes.</span>
<a name="l01027"></a>01027 <span class="comment">           bit6= session_md5</span>
<a name="l01028"></a>01028 <span class="comment">                 @since 0.4.2</span>
<a name="l01029"></a>01029 <span class="comment">                 Produce and write MD5 checksum tags of superblock, directory</span>
<a name="l01030"></a>01030 <span class="comment">                 tree, and the whole session stream.</span>
<a name="l01031"></a>01031 <span class="comment">           bit7= file_md5</span>
<a name="l01032"></a>01032 <span class="comment">                 @since 0.4.2</span>
<a name="l01033"></a>01033 <span class="comment">                 Produce and write MD5 checksums for each single IsoFile.</span>
<a name="l01034"></a>01034 <span class="comment">           bit8= file_stability (only together with file_md5)</span>
<a name="l01035"></a>01035 <span class="comment">                 @since 0.4.2</span>
<a name="l01036"></a>01036 <span class="comment">                 Compute MD5 of each file before copying it into the image and</span>
<a name="l01037"></a>01037 <span class="comment">                 compare this with the MD5 of the actual copying. If they do</span>
<a name="l01038"></a>01038 <span class="comment">                 not match then issue MISHAP event.</span>
<a name="l01039"></a>01039 <span class="comment">                 See also libisofs.h  iso_write_opts_set_record_md5()</span>
<a name="l01040"></a>01040 <span class="comment">           bit9= no_emul_toc</span>
<a name="l01041"></a>01041 <span class="comment">                 @since 0.5.8</span>
<a name="l01042"></a>01042 <span class="comment">                 On overwriteable media or random access files do not write</span>
<a name="l01043"></a>01043 <span class="comment">                 the first session to LBA 32 and do not copy the first 64kB</span>
<a name="l01044"></a>01044 <span class="comment">                 of the first session to LBA 0, but rather write the first</span>
<a name="l01045"></a>01045 <span class="comment">                 session to LBA 0 directly.</span>
<a name="l01046"></a>01046 <span class="comment">          bit10= will_cancel</span>
<a name="l01047"></a>01047 <span class="comment">                 @since 0.6.6</span>
<a name="l01048"></a>01048 <span class="comment">                 Announce to libisofs that only the image size is desired</span>
<a name="l01049"></a>01049 <span class="comment">                 and that the write thread will be cancelled by</span>
<a name="l01050"></a>01050 <span class="comment">                 isoburn_cancel_prepared_write() before actual image writing</span>
<a name="l01051"></a>01051 <span class="comment">                 occurs. Without this, cancellation can cause a MISHAP event.</span>
<a name="l01052"></a>01052 <span class="comment">          bit11= old_empty</span>
<a name="l01053"></a>01053 <span class="comment">                 @since 1.0.2</span>
<a name="l01054"></a>01054 <span class="comment">                 Let symbolic links and device files point to block 0, and let</span>
<a name="l01055"></a>01055 <span class="comment">                 empty data files point to the address of the Volume Descriptor</span>
<a name="l01056"></a>01056 <span class="comment">                 Set Terminator. This was done by libisofs in the past.</span>
<a name="l01057"></a>01057 <span class="comment">                 By default there is now a single dedicated block of zero bytes</span>
<a name="l01058"></a>01058 <span class="comment">                 after the end of the directory trees, of which the address</span>
<a name="l01059"></a>01059 <span class="comment">                 is used for all files without own content.</span>
<a name="l01060"></a>01060 <span class="comment"></span>
<a name="l01061"></a>01061 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01062"></a>01062 <span class="comment">*/</span>
<a name="l01063"></a><a class="code" href="libisoburn_8h.html#aaeb44d1c64e7174ef447b8c2f127fa25">01063</a> <span class="preprocessor">#define isoburn_igopt_rockridge         1</span>
<a name="l01064"></a><a class="code" href="libisoburn_8h.html#a21a7d10fb13f1f537c778b260825ff70">01064</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_joliet            2</span>
<a name="l01065"></a><a class="code" href="libisoburn_8h.html#aefde6e441d27facb6305ea9bfc66c61d">01065</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_iso1999           4</span>
<a name="l01066"></a><a class="code" href="libisoburn_8h.html#ad72fef46bb4b448569f07202c6c79030">01066</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_hardlinks         8</span>
<a name="l01067"></a><a class="code" href="libisoburn_8h.html#ae268b9dc9c7734fa05c3a32e911cdd2f">01067</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_aaip             32</span>
<a name="l01068"></a><a class="code" href="libisoburn_8h.html#a1c3324ecaa513debb488116404e018e2">01068</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_session_md5      64</span>
<a name="l01069"></a><a class="code" href="libisoburn_8h.html#a07432fb5a1bf32e4687b4c706eced773">01069</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_file_md5        128</span>
<a name="l01070"></a><a class="code" href="libisoburn_8h.html#a380ff183e25354cb58a9f5bca120916d">01070</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_file_stability  256</span>
<a name="l01071"></a><a class="code" href="libisoburn_8h.html#a93c38842499b7b563dd946b7e483e1ee">01071</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_no_emul_toc     512</span>
<a name="l01072"></a><a class="code" href="libisoburn_8h.html#a1d1f5700ed39543e80cca2108862df94">01072</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_will_cancel    1024</span>
<a name="l01073"></a><a class="code" href="libisoburn_8h.html#a766dd0394363e6711cb82d3ed8be40df">01073</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_old_empty      2048</span>
<a name="l01074"></a>01074 <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a015d635128a8985505723fa7dd57d969">isoburn_igopt_set_extensions</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> ext);
<a name="l01075"></a>01075 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ae8ba10b8c15e6f30214fa89591c007eb">isoburn_igopt_get_extensions</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> *ext);
<a name="l01076"></a>01076 <span class="comment"></span>
<a name="l01077"></a>01077 <span class="comment">/** Relaxed constraints. Setting any of the bits to 1 break the specifications,</span>
<a name="l01078"></a>01078 <span class="comment">    but it is supposed to work on most moderns systems. Use with caution.</span>
<a name="l01079"></a>01079 <span class="comment">    @since 0.1.0</span>
<a name="l01080"></a>01080 <span class="comment">    @param o     The option set to work on</span>
<a name="l01081"></a>01081 <span class="comment">    @param relax Bitfield:</span>
<a name="l01082"></a>01082 <span class="comment">           bit0= omit_version_numbers</span>
<a name="l01083"></a>01083 <span class="comment">                 Omit the version number (&quot;;1&quot;) at the end of the</span>
<a name="l01084"></a>01084 <span class="comment">                 ISO-9660 and Joliet identifiers.</span>
<a name="l01085"></a>01085 <span class="comment">                 Version numbers are usually not used by readers.</span>
<a name="l01086"></a>01086 <span class="comment">           bit1= allow_deep_paths</span>
<a name="l01087"></a>01087 <span class="comment">                 Allow ISO-9660 directory hierarchy to be deeper</span>
<a name="l01088"></a>01088 <span class="comment">                 than 8 levels.</span>
<a name="l01089"></a>01089 <span class="comment">           bit2= allow_longer_paths</span>
<a name="l01090"></a>01090 <span class="comment">                 Allow path in the ISO-9660 tree to have more than</span>
<a name="l01091"></a>01091 <span class="comment">                 255 characters.</span>
<a name="l01092"></a>01092 <span class="comment">           bit3= max_37_char_filenames</span>
<a name="l01093"></a>01093 <span class="comment">                 Allow a single file or directory hierarchy to have</span>
<a name="l01094"></a>01094 <span class="comment">                 up to 37 characters. This is larger than the 31</span>
<a name="l01095"></a>01095 <span class="comment">                 characters allowed by ISO level 2, and the extra space</span>
<a name="l01096"></a>01096 <span class="comment">                 is taken from the version number, so this also forces</span>
<a name="l01097"></a>01097 <span class="comment">                 omit_version_numbers.</span>
<a name="l01098"></a>01098 <span class="comment">           bit4= no_force_dots</span>
<a name="l01099"></a>01099 <span class="comment">                 ISO-9660 forces filenames to have a &quot;.&quot;, that separates</span>
<a name="l01100"></a>01100 <span class="comment">                 file name from extension. libisofs adds it if original</span>
<a name="l01101"></a>01101 <span class="comment">                 filename has none. Set this to 1 to prevent this</span>
<a name="l01102"></a>01102 <span class="comment">                 behavior.</span>
<a name="l01103"></a>01103 <span class="comment">           bit5= allow_lowercase </span>
<a name="l01104"></a>01104 <span class="comment">                 Allow lowercase characters in ISO-9660 filenames.</span>
<a name="l01105"></a>01105 <span class="comment">                 By default, only uppercase characters, numbers and</span>
<a name="l01106"></a>01106 <span class="comment">                 a few other characters are allowed.</span>
<a name="l01107"></a>01107 <span class="comment">           bit6= allow_full_ascii</span>
<a name="l01108"></a>01108 <span class="comment">                 Allow all ASCII characters to be appear on an ISO-9660</span>
<a name="l01109"></a>01109 <span class="comment">                 filename. Note * that &quot;/&quot; and &quot;\0&quot; characters are never</span>
<a name="l01110"></a>01110 <span class="comment">                 allowed, even in RR names.</span>
<a name="l01111"></a>01111 <span class="comment">           bit7= joliet_longer_paths</span>
<a name="l01112"></a>01112 <span class="comment">                 Allow paths in the Joliet tree to have more than</span>
<a name="l01113"></a>01113 <span class="comment">                 240 characters.</span>
<a name="l01114"></a>01114 <span class="comment">           bit8= always_gmt</span>
<a name="l01115"></a>01115 <span class="comment">                 Write timestamps as GMT although the specs prescribe local</span>
<a name="l01116"></a>01116 <span class="comment">                 time with eventual non-zero timezone offset. Negative</span>
<a name="l01117"></a>01117 <span class="comment">                 timezones (west of GMT) can trigger bugs in some operating</span>
<a name="l01118"></a>01118 <span class="comment">                 systems which typically appear in mounted ISO images as if</span>
<a name="l01119"></a>01119 <span class="comment">                 the timezone shift from GMT was applied twice</span>
<a name="l01120"></a>01120 <span class="comment">                 (e.g. in New York 22:36 becomes 17:36).</span>
<a name="l01121"></a>01121 <span class="comment">           bit9= rrip_version_1_10</span>
<a name="l01122"></a>01122 <span class="comment">                 Write Rock Ridge info as of specification RRIP-1.10 rather</span>
<a name="l01123"></a>01123 <span class="comment">                 than RRIP-1.12: signature &quot;RRIP_1991A&quot; rather than</span>
<a name="l01124"></a>01124 <span class="comment">                 &quot;IEEE_1282&quot;, field PX without file serial number.</span>
<a name="l01125"></a>01125 <span class="comment">          bit10= dir_rec_mtime</span>
<a name="l01126"></a>01126 <span class="comment">                 Store as ECMA-119 Directory Record timestamp the mtime</span>
<a name="l01127"></a>01127 <span class="comment">                 of the source rather than the image creation time.</span>
<a name="l01128"></a>01128 <span class="comment">          bit11= aaip_susp_1_10</span>
<a name="l01129"></a>01129 <span class="comment">                 Write AAIP fields without announcing AAIP by an ER field and</span>
<a name="l01130"></a>01130 <span class="comment">                 without distinguishing RRIP fields from the AAIP field by</span>
<a name="l01131"></a>01131 <span class="comment">                 prefixed ES fields. This saves 5 to 10 bytes per file and</span>
<a name="l01132"></a>01132 <span class="comment">                 might avoid problems with readers which only accept RRIP.</span>
<a name="l01133"></a>01133 <span class="comment">                 SUSP-1.10 allows it, SUSP-1.12 frowns on it.</span>
<a name="l01134"></a>01134 <span class="comment">          bit12= only_iso_numbers</span>
<a name="l01135"></a>01135 <span class="comment">                 Same as bit1 omit_version_number but restricted to the names</span>
<a name="l01136"></a>01136 <span class="comment">                 in the eventual Joliet tree.</span>
<a name="l01137"></a>01137 <span class="comment">                 @since 0.5.4</span>
<a name="l01138"></a>01138 <span class="comment">                 For reasons of backward compatibility it is not possible yet</span>
<a name="l01139"></a>01139 <span class="comment">                 to disable version numbers for ISO 9660 while enabling them</span>
<a name="l01140"></a>01140 <span class="comment">                 for Joliet. </span>
<a name="l01141"></a>01141 <span class="comment">          bit13= no_j_force_dots</span>
<a name="l01142"></a>01142 <span class="comment">                 Same as no_force_dots but affecting the names in the eventual</span>
<a name="l01143"></a>01143 <span class="comment">                 Joliet tree rather than the ISO 9660 / ECMA-119 names.</span>
<a name="l01144"></a>01144 <span class="comment">                 @since 0.5.4</span>
<a name="l01145"></a>01145 <span class="comment">                 Previous versions added dots to Joliet names unconditionally.</span>
<a name="l01146"></a>01146 <span class="comment">          bit14= allow_dir_id_ext</span>
<a name="l01147"></a>01147 <span class="comment">                 Convert directory names for ECMA-119 similar to other file</span>
<a name="l01148"></a>01148 <span class="comment">                 names, but do not force a dot or add a version number.</span>
<a name="l01149"></a>01149 <span class="comment">                 This violates ECMA-119 by allowing one &quot;.&quot; and especially</span>
<a name="l01150"></a>01150 <span class="comment">                 ISO level 1 by allowing DOS style 8.3 names rather than</span>
<a name="l01151"></a>01151 <span class="comment">                 only 8 characters.</span>
<a name="l01152"></a>01152 <span class="comment">                 (mkisofs and its clones obviously do this violation.)</span>
<a name="l01153"></a>01153 <span class="comment">                 @since 1.0.0</span>
<a name="l01154"></a>01154 <span class="comment">          bit15= joliet_long_names</span>
<a name="l01155"></a>01155 <span class="comment">                 Allow for Joliet leaf names up to 103 characters rather than</span>
<a name="l01156"></a>01156 <span class="comment">                 up to 64.</span>
<a name="l01157"></a>01157 <span class="comment">                 @since 1.0.6</span>
<a name="l01158"></a>01158 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01159"></a>01159 <span class="comment">*/</span>
<a name="l01160"></a><a class="code" href="libisoburn_8h.html#aa8bf2b0b7c5d068b4333038971b5469f">01160</a> <span class="preprocessor">#define isoburn_igopt_omit_version_numbers       1</span>
<a name="l01161"></a><a class="code" href="libisoburn_8h.html#af489c4e35b0cee66495eeeecaa6b09aa">01161</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_allow_deep_paths           2</span>
<a name="l01162"></a><a class="code" href="libisoburn_8h.html#ab9dcf2065cdc8ffb4ce5c6163a3f672d">01162</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_allow_longer_paths         4</span>
<a name="l01163"></a><a class="code" href="libisoburn_8h.html#a8ddfdb996817078ab535ab859cd6435e">01163</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_max_37_char_filenames      8</span>
<a name="l01164"></a><a class="code" href="libisoburn_8h.html#a4c897ba13aec5140911aa747633de677">01164</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_no_force_dots             16</span>
<a name="l01165"></a><a class="code" href="libisoburn_8h.html#a401503afcf952e30607c78afebfec85e">01165</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_allow_lowercase           32</span>
<a name="l01166"></a><a class="code" href="libisoburn_8h.html#aadb8b50577286ad4c0a67e16c0f14197">01166</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_allow_full_ascii          64</span>
<a name="l01167"></a><a class="code" href="libisoburn_8h.html#a590291c7c773f025bd6b14c72154bd2a">01167</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_joliet_longer_paths      128</span>
<a name="l01168"></a><a class="code" href="libisoburn_8h.html#a99ac44097258d0f635fde3f9823ed533">01168</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_always_gmt               256</span>
<a name="l01169"></a><a class="code" href="libisoburn_8h.html#ab083fe1f17ea9e8e10fc745d96024262">01169</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_rrip_version_1_10        512</span>
<a name="l01170"></a><a class="code" href="libisoburn_8h.html#a6e20c7cc05dff4181f893a695e8c33e1">01170</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_dir_rec_mtime           1024</span>
<a name="l01171"></a><a class="code" href="libisoburn_8h.html#a19443d4e276d48bc97dd843fb60b5b93">01171</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_aaip_susp_1_10          2048</span>
<a name="l01172"></a><a class="code" href="libisoburn_8h.html#a57e04b1ec5a272f357369aec73d51780">01172</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_only_iso_versions       4096</span>
<a name="l01173"></a><a class="code" href="libisoburn_8h.html#a3960c7a2e5d8bc12c63046853da529a8">01173</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_no_j_force_dots         8192</span>
<a name="l01174"></a><a class="code" href="libisoburn_8h.html#a81981ab4656a142dffb141a037781945">01174</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_allow_dir_id_ext       16384</span>
<a name="l01175"></a><a class="code" href="libisoburn_8h.html#a2e3c6bd17a5f980876c530fab0da5a9f">01175</a> <span class="preprocessor"></span><span class="preprocessor">#define isoburn_igopt_joliet_long_names      32768</span>
<a name="l01176"></a>01176 <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a3512e4b7f4cc27df4cdad091d2df63b6">isoburn_igopt_set_relaxed</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> relax);
<a name="l01177"></a>01177 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a28bed4e96190a39656ad47a55b4eb3ca">isoburn_igopt_get_relaxed</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> *relax);
<a name="l01178"></a>01178 
<a name="l01179"></a>01179 <span class="comment"></span>
<a name="l01180"></a>01180 <span class="comment">/** Caution: This option breaks any assumptions about names that</span>
<a name="l01181"></a>01181 <span class="comment">             are supported by ECMA-119 specifications.</span>
<a name="l01182"></a>01182 <span class="comment">    Try to omit any translation which would make a file name compliant to the</span>
<a name="l01183"></a>01183 <span class="comment">    ECMA-119 rules. This includes and exceeds omit_version_numbers,</span>
<a name="l01184"></a>01184 <span class="comment">    max_37_char_filenames, no_force_dots bit0, allow_full_ascii. Further it</span>
<a name="l01185"></a>01185 <span class="comment">    prevents the conversion from local character set to ASCII.</span>
<a name="l01186"></a>01186 <span class="comment">    The maximum name length is given by this call. If a filename exceeds</span>
<a name="l01187"></a>01187 <span class="comment">    this length or cannot be recorded untranslated for other reasons, then</span>
<a name="l01188"></a>01188 <span class="comment">    image production gets aborted.</span>
<a name="l01189"></a>01189 <span class="comment">    Currently the length limit is 96 characters, because an ECMA-119 directory</span>
<a name="l01190"></a>01190 <span class="comment">    record may at most have 254 bytes and up to 158 other bytes must fit into</span>
<a name="l01191"></a>01191 <span class="comment">    the record. Probably 96 more bytes can be made free for the name in future.</span>
<a name="l01192"></a>01192 <span class="comment">    @since 1.0.0</span>
<a name="l01193"></a>01193 <span class="comment">    @param o    The option set to work on</span>
<a name="l01194"></a>01194 <span class="comment">    @param len  0 = disable this feature and perform name translation</span>
<a name="l01195"></a>01195 <span class="comment">                    according to other settings.</span>
<a name="l01196"></a>01196 <span class="comment">               &gt;0 = Omit any translation. Eventually abort image production</span>
<a name="l01197"></a>01197 <span class="comment">                    if a name is longer than the given value.</span>
<a name="l01198"></a>01198 <span class="comment">               -1 = Like &gt;0. Allow maximum possible length.</span>
<a name="l01199"></a>01199 <span class="comment">                    isoburn_igopt_get_untranslated_name_len() will tell the</span>
<a name="l01200"></a>01200 <span class="comment">                    effectively resulting value.</span>
<a name="l01201"></a>01201 <span class="comment">    @return &gt;0 success, &lt;=0 failure</span>
<a name="l01202"></a>01202 <span class="comment">*/</span>
<a name="l01203"></a>01203 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#abc43f9c136f9b6204b95246c9e1b30d9" title="Caution: This option breaks any assumptions about names that are supported by ECMA-119 specifications...">isoburn_igopt_set_untranslated_name_len</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01204"></a>01204                                             <span class="keywordtype">int</span> len);
<a name="l01205"></a>01205 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a73ebd3605b86af3dc31aea554bef624d">isoburn_igopt_get_untranslated_name_len</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01206"></a>01206                                             <span class="keywordtype">int</span> *len);
<a name="l01207"></a>01207 
<a name="l01208"></a>01208 <span class="comment"></span>
<a name="l01209"></a>01209 <span class="comment">/** Whether and how files should be sorted.</span>
<a name="l01210"></a>01210 <span class="comment">    @since 0.1.0</span>
<a name="l01211"></a>01211 <span class="comment">    @param o     The option set to work on</span>
<a name="l01212"></a>01212 <span class="comment">    @param value Bitfield: bit0= sort_files_by_weight</span>
<a name="l01213"></a>01213 <span class="comment">                                 files should be sorted based on their weight.</span>
<a name="l01214"></a>01214 <span class="comment">                                 Weight is attributed to files in the image</span>
<a name="l01215"></a>01215 <span class="comment">                                 by libisofs call iso_node_set_sort_weight().</span>
<a name="l01216"></a>01216 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01217"></a>01217 <span class="comment">*/</span>
<a name="l01218"></a><a class="code" href="libisoburn_8h.html#a1a3cf53e17ea0c8bae47eea38e060338">01218</a> <span class="preprocessor">#define isoburn_igopt_sort_files_by_weight        1</span>
<a name="l01219"></a>01219 <span class="preprocessor"></span><span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#acd64727805d94584c2ec006348b5975b">isoburn_igopt_set_sort_files</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> value);
<a name="l01220"></a>01220 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#adbb5f5230f8ade1a3c233ff7b32b3513">isoburn_igopt_get_sort_files</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> *value);
<a name="l01221"></a>01221 
<a name="l01222"></a>01222 <span class="comment"></span>
<a name="l01223"></a>01223 <span class="comment">/** Set the override values for files and directory permissions.</span>
<a name="l01224"></a>01224 <span class="comment">    The parameters replace_* these take one of three values: 0, 1 or 2.</span>
<a name="l01225"></a>01225 <span class="comment">    If 0, the corresponding attribute will be kept as set in the IsoNode</span>
<a name="l01226"></a>01226 <span class="comment">    at the time of image generation.</span>
<a name="l01227"></a>01227 <span class="comment">    If set to 1, the corresponding attrib. will be changed by a default</span>
<a name="l01228"></a>01228 <span class="comment">    suitable value.</span>
<a name="l01229"></a>01229 <span class="comment">    With value 2, the attrib. will be changed with the value specified</span>
<a name="l01230"></a>01230 <span class="comment">    in the corresponding *_mode options. Note that only the permissions</span>
<a name="l01231"></a>01231 <span class="comment">    are set, the file type remains unchanged.</span>
<a name="l01232"></a>01232 <span class="comment">    @since 0.1.0</span>
<a name="l01233"></a>01233 <span class="comment">    @param o                 The option set to work on</span>
<a name="l01234"></a>01234 <span class="comment">    @param replace_dir_mode  whether and how to override directories</span>
<a name="l01235"></a>01235 <span class="comment">    @param replace_file_mode whether and how to override files of other type</span>
<a name="l01236"></a>01236 <span class="comment">    @param dir_mode          Mode to use on dirs with replace_dir_mode == 2.</span>
<a name="l01237"></a>01237 <span class="comment">    @param file_mode;        Mode to use on files with replace_file_mode == 2.</span>
<a name="l01238"></a>01238 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01239"></a>01239 <span class="comment">*/</span>
<a name="l01240"></a>01240 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a162f602a7923008f10328f7225f1db72" title="Set the override values for files and directory permissions.">isoburn_igopt_set_over_mode</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01241"></a>01241                                <span class="keywordtype">int</span> replace_dir_mode, <span class="keywordtype">int</span> replace_file_mode,
<a name="l01242"></a>01242                                mode_t dir_mode, mode_t file_mode);
<a name="l01243"></a>01243 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a405f8f5e44b56f568a172fa43a01d7e4">isoburn_igopt_get_over_mode</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01244"></a>01244                                <span class="keywordtype">int</span> *replace_dir_mode, <span class="keywordtype">int</span> *replace_file_mode,
<a name="l01245"></a>01245                                mode_t *dir_mode, mode_t *file_mode);
<a name="l01246"></a>01246 <span class="comment"></span>
<a name="l01247"></a>01247 <span class="comment">/** Set the override values values for group id and user id.</span>
<a name="l01248"></a>01248 <span class="comment">    The rules are like with above overriding of mode values. replace_* controls</span>
<a name="l01249"></a>01249 <span class="comment">    whether and how. The other two parameters provide values for eventual use.</span>
<a name="l01250"></a>01250 <span class="comment">    @since 0.1.0</span>
<a name="l01251"></a>01251 <span class="comment">    @param o                 The option set to work on</span>
<a name="l01252"></a>01252 <span class="comment">    @param replace_uid       whether and how to override user ids</span>
<a name="l01253"></a>01253 <span class="comment">    @param replace_gid       whether and how to override group ids</span>
<a name="l01254"></a>01254 <span class="comment">    @param uid               User id to use with replace_uid == 2.</span>
<a name="l01255"></a>01255 <span class="comment">    @param gid               Group id to use on files with replace_gid == 2.</span>
<a name="l01256"></a>01256 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01257"></a>01257 <span class="comment">*/</span>
<a name="l01258"></a>01258 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a22a2a7ecc04fb62140ecf517ea055036" title="Set the override values values for group id and user id.">isoburn_igopt_set_over_ugid</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01259"></a>01259                                <span class="keywordtype">int</span> replace_uid, <span class="keywordtype">int</span> replace_gid,
<a name="l01260"></a>01260                                uid_t uid, gid_t gid);
<a name="l01261"></a>01261 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#aac14c7f35e77cc847c1525a3fcc7b7d1">isoburn_igopt_get_over_ugid</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01262"></a>01262                                <span class="keywordtype">int</span> *replace_uid, <span class="keywordtype">int</span> *replace_gid,
<a name="l01263"></a>01263                                uid_t *uid, gid_t *gid);
<a name="l01264"></a>01264 <span class="comment"></span>
<a name="l01265"></a>01265 <span class="comment">/** Set the charcter set to use for representing RR filenames in the image.</span>
<a name="l01266"></a>01266 <span class="comment">    @since 0.1.0</span>
<a name="l01267"></a>01267 <span class="comment">    @param o              The option set to work on</span>
<a name="l01268"></a>01268 <span class="comment">    @param output_charset Set this to NULL to use the default output charset.</span>
<a name="l01269"></a>01269 <span class="comment">                          For selecting a particular character set, submit its</span>
<a name="l01270"></a>01270 <span class="comment">                          name, e.g. as listed by program iconv -l.</span>
<a name="l01271"></a>01271 <span class="comment">                          Example: &quot;UTF-8&quot;. </span>
<a name="l01272"></a>01272 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01273"></a>01273 <span class="comment">*/</span>
<a name="l01274"></a>01274 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a9f8dfcbf05419cc9e97c1b97f7f29d85" title="Set the charcter set to use for representing RR filenames in the image.">isoburn_igopt_set_out_charset</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01275"></a>01275                                  <span class="keywordtype">char</span> *output_charset);
<a name="l01276"></a>01276 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#abe1e4a1c63370fda9dcf6c0b34702f95">isoburn_igopt_get_out_charset</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01277"></a>01277                                  <span class="keywordtype">char</span> **output_charset);
<a name="l01278"></a>01278 
<a name="l01279"></a>01279 <span class="comment"></span>
<a name="l01280"></a>01280 <span class="comment">/** The number of bytes to be used for the fifo which decouples libisofs</span>
<a name="l01281"></a>01281 <span class="comment">    and libburn for better throughput and for reducing the risk of</span>
<a name="l01282"></a>01282 <span class="comment">    interrupting signals hitting the libburn thread which operates the</span>
<a name="l01283"></a>01283 <span class="comment">    MMC drive.</span>
<a name="l01284"></a>01284 <span class="comment">    The size will be rounded up to the next full 2048.</span>
<a name="l01285"></a>01285 <span class="comment">    Minimum is 64kiB, maximum is 1 GiB (but that is too much anyway).</span>
<a name="l01286"></a>01286 <span class="comment">    @since 0.1.0</span>
<a name="l01287"></a>01287 <span class="comment">    @param o          The option set to work on</span>
<a name="l01288"></a>01288 <span class="comment">    @param fifo_size  Number of bytes to use</span>
<a name="l01289"></a>01289 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01290"></a>01290 <span class="comment">*/</span>
<a name="l01291"></a>01291 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a04ff57f2dd9d134322775720981ca4da" title="The number of bytes to be used for the fifo which decouples libisofs and libburn for better throughpu...">isoburn_igopt_set_fifo_size</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> fifo_size);
<a name="l01292"></a>01292 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ade16306ae6c130a3b301f246cc0625fa">isoburn_igopt_get_fifo_size</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> *fifo_size);
<a name="l01293"></a>01293 
<a name="l01294"></a>01294 <span class="comment"></span>
<a name="l01295"></a>01295 <span class="comment">/** Obtain after image preparation the block address where the session will</span>
<a name="l01296"></a>01296 <span class="comment">    start on the medium.</span>
<a name="l01297"></a>01297 <span class="comment">    This value cannot be set by the application but only be inquired.</span>
<a name="l01298"></a>01298 <span class="comment">    @since 0.1.4</span>
<a name="l01299"></a>01299 <span class="comment">    @param o          The option set to work on</span>
<a name="l01300"></a>01300 <span class="comment">    @param lba        The block number of the session start on the medium.</span>
<a name="l01301"></a>01301 <span class="comment">                      &lt;0 means that no address has been determined yet.</span>
<a name="l01302"></a>01302 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01303"></a>01303 <span class="comment">*/</span>
<a name="l01304"></a>01304 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a2d36049096b69b6ca5ec9d3fa6779df0" title="Obtain after image preparation the block address where the session will start on the medium...">isoburn_igopt_get_effective_lba</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> *lba);
<a name="l01305"></a>01305 
<a name="l01306"></a>01306 <span class="comment"></span>
<a name="l01307"></a>01307 <span class="comment">/** Obtain after image preparation the lowest block address of file content</span>
<a name="l01308"></a>01308 <span class="comment">    data. Failure can occur if libisofs is too old to provide this information,</span>
<a name="l01309"></a>01309 <span class="comment">    if the result exceeds 31 bit, or if the call is made before image</span>
<a name="l01310"></a>01310 <span class="comment">    preparation.</span>
<a name="l01311"></a>01311 <span class="comment">    This value cannot be set by the application but only be inquired.</span>
<a name="l01312"></a>01312 <span class="comment">    @since 0.3.6</span>
<a name="l01313"></a>01313 <span class="comment">    @param o          The option set to work on</span>
<a name="l01314"></a>01314 <span class="comment">    @param lba        The block number of the session start on the medium.</span>
<a name="l01315"></a>01315 <span class="comment">                      &lt;0 means that no address has been determined yet.</span>
<a name="l01316"></a>01316 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01317"></a>01317 <span class="comment">*/</span>
<a name="l01318"></a>01318 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a14093a7eedc9126cc4427ece9b6fa660" title="Obtain after image preparation the lowest block address of file content data.">isoburn_igopt_get_data_start</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">int</span> *lba);
<a name="l01319"></a>01319 
<a name="l01320"></a>01320 <span class="comment"></span>
<a name="l01321"></a>01321 <span class="comment">/** Set resp. get parameters &quot;name&quot; and &quot;timestamp&quot; for a scdbackup checksum</span>
<a name="l01322"></a>01322 <span class="comment">    tag. It will be appended to the libisofs session tag if the image starts at</span>
<a name="l01323"></a>01323 <span class="comment">    LBA 0. See isoburn_disc_track_lba_nwa. The scdbackup tag can be used</span>
<a name="l01324"></a>01324 <span class="comment">    to verify the image by command scdbackup_verify $device -auto_end.</span>
<a name="l01325"></a>01325 <span class="comment">    See scdbackup/README appendix VERIFY for its inner details.</span>
<a name="l01326"></a>01326 <span class="comment">    @since 0.4.4</span>
<a name="l01327"></a>01327 <span class="comment">    @param o          The option set to work on</span>
<a name="l01328"></a>01328 <span class="comment">    @param name       The tag name. 80 characters max.</span>
<a name="l01329"></a>01329 <span class="comment">    @param timestamp  A string of up to 13 characters YYMMDD.hhmmss</span>
<a name="l01330"></a>01330 <span class="comment">                      A9 = 2009, B0 = 2010, B1 = 2011, ... C0 = 2020, ...</span>
<a name="l01331"></a>01331 <span class="comment">    @param tag_written Either NULL or the address of an array with at least 512</span>
<a name="l01332"></a>01332 <span class="comment">                      characters. In the latter case the eventually produced</span>
<a name="l01333"></a>01333 <span class="comment">                      scdbackup tag will be copied to this array when the image</span>
<a name="l01334"></a>01334 <span class="comment">                      gets written. This call sets scdbackup_tag_written[0] = 0</span>
<a name="l01335"></a>01335 <span class="comment">                      to mark its preliminary invalidity.</span>
<a name="l01336"></a>01336 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01337"></a>01337 <span class="comment"> */</span>
<a name="l01338"></a>01338 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a6218bd4518e69a3eab832d4f89697c34" title="Set resp.">isoburn_igopt_set_scdbackup_tag</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o, <span class="keywordtype">char</span> *name,
<a name="l01339"></a>01339                                     <span class="keywordtype">char</span> *timestamp, <span class="keywordtype">char</span> *tag_written);
<a name="l01340"></a>01340 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ab2eb2308527e2a1c8d1cf08d85f6439f">isoburn_igopt_get_scdbackup_tag</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01341"></a>01341                                     <span class="keywordtype">char</span> name[81], <span class="keywordtype">char</span> timestamp[19],
<a name="l01342"></a>01342                                     <span class="keywordtype">char</span> **tag_written);
<a name="l01343"></a>01343 
<a name="l01344"></a>01344 <span class="comment"></span>
<a name="l01345"></a>01345 <span class="comment">/** Attach 32 kB of binary data which shall get written to the first 32 kB</span>
<a name="l01346"></a>01346 <span class="comment">    of the ISO image, the System Area.</span>
<a name="l01347"></a>01347 <span class="comment">    options can cause manipulations of these data before writing happens.</span>
<a name="l01348"></a>01348 <span class="comment">    If system area data are giveni or options bit0 is set, then bit1 of</span>
<a name="l01349"></a>01349 <span class="comment">    el_torito_set_isolinux_options() is automatically disabled.</span>
<a name="l01350"></a>01350 <span class="comment">    @since 0.5.4</span>
<a name="l01351"></a>01351 <span class="comment">    @param o        The option set to work on</span>
<a name="l01352"></a>01352 <span class="comment">    @param data     Either NULL or 32 kB of data. Do not submit less bytes !</span>
<a name="l01353"></a>01353 <span class="comment">    @param options  Can cause manipulations of submitted data before they</span>
<a name="l01354"></a>01354 <span class="comment">                    get written:</span>
<a name="l01355"></a>01355 <span class="comment">                    bit0= apply a --protective-msdos-label as of grub-mkisofs.</span>
<a name="l01356"></a>01356 <span class="comment">                          This means to patch bytes 446 to 512 of the system</span>
<a name="l01357"></a>01357 <span class="comment">                          area so that one partition is defined which begins</span>
<a name="l01358"></a>01358 <span class="comment">                          at the second 512-byte block of the image and ends</span>
<a name="l01359"></a>01359 <span class="comment">                          where the image ends.</span>
<a name="l01360"></a>01360 <span class="comment">                          This works with and without system_area_data.</span>
<a name="l01361"></a>01361 <span class="comment">                    bit1= apply isohybrid MBR patching to the system area.</span>
<a name="l01362"></a>01362 <span class="comment">                          This works only with system area data from</span>
<a name="l01363"></a>01363 <span class="comment">                          SYSLINUX plus an ISOLINUX boot image (see</span>
<a name="l01364"></a>01364 <span class="comment">                          iso_image_set_boot_image()) and only if not bit0</span>
<a name="l01365"></a>01365 <span class="comment">                          is set.</span>
<a name="l01366"></a>01366 <span class="comment">                    bit2-7= System area type</span>
<a name="l01367"></a>01367 <span class="comment">                          0= with bit0 or bit1: MBR</span>
<a name="l01368"></a>01368 <span class="comment">                             else: unspecified type </span>
<a name="l01369"></a>01369 <span class="comment">                          @since 0.6.4</span>
<a name="l01370"></a>01370 <span class="comment">                          1= MIPS Big Endian Volume Header</span>
<a name="l01371"></a>01371 <span class="comment">                             Submit up to 15 MIPS Big Endian boot files by</span>
<a name="l01372"></a>01372 <span class="comment">                             iso_image_add_mips_boot_file() of libisofs.</span>
<a name="l01373"></a>01373 <span class="comment">                             This will overwrite the first 512 bytes of</span>
<a name="l01374"></a>01374 <span class="comment">                             the submitted data.</span>
<a name="l01375"></a>01375 <span class="comment">                          2= DEC Boot Block for MIPS Little Endian</span>
<a name="l01376"></a>01376 <span class="comment">                             The first boot file submitted by</span>
<a name="l01377"></a>01377 <span class="comment">                             iso_image_add_mips_boot_file() will be activated.</span>
<a name="l01378"></a>01378 <span class="comment">                             This will overwrite the first 512 bytes of</span>
<a name="l01379"></a>01379 <span class="comment">                             the submitted data.</span>
<a name="l01380"></a>01380 <span class="comment">                          @since 0.6.6</span>
<a name="l01381"></a>01381 <span class="comment">                          3= SUN Disk Label for SUN SPARC</span>
<a name="l01382"></a>01382 <span class="comment">                             Submit up to 7 SPARC boot images by</span>
<a name="l01383"></a>01383 <span class="comment">                             isoburn_igopt_set_partition_img() for partition</span>
<a name="l01384"></a>01384 <span class="comment">                             numbers 2 to 8.</span>
<a name="l01385"></a>01385 <span class="comment">                             This will overwrite the first 512 bytes of</span>
<a name="l01386"></a>01386 <span class="comment">                             the submitted data.</span>
<a name="l01387"></a>01387 <span class="comment">                    bit8-9= Only with System area type 0 = MBR</span>
<a name="l01388"></a>01388 <span class="comment">                          @since 1.0.4</span>
<a name="l01389"></a>01389 <span class="comment">                          Cylinder alignment mode eventually pads the image</span>
<a name="l01390"></a>01390 <span class="comment">                          to make it end at a cylinder boundary.</span>
<a name="l01391"></a>01391 <span class="comment">                          0 = auto (align if bit1)</span>
<a name="l01392"></a>01392 <span class="comment">                          1 = always align to cylinder boundary</span>
<a name="l01393"></a>01393 <span class="comment">                          2 = never align to cylinder boundary</span>
<a name="l01394"></a>01394 <span class="comment"></span>
<a name="l01395"></a>01395 <span class="comment">    @return 1 success, 0 no data to get, &lt;0 failure</span>
<a name="l01396"></a>01396 <span class="comment">*/</span>
<a name="l01397"></a>01397 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a47ca66aae70bd4c87801ac5d147aaa8e" title="Attach 32 kB of binary data which shall get written to the first 32 kB of the ISO image...">isoburn_igopt_set_system_area</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01398"></a>01398                                   <span class="keywordtype">char</span> data[32768], <span class="keywordtype">int</span> options);
<a name="l01399"></a>01399 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a38b6cdf1540f11ed87f52134d19bc7ea">isoburn_igopt_get_system_area</a>(<span class="keyword">struct</span> isoburn_imgen_opts *o,
<a name="l01400"></a>01400                                   <span class="keywordtype">char</span> data[32768], <span class="keywordtype">int</span> *options);
<a name="l01401"></a>01401 <span class="comment"></span>
<a name="l01402"></a>01402 <span class="comment">/** Control production of a second set of volume descriptors (superblock)</span>
<a name="l01403"></a>01403 <span class="comment">    and directory trees, together with a partition table in the MBR where the</span>
<a name="l01404"></a>01404 <span class="comment">    first partition has non-zero start address and the others are zeroed.</span>
<a name="l01405"></a>01405 <span class="comment">    The first partition stretches to the end of the whole ISO image.</span>
<a name="l01406"></a>01406 <span class="comment">    The additional volume descriptor set and trees will allow to mount the</span>
<a name="l01407"></a>01407 <span class="comment">    ISO image at the start of the first partition, while it is still possible</span>
<a name="l01408"></a>01408 <span class="comment">    to mount it via the normal first volume descriptor set and tree at the</span>
<a name="l01409"></a>01409 <span class="comment">    start of the image resp. storage device.</span>
<a name="l01410"></a>01410 <span class="comment">    This makes few sense on optical media. But on USB sticks it creates a</span>
<a name="l01411"></a>01411 <span class="comment">    conventional partition table which makes it mountable on e.g. Linux via</span>
<a name="l01412"></a>01412 <span class="comment">    /dev/sdb and /dev/sdb1 alike.</span>
<a name="l01413"></a>01413 <span class="comment">    @since 0.6.2</span>
<a name="l01414"></a>01414 <span class="comment">    @param opts</span>
<a name="l01415"></a>01415 <span class="comment">           The option set to be manipulated.</span>
<a name="l01416"></a>01416 <span class="comment">    @param block_offset_2k</span>
<a name="l01417"></a>01417 <span class="comment">           The offset of the partition start relative to device start.</span>
<a name="l01418"></a>01418 <span class="comment">           This is counted in 2 kB blocks. The partition table will show the</span>
<a name="l01419"></a>01419 <span class="comment">           according number of 512 byte sectors.</span>
<a name="l01420"></a>01420 <span class="comment">           Default is 0 which causes no second set and trees.</span>
<a name="l01421"></a>01421 <span class="comment">           If it is not 0 then it must not be smaller than 16.</span>
<a name="l01422"></a>01422 <span class="comment">    @param secs_512_per_head</span>
<a name="l01423"></a>01423 <span class="comment">           Number of 512 byte sectors per head. 1 to 63. 0=automatic.</span>
<a name="l01424"></a>01424 <span class="comment">    @param heads_per_cyl</span>
<a name="l01425"></a>01425 <span class="comment">           Number of heads per cylinder. 1 to 255. 0=automatic.</span>
<a name="l01426"></a>01426 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01427"></a>01427 <span class="comment"> */</span>
<a name="l01428"></a>01428 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a94d4c9a0d61e472d81a8784cc09c5369" title="Control production of a second set of volume descriptors (superblock) and directory trees...">isoburn_igopt_set_part_offset</a>(<span class="keyword">struct</span> isoburn_imgen_opts  *opts,
<a name="l01429"></a>01429                                   uint32_t block_offset_2k,
<a name="l01430"></a>01430                                   <span class="keywordtype">int</span> secs_512_per_head, <span class="keywordtype">int</span> heads_per_cyl);
<a name="l01431"></a>01431 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a889b3847aba5d4d27e7eb231713c27ca">isoburn_igopt_get_part_offset</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01432"></a>01432                                   uint32_t *block_offset_2k,
<a name="l01433"></a>01433                                   <span class="keywordtype">int</span> *secs_512_per_head, <span class="keywordtype">int</span> *heads_per_cyl);
<a name="l01434"></a>01434 
<a name="l01435"></a>01435 <span class="comment"></span>
<a name="l01436"></a>01436 <span class="comment">/** Explicitely set the four timestamps of the emerging ISO image.</span>
<a name="l01437"></a>01437 <span class="comment">    Default with all parameters is 0.</span>
<a name="l01438"></a>01438 <span class="comment">    @since 0.5.4</span>
<a name="l01439"></a>01439 <span class="comment">    @param opts</span>
<a name="l01440"></a>01440 <span class="comment">           The option set to work on</span>
<a name="l01441"></a>01441 <span class="comment">    @param creation_time</span>
<a name="l01442"></a>01442 <span class="comment">           ECMA-119 Volume Creation Date and Time</span>
<a name="l01443"></a>01443 <span class="comment">           When &quot;the information in the volume was created.&quot;</span>
<a name="l01444"></a>01444 <span class="comment">           A value of 0 means that the timepoint of write start is to be used.</span>
<a name="l01445"></a>01445 <span class="comment">    @param modification_time</span>
<a name="l01446"></a>01446 <span class="comment">           ECMA-119 Volume Modification Date and Time</span>
<a name="l01447"></a>01447 <span class="comment">           When &quot;the informationin the volume was last modified.&quot;</span>
<a name="l01448"></a>01448 <span class="comment">           A value of 0 means that the timepoint of write start is to be used.</span>
<a name="l01449"></a>01449 <span class="comment">    @param expiration_time</span>
<a name="l01450"></a>01450 <span class="comment">           ECMA-119 Volume Expiration Date and Time</span>
<a name="l01451"></a>01451 <span class="comment">           When &quot;the information in the volume may be regarded as obsolete.&quot;</span>
<a name="l01452"></a>01452 <span class="comment">           A value of 0 means that the information never shall expire.</span>
<a name="l01453"></a>01453 <span class="comment">    @param effective_time</span>
<a name="l01454"></a>01454 <span class="comment">           ECMA-119 Volume Effective Date and Time</span>
<a name="l01455"></a>01455 <span class="comment">           When &quot;the information in the volume may be used.&quot;</span>
<a name="l01456"></a>01456 <span class="comment">           A value of 0 means that not such retention is intended.</span>
<a name="l01457"></a>01457 <span class="comment">    @param uuid</span>
<a name="l01458"></a>01458 <span class="comment">           If this text is not empty, then it overrides vol_modification_time</span>
<a name="l01459"></a>01459 <span class="comment">           by copying the first 16 decimal digits from uuid, eventually</span>
<a name="l01460"></a>01460 <span class="comment">           padding up with decimal &#39;1&#39;, and writing a NUL-byte as timezone GMT.</span>
<a name="l01461"></a>01461 <span class="comment">           It should express a reasonable time in form  YYYYMMDDhhmmsscc</span>
<a name="l01462"></a>01462 <span class="comment">           E.g.:  2010040711405800 = 7 Apr 2010 11:40:58 (+0 centiseconds)</span>
<a name="l01463"></a>01463 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01464"></a>01464 <span class="comment"> */</span>
<a name="l01465"></a>01465 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a073b1872db96ab12239daf5d84135685" title="Explicitely set the four timestamps of the emerging ISO image.">isoburn_igopt_set_pvd_times</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01466"></a>01466                         time_t creation_time, time_t modification_time,
<a name="l01467"></a>01467                         time_t expiration_time, time_t effective_time,
<a name="l01468"></a>01468                         <span class="keywordtype">char</span> *uuid);
<a name="l01469"></a>01469 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#af255e2c5455cf9b06c4ea1611a405c63">isoburn_igopt_get_pvd_times</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01470"></a>01470                       time_t *creation_time, time_t *modification_time,
<a name="l01471"></a>01471                       time_t *expiration_time, time_t *effective_time,
<a name="l01472"></a>01472                       <span class="keywordtype">char</span> uuid[17]);
<a name="l01473"></a>01473 
<a name="l01474"></a>01474 <span class="comment"></span>
<a name="l01475"></a>01475 <span class="comment">/** Associate a libjte environment object to the upcomming write run.</span>
<a name="l01476"></a>01476 <span class="comment">    libjte implements Jigdo Template Extraction as of Steve McIntyre and</span>
<a name="l01477"></a>01477 <span class="comment">    Richard Atterer.</span>
<a name="l01478"></a>01478 <span class="comment">    A non-NULL libjte_handle will cause failure to write if libjte was not</span>
<a name="l01479"></a>01479 <span class="comment">    enabled in libisofs at compile time.</span>
<a name="l01480"></a>01480 <span class="comment">    @since 0.6.4</span>
<a name="l01481"></a>01481 <span class="comment">    @param opts</span>
<a name="l01482"></a>01482 <span class="comment">           The option set to work on</span>
<a name="l01483"></a>01483 <span class="comment">    @param libjte_handle</span>
<a name="l01484"></a>01484 <span class="comment">           Pointer to a struct libjte_env e.g. created by libjte_new().</span>
<a name="l01485"></a>01485 <span class="comment">           It must stay existent from the start of image writing by</span>
<a name="l01486"></a>01486 <span class="comment">           isoburn_prepare_*() until the write thread has ended.</span>
<a name="l01487"></a>01487 <span class="comment">           E.g. until libburn indicates the end of its write run.</span>
<a name="l01488"></a>01488 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01489"></a>01489 <span class="comment">*/</span>
<a name="l01490"></a>01490 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a2d4b29514c5b8bd041481fa09a5b2319" title="Associate a libjte environment object to the upcomming write run.">isoburn_igopt_attach_jte</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01491"></a>01491                              <span class="keywordtype">void</span> *libjte_handle);
<a name="l01492"></a>01492 <span class="comment"></span>
<a name="l01493"></a>01493 <span class="comment">/** Remove eventual association to a libjte environment handle.</span>
<a name="l01494"></a>01494 <span class="comment">    @since 0.6.4</span>
<a name="l01495"></a>01495 <span class="comment">    @param opts</span>
<a name="l01496"></a>01496 <span class="comment">           The option set to work on</span>
<a name="l01497"></a>01497 <span class="comment">    @param libjte_handle</span>
<a name="l01498"></a>01498 <span class="comment">           If not submitted as NULL, this will return the previously set</span>
<a name="l01499"></a>01499 <span class="comment">           libjte handle. </span>
<a name="l01500"></a>01500 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01501"></a>01501 <span class="comment">*/</span>
<a name="l01502"></a>01502 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a1f77d95e88e97db6145ee408f3fdc115" title="Remove eventual association to a libjte environment handle.">isoburn_igopt_detach_jte</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01503"></a>01503                              <span class="keywordtype">void</span> **libjte_handle);
<a name="l01504"></a>01504 
<a name="l01505"></a>01505 <span class="comment"></span>
<a name="l01506"></a>01506 <span class="comment">/** Set resp. get the number of trailing zero byte blocks to be written by</span>
<a name="l01507"></a>01507 <span class="comment">    libisofs. The image size counter of the emerging ISO image will include</span>
<a name="l01508"></a>01508 <span class="comment">    them. Eventual checksums will take them into respect.</span>
<a name="l01509"></a>01509 <span class="comment">    They will be written immediately before the eventual image checksum area</span>
<a name="l01510"></a>01510 <span class="comment">    which is at the very end of the image.</span>
<a name="l01511"></a>01511 <span class="comment">    For a motivation see iso_write_opts_set_tail_blocks() in libisofs.h .</span>
<a name="l01512"></a>01512 <span class="comment">    @since 0.6.4</span>
<a name="l01513"></a>01513 <span class="comment">    @param opts</span>
<a name="l01514"></a>01514 <span class="comment">           The option set to work on</span>
<a name="l01515"></a>01515 <span class="comment">    @aram num_blocks</span>
<a name="l01516"></a>01516 <span class="comment">           Number of extra 2 kB blocks to be written by libisofs.</span>
<a name="l01517"></a>01517 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01518"></a>01518 <span class="comment">*/</span>
<a name="l01519"></a>01519 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a4c7d96edbffbeb9eab2d82f5c14fe64d" title="Set resp.">isoburn_igopt_set_tail_blocks</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01520"></a>01520                                   uint32_t num_blocks);
<a name="l01521"></a>01521 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a8c06efaffd6aa1e72a55e4cdf61669ba">isoburn_igopt_get_tail_blocks</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01522"></a>01522                                   uint32_t *num_blocks);
<a name="l01523"></a>01523 
<a name="l01524"></a>01524 <span class="comment"></span>
<a name="l01525"></a>01525 <span class="comment">/** Cause an arbitrary data file to be appended to the ISO image and to be</span>
<a name="l01526"></a>01526 <span class="comment">    described by a partition table entry in an MBR or SUN Disk Label at the</span>
<a name="l01527"></a>01527 <span class="comment">    start of the ISO image.</span>
<a name="l01528"></a>01528 <span class="comment">    The partition entry will bear the size of the image file rounded up to</span>
<a name="l01529"></a>01529 <span class="comment">    the next multiple of 2048 bytes.</span>
<a name="l01530"></a>01530 <span class="comment">    MBR or SUN Disk Label are selected by isoburn_igopt_set_system_area()</span>
<a name="l01531"></a>01531 <span class="comment">    system area type: 0 selects MBR partition table. 3 selects a SUN partition</span>
<a name="l01532"></a>01532 <span class="comment">    table with 320 kB start alignment.</span>
<a name="l01533"></a>01533 <span class="comment">    @since 0.6.4</span>
<a name="l01534"></a>01534 <span class="comment">    @param opts</span>
<a name="l01535"></a>01535 <span class="comment">           The option set to be manipulated.</span>
<a name="l01536"></a>01536 <span class="comment">    @param partition_number</span>
<a name="l01537"></a>01537 <span class="comment">           Depicts the partition table entry which shall describe the</span>
<a name="l01538"></a>01538 <span class="comment">           appended image.</span>
<a name="l01539"></a>01539 <span class="comment">           Range with MBR: 1 to 4. 1 will cause the whole ISO image to be</span>
<a name="l01540"></a>01540 <span class="comment">                           unclaimable space before partition 1.</span>
<a name="l01541"></a>01541 <span class="comment">           @since 0.6.6</span>
<a name="l01542"></a>01542 <span class="comment">           Range with SUN Disk Label: 2 to 8.</span>
<a name="l01543"></a>01543 <span class="comment">    @param image_path </span>
<a name="l01544"></a>01544 <span class="comment">           File address in the local file system.</span>
<a name="l01545"></a>01545 <span class="comment">           With SUN Disk Label: an empty name causes the partition to become</span>
<a name="l01546"></a>01546 <span class="comment">           a copy of the next lower partition.</span>
<a name="l01547"></a>01547 <span class="comment">    @param image_type</span>
<a name="l01548"></a>01548 <span class="comment">           The MBR partition type. E.g. FAT12 = 0x01 , FAT16 = 0x06,</span>
<a name="l01549"></a>01549 <span class="comment">           Linux Native Partition = 0x83. See fdisk command L.</span>
<a name="l01550"></a>01550 <span class="comment">           This parameter is ignored with SUN Disk Label.</span>
<a name="l01551"></a>01551 <span class="comment">    @return</span>
<a name="l01552"></a>01552 <span class="comment">           &lt;=0 = error, 1 = success</span>
<a name="l01553"></a>01553 <span class="comment">*/</span>
<a name="l01554"></a>01554 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a5362ff90d7b9b139090d4bfd23022151" title="Cause an arbitrary data file to be appended to the ISO image and to be described by a partition table...">isoburn_igopt_set_partition_img</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01555"></a>01555                                   <span class="keywordtype">int</span> partition_number, uint8_t partition_type,
<a name="l01556"></a>01556                                   <span class="keywordtype">char</span> *image_path);
<a name="l01557"></a>01557 <span class="comment"></span>
<a name="l01558"></a>01558 <span class="comment">/** Inquire the current settings made by isoburn_igopt_set_partition_img().</span>
<a name="l01559"></a>01559 <span class="comment">    @since 0.6.4</span>
<a name="l01560"></a>01560 <span class="comment">    @param opts</span>
<a name="l01561"></a>01561 <span class="comment">           The option set to be inquired.</span>
<a name="l01562"></a>01562 <span class="comment">    @param num_entries</span>
<a name="l01563"></a>01563 <span class="comment">           Number of array elements in partition_types[] and image_paths[].</span>
<a name="l01564"></a>01564 <span class="comment">    @param partition_types</span>
<a name="l01565"></a>01565 <span class="comment">           The partition type associated with the partition. Valid only if</span>
<a name="l01566"></a>01566 <span class="comment">           image_paths[] of the same index is not NULL.</span>
<a name="l01567"></a>01567 <span class="comment">    @param image_paths</span>
<a name="l01568"></a>01568 <span class="comment">           Its elements get filled with either NULL or a pointer to a string</span>
<a name="l01569"></a>01569 <span class="comment">           with a file address resp. an empty text.</span>
<a name="l01570"></a>01570 <span class="comment">    @return</span>
<a name="l01571"></a>01571 <span class="comment">           &lt;0 = error</span>
<a name="l01572"></a>01572 <span class="comment">            0 = no partition image set</span>
<a name="l01573"></a>01573 <span class="comment">           &gt;0 highest used partition number</span>
<a name="l01574"></a>01574 <span class="comment">*/</span>
<a name="l01575"></a>01575 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a38b8d2adabdbdf25a618392c9faa04c8" title="Inquire the current settings made by isoburn_igopt_set_partition_img().">isoburn_igopt_get_partition_img</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01576"></a>01576                                     <span class="keywordtype">int</span> num_entries,
<a name="l01577"></a>01577                                     uint8_t partition_types[],
<a name="l01578"></a>01578                                     <span class="keywordtype">char</span> *image_paths[]);
<a name="l01579"></a>01579 
<a name="l01580"></a>01580 <span class="comment"></span>
<a name="l01581"></a>01581 <span class="comment">/** Set a name for the system area. This setting is ignored unless system area</span>
<a name="l01582"></a>01582 <span class="comment">    type 3 &quot;SUN Disk Label&quot; is in effect by iso_write_opts_set_system_area().</span>
<a name="l01583"></a>01583 <span class="comment">    In this case it will replace the default text at the start of the image:</span>
<a name="l01584"></a>01584 <span class="comment">      &quot;CD-ROM Disc with Sun sparc boot created by libisofs&quot;</span>
<a name="l01585"></a>01585 <span class="comment">    @since 0.6.6</span>
<a name="l01586"></a>01586 <span class="comment">    @param opts</span>
<a name="l01587"></a>01587 <span class="comment">           The option set to be manipulated.</span>
<a name="l01588"></a>01588 <span class="comment">    @param label</span>
<a name="l01589"></a>01589 <span class="comment">           A text of up to 128 characters.</span>
<a name="l01590"></a>01590 <span class="comment">    @return</span>
<a name="l01591"></a>01591 <span class="comment">           &lt;=0 = error, 1 = success</span>
<a name="l01592"></a>01592 <span class="comment">*/</span> 
<a name="l01593"></a>01593 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a1220212e6f46e8745b971dbfedc6a5d4" title="Set a name for the system area.">isoburn_igopt_set_disc_label</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts, <span class="keywordtype">char</span> *label);
<a name="l01594"></a>01594 <span class="comment"></span>
<a name="l01595"></a>01595 <span class="comment">/** Inquire the current setting made by isoburn_igopt_set_disc_label().</span>
<a name="l01596"></a>01596 <span class="comment">    @since 0.6.6</span>
<a name="l01597"></a>01597 <span class="comment">    @param opts</span>
<a name="l01598"></a>01598 <span class="comment">           The option set to be inquired.</span>
<a name="l01599"></a>01599 <span class="comment">    @param label</span>
<a name="l01600"></a>01600 <span class="comment">           Returns a pointer to the currently set label string.</span>
<a name="l01601"></a>01601 <span class="comment">           Do not alter this string.</span>
<a name="l01602"></a>01602 <span class="comment">           Use only as long as the opts object exists.</span>
<a name="l01603"></a>01603 <span class="comment">    @return</span>
<a name="l01604"></a>01604 <span class="comment">           &lt;=0 = error, 1 = success</span>
<a name="l01605"></a>01605 <span class="comment">*/</span>
<a name="l01606"></a>01606 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#acc260f16e79dced148401d8f64e415f0" title="Inquire the current setting made by isoburn_igopt_set_disc_label().">isoburn_igopt_get_disc_label</a>(<span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01607"></a>01607                                  <span class="keywordtype">char</span> **label);
<a name="l01608"></a>01608 
<a name="l01609"></a>01609 
<a name="l01610"></a>01610 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l01611"></a>01611 <span class="comment">/*                      End of Options for image generation                */</span>
<a name="l01612"></a>01612 <span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l01613"></a>01613 
<a name="l01614"></a>01614 <span class="comment"></span>
<a name="l01615"></a>01615 <span class="comment">/** Get the image attached to a drive, if any.</span>
<a name="l01616"></a>01616 <span class="comment">    @since 0.1.0</span>
<a name="l01617"></a>01617 <span class="comment">    @param d The drive to inquire</span>
<a name="l01618"></a>01618 <span class="comment">    @return A reference to attached image, or NULL if the drive has no image</span>
<a name="l01619"></a>01619 <span class="comment">            attached. This reference needs to be released via iso_image_unref()</span>
<a name="l01620"></a>01620 <span class="comment">            when it is not longer needed.</span>
<a name="l01621"></a>01621 <span class="comment">*/</span>
<a name="l01622"></a>01622 IsoImage *<a class="code" href="libisoburn_8h.html#ad1c454c7feeca570b91f92e2422d35c0" title="Get the image attached to a drive, if any.">isoburn_get_attached_image</a>(<span class="keyword">struct</span> burn_drive *d);
<a name="l01623"></a>01623 
<a name="l01624"></a>01624 <span class="comment"></span>
<a name="l01625"></a>01625 <span class="comment">/** Load the ISO filesystem directory tree from the medium in the given drive.</span>
<a name="l01626"></a>01626 <span class="comment">    This will give libisoburn the base on which it can let libisofs perform</span>
<a name="l01627"></a>01627 <span class="comment">    image growing or image modification. The loaded volset gets attached</span>
<a name="l01628"></a>01628 <span class="comment">    to the drive object and handed out to the application.</span>
<a name="l01629"></a>01629 <span class="comment">    Not a wrapper, but peculiar to libisoburn.</span>
<a name="l01630"></a>01630 <span class="comment">    @since 0.1.0</span>
<a name="l01631"></a>01631 <span class="comment">    @param d The drive which holds an existing ISO filesystem or blank media.</span>
<a name="l01632"></a>01632 <span class="comment">             d is allowed to be NULL which produces an empty ISO image. In</span>
<a name="l01633"></a>01633 <span class="comment">             this case one has to call before writing isoburn_attach_volset()</span>
<a name="l01634"></a>01634 <span class="comment">             with the volset from this call and with the intended output</span>
<a name="l01635"></a>01635 <span class="comment">             drive.</span>
<a name="l01636"></a>01636 <span class="comment">    @param read_opts The read options which can be chosen by the application</span>
<a name="l01637"></a>01637 <span class="comment">    @param image the image read, if the disc is blank it will have no files.</span>
<a name="l01638"></a>01638 <span class="comment">             This reference needs to be released via iso_image_unref() when</span>
<a name="l01639"></a>01639 <span class="comment">             it is not longer needed. The drive, if not NULL, will hold an</span>
<a name="l01640"></a>01640 <span class="comment">             own reference which it will release when it gets a new volset</span>
<a name="l01641"></a>01641 <span class="comment">             or when it gets released via isoburn_drive_release().</span>
<a name="l01642"></a>01642 <span class="comment">             You can pass NULL if you already have a reference or you plan to</span>
<a name="l01643"></a>01643 <span class="comment">             obtain it later with isoburn_get_attached_image(). Of course, if</span>
<a name="l01644"></a>01644 <span class="comment">             you haven&#39;t specified a valid drive (i.e., if d == NULL), this</span>
<a name="l01645"></a>01645 <span class="comment">             parameter can&#39;t be NULL.</span>
<a name="l01646"></a>01646 <span class="comment">    @return &lt;=0 error , 1 = success</span>
<a name="l01647"></a>01647 <span class="comment">*/</span>
<a name="l01648"></a>01648 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#aaeb4a658003768fc9bc6602417d65a70" title="Load the ISO filesystem directory tree from the medium in the given drive.">isoburn_read_image</a>(<span class="keyword">struct</span> burn_drive *d,
<a name="l01649"></a>01649                        <span class="keyword">struct</span> isoburn_read_opts *read_opts,
<a name="l01650"></a>01650                        IsoImage **image);
<a name="l01651"></a>01651 <span class="comment"></span>
<a name="l01652"></a>01652 <span class="comment">/** Set a callback function for producing pacifier messages during the lengthy</span>
<a name="l01653"></a>01653 <span class="comment">    process of image reading. The callback function and the application handle</span>
<a name="l01654"></a>01654 <span class="comment">    are stored until they are needed for the underlying call to libisofs.</span>
<a name="l01655"></a>01655 <span class="comment">    Other than with libisofs the handle is managed entirely by the application.</span>
<a name="l01656"></a>01656 <span class="comment">    An idle .free() function is exposed to libisofs. The handle has to stay</span>
<a name="l01657"></a>01657 <span class="comment">    valid until isoburn_read_image() is done. It has to be detached by</span>
<a name="l01658"></a>01658 <span class="comment">      isoburn_set_read_pacifier(drive, NULL, NULL);</span>
<a name="l01659"></a>01659 <span class="comment">    before it may be removed from memory.</span>
<a name="l01660"></a>01660 <span class="comment">    @since 0.1.0</span>
<a name="l01661"></a>01661 <span class="comment">    @param drive  The drive which will be used with isoburn_read_image()</span>
<a name="l01662"></a>01662 <span class="comment">                  It has to be aquired by an isoburn_* wrapper call.</span>
<a name="l01663"></a>01663 <span class="comment">    @param read_pacifier  The callback function</span>
<a name="l01664"></a>01664 <span class="comment">    @param app_handle  The app handle which the callback function can obtain</span>
<a name="l01665"></a>01665 <span class="comment">                       via iso_image_get_attached_data() from its IsoImage*</span>
<a name="l01666"></a>01666 <span class="comment">    @return 1 success, &lt;=0 failure</span>
<a name="l01667"></a>01667 <span class="comment">*/</span>
<a name="l01668"></a>01668 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a2cd28c4901e3f9a750dbd45b4b3fb4a9" title="Set a callback function for producing pacifier messages during the lengthy process of image reading...">isoburn_set_read_pacifier</a>(<span class="keyword">struct</span> burn_drive *drive,
<a name="l01669"></a>01669                               <span class="keywordtype">int</span> (*read_pacifier)(IsoImage*, IsoFileSource*),
<a name="l01670"></a>01670                               <span class="keywordtype">void</span> *app_handle);
<a name="l01671"></a>01671 <span class="comment"></span>
<a name="l01672"></a>01672 <span class="comment">/** Inquire the partition offset of the loaded image. The first 512 bytes of</span>
<a name="l01673"></a>01673 <span class="comment">    the image get examined whether they bear an MBR signature and a first</span>
<a name="l01674"></a>01674 <span class="comment">    partition table entry which matches the size of the image. In this case</span>
<a name="l01675"></a>01675 <span class="comment">    the start address is recorded as partition offset and internal buffers</span>
<a name="l01676"></a>01676 <span class="comment">    get adjusted.</span>
<a name="l01677"></a>01677 <span class="comment">    See also isoburn_igopt_set_part_offset().</span>
<a name="l01678"></a>01678 <span class="comment">    @since 0.6.2</span>
<a name="l01679"></a>01679 <span class="comment">    @param drive           The drive with the loaded image</span>
<a name="l01680"></a>01680 <span class="comment">    @param block_offset_2k returns the recognized partition offset</span>
<a name="l01681"></a>01681 <span class="comment">    @return &lt;0 = error</span>
<a name="l01682"></a>01682 <span class="comment">             0 = no partition offset recognized</span>
<a name="l01683"></a>01683 <span class="comment">             1 = acceptable non-zero offset, buffers are adjusted</span>
<a name="l01684"></a>01684 <span class="comment">             2 = offset is credible but not acceptable for buffer size</span>
<a name="l01685"></a>01685 <span class="comment">*/</span> 
<a name="l01686"></a>01686 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a0dc8674158253803b8ce399ded79ee83" title="Inquire the partition offset of the loaded image.">isoburn_get_img_partition_offset</a>(<span class="keyword">struct</span> burn_drive *drive,
<a name="l01687"></a>01687                                      uint32_t *block_offset_2k);
<a name="l01688"></a>01688 
<a name="l01689"></a>01689 <span class="comment"></span>
<a name="l01690"></a>01690 <span class="comment">/** Set the IsoImage to be used with a drive. This eventually releases</span>
<a name="l01691"></a>01691 <span class="comment">    the reference to the old IsoImage attached to the drive.</span>
<a name="l01692"></a>01692 <span class="comment">    Caution: Use with care. It hardly makes sense to replace an image that</span>
<a name="l01693"></a>01693 <span class="comment">             reflects a valid ISO image on the medium.</span>
<a name="l01694"></a>01694 <span class="comment">    This call is rather intended for writing a newly created and populated</span>
<a name="l01695"></a>01695 <span class="comment">    image to blank media. The use case in xorriso is to let an image survive</span>
<a name="l01696"></a>01696 <span class="comment">    the change or demise of the outdev target drive. </span>
<a name="l01697"></a>01697 <span class="comment">    @since 0.1.0</span>
<a name="l01698"></a>01698 <span class="comment">    @param d The drive which shall be write target of the volset.</span>
<a name="l01699"></a>01699 <span class="comment">    @param image The image that represents the image to be written.</span>
<a name="l01700"></a>01700 <span class="comment">             This image pointer MUST already be a valid reference suitable</span>
<a name="l01701"></a>01701 <span class="comment">             for iso_image_unref().</span>
<a name="l01702"></a>01702 <span class="comment">             It may have been obtained by appropriate libisofs calls or by</span>
<a name="l01703"></a>01703 <span class="comment">             isoburn_read_image() with d==NULL.</span>
<a name="l01704"></a>01704 <span class="comment">    @return &lt;=0 error , 1 = success</span>
<a name="l01705"></a>01705 <span class="comment">*/</span> 
<a name="l01706"></a>01706 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a0229645be21da6d649f3659e6e023e4c" title="Set the IsoImage to be used with a drive.">isoburn_attach_image</a>(<span class="keyword">struct</span> burn_drive *d, IsoImage *image);
<a name="l01707"></a>01707 
<a name="l01708"></a>01708 <span class="comment"></span>
<a name="l01709"></a>01709 <span class="comment">/** Return the best possible estimation of the currently available capacity of</span>
<a name="l01710"></a>01710 <span class="comment">    the medium. This might depend on particular write option settings and on</span>
<a name="l01711"></a>01711 <span class="comment">    drive state.</span>
<a name="l01712"></a>01712 <span class="comment">    An eventual start address for emulated multi-session will be subtracted</span>
<a name="l01713"></a>01713 <span class="comment">    from the capacity estimation given by burn_disc_available_space().</span>
<a name="l01714"></a>01714 <span class="comment">    Negative results get defaulted to 0.</span>
<a name="l01715"></a>01715 <span class="comment">    Wrapper for: burn_disc_available_space()</span>
<a name="l01716"></a>01716 <span class="comment">    @since 0.1.0</span>
<a name="l01717"></a>01717 <span class="comment">    @param d The drive to query.</span>
<a name="l01718"></a>01718 <span class="comment">    @param o If not NULL: write parameters to be set on drive before query</span>
<a name="l01719"></a>01719 <span class="comment">    @return number of most probably available free bytes</span>
<a name="l01720"></a>01720 <span class="comment">*/</span>
<a name="l01721"></a>01721 off_t <a class="code" href="libisoburn_8h.html#a48b888c53c0a1e057e9fd88314791368" title="Return the best possible estimation of the currently available capacity of the medium.">isoburn_disc_available_space</a>(<span class="keyword">struct</span> burn_drive *d,
<a name="l01722"></a>01722                                    <span class="keyword">struct</span> burn_write_opts *o);
<a name="l01723"></a>01723 
<a name="l01724"></a>01724 <span class="comment"></span>
<a name="l01725"></a>01725 <span class="comment">/** Obtain the start block number of the most recent session on the medium. In</span>
<a name="l01726"></a>01726 <span class="comment">    case of random access media this will normally be 0. Successfull return is</span>
<a name="l01727"></a>01727 <span class="comment">    not a guarantee that there is a ISO-9660 image at all. The call will fail,</span>
<a name="l01728"></a>01728 <span class="comment">    nevertheless,if isoburn_disc_get_status() returns not BURN_DISC_APPENDABLE</span>
<a name="l01729"></a>01729 <span class="comment">    or BURN_DISC_FULL.</span>
<a name="l01730"></a>01730 <span class="comment">    Note: The result of this call may be fabricated by a previous call of</span>
<a name="l01731"></a>01731 <span class="comment">    isoburn_set_msc1() which can override the rule to load the most recent</span>
<a name="l01732"></a>01732 <span class="comment">    session.</span>
<a name="l01733"></a>01733 <span class="comment">    Wrapper for: burn_disc_get_msc1()</span>
<a name="l01734"></a>01734 <span class="comment">    @since 0.1.0</span>
<a name="l01735"></a>01735 <span class="comment">    @param d         The drive to inquire</span>
<a name="l01736"></a>01736 <span class="comment">    @param start_lba Contains on success the start address in 2048 byte blocks</span>
<a name="l01737"></a>01737 <span class="comment">    @return &lt;=0 error , 1 = success</span>
<a name="l01738"></a>01738 <span class="comment">*/</span>
<a name="l01739"></a>01739 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a8b7dc7378375c69c7853436a3da9c8ba" title="Obtain the start block number of the most recent session on the medium.">isoburn_disc_get_msc1</a>(<span class="keyword">struct</span> burn_drive *d, <span class="keywordtype">int</span> *start_lba);
<a name="l01740"></a>01740 
<a name="l01741"></a>01741 <span class="comment"></span>
<a name="l01742"></a>01742 <span class="comment">/** Use this with trackno==0 to obtain the predicted start block number of the</span>
<a name="l01743"></a>01743 <span class="comment">    new session. The interesting number is returned in parameter nwa.</span>
<a name="l01744"></a>01744 <span class="comment">    Wrapper for: burn_disc_track_lba_nwa()</span>
<a name="l01745"></a>01745 <span class="comment">    @since 0.1.0</span>
<a name="l01746"></a>01746 <span class="comment">    @param d         The drive to inquire</span>
<a name="l01747"></a>01747 <span class="comment">    @param o If not NULL: write parameters to be set on drive before query</span>
<a name="l01748"></a>01748 <span class="comment">    @param trackno Submit 0.</span>
<a name="l01749"></a>01749 <span class="comment">    @param lba return value: start lba</span>
<a name="l01750"></a>01750 <span class="comment">    @param nwa return value: Next Writeable Address</span>
<a name="l01751"></a>01751 <span class="comment">    @return 1=nwa is valid , 0=nwa is not valid , -1=error</span>
<a name="l01752"></a>01752 <span class="comment">*/</span>
<a name="l01753"></a>01753 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a6c308a88020e4749b320978060c3450a" title="Use this with trackno==0 to obtain the predicted start block number of the new session.">isoburn_disc_track_lba_nwa</a>(<span class="keyword">struct</span> burn_drive *d, <span class="keyword">struct</span> burn_write_opts *o,
<a name="l01754"></a>01754                                <span class="keywordtype">int</span> trackno, <span class="keywordtype">int</span> *lba, <span class="keywordtype">int</span> *nwa);
<a name="l01755"></a>01755 
<a name="l01756"></a>01756 <span class="comment"></span>
<a name="l01757"></a>01757 <span class="comment">/** Obtain the size which was attributed to an emulated appendable on actually</span>
<a name="l01758"></a>01758 <span class="comment">    overwriteable media. This value is supposed to be &lt;= 2048 * nwa as of</span>
<a name="l01759"></a>01759 <span class="comment">    isoburn_disc_track_lba_nwa().</span>
<a name="l01760"></a>01760 <span class="comment">    @since 0.1.0</span>
<a name="l01761"></a>01761 <span class="comment">    @param d     The drive holding the medium.</span>
<a name="l01762"></a>01762 <span class="comment">    @param start_byte The reply value counted in bytes, not in sectors.</span>
<a name="l01763"></a>01763 <span class="comment">    @param flag  Unused yet. Submit 0.</span>
<a name="l01764"></a>01764 <span class="comment">    @return 1=stat_byte is valid, 0=not an emulated appendable, -1=error </span>
<a name="l01765"></a>01765 <span class="comment">*/</span>
<a name="l01766"></a>01766 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a5987342968b361b40a62cb2f3d280ebd" title="Obtain the size which was attributed to an emulated appendable on actually overwriteable media...">isoburn_get_min_start_byte</a>(<span class="keyword">struct</span> burn_drive *d, off_t *start_byte,
<a name="l01767"></a>01767                                <span class="keywordtype">int</span> flag);
<a name="l01768"></a>01768 
<a name="l01769"></a>01769 <span class="comment"></span>
<a name="l01770"></a>01770 <span class="comment">/** To choose the expansion method of Growing:</span>
<a name="l01771"></a>01771 <span class="comment">    Create a disc object for writing the new session from the created or loaded</span>
<a name="l01772"></a>01772 <span class="comment">    iso_volset which has been manipulated via libisofs, to the same medium from</span>
<a name="l01773"></a>01773 <span class="comment">    where the image was eventually loaded. This struct burn_disc is ready for</span>
<a name="l01774"></a>01774 <span class="comment">    use by a subsequent call to isoburn_disc_write().</span>
<a name="l01775"></a>01775 <span class="comment">    After this asynchronous writing has ended and the drive is BURN_DRIVE_IDLE</span>
<a name="l01776"></a>01776 <span class="comment">    again, the burn_disc object has to be disposed by burn_disc_free().</span>
<a name="l01777"></a>01777 <span class="comment">    @since 0.1.0</span>
<a name="l01778"></a>01778 <span class="comment">    @param drive The combined source and target drive, grabbed with</span>
<a name="l01779"></a>01779 <span class="comment">                 isoburn_drive_scan_and_grab(). .</span>
<a name="l01780"></a>01780 <span class="comment">    @param disc Returns the newly created burn_disc object.</span>
<a name="l01781"></a>01781 <span class="comment">    @param opts Image generation options, see isoburn_igopt_*()</span>
<a name="l01782"></a>01782 <span class="comment">    @return &lt;=0 error , 1 = success</span>
<a name="l01783"></a>01783 <span class="comment">*/</span>
<a name="l01784"></a>01784 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a0192faac91cdaedc4d6f34bf71c1e3e7" title="To choose the expansion method of Growing: Create a disc object for writing the new session from the ...">isoburn_prepare_disc</a>(<span class="keyword">struct</span> burn_drive *drive, <span class="keyword">struct</span> burn_disc **disc,
<a name="l01785"></a>01785                          <span class="keyword">struct</span> isoburn_imgen_opts *opts);
<a name="l01786"></a>01786 
<a name="l01787"></a>01787 <span class="comment"></span>
<a name="l01788"></a>01788 <span class="comment">/** To choose the expansion method of Modifying:</span>
<a name="l01789"></a>01789 <span class="comment">    Create a disc object for producing a new image from a previous image</span>
<a name="l01790"></a>01790 <span class="comment">    plus the changes made by user. The generated burn_disc is suitable</span>
<a name="l01791"></a>01791 <span class="comment">    to be written to a grabbed drive with blank writeable medium.</span>
<a name="l01792"></a>01792 <span class="comment">    But you must not use the same drive for input and output, because data</span>
<a name="l01793"></a>01793 <span class="comment">    will be read from the source drive while at the same time the target</span>
<a name="l01794"></a>01794 <span class="comment">    drive is already writing.</span>
<a name="l01795"></a>01795 <span class="comment">    The resulting burn_disc object has to be disposed when all its writing</span>
<a name="l01796"></a>01796 <span class="comment">    is done and the drive is BURN_DRIVE_IDLE again after asynchronous</span>
<a name="l01797"></a>01797 <span class="comment">    burn_disc_write().</span>
<a name="l01798"></a>01798 <span class="comment">    @since 0.1.0</span>
<a name="l01799"></a>01799 <span class="comment">    @param in_drive The input drive, grabbed with isoburn_drive_aquire() or</span>
<a name="l01800"></a>01800 <span class="comment">                    one of its alternatives.</span>
<a name="l01801"></a>01801 <span class="comment">    @param disc     Returns the newly created burn_disc object.</span>
<a name="l01802"></a>01802 <span class="comment">    @param opts     Options for image generation and data transport to the</span>
<a name="l01803"></a>01803 <span class="comment">                    medium.</span>
<a name="l01804"></a>01804 <span class="comment">    @param out_drive The output drive, from isoburn_drive_aquire() et.al..</span>
<a name="l01805"></a>01805 <span class="comment">    @return &lt;=0 error , 1 = success</span>
<a name="l01806"></a>01806 <span class="comment">*/</span>
<a name="l01807"></a>01807 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ae012d63826b607c9cd5c8f60d13e6529" title="To choose the expansion method of Modifying: Create a disc object for producing a new image from a pr...">isoburn_prepare_new_image</a>(<span class="keyword">struct</span> burn_drive *in_drive,
<a name="l01808"></a>01808                               <span class="keyword">struct</span> burn_disc **disc,
<a name="l01809"></a>01809                               <span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01810"></a>01810                               <span class="keyword">struct</span> burn_drive *out_drive);
<a name="l01811"></a>01811 
<a name="l01812"></a>01812 <span class="comment"></span>
<a name="l01813"></a>01813 <span class="comment">/** To choose the expansion method of Blind Growing:</span>
<a name="l01814"></a>01814 <span class="comment">    Create a disc object for writing an add-on session from the created or</span>
<a name="l01815"></a>01815 <span class="comment">    loaded IsoImage which has been manipulated via libisofs, to a different</span>
<a name="l01816"></a>01816 <span class="comment">    drive than the one from where it was loaded.</span>
<a name="l01817"></a>01817 <span class="comment">    Usually output will be stdio:/dev/fd/1 (i.e. stdout) being piped</span>
<a name="l01818"></a>01818 <span class="comment">    into some burn program like with this classic gesture:</span>
<a name="l01819"></a>01819 <span class="comment">      mkisofs -M $dev -C $msc1,$nwa | cdrecord -waiti dev=$dev</span>
<a name="l01820"></a>01820 <span class="comment">    Parameter translation into libisoburn:</span>
<a name="l01821"></a>01821 <span class="comment">      $dev  is the address by which parameter in_drive of this call was aquired</span>
<a name="l01822"></a>01822 <span class="comment">      $msc1 was set by isoburn_set_msc1() before image reading</span>
<a name="l01823"></a>01823 <span class="comment">            or was detected from the in_drive medium</span>
<a name="l01824"></a>01824 <span class="comment">      $nwa  is a parameter of this call</span>
<a name="l01825"></a>01825 <span class="comment">            or can be used as detected from the in_drive medium</span>
<a name="l01826"></a>01826 <span class="comment"></span>
<a name="l01827"></a>01827 <span class="comment">    This call waits for libisofs output to become available and then detaches</span>
<a name="l01828"></a>01828 <span class="comment">    the input drive object from the data source object by which libisofs was</span>
<a name="l01829"></a>01829 <span class="comment">    reading from the input drive.</span>
<a name="l01830"></a>01830 <span class="comment">    So, as far as libisofs is concerned, that drive may be released immediately</span>
<a name="l01831"></a>01831 <span class="comment">    after this call in order to allow the consumer to access the drive for</span>
<a name="l01832"></a>01832 <span class="comment">    writing.</span>
<a name="l01833"></a>01833 <span class="comment">    The consumer should wait for input to become available and only then open</span>
<a name="l01834"></a>01834 <span class="comment">    its burn drive. With cdrecord this is caused by option -waiti.</span>
<a name="l01835"></a>01835 <span class="comment">  </span>
<a name="l01836"></a>01836 <span class="comment">    The resulting burn_disc object has to be disposed when all its writing</span>
<a name="l01837"></a>01837 <span class="comment">    is done and the drive is BURN_DRIVE_IDLE again after asynchronous</span>
<a name="l01838"></a>01838 <span class="comment">    burn_disc_write().</span>
<a name="l01839"></a>01839 <span class="comment">    @since 0.2.2</span>
<a name="l01840"></a>01840 <span class="comment">    @param in_drive The input drive,grabbed with isoburn_drive_scan_and_grab().</span>
<a name="l01841"></a>01841 <span class="comment">    @param disc     Returns the newly created burn_disc object.</span>
<a name="l01842"></a>01842 <span class="comment">    @param opts     Options for image generation and data transport to media.</span>
<a name="l01843"></a>01843 <span class="comment">    @param out_drive The output drive, from isoburn_drive_aquire() et.al..</span>
<a name="l01844"></a>01844 <span class="comment">                    typically stdio:/dev/fd/1 .</span>
<a name="l01845"></a>01845 <span class="comment">    @param nwa      The address (2048 byte block count) where the add-on</span>
<a name="l01846"></a>01846 <span class="comment">                    session will be finally stored on a mountable medium</span>
<a name="l01847"></a>01847 <span class="comment">                    or in a mountable file.</span>
<a name="l01848"></a>01848 <span class="comment">                    If nwa is -1 then the address is used as determined from</span>
<a name="l01849"></a>01849 <span class="comment">                    the in_drive medium.</span>
<a name="l01850"></a>01850 <span class="comment">    @return &lt;=0 error , 1 = success</span>
<a name="l01851"></a>01851 <span class="comment">*/</span>
<a name="l01852"></a>01852 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#ad07a270a45cccc93304e51ca80a628ad" title="To choose the expansion method of Blind Growing: Create a disc object for writing an add-on session f...">isoburn_prepare_blind_grow</a>(<span class="keyword">struct</span> burn_drive *in_drive,
<a name="l01853"></a>01853                                <span class="keyword">struct</span> burn_disc **disc,
<a name="l01854"></a>01854                                <span class="keyword">struct</span> isoburn_imgen_opts *opts,
<a name="l01855"></a>01855                                <span class="keyword">struct</span> burn_drive *out_drive, <span class="keywordtype">int</span> nwa);
<a name="l01856"></a>01856 
<a name="l01857"></a>01857 <span class="comment"></span>
<a name="l01858"></a>01858 <span class="comment">/**</span>
<a name="l01859"></a>01859 <span class="comment">    Revoke isoburn_prepare_*() instead of running isoburn_disc_write().</span>
<a name="l01860"></a>01860 <span class="comment">    libisofs reserves resources and maybe already starts generating the</span>
<a name="l01861"></a>01861 <span class="comment">    image stream when one of above three calls is performed. It is mandatory to</span>
<a name="l01862"></a>01862 <span class="comment">    either run isoburn_disc_write() or to revoke the preparations by the</span>
<a name="l01863"></a>01863 <span class="comment">    call described here.</span>
<a name="l01864"></a>01864 <span class="comment">    If this call returns 0 or 1 then the write thread of libisofs has ended.</span>
<a name="l01865"></a>01865 <span class="comment">    @since 0.1.0</span>
<a name="l01866"></a>01866 <span class="comment">    @param input_drive   The drive resp. in_drive which was used with the</span>
<a name="l01867"></a>01867 <span class="comment">                         preparation call.</span>
<a name="l01868"></a>01868 <span class="comment">    @param output_drive  The out_drive used with isoburn_prepare_new_image(),</span>
<a name="l01869"></a>01869 <span class="comment">                         NULL if none.</span>
<a name="l01870"></a>01870 <span class="comment">    @param flag Bitfield, submit 0 for now.</span>
<a name="l01871"></a>01871 <span class="comment">                bit0= -reserved for internal use-</span>
<a name="l01872"></a>01872 <span class="comment">    @return     &lt;0 error, 0= no pending preparations detectable, 1 = canceled</span>
<a name="l01873"></a>01873 <span class="comment">*/</span>
<a name="l01874"></a>01874 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#add8b62ad07af3e4ae9e5cc9aebd37dd5" title="Revoke isoburn_prepare_*() instead of running isoburn_disc_write().">isoburn_cancel_prepared_write</a>(<span class="keyword">struct</span> burn_drive *input_drive,
<a name="l01875"></a>01875                                   <span class="keyword">struct</span> burn_drive *output_drive, <span class="keywordtype">int</span> flag);
<a name="l01876"></a>01876 
<a name="l01877"></a>01877 <span class="comment"></span>
<a name="l01878"></a>01878 <span class="comment">/**</span>
<a name="l01879"></a>01879 <span class="comment">    Override the truncation setting that was made with flag bit2 during the</span>
<a name="l01880"></a>01880 <span class="comment">    call of isoburn_drive_aquire. This applies only to stdio pseudo drives.</span>
<a name="l01881"></a>01881 <span class="comment">    @since 0.1.6</span>
<a name="l01882"></a>01882 <span class="comment">    @param drive The drive which was aquired and shall be used for writing.</span>
<a name="l01883"></a>01883 <span class="comment">    @param flag Bitfield controlling the setting:</span>
<a name="l01884"></a>01884 <span class="comment">                bit0= truncate (else do not truncate)</span>
<a name="l01885"></a>01885 <span class="comment">                bit1= do not warn if call is inappropriate to drive</span>
<a name="l01886"></a>01886 <span class="comment">                bit2= only set if truncation is currently enabled</span>
<a name="l01887"></a>01887 <span class="comment">                      do not warn if call is inappropriate to drive</span>
<a name="l01888"></a>01888 <span class="comment">    @return     1 success, 0 inappropriate drive, &lt;0 severe error</span>
<a name="l01889"></a>01889 <span class="comment">*/</span>
<a name="l01890"></a>01890 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a08672ff943123e9943267c9ca6aac889" title="Override the truncation setting that was made with flag bit2 during the call of isoburn_drive_aquire...">isoburn_set_truncate</a>(<span class="keyword">struct</span> burn_drive *drive, <span class="keywordtype">int</span> flag);
<a name="l01891"></a>01891 
<a name="l01892"></a>01892 <span class="comment"></span>
<a name="l01893"></a>01893 <span class="comment">/** Start writing of the new session.</span>
<a name="l01894"></a>01894 <span class="comment">    This call is asynchrounous. I.e. it returns quite soon and the progress has</span>
<a name="l01895"></a>01895 <span class="comment">    to be watched by a loop with call burn_drive_get_status() until</span>
<a name="l01896"></a>01896 <span class="comment">    BURN_DRIVE_IDLE is returned.</span>
<a name="l01897"></a>01897 <span class="comment">    Wrapper for: burn_disc_write()</span>
<a name="l01898"></a>01898 <span class="comment">    @since 0.1.0</span>
<a name="l01899"></a>01899 <span class="comment">    @param o    Options which control the burn process. See burnwrite_opts_*()</span>
<a name="l01900"></a>01900 <span class="comment">                in libburn.h.</span>
<a name="l01901"></a>01901 <span class="comment">    @param disc Disc object created either by isoburn_prepare_disc() or by</span>
<a name="l01902"></a>01902 <span class="comment">                isoburn_prepare_new_image().</span>
<a name="l01903"></a>01903 <span class="comment">*/</span>
<a name="l01904"></a>01904 <span class="keywordtype">void</span> <a class="code" href="libisoburn_8h.html#afb64b8b1557b8cac52e59cd51b731d91" title="Start writing of the new session.">isoburn_disc_write</a>(<span class="keyword">struct</span> burn_write_opts *o, <span class="keyword">struct</span> burn_disc *disc);
<a name="l01905"></a>01905 
<a name="l01906"></a>01906 <span class="comment"></span>
<a name="l01907"></a>01907 <span class="comment">/** Inquire state and fill parameters of the fifo which is attached to</span>
<a name="l01908"></a>01908 <span class="comment">    the emerging track. This should be done in the pacifier loop while</span>
<a name="l01909"></a>01909 <span class="comment">    isoburn_disc_write() or burn_disc_write() are active.</span>
<a name="l01910"></a>01910 <span class="comment">    This works only with drives obtained by isoburn_drive_scan_and_grab()</span>
<a name="l01911"></a>01911 <span class="comment">    or isoburn_drive_grab(). If isoburn_prepare_new_image() was used, then</span>
<a name="l01912"></a>01912 <span class="comment">    parameter out_drive must have announced the track output drive.</span>
<a name="l01913"></a>01913 <span class="comment">    Hint: If only burn_write_opts and not burn_drive is known, then the drive</span>
<a name="l01914"></a>01914 <span class="comment">          can be obtained by burn_write_opts_get_drive().</span>
<a name="l01915"></a>01915 <span class="comment">    @since 0.1.0</span>
<a name="l01916"></a>01916 <span class="comment">    @param d     The drive to which the track with the fifo gets burned.</span>
<a name="l01917"></a>01917 <span class="comment">    @param size  The total size of the fifo</span>
<a name="l01918"></a>01918 <span class="comment">    @param free_bytes  The current free capacity of the fifo</span>
<a name="l01919"></a>01919 <span class="comment">    @param status_text  Returns a pointer to a constant text, see below</span>
<a name="l01920"></a>01920 <span class="comment">    @return  &lt;0 reply invalid, &gt;=0 fifo status code:</span>
<a name="l01921"></a>01921 <span class="comment">             bit0+1=input status, bit2=consumption status, i.e:</span>
<a name="l01922"></a>01922 <span class="comment">             0=&quot;standby&quot;   : data processing not started yet</span>
<a name="l01923"></a>01923 <span class="comment">             1=&quot;active&quot;    : input and consumption are active</span>
<a name="l01924"></a>01924 <span class="comment">             2=&quot;ending&quot;    : input has ended without error</span>
<a name="l01925"></a>01925 <span class="comment">             3=&quot;failing&quot;   : input had error and ended,</span>
<a name="l01926"></a>01926 <span class="comment">             4=&quot;unused&quot;    : ( consumption has ended before processing start )</span>
<a name="l01927"></a>01927 <span class="comment">             5=&quot;abandoned&quot; : consumption has ended prematurely</span>
<a name="l01928"></a>01928 <span class="comment">             6=&quot;ended&quot;     : consumption has ended without input error</span>
<a name="l01929"></a>01929 <span class="comment">             7=&quot;aborted&quot;   : consumption has ended after input error</span>
<a name="l01930"></a>01930 <span class="comment">*/</span>
<a name="l01931"></a>01931 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a78e42c91f429199d4d803d747f64c5a7" title="Inquire state and fill parameters of the fifo which is attached to the emerging track.">isoburn_get_fifo_status</a>(<span class="keyword">struct</span> burn_drive *d, <span class="keywordtype">int</span> *size, <span class="keywordtype">int</span> *free_bytes,
<a name="l01932"></a>01932                             <span class="keywordtype">char</span> **status_text);
<a name="l01933"></a>01933 
<a name="l01934"></a>01934 <span class="comment"></span>
<a name="l01935"></a>01935 <span class="comment">/** Inquire whether the most recent write run was successful.</span>
<a name="l01936"></a>01936 <span class="comment">    Wrapper for: burn_drive_wrote_well()</span>
<a name="l01937"></a>01937 <span class="comment">    @since 0.1.0</span>
<a name="l01938"></a>01938 <span class="comment">    @param d  The drive to inquire</span>
<a name="l01939"></a>01939 <span class="comment">    @return   1=burn seems to have went well, 0=burn failed</span>
<a name="l01940"></a>01940 <span class="comment">*/</span>
<a name="l01941"></a>01941 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a154ff3286da356c87784d98537c76a2a" title="Inquire whether the most recent write run was successful.">isoburn_drive_wrote_well</a>(<span class="keyword">struct</span> burn_drive *d);
<a name="l01942"></a>01942 
<a name="l01943"></a>01943 <span class="comment"></span>
<a name="l01944"></a>01944 <span class="comment">/** Call this after isoburn_disc_write has finished and burn_drive_wrote_well()</span>
<a name="l01945"></a>01945 <span class="comment">    indicates success. It will eventually complete the emulation of</span>
<a name="l01946"></a>01946 <span class="comment">    multi-session functionality, if needed at all. Let libisoburn decide.</span>
<a name="l01947"></a>01947 <span class="comment">    Not a wrapper, but peculiar to libisoburn.</span>
<a name="l01948"></a>01948 <span class="comment">    @since 0.1.0</span>
<a name="l01949"></a>01949 <span class="comment">    @param d  The output drive to which the session was written</span>
<a name="l01950"></a>01950 <span class="comment">    @return   1 success , &lt;=0 failure</span>
<a name="l01951"></a>01951 <span class="comment">*/</span>
<a name="l01952"></a>01952 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#aff42634c291ec9d69d1de1019669466e" title="Call this after isoburn_disc_write has finished and burn_drive_wrote_well() indicates success...">isoburn_activate_session</a>(<span class="keyword">struct</span> burn_drive *d);
<a name="l01953"></a>01953 
<a name="l01954"></a>01954 <span class="comment"></span>
<a name="l01955"></a>01955 <span class="comment">/** Wait after normal end of operations until libisofs ended all write</span>
<a name="l01956"></a>01956 <span class="comment">    threads and freed resource reservations.</span>
<a name="l01957"></a>01957 <span class="comment">    This call is not mandatory. But without it, messages from the ending</span>
<a name="l01958"></a>01958 <span class="comment">    threads might appear after the application ended its write procedure.</span>
<a name="l01959"></a>01959 <span class="comment">    @since 0.1.0</span>
<a name="l01960"></a>01960 <span class="comment">    @param input_drive   The drive resp. in_drive which was used with the</span>
<a name="l01961"></a>01961 <span class="comment">                         preparation call.</span>
<a name="l01962"></a>01962 <span class="comment">    @param output_drive  The out_drive used with isoburn_prepare_new_image(),</span>
<a name="l01963"></a>01963 <span class="comment">                         NULL if none.</span>
<a name="l01964"></a>01964 <span class="comment">    @param flag Bitfield, submit 0 for now.</span>
<a name="l01965"></a>01965 <span class="comment">    @return     &lt;=0 error , 1 = success</span>
<a name="l01966"></a>01966 <span class="comment">*/</span>
<a name="l01967"></a>01967 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a4b66eeee54065fdf2aeec54f963b96dc" title="Wait after normal end of operations until libisofs ended all write threads and freed resource reserva...">isoburn_sync_after_write</a>(<span class="keyword">struct</span> burn_drive *input_drive,
<a name="l01968"></a>01968                              <span class="keyword">struct</span> burn_drive *output_drive, <span class="keywordtype">int</span> flag);
<a name="l01969"></a>01969 
<a name="l01970"></a>01970 <span class="comment"></span>
<a name="l01971"></a>01971 <span class="comment">/** Release an aquired drive.</span>
<a name="l01972"></a>01972 <span class="comment">    Wrapper for: burn_drive_release()</span>
<a name="l01973"></a>01973 <span class="comment">    @since 0.1.0</span>
<a name="l01974"></a>01974 <span class="comment">    @param drive The drive to be released</span>
<a name="l01975"></a>01975 <span class="comment">    @param eject 1= eject medium from drive , 0= do not eject</span>
<a name="l01976"></a>01976 <span class="comment">*/</span>
<a name="l01977"></a>01977 <span class="keywordtype">void</span> <a class="code" href="libisoburn_8h.html#ae27964b4041db06e93cc6536d9f6a5d5" title="Release an aquired drive.">isoburn_drive_release</a>(<span class="keyword">struct</span> burn_drive *drive, <span class="keywordtype">int</span> eject);
<a name="l01978"></a>01978 
<a name="l01979"></a>01979 <span class="comment"></span>
<a name="l01980"></a>01980 <span class="comment">/** Shutdown all three libraries.</span>
<a name="l01981"></a>01981 <span class="comment">    Wrapper for : iso_finish() and burn_finish().</span>
<a name="l01982"></a>01982 <span class="comment">    @since 0.1.0</span>
<a name="l01983"></a>01983 <span class="comment">*/</span>
<a name="l01984"></a>01984 <span class="keywordtype">void</span> <a class="code" href="libisoburn_8h.html#a845daef73309e7b200d74d9384b88cdf" title="Shutdown all three libraries.">isoburn_finish</a>(<span class="keywordtype">void</span>);
<a name="l01985"></a>01985 
<a name="l01986"></a>01986 
<a name="l01987"></a>01987 <span class="comment">/*</span>
<a name="l01988"></a>01988 <span class="comment">    The following calls are for expert applications only.</span>
<a name="l01989"></a>01989 <span class="comment">    An application should have a special reason to use them.</span>
<a name="l01990"></a>01990 <span class="comment">*/</span>
<a name="l01991"></a>01991 
<a name="l01992"></a>01992 <span class="comment"></span>
<a name="l01993"></a>01993 <span class="comment">/** Inquire wether the medium needs emulation or would be suitable for</span>
<a name="l01994"></a>01994 <span class="comment">    generic multi-session via libburn.</span>
<a name="l01995"></a>01995 <span class="comment">    @since 0.1.0</span>
<a name="l01996"></a>01996 <span class="comment">    @param d  The drive to inquire</span>
<a name="l01997"></a>01997 <span class="comment">    @return 0 is generic multi-session </span>
<a name="l01998"></a>01998 <span class="comment">            1 is emulated multi-session</span>
<a name="l01999"></a>01999 <span class="comment">           -1 is not suitable for isoburn</span>
<a name="l02000"></a>02000 <span class="comment">*/</span>
<a name="l02001"></a>02001 <span class="keywordtype">int</span> <a class="code" href="libisoburn_8h.html#a18197ed88f597bed7f0ff61e690be0b9" title="Inquire wether the medium needs emulation or would be suitable for generic multi-session via libburn...">isoburn_needs_emulation</a>(<span class="keyword">struct</span> burn_drive *d);
<a name="l02002"></a>02002  
<a name="l02003"></a>02003 
<a name="l02004"></a>02004 <span class="comment">/* ---------------------------- Test area ----------------------------- */</span>
<a name="l02005"></a>02005 
<a name="l02006"></a>02006 <span class="comment">/* no tests active, currently */</span>
<a name="l02007"></a>02007 
</pre></div></div>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated for libisoburn by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.7.4 </small></address>
</body>
</html>