[Python-checkins] r63186 - in python/trunk: Misc/NEWS PC/winsound.c

amaury.forgeotdarc python-checkins at python.org
Mon May 12 23:30:25 CEST 2008


Author: amaury.forgeotdarc
Date: Mon May 12 23:30:24 2008
New Revision: 63186

Log:
Sync code with documentation, and remove Win95 support in winsound module.


Modified:
   python/trunk/Misc/NEWS
   python/trunk/PC/winsound.c

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Mon May 12 23:30:24 2008
@@ -23,6 +23,8 @@
 Extension Modules
 -----------------
 
+- Support for Windows9x has been removed from the winsound module.
+
 Library
 -------
 

Modified: python/trunk/PC/winsound.c
==============================================================================
--- python/trunk/PC/winsound.c	(original)
+++ python/trunk/PC/winsound.c	Mon May 12 23:30:24 2008
@@ -38,9 +38,6 @@
 #include <Python.h>
 #include <windows.h>
 #include <mmsystem.h>
-#ifdef HAVE_CONIO_H
-#include <conio.h>	/* port functions on Win9x */
-#endif
 
 PyDoc_STRVAR(sound_playsound_doc,
 "PlaySound(sound, flags) - a wrapper around the Windows PlaySound API\n"
@@ -53,10 +50,7 @@
 "\n"
 "The frequency argument specifies frequency, in hertz, of the sound.\n"
 "This parameter must be in the range 37 through 32,767.\n"
-"The duration argument specifies the number of milliseconds.\n"
-"On WinNT and 2000, the platform Beep API is used directly.  Else funky\n"
-"code doing direct port manipulation is used; it's unknown whether that\n"
-"will work on all systems.");
+"The duration argument specifies the number of milliseconds.\n");
 
 PyDoc_STRVAR(sound_msgbeep_doc,
 "MessageBeep(x) - call Windows MessageBeep(x). x defaults to MB_OK.");
@@ -107,14 +101,12 @@
     return Py_None;
 }
 
-enum OSType {Win9X, WinNT2000};
-static enum OSType whichOS;	/* set by module init */
-
 static PyObject *
 sound_beep(PyObject *self, PyObject *args)
 {
 	int freq;
 	int dur;
+	BOOL ok;
 
 	if (!PyArg_ParseTuple(args, "ii:Beep", &freq,  &dur))
 		return NULL;
@@ -125,57 +117,14 @@
 		return NULL;
 	}
 
-	/* On NT and 2000, the SDK Beep() function does the whole job.
-	 * But while Beep() exists before NT, it ignores its arguments and
-	 * plays the system default sound.  Sheesh ...
-	 * The Win9X code is mondo bizarre.  I (Tim) pieced it together from
-	 * crap all over the web.  The original IBM PC used some particular
-	 * pieces of hardware (Intel 8255 and 8254 chips) hardwired to
-	 * particular port addresses and running at particular clock speeds,
-	 * and the poor sound card folks have been forced to emulate that in
-	 * all particulars ever since.  But NT and 2000 don't support port
-	 * manipulation.  Don't know about WinME; guessing it's like 98.
-	 */
-
-	if (whichOS == WinNT2000) {
-		BOOL ok;
-		Py_BEGIN_ALLOW_THREADS
-		ok = Beep(freq, dur);
-		Py_END_ALLOW_THREADS
-		if (!ok) {
-			PyErr_SetString(PyExc_RuntimeError,"Failed to beep");
-			return NULL;
-		}
-	}
-#if defined(_M_IX86) && defined(HAVE_CONIO_H)
-	else if (whichOS == Win9X) {
-		int speaker_state;
-		/* Force timer into oscillator mode via timer control port. */
-		_outp(0x43, 0xb6);
-		/* Compute ratio of ancient hardcoded timer frequency to
-		 * frequency we want.  Then feed that ratio (lowest byte
-		 * first) into timer data port.
-		 */
-		freq = 1193180 / freq;
-		_outp(0x42, freq & 0xff);
-		_outp(0x42, (freq >> 8) & 0xff);
-		/* Get speaker control state. */
-		speaker_state = _inp(0x61);
-		/* Turn the speaker on (bit 1)
-		 * and drive speaker from timer (bit 0).
-		 */
-		_outp(0x61, speaker_state | 0x3);
-		/* Let it blast in peace for the duration. */
-		Py_BEGIN_ALLOW_THREADS
-		Sleep(dur);
-		Py_END_ALLOW_THREADS
-		/* Restore speaker control to original state. */
-		_outp(0x61, speaker_state);
-	}
-#endif /* _M_IX86 && HAVE_CONIO_H */
-	else {
-		assert(!"winsound's whichOS has insane value");
+	Py_BEGIN_ALLOW_THREADS
+	ok = Beep(freq, dur);
+	Py_END_ALLOW_THREADS
+	if (!ok) {
+		PyErr_SetString(PyExc_RuntimeError,"Failed to beep");
+		return NULL;
 	}
+
 	Py_INCREF(Py_None);
 	return Py_None;
 }
@@ -217,8 +166,6 @@
 PyMODINIT_FUNC
 initwinsound(void)
 {
-	OSVERSIONINFO version;
-
 	PyObject *dict;
 	PyObject *module = Py_InitModule3("winsound",
 					  sound_methods,
@@ -243,11 +190,4 @@
 	ADD_DEFINE(MB_ICONEXCLAMATION);
 	ADD_DEFINE(MB_ICONHAND);
 	ADD_DEFINE(MB_ICONQUESTION);
-
-	version.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
-	GetVersionEx(&version);
-	whichOS = Win9X;
-	if (version.dwPlatformId != VER_PLATFORM_WIN32s &&
-	    version.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
-		whichOS = WinNT2000;
 }


More information about the Python-checkins mailing list