diff --git a/Include/osdefs.h b/Include/osdefs.h
index 89e0ecb..8190a75 100644
--- a/Include/osdefs.h
+++ b/Include/osdefs.h
@@ -7,13 +7,6 @@
 
 /* Operating system dependencies */
 
-#ifdef macintosh
-#define SEP ':'
-#define MAXPATHLEN 256
-/* Mod by Jack: newline is less likely to occur in filenames than space */
-#define DELIM '\n'
-#endif
-
 /* Mod by chrish: QNX has WATCOM, but isn't DOS */
 #if !defined(__QNX__)
 #if defined(MS_WINDOWS) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__DJGPP__) || defined(PYOS_OS2)
diff --git a/Include/structmember.h b/Include/structmember.h
index 69bdc1b..3f4cfe0 100644
--- a/Include/structmember.h
+++ b/Include/structmember.h
@@ -63,10 +63,6 @@
 
 /* Added by Jack: strings contained in the structure */
 #define T_STRING_INPLACE	13
-#ifdef macintosh
-#define T_PSTRING	14	/* macintosh pascal-style counted string */
-#define T_PSTRING_INPLACE	15
-#endif /* macintosh */
 
 #define T_OBJECT_EX	16	/* Like T_OBJECT, but raises AttributeError
 				   when the value is NULL, instead of
diff --git a/Mac/Include/macglue.h b/Mac/Include/macglue.h
index 799da10..7fd5154 100644
--- a/Mac/Include/macglue.h
+++ b/Mac/Include/macglue.h
@@ -31,56 +31,8 @@
 	extern "C" {
 #endif
 
-/* Scheduler parameters */
-typedef struct {
-	int		check_interrupt;	/* if true check for command-dot */
-	int		process_events;		/* if nonzero enable evt processing, this mask */
-	int		besocial;		/* Be social, give up CPU now and again */
-	double		check_interval;		/* how often to check */
-	double		bg_yield;		/* yield at most so long when in background */
-} PyMacSchedParams;
-
-unsigned char *Pstring(char *str);		/* Convert c-string to pascal-string in static buffer */
-
-extern short PyMac_AppRefNum;			/* RefNum of application rsrcfork (from macmain.c) */
-extern FSSpec PyMac_ApplicationFSSpec;		/* Application location (from macargv.c) */
-extern char PyMac_ApplicationPath[];		/* Application location (from macargv.c) */
-extern OSErr PyMac_init_application_location(void);	/* Init the above */
-extern int PyMac_GetArgv(char ***, int);	/* Get argc, argv (from macargv.c) */
-
 extern PyObject *PyMac_OSErrException;		/* Exception for OSErr */
 PyObject *PyMac_GetOSErrException(void);	/* Initialize & return it */
-
-int PyMac_HandleEvent(EventRecord *);	/* Handle one event, possibly in Python */
-void PyMac_HandleEventIntern(EventRecord *); /* Handle one event internal only */
-int PyMac_SetEventHandler(PyObject *);	/* set python-coded event handler */
-
-int PyMac_FindResourceModule(PyStringObject *, char *, char *); /* Test for 'PYC ' resource in a file */
-PyObject * PyMac_LoadResourceModule(char *, char *); /* Load 'PYC ' resource from file */
-int PyMac_FindCodeResourceModule(PyStringObject *, char *, char *); /* Test for 'PYD ' resource in a file */
-PyObject * PyMac_LoadCodeResourceModule(char *, char *); /* Load 'PYD ' resource from file */
-struct filedescr *PyMac_FindModuleExtension(char *, size_t *, char *); /* Look for module in single folder */
-
-void PyMac_InitApplet(void);			/* Initialize and run an Applet */
-void PyMac_Initialize(void);			/* Initialize function for embedding Python */
-
-
-/* From macfiletype.c: */
-
-long PyMac_getfiletype(char *);			/* Get file type */
-int PyMac_setfiletype(char *, long, long);		/* Set file creator and type */
-
-/* from macmain.c: */
-void PyMac_Exit(int);
-void PyMac_InitApplication(void);
-void PyMac_OutputSeen(void);
-void PyMac_OutputNotSeen(void);
-int PyMac_GetDelayConsoleFlag(void);
-
-/* from macgetargv: */
-OSErr PyMac_init_process_location(void);
-char *	strdup(const char *str);
-
 #ifdef __cplusplus
 	}
 #endif
