/***********************************************\
*						*
*	   CDx Audio Access Sample Code		*
*						*
*  Reads & displays specified sector from disc	*
*						*
*  This version uses the cdx.device		*
\***********************************************/

#include <exec/types.h>
#include <exec/io.h>
#include <CDx.h>

int   ReadDiscSector(ULONG,UBYTE *);
int   String2Int(char *);

extern   struct   IOStdReq       *Req;

UBYTE block[2048];


main(argc,argv)
int   argc;
char **argv;
{
   int   i,j,result;
   ULONG sector;
   char  HexBuff[70],ASCIIBuff[30],Temp[6];
   UBYTE b;

   if (argc!=2) {
      printf("Usage: CDROMread <sector>\n");
      exit(0);
   }

   sector = String2Int(argv[1]);

   if (OpenCDx())
      Cleanup("Couldn't open cdx.device");

   result = ReadDiscSector(sector,block);

   if (result)
      printf("Returned error %ld\n",result);
   else {
      for (i=0;i<2048;i+=16) {
         sprintf(HexBuff,"%03lx: ",i);
         for (j=0;j<16;j++) {
            b = block[i+j];
            sprintf(Temp,"%02lx ",b);
            strcat(HexBuff,Temp);
            ASCIIBuff[j] = ((b>=32)&&(b<127))?(b):('.');
         }
         printf("%ls  %ls\n",HexBuff,ASCIIBuff);
      }
   }
   Cleanup(0);
}


int ReadDiscSector(sector,address)
ULONG sector;
UBYTE *address;
{
   Req->io_Command = CD_READ;
   Req->io_Offset = sector<<11;   /* x2048 */
   Req->io_Length = 2048;
   Req->io_Data = (APTR)address;
   DoIO((struct IORequest *)Req);

   return((int)Req->io_Error);
}
