Add warnings to the strop module, for to those functions that really
*are* obsolete; three variables and the maketrans() function are not
(yet) obsolete.

Add a compensating warnings.filterwarnings() call to test_strop.py.

Add this to the NEWS.
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c
index 312e0dc..bd56ee0 100644
--- a/Modules/stropmodule.c
+++ b/Modules/stropmodule.c
@@ -12,6 +12,10 @@
 /* XXX This file assumes that the <ctype.h> is*() functions
    XXX are defined for all 8-bit characters! */
 
+#define WARN if (PyErr_Warn(PyExc_DeprecationWarning, \
+		       "strop functions are obsolete; use string methods")) \
+	     return NULL
+
 /* The lstrip(), rstrip() and strip() functions are implemented
    in do_strip(), which uses an additional parameter to indicate what
    type of strip should occur. */
@@ -95,6 +99,7 @@
 	char *s, *sub;
 	PyObject *list, *item;
 
+	WARN;
 	sub = NULL;
 	n = 0;
 	splitcount = 0;
@@ -167,6 +172,7 @@
 	char* p = NULL;
 	intargfunc getitemfunc;
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "O|t#:join", &seq, &sep, &seplen))
 		return NULL;
 	if (sep == NULL) {
@@ -292,6 +298,7 @@
 	char *s, *sub;
 	int len, n, i = 0, last = INT_MAX;
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "t#t#|ii:find", &s, &len, &sub, &n, &i, &last))
 		return NULL;
 
@@ -335,6 +342,7 @@
 	int len, n, j;
 	int i = 0, last = INT_MAX;
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "t#t#|ii:rfind", &s, &len, &sub, &n, &i, &last))
 		return NULL;
 
@@ -404,6 +412,7 @@
 static PyObject *
 strop_strip(PyObject *self, PyObject *args)
 {
+	WARN;
 	return do_strip(args, BOTHSTRIP);
 }
 
@@ -416,6 +425,7 @@
 static PyObject *
 strop_lstrip(PyObject *self, PyObject *args)
 {
+	WARN;
 	return do_strip(args, LEFTSTRIP);
 }
 
@@ -428,6 +438,7 @@
 static PyObject *
 strop_rstrip(PyObject *self, PyObject *args)
 {
+	WARN;
 	return do_strip(args, RIGHTSTRIP);
 }
 
@@ -445,6 +456,7 @@
 	PyObject *new;
 	int changed;
 
+	WARN;
 	if (!PyArg_Parse(args, "t#", &s, &n))
 		return NULL;
 	new = PyString_FromStringAndSize(NULL, n);
@@ -483,6 +495,7 @@
 	PyObject *new;
 	int changed;
 
+	WARN;
 	if (!PyArg_Parse(args, "t#", &s, &n))
 		return NULL;
 	new = PyString_FromStringAndSize(NULL, n);
@@ -522,6 +535,7 @@
 	PyObject *new;
 	int changed;
 
+	WARN;
 	if (!PyArg_Parse(args, "t#", &s, &n))
 		return NULL;
 	new = PyString_FromStringAndSize(NULL, n);
@@ -577,6 +591,7 @@
 	int stringlen;
 	int tabsize = 8;
 
+	WARN;
 	/* Get arguments */
 	if (!PyArg_ParseTuple(args, "s#|i:expandtabs", &string, &stringlen, &tabsize))
 		return NULL;
@@ -642,6 +657,7 @@
 	int i = 0, last = INT_MAX;
 	int m, r;
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "t#t#|ii:count", &s, &len, &sub, &n, &i, &last))
 		return NULL;
 	if (last > len)
@@ -685,6 +701,7 @@
 	PyObject *new;
 	int changed;
 
+	WARN;
 	if (!PyArg_Parse(args, "t#", &s, &n))
 		return NULL;
 	new = PyString_FromStringAndSize(NULL, n);
@@ -733,6 +750,7 @@
 	long x;
 	char buffer[256]; /* For errors */
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "s|i:atoi", &s, &base))
 		return NULL;
 
@@ -786,6 +804,7 @@
 	PyObject *x;
 	char buffer[256]; /* For errors */
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "s|i:atol", &s, &base))
 		return NULL;
 
@@ -830,6 +849,7 @@
 	double x;
 	char buffer[256]; /* For errors */
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "s:atof", &s))
 		return NULL;
 	while (*s && isspace(Py_CHARMASK(*s)))
@@ -913,6 +933,7 @@
 	PyObject *result;
 	int trans_table[256];
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "St#|t#:translate", &input_obj,
 			      &table1, &tablen, &del_table, &dellen))
 		return NULL;
@@ -1124,6 +1145,7 @@
 	int count = -1;
 	PyObject *new;
 
+	WARN;
 	if (!PyArg_ParseTuple(args, "t#t#t#|i:replace",
 			      &str, &len, &pat, &pat_len, &sub, &sub_len,
 			      &count))