sdl12-compat: audio: Support the SDL_AUDIO_[FORMAT|FREQUENCY|CHANNELS|SAMPLES] env vars.

From 5e74b4b9ae8586a359b24df9f61398f2d6c69f4d Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Fri, 19 Aug 2022 10:49:32 -0400
Subject: [PATCH] audio: Support the
 SDL_AUDIO_[FORMAT|FREQUENCY|CHANNELS|SAMPLES] env vars.

Reference Issue #143.
---
 src/SDL12_compat.c | 54 +++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 46 insertions(+), 8 deletions(-)

diff --git a/src/SDL12_compat.c b/src/SDL12_compat.c
index c618cc2a..6364b1a6 100644
--- a/src/SDL12_compat.c
+++ b/src/SDL12_compat.c
@@ -8784,22 +8784,60 @@ SDL_OpenAudio(SDL_AudioSpec *want, SDL_AudioSpec *obtained)
         return SDL20_SetError("Audio device already opened");
     }
 
-    FIXME("Respect 1.2 environment variables for defining format here.");
     if (!want->format) {
-        want->format = AUDIO_S16SYS;
+        const char *env = SDL20_getenv("SDL_AUDIO_FORMAT");  /* SDL 1.2 checks this. */
+        if (env != NULL) {
+            if (0) {}
+            else if (SDL20_strcmp(env, "U8") == 0) { want->format = AUDIO_U8; }
+            else if (SDL20_strcmp(env, "S8") == 0) { want->format = AUDIO_S8; }
+            else if (SDL20_strcmp(env, "U16") == 0) { want->format = AUDIO_U16SYS; }
+            else if (SDL20_strcmp(env, "S16") == 0) { want->format = AUDIO_S16SYS; }
+            else if (SDL20_strcmp(env, "U16LSB") == 0) { want->format = AUDIO_U16LSB; }
+            else if (SDL20_strcmp(env, "S16LSB") == 0) { want->format = AUDIO_S16LSB; }
+            else if (SDL20_strcmp(env, "U16MSB") == 0) { want->format = AUDIO_U16MSB; }
+            else if (SDL20_strcmp(env, "S16MSB") == 0) { want->format = AUDIO_S16MSB; }
+            else if (SDL20_strcmp(env, "U16SYS") == 0) { want->format = AUDIO_U16SYS; }
+            else if (SDL20_strcmp(env, "S16SYS") == 0) { want->format = AUDIO_S16SYS; }
+        }
+        if (!want->format) {
+            want->format = AUDIO_S16SYS;
+        }
     }
+
     if (!want->freq) {
-        want->freq = 22050;
+        const char *env = SDL20_getenv("SDL_AUDIO_FREQUENCY");  /* SDL 1.2 checks this. */
+        if (env != NULL) {
+            want->freq = SDL20_atoi(env);
+        }
+        if (!want->freq) {
+            want->freq = 22050;
+        }
         want->samples = 0;
     }
+
     if (!want->channels) {
-        want->channels = 2;
+        const char *env = SDL20_getenv("SDL_AUDIO_CHANNELS");  /* SDL 1.2 checks this. */
+        if (env != NULL) {
+            want->channels = SDL20_atoi(env);
+        }
+        if (!want->channels) {
+            want->channels = 2;
+        }
     }
+
     if (!want->samples) {
-        Uint32 samp = (want->freq / 1000) * 46;  /* ~46 ms */
-        Uint32 pow2 = 1;
-        while (pow2 < samp) pow2 <<= 1;
-        want->samples = pow2;
+        const char *env = SDL20_getenv("SDL_AUDIO_SAMPLES");  /* SDL 1.2 checks this. */
+        if (env != NULL) {
+            want->samples = SDL20_atoi(env);
+        }
+        if (!want->samples) {
+            const Uint32 samp = (want->freq / 1000) * 46;  /* ~46 ms */
+            Uint32 pow2 = 1;
+            while (pow2 < samp) {
+                pow2 <<= 1;
+            }
+            want->samples = pow2;
+        }
     }
 
     /* the app always passes callback data through an SDL_AudioStream, since it