diff --git a/Modules/_hotshot.c b/Modules/_hotshot.c
index da68970..a04494f 100644
--- a/Modules/_hotshot.c
+++ b/Modules/_hotshot.c
@@ -26,7 +26,7 @@
 #ifndef HAVE_GETTIMEOFDAY
 #error "This module requires gettimeofday() on non-Windows platforms!"
 #endif
-#if defined(macintosh) || (defined(PYOS_OS2) && defined(PYCC_GCC))
+#if (defined(PYOS_OS2) && defined(PYCC_GCC))
 #include <sys/time.h>
 #else
 #include <sys/resource.h>
@@ -47,10 +47,6 @@
 
 #define BUFFERSIZE 10240
 
-#ifdef macintosh
-#define PATH_MAX 254
-#endif
-
 #if defined(PYOS_OS2) && defined(PYCC_GCC)
 #define PATH_MAX 260
 #endif
@@ -940,7 +936,7 @@
         }
 #endif
     }
-#if defined(MS_WINDOWS) || defined(macintosh) || defined(PYOS_OS2) || \
+#if defined(MS_WINDOWS) || defined(PYOS_OS2) || \
     defined(__VMS)
     rusage_diff = -1;
 #else
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 02e4feb..e6f8953 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -33,10 +33,6 @@
 #include <windows.h>
 #endif
 
-#ifdef macintosh
-#define MAC_TCL
-#endif
-
 /* Allow using this code in Python 2.[12] */
 #ifndef PyDoc_STRVAR
 #define PyDoc_STRVAR(name,str) static char name[] = str
@@ -96,15 +92,7 @@
 #error "unsupported Tcl configuration"
 #endif
 
-#if defined(macintosh)
-/* Sigh, we have to include this to get at the tcl qd pointer */
-#include <tkMac.h>
-/* And this one we need to clear the menu bar */
-#include <Menus.h>
-#endif
-
-#if !(defined(MS_WINDOWS) || defined(__CYGWIN__) || defined(macintosh))
-/* Mac has it, but it doesn't really work:-( */
+#if !(defined(MS_WINDOWS) || defined(__CYGWIN__))
 #define HAVE_CREATEFILEHANDLER
 #endif
 
@@ -238,29 +226,6 @@
 
 #endif
 
-#ifdef macintosh
-
-/*
-** Additional cruft needed by Tcl/Tk on the Mac.
-** This is for Tcl 7.5 and Tk 4.1 (patch release 1).
-*/
-
-/* ckfree() expects a char* */
-#define FREECAST (char *)
-
-#include <Events.h> /* For EventRecord */
-
-typedef int (*TclMacConvertEventPtr) (EventRecord *eventPtr);
-void Tcl_MacSetEventProc(TclMacConvertEventPtr procPtr);
-int TkMacConvertEvent(EventRecord *eventPtr);
-
-static int PyMacConvertEvent(EventRecord *eventPtr);
-
-#include <SIOUX.h>
-extern int SIOUXIsAppWindow(WindowPtr);
-
-#endif /* macintosh */
-
 #ifndef FREECAST
 #define FREECAST (char *)
 #endif
@@ -646,12 +611,6 @@
 	v->ProcBodyType = Tcl_GetObjType("procbody");
 	v->StringType = Tcl_GetObjType("string");
 
-#if defined(macintosh)
-	/* This seems to be needed */
-	ClearMenuBar();
-	TkMacInitMenus(v->interp);
-#endif
-
 	/* Delete the 'exit' command, which can screw things up */
 	Tcl_DeleteCommand(v->interp, "exit");
 
