From 28ecf70db57828db2ca279643bf9aeca7662f35c Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Wed, 19 Nov 2003 14:34:18 +0000 Subject: [PATCH] Getting rid of support for MacOS9 and earlier. This is the first step, and the biggest in size, but probably the easiest. Hunting through the source code comes next. --- Mac/Build/HtmlRender.prj | Bin 42274 -> 0 bytes Mac/Build/PythonCore.axp | 7 - Mac/Build/PythonCore.mcp | Bin 173876 -> 0 bytes Mac/Build/PythonInterpreter.mcp | Bin 109654 -> 0 bytes Mac/Build/PythonStandSmall.mcp | Bin 349209 -> 0 bytes Mac/Build/PythonStandalone.mcp | Bin 230859 -> 0 bytes Mac/Build/_CG.carbon.mcp | Bin 49058 -> 0 bytes Mac/Build/_CG.carbon.mcp.exp | 1 - Mac/Build/_dummy_tkinter.mcp | Bin 60535 -> 0 bytes Mac/Build/_dummy_tkinter.mcp.exp | 1 - Mac/Build/buildlibs.mcp | Bin 132924 -> 0 bytes Mac/Compat/sync.c | 17 - .../AECaptureParser/AECaptureParser.py | 362 ----- Mac/Contrib/AECaptureParser/readme.txt | 5 - Mac/Contrib/BBPy.lm/BBPy.c | 456 ------- Mac/Contrib/BBPy.lm/BBPythonLM.mcp | Bin 45208 -> 0 bytes Mac/Contrib/BBPy.lm/BBpy.r | 35 - Mac/Contrib/BBPy.lm/Python | 1 - Mac/Contrib/BBPy.lm/Python Keywords.rsrc | 1 - Mac/Contrib/BBPy.lm/PythonBBLM.txt | 12 - Mac/Contrib/BBPy/PythonSlave.py | 129 -- Mac/Contrib/BBPy/README | 45 - Mac/Contrib/BBPy/Run as Python | 1 - .../BBPy/source/BB stuff/ExternalInterface.h | 716 ---------- .../BBPy/source/BB-stuff/ExternalInterface.h | 716 ---------- Mac/Contrib/BBPy/source/BBPy.h | 17 - Mac/Contrib/BBPy/source/BBPy.rsrc | 1 - Mac/Contrib/BBPy/source/BBPy_lauch.c | 94 -- Mac/Contrib/BBPy/source/BBPy_launch.c | 94 -- Mac/Contrib/BBPy/source/BBPy_main.c | 104 -- Mac/Contrib/ImageHelpers/ExtPixMapWrapper.py | 46 - Mac/Contrib/ImageHelpers/ImageMac.py | 277 ---- Mac/Contrib/ImageHelpers/MovieUtils.py | 269 ---- Mac/Contrib/ImageHelpers/ReadMe | 22 - Mac/Contrib/PythonDetector/OpenPythonLib | Bin 13234 -> 0 bytes .../PythonDetector/OpenPythonLib with NS | Bin 13853 -> 0 bytes Mac/Contrib/PythonDetector/PythonDetector | Bin 27559 -> 0 bytes Mac/Contrib/PythonDetector/readme.txt | 60 - Mac/Contrib/Sherlock/Python-FAQ.src | Bin 3342 -> 0 bytes Mac/Contrib/Sherlock/Python-docs.src | Bin 3344 -> 0 bytes Mac/Contrib/Sherlock/Python.src | Bin 3438 -> 0 bytes Mac/Contrib/Sherlock/readme.txt | 14 - Mac/Contrib/Tabcleaner/Tabcleaner.README | 41 - Mac/Contrib/Tabcleaner/Tabcleaner.py | 160 --- Mac/Contrib/mpwsystem/mpwsystem.py | 67 - Mac/Contrib/osam/OSAm.c | 277 ---- Mac/Contrib/osam/OSAm.exp | 1 - Mac/Contrib/osam/OSAm.h | 30 - Mac/Contrib/osam/OSAm.prj | Bin 71523 -> 0 bytes Mac/Contrib/osam/ScriptRunner.c | 310 ----- Mac/Contrib/osam/ScriptRunner.h | 30 - Mac/Distributions/(vise)/Python 2.3.vct | Bin 693147 -> 0 bytes Mac/Distributions/binary.exclude | 37 - Mac/Distributions/binary.include | 207 --- Mac/Distributions/dev.exclude | 22 - Mac/Distributions/dev.include | 634 --------- Mac/Distributions/src.exclude | 22 - Mac/Distributions/src.include | 138 -- Mac/HISTORY | 602 --------- Mac/Include/getapplbycreator.h | 43 - Mac/Include/macbuildno.h | 1 - Mac/Include/macdefs.h | 46 - Mac/Include/pyconfig.h | 780 ----------- Mac/Lib/dbmac.py | 140 -- Mac/Lib/maccache.py | 61 - Mac/Lib/mactty.py | 74 - Mac/Lib/mkcwproject/__init__.py | 80 -- Mac/Lib/mkcwproject/cwtalker.py | 36 - Mac/Lib/mkcwproject/cwxmlgen.py | 142 -- .../template-carbon/template-alllibraries.xml | 7 - .../template-carbon/template-allsources.xml | 7 - .../template-carbon/template-grouplist.xml | 6 - .../template-carbon/template-grouplistlib.xml | 6 - .../template-carbon/template-linkorder.xml | 5 - .../template-carbon/template-linkorderlib.xml | 5 - .../template-carbon/template-searchdirs.xml | 9 - .../template-carbon/template.prj.xml | 710 ---------- Mac/Lib/nsremote.py | 65 - Mac/Lib/preferences.py | 219 --- Mac/Lib/py_resource.py | 90 -- Mac/Lib/pythonprefs.py | 123 -- Mac/Lib/quietconsole.py | 110 -- Mac/Lib/test/AEservertest.py | 207 --- Mac/Lib/test/AEservertest.rsrc | Bin 25637 -> 0 bytes Mac/Lib/test/aete.py | 475 ------- Mac/Lib/test/cmtest.py | 45 - Mac/Lib/test/ctbtest.py | 50 - Mac/Lib/test/dragtest.py | 43 - Mac/Lib/test/echo.py | 155 --- Mac/Lib/test/fgbgtimetest.py | 17 - Mac/Lib/test/icgluetest.py | 28 - Mac/Lib/test/mkcwproj/mkcwtestmodule.c | 211 --- Mac/Lib/test/mkcwproj/testmkcwproj.py | 12 - Mac/Lib/test/readme.txt | 4 - Mac/Lib/test/tell.py | 63 - Mac/Lib/test/test_finder_ae | 5 - Mac/Lib/test/test_setcontroldata.py | 13 - Mac/Lib/test/tlist.py | 92 -- Mac/Lib/test/tsnd.py | 18 - Mac/Lib/test/tte.py | 17 - Mac/Lib/test/twin.py | 9 - Mac/MPW/Build | 3 - Mac/MPW/Makefile | 509 ------- Mac/MPW/README | 122 -- Mac/Modules/Printingmodule.c | 465 ------- Mac/Modules/_dummy_tkinter.c | 28 - Mac/Modules/calldll.c | 1194 ----------------- Mac/Modules/htmlrender/HtmlRendermodule.c | 818 ----------- Mac/Modules/htmlrender/htmlscan.py | 63 - Mac/Modules/htmlrender/htmlsupport.py | 213 --- Mac/Modules/macconfig.c | 322 ----- Mac/Modules/macmodule.c | 727 ---------- Mac/Python/getapplbycreator.c | 163 --- Mac/Python/gusiconfig.cpp | 137 -- Mac/Python/macapplication.c | 83 -- Mac/Python/macgetargv.c | 247 ---- Mac/Python/macgetcompiler.c | 61 - Mac/Python/macgetpath.c | 442 ------ Mac/Python/macgetplatform.c | 39 - Mac/Python/macglue.c | 617 --------- Mac/Python/macimport.c | 445 ------ Mac/Python/macmain.c | 640 --------- Mac/Python/macsetfiletype.c | 75 -- Mac/Python/macshlglue.c | 128 -- Mac/Python/pyGUSISIOUX.cp | 239 ---- Mac/ReadMe | 228 ---- Mac/ReadMe-dev | 11 - Mac/ReadMe-src | 13 - Mac/Resources/Carbon.r | 33 - Mac/Resources/balloons.bh | 36 - Mac/Resources/bundle.rsrc | Bin 27611 -> 0 bytes Mac/Resources/dialogs.rsrc | Bin 14456 -> 0 bytes Mac/Resources/gusiprefs.rsrc | Bin 815 -> 0 bytes Mac/Resources/pythonpath.r | 108 -- Mac/Resources/tkpython.rsrc | Bin 310805 -> 0 bytes Mac/Resources/version.r | 30 - Mac/Tools/CGI/BuildCGIApplet.py | 76 -- Mac/Tools/CGI/BuildCGIApplet.rsrc | Bin 581 -> 0 bytes Mac/Tools/CGI/CGI_README.txt | 66 - Mac/Tools/CGI/PythonCGISlave.py | 244 ---- Mac/Tools/CGI/PythonCGISlave.rsrc | Bin 581 -> 0 bytes Mac/Tools/CGI/cgi.html | 53 - Mac/Unsupported/unshar.py | 97 -- Mac/_checkversion.py | 16 - Mac/mwerks/errno_unix.h | 63 - Mac/mwerks/macuseshlstart.c | 29 - Mac/mwerks/malloc/README | 84 -- Mac/mwerks/malloc/calloc.c | 53 - Mac/mwerks/malloc/malloc.c | 447 ------ Mac/mwerks/mwerks_nscarbon.pch | 7 - Mac/mwerks/mwerks_nscarbon_config.h | 47 - Mac/mwerks/mwerks_pyexpat_config.h | 9 - Mac/mwerks/mwerks_shcarbon.pch | 7 - Mac/mwerks/mwerks_shcarbon_config.h | 50 - Mac/mwerks/mwerks_smcarbon.pch | 7 - Mac/mwerks/mwerks_smcarbon_config.h | 43 - Mac/mwerks/mwerks_thrcarbonsm_config.h | 43 - Mac/mwerks/mwerks_threadsmall_config.h | 39 - Mac/mwerks/mwerks_tkplugin_config.h | 16 - Mac/mwerks/mwfopenrf.c | 79 -- Mac/scripts/BuildApplication.py | 140 -- Mac/scripts/BuildApplication.rsrc | Bin 3858 -> 0 bytes Mac/scripts/ConfigurePython.py | 179 --- Mac/scripts/ConfigurePython.rsrc | Bin 9088 -> 0 bytes Mac/scripts/EditPythonPrefs.py | 213 --- Mac/scripts/EditPythonPrefs.rsrc | Bin 9780 -> 0 bytes Mac/scripts/EditPythonPrefsBH.bh | 47 - Mac/scripts/EditPythonPrefsBH.prj | Bin 24091 -> 0 bytes Mac/scripts/EditPythonPrefsBH.rsrc | Bin 4278 -> 0 bytes Mac/scripts/MkDistr.py | 318 ----- Mac/scripts/MkDistr.rsrc | Bin 1531 -> 0 bytes Mac/scripts/MkDistr_ui.py | 356 ----- Mac/scripts/buildappbundle.py | 104 -- Mac/scripts/crlf.py | 29 - Mac/scripts/findgremlins.py | 57 - Mac/scripts/fixfiletypes.py | 56 - Mac/scripts/fullbuild.py | 434 ------ Mac/scripts/fullbuild.rsrc | Bin 1764 -> 0 bytes Mac/scripts/genpluginprojects.py | 181 --- Mac/scripts/missingcarbonmethods.py | 167 --- Mac/scripts/unweave.py | 259 ---- 181 files changed, 22664 deletions(-) delete mode 100644 Mac/Build/HtmlRender.prj delete mode 100644 Mac/Build/PythonCore.axp delete mode 100644 Mac/Build/PythonCore.mcp delete mode 100644 Mac/Build/PythonInterpreter.mcp delete mode 100644 Mac/Build/PythonStandSmall.mcp delete mode 100644 Mac/Build/PythonStandalone.mcp delete mode 100755 Mac/Build/_CG.carbon.mcp delete mode 100755 Mac/Build/_CG.carbon.mcp.exp delete mode 100644 Mac/Build/_dummy_tkinter.mcp delete mode 100644 Mac/Build/_dummy_tkinter.mcp.exp delete mode 100644 Mac/Build/buildlibs.mcp delete mode 100644 Mac/Compat/sync.c delete mode 100644 Mac/Contrib/AECaptureParser/AECaptureParser.py delete mode 100644 Mac/Contrib/AECaptureParser/readme.txt delete mode 100644 Mac/Contrib/BBPy.lm/BBPy.c delete mode 100644 Mac/Contrib/BBPy.lm/BBPythonLM.mcp delete mode 100644 Mac/Contrib/BBPy.lm/BBpy.r delete mode 100644 Mac/Contrib/BBPy.lm/Python delete mode 100644 Mac/Contrib/BBPy.lm/Python Keywords.rsrc delete mode 100644 Mac/Contrib/BBPy.lm/PythonBBLM.txt delete mode 100644 Mac/Contrib/BBPy/PythonSlave.py delete mode 100644 Mac/Contrib/BBPy/README delete mode 100644 Mac/Contrib/BBPy/Run as Python delete mode 100644 Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h delete mode 100644 Mac/Contrib/BBPy/source/BB-stuff/ExternalInterface.h delete mode 100644 Mac/Contrib/BBPy/source/BBPy.h delete mode 100644 Mac/Contrib/BBPy/source/BBPy.rsrc delete mode 100644 Mac/Contrib/BBPy/source/BBPy_lauch.c delete mode 100644 Mac/Contrib/BBPy/source/BBPy_launch.c delete mode 100644 Mac/Contrib/BBPy/source/BBPy_main.c delete mode 100644 Mac/Contrib/ImageHelpers/ExtPixMapWrapper.py delete mode 100644 Mac/Contrib/ImageHelpers/ImageMac.py delete mode 100644 Mac/Contrib/ImageHelpers/MovieUtils.py delete mode 100644 Mac/Contrib/ImageHelpers/ReadMe delete mode 100644 Mac/Contrib/PythonDetector/OpenPythonLib delete mode 100644 Mac/Contrib/PythonDetector/OpenPythonLib with NS delete mode 100644 Mac/Contrib/PythonDetector/PythonDetector delete mode 100644 Mac/Contrib/PythonDetector/readme.txt delete mode 100644 Mac/Contrib/Sherlock/Python-FAQ.src delete mode 100644 Mac/Contrib/Sherlock/Python-docs.src delete mode 100644 Mac/Contrib/Sherlock/Python.src delete mode 100644 Mac/Contrib/Sherlock/readme.txt delete mode 100644 Mac/Contrib/Tabcleaner/Tabcleaner.README delete mode 100644 Mac/Contrib/Tabcleaner/Tabcleaner.py delete mode 100644 Mac/Contrib/mpwsystem/mpwsystem.py delete mode 100644 Mac/Contrib/osam/OSAm.c delete mode 100644 Mac/Contrib/osam/OSAm.exp delete mode 100644 Mac/Contrib/osam/OSAm.h delete mode 100644 Mac/Contrib/osam/OSAm.prj delete mode 100644 Mac/Contrib/osam/ScriptRunner.c delete mode 100644 Mac/Contrib/osam/ScriptRunner.h delete mode 100644 Mac/Distributions/(vise)/Python 2.3.vct delete mode 100644 Mac/Distributions/binary.exclude delete mode 100644 Mac/Distributions/binary.include delete mode 100644 Mac/Distributions/dev.exclude delete mode 100644 Mac/Distributions/dev.include delete mode 100644 Mac/Distributions/src.exclude delete mode 100644 Mac/Distributions/src.include delete mode 100644 Mac/HISTORY delete mode 100644 Mac/Include/getapplbycreator.h delete mode 100644 Mac/Include/macbuildno.h delete mode 100644 Mac/Include/macdefs.h delete mode 100644 Mac/Include/pyconfig.h delete mode 100644 Mac/Lib/dbmac.py delete mode 100644 Mac/Lib/maccache.py delete mode 100644 Mac/Lib/mactty.py delete mode 100644 Mac/Lib/mkcwproject/__init__.py delete mode 100644 Mac/Lib/mkcwproject/cwtalker.py delete mode 100644 Mac/Lib/mkcwproject/cwxmlgen.py delete mode 100644 Mac/Lib/mkcwproject/template-carbon/template-alllibraries.xml delete mode 100644 Mac/Lib/mkcwproject/template-carbon/template-allsources.xml delete mode 100644 Mac/Lib/mkcwproject/template-carbon/template-grouplist.xml delete mode 100644 Mac/Lib/mkcwproject/template-carbon/template-grouplistlib.xml delete mode 100644 Mac/Lib/mkcwproject/template-carbon/template-linkorder.xml delete mode 100644 Mac/Lib/mkcwproject/template-carbon/template-linkorderlib.xml delete mode 100644 Mac/Lib/mkcwproject/template-carbon/template-searchdirs.xml delete mode 100644 Mac/Lib/mkcwproject/template-carbon/template.prj.xml delete mode 100644 Mac/Lib/nsremote.py delete mode 100644 Mac/Lib/preferences.py delete mode 100644 Mac/Lib/py_resource.py delete mode 100644 Mac/Lib/pythonprefs.py delete mode 100644 Mac/Lib/quietconsole.py delete mode 100644 Mac/Lib/test/AEservertest.py delete mode 100644 Mac/Lib/test/AEservertest.rsrc delete mode 100644 Mac/Lib/test/aete.py delete mode 100644 Mac/Lib/test/cmtest.py delete mode 100644 Mac/Lib/test/ctbtest.py delete mode 100644 Mac/Lib/test/dragtest.py delete mode 100644 Mac/Lib/test/echo.py delete mode 100644 Mac/Lib/test/fgbgtimetest.py delete mode 100644 Mac/Lib/test/icgluetest.py delete mode 100644 Mac/Lib/test/mkcwproj/mkcwtestmodule.c delete mode 100644 Mac/Lib/test/mkcwproj/testmkcwproj.py delete mode 100644 Mac/Lib/test/readme.txt delete mode 100644 Mac/Lib/test/tell.py delete mode 100644 Mac/Lib/test/test_finder_ae delete mode 100644 Mac/Lib/test/test_setcontroldata.py delete mode 100644 Mac/Lib/test/tlist.py delete mode 100644 Mac/Lib/test/tsnd.py delete mode 100644 Mac/Lib/test/tte.py delete mode 100644 Mac/Lib/test/twin.py delete mode 100644 Mac/MPW/Build delete mode 100644 Mac/MPW/Makefile delete mode 100644 Mac/MPW/README delete mode 100644 Mac/Modules/Printingmodule.c delete mode 100644 Mac/Modules/_dummy_tkinter.c delete mode 100644 Mac/Modules/calldll.c delete mode 100644 Mac/Modules/htmlrender/HtmlRendermodule.c delete mode 100644 Mac/Modules/htmlrender/htmlscan.py delete mode 100644 Mac/Modules/htmlrender/htmlsupport.py delete mode 100644 Mac/Modules/macconfig.c delete mode 100644 Mac/Modules/macmodule.c delete mode 100644 Mac/Python/getapplbycreator.c delete mode 100644 Mac/Python/gusiconfig.cpp delete mode 100644 Mac/Python/macapplication.c delete mode 100644 Mac/Python/macgetargv.c delete mode 100644 Mac/Python/macgetcompiler.c delete mode 100644 Mac/Python/macgetpath.c delete mode 100644 Mac/Python/macgetplatform.c delete mode 100644 Mac/Python/macglue.c delete mode 100644 Mac/Python/macimport.c delete mode 100644 Mac/Python/macmain.c delete mode 100644 Mac/Python/macsetfiletype.c delete mode 100644 Mac/Python/macshlglue.c delete mode 100644 Mac/Python/pyGUSISIOUX.cp delete mode 100644 Mac/ReadMe delete mode 100644 Mac/ReadMe-dev delete mode 100644 Mac/ReadMe-src delete mode 100644 Mac/Resources/Carbon.r delete mode 100644 Mac/Resources/balloons.bh delete mode 100644 Mac/Resources/bundle.rsrc delete mode 100644 Mac/Resources/dialogs.rsrc delete mode 100644 Mac/Resources/gusiprefs.rsrc delete mode 100644 Mac/Resources/pythonpath.r delete mode 100644 Mac/Resources/tkpython.rsrc delete mode 100644 Mac/Resources/version.r delete mode 100644 Mac/Tools/CGI/BuildCGIApplet.py delete mode 100644 Mac/Tools/CGI/BuildCGIApplet.rsrc delete mode 100644 Mac/Tools/CGI/CGI_README.txt delete mode 100644 Mac/Tools/CGI/PythonCGISlave.py delete mode 100644 Mac/Tools/CGI/PythonCGISlave.rsrc delete mode 100644 Mac/Tools/CGI/cgi.html delete mode 100644 Mac/Unsupported/unshar.py delete mode 100644 Mac/_checkversion.py delete mode 100644 Mac/mwerks/errno_unix.h delete mode 100644 Mac/mwerks/macuseshlstart.c delete mode 100644 Mac/mwerks/malloc/README delete mode 100644 Mac/mwerks/malloc/calloc.c delete mode 100644 Mac/mwerks/malloc/malloc.c delete mode 100644 Mac/mwerks/mwerks_nscarbon.pch delete mode 100644 Mac/mwerks/mwerks_nscarbon_config.h delete mode 100644 Mac/mwerks/mwerks_pyexpat_config.h delete mode 100644 Mac/mwerks/mwerks_shcarbon.pch delete mode 100644 Mac/mwerks/mwerks_shcarbon_config.h delete mode 100644 Mac/mwerks/mwerks_smcarbon.pch delete mode 100644 Mac/mwerks/mwerks_smcarbon_config.h delete mode 100644 Mac/mwerks/mwerks_thrcarbonsm_config.h delete mode 100644 Mac/mwerks/mwerks_threadsmall_config.h delete mode 100644 Mac/mwerks/mwerks_tkplugin_config.h delete mode 100644 Mac/mwerks/mwfopenrf.c delete mode 100644 Mac/scripts/BuildApplication.py delete mode 100644 Mac/scripts/BuildApplication.rsrc delete mode 100644 Mac/scripts/ConfigurePython.py delete mode 100644 Mac/scripts/ConfigurePython.rsrc delete mode 100644 Mac/scripts/EditPythonPrefs.py delete mode 100644 Mac/scripts/EditPythonPrefs.rsrc delete mode 100644 Mac/scripts/EditPythonPrefsBH.bh delete mode 100644 Mac/scripts/EditPythonPrefsBH.prj delete mode 100644 Mac/scripts/EditPythonPrefsBH.rsrc delete mode 100644 Mac/scripts/MkDistr.py delete mode 100644 Mac/scripts/MkDistr.rsrc delete mode 100644 Mac/scripts/MkDistr_ui.py delete mode 100755 Mac/scripts/buildappbundle.py delete mode 100755 Mac/scripts/crlf.py delete mode 100644 Mac/scripts/findgremlins.py delete mode 100644 Mac/scripts/fixfiletypes.py delete mode 100644 Mac/scripts/fullbuild.py delete mode 100644 Mac/scripts/fullbuild.rsrc delete mode 100644 Mac/scripts/genpluginprojects.py delete mode 100644 Mac/scripts/missingcarbonmethods.py delete mode 100644 Mac/scripts/unweave.py diff --git a/Mac/Build/HtmlRender.prj b/Mac/Build/HtmlRender.prj deleted file mode 100644 index 5f917e2a43e3f5471a2e6db0fc008908d799b385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42274 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 LEhyYT?qC1_U4IG> diff --git a/Mac/Build/PythonCore.axp b/Mac/Build/PythonCore.axp deleted file mode 100644 index 035d7b80b2..0000000000 --- a/Mac/Build/PythonCore.axp +++ /dev/null @@ -1,7 +0,0 @@ -__terminate -__initialize -__start -__ptmf_null -__vec_longjmp -longjmp -exit diff --git a/Mac/Build/PythonCore.mcp b/Mac/Build/PythonCore.mcp deleted file mode 100644 index 7ec096f13e9565d55546b55e978e922dc53543a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173876 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�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 diff --git a/Mac/Build/PythonInterpreter.mcp b/Mac/Build/PythonInterpreter.mcp deleted file mode 100644 index 830d7663d0db86c81afe4ab3c112e25f0c07b5c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109654 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 diff --git a/Mac/Build/PythonStandSmall.mcp b/Mac/Build/PythonStandSmall.mcp deleted file mode 100644 index 131b9ba2504db0949890e4d265b832b8e0b3fb11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349209 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 pI~BCv2UMPd${CQ`CPB0RWU@WJdr1 diff --git a/Mac/Build/_CG.carbon.mcp.exp b/Mac/Build/_CG.carbon.mcp.exp deleted file mode 100755 index bc948143bc..0000000000 --- a/Mac/Build/_CG.carbon.mcp.exp +++ /dev/null @@ -1 +0,0 @@ -init_CG diff --git a/Mac/Build/_dummy_tkinter.mcp b/Mac/Build/_dummy_tkinter.mcp deleted file mode 100644 index c011b009e8da4299879eaa227a5880664fd4a2b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60535 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 diff --git a/Mac/Compat/sync.c b/Mac/Compat/sync.c deleted file mode 100644 index 1a8d3f9658..0000000000 --- a/Mac/Compat/sync.c +++ /dev/null @@ -1,17 +0,0 @@ -/* The equivalent of the Unix 'sync' system call: FlushVol. - Public domain by Guido van Rossum, CWI, Amsterdam (July 1987). - For now, we only flush the default volume - (since that's the only volume written to by MacB). */ - -#include "macdefs.h" - -void -sync(void) -{ - if (FlushVol((StringPtr)0, 0) == noErr) - return; - else { - errno= ENODEV; - return; - } -} diff --git a/Mac/Contrib/AECaptureParser/AECaptureParser.py b/Mac/Contrib/AECaptureParser/AECaptureParser.py deleted file mode 100644 index 3d74f64e85..0000000000 --- a/Mac/Contrib/AECaptureParser/AECaptureParser.py +++ /dev/null @@ -1,362 +0,0 @@ -''' -AECaptureParser makes a brave attempt to convert the text output -of the very handy Lasso Capture AE control panel -into close-enough executable python code. - -In a roundabout way AECaptureParser offers the way to write lines of AppleScript -and convert them to python code. Once Pythonised, the code can be made prettier, -and it can run without Capture or Script Editor being open. - -You need Lasso Capture AE from Blueworld: -ftp://ftp.blueworld.com/Lasso251/LassoCaptureAE.hqx - -Lasso Capture AE prints structured ascii representations in a small window. -As these transcripts can be very complex, cut and paste to AECaptureParser, it parses and writes -python code that will, when executed, cause the same events to happen. -It's been tested with some household variety events, I'm sure there will be tons that -don't work. - -All objects are converted to standard aetypes.ObjectSpecifier instances. - -How to use: - 1. Start the Capture window - 2. Cause the desired appleevent to happen - - by writing a line of applescript in Script Editor and running it (!) - - by recording some action in Script Editor and running it - 3. Find the events in Capture: - - make sure you get the appropriate events, cull if necessary - - sometimes Capture barfs, just quit and start Capture again, run events again - - AECaptureParser can process multiple events - it will just make more code. - 4. Copy and paste in this script and execute - 5. It will print python code that, when executed recreates the events. - -Example: - For instance the following line of AppleScript in Script Editor - tell application "Finder" - return application processes - end tell - will result in the following transcript: - [event: target="Finder", class=core, id=getd] - '----':obj {form:indx, want:type(pcap), seld:abso(«616C6C20»), from:'null'()} - [/event] - Feed a string with this (and perhaps more) events to AECaptureParser - -Some mysteries: - * what is '&subj' - it is sent in an activate event: &subj:'null'() - The activate event works when this is left out. A possibility? - * needs to deal with embedded aliasses - - -''' -__version__ = '0.002' -__author__ = 'evb' - - -import string - -opentag = '{' -closetag = '}' - - - -import aetools -import aetypes - -class eventtalker(aetools.TalkTo): - pass - -def processes(): - '''Helper function to get the list of current processes and their creators - This code was mostly written by AECaptureParser! It ain't pretty, but that's not python's fault!''' - talker = eventtalker('MACS') - _arguments = {} - _attributes = {} - p = [] - names = [] - creators = [] - results = [] - # first get the list of process names - _arguments['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('pcap'), - form="indx", seld=aetypes.Unknown('abso', "all "), fr=None) - _reply, _arguments, _attributes = talker.send('core', 'getd', _arguments, _attributes) - if _arguments.has_key('errn'): - raise aetools.Error, aetools.decodeerror(_arguments) - if _arguments.has_key('----'): - p = _arguments['----'] - for proc in p: - names.append(proc.seld) - # then get the list of process creators - _arguments = {} - _attributes = {} - AEobject_00 = aetypes.ObjectSpecifier(want=aetypes.Type('pcap'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None) - AEobject_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fcrt'), fr=AEobject_00) - _arguments['----'] = AEobject_01 - _reply, _arguments, _attributes = talker.send('core', 'getd', _arguments, _attributes) - if _arguments.has_key('errn'): - raise aetools.Error, aetools.decodeerror(_arguments) - if _arguments.has_key('----'): - p = _arguments['----'] - for proc in p: - creators.append(proc.type) - # then put the lists together - for i in range(len(names)): - results.append((names[i], creators[i])) - return results - - -class AECaptureParser: - '''convert a captured appleevent-description into executable python code''' - def __init__(self, aetext): - self.aetext = aetext - self.events = [] - self.arguments = {} - self.objectindex = 0 - self.varindex = 0 - self.currentevent = {'variables':{}, 'arguments':{}, 'objects':{}} - self.parse() - - def parse(self): - self.lines = string.split(self.aetext, '\n') - for l in self.lines: - if l[:7] == '[event:': - self.eventheader(l) - elif l[:7] == '[/event': - if len(self.currentevent)<>0: - self.events.append(self.currentevent) - self.currentevent = {'variables':{}, 'arguments':{}, 'objects':{}} - self.objectindex = 0 - else: - self.line(l) - - def line(self, value): - '''interpret literals, variables, lists etc.''' - # stuff in [ ], l ists - varstart = string.find(value, '[') - varstop = string.find(value, ']') - if varstart <> -1 and varstop <> -1 and varstop>varstart: - variable = value[varstart:varstop+1] - name = 'aevar_'+string.zfill(self.varindex, 2) - self.currentevent['variables'][name] = variable - value = value[:varstart]+name+value[varstop+1:] - self.varindex = self.varindex + 1 - # stuff in « » - # these are 'ordinal' descriptors of 4 letter codes, so translate - varstart = string.find(value, '«') - varstop = string.find(value, '»') - if varstart <> -1 and varstop <> -1 and varstop>varstart: - variable = value[varstart+1:varstop] - t = '' - for i in range(0, len(variable), 2): - c = eval('0x'+variable[i : i+2]) - t = t + chr(c) - - name = 'aevar_'+string.zfill(self.varindex, 2) - self.currentevent['variables'][name] = '"' + t + '"' - value = value[:varstart]+name+value[varstop+1:] - self.varindex = self.varindex + 1 - pos = string.find(value, ':') - if pos==-1:return - ok = 1 - while ok <> None: - value, ok = self.parseobject(value) - self.currentevent['arguments'].update(self.splitparts(value, ':')) - - # remove the &subj argument? - if self.currentevent['arguments'].has_key('&subj'): - del self.currentevent['arguments']['&subj'] - - # check for arguments len(a) < 4, and pad with spaces - for k in self.currentevent['arguments'].keys(): - if len(k)<4: - newk = k + (4-len(k))*' ' - self.currentevent['arguments'][newk] = self.currentevent['arguments'][k] - del self.currentevent['arguments'][k] - - def parseobject(self, obj): - a, b = self.findtag(obj) - stuff = None - if a<>None and b<>None: - stuff = obj[a:b] - name = 'AEobject_'+string.zfill(self.objectindex, 2) - self.currentevent['objects'][name] = self.splitparts(stuff, ':') - obj = obj[:a-5] + name + obj[b+1:] - self.objectindex = self.objectindex +1 - return obj, stuff - - def nextopen(self, pos, text): - return string.find(text, opentag, pos) - - def nextclosed(self, pos, text): - return string.find(text, closetag, pos) - - def nexttag(self, pos, text): - start = self.nextopen(pos, text) - stop = self.nextclosed(pos, text) - if start == -1: - if stop == -1: - return -1, -1 - return 0, stop - if start < stop and start<>-1: - return 1, start - else: - return 0, stop - - def findtag(self, text): - p = -1 - last = None,None - while 1: - kind, p = self.nexttag(p+1, text) - if last[0]==1 and kind==0: - return last[1]+len(opentag), p - if (kind, p) == (-1, -1): - break - last=kind, p - return None, None - - def splitparts(self, txt, splitter): - res = {} - parts = string.split(txt, ', ') - for p in parts: - pos = string.find(p, splitter) - key = string.strip(p[:pos]) - value = string.strip(p[pos+1:]) - res[key] = self.map(value) - return res - - def eventheader(self, hdr): - self.currentevent['event'] = self.splitparts(hdr[7:-1], '=') - - def printobject(self, d): - '''print one object as python code''' - t = [] - obj = {} - obj.update(d) - t.append("aetypes.ObjectSpecifier(") - if obj.has_key('want'): - t.append('want=' + self.map(obj['want'])) - del obj['want'] - t.append(', ') - if obj.has_key('form'): - t.append('form=' + addquotes(self.map(obj['form']))) - del obj['form'] - t.append(', ') - if obj.has_key('seld'): - t.append('seld=' + self.map(obj['seld'])) - del obj['seld'] - t.append(', ') - if obj.has_key('from'): - t.append('fr=' + self.map(obj['from'])) - del obj['from'] - if len(obj.keys()) > 0: - print '# ', `obj` - t.append(")") - return string.join(t, '') - - def map(self, t): - '''map some Capture syntax to python - matchstring : [(old, new), ... ] - ''' - m = { - 'type(': [('type(', "aetypes.Type('"), (')', "')")], - "'null'()": [("'null'()", "None")], - 'abso(': [('abso(', "aetypes.Unknown('abso', ")], - '–': [('–', '"')], - '”': [('”', '"')], - '[': [('[', '('), (', ', ',')], - ']': [(']', ')')], - '«': [('«', "«")], - '»': [('»', "»")], - - } - for k in m.keys(): - if string.find(t, k) <> -1: - for old, new in m[k]: - p = string.split(t, old) - t = string.join(p, new) - return t - - def printevent(self, i): - '''print the entire captured sequence as python''' - evt = self.events[i] - code = [] - code.append('\n# start event ' + `i` + ', talking to ' + evt['event']['target']) - # get the signature for the target application - code.append('talker = eventtalker("'+self.gettarget(evt['event']['target'])+'")') - code.append("_arguments = {}") - code.append("_attributes = {}") - # write the variables - for key, value in evt['variables'].items(): - value = evt['variables'][key] - code.append(key + ' = ' + value) - # write the object in the right order - objkeys = evt['objects'].keys() - objkeys.sort() - for key in objkeys: - value = evt['objects'][key] - code.append(key + ' = ' + self.printobject(value)) - # then write the arguments - for key, value in evt['arguments'].items(): - code.append("_arguments[" + addquotes(key) + "] = " + value ) - code.append('_reply, _arguments, _attributes = talker.send("'+ - evt['event']['class']+'", "'+evt['event']['id']+'", _arguments, _attributes)') - code.append("if _arguments.has_key('errn'):") - code.append('\traise aetools.Error, aetools.decodeerror(_arguments)') - code.append("if _arguments.has_key('----'):") - code.append("\tprint _arguments['----']") - code.append('# end event ' + `i`) - return string.join(code, '\n') - - def gettarget(self, target): - '''get the signature for the target application''' - target = target[1:-1] - if target == 'Finder': - return "MACS" - apps = processes() - for name, creator in apps: - if name == target: - return creator - return '****' - - def makecode(self): - code = [] - code.append("\n\n") - code.append("# code generated by AECaptureParser v " + __version__) - code.append("# imports, definitions for all events") - code.append("import aetools") - code.append("import aetypes") - code.append("class eventtalker(aetools.TalkTo):") - code.append("\tpass") - code.append("# the events") - # print the events - for i in range(len(self.events)): - code.append(self.printevent(i)) - code.append("# end code") - return string.join(code, '\n') - -def addquotes(txt): - quotes = ['"', "'"] - if not txt[0] in quotes and not txt[-1] in quotes: - return '"'+txt+'"' - return txt - - - - - - -# ------------------------------------------ -# the factory -# ------------------------------------------ - -# for instance, this event was captured from the Script Editor asking the Finder for a list of active processes. - -eventreceptacle = """ - -[event: target="Finder", class=core, id=setd] -'----':obj {form:prop, want:type(prop), seld:type(posn), from:obj {form:name, want:type(cfol), seld:–MoPar:Data:DevDev:Python:Python 1.5.2c1:Extensions”, from:'null'()}}, data:[100, 10] -[/event] - -""" - -aet = AECaptureParser(eventreceptacle) -print aet.makecode() diff --git a/Mac/Contrib/AECaptureParser/readme.txt b/Mac/Contrib/AECaptureParser/readme.txt deleted file mode 100644 index 150611143e..0000000000 --- a/Mac/Contrib/AECaptureParser/readme.txt +++ /dev/null @@ -1,5 +0,0 @@ -AECaptureParser is a tool by Erik van Blokland, erik@letterror.com, which -listens for AppleEvents and turns them into the Python code that will generate -those events when executed. - -Lots more information is in the docstring in the code. diff --git a/Mac/Contrib/BBPy.lm/BBPy.c b/Mac/Contrib/BBPy.lm/BBPy.c deleted file mode 100644 index bcb8d4e9d0..0000000000 --- a/Mac/Contrib/BBPy.lm/BBPy.c +++ /dev/null @@ -1,456 +0,0 @@ -#include - -#define DEBUG 0 - -#define kComponentSignatureString "BBPy.LM" -#include - - -#include -#include -//#include - -#include -#include -#include -#include - -#include - -#if DEBUG -void debugf_(const char* func,const char* fileName,long line, const char*fmt,...) -{ - va_list arg; - char msg[256]; - va_start(arg, fmt); - vsnprintf(msg,256 ,fmt, arg); - DebugAssert(COMPONENT_SIGNATURE, DEBUG_NO_OPTIONS, kComponentSignatureString ": " , msg, nil, fileName, line, 0 ); - - //debug_string(msg); -} -#define debugf(FMT,...) debugf_( __FUNCTION__,__FILE__, __LINE__,FMT,__VA_ARGS__); -#else -#define debugf(FMT,...) -#endif - -typedef const char *Str; - - -enum{ - kPyBBLMStringSubst = kBBLMFirstUserRunKind -}; - -#define iswordchar(x) (isalnum(x)||x=='_') - - -struct runloc{ - bool past_gap; - long pos; - long last_start; - unsigned char*p; -}; - -char start(struct runloc& r,BBLMParamBlock &pb) -{ - r.past_gap = false; - r.last_start = pb.fCalcRunParams.fStartOffset; - r.pos = pb.fCalcRunParams.fStartOffset; - r.p = ((unsigned char*)pb.fText) + pb.fCalcRunParams.fStartOffset; - // Adjust for the gap if weÕre not already past it. - if ((!r.past_gap) && (r.pos >= pb.fTextGapLocation)){ - r.p += pb.fTextGapLength; - r.past_gap = true; - } - return *r.p; - -} - -char nextchar(struct runloc&r,BBLMParamBlock &pb) -{ - if ( r.pos< pb.fTextLength){ - ++r.pos; - ++r.p; - if ((!r.past_gap) && (r.pos >= pb.fTextGapLocation)){ - r.p += pb.fTextGapLength; - r.past_gap = true; - } - return *r.p; - } - else{ - return 0; - } -} - -bool addRun(BBLMRunCode kind, int start,int len , const BBLMCallbackBlock& bblm_callbacks) -{ - if (len > 0){ // Tie off the code run we were in, unless the length is zero. - debugf("Run %d %d:%d", kind, start, start+len-1 ); - return bblmAddRun( &bblm_callbacks, 'Pyth', - kind, start, len, false); - - } - else{ - return true; - } -} - -bool addRunBefore (BBLMRunCode kind,struct runloc& r, const BBLMCallbackBlock& bblm_callbacks) -{ - bool more_runs = addRun(kind, r.last_start, r.pos - r.last_start, bblm_callbacks); - r.last_start = r.pos; - return more_runs; -} - -bool addRunTo (BBLMRunCode kind, struct runloc& r, const BBLMCallbackBlock& bblm_callbacks) -{ - bool more_runs = addRun(kind, r.last_start, r.pos - r.last_start+1, bblm_callbacks); - r.last_start = r.pos+1; - return more_runs; -} - - -bool colorstr( char delim, - BBLMParamBlock &pb, - struct runloc &r, - const BBLMCallbackBlock &bblm_callbacks) -{ - bool tripple = false , pers = false, lookup = false, more_runs = true; - char c = nextchar(r,pb); - - if (c == delim){ - c = nextchar(r,pb); - if (c == delim){ - tripple = true; - c = nextchar(r,pb); - } - else{ - //double - return addRunBefore(kBBLMRunIsSingleString,r,bblm_callbacks); - } - } - while (c && more_runs){ - if (pers ){ - if (isalpha(c)){ - more_runs = addRunTo(kPyBBLMStringSubst,r,bblm_callbacks); - } - else if (c == '('){ - lookup = true; - } - } - pers = false; - if (c == delim){ - if (tripple){ - if ((c = nextchar(r,pb))== delim && (c = nextchar(r,pb)) == delim){ - break; // end of tripple-quote. - } - } - else{ - break; // end of single-quote. - } - - } - else if (c== '\\'){ - nextchar(r,pb); - } - else if (c=='\r'||c=='\n'){ - if (!tripple){ - break; - } - } - else if (c=='%'){ - more_runs = addRunBefore(kBBLMRunIsSingleString,r,bblm_callbacks); - pers = true; - } - else if (c==')' && lookup){ - more_runs = addRunTo(kPyBBLMStringSubst,r,bblm_callbacks); - lookup = false; - } - c = nextchar(r,pb); - } - return more_runs && addRunTo(lookup?kPyBBLMStringSubst:kBBLMRunIsSingleString,r,bblm_callbacks); -} - -bool colorcomment(BBLMParamBlock &pb, - struct runloc &r, - const BBLMCallbackBlock &bblm_callbacks) -{ - while (char c = nextchar(r,pb)){ - if (c=='\r'|| c=='\n'){ - break; - } - } - return addRunTo(kBBLMRunIsLineComment,r,bblm_callbacks); -} - -void CalculateRuns(BBLMParamBlock &pb, - const BBLMCallbackBlock &bblm_callbacks) - -{ - const struct rundesc *state = NULL; - bool more_runs=true; - - struct runloc r; - - char c = start(r,pb); - - while (c && more_runs){ - loop: - // Process a char - if (state==NULL){ - //If we're in the basic 'code' state, check for each interesting char (rundelims[i].start). - switch (c){ - case '\'': - case '"': - more_runs = addRunBefore(kBBLMRunIsCode,r,bblm_callbacks); - if (more_runs){ - more_runs = colorstr(c,pb,r,bblm_callbacks); - } - break; - case '#' : - more_runs = addRunBefore(kBBLMRunIsCode,r,bblm_callbacks); - if (more_runs){ - more_runs = colorcomment(pb,r,bblm_callbacks); - } - break; - default: - break; - } - - } - c = nextchar(r,pb); - } - if (more_runs){ - addRunBefore(kBBLMRunIsCode,r,bblm_callbacks); - } - - -} -static void AdjustRange(BBLMParamBlock ¶ms, - const BBLMCallbackBlock &callbacks) -{ - DescType language; - BBLMRunCode kind; - SInt32 charPos; - SInt32 length; - UInt32 index = params.fAdjustRangeParams.fStartIndex; - - while( index > 0 && - bblmGetRun(&callbacks, index, language, kind, charPos, length) && - (kind==kPyBBLMStringSubst||kind==kBBLMRunIsSingleString)){ - index--; - }; - params.fAdjustRangeParams.fStartIndex = index; -} - - -// The next couple funcs process the text of a file assumming it's in 1 piece in memory, -// so they may not be called from CalculateRuns. - -bool matchword(BBLMParamBlock &pb, const char *pat ,unsigned long *pos) -{ - const char *asciText = (const char *) (pb.fTextIsUnicode?NULL:pb.fText); - - int i; - for (i=0; pat[i]; i++){ - if (*pos+i>=pb.fTextLength){ - return false; - } - if (asciText[*pos+i] != pat[i]){ - return false; - } - } - if ((*pos+i= 0){ - for (int i=0; i <= nest; i++){ - if (indent<=indents[i]){ - nest = i; - indents[nest]=indent; - goto x; - } - } - indents[++nest]=indent; - x: - - if (matchword(pb,"def",&pos)){ - addItem( pb, pos, nest, kBBLMFunctionMark, &bblm_callbacks); - } - else if (matchword(pb, "class", &pos)){ - addItem( pb, pos, nest, kBBLMTypedef, &bblm_callbacks); - } - } - eat_line(pb,&pos); - } - -} - -OSErr main( BBLMParamBlock ¶ms, - const BBLMCallbackBlock &bblm_callbacks, - const BBXTCallbackBlock &bbxt_callbacks) -{ - OSErr result; - - if ((params.fSignature != kBBLMParamBlockSignature) || - (params.fLength < sizeof(BBLMParamBlock))) - { - return paramErr; - } - - switch (params.fMessage) - { - case kBBLMInitMessage: - case kBBLMDisposeMessage: - { - result = noErr; // nothing to do - break; - } - - case kBBLMCalculateRunsMessage: - CalculateRuns(params, bblm_callbacks); - result = noErr; - break; - - case kBBLMScanForFunctionsMessage: - ScanForFunctions(params, bblm_callbacks); - result = noErr; - break; - - case kBBLMAdjustRangeMessage: - AdjustRange(params, bblm_callbacks); - result = noErr; - break; - - case kBBLMMapRunKindToColorCodeMessage: - switch (params.fMapRunParams.fRunKind){ - case kPyBBLMStringSubst: - params.fMapRunParams.fColorCode = kBBLMSGMLAttributeNameColor; - params.fMapRunParams.fMapped = true; - break; - default: - params.fMapRunParams.fMapped = false; - } - result = noErr; - break; - - case kBBLMEscapeStringMessage: - case kBBLMAdjustEndMessage: - case kBBLMMapColorCodeToColorMessage: - case kBBLMSetCategoriesMessage: - case kBBLMMatchKeywordMessage: - { - result = userCanceledErr; - break; - } - - default: - { - result = paramErr; - break; - } - } - return result; -} \ No newline at end of file diff --git a/Mac/Contrib/BBPy.lm/BBPythonLM.mcp b/Mac/Contrib/BBPy.lm/BBPythonLM.mcp deleted file mode 100644 index 232954bb778914fd541d7af644736222eb1dde09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45208 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 W14AW5{mM2_m_y9h1f|a^kT?Jo_DdQ7 diff --git a/Mac/Contrib/BBPy.lm/BBpy.r b/Mac/Contrib/BBPy.lm/BBpy.r deleted file mode 100644 index 7d80b4a427..0000000000 --- a/Mac/Contrib/BBPy.lm/BBpy.r +++ /dev/null @@ -1,35 +0,0 @@ -#include "BBLMTypes.r" -#include "MacTypes.r" - -#define kKeyWords 1057 - -resource 'BBLF' (128, "Python Language Mappings", purgeable) -{ - kCurrentBBLFVersion, - - { - kLanguagePython, - (kBBLMScansFunctions|kBBLMColorsSyntax|kBBLMIsCaseSensitive), - kKeyWords, - "Python", - { - kNeitherSourceNorInclude, ".py", - } - } -}; - -#define VERSION 0x1, 0x0, final, 0x0 - -resource 'vers' (1) { - VERSION, - verUS, - "1.1", - "1.1," -}; - -resource 'vers' (2) { - VERSION, - verUS, - $$Date, - $$Date -}; diff --git a/Mac/Contrib/BBPy.lm/Python b/Mac/Contrib/BBPy.lm/Python deleted file mode 100644 index 67ee70fdcb..0000000000 --- a/Mac/Contrib/BBPy.lm/Python +++ /dev/null @@ -1 +0,0 @@ -(This file must be converted with BinHex 4.0) :!!"#3Na08LTMD!#3""5,!!!$"mhr5Qpj)A"PCQC`Gh"M!!!!!EE-IXm!N!d$!!) !N!6rN!3!N!B5C!!!%Q3!!"*N!!!!i!!%"!$rN!3!N!B"E!!!!93!!!%l!!!68!) ""!$rN!3!N!pB!!!!J!3%"!#3#!%!!!!8rj!%!*!%rj!%!*!2!3!!!%3!!!"3!!! !8!!!!!%!N!8"!*!&"3#3"%)$J!0'!)!(3!X!N")i!!!!Q!-!!)!%!#D3!!-!#)! %!#D3!!-!")#N!"+!"!!QI!8#&*!!!`!-L!-!!#J!!!"!JJ!XJ+-!")!%!"jm"3" !3B!!()#M!!b!"!!LI!8#&*!!!`!-1!!!!CJ$!!#!B`!-L'-!!%k!!#!!N!8*)%! !N!GS!#)ZFh4KFR4IAdC50R*eEQa[Be)a0%*#6%e3BA*KE8*XEf0VJ+-!")!%!"C m"3"!3)!!@$J&!!'3!!-!")#M!!`i"3!"N!!$!!b)!`!!+!!!!%##!#b!S`!%J!3 !(R`&!%""J!!FJ+-!$)!%!#*m"3)8N!!$!!`i!!!"Q!-!!)"M!!b)B`!!6S!!)$K J!!"1J!!J!*!"!!*!(E!!P,QjPH(4MD'&bAep'8MCbG@jXEf05-64#3Na08'& bB@e#E'pMD`"m#!+QN!!"!!L8)Ir!I'JEH(b!)hKmTbYi,!F!!%#"!#4m`c0i2)" 3H6L%G'Kp"80iI!B$H$N!!!")!!"45!!!#$KJ!!'!!3")1#%!3(`)!kC1J!!J!*! ""J!#3"P3!)LjKC'45G@jIAdCcD@P53c%h3N*-680KE'aLB@0V3Qa[BfYm#!+ QN!!"!!L8)Ir!I'NEH(b$)hKmT#YiI-8cH(cQ1hKp"d0iJBN!,%J!%&f!33!89'! '2RaJ!0!`!rrrI!!C%&3$"Mk!!3")1#%!3(`)!kC1J!!J!*!""J!#3"P3!+5j LBQaY3@4N8R9ZAep'8%-a0d*#6%e$B@aXBQ&MDd*XEf0V9@acE'aL!(`)!UD6iIr mN!!"!!L8)Ir!I*mMH(bQ+hL!R`!)J"m!"(bN!&",rrl&J"m!"*!!(`!)J!%!5$J K!%"m#!1QJq(rr%k!!#!!N!8*)%'!!3#3"83!,LjKC'45G@j#C@C[FQ9IAdCc8MC bG@jXEf053c%h3N*-680KE'aLB@0V3Qa[BfYm#!+QNq(rr*!!!3!)P#(r`(bI)hK mTLYiJ*m!#)!I!!4mT!"31+8!!8[rrMf!R`!%1!3!!C!!(`!)J!%!5$JK!%"m#!1 QJq(rr%k!!#!!N!8*)%'!!3#3"8`!+LjKC'45G@j8EepI4R050R*eEQa[Be*$-6G #3Na03f&XE'*KBfY#E'pMDh`)!UDq`IrBN!!"!!L8)Iq3!(af'hKmQL0iI,XVH(c F-hJl)!!!1q!!!$[!!!!lS!!"If2EH(p%dhK,rrd"I(FEH(lJ"h4qf!GdI!$!!%# #!%KrBpYiId66H%[rr1&mB!GdI!$!!%##!"`l)!!"If2EH(p%dhK,rrc&I(FEH%J !!"JiB!!&If6EH(q&ihK,rrjT5!!"Q&Fj"Mjqf!Gd5!!"+&IJ"MiS!!!!3B)!2(l M"h4)!!(G,!-!!%'#!"`iB!%!If6EH(q&ihK,rrkaI(dEH%J!!"4qi!Gd,!!!+%# #!!Jl`!!"1q!!!(lJ"h4m!-!!3))!3#JC!!""JJ$NIf2EH(p%dhK,rr`eI'!(G(` B!!"!JJ#NIf2EH(p%dhK,rr`GI'!(G(`B!!""JJ#d5!!!L#`!!&a!JJ!8If2EH(p %dhK,rr[j5!!!F#`!!!e"JJ!-,!!!#N##!"!S'3!!3B)!J%J!!&3X!!!P3))!)$K J!!9rC0YiIiAMH%[rrAemI4Yi1q!!!8J!!$!X!!!T3))!+&I!"MiS!!!!3B)!($K J!3"rC0YiIiAMH%[rrG&mI4Yi1m!!!(pMfhKr400i5rrlIAah'hKqi!Gd,!!!!%' #!""AS!Bq+!!!!%##rXJl!!!!9k!'2LJ!!!""JJ!m9m!'2LJ!!!""JJ!-1!!"!%J !!!Ji!!!&I!-(0(pNfhKrKH0i5rrpD94J"MiS!!!!3B)!#$X!!!&r!m0iJ!%!H$J K!("m#!1QZX(rf%k!!#!!N!8*)%'!#J#3"!)m!$XZBfpXEh*cG(*IAdCM8M%d3N* -69"KFQ&Y3Qa[BfY50R*eEQa[Be*$-6G#3Na03f&XE'*KBfY#E'pMD`!!!$L#!&4 8B!BqI!3!VP3$"M*1J!!J!*!"!!*!(&!!3,QPcB@a`D'&IAc0cG'4'D3!!I!J #TT2Krrb6`IriNk(rp*!!!3!)P#(rX(ap'hKmRL0iI,mVH%J!!"KmB!Gd,!!!$8' #!#3X!!!+3B)!((r$mhKrT1Yi5rrk-AaJ"h3X!!!!3),rf$KJ!!4ra20iIqAlH%[ rr&@!!3"B1#%!8(`)!kD$iIrmJm(rq)1Krr41J!!J!*!""J!-!N!@!!$iZBfp XEh*MEfeYC@jdAep'8M%d3N*-69"KFQ&Y3Qa[BfY50R*eEQa[Be*$-6G#3Na03f& XE'*KBfY#E'pMDh`)!UD6iIrmNm(rq*1Krr56JIr`N!!"!!L8)IqJI(`EH(bG)hJ li!!"1'%!1(q%ihK,rrMCI(iEH%J!!+ar`!Gd,!!!)d'#!&a!J!!3,!!!)N#!!"4 )!!#!,!!!*d'#!!K)!!"d1'!!!$L"!$KrTHYi5rrkmAar'hKAi!Bq+!!!!%'#!&4 r`r0iIi6MH$LK!$KrTZYi5rrlfAar'hK)!!!i1'!!!$L"!$KrTHYi5rrkYAar'hK Ai!Bq+!!!!%'#!"KrJq0i1)%!1(qPkhK,rrjPI(mEH$KK!$KrK10i5rribAaq'hK r`!Gd,!!!!%'#!""Ai!Bq+!!!!%##rd4Ai!Bq+!!!!%'#!"3iB!!!1)%!1(qPkhK ,rrT0J!%!D$JK!'"m#!1QJq(rr)2"rrL$SIrdJi(rm%k!!#!!N!8*)%'!"!#3"!% i!$FZ3f&XBh9XBA4P8R9ZFepI4P)a0%*#6%e3BA*KE8*XEf0V8N-a0d*#6%e$B@a XBQ&MDd*XEf0V!!!!I!J#TT2Krrb6`IriNk(rp*!!!3!)P#(rS(ap'hKmRL0iJrd !*NJ!!!Jlrrrr+"m!!%'#!%"r`r0iIq6lH$LK!%3i`3"!11%!2$N"!$K)!!#09'! '2LJ!!!""JJ!BU!%!3#`!!3""J[r%,!!!"8'#rlb6r3!QJ!%!D$JK!'"m#!1QJq( rr)2"rrL$SIrd6S!!)!#3"3NJ3B!$!*!&N!!!05j"C'TeFh45B@jRC9pI4P)a0%* #6%e3BA*KE8*XEf0V8N-a0d*#6%e$B@aXBQ&MDd*XEf0V!(`)!UD3!!%!#*3Krm" mD4YiI)-MH(bN+hKma60iI1BlH(d(3hL"L3!N5!!)dB""!"48B!BqI'!!d$!$rrp m!"N39!-'2S!"!%Ji)3"!I!J$TNk!!#!!N!8*)%'!!*!'9!!Y,Q*LE'e(CA45G@j IAdC33c%h3N*-680KE'aLB@0V3Qa[BfYX8P9X8R05E&*X!(`)!UD6iIrmNm(rq*1 Krr53!!%!#*3Krl"m[LYiL!-!'LJ!!!""JJ!-1k!!!%J!!!L$S`!51q!!!%J!!%5 !(J!!I+$k&)!$!"Cm"3"!3B!!$$KJ!!")!!#3!(`G++jm"3GdI-!(G(`&!!""JJ! -1'!!!%J!!(3lr`!"1)3!!BM%!!"m`!Gd,!!!!%##rl5!(J!!I)$k&)!$!"Cm"!" !3)!!1(ap)+jmB`Gd5!!!N5`$!!"!JJ!FJ"i!!(`!qK4m(3#ZI!!(G#`!!&p!JJ! -1'!!!%J!!"5!(J!!I!$k&*!!(J!!1'!!!B!"!&Ji)3"3I!J$TS2Krrb$`IriJk( rp%k!!#!!N!8*)%'!!`#3"!%!!#3ZE@&dBfKhEh*NAep'8M%d3N*-69"KFQ&Y3Qa [BfY33f039@`!!$L#!&48B!BqI!3!VR!$!0"1J!!J!*!"!!*!(&!!3,QPcB@a ZG@eIAc0cG'4'D3!!L!-!'LJ!!!""JJ!-1-!!!%J!!!L!``!511!!!%J!!'Km"LL ZI!!(G#`!!#""JJ!J3)!!%#`!!!P"JJ!S5!!!3#`!!#0"JJ!`5!!!0)#N!!!i"3! "N!!%!!!ij`!"5!!!+)#N!!!i"3!"N!!%!!!ij`!)5!!!&$KJrrp1J!!JI1-lH%k !!##!T!!!J!-!&R`&!%""J2q3!%k!!#!!N!8*)%!!N!HB!#-ZE@&dBfKTEQ4PER4 IAdC5-64#3Na08'&bB@e#E'pMDe"9E!!!!)J$!"SS!!!!3B)!$$M!!!")!!!BJ-- !%NJ!!"#!T!!!1!8!!C!!"!!!J+3!!(`'++jm!!Gd,!!!$8'#!#JX!!!+3B)!))! $!"Cm"3"!3B$rd%J!!"#!T!!!1!8!!C!!"!!!J+3!!(`'++jm!!Gd,!!!$8'#!!` X!!!+6))!))!$!"Cm"3"!3B$rd%k!!#!!N!8*)%!!N!H-!#!ZC@&dAfaTEQ9IAdC 5-64#3Na08'&bB@e#E'pMDe"9E!!!I!J#TVlKrpb3!!%!#*3Krf"mHKYiI*XMH(b m+hKmh60iI2ilH$[J!!!i!!!!N!!"!'L$'J!5IcMD&%J!!!`lH`!"1cN!!BKj!!" mB`Gd5!!#@5`$!!""JJ!3J"S!&R`E!%""J2rFIhIEH%J!!!`lH`!"1rm!!AmifK5 )H3!!I'-(G%[rrENX!`!!3))!&)JC!!"m!!Gd,!!!Ad##!"#!'J!@I"X!3%'!rmK r`r0iJ*S!*RbiZK4rj[YiL"S!'RcJ!0!`"rrrI!!j%&3("Mij!3"S5!!"5C,K!$L 6B3!mNZ%!3*0K!%55i3")9k!'2T!!!3"3Ni%!6$J!!!#3!!%!9)!"!'L3!!%!@*2 K!&ar`r0iJ*S!+MLK!$Ji`3"N5!!!GB!"!+Ji)3#JI!J$TVVKrpa1J!!J!*!" "J!N!N!3"-!"(,Q&NC%PdC@eIAdC5-64#3Na08'&bB@e#E'pMDe9XD6%h3N*-68C eEQ0dD@pZ5fPZC(033c%h3N*-680KE'aLB@0V3Qa[BfX!!!"m#!+QN!!"!!L8)Ir !I'FEH(b$)hKmT#YiI-8cH)'(!"4)!!1jJ%%!&)!"!%Ji)3"!I!J$TNk!!#!!N!8 *)%'!!*!'1!"#,Q*LE'e"C'4'G@jMG'P[EP4[6'PcG&pI4P"$-6G#3Na03f&XE'* KBfY#E'pMDe9X8M%b3N*-69"bEf0*EQC[8&9XI!J#TT!!!3!)P#(r`(aT'hKmJb0 iI+3VH(c&-hKmjMYiI3G$H)'*!"")!!-PJ%%!&)!"!%Ji)3"!I!J$TNk!!#!!N!8 *)%'!!*!'3!!h,Q*LE'e"C'48EfYPEP4[3R9QCQ9bAep'8%-a0d*#6%e$B@aXBQ& MDd*XEf0V9@a3GP9XBP"9E!!!!$L#!&48B!BqI!3!VP3$"ha1J!!J!*!"!!*! (&!!3,QPcFh"KBf9IAc0cG'4'D3!!I!J#TVpKrqb3!!%!#*3Kri"mI4YiI*iMH$[ L!"`iJJ&8J'3!!)!%!!53!'%!6*!!!3"3J'3!#)!%!!b3!'%!9*!!!3"BJ!3!%*! !!3"F1f!!!$J!!!#3!!%!5$Z"!%a)!!$FIk2VH$L"!%K,rrXa,!-!!%'!!,`iS!! !1)%!6$JE!!&m#31Q,"X!!%'!!#b!"!!!I!-!!%'"!"4mZbYi9+!31Ram!5j)!!! F1)3!"$LP!!&#!2rF1hX!!9GJ%$TmI!%ZIk2VH$L#!"!iS3")5rrjA94J"MiS!!! !3B)!)(qMkhL!J3")IfAEH$M!!!"rar0i5rrm18J!!$KrSqYiIq6lH$LK!%K,rrN P9'!'2LJ!!!""JJ!FIk2VH)#"!%KrCGYi1-!!!Ar(mhK,rr`"Ik2VH$L"!%K,rrX eJ'%!5)!G!"Cm!`"!3B$r()!"!)Ji)3#!I!J$TVYKrqa1J!!J!*!""J!8!N!3 "@!!k,P0MB@j'Eh*'G@jMG'P[ER0IAdC5-64#3Na08'&bB@e#E'pMDe*$-6G#3Na 03f&XE'*KBfY#E'pMDh`)!UD3!!%!#*3Krm#!S`!!2!@YeLJ!BfK!JJ!3J!-!##J !!LC!J!!-1'$rcNJ!!*!!L!-!$#J!!!Y"J3#!1+)!*&3!%$TmT3!ZI+N$TNk!"#! iB!!!5!!!D%[rp6NiB!!!5!!!A%[rrINiB!!!5!!!8%[rpU8iB!!!5!!!4+J$!#B X!!%!3B)!#%J!!"Ji!!!)X!-!+$J!!!'B!`!U5!!!$$J!!!#B!`!U1'!!!%J!!"! iB2q!5!!!#$KJrmk!!3")1#%!3(`)!kC1J!!J!*!""J!#3"X`!"5jYB@PZ!)! -!!#3!%%!&(`*!kD!6!!%6S!%)%k!!#!!N!`$)93$)53$)4`#*3&8C'9Q!b)4D!3 PBfaKFh-&)K)JJJ)+%EJ4Z"(-%GJ4`")B%KJ4j")B%KJJJJ%5'!'3#3+3"3'3%J3 )N!m`N!S)N!HJN!D!N"3)N!CJN!C!N"3)N!3"J*!(3*!C#*!(3!L3"S#!#*!13%! )N!S%J*!%3!L3#%#!#*!%3%!)N!@!N!X)J*!%#*!+!836!!!"!!!!!Q3!!!&N!!! !S`#3mai!!3!"8(PdD!!!!"-%)3C3HA4SEfi!!!%!!!-ZF(N!!!!2!3#!!!!!!c% Z-33a,M%X!!!!1!%!J!!!!"KAC@4ZCA0NBANX)%eKFQ0S)$FX)$)`-$%B9f9NEQ9 cC'&j,#"0BA*MD#!h,#!b-$!a!!!!Pf&ZC!N0BA0cCA*d$@*bC@&V$@0XBA0c$@0 [ER4TER9P$@4PCJeNC@`0C@aTCJePE(0P$@9iBf9`G!ePH'9M$@CTEQ&XE(N0CQp b$@CbEfd0Cfa[BQ&X$@PQ$@PYF'pbG!eTEJeTF`eXB@eLC'%0EQpd$@pb$A"KFh- 0F(*TER30FQ&TFf80FQ9dGA*Z$A4bH3ehD'PXC3d!!!"8!*!,!3#3%`&`Gh"M!*! 6!3#3%63'8(PdD'pZ!*!&!3!!!!*N!!!"C!!!!+066e*8!qS!J!!F!(S!!d*#6%B !!!!L9%9B9!!!!#jMCR*R!!!!1RCPFR-!!3"'!)!!!#!!N!F%)3!C!!!!F3#3"[r r!!!"$!BkdC!!!!(rr`!!!#)!N!8#rrm!!!!e!*!%'&"jG'K[EL"-B@jRG@&RC5" 0BA"`D@jRF`p3HA4SEfiJ5f9jGfpbC(26q`: \ No newline at end of file diff --git a/Mac/Contrib/BBPy.lm/Python Keywords.rsrc b/Mac/Contrib/BBPy.lm/Python Keywords.rsrc deleted file mode 100644 index f889e90903..0000000000 --- a/Mac/Contrib/BBPy.lm/Python Keywords.rsrc +++ /dev/null @@ -1 +0,0 @@ -(This file must be converted with BinHex 4.0) :!!"58e*$4'peC`#3#!(GM(8!N!3"!!!!!CX!!!#E!!!!3J#3mjGKEQ3*$@&cFf9 bG!eLFQ9KD`eME'&cF`eMEfjdD@jeC3eNC@B0C'9X$@9XD@B0C@acC3ePH'0PF(3 0CAKPB`eQD@jKE'aj$@C[FJeQFQpY$@GXEf*KE!eTCJeTEA"[FR30D@i0DA-0E'& YBQ4K$@j[G!e[FJe`BA0c$A"bD@jd$A*KDA0P$A*PG(9bEJedFRN0GfKTE'80!!! "!!!!!CX!!!#E!!!!3J1S!h`#qJ!!!"`!-J!!9%9B9!!!!!S%)3#3#Jp3HA4SEfi J5f9jGfpbC(0&9`: \ No newline at end of file diff --git a/Mac/Contrib/BBPy.lm/PythonBBLM.txt b/Mac/Contrib/BBPy.lm/PythonBBLM.txt deleted file mode 100644 index 540060a151..0000000000 --- a/Mac/Contrib/BBPy.lm/PythonBBLM.txt +++ /dev/null @@ -1,12 +0,0 @@ -This is the Python Language Module for BBEdit. - -This software is a plugin to Bare Bones Software's BBEdit 6.0.2 (or more), designed to make editing & browsing Python Language files easer. - -It parses any file ending in .py (or extentions of your choice.) providing BBEdit with the information BBEdit needs to provide services for python files similar to those it provides for 'C'. Namely: syntax coloring and populating BBEdit's '€' popup menu with file's functions and classes. - -This Plug-in needs to be placed in your :BBEdit 6.0:BBEdit Support:Language Modules: folder. - -If you wish, I have no objections to redistributing it in whole or in part, modify it, or beating small fury animals to death with rolled up printouts of the source code. - -Christopher Stern -cistern@earthlink.net \ No newline at end of file diff --git a/Mac/Contrib/BBPy/PythonSlave.py b/Mac/Contrib/BBPy/PythonSlave.py deleted file mode 100644 index b60f0343ce..0000000000 --- a/Mac/Contrib/BBPy/PythonSlave.py +++ /dev/null @@ -1,129 +0,0 @@ -"""PythonSlave.py -An application that responds to three types of apple event: - 'pyth'/'EXEC': execute direct parameter as Python - 'aevt', 'quit': quit - 'aevt', 'odoc': perform python scripts - -Copyright © 1996, Just van Rossum, Letterror -""" - -__version__ = "0.1.3" - -import FrameWork -import sys -import traceback -import aetools -import string -from Carbon import AE -import EasyDialogs -import os -from Carbon import Qd -from types import * -from Carbon.Events import charCodeMask, cmdKey -import MacOS -from Carbon import Evt - -def dummyfunc(): pass - -modulefilename = dummyfunc.func_code.co_filename - -def Interact(timeout = 50000000): # timeout after 10 days... - AE.AEInteractWithUser(timeout) - - -class PythonSlave(FrameWork.Application): - def __init__(self): - FrameWork.Application.__init__(self) - AE.AEInstallEventHandler('pyth', 'EXEC', ExecHandler) - AE.AEInstallEventHandler('aevt', 'quit', QuitHandler) - AE.AEInstallEventHandler('aevt', 'odoc', OpenDocumentHandler) - - def makeusermenus(self): - self.filemenu = m = FrameWork.Menu(self.menubar, "File") - self._quititem = FrameWork.MenuItem(m, "Quit", "Q", self._quit) - - def do_kHighLevelEvent(self, event): - (what, message, when, where, modifiers) = event - try: - AE.AEProcessAppleEvent(event) - except AE.Error, detail: - print "Apple Event was not handled, error:", detail - - def do_key(self, event): - (what, message, when, where, modifiers) = event - c = chr(message & charCodeMask) - if modifiers & cmdKey and c == '.': - return - FrameWork.Application.do_key(self, event) - - def idle(self, event): - Qd.InitCursor() - - def quit(self, *args): - raise self - - def getabouttext(self): - return "About PythonSlaveƒ" - - def do_about(self, id, item, window, event): - EasyDialogs.Message("PythonSlave " + __version__ + "\rCopyright © 1996, Letterror, JvR") - - -def ExecHandler(theAppleEvent, theReply): - parameters, args = aetools.unpackevent(theAppleEvent) - if parameters.has_key('----'): - if parameters.has_key('NAME'): - print '--- executing "' + parameters['NAME'] + '" ---' - else: - print '--- executing "" ---' - stuff = parameters['----'] - MyExec(stuff + "\n") # execute input - print '--- done ---' - return 0 - -def MyExec(stuff): - stuff = string.splitfields(stuff, '\r') # convert return chars - stuff = string.joinfields(stuff, '\n') # to newline chars - Interact() - saveyield = MacOS.EnableAppswitch(1) - try: - exec stuff in {} - except: - MacOS.EnableAppswitch(saveyield) - traceback.print_exc() - MacOS.EnableAppswitch(saveyield) - -def OpenDocumentHandler(theAppleEvent, theReply): - parameters, args = aetools.unpackevent(theAppleEvent) - docs = parameters['----'] - if type(docs) <> ListType: - docs = [docs] - for doc in docs: - fss, a = doc.Resolve() - path = fss.as_pathname() - if path <> modulefilename: - MyExecFile(path) - return 0 - -def MyExecFile(path): - saveyield = MacOS.EnableAppswitch(1) - savewd = os.getcwd() - os.chdir(os.path.split(path)[0]) - print '--- Executing file "' + os.path.split(path)[1] + '"' - try: - execfile(path, {"__name__": "__main__"}) - except: - traceback.print_exc() - MacOS.EnableAppswitch(saveyield) - MacOS.EnableAppswitch(saveyield) - os.chdir(savewd) - print "--- done ---" - -def QuitHandler(theAppleEvent, theReply): - slave.quit() - return 0 - - -slave = PythonSlave() -print "PythonSlave", __version__, "ready." -slave.mainloop() diff --git a/Mac/Contrib/BBPy/README b/Mac/Contrib/BBPy/README deleted file mode 100644 index f8c32f7388..0000000000 --- a/Mac/Contrib/BBPy/README +++ /dev/null @@ -1,45 +0,0 @@ -"Run as Python" -- a BBEdit extension to make the Python interpreter execute the -contents of the current window. - -version 0.2.3, 18 september 1996 - -Note by Jack: - Also check out the BBPy.lm contributed software, which is a Python language - module for BBedit, providing syntax coloring and function/class navigation. - -contents: -- "Run as Python" -- the extension -- PythonSlave.py -- the "slave" script that handles the AppleEvents - -- source -- source code & CW9 project for the extension - -quickstart: -- drop "Run as Python" in BBEdit extensions folder -- double-click PythonSlave.py -- start BBEdit -- type some code -- go to Extensions menu: "Run as Python" -- be happy - -warning: - since PythonSlave.py runs its own event loop and we have no interface - to SIOUX you *cannot* copy from the console. Duh. - -extra feature: - while PythonSlave.py is running you can still double-click Python - documents, they will get executed as if Python was not already running. - -bugs: - perhaps - -acknowledgements: -- Thanks to Joseph Strout for valuable input and beta testing. -- Thanks to Mark Roseman for providing code that can launch - PythonSlave.py from BBEdit. - - -Have fun with it! -Please report bugs, or fix 'em. Suggestions are always welcome. - -Just van Rossum, Letterror - diff --git a/Mac/Contrib/BBPy/Run as Python b/Mac/Contrib/BBPy/Run as Python deleted file mode 100644 index 1ac688760f..0000000000 --- a/Mac/Contrib/BBPy/Run as Python +++ /dev/null @@ -1 +0,0 @@ -(This file must be converted with BinHex 4.0) :!!"#3PK88LTMD!#3#!Np!m`!N!3"!!!!#*N!!!HC!!!!T!#3)!e5G@iJBA-J8(P dD'pZE@9bCf9N@8fe69P0ELj`H@&X!J"849K88(PdD!#3','"lI%!N!B*23#3KB! !!`#3"8!""!"8!93%!ePPF`#3"N!!UJ"8!2S%!Nj[!*!&#!!m!$B"9)JqdP"jG'K [EP0XBACP,R"jdb"TFb"ZEh3JFR9ZEQPZCb`J$AG[G@aN)(P[G5"XD@YP)(4[)'a [Bf&dC5"TG$m!N!8)!!S!+!!US!)!!3!!!!i!+!!S!)`"N!!!J&99-!S!!!!%!!! #33!!!!B"!!"5!*!%"U*J#J!!3N*B9!#!!!")jq$)6VS!mN(krqSJ#+"96VS!N!" -ha-(6[S$)%(krpE4r!!!"T8J#+"96R9)j`B!@8mJE`!3)Qm!&#`[!"JHQ"pB!!% I@!!#(eJ!!bSAG!"J4")B%!%#3!#!C`c5!4!"5)")`05!B#JHJ4pB!!%3!3*!!%" R$$!Aj8ML3%M!e)"J$KpB!!)I@!!$*"IPLZ+#hE%S!&1&5S9ZZ&K260m!B%je51F 3)#4!)#`!"#B+PS"R3%U!CKa#,!!)-$bSRkG',`J`2+'BSdDaheE!4!!C3!!),`- [#Nkkrd3[!%kkrdj2l`!-+8S!"%SX!!KR"(!"SCK-h`3)6R9"q[lkdI`!!!D-)!L J9F'-6R91G5!-5IS!"LK86R8!N!4"q[rk))a1GBG6CA49F%%d!!"19[q1,`-YI&" jG'Mre&92,cacD@GZ5'lre%Ki!!4)E[r`-$`)*DJ@-"mf!%T$C`B`!f!!!F496bm m9%9B9#"Z!"4)D!!"F!!3%#m!5'lri$!m##@S&M!I0J"+3fF'-!0J!!'@98m[2&4 &@&3[,J!-,bi!%%KZrqJ`2!JPU"B`(cB!5N0R"M!$B!!"EP92,ca`HA4S,ca&@%9 $5'lrm$mmrrp#TdKZrrJ`2!X8U"B`(cB!5N0R"M!$B!!"2P925'lrq#mm,C!%5'l rk$!m"K#S&M!I0J"+3fF'-!0J!!%D98p)E[ri,ca138e&5'lri$!m"K#S&M!I0J" +3fF'-!0J!!$f98p)E[ri5'lrf%Ki!!-r2!!"5(MrrN+R3UF`2!dAU"B`(cB!$%2 pRfC)98mr2!#!3UHTK6!I0J!-3`!#CJC`!'!!!,*)E[q16VN!!!1q5J"B6fB'F!" J!!#F5'lrMNkj!!!%G$B!5N0B6fF1-!0J!!#%5N0R"$!$B(T96dKZrr!`2!)%U"B `(cB!5N0R"$!$B'*96dKZrq!`2!)%U"B`(cB!5N0R"$!$B%T96dKZrqJ`2!)%U"B `(cB!5N0R"$!$B$*96dKZrrJ`2!)%U"B`(cB!5N0R"$!$B"T96dKZrpJ`2!)%U"B `(cB!5N0R"$!$B!*`!#BI6Pj1GBa6C@jN9'9iG%&c388!!!"19[m!51FB-#CZ!!` Q,J!)6VVp`#J!,`0)E[m!U4PC6bm$)'X!!Nk3!#"I*%JJ5U!T5'lr!&P2,`T1Z3! !"RiJ(bm!,a)[#dkkrDSf!%T$6qm!%'F)2`-JD`"U6T!!)%UJ+L!%`Ba-h``B6Pi JAe"26Y#%E@&TEJ!!!%j@rjJ[#L4Z!!JYI&4&@&6rQ%(j!!!%-LP)!!![,!!!3QG )E[qB5'lrU$mm!!DTkL"X!!#J(dSZrkKQ"(!!B"JdV[qZ*@lrX!!#3HlrY%2U!!C `3+!ZF!%NAdjH6R@54f9d8(PdD'pZ8faKGQ96F'9M!!!!6PB!!#"Z!!JJ+!!J)LJ !*!b!9%9B9'B1$)&3HA4SCJC#,`!-B!BII!!"!!a1ALkI6R@-69P'58a&4NP-9%9 5!!!!6PErINMR%#!NEJ!),Aa03806rhj96bmmFfPRENKZrhj)H!!%5'lrLM!m##@ S&M!I0J"+3fF'-!0J!!'d98m[2%C14&)[2(0[F'9)E[q+2ccrrd+R5'lrq$!m#a5 S&M!I0J"+3fF'-!0J!!'%98mr%LmU!!*#TdKZrj*`!DT5-"p96d+R5'lrNNKZrr4 `!UJM-"p96d+R,`T)E[r`F!+S)c!I98p#Td+R3LG)E[rS-$`("UJ@-"mf!#"Zrr5 J+992,caKE'Pc)'lrp#m3@8m[,[rd6VN!!!Cq)"m[!%KZrq!`2!JPU"B`(b"Zrr5 J+P925'lrq#mm,C!%5'lri$!m"K#S&M!I0J"Q@P925'lri$!m!J5S&M!I)'lrm+! T98m[2'&XDA-JE[r`,a"C6bmZrr"1Z3!!"RiJ(bm!5'lrf$!m##@S&M!I)'lrm+! T98p)E[rS3UG)E[rB-$`'#DJ@-"mf!&925'lrf$!m!J5S&M!I98p)E[ri,caQFf9 X5'lrk$!m"K#S&M!I0J"96dKZrqJ`2!)%U"B`(e925'lrq%KZri*)H!!43QG)H2r r3UG#Tc!m$4HS&M!I0J"+3fF%-!0J+P925'lrq$!m!J5S&M!I0J"+3fF%-!0J%P9 25'lrJM!m!J5S&M!I0J!`!dcI"!K1ANjeN8aKG@jMD&"jG'K[EP0XBACP!!!LAb" IS#8ZJ'S#3TG1d3#3$!C"3iY!FUP!kp!!!!"(!#-J!!!!"RB`,M)Z-cPf-#ib,M- JU5"+GA0d)(CKEL"5Eh0cG@dJ,b"-CA4dCA*bEh)X)$aUGA0d3'aPG(4PFR*[FLj ZE$i!!!%!!!!)Q3!!"jN!!!#N#2`64#G-!!!!(!#@!!9fCA*c!!!!-N4*9%`!!!! q38a59!!!!%T#3PK'!!!!9N*#@%X!!!"L3N*B9!!!!'i!!Irr!!!(6JMm%5J!J2r r!*!*J2rr!!!!K!#3"B$rr`!!!*B!N!@!rrm!!!#H!*!&J!!!)!!!U!#3"!e5G@i JBA-J8(PdD'pZr0%: \ No newline at end of file diff --git a/Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h b/Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h deleted file mode 100644 index 51d206dfc2..0000000000 --- a/Mac/Contrib/BBPy/source/BB stuff/ExternalInterface.h +++ /dev/null @@ -1,716 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -#if defined(powerc) || defined (__powerc) -#pragma options align=mac68k -#endif - -typedef struct -{ - FSSpec spec; // designates file on disk - long key; // reserved for future expansion - - char tree; // 0 for absolute, 1 for project, 2 for system - Boolean found; // FALSE if file couldn't be located; if so, all other info is moot - - OSType type; // file type of found file - OSType crtr; // signature of found file's creator - - short spare0; // reserved for future expansion - long spare1; -} ProjectEntry; - -enum -{ - kNeitherTree, - kProjectTree, - kSystemTree -}; - -enum -{ - kTHINKCProject, - kTHINKPascalProject, - kCodeWarriorProject -}; - -// masks for the "flags" argument to new-convention interfaces - -#define xfWindowOpen 0x00000001 -#define xfWindowChangeable 0x00000002 -#define xfHasSelection 0x00000004 -#define xfUseDefaults 0x00000008 -#define xfIsBBEditLite 0x00000040 -#define xfIsBBEditDemo 0x00000080 - -typedef struct -{ - FSSpec spec; - OSType key; - - short error_kind; - long line_number; - - Str255 message; -} ErrorEntry; - -typedef enum -{ - kNote = 0, - kError, - kWarning -} ErrorKind; - -#define kCurrentExternalVersion 5 // current version of callbacks - -// Universal callback interfaces - -#if USESROUTINEDESCRIPTORS - -#define ExtensionUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ExternalCallbackBlock *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr)))) - -#define NewExtensionUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(OSErr))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ExternalCallbackBlock *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(AppleEvent *))) \ - | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(AppleEvent *)))) - -#define GetWindowContentsUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr)))) - -#define GetSelectionUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long *)))) - -#define SetSelectionUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))) - -#define GetDocInfoUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long *)))) - -#define GetModDateUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr)))) - -#define CopyUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Handle)))) - -#define PasteUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Handle)))) - -#define GetLastLineUPPInfo (kPascalStackBased | RESULT_SIZE(SIZE_CODE(sizeof(long)))) - -#define GetLineNumberUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define GetLineStartUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define GetLineEndUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define GetLinePosUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define InsertUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))) - -#define DeleteUPPInfo (kPascalStackBased) - -#define SetWindowContentsUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle)))) - -#define ContentsChangedUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr)))) - -#define GetFileTextUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Boolean *)))) - -#define GetFolderUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long *)))) - -#define OpenSeveralUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(StandardFileReply ***)))) - -#define CenterDialogUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(DialogPtr))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))) - -#define StandardFilterUPPInfo uppModalFilterProcInfo - -#define FrameDialogItemUPPInfo uppUserItemProcInfo - -#define NewDocumentUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr)))) - -#define OpenDocumentUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr)))) - -#define AllocateUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean)))) - -#define FindPatternUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(char *))) \ - | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(Boolean)))) - -#define ReportOSErrorUPPInfo (kPascalStackBased) - -#define GetPreferenceUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short *)))) - -#define SetPreferenceUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short *)))) - -#define StartProgressUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean)))) - -#define DoProgressUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define DoneProgressUPPInfo (kPascalStackBased) - -#define GetProjectListUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(ProjectEntry***)))) - -#define ProjectTextListUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle *)))) - -#define PresetUndoUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))) - -#define SetUndoUPPInfo (kPascalStackBased) - -#define OpenFileUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr *)))) - -#define PrepareUndoUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))) - -#define CommitUndoUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define CreateResultsUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Handle))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(WindowPtr *)))) - -typedef UniversalProcPtr GetWindowContentsProc; -typedef UniversalProcPtr GetSelectionProc; -typedef UniversalProcPtr SetSelectionProc; -typedef UniversalProcPtr GetDocInfoProc; -typedef UniversalProcPtr GetModDateProc; -typedef UniversalProcPtr CopyProc; -typedef UniversalProcPtr PasteProc; - -typedef UniversalProcPtr GetLastLineProc; -typedef UniversalProcPtr GetLineNumberProc; -typedef UniversalProcPtr GetLineStartProc; -typedef UniversalProcPtr GetLineEndProc; -typedef UniversalProcPtr GetLinePosProc; - -typedef UniversalProcPtr InsertProc; -typedef UniversalProcPtr DeleteProc; - -typedef UniversalProcPtr SetWindowContentsProc; -typedef UniversalProcPtr ContentsChangedProc; - -typedef UniversalProcPtr GetFileTextProc; - -typedef UniversalProcPtr GetFolderProc; -typedef UniversalProcPtr OpenSeveralProc; - -typedef UniversalProcPtr CenterDialogProc; -typedef UniversalProcPtr StandardFilterProc; -typedef UniversalProcPtr FrameDialogItemProc; - -typedef UniversalProcPtr NewDocumentProc; -typedef UniversalProcPtr OpenDocumentProc; - -typedef UniversalProcPtr AllocateProc; -typedef UniversalProcPtr FindPatternProc; - -typedef UniversalProcPtr ReportOSErrorProc; - -typedef UniversalProcPtr GetPreferenceProc; -typedef UniversalProcPtr SetPreferenceProc; - -typedef UniversalProcPtr StartProgressProc; -typedef UniversalProcPtr DoProgressProc; -typedef UniversalProcPtr DoneProgressProc; - -typedef UniversalProcPtr GetProjectListProc; -typedef UniversalProcPtr ProjectTextListProc; - -typedef UniversalProcPtr PresetUndoProc; -typedef UniversalProcPtr SetUndoProc; - -typedef UniversalProcPtr OpenFileProc; - -typedef UniversalProcPtr PrepareUndoProc; -typedef UniversalProcPtr CommitUndoProc; - -typedef UniversalProcPtr CreateResultsProc; - -#define CallGetWindowContents(proc, w) \ - (Handle)(CallUniversalProc(proc, GetWindowContentsUPPInfo, (w))) - -#define CallGetSelection(proc, selStart, selEnd, firstChar) \ - (CallUniversalProc(proc, GetSelectionUPPInfo, (selStart), (selEnd), (firstChar))) - -#define CallSetSelection(proc, selStart, selEnd, firstChar) \ - (CallUniversalProc(proc, SetSelectionUPPInfo, (selStart), (selEnd), (firstChar))) - -#define CallGetDocInfo(proc, w, name, vRefNum, dirID) \ - (CallUniversalProc(proc, GetDocInfoUPPInfo, (w), (name), (vRefNum), (dirID))) - -#define CallGetModDate(proc, w) \ - (CallUniversalProc(proc, GetModDateUPPInfo, (w))) - -#define CallCopy(proc) \ - (Handle)(CallUniversalProc(proc, CopyUPPInfo)) - -#define CallPaste(proc, h) \ - (CallUniversalProc(proc, PasteUPPInfo, (h))) - -#define CallGetLastLine(proc) \ - (CallUniversalProc(proc, GetLastLineUPPInfo)) - -#define CallGetLineNumber(proc, sel) \ - (CallUniversalProc(proc, GetLineNumberUPPInfo, (sel))) - -#define CallGetLineStart(proc, sel) \ - (CallUniversalProc(proc, GetLineStartUPPInfo, (sel))) - -#define CallGetLineEnd(proc, sel) \ - (CallUniversalProc(proc, GetLineEndUPPInfo, (sel))) - -#define CallGetLinePos(proc, sel) \ - (CallUniversalProc(proc, GetLinePosUPPInfo, (sel))) - -#define CallInsert(proc, text, len) \ - (CallUniversalProc(proc, InsertUPPInfo, (text), (len))) - -#define CallDelete(proc) \ - (CallUniversalProc(proc, DeleteUPPInfo)) - -#define CallSetWindowContents(proc, w, h) \ - (CallUniversalProc(proc, SetWindowContentsUPPInfo, (w), (h))) - -#define CallContentsChanged(proc, w) \ - (CallUniversalProc(proc, ContentsChangedUPPInfo, (w))) - -#define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \ - (Handle)(CallUniversalProc(proc, GetFileTextUPPInfo, (vRefNum), (dirID), (name), (canDispose))) - -#define CallGetFolder(proc, prompt, vRefNum, dirID) \ - (Boolean)(CallUniversalProc(proc, GetFolderUPPInfo, (prompt), (vRefNum), (dirID))) - -#define CallOpenSeveral(proc, sort, file_count, files) \ - (Boolean)(CallUniversalProc(proc, OpenSeveralUPPInfo, (sort), (file_count), (files))) - -#define CallCenterDialog(proc, dialogID) \ - (DialogPtr)(CallUniversalProc(proc, CenterDialogUPPInfo, (dialogID))) - -#define CallStandardFilter(proc, d, event, item) \ - CallModalFilterProc(proc, (d), (event), (item)) - -#define CallFrameDialogItem(proc, d, item) \ - CallUserItemProc(proc, (d), (item)) - -#define CallNewDocument(proc) \ - (WindowPtr)(CallUniversalProc(proc, NewDocumentUPPInfo)) - -#define CallOpenDocument(proc) \ - (WindowPtr)(CallUniversalProc(proc, OpenDocumentUPPInfo)) - -#define CallAllocate(proc, size, clear) \ - (Handle)(CallUniversalProc(proc, AllocateUPPInfo, (size), (clear))) - -#define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \ - (CallUniversalProc(proc, FindPatternUPPInfo, (text), (text_len), (text_offset), \ - (pat), (pat_len), (case_sens))) - -#define CallReportOSError(proc, code) \ - (CallUniversalProc(proc, ReportOSErrorUPPInfo, (code))) - -#define CallGetPreference(proc, prefType, req_len, buffer, act_len) \ - (CallUniversalProc(proc, GetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len))) - -#define CallSetPreference(proc, prefType, req_len, buffer, act_len) \ - (CallUniversalProc(proc, SetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len))) - -#define CallStartProgress(proc, str, total, cancel_allowed) \ - (CallUniversalProc(proc, StartProgressUPPInfo, (str), (total), (cancel_allowed))) - -#define CallDoProgress(proc, done) \ - (Boolean)(CallUniversalProc(proc, DoProgressUPPInfo, (done))) - -#define CallDoneProgress(proc) \ - (CallUniversalProc(proc, DoneProgressUPPInfo)) - -#define CallGetProjectList(proc, spec, kind, count, entries) \ - (Boolean)(CallUniversalProc(proc, GetProjectListUPPInfo, (spec), (kind), (count), (entries))) - -#define CallProjectTextList(proc, spec, text) \ - (Boolean)(CallUniversalProc(proc, ProjectTextListUPPInfo, (spec), (text))) - -#define CallPresetUndo(proc) \ - (Boolean)(CallUniversalProc(proc, PresetUndoUPPInfo)) - -#define CallSetUndo(proc) \ - (CallUniversalProc(proc, SetUndoUPPInfo)) - -#define CallOpenFile(proc, spec, w) \ - (Boolean)(CallUniversalProc(proc, OpenFileUPPInfo, (spec), (w))) - -#define CallPrepareUndo(proc, undo_start, undo_end, sel_start, sel_end) \ - (Boolean)(CallUniversalProc(proc, PrepareUndoUPPInfo, (undo_start), (undo_end), \ - (sel_start), (sel_end))) - -#define CallCommitUndo(proc, new_end) \ - (CallUniversalProc(proc, CommitUndoUPPInfo, (new_end))) - -#define CallCreateResults(proc, title, count, results, w) \ - (Boolean)(CallUniversalProc(proc, CreateResultsUPPInfo, (title), (count), (results), (w))) - -#else - -typedef pascal Handle (*GetWindowContentsProc)(WindowPtr w); -typedef pascal void (*GetSelectionProc)(long *selStart, long *selEnd, long *firstChar); -typedef pascal void (*SetSelectionProc)(long selStart, long selEnd, long firstChar); -typedef pascal void (*GetDocInfoProc)(WindowPtr w, Str255 fName, short *vRefNum, long *dirID); -typedef pascal long (*GetModDateProc)(WindowPtr w); -typedef pascal Handle (*CopyProc)(void); -typedef pascal void (*PasteProc)(Handle pasteText); - -typedef pascal long (*GetLastLineProc)(void); -typedef pascal long (*GetLineNumberProc)(long selection); -typedef pascal long (*GetLineStartProc)(long selection); -typedef pascal long (*GetLineEndProc)(long selection); -typedef pascal long (*GetLinePosProc)(long line); - -typedef pascal void (*InsertProc)(char *text, long len); -typedef pascal void (*DeleteProc)(void); - -typedef pascal void (*SetWindowContentsProc)(WindowPtr w, Handle h); -typedef pascal void (*ContentsChangedProc)(WindowPtr w); - -typedef pascal Handle (*GetFileTextProc)(short vRefNum, long dirID, Str255 fName, Boolean *canDispose); - -typedef pascal Boolean (*GetFolderProc)(Str255 prompt, short *vRefNum, long *dirID); -typedef pascal Boolean (*OpenSeveralProc)(Boolean sort, short *file_count, StandardFileReply ***files); - -typedef pascal DialogPtr (*CenterDialogProc)(short dialogID); -typedef pascal Boolean (*StandardFilterProc)(DialogPtr d, EventRecord *event, short *item); -typedef pascal void (*FrameDialogItemProc)(DialogPtr d, short item); - -typedef pascal WindowPtr (*NewDocumentProc)(void); -typedef pascal WindowPtr (*OpenDocumentProc)(void); - -typedef pascal Handle (*AllocateProc)(long size, Boolean clear); -typedef pascal long (*FindPatternProc)(char *text, long text_len, long text_offset, - char *pat, long pat_len, - Boolean case_sensitive); - -typedef pascal void (*ReportOSErrorProc)(short code); - -typedef pascal void (*GetPreferenceProc)(ResType prefType, short req_len, void *buffer, short *act_len); -typedef pascal void (*SetPreferenceProc)(ResType prefType, short req_len, void *buffer, short *act_len); - -typedef pascal void (*StartProgressProc)(Str255 str, long total, Boolean cancel_allowed); -typedef pascal Boolean (*DoProgressProc)(long done); -typedef pascal void (*DoneProgressProc)(void); - -typedef pascal Boolean (*GetProjectListProc)(FSSpec *spec, short *kind, short *count, ProjectEntry ***entries); -typedef pascal Boolean (*ProjectTextListProc)(FSSpec *spec, Handle *text); - -typedef pascal Boolean (*PresetUndoProc)(void); -typedef pascal void (*SetUndoProc)(void); - -typedef pascal Boolean (*OpenFileProc)(FSSpec *spec, WindowPtr *w); - -typedef pascal Boolean (*PrepareUndoProc)(long undo_start, long undo_end, - long sel_start, long sel_end); -typedef pascal void (*CommitUndoProc)(long new_end); - -typedef pascal Boolean (*CreateResultsProc)(Str255 title, short count, Handle results, WindowPtr *w); - -#define CallGetWindowContents(proc, w) \ - ((proc))((w)) - -#define CallGetSelection(proc, selStart, selEnd, firstChar) \ - ((proc))((selStart), (selEnd), (firstChar)) - -#define CallSetSelection(proc, selStart, selEnd, firstChar) \ - ((proc))((selStart), (selEnd), (firstChar)) - -#define CallGetDocInfo(proc, w, name, vRefNum, dirID) \ - ((proc))((w), (name), (vRefNum), (dirID)) - -#define CallGetModDate(proc, w) \ - ((proc))((w)) - -#define CallCopy(proc) \ - ((proc))() - -#define CallPaste(proc, h) \ - ((proc))((h)) - -#define CallGetLastLine(proc) \ - ((proc))() - -#define CallGetLineNumber(proc, sel) \ - ((proc))((sel)) - -#define CallGetLineStart(proc, sel) \ - ((proc))((sel)) - -#define CallGetLineEnd(proc, sel) \ - ((proc))((sel)) - -#define CallGetLinePos(proc, sel) \ - ((proc))((sel)) - -#define CallInsert(proc, text, len) \ - ((proc))((text), (len)) - -#define CallDelete(proc) \ - ((proc))() - -#define CallSetWindowContents(proc, w, h) \ - ((proc))((w), (h)) - -#define CallContentsChanged(proc, w) \ - ((proc))((w)) - -#define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \ - ((proc))((vRefNum), (dirID), (name), (canDispose)) - -#define CallGetFolder(proc, prompt, vRefNum, dirID) \ - ((proc))((prompt), (vRefNum), (dirID)) - -#define CallOpenSeveral(proc, sort, file_count, files) \ - ((proc))((sort), (file_count), (files)) - -#define CallCenterDialog(proc, dialogID) \ - ((proc))((dialogID)) - -#define CallStandardFilter(proc, d, event, item) \ - ((proc))((d), (event), (item)) - -#define CallFrameDialogItem(proc, d, item) \ - ((proc))((d), (item)) - -#define CallNewDocument(proc) \ - ((proc))() - -#define CallOpenDocument(proc) \ - ((proc))() - -#define CallAllocate(proc, size, clear) \ - ((proc))((size), (clear)) - -#define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \ - ((proc))((text), (text_len), (text_offset), (pat), (pat_len), (case_sens)) - -#define CallReportOSError(proc, code) \ - ((proc))((code)) - -#define CallGetPreference(proc, prefType, req_len, buffer, act_len) \ - ((proc))((prefType), (req_len), (buffer), (act_len)) - -#define CallSetPreference(proc, prefType, req_len, buffer, act_len) \ - ((proc))((prefType), (req_len), (buffer), (act_len)) - -#define CallStartProgress(proc, str, total, cancel_allowed) \ - ((proc))((str), (total), (cancel_allowed)) - -#define CallDoProgress(proc, done) \ - ((proc))((done)) - -#define CallDoneProgress(proc) \ - ((proc))() - -#define CallGetProjectList(proc, spec, kind, count, entries) \ - ((proc))((spec), (kind), (count), (entries)) - -#define CallProjectTextList(proc, spec, text) \ - ((proc))((spec), (text)) - -#define CallPresetUndo(proc) \ - ((proc))() - -#define CallSetUndo(proc) \ - ((proc))() - -#define CallOpenFile(proc, spec, w) \ - ((proc))((spec), (w)) - -#define CallPrepareUndo(proc, undo_start, undo_end, sel_start, sel_end) \ - ((proc))((undo_start), (undo_end), (sel_start), (sel_end)) - -#define CallCommitUndo(proc, new_end) \ - ((proc))((new_end)) - -#define CallCreateResults(proc, title, count, results, w) \ - ((proc))((title), (count), (results), (w)) - -#endif - - -typedef struct -{ - short version; - - // version 1 callbacks - - GetWindowContentsProc GetWindowContents; - GetSelectionProc GetSelection; - SetSelectionProc SetSelection; - GetDocInfoProc GetDocInfo; - GetModDateProc GetModDate; - CopyProc Copy; - PasteProc Paste; - - // version 2 callbacks - - /* Text-Editing stuff */ - GetLastLineProc GetLastLine; - GetLineNumberProc GetLineNumber; - GetLineStartProc GetLineStart; - GetLineEndProc GetLineEnd; - GetLinePosProc GetLinePos; - - InsertProc Insert; - DeleteProc Delete; - - /* Getting and Setting window text */ - SetWindowContentsProc SetWindowContents; - ContentsChangedProc ContentsChanged; - - /* Reading file text */ - GetFileTextProc GetFileText; - - /* Direct user-interface calls */ - GetFolderProc GetFolder; - OpenSeveralProc OpenSeveral; - - CenterDialogProc CenterDialog; - StandardFilterProc StandardFilter; - FrameDialogItemProc FrameDialogItem; - - NewDocumentProc NewDocument; - OpenDocumentProc OpenDocument; - - /* Utility Routines */ - AllocateProc Allocate; - FindPatternProc FindPattern; - - ReportOSErrorProc ReportOSError; - - /* Preference routines */ - GetPreferenceProc GetPreference; - SetPreferenceProc SetPreference; - - /* Progress routines */ - StartProgressProc StartProgress; - DoProgressProc DoProgress; - DoneProgressProc DoneProgress; - - // Version 3 callbacks - GetProjectListProc GetProjectList; - ProjectTextListProc ProjectTextList; - - // version 4 callbacks - - PresetUndoProc PresetUndo; - SetUndoProc SetUndo; - - OpenFileProc OpenFile; - - // version 5 callbacks - - PrepareUndoProc PrepareUndo; - CommitUndoProc CommitUndo; - - CreateResultsProc CreateResults; - -} ExternalCallbackBlock; - -#if defined(powerc) || defined (__powerc) -#pragma options align=reset -#endif - -/* - 'main' for a BBXT is declared: - -pascal void main(ExternalCallbackBlock *callbacks, WindowPtr w); [C] - - The 'new' calling convention, which passes more information - and allows scriptability, is this: - -pascal OSErr main(ExternalCallbackBlock *callbacks, WindowPtr w, long flags, AppleEvent *event, AppleEvent *reply); -*/ diff --git a/Mac/Contrib/BBPy/source/BB-stuff/ExternalInterface.h b/Mac/Contrib/BBPy/source/BB-stuff/ExternalInterface.h deleted file mode 100644 index 51d206dfc2..0000000000 --- a/Mac/Contrib/BBPy/source/BB-stuff/ExternalInterface.h +++ /dev/null @@ -1,716 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -#if defined(powerc) || defined (__powerc) -#pragma options align=mac68k -#endif - -typedef struct -{ - FSSpec spec; // designates file on disk - long key; // reserved for future expansion - - char tree; // 0 for absolute, 1 for project, 2 for system - Boolean found; // FALSE if file couldn't be located; if so, all other info is moot - - OSType type; // file type of found file - OSType crtr; // signature of found file's creator - - short spare0; // reserved for future expansion - long spare1; -} ProjectEntry; - -enum -{ - kNeitherTree, - kProjectTree, - kSystemTree -}; - -enum -{ - kTHINKCProject, - kTHINKPascalProject, - kCodeWarriorProject -}; - -// masks for the "flags" argument to new-convention interfaces - -#define xfWindowOpen 0x00000001 -#define xfWindowChangeable 0x00000002 -#define xfHasSelection 0x00000004 -#define xfUseDefaults 0x00000008 -#define xfIsBBEditLite 0x00000040 -#define xfIsBBEditDemo 0x00000080 - -typedef struct -{ - FSSpec spec; - OSType key; - - short error_kind; - long line_number; - - Str255 message; -} ErrorEntry; - -typedef enum -{ - kNote = 0, - kError, - kWarning -} ErrorKind; - -#define kCurrentExternalVersion 5 // current version of callbacks - -// Universal callback interfaces - -#if USESROUTINEDESCRIPTORS - -#define ExtensionUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ExternalCallbackBlock *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr)))) - -#define NewExtensionUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(OSErr))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ExternalCallbackBlock *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(AppleEvent *))) \ - | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(AppleEvent *)))) - -#define GetWindowContentsUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr)))) - -#define GetSelectionUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long *)))) - -#define SetSelectionUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long)))) - -#define GetDocInfoUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long *)))) - -#define GetModDateUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr)))) - -#define CopyUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Handle)))) - -#define PasteUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Handle)))) - -#define GetLastLineUPPInfo (kPascalStackBased | RESULT_SIZE(SIZE_CODE(sizeof(long)))) - -#define GetLineNumberUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define GetLineStartUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define GetLineEndUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define GetLinePosUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define InsertUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long)))) - -#define DeleteUPPInfo (kPascalStackBased) - -#define SetWindowContentsUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle)))) - -#define ContentsChangedUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(WindowPtr)))) - -#define GetFileTextUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Boolean *)))) - -#define GetFolderUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long *)))) - -#define OpenSeveralUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(StandardFileReply ***)))) - -#define CenterDialogUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(DialogPtr))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))) - -#define StandardFilterUPPInfo uppModalFilterProcInfo - -#define FrameDialogItemUPPInfo uppUserItemProcInfo - -#define NewDocumentUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr)))) - -#define OpenDocumentUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(WindowPtr)))) - -#define AllocateUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Handle))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean)))) - -#define FindPatternUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(char *))) \ - | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(Boolean)))) - -#define ReportOSErrorUPPInfo (kPascalStackBased) - -#define GetPreferenceUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short *)))) - -#define SetPreferenceUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ResType))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short *)))) - -#define StartProgressUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean)))) - -#define DoProgressUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define DoneProgressUPPInfo (kPascalStackBased) - -#define GetProjectListUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short *))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(ProjectEntry***)))) - -#define ProjectTextListUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle *)))) - -#define PresetUndoUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))) - -#define SetUndoUPPInfo (kPascalStackBased) - -#define OpenFileUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(FSSpec *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(WindowPtr *)))) - -#define PrepareUndoUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(long))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))) - -#define CommitUndoUPPInfo (kPascalStackBased \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(long)))) - -#define CreateResultsUPPInfo (kPascalStackBased \ - | RESULT_SIZE(SIZE_CODE(sizeof(Boolean))) \ - | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(unsigned char *))) \ - | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short))) \ - | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Handle))) \ - | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(WindowPtr *)))) - -typedef UniversalProcPtr GetWindowContentsProc; -typedef UniversalProcPtr GetSelectionProc; -typedef UniversalProcPtr SetSelectionProc; -typedef UniversalProcPtr GetDocInfoProc; -typedef UniversalProcPtr GetModDateProc; -typedef UniversalProcPtr CopyProc; -typedef UniversalProcPtr PasteProc; - -typedef UniversalProcPtr GetLastLineProc; -typedef UniversalProcPtr GetLineNumberProc; -typedef UniversalProcPtr GetLineStartProc; -typedef UniversalProcPtr GetLineEndProc; -typedef UniversalProcPtr GetLinePosProc; - -typedef UniversalProcPtr InsertProc; -typedef UniversalProcPtr DeleteProc; - -typedef UniversalProcPtr SetWindowContentsProc; -typedef UniversalProcPtr ContentsChangedProc; - -typedef UniversalProcPtr GetFileTextProc; - -typedef UniversalProcPtr GetFolderProc; -typedef UniversalProcPtr OpenSeveralProc; - -typedef UniversalProcPtr CenterDialogProc; -typedef UniversalProcPtr StandardFilterProc; -typedef UniversalProcPtr FrameDialogItemProc; - -typedef UniversalProcPtr NewDocumentProc; -typedef UniversalProcPtr OpenDocumentProc; - -typedef UniversalProcPtr AllocateProc; -typedef UniversalProcPtr FindPatternProc; - -typedef UniversalProcPtr ReportOSErrorProc; - -typedef UniversalProcPtr GetPreferenceProc; -typedef UniversalProcPtr SetPreferenceProc; - -typedef UniversalProcPtr StartProgressProc; -typedef UniversalProcPtr DoProgressProc; -typedef UniversalProcPtr DoneProgressProc; - -typedef UniversalProcPtr GetProjectListProc; -typedef UniversalProcPtr ProjectTextListProc; - -typedef UniversalProcPtr PresetUndoProc; -typedef UniversalProcPtr SetUndoProc; - -typedef UniversalProcPtr OpenFileProc; - -typedef UniversalProcPtr PrepareUndoProc; -typedef UniversalProcPtr CommitUndoProc; - -typedef UniversalProcPtr CreateResultsProc; - -#define CallGetWindowContents(proc, w) \ - (Handle)(CallUniversalProc(proc, GetWindowContentsUPPInfo, (w))) - -#define CallGetSelection(proc, selStart, selEnd, firstChar) \ - (CallUniversalProc(proc, GetSelectionUPPInfo, (selStart), (selEnd), (firstChar))) - -#define CallSetSelection(proc, selStart, selEnd, firstChar) \ - (CallUniversalProc(proc, SetSelectionUPPInfo, (selStart), (selEnd), (firstChar))) - -#define CallGetDocInfo(proc, w, name, vRefNum, dirID) \ - (CallUniversalProc(proc, GetDocInfoUPPInfo, (w), (name), (vRefNum), (dirID))) - -#define CallGetModDate(proc, w) \ - (CallUniversalProc(proc, GetModDateUPPInfo, (w))) - -#define CallCopy(proc) \ - (Handle)(CallUniversalProc(proc, CopyUPPInfo)) - -#define CallPaste(proc, h) \ - (CallUniversalProc(proc, PasteUPPInfo, (h))) - -#define CallGetLastLine(proc) \ - (CallUniversalProc(proc, GetLastLineUPPInfo)) - -#define CallGetLineNumber(proc, sel) \ - (CallUniversalProc(proc, GetLineNumberUPPInfo, (sel))) - -#define CallGetLineStart(proc, sel) \ - (CallUniversalProc(proc, GetLineStartUPPInfo, (sel))) - -#define CallGetLineEnd(proc, sel) \ - (CallUniversalProc(proc, GetLineEndUPPInfo, (sel))) - -#define CallGetLinePos(proc, sel) \ - (CallUniversalProc(proc, GetLinePosUPPInfo, (sel))) - -#define CallInsert(proc, text, len) \ - (CallUniversalProc(proc, InsertUPPInfo, (text), (len))) - -#define CallDelete(proc) \ - (CallUniversalProc(proc, DeleteUPPInfo)) - -#define CallSetWindowContents(proc, w, h) \ - (CallUniversalProc(proc, SetWindowContentsUPPInfo, (w), (h))) - -#define CallContentsChanged(proc, w) \ - (CallUniversalProc(proc, ContentsChangedUPPInfo, (w))) - -#define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \ - (Handle)(CallUniversalProc(proc, GetFileTextUPPInfo, (vRefNum), (dirID), (name), (canDispose))) - -#define CallGetFolder(proc, prompt, vRefNum, dirID) \ - (Boolean)(CallUniversalProc(proc, GetFolderUPPInfo, (prompt), (vRefNum), (dirID))) - -#define CallOpenSeveral(proc, sort, file_count, files) \ - (Boolean)(CallUniversalProc(proc, OpenSeveralUPPInfo, (sort), (file_count), (files))) - -#define CallCenterDialog(proc, dialogID) \ - (DialogPtr)(CallUniversalProc(proc, CenterDialogUPPInfo, (dialogID))) - -#define CallStandardFilter(proc, d, event, item) \ - CallModalFilterProc(proc, (d), (event), (item)) - -#define CallFrameDialogItem(proc, d, item) \ - CallUserItemProc(proc, (d), (item)) - -#define CallNewDocument(proc) \ - (WindowPtr)(CallUniversalProc(proc, NewDocumentUPPInfo)) - -#define CallOpenDocument(proc) \ - (WindowPtr)(CallUniversalProc(proc, OpenDocumentUPPInfo)) - -#define CallAllocate(proc, size, clear) \ - (Handle)(CallUniversalProc(proc, AllocateUPPInfo, (size), (clear))) - -#define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \ - (CallUniversalProc(proc, FindPatternUPPInfo, (text), (text_len), (text_offset), \ - (pat), (pat_len), (case_sens))) - -#define CallReportOSError(proc, code) \ - (CallUniversalProc(proc, ReportOSErrorUPPInfo, (code))) - -#define CallGetPreference(proc, prefType, req_len, buffer, act_len) \ - (CallUniversalProc(proc, GetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len))) - -#define CallSetPreference(proc, prefType, req_len, buffer, act_len) \ - (CallUniversalProc(proc, SetPreferenceUPPInfo, (prefType), (req_len), (buffer), (act_len))) - -#define CallStartProgress(proc, str, total, cancel_allowed) \ - (CallUniversalProc(proc, StartProgressUPPInfo, (str), (total), (cancel_allowed))) - -#define CallDoProgress(proc, done) \ - (Boolean)(CallUniversalProc(proc, DoProgressUPPInfo, (done))) - -#define CallDoneProgress(proc) \ - (CallUniversalProc(proc, DoneProgressUPPInfo)) - -#define CallGetProjectList(proc, spec, kind, count, entries) \ - (Boolean)(CallUniversalProc(proc, GetProjectListUPPInfo, (spec), (kind), (count), (entries))) - -#define CallProjectTextList(proc, spec, text) \ - (Boolean)(CallUniversalProc(proc, ProjectTextListUPPInfo, (spec), (text))) - -#define CallPresetUndo(proc) \ - (Boolean)(CallUniversalProc(proc, PresetUndoUPPInfo)) - -#define CallSetUndo(proc) \ - (CallUniversalProc(proc, SetUndoUPPInfo)) - -#define CallOpenFile(proc, spec, w) \ - (Boolean)(CallUniversalProc(proc, OpenFileUPPInfo, (spec), (w))) - -#define CallPrepareUndo(proc, undo_start, undo_end, sel_start, sel_end) \ - (Boolean)(CallUniversalProc(proc, PrepareUndoUPPInfo, (undo_start), (undo_end), \ - (sel_start), (sel_end))) - -#define CallCommitUndo(proc, new_end) \ - (CallUniversalProc(proc, CommitUndoUPPInfo, (new_end))) - -#define CallCreateResults(proc, title, count, results, w) \ - (Boolean)(CallUniversalProc(proc, CreateResultsUPPInfo, (title), (count), (results), (w))) - -#else - -typedef pascal Handle (*GetWindowContentsProc)(WindowPtr w); -typedef pascal void (*GetSelectionProc)(long *selStart, long *selEnd, long *firstChar); -typedef pascal void (*SetSelectionProc)(long selStart, long selEnd, long firstChar); -typedef pascal void (*GetDocInfoProc)(WindowPtr w, Str255 fName, short *vRefNum, long *dirID); -typedef pascal long (*GetModDateProc)(WindowPtr w); -typedef pascal Handle (*CopyProc)(void); -typedef pascal void (*PasteProc)(Handle pasteText); - -typedef pascal long (*GetLastLineProc)(void); -typedef pascal long (*GetLineNumberProc)(long selection); -typedef pascal long (*GetLineStartProc)(long selection); -typedef pascal long (*GetLineEndProc)(long selection); -typedef pascal long (*GetLinePosProc)(long line); - -typedef pascal void (*InsertProc)(char *text, long len); -typedef pascal void (*DeleteProc)(void); - -typedef pascal void (*SetWindowContentsProc)(WindowPtr w, Handle h); -typedef pascal void (*ContentsChangedProc)(WindowPtr w); - -typedef pascal Handle (*GetFileTextProc)(short vRefNum, long dirID, Str255 fName, Boolean *canDispose); - -typedef pascal Boolean (*GetFolderProc)(Str255 prompt, short *vRefNum, long *dirID); -typedef pascal Boolean (*OpenSeveralProc)(Boolean sort, short *file_count, StandardFileReply ***files); - -typedef pascal DialogPtr (*CenterDialogProc)(short dialogID); -typedef pascal Boolean (*StandardFilterProc)(DialogPtr d, EventRecord *event, short *item); -typedef pascal void (*FrameDialogItemProc)(DialogPtr d, short item); - -typedef pascal WindowPtr (*NewDocumentProc)(void); -typedef pascal WindowPtr (*OpenDocumentProc)(void); - -typedef pascal Handle (*AllocateProc)(long size, Boolean clear); -typedef pascal long (*FindPatternProc)(char *text, long text_len, long text_offset, - char *pat, long pat_len, - Boolean case_sensitive); - -typedef pascal void (*ReportOSErrorProc)(short code); - -typedef pascal void (*GetPreferenceProc)(ResType prefType, short req_len, void *buffer, short *act_len); -typedef pascal void (*SetPreferenceProc)(ResType prefType, short req_len, void *buffer, short *act_len); - -typedef pascal void (*StartProgressProc)(Str255 str, long total, Boolean cancel_allowed); -typedef pascal Boolean (*DoProgressProc)(long done); -typedef pascal void (*DoneProgressProc)(void); - -typedef pascal Boolean (*GetProjectListProc)(FSSpec *spec, short *kind, short *count, ProjectEntry ***entries); -typedef pascal Boolean (*ProjectTextListProc)(FSSpec *spec, Handle *text); - -typedef pascal Boolean (*PresetUndoProc)(void); -typedef pascal void (*SetUndoProc)(void); - -typedef pascal Boolean (*OpenFileProc)(FSSpec *spec, WindowPtr *w); - -typedef pascal Boolean (*PrepareUndoProc)(long undo_start, long undo_end, - long sel_start, long sel_end); -typedef pascal void (*CommitUndoProc)(long new_end); - -typedef pascal Boolean (*CreateResultsProc)(Str255 title, short count, Handle results, WindowPtr *w); - -#define CallGetWindowContents(proc, w) \ - ((proc))((w)) - -#define CallGetSelection(proc, selStart, selEnd, firstChar) \ - ((proc))((selStart), (selEnd), (firstChar)) - -#define CallSetSelection(proc, selStart, selEnd, firstChar) \ - ((proc))((selStart), (selEnd), (firstChar)) - -#define CallGetDocInfo(proc, w, name, vRefNum, dirID) \ - ((proc))((w), (name), (vRefNum), (dirID)) - -#define CallGetModDate(proc, w) \ - ((proc))((w)) - -#define CallCopy(proc) \ - ((proc))() - -#define CallPaste(proc, h) \ - ((proc))((h)) - -#define CallGetLastLine(proc) \ - ((proc))() - -#define CallGetLineNumber(proc, sel) \ - ((proc))((sel)) - -#define CallGetLineStart(proc, sel) \ - ((proc))((sel)) - -#define CallGetLineEnd(proc, sel) \ - ((proc))((sel)) - -#define CallGetLinePos(proc, sel) \ - ((proc))((sel)) - -#define CallInsert(proc, text, len) \ - ((proc))((text), (len)) - -#define CallDelete(proc) \ - ((proc))() - -#define CallSetWindowContents(proc, w, h) \ - ((proc))((w), (h)) - -#define CallContentsChanged(proc, w) \ - ((proc))((w)) - -#define CallGetFileText(proc, vRefNum, dirID, name, canDispose) \ - ((proc))((vRefNum), (dirID), (name), (canDispose)) - -#define CallGetFolder(proc, prompt, vRefNum, dirID) \ - ((proc))((prompt), (vRefNum), (dirID)) - -#define CallOpenSeveral(proc, sort, file_count, files) \ - ((proc))((sort), (file_count), (files)) - -#define CallCenterDialog(proc, dialogID) \ - ((proc))((dialogID)) - -#define CallStandardFilter(proc, d, event, item) \ - ((proc))((d), (event), (item)) - -#define CallFrameDialogItem(proc, d, item) \ - ((proc))((d), (item)) - -#define CallNewDocument(proc) \ - ((proc))() - -#define CallOpenDocument(proc) \ - ((proc))() - -#define CallAllocate(proc, size, clear) \ - ((proc))((size), (clear)) - -#define CallFindPattern(proc, text, text_len, text_offset, pat, pat_len, case_sens) \ - ((proc))((text), (text_len), (text_offset), (pat), (pat_len), (case_sens)) - -#define CallReportOSError(proc, code) \ - ((proc))((code)) - -#define CallGetPreference(proc, prefType, req_len, buffer, act_len) \ - ((proc))((prefType), (req_len), (buffer), (act_len)) - -#define CallSetPreference(proc, prefType, req_len, buffer, act_len) \ - ((proc))((prefType), (req_len), (buffer), (act_len)) - -#define CallStartProgress(proc, str, total, cancel_allowed) \ - ((proc))((str), (total), (cancel_allowed)) - -#define CallDoProgress(proc, done) \ - ((proc))((done)) - -#define CallDoneProgress(proc) \ - ((proc))() - -#define CallGetProjectList(proc, spec, kind, count, entries) \ - ((proc))((spec), (kind), (count), (entries)) - -#define CallProjectTextList(proc, spec, text) \ - ((proc))((spec), (text)) - -#define CallPresetUndo(proc) \ - ((proc))() - -#define CallSetUndo(proc) \ - ((proc))() - -#define CallOpenFile(proc, spec, w) \ - ((proc))((spec), (w)) - -#define CallPrepareUndo(proc, undo_start, undo_end, sel_start, sel_end) \ - ((proc))((undo_start), (undo_end), (sel_start), (sel_end)) - -#define CallCommitUndo(proc, new_end) \ - ((proc))((new_end)) - -#define CallCreateResults(proc, title, count, results, w) \ - ((proc))((title), (count), (results), (w)) - -#endif - - -typedef struct -{ - short version; - - // version 1 callbacks - - GetWindowContentsProc GetWindowContents; - GetSelectionProc GetSelection; - SetSelectionProc SetSelection; - GetDocInfoProc GetDocInfo; - GetModDateProc GetModDate; - CopyProc Copy; - PasteProc Paste; - - // version 2 callbacks - - /* Text-Editing stuff */ - GetLastLineProc GetLastLine; - GetLineNumberProc GetLineNumber; - GetLineStartProc GetLineStart; - GetLineEndProc GetLineEnd; - GetLinePosProc GetLinePos; - - InsertProc Insert; - DeleteProc Delete; - - /* Getting and Setting window text */ - SetWindowContentsProc SetWindowContents; - ContentsChangedProc ContentsChanged; - - /* Reading file text */ - GetFileTextProc GetFileText; - - /* Direct user-interface calls */ - GetFolderProc GetFolder; - OpenSeveralProc OpenSeveral; - - CenterDialogProc CenterDialog; - StandardFilterProc StandardFilter; - FrameDialogItemProc FrameDialogItem; - - NewDocumentProc NewDocument; - OpenDocumentProc OpenDocument; - - /* Utility Routines */ - AllocateProc Allocate; - FindPatternProc FindPattern; - - ReportOSErrorProc ReportOSError; - - /* Preference routines */ - GetPreferenceProc GetPreference; - SetPreferenceProc SetPreference; - - /* Progress routines */ - StartProgressProc StartProgress; - DoProgressProc DoProgress; - DoneProgressProc DoneProgress; - - // Version 3 callbacks - GetProjectListProc GetProjectList; - ProjectTextListProc ProjectTextList; - - // version 4 callbacks - - PresetUndoProc PresetUndo; - SetUndoProc SetUndo; - - OpenFileProc OpenFile; - - // version 5 callbacks - - PrepareUndoProc PrepareUndo; - CommitUndoProc CommitUndo; - - CreateResultsProc CreateResults; - -} ExternalCallbackBlock; - -#if defined(powerc) || defined (__powerc) -#pragma options align=reset -#endif - -/* - 'main' for a BBXT is declared: - -pascal void main(ExternalCallbackBlock *callbacks, WindowPtr w); [C] - - The 'new' calling convention, which passes more information - and allows scriptability, is this: - -pascal OSErr main(ExternalCallbackBlock *callbacks, WindowPtr w, long flags, AppleEvent *event, AppleEvent *reply); -*/ diff --git a/Mac/Contrib/BBPy/source/BBPy.h b/Mac/Contrib/BBPy/source/BBPy.h deleted file mode 100644 index 22974eaaf3..0000000000 --- a/Mac/Contrib/BBPy/source/BBPy.h +++ /dev/null @@ -1,17 +0,0 @@ -/* BBPython - A simple menu command to send the contents of a window to the Python interpreter - - copyright © 1996 Just van Rossum, Letterror: just@knoware.nl - - All Rights Reserved -*/ - -#include -#include -#include // for global variables, multiple segments, etc. -#include "ExternalInterface.h" -#include - -extern OSErr SendTextAsAE(ExternalCallbackBlock *callbacks, Ptr theText, long theSize, Str255 windowTitle); -extern OSErr LaunchPythonSlave(FSSpec * docSpec); -extern Boolean GetPythonSlaveSpec(FSSpec * docSpec); diff --git a/Mac/Contrib/BBPy/source/BBPy.rsrc b/Mac/Contrib/BBPy/source/BBPy.rsrc deleted file mode 100644 index 12e2d04654..0000000000 --- a/Mac/Contrib/BBPy/source/BBPy.rsrc +++ /dev/null @@ -1 +0,0 @@ -(This file must be converted with BinHex 4.0) :#8*#8(NZFR0bB`"bFh*M8P0&4!%!N!F#GELF!*!%!3!!!!(c!!!!m`!!!))!q`" F!8h!!J!,!*!&T!!d!-3!C!B!N!DN!(`*3N*3H5jbFh*M,R*cFQ0bC@jMCA0ZFfP [ER4PER4cF`!!FR0bBe*6483"!!"!!!%!N"+b&)qr!*!'!R9ZBf9X!*!&13"1!%d !RJ3+4'pZeA3J8f&fC3#3"3`!6J!X!A@)0e0KGQ8JBfKKEQGPFb"dEb"dD'8J6@9 dFQphCA*VFb"%Ef0eE@9ZG#$5AM$6)'*PCQpbC5"H-6m#!*!&$!!A!#`!0k!#!!) !N!b""!!"!!!!$J!S!#J!M!'3!!#!998`#J!!!!3!!!*"!!!!J!!$!*!&3!%%!&3 "9!3$@@9c!*!'3!#U!&3!qJ3#6Qm!N!8)!$`!0J&8L$l58(PdD'pZ8faKGQ8ZF(R 6)'Pc)'j[G#"bG@jZD@jR,#!0GfpeE'3JH@pe)'aTDf8JG'mJE'pMBA4P)'Pd2`# 3"3J!#J!S!#UJ!J!"!!!!"J%!!&)!N!9(!#-J!!!!"RB`,M)Z-cPf-#ib,M-JU5" +GA0d)(CKEL"5Eh0cG@dJ,b"-CA4dCA*bEh)X)$aUGA0d3'aPG(4PFR*[FLjZE$i !!!%!!!!"m`!!!2-!!!###2`64#G-!!!!(!##!!4fCA*c!!!!+N4*9%`!!!!f38a 59!!!!%*#3PK'!!!!6N*#@%X!!!"D!!(rr`!!!+J)r"(m!)$rr`!!!"S!N!@!rrm !N!Q!rrm!!!!5!*!&J2rr!!!!RJ#3"-JY: \ No newline at end of file diff --git a/Mac/Contrib/BBPy/source/BBPy_lauch.c b/Mac/Contrib/BBPy/source/BBPy_lauch.c deleted file mode 100644 index f9b964cee1..0000000000 --- a/Mac/Contrib/BBPy/source/BBPy_lauch.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Launch the PythonSlave.py script. - * This works exactly as if you'd double clicked on the file in the Finder, which - * not surprisingly is how its implemented (via the AppleEvents route of course). - * - * Largely based on code submitted by Mark Roseman - * Thanks! - */ - -#include "BBPy.h" - -pascal Boolean MyFileFilter(CInfoPBPtr PB); -FileFilterUPP gMyFileFilterUPP = NULL; - -Boolean GetPythonSlaveSpec(FSSpec * docSpec) { - StandardFileReply reply; - SFTypeList typeList; - - typeList[0] = 'TEXT'; - - //if (!gMyFileFilterUPP) - gMyFileFilterUPP = NewFileFilterProc( MyFileFilter ); - - StandardGetFile(gMyFileFilterUPP, 0, typeList, &reply); - - DisposePtr((Ptr)gMyFileFilterUPP); - - if(!reply.sfGood) - return 0; /* user cancelled */ - - docSpec->vRefNum = reply.sfFile.vRefNum; - docSpec->parID = reply.sfFile.parID; - BlockMove(reply.sfFile.name, docSpec->name, 64); - return 1; -} - -pascal Boolean MyFileFilter(CInfoPBPtr PB) { - OSType fType; /* file type */ - OSType fCreator; /* file creator */ - - fType =((HParmBlkPtr)PB)->fileParam.ioFlFndrInfo.fdType; - fCreator = ((HParmBlkPtr)PB)->fileParam.ioFlFndrInfo.fdCreator; - - if (fType == 'TEXT' && - fCreator == 'Pyth') - return 0; - return 1; -} - -OSErr LaunchPythonSlave(FSSpec * docSpec) { - OSErr err; - FSSpec dirSpec; - AEAddressDesc finderAddress; - AppleEvent theEvent, theReply; - OSType finderSig = 'MACS'; - AliasHandle DirAlias, FileAlias; - AEDesc fileList; - AEDesc aeDirDesc, listElem; - - err = AECreateDesc(typeApplSignature, (Ptr)&finderSig, 4, &finderAddress); - if(err != noErr) return err; - - err = AECreateAppleEvent('FNDR', 'sope', &finderAddress, - kAutoGenerateReturnID, kAnyTransactionID, &theEvent); - if(err != noErr) return err; - - FSMakeFSSpec(docSpec->vRefNum, docSpec->parID, NULL, &dirSpec); - NewAlias(NULL, &dirSpec, &DirAlias); - NewAlias(NULL, docSpec, &FileAlias); - err = AECreateList(NULL, 0, 0, &fileList); - HLock((Handle)DirAlias); - AECreateDesc(typeAlias, (Ptr)*DirAlias, GetHandleSize((Handle)DirAlias), &aeDirDesc); - HUnlock((Handle)DirAlias); - if ((err = AEPutParamDesc(&theEvent, keyDirectObject, &aeDirDesc)) == noErr) { - AEDisposeDesc(&aeDirDesc); - HLock((Handle)FileAlias); - AECreateDesc(typeAlias, (Ptr)*FileAlias, GetHandleSize((Handle)FileAlias), &listElem); - HLock((Handle)FileAlias); - err = AEPutDesc(&fileList, 0, &listElem); - } - AEDisposeDesc(&listElem); - err = AEPutParamDesc(&theEvent, 'fsel', &fileList); - AEDisposeDesc(&fileList); - - err = AESend(&theEvent, &theReply, kAENoReply+kAENeverInteract, - kAENormalPriority, kAEDefaultTimeout, 0L, 0L); - if(err != noErr) return err; - - err = AEDisposeDesc(&theEvent); - if(err != noErr) return err; - - err = AEDisposeDesc(&theReply); - return err; -} diff --git a/Mac/Contrib/BBPy/source/BBPy_launch.c b/Mac/Contrib/BBPy/source/BBPy_launch.c deleted file mode 100644 index f9b964cee1..0000000000 --- a/Mac/Contrib/BBPy/source/BBPy_launch.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Launch the PythonSlave.py script. - * This works exactly as if you'd double clicked on the file in the Finder, which - * not surprisingly is how its implemented (via the AppleEvents route of course). - * - * Largely based on code submitted by Mark Roseman - * Thanks! - */ - -#include "BBPy.h" - -pascal Boolean MyFileFilter(CInfoPBPtr PB); -FileFilterUPP gMyFileFilterUPP = NULL; - -Boolean GetPythonSlaveSpec(FSSpec * docSpec) { - StandardFileReply reply; - SFTypeList typeList; - - typeList[0] = 'TEXT'; - - //if (!gMyFileFilterUPP) - gMyFileFilterUPP = NewFileFilterProc( MyFileFilter ); - - StandardGetFile(gMyFileFilterUPP, 0, typeList, &reply); - - DisposePtr((Ptr)gMyFileFilterUPP); - - if(!reply.sfGood) - return 0; /* user cancelled */ - - docSpec->vRefNum = reply.sfFile.vRefNum; - docSpec->parID = reply.sfFile.parID; - BlockMove(reply.sfFile.name, docSpec->name, 64); - return 1; -} - -pascal Boolean MyFileFilter(CInfoPBPtr PB) { - OSType fType; /* file type */ - OSType fCreator; /* file creator */ - - fType =((HParmBlkPtr)PB)->fileParam.ioFlFndrInfo.fdType; - fCreator = ((HParmBlkPtr)PB)->fileParam.ioFlFndrInfo.fdCreator; - - if (fType == 'TEXT' && - fCreator == 'Pyth') - return 0; - return 1; -} - -OSErr LaunchPythonSlave(FSSpec * docSpec) { - OSErr err; - FSSpec dirSpec; - AEAddressDesc finderAddress; - AppleEvent theEvent, theReply; - OSType finderSig = 'MACS'; - AliasHandle DirAlias, FileAlias; - AEDesc fileList; - AEDesc aeDirDesc, listElem; - - err = AECreateDesc(typeApplSignature, (Ptr)&finderSig, 4, &finderAddress); - if(err != noErr) return err; - - err = AECreateAppleEvent('FNDR', 'sope', &finderAddress, - kAutoGenerateReturnID, kAnyTransactionID, &theEvent); - if(err != noErr) return err; - - FSMakeFSSpec(docSpec->vRefNum, docSpec->parID, NULL, &dirSpec); - NewAlias(NULL, &dirSpec, &DirAlias); - NewAlias(NULL, docSpec, &FileAlias); - err = AECreateList(NULL, 0, 0, &fileList); - HLock((Handle)DirAlias); - AECreateDesc(typeAlias, (Ptr)*DirAlias, GetHandleSize((Handle)DirAlias), &aeDirDesc); - HUnlock((Handle)DirAlias); - if ((err = AEPutParamDesc(&theEvent, keyDirectObject, &aeDirDesc)) == noErr) { - AEDisposeDesc(&aeDirDesc); - HLock((Handle)FileAlias); - AECreateDesc(typeAlias, (Ptr)*FileAlias, GetHandleSize((Handle)FileAlias), &listElem); - HLock((Handle)FileAlias); - err = AEPutDesc(&fileList, 0, &listElem); - } - AEDisposeDesc(&listElem); - err = AEPutParamDesc(&theEvent, 'fsel', &fileList); - AEDisposeDesc(&fileList); - - err = AESend(&theEvent, &theReply, kAENoReply+kAENeverInteract, - kAENormalPriority, kAEDefaultTimeout, 0L, 0L); - if(err != noErr) return err; - - err = AEDisposeDesc(&theEvent); - if(err != noErr) return err; - - err = AEDisposeDesc(&theReply); - return err; -} diff --git a/Mac/Contrib/BBPy/source/BBPy_main.c b/Mac/Contrib/BBPy/source/BBPy_main.c deleted file mode 100644 index a96b271abb..0000000000 --- a/Mac/Contrib/BBPy/source/BBPy_main.c +++ /dev/null @@ -1,104 +0,0 @@ -/* BBPython - A simple menu command to send the contents of a window to the Python interpreter - - copyright © 1996 Just van Rossum, Letterror: just@knoware.nl - - All Rights Reserved -*/ - -#include "BBPy.h" - -OSErr SendTextAsAE(ExternalCallbackBlock *callbacks, Ptr theText, long theSize, Str255 windowTitle) -{ - OSErr err; - AEDesc theEvent; - AEAddressDesc theTarget; - AppleEvent theReply; - AEDesc theTextDesc; - AEDesc theNameDesc; - OSType pythonSig = 'Pyth'; - FSSpec docSpec; - short itemHit; - long time; - EventRecord theDummyEvent; - - /* initialize AE descriptor for python's signature */ - err = AECreateDesc (typeApplSignature, &pythonSig, sizeof(OSType), &theTarget); - if(err != noErr) return err; - - /* initialize AE descriptor for the title of our window */ - err = AECreateDesc (typeChar, &windowTitle[1], windowTitle[0], &theNameDesc); - if(err != noErr) return err; - - /* initialize AE descriptor for the content of our window */ - err = AECreateDesc ('TEXT', theText, theSize, &theTextDesc); - if(err != noErr) return err; - - /* initialize AppleEvent */ - err = AECreateAppleEvent ('pyth', 'EXEC', &theTarget, kAutoGenerateReturnID, kAnyTransactionID, &theEvent); - if(err != noErr) return err; - - /* add the content of our window to the AppleEvent */ - err = AEPutParamDesc (&theEvent, keyDirectObject, &theTextDesc); - if(err != noErr) return err; - - /* add the title of our window to the AppleEvent */ - err = AEPutParamDesc (&theEvent, 'NAME', &theNameDesc); - if(err != noErr) return err; - - /* send the AppleEvent */ - err = AESend (&theEvent, &theReply, kAEWaitReply, kAEHighPriority, kNoTimeOut, NULL, NULL); - if(err == connectionInvalid) { - // launch PythonSlave.py - itemHit = Alert(128, NULL); - if(itemHit == 2) return noErr; /* user cancelled */ - - if( ! GetPythonSlaveSpec(&docSpec) ) - return noErr; /* user cancelled */ - - err = LaunchPythonSlave(&docSpec); - if(err != noErr) return err; - } else if(err != noErr) - return err; - - /* clean up */ - err = AEDisposeDesc (&theTarget); - if(err != noErr) return err; - - err = AEDisposeDesc (&theNameDesc); - if(err != noErr) return err; - - err = AEDisposeDesc (&theTextDesc); - if(err != noErr) return err; - - err = AEDisposeDesc (&theEvent); - if(err != noErr) return err; - - err = AEDisposeDesc (&theReply); - if(err != noErr) return err; - - /* everything is cool */ - return noErr; -} - -pascal void main(ExternalCallbackBlock *callbacks, WindowPtr theWindow) -{ - long oldA4; - OSErr err; - Handle windowContents; - Str255 windowTitle; - - //RememberA0(); /* Can't find header file for this. Seems to work anyway. */ - - oldA4 = SetUpA4(); - - GetWTitle(theWindow, windowTitle); - windowContents = callbacks->GetWindowContents(theWindow); - - HLock(windowContents); - err = SendTextAsAE(callbacks, *windowContents, GetHandleSize(windowContents), windowTitle); - if(err != noErr) callbacks->ReportOSError(err); - HUnlock(windowContents); - - RestoreA4(oldA4); -} diff --git a/Mac/Contrib/ImageHelpers/ExtPixMapWrapper.py b/Mac/Contrib/ImageHelpers/ExtPixMapWrapper.py deleted file mode 100644 index ac261b5d37..0000000000 --- a/Mac/Contrib/ImageHelpers/ExtPixMapWrapper.py +++ /dev/null @@ -1,46 +0,0 @@ -''' -A really quick and dirty hack to extend PixMapWrapper -They are mere copies of the toImage and fromImage methods. -Riccardo Trocca (rtrocca@libero.it) -''' -from PixMapWrapper import * -import Numeric - -class ExtPixMapWrapper(PixMapWrapper): - - def toNumeric(self): - - data = self.tostring()[1:] + chr(0) - bounds = self.bounds - tmp=Numeric.fromstring(data,Numeric.UnsignedInt8) - #tmp.shape=(bounds[3]-bounds[1],bounds[2]-bounds[0],4) - tmp.shape=(bounds[2]-bounds[0],bounds[3]-bounds[1],4) - return Numeric.transpose(tmp,(1,0,2)) - - def fromNumeric(self,num): - s=num.shape - x=num.shape[1] - y=num.shape[0] - #bands=1 Greyscale image - #bands=3 RGB image - #bands=4 RGBA image - if len(s)==2: - bands=1 - num=Numeric.resize(num,(y,x,1)) - else: - bands=num.shape[2] - - if bands==1: - num=Numeric.concatenate((num,num,num),2) - bands=3 - if bands==3: - alpha=Numeric.ones((y,x))*255 - alpha.shape=(y,x,1) - num=Numeric.concatenate((num,alpha),2) - - data=chr(0)+Numeric.transpose(num,(1,0,2)).astype(Numeric.UnsignedInt8).tostring() - PixMapWrapper.fromstring(self,data,x,y) - - - - diff --git a/Mac/Contrib/ImageHelpers/ImageMac.py b/Mac/Contrib/ImageHelpers/ImageMac.py deleted file mode 100644 index 44a38c55c4..0000000000 --- a/Mac/Contrib/ImageHelpers/ImageMac.py +++ /dev/null @@ -1,277 +0,0 @@ -''' -ImageMac.py by Trocca Riccardo (rtrocca@libero.it) -This module provides functions to display images and Numeric arrays -It provides two classes ImageMacWin e NumericMacWin and two simple methods showImage and -showNumeric. - -They work like this: -showImage(Image,"optional window title",zoomFactor) -the same for showNumeric -zoomfactor (defaults to 1) allows to zoom in the image by a factor of 1x 2x 3x and so on -I did't try with a 0.5x or similar. -The windows don't provide a scrollbar or a resize box. -Probably a better solution (and more similar to the original implementation in PIL and NumPy) -would be to save a temp file is some suitable format and then make an application (through appleevents) to open it. -Good guesses should be GraphicConverter or PictureViewer. - -However the classes ImageMacWin e NumericMacWin use an extended version of PixMapWrapper in order to -provide an image buffer and then blit it in the window. - -Being one of my first experiences with Python I didn't use Exceptions to signal error conditions, sorry. - -''' -import W -from Carbon import Qd -from ExtPixMapWrapper import * -from Numeric import * -import Image -import macfs - -class ImageMacWin(W.Window): - - def __init__(self,size=(300,300),title="ImageMacWin"): - self.pm=ExtPixMapWrapper() - self.empty=1 - self.size=size - W.Window.__init__(self,size,title) - - def Show(self,image,resize=0): - #print "format: ", image.format," size: ",image.size," mode: ",image.mode - #print "string len :",len(image.tostring()) - self.pm.fromImage(image) - self.empty=0 - if resize: - self.size=(image.size[0]*resize,image.size[1]*resize) - W.Window.do_resize(self,self.size[0],self.size[1],self.wid) - self.do_drawing() - - def do_drawing(self): - #print "do_drawing" - self.SetPort() - Qd.RGBForeColor( (0,0,0) ) - Qd.RGBBackColor((65535, 65535, 65535)) - Qd.EraseRect((0,0,self.size[0],self.size[1])) - if not self.empty: - #print "should blit" - self.pm.blit(0,0,self.size[0],self.size[1]) - - def do_update(self,macoswindowid,event): - #print "update" - self.do_drawing() - -class NumericMacWin(W.Window): - - def __init__(self,size=(300,300),title="ImageMacWin"): - self.pm=ExtPixMapWrapper() - self.empty=1 - self.size=size - W.Window.__init__(self,size,title) - - def Show(self,num,resize=0): - #print "shape: ", num.shape - #print "string len :",len(num.tostring()) - self.pm.fromNumeric(num) - self.empty=0 - if resize: - self.size=(num.shape[1]*resize,num.shape[0]*resize) - W.Window.do_resize(self,self.size[0],self.size[1],self.wid) - self.do_drawing() - - def do_drawing(self): - #print "do_drawing" - self.SetPort() - Qd.RGBForeColor( (0,0,0) ) - Qd.RGBBackColor((65535, 65535, 65535)) - Qd.EraseRect((0,0,self.size[0],self.size[1])) - if not self.empty: - #print "should blit" - self.pm.blit(0,0,self.size[0],self.size[1]) - - def do_update(self,macoswindowid,event): - #print "update" - self.do_drawing() - -''' -Some utilities: convert an Image to a NumPy array and viceversa. -The Image2Numeric function doesn't make any color space conversion. -The Numeric2Image function returns an L or RGB or RGBA images depending on the shape of -the array: - (x,y) -> 'L' - (x,y,1) -> 'L' - (x,y,3) -> 'RGB' - (x,y,4) -> 'RGBA' -''' -def Image2Numeric(im): - tmp=fromstring(im.tostring(),UnsignedInt8) - - if (im.mode=='RGB')|(im.mode=='YCbCr'): - bands=3 - - if (im.mode=='RGBA')|(im.mode=='CMYK'): - bands=4 - - if (im.mode=='L'): - bands=1 - - tmp.shape=(im.size[0],im.size[1],bands) - return transpose(tmp,(1,0,2)) - -def Numeric2Image(num): - #sometimes a monoband image's shape can be (x,y,1), other times just (x,y). Here w deal with both - if len(num.shape)==3: - bands=num.shape[2] - if bands==1: - mode='L' - elif bands==3: - mode='RGB' - else: - mode='RGBA' - return Image.fromstring(mode,(num.shape[1],num.shape[0]),transpose(num,(1,0,2)).astype(UnsignedInt8).tostring()) - else: - return Image.fromstring('L',(num.shape[1],num.shape[0]),transpose(num).astype(UnsignedInt8).tostring()) - -def showImage(im,title="ImageWin",zoomFactor=1): - imw=ImageMacWin((300,200),title) - imw.open() - try: - imw.Show(im,zoomFactor ) - except MemoryError,e: - imw.close() - print "ImageMac.showImage: Insufficient Memory" - - -def showNumeric(num,title="NumericWin",zoomFactor=1): - #im=Numeric2Image(num) - numw=NumericMacWin((300,200),title) - numw.open() - try: - numw.Show(num,zoomFactor ) - except MemoryError: - numw.close() - print "ImageMac.showNumeric Insufficient Memory" - -''' -GimmeImage pops up a file dialog and asks for an image file. -it returns a PIL image. -Optional argument: a string to be displayed by the dialog. -''' - -def GimmeImage(prompt="Image File:"): - import macfs - fsspec, ok = macfs.PromptGetFile(prompt) - if ok: - path = fsspec.as_pathname() - return Image.open(path) - return None - -''' -This is just some experimental stuff: - Filter3x3 a convolution filter (too slow use signal tools instead) - diffBWImage subtracts 2 images contained in NumPy arrays - averageN it computes the average of a list incrementally - BWImage converts an RGB or RGBA image (in a NumPy array) to BW - SplitBands splits the bands of an Image (inside a NumPy) - NumHisto and PlotHisto are some experiments to plot an intesity histogram -''' - -def Filter3x3(mul,fi,num): - (a,b,c,d,e,f,g,h,i)=fi - print fi - num.shape=(num.shape[0],num.shape[1]) - res=zeros(num.shape) - for x in range(1,num.shape[0]-1): - for y in range(1,num.shape[1]-1): - xb=x-1 - xa=x+1 - yb=y-1 - ya=y+1 - res[x,y]=int((a*num[xb,yb]+b*num[x,yb]+c*num[xa,yb]+d*num[xb,y]+e*num[x,y]+f*num[xa,y]+g*num[xb,ya]+h*num[x,ya]+i*num[xa,ya])/mul) - return res - -def diffBWImage(num1,num2): - return 127+(num1-num2)/2 - -def averageN(N,avrg,new): - return ((N-1)*avrg+new)/N - -def BWImage(num): - if num.shape[2]==3: - bw=array(((0.3086,0.6094,0.0820))) - else: - bw=array(((0.3086,0.6094,0.0820,0))) - res=innerproduct(num,bw) - res.shape=(res.shape[0],res.shape[1]) - return res - -def SplitBands(num): - x=num.shape[0] - y=num.shape[1] - if num.shape[2]==3: - return (reshape(num[:,:,0],(x,y)),reshape(num[:,:,1],(x,y)),reshape(num[:,:,2],(x,y))) - else: - return (reshape(num[:,:,0],(x,y)),reshape(num[:,:,1],(x,y)),reshape(num[:,:,2],(x,y)),reshape(num[:,:,3],(x,y))) - -def NumHisto(datas): - #print "type(datas) ",type(datas) - a=ravel(datas) - n=searchsorted(sort(a),arange(0,256)) - n=concatenate([n,[len(a)]]) - return n[1:]-n[:-1] - -def PlotHisto(datas,ratio=1): - from graphite import * - from MLab import max - h=NumHisto(datas) - #print "histo: ",h - #print "histo.shape: ",h.shape - maxval=max(h) - #print "maxval ",maxval - h.shape=(256,1) - x=arange(0,256) - x.shape=(256,1) - datah=concatenate([x,h],1) - print "data: " - print datah - g=Graph() - g.datasets.append(Dataset(datah)) - f0=PointPlot() - f0.lineStyle = LineStyle(width=2, color=red, kind=SOLID) - g.formats = [f0] - g.axes[X].range = [0,255] - g.axes[X].tickMarks[0].spacing = 10 - #g.axes[X].tickMarks[0].labels = "%d" - g.axes[Y].range = [0,maxval/ratio] - g.bottom = 370 - g.top =10 - g.left=10 - g.right=590 - - genOutput(g,'QD',size=(600,400)) - -def test(): - import MacOS - import Image - import ImageFilter - import Numeric - fsspec, ok = macfs.PromptGetFile("Image File:") - if ok: - path = fsspec.as_pathname() - im=Image.open(path) - #im2=im.filter(ImageFilter.SMOOTH) - showImage(im,"normal") - num=Image2Numeric(im) - #num=Numeric.transpose(num,(1,0,2)) - - showNumeric(num,"Numeric") - - print "num.shape ",num.shape - showImage(Numeric2Image(num),"difficile") - #showImage(im.filter(ImageFilter.SMOOTH),"smooth") - #showImage(im.filter(ImageFilter.FIND_EDGES).filter(ImageFilter.SHARPEN),"detail") - - print "here" - else: - print "did not open file" - -if __name__ == '__main__': - test() \ No newline at end of file diff --git a/Mac/Contrib/ImageHelpers/MovieUtils.py b/Mac/Contrib/ImageHelpers/MovieUtils.py deleted file mode 100644 index 89762f454d..0000000000 --- a/Mac/Contrib/ImageHelpers/MovieUtils.py +++ /dev/null @@ -1,269 +0,0 @@ -from Carbon import Qt -from Carbon import QuickTime -import macfs -from Carbon import Qd -from Carbon.QuickDraw import srcCopy -from ExtPixMapWrapper import ExtPixMapWrapper -from Carbon.Qdoffs import * -import ImageMac -import W - - - - -def GetFrames(m): - frameCount=0 - theTime=0 - type=QuickTime.VideoMediaType - #type='MPEG' - flags=QuickTime.nextTimeMediaSample - flags=flags+QuickTime.nextTimeEdgeOK - - while theTime>=0: - (theTime,duration)=m.GetMovieNextInterestingTime(flags,1,type,theTime,0) - #print "theTime ",theTime," duration ",duration - frameCount=frameCount+1 - flags = QuickTime.nextTimeMediaSample - - - return frameCount-1 - -def GetMovieFromOpenFile(): - fss, ok = macfs.StandardGetFile(QuickTime.MovieFileType) - mov = None - if ok: - movieResRef = Qt.OpenMovieFile(fss, 1) - mov, d1, d2 = Qt.NewMovieFromFile(movieResRef, 0, QuickTime.newMovieActive) - - return mov - - -class ExtMovie: - def __init__(self,mov): - - self.frames=0 - self.frameArray=[] - self.movie=mov - self._countFrames() - r=self.movie.GetMovieBox() - self.myRect=(0,0,r[2]-r[0],r[3]-r[1]) - self.movie.SetMovieBox(self.myRect) - self.pm=ExtPixMapWrapper() - self.pm.left=0 - self.pm.top=0 - self.pm.right=r[2]-r[0] - self.pm.bottom=r[3]-r[1] - self.gw=NewGWorld(32,self.myRect,None,None,0) - self.movie.SetMovieGWorld(self.gw.as_GrafPtr(), self.gw.GetGWorldDevice()) - self.GotoFrame(0) - - def _countFrames(self): - #deve contare il numero di frame, creare un array con i tempi per ogni frame - theTime=0 - #type=QuickTime.VIDEO_TYPE - type=QuickTime.VideoMediaType - flags=QuickTime.nextTimeMediaSample+QuickTime.nextTimeEdgeOK - - while theTime>=0: - (theTime,duration)=self.movie.GetMovieNextInterestingTime(flags,1,type,theTime,0) - self.frameArray.append((theTime,duration)) - flags = QuickTime.nextTimeMediaSample - self.frames=self.frames+1 - - - - def GotoFrame(self,n): - if n<=self.frames: - self.curFrame=n - (port,device)=GetGWorld() - SetGWorld(self.gw.as_GrafPtr(),None) - (self.now,self.duration)=self.frameArray[n] - self.movie.SetMovieTimeValue(self.now) - pixmap=self.gw.GetGWorldPixMap() - - if not LockPixels(pixmap): - print "not locked" - else: - - #Qd.EraseRect(self.myRect) - #this draws the frame inside the current gworld - self.movie.MoviesTask(0) - #this puts it in the buffer pixmap - self.pm.grab(0,0,self.myRect[2],self.myRect[3]) - UnlockPixels(pixmap) - #self.im=self.pm.toImage() - SetGWorld(port,device) - - def NextFrame(self): - self.curFrame=self.curFrame+1 - if self.curFrame>self.frames: - self.curFrame=0 - self.GotoFrame(self.curFrame) - - def isLastFrame(): - return self.curFrame==self.frames - - - def GetImage(self): - return self.pm.toImage() - - def GetImageN(self,n): - self.GotoFrame(n) - return self.pm.toImage() - - def GetNumeric(self): - return self.pm.toNumeric() - - def GetNumericN(self,n): - self.GotoFrame(n) - return self.pm.toNumeric() - - def Blit(self,destRect): - Qd.RGBForeColor( (0,0,0) ) - Qd.RGBBackColor((65535, 65535, 65535)) - - #Qd.MoveTo(10,10) - #Qd.LineTo(200,150) - Qd.CopyBits(self.gw.GetPortBitMapForCopyBits(),Qd.GetPort().GetPortBitMapForCopyBits(),self.myRect,destRect,srcCopy,None) - -class MovieWin(W.Window): - - def __init__(self,eMovie,title="MovieWin"): - self.ExtMovie=eMovie - -def test(): - import ImageFilter - from MLab import max - from MLab import min - from Numeric import * - Qt.EnterMovies() - m=GetMovieFromOpenFile() - em=ExtMovie(m) - print "Total frames:",em.frames," Current frame:",em.curFrame - #ImageMac.showImage(em.GetImage(),"frame 0",1) - #em.GotoFrame(500) - #ImageMac.showImage(em.GetImage().filter(ImageFilter.SMOOTH),"frame 500",2) - #ImageMac.showImage(em.GetImageN(1000),"frame 1000",2) - #r=array(((1,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0))) - #g=array(((0,0,0,0),(0,1,0,0),(0,0,0,0),(0,0,0,0))) - #b=array(((0,0,0,0),(0,0,0,0),(0,0,1,0),(0,0,0,0))) - #bw=array(((0.3086,0.6094,0.0820,0))) - #r2=array(((1,0,0,0))) - #ImageMac.showNumeric(em.GetNumericN(0),"frame 0",1) - #print em.GetNumericN(500).shape - #print "original (1,1)",em.GetNumericN(0)[100,100] - #print "product shape ",innerproduct(em.GetNumericN(0),r).shape - #print "product (1,1) ",innerproduct(em.GetNumericN(0),r)[100,100] - - #ImageMac.showNumeric(ImageMac.BWImage(em.GetNumericN(50))) - #ImageMac.showNumeric(innerproduct(em.GetNumericN(500),r),"frame 500r",2) - #ImageMac.showNumeric(innerproduct(em.GetNumericN(500),g),"frame 500g",2) - #ImageMac.showNumeric(innerproduct(em.GetNumericN(500),b),"frame 500b",2) - - #ImageMac.showNumeric(innerproduct(em.GetNumericN(500),r2),"frame 500r2",2) - #ImageMac.showNumeric(innerproduct(em.GetNumericN(10),bw),"frame 0bw",1) - #ImageMac.showNumeric(innerproduct(em.GetNumericN(400),bw),"frame 10bw",1) - #colordif=(em.GetNumericN(100)-em.GetNumericN(10))+(255,255,255,255) - #colordif=colordif/2 - #ImageMac.showNumeric(colordif,"colordif",1) - #ImageMac.showNumeric(ImageMac.BWImage(colordif),"bwcolordif",1) - ilut=arange(0,256) - #ilut[118]=255 - #ilut[119]=255 - #ilut[120]=255 - ilut[121]=255 - ilut[122]=255 - ilut[123]=255 - ilut[124]=255 - ilut[125]=255 - ilut[126]=255 - ilut[127]=255 - ilut[128]=255 - ilut[129]=255 - #ilut[130]=255 - #ilut[131]=255 - #ilut[132]=255 - mlut=ones(256) - mlut[118]=0 - mlut[119]=0 - mlut[120]=0 - mlut[121]=0 - mlut[122]=0 - mlut[123]=0 - mlut[124]=0 - mlut[125]=0 - mlut[126]=0 - mlut[127]=0 - mlut[128]=0 - mlut[129]=0 - mlut[130]=0 - mlut[131]=0 - mlut[132]=0 - - ImageMac.showImage(em.GetImageN(100),"provaImg",2) - ImageMac.showNumeric(em.GetNumericN(100),"provaNum",2) - ImageMac.showImage(em.GetImageN(100).filter(ImageFilter.SMOOTH),"frame 500",2) - #image=ImageMac.BWImage(em.GetNumericN(100)) - #ImageMac.showNumeric(image) - - - - - - - - - #difimage=abs(image-ImageMac.BWImage(em.GetNumericN(10))) - #ImageMac.PlotHisto(difimage,32) - #ImageMac.showNumeric(difimage) - #difimage=127+(image-ImageMac.BWImage(em.GetNumericN(10)))/2 - #ImageMac.PlotHisto(difimage,32) - #ImageMac.showNumeric(difimage) - #fimage=ImageMac.Filter3x3(16.0,(1,1,1,1,8,1,1,1,1),difimage) - #ImageMac.showNumeric(fimage) - #difimage2=choose(fimage.astype(UnsignedInt8),ilut) - #ImageMac.showNumeric(difimage2) - - #(r,g,b,a)=ImageMac.SplitBands(em.GetNumericN(10)) - #ImageMac.showNumeric(r,"r") - #ImageMac.showNumeric(g,"g") - #ImageMac.showNumeric(b,"b") - #ImageMac.showNumeric(a,"a") - #bwdif=abs(((innerproduct(em.GetNumericN(400),bw)-innerproduct(em.GetNumericN(10),bw))+255)/2) - #ImageMac.showNumeric(bwdif,"frame diff/bw",1) - #ImageMac.PlotHisto(bwdif) - #ImageMac.showNumeric(choose(bwdif.astype(UnsignedInt8),ilut),"frame diff/bw",1) - #ImageMac.PlotHisto(choose(bwdif.astype(UnsignedInt8),ilut)) - #bwimage=ImageMac.BWImage(em.GetNumericN(100)) - #ImageMac.showNumeric((ImageMac.BWImage(em.GetNumericN(90))+ImageMac.BWImage(em.GetNumericN(110))+ImageMac.BWImage(em.GetNumericN(130))+ImageMac.BWImage(em.GetNumericN(150))+ImageMac.BWImage(em.GetNumericN(170)))/5) - #bwdif=abs(((bwimage-ImageMac.BWImage(em.GetNumericN(10)))+255)/2) - #ImageMac.showNumeric(bwimage,"original frame",1) - #ImageMac.showNumeric(bwdif,"frame diff/bw",1) - #ImageMac.PlotHisto(bwdif) - #ImageMac.showNumeric(choose(bwdif.astype(UnsignedInt8),ilut),"frame diff/bw",1) - #mmask=choose(bwdif.astype(UnsignedInt8),mlut) - #ImageMac.showNumeric(255-255*mmask,"frame diff/bw",1) - #mmask.shape=bwimage.shape - #ImageMac.showNumeric(mmask*bwimage,"frame diff/bw",1) - - #ImageMac.showNumeric((innerproduct(em.GetNumericN(300),bw)-innerproduct(em.GetNumericN(0),bw)),"frame diff/bw",1) - #ImageMac.showNumeric((innerproduct(em.GetNumericN(400)-em.GetNumericN(10),bw)),"frame diff2/bw",1) - #cdif=em.GetNumericN(400)-em.GetNumericN(10) - #ImageMac.showNumeric(,"frame diff2/bw",1) - - #ImageMac.showNumeric(innerproduct(cdif,r),"frame 500r",1) - #ImageMac.showNumeric(innerproduct(cdif,g),"frame 500g",1) - #ImageMac.showNumeric(innerproduct(cdif,b),"frame 500b",1) -def test2(): - Qt.EnterMovies() - m=GetMovieFromOpenFile() - if m==None: - print "no movie opened" - else: - em=ExtMovie(m) - print "Total frames: ",em.frames," Current frame:",em.curFrame - ImageMac.showImage(em.GetImage(),"frame 0",1) - -if __name__ == '__main__': - test2() - \ No newline at end of file diff --git a/Mac/Contrib/ImageHelpers/ReadMe b/Mac/Contrib/ImageHelpers/ReadMe deleted file mode 100644 index b6267f7562..0000000000 --- a/Mac/Contrib/ImageHelpers/ReadMe +++ /dev/null @@ -1,22 +0,0 @@ -ExtPixMapWrapper.py -ImageMac.py -Hello these are the classes to deal with Images and NumPy arrays I told -you about. I left everything unchanged, it is the same copy I use with -comments added. However I think that in ImageMac the only part worth including -in MacPython (if you think it is worth), is the first half, until GimmeImage. -After that it is almost rubbish I used in my CV experiments. - -MovieUtils.py -This is another class I use. IT contais a lot of my experiments (unuseful), but -the first function GetFrames(). it is almost the translation of a QT sample. -GetMovieFromOpenFile() it is the usual shortcut to get a movie. (no error tracking -done). -The class ExtMovie requires a movie in the constructor and then -provides a method to take every single frame and convert it to an -Image or a NUmPy array. -If you think that it can be included in the qt examples I'll write comments and -polish it a bit. (exceptions handling) - - Riccardo Trocca - -P.S. Everything works with 2.0b1 diff --git a/Mac/Contrib/PythonDetector/OpenPythonLib b/Mac/Contrib/PythonDetector/OpenPythonLib deleted file mode 100644 index 87bc7be9c4670310652fb34b4ce09c6717e334ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13234 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 diff --git a/Mac/Contrib/PythonDetector/OpenPythonLib with NS b/Mac/Contrib/PythonDetector/OpenPythonLib with NS deleted file mode 100644 index 08cb027d65870eb39ba7684db8372fe3836d0838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13853 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 vwl&)_4i<(6Q0JNDJ3aM#U&}G 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 E0KQMXwg3PC diff --git a/Mac/Contrib/PythonDetector/readme.txt b/Mac/Contrib/PythonDetector/readme.txt deleted file mode 100644 index e6b61da052..0000000000 --- a/Mac/Contrib/PythonDetector/readme.txt +++ /dev/null @@ -1,60 +0,0 @@ -======================================================================== - Copyright (c) 1999 Bill Bedford -======================================================================== -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 the copyright notice and warranty disclaimer appear in -supporting documentation. - -Bill Bedford disclaims all warranties with regard to this software, -including all implied warranties of merchantability and fitness. In -no event shall Bill Bedford 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 tortuous action, arising out of or in connection with the use or -performance of this software. -======================================================================== - - -PythonDetectors is a set of Apple Data Detectors that will open an entry in -the Python Library from a keyword in contextual menus. It looks up either -module name and open the relevant page or looks up a built in function and -opens at the entry in the Builtin functions page. - -If anyone would like more functionality please contact me. - -To use it you must have Apple Data Detectors 1.0.2 installed This can be -obtained from http://www.apple.com/applescript/data_detectors/ - -Two action files are provided "OpenPythonLib" will open the library file -with whatever application is defined as the Internet Config 'file' helper. -"OpenPythonLib with NS" opens the library file with Netscape. - -Instructions -============ - -1/ Open the two apple script files with the Script Editor and change the -first compiled line to point to the location of your Python Library -folder. - -2/ Open the Apple Data Detectors Control Panel and choose Install Detector -File... from the File menu. - -3/ Pick a Detector file from the dialog. - -4/ Let the Data Detectors Control Panel optimize the detector. - -5/ Choose Install Action File... from the File menu. - -6/ Pick an action file from the dialog. - -7/ The Data Detectors Control Panel will automatically place the new action -with its detector. You can click on the action in the control panel window -to view information about its use. - - -Gotchas -======= - -Unfortunately ADD only works with the US keyboard installed. diff --git a/Mac/Contrib/Sherlock/Python-FAQ.src b/Mac/Contrib/Sherlock/Python-FAQ.src deleted file mode 100644 index c316c33f4567b2b8e798347da51d48740bbc8d81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3342 zcmZQz6=PsvV!#9}3=9mM3=9lj3=9kk3=9lh3=9le3=9k)aYhCPhCBuaCL;#0UZw>M z3|x7c#l;0_c`0eEAa!N-ZwQ&(kYQ)GIC4PfpL&P0GyEPfIK;*DI)0;^izYNJ%V7MbcVc zUaps1o~f6YqhFVmn4GN-u}Rm>F;K6#C|NI~umY~lIU_YW+ac_pbuc1paw3JOK3 z#icnVKAFWOF!M5s?35HxWT4uT@>432HF=h#=E5}PWFl(<$++f$LQ}~`KM~{rP=M+~ z{A0(v46LD{0U#j@fFPeWG&E39G*mP+P!wb!$oRm}&`{A((Lf}AU?7Yi3Q`{m<%fce4+IN=)Wi9r zp`xOKp`oE5<3a-=#)0?&NWKAu0|p-yTlg_J0y7yH7(f_9DUu+Bxd9B|>Og`Z4A;M5 z11sx>4RCo323R|)d?u>h7`pMvgXBOMWDmq>1PKxYxs8xK%{UCV;1_p=_DhYA{1IT>J!1I&1c zB-k2=0Wf(m4ORtF0^);Q2%%een9<%+6mqa{sg`U@*m_r$bWzujwG*sg8v2o1O5l{A3zW)-vFf{ z6e|M*11m#l05S~{0r5el6i5}A4q#viU=0jq0M#I&qM`v{Iuughga(4^A#foFG7nVr zfoV`t2r>Z;GcpJ=FmN!kKj3I&OJHDNf50$-u>piRC;b1<0m1_R|8q|K|G#tM|Nk8z z-2DIlK^SiT|NkKj^Z)<<0fyzi_=- zW0*tW_Om~rp8fy-|B#1b`~Uy{z%a~i5Dl{*(xyT1&{(j77n0~07;y1H+CXw349b4c zGzt<1VTg8c(gblq#()zxl7SmQd0+!b2BHFzJ-}=b0pUW8hnfyb+#orSg;05z0+19K zL*)rjpr#k1UB|9+*G2aQ0|SE$!!!og%;X#s1_lPB%;X#k1_lPZ%;aKaP+uf7xfmoK z=IQJQ;wNP$7lY*U_V4@;X{9kRFhJN$;3^ZsX5(O2x$OaE`>?CrfU04;0CFNkoc#*B H%IyyTMc?yR diff --git a/Mac/Contrib/Sherlock/Python-docs.src b/Mac/Contrib/Sherlock/Python-docs.src deleted file mode 100644 index f3423c4f263c354fb646a5208518720667fa5984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3344 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 fAV)#i>^w+pP?SQ|vtI#;Gc style %s, tabsize %d, indent %d' % (self.fnm, style, tabsz, indent) - tokenize.tokenize(self.getline, self.tokeneater) - #import pprint - #pprint.pprint(self.indents) - new = [] - for (lvl, s, e) in self.indents: - if s >= len(self.txt): - break - if s == e: - continue - oldlead, content = self.split(self.txt[s]) - #print "oldlead", len(oldlead), `oldlead` - if style == TABSONLY: - newlead = '\t'*lvl - elif style == SPACESONLY: - newlead = ' '*(indent*lvl) - else: - sz = indent*lvl - t,spcs = divmod(sz, tabsz) - newlead = '\t'*t + ' '*spcs - new.append(newlead + content) - for ln in self.txt[s+1:e]: - lead, content = self.split(ln) - #print "lead:", len(lead) - new.append(newlead + lead[len(oldlead):] + content) - self.save(new) - #print "---", self.fnm - #for ln in new: - # print ln, - #print - - def save(self, txt): - bakname = os.path.splitext(self.fnm)[0]+'.bak' - print "backing up", self.fnm, "to", bakname - #print os.getcwd() - try: - os.rename(self.fnm, bakname) - except os.error: - os.remove(bakname) - os.rename(self.fnm, bakname) - open(self.fnm, 'w').writelines(txt) - -def test(): - tc = PyText('test1.py') - tc.process() - tc = PyText('test1.py') - tc.process(style=TABSONLY) - tc = PyText('test1.py') - tc.process(style=MIXED, indent=4, tabs=8) - tc = PyText('test1.py') - tc.process(style=MIXED, indent=2, tabs=8) - -def cleanfile(fnm, d): - if os.path.isdir(fnm) and not os.path.islink(fnm): - names = os.listdir(fnm) - for name in names: - fullnm = os.path.join(fnm, name) - if (os.path.isdir(fullnm) and not os.path.islink(fullnm)) or \ - os.path.normcase(fullnm[-3:]) == ".py": - cleanfile(fullnm, d) - return - tc = PyText(fnm, d) - tc.process() - -usage="""\ -%s [options] [path...] - options - -T : reformat to TABS ONLY - -S : reformat to SPACES ONLY ( -i option is important) - -M : reformat to MIXED SPACES / TABS ( -t and -i options important) - -t : tab is worth characters - -i : indents should be characters - -h : print this text - path is file or directory -""" -if __name__ == '__main__': - import sys, getopt, os - opts, args = getopt.getopt(sys.argv[1:], "TSMht:i:") - d = {} - print `opts` - for opt in opts: - if opt[0] == '-T': - d['style'] = TABSONLY - elif opt[0] == '-S': - d['style'] = SPACESONLY - elif opt[0] == '-M': - d['style'] = MIXED - elif opt[0] == '-t': - d['tabs'] = opt[1] - elif opt[0] == '-i': - d['indent'] = opt[1] - elif opt[0] == '-h': - print usage % sys.argv[0] - sys.exit(0) - if not args: - print usage % sys.argv[0] - for arg in args: - cleanfile(arg, d) - - - - - - - - - - - - - - diff --git a/Mac/Contrib/mpwsystem/mpwsystem.py b/Mac/Contrib/mpwsystem/mpwsystem.py deleted file mode 100644 index 34646c4ea5..0000000000 --- a/Mac/Contrib/mpwsystem/mpwsystem.py +++ /dev/null @@ -1,67 +0,0 @@ - -"""mpwsystem - -A simple example of how to use Apple Events to implement a "system()" -call that invokes ToolServer on the command. - -Contributed by Daniel Brotsky . - -(renamed from aesystem to mpwsystem by Jack) - -system(cmd, infile = None, outfile = None, errfile = None) - -1. Every call to system sets "lastStatus" and "lastOutput" to the -status and output -produced by the command when executed in ToolServer. (lastParameters -and lastAttributes -are set to the values of the AppleEvent result.) - -2. system returns lastStatus unless the command result indicates a MacOS error, -in which case os.Error is raised with the errnum as associated value. - -3. You can specify ToolServer-understandable pathnames for -redirection of input, -output, and error streams. By default, input is Dev:Null, output is captured -and returned to the caller, diagnostics are captured and returned to -the caller. -(There's a 64K limit to how much can be captured and returned this way.)""" - -import os -import aetools - -try: server -except NameError: server = aetools.TalkTo("MPSX", 1) - -lastStatus = None -lastOutput = None -lastErrorOutput = None -lastScript = None -lastEvent = None -lastReply = None -lastParameters = None -lastAttributes = None - -def system(cmd, infile = None, outfile = None, errfile = None): - global lastStatus, lastOutput, lastErrorOutput - global lastScript, lastEvent, lastReply, lastParameters, lastAttributes - cmdline = cmd - if infile: cmdline += " <" + infile - if outfile: cmdline += " >" + outfile - if errfile: cmdline += " " + str(chr(179)) + errfile - lastScript = "set Exit 0\r" + cmdline + "\rexit {Status}" - lastEvent = server.newevent("misc", "dosc", {"----" : lastScript}) - (lastReply, lastParameters, lastAttributes) = server.sendevent(lastEvent) - if lastParameters.has_key('stat'): lastStatus = lastParameters['stat'] - else: lastStatus = None - if lastParameters.has_key('----'): lastOutput = lastParameters['----'] - else: lastOutput = None - if lastParameters.has_key('diag'): lastErrorOutput = lastParameters['diag'] - else: lastErrorOutput = None - if lastParameters['errn'] != 0: - raise os.Error, lastParameters['errn'] - return lastStatus - -if __name__ == '__main__': - sts = system('alert "Hello World"') - print 'system returned', sts - - diff --git a/Mac/Contrib/osam/OSAm.c b/Mac/Contrib/osam/OSAm.c deleted file mode 100644 index aa9a5da335..0000000000 --- a/Mac/Contrib/osam/OSAm.c +++ /dev/null @@ -1,277 +0,0 @@ -/* - * - * This is a simple module to allow the - * user to compile and execute an applescript - * which is passed in as a text item. - * - * Sean Hummel - * 1/20/98 - * RealNetworks - * - * Jay Painter - * - * - */ -#include "OSAm.h" -#include "ScriptRunner.h" -#include - - - -/* - * Boiler plate generated from "genmodule.py" - */ -static PyObject *ErrorObject; -static char OSAm_DoCommand__doc__[] = ""; - - - -static PyObject * -OSAm_RunCompiledScript (self, args) - PyObject *self; - PyObject *args; -{ - char *commandStr = NULL; - char *outpath = NULL; - OSErr myErr; - AEDesc temp; - EventRecord event; - - temp.dataHandle = NULL; - - if (!PyArg_ParseTuple (args, "s", &commandStr)) - return NULL; - - myErr = ExecuteScriptFile (commandStr, NULL, &temp); - - if (temp.dataHandle != NULL && temp.descriptorType == 'TEXT') - { - char *line; - DescType typeCode; - long dataSize = 0; - OSErr err; - - dataSize = AEGetDescDataSize (&temp); - - if (dataSize > 0) - { - PyObject *result = PyString_FromStringAndSize (NULL, - dataSize); - - - if (!result) - { - printf ("OSAm.error Out of memory.\n"); - Py_INCREF (Py_None); - AEDisposeDesc (&temp); - return Py_None; - } - if ( (err=AEGetDescData(&temp, PyString_AS_STRING(result), dataSize)) < 0 ) - { - AEDisposeDesc(&temp); - return PyMac_Error(err); - } - - AEDisposeDesc(&temp); - return result; - } - } - - if (myErr != noErr) - { - PyErr_Mac (ErrorObject, myErr); - return NULL; - } - - - Py_INCREF (Py_None); - return Py_None; -} - - - - -static PyObject * -OSAm_CompileAndSave (self, args) - PyObject *self; - PyObject *args; -{ - char *commandStr = NULL; - char *outpath = NULL; - OSErr myErr; - AEDesc temp; - EventRecord event; - - temp.dataHandle = NULL; - - if (!PyArg_ParseTuple (args, "ss", &commandStr, &outpath)) - return NULL; - - myErr = CompileAndSave (commandStr, outpath, NULL, &temp); - - - if (temp.dataHandle != NULL && temp.descriptorType == 'TEXT') - { - char *line; - DescType typeCode; - long dataSize = 0; - OSErr err; - - dataSize = AEGetDescDataSize (&temp); - - if (dataSize > 0) - { - PyObject *result = PyString_FromStringAndSize (NULL, - dataSize); - - - if (!result) - { - printf ("OSAm.error Out of memory.\n"); - Py_INCREF (Py_None); - AEDisposeDesc (&temp); - return Py_None; - } - if ( (err=AEGetDescData(&temp, PyString_AS_STRING(result), dataSize)) < 0 ) - { - AEDisposeDesc(&temp); - return PyMac_Error(err); - } - - AEDisposeDesc(&temp); - return result; - } - } - - if (myErr != noErr) - { - - PyErr_Mac (ErrorObject, myErr); - return NULL; - } - - - Py_INCREF (Py_None); - return Py_None; -} - - - -static PyObject * -OSAm_CompileAndExecute (self, args) - PyObject *self; - PyObject *args; -{ - char *commandStr; - OSErr myErr; - AEDesc temp; - EventRecord event; - - temp.dataHandle = NULL; - - if (!PyArg_ParseTuple (args, "s", &commandStr)) - return NULL; - - myErr = CompileAndExecute (commandStr, &temp, NULL); - - if (temp.dataHandle != NULL && temp.descriptorType == 'TEXT') - { - char *line; - DescType typeCode; - long dataSize = 0; - OSErr err; - - dataSize = AEGetDescDataSize (&temp); - - if (dataSize > 0) - { - PyObject *result = PyString_FromStringAndSize (NULL, - dataSize); - - - if (!result) - { - printf ("OSAm.error Out of memory.\n"); - Py_INCREF (Py_None); - AEDisposeDesc (&temp); - return Py_None; - } - if ( (err=AEGetDescData(&temp, PyString_AS_STRING(result), dataSize)) < 0 ) - { - AEDisposeDesc(&temp); - return PyMac_Error(err); - } - - AEDisposeDesc(&temp); - return result; - } - } - - if (myErr != noErr) - { - - PyErr_Mac (ErrorObject, myErr); - return NULL; - } - - - Py_INCREF (Py_None); - return Py_None; -} - - - -/* - * List of methods defined in the module - */ -static struct PyMethodDef OSAm_methods[] = -{ - {"CompileAndExecute", - (PyCFunction) OSAm_CompileAndExecute, - METH_VARARGS, - OSAm_DoCommand__doc__}, -#if 0 - {"CompileAndSave", - (PyCFunction) OSAm_CompileAndSave, - METH_VARARGS, - OSAm_DoCommand__doc__}, - - {"RunCompiledScript", - (PyCFunction) OSAm_RunCompiledScript, - METH_VARARGS, - OSAm_DoCommand__doc__}, -#endif - - {NULL, (PyCFunction) NULL, 0, NULL} -}; - - - -static char OSAm_module_documentation[] = ""; - - -/* - * PYTHON Module Initalization - */ -void -initOSAm () -{ - PyObject *m, *d; - - /* Create the module and add the functions */ - m = Py_InitModule4 ("OSAm", - OSAm_methods, - OSAm_module_documentation, - (PyObject *) NULL, PYTHON_API_VERSION); - - - /* Add some symbolic constants to the module */ - d = PyModule_GetDict (m); - ErrorObject = PyString_FromString ("OSAm.error"); - PyDict_SetItemString (d, "error", ErrorObject); - - - /* Check for errors */ - if (PyErr_Occurred ()) - Py_FatalError ("can't initialize module OSAm"); -} diff --git a/Mac/Contrib/osam/OSAm.exp b/Mac/Contrib/osam/OSAm.exp deleted file mode 100644 index d567a95f46..0000000000 --- a/Mac/Contrib/osam/OSAm.exp +++ /dev/null @@ -1 +0,0 @@ -initOSAm diff --git a/Mac/Contrib/osam/OSAm.h b/Mac/Contrib/osam/OSAm.h deleted file mode 100644 index 2fd046997a..0000000000 --- a/Mac/Contrib/osam/OSAm.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * This is a simple module to allow the - * user to compile and execute an applescript - * which is passed in as a text item. - * - * Sean Hummel - * 1/20/98 - * RealNetworks - * - * Jay Painter - * - * - */ - -#pragma once - - -/* Python API */ -#include "Python.h" -#include "macglue.h" - - -/* Macintosh API */ -#include -#include -#include -#include -#include -#include diff --git a/Mac/Contrib/osam/OSAm.prj b/Mac/Contrib/osam/OSAm.prj deleted file mode 100644 index 527563c100a0ac7a1d97b6d646b99ff1fca9b453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71523 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 - * 1/20/98 - * RealNetworks - * - * Jay Painter - * - * - */ - -#include -#include -#include -#include -#include "ScriptRunner.h" -#include -#include - -#ifdef TARGET_API_MAC_CARBON -static -p2cstr(StringPtr p) -{ - unsigned char *c = p; - int len = c[0]; - strncpy((char *)c+1, (char *)c, len); - c[len] = 0; -} - -static c2pstr(const char *cc) -{ - char *c = (char *)cc; /* Ouch */ - int len = strlen(c); - - if ( len > 255 ) len = 255; - strncpy(c, c+1, len); - c[0] = len; -} -#endif - -OSAError LoadScriptingComponent (ComponentInstance * scriptingComponent); - -#if 0 -/* - * store the script as a compile script so that OSA - * components may load and execute the script easily - */ -OSAError -CompileAndSave (const char *text, - const char *outfile, - OSAActiveUPP proc, - AEDesc * result) -{ - - OSAError err2 = 0; - AEDesc theScript; - OSAID compiledScriptID = 0; - ComponentInstance scriptingComponent; - FSSpec outfilespec; - AEDesc theCompiledScript; - OSAID scriptid = kOSANullScript; - short saveres = 0; - - - - /* Initialize theScript here because it is a struct */ - theScript.dataHandle = NULL; - theCompiledScript.dataHandle = NULL; - - - /* open the component manager */ - err2 = LoadScriptingComponent (&scriptingComponent); - if (err2) - return err2; /* <<< Fail quietly?? */ - - - /* construct the AppleEvent Descriptor to contain the text of script */ - AECreateDesc ('TEXT', text, strlen (text), &theScript); - - err2 = OSACompile (scriptingComponent, - &theScript, - kOSAModeCompileIntoContext, - &scriptid); - if (err2) - { - OSAScriptError (scriptingComponent, kOSAErrorMessage, 'TEXT', result); - goto CleanUp; - } - - - err2 = OSAStore (scriptingComponent, - scriptid, - typeOSAGenericStorage, - kOSAModeCompileIntoContext, - &theCompiledScript); - if (err2) - { - OSAScriptError (scriptingComponent, kOSAErrorMessage, 'TEXT', result); - goto CleanUp; - } - - - c2pstr (outfile); - FSMakeFSSpec (0, 0, (StringPtr) outfile, &outfilespec); - p2cstr ((StringPtr) outfile); - - FSpDelete (&outfilespec); - - FSpCreateResFile (&outfilespec, 'ToyS', 'osas', smRoman); - - saveres = CurResFile (); - - if (saveres) - { - short myres = 0; - myres = FSpOpenResFile (&outfilespec, fsWrPerm); - - UseResFile (myres); - AddResource (theCompiledScript.dataHandle, 'scpt', 128, "\p"); - CloseResFile (myres); - UseResFile (saveres); - } - - -CleanUp: - - if (theScript.dataHandle) - AEDisposeDesc (&theScript); - - if (theCompiledScript.dataHandle) - AEDisposeDesc (&theCompiledScript); - - if (scriptid) - OSADispose (scriptingComponent, scriptid); - - if (scriptingComponent != 0) - CloseComponent (scriptingComponent); - - - return err2; -} -#endif - - -OSAError -CompileAndExecute (const char *text, - AEDesc * result, - OSAActiveUPP proc) -{ - OSAError err2 = 0; - AEDesc theScript; - OSAID compiledScriptID = 0; - ComponentInstance scriptingComponent; - - - /* initialize theScript here because it is a struct */ - theScript.dataHandle = NULL; - - /* Open the component manager */ - err2 = LoadScriptingComponent (&scriptingComponent); - if (err2) - return err2; /* <<< Fail quietly?? */ - - - /* construct the AppleEvent Descriptor to contain the text of script */ - AECreateDesc ('TEXT', text, strlen (text), &theScript); - - - err2 = OSASetActiveProc (scriptingComponent, proc, NULL); - if (err2) - goto CleanUp; - - - err2 = OSADoScript (scriptingComponent, &theScript, kOSANullScript, 'TEXT', 0, result); - if (err2) - { - OSAScriptError (scriptingComponent, kOSAErrorMessage, 'TEXT', result); - goto CleanUp; - } - - -CleanUp: - - if (theScript.dataHandle) - AEDisposeDesc (&theScript); - - if (scriptingComponent != 0) - CloseComponent (scriptingComponent); - - - return err2; -} - -#if 0 -/* - * This routine reads in a saved script file and executes - * the script contained within (from a 'scpt' resource.) - */ -OSAError -ExecuteScriptFile (const char *theFilePath, - OSAActiveUPP proc, - AEDesc * result) -{ - OSAError err2; - short resRefCon; - AEDesc theScript; - OSAID compiledScriptID, scriptResultID; - ComponentInstance scriptingComponent; - FSSpec theFile; - - - c2pstr (theFilePath); - FSMakeFSSpec (0, 0, (StringPtr) theFilePath, &theFile); - p2cstr ((StringPtr) theFilePath); - - - /* open a connection to the OSA */ - err2 = LoadScriptingComponent (&scriptingComponent); - if (err2) - return err2; /* <<< Fail quietly?? */ - - - err2 = OSASetActiveProc (scriptingComponent, proc, NULL); - if (err2) - goto error; - - - /* now, try and read in the script - * Open the script file and get the resource - */ - resRefCon = FSpOpenResFile (&theFile, fsRdPerm); - if (resRefCon == -1) - return ResError (); - - theScript.dataHandle = Get1IndResource (typeOSAGenericStorage, 1); - - if ((err2 = ResError ()) || (err2 = resNotFound, theScript.dataHandle == NULL)) - { - CloseResFile (resRefCon); - return err2; - } - - theScript.descriptorType = typeOSAGenericStorage; - DetachResource (theScript.dataHandle); - CloseResFile (resRefCon); - err2 = noErr; - - - /* give a copy of the script to AppleScript */ - err2 = OSALoad (scriptingComponent, - &theScript, - 0L, - &compiledScriptID); - if (err2) - goto error; - - AEDisposeDesc (&theScript); - theScript.dataHandle = NULL; - - - err2 = OSAExecute (scriptingComponent, - compiledScriptID, - kOSANullScript, - 0, - &scriptResultID); - - if (compiledScriptID) - OSAScriptError (scriptingComponent, kOSAErrorMessage, 'TEXT', result); - - if (err2) - goto error; - - /* If there was an error, return it. If there was a result, return it. */ - (void) OSADispose (scriptingComponent, compiledScriptID); - - if (err2) - goto error; - else - goto done; - -error: - if (theScript.dataHandle) - AEDisposeDesc (&theScript); - - -done: - - - return err2; -} -#endif - - -OSAError -LoadScriptingComponent (ComponentInstance * scriptingComponent) -{ - OSAError err2; - - /* Open a connection to the Open Scripting Architecture */ - *scriptingComponent = OpenDefaultComponent (kOSAComponentType, - kOSAGenericScriptingComponentSubtype); - - err2 = GetComponentInstanceError (*scriptingComponent); - - return err2; -} diff --git a/Mac/Contrib/osam/ScriptRunner.h b/Mac/Contrib/osam/ScriptRunner.h deleted file mode 100644 index dda7bbb0c1..0000000000 --- a/Mac/Contrib/osam/ScriptRunner.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * - * This is a simple module to allow the - * user to compile and execute an applescript - * which is passed in as a text item. - * - * Sean Hummel - * 1/20/98 - * RealNetworks - * - * Jay Painter - * - * - */ -#pragma once - -#include - -OSAError CompileAndExecute (const char *text, - AEDesc *result, - OSAActiveUPP proc); - -OSAError CompileAndSave (const char *text, - const char *outfile, - OSAActiveUPP proc, - AEDesc *result); - -OSAError ExecuteScriptFile (const char *theFile, - OSAActiveUPP proc, - AEDesc *result); diff --git a/Mac/Distributions/(vise)/Python 2.3.vct b/Mac/Distributions/(vise)/Python 2.3.vct deleted file mode 100644 index 2e0cfd3bc7f74fcda90b5c868e76b4cc63fe97ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693147 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