X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=libs%2Fmikmod%2Fmmio%2Fmmerror.c;fp=libs%2Fmikmod%2Fmmio%2Fmmerror.c;h=cf4c99ea70a3904610121455cda68902243f4d88;hp=0000000000000000000000000000000000000000;hb=cf94899f4f4d8535074db6421245b973d2fcde8c;hpb=8024ae981f39d370af5cceb3cb97f62820b0a120 diff --git a/libs/mikmod/mmio/mmerror.c b/libs/mikmod/mmio/mmerror.c new file mode 100644 index 0000000..cf4c99e --- /dev/null +++ b/libs/mikmod/mmio/mmerror.c @@ -0,0 +1,315 @@ +/* MikMod sound library + (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for + complete list. + + 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 program 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 library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ + +/*============================================================================== + + $Id$ + + Error handling functions. + Register an error handler with _mm_RegisterErrorHandler() and you're all set. + +==============================================================================*/ + +/* + + The global variables _mm_errno, and _mm_critical are set before the error + handler in called. See below for the values of these variables. + +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mikmod_internals.h" + +#define _mmerr_invalid "Invalid error code" + +static const char *_mm_errmsg[MMERR_MAX+1] = +{ +/* No error */ + + "No error", + +/* Generic errors */ + + "Could not open requested file", + "Out of memory", + "Dynamic linking failed", + +/* Sample errors */ + + "Out of memory to load sample", + "Out of sample handles to load sample", + "Sample format not recognized", + +/* Module errors */ + + "Failure loading module pattern", + "Failure loading module track", + "Failure loading module header", + "Failure loading sampleinfo", + "Module format not recognized", + "Module sample format not recognized", + "Synthsounds not supported in MED files", + "Compressed sample is invalid", + +/* Driver errors: */ + + "Sound device not detected", + "Device number out of range", + "Software mixer failure", + "Could not open sound device", + "This driver supports 8 bit linear output only", + "This driver supports 16 bit linear output only", + "This driver supports stereo output only", + "This driver supports uLaw output (8 bit mono, 8 kHz) only", + "Unable to set non-blocking mode for audio device", + +/* AudioFile driver errors */ +#ifdef DRV_AF + "Cannot find suitable AudioFile audio port", +#else + _mmerr_invalid, +#endif + +/* AIX driver errors */ +#ifdef DRV_AIX + "Configuration (init step) of audio device failed", + "Configuration (control step) of audio device failed", + "Configuration (start step) of audio device failed", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, +#endif + +/* Ultrasound driver errors */ +#ifdef DRV_ULTRA + "Ultrasound driver only works in 16 bit stereo 44 KHz", + "Ultrasound card could not be reset", + "Could not start Ultrasound timer", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, +#endif + +/* HP driver errors */ +#ifdef DRV_HP + "Unable to select 16bit-linear sample format", + "Could not select requested sample-rate", + "Could not select requested number of channels", + "Unable to select audio output", + "Unable to get audio description", + "Could not set transmission buffer size", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, +#endif + +/* Open Sound System driver errors */ +#ifdef DRV_OSS + "Could not set fragment size", + "Could not set sample size", + "Could not set mono/stereo setting", + "Could not set sample rate", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, +#endif + +/* SGI driver errors */ +#ifdef DRV_SGI + "Unsupported sample rate", + "Hardware does not support 16 bit sound", + "Hardware does not support 8 bit sound", + "Hardware does not support stereo sound", + "Hardware does not support mono sound", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, +#endif + +/* Sun driver errors */ +#ifdef DRV_SUN + "Sound device initialization failed", +#else + _mmerr_invalid, +#endif + +/* OS/2 drivers errors */ +#if defined(DRV_OS2) || defined(DRV_DART) + "Could not set mixing parameters", +#else + _mmerr_invalid, +#endif +#ifdef DRV_OS2 + "Could not create playback semaphores", + "Could not create playback timer", + "Could not create playback thread", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, +#endif + +/* DirectSound driver errors */ +#ifdef DRV_DS + "Could not set playback priority", + "Could not create playback buffers", + "Could not set playback format", + "Could not register callback", + "Could not register event", + "Could not create playback thread", + "Could not initialize playback thread", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, +#endif + +/* Windows Multimedia API driver errors */ +#ifdef DRV_WIN + "Invalid device handle", + "The resource is already allocated", + "Invalid device identifier", + "Unsupported output format", + "Unknown error", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, +#endif + +/* Macintosh driver errors */ +#ifdef DRV_MAC + "Unsupported sample rate", + "Could not start playback", +#else + _mmerr_invalid, _mmerr_invalid, +#endif + +/* MacOS X/Darwin driver errors */ +#ifdef DRV_OSX + "Unknown device", + "Bad property", + "Could not set playback format", + "Could not set mono/stereo setting", + "Could not create playback buffers", + "Could not create playback thread", + "Could not start audio device", + "Could not create buffer thread", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, +#endif + +/* DOS driver errors */ +#ifdef DRV_WSS + "WSS_STARTDMA", +#else + _mmerr_invalid, +#endif +#ifdef DRV_SB + "SB_STARTDMA", +#else + _mmerr_invalid, +#endif + +/* float32 output */ + + "This driver doesn't support 32 bit float output", + +/* OpenAL driver errors */ +#ifdef DRV_OPENAL + "Could not create context", + "Could not make context current", + "Could not create buffers", + "Could not create sources", + "Could not change source parameters", + "Could not queue buffers", + "Could not unqueue buffers", + "Could not copy buffer data", + "Could not get source parameters", + "Could not play source", + "Could not stop source", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, +#endif + +/* ALSA driver errors */ +#ifdef DRV_ALSA + "No ALSA configurations available", + "Could not set ALSA output params", + "Could not set playback format", + "Could not set sample rate", + "Could not set mono/stereo setting", + "Could not get buffer size from ALSA", + "ALSA PCM start error", + "ALSA PCM write error", + "ALSA PCM recovery failure", +#else + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, + _mmerr_invalid, _mmerr_invalid, _mmerr_invalid, +#endif + +/* Sndio errors */ +#ifdef DRV_SNDIO + "Could not set SNDIO output params", + "Unsupported SNDIO output params", +#else + _mmerr_invalid, _mmerr_invalid, +#endif + +/* Invalid error */ + + _mmerr_invalid +}; + +MIKMODAPI const char *MikMod_strerror(int code) +{ + if ((code<0)||(code>MMERR_MAX)) code=MMERR_MAX; + return _mm_errmsg[code]; +} + +/* User installed error callback */ +MikMod_handler_t _mm_errorhandler = NULL; +MIKMODAPI int _mm_errno = 0; +MIKMODAPI BOOL _mm_critical = 0; + +static MikMod_handler_t _mm_registererrorhandler(MikMod_handler_t proc) +{ + MikMod_handler_t oldproc=_mm_errorhandler; + + _mm_errorhandler = proc; + return oldproc; +} + +MIKMODAPI MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t proc) +{ + MikMod_handler_t result; + + MUTEX_LOCK(vars); + result=_mm_registererrorhandler(proc); + MUTEX_UNLOCK(vars); + + return result; +} + +/* ex:set ts=4: */