/*
 * cdload.c  [device]  <slot>
 *
 * Load a cdrom from a specified slot in a changer.  The drive should be
 * unmounted before executing this.
 *
 * Based on code originally from Gerhard Zuber <zuber@berlin.snafu.de>.
 * Steffen Modi: if "device" param is supressed, it defaults to /dev/cdrom
 */

#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <linux/cdrom.h>
#include <linux/ucdrom.h>


int
main (int argc, char **argv)
{
	char *program;
	char *device;
	int x_slot;
	int fd;           /* file descriptor for CD-ROM device */
	int status;       /* return status for system calls */

	program = argv[0];

	if ( (argc != 3) && (argc != 2) ) {
		fprintf (stderr, "usage: %s [device] <slot>\n", program);
		fprintf (stderr, "       device defaults to /dev/cdrom\n");
		exit (1);
	} else if (argc = 2) {
		device = "/dev/cdrom";
		x_slot = atoi (argv[1]);
	} else {
		device = argv[1];
		x_slot = atoi (argv[2]);
	}

	/* open device */ 
	fd = open (device, 0);
	if (fd < 0) {
		fprintf (stderr, "%s: open failed for `%s': %s\n",
			 program, device, strerror (errno));
		exit (1);
	}

	/* load */ 
	status = ioctl (fd, CDROM_SELECT_DISC, x_slot);
	if (status != 0) {
		fprintf (stderr,
			 "%s: CDROM_SELECT_DISC ioctl failed for `%s': %s\n",
			 program, device, strerror (errno));
		exit (1);
	}
 
	/* close device */
	status = close (fd);
	if (status != 0) {
		fprintf (stderr, "%s: close failed for `%s': %s\n",
			 program, device, strerror (errno));
		exit (1);
	}
 
	exit (0);
}

