Initial revision
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;
+}