/***********************************************\
*                                               *
*          CDx Audio Access Sample Code         *
*                                               *
*  Display/Set the output volume                *
*                                               *
*  This version uses the cdx.device             *
\***********************************************/

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

int   GetVolume(int *,int *);
int   SetVolume(int,int);
int   String2Int(char *);

extern   struct   IOStdReq       *Req;

main(argc,argv)
int   argc;
char **argv;
{
   int   left,right,error;

   if ((argc!=1)&&(argc!=3)) {
      printf("Usage: CDvolume [<left> <right>]\n");
      exit(0);
   }   

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

   if (argc==3) {
      left = String2Int(argv[1]);
      right = String2Int(argv[2]);
      error = SetVolume(left,right);
   }
   else {
      error = GetVolume(&left,&right);
   }

   if (!error) {
      if (argc == 3)
         printf("Set\n");
      else
         printf("Volume: L = %ld  R = %ld\n",left,right);
   }
   else if (error == CDERR_NotSupported) {
      printf("Your drive does not support volume control from software\n");
      error = 0;
   }

   Cleanup(0,error);
}


int GetVolume(left,right)
int   *left,*right;
{
   Req->io_Command = CD_GETVOLUME;
   DoIO((struct IORequest *)Req);

   *left = (Req->io_Actual>>8) & 0xFF;
   *right = Req->io_Actual & 0xFF;

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


int SetVolume(left,right)
int   left,right;
{
   Req->io_Command = CD_SETVOLUME;
   Req->io_Offset = left;
   Req->io_Length = right;
   DoIO((struct IORequest *)Req);

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