@@ -3092,112 +3051,4 @@
 	Py_AtExit(Tcl_Finalize);
 #endif
 
-#ifdef macintosh
-	/*
-	** Part of this code is stolen from MacintoshInit in tkMacAppInit.
-	** Most of the initializations in that routine (toolbox init calls and
-	** such) have already been done for us, so we only need these.
-	*/
-	tcl_macQdPtr = &qd;
-
-	Tcl_MacSetEventProc(PyMacConvertEvent);
-#if GENERATINGCFM
-	mac_addlibresources();
-#endif /* GENERATINGCFM */
-#endif /* macintosh */
 }
-
-
-
-#ifdef macintosh
-
-/*
-** Anyone who embeds Tcl/Tk on the Mac must define panic().
-*/
-
-void
-panic(char * format, ...)
-{
-	va_list varg;
-	
-	va_start(varg, format);
-	
-	vfprintf(stderr, format, varg);
-	(void) fflush(stderr);
-	
-	va_end(varg);
-
-	Py_FatalError("Tcl/Tk panic");
-}
-
-/*
-** Pass events to SIOUX before passing them to Tk.
-*/
-
-static int
-PyMacConvertEvent(EventRecord *eventPtr)
-{
-	WindowPtr frontwin;
-	/*
-	** Sioux eats too many events, so we don't pass it everything.  We
-	** always pass update events to Sioux, and we only pass other events if
-	** the Sioux window is frontmost. This means that Tk menus don't work
-	** in that case, but at least we can scroll the sioux window.
-	** Note that the SIOUXIsAppWindow() routine we use here is not really
-	** part of the external interface of Sioux...
-	*/
-	frontwin = FrontWindow();
-	if ( eventPtr->what == updateEvt || SIOUXIsAppWindow(frontwin) ) {
-		if (SIOUXHandleOneEvent(eventPtr))
-			return 0; /* Nothing happened to the Tcl event queue */
-	}
-	return TkMacConvertEvent(eventPtr);
-}
-
-#if GENERATINGCFM
-
-/*
-** Additional Mac specific code for dealing with shared libraries.
-*/
-
-#include <Resources.h>
-#include <CodeFragments.h>
-
-static int loaded_from_shlib = 0;
-static FSSpec library_fss;
-
-/*
-** If this module is dynamically loaded the following routine should
-** be the init routine. It takes care of adding the shared library to
-** the resource-file chain, so that the tk routines can find their
-** resources.
-*/
-OSErr pascal
-init_tkinter_shlib(CFragInitBlockPtr data)
-{
-	__initialize();
-	if ( data == nil ) return noErr;
-	if ( data->fragLocator.where == kDataForkCFragLocator ) {
-		library_fss = *data->fragLocator.u.onDisk.fileSpec;
-		loaded_from_shlib = 1;
-	} else if ( data->fragLocator.where == kResourceCFragLocator ) {
-		library_fss = *data->fragLocator.u.inSegs.fileSpec;
-		loaded_from_shlib = 1;
-	}
-	return noErr;
-}
-
-/*
-** Insert the library resources into the search path. Put them after
-** the resources from the application. Again, we ignore errors.
-*/
-static
-mac_addlibresources(void)
-{
-	if ( !loaded_from_shlib ) 
-		return;
-	(void)FSpOpenResFile(&library_fss, fsRdPerm);
-}
-
-#endif /* GENERATINGCFM */
-#endif /* macintosh */
diff --git a/Modules/getbuildinfo.c b/Modules/getbuildinfo.c
index ef444bf..b541bb6 100644
--- a/Modules/getbuildinfo.c
+++ b/Modules/getbuildinfo.c
@@ -1,9 +1,5 @@
 #include "Python.h"
 
