diff --git a/Mac/Lib/test/tmenu.py b/Mac/Lib/test/tmenu.py
index 1b156d7..bc972a8 100644
--- a/Mac/Lib/test/tmenu.py
+++ b/Mac/Lib/test/tmenu.py
@@ -2,12 +2,19 @@
 
 import os
 from Menu import *
-
-# Since we can't (yet) list the mounted volumes, here's a list of some:
-my_volumes = ['C:', 'D:', 'E:', 'F:']
+import macfs
+import sys
 
 def main():
 	global oldbar
+	my_volumes = []
+	while 1:
+		fss, ok = macfs.GetDirectory()
+		if not ok:
+			break
+		my_volumes.append(fss.as_pathname())
+	if not my_volumes:
+		return
 	oldbar = GetMenuBar()
 	ClearMenuBar()
 	makevolmenus(my_volumes)
@@ -40,10 +47,10 @@
 	for file in files:
 		item = item+1
 		menu.AppendMenu('x')		# add a dummy string
-		menu.SetItem(item, file)	# set the actual text
+		menu.SetMenuItemText(item, file)	# set the actual text
 		fullname = os.path.join(dir, file)
 		if os.path.isdir(fullname):
-			menu.SetItem(item, ':' + file + ':')	# append colons
+			menu.SetMenuItemText(item, ':' + file + ':')	# append colons
 			if maxdepth > 0:
 				id = nextid()
 				submenu = NewMenu(id, fullname)
@@ -58,3 +65,4 @@
 
 if __name__ == '__main__':
 	main()
+	sys.exit(1)   # To allow the user to interact...
diff --git a/Mac/Lib/toolbox/Events.py b/Mac/Lib/toolbox/Events.py
index 943c9e5..3d4ff94 100644
--- a/Mac/Lib/toolbox/Events.py
+++ b/Mac/Lib/toolbox/Events.py
@@ -1,4 +1,4 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Events.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Events.h'
 
 nullEvent = 0
 mouseDown = 1
@@ -10,41 +10,41 @@
 diskEvt = 7
 activateEvt = 8
 osEvt = 15
-mDownMask = 2
-mUpMask = 4
-keyDownMask = 8
-keyUpMask = 16
-autoKeyMask = 32
-updateMask = 64
-diskMask = 128
-activMask = 256
-highLevelEventMask = 1024
-osMask = -32768
-everyEvent = -1
+mDownMask = 0x0002
+mUpMask = 0x0004
+keyDownMask = 0x0008
+keyUpMask = 0x0010
+autoKeyMask = 0x0020
+updateMask = 0x0040
+diskMask = 0x0080
+activMask = 0x0100
+highLevelEventMask = 0x0400
+osMask = 0x8000
+everyEvent = 0xFFFF
 charCodeMask = 0x000000FF
 keyCodeMask = 0x0000FF00
 adbAddrMask = 0x00FF0000
-osEvtMessageMask = 0xFF000000
-mouseMovedMessage = 0xFA
-suspendResumeMessage = 0x01
+osEvtMessageMask = 0xFF000000L
+mouseMovedMessage = 0x00FA
+suspendResumeMessage = 0x0001
 resumeFlag = 1
 convertClipboardFlag = 2
-activeFlag = 1
-btnState = 128
-cmdKey = 256
-shiftKey = 512
-alphaLock = 1024
-optionKey = 2048
-controlKey = 4096
+activeFlag = 0x0001
+btnState = 0x0080
+cmdKey = 0x0100
+shiftKey = 0x0200
+alphaLock = 0x0400
+optionKey = 0x0800
+controlKey = 0x1000
 networkEvt = 10
 driverEvt = 11
 app1Evt = 12
 app2Evt = 13
 app3Evt = 14
 app4Evt = 15
-networkMask = 1024
-driverMask = 2048
-app1Mask = 4096
-app2Mask = 8192
-app3Mask = 16384
-app4Mask = -32768
+networkMask = 0x0400
+driverMask = 0x0800
+app1Mask = 0x1000
+app2Mask = 0x2000
+app3Mask = 0x4000
+app4Mask = 0x8000
diff --git a/Mac/Lib/toolbox/Menus.py b/Mac/Lib/toolbox/Menus.py
index 59dc89a..3729810 100644
--- a/Mac/Lib/toolbox/Menus.py
+++ b/Mac/Lib/toolbox/Menus.py
@@ -1,5 +1,6 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Menus.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Menus.h'
 
+noMark = 0
 mDrawMsg = 0
 mChooseMsg = 1
 mSizeMsg = 2
@@ -11,4 +12,3 @@
 mPopUpMsg = 3
 mctAllItems = -98
 mctLastIDIndic = -99
-
diff --git a/Mac/Lib/toolbox/QuickDraw.py b/Mac/Lib/toolbox/QuickDraw.py
index b09628f..e0a8ff1 100644
--- a/Mac/Lib/toolbox/QuickDraw.py
+++ b/Mac/Lib/toolbox/QuickDraw.py
@@ -1,4 +1,4 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:QuickDraw.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:QuickDraw.h'
 
 invalColReq = -1
 srcCopy = 0
@@ -47,18 +47,12 @@
 yellowColor = 69
 picLParen = 0
 picRParen = 1
-normal = 0
-bold = 1
-italic = 2
-underline = 4
-outline = 8
-shadow = 0x10
-condense = 0x20
-extend = 0x40
 clutType = 0
 fixedType = 1
 directType = 2
 gdDevType = 0
+roundedDevice = 5
+hasAuxMenuBar = 6
 burstDevice = 7
 ext32Device = 8
 ramInit = 10
@@ -72,6 +66,28 @@
 defQDColors = 127
 RGBDirect = 16
 baseAddr32 = 4
-rgnOverflowErr = -147
-insufficientStackErr = -149
+singleDevicesBit = 0
+dontMatchSeedsBit = 1
+allDevicesBit = 2
+singleDevices = 1 << singleDevicesBit
+dontMatchSeeds = 1 << dontMatchSeedsBit
 allDevices = 1 << allDevicesBit
+kNoConstraint = 0
+kVerticalConstraint = 1
+kHorizontalConstraint = 2
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:QuickDrawText.h'
+
+leftCaret = 0
+rightCaret = -1
+hilite = 1
+smLeftCaret = 0
+smRightCaret = -1
+smHilite = 1
+onlyStyleRun = 0
+leftStyleRun = 1
+rightStyleRun = 2
+middleStyleRun = 3
+smOnlyStyleRun = 0
+smLeftStyleRun = 1
+smRightStyleRun = 2
+smMiddleStyleRun = 3
diff --git a/Mac/Lib/toolbox/Resources.py b/Mac/Lib/toolbox/Resources.py
index e2ed97a..7d51d6d 100644
--- a/Mac/Lib/toolbox/Resources.py
+++ b/Mac/Lib/toolbox/Resources.py
@@ -1,4 +1,4 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Resources.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Resources.h'
 
 resSysHeap = 64
 resPurgeable = 32
@@ -9,5 +9,5 @@
 mapReadOnly = 128
 mapCompact = 64
 mapChanged = 32
-mapTrue = 0xFFFF
-mapFalse = 0xFF00
+kResFileNotOpened = -1
+kSystemResFile = 0
diff --git a/Mac/Lib/toolbox/Sound.py b/Mac/Lib/toolbox/Sound.py
index a65c652..515d024 100644
--- a/Mac/Lib/toolbox/Sound.py
+++ b/Mac/Lib/toolbox/Sound.py
@@ -1,15 +1,20 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Sound.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Sound.h'
 
-swMode = -1
-ftMode = 1
-ffMode = 0
-rate22khz = 0x56EE8BA3
-rate11khz = 0x2B7745D1
+soundListRsrc = 'snd '
+rate44khz = 0xAC440000L
+rate22050hz = 0x56220000L
+rate22khz = 0x56EE8BA3L
+rate11khz = 0x2B7745D1L
+rate11025hz = 0x2B110000
 squareWaveSynth = 1
 waveTableSynth = 3
 sampledSynth = 5
 MACE3snthID = 11
 MACE6snthID = 13
+kMiddleC = 60
+kSimpleBeepID = 1
+kFullVolume = 0x0100
+kNoVolume = 0
 nullCmd = 0
 initCmd = 1
 freeCmd = 2
@@ -21,23 +26,18 @@
 resumeCmd = 12
 callBackCmd = 13
 syncCmd = 14
-emptyCmd = 15
-tickleCmd = 20
-requestNextCmd = 21
-howOftenCmd = 22
-wakeUpCmd = 23
 availableCmd = 24
 versionCmd = 25
 totalLoadCmd = 26
 loadCmd = 27
-scaleCmd = 30
-tempoCmd = 31
 freqDurationCmd = 40
 restCmd = 41
 freqCmd = 42
 ampCmd = 43
 timbreCmd = 44
 getAmpCmd = 45
+volumeCmd = 46
+getVolumeCmd = 47
 waveTableCmd = 60
 phaseCmd = 61
 soundCmd = 80
@@ -46,6 +46,8 @@
 continueCmd = 83
 doubleBufferCmd = 84
 getRateCmd = 85
+rateMultiplierCmd = 86
+getRateMultiplierCmd = 87
 sizeCmd = 90
 convertCmd = 91
 stdQLength = 128
@@ -55,10 +57,6 @@
 waveInitChannel1 = 0x05
 waveInitChannel2 = 0x06
 waveInitChannel3 = 0x07
-initPanMask = 0x0003
-initSRateMask = 0x0030
-initStereoMask = 0x00C0
-initCompMask = 0xFF00
 initChanLeft = 0x0002
 initChanRight = 0x0003
 initNoInterp = 0x0004
@@ -67,18 +65,21 @@
 initStereo = 0x00C0
 initMACE3 = 0x0300
 initMACE6 = 0x0400
-initChan0 = 0x0004
-initChan1 = 0x0005
-initChan2 = 0x0006
-initChan3 = 0x0007
-stdSH = 0x00
-extSH = 0xFF
-cmpSH = 0xFE
+initPanMask = 0x0003
+initSRateMask = 0x0030
+initStereoMask = 0x00C0
+initCompMask = 0xFF00
+kUseOptionalOutputDevice = -1
 notCompressed = 0
+fixedCompression = -1
+variableCompression = -2
 twoToOne = 1
 eightToThree = 2
 threeToOne = 3
 sixToOne = 4
+stdSH = 0x00
+extSH = 0xFF
+cmpSH = 0xFE
 outsideCmpSH = 0
 insideCmpSH = 1
 aceSuccess = 0
diff --git a/Mac/Lib/toolbox/Windows.py b/Mac/Lib/toolbox/Windows.py
index 037000f..9a615cd 100644
--- a/Mac/Lib/toolbox/Windows.py
+++ b/Mac/Lib/toolbox/Windows.py
@@ -1,4 +1,4 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Windows.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Windows.h'
 
 documentProc = 0
 dBoxProc = 1
