Looking for the RIOS CD player program
Rich Coe/65536
rhcoe at violin.austin.ibm.com
Tue May 1 23:26:39 AEST 1990
/*
* PLAY PROGRAM
* This program is executed from the comamnd line by:
*
* "play /dev/rcd? track#"
*
* where /dev/rcd? is the special file name of the cdrom and track number
* is the track where play is to begin. This program will exit and leave
* the cdrom playing.
*/
#include <stdio.h>
#include "fcntl.h"
#include <sys/ioctl.h>
#include <sys/cdrom.h>
int fd,rc;
extern errno;
uchar track;
int getdecnum(strg)
char *strg;
{
int r = 0;
char ic;
ic = *strg++;
while (ic != '\0') {
if (ic < '0' || ic > '9')
return(-1);
else {
r *= 10;
r += ic - '0';
}
ic = *(strg++);
}
if (r > 9) r+=6;
return(r);
}
int pass_thru(track)
uchar track;
{
struct sc_iocmd pt;
char menuopt;
int i, rc;
/* Issue 2 test unit ready's */
for (i=0 ; i<2 ; i++) {
pt.command_length = 0x06;
pt.scsi_cdb[0] = 0x00;
pt.scsi_cdb[1] = 0x00;
pt.scsi_cdb[2] = 0x00;
pt.scsi_cdb[3] = 0x00;
pt.scsi_cdb[4] = 0x00;
pt.scsi_cdb[5] = 0x00;
pt.flags = 0x00;
pt.buffer = 0x00;
pt.data_length = 0x00;
pt.timeout_value = 0x05;
pt.status_validity = 0x00;
pt.scsi_bus_status = 0x00;
pt.adapter_status = 0x00;
rc = ioctl(fd, CDIOCMD, &pt);
}
if (rc == -1) {
printf("\nioctl failed. errno = %d", errno);
printf("\n\nstatus_validity = %.2X",pt.status_validity);
printf("\nscsi_bus_status = %.2X", pt.scsi_bus_status);
printf("\nadapter_status = %.2X", pt.adapter_status);
return(rc);
}
/* issue the play command */
pt.command_length = 0x0A;
pt.scsi_cdb[0] = 0xC0;
pt.scsi_cdb[1] = 0x01;
pt.scsi_cdb[2] = track;
for (i = 3 ; i < 9 ; i ++) {
pt.scsi_cdb[i] = 0x00;
}
pt.scsi_cdb[9] = 0x80;
pt.flags = SC_ASYNC;
pt.buffer = 0x00;
pt.data_length = 0x00;
pt.timeout_value = 0x05;
pt.status_validity = 0x00;
pt.scsi_bus_status = 0x00;
pt.adapter_status = 0x00;
rc = ioctl(fd, CDIOCMD, &pt);
if (rc == -1) {
printf("\nioctl failed. errno = %d", errno);
printf("\n\nstatus_validity = %.2X",pt.status_validity);
printf("\nscsi_bus_status = %.2X", pt.scsi_bus_status);
printf("\nadapter_status = %.2X", pt.adapter_status);
}
return(rc);
}
main(argc,argv)
int argc;
char * argv[];
{
if (argc != 3) {
printf("\nIncorrect number of paramaters.\n");
printf("Format: play special_file_name track_number\n");
}
else {
if ( (fd = openx(argv[1], O_RDONLY, NULL, SC_DIAGNOSTIC)) < 0) {
return(99); }
track = getdecnum(argv[2]);
if (track > 9) track+=6;
if (track != -1) {
rc = pass_thru(track);
}
else
printf("\nError in track number.\n");
}
}
More information about the Comp.unix.aix
mailing list