<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-1704</id>
	<title>Nabble - Gnu - Libcdio</title>
	<updated>2009-11-29T17:55:12Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Gnu---Libcdio-f1704.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Gnu---Libcdio-f1704.html" />
	<subtitle type="html">Libcdio is the Compact Disc Input and Control library which encapsulates CD-ROM reading and control and can be used in applications wishing to be oblivious of the OS- and device-dependant properties of a CD-ROM. Gnu - Libcdio home is &lt;a href=&quot;http://savannah.gnu.org/projects/libcdio/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26568561</id>
	<title>Re: Question regarding lib/cdio++/cdio.cpp</title>
	<published>2009-11-29T17:55:12Z</published>
	<updated>2009-11-29T17:55:12Z</updated>
	<author>
		<name>Thomas Rieck</name>
	</author>
	<content type="html">Thank you.
&lt;br&gt;&lt;br&gt;On Thu, Nov 26, 2009 at 6:19 AM, Rocky Bernstein &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26568561&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rocky@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Wed, Nov 25, 2009 at 9:22 PM, Thomas Rieck &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26568561&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;trieck@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I have a specific question about lib/cdio++/cdio.cpp.
&lt;br&gt;&amp;gt; &amp;gt; I am unable to compile this file,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This doesn't make much sense to me. Generally one doesn't compile that file
&lt;br&gt;&amp;gt; but includes it from inside another file.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; because it's looking for &amp;lt;stdint.h&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; definitions.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hmm. I looked at cdio.cpp and I am not exactly sure what there refers to
&lt;br&gt;&amp;gt; &amp;lt;stdint.h&amp;gt;. For example, I don't see any references to unint32 or
&lt;br&gt;&amp;gt; UINT32_MAX.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Why doesn't the module contain :
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; #ifdef HAVE_CONFIG_H
&lt;br&gt;&amp;gt; &amp;gt; # include &amp;quot;config.h&amp;quot;
&lt;br&gt;&amp;gt; &amp;gt; #endif
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Generally, I don't think it is accepted practice for installed headers to
&lt;br&gt;&amp;gt; refer to something outside of the installed space. That is, generally they
&lt;br&gt;&amp;gt; don't refer to names enclosed in &amp;quot;&amp;quot;; rather include names are enclosed in
&lt;br&gt;&amp;gt; &amp;lt;&amp;gt;. So what we have previously done in libcdio is to put a part of config.h
&lt;br&gt;&amp;gt; which is generated at configuration time, into a file called cdio_config.h.
&lt;br&gt;&amp;gt; Installed headers then refer to this via &amp;lt;cdio/cdio_config.h&amp;gt;.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'll guess that what you are trying to do is start with an example C++
&lt;br&gt;&amp;gt; program, put it outside of the libcdio source tree and compile it. If so,
&lt;br&gt;&amp;gt; this is a perfectly reasonable thing to do.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; And I will guess that in that process you have noticed that the example
&lt;br&gt;&amp;gt; programs all refer to &amp;quot;config.h&amp;quot; which can't be found.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If you want to work off a distributed version of libcdio, change
&lt;br&gt;&amp;gt; #include &amp;quot;config.h&amp;quot;
&lt;br&gt;&amp;gt; to:
&lt;br&gt;&amp;gt; #include &amp;lt;cdio/cdio_config.h&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If you are willing to use the latest git sources to libcdio, I've made
&lt;br&gt;&amp;gt; changes in the example programs and more importantly to the main cdio.h
&lt;br&gt;&amp;gt; header that I think should make it easier for people to start with an
&lt;br&gt;&amp;gt; example program.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In the git sources, by simply including cdio.h it will now pull in
&lt;br&gt;&amp;gt; &amp;lt;cdio/cdio_config.h&amp;gt; via an include that it has for &amp;lt;cdio/types.h&amp;gt;; other
&lt;br&gt;&amp;gt; cdio files, like &amp;lt;cdio/iso9660.h&amp;gt;, &amp;nbsp;do the same.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Thank you for your time.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Tom Rieck
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Question-regarding-lib-cdio%2B%2B-cdio.cpp-tp26523515p26568561.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26528010</id>
	<title>Warning: small but potentially major change to cdio.h</title>
	<published>2009-11-26T03:26:36Z</published>
	<updated>2009-11-26T03:26:36Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">In response to a query just posted to libcdio-devel which I guess had to do
&lt;br&gt;with compiling an example C++ program, I've made a small change to cdio.h
&lt;br&gt;but one that may have big consequences.
&lt;br&gt;&lt;br&gt;&amp;lt;cdio/cdio.h&amp;gt; &amp;nbsp;now includes &amp;lt;cdio/types.h&amp;gt; before referring to the HAVE_...
&lt;br&gt;C preprocessor variables.
&lt;br&gt;&lt;br&gt;I think this is the right thing to do, but I'm not completely sure. So if
&lt;br&gt;others want to comment on this please do.
&lt;br&gt;Also I've removed HAVE_CONFIG_H tests from all of the example programs,
&lt;br&gt;since now I think this will be pulled in via &amp;lt;cdio/cdio_config.h&amp;gt;.
&lt;br&gt;&lt;br&gt;A last little but potentially large change is to run some of the example
&lt;br&gt;programs in &amp;quot;make check&amp;quot;. I am guessing that if the
&lt;br&gt;example programs are not built the test won't get run. I haven't done
&lt;br&gt;thorough testing on this though.
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Warning%3A-small-but-potentially-major-change-to-cdio.h-tp26528010p26528010.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26527938</id>
	<title>Re: Question regarding lib/cdio++/cdio.cpp</title>
	<published>2009-11-26T03:19:26Z</published>
	<updated>2009-11-26T03:19:26Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">On Wed, Nov 25, 2009 at 9:22 PM, Thomas Rieck &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26527938&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;trieck@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; I have a specific question about lib/cdio++/cdio.cpp.
&lt;br&gt;&amp;gt; I am unable to compile this file,
&lt;br&gt;&lt;br&gt;&lt;br&gt;This doesn't make much sense to me. Generally one doesn't compile that file
&lt;br&gt;but includes it from inside another file.
&lt;br&gt;&lt;br&gt;because it's looking for &amp;lt;stdint.h&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;definitions.
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Hmm. I looked at cdio.cpp and I am not exactly sure what there refers to
&lt;br&gt;&amp;lt;stdint.h&amp;gt;. For example, I don't see any references to unint32 or
&lt;br&gt;UINT32_MAX.
&lt;br&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Why doesn't the module contain :
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; #ifdef HAVE_CONFIG_H
&lt;br&gt;&amp;gt; # include &amp;quot;config.h&amp;quot;
&lt;br&gt;&amp;gt; #endif
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Generally, I don't think it is accepted practice for installed headers to
&lt;br&gt;refer to something outside of the installed space. That is, generally they
&lt;br&gt;don't refer to names enclosed in &amp;quot;&amp;quot;; rather include names are enclosed in
&lt;br&gt;&amp;lt;&amp;gt;. So what we have previously done in libcdio is to put a part of config.h
&lt;br&gt;which is generated at configuration time, into a file called cdio_config.h.
&lt;br&gt;Installed headers then refer to this via &amp;lt;cdio/cdio_config.h&amp;gt;.
&lt;br&gt;&lt;br&gt;I'll guess that what you are trying to do is start with an example C++
&lt;br&gt;program, put it outside of the libcdio source tree and compile it. If so,
&lt;br&gt;this is a perfectly reasonable thing to do.
&lt;br&gt;&lt;br&gt;And I will guess that in that process you have noticed that the example
&lt;br&gt;programs all refer to &amp;quot;config.h&amp;quot; which can't be found.
&lt;br&gt;&lt;br&gt;If you want to work off a distributed version of libcdio, change
&lt;br&gt;#include &amp;quot;config.h&amp;quot;
&lt;br&gt;to:
&lt;br&gt;#include &amp;lt;cdio/cdio_config.h&amp;gt;
&lt;br&gt;&lt;br&gt;If you are willing to use the latest git sources to libcdio, I've made
&lt;br&gt;changes in the example programs and more importantly to the main cdio.h
&lt;br&gt;header that I think should make it easier for people to start with an
&lt;br&gt;example program.
&lt;br&gt;&lt;br&gt;In the git sources, by simply including cdio.h it will now pull in
&lt;br&gt;&amp;lt;cdio/cdio_config.h&amp;gt; via an include that it has for &amp;lt;cdio/types.h&amp;gt;; other
&lt;br&gt;cdio files, like &amp;lt;cdio/iso9660.h&amp;gt;, &amp;nbsp;do the same.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; Thank you for your time.
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;gt; Tom Rieck
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Question-regarding-lib-cdio%2B%2B-cdio.cpp-tp26523515p26527938.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26523515</id>
	<title>Question regarding lib/cdio++/cdio.cpp</title>
	<published>2009-11-25T18:22:31Z</published>
	<updated>2009-11-25T18:22:31Z</updated>
	<author>
		<name>Thomas Rieck</name>
	</author>
	<content type="html">I have a specific question about lib/cdio++/cdio.cpp.
&lt;br&gt;I am unable to compile this file, because it's looking for &amp;lt;stdint.h&amp;gt;
&lt;br&gt;definitions.
&lt;br&gt;&lt;br&gt;Why doesn't the module contain :
&lt;br&gt;&lt;br&gt;#ifdef HAVE_CONFIG_H
&lt;br&gt;# include &amp;quot;config.h&amp;quot;
&lt;br&gt;#endif
&lt;br&gt;&lt;br&gt;Thank you for your time.
&lt;br&gt;&lt;br&gt;Tom Rieck
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Question-regarding-lib-cdio%2B%2B-cdio.cpp-tp26523515p26523515.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26114237</id>
	<title>Re: S_ISLNK and S_ISSOCK error in libcdio-0.82</title>
	<published>2009-10-29T07:27:11Z</published>
	<updated>2009-10-29T07:27:11Z</updated>
	<author>
		<name>Rocky Bernstein</name>
	</author>
	<content type="html">Thanks for the information and patch. It has been applied and &amp;nbsp;currently in
&lt;br&gt;the git repository. You might want to double check since sometimes I make a
&lt;br&gt;mistake.
&lt;br&gt;&lt;br&gt;The existing tests for S_ISLINK and S_ISSOCK are from a patch supplied by
&lt;br&gt;Mike Frysinger. It was put in, he told me, &amp;nbsp;to support cross compilation. So
&lt;br&gt;I have some concern as to whether this will change that. &amp;nbsp;Anyone care to
&lt;br&gt;comment?
&lt;br&gt;&lt;br&gt;2009/10/29 carlo.bramix &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26114237&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;carlo.bramix@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt; the newest version 0.82 cannot be compiled anymore on Mingw.
&lt;br&gt;&amp;gt; The problem happens because the tests for S_ISLNK and S_ISSOCK macros are
&lt;br&gt;&amp;gt; wrong.
&lt;br&gt;&amp;gt; Into configure script it is used AC_COMPILE_IFELSE instead of
&lt;br&gt;&amp;gt; AC_LINK_IFELSE.
&lt;br&gt;&amp;gt; That's a false test because it does not fail even if those macros are
&lt;br&gt;&amp;gt; unsupported.
&lt;br&gt;&amp;gt; Infact the compiler does not generate an error, it just returns a warning
&lt;br&gt;&amp;gt; like &amp;quot;implicit declaration of function S_ISLNK&amp;quot;.
&lt;br&gt;&amp;gt; On Mingw 4.4.0 that warning is not even printed, I had to add -Wall to GCC
&lt;br&gt;&amp;gt; options for getting it.
&lt;br&gt;&amp;gt; Attached patch fixes the problem.
&lt;br&gt;&amp;gt; Since the new version has been just released and this bug blocks the
&lt;br&gt;&amp;gt; compilation on all platforms that do not support S_ISLNK and S_ISSOCK, do
&lt;br&gt;&amp;gt; you think it would be possible to release a quick bugfixed revision?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sincerely,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Carlo Bramini.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/S_ISLNK-and-S_ISSOCK-error-in-libcdio-0.82-tp26111724p26114237.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26111724</id>
	<title>S_ISLNK and S_ISSOCK error in libcdio-0.82</title>
	<published>2009-10-29T04:59:34Z</published>
	<updated>2009-10-29T04:59:34Z</updated>
	<author>
		<name>carlo.bramix</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;the newest version 0.82 cannot be compiled anymore on Mingw.