@@ -9,6 +9,14 @@
 zoomDocProc = 8
 zoomNoGrow = 12
 rDocProc = 16
+floatProc = 1985
+floatGrowProc = 1987
+floatZoomProc = 1989
+floatZoomGrowProc = 1991
+floatSideProc = 1993
+floatSideGrowProc = 1995
+floatSideZoomProc = 1997
+floatSideZoomGrowProc = 1999
 dialogKind = 2
 userKind = 8
 inDesk = 0
@@ -27,6 +35,12 @@
 wDispose = 4
 wGrow = 5
 wDrawGIcon = 6
+deskPatID = 16
+wContentColor = 0
+wFrameColor = 1
+wTextColor = 2
+wHiliteColor = 3
+wTitleBarColor = 4
 wNoHit = 0
 wInContent = 1
 wInDrag = 2
@@ -34,9 +48,3 @@
 wInGoAway = 4
 wInZoomIn = 5
 wInZoomOut = 6
-deskPatID = 16
-wContentColor = 0
-wFrameColor = 1
-wTextColor = 2
-wHiliteColor = 3
-wTitleBarColor = 4
diff --git a/Mac/Modules/evt/Evtmodule.c b/Mac/Modules/evt/Evtmodule.c
index 42d55b4..7169b59 100644
--- a/Mac/Modules/evt/Evtmodule.c
+++ b/Mac/Modules/evt/Evtmodule.c
@@ -39,6 +39,49 @@
 
 static PyObject *Evt_Error;
 
+static PyObject *Evt_GetDblTime(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	long _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = GetDblTime();
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Evt_GetCaretTime(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	long _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = GetCaretTime();
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Evt_SetEventMask(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short value;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &value))
+		return NULL;
+	SetEventMask(value);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
 static PyObject *Evt_GetNextEvent(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -171,6 +214,96 @@
 	return _res;
 }
 
+static PyObject *Evt_TickCount(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	unsigned long _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = TickCount();
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Evt_PostEvent(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	short eventNum;
+	long eventMsg;
+	if (!PyArg_ParseTuple(_args, "hl",
+	                      &eventNum,
+	                      &eventMsg))
+		return NULL;
+	_err = PostEvent(eventNum,
+	                 eventMsg);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Evt_OSEventAvail(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Boolean _rv;
+	short mask;
+	EventRecord theEvent;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &mask))
+		return NULL;
+	_rv = OSEventAvail(mask,
+	                   &theEvent);
+	_res = Py_BuildValue("bO&",
+	                     _rv,
+	                     PyMac_BuildEventRecord, &theEvent);
+	return _res;
+}
+
+static PyObject *Evt_GetOSEvent(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Boolean _rv;
+	short mask;
+	EventRecord theEvent;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &mask))
+		return NULL;
+	_rv = GetOSEvent(mask,
+	                 &theEvent);
+	_res = Py_BuildValue("bO&",
+	                     _rv,
+	                     PyMac_BuildEventRecord, &theEvent);
+	return _res;
+}
+
+static PyObject *Evt_FlushEvents(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short whichMask;
+	short stopMask;
+	if (!PyArg_ParseTuple(_args, "hh",
+	                      &whichMask,
+	                      &stopMask))
+		return NULL;
+	FlushEvents(whichMask,
+	            stopMask);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
 static PyObject *Evt_SystemClick(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -189,7 +322,42 @@
 	return _res;
 }
 
+static PyObject *Evt_SystemTask(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	SystemTask();
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Evt_SystemEvent(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Boolean _rv;
+	EventRecord theEvent;
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      PyMac_GetEventRecord, &theEvent))
+		return NULL;
+	_rv = SystemEvent(&theEvent);
+	_res = Py_BuildValue("b",
+	                     _rv);
+	return _res;
+}
+
 static PyMethodDef Evt_methods[] = {
+	{"GetDblTime", (PyCFunction)Evt_GetDblTime, 1,
+	 "() -> (long _rv)"},
+	{"GetCaretTime", (PyCFunction)Evt_GetCaretTime, 1,
+	 "() -> (long _rv)"},
+	{"SetEventMask", (PyCFunction)Evt_SetEventMask, 1,
+	 "(short value) -> None"},
 	{"GetNextEvent", (PyCFunction)Evt_GetNextEvent, 1,
 	 "(short eventMask) -> (Boolean _rv, EventRecord theEvent)"},
 	{"WaitNextEvent", (PyCFunction)Evt_WaitNextEvent, 1,
@@ -206,8 +374,22 @@
 	 "() -> (Boolean _rv)"},
 	{"GetKeys", (PyCFunction)Evt_GetKeys, 1,
 	 "() -> (KeyMap theKeys)"},
+	{"TickCount", (PyCFunction)Evt_TickCount, 1,
+	 "() -> (unsigned long _rv)"},
+	{"PostEvent", (PyCFunction)Evt_PostEvent, 1,
+	 "(short eventNum, long eventMsg) -> None"},
+	{"OSEventAvail", (PyCFunction)Evt_OSEventAvail, 1,
+	 "(short mask) -> (Boolean _rv, EventRecord theEvent)"},
+	{"GetOSEvent", (PyCFunction)Evt_GetOSEvent, 1,
+	 "(short mask) -> (Boolean _rv, EventRecord theEvent)"},
+	{"FlushEvents", (PyCFunction)Evt_FlushEvents, 1,
+	 "(short whichMask, short stopMask) -> None"},
 	{"SystemClick", (PyCFunction)Evt_SystemClick, 1,
 	 "(EventRecord theEvent, WindowPtr theWindow) -> None"},
+	{"SystemTask", (PyCFunction)Evt_SystemTask, 1,
+	 "() -> None"},
+	{"SystemEvent", (PyCFunction)Evt_SystemEvent, 1,
+	 "(EventRecord theEvent) -> (Boolean _rv)"},
 	{NULL, NULL, 0}
 };
 
@@ -232,4 +414,3 @@
 
 /* ========================= End module Evt ========================= */
 
-
diff --git a/Mac/Modules/evt/evtgen.py b/Mac/Modules/evt/evtgen.py
index fd61c4d..deac64e 100644
--- a/Mac/Modules/evt/evtgen.py
+++ b/Mac/Modules/evt/evtgen.py
@@ -1,4 +1,17 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Events.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Events.h'
+
+f = Function(long, 'GetDblTime',
+)
+functions.append(f)
+
+f = Function(long, 'GetCaretTime',
+)
+functions.append(f)
+
+f = Function(void, 'SetEventMask',
+    (short, 'value', InMode),
+)
+functions.append(f)
 
 f = Function(Boolean, 'GetNextEvent',
     (short, 'eventMask', InMode),
@@ -42,3 +55,46 @@
 )
 functions.append(f)
 
+f = Function(unsigned_long, 'TickCount',
+)
+functions.append(f)
+
+f = Function(OSErr, 'PostEvent',
+    (short, 'eventNum', InMode),
+    (long, 'eventMsg', InMode),
+)
+functions.append(f)
+
+f = Function(Boolean, 'OSEventAvail',
+    (short, 'mask', InMode),
+    (EventRecord, 'theEvent', OutMode),
+)
+functions.append(f)
+
+f = Function(Boolean, 'GetOSEvent',
+    (short, 'mask', InMode),
+    (EventRecord, 'theEvent', OutMode),
+)
+functions.append(f)
+
+f = Function(void, 'FlushEvents',
+    (short, 'whichMask', InMode),
+    (short, 'stopMask', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'SystemClick',
+    (EventRecord_ptr, 'theEvent', InMode),
+    (WindowPtr, 'theWindow', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'SystemTask',
+)
+functions.append(f)
+
+f = Function(Boolean, 'SystemEvent',
+    (EventRecord_ptr, 'theEvent', InMode),
+)
+functions.append(f)
+
diff --git a/Mac/Modules/evt/evtscan.py b/Mac/Modules/evt/evtscan.py
index 517db71..70a9df9 100644
--- a/Mac/Modules/evt/evtscan.py
+++ b/Mac/Modules/evt/evtscan.py
@@ -1,5 +1,7 @@
 # Scan an Apple header file, generating a Python file of generator calls.
 
+import addpack
+addpack.addpack(':tools:bgen:bgen')
 from scantools import Scanner
 
 LONG = "Events"
@@ -32,10 +34,12 @@
 
 	def makeblacklistnames(self):
 		return [
+			"KeyTranslate"
 			]
 
 	def makeblacklisttypes(self):
 		return [
+			"EvQElPtr", "QHdrPtr"
 			]
 
 	def makerepairinstructions(self):
@@ -53,7 +57,11 @@
 			# GetKeys
 			([('KeyMap', 'theKeys', 'InMode')],
 			 [('*', '*', 'OutMode')]),
+			 
+			# GetTicker
+			([('unsigned long', '*', '*')],
+			 [('unsigned_long', '*', '*')]),
 			]
-
+			
 if __name__ == "__main__":
 	main()
diff --git a/Mac/Modules/evt/evtsupport.py b/Mac/Modules/evt/evtsupport.py
index 6f59b8b..0a6950b 100644
--- a/Mac/Modules/evt/evtsupport.py
+++ b/Mac/Modules/evt/evtsupport.py
@@ -63,7 +63,6 @@
 functions = []
 ##methods = []
 execfile(INPUTFILE)
-execfile("evtedit.py")
 
 # add the populated lists to the generator groups
 # (in a different wordl the scan program would generate this)
diff --git a/Mac/Modules/menu/Menumodule.c b/Mac/Modules/menu/Menumodule.c
index 84289a3..bb1cb79 100644
--- a/Mac/Modules/menu/Menumodule.c
+++ b/Mac/Modules/menu/Menumodule.c
@@ -109,7 +109,7 @@
 	return _res;
 }
 
