Description:
-----------

Ok, here goes.  This utility was designed and implemented by Nathanael Hoyle.  Original version made in July of 2001.  Its purpose 
is to verify the proper function of CDROM drives and the proper readability of discs.  It also functions as a fully capable CD ripper.

Features:
* Queries the status of the CDROM drive and displays the results.  Useful for diagnosing a malfunctioning drive.

* Can reset a drive internally without a reboot.

* It will display the type of any disc present.  (Helps to figure out for instance that you burned your cd full of wav files as DATA, not as audio tracks).

* Completely analyzes audio CD's. (And audio tracks of mixed mode cd's.) 
- When the --readtest option is selected, the program will exhaustively read every audio track (assuming that a valid audio CD is present, and the drive is working thus far) a SINGLE FRAME at a time.  This is NOT the easy way of reading the tracks.  To give you an idea, there are 75 distinct frames per second that are being read independently. *** As of 0.93, cdstatus can read in multiple frame chunks if you are trying
to speed up a rip rather than check operation and look for scratches.  Use --readchunk x to read x frames at once.  Keep it sane, larger valuesuse more memory.

- As of version 0.92, it can write output files to either .wav files or .raw files.  The difference is that the .wav file will be created
with a full, proper, wave header, and should be playable and usable by almost every audio application.  The .raw file will contain ONLY the
audio data, and is useful for performing a true check of whether the data was read properly, versus a backed up copy of the file.  (Due to
the fact that wave files may be "sub-chunked" differently, two programs may create slightly different .wav files, but .raw files should always
be identical.)  Use the --waveout sub-option of --readtest to get .wav files.  Tracks will be named either trackXX.raw, or trackXX.wav,
according to type, where XX is the track number.  As of 0.93 tracks can be given different names via --basename <something_other_than_track>.

* New in 0.94a: CDDB lookup and auto file-naming support.  See below.

Options:
--------

With no options, version info is displayed followed by basic information about the status of the drive, cd if present, and the tracks
on said cd, as well as volume levels of cd drive.

--reset

       Causes the drive to perform a reset.  You will almost certainly need to be root to perform this operation.

--readtest
--rip

	Performs exhaustive read analysis for audio cd's.  Will retry failed reads up to the max retries chosen by the user (default 3, 
	override with --retries X), if so chosen.  --rip has been added as an alternate command for --readtest

--waveout

	Now the default --readtest mode,  --waveout will create .wav files instead of .raw. files. You may still obtain .raw files via --rawout
	Specifying --waveout is now redundant, but for historical reasons, it won't break anything.  Use of this option automatically sets
	--readtest.

--rawout

	Causes ripped tracks to be written in the original .raw format, which is headerless and not directly playable without providing some
	information to the player application. Use of this option automatically sets --readtest.

--start X

	Begin readtest/rip at track X (default is 1)

--stop X

	Stop readtest/rip at track X (default is last track on cd)

--outputdir /path/

	Place output files in /path/ instead of the default of the current working directory.

--basename somename

	Output files are created with file names based on somenameXX.wav (where XX is the track number) instead of trackXX.wav.

--readchunk X

	Use this to read the track data (--readtest) at some alternate number of frames per read.  Normally this is 1 to allow exact
	detection of errors on the disc surface, however --readchunk 25 would read 25 frames at once.  This improves performance up
	to some system dependent value (i.e. the ideal setting will depend on your system) but it gives up the fine-grained error
	detection.

--retries X

	Perform X retries of failed reads.  Default is 3.

--version

	Displays version and copyright info, then exits.

--help
	Displays brief usage summary and exits.
	
	
--cddb

	calculates disc id and contacts freedb server to retrieve album info and track listings
	
--format "format spec here"

	only valid when used with --cddb, this option allows you to specify an output format
	for the filenames from the cddb info for the cd.  Example:
	
        "#Artist#/#Album/#Artist#-#Album#-#TrkNum#-#TrkName#"
	Could be: The Beatles/The White Album/The Beatles-The White Album-13-Rocky Raccoon
	
	note that you may use any characters EXCEPT #, spaces, or other ones disallowed by the filesystem
	in your format specification.  Incorporating a slash (/) in the spec will create directories
	and subdirectories if relevant.  this does not replace --outputdir.  If you used
	--outputdir /home/myusername/music with the above example, you would end up with files in
	/home/myusername/music/The Beatles/The White Album/
	
	The format used in the example above is the default format when --cddb is used without
	an explicit format string.
	
	The directory specified in --outputdir should already exist, but the others will be created
	as needed.
	
	One more time: DO NOT USE SPACES in your format string.  Thank you.
	Also, the " in the example are NOT just for show.  You MUST enclose the format spec pattern
	inside quotes or the program will seg-fault.
	
	

Licensing:
----------

Please read the LICENSE file.

Other:
------

For the curious, NO code has been re-used or pulled in from any other source, program, or person.  
This work in its entirety is the original creation of its author, Nathanael Hoyle.

Proviso: As of version .94a, I did use the code on www.freedb.org as a starting point for my
code for calculating the cddb disc id.  It is re-written to inline the second function and use
fewer variables, hopefully running faster overall.  Kudos to their documentation team.

Final Notes:
------------
Please send any feedback.  I am asking that those of you who have a moment, please take it and 
write an email with your impressions, suggestions, ideas, complaints, comments, etc.  These go a 
long way to encouraging further work and making it worthwhile.  Thanks.


Thanks,
Nathanael Hoyle
nathanaelhoyle@users.sourceforge.net