new modules soundex.c and environment.c
diff --git a/Modules/environment.c b/Modules/environment.c
new file mode 100644
index 0000000..977e917
--- /dev/null
+++ b/Modules/environment.c
@@ -0,0 +1,104 @@
+/*
+# Copyright 1995, InfoSeek Corporation
+# All rights reserved.
+# Written by Andy Bensky
+#
+# Permission to use, copy, modify, and distribute this Python software
+# and its associated documentation for any purpose (subject to the
+# restriction in the following sentence) without fee is hereby granted,
+# provided that the above copyright notice appears in all copies, and
+# that both that copyright notice and this permission notice appear in
+# supporting documentation, and that the name of InfoSeek not be used in
+# advertising or publicity pertaining to distribution of the software
+# without specific, prior written permission. This permission is
+# explicitly restricted to the copying and modification of the software
+# to remain in Python, compiled Python, or other languages (such as C)
+# wherein the modified or derived code is exclusively imported into a
+# Python module.
+#
+# INFOSEEK CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+# FITNESS. IN NO EVENT SHALL INFOSEEK CORPORATION BE LIABLE FOR ANY
+# DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+# OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE,
+# EVEN IF INFOSEEK SHALL HAVE BEEN MADE AWARE OF THE POSSIBILITY OF SUCH
+# DAMAGES.
+*/
+
+/* Hooks to call the Unix putenv() to modify the environment
+*/
+
+#include "allobjects.h"
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/* Error conditions that can be raised */
+
+/* Headers for functions accessible from Python as module methods */
+static object *put_environ( object *self, object *args );
+
+static struct methodlist environ_methods[] = {
+ {"putenv", put_environ},
+ {NULL, NULL}
+};
+
+
+/*
+ * Name: initenvironment
+ * Description:
+ * Initialzation function that Python will use to establish callbacks to
+ * the methods of this module.
+ *
+ * Returns:
+ * void -
+ *
+ * Notes:
+ */
+void initenvironment()
+{
+ object *m, *d;
+
+ m = initmodule("environment", environ_methods);
+ d = getmoduledict(m);
+}
+
+/*
+ * Name: put_environ
+ * Description:
+ * accepts 2 string objects as arguments and forms a string of the
+ * form string1=string2 that can be passed to the putenv() system call.
+ *
+ * Returns:
+ * None object if successfull, otherwise raises a SystemError exception
+ *
+ *
+ * Notes:
+ */
+static object *put_environ( object *self, object *args )
+{
+ char *string1, *string2;
+ char *set_str;
+ object *return_object = None;
+
+ if (args && getargs(args, "(ss)", &string1, &string2))
+ {
+ set_str = malloc(strlen(string1) + strlen(string2) + 2);
+ assert( set_str );
+ (void) sprintf(set_str, "%s=%s", string1, string2);
+ if ( putenv( set_str ) )
+ {
+ err_setstr(SystemError, "Error in system putenv call.");
+ return_object = 0;
+ }
+ }
+ else
+ {
+ err_setstr(TypeError, "Usage: putenv(string1, string2)");
+ return_object = 0;
+ }
+
+ return( return_object );
+}