-static PyObject *MenuObj_AddResMenu(_self, _args)
+static PyObject *MenuObj_AppendResMenu(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
 {
@@ -118,8 +118,8 @@
 	if (!PyArg_ParseTuple(_args, "O&",
 	                      PyMac_GetOSType, &theType))
 		return NULL;
-	AddResMenu(_self->ob_itself,
-	           theType);
+	AppendResMenu(_self->ob_itself,
+	              theType);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -160,7 +160,7 @@
 	return _res;
 }
 
-static PyObject *MenuObj_InsMenuItem(_self, _args)
+static PyObject *MenuObj_InsertMenuItem(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
 {
@@ -171,15 +171,15 @@
 	                      PyMac_GetStr255, itemString,
 	                      &afterItem))
 		return NULL;
-	InsMenuItem(_self->ob_itself,
-	            itemString,
-	            afterItem);
+	InsertMenuItem(_self->ob_itself,
+	               itemString,
+	               afterItem);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *MenuObj_DelMenuItem(_self, _args)
+static PyObject *MenuObj_DeleteMenuItem(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
 {
@@ -188,14 +188,14 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &item))
 		return NULL;
-	DelMenuItem(_self->ob_itself,
-	            item);
+	DeleteMenuItem(_self->ob_itself,
+	               item);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *MenuObj_SetItem(_self, _args)
+static PyObject *MenuObj_SetMenuItemText(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
 {
@@ -206,15 +206,15 @@
 	                      &item,
 	                      PyMac_GetStr255, itemString))
 		return NULL;
-	SetItem(_self->ob_itself,
-	        item,
-	        itemString);
+	SetMenuItemText(_self->ob_itself,
+	                item,
+	                itemString);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *MenuObj_GetItem(_self, _args)
+static PyObject *MenuObj_GetMenuItemText(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
 {
@@ -224,9 +224,9 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &item))
 		return NULL;
-	GetItem(_self->ob_itself,
-	        item,
-	        itemString);
+	GetMenuItemText(_self->ob_itself,
+	                item,
+	                itemString);
 	_res = Py_BuildValue("O&",
 	                     PyMac_BuildStr255, itemString);
 	return _res;
@@ -382,7 +382,7 @@
 {
 	PyObject *_res = NULL;
 	short item;
-	Style chStyle;
+	unsigned char chStyle;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &item))
 		return NULL;
@@ -481,24 +481,65 @@
 	return _res;
 }
 
