diff --git a/Mac/Include/config.h b/Mac/Include/config.h
new file mode 100644
index 0000000..8c768e0
--- /dev/null
+++ b/Mac/Include/config.h
@@ -0,0 +1,224 @@
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+
+/* Define if on Macintosh, compiling with THINK C. */
+#define THINK_C
+
+/* Define if on Macintosh, compiling with anyu C compiler. */
+#define macintosh
+
+/* Define if on AIX 3.
+   System headers sometimes define this.
+   We just want to avoid a redefinition error message.  */
+#ifndef _ALL_SOURCE
+#undef _ALL_SOURCE
+#endif
+
+/* Define to empty if the keyword does not work.  */
+#undef const
+
+/* Define if you have dirent.h.  */
+#undef DIRENT
+
+/* Define to the type of elements in the array set by `getgroups'.
+   Usually this is either `int' or `gid_t'.  */
+#undef GETGROUPS_T
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef gid_t
+
+/* Define if your struct tm has tm_zone.  */
+#undef HAVE_TM_ZONE
+
+/* Define if you don't have tm_zone but do have the external array
+   tzname.  */
+#undef HAVE_TZNAME
+
+/* Define if on MINIX.  */
+#undef _MINIX
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef mode_t
+
+/* Define if you don't have dirent.h, but have ndir.h.  */
+#undef NDIR
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+#undef off_t
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef pid_t
+
+/* Define if the system does not provide POSIX.1 features except
+   with this defined.  */
+#undef _POSIX_1_SOURCE
+
+/* Define if you need to in order for stat and other things to work.  */
+#undef _POSIX_SOURCE
+
+/* Define as the return type of signal handlers (int or void).  */
+#define RETSIGTYPE void
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+#undef size_t
+
+/* Define if you have the ANSI C header files.  */
+#define STDC_HEADERS
+
+/* Define if you don't have dirent.h, but have sys/dir.h.  */
+#undef SYSDIR
+
+/* Define if you don't have dirent.h, but have sys/ndir.h.  */
+#undef SYSNDIR
+
+/* Define if you can safely include both <sys/time.h> and <time.h>.  */
+#undef TIME_WITH_SYS_TIME
+
+/* Define if your <sys/time.h> declares struct tm.  */
+#undef TM_IN_SYS_TIME
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+#undef uid_t
+
+/* Define if the closedir function returns void instead of int.  */
+#undef VOID_CLOSEDIR
+
+/* Define if your <unistd.h> contains bad prototypes for exec*()
+   (as it does on SGI IRIX 4.x) */
+#undef BAD_EXEC_PROTOTYPES
+
+/* Define if getpgrp() must be called as getpgrp(0)
+   and (consequently) setpgrp() as setpgrp(0, 0). */
+#undef GETPGRP_HAVE_ARGS
+
+/* Define if your compiler supports function prototypes */
+#define HAVE_PROTOTYPES
+
+/* Define if  you can safely include both <sys/select.h> and <sys/time.h>
+   (which you can't on SCO ODT 3.0). */
+#undef SYS_SELECT_WITH_SYS_TIME
+
+/* Define if you want to compile in rudimentary thread support */
+#undef WITH_THREAD
+
+/* Define if you want to use the GNU readline library */
+#undef WITH_READLINE
+
+/* Define if you have clock.  */
+#define HAVE_CLOCK 1
+
+/* Define if you have ftime.  */
+#undef HAVE_FTIME
+
+/* Define if you have getpeername.  */
+#undef HAVE_GETPEERNAME
+
+/* Define if you have getpgrp.  */
+#undef HAVE_GETPGRP
+
+/* Define if you have gettimeofday.  */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define if you have getwd.  */
+#define HAVE_GETWD 1
+
+/* Define if you have lstat.  */
+#undef HAVE_LSTAT
+
+/* Define if you have readline.  */
+#undef HAVE_READLINE
+
+/* Define if you have readlink.  */
+#undef HAVE_READLINK
+
+/* Define if you have select.  */
+#undef HAVE_SELECT
+
+/* Define if you have setpgid.  */
+#undef HAVE_SETPGID
+
+/* Define if you have setpgrp.  */
+#undef HAVE_SETPGRP
+
+/* Define if you have setsid.  */
+#undef HAVE_SETSID
+
+/* Define if you have siginterrupt.  */
+#undef HAVE_SIGINTERRUPT
+
+/* Define if you have symlink.  */
+#undef HAVE_SYMLINK
+
+/* Define if you have tcgetpgrp.  */
+#undef HAVE_TCGETPGRP
+
+/* Define if you have tcsetpgrp.  */
+#undef HAVE_TCSETPGRP
+
+/* Define if you have times.  */
+#undef HAVE_TIMES
+
+/* Define if you have uname.  */
+#undef HAVE_UNAME
+
+/* Define if you have waitpid.  */
+#undef HAVE_WAITPID
+
+/* Define if you have the <dlfcn.h> header file.  */
+#undef HAVE_DLFCN_H
+
+/* Define if you have the <signal.h> header file.  */
+#define HAVE_SIGNAL_H 1
+
+/* Define if you have the <stdarg.h> header file.  */
+#define HAVE_STDARG_H 1
+
+/* Define if you have the <stdlib.h> header file.  */
+#define HAVE_STDLIB_H 1
+
+/* Define if you have the <sys/audioio.h> header file.  */
+#undef HAVE_SYS_AUDIOIO_H
+
+/* Define if you have the <sys/param.h> header file.  */
+#undef HAVE_SYS_PARAM_H
+
+/* Define if you have the <sys/select.h> header file.  */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the <sys/times.h> header file.  */
+#undef HAVE_SYS_TIMES_H
+
+/* Define if you have the <sys/un.h> header file.  */
+#undef HAVE_SYS_UN_H
+
+/* Define if you have the <sys/utsname.h> header file.  */
+#undef HAVE_SYS_UTSNAME_H
+
+/* Define if you have the <thread.h> header file.  */
+#undef HAVE_THREAD_H
+
+/* Define if you have the <unistd.h> header file.  */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the <utime.h> header file.  */
+#undef HAVE_UTIME_H
+
+/* Define if you have the dl library (-ldl).  */
+#undef HAVE_LIBDL
+
+/* Define if you have the mpc library (-lmpc).  */
+#undef HAVE_LIBMPC
+
+/* Define if you have the nsl library (-lnsl).  */
+#undef HAVE_LIBNSL
+
+/* Define if you have the seq library (-lseq).  */
+#undef HAVE_LIBSEQ
+
+/* Define if you have the socket library (-lsocket).  */
+#undef HAVE_LIBSOCKET
+
+/* Define if you have the sun library (-lsun).  */
+#undef HAVE_LIBSUN
+
+/* Define if you have the thread library (-lthread).  */
+#undef HAVE_LIBTHREAD
diff --git a/Mac/Modules/config.c b/Mac/Modules/config.c
new file mode 100644
index 0000000..a41a0d6
--- /dev/null
+++ b/Mac/Modules/config.c
@@ -0,0 +1,210 @@
+/***********************************************************
+Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum,
+Amsterdam, The Netherlands.
+
+                        All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its 
+documentation for any purpose and without fee is hereby granted, 
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in 
+supporting documentation, and that the names of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY 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.
+
+******************************************************************/
+
+/* Universal Python configuration file */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include "myproto.h"
+#include "mymalloc.h"
+#include "osdefs.h"
+#include "intrcheck.h"
+
+
+#ifndef NO_MAIN
+
+/* Normally, the main program is called from here (so everything else
+   can be in libPython.a).  We save a pointer to argv[0] because it
+   may be needed for dynamic loading of modules in import.c.  If you
+   have your own main program and want to use non-SunOS dynamic
+   loading, you will have to provide your own version of
+   getprogramname(). */
+
+static char *argv0;
+
+main(argc, argv)
+	int argc;
+	char **argv;
+{
+#ifdef macintosh
+	wargs(&argc, &argv);
+#endif
+	argv0 = argv[0];
+	realmain(argc, argv);
+}
+
+char *
+getprogramname()
+{
+	return argv0;
+}
+
+#endif
+
+
+/* Return the initial python search path.  This is called once from
+   initsys() to initialize sys.path.
+   The environment variable PYTHONPATH is fetched and the default path
+   appended.  (The Mac has no environment variables, so there the
+   default path is always returned.)  The default path may be passed
+   to the preprocessor; if not, a system-dependent default is used. */
+
+#ifndef PYTHONPATH
+#ifdef macintosh
+#define PYTHONPATH ": :Lib :Lib:stdwin :Demo"
+#endif /* macintosh */
+#endif /* !PYTHONPATH */
+
+#ifndef PYTHONPATH
+#ifdef MSDOS
+#define PYTHONPATH ".;..\\lib;\\python\\lib"
+#endif /* MSDOS */
+#endif /* !PYTHONPATH */
+
+#ifndef PYTHONPATH
+#define PYTHONPATH ".:/usr/local/lib/python"
+#endif /* !PYTHONPATH */
+
+extern char *getenv();
+
+char *
+getpythonpath()
+{
+#ifdef macintosh
+	return PYTHONPATH;
+#else /* !macintosh */
+	char *path = getenv("PYTHONPATH");
+	char *defpath = PYTHONPATH;
+	char *buf;
+	char *p;
+	int n;
+
+	if (path == 0 || *path == '\0')
+		return defpath;
+	n = strlen(path) + strlen(defpath) + 2;
+	buf = malloc(n);
+	if (buf == NULL)
+		return path; /* XXX too bad -- but not likely */
+	strcpy(buf, path);
+	p = buf + strlen(buf);
+	*p++ = DELIM;
+	strcpy(p, defpath);
+	return buf;
+#endif /* !macintosh */
+}
+
+
+/* Table of built-in modules.
+   These are initialized when first imported.
+   Note: selection of optional extensions is now generally done by the
+   makesetup script. */
+
+extern void initarray();
+extern void initmath();
+extern void initparser();
+extern void initmac();
+extern void initregex();
+extern void initstrop();
+extern void initstruct();
+extern void inittime();
+extern void initdbm();
+extern void initfcntl();
+extern void initnis();
+extern void initpwd();
+extern void initgrp();
+extern void initselect();
+extern void initsocket();
+extern void initaudioop();
+extern void initimageop();
+extern void initrgbimg();
+extern void initstdwin();
+extern void initmd5();
+extern void initmpz();
+extern void initrotor();
+extern void inital();
+extern void initcd();
+extern void initcl();
+extern void initfm();
+extern void initgl();
+extern void initimgfile();
+extern void initsgi();
+extern void initsv();
+extern void initfl();
+extern void initthread();
+extern void inittiming();
+
+/* -- ADDMODULE MARKER 1 -- */
+
+extern void initmarshal();
+
+struct {
+	char *name;
+	void (*initfunc)();
+} inittab[] = {
+
+	{"array", initarray},
+	{"math", initmath},
+	{"parser", initparser},
+	{"mac", initmac},
+	{"regex", initregex},
+	{"strop", initstrop},
+	{"struct", initstruct},
+	{"time", inittime},
+	{"audioop", initaudioop},
+	{"imageop", initimageop},
+	{"rgbimg", initrgbimg},
+	{"stdwin", initstdwin},
+	{"md5", initmd5},
+	{"rotor", initrotor},
+
+/* -- ADDMODULE MARKER 2 -- */
+
+	/* This module "lives in" with marshal.c */
+	{"marshal", initmarshal},
+
+	/* These entries are here for sys.builtin_module_names */
+	{"__main__", NULL},
+	{"__builtin__", NULL},
+	{"sys", NULL},
+
+	/* Sentinel */
+	{0, 0}
+};
+
+#ifdef USE_FROZEN
+#include "frozen.c"
+#else
+struct frozen {
+	char *name;
+	char *code;
+	int size;
+} frozen_modules[] = {
+	{0, 0, 0}
+};
+#endif
diff --git a/Mac/Modules/macmodule.c b/Mac/Modules/macmodule.c
new file mode 100644
index 0000000..3d36f35
--- /dev/null
+++ b/Mac/Modules/macmodule.c
@@ -0,0 +1,246 @@
+/***********************************************************
+Copyright 1991, 1992, 1993, 1004 by Stichting Mathematisch Centrum,
+Amsterdam, The Netherlands.
+
+                        All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its 
+documentation for any purpose and without fee is hereby granted, 
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in 
+supporting documentation, and that the names of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY 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.
+
+******************************************************************/
+
+/* Macintosh OS module implementation */
+
+#include "allobjects.h"
+
+#include "import.h"
+#include "modsupport.h"
+
+#include "::unixemu:dir.h"
+#include "::unixemu:stat.h"
+
+static object *MacError; /* Exception */
+
+
+static object *
+mac_chdir(self, args)
+	object *self;
+	object *args;
+{
+	char *path;
+	if (!getstrarg(args, &path))
+		return NULL;
+	if (chdir(path) != 0)
+		return err_errno(MacError);
+	INCREF(None);
+	return None;
+}
+
+
+static object *
+mac_getcwd(self, args)
+	object *self;
+	object *args;
+{
+	extern char *getwd();
+	char buf[1025];
+	if (!getnoarg(args))
+		return NULL;
+	strcpy(buf, "mac.getcwd() failed"); /* In case getwd() doesn't set a msg */
+	if (getwd(buf) == NULL) {
+		err_setstr(MacError, buf);
+		return NULL;
+	}
+	return newstringobject(buf);
+}
+
+
+static object *
+mac_listdir(self, args)
+	object *self;
+	object *args;
+{
+	object *d, *v;
+	char *name;
+	DIR *dirp;
+	struct direct *ep;
+	if (!getstrarg(args, &name))
+		return NULL;
+	if ((dirp = opendir(name)) == NULL)
+		return err_errno(MacError);
+	if ((d = newlistobject(0)) == NULL) {
+		closedir(dirp);
+		return NULL;
+	}
+	while ((ep = readdir(dirp)) != NULL) {
+		v = newstringobject(ep->d_name);
+		if (v == NULL) {
+			DECREF(d);
+			d = NULL;
+			break;
+		}
+		if (addlistitem(d, v) != 0) {
+			DECREF(v);
+			DECREF(d);
+			d = NULL;
+			break;
+		}
+		DECREF(v);
+	}
+	closedir(dirp);
+	return d;
+}
+
+
+static object *
+mac_mkdir(self, args)
+	object *self;
+	object *args;
+{
+	char *path;
+	int mode;
+	if (!getargs(args, "(si)", &path, &mode))
+		return NULL;
+	if (mkdir(path, mode) != 0)
+		return err_errno(MacError);
+	INCREF(None);
+	return None;
+}
+
+
+static object *
+mac_rename(self, args)
+	object *self;
+	object *args;
+{
+	char *src, *dst;
+	if (!getargs(args, "(ss)", &src, &dst))
+		return NULL;
+	if (rename(src, dst) != 0)
+		return err_errno(MacError);
+	INCREF(None);
+	return None;
+}
+
+
+static object *
+mac_rmdir(self, args)
+	object *self;
+	object *args;
+{
+	char *path;
+	if (!getstrarg(args, &path))
+		return NULL;
+	if (rmdir(path) != 0)
+		return err_errno(MacError);
+	INCREF(None);
+	return None;
+}
+
+
+static object *
+mac_stat(self, args)
+	object *self;
+	object *args;
+{
+	struct stat st;
+	char *path;
+	object *v;
+	if (!getstrarg(args, &path))
+		return NULL;
+	if (stat(path, &st) != 0)
+		return err_errno(MacError);
+	v = newtupleobject(11);
+	if (v == NULL)
+		return NULL;
+#define SET(i, val) settupleitem(v, i, newintobject((long)(val)))
+#define UNSET(i, val) SET(i, 0) /* For values my Mac stat doesn't support */
+	SET(0, st.st_mode);
+	UNSET(1, st.st_ino);
+	UNSET(2, st.st_dev);
+	UNSET(3, st.st_nlink);
+	UNSET(4, st.st_uid);
+	UNSET(5, st.st_gid);
+	SET(6, st.st_size);
+	UNSET(7, st.st_atime);
+	SET(8, st.st_mtime);
+	UNSET(9, st.st_ctime);
+	SET(10, st.st_rsize); /* Mac-specific: resource size */
+	/* XXX Check that unixemu:stat.c defines this! */
+#undef SET
+	if (err_occurred()) {
+		DECREF(v);
+		return NULL;
+	}
+	return v;
+}
+
+
+static object *
+mac_sync(self, args)
+	object *self;
+	object *args;
+{
+	if (!getnoarg(args))
+		return NULL;
+	sync();
+	INCREF(None);
+	return None;
+}
+
+
+static object *
+mac_unlink(self, args)
+	object *self;
+	object *args;
+{
+	char *path;
+	if (!getstrarg(args, &path))
+		return NULL;
+	if (unlink(path) != 0)
+		return err_errno(MacError);
+	INCREF(None);
+	return None;
+}
+
+
+static struct methodlist mac_methods[] = {
+	{"chdir",	mac_chdir},
+	{"getcwd",	mac_getcwd},
+	{"listdir",	mac_listdir},
+	{"mkdir",	mac_mkdir},
+	{"rename",	mac_rename},
+	{"rmdir",	mac_rmdir},
+	{"stat",	mac_stat},
+	{"sync",	mac_sync},
+	{"unlink",	mac_unlink},
+	{NULL,		NULL}		 /* Sentinel */
+};
+
+
+void
+initmac()
+{
+	object *m, *d;
+	
+	m = initmodule("mac", mac_methods);
+	d = getmoduledict(m);
+	
+	/* Initialize mac.error exception */
+	MacError = newstringobject("mac.error");
+	if (MacError == NULL || dictinsert(d, "error", MacError) != 0)
+		fatal("can't define mac.error");
+}
diff --git a/Mac/Python/macgetmtime.c b/Mac/Python/macgetmtime.c
new file mode 100644
index 0000000..c581009
--- /dev/null
+++ b/Mac/Python/macgetmtime.c
@@ -0,0 +1,13 @@
+#include "::unixemu:stat.h"
+
+/* Interfaced used by import.c */
+
+long
+getmtime(path)
+	char *path;
+{
+	struct stat st;
+	if (stat(path, &st) != 0)
+		return -1L;
+	return st.st_mtime;
+}
diff --git a/Mac/Python/macguesstabsize.c b/Mac/Python/macguesstabsize.c
new file mode 100644
index 0000000..7d1abb7
--- /dev/null
+++ b/Mac/Python/macguesstabsize.c
@@ -0,0 +1,27 @@
+#include <MacHeaders>
+#include <string.h>
+
+/* Interface used by tokenizer.c */
+
+guesstabsize(path)
+	char *path;
+{
+	char s[256];
+	int refnum;
+	Handle h;
+	int tabsize = 0;
+	s[0] = strlen(path);
+	strncpy(s+1, path, s[0]);
+	refnum = OpenResFile(s);
+/* printf("%s --> refnum=%d\n", path, refnum); */
+	if (refnum == -1)
+		return 0;
+	UseResFile(refnum);
+	h = GetIndResource('ETAB', 1);
+	if (h != 0) {
+		tabsize = (*(short**)h)[1];
+/* printf("tabsize=%d\n", tabsize); */
+	}
+	CloseResFile(refnum);
+	return tabsize;
+}
