//  This may look like C code, but it is really -*- C++ -*-

//  ------------------------------------------------------------------
//  The Goldware Library
//  Copyright (C) 1990-1999 Odinn Sorensen
//  ------------------------------------------------------------------
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Library General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Library General Public License for more details.
//
//  You should have received a copy of the GNU Library General Public
//  License along with this program; if not, write to the Free
//  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
//  MA 02111-1307, USA
//  ------------------------------------------------------------------
//  $Id$
//  ------------------------------------------------------------------
//  Sound interface class.
//  ------------------------------------------------------------------

#ifndef __gsndall_h
#define __gsndall_h


//  ------------------------------------------------------------------

#include <gsndsapi.h>
#ifdef __OS2__
    #define INCL_BASE
    #include <os2.h>
#endif
#ifdef __WIN32__
    #include <windows.h>
#endif


//  ------------------------------------------------------------------

#ifdef DEBUG
    extern int debug;
#endif


//  ------------------------------------------------------------------

class gsnd
{

protected:

#if defined(__MSDOS__)
    int mpx;
#if defined(__DJGPP__) || (defined(__WATCOMC__) && defined(__386__))
    int buffer;
#else
    char* buffer;
#endif
    gsapidata* data;
    uint key_value;
    int call_api(uint al, uint bx=0);
#endif

    int api_open;
    int file_open;

    void free_buffer();

public:

    gsnd();
    ~gsnd();

    // API open/close
    int open_api();
    int close_api();

    // Sound file open/close
    int open(const char* file);
    int close();

    // Sound play and control
    int play(uint sample_rate=0);
    int stop();
    int pause();
    int resume();
    int break_loop(int method=0);
    void speaker(int onoff);

    // Information
    uint get_sample_rate();
    int api_is_open()
    {
        return api_open;
    }
    int is_playing();
};


//  ------------------------------------------------------------------

class gsound
{

protected:

    int installed;

public:

    gsound();
    ~gsound();

    int load(const char* file);
    int unload();
    int play();
    int stop();

    int is_playing();

    int is_installed()
    {
        return installed;
    }
};


//  ------------------------------------------------------------------

#endif

//  ------------------------------------------------------------------
