/* Shows the current Audio database in memory */

#include <dos/dos.h>
#include <utility/tagitem.h>
#include <libraries/ahi.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/ahi.h>

LONG __OSlibversion=37;

struct Library *AHIBase;

LONG main(void)
{
  ULONG id=AHI_INVALID_ID;
  LONG volume=0,stereo=0,panning=0,hifi=0,pingpong=0,record=0,bits=0,
       channels=0,minmix=0,maxmix=0,freqs=0;
  UBYTE name[80],driver[80],author[80],copyright[80],version[80],anno[80];

  if(!(AHIBase=OpenLibrary(AHINAME,0))) {
    Printf("Unable to open library %s version 0",AHINAME);
    return(RETURN_FAIL);
  }
  while ((id=AHI_NextAudioID(id)) != AHI_INVALID_ID) {
    name[0]='\0';
    driver[0]='\0';
    author[0]='\0';
    copyright[0]='\0';
    version[0]='\0';
    anno[0]='\0';
    Printf("\x1b[2mMode 0x%08lx\x1b[0m\n",id);
    AHI_GetAudioAttrs(id, AHIDB_BufferLen,80,
                          AHIDB_Frequencies,&freqs,
                          AHIDB_Volume, &volume,
                          AHIDB_Stereo, &stereo,
                          AHIDB_Panning, &panning,
                          AHIDB_HiFi,&hifi,
                          AHIDB_PingPong,&pingpong,
                          AHIDB_Record,&record,
                          AHIDB_Name,&name,
                          AHIDB_Driver,&driver,
                          AHIDB_Bits,&bits,
                          AHIDB_MaxChannels,&channels,
                          AHIDB_MinMixFreq,&minmix,
                          AHIDB_MaxMixFreq,&maxmix,
                          AHIDB_Author,&author,
                          AHIDB_Copyright,&copyright,
                          AHIDB_Version,&version,
                          AHIDB_Annotation,&anno,
                          TAG_DONE);
    Printf(" Name: \"%s\"   Driver: \"LIBS:ahi/%s.audio\"\n",name,driver);
    if(author[0])
      Printf(" Driver programmed by: %s\n",author);
    if(copyright[0])
      Printf(" Copyright: %s\n",copyright);
    if(version[0])
      Printf(" Version: %s",version);
    if(anno[0])
      Printf(" %s\n",anno);
    Printf("\n %s output%s in %ld bits.\n", stereo ? "Stereo" : "Mono",
              stereo ? (panning ? " (with panning)" : "" ) : "",
              bits);
    Printf(" Can play samples on max %ld channels at %s, %s.\n", channels,
              volume ? "any volume" : "full volume only",
              pingpong ? "both forwards and backwards" : "forwards only");
    Printf(" The mixing %sdestructive.\n", hifi ? "is non-" : "may be ");
    Printf(" %ld mixing frequencies between %ld and %ld are available.\n",freqs,minmix,maxmix);
    Printf(" Recording is %ssupported.\n", record ? "" : "not ");
    Printf("\n");
  }

  Printf("No more modes in the audio database.\n");

  if(AHIBase) CloseLibrary(AHIBase);
  return(RETURN_OK);
}
