Added ColorPicker and Printing modules, donated by Just. In config.c
they're dependent on the WITH_TOOLBOX define.
diff --git a/Mac/Modules/ColorPickermodule.c b/Mac/Modules/ColorPickermodule.c
new file mode 100644
index 0000000..5101d25
--- /dev/null
+++ b/Mac/Modules/ColorPickermodule.c
@@ -0,0 +1,92 @@
+/******************************************************************
+Copyright 1998 by Just van Rossum, Den Haag, 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 name of Just van Rossum not be 
+used in advertising or publicity pertaining to distribution of the 
+software without specific, written prior permission.
+
+JUST VAN ROSSUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 
+EVENT SHALL JUST VAN ROSSUM 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.
+
+******************************************************************/
+
+#include <ColorPicker.h>
+#include "Python.h"
+
+
+/* ----------------------------------------------------- */
+
+extern QdRGB_Convert(PyObject *v, RGBColorPtr p_itself);
+extern PyObject *QdRGB_New(RGBColorPtr itself);
+
+static char cp_GetColor__doc__[] =
+"GetColor(prompt, (r, g, b)) -> (r, g, b), ok"
+;
+
+static PyObject *
+cp_GetColor(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	RGBColor inColor, outColor;
+	Boolean ok;
+	Point where = {0, 0};
+	char * prompt;
+	Str255 pprompt;
+	
+	if (!PyArg_ParseTuple(args, "sO&", &prompt, QdRGB_Convert, &inColor))
+		return NULL;
+	
+	BlockMove(prompt, pprompt + 1, strlen(prompt));
+	pprompt[0] = strlen(prompt);
+	
+	ok = GetColor(where, pprompt, &inColor, &outColor);
+	
+	return Py_BuildValue("O&h", QdRGB_New, &outColor, ok);
+}
+
+/* List of methods defined in the module */
+
+static struct PyMethodDef cp_methods[] = {
+	{"GetColor",	(PyCFunction)cp_GetColor,	METH_VARARGS,	cp_GetColor__doc__},
+	{NULL,	 		(PyCFunction)NULL, 			0, 				NULL}		/* sentinel */
+};
+
+
+/* Initialization function for the module (*must* be called initColorPicker) */
+
+static char cp_module_documentation[] = 
+""
+;
+
+void initColorPicker();
+
+void initColorPicker()
+{
+	PyObject *m;
+
+	/* Create the module and add the functions */
+	m = Py_InitModule4("ColorPicker", cp_methods,
+		cp_module_documentation,
+		(PyObject*)NULL,PYTHON_API_VERSION);
+
+	/* Add symbolic constants to the module here */
+	
+	/* XXXX Add constants here */
+	
+	/* Check for errors */
+	if (PyErr_Occurred())
+		Py_FatalError("can't initialize module ColorPicker");
+}
+
diff --git a/Mac/Modules/Printingmodule.c b/Mac/Modules/Printingmodule.c
new file mode 100644
index 0000000..e4cac9b
--- /dev/null
+++ b/Mac/Modules/Printingmodule.c
@@ -0,0 +1,474 @@
+/******************************************************************
+Copyright 1998 by Just van Rossum, Den Haag, 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 name of Just van Rossum not be 
+used in advertising or publicity pertaining to distribution of the 
+software without specific, written prior permission.
+
+JUST VAN ROSSUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 
+EVENT SHALL JUST VAN ROSSUM 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.
+
+******************************************************************/
+
+#include "Python.h"
+#include "macglue.h"
+#include <Printing.h>
+
+extern int ResObj_Convert(PyObject *, Handle *);
+extern PyObject *DlgObj_New(DialogPtr);
+extern PyObject *GrafObj_New(GrafPtr);
+extern int GrafObj_Convert(PyObject *, GrafPtr *);
+extern PyObject *ResObj_New(Handle);
+
+
+static PyObject *ErrorObject;
+
+/* ----------------------------------------------------- */
+
+static int
+TPRect_Convert(PyObject *v, TPRect *r)
+{
+	if (v == Py_None) {
+		*r = NULL;
+		return 1;
+	}
+	return PyArg_Parse(v, "(hhhh)", &(*r)->left, &(*r)->top, &(*r)->right, &(*r)->bottom);
+}
+
+
+static char Pr_NewTPrintRecord__doc__[] =
+"creates a new TPrint handle"
+;
+
+static PyObject *
+Pr_NewTPrintRecord(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	Handle hPrint;
+
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	hPrint = NewHandleClear((long) sizeof(TPrint));
+	if ( hPrint == NULL ) {
+		PyErr_NoMemory();
+		return NULL;
+	}
+	return (PyObject *)ResObj_New(hPrint);
+}
+
+static char Pr_PrPurge__doc__[] =
+"PrPurge() -> None"
+;
+
+static PyObject *
+Pr_PrPurge(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	PrPurge();
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrNoPurge__doc__[] =
+"PrNoPurge() -> None"
+;
+
+static PyObject *
+Pr_PrNoPurge(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	PrNoPurge();
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrOpen__doc__[] =
+"PrOpen() -> None"
+;
+
+static PyObject *
+Pr_PrOpen(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	PrOpen();
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrClose__doc__[] =
+"PrClose() -> None"
+;
+
+static PyObject *
+Pr_PrClose(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	PrClose();
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrintDefault__doc__[] =
+"PrintDefault(THPrint hPrint) -> None"
+;
+
+static PyObject *
+Pr_PrintDefault(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	THPrint hPrint;
+
+	if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
+		return NULL;
+	PrintDefault(hPrint);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrValidate__doc__[] =
+"PrValidate(THPrint hPrint) -> None"
+;
+
+static PyObject *
+Pr_PrValidate(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	THPrint hPrint;
+
+	if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
+		return NULL;
+	PrValidate(hPrint);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrStlDialog__doc__[] =
+"PrStlDialog(THPrint hPrint) -> Boolean"
+;
+
+static PyObject *
+Pr_PrStlDialog(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	THPrint hPrint;
+	Boolean rv;
+	
+	if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
+		return NULL;
+	rv = PrStlDialog(hPrint);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	return Py_BuildValue("h", rv);
+}
+
+static char Pr_PrJobDialog__doc__[] =
+"PrJobDialog(THPrint hPrint) -> Boolean"
+;
+
+static PyObject *
+Pr_PrJobDialog(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	THPrint hPrint;
+	Boolean rv;
+
+	if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
+		return NULL;
+	rv = PrJobDialog(hPrint);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	return Py_BuildValue("h", rv);
+}
+
+static char Pr_PrJobMerge__doc__[] =
+"PrJobMerge(THPrint hPrintSrc, THPrint hPrintDst) -> none"
+;
+
+static PyObject *
+Pr_PrJobMerge(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	THPrint hPrintSrc, hPrintDst;
+
+	if (!PyArg_ParseTuple(args, "O&O&", ResObj_Convert, &hPrintSrc, ResObj_Convert, &hPrintDst))
+		return NULL;
+	PrJobMerge(hPrintSrc, hPrintDst);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrOpenDoc__doc__[] =
+"PrOpenDoc(THPrint hPrint) -> TPPrPort aTPPort"
+;
+
+static PyObject *
+Pr_PrOpenDoc(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	THPrint hPrint;
+	TPPrPort aTPPort;
+
+	if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
+		return NULL;
+	aTPPort = PrOpenDoc(hPrint, NULL, NULL);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	return Py_BuildValue("O&", GrafObj_New, aTPPort);
+}
+
+static char Pr_PrCloseDoc__doc__[] =
+"PrCloseDoc(TPPrPort pPrPort) -> None"
+;
+
+static PyObject *
+Pr_PrCloseDoc(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	TPPrPort pPrPort;
+	
+	if (!PyArg_ParseTuple(args, "O&", GrafObj_Convert, &pPrPort))
+		return NULL;
+	PrCloseDoc(pPrPort);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrOpenPage__doc__[] =
+"PrOpenPage(TPPrPort pPrPort, TPRect pPageFrame) -> None"
+;
+
+static PyObject *
+Pr_PrOpenPage(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	TPPrPort pPrPort;
+	Rect dummyrect = {0, 0, 0, 0};
+	TPRect pPageFrame = &dummyrect;
+	
+	if (!PyArg_ParseTuple(args, "O&O&", GrafObj_Convert, &pPrPort, TPRect_Convert, &pPageFrame))
+		return NULL;
+	PrOpenPage(pPrPort, pPageFrame);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrClosePage__doc__[] =
+"PrClosePage(TPPrPort pPrPort) -> None"
+;
+
+static PyObject *
+Pr_PrClosePage(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	TPPrPort pPrPort;
+
+	if (!PyArg_ParseTuple(args, "O&", GrafObj_Convert, &pPrPort))
+		return NULL;
+	PrClosePage(pPrPort);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrPicFile__doc__[] =
+"PrPicFile(THPrint hPrint) -> none"
+;
+
+static PyObject *
+Pr_PrPicFile(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	THPrint hPrint;
+	TPrStatus prStatus;
+	
+	if (!PyArg_ParseTuple(args, "O&", ResObj_Convert, &hPrint))
+		return NULL;
+	PrPicFile(hPrint, NULL, NULL, NULL, &prStatus);
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrGeneral__doc__[] =
+"not implemented"
+;
+
+static PyObject *
+Pr_PrGeneral(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	//PrGeneral();
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char Pr_PrDrvrVers__doc__[] =
+"PrDrvrVers() -> version"
+;
+
+static PyObject *
+Pr_PrDrvrVers(self, args)
+	PyObject *self;	/* Not used */
+	PyObject *args;
+{
+	short rv;
+	
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	rv = PrDrvrVers();
+	{
+		OSErr _err = PrError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	return Py_BuildValue("h", rv);
+}
+
+/* List of methods defined in the module */
+
+static struct PyMethodDef Pr_methods[] = {
+	{"NewTPrintRecord", (PyCFunction)Pr_NewTPrintRecord, METH_VARARGS, Pr_NewTPrintRecord__doc__},
+	{"PrPurge",		(PyCFunction)Pr_PrPurge,		METH_VARARGS,	Pr_PrPurge__doc__},
+	{"PrNoPurge",	(PyCFunction)Pr_PrNoPurge,		METH_VARARGS,	Pr_PrNoPurge__doc__},
+	{"PrOpen",		(PyCFunction)Pr_PrOpen,			METH_VARARGS,	Pr_PrOpen__doc__},
+	{"PrClose",		(PyCFunction)Pr_PrClose,		METH_VARARGS,	Pr_PrClose__doc__},
+	{"PrintDefault",(PyCFunction)Pr_PrintDefault,	METH_VARARGS,	Pr_PrintDefault__doc__},
+	{"PrValidate",	(PyCFunction)Pr_PrValidate,		METH_VARARGS,	Pr_PrValidate__doc__},
+	{"PrStlDialog",	(PyCFunction)Pr_PrStlDialog,	METH_VARARGS,	Pr_PrStlDialog__doc__},
+	{"PrJobDialog",	(PyCFunction)Pr_PrJobDialog,	METH_VARARGS,	Pr_PrJobDialog__doc__},
+	{"PrJobMerge",	(PyCFunction)Pr_PrJobMerge,		METH_VARARGS,	Pr_PrJobMerge__doc__},
+	{"PrOpenDoc",	(PyCFunction)Pr_PrOpenDoc,		METH_VARARGS,	Pr_PrOpenDoc__doc__},
+	{"PrCloseDoc",	(PyCFunction)Pr_PrCloseDoc,		METH_VARARGS,	Pr_PrCloseDoc__doc__},
+	{"PrOpenPage",	(PyCFunction)Pr_PrOpenPage,		METH_VARARGS,	Pr_PrOpenPage__doc__},
+	{"PrClosePage",	(PyCFunction)Pr_PrClosePage,	METH_VARARGS,	Pr_PrClosePage__doc__},
+	{"PrPicFile",	(PyCFunction)Pr_PrPicFile,		METH_VARARGS,	Pr_PrPicFile__doc__},
+	{"PrGeneral",	(PyCFunction)Pr_PrGeneral,		METH_VARARGS,	Pr_PrGeneral__doc__},
+	{"PrDrvrVers",	(PyCFunction)Pr_PrDrvrVers,		METH_VARARGS,	Pr_PrDrvrVers__doc__},
+	
+	{NULL,	(PyCFunction)NULL, 0, NULL}		/* sentinel */
+};
+
+
+/* Initialization function for the module (*must* be called initPrinting) */
+
+static char Printing_module_documentation[] = 
+""
+;
+
+void initPrinting();
+
+void
+initPrinting()
+{
+	PyObject *m, *d;
+
+	/* Create the module and add the functions */
+	m = Py_InitModule4("Printing", Pr_methods,
+		Printing_module_documentation,
+		(PyObject*)NULL,PYTHON_API_VERSION);
+
+	/* Add some symbolic constants to the module */
+	d = PyModule_GetDict(m);
+	ErrorObject = PyString_FromString("Printing.error");
+	PyDict_SetItemString(d, "error", ErrorObject);
+
+	/* XXXX Add constants here */
+	
+	/* Check for errors */
+	if (PyErr_Occurred())
+		Py_FatalError("can't initialize module Printing");
+}
+
diff --git a/Mac/Modules/config.c b/Mac/Modules/config.c
index d18148a..7beb909 100644
--- a/Mac/Modules/config.c
+++ b/Mac/Modules/config.c
@@ -111,6 +111,8 @@
 extern void initScrap();
 extern void initTE();
 extern void initWin();
+extern void initColorPicker();
+extern void initPrinting();
 #endif
 #ifdef USE_QT
 extern void initCm();
@@ -219,6 +221,8 @@
 	{"TE", initTE},
 	{"Win", initWin},
 	{"Res", initRes},
+	{"ColorPicker", initColorPicker},
+	{"Printing", initPrinting},
 #endif
 #ifdef USE_QT
 	{"Cm", initCm},