&lt;br&gt;The problem happens because the tests for S_ISLNK and S_ISSOCK macros are wrong.
&lt;br&gt;Into configure script it is used AC_COMPILE_IFELSE instead of AC_LINK_IFELSE.
&lt;br&gt;That's a false test because it does not fail even if those macros are unsupported.
&lt;br&gt;Infact the compiler does not generate an error, it just returns a warning like &amp;quot;implicit declaration of function S_ISLNK&amp;quot;.
&lt;br&gt;On Mingw 4.4.0 that warning is not even printed, I had to add -Wall to GCC options for getting it.
&lt;br&gt;Attached patch fixes the problem.
&lt;br&gt;Since the new version has been just released and this bug blocks the compilation on all platforms that do not support S_ISLNK and S_ISSOCK, do you think it would be possible to release a quick bugfixed revision?
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;&lt;br&gt;Carlo Bramini.
&lt;br&gt;&lt;br&gt;&lt;br /&gt;diff -r -u libcdio-0.82-old/configure.ac libcdio-0.82-new/configure.ac
&lt;br&gt;--- libcdio-0.82-old/configure.ac	2009-10-27 11:26:32 +0000
&lt;br&gt;+++ libcdio-0.82-new/configure.ac	2009-10-28 15:04:24 +0000
&lt;br&gt;@@ -217,7 +217,7 @@
&lt;br&gt;&amp;nbsp;## Check for S_ISSOCK() and S_ISLNK() macros
&lt;br&gt;&amp;nbsp;##
&lt;br&gt;&amp;nbsp;AC_MSG_CHECKING(for S_ISLNK() macro)
&lt;br&gt;-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
&lt;br&gt;+AC_LINK_IFELSE([AC_LANG_PROGRAM([
&lt;br&gt;&amp;nbsp;#ifdef HAVE_SYS_STAT_H
&lt;br&gt;&amp;nbsp;# include &amp;lt;sys/stat.h&amp;gt;
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;@@ -226,7 +226,7 @@
&lt;br&gt;&amp;nbsp;[ AC_MSG_RESULT(no) ])
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;AC_MSG_CHECKING([for S_ISSOCK() macro])
&lt;br&gt;-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
&lt;br&gt;+AC_LINK_IFELSE([AC_LANG_PROGRAM([
&lt;br&gt;&amp;nbsp;#ifdef HAVE_SYS_STAT_H
&lt;br&gt;&amp;nbsp;# include &amp;lt;sys/stat.h&amp;gt;
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/S_ISLNK-and-S_ISSOCK-error-in-libcdio-0.82-tp26111724p26111724.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26020484</id>
	<title>Please try out the candidate libcdio debugger release</title>
	<published>2009-10-22T20:37:22Z</published>
	<updated>2009-10-22T20:37:22Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">In preparation for a release around October 27th, please try out the
&lt;br&gt;candidate release tarball
&lt;br&gt;&lt;a href=&quot;http://bashdb.sourceforge.net/libcdio-0.82git.tar.bz2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bashdb.sourceforge.net/libcdio-0.82git.tar.bz2&lt;/a&gt;&amp;nbsp;or what is currently
&lt;br&gt;in Savannah git right now.
&lt;br&gt;&lt;br&gt;From the NEWS file for this release:
&lt;br&gt;&lt;br&gt;- Remove all uses of CDIO_MIN_DRIVER,
&lt;br&gt;&amp;nbsp; CDIO_MAX_DRIVER, CDIO_MIN_DEVICE_DRIVER or CDIO_MAX_DEVICE_DRIVER.
&lt;br&gt;- FreeBSD get_media_changed fixes
&lt;br&gt;- MingGW/Msys compilation issues
&lt;br&gt;- Add OS/2 driver
&lt;br&gt;- Cross compilations fixes and uclinix is like GNU/Linux
&lt;br&gt;- Numerous other bug fixes
&lt;br&gt;&lt;br&gt;Thanks.
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Please-try-out-the-candidate-libcdio-debugger-release-tp26020484p26020484.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25976510</id>
	<title>Re: FreeBSD driver patch</title>
	<published>2009-10-20T07:49:36Z</published>
	<updated>2009-10-20T07:49:36Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">These changes seem reasonable to me, although I don't really understand
&lt;br&gt;patch 1 and don't have a way to test on FreeBSD.
&lt;br&gt;&lt;br&gt;So I ask others to look over and comment on. The usual silence after a
&lt;br&gt;reasonable period of time will be taken to mean agreement that this should
&lt;br&gt;be committed and it will be done.
&lt;br&gt;&lt;br&gt;I was planning a release around Oct 27, but I also will solicit comments as
&lt;br&gt;to whether this should go into that release or not.
&lt;br&gt;&lt;br&gt;On Mon, Oct 19, 2009 at 6:20 PM, Geoff Bailey &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=25976510&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;baileygeoff@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I have attached a couple of patches that fix the FreeBSD IOCTL interface in
&lt;br&gt;&amp;gt; libcdio.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 1. The patch &amp;quot;patch-lib_driver_FreeBSD_freebsd_ioctl.c&amp;quot; fixes the
&lt;br&gt;&amp;gt; read_audio_sectors_freebsd_ioctl() function.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 2. The patch &amp;quot;patch-lib_driver_FreeBSD_freebsd.c&amp;quot; resets the 'exists'
&lt;br&gt;&amp;gt; variable to true before scanning for ATAPI devices and adds a function to
&lt;br&gt;&amp;gt; set the default access mode. &amp;nbsp;This is required when enumerating devices with
&lt;br&gt;&amp;gt; &amp;quot;cdio_get_devices_with_cap&amp;quot;, &amp;nbsp;since one is unable to set the access mode in
&lt;br&gt;&amp;gt; this case and it defaults to CAM.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Since the ATAPI driver is in the GENERIC FreeBSD kernel and the ATPICAM
&lt;br&gt;&amp;gt; driver must be loaded manually, these changes make libcdio work immediately
&lt;br&gt;&amp;gt; upon installation.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Also, my older model drive fails with &amp;quot;xmms2&amp;quot; (when using the CAM
&lt;br&gt;&amp;gt; interface) with &amp;quot;transport failed&amp;quot; but the IOCTL interface works.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/FreeBSD-driver-patch-tp25966666p25976510.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-25561029</id>
	<title>Release 0.82 around October 27th?</title>
	<published>2009-09-22T07:28:10Z</published>
	<updated>2009-09-22T07:28:10Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">As seems to be recent custom, I am planning release 0.82 around October
&lt;br&gt;27th.
&lt;br&gt;&lt;br&gt;Other than the usual bug fixes, the only change this year the one by Nicolas
&lt;br&gt;Boullis which redoes the driver numbering and removes uses of
&lt;br&gt;CDIO_MIN_DRIVER, CDIO_MAX_DRIVER, CDIO_MIN_DEVICE_DRIVER and
&lt;br&gt;CDIO_MAX_DEVICE_DRIVER.
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Release-0.82-around-October-27th--tp25561029p25561029.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24849722</id>
	<title>Re: --enable-cpp-progs and removal of exposed driver enumerations</title>
	<published>2009-08-06T09:17:55Z</published>
	<updated>2009-08-06T09:17:55Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">2009/8/6 Stanislav Brabec &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24849722&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sbrabec@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Rocky Bernstein wrote:
&lt;br&gt;&amp;gt; &amp;gt; If I recall correctly, the feeling was that packagers wanted smaller
&lt;br&gt;&amp;gt; &amp;gt; distributions and/or don't want the C++ code. This is why
&lt;br&gt;&amp;gt; &amp;gt; --enable-cpp-progs by default is disabled. One of the major proponents
&lt;br&gt;&amp;gt; &amp;gt; of this point of view is Flameeyes.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Packagers are always free to split packages or use --enable-feature/
&lt;br&gt;&amp;gt; --disable-feature to fit their needs.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Common rule of upstream is: enable everything that has all dependencies
&lt;br&gt;&amp;gt; installed and what is mature enough.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Anyway, packaging of libcdio was a nightmare due to several build
&lt;br&gt;&amp;gt; dependency loops.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; openSUSE 11.2 builds will use this way:
&lt;br&gt;&amp;gt; 1) build libcdio-mini (minimalistic staging package)
&lt;br&gt;&amp;gt; 2) build libcddb with exclusion of utilities
&lt;br&gt;&amp;gt; 3) build vcdimager using libcdio-mini and libcddb
&lt;br&gt;&amp;gt; 4) build libcdio using vcdimager (that needs libcdio-mini), libcddb
&lt;br&gt;&amp;gt; 5) build libcddb utilities using libcdio
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Only build of base system and avahi package are comparably complex.
&lt;/div&gt;&lt;br&gt;&lt;br&gt;Sorry to hear.
&lt;br&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; If you could work up a patch to fix this, that'd be fantastic.
&lt;br&gt;&amp;gt; &amp;gt; Thanks.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I will look at it.
&lt;br&gt;&lt;br&gt;&lt;br&gt;If you have thoughts about how to reduce the complexity in packaging or
&lt;br&gt;better have a way to set up configuration options to address this that would
&lt;br&gt;be most welcome as well.
&lt;br&gt;&lt;br&gt;A Systems Administration principle is relevant here: never ascribe to
&lt;br&gt;maliciousness or willful intent that which can easily be explained by
&lt;br&gt;oversight or ignorance.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Best Regards / S pozdravem,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Stanislav Brabec
&lt;br&gt;&amp;gt; software developer
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; SUSE LINUX, s. r. o. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24849722&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sbrabec@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Lihovarská 1060/12 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tel: +420 284 028 966, +49 911 740538747
&lt;br&gt;&amp;gt; 190 00 Praha 9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fax: +420 284 028 951
&lt;br&gt;&amp;gt; Czech Republic &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.suse.cz/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.suse.cz/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/--enable-cpp-progs-and-removal-of-exposed-driver-enumerations-tp24847499p24849722.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24847499</id>
	<title>--enable-cpp-progs and removal of exposed driver enumerations</title>
	<published>2009-08-06T07:19:10Z</published>
	<updated>2009-08-06T07:19:10Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">If I recall correctly, the feeling was that packagers wanted smaller
&lt;br&gt;distributions and/or don't want the C++ code. This is why --enable-cpp-progs
&lt;br&gt;by default is disabled. One of the major proponents of this point of
&lt;br&gt;view&amp;lt;&lt;a href=&quot;http://blog.flameeyes.eu/2007/11/17/a-bunch-of-silly-c-libraries&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://blog.flameeyes.eu/2007/11/17/a-bunch-of-silly-c-libraries&lt;/a&gt;&amp;gt;is
&lt;br&gt;Flameeyes.
&lt;br&gt;&lt;br&gt;But if it is enabled yes, I guess it would be a bug if the pkgconfig files
&lt;br&gt;are not installed.
&lt;br&gt;&lt;br&gt;If you could work up a patch to fix this, that'd be fantastic. Thanks.
&lt;br&gt;&lt;br&gt;While on the topic of distributions and changes, I should note that the git
&lt;br&gt;repository now has work done by Nicolas Boullis to reduce fture ABI breakage
&lt;br&gt;and corrects an API misfeature.
&lt;br&gt;&lt;br&gt;However should I have misrepresented things (and it is not uncommon for me
&lt;br&gt;to get things wrong), I hope others will speak up and correct me.
&lt;br&gt;&lt;br&gt;2009/8/6 Stanislav Brabec &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24847499&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sbrabec@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hallo.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am just packaging libcdio-0.81 and found and interesting problem
&lt;br&gt;&amp;gt; there:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Without --enable-cpp-progs, C++ libraries are built, but C++ library
&lt;br&gt;&amp;gt; pkgconfig files are not installed. I guess it is not the intended
&lt;br&gt;&amp;gt; behavior.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I don't have a patch for it, but I can look into this problem. It seems,
&lt;br&gt;&amp;gt; that --enable-cpp-progs is by default disabled.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; Best Regards / S pozdravem,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Stanislav Brabec
&lt;br&gt;&amp;gt; software developer
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; SUSE LINUX, s. r. o. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=24847499&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;sbrabec@...&lt;/a&gt;
&lt;br&gt;&amp;gt; Lihovarská 1060/12 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tel: +420 284 028 966, +49 911 740538747
&lt;br&gt;&amp;gt; 190 00 Praha 9 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fax: +420 284 028 951
&lt;br&gt;&amp;gt; Czech Republic &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.suse.cz/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.suse.cz/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/--enable-cpp-progs-and-removal-of-exposed-driver-enumerations-tp24847499p24847499.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24822942</id>
	<title>Re: Re: Moving into office</title>
	<published>2009-08-05T01:36:41Z</published>
	<updated>2009-08-05T01:36:41Z</updated>
	<author>
		<name>Burkhard Plaum</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;Robert William Fuller wrote:
&lt;br&gt;&amp;gt; I do not know. &amp;nbsp;I will be in on Wednesday. &amp;nbsp;If Luke is there, I will ask
&lt;br&gt;&amp;gt; him.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Rob
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;Are you sure this correspondence belongs to a public mailing list?
&lt;br&gt;&lt;br&gt;Burkhard
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Moving-into-office-tp24813062p24822942.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24813083</id>
	<title>Re: Moving into office</title>
	<published>2009-08-04T10:36:44Z</published>
	<updated>2009-08-04T10:36:44Z</updated>
	<author>
		<name>Robert William Fuller</name>
	</author>
	<content type="html">Whoops. &amp;nbsp;This should not have gone here. &amp;nbsp;O well. &amp;nbsp;Sorry!
&lt;br&gt;&lt;br&gt;Rob
&lt;br&gt;&lt;br&gt;Robert William Fuller wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I do not know. &amp;nbsp;I will be in on Wednesday. &amp;nbsp;If Luke is there, I will ask
&lt;br&gt;&amp;gt; him.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Rob
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Roman T wrote:
&lt;br&gt;&amp;gt;&amp;gt; Hi Rob,
&lt;br&gt;&amp;gt;&amp;gt; Gotta using this cool email in lieu of webmail which is down.
&lt;br&gt;&amp;gt;&amp;gt; I would be trying to move into your office soon. However, I am not
&lt;br&gt;&amp;gt;&amp;gt; entirely clear about the status of the desk that belonged to the visiting
&lt;br&gt;&amp;gt;&amp;gt; student. Her computer is still there. Do you know if she left by any
&lt;br&gt;&amp;gt;&amp;gt; chance?
&lt;br&gt;&amp;gt;&amp;gt; Roman
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Moving-into-office-tp24813062p24813083.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-24813062</id>
	<title>Re: Moving into office</title>
	<published>2009-08-04T10:36:04Z</published>
	<updated>2009-08-04T10:36:04Z</updated>
	<author>
		<name>Robert William Fuller</name>
	</author>
	<content type="html">I do not know. &amp;nbsp;I will be in on Wednesday. &amp;nbsp;If Luke is there, I will ask
&lt;br&gt;him.
&lt;br&gt;&lt;br&gt;Rob
&lt;br&gt;&lt;br&gt;Roman T wrote:
&lt;br&gt;&amp;gt; Hi Rob,
&lt;br&gt;&amp;gt; Gotta using this cool email in lieu of webmail which is down.
&lt;br&gt;&amp;gt; I would be trying to move into your office soon. However, I am not
&lt;br&gt;&amp;gt; entirely clear about the status of the desk that belonged to the visiting
&lt;br&gt;&amp;gt; student. Her computer is still there. Do you know if she left by any
&lt;br&gt;&amp;gt; chance?
&lt;br&gt;&amp;gt; Roman
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Moving-into-office-tp24813062p24813062.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23560221</id>
	<title>Release of pycdio and rbcdio possibly May 18</title>
	<published>2009-05-15T06:47:52Z</published>
	<updated>2009-05-15T06:47:52Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">Thomas Vander Stichelehas contributed work to add CDText to the Python
&lt;br&gt;bindings which I've ported over to Ruby bindings as well. Also took the
&lt;br&gt;opportunity to make rbcdio Ruby 1.9 compatibile.
&lt;br&gt;&lt;br&gt;So unless folks have thoughts otherwise, I'm planning a release around May
&lt;br&gt;18.
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Release-of-pycdio-and-rbcdio-possibly-May-18-tp23560221p23560221.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23297824</id>
	<title>Re: Device::Cdio::???? and CD bootloader</title>
	<published>2009-04-29T06:46:29Z</published>
	<updated>2009-04-29T06:46:29Z</updated>
	<author>
		<name>Rocky Bernstein-2</name>
	</author>
	<content type="html">Comments in line.
&lt;br&gt;&lt;br&gt;On Sun, Apr 26, 2009 at 1:59 PM, Tong Sun &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23297824&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;suntong@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Thanks a lot Rocky.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I haven't got around to subscript to &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23297824&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;libcdio-devel@...&lt;/a&gt; and ask the
&lt;br&gt;&amp;gt; question yet, and you've already replied. Thanks.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm CCing &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23297824&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;libcdio-devel@...&lt;/a&gt; this time, so that other people can
&lt;br&gt;&amp;gt; benefit as well. Thus, I use full quote to reply. Moreover, for the
&lt;br&gt;&amp;gt; archive, the reason for my question is,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Many .iso files come with size much less than 700M. So it would be a waste
&lt;br&gt;&amp;gt; of
&lt;br&gt;&amp;gt; CD spaces to burn them as-is -- I want to add more files to them (then
&lt;br&gt;&amp;gt; pack them up again as iso) before burning them. So the most important
&lt;br&gt;&amp;gt; step is to extract the CD boot loaders (mainly for Windows based
&lt;br&gt;&amp;gt; bootable .iso images), so as to make it bootable again.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Sun, Apr 26, 2009 at 10:28 AM, Rocky Bernstein &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23297824&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rocky@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; Device::Cdio is a Perl wrapper around libcdio, which is a library for CD
&lt;br&gt;&amp;gt; and
&lt;br&gt;&amp;gt; &amp;gt; ISO9600 reading and it has provisions for the some of the various
&lt;br&gt;&amp;gt; ISO-9660
&lt;br&gt;&amp;gt; &amp;gt; extensions. If there is something in the &amp;quot;El Torito&amp;quot; extension that
&lt;br&gt;&amp;gt; libcdio
&lt;br&gt;&amp;gt; &amp;gt; doesn't handle libcdio should be corrected.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; So I believe it possible to read the boot-loader information. Adding more
&lt;br&gt;&amp;gt; &amp;gt; stuff to the end to write a new image is a different problem.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; example/iso2.pl from the Device::Cdio shows how to read a specific sector
&lt;br&gt;&amp;gt; of
&lt;br&gt;&amp;gt; &amp;gt; an ISO9660 image such as sector 17. Most CDs have just one session so
&lt;br&gt;&amp;gt; this
&lt;br&gt;&amp;gt; &amp;gt; &amp;quot;first&amp;quot; versus &amp;quot;last&amp;quot; session is usually irrelevant. I know in the C
&lt;br&gt;&amp;gt; library
&lt;br&gt;&amp;gt; &amp;gt; there is a way ascertain how many sessions an image has, I'm not sure if
&lt;br&gt;&amp;gt; &amp;gt; that has been made accessible in the Perl library.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks, I took a look at the example/iso2.pl, and find that actually
&lt;br&gt;&amp;gt; the better example is examples/iso3.pl for my case, because iso2.pl
&lt;br&gt;&amp;gt; read from CD-ROM or .cue file, whereas iso3.pl reads from ISO 9660
&lt;br&gt;&amp;gt; image file, which is what I want. Will try...
&lt;/div&gt;&lt;br&gt;&lt;br&gt;Ok. Great.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; BTW, what does lsn stands for?
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;Check out the glossary
&lt;br&gt;&lt;a href=&quot;http://www.gnu.org/software/libcdio/libcdio.html#SEC61&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gnu.org/software/libcdio/libcdio.html#SEC61&lt;/a&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; And on the topic of the Perl library, I should say that the Python and
&lt;br&gt;&amp;gt; Ruby
&lt;br&gt;&amp;gt; &amp;gt; libraries have been better maintained (by me) than the Perl library. So
&lt;br&gt;&amp;gt; if
&lt;br&gt;&amp;gt; &amp;gt; you can use either the C (best) Ruby (next best) or Python (3rd best) it
&lt;br&gt;&amp;gt; may
&lt;br&gt;&amp;gt; &amp;gt; be better than Perl.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Hmm.., I don't know Ruby or Python. I prefer Perl because I want to
&lt;br&gt;&amp;gt; write minimum code. How about your iso-read command?
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.linuxcertif.com/man/1/iso-read/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.linuxcertif.com/man/1/iso-read/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Seems it is only file based, instead of sector based reading.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Yep, it's file based. However if someone wants to submit patches to add
&lt;br&gt;options to make it sector based, I'm amenable to that.
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; If you get to the stage of wanting to write back the ISO9660 image, you
&lt;br&gt;&amp;gt; are
&lt;br&gt;&amp;gt; &amp;gt; aware of mkiso9660. vcdimager has C routines for writing CD images as
&lt;br&gt;&amp;gt; well,
&lt;br&gt;&amp;gt; &amp;gt; but someone would have to extract that and turn it into a library much as
&lt;br&gt;&amp;gt; &amp;gt; libcdio was done.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Good luck.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On Mon, Apr 20, 2009 at 1:36 PM, Rocky Bernstein &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23297824&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rocky@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Just to let you know that I got your email. . . .
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Also you may want to try to post on mailing list: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23297824&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;libcdio-devel@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; On Mon, Apr 20, 2009 at 12:37 PM, Tong Sun &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23297824&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;suntong@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Hi Rocky,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I'm looking for ways to extract the CD boot loaders. Do you know how
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; to do it with your Device::Cdio::???? packages?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; FYI, I'm looking for ways to extract the CD boot loaders, mainly for
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Windows based bootable .iso images, since I know how to make Linux
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; based bootable .iso images. The answer that I got was Windows based:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; bbie
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://www.nu2.nu/bbie/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.nu2.nu/bbie/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Ref:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://www.boot-land.net/forums/index.php?showtopic=6370&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.boot-land.net/forums/index.php?showtopic=6370&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; The reason why I need to do it is explained in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://www.boot-land.net/forums/index.php?showtopic=6372&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.boot-land.net/forums/index.php?showtopic=6372&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; May .iso files come with size much less than 700M. So it would be a
&lt;br&gt;&amp;gt; waste
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; of
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; CD spaces to burn them as-is -- I want to add more files to them (then
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; pack them up again as iso) before burning them.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Also in the thread, tech details about CD bootloader:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; According to &amp;quot;El Torito&amp;quot; Bootable CD-ROM Format Specification,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/El_Torito_(CD-ROM_standard&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/El_Torito_(CD-ROM_standard&lt;/a&gt;)&amp;lt;&lt;a href=&quot;http://en.wikipedia.org/wiki/El_Torito_%28CD-ROM_standard%29&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/El_Torito_%28CD-ROM_standard%29&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.phoenix.com/NR/rdonlyres/98D3219C-9CC9-4DF5-B496-A286D893E36A/0/specscdrom.pdf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.phoenix.com/NR/rdonlyres/98D3219C-9CC9-4DF5-B496-A286D893E36A/0/specscdrom.pdf&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;quot;The &amp;quot;Boot Record&amp;quot; must reside at sector 11 (17 decimal) in the last
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; session
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; on the CD.&amp;quot;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Thanks for your help.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; tong
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Re%3A-Device%3A%3ACdio%3A%3A-----and-CD-bootloader-tp23297824p23297824.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23191692</id>
	<title>Re: Patch for libcdio-0.81 FreeBSD drive lock</title>
	<published>2009-04-23T00:28:46Z</published>
	<updated>2009-04-23T00:28:46Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">Patch applied. Please double check I did this correctly.
&lt;br&gt;&lt;br&gt;Thanks
&lt;br&gt;&lt;br&gt;On Thu, Apr 23, 2009 at 12:39 AM, John Wehle &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23191692&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;john@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; A side effect of opening the cdrom device on FreeBSD is it
&lt;br&gt;&amp;gt; locks the drive. &amp;nbsp;This makes cdio_get_media_changed less
&lt;br&gt;&amp;gt; useful and prevents you from being able to switch disks
&lt;br&gt;&amp;gt; when using things such as the audacious media player.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This patch simply unlocks the drive right after it's opened
&lt;br&gt;&amp;gt; prior to opening the cam passthrough device.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -- John Wehle
&lt;br&gt;&amp;gt; ------------------8&amp;lt;------------------------8&amp;lt;------------------------
&lt;br&gt;&amp;gt; --- lib/driver/FreeBSD/freebsd_cam.c.ORIGINAL &amp;nbsp; 2008-04-24
&lt;br&gt;&amp;gt; 02:59:26.000000000 -0400
&lt;br&gt;&amp;gt; +++ lib/driver/FreeBSD/freebsd_cam.c &amp;nbsp; &amp;nbsp;2009-04-21 02:46:02.000000000 -0400
&lt;br&gt;&amp;gt; @@ -122,6 +122,8 @@ init_freebsd_cam (_img_private_t *p_env)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; return false;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; + &amp;nbsp;(void)ioctl(p_env-&amp;gt;gen.fd, CDIOCALLOW);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp; if (ioctl (p_env-&amp;gt;gen.fd, CAMGETPASSTHRU, &amp;p_env-&amp;gt;ccb) &amp;lt; 0)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; cdio_warn (&amp;quot;open: %s&amp;quot;, strerror (errno));
&lt;br&gt;&amp;gt; -------------------------------------------------------------------------
&lt;br&gt;&amp;gt; | &amp;nbsp; Feith Systems &amp;nbsp;| &amp;nbsp; Voice: 1-215-646-8000 &amp;nbsp;| &amp;nbsp;Email: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23191692&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;john@...&lt;/a&gt; &amp;nbsp;|
&lt;br&gt;&amp;gt; | &amp;nbsp; &amp;nbsp;John Wehle &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; Fax: 1-215-540-5495 &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |
&lt;br&gt;&amp;gt; -------------------------------------------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Patch-for-libcdio-0.81-FreeBSD-drive-lock-tp23190164p23191692.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23190164</id>
	<title>Patch for libcdio-0.81 FreeBSD drive lock</title>
	<published>2009-04-22T21:39:37Z</published>
	<updated>2009-04-22T21:39:37Z</updated>
	<author>
		<name>John Wehle</name>
	</author>
	<content type="html">A side effect of opening the cdrom device on FreeBSD is it
&lt;br&gt;locks the drive. &amp;nbsp;This makes cdio_get_media_changed less
&lt;br&gt;useful and prevents you from being able to switch disks
&lt;br&gt;when using things such as the audacious media player.
&lt;br&gt;&lt;br&gt;This patch simply unlocks the drive right after it's opened
&lt;br&gt;prior to opening the cam passthrough device.
&lt;br&gt;&lt;br&gt;-- John Wehle
&lt;br&gt;------------------8&amp;lt;------------------------8&amp;lt;------------------------
&lt;br&gt;--- lib/driver/FreeBSD/freebsd_cam.c.ORIGINAL	2008-04-24 02:59:26.000000000 -0400
&lt;br&gt;+++ lib/driver/FreeBSD/freebsd_cam.c	2009-04-21 02:46:02.000000000 -0400
&lt;br&gt;@@ -122,6 +122,8 @@ init_freebsd_cam (_img_private_t *p_env)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;(void)ioctl(p_env-&amp;gt;gen.fd, CDIOCALLOW);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (ioctl (p_env-&amp;gt;gen.fd, CAMGETPASSTHRU, &amp;p_env-&amp;gt;ccb) &amp;lt; 0)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cdio_warn (&amp;quot;open: %s&amp;quot;, strerror (errno));
&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;| &amp;nbsp; Feith Systems &amp;nbsp;| &amp;nbsp; Voice: 1-215-646-8000 &amp;nbsp;| &amp;nbsp;Email: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23190164&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;john@...&lt;/a&gt; &amp;nbsp;|
&lt;br&gt;| &amp;nbsp; &amp;nbsp;John Wehle &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; Fax: 1-215-540-5495 &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |
&lt;br&gt;-------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Patch-for-libcdio-0.81-FreeBSD-drive-lock-tp23190164p23190164.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23128550</id>
	<title>Re: 44 bit difference</title>
	<published>2009-04-19T16:37:51Z</published>
	<updated>2009-04-19T16:37:51Z</updated>
	<author>
		<name>Cuke</name>
	</author>
	<content type="html">yes, sorry! :)
&lt;br&gt;&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Robert William Fuller wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;So it was a 44 byte difference, not a &amp;quot;44 bit&amp;quot; difference. &amp;nbsp;I might have
&lt;br&gt;guessed something like that if you had said &amp;quot;bytes&amp;quot; instead of &amp;quot;bits&amp;quot; in
&lt;br&gt;the subject. &amp;nbsp;It helps to be very careful when you state a problem. &amp;nbsp;I'm
&lt;br&gt;glad to hear you solved it :-)
&lt;br&gt;&lt;br&gt;Cuke wrote:
&lt;br&gt;&amp;gt; Ok so with the help of rocky i found that my program i post you didn't add
&lt;br&gt;&amp;gt; the wav header. So i just add this lines of code after the OUTFILE open:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Get the track size in bytes and conver
&lt;br&gt;&amp;gt; 	int bytes= ( i_last_lsn - i_first_lsn + 1 ) * CDIO_CD_FRAMESIZE_RAW;
&lt;br&gt;&amp;gt; 	cout &amp;lt;&amp;lt; &amp;quot;Nr Bytes:&amp;quot; &amp;lt;&amp;lt; bytes+44 &amp;lt;&amp;lt; endl;
&lt;br&gt;&amp;gt; 	
&lt;br&gt;&amp;gt; 	//Open the output file
&lt;br&gt;&amp;gt; 	ofstream outfile (&amp;quot;temp.wav&amp;quot;,ofstream::binary | ofstream::app |
&lt;br&gt;&amp;gt; ofstream::out);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;gt; 	//Waw format header specification
&lt;br&gt;&amp;gt; 	int waweChunkLength=bytes+44-8;
&lt;br&gt;&amp;gt; 	int fmtChunkLength=16;
&lt;br&gt;&amp;gt; 	int compressionCode=1;
&lt;br&gt;&amp;gt; 	int numberOfChannels=2;
&lt;br&gt;&amp;gt; 	int sampleRate=44100;
&lt;br&gt;&amp;gt; 	int blockAlign=44100*2*2;
&lt;br&gt;&amp;gt; 	int significantBps=4;
&lt;br&gt;&amp;gt; 	int extraFormatBytes=16;
&lt;br&gt;&amp;gt; 	
&lt;br&gt;&amp;gt; 	outfile.write(&amp;quot;RIFF&amp;quot;,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;waweChunkLength,4);
&lt;br&gt;&amp;gt; 	outfile.write(&amp;quot;WAVEfmt &amp;quot;,8);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;fmtChunkLength,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;compressionCode,2);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;numberOfChannels,2);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;sampleRate,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;blockAlign,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;significantBps,2);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;extraFormatBytes,2);
&lt;br&gt;&amp;gt; 	outfile.write(&amp;quot;data&amp;quot;,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;bytes,4);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	//Track Rip
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( i_cursor = i_first_lsn; i_cursor &amp;lt;= i_last_lsn; i_cursor ++) {
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Bare in mind hwr that the (char *) conversion is platform dependent and that
&lt;br&gt;&amp;gt; this changed doesn't deal with endianness. 
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.nabble.com/file/p23128111/main.cpp&quot; target=&quot;_top&quot;&gt;http://www.nabble.com/file/p23128111/main.cpp&lt;/a&gt;&amp;nbsp;main.cpp &amp;nbsp;i included a working
&lt;br&gt;&amp;gt; c++ source file.
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Libcdio-help mailing list
&lt;br&gt;Libcdio-help@gnu.org
&lt;br&gt;&lt;a href=&quot;http://lists.gnu.org/mailman/listinfo/libcdio-help&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.gnu.org/mailman/listinfo/libcdio-help&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Help-f1707.html&quot; embed=&quot;fixTarget[1707]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Help&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/44-bit-difference-tp23065170p23128550.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23128516</id>
	<title>Re: 44 bit difference</title>
	<published>2009-04-19T16:31:18Z</published>
	<updated>2009-04-19T16:31:18Z</updated>
	<author>
		<name>Robert William Fuller</name>
	</author>
	<content type="html">So it was a 44 byte difference, not a &amp;quot;44 bit&amp;quot; difference. &amp;nbsp;I might have
&lt;br&gt;guessed something like that if you had said &amp;quot;bytes&amp;quot; instead of &amp;quot;bits&amp;quot; in
&lt;br&gt;the subject. &amp;nbsp;It helps to be very careful when you state a problem. &amp;nbsp;I'm
&lt;br&gt;glad to hear you solved it :-)
&lt;br&gt;&lt;br&gt;Cuke wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Ok so with the help of rocky i found that my program i post you didn't add
&lt;br&gt;&amp;gt; the wav header. So i just add this lines of code after the OUTFILE open:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Get the track size in bytes and conver
&lt;br&gt;&amp;gt; 	int bytes= ( i_last_lsn - i_first_lsn + 1 ) * CDIO_CD_FRAMESIZE_RAW;
&lt;br&gt;&amp;gt; 	cout &amp;lt;&amp;lt; &amp;quot;Nr Bytes:&amp;quot; &amp;lt;&amp;lt; bytes+44 &amp;lt;&amp;lt; endl;
&lt;br&gt;&amp;gt; 	
&lt;br&gt;&amp;gt; 	//Open the output file
&lt;br&gt;&amp;gt; 	ofstream outfile (&amp;quot;temp.wav&amp;quot;,ofstream::binary | ofstream::app |
&lt;br&gt;&amp;gt; ofstream::out);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;gt; 	//Waw format header specification
&lt;br&gt;&amp;gt; 	int waweChunkLength=bytes+44-8;
&lt;br&gt;&amp;gt; 	int fmtChunkLength=16;
&lt;br&gt;&amp;gt; 	int compressionCode=1;
&lt;br&gt;&amp;gt; 	int numberOfChannels=2;
&lt;br&gt;&amp;gt; 	int sampleRate=44100;
&lt;br&gt;&amp;gt; 	int blockAlign=44100*2*2;
&lt;br&gt;&amp;gt; 	int significantBps=4;
&lt;br&gt;&amp;gt; 	int extraFormatBytes=16;
&lt;br&gt;&amp;gt; 	
&lt;br&gt;&amp;gt; 	outfile.write(&amp;quot;RIFF&amp;quot;,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;waweChunkLength,4);
&lt;br&gt;&amp;gt; 	outfile.write(&amp;quot;WAVEfmt &amp;quot;,8);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;fmtChunkLength,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;compressionCode,2);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;numberOfChannels,2);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;sampleRate,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;blockAlign,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;significantBps,2);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;extraFormatBytes,2);
&lt;br&gt;&amp;gt; 	outfile.write(&amp;quot;data&amp;quot;,4);
&lt;br&gt;&amp;gt; 	outfile.write((char*)&amp;bytes,4);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 	//Track Rip
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( i_cursor = i_first_lsn; i_cursor &amp;lt;= i_last_lsn; i_cursor ++) {
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Bare in mind hwr that the (char *) conversion is platform dependent and that
&lt;br&gt;&amp;gt; this changed doesn't deal with endianness. 
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.nabble.com/file/p23128111/main.cpp&quot; target=&quot;_top&quot;&gt;http://www.nabble.com/file/p23128111/main.cpp&lt;/a&gt;&amp;nbsp;main.cpp &amp;nbsp;i included a working
&lt;br&gt;&amp;gt; c++ source file.
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;Libcdio-help mailing list
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=23128516&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Libcdio-help@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://lists.gnu.org/mailman/listinfo/libcdio-help&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lists.gnu.org/mailman/listinfo/libcdio-help&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Help-f1707.html&quot; embed=&quot;fixTarget[1707]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Help&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/44-bit-difference-tp23065170p23128516.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23128111</id>
	<title>Re: 44 bit difference</title>
	<published>2009-04-19T15:29:46Z</published>
	<updated>2009-04-19T15:29:46Z</updated>
	<author>
		<name>Cuke</name>
	</author>
	<content type="html">Ok so with the help of rocky i found that my program i post you didn't add the wav header. So i just add this lines of code after the OUTFILE open:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Get the track size in bytes and conver
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int bytes= ( i_last_lsn - i_first_lsn + 1 ) * CDIO_CD_FRAMESIZE_RAW;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &amp;quot;Nr Bytes:&amp;quot; &amp;lt;&amp;lt; bytes+44 &amp;lt;&amp;lt; endl;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Open the output file
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ofstream outfile (&amp;quot;temp.wav&amp;quot;,ofstream::binary | ofstream::app | ofstream::out);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Waw format header specification
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int waweChunkLength=bytes+44-8;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int fmtChunkLength=16;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int compressionCode=1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int numberOfChannels=2;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int sampleRate=44100;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int blockAlign=44100*2*2;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int significantBps=4;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int extraFormatBytes=16;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write(&amp;quot;RIFF&amp;quot;,4);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;waweChunkLength,4);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write(&amp;quot;WAVEfmt &amp;quot;,8);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;fmtChunkLength,4);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;compressionCode,2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;numberOfChannels,2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;sampleRate,4);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;blockAlign,4);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;significantBps,2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;extraFormatBytes,2);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write(&amp;quot;data&amp;quot;,4);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outfile.write((char*)&amp;bytes,4);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Track Rip
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( i_cursor = i_first_lsn; i_cursor &amp;lt;= i_last_lsn; i_cursor ++) {
&lt;br&gt;&lt;br&gt;Bare in mind hwr that the (char *) conversion is platform dependent and that this changed doesn't deal with endianness. &lt;a href=&quot;http://old.nabble.com/file/p23128111/main.cpp&quot; target=&quot;_top&quot;&gt;main.cpp&lt;/a&gt;&amp;nbsp;i included a working c++ source file.&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Help-f1707.html&quot; embed=&quot;fixTarget[1707]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Help&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/44-bit-difference-tp23065170p23128111.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23082304</id>
	<title>Re: 44 bit difference</title>
	<published>2009-04-16T10:05:15Z</published>
	<updated>2009-04-16T10:05:15Z</updated>
	<author>
		<name>Cuke</name>
	</author>
	<content type="html">if you need more info i'm here! 
&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Cuke wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;my extracted audio track differ from the cd-paranoia's one of 44bit.My track isn't played either..this is the i use for extraction. the qdebug() function is just for display debug info in qt project. where i'm mistaking?
&lt;br&gt;&lt;br&gt;cdrom_drive_t *d = NULL;
&lt;br&gt;&amp;nbsp; &amp;nbsp; char **ppsz_cd_drives;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; ppsz_cd_drives = cdio_get_devices_with_cap(NULL, CDIO_FS_AUDIO, false);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if (ppsz_cd_drives) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; d=cdda_identify(*ppsz_cd_drives, 1, NULL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }else{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;Unable to access to a cdrom with audio cd in it&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; cdio_free_device_list(ppsz_cd_drives);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if ( !d ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;Unable to identify audio CD disc.\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; cdda_verbose_set(d, CDDA_MESSAGE_PRINTIT, CDDA_MESSAGE_PRINTIT);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if ( 0 != cdda_open(d) ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;Unable to open disc.\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; cdrom_paranoia_t* p = cdio_paranoia_init(d);
&lt;br&gt;&amp;nbsp; &amp;nbsp; lsn_t i_first_lsn = cdda_disc_firstsector(d);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if ( -1 == i_first_lsn ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;Trouble getting starting LSN\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lsn_t &amp;nbsp; i_cursor;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; track_t i_track &amp;nbsp; &amp;nbsp;= cdda_sector_gettrack(d, i_first_lsn);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lsn_t &amp;nbsp; i_last_lsn = cdda_track_lastsector(d, i_track);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //paranoia_modeset(p, PARANOIA_MODE_FULL^PARANOIA_MODE_NEVERSKIP);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; paranoia_seek(p, i_first_lsn, SEEK_SET);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; i_first_lsn &amp;lt;&amp;lt; &amp;quot;-&amp;quot; &amp;lt;&amp;lt; i_last_lsn;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; QFile file(tr(&amp;quot;outtrack.wav&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(!file.open(QIODevice::WriteOnly|QIODevice::Append)){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;impossibile aprire il file di scrittura&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( i_cursor = i_first_lsn; i_cursor &amp;lt;= i_last_lsn; i_cursor ++) {
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int16_t *p_readbuf=paranoia_read(p, NULL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *psz_err=cdda_errors(d);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *psz_mes=cdda_messages(d);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (psz_mes || psz_err)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; psz_err &amp;lt;&amp;lt; psz_mes;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (psz_err) free(psz_err);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (psz_mes) free(psz_mes);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( !p_readbuf ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;paranoia read error. Stopping.\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *temp= (char*) p_readbuf;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; file.write(temp,(qint64)CDIO_CD_FRAMESIZE_RAW);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; file.close();
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; i_first_lsn &amp;lt;&amp;lt; &amp;quot;\t&amp;quot; &amp;lt;&amp;lt; i_last_lsn ;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; cdda_track_firstsector(d,i_track);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; paranoia_free(p);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; cdda_close(d);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; return; 
&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Help-f1707.html&quot; embed=&quot;fixTarget[1707]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Help&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/44-bit-difference-tp23065170p23082304.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-23065170</id>
	<title>44 bit difference</title>
	<published>2009-04-15T12:06:40Z</published>
	<updated>2009-04-15T12:06:40Z</updated>
	<author>
		<name>Cuke</name>
	</author>
	<content type="html">my extracted audio track differ from the cd-paranoia's one of 44bit.My track isn't played either..this is the i use for extraction. the qdebug() function is just for display debug info in qt project. where i'm mistaking?
&lt;br&gt;&lt;br&gt;cdrom_drive_t *d = NULL;
&lt;br&gt;&amp;nbsp; &amp;nbsp; char **ppsz_cd_drives;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; ppsz_cd_drives = cdio_get_devices_with_cap(NULL, CDIO_FS_AUDIO, false);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if (ppsz_cd_drives) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; d=cdda_identify(*ppsz_cd_drives, 1, NULL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }else{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;Unable to access to a cdrom with audio cd in it&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; cdio_free_device_list(ppsz_cd_drives);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if ( !d ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;Unable to identify audio CD disc.\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; cdda_verbose_set(d, CDDA_MESSAGE_PRINTIT, CDDA_MESSAGE_PRINTIT);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if ( 0 != cdda_open(d) ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;Unable to open disc.\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; cdrom_paranoia_t* p = cdio_paranoia_init(d);
&lt;br&gt;&amp;nbsp; &amp;nbsp; lsn_t i_first_lsn = cdda_disc_firstsector(d);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; if ( -1 == i_first_lsn ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;Trouble getting starting LSN\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lsn_t &amp;nbsp; i_cursor;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; track_t i_track &amp;nbsp; &amp;nbsp;= cdda_sector_gettrack(d, i_first_lsn);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lsn_t &amp;nbsp; i_last_lsn = cdda_track_lastsector(d, i_track);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //paranoia_modeset(p, PARANOIA_MODE_FULL^PARANOIA_MODE_NEVERSKIP);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; paranoia_seek(p, i_first_lsn, SEEK_SET);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; i_first_lsn &amp;lt;&amp;lt; &amp;quot;-&amp;quot; &amp;lt;&amp;lt; i_last_lsn;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; QFile file(tr(&amp;quot;outtrack.wav&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(!file.open(QIODevice::WriteOnly|QIODevice::Append)){
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;impossibile aprire il file di scrittura&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for ( i_cursor = i_first_lsn; i_cursor &amp;lt;= i_last_lsn; i_cursor ++) {
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int16_t *p_readbuf=paranoia_read(p, NULL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *psz_err=cdda_errors(d);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *psz_mes=cdda_messages(d);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (psz_mes || psz_err)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; psz_err &amp;lt;&amp;lt; psz_mes;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (psz_err) free(psz_err);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (psz_mes) free(psz_mes);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( !p_readbuf ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; &amp;quot;paranoia read error. Stopping.\n&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; char *temp= (char*) p_readbuf;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; file.write(temp,(qint64)CDIO_CD_FRAMESIZE_RAW);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; file.close();
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; i_first_lsn &amp;lt;&amp;lt; &amp;quot;\t&amp;quot; &amp;lt;&amp;lt; i_last_lsn ;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; qDebug() &amp;lt;&amp;lt; cdda_track_firstsector(d,i_track);
&lt;br&gt;&amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;nbsp; &amp;nbsp; paranoia_free(p);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; cdda_close(d);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; return; &lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Help-f1707.html&quot; embed=&quot;fixTarget[1707]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Help&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/44-bit-difference-tp23065170p23065170.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22612507</id>
	<title>Re: Burning functionality</title>
	<published>2009-03-19T17:53:15Z</published>
	<updated>2009-03-19T17:53:15Z</updated>
	<author>
		<name>Rocky Bernstein</name>
	</author>
	<content type="html">Many thanks for bringing this to our attention and also, of course,
&lt;br&gt;for writing the software.
&lt;br&gt;&lt;br&gt;Since burning capability was requested by rms (the self-proclaimed
&lt;br&gt;chief GNUsense), this has high visibility. So I imagine someone from
&lt;br&gt;FSF or GNU will be contacting you in the near future.
&lt;br&gt;&lt;br&gt;Thanks again.
&lt;br&gt;&lt;br&gt;2009/3/19 Mario &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22612507&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mario.danic@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; my name is Mario Đanić, and I am the founder of libburnia project (
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://libburnia-project.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://libburnia-project.org&lt;/a&gt;)
&lt;br&gt;&amp;gt; which provides burning-related libraries and drop-in replacement for
&lt;br&gt;&amp;gt; cdrecord. I noticed
&lt;br&gt;&amp;gt; that you want to extend libcdio to support burning, so thought you might
&lt;br&gt;&amp;gt; wanna know about this. Open to
&lt;br&gt;&amp;gt; further discussions and talks.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Cheers,
&lt;br&gt;&amp;gt; M.
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Burning-functionality-tp22597808p22612507.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22597808</id>
	<title>Burning functionality</title>
	<published>2009-03-19T03:57:02Z</published>
	<updated>2009-03-19T03:57:02Z</updated>
	<author>
		<name>Mario Đanić</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;my name is Mario Đanić, and I am the founder of libburnia project (
&lt;br&gt;&lt;a href=&quot;http://libburnia-project.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://libburnia-project.org&lt;/a&gt;)
&lt;br&gt;which provides burning-related libraries and drop-in replacement for
&lt;br&gt;cdrecord. I noticed
&lt;br&gt;that you want to extend libcdio to support burning, so thought you might
&lt;br&gt;wanna know about this. Open to
&lt;br&gt;further discussions and talks.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;M.
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Burning-functionality-tp22597808p22597808.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22315783</id>
	<title>Re: Windows Java wrapper for libcdio</title>
	<published>2009-03-03T11:18:49Z</published>
	<updated>2009-03-03T11:18:49Z</updated>
	<author>
		<name>Mikael Barbeaux</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;Thanks for your answer, Rocky.
&lt;br&gt;Unfortunately, after checking XBMC binary packages, I couldn't find any dlls
&lt;br&gt;to libcdio.
&lt;br&gt;But after some searches on Google, I finally found a project that uses
&lt;br&gt;libcdio and made win32 dll from it : it's called Virtual Jaguar. If anyone
&lt;br&gt;are interested about libcdio.dll, you can find it there :
&lt;br&gt;&lt;a href=&quot;http://www.xs4all.nl/~shalafi/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.xs4all.nl/~shalafi/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Enjoy,
&lt;br&gt;M.
&lt;br&gt;&lt;br&gt;2009/3/1 Rocky Bernstein &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22315783&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;rocky@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; XBMC MEDIA CENTER &lt;a href=&quot;http://xbmc.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xbmc.org/&lt;/a&gt;&amp;nbsp;has I think a windows DLL and an (old?)
&lt;br&gt;&amp;gt; version of libcdio that compiles with a number of Microsoft compilers.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Good luck!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Sun, Mar 1, 2009 at 4:18 AM, Mikael Barbeaux &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22315783&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mbarbeaux@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Hello to everyone,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Recently I worked on a project that aims to build a CD-DA player in Java.
&lt;br&gt;&amp;gt; &amp;gt; Actually it's impossible using purely Java to access the CD-ROM layer, so
&lt;br&gt;&amp;gt; I
&lt;br&gt;&amp;gt; &amp;gt; decided to use a wrapper to libcdio in order to make it.
&lt;br&gt;&amp;gt; &amp;gt; It works very well on Linux and MacOSX. But I tried to use it under
&lt;br&gt;&amp;gt; &amp;gt; Windows,
&lt;br&gt;&amp;gt; &amp;gt; and that's quite harder... I began to use Cygwin (which I know well) to
&lt;br&gt;&amp;gt; &amp;gt; compile libcdio : it worked, but I obtained a static library. When
&lt;br&gt;&amp;gt; &amp;gt; converting it into a static dll library and then use it in Java,
&lt;br&gt;&amp;gt; something
&lt;br&gt;&amp;gt; &amp;gt; wrong happen. So I gave up that solution, as the dll must be packaged
&lt;br&gt;&amp;gt; with
&lt;br&gt;&amp;gt; &amp;gt; cygwin ones.
&lt;br&gt;&amp;gt; &amp;gt; I tried to use MinGW to compile libcdio, but I must admit that even if
&lt;br&gt;&amp;gt; &amp;gt; MinGW
&lt;br&gt;&amp;gt; &amp;gt; looks promising, it's totally crap and user unfriendly.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; My question is: is there any libcdio windows binary packages ? All I need
&lt;br&gt;&amp;gt; &amp;gt; is
&lt;br&gt;&amp;gt; &amp;gt; a shared dll library in order to use it under Windows with Java.
&lt;br&gt;&amp;gt; &amp;gt; I tried to look projects which uses libcdio, such as VLC or mplayer, but
&lt;br&gt;&amp;gt; I
&lt;br&gt;&amp;gt; &amp;gt; couldn't find any libcdio windows library.
&lt;br&gt;&amp;gt; &amp;gt; Any idea ? Or a good tutorial about using MinGW to compile libcdio ?
&lt;br&gt;&amp;gt; &amp;gt; Or perhaps there are other way to compile libcdio under Windows ?
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Thanks for your help,
&lt;br&gt;&amp;gt; &amp;gt; M.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Barbeaux Mikael
&lt;br&gt;Ingénieur SI - Spécialité J2EE
&lt;br&gt;---------------------------------------------------------
&lt;br&gt;Ippon Technologies
&lt;br&gt;3 rue Bellanger
&lt;br&gt;92300 LEVALLOIS PERRET
&lt;br&gt;&lt;br&gt;Tél: 01.60.53.82.01 (client PROVERA)
&lt;br&gt;Port: 06.18.85.00.73
&lt;br&gt;www.ippon.fr
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Windows-Java-wrapper-for-libcdio-tp22271139p22315783.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22271589</id>
	<title>Re: Windows Java wrapper for libcdio</title>
	<published>2009-03-01T02:26:33Z</published>
	<updated>2009-03-01T02:26:33Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">XBMC MEDIA CENTER &lt;a href=&quot;http://xbmc.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://xbmc.org/&lt;/a&gt;&amp;nbsp;has I think a windows DLL and an (old?)
&lt;br&gt;version of libcdio that compiles with a number of Microsoft compilers.
&lt;br&gt;&lt;br&gt;Good luck!
&lt;br&gt;&lt;br&gt;On Sun, Mar 1, 2009 at 4:18 AM, Mikael Barbeaux &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22271589&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;mbarbeaux@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello to everyone,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Recently I worked on a project that aims to build a CD-DA player in Java.
&lt;br&gt;&amp;gt; Actually it's impossible using purely Java to access the CD-ROM layer, so I
&lt;br&gt;&amp;gt; decided to use a wrapper to libcdio in order to make it.
&lt;br&gt;&amp;gt; It works very well on Linux and MacOSX. But I tried to use it under
&lt;br&gt;&amp;gt; Windows,
&lt;br&gt;&amp;gt; and that's quite harder... I began to use Cygwin (which I know well) to
&lt;br&gt;&amp;gt; compile libcdio : it worked, but I obtained a static library. When
&lt;br&gt;&amp;gt; converting it into a static dll library and then use it in Java, something
&lt;br&gt;&amp;gt; wrong happen. So I gave up that solution, as the dll must be packaged with
&lt;br&gt;&amp;gt; cygwin ones.
&lt;br&gt;&amp;gt; I tried to use MinGW to compile libcdio, but I must admit that even if
&lt;br&gt;&amp;gt; MinGW
&lt;br&gt;&amp;gt; looks promising, it's totally crap and user unfriendly.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My question is: is there any libcdio windows binary packages ? All I need
&lt;br&gt;&amp;gt; is
&lt;br&gt;&amp;gt; a shared dll library in order to use it under Windows with Java.
&lt;br&gt;&amp;gt; I tried to look projects which uses libcdio, such as VLC or mplayer, but I
&lt;br&gt;&amp;gt; couldn't find any libcdio windows library.
&lt;br&gt;&amp;gt; Any idea ? Or a good tutorial about using MinGW to compile libcdio ?
&lt;br&gt;&amp;gt; Or perhaps there are other way to compile libcdio under Windows ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks for your help,
&lt;br&gt;&amp;gt; M.
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Windows-Java-wrapper-for-libcdio-tp22271139p22271589.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22271139</id>
	<title>Windows Java wrapper for libcdio</title>
	<published>2009-03-01T01:18:32Z</published>
	<updated>2009-03-01T01:18:32Z</updated>
	<author>
		<name>Mikael Barbeaux</name>
	</author>
	<content type="html">Hello to everyone,
&lt;br&gt;&lt;br&gt;Recently I worked on a project that aims to build a CD-DA player in Java.
&lt;br&gt;Actually it's impossible using purely Java to access the CD-ROM layer, so I
&lt;br&gt;decided to use a wrapper to libcdio in order to make it.
&lt;br&gt;It works very well on Linux and MacOSX. But I tried to use it under Windows,
&lt;br&gt;and that's quite harder... I began to use Cygwin (which I know well) to
&lt;br&gt;compile libcdio : it worked, but I obtained a static library. When
&lt;br&gt;converting it into a static dll library and then use it in Java, something
&lt;br&gt;wrong happen. So I gave up that solution, as the dll must be packaged with
&lt;br&gt;cygwin ones.
&lt;br&gt;I tried to use MinGW to compile libcdio, but I must admit that even if MinGW
&lt;br&gt;looks promising, it's totally crap and user unfriendly.
&lt;br&gt;&lt;br&gt;My question is: is there any libcdio windows binary packages ? All I need is
&lt;br&gt;a shared dll library in order to use it under Windows with Java.
&lt;br&gt;I tried to look projects which uses libcdio, such as VLC or mplayer, but I
&lt;br&gt;couldn't find any libcdio windows library.
&lt;br&gt;Any idea ? Or a good tutorial about using MinGW to compile libcdio ?
&lt;br&gt;Or perhaps there are other way to compile libcdio under Windows ?
&lt;br&gt;&lt;br&gt;Thanks for your help,
&lt;br&gt;M.
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Windows-Java-wrapper-for-libcdio-tp22271139p22271139.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22132538</id>
	<title>Re: making the @copying visible in the HTML manual</title>
	<published>2009-02-20T19:47:02Z</published>
	<updated>2009-02-20T19:47:02Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">I've applied the patch you suggest in git. Although the patch applied
&lt;br&gt;somewhat cleanly and I think I see the effect, please double-check that I've
&lt;br&gt;done this correctly.
&lt;br&gt;&lt;br&gt;Thanks.
&lt;br&gt;&lt;br&gt;On Wed, Feb 18, 2009 at 1:50 AM, Jesse W &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22132538&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jessw@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I noticed that the libcdio manual, like many of the other GNU manuals,
&lt;br&gt;&amp;gt; doesn't display its license grant (@copying in texinfo) in the rendered
&lt;br&gt;&amp;gt; HTML. &amp;nbsp;For clarity, it would be better to make it visible. &amp;nbsp;I've just
&lt;br&gt;&amp;gt; been working with the Emacs project (
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=1988&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=1988&lt;/a&gt;&amp;nbsp;) on
&lt;br&gt;&amp;gt; this issue, and the manintainer, Karl, suggested I work though the list
&lt;br&gt;&amp;gt; of other GNU projects as well. &amp;nbsp;Below is a patch to fix this. &amp;nbsp;Let me know
&lt;br&gt;&amp;gt; if I can be of any other help, or if I should send this elsewhere, or
&lt;br&gt;&amp;gt; in another format.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Jesse Weinstein
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; *** /Users/jesse/Desktop/libcdio.texi.orig &amp;nbsp; &amp;nbsp; &amp;nbsp;Tue Feb 17 22:44:54 2009
&lt;br&gt;&amp;gt; --- /Users/jesse/Desktop/libcdio.texi &amp;nbsp; Tue Feb 17 22:45:27 2009
&lt;br&gt;&amp;gt; ***************
&lt;br&gt;&amp;gt; *** 61,68 ****
&lt;br&gt;&amp;gt; &amp;nbsp;@node Top
&lt;br&gt;&amp;gt; &amp;nbsp;@top GNU @value{libcdio}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ! This manual documents @value{libcdio}, the GNU CD Input and Control
&lt;br&gt;&amp;gt; ! Library.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;@menu
&lt;br&gt;&amp;gt; &amp;nbsp;* History:: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; How this came about
&lt;br&gt;&amp;gt; --- 61,67 ----
&lt;br&gt;&amp;gt; &amp;nbsp;@node Top
&lt;br&gt;&amp;gt; &amp;nbsp;@top GNU @value{libcdio}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ! @insertcopying
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;@menu
&lt;br&gt;&amp;gt; &amp;nbsp;* History:: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; How this came about
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/making-the-%40copying-visible-in-the-HTML-manual-tp22086914p22132538.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22086914</id>
	<title>making the @copying visible in the HTML manual</title>
	<published>2009-02-17T22:50:43Z</published>
	<updated>2009-02-17T22:50:43Z</updated>
	<author>
		<name>Jesse Weinstein</name>
	</author>
	<content type="html">I noticed that the libcdio manual, like many of the other GNU manuals,
&lt;br&gt;doesn't display its license grant (@copying in texinfo) in the rendered
&lt;br&gt;HTML. &amp;nbsp;For clarity, it would be better to make it visible. &amp;nbsp;I've just
&lt;br&gt;been working with the Emacs project (
&lt;br&gt;&lt;a href=&quot;http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=1988&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=1988&lt;/a&gt;&amp;nbsp;) on
&lt;br&gt;this issue, and the manintainer, Karl, suggested I work though the list
&lt;br&gt;of other GNU projects as well. &amp;nbsp;Below is a patch to fix this. &amp;nbsp;Let me 
&lt;br&gt;know
&lt;br&gt;if I can be of any other help, or if I should send this elsewhere, or
&lt;br&gt;in another format.
&lt;br&gt;&lt;br&gt;Jesse Weinstein
&lt;br&gt;&lt;br&gt;*** /Users/jesse/Desktop/libcdio.texi.orig	Tue Feb 17 22:44:54 2009
&lt;br&gt;--- /Users/jesse/Desktop/libcdio.texi	Tue Feb 17 22:45:27 2009
&lt;br&gt;***************
&lt;br&gt;*** 61,68 ****
&lt;br&gt;&amp;nbsp; &amp;nbsp;@node Top
&lt;br&gt;&amp;nbsp; &amp;nbsp;@top GNU @value{libcdio}
&lt;br&gt;&lt;br&gt;! This manual documents @value{libcdio}, the GNU CD Input and Control
&lt;br&gt;! Library.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;@menu
&lt;br&gt;&amp;nbsp; &amp;nbsp;* History:: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; How this came about
&lt;br&gt;--- 61,67 ----
&lt;br&gt;&amp;nbsp; &amp;nbsp;@node Top
&lt;br&gt;&amp;nbsp; &amp;nbsp;@top GNU @value{libcdio}
&lt;br&gt;&lt;br&gt;! @insertcopying
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;@menu
&lt;br&gt;&amp;nbsp; &amp;nbsp;* History:: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; How this came about
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/making-the-%40copying-visible-in-the-HTML-manual-tp22086914p22086914.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22019525</id>
	<title>Re: [PATCH] OS/2 support</title>
	<published>2009-02-14T19:40:06Z</published>
	<updated>2009-02-14T19:40:06Z</updated>
	<author>
		<name>KO Myung-Hun</name>
	</author>
	<content type="html">Hi/2.
&lt;br&gt;&lt;br&gt;Rocky Bernstein wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; The iconv.m4 file that is used comes from the gettext version 0.17 package.
&lt;br&gt;&amp;gt; I checked and it is exactly the same as in that source distribution with no
&lt;br&gt;&amp;gt; modifications. Is it possible you are not using the latest version of
&lt;br&gt;&amp;gt; gettext?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Gettext claims to compile out of the box for OS/2. If you are using the
&lt;br&gt;&amp;gt; latest version of gettext and still think there is an error in that m4 file,
&lt;br&gt;&amp;gt; you should file a report in that package.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; See the gettext's README for where to send your comments and bug reports.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In the event that the bug is acknowledged by gettext but somehow libcdio is
&lt;br&gt;&amp;gt; to release before gettext, we add soon-to-be-released m4 file form gettext.
&lt;br&gt;&amp;gt; But failing that I don't think it wise to change libcdio's copy of iconv.m4.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;Ok. I'll try that.
&lt;br&gt;&lt;br&gt;But I have a question. Do you have HAVE_ICONV defined in config.h when 
&lt;br&gt;launching 'autogen.sh' ?
&lt;br&gt;&lt;br&gt;If iconv.m4 is wrong, you should also have HAVE_ICONV undefined.
&lt;br&gt;&lt;br&gt;Otherwise, there seems to be a problem in other place.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;KO Myung-Hun
&lt;br&gt;&lt;br&gt;Using Mozilla SeaMonkey 1.1.14
&lt;br&gt;Under OS/2 Warp 4 for Korean with FixPak #15
&lt;br&gt;On AMD ThunderBird 1 GHz with 512 MB RAM
&lt;br&gt;&lt;br&gt;Korean OS/2 User Community : &lt;a href=&quot;http://www.ecomstation.co.kr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ecomstation.co.kr&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--OS-2-support-tp21414473p22019525.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22013589</id>
	<title>Re: Re: [PATCH] OS/2 support</title>
	<published>2009-02-14T07:12:40Z</published>
	<updated>2009-02-14T07:12:40Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">The iconv.m4 file that is used comes from the gettext version 0.17 package.
&lt;br&gt;I checked and it is exactly the same as in that source distribution with no
&lt;br&gt;modifications. Is it possible you are not using the latest version of
&lt;br&gt;gettext?
&lt;br&gt;&lt;br&gt;Gettext claims to compile out of the box for OS/2. If you are using the
&lt;br&gt;latest version of gettext and still think there is an error in that m4 file,
&lt;br&gt;you should file a report in that package.
&lt;br&gt;&lt;br&gt;See the gettext's README for where to send your comments and bug reports.
&lt;br&gt;&lt;br&gt;In the event that the bug is acknowledged by gettext but somehow libcdio is
&lt;br&gt;to release before gettext, we add soon-to-be-released m4 file form gettext.
&lt;br&gt;But failing that I don't think it wise to change libcdio's copy of iconv.m4.
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Sat, Feb 14, 2009 at 6:37 AM, KO Myung-Hun &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=22013589&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;komh@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi/2.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Rocky Bernstein wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Sorry for the delay. The OS2 patches should now be in the libcdio git
&lt;br&gt;&amp;gt;&amp;gt; repository.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I had some problems applying the patch. (Patch wants the original listed
&lt;br&gt;&amp;gt;&amp;gt; first, not second and it would have been helpful to attach this as a
&lt;br&gt;&amp;gt;&amp;gt; separate file).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I have no way to check whether these changes work. So please double check
&lt;br&gt;&amp;gt;&amp;gt; my
&lt;br&gt;&amp;gt;&amp;gt; work. (I often make mistakes ;-)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I've checked and it works fine. Thanks. ^^
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; But I think m4/iconv.m4 should be modified.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; returning 1 means error, so it should be checked with '(size_t)(-1)' not
&lt;br&gt;&amp;gt; '0'.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; KO Myung-Hun
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Using Mozilla SeaMonkey 1.1.14
&lt;br&gt;&amp;gt; Under OS/2 Warp 4 for Korean with FixPak #15
&lt;br&gt;&amp;gt; On AMD ThunderBird 1 GHz with 512 MB RAM
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Korean OS/2 User Community : &lt;a href=&quot;http://www.ecomstation.co.kr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ecomstation.co.kr&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; diff -buNr m4/iconv.m4.org m4/iconv.m4
&lt;br&gt;&amp;gt; --- m4/iconv.m4.org &amp;nbsp; &amp;nbsp; 2009-02-14 15:29:42.000000000 +0900
&lt;br&gt;&amp;gt; +++ m4/iconv.m4 2009-02-14 20:21:50.000000000 +0900
&lt;br&gt;&amp;gt; @@ -83,7 +83,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; size_t res = iconv (cd_utf8_to_88591,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (char **) &amp;inptr, &amp;inbytesleft,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;outptr, &amp;outbytesleft);
&lt;br&gt;&amp;gt; - &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (res == 0)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (res == (size_t)(-1))
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 1;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;nbsp; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--OS-2-support-tp21414473p22013589.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-22011803</id>
	<title>Re: [PATCH] OS/2 support</title>
	<published>2009-02-14T03:37:02Z</published>
	<updated>2009-02-14T03:37:02Z</updated>
	<author>
		<name>KO Myung-Hun</name>
	</author>
	<content type="html">Hi/2.
&lt;br&gt;&lt;br&gt;Rocky Bernstein wrote:
&lt;div class='shrinkable-quote'&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Sorry for the delay. The OS2 patches should now be in the libcdio git
&lt;br&gt;&amp;gt; repository.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I had some problems applying the patch. (Patch wants the original listed
&lt;br&gt;&amp;gt; first, not second and it would have been helpful to attach this as a
&lt;br&gt;&amp;gt; separate file).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I have no way to check whether these changes work. So please double check my
&lt;br&gt;&amp;gt; work. (I often make mistakes ;-)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;/div&gt;I've checked and it works fine. Thanks. ^^
&lt;br&gt;&lt;br&gt;But I think m4/iconv.m4 should be modified.
&lt;br&gt;&lt;br&gt;returning 1 means error, so it should be checked with '(size_t)(-1)' not 
&lt;br&gt;'0'.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;KO Myung-Hun
&lt;br&gt;&lt;br&gt;Using Mozilla SeaMonkey 1.1.14
&lt;br&gt;Under OS/2 Warp 4 for Korean with FixPak #15
&lt;br&gt;On AMD ThunderBird 1 GHz with 512 MB RAM
&lt;br&gt;&lt;br&gt;Korean OS/2 User Community : &lt;a href=&quot;http://www.ecomstation.co.kr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ecomstation.co.kr&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;diff -buNr m4/iconv.m4.org m4/iconv.m4
&lt;br&gt;--- m4/iconv.m4.org	2009-02-14 15:29:42.000000000 +0900
&lt;br&gt;+++ m4/iconv.m4	2009-02-14 20:21:50.000000000 +0900
&lt;br&gt;@@ -83,7 +83,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;size_t res = iconv (cd_utf8_to_88591,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(char **) &amp;inptr, &amp;inbytesleft,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;outptr, &amp;outbytesleft);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (res == 0)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (res == (size_t)(-1))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 1;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--OS-2-support-tp21414473p22011803.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-21897913</id>
	<title>Re: [PATCH] OS/2 support</title>
	<published>2009-02-08T02:59:10Z</published>
	<updated>2009-02-08T02:59:10Z</updated>
	<author>
		<name>r-</name>
	</author>
	<content type="html">Sorry for the delay. The OS2 patches should now be in the libcdio git
&lt;br&gt;repository.
&lt;br&gt;&lt;br&gt;I had some problems applying the patch. (Patch wants the original listed
&lt;br&gt;first, not second and it would have been helpful to attach this as a
&lt;br&gt;separate file).
&lt;br&gt;&lt;br&gt;I have no way to check whether these changes work. So please double check my
&lt;br&gt;work. (I often make mistakes ;-)
&lt;br&gt;&lt;br&gt;Thanks.
&lt;br&gt;&lt;br&gt;On Mon, Jan 12, 2009 at 8:31 AM, KO Myung-Hun &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=21897913&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;komh@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi/2.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; These patches add a OS/2 driver for libcdio-0.81.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Review, please.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; KO Myung-Hun
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Using Mozilla SeaMonkey 1.1.14
&lt;br&gt;&amp;gt; Under OS/2 Warp 4 for Korean with FixPak #15
&lt;br&gt;&amp;gt; On AMD ThunderBird 1 GHz with 512 MB RAM
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Korean OS/2 User Community : &lt;a href=&quot;http://www.ecomstation.co.kr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.ecomstation.co.kr&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; diff -buNr configure.ac.org configure.ac
&lt;br&gt;&amp;gt; --- configure.ac.org &amp;nbsp; &amp;nbsp;2008-10-26 23:48:24.000000000 +0900
&lt;br&gt;&amp;gt; +++ configure.ac &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-01-09 02:09:10.000000000 +0900
&lt;br&gt;&amp;gt; @@ -529,6 +529,13 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# LIBS=&amp;quot;$LIBS -lcam&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cd_drivers=&amp;quot;${cd_drivers}, NetBSD &amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; os2*)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; AC_DEFINE([HAVE_OS2_CDROM], [1],
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[Define 1 if you have OS/2 CD-ROM support])
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; LT_NO_UNDEFINED=&amp;quot;-no-undefined&amp;quot;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; LDFLAGS=&amp;quot;$LDFLAGS -Zbin-files&amp;quot;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; cd_drivers=&amp;quot;${cd_drivers}, OS2 &amp;quot;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; ;;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;*)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AC_MSG_WARN([Don't have OS CD-reading support for ${host_os}...])
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AC_MSG_WARN([Will use generic support.])
&lt;br&gt;&amp;gt; @@ -563,6 +570,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp;AC_SUBST(HAVE_LINUX_CDROM)
&lt;br&gt;&amp;gt; &amp;nbsp;AC_SUBST(HAVE_SOLARIS_CDROM)
&lt;br&gt;&amp;gt; &amp;nbsp;AC_SUBST(HAVE_WIN32_CDROM)
&lt;br&gt;&amp;gt; +AC_SUBST(HAVE_OS2_CDROM)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;LIBCDIO_SOURCE_PATH=&amp;quot;`pwd`&amp;quot;
&lt;br&gt;&amp;gt; &amp;nbsp;AC_DEFINE_UNQUOTED(LIBCDIO_SOURCE_PATH, &amp;quot;$LIBCDIO_SOURCE_PATH&amp;quot;,
&lt;br&gt;&amp;gt; diff -buNr include/cdio/device.h.org include/cdio/device.h
&lt;br&gt;&amp;gt; --- include/cdio/device.h.org &amp;nbsp; 2008-03-27 18:28:36.000000000 +0900
&lt;br&gt;&amp;gt; +++ include/cdio/device.h &amp;nbsp; &amp;nbsp; &amp;nbsp; 2009-01-12 22:05:00.000000000 +0900
&lt;br&gt;&amp;gt; @@ -159,6 +159,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; DRIVER_OSX, &amp;nbsp; &amp;nbsp; /**&amp;lt; Apple OSX Driver */
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; DRIVER_WIN32, &amp;nbsp; /**&amp;lt; Microsoft Windows Driver. Includes ASPI and
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ioctl access. */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;DRIVER_OS2, &amp;nbsp; &amp;nbsp; /**&amp;lt; OS/2 Driver */
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; DRIVER_NETBSD, &amp;nbsp;/**&amp;lt; NetBSD Driver. */
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; DRIVER_CDRDAO, &amp;nbsp;/**&amp;lt; cdrdao format CD image. This is listed
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; before BIN/CUE, to make the code prefer cdrdao
&lt;br&gt;&amp;gt; @@ -810,6 +811,44 @@
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; char **cdio_get_devices_win32(void);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; + &amp;nbsp;/*! Set up CD-ROM for reading using the IBM OS/2 driver. The
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;device_name is the some sort of device name.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; NULL is returned on error or there is no OS/2 driver.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; In some situations of drivers or OS's we can't find a CD device if
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; there is no media in it and it is possible for this routine to return
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; NULL even though there may be a hardware CD-ROM.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; @see cdio_open_cd, cdio_open
&lt;br&gt;&amp;gt; + &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp;CdIo_t * cdio_open_os2 (const char *psz_source);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/*! Set up CD-ROM for reading using the IBM OS/2 driver. The
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;device_name is the some sort of device name.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; NULL is returned on error or there is no OS/2 driver.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; @see cdio_open_cd, cdio_open
&lt;br&gt;&amp;gt; + &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp;CdIo_t * cdio_open_am_os2 (const char *psz_source,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const char *psz_access_mode);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/*! Return a string containing the default device name that the
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;OS/2 driver would use when none is specified. A scan is made
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;for CD-ROM drives with CDs in them.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; In some situations of drivers or OS's we can't find a CD device if
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; there is no media in it and it is possible for this routine to return
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; NULL even though there may be a hardware CD-ROM.
&lt;br&gt;&amp;gt; + &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp;char * cdio_get_default_device_os2(void);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/*! Return a list of all of the CD-ROM devices that the OS/2 driver
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;can find.
&lt;br&gt;&amp;gt; + &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp;char **cdio_get_devices_os2(void);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp; /*! Set up CD-ROM for reading using the Nero driver. The
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; device_name is the some sort of device name.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; diff -buNr lib/cdda_interface/common_interface.h.orglib/cdda_interface/common_interface.h
&lt;br&gt;&amp;gt; --- lib/cdda_interface/common_interface.h.org &amp;nbsp; 2008-04-23
&lt;br&gt;&amp;gt; 23:59:52.000000000 +0900
&lt;br&gt;&amp;gt; +++ lib/cdda_interface/common_interface.h &amp;nbsp; &amp;nbsp; &amp;nbsp; 2009-01-09
&lt;br&gt;&amp;gt; 01:59:08.000000000 +0900
&lt;br&gt;&amp;gt; @@ -28,7 +28,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp;#include &amp;lt;cdio/types.h&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;#include &amp;quot;low_interface.h&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -#if defined(HAVE_LSTAT) &amp;&amp; !defined(HAVE_WIN32_CDROM)
&lt;br&gt;&amp;gt; +#if defined(HAVE_LSTAT) &amp;&amp; !defined(HAVE_WIN32_CDROM) &amp;&amp;
&lt;br&gt;&amp;gt; !defined(HAVE_OS2_CDROM)
&lt;br&gt;&amp;gt; &amp;nbsp;/* Define this if the CD-ROM device is a file in the filesystem
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;that can be lstat'd
&lt;br&gt;&amp;gt; &amp;nbsp;*/
&lt;br&gt;&amp;gt; diff -buNr lib/driver/cdio_private.h.org lib/driver/cdio_private.h
&lt;br&gt;&amp;gt; --- lib/driver/cdio_private.h.org &amp;nbsp; &amp;nbsp; &amp;nbsp; 2008-04-23 23:59:52.000000000
&lt;br&gt;&amp;gt; +0900
&lt;br&gt;&amp;gt; +++ lib/driver/cdio_private.h &amp;nbsp; 2009-01-12 22:05:42.000000000 +0900
&lt;br&gt;&amp;gt; @@ -488,6 +488,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp; driver_return_code_t close_tray_osx &amp;nbsp; &amp;nbsp; (const char *psz_drive);
&lt;br&gt;&amp;gt; &amp;nbsp; driver_return_code_t close_tray_solaris (const char *psz_drive);
&lt;br&gt;&amp;gt; &amp;nbsp; driver_return_code_t close_tray_win32 &amp;nbsp; (const char *psz_drive);
&lt;br&gt;&amp;gt; + &amp;nbsp;driver_return_code_t close_tray_os2 &amp;nbsp; &amp;nbsp; (const char *psz_drive);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; bool cdio_have_netbsd(void);
&lt;br&gt;&amp;gt; &amp;nbsp; CdIo_t * cdio_open_netbsd (const char *psz_source);
&lt;br&gt;&amp;gt; @@ -531,6 +532,10 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; True if Microsoft Windows driver is available. */
&lt;br&gt;&amp;gt; &amp;nbsp; bool cdio_have_win32 &amp;nbsp; (void);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; + &amp;nbsp;/*! DEPRICATED: use cdio_have_driver().
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;True if IBM OS/2 driver is available. */
&lt;br&gt;&amp;gt; + &amp;nbsp;bool cdio_have_os2 &amp;nbsp; &amp;nbsp; (void);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp; /*! True if Nero driver is available. */
&lt;br&gt;&amp;gt; &amp;nbsp; bool cdio_have_nrg &amp;nbsp; &amp;nbsp; (void);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; diff -buNr lib/driver/device.c.org lib/driver/device.c
&lt;br&gt;&amp;gt; --- lib/driver/device.c.org &amp;nbsp; &amp;nbsp; 2008-04-23 23:59:52.000000000 +0900
&lt;br&gt;&amp;gt; +++ lib/driver/device.c 2009-01-09 01:59:08.000000000 +0900
&lt;br&gt;&amp;gt; @@ -71,6 +71,8 @@
&lt;br&gt;&amp;gt; &amp;nbsp;const driver_id_t cdio_os_driver = DRIVER_SOLARIS;
&lt;br&gt;&amp;gt; &amp;nbsp;#elif &amp;nbsp;HAVE_DARWIN_WIN32
&lt;br&gt;&amp;gt; &amp;nbsp;const driver_id_t cdio_os_driver = DRIVER_WIN32;
&lt;br&gt;&amp;gt; +#elif &amp;nbsp;HAVE_OS2_CDROM
&lt;br&gt;&amp;gt; +const driver_id_t cdio_os_driver = DRIVER_OS2;
&lt;br&gt;&amp;gt; &amp;nbsp;#else
&lt;br&gt;&amp;gt; &amp;nbsp;const driver_id_t cdio_os_driver = DRIVER_UNKNOWN;
&lt;br&gt;&amp;gt; &amp;nbsp;#endif
&lt;br&gt;&amp;gt; @@ -213,6 +215,19 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;close_tray_win32
&lt;br&gt;&amp;gt; &amp;nbsp; },
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; + &amp;nbsp;{DRIVER_OS2,
&lt;br&gt;&amp;gt; + &amp;nbsp; CDIO_SRC_IS_DEVICE_MASK|CDIO_SRC_IS_NATIVE_MASK|CDIO_SRC_IS_SCSI_MASK,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;quot;OS2&amp;quot;,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;quot;IBM OS/2 driver&amp;quot;,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;cdio_have_os2,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;cdio_open_os2,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;cdio_open_am_os2,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;cdio_get_default_device_os2,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;cdio_is_device_os2,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;cdio_get_devices_os2,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;close_tray_os2
&lt;br&gt;&amp;gt; + &amp;nbsp;},
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; &amp;nbsp; {DRIVER_CDRDAO,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;CDIO_SRC_IS_DISK_IMAGE_MASK,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp;quot;CDRDAO&amp;quot;,
&lt;br&gt;&amp;gt; @@ -939,6 +954,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp; case DRIVER_SOLARIS:
&lt;br&gt;&amp;gt; &amp;nbsp; case DRIVER_WIN32:
&lt;br&gt;&amp;gt; &amp;nbsp; case DRIVER_OSX:
&lt;br&gt;&amp;gt; + &amp;nbsp;case DRIVER_OS2:
&lt;br&gt;&amp;gt; &amp;nbsp; case DRIVER_NRG:
&lt;br&gt;&amp;gt; &amp;nbsp; case DRIVER_BINCUE:
&lt;br&gt;&amp;gt; &amp;nbsp; case DRIVER_CDRDAO:
&lt;br&gt;&amp;gt; diff -buNr lib/driver/generic.h.org lib/driver/generic.h
&lt;br&gt;&amp;gt; --- lib/driver/generic.h.org &amp;nbsp; &amp;nbsp;2008-04-23 23:59:52.000000000 +0900
&lt;br&gt;&amp;gt; +++ lib/driver/generic.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-01-09 02:26:50.000000000 +0900
&lt;br&gt;&amp;gt; @@ -134,6 +134,12 @@
&lt;br&gt;&amp;gt; &amp;nbsp; */
&lt;br&gt;&amp;gt; &amp;nbsp; bool cdio_is_device_win32(const char *source_name);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; + &amp;nbsp;/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;Return true if source_name could be a device containing a CD-ROM on
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;OS/2
&lt;br&gt;&amp;gt; + &amp;nbsp;*/
&lt;br&gt;&amp;gt; + &amp;nbsp;bool cdio_is_device_os2(const char *source_name);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; /*!
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Return true if source_name could be a device containing a CD-ROM on
&lt;br&gt;&amp;gt; diff -buNr lib/driver/Makefile.am.org lib/driver/Makefile.am
&lt;br&gt;&amp;gt; --- lib/driver/Makefile.am.org &amp;nbsp;2008-10-19 18:25:30.000000000 +0900
&lt;br&gt;&amp;gt; +++ lib/driver/Makefile.am &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-01-06 12:42:40.000000000 +0900
&lt;br&gt;&amp;gt; @@ -90,6 +90,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MSWindows/win32.h \
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;netbsd.c \
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;osx.c \
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; os2.c \
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;read.c \
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sector.c \
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;solaris.c \
&lt;br&gt;&amp;gt; diff -buNr lib/driver/os2.c.org lib/driver/os2.c
&lt;br&gt;&amp;gt; --- lib/driver/os2.c.org &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-01-09 23:57:26.000000000 +0900
&lt;br&gt;&amp;gt; +++ lib/driver/os2.c &amp;nbsp; &amp;nbsp;2009-01-11 17:49:36.000000000 +0900
&lt;br&gt;&amp;gt; @@ -0,0 +1,1554 @@
&lt;br&gt;&amp;gt; +/*
&lt;br&gt;&amp;gt; + &amp;nbsp;$Id: os2.c,v 1.30 2008/04/21 18:30:21 karl Exp $
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;Copyright (C) 2009 KO Myung-Hun &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=21897913&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;komh@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;This program is free software: you can redistribute it and/or modify
&lt;br&gt;&amp;gt; + &amp;nbsp;it under the terms of the GNU General Public License as published by
&lt;br&gt;&amp;gt; + &amp;nbsp;the Free Software Foundation, either version 3 of the License, or
&lt;br&gt;&amp;gt; + &amp;nbsp;(at your option) any later version.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;This program is distributed in the hope that it will be useful,
&lt;br&gt;&amp;gt; + &amp;nbsp;but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;&amp;gt; + &amp;nbsp;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the
&lt;br&gt;&amp;gt; + &amp;nbsp;GNU General Public License for more details.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;You should have received a copy of the GNU General Public License
&lt;br&gt;&amp;gt; + &amp;nbsp;along with this program. &amp;nbsp;If not, see &amp;lt;&lt;a href=&quot;http://www.gnu.org/licenses/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gnu.org/licenses/&lt;/a&gt;&amp;gt;.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/* This file contains OS/2-specific code using the DosDevIOCtl
&lt;br&gt;&amp;gt; + &amp;nbsp; access method.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#ifdef HAVE_CONFIG_H
&lt;br&gt;&amp;gt; +# include &amp;quot;config.h&amp;quot;
&lt;br&gt;&amp;gt; +#endif
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +static const char _rcsid[] = &amp;quot;$Id: os2.c,v 1.30 2008/04/21 18:30:21 karl
&lt;br&gt;&amp;gt; Exp $&amp;quot;;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#include &amp;lt;cdio/cdio.h&amp;gt;
&lt;br&gt;&amp;gt; +#include &amp;lt;cdio/sector.h&amp;gt;
&lt;br&gt;&amp;gt; +#include &amp;lt;cdio/util.h&amp;gt;
&lt;br&gt;&amp;gt; +#include &amp;lt;cdio/mmc.h&amp;gt;
&lt;br&gt;&amp;gt; +#include &amp;quot;cdio_assert.h&amp;quot;
&lt;br&gt;&amp;gt; +#include &amp;quot;cdio_private.h&amp;quot;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#include &amp;lt;string.h&amp;gt;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#ifdef HAVE_OS2_CDROM
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#define INCL_DOS
&lt;br&gt;&amp;gt; +#define INCL_DOSDEVIOCTL
&lt;br&gt;&amp;gt; +#include &amp;lt;os2.h&amp;gt;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#include &amp;lt;ctype.h&amp;gt;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +typedef struct {
&lt;br&gt;&amp;gt; + &amp;nbsp;lsn_t &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lsn_start;
&lt;br&gt;&amp;gt; + &amp;nbsp;UCHAR &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uc_adr;
&lt;br&gt;&amp;gt; + &amp;nbsp;UCHAR &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uc_control;
&lt;br&gt;&amp;gt; +} toc_t;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +typedef enum {
&lt;br&gt;&amp;gt; + &amp;nbsp;_AM_NONE,
&lt;br&gt;&amp;gt; + &amp;nbsp;_AM_OS2,
&lt;br&gt;&amp;gt; +} access_mode_t;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +typedef struct {
&lt;br&gt;&amp;gt; + &amp;nbsp;/* Things common to all drivers like this.
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; This must be first. */
&lt;br&gt;&amp;gt; + &amp;nbsp;generic_img_private_t gen;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;access_mode_t access_mode;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* Track information */
&lt;br&gt;&amp;gt; + &amp;nbsp;toc_t &amp;nbsp;toc[CDIO_CD_MAX_TRACKS + 1]; &amp;nbsp; /* 1 more for leadout */
&lt;br&gt;&amp;gt; + &amp;nbsp;int &amp;nbsp; &amp;nbsp;i_first_track;
&lt;br&gt;&amp;gt; + &amp;nbsp;int &amp;nbsp; &amp;nbsp;i_last_track;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* Some of the more OS specific things. */
&lt;br&gt;&amp;gt; + &amp;nbsp;HFILE h_cd;
&lt;br&gt;&amp;gt; + &amp;nbsp;BYTE &amp;nbsp;uc_drive;
&lt;br&gt;&amp;gt; +} _img_private_t;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#pragma pack(1)
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +static track_format_t
&lt;br&gt;&amp;gt; +get_track_format_os2(const _img_private_t *p_env, track_t i_track);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +static bool read_toc_os2 (void *p_user_data);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +run_mmc_cmd_os2( void *p_user_data, unsigned int i_timeout_ms,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int i_cdb, const mmc_cdb_t *p_cdb,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cdio_mmc_direction_t e_direction,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int i_buf, /*in/out*/ void *p_buf );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Set the volume of an audio CD.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;@param p_cdio the CD object to be acted upon.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static driver_return_code_t
&lt;br&gt;&amp;gt; +audio_get_volume_os2 (void *p_user_data,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/*out*/ cdio_audio_volume_t *p_volume)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {{'C', 'D', '0', '1'}};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_in_ch;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_vol;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;} as_out_ch[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; + &amp;nbsp;int &amp;nbsp; i;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETCHANNEL,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_data, sizeof( s_data ), &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_get_volume_os2 : DosDevIOCtl(GETCHANNEL) = 0x%lx\n&amp;quot;,
&lt;br&gt;&amp;gt; rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;for( i = 0; i &amp;lt; 4; i++ )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_volume-&amp;gt;level[ i ] = s_data.as_out_ch[ i ].uc_vol;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Pause playing CD through analog output
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;@param p_cdio the CD object to be acted upon.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static driver_return_code_t
&lt;br&gt;&amp;gt; +audio_pause_os2 (void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {{'C', 'D', '0', '1'}};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_STOPAUDIO,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, 0, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_pause_os2 : DosDevIOCtl(STOPAUDIO) = 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Playing CD through analog output at the given MSF.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;@param p_cdio the CD object to be acted upon.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static driver_return_code_t
&lt;br&gt;&amp;gt; +audio_play_msf_os2 (void *p_user_data, msf_t *p_start_msf, msf_t
&lt;br&gt;&amp;gt; *p_end_msf)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_access_mode;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_start_msf_f;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_start_msf_s;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_start_msf_m;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_start_msf_reserved;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_end_msf_f;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_end_msf_s;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_end_msf_m;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_end_msf_reserved;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.auch_sign = {'C', 'D', '0', '1'},
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.uc_access_mode = 01, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* use MSF format */
&lt;br&gt;&amp;gt; + &amp;nbsp;};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_start_msf_m = cdio_from_bcd8(p_start_msf-&amp;gt;m);
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_start_msf_s = cdio_from_bcd8(p_start_msf-&amp;gt;s);
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_start_msf_f = cdio_from_bcd8(p_start_msf-&amp;gt;f);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_end_msf_m &amp;nbsp; = cdio_from_bcd8(p_end_msf-&amp;gt;m);
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_end_msf_s &amp;nbsp; = cdio_from_bcd8(p_end_msf-&amp;gt;s);
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_end_msf_f &amp;nbsp; = cdio_from_bcd8(p_end_msf-&amp;gt;f);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_PLAYAUDIO,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, 0, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_play_msf_os2 : DosDevIOCtl(PLAYAUDIO) = 0x%lx\n&amp;quot;, rc
&lt;br&gt;&amp;gt; );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Read Audio Subchannel information
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;@param p_cdio the CD object to be acted upon.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static driver_return_code_t
&lt;br&gt;&amp;gt; +audio_read_subchannel_os2 (void *p_user_data,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cdio_subchannel_t *p_subchannel)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {{'C', 'D', '0', '1'}};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_control_and_adr;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_track_number; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* in BCD */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_index; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* in BCD */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_running_time_in_track_m;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_running_time_in_track_s;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_running_time_in_track_f;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_reserved;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_running_time_on_disk_m;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_running_time_on_disk_s;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_running_time_on_disk_f;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_data_subchannel_q;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_audio_status_bits;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;ULONG &amp;nbsp; ul_start_msf;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;ULONG &amp;nbsp; ul_end_msf;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_data_audio_status;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_device_status;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETSUBCHANNELQ,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_data_subchannel_q, sizeof( s_data_subchannel_q ),
&lt;br&gt;&amp;gt; &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_read_subchannel_os2 : DosDevIOCtl(GETSUBCHANNELQ) =
&lt;br&gt;&amp;gt; 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIOSTATUS,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_data_audio_status, sizeof( s_data_audio_status ),
&lt;br&gt;&amp;gt; &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_read_subchannel_os2 : DosDevIOCtl(GETAUDIOSTATUS) =
&lt;br&gt;&amp;gt; 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMDISK, CDROMDISK_DEVICESTATUS,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;ul_data_device_status, sizeof( ul_data_device_status ),
&lt;br&gt;&amp;gt; &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_read_subchannel_os2 : DosDevIOCtl(DEVICESTATUS) =
&lt;br&gt;&amp;gt; 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;track =
&lt;br&gt;&amp;gt; cdio_from_bcd8(s_data_subchannel_q.uc_track_number);
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;index = cdio_from_bcd8(s_data_subchannel_q.uc_index);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;abs_addr.m =
&lt;br&gt;&amp;gt; cdio_to_bcd8(s_data_subchannel_q.uc_running_time_on_disk_m);
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;abs_addr.s =
&lt;br&gt;&amp;gt; cdio_to_bcd8(s_data_subchannel_q.uc_running_time_on_disk_s);
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;abs_addr.f =
&lt;br&gt;&amp;gt; cdio_to_bcd8(s_data_subchannel_q.uc_running_time_on_disk_f);
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;rel_addr.m =
&lt;br&gt;&amp;gt; cdio_to_bcd8(s_data_subchannel_q.uc_running_time_in_track_m);
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;rel_addr.s =
&lt;br&gt;&amp;gt; cdio_to_bcd8(s_data_subchannel_q.uc_running_time_in_track_s);
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;rel_addr.f =
&lt;br&gt;&amp;gt; cdio_to_bcd8(s_data_subchannel_q.uc_running_time_in_track_f);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;address = &amp;nbsp; s_data_subchannel_q.uc_control_and_adr
&lt;br&gt;&amp;gt; &amp;nbsp;&amp; 0x0F;
&lt;br&gt;&amp;gt; + &amp;nbsp;p_subchannel-&amp;gt;control = ( s_data_subchannel_q.uc_control_and_adr &amp;gt;&amp;gt; 4 )
&lt;br&gt;&amp;gt; &amp; 0x0F;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( ul_data_device_status &amp; 0x1000 )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_subchannel-&amp;gt;audio_status = CDIO_MMC_READ_SUB_ST_PLAY;
&lt;br&gt;&amp;gt; + &amp;nbsp;else if( s_data_audio_status.us_audio_status_bits &amp; 1 )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_subchannel-&amp;gt;audio_status = CDIO_MMC_READ_SUB_ST_PAUSED;
&lt;br&gt;&amp;gt; + &amp;nbsp;else if( s_data_audio_status.ul_start_msf == 0 &amp;&amp;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; s_data_audio_status.ul_end_msf == 0 )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_subchannel-&amp;gt;audio_status = CDIO_MMC_READ_SUB_ST_NO_STATUS;
&lt;br&gt;&amp;gt; + &amp;nbsp;else
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_subchannel-&amp;gt;audio_status = CDIO_MMC_READ_SUB_ST_COMPLETED;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;Resume playing an audio CD.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;@param p_cdio the CD object to be acted upon.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;*/
&lt;br&gt;&amp;gt; +static driver_return_code_t
&lt;br&gt;&amp;gt; +audio_resume_os2 (void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {{'C', 'D', '0', '1'}};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_RESUMEAUDIO,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, 0, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_resume_os2 : DosDevIOCtl(RESUMEAUDIO) = 0x%lx\n&amp;quot;, rc
&lt;br&gt;&amp;gt; );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Set the volume of an audio CD.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;@param p_cdio the CD object to be acted upon.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static driver_return_code_t
&lt;br&gt;&amp;gt; +audio_set_volume_os2 ( void *p_user_data, cdio_audio_volume_t *p_volume)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {{'C', 'D', '0', '1'}};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_in_ch;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_vol;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;} as_out_ch[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; + &amp;nbsp;int &amp;nbsp; i;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* first retrive current input ch. */
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETCHANNEL,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_data, sizeof( s_data ), &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_set_volume_os2 : DosDevIOCtl(GETCHANNEL) = 0x%lx\n&amp;quot;,
&lt;br&gt;&amp;gt; rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;for( i = 0; i &amp;lt; 4; i++ )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;s_data.as_out_ch[ i ].uc_vol = p_volume-&amp;gt;level[ i ];
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* now set volumes */
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_SETCHANNELCTRL,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_data, sizeof( s_data ), &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_set_volume_os2 : DosDevIOCtl(SETCHANNELCTRL) =
&lt;br&gt;&amp;gt; 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +static driver_return_code_t
&lt;br&gt;&amp;gt; +audio_stop_os2 (void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {{'C', 'D', '0', '1'}};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_STOPAUDIO,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, 0, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;audio_stop_os2 : DosDevIOCtl(STOPAUDIO) = 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Get disc type associated with cd object.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static discmode_t
&lt;br&gt;&amp;gt; +dvd_discmode_os2 (_img_private_t *p_env)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;discmode_t discmode=CDIO_DISC_MODE_NO_INFO;
&lt;br&gt;&amp;gt; + &amp;nbsp;driver_return_code_t rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* See if this is a DVD. */
&lt;br&gt;&amp;gt; + &amp;nbsp;cdio_dvd_struct_t dvd; &amp;nbsp;/* DVD READ STRUCT for layer 0. */
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;dvd.physical.type = CDIO_DVD_STRUCT_PHYSICAL;
&lt;br&gt;&amp;gt; + &amp;nbsp;dvd.physical.layer_num = 0;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = mmc_get_dvd_struct_physical_private (p_env, &amp;run_mmc_cmd_os2,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;dvd);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (DRIVER_OP_SUCCESS == rc) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;switch(dvd.physical.layer[0].book_type) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case CDIO_DVD_BOOK_DVD_ROM: &amp;nbsp;return CDIO_DISC_MODE_DVD_ROM;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case CDIO_DVD_BOOK_DVD_RAM: &amp;nbsp;return CDIO_DISC_MODE_DVD_RAM;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case CDIO_DVD_BOOK_DVD_R: &amp;nbsp; &amp;nbsp;return CDIO_DISC_MODE_DVD_R;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case CDIO_DVD_BOOK_DVD_RW: &amp;nbsp; return CDIO_DISC_MODE_DVD_RW;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case CDIO_DVD_BOOK_DVD_PR: &amp;nbsp; return CDIO_DISC_MODE_DVD_PR;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case CDIO_DVD_BOOK_DVD_PRW: &amp;nbsp;return CDIO_DISC_MODE_DVD_PRW;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;default: return CDIO_DISC_MODE_DVD_OTHER;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;return discmode;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Get disc type associated with the cd object.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static discmode_t
&lt;br&gt;&amp;gt; +get_discmode_os2(void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;track_t i_track;
&lt;br&gt;&amp;gt; + &amp;nbsp;discmode_t discmode;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!p_env) return CDIO_DISC_MODE_ERROR;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;discmode = dvd_discmode_os2(p_env);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (CDIO_DISC_MODE_NO_INFO != discmode) return discmode;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!p_env-&amp;gt;gen.toc_init) read_toc_os2 (p_env);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!p_env-&amp;gt;gen.toc_init) return CDIO_DISC_MODE_ERROR;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;for (i_track = p_env-&amp;gt;gen.i_first_track;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; i_track &amp;lt; p_env-&amp;gt;gen.i_first_track + p_env-&amp;gt;gen.i_tracks ;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; i_track ++) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;track_format_t track_fmt=get_track_format_os2(p_env, i_track);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;switch(track_fmt) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_AUDIO:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;switch(discmode) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_NO_INFO:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discmode = CDIO_DISC_MODE_CD_DA;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_CD_DA:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_CD_MIXED:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_ERROR:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* No change*/
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discmode = CDIO_DISC_MODE_CD_MIXED;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_XA:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;switch(discmode) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_NO_INFO:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discmode = CDIO_DISC_MODE_CD_XA;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_CD_XA:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_CD_MIXED:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_ERROR:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* No change*/
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discmode = CDIO_DISC_MODE_CD_MIXED;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_DATA:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;switch(discmode) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_NO_INFO:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discmode = CDIO_DISC_MODE_CD_DATA;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_CD_DATA:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_CD_MIXED:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case CDIO_DISC_MODE_ERROR:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* No change*/
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;discmode = CDIO_DISC_MODE_CD_MIXED;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_ERROR:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;discmode = CDIO_DISC_MODE_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;return discmode;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#define CDROMDISK_EXECMD &amp;nbsp; &amp;nbsp;0x7A
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/* 0, if transfer data to device, &amp;nbsp;1, if transfer data from device */
&lt;br&gt;&amp;gt; +#define EX_DIRECTION_IN &amp;nbsp; &amp;nbsp; 0x0001
&lt;br&gt;&amp;gt; +/* 0, if don't check playing audio, 1, if device plays audio return error
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt; +#define EX_PLAYING_CHK &amp;nbsp; &amp;nbsp; &amp;nbsp;0x0002
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Run a SCSI MMC command.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;env &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private CD structure
&lt;br&gt;&amp;gt; + &amp;nbsp;i_timeout_ms &amp;nbsp;time in milliseconds we will wait for the command
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;to complete. If this value is -1, use the default
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;time-out value.
&lt;br&gt;&amp;gt; + &amp;nbsp;p_buf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Buffer for data, both sending and receiving
&lt;br&gt;&amp;gt; + &amp;nbsp;i_buf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Size of buffer
&lt;br&gt;&amp;gt; + &amp;nbsp;e_direction &amp;nbsp; direction the transfer is to go.
&lt;br&gt;&amp;gt; + &amp;nbsp;cdb &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CDB bytes. All values that are needed should be set on
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;input. We'll figure out what the right CDB length should
&lt;br&gt;&amp;gt; be.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;Return 0 if command completed successfully.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +run_mmc_cmd_os2( void *p_user_data, unsigned int i_timeout_ms,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int i_cdb, const mmc_cdb_t *p_cdb,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cdio_mmc_direction_t e_direction,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int i_buf, /*in/out*/ void *p_buf )
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;auch_sign[4]; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 'CD01'
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp; &amp;nbsp; &amp;nbsp; us_data_length; &amp;nbsp; &amp;nbsp; // length of the Data Packet
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp; &amp;nbsp; &amp;nbsp; us_cmd_length; &amp;nbsp; &amp;nbsp; &amp;nbsp;// length of the Command Buffer
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp; &amp;nbsp; &amp;nbsp; us_flags; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // flags
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; auc_cmd_buffer[16]; // Command Buffer for SCSI command
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.auch_sign = {'C', 'D', '0', '1'},
&lt;br&gt;&amp;gt; + &amp;nbsp;};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.us_data_length = i_buf;
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.us_cmd_length = i_cdb;
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.us_flags =
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;( e_direction == SCSI_MMC_DATA_READ ) ? EX_DIRECTION_IN : 0;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;memcpy( s_param.auc_cmd_buffer, p_cdb, i_cdb );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMDISK, CDROMDISK_EXECMD,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_buf, i_buf, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;run_mmc_cmd_os2 : DosDevIOCtl(EXECMD) = 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Initialize CD device.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static bool
&lt;br&gt;&amp;gt; +init_os2 (void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG &amp;nbsp; ul_action;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG &amp;nbsp; rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (p_env-&amp;gt;gen.init) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn (&amp;quot;init called more than once&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* Initializations */
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;h_cd = 0;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosOpen((PSZ)p_env-&amp;gt;gen.source_name, &amp;p_env-&amp;gt;h_cd,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;ul_action, 0, FILE_NORMAL,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE |
&lt;br&gt;&amp;gt; OPEN_FLAGS_DASD,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL );
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;init_os2 : DosOpen(%s) = %ld\n&amp;quot;, p_env-&amp;gt;gen.source_name, rc
&lt;br&gt;&amp;gt; );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;uc_drive = toupper( p_env-&amp;gt;gen.source_name[ 0 ]) - 'A';
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;gen.init &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = true;
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;gen.toc_init &amp;nbsp; &amp;nbsp; &amp;nbsp; = false;
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;gen.b_cdtext_init &amp;nbsp;= false;
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;gen.b_cdtext_error = false;
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;gen.fd &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = p_env-&amp;gt;h_cd;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return true;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Release and free resources associated with cd.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static void
&lt;br&gt;&amp;gt; +free_os2 (void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( !p_env )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;free (p_env-&amp;gt;gen.source_name);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( p_env-&amp;gt;h_cd )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;DosClose( p_env-&amp;gt;h_cd );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;free (p_env);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; Reads i_blocks of audio sectors from cd device into p_data starting
&lt;br&gt;&amp;gt; + &amp;nbsp; from i_lsn.
&lt;br&gt;&amp;gt; + &amp;nbsp; Returns DRIVER_OP_SUCCESS if no error.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +read_audio_sectors_os2 (void *p_user_data, void *p_buf, lsn_t i_lsn,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int i_blocks)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR &amp;nbsp; auch_sign[ 4 ];
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_addr_mode;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_sectors;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;ULONG &amp;nbsp; ul_start_sector;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_reserved;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_interleaved_size;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.auch_sign = {'C', 'D', '0', '1'},
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.uc_addr_mode = 0, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* use LBA format */
&lt;br&gt;&amp;gt; + &amp;nbsp;};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.us_sectors = i_blocks;
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.ul_start_sector = i_lsn;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMDISK, CDROMDISK_READLONG,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_buf, CDIO_CD_FRAMESIZE_RAW * i_blocks, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;read_audio_sectors_os2 : DosDevIOCtl(READLONG) = 0x%lx\n&amp;quot;,
&lt;br&gt;&amp;gt; rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; Reads a single raw sector using the DosDevIOCtl method into
&lt;br&gt;&amp;gt; + &amp;nbsp; data starting from lsn. Returns 0 if no error.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +read_raw_sector (_img_private_t *p_env, void *p_buf, lsn_t lsn)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;struct
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR &amp;nbsp; auch_sign[ 4 ];
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_addr_mode;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_sectors;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;ULONG &amp;nbsp; ul_start_sector;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_reserved;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_interleaved_size;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.auch_sign = {'C', 'D', '0', '1'},
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.uc_addr_mode = 0, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* use LBA format */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.us_sectors = 1,
&lt;br&gt;&amp;gt; + &amp;nbsp;};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.ul_start_sector = lsn;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMDISK, CDROMDISK_READLONG,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_buf, CDIO_CD_FRAMESIZE_RAW, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;read_raw_sector : DosDevIOCtl(READLONG) = 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; Reads a single mode1 sector from cd device into data starting from
&lt;br&gt;&amp;gt; + &amp;nbsp; lsn. Returns 0 if no error.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +read_mode1_sector_os2 (void *p_user_data, void *p_buf, lsn_t lsn,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bool b_form2)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; + &amp;nbsp;char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, };
&lt;br&gt;&amp;gt; + &amp;nbsp;int ret = read_raw_sector (p_env, buf, lsn);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if ( 0 != ret) return ret;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;memcpy (p_buf,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buf + CDIO_CD_SYNC_SIZE+CDIO_CD_HEADER_SIZE,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b_form2 ? M2RAW_SECTOR_SIZE: CDIO_CD_FRAMESIZE);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return 0;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; Reads nblocks of mode1 sectors from cd device into data starting
&lt;br&gt;&amp;gt; + &amp;nbsp; from lsn.
&lt;br&gt;&amp;gt; + &amp;nbsp; Returns 0 if no error.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +read_mode1_sectors_os2 (void *p_user_data, void *p_buf, lsn_t lsn,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bool b_form2, unsigned int nblocks)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; + &amp;nbsp;int i;
&lt;br&gt;&amp;gt; + &amp;nbsp;int retval;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;for (i = 0; i &amp;lt; nblocks; i++) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if (b_form2) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;retval = read_mode1_sector_os2 (
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p_env, ((char *)p_buf) +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (M2RAW_SECTOR_SIZE * i),
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lsn + i, true);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;if ( retval ) return retval;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;char buf[M2RAW_SECTOR_SIZE] = { 0, };
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;if ( (retval = read_mode1_sector_os2 (p_env, buf, lsn + i, false)) )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return retval;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;memcpy (((char *)p_buf) + (CDIO_CD_FRAMESIZE * i),
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buf, CDIO_CD_FRAMESIZE);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;return 0;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; Reads a single mode2 sector from cd device into data starting
&lt;br&gt;&amp;gt; + &amp;nbsp; from lsn. Returns 0 if no error.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +read_mode2_sector_os2 (void *p_user_data, void *data, lsn_t lsn,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bool b_form2)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; + &amp;nbsp;char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, };
&lt;br&gt;&amp;gt; + &amp;nbsp;int ret = read_raw_sector (p_env, buf, lsn);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if ( 0 != ret) return ret;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;memcpy (data,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;buf + CDIO_CD_SYNC_SIZE + CDIO_CD_XA_HEADER,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b_form2 ? M2RAW_SECTOR_SIZE: CDIO_CD_FRAMESIZE);
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return 0;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; Reads nblocks of mode2 sectors from cd device into data starting
&lt;br&gt;&amp;gt; + &amp;nbsp; from lsn.
&lt;br&gt;&amp;gt; + &amp;nbsp; Returns 0 if no error.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +read_mode2_sectors_os2 (void *p_user_data, void *data, lsn_t lsn,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bool b_form2, unsigned int i_blocks)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;int i;
&lt;br&gt;&amp;gt; + &amp;nbsp;int retval;
&lt;br&gt;&amp;gt; + &amp;nbsp;unsigned int blocksize = b_form2 ? M2RAW_SECTOR_SIZE :
&lt;br&gt;&amp;gt; CDIO_CD_FRAMESIZE;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;for (i = 0; i &amp;lt; i_blocks; i++) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if ( (retval = read_mode2_sector_os2 (p_user_data,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((char *)data) + (blocksize * i),
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lsn + i, b_form2)) )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return retval;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;return 0;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp; Return the size of the CD in logical block address (LBA) units.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static lsn_t
&lt;br&gt;&amp;gt; +get_disc_last_lsn_os2 (void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param = {{'C', 'D', '0', '1'}};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_volume_size;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMDISK, CDROMDISK_GETVOLUMESIZE,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;ul_data_volume_size, sizeof( ul_data_volume_size ),
&lt;br&gt;&amp;gt; &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;get_disc_last_lsn_os2 : DosDevIOCtl(GETVOLUMESIZE) =
&lt;br&gt;&amp;gt; 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return CDIO_INVALID_LSN;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return ul_data_volume_size;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Set the key &amp;quot;arg&amp;quot; to &amp;quot;value&amp;quot; in source device.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static int
&lt;br&gt;&amp;gt; +set_arg_os2 (void *p_user_data, const char key[], const char value[])
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!strcmp (key, &amp;quot;source&amp;quot;))
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if (!value)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;free (p_env-&amp;gt;gen.source_name);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_env-&amp;gt;gen.source_name = strdup (value);
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;else if (!strcmp (key, &amp;quot;access-mode&amp;quot;))
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if (!strcmp(value, &amp;quot;OS2&amp;quot;))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;access_mode = _AM_OS2;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;cdio_warn (&amp;quot;unknown access type: %s. ignored.&amp;quot;, value);
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;else
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Read and cache the CD's Track Table of Contents and track info.
&lt;br&gt;&amp;gt; + &amp;nbsp;Return true if successful or false if an error.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static bool
&lt;br&gt;&amp;gt; +read_toc_os2 (void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param_disk = {{'C', 'D', '0', '1'}};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_first_track;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_last_track;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;ULONG ul_lead_out_addr; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /* in MSF */
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_data_disk;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;UCHAR auch_sign[4];
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_track;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param_track = {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;.auch_sign = {'C', 'D', '0', '1'},
&lt;br&gt;&amp;gt; + &amp;nbsp;};
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;ULONG ul_track_addr; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* in MSF */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp;uc_control_and_adr;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_data_track;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; + &amp;nbsp;int &amp;nbsp; i_track;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIODISK,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param_disk, sizeof( s_param_disk ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_data_disk, sizeof( s_data_disk ), &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;read_toc_os2 : DosDevIOCtl(GETAUDIODISK) = 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;gen.i_first_track = s_data_disk.uc_first_track;
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;gen.i_tracks &amp;nbsp;= s_data_disk.uc_last_track -
&lt;br&gt;&amp;gt; s_data_disk.uc_first_track + 1;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;i_first_track = s_data_disk.uc_first_track;
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;i_last_track = s_data_disk.uc_last_track;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;for( i_track = p_env-&amp;gt;i_first_track; i_track &amp;lt;= p_env-&amp;gt;i_last_track;
&lt;br&gt;&amp;gt; i_track++ )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;s_param_track.uc_track = i_track;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;h_cd, IOCTL_CDROMAUDIO, CDROMAUDIO_GETAUDIOTRACK,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param_track, sizeof( s_param_track ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_data_track, sizeof( s_data_track ), &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;read_toc_os2 : DosDevIOCtl(GETAUDIOTRACK) = 0x%lx\n&amp;quot;, rc
&lt;br&gt;&amp;gt; );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_env-&amp;gt;toc[i_track].lsn_start =
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;cdio_lba_to_lsn( cdio_msf3_to_lba(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( s_data_track.ul_track_addr &amp;gt;&amp;gt; 16 ) &amp; 0xFF,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( s_data_track.ul_track_addr &amp;gt;&amp;gt; &amp;nbsp;8 ) &amp; 0xFF,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s_data_track.ul_track_addr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp; 0xFF ));
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_env-&amp;gt;toc[i_track].uc_adr &amp;nbsp; &amp;nbsp; = &amp;nbsp; s_data_track.uc_control_and_adr
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;&amp; 0x0F;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_env-&amp;gt;toc[i_track].uc_control = ( s_data_track.uc_control_and_adr &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; 4 ) &amp; 0x0F;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_env-&amp;gt;gen.track_flags[i_track].preemphasis =
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;toc[i_track].uc_control &amp; 0x01
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;? CDIO_TRACK_FLAG_TRUE : CDIO_TRACK_FLAG_FALSE;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_env-&amp;gt;gen.track_flags[i_track].copy_permit =
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;toc[i_track].uc_control &amp; 0x02
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;? CDIO_TRACK_FLAG_TRUE : CDIO_TRACK_FLAG_FALSE;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;p_env-&amp;gt;gen.track_flags[i_track].channels =
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;p_env-&amp;gt;toc[i_track].uc_control &amp; 0x08 ? 4 : 2;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* store lead out info */
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;toc[p_env-&amp;gt;i_last_track + 1].lsn_start =
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_lba_to_lsn( cdio_msf3_to_lba(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;( s_data_disk.ul_lead_out_addr &amp;gt;&amp;gt; 16 ) &amp; 0xFF,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;( s_data_disk.ul_lead_out_addr &amp;gt;&amp;gt; &amp;nbsp;8 ) &amp; 0xFF,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;s_data_disk.ul_lead_out_addr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp; 0xFF ));
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;p_env-&amp;gt;gen.toc_init = true;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return true;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Eject media.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static driver_return_code_t
&lt;br&gt;&amp;gt; +eject_media_os2 (void *p_user_data)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_cmd_info;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_drive;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_cmd_info = 2;
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_drive &amp;nbsp; &amp;nbsp;= p_env-&amp;gt;uc_drive;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( HFILE )-1, IOCTL_DISK, DSK_UNLOCKEJECTMEDIA,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL, 0, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;eject_media_os2 : DosDevIOCtl(UNLOCKEJECTMEDIA) = 0x%lx\n&amp;quot;,
&lt;br&gt;&amp;gt; rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Return the value associated with the key &amp;quot;arg&amp;quot;.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static const char *
&lt;br&gt;&amp;gt; +get_arg_os2 (void *p_user_data, const char key[])
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!strcmp (key, &amp;quot;source&amp;quot;)) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return p_env-&amp;gt;gen.source_name;
&lt;br&gt;&amp;gt; + &amp;nbsp;} else if (!strcmp (key, &amp;quot;access-mode&amp;quot;)) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;switch (p_env-&amp;gt;access_mode) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case _AM_OS2:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;OS2&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case _AM_NONE:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;no access method&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Return the media catalog number MCN.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;Note: string is malloc'd so caller should free() then returned
&lt;br&gt;&amp;gt; + &amp;nbsp;string when done with it.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +static char *
&lt;br&gt;&amp;gt; +_cdio_get_mcn (const void *p_user_data) {
&lt;br&gt;&amp;gt; + &amp;nbsp;const _img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; + &amp;nbsp;return mmc_get_mcn( p_env-&amp;gt;gen.cdio );
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Get the format (XA, DATA, AUDIO) of a track.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static track_format_t
&lt;br&gt;&amp;gt; +get_track_format_os2(const _img_private_t *p_env, track_t i_track)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;/* This is pretty much copied from the &amp;quot;badly broken&amp;quot; cdrom_count_tracks
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; in linux/cdrom.c.
&lt;br&gt;&amp;gt; + &amp;nbsp;*/
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (p_env-&amp;gt;toc[i_track].uc_control &amp; 0x04) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if (p_env-&amp;gt;toc[i_track].uc_adr == 0x10)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return TRACK_FORMAT_CDI;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;else if (p_env-&amp;gt;toc[i_track].uc_adr == 0x20)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return TRACK_FORMAT_XA;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return TRACK_FORMAT_DATA;
&lt;br&gt;&amp;gt; + &amp;nbsp;} else
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return TRACK_FORMAT_AUDIO;
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Get format of track.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static track_format_t
&lt;br&gt;&amp;gt; +_cdio_get_track_format(void *p_obj, track_t i_track)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_obj;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if ( !p_env )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return TRACK_FORMAT_ERROR;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!p_env-&amp;gt;gen.toc_init)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if (!read_toc_os2 (p_env))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return TRACK_FORMAT_ERROR;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if ( i_track &amp;lt; p_env-&amp;gt;gen.i_first_track
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; || i_track &amp;gt;= p_env-&amp;gt;gen.i_tracks + p_env-&amp;gt;gen.i_first_track )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return TRACK_FORMAT_ERROR;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return get_track_format_os2(p_env, i_track);
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Return true if we have XA data (green, mode2 form1) or
&lt;br&gt;&amp;gt; + &amp;nbsp;XA data (green, mode2 form2). That is track begins:
&lt;br&gt;&amp;gt; + &amp;nbsp;sync - header - subheader
&lt;br&gt;&amp;gt; + &amp;nbsp;12 &amp;nbsp; &amp;nbsp; 4 &amp;nbsp; &amp;nbsp; &amp;nbsp;- &amp;nbsp;8
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;FIXME: there's gotta be a better design for this and get_track_format?
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static bool
&lt;br&gt;&amp;gt; +_cdio_get_track_green(void *p_obj, track_t i_track)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_obj;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;switch (_cdio_get_track_format(p_env, i_track)) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_XA:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_ERROR:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_CDI:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_AUDIO:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;case TRACK_FORMAT_DATA:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* FIXME: Dunno if this is the right way, but it's what
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; I was using in cd-info for a while.
&lt;br&gt;&amp;gt; + &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp;return ((p_env-&amp;gt;toc[i_track].uc_control &amp; 2) != 0);
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Return the starting MSF (minutes/secs/frames) for track number
&lt;br&gt;&amp;gt; + &amp;nbsp;i_tracks in obj. &amp;nbsp;Track numbers start at 1.
&lt;br&gt;&amp;gt; + &amp;nbsp;The &amp;quot;leadout&amp;quot; track is specified either by
&lt;br&gt;&amp;gt; + &amp;nbsp;using i_tracks LEADOUT_TRACK or the total tracks+1.
&lt;br&gt;&amp;gt; + &amp;nbsp;False is returned if there is no track entry.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +static bool
&lt;br&gt;&amp;gt; +_cdio_get_track_msf(void *p_user_data, track_t i_tracks, msf_t *p_msf)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *p_env = p_user_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!p_msf)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!p_env-&amp;gt;gen.toc_init)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if (!read_toc_os2 (p_env))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (i_tracks == CDIO_CDROM_LEADOUT_TRACK)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;i_tracks = p_env-&amp;gt;gen.i_tracks+1;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (i_tracks &amp;gt; p_env-&amp;gt;gen.i_tracks+1 || i_tracks == 0) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; + &amp;nbsp;} else {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_lsn_to_msf(p_env-&amp;gt;toc[i_tracks].lsn_start, p_msf);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#endif /* HAVE_OS2_CDROM */
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Return an array of strings giving possible CD devices.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +char **
&lt;br&gt;&amp;gt; +cdio_get_devices_os2 (void)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +#ifndef HAVE_OS2_CDROM
&lt;br&gt;&amp;gt; + &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; +#else
&lt;br&gt;&amp;gt; + &amp;nbsp;char **drives = NULL;
&lt;br&gt;&amp;gt; + &amp;nbsp;unsigned int num_drives=0;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_cmd_info;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_drive;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_bytes_per_sector;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_sectors_per_cluster;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_reserved_sectors;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_number_of_fats;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_root_dir_entries;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_total_sectors;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_media_descriptor;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_sectors_per_fat;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_sectors_per_track;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_number_of_heads;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;ULONG &amp;nbsp; ul_hidden_sectors;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;ULONG &amp;nbsp; ul_large_total_sectors;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;auc_reserved[6];
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;} s_ebpb;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_cylinders;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE &amp;nbsp; &amp;nbsp;uc_dev_type;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT &amp;nbsp;us_dev_attr;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_data;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;UCHAR uc_drive;
&lt;br&gt;&amp;gt; + &amp;nbsp;char &amp;nbsp;sz_drive_str[ 3 ] = &amp;quot;X:&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;/* Scan the system for CD-ROM drives.
&lt;br&gt;&amp;gt; + &amp;nbsp;*/
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;for( uc_drive = 0; uc_drive &amp;lt; 26; uc_drive++ )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;s_param.uc_cmd_info = 0;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;s_param.uc_drive = uc_drive;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;( HFILE )-1, IOCTL_DISK, DSK_GETDEVICEPARAMS,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_data, sizeof( s_data ), &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;continue;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;switch( s_data.s_ebpb.uc_media_descriptor )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case &amp;nbsp; &amp;nbsp; &amp;nbsp; 4 &amp;nbsp;: &amp;nbsp; /* CD-R &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case 128 + 4 &amp;nbsp;: &amp;nbsp; /* CD-R &amp;nbsp; &amp;nbsp;but cannot be written */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case &amp;nbsp; &amp;nbsp; &amp;nbsp; 5 &amp;nbsp;: &amp;nbsp; /* CD-ROM &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case 128 + 5 &amp;nbsp;: &amp;nbsp; /* CD-ROM &amp;nbsp;but cannot be written */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case &amp;nbsp; &amp;nbsp; &amp;nbsp; 6 &amp;nbsp;: &amp;nbsp; /* DVD-ROM &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case 128 + 6 &amp;nbsp;: &amp;nbsp; /* DVD-ROM but cannot be written */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case &amp;nbsp; &amp;nbsp; &amp;nbsp; 7 &amp;nbsp;: &amp;nbsp; /* DVD-RAM &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case 128 + 7 &amp;nbsp;: &amp;nbsp; /* DVD-RAM but cannot be written */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case &amp;nbsp; &amp;nbsp; &amp;nbsp; 8 &amp;nbsp;: &amp;nbsp; /* CD-RW &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case 128 + 8 &amp;nbsp;: &amp;nbsp; /* CD-RW &amp;nbsp; but cannot be written */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case &amp;nbsp; &amp;nbsp; &amp;nbsp; 9 &amp;nbsp;: &amp;nbsp; /* DVD-R &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case 128 + 9 &amp;nbsp;: &amp;nbsp; /* DVD-R &amp;nbsp; but cannot be written */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case &amp;nbsp; &amp;nbsp; &amp;nbsp; 10 : &amp;nbsp; /* DVD-RW &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case 128 + 10 : &amp;nbsp; /* DVD-RW &amp;nbsp;but cannot be written */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case &amp;nbsp; &amp;nbsp; &amp;nbsp; 11 : &amp;nbsp; /* DVD+RW &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;case 128 + 11 : &amp;nbsp; /* DVD+RW &amp;nbsp;but cannot be written */
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sz_drive_str[0] = 'A' + uc_drive;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cdio_add_device_list(&amp;drives, strdup(sz_drive_str), &amp;num_drives);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;cdio_add_device_list(&amp;drives, NULL, &amp;num_drives);
&lt;br&gt;&amp;gt; + &amp;nbsp;return drives;
&lt;br&gt;&amp;gt; +#endif /*HAVE_OS2_CDROM*/
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#define IOCTL_CDROMDISK2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0x82
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#define CDROMDISK2_DRIVELETTERS 0x60
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Return a string containing the default CD device if none is specified.
&lt;br&gt;&amp;gt; + &amp;nbsp;if CdIo is NULL (we haven't initialized a specific device driver),
&lt;br&gt;&amp;gt; + &amp;nbsp;then find a suitable one and return the default device for that.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;NULL is returned if we couldn't get a default device.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +char *
&lt;br&gt;&amp;gt; +cdio_get_default_device_os2(void)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +#ifdef HAVE_OS2_CDROM
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT us_drive_count;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;USHORT us_drive_first;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_drive_letters;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;HFILE h_cd2;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_action;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;char &amp;nbsp;sz_drive_str[ 3 ] = &amp;quot;X:&amp;quot;;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosOpen((PSZ)&amp;quot;CD-ROM2$&amp;quot;, &amp;h_cd2, &amp;ul_action, 0, FILE_NORMAL,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;cdio_get_default_device_os2 : DosOpen(CD-ROM2$) = %ld\n&amp;quot;,
&lt;br&gt;&amp;gt; rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;h_cd2, IOCTL_CDROMDISK2, CDROMDISK2_DRIVELETTERS,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NULL, 0, &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;s_drive_letters, sizeof( s_drive_letters ), &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;DosClose( h_cd2 );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;cdio_get_default_device_os2 : DosDevIOCtl(DRIVELETTERS) =
&lt;br&gt;&amp;gt; 0x%lx\n&amp;quot;, rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( s_drive_letters.us_drive_count == 0 )
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;sz_drive_str[0] = 'A' + s_drive_letters.us_drive_first;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return strdup( sz_drive_str );
&lt;br&gt;&amp;gt; +#else
&lt;br&gt;&amp;gt; + &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; +#endif
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Return true if source_name could be a device containing a CD-ROM.
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +bool
&lt;br&gt;&amp;gt; +cdio_is_device_os2(const char *source_name)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; + &amp;nbsp;if (!source_name)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return false;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#ifdef HAVE_OS2_CDROM
&lt;br&gt;&amp;gt; + &amp;nbsp;return (isalpha(source_name[0]) &amp;&amp;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;source_name[1] == ':' &amp;&amp;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;source_name[2] == '\0');
&lt;br&gt;&amp;gt; +#else
&lt;br&gt;&amp;gt; + &amp;nbsp;return false;
&lt;br&gt;&amp;gt; +#endif
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Close tray on CD-ROM.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;@param p_user_data the CD object to be acted upon.
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +*/
&lt;br&gt;&amp;gt; +driver_return_code_t
&lt;br&gt;&amp;gt; +close_tray_os2 (const char *psz_os2_drive)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +#ifdef HAVE_OS2_CDROM
&lt;br&gt;&amp;gt; + &amp;nbsp;struct {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_cmd_info;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;BYTE uc_drive;
&lt;br&gt;&amp;gt; + &amp;nbsp;} s_param;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_param_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG ul_data_len;
&lt;br&gt;&amp;gt; + &amp;nbsp;ULONG rc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_cmd_info = 3;
&lt;br&gt;&amp;gt; + &amp;nbsp;s_param.uc_drive &amp;nbsp; &amp;nbsp;= toupper(psz_os2_drive[0]) - 'A';
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;rc = DosDevIOCtl(
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ( HFILE )-1, IOCTL_DISK, DSK_UNLOCKEJECTMEDIA,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;s_param, sizeof( s_param ), &amp;ul_param_len,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL, 0, &amp;ul_data_len );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if( rc &amp;&amp; rc != 99 /* device in use */ )
&lt;br&gt;&amp;gt; + &amp;nbsp;{
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn(&amp;quot;close_tray_os2 : DosDevIOCtl(UNLOCKEJECTMEDIA) = 0x%lx\n&amp;quot;,
&lt;br&gt;&amp;gt; rc );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return DRIVER_OP_ERROR;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_SUCCESS;
&lt;br&gt;&amp;gt; +#else
&lt;br&gt;&amp;gt; + &amp;nbsp;return DRIVER_OP_UNSUPPORTED;
&lt;br&gt;&amp;gt; +#endif /* HAVE_OS2_CDROM */
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Initialization routine. This is the only thing that doesn't
&lt;br&gt;&amp;gt; + &amp;nbsp;get called via a function pointer. In fact *we* are the
&lt;br&gt;&amp;gt; + &amp;nbsp;ones to set that up.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +CdIo_t *
&lt;br&gt;&amp;gt; +cdio_open_os2 (const char *psz_orig_source)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +#ifdef HAVE_OS2_CDROM
&lt;br&gt;&amp;gt; + &amp;nbsp;CdIo_t *ret;
&lt;br&gt;&amp;gt; + &amp;nbsp;_img_private_t *_data;
&lt;br&gt;&amp;gt; + &amp;nbsp;char *psz_source;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;cdio_funcs_t _funcs;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;memset( &amp;_funcs, 0, sizeof(_funcs) );
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.audio_get_volume &amp;nbsp; &amp;nbsp; &amp;nbsp; = audio_get_volume_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.audio_pause &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= audio_pause_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.audio_play_msf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = audio_play_msf_os2;
&lt;br&gt;&amp;gt; +#if 0
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.audio_play_track_index = audio_play_track_index_os2;
&lt;br&gt;&amp;gt; +#endif
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.audio_read_subchannel &amp;nbsp;= audio_read_subchannel_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.audio_resume &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = audio_resume_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.audio_set_volume &amp;nbsp; &amp;nbsp; &amp;nbsp; = audio_set_volume_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.audio_stop &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = audio_stop_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.eject_media &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= eject_media_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.free &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = free_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_arg &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= get_arg_os2;
&lt;br&gt;&amp;gt; +#if 0
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_blocksize &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= get_blocksize_os2;
&lt;br&gt;&amp;gt; +#endif
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_cdtext &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = get_cdtext_generic;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_default_device &amp;nbsp; &amp;nbsp; = cdio_get_default_device_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_devices &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= cdio_get_devices_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_disc_last_lsn &amp;nbsp; &amp;nbsp; &amp;nbsp;= get_disc_last_lsn_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_discmode &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = get_discmode_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_drive_cap &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= get_drive_cap_mmc;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_first_track_num &amp;nbsp; &amp;nbsp;= get_first_track_num_generic;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_hwinfo &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = NULL;
&lt;br&gt;&amp;gt; +#if 0
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_last_session &amp;nbsp; &amp;nbsp; &amp;nbsp; = get_last_session_os2;
&lt;br&gt;&amp;gt; +#endif
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_media_changed &amp;nbsp; &amp;nbsp; &amp;nbsp;= get_media_changed_mmc;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_mcn &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= _cdio_get_mcn;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_num_tracks &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = get_num_tracks_generic;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_channels &amp;nbsp; &amp;nbsp; = get_track_channels_generic;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_copy_permit &amp;nbsp;= get_track_copy_permit_generic;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_format &amp;nbsp; &amp;nbsp; &amp;nbsp; = _cdio_get_track_format;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_green &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= _cdio_get_track_green;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_lba &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= NULL; /* This could be done if need be.
&lt;br&gt;&amp;gt; */
&lt;br&gt;&amp;gt; +#if 0
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_pregap_lba &amp;nbsp; = get_track_pregap_lba_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_isrc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = get_track_isrc_os2;
&lt;br&gt;&amp;gt; +#endif
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_msf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= _cdio_get_track_msf;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.get_track_preemphasis &amp;nbsp;= get_track_preemphasis_generic;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.lseek &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= cdio_generic_lseek;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.read &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = cdio_generic_read;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.read_audio_sectors &amp;nbsp; &amp;nbsp; = read_audio_sectors_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.read_data_sectors &amp;nbsp; &amp;nbsp; &amp;nbsp;= read_data_sectors_mmc;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.read_mode1_sector &amp;nbsp; &amp;nbsp; &amp;nbsp;= read_mode1_sector_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.read_mode1_sectors &amp;nbsp; &amp;nbsp; = read_mode1_sectors_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.read_mode2_sector &amp;nbsp; &amp;nbsp; &amp;nbsp;= read_mode2_sector_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.read_mode2_sectors &amp;nbsp; &amp;nbsp; = read_mode2_sectors_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.read_toc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = read_toc_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.run_mmc_cmd &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= run_mmc_cmd_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.set_arg &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= set_arg_os2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.set_blocksize &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= set_blocksize_mmc;
&lt;br&gt;&amp;gt; + &amp;nbsp;_funcs.set_speed &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= set_drive_speed_mmc;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;_data &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = calloc(1, sizeof (_img_private_t));
&lt;br&gt;&amp;gt; + &amp;nbsp;_data-&amp;gt;access_mode &amp;nbsp; &amp;nbsp;= _AM_OS2;
&lt;br&gt;&amp;gt; + &amp;nbsp;_data-&amp;gt;gen.init &amp;nbsp; &amp;nbsp; &amp;nbsp; = false;
&lt;br&gt;&amp;gt; + &amp;nbsp;_data-&amp;gt;gen.fd &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = -1;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (NULL == psz_orig_source) {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;psz_source=cdio_get_default_device_os2();
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if (NULL == psz_source) return NULL;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;set_arg_os2(_data, &amp;quot;source&amp;quot;, psz_source);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;free(psz_source);
&lt;br&gt;&amp;gt; + &amp;nbsp;} else {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;if (cdio_is_device_os2(psz_orig_source))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;set_arg_os2(_data, &amp;quot;source&amp;quot;, psz_orig_source);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;/* The below would be okay if all device drivers worked this way. */
&lt;br&gt;&amp;gt; +#if 0
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;cdio_info (&amp;quot;source %s is a not a device&amp;quot;, psz_orig_source);
&lt;br&gt;&amp;gt; +#endif
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;free(_data);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ret = cdio_new ((void *)_data, &amp;_funcs);
&lt;br&gt;&amp;gt; + &amp;nbsp;if (ret == NULL) return NULL;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;ret-&amp;gt;driver_id = DRIVER_OS2;
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (init_os2(_data))
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return ret;
&lt;br&gt;&amp;gt; + &amp;nbsp;else {
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;free_os2 (_data);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; + &amp;nbsp;}
&lt;br&gt;&amp;gt; +#else
&lt;br&gt;&amp;gt; + &amp;nbsp;return NULL;
&lt;br&gt;&amp;gt; +#endif /* HAVE_OS2_CDROM */
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +/*!
&lt;br&gt;&amp;gt; + &amp;nbsp;Initialization routine. This is the only thing that doesn't
&lt;br&gt;&amp;gt; + &amp;nbsp;get called via a function pointer. In fact *we* are the
&lt;br&gt;&amp;gt; + &amp;nbsp;ones to set that up.
&lt;br&gt;&amp;gt; + */
&lt;br&gt;&amp;gt; +CdIo_t *
&lt;br&gt;&amp;gt; +cdio_open_am_os2 (const char *psz_source_name, const char
&lt;br&gt;&amp;gt; *psz_access_mode)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; + &amp;nbsp;if (psz_access_mode != NULL)
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;cdio_warn (&amp;quot;there is only one access mode for OS/2. Arg %s ignored&amp;quot;,
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; psz_access_mode);
&lt;br&gt;&amp;gt; + &amp;nbsp;return cdio_open_os2(psz_source_name);
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +bool
&lt;br&gt;&amp;gt; +cdio_have_os2 (void)
&lt;br&gt;&amp;gt; +{
&lt;br&gt;&amp;gt; +#ifdef HAVE_OS2_CDROM
&lt;br&gt;&amp;gt; + &amp;nbsp;return true;
&lt;br&gt;&amp;gt; +#else
&lt;br&gt;&amp;gt; + &amp;nbsp;return false;
&lt;br&gt;&amp;gt; +#endif /* HAVE_OS2_CDROM */
&lt;br&gt;&amp;gt; +}
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; +
&lt;br&gt;&amp;gt; diff -buNr src/util.c.org src/util.c
&lt;br&gt;&amp;gt; --- src/util.c.org &amp;nbsp; &amp;nbsp; &amp;nbsp;2008-04-15 10:22:12.000000000 +0900
&lt;br&gt;&amp;gt; +++ src/util.c &amp;nbsp;2009-01-09 01:59:12.000000000 +0900
&lt;br&gt;&amp;gt; @@ -160,7 +160,7 @@
&lt;br&gt;&amp;gt; &amp;nbsp;char *
&lt;br&gt;&amp;gt; &amp;nbsp;fillout_device_name(const char *device_name)
&lt;br&gt;&amp;gt; &amp;nbsp;{
&lt;br&gt;&amp;gt; -#if defined(HAVE_WIN32_CDROM)
&lt;br&gt;&amp;gt; +#if defined(HAVE_WIN32_CDROM) || defined(HAVE_OS2_CDROM)
&lt;br&gt;&amp;gt; &amp;nbsp; return strdup(device_name);
&lt;br&gt;&amp;gt; &amp;nbsp;#else
&lt;br&gt;&amp;gt; &amp;nbsp; unsigned int prefix_len = strlen(DEV_PREFIX);
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/Gnu---Libcdio---Dev-f1706.html&quot; embed=&quot;fixTarget[1706]&quot; target=&quot;_top&quot; &gt;Gnu - Libcdio - Dev&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-PATCH--OS-2-support-tp21414473p21897913.html" />
</entry>

</feed>