-#ifdef macintosh
-#include "macbuildno.h"
-#endif
-
 #ifndef DONT_HAVE_STDIO_H
 #include <stdio.h>
 #endif
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 4a795ed..bf6a360 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -39,10 +39,6 @@
 #define NOTE(x)
 #endif
 
-#ifdef macintosh
-char *strdup(char *);
-#endif
-
 /*  String constants used to initialize module attributes.
  *
  */
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 0f7b143..d60f320 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -6,12 +6,7 @@
 
 #include <ctype.h>
 
-#ifdef macintosh
-#include <time.h>
-#include <OSUtils.h>
-#else
 #include <sys/types.h>
-#endif
 
 #ifdef QUICKWIN
 #include <io.h>
@@ -89,37 +84,6 @@
 /* For Y2K check */
 static PyObject *moddict;
 
-#ifdef macintosh
-/* Our own timezone. We have enough information to deduce whether
-** DST is on currently, but unfortunately we cannot put it to good
-** use because we don't know the rules (and that is needed to have
-** localtime() return correct tm_isdst values for times other than
-** the current time. So, we cop out and only tell the user the current
-** timezone.
-*/
-static long timezone;
-
-static void
-initmactimezone(void)
-{
-	MachineLocation	loc;
-	long		delta;
-
-	ReadLocation(&loc);
-
-	if (loc.latitude == 0 && loc.longitude == 0 && loc.u.gmtDelta == 0)
-		return;
-
-	delta = loc.u.gmtDelta & 0x00FFFFFF;
-
-	if (delta & 0x00800000)
-		delta |= 0xFF000000;
-
-	timezone = -delta;
-}
-#endif /* macintosh */
-
-
 static PyObject *
 time_time(PyObject *self, PyObject *args)
 {
@@ -636,17 +600,6 @@
 		}
 	}
 #else
-#ifdef macintosh
-	/* The only thing we can obtain is the current timezone
-	** (and whether dst is currently _active_, but that is not what
-	** we're looking for:-( )
-	*/
-	initmactimezone();
-	PyModule_AddIntConstant(m, "timezone", timezone);
-	PyModule_AddIntConstant(m, "altzone", timezone);
-	PyModule_AddIntConstant(m, "daylight", 0);
-	PyModule_AddObject(m, "tzname", Py_BuildValue("(zz)", "", ""));
-#endif /* macintosh */
 #endif /* HAVE_STRUCT_TM_TM_ZONE */
 #ifdef __CYGWIN__
 	tzset();
@@ -829,15 +782,6 @@
 		}
 	}
 	Py_END_ALLOW_THREADS
-#elif defined(macintosh)
-#define MacTicks	(* (long *)0x16A)
-	long deadline;
-	deadline = MacTicks + (long)(secs * 60.0);
-	while (MacTicks < deadline) {
-		/* XXX Should call some yielding function here */
-		if (PyErr_CheckSignals())
-			return -1;
-	}
 #elif defined(__WATCOMC__) && !defined(__QNX__)
 	/* XXX Can't interrupt this sleep */
 	Py_BEGIN_ALLOW_THREADS
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 9ed53e2..66461a8 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -8,7 +8,7 @@
 
 #include <ctype.h>
 
-#if !defined(__STDC__) && !defined(macintosh)
+#if !defined(__STDC__)
 extern double fmod(double, double);
 extern double pow(double, double);
 #endif
diff --git a/Objects/object.c b/Objects/object.c
index 33e146a..5b61d84 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -3,10 +3,6 @@
 
 #include "Python.h"
 
-#ifdef macintosh
-#include "macglue.h"
-#endif
-
 #ifdef Py_REF_DEBUG
 long _Py_RefTotal;
 #endif
diff --git a/Parser/intrcheck.c b/Parser/intrcheck.c
index e2ca5b4..f7434af 100644
--- a/Parser/intrcheck.c
+++ b/Parser/intrcheck.c
@@ -92,14 +92,6 @@
 #endif /* MSDOS && !QUICKWIN */
 
 