+static PyObject *MenuObj_InsertFontResMenu(_self, _args)
+	MenuObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short afterItem;
+	short scriptFilter;
+	if (!PyArg_ParseTuple(_args, "hh",
+	                      &afterItem,
+	                      &scriptFilter))
+		return NULL;
+	InsertFontResMenu(_self->ob_itself,
+	                  afterItem,
+	                  scriptFilter);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *MenuObj_InsertIntlResMenu(_self, _args)
+	MenuObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	ResType theType;
+	short afterItem;
+	short scriptFilter;
+	if (!PyArg_ParseTuple(_args, "O&hh",
+	                      PyMac_GetOSType, &theType,
+	                      &afterItem,
+	                      &scriptFilter))
+		return NULL;
+	InsertIntlResMenu(_self->ob_itself,
+	                  theType,
+	                  afterItem,
+	                  scriptFilter);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
 static PyMethodDef MenuObj_methods[] = {
 	{"DisposeMenu", (PyCFunction)MenuObj_DisposeMenu, 1,
 	 "() -> None"},
 	{"AppendMenu", (PyCFunction)MenuObj_AppendMenu, 1,
 	 "(Str255 data) -> None"},
-	{"AddResMenu", (PyCFunction)MenuObj_AddResMenu, 1,
+	{"AppendResMenu", (PyCFunction)MenuObj_AppendResMenu, 1,
 	 "(ResType theType) -> None"},
 	{"InsertResMenu", (PyCFunction)MenuObj_InsertResMenu, 1,
 	 "(ResType theType, short afterItem) -> None"},
 	{"InsertMenu", (PyCFunction)MenuObj_InsertMenu, 1,
 	 "(short beforeID) -> None"},
-	{"InsMenuItem", (PyCFunction)MenuObj_InsMenuItem, 1,
+	{"InsertMenuItem", (PyCFunction)MenuObj_InsertMenuItem, 1,
 	 "(Str255 itemString, short afterItem) -> None"},
-	{"DelMenuItem", (PyCFunction)MenuObj_DelMenuItem, 1,
+	{"DeleteMenuItem", (PyCFunction)MenuObj_DeleteMenuItem, 1,
 	 "(short item) -> None"},
-	{"SetItem", (PyCFunction)MenuObj_SetItem, 1,
+	{"SetMenuItemText", (PyCFunction)MenuObj_SetMenuItemText, 1,
 	 "(short item, Str255 itemString) -> None"},
-	{"GetItem", (PyCFunction)MenuObj_GetItem, 1,
+	{"GetMenuItemText", (PyCFunction)MenuObj_GetMenuItemText, 1,
 	 "(short item) -> (Str255 itemString)"},
 	{"DisableItem", (PyCFunction)MenuObj_DisableItem, 1,
 	 "(short item) -> None"},
@@ -517,7 +558,7 @@
 	{"SetItemStyle", (PyCFunction)MenuObj_SetItemStyle, 1,
 	 "(short item, short chStyle) -> None"},
 	{"GetItemStyle", (PyCFunction)MenuObj_GetItemStyle, 1,
-	 "(short item) -> (Style chStyle)"},
+	 "(short item) -> (unsigned char chStyle)"},
 	{"CalcMenuSize", (PyCFunction)MenuObj_CalcMenuSize, 1,
 	 "() -> None"},
 	{"CountMItems", (PyCFunction)MenuObj_CountMItems, 1,
@@ -528,6 +569,10 @@
 	 "(short item, short cmdChar) -> None"},
 	{"PopUpMenuSelect", (PyCFunction)MenuObj_PopUpMenuSelect, 1,
 	 "(short top, short left, short popUpItem) -> (long _rv)"},
+	{"InsertFontResMenu", (PyCFunction)MenuObj_InsertFontResMenu, 1,
+	 "(short afterItem, short scriptFilter) -> None"},
+	{"InsertIntlResMenu", (PyCFunction)MenuObj_InsertIntlResMenu, 1,
+	 "(ResType theType, short afterItem, short scriptFilter) -> None"},
 	{NULL, NULL, 0}
 };
 
@@ -558,6 +603,20 @@
 /* ---------------------- End object type Menu ---------------------- */
 
 
+static PyObject *Menu_GetMBarHeight(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = GetMBarHeight();
+	_res = Py_BuildValue("h",
+	                     _rv);
+	return _res;
+}
+
 static PyObject *Menu_InitMenus(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -736,7 +795,7 @@
 	return _res;
 }
 
-static PyObject *Menu_GetMHandle(_self, _args)
+static PyObject *Menu_GetMenuHandle(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
@@ -746,7 +805,7 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &menuID))
 		return NULL;
-	_rv = GetMHandle(menuID);
+	_rv = GetMenuHandle(menuID);
 	_res = Py_BuildValue("O&",
 	                     MenuObj_New, _rv);
 	return _res;
@@ -827,7 +886,7 @@
 	return _res;
 }
 
-static PyObject *Menu_DelMCEntries(_self, _args)
+static PyObject *Menu_DeleteMCEntries(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
@@ -838,8 +897,39 @@
 	                      &menuID,
 	                      &menuItem))
 		return NULL;
-	DelMCEntries(menuID,
-	             menuItem);
+	DeleteMCEntries(menuID,
+	                menuItem);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Menu_SystemEdit(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Boolean _rv;
+	short editCmd;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &editCmd))
+		return NULL;
+	_rv = SystemEdit(editCmd);
+	_res = Py_BuildValue("b",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Menu_SystemMenu(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	long menuResult;
+	if (!PyArg_ParseTuple(_args, "l",
+	                      &menuResult))
+		return NULL;
+	SystemMenu(menuResult);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -861,6 +951,8 @@
 }
 
 static PyMethodDef Menu_methods[] = {
+	{"GetMBarHeight", (PyCFunction)Menu_GetMBarHeight, 1,
+	 "() -> (short _rv)"},
 	{"InitMenus", (PyCFunction)Menu_InitMenus, 1,
 	 "() -> None"},
 	{"NewMenu", (PyCFunction)Menu_NewMenu, 1,
@@ -885,7 +977,7 @@
 	 "(short ch) -> (long _rv)"},
 	{"HiliteMenu", (PyCFunction)Menu_HiliteMenu, 1,
 	 "(short menuID) -> None"},
-	{"GetMHandle", (PyCFunction)Menu_GetMHandle, 1,
+	{"GetMenuHandle", (PyCFunction)Menu_GetMenuHandle, 1,
 	 "(short menuID) -> (MenuHandle _rv)"},
 	{"FlashMenuBar", (PyCFunction)Menu_FlashMenuBar, 1,
 	 "(short menuID) -> None"},
@@ -897,8 +989,12 @@
 	 "(short resID) -> None"},
 	{"MenuChoice", (PyCFunction)Menu_MenuChoice, 1,
 	 "() -> (long _rv)"},
-	{"DelMCEntries", (PyCFunction)Menu_DelMCEntries, 1,
+	{"DeleteMCEntries", (PyCFunction)Menu_DeleteMCEntries, 1,
 	 "(short menuID, short menuItem) -> None"},
+	{"SystemEdit", (PyCFunction)Menu_SystemEdit, 1,
+	 "(short editCmd) -> (Boolean _rv)"},
+	{"SystemMenu", (PyCFunction)Menu_SystemMenu, 1,
+	 "(long menuResult) -> None"},
 	{"OpenDeskAcc", (PyCFunction)Menu_OpenDeskAcc, 1,
 	 "(Str255 name) -> None"},
 	{NULL, NULL, 0}
diff --git a/Mac/Modules/menu/menugen.py b/Mac/Modules/menu/menugen.py
index 2be4504..c3f9636 100644
--- a/Mac/Modules/menu/menugen.py
+++ b/Mac/Modules/menu/menugen.py
@@ -1,46 +1,50 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Menus.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Menus.h'
+
+f = Function(short, 'GetMBarHeight',
+)
+functions.append(f)
 
 f = Function(void, 'InitMenus',
 )
 functions.append(f)
 
-f = Function(MenuHandle, 'NewMenu',
+f = Function(MenuRef, 'NewMenu',
     (short, 'menuID', InMode),
-    (Str255, 'menuTitle', InMode),
+    (ConstStr255Param, 'menuTitle', InMode),
 )
 functions.append(f)
 
-f = Function(MenuHandle, 'GetMenu',
+f = Function(MenuRef, 'GetMenu',
     (short, 'resourceID', InMode),
 )
 functions.append(f)
 
 f = Method(void, 'DisposeMenu',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'AppendMenu',
-    (MenuHandle, 'menu', InMode),
+    (MenuRef, 'menu', InMode),
     (ConstStr255Param, 'data', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'AddResMenu',
-    (MenuHandle, 'theMenu', InMode),
+f = Method(void, 'AppendResMenu',
+    (MenuRef, 'theMenu', InMode),
     (ResType, 'theType', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'InsertResMenu',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (ResType, 'theType', InMode),
     (short, 'afterItem', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'InsertMenu',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'beforeID', InMode),
 )
 methods.append(f)
@@ -76,15 +80,15 @@
 )
 functions.append(f)
 
-f = Method(void, 'InsMenuItem',
-    (MenuHandle, 'theMenu', InMode),
+f = Method(void, 'InsertMenuItem',
+    (MenuRef, 'theMenu', InMode),
     (ConstStr255Param, 'itemString', InMode),
     (short, 'afterItem', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'DelMenuItem',
-    (MenuHandle, 'theMenu', InMode),
+f = Method(void, 'DeleteMenuItem',
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
 )
 methods.append(f)
@@ -99,92 +103,92 @@
 )
 functions.append(f)
 
-f = Method(void, 'SetItem',
-    (MenuHandle, 'theMenu', InMode),
+f = Method(void, 'SetMenuItemText',
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (ConstStr255Param, 'itemString', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'GetItem',
-    (MenuHandle, 'theMenu', InMode),
+f = Method(void, 'GetMenuItemText',
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (Str255, 'itemString', OutMode),
 )
 methods.append(f)
 
 f = Method(void, 'DisableItem',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'EnableItem',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'CheckItem',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (Boolean, 'checked', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetItemMark',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (short, 'markChar', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'GetItemMark',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (short, 'markChar', OutMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetItemIcon',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (short, 'iconIndex', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'GetItemIcon',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (short, 'iconIndex', OutMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetItemStyle',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (short, 'chStyle', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'GetItemStyle',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
-    (Style, 'chStyle', OutMode),
+    (unsigned_char, 'chStyle', OutMode),
 )
 methods.append(f)
 
 f = Method(void, 'CalcMenuSize',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
 )
 methods.append(f)
 
 f = Method(short, 'CountMItems',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
 )
 methods.append(f)
 
-f = Function(MenuHandle, 'GetMHandle',
+f = Function(MenuRef, 'GetMenuHandle',
     (short, 'menuID', InMode),
 )
 functions.append(f)
@@ -210,21 +214,21 @@
 functions.append(f)
 
 f = Method(void, 'GetItemCmd',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (short, 'cmdChar', OutMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetItemCmd',
-    (MenuHandle, 'theMenu', InMode),
+    (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
     (short, 'cmdChar', InMode),
 )
 methods.append(f)
 
 f = Method(long, 'PopUpMenuSelect',
-    (MenuHandle, 'menu', InMode),
+    (MenuRef, 'menu', InMode),
     (short, 'top', InMode),
     (short, 'left', InMode),
     (short, 'popUpItem', InMode),
@@ -235,9 +239,34 @@
 )
 functions.append(f)
 
-f = Function(void, 'DelMCEntries',
+f = Function(void, 'DeleteMCEntries',
     (short, 'menuID', InMode),
     (short, 'menuItem', InMode),
 )
 functions.append(f)
 
+f = Method(void, 'InsertFontResMenu',
+    (MenuRef, 'theMenu', InMode),
+    (short, 'afterItem', InMode),
+    (short, 'scriptFilter', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'InsertIntlResMenu',
+    (MenuRef, 'theMenu', InMode),
+    (ResType, 'theType', InMode),
+    (short, 'afterItem', InMode),
+    (short, 'scriptFilter', InMode),
+)
+methods.append(f)
+
+f = Function(Boolean, 'SystemEdit',
+    (short, 'editCmd', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'SystemMenu',
+    (long, 'menuResult', InMode),
+)
+functions.append(f)
+
diff --git a/Mac/Modules/menu/menuscan.py b/Mac/Modules/menu/menuscan.py
index b120052..08a6a04 100644
--- a/Mac/Modules/menu/menuscan.py
+++ b/Mac/Modules/menu/menuscan.py
@@ -1,4 +1,6 @@
 # Scan <Menus.h>, generating menugen.py.
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
 
 from scantools import Scanner
 
@@ -20,7 +22,7 @@
 		listname = "functions"
 		if arglist:
 			t, n, m = arglist[0]
-			if t == "MenuHandle" and m == "InMode":
+			if t in ("MenuHandle", "MenuRef") and m == "InMode":
 				classname = "Method"
 				listname = "methods"
 		return classname, listname
diff --git a/Mac/Modules/menu/menusupport.py b/Mac/Modules/menu/menusupport.py
index 95e52f0..2c7c7c0 100644
--- a/Mac/Modules/menu/menusupport.py
+++ b/Mac/Modules/menu/menusupport.py
@@ -6,7 +6,7 @@
 import string
 
 import addpack
-addpack.addpack('D:python:Tools:bgen:bgen')
+addpack.addpack(':Tools:bgen:bgen')
 
 # Declarations that change for each manager
 MACHEADERFILE = 'Menus.h'		# The Apple header file
@@ -26,6 +26,9 @@
 # Create the type objects
 
 MenuHandle = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
+MenuRef = MenuHandle
+
+unsigned_char = Type('unsigned char', 'b')
 
 includestuff = includestuff + """
 #include <Devices.h> /* Defines OpenDeskAcc in universal headers */
diff --git a/Mac/Modules/qd/Qdmodule.c b/Mac/Modules/qd/Qdmodule.c
index 959df31..c1e5c8e 100644
--- a/Mac/Modules/qd/Qdmodule.c
+++ b/Mac/Modules/qd/Qdmodule.c
@@ -438,192 +438,6 @@
 	return _res;
 }
 
-static PyObject *Qd_TextFont(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short font;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &font))
-		return NULL;
-	TextFont(font);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Qd_TextFace(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short face;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &face))
-		return NULL;
-	TextFace(face);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Qd_TextMode(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short mode;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &mode))
-		return NULL;
-	TextMode(mode);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Qd_TextSize(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short size;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &size))
-		return NULL;
-	TextSize(size);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Qd_SpaceExtra(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	long extra;
-	if (!PyArg_ParseTuple(_args, "l",
-	                      &extra))
-		return NULL;
-	SpaceExtra(extra);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Qd_DrawChar(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short ch;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &ch))
-		return NULL;
-	DrawChar(ch);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Qd_DrawString(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	Str255 s;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      PyMac_GetStr255, s))
-		return NULL;
-	DrawString(s);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Qd_DrawText(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	char *textBuf__in__;
-	int textBuf__len__;
-	int textBuf__in_len__;
-	short firstByte;
-	short byteCount;
-	if (!PyArg_ParseTuple(_args, "s#hh",
-	                      &textBuf__in__, &textBuf__in_len__,
-	                      &firstByte,
-	                      &byteCount))
-		return NULL;
-	DrawText(textBuf__in__,
-	         firstByte,
-	         byteCount);
-	Py_INCREF(Py_None);
-	_res = Py_None;
- textBuf__error__: ;
-	return _res;
-}
-
-static PyObject *Qd_CharWidth(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short _rv;
-	short ch;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &ch))
-		return NULL;
-	_rv = CharWidth(ch);
-	_res = Py_BuildValue("h",
-	                     _rv);
-	return _res;
-}
-
-static PyObject *Qd_StringWidth(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short _rv;
-	Str255 s;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      PyMac_GetStr255, s))
-		return NULL;
-	_rv = StringWidth(s);
-	_res = Py_BuildValue("h",
-	                     _rv);
-	return _res;
-}
-
-static PyObject *Qd_TextWidth(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short _rv;
-	char *textBuf__in__;
-	int textBuf__len__;
-	int textBuf__in_len__;
-	short firstByte;
-	short byteCount;
-	if (!PyArg_ParseTuple(_args, "s#hh",
-	                      &textBuf__in__, &textBuf__in_len__,
-	                      &firstByte,
-	                      &byteCount))
-		return NULL;
-	_rv = TextWidth(textBuf__in__,
-	                firstByte,
-	                byteCount);
-	_res = Py_BuildValue("h",
-	                     _rv);
- textBuf__error__: ;
-	return _res;
-}
-
 static PyObject *Qd_ForeColor(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1989,6 +1803,24 @@
 	return _res;
 }
 
+static PyObject *Qd_SubPt(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Point src;
+	Point dst;
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      PyMac_GetPoint, &src,
+	                      PyMac_GetPoint, &dst))
+		return NULL;
+	SubPt(src,
+	      &dst);
+	_res = Py_BuildValue("O&",
+	                     PyMac_BuildPoint, dst);
+	return _res;
+}
+
 static PyObject *Qd_PtInRgn(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -2022,21 +1854,6 @@
 	return _res;
 }
 
-static PyObject *Qd_DisposPixMap(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	PixMapHandle pm;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      ResObj_Convert, &pm))
-		return NULL;
-	DisposPixMap(pm);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *Qd_DisposePixMap(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -2084,21 +1901,6 @@
 	return _res;
 }
 
-static PyObject *Qd_DisposPixPat(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	PixPatHandle pp;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      ResObj_Convert, &pp))
-		return NULL;
-	DisposPixPat(pp);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *Qd_DisposePixPat(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -2326,21 +2128,6 @@
 	return _res;
 }
 
-static PyObject *Qd_CharExtra(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	long extra;
-	if (!PyArg_ParseTuple(_args, "l",
-	                      &extra))
-		return NULL;
-	CharExtra(extra);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *Qd_GetCTSeed(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -2355,24 +2142,6 @@
 	return _res;
 }
 
-static PyObject *Qd_SubPt(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	Point src;
-	Point dst;
-	if (!PyArg_ParseTuple(_args, "O&O&",
-	                      PyMac_GetPoint, &src,
-	                      PyMac_GetPoint, &dst))
-		return NULL;
-	SubPt(src,
-	      &dst);
-	_res = Py_BuildValue("O&",
-	                     PyMac_BuildPoint, dst);
-	return _res;
-}
-
 static PyObject *Qd_SetClientID(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -2438,6 +2207,207 @@
 	return _res;
 }
 
+static PyObject *Qd_TextFont(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short font;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &font))
+		return NULL;
+	TextFont(font);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Qd_TextFace(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short face;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &face))
+		return NULL;
+	TextFace(face);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Qd_TextMode(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short mode;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &mode))
+		return NULL;
+	TextMode(mode);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Qd_TextSize(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short size;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &size))
+		return NULL;
+	TextSize(size);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Qd_SpaceExtra(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	long extra;
+	if (!PyArg_ParseTuple(_args, "l",
+	                      &extra))
+		return NULL;
+	SpaceExtra(extra);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Qd_DrawChar(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short ch;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &ch))
+		return NULL;
+	DrawChar(ch);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Qd_DrawString(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Str255 s;
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      PyMac_GetStr255, s))
+		return NULL;
+	DrawString(s);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Qd_DrawText(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	char *textBuf__in__;
+	int textBuf__len__;
+	int textBuf__in_len__;
+	short firstByte;
+	short byteCount;
+	if (!PyArg_ParseTuple(_args, "s#hh",
+	                      &textBuf__in__, &textBuf__in_len__,
+	                      &firstByte,
+	                      &byteCount))
+		return NULL;
+	DrawText(textBuf__in__,
+	         firstByte,
+	         byteCount);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+ textBuf__error__: ;
+	return _res;
+}
+
+static PyObject *Qd_CharWidth(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short _rv;
+	short ch;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &ch))
+		return NULL;
+	_rv = CharWidth(ch);
+	_res = Py_BuildValue("h",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qd_StringWidth(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short _rv;
+	Str255 s;
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      PyMac_GetStr255, s))
+		return NULL;
+	_rv = StringWidth(s);
+	_res = Py_BuildValue("h",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qd_TextWidth(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short _rv;
+	char *textBuf__in__;
+	int textBuf__len__;
+	int textBuf__in_len__;
+	short firstByte;
+	short byteCount;
+	if (!PyArg_ParseTuple(_args, "s#hh",
+	                      &textBuf__in__, &textBuf__in_len__,
+	                      &firstByte,
+	                      &byteCount))
+		return NULL;
+	_rv = TextWidth(textBuf__in__,
+	                firstByte,
+	                byteCount);
+	_res = Py_BuildValue("h",
+	                     _rv);
+ textBuf__error__: ;
+	return _res;
+}
+
+static PyObject *Qd_CharExtra(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	long extra;
+	if (!PyArg_ParseTuple(_args, "l",
+	                      &extra))
+		return NULL;
+	CharExtra(extra);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
 static PyMethodDef Qd_methods[] = {
 	{"OpenPort", (PyCFunction)Qd_OpenPort, 1,
 	 "(WindowPtr port) -> None"},
@@ -2491,28 +2461,6 @@
 	 "(short h, short v) -> None"},
 	{"Line", (PyCFunction)Qd_Line, 1,
 	 "(short dh, short dv) -> None"},
-	{"TextFont", (PyCFunction)Qd_TextFont, 1,
-	 "(short font) -> None"},
-	{"TextFace", (PyCFunction)Qd_TextFace, 1,
-	 "(short face) -> None"},
-	{"TextMode", (PyCFunction)Qd_TextMode, 1,
-	 "(short mode) -> None"},
-	{"TextSize", (PyCFunction)Qd_TextSize, 1,
-	 "(short size) -> None"},
-	{"SpaceExtra", (PyCFunction)Qd_SpaceExtra, 1,
-	 "(long extra) -> None"},
-	{"DrawChar", (PyCFunction)Qd_DrawChar, 1,
-	 "(short ch) -> None"},
-	{"DrawString", (PyCFunction)Qd_DrawString, 1,
-	 "(Str255 s) -> None"},
-	{"DrawText", (PyCFunction)Qd_DrawText, 1,
-	 "(Buffer textBuf, short firstByte, short byteCount) -> None"},
-	{"CharWidth", (PyCFunction)Qd_CharWidth, 1,
-	 "(short ch) -> (short _rv)"},
-	{"StringWidth", (PyCFunction)Qd_StringWidth, 1,
-	 "(Str255 s) -> (short _rv)"},
-	{"TextWidth", (PyCFunction)Qd_TextWidth, 1,
-	 "(Buffer textBuf, short firstByte, short byteCount) -> (short _rv)"},
 	{"ForeColor", (PyCFunction)Qd_ForeColor, 1,
 	 "(long color) -> None"},
 	{"BackColor", (PyCFunction)Qd_BackColor, 1,
@@ -2665,20 +2613,18 @@
 	 "(Point pt1, Point pt2) -> (Rect dstRect)"},
 	{"PtToAngle", (PyCFunction)Qd_PtToAngle, 1,
 	 "(Rect r, Point pt) -> (short angle)"},
+	{"SubPt", (PyCFunction)Qd_SubPt, 1,
+	 "(Point src, Point dst) -> (Point dst)"},
 	{"PtInRgn", (PyCFunction)Qd_PtInRgn, 1,
 	 "(Point pt, RgnHandle rgn) -> (Boolean _rv)"},
 	{"NewPixMap", (PyCFunction)Qd_NewPixMap, 1,
 	 "() -> (PixMapHandle _rv)"},
-	{"DisposPixMap", (PyCFunction)Qd_DisposPixMap, 1,
-	 "(PixMapHandle pm) -> None"},
 	{"DisposePixMap", (PyCFunction)Qd_DisposePixMap, 1,
 	 "(PixMapHandle pm) -> None"},
 	{"CopyPixMap", (PyCFunction)Qd_CopyPixMap, 1,
 	 "(PixMapHandle srcPM, PixMapHandle dstPM) -> None"},
 	{"NewPixPat", (PyCFunction)Qd_NewPixPat, 1,
 	 "() -> (PixPatHandle _rv)"},
-	{"DisposPixPat", (PyCFunction)Qd_DisposPixPat, 1,
-	 "(PixPatHandle pp) -> None"},
 	{"DisposePixPat", (PyCFunction)Qd_DisposePixPat, 1,
 	 "(PixPatHandle pp) -> None"},
 	{"CopyPixPat", (PyCFunction)Qd_CopyPixPat, 1,
@@ -2705,12 +2651,8 @@
 	 "(PixMapHandle pm) -> None"},
 	{"AllocCursor", (PyCFunction)Qd_AllocCursor, 1,
 	 "() -> None"},
-	{"CharExtra", (PyCFunction)Qd_CharExtra, 1,
-	 "(long extra) -> None"},
 	{"GetCTSeed", (PyCFunction)Qd_GetCTSeed, 1,
 	 "() -> (long _rv)"},
-	{"SubPt", (PyCFunction)Qd_SubPt, 1,
-	 "(Point src, Point dst) -> (Point dst)"},
 	{"SetClientID", (PyCFunction)Qd_SetClientID, 1,
 	 "(short id) -> None"},
 	{"ProtectEntry", (PyCFunction)Qd_ProtectEntry, 1,
@@ -2719,6 +2661,30 @@
 	 "(short index, Boolean reserve) -> None"},
 	{"QDError", (PyCFunction)Qd_QDError, 1,
 	 "() -> (short _rv)"},
+	{"TextFont", (PyCFunction)Qd_TextFont, 1,
+	 "(short font) -> None"},
+	{"TextFace", (PyCFunction)Qd_TextFace, 1,
+	 "(short face) -> None"},
+	{"TextMode", (PyCFunction)Qd_TextMode, 1,
+	 "(short mode) -> None"},
+	{"TextSize", (PyCFunction)Qd_TextSize, 1,
+	 "(short size) -> None"},
+	{"SpaceExtra", (PyCFunction)Qd_SpaceExtra, 1,
+	 "(long extra) -> None"},
+	{"DrawChar", (PyCFunction)Qd_DrawChar, 1,
+	 "(short ch) -> None"},
+	{"DrawString", (PyCFunction)Qd_DrawString, 1,
+	 "(Str255 s) -> None"},
+	{"DrawText", (PyCFunction)Qd_DrawText, 1,
+	 "(Buffer textBuf, short firstByte, short byteCount) -> None"},
+	{"CharWidth", (PyCFunction)Qd_CharWidth, 1,
+	 "(short ch) -> (short _rv)"},
+	{"StringWidth", (PyCFunction)Qd_StringWidth, 1,
+	 "(Str255 s) -> (short _rv)"},
+	{"TextWidth", (PyCFunction)Qd_TextWidth, 1,
+	 "(Buffer textBuf, short firstByte, short byteCount) -> (short _rv)"},
+	{"CharExtra", (PyCFunction)Qd_CharExtra, 1,
+	 "(long extra) -> None"},
 	{NULL, NULL, 0}
 };
 
diff --git a/Mac/Modules/qd/qdgen.py b/Mac/Modules/qd/qdgen.py
index 975e438..612b9e7 100644
--- a/Mac/Modules/qd/qdgen.py
+++ b/Mac/Modules/qd/qdgen.py
@@ -1,4 +1,4 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:QuickDraw.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:QuickDraw.h'
 
 f = Function(void, 'OpenPort',
     (GrafPtr, 'port', InMode),
@@ -131,65 +131,6 @@
 )
 functions.append(f)
 
-f = Function(void, 'TextFont',
-    (short, 'font', InMode),
-)
-functions.append(f)
-
-f = Function(void, 'TextFace',
-    (short, 'face', InMode),
-)
-functions.append(f)
-
-f = Function(void, 'TextMode',
-    (short, 'mode', InMode),
-)
-functions.append(f)
-
-f = Function(void, 'TextSize',
-    (short, 'size', InMode),
-)
-functions.append(f)
-
-f = Function(void, 'SpaceExtra',
-    (Fixed, 'extra', InMode),
-)
-functions.append(f)
-
-f = Function(void, 'DrawChar',
-    (short, 'ch', InMode),
-)
-functions.append(f)
-
-f = Function(void, 'DrawString',
-    (ConstStr255Param, 's', InMode),
-)
-functions.append(f)
-
-f = Function(void, 'DrawText',
-    (TextThingie, 'textBuf', InMode),
-    (short, 'firstByte', InMode),
-    (short, 'byteCount', InMode),
-)
-functions.append(f)
-
-f = Function(short, 'CharWidth',
-    (short, 'ch', InMode),
-)
-functions.append(f)
-
-f = Function(short, 'StringWidth',
-    (ConstStr255Param, 's', InMode),
-)
-functions.append(f)
-
-f = Function(short, 'TextWidth',
-    (TextThingie, 'textBuf', InMode),
-    (short, 'firstByte', InMode),
-    (short, 'byteCount', InMode),
-)
-functions.append(f)
-
 f = Function(void, 'ForeColor',
     (long, 'color', InMode),
 )
@@ -641,6 +582,12 @@
 )
 functions.append(f)
 
+f = Function(void, 'SubPt',
+    (Point, 'src', InMode),
+    (Point, 'dst', InOutMode),
+)
+functions.append(f)
+
 f = Function(Boolean, 'PtInRgn',
     (Point, 'pt', InMode),
     (RgnHandle, 'rgn', InMode),
@@ -651,11 +598,6 @@
 )
 functions.append(f)
 
-f = Function(void, 'DisposPixMap',
-    (PixMapHandle, 'pm', InMode),
-)
-functions.append(f)
-
 f = Function(void, 'DisposePixMap',
     (PixMapHandle, 'pm', InMode),
 )
@@ -671,11 +613,6 @@
 )
 functions.append(f)
 
-f = Function(void, 'DisposPixPat',
-    (PixPatHandle, 'pp', InMode),
-)
-functions.append(f)
-
 f = Function(void, 'DisposePixPat',
     (PixPatHandle, 'pp', InMode),
 )
@@ -751,21 +688,10 @@
 )
 functions.append(f)
 
-f = Function(void, 'CharExtra',
-    (Fixed, 'extra', InMode),
-)
-functions.append(f)
-
 f = Function(long, 'GetCTSeed',
 )
 functions.append(f)
 
-f = Function(void, 'SubPt',
-    (Point, 'src', InMode),
-    (Point, 'dst', InOutMode),
-)
-functions.append(f)
-
 f = Function(void, 'SetClientID',
     (short, 'id', InMode),
 )
@@ -787,3 +713,69 @@
 )
 functions.append(f)
 
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:QuickDrawText.h'
+
+f = Function(void, 'TextFont',
+    (short, 'font', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'TextFace',
+    (short, 'face', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'TextMode',
+    (short, 'mode', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'TextSize',
+    (short, 'size', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'SpaceExtra',
+    (Fixed, 'extra', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'DrawChar',
+    (short, 'ch', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'DrawString',
+    (ConstStr255Param, 's', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'DrawText',
+    (TextThingie, 'textBuf', InMode),
+    (short, 'firstByte', InMode),
+    (short, 'byteCount', InMode),
+)
+functions.append(f)
+
+f = Function(short, 'CharWidth',
+    (short, 'ch', InMode),
+)
+functions.append(f)
+
+f = Function(short, 'StringWidth',
+    (ConstStr255Param, 's', InMode),
+)
+functions.append(f)
+
+f = Function(short, 'TextWidth',
+    (TextThingie, 'textBuf', InMode),
+    (short, 'firstByte', InMode),
+    (short, 'byteCount', InMode),
+)
+functions.append(f)
+
+f = Function(void, 'CharExtra',
+    (Fixed, 'extra', InMode),
+)
+functions.append(f)
+
diff --git a/Mac/Modules/qd/qdscan.py b/Mac/Modules/qd/qdscan.py
index 057db6d..48766f2 100644
--- a/Mac/Modules/qd/qdscan.py
+++ b/Mac/Modules/qd/qdscan.py
@@ -1,7 +1,7 @@
 # Scan an Apple header file, generating a Python file of generator calls.
 
 import addpack
-addpack.addpack('D:python:Tools:bgen:bgen')
+addpack.addpack(':Tools:bgen:bgen')
 
 from scantools import Scanner
 
@@ -12,6 +12,32 @@
 	scanner = MyScanner(input, output, defsoutput)
 	scanner.scan()
 	scanner.close()
+	
+	# Grmpf. Universal Headers have Text-stuff in a different include file...
+	input = "QuickDrawText.h"
+	output = "@qdgentext.py"
+	defsoutput = "@QuickDrawText.py"
+	have_extra = 0
+	try:
+		scanner = MyScanner(input, output, defsoutput)
+		scanner.scan()
+		scanner.close()
+		have_extra = 1
+	except IOError:
+		pass
+	if have_extra:
+		print "=== Copying QuickDrawText stuff into main files... ==="
+		ifp = open("@qdgentext.py")
+		ofp = open("qdgen.py", "a")
+		ofp.write(ifp.read())
+		ifp.close()
+		ofp.close()
+		ifp = open("@QuickDrawText.py")
+		ofp = open("QuickDraw.py", "a")
+		ofp.write(ifp.read())
+		ifp.close()
+		ofp.close()
+		
 	print "=== Done scanning and generating, now importing the generated code... ==="
 	import qdsupport
 	print "=== Done.  It's up to you to compile it now! ==="
@@ -23,7 +49,7 @@
 		listname = "functions"
 		if arglist:
 			t, n, m = arglist[0]
-			if t in ("WindowPtr", "WindowPeek") and m == "InMode":
+			if t in ("WindowPtr", "WindowPeek", "WindowRef") and m == "InMode":
 				classname = "Method"
 				listname = "methods"
 		return classname, listname
@@ -48,7 +74,9 @@
 			'CSpecArray',
 			'CTabHandle',
 			'ColorComplementProcPtr',
+			'ColorComplementUPP',
 			'ColorSearchProcPtr',
+			'ColorSearchUPP',
 			'ConstPatternParam',
 			'Cursor_ptr',
 			'DeviceLoopDrawingProcPtr',
diff --git a/Mac/Modules/qd/qdsupport.py b/Mac/Modules/qd/qdsupport.py
index 0aa439c..f3e7a9a 100644
--- a/Mac/Modules/qd/qdsupport.py
+++ b/Mac/Modules/qd/qdsupport.py
@@ -6,7 +6,7 @@
 import string
 
 import addpack
-addpack.addpack('D:python:Tools:bgen:bgen')
+addpack.addpack(':Tools:bgen:bgen')
 
 # Declarations that change for each manager
 MACHEADERFILE = 'QuickDraw.h'		# The Apple header file
diff --git a/Mac/Modules/res/Resmodule.c b/Mac/Modules/res/Resmodule.c
index aeb7958..024d4d2 100644
--- a/Mac/Modules/res/Resmodule.c
+++ b/Mac/Modules/res/Resmodule.c
@@ -240,7 +240,7 @@
 	return _res;
 }
 
-static PyObject *ResObj_SizeResource(_self, _args)
+static PyObject *ResObj_GetResourceSizeOnDisk(_self, _args)
 	ResourceObject *_self;
 	PyObject *_args;
 {
@@ -248,7 +248,7 @@
 	long _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	_rv = SizeResource(_self->ob_itself);
+	_rv = GetResourceSizeOnDisk(_self->ob_itself);
 	{
 		OSErr _err = ResError();
 		if (_err != noErr) return PyMac_Error(_err);
@@ -258,7 +258,7 @@
 	return _res;
 }
 
-static PyObject *ResObj_MaxSizeRsrc(_self, _args)
+static PyObject *ResObj_GetMaxResourceSize(_self, _args)
 	ResourceObject *_self;
 	PyObject *_args;
 {
@@ -266,7 +266,7 @@
 	long _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	_rv = MaxSizeRsrc(_self->ob_itself);
+	_rv = GetMaxResourceSize(_self->ob_itself);
 	{
 		OSErr _err = ResError();
 		if (_err != noErr) return PyMac_Error(_err);
@@ -331,14 +331,14 @@
 	return _res;
 }
 
-static PyObject *ResObj_RmveResource(_self, _args)
+static PyObject *ResObj_RemoveResource(_self, _args)
 	ResourceObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	RmveResource(_self->ob_itself);
+	RemoveResource(_self->ob_itself);
 	{
 		OSErr _err = ResError();
 		if (_err != noErr) return PyMac_Error(_err);
@@ -385,6 +385,24 @@
 	return _res;
 }
 
+static PyObject *ResObj_GetNextFOND(_self, _args)
+	ResourceObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Handle _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = GetNextFOND(_self->ob_itself);
+	{
+		OSErr _err = ResError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	_res = Py_BuildValue("O&",
+	                     ResObj_New, _rv);
+	return _res;
+}
+
 static PyMethodDef ResObj_methods[] = {
 	{"HomeResFile", (PyCFunction)ResObj_HomeResFile, 1,
 	 "() -> (short _rv)"},
@@ -402,9 +420,9 @@
 	 "(short theID, Str255 name) -> None"},
 	{"AddResource", (PyCFunction)ResObj_AddResource, 1,
 	 "(ResType theType, short theID, Str255 name) -> None"},
-	{"SizeResource", (PyCFunction)ResObj_SizeResource, 1,
+	{"GetResourceSizeOnDisk", (PyCFunction)ResObj_GetResourceSizeOnDisk, 1,
 	 "() -> (long _rv)"},
-	{"MaxSizeRsrc", (PyCFunction)ResObj_MaxSizeRsrc, 1,
+	{"GetMaxResourceSize", (PyCFunction)ResObj_GetMaxResourceSize, 1,
 	 "() -> (long _rv)"},
 	{"RsrcMapEntry", (PyCFunction)ResObj_RsrcMapEntry, 1,
 	 "() -> (long _rv)"},
@@ -412,12 +430,14 @@
 	 "(short attrs) -> None"},
 	{"ChangedResource", (PyCFunction)ResObj_ChangedResource, 1,
 	 "() -> None"},
-	{"RmveResource", (PyCFunction)ResObj_RmveResource, 1,
+	{"RemoveResource", (PyCFunction)ResObj_RemoveResource, 1,
 	 "() -> None"},
 	{"WriteResource", (PyCFunction)ResObj_WriteResource, 1,
 	 "() -> None"},
 	{"SetResourceSize", (PyCFunction)ResObj_SetResourceSize, 1,
 	 "(long newSize) -> None"},
+	{"GetNextFOND", (PyCFunction)ResObj_GetNextFOND, 1,
+	 "() -> (Handle _rv)"},
 	{NULL, NULL, 0}
 };
 
@@ -1017,8 +1037,8 @@
 	short _rv;
 	Str255 fileName;
 	short vRefNum;
-	char permission;
-	if (!PyArg_ParseTuple(_args, "O&hc",
+	SignedByte permission;
+	if (!PyArg_ParseTuple(_args, "O&hb",
 	                      PyMac_GetStr255, fileName,
 	                      &vRefNum,
 	                      &permission))
@@ -1067,8 +1087,8 @@
 	short vRefNum;
 	long dirID;
 	Str255 fileName;
-	char permission;
-	if (!PyArg_ParseTuple(_args, "hlO&c",
+	SignedByte permission;
+	if (!PyArg_ParseTuple(_args, "hlO&b",
 	                      &vRefNum,
 	                      &dirID,
 	                      PyMac_GetStr255, fileName,
@@ -1163,6 +1183,25 @@
 	return _res;
 }
 
+static PyObject *Res_TempInsertROMMap(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Boolean tempResLoad;
+	if (!PyArg_ParseTuple(_args, "b",
+	                      &tempResLoad))
+		return NULL;
+	TempInsertROMMap(tempResLoad);
+	{
+		OSErr _err = ResError();
+		if (_err != noErr) return PyMac_Error(_err);
+	}
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
 static PyObject *Res_Resource(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1243,17 +1282,19 @@
 	{"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1,
 	 "(short refNum, short attrs) -> None"},
 	{"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1,
-	 "(Str255 fileName, short vRefNum, char permission) -> (short _rv)"},
+	 "(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
 	{"RGetResource", (PyCFunction)Res_RGetResource, 1,
 	 "(ResType theType, short theID) -> (Handle _rv)"},
 	{"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1,
-	 "(short vRefNum, long dirID, Str255 fileName, char permission) -> (short _rv)"},
+	 "(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
 	{"HCreateResFile", (PyCFunction)Res_HCreateResFile, 1,
 	 "(short vRefNum, long dirID, Str255 fileName) -> None"},
 	{"FSpOpenResFile", (PyCFunction)Res_FSpOpenResFile, 1,
 	 "(FSSpec spec, SignedByte permission) -> (short _rv)"},
 	{"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1,
 	 "(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
+	{"TempInsertROMMap", (PyCFunction)Res_TempInsertROMMap, 1,
+	 "(Boolean tempResLoad) -> None"},
 	{"Resource", (PyCFunction)Res_Resource, 1,
 	 "Convert a string to a resource object.\n\nThe created resource object is actually just a handle.\nApply AddResource() to write it to a resource file.\n"},
 	{NULL, NULL, 0}
diff --git a/Mac/Modules/res/resgen.py b/Mac/Modules/res/resgen.py
index 9d817a3..b5e15de 100644
--- a/Mac/Modules/res/resgen.py
+++ b/Mac/Modules/res/resgen.py
@@ -1,4 +1,4 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Resources.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Resources.h'
 
 f = ResFunction(short, 'InitResources',
 )
@@ -158,19 +158,19 @@
 resmethods.append(f)
 
 f = ResMethod(void, 'AddResource',
-    (Handle, 'theResource', InMode),
+    (Handle, 'theData', InMode),
     (ResType, 'theType', InMode),
     (short, 'theID', InMode),
     (ConstStr255Param, 'name', InMode),
 )
 resmethods.append(f)
 
-f = ResMethod(long, 'SizeResource',
+f = ResMethod(long, 'GetResourceSizeOnDisk',
     (Handle, 'theResource', InMode),
 )
 resmethods.append(f)
 
-f = ResMethod(long, 'MaxSizeRsrc',
+f = ResMethod(long, 'GetMaxResourceSize',
     (Handle, 'theResource', InMode),
 )
 resmethods.append(f)
@@ -191,7 +191,7 @@
 )
 resmethods.append(f)
 
-f = ResMethod(void, 'RmveResource',
+f = ResMethod(void, 'RemoveResource',
     (Handle, 'theResource', InMode),
 )
 resmethods.append(f)
@@ -225,7 +225,7 @@
 f = ResFunction(short, 'OpenRFPerm',
     (ConstStr255Param, 'fileName', InMode),
     (short, 'vRefNum', InMode),
-    (char, 'permission', InMode),
+    (SignedByte, 'permission', InMode),
 )
 functions.append(f)
 
@@ -239,7 +239,7 @@
     (short, 'vRefNum', InMode),
     (long, 'dirID', InMode),
     (ConstStr255Param, 'fileName', InMode),
-    (char, 'permission', InMode),
+    (SignedByte, 'permission', InMode),
 )
 functions.append(f)
 
@@ -270,3 +270,13 @@
 )
 resmethods.append(f)
 
+f = ResMethod(Handle, 'GetNextFOND',
+    (Handle, 'fondHandle', InMode),
+)
+resmethods.append(f)
+
+f = ResFunction(void, 'TempInsertROMMap',
+    (Boolean, 'tempResLoad', InMode),
+)
+functions.append(f)
+
diff --git a/Mac/Modules/res/resscan.py b/Mac/Modules/res/resscan.py
index d45d69e..ba860b4 100644
--- a/Mac/Modules/res/resscan.py
+++ b/Mac/Modules/res/resscan.py
@@ -8,6 +8,8 @@
 import regex
 import regsub
 import MacOS
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
 
 from scantools import Scanner
 
@@ -57,6 +59,9 @@
 			([("void", "*", "OutMode"), ("long", "*", "InMode"),
 			                            ("long", "*", "OutMode")],
 			 [("OutBuffer", "*", "InOutMode")]),
+			 
+			([("SInt8", "*", "*")],
+			 [("SignedByte", "*", "*")])
 			]
 
 if __name__ == "__main__":
diff --git a/Mac/Modules/res/ressupport.py b/Mac/Modules/res/ressupport.py
index a44af09..efc7571 100644
--- a/Mac/Modules/res/ressupport.py
+++ b/Mac/Modules/res/ressupport.py
@@ -3,6 +3,9 @@
 # It execs the file resgen.py which contain the function definitions
 # (resgen.py was generated by resscan.py, scanning the <Resources.h> header file).
 
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
+
 from macsupport import *
 
 
diff --git a/Mac/Modules/snd/Sndmodule.c b/Mac/Modules/snd/Sndmodule.c
index 9f5c24d..62e9d85 100644
--- a/Mac/Modules/snd/Sndmodule.c
+++ b/Mac/Modules/snd/Sndmodule.c
@@ -244,12 +244,12 @@
 {
 	PyObject *_res = NULL;
 	OSErr _err;
-	Boolean async;
+	Boolean quietNow;
 	if (!PyArg_ParseTuple(_args, "b",
-	                      &async))
+	                      &quietNow))
 		return NULL;
 	_err = SndStopFilePlay(_self->ob_itself,
-	                       async);
+	                       quietNow);
 	if (_err != noErr) return PyMac_Error(_err);
 	Py_INCREF(Py_None);
 	_res = Py_None;
@@ -289,7 +289,7 @@
 	{"SndPauseFilePlay", (PyCFunction)SndCh_SndPauseFilePlay, 1,
 	 "() -> None"},
 	{"SndStopFilePlay", (PyCFunction)SndCh_SndStopFilePlay, 1,
-	 "(Boolean async) -> None"},
+	 "(Boolean quietNow) -> None"},
 	{"SndChannelStatus", (PyCFunction)SndCh_SndChannelStatus, 1,
 	 "(short theLength) -> (SCStatus theStatus)"},
 	{NULL, NULL, 0}
@@ -322,6 +322,35 @@
 /* ------------------- End object type SndChannel ------------------- */
 
 
+static PyObject *Snd_SetSoundVol(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short level;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &level))
+		return NULL;
+	SetSoundVol(level);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Snd_GetSoundVol(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short level;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	GetSoundVol(&level);
+	_res = Py_BuildValue("h",
+	                     level);
+	return _res;
+}
+
 static PyObject *Snd_SndNewChannel(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -642,7 +671,96 @@
 	return _res;
 }
 
+static PyObject *Snd_GetSysBeepVolume(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	long level;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_err = GetSysBeepVolume(&level);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("l",
+	                     level);
+	return _res;
+}
+
+static PyObject *Snd_SetSysBeepVolume(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	long level;
+	if (!PyArg_ParseTuple(_args, "l",
+	                      &level))
+		return NULL;
+	_err = SetSysBeepVolume(level);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Snd_GetDefaultOutputVolume(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	long level;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_err = GetDefaultOutputVolume(&level);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("l",
+	                     level);
+	return _res;
+}
+
+static PyObject *Snd_SetDefaultOutputVolume(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	long level;
+	if (!PyArg_ParseTuple(_args, "l",
+	                      &level))
+		return NULL;
+	_err = SetDefaultOutputVolume(level);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *Snd_GetSoundHeaderOffset(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	SndListHandle sndHandle;
+	long offset;
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      ResObj_Convert, &sndHandle))
+		return NULL;
+	_err = GetSoundHeaderOffset(sndHandle,
+	                            &offset);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("l",
+	                     offset);
+	return _res;
+}
+
 static PyMethodDef Snd_methods[] = {
+	{"SetSoundVol", (PyCFunction)Snd_SetSoundVol, 1,
+	 "(short level) -> None"},
+	{"GetSoundVol", (PyCFunction)Snd_GetSoundVol, 1,
+	 "() -> (short level)"},
 	{"SndNewChannel", (PyCFunction)Snd_SndNewChannel, 1,
 	 "(short synth, long init, PyObject* userRoutine) -> (SndChannelPtr chan)"},
 	{"SndControl", (PyCFunction)Snd_SndControl, 1,
@@ -665,6 +783,16 @@
 	 "(Buffer buffer, Buffer state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, Buffer state)"},
 	{"Exp1to6", (PyCFunction)Snd_Exp1to6, 1,
 	 "(Buffer buffer, Buffer state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, Buffer state)"},
+	{"GetSysBeepVolume", (PyCFunction)Snd_GetSysBeepVolume, 1,
+	 "() -> (long level)"},
+	{"SetSysBeepVolume", (PyCFunction)Snd_SetSysBeepVolume, 1,
+	 "(long level) -> None"},
+	{"GetDefaultOutputVolume", (PyCFunction)Snd_GetDefaultOutputVolume, 1,
+	 "() -> (long level)"},
+	{"SetDefaultOutputVolume", (PyCFunction)Snd_SetDefaultOutputVolume, 1,
+	 "(long level) -> None"},
+	{"GetSoundHeaderOffset", (PyCFunction)Snd_GetSoundHeaderOffset, 1,
+	 "(SndListHandle sndHandle) -> (long offset)"},
 	{NULL, NULL, 0}
 };
 
diff --git a/Mac/Modules/snd/sndgen.py b/Mac/Modules/snd/sndgen.py
index 8e02f29..a980338 100644
--- a/Mac/Modules/snd/sndgen.py
+++ b/Mac/Modules/snd/sndgen.py
@@ -1,4 +1,14 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Sound.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Sound.h'
+
+f = SndFunction(void, 'SetSoundVol',
+    (short, 'level', InMode),
+)
+functions.append(f)
+
+f = SndFunction(void, 'GetSoundVol',
+    (short, 'level', OutMode),
+)
+functions.append(f)
 
 f = SndMethod(OSErr, 'SndDoCommand',
     (SndChannelPtr, 'chan', InMode),
@@ -17,7 +27,7 @@
     (SndChannelPtr, 'chan', OutMode),
     (short, 'synth', InMode),
     (long, 'init', InMode),
-    (SndCallBackProcPtr, 'userRoutine', InMode),
+    (SndCallBackUPP, 'userRoutine', InMode),
 )
 functions.append(f)
 
@@ -34,16 +44,6 @@
 )
 functions.append(f)
 
-f = SndFunction(void, 'SetSoundVol',
-    (short, 'level', InMode),
-)
-functions.append(f)
-
-f = SndFunction(void, 'GetSoundVol',
-    (short, 'level', OutMode),
-)
-functions.append(f)
-
 f = SndFunction(NumVersion, 'SndSoundManagerVersion',
 )
 functions.append(f)
@@ -55,7 +55,7 @@
     (long, 'bufferSize', InMode),
     (FakeType('0'), 'theBuffer', InMode),
     (AudioSelectionPtr, 'theSelection', InMode),
-    (ProcPtr, 'theCompletion', InMode),
+    (FilePlayCompletionUPP, 'theCompletion', InMode),
     (Boolean, 'async', InMode),
 )
 sndmethods.append(f)
@@ -67,7 +67,7 @@
 
 f = SndMethod(OSErr, 'SndStopFilePlay',
     (SndChannelPtr, 'chan', InMode),
-    (Boolean, 'async', InMode),
+    (Boolean, 'quietNow', InMode),
 )
 sndmethods.append(f)
 
@@ -130,3 +130,29 @@
 )
 functions.append(f)
 
+f = SndFunction(OSErr, 'GetSysBeepVolume',
+    (long, 'level', OutMode),
+)
+functions.append(f)
+
+f = SndFunction(OSErr, 'SetSysBeepVolume',
+    (long, 'level', InMode),
+)
+functions.append(f)
+
+f = SndFunction(OSErr, 'GetDefaultOutputVolume',
+    (long, 'level', OutMode),
+)
+functions.append(f)
+
+f = SndFunction(OSErr, 'SetDefaultOutputVolume',
+    (long, 'level', InMode),
+)
+functions.append(f)
+
+f = SndFunction(OSErr, 'GetSoundHeaderOffset',
+    (SndListHandle, 'sndHandle', InMode),
+    (long, 'offset', OutMode),
+)
+functions.append(f)
+
diff --git a/Mac/Modules/snd/sndscan.py b/Mac/Modules/snd/sndscan.py
index 02c9177..8201b2c 100644
--- a/Mac/Modules/snd/sndscan.py
+++ b/Mac/Modules/snd/sndscan.py
@@ -2,6 +2,9 @@
 # Then import sndsupport (which execs sndgen.py) to generate Sndmodule.c.
 # (Should learn how to tell the compiler to compile it as well.)
 
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
+
 from scantools import Scanner
 
 def main():
@@ -36,6 +39,10 @@
 			'StartSound',
 			'StopSound',
 			'SoundDone',
+			# These are soundMgr 3.0 routines that I can't seem to find...
+			'GetSoundPreference',
+			'SetSoundPreference',
+			'GetCompressionInfo',
 
 			]
 
@@ -43,6 +50,7 @@
 		return [
 			"GetSoundVol",
 			"SetSoundVol",
+			"UnsignedFixed",
 			]
 
 	def makerepairinstructions(self):
@@ -62,6 +70,9 @@
 			
 			([("SMStatusPtr", "*", "InMode")],
 			 [("SMStatus", "*", "OutMode")]),
+			 
+			([("CompressionInfoPtr", "*", "InMode")],
+			 [("CompressionInfo", "*", "OutMode")]),
 			
 			# For SndPlay's SndListHandle argument
 			([("Handle", "sndHdl", "InMode")],
diff --git a/Mac/Modules/snd/sndsupport.py b/Mac/Modules/snd/sndsupport.py
index fb561e8..af1908a 100644
--- a/Mac/Modules/snd/sndsupport.py
+++ b/Mac/Modules/snd/sndsupport.py
@@ -3,6 +3,9 @@
 # It execs the file sndgen.py which contain the function definitions
 # (sndgen.py was generated by sndscan.py, scanning the <Sound.h> header file).
 
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
+
 from macsupport import *
 
 
@@ -71,8 +74,10 @@
 		IndentLevel()
 
 SndCallBackProcPtr = SndCallBackType()
+SndCallBackUPP = SndCallBackProcPtr
 
 SndCompletionProcPtr = FakeType('(SndCompletionProcPtr)0') # XXX
+SndCompletionUPP = SndCompletionProcPtr
 
 NumVersion = OpaqueByValueType('NumVersion', 'NumVer')
 
@@ -81,9 +86,11 @@
 AudioSelectionPtr = FakeType('0') # XXX
 
 ProcPtr = FakeType('0') # XXX
+FilePlayCompletionUPP = FakeType('0') # XXX
 
 SCStatus = StructOutputBufferType('SCStatus')
 SMStatus = StructOutputBufferType('SMStatus')
+CompressionInfo = StructOutputBufferType('CompressionInfo')
 
 includestuff = includestuff + """
 #include <OSUtils.h> /* for Set(Current)A5 */
diff --git a/Mac/Modules/win/Winmodule.c b/Mac/Modules/win/Winmodule.c
index fc89803..7d6de73 100644
--- a/Mac/Modules/win/Winmodule.c
+++ b/Mac/Modules/win/Winmodule.c
@@ -346,7 +346,7 @@
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	ClipAbove((WindowPeek)(_self->ob_itself));
+	ClipAbove(_self->ob_itself);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -359,7 +359,7 @@
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	SaveOld((WindowPeek)(_self->ob_itself));
+	SaveOld(_self->ob_itself);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -374,7 +374,7 @@
 	if (!PyArg_ParseTuple(_args, "b",
 	                      &update))
 		return NULL;
-	DrawNew((WindowPeek)(_self->ob_itself),
+	DrawNew(_self->ob_itself,
 	        update);
 	Py_INCREF(Py_None);
 	_res = Py_None;
@@ -388,7 +388,7 @@
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	CalcVis((WindowPeek)(_self->ob_itself));
+	CalcVis(_self->ob_itself);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -871,4 +871,3 @@
 
 /* ========================= End module Win ========================= */
 
-
diff --git a/Mac/Modules/win/wingen.py b/Mac/Modules/win/wingen.py
index 0abf6e0..f0f7633 100644
--- a/Mac/Modules/win/wingen.py
+++ b/Mac/Modules/win/wingen.py
@@ -1,69 +1,69 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Windows.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Windows.h'
 
 f = Function(void, 'InitWindows',
 )
 functions.append(f)
 
-f = Function(WindowPtr, 'NewWindow',
+f = Function(WindowRef, 'NewWindow',
     (NullStorage, 'wStorage', InMode),
     (Rect_ptr, 'boundsRect', InMode),
     (ConstStr255Param, 'title', InMode),
     (Boolean, 'visible', InMode),
     (short, 'theProc', InMode),
-    (WindowPtr, 'behind', InMode),
+    (WindowRef, 'behind', InMode),
     (Boolean, 'goAwayFlag', InMode),
     (long, 'refCon', InMode),
 )
 functions.append(f)
 
-f = Function(WindowPtr, 'GetNewWindow',
+f = Function(WindowRef, 'GetNewWindow',
     (short, 'windowID', InMode),
     (NullStorage, 'wStorage', InMode),
-    (WindowPtr, 'behind', InMode),
+    (WindowRef, 'behind', InMode),
 )
 functions.append(f)
 
 f = Method(void, 'GetWTitle',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (Str255, 'title', OutMode),
 )
 methods.append(f)
 
 f = Method(void, 'SelectWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'HideWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'ShowWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'ShowHide',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (Boolean, 'showFlag', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'HiliteWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (Boolean, 'fHilite', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'BringToFront',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SendBehind',
-    (WindowPtr, 'theWindow', InMode),
-    (WindowPtr, 'behindWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
+    (WindowRef, 'behindWindow', InMode),
 )
 methods.append(f)
 
@@ -72,12 +72,12 @@
 functions.append(f)
 
 f = Method(void, 'DrawGrowIcon',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'MoveWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (short, 'hGlobal', InMode),
     (short, 'vGlobal', InMode),
     (Boolean, 'front', InMode),
@@ -85,7 +85,7 @@
 methods.append(f)
 
 f = Method(void, 'SizeWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (short, 'w', InMode),
     (short, 'h', InMode),
     (Boolean, 'fUpdate', InMode),
@@ -93,7 +93,7 @@
 methods.append(f)
 
 f = Method(void, 'ZoomWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (short, 'partCode', InMode),
     (Boolean, 'front', InMode),
 )
@@ -110,23 +110,23 @@
 functions.append(f)
 
 f = Method(void, 'BeginUpdate',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'EndUpdate',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetWRefCon',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (long, 'data', InMode),
 )
 methods.append(f)
 
 f = Method(long, 'GetWRefCon',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
@@ -136,28 +136,28 @@
 functions.append(f)
 
 f = Method(void, 'ClipAbove',
-    (WindowPeek, 'window', InMode),
+    (WindowRef, 'window', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SaveOld',
-    (WindowPeek, 'window', InMode),
+    (WindowRef, 'window', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'DrawNew',
-    (WindowPeek, 'window', InMode),
+    (WindowRef, 'window', InMode),
     (Boolean, 'update', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'CalcVis',
-    (WindowPeek, 'window', InMode),
+    (WindowRef, 'window', InMode),
 )
 methods.append(f)
 
 f = Method(long, 'GrowWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (Point, 'startPt', InMode),
     (Rect_ptr, 'bBox', InMode),
 )
@@ -176,53 +176,52 @@
 functions.append(f)
 
 f = Method(Boolean, 'TrackBox',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (Point, 'thePt', InMode),
     (short, 'partCode', InMode),
 )
 methods.append(f)
 
-f = Function(WindowPtr, 'NewCWindow',
+f = Function(WindowRef, 'NewCWindow',
     (NullStorage, 'wStorage', InMode),
     (Rect_ptr, 'boundsRect', InMode),
     (ConstStr255Param, 'title', InMode),
     (Boolean, 'visible', InMode),
     (short, 'procID', InMode),
-    (WindowPtr, 'behind', InMode),
+    (WindowRef, 'behind', InMode),
     (Boolean, 'goAwayFlag', InMode),
     (long, 'refCon', InMode),
 )
 functions.append(f)
 
-f = Function(WindowPtr, 'GetNewCWindow',
+f = Function(WindowRef, 'GetNewCWindow',
     (short, 'windowID', InMode),
     (NullStorage, 'wStorage', InMode),
-    (WindowPtr, 'behind', InMode),
+    (WindowRef, 'behind', InMode),
 )
 functions.append(f)
 
 f = Method(short, 'GetWVariant',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetWTitle',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (ConstStr255Param, 'title', InMode),
 )
 methods.append(f)
 
 f = Method(Boolean, 'TrackGoAway',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (Point, 'thePt', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'DragWindow',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (Point, 'startPt', InMode),
     (Rect_ptr, 'boundsRect', InMode),
 )
 methods.append(f)
 
-
diff --git a/Mac/Modules/win/winscan.py b/Mac/Modules/win/winscan.py
index 8d089a3..e9ac5af 100644
--- a/Mac/Modules/win/winscan.py
+++ b/Mac/Modules/win/winscan.py
@@ -1,4 +1,6 @@
 # Scan an Apple header file, generating a Python file of generator calls.
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
 
 from scantools import Scanner
 
@@ -20,7 +22,7 @@
 		listname = "functions"
 		if arglist:
 			t, n, m = arglist[0]
-			if t in ("WindowPtr", "WindowPeek") and m == "InMode":
+			if t in ("WindowPtr", "WindowPeek", "WindowRef") and m == "InMode":
 				classname = "Method"
 				listname = "methods"
 		return classname, listname
@@ -62,9 +64,13 @@
 			
 			([("WindowPtr", "*", "OutMode")],
 			 [("ExistingWindowPtr", "*", "*")]),
+			([("WindowRef", "*", "OutMode")],	# Same, but other style headerfiles
+			 [("ExistingWindowPtr", "*", "*")]),
 			
 			([("WindowPtr", "FrontWindow", "ReturnMode")],
 			 [("ExistingWindowPtr", "*", "*")]),
+			([("WindowRef", "FrontWindow", "ReturnMode")],	# Ditto
+			 [("ExistingWindowPtr", "*", "*")]),
 			]
 
 if __name__ == "__main__":
diff --git a/Mac/Modules/win/winsupport.py b/Mac/Modules/win/winsupport.py
index a7f1ebd..6f085f7 100644
--- a/Mac/Modules/win/winsupport.py
+++ b/Mac/Modules/win/winsupport.py
@@ -5,6 +5,9 @@
 
 import string
 
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
+
 # Declarations that change for each manager
 MACHEADERFILE = 'Windows.h'		# The Apple header file
 MODNAME = 'Win'				# The name of the module
@@ -22,6 +25,7 @@
 # Create the type objects
 
 WindowPtr = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
+WindowRef = WindowPtr
 WindowPeek = OpaqueByValueType("WindowPeek", OBJECTPREFIX)
 WindowPeek.passInput = lambda name: "(WindowPeek)(%s)" % name
 
