Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!romp!auschs!awdprime!violin.austin.ibm.com!rhcoe From: rhcoe@violin.austin.ibm.com (Rich Coe/65536) Newsgroups: comp.unix.aix Subject: Re: Looking for the RIOS CD player program Message-ID: <2263@awdprime.UUCP> Date: 1 May 90 13:26:39 GMT References: <18245@rpp386.cactus.org> <1361@sdrc.UUCP> <9004301724.AA00415@mindcrf.mindcraft.com> Sender: news@awdprime.UUCP Organization: IBM AWD, Austin, TX Lines: 119 Reply-To: /* * 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 #include "fcntl.h" #include #include 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"); } }