-#ifdef macintosh
-
-/* The Mac interrupt code has moved to macglue.c */
-#define OK
-
-#endif /* macintosh */
-
-
 #ifndef OK
 
 /* Default version -- for real operating systems and for Standard C */
diff --git a/Parser/pgenmain.c b/Parser/pgenmain.c
index 7e86ea6..0f68940 100644
--- a/Parser/pgenmain.c
+++ b/Parser/pgenmain.c
@@ -153,15 +153,6 @@
 	Py_Exit(1);
 }
 
-#ifdef macintosh
-/* ARGSUSED */
-int
-guesstabsize(char *path)
-{
-	return 4;
-}
-#endif
-
 /* No-nonsense my_readline() for tokenizer.c */
 
 char *
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index a97720c..0821bda 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -784,7 +784,6 @@
 				done = tok->inp[-1] == '\n';
 			}
 			tok->cur = tok->buf + cur;
-#ifndef macintosh
 			/* replace "\r\n" with "\n" */
 			/* For Mac we leave the \r, giving a syntax error */
 			pt = tok->inp - 2;
@@ -793,7 +792,6 @@
 				*pt = '\0';
 				tok->inp = pt;
 			}
-#endif
 		}
 		if (tok->done != E_OK) {
 			if (tok->prompt != NULL)
@@ -1185,15 +1183,6 @@
 		return NEWLINE;
 	}
 	
-#ifdef macintosh
-	if (c == '\r') {
-		PySys_WriteStderr(
-		  "File contains \\r characters (incorrect line endings?)\n");
-		tok->done = E_TOKEN;
-		tok->cur = tok->inp;
-		return ERRORTOKEN;
-	}
-#endif	
 	/* Period or number starting with period? */
 	if (c == '.') {
 		c = tok_nextc(tok);
diff --git a/Python/ceval.c b/Python/ceval.c
index df6f0e9..f198da1 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -14,10 +14,6 @@
 #include "opcode.h"
 #include "structmember.h"
 
-#ifdef macintosh
-#include "macglue.h"
-#endif
-
 #include <ctype.h>
 
 /* Turn this on if your compiler chokes on the big switch: */
@@ -801,7 +797,7 @@
 					goto on_error;
 				}
 			}
-#if !defined(HAVE_SIGNAL_H) || defined(macintosh)
+#if !defined(HAVE_SIGNAL_H)
 			/* If we have true signals, the signal handler
 			   will call Py_AddPendingCall() so we don't
 			   have to call PyErr_CheckSignals().  On the 
diff --git a/Python/errors.c b/Python/errors.c
index 4d88d2d..6416ff3 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -3,12 +3,6 @@
 
 #include "Python.h"
 
-#ifdef macintosh
-extern char *PyMac_StrError(int);
-#undef strerror
-#define strerror PyMac_StrError
-#endif /* macintosh */
-
 #ifndef __STDC__
 #ifndef MS_WINDOWS
 extern char *strerror(int);
diff --git a/Python/import.c b/Python/import.c
index 50b28ef..77a5605 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -11,9 +11,6 @@
 #include "eval.h"
 #include "osdefs.h"
 #include "importdl.h"
-#ifdef macintosh
-#include "macglue.h"
-#endif
 
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
@@ -835,9 +832,6 @@
 	fclose(fp);
 	if (Py_VerboseFlag)
 		PySys_WriteStderr("# wrote %s\n", cpathname);
-#ifdef macintosh
-	PyMac_setfiletype(cpathname, 'Pyth', 'PYC ');
-#endif
 }
 
 
@@ -1123,13 +1117,6 @@
 		strcat(buf, ".");
 		strcat(buf, name);
 		strcpy(name, buf);
-#ifdef macintosh
-		/* Freezing on the mac works different, and the modules are
-		** actually on sys.path. So we don't take the quick exit but
-		** continue with the normal flow.
-		*/
-		path = NULL;
-#else
 		if (find_frozen(name) != NULL) {
 			strcpy(buf, name);
 			return &fd_frozen;
@@ -1137,7 +1124,6 @@
 		PyErr_Format(PyExc_ImportError,
 			     "No frozen submodule named %.200s", name);
 		return NULL;
-#endif
 	}
 	if (path == NULL) {
 		if (is_builtin(name)) {
@@ -1233,33 +1219,6 @@
 			/* no hook was successful, use builtin import */
 		}
 
-#ifdef macintosh
-		/*
-		** Speedup: each sys.path item is interned, and
-		** FindResourceModule remembers which items refer to
-		** folders (so we don't have to bother trying to look
-		** into them for resources). We only do this for string
-		** items.
-		*/
-		if (PyString_Check(PyList_GET_ITEM(path, i))) {
-			PyString_InternInPlace(&PyList_GET_ITEM(path, i));
-			v = PyList_GET_ITEM(path, i);
-			if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) {
-				static struct filedescr resfiledescr =
-					{"", "", PY_RESOURCE};
-
-				Py_XDECREF(copy);
-				return &resfiledescr;
-			}
-			if (PyMac_FindCodeResourceModule((PyStringObject *)v, name, buf)) {
-				static struct filedescr resfiledescr =
-					{"", "", PY_CODERESOURCE};
-
-				Py_XDECREF(copy);
-				return &resfiledescr;
-			}
-		}
-#endif
 		if (len > 0 && buf[len-1] != SEP
 #ifdef ALTSEP
 		    && buf[len-1] != ALTSEP
@@ -1290,10 +1249,6 @@
 		}
 #endif
 #endif
-#ifdef macintosh
-		fdp = PyMac_FindModuleExtension(buf, &len, name);
-		if (fdp) {
-#else
 #if defined(PYOS_OS2)
 		/* take a snapshot of the module spec for restoration
 		 * after the 8 character DLL hackery
@@ -1331,7 +1286,6 @@
 			strcpy(buf+len, fdp->suffix);
 			if (Py_VerboseFlag > 1)
 				PySys_WriteStderr("# trying %s\n", buf);
-#endif /* !macintosh */
 			filemode = fdp->mode;
 			if (filemode[0] == 'U') 
 				filemode = "r" PY_STDIOTEXTMODE;
@@ -1408,9 +1362,6 @@
 #elif defined(DJGPP)
 #include <dir.h>
 
-#elif defined(macintosh)
-#include <TextUtils.h>
-
 #elif defined(__MACH__) && defined(__APPLE__) && defined(HAVE_DIRENT_H)
 #include <sys/types.h>
 #include <dirent.h>
@@ -1475,24 +1426,6 @@
 	}
 	return strncmp(ffblk.ff_name, name, namelen) == 0;
 
-/* macintosh */
-#elif defined(macintosh)
-	FSSpec fss;
-	OSErr err;
-
-	if (Py_GETENV("PYTHONCASEOK") != NULL)
-		return 1;
-
-	err = FSMakeFSSpec(0, 0, Pstring(buf), &fss);
-	if (err) {
-		PyErr_Format(PyExc_NameError,
-		     "Can't find file for module %.100s\n(filename %.300s)",
-		     name, buf);
-		return 0;
-	}
-	return fss.name[0] >= namelen &&
-	       strncmp(name, (char *)fss.name+1, namelen) == 0;
-
 /* new-fangled macintosh (macosx) */
 #elif defined(__MACH__) && defined(__APPLE__) && defined(HAVE_DIRENT_H)
 	DIR *dirp;
@@ -1709,15 +1642,6 @@
 		break;
 #endif
 
-#ifdef macintosh
-	case PY_RESOURCE:
-		m = PyMac_LoadResourceModule(name, buf);
-		break;
-	case PY_CODERESOURCE:
-		m = PyMac_LoadCodeResourceModule(name, buf);
-		break;
-#endif
-
 	case PKG_DIRECTORY:
 		m = load_package(name, buf);
 		break;
@@ -2678,21 +2602,6 @@
 	return m;
 }
 
-#ifdef macintosh
-static PyObject *
-imp_load_resource(PyObject *self, PyObject *args)
-{
-	char *name;
-	char *pathname;
-	PyObject *m;
-
-	if (!PyArg_ParseTuple(args, "ss:load_resource", &name, &pathname))
-		return NULL;
-	m = PyMac_LoadResourceModule(name, pathname);
-	return m;
-}
-#endif /* macintosh */
-
 static PyObject *
 imp_load_module(PyObject *self, PyObject *args)
 {
@@ -2822,9 +2731,6 @@
 	{"load_dynamic",	imp_load_dynamic,	METH_VARARGS},
 #endif
 	{"load_package",	imp_load_package,	METH_VARARGS},
-#ifdef macintosh
-	{"load_resource",	imp_load_resource,	METH_VARARGS},
-#endif
 	{"load_source",		imp_load_source,	METH_VARARGS},
 	{NULL,			NULL}		/* sentinel */
 };
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index c09a3ff..ed54ab3 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -27,9 +27,6 @@
 #include "windows.h"
 #endif
 
-#ifdef macintosh
-#include "macglue.h"
-#endif
 extern char *Py_GetPath(void);
 
 extern grammar _PyParser_Grammar; /* From graminit.c */
@@ -755,13 +752,6 @@
 	if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
 		return 1;
 
-#ifdef macintosh
-	/* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
-	if (PyMac_getfiletype((char *)filename) == 'PYC '
-	    || PyMac_getfiletype((char *)filename) == 'APPL')
-		return 1;
-#endif /* macintosh */
-
 	/* Only look into the file if we are allowed to close it, since
 	   it then should also be seekable. */
 	if (closeit) {
@@ -1542,11 +1532,7 @@
 {
 	Py_Finalize();
 
-#ifdef macintosh
-	PyMac_Exit(sts);
-#else
 	exit(sts);
-#endif
 }
 
 static void
diff --git a/Python/strerror.c b/Python/strerror.c
index aeb7dd5..55f8342 100644
--- a/Python/strerror.c
+++ b/Python/strerror.c
@@ -17,8 +17,3 @@
 	PyOS_snprintf(buf, sizeof(buf), "Unknown errno %d", err);
 	return buf;
 }
-
-#ifdef macintosh
-int sys_nerr = 0;
-char *sys_errlist[1] = 0;
-#endif
diff --git a/Python/structmember.c b/Python/structmember.c
index 34310b8..bbaaca8 100644
--- a/Python/structmember.c
+++ b/Python/structmember.c
@@ -103,23 +103,6 @@
 	case T_STRING_INPLACE:
 		v = PyString_FromString((char*)addr);
 		break;
-#ifdef macintosh
-	case T_PSTRING:
-		if (*(char**)addr == NULL) {
-			Py_INCREF(Py_None);
-			v = Py_None;
-		}
-		else
-			v = PyString_FromStringAndSize(
-				(*(char**)addr)+1,
-				**(unsigned char**)addr);
-		break;
-	case T_PSTRING_INPLACE:
-		v = PyString_FromStringAndSize(
-			((char*)addr)+1,
-			*(unsigned char*)addr);
-		break;
-#endif /* macintosh */
 	case T_CHAR:
 		v = PyString_FromStringAndSize((char*)addr, 1);
 		break;
@@ -168,11 +151,7 @@
 {
 	PyObject *oldv;
 
-	if ((l->flags & READONLY) || l->type == T_STRING
-#ifdef macintosh
-	    || l->type == T_PSTRING
-#endif
-		)
+	if ((l->flags & READONLY) || l->type == T_STRING)
 	{
 		PyErr_SetString(PyExc_TypeError, "readonly attribute");
 		return -1;
