Full Code of smarr/RoarVM for AI

master 2f93789b6ecd cached
1706 files
39.0 MB
10.3M tokens
10485 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (41,301K chars total). Download the full file to get everything.
Repository: smarr/RoarVM
Branch: master
Commit: 2f93789b6ecd
Files: 1706
Total size: 39.0 MB

Directory structure:
gitextract_g7mokxl_/

├── .gitignore
├── .gitmodules
├── INSTALL.rst
├── README
├── README.rst
├── image.st/
│   ├── RVM-multicore-support.mvc.st
│   ├── RVM-multicore-support.pharo.st
│   ├── RVM-multicore-support.squeak.st
│   └── Sly3.mvc.st
└── vm/
    ├── RoarVM.xcodeproj/
    │   └── project.pbxproj
    ├── run/
    │   ├── reliability-test
    │   ├── tile-runner
    │   ├── tile-rvm
    │   └── tile-rvm-db
    ├── src/
    │   ├── externals/
    │   │   ├── externals.cpp
    │   │   └── externals.h
    │   ├── from_squeak/
    │   │   ├── Cross/
    │   │   │   ├── plugins/
    │   │   │   │   ├── AsynchFilePlugin/
    │   │   │   │   │   └── AsynchFilePlugin.h
    │   │   │   │   ├── B3DAcceleratorPlugin/
    │   │   │   │   │   ├── B3DAcceleratorPlugin.h
    │   │   │   │   │   ├── sqOpenGLRenderer.c
    │   │   │   │   │   └── sqOpenGLRenderer.h
    │   │   │   │   ├── BochsIA32Plugin/
    │   │   │   │   │   ├── BochsIA32Plugin.h
    │   │   │   │   │   └── sqBochsIA32Plugin.cpp
    │   │   │   │   ├── CroquetPlugin/
    │   │   │   │   │   ├── CroquetPlugin.h
    │   │   │   │   │   ├── CroquetPlugin.st
    │   │   │   │   │   ├── md5.h
    │   │   │   │   │   └── tribox.c
    │   │   │   │   ├── DropPlugin/
    │   │   │   │   │   └── DropPlugin.h
    │   │   │   │   ├── ExampleSurfacePlugin/
    │   │   │   │   │   ├── ExampleSurfacePlugin.h
    │   │   │   │   │   ├── SurfacePlugin-Examples.st
    │   │   │   │   │   └── sqMemorySurface.c
    │   │   │   │   ├── FileCopyPlugin/
    │   │   │   │   │   └── FileCopyPlugin.h
    │   │   │   │   ├── FilePlugin/
    │   │   │   │   │   ├── FilePlugin.c
    │   │   │   │   │   ├── FilePlugin.h
    │   │   │   │   │   └── sqFilePluginBasicPrims.c
    │   │   │   │   ├── FloatMathPlugin/
    │   │   │   │   │   ├── FloatMathPlugin.h
    │   │   │   │   │   ├── FloatMathPlugin.st
    │   │   │   │   │   ├── FloatMathPluginTests.st
    │   │   │   │   │   ├── acos.c
    │   │   │   │   │   ├── acosh.c
    │   │   │   │   │   ├── asin.c
    │   │   │   │   │   ├── asinh.c
    │   │   │   │   │   ├── atan.c
    │   │   │   │   │   ├── atan2.c
    │   │   │   │   │   ├── atanh.c
    │   │   │   │   │   ├── copysign.c
    │   │   │   │   │   ├── cos.c
    │   │   │   │   │   ├── cosh.c
    │   │   │   │   │   ├── exp.c
    │   │   │   │   │   ├── expm1.c
    │   │   │   │   │   ├── fdlibm/
    │   │   │   │   │   │   ├── MD5
    │   │   │   │   │   │   ├── changes
    │   │   │   │   │   │   ├── configure
    │   │   │   │   │   │   ├── configure.in
    │   │   │   │   │   │   ├── e_acos.c
    │   │   │   │   │   │   ├── e_acosh.c
    │   │   │   │   │   │   ├── e_asin.c
    │   │   │   │   │   │   ├── e_atan2.c
    │   │   │   │   │   │   ├── e_atanh.c
    │   │   │   │   │   │   ├── e_cosh.c
    │   │   │   │   │   │   ├── e_exp.c
    │   │   │   │   │   │   ├── e_fmod.c
    │   │   │   │   │   │   ├── e_gamma.c
    │   │   │   │   │   │   ├── e_gamma_r.c
    │   │   │   │   │   │   ├── e_hypot.c
    │   │   │   │   │   │   ├── e_j0.c
    │   │   │   │   │   │   ├── e_j1.c
    │   │   │   │   │   │   ├── e_jn.c
    │   │   │   │   │   │   ├── e_lgamma.c
    │   │   │   │   │   │   ├── e_lgamma_r.c
    │   │   │   │   │   │   ├── e_log.c
    │   │   │   │   │   │   ├── e_log10.c
    │   │   │   │   │   │   ├── e_pow.c
    │   │   │   │   │   │   ├── e_rem_pio2.c
    │   │   │   │   │   │   ├── e_remainder.c
    │   │   │   │   │   │   ├── e_scalb.c
    │   │   │   │   │   │   ├── e_sinh.c
    │   │   │   │   │   │   ├── e_sqrt.c
    │   │   │   │   │   │   ├── fdlibm.h
    │   │   │   │   │   │   ├── index
    │   │   │   │   │   │   ├── index.html
    │   │   │   │   │   │   ├── k_cos.c
    │   │   │   │   │   │   ├── k_rem_pio2.c
    │   │   │   │   │   │   ├── k_sin.c
    │   │   │   │   │   │   ├── k_standard.c
    │   │   │   │   │   │   ├── k_tan.c
    │   │   │   │   │   │   ├── makefile
    │   │   │   │   │   │   ├── makefile.in
    │   │   │   │   │   │   ├── readme
    │   │   │   │   │   │   ├── s_asinh.c
    │   │   │   │   │   │   ├── s_atan.c
    │   │   │   │   │   │   ├── s_cbrt.c
    │   │   │   │   │   │   ├── s_ceil.c
    │   │   │   │   │   │   ├── s_copysign.c
    │   │   │   │   │   │   ├── s_cos.c
    │   │   │   │   │   │   ├── s_erf.c
    │   │   │   │   │   │   ├── s_expm1.c
    │   │   │   │   │   │   ├── s_fabs.c
    │   │   │   │   │   │   ├── s_finite.c
    │   │   │   │   │   │   ├── s_floor.c
    │   │   │   │   │   │   ├── s_frexp.c
    │   │   │   │   │   │   ├── s_ilogb.c
    │   │   │   │   │   │   ├── s_isnan.c
    │   │   │   │   │   │   ├── s_ldexp.c
    │   │   │   │   │   │   ├── s_lib_version.c
    │   │   │   │   │   │   ├── s_log1p.c
    │   │   │   │   │   │   ├── s_logb.c
    │   │   │   │   │   │   ├── s_matherr.c
    │   │   │   │   │   │   ├── s_modf.c
    │   │   │   │   │   │   ├── s_nextafter.c
    │   │   │   │   │   │   ├── s_rint.c
    │   │   │   │   │   │   ├── s_scalbn.c
    │   │   │   │   │   │   ├── s_signgam.c
    │   │   │   │   │   │   ├── s_significand.c
    │   │   │   │   │   │   ├── s_sin.c
    │   │   │   │   │   │   ├── s_tan.c
    │   │   │   │   │   │   ├── s_tanh.c
    │   │   │   │   │   │   ├── w_acos.c
    │   │   │   │   │   │   ├── w_acosh.c
    │   │   │   │   │   │   ├── w_asin.c
    │   │   │   │   │   │   ├── w_atan2.c
    │   │   │   │   │   │   ├── w_atanh.c
    │   │   │   │   │   │   ├── w_cosh.c
    │   │   │   │   │   │   ├── w_exp.c
    │   │   │   │   │   │   ├── w_fmod.c
    │   │   │   │   │   │   ├── w_gamma.c
    │   │   │   │   │   │   ├── w_gamma_r.c
    │   │   │   │   │   │   ├── w_hypot.c
    │   │   │   │   │   │   ├── w_j0.c
    │   │   │   │   │   │   ├── w_j1.c
    │   │   │   │   │   │   ├── w_jn.c
    │   │   │   │   │   │   ├── w_lgamma.c
    │   │   │   │   │   │   ├── w_lgamma_r.c
    │   │   │   │   │   │   ├── w_log.c
    │   │   │   │   │   │   ├── w_log10.c
    │   │   │   │   │   │   ├── w_pow.c
    │   │   │   │   │   │   ├── w_remainder.c
    │   │   │   │   │   │   ├── w_scalb.c
    │   │   │   │   │   │   ├── w_sinh.c
    │   │   │   │   │   │   └── w_sqrt.c
    │   │   │   │   │   ├── finite.c
    │   │   │   │   │   ├── fmod.c
    │   │   │   │   │   ├── hypot.c
    │   │   │   │   │   ├── ieee754names.h
    │   │   │   │   │   ├── isnan.c
    │   │   │   │   │   ├── k_cos.c
    │   │   │   │   │   ├── k_rem_pio2.c
    │   │   │   │   │   ├── k_sin.c
    │   │   │   │   │   ├── k_tan.c
    │   │   │   │   │   ├── ldexp.c
    │   │   │   │   │   ├── log.c
    │   │   │   │   │   ├── log10.c
    │   │   │   │   │   ├── log1p.c
    │   │   │   │   │   ├── modf.c
    │   │   │   │   │   ├── pow.c
    │   │   │   │   │   ├── rem_pio2.c
    │   │   │   │   │   ├── rint.c
    │   │   │   │   │   ├── scalb.c
    │   │   │   │   │   ├── scalbn.c
    │   │   │   │   │   ├── sin.c
    │   │   │   │   │   ├── sinh.c
    │   │   │   │   │   ├── sqrt.c
    │   │   │   │   │   ├── tan.c
    │   │   │   │   │   └── tanh.c
    │   │   │   │   ├── GStreamerPlugin/
    │   │   │   │   │   ├── squeakAudioVideoPipeLineSignalInterface.c
    │   │   │   │   │   └── squeakAudioVideoPipeLineSignalInterface.h
    │   │   │   │   ├── HostWindowPlugin/
    │   │   │   │   │   └── HostWindowPlugin.h
    │   │   │   │   ├── IA32ABI/
    │   │   │   │   │   ├── dabusiness.h
    │   │   │   │   │   ├── ia32abi.h
    │   │   │   │   │   └── ia32abicc.c
    │   │   │   │   ├── InternetConfigPlugin/
    │   │   │   │   │   └── InternetConfigPlugin.h
    │   │   │   │   ├── JPEGReadWriter2Plugin/
    │   │   │   │   │   ├── Error.c
    │   │   │   │   │   ├── JPEGReadWriter2Plugin.h
    │   │   │   │   │   ├── ReadMe.txt
    │   │   │   │   │   ├── jcapimin.c
    │   │   │   │   │   ├── jcapistd.c
    │   │   │   │   │   ├── jccoefct.c
    │   │   │   │   │   ├── jccolor.c
    │   │   │   │   │   ├── jcdctmgr.c
    │   │   │   │   │   ├── jchuff.c
    │   │   │   │   │   ├── jchuff.h
    │   │   │   │   │   ├── jcinit.c
    │   │   │   │   │   ├── jcmainct.c
    │   │   │   │   │   ├── jcmarker.c
    │   │   │   │   │   ├── jcmaster.c
    │   │   │   │   │   ├── jcomapi.c
    │   │   │   │   │   ├── jconfig.h
    │   │   │   │   │   ├── jcparam.c
    │   │   │   │   │   ├── jcphuff.c
    │   │   │   │   │   ├── jcprepct.c
    │   │   │   │   │   ├── jcsample.c
    │   │   │   │   │   ├── jctrans.c
    │   │   │   │   │   ├── jdapimin.c
    │   │   │   │   │   ├── jdapistd.c
    │   │   │   │   │   ├── jdatadst.c
    │   │   │   │   │   ├── jdatasrc.c
    │   │   │   │   │   ├── jdcoefct.c
    │   │   │   │   │   ├── jdcolor.c
    │   │   │   │   │   ├── jdct.h
    │   │   │   │   │   ├── jddctmgr.c
    │   │   │   │   │   ├── jdhuff.c
    │   │   │   │   │   ├── jdhuff.h
    │   │   │   │   │   ├── jdinput.c
    │   │   │   │   │   ├── jdmainct.c
    │   │   │   │   │   ├── jdmarker.c
    │   │   │   │   │   ├── jdmaster.c
    │   │   │   │   │   ├── jdmerge.c
    │   │   │   │   │   ├── jdphuff.c
    │   │   │   │   │   ├── jdpostct.c
    │   │   │   │   │   ├── jdsample.c
    │   │   │   │   │   ├── jdtrans.c
    │   │   │   │   │   ├── jerror.c
    │   │   │   │   │   ├── jerror.h
    │   │   │   │   │   ├── jfdctflt.c
    │   │   │   │   │   ├── jfdctfst.c
    │   │   │   │   │   ├── jfdctint.c
    │   │   │   │   │   ├── jidctflt.c
    │   │   │   │   │   ├── jidctfst.c
    │   │   │   │   │   ├── jidctint.c
    │   │   │   │   │   ├── jidctred.c
    │   │   │   │   │   ├── jinclude.h
    │   │   │   │   │   ├── jmemdatadst.c
    │   │   │   │   │   ├── jmemdatasrc.c
    │   │   │   │   │   ├── jmemmgr.c
    │   │   │   │   │   ├── jmemnobs.c
    │   │   │   │   │   ├── jmemsys.h
    │   │   │   │   │   ├── jmorecfg.h
    │   │   │   │   │   ├── jpegint.h
    │   │   │   │   │   ├── jpeglib.h
    │   │   │   │   │   ├── jquant1.c
    │   │   │   │   │   ├── jquant2.c
    │   │   │   │   │   ├── jutils.c
    │   │   │   │   │   └── jversion.h
    │   │   │   │   ├── JoystickTabletPlugin/
    │   │   │   │   │   └── JoystickTabletPlugin.h
    │   │   │   │   ├── LocalePlugin/
    │   │   │   │   │   └── LocalePlugin.h
    │   │   │   │   ├── MIDIPlugin/
    │   │   │   │   │   └── MIDIPlugin.h
    │   │   │   │   ├── Mpeg3Plugin/
    │   │   │   │   │   ├── COPYING
    │   │   │   │   │   ├── JMMMpegBuffer.1.cs
    │   │   │   │   │   ├── JMMMpegBufferTest.1.cs
    │   │   │   │   │   ├── JMMMpegPluginBuffer.1.cs
    │   │   │   │   │   ├── JMMMpegPluginaddBufferOffsetting.1.cs
    │   │   │   │   │   ├── JMMMpegaddBufferOffsetting.1.cs
    │   │   │   │   │   ├── Mpeg3Plugin.h
    │   │   │   │   │   ├── README
    │   │   │   │   │   ├── docs/
    │   │   │   │   │   │   └── index.html
    │   │   │   │   │   ├── examplesSqueak.txt
    │   │   │   │   │   └── libmpeg/
    │   │   │   │   │       ├── Makefile
    │   │   │   │   │       ├── audio/
    │   │   │   │   │       │   ├── ac3.h
    │   │   │   │   │       │   ├── dct.c
    │   │   │   │   │       │   ├── header.c
    │   │   │   │   │       │   ├── huffman.h
    │   │   │   │   │       │   ├── layer1.c
    │   │   │   │   │       │   ├── layer2.c
    │   │   │   │   │       │   ├── layer3.c
    │   │   │   │   │       │   ├── mpeg3audio.c
    │   │   │   │   │       │   ├── mpeg3audio.h
    │   │   │   │   │       │   ├── pcm.c
    │   │   │   │   │       │   ├── synthesizers.c
    │   │   │   │   │       │   ├── tables.c
    │   │   │   │   │       │   └── tables.h
    │   │   │   │   │       ├── bitstream.c
    │   │   │   │   │       ├── bitstream.h
    │   │   │   │   │       ├── changesForSqueak.c
    │   │   │   │   │       ├── changesForSqueak.h
    │   │   │   │   │       ├── configure
    │   │   │   │   │       ├── dump.c
    │   │   │   │   │       ├── dump2.c
    │   │   │   │   │       ├── global_config
    │   │   │   │   │       ├── ioctl.h
    │   │   │   │   │       ├── libmpeg3.c
    │   │   │   │   │       ├── libmpeg3.h
    │   │   │   │   │       ├── make_package
    │   │   │   │   │       ├── mpeg3atrack.c
    │   │   │   │   │       ├── mpeg3atrack.h
    │   │   │   │   │       ├── mpeg3cat.c
    │   │   │   │   │       ├── mpeg3css.h
    │   │   │   │   │       ├── mpeg3demux.c
    │   │   │   │   │       ├── mpeg3demux.h
    │   │   │   │   │       ├── mpeg3io.c
    │   │   │   │   │       ├── mpeg3io.h
    │   │   │   │   │       ├── mpeg3private.h
    │   │   │   │   │       ├── mpeg3private.inc
    │   │   │   │   │       ├── mpeg3protos.h
    │   │   │   │   │       ├── mpeg3title.c
    │   │   │   │   │       ├── mpeg3title.h
    │   │   │   │   │       ├── mpeg3toc.c
    │   │   │   │   │       ├── mpeg3vtrack.c
    │   │   │   │   │       ├── mpeg3vtrack.h
    │   │   │   │   │       ├── test.c
    │   │   │   │   │       ├── testaudio.c
    │   │   │   │   │       ├── timecode.h
    │   │   │   │   │       ├── udump.c
    │   │   │   │   │       └── video/
    │   │   │   │   │           ├── getpicture.c
    │   │   │   │   │           ├── headers.c
    │   │   │   │   │           ├── idct.c
    │   │   │   │   │           ├── idct.h
    │   │   │   │   │           ├── layerdata.h
    │   │   │   │   │           ├── macroblocks.c
    │   │   │   │   │           ├── mmxidct.S
    │   │   │   │   │           ├── mmxidct_gasp.s
    │   │   │   │   │           ├── mmxidct_orig.S
    │   │   │   │   │           ├── mmxtest.c
    │   │   │   │   │           ├── motion.c
    │   │   │   │   │           ├── mpeg3video.c
    │   │   │   │   │           ├── mpeg3video.h
    │   │   │   │   │           ├── mpeg3videoprotos.h
    │   │   │   │   │           ├── output.c
    │   │   │   │   │           ├── reconmmx.s
    │   │   │   │   │           ├── reconstruct.c
    │   │   │   │   │           ├── seek.c
    │   │   │   │   │           ├── slice.c
    │   │   │   │   │           ├── slice.h
    │   │   │   │   │           ├── vlc.c
    │   │   │   │   │           ├── vlc.h
    │   │   │   │   │           └── worksheet.c
    │   │   │   │   ├── PrintJobPlugin/
    │   │   │   │   │   └── PrintJobPlugin.h
    │   │   │   │   ├── PseudoTTYPlugin/
    │   │   │   │   │   └── PseudoTTYPlugin.h
    │   │   │   │   ├── QuicktimePlugin/
    │   │   │   │   │   └── QuicktimePlugin.h
    │   │   │   │   ├── RePlugin/
    │   │   │   │   │   ├── RePlugin3-Fixes.1.cs
    │   │   │   │   │   ├── RePlugin3-Fixes2.1.cs
    │   │   │   │   │   ├── RePlugin3.3.1.cs
    │   │   │   │   │   ├── chartables.c
    │   │   │   │   │   ├── config.h
    │   │   │   │   │   ├── get.c
    │   │   │   │   │   ├── internal.h
    │   │   │   │   │   ├── oldInternal.h
    │   │   │   │   │   ├── pcre.c
    │   │   │   │   │   ├── pcre.h
    │   │   │   │   │   ├── rePlugin.h
    │   │   │   │   │   └── study.c
    │   │   │   │   ├── SecurityPlugin/
    │   │   │   │   │   └── SecurityPlugin.h
    │   │   │   │   ├── SerialPlugin/
    │   │   │   │   │   └── SerialPlugin.h
    │   │   │   │   ├── SocketPlugin/
    │   │   │   │   │   └── SocketPlugin.h
    │   │   │   │   ├── SoundCodecPrims/
    │   │   │   │   │   ├── SoundCodecPrims.h
    │   │   │   │   │   └── sqSoundCodecPluginBasicPrims.c
    │   │   │   │   ├── SoundGenerationPlugin/
    │   │   │   │   │   ├── SoundGenerationPlugin.h
    │   │   │   │   │   └── sqOldSoundPrims.c
    │   │   │   │   ├── SoundPlugin/
    │   │   │   │   │   └── SoundPlugin.h
    │   │   │   │   ├── Squeak3D/
    │   │   │   │   │   ├── b3d.h
    │   │   │   │   │   ├── b3dAlloc.c
    │   │   │   │   │   ├── b3dAlloc.h
    │   │   │   │   │   ├── b3dDraw.c
    │   │   │   │   │   ├── b3dInit.c
    │   │   │   │   │   ├── b3dMain.c
    │   │   │   │   │   ├── b3dRemap.c
    │   │   │   │   │   └── b3dTypes.h
    │   │   │   │   ├── SqueakFFIPrims/
    │   │   │   │   │   ├── sqFFI.h
    │   │   │   │   │   ├── sqFFIPlugin.c
    │   │   │   │   │   ├── sqFFITestFuncs.c
    │   │   │   │   │   └── sqManualSurface.c
    │   │   │   │   ├── SqueakSSL/
    │   │   │   │   │   └── SqueakSSL.h
    │   │   │   │   ├── SurfacePlugin/
    │   │   │   │   │   ├── SurfacePlugin.c
    │   │   │   │   │   └── SurfacePlugin.h
    │   │   │   │   └── UUIDPlugin/
    │   │   │   │       └── UUIDPlugin.h
    │   │   │   └── vm/
    │   │   │       ├── dispdbg.h
    │   │   │       ├── sq.h
    │   │   │       ├── sqAssert.h
    │   │   │       ├── sqAtomicOps.h
    │   │   │       ├── sqCogStackAlignment.h
    │   │   │       ├── sqExternalSemaphores.c
    │   │   │       ├── sqHeapMap.c
    │   │   │       ├── sqMemoryAccess.h
    │   │   │       ├── sqMemoryFence.h
    │   │   │       ├── sqNamedPrims.c
    │   │   │       ├── sqTicker.c
    │   │   │       ├── sqVirtualMachine.c
    │   │   │       └── sqVirtualMachine.h
    │   │   ├── LICENSE
    │   │   ├── Mac OS/
    │   │   │   ├── plugins/
    │   │   │   │   ├── AsynchFilePlugin/
    │   │   │   │   │   └── sqMacAsyncFilePrims.c
    │   │   │   │   ├── B3DAcceleratorPlugin/
    │   │   │   │   │   ├── sqMacOpenGL.c
    │   │   │   │   │   ├── sqMacOpenGL.h
    │   │   │   │   │   └── sqMacOpenGLInfo.c
    │   │   │   │   ├── ClipboardExtended/
    │   │   │   │   │   ├── ClipboardExtendedPlugin.c
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── JMMExtendedClipBoardPlugin.1.cs
    │   │   │   │   │   ├── Sophie-Clipboard.st
    │   │   │   │   │   ├── SophieSUnitClipboard.st
    │   │   │   │   │   ├── sqMacExtendedClipboard.c
    │   │   │   │   │   └── sqMacExtendedClipboard.h
    │   │   │   │   ├── CroquetPlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── sqMacCroquet.c
    │   │   │   │   │   └── sqMacCroquet.h
    │   │   │   │   ├── CurlPlugin/
    │   │   │   │   │   └── Info-CURLPlugin.plist
    │   │   │   │   ├── DropPlugin/
    │   │   │   │   │   └── sqMacDragDrop.c
    │   │   │   │   ├── ExuperyPlugin/
    │   │   │   │   │   └── sqOSXExuperyPlugin.c
    │   │   │   │   ├── FileCopyPlugin/
    │   │   │   │   │   ├── FileCopy.xml
    │   │   │   │   │   ├── MoreFiles 1.5/
    │   │   │   │   │   │   ├── C Headers/
    │   │   │   │   │   │   │   ├── DirectoryCopy.h
    │   │   │   │   │   │   │   ├── FSpCompat.h
    │   │   │   │   │   │   │   ├── FileCopy.h
    │   │   │   │   │   │   │   ├── FullPath.h
    │   │   │   │   │   │   │   ├── IterateDirectory.h
    │   │   │   │   │   │   │   ├── MoreDesktopMgr.h
    │   │   │   │   │   │   │   ├── MoreFiles.h
    │   │   │   │   │   │   │   ├── MoreFilesExtras.h
    │   │   │   │   │   │   │   ├── Optimization.h
    │   │   │   │   │   │   │   ├── OptimizationEnd.h
    │   │   │   │   │   │   │   └── Search.h
    │   │   │   │   │   │   ├── MoreFilesReadMe
    │   │   │   │   │   │   ├── PascalInterfaces/
    │   │   │   │   │   │   │   ├── DirectoryCopy.p
    │   │   │   │   │   │   │   ├── FSpCompat.p
    │   │   │   │   │   │   │   ├── FileCopy.p
    │   │   │   │   │   │   │   ├── FullPath.p
    │   │   │   │   │   │   │   ├── IterateDirectory.p
    │   │   │   │   │   │   │   ├── MoreDesktopMgr.p
    │   │   │   │   │   │   │   ├── MoreFiles.p
    │   │   │   │   │   │   │   ├── MoreFilesExtras.p
    │   │   │   │   │   │   │   └── Search.p
    │   │   │   │   │   │   └── Sources/
    │   │   │   │   │   │       ├── DirectoryCopy.c
    │   │   │   │   │   │       ├── FSpCompat.c
    │   │   │   │   │   │       ├── FileCopy.c
    │   │   │   │   │   │       ├── FullPath.c
    │   │   │   │   │   │       ├── IterateDirectory.c
    │   │   │   │   │   │       ├── MoreDesktopMgr.c
    │   │   │   │   │   │       ├── MoreFiles.c
    │   │   │   │   │   │       ├── MoreFilesExtras.c
    │   │   │   │   │   │       └── Search.c
    │   │   │   │   │   ├── sqMacFileCopy.c
    │   │   │   │   │   └── sqMacFileCopy.h
    │   │   │   │   ├── FilePlugin/
    │   │   │   │   │   ├── sqMacDirectory.c
    │   │   │   │   │   ├── sqMacUnixFileInterface.c
    │   │   │   │   │   └── sqMacUnixFileInterface.h
    │   │   │   │   ├── FloatMathPlugin/
    │   │   │   │   │   └── Info.plist
    │   │   │   │   ├── HostWindowPlugin/
    │   │   │   │   │   ├── sqMacHostWindow.c
    │   │   │   │   │   └── sqMacHostWindow.h
    │   │   │   │   ├── IA32ABI/
    │   │   │   │   │   └── Info.plist
    │   │   │   │   ├── InternetConfigPlugin/
    │   │   │   │   │   ├── InternetConfiguration.xml
    │   │   │   │   │   └── sqMacInternetConfiguration.c
    │   │   │   │   ├── JPEGReadWriter2Plugin/
    │   │   │   │   │   └── JConfig.h
    │   │   │   │   ├── JoystickTabletPlugin/
    │   │   │   │   │   ├── HID_Error_Handler.c
    │   │   │   │   │   ├── HID_Error_Handler.h
    │   │   │   │   │   ├── HID_Name_Lookup.c
    │   │   │   │   │   ├── HID_Name_Lookup.h
    │   │   │   │   │   ├── HID_Queue_Utilities.c
    │   │   │   │   │   ├── HID_Queue_Utilities.h
    │   │   │   │   │   ├── HID_Utilities.c
    │   │   │   │   │   ├── HID_Utilities.h
    │   │   │   │   │   ├── HID_Utilities_External.h
    │   │   │   │   │   ├── HID_Utilities_Internal.h
    │   │   │   │   │   ├── libHIDUtilities.a
    │   │   │   │   │   └── sqMacJoystickAndTablet.c
    │   │   │   │   ├── KedamaPlugin/
    │   │   │   │   │   ├── English.lproj/
    │   │   │   │   │   │   └── InfoPlist.strings
    │   │   │   │   │   ├── Info-KedamaPlugin__Upgraded_.plist
    │   │   │   │   │   └── KedamaPlugin.st
    │   │   │   │   ├── KedamaPlugin2/
    │   │   │   │   │   ├── English.lproj/
    │   │   │   │   │   │   └── InfoPlist.strings
    │   │   │   │   │   ├── Info-KedamaPlugin__Upgraded_.plist
    │   │   │   │   │   └── KedamaPlugin2.st
    │   │   │   │   ├── LocalePlugin/
    │   │   │   │   │   ├── Info-SqueakLocalePlugin__Upgraded_.plist
    │   │   │   │   │   ├── LocalePlugin.proj.xml
    │   │   │   │   │   ├── SqueakLocale.pbproj/
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacLocaleCarbon.c
    │   │   │   │   │   ├── sqMacLocaleCarbon.h
    │   │   │   │   │   ├── sqMacLocaleOS9.c
    │   │   │   │   │   └── sqMacLocaleOS9.h
    │   │   │   │   ├── MIDIPlugin/
    │   │   │   │   │   └── sqMacMIDI.c
    │   │   │   │   ├── MacMenubarPlugin/
    │   │   │   │   │   └── MacMenubarPlugin.h
    │   │   │   │   ├── Mpeg3Plugin/
    │   │   │   │   │   ├── SqueakPlugin.icns
    │   │   │   │   │   ├── changesetsForInMemoryBuffer/
    │   │   │   │   │   │   ├── JMMMpegBuffer.1.cs
    │   │   │   │   │   │   ├── JMMMpegBufferTest.1.cs
    │   │   │   │   │   │   └── JMMMpegPluginBuffer.1.cs
    │   │   │   │   │   ├── mpeg3Plugin-Info.plist
    │   │   │   │   │   ├── mpeglibAudioVideo.xml
    │   │   │   │   │   ├── myMacHeadersCarbon.pch
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   ├── App.rsrc
    │   │   │   │   │   │   └── CarbonApp.rsrc
    │   │   │   │   │   ├── resources.sit
    │   │   │   │   │   ├── sqMacFileBits.c
    │   │   │   │   │   └── sqMacFileBits.h
    │   │   │   │   ├── OpenALPlugin/
    │   │   │   │   │   └── Info.plist
    │   │   │   │   ├── PrintJobPlugin/
    │   │   │   │   │   ├── Info-PrintJobPlugin__Upgraded_.plist
    │   │   │   │   │   ├── PrintJobPlugin.pbproj.sit
    │   │   │   │   │   ├── PrintJobPlugin.project.xml
    │   │   │   │   │   ├── RealPrinting-JMM.7.cs
    │   │   │   │   │   ├── resources.sit
    │   │   │   │   │   ├── sqMacPrinting.c
    │   │   │   │   │   └── sqMacPrinting.h
    │   │   │   │   ├── QuicktimePlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── JMMMacQuicktimePlugin.3.cs
    │   │   │   │   │   ├── PkgInfo
    │   │   │   │   │   ├── SqueakPlugin.icns
    │   │   │   │   │   ├── SqueakQuicktime.xcodeproj/
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacQuicktimeInteface.c
    │   │   │   │   │   └── sqMacQuicktimeInteface.h
    │   │   │   │   ├── SecurityPlugin/
    │   │   │   │   │   └── sqMacSecurity.c
    │   │   │   │   ├── SerialExtendedPlugin/
    │   │   │   │   │   ├── Info-SerialExtendedUnixPlugin__Upgraded_.plist
    │   │   │   │   │   ├── SerialExtendedMacOS9.xml.sit
    │   │   │   │   │   ├── SerialExtendedPlugin.pbproj.sit
    │   │   │   │   │   ├── serialExtendedUnixPlugin.h
    │   │   │   │   │   └── sqMacSerialExtended.c
    │   │   │   │   ├── SerialPlugin/
    │   │   │   │   │   └── sqMacSerialPort.c
    │   │   │   │   ├── ServicesPlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── JMMMacServices.5.cs
    │   │   │   │   │   ├── JMMServicesPlugin.2.cs
    │   │   │   │   │   ├── MacServicesReadMe.rtf
    │   │   │   │   │   ├── SqueakServices.pbproj/
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacServices.c
    │   │   │   │   │   └── sqMacServices.h
    │   │   │   │   ├── SocketPlugin/
    │   │   │   │   │   ├── 68K/
    │   │   │   │   │   │   ├── AddressXlation.h
    │   │   │   │   │   │   ├── MacTCP.h
    │   │   │   │   │   │   ├── dnr.c
    │   │   │   │   │   │   └── sqMacNetworkNOMACTCP.c
    │   │   │   │   │   └── sqMacNetwork.c
    │   │   │   │   ├── SoundPlugin/
    │   │   │   │   │   ├── sqMacSound.c
    │   │   │   │   │   ├── sqMacUnixInterfaceSound.c
    │   │   │   │   │   ├── sqMacUnixInterfaceSound.h
    │   │   │   │   │   ├── sqUnixSoundDebug.h
    │   │   │   │   │   └── sqUnixSoundMacOSXJMM.c
    │   │   │   │   ├── SparklePlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── interp.h
    │   │   │   │   │   ├── sqMacMainObjCSparkle.h
    │   │   │   │   │   └── sqMacMainObjCSparkle.m
    │   │   │   │   ├── SpellingPlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── JMMMacSpelling.3.cs
    │   │   │   │   │   ├── JMMMacSpelling.4.cs
    │   │   │   │   │   ├── JMMMacSpellingPlugin.1.cs
    │   │   │   │   │   ├── SpellCheck/
    │   │   │   │   │   │   ├── English.lproj/
    │   │   │   │   │   │   │   └── InfoPlist.strings
    │   │   │   │   │   │   ├── Info-SpellCheck__Upgraded_.plist
    │   │   │   │   │   │   ├── SpellCheck.m
    │   │   │   │   │   │   └── SpellCheck.pbproj/
    │   │   │   │   │   │       ├── apple.pbxuser
    │   │   │   │   │   │       ├── deric.pbxuser
    │   │   │   │   │   │       ├── johnmci.mode1
    │   │   │   │   │   │       ├── johnmci.pbxuser
    │   │   │   │   │   │       └── project.pbxproj
    │   │   │   │   │   ├── SqueakSpelling.pbproj/
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── build/
    │   │   │   │   │   │   ├── .gdb_history
    │   │   │   │   │   │   └── PkgInfo
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacSpellingPlugin.c
    │   │   │   │   │   └── sqMacSpellingPlugin.h
    │   │   │   │   ├── SqueakFFIPrims/
    │   │   │   │   │   ├── Info-SqueakFFIPlugin__Upgraded_.plist
    │   │   │   │   │   ├── SqueakFFIPrims.proj.xml
    │   │   │   │   │   ├── ppc-darwin-Carbon-UI.c
    │   │   │   │   │   ├── ppc-darwin-asm-MacIntel.S
    │   │   │   │   │   ├── ppc-global.h
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacFFI.s
    │   │   │   │   │   ├── sqMacFFIPPC.c
    │   │   │   │   │   ├── sqMacIntel-Win32.c
    │   │   │   │   │   ├── x86-sysv-MacIntel.c
    │   │   │   │   │   └── x86-sysv-asm-MacIntel.S
    │   │   │   │   ├── SqueakObjectiveCPlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── squeakProxy.h
    │   │   │   │   │   ├── squeakProxy.m
    │   │   │   │   │   ├── squeakSUnitTester.h
    │   │   │   │   │   └── squeakSUnitTester.m
    │   │   │   │   ├── TestOSAPlugin/
    │   │   │   │   │   ├── Info-TestOSAPlugin__Upgraded_.plist
    │   │   │   │   │   ├── JMMFixOSAPluginForOSX.1.cs
    │   │   │   │   │   ├── SqueakPlugin.icns
    │   │   │   │   │   └── TestOSAPlugin.proj.xml
    │   │   │   │   ├── UUIDPlugin/
    │   │   │   │   │   └── sqMacUUID.c
    │   │   │   │   └── UnixOSProcessPlugin/
    │   │   │   │       ├── Info.plist
    │   │   │   │       ├── PkgInfo
    │   │   │   │       ├── SqueakPlugin.icns
    │   │   │   │       └── UnixOSProcessPlugin.c
    │   │   │   └── vm/
    │   │   │       ├── Developer/
    │   │   │       │   ├── Info-NPSophie__Upgraded_.plist
    │   │   │       │   ├── Info-NPSqueak__Upgraded_.plist
    │   │   │       │   ├── Info-Squeak_VM_Debug__Upgraded_.plist
    │   │   │       │   ├── Info-Squeak_VM_OPT__Upgraded_.plist
    │   │   │       │   ├── MacVMCorrectFileTypes.st
    │   │   │       │   ├── MyPlugin v2.proj.xml
    │   │   │       │   ├── MyPlugin68K v2.proj.xml
    │   │   │       │   ├── NPSqueakStub.c
    │   │   │       │   ├── NPSqueakStub.sit
    │   │   │       │   ├── Squeak VM Universal-Info.plist
    │   │   │       │   ├── SqueakPro5.xml
    │   │   │       │   ├── SqueakQL/
    │   │   │       │   │   ├── English.lproj/
    │   │   │       │   │   │   └── InfoPlist.strings
    │   │   │       │   │   ├── GeneratePreviewForURL.c
    │   │   │       │   │   ├── GenerateThumbnailForURL.c
    │   │   │       │   │   ├── Info.plist
    │   │   │       │   │   ├── SqueakQL.xcodeproj/
    │   │   │       │   │   │   ├── bert.mode1v3
    │   │   │       │   │   │   ├── bert.pbxuser
    │   │   │       │   │   │   ├── johnmci.mode1v3
    │   │   │       │   │   │   ├── johnmci.pbxuser
    │   │   │       │   │   │   └── project.pbxproj
    │   │   │       │   │   └── main.c
    │   │   │       │   ├── interp.h
    │   │   │       │   ├── myMacHeaders.c
    │   │   │       │   ├── myMacHeaders.pch
    │   │   │       │   ├── myMacHeadersCarbon.pch
    │   │   │       │   ├── resources.sit
    │   │   │       │   ├── sqGnu.h
    │   │   │       │   └── sqMacMinimal.c
    │   │   │       ├── Documentation/
    │   │   │       │   ├── 3.2.2 Release Notes.rtf
    │   │   │       │   ├── 3.2.3 Release Notes.rtf
    │   │   │       │   ├── 3.2.4 Release Notes.rtf
    │   │   │       │   ├── 3.2.5 Release Notes.rtf
    │   │   │       │   ├── 3.2.6 Release Notes.rtf
    │   │   │       │   ├── 3.2.7 Release Notes.rtf
    │   │   │       │   ├── 3.2.8 Release Notes.rtf
    │   │   │       │   ├── 3.4.0 Release Notes.rtf
    │   │   │       │   ├── 3.5.0 Release Notes.rtf
    │   │   │       │   ├── 3.5.1 Release Notes.rtf
    │   │   │       │   ├── 3.5.2 Release Notes.rtf
    │   │   │       │   ├── 3.6.0 Release Notes.rtf
    │   │   │       │   ├── 3.6.1 Release Notes.rtf
    │   │   │       │   ├── 3.7.1 Release Notes.rtf
    │   │   │       │   ├── 3.7.2 Release Notes.rtf
    │   │   │       │   ├── 3.7.3 Release Notes.rtf
    │   │   │       │   ├── 3.7.4 Release Notes.rtf
    │   │   │       │   ├── 3.7.5 Release Notes.rtf
    │   │   │       │   ├── 3.8.x Release Notes.rtf
    │   │   │       │   ├── 4.x.x Release Notes.rtf
    │   │   │       │   ├── 5.x.x Release Notes.rtf
    │   │   │       │   ├── readme
    │   │   │       │   └── readme.txt
    │   │   │       ├── Info-NPSqueak__Upgraded_.plist
    │   │   │       ├── NSCursorWrappers.h
    │   │   │       ├── NSCursorWrappers.m
    │   │   │       ├── PluginSDK 4.01a/
    │   │   │       │   ├── Common/
    │   │   │       │   │   ├── npmac.cpp
    │   │   │       │   │   └── npwin.cpp
    │   │   │       │   └── Include/
    │   │   │       │       ├── jni.h
    │   │   │       │       ├── jni_md.h
    │   │   │       │       ├── jri.h
    │   │   │       │       ├── jri_md.h
    │   │   │       │       ├── jritypes.h
    │   │   │       │       ├── npapi.h
    │   │   │       │       └── npupp.h
    │   │   │       ├── config.h
    │   │   │       ├── malloc.h
    │   │   │       ├── npsqueak/
    │   │   │       │   ├── English.lproj/
    │   │   │       │   │   ├── InfoPlist.strings
    │   │   │       │   │   └── Localized.r
    │   │   │       │   ├── SqueakBrowser-Info.plist
    │   │   │       │   ├── SqueakBrowser.rsrc
    │   │   │       │   ├── SqueakBrowser_Prefix.pch
    │   │   │       │   ├── main.c
    │   │   │       │   ├── npsqueak.c
    │   │   │       │   └── npunix.c
    │   │   │       ├── nsPoolManagement.h
    │   │   │       ├── nsPoolManagement.m
    │   │   │       ├── osExports.c
    │   │   │       ├── specialChangeSets/
    │   │   │       │   ├── ArraysToGlobalStruct-JMM.1.cs
    │   │   │       │   ├── Gnuifier.6.cs
    │   │   │       │   ├── Gnuifier.st
    │   │   │       │   ├── Old/
    │   │   │       │   │   ├── ArraysToGlobalStruct-JMM.1.cs
    │   │   │       │   │   ├── FasterCopyLoop-JMM.4.cs
    │   │   │       │   │   ├── FasterCopyLoopPart2-JMM.2.cs
    │   │   │       │   │   ├── FasterLookupMethod-JMM.1.cs
    │   │   │       │   │   ├── Interpreter-readImageFromFile-jmm-dtl.2.cs
    │   │   │       │   │   ├── JMM-fixBiasToGrow.1.cs
    │   │   │       │   │   ├── MakePrimPointXInternal-JMM.1.cs
    │   │   │       │   │   ├── SlightlyFasterActivate-JMM.3.cs
    │   │   │       │   │   ├── VMM38-64bit-imageUpdates.1.cs
    │   │   │       │   │   ├── VMM38-gc-instrument-image.1.cs
    │   │   │       │   │   ├── VmUpdates-dtl/
    │   │   │       │   │   │   ├── JMM-VmUpdates32bitclean.2.cs
    │   │   │       │   │   │   ├── VMMaker-wbk.40.8.cs
    │   │   │       │   │   │   ├── VmUpdates-1001-dtl.1.cs
    │   │   │       │   │   │   ├── VmUpdates-1002-dtl.1.cs
    │   │   │       │   │   │   ├── VmUpdates-1003-dtl.1.cs
    │   │   │       │   │   │   ├── VmUpdates-1004-dtl.1.cs
    │   │   │       │   │   │   ├── VmUpdates-1005-dtl.1.cs
    │   │   │       │   │   │   └── VmUpdates-1006-dtl.1.cs
    │   │   │       │   │   └── bigCursor-bf.1.cs
    │   │   │       │   ├── VMM38-64bit-imageUpdates.1.cs
    │   │   │       │   └── VMM38-gc-instrument-image.1.cs
    │   │   │       ├── sqConfig.h
    │   │   │       ├── sqMacEncoding.c
    │   │   │       ├── sqMacEncoding.h
    │   │   │       ├── sqMacExternalPrims.c
    │   │   │       ├── sqMacExternalPrims.h
    │   │   │       ├── sqMacFileLogic.c
    │   │   │       ├── sqMacFileLogic.h
    │   │   │       ├── sqMacImageIO.c
    │   │   │       ├── sqMacImageIO.h
    │   │   │       ├── sqMacMain.c
    │   │   │       ├── sqMacMain.h
    │   │   │       ├── sqMacMemory.c
    │   │   │       ├── sqMacMemory.h
    │   │   │       ├── sqMacNSPlugin.c
    │   │   │       ├── sqMacNSPluginUILogic.c
    │   │   │       ├── sqMacNSPluginUILogic2.c
    │   │   │       ├── sqMacNSPluginUILogic2.h
    │   │   │       ├── sqMacTime.c
    │   │   │       ├── sqMacTime.h
    │   │   │       ├── sqMacUIAppleEvents.c
    │   │   │       ├── sqMacUIAppleEvents.h
    │   │   │       ├── sqMacUIClipBoard.c
    │   │   │       ├── sqMacUIClipBoard.h
    │   │   │       ├── sqMacUIConstants.h
    │   │   │       ├── sqMacUIEvents.c
    │   │   │       ├── sqMacUIEvents.h
    │   │   │       ├── sqMacUIEventsUniversal.c
    │   │   │       ├── sqMacUIMenuBar.c
    │   │   │       ├── sqMacUIMenuBar.h
    │   │   │       ├── sqMacUIMenuBarUniversal.c
    │   │   │       ├── sqMacUnixCommandLineInterface.c
    │   │   │       ├── sqMacUnixCommandLineInterface.h
    │   │   │       ├── sqMacUnixExternalPrims.c
    │   │   │       ├── sqMacWindow.c
    │   │   │       ├── sqMacWindow.h
    │   │   │       ├── sqMacWindowUniversal.c
    │   │   │       ├── sqNamedPrims.h
    │   │   │       ├── sqPlatformSpecific.h
    │   │   │       └── version.c
    │   │   ├── README.rst
    │   │   ├── iOS/
    │   │   │   ├── plugins/
    │   │   │   │   ├── B3DAcceleratorPlugin/
    │   │   │   │   │   ├── sqMacOpenGL.c
    │   │   │   │   │   ├── sqMacOpenGL.h
    │   │   │   │   │   ├── sqMacOpenGLInfo.c
    │   │   │   │   │   └── sqMacUIConstants.h
    │   │   │   │   ├── ClipboardExtended/
    │   │   │   │   │   ├── sqMacExtendedClipboard.h
    │   │   │   │   │   └── sqMacExtendedClipboard.m
    │   │   │   │   ├── CroquetPlugin/
    │   │   │   │   │   ├── sqMacCroquet.c
    │   │   │   │   │   └── sqMacCroquet.h
    │   │   │   │   ├── FT2Plugin/
    │   │   │   │   │   ├── FT2Plugin.xcodeproj/
    │   │   │   │   │   │   ├── MAC.mode1v3
    │   │   │   │   │   │   ├── MAC.pbxuser
    │   │   │   │   │   │   ├── bert.mode1
    │   │   │   │   │   │   ├── bert.pbxuser
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.mode1v3
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── Info-FT2Plugin.plist
    │   │   │   │   │   ├── PkgInfo
    │   │   │   │   │   ├── freetype2/
    │   │   │   │   │   │   └── freetype/
    │   │   │   │   │   │       ├── config/
    │   │   │   │   │   │       │   ├── ftconfig.h
    │   │   │   │   │   │       │   ├── ftheader.h
    │   │   │   │   │   │       │   ├── ftmodule.h
    │   │   │   │   │   │       │   ├── ftoption.h
    │   │   │   │   │   │       │   └── ftstdlib.h
    │   │   │   │   │   │       ├── freetype.h
    │   │   │   │   │   │       ├── ftadvanc.h
    │   │   │   │   │   │       ├── ftbbox.h
    │   │   │   │   │   │       ├── ftbdf.h
    │   │   │   │   │   │       ├── ftbitmap.h
    │   │   │   │   │   │       ├── ftcache.h
    │   │   │   │   │   │       ├── ftchapters.h
    │   │   │   │   │   │       ├── ftcid.h
    │   │   │   │   │   │       ├── fterrdef.h
    │   │   │   │   │   │       ├── fterrors.h
    │   │   │   │   │   │       ├── ftgasp.h
    │   │   │   │   │   │       ├── ftglyph.h
    │   │   │   │   │   │       ├── ftgxval.h
    │   │   │   │   │   │       ├── ftgzip.h
    │   │   │   │   │   │       ├── ftimage.h
    │   │   │   │   │   │       ├── ftincrem.h
    │   │   │   │   │   │       ├── ftlcdfil.h
    │   │   │   │   │   │       ├── ftlist.h
    │   │   │   │   │   │       ├── ftlzw.h
    │   │   │   │   │   │       ├── ftmac.h
    │   │   │   │   │   │       ├── ftmm.h
    │   │   │   │   │   │       ├── ftmodapi.h
    │   │   │   │   │   │       ├── ftmoderr.h
    │   │   │   │   │   │       ├── ftotval.h
    │   │   │   │   │   │       ├── ftoutln.h
    │   │   │   │   │   │       ├── ftpfr.h
    │   │   │   │   │   │       ├── ftrender.h
    │   │   │   │   │   │       ├── ftsizes.h
    │   │   │   │   │   │       ├── ftsnames.h
    │   │   │   │   │   │       ├── ftstroke.h
    │   │   │   │   │   │       ├── ftsynth.h
    │   │   │   │   │   │       ├── ftsystem.h
    │   │   │   │   │   │       ├── fttrigon.h
    │   │   │   │   │   │       ├── fttypes.h
    │   │   │   │   │   │       ├── ftwinfnt.h
    │   │   │   │   │   │       ├── ftxf86.h
    │   │   │   │   │   │       ├── t1tables.h
    │   │   │   │   │   │       ├── ttnameid.h
    │   │   │   │   │   │       ├── tttables.h
    │   │   │   │   │   │       ├── tttags.h
    │   │   │   │   │   │       └── ttunpat.h
    │   │   │   │   │   └── macFileNameBits.c
    │   │   │   │   ├── JoystickTabletPlugin/
    │   │   │   │   │   ├── HID_Error_Handler.c
    │   │   │   │   │   ├── HID_Error_Handler.h
    │   │   │   │   │   ├── HID_Name_Lookup.c
    │   │   │   │   │   ├── HID_Name_Lookup.h
    │   │   │   │   │   ├── HID_Queue_Utilities.c
    │   │   │   │   │   ├── HID_Queue_Utilities.h
    │   │   │   │   │   ├── HID_Utilities.c
    │   │   │   │   │   ├── HID_Utilities.h
    │   │   │   │   │   ├── HID_Utilities_External.h
    │   │   │   │   │   ├── HID_Utilities_Internal.h
    │   │   │   │   │   └── sqMacJoystickAndTablet.c
    │   │   │   │   ├── LocalePlugin/
    │   │   │   │   │   ├── sqMacLocaleCarbon.c
    │   │   │   │   │   └── sqMacLocaleCarbon.h
    │   │   │   │   ├── MIDIPlugin/
    │   │   │   │   │   └── sqMacMIDI.c
    │   │   │   │   ├── MacMenubarPlugin/
    │   │   │   │   │   ├── MacMenuOS9ToOSX.h
    │   │   │   │   │   ├── MacMenuOS9ToOSX.m
    │   │   │   │   │   └── MacMenubarPlugin.h
    │   │   │   │   ├── Mpeg3Plugin/
    │   │   │   │   │   ├── changesetsForInMemoryBuffer/
    │   │   │   │   │   │   ├── JMMMpegBuffer.1.cs
    │   │   │   │   │   │   ├── JMMMpegBufferTest.1.cs
    │   │   │   │   │   │   └── JMMMpegPluginBuffer.1.cs
    │   │   │   │   │   ├── sqMacFileBits.c
    │   │   │   │   │   └── sqMacFileBits.h
    │   │   │   │   ├── SecurityPlugin/
    │   │   │   │   │   └── sqMacSecurity.c
    │   │   │   │   ├── SerialPlugin/
    │   │   │   │   │   └── sqMacSerialPort.c
    │   │   │   │   ├── SoundPlugin/
    │   │   │   │   │   ├── sqSqueakSoundCoreAudio.h
    │   │   │   │   │   ├── sqSqueakSoundCoreAudio.m
    │   │   │   │   │   ├── sqSqueakSoundCoreAudioAPI.h
    │   │   │   │   │   └── sqSqueakSoundCoreAudioAPI.m
    │   │   │   │   ├── SqueakFFIPrims/
    │   │   │   │   │   ├── dummyFFI.c
    │   │   │   │   │   └── dummyFFI.h
    │   │   │   │   ├── SqueakLocale/
    │   │   │   │   │   ├── Info-SqueakLocalePlugin__Upgraded_.plist
    │   │   │   │   │   ├── SqueakLocale.xcodeproj/
    │   │   │   │   │   │   ├── MAC.mode1v3
    │   │   │   │   │   │   ├── MAC.pbxuser
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.mode1v3
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── sqMacLocaleCocoa.h
    │   │   │   │   │   └── sqMacLocaleCocoa.m
    │   │   │   │   ├── SqueakObjectiveC/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── PDColoredProgressView.h
    │   │   │   │   │   ├── PDColoredProgressView.m
    │   │   │   │   │   ├── drawing.m
    │   │   │   │   │   ├── squeakProxy.h
    │   │   │   │   │   ├── squeakProxy.m
    │   │   │   │   │   ├── squeakSUnitTester.h
    │   │   │   │   │   └── squeakSUnitTester.m
    │   │   │   │   └── UnixOSProcessPlugin/
    │   │   │   │       ├── Info.plist
    │   │   │   │       ├── PkgInfo
    │   │   │   │       ├── UnixOSProcessPlugin.xcodeproj/
    │   │   │   │       │   ├── MAC.mode1v3
    │   │   │   │       │   ├── MAC.pbxuser
    │   │   │   │       │   ├── bert.mode1
    │   │   │   │       │   ├── bert.pbxuser
    │   │   │   │       │   ├── johnmci.mode1
    │   │   │   │       │   ├── johnmci.mode1v3
    │   │   │   │       │   ├── johnmci.pbxuser
    │   │   │   │       │   └── project.pbxproj
    │   │   │   │       └── UnixOSProcessPluginOLD.xcodeproj/
    │   │   │   │           ├── MAC.mode1v3
    │   │   │   │           ├── MAC.pbxuser
    │   │   │   │           ├── johnmci.mode1
    │   │   │   │           ├── johnmci.mode1v3
    │   │   │   │           ├── johnmci.pbxuser
    │   │   │   │           └── project.pbxproj
    │   │   │   └── vm/
    │   │   │       ├── 5.x.x Release Notes.rtf
    │   │   │       ├── Common/
    │   │   │       │   ├── Classes/
    │   │   │       │   │   ├── Queue.h
    │   │   │       │   │   ├── Queue.m
    │   │   │       │   │   ├── sqMacV2Time.c
    │   │   │       │   │   ├── sqMacV2Time.h
    │   │   │       │   │   ├── sqSqueakAppDelegate.h
    │   │   │       │   │   ├── sqSqueakAppDelegate.m
    │   │   │       │   │   ├── sqSqueakAttributesAPI.h
    │   │   │       │   │   ├── sqSqueakAttributesAPI.m
    │   │   │       │   │   ├── sqSqueakCursorAPI.h
    │   │   │       │   │   ├── sqSqueakCursorAPI.m
    │   │   │       │   │   ├── sqSqueakEventsAPI.h
    │   │   │       │   │   ├── sqSqueakEventsAPI.m
    │   │   │       │   │   ├── sqSqueakFileDirectoryAPI.h
    │   │   │       │   │   ├── sqSqueakFileDirectoryAPI.m
    │   │   │       │   │   ├── sqSqueakFileDirectoryInterface.h
    │   │   │       │   │   ├── sqSqueakFileDirectoryInterface.m
    │   │   │       │   │   ├── sqSqueakInfoPlistInterface.h
    │   │   │       │   │   ├── sqSqueakInfoPlistInterface.m
    │   │   │       │   │   ├── sqSqueakMainApp.h
    │   │   │       │   │   ├── sqSqueakMainApp.m
    │   │   │       │   │   ├── sqSqueakMainApplication+attributes.h
    │   │   │       │   │   ├── sqSqueakMainApplication+attributes.m
    │   │   │       │   │   ├── sqSqueakMainApplication+cursor.h
    │   │   │       │   │   ├── sqSqueakMainApplication+cursor.m
    │   │   │       │   │   ├── sqSqueakMainApplication+events.h
    │   │   │       │   │   ├── sqSqueakMainApplication+events.m
    │   │   │       │   │   ├── sqSqueakMainApplication+imageReadWrite.h
    │   │   │       │   │   ├── sqSqueakMainApplication+imageReadWrite.m
    │   │   │       │   │   ├── sqSqueakMainApplication+screen.h
    │   │   │       │   │   ├── sqSqueakMainApplication+screen.m
    │   │   │       │   │   ├── sqSqueakMainApplication+sound.h
    │   │   │       │   │   ├── sqSqueakMainApplication+sound.m
    │   │   │       │   │   ├── sqSqueakMainApplication+vmAndImagePath.h
    │   │   │       │   │   ├── sqSqueakMainApplication+vmAndImagePath.m
    │   │   │       │   │   ├── sqSqueakMainApplication.h
    │   │   │       │   │   ├── sqSqueakMainApplication.m
    │   │   │       │   │   ├── sqSqueakScreenAPI.h
    │   │   │       │   │   ├── sqSqueakScreenAPI.m
    │   │   │       │   │   ├── sqSqueakScreenAndWindow.h
    │   │   │       │   │   ├── sqSqueakScreenAndWindow.m
    │   │   │       │   │   ├── sqSqueakSoundAPI.h
    │   │   │       │   │   ├── sqSqueakSoundAPI.m
    │   │   │       │   │   ├── sqSqueakVmAndImagePathAPI.h
    │   │   │       │   │   └── sqSqueakVmAndImagePathAPI.m
    │   │   │       │   ├── English.lproj/
    │   │   │       │   │   └── Localizable.strings
    │   │   │       │   ├── aio.c
    │   │   │       │   └── main.m
    │   │   │       ├── Default.psd
    │   │   │       ├── English.lproj/
    │   │   │       │   └── MainMenu.xib
    │   │   │       ├── Entitlements.plist
    │   │   │       ├── Info-iPhone.plist
    │   │   │       ├── MainWindow.xib
    │   │   │       ├── OSX/
    │   │   │       │   ├── BitMapConversionLogicFromX11.c
    │   │   │       │   ├── BitMapConversionLogicFromX11.h
    │   │   │       │   ├── Credits.rtf
    │   │   │       │   ├── English.lproj/
    │   │   │       │   │   ├── InfoPlist.strings
    │   │   │       │   │   └── MainMenu.xib
    │   │   │       │   ├── RoarVM.icns
    │   │   │       │   ├── SqViewBitmapConversion.h
    │   │   │       │   ├── SqViewBitmapConversion.m
    │   │   │       │   ├── SqViewClut.h
    │   │   │       │   ├── SqViewClut.m
    │   │   │       │   ├── Squeak.icns
    │   │   │       │   ├── SqueakChanges.icns
    │   │   │       │   ├── SqueakGeneric.icns
    │   │   │       │   ├── SqueakImage.icns
    │   │   │       │   ├── SqueakOSXAppDelegate.h
    │   │   │       │   ├── SqueakOSXAppDelegate.m
    │   │   │       │   ├── SqueakOSXApplication.h
    │   │   │       │   ├── SqueakOSXApplication.m
    │   │   │       │   ├── SqueakPlugin.icns
    │   │   │       │   ├── SqueakProject.icns
    │   │   │       │   ├── SqueakScript.icns
    │   │   │       │   ├── SqueakSources.icns
    │   │   │       │   ├── dtraceOperationsPerSecond.d
    │   │   │       │   ├── dtracedrawrecttiming.d
    │   │   │       │   ├── keyBoardStrokeDetails.h
    │   │   │       │   ├── keyBoardStrokeDetails.m
    │   │   │       │   ├── macintoshosxextra.c
    │   │   │       │   ├── macintoshosxextra.h
    │   │   │       │   ├── plugins/
    │   │   │       │   │   ├── HostWindowPlugin/
    │   │   │       │   │   │   ├── sqMacHostWindow.h
    │   │   │       │   │   │   └── sqMacHostWindow.m
    │   │   │       │   │   └── SoundPlugin/
    │   │   │       │   │       ├── sqSqueakOSXSoundCoreAudio.h
    │   │   │       │   │       └── sqSqueakOSXSoundCoreAudio.m
    │   │   │       │   ├── sqMacUnixExternalPrims.m
    │   │   │       │   ├── sqMacV2Browser.h
    │   │   │       │   ├── sqMacV2Browser.m
    │   │   │       │   ├── sqMacV2Window.h
    │   │   │       │   ├── sqMacV2Window.m
    │   │   │       │   ├── sqSqueakMainApplication+screen.h
    │   │   │       │   ├── sqSqueakMainApplication+screen.m
    │   │   │       │   ├── sqSqueakOSXApplication+attributes.h
    │   │   │       │   ├── sqSqueakOSXApplication+attributes.m
    │   │   │       │   ├── sqSqueakOSXApplication+clipboard.h
    │   │   │       │   ├── sqSqueakOSXApplication+clipboard.m
    │   │   │       │   ├── sqSqueakOSXApplication+cursor.h
    │   │   │       │   ├── sqSqueakOSXApplication+cursor.m
    │   │   │       │   ├── sqSqueakOSXApplication+events.h
    │   │   │       │   ├── sqSqueakOSXApplication+events.m
    │   │   │       │   ├── sqSqueakOSXApplication+imageReadWrite.h
    │   │   │       │   ├── sqSqueakOSXApplication+imageReadWrite.m
    │   │   │       │   ├── sqSqueakOSXApplication.h
    │   │   │       │   ├── sqSqueakOSXApplication.m
    │   │   │       │   ├── sqSqueakOSXClipboardAPI.h
    │   │   │       │   ├── sqSqueakOSXClipboardAPI.m
    │   │   │       │   ├── sqSqueakOSXDropAPI.h
    │   │   │       │   ├── sqSqueakOSXDropAPI.m
    │   │   │       │   ├── sqSqueakOSXFileDirectoryInterface.h
    │   │   │       │   ├── sqSqueakOSXFileDirectoryInterface.m
    │   │   │       │   ├── sqSqueakOSXInfoPlistInterface.h
    │   │   │       │   ├── sqSqueakOSXInfoPlistInterface.m
    │   │   │       │   ├── sqSqueakOSXNSView.h
    │   │   │       │   ├── sqSqueakOSXNSView.m
    │   │   │       │   ├── sqSqueakOSXScreenAndWindow.h
    │   │   │       │   └── sqSqueakOSXScreenAndWindow.m
    │   │   │       ├── Resources-iPad/
    │   │   │       │   └── MainWindow-iPad.xib
    │   │   │       ├── RoarVMOnIPad.xcodeproj/
    │   │   │       │   ├── johnmci.mode1v3
    │   │   │       │   ├── johnmci.pbxuser
    │   │   │       │   └── project.pbxproj
    │   │   │       ├── RoarVMSwipeEvent.h
    │   │   │       ├── RoarVMSwipeEvent.m
    │   │   │       ├── Settings.bundle/
    │   │   │       │   ├── Root.plist
    │   │   │       │   └── en.lproj/
    │   │   │       │       └── Root.strings
    │   │   │       ├── SqueakNoOGLIPhone_Prefix.pch
    │   │   │       ├── SqueakPureObjc-Info 64x64.plist
    │   │   │       ├── SqueakPureObjc-Info.plist
    │   │   │       ├── SqueakPureObjc-InfoCOG.plist
    │   │   │       ├── SqueakPureObjc.xcodeproj/
    │   │   │       │   ├── MAC.mode1v3
    │   │   │       │   └── MAC.pbxuser
    │   │   │       ├── SqueakPureObjcCogVM.xcodeproj/
    │   │   │       │   ├── MAC.mode1v3
    │   │   │       │   ├── MAC.mode1v3~esteban_master
    │   │   │       │   ├── MAC.pbxuser
    │   │   │       │   ├── johnmci.mode1v3
    │   │   │       │   ├── johnmci.pbxuser
    │   │   │       │   └── project.pbxproj
    │   │   │       ├── SqueakPureObjc_Prefix.pch
    │   │   │       ├── artwork/
    │   │   │       │   └── MacSqueakIcons/
    │   │   │       │       ├── Changes.psd
    │   │   │       │       ├── Document Icon Template.psd
    │   │   │       │       ├── Gear.psd
    │   │   │       │       ├── Plugin.psd
    │   │   │       │       ├── Script.psd
    │   │   │       │       ├── Scroll.psd
    │   │   │       │       └── SqueakAqua.psd
    │   │   │       ├── iPhone/
    │   │   │       │   ├── Classes/
    │   │   │       │   │   ├── RoarVMAbstractEvent.h
    │   │   │       │   │   ├── RoarVMAbstractEvent.m
    │   │   │       │   │   ├── RoarVMMouseEvent.h
    │   │   │       │   │   ├── RoarVMMouseEvent.m
    │   │   │       │   │   ├── RoarVMMouseUpEvent.h
    │   │   │       │   │   ├── RoarVMMouseUpEvent.m
    │   │   │       │   │   ├── SqueakNoOGLIPhoneAppDelegate.h
    │   │   │       │   │   ├── SqueakNoOGLIPhoneAppDelegate.m
    │   │   │       │   │   ├── SqueakUIController.h
    │   │   │       │   │   ├── SqueakUIController.m
    │   │   │       │   │   ├── SqueakUIView.h
    │   │   │       │   │   ├── SqueakUIView.m
    │   │   │       │   │   ├── SqueakUIViewCALayer.h
    │   │   │       │   │   ├── SqueakUIViewCALayer.m
    │   │   │       │   │   ├── SqueakUIViewOpenGL.h
    │   │   │       │   │   ├── SqueakUIViewOpenGL.m
    │   │   │       │   │   ├── SqueakUIViewOpenGLAlternate.m
    │   │   │       │   │   ├── UIGestureRecognizer+RoarVMEvents.h
    │   │   │       │   │   ├── UIGestureRecognizer+RoarVMEvents.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+Network.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+Network.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+attributes.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+attributes.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+clipboard.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+clipboard.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+events.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+events.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+imageReadWrite.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+imageReadWrite.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+sound.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication.m
    │   │   │       │   │   ├── sqSqueakIPhoneClipboardAPI.h
    │   │   │       │   │   ├── sqSqueakIPhoneClipboardAPI.m
    │   │   │       │   │   ├── sqSqueakIPhoneFileDirectoryInterface.h
    │   │   │       │   │   ├── sqSqueakIPhoneFileDirectoryInterface.m
    │   │   │       │   │   ├── sqSqueakIPhoneInfoPlistInterface.h
    │   │   │       │   │   ├── sqSqueakIPhoneInfoPlistInterface.m
    │   │   │       │   │   ├── sqSqueakiPhoneApplication+sound.m
    │   │   │       │   │   ├── sqiPhoneScreenAndWindow.h
    │   │   │       │   │   └── sqiPhoneScreenAndWindow.m
    │   │   │       │   ├── Info-iPhone.plist
    │   │   │       │   ├── SqueakV3-minimum-MVC.sources
    │   │   │       │   ├── config.h
    │   │   │       │   ├── iPhone.changes
    │   │   │       │   ├── iPhone.image
    │   │   │       │   ├── macintoshextra.c
    │   │   │       │   ├── macintoshextra.h
    │   │   │       │   ├── osExports.c
    │   │   │       │   ├── plugins/
    │   │   │       │   │   ├── ClipboardExtended/
    │   │   │       │   │   │   ├── sqMacExtendedClipboard.h
    │   │   │       │   │   │   └── sqMacExtendedClipboard.m
    │   │   │       │   │   ├── HostWindowPlugin/
    │   │   │       │   │   │   ├── sqMacHostWindow.c
    │   │   │       │   │   │   └── sqMacHostWindow.h
    │   │   │       │   │   └── SqueakFFIPrims/
    │   │   │       │   │       ├── dummyFFI.c
    │   │   │       │   │       └── dummyFFI.h
    │   │   │       │   ├── sqConfig.h
    │   │   │       │   ├── sqDummyaio.c
    │   │   │       │   ├── sqDummyaio.h
    │   │   │       │   ├── sqMacV2Memory.c
    │   │   │       │   ├── sqMacV2Memory.h
    │   │   │       │   └── sqPlatformSpecific.h
    │   │   │       ├── sqGnu.h
    │   │   │       └── src/
    │   │   │           ├── plugins/
    │   │   │           │   └── LocalePlugin/
    │   │   │           │       └── LocalePlugin.c
    │   │   │           ├── plugins.int
    │   │   │           └── vm/
    │   │   │               ├── interp.c
    │   │   │               ├── interp.h
    │   │   │               └── sqNamedPrims.h
    │   │   ├── intplugins/
    │   │   │   ├── ADPCMCodecPlugin/
    │   │   │   │   └── ADPCMCodecPlugin.c
    │   │   │   ├── AsynchFilePlugin/
    │   │   │   │   └── AsynchFilePlugin.c
    │   │   │   ├── B2DPlugin/
    │   │   │   │   └── B2DPlugin.c
    │   │   │   ├── B3DAcceleratorPlugin/
    │   │   │   │   └── B3DAcceleratorPlugin.c
    │   │   │   ├── BMPReadWriterPlugin/
    │   │   │   │   └── BMPReadWriterPlugin.c
    │   │   │   ├── BitBltPlugin/
    │   │   │   │   └── BitBltPlugin.c
    │   │   │   ├── CroquetPlugin/
    │   │   │   │   └── CroquetPlugin.c
    │   │   │   ├── DSAPrims/
    │   │   │   │   └── DSAPrims.c
    │   │   │   ├── DropPlugin/
    │   │   │   │   └── DropPlugin.c
    │   │   │   ├── FFTPlugin/
    │   │   │   │   └── FFTPlugin.c
    │   │   │   ├── FT2Plugin/
    │   │   │   │   └── FT2Plugin.c
    │   │   │   ├── FileCopyPlugin/
    │   │   │   │   └── FileCopyPlugin.c
    │   │   │   ├── FilePlugin/
    │   │   │   │   └── FilePlugin.c
    │   │   │   ├── FloatArrayPlugin/
    │   │   │   │   └── FloatArrayPlugin.c
    │   │   │   ├── FloatMathPlugin/
    │   │   │   │   └── FloatMathPlugin.c
    │   │   │   ├── GeniePlugin/
    │   │   │   │   └── GeniePlugin.c
    │   │   │   ├── HostWindowPlugin/
    │   │   │   │   └── HostWindowPlugin.c
    │   │   │   ├── IA32ABI/
    │   │   │   │   └── IA32ABI.c
    │   │   │   ├── JPEGReadWriter2Plugin/
    │   │   │   │   └── JPEGReadWriter2Plugin.c
    │   │   │   ├── JPEGReaderPlugin/
    │   │   │   │   └── JPEGReaderPlugin.c
    │   │   │   ├── JoystickTabletPlugin/
    │   │   │   │   └── JoystickTabletPlugin.c
    │   │   │   ├── Klatt/
    │   │   │   │   └── Klatt.c
    │   │   │   ├── LargeIntegers/
    │   │   │   │   └── LargeIntegers.c
    │   │   │   ├── LocalePlugin/
    │   │   │   │   └── LocalePlugin.c
    │   │   │   ├── MIDIPlugin/
    │   │   │   │   └── MIDIPlugin.c
    │   │   │   ├── Matrix2x3Plugin/
    │   │   │   │   └── Matrix2x3Plugin.c
    │   │   │   ├── MiscPrimitivePlugin/
    │   │   │   │   └── MiscPrimitivePlugin.c
    │   │   │   ├── Mpeg3Plugin/
    │   │   │   │   └── Mpeg3Plugin.c
    │   │   │   ├── ObjectiveCPlugin/
    │   │   │   │   └── ObjectiveCPlugin.c
    │   │   │   ├── RePlugin/
    │   │   │   │   └── RePlugin.c
    │   │   │   ├── SecurityPlugin/
    │   │   │   │   └── SecurityPlugin.c
    │   │   │   ├── SerialPlugin/
    │   │   │   │   └── SerialPlugin.c
    │   │   │   ├── SlangTestSupportPlugin/
    │   │   │   │   └── SlangTestSupportPlugin.c
    │   │   │   ├── SocketPlugin/
    │   │   │   │   └── SocketPlugin.c
    │   │   │   ├── SoundCodecPrims/
    │   │   │   │   └── SoundCodecPrims.c
    │   │   │   ├── SoundGenerationPlugin/
    │   │   │   │   └── SoundGenerationPlugin.c
    │   │   │   ├── SoundPlugin/
    │   │   │   │   └── SoundPlugin.c
    │   │   │   ├── Squeak3D/
    │   │   │   │   └── Squeak3D.c
    │   │   │   ├── SqueakFFIPrims/
    │   │   │   │   └── SqueakFFIPrims.c
    │   │   │   ├── StarSqueakPlugin/
    │   │   │   │   └── StarSqueakPlugin.c
    │   │   │   ├── UUIDPlugin/
    │   │   │   │   └── UUIDPlugin.c
    │   │   │   ├── UnixOSProcessPlugin/
    │   │   │   │   └── UnixOSProcessPlugin.c
    │   │   │   └── ZipPlugin/
    │   │   │       └── ZipPlugin.c
    │   │   └── unix/
    │   │       ├── CMakeLists.txt
    │   │       ├── ChangeLog
    │   │       ├── Makefile
    │   │       ├── README
    │   │       ├── README.CMake
    │   │       ├── README.SVN
    │   │       ├── cmake/
    │   │       │   ├── Fixes.cmake
    │   │       │   ├── PluginExternal.cmake
    │   │       │   ├── PluginInternal.cmake
    │   │       │   ├── Plugins.cmake
    │   │       │   ├── Utils.cmake
    │   │       │   ├── config.guess
    │   │       │   ├── config.in
    │   │       │   ├── config.sub
    │   │       │   ├── configure
    │   │       │   ├── disabledPlugins.c
    │   │       │   ├── gnuify
    │   │       │   ├── gnuify.awk
    │   │       │   ├── squeak.in
    │   │       │   ├── squeak.sh.in
    │   │       │   ├── testDoubleWordAlignment.c
    │   │       │   ├── testDoubleWordOrder.c
    │   │       │   ├── testLanginfoCodeset.c
    │   │       │   └── verstamp
    │   │       ├── config/
    │   │       │   ├── Makefile
    │   │       │   ├── Makefile.cpp-plg.in
    │   │       │   ├── Makefile.in
    │   │       │   ├── Makefile.install
    │   │       │   ├── Makefile.plg.in
    │   │       │   ├── README
    │   │       │   ├── Squeak.spec.in
    │   │       │   ├── acinclude.m4
    │   │       │   ├── aclocal.m4
    │   │       │   ├── bin.squeak.sh.in
    │   │       │   ├── build
    │   │       │   ├── config.guess
    │   │       │   ├── config.h.in
    │   │       │   ├── config.sub
    │   │       │   ├── configure
    │   │       │   ├── configure.ac
    │   │       │   ├── gnuify
    │   │       │   ├── inisqueak.in
    │   │       │   ├── install-sh
    │   │       │   ├── ltcf-c.sh
    │   │       │   ├── ltconfig
    │   │       │   ├── ltmain.sh
    │   │       │   ├── make.cfg.in
    │   │       │   ├── make.ext.in
    │   │       │   ├── make.int.in
    │   │       │   ├── make.prg.in
    │   │       │   ├── mkacinc
    │   │       │   ├── mkconfig.in
    │   │       │   ├── mkinstalldirs
    │   │       │   ├── mkman
    │   │       │   ├── mkmf
    │   │       │   ├── mktargets
    │   │       │   ├── relpath
    │   │       │   ├── squeak.sh.in
    │   │       │   ├── uninstall
    │   │       │   ├── version
    │   │       │   ├── version.stamp
    │   │       │   ├── verstamp
    │   │       │   └── vmm.config
    │   │       ├── doc/
    │   │       │   ├── 3.10-1.RELEASE_NOTES
    │   │       │   ├── 3.10-2.RELEASE_NOTES
    │   │       │   ├── 3.10-3.RELEASE_NOTES
    │   │       │   ├── 3.2-1.RELEASE_NOTES
    │   │       │   ├── 3.2-2.RELEASE_NOTES
    │   │       │   ├── 3.2-3.RELEASE_NOTES
    │   │       │   ├── 3.2-4.RELEASE_NOTES
    │   │       │   ├── 3.2-5.RELEASE_NOTES
    │   │       │   ├── 3.2-6.RELEASE_NOTES
    │   │       │   ├── 3.5-1devel.RELEASE_NOTES
    │   │       │   ├── 3.6-3.RELEASE_NOTES
    │   │       │   ├── 3.7-7.RELEASE_NOTES
    │   │       │   ├── 3.7b-2.RELEASE_NOTES
    │   │       │   ├── 3.7b-3.RELEASE_NOTES
    │   │       │   ├── 3.7b-4.RELEASE_NOTES
    │   │       │   ├── 3.7b-5.RELEASE_NOTES
    │   │       │   ├── 3.9-4.RELEASE_NOTES
    │   │       │   ├── 3.9-7.RELEASE_NOTES
    │   │       │   ├── COPYING
    │   │       │   ├── COPYRIGHT
    │   │       │   ├── HowToBuildFromSource.html/
    │   │       │   │   ├── HowToBuildFromSource-node1.html
    │   │       │   │   ├── HowToBuildFromSource-node2.html
    │   │       │   │   ├── HowToBuildFromSource-node3.html
    │   │       │   │   ├── HowToBuildFromSource-node4.html
    │   │       │   │   ├── HowToBuildFromSource-node5.html
    │   │       │   │   ├── HowToBuildFromSource-node6.html
    │   │       │   │   ├── HowToBuildFromSource-node7.html
    │   │       │   │   ├── HowToBuildFromSource.css
    │   │       │   │   ├── HowToBuildFromSource.html
    │   │       │   │   └── index.html
    │   │       │   ├── HowToBuildFromSource.ps
    │   │       │   ├── HowToBuildFromSource.txt
    │   │       │   ├── LICENSE
    │   │       │   ├── Makefile
    │   │       │   ├── README.Contributing
    │   │       │   ├── README.Keyboard
    │   │       │   ├── README.Sound
    │   │       │   ├── RELEASE_NOTES_3.11.3.2135
    │   │       │   ├── RELEASE_NOTES_4.0.3.2196
    │   │       │   ├── RELEASE_NOTES_4.0.3.2202
    │   │       │   └── squeak.1
    │   │       ├── misc/
    │   │       │   ├── 00_README
    │   │       │   ├── AioPluginV1-1.sar
    │   │       │   ├── GLXUnix-ikp.2.cs
    │   │       │   ├── OSProcessPluginV3-3.sar
    │   │       │   ├── System-Tracing.2.cs
    │   │       │   ├── VMM38b4-64bit-image1-ikp.1.cs
    │   │       │   ├── VMM38b4-64bit-image2-ikp.1.cs
    │   │       │   ├── VMM38b4-64bit-vm1-ikp.1.cs
    │   │       │   ├── VMM38b4-64bit-vm2-ikp.2.cs
    │   │       │   ├── VMMaker-tpr.14.mcz
    │   │       │   ├── XDisplayControlPluginV1-0.sar
    │   │       │   └── threadValidate/
    │   │       │       ├── Makefile
    │   │       │       ├── config.h
    │   │       │       ├── sqTicker.c
    │   │       │       ├── sqUnixHeartbeat.c
    │   │       │       └── threadValidate.c
    │   │       ├── npsqueak/
    │   │       │   ├── Makefile
    │   │       │   ├── README.npsqueak
    │   │       │   ├── include/
    │   │       │   │   ├── jri.h
    │   │       │   │   ├── jri_md.h
    │   │       │   │   ├── jritypes.h
    │   │       │   │   ├── npapi.h
    │   │       │   │   └── npupp.h
    │   │       │   ├── npsqueak.c
    │   │       │   ├── npsqueakregister.in
    │   │       │   ├── npsqueakrun.in
    │   │       │   ├── npunix.c
    │   │       │   └── test/
    │   │       │       ├── plugintest.html
    │   │       │       └── plugintest.sts
    │   │       ├── plugins/
    │   │       │   ├── AioPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── config.cmake
    │   │       │   ├── AsynchFilePlugin/
    │   │       │   │   ├── sqUnixAsynchFile.c
    │   │       │   │   └── sqUnixAsynchFile.h
    │   │       │   ├── B3DAcceleratorPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── NOTES
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   ├── sqUnixOpenGL.c
    │   │       │   │   ├── sqUnixOpenGL.h
    │   │       │   │   └── zzz/
    │   │       │   │       ├── sqUnixOpenGL.OSX
    │   │       │   │       └── sqUnixOpenGL.X11
    │   │       │   ├── CameraPlugin/
    │   │       │   │   └── sqCamera.c
    │   │       │   ├── ClipboardExtendedPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixExtendedClipboard.c
    │   │       │   ├── DBusPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   └── config.cmake
    │   │       │   ├── DropPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   └── sqUnixDragDrop.c
    │   │       │   ├── FT2Plugin/
    │   │       │   │   ├── FT2PluginHeaderFix-ikp.1.cs
    │   │       │   │   └── config.cmake
    │   │       │   ├── FileCopyPlugin/
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── sqUnixFileCopyPlugin.c
    │   │       │   ├── FilePlugin/
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixFile.c
    │   │       │   ├── FloatMathPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── config.cmake
    │   │       │   ├── GStreamerPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   └── config.cmake
    │   │       │   ├── HostWindowPlugin/
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixHostWindowPlugin.c
    │   │       │   ├── ImmX11Plugin/
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── config.cmake
    │   │       │   ├── JPEGReadWriter2Plugin/
    │   │       │   │   └── Makefile.inc
    │   │       │   ├── JoystickTabletPlugin/
    │   │       │   │   └── sqUnixJoystickTablet.c
    │   │       │   ├── LocalePlugin/
    │   │       │   │   ├── sqUnixLocale.c
    │   │       │   │   └── sqUnixLocale.h
    │   │       │   ├── MIDIPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   ├── sqUnixMIDI.c
    │   │       │   │   ├── sqUnixMIDIALSA.inc
    │   │       │   │   └── sqUnixMIDINone.inc
    │   │       │   ├── Mpeg3Plugin/
    │   │       │   │   ├── Makefile.in
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── mkmf.subdirs
    │   │       │   ├── OggPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   └── config.cmake
    │   │       │   ├── PrintJobPlugin/
    │   │       │   │   ├── sqPrinting.c
    │   │       │   │   └── sqPrinting.h
    │   │       │   ├── PseudoTTYPlugin/
    │   │       │   │   ├── PseudoTTY.st
    │   │       │   │   ├── PseudoTTYPlugin.st
    │   │       │   │   ├── README
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   ├── openpty.h
    │   │       │   │   └── sqUnixPseudoTTYPlugin.c
    │   │       │   ├── RomePlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   └── config.cmake
    │   │       │   ├── SecurityPlugin/
    │   │       │   │   └── sqUnixSecurity.c
    │   │       │   ├── SerialPlugin/
    │   │       │   │   └── sqUnixSerial.c
    │   │       │   ├── SocketPlugin/
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixSocket.c
    │   │       │   ├── SoundPlugin/
    │   │       │   │   ├── sqUnixSound.c
    │   │       │   │   └── zzz/
    │   │       │   │       ├── Buffer.h
    │   │       │   │       ├── DoubleBuffer.h
    │   │       │   │       ├── Fifo.h
    │   │       │   │       └── ring.h
    │   │       │   ├── SqueakFFIPrims/
    │   │       │   │   ├── 00README
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── Makefile.in
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── any-libffi-asm.S
    │   │       │   │   ├── any-libffi.c
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   ├── ffi-config
    │   │       │   │   ├── ffi-test-main.c
    │   │       │   │   ├── ffi-test-sq.h
    │   │       │   │   ├── ffi-test.c
    │   │       │   │   ├── ffi-test.h
    │   │       │   │   ├── ppc-darwin-asm.S
    │   │       │   │   ├── ppc-darwin.c
    │   │       │   │   ├── ppc-global.h
    │   │       │   │   ├── ppc-sysv-asm.S
    │   │       │   │   ├── ppc-sysv.c
    │   │       │   │   ├── x86-sysv-asm.S
    │   │       │   │   └── x86-sysv.c
    │   │       │   ├── UUIDPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixUUID.c
    │   │       │   ├── UnixOSProcessPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── config.cmake
    │   │       │   ├── VideoForLinuxPlugin/
    │   │       │   │   ├── Video4Squeak-dgd.8.cs
    │   │       │   │   ├── VideoForLinuxPlugin.c
    │   │       │   │   ├── VideoForLinuxPlugin.h
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── ccvt.h
    │   │       │   │   ├── ccvt_c2.c
    │   │       │   │   ├── ccvt_misc.c
    │   │       │   │   ├── ccvt_types.h
    │   │       │   │   ├── palettes.c
    │   │       │   │   ├── palettes.h
    │   │       │   │   ├── videolib.c
    │   │       │   │   └── videolib.h
    │   │       │   └── XDisplayControlPlugin/
    │   │       │       ├── Makefile.inc
    │   │       │       ├── acinclude.m4
    │   │       │       ├── build.cmake
    │   │       │       └── config.cmake
    │   │       ├── src/
    │   │       │   ├── plugins/
    │   │       │   │   ├── AioPlugin/
    │   │       │   │   │   └── AioPlugin.c
    │   │       │   │   ├── B3DAcceleratorPlugin/
    │   │       │   │   │   └── B3DAcceleratorPlugin.c
    │   │       │   │   ├── ClipboardExtendedPlugin/
    │   │       │   │   │   └── ClipboardExtendedPlugin.c
    │   │       │   │   ├── DBusPlugin/
    │   │       │   │   │   └── DBusPlugin.c
    │   │       │   │   ├── FileCopyPlugin/
    │   │       │   │   │   └── FileCopyPlugin.c
    │   │       │   │   ├── GStreamerPlugin/
    │   │       │   │   │   └── GStreamerPlugin.c
    │   │       │   │   ├── HostWindowPlugin/
    │   │       │   │   │   └── HostWindowPlugin.c
    │   │       │   │   ├── KedamaPlugin/
    │   │       │   │   │   └── KedamaPlugin.c
    │   │       │   │   ├── KedamaPlugin2/
    │   │       │   │   │   └── KedamaPlugin2.c
    │   │       │   │   ├── Mpeg3Plugin/
    │   │       │   │   │   └── Mpeg3Plugin.c
    │   │       │   │   ├── RomePlugin/
    │   │       │   │   │   └── RomePlugin.c
    │   │       │   │   ├── Squeak3D/
    │   │       │   │   │   └── Squeak3D.c
    │   │       │   │   ├── SqueakFFIPrims/
    │   │       │   │   │   └── SqueakFFIPrims.c
    │   │       │   │   ├── UUIDPlugin/
    │   │       │   │   │   └── UUIDPlugin.c
    │   │       │   │   ├── UnixOSProcessPlugin/
    │   │       │   │   │   └── UnixOSProcessPlugin.c
    │   │       │   │   └── XDisplayControlPlugin/
    │   │       │   │       └── XDisplayControlPlugin.c
    │   │       │   ├── plugins.ext
    │   │       │   ├── plugins.int
    │   │       │   └── vm/
    │   │       │       ├── interp.c
    │   │       │       ├── interp.h
    │   │       │       └── sqNamedPrims.h
    │   │       ├── vm/
    │   │       │   ├── Makefile.in
    │   │       │   ├── SqDisplay.h
    │   │       │   ├── SqModule.h
    │   │       │   ├── SqSound.h
    │   │       │   ├── acinclude.m4
    │   │       │   ├── aio.c
    │   │       │   ├── build.cmake
    │   │       │   ├── config.cmake
    │   │       │   ├── debug.c
    │   │       │   ├── debug.h
    │   │       │   ├── dlfcn-dyld.c
    │   │       │   ├── feedback.h
    │   │       │   ├── glibc.h
    │   │       │   ├── interp.h
    │   │       │   ├── mac-alias.c
    │   │       │   ├── osExports.c
    │   │       │   ├── sqConfig.h
    │   │       │   ├── sqGnu.h
    │   │       │   ├── sqNamedPrims.h
    │   │       │   ├── sqPlatformSpecific.h
    │   │       │   ├── sqUnixCharConv.c
    │   │       │   ├── sqUnixCharConv.h
    │   │       │   ├── sqUnixEvent.c
    │   │       │   ├── sqUnixExternalPrims.c
    │   │       │   ├── sqUnixGL.h
    │   │       │   ├── sqUnixGlobals.h
    │   │       │   ├── sqUnixHeartbeat.c
    │   │       │   ├── sqUnixMain.c
    │   │       │   ├── sqUnixMain.h
    │   │       │   ├── sqUnixMemory.c
    │   │       │   ├── sqUnixThreads.c
    │   │       │   ├── sqUnixVMProfile.c
    │   │       │   ├── sqUnixWindow.h
    │   │       │   ├── sqaio.h
    │   │       │   └── sunos.h
    │   │       ├── vm-display-Quartz/
    │   │       │   ├── CPS.h
    │   │       │   ├── Info.plist.in
    │   │       │   ├── Makefile.in
    │   │       │   ├── Makefile.inc
    │   │       │   ├── PkgInfo
    │   │       │   ├── Resources/
    │   │       │   │   ├── GLXUnix-ikp.2.cs
    │   │       │   │   ├── SqueakChanges.icns
    │   │       │   │   ├── SqueakHelp/
    │   │       │   │   │   └── SqueakHelp.html
    │   │       │   │   ├── SqueakImage.icns
    │   │       │   │   ├── SqueakPlugin.icns
    │   │       │   │   ├── SqueakProject.icns
    │   │       │   │   ├── SqueakSources.icns
    │   │       │   │   └── SqueakVM.icns
    │   │       │   ├── Squeak.h
    │   │       │   ├── Squeak.m
    │   │       │   ├── SqueakView.h
    │   │       │   ├── SqueakView.m
    │   │       │   ├── SqueakWindow.h
    │   │       │   ├── SqueakWindow.m
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   ├── config.cmake
    │   │       │   ├── mkinfo
    │   │       │   ├── sqUnixQuartz.m
    │   │       │   ├── sqUnixQuartzGL.h
    │   │       │   └── zzz/
    │   │       │       ├── Squeak.h
    │   │       │       ├── Squeak.m
    │   │       │       ├── SqueakView.h
    │   │       │       ├── SqueakView.m
    │   │       │       ├── SqueakWindow.h
    │   │       │       ├── SqueakWindow.m
    │   │       │       └── sqUnixQuartz.m
    │   │       ├── vm-display-X11/
    │   │       │   ├── Makefile.in
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   ├── config.cmake
    │   │       │   ├── sqUnixMozilla.c
    │   │       │   ├── sqUnixOpenGL.X11
    │   │       │   ├── sqUnixX11.c
    │   │       │   └── sqUnixXdnd.c
    │   │       ├── vm-display-custom/
    │   │       │   ├── Makefile.in
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   └── sqUnixCustomWindow.c
    │   │       ├── vm-display-fbdev/
    │   │       │   ├── 00_README.fbdev
    │   │       │   ├── Makefile.in
    │   │       │   ├── TODO
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   ├── sqUnixFBDev.c
    │   │       │   ├── sqUnixFBDevFramebuffer.c
    │   │       │   ├── sqUnixFBDevKeyboard.c
    │   │       │   ├── sqUnixFBDevKeymap.c
    │   │       │   ├── sqUnixFBDevMouse.c
    │   │       │   ├── sqUnixFBDevMouseADB.c
    │   │       │   ├── sqUnixFBDevMousePS2.c
    │   │       │   └── sqUnixFBDevUtil.c
    │   │       ├── vm-display-null/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── build.cmake
    │   │       │   └── sqUnixDisplayNull.c
    │   │       ├── vm-sound-ALSA/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   └── sqUnixSoundALSA.c
    │   │       ├── vm-sound-MacOSX/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   ├── config.cmake
    │   │       │   ├── sqUnixSoundDebug.h
    │   │       │   └── sqUnixSoundMacOSX.c
    │   │       ├── vm-sound-NAS/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   └── sqUnixSoundNAS.c
    │   │       ├── vm-sound-OSS/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   └── sqUnixSoundOSS.c
    │   │       ├── vm-sound-Sun/
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   └── sqUnixSoundSun.c
    │   │       ├── vm-sound-custom/
    │   │       │   ├── acinclude.m4
    │   │       │   └── sqUnixCustomSound.c
    │   │       ├── vm-sound-null/
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   └── sqUnixSoundNull.c
    │   │       └── vm-sound-pulse/
    │   │           ├── config.cmake
    │   │           └── sqUnixSoundPulseAudio.c
    │   ├── heap/
    │   │   ├── abstract_mark_sweep_collector.cpp
    │   │   ├── abstract_mark_sweep_collector.h
    │   │   ├── abstract_object_heap.cpp
    │   │   ├── abstract_object_heap.h
    │   │   ├── abstract_object_heap.inline.h
    │   │   ├── abstract_object_table.h
    │   │   ├── gc_oop_stack.h
    │   │   ├── indirect_oop_mark_sweep_collector.h
    │   │   ├── mark_sweep_collector.h
    │   │   ├── memory_system.cpp
    │   │   ├── memory_system.h
    │   │   ├── memory_system.inline.h
    │   │   ├── multicore_object_heap.cpp
    │   │   ├── multicore_object_heap.h
    │   │   ├── multicore_object_heap.inline.h
    │   │   ├── multicore_object_table.cpp
    │   │   ├── multicore_object_table.h
    │   │   ├── multicore_object_table.inline.h
    │   │   └── oop_closure.h
    │   ├── image_readers/
    │   │   ├── squeak_image_reader.cpp
    │   │   └── squeak_image_reader.h
    │   ├── interpreter/
    │   │   ├── abstract_primitive_table.h
    │   │   ├── at_cache.cpp
    │   │   ├── at_cache.h
    │   │   ├── external_primitive_table.h
    │   │   ├── interpreter_bytecodes.cpp
    │   │   ├── interpreter_bytecodes.h
    │   │   ├── interpreter_primitives.cpp
    │   │   ├── interpreter_primitives.h
    │   │   ├── method_cache.cpp
    │   │   ├── method_cache.h
    │   │   ├── obsolete_indexed_primitive_table.cpp
    │   │   ├── obsolete_indexed_primitive_table.h
    │   │   ├── obsolete_named_primitive_table.cpp
    │   │   ├── obsolete_named_primitive_table.h
    │   │   ├── primitive_table.cpp
    │   │   ├── primitive_table.h
    │   │   ├── squeak_interpreter.cpp
    │   │   └── squeak_interpreter.h
    │   ├── linux_bash_profile
    │   ├── linux_bashrc
    │   ├── makefiles/
    │   │   ├── Makefile.common
    │   │   ├── Makefile.debug
    │   │   ├── Makefile.opt
    │   │   └── configure
    │   ├── message_buffers/
    │   │   ├── buffered_channel.cpp
    │   │   ├── buffered_channel.h
    │   │   ├── buffered_channel_debug.h
    │   │   ├── synced_queue.cpp
    │   │   └── synced_queue.h
    │   ├── messages/
    │   │   ├── abstract_message.cpp
    │   │   ├── abstract_message.h
    │   │   ├── deferred_request.cpp
    │   │   ├── deferred_request.h
    │   │   ├── interactions.cpp
    │   │   ├── interactions.h
    │   │   ├── interpreter_subset_for_control_transfer.cpp
    │   │   ├── interpreter_subset_for_control_transfer.h
    │   │   ├── message_classes.cpp
    │   │   ├── message_classes.h
    │   │   ├── message_or_ack_request.cpp
    │   │   ├── message_or_ack_request.h
    │   │   ├── message_statics.cpp
    │   │   ├── message_statics.h
    │   │   ├── message_stats.cpp
    │   │   ├── message_stats.h
    │   │   ├── message_templates.h
    │   │   ├── receive_marker.cpp
    │   │   └── receive_marker.h
    │   ├── multichip/
    │   │   ├── abstract_zero_copy_command_queue_endpoint.cpp
    │   │   ├── abstract_zero_copy_command_queue_endpoint.h
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_endpoint.cpp
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_endpoint.h
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_receiver.cpp
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_receiver.h
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_sender.cpp
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_sender.h
    │   │   ├── chip_to_chip_zero_copy_command_queue_endpoint.cpp
    │   │   ├── chip_to_chip_zero_copy_command_queue_endpoint.h
    │   │   ├── chip_to_chip_zero_copy_command_receiver.cpp
    │   │   ├── chip_to_chip_zero_copy_command_receiver.h
    │   │   ├── chip_to_chip_zero_copy_command_sender.cpp
    │   │   ├── chip_to_chip_zero_copy_command_sender.h
    │   │   ├── host_pci_info.cpp
    │   │   ├── host_pci_info.h
    │   │   ├── tilera_chip_to_chip_message_queue.cpp
    │   │   └── tilera_chip_to_chip_message_queue.h
    │   ├── objects/
    │   │   ├── chunk.h
    │   │   ├── chunk.inline.h
    │   │   ├── header_type.cpp
    │   │   ├── header_type.h
    │   │   ├── object.cpp
    │   │   ├── object.h
    │   │   ├── object.inline.h
    │   │   ├── object_indices.h
    │   │   ├── object_p.h
    │   │   ├── preheader.h
    │   │   ├── process_field_locator.cpp
    │   │   ├── process_field_locator.h
    │   │   ├── roots.cpp
    │   │   ├── roots.h
    │   │   ├── special_indices.h
    │   │   └── word_containing_object_type.h
    │   ├── oops/
    │   │   ├── abstract_oop.h
    │   │   ├── oop.cpp
    │   │   ├── oop.h
    │   │   ├── oop.inline.h
    │   │   └── tags.h
    │   ├── platform/
    │   │   ├── abstract_cpu_coordinate.h
    │   │   ├── abstract_memory_semantics.h
    │   │   ├── abstract_message_queue.h
    │   │   ├── abstract_os_interface.cpp
    │   │   ├── abstract_os_interface.h
    │   │   ├── cacheline_aligned.h
    │   │   ├── cpu_coordinate.h
    │   │   ├── dummy_cpu_coordinate.cpp
    │   │   ├── dummy_cpu_coordinate.h
    │   │   ├── ilib_message_queue.cpp
    │   │   ├── ilib_message_queue.h
    │   │   ├── ilib_os_interface.cpp
    │   │   ├── ilib_os_interface.h
    │   │   ├── logical_core.cpp
    │   │   ├── logical_core.h
    │   │   ├── memory_semantics.h
    │   │   ├── message_queue.h
    │   │   ├── os_interface.h
    │   │   ├── osx_os_interface.cpp
    │   │   ├── osx_os_interface.h
    │   │   ├── posix_os_interface.cpp
    │   │   ├── posix_os_interface.h
    │   │   ├── process_memory_semantics.cpp
    │   │   ├── process_memory_semantics.h
    │   │   ├── shared_memory_message_queue.cpp
    │   │   ├── shared_memory_message_queue.h
    │   │   ├── shared_memory_message_queue_per_sender.cpp
    │   │   ├── shared_memory_message_queue_per_sender.h
    │   │   ├── thread_memory_semantics.cpp
    │   │   ├── thread_memory_semantics.h
    │   │   ├── tile_cpu_coordinate.cpp
    │   │   ├── tile_cpu_coordinate.h
    │   │   ├── tmc_os_interface.cpp
    │   │   └── tmc_os_interface.h
    │   ├── primitives/
    │   │   ├── RVMPlugin.cpp
    │   │   └── RVMPlugin.h
    │   ├── runtime/
    │   │   ├── abstract_mutex.cpp
    │   │   ├── abstract_mutex.h
    │   │   ├── abstract_tracer.cpp
    │   │   ├── abstract_tracer.h
    │   │   ├── bytemap.cpp
    │   │   ├── bytemap.h
    │   │   ├── core_tracer.cpp
    │   │   ├── core_tracer.h
    │   │   ├── debug_helper.cpp
    │   │   ├── debug_helper.h
    │   │   ├── debug_store_checks.h
    │   │   ├── error_handling.cpp
    │   │   ├── error_handling.h
    │   │   ├── execution_tracer.cpp
    │   │   ├── execution_tracer.h
    │   │   ├── gc_debugging_tracer.cpp
    │   │   ├── gc_debugging_tracer.h
    │   │   ├── headers.h
    │   │   ├── main.cpp
    │   │   ├── measurements.cpp
    │   │   ├── measurements.h
    │   │   ├── my_rank.cpp
    │   │   ├── my_rank.h
    │   │   ├── oop_tracer.cpp
    │   │   ├── oop_tracer.h
    │   │   ├── performance_counters.cpp
    │   │   ├── performance_counters.h
    │   │   ├── printer.cpp
    │   │   ├── printer.h
    │   │   ├── profiling_tracer.cpp
    │   │   ├── profiling_tracer.h
    │   │   ├── rank_set.cpp
    │   │   ├── rank_set.h
    │   │   ├── runtime_tester.h
    │   │   ├── rvm_bitmap.cpp
    │   │   ├── rvm_bitmap.h
    │   │   ├── rvm_config.cpp
    │   │   ├── rvm_config.h
    │   │   ├── rvm_squeak_config.h
    │   │   ├── safepoint.cpp
    │   │   ├── safepoint.h
    │   │   ├── safepoint_ability.cpp
    │   │   ├── safepoint_ability.h
    │   │   ├── safepoint_request_queue.cpp
    │   │   ├── safepoint_request_queue.h
    │   │   ├── scheduler_mutex.cpp
    │   │   ├── scheduler_mutex.h
    │   │   ├── semaphore_mutex.cpp
    │   │   ├── semaphore_mutex.h
    │   │   ├── squeak_adapters.cpp
    │   │   ├── squeak_adapters.h
    │   │   ├── timeout_deferral.cpp
    │   │   ├── timeout_deferral.h
    │   │   ├── timeout_timer.cpp
    │   │   ├── timeout_timer.h
    │   │   ├── tracked_ptr.h
    │   │   ├── tracked_ptr_registry.h
    │   │   ├── utils.cpp
    │   │   └── utils.h
    │   ├── tests/
    │   │   ├── buffered_channel.cpp
    │   │   ├── cacheline_alignment.cpp
    │   │   ├── external_primitive_table.cpp
    │   │   ├── main.cpp
    │   │   ├── os_interface.cpp
    │   │   ├── starter.cpp
    │   │   ├── starter.h
    │   │   ├── synced_queue.cpp
    │   │   ├── synced_queue_threaded.cpp
    │   │   ├── test_os_interface.h
    │   │   └── tracked_ptr.cpp
    │   └── types/
    │       └── types.h
    └── tests/
        ├── __init__.py
        └── test_startup.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# OS X
.DS_Store

# Xcode
xcuserdata
vm/RoarVM.xcodeproj/*.pbxuser
vm/RoarVM.xcodeproj/*.perspectivev3
*xcworkspace

# Build dir
vm/build/*.o
vm/build/*.opt
vm/build/Makefile
vm/build/config.last
vm/build/compiler_check
vm/build/rvm
vm/build/Debug/
vm/build/Release/
vm/build/RoarVM.build/
vm/build/libgtest.a
vm/build/rvm-test
vm/src/tests/*.o

# Unit tests
vm/_trial_temp/
*.pyc


================================================
FILE: .gitmodules
================================================
[submodule "vm/googletest"]
	path = vm/googletest
	url = git://github.com/smarr/googletest.git


================================================
FILE: INSTALL.rst
================================================
Installation and Usage Instructions for the RoarVM
==================================================

This file briefly describes how to compile and use the RoarVM.

Installation
------------

Requirements:

 - gcc, g++ (also tested with icc v11 on Linux)
 - Ubuntu: libx11-dev, libxext-dev
 - Mac OS X: Xcode Developer Tools

Compilation:

In the standard case, calling ./configure ; make in the build directory
should be sufficient to compile the rvm executable::

  $ cd build
  $ ./configure
  $ make

Compilation for Debugging::

  $ cd build
  $ ./configure --debug
  $ make

Known Issues:

The standard compiler on modern Linux systems is currently not fully
supported. Some of its optimizations lead to crashes in the RoarVM. Configure
supports a workaround which reduces the optimization level for affected files.
Until the bug in the RoarVM is fixed, please use::

  $ ./configure --opt-workaround

Usage
-----

The RoarVM executable supports the following command-line interface::

  ./rvm [options] <image-file> [app-params]
  
 [options]       optional command-line parameters as detailed below 
 <image-file>    a relative path to a Smalltalk image
 [app-params]    parameters given the application executed by the RoarVM

Command-line Parameters::

 -headless       initializes the RoarVM with a dummy display to avoid opening
                 an X11 session, useful for command-line applications or
                 benchmarks
               
 -num_core N     starts the RoarVM with N interpreter instances, each running
                 on a dedicated processor core
               
 -geom N,M       starts the RoarVM with N*M interpreter instances, each
                 running on a dedicated processor core. REMARK: this option is
                 meant for TILE64 processors, where the interpreter instances
                 are distributed on the 2D mesh of cores in an N*M layout

 -min_heap_MB N  sets the lower limit for the overall heap size
                 

Filing in RoarVM Changes
''''''''''''''''''''''''

To use your current image on top of the RoarVM, a few changes need to be
applied to the image.

  1. Chose the suitable support file from /image.st/
  2. Open you image (depending on the image, you need to use the SqueakVM)
  3. Open a file list in your image
  4. Pick the chosen support file and install it or file it in
  5. Acknowledge the change to the Process class by pressing proceed in the
     warning dialog window
  6. Save and quit the image
  7. Run RoarVM with a num_core setting > 1

Remark:

  The support for Squeak and Pharo has its limitations. Be aware that those
  Smalltalks have not been developed with hardware parallelism in mind. It is
  very likely that you will run into problems that are caused by the
  assumption that only a single Smalltalk Process is active at a time, and
  that the scheduler has certain properties like switching between processes
  only at known places.



================================================
FILE: README
================================================
This branch is used to prepare the code for integration into the RoarVM.
The RoarVM uses a slightly different directory structure and supports only
a subset of the standard platforms of the SqueakVMs.

See https://github.com/smarr/RoarVM/blob/master/README.rst for details.

================================================
FILE: README.rst
================================================
RoarVM - The Manycore SqueakVM
==============================

.. image:: https://github.com/smarr/RoarVM/raw/1591bb4e1c282f418231da77cf6d09ec31e2abe8/misc/RoarVM-logo-full.jpg
   :align: left

RoarVM, formerly known as the Renaissance Virtual Machine (RVM) is developed
as part of a IBM Research project to investigate programming paradigms and
languages for manycore systems of the future. Specifically, this VM is meant
to support manycore systems with more than 1000 cores in the future.

The RVM was open sourced by IBM Research under the `Eclipse Public License`_.
Please see the `open source announcement`_ for further information.

Today, the RoarVM supports the parallel execution of Smalltalk programs on x86
compatible multicore systems and Tilera TILE64-based manycore systems. It is
tested with standard Squeak 4.1 closure-enabled images, and with a stripped
down version of a MVC-based Squeak 3.9 image.

The RoarVM provides parallel execution of Smalltalk processes and thus, the
programming model is a typical shared-memory model similar to Java with its
threads and classical Pthreads for C/C++.

.. _Eclipse Public License:   http://www.eclipse.org/legal/epl-v10.html
.. _open source announcement: http://soft.vub.ac.be/~smarr/rvm-open-source-release/

Install and Use
---------------

Please see the INSTALL.rst file.

Features
--------

The RoarVM is compatible with Squeak and its forks. However, the Smalltalk
images needs a number of changes to enable it to utilize more than one core
and to interact with the VM correctly.

 - compatible with Squeak 4.1 and Pharo 1.2
 
   - the RoarVM has full closure support
   
 - Smalltalk processes are executed in parallel
 
 - tested with 8 cores, 16 hyperthreads on Intel systems

 - tested with 56 cores on Tilera TILE64/TILEPro64 processors
 
 - tested with Linux and Mac OS X 10.6

Purpose
-------

The source code of the RoarVM has been released as open source to enable the
Smalltalk community to evaluate the ideas and possibly integrate them into
their existing systems. The RoarVM provides the necessary functionality to
experiment with Smalltalk systems on multi- and manycore machines, which we
would like to encourage.

However, we also welcome all contributions to the RoarVM itself. Either to
bring it up to the speed of the existing VMs or to extend it for further
experiments.


Known Issues
------------

The RoarVM is a research project and is not as optimized for performance as
the standard Squeak VM. Thus, its sequential performance is slower. This is
due to the fact that the RoarVM misses optimizations like using the GCC label
as value extension to speed up the interpreter.

 - single core performance is slower than the Squeak VM
 
   * Squeak 4.2.4beta1U, MVC image, OS X
     554,844,390 bytecodes/sec; 12,213,718 sends/sec

   * RoarVM, MVC image, OS X, 1 core
     66,286,897 bytecodes/sec; 2,910,474 sends/sec
   
   * RoarVM, MVC image, OS X, 8 cores
     470,588,235 bytecodes/sec; 19,825,677 sends/sec
   
 - idle process does not yield when the RoarVM is run on more than one core

   - the event processing is not adapted fully yet, thus, the idle process
     is busy-waiting for performance reasons

   - will drain your battery, on mobile devices

 - Garbage collector is as simple as possible

   - it is neither concurrent nor parallel

   - performance can be problematic

 - Graphical subsystem based on X11

   - in contrast to todays Squeak VM, especially the OS X version,
     the RoarVM uses solely X11 and does not integrate as well into the OS
     as Squeak does

 - Stability should be ok, however, crashes can happen occasionally 


Technical Overview
------------------

The implementation details of the RoarVM are currently documented in:

  [1] Hosting an Object Heap on Manycore Hardware: An Exploration,
      by David Ungar, and Sam S. Adams, in Proceedings of the 5th Symposium on
      Dynamic Languages, ACM (2009), p. 99-110.
      http://portal.acm.org/citation.cfm?id=1640134.1640149
  
  As well as an VEE submission which is currently under review.
  
Furthermore, the design is based on the following earlier work:
  
  [2] Multiprocessor Smalltalk: A Case Study of a Multiprocessor-Based 
      Programming Environment
      by Joseph Pallas, and David Ungar, in Proceedings of the ACM SIGPLAN
      1988 Conference on Programming Language Design and Implementation,
      ACM (1988), p. 268-277.
      http://portal.acm.org/citation.cfm?id=54017

The RoarVM resembles the Squeak VM which is written in Smalltalk/Slang,
however, it is rewritten in C++ to facilitate the development on manycore
architectures. The C source code of for instance plugins to the Squeak VM has
been reused directly. This code is located in /src/from squeak/.

The support for x86 compatible multicore systems is currently based on POSIX
threads. Thus, the RoarVM can be started with a number of threads which are
executed on distinct processor cores. On Tilera TILE64-based systems, the iLib
library is used and for each processor core a separate processes is started
which executes an interpreter instance each. For both architectures, the VM
provides the illusion of a single object heap, spanning all of the cores, to
the Smalltalk user. Smalltalk processes are scheduled by a single scheduler on
the available processor cores, and thus, the processes can execute in
parallel. For synchronization, the standard Smalltalk mechanisms are
available. Semaphores as well as mutexes work as in classical systems.
Currently, the RoarVM uses a single central scheduler which is based on the
design of Pallas[2]. Its data structures are accessible from the image and
only require minimal modifications to the image, since the do not change the
general model of execution.

A distinct feature of the RoarVM is its use of an object table. It was
introduced to reduce the necessary complexity to enable object migration
between heaps on manycore architectures.

TODO: add some remarks on the heap structure

License
-------

Copyright (c) 2008 - 2010 IBM Corporation and others.
All rights reserved. This RoarVM and the accompanying materials are made
available under the terms of the Eclipse Public License v1.0 which accompanies
this distribution, and is available at:

  http://www.eclipse.org/legal/epl-v10.html

All parts directly taken over from the original Squeak source code are
licensed under their original licenses.

Credits
-------

Since the RoarVM is based on the work which has been done for Squeak, we would
like to acknowledge the Squeak community as a whole for its valuable work.

The RoarVM was designed and implemented as 'Renaissance VM' by
  David Ungar and Sam Adams at IBM Research.

It was ported to x86 compatible multicore systems by
  Stefan Marr at the Software Languages Lab, Vrije Universiteit Brussel.

Special thanks go to Max OrHai for designing our logo.



================================================
FILE: image.st/RVM-multicore-support.mvc.st
================================================
'******************************************************************************
 *  Copyright (c) 2008 - 2010 IBM Corporation and others.
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 * 
 *  Contributors:
 *    David Ungar, IBM Research - Initial Implementation
 *    Sam Adams, IBM Research - Initial Implementation
 *    Stefan Marr, Vrije Universiteit Brussel - Port to x86 Multi-Core Systems
 ******************************************************************************'!
DisplayText subclass: #Paragraph
	instanceVariableNames: 'clippingRectangle compositionRectangle destinationForm rule mask marginTabsLevel lines lastLine destFormSema'
	classVariableNames: ''
	poolDictionaries: 'TextConstants'
	category: 'ST80-Support'!
Link subclass: #Process
	instanceVariableNames: 'suspendedContext priority myList errorHandler name hostCore coreMask'
	classVariableNames: 'SemaForSuspensions'
	poolDictionaries: ''
	category: 'Kernel-Processes'!
Object subclass: #RVMPrimitives
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'RVM-Support'!
Object subclass: #ProcessorScheduler
	instanceVariableNames: 'quiescentProcessLists activeProcess'
	classVariableNames: 'BackgroundProcess EmergencyProcess HighIOPriority LowIOPriority SystemBackgroundPriority SystemRockBottomPriority TimingPriority UserBackgroundPriority UserInterruptPriority UserSchedulingPriority'
	poolDictionaries: ''
	category: 'Kernel-Processes'!
FileStream subclass: #StandardFileStream
	instanceVariableNames: 'name fileID buffer1 interlock'
	classVariableNames: 'Registry'
	poolDictionaries: ''
	category: 'System-Files'!
View subclass: #StandardSystemView
	instanceVariableNames: 'labelFrame labelText isLabelComplemented savedSubViews minimumSize maximumSize collapsedViewport expandedViewport labelBits windowBits bitsValid updatablePanes displayInterlock'
	classVariableNames: 'CacheBits LabelStyle'
	poolDictionaries: ''
	category: 'ST80-Support'!
Object subclass: #Mutex
	instanceVariableNames: 'semaphore owner'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'RVM-Support'!
!ProcessorScheduler methodsFor: 'accessing' stamp: 'dmu 11/25/2008 00:23'!
activePriority
	"Answer the priority level of the currently running Process."

	^self thisProcess priority! !
!ProcessorScheduler methodsFor: 'accessing' stamp: 'dmu 9/16/2010 14:53'!
preemptedProcess
	"Return the process that the currently active process just preempted."
	| list listWithoutMe |
	self thisProcess priority to: 1 by: -1 do:[:priority|
		list := quiescentProcessLists at: priority.
		"RVM keeps running processes on the lists -- dmu 9/16/10"
		listWithoutMe := list reject: [:p | p == Processor thisProcess].
		listWithoutMe isEmpty ifFalse:[^listWithoutMe last].
	].
	^nil

	"Processor preemptedProcess"! !
!ProcessorScheduler methodsFor: 'process state change' stamp: 'dmu 11/25/2008 00:23'!
terminateActive
	"Terminate the process that is currently running."

	self thisProcess terminate! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:39'!
areRunningProcessesInSchedulerLists
	"Our RVM follows Pallas' MS system and keeps runnable processes in the scheduler lists even when running."
	^RVMPrimitives isRVM! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 11/25/2008 00:26'!
isActive: aProcess
^ aProcess suspendedContext ==  nil! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:32'!
thisProcess
	^ RVMPrimitives thisProcess! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 3/22/2010 13:03'!
yieldIfFewerCoresThan: n
	RVMPrimitives coreCount < n    ifTrue: [self yield]! !
!Project class methodsFor: 'utilities' stamp: 'dmu 11/25/2008 00:24'!
spawnNewProcessAndTerminateOld: terminate

	self spawnNewProcess.
	terminate
		ifTrue: [Processor terminateActive]
		ifFalse: [Processor thisProcess suspend]! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/8/2010 23:41'!
breakpoint
	<primitive: 'primitiveBreakpoint' module: 'RVMPrimitives'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:02'!
printExecutionTrace
	<primitive: 'primitivePrintExecutionTrace' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:01'!
printOnConsole: aString
	"Prints a string onto the console"
	<primitive: 'primitivePrint' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:00'!
printStack
	"Prints Smalltalk stack to console"
	<primitive: 'primitivePrintStack' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:01'!
printVMStatistics
	<primitive: 'primitivePrintStats' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'dmu 6/8/2010 23:04'!
sampleRVM
	"Grab some data from the VM and return it"
	<primitive: 'primitiveSampleRVM' module: 'RVMPlugin'>
	"RVMPrimitives sampleRVM"
	^ nil! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'sm 10/27/2010 22:09'!
getMainRank
	"Get a sample from the VM and read out the main rank"
	| sample |
	sample := self sampleRVM.
	^ ((sample at: 6) at: 2) at: 6! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'dmu 6/8/2010 23:40'!
sampleSpecificData: flags
	"Grab some data from the VM and return it"
	"Bit offsets for flags; bit 0 is 1, bit 1 is 2, bit 2 is 4, etc.
	
	allCores, // 0
	runMask,
	messageNames,
	cpuCoreStats,
	allCoreStats,
	fence,

	millisecs, // 6
	cycles,
	messageStats,
	memorySystemStats,
    	interpreterStats,
    	objectTableStats,
    	interactionStats,

   	 coreCoords, // 14
    	sendTallies,
    	receiveTallies,
    	bufferedMessageStats,
    	receiveCycles,

    	// memory system
    	gcStats, // 19
    	heapStats,

    	// interpreter
    	bytecodes, // 20
    	yieldCount,
    	cycleCounts,
    	interruptChecks,
    	movedMutatedObjectStats,
    	mutexStats,
   	 interpreterLoopStats // 26"

	<primitive: 'primitiveSampleRVM' module: 'RVMPlugin'>
	^ nil! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:58'!
moveAllToReadMostlyHeaps
	"Move all objects into read-mostly heaps"
	<primitive: 'primitiveMoveAllToReadMostlyHeaps' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:55'!
shuffleToHeapsFrom: firstHeap to: lastHeap
	"Deal out all objects in the system into heaps from firstHeap through lastHeap in round-robin fashion so that adjacent objects wind up in different heaps"
	<primitive: 'primitiveShuffle' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:56'!
shuffleToHeapsFrom: firstHeap to: lastHeap movingReadWriteObjectsToReadMostlyHeap: rwToRM  movingReadMostlyObjectsToReadWriteHeap: rmToRw
	"Deal out all objects in the system into heaps from firstHeap through lastHeap in round-robin fashion so that adjacent objects wind up in different heaps"
	"If rwToRM, move objects in read/write heaps to read-mostly heaps."
	"If rmToRW, move objects in read-mostly heaps to read/write heaps."
	<primitive: 'primitiveShuffle' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:57'!
spreadToHeapsFrom: firstHeap to: lastHeap
	"Spread out all objects in the system into heaps from firstHeap through lastHeap so that each heap ends up about equally full."
	<primitive: 'primitiveSpread' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:57'!
spreadToHeapsFrom: firstHeap to: lastHeap movingReadWriteObjectsToReadMostlyHeap: rwToRM  movingReadMostlyObjectsToReadWriteHeap: rmToRw
	"Spread out all objects in the system into heaps from firstHeap through lastHeap so that each heap ends up about equally full."
	"If rwToRM, move objects in read/write heaps to read-mostly heaps."
	"If rmToRW, move objects in read-mostly heaps to read/write heaps."
	<primitive: 'primitiveSpread' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:30'!
for: anObject setRankTo: rank
	<primitive: 'primitiveSetCoordinatesFor' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:31'!
for: anObject setRankTo: rank isReadWrite: isRW
	<primitive: 'primitiveSetCoordinatesFor' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:17'!
getCoreOf: anObject
	"RVMPrimitives getCoreOf: 2@3"
	<primitive: 'primitiveGetCore' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:47'!
getMutabilityOf: anObject
	"Return true if argument is in a read/write heap, false if in read-mostly heap"
	<primitive: 'primitiveGetMutability' module: 'RVMPlugin'>
	^ true! !
!RVMPrimitives class methodsFor: 'enumerating a heap' stamp: 'dmu 6/8/2010 23:10'!
allObjectsInHeap: rank isReadWrite: trueForReadWriteFalseForReadMostly
	"return array of all objects in either read/write or read-mostly heap specified by rank and trueForReadWriteFalseForReadMostly"
	"RVMPrimitives allObjectsInHeap: 0 isReadWrite: true"
	<primitive: 'primitiveAllObjectsInHeap' module: 'RVMPlugin'>
	^ nil! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:18'!
getCoreIAmRunningOn
	"RVMPrimitives getCoreIAmRunningOn"
	<primitive: 'primitiveGetCoreIAmRunningOn' module: 'RVMPlugin' >
  	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:44'!
getRunMask
	"Return an integer with ones corresponding to cores RVM is allowed to use: 1 means core 0, 3 means cores 0 and 1, etc."
	"RVMPrimitives getRunMask printStringBase: 16"
	<primitive: 'primitiveRunMask' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/9/2010 00:07'!
getRunningProcessesByCore
	"Returns array of running processes, indexed by core (+1)"
	<primitive: 'primitiveRunningProcessByCore' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:46'!
setRunMask: anInteger
	"Sets run mask to argument and returns old run mask.
	Only cores set in run mask will be used to run Smalltalk processes."
	"RVMPrimitives setRunMask: 1"
	<primitive: 'primitiveRunMask' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/9/2010 00:04'!
thisProcess
	"Return the process that is running; RVM does not use ActiveProcess for this state, since many may be running"
	<primitive: 'primitiveThisProcess'  module: 'RVMPlugin'>
	^ Processor activeProcess! !
!RVMPrimitives class methodsFor: 'cores' stamp: 'dmu 6/8/2010 23:11'!
coreCount
  "RVMPrimitives coreCount"
  <primitive: 'primitiveCoreCount' module: 'RVMPlugin'>
  ^ 1! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:25'!
getCoreTrace
	"RVMPrimitives getCoreTrace"
	<primitive: 'primitiveTraceCores' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:26'!
getMutatedReplicatedObjectsTrace
	<primitive: 'primitiveTraceMutatedReplicatedObjects' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:22'!
startCoreTrace: size
	"RVMPrimitives startCoreTrace: 1000"
	<primitive: 'primitiveTraceCores' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:27'!
startMutatedReplicatedObjectsTrace: size
	<primitive: 'primitiveTraceMutatedReplicatedObjects' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'emergency evaluating' stamp: 'dmu 6/8/2010 23:19'!
getEmergencySemaphore
	"When you hit shift-control-a, the VM will signal the emergency semaphore, if it has been set to a semaphore"
	"RVMPrimitives getEmergencySemaphore"
	<primitive: 'primitiveEmergencySemaphore' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'emergency evaluating' stamp: 'dmu 6/9/2010 00:06'!
setEmergencySemaphore: aSema
	"When you hit shift-control-a, the VM will signal the emergency semaphore, if it has been set to a semaphore"
	"RVMPrimitives setEmergencySemaphore: Semaphore new"
	<primitive: 'primitiveEmergencySemaphore' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/14/2010 15:27'!
getExtraPreheaderWordOf: anObject
	"Returns the extra preheader word of the argument."
	"RVMPrimitives getExtraPreheaderWordOf: 3@4"
	<primitive: 'primitiveGetExtraPreheaderWord' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/14/2010 15:27'!
setExtraPreheaderWordOf: anObject to: newContents
	"Sets the extra preheader word of the first argument."
	"|n| n := 3@4.
	RVMPrimitives setExtraPreheaderWordOf: n to: 17.
	RVMPrimitives getExtraPreheaderWordOf: n"
	<primitive: 'primitiveSetExtraPreheaderWord' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/9/2010 00:05'!
setExtraWordSelector: aSelector
	"returns the old one"
	<primitive: 'primitiveSetExtraWordSelector' module: 'RVMPlugin'>
	^self primitiveFailed! !
!RVMPrimitives class methodsFor: 'testing' stamp: 'dmu 6/14/2010 15:36'!
isRVM
	"RVMPrimitives isRVM"
	^ (self getCoreOf: nil) ~= -1! !
!BlockContext methodsFor: 'scheduling' stamp: 'dmu 6/14/2010 16:14'!
valueAt: blockPriority 
	"Evaluate the receiver (block), with another priority as the actual one 
	and restore it afterwards. The caller should be careful with using 
	higher priorities."
	| activeProcess result outsidePriority |
	activeProcess := Processor thisProcess.
	outsidePriority := activeProcess priority.
	activeProcess priority: blockPriority.
	result := self
				ensure: [activeProcess priority: outsidePriority].
	"Yield after restoring lower priority to give the preempted processes a  
	chance to run."
	blockPriority > outsidePriority
		ifTrue: [Processor yield].
	^ result! !
!BlockContext methodsFor: 'private' stamp: 'dmu 11/25/2008 00:18'!
valueUnpreemptively
	"Evaluate the receiver (block), without the possibility of preemption by higher priority processes. Use this facility VERY sparingly!!"
	"Think about using Block>>valueUninterruptably first, and think about using Semaphore>>critical: before that, and think about redesigning your application even before that!! 
	After you've done all that thinking, go right ahead and use it..."
	| activeProcess oldPriority result |
	activeProcess := Processor thisProcess.
	oldPriority := activeProcess priority.
	activeProcess priority: Processor highestPriority.
	result := self ensure: [activeProcess priority: oldPriority].
	"Yield after restoring priority to give the preempted processes a chance to run"
	Processor yield.
	^result! !
!CPUWatcher methodsFor: 'process operations' stamp: 'dmu 11/25/2008 00:18'!
debugProcess: aProcess
	| uiPriority oldPriority |
	uiPriority := Processor thisProcess priority.
	aProcess priority >= uiPriority ifTrue: [
		oldPriority := ProcessBrowser setProcess: aProcess toPriority: uiPriority - 1
	].
	ProcessBrowser debugProcess: aProcess.! !
!ControlManager methodsFor: 'scheduling' stamp: 'dmu 11/25/2008 00:19'!
inActiveControllerProcess
	"Answer whether the active scheduling process is the actual active 
	process in the system."

	^activeControllerProcess == Processor thisProcess! !
!ControlManager methodsFor: 'scheduling' stamp: 'dmu 11/25/2008 00:19'!
resetActiveController
	"When saving a morphic project whose parent is mvc, we need to set this up first"

	activeController := nil.
	activeControllerProcess := Processor thisProcess.
! !
!ControlManager methodsFor: 'scheduling' stamp: 'dmu 11/25/2008 00:20'!
scheduleActiveNoTerminate: aController 
	"Make aController be the active controller. Presumably the process that 
	requested the new active controller wants to keep control to do more 
	activites before the new controller can take control. Therefore, do not 
	terminate the currently active process."

	self schedulePassive: aController.
	self scheduled: aController
		from: Processor thisProcess! !
!ControlManager methodsFor: 'scheduling' stamp: 'dmu 11/25/2008 00:20'!
searchForActiveController
	"Find a scheduled controller that wants control and give control to it. If 
	none wants control, then see if the System Menu has been requested."
	| aController |
	activeController := nil.
	activeControllerProcess := Processor thisProcess.
	self activeController: self nextActiveController.
	Processor terminateActive! !
!Cursor methodsFor: 'displaying' stamp: 'dmu 6/14/2010 16:15'!
showWhile: aBlock 
	"While evaluating the argument, aBlock, make the receiver be the cursor shape."
	"ar 2/2/2006: Only allow this if active process is ui process"
	| oldcursor |
	Processor thisProcess == Project uiProcess ifFalse:[^aBlock value].
	oldcursor := Sensor currentCursor.
	self show.
	^aBlock ensure: [oldcursor show]
! !
!Paragraph methodsFor: 'RVM' stamp: 'dmu 6/15/2010 11:36'!
destFormSema: s
	destFormSema := s! !
!Paragraph methodsFor: 'private' stamp: 'ssa 4/7/2009 12:39'!
displayOn: aDisplayMedium lines: lineInterval

	| saveDestinationForm |
	destFormSema isNil ifTrue:[self destFormSema: Semaphore forMutualExclusion].
	destFormSema critical: [
		saveDestinationForm _ destinationForm.
		self destinationForm: aDisplayMedium.
		self displayLines: lineInterval.
		destinationForm _ saveDestinationForm
	]! !
!Process methodsFor: 'accessing' stamp: 'ssa 2/17/2009 22:34'!
isActiveProcess

	^ Processor areRunningProcessesInSchedulerLists
		ifTrue: [ suspendedContext isNil and:[myList notNil]]
		ifFalse: [self == Processor activeProcess]! !
!Process methodsFor: 'changing process state' stamp: 'dmu 6/14/2010 16:16'!
run
	"Suspend current process and execute self instead"

	| proc |
	proc := Processor thisProcess.
	[	proc suspend.
		self resume.
	] forkAt: Processor highestPriority! !
!Process methodsFor: 'changing process state' stamp: 'dmu 3/24/2010 15:44'!
suspend
	"Stop the process that the receiver represents in such a way 
	that it can be restarted at a later time (by sending the receiver the 
	message resume). If the receiver represents the activeProcess, suspend it. 
	Otherwise remove the receiver from the list of waiting processes."
	self isActiveProcess ifTrue: [
		self nilMyListUnlessRVM.
		self primitiveSuspend.
	] ifFalse: [
		myList ifNotNil: [
			myList remove: self ifAbsent: [].
			myList := nil].
	]
! !
!Process methodsFor: 'changing process state' stamp: 'dmu 3/24/2010 15:45'!
terminate 
	"Stop the process that the receiver represents forever.  Unwind to execute pending ensure:/ifCurtailed: blocks before terminating."

	| ctxt unwindBlock |
	self == Processor thisProcess  ifTrue: [
		ctxt := thisContext.
		[	ctxt := ctxt findNextUnwindContextUpTo: nil.
			ctxt isNil
		] whileFalse: [
			unwindBlock := ctxt tempAt: 1.
			unwindBlock ifNotNil: [
				ctxt tempAt: 1 put: nil.
				thisContext terminateTo: ctxt.
				unwindBlock value].
		].
		thisContext terminateTo: nil.
		self nilMyListUnlessRVM.
		self primitiveSuspend.
	] ifFalse: [
	        self suspend.
		myList ifNotNil: [
			myList remove: self ifAbsent: [].
			myList := nil].
		suspendedContext ifNotNil: [
			ctxt := self popTo: suspendedContext bottomContext.
			ctxt == suspendedContext bottomContext ifFalse: [
				self debug: ctxt title: 'Unwind error during termination']].
	].
! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:05'!
activateReturn: aContext value: value
	"Activate 'aContext return: value', so execution will return to aContext's sender"
	self suspend.
	^ suspendedContext := suspendedContext activateReturn: aContext value: value! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:01'!
complete: aContext 
	"Run self until aContext is popped or an unhandled error is raised.  Return self's new top context, unless an unhandled error was raised then return the signaler context (rather than open a debugger)."
	
	| ctxt pair error |
	self suspend.
	ctxt := suspendedContext.
	suspendedContext := nil.  "disable this process while running its stack in active process below"
	pair := ctxt runUntilErrorOrReturnFrom: aContext.
	suspendedContext := pair first.
	error := pair second.
	error ifNotNil: [^ error signalerContext].
	^ suspendedContext! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 6/14/2010 16:06'!
install: aContext 
	"Replace the suspendedContext with aContext."

	(Processor isActive: self)
		ifTrue: [^self error: 'An active process cannot install contexts'].
	suspendedContext := aContext! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 6/14/2010 16:07'!
popTo: aContext 
	"Pop self down to aContext by remote returning from aContext's callee.  Unwind blocks will be executed on the way.
	This is done by pushing a new context on top which executes 'aContext callee return' then resuming self until aContext is reached.  This way any errors raised in an unwind block will get handled by senders in self and not by senders in the activeProcess.
	If an unwind block raises an error that is not handled then the popping stops at the error and the signalling context is returned, othewise aContext is returned."

	| callee |
	(Processor isActive: self)
		ifTrue: [^ self error: 'An active process cannot pop contexts'].
	callee := (self calleeOf: aContext) ifNil: [^ aContext].  "aContext is on top"
	^ self return: callee value: callee receiver! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 6/14/2010 16:08'!
popTo: aContext value: aValue
	"Replace the suspendedContext with aContext, releasing all contexts 
	between the currently suspendedContext and it."

	| callee |
	(Processor isActive: self)
		ifTrue: [^ self error: 'An active process cannot pop contexts'].
	callee := (self calleeOf: aContext) ifNil: [^ self].  "aContext is on top"
	self return: callee value: aValue! !
!Process class methodsFor: 'accessing' stamp: 'ssa 3/25/2010 15:11'!
semaForSuspensions

	SemaForSuspensions isNil ifTrue:[SemaForSuspensions := Semaphore forMutualExclusion].
	^SemaForSuspensions! !
!Process methodsFor: 'debugging' stamp: 'dmu 9/17/2010 12:03'!
debug: context title: title full: bool
	"Open debugger on self with context shown on top"

	| topCtxt |
	topCtxt :=  self == Processor thisProcess  ifTrue: [thisContext] 
		ifFalse: [
			self suspend.  
			self suspendedContextWaitingIfNecessary].
	(topCtxt hasContext: context) ifFalse: [^ self error: 'context not in process'].

		Transcript cr; show: 'launching debugger'.
	Debugger openOn: self context: context label: title contents: nil fullView: bool.
! !
!Process methodsFor: 'debugging' stamp: 'dmu 9/17/2010 12:03'!
debugWithTitle: title
	"Open debugger on self"

	| context |
	context := self == Processor thisProcess  ifTrue: [thisContext] ifFalse: [ self suspend.  self suspendedContextWaitingIfNecessary].
	self debug: context title: title full: true.
! !
!Process methodsFor: 'signaling' stamp: 'ssa 2/17/2009 22:31'!
pvtSignal: anException list: aList
	"Private. This method is used to signal an exception from another
	process...the receiver must be the active process.  If the receiver 
	was previously waiting on a Semaphore, then return the process
	to the waiting state after signaling the exception and if the Semaphore
	has not been signaled in the interim"

	"Since this method is not called in a normal way, we need to take care
	that it doesn't directly return to the caller (because I believe that could
	have the potential to push an unwanted object on the caller's stack)."

	| blocker |
	self == Processor thisProcess ifFalse: [^self].
	self suspend.
	anException signal.
	blocker := Semaphore new.
	[self suspend.
	suspendedContext := suspendedContext swapSender: nil.
	aList class == Semaphore 
		ifTrue:
			[aList isSignaled
				ifTrue: 
					[aList wait.  "Consume the signal that would have restarted the receiver"
					self resume]
				ifFalse:
					["Add us back to the Semaphore's list (and remain blocked)"
					myList := aList.
					aList add: self]]
		ifFalse: [self resume]] fork.
	blocker wait.


! !
!Process methodsFor: 'signaling' stamp: 'dmu 6/14/2010 16:11'!
signalException: anException
	"Signal an exception in the receiver process...if the receiver is currently
	suspended, the exception will get signaled when the receiver is resumed.  If 
	the receiver is blocked on a Semaphore, it will be immediately re-awakened
	and the exception will be signaled; if the exception is resumed, then the receiver
	will return to a blocked state unless the blocking Semaphore has excess signals"
	| oldList |
	"If we are the active process, go ahead and signal the exception"
	self == Processor thisProcess  ifTrue: [^anException signal].

	"Suspend myself first to ensure that I won't run away in the
	midst of the following modifications."
	myList ifNotNil:[oldList := self suspend].

	"Add a new method context to the stack that will signal the exception"
	suspendedContext := MethodContext
		sender: suspendedContext
		receiver: self
		method: (self class lookupSelector: #pvtSignal:list:)
		arguments: (Array with: anException with: oldList).

	"If we are on a list to run, then suspend and restart the receiver 
	(this lets the receiver run if it is currently blocked on a semaphore).  If
	we are not on a list to be run (i.e. this process is suspended), then when the
	process is resumed, it will signal the exception"

	oldList ifNotNil: [self resume].
! !
!Process methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:40'!
coreMask
	^ coreMask! !
!Process methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:40'!
coreMask: m
	coreMask := m! !
!Process methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:41'!
hostCore
	^ hostCore! !
!Process methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:31'!
isRunning
	Processor thisProcess == self ifTrue: [^ true].
	self isActiveProcess ifTrue: [^ true].
	myList ifNil: [^ false].
	^ myList class ~~ Semaphore! !
!Process methodsFor: 'RVM' stamp: 'ssa 3/2/2010 18:23'!
nilMyListUnlessRVM
	Processor areRunningProcessesInSchedulerLists ifFalse: [
		"primitiveSuspend will use myList to remove from list and will nil it out"
		myList := nil.
	]! !
!ProcessBrowser methodsFor: 'stack list' stamp: 'dmu 6/14/2010 16:17'!
updateStackList: depth 
	| suspendedContext oldHighlight |
	selectedProcess
		ifNil: [^ self changeStackListTo: nil].
	(stackList notNil and: [ stackListIndex > 0 ])
		ifTrue: [oldHighlight := stackList at: stackListIndex].
	selectedProcess == Processor thisProcess
		ifTrue: [self
				changeStackListTo: (thisContext stackOfSize: depth)]
		ifFalse: [suspendedContext := selectedProcess suspendedContext.
			suspendedContext
				ifNil: [self changeStackListTo: nil]
				ifNotNil: [self
						changeStackListTo: (suspendedContext stackOfSize: depth)]].
	self
		stackListIndex: (stackList
				ifNil: [0]
				ifNotNil: [stackList indexOf: oldHighlight])! !
!ProcessBrowser class methodsFor: 'process control' stamp: 'ssa 6/11/2010 14:35'!
nameAndRulesFor: aProcess 
	"Answer a nickname and two flags: allow-stop, and allow-debug"
	^ [aProcess caseOf: {
		[ProcessorScheduler emergencyProcess] -> [{'emergency evaluator ShftCtrl-A'. false. true}].
		[] -> [{'no process'. false. false}].
		[Smalltalk lowSpaceWatcherProcess] -> [{'the low space watcher'. false. false}].
		[WeakArray runningFinalizationProcess] -> [{'the WeakArray finalization process'. false. false}].
		[Processor thisProcess] -> [{'the UI process'. false. true}].
		[Processor backgroundProcess] -> [{'the idle process'. false. false}].
		[Sensor interruptWatcherProcess] -> [{'the user interrupt watcher'. false. false}].
		[Sensor eventTicklerProcess] -> [{'the event tickler'. false. false}].
		[Project uiProcess] -> [{'the inactive Morphic UI process'. false. false}].
		[Smalltalk
			at: #SoundPlayer
			ifPresent: [:sp | sp playerProcess]] -> [{'the Sound Player'. false. false}].
		[ScheduledControllers
			ifNotNil: [ScheduledControllers activeControllerProcess]] -> [{'the inactive MVC controller process'. false. true}].
		[Smalltalk
			at: #CPUWatcher
			ifPresent: [:cw | cw currentWatcherProcess]] -> [{'the CPUWatcher'. false. false}]}
		 otherwise: 
			[(aProcess priority = Processor timingPriority
					and: [aProcess suspendedContext receiver == Delay])
				ifTrue: [{'the timer interrupt watcher'. false. false}]
				ifFalse: [{aProcess suspendedContext asString. true. true}]]]
		ifError: [:err :rcvr | {aProcess suspendedContext asString. true. true}]! !
!Paragraph reorganize!
('accessing' backgroundColor clippingRectangle clippingRectangle: compositionRectangle compositionRectangle: destinationForm fillColor fillColor: height indentationOfLineIndex:ifBlank: mask numberOfLines replaceFrom:to:with:displaying: rule rule: stringAtLineNumber: text:)
('alignment' centered justified leftFlush rightFlush toggleAlignment)
('character location' characterBlockAtPoint: characterBlockForIndex: defaultCharacterBlock)
('composition' composeAll wrappingBox:clippingBox:)
('converting' asForm asString asText)
('display box access' boundingBox computeBoundingBox)
('displaying' displayOn: displayOn:at: displayOn:at:clippingBox:rule:fillColor: displayOn:transformation:clippingBox:align:with:rule:fillColor:)
('indicating' flash outline)
('scrolling' scrollBy: scrollBy:withSelectionFrom:to: scrollDelta scrollUncheckedBy:withSelectionFrom:to:)
('selecting' caretFormForDepth: clickAt:for:controller: extendSelectionAt:endBlock: extendSelectionMark:pointBlock: hiliteRect: mouseMovedFrom:pivotBlock:showingCaret: mouseSelect mouseSelect: reverseFrom:to: selectionRectsFrom:to:)
('utilities' clearVisibleRectangle deepCopy destinationForm: fit lines: visibleRectangle)
('RVM' destFormSema:)
('private' bottomAtLineIndex: compositionRectangle:text:style:offset: compositionRectangleDelta displayLines: displayLines:affectedRectangle: displayOn:lines: leftMarginForCompositionForLine: leftMarginForDisplayForLine:alignment: lineAt:put: lineIndexOfCharacterIndex: lineIndexOfTop: lines moveBy: rightMarginForComposition rightMarginForDisplay setWithText:style: setWithText:style:compositionRectangle:clippingRectangle: setWithText:style:compositionRectangle:clippingRectangle:foreColor:backColor: topAtLineIndex: topAtLineIndex:using:and: trimLinesTo: updateCompositionHeight withClippingRectangle:do:)
!

!BitBlt methodsFor: 'accessing' stamp: 'dmu 4/4/2009 00:24'!
copyBitsOnMain
	"Primitive. Perform the movement of bits from the source form to the 
	destination form. Fail if any variables are not of the right type (Integer, 
	Float, or Form) or if the combination rule is not implemented. 
	In addition to the original 16 combination rules, this BitBlt supports
	16	fail (to simulate paint)
	17	fail (to simulate mask)
	18	sourceWord + destinationWord
	19	sourceWord - destinationWord
	20	rgbAdd: sourceWord with: destinationWord
	21	rgbSub: sourceWord with: destinationWord
	22	rgbDiff: sourceWord with: destinationWord
	23	tallyIntoMap: destinationWord
	24	alphaBlend: sourceWord with: destinationWord
	25	pixPaint: sourceWord with: destinationWord
	26	pixMask: sourceWord with: destinationWord
	27	rgbMax: sourceWord with: destinationWord
	28	rgbMin: sourceWord with: destinationWord
	29	rgbMin: sourceWord bitInvert32 with: destinationWord
"
	<primitive: 'primitiveCopyBits' module: 'BitBltPlugin'>

	"Check for compressed source, destination or halftone forms"
	(combinationRule >= 30 and: [combinationRule <= 31]) ifTrue:
		["No alpha specified -- re-run with alpha = 1.0"
		^ self copyBitsTranslucent: 255].
	((sourceForm isForm) and: [sourceForm unhibernate])
		ifTrue: [^ self copyBits].
	((destForm isForm) and: [destForm unhibernate])
		ifTrue: [^ self copyBits].
	((halftoneForm isForm) and: [halftoneForm unhibernate])
		ifTrue: [^ self copyBits].

	"Check for unimplmented rules"
	combinationRule = Form oldPaint ifTrue: [^ self paintBits].
	combinationRule = Form oldErase1bitShape ifTrue: [^ self eraseBits].

	"Check if BitBlt doesn't support full color maps"
	(colorMap notNil and:[colorMap isColormap]) ifTrue:[
		colorMap _ colorMap colors.
		^self copyBits].
	"Check if clipping gots us way out of range"
	self clipRange ifTrue:[^self copyBits].

	self error: 'Bad BitBlt arg (Fraction?); proceed to convert.'.
	"Convert all numeric parameters to integers and try again."
	destX _ destX asInteger.
	destY _ destY asInteger.
	width _ width asInteger.
	height _ height asInteger.
	sourceX _ sourceX asInteger.
	sourceY _ sourceY asInteger.
	clipX _ clipX asInteger.
	clipY _ clipY asInteger.
	clipWidth _ clipWidth asInteger.
	clipHeight _ clipHeight asInteger.
	^ self copyBitsAgain! !
!BitBlt methodsFor: 'copying' stamp: 'dmu 4/4/2009 00:20'!
copyBitsLocally
	"Primitive. Perform the movement of bits from the source form to the 
	destination form. Fail if any variables are not of the right type (Integer, 
	Float, or Form) or if the combination rule is not implemented. 
	In addition to the original 16 combination rules, this BitBlt supports
	16	fail (to simulate paint)
	17	fail (to simulate mask)
	18	sourceWord + destinationWord
	19	sourceWord - destinationWord
	20	rgbAdd: sourceWord with: destinationWord
	21	rgbSub: sourceWord with: destinationWord
	22	rgbDiff: sourceWord with: destinationWord
	23	tallyIntoMap: destinationWord
	24	alphaBlend: sourceWord with: destinationWord
	25	pixPaint: sourceWord with: destinationWord
	26	pixMask: sourceWord with: destinationWord
	27	rgbMax: sourceWord with: destinationWord
	28	rgbMin: sourceWord with: destinationWord
	29	rgbMin: sourceWord bitInvert32 with: destinationWord
"
	<primitive: 'primitiveCopyBitsLocally'>

	"Check for compressed source, destination or halftone forms"
	(combinationRule >= 30 and: [combinationRule <= 31]) ifTrue:
		["No alpha specified -- re-run with alpha = 1.0"
		^ self copyBitsTranslucent: 255].
	((sourceForm isForm) and: [sourceForm unhibernate])
		ifTrue: [^ self copyBits].
	((destForm isForm) and: [destForm unhibernate])
		ifTrue: [^ self copyBits].
	((halftoneForm isForm) and: [halftoneForm unhibernate])
		ifTrue: [^ self copyBits].

	"Check for unimplmented rules"
	combinationRule = Form oldPaint ifTrue: [^ self paintBits].
	combinationRule = Form oldErase1bitShape ifTrue: [^ self eraseBits].

	"Check if BitBlt doesn't support full color maps"
	(colorMap notNil and:[colorMap isColormap]) ifTrue:[
		colorMap _ colorMap colors.
		^self copyBits].
	"Check if clipping gots us way out of range"
	self clipRange ifTrue:[^self copyBits].

	self error: 'Bad BitBlt arg (Fraction?); proceed to convert.'.
	"Convert all numeric parameters to integers and try again."
	destX _ destX asInteger.
	destY _ destY asInteger.
	width _ width asInteger.
	height _ height asInteger.
	sourceX _ sourceX asInteger.
	sourceY _ sourceY asInteger.
	clipX _ clipX asInteger.
	clipY _ clipY asInteger.
	clipWidth _ clipWidth asInteger.
	clipHeight _ clipHeight asInteger.
	^ self copyBitsAgain! !
!BitBlt methodsFor: 'line drawing' stamp: 'dmu 4/3/2009 23:01'!
drawLoopLocallyX: xDelta Y: yDelta 
	"Primitive. Implements the Bresenham plotting algorithm (IBM Systems
	Journal, Vol. 4 No. 1, 1965). It chooses a principal direction, and
	maintains a potential, P. When P's sign changes, it is time to move in
	the minor direction as well. This particular version does not write the
	first and last points, so that these can be called for as needed in client code.
	Optional. See Object documentation whatIsAPrimitive."
	| |
	<primitive: 'primitiveDrawLoopLocally'>
self primitiveFailed! !
!BitBlt methodsFor: 'line drawing' stamp: 'ssa 4/3/2009 22:36'!
globalDrawLoopX: xDelta Y: yDelta 
	"Primitive. Implements the Bresenham plotting algorithm (IBM Systems
	Journal, Vol. 4 No. 1, 1965). It chooses a principal direction, and
	maintains a potential, P. When P's sign changes, it is time to move in
	the minor direction as well. This particular version does not write the
	first and last points, so that these can be called for as needed in client code.
	Optional. See Object documentation whatIsAPrimitive."
	| dx dy px py P |
	<primitive: 'primitiveDrawLoop' module: 'BitBltPlugin'>
	dx _ xDelta sign.
	dy _ yDelta sign.
	px _ yDelta abs.
	py _ xDelta abs.
	"self copyBits."
	py > px
		ifTrue: 
			["more horizontal"
			P _ py // 2.
			1 to: py do: 
				[:i |
				destX _ destX + dx.
				(P _ P - px) < 0 ifTrue: 
						[destY _ destY + dy.
						P _ P + py].
				i < py ifTrue: [self copyBits]]]
		ifFalse: 
			["more vertical"
			P _ px // 2.
			1 to: px do:
				[:i |
				destY _ destY + dy.
				(P _ P - py) < 0 ifTrue: 
						[destX _ destX + dx.
						P _ P + px].
				i < px ifTrue: [self copyBits]]]! !
!BitBlt methodsFor: 'line drawing' stamp: 'ssa 4/3/2009 22:52'!
localDrawLoopX: xDelta Y: yDelta 
	"Primitive"
	<primitive: 'primitiveDrawLoopLocally'>
	^self primitiveFailed! !
!ControlManager methodsFor: 'accessing' stamp: 'ssa 3/25/2010 16:14'!
activeControllerNoTerminate: aController andProcess: aProcess
	"Set aController to be the currently active controller and aProcess to be 
	the process that handles controller scheduling activities in the 
	system. This message differs from activeController:andProcess: in that it 
	does not send controlTerminate to the currently active controller."

	self inActiveControllerProcess
		ifTrue: 
			[aController~~nil
				ifTrue: [(scheduledControllers includes: aController)
							ifTrue: [self promote: aController]
							ifFalse: [self error: 'Old controller not scheduled']].
			activeController _ aController.
			activeController == nil
				ifFalse: [activeController controlInitialize].
			activeControllerProcess _ aProcess.
			activeControllerProcess resume]
		ifFalse: 
			['New active controller process must be set from old one, resetting...' print.
			self reset.
			] ! !
!ControlManager methodsFor: 'scheduling' stamp: 'ssa 3/2/2010 14:12'!
interruptName: labelString
	"Create a Notifier on the active scheduling process with the given label. Make the Notifier the active controller."
	| suspendingList newActiveController |
	(suspendingList _ activeControllerProcess suspendingList) == nil
		ifTrue: [activeControllerProcess == Processor thisProcess
					ifTrue: [activeControllerProcess suspend]]
		ifFalse: [suspendingList remove: activeControllerProcess ifAbsent:[].
				activeControllerProcess offList].

	activeController ~~ nil ifTrue: [
		"Carefully de-emphasis the current window."
		activeController view topView deEmphasizeForDebugger].

	newActiveController _
		(Debugger
			openInterrupt: labelString 
			onProcess: activeControllerProcess) controller.
	newActiveController centerCursorInView.
	self activeController: newActiveController.
! !
!ControlManager methodsFor: 'scheduling' stamp: 'ssa 3/25/2010 16:17'!
reset
	"ssa - reset the window controller process"
	| newProcess |
	newProcess := [ScheduledControllers resetActiveController.
			ScheduledControllers searchForActiveController] fixTemps newProcess priority: Processor userSchedulingPriority.
	newProcess resume.
	"lose the current process"
	"Processor terminateActive"! !
!Controller methodsFor: 'basic control sequence' stamp: 'dmu 3/22/2010 14:25'!
interActivityPause
	"if we are looping quickly, insert a short delay.  Thus if we are just doing UI stuff, we won't take up much CPU"
	| currentTime wait |
	[RVMPrimitives isRVM ifTrue: [Processor yield. ^ self].].
	MinActivityLapse ifNotNil: [
		lastActivityTime ifNotNil: [ 
			currentTime _ Time millisecondClockValue.
			wait _ lastActivityTime + MinActivityLapse - currentTime.
			wait > 0 ifTrue: [ 
				wait <= MinActivityLapse  "big waits happen after a snapshot"
					ifTrue: [DisplayScreen checkForNewScreenSize.
							"(Delay forMilliseconds: wait) wait "]. ]. ]. ].

	lastActivityTime _ Time millisecondClockValue.! !

!EventSensor methodsFor: 'accessing' stamp: 'ssa 12/17/2009 12:30'!
nextEvent
	"Return the next event from the receiver."
	eventQueue == nil 
		ifTrue:[^self nextEventSynthesized]
		ifFalse:[^self nextEventFromQueue]
! !
!EventSensor methodsFor: 'initialize' stamp: 'nk 6/21/2004 10:42'!
startUp
	"Run the I/O process"
	self initialize.
	self primSetInputSemaphore: (Smalltalk registerExternalObject: inputSemaphore).
	super startUp.
	self installEventTickler.
	Smalltalk isMorphic ifTrue:[self flushAllButDandDEvents].

	"Attempt to discover whether the input semaphore is actually being signaled."
	hasInputSemaphore := false.
	inputSemaphore initSignals.
! !

!EventSensor methodsFor: 'private' stamp: 'ssa 12/17/2009 14:18'!
flushNonKbdEvents
	eventQueue ifNil: [^ self].
	[^self]value.   "don't flush so we don't lose events"
	eventQueue flushAllSuchThat:
		[:buf | (self isKbdEvent: buf) not]
! !
!EventSensor methodsFor: 'private' stamp: 'ar 2/6/2004 14:42'!
nextEventFromQueue
	"Return the next event from the receiver."
	eventQueue isEmpty ifTrue:[self fetchMoreEvents].
	eventQueue isEmpty
		ifTrue:[^nil]
		ifFalse:[^eventQueue next]! !
!EventSensor methodsFor: 'private' stamp: 'nk 3/17/2004 07:09'!
nextEventSynthesized
	"Return a synthesized event. This method is called if an event driven client wants to receive events but the primary user interface is not event-driven (e.g., the receiver does not have an event queue but only updates its state). This can, for instance, happen if a Morphic World is run in an MVC window. To simplify the clients work this method will always return all available keyboard events first, and then (repeatedly) the mouse events. Since mouse events come last, the client can assume that after one mouse event has been received there are no more to come. Note that it is impossible for EventSensor to determine if a mouse event has been issued before so the client must be aware of the possible problem of getting repeatedly the same mouse events. See HandMorph>>processEvents for an example on how to deal with this."
	| kbd array buttons pos modifiers mapped |
	"First check for keyboard"
	array _ Array new: 8.
	kbd _ self primKbdNext.
	kbd ifNotNil:
		["simulate keyboard event"
		array at: 1 put: EventTypeKeyboard. "evt type"
		array at: 2 put: Time millisecondClockValue. "time stamp"
		array at: 3 put: (kbd bitAnd: 255). "char code"
		array at: 4 put: EventKeyChar. "key press/release"
		array at: 5 put: (kbd bitShift: -8). "modifier keys"
		^ array].

	"Then check for mouse"
	pos _ self primMousePt.
	buttons _ mouseButtons.
	modifiers _ buttons bitShift: -3.
	buttons _ buttons bitAnd: 7.
	mapped _ self mapButtons: buttons modifiers: modifiers.
	array 
		at: 1 put: EventTypeMouse;
		at: 2 put: Time millisecondClockValue;
		at: 3 put: pos x;
		at: 4 put: pos y;
		at: 5 put: mapped;
		at: 6 put: modifiers.
	^ array

! !
!EventSensor methodsFor: 'private' stamp: 'ssa 12/16/2009 13:26'!
primMouseButtons

	self fetchMoreEvents.
	self flushNonKbdEvents.
	^ mouseButtons
! !
!EventSensor methodsFor: 'private' stamp: 'ssa 12/16/2009 13:26'!
primMousePt

	self fetchMoreEvents.
	self flushNonKbdEvents.
	^ mousePosition
! !

!EventSensor methodsFor: 'private-I/O' stamp: 'ssa 12/17/2009 12:46'!
processEvent: evt 
	"Process a single event. This method is run at high priority."
	| type |
	type := evt at: 1.
	"Tackle mouse events first"
	type = EventTypeMouse
		ifTrue: [evt
				at: 5
				put: (ButtonDecodeTable at: (evt at: 5)
							+ 1). 
				self queueEvent: evt.
				self processMouseEvent: evt . 
				^self].
	
	"Store the event in the queue if there's any"
	type = EventTypeKeyboard
		ifTrue: [ "Check if the event is a user interrupt"
			((evt at: 4) = 0
				and: [((evt at: 3)
						bitOr: (((evt at: 5)
							bitAnd: 8)
							bitShift: 8))
							= interruptKey])
					ifTrue: ["interrupt key is meta - not reported as event"
							^ interruptSemaphore signal].
			"Else swap ctrl/alt keys if neeeded.wi"
			KeyDecodeTable
				at: {evt at: 3. evt at: 5}
				ifPresent: [:a | evt at: 3 put: a first;
						 at: 5 put: a second]. 
			self queueEvent: evt. 
			self processKeyboardEvent: evt . 
			^self ].
				
	"Handle all events other than Keyborad or Mouse."
	self queueEvent: evt.
	! !
!EventSensor methodsFor: 'private-I/O' stamp: 'ssa 12/16/2009 13:12'!
processKeyboardEvent: evt
	"process a keyboard event, updating InputSensor state"
	| charCode pressCode |
	"Never update keyboardBuffer if we have an eventQueue active"
	mouseButtons _ (mouseButtons bitAnd: 7) bitOr: ((evt at: 5) bitShift: 3).
	eventQueue ifNotNil:[^self]. 
	charCode _ evt at: 3.
	charCode = nil ifTrue:[^self]. "extra characters not handled in MVC"
	pressCode _ evt at: 4.
	pressCode = EventKeyChar ifFalse:[^self]. "key down/up not handled in MVC"
	"mix in modifiers"
	charCode _ charCode bitOr: ((evt at: 5) bitShift: 8).
	keyboardBuffer nextPut: charCode .! !
!BlockContext methodsFor: 'scheduling' stamp: 'dmu 4/7/2009 02:38'!
forkOn: aCore
	"Create and schedule a Process running the code in the receiver."

	^ self newProcess resumeOn: aCore! !
!BlockContext methodsFor: 'scheduling' stamp: 'ssa 4/8/2009 20:09'!
forkOn: aCore with: anObject
	"Create and schedule a Process running the code in the receiver."

	^ (self newProcessWith: anObject) resumeOn: aCore! !
!BlockContext methodsFor: 'scheduling' stamp: 'ssa 4/8/2009 20:08'!
forkOn: aCore with: anObject at: aPriority
	"Create and schedule a Process running the code in the receiver."

	| proc |
	proc _ self newProcessWith: anObject.
	proc priority: aPriority.
	^proc resumeOn: aCore! !
!BlockContext methodsFor: 'scheduling' stamp: 'dmu 4/7/2009 02:34'!
forkWith: anObject
	"Create and schedule a Process running the code in the receiver."

	^ (self newProcessWith: anObject) resume! !
!BlockContext methodsFor: 'scheduling' stamp: 'dmu 4/7/2009 02:33'!
newProcessWith: anObject
	"Answer a Process running the code in the receiver. The process is not 
	scheduled."
	<primitive: 19> "Simulation guard"
	^Process
		forContext: 
			[self value: anObject.
			Processor terminateActive]
		priority: Processor activePriority! !
!Delay class methodsFor: 'snapshotting' stamp: 'dmu 5/25/2010 11:02'!
startUp
	"Restart active delay, if any, when resuming a snapshot."

	self restoreResumptionTimes.
	ActiveDelay == nil ifFalse: [ActiveDelay activate].
	AccessProtect _ Semaphore forMutualExclusion
! !

!Process methodsFor: 'accessing' stamp: 'dmu 3/8/2010 20:26'!
hostCore: anObject
	"Set the value of hostCore"

	hostCore _ anObject! !
!Process methodsFor: 'accessing' stamp: 'dmu 3/8/2010 20:26'!
myList
	"Answer the value of myList"

	myList isNil ifTrue:[self myList: nil].
	^ myList! !
!Process methodsFor: 'accessing' stamp: 'dmu 3/8/2010 20:26'!
myList: anObject
	"Set the value of myList"

	myList _ anObject! !
!Process methodsFor: 'changing process state' stamp: 'dmu 3/2/2010 17:02'!
primitiveSuspend
	"Primitive. Stop the process that self represents in such a way 
	that it can be restarted at a later time (by sending #resume).
	ASSUMES self is the active process.
	Essential. See Object documentation whatIsAPrimitive."

	"Debugging code below causes terminated running processes to seem not terminated. -- dmu 3/2/10"
	"(myList isNil and: [RVMPrimitives isRVM]) ifTrue:[self halt]."
	<primitive: 88>
	self primitiveFailed! !
!Process methodsFor: 'changing process state' stamp: 'dmu 3/24/2010 15:44'!
resume
	"Allow the process that the receiver represents to continue. Put  
	the receiver in line to become the activeProcess. Check for a nil 
	suspendedContext, which indicates a previously terminated Process that 
	would cause a vm crash if the resume attempt were permitted"
	suspendedContext ifNil: [^ self primitiveFailed].
	^ self primitiveResume! !
!Process methodsFor: 'changing process state' stamp: 'dmu 4/7/2009 02:41'!
resumeOn: aCore
  self useOnlyCore: aCore.
  self resume! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:04'!
return: aContext value: value
	"Pop thread down to aContext's sender.  Execute any unwind blocks on the way.  See #popTo: comment and #runUntilErrorOrReturnFrom: for more details."
        self suspend.
	suspendedContext == aContext ifTrue: [
		^ suspendedContext _ aContext return: value from: aContext].
	self activateReturn: aContext value: value.
	^ self complete: aContext.
! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:03'!
step
         self suspend.
	^ suspendedContext _ suspendedContext step! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:04'!
stepToCallee
	"Step until top context changes"

	| ctxt |
	self suspend.
	ctxt _ suspendedContext.
	[ctxt == suspendedContext] whileTrue: [
		suspendedContext _ suspendedContext step].
	^ suspendedContext! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:05'!
stepToSendOrReturn
self suspend.
	^ suspendedContext _ suspendedContext stepToSendOrReturn! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 02:57'!
avoidCore: anIndex
	"Force this process to avoid this core (0-55)"
	self coreMask: (self coreMask bitClear: (1 bitShift: anIndex))! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 03:49'!
avoidCores: aCollectionOfIndicies
	"Force this process to avoid these cores (0-55)"
	| mask |
	mask _ 0.
	aCollectionOfIndicies do:[:index| mask _ mask bitOr: (1 bitShift: index)].
	self coreMask: (self coreMask bitClear:mask)! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 02:59'!
useAdditionalCore: anIndex
	"Force this process to only urn on this core (0-55)"
	self coreMask: (self coreMask bitOr:(1 bitShift: anIndex))! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 03:50'!
useAdditionalCores: aCollectionOfIndicies
	"Allow this process to run on these additional cores (0-55)"
	| mask |
	mask _ 0.
	aCollectionOfIndicies do:[:index| mask _ mask bitOr: (1 bitShift: index)].
	self coreMask: (self coreMask bitOr:mask)! !
!Process methodsFor: 'core assignment' stamp: 'dmu 5/5/2009 01:32'!
useOnlyCore: anIndex
	"Force this process to only run on this core (0-55)"
	self coreMask: (1 bitShift: anIndex)! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 03:02'!
useOnlyCores: aCollectionOfIndicies
	"Force this process to only run on these cores (0-55)"
	| mask |
	mask _ 0.
	aCollectionOfIndicies do:[:index| mask _ mask bitOr: (1 bitShift: index)].
	self coreMask: mask! !
!Process methodsFor: 'core assignment' stamp: 'dmu 1/25/2010 11:06'!
useOnlyMainCore
	RVMPrimitives isRVM ifTrue: [self useOnlyCore: (RVMPrimitives getMainRank)]! !
!Process methodsFor: 'signaling' stamp: 'ssa 2/17/2009 22:30'!
signal: anException
	"Signal an exception in the receiver process...if the receiver is currently
	suspended, the exception will get signaled when the receiver is resumed.  If 
	the receiver is blocked on a Semaphore, it will be immediately re-awakened
	and the exception will be signaled; if the exception is resumed, then the receiver
	will return to a blocked state unless the blocking Semaphore has excess signals"

	"If we are the active process, go ahead and signal the exception"
	self == Processor thisProcess ifTrue: [^anException signal].

        self suspend.

	"Add a new method context to the stack that will signal the exception"
	suspendedContext := MethodContext
		sender: suspendedContext
		receiver: self
		method: (self class methodDict at: #pvtSignal:list:)
		arguments: (Array with: anException with: myList).

	"If we are on a list to run, then suspend and restart the receiver 
	(this lets the receiver run if it is currently blocked on a semaphore).  If
	we are not on a list to be run (i.e. this process is suspended), then when the
	process is resumed, it will signal the exception"

	myList ifNotNil: [self suspend; resume].! !
!Process class methodsFor: 'instance creation' stamp: 'dmu 3/24/2010 15:46'!
forContext: aContext priority: anInteger 
	"Answer an instance of me that has suspended aContext at priority 
	anInteger."

	| newProcess |
	newProcess _ self new.
	newProcess suspendedContext: aContext.
	newProcess priority: anInteger.
	[newProcess coreMask:(1 bitShift: 27)].
	^newProcess! !
!Process class methodsFor: 'instance creation' stamp: 'ssa 2/26/2009 02:45'!
forContext: aContext priority: anInteger coreMask: anIntegerMask
	"Answer an instance of me that has suspended aContext at priority 
	anInteger using this coreMask."

	| newProcess |
	newProcess _ self forContext: aContext priority: anInteger.
	newProcess coreMask:anIntegerMask.
	^newProcess! !
!ProcessorScheduler methodsFor: 'removing' stamp: 'ssa 6/11/2010 14:37'!
removeAllPossible
	"Terminate and remove all processes that you can.
	This should leave the standard set only"
	self terminatableProcesses print do:[:proc| proc terminate]! !
!ProcessorScheduler methodsFor: 'removing' stamp: 'ssa 6/11/2010 14:31'!
terminatableProcesses
	"Answer all current processes that may be user terminated like in the ProcessBrowser"
	"self terminatableProcesses"
	| processList |
	Smalltalk garbageCollectMost. "lose defunct processes"

	processList _ Process allSubInstances
				reject: [:each | each isTerminated].
	processList _ processList
				sortBy: [:a :b | a priority >= b priority].
	processList _ WeakArray withAll: processList.
	^processList select:[:proc| (ProcessBrowser nameAndRulesFor: proc) at: 2]! !
!Project methodsFor: 'menu messages' stamp: 'dmu 11/25/2008 00:23'!
enterForEmergencyRecovery
	"This version of enter invokes an absolute minimum of mechanism.
	An unrecoverable error has been detected in an isolated project.
	It is assumed that the old changeSet has already been revoked.
	No new process gets spawned here.  This will happen in the debugger."

	self isCurrentProject ifTrue: [^ self].
	CurrentProject saveState.
	CurrentProject _ self.
	Display newDepthNoRestore: displayDepth.
	Smalltalk newChanges: changeSet.
	TranscriptStream newTranscript: transcript.


	world isMorph
		ifTrue:
			["Entering a Morphic project"
			World _ world.
			world install.
			world triggerOpeningScripts]
		ifFalse:
			["Entering an MVC project"
			World _ nil.
			Smalltalk at: #ScheduledControllers put: world.
			ScheduledControllers restore].
	UIProcess _ Processor thisProcess.
! !

!StandardFileStream methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:07'!
interlock
	interlock ifNil: [self interlock: Semaphore forMutualExclusion].
	^ interlock! !
!StandardFileStream methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:07'!
interlock: aSemaphore
	interlock _ aSemaphore! !
!StandardFileStream methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:14'!
resetInterlock
	self interlock signal.
	self interlock: nil! !
!StandardFileStream methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:09'!
safelyDo: aBlock
	^ self interlock critical: aBlock! !
!StandardFileStream class methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:14'!
resetAllInterlocks
	"self resetAllInterlocks"
	self allSubInstancesDo: [:sfs| sfs resetInterlock]! !

!RemoteString methodsFor: 'accessing' stamp: 'dmu 9/7/2010 17:19'!
text 
	"Answer the receiver's string asText if remote files are enabled."
	| theFile theText |
	(sourceFileNumber == nil or: [(SourceFiles at: sourceFileNumber) == nil]) ifTrue: [^ nil].
	theFile _ SourceFiles at: sourceFileNumber.		theFile safelyDo: [
		theFile position: filePositionHi.
		theText _ theFile nextChunkText].
	^theText! !

!SyntaxError class methodsFor: 'instance creation' stamp: 'dmu 11/25/2008 00:25'!
open: aSyntaxError
	"Answer a standard system view whose model is an instance of me."
	| topView |
	<primitive: 19> "Simulation guard"
	
	topView _ self buildMVCViewOn: aSyntaxError.
	topView controller openNoTerminateDisplayAt: Display extent // 2.
	Cursor normal show.
	Processor thisProcess suspend.
! !
!SystemDictionary methodsFor: 'snapshot and quit' stamp: 'dmu 9/7/2010 14:26'!
snapshot: save andQuit: quit embedded: embeddedFlag
	"Mark the changes file and close all files. If save is true, save the current state of this Smalltalk in the image file. If quit is true, then exit to the outer shell. The latter part of this method runs when resuming a previously saved image. The resume logic checks for a document file to process when starting up."

	| resuming msg sourceLink |
	Object flushDependents.
	Object flushEvents.
	save & (SourceFiles at: 2) notNil ifTrue:
		[msg _  (quit
			ifTrue: ['----QUIT----']
			ifFalse: ['----SNAPSHOT----'])
			, Date dateAndTimeNow printString, ' ', (FileDirectory default localNameFor: self imageName).
		sourceLink _ ' priorSource: ' , LastQuitLogPosition printString.
		self assureStartupStampLogged.
		(SourceFiles at: 2) safelyDo: [
			LastQuitLogPosition _ (SourceFiles at: 2) setToEnd; position.
			self logChange: msg , sourceLink.
		].
		Transcript cr; show: msg].

	self processShutDownList: quit.
	Cursor write show.
	save ifTrue: [resuming _ embeddedFlag 
					ifTrue: [self snapshotEmbeddedPrimitive] 
					ifFalse: [self snapshotPrimitive].  "<-- PC frozen here on image file"
				resuming == false "guard against failure" ifTrue:
					["Time to reclaim segment files is immediately after a save"
					Smalltalk at: #ImageSegment
						ifPresent: [:theClass | theClass reclaimObsoleteSegmentFiles]]]
		ifFalse: [resuming _ false].
	quit & (resuming == false) ifTrue: [self quitPrimitive].
	Cursor normal show.
	self setGCParameters.
	resuming == true ifTrue: [self clearExternalObjects].
	self processStartUpList: resuming == true.
	resuming == true ifTrue:[
		self setPlatformPreferences.
		self readDocumentFile].
	"Now it's time to raise an error"
	resuming == nil ifTrue: [self error:'Failed to write image file (disk full?)'].
	^ resuming! !



!UnhandledError methodsFor: 'priv handling' stamp: 'dmu 11/25/2008 00:25'!
devDefaultAction

	Processor thisProcess
		debug: exception signalerContext
		title: exception description! !


!StandardSystemView methodsFor: 'displaying' stamp: 'dmu 9/17/2010 12:42'!
deEmphasizeLabel
	"Un-Highlight the label."
	labelFrame height = 0 ifTrue: [^ self].  "no label"
	self critical: [
		self displayLabelBackground: false.
		self displayLabelText.
	]! !

Cursor initialize!
Controller initialize!
!BitBlt methodsFor: 'copying' stamp: 'ssa 4/7/2009 13:44'!
OLDcopyBits
	"Primitive. Perform the movement of bits from the source form to the 
	destination form. Fail if any variables are not of the right type (Integer, 
	Float, or Form) or if the combination rule is not implemented. 
	In addition to the original 16 combination rules, this BitBlt supports
	16	fail (to simulate paint)
	17	fail (to simulate mask)
	18	sourceWord + destinationWord
	19	sourceWord - destinationWord
	20	rgbAdd: sourceWord with: destinationWord
	21	rgbSub: sourceWord with: destinationWord
	22	rgbDiff: sourceWord with: destinationWord
	23	tallyIntoMap: destinationWord
	24	alphaBlend: sourceWord with: destinationWord
	25	pixPaint: sourceWord with: destinationWord
	26	pixMask: sourceWord with: destinationWord
	27	rgbMax: sourceWord with: destinationWord
	28	rgbMin: sourceWord with: destinationWord
	29	rgbMin: sourceWord bitInvert32 with: destinationWord
"
	<primitive: 'primitiveCopyBits' module: 'BitBltPlugin'>

	"Check for compressed source, destination or halftone forms"
	(combinationRule >= 30 and: [combinationRule <= 31]) ifTrue:
		["No alpha specified -- re-run with alpha = 1.0"
		^ self copyBitsTranslucent: 255].
	((sourceForm isForm) and: [sourceForm unhibernate])
		ifTrue: [^ self copyBits].
	((destForm isForm) and: [destForm unhibernate])
		ifTrue: [^ self copyBits].
	((halftoneForm isForm) and: [halftoneForm unhibernate])
		ifTrue: [^ self copyBits].

	"Check for unimplmented rules"
	combinationRule = Form oldPaint ifTrue: [^ self paintBits].
	combinationRule = Form oldErase1bitShape ifTrue: [^ self eraseBits].

	"Check if BitBlt doesn't support full color maps"
	(colorMap notNil and:[colorMap isColormap]) ifTrue:[
		colorMap _ colorMap colors.
		^self copyBits].
	"Check if clipping gots us way out of range"
	self clipRange ifTrue:[^self copyBits].

	self error: 'Bad BitBlt arg (Fraction?); proceed to convert.'.
	"Convert all numeric parameters to integers and try again."
	destX _ destX asInteger.
	destY _ destY asInteger.
	width _ width asInteger.
	height _ height asInteger.
	sourceX _ sourceX asInteger.
	sourceY _ sourceY asInteger.
	clipX _ clipX asInteger.
	clipY _ clipY asInteger.
	clipWidth _ clipWidth asInteger.
	clipHeight _ clipHeight asInteger.
	^ self copyBitsAgain! !
!BitBlt methodsFor: 'copying' stamp: 'dmu 5/10/2009 08:43'!
copyBits
	RVMPrimitives isRVM ifFalse:[^self OLDcopyBits].
 	destForm == Display  ifTrue: [self copyBitsOnMain] ifFalse: [self copyBitsLocally]! !
!BitBlt methodsFor: 'line drawing' stamp: 'dmu 4/10/2009 22:47'!
drawFrom: startPoint to: stopPoint withFirstPoint: drawFirstPoint
	"Draw a line whose end points are startPoint and stopPoint.
	The line is formed by repeatedly calling copyBits at every
	point along the line.  If drawFirstPoint is false, then omit
	the first point so as not to overstrike at line junctions."
	| offset point1 point2 forwards |
	"Always draw down, or at least left-to-right"
	forwards _ (startPoint y = stopPoint y and: [startPoint x < stopPoint x])
				or: [startPoint y < stopPoint y].
	forwards
		ifTrue: [point1 _ startPoint. point2 _ stopPoint]
		ifFalse: [point1 _ stopPoint. point2 _ startPoint].
	sourceForm == nil ifTrue:
		[destX _ point1 x.
		destY _ point1 y]
		ifFalse:
		[width _ sourceForm width.
		height _ sourceForm height.
		offset _ sourceForm offset.
		destX _ (point1 x + offset x) rounded.
		destY _ (point1 y + offset y) rounded].

	"Note that if not forwards, then the first point is the last and vice versa.
	We agree to always paint stopPoint, and to optionally paint startPoint."
	(drawFirstPoint or: [forwards == false  "ie this is stopPoint"])
		ifTrue: [self copyBits].
		(destForm == Display or:[RVMPrimitives isRVM not]) ifTrue: [
	self drawLoopX: (point2 x - point1 x) rounded 
				  Y: (point2 y - point1 y) rounded]
			ifFalse: [self drawLoopLocallyX: (point2 x - point1 x) rounded 
				  Y: (point2 y - point1 y) rounded].
	(drawFirstPoint or: [forwards  "ie this is stopPoint"])
		ifTrue: [self copyBits].
! !
!BitBlt methodsFor: 'line drawing' stamp: 'dmu 4/10/2009 22:47'!
drawLoopX: xDelta Y: yDelta 
	"Primitive. Implements the Bresenham plotting algorithm (IBM Systems
	Journal, Vol. 4 No. 1, 1965). It chooses a principal direction, and
	maintains a potential, P. When P's sign changes, it is time to move in
	the minor direction as well. This particular version does not write the
	first and last points, so that these can be called for as needed in client code.
	Optional. See Object documentation whatIsAPrimitive."
	
		^(destForm == Display  or:[RVMPrimitives isRVM not])
			ifTrue:[self globalDrawLoopX:xDelta Y: yDelta ]
			ifFalse:[self localDrawLoopX:xDelta Y: yDelta ]! !

!ClassDescription methodsFor: 'fileIn/Out' stamp: 'dmu 9/7/2010 14:17'!
classComment: aString stamp: aStamp
	"Store the comment, aString or Text or RemoteString, associated with the class we are organizing.  Empty string gets stored only if had a non-empty one before."

	| ptr header file oldCommentRemoteStr |
	(aString isKindOf: RemoteString) ifTrue:
		[SystemChangeNotifier uniqueInstance classCommented: self.
		^ self organization classComment: aString stamp: aStamp].

	oldCommentRemoteStr _ self organization commentRemoteStr.
	(aString size = 0) & (oldCommentRemoteStr == nil) ifTrue: [^ self organization classComment: nil].
		"never had a class comment, no need to write empty string out"

	ptr _ oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer].
	SourceFiles ifNotNil: [(file _ SourceFiles at: 2) ifNotNil: [
		file safelyDo: [
			file setToEnd; cr; nextPut: $!!.	"directly"
			"Should be saying (file command: 'H3') for HTML, but ignoring it here"
			header _ String streamContents: [:strm | strm nextPutAll: self name;
				nextPutAll: ' commentStamp: '.
				aStamp storeOn: strm.
				strm nextPutAll: ' prior: '; nextPutAll: ptr printString].
			file nextChunkPut: header]]].
	self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp.
	SystemChangeNotifier uniqueInstance classCommented: self.
! !
!CompiledMethod methodsFor: 'source code management' stamp: 'dmu 9/7/2010 14:23'!
putSource: sourceStr fromParseNode: methodNode inFile: fileIndex withPreamble: preambleBlock
	"Store the source code for the receiver on an external file.
	If no sources are available, i.e., SourceFile is nil, then store
	temp names for decompilation at the end of the method.
	If the fileIndex is 1, print on *.sources;  if it is 2, print on *.changes,
	in each case, storing a 4-byte source code pointer at the method end."

	| file remoteString  st80str |
	(SourceFiles == nil or: [(file _ SourceFiles at: fileIndex) == nil]) ifTrue:
		[^ self become: (self copyWithTempNames: methodNode tempNames)].

	SmalltalkImage current assureStartupStampLogged.
	file safelyDo: [
		file setToEnd.

		preambleBlock value: file.  "Write the preamble"
		(methodNode isKindOf: DialectMethodNode)
			ifTrue:
			["This source was parsed from an alternate syntax.
			We must convert to ST80 before logging it."
			st80str _ (DialectStream dialect: #ST80 contents: [:strm | methodNode printOn: strm])
							asString.
			remoteString _ RemoteString newString: st80str
							onFileNumber: fileIndex toFile: file]
			ifFalse:
			[remoteString _ RemoteString newString: sourceStr
							onFileNumber: fileIndex toFile: file].

		file nextChunkPut: ' '.
		InMidstOfFileinNotification signal ifFalse: [file flush].
		self checkOKToAdd: sourceStr size at: remoteString position.
		self setSourcePosition: remoteString position inFile: fileIndex
	]! !
!RemoteString methodsFor: 'private' stamp: 'dmu 9/7/2010 14:23'!
string: aString onFileNumber: fileNumber
	"Store this as my string if source files exist."
	| theFile |
	(SourceFiles at: fileNumber) == nil ifFalse: 
		[theFile _ SourceFiles at: fileNumber.
		theFile safelyDo: [
			theFile setToEnd; cr.
			self string: aString onFileNumber: fileNumber toFile: theFile]
		]! !
!SystemDictionary methodsFor: 'sources, change log' stamp: 'dmu 9/7/2010 14:26'!
writeRecentCharacters: nCharacters toFileNamed: aFilename
	"Schedule an editable text view on the last n characters of changes."
	| changes |
	changes _ SourceFiles at: 2.
	changes safelyDo: [
		changes setToEnd; skip: nCharacters negated.
		(FileStream newFileNamed: aFilename) nextPutAll: (changes next: nCharacters); close; open; edit
	]! !
!SmalltalkImage methodsFor: 'sources, changes log' stamp: 'dmu 9/7/2010 14:25'!
logChange: aStringOrText 
	"Write the argument, aString, onto the changes file."
	| aString changesFile |
	(SourceFiles isNil or: [(SourceFiles at: 2) == nil]) ifTrue: [^ self].
	self assureStartupStampLogged.

	aStringOrText isText
		ifTrue: [aString _ aStringOrText string]
		ifFalse: [aString _ aStringOrText].
	(aString isMemberOf: String)
		ifFalse: [self error: 'can''t log this change'].
	(aString findFirst: [:char | char isSeparator not]) = 0
		ifTrue: [^ self].  "null doits confuse replay"
	(changesFile _ SourceFiles at: 2).
	changesFile isReadOnly ifTrue:[^self].
	changesFile safelyDo: [
		changesFile setToEnd; cr; cr.
		changesFile nextChunkPut: aString.
			"If want style changes in DoIt, use nextChunkPutWithStyle:, and allow Texts to get here"
		self forceChangesToDisk.
	]! !
!SmalltalkImage methodsFor: 'sources, changes log' stamp: 'dmu 9/7/2010 14:25'!
assureStartupStampLogged
	"If there is a startup stamp not yet actually logged to disk, do it now."
	| changesFile |
	StartupStamp ifNil: [^ self].
	(SourceFiles isNil or: [(changesFile _ SourceFiles at: 2) == nil]) ifTrue: [^ self].
	changesFile isReadOnly ifTrue:[^self].
	changesFile safelyDo: [
		changesFile setToEnd; cr; cr.
		changesFile nextChunkPut: StartupStamp asString; cr.
		StartupStamp _ nil.
		self forceChangesToDisk.
	]! !

!ClassDescription methodsFor: 'fileIn/Out' stamp: 'dmu 9/7/2010 14:22'!
printMethodChunk: selector withPreamble: doPreamble on: outStream
		moveSource: moveSource toFile: fileIndex
	"Copy the source code for the method associated with selector onto the fileStream.  If moveSource true, then also set the source code pointer of the method."
	| preamble method oldPos newPos sourceFile endPos |
	doPreamble 
		ifTrue: [preamble _ self name , ' methodsFor: ' ,
					(self organization categoryOfElement: selector) asString printString]
		ifFalse: [preamble _ ''].
	method _ self methodDict at: selector.
	((method fileIndex = 0
		or: [(SourceFiles at: method fileIndex) == nil])
		or: [(oldPos _ method filePosition) = 0])
		ifTrue:
		["The source code is not accessible.  We must decompile..."
		preamble size > 0 ifTrue: [outStream cr; nextPut: $!!; nextChunkPut: preamble; cr].
		outStream nextChunkPut: (self decompilerClass new decompile: selector
											in: self method: method) decompileString]
		ifFalse:
		[sourceFile _ SourceFiles at: method fileIndex.
		sourceFile safelyDo: [
			sourceFile position: oldPos.
			preamble size > 0 ifTrue:    "Copy the preamble"
				[outStream copyPreamble: preamble from: sourceFile].
			"Copy the method chunk"
			newPos _ outStream position.
			outStream copyMethodChunkFrom: sourceFile.
			sourceFile skipSeparators.      "[" "The following chunk may have ]style[" "]"
			sourceFile peek == "[" $] ifTrue: [
				outStream cr; copyMethodChunkFrom: sourceFile].
			moveSource ifTrue:    "Set the new method source pointer"
				[endPos _ outStream position.
				method checkOKToAdd: endPos - newPos at: newPos.
				method setSourcePosition: newPos inFile: fileIndex]]].
	preamble size > 0 ifTrue: [outStream nextChunkPut: ' '].
	^ outStream cr! !
!StandardSourceFileArray class methodsFor: 'initialize-release' stamp: 'dmu 9/7/2010 14:12'!
install
	"Replace SourceFiles by an instance of me with the standard sources and changes files.
	This only works if SourceFiles is either an Array or an instance of this class"
	"StandardSourceFileArray install"
	StandardFileStream resetAllInterlocks.
	SourceFiles _ self new initialize! !

!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 9/17/2010 11:02'!
userBackgroundPriority
	^ UserBackgroundPriority! !
!Process methodsFor: 'RVM' stamp: 'dmu 9/17/2010 11:59'!
suspendedContextWaitingIfNecessary
	"In RVM, can suspend some other running process, and so after sending suspend, suspendedContext may still be nil."
	
	[self suspendedContext isNil] whileTrue.
	^ self suspendedContext! !
!ParagraphEditor methodsFor: 'do-its' stamp: 'dmu 9/17/2010 12:00'!
debug: aCompiledMethod receiver: anObject in: evalContext

	| selector guineaPig debugger context |
	selector _ evalContext isNil ifTrue: [#DoIt] ifFalse: [#DoItIn:].
	anObject class addSelectorSilently: selector withMethod: aCompiledMethod.
	guineaPig _ evalContext isNil
		ifTrue: [[anObject DoIt] newProcess]
		ifFalse: [[anObject DoItIn: evalContext] newProcess].
	context _ guineaPig suspendedContextWaitingIfNecessary.
	debugger _ Debugger new
		process: guineaPig
		controller: ((Smalltalk isMorphic not and: [ScheduledControllers inActiveControllerProcess])
				ifTrue: [ScheduledControllers activeController]
				ifFalse: [nil])
		context: context
		isolationHead: nil.
	debugger openFullNoSuspendLabel: 'Debug it'.
	[debugger interruptedContext method == aCompiledMethod]
		whileFalse: [debugger send].
	anObject class basicRemoveSelector: selector! !
!StandardSystemView methodsFor: 'RVM' stamp: 'dmu 9/17/2010 12:37'!
displayInterlock
	displayInterlock ifNil: [self displayInterlock: Mutex new].
	^ displayInterlock! !
!StandardSystemView methodsFor: 'RVM' stamp: 'dmu 9/17/2010 12:24'!
displayInterlock: aSemaphore
	displayInterlock _ aSemaphore! !
!StandardSystemView methodsFor: 'displaying' stamp: 'dmu 9/17/2010 12:31'!
displayEmphasized
	"Display with label highlighted to indicate that it is active."
	self  critical: [
		self displayDeEmphasized; emphasize.
		isLabelComplemented _ true
	]! !
!StandardSystemView methodsFor: 'displaying' stamp: 'dmu 9/17/2010 12:30'!
displayDeEmphasized 
	"Display this view with emphasis off.
	If windowBits is not nil, then simply BLT if possible,
		but force full display for top window so color is preserved."
	self  critical: [
		(bitsValid and: [controller ~~ ScheduledControllers activeController])
			ifTrue: [self lock.
					windowBits displayAt: self windowOrigin]
			ifFalse: [Display deferUpdates: true.
					super display.
					Display deferUpdates: false; forceToScreen: self windowBox.
					CacheBits ifTrue: [self cacheBitsAsIs]]
	]
! !
!StandardSystemView methodsFor: 'RVM' stamp: 'dmu 9/17/2010 12:37'!
critical: aBlock
	^self displayInterlock critical: aBlock! !
!Mutex commentStamp: '<historical>'!
A Mutex is a light-weight MUTual EXclusion object being used when two or more processes need to access a shared resource concurrently. A Mutex grants ownership to a single process and will suspend any other process trying to aquire the mutex while in use. Waiting processes are granted access to the mutex in the order the access was requested.

Instance variables:
	semaphore	<Semaphore>		The (primitive) semaphore used for synchronization.
	owner		<Process>		The process owning the mutex.!
!Mutex methodsFor: 'initialize' stamp: 'das 11/3/2005 22:53'!
initialize
	semaphore := Semaphore forMutualExclusion.! !
!Mutex methodsFor: 'mutual exclusion' stamp: 'dmu 6/14/2010 16:16'!
critical: aBlock
	"Evaluate aBlock protected by the receiver."
	| activeProcess |
	activeProcess := Processor thisProcess.
	activeProcess == owner ifTrue:[^aBlock value].
	^semaphore critical:[
		owner := activeProcess.
		aBlock ensure:[owner := nil]].! !
!Mutex commentStamp: 'dmu 9/17/2010 12:34'!
A Mutex is a light-weight MUTual EXclusion object being used when two or more processes need to access a shared resource concurrently. A Mutex grants ownership to a single process and will suspend any other process trying to aquire the mutex while in use. Waiting processes are granted access to the mutex in the order the access was requested.

Brought in from Squeak 4.1 because we need it.

Instance variables:
	semaphore	<Semaphore>		The (primitive) semaphore used for synchronization.
	owner		<Process>		The process owning the mutex.!
!StandardSystemView methodsFor: 'displaying' stamp: 'dmu 9/17/2010 12:42'!
emphasizeLabel
	"Highlight the label."
	labelFrame height = 0 ifTrue: [^ self].  "no label"
	self critical: [
		self displayLabelBackground: true.
		self displayLabelBoxes.
		self displayLabelText.
	]! !
!StandardSystemView methodsFor: 'RVM' stamp: 'dmu 9/17/2010 12:47'!
resetDisplayInterlock
	self displayInterlock: nil! !
!ControlManager methodsFor: 'displaying' stamp: 'dmu 9/17/2010 12:48'!
restore 
	"Clear the screen to gray and then redisplay all the scheduled views.  Try to be a bit intelligent about the view that wants control and not display it twice if possible."

	scheduledControllers first view uncacheBits.  "assure refresh"
	self unschedule: screenController; scheduleOnBottom: screenController.
	screenController view window: Display boundingBox; displayDeEmphasized.
	self scheduledWindowControllers reverseDo:
		[:aController | aController view resetDisplayInterlock; displayDeEmphasized].
! !

!SystemDictionary methodsFor: 'miscellaneous' stamp: 'dmu 9/17/2010 16:39'!
handleUserInterrupt
	Preferences cmdDotEnabled ifTrue:
		[Smalltalk isMorphic
			ifTrue: []
			ifFalse: [[ScheduledControllers interruptName: 'User Interrupt'] forkAt: Processor thisProcess priority + 1]]! !

================================================
FILE: image.st/RVM-multicore-support.pharo.st
================================================
'******************************************************************************
 *  Copyright (c) 2008 - 2010 IBM Corporation and others.
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 * 
 *  Contributors:
 *    David Ungar, IBM Research - Initial Implementation
 *    Sam Adams, IBM Research - Initial Implementation
 *    Stefan Marr, Vrije Universiteit Brussel - Port to x86 Multi-Core Systems
 ******************************************************************************'!
DisplayText subclass: #Paragraph
	instanceVariableNames: 'clippingRectangle compositionRectangle destinationForm rule mask marginTabsLevel lines lastLine destFormSema'
	classVariableNames: ''
	poolDictionaries: 'TextConstants'
	category: 'ST80-Support'!
Link subclass: #Process
	instanceVariableNames: 'suspendedContext priority myList errorHandler name env hostCore coreMask'
	classVariableNames: 'SemaForSuspensions'
	poolDictionaries: ''
	category: 'Kernel-Processes'!
Object subclass: #RVMPrimitives
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'RVM-Support'!	
Object subclass: #ProcessorScheduler
	instanceVariableNames: 'quiescentProcessLists activeProcess'
	classVariableNames: 'BackgroundProcess EmergencyProcess HighIOPriority LowIOPriority SystemBackgroundPriority SystemRockBottomPriority TimingPriority UserBackgroundPriority UserInterruptPriority UserSchedulingPriority'
	poolDictionaries: ''
	category: 'Kernel-Processes'!
FileStream subclass: #StandardFileStream
	instanceVariableNames: 'name fileID buffer1 interlock'
	classVariableNames: 'Registry'
	poolDictionaries: ''
	category: 'Files-Kernel'!
!ProcessorScheduler methodsFor: 'accessing' stamp: 'dmu 11/25/2008 00:23'!
activePriority
	"Answer the priority level of the currently running Process."

	^self thisProcess priority! !
!ProcessorScheduler methodsFor: 'accessing' stamp: 'dmu 9/16/2010 14:53'!
preemptedProcess
	"Return the process that the currently active process just preempted."
	| list listWithoutMe |
	self thisProcess priority to: 1 by: -1 do:[:priority|
		list := quiescentProcessLists at: priority.
		"RVM keeps running processes on the lists -- dmu 9/16/10"
		listWithoutMe := list reject: [:p | p == Processor thisProcess].
		listWithoutMe isEmpty ifFalse:[^listWithoutMe last].
	].
	^nil

	"Processor preemptedProcess"! !
!ProcessorScheduler methodsFor: 'process state change' stamp: 'dmu 11/25/2008 00:23'!
terminateActive
	"Terminate the process that is currently running."

	self thisProcess terminate! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:39'!
areRunningProcessesInSchedulerLists
	"Our RVM follows Pallas' MS system and keeps runnable processes in the scheduler lists even when running."
	^RVMPrimitives isRVM! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 11/25/2008 00:26'!
isActive: aProcess
	^ aProcess suspendedContext ==  nil! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:32'!
thisProcess
	^ RVMPrimitives thisProcess! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 3/22/2010 13:03'!
yieldIfFewerCoresThan: n
	RVMPrimitives coreCount < n    ifTrue: [self yield]! !
!Project class methodsFor: 'utilities' stamp: 'dmu 11/25/2008 00:24'!
spawnNewProcessAndTerminateOld: terminate

	self spawnNewProcess.
	terminate
		ifTrue: [Processor terminateActive]
		ifFalse: [Processor thisProcess suspend]! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/8/2010 23:41'!
breakpoint
	<primitive: 'primitiveBreakpoint' module: 'RVMPrimitives'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:02'!
printExecutionTrace
	<primitive: 'primitivePrintExecutionTrace' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:01'!
printOnConsole: aString
	"Prints a string onto the console"
	<primitive: 'primitivePrint' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:00'!
printStack
	"Prints Smalltalk stack to console"
	<primitive: 'primitivePrintStack' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:01'!
printVMStatistics
	<primitive: 'primitivePrintStats' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'dmu 6/8/2010 23:04'!
sampleRVM
	"Grab some data from the VM and return it"
	<primitive: 'primitiveSampleRVM' module: 'RVMPlugin'>
	"RVMPrimitives sampleRVM"
	^ nil! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'sm 10/27/2010 22:09'!
getMainRank
	"Get a sample from the VM and read out the main rank"
	| sample |
	sample := self sampleRVM.
	^ ((sample at: 6) at: 2) at: 6! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'dmu 6/8/2010 23:40'!
sampleSpecificData: flags
	"Grab some data from the VM and return it"
	"Bit offsets for flags; bit 0 is 1, bit 1 is 2, bit 2 is 4, etc.
	
	allCores, // 0
	runMask,
	messageNames,
	cpuCoreStats,
	allCoreStats,
	fence,

	millisecs, // 6
	cycles,
	messageStats,
	memorySystemStats,
    	interpreterStats,
    	objectTableStats,
    	interactionStats,

   	 coreCoords, // 14
    	sendTallies,
    	receiveTallies,
    	bufferedMessageStats,
    	receiveCycles,

    	// memory system
    	gcStats, // 19
    	heapStats,

    	// interpreter
    	bytecodes, // 20
    	yieldCount,
    	cycleCounts,
    	interruptChecks,
    	movedMutatedObjectStats,
    	mutexStats,
   	 interpreterLoopStats // 26"

	<primitive: 'primitiveSampleRVM' module: 'RVMPlugin'>
	^ nil! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:58'!
moveAllToReadMostlyHeaps
	"Move all objects into read-mostly heaps"
	<primitive: 'primitiveMoveAllToReadMostlyHeaps' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:55'!
shuffleToHeapsFrom: firstHeap to: lastHeap
	"Deal out all objects in the system into heaps from firstHeap through lastHeap in round-robin fashion so that adjacent objects wind up in different heaps"
	<primitive: 'primitiveShuffle' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:56'!
shuffleToHeapsFrom: firstHeap to: lastHeap movingReadWriteObjectsToReadMostlyHeap: rwToRM  movingReadMostlyObjectsToReadWriteHeap: rmToRw
	"Deal out all objects in the system into heaps from firstHeap through lastHeap in round-robin fashion so that adjacent objects wind up in different heaps"
	"If rwToRM, move objects in read/write heaps to read-mostly heaps."
	"If rmToRW, move objects in read-mostly heaps to read/write heaps."
	<primitive: 'primitiveShuffle' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:57'!
spreadToHeapsFrom: firstHeap to: lastHeap
	"Spread out all objects in the system into heaps from firstHeap through lastHeap so that each heap ends up about equally full."
	<primitive: 'primitiveSpread' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:57'!
spreadToHeapsFrom: firstHeap to: lastHeap movingReadWriteObjectsToReadMostlyHeap: rwToRM  movingReadMostlyObjectsToReadWriteHeap: rmToRw
	"Spread out all objects in the system into heaps from firstHeap through lastHeap so that each heap ends up about equally full."
	"If rwToRM, move objects in read/write heaps to read-mostly heaps."
	"If rmToRW, move objects in read-mostly heaps to read/write heaps."
	<primitive: 'primitiveSpread' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:30'!
for: anObject setRankTo: rank
	<primitive: 'primitiveSetCoordinatesFor' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:31'!
for: anObject setRankTo: rank isReadWrite: isRW
	<primitive: 'primitiveSetCoordinatesFor' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:17'!
getCoreOf: anObject
	"RVMPrimitives getCoreOf: 2@3"
	<primitive: 'primitiveGetCore' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:47'!
getMutabilityOf: anObject
	"Return true if argument is in a read/write heap, false if in read-mostly heap"
	<primitive: 'primitiveGetMutability' module: 'RVMPlugin'>
	^ true! !
!RVMPrimitives class methodsFor: 'enumerating a heap' stamp: 'dmu 6/8/2010 23:10'!
allObjectsInHeap: rank isReadWrite: trueForReadWriteFalseForReadMostly
	"return array of all objects in either read/write or read-mostly heap specified by rank and trueForReadWriteFalseForReadMostly"
	"RVMPrimitives allObjectsInHeap: 0 isReadWrite: true"
	<primitive: 'primitiveAllObjectsInHeap' module: 'RVMPlugin'>
	^ nil! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:18'!
getCoreIAmRunningOn
	"RVMPrimitives getCoreIAmRunningOn"
	<primitive: 'primitiveGetCoreIAmRunningOn' module: 'RVMPlugin' >
  	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:44'!
getRunMask
	"Return an integer with ones corresponding to cores RVM is allowed to use: 1 means core 0, 3 means cores 0 and 1, etc."
	"RVMPrimitives getRunMask printStringBase: 16"
	<primitive: 'primitiveRunMask' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/9/2010 00:07'!
getRunningProcessesByCore
	"Returns array of running processes, indexed by core (+1)"
	<primitive: 'primitiveRunningProcessByCore' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:46'!
setRunMask: anInteger
	"Sets run mask to argument and returns old run mask.
	Only cores set in run mask will be used to run Smalltalk processes."
	"RVMPrimitives setRunMask: 1"
	<primitive: 'primitiveRunMask' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/9/2010 00:04'!
thisProcess
	"Return the process that is running; RVM does not use ActiveProcess for this state, since many may be running"
	<primitive: 'primitiveThisProcess'  module: 'RVMPlugin'>
	^ Processor activeProcess! !
!RVMPrimitives class methodsFor: 'cores' stamp: 'dmu 6/8/2010 23:11'!
coreCount
  "RVMPrimitives coreCount"
  <primitive: 'primitiveCoreCount' module: 'RVMPlugin'>
  ^ 1! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:25'!
getCoreTrace
	"RVMPrimitives getCoreTrace"
	<primitive: 'primitiveTraceCores' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:26'!
getMutatedReplicatedObjectsTrace
	<primitive: 'primitiveTraceMutatedReplicatedObjects' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:22'!
startCoreTrace: size
	"RVMPrimitives startCoreTrace: 1000"
	<primitive: 'primitiveTraceCores' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:27'!
startMutatedReplicatedObjectsTrace: size
	<primitive: 'primitiveTraceMutatedReplicatedObjects' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'emergency evaluating' stamp: 'dmu 6/8/2010 23:19'!
getEmergencySemaphore
	"When you hit shift-control-a, the VM will signal the emergency semaphore, if it has been set to a semaphore"
	"RVMPrimitives getEmergencySemaphore"
	<primitive: 'primitiveEmergencySemaphore' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'emergency evaluating' stamp: 'dmu 6/9/2010 00:06'!
setEmergencySemaphore: aSema
	"When you hit shift-control-a, the VM will signal the emergency semaphore, if it has been set to a semaphore"
	"RVMPrimitives setEmergencySemaphore: Semaphore new"
	<primitive: 'primitiveEmergencySemaphore' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/14/2010 15:27'!
getExtraPreheaderWordOf: anObject
	"Returns the extra preheader word of the argument."
	"RVMPrimitives getExtraPreheaderWordOf: 3@4"
	<primitive: 'primitiveGetExtraPreheaderWord' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/14/2010 15:27'!
setExtraPreheaderWordOf: anObject to: newContents
	"Sets the extra preheader word of the first argument."
	"|n| n := 3@4.
	RVMPrimitives setExtraPreheaderWordOf: n to: 17.
	RVMPrimitives getExtraPreheaderWordOf: n"
	<primitive: 'primitiveSetExtraPreheaderWord' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/9/2010 00:05'!
setExtraWordSelector: aSelector
	"returns the old one"
	<primitive: 'primitiveSetExtraWordSelector' module: 'RVMPlugin'>
	^self primitiveFailed! !
!RVMPrimitives class methodsFor: 'testing' stamp: 'dmu 6/14/2010 15:36'!
isRVM
	"RVMPrimitives isRVM"
	^ (self getCoreOf: nil) ~= -1! !
!BlockClosure methodsFor: 'evaluating' stamp: 'dmu 6/14/2010 16:13'!
valueAt: blockPriority 
	"Evaluate the receiver (block), with another priority as the actual one 
	and restore it afterwards. The caller should be careful with using 
	higher priorities."
	| activeProcess result outsidePriority |
	activeProcess := Processor thisProcess.
	outsidePriority := activeProcess priority.
	activeProcess priority: blockPriority.
	result := self ensure: [activeProcess priority: outsidePriority].
	"Yield after restoring lower priority to give the preempted processes a  
	chance to run."
	blockPriority > outsidePriority
		ifTrue: [Processor yield].
	^ result! !
!BlockClosure methodsFor: 'evaluating' stamp: 'dmu 6/14/2010 16:13'!
valueWithin: aDuration onTimeout: timeoutBlock
	"Evaluate the receiver.
	If the evaluation does not complete in less than aDuration evaluate the timeoutBlock instead"

	| theProcess delay watchdog |

	aDuration <= Duration zero ifTrue: [^ timeoutBlock value ].

	"the block will be executed in the current process"
	theProcess := Processor thisProcess.
	delay := aDuration asDelay.

	"make a watchdog process"
	watchdog := [
		delay wait. 	"wait for timeout or completion"
		theProcess ifNotNil:[ theProcess signalException: TimedOut ] 
	] newProcess.

	"Watchdog needs to run at high priority to do its job (but not at timing priority)"
	watchdog priority: Processor timingPriority-1.

	"catch the timeout signal"
	^ [	watchdog resume.				"start up the watchdog"
		self ensure:[						"evaluate the receiver"
			theProcess := nil.				"it has completed, so ..."
			delay delaySemaphore signal.	"arrange for the watchdog to exit"
		]] on: TimedOut do: [ :e | timeoutBlock value ].
! !
!BlockClosure methodsFor: 'private' stamp: 'dmu 6/14/2010 16:13'!
valueUnpreemptively
	"Evaluate the receiver (block), without the possibility of preemption by higher priority processes. Use this facility VERY sparingly!!"
	"Think about using Block>>valueUninterruptably first, and think about using Semaphore>>critical: before that, and think about redesigning your application even before that!! 
	After you've done all that thinking, go right ahead and use it..."
	| activeProcess oldPriority result |
	activeProcess := Processor thisProcess.
	oldPriority := activeProcess priority.
	activeProcess priority: Processor highestPriority.
	result := self ensure: [activeProcess priority: oldPriority].
	"Yield after restoring priority to give the preempted processes a chance to run"
	Processor yield.
	^result! !
!BlockContext methodsFor: 'evaluating' stamp: 'dmu 6/14/2010 16:14'!
valueWithin: aDuration onTimeout: timeoutBlock
	"Evaluate the receiver.
	If the evaluation does not complete in less than aDuration evaluate the timeoutBlock instead"

	| theProcess delay watchdog |

	aDuration <= Duration zero ifTrue: [^ timeoutBlock value ].

	"the block will be executed in the current process"
	theProcess := Processor thisProcess.
	delay := aDuration asDelay.

	"make a watchdog process"
	watchdog := [
		delay wait. 	"wait for timeout or completion"
		theProcess ifNotNil:[ theProcess signalException: TimedOut ] 
	] newProcess.

	"Watchdog needs to run at high priority to do its job (but not at timing priority)"
	watchdog priority: Processor timingPriority-1.

	"catch the timeout signal"
	^ [	watchdog resume.				"start up the watchdog"
		self ensure:[						"evaluate the receiver"
			theProcess := nil.				"it has completed, so ..."
			delay delaySemaphore signal.	"arrange for the watchdog to exit"
		]] on: TimedOut do: [ :e | timeoutBlock value ].
! !
!BlockContext methodsFor: 'scheduling' stamp: 'dmu 6/14/2010 16:14'!
valueAt: blockPriority 
	"Evaluate the receiver (block), with another priority as the actual one 
	and restore it afterwards. The caller should be careful with using 
	higher priorities."
	| activeProcess result outsidePriority |
	activeProcess := Processor thisProcess.
	outsidePriority := activeProcess priority.
	activeProcess priority: blockPriority.
	result := self
				ensure: [activeProcess priority: outsidePriority].
	"Yield after restoring lower priority to give the preempted processes a  
	chance to run."
	blockPriority > outsidePriority
		ifTrue: [Processor yield].
	^ result! !
!BlockContext methodsFor: 'private' stamp: 'dmu 11/25/2008 00:18'!
valueUnpreemptively
	"Evaluate the receiver (block), without the possibility of preemption by higher priority processes. Use this facility VERY sparingly!!"
	"Think about using Block>>valueUninterruptably first, and think about using Semaphore>>critical: before that, and think about redesigning your application even before that!! 
	After you've done all that thinking, go right ahead and use it..."
	| activeProcess oldPriority result |
	activeProcess := Processor thisProcess.
	oldPriority := activeProcess priority.
	activeProcess priority: Processor highestPriority.
	result := self ensure: [activeProcess priority: oldPriority].
	"Yield after restoring priority to give the preempted processes a chance to run"
	Processor yield.
	^result! !
!CPUWatcher methodsFor: 'process operations' stamp: 'dmu 11/25/2008 00:18'!
debugProcess: aProcess
	| uiPriority oldPriority |
	uiPriority := Processor thisProcess priority.
	aProcess priority >= uiPriority ifTrue: [
		oldPriority := ProcessBrowser setProcess: aProcess toPriority: uiPriority - 1
	].
	ProcessBrowser debugProcess: aProcess.! !
!Cursor methodsFor: 'displaying' stamp: 'dmu 6/14/2010 16:15'!
showWhile: aBlock 
	"While evaluating the argument, aBlock, make the receiver be the cursor shape."
	"ar 2/2/2006: Only allow this if active process is ui process"
	| oldcursor |
	Processor thisProcess == Project uiProcess ifFalse:[^aBlock value].
	oldcursor := Sensor currentCursor.
	self show.
	^aBlock ensure: [oldcursor show]
! !
!Debugger class methodsFor: 'class initialization' stamp: 'dmu 6/14/2010 16:15'!
openContext: aContext label: aString contents: contentsStringOrNil

	"Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger."
	<primitive: 19> "Simulation guard"
	ErrorRecursion not & self logDebuggerStackToFile ifTrue:
		[Smalltalk logError: aString inContext: aContext to: 'PharoDebug.log'].
	  ErrorRecursion ifTrue:[
               ErrorRecursion := false.
               self primitiveError: aString].
	ErrorRecursion := true.
	self informExistingDebugger: aContext label: aString.
	(Debugger context: aContext)
		openNotifierContents: contentsStringOrNil
		label: aString.
	ErrorRecursion := false.
	Processor thisProcess suspend.
! !
!Debugger class methodsFor: 'instance creation' stamp: 'dmu 6/14/2010 16:15'!
context: aContext
	"Answer an instance of me for debugging the active process starting with the given context."

	^ self new
		process: Processor thisProcess
		controller: nil
		context: aContext! !
!DelayWaitTimeout methodsFor: 'private' stamp: 'dmu 6/14/2010 16:15'!
setDelay: anInteger forSemaphore: aSemaphore
	super setDelay: anInteger forSemaphore: aSemaphore.
	process := Processor thisProcess.
	expired := false.! !
!HTTPLoader methodsFor: 'private' stamp: 'dmu 6/14/2010 16:15'!
startDownload
	| newDownloadProcess |
	
	downloads size >= self maxNrOfConnections ifTrue: [^self].
	requests size <= 0 ifTrue: [^self].

	newDownloadProcess := [
		[
			self nextRequest startRetrieval
		] on: FTPConnectionException do: [ :ex | 
			Cursor normal show.
			self removeProcess: Processor thisProcess.
			self startDownload
		].
		self removeProcess: Processor thisProcess.
		self startDownload
	] newProcess.
	downloads add: newDownloadProcess.
	newDownloadProcess resume! !
!MessageTally methodsFor: 'initialize-release' stamp: 'dmu 6/14/2010 16:16'!
spyEvery: millisecs on: aBlock
	"Create a spy and spy on the given block at the specified rate."
	"Spy only on the active process (in which aBlock is run)"

	| myDelay time0 observedProcess |
	aBlock isBlock
		ifFalse: [ self error: 'spy needs a block here' ].
	self class: aBlock receiver class method: aBlock method.
		"set up the probe"
	observedProcess := Processor thisProcess.
	myDelay := Delay forMilliseconds: millisecs.
	time0 := Time millisecondClockValue.
	gcStats := Smalltalk getVMParameters.
	Timer ifNotNil: [ self error: 'it seems a tally is already running' ].
	Timer := [
		[ true ] whileTrue: [
			| startTime |
			startTime := Time millisecondClockValue.
			myDelay wait.
			self
				tally: Processor preemptedProcess suspendedContext
				in: (observedProcess == Processor preemptedProcess ifTrue: [observedProcess] ifFalse: [nil])
				"tally can be > 1 if ran a long primitive"
				by: (Time millisecondClockValue - startTime) // millisecs].
		nil] newProcess.
	Timer priority: Processor timingPriority-1.
		"activate the probe and evaluate the block"
	Timer resume.
	^ aBlock ensure: [
		"cancel the probe and return the value"
		"Could have already been terminated. See #terminateTimerProcess"
		Timer ifNotNil: [
			Timer terminate.
			Timer := nil ].
		"Collect gc statistics"
		Smalltalk getVMParameters keysAndValuesDo: [ :idx :gcVal | 
			gcVal ifNotNil: [ gcStats at: idx put: (gcVal - (gcStats at: idx))]].
		time := Time millisecondClockValue - time0]! !
!Monitor methodsFor: 'private' stamp: 'dmu 6/14/2010 16:16'!
enter
	self isOwnerProcess ifTrue: [
		nestingLevel := nestingLevel + 1.
	] ifFalse: [
		mutex wait.
		ownerProcess := Processor thisProcess.
		nestingLevel := 1.
	].! !
!Monitor methodsFor: 'private' stamp: 'dmu 6/14/2010 16:16'!
isOwnerProcess
	^ Processor thisProcess == ownerProcess! !
!Paragraph methodsFor: 'RVM' stamp: 'dmu 6/15/2010 11:36'!
destFormSema: s
	destFormSema := s! !
!Paragraph methodsFor: 'private' stamp: 'dmu 4/1/2009 19:38'!
compositionRectangle: compositionRect text: aText style: aTextStyle offset: aPoint

	compositionRectangle := compositionRect copy.
	text := aText.
	textStyle := aTextStyle.
	rule := DefaultRule.
	mask := nil.		"was DefaultMask "
	marginTabsLevel := 0.
	destFormSema := Semaphore forMutualExclusion.
	destinationForm := Display.
	offset := aPoint.
	^self composeAll! !
!Paragraph methodsFor: 'private' stamp: 'ssa 4/7/2009 12:39'!
displayOn: aDisplayMedium lines: lineInterval

	| saveDestinationForm |
	destFormSema isNil ifTrue:[self destFormSema: Semaphore forMutualExclusion].
	destFormSema critical: [
		saveDestinationForm := destinationForm.
		self destinationForm: aDisplayMedium.
		self displayLines: lineInterval.
		destinationForm := saveDestinationForm
	]! !
!Process methodsFor: 'accessing' stamp: 'ssa 2/17/2009 22:34'!
isActiveProcess

	^ Processor areRunningProcessesInSchedulerLists
		ifTrue: [ suspendedContext isNil and:[myList notNil]]
		ifFalse: [self == Processor activeProcess]! !
!Process methodsFor: 'accessing' stamp: 'dmu 6/18/2010 17:35'!
isTerminated

	self isActiveProcess ifTrue: [^ false].
	^suspendedContext isNil
	  or: ["If the suspendedContext is the bottomContext it is the block in Process>>newProcess.
		   If so, and the pc is greater than the startpc, the bock has alrteady sent and returned
		   from value and there is nothing more to do."
		suspendedContext isBottomContext
		and: [suspendedContext pc isNil or: [suspendedContext pc > suspendedContext startpc]]]! !
!Process methodsFor: 'changing process state' stamp: 'dmu 6/14/2010 16:16'!
run
	"Suspend current process and execute self instead"

	| proc |
	proc := Processor thisProcess.
	[	proc suspend.
		self resume.
	] forkAt: Processor highestPriority! !
!Process methodsFor: 'changing process state' stamp: 'dmu 6/18/2010 00:18'!
suspend
	"Primitive. Stop the process that the receiver represents in such a way 
	that it can be restarted at a later time (by sending the receiver the 
	message resume). If the receiver represents the activeProcess, suspend it. 
	Otherwise remove the receiver from the list of waiting processes.
	The return value of this method is the list the receiver was previously on (if any)."
	| oldList |
	<primitive: 88>
	"This is fallback code for VMs which only support the old primitiveSuspend which 
	would not accept processes that are waiting to be run."
	RVMPrimitives isRVM ifTrue: [self error: 'suspend should never fail'].
	myList ifNil:[^nil]. "this allows us to use suspend multiple times"
	oldList := myList.
	myList := nil.
	oldList remove: self ifAbsent:[].
	^oldList! !
!Process methodsFor: 'changing process state' stamp: 'dmu 6/17/2010 23:57'!
terminate 
	"Stop the process that the receiver represents forever.  Unwind to execute pending ensure:/ifCurtailed: blocks before terminating."

	| ctxt unwindBlock oldList |
	self == Processor thisProcess
		ifTrue: [
			ctxt := thisContext.
			[ ctxt := ctxt findNextUnwindContextUpTo: nil.
			ctxt isNil ] whileFalse: 
				[ (ctxt tempAt: 2) ifNil:
					[ ctxt tempAt: 2 put: nil.
					unwindBlock := ctxt tempAt: 1.
					thisContext terminateTo: ctxt.
					unwindBlock value ]].
			thisContext terminateTo: nil.
			self suspend ]
		 ifFalse: [
			"Always suspend the process first so it doesn't accidentally get woken up"
			 oldList := self suspend.
			suspendedContext ifNotNil:[
				"Figure out if we are terminating the process while waiting in Semaphore>>critical:
				In this case, pop the suspendedContext so that we leave the ensure: block inside
				Semaphore>>critical: without signaling the semaphore."
				(oldList class == Semaphore and:[
					suspendedContext method == (Semaphore compiledMethodAt: #critical:)]) ifTrue:[
						suspendedContext := suspendedContext home.].

			  "If we are terminating a process halfways through an unwind, try to complete that unwind block first."
				(suspendedContext findNextUnwindContextUpTo: nil) ifNotNil: [ :outer |
				(suspendedContext findContextSuchThat: [ :c | c closure == (outer tempAt: 1)])
					ifNotNil: [ :inner |
						"This is an unwind block currently under evaluation"
						suspendedContext runUntilErrorOrReturnFrom: inner ]].

			ctxt := self popTo: suspendedContext bottomContext.
			ctxt == suspendedContext bottomContext ifFalse: [
				self debug: ctxt title: 'Unwind error during termination']] ].
! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:05'!
activateReturn: aContext value: value
	"Activate 'aContext return: value', so execution will return to aContext's sender"
	self suspend.
	^ suspendedContext := suspendedContext activateReturn: aContext value: value! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:01'!
complete: aContext 
	"Run self until aContext is popped or an unhandled error is raised.  Return self's new top context, unless an unhandled error was raised then return the signaler context (rather than open a debugger)."
	
	| ctxt pair error |
	self suspend.
	ctxt := suspendedContext.
	suspendedContext := nil.  "disable this process while running its stack in active process below"
	pair := ctxt runUntilErrorOrReturnFrom: aContext.
	suspendedContext := pair first.
	error := pair second.
	error ifNotNil: [^ error signalerContext].
	^ suspendedContext! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 6/14/2010 16:06'!
install: aContext 
	"Replace the suspendedContext with aContext."

	(Processor isActive: self)
		ifTrue: [^self error: 'An active process cannot install contexts'].
	suspendedContext := aContext! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 6/14/2010 16:07'!
popTo: aContext 
	"Pop self down to aContext by remote returning from aContext's callee.  Unwind blocks will be executed on the way.
	This is done by pushing a new context on top which executes 'aContext callee return' then resuming self until aContext is reached.  This way any errors raised in an unwind block will get handled by senders in self and not by senders in the activeProcess.
	If an unwind block raises an error that is not handled then the popping stops at the error and the signalling context is returned, othewise aContext is returned."

	| callee |
	(Processor isActive: self)
		ifTrue: [^ self error: 'An active process cannot pop contexts'].
	callee := (self calleeOf: aContext) ifNil: [^ aContext].  "aContext is on top"
	^ self return: callee value: callee receiver! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 6/14/2010 16:08'!
popTo: aContext value: aValue
	"Replace the suspendedContext with aContext, releasing all contexts 
	between the currently suspendedContext and it."

	| callee |
	(Processor isActive: self)
		ifTrue: [^ self error: 'An active process cannot pop contexts'].
	callee := (self calleeOf: aContext) ifNil: [^ self].  "aContext is on top"
	self return: callee value: aValue! !
!Process class methodsFor: 'accessing' stamp: 'ssa 3/25/2010 15:11'!
semaForSuspensions

	SemaForSuspensions isNil ifTrue:[SemaForSuspensions := Semaphore forMutualExclusion].
	^SemaForSuspensions! !
!Process methodsFor: 'debugging' stamp: 'dmu 6/14/2010 16:09'!
debug: context title: title full: bool
	"Open debugger on self with context shown on top"

	| topCtxt |
	topCtxt :=  self == Processor thisProcess  ifTrue: [thisContext]
		ifFalse: [
			self suspend.  
			self suspendedContextWaitingIfNecessary].
	(topCtxt hasContext: context) ifFalse: [^ self error: 'context not in process'].
	UIManager default onDebug: self context: context title: title full: bool
! !
!Process methodsFor: 'debugging' stamp: 'dmu 9/17/2010 12:03'!
debugWithTitle: title
	"Open debugger on self"

	| context |
	context := self == Processor thisProcess  ifTrue: [thisContext] ifFalse: [ self suspend.  self suspendedContextWaitingIfNecessary].
	self debug: context title: title full: true.
! !
!Process methodsFor: 'signaling' stamp: 'ssa 2/17/2009 22:31'!
pvtSignal: anException list: aList
	"Private. This method is used to signal an exception from another
	process...the receiver must be the active process.  If the receiver 
	was previously waiting on a Semaphore, then return the process
	to the waiting state after signaling the exception and if the Semaphore
	has not been signaled in the interim"

	"Since this method is not called in a normal way, we need to take care
	that it doesn't directly return to the caller (because I believe that could
	have the potential to push an unwanted object on the caller's stack)."

	| blocker |
	self == Processor thisProcess ifFalse: [^self].
	self suspend.
	anException signal.
	blocker := Semaphore new.
	[self suspend.
	suspendedContext := suspendedContext swapSender: nil.
	aList class == Semaphore 
		ifTrue:
			[aList isSignaled
				ifTrue: 
					[aList wait.  "Consume the signal that would have restarted the receiver"
					self resume]
				ifFalse:
					["Add us back to the Semaphore's list (and remain blocked)"
					myList := aList.
					aList add: self]]
		ifFalse: [self resume]] fork.
	blocker wait.


! !
!Process methodsFor: 'signaling' stamp: 'dmu 6/14/2010 16:11'!
signalException: anException
	"Signal an exception in the receiver process...if the receiver is currently
	suspended, the exception will get signaled when the receiver is resumed.  If 
	the receiver is blocked on a Semaphore, it will be immediately re-awakened
	and the exception will be signaled; if the exception is resumed, then the receiver
	will return to a blocked state unless the blocking Semaphore has excess signals"
	| oldList |
	"If we are the active process, go ahead and signal the exception"
	self == Processor thisProcess  ifTrue: [^anException signal].

	"Suspend myself first to ensure that I won't run away in the
	midst of the following modifications."
	myList ifNotNil:[oldList := self suspend].

	"Add a new method context to the stack that will signal the exception"
	suspendedContext := MethodContext
		sender: suspendedContext
		receiver: self
		method: (self class lookupSelector: #pvtSignal:list:)
		arguments: (Array with: anException with: oldList).

	"If we are on a list to run, then suspend and restart the receiver 
	(this lets the receiver run if it is currently blocked on a semaphore).  If
	we are not on a list to be run (i.e. this process is suspended), then when the
	process is resumed, it will signal the exception"

	oldList ifNotNil: [self resume].
! !
!Process methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:40'!
coreMask
	^ coreMask! !
!Process methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:40'!
coreMask: m
	coreMask := m! !
!Process methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:41'!
hostCore
	^ hostCore! !
!Process methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:31'!
isRunning
	Processor thisProcess == self ifTrue: [^ true].
	self isActiveProcess ifTrue: [^ true].
	myList ifNil: [^ false].
	^ myList class ~~ Semaphore! !
!Process methodsFor: 'RVM' stamp: 'ssa 3/2/2010 18:23'!
nilMyListUnlessRVM
	Processor areRunningProcessesInSchedulerLists ifFalse: [
		"primitiveSuspend will use myList to remove from list and will nil it out"
		myList := nil.
	]! !
!ProcessBrowser methodsFor: 'stack list' stamp: 'dmu 6/14/2010 16:17'!
updateStackList: depth 
	| suspendedContext oldHighlight |
	selectedProcess
		ifNil: [^ self changeStackListTo: nil].
	(stackList notNil and: [ stackListIndex > 0 ])
		ifTrue: [oldHighlight := stackList at: stackListIndex].
	selectedProcess == Processor thisProcess
		ifTrue: [self
				changeStackListTo: (thisContext stackOfSize: depth)]
		ifFalse: [suspendedContext := selectedProcess suspendedContext.
			suspendedContext
				ifNil: [self changeStackListTo: nil]
				ifNotNil: [self
						changeStackListTo: (suspendedContext stackOfSize: depth)]].
	self
		stackListIndex: (stackList
				ifNil: [0]
				ifNotNil: [stackList indexOf: oldHighlight])! !
!ProcessBrowser class methodsFor: 'class initialization' stamp: 'dmu 6/14/2010 16:17'!
registerWellKnownProcesses
	"Associate each well-known process with a nickname and two flags: allow-stop, and allow-debug.
	Additional processes may be added to this list as required"

	WellKnownProcesses := OrderedCollection new.
	self registerWellKnownProcess: []
		label: 'no process'
		allowStop: false
		allowDebug: false.
	self registerWellKnownProcess: [Smalltalk lowSpaceWatcherProcess]
		label: 'the low space watcher'
		allowStop: false
		allowDebug: false.
	self registerWellKnownProcess: [WeakArray runningFinalizationProcess]
		label: 'the WeakArray finalization process'
		allowStop: false
		allowDebug: false.
	self registerWellKnownProcess: [Processor thisProcess]
		label: 'the UI process'
		allowStop: false
		allowDebug: true.
	self registerWellKnownProcess: [Processor backgroundProcess]
		label: 'the idle process'
		allowStop: false
		allowDebug: false.
	self registerWellKnownProcess: [Sensor interruptWatcherProcess]
		label: 'the user interrupt watcher'
		allowStop: false
		allowDebug: false.
	self registerWellKnownProcess: [Sensor eventTicklerProcess]
		label: 'the event tickler'
		allowStop: false
		allowDebug: false.
	self registerWellKnownProcess: [Project uiProcess]
		label: 'the inactive Morphic UI process'
		allowStop: false
		allowDebug: false.
	self
		registerWellKnownProcess: [ Smalltalk globals at: #SoundPlayer ifPresent: [ :sp | sp playerProcess ] ]
		label: 'the Sound Player'
		allowStop: false
		allowDebug: false.
	self
		registerWellKnownProcess: [ Smalltalk globals at: #CPUWatcher ifPresent: [ :cw | cw currentWatcherProcess ] ]
		label: 'the CPUWatcher'
		allowStop: false
		allowDebug: false
! !
!StandardToolSet class methodsFor: 'debugging' stamp: 'dmu 6/14/2010 16:17'!
debugError: anError
	"Handle an otherwise unhandled error"
	^Processor thisProcess
		debug: anError signalerContext
		title: anError description! !
!TestCase methodsFor: 'extensions' stamp: 'dmu 6/14/2010 16:18'!
should: aBlock notTakeMoreThan: aDuration
    "Evaluate aBlock in a forked process and if it takes more than anInteger milliseconds
    to run we terminate the process and report a test failure.  It'' important to
    use the active process for the test failure so that the failure reporting works correctly
    in the context of the exception handlers."

    | succeeded evaluationProcess result delay testProcess |

    succeeded := false.
    delay := Delay forDuration: aDuration.
    testProcess := Processor thisProcess.
    "Create a new process to evaluate aBlock"
    evaluationProcess := [
        [result := aBlock value.
        succeeded := true.] on: Exception do: [succeeded := false] .
 		delay unschedule.
        testProcess resume ] newProcess name: 'Process to evaluate should: notTakeMoreThanMilliseconds:'.
	evaluationProcess resume.
    "Wait the milliseconds they asked me to"
    delay wait.
    "After this point either aBlock was evaluated if succeeded is not still nil"
    succeeded ifNil: [
        evaluationProcess terminate.
        self assert: false description: ('Block evaluation took more than the expected <1p>' expandMacrosWith: aDuration)].
	"If tests in block failed, rerun block in this context, so it's handled correctly"
	succeeded ifFalse: [^aBlock value].
   
    ^result! !
!SemaphoreTest methodsFor: 'private' stamp: 'dmu 6/14/2010 16:17'!
criticalError
	Processor thisProcess terminate! !
!TestFailure methodsFor: 'camp smalltalk' stamp: 'dmu 6/14/2010 16:18'!
defaultAction

	Processor thisProcess
		debug: self signalerContext
		title: self description! !
!Utilities class methodsFor: 'fetching updates' stamp: 'dmu 6/14/2010 16:19'!
retrieveUrls: urls ontoQueue: queue withWaitSema: waitSema 
	"download the given list of URLs. The queue will be loaded alternately  
	with url's and with the retrieved contents. If a download fails, the  
	contents will be #failed. If all goes well, a special pair with an empty  
	URL and the contents #finished will be put on the queue. waitSema is  
	waited on every time before a new document is downloaded; this keeps 
	the downloader from getting too far  ahead of the main process"
	"kill the existing downloader if there is one"
	| updateCounter |
	UpdateDownloader
		ifNotNil: [UpdateDownloader terminate].
	updateCounter := 0.
	"fork a new downloading process"
	UpdateDownloader := [
		'Downloading updates' displayProgressAt: Sensor cursorPoint from: 0 to: urls size during: [:bar |
			urls
				do: [:url | | front canPeek doc | 
					waitSema wait.
					queue nextPut: url.
					doc := HTTPClient httpGet: url.
					doc isString
						ifTrue: [queue nextPut: #failed.
							UpdateDownloader := nil.
							Processor thisProcess terminate]
						ifFalse: [canPeek := 120 min: doc size.
							front := doc next: canPeek.  doc skip: -1 * canPeek.
							(front beginsWith: '<!!DOCTYPE') ifTrue: [
								(front includesSubString: 'Not Found') ifTrue: [
									queue nextPut: #failed.
									UpdateDownloader := nil.
									Processor thisProcess terminate]]].
						UpdateDownloader ifNotNil: [queue nextPut: doc. updateCounter := updateCounter + 1. bar value: updateCounter]]].
			queue nextPut: ''.
			queue nextPut: #finished.
			UpdateDownloader := nil] newProcess.
	UpdateDownloader priority: Processor userInterruptPriority.
	"start the process running"
	UpdateDownloader resume! !
!Paragraph reorganize!
('accessing' backgroundColor clippingRectangle clippingRectangle: compositionRectangle compositionRectangle: destinationForm fillColor fillColor: height indentationOfLineIndex:ifBlank: mask numberOfLines replaceFrom:to:with:displaying: rule rule: stringAtLineNumber: text:)
('alignment' centered justified leftFlush rightFlush toggleAlignment)
('character location' characterBlockAtPoint: characterBlockForIndex: defaultCharacterBlock)
('composition' composeAll wrappingBox:clippingBox:)
('converting' asForm asString asText)
('display box access' boundingBox computeBoundingBox)
('displaying' displayOn: displayOn:at: displayOn:at:clippingBox:rule:fillColor: displayOn:transformation:clippingBox:align:with:rule:fillColor:)
('indicating' flash outline)
('scrolling' scrollBy: scrollBy:withSelectionFrom:to: scrollDelta scrollUncheckedBy:withSelectionFrom:to:)
('selecting' caretFormForDepth: clickAt:for:controller: extendSelectionAt:endBlock: extendSelectionMark:pointBlock: hiliteRect: mouseMovedFrom:pivotBlock:showingCaret: mouseSelect mouseSelect: reverseFrom:to: selectionRectsFrom:to:)
('utilities' clearVisibleRectangle deepCopy destinationForm: fit lines: visibleRectangle)
('RVM' destFormSema:)
('private' bottomAtLineIndex: compositionRectangle:text:style:offset: compositionRectangleDelta displayLines: displayLines:affectedRectangle: displayOn:lines: leftMarginForCompositionForLine: leftMarginForDisplayForLine:alignment: lineAt:put: lineIndexOfCharacterIndex: lineIndexOfTop: lines moveBy: rightMarginForComposition rightMarginForDisplay setWithText:style: setWithText:style:compositionRectangle:clippingRectangle: setWithText:style:compositionRectangle:clippingRectangle:foreColor:backColor: topAtLineIndex: topAtLineIndex:using:and: trimLinesTo: updateCompositionHeight withClippingRectangle:do:)
!

!BitBlt methodsFor: 'accessing' stamp: 'dmu 4/4/2009 00:24'!
copyBitsOnMain
	"Primitive. Perform the movement of bits from the source form to the 
	destination form. Fail if any variables are not of the right type (Integer, 
	Float, or Form) or if the combination rule is not implemented. 
	In addition to the original 16 combination rules, this BitBlt supports
	16	fail (to simulate paint)
	17	fail (to simulate mask)
	18	sourceWord + destinationWord
	19	sourceWord - destinationWord
	20	rgbAdd: sourceWord with: destinationWord
	21	rgbSub: sourceWord with: destinationWord
	22	rgbDiff: sourceWord with: destinationWord
	23	tallyIntoMap: destinationWord
	24	alphaBlend: sourceWord with: destinationWord
	25	pixPaint: sourceWord with: destinationWord
	26	pixMask: sourceWord with: destinationWord
	27	rgbMax: sourceWord with: destinationWord
	28	rgbMin: sourceWord with: destinationWord
	29	rgbMin: sourceWord bitInvert32 with: destinationWord
"
	<primitive: 'primitiveCopyBits' module: 'BitBltPlugin'>

	"Check for compressed source, destination or halftone forms"
	(combinationRule >= 30 and: [combinationRule <= 31]) ifTrue:
		["No alpha specified -- re-run with alpha = 1.0"
		^ self copyBitsTranslucent: 255].
	((sourceForm isForm) and: [sourceForm unhibernate])
		ifTrue: [^ self copyBits].
	((destForm isForm) and: [destForm unhibernate])
		ifTrue: [^ self copyBits].
	((halftoneForm isForm) and: [halftoneForm unhibernate])
		ifTrue: [^ self copyBits].

	"Check for unimplmented rules"
	combinationRule = Form oldPaint ifTrue: [^ self paintBits].
	combinationRule = Form oldErase1bitShape ifTrue: [^ self eraseBits].

	"Check if BitBlt doesn't support full color maps"
	(colorMap notNil and:[colorMap isColormap]) ifTrue:[
		colorMap := colorMap colors.
		^self copyBits].
	"Check if clipping gots us way out of range"
	self clipRange ifTrue:[^self copyBits].

	self error: 'Bad BitBlt arg (Fraction?); proceed to convert.'.
	"Convert all numeric parameters to integers and try again."
	destX := destX asInteger.
	destY := destY asInteger.
	width := width asInteger.
	height := height asInteger.
	sourceX := sourceX asInteger.
	sourceY := sourceY asInteger.
	clipX := clipX asInteger.
	clipY := clipY asInteger.
	clipWidth := clipWidth asInteger.
	clipHeight := clipHeight asInteger.
	^ self copyBitsAgain! !
!BitBlt methodsFor: 'copying' stamp: 'dmu 4/4/2009 00:20'!
copyBitsLocally
	"Primitive. Perform the movement of bits from the source form to the 
	destination form. Fail if any variables are not of the right type (Integer, 
	Float, or Form) or if the combination rule is not implemented. 
	In addition to the original 16 combination rules, this BitBlt supports
	16	fail (to simulate paint)
	17	fail (to simulate mask)
	18	sourceWord + destinationWord
	19	sourceWord - destinationWord
	20	rgbAdd: sourceWord with: destinationWord
	21	rgbSub: sourceWord with: destinationWord
	22	rgbDiff: sourceWord with: destinationWord
	23	tallyIntoMap: destinationWord
	24	alphaBlend: sourceWord with: destinationWord
	25	pixPaint: sourceWord with: destinationWord
	26	pixMask: sourceWord with: destinationWord
	27	rgbMax: sourceWord with: destinationWord
	28	rgbMin: sourceWord with: destinationWord
	29	rgbMin: sourceWord bitInvert32 with: destinationWord
"
	<primitive: 'primitiveCopyBitsLocally'>

	"Check for compressed source, destination or halftone forms"
	(combinationRule >= 30 and: [combinationRule <= 31]) ifTrue:
		["No alpha specified -- re-run with alpha = 1.0"
		^ self copyBitsTranslucent: 255].
	((sourceForm isForm) and: [sourceForm unhibernate])
		ifTrue: [^ self copyBits].
	((destForm isForm) and: [destForm unhibernate])
		ifTrue: [^ self copyBits].
	((halftoneForm isForm) and: [halftoneForm unhibernate])
		ifTrue: [^ self copyBits].

	"Check for unimplmented rules"
	combinationRule = Form oldPaint ifTrue: [^ self paintBits].
	combinationRule = Form oldErase1bitShape ifTrue: [^ self eraseBits].

	"Check if BitBlt doesn't support full color maps"
	(colorMap notNil and:[colorMap isColormap]) ifTrue:[
		colorMap := colorMap colors.
		^self copyBits].
	"Check if clipping gots us way out of range"
	self clipRange ifTrue:[^self copyBits].

	self error: 'Bad BitBlt arg (Fraction?); proceed to convert.'.
	"Convert all numeric parameters to integers and try again."
	destX := destX asInteger.
	destY := destY asInteger.
	width := width asInteger.
	height := height asInteger.
	sourceX := sourceX asInteger.
	sourceY := sourceY asInteger.
	clipX := clipX asInteger.
	clipY := clipY asInteger.
	clipWidth := clipWidth asInteger.
	clipHeight := clipHeight asInteger.
	^ self copyBitsAgain! !
!BitBlt methodsFor: 'line drawing' stamp: 'dmu 4/3/2009 23:01'!
drawLoopLocallyX: xDelta Y: yDelta 
	"Primitive. Implements the Bresenham plotting algorithm (IBM Systems
	Journal, Vol. 4 No. 1, 1965). It chooses a principal direction, and
	maintains a potential, P. When P's sign changes, it is time to move in
	the minor direction as well. This particular version does not write the
	first and last points, so that these can be called for as needed in client code.
	Optional. See Object documentation whatIsAPrimitive."
	| |
	<primitive: 'primitiveDrawLoopLocally'>
self primitiveFailed! !
!BitBlt methodsFor: 'line drawing' stamp: 'ssa 4/3/2009 22:36'!
globalDrawLoopX: xDelta Y: yDelta 
	"Primitive. Implements the Bresenham plotting algorithm (IBM Systems
	Journal, Vol. 4 No. 1, 1965). It chooses a principal direction, and
	maintains a potential, P. When P's sign changes, it is time to move in
	the minor direction as well. This particular version does not write the
	first and last points, so that these can be called for as needed in client code.
	Optional. See Object documentation whatIsAPrimitive."
	| dx dy px py P |
	<primitive: 'primitiveDrawLoop' module: 'BitBltPlugin'>
	dx := xDelta sign.
	dy := yDelta sign.
	px := yDelta abs.
	py := xDelta abs.
	"self copyBits."
	py > px
		ifTrue: 
			["more horizontal"
			P := py // 2.
			1 to: py do: 
				[:i |
				destX := destX + dx.
				(P := P - px) < 0 ifTrue: 
						[destY := destY + dy.
						P := P + py].
				i < py ifTrue: [self copyBits]]]
		ifFalse: 
			["more vertical"
			P := px // 2.
			1 to: px do:
				[:i |
				destY := destY + dy.
				(P := P - py) < 0 ifTrue: 
						[destX := destX + dx.
						P := P + px].
				i < px ifTrue: [self copyBits]]]! !
!BitBlt methodsFor: 'line drawing' stamp: 'ssa 4/3/2009 22:52'!
localDrawLoopX: xDelta Y: yDelta 
	"Primitive"
	<primitive: 'primitiveDrawLoopLocally'>
	^self primitiveFailed! !

!BlockContext methodsFor: 'scheduling' stamp: 'dmu 4/7/2009 02:38'!
forkOn: aCore
	"Create and schedule a Process running the code in the receiver."

	^ self newProcess resumeOn: aCore! !
!BlockContext methodsFor: 'scheduling' stamp: 'ssa 4/8/2009 20:09'!
forkOn: aCore with: anObject
	"Create and schedule a Process running the code in the receiver."

	^ (self newProcessWith: anObject) resumeOn: aCore! !
!BlockContext methodsFor: 'scheduling' stamp: 'ssa 4/8/2009 20:08'!
forkOn: aCore with: anObject at: aPriority
	"Create and schedule a Process running the code in the receiver."

	| proc |
	proc := self newProcessWith: anObject.
	proc priority: aPriority.
	^proc resumeOn: aCore! !
!BlockContext methodsFor: 'scheduling' stamp: 'dmu 4/7/2009 02:34'!
forkWith: anObject
	"Create and schedule a Process running the code in the receiver."

	^ (self newProcessWith: anObject) resume! !
!BlockContext methodsFor: 'scheduling' stamp: 'dmu 4/7/2009 02:33'!
newProcessWith: anObject
	"Answer a Process running the code in the receiver. The process is not 
	scheduled."
	<primitive: 19> "Simulation guard"
	^Process
		forContext: 
			[self value: anObject.
			Processor terminateActive]
		priority: Processor activePriority! !
!Delay class methodsFor: 'snapshotting' stamp: 'dmu 5/25/2010 11:02'!
startUp
	"Restart active delay, if any, when resuming a snapshot."

	DelaySuspended ifFalse:[^self error: 'Trying to activate Delay twice'].
	DelaySuspended := false.
	self restoreResumptionTimes.
	AccessProtect := Semaphore forMutualExclusion
! !
!Delay methodsFor: 'private' stamp: 'StefanMarr 11/9/2010 23:38' prior: 47886371!
schedule
	"Schedule this delay"
	
	| delayDelivered |
	delayDelivered := false.
	
	beingWaitedOn ifTrue: [^self error: 'This Delay has already been scheduled.'].
	resumptionTime := Time millisecondClockValue + delayDuration.
	
	[AccessProtect critical: [
		ScheduledDelay ifNil: [
			ScheduledDelay := self.
			TimingSemaphore signal.
			delayDelivered := true.
		]
	]. 	delayDelivered	] whileFalse.! !
!Delay methodsFor: 'private' stamp: 'StefanMarr 11/9/2010 23:39' prior: 47885691!
unschedule
	| delayDelivered |
	delayDelivered := false.
	
	[AccessProtect critical: [
		ScheduledDelay ifNil: [
			FinishedDelay := self.
			TimingSemaphore signal.
			delayDelivered := true.
		]
	]. delayDelivered ] whileFalse.! !
!Delay class methodsFor: 'timer process' stamp: 'StefanMarr 11/9/2010 17:44' prior: 19672467!
handleTimerEvent
	"Handle a timer event; which can be either:
		- a schedule request (ScheduledDelay notNil)
		- an unschedule request (FinishedDelay notNil)
		- a timer signal (not explicitly specified)
	We check for timer expiry every time we get a signal."
	| nowTick nextTick |
	"Wait until there is work to do."
	TimingSemaphore wait.

	"Process any schedule requests"
	ScheduledDelay ifNotNil:[
		"Schedule the given delay"
		self scheduleDelay: ScheduledDelay.
		ScheduledDelay := nil.
	].

	"Process any unschedule requests"
	FinishedDelay ifNotNil:[
		self unscheduleDelay: FinishedDelay.
		FinishedDelay := nil.
	].

	"Check for clock wrap-around."
	nowTick := Time millisecondClockValue.
	nowTick < ActiveDelayStartTime ifTrue: [
		"clock wrapped"
		self saveResumptionTimes.
		self restoreResumptionTimes.
	].
	ActiveDelayStartTime := nowTick.

	"Signal any expired delays"
	[ActiveDelay notNil and:[nowTick >= ActiveDelay resumptionTime]] whileTrue:[
		ActiveDelay signalWaitingProcess.
		SuspendedDelays isEmpty 
			ifTrue: [ActiveDelay := nil] 
			ifFalse:[ActiveDelay := SuspendedDelays removeFirst].
	].

	"And signal when the next request is due. We sleep at most 1sec here
	as a soft busy-loop so that we don't accidentally miss signals."
	nextTick := nowTick + 1000.
	ActiveDelay ifNotNil:[nextTick := nextTick min: ActiveDelay resumptionTime].
	nextTick := nextTick min: SmallInteger maxVal.

	"Since we have processed all outstanding requests, reset the timing semaphore so
	that only new work will wake us up again. Do this RIGHT BEFORE setting the next
	wakeup call from the VM because it is only signaled once so we mustn't miss it."
     "No!!!! If running multicore, TimingSemaphore may have already been signalled!!!!
      Do not reset signals, because then we will miss it -- dmu 9/26/10"
     RVMPrimitives coreCount > 1 ifFalse: [TimingSemaphore initSignals].
     "Do not wait till the next Delay if Semaphore already signaled. -- dmu 9/26/10"
     TimingSemaphore isSignaled ifFalse: [
          Delay primSignal: TimingSemaphore atMilliseconds: nextTick.
     ].

	"This last test is necessary for the obscure case that the msecs clock rolls over
	after nowTick has been computed (unlikely but not impossible). In this case we'd
	wait for MillisecondClockMask msecs (roughly six days) or until another delay gets
	scheduled (which may not be any time soon). In any case, since handling the
	condition is easy, let's just deal with it"
	Time millisecondClockValue < nowTick ifTrue:[TimingSemaphore signal]. "retry"
! !
!Process methodsFor: 'accessing' stamp: 'dmu 3/8/2010 20:26'!
hostCore: anObject
	"Set the value of hostCore"

	hostCore := anObject! !
!Process methodsFor: 'accessing' stamp: 'dmu 3/8/2010 20:26'!
myList
	"Answer the value of myList"

	myList isNil ifTrue:[self myList: nil].
	^ myList! !
!Process methodsFor: 'accessing' stamp: 'dmu 3/8/2010 20:26'!
myList: anObject
	"Set the value of myList"

	myList := anObject! !
!Process methodsFor: 'changing process state' stamp: 'dmu 3/2/2010 17:02'!
primitiveSuspend
	"Primitive. Stop the process that self represents in such a way 
	that it can be restarted at a later time (by sending #resume).
	ASSUMES self is the active process.
	Essential. See Object documentation whatIsAPrimitive."

	"Debugging code below causes terminated running processes to seem not terminated. -- dmu 3/2/10"
	"(myList isNil and: [RVMPrimitives isRVM]) ifTrue:[self halt]."
	<primitive: 88>
	self primitiveFailed! !
!Process methodsFor: 'changing process state' stamp: 'dmu 4/7/2009 02:41'!
resumeOn: aCore
  self useOnlyCore: aCore.
  self resume! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:04'!
return: aContext value: value
	"Pop thread down to aContext's sender.  Execute any unwind blocks on the way.  See #popTo: comment and #runUntilErrorOrReturnFrom: for more details."
        self suspend.
	suspendedContext == aContext ifTrue: [
		^ suspendedContext := aContext return: value from: aContext].
	self activateReturn: aContext value: value.
	^ self complete: aContext.
! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:03'!
step
         self suspend.
	^ suspendedContext := suspendedContext step! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:04'!
stepToCallee
	"Step until top context changes"

	| ctxt |
	self suspend.
	ctxt := suspendedContext.
	[ctxt == suspendedContext] whileTrue: [
		suspendedContext := suspendedContext step].
	^ suspendedContext! !
!Process methodsFor: 'changing suspended state' stamp: 'dmu 12/2/2008 14:05'!
stepToSendOrReturn
self suspend.
	^ suspendedContext := suspendedContext stepToSendOrReturn! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 02:57'!
avoidCore: anIndex
	"Force this process to avoid this core (0-55)"
	self coreMask: (self coreMask bitClear: (1 bitShift: anIndex))! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 03:49'!
avoidCores: aCollectionOfIndicies
	"Force this process to avoid these cores (0-55)"
	| mask |
	mask := 0.
	aCollectionOfIndicies do:[:index| mask := mask bitOr: (1 bitShift: index)].
	self coreMask: (self coreMask bitClear:mask)! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 02:59'!
useAdditionalCore: anIndex
	"Force this process to only urn on this core (0-55)"
	self coreMask: (self coreMask bitOr:(1 bitShift: anIndex))! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 03:50'!
useAdditionalCores: aCollectionOfIndicies
	"Allow this process to run on these additional cores (0-55)"
	| mask |
	mask := 0.
	aCollectionOfIndicies do:[:index| mask := mask bitOr: (1 bitShift: index)].
	self coreMask: (self coreMask bitOr:mask)! !
!Process methodsFor: 'core assignment' stamp: 'dmu 5/5/2009 01:32'!
useOnlyCore: anIndex
	"Force this process to only run on this core (0-55)"
	self coreMask: (1 bitShift: anIndex)! !
!Process methodsFor: 'core assignment' stamp: 'ssa 2/26/2009 03:02'!
useOnlyCores: aCollectionOfIndicies
	"Force this process to only run on these cores (0-55)"
	| mask |
	mask := 0.
	aCollectionOfIndicies do:[:index| mask := mask bitOr: (1 bitShift: index)].
	self coreMask: mask! !
!Process methodsFor: 'core assignment' stamp: 'dmu 1/25/2010 11:06'!
useOnlyMainCore
	RVMPrimitives isRVM ifTrue: [self useOnlyCore: (RVMPrimitives getMainRank)]! !
!Process methodsFor: 'signaling' stamp: 'ssa 2/17/2009 22:30'!
signal: anException
	"Signal an exception in the receiver process...if the receiver is currently
	suspended, the exception will get signaled when the receiver is resumed.  If 
	the receiver is blocked on a Semaphore, it will be immediately re-awakened
	and the exception will be signaled; if the exception is resumed, then the receiver
	will return to a blocked state unless the blocking Semaphore has excess signals"

	"If we are the active process, go ahead and signal the exception"
	self == Processor thisProcess ifTrue: [^anException signal].

        self suspend.

	"Add a new method context to the stack that will signal the exception"
	suspendedContext := MethodContext
		sender: suspendedContext
		receiver: self
		method: (self class methodDict at: #pvtSignal:list:)
		arguments: (Array with: anException with: myList).

	"If we are on a list to run, then suspend and restart the receiver 
	(this lets the receiver run if it is currently blocked on a semaphore).  If
	we are not on a list to be run (i.e. this process is suspended), then when the
	process is resumed, it will signal the exception"

	myList ifNotNil: [self suspend; resume].! !
!Process class methodsFor: 'instance creation' stamp: 'dmu 3/24/2010 15:46'!
forContext: aContext priority: anInteger 
	"Answer an instance of me that has suspended aContext at priority 
	anInteger."

	| newProcess |
	newProcess := self new.
	newProcess suspendedContext: aContext.
	newProcess priority: anInteger.
	[newProcess coreMask:(1 bitShift: 27)].
	^newProcess! !
!Process class methodsFor: 'instance creation' stamp: 'ssa 2/26/2009 02:45'!
forContext: aContext priority: anInteger coreMask: anIntegerMask
	"Answer an instance of me that has suspended aContext at priority 
	anInteger using this coreMask."

	| newProcess |
	newProcess := self forContext: aContext priority: anInteger.
	newProcess coreMask:anIntegerMask.
	^newProcess! !
!ProcessorScheduler methodsFor: 'removing' stamp: 'ssa 6/11/2010 14:37'!
removeAllPossible
	"Terminate and remove all processes that you can.
	This should leave the standard set only"
	self terminatableProcesses print do:[:proc| proc terminate]! !
!ProcessorScheduler methodsFor: 'removing' stamp: 'ssa 6/11/2010 14:31'!
terminatableProcesses
	"Answer all current processes that may be user terminated like in the ProcessBrowser"
	"self terminatableProcesses"
	| processList |
	Smalltalk garbageCollectMost. "lose defunct processes"

	processList := Process allSubInstances
				reject: [:each | each isTerminated].
	processList := processList
				sortBy: [:a :b | a priority >= b priority].
	processList := WeakArray withAll: processList.
	^processList select:[:proc| (ProcessBrowser nameAndRulesFor: proc) at: 2]! !
!Project methodsFor: 'menu messages' stamp: 'dmu 11/25/2008 00:23'!
enterForEmergencyRecovery
	"This version of enter invokes an absolute minimum of mechanism.
	An unrecoverable error has been detected in an isolated project.
	It is assumed that the old changeSet has already been revoked.
	No new process gets spawned here.  This will happen in the debugger."

	self isCurrentProject ifTrue: [^ self].
	CurrentProject saveState.
	CurrentProject := self.
	Display newDepthNoRestore: displayDepth.
	Smalltalk newChanges: changeSet.
	TranscriptStream newTranscript: transcript.


	world isMorph
		ifTrue:
			["Entering a Morphic project"
			World := world.
			world install.
			world triggerOpeningScripts]
		ifFalse:
			["Entering an MVC project"
			World := nil.
			Smalltalk at: #ScheduledControllers put: world.
			ScheduledControllers restore].
	UIProcess := Processor thisProcess.
! !

!StandardFileStream methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:07'!
interlock
	interlock ifNil: [self interlock: Semaphore forMutualExclusion].
	^ interlock! !
!StandardFileStream methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:07'!
interlock: aSemaphore
	interlock := aSemaphore! !
!StandardFileStream methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:14'!
resetInterlock
	self interlock signal.
	self interlock: nil! !
!StandardFileStream methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:09'!
safelyDo: aBlock
	^ self interlock critical: aBlock! !
!StandardFileStream class methodsFor: 'RVM' stamp: 'dmu 9/7/2010 14:14'!
resetAllInterlocks
	"self resetAllInterlocks"
	self allSubInstancesDo: [:sfs| sfs resetInterlock]! !

!RemoteString methodsFor: 'accessing' stamp: 'dmu 9/7/2010 17:19'!
text 
	"Answer the receiver's string asText if remote files are enabled.
	Use a read only copy to avoid syntax errors when accessed via
	multiple processes."
	
	| theFile |
	(sourceFileNumber == nil or: [(SourceFiles at: sourceFileNumber) == nil]) ifTrue: [^ nil].
	theFile := (SourceFiles at: sourceFileNumber) readOnlyCopy.
	^[theFile safelyDo: [
	theFile position: filePositionHi.
	theFile position > theFile size ifTrue: [
		self error: 'RemoteString past end of file' ].
	theFile nextChunkText string ]] ensure: [theFile close]! !

!SyntaxError class methodsFor: 'instance creation' stamp: 'dmu 11/25/2008 00:25'!
open: aSyntaxError 
	"Answer a standard system view whose model is an instance of me."
	<primitive: 19>
	"Simulation guard"
	self buildMorphicViewOn: aSyntaxError.
	Project spawnNewProcessIfThisIsUI: Processor activeProcess.
	^ Processor thisProcess suspend! !
!SmalltalkImage methodsFor: 'snapshot and quit' stamp: 'dmu 9/7/2010 14:26'!
snapshot: save andQuit: quit embedded: embeddedFlag
	"Mark the changes file and close all files as part of #processShutdownList.
	If save is true, save the current state of this Smalltalk in the image file.
	If quit is true, then exit to the outer OS shell.
	The latter part of this method runs when resuming a previously saved image. This resume logic checks for a document file to process when starting up."

	| resuming msg |
	Object flushDependents.
	Object flushEvents.
	(SourceFiles at: 2)
		ifNotNil: [ 
			msg := String
				streamContents: [ :s | 
					s
						nextPutAll: '----';
						nextPutAll:
								(save
										ifTrue: [ 
											quit
												ifTrue: [ 'QUIT' ]
												ifFalse: [ 'SNAPSHOT' ] ]
										ifFalse: [ 
											quit
												ifTrue: [ 'QUIT/NOSAVE' ]
												ifFalse: [ 'NOP' ] ]);
						nextPutAll: '----';
						print: Date dateAndTimeNow;
						space;
						nextPutAll: (FileDirectory default localNameFor: self imageName);
						nextPutAll: ' priorSource: ';
						print: LastQuitLogPosition ].
			self assureStartupStampLogged.
			save
				ifTrue: [ 
					(SourceFiles at: 2) safelyDo: [
						LastQuitLogPosition := (SourceFiles at: 2)
							setToEnd;
							position ]].
			self logChange: msg.
			Transcript
				cr;
				show: msg ].
	self processShutDownList: quit.
	Cursor write show.
	save
		ifTrue: [ 
			resuming := embeddedFlag
				ifTrue: [ self snapshotEmbeddedPrimitive ]
				ifFalse: [ self snapshotPrimitive ].	"<-- PC frozen here on image file"
			resuming == false
				ifTrue: [ 
					"Time to reclaim segment files is immediately after a save"
					Smalltalk globals at: #ImageSegment ifPresent: [ :theClass | theClass reclaimObsoleteSegmentFiles ] ]	"guard against failure" ]
		ifFalse: [ resuming := false ].
	quit & (resuming == false)
		ifTrue: [ self quitPrimitive ].
	Cursor normal show.
	self setGCParameters.
	resuming == true
		ifTrue: [ Smalltalk clearExternalObjects ].
	self processStartUpList: resuming == true.
	resuming == true
		ifTrue: [ self recordStartupStamp ].
	UIManager default onSnapshot.	"Now it's time to raise an error"
	resuming == nil
		ifTrue: [ self error: 'Failed to write image file (disk full?)' ].
	^ resuming! !


Cursor initialize!
Controller initialize!
!BitBlt methodsFor: 'copying' stamp: 'ssa 4/7/2009 13:44'!
OLDcopyBits
	"Primitive. Perform the movement of bits from the source form to the 
	destination form. Fail if any variables are not of the right type (Integer, 
	Float, or Form) or if the combination rule is not implemented. 
	In addition to the original 16 combination rules, this BitBlt supports
	16	fail (to simulate paint)
	17	fail (to simulate mask)
	18	sourceWord + destinationWord
	19	sourceWord - destinationWord
	20	rgbAdd: sourceWord with: destinationWord
	21	rgbSub: sourceWord with: destinationWord
	22	rgbDiff: sourceWord with: destinationWord
	23	tallyIntoMap: destinationWord
	24	alphaBlend: sourceWord with: destinationWord
	25	pixPaint: sourceWord with: destinationWord
	26	pixMask: sourceWord with: destinationWord
	27	rgbMax: sourceWord with: destinationWord
	28	rgbMin: sourceWord with: destinationWord
	29	rgbMin: sourceWord bitInvert32 with: destinationWord
"
	<primitive: 'primitiveCopyBits' module: 'BitBltPlugin'>

	"Check for compressed source, destination or halftone forms"
	(combinationRule >= 30 and: [combinationRule <= 31]) ifTrue:
		["No alpha specified -- re-run with alpha = 1.0"
		^ self copyBitsTranslucent: 255].
	((sourceForm isForm) and: [sourceForm unhibernate])
		ifTrue: [^ self copyBits].
	((destForm isForm) and: [destForm unhibernate])
		ifTrue: [^ self copyBits].
	((halftoneForm isForm) and: [halftoneForm unhibernate])
		ifTrue: [^ self copyBits].

	"Check for unimplmented rules"
	combinationRule = Form oldPaint ifTrue: [^ self paintBits].
	combinationRule = Form oldErase1bitShape ifTrue: [^ self eraseBits].

	"Check if BitBlt doesn't support full color maps"
	(colorMap notNil and:[colorMap isColormap]) ifTrue:[
		colorMap := colorMap colors.
		^self copyBits].
	"Check if clipping gots us way out of range"
	self clipRange ifTrue:[^self copyBits].

	self error: 'Bad BitBlt arg (Fraction?); proceed to convert.'.
	"Convert all numeric parameters to integers and try again."
	destX := destX asInteger.
	destY := destY asInteger.
	width := width asInteger.
	height := height asInteger.
	sourceX := sourceX asInteger.
	sourceY := sourceY asInteger.
	clipX := clipX asInteger.
	clipY := clipY asInteger.
	clipWidth := clipWidth asInteger.
	clipHeight := clipHeight asInteger.
	^ self copyBitsAgain! !
!BitBlt methodsFor: 'copying' stamp: 'dmu 5/10/2009 08:43'!
copyBits
	RVMPrimitives isRVM ifFalse:[^self OLDcopyBits].
 	destForm == Display  ifTrue: [self copyBitsOnMain] ifFalse: [self copyBitsLocally]! !
!BitBlt methodsFor: 'line drawing' stamp: 'dmu 4/10/2009 22:47'!
drawFrom: startPoint to: stopPoint withFirstPoint: drawFirstPoint
	"Draw a line whose end points are startPoint and stopPoint.
	The line is formed by repeatedly calling copyBits at every
	point along the line.  If drawFirstPoint is false, then omit
	the first point so as not to overstrike at line junctions."
	| offset point1 point2 forwards |
	"Always draw down, or at least left-to-right"
	forwards := (startPoint y = stopPoint y and: [startPoint x < stopPoint x])
				or: [startPoint y < stopPoint y].
	forwards
		ifTrue: [point1 := startPoint. point2 := stopPoint]
		ifFalse: [point1 := stopPoint. point2 := startPoint].
	sourceForm == nil ifTrue:
		[destX := point1 x.
		destY := point1 y]
		ifFalse:
		[width := sourceForm width.
		height := sourceForm height.
		offset := sourceForm offset.
		destX := (point1 x + offset x) rounded.
		destY := (point1 y + offset y) rounded].

	"Note that if not forwards, then the first point is the last and vice versa.
	We agree to always paint stopPoint, and to optionally paint startPoint."
	(drawFirstPoint or: [forwards == false  "ie this is stopPoint"])
		ifTrue: [self copyBits].
		(destForm == Display or:[RVMPrimitives isRVM not]) ifTrue: [
	self drawLoopX: (point2 x - point1 x) rounded 
				  Y: (point2 y - point1 y) rounded]
			ifFalse: [self drawLoopLocallyX: (point2 x - point1 x) rounded 
				  Y: (point2 y - point1 y) rounded].
	(drawFirstPoint or: [forwards  "ie this is stopPoint"])
		ifTrue: [self copyBits].
! !
!BitBlt methodsFor: 'line drawing' stamp: 'dmu 4/10/2009 22:47'!
drawLoopX: xDelta Y: yDelta 
	"Primitive. Implements the Bresenham plotting algorithm (IBM Systems
	Journal, Vol. 4 No. 1, 1965). It chooses a principal direction, and
	maintains a potential, P. When P's sign changes, it is time to move in
	the minor direction as well. This particular version does not write the
	first and last points, so that these can be called for as needed in client code.
	Optional. See Object documentation whatIsAPrimitive."
	
		^(destForm == Display  or:[RVMPrimitives isRVM not])
			ifTrue:[self globalDrawLoopX:xDelta Y: yDelta ]
			ifFalse:[self localDrawLoopX:xDelta Y: yDelta ]! !

!ClassDescription methodsFor: 'fileIn/Out' stamp: 'dmu 9/7/2010 14:17'!
classComment: aString stamp: aStamp
	"Store the comment, aString or Text or RemoteString, associated with the class we are organizing.  Empty string gets stored only if had a non-empty one before."

	| ptr header file oldCommentRemoteStr oldComment oldStamp |
	oldComment := self organization classComment.
	oldStamp := self organization commentStamp.
	(aString isKindOf: RemoteString) ifTrue:
		[SystemChangeNotifier uniqueInstance class: self oldComment: oldComment newComment: aString string oldStamp: oldStamp newStamp: aStamp.
		^ self organization classComment: aString stamp: aStamp].

	oldCommentRemoteStr := self organization commentRemoteStr.
	(aString size = 0) & (oldCommentRemoteStr isNil) ifTrue: [^ self organization classComment: nil].
		"never had a class comment, no need to write empty string out"

	ptr := oldCommentRemoteStr ifNil: [0] ifNotNil: [oldCommentRemoteStr sourcePointer].
	SourceFiles ifNotNil: [(file := SourceFiles at: 2) ifNotNil:
		[file safelyDo:
		[file setToEnd; cr; nextPut: $!!.	"directly"
		"Should be saying (file command: 'H3') for HTML, but ignoring it here"
		header := String streamContents: [:strm | strm nextPutAll: self name;
			nextPutAll: ' commentStamp: '.
			aStamp storeOn: strm.
			strm nextPutAll: ' prior: '; nextPutAll: ptr printString].
		file nextChunkPut: header]]].
	self organization classComment: (RemoteString newString: aString onFileNumber: 2) stamp: aStamp.
	SystemChangeNotifier uniqueInstance class: self oldComment: oldComment newComment: aString oldStamp: oldStamp newStamp: aStamp
! !
!CompiledMethod methodsFor: 'source code management' stamp: 'dmu 9/7/2010 14:23'!
putSource: sourceStr fromParseNode: methodNode inFile: fileIndex withPreamble: preambleBlock
	"Store the source code for the receiver on an external file.
	If no sources are available, i.e., SourceFile is nil, then store
	temp names for decompilation at the end of the method.
	If the fileIndex is 1, print on *.sources;  if it is 2, print on *.changes,
	in each case, storing a 4-byte source code pointer at the method end."

	| file remoteString |
	(SourceFiles == nil or: [(file := SourceFiles at: fileIndex) == nil]) ifTrue:
		[^self become: (self copyWithTempsFromMethodNode: methodNode)].

	SmalltalkImage current assureStartupStampLogged.
	
	file safelyDo: [
		file setToEnd.

		preambleBlock value: file.  "Write the preamble"
		remoteString := RemoteString newString: sourceStr onFileNumber: fileIndex toFile: file.
		file nextChunkPut: ' '.
		InMidstOfFileinNotification signal ifFalse: [file flush].
		self checkOKToAdd: sourceStr size at: remoteString position.
		self setSourcePosition: remoteString position inFile: fileIndex].
! !
!RemoteString methodsFor: 'private' stamp: 'dmu 9/7/2010 14:23'!
string: aString onFileNumber: fileNumber
	"Store this as my string if source files exist."
	| theFile |
	(SourceFiles at: fileNumber) == nil ifFalse: 
		[theFile := SourceFiles at: fileNumber.
		theFile safelyDo: [
			theFile setToEnd; cr.
			self string: aString onFileNumber: fileNumber toFile: theFile]
		]! !
!SmalltalkImage methodsFor: 'sources, change log' stamp: 'dmu 9/7/2010 14:26'!
writeRecentCharacters: nCharacters toFileNamed: aFilename
	"Schedule an editable text view on the last n characters of changes."
	| changes |
	changes := SourceFiles at: 2.
	changes safelyDo: [
		changes setToEnd; skip: nCharacters negated.
		(FileStream newFileNamed: aFilename) nextPutAll: (changes next: nCharacters); close; open; edit
	]! !
!SmalltalkImage methodsFor: 'sources, changes log' stamp: 'dmu 9/7/2010 14:25'!
logChange: aStringOrText 
	"Write the argument, aString, onto the changes file."
	| aString changesFile |
	(SourceFiles isNil or: [(SourceFiles at: 2) == nil]) ifTrue: [^ self].
	self assureStartupStampLogged.

	aString := aStringOrText asString.
	(aString findFirst: [:char | char isSeparator not]) = 0
		ifTrue: [^ self].  "null doits confuse replay"
	(changesFile := SourceFiles at: 2).
	changesFile isReadOnly ifTrue:[^self].
	changesFile safelyDo: [
		changesFile setToEnd; cr; cr.
		changesFile nextChunkPut: aString.
			"If want style changes in DoIt, use nextChunkPutWithStyle:, and allow Texts to get here"
		self forceChangesToDisk.
	]! !
!SmalltalkImage methodsFor: 'sources, changes log' stamp: 'dmu 9/7/2010 14:25'!
assureStartupStampLogged
	"If there is a startup stamp not yet actually logged to disk, do it now."
	| changesFile |
	StartupStamp ifNil: [^ self].
	(SourceFiles isNil or: [(changesFile := SourceFiles at: 2) == nil]) ifTrue: [^ self].
	changesFile isReadOnly ifTrue:[^self].
	changesFile safelyDo: [
		changesFile setToEnd; cr; cr.
		changesFile nextChunkPut: StartupStamp asString; cr.
		StartupStamp := nil.
		self forceChangesToDisk.
	]! !

!ClassDescription methodsFor: 'fileIn/Out' stamp: 'dmu 9/7/2010 14:22'!
printMethodChunk: selector withPreamble: doPreamble on: outStream
		moveSource: moveSource toFile: fileIndex
	"Copy the source code for the method associated with selector onto the fileStream.  If moveSource true, then also set the source code pointer of the method."
	| preamble method oldPos newPos sourceFile endPos |
	doPreamble 
		ifTrue: [preamble := self name , ' methodsFor: ' ,
					(self organization categoryOfElement: selector) asString printString]
		ifFalse: [preamble := ''].
	method := self methodDict at: selector ifAbsent:
		[outStream nextPutAll: selector; cr.
		outStream tab; nextPutAll: '** ERROR!!  THIS SCRIPT IS MISSING ** ' translated; cr; cr.
		outStream nextPutAll: '  '.
		^ outStream].

	((method fileIndex = 0
		or: [(SourceFiles at: method fileIndex) == nil])
		or: [(oldPos := method filePosition) = 0])
		ifTrue:
		["The source code is not accessible.  We must decompile..."
		preamble size > 0 ifTrue: [outStream cr; nextPut: $!!; nextChunkPut: preamble; cr].
		outStream nextChunkPut: method decompileString]
		ifFalse:
		[sourceFile := SourceFiles at: method fileIndex.
		sourceFile safelyDo: [
			preamble size > 0
				ifTrue:    "Copy the preamble"
					[outStream copyPreamble: preamble from: sourceFile at: oldPos]
				ifFalse:
					[sourceFile position: oldPos].
			"Copy the method chunk"
			newPos := outStream position.
			outStream copyMethodChunkFrom: sourceFile.
			sourceFile skipSeparators.      "The following chunk may have ]style["
			sourceFile peek == $] ifTrue: [
				outStream cr; copyMethodChunkFrom: sourceFile].
			
			moveSource ifTrue:    "Set the new method source pointer"
				[endPos := outStream position.
				method checkOKToAdd: endPos - newPos at: newPos.
				method setSourcePosition: newPos inFile: fileIndex]]].
	preamble size > 0 ifTrue: [outStream nextChunkPut: ' '].
	^ outStream cr! !
!StandardSourceFileArray class methodsFor: 'initialize-release' stamp: 'dmu 9/7/2010 14:12'!
install
	"Replace SourceFiles by an instance of me with the standard sources and changes files.
	This only works if SourceFiles is either an Array or an instance of this class"
	"StandardSourceFileArray install"
	StandardFileStream resetAllInterlocks.
	SourceFiles := self new initialize! !

!Process methodsFor: 'RVM' stamp: 'dmu 9/17/2010 11:59'!
suspendedContextWaitingIfNecessary
	"In RVM, can suspend some other running process, and so after sending suspend, suspendedContext may still be nil."
	
	[self suspendedContext isNil] whileTrue.
	^ self suspendedContext! !
!ParagraphEditor methodsFor: 'do-its' stamp: 'dmu 9/17/2010 12:00'!
debug: aCompiledMethod receiver: anObject in: evalContext

	| selector guineaPig debugger context |
	selector := evalContext isNil ifTrue: [#DoIt] ifFalse: [#DoItIn:].
	anObject class addSelectorSilently: selector withMethod: aCompiledMethod.
	guineaPig := evalContext isNil
		ifTrue: [[anObject DoIt] newProcess]
		ifFalse: [[anObject DoItIn: evalContext] newProcess].
	context := guineaPig suspendedContextWaitingIfNecessary.
	debugger := ToolSet 
		debug: guineaPig
		controller: nil
		context: context.
	debugger openFullNoSuspendLabel: 'Debug it'.
	[debugger interruptedContext method == aCompiledMethod]
		whileFalse: [debugger send].
	anObject class basicRemoveSelector: selector! !
!Mutex methodsFor: 'mutual exclusion' stamp: 'dmu 6/14/2010 16:16'!
critical: aBlock
	"Evaluate aBlock protected by the receiver."
	| activeProcess |
	activeProcess := Processor thisProcess.
	activeProcess == owner ifTrue:[^aBlock value].
	^semaphore critical:[
		owner := activeProcess.
		aBlock ensure:[owner := nil]].! !
!Mutex commentStamp: 'dmu 9/17/2010 12:34'!
A Mutex is a light-weight MUTual EXclusion object being used when two or more processes need to access a shared resource concurrently. A Mutex grants ownership to a single process and will suspend any other process trying to aquire the mutex while in use. Waiting processes are granted access to the mutex in the order the access was requested.

Brought in from Squeak 4.1 because we need it.

Instance variables:
	semaphore	<Semaphore>		The (primitive) semaphore used for synchronization.
	owner		<Process>		The process owning the mutex.!

!UserInterruptHandler methodsFor: 'private' stamp: 'dmu 9/17/2010 16:39'!
handleUserInterrupt
	"This will be called from the event-fetcher process. 
	Assume no system-vital processes have a lower priority than this, and are thus ok to interrupt"
	UserInterruptHandler cmdDotEnabled 
		ifTrue: [
		
			[|toInterrupt|
			toInterrupt := Processor preemptedProcess.
			"Only interrupt processes which are potentially blocking the UI"
			toInterrupt priority <  Project uiProcess priority ifTrue: [toInterrupt := Project uiProcess].
			
			"Fork at lower priority to avoid interrupting system-critical processes"
			toInterrupt debugWithTitle: 'User Interrupt'] 
				forkAt: Processor thisProcess priority -1]! !

!TAssertable methodsFor: 'asserting' stamp: 'StefanMarr 10/30/2010 13:38'!
should: aBlock notTakeMoreThan: aDuration
    "Evaluate aBlock in a forked process and if it takes more than anInteger milliseconds
    to run we terminate the process and report a test failure.  It'' important to
    use the active process for the test failure so that the failure reporting works correctly
    in the context of the exception handlers."

    | evaluated evaluationProcess result delay testProcess |

    evaluated := false.
    delay := Delay forDuration: aDuration.
    testProcess := Processor thisProcess.
    "Create a new process to evaluate aBlock"
    evaluationProcess := [
        result := aBlock value.
        evaluated := true.
        delay unschedule.
        testProcess resume ] forkNamed: 'Process to evaluate should: notTakeMoreThanMilliseconds:'.

    "Wait the milliseconds they asked me to"
    delay wait.
    "After this point either aBlock was evaluated or not..."
    evaluated ifFalse: [
        evaluationProcess terminate.
        self assert: false description: ('Block evaluation took more than the expected <1p>' expandMacrosWith: aDuration)].
   
    ^result! !


!ProcessTest methodsFor: 'running' stamp: 'StefanMarr 10/30/2010 13:38'!
tearDown
	Processor thisProcess environmentRemoveKey: #processTests ifAbsent: []! !

!ProcessTest methodsFor: 'testing' stamp: 'StefanMarr 10/30/2010 13:39'!
testEnvironmentAt
	Processor thisProcess environmentAt: #processTests put: 42.
	self assert: (Processor thisProcess environmentAt: #processTests) = 42.
	self should: [Processor thisProcess environmentAt: #foobar] raise: Error! !

!ProcessTest methodsFor: 'testing' stamp: 'StefanMarr 10/30/2010 13:38'!
testEnvironmentAtPut
	self assert: (Processor thisProcess environmentAt: #processTests put: 42) = 42.! !

!ProcessTest methodsFor: 'testing' stamp: 'StefanMarr 10/30/2010 13:38'!
testEnvironmentRemoveKey
	Processor thisProcess environmentAt: #processTests put: 42.
	Processor thisProcess environmentRemoveKey: #processTests.
	self assert: (Processor thisProcess environmentAt: #processTests ifAbsent: []) isNil.
	self should: [Processor thisProcess environmentAt: #processTests] raise: Error! !


!UpdateStreamer methodsFor: 'private actions' stamp: 'StefanMarr 10/30/2010 13:39'!
silentRetrieveUrls: urls ontoQueue: queue withWaitSema: waitSema 
	"download the given list of URLs. The queue will be loaded alternately  
	with url's and with the retrieved contents. If a download fails, the  
	contents will be #failed. If all goes well, a special pair with an empty  
	URL and the contents #finished will be put on the queue. waitSema is  
	waited on every time before a new document is downloaded; this keeps 
	the downloader from getting too far  ahead of the main process"
	"kill the existing downloader if there is one"
	
	self zapUpdateDownloader.
	"fork a new downloading process"
	UpdateDownloader := [
			urls do: [:url | 
					| canPeek front doc | 
					waitSema wait.
					queue nextPut: url.
					doc := HTTPClient httpGet: url.
					doc isString
						ifTrue: [queue nextPut: #failed.
							UpdateDownloader := nil.
							Processor thisProcess terminate]
						ifFalse: [canPeek := 120 min: doc size.
							front := doc next: canPeek.  doc skip: -1 * canPeek.
							(front beginsWith: '<!!DOCTYPE') ifTrue: [
								(front includesSubString: 'Not Found') ifTrue: [
									queue nextPut: #failed.
									UpdateDownloader := nil.
									Processor thisProcess terminate]]].
						UpdateDownloader 
								ifNotNil: [queue nextPut: doc]].
			queue nextPut: ''.
			queue nextPut: #finished.
			UpdateDownloader := nil] newProcess.
	UpdateDownloader priority: Processor userInterruptPriority.
	"start the process running"
	UpdateDownloader resume! !

!UpdateStreamer methodsFor: 'private actions' stamp: 'StefanMarr 10/30/2010 13:39'!
verboseRetrieveUrls: urls ontoQueue: queue withWaitSema: waitSema 
	"download the given list of URLs. The queue will be loaded alternately  
	with url's and with the retrieved contents. If a download fails, the  
	contents will be #failed. If all goes well, a special pair with an empty  
	URL and the contents #finished will be put on the queue. waitSema is  
	waited on every time before a new document is downloaded; this keeps 
	the downloader from getting too far  ahead of the main process"
	"kill the existing downloader if there is one"
	
	self zapUpdateDownloader.
	"fork a new downloading process"
	UpdateDownloader := [
		| updateCounter |
		updateCounter := 0.
		'Downloading updates' displayProgressAt: World activeHand position from: 0 to: urls size during: [:bar |
			urls do: [:url | 
					| canPeek front doc | 
					waitSema wait.
					queue nextPut: url.
					doc := HTTPClient httpGet: url.
					doc isString
						ifTrue: [queue nextPut: #failed.
							UpdateDownloader := nil.
							Processor thisProcess terminate]
						ifFalse: [canPeek := 120 min: doc size.
							front := doc next: canPeek.  doc skip: -1 * canPeek.
							(front beginsWith: '<!!DOCTYPE') ifTrue: [
								(front includesSubString: 'Not Found') ifTrue: [
									queue nextPut: #failed.
									UpdateDownloader := nil.
									Processor thisProcess terminate]]].
						UpdateDownloader 
								ifNotNil: [queue nextPut: doc. 
										updateCounter := updateCounter + 1. 
										bar value: updateCounter]]].
			queue nextPut: ''.
			queue nextPut: #finished.
			UpdateDownloader := nil] newProcess.
	UpdateDownloader priority: Processor userInterruptPriority.
	"start the process running"
	UpdateDownloader resume! !


!ProcessTerminateBug methodsFor: 'tests' stamp: 'StefanMarr 10/30/2010 13:37'!
testSchedulerTermination
	"self debug: #testSchedulerTermination"
	
	| process sema gotHere sema2 |
	gotHere := false.
	sema := Semaphore new.
	sema2 := Semaphore new.
	process := [
		sema signal.
		sema2 wait.
		"will be suspended here"
		gotHere := true. "e.g., we must *never* get here" ] forkAt: Processor thisProcess priority.
	sema wait. "until process gets scheduled"
 	process terminate.
	sema2 signal.
	Processor yield. "will give process a chance to continue and
horribly screw up"
	self assert: gotHere not.
! !

!ProcessTerminateBug methodsFor: 'tests' stamp: 'StefanMarr 10/30/2010 13:38'!
testUnwindFromActiveProcess
	"self debug: #testUnwindFromActiveProcess"
	
	| sema process |
	sema := Semaphore forMutualExclusion.
	self assert: (sema isSignaled).
	process := [ sema critical: 
						[ self deny: sema isSignaled.
						Processor thisProcess terminate.]] forkAt: Processor userInterruptPriority.
	self assert: sema isSignaled.! !

!InputEventFetcher methodsFor: 'private' stamp: 'StefanMarr 11/4/2010 00:01' prior: 22276785!
primGetNextEvent: array
	"Store the next OS event available into the provided array.
	Essential."
	<primitive: 94>
	array at: 1 put: EventTypeNone. "If there is no event, the primitive will fail, client code expects the indication via the array"
	^nil! !

================================================
FILE: image.st/RVM-multicore-support.squeak.st
================================================
'******************************************************************************
 *  Copyright (c) 2008 - 2010 IBM Corporation and others.
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 * 
 *  Contributors:
 *    David Ungar, IBM Research - Initial Implementation
 *    Sam Adams, IBM Research - Initial Implementation
 *    Stefan Marr, Vrije Universiteit Brussel - Port to x86 Multi-Core Systems
 ******************************************************************************'!
DisplayText subclass: #Paragraph
	instanceVariableNames: 'clippingRectangle compositionRectangle destinationForm rule mask marginTabsLevel lines lastLine destFormSema'
	classVariableNames: ''
	poolDictionaries: 'TextConstants'
	category: 'ST80-Support'!
PluggableTextMorph subclass: #PluggableTextMorphPlus
	instanceVariableNames: 'getColorSelector acceptAction unstyledAcceptText styler textInterlock'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'ToolBuilder-Morphic'!
Link subclass: #Process
	instanceVariableNames: 'suspendedContext priority myList errorHandler name island env hostCore coreMask'
	classVariableNames: 'SemaForSuspensions'
	poolDictionaries: ''
	category: 'Kernel-Processes'!
Object subclass: #RVMPrimitives
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'RVM-Support'!
Object subclass: #SHTextStyler
	instanceVariableNames: 'sem backgroundProcess text monitor view stylingEnabled textInterlock'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'ShoutCore-Styling'!
	
Object subclass: #ProcessorScheduler
	instanceVariableNames: 'quiescentProcessLists activeProcess'
	classVariableNames: 'BackgroundProcess EmergencyProcess HighIOPriority LowIOPriority SystemBackgroundPriority SystemRockBottomPriority TimingPriority UserBackgroundPriority UserInterruptPriority UserSchedulingPriority'
	poolDictionaries: ''
	category: 'Kernel-Processes'!
FileStream subclass: #StandardFileStream
	instanceVariableNames: 'name fileID buffer1 interlock'
	classVariableNames: 'Registry'
	poolDictionaries: ''
	category: 'System-Files'!
View subclass: #StandardSystemView
	instanceVariableNames: 'labelFrame labelText isLabelComplemented savedSubViews minimumSize maximumSize collapsedViewport expandedViewport labelBits windowBits bitsValid updatablePanes displayInterlock'
	classVariableNames: 'CacheBits LabelStyle'
	poolDictionaries: ''
	category: 'ST80-Support'!
Object subclass: #Mutex
	instanceVariableNames: 'semaphore owner'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'RVM-Support'!
!ProcessorScheduler methodsFor: 'accessing' stamp: 'dmu 11/25/2008 00:23'!
activePriority
	"Answer the priority level of the currently running Process."

	^self thisProcess priority! !
!ProcessorScheduler methodsFor: 'accessing' stamp: 'dmu 9/16/2010 14:53'!
preemptedProcess
	"Return the process that the currently active process just preempted."
	| list listWithoutMe |
	self thisProcess priority to: 1 by: -1 do:[:priority|
		list := quiescentProcessLists at: priority.
		"RVM keeps running processes on the lists -- dmu 9/16/10"
		listWithoutMe := list reject: [:p | p == Processor thisProcess].
		listWithoutMe isEmpty ifFalse:[^listWithoutMe last].
	].
	^nil

	"Processor preemptedProcess"! !
!ProcessorScheduler methodsFor: 'process state change' stamp: 'dmu 11/25/2008 00:23'!
terminateActive
	"Terminate the process that is currently running."

	self thisProcess terminate! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:39'!
areRunningProcessesInSchedulerLists
	"Our RVM follows Pallas' MS system and keeps runnable processes in the scheduler lists even when running."
	^RVMPrimitives isRVM! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 11/25/2008 00:26'!
isActive: aProcess
	^ aProcess suspendedContext ==  nil! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 6/14/2010 15:32'!
thisProcess
	^ RVMPrimitives thisProcess! !
!ProcessorScheduler methodsFor: 'RVM' stamp: 'dmu 3/22/2010 13:03'!
yieldIfFewerCoresThan: n
	RVMPrimitives coreCount < n    ifTrue: [self yield]! !
!Project class methodsFor: 'utilities' stamp: 'dmu 11/25/2008 00:24'!
spawnNewProcessAndTerminateOld: terminate

	self spawnNewProcess.
	terminate
		ifTrue: [Processor terminateActive]
		ifFalse: [Processor thisProcess suspend]! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/8/2010 23:41'!
breakpoint
	<primitive: 'primitiveBreakpoint' module: 'RVMPrimitives'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:02'!
printExecutionTrace
	<primitive: 'primitivePrintExecutionTrace' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:01'!
printOnConsole: aString
	"Prints a string onto the console"
	<primitive: 'primitivePrint' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:00'!
printStack
	"Prints Smalltalk stack to console"
	<primitive: 'primitivePrintStack' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'debugging VM' stamp: 'dmu 6/9/2010 00:01'!
printVMStatistics
	<primitive: 'primitivePrintStats' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'dmu 6/8/2010 23:04'!
sampleRVM
	"Grab some data from the VM and return it"
	<primitive: 'primitiveSampleRVM' module: 'RVMPlugin'>
	"RVMPrimitives sampleRVM"
	^ nil! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'sm 10/27/2010 22:09'!
getMainRank
	"Get a sample from the VM and read out the main rank"
	| sample |
	sample := self sampleRVM.
	^ ((sample at: 6) at: 2) at: 6! !
!RVMPrimitives class methodsFor: 'VM statistics' stamp: 'dmu 6/8/2010 23:40'!
sampleSpecificData: flags
	"Grab some data from the VM and return it"
	"Bit offsets for flags; bit 0 is 1, bit 1 is 2, bit 2 is 4, etc.
	
	allCores, // 0
	runMask,
	messageNames,
	cpuCoreStats,
	allCoreStats,
	fence,

	millisecs, // 6
	cycles,
	messageStats,
	memorySystemStats,
    	interpreterStats,
    	objectTableStats,
    	interactionStats,

   	 coreCoords, // 14
    	sendTallies,
    	receiveTallies,
    	bufferedMessageStats,
    	receiveCycles,

    	// memory system
    	gcStats, // 19
    	heapStats,

    	// interpreter
    	bytecodes, // 20
    	yieldCount,
    	cycleCounts,
    	interruptChecks,
    	movedMutatedObjectStats,
    	mutexStats,
   	 interpreterLoopStats // 26"

	<primitive: 'primitiveSampleRVM' module: 'RVMPlugin'>
	^ nil! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:58'!
moveAllToReadMostlyHeaps
	"Move all objects into read-mostly heaps"
	<primitive: 'primitiveMoveAllToReadMostlyHeaps' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:55'!
shuffleToHeapsFrom: firstHeap to: lastHeap
	"Deal out all objects in the system into heaps from firstHeap through lastHeap in round-robin fashion so that adjacent objects wind up in different heaps"
	<primitive: 'primitiveShuffle' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:56'!
shuffleToHeapsFrom: firstHeap to: lastHeap movingReadWriteObjectsToReadMostlyHeap: rwToRM  movingReadMostlyObjectsToReadWriteHeap: rmToRw
	"Deal out all objects in the system into heaps from firstHeap through lastHeap in round-robin fashion so that adjacent objects wind up in different heaps"
	"If rwToRM, move objects in read/write heaps to read-mostly heaps."
	"If rmToRW, move objects in read-mostly heaps to read/write heaps."
	<primitive: 'primitiveShuffle' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:57'!
spreadToHeapsFrom: firstHeap to: lastHeap
	"Spread out all objects in the system into heaps from firstHeap through lastHeap so that each heap ends up about equally full."
	<primitive: 'primitiveSpread' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'rearranging objects' stamp: 'dmu 6/8/2010 23:57'!
spreadToHeapsFrom: firstHeap to: lastHeap movingReadWriteObjectsToReadMostlyHeap: rwToRM  movingReadMostlyObjectsToReadWriteHeap: rmToRw
	"Spread out all objects in the system into heaps from firstHeap through lastHeap so that each heap ends up about equally full."
	"If rwToRM, move objects in read/write heaps to read-mostly heaps."
	"If rmToRW, move objects in read-mostly heaps to read/write heaps."
	<primitive: 'primitiveSpread' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:30'!
for: anObject setRankTo: rank
	<primitive: 'primitiveSetCoordinatesFor' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:31'!
for: anObject setRankTo: rank isReadWrite: isRW
	<primitive: 'primitiveSetCoordinatesFor' module: 'RVMPlugin'>
	self primitiveFailed! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:17'!
getCoreOf: anObject
	"RVMPrimitives getCoreOf: 2@3"
	<primitive: 'primitiveGetCore' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'situating an object' stamp: 'dmu 6/8/2010 23:47'!
getMutabilityOf: anObject
	"Return true if argument is in a read/write heap, false if in read-mostly heap"
	<primitive: 'primitiveGetMutability' module: 'RVMPlugin'>
	^ true! !
!RVMPrimitives class methodsFor: 'enumerating a heap' stamp: 'dmu 6/8/2010 23:10'!
allObjectsInHeap: rank isReadWrite: trueForReadWriteFalseForReadMostly
	"return array of all objects in either read/write or read-mostly heap specified by rank and trueForReadWriteFalseForReadMostly"
	"RVMPrimitives allObjectsInHeap: 0 isReadWrite: true"
	<primitive: 'primitiveAllObjectsInHeap' module: 'RVMPlugin'>
	^ nil! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:18'!
getCoreIAmRunningOn
	"RVMPrimitives getCoreIAmRunningOn"
	<primitive: 'primitiveGetCoreIAmRunningOn' module: 'RVMPlugin' >
  	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:44'!
getRunMask
	"Return an integer with ones corresponding to cores RVM is allowed to use: 1 means core 0, 3 means cores 0 and 1, etc."
	"RVMPrimitives getRunMask printStringBase: 16"
	<primitive: 'primitiveRunMask' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/9/2010 00:07'!
getRunningProcessesByCore
	"Returns array of running processes, indexed by core (+1)"
	<primitive: 'primitiveRunningProcessByCore' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/8/2010 23:46'!
setRunMask: anInteger
	"Sets run mask to argument and returns old run mask.
	Only cores set in run mask will be used to run Smalltalk processes."
	"RVMPrimitives setRunMask: 1"
	<primitive: 'primitiveRunMask' module: 'RVMPlugin'>
	^ -1! !
!RVMPrimitives class methodsFor: 'processes' stamp: 'dmu 6/9/2010 00:04'!
thisProcess
	"Return the process that is running; RVM does not use ActiveProcess for this state, since many may be running"
	<primitive: 'primitiveThisProcess'  module: 'RVMPlugin'>
	^ Processor activeProcess! !
!RVMPrimitives class methodsFor: 'cores' stamp: 'dmu 6/8/2010 23:11'!
coreCount
  "RVMPrimitives coreCount"
  <primitive: 'primitiveCoreCount' module: 'RVMPlugin'>
  ^ 1! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:25'!
getCoreTrace
	"RVMPrimitives getCoreTrace"
	<primitive: 'primitiveTraceCores' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:26'!
getMutatedReplicatedObjectsTrace
	<primitive: 'primitiveTraceMutatedReplicatedObjects' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:22'!
startCoreTrace: size
	"RVMPrimitives startCoreTrace: 1000"
	<primitive: 'primitiveTraceCores' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'tracing' stamp: 'dmu 6/8/2010 23:27'!
startMutatedReplicatedObjectsTrace: size
	<primitive: 'primitiveTraceMutatedReplicatedObjects' module: 'RVMPlugin'>
	^ self primitiveFailed! !
!RVMPrimitives class methodsFor: 'emergency evaluating' stamp: 'dmu 6/8/2010 23:19'!
getEmergencySemaphore
	"When you hit shift-control-a, the VM will signal the emergency semaphore, if it has been set to a semaphore"
	"RVMPrimitives getEmergencySemaphore"
	<primitive: 'primitiveEmergencySemaphore' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'emergency evaluating' stamp: 'dmu 6/9/2010 00:06'!
setEmergencySemaphore: aSema
	"When you hit shift-control-a, the VM will signal the emergency semaphore, if it has been set to a semaphore"
	"RVMPrimitives setEmergencySemaphore: Semaphore new"
	<primitive: 'primitiveEmergencySemaphore' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/14/2010 15:27'!
getExtraPreheaderWordOf: anObject
	"Returns the extra preheader word of the argument."
	"RVMPrimitives getExtraPreheaderWordOf: 3@4"
	<primitive: 'primitiveGetExtraPreheaderWord' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/14/2010 15:27'!
setExtraPreheaderWordOf: anObject to: newContents
	"Sets the extra preheader word of the first argument."
	"|n| n := 3@4.
	RVMPrimitives setExtraPreheaderWordOf: n to: 17.
	RVMPrimitives getExtraPreheaderWordOf: n"
	<primitive: 'primitiveSetExtraPreheaderWord' module: 'RVMPlugin'>! !
!RVMPrimitives class methodsFor: 'using extra word' stamp: 'dmu 6/9/2010 00:05'!
setExtraWordSelector: aSelector
	"returns the old one"
	<primitive: 'primitiveSetExtraWordSelector' module: 'RVMPlugin'>
	^self primitiveFailed! !
!RVMPrimitives class methodsFor: 'testing' stamp: 'dmu 6/14/2010 15:36'!
isRVM
	"RVMPrimitives isRVM"
	^ (self getCoreOf: nil) ~= -1! !
!BlockClosure methodsFor: 'evaluating' stamp: 'dmu 6/14/2010 16:13'!
valueAt: blockPriority 
	"Evaluate the receiver (block), with another priority as the actual one 
	and restore it afterwards. The caller should be careful with using 
	higher priorities."
	| activeProcess result outsidePriority |
	activeProcess := Processor thisProcess.
	outsidePriority := activeProcess priority.
	activeProcess priority: blockPriority.
	result := self ensure: [activeProcess priority: outsidePriority].
	"Yield after restoring lower priority to give the preempted processes a  
	chance to run."
	blockPriority > outsidePriority
		ifTrue: [Processor yield].
	^ result! !
!BlockClosure methodsFor: 'evaluating' stamp: 'dmu 6/14/2010 16:13'!
valueWithin: aDuration onTimeout: timeoutBlock
	"Evaluate the receiver.
	If the evaluation does not complete in less than aDuration evaluate the timeoutBlock instead"

	| theProcess delay watchdog |

	aDuration <= Duration zero ifTrue: [^ timeoutBlock value ].

	"the block will be executed in the current process"
	theProcess := Processor thisProcess.
	delay := aDuration asDelay.

	"make a watchdog process"
	watchdog := [
		delay wait. 	"wait for timeout or completion"
		theProcess ifNotNil:[ theProcess signalException: TimedOut ] 
	] newProcess.

	"Watchdog needs to run at high priority to do its job (but not at timing priority)"
	watchdog priority: Processor timingPriority-1.

	"catch the timeout signal"
	^ [	watchdog resume.				"start up the watchdog"
		self ensure:[						"evaluate the receiver"
			theProcess := nil.				"it has completed, so ..."
			delay delaySemaphore signal.	"arrange for the watchdog to exit"
		]] on: TimedOut do: [ :e | timeoutBlock value ].
! !
!BlockClosure methodsFor: 'private' stamp: 'dmu 6/14/2010 16:13'!
valueUnpreemptively
	"Evaluate the receiver (block), without the possibility of preemption by higher priority processes. Use this facility VERY sparingly!!"
	"Think about using Block>>valueUninterruptably first, and think about using Semaphore>>critical: before that, and think about redesigning your application even before that!! 
	After you've done all that thinking, go right ahead and use it..."
	| activeProcess oldPriority result |
	activeProcess := Processor thisProcess.
	oldPriority := activeProcess priority.
	activeProcess priority: Processor highestPriority.
	result := self ensure: [activeProcess priority: oldPriority].
	"Yield after restoring priority to give the preempted processes a chance to run"
	Processor yield.
	^result! !
!BlockContext methodsFor: 'evaluating' stamp: 'dmu 6/14/2010 16:14'!
valueWithin: aDuration onTimeout: timeoutBlock
	"Evaluate the receiver.
	If the evaluation does not complete in less than aDuration evaluate the timeoutBlock instead"

	| theProcess delay watchdog |

	aDuration <= Duration zero ifTrue: [^ timeoutBlock value ].

	"the block will be executed in the current process"
	theProcess := Processor thisProcess.
	delay := aDuration asDelay.

	"make a watchdog process"
	watchdog := [
		delay wait. 	"wait for timeout or completion"
		theProcess ifNotNil:[ theProcess signalException: TimedOut ] 
	] newProcess.

	"Watchdog needs to run at high priority to do its job (but not at timing priority)"
	watchdog priority: Processor timingPriority-1.

	"catch the timeout signal"
	^ [	watchdog resume.				"start up the watchdog"
		self ensure:[						"evaluate the receiver"
			theProcess := nil.				"it has completed, so ..."
			delay delaySemaphore signal.	"arrange for the watchdog to exit"
		]] on: TimedOut do: [ :e | timeoutBlock value ].
! !
!BlockContext methodsFor: 'scheduling' stamp: 'dmu 6/14/2010 16:14'!
valueAt: blockPriority 
	"Evaluate the receiver (block), with another priority as the actual one 
	and restore it afterwards. The caller should be careful with using 
	higher priorities."
	| activeProcess result outsidePriority |
	activeProcess := Processor thisProcess.
	outsidePriority := activeProcess priority.
	activeProcess priority: blockPriority.
	result := self
				ensure: [activeProcess priority: outsidePriority].
	"Yield after restoring lower priority to give the preempted processes a  
	chance to run."
	blockPriority > outsidePriority
		ifTrue: [Processor yield].
	^ result! !
!BlockContext methodsFor: 'private' stamp: 'dmu 11/25/2008 00:18'!
valueUnpreemptively
	"Evaluate the receiver (block), without the possibility of preemption by higher priority processes. Use this facility VERY sparingly!!"
	"Think about using Block>>valueUninterruptably first, and think about using Semaphore>>critical: before that, and think about redesigning your application even before that!! 
	After you've done all that thinking, go right ahead and use it..."
	| activeProcess oldPriority result |
	activeProcess := Processor thisProcess.
	oldPriority := activeProcess priority.
	activeProcess priority: Processor highestPriority.
	result := self ensure: [activeProcess priority: oldPriority].
	"Yield after restoring priority to give the preempted processes a chance to run"
	Processor yield.
	^result! !
!CPUWatcher methodsFor: 'process operations' stamp: 'dmu 11/25/2008 00:18'!
debugProcess: aProcess
	| uiPriority oldPriority |
	uiPriority := Processor thisProcess priority.
	aProcess priority >= uiPriority ifTrue: [
		oldPriority := ProcessBrowser setProcess: aProcess toPriority: uiPriority - 1
	].
	ProcessBrowser debugProcess: aProcess.! !
!ComplexProgressIndicator methodsFor: 'as yet unclassified' stamp: 'dmu 6/14/2010 16:14'!
withProgressDo: aBlock

	| safetyFactor totals trialRect delta targetOwner |

	Smalltalk isMorphic ifFalse: [^aBlock value].
	formerProject := Project current.
	formerWorld := World.
	formerProcess := Processor thisProcess.
	targetMorph
		ifNil: [targetMorph := ProgressTargetRequestNotification signal].
	targetMorph ifNil: [
		trialRect := Rectangle center: Sensor cursorPoint extent: 80@80.
		delta := trialRect amountToTranslateWithin: formerWorld bounds.
		trialRect := trialRect translateBy: delta.
		translucentMorph := TranslucentProgessMorph new
			opaqueBackgroundColor: Color white;
			bounds: trialRect;
			openInWorld: formerWorld.
	] ifNotNil: [
		targetOwner := targetMorph owner.
		translucentMorph := TranslucentProgessMorph new
			setProperty: #morphicLayerNumber toValue: targetMorph morphicLayerNumber - 0.1;
			bounds: targetMorph boundsInWorld;
			openInWorld: targetMorph world.
	].
	stageCompleted := 0.
	safetyFactor := 1.1.	"better to guess high than low"
	translucentMorph setProperty: #progressStageNumber toValue: 1.
	translucentMorph hide.
	targetOwner ifNotNil: [targetOwner hide].
	totals := self loadingHistoryDataForKey: 'total'.
	newRatio := 1.0.
	estimate := totals size < 2 ifTrue: [
		15000		"be a pessimist"
	] ifFalse: [
		(totals sum - totals max) / (totals size - 1 max: 1) * safetyFactor.
	].
	start := Time millisecondClockValue.
	self forkProgressWatcher.

	[
		aBlock 
			on: ProgressInitiationException
			do: [ :ex | 
				ex sendNotificationsTo: [ :min :max :curr |
					"ignore this as it is inaccurate"
				].
			].
	] on: ProgressNotification do: [ :note | | stageCompletedString |
		translucentMorph show.
		targetOwner ifNotNil: [targetOwner show].
		note extraParam ifNotNil:[self addProgressDecoration: note extraParam].
		stageCompletedString := (note messageText findTokens: ' ') first.
		stageCompleted := (stageCompletedString copyUpTo: $:) asNumber.
		cumulativeStageTime := Time millisecondClockValue - start max: 1.
		prevData := self loadingHistoryDataForKey: stageCompletedString.
		prevData isEmpty ifFalse: [
			newRatio := (cumulativeStageTime / (prevData average max: 1)) asFloat.
		].
		self 
			loadingHistoryAt: stageCompletedString 
			add: cumulativeStageTime.
		translucentMorph 
			setProperty: #progressStageNumber 
			toValue: stageCompleted + 1.
		note resume.
	].

	stageCompleted := 999.	"we may or may not get here"

! !
!ControlManager methodsFor: 'scheduling' stamp: 'dmu 11/25/2008 00:19'!
inActiveControllerProcess
	"Answer whether the active scheduling process is the actual active 
	process in the system."

	^activeControllerProcess == Processor thisProcess! !
!ControlManager methodsFor: 'scheduling' stamp: 'dmu 11/25/2008 00:19'!
resetActiveController
	"When saving a morphic project whose parent is mvc, we need to set this up first"

	activeController := nil.
	activeControllerProcess := Processor thisProcess.
! !
!ControlManager methodsFor: 'scheduling' stamp: 'dmu 11/25/2008 00:20'!
scheduleActiveNoTerminate: aController 
	"Make aController be the active controller. Presumably the process that 
	requested the new active controller wants to keep control to do more 
	activites before the new controller can take control. Therefore, do not 
	terminate the currently active process."

	self schedulePassive: aController.
	self scheduled: aController
		from: Processor thisProcess! !
!ControlManager methodsFor: 'scheduling' stamp: 'dmu 11/25/2008 00:20'!
searchForActiveController
	"Find a scheduled controller that wants control and give control to it. If 
	none wants control, then see if the System Menu has been requested."
	| aController |
	activeController := nil.
	activeControllerProcess := Processor thisProcess.
	self activeController: self nextActiveController.
	Processor terminateActive! !
!Cursor methodsFor: 'displaying' stamp: 'dmu 6/14/2010 16:15'!
showWhile: aBlock 
	"While evaluating the argument, aBlock, make the receiver be the cursor shape."
	"ar 2/2/2006: Only allow this if active process is ui process"
	| oldcursor |
	Processor thisProcess == Project uiProcess ifFalse:[^aBlock value].
	oldcursor := Sensor currentCursor.
	self show.
	^aBlock ensure: [oldcursor show]
! !
!Debugger class methodsFor: 'class initialization' stamp: 'dmu 6/14/2010 16:15'!
openContext: aContext label: aString contents: contentsStringOrNil
	"Open a notifier in response to an error, halt, or notify. A notifier view just shows a short view of the sender stack and provides a menu that lets the user open a full debugger."
	<primitive: 19> "Simulation guard"
	ErrorRecursion not & Preferences logDebuggerStackToFile ifTrue:
		[Smalltalk logError: aString inContext: aContext to: 'SqueakDebug.log'].
	ErrorRecursion ifTrue:
		[ErrorRecursion := false.
		self primitiveError: aString].
	ErrorRecursion := true.
	self informExistingDebugger: aContext label: aString.
	(Debugger context: aContext)
		openNotifierContents: contentsStringOrNil
		label: aString.
	ErrorRecursion := false.
	Processor thisProcess suspend.
! !
!Debugger class methodsFor: 'instance creation' stamp: 'dmu 6/14/2010 16:15'!
context: aContext
	"Answer an instance of me for debugging the active process starting with the given context."

	^ self new
		process: Processor thisProcess
		controller:
			((Smalltalk isMorphic not and: [ScheduledControllers inActiveControllerProcess])
				ifTrue: [ScheduledControllers activeController]
				ifFalse: [nil])
		context: aContext! !
!DelayWaitTimeout methodsFor: 'private' stamp: 'dmu 6/14/2010 16:15'!
setDelay: anInteger forSemaphore: aSemaphore
	super setDelay: anInteger forSemaphore: aSemaphore.
	process := Processor thisProcess.
	expired := false.! !
!HTTPLoader methodsFor: 'private' stamp: 'dmu 6/14/2010 16:15'!
startDownload
	| newDownloadProcess |
	
	downloads size >= self maxNrOfConnections ifTrue: [^self].
	requests size <= 0 ifTrue: [^self].

	newDownloadProcess := [
		[
			self nextRequest startRetrieval
		] on: FTPConnectionException do: [ :ex | 
			Cursor normal show.
			self removeProcess: Processor thisProcess.
			self startDownload
		].
		self removeProcess: Processor thisProcess.
		self startDownload
	] newProcess.
	downloads add: newDownloadProcess.
	newDownloadProcess resume! !
!MVCToolBuilder class methodsFor: 'accessing' stamp: 'dmu 6/14/2010 16:16'!
isActiveBuilder
	"Answer whether I am the currently active builder"
	"This is really a way of answering whether 'Smalltalk isMVC'"
	ScheduledControllers ifNil:[^false].
	^Sched
Download .txt
gitextract_g7mokxl_/

├── .gitignore
├── .gitmodules
├── INSTALL.rst
├── README
├── README.rst
├── image.st/
│   ├── RVM-multicore-support.mvc.st
│   ├── RVM-multicore-support.pharo.st
│   ├── RVM-multicore-support.squeak.st
│   └── Sly3.mvc.st
└── vm/
    ├── RoarVM.xcodeproj/
    │   └── project.pbxproj
    ├── run/
    │   ├── reliability-test
    │   ├── tile-runner
    │   ├── tile-rvm
    │   └── tile-rvm-db
    ├── src/
    │   ├── externals/
    │   │   ├── externals.cpp
    │   │   └── externals.h
    │   ├── from_squeak/
    │   │   ├── Cross/
    │   │   │   ├── plugins/
    │   │   │   │   ├── AsynchFilePlugin/
    │   │   │   │   │   └── AsynchFilePlugin.h
    │   │   │   │   ├── B3DAcceleratorPlugin/
    │   │   │   │   │   ├── B3DAcceleratorPlugin.h
    │   │   │   │   │   ├── sqOpenGLRenderer.c
    │   │   │   │   │   └── sqOpenGLRenderer.h
    │   │   │   │   ├── BochsIA32Plugin/
    │   │   │   │   │   ├── BochsIA32Plugin.h
    │   │   │   │   │   └── sqBochsIA32Plugin.cpp
    │   │   │   │   ├── CroquetPlugin/
    │   │   │   │   │   ├── CroquetPlugin.h
    │   │   │   │   │   ├── CroquetPlugin.st
    │   │   │   │   │   ├── md5.h
    │   │   │   │   │   └── tribox.c
    │   │   │   │   ├── DropPlugin/
    │   │   │   │   │   └── DropPlugin.h
    │   │   │   │   ├── ExampleSurfacePlugin/
    │   │   │   │   │   ├── ExampleSurfacePlugin.h
    │   │   │   │   │   ├── SurfacePlugin-Examples.st
    │   │   │   │   │   └── sqMemorySurface.c
    │   │   │   │   ├── FileCopyPlugin/
    │   │   │   │   │   └── FileCopyPlugin.h
    │   │   │   │   ├── FilePlugin/
    │   │   │   │   │   ├── FilePlugin.c
    │   │   │   │   │   ├── FilePlugin.h
    │   │   │   │   │   └── sqFilePluginBasicPrims.c
    │   │   │   │   ├── FloatMathPlugin/
    │   │   │   │   │   ├── FloatMathPlugin.h
    │   │   │   │   │   ├── FloatMathPlugin.st
    │   │   │   │   │   ├── FloatMathPluginTests.st
    │   │   │   │   │   ├── acos.c
    │   │   │   │   │   ├── acosh.c
    │   │   │   │   │   ├── asin.c
    │   │   │   │   │   ├── asinh.c
    │   │   │   │   │   ├── atan.c
    │   │   │   │   │   ├── atan2.c
    │   │   │   │   │   ├── atanh.c
    │   │   │   │   │   ├── copysign.c
    │   │   │   │   │   ├── cos.c
    │   │   │   │   │   ├── cosh.c
    │   │   │   │   │   ├── exp.c
    │   │   │   │   │   ├── expm1.c
    │   │   │   │   │   ├── fdlibm/
    │   │   │   │   │   │   ├── MD5
    │   │   │   │   │   │   ├── changes
    │   │   │   │   │   │   ├── configure
    │   │   │   │   │   │   ├── configure.in
    │   │   │   │   │   │   ├── e_acos.c
    │   │   │   │   │   │   ├── e_acosh.c
    │   │   │   │   │   │   ├── e_asin.c
    │   │   │   │   │   │   ├── e_atan2.c
    │   │   │   │   │   │   ├── e_atanh.c
    │   │   │   │   │   │   ├── e_cosh.c
    │   │   │   │   │   │   ├── e_exp.c
    │   │   │   │   │   │   ├── e_fmod.c
    │   │   │   │   │   │   ├── e_gamma.c
    │   │   │   │   │   │   ├── e_gamma_r.c
    │   │   │   │   │   │   ├── e_hypot.c
    │   │   │   │   │   │   ├── e_j0.c
    │   │   │   │   │   │   ├── e_j1.c
    │   │   │   │   │   │   ├── e_jn.c
    │   │   │   │   │   │   ├── e_lgamma.c
    │   │   │   │   │   │   ├── e_lgamma_r.c
    │   │   │   │   │   │   ├── e_log.c
    │   │   │   │   │   │   ├── e_log10.c
    │   │   │   │   │   │   ├── e_pow.c
    │   │   │   │   │   │   ├── e_rem_pio2.c
    │   │   │   │   │   │   ├── e_remainder.c
    │   │   │   │   │   │   ├── e_scalb.c
    │   │   │   │   │   │   ├── e_sinh.c
    │   │   │   │   │   │   ├── e_sqrt.c
    │   │   │   │   │   │   ├── fdlibm.h
    │   │   │   │   │   │   ├── index
    │   │   │   │   │   │   ├── index.html
    │   │   │   │   │   │   ├── k_cos.c
    │   │   │   │   │   │   ├── k_rem_pio2.c
    │   │   │   │   │   │   ├── k_sin.c
    │   │   │   │   │   │   ├── k_standard.c
    │   │   │   │   │   │   ├── k_tan.c
    │   │   │   │   │   │   ├── makefile
    │   │   │   │   │   │   ├── makefile.in
    │   │   │   │   │   │   ├── readme
    │   │   │   │   │   │   ├── s_asinh.c
    │   │   │   │   │   │   ├── s_atan.c
    │   │   │   │   │   │   ├── s_cbrt.c
    │   │   │   │   │   │   ├── s_ceil.c
    │   │   │   │   │   │   ├── s_copysign.c
    │   │   │   │   │   │   ├── s_cos.c
    │   │   │   │   │   │   ├── s_erf.c
    │   │   │   │   │   │   ├── s_expm1.c
    │   │   │   │   │   │   ├── s_fabs.c
    │   │   │   │   │   │   ├── s_finite.c
    │   │   │   │   │   │   ├── s_floor.c
    │   │   │   │   │   │   ├── s_frexp.c
    │   │   │   │   │   │   ├── s_ilogb.c
    │   │   │   │   │   │   ├── s_isnan.c
    │   │   │   │   │   │   ├── s_ldexp.c
    │   │   │   │   │   │   ├── s_lib_version.c
    │   │   │   │   │   │   ├── s_log1p.c
    │   │   │   │   │   │   ├── s_logb.c
    │   │   │   │   │   │   ├── s_matherr.c
    │   │   │   │   │   │   ├── s_modf.c
    │   │   │   │   │   │   ├── s_nextafter.c
    │   │   │   │   │   │   ├── s_rint.c
    │   │   │   │   │   │   ├── s_scalbn.c
    │   │   │   │   │   │   ├── s_signgam.c
    │   │   │   │   │   │   ├── s_significand.c
    │   │   │   │   │   │   ├── s_sin.c
    │   │   │   │   │   │   ├── s_tan.c
    │   │   │   │   │   │   ├── s_tanh.c
    │   │   │   │   │   │   ├── w_acos.c
    │   │   │   │   │   │   ├── w_acosh.c
    │   │   │   │   │   │   ├── w_asin.c
    │   │   │   │   │   │   ├── w_atan2.c
    │   │   │   │   │   │   ├── w_atanh.c
    │   │   │   │   │   │   ├── w_cosh.c
    │   │   │   │   │   │   ├── w_exp.c
    │   │   │   │   │   │   ├── w_fmod.c
    │   │   │   │   │   │   ├── w_gamma.c
    │   │   │   │   │   │   ├── w_gamma_r.c
    │   │   │   │   │   │   ├── w_hypot.c
    │   │   │   │   │   │   ├── w_j0.c
    │   │   │   │   │   │   ├── w_j1.c
    │   │   │   │   │   │   ├── w_jn.c
    │   │   │   │   │   │   ├── w_lgamma.c
    │   │   │   │   │   │   ├── w_lgamma_r.c
    │   │   │   │   │   │   ├── w_log.c
    │   │   │   │   │   │   ├── w_log10.c
    │   │   │   │   │   │   ├── w_pow.c
    │   │   │   │   │   │   ├── w_remainder.c
    │   │   │   │   │   │   ├── w_scalb.c
    │   │   │   │   │   │   ├── w_sinh.c
    │   │   │   │   │   │   └── w_sqrt.c
    │   │   │   │   │   ├── finite.c
    │   │   │   │   │   ├── fmod.c
    │   │   │   │   │   ├── hypot.c
    │   │   │   │   │   ├── ieee754names.h
    │   │   │   │   │   ├── isnan.c
    │   │   │   │   │   ├── k_cos.c
    │   │   │   │   │   ├── k_rem_pio2.c
    │   │   │   │   │   ├── k_sin.c
    │   │   │   │   │   ├── k_tan.c
    │   │   │   │   │   ├── ldexp.c
    │   │   │   │   │   ├── log.c
    │   │   │   │   │   ├── log10.c
    │   │   │   │   │   ├── log1p.c
    │   │   │   │   │   ├── modf.c
    │   │   │   │   │   ├── pow.c
    │   │   │   │   │   ├── rem_pio2.c
    │   │   │   │   │   ├── rint.c
    │   │   │   │   │   ├── scalb.c
    │   │   │   │   │   ├── scalbn.c
    │   │   │   │   │   ├── sin.c
    │   │   │   │   │   ├── sinh.c
    │   │   │   │   │   ├── sqrt.c
    │   │   │   │   │   ├── tan.c
    │   │   │   │   │   └── tanh.c
    │   │   │   │   ├── GStreamerPlugin/
    │   │   │   │   │   ├── squeakAudioVideoPipeLineSignalInterface.c
    │   │   │   │   │   └── squeakAudioVideoPipeLineSignalInterface.h
    │   │   │   │   ├── HostWindowPlugin/
    │   │   │   │   │   └── HostWindowPlugin.h
    │   │   │   │   ├── IA32ABI/
    │   │   │   │   │   ├── dabusiness.h
    │   │   │   │   │   ├── ia32abi.h
    │   │   │   │   │   └── ia32abicc.c
    │   │   │   │   ├── InternetConfigPlugin/
    │   │   │   │   │   └── InternetConfigPlugin.h
    │   │   │   │   ├── JPEGReadWriter2Plugin/
    │   │   │   │   │   ├── Error.c
    │   │   │   │   │   ├── JPEGReadWriter2Plugin.h
    │   │   │   │   │   ├── ReadMe.txt
    │   │   │   │   │   ├── jcapimin.c
    │   │   │   │   │   ├── jcapistd.c
    │   │   │   │   │   ├── jccoefct.c
    │   │   │   │   │   ├── jccolor.c
    │   │   │   │   │   ├── jcdctmgr.c
    │   │   │   │   │   ├── jchuff.c
    │   │   │   │   │   ├── jchuff.h
    │   │   │   │   │   ├── jcinit.c
    │   │   │   │   │   ├── jcmainct.c
    │   │   │   │   │   ├── jcmarker.c
    │   │   │   │   │   ├── jcmaster.c
    │   │   │   │   │   ├── jcomapi.c
    │   │   │   │   │   ├── jconfig.h
    │   │   │   │   │   ├── jcparam.c
    │   │   │   │   │   ├── jcphuff.c
    │   │   │   │   │   ├── jcprepct.c
    │   │   │   │   │   ├── jcsample.c
    │   │   │   │   │   ├── jctrans.c
    │   │   │   │   │   ├── jdapimin.c
    │   │   │   │   │   ├── jdapistd.c
    │   │   │   │   │   ├── jdatadst.c
    │   │   │   │   │   ├── jdatasrc.c
    │   │   │   │   │   ├── jdcoefct.c
    │   │   │   │   │   ├── jdcolor.c
    │   │   │   │   │   ├── jdct.h
    │   │   │   │   │   ├── jddctmgr.c
    │   │   │   │   │   ├── jdhuff.c
    │   │   │   │   │   ├── jdhuff.h
    │   │   │   │   │   ├── jdinput.c
    │   │   │   │   │   ├── jdmainct.c
    │   │   │   │   │   ├── jdmarker.c
    │   │   │   │   │   ├── jdmaster.c
    │   │   │   │   │   ├── jdmerge.c
    │   │   │   │   │   ├── jdphuff.c
    │   │   │   │   │   ├── jdpostct.c
    │   │   │   │   │   ├── jdsample.c
    │   │   │   │   │   ├── jdtrans.c
    │   │   │   │   │   ├── jerror.c
    │   │   │   │   │   ├── jerror.h
    │   │   │   │   │   ├── jfdctflt.c
    │   │   │   │   │   ├── jfdctfst.c
    │   │   │   │   │   ├── jfdctint.c
    │   │   │   │   │   ├── jidctflt.c
    │   │   │   │   │   ├── jidctfst.c
    │   │   │   │   │   ├── jidctint.c
    │   │   │   │   │   ├── jidctred.c
    │   │   │   │   │   ├── jinclude.h
    │   │   │   │   │   ├── jmemdatadst.c
    │   │   │   │   │   ├── jmemdatasrc.c
    │   │   │   │   │   ├── jmemmgr.c
    │   │   │   │   │   ├── jmemnobs.c
    │   │   │   │   │   ├── jmemsys.h
    │   │   │   │   │   ├── jmorecfg.h
    │   │   │   │   │   ├── jpegint.h
    │   │   │   │   │   ├── jpeglib.h
    │   │   │   │   │   ├── jquant1.c
    │   │   │   │   │   ├── jquant2.c
    │   │   │   │   │   ├── jutils.c
    │   │   │   │   │   └── jversion.h
    │   │   │   │   ├── JoystickTabletPlugin/
    │   │   │   │   │   └── JoystickTabletPlugin.h
    │   │   │   │   ├── LocalePlugin/
    │   │   │   │   │   └── LocalePlugin.h
    │   │   │   │   ├── MIDIPlugin/
    │   │   │   │   │   └── MIDIPlugin.h
    │   │   │   │   ├── Mpeg3Plugin/
    │   │   │   │   │   ├── COPYING
    │   │   │   │   │   ├── JMMMpegBuffer.1.cs
    │   │   │   │   │   ├── JMMMpegBufferTest.1.cs
    │   │   │   │   │   ├── JMMMpegPluginBuffer.1.cs
    │   │   │   │   │   ├── JMMMpegPluginaddBufferOffsetting.1.cs
    │   │   │   │   │   ├── JMMMpegaddBufferOffsetting.1.cs
    │   │   │   │   │   ├── Mpeg3Plugin.h
    │   │   │   │   │   ├── README
    │   │   │   │   │   ├── docs/
    │   │   │   │   │   │   └── index.html
    │   │   │   │   │   ├── examplesSqueak.txt
    │   │   │   │   │   └── libmpeg/
    │   │   │   │   │       ├── Makefile
    │   │   │   │   │       ├── audio/
    │   │   │   │   │       │   ├── ac3.h
    │   │   │   │   │       │   ├── dct.c
    │   │   │   │   │       │   ├── header.c
    │   │   │   │   │       │   ├── huffman.h
    │   │   │   │   │       │   ├── layer1.c
    │   │   │   │   │       │   ├── layer2.c
    │   │   │   │   │       │   ├── layer3.c
    │   │   │   │   │       │   ├── mpeg3audio.c
    │   │   │   │   │       │   ├── mpeg3audio.h
    │   │   │   │   │       │   ├── pcm.c
    │   │   │   │   │       │   ├── synthesizers.c
    │   │   │   │   │       │   ├── tables.c
    │   │   │   │   │       │   └── tables.h
    │   │   │   │   │       ├── bitstream.c
    │   │   │   │   │       ├── bitstream.h
    │   │   │   │   │       ├── changesForSqueak.c
    │   │   │   │   │       ├── changesForSqueak.h
    │   │   │   │   │       ├── configure
    │   │   │   │   │       ├── dump.c
    │   │   │   │   │       ├── dump2.c
    │   │   │   │   │       ├── global_config
    │   │   │   │   │       ├── ioctl.h
    │   │   │   │   │       ├── libmpeg3.c
    │   │   │   │   │       ├── libmpeg3.h
    │   │   │   │   │       ├── make_package
    │   │   │   │   │       ├── mpeg3atrack.c
    │   │   │   │   │       ├── mpeg3atrack.h
    │   │   │   │   │       ├── mpeg3cat.c
    │   │   │   │   │       ├── mpeg3css.h
    │   │   │   │   │       ├── mpeg3demux.c
    │   │   │   │   │       ├── mpeg3demux.h
    │   │   │   │   │       ├── mpeg3io.c
    │   │   │   │   │       ├── mpeg3io.h
    │   │   │   │   │       ├── mpeg3private.h
    │   │   │   │   │       ├── mpeg3private.inc
    │   │   │   │   │       ├── mpeg3protos.h
    │   │   │   │   │       ├── mpeg3title.c
    │   │   │   │   │       ├── mpeg3title.h
    │   │   │   │   │       ├── mpeg3toc.c
    │   │   │   │   │       ├── mpeg3vtrack.c
    │   │   │   │   │       ├── mpeg3vtrack.h
    │   │   │   │   │       ├── test.c
    │   │   │   │   │       ├── testaudio.c
    │   │   │   │   │       ├── timecode.h
    │   │   │   │   │       ├── udump.c
    │   │   │   │   │       └── video/
    │   │   │   │   │           ├── getpicture.c
    │   │   │   │   │           ├── headers.c
    │   │   │   │   │           ├── idct.c
    │   │   │   │   │           ├── idct.h
    │   │   │   │   │           ├── layerdata.h
    │   │   │   │   │           ├── macroblocks.c
    │   │   │   │   │           ├── mmxidct.S
    │   │   │   │   │           ├── mmxidct_gasp.s
    │   │   │   │   │           ├── mmxidct_orig.S
    │   │   │   │   │           ├── mmxtest.c
    │   │   │   │   │           ├── motion.c
    │   │   │   │   │           ├── mpeg3video.c
    │   │   │   │   │           ├── mpeg3video.h
    │   │   │   │   │           ├── mpeg3videoprotos.h
    │   │   │   │   │           ├── output.c
    │   │   │   │   │           ├── reconmmx.s
    │   │   │   │   │           ├── reconstruct.c
    │   │   │   │   │           ├── seek.c
    │   │   │   │   │           ├── slice.c
    │   │   │   │   │           ├── slice.h
    │   │   │   │   │           ├── vlc.c
    │   │   │   │   │           ├── vlc.h
    │   │   │   │   │           └── worksheet.c
    │   │   │   │   ├── PrintJobPlugin/
    │   │   │   │   │   └── PrintJobPlugin.h
    │   │   │   │   ├── PseudoTTYPlugin/
    │   │   │   │   │   └── PseudoTTYPlugin.h
    │   │   │   │   ├── QuicktimePlugin/
    │   │   │   │   │   └── QuicktimePlugin.h
    │   │   │   │   ├── RePlugin/
    │   │   │   │   │   ├── RePlugin3-Fixes.1.cs
    │   │   │   │   │   ├── RePlugin3-Fixes2.1.cs
    │   │   │   │   │   ├── RePlugin3.3.1.cs
    │   │   │   │   │   ├── chartables.c
    │   │   │   │   │   ├── config.h
    │   │   │   │   │   ├── get.c
    │   │   │   │   │   ├── internal.h
    │   │   │   │   │   ├── oldInternal.h
    │   │   │   │   │   ├── pcre.c
    │   │   │   │   │   ├── pcre.h
    │   │   │   │   │   ├── rePlugin.h
    │   │   │   │   │   └── study.c
    │   │   │   │   ├── SecurityPlugin/
    │   │   │   │   │   └── SecurityPlugin.h
    │   │   │   │   ├── SerialPlugin/
    │   │   │   │   │   └── SerialPlugin.h
    │   │   │   │   ├── SocketPlugin/
    │   │   │   │   │   └── SocketPlugin.h
    │   │   │   │   ├── SoundCodecPrims/
    │   │   │   │   │   ├── SoundCodecPrims.h
    │   │   │   │   │   └── sqSoundCodecPluginBasicPrims.c
    │   │   │   │   ├── SoundGenerationPlugin/
    │   │   │   │   │   ├── SoundGenerationPlugin.h
    │   │   │   │   │   └── sqOldSoundPrims.c
    │   │   │   │   ├── SoundPlugin/
    │   │   │   │   │   └── SoundPlugin.h
    │   │   │   │   ├── Squeak3D/
    │   │   │   │   │   ├── b3d.h
    │   │   │   │   │   ├── b3dAlloc.c
    │   │   │   │   │   ├── b3dAlloc.h
    │   │   │   │   │   ├── b3dDraw.c
    │   │   │   │   │   ├── b3dInit.c
    │   │   │   │   │   ├── b3dMain.c
    │   │   │   │   │   ├── b3dRemap.c
    │   │   │   │   │   └── b3dTypes.h
    │   │   │   │   ├── SqueakFFIPrims/
    │   │   │   │   │   ├── sqFFI.h
    │   │   │   │   │   ├── sqFFIPlugin.c
    │   │   │   │   │   ├── sqFFITestFuncs.c
    │   │   │   │   │   └── sqManualSurface.c
    │   │   │   │   ├── SqueakSSL/
    │   │   │   │   │   └── SqueakSSL.h
    │   │   │   │   ├── SurfacePlugin/
    │   │   │   │   │   ├── SurfacePlugin.c
    │   │   │   │   │   └── SurfacePlugin.h
    │   │   │   │   └── UUIDPlugin/
    │   │   │   │       └── UUIDPlugin.h
    │   │   │   └── vm/
    │   │   │       ├── dispdbg.h
    │   │   │       ├── sq.h
    │   │   │       ├── sqAssert.h
    │   │   │       ├── sqAtomicOps.h
    │   │   │       ├── sqCogStackAlignment.h
    │   │   │       ├── sqExternalSemaphores.c
    │   │   │       ├── sqHeapMap.c
    │   │   │       ├── sqMemoryAccess.h
    │   │   │       ├── sqMemoryFence.h
    │   │   │       ├── sqNamedPrims.c
    │   │   │       ├── sqTicker.c
    │   │   │       ├── sqVirtualMachine.c
    │   │   │       └── sqVirtualMachine.h
    │   │   ├── LICENSE
    │   │   ├── Mac OS/
    │   │   │   ├── plugins/
    │   │   │   │   ├── AsynchFilePlugin/
    │   │   │   │   │   └── sqMacAsyncFilePrims.c
    │   │   │   │   ├── B3DAcceleratorPlugin/
    │   │   │   │   │   ├── sqMacOpenGL.c
    │   │   │   │   │   ├── sqMacOpenGL.h
    │   │   │   │   │   └── sqMacOpenGLInfo.c
    │   │   │   │   ├── ClipboardExtended/
    │   │   │   │   │   ├── ClipboardExtendedPlugin.c
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── JMMExtendedClipBoardPlugin.1.cs
    │   │   │   │   │   ├── Sophie-Clipboard.st
    │   │   │   │   │   ├── SophieSUnitClipboard.st
    │   │   │   │   │   ├── sqMacExtendedClipboard.c
    │   │   │   │   │   └── sqMacExtendedClipboard.h
    │   │   │   │   ├── CroquetPlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── sqMacCroquet.c
    │   │   │   │   │   └── sqMacCroquet.h
    │   │   │   │   ├── CurlPlugin/
    │   │   │   │   │   └── Info-CURLPlugin.plist
    │   │   │   │   ├── DropPlugin/
    │   │   │   │   │   └── sqMacDragDrop.c
    │   │   │   │   ├── ExuperyPlugin/
    │   │   │   │   │   └── sqOSXExuperyPlugin.c
    │   │   │   │   ├── FileCopyPlugin/
    │   │   │   │   │   ├── FileCopy.xml
    │   │   │   │   │   ├── MoreFiles 1.5/
    │   │   │   │   │   │   ├── C Headers/
    │   │   │   │   │   │   │   ├── DirectoryCopy.h
    │   │   │   │   │   │   │   ├── FSpCompat.h
    │   │   │   │   │   │   │   ├── FileCopy.h
    │   │   │   │   │   │   │   ├── FullPath.h
    │   │   │   │   │   │   │   ├── IterateDirectory.h
    │   │   │   │   │   │   │   ├── MoreDesktopMgr.h
    │   │   │   │   │   │   │   ├── MoreFiles.h
    │   │   │   │   │   │   │   ├── MoreFilesExtras.h
    │   │   │   │   │   │   │   ├── Optimization.h
    │   │   │   │   │   │   │   ├── OptimizationEnd.h
    │   │   │   │   │   │   │   └── Search.h
    │   │   │   │   │   │   ├── MoreFilesReadMe
    │   │   │   │   │   │   ├── PascalInterfaces/
    │   │   │   │   │   │   │   ├── DirectoryCopy.p
    │   │   │   │   │   │   │   ├── FSpCompat.p
    │   │   │   │   │   │   │   ├── FileCopy.p
    │   │   │   │   │   │   │   ├── FullPath.p
    │   │   │   │   │   │   │   ├── IterateDirectory.p
    │   │   │   │   │   │   │   ├── MoreDesktopMgr.p
    │   │   │   │   │   │   │   ├── MoreFiles.p
    │   │   │   │   │   │   │   ├── MoreFilesExtras.p
    │   │   │   │   │   │   │   └── Search.p
    │   │   │   │   │   │   └── Sources/
    │   │   │   │   │   │       ├── DirectoryCopy.c
    │   │   │   │   │   │       ├── FSpCompat.c
    │   │   │   │   │   │       ├── FileCopy.c
    │   │   │   │   │   │       ├── FullPath.c
    │   │   │   │   │   │       ├── IterateDirectory.c
    │   │   │   │   │   │       ├── MoreDesktopMgr.c
    │   │   │   │   │   │       ├── MoreFiles.c
    │   │   │   │   │   │       ├── MoreFilesExtras.c
    │   │   │   │   │   │       └── Search.c
    │   │   │   │   │   ├── sqMacFileCopy.c
    │   │   │   │   │   └── sqMacFileCopy.h
    │   │   │   │   ├── FilePlugin/
    │   │   │   │   │   ├── sqMacDirectory.c
    │   │   │   │   │   ├── sqMacUnixFileInterface.c
    │   │   │   │   │   └── sqMacUnixFileInterface.h
    │   │   │   │   ├── FloatMathPlugin/
    │   │   │   │   │   └── Info.plist
    │   │   │   │   ├── HostWindowPlugin/
    │   │   │   │   │   ├── sqMacHostWindow.c
    │   │   │   │   │   └── sqMacHostWindow.h
    │   │   │   │   ├── IA32ABI/
    │   │   │   │   │   └── Info.plist
    │   │   │   │   ├── InternetConfigPlugin/
    │   │   │   │   │   ├── InternetConfiguration.xml
    │   │   │   │   │   └── sqMacInternetConfiguration.c
    │   │   │   │   ├── JPEGReadWriter2Plugin/
    │   │   │   │   │   └── JConfig.h
    │   │   │   │   ├── JoystickTabletPlugin/
    │   │   │   │   │   ├── HID_Error_Handler.c
    │   │   │   │   │   ├── HID_Error_Handler.h
    │   │   │   │   │   ├── HID_Name_Lookup.c
    │   │   │   │   │   ├── HID_Name_Lookup.h
    │   │   │   │   │   ├── HID_Queue_Utilities.c
    │   │   │   │   │   ├── HID_Queue_Utilities.h
    │   │   │   │   │   ├── HID_Utilities.c
    │   │   │   │   │   ├── HID_Utilities.h
    │   │   │   │   │   ├── HID_Utilities_External.h
    │   │   │   │   │   ├── HID_Utilities_Internal.h
    │   │   │   │   │   ├── libHIDUtilities.a
    │   │   │   │   │   └── sqMacJoystickAndTablet.c
    │   │   │   │   ├── KedamaPlugin/
    │   │   │   │   │   ├── English.lproj/
    │   │   │   │   │   │   └── InfoPlist.strings
    │   │   │   │   │   ├── Info-KedamaPlugin__Upgraded_.plist
    │   │   │   │   │   └── KedamaPlugin.st
    │   │   │   │   ├── KedamaPlugin2/
    │   │   │   │   │   ├── English.lproj/
    │   │   │   │   │   │   └── InfoPlist.strings
    │   │   │   │   │   ├── Info-KedamaPlugin__Upgraded_.plist
    │   │   │   │   │   └── KedamaPlugin2.st
    │   │   │   │   ├── LocalePlugin/
    │   │   │   │   │   ├── Info-SqueakLocalePlugin__Upgraded_.plist
    │   │   │   │   │   ├── LocalePlugin.proj.xml
    │   │   │   │   │   ├── SqueakLocale.pbproj/
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacLocaleCarbon.c
    │   │   │   │   │   ├── sqMacLocaleCarbon.h
    │   │   │   │   │   ├── sqMacLocaleOS9.c
    │   │   │   │   │   └── sqMacLocaleOS9.h
    │   │   │   │   ├── MIDIPlugin/
    │   │   │   │   │   └── sqMacMIDI.c
    │   │   │   │   ├── MacMenubarPlugin/
    │   │   │   │   │   └── MacMenubarPlugin.h
    │   │   │   │   ├── Mpeg3Plugin/
    │   │   │   │   │   ├── SqueakPlugin.icns
    │   │   │   │   │   ├── changesetsForInMemoryBuffer/
    │   │   │   │   │   │   ├── JMMMpegBuffer.1.cs
    │   │   │   │   │   │   ├── JMMMpegBufferTest.1.cs
    │   │   │   │   │   │   └── JMMMpegPluginBuffer.1.cs
    │   │   │   │   │   ├── mpeg3Plugin-Info.plist
    │   │   │   │   │   ├── mpeglibAudioVideo.xml
    │   │   │   │   │   ├── myMacHeadersCarbon.pch
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   ├── App.rsrc
    │   │   │   │   │   │   └── CarbonApp.rsrc
    │   │   │   │   │   ├── resources.sit
    │   │   │   │   │   ├── sqMacFileBits.c
    │   │   │   │   │   └── sqMacFileBits.h
    │   │   │   │   ├── OpenALPlugin/
    │   │   │   │   │   └── Info.plist
    │   │   │   │   ├── PrintJobPlugin/
    │   │   │   │   │   ├── Info-PrintJobPlugin__Upgraded_.plist
    │   │   │   │   │   ├── PrintJobPlugin.pbproj.sit
    │   │   │   │   │   ├── PrintJobPlugin.project.xml
    │   │   │   │   │   ├── RealPrinting-JMM.7.cs
    │   │   │   │   │   ├── resources.sit
    │   │   │   │   │   ├── sqMacPrinting.c
    │   │   │   │   │   └── sqMacPrinting.h
    │   │   │   │   ├── QuicktimePlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── JMMMacQuicktimePlugin.3.cs
    │   │   │   │   │   ├── PkgInfo
    │   │   │   │   │   ├── SqueakPlugin.icns
    │   │   │   │   │   ├── SqueakQuicktime.xcodeproj/
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacQuicktimeInteface.c
    │   │   │   │   │   └── sqMacQuicktimeInteface.h
    │   │   │   │   ├── SecurityPlugin/
    │   │   │   │   │   └── sqMacSecurity.c
    │   │   │   │   ├── SerialExtendedPlugin/
    │   │   │   │   │   ├── Info-SerialExtendedUnixPlugin__Upgraded_.plist
    │   │   │   │   │   ├── SerialExtendedMacOS9.xml.sit
    │   │   │   │   │   ├── SerialExtendedPlugin.pbproj.sit
    │   │   │   │   │   ├── serialExtendedUnixPlugin.h
    │   │   │   │   │   └── sqMacSerialExtended.c
    │   │   │   │   ├── SerialPlugin/
    │   │   │   │   │   └── sqMacSerialPort.c
    │   │   │   │   ├── ServicesPlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── JMMMacServices.5.cs
    │   │   │   │   │   ├── JMMServicesPlugin.2.cs
    │   │   │   │   │   ├── MacServicesReadMe.rtf
    │   │   │   │   │   ├── SqueakServices.pbproj/
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacServices.c
    │   │   │   │   │   └── sqMacServices.h
    │   │   │   │   ├── SocketPlugin/
    │   │   │   │   │   ├── 68K/
    │   │   │   │   │   │   ├── AddressXlation.h
    │   │   │   │   │   │   ├── MacTCP.h
    │   │   │   │   │   │   ├── dnr.c
    │   │   │   │   │   │   └── sqMacNetworkNOMACTCP.c
    │   │   │   │   │   └── sqMacNetwork.c
    │   │   │   │   ├── SoundPlugin/
    │   │   │   │   │   ├── sqMacSound.c
    │   │   │   │   │   ├── sqMacUnixInterfaceSound.c
    │   │   │   │   │   ├── sqMacUnixInterfaceSound.h
    │   │   │   │   │   ├── sqUnixSoundDebug.h
    │   │   │   │   │   └── sqUnixSoundMacOSXJMM.c
    │   │   │   │   ├── SparklePlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── interp.h
    │   │   │   │   │   ├── sqMacMainObjCSparkle.h
    │   │   │   │   │   └── sqMacMainObjCSparkle.m
    │   │   │   │   ├── SpellingPlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── JMMMacSpelling.3.cs
    │   │   │   │   │   ├── JMMMacSpelling.4.cs
    │   │   │   │   │   ├── JMMMacSpellingPlugin.1.cs
    │   │   │   │   │   ├── SpellCheck/
    │   │   │   │   │   │   ├── English.lproj/
    │   │   │   │   │   │   │   └── InfoPlist.strings
    │   │   │   │   │   │   ├── Info-SpellCheck__Upgraded_.plist
    │   │   │   │   │   │   ├── SpellCheck.m
    │   │   │   │   │   │   └── SpellCheck.pbproj/
    │   │   │   │   │   │       ├── apple.pbxuser
    │   │   │   │   │   │       ├── deric.pbxuser
    │   │   │   │   │   │       ├── johnmci.mode1
    │   │   │   │   │   │       ├── johnmci.pbxuser
    │   │   │   │   │   │       └── project.pbxproj
    │   │   │   │   │   ├── SqueakSpelling.pbproj/
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── build/
    │   │   │   │   │   │   ├── .gdb_history
    │   │   │   │   │   │   └── PkgInfo
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacSpellingPlugin.c
    │   │   │   │   │   └── sqMacSpellingPlugin.h
    │   │   │   │   ├── SqueakFFIPrims/
    │   │   │   │   │   ├── Info-SqueakFFIPlugin__Upgraded_.plist
    │   │   │   │   │   ├── SqueakFFIPrims.proj.xml
    │   │   │   │   │   ├── ppc-darwin-Carbon-UI.c
    │   │   │   │   │   ├── ppc-darwin-asm-MacIntel.S
    │   │   │   │   │   ├── ppc-global.h
    │   │   │   │   │   ├── resources/
    │   │   │   │   │   │   └── English.lproj/
    │   │   │   │   │   │       └── InfoPlist.strings
    │   │   │   │   │   ├── sqMacFFI.s
    │   │   │   │   │   ├── sqMacFFIPPC.c
    │   │   │   │   │   ├── sqMacIntel-Win32.c
    │   │   │   │   │   ├── x86-sysv-MacIntel.c
    │   │   │   │   │   └── x86-sysv-asm-MacIntel.S
    │   │   │   │   ├── SqueakObjectiveCPlugin/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── squeakProxy.h
    │   │   │   │   │   ├── squeakProxy.m
    │   │   │   │   │   ├── squeakSUnitTester.h
    │   │   │   │   │   └── squeakSUnitTester.m
    │   │   │   │   ├── TestOSAPlugin/
    │   │   │   │   │   ├── Info-TestOSAPlugin__Upgraded_.plist
    │   │   │   │   │   ├── JMMFixOSAPluginForOSX.1.cs
    │   │   │   │   │   ├── SqueakPlugin.icns
    │   │   │   │   │   └── TestOSAPlugin.proj.xml
    │   │   │   │   ├── UUIDPlugin/
    │   │   │   │   │   └── sqMacUUID.c
    │   │   │   │   └── UnixOSProcessPlugin/
    │   │   │   │       ├── Info.plist
    │   │   │   │       ├── PkgInfo
    │   │   │   │       ├── SqueakPlugin.icns
    │   │   │   │       └── UnixOSProcessPlugin.c
    │   │   │   └── vm/
    │   │   │       ├── Developer/
    │   │   │       │   ├── Info-NPSophie__Upgraded_.plist
    │   │   │       │   ├── Info-NPSqueak__Upgraded_.plist
    │   │   │       │   ├── Info-Squeak_VM_Debug__Upgraded_.plist
    │   │   │       │   ├── Info-Squeak_VM_OPT__Upgraded_.plist
    │   │   │       │   ├── MacVMCorrectFileTypes.st
    │   │   │       │   ├── MyPlugin v2.proj.xml
    │   │   │       │   ├── MyPlugin68K v2.proj.xml
    │   │   │       │   ├── NPSqueakStub.c
    │   │   │       │   ├── NPSqueakStub.sit
    │   │   │       │   ├── Squeak VM Universal-Info.plist
    │   │   │       │   ├── SqueakPro5.xml
    │   │   │       │   ├── SqueakQL/
    │   │   │       │   │   ├── English.lproj/
    │   │   │       │   │   │   └── InfoPlist.strings
    │   │   │       │   │   ├── GeneratePreviewForURL.c
    │   │   │       │   │   ├── GenerateThumbnailForURL.c
    │   │   │       │   │   ├── Info.plist
    │   │   │       │   │   ├── SqueakQL.xcodeproj/
    │   │   │       │   │   │   ├── bert.mode1v3
    │   │   │       │   │   │   ├── bert.pbxuser
    │   │   │       │   │   │   ├── johnmci.mode1v3
    │   │   │       │   │   │   ├── johnmci.pbxuser
    │   │   │       │   │   │   └── project.pbxproj
    │   │   │       │   │   └── main.c
    │   │   │       │   ├── interp.h
    │   │   │       │   ├── myMacHeaders.c
    │   │   │       │   ├── myMacHeaders.pch
    │   │   │       │   ├── myMacHeadersCarbon.pch
    │   │   │       │   ├── resources.sit
    │   │   │       │   ├── sqGnu.h
    │   │   │       │   └── sqMacMinimal.c
    │   │   │       ├── Documentation/
    │   │   │       │   ├── 3.2.2 Release Notes.rtf
    │   │   │       │   ├── 3.2.3 Release Notes.rtf
    │   │   │       │   ├── 3.2.4 Release Notes.rtf
    │   │   │       │   ├── 3.2.5 Release Notes.rtf
    │   │   │       │   ├── 3.2.6 Release Notes.rtf
    │   │   │       │   ├── 3.2.7 Release Notes.rtf
    │   │   │       │   ├── 3.2.8 Release Notes.rtf
    │   │   │       │   ├── 3.4.0 Release Notes.rtf
    │   │   │       │   ├── 3.5.0 Release Notes.rtf
    │   │   │       │   ├── 3.5.1 Release Notes.rtf
    │   │   │       │   ├── 3.5.2 Release Notes.rtf
    │   │   │       │   ├── 3.6.0 Release Notes.rtf
    │   │   │       │   ├── 3.6.1 Release Notes.rtf
    │   │   │       │   ├── 3.7.1 Release Notes.rtf
    │   │   │       │   ├── 3.7.2 Release Notes.rtf
    │   │   │       │   ├── 3.7.3 Release Notes.rtf
    │   │   │       │   ├── 3.7.4 Release Notes.rtf
    │   │   │       │   ├── 3.7.5 Release Notes.rtf
    │   │   │       │   ├── 3.8.x Release Notes.rtf
    │   │   │       │   ├── 4.x.x Release Notes.rtf
    │   │   │       │   ├── 5.x.x Release Notes.rtf
    │   │   │       │   ├── readme
    │   │   │       │   └── readme.txt
    │   │   │       ├── Info-NPSqueak__Upgraded_.plist
    │   │   │       ├── NSCursorWrappers.h
    │   │   │       ├── NSCursorWrappers.m
    │   │   │       ├── PluginSDK 4.01a/
    │   │   │       │   ├── Common/
    │   │   │       │   │   ├── npmac.cpp
    │   │   │       │   │   └── npwin.cpp
    │   │   │       │   └── Include/
    │   │   │       │       ├── jni.h
    │   │   │       │       ├── jni_md.h
    │   │   │       │       ├── jri.h
    │   │   │       │       ├── jri_md.h
    │   │   │       │       ├── jritypes.h
    │   │   │       │       ├── npapi.h
    │   │   │       │       └── npupp.h
    │   │   │       ├── config.h
    │   │   │       ├── malloc.h
    │   │   │       ├── npsqueak/
    │   │   │       │   ├── English.lproj/
    │   │   │       │   │   ├── InfoPlist.strings
    │   │   │       │   │   └── Localized.r
    │   │   │       │   ├── SqueakBrowser-Info.plist
    │   │   │       │   ├── SqueakBrowser.rsrc
    │   │   │       │   ├── SqueakBrowser_Prefix.pch
    │   │   │       │   ├── main.c
    │   │   │       │   ├── npsqueak.c
    │   │   │       │   └── npunix.c
    │   │   │       ├── nsPoolManagement.h
    │   │   │       ├── nsPoolManagement.m
    │   │   │       ├── osExports.c
    │   │   │       ├── specialChangeSets/
    │   │   │       │   ├── ArraysToGlobalStruct-JMM.1.cs
    │   │   │       │   ├── Gnuifier.6.cs
    │   │   │       │   ├── Gnuifier.st
    │   │   │       │   ├── Old/
    │   │   │       │   │   ├── ArraysToGlobalStruct-JMM.1.cs
    │   │   │       │   │   ├── FasterCopyLoop-JMM.4.cs
    │   │   │       │   │   ├── FasterCopyLoopPart2-JMM.2.cs
    │   │   │       │   │   ├── FasterLookupMethod-JMM.1.cs
    │   │   │       │   │   ├── Interpreter-readImageFromFile-jmm-dtl.2.cs
    │   │   │       │   │   ├── JMM-fixBiasToGrow.1.cs
    │   │   │       │   │   ├── MakePrimPointXInternal-JMM.1.cs
    │   │   │       │   │   ├── SlightlyFasterActivate-JMM.3.cs
    │   │   │       │   │   ├── VMM38-64bit-imageUpdates.1.cs
    │   │   │       │   │   ├── VMM38-gc-instrument-image.1.cs
    │   │   │       │   │   ├── VmUpdates-dtl/
    │   │   │       │   │   │   ├── JMM-VmUpdates32bitclean.2.cs
    │   │   │       │   │   │   ├── VMMaker-wbk.40.8.cs
    │   │   │       │   │   │   ├── VmUpdates-1001-dtl.1.cs
    │   │   │       │   │   │   ├── VmUpdates-1002-dtl.1.cs
    │   │   │       │   │   │   ├── VmUpdates-1003-dtl.1.cs
    │   │   │       │   │   │   ├── VmUpdates-1004-dtl.1.cs
    │   │   │       │   │   │   ├── VmUpdates-1005-dtl.1.cs
    │   │   │       │   │   │   └── VmUpdates-1006-dtl.1.cs
    │   │   │       │   │   └── bigCursor-bf.1.cs
    │   │   │       │   ├── VMM38-64bit-imageUpdates.1.cs
    │   │   │       │   └── VMM38-gc-instrument-image.1.cs
    │   │   │       ├── sqConfig.h
    │   │   │       ├── sqMacEncoding.c
    │   │   │       ├── sqMacEncoding.h
    │   │   │       ├── sqMacExternalPrims.c
    │   │   │       ├── sqMacExternalPrims.h
    │   │   │       ├── sqMacFileLogic.c
    │   │   │       ├── sqMacFileLogic.h
    │   │   │       ├── sqMacImageIO.c
    │   │   │       ├── sqMacImageIO.h
    │   │   │       ├── sqMacMain.c
    │   │   │       ├── sqMacMain.h
    │   │   │       ├── sqMacMemory.c
    │   │   │       ├── sqMacMemory.h
    │   │   │       ├── sqMacNSPlugin.c
    │   │   │       ├── sqMacNSPluginUILogic.c
    │   │   │       ├── sqMacNSPluginUILogic2.c
    │   │   │       ├── sqMacNSPluginUILogic2.h
    │   │   │       ├── sqMacTime.c
    │   │   │       ├── sqMacTime.h
    │   │   │       ├── sqMacUIAppleEvents.c
    │   │   │       ├── sqMacUIAppleEvents.h
    │   │   │       ├── sqMacUIClipBoard.c
    │   │   │       ├── sqMacUIClipBoard.h
    │   │   │       ├── sqMacUIConstants.h
    │   │   │       ├── sqMacUIEvents.c
    │   │   │       ├── sqMacUIEvents.h
    │   │   │       ├── sqMacUIEventsUniversal.c
    │   │   │       ├── sqMacUIMenuBar.c
    │   │   │       ├── sqMacUIMenuBar.h
    │   │   │       ├── sqMacUIMenuBarUniversal.c
    │   │   │       ├── sqMacUnixCommandLineInterface.c
    │   │   │       ├── sqMacUnixCommandLineInterface.h
    │   │   │       ├── sqMacUnixExternalPrims.c
    │   │   │       ├── sqMacWindow.c
    │   │   │       ├── sqMacWindow.h
    │   │   │       ├── sqMacWindowUniversal.c
    │   │   │       ├── sqNamedPrims.h
    │   │   │       ├── sqPlatformSpecific.h
    │   │   │       └── version.c
    │   │   ├── README.rst
    │   │   ├── iOS/
    │   │   │   ├── plugins/
    │   │   │   │   ├── B3DAcceleratorPlugin/
    │   │   │   │   │   ├── sqMacOpenGL.c
    │   │   │   │   │   ├── sqMacOpenGL.h
    │   │   │   │   │   ├── sqMacOpenGLInfo.c
    │   │   │   │   │   └── sqMacUIConstants.h
    │   │   │   │   ├── ClipboardExtended/
    │   │   │   │   │   ├── sqMacExtendedClipboard.h
    │   │   │   │   │   └── sqMacExtendedClipboard.m
    │   │   │   │   ├── CroquetPlugin/
    │   │   │   │   │   ├── sqMacCroquet.c
    │   │   │   │   │   └── sqMacCroquet.h
    │   │   │   │   ├── FT2Plugin/
    │   │   │   │   │   ├── FT2Plugin.xcodeproj/
    │   │   │   │   │   │   ├── MAC.mode1v3
    │   │   │   │   │   │   ├── MAC.pbxuser
    │   │   │   │   │   │   ├── bert.mode1
    │   │   │   │   │   │   ├── bert.pbxuser
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.mode1v3
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── Info-FT2Plugin.plist
    │   │   │   │   │   ├── PkgInfo
    │   │   │   │   │   ├── freetype2/
    │   │   │   │   │   │   └── freetype/
    │   │   │   │   │   │       ├── config/
    │   │   │   │   │   │       │   ├── ftconfig.h
    │   │   │   │   │   │       │   ├── ftheader.h
    │   │   │   │   │   │       │   ├── ftmodule.h
    │   │   │   │   │   │       │   ├── ftoption.h
    │   │   │   │   │   │       │   └── ftstdlib.h
    │   │   │   │   │   │       ├── freetype.h
    │   │   │   │   │   │       ├── ftadvanc.h
    │   │   │   │   │   │       ├── ftbbox.h
    │   │   │   │   │   │       ├── ftbdf.h
    │   │   │   │   │   │       ├── ftbitmap.h
    │   │   │   │   │   │       ├── ftcache.h
    │   │   │   │   │   │       ├── ftchapters.h
    │   │   │   │   │   │       ├── ftcid.h
    │   │   │   │   │   │       ├── fterrdef.h
    │   │   │   │   │   │       ├── fterrors.h
    │   │   │   │   │   │       ├── ftgasp.h
    │   │   │   │   │   │       ├── ftglyph.h
    │   │   │   │   │   │       ├── ftgxval.h
    │   │   │   │   │   │       ├── ftgzip.h
    │   │   │   │   │   │       ├── ftimage.h
    │   │   │   │   │   │       ├── ftincrem.h
    │   │   │   │   │   │       ├── ftlcdfil.h
    │   │   │   │   │   │       ├── ftlist.h
    │   │   │   │   │   │       ├── ftlzw.h
    │   │   │   │   │   │       ├── ftmac.h
    │   │   │   │   │   │       ├── ftmm.h
    │   │   │   │   │   │       ├── ftmodapi.h
    │   │   │   │   │   │       ├── ftmoderr.h
    │   │   │   │   │   │       ├── ftotval.h
    │   │   │   │   │   │       ├── ftoutln.h
    │   │   │   │   │   │       ├── ftpfr.h
    │   │   │   │   │   │       ├── ftrender.h
    │   │   │   │   │   │       ├── ftsizes.h
    │   │   │   │   │   │       ├── ftsnames.h
    │   │   │   │   │   │       ├── ftstroke.h
    │   │   │   │   │   │       ├── ftsynth.h
    │   │   │   │   │   │       ├── ftsystem.h
    │   │   │   │   │   │       ├── fttrigon.h
    │   │   │   │   │   │       ├── fttypes.h
    │   │   │   │   │   │       ├── ftwinfnt.h
    │   │   │   │   │   │       ├── ftxf86.h
    │   │   │   │   │   │       ├── t1tables.h
    │   │   │   │   │   │       ├── ttnameid.h
    │   │   │   │   │   │       ├── tttables.h
    │   │   │   │   │   │       ├── tttags.h
    │   │   │   │   │   │       └── ttunpat.h
    │   │   │   │   │   └── macFileNameBits.c
    │   │   │   │   ├── JoystickTabletPlugin/
    │   │   │   │   │   ├── HID_Error_Handler.c
    │   │   │   │   │   ├── HID_Error_Handler.h
    │   │   │   │   │   ├── HID_Name_Lookup.c
    │   │   │   │   │   ├── HID_Name_Lookup.h
    │   │   │   │   │   ├── HID_Queue_Utilities.c
    │   │   │   │   │   ├── HID_Queue_Utilities.h
    │   │   │   │   │   ├── HID_Utilities.c
    │   │   │   │   │   ├── HID_Utilities.h
    │   │   │   │   │   ├── HID_Utilities_External.h
    │   │   │   │   │   ├── HID_Utilities_Internal.h
    │   │   │   │   │   └── sqMacJoystickAndTablet.c
    │   │   │   │   ├── LocalePlugin/
    │   │   │   │   │   ├── sqMacLocaleCarbon.c
    │   │   │   │   │   └── sqMacLocaleCarbon.h
    │   │   │   │   ├── MIDIPlugin/
    │   │   │   │   │   └── sqMacMIDI.c
    │   │   │   │   ├── MacMenubarPlugin/
    │   │   │   │   │   ├── MacMenuOS9ToOSX.h
    │   │   │   │   │   ├── MacMenuOS9ToOSX.m
    │   │   │   │   │   └── MacMenubarPlugin.h
    │   │   │   │   ├── Mpeg3Plugin/
    │   │   │   │   │   ├── changesetsForInMemoryBuffer/
    │   │   │   │   │   │   ├── JMMMpegBuffer.1.cs
    │   │   │   │   │   │   ├── JMMMpegBufferTest.1.cs
    │   │   │   │   │   │   └── JMMMpegPluginBuffer.1.cs
    │   │   │   │   │   ├── sqMacFileBits.c
    │   │   │   │   │   └── sqMacFileBits.h
    │   │   │   │   ├── SecurityPlugin/
    │   │   │   │   │   └── sqMacSecurity.c
    │   │   │   │   ├── SerialPlugin/
    │   │   │   │   │   └── sqMacSerialPort.c
    │   │   │   │   ├── SoundPlugin/
    │   │   │   │   │   ├── sqSqueakSoundCoreAudio.h
    │   │   │   │   │   ├── sqSqueakSoundCoreAudio.m
    │   │   │   │   │   ├── sqSqueakSoundCoreAudioAPI.h
    │   │   │   │   │   └── sqSqueakSoundCoreAudioAPI.m
    │   │   │   │   ├── SqueakFFIPrims/
    │   │   │   │   │   ├── dummyFFI.c
    │   │   │   │   │   └── dummyFFI.h
    │   │   │   │   ├── SqueakLocale/
    │   │   │   │   │   ├── Info-SqueakLocalePlugin__Upgraded_.plist
    │   │   │   │   │   ├── SqueakLocale.xcodeproj/
    │   │   │   │   │   │   ├── MAC.mode1v3
    │   │   │   │   │   │   ├── MAC.pbxuser
    │   │   │   │   │   │   ├── johnmci.mode1
    │   │   │   │   │   │   ├── johnmci.mode1v3
    │   │   │   │   │   │   ├── johnmci.pbxuser
    │   │   │   │   │   │   └── project.pbxproj
    │   │   │   │   │   ├── sqMacLocaleCocoa.h
    │   │   │   │   │   └── sqMacLocaleCocoa.m
    │   │   │   │   ├── SqueakObjectiveC/
    │   │   │   │   │   ├── Info.plist
    │   │   │   │   │   ├── PDColoredProgressView.h
    │   │   │   │   │   ├── PDColoredProgressView.m
    │   │   │   │   │   ├── drawing.m
    │   │   │   │   │   ├── squeakProxy.h
    │   │   │   │   │   ├── squeakProxy.m
    │   │   │   │   │   ├── squeakSUnitTester.h
    │   │   │   │   │   └── squeakSUnitTester.m
    │   │   │   │   └── UnixOSProcessPlugin/
    │   │   │   │       ├── Info.plist
    │   │   │   │       ├── PkgInfo
    │   │   │   │       ├── UnixOSProcessPlugin.xcodeproj/
    │   │   │   │       │   ├── MAC.mode1v3
    │   │   │   │       │   ├── MAC.pbxuser
    │   │   │   │       │   ├── bert.mode1
    │   │   │   │       │   ├── bert.pbxuser
    │   │   │   │       │   ├── johnmci.mode1
    │   │   │   │       │   ├── johnmci.mode1v3
    │   │   │   │       │   ├── johnmci.pbxuser
    │   │   │   │       │   └── project.pbxproj
    │   │   │   │       └── UnixOSProcessPluginOLD.xcodeproj/
    │   │   │   │           ├── MAC.mode1v3
    │   │   │   │           ├── MAC.pbxuser
    │   │   │   │           ├── johnmci.mode1
    │   │   │   │           ├── johnmci.mode1v3
    │   │   │   │           ├── johnmci.pbxuser
    │   │   │   │           └── project.pbxproj
    │   │   │   └── vm/
    │   │   │       ├── 5.x.x Release Notes.rtf
    │   │   │       ├── Common/
    │   │   │       │   ├── Classes/
    │   │   │       │   │   ├── Queue.h
    │   │   │       │   │   ├── Queue.m
    │   │   │       │   │   ├── sqMacV2Time.c
    │   │   │       │   │   ├── sqMacV2Time.h
    │   │   │       │   │   ├── sqSqueakAppDelegate.h
    │   │   │       │   │   ├── sqSqueakAppDelegate.m
    │   │   │       │   │   ├── sqSqueakAttributesAPI.h
    │   │   │       │   │   ├── sqSqueakAttributesAPI.m
    │   │   │       │   │   ├── sqSqueakCursorAPI.h
    │   │   │       │   │   ├── sqSqueakCursorAPI.m
    │   │   │       │   │   ├── sqSqueakEventsAPI.h
    │   │   │       │   │   ├── sqSqueakEventsAPI.m
    │   │   │       │   │   ├── sqSqueakFileDirectoryAPI.h
    │   │   │       │   │   ├── sqSqueakFileDirectoryAPI.m
    │   │   │       │   │   ├── sqSqueakFileDirectoryInterface.h
    │   │   │       │   │   ├── sqSqueakFileDirectoryInterface.m
    │   │   │       │   │   ├── sqSqueakInfoPlistInterface.h
    │   │   │       │   │   ├── sqSqueakInfoPlistInterface.m
    │   │   │       │   │   ├── sqSqueakMainApp.h
    │   │   │       │   │   ├── sqSqueakMainApp.m
    │   │   │       │   │   ├── sqSqueakMainApplication+attributes.h
    │   │   │       │   │   ├── sqSqueakMainApplication+attributes.m
    │   │   │       │   │   ├── sqSqueakMainApplication+cursor.h
    │   │   │       │   │   ├── sqSqueakMainApplication+cursor.m
    │   │   │       │   │   ├── sqSqueakMainApplication+events.h
    │   │   │       │   │   ├── sqSqueakMainApplication+events.m
    │   │   │       │   │   ├── sqSqueakMainApplication+imageReadWrite.h
    │   │   │       │   │   ├── sqSqueakMainApplication+imageReadWrite.m
    │   │   │       │   │   ├── sqSqueakMainApplication+screen.h
    │   │   │       │   │   ├── sqSqueakMainApplication+screen.m
    │   │   │       │   │   ├── sqSqueakMainApplication+sound.h
    │   │   │       │   │   ├── sqSqueakMainApplication+sound.m
    │   │   │       │   │   ├── sqSqueakMainApplication+vmAndImagePath.h
    │   │   │       │   │   ├── sqSqueakMainApplication+vmAndImagePath.m
    │   │   │       │   │   ├── sqSqueakMainApplication.h
    │   │   │       │   │   ├── sqSqueakMainApplication.m
    │   │   │       │   │   ├── sqSqueakScreenAPI.h
    │   │   │       │   │   ├── sqSqueakScreenAPI.m
    │   │   │       │   │   ├── sqSqueakScreenAndWindow.h
    │   │   │       │   │   ├── sqSqueakScreenAndWindow.m
    │   │   │       │   │   ├── sqSqueakSoundAPI.h
    │   │   │       │   │   ├── sqSqueakSoundAPI.m
    │   │   │       │   │   ├── sqSqueakVmAndImagePathAPI.h
    │   │   │       │   │   └── sqSqueakVmAndImagePathAPI.m
    │   │   │       │   ├── English.lproj/
    │   │   │       │   │   └── Localizable.strings
    │   │   │       │   ├── aio.c
    │   │   │       │   └── main.m
    │   │   │       ├── Default.psd
    │   │   │       ├── English.lproj/
    │   │   │       │   └── MainMenu.xib
    │   │   │       ├── Entitlements.plist
    │   │   │       ├── Info-iPhone.plist
    │   │   │       ├── MainWindow.xib
    │   │   │       ├── OSX/
    │   │   │       │   ├── BitMapConversionLogicFromX11.c
    │   │   │       │   ├── BitMapConversionLogicFromX11.h
    │   │   │       │   ├── Credits.rtf
    │   │   │       │   ├── English.lproj/
    │   │   │       │   │   ├── InfoPlist.strings
    │   │   │       │   │   └── MainMenu.xib
    │   │   │       │   ├── RoarVM.icns
    │   │   │       │   ├── SqViewBitmapConversion.h
    │   │   │       │   ├── SqViewBitmapConversion.m
    │   │   │       │   ├── SqViewClut.h
    │   │   │       │   ├── SqViewClut.m
    │   │   │       │   ├── Squeak.icns
    │   │   │       │   ├── SqueakChanges.icns
    │   │   │       │   ├── SqueakGeneric.icns
    │   │   │       │   ├── SqueakImage.icns
    │   │   │       │   ├── SqueakOSXAppDelegate.h
    │   │   │       │   ├── SqueakOSXAppDelegate.m
    │   │   │       │   ├── SqueakOSXApplication.h
    │   │   │       │   ├── SqueakOSXApplication.m
    │   │   │       │   ├── SqueakPlugin.icns
    │   │   │       │   ├── SqueakProject.icns
    │   │   │       │   ├── SqueakScript.icns
    │   │   │       │   ├── SqueakSources.icns
    │   │   │       │   ├── dtraceOperationsPerSecond.d
    │   │   │       │   ├── dtracedrawrecttiming.d
    │   │   │       │   ├── keyBoardStrokeDetails.h
    │   │   │       │   ├── keyBoardStrokeDetails.m
    │   │   │       │   ├── macintoshosxextra.c
    │   │   │       │   ├── macintoshosxextra.h
    │   │   │       │   ├── plugins/
    │   │   │       │   │   ├── HostWindowPlugin/
    │   │   │       │   │   │   ├── sqMacHostWindow.h
    │   │   │       │   │   │   └── sqMacHostWindow.m
    │   │   │       │   │   └── SoundPlugin/
    │   │   │       │   │       ├── sqSqueakOSXSoundCoreAudio.h
    │   │   │       │   │       └── sqSqueakOSXSoundCoreAudio.m
    │   │   │       │   ├── sqMacUnixExternalPrims.m
    │   │   │       │   ├── sqMacV2Browser.h
    │   │   │       │   ├── sqMacV2Browser.m
    │   │   │       │   ├── sqMacV2Window.h
    │   │   │       │   ├── sqMacV2Window.m
    │   │   │       │   ├── sqSqueakMainApplication+screen.h
    │   │   │       │   ├── sqSqueakMainApplication+screen.m
    │   │   │       │   ├── sqSqueakOSXApplication+attributes.h
    │   │   │       │   ├── sqSqueakOSXApplication+attributes.m
    │   │   │       │   ├── sqSqueakOSXApplication+clipboard.h
    │   │   │       │   ├── sqSqueakOSXApplication+clipboard.m
    │   │   │       │   ├── sqSqueakOSXApplication+cursor.h
    │   │   │       │   ├── sqSqueakOSXApplication+cursor.m
    │   │   │       │   ├── sqSqueakOSXApplication+events.h
    │   │   │       │   ├── sqSqueakOSXApplication+events.m
    │   │   │       │   ├── sqSqueakOSXApplication+imageReadWrite.h
    │   │   │       │   ├── sqSqueakOSXApplication+imageReadWrite.m
    │   │   │       │   ├── sqSqueakOSXApplication.h
    │   │   │       │   ├── sqSqueakOSXApplication.m
    │   │   │       │   ├── sqSqueakOSXClipboardAPI.h
    │   │   │       │   ├── sqSqueakOSXClipboardAPI.m
    │   │   │       │   ├── sqSqueakOSXDropAPI.h
    │   │   │       │   ├── sqSqueakOSXDropAPI.m
    │   │   │       │   ├── sqSqueakOSXFileDirectoryInterface.h
    │   │   │       │   ├── sqSqueakOSXFileDirectoryInterface.m
    │   │   │       │   ├── sqSqueakOSXInfoPlistInterface.h
    │   │   │       │   ├── sqSqueakOSXInfoPlistInterface.m
    │   │   │       │   ├── sqSqueakOSXNSView.h
    │   │   │       │   ├── sqSqueakOSXNSView.m
    │   │   │       │   ├── sqSqueakOSXScreenAndWindow.h
    │   │   │       │   └── sqSqueakOSXScreenAndWindow.m
    │   │   │       ├── Resources-iPad/
    │   │   │       │   └── MainWindow-iPad.xib
    │   │   │       ├── RoarVMOnIPad.xcodeproj/
    │   │   │       │   ├── johnmci.mode1v3
    │   │   │       │   ├── johnmci.pbxuser
    │   │   │       │   └── project.pbxproj
    │   │   │       ├── RoarVMSwipeEvent.h
    │   │   │       ├── RoarVMSwipeEvent.m
    │   │   │       ├── Settings.bundle/
    │   │   │       │   ├── Root.plist
    │   │   │       │   └── en.lproj/
    │   │   │       │       └── Root.strings
    │   │   │       ├── SqueakNoOGLIPhone_Prefix.pch
    │   │   │       ├── SqueakPureObjc-Info 64x64.plist
    │   │   │       ├── SqueakPureObjc-Info.plist
    │   │   │       ├── SqueakPureObjc-InfoCOG.plist
    │   │   │       ├── SqueakPureObjc.xcodeproj/
    │   │   │       │   ├── MAC.mode1v3
    │   │   │       │   └── MAC.pbxuser
    │   │   │       ├── SqueakPureObjcCogVM.xcodeproj/
    │   │   │       │   ├── MAC.mode1v3
    │   │   │       │   ├── MAC.mode1v3~esteban_master
    │   │   │       │   ├── MAC.pbxuser
    │   │   │       │   ├── johnmci.mode1v3
    │   │   │       │   ├── johnmci.pbxuser
    │   │   │       │   └── project.pbxproj
    │   │   │       ├── SqueakPureObjc_Prefix.pch
    │   │   │       ├── artwork/
    │   │   │       │   └── MacSqueakIcons/
    │   │   │       │       ├── Changes.psd
    │   │   │       │       ├── Document Icon Template.psd
    │   │   │       │       ├── Gear.psd
    │   │   │       │       ├── Plugin.psd
    │   │   │       │       ├── Script.psd
    │   │   │       │       ├── Scroll.psd
    │   │   │       │       └── SqueakAqua.psd
    │   │   │       ├── iPhone/
    │   │   │       │   ├── Classes/
    │   │   │       │   │   ├── RoarVMAbstractEvent.h
    │   │   │       │   │   ├── RoarVMAbstractEvent.m
    │   │   │       │   │   ├── RoarVMMouseEvent.h
    │   │   │       │   │   ├── RoarVMMouseEvent.m
    │   │   │       │   │   ├── RoarVMMouseUpEvent.h
    │   │   │       │   │   ├── RoarVMMouseUpEvent.m
    │   │   │       │   │   ├── SqueakNoOGLIPhoneAppDelegate.h
    │   │   │       │   │   ├── SqueakNoOGLIPhoneAppDelegate.m
    │   │   │       │   │   ├── SqueakUIController.h
    │   │   │       │   │   ├── SqueakUIController.m
    │   │   │       │   │   ├── SqueakUIView.h
    │   │   │       │   │   ├── SqueakUIView.m
    │   │   │       │   │   ├── SqueakUIViewCALayer.h
    │   │   │       │   │   ├── SqueakUIViewCALayer.m
    │   │   │       │   │   ├── SqueakUIViewOpenGL.h
    │   │   │       │   │   ├── SqueakUIViewOpenGL.m
    │   │   │       │   │   ├── SqueakUIViewOpenGLAlternate.m
    │   │   │       │   │   ├── UIGestureRecognizer+RoarVMEvents.h
    │   │   │       │   │   ├── UIGestureRecognizer+RoarVMEvents.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+Network.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+Network.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+attributes.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+attributes.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+clipboard.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+clipboard.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+events.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+events.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+imageReadWrite.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+imageReadWrite.m
    │   │   │       │   │   ├── sqSqueakIPhoneApplication+sound.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication.h
    │   │   │       │   │   ├── sqSqueakIPhoneApplication.m
    │   │   │       │   │   ├── sqSqueakIPhoneClipboardAPI.h
    │   │   │       │   │   ├── sqSqueakIPhoneClipboardAPI.m
    │   │   │       │   │   ├── sqSqueakIPhoneFileDirectoryInterface.h
    │   │   │       │   │   ├── sqSqueakIPhoneFileDirectoryInterface.m
    │   │   │       │   │   ├── sqSqueakIPhoneInfoPlistInterface.h
    │   │   │       │   │   ├── sqSqueakIPhoneInfoPlistInterface.m
    │   │   │       │   │   ├── sqSqueakiPhoneApplication+sound.m
    │   │   │       │   │   ├── sqiPhoneScreenAndWindow.h
    │   │   │       │   │   └── sqiPhoneScreenAndWindow.m
    │   │   │       │   ├── Info-iPhone.plist
    │   │   │       │   ├── SqueakV3-minimum-MVC.sources
    │   │   │       │   ├── config.h
    │   │   │       │   ├── iPhone.changes
    │   │   │       │   ├── iPhone.image
    │   │   │       │   ├── macintoshextra.c
    │   │   │       │   ├── macintoshextra.h
    │   │   │       │   ├── osExports.c
    │   │   │       │   ├── plugins/
    │   │   │       │   │   ├── ClipboardExtended/
    │   │   │       │   │   │   ├── sqMacExtendedClipboard.h
    │   │   │       │   │   │   └── sqMacExtendedClipboard.m
    │   │   │       │   │   ├── HostWindowPlugin/
    │   │   │       │   │   │   ├── sqMacHostWindow.c
    │   │   │       │   │   │   └── sqMacHostWindow.h
    │   │   │       │   │   └── SqueakFFIPrims/
    │   │   │       │   │       ├── dummyFFI.c
    │   │   │       │   │       └── dummyFFI.h
    │   │   │       │   ├── sqConfig.h
    │   │   │       │   ├── sqDummyaio.c
    │   │   │       │   ├── sqDummyaio.h
    │   │   │       │   ├── sqMacV2Memory.c
    │   │   │       │   ├── sqMacV2Memory.h
    │   │   │       │   └── sqPlatformSpecific.h
    │   │   │       ├── sqGnu.h
    │   │   │       └── src/
    │   │   │           ├── plugins/
    │   │   │           │   └── LocalePlugin/
    │   │   │           │       └── LocalePlugin.c
    │   │   │           ├── plugins.int
    │   │   │           └── vm/
    │   │   │               ├── interp.c
    │   │   │               ├── interp.h
    │   │   │               └── sqNamedPrims.h
    │   │   ├── intplugins/
    │   │   │   ├── ADPCMCodecPlugin/
    │   │   │   │   └── ADPCMCodecPlugin.c
    │   │   │   ├── AsynchFilePlugin/
    │   │   │   │   └── AsynchFilePlugin.c
    │   │   │   ├── B2DPlugin/
    │   │   │   │   └── B2DPlugin.c
    │   │   │   ├── B3DAcceleratorPlugin/
    │   │   │   │   └── B3DAcceleratorPlugin.c
    │   │   │   ├── BMPReadWriterPlugin/
    │   │   │   │   └── BMPReadWriterPlugin.c
    │   │   │   ├── BitBltPlugin/
    │   │   │   │   └── BitBltPlugin.c
    │   │   │   ├── CroquetPlugin/
    │   │   │   │   └── CroquetPlugin.c
    │   │   │   ├── DSAPrims/
    │   │   │   │   └── DSAPrims.c
    │   │   │   ├── DropPlugin/
    │   │   │   │   └── DropPlugin.c
    │   │   │   ├── FFTPlugin/
    │   │   │   │   └── FFTPlugin.c
    │   │   │   ├── FT2Plugin/
    │   │   │   │   └── FT2Plugin.c
    │   │   │   ├── FileCopyPlugin/
    │   │   │   │   └── FileCopyPlugin.c
    │   │   │   ├── FilePlugin/
    │   │   │   │   └── FilePlugin.c
    │   │   │   ├── FloatArrayPlugin/
    │   │   │   │   └── FloatArrayPlugin.c
    │   │   │   ├── FloatMathPlugin/
    │   │   │   │   └── FloatMathPlugin.c
    │   │   │   ├── GeniePlugin/
    │   │   │   │   └── GeniePlugin.c
    │   │   │   ├── HostWindowPlugin/
    │   │   │   │   └── HostWindowPlugin.c
    │   │   │   ├── IA32ABI/
    │   │   │   │   └── IA32ABI.c
    │   │   │   ├── JPEGReadWriter2Plugin/
    │   │   │   │   └── JPEGReadWriter2Plugin.c
    │   │   │   ├── JPEGReaderPlugin/
    │   │   │   │   └── JPEGReaderPlugin.c
    │   │   │   ├── JoystickTabletPlugin/
    │   │   │   │   └── JoystickTabletPlugin.c
    │   │   │   ├── Klatt/
    │   │   │   │   └── Klatt.c
    │   │   │   ├── LargeIntegers/
    │   │   │   │   └── LargeIntegers.c
    │   │   │   ├── LocalePlugin/
    │   │   │   │   └── LocalePlugin.c
    │   │   │   ├── MIDIPlugin/
    │   │   │   │   └── MIDIPlugin.c
    │   │   │   ├── Matrix2x3Plugin/
    │   │   │   │   └── Matrix2x3Plugin.c
    │   │   │   ├── MiscPrimitivePlugin/
    │   │   │   │   └── MiscPrimitivePlugin.c
    │   │   │   ├── Mpeg3Plugin/
    │   │   │   │   └── Mpeg3Plugin.c
    │   │   │   ├── ObjectiveCPlugin/
    │   │   │   │   └── ObjectiveCPlugin.c
    │   │   │   ├── RePlugin/
    │   │   │   │   └── RePlugin.c
    │   │   │   ├── SecurityPlugin/
    │   │   │   │   └── SecurityPlugin.c
    │   │   │   ├── SerialPlugin/
    │   │   │   │   └── SerialPlugin.c
    │   │   │   ├── SlangTestSupportPlugin/
    │   │   │   │   └── SlangTestSupportPlugin.c
    │   │   │   ├── SocketPlugin/
    │   │   │   │   └── SocketPlugin.c
    │   │   │   ├── SoundCodecPrims/
    │   │   │   │   └── SoundCodecPrims.c
    │   │   │   ├── SoundGenerationPlugin/
    │   │   │   │   └── SoundGenerationPlugin.c
    │   │   │   ├── SoundPlugin/
    │   │   │   │   └── SoundPlugin.c
    │   │   │   ├── Squeak3D/
    │   │   │   │   └── Squeak3D.c
    │   │   │   ├── SqueakFFIPrims/
    │   │   │   │   └── SqueakFFIPrims.c
    │   │   │   ├── StarSqueakPlugin/
    │   │   │   │   └── StarSqueakPlugin.c
    │   │   │   ├── UUIDPlugin/
    │   │   │   │   └── UUIDPlugin.c
    │   │   │   ├── UnixOSProcessPlugin/
    │   │   │   │   └── UnixOSProcessPlugin.c
    │   │   │   └── ZipPlugin/
    │   │   │       └── ZipPlugin.c
    │   │   └── unix/
    │   │       ├── CMakeLists.txt
    │   │       ├── ChangeLog
    │   │       ├── Makefile
    │   │       ├── README
    │   │       ├── README.CMake
    │   │       ├── README.SVN
    │   │       ├── cmake/
    │   │       │   ├── Fixes.cmake
    │   │       │   ├── PluginExternal.cmake
    │   │       │   ├── PluginInternal.cmake
    │   │       │   ├── Plugins.cmake
    │   │       │   ├── Utils.cmake
    │   │       │   ├── config.guess
    │   │       │   ├── config.in
    │   │       │   ├── config.sub
    │   │       │   ├── configure
    │   │       │   ├── disabledPlugins.c
    │   │       │   ├── gnuify
    │   │       │   ├── gnuify.awk
    │   │       │   ├── squeak.in
    │   │       │   ├── squeak.sh.in
    │   │       │   ├── testDoubleWordAlignment.c
    │   │       │   ├── testDoubleWordOrder.c
    │   │       │   ├── testLanginfoCodeset.c
    │   │       │   └── verstamp
    │   │       ├── config/
    │   │       │   ├── Makefile
    │   │       │   ├── Makefile.cpp-plg.in
    │   │       │   ├── Makefile.in
    │   │       │   ├── Makefile.install
    │   │       │   ├── Makefile.plg.in
    │   │       │   ├── README
    │   │       │   ├── Squeak.spec.in
    │   │       │   ├── acinclude.m4
    │   │       │   ├── aclocal.m4
    │   │       │   ├── bin.squeak.sh.in
    │   │       │   ├── build
    │   │       │   ├── config.guess
    │   │       │   ├── config.h.in
    │   │       │   ├── config.sub
    │   │       │   ├── configure
    │   │       │   ├── configure.ac
    │   │       │   ├── gnuify
    │   │       │   ├── inisqueak.in
    │   │       │   ├── install-sh
    │   │       │   ├── ltcf-c.sh
    │   │       │   ├── ltconfig
    │   │       │   ├── ltmain.sh
    │   │       │   ├── make.cfg.in
    │   │       │   ├── make.ext.in
    │   │       │   ├── make.int.in
    │   │       │   ├── make.prg.in
    │   │       │   ├── mkacinc
    │   │       │   ├── mkconfig.in
    │   │       │   ├── mkinstalldirs
    │   │       │   ├── mkman
    │   │       │   ├── mkmf
    │   │       │   ├── mktargets
    │   │       │   ├── relpath
    │   │       │   ├── squeak.sh.in
    │   │       │   ├── uninstall
    │   │       │   ├── version
    │   │       │   ├── version.stamp
    │   │       │   ├── verstamp
    │   │       │   └── vmm.config
    │   │       ├── doc/
    │   │       │   ├── 3.10-1.RELEASE_NOTES
    │   │       │   ├── 3.10-2.RELEASE_NOTES
    │   │       │   ├── 3.10-3.RELEASE_NOTES
    │   │       │   ├── 3.2-1.RELEASE_NOTES
    │   │       │   ├── 3.2-2.RELEASE_NOTES
    │   │       │   ├── 3.2-3.RELEASE_NOTES
    │   │       │   ├── 3.2-4.RELEASE_NOTES
    │   │       │   ├── 3.2-5.RELEASE_NOTES
    │   │       │   ├── 3.2-6.RELEASE_NOTES
    │   │       │   ├── 3.5-1devel.RELEASE_NOTES
    │   │       │   ├── 3.6-3.RELEASE_NOTES
    │   │       │   ├── 3.7-7.RELEASE_NOTES
    │   │       │   ├── 3.7b-2.RELEASE_NOTES
    │   │       │   ├── 3.7b-3.RELEASE_NOTES
    │   │       │   ├── 3.7b-4.RELEASE_NOTES
    │   │       │   ├── 3.7b-5.RELEASE_NOTES
    │   │       │   ├── 3.9-4.RELEASE_NOTES
    │   │       │   ├── 3.9-7.RELEASE_NOTES
    │   │       │   ├── COPYING
    │   │       │   ├── COPYRIGHT
    │   │       │   ├── HowToBuildFromSource.html/
    │   │       │   │   ├── HowToBuildFromSource-node1.html
    │   │       │   │   ├── HowToBuildFromSource-node2.html
    │   │       │   │   ├── HowToBuildFromSource-node3.html
    │   │       │   │   ├── HowToBuildFromSource-node4.html
    │   │       │   │   ├── HowToBuildFromSource-node5.html
    │   │       │   │   ├── HowToBuildFromSource-node6.html
    │   │       │   │   ├── HowToBuildFromSource-node7.html
    │   │       │   │   ├── HowToBuildFromSource.css
    │   │       │   │   ├── HowToBuildFromSource.html
    │   │       │   │   └── index.html
    │   │       │   ├── HowToBuildFromSource.ps
    │   │       │   ├── HowToBuildFromSource.txt
    │   │       │   ├── LICENSE
    │   │       │   ├── Makefile
    │   │       │   ├── README.Contributing
    │   │       │   ├── README.Keyboard
    │   │       │   ├── README.Sound
    │   │       │   ├── RELEASE_NOTES_3.11.3.2135
    │   │       │   ├── RELEASE_NOTES_4.0.3.2196
    │   │       │   ├── RELEASE_NOTES_4.0.3.2202
    │   │       │   └── squeak.1
    │   │       ├── misc/
    │   │       │   ├── 00_README
    │   │       │   ├── AioPluginV1-1.sar
    │   │       │   ├── GLXUnix-ikp.2.cs
    │   │       │   ├── OSProcessPluginV3-3.sar
    │   │       │   ├── System-Tracing.2.cs
    │   │       │   ├── VMM38b4-64bit-image1-ikp.1.cs
    │   │       │   ├── VMM38b4-64bit-image2-ikp.1.cs
    │   │       │   ├── VMM38b4-64bit-vm1-ikp.1.cs
    │   │       │   ├── VMM38b4-64bit-vm2-ikp.2.cs
    │   │       │   ├── VMMaker-tpr.14.mcz
    │   │       │   ├── XDisplayControlPluginV1-0.sar
    │   │       │   └── threadValidate/
    │   │       │       ├── Makefile
    │   │       │       ├── config.h
    │   │       │       ├── sqTicker.c
    │   │       │       ├── sqUnixHeartbeat.c
    │   │       │       └── threadValidate.c
    │   │       ├── npsqueak/
    │   │       │   ├── Makefile
    │   │       │   ├── README.npsqueak
    │   │       │   ├── include/
    │   │       │   │   ├── jri.h
    │   │       │   │   ├── jri_md.h
    │   │       │   │   ├── jritypes.h
    │   │       │   │   ├── npapi.h
    │   │       │   │   └── npupp.h
    │   │       │   ├── npsqueak.c
    │   │       │   ├── npsqueakregister.in
    │   │       │   ├── npsqueakrun.in
    │   │       │   ├── npunix.c
    │   │       │   └── test/
    │   │       │       ├── plugintest.html
    │   │       │       └── plugintest.sts
    │   │       ├── plugins/
    │   │       │   ├── AioPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── config.cmake
    │   │       │   ├── AsynchFilePlugin/
    │   │       │   │   ├── sqUnixAsynchFile.c
    │   │       │   │   └── sqUnixAsynchFile.h
    │   │       │   ├── B3DAcceleratorPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── NOTES
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   ├── sqUnixOpenGL.c
    │   │       │   │   ├── sqUnixOpenGL.h
    │   │       │   │   └── zzz/
    │   │       │   │       ├── sqUnixOpenGL.OSX
    │   │       │   │       └── sqUnixOpenGL.X11
    │   │       │   ├── CameraPlugin/
    │   │       │   │   └── sqCamera.c
    │   │       │   ├── ClipboardExtendedPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixExtendedClipboard.c
    │   │       │   ├── DBusPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   └── config.cmake
    │   │       │   ├── DropPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   └── sqUnixDragDrop.c
    │   │       │   ├── FT2Plugin/
    │   │       │   │   ├── FT2PluginHeaderFix-ikp.1.cs
    │   │       │   │   └── config.cmake
    │   │       │   ├── FileCopyPlugin/
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── sqUnixFileCopyPlugin.c
    │   │       │   ├── FilePlugin/
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixFile.c
    │   │       │   ├── FloatMathPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── config.cmake
    │   │       │   ├── GStreamerPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   └── config.cmake
    │   │       │   ├── HostWindowPlugin/
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixHostWindowPlugin.c
    │   │       │   ├── ImmX11Plugin/
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── config.cmake
    │   │       │   ├── JPEGReadWriter2Plugin/
    │   │       │   │   └── Makefile.inc
    │   │       │   ├── JoystickTabletPlugin/
    │   │       │   │   └── sqUnixJoystickTablet.c
    │   │       │   ├── LocalePlugin/
    │   │       │   │   ├── sqUnixLocale.c
    │   │       │   │   └── sqUnixLocale.h
    │   │       │   ├── MIDIPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   ├── sqUnixMIDI.c
    │   │       │   │   ├── sqUnixMIDIALSA.inc
    │   │       │   │   └── sqUnixMIDINone.inc
    │   │       │   ├── Mpeg3Plugin/
    │   │       │   │   ├── Makefile.in
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── mkmf.subdirs
    │   │       │   ├── OggPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   └── config.cmake
    │   │       │   ├── PrintJobPlugin/
    │   │       │   │   ├── sqPrinting.c
    │   │       │   │   └── sqPrinting.h
    │   │       │   ├── PseudoTTYPlugin/
    │   │       │   │   ├── PseudoTTY.st
    │   │       │   │   ├── PseudoTTYPlugin.st
    │   │       │   │   ├── README
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   ├── openpty.h
    │   │       │   │   └── sqUnixPseudoTTYPlugin.c
    │   │       │   ├── RomePlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   └── config.cmake
    │   │       │   ├── SecurityPlugin/
    │   │       │   │   └── sqUnixSecurity.c
    │   │       │   ├── SerialPlugin/
    │   │       │   │   └── sqUnixSerial.c
    │   │       │   ├── SocketPlugin/
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixSocket.c
    │   │       │   ├── SoundPlugin/
    │   │       │   │   ├── sqUnixSound.c
    │   │       │   │   └── zzz/
    │   │       │   │       ├── Buffer.h
    │   │       │   │       ├── DoubleBuffer.h
    │   │       │   │       ├── Fifo.h
    │   │       │   │       └── ring.h
    │   │       │   ├── SqueakFFIPrims/
    │   │       │   │   ├── 00README
    │   │       │   │   ├── Makefile
    │   │       │   │   ├── Makefile.in
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── any-libffi-asm.S
    │   │       │   │   ├── any-libffi.c
    │   │       │   │   ├── build.cmake
    │   │       │   │   ├── config.cmake
    │   │       │   │   ├── ffi-config
    │   │       │   │   ├── ffi-test-main.c
    │   │       │   │   ├── ffi-test-sq.h
    │   │       │   │   ├── ffi-test.c
    │   │       │   │   ├── ffi-test.h
    │   │       │   │   ├── ppc-darwin-asm.S
    │   │       │   │   ├── ppc-darwin.c
    │   │       │   │   ├── ppc-global.h
    │   │       │   │   ├── ppc-sysv-asm.S
    │   │       │   │   ├── ppc-sysv.c
    │   │       │   │   ├── x86-sysv-asm.S
    │   │       │   │   └── x86-sysv.c
    │   │       │   ├── UUIDPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── config.cmake
    │   │       │   │   └── sqUnixUUID.c
    │   │       │   ├── UnixOSProcessPlugin/
    │   │       │   │   ├── Makefile.inc
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── build.cmake
    │   │       │   │   └── config.cmake
    │   │       │   ├── VideoForLinuxPlugin/
    │   │       │   │   ├── Video4Squeak-dgd.8.cs
    │   │       │   │   ├── VideoForLinuxPlugin.c
    │   │       │   │   ├── VideoForLinuxPlugin.h
    │   │       │   │   ├── acinclude.m4
    │   │       │   │   ├── ccvt.h
    │   │       │   │   ├── ccvt_c2.c
    │   │       │   │   ├── ccvt_misc.c
    │   │       │   │   ├── ccvt_types.h
    │   │       │   │   ├── palettes.c
    │   │       │   │   ├── palettes.h
    │   │       │   │   ├── videolib.c
    │   │       │   │   └── videolib.h
    │   │       │   └── XDisplayControlPlugin/
    │   │       │       ├── Makefile.inc
    │   │       │       ├── acinclude.m4
    │   │       │       ├── build.cmake
    │   │       │       └── config.cmake
    │   │       ├── src/
    │   │       │   ├── plugins/
    │   │       │   │   ├── AioPlugin/
    │   │       │   │   │   └── AioPlugin.c
    │   │       │   │   ├── B3DAcceleratorPlugin/
    │   │       │   │   │   └── B3DAcceleratorPlugin.c
    │   │       │   │   ├── ClipboardExtendedPlugin/
    │   │       │   │   │   └── ClipboardExtendedPlugin.c
    │   │       │   │   ├── DBusPlugin/
    │   │       │   │   │   └── DBusPlugin.c
    │   │       │   │   ├── FileCopyPlugin/
    │   │       │   │   │   └── FileCopyPlugin.c
    │   │       │   │   ├── GStreamerPlugin/
    │   │       │   │   │   └── GStreamerPlugin.c
    │   │       │   │   ├── HostWindowPlugin/
    │   │       │   │   │   └── HostWindowPlugin.c
    │   │       │   │   ├── KedamaPlugin/
    │   │       │   │   │   └── KedamaPlugin.c
    │   │       │   │   ├── KedamaPlugin2/
    │   │       │   │   │   └── KedamaPlugin2.c
    │   │       │   │   ├── Mpeg3Plugin/
    │   │       │   │   │   └── Mpeg3Plugin.c
    │   │       │   │   ├── RomePlugin/
    │   │       │   │   │   └── RomePlugin.c
    │   │       │   │   ├── Squeak3D/
    │   │       │   │   │   └── Squeak3D.c
    │   │       │   │   ├── SqueakFFIPrims/
    │   │       │   │   │   └── SqueakFFIPrims.c
    │   │       │   │   ├── UUIDPlugin/
    │   │       │   │   │   └── UUIDPlugin.c
    │   │       │   │   ├── UnixOSProcessPlugin/
    │   │       │   │   │   └── UnixOSProcessPlugin.c
    │   │       │   │   └── XDisplayControlPlugin/
    │   │       │   │       └── XDisplayControlPlugin.c
    │   │       │   ├── plugins.ext
    │   │       │   ├── plugins.int
    │   │       │   └── vm/
    │   │       │       ├── interp.c
    │   │       │       ├── interp.h
    │   │       │       └── sqNamedPrims.h
    │   │       ├── vm/
    │   │       │   ├── Makefile.in
    │   │       │   ├── SqDisplay.h
    │   │       │   ├── SqModule.h
    │   │       │   ├── SqSound.h
    │   │       │   ├── acinclude.m4
    │   │       │   ├── aio.c
    │   │       │   ├── build.cmake
    │   │       │   ├── config.cmake
    │   │       │   ├── debug.c
    │   │       │   ├── debug.h
    │   │       │   ├── dlfcn-dyld.c
    │   │       │   ├── feedback.h
    │   │       │   ├── glibc.h
    │   │       │   ├── interp.h
    │   │       │   ├── mac-alias.c
    │   │       │   ├── osExports.c
    │   │       │   ├── sqConfig.h
    │   │       │   ├── sqGnu.h
    │   │       │   ├── sqNamedPrims.h
    │   │       │   ├── sqPlatformSpecific.h
    │   │       │   ├── sqUnixCharConv.c
    │   │       │   ├── sqUnixCharConv.h
    │   │       │   ├── sqUnixEvent.c
    │   │       │   ├── sqUnixExternalPrims.c
    │   │       │   ├── sqUnixGL.h
    │   │       │   ├── sqUnixGlobals.h
    │   │       │   ├── sqUnixHeartbeat.c
    │   │       │   ├── sqUnixMain.c
    │   │       │   ├── sqUnixMain.h
    │   │       │   ├── sqUnixMemory.c
    │   │       │   ├── sqUnixThreads.c
    │   │       │   ├── sqUnixVMProfile.c
    │   │       │   ├── sqUnixWindow.h
    │   │       │   ├── sqaio.h
    │   │       │   └── sunos.h
    │   │       ├── vm-display-Quartz/
    │   │       │   ├── CPS.h
    │   │       │   ├── Info.plist.in
    │   │       │   ├── Makefile.in
    │   │       │   ├── Makefile.inc
    │   │       │   ├── PkgInfo
    │   │       │   ├── Resources/
    │   │       │   │   ├── GLXUnix-ikp.2.cs
    │   │       │   │   ├── SqueakChanges.icns
    │   │       │   │   ├── SqueakHelp/
    │   │       │   │   │   └── SqueakHelp.html
    │   │       │   │   ├── SqueakImage.icns
    │   │       │   │   ├── SqueakPlugin.icns
    │   │       │   │   ├── SqueakProject.icns
    │   │       │   │   ├── SqueakSources.icns
    │   │       │   │   └── SqueakVM.icns
    │   │       │   ├── Squeak.h
    │   │       │   ├── Squeak.m
    │   │       │   ├── SqueakView.h
    │   │       │   ├── SqueakView.m
    │   │       │   ├── SqueakWindow.h
    │   │       │   ├── SqueakWindow.m
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   ├── config.cmake
    │   │       │   ├── mkinfo
    │   │       │   ├── sqUnixQuartz.m
    │   │       │   ├── sqUnixQuartzGL.h
    │   │       │   └── zzz/
    │   │       │       ├── Squeak.h
    │   │       │       ├── Squeak.m
    │   │       │       ├── SqueakView.h
    │   │       │       ├── SqueakView.m
    │   │       │       ├── SqueakWindow.h
    │   │       │       ├── SqueakWindow.m
    │   │       │       └── sqUnixQuartz.m
    │   │       ├── vm-display-X11/
    │   │       │   ├── Makefile.in
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   ├── config.cmake
    │   │       │   ├── sqUnixMozilla.c
    │   │       │   ├── sqUnixOpenGL.X11
    │   │       │   ├── sqUnixX11.c
    │   │       │   └── sqUnixXdnd.c
    │   │       ├── vm-display-custom/
    │   │       │   ├── Makefile.in
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   └── sqUnixCustomWindow.c
    │   │       ├── vm-display-fbdev/
    │   │       │   ├── 00_README.fbdev
    │   │       │   ├── Makefile.in
    │   │       │   ├── TODO
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   ├── sqUnixFBDev.c
    │   │       │   ├── sqUnixFBDevFramebuffer.c
    │   │       │   ├── sqUnixFBDevKeyboard.c
    │   │       │   ├── sqUnixFBDevKeymap.c
    │   │       │   ├── sqUnixFBDevMouse.c
    │   │       │   ├── sqUnixFBDevMouseADB.c
    │   │       │   ├── sqUnixFBDevMousePS2.c
    │   │       │   └── sqUnixFBDevUtil.c
    │   │       ├── vm-display-null/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── build.cmake
    │   │       │   └── sqUnixDisplayNull.c
    │   │       ├── vm-sound-ALSA/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   └── sqUnixSoundALSA.c
    │   │       ├── vm-sound-MacOSX/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   ├── config.cmake
    │   │       │   ├── sqUnixSoundDebug.h
    │   │       │   └── sqUnixSoundMacOSX.c
    │   │       ├── vm-sound-NAS/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   └── sqUnixSoundNAS.c
    │   │       ├── vm-sound-OSS/
    │   │       │   ├── Makefile.inc
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   └── sqUnixSoundOSS.c
    │   │       ├── vm-sound-Sun/
    │   │       │   ├── acinclude.m4
    │   │       │   ├── config.cmake
    │   │       │   └── sqUnixSoundSun.c
    │   │       ├── vm-sound-custom/
    │   │       │   ├── acinclude.m4
    │   │       │   └── sqUnixCustomSound.c
    │   │       ├── vm-sound-null/
    │   │       │   ├── acinclude.m4
    │   │       │   ├── build.cmake
    │   │       │   └── sqUnixSoundNull.c
    │   │       └── vm-sound-pulse/
    │   │           ├── config.cmake
    │   │           └── sqUnixSoundPulseAudio.c
    │   ├── heap/
    │   │   ├── abstract_mark_sweep_collector.cpp
    │   │   ├── abstract_mark_sweep_collector.h
    │   │   ├── abstract_object_heap.cpp
    │   │   ├── abstract_object_heap.h
    │   │   ├── abstract_object_heap.inline.h
    │   │   ├── abstract_object_table.h
    │   │   ├── gc_oop_stack.h
    │   │   ├── indirect_oop_mark_sweep_collector.h
    │   │   ├── mark_sweep_collector.h
    │   │   ├── memory_system.cpp
    │   │   ├── memory_system.h
    │   │   ├── memory_system.inline.h
    │   │   ├── multicore_object_heap.cpp
    │   │   ├── multicore_object_heap.h
    │   │   ├── multicore_object_heap.inline.h
    │   │   ├── multicore_object_table.cpp
    │   │   ├── multicore_object_table.h
    │   │   ├── multicore_object_table.inline.h
    │   │   └── oop_closure.h
    │   ├── image_readers/
    │   │   ├── squeak_image_reader.cpp
    │   │   └── squeak_image_reader.h
    │   ├── interpreter/
    │   │   ├── abstract_primitive_table.h
    │   │   ├── at_cache.cpp
    │   │   ├── at_cache.h
    │   │   ├── external_primitive_table.h
    │   │   ├── interpreter_bytecodes.cpp
    │   │   ├── interpreter_bytecodes.h
    │   │   ├── interpreter_primitives.cpp
    │   │   ├── interpreter_primitives.h
    │   │   ├── method_cache.cpp
    │   │   ├── method_cache.h
    │   │   ├── obsolete_indexed_primitive_table.cpp
    │   │   ├── obsolete_indexed_primitive_table.h
    │   │   ├── obsolete_named_primitive_table.cpp
    │   │   ├── obsolete_named_primitive_table.h
    │   │   ├── primitive_table.cpp
    │   │   ├── primitive_table.h
    │   │   ├── squeak_interpreter.cpp
    │   │   └── squeak_interpreter.h
    │   ├── linux_bash_profile
    │   ├── linux_bashrc
    │   ├── makefiles/
    │   │   ├── Makefile.common
    │   │   ├── Makefile.debug
    │   │   ├── Makefile.opt
    │   │   └── configure
    │   ├── message_buffers/
    │   │   ├── buffered_channel.cpp
    │   │   ├── buffered_channel.h
    │   │   ├── buffered_channel_debug.h
    │   │   ├── synced_queue.cpp
    │   │   └── synced_queue.h
    │   ├── messages/
    │   │   ├── abstract_message.cpp
    │   │   ├── abstract_message.h
    │   │   ├── deferred_request.cpp
    │   │   ├── deferred_request.h
    │   │   ├── interactions.cpp
    │   │   ├── interactions.h
    │   │   ├── interpreter_subset_for_control_transfer.cpp
    │   │   ├── interpreter_subset_for_control_transfer.h
    │   │   ├── message_classes.cpp
    │   │   ├── message_classes.h
    │   │   ├── message_or_ack_request.cpp
    │   │   ├── message_or_ack_request.h
    │   │   ├── message_statics.cpp
    │   │   ├── message_statics.h
    │   │   ├── message_stats.cpp
    │   │   ├── message_stats.h
    │   │   ├── message_templates.h
    │   │   ├── receive_marker.cpp
    │   │   └── receive_marker.h
    │   ├── multichip/
    │   │   ├── abstract_zero_copy_command_queue_endpoint.cpp
    │   │   ├── abstract_zero_copy_command_queue_endpoint.h
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_endpoint.cpp
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_endpoint.h
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_receiver.cpp
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_receiver.h
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_sender.cpp
    │   │   ├── chip_to_chip_direct_to_hypervisor_zero_copy_sender.h
    │   │   ├── chip_to_chip_zero_copy_command_queue_endpoint.cpp
    │   │   ├── chip_to_chip_zero_copy_command_queue_endpoint.h
    │   │   ├── chip_to_chip_zero_copy_command_receiver.cpp
    │   │   ├── chip_to_chip_zero_copy_command_receiver.h
    │   │   ├── chip_to_chip_zero_copy_command_sender.cpp
    │   │   ├── chip_to_chip_zero_copy_command_sender.h
    │   │   ├── host_pci_info.cpp
    │   │   ├── host_pci_info.h
    │   │   ├── tilera_chip_to_chip_message_queue.cpp
    │   │   └── tilera_chip_to_chip_message_queue.h
    │   ├── objects/
    │   │   ├── chunk.h
    │   │   ├── chunk.inline.h
    │   │   ├── header_type.cpp
    │   │   ├── header_type.h
    │   │   ├── object.cpp
    │   │   ├── object.h
    │   │   ├── object.inline.h
    │   │   ├── object_indices.h
    │   │   ├── object_p.h
    │   │   ├── preheader.h
    │   │   ├── process_field_locator.cpp
    │   │   ├── process_field_locator.h
    │   │   ├── roots.cpp
    │   │   ├── roots.h
    │   │   ├── special_indices.h
    │   │   └── word_containing_object_type.h
    │   ├── oops/
    │   │   ├── abstract_oop.h
    │   │   ├── oop.cpp
    │   │   ├── oop.h
    │   │   ├── oop.inline.h
    │   │   └── tags.h
    │   ├── platform/
    │   │   ├── abstract_cpu_coordinate.h
    │   │   ├── abstract_memory_semantics.h
    │   │   ├── abstract_message_queue.h
    │   │   ├── abstract_os_interface.cpp
    │   │   ├── abstract_os_interface.h
    │   │   ├── cacheline_aligned.h
    │   │   ├── cpu_coordinate.h
    │   │   ├── dummy_cpu_coordinate.cpp
    │   │   ├── dummy_cpu_coordinate.h
    │   │   ├── ilib_message_queue.cpp
    │   │   ├── ilib_message_queue.h
    │   │   ├── ilib_os_interface.cpp
    │   │   ├── ilib_os_interface.h
    │   │   ├── logical_core.cpp
    │   │   ├── logical_core.h
    │   │   ├── memory_semantics.h
    │   │   ├── message_queue.h
    │   │   ├── os_interface.h
    │   │   ├── osx_os_interface.cpp
    │   │   ├── osx_os_interface.h
    │   │   ├── posix_os_interface.cpp
    │   │   ├── posix_os_interface.h
    │   │   ├── process_memory_semantics.cpp
    │   │   ├── process_memory_semantics.h
    │   │   ├── shared_memory_message_queue.cpp
    │   │   ├── shared_memory_message_queue.h
    │   │   ├── shared_memory_message_queue_per_sender.cpp
    │   │   ├── shared_memory_message_queue_per_sender.h
    │   │   ├── thread_memory_semantics.cpp
    │   │   ├── thread_memory_semantics.h
    │   │   ├── tile_cpu_coordinate.cpp
    │   │   ├── tile_cpu_coordinate.h
    │   │   ├── tmc_os_interface.cpp
    │   │   └── tmc_os_interface.h
    │   ├── primitives/
    │   │   ├── RVMPlugin.cpp
    │   │   └── RVMPlugin.h
    │   ├── runtime/
    │   │   ├── abstract_mutex.cpp
    │   │   ├── abstract_mutex.h
    │   │   ├── abstract_tracer.cpp
    │   │   ├── abstract_tracer.h
    │   │   ├── bytemap.cpp
    │   │   ├── bytemap.h
    │   │   ├── core_tracer.cpp
    │   │   ├── core_tracer.h
    │   │   ├── debug_helper.cpp
    │   │   ├── debug_helper.h
    │   │   ├── debug_store_checks.h
    │   │   ├── error_handling.cpp
    │   │   ├── error_handling.h
    │   │   ├── execution_tracer.cpp
    │   │   ├── execution_tracer.h
    │   │   ├── gc_debugging_tracer.cpp
    │   │   ├── gc_debugging_tracer.h
    │   │   ├── headers.h
    │   │   ├── main.cpp
    │   │   ├── measurements.cpp
    │   │   ├── measurements.h
    │   │   ├── my_rank.cpp
    │   │   ├── my_rank.h
    │   │   ├── oop_tracer.cpp
    │   │   ├── oop_tracer.h
    │   │   ├── performance_counters.cpp
    │   │   ├── performance_counters.h
    │   │   ├── printer.cpp
    │   │   ├── printer.h
    │   │   ├── profiling_tracer.cpp
    │   │   ├── profiling_tracer.h
    │   │   ├── rank_set.cpp
    │   │   ├── rank_set.h
    │   │   ├── runtime_tester.h
    │   │   ├── rvm_bitmap.cpp
    │   │   ├── rvm_bitmap.h
    │   │   ├── rvm_config.cpp
    │   │   ├── rvm_config.h
    │   │   ├── rvm_squeak_config.h
    │   │   ├── safepoint.cpp
    │   │   ├── safepoint.h
    │   │   ├── safepoint_ability.cpp
    │   │   ├── safepoint_ability.h
    │   │   ├── safepoint_request_queue.cpp
    │   │   ├── safepoint_request_queue.h
    │   │   ├── scheduler_mutex.cpp
    │   │   ├── scheduler_mutex.h
    │   │   ├── semaphore_mutex.cpp
    │   │   ├── semaphore_mutex.h
    │   │   ├── squeak_adapters.cpp
    │   │   ├── squeak_adapters.h
    │   │   ├── timeout_deferral.cpp
    │   │   ├── timeout_deferral.h
    │   │   ├── timeout_timer.cpp
    │   │   ├── timeout_timer.h
    │   │   ├── tracked_ptr.h
    │   │   ├── tracked_ptr_registry.h
    │   │   ├── utils.cpp
    │   │   └── utils.h
    │   ├── tests/
    │   │   ├── buffered_channel.cpp
    │   │   ├── cacheline_alignment.cpp
    │   │   ├── external_primitive_table.cpp
    │   │   ├── main.cpp
    │   │   ├── os_interface.cpp
    │   │   ├── starter.cpp
    │   │   ├── starter.h
    │   │   ├── synced_queue.cpp
    │   │   ├── synced_queue_threaded.cpp
    │   │   ├── test_os_interface.h
    │   │   └── tracked_ptr.cpp
    │   └── types/
    │       └── types.h
    └── tests/
        ├── __init__.py
        └── test_startup.py
Download .txt
Showing preview only (894K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10485 symbols across 735 files)

FILE: vm/src/externals/externals.cpp
  function setCompilerInitialized (line 20) | int setCompilerInitialized(int /* flagValue */) { unimpExt(); return 0; }
  function setFullScreenFlag (line 28) | void setFullScreenFlag(int32 value) {
  function int32 (line 32) | int32 getFullScreenFlag(void) {
  function int32 (line 37) | int32 ioMousePoint() {/*unimpExt();*/ return -1;}
  function ioGetButtonState (line 38) | int ioGetButtonState() {/*unimpExt();*/ return -1; }
  function ioGetKeystroke (line 39) | int ioGetKeystroke() {/*unimpExt();*/ return -1; }
  function ioSetCursor (line 40) | void    ioSetCursor(char*, int, int) {unimpExt();}
  function ioSetCursorWithMask (line 41) | int     ioSetCursorWithMask(char*, char*, int, int) {unimpExt(); return ...
  function ioFormPrint (line 42) | bool    ioFormPrint(int32* bitsAddr, int w, int h, int depth, double hSc...
  function ioSetDisplayMode (line 43) | int ioSetDisplayMode(int, int, int, int) {unimpExt();  return true;}
  function event_type_complex (line 49) | int event_type_complex() { return 6 /*UGH*/ /*EventTypeComplex*/; }
  function fn_t (line 54) | fn_t ioLoadFunctionFrom(const char*, const char*) {unimpExt(); return du...
  function fn_t (line 57) | fn_t ioLoadExternalFunctionOfLengthFromModuleOfLength(char*, int, char*,...
  function ioGetNextEvent (line 70) | int ioGetNextEvent(void*) { unimpExt(); }
  function ioGetButtonState (line 73) | int ioGetButtonState() {unimpExt(); return 0; }
  function int32 (line 74) | int32 ioMousePoint() {unimpExt(); return 0;}
  function ioSetDisplayMode (line 75) | int ioSetDisplayMode(int, int, int, int) {unimpExt();  return true;}
  function ioHasDisplayDepth (line 81) | bool ioHasDisplayDepth(int depth) {unimpExt(); return true;}
  function sigint (line 87) | void sigint() {The_Squeak_Interpreter()->handle_sigint();}

FILE: vm/src/from_squeak/Cross/plugins/AsynchFilePlugin/AsynchFilePlugin.h
  type AsyncFile (line 7) | typedef struct {

FILE: vm/src/from_squeak/Cross/plugins/B3DAcceleratorPlugin/B3DAcceleratorPlugin.h
  type B3DPrimitiveVertex (line 23) | typedef struct B3DPrimitiveVertex {
  type B3DPrimitiveMaterial (line 33) | typedef struct B3DPrimitiveMaterial {
  type B3DPrimitiveLight (line 52) | typedef struct B3DPrimitiveLight {

FILE: vm/src/from_squeak/Cross/plugins/B3DAcceleratorPlugin/sqOpenGLRenderer.c
  function glGetRendererSurfaceHandle (line 43) | int glGetRendererSurfaceHandle(int handle) {
  function glGetRendererColorMasks (line 55) | int glGetRendererColorMasks(int handle, int *masks) {
  function glGetRendererSurfaceWidth (line 63) | int glGetRendererSurfaceWidth(int handle) {
  function glGetRendererSurfaceHeight (line 68) | int glGetRendererSurfaceHeight(int handle) {
  function glGetRendererSurfaceDepth (line 73) | int glGetRendererSurfaceDepth(int handle) {
  function glAllocateTexture (line 83) | int glAllocateTexture(int handle, int w, int h, int d) /* return handle ...
  function glDestroyTexture (line 136) | int glDestroyTexture(int rendererHandle, int handle) /* return true on s...
  function glActualTextureDepth (line 154) | int glActualTextureDepth(int rendererHandle, int handle) /* return depth...
  function glTextureColorMasks (line 161) | int glTextureColorMasks(int rendererHandle, int handle, int masks[4])  /...
  function glTextureByteSex (line 179) | int glTextureByteSex(int rendererHandle, int handle) /* return > 0 if MS...
  function glTextureSurfaceHandle (line 190) | int glTextureSurfaceHandle(int rendererHandle, int handle) {
  function glUploadTexture (line 195) | int glUploadTexture(int rendererHandle, int handle, int w, int h, int d,...
  function glCompositeTexture (line 229) | int glCompositeTexture(int rendererHandle, int handle, int x, int y, int...
  function glSetViewport (line 324) | int glSetViewport(int handle, int x, int y, int w, int h) /* return true...
  function glClearDepthBuffer (line 344) | int glClearDepthBuffer(int handle) /* return true on success, false on e...
  function glClearViewport (line 354) | int glClearViewport(int handle, unsigned int rgba, unsigned int pv) /* r...
  function glFinishRenderer (line 369) | int glFinishRenderer(int handle) /* return true on success, false on err...
  function glFlushRenderer (line 379) | int glFlushRenderer(int handle) /* return true on success, false on erro...
  function glSwapRendererBuffers (line 389) | int glSwapRendererBuffers(int handle) /* return true on success, false o...
  function glSetTransform (line 400) | int glSetTransform(int handle, float *modelViewMatrix, float *projection...
  function glDisableLights (line 435) | int glDisableLights(int handle) {
  function glLoadMaterial (line 457) | int glLoadMaterial(int handle, B3DPrimitiveMaterial *mat)
  function glLoadLight (line 493) | int glLoadLight(int handle, int idx, B3DPrimitiveLight *light)
  function glSetFog (line 623) | int glSetFog(int handle, int fogType, double density,
  function glGetIntProperty (line 653) | int glGetIntProperty(int handle, int prop)
  function glSetIntProperty (line 708) | int glSetIntProperty(int handle, int prop, int value)
  function glRenderVertex (line 781) | static void glRenderVertex(B3DPrimitiveVertex *vtx, int flags)
  type B3DInputFace (line 803) | typedef int B3DInputFace;
  function glRenderVertexBuffer (line 805) | int glRenderVertexBuffer(int handle, int primType, int flags, int texHan...
  function b3dLoadClientState (line 1009) | int b3dLoadClientState(int handle, float *vtxData, int vtxSize, float *c...
  function b3dDrawRangeElements (line 1026) | int b3dDrawRangeElements(int handle, int mode, int minIdx, int maxIdx, i...
  function b3dDrawElements (line 1052) | int b3dDrawElements(int handle, int mode, int nFaces, unsigned int *face...
  function b3dDrawArrays (line 1059) | int b3dDrawArrays(int handle, int mode, int minIdx, int maxIdx) {

FILE: vm/src/from_squeak/Cross/plugins/B3DAcceleratorPlugin/sqOpenGLRenderer.h
  type glRenderer (line 13) | typedef struct glRenderer {
  type glRenderer (line 19) | struct glRenderer
  type glRenderer (line 20) | struct glRenderer
  type glRenderer (line 21) | struct glRenderer

FILE: vm/src/from_squeak/Cross/plugins/BochsIA32Plugin/BochsIA32Plugin.h
  type ulong (line 13) | typedef unsigned long ulong;

FILE: vm/src/from_squeak/Cross/plugins/BochsIA32Plugin/sqBochsIA32Plugin.cpp
  function resetCPU (line 53) | int
  function singleStepCPUInSizeMinAddressReadWrite (line 87) | int
  function runCPUInSizeMinAddressReadWrite (line 120) | int
  function flushICacheFromTo (line 161) | void
  function disassembleForAtInSize (line 169) | int
  function forceStopRunning (line 211) | void
  function errorAcorn (line 220) | int
  function bx_phy_address (line 329) | bx_phy_address BX_CPU_C::translate_linear(bx_address laddr, unsigned cur...
  function bx_bool (line 335) | bx_bool BX_CPU_C::dbg_xlate_linear2phy(bx_address laddr, bx_phy_address ...
  function bx_bool (line 408) | bx_bool BX_MEM_C::dbg_fetch_mem(BX_CPU_C *cpu, bx_phy_address addr, unsi...

FILE: vm/src/from_squeak/Cross/plugins/CroquetPlugin/md5.h
  function MD5Transform (line 24) | static void MD5Transform(unsigned int buf[4],

FILE: vm/src/from_squeak/Cross/plugins/CroquetPlugin/tribox.c
  function planeBoxOverlap (line 45) | int planeBoxOverlap(float normal[3],float vert[3], float maxbox[3])
  function triBoxOverlap (line 116) | int triBoxOverlap(float minCorner[3],float maxCorner[3],

FILE: vm/src/from_squeak/Cross/plugins/ExampleSurfacePlugin/sqMemorySurface.c
  type memSurface (line 7) | typedef struct memSurface {
  type VirtualMachine (line 17) | struct VirtualMachine
  function memGetSurfaceFormat (line 20) | static int memGetSurfaceFormat(memSurface *ms, int *w, int *h, int *d, i...
  function memLock (line 28) | static int memLock(memSurface *ms, int *stride, int x, int y, int w, int...
  function memUnlock (line 35) | static int memUnlock(memSurface *ms, int x, int y, int w, int h){
  function memShow (line 39) | static int memShow(memSurface *ms, int x, int y, int w, int h) {
  function memCreateSurfaceWidthHeightDepth (line 55) | int memCreateSurfaceWidthHeightDepth(int w, int h, int d) {
  function memDestroySurface (line 77) | int memDestroySurface(int id) {
  function memGetSurfaceWidth (line 86) | int memGetSurfaceWidth(int id) {
  function memGetSurfaceHeight (line 92) | int memGetSurfaceHeight(int id) {
  function memGetSurfaceDepth (line 98) | int memGetSurfaceDepth(int id) {
  function memGetSurfaceBits (line 104) | int memGetSurfaceBits(int id) {
  function memInitialize (line 110) | int memInitialize(void) {

FILE: vm/src/from_squeak/Cross/plugins/FilePlugin/FilePlugin.c
  type VirtualMachine (line 89) | struct VirtualMachine
  type VirtualMachine (line 99) | struct VirtualMachine
  function sqInt (line 119) | static sqInt
  function fileOpenNamesizewritesecure (line 128) | EXPORT(sqInt)
  function sqInt (line 167) | sqInt
  function SQFile (line 178) | SQFile *
  function VirtualMachine (line 192) | static VirtualMachine *
  function getModuleName (line 204) | EXPORT(const char*)
  function getThisSession (line 215) | EXPORT(sqInt)
  function sqInt (line 221) | static sqInt
  function initialiseModule (line 228) | EXPORT(sqInt)
  function sqInt (line 244) | static sqInt
  function moduleUnloaded (line 289) | EXPORT(sqInt)
  function sqInt (line 297) | static sqInt
  function primitiveDirectoryCreate (line 304) | EXPORT(sqInt)
  function primitiveDirectoryDelete (line 334) | EXPORT(sqInt)
  function primitiveDirectoryDelimitor (line 364) | EXPORT(sqInt)
  function primitiveDirectoryEntry (line 383) | EXPORT(sqInt)
  function primitiveDirectoryGetMacTypeAndCreator (line 441) | EXPORT(sqInt)
  function primitiveDirectoryLookup (line 487) | EXPORT(sqInt)
  function primitiveDirectorySetMacTypeAndCreator (line 541) | EXPORT(sqInt)
  function primitiveDisableFileAccess (line 591) | EXPORT(sqInt)
  function primitiveFileAtEnd (line 599) | EXPORT(sqInt)
  function primitiveFileClose (line 625) | EXPORT(sqInt)
  function primitiveFileDelete (line 649) | EXPORT(sqInt)
  function primitiveFileFlush (line 679) | EXPORT(sqInt)
  function primitiveFileGetPosition (line 703) | EXPORT(sqInt)
  function primitiveFileOpen (line 728) | EXPORT(sqInt)
  function primitiveFileRead (line 750) | EXPORT(sqInt)
  function primitiveFileRename (line 799) | EXPORT(sqInt)
  function primitiveFileSetPosition (line 836) | EXPORT(sqInt)
  function primitiveFileSize (line 869) | EXPORT(sqInt)
  function primitiveFileStdioHandles (line 902) | EXPORT(sqInt)
  function primitiveFileTruncate (line 951) | EXPORT(sqInt)
  function primitiveFileWrite (line 984) | EXPORT(sqInt)
  function primitiveHasFileAccess (line 1034) | EXPORT(sqInt)
  function setInterpreter (line 1052) | EXPORT(sqInt)
  function setMacFileTypeAndCreator (line 1071) | EXPORT(sqInt)
  function shutdownModule (line 1077) | EXPORT(sqInt)

FILE: vm/src/from_squeak/Cross/plugins/FilePlugin/FilePlugin.h
  type SQFile (line 21) | typedef struct {

FILE: vm/src/from_squeak/Cross/plugins/FilePlugin/sqFilePluginBasicPrims.c
  type VirtualMachine (line 80) | struct VirtualMachine
  function setFile (line 86) | static void setFile(SQFile *f, FILE *file)
  function setSize (line 97) | static void setSize(SQFile *f, squeakFileOffsetType size)
  function FILE (line 108) | static FILE *getFile(SQFile *f)
  function squeakFileOffsetType (line 121) | static squeakFileOffsetType getSize(SQFile *f)
  function sqInt (line 143) | sqInt sqFileAtEnd(SQFile *f) {
  function sqInt (line 154) | sqInt sqFileClose(SQFile *f) {
  function sqInt (line 168) | sqInt sqFileDeleteNameSize(char* sqFileName, sqInt sqFileNameSize) {
  function squeakFileOffsetType (line 186) | squeakFileOffsetType sqFileGetPosition(SQFile *f) {
  function sqInt (line 203) | sqInt sqFileInit(void) {
  function sqInt (line 217) | sqInt sqFileShutdown(void) {
  function sqInt (line 221) | sqInt sqFileOpen(SQFile *f, char* sqFileName, sqInt sqFileNameSize, sqIn...
  function sqInt (line 282) | sqInt
  function sqFileReadIntoAt (line 320) | size_t sqFileReadIntoAt(SQFile *f, size_t count, char* byteArrayIndex, s...
  function sqInt (line 374) | sqInt sqFileRenameOldSizeNewSize(char* oldNameIndex, sqInt oldNameSize, ...
  function sqInt (line 394) | sqInt sqFileSetPosition(SQFile *f, squeakFileOffsetType position) {
  function squeakFileOffsetType (line 421) | squeakFileOffsetType sqFileSize(SQFile *f) {
  function sqInt (line 431) | sqInt sqFileFlush(SQFile *f) {
  function sqInt (line 440) | sqInt sqFileTruncate(SQFile *f,squeakFileOffsetType offset) {
  function sqInt (line 451) | sqInt sqFileValid(SQFile *f) {
  function sqFileWriteFromAt (line 458) | size_t sqFileWriteFromAt(SQFile *f, size_t count, char* byteArrayIndex, ...
  function sqInt (line 489) | sqInt sqFileThisSession() {

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_acos.c
  function __ieee754_acos (line 63) | double __ieee754_acos(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_acosh.c
  function __ieee754_acosh (line 42) | double __ieee754_acosh(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_asin.c
  function __ieee754_asin (line 72) | double __ieee754_asin(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_atan2.c
  function __ieee754_atan2 (line 59) | double __ieee754_atan2(y,x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_atanh.c
  function __ieee754_atanh (line 46) | double __ieee754_atanh(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_cosh.c
  function __ieee754_cosh (line 46) | double __ieee754_cosh(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_exp.c
  function __ieee754_exp (line 104) | double __ieee754_exp(x)	/* default IEEE double exp */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_fmod.c
  function __ieee754_fmod (line 31) | double __ieee754_fmod(x,y)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_gamma.c
  function __ieee754_gamma (line 28) | double __ieee754_gamma(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_gamma_r.c
  function __ieee754_gamma_r (line 27) | double __ieee754_gamma_r(x,signgamp)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_hypot.c
  function __ieee754_hypot (line 51) | double __ieee754_hypot(x,y)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_j0.c
  function __ieee754_j0 (line 91) | double __ieee754_j0(x)
  function __ieee754_y0 (line 160) | double __ieee754_y0(x)
  function pzero (line 323) | static double pzero(x)
  function qzero (line 458) | static double qzero(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_j1.c
  function __ieee754_j1 (line 92) | double __ieee754_j1(x)
  function __ieee754_y1 (line 161) | double __ieee754_y1(x)
  function pone (line 321) | static double pone(x)
  function qone (line 457) | static double qone(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_jn.c
  function __ieee754_jn (line 56) | double __ieee754_jn(n,x)
  function __ieee754_yn (line 217) | double __ieee754_yn(n,x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_lgamma.c
  function __ieee754_lgamma (line 28) | double __ieee754_lgamma(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_lgamma_r.c
  function sin_pi (line 161) | static double sin_pi(x)
  function __ieee754_lgamma_r (line 209) | double __ieee754_lgamma_r(x,signgamp)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_log.c
  function __ieee754_log (line 88) | double __ieee754_log(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_log10.c
  function __ieee754_log10 (line 64) | double __ieee754_log10(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_pow.c
  function __ieee754_pow (line 103) | double __ieee754_pow(x,y)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_rem_pio2.c
  function __ieee754_rem_pio2 (line 86) | int __ieee754_rem_pio2(x,y)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_remainder.c
  function __ieee754_remainder (line 35) | double __ieee754_remainder(x,p)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_scalb.c
  function __ieee754_scalb (line 33) | double __ieee754_scalb(x,fn)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_sinh.c
  function __ieee754_sinh (line 43) | double __ieee754_sinh(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_sqrt.c
  function __ieee754_sqrt (line 94) | double __ieee754_sqrt(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/fdlibm.h
  type fdversion (line 48) | enum fdversion {fdlibm_ieee = -1, fdlibm_svid, fdlibm_xopen, fdlibm_posix}
  type exception (line 67) | struct exception {
  type exception (line 148) | struct exception

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_cos.c
  function __kernel_cos (line 67) | double __kernel_cos(x, y)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_sin.c
  function __kernel_sin (line 60) | double __kernel_sin(x, y, iy)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_standard.c
  function __kernel_standard (line 80) | double __kernel_standard(x,y,type)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_tan.c
  function __kernel_tan (line 73) | double

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_asinh.c
  function asinh (line 39) | double asinh(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_atan.c
  function __ieee754_atan (line 88) | double __ieee754_atan(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_cbrt.c
  function cbrt (line 42) | double cbrt(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_ceil.c
  function ceil (line 34) | double ceil(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_copysign.c
  function copysign (line 25) | double copysign(x,y)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_cos.c
  function cos (line 50) | double cos(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_erf.c
  function erf (line 193) | double erf(x)
  function erfc (line 249) | double erfc(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_expm1.c
  function expm1 (line 132) | double expm1(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_fabs.c
  function fabs (line 23) | double fabs(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_finite.c
  function finite (line 24) | int finite(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_floor.c
  function floor (line 34) | double floor(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_frexp.c
  function frexp (line 36) | double frexp(x, eptr)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_ilogb.c
  function ilogb (line 25) | int ilogb(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_isnan.c
  function isnan (line 24) | int isnan(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_ldexp.c
  function ldexp (line 20) | double ldexp(value, exp)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_log1p.c
  function log1p (line 102) | double log1p(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_logb.c
  function logb (line 25) | double logb(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_matherr.c
  type exception (line 17) | struct exception
  function matherr (line 19) | int matherr(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_modf.c
  function modf (line 35) | double modf(x, iptr)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_nextafter.c
  function nextafter (line 26) | double nextafter(x,y)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_rint.c
  function rint (line 39) | double rint(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_scalbn.c
  function scalbn (line 36) | double scalbn (x,n)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_significand.c
  function significand (line 25) | double significand(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_sin.c
  function sin (line 50) | double sin(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_tan.c
  function tan (line 49) | double tan(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_tanh.c
  function tanh (line 49) | double tanh(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_acos.c
  function acos (line 24) | double acos(x)			/* wrapper acos */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_acosh.c
  function acosh (line 24) | double acosh(x)			/* wrapper acosh */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_asin.c
  function asin (line 26) | double asin(x)			/* wrapper asin */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_atan2.c
  function atan2 (line 25) | double atan2(y,x)			/* wrapper atan2 */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_atanh.c
  function atanh (line 23) | double atanh(x)			/* wrapper atanh */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_cosh.c
  function cosh (line 23) | double cosh(x)			/* wrapper cosh */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_exp.c
  function exp (line 30) | double exp(x)			/* wrapper exp */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_fmod.c
  function fmod (line 24) | double fmod(x,y)		/* wrapper fmod */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_gamma.c
  function gamma (line 28) | double gamma(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_gamma_r.c
  function gamma_r (line 24) | double gamma_r(x,signgamp)              /* wrapper lgamma_r */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_hypot.c
  function hypot (line 24) | double hypot(x,y)		/* wrapper hypot */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_j0.c
  function j0 (line 23) | double j0(x)			/* wrapper j0 */
  function y0 (line 42) | double y0(x)			/* wrapper y0 */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_j1.c
  function j1 (line 23) | double j1(x)			/* wrapper j1 */
  function y1 (line 43) | double y1(x)			/* wrapper y1 */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_jn.c
  function jn (line 45) | double jn(n,x)			/* wrapper jn */
  function yn (line 65) | double yn(n,x)			/* wrapper yn */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_lgamma.c
  function lgamma (line 28) | double lgamma(x)

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_lgamma_r.c
  function lgamma_r (line 24) | double lgamma_r(x,signgamp)              /* wrapper lgamma_r */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_log.c
  function log (line 24) | double log(x)			/* wrapper log */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_log10.c
  function log10 (line 24) | double log10(x)			/* wrapper log10 */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_pow.c
  function pow (line 25) | double pow(x,y)			/* wrapper pow */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_remainder.c
  function remainder (line 23) | double remainder(x,y)			/* wrapper remainder */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_sinh.c
  function sinh (line 23) | double sinh(x)			/* wrapper sinh */

FILE: vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_sqrt.c
  function sqrt (line 23) | double sqrt(x)			/* wrapper sqrt */

FILE: vm/src/from_squeak/Cross/plugins/GStreamerPlugin/squeakAudioVideoPipeLineSignalInterface.c
  function squeakVideoHandOff (line 34) | void squeakVideoHandOff (GstElement* object,
  function squeakSrcHandOff (line 69) | void squeakSrcHandOff (GstElement* object,
  function gst_SqueakVideoSink_set_caps (line 93) | void
  function squeakAudioHandOff (line 116) | void squeakAudioHandOff (GstElement* object,
  function gst_SqueakAudioSink_sink_write (line 131) | void gst_SqueakAudioSink_sink_write(GstElement* plugin, SqueakAudioVideo...

FILE: vm/src/from_squeak/Cross/plugins/GStreamerPlugin/squeakAudioVideoPipeLineSignalInterface.h
  type _SqueakAudioVideoSink (line 12) | struct _SqueakAudioVideoSink {
  type SqueakAudioVideoSink (line 32) | typedef struct _SqueakAudioVideoSink       SqueakAudioVideoSink;
  type _SqueakAudioVideoSink (line 33) | struct _SqueakAudioVideoSink

FILE: vm/src/from_squeak/Cross/plugins/IA32ABI/ia32abicc.c
  type objc_class (line 18) | struct objc_class
  function setbaz (line 20) | void setbaz(void *p) { baz = p; }
  type VirtualMachine (line 45) | struct VirtualMachine
  function sqInt (line 102) | sqInt
  function sqInt (line 116) | sqInt
  function sqInt (line 125) | sqInt
  function thunkEntry (line 154) | long

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/Error.c
  type error_mgr2 (line 5) | struct error_mgr2 {
  type error_mgr2 (line 11) | struct error_mgr2
  function error_exit (line 17) | void error_exit (j_common_ptr cinfo)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/JPEGReadWriter2Plugin.h
  type error_mgr2 (line 6) | struct error_mgr2 {
  type error_mgr2 (line 12) | struct error_mgr2

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcapimin.c
  function jpeg_CreateCompress (line 29) | GLOBAL(void)
  function jpeg_destroy_compress (line 87) | GLOBAL(void)
  function jpeg_abort_compress (line 99) | GLOBAL(void)
  function jpeg_suppress_tables (line 118) | GLOBAL(void)
  function jpeg_finish_compress (line 146) | GLOBAL(void)
  function jpeg_write_marker (line 191) | GLOBAL(void)
  function jpeg_write_m_header (line 213) | GLOBAL(void)
  function jpeg_write_m_byte (line 225) | GLOBAL(void)
  function jpeg_write_tables (line 253) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcapistd.c
  function jpeg_start_compress (line 37) | GLOBAL(void)
  function jpeg_write_scanlines (line 76) | GLOBAL(JDIMENSION)
  function jpeg_write_raw_data (line 119) | GLOBAL(JDIMENSION)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jccoefct.c
  type my_coef_controller (line 34) | typedef struct {
  type my_coef_controller (line 57) | typedef my_coef_controller * my_coef_ptr;
  function start_iMCU_row (line 71) | LOCAL(void)
  function start_pass_coef (line 99) | METHODDEF(void)
  function compress_data (line 142) | METHODDEF(boolean)
  function compress_first_pass (line 244) | METHODDEF(boolean)
  function compress_output (line 340) | METHODDEF(boolean)
  function jinit_c_coef_controller (line 404) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jccolor.c
  type my_color_converter (line 18) | typedef struct {
  type my_color_converter (line 25) | typedef my_color_converter * my_cconvert_ptr;
  function rgb_ycc_start (line 85) | METHODDEF(void)
  function rgb_ycc_convert (line 129) | METHODDEF(void)
  function rgb_gray_convert (line 185) | METHODDEF(void)
  function cmyk_ycck_convert (line 224) | METHODDEF(void)
  function grayscale_convert (line 279) | METHODDEF(void)
  function null_convert (line 308) | METHODDEF(void)
  function null_method (line 340) | METHODDEF(void)
  function jinit_color_converter (line 351) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcdctmgr.c
  type my_fdct_controller (line 22) | typedef struct {
  type my_fdct_controller (line 41) | typedef my_fdct_controller * my_fdct_ptr;
  function start_pass_fdctmgr (line 53) | METHODDEF(void)
  function forward_DCT (line 179) | METHODDEF(void)
  function forward_DCT_float (line 269) | METHODDEF(void)
  function jinit_forward_dct (line 344) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jchuff.c
  type savable_state (line 29) | typedef struct {
  type huff_entropy_encoder (line 55) | typedef struct {
  type huff_entropy_encoder (line 74) | typedef huff_entropy_encoder * huff_entropy_ptr;
  type working_state (line 80) | typedef struct {
  function start_pass_huff (line 105) | METHODDEF(void)
  function jpeg_make_c_derived_tbl (line 178) | GLOBAL(void)
  function dump_buffer (line 277) | LOCAL(boolean)
  function INLINE (line 300) | INLINE
  function flush_bits (line 339) | LOCAL(boolean)
  function encode_one_block (line 352) | LOCAL(boolean)
  function emit_restart (line 450) | LOCAL(boolean)
  function encode_mcu_huff (line 475) | METHODDEF(boolean)
  function finish_pass_huff (line 532) | METHODDEF(void)
  function htest_one_block (line 571) | LOCAL(void)
  function encode_mcu_gather (line 644) | METHODDEF(boolean)
  function jpeg_gen_optimal_table (line 704) | GLOBAL(void)
  function finish_pass_gather (line 845) | METHODDEF(void)
  function jinit_huff_encoder (line 890) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jchuff.h
  type c_derived_tbl (line 27) | typedef struct {

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcinit.c
  function jinit_compress_master (line 29) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcmainct.c
  type my_main_controller (line 28) | typedef struct {
  type my_main_controller (line 50) | typedef my_main_controller * my_main_ptr;
  function start_pass_main (line 68) | METHODDEF(void)
  function process_data_simple_main (line 112) | METHODDEF(void)
  function process_data_buffer_main (line 168) | METHODDEF(void)
  function jinit_c_main_controller (line 244) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcmarker.c
  type JPEG_MARKER (line 16) | typedef enum {			/* JPEG marker codes */
  type my_marker_writer (line 86) | typedef struct {
  type my_marker_writer (line 92) | typedef my_marker_writer * my_marker_ptr;
  function emit_byte (line 107) | LOCAL(void)
  function emit_marker (line 121) | LOCAL(void)
  function emit_2bytes (line 130) | LOCAL(void)
  function emit_dqt (line 143) | LOCAL(int)
  function emit_dht (line 183) | LOCAL(void)
  function emit_dac (line 221) | LOCAL(void)
  function emit_dri (line 264) | LOCAL(void)
  function emit_sof (line 276) | LOCAL(void)
  function emit_sos (line 307) | LOCAL(void)
  function emit_jfif_app0 (line 348) | LOCAL(void)
  function emit_adobe_app14 (line 383) | LOCAL(void)
  function write_marker_header (line 437) | METHODDEF(void)
  function write_marker_byte (line 449) | METHODDEF(void)
  function write_file_header (line 468) | METHODDEF(void)
  function write_frame_header (line 493) | METHODDEF(void)
  function write_scan_header (line 550) | METHODDEF(void)
  function write_file_trailer (line 601) | METHODDEF(void)
  function write_tables_only (line 615) | METHODDEF(void)
  function jinit_marker_writer (line 644) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcmaster.c
  type c_pass_type (line 21) | typedef enum {
  type my_comp_master (line 27) | typedef struct {
  type my_comp_master (line 38) | typedef my_comp_master * my_master_ptr;
  function initial_setup (line 45) | LOCAL(void)
  function validate_script (line 129) | LOCAL(void)
  function select_scan_parameters (line 266) | LOCAL(void)
  function per_scan_setup (line 307) | LOCAL(void)
  function prepare_for_pass (line 400) | METHODDEF(void)
  function pass_startup (line 488) | METHODDEF(void)
  function finish_pass_master (line 502) | METHODDEF(void)
  function jinit_c_master_control (line 542) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcomapi.c
  function jpeg_abort (line 28) | GLOBAL(void)
  function jpeg_destroy (line 68) | GLOBAL(void)
  function jpeg_alloc_quant_table (line 85) | GLOBAL(JQUANT_TBL *)
  function jpeg_alloc_huff_table (line 97) | GLOBAL(JHUFF_TBL *)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcparam.c
  function jpeg_add_quant_table (line 22) | GLOBAL(void)
  function jpeg_set_linear_quality (line 63) | GLOBAL(void)
  function jpeg_quality_scaling (line 105) | GLOBAL(int)
  function jpeg_set_quality (line 131) | GLOBAL(void)
  function add_huff_table (line 151) | LOCAL(void)
  function std_huff_tables (line 181) | LOCAL(void)
  function jpeg_set_defaults (line 267) | GLOBAL(void)
  function jpeg_default_colorspace (line 358) | GLOBAL(void)
  function jpeg_set_colorspace (line 390) | GLOBAL(void)
  function fill_a_scan (line 474) | LOCAL(jpeg_scan_info *)
  function fill_scans (line 489) | LOCAL(jpeg_scan_info *)
  function fill_dc_scans (line 508) | LOCAL(jpeg_scan_info *)
  function jpeg_simple_progression (line 536) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcphuff.c
  type phuff_entropy_encoder (line 24) | typedef struct {
  type phuff_entropy_encoder (line 62) | typedef phuff_entropy_encoder * phuff_entropy_ptr;
  function start_pass_phuff (line 105) | METHODDEF(void)
  function dump_buffer (line 204) | LOCAL(void)
  function INLINE (line 226) | INLINE
  function flush_bits (line 266) | LOCAL(void)
  function INLINE (line 279) | INLINE
  function emit_buffered_bits (line 296) | LOCAL(void)
  function emit_eobrun (line 315) | LOCAL(void)
  function emit_restart (line 346) | LOCAL(void)
  function encode_mcu_DC_first (line 376) | METHODDEF(boolean)
  function encode_mcu_AC_first (line 463) | METHODDEF(boolean)
  function encode_mcu_DC_refine (line 570) | METHODDEF(boolean)
  function encode_mcu_AC_refine (line 617) | METHODDEF(boolean)
  function finish_pass_phuff (line 745) | METHODDEF(void)
  function finish_pass_gather_phuff (line 766) | METHODDEF(void)
  function jinit_phuff_encoder (line 813) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcprepct.c
  type my_prep_controller (line 53) | typedef struct {
  type my_prep_controller (line 70) | typedef my_prep_controller * my_prep_ptr;
  function start_pass_prep (line 77) | METHODDEF(void)
  function expand_bottom_edge (line 105) | LOCAL(void)
  function pre_process_data (line 127) | METHODDEF(void)
  function pre_process_context (line 194) | METHODDEF(void)
  function create_context_buffer (line 266) | LOCAL(void)
  function jinit_c_prep_controller (line 314) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcsample.c
  type cinfo (line 54) | typedef JMETHOD(void, downsample1_ptr,
  type my_downsampler (line 60) | typedef struct {
  type my_downsampler (line 67) | typedef my_downsampler * my_downsample_ptr;
  function start_pass_downsample (line 74) | METHODDEF(void)
  function expand_right_edge (line 86) | LOCAL(void)
  function sep_downsample (line 113) | METHODDEF(void)
  function int_downsample (line 139) | METHODDEF(void)
  function fullsize_downsample (line 186) | METHODDEF(void)
  function h2v1_downsample (line 211) | METHODDEF(void)
  function h2v2_downsample (line 248) | METHODDEF(void)
  function h2v2_smooth_downsample (line 291) | METHODDEF(void)
  function fullsize_smooth_downsample (line 391) | METHODDEF(void)
  function jinit_downsampler (line 463) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jctrans.c
  function jpeg_write_coefficients (line 37) | GLOBAL(void)
  function jpeg_copy_critical_parameters (line 62) | GLOBAL(void)
  function transencode_master_selection (line 157) | LOCAL(void)
  type my_coef_controller (line 208) | typedef struct {
  type my_coef_controller (line 223) | typedef my_coef_controller * my_coef_ptr;
  function start_iMCU_row (line 226) | LOCAL(void)
  function start_pass_coef (line 254) | METHODDEF(void)
  function compress_output (line 277) | METHODDEF(boolean)
  function transencode_coef_controller (line 362) | LOCAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdapimin.c
  function jpeg_CreateDecompress (line 29) | GLOBAL(void)
  function jpeg_destroy_decompress (line 90) | GLOBAL(void)
  function jpeg_abort_decompress (line 102) | GLOBAL(void)
  function default_decompress_parms (line 113) | LOCAL(void)
  function jpeg_read_header (line 240) | GLOBAL(int)
  function jpeg_consume_input (line 286) | GLOBAL(int)
  function jpeg_input_complete (line 333) | GLOBAL(boolean)
  function jpeg_has_multiple_scans (line 348) | GLOBAL(boolean)
  function jpeg_finish_decompress (line 368) | GLOBAL(boolean)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdapistd.c
  function jpeg_start_decompress (line 37) | GLOBAL(boolean)
  function output_pass_setup (line 94) | LOCAL(boolean)
  function jpeg_read_scanlines (line 151) | GLOBAL(JDIMENSION)
  function jpeg_read_raw_data (line 184) | GLOBAL(JDIMENSION)
  function jpeg_start_output (line 227) | GLOBAL(boolean)
  function jpeg_finish_output (line 252) | GLOBAL(boolean)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdatadst.c
  type my_destination_mgr (line 25) | typedef struct {
  type my_destination_mgr (line 32) | typedef my_destination_mgr * my_dest_ptr;
  function init_destination (line 42) | METHODDEF(void)
  function empty_output_buffer (line 80) | METHODDEF(boolean)
  function term_destination (line 105) | METHODDEF(void)
  function jpeg_stdio_dest (line 129) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdatasrc.c
  type my_source_mgr (line 25) | typedef struct {
  type my_source_mgr (line 33) | typedef my_source_mgr * my_src_ptr;
  function init_source (line 43) | METHODDEF(void)
  function fill_input_buffer (line 89) | METHODDEF(boolean)
  function skip_input_data (line 127) | METHODDEF(void)
  function term_source (line 168) | METHODDEF(void)
  function jpeg_stdio_src (line 181) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdcoefct.c
  type my_coef_controller (line 28) | typedef struct {
  type my_coef_controller (line 62) | typedef my_coef_controller * my_coef_ptr;
  function start_iMCU_row (line 78) | LOCAL(void)
  function start_input_pass (line 106) | METHODDEF(void)
  function start_output_pass (line 118) | METHODDEF(void)
  function decompress_onepass (line 146) | METHODDEF(int)
  function dummy_consume_data (line 227) | METHODDEF(int)
  function consume_data (line 243) | METHODDEF(int)
  function decompress_data (line 314) | METHODDEF(int)
  function smoothing_ok (line 404) | LOCAL(boolean)
  function decompress_smooth_data (line 460) | METHODDEF(int)
  function jinit_d_coef_controller (line 675) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdcolor.c
  type my_color_deconverter (line 18) | typedef struct {
  type my_color_deconverter (line 28) | typedef my_color_deconverter * my_cconvert_ptr;
  function build_ycc_rgb_table (line 69) | LOCAL(void)
  function ycc_rgb_convert (line 119) | METHODDEF(void)
  function null_convert (line 168) | METHODDEF(void)
  function grayscale_convert (line 200) | METHODDEF(void)
  function gray_rgb_convert (line 216) | METHODDEF(void)
  function ycck_cmyk_convert (line 244) | METHODDEF(void)
  function start_pass_dcolor (line 292) | METHODDEF(void)
  function jinit_color_deconverter (line 303) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdct.h
  type DCTELEM (line 30) | typedef int DCTELEM;
  type INT32 (line 32) | typedef INT32 DCTELEM;
  type MULTIPLIER (line 56) | typedef MULTIPLIER ISLOW_MULT_TYPE;
  type MULTIPLIER (line 58) | typedef MULTIPLIER IFAST_MULT_TYPE;
  type INT32 (line 61) | typedef INT32 IFAST_MULT_TYPE;
  type FAST_FLOAT (line 64) | typedef FAST_FLOAT FLOAT_MULT_TYPE;

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jddctmgr.c
  type my_idct_controller (line 43) | typedef struct {
  type my_idct_controller (line 54) | typedef my_idct_controller * my_idct_ptr;
  type multiplier_table (line 59) | typedef union {
  function start_pass (line 88) | METHODDEF(void)
  function jinit_inverse_dct (line 246) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdhuff.c
  type savable_state (line 30) | typedef struct {
  type huff_entropy_decoder (line 52) | typedef struct {
  type huff_entropy_decoder (line 78) | typedef huff_entropy_decoder * huff_entropy_ptr;
  function start_pass_huff_decoder (line 85) | METHODDEF(void)
  function jpeg_make_d_derived_tbl (line 148) | GLOBAL(void)
  function jpeg_fill_bit_buffer (line 291) | GLOBAL(boolean)
  function jpeg_huff_decode (line 397) | GLOBAL(int)
  function process_restart (line 467) | LOCAL(boolean)
  function decode_mcu (line 516) | METHODDEF(boolean)
  function jinit_huff_decoder (line 634) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdhuff.h
  type d_derived_tbl (line 26) | typedef struct {
  type INT32 (line 72) | typedef INT32 bit_buf_type;
  type bitread_perm_state (line 82) | typedef struct {		/* Bitreading state saved across MCUs */
  type bitread_working_state (line 87) | typedef struct {		/* Bitreading working state within an MCU */

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdinput.c
  type my_input_controller (line 21) | typedef struct {
  type my_input_controller (line 27) | typedef my_input_controller * my_inputctl_ptr;
  function initial_setup (line 38) | LOCAL(void)
  function per_scan_setup (line 120) | LOCAL(void)
  function latch_quant_tables (line 219) | LOCAL(void)
  function start_input_pass (line 253) | METHODDEF(void)
  function finish_input_pass (line 270) | METHODDEF(void)
  function consume_markers (line 287) | METHODDEF(int)
  function reset_input_controller (line 338) | METHODDEF(void)
  function jinit_input_controller (line 360) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdmainct.c
  type my_main_controller (line 114) | typedef struct {
  type my_main_controller (line 134) | typedef my_main_controller * my_main_ptr;
  function alloc_funny_pointers (line 156) | LOCAL(void)
  function make_funny_pointers (line 194) | LOCAL(void)
  function set_wraparound_pointers (line 237) | LOCAL(void)
  function set_bottom_pointers (line 265) | LOCAL(void)
  function start_pass_main (line 306) | METHODDEF(void)
  function process_data_simple_main (line 344) | METHODDEF(void)
  function process_data_context_main (line 384) | METHODDEF(void)
  function process_data_crank_post (line 458) | METHODDEF(void)
  function jinit_d_main_controller (line 475) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdmarker.c
  type JPEG_MARKER (line 20) | typedef enum {			/* JPEG marker codes */
  type my_marker_reader (line 90) | typedef struct {
  type my_marker_reader (line 107) | typedef my_marker_reader * my_marker_ptr;
  function get_soi (line 196) | LOCAL(boolean)
  function get_sof (line 236) | LOCAL(boolean)
  function get_sos (line 300) | LOCAL(boolean)
  function get_dac (line 372) | LOCAL(boolean)
  function get_dht (line 418) | LOCAL(boolean)
  function get_dqt (line 489) | LOCAL(boolean)
  function get_dri (line 547) | LOCAL(boolean)
  function examine_app0 (line 583) | LOCAL(void)
  function examine_app14 (line 659) | LOCAL(void)
  function get_interesting_appn (line 690) | METHODDEF(boolean)
  function save_marker (line 738) | METHODDEF(boolean)
  function skip_variable (line 844) | METHODDEF(boolean)
  function next_marker (line 873) | LOCAL(boolean)
  function first_marker (line 920) | LOCAL(boolean)
  function read_markers (line 951) | METHODDEF(int)
  function read_restart_marker (line 1112) | METHODDEF(boolean)
  function jpeg_resync_to_restart (line 1191) | GLOBAL(boolean)
  function reset_marker_reader (line 1241) | METHODDEF(void)
  function jinit_marker_reader (line 1261) | GLOBAL(void)
  function jpeg_save_markers (line 1299) | GLOBAL(void)
  function jpeg_set_marker_processor (line 1348) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdmaster.c
  type my_decomp_master (line 21) | typedef struct {
  type my_decomp_master (line 35) | typedef my_decomp_master * my_master_ptr;
  function use_merged_upsample (line 43) | LOCAL(boolean)
  function jpeg_calc_output_dimensions (line 83) | GLOBAL(void)
  function prepare_range_limit_table (line 247) | LOCAL(void)
  function master_selection (line 287) | LOCAL(void)
  function prepare_for_output_pass (line 437) | METHODDEF(void)
  function finish_output_pass (line 497) | METHODDEF(void)
  function jpeg_new_colormap (line 514) | GLOBAL(void)
  function jinit_master_decompress (line 542) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdmerge.c
  type my_upsampler (line 44) | typedef struct {
  type my_upsampler (line 70) | typedef my_upsampler * my_upsample_ptr;
  function build_ycc_rgb_table (line 82) | LOCAL(void)
  function start_pass_merged_upsample (line 125) | METHODDEF(void)
  function merged_2v_upsample (line 143) | METHODDEF(void)
  function merged_1v_upsample (line 192) | METHODDEF(void)
  function h2v1_merged_upsample (line 225) | METHODDEF(void)
  function h2v2_merged_upsample (line 287) | METHODDEF(void)
  function jinit_merged_upsampler (line 369) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdphuff.c
  type savable_state (line 32) | typedef struct {
  type phuff_entropy_decoder (line 56) | typedef struct {
  type phuff_entropy_decoder (line 74) | typedef phuff_entropy_decoder * phuff_entropy_ptr;
  function start_pass_phuff_decoder (line 91) | METHODDEF(void)
  function process_restart (line 227) | LOCAL(boolean)
  function decode_mcu_DC_first (line 285) | METHODDEF(boolean)
  function decode_mcu_AC_first (line 356) | METHODDEF(boolean)
  function decode_mcu_DC_refine (line 441) | METHODDEF(boolean)
  function decode_mcu_AC_refine (line 490) | METHODDEF(boolean)
  function jinit_phuff_decoder (line 640) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdpostct.c
  type my_post_controller (line 26) | typedef struct {
  type my_post_controller (line 42) | typedef my_post_controller * my_post_ptr;
  function start_pass_dpost (line 72) | METHODDEF(void)
  function post_process_1pass (line 125) | METHODDEF(void)
  function post_process_prepass (line 157) | METHODDEF(void)
  function post_process_2pass (line 201) | METHODDEF(void)
  function jinit_d_post_controller (line 249) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdsample.c
  type cinfo (line 27) | typedef JMETHOD(void, upsample1_ptr,
  type my_upsampler (line 33) | typedef struct {
  type my_upsampler (line 61) | typedef my_upsampler * my_upsample_ptr;
  function start_pass_upsample (line 68) | METHODDEF(void)
  function sep_upsample (line 88) | METHODDEF(void)
  function fullsize_upsample (line 156) | METHODDEF(void)
  function noop_upsample (line 169) | METHODDEF(void)
  function int_upsample (line 188) | METHODDEF(void)
  function h2v1_upsample (line 232) | METHODDEF(void)
  function h2v2_upsample (line 260) | METHODDEF(void)
  function h2v1_fancy_upsample (line 303) | METHODDEF(void)
  function h2v2_fancy_upsample (line 344) | METHODDEF(void)
  function jinit_upsampler (line 398) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdtrans.c
  function jpeg_read_coefficients (line 44) | GLOBAL(jvirt_barray_ptr *)
  function transdecode_master_selection (line 96) | LOCAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jerror.c
  function error_exit (line 69) | METHODDEF(void)
  function output_message (line 97) | METHODDEF(void)
  function emit_message (line 127) | METHODDEF(void)
  function format_message (line 156) | METHODDEF(void)
  function reset_error_mgr (line 211) | METHODDEF(void)
  function jpeg_std_error (line 230) | GLOBAL(struct jpeg_error_mgr *)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jfdctflt.c
  function jpeg_fdct_float (line 58) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jfdctfst.c
  function jpeg_fdct_ifast (line 113) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jfdctint.c
  function jpeg_fdct_islow (line 139) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jidctflt.c
  function jpeg_idct_float (line 67) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jidctfst.c
  function jpeg_idct_ifast (line 167) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jidctint.c
  function jpeg_idct_islow (line 147) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jidctred.c
  function jpeg_idct_4x4 (line 117) | GLOBAL(void)
  function jpeg_idct_2x2 (line 270) | GLOBAL(void)
  function jpeg_idct_1x1 (line 378) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jmemdatadst.c
  type my_destination_mgr (line 24) | typedef struct {
  type my_destination_mgr (line 32) | typedef my_destination_mgr * my_dest_ptr;
  function init_destination (line 40) | METHODDEF(void) init_destination (j_compress_ptr cinfo) {
  function empty_output_buffer (line 74) | METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo) {
  function term_destination (line 100) | METHODDEF(void) term_destination (j_compress_ptr cinfo) {
  function jpeg_mem_dest (line 122) | GLOBAL(void) jpeg_mem_dest (j_compress_ptr cinfo, char * pDestination, u...

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jmemdatasrc.c
  type my_source_mgr (line 24) | typedef struct {
  type my_source_mgr (line 32) | typedef my_source_mgr * my_src_ptr;
  function init_source (line 40) | METHODDEF(void) init_source (j_decompress_ptr cinfo) {
  function fill_input_buffer (line 80) | METHODDEF(boolean) fill_input_buffer (j_decompress_ptr cinfo) {
  function skip_input_data (line 114) | METHODDEF(void) skip_input_data (j_decompress_ptr cinfo, long num_bytes) {
  function term_source (line 149) | METHODDEF(void) term_source (j_decompress_ptr cinfo) {
  function jpeg_mem_src (line 158) | GLOBAL(void) jpeg_mem_src (j_decompress_ptr cinfo, char * pSourceData, u...
  function jpeg_mem_src_newLocationOfData (line 191) | GLOBAL(int) jpeg_mem_src_newLocationOfData (j_decompress_ptr cinfo, char...

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jmemmgr.c
  type small_pool_hdr (line 91) | typedef union small_pool_struct {
  type large_pool_hdr (line 102) | typedef union large_pool_struct {
  type my_memory_mgr (line 116) | typedef struct {
  type my_memory_mgr (line 140) | typedef my_memory_mgr * my_mem_ptr;
  type jvirt_sarray_control (line 150) | struct jvirt_sarray_control {
  type jvirt_barray_control (line 166) | struct jvirt_barray_control {
  function print_mem_stats (line 185) | LOCAL(void)
  function out_of_memory (line 216) | LOCAL(void)
  function alloc_small (line 256) | METHODDEF(void *)
  function alloc_large (line 341) | METHODDEF(void FAR *)
  function alloc_sarray (line 394) | METHODDEF(JSAMPARRAY)
  function alloc_barray (line 442) | METHODDEF(JBLOCKARRAY)
  function request_virt_sarray (line 522) | METHODDEF(jvirt_sarray_ptr)
  function request_virt_barray (line 552) | METHODDEF(jvirt_barray_ptr)
  function realize_virt_arrays (line 582) | METHODDEF(void)
  function do_sarray_io (line 689) | LOCAL(void)
  function do_barray_io (line 722) | LOCAL(void)
  function access_virt_sarray (line 755) | METHODDEF(JSAMPARRAY)
  function access_virt_barray (line 840) | METHODDEF(JBLOCKARRAY)
  function free_pool (line 929) | METHODDEF(void)
  function self_destruct (line 1001) | METHODDEF(void)
  function jinit_memory_mgr (line 1027) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jmemnobs.c
  function jpeg_get_small (line 34) | GLOBAL(void *)
  function jpeg_free_small (line 40) | GLOBAL(void)
  function jpeg_get_large (line 54) | GLOBAL(void FAR *)
  function jpeg_free_large (line 60) | GLOBAL(void)
  function jpeg_mem_available (line 72) | GLOBAL(long)
  function jpeg_open_backing_store (line 86) | GLOBAL(void)
  function jpeg_mem_init (line 99) | GLOBAL(long)
  function jpeg_mem_term (line 105) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jmemsys.h
  type XMSH (line 121) | typedef unsigned short XMSH;
  type EMSH (line 122) | typedef unsigned short EMSH;
  type handle_union (line 124) | typedef union {
  type backing_store_struct (line 137) | struct backing_store_struct
  type backing_store_info (line 139) | typedef struct backing_store_struct {

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jmorecfg.h
  type JSAMPLE (line 59) | typedef unsigned char JSAMPLE;
  type JSAMPLE (line 64) | typedef char JSAMPLE;
  type JSAMPLE (line 84) | typedef short JSAMPLE;
  type JCOEF (line 99) | typedef short JCOEF;
  type JOCTET (line 110) | typedef unsigned char JOCTET;
  type JOCTET (line 115) | typedef char JOCTET;
  type UINT8 (line 135) | typedef unsigned char UINT8;
  type UINT8 (line 138) | typedef char UINT8;
  type UINT8 (line 140) | typedef short UINT8;
  type UINT16 (line 147) | typedef unsigned short UINT16;
  type UINT16 (line 149) | typedef unsigned int UINT16;
  type INT16 (line 155) | typedef short INT16;
  type INT32 (line 161) | typedef long INT32;
  type JDIMENSION (line 171) | typedef unsigned int JDIMENSION;
  type boolean (line 227) | typedef int boolean;

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jpegint.h
  type J_BUF_MODE (line 16) | typedef enum {			/* Operating modes for buffer controllers */
  type jpeg_comp_master (line 45) | struct jpeg_comp_master {
  type jpeg_c_main_controller (line 56) | struct jpeg_c_main_controller {
  type jpeg_c_prep_controller (line 64) | struct jpeg_c_prep_controller {
  type jpeg_c_coef_controller (line 76) | struct jpeg_c_coef_controller {
  type jpeg_color_converter (line 83) | struct jpeg_color_converter {
  type jpeg_downsampler (line 91) | struct jpeg_downsampler {
  type jpeg_forward_dct (line 102) | struct jpeg_forward_dct {
  type jpeg_entropy_encoder (line 113) | struct jpeg_entropy_encoder {
  type jpeg_marker_writer (line 120) | struct jpeg_marker_writer {
  type jpeg_decomp_master (line 137) | struct jpeg_decomp_master {
  type jpeg_input_controller (line 146) | struct jpeg_input_controller {
  type jpeg_d_main_controller (line 158) | struct jpeg_d_main_controller {
  type jpeg_d_coef_controller (line 166) | struct jpeg_d_coef_controller {
  type jpeg_d_post_controller (line 177) | struct jpeg_d_post_controller {
  type jpeg_marker_reader (line 189) | struct jpeg_marker_reader {
  type jpeg_entropy_decoder (line 209) | struct jpeg_entropy_decoder {
  type cinfo (line 220) | typedef JMETHOD(void, inverse_DCT_method_ptr,
  type jpeg_inverse_dct (line 225) | struct jpeg_inverse_dct {
  type jpeg_upsampler (line 232) | struct jpeg_upsampler {
  type jpeg_color_deconverter (line 246) | struct jpeg_color_deconverter {
  type jpeg_color_quantizer (line 254) | struct jpeg_color_quantizer {
  type jvirt_sarray_control (line 389) | struct jvirt_sarray_control { long dummy; }
  type jvirt_barray_control (line 390) | struct jvirt_barray_control { long dummy; }

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jpeglib.h
  type JSAMPLE (line 66) | typedef JSAMPLE FAR *JSAMPROW;
  type JSAMPROW (line 67) | typedef JSAMPROW *JSAMPARRAY;
  type JSAMPARRAY (line 68) | typedef JSAMPARRAY *JSAMPIMAGE;
  type JCOEF (line 70) | typedef JCOEF JBLOCK[DCTSIZE2];
  type JBLOCK (line 71) | typedef JBLOCK FAR *JBLOCKROW;
  type JBLOCKROW (line 72) | typedef JBLOCKROW *JBLOCKARRAY;
  type JBLOCKARRAY (line 73) | typedef JBLOCKARRAY *JBLOCKIMAGE;
  type JCOEF (line 75) | typedef JCOEF FAR *JCOEFPTR;
  type JQUANT_TBL (line 83) | typedef struct {
  type JHUFF_TBL (line 100) | typedef struct {
  type jpeg_component_info (line 116) | typedef struct {
  type jpeg_scan_info (line 184) | typedef struct {
  type jpeg_marker_struct (line 193) | struct jpeg_marker_struct
  type jpeg_marker_struct (line 195) | struct jpeg_marker_struct {
  type J_COLOR_SPACE (line 206) | typedef enum {
  type J_DCT_METHOD (line 217) | typedef enum {
  type J_DITHER_MODE (line 232) | typedef enum {
  type jpeg_memory_mgr (line 243) | struct jpeg_memory_mgr
  type jpeg_progress_mgr (line 244) | struct jpeg_progress_mgr
  type jpeg_common_struct (line 253) | struct jpeg_common_struct {
  type jpeg_common_struct (line 261) | struct jpeg_common_struct
  type jpeg_compress_struct (line 262) | struct jpeg_compress_struct
  type jpeg_decompress_struct (line 263) | struct jpeg_decompress_struct
  type jpeg_compress_struct (line 268) | struct jpeg_compress_struct {
  type jpeg_decompress_struct (line 411) | struct jpeg_decompress_struct {
  type jpeg_error_mgr (line 643) | struct jpeg_error_mgr {
  type jpeg_progress_mgr (line 701) | struct jpeg_progress_mgr {
  type jpeg_destination_mgr (line 713) | struct jpeg_destination_mgr {
  type jpeg_source_mgr (line 725) | struct jpeg_source_mgr {
  type jvirt_sarray_control (line 752) | struct jvirt_sarray_control
  type jvirt_barray_control (line 753) | struct jvirt_barray_control
  type jpeg_memory_mgr (line 756) | struct jpeg_memory_mgr {
  type jpeg_error_mgr (line 884) | struct jpeg_error_mgr
  type jpeg_error_mgr (line 885) | struct jpeg_error_mgr
  type jvirt_sarray_control (line 1058) | struct jvirt_sarray_control { long dummy; }
  type jvirt_barray_control (line 1059) | struct jvirt_barray_control { long dummy; }
  type jpeg_comp_master (line 1060) | struct jpeg_comp_master { long dummy; }
  type jpeg_c_main_controller (line 1061) | struct jpeg_c_main_controller { long dummy; }
  type jpeg_c_prep_controller (line 1062) | struct jpeg_c_prep_controller { long dummy; }
  type jpeg_c_coef_controller (line 1063) | struct jpeg_c_coef_controller { long dummy; }
  type jpeg_marker_writer (line 1064) | struct jpeg_marker_writer { long dummy; }
  type jpeg_color_converter (line 1065) | struct jpeg_color_converter { long dummy; }
  type jpeg_downsampler (line 1066) | struct jpeg_downsampler { long dummy; }
  type jpeg_forward_dct (line 1067) | struct jpeg_forward_dct { long dummy; }
  type jpeg_entropy_encoder (line 1068) | struct jpeg_entropy_encoder { long dummy; }
  type jpeg_decomp_master (line 1069) | struct jpeg_decomp_master { long dummy; }
  type jpeg_d_main_controller (line 1070) | struct jpeg_d_main_controller { long dummy; }
  type jpeg_d_coef_controller (line 1071) | struct jpeg_d_coef_controller { long dummy; }
  type jpeg_d_post_controller (line 1072) | struct jpeg_d_post_controller { long dummy; }
  type jpeg_input_controller (line 1073) | struct jpeg_input_controller { long dummy; }
  type jpeg_marker_reader (line 1074) | struct jpeg_marker_reader { long dummy; }
  type jpeg_entropy_decoder (line 1075) | struct jpeg_entropy_decoder { long dummy; }
  type jpeg_inverse_dct (line 1076) | struct jpeg_inverse_dct { long dummy; }
  type jpeg_upsampler (line 1077) | struct jpeg_upsampler { long dummy; }
  type jpeg_color_deconverter (line 1078) | struct jpeg_color_deconverter { long dummy; }
  type jpeg_color_quantizer (line 1079) | struct jpeg_color_quantizer { long dummy; }

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jquant1.c
  type INT16 (line 128) | typedef INT16 FSERROR;
  type LOCFSERROR (line 129) | typedef int LOCFSERROR;
  type INT32 (line 131) | typedef INT32 FSERROR;
  type INT32 (line 132) | typedef INT32 LOCFSERROR;
  type FSERROR (line 135) | typedef FSERROR FAR *FSERRPTR;
  type my_cquantizer (line 142) | typedef struct {
  type my_cquantizer (line 167) | typedef my_cquantizer * my_cquantize_ptr;
  function select_ncolors (line 185) | LOCAL(int)
  function output_value (line 244) | LOCAL(int)
  function largest_input_value (line 258) | LOCAL(int)
  function create_colormap (line 272) | LOCAL(void)
  function create_colorindex (line 332) | LOCAL(void)
  function make_odither_array (line 395) | LOCAL(ODITHER_MATRIX_PTR)
  function create_odither_tables (line 431) | LOCAL(void)
  function color_quantize (line 458) | METHODDEF(void)
  function color_quantize3 (line 486) | METHODDEF(void)
  function quantize_ord_dither (line 514) | METHODDEF(void)
  function quantize3_ord_dither (line 564) | METHODDEF(void)
  function quantize_fs_dither (line 609) | METHODDEF(void)
  function alloc_fs_workspace (line 721) | LOCAL(void)
  function start_pass_1_quant (line 740) | METHODDEF(void)
  function finish_pass_1_quant (line 797) | METHODDEF(void)
  function new_color_map_1_quant (line 809) | METHODDEF(void)
  function jinit_1pass_quantizer (line 820) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jquant2.c
  type UINT16 (line 147) | typedef UINT16 histcell;
  type histcell (line 149) | typedef histcell FAR * histptr;
  type histcell (line 151) | typedef histcell hist1d[HIST_C2_ELEMS];
  type hist1d (line 152) | typedef hist1d FAR * hist2d;
  type hist2d (line 153) | typedef hist2d * hist3d;
  type INT16 (line 181) | typedef INT16 FSERROR;
  type LOCFSERROR (line 182) | typedef int LOCFSERROR;
  type INT32 (line 184) | typedef INT32 FSERROR;
  type INT32 (line 185) | typedef INT32 LOCFSERROR;
  type FSERROR (line 188) | typedef FSERROR FAR *FSERRPTR;
  type my_cquantizer (line 193) | typedef struct {
  type my_cquantizer (line 211) | typedef my_cquantizer * my_cquantize_ptr;
  function prescan_quantize (line 223) | METHODDEF(void)
  type box (line 258) | typedef struct {
  type box (line 269) | typedef box * boxptr;
  function find_biggest_color_pop (line 272) | LOCAL(boxptr)
  function find_biggest_volume (line 292) | LOCAL(boxptr)
  function update_box (line 312) | LOCAL(void)
  function median_cut (line 423) | LOCAL(int)
  function compute_color (line 498) | LOCAL(void)
  function select_colors (line 538) | LOCAL(void)
  function find_nearby_colors (line 645) | LOCAL(int)
  function find_best_colors (line 774) | LOCAL(void)
  function fill_inverse_cmap (line 854) | LOCAL(void)
  function pass2_no_dither (line 914) | METHODDEF(void)
  function pass2_fs_dither (line 948) | METHODDEF(void)
  function init_error_limit (line 1107) | LOCAL(void)
  function finish_pass1 (line 1142) | METHODDEF(void)
  function finish_pass2 (line 1155) | METHODDEF(void)
  function start_pass_2_quant (line 1166) | METHODDEF(void)
  function new_color_map_2_quant (line 1229) | METHODDEF(void)
  function jinit_2pass_quantizer (line 1243) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jutils.c
  function jdiv_round_up (line 71) | GLOBAL(long)
  function jround_up (line 80) | GLOBAL(long)
  function jcopy_sample_rows (line 110) | GLOBAL(void)
  function jcopy_block_row (line 144) | GLOBAL(void)
  function jzero_far (line 164) | GLOBAL(void)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/ac3.h
  type mpeg3_ac3bsi_t (line 23) | typedef struct
  type mpeg3_ac3audblk_t (line 90) | typedef struct
  type mpeg3_ac3_bitallocation_t (line 263) | typedef struct
  type mpeg3_ac3_mantissa_t (line 277) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/dct.c
  function mpeg3audio_dct64_1 (line 44) | int mpeg3audio_dct64_1(float *out0, float *out1, float *b1, float *b2, f...
  function mpeg3audio_dct64 (line 331) | int mpeg3audio_dct64(float *a, float *b, float *c)
  function mpeg3audio_dct36 (line 369) | int mpeg3audio_dct36(float *inbuf, float *o1, float *o2, float *wintab, ...
  function mpeg3audio_dct12 (line 521) | int mpeg3audio_dct12(float *in,float *rawout1,float *rawout2,register fl...
  function mpeg3_complex_t (line 738) | mpeg3_complex_t cmplx_mult(mpeg3_complex_t a, mpeg3_complex_t b)
  function mpeg3audio_imdct_init (line 748) | int mpeg3audio_imdct_init(mpeg3audio_t *audio)
  function swap_cmplx (line 795) | inline void swap_cmplx(mpeg3_complex_t *a, mpeg3_complex_t *b)
  function mpeg3audio_ac3_imdct_do_512 (line 804) | void mpeg3audio_ac3_imdct_do_512(mpeg3audio_t *audio,
  function mpeg3audio_ac3_imdct_do_256 (line 915) | void mpeg3audio_ac3_imdct_do_256(mpeg3audio_t *audio,
  function mpeg3audio_ac3_imdct (line 1053) | int mpeg3audio_ac3_imdct(mpeg3audio_t *audio,

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/header.c
  function mpeg3audio_head_check (line 39) | int mpeg3audio_head_check(unsigned long head)
  function mpeg3audio_decode_header (line 53) | int mpeg3audio_decode_header(mpeg3audio_t *audio)
  function mpeg3audio_read_frame_body (line 125) | int mpeg3audio_read_frame_body(mpeg3audio_t *audio)
  function mpeg3audio_prev_header (line 136) | int mpeg3audio_prev_header(mpeg3audio_t *audio)
  function mpeg3audio_read_header (line 150) | int mpeg3audio_read_header(mpeg3audio_t *audio)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/huffman.h
  type newhuff (line 12) | struct newhuff
  type newhuff (line 292) | struct newhuff
  type newhuff (line 329) | struct newhuff

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/layer1.c
  function mpeg3audio_dolayer1 (line 33) | int mpeg3audio_dolayer1(mpeg3audio_t *audio)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/layer2.c
  type al_table (line 40) | struct al_table
  type al_table (line 80) | struct al_table
  type al_table (line 123) | struct al_table
  type al_table (line 135) | struct al_table
  type al_table (line 151) | struct al_table
  function mpeg3audio_II_select_table (line 188) | int mpeg3audio_II_select_table(mpeg3audio_t *audio)
  function mpeg3audio_II_step_one (line 213) | int mpeg3audio_II_step_one(mpeg3audio_t *audio, unsigned int *bit_alloc,...
  function mpeg3audio_II_step_two (line 287) | int mpeg3audio_II_step_two(mpeg3audio_t *audio, unsigned int *bit_alloc,...
  function mpeg3audio_dolayer2 (line 395) | int mpeg3audio_dolayer2(mpeg3audio_t *audio)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/layer3.c
  type gr_info_s (line 38) | struct gr_info_s {
  type mpeg3_III_sideinfo (line 59) | struct mpeg3_III_sideinfo
  function mpeg3audio_III_get_scale_factors_1 (line 69) | int mpeg3audio_III_get_scale_factors_1(mpeg3audio_t *audio,
  function mpeg3audio_III_get_scale_factors_2 (line 176) | int mpeg3audio_III_get_scale_factors_2(mpeg3audio_t *audio,
  function mpeg3audio_III_dequantize_sample (line 252) | int mpeg3audio_III_dequantize_sample(mpeg3audio_t *audio,
  function mpeg3audio_III_get_side_info (line 718) | int mpeg3audio_III_get_side_info(mpeg3audio_t *audio,
  function mpeg3audio_III_hybrid (line 819) | int mpeg3audio_III_hybrid(mpeg3audio_t *audio,
  function mpeg3audio_III_antialias (line 878) | int mpeg3audio_III_antialias(mpeg3audio_t *audio,
  function mpeg3audio_III_i_stereo (line 928) | int mpeg3audio_III_i_stereo(mpeg3audio_t *audio,
  function mpeg3audio_read_layer3_frame (line 1081) | int mpeg3audio_read_layer3_frame(mpeg3audio_t *audio)
  function mpeg3audio_dolayer3 (line 1097) | int mpeg3audio_dolayer3(mpeg3audio_t *audio)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/mpeg3audio.c
  function mpeg3audio_t (line 43) | mpeg3audio_t* mpeg3audio_allocate_struct(mpeg3_t *file, mpeg3_atrack_t *...
  function mpeg3audio_delete_struct (line 58) | int mpeg3audio_delete_struct(mpeg3audio_t *audio)
  function mpeg3audio_replace_buffer (line 66) | int mpeg3audio_replace_buffer(mpeg3audio_t *audio, long new_allocation)
  function mpeg3audio_read_frame (line 89) | int mpeg3audio_read_frame(mpeg3audio_t *audio)
  function mpeg3audio_get_length (line 138) | int mpeg3audio_get_length(mpeg3audio_t *audio, mpeg3_atrack_t *track)
  function mpeg3audio_seek (line 255) | int mpeg3audio_seek(mpeg3audio_t *audio, long position)
  function mpeg3audio_t (line 321) | mpeg3audio_t* mpeg3audio_new(mpeg3_t *file, mpeg3_atrack_t *track, int f...
  function mpeg3audio_delete (line 379) | int mpeg3audio_delete(mpeg3audio_t *audio)
  function mpeg3audio_seek_percentage (line 385) | int mpeg3audio_seek_percentage(mpeg3audio_t *audio, double percentage)
  function mpeg3audio_seek_sample (line 391) | int mpeg3audio_seek_sample(mpeg3audio_t *audio, long sample)
  function mpeg3audio_read_raw (line 398) | int mpeg3audio_read_raw(mpeg3audio_t *audio, unsigned char *output, long...
  function mpeg3audio_decode_audio (line 443) | int mpeg3audio_decode_audio(mpeg3audio_t *audio,

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/mpeg3audio.h
  type mpeg3_complex_t (line 28) | typedef struct
  type al_table (line 36) | struct al_table
  type mpeg3audio_t (line 42) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/pcm.c
  function mpeg3audio_read_pcm_header (line 37) | int mpeg3audio_read_pcm_header(mpeg3audio_t *audio)
  function mpeg3audio_do_pcm (line 55) | int mpeg3audio_do_pcm(mpeg3audio_t *audio)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/synthesizers.c
  function mpeg3audio_synth_stereo (line 39) | int mpeg3audio_synth_stereo(mpeg3audio_t *audio, float *bandPtr, int cha...
  function mpeg3audio_synth_mono (line 141) | int mpeg3audio_synth_mono(mpeg3audio_t *audio, float *bandPtr, float *sa...
  function mpeg3audio_reset_synths (line 164) | int mpeg3audio_reset_synths(mpeg3audio_t *audio)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/tables.c
  type mpeg3_bandInfoStruct (line 109) | struct mpeg3_bandInfoStruct
  function mpeg3audio_init_layer2 (line 167) | int mpeg3audio_init_layer2(mpeg3audio_t *audio)
  function mpeg3audio_init_layer3 (line 214) | int mpeg3audio_init_layer3(mpeg3audio_t *audio)
  function mpeg3audio_new_decode_tables (line 444) | int mpeg3audio_new_decode_tables(mpeg3audio_t *audio)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/audio/tables.h
  type mpeg3_bandInfoStruct (line 8) | struct mpeg3_bandInfoStruct
  type mpeg3_bandInfoStruct (line 44) | struct mpeg3_bandInfoStruct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/bitstream.c
  function mpeg3_bits_t (line 38) | mpeg3_bits_t* mpeg3bits_new_stream(mpeg3_t *file, mpeg3_demuxer_t *demuxer)
  function mpeg3bits_delete_stream (line 50) | int mpeg3bits_delete_stream(mpeg3_bits_t* stream)
  function mpeg3bits_read_buffer (line 58) | int mpeg3bits_read_buffer(mpeg3_bits_t* stream, unsigned char *buffer, i...
  function mpeg3bits_use_ptr (line 75) | int mpeg3bits_use_ptr(mpeg3_bits_t* stream, unsigned char *buffer)
  function mpeg3bits_use_demuxer (line 84) | int mpeg3bits_use_demuxer(mpeg3_bits_t* stream)
  function mpeg3bits_start_reverse (line 98) | void mpeg3bits_start_reverse(mpeg3_bits_t* stream)
  function mpeg3bits_start_forward (line 109) | void mpeg3bits_start_forward(mpeg3_bits_t* stream)
  function mpeg3bits_refill (line 120) | int mpeg3bits_refill(mpeg3_bits_t* stream)
  function mpeg3bits_refill_backwards (line 143) | int mpeg3bits_refill_backwards(mpeg3_bits_t* stream)
  function mpeg3bits_byte_align (line 154) | int mpeg3bits_byte_align(mpeg3_bits_t *stream)
  function mpeg3bits_seek_end (line 160) | int mpeg3bits_seek_end(mpeg3_bits_t* stream)
  function mpeg3bits_seek_start (line 166) | int mpeg3bits_seek_start(mpeg3_bits_t* stream)
  function mpeg3bits_seek_time (line 172) | int mpeg3bits_seek_time(mpeg3_bits_t* stream, double time_position)
  function mpeg3bits_seek_byte (line 178) | int mpeg3bits_seek_byte(mpeg3_bits_t* stream, long position)
  function mpeg3bits_seek_percentage (line 184) | int mpeg3bits_seek_percentage(mpeg3_bits_t* stream, double percentage)
  function mpeg3bits_tell (line 190) | int mpeg3bits_tell(mpeg3_bits_t* stream)
  function mpeg3bits_getbitoffset (line 195) | int mpeg3bits_getbitoffset(mpeg3_bits_t *stream)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/bitstream.h
  type mpeg3_bits_t (line 14) | typedef struct
  function mpeg3bits_fill_reverse_bits (line 45) | static inline void mpeg3bits_fill_reverse_bits(mpeg3_bits_t* stream, int...
  function mpeg3bits_fill_bits (line 67) | static inline void mpeg3bits_fill_bits(mpeg3_bits_t* stream, int bits)
  function mpeg3bits_getbyte_noptr (line 87) | static inline unsigned int mpeg3bits_getbyte_noptr(mpeg3_bits_t* stream)
  function mpeg3bits_getbit_noptr (line 105) | static inline unsigned int mpeg3bits_getbit_noptr(mpeg3_bits_t* stream)
  function mpeg3bits_getbits (line 124) | static inline unsigned int mpeg3bits_getbits(mpeg3_bits_t* stream, int b...
  function mpeg3bits_showbits24_noptr (line 131) | static inline unsigned int mpeg3bits_showbits24_noptr(mpeg3_bits_t* stream)
  function mpeg3bits_showbits32_noptr (line 144) | static inline unsigned int mpeg3bits_showbits32_noptr(mpeg3_bits_t* stream)
  function mpeg3bits_showbits (line 157) | static inline unsigned int mpeg3bits_showbits(mpeg3_bits_t* stream, int ...
  function mpeg3bits_getbits_reverse (line 163) | static inline unsigned int mpeg3bits_getbits_reverse(mpeg3_bits_t* strea...
  function mpeg3bits_showbits_reverse (line 172) | static inline unsigned int mpeg3bits_showbits_reverse(mpeg3_bits_t* stre...

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/changesForSqueak.c
  function memoryFree (line 80) | void memoryFree(void *stuff) {
  function perror (line 96) | void perror(const char * string) {
  function strncasecmp (line 102) | int			strncasecmp(const char *s1, const char *s2, size_t len)
  function strcasecmp (line 121) | int			strcasecmp (const char *str1, const char *str2) {
  function bzero (line 130) | int bzero(char* block, long size) {
  function bzero (line 137) | int bzero(char *block,long size) {
  function main (line 141) | int main ()
  function isSystem9_0_or_better (line 148) | int isSystem9_0_or_better(void)
  function appendStringToBufferIfPossible (line 154) | void appendStringToBufferIfPossible(char *buffer,char *append,int buffer...
  function mpeg3_generate_toc_for_Squeak (line 161) | int mpeg3_generate_toc_for_Squeak(mpeg3_t *file, int timecode_search, in...
  function mpeg3demux_create_title_for_Squeak (line 188) | int mpeg3demux_create_title_for_Squeak(mpeg3_demuxer_t *demuxer, int tim...
  function mpeg3demux_print_streams_for_Squeak (line 298) | int mpeg3demux_print_streams_for_Squeak(mpeg3_demuxer_t *demuxer, char *...
  function mpeg3_css_t (line 319) | mpeg3_css_t* mpeg3_new_css()
  function mpeg3_delete_css (line 324) | int mpeg3_delete_css(mpeg3_css_t *css)
  function mpeg3_get_keys (line 329) | int mpeg3_get_keys(mpeg3_css_t *css, char *path)
  function mpeg3_decrypt_packet (line 334) | int mpeg3_decrypt_packet(mpeg3_css_t *css, unsigned char *sector)
  function IsImageName (line 342) | int IsImageName(char *name) {

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/dump.c
  function BitMap (line 21) | inline BitMap * GetPortBitMapForCopyBits (CGrafPtr w) { return &((GrafPt...
  function Rect (line 22) | inline Rect *GetPortBounds(CGrafPtr w,Rect *r) { *r = w->portRect; retur...
  function main (line 32) | int main ()
  function main2 (line 68) | int main2()
  function strncasecmp (line 157) | int			strncasecmp(const char *str1, const char *str2, size_t nchars)
  function strcasecmp (line 161) | int			strcasecmp (const char *str1, const char *str2) {
  function memoryFree (line 175) | void memoryFree(void *stuff) {
  function bzero (line 180) | int bzero(char *block,long size) {

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/dump2.c
  function main (line 6) | int main(int argc, char *argv[])

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/libmpeg3.c
  function mpeg3_t (line 44) | mpeg3_t* mpeg3_new(char *path,int size)
  function mpeg3_delete (line 55) | int mpeg3_delete(mpeg3_t *file)
  function mpeg3_check_sig (line 70) | int mpeg3_check_sig(char *path)
  function mpeg3_t (line 125) | mpeg3_t* mpeg3_open_copy(char *path, mpeg3_t *old_file,int size)
  function mpeg3_t (line 266) | mpeg3_t* mpeg3_open(char *path,int size)
  function mpeg3_close (line 271) | int mpeg3_close(mpeg3_t *file)
  function mpeg3_set_cpus (line 278) | int mpeg3_set_cpus(mpeg3_t *file, int cpus)
  function mpeg3_set_mmx (line 287) | int mpeg3_set_mmx(mpeg3_t *file, int use_mmx)
  function mpeg3_generate_toc (line 296) | int mpeg3_generate_toc(FILE *output, char *path, int timecode_search, in...
  function mpeg3_read_toc (line 323) | int mpeg3_read_toc(mpeg3_t *file)
  function mpeg3_has_audio (line 343) | int mpeg3_has_audio(mpeg3_t *file)
  function mpeg3_total_astreams (line 348) | int mpeg3_total_astreams(mpeg3_t *file)
  function mpeg3_audio_channels (line 353) | int mpeg3_audio_channels(mpeg3_t *file,
  function mpeg3_sample_rate (line 361) | int mpeg3_sample_rate(mpeg3_t *file,
  function mpeg3_get_sample (line 369) | long mpeg3_get_sample(mpeg3_t *file,
  function mpeg3_set_sample (line 377) | int mpeg3_set_sample(mpeg3_t *file,
  function mpeg3_audio_samples (line 390) | long mpeg3_audio_samples(mpeg3_t *file,
  function mpeg3_has_video (line 398) | int mpeg3_has_video(mpeg3_t *file)
  function mpeg3_total_vstreams (line 403) | int mpeg3_total_vstreams(mpeg3_t *file)
  function mpeg3_video_width (line 408) | int mpeg3_video_width(mpeg3_t *file,
  function mpeg3_video_height (line 416) | int mpeg3_video_height(mpeg3_t *file,
  function mpeg3_frame_rate (line 424) | float mpeg3_frame_rate(mpeg3_t *file,
  function mpeg3_video_frames (line 432) | long mpeg3_video_frames(mpeg3_t *file,
  function mpeg3_get_frame (line 440) | long mpeg3_get_frame(mpeg3_t *file,
  function mpeg3_set_frame (line 448) | int mpeg3_set_frame(mpeg3_t *file,
  function mpeg3_seek_percentage (line 461) | int mpeg3_seek_percentage(mpeg3_t *file, double percentage)
  function mpeg3_previous_frame (line 476) | int mpeg3_previous_frame(mpeg3_t *file, int stream)
  function mpeg3_tell_percentage (line 485) | double mpeg3_tell_percentage(mpeg3_t *file)
  function mpeg3_get_time (line 500) | double mpeg3_get_time(mpeg3_t *file)
  function mpeg3_end_of_audio (line 536) | int mpeg3_end_of_audio(mpeg3_t *file, int stream)
  function mpeg3_end_of_video (line 543) | int mpeg3_end_of_video(mpeg3_t *file, int stream)
  function mpeg3_read_frame (line 551) | int mpeg3_read_frame(mpeg3_t *file,
  function mpeg3_drop_frames (line 586) | int mpeg3_drop_frames(mpeg3_t *file, long frames, int stream)
  function mpeg3_read_yuvframe (line 601) | int mpeg3_read_yuvframe(mpeg3_t *file,
  function mpeg3_read_audio (line 634) | int mpeg3_read_audio(mpeg3_t *file,
  function mpeg3_reread_audio (line 661) | int mpeg3_reread_audio(mpeg3_t *file,
  function mpeg3_read_audio_chunk (line 685) | int mpeg3_read_audio_chunk(mpeg3_t *file,
  function mpeg3_read_video_chunk (line 701) | int mpeg3_read_video_chunk(mpeg3_t *file,

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3atrack.c
  function mpeg3_atrack_t (line 38) | mpeg3_atrack_t* mpeg3_new_atrack(mpeg3_t *file, int stream_id, int forma...
  function mpeg3_delete_atrack (line 60) | int mpeg3_delete_atrack(mpeg3_t *file, mpeg3_atrack_t *atrack)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3atrack.h
  type mpeg3_atrack_t (line 10) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3cat.c
  function main (line 14) | int main(int argc, char *argv[])

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3css.h
  type mpeg3_block (line 7) | struct mpeg3_block
  type mpeg3_playkey (line 12) | struct mpeg3_playkey {
  type mpeg3_css_t (line 16) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3demux.c
  function mpeg3packet_next_char (line 44) | static inline unsigned char mpeg3packet_next_char(mpeg3_demuxer_t *demuxer)
  function mpeg3packet_read_char (line 49) | unsigned char mpeg3packet_read_char(mpeg3_demuxer_t *demuxer)
  function mpeg3packet_read_int16 (line 55) | static inline unsigned int mpeg3packet_read_int16(mpeg3_demuxer_t *demuxer)
  function mpeg3packet_next_int24 (line 65) | static inline unsigned int mpeg3packet_next_int24(mpeg3_demuxer_t *demuxer)
  function mpeg3packet_read_int24 (line 76) | static inline unsigned int mpeg3packet_read_int24(mpeg3_demuxer_t *demuxer)
  function mpeg3packet_read_int32 (line 87) | static inline unsigned int mpeg3packet_read_int32(mpeg3_demuxer_t *demuxer)
  function mpeg3packet_skip (line 99) | static inline unsigned int mpeg3packet_skip(mpeg3_demuxer_t *demuxer, lo...
  function mpeg3_get_adaptation_field (line 105) | int mpeg3_get_adaptation_field(mpeg3_demuxer_t *demuxer)
  function mpeg3_get_program_association_table (line 141) | int mpeg3_get_program_association_table(mpeg3_demuxer_t *demuxer)
  function mpeg3packet_get_data_buffer (line 151) | int mpeg3packet_get_data_buffer(mpeg3_demuxer_t *demuxer)
  function mpeg3_get_pes_packet_header (line 160) | int mpeg3_get_pes_packet_header(mpeg3_demuxer_t *demuxer, unsigned long ...
  function get_unknown_data (line 201) | int get_unknown_data(mpeg3_demuxer_t *demuxer)
  function mpeg3_get_pes_packet_data (line 207) | int mpeg3_get_pes_packet_data(mpeg3_demuxer_t *demuxer, unsigned int str...
  function mpeg3_get_pes_packet (line 250) | int mpeg3_get_pes_packet(mpeg3_demuxer_t *demuxer)
  function mpeg3_get_payload (line 287) | int mpeg3_get_payload(mpeg3_demuxer_t *demuxer)
  function mpeg3_read_transport (line 315) | int mpeg3_read_transport(mpeg3_demuxer_t *demuxer)
  function mpeg3_get_system_header (line 411) | int mpeg3_get_system_header(mpeg3_demuxer_t *demuxer)
  function mpeg3_get_timestamp (line 418) | unsigned long mpeg3_get_timestamp(mpeg3_demuxer_t *demuxer)
  function mpeg3_get_pack_header (line 430) | int mpeg3_get_pack_header(mpeg3_demuxer_t *demuxer, unsigned int *header)
  function mpeg3_get_ps_pes_packet (line 480) | int mpeg3_get_ps_pes_packet(mpeg3_demuxer_t *demuxer, unsigned int *header)
  function mpeg3_read_program (line 705) | int mpeg3_read_program(mpeg3_demuxer_t *demuxer)
  function mpeg3_lookup_time_offset (line 764) | double mpeg3_lookup_time_offset(mpeg3_demuxer_t *demuxer, long byte)
  function mpeg3_advance_timecode (line 779) | int mpeg3_advance_timecode(mpeg3_demuxer_t *demuxer, int reverse)
  function mpeg3_read_next_packet (line 870) | int mpeg3_read_next_packet(mpeg3_demuxer_t *demuxer)
  function mpeg3_read_prev_packet (line 931) | int mpeg3_read_prev_packet(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_read_data (line 985) | int mpeg3demux_read_data(mpeg3_demuxer_t *demuxer,
  function mpeg3demux_read_char_packet (line 1028) | unsigned int mpeg3demux_read_char_packet(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_read_prev_char_packet (line 1037) | unsigned int mpeg3demux_read_prev_char_packet(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_timecode_t (line 1050) | mpeg3demux_timecode_t* mpeg3_append_timecode(mpeg3_demuxer_t *demuxer,
  function mpeg3demux_timecode_t (line 1107) | mpeg3demux_timecode_t* mpeg3demux_next_timecode(mpeg3_demuxer_t *demuxer,
  function mpeg3demux_timecode_t (line 1138) | mpeg3demux_timecode_t* mpeg3demux_prev_timecode(mpeg3_demuxer_t *demuxer,
  function mpeg3demux_open_title (line 1170) | int mpeg3demux_open_title(mpeg3_demuxer_t *demuxer, int title_number)
  function mpeg3demux_assign_programs (line 1200) | int mpeg3demux_assign_programs(mpeg3_demuxer_t *demuxer)
  function mpeg3_demuxer_t (line 1344) | mpeg3_demuxer_t* mpeg3_new_demuxer(mpeg3_t *file, int do_audio, int do_v...
  function mpeg3_delete_demuxer (line 1368) | int mpeg3_delete_demuxer(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_create_title (line 1390) | int mpeg3demux_create_title(mpeg3_demuxer_t *demuxer, int timecode_searc...
  function mpeg3demux_print_timecodes (line 1497) | int mpeg3demux_print_timecodes(mpeg3_title_t *title, FILE *output)
  function mpeg3demux_read_titles (line 1519) | int mpeg3demux_read_titles(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_copy_titles (line 1581) | int mpeg3demux_copy_titles(mpeg3_demuxer_t *dst, mpeg3_demuxer_t *src)
  function mpeg3demux_print_streams (line 1606) | int mpeg3demux_print_streams(mpeg3_demuxer_t *demuxer, FILE *toc)
  function mpeg3demux_length (line 1622) | double mpeg3demux_length(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_eof (line 1645) | int mpeg3demux_eof(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_bof (line 1657) | int mpeg3demux_bof(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_seek_byte (line 1670) | int mpeg3demux_seek_byte(mpeg3_demuxer_t *demuxer, long byte)
  function mpeg3demux_seek_time (line 1694) | int mpeg3demux_seek_time(mpeg3_demuxer_t *demuxer, double new_time)
  function mpeg3demux_seek_percentage (line 1780) | int mpeg3demux_seek_percentage(mpeg3_demuxer_t *demuxer, double percentage)
  function mpeg3demux_tell_percentage (line 1847) | double mpeg3demux_tell_percentage(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_get_time (line 1866) | double mpeg3demux_get_time(mpeg3_demuxer_t *demuxer)
  function mpeg3demux_tell (line 1871) | long mpeg3demux_tell(mpeg3_demuxer_t *demuxer)
  function mpeg3demuxer_total_bytes (line 1876) | long mpeg3demuxer_total_bytes(mpeg3_demuxer_t *demuxer)
  function mpeg3_demuxer_t (line 1882) | mpeg3_demuxer_t* mpeg3_get_demuxer(mpeg3_t *file)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3demux.h
  type mpeg3_demuxer_t (line 7) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3io.c
  function mpeg3_fs_t (line 59) | mpeg3_fs_t* mpeg3_new_fs(char *path,int size)
  function mpeg3_delete_fs (line 78) | int mpeg3_delete_fs(mpeg3_fs_t *fs)
  function mpeg3_copy_fs (line 88) | int mpeg3_copy_fs(mpeg3_fs_t *dst, mpeg3_fs_t *src)
  function mpeg3io_get_total_bytes (line 95) | long mpeg3io_get_total_bytes(mpeg3_fs_t *fs)
  function mpeg3io_get_id3v2_size (line 119) | int mpeg3io_get_id3v2_size(mpeg3_fs_t *fs)
  function mpeg3io_open_file (line 135) | int mpeg3io_open_file(mpeg3_fs_t *fs)
  function mpeg3io_close_file (line 174) | int mpeg3io_close_file(mpeg3_fs_t *fs)
  function mpeg3io_read_data (line 188) | int mpeg3io_read_data(unsigned char *buffer, long bytes, mpeg3_fs_t *fs)
  function mpeg3io_device (line 209) | int mpeg3io_device(char *path, char *device)
  function mpeg3io_seek (line 240) | int mpeg3io_seek(mpeg3_fs_t *fs, long byte)
  function mpeg3io_seek_relative (line 270) | int mpeg3io_seek_relative(mpeg3_fs_t *fs, long bytes)
  function mpeg3io_scanf (line 298) | int mpeg3io_scanf (mpeg3_fs_t *fs,char *format, void * string1, void * s...
  function mpeg3io_scanf5 (line 312) | int mpeg3io_scanf5 (mpeg3_fs_t *fs,char *format, void * string1, void * ...
  function mpeg3io_end_of_file (line 327) | int mpeg3io_end_of_file(mpeg3_fs_t *fs ) {
  function mpeg3io_fgetc (line 335) | inline int mpeg3io_fgetc(mpeg3_fs_t *fs) {

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3io.h
  type mpeg3_fs_t (line 11) | typedef struct
  function mpeg3io_read_int32 (line 40) | static inline unsigned int mpeg3io_read_int32(mpeg3_fs_t *fs)
  function mpeg3io_read_char (line 57) | static inline unsigned int mpeg3io_read_char(mpeg3_fs_t *fs)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3private.h
  type mpeg3_t (line 43) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3title.c
  function mpeg3_title_t (line 39) | mpeg3_title_t* mpeg3_new_title(mpeg3_t *file, char *path)
  function mpeg3_delete_title (line 52) | int mpeg3_delete_title(mpeg3_title_t *title)
  function mpeg3_copy_title (line 64) | int mpeg3_copy_title(mpeg3_title_t *dst, mpeg3_title_t *src)
  function mpeg3_dump_title (line 84) | int mpeg3_dump_title(mpeg3_title_t *title)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3title.h
  type mpeg3demux_timecode_t (line 6) | typedef struct
  type mpeg3_title_t (line 17) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3toc.c
  function main (line 15) | int main(int argc, char *argv[])

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3vtrack.c
  function mpeg3_vtrack_t (line 38) | mpeg3_vtrack_t* mpeg3_new_vtrack(mpeg3_t *file, int stream_id, mpeg3_dem...
  function mpeg3_delete_vtrack (line 58) | int mpeg3_delete_vtrack(mpeg3_t *file, mpeg3_vtrack_t *vtrack)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/mpeg3vtrack.h
  type mpeg3_vtrack_t (line 9) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/test.c
  function main (line 7) | int main()

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/testaudio.c
  function main (line 7) | int main()

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/timecode.h
  type mpeg3_timecode_t (line 4) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/udump.c
  function main (line 6) | int main(int argc, char *argv[])

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/getpicture.c
  function mpeg3video_get_cbp (line 41) | int mpeg3video_get_cbp(mpeg3_slice_t *slice)
  function mpeg3video_clearblock (line 73) | int mpeg3video_clearblock(mpeg3_slice_t *slice, int comp, int size)
  function mpeg3video_getdclum (line 96) | static inline int mpeg3video_getdclum(mpeg3_slice_buffer_t *slice_buffer)
  function mpeg3video_getdcchrom (line 125) | int mpeg3video_getdcchrom(mpeg3_slice_buffer_t *slice_buffer)
  function mpeg3video_getintrablock (line 157) | int mpeg3video_getintrablock(mpeg3_slice_t *slice,
  function mpeg3video_getinterblock (line 274) | int mpeg3video_getinterblock(mpeg3_slice_t *slice,
  function mpeg3video_getmpg2intrablock (line 372) | int mpeg3video_getmpg2intrablock(mpeg3_slice_t *slice,
  function mpeg3video_getmpg2interblock (line 501) | int mpeg3video_getmpg2interblock(mpeg3_slice_t *slice,
  function mpeg3video_allocate_decoders (line 701) | int mpeg3video_allocate_decoders(mpeg3video_t *video, int decoder_count)
  function mpeg3video_getpicture (line 726) | int mpeg3video_getpicture(mpeg3video_t *video, int framenum)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/headers.c
  function mpeg3video_getseqhdr (line 39) | int mpeg3video_getseqhdr(mpeg3video_t *video)
  function mpeg3video_sequence_extension (line 95) | int mpeg3video_sequence_extension(mpeg3video_t *video)
  function mpeg3video_sequence_display_extension (line 123) | int mpeg3video_sequence_display_extension(mpeg3video_t *video)
  function mpeg3video_quant_matrix_extension (line 146) | int mpeg3video_quant_matrix_extension(mpeg3video_t *video)
  function mpeg3video_sequence_scalable_extension (line 190) | int mpeg3video_sequence_scalable_extension(mpeg3video_t *video)
  function mpeg3video_picture_display_extension (line 215) | int mpeg3video_picture_display_extension(mpeg3video_t *video)
  function mpeg3video_picture_coding_extension (line 238) | int mpeg3video_picture_coding_extension(mpeg3video_t *video)
  function mpeg3video_picture_spatial_scalable_extension (line 300) | int mpeg3video_picture_spatial_scalable_extension(mpeg3video_t *video)
  function mpeg3video_picture_temporal_scalable_extension (line 323) | int mpeg3video_picture_temporal_scalable_extension(mpeg3video_t *video)
  function mpeg3video_ext_user_data (line 331) | int mpeg3video_ext_user_data(mpeg3video_t *video)
  function mpeg3video_getgophdr (line 382) | int mpeg3video_getgophdr(mpeg3video_t *video)
  function mpeg3video_getpicturehdr (line 404) | int mpeg3video_getpicturehdr(mpeg3video_t *video)
  function mpeg3video_get_header (line 433) | int mpeg3video_get_header(mpeg3video_t *video, int dont_repeat)
  function mpeg3video_ext_bit_info (line 492) | int mpeg3video_ext_bit_info(mpeg3_slice_buffer_t *slice_buffer)
  function mpeg3video_getslicehdr (line 499) | int mpeg3video_getslicehdr(mpeg3_slice_t *slice, mpeg3video_t *video)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/idct.c
  function mpeg3video_idctrow (line 72) | inline
  function mpeg3video_idctcol (line 136) | inline
  function mpeg3video_idct_conversion (line 191) | void mpeg3video_idct_conversion(short* block)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/layerdata.h
  type mpeg3_layerdata_t (line 4) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/macroblocks.c
  function mpeg3video_get_macroblock_address (line 36) | int mpeg3video_get_macroblock_address(mpeg3_slice_t *slice)
  function mpeg3video_getsp_imb_type (line 83) | static inline int mpeg3video_getsp_imb_type(mpeg3_slice_t *slice)
  function mpeg3video_getsp_pmb_type (line 98) | static inline int mpeg3video_getsp_pmb_type(mpeg3_slice_t *slice)
  function mpeg3video_getsp_bmb_type (line 121) | static inline int mpeg3video_getsp_bmb_type(mpeg3_slice_t *slice)
  function mpeg3video_get_imb_type (line 146) | static inline int mpeg3video_get_imb_type(mpeg3_slice_t *slice)
  function mpeg3video_get_pmb_type (line 163) | static inline int mpeg3video_get_pmb_type(mpeg3_slice_t *slice)
  function mpeg3video_get_bmb_type (line 186) | static inline int mpeg3video_get_bmb_type(mpeg3_slice_t *slice)
  function mpeg3video_get_dmb_type (line 210) | static inline int mpeg3video_get_dmb_type(mpeg3_slice_t *slice)
  function mpeg3video_get_snrmb_type (line 222) | static inline int mpeg3video_get_snrmb_type(mpeg3_slice_t *slice)
  function mpeg3video_get_mb_type (line 238) | int mpeg3video_get_mb_type(mpeg3_slice_t *slice, mpeg3video_t *video)
  function mpeg3video_macroblock_modes (line 262) | int mpeg3video_macroblock_modes(mpeg3_slice_t *slice,

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/mmxtest.c
  function mpeg3_mmx_test (line 37) | int mpeg3_mmx_test()

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/motion.c
  function mpeg3video_calc_mv (line 41) | static inline void mpeg3video_calc_mv(int *pred, int r_size, int motion_...
  function mpeg3video_calc_dmv (line 70) | void mpeg3video_calc_dmv(mpeg3video_t *video,
  function mpeg3video_get_mv (line 113) | static inline int mpeg3video_get_mv(mpeg3_slice_t *slice)
  function mpeg3video_get_dmv (line 150) | static inline int mpeg3video_get_dmv(mpeg3_slice_t *slice)
  function mpeg3video_motion_vector (line 167) | void mpeg3video_motion_vector(mpeg3_slice_t *slice,
  function mpeg3video_motion_vectors (line 201) | int mpeg3video_motion_vectors(mpeg3_slice_t *slice,

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/mpeg3video.c
  function mpeg3video_initdecoder (line 126) | int mpeg3video_initdecoder(mpeg3video_t *video)
  function mpeg3video_deletedecoder (line 230) | int mpeg3video_deletedecoder(mpeg3video_t *video)
  function mpeg3video_init_scantables (line 251) | void mpeg3video_init_scantables(mpeg3video_t *video)
  function mpeg3video_t (line 267) | mpeg3video_t* mpeg3video_allocate_struct(mpeg3_t *file, mpeg3_vtrack_t *...
  function mpeg3video_delete_struct (line 299) | int mpeg3video_delete_struct(mpeg3video_t *video)
  function mpeg3video_read_frame_backend (line 324) | int mpeg3video_read_frame_backend(mpeg3video_t *video, int skip_bframes)
  function mpeg3video_get_firstframe (line 367) | int mpeg3video_get_firstframe(mpeg3video_t *video)
  function mpeg3video_t (line 387) | mpeg3video_t* mpeg3video_new(mpeg3_t *file, mpeg3_vtrack_t *track)
  function mpeg3video_delete (line 481) | int mpeg3video_delete(mpeg3video_t *video)
  function mpeg3video_set_cpus (line 491) | int mpeg3video_set_cpus(mpeg3video_t *video, int cpus)
  function mpeg3video_set_mmx (line 496) | int mpeg3video_set_mmx(mpeg3video_t *video, int use_mmx)
  function mpeg3video_seek_percentage (line 503) | int mpeg3video_seek_percentage(mpeg3video_t *video, double percentage)
  function mpeg3video_previous_frame (line 509) | int mpeg3video_previous_frame(mpeg3video_t *video)
  function mpeg3video_seek_frame (line 522) | int mpeg3video_seek_frame(mpeg3video_t *video, long frame)
  function mpeg3video_read_raw (line 529) | int mpeg3video_read_raw(mpeg3video_t *video, unsigned char *output, long...
  function mpeg3video_read_frame (line 548) | int mpeg3video_read_frame(mpeg3video_t *video,
  function mpeg3video_read_yuvframe (line 604) | int mpeg3video_read_yuvframe(mpeg3video_t *video,

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/mpeg3video.h
  type mpeg3video_t (line 81) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/output.c
  function mpeg3video_rgb16_mmx (line 79) | inline void mpeg3video_rgb16_mmx(unsigned char *lum,
  function mpeg3_bgra32_mmx (line 262) | inline void mpeg3_bgra32_mmx(unsigned long y,
  function mpeg3_601_bgra32_mmx (line 305) | inline void mpeg3_601_bgra32_mmx(unsigned long y,
  function mpeg3_rgba32_mmx (line 353) | inline void mpeg3_rgba32_mmx(unsigned long y,
  function mpeg3_601_rgba32_mmx (line 395) | inline void mpeg3_601_rgba32_mmx(unsigned long y,
  function DITHER_ROW_HEAD (line 638) | DITHER_ROW_HEAD
  function DITHER_ROW_HEAD (line 765) | DITHER_ROW_HEAD
  function mpeg3video_ditherframe444 (line 966) | int mpeg3video_ditherframe444(mpeg3video_t *video, unsigned char *src[])
  function mpeg3video_dithertop (line 971) | int mpeg3video_dithertop(mpeg3video_t *video, unsigned char *src[])
  function mpeg3video_dithertop444 (line 982) | int mpeg3video_dithertop444(mpeg3video_t *video, unsigned char *src[])
  function mpeg3video_ditherbot (line 987) | int mpeg3video_ditherbot(mpeg3video_t *video, unsigned char *src[])
  function mpeg3video_ditherbot444 (line 992) | int mpeg3video_ditherbot444(mpeg3video_t *video, unsigned char *src[])
  function memcpy_fast (line 997) | void memcpy_fast(unsigned char *output, unsigned char *input, long len)
  function mpeg3video_init_output (line 1023) | int mpeg3video_init_output()
  function mpeg3video_ditherframeFastRGBA (line 1037) | int mpeg3video_ditherframeFastRGBA(mpeg3video_t *video, unsigned char **...
  function mpeg3video_ditherframeFastRGB555 (line 1091) | int mpeg3video_ditherframeFastRGB555(mpeg3video_t *video, unsigned char ...
  function mpeg3video_present_frame (line 1154) | int mpeg3video_present_frame(mpeg3video_t *video)
  function mpeg3video_display_second_field (line 1274) | int mpeg3video_display_second_field(mpeg3video_t *video)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/reconstruct.c
  function recva_mmx (line 36) | static inline void recva_mmx(unsigned char *s, unsigned char *d, int lx,...
  function recvac_mmx (line 65) | static inline void recvac_mmx(unsigned char *s, unsigned char *d, int lx...
  function rech_mmx (line 85) | static inline void rech_mmx(unsigned char *s, unsigned char *d, int lx2,...
  function rechc_mmx (line 108) | static inline void rechc_mmx(unsigned char *s, unsigned char *d, int lx2...
  function recha_mmx (line 125) | static inline void recha_mmx(unsigned char *s, unsigned char *d,int lx2,...
  function rechac_mmx (line 153) | static inline void rechac_mmx(unsigned char *s,unsigned char  *d, int lx...
  function rec4_mmx (line 175) | static inline void rec4_mmx(unsigned char *s, unsigned char *d, int lx, ...
  function rec4c_mmx (line 210) | static inline void rec4c_mmx(unsigned char *s, unsigned char *d, int lx,...
  function rec4a_mmx (line 235) | static inline void rec4a_mmx(unsigned char *s, unsigned char *d, int lx,...
  function rec4ac_mmx (line 275) | static inline void rec4ac_mmx(unsigned char *s, unsigned char  *d, int l...
  function rec_mmx (line 306) | static inline void rec_mmx(unsigned char *s, unsigned char *d, int lx2, ...
  function recc_mmx (line 325) | static inline void recc_mmx(unsigned char *s, unsigned char *d, int lx2,...
  function reca_mmx (line 342) | static inline void reca_mmx(unsigned char *s, unsigned char  *d, int lx2...
  function recac_mmx (line 397) | static inline void recac_mmx(unsigned char *s, unsigned char *d, int lx2...
  function recv_mmx (line 438) | static inline void recv_mmx(unsigned char *s, unsigned char *d, int lx, ...
  function recvc_mmx (line 496) | static inline void recvc_mmx(unsigned char *s, unsigned char *d, int lx,...
  function rec (line 540) | static inline void rec(unsigned char *s, unsigned char *d, int lx2, int h)
  function recc (line 568) | static inline void recc(unsigned char *s, unsigned char *d, int lx2, int h)
  function reca (line 588) | static inline void reca(unsigned char *s, unsigned char  *d, int lx2, in...
  function recac (line 612) | static inline void recac(unsigned char *s, unsigned char *d, int lx2, in...
  function recv (line 628) | static inline void recv(unsigned char *s, unsigned char *d, int lx, int ...
  function recvc (line 659) | static inline void recvc(unsigned char *s, unsigned char *d, int lx, int...
  function recva (line 684) | static inline void recva(unsigned char *s, unsigned char *d, int lx, int...
  function recvac (line 716) | static inline void recvac(unsigned char *s, unsigned char *d, int lx,int...
  function rech (line 739) | static inline void rech(unsigned char *s, unsigned char *d, int lx2, int...
  function rechc (line 770) | static inline void rechc(unsigned char *s,unsigned char *d, int lx2, int...
  function recha (line 792) | static inline void recha(unsigned char *s, unsigned char *d,int lx2, int h)
  function rechac (line 825) | static inline void rechac(unsigned char *s,unsigned char  *d, int lx2, i...
  function rec4 (line 850) | static inline void rec4(unsigned char *s, unsigned char *d, int lx, int ...
  function rec4c (line 884) | static inline void rec4c(unsigned char *s,unsigned char *d, int lx, int ...
  function rec4a (line 910) | static inline void rec4a(unsigned char *s,unsigned char *d, int lx, int ...
  function rec4ac (line 946) | static inline void rec4ac(unsigned char *s,unsigned char  *d, int lx, in...
  function recon_comp (line 974) | static inline
  function recon (line 1057) | static void recon(mpeg3video_t *video,
  function mpeg3video_reconstruct (line 1107) | int mpeg3video_reconstruct(mpeg3video_t *video,

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/seek.c
  function mpeg3bits_next_startcode (line 38) | unsigned int mpeg3bits_next_startcode(mpeg3_bits_t* stream)
  function mpeg3video_next_code (line 53) | int mpeg3video_next_code(mpeg3_bits_t* stream, unsigned int code)
  function mpeg3video_prev_code (line 64) | int mpeg3video_prev_code(mpeg3_bits_t* stream, unsigned int code)
  function mpeg3video_goptimecode_to_frame (line 74) | long mpeg3video_goptimecode_to_frame(mpeg3video_t *video)
  function mpeg3video_match_refframes (line 84) | int mpeg3video_match_refframes(mpeg3video_t *video)
  function mpeg3video_seek (line 115) | int mpeg3video_seek(mpeg3video_t *video)
  function mpeg3video_drop_frames (line 253) | int mpeg3video_drop_frames(mpeg3video_t *video, long frames)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/slice.c
  function mpeg3_new_slice_buffer (line 43) | int mpeg3_new_slice_buffer(mpeg3_slice_buffer_t *slice_buffer)
  function mpeg3_delete_slice_buffer (line 62) | int mpeg3_delete_slice_buffer(mpeg3_slice_buffer_t *slice_buffer)
  function mpeg3_expand_slice_buffer (line 71) | int mpeg3_expand_slice_buffer(mpeg3_slice_buffer_t *slice_buffer)
  function mpeg3video_addblock (line 87) | static inline int mpeg3video_addblock(mpeg3_slice_t *slice,
  function mpeg3_decode_slice (line 322) | int mpeg3_decode_slice(mpeg3_slice_t *slice)
  function mpeg3_slice_loop (line 651) | void mpeg3_slice_loop(mpeg3_slice_t *slice)
  function mpeg3_new_slice_decoder (line 724) | int mpeg3_new_slice_decoder(void *video, mpeg3_slice_t *slice)
  function mpeg3_delete_slice_decoder (line 747) | int mpeg3_delete_slice_decoder(mpeg3_slice_t *slice)

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/slice.h
  type mpeg3_slice_buffer_t (line 10) | typedef struct
  type mpeg3_slice_t (line 25) | typedef struct
  function mpeg3slice_getbit (line 76) | static inline unsigned int mpeg3slice_getbit(mpeg3_slice_buffer_t *buffer)
  function mpeg3slice_getbits2 (line 89) | static inline unsigned int mpeg3slice_getbits2(mpeg3_slice_buffer_t *buf...
  function mpeg3slice_getbyte (line 103) | static inline unsigned int mpeg3slice_getbyte(mpeg3_slice_buffer_t *buffer)
  function mpeg3slice_getbits (line 117) | static inline unsigned int mpeg3slice_getbits(mpeg3_slice_buffer_t *slic...
  function mpeg3slice_showbits16 (line 124) | static inline unsigned int mpeg3slice_showbits16(mpeg3_slice_buffer_t *b...
  function mpeg3slice_showbits9 (line 139) | static inline unsigned int mpeg3slice_showbits9(mpeg3_slice_buffer_t *bu...
  function mpeg3slice_showbits5 (line 154) | static inline unsigned int mpeg3slice_showbits5(mpeg3_slice_buffer_t *bu...
  function mpeg3slice_showbits (line 168) | static inline unsigned int mpeg3slice_showbits(mpeg3_slice_buffer_t *sli...

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/vlc.h
  type mpeg3_VLCtab_t (line 8) | typedef struct {
  type mpeg3_DCTtab_t (line 12) | typedef struct {

FILE: vm/src/from_squeak/Cross/plugins/Mpeg3Plugin/libmpeg/video/worksheet.c
  function mpeg3_601_mmx (line 8) | inline void mpeg3_601_mmx(unsigned long y,
  function main (line 21) | int main(int argc, char *argv[])

FILE: vm/src/from_squeak/Cross/plugins/RePlugin/get.c
  function pcre_copy_substring (line 74) | int
  function pcre_get_substring_list (line 112) | int
  function pcre_free_substring_list (line 157) | void
  function pcre_get_substring (line 190) | int
  function pcre_free_substring (line 221) | void

FILE: vm/src/from_squeak/Cross/plugins/RePlugin/internal.h
  type BOOL (line 124) | typedef int BOOL;
  type uschar (line 325) | typedef unsigned char uschar;
  type real_pcre (line 330) | typedef struct real_pcre {
  type real_pcre_extra (line 344) | typedef struct real_pcre_extra {
  type compile_data (line 353) | typedef struct compile_data {
  type match_data (line 363) | typedef struct match_data {

FILE: vm/src/from_squeak/Cross/plugins/RePlugin/oldInternal.h
  type BOOL (line 124) | typedef int BOOL;
  type uschar (line 323) | typedef unsigned char uschar;
  type real_pcre (line 328) | typedef struct real_pcre {
  type real_pcre_extra (line 342) | typedef struct real_pcre_extra {
  type compile_data (line 351) | typedef struct compile_data {
  type match_data (line 361) | typedef struct match_data {

FILE: vm/src/from_squeak/Cross/plugins/RePlugin/pcre.c
  type eptrblock (line 166) | typedef struct eptrblock {
  function ord2utf8 (line 307) | static int
  function pcre_info (line 364) | int
  function pcre_fullinfo (line 395) | int
  function pchars (line 465) | static void
  function check_escape (line 501) | static int
  function BOOL (line 674) | static BOOL
  function uschar (line 711) | static const uschar *
  function find_fixedlength (line 763) | static int
  function BOOL (line 930) | static BOOL
  function check_posix_name (line 962) | static int
  function BOOL (line 999) | static BOOL
  function BOOL (line 2127) | static BOOL
  function uschar (line 2276) | static const uschar*
  function BOOL (line 2341) | static BOOL
  function BOOL (line 2377) | static BOOL
  function find_firstchar (line 2413) | static int
  function pcre (line 2478) | pcre *
  function BOOL (line 3405) | static BOOL
  function BOOL (line 3467) | static BOOL
  function pcre_exec (line 4885) | int

FILE: vm/src/from_squeak/Cross/plugins/RePlugin/pcre.h
  type real_pcre (line 78) | struct real_pcre
  type real_pcre_extra (line 79) | struct real_pcre_extra
  type pcre (line 81) | typedef struct real_pcre pcre;
  type pcre_extra (line 82) | typedef struct real_pcre_extra pcre_extra;

FILE: vm/src/from_squeak/Cross/plugins/RePlugin/study.c
  function set_bit (line 59) | static void
  function BOOL (line 86) | static BOOL
  function pcre_extra (line 343) | pcre_extra *

FILE: vm/src/from_squeak/Cross/plugins/SocketPlugin/SocketPlugin.h
  type SQSocket (line 7) | typedef struct

FILE: vm/src/from_squeak/Cross/plugins/SoundCodecPrims/sqSoundCodecPluginBasicPrims.c
  type gsm_state (line 45) | struct gsm_state
  type gsm_signal (line 46) | typedef short		   	gsm_signal;
  type gsm_byte (line 47) | typedef unsigned char		gsm_byte;
  type gsm_byte (line 48) | typedef gsm_byte 		gsm_frame[33];
  type word (line 132) | typedef short			word;
  type longword (line 133) | typedef long			longword;
  type uword (line 135) | typedef unsigned short		uword;
  type ulongword (line 136) | typedef unsigned long		ulongword;
  type gsm_state (line 138) | struct gsm_state {
  type gsm_state (line 264) | struct gsm_state
  type gsm_state (line 274) | struct gsm_state
  type gsm_state (line 283) | struct gsm_state
  type gsm_state (line 288) | struct gsm_state
  type gsm_state (line 292) | struct gsm_state
  type gsm_state (line 300) | struct gsm_state
  type gsm_state (line 305) | struct gsm_state
  type gsm_state (line 315) | struct gsm_state
  type gsm_state (line 322) | struct gsm_state
  type gsm_state (line 329) | struct gsm_state
  type gsm_state (line 336) | struct gsm_state
  type gsm_state (line 343) | struct gsm_state
  function gsmEncode (line 3864) | void gsmEncode(
  function gsmDecode (line 3887) | void gsmDecode(
  function gsmInitState (line 3910) | void gsmInitState(int state) {
  function gsmStateBytes (line 3916) | int gsmStateBytes(void) {

FILE: vm/src/from_squeak/Cross/plugins/SoundGenerationPlugin/sqOldSoundPrims.c
  function primFMSoundmixSampleCountintostartingAtpan (line 25) | int primFMSoundmixSampleCountintostartingAtpan(void) {
  function primPluckedSoundmixSampleCountintostartingAtpan (line 107) | int primPluckedSoundmixSampleCountintostartingAtpan(void) {
  function primSampledSoundmixSampleCountintostartingAtpan (line 174) | int primSampledSoundmixSampleCountintostartingAtpan(void) {
  function primWaveTableSoundmixSampleCountintostartingAtpan (line 242) | int primWaveTableSoundmixSampleCountintostartingAtpan(void) {
  function oldprimSampledSoundmixSampleCountintostartingAtleftVolrightVol (line 310) | int oldprimSampledSoundmixSampleCountintostartingAtleftVolrightVol(void) {

FILE: vm/src/from_squeak/Cross/plugins/Squeak3D/b3d.h
  type B3DRasterizerState (line 33) | typedef struct B3DRasterizerState {

FILE: vm/src/from_squeak/Cross/plugins/Squeak3D/b3dAlloc.c
  function B3DPrimitiveFace (line 20) | B3DPrimitiveFace *dbg_b3dAllocFace(B3DFaceAllocList *list)
  function B3DPrimitiveEdge (line 40) | B3DPrimitiveEdge *dbg_b3dAllocEdge(B3DEdgeAllocList *list)
  function dbg_b3dFreeFace (line 60) | void dbg_b3dFreeFace(B3DFaceAllocList *list, B3DPrimitiveFace *face)
  function dbg_b3dFreeEdge (line 72) | void dbg_b3dFreeEdge(B3DEdgeAllocList *list, B3DPrimitiveEdge *edge)
  function B3DPrimitiveAttribute (line 84) | B3DPrimitiveAttribute *dbg_b3dAllocSingleAttr(B3DAttrAllocList *list)
  function dbg_b3dAllocAttrib (line 100) | int dbg_b3dAllocAttrib(B3DAttrAllocList *attrList, B3DPrimitiveFace *face)
  function dbg_b3dFreeAttrib (line 121) | void dbg_b3dFreeAttrib(B3DAttrAllocList *list, B3DPrimitiveFace *face)

FILE: vm/src/from_squeak/Cross/plugins/Squeak3D/b3dAlloc.h
  type B3DEdgeAllocList (line 22) | typedef struct B3DEdgeAllocList {
  type B3DFaceAllocList (line 33) | typedef struct B3DFaceAllocList {
  type B3DAttrAllocList (line 44) | typedef struct B3DAttrAllocList {

FILE: vm/src/from_squeak/Cross/plugins/Squeak3D/b3dDraw.c
  function attrValueAt (line 70) | double attrValueAt(B3DPrimitiveFace *face, B3DPrimitiveAttribute *attr, ...
  type b3dPixelColor (line 130) | struct b3dPixelColor
  function MULTBL_Init (line 152) | static void MULTBL_Init(void)
  function b3dNoDraw (line 231) | void b3dNoDraw(int leftX, int rightX, int yValue, B3DPrimitiveFace *face)
  function b3dDrawRGBFlat (line 237) | void b3dDrawRGBFlat(int leftX, int rightX, int yValue, B3DPrimitiveFace ...
  function b3dDrawRGB (line 274) | void b3dDrawRGB(int leftX, int rightX, int yValue, B3DPrimitiveFace *face)
  function b3dDrawSTWRGB (line 351) | void b3dDrawSTWRGB(int leftX, int rightX, int yValue, B3DPrimitiveFace *...
  function b3dDrawSTWARGB (line 479) | void b3dDrawSTWARGB(int leftX, int rightX, int yValue, B3DPrimitiveFace ...
  function b3dDrawRGBA (line 484) | void b3dDrawRGBA(int leftX, int rightX, int yValue, B3DPrimitiveFace *face)
  function b3dDrawSTW (line 489) | void b3dDrawSTW(int leftX, int rightX, int yValue, B3DPrimitiveFace *face)
  function b3dDrawSTWA (line 494) | void b3dDrawSTWA(int leftX, int rightX, int yValue, B3DPrimitiveFace *face)

FILE: vm/src/from_squeak/Cross/plugins/Squeak3D/b3dInit.c
  function b3dInitializeEdgeAllocator (line 36) | int b3dInitializeEdgeAllocator(void* base, int length)
  function b3dInitializeFaceAllocator (line 50) | int b3dInitializeFaceAllocator(void* base, int length)
  function b3dInitializeAttrAllocator (line 64) | int b3dInitializeAttrAllocator(void* base, int length)
  function b3dInitializeEdgeList (line 78) | int b3dInitializeEdgeList(void* base, int length)
  function b3dInitializeAET (line 90) | int b3dInitializeAET(void* base, int length)
  function b3dInitializeFillList (line 105) | int b3dInitializeFillList(void* base, int length)
  function b3dMapObjectVertices (line 123) | void b3dMapObjectVertices(B3DPrimitiveObject *obj, B3DPrimitiveViewport ...
  function b3dSetupVertexOrder (line 197) | void b3dSetupVertexOrder(B3DPrimitiveObject *obj)
  type stackEntry (line 276) | typedef struct stackEntry {
  function b3dQuickSortInitialFaces (line 312) | int b3dQuickSortInitialFaces(B3DPrimitiveObject *obj, int i, int j)
  function b3dQuickSortObjects (line 377) | int b3dQuickSortObjects(B3DPrimitiveObject **array, int i, int j)
  function b3dValidateObjectFaces (line 444) | void b3dValidateObjectFaces(B3DPrimitiveObject *obj)
  function b3dAddIndexedTriangleObject (line 483) | int b3dAddIndexedTriangleObject(void *objBase, int objLength, int objFla...
  function b3dAddIndexedQuadObject (line 527) | int b3dAddIndexedQuadObject(void *objBase, int objLength, int objFlags, ...
  function b3dAddPolygonObject (line 585) | int b3dAddPolygonObject(void *objBase, int objLength, int objFlags, int ...
  function b3dLoadTexture (line 637) | int b3dLoadTexture(B3DTexture *texture,
  function b3dSetupObjects (line 676) | int b3dSetupObjects(B3DRasterizerState *state)

FILE: vm/src/from_squeak/Cross/plugins/Squeak3D/b3dMain.c
  function b3dAbort (line 65) | void b3dAbort(char *msg){
  function b3dValidateEdgeOrder (line 70) | void b3dValidateEdgeOrder(B3DPrimitiveEdgeList *list)
  function b3dValidateAETOrder (line 88) | void b3dValidateAETOrder(B3DActiveEdgeTable *list)
  function B3DPrimitiveFace (line 115) | B3DPrimitiveFace *b3dInitializeFace(B3DPrimitiveVertex *v0,
  function b3dInitializePass2 (line 194) | int b3dInitializePass2(B3DPrimitiveFace *face)
  function b3dInitializeEdge (line 295) | void b3dInitializeEdge(B3DPrimitiveEdge *edge)
  function b3dFirstIndexForInserting (line 320) | int b3dFirstIndexForInserting(B3DPrimitiveEdgeList *list, int xValue)
  function b3dAddEdgeBeforeIndex (line 342) | void b3dAddEdgeBeforeIndex(B3DPrimitiveEdgeList *list, B3DPrimitiveEdge ...
  function b3dAdd2EdgesBeforeIndex (line 362) | void b3dAdd2EdgesBeforeIndex(B3DPrimitiveEdgeList *list,
  function b3dAdjustFaceEdges (line 388) | void b3dAdjustFaceEdges(B3DPrimitiveFace *face, B3DPrimitiveEdge *edge1,...
  function B3DPrimitiveEdge (line 418) | B3DPrimitiveEdge *b3dAddLowerEdgeFromFace(B3DPrimitiveFace *face, B3DPri...
  function b3dAddEdgesFromFace (line 482) | void b3dAddEdgesFromFace(B3DPrimitiveFace *face, int yValue)
  function b3dRemoveAETEdge (line 614) | void b3dRemoveAETEdge(B3DActiveEdgeTable *aet, B3DPrimitiveEdge *edge, i...
  function b3dMergeAETEdgesFrom (line 656) | void b3dMergeAETEdgesFrom(B3DActiveEdgeTable *aet, B3DPrimitiveEdgeList ...
  function b3dAdvanceAETEdge (line 698) | void b3dAdvanceAETEdge(B3DPrimitiveEdge *edge,
  function zValueAt (line 724) | double zValueAt(B3DPrimitiveFace *face, double xValue, double yValue)
  function b3dComputeIntersection (line 742) | int b3dComputeIntersection(B3DPrimitiveFace *frontFace,
  function b3dCheckIntersectionOfFaces (line 768) | int b3dCheckIntersectionOfFaces(B3DPrimitiveFace *frontFace,
  function b3dAdjustIntersections (line 823) | void b3dAdjustIntersections(B3DFillList *fillList,
  function b3dValidateFillList (line 844) | void b3dValidateFillList(B3DFillList *list)
  function b3dAddFirstFill (line 870) | void b3dAddFirstFill(B3DFillList *fillList, B3DPrimitiveFace *aFace)
  function b3dAddLastFill (line 885) | void b3dAddLastFill(B3DFillList *fillList, B3DPrimitiveFace *aFace)
  function b3dRemoveFill (line 900) | void b3dRemoveFill(B3DFillList *fillList, B3DPrimitiveFace *aFace)
  function b3dInsertBeforeFill (line 915) | void b3dInsertBeforeFill(B3DFillList *fillList, B3DPrimitiveFace *aFace,...
  function b3dAddFrontFill (line 928) | void b3dAddFrontFill(B3DFillList *fillList, B3DPrimitiveFace *aFace)
  function b3dAddBackFill (line 957) | void b3dAddBackFill(B3DFillList *fillList, B3DPrimitiveFace *aFace)
  function b3dCleanupFill (line 987) | void b3dCleanupFill(B3DFillList *fillList)
  function b3dSearchForNewTopFill (line 999) | void b3dSearchForNewTopFill(B3DFillList *fillList, int scaledX, int yValue)
  function b3dToggleTopFills (line 1025) | void b3dToggleTopFills(B3DFillList *fillList, B3DPrimitiveEdge *edge, in...
  function b3dToggleBackFills (line 1072) | void b3dToggleBackFills(B3DFillList *fillList,
  function b3dClearSpanBuffer (line 1105) | void b3dClearSpanBuffer(B3DActiveEdgeTable *aet)
  function b3dDrawSpanBuffer (line 1120) | void b3dDrawSpanBuffer(B3DActiveEdgeTable *aet, int yValue)
  function b3dMainLoop (line 1154) | int b3dMainLoop(B3DRasterizerState *state, int stopReason)

FILE: vm/src/from_squeak/Cross/plugins/Squeak3D/b3dRemap.c
  function b3dRemapFaces (line 21) | void b3dRemapFaces(B3DFaceAllocList *list, int attrOffset, int edgeOffset)
  function b3dRemapEdges (line 43) | void b3dRemapEdges(B3DEdgeAllocList *list, int faceOffset)
  function b3dRemapFills (line 62) | void b3dRemapFills(B3DFillList *fillList, int offset)
  function b3dRemapEdgeList (line 84) | void b3dRemapEdgeList(B3DPrimitiveEdgeList *list, int edgeOffset)
  function b3dRemapAET (line 97) | void b3dRemapAET(B3DActiveEdgeTable *list, int edgeOffset, int aetOffset...
  function b3dRemapEdgeVertices (line 125) | void b3dRemapEdgeVertices(B3DEdgeAllocList *list, int vtxOffset, void *f...
  function b3dRemapFaceVertices (line 142) | void b3dRemapFaceVertices(B3DFaceAllocList *list, int vtxOffset, void *f...
  function b3dRemapFaceFree (line 160) | void b3dRemapFaceFree(B3DFaceAllocList *list, int faceOffset)
  function b3dRemapEdgeFree (line 178) | void b3dRemapEdgeFree(B3DEdgeAllocList *list, int edgeOffset)
  function b3dRemapAttributes (line 196) | void b3dRemapAttributes(B3DAttrAllocList *list, int attrOffset)
  function b3dValidateAndRemapState (line 210) | int b3dValidateAndRemapState(B3DRasterizerState *state)

FILE: vm/src/from_squeak/Cross/plugins/Squeak3D/b3dTypes.h
  type B3DPrimitiveVertex (line 91) | typedef struct B3DPrimitiveVertex {
  type B3DInputFace (line 109) | typedef struct B3DInputFace {
  type B3DInputQuad (line 115) | typedef struct B3DInputQuad {
  type B3DPrimitiveEdge (line 135) | typedef struct B3DPrimitiveEdge {
  type B3DPrimitiveEdgeList (line 161) | typedef struct B3DPrimitiveEdgeList {
  type B3DActiveEdgeTable (line 173) | typedef struct B3DActiveEdgeTable {
  type B3DPrimitiveFace (line 220) | typedef struct B3DPrimitiveFace {
  type B3DFillList (line 257) | typedef struct B3DFillList {
  type B3DPrimitiveAttribute (line 266) | typedef struct B3DPrimitiveAttribute {
  type B3DTexture (line 279) | typedef struct B3DTexture {
  type B3DPrimitiveViewport (line 295) | typedef struct B3DPrimitiveViewport {
  type B3DPrimitiveObject (line 304) | typedef struct B3DPrimitiveObject {

FILE: vm/src/from_squeak/Cross/plugins/SqueakFFIPrims/sqFFIPlugin.c
  function loadFloatRegs (line 30) | void
  function ffiLogFileNameOfLength (line 35) | int
  function ffiLogCallOfLength (line 64) | int

FILE: vm/src/from_squeak/Cross/plugins/SqueakFFIPrims/sqFFITestFuncs.c
  type ffiTestPoint2 (line 13) | typedef struct ffiTestPoint2 {
  type ffiTestPoint4 (line 18) | typedef struct ffiTestPoint4 {
  function ffiTestChars (line 50) | EXPORT(char) ffiTestChars(char c1, char c2, char c3, char c4) {
  function ffiTestShorts (line 56) | EXPORT(short) ffiTestShorts(short c1, short c2, short c3, short c4) {
  function ffiTestInts (line 62) | EXPORT(int) ffiTestInts(int c1, int c2, int c3, int c4) {
  function ffiTestInts8 (line 67) | EXPORT(int) ffiTestInts8(int c1, int c2, int c3, int c4, int c5, int c6,...
  function ffiTestFloats (line 74) | EXPORT(float) ffiTestFloats(float f1, float f2) {
  function ffiTestFloats7 (line 79) | EXPORT(float) ffiTestFloats7(float f1, float f2, float f3, float f4, flo...
  function ffiTestFloats13 (line 84) | EXPORT(float) ffiTestFloats13(float f1, float f2, float f3, float f4, fl...
  function ffiTestFloats14 (line 89) | EXPORT(float) ffiTestFloats14(float f1, float f2, float f3, float f4, fl...
  function ffiTestDoubles14 (line 94) | EXPORT(double) ffiTestDoubles14(double f1, double f2, double f3, double ...
  function ffiTestDoubles (line 100) | EXPORT(double) ffiTestDoubles(double d1, double d2) {
  function ffiPrintString (line 106) | EXPORT(char*) ffiPrintString(char *string) {
  function ffiTestStruct64 (line 112) | EXPORT(ffiTestPoint2) ffiTestStruct64(ffiTestPoint2 pt1, ffiTestPoint2 p...
  function ffiTestStructBig (line 122) | EXPORT(ffiTestPoint4) ffiTestStructBig(ffiTestPoint4 pt1, ffiTestPoint4 ...
  function ffiTestPointers (line 136) | EXPORT(ffiTestPoint4*) ffiTestPointers(ffiTestPoint4 *pt1, ffiTestPoint4...
  function ffiTestLongLong (line 151) | EXPORT(LONGLONG) ffiTestLongLong(LONGLONG i1, LONGLONG i2) {
  function ffiTestLongLonga1 (line 155) | EXPORT(LONGLONG) ffiTestLongLonga1(char c1, LONGLONG i1, LONGLONG i2) {
  function ffiTestLongLonga2 (line 159) | EXPORT(LONGLONG) ffiTestLongLonga2(char c1, char c2, LONGLONG i1, LONGLO...
  function ffiTestLongLong8 (line 163) | EXPORT(LONGLONG) ffiTestLongLong8(char c1, char c2, char c3, char c4, ch...
  function ffiTestLongLong8a1 (line 167) | EXPORT(LONGLONG) ffiTestLongLong8a1(char c1, char c2, char c3, char c4, ...
  function ffiTestLongLong8a2 (line 171) | EXPORT(LONGLONG) ffiTestLongLong8a2(char c1, char c2, char c3, char c4, ...

FILE: vm/src/from_squeak/Cross/plugins/SqueakFFIPrims/sqManualSurface.c
  type VirtualMachine (line 5) | struct VirtualMachine
  function initSurfacePluginFunctionPointers (line 33) | void initSurfacePluginFunctionPointers()
  type ManualSurface (line 44) | typedef struct {
  function manualSurfaceGetFormat (line 71) | int manualSurfaceGetFormat(ManualSurface* surface, int* width, int* heig...
  function manualSurfaceUnlock (line 101) | int manualSurfaceUnlock(ManualSurface* surface, int x, int y, int w, int...
  function manualSurfaceShow (line 107) | int manualSurfaceShow(ManualSurface* surface, int x, int y, int w, int h) {
  function createManualSurface (line 115) | int createManualSurface(int width, int height, int rowPitch, int depth, ...
  function destroyManualSurface (line 147) | int destroyManualSurface(int surfaceID) {
  function setManualSurfacePointer (line 152) | int setManualSurfacePointer(int surfaceID, void* ptr) {

FILE: vm/src/from_squeak/Cross/plugins/SurfacePlugin/SurfacePlugin.c
  type SqueakSurface (line 34) | typedef struct SqueakSurface {
  type VirtualMachine (line 54) | struct VirtualMachine
  function ioGetSurfaceFormat (line 76) | EXPORT(int) ioGetSurfaceFormat (int surfaceID, int* width, int* height, ...
  function ioLockSurface (line 90) | EXPORT(int) ioLockSurface (int surfaceID, int *pitch, int x, int y, int ...
  function ioUnlockSurface (line 103) | EXPORT(int) ioUnlockSurface(int surfaceID, int x, int y, int w, int h)
  function ioShowSurface (line 115) | EXPORT(int) ioShowSurface(int surfaceID, int x, int y, int w, int h)
  function ioRegisterSurface (line 130) | EXPORT(int) ioRegisterSurface(int surfaceHandle, sqSurfaceDispatch *fn, ...
  function ioUnregisterSurface (line 160) | EXPORT(int) ioUnregisterSurface(int surfaceID)
  function ioFindSurface (line 177) | EXPORT(int) ioFindSurface(int surfaceID, sqSurfaceDispatch *fn, int *sur...
  function setInterpreter (line 188) | EXPORT(int) setInterpreter(struct VirtualMachine* anInterpreter) {
  function getModuleName (line 199) | EXPORT(const char*) getModuleName(void) {
  function initialiseModule (line 203) | EXPORT(int) initialiseModule() {
  function shutdownModule (line 210) | EXPORT(int) shutdownModule() {

FILE: vm/src/from_squeak/Cross/plugins/SurfacePlugin/SurfacePlugin.h
  type sqSurfaceDispatch (line 14) | typedef struct sqSurfaceDispatch {

FILE: vm/src/from_squeak/Cross/vm/sq.h
  type sqInputEvent (line 369) | typedef struct sqInputEvent
  type sqMouseEvent (line 383) | typedef struct sqMouseEvent
  type sqKeyboardEvent (line 396) | typedef struct sqKeyboardEvent
  type sqDragDropFilesEvent (line 409) | typedef struct sqDragDropFilesEvent
  type sqMenuEvent (line 428) | typedef struct sqMenuEvent
  type sqWindowEvent (line 442) | typedef struct sqWindowEvent
  type sqComplexEvent (line 462) | typedef struct sqComplexEvent

FILE: vm/src/from_squeak/Cross/vm/sqAtomicOps.h
  function AtomicSet (line 48) | static inline void
  function AtomicGet (line 58) | static inline uint64_t

FILE: vm/src/from_squeak/Cross/vm/sqExternalSemaphores.c
  type SignalRequest (line 63) | typedef struct {
  function ioGetMaxExtSemTableSize (line 86) | int
  function ioSetMaxExtSemTableSize (line 97) | void
  function ioInitExternalSemaphores (line 115) | void
  function sqInt (line 126) | sqInt
  function sqInt (line 179) | sqInt
  function allRequestsAreAnswered (line 230) | int

FILE: vm/src/from_squeak/Cross/vm/sqHeapMap.c
  function heapMapAtWord (line 53) | int
  function heapMapAtWordPut (line 68) | void
  function clearHeapMap (line 92) | void

FILE: vm/src/from_squeak/Cross/vm/sqMemoryAccess.h
  type sqInt (line 52) | typedef int		sqInt;
  type usqInt (line 53) | typedef unsigned int	usqInt;
  type sqInt (line 55) | typedef long		sqInt;
  type usqInt (line 56) | typedef unsigned long	usqInt;
  type sqInt (line 61) | typedef long long		sqInt;
  type usqInt (line 62) | typedef unsigned long long	usqInt;
  function sqInt (line 75) | static inline sqInt byteAtPointer(char *ptr)			{ return (sqInt)(*((unsig...
  function sqInt (line 76) | static inline sqInt byteAtPointerput(char *ptr, int val)	{ return (sqInt...
  function sqInt (line 77) | static inline sqInt shortAtPointer(char *ptr)			{ return (sqInt)(*((shor...
  function sqInt (line 78) | static inline sqInt shortAtPointerput(char *ptr, int val)	{ return (sqIn...
  function sqInt (line 79) | static inline sqInt intAtPointer(char *ptr)			{ return (sqInt)(*((unsign...
  function sqInt (line 80) | static inline sqInt intAtPointerput(char *ptr, int val)	{ return (sqInt)...
  function sqInt (line 81) | static inline sqInt longAtPointer(char *ptr)			{ return *(sqInt *)ptr; }
  function sqInt (line 82) | static inline sqInt longAtPointerput(char *ptr, sqInt val)	{ return *(sq...
  function sqInt (line 83) | static inline sqInt oopAtPointer(char *ptr)			{ return *(sqInt *)ptr; }
  function sqInt (line 84) | static inline sqInt oopAtPointerput(char *ptr, sqInt val)	{ return (sqIn...
  function sqInt (line 91) | static inline sqInt oopForPointer(char *ptr)			{ return (sqInt)ptr; }
  function sqInt (line 94) | static inline sqInt oopForPointer(char *ptr)			{ return (sqInt)(ptr - sq...
  function sqInt (line 98) | static inline sqInt byteAt(sqInt oop)				{ return byteAtPointer(pointerF...
  function sqInt (line 99) | static inline sqInt byteAtput(sqInt oop, int val)		{ return byteAtPointe...
  function sqInt (line 100) | static inline sqInt shortAt(sqInt oop)			{ return shortAtPointer(pointer...
  function sqInt (line 101) | static inline sqInt shortAtput(sqInt oop, int val)		{ return shortAtPoin...
  function sqInt (line 102) | static inline sqInt intAt(sqInt oop)				{ return intAtPointer(pointerFor...
  function sqInt (line 103) | static inline sqInt intAtput(sqInt oop, int val)		{ return intAtPointerp...
  function sqInt (line 104) | static inline sqInt longAt(sqInt oop)				{ return longAtPointer(pointerF...
  function sqInt (line 105) | static inline sqInt longAtput(sqInt oop, sqInt val)		{ return longAtPoin...
  function sqInt (line 106) | static inline sqInt oopAt(sqInt oop)				{ return oopAtPointer(pointerFor...
  function sqInt (line 107) | static inline sqInt oopAtput(sqInt oop, sqInt val)		{ return oopAtPointe...
  type _aligner (line 154) | typedef union { double d; int i[sizeof(double) / sizeof(int)]; } _aligner;
  function flag (line 181) | static void flag(char *ignored) {}
  function flag (line 183) | static inline void flag(char *ignored) {}

FILE: vm/src/from_squeak/Cross/vm/sqNamedPrims.c
  type sqExport (line 17) | typedef struct {
  type ModuleEntry (line 34) | typedef struct ModuleEntry {
  type VirtualMachine (line 44) | struct VirtualMachine
  function ModuleEntry (line 58) | static ModuleEntry *addToModuleList(const char *pluginName, void* handle...
  function sqInt (line 76) | static sqInt removeFromList(ModuleEntry *entry)
  function sqInt (line 172) | static sqInt callInitializersIn(ModuleEntry *module)
  function ioDisableModuleLoading (line 234) | void ioDisableModuleLoading() {
  function ModuleEntry (line 238) | static ModuleEntry *findAndLoadModule(const char *pluginName, sqInt ffiL...
  function ModuleEntry (line 279) | static ModuleEntry *findOrLoadModule(const char *pluginName, sqInt ffiLoad)
  function sqInt (line 389) | static sqInt shutdownModule(ModuleEntry *module)
  function sqInt (line 404) | sqInt ioShutdownAllModules(void)
  function sqInt (line 418) | sqInt ioUnloadModule(const char *moduleName)
  function sqInt (line 457) | sqInt ioUnloadModuleOfLength(sqInt moduleNameIndex, sqInt moduleNameLength)
  function rvm_callInitializersInAllModules (line 535) | void rvm_callInitializersInAllModules() {

FILE: vm/src/from_squeak/Cross/vm/sqTicker.c
  type Tickee (line 64) | typedef struct {
  function addSynchronousTickee (line 83) | void
  function ioSynchronousCheckForEvents (line 121) | void
  function addHighPriorityTickee (line 155) | void
  function checkHighPriorityTickees (line 211) | void

FILE: vm/src/from_squeak/Cross/vm/sqVirtualMachine.c
  type VirtualMachine (line 222) | struct VirtualMachine
  function sqInt (line 224) | static sqInt majorVersion(void) {
  function sqInt (line 228) | static sqInt minorVersion(void) {
  function sqInt (line 233) | static sqInt isNonIntegerObject(sqInt objectPointer)
  function sqInt (line 250) | sqInt disownVM(sqInt flags) { return 1; }
  function sqInt (line 251) | sqInt ownVM(sqInt threadIdAndFlags)
  type VirtualMachine (line 265) | struct VirtualMachine
  type VirtualMachine (line 268) | struct VirtualMachine
  function FILE (line 526) | static FILE *
  function pushOutputFile (line 542) | void
  function popOutputFile (line 571) | void

FILE: vm/src/from_squeak/Cross/vm/sqVirtualMachine.h
  type _VMCallbackContext (line 39) | struct _VMCallbackContext
  type sqInt (line 42) | typedef sqInt (*CompilerHook)();
  type VirtualMachine (line 44) | struct VirtualMachine
  type VirtualMachine (line 46) | typedef struct VirtualMachine {

FILE: vm/src/from_squeak/Mac OS/plugins/AsynchFilePlugin/sqMacAsyncFilePrims.c
  type VirtualMachine (line 14) | struct VirtualMachine
  function asyncFileInit (line 25) | int asyncFileInit() { return true; }
  function asyncFileShutdown (line 26) | int asyncFileShutdown() {return true;}
  type AsyncFileState (line 66) | typedef struct {
  function asyncFileAllocateBuffer (line 101) | void asyncFileAllocateBuffer(AsyncFileState *state, int byteCount) {
  function pascal (line 126) | pascal void asyncFileCompletionRoutine(AsyncFileState *state) {
  function asyncFileInitPB (line 146) | void asyncFileInitPB(AsyncFileState *state, int fPosition) {
  function asyncFileValid (line 158) | int asyncFileValid(AsyncFile *f) {
  function asyncFileClose (line 176) | int asyncFileClose(AsyncFile *f) {
  function asyncFileOpen (line 206) | int asyncFileOpen(AsyncFile *f, int fileNamePtr, int fileNameSize, int w...
  function asyncFileReadResult (line 273) | int asyncFileReadResult(AsyncFile *f, int bufferPtr, int bufferSize) {
  function asyncFileReadStart (line 297) | int asyncFileReadStart(AsyncFile *f, int fPosition, int count) {
  function asyncFileRecordSize (line 324) | int asyncFileRecordSize() {
  function asyncFileWriteResult (line 328) | int asyncFileWriteResult(AsyncFile *f) {
  function asyncFileWriteStart (line 343) | int asyncFileWriteStart(AsyncFile *f, int fPosition, int bufferPtr, int ...

FILE: vm/src/from_squeak/Mac OS/plugins/B3DAcceleratorPlugin/sqMacOpenGL.c
  type WindowPtr (line 65) | typedef WindowPtr (*getSTWindowFn)(void);
  type VirtualMachine (line 96) | struct VirtualMachine
  function macEventHook (line 105) | static int macEventHook(EventRecord *event) {
  function glDestroyRenderer (line 220) | int glDestroyRenderer(int handle)
  function glHasARBMultisampling (line 248) | static int glHasARBMultisampling () {
  function glCreateRendererFlags (line 269) | int glCreateRendererFlags(int x, int y, int w, int h, int flags)
  function glGetIntPropertyOS (line 506) | int glGetIntPropertyOS(int handle, int prop)
  function glSetIntPropertyOS (line 520) | int glSetIntPropertyOS(int handle, int prop, int value)
  function glRenderer (line 534) | glRenderer *glRendererFromHandle(int handle) {
  function glSwapBuffers (line 541) | int glSwapBuffers(glRenderer *renderer) {
  function glMakeCurrentRenderer (line 597) | int glMakeCurrentRenderer(glRenderer *renderer) {
  function glSetBufferRect (line 616) | int glSetBufferRect(int handle, int x, int y, int w, int h) {
  function glSetVerboseLevel (line 666) | int glSetVerboseLevel(int level) {
  function glIsOverlayRenderer (line 671) | int glIsOverlayRenderer(int handle) {
  function glInitialize (line 683) | int glInitialize(void)
  function glShutdown (line 707) | int glShutdown(void)

FILE: vm/src/from_squeak/Mac OS/plugins/B3DAcceleratorPlugin/sqMacOpenGL.h
  type glRenderer (line 14) | typedef struct glRenderer {

FILE: vm/src/from_squeak/Mac OS/plugins/B3DAcceleratorPlugin/sqMacOpenGLInfo.c
  function PrintBufferModes (line 56) | static void PrintBufferModes(GLint v)
  function PrintColorModes (line 64) | static void PrintColorModes(GLint v)
  function PrintBitModes (line 94) | static void PrintBitModes(GLint v)
  function PrintInfoStats (line 115) | static void PrintInfoStats(AGLRendererInfo info)
  function CheckGetRendererInfo (line 185) | static void CheckGetRendererInfo(GDHandle device)
  function printRendererInfo (line 210) | int printRendererInfo(void)
  function printFormatInfo (line 231) | int printFormatInfo(AGLPixelFormat info)

FILE: vm/src/from_squeak/Mac OS/plugins/ClipboardExtended/ClipboardExtendedPlugin.c
  type VirtualMachine (line 49) | struct VirtualMachine
  type VirtualMachine (line 57) | struct VirtualMachine
  function VirtualMachine (line 70) | static VirtualMachine * getInterpreter(void) {
  function getModuleName (line 80) | EXPORT(const char*) getModuleName(void) {
  function sqInt (line 84) | static sqInt halt(void) {
  function ioAddClipboardData (line 88) | EXPORT(sqInt) ioAddClipboardData(void) {
  function ioClearClipboard (line 115) | EXPORT(sqInt) ioClearClipboard(void) {
  function ioCreateClipboard (line 132) | EXPORT(sqInt) ioCreateClipboard(void) {
  function ioGetClipboardFormat (line 143) | EXPORT(sqInt) ioGetClipboardFormat(void) {
  function ioReadClipboardData (line 173) | EXPORT(sqInt) ioReadClipboardData(void) {
  function sqInt (line 196) | static sqInt msg(char * s) {
  function setInterpreter (line 203) | EXPORT(sqInt) setInterpreter(struct VirtualMachine* anInterpreter) {
  function sqInt (line 215) | static sqInt sqAssert(sqInt aBool) {

FILE: vm/src/from_squeak/Mac OS/plugins/ClipboardExtended/sqMacExtendedClipboard.c
  type VirtualMachine (line 21) | struct VirtualMachine
  function sqPasteboardClear (line 23) | void sqPasteboardClear( PasteboardRef inPasteboard )
  function sqPasteboardGetItemCount (line 28) | int sqPasteboardGetItemCount (	PasteboardRef inPasteboard )
  function sqPasteboardCopyItemFlavorsitemNumber (line 37) | int sqPasteboardCopyItemFlavorsitemNumber ( PasteboardRef inPasteboard, ...
  function PasteboardRef (line 79) | PasteboardRef sqCreateClipboard( void )
  function sqPasteboardPutItemFlavordatalengthformatTypeformatLength (line 91) | void sqPasteboardPutItemFlavordatalengthformatTypeformatLength ( Pastebo...
  function sqPasteboardCopyItemFlavorDataformatformatLength (line 109) | int sqPasteboardCopyItemFlavorDataformatformatLength ( PasteboardRef inP...

FILE: vm/src/from_squeak/Mac OS/plugins/CroquetPlugin/sqMacCroquet.c
  function sqInt (line 19) | sqInt ioGatherEntropy(char *buffer, sqInt bufSize)

FILE: vm/src/from_squeak/Mac OS/plugins/DropPlugin/sqMacDragDrop.c
  type HFSFlavorSqueak (line 76) | struct HFSFlavorSqueak {
  type HFSFlavorSqueak (line 82) | typedef struct HFSFlavorSqueak                HFSFlavorSqueak;
  type VirtualMachine (line 102) | struct VirtualMachine
  function dropInit (line 108) | int dropInit(void)
  function dropShutdown (line 163) | int dropShutdown() {
  function sqSecFileAccessCallback (line 179) | int sqSecFileAccessCallback(void *function) {
  function dropRequestFileHandle (line 198) | int dropRequestFileHandle(int dropIndex) {
  function pascal (line 229) | static pascal OSErr ApproveDragReference(DragReference theDragRef, Boole...
  function pascal (line 281) | pascal OSErr MyDragTrackingHandler(DragTrackingMessage message, WindowPt...
  function pascal (line 355) | static pascal OSErr SetDropFolder
  function pascal (line 405) | pascal OSErr MyDragReceiveHandler(WindowPtr theWindow, void *refcon, Dra...
  function sqSetNumberOfDropFiles (line 523) | void sqSetNumberOfDropFiles(int numberOfFiles) {
  function sqSetFileInformation (line 538) | void sqSetFileInformation(int dropIndex, void *dropFile) {

FILE: vm/src/from_squeak/Mac OS/plugins/ExuperyPlugin/sqOSXExuperyPlugin.c
  function ioMapCodeCache (line 7) | int ioMapCodeCache(int size) {

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/C Headers/DirectoryCopy.h
  type pascal (line 48) | typedef	pascal	Boolean	(*CopyErrProcPtr) (OSErr error,
  type pascal (line 86) | typedef	pascal	Boolean	(*CopyFilterProcPtr) (const CInfoPBRec * const cp...

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/C Headers/IterateDirectory.h
  type pascal (line 33) | typedef	pascal	void (*IterateFilterProcPtr) (const CInfoPBRec * const cp...

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/C Headers/MoreFilesExtras.h
  type UniversalFMPB (line 203) | typedef union UniversalFMPB UniversalFMPB;
  type UniversalFMPB (line 204) | typedef UniversalFMPB *UniversalFMPBPtr, **UniversalFMPBHandle;
  type UGEntry (line 211) | struct UGEntry
  type UGEntry (line 217) | typedef struct UGEntry UGEntry;
  type UGEntry (line 218) | typedef UGEntry *UGEntryPtr, **UGEntryHandle;
  type MyAFPVolMountInfo (line 228) | struct MyAFPVolMountInfo
  type MyAFPVolMountInfo (line 253) | typedef struct MyAFPVolMountInfo MyAFPVolMountInfo;
  type MyAFPVolMountInfo (line 254) | typedef MyAFPVolMountInfo *MyAFPVolMountInfoPtr, **MyAFPVolMountInfoHandle;
  type MyAFPXVolMountInfo (line 256) | struct MyAFPXVolMountInfo
  type MyAFPXVolMountInfo (line 287) | typedef struct MyAFPXVolMountInfo MyAFPXVolMountInfo;
  type MyAFPXVolMountInfo (line 288) | typedef MyAFPXVolMountInfo *MyAFPXVolMountInfoPtr, **MyAFPXVolMountInfoH...

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/DirectoryCopy.c
  type EnumerateGlobals (line 59) | struct EnumerateGlobals
  type EnumerateGlobals (line 75) | typedef struct EnumerateGlobals EnumerateGlobals;
  type EnumerateGlobals (line 76) | typedef EnumerateGlobals *EnumerateGlobalsPtr;
  type PreflightGlobals (line 86) | struct PreflightGlobals
  type PreflightGlobals (line 103) | typedef struct PreflightGlobals PreflightGlobals;
  type PreflightGlobals (line 104) | typedef PreflightGlobals *PreflightGlobalsPtr;
  function GetLevelSize (line 125) | static	void	GetLevelSize(long currentDirID,
  function OSErr (line 202) | static	OSErr	PreflightDirectoryCopySpace(short srcVRefNum,
  function CopyLevel (line 244) | static	void	CopyLevel(long sourceDirID,
  function pascal (line 401) | pascal	OSErr	FilteredDirectoryCopy(short srcVRefNum,
  function pascal (line 616) | pascal	OSErr	DirectoryCopy(short srcVRefNum,
  function pascal (line 637) | pascal	OSErr	FSpFilteredDirectoryCopy(const FSSpec *srcSpec,
  function pascal (line 655) | pascal	OSErr	FSpDirectoryCopy(const FSSpec *srcSpec,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/FSpCompat.c
  function pascal (line 217) | pascal	OSErr	FSMakeFSSpecCompat(short vRefNum,
  function pascal (line 252) | pascal	OSErr	FSpOpenDFCompat(const FSSpec *spec,
  function pascal (line 281) | pascal	OSErr	FSpOpenRFCompat(const FSSpec *spec,
  function pascal (line 310) | pascal	OSErr	FSpCreateCompat(const FSSpec *spec,
  function pascal (line 365) | pascal	OSErr	FSpDirCreateCompat(const FSSpec *spec,
  function pascal (line 411) | pascal	OSErr	FSpDeleteCompat(const FSSpec *spec)
  function pascal (line 433) | pascal	OSErr	FSpGetFInfoCompat(const FSSpec *spec,
  function pascal (line 460) | pascal	OSErr	FSpSetFInfoCompat(const FSSpec *spec,
  function pascal (line 492) | pascal	OSErr	FSpSetFLockCompat(const FSSpec *spec)
  function pascal (line 514) | pascal	OSErr	FSpRstFLockCompat(const FSSpec *spec)
  function pascal (line 536) | pascal	OSErr	FSpRenameCompat(const FSSpec *spec,
  function pascal (line 560) | pascal	OSErr	FSpCatMoveCompat(const FSSpec *source,
  function OSErr (line 592) | static	OSErr	GenerateUniqueName(short volume,
  function pascal (line 645) | pascal	OSErr	FSpExchangeFilesCompat(const FSSpec *source,
  function FSpOpenResFileCompat (line 859) | pascal	short	FSpOpenResFileCompat(const FSSpec *spec,
  function pascal (line 876) | pascal	void	FSpCreateResFileCompat(const FSSpec *spec,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/FileCopy.c
  function OSErr (line 119) | static	OSErr	GetDestinationDirInfo(short vRefNum,
  function OSErr (line 141) | static	OSErr	CheckForForks(short vRefNum,
  function OSErr (line 164) | static	OSErr	PreflightFileCopySpace(short srcVRefNum,
  function pascal (line 250) | pascal	OSErr	FileCopy(short srcVRefNum,
  function pascal (line 581) | pascal	OSErr	FSpFileCopy(const FSSpec *srcSpec,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/FullPath.c
  function pascal (line 82) | pascal	OSErr	GetFullPath(short vRefNum,
  function pascal (line 105) | pascal	OSErr	FSpGetFullPath(const FSSpec *spec,
  function pascal (line 228) | pascal OSErr FSpLocationFromFullPath(short fullPathLength,
  function pascal (line 260) | pascal OSErr LocationFromFullPath(short fullPathLength,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/IterateDirectory.c
  type IterateGlobals (line 39) | struct IterateGlobals
  type IterateGlobals (line 54) | typedef struct IterateGlobals IterateGlobals;
  type IterateGlobals (line 55) | typedef IterateGlobals *IterateGlobalsPtr;
  function IterateDirectoryLevel (line 70) | static	void	IterateDirectoryLevel(long dirID,
  function pascal (line 121) | pascal	OSErr	IterateDirectory(short vRefNum,
  function pascal (line 180) | pascal	OSErr	FSpIterateDirectory(const FSSpec *spec,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/MoreDesktopMgr.c
  type IDRec (line 87) | struct IDRec
  type IDRec (line 92) | typedef struct IDRec IDRec;
  type IDRec (line 93) | typedef	IDRec *IDRecPtr;
  type BundleType (line 95) | struct BundleType
  type BundleType (line 101) | typedef struct BundleType BundleType;
  type BundleType (line 102) | typedef BundleType *BundleTypePtr;
  type BNDLRec (line 104) | struct BNDLRec
  type BNDLRec (line 111) | typedef struct BNDLRec BNDLRec;
  type BNDLRec (line 112) | typedef BNDLRec **BNDLRecHandle;
  type FREFRec (line 114) | struct FREFRec
  type FREFRec (line 120) | typedef struct FREFRec FREFRec;
  type FREFRec (line 121) | typedef FREFRec **FREFRecHandle;
  type APPLRec (line 123) | struct APPLRec
  type APPLRec (line 129) | typedef struct APPLRec APPLRec;
  type APPLRec (line 130) | typedef APPLRec *APPLRecPtr;
  function OSErr (line 191) | static	OSErr	GetDesktopFileName(short vRefNum,
  function pascal (line 225) | pascal	OSErr	DTOpen(ConstStr255Param volName,
  function OSErr (line 273) | static	OSErr	GetAPPLFromDesktopFile(ConstStr255Param volName,
  function pascal (line 379) | pascal	OSErr	DTXGetAPPL(ConstStr255Param volName,
  function pascal (line 509) | pascal	OSErr	FSpDTXGetAPPL(ConstStr255Param volName,
  function pascal (line 521) | pascal	OSErr	DTGetAPPL(ConstStr255Param volName,
  function pascal (line 535) | pascal	OSErr	FSpDTGetAPPL(ConstStr255Param volName,
  function OSErr (line 553) | static	OSErr	FindBundleGivenCreator(OSType creator,
  function OSErr (line 603) | static	OSErr	FindTypeInBundle(OSType typeToFind,
  function OSErr (line 648) | static	OSErr	GetLocalIDFromFREF(BundleTypePtr theBundleType,
  function OSErr (line 693) | static	OSErr	GetIconRsrcIDFromLocalID(BundleTypePtr theBundleType,
  function OSType (line 731) | static	OSType	DTIconToResIcon(short iconType)
  function OSErr (line 780) | static	OSErr	GetIconFromDesktopFile(ConstStr255Param volName,
  function pascal (line 899) | pascal	OSErr	DTGetIcon(ConstStr255Param volName,
  function pascal (line 998) | pascal	OSErr	DTSetComment(short vRefNum,
  function pascal (line 1032) | pascal	OSErr	FSpDTSetComment(const FSSpec *spec,
  function OSErr (line 1046) | static	OSErr	GetCommentID(short vRefNum,
  function OSErr (line 1067) | static	OSErr	GetCommentFromDesktopFile(short vRefNum,
  function pascal (line 1148) | pascal	OSErr	DTGetComment(short vRefNum,
  function pascal (line 1217) | pascal	OSErr	FSpDTGetComment(const FSSpec *spec,
  function pascal (line 1225) | pascal	OSErr	DTCopyComment(short srcVRefNum,
  function pascal (line 1246) | pascal	OSErr	FSpDTCopyComment(const FSSpec *srcSpec,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/MoreFiles.c
  function pascal (line 33) | pascal	OSErr	HGetVolParms(ConstStr255Param volName,
  function pascal (line 55) | pascal	OSErr	HCreateMinimum(short vRefNum,
  function pascal (line 70) | pascal	OSErr	FSpCreateMinimum(const FSSpec *spec)
  function pascal (line 77) | pascal	OSErr	ExchangeFiles(short vRefNum,
  function pascal (line 95) | pascal	OSErr	ResolveFileIDRef(ConstStr255Param volName,
  function pascal (line 127) | pascal	OSErr	FSpResolveFileIDRef(ConstStr255Param volName,
  function pascal (line 144) | pascal	OSErr	CreateFileIDRef(short vRefNum,
  function pascal (line 165) | pascal	OSErr	FSpCreateFileIDRef(const FSSpec *spec,
  function pascal (line 173) | pascal	OSErr	DeleteFileIDRef(ConstStr255Param volName,
  function pascal (line 187) | pascal	OSErr	FlushFile(short refNum)
  function pascal (line 197) | pascal	OSErr	LockRange(short refNum,
  function pascal (line 212) | pascal	OSErr	UnlockRange(short refNum,
  function pascal (line 227) | pascal	OSErr	GetForeignPrivs(short vRefNum,
  function pascal (line 256) | pascal	OSErr	FSpGetForeignPrivs(const FSSpec *spec,
  function pascal (line 272) | pascal	OSErr	SetForeignPrivs(short vRefNum,
  function pascal (line 304) | pascal	OSErr	FSpSetForeignPrivs(const FSSpec *spec,
  function pascal (line 320) | pascal	OSErr	HGetLogInInfo(ConstStr255Param volName,
  function pascal (line 341) | pascal	OSErr	HGetDirAccess(short vRefNum,
  function pascal (line 366) | pascal	OSErr	FSpGetDirAccess(const FSSpec *spec,
  function pascal (line 377) | pascal	OSErr	HSetDirAccess(short vRefNum,
  function pascal (line 397) | pascal	OSErr	FSpSetDirAccess(const FSSpec *spec,
  function pascal (line 408) | pascal	OSErr	HMapID(ConstStr255Param volName,
  function pascal (line 426) | pascal	OSErr	HMapName(ConstStr255Param volName,
  function pascal (line 449) | pascal	OSErr	HCopyFile(short srcVRefNum,
  function pascal (line 471) | pascal	OSErr	FSpCopyFile(const FSSpec *srcSpec,
  function pascal (line 482) | pascal	OSErr	HMoveRename(short vRefNum,
  function pascal (line 502) | pascal	OSErr	FSpMoveRename(const FSSpec *srcSpec,
  function pascal (line 523) | pascal	OSErr	GetVolMountInfoSize(ConstStr255Param volName,
  function pascal (line 537) | pascal	OSErr	GetVolMountInfo(ConstStr255Param volName,
  function pascal (line 551) | pascal	OSErr	VolumeMount(const void *volMountInfo,
  function pascal (line 568) | pascal	OSErr	Share(short vRefNum,
  function pascal (line 582) | pascal	OSErr	FSpShare(const FSSpec *spec)
  function pascal (line 589) | pascal	OSErr	Unshare(short vRefNum,
  function pascal (line 603) | pascal	OSErr	FSpUnshare(const FSSpec *spec)
  function pascal (line 610) | pascal	OSErr	GetUGEntry(short objType,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/MoreFilesExtras.c
  type DeleteEnumGlobals (line 57) | struct DeleteEnumGlobals
  type DeleteEnumGlobals (line 67) | typedef struct DeleteEnumGlobals DeleteEnumGlobals;
  type DeleteEnumGlobals (line 68) | typedef DeleteEnumGlobals *DeleteEnumGlobalsPtr;
  function pascal (line 95) | static pascal OSErr PBXGetVolInfoSyncGlue(XVolumeParamPtr paramBlock)
  function pascal (line 129) | static pascal OSErr CallPBXGetVolInfoSync(XVolumeParamPtr paramBlock)
  function pascal (line 164) | pascal	void	TruncPString(StringPtr destination,
  function pascal (line 205) | pascal	Ptr	GetTempBuffer(long buffReqSize,
  function pascal (line 276) | pascal	OSErr	GetVolumeInfoNoName(ConstStr255Param pathname,
  function pascal (line 318) | pascal	OSErr	XGetVolumeInfoNoName(ConstStr255Param pathname,
  function pascal (line 376) | pascal	OSErr GetCatInfoNoName(short vRefNum,
  function pascal (line 405) | pascal	OSErr	DetermineVRefNum(ConstStr255Param pathname,
  function pascal (line 422) | pascal	OSErr	HGetVInfo(short volReference,
  function pascal (line 463) | pascal	OSErr	XGetVInfo(short volReference,
  function pascal (line 568) | pascal	OSErr	CheckVolLock(ConstStr255Param pathname,
  function pascal (line 604) | pascal	OSErr GetDriverName(short driverRefNum,
  function pascal (line 638) | pascal	OSErr	FindDrive(ConstStr255Param pathname,
  function pascal (line 704) | pascal	OSErr	GetDiskBlocks(ConstStr255Param pathname,
  function pascal (line 842) | pascal	OSErr	GetVolState(ConstStr255Param pathname,
  function pascal (line 946) | pascal	OSErr	GetVolFileSystemID(ConstStr255Param pathname,
  function pascal (line 971) | pascal	OSErr	UnmountAndEject(ConstStr255Param pathname,
  function pascal (line 1060) | pascal	OSErr	OnLine(FSSpecPtr volumes,
  function pascal (line 1096) | pascal	OSErr SetDefault(short newVRefNum,
  function pascal (line 1116) | pascal	OSErr RestoreDefault(short oldVRefNum,
  function pascal (line 1156) | pascal	OSErr GetDInfo(short vRefNum,
  function pascal (line 1184) | pascal	OSErr FSpGetDInfo(const FSSpec *spec,
  function pascal (line 1192) | pascal	OSErr SetDInfo(short vRefNum,
  function pascal (line 1244) | pascal	OSErr FSpSetDInfo(const FSSpec *spec,
  function pascal (line 1252) | pascal	OSErr	GetDirectoryID(short vRefNum,
  function pascal (line 1280) | pascal	OSErr	FSpGetDirectoryID(const FSSpec *spec,
  function pascal (line 1290) | pascal	OSErr	GetDirName(short vRefNum,
  function pascal (line 1315) | pascal	OSErr	GetIOACUser(short vRefNum,
  function pascal (line 1348) | pascal	OSErr	FSpGetIOACUser(const FSSpec *spec,
  function pascal (line 1356) | pascal	OSErr	GetParentID(short vRefNum,
  function pascal (line 1442) | pascal	OSErr	GetFilenameFromPathname(ConstStr255Param pathname,
  function pascal (line 1518) | pascal	OSErr	GetObjectLocation(short vRefNum,
  function pascal (line 1667) | pascal	OSErr	GetDirItems(short vRefNum,
  function DeleteLevel (line 1755) | static	void	DeleteLevel(long dirToDelete,
  function pascal (line 1800) | pascal	OSErr	DeleteDirectoryContents(short vRefNum,
  function pascal (line 1837) | pascal	OSErr	DeleteDirectory(short vRefNum,
  function pascal (line 1860) | pascal	OSErr	CheckObjectLock(short vRefNum,
  function pascal (line 1882) | pascal	OSErr	FSpCheckObjectLock(const FSSpec *spec)
  function pascal (line 1889) | pascal	OSErr	GetFileSize(short vRefNum,
  function pascal (line 1915) | pascal	OSErr	FSpGetFileSize(const FSSpec *spec,
  function pascal (line 1924) | pascal	OSErr	BumpDate(short vRefNum,
  function pascal (line 1971) | pascal	OSErr	FSpBumpDate(const FSSpec *spec)
  function pascal (line 1978) | pascal	OSErr	ChangeCreatorType(short vRefNum,
  function pascal (line 2039) | pascal	OSErr	FSpChangeCreatorType(const FSSpec *spec,
  function pascal (line 2048) | pascal	OSErr	ChangeFDFlags(short vRefNum,
  function pascal (line 2120) | pascal	OSErr	FSpChangeFDFlags(const FSSpec *spec,
  function pascal (line 2129) | pascal	OSErr	SetIsInvisible(short vRefNum,
  function pascal (line 2139) | pascal	OSErr	FSpSetIsInvisible(const FSSpec *spec)
  function pascal (line 2147) | pascal	OSErr	ClearIsInvisible(short vRefNum,
  function pascal (line 2157) | pascal	OSErr	FSpClearIsInvisible(const FSSpec *spec)
  function pascal (line 2165) | pascal	OSErr	SetNameLocked(short vRefNum,
  function pascal (line 2175) | pascal	OSErr	FSpSetNameLocked(const FSSpec *spec)
  function pascal (line 2183) | pascal	OSErr	ClearNameLocked(short vRefNum,
  function pascal (line 2193) | pascal	OSErr	FSpClearNameLocked(const FSSpec *spec)
  function pascal (line 2201) | pascal	OSErr	SetIsStationery(short vRefNum,
  function pascal (line 2211) | pascal	OSErr	FSpSetIsStationery(const FSSpec *spec)
  function pascal (line 2219) | pascal	OSErr	ClearIsStationery(short vRefNum,
  function pascal (line 2229) | pascal	OSErr	FSpClearIsStationery(const FSSpec *spec)
  function pascal (line 2237) | pascal	OSErr	SetHasCustomIcon(short vRefNum,
  function pascal (line 2247) | pascal	OSErr	FSpSetHasCustomIcon(const FSSpec *spec)
  function pascal (line 2255) | pascal	OSErr	ClearHasCustomIcon(short vRefNum,
  function pascal (line 2265) | pascal	OSErr	FSpClearHasCustomIcon(const FSSpec *spec)
  function pascal (line 2273) | pascal	OSErr	ClearHasBeenInited(short vRefNum,
  function pascal (line 2283) | pascal	OSErr	FSpClearHasBeenInited(const FSSpec *spec)
  function pascal (line 2291) | pascal	OSErr	CopyFileMgrAttributes(short srcVRefNum,
  function pascal (line 2351) | pascal	OSErr	FSpCopyFileMgrAttributes(const FSSpec *srcSpec,
  function pascal (line 2362) | pascal	OSErr	HOpenAware(short vRefNum,
  function pascal (line 2434) | pascal	OSErr	FSpOpenAware(const FSSpec *spec,
  function pascal (line 2443) | pascal	OSErr	HOpenRFAware(short vRefNum,
  function pascal (line 2514) | pascal	OSErr	FSpOpenRFAware(const FSSpec *spec,
  function pascal (line 2523) | pascal	OSErr	FSReadNoCache(short refNum,
  function pascal (line 2542) | pascal	OSErr	FSWriteNoCache(short refNum,
  function Boolean (line 2564) | static	Boolean EqualMemory(const void *buffer1, const void *buffer2, uns...
  function OSErr (line 2600) | static	OSErr	FSReadVerify(short refNum,
  function pascal (line 2619) | pascal	OSErr	FSWriteVerify(short refNum,
  function pascal (line 2716) | pascal	OSErr	CopyFork(short srcRefNum,
  function pascal (line 2792) | pascal	OSErr	GetFileLocation(short refNum,
  function pascal (line 2815) | pascal	OSErr	FSpGetFileLocation(short refNum,
  function pascal (line 2823) | pascal	OSErr	CopyDirectoryAccess(short srcVRefNum,
  function pascal (line 2880) | pascal	OSErr	FSpCopyDirectoryAccess(const FSSpec *srcSpec,
  function pascal (line 2889) | pascal	OSErr	HMoveRenameCompat(short vRefNum,
  function pascal (line 2999) | pascal	OSErr	FSpMoveRenameCompat(const FSSpec *srcSpec,
  function pascal (line 3012) | pascal	OSErr	BuildAFPVolMountInfo(short flags,
  function pascal (line 3066) | pascal	OSErr	RetrieveAFPVolMountInfo(AFPVolMountInfoPtr afpInfoPtr,
  function pascal (line 3119) | pascal	OSErr	BuildAFPXVolMountInfo(short flags,
  function pascal (line 3198) | pascal	OSErr	RetrieveAFPXVolMountInfo(AFPXVolMountInfoPtr afpXInfoPtr,
  function pascal (line 3307) | pascal	OSErr	GetUGEntries(short objType,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/MoreFiles 1.5/Sources/Search.c
  type LevelRec (line 55) | struct	LevelRec
  type LevelRec (line 61) | typedef struct LevelRec LevelRec;
  type LevelRec (line 62) | typedef LevelRec *LevelRecPtr, **LevelRecHandle;
  type SearchPositionRec (line 72) | struct SearchPositionRec
  type SearchPositionRec (line 82) | typedef struct SearchPositionRec SearchPositionRec;
  type SearchPositionRec (line 83) | typedef SearchPositionRec *SearchPositionRecPtr;
  type ExtendedTMTask (line 92) | struct ExtendedTMTask
  type ExtendedTMTask (line 101) | typedef struct ExtendedTMTask ExtendedTMTask;
  type ExtendedTMTask (line 102) | typedef ExtendedTMTask *ExtendedTMTaskPtr;
  function OSErr (line 164) | static	OSErr	CheckVol(ConstStr255Param pathname,
  function OSErr (line 197) | static	OSErr	CheckStack(unsigned short stackDepth,
  function OSErr (line 227) | static	OSErr	VerifyUserPB(CSParamPtr userPB,
  function Boolean (line 350) | static	Boolean	IsSubString(ConstStr255Param aStringPtr,
  function Boolean (line 414) | static	Boolean	CompareMasked(const long *data1,
  function CheckForMatches (line 445) | static	void	CheckForMatches(CInfoPBPtr cPB,
  function pascal (line 683) | static	pascal	void	TimeOutTask(TMTaskPtr tmTaskPtr)
  function TimeOutTask (line 693) | static	void	TimeOutTask(void)
  function GetDirModDate (line 711) | static	long	GetDirModDate(short vRefNum,
  function pascal (line 739) | pascal	OSErr	IndexedSearch(CSParamPtr pb,
  function pascal (line 1018) | pascal OSErr PBCatSearchSyncCompat(CSParamPtr paramBlock)
  function pascal (line 1085) | pascal	OSErr	NameFileSearch(ConstStr255Param volName,
  function pascal (line 1171) | pascal	OSErr	CreatorTypeFileSearch(ConstStr255Param volName,

FILE: vm/src/from_squeak/Mac OS/plugins/FileCopyPlugin/sqMacFileCopy.c
  function sqCopyFilesizetosize (line 13) | int sqCopyFilesizetosize(char *srcNameIndex, int srcNameSize, char *dstN...
  function sqCopyDirectorysizetosize (line 42) | int sqCopyDirectorysizetosize(char *srcNameIndex, int srcNameSize, char ...
  function pascal (line 81) | pascal Boolean handleDupError(OSErr error,

FILE: vm/src/from_squeak/Mac OS/plugins/FilePlugin/sqMacDirectory.c
  function convertToSqueakTime (line 77) | int convertToSqueakTime(int macTime) {
  function dir_Create (line 82) | int dir_Create(char *pathString, int pathStringLength) {
  function dir_Delete (line 136) | int dir_Delete(char *pathString, int pathStringLength) {
  function dir_Create (line 166) | int dir_Create(char *pathString, int pathStringLength) {
  function dir_Delete (line 177) | int dir_Delete(char *pathString, int pathStringLength) {
  function dir_Delimitor (line 189) | int dir_Delimitor(void) {
  function dir_Lookup (line 195) | int dir_Lookup(char *pathString, int pathStringLength, int index,
  function dir_Lookup (line 310) | int dir_Lookup(char *pathString, int pathStringLength, int index,
  function OSErr (line 378) | OSErr getSpecAndFInfo(char *filename, int filenameSize,FSSpec *spec,FInf...
  function dir_SetMacFileTypeAndCreator (line 390) | int dir_SetMacFileTypeAndCreator(char *filename, int filenameSize, char ...
  function dir_GetMacFileTypeAndCreator (line 406) | int dir_GetMacFileTypeAndCreator(char *filename, int filenameSize, char ...
  function equalsLastPath (line 423) | int equalsLastPath(char *pathString, int pathStringLength) {
  function recordPath (line 444) | int recordPath(char *pathString, int pathStringLength, FSSpec *spec) {
  function ftruncate (line 462) | int ftruncate(short int file,int offset)
  function fflush (line 481) | int fflush(FILE * file)
  function set_file_type (line 540) | static void set_file_type(FSSpec * spec, int binary_file)
  function __open_file (line 564) | int	__open_file(const char * name, __file_modes mode, __file_handle * ha...

FILE: vm/src/from_squeak/Mac OS/plugins/FilePlugin/sqMacUnixFileInterface.c
  function sqInt (line 119) | sqInt dir_Create(char *pathString, sqInt pathStringLength)
  function sqInt (line 132) | sqInt dir_Delete(char *pathString, sqInt pathStringLength)
  function sqInt (line 147) | sqInt dir_Delimitor(void)
  function maybeOpenDir (line 153) | static int maybeOpenDir(char *unixPath)
  function sqInt (line 175) | sqInt dir_Lookup(char *pathString, sqInt pathStringLength, sqInt index,
  function sqInt (line 283) | sqInt dir_EntryLookup(char *pathString, sqInt pathStringLength, char* na...
  function sqInt (line 353) | sqInt sqGetFilenameFromString(char * aCharBuffer, char * aFilenameString...
  function sqFilenameFromStringOpen (line 358) | void		sqFilenameFromStringOpen(char *buffer,sqInt fileIndex, long fileLe...
  function sqFilenameFromString (line 362) | void		sqFilenameFromString(char *buffer,sqInt fileIndex, long fileLength) {
  function sqInt (line 366) | sqInt	ioFilenamefromStringofLengthresolveAliasesRetry(char* dst, char* s...
  function CFURLRef (line 403) | static CFURLRef makeFileSystemURLFromString(char *pathString,int length,...
  function OSErr (line 421) | OSErr getFSRef(char *pathString,FSRef *theFSRef,CFStringEncoding encoding)
  function getLastPathComponentInCurrentEncoding (line 441) | int getLastPathComponentInCurrentEncoding(char *pathString,char * lastPa...
  function PathToFileViaFSRef (line 463) | void PathToFileViaFSRef(char *pathName, int pathNameMax, FSRef *theFSRef...
  function OSErr (line 492) | static OSErr getFInfo(char *filename,FSCatalogInfo *catInfo,CFStringEnco...
  function OSErr (line 503) | OSErr getFInfoViaFSRef(FSRef *theFSRef,	FInfo *finderInfo) {
  function dir_SetMacFileTypeAndCreator (line 512) | int dir_SetMacFileTypeAndCreator(char *filename, sqInt filenameSize, cha...
  function dir_GetMacFileTypeAndCreator (line 541) | int dir_GetMacFileTypeAndCreator(char *filename, sqInt filenameSize, cha...
  function OSStatus (line 564) | OSStatus SetVMPathFromApplicationDirectory() {
  function OSErr (line 589) | OSErr squeakFindImage(char* pathName)
  function pascal (line 651) | pascal Boolean findImageFilterProc(AEDesc* theItem, void* info,
  function wanderDownPath (line 686) | int wanderDownPath(char *src,int bytes,char *parts,Boolean resolveLastAl...
  function sq2uxPath (line 731) | int sq2uxPath(char *from, int fromLen, char *to, int toLen, int term)
  function ux2sqPath (line 738) | int ux2sqPath(char *from, int fromLen, char *to, int toLen, int term)
  function convertCopy (line 747) | static int convertCopy(char *from, int fromLen, char *to, int toLen, int...
  function convertChars (line 755) | int convertChars(char *from, int fromLen, void *fromCode, char *to, int ...

FILE: vm/src/from_squeak/Mac OS/plugins/HostWindowPlugin/sqMacHostWindow.c
  type VirtualMachine (line 16) | struct VirtualMachine
  function createWindowWidthheightoriginXyattrlength (line 19) | int createWindowWidthheightoriginXyattrlength(int w,int h,int x,int y,  ...
  function setWindowTrackingRgn (line 47) | void setWindowTrackingRgn(int windowIndex) {
  function closeWindow (line 82) | int closeWindow(int windowIndex) {
  function ioPositionOfWindow (line 103) | int ioPositionOfWindow(wIndexType windowIndex)
  function ioPositionOfWindowSetxy (line 114) | int ioPositionOfWindowSetxy(wIndexType windowIndex, int x, int y)
  function ioSizeOfWindow (line 139) | int ioSizeOfWindow(wIndexType windowIndex)
  function ioSizeOfWindowSetxy (line 154) | int ioSizeOfWindowSetxy(wIndexType windowIndex, int x, int y)
  function ioSetTitleOfWindow (line 179) | int ioSetTitleOfWindow(int windowIndex, char * newTitle, int sizeOfTitle) {
  function ioCloseAllWindows (line 195) | int ioCloseAllWindows(void) {
  function windowDescriptorBlock (line 211) | windowDescriptorBlock *windowBlockFromIndex(int windowIndex) {
  function windowDescriptorBlock (line 221) | windowDescriptorBlock *windowBlockFromHandle(wHandleType windowHandle) {
  function wHandleType (line 232) | wHandleType windowHandleFromIndex(int windowIndex)  {
  function windowIndexFromHandle (line 242) | int windowIndexFromHandle(wHandleType windowHandle) {
  function windowIndexFromBlock (line 252) | int windowIndexFromBlock( windowDescriptorBlock * thisWindow) {
  function windowDescriptorBlock (line 264) | windowDescriptorBlock *AddWindowBlock(void) {
  function RemoveWindowBlock (line 289) | int RemoveWindowBlock(windowDescriptorBlock * thisWindow) {
  function getCurrentIndexInUse (line 310) | int getCurrentIndexInUse(void) {

FILE: vm/src/from_squeak/Mac OS/plugins/HostWindowPlugin/sqMacHostWindow.h
  type windowDescriptorBlock (line 19) | typedef struct windowDescriptorBlock {

FILE: vm/src/from_squeak/Mac OS/plugins/InternetConfigPlugin/sqMacInternetConfiguration.c
  function sqInternetConfigurationInit (line 27) | int sqInternetConfigurationInit(void) {
  function sqInternetConfigurationShutdown (line 47) | int sqInternetConfigurationShutdown(void) {
  function sqInternetConfigurationGetStringKeyedBykeySizeinto (line 55) | int sqInternetConfigurationGetStringKeyedBykeySizeinto(char *aKey,int ke...
  function sqInternetGetMacintoshFileTypeAndCreatorFromkeySizeinto (line 121) | void sqInternetGetMacintoshFileTypeAndCreatorFromkeySizeinto(char * aFil...
  function OSType (line 152) | static OSType GetApplicationSignature() {
  function convertPassword (line 173) | void convertPassword(unsigned char *buffer) {
  function convertPSTRToString (line 182) | void convertPSTRToString(unsigned char*pstr,char *target) {

FILE: vm/src/from_squeak/Mac OS/plugins/JoystickTabletPlugin/HID_Error_Handler.c
  function HIDReportErrorNum (line 72) | void HIDReportErrorNum (char * strError, long numError)
  function HIDReportError (line 90) | void HIDReportError (char * strError)

FILE: vm/src/from_squeak/Mac OS/plugins/JoystickTabletPlugin/HID_Name_Lookup.c
  function CFPropertyListRef (line 53) | static CFPropertyListRef xml_load(const CFStringRef pResourceName,const ...
  function Boolean (line 81) | static Boolean xml_search_cookie(const long pVendorID, const long pProdu...
  function Boolean (line 154) | static Boolean xml_search_usage(const long pVendorID, const long pProduc...
  function Boolean (line 228) | Boolean HIDGetElementNameFromVendorProductCookie (const long pVendorID, ...
  function Boolean (line 333) | Boolean HIDGetElementNameFromVendorProductUsage (const long pVendorID, c...

FILE: vm/src/from_squeak/Mac OS/plugins/JoystickTabletPlugin/HID_Queue_Utilities.c
  function IOReturn (line 70) | static IOReturn hid_CreateQueue (pRecDevice pDevice)
  function hid_IsDeviceQueueEmpty (line 106) | static unsigned char hid_IsDeviceQueueEmpty (pRecDevice pDevice)
  function IOReturn (line 132) | static IOReturn hid_DisposeReleaseQueue (pRecDevice pDevice)
  function HIDQueueElement (line 170) | unsigned long  HIDQueueElement (pRecDevice pDevice, pRecElement pElement)
  function HIDQueueDevice (line 223) | unsigned long  HIDQueueDevice (pRecDevice pDevice)
  function HIDDequeueElement (line 288) | unsigned long  HIDDequeueElement (pRecDevice pDevice, pRecElement pElement)
  function HIDDequeueDevice (line 342) | unsigned long  HIDDequeueDevice (pRecDevice pDevice)
  function HIDReleaseAllDeviceQueues (line 390) | unsigned long HIDReleaseAllDeviceQueues (void)
  function HIDCloseReleaseInterface (line 411) | unsigned long HIDCloseReleaseInterface (pRecDevice pDevice)
  function HIDGetEvent (line 441) | unsigned char HIDGetEvent (pRecDevice pDevice, void * pHIDEvent)
  function HIDGetElementValue (line 471) | long HIDGetElementValue (pRecDevice pDevice, pRecElement pElement)
  function HIDSetElementValue (line 526) | long HIDSetElementValue (pRecDevice pDevice, pRecElement pElement,void* ...
  function HIDSetQueueCallback (line 550) | long HIDSetQueueCallback (pRecDevice pDevice, IOHIDCallbackFunction call...
  function HIDGetReport (line 590) | long HIDGetReport (pRecDevice pDevice,const IOHIDReportType reportType, ...
  function HIDSetReport (line 614) | long HIDSetReport (pRecDevice pDevice,const IOHIDReportType reportType, ...

FILE: vm/src/from_squeak/Mac OS/plugins/JoystickTabletPlugin/HID_Utilities.c
  function hid_GetElementInfo (line 85) | static void hid_GetElementInfo (CFTypeRef refElement, pRecElement pElement)
  function hid_AddElement (line 203) | static void hid_AddElement (CFTypeRef refElement, pRecElement * ppElemen...
  function hid_GetElementsCFArrayHandler (line 371) | static void hid_GetElementsCFArrayHandler (const void * value, void * pa...
  function hid_GetElements (line 380) | static void hid_GetElements (CFTypeRef refElementCurrent, pRecElement *p...
  function hid_GetCollectionElements (line 395) | static void hid_GetCollectionElements (CFMutableDictionaryRef deviceProp...
  function hid_TopLevelElementHandler (line 407) | static void hid_TopLevelElementHandler (const void * value, void * param...
  function hid_GetDeviceInfo (line 425) | static void hid_GetDeviceInfo (io_object_t hidDevice, CFMutableDictionar...
  function pRecDevice (line 553) | static pRecDevice* hid_AddDevice (pRecDevice *ppListDeviceHead, pRecDevi...
  function pRecDevice (line 579) | static pRecDevice hid_BuildDevice (io_object_t hidDevice)
  function hid_DeviceNotification (line 626) | static void hid_DeviceNotification( void *refCon,
  function hid_RemovalCallbackFunction (line 644) | static void hid_RemovalCallbackFunction(void * target, IOReturn result, ...
  function USE_NOTIFICATIONS (line 649) | USE_NOTIFICATIONS
  function hid_DisposeDeviceElements (line 748) | static void hid_DisposeDeviceElements (pRecElement pElement)
  function pRecDevice (line 764) | static pRecDevice hid_DisposeDevice (pRecDevice pDevice)
  function UInt32 (line 832) | static UInt32 hid_CountCurrentDevices (void)
  function Boolean (line 846) | static Boolean hid_MatchElementTypeMask (IOHIDElementType type, HIDEleme...
  function pRecElement (line 865) | static pRecElement hid_GetDeviceElement (pRecElement pElement, HIDElemen...
  function CFPropertyListRef (line 882) | static CFPropertyListRef xml_load_usage_strings(void)
  function Boolean (line 911) | static Boolean xml_GetUsageName(const long valueUsagePage, const long va...
  function HIDCreateOpenDeviceInterface (line 980) | unsigned long HIDCreateOpenDeviceInterface (UInt32 hidDevice, pRecDevice...
  function Boolean (line 1019) | Boolean HIDBuildDeviceList (UInt32 usagePage, UInt32 usage)
  function HIDReleaseDeviceList (line 1120) | void HIDReleaseDeviceList (void)
  function Boolean (line 1130) | Boolean HIDHaveDeviceList (void)
  function UInt32 (line 1141) | UInt32 HIDCountDevices (void)
  function UInt32 (line 1152) | UInt32 HIDCountDeviceElements (pRecDevice pDevice, HIDElementTypeMask ty...
  function pRecDevice (line 1173) | pRecDevice HIDGetFirstDevice (void)
  function pRecDevice (line 1182) | pRecDevice HIDGetNextDevice (pRecDevice pDevice)
  function pRecElement (line 1193) | pRecElement HIDGetFirstDeviceElement (pRecDevice pDevice, HIDElementType...
  function pRecElement (line 1212) | pRecElement HIDGetNextDeviceElement (pRecElement pElement, HIDElementTyp...
  function pRecElement (line 1264) | pRecElement HIDGetPreviousDeviceElement (pRecElement pElement, HIDElemen...
  function HIDGetTypeName (line 1280) | void HIDGetTypeName (IOHIDElementType theType, char * cstrName)
  function HIDGetUsageName (line 1315) | void HIDGetUsageName (const long valueUsagePage, const long valueUsage, ...
  function SInt32 (line 1858) | SInt32 HIDCalibrateValue (SInt32 value, pRecElement pElement)
  function SInt32 (line 1877) | SInt32 HIDScaleValue (SInt32 value, pRecElement pElement)
  function HIDElementTypeMask (line 1889) | HIDElementTypeMask HIDConvertElementTypeToMask (const long type)
  function Boolean (line 1917) | Boolean HIDFindDevice(const pRecDevice pSearchDevice, pRecDevice *ppFoun...
  function Boolean (line 1973) | Boolean HIDFindActionDeviceAndElement(const pRecDevice pSearchDevice, co...
  function Boolean (line 2058) | Boolean HIDFindSubElement(const pRecElement pStartElement, const pRecEle...
  function HIDPrintElement (line 2118) | int HIDPrintElement(const pRecElement pElement)
  function Boolean (line 2172) | Boolean HIDIsValidDevice(const pRecDevice pSearchDevice)
  function Boolean (line 2186) | Boolean HIDIsValidElement(const pRecDevice pSearchDevice, const pRecElem...

FILE: vm/src/from_squeak/Mac OS/plugins/JoystickTabletPlugin/HID_Utilities.h
  type HIDElementTypeMask (line 73) | typedef enum HIDElementTypeMask
  type recElement (line 83) | struct recElement
  type recElement (line 114) | typedef struct recElement recElement;
  type recElement (line 115) | typedef recElement* pRecElement;
  type recDevice (line 117) | struct recDevice
  type recDevice (line 148) | typedef struct recDevice recDevice;
  type recDevice (line 149) | typedef recDevice* pRecDevice;

FILE: vm/src/from_squeak/Mac OS/plugins/JoystickTabletPlugin/HID_Utilities_External.h
  type HIDElementTypeMask (line 76) | typedef enum HIDElementTypeMask
  type recElement (line 86) | struct recElement
  type recElement (line 118) | typedef struct recElement recElement;
  type recElement (line 119) | typedef recElement* pRecElement;
  type recDevice (line 121) | struct recDevice
  type recDevice (line 152) | typedef struct recDevice recDevice;
  type recDevice (line 153) | typedef recDevice* pRecDevice;
  type recSaveHID (line 378) | typedef struct recSaveHID

FILE: vm/src/from_squeak/Mac OS/plugins/JoystickTabletPlugin/sqMacJoystickAndTablet.c
  function joystickInit (line 21) | int joystickInit(void)
  function joystickShutdown (line 27) | int joystickShutdown()
  function pRecDevice (line 33) | static pRecDevice getJoystickDevice(int stickIndex)
  function getScaledAxisValue (line 51) | static int getScaledAxisValue(pRecDevice device, pRecElement element, in...
  function joystickRead (line 59) | int joystickRead(int stickIndex)
  type TransducerRec (line 119) | typedef struct {
  type TabletRec (line 143) | typedef struct {
  function tabletInit (line 166) | int tabletInit(void) {
  function tabletGetParameters (line 173) | int tabletGetParameters(int cursorIndex, int result[]) {
  function tabletRead (line 215) | int tabletRead(int cursorIndex, int result[]) {
  function tabletResultSize (line 250) | int tabletResultSize(void) {

FILE: vm/src/from_squeak/Mac OS/plugins/LocalePlugin/sqMacLocaleCarbon.c
  type lconv (line 13) | struct lconv
  function sqInt (line 15) | sqInt sqLocInitialize(void) {
  function sqLocGetCountryInto (line 25) | void	sqLocGetCountryInto(char * str) {
  function sqLocGetLanguageInto (line 41) | void	sqLocGetLanguageInto(char * str) {
  function sqInt (line 57) | sqInt	sqLocCurrencyNotation(void) {
  function sqInt (line 62) | sqInt	sqLocCurrencySymbolSize(void) {
  function sqLocGetCurrencySymbolInto (line 66) | void	sqLocGetCurrencySymbolInto(char * str) {
  function sqInt (line 75) | sqInt	sqLocMeasurementMetric(void) {
  function sqLocGetDigitGroupingSymbolInto (line 92) | void	sqLocGetDigitGroupingSymbolInto(char * str) {
  function sqLocGetDecimalSymbolInto (line 97) | void	sqLocGetDecimalSymbolInto(char * str) {
  function sqInt (line 104) | sqInt	sqLocGetVMOffsetToUTC(void) {
  function sqInt (line 109) | sqInt	sqLocGetTimezoneOffset(void) {
  function sqInt (line 120) | sqInt	sqLocDaylightSavings(void) {
  function dateFormatIs (line 128) | void dateFormatIs(char *buffer,CFDateFormatterStyle type ) {
  function sqInt (line 135) | sqInt	sqLocLongDateFormatSize(void) {
  function sqLocGetLongDateFormatInto (line 147) | void	sqLocGetLongDateFormatInto(char * str) {
  function sqInt (line 154) | sqInt	sqLocShortDateFormatSize(void) {
  function sqLocGetShortDateFormatInto (line 166) | void	sqLocGetShortDateFormatInto(char * str) {
  function sqInt (line 173) | sqInt	sqLocTimeFormatSize(void) {
  function sqLocGetTimeFormatInto (line 183) | void	sqLocGetTimeFormatInto(char * str) {

FILE: vm/src/from_squeak/Mac OS/plugins/LocalePlugin/sqMacLocaleOS9.c
  function sqInt (line 1) | sqInt sqLocInitialize(void) {
    itl0 = (Intl0Hndl)GetIntlResource(0);
...
  function getCountryOrLanguage (line 1) | void 	getCountryOrLanguage(char *str,LocalePartMask which){
	RegionCode	...
  function sqLocGetCountryInto (line 1) | void	sqLocGetCountryInto(char * str) {
	getCountryOrLanguage(str,kLocale...
  function sqLocGetLanguageInto (line 1) | void	sqLocGetLanguageInto(char * str) {
	getCountryOrLanguage(str,kLocal...
  function sqInt (line 1) | sqInt	sqLocCurrencyNotation(void) {
	return intMarksR.currFmt & currSymL...
  function sqInt (line 1) | sqInt	sqLocCurrencySymbolSize(void) {
	char currencySymbol[4];
	
    str...
  function sqLocGetCurrencySymbolInto (line 1) | void	sqLocGetCurrencySymbolInto(char * str) {
	char currencySymbol[4];

...
  function sqInt (line 1) | sqInt	sqLocMeasurementMetric(void) {
	return intMarksR.metricSys > 0;
}
  function sqLocGetDigitGroupingSymbolInto (line 1) | void	sqLocGetDigitGroupingSymbolInto(char * str) {
	strncpy(str, &intMar...
  function sqLocGetDecimalSymbolInto (line 1) | void	sqLocGetDecimalSymbolInto(char * str) {
	strncpy(str, &intMarksR.de...
  function sqInt (line 1) | sqInt	sqLocGetVMOffsetToUTC(void) {
	/* return 0 for now */
	return 0;
}
  function sqInt (line 1) | sqInt	sqLocGetTimezoneOffset(void) {
	unsigned long now,utc;
	GetDateTim...
  function sqInt (line 1) | sqInt	sqLocDaylightSavings(void) {
struct tm * timeBlock;
time_t theTime...
  function dateFormatIs (line 1) | void dateFormatIs(Str255 buffer,DateForm type ) {
    DateString (0+24*6...
  function timeFormatIs (line 1) | void timeFormatIs(Str255 buffer,DateForm type ) {
	TimeString (0+24*60*6...
  function sqInt (line 1) | sqInt	sqLocLongDateFormatSize(void) {
	Str255 buffer;
	dateFormatIs(buff...
  function sqLocGetLongDateFormatInto (line 1) | void	sqLocGetLongDateFormatInto(char * str) {
	Str255 buffer;
	dateForma...
  function sqInt (line 1) | sqInt	sqLocShortDateFormatSize(void) {
	Str255 buffer;
	dateFormatIs(buf...
  function sqLocGetShortDateFormatInto (line 1) | void	sqLocGetShortDateFormatInto(char * str) {
	Str255 buffer;
	dateForm...
  function sqInt (line 1) | sqInt	sqLocTimeFormatSize(void) {
	Str255 buffer;
	timeFormatIs(buffer,s...
  function sqLocGetTimeFormatInto (line 1) | void	sqLocGetTimeFormatInto(char * str) {
	Str255 buffer;
	timeFormatIs(...

FILE: vm/src/from_squeak/Mac OS/plugins/MIDIPlugin/sqMacMIDI.c
  type VirtualMachine (line 6) | struct VirtualMachine
  function midiInit (line 60) | int midiInit() {
  function midiShutdown (line 120) | int midiShutdown() {
  function sqMIDIParameterSet (line 127) | int sqMIDIParameterSet(int whichParameter, int newValue) {
  function sqMIDIParameterGet (line 132) | int sqMIDIParameterGet(int whichParameter) {
  function setMidiClockRate (line 137) | int setMidiClockRate(int portNum, int interfaceClockRate) {
  function sqMIDIClosePort (line 220) | int sqMIDIClosePort(int portNum) {
  function sqMIDIGetClock (line 240) | int sqMIDIGetClock(void) {
  function sqMIDIGetSerialPortCount (line 251) | int sqMIDIGetSerialPortCount(void) {
  function sqMIDIGetPortCount (line 267) | int sqMIDIGetPortCount(void) {
  function sqMIDIGetPortDirectionality (line 276) | int sqMIDIGetPortDirectionality(int portNum) {
  function sqMIDIGetPortName (line 293) | int sqMIDIGetPortName(int portNum, int namePtr, int length) {
  function sqMIDIOpenPort (line 321) | int sqMIDIOpenPort(int portNum, int readSemaIndex, int interfaceClockRat...
  function sqMIDIParameter (line 358) | int sqMIDIParameter(int whichParameter, int modify, int newValue) {
  function sqMIDIPortReadInto (line 430) | int sqMIDIPortReadInto(int portNum, int count, int bufferPtr) {
  function sqMIDIPortWriteFromAt (line 459) | int sqMIDIPortWriteFromAt(int portNum, int count, int bufferPtr, int tim...
  function closeQuicktimeMIDIPort (line 491) | void closeQuicktimeMIDIPort(void) {
  function openQuicktimeMIDIPort (line 503) | void openQuicktimeMIDIPort(void) {
  function performMIDICmd (line 538) | void performMIDICmd(int cmdByte, int arg1, int arg2) {
  function processMIDIByte (line 575) | void processMIDIByte(int aByte) {
  function startMIDICommand (line 629) | void startMIDICommand(int cmdByte) {

FILE: vm/src/from_squeak/Mac OS/plugins/MacMenubarPlugin/MacMenubarPlugin.h
  function Boolean (line 5) | Boolean ioCheckMenuHandle(MenuHandle menuHandle) {

FILE: vm/src/from_squeak/Mac OS/plugins/Mpeg3Plugin/sqMacFileBits.h
  type VirtualMachine (line 11) | struct VirtualMachine
  function sqFilenameFromStringOpen (line 13) | void		sqFilenameFromStringOpen(char *buffer,long fileIndex, long fileLen...

FILE: vm/src/from_squeak/Mac OS/plugins/PrintJobPlugin/sqMacPrinting.c
  type VirtualMachine (line 50) | struct VirtualMachine
  function ioPrintSetup (line 80) | int ioPrintSetup(PrintingLogicPtr *token)
  function ioPrintPreProcessing (line 104) | int ioPrintPreProcessing(PrintingLogicPtr printJob,int numberOfPages) {
  function ioPagePreProcessing (line 161) | int ioPagePreProcessing(PrintingLogicPtr printJob) {
  function ioPrint (line 168) | int ioPrint(PrintingLogicPtr printJob) {
  function ioPagePostProcessing (line 184) | int ioPagePostProcessing(PrintingLogicPtr printJob) {
  function ioPrintPostProcessing (line 193) | int ioPrintPostProcessing(PrintingLogicPtr printJob) {                  ...
  function ioPrintGetFirstPageNumber (line 201) | int ioPrintGetFirstPageNumber(PrintingLogicPtr printJob){
  function ioPrintGetLastPageNumber (line 207) | int ioPrintGetLastPageNumber(PrintingLogicPtr printJob){
  function ioPrintCleanup (line 214) | int ioPrintCleanup(PrintingLogicPtr *token) {                           ...
  function OSStatus (line 256) | OSStatus 	DoPageSetupDialog(PrintingLogicPtr printJob)
  function OSStatus (line 332) | OSStatus 	DoPrintDialog(PrintingLogicPtr printJob)
  function OSStatus (line 411) | OSStatus DoPrintLoop(PrintingLogicPtr printJob)
  function OSStatus (line 477) | OSStatus FlattenAndSavePageFormat(PrintingLogicPtr printJob)
  function OSStatus (line 504) | OSStatus	LoadAndUnflattenPageFormat(PrintingLogicPtr printJob)
  function OSStatus (line 531) | OSStatus	DetermineNumberOfPagesInDoc(UInt32 *numPages,PrintingLogicPtr p...
  function Boolean (line 564) | Boolean IncludePostScriptInSpoolFile(PrintingLogicPtr printJob)
  function ioPrintSetup (line 631) | int ioPrintSetup(PrintingLogicPtr *token)
  function ioPrintPreProcessing (line 670) | int ioPrintPreProcessing(PrintingLogicPtr printJob,int numberOfPages) {
  function ioPagePreProcessing (line 709) | int ioPagePreProcessing(PrintingLogicPtr printJob) {
  function ioPrint (line 717) | int ioPrint(PrintingLogicPtr printJob) {
  function ioPagePostProcessing (line 733) | int ioPagePostProcessing(PrintingLogicPtr printJob) {
  function ioPrintPostProcessing (line 743) | int ioPrintPostProcessing(PrintingLogicPtr printJob) {                  ...
  function ioPrintGetFirstPageNumber (line 751) | int ioPrintGetFirstPageNumber(PrintingLogicPtr printJob){
  function ioPrintGetLastPageNumber (line 757) | int ioPrintGetLastPageNumber(PrintingLogicPtr printJob){
  function ioPrintCleanup (line 764) | int ioPrintCleanup(PrintingLogicPtr *token) {                           ...
  function OSStatus (line 786) | OSStatus DoPrintLoop(PrintingLogicPtr printJob)
  function ioInitPrintJob (line 815) | int ioInitPrintJob() {
  function ioShutdownPrintJob (line 820) | int ioShutdownPrintJob() {
  function Boolean (line 825) | static Boolean RunningOnCarbonX(void)
  function ioPagePostscript (line 834) | int ioPagePostscript(PrintingLogicPtr printJob,char *postscript,int post...
  function ioPageForm (line 842) | int ioPageForm(PrintingLogicPtr printJob, char *aBitMap,int h,int w,int ...
  function OSStatus (line 867) | OSStatus DrawPage(PrintingLogicPtr printJob)
  function SetUpPixmap (line 941) | static void SetUpPixmap(void) {
  function SetColorEntry (line 1018) | static void SetColorEntry(int index, int red, int green, int blue) {
  function FreePixmap (line 1025) | static void FreePixmap(void) {

FILE: vm/src/from_squeak/Mac OS/plugins/PrintJobPlugin/sqMacPrinting.h
  type PrintingLogic (line 23) | typedef struct {

FILE: vm/src/from_squeak/Mac OS/plugins/QuicktimePlugin/sqMacQuicktimeInteface.c
  type QuickTimeBitMapForSqueak (line 16) | typedef struct QuickTimeBitMapForSqueak {
  type VirtualMachine (line 35) | struct VirtualMachine
  function OSErr (line 46) | static OSErr DrawCompleteProc(Movie theMovie, long refCon) {
  function SetupSurface (line 51) | void SetupSurface() {
  function sqInt (line 57) | sqInt sqQuicktimeInitialize()
  function sqInt (line 63) | sqInt sqQuicktimeShutdown() {
  function stQuicktimeSetSurfacewidthheightrowBytesdepthmovie (line 67) | long stQuicktimeSetSurfacewidthheightrowBytesdepthmovie(char * buffer, i...
  function stQuicktimeSetToExistingSurfacegworldwidthheightrowBytesdepthmovie (line 84) | long stQuicktimeSetToExistingSurfacegworldwidthheightrowBytesdepthmovie
  function stQuicktimeDestroySurface (line 106) | int stQuicktimeDestroySurface(int sqHandle) {
  function stQuicktimeDestroy (line 119) | int stQuicktimeDestroy(int sqHandle) {
  function stQuicktimeSetSemaphorefor (line 139) | int stQuicktimeSetSemaphorefor(int index, int sqHandle) {
  function stQuicktimeClearSemaphore (line 154) | int stQuicktimeClearSemaphore(int sqHandle) {
  function QuicktimeGetSurfaceFormat (line 169) | int QuicktimeGetSurfaceFormat(QuickTimeBitMapForSqueak *myBM, int *width...
  function QuicktimeLockSurface (line 179) | int QuicktimeLockSurface(QuickTimeBitMapForSqueak *myBM, int *pitch, int...
  function QuicktimeUnlockSurface (line 191) | int QuicktimeUnlockSurface(QuickTimeBitMapForSqueak *myBM, int x, int y,...
  function QuicktimeShowSurface (line 199) | int QuicktimeShowSurface(QuickTimeBitMapForSqueak *myBM, int x, int y, i...

FILE: vm/src/from_squeak/Mac OS/plugins/SecurityPlugin/sqMacSecurity.c
  type VirtualMachine (line 19) | struct VirtualMachine
  function isAccessiblePathName (line 37) | static int isAccessiblePathName(char *pathName) {
  function isAccessibleFileName (line 50) | static int isAccessibleFileName(char *fileName) {
  function ioCanCreatePathOfSize (line 59) | int ioCanCreatePathOfSize(char* pathString, int pathStringLength) {
  function ioCanListPathOfSize (line 65) | int ioCanListPathOfSize(char* pathString, int pathStringLength) {
  function ioCanDeletePathOfSize (line 71) | int ioCanDeletePathOfSize(char* pathString, int pathStringLength) {
  function ioCanOpenFileOfSizeWritable (line 78) | int ioCanOpenFileOfSizeWritable(char* pathString, int pathStringLength, ...
  function ioCanOpenAsyncFileOfSizeWritable (line 84) | int ioCanOpenAsyncFileOfSizeWritable(char* pathString, int pathStringLen...
  function ioCanDeleteFileOfSize (line 87) | int ioCanDeleteFileOfSize(char* pathString, int pathStringLength) {
  function ioCanRenameFileOfSize (line 93) | int ioCanRenameFileOfSize(char* pathString, int pathStringLength) {
  function ioCanGetFileTypeOfSize (line 100) | int ioCanGetFileTypeOfSize(char* pathString, int pathStringLength) {
  function ioCanSetFileTypeOfSize (line 105) | int ioCanSetFileTypeOfSize(char* pathString, int pathStringLength) {
  function ioDisableFileAccess (line 111) | int ioDisableFileAccess(void) {
  function ioHasFileAccess (line 116) | int ioHasFileAccess(void) {
  function ioCanRenameImage (line 128) | int ioCanRenameImage(void) {
  function ioCanWriteImage (line 132) | int ioCanWriteImage() {
  function ioDisableImageWrite (line 136) | int ioDisableImageWrite() {
  function ioCanCreateSocketOfType (line 149) | int ioCanCreateSocketOfType(int netType, int socketType) {
  function ioCanConnectToPort (line 154) | int ioCanConnectToPort(int netAddr, int port) {
  function ioCanListenOnPort (line 159) | int ioCanListenOnPort(int  s, int port) {
  function ioDisableSocketAccess (line 164) | int ioDisableSocketAccess() {
  function ioHasSocketAccess (line 169) | int ioHasSocketAccess() {
  function ioInitSecurity (line 189) | int ioInitSecurity(void) {
  function _ioSetImageWrite (line 209) | int _ioSetImageWrite(int enable) {
  function _ioSetFileAccess (line 217) | int _ioSetFileAccess(int enable) {
  function _ioSetSocketAccess (line 225) | int _ioSetSocketAccess(int enable) {
  function fixPath (line 232) | void fixPath(char *path) {
  function dir_CreateSecurity (line 241) | int dir_CreateSecurity(char *pathString, int pathStringLength) {

FILE: vm/src/from_squeak/Mac OS/plugins/SerialExtendedPlugin/sqMacSerialExtended.c
  type VirtualMachine (line 9) | struct VirtualMachine
  function serialPortFindNamesPlusKeysstorage (line 15) | int serialPortFindNamesPlusKeysstorage(int numberOf,int storage) {
  function kern_return_t (line 44) | static kern_return_t FindModems(io_iterator_t *matchingServices)
  function GetModemPath (line 128) | static void GetModemPath(io_iterator_t serialPortIterator, char *bsdPath...

FILE: vm/src/from_squeak/Mac OS/plugins/SerialPlugin/sqMacSerialPort.c
  type VirtualMachine (line 17) | struct VirtualMachine
  function serialPortInit (line 33) | int serialPortInit() { return true; }
  function serialPortShutdown (line 34) | int serialPortShutdown() {
  function serialPortCount (line 43) | EXPORT (int) serialPortCount(void) {
  function serialPortIsOpen (line 49) | int serialPortIsOpen(int portNum) {
  function serialPortSetControl (line 54) | int serialPortSetControl(int portNum,int control, char *data) {
  function serialPortNames (line 59) | int serialPortNames(int portNum, char *portName, char *inName, char *out...
  function setHandshakeOptions (line 67) | int setHandshakeOptions(
  function serialPortClose (line 75) | EXPORT (int) serialPortClose(int portNum) {
  function serialPortOpen (line 80) | EXPORT (int) serialPortOpen(
  function serialPortReadInto (line 90) | EXPORT (int) serialPortReadInto(int portNum, int count, int bufferPtr) {
  function serialPortWriteFrom (line 99) | EXPORT (int) serialPortWriteFrom(int portNum, int count, int bufferPtr) {

FILE: vm/src/from_squeak/Mac OS/plugins/ServicesPlugin/sqMacServices.c
  type VirtualMachine (line 22) | struct VirtualMachine
  function sqServicesInitialize (line 49) | int sqServicesInitialize() {
  function sqServicesShutdown (line 60) | int sqServicesShutdown() {
  function sqServicesSetDataTypeslength (line 78) | void sqServicesSetDataTypeslength(char *dataTypes, long dataTypesLength) {
  function sqServicesSetSemaphore (line 85) | void sqServicesSetSemaphore(int semi){
  function sqServicesSetTextStringlength (line 89) | void sqServicesSetTextStringlength(char *aTextString, int stringLength){
  function sqServicesSetReturnTextStringlength (line 98) | void sqServicesSetReturnTextStringlength(char *aTextString, int stringLe...
  function sqServicesSetByteslengthosType (line 107) | void sqServicesSetByteslengthosType(char *aByteArray, long dataTypesLeng...
  function sqServicesSetCopyOSTypeString (line 119) | void sqServicesSetCopyOSTypeString(char *aOSTypeString) {
  function sqServicesSetPasteOSTypeString (line 123) | void sqServicesSetPasteOSTypeString(char *aOSTypeString) {
  function sqServicesSetPerformOSTypeString (line 127) | void sqServicesSetPerformOSTypeString(char *aOSTypeString) {
  function sqServicesGetTextStringLength (line 131) | int sqServicesGetTextStringLength(void){
  function sqServicesGetTextStringInto (line 135) | void sqServicesGetTextStringInto(char *buffer) {
  function pascal (line 139) | static pascal OSStatus MyServicesEventHandler (EventHandlerCallRef myHan...
  function pascal (line 281) | static pascal void hideStupidApplication (EventLoopTimerRef theTimer,voi...
  function makeItHideLogic (line 291) | void makeItHideLogic(int foo)
  function waitAFewMilliseconds (line 304) | void waitAFewMilliseconds()

FILE: vm/src/from_squeak/Mac OS/plugins/SocketPlugin/68K/AddressXlation.h
  type hostInfo (line 72) | struct hostInfo {
  type hostInfo (line 78) | typedef struct hostInfo hostInfo;
  type AddrClasses (line 90) | typedef unsigned short AddrClasses;
  type HInfoRec (line 105) | struct HInfoRec {
  type HInfoRec (line 109) | typedef struct HInfoRec HInfoRec;
  type MXRec (line 111) | struct MXRec {
  type MXRec (line 115) | typedef struct MXRec MXRec;
  type returnRec (line 117) | struct returnRec {
  type returnRec (line 127) | typedef struct returnRec returnRec;
  type cacheEntryRecord (line 129) | struct cacheEntryRecord {
  type cacheEntryRecord (line 139) | typedef struct cacheEntryRecord cacheEntryRecord;
  type pascal (line 141) | typedef pascal void (*EnumResultProcPtr)(struct cacheEntryRecord *cacheE...
  type pascal (line 142) | typedef pascal void (*ResultProcPtr)(struct hostInfo *hostInfoPtr, Ptr u...
  type pascal (line 143) | typedef pascal void (*ResultProc2ProcPtr)(struct returnRec *returnRecPtr...
  type UniversalProcPtr (line 146) | typedef UniversalProcPtr EnumResultUPP;
  type UniversalProcPtr (line 147) | typedef UniversalProcPtr ResultUPP;
  type UniversalProcPtr (line 148) | typedef UniversalProcPtr ResultProc2UPP;
  type EnumResultProcPtr (line 150) | typedef EnumResultProcPtr EnumResultUPP;
  type ResultProcPtr (line 151) | typedef ResultProcPtr ResultUPP;
  type ResultProc2ProcPtr (line 152) | typedef ResultProc2ProcPtr ResultProc2UPP;
  type cacheEntryRecord (line 157) | struct cacheEntryRecord
  type hostInfo (line 160) | struct hostInfo
  type returnRec (line 163) | struct returnRec
  type hostInfo (line 200) | struct hostInfo
  type hostInfo (line 203) | struct hostInfo
  type returnRec (line 204) | struct returnRec
  type returnRec (line 205) | struct returnRec
  type OSErr (line 210) | typedef OSErr (*OpenResolverProcPtr)(UInt32 selector, char *filename);
  type OSErr (line 211) | typedef OSErr (*CloseResolverProcPtr)(UInt32 selector);
  type OSErr (line 212) | typedef OSErr (*StrToAddrProcPtr)(UInt32 selector, char *hostName, struc...
  type OSErr (line 213) | typedef OSErr (*AddrToStrProcPtr)(UInt32 selector, unsigned long addr, c...
  type OSErr (line 214) | typedef OSErr (*EnumCacheProcPtr)(UInt32 selector, EnumResultUPP resultp...
  type OSErr (line 215) | typedef OSErr (*AddrToNameProcPtr)(UInt32 selector, UInt32 addr, struct ...
  type OSErr (line 216) | typedef OSErr (*HInfoProcPtr)(UInt32 selector, char *hostName, struct re...
  type OSErr (line 217) | typedef OSErr (*MXInfoProcPtr)(UInt32 selector, char *hostName, struct r...
  type UniversalProcPtr (line 220) | typedef UniversalProcPtr OpenResolverUPP;
  type UniversalProcPtr (line 221) | typedef UniversalProcPtr CloseResolverUPP;
  type UniversalProcPtr (line 222) | typedef UniversalProcPtr StrToAddrUPP;
  type UniversalProcPtr (line 223) | typedef UniversalProcPtr AddrToStrUPP;
  type UniversalProcPtr (line 224) | typedef UniversalProcPtr EnumCacheUPP;
  type UniversalProcPtr (line 225) | typedef UniversalProcPtr AddrToNameUPP;
  type UniversalProcPtr (line 226) | typedef UniversalProcPtr HInfoUPP;
  type UniversalProcPtr (line 227) | typedef UniversalProcPtr MXInfoUPP;
  type OpenResolverProcPtr (line 229) | typedef OpenResolverProcPtr OpenResolverUPP;
  type CloseResolverProcPtr (line 230) | typedef CloseResolverProcPtr CloseResolverUPP;
  type StrToAddrProcPtr (line 231) | typedef StrToAddrProcPtr StrToAddrUPP;
  type AddrToStrProcPtr (line 232) | typedef AddrToStrProcPtr AddrToStrUPP;
  type EnumCacheProcPtr (line 233) | typedef EnumCacheProcPtr EnumCacheUPP;
  type AddrToNameProcPtr (line 234) | typedef AddrToNameProcPtr AddrToNameUPP;
  type HInfoProcPtr (line 235) | typedef HInfoProcPtr HInfoUPP;
  type MXInfoProcPtr (line 236) | typedef MXInfoProcPtr MXInfoUPP;
  type hostInfo (line 251) | struct hostInfo
  type hostInfo (line 268) | struct hostInfo
  type returnRec (line 275) | struct returnRec
  type returnRec (line 282) | struct returnRec

FILE: vm/src/from_squeak/Mac OS/plugins/SocketPlugin/68K/MacTCP.h
  type UInt8 (line 134) | typedef UInt8 b_8;
  type UInt16 (line 137) | typedef UInt16 b_16;
  type UInt32 (line 140) | typedef UInt32 b_32;
  type b_32 (line 143) | typedef b_32 ip_addr;
  type ip_addrbytes (line 145) | struct ip_addrbytes {
  type ip_addrbytes (line 151) | typedef struct ip_addrbytes ip_addrbytes;
  type wdsEntry (line 153) | struct wdsEntry {
  type wdsEntry (line 157) | typedef struct wdsEntry wdsEntry;
  type rdsEntry (line 159) | struct rdsEntry {
  type rdsEntry (line 163) | typedef struct rdsEntry rdsEntry;
  type BufferPtr (line 165) | typedef unsigned long BufferPtr;
  type StreamPtr (line 167) | typedef unsigned long StreamPtr;
  type ICMPMsgType (line 183) | typedef unsigned short ICMPMsgType;
  type b_16 (line 185) | typedef b_16 ip_port;
  type ICMPReport (line 187) | struct ICMPReport {
  type ICMPReport (line 197) | typedef struct ICMPReport ICMPReport;
  type GetAddrParamBlock (line 205) | struct GetAddrParamBlock
  type UniversalProcPtr (line 208) | typedef UniversalProcPtr GetIPIOCompletionUPP;
  type GetIPIOCompletionProcPtr (line 210) | typedef GetIPIOCompletionProcPtr GetIPIOCompletionUPP;
  type GetAddrParamBlock (line 224) | struct GetAddrParamBlock {
  type GetAddrParamBlock (line 238) | typedef struct GetAddrParamBlock GetAddrParamBlock;
  type ICMPParamBlock (line 247) | struct ICMPParamBlock
  type UniversalProcPtr (line 250) | typedef UniversalProcPtr IPIOCompletionUPP;
  type IPIOCompletionProcPtr (line 252) | typedef IPIOCompletionProcPtr IPIOCompletionUPP;
  type ICMPParamBlock (line 266) | struct ICMPParamBlock {
  type pascal (line 286) | typedef pascal void (*ICMPEchoNotifyProcPtr)(struct ICMPParamBlock *iopb);
  type UniversalProcPtr (line 289) | typedef UniversalProcPtr ICMPEchoNotifyUPP;
  type ICMPEchoNotifyProcPtr (line 291) | typedef ICMPEchoNotifyProcPtr ICMPEchoNotifyUPP;
  type IPParamBlock (line 294) | struct IPParamBlock {
  type arp_entry (line 321) | struct arp_entry
  type nbp_entry (line 322) | struct nbp_entry
  type LAPStats (line 324) | struct LAPStats {
  type LAPStats (line 334) | typedef struct LAPStats LAPStats;
  type nbp_entry (line 336) | struct nbp_entry {
  type Enet_addr (line 347) | struct Enet_addr {
  type Enet_addr (line 351) | typedef struct Enet_addr Enet_addr;
  type arp_entry (line 353) | struct arp_entry {
  type arp_entry (line 359) | typedef struct arp_entry arp_entry;
  type TCPEventCode (line 400) | typedef unsigned short TCPEventCode;
  type TCPTerminationReason (line 414) | typedef unsigned short TCPTerminationReason;
  type pascal (line 416) | typedef pascal void (*TCPNotifyProcPtr)(StreamPtr tcpStream, unsigned sh...
  type UniversalProcPtr (line 419) | typedef UniversalProcPtr TCPNotifyUPP;
  type TCPNotifyProcPtr (line 421) | typedef TCPNotifyProcPtr TCPNotifyUPP;
  type tcp_port (line 424) | typedef unsigned short tcp_port;
  type TCPCreatePB (line 442) | struct TCPCreatePB {
  type TCPCreatePB (line 448) | typedef struct TCPCreatePB TCPCreatePB;
  type TCPOpenPB (line 450) | struct TCPOpenPB {
  type TCPOpenPB (line 468) | typedef struct TCPOpenPB TCPOpenPB;
  type TCPSendPB (line 470) | struct TCPSendPB {
  type TCPSendPB (line 482) | typedef struct TCPSendPB TCPSendPB;
  type TCPReceivePB (line 487) | struct TCPReceivePB {
  type TCPReceivePB (line 499) | typedef struct TCPReceivePB TCPReceivePB;
  type TCPClosePB (line 501) | struct TCPClosePB {
  type TCPClosePB (lin
Copy disabled (too large) Download .json
Condensed preview — 1706 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (44,181K chars).
[
  {
    "path": ".gitignore",
    "chars": 381,
    "preview": "# OS X\n.DS_Store\n\n# Xcode\nxcuserdata\nvm/RoarVM.xcodeproj/*.pbxuser\nvm/RoarVM.xcodeproj/*.perspectivev3\n*xcworkspace\n\n# B"
  },
  {
    "path": ".gitmodules",
    "chars": 95,
    "preview": "[submodule \"vm/googletest\"]\n\tpath = vm/googletest\n\turl = git://github.com/smarr/googletest.git\n"
  },
  {
    "path": "INSTALL.rst",
    "chars": 2948,
    "preview": "Installation and Usage Instructions for the RoarVM\n==================================================\n\nThis file briefly"
  },
  {
    "path": "README",
    "chars": 273,
    "preview": "This branch is used to prepare the code for integration into the RoarVM.\nThe RoarVM uses a slightly different directory "
  },
  {
    "path": "README.rst",
    "chars": 6898,
    "preview": "RoarVM - The Manycore SqueakVM\n==============================\n\n.. image:: https://github.com/smarr/RoarVM/raw/1591bb4e1c"
  },
  {
    "path": "image.st/RVM-multicore-support.mvc.st",
    "chars": 75748,
    "preview": "'******************************************************************************\r *  Copyright (c) 2008 - 2010 IBM Corpor"
  },
  {
    "path": "image.st/RVM-multicore-support.pharo.st",
    "chars": 86565,
    "preview": "'******************************************************************************\n *  Copyright (c) 2008 - 2010 IBM Corpor"
  },
  {
    "path": "image.st/RVM-multicore-support.squeak.st",
    "chars": 94395,
    "preview": "'******************************************************************************\n *  Copyright (c) 2008 - 2010 IBM Corpor"
  },
  {
    "path": "image.st/Sly3.mvc.st",
    "chars": 1441786,
    "preview": "'******************************************************************************\r *  Copyright (c) 2008 - 2010 IBM Corpor"
  },
  {
    "path": "vm/RoarVM.xcodeproj/project.pbxproj",
    "chars": 130918,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "vm/run/reliability-test",
    "chars": 672,
    "preview": "#!/bin/bash\n\necho_usage () {\n    echo \"Usage: $0 <n> <cmd> [args]\"\n    echo\n    echo \"Runs a command max. n-times and re"
  },
  {
    "path": "vm/run/tile-runner",
    "chars": 290,
    "preview": "#!/bin/sh\nBASE_PATH=`pwd`\ntile-monitor --pci --rtc --bootrom-file /users/smarr/Projects/Tilera-custom-bootrom/vmlinux-pc"
  },
  {
    "path": "vm/run/tile-rvm",
    "chars": 364,
    "preview": "#!/bin/sh\nBASE_PATH=`pwd`\nBUILD_PATH=$BASE_PATH/../build\ntile-monitor --pci --rtc --bootrom-file /users/smarr/Projects/T"
  },
  {
    "path": "vm/run/tile-rvm-db",
    "chars": 329,
    "preview": "#!/bin/sh\nBASE_PATH=`pwd`\nBUILD_PATH=$BASE_PATH/../build\ntile-monitor --pci --rtc --bootrom-file /users/smarr/Projects/T"
  },
  {
    "path": "vm/src/externals/externals.cpp",
    "chars": 2432,
    "preview": "/******************************************************************************\n *  Copyright (c) 2008 - 2010 IBM Corpor"
  },
  {
    "path": "vm/src/externals/externals.h",
    "chars": 2844,
    "preview": "/******************************************************************************\n *  Copyright (c) 2008 - 2010 IBM Corpor"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/AsynchFilePlugin/AsynchFilePlugin.h",
    "chars": 659,
    "preview": "/* Header file for AsynchFile plugin */\n/* module initialization/shutdown */\nint asyncFileInit(void);\nint asyncFileShutd"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/B3DAcceleratorPlugin/B3DAcceleratorPlugin.h",
    "chars": 13308,
    "preview": "/* Header file for 3D accelerator plugin */\n#ifdef WIN32\n# include <windows.h>\n#endif\n#if defined(BUILD_FOR_OSX)\n#includ"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/B3DAcceleratorPlugin/sqOpenGLRenderer.c",
    "chars": 34552,
    "preview": "/****************************************************************************\n*   PROJECT: Squeak 3D accelerator\n*   FIL"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/B3DAcceleratorPlugin/sqOpenGLRenderer.h",
    "chars": 2484,
    "preview": "#ifndef SQ_OPENGL_RENDERER_H\n#define SQ_OPENGL_RENDERER_H\n\n#if defined(macintoshSqueak)\n# include \"sqMacOpenGL.h\"\n#elif "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/BochsIA32Plugin/BochsIA32Plugin.h",
    "chars": 1877,
    "preview": "/* Bochs seems to use error code 1 for execution errors.\n * So we use > 1 for various errors\n */\n#define NoError 0\n#defi"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/BochsIA32Plugin/sqBochsIA32Plugin.cpp",
    "chars": 16360,
    "preview": "#include <stdarg.h>\n#define COG 1\n#define FOR_COG_PLUGIN 1\n\n// Requires per-target include paths:\n// ../../processors/IA"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/CroquetPlugin/CroquetPlugin.h",
    "chars": 937,
    "preview": "#ifndef CROQUET_PLUGIN_H\r\n#define CROQUET_PLUGIN_H\r\n/* CroquetPlugin.h include file */\r\n\r\n/* Include MD5 code for primit"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/CroquetPlugin/CroquetPlugin.st",
    "chars": 4410,
    "preview": "'From Croquet1.0beta of 24 March 2006 [latest update: #6665] on 26 March 2006 at 8:26:17 pm'!\rInterpreterPlugin subclass"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/CroquetPlugin/md5.h",
    "chars": 4247,
    "preview": "/*\r\n * MD5 transform algorithm, taken from code written by Colin Plumb,\r\n * and put into the public domain\r\n *\r\n */\r\n\r\n/"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/CroquetPlugin/tribox.c",
    "chars": 6620,
    "preview": "/********************************************************/\r\n/* AABB-triangle overlap test code                      */\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/DropPlugin/DropPlugin.h",
    "chars": 625,
    "preview": "/* drop support primitives */\n\n/* module initialization/shutdown */\nint dropInit(void);\nint dropShutdown(void);\n\nchar* d"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/ExampleSurfacePlugin/ExampleSurfacePlugin.h",
    "chars": 275,
    "preview": "/* example surface plugin header file */\r\nint memInitialize(void);\r\nint memCreateSurfaceWidthHeightDepth(int width, int "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/ExampleSurfacePlugin/SurfacePlugin-Examples.st",
    "chars": 7699,
    "preview": "Form subclass: #ExampleSurface\r\tinstanceVariableNames: ''\r\tclassVariableNames: ''\r\tpoolDictionaries: ''\r\tcategory: 'Surf"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/ExampleSurfacePlugin/sqMemorySurface.c",
    "chars": 3588,
    "preview": "/* sample memory surface plugin implementation */\r\n#include <malloc.h>\r\n#include \"sqVirtualMachine.h\"\r\n#include \"Example"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FileCopyPlugin/FileCopyPlugin.h",
    "chars": 485,
    "preview": "/* This is a hopefully temporary plugin that provides a platform specific way\n * to copy files with all the type and sta"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FilePlugin/FilePlugin.c",
    "chars": 34170,
    "preview": "/* Automatically generated by\n\tVMPluginCodeGenerator VMMaker.oscog-eem.97 uuid: e5a88d4c-b638-4228-8a1d-39d5af02c8d8\n   "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FilePlugin/FilePlugin.h",
    "chars": 2502,
    "preview": "/****************************************************************************\n*   PROJECT: Common include\n*   FILE:    F"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FilePlugin/sqFilePluginBasicPrims.c",
    "chars": 13469,
    "preview": "/****************************************************************************\n*   PROJECT: File Interface\n*   FILE:    s"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/FloatMathPlugin.h",
    "chars": 1263,
    "preview": "/* we only declare those functions from fdlibm that we actually use\r\n   and avoid including fdlibm.h alltogether as it c"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/FloatMathPlugin.st",
    "chars": 12331,
    "preview": "'From Croquet1.0beta of 24 March 2006 [latest update: #6665] on 26 March 2006 at 6:00:28 pm'!\rInterpreterPlugin subclass"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/FloatMathPluginTests.st",
    "chars": 23420,
    "preview": "'From Croquet1.0beta of 24 March 2006 [latest update: #6665] on 26 March 2006 at 6:00:26 pm'!\rTestCase subclass: #FloatM"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/acos.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_acos.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/acosh.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_acosh.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/asin.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_asin.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/asinh.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_asinh.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/atan.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_atan.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/atan2.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_atan2.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/atanh.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_atanh.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/copysign.c",
    "chars": 59,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_copysign.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/cos.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_cos.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/cosh.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_cosh.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/exp.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_exp.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/expm1.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_expm1.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/MD5",
    "chars": 3313,
    "preview": "-----BEGIN PGP SIGNED MESSAGE-----\n\n# netlib-bl master Mon May 17 03:35:14 EDT 2004\n# http://cm.bell-labs.com/netlib/crc"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/changes",
    "chars": 1994,
    "preview": "21 Oct 2002\nbug fix in e_pow.c from \"David G Hough at validlab.com\" <validlab@validlab.com>.\ncredit for bug report goes "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/configure",
    "chars": 97838,
    "preview": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.59 for fdli"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/configure.in",
    "chars": 363,
    "preview": "dnl Process this file with autoconf to produce a configure script\nAC_INIT(fdlibm,5.3,[FDLIBM COMMENTS <fdlibm-comments A"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_acos.c",
    "chars": 3319,
    "preview": "\n/* @(#)e_acos.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_acosh.c",
    "chars": 1604,
    "preview": "\n/* @(#)e_acosh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_asin.c",
    "chars": 3530,
    "preview": "\n/* @(#)e_asin.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_atan2.c",
    "chars": 3756,
    "preview": "\n/* @(#)e_atan2.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_atanh.c",
    "chars": 1693,
    "preview": "\n/* @(#)e_atanh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_cosh.c",
    "chars": 2409,
    "preview": "\n/* @(#)e_cosh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_exp.c",
    "chars": 5002,
    "preview": "\n/* @(#)e_exp.c 1.6 04/04/22 */\n/*\n * ====================================================\n * Copyright (C) 2004 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_fmod.c",
    "chars": 3492,
    "preview": "\n/* @(#)e_fmod.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_gamma.c",
    "chars": 722,
    "preview": "\n/* @(#)e_gamma.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_gamma_r.c",
    "chars": 824,
    "preview": "\n/* @(#)e_gamma_r.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_hypot.c",
    "chars": 3015,
    "preview": "\n/* @(#)e_hypot.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_j0.c",
    "chars": 16069,
    "preview": "\n/* @(#)e_j0.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun M"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_j1.c",
    "chars": 15903,
    "preview": "\n/* @(#)e_j1.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun M"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_jn.c",
    "chars": 7123,
    "preview": "\n/* @(#)e_jn.c 1.4 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun M"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_lgamma.c",
    "chars": 728,
    "preview": "\n/* @(#)e_lgamma.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by S"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_lgamma_r.c",
    "chars": 11037,
    "preview": "\n/* @(#)e_lgamma_r.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_log.c",
    "chars": 4451,
    "preview": "\n/* @(#)e_log.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_log10.c",
    "chars": 2739,
    "preview": "\n/* @(#)e_log10.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_pow.c",
    "chars": 9675,
    "preview": "\n#ifndef lint\nstatic  char sccsid[] = \"@(#)e_pow.c 1.5 04/04/22 SMI\"; \n#endif\n\n/*\n * ==================================="
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_rem_pio2.c",
    "chars": 5335,
    "preview": "\n/* @(#)e_rem_pio2.c 1.4 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_remainder.c",
    "chars": 1781,
    "preview": "\n/* @(#)e_remainder.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 b"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_scalb.c",
    "chars": 1174,
    "preview": "\n/* @(#)e_scalb.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_sinh.c",
    "chars": 2196,
    "preview": "\n/* @(#)e_sinh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/e_sqrt.c",
    "chars": 14481,
    "preview": "/* @(#)e_sqrt.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/fdlibm.h",
    "chars": 6252,
    "preview": "\n/* @(#)fdlibm.h 1.5 04/04/22 */\n/*\n * ====================================================\n * Copyright (C) 2004 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/index",
    "chars": 1913,
    "preview": "file\tfdlibm/fdlibm.h\n\nfile\tfdlibm/index\n\nfile\tfdlibm/e_acos.c\n\nfile\tfdlibm/e_acosh.c\n\nfile\tfdlibm/e_asin.c\n\nfile\tfdlibm/"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/index.html",
    "chars": 11073,
    "preview": "<head>\n<title>fdlibm</title>\n<meta name=\"waisindex\" value=\"nse\">\n</head>\n<h1>fdlibm</h1>\n<p>\nClick <A HREF=\"http://www.n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_cos.c",
    "chars": 3004,
    "preview": "\n/* @(#)k_cos.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_rem_pio2.c",
    "chars": 8460,
    "preview": "\n/* @(#)k_rem_pio2.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_sin.c",
    "chars": 2392,
    "preview": "\n/* @(#)k_sin.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_standard.c",
    "chars": 18637,
    "preview": "\n/* @(#)k_standard.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/k_tan.c",
    "chars": 4258,
    "preview": "#pragma ident \"@(#)k_tan.c 1.5 04/04/22 SMI\"\n\n/*\n * ====================================================\n * Copyright 20"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/makefile",
    "chars": 3472,
    "preview": "#\n#  @(#)Makefile 1.4 95/01/18 \n# \n#  ====================================================\n#  Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/makefile.in",
    "chars": 4187,
    "preview": "#\n#  @(#)Makefile 1.4 95/01/18\n#\n#  ====================================================\n#  Copyright (C) 1993 by Sun Mi"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/readme",
    "chars": 8407,
    "preview": "\n\t  *********************************\n \t  * Announcing FDLIBM Version 5.3 *\n\t  *********************************\n======="
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_asinh.c",
    "chars": 1606,
    "preview": "\n/* @(#)s_asinh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_atan.c",
    "chars": 4227,
    "preview": "\n/* @(#)s_atan.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_cbrt.c",
    "chars": 2098,
    "preview": "\n/* @(#)s_cbrt.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_ceil.c",
    "chars": 1742,
    "preview": "\n/* @(#)s_ceil.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_copysign.c",
    "chars": 746,
    "preview": "\n/* @(#)s_copysign.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_cos.c",
    "chars": 1976,
    "preview": "\n/* @(#)s_cos.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_erf.c",
    "chars": 11151,
    "preview": "\n/* @(#)s_erf.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_expm1.c",
    "chars": 7241,
    "preview": "\n/* @(#)s_expm1.c 1.5 04/04/22 */\n/*\n * ====================================================\n * Copyright (C) 2004 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_fabs.c",
    "chars": 614,
    "preview": "\n/* @(#)s_fabs.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_finite.c",
    "chars": 670,
    "preview": "\n/* @(#)s_finite.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by S"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_floor.c",
    "chars": 1752,
    "preview": "\n/* @(#)s_floor.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_frexp.c",
    "chars": 1294,
    "preview": "\n/* @(#)s_frexp.c 1.4 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_ilogb.c",
    "chars": 1087,
    "preview": "\n/* @(#)s_ilogb.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_isnan.c",
    "chars": 727,
    "preview": "\n/* @(#)s_isnan.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_ldexp.c",
    "chars": 714,
    "preview": "\n/* @(#)s_ldexp.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_lib_version.c",
    "chars": 811,
    "preview": "\n/* @(#)s_lib_version.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_log1p.c",
    "chars": 5298,
    "preview": "\n/* @(#)s_log1p.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_logb.c",
    "chars": 884,
    "preview": "\n/* @(#)s_logb.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_matherr.c",
    "chars": 598,
    "preview": "\n/* @(#)s_matherr.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_modf.c",
    "chars": 1821,
    "preview": "\n/* @(#)s_modf.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_nextafter.c",
    "chars": 1993,
    "preview": "\n/* @(#)s_nextafter.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 b"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_rint.c",
    "chars": 1912,
    "preview": "\n/* @(#)s_rint.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_scalbn.c",
    "chars": 1851,
    "preview": "\n/* @(#)s_scalbn.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by S"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_signgam.c",
    "chars": 37,
    "preview": "#include \"fdlibm.h\"\nint signgam = 0;\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_significand.c",
    "chars": 728,
    "preview": "\n/* @(#)s_significand.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_sin.c",
    "chars": 1967,
    "preview": "\n/* @(#)s_sin.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_tan.c",
    "chars": 1816,
    "preview": "\n/* @(#)s_tan.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/s_tanh.c",
    "chars": 1987,
    "preview": "\n/* @(#)s_tanh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_acos.c",
    "chars": 831,
    "preview": "\n/* @(#)w_acos.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_acosh.c",
    "chars": 839,
    "preview": "\n/* @(#)w_acosh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_asin.c",
    "chars": 839,
    "preview": "\n/* @(#)w_asin.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_atan2.c",
    "chars": 879,
    "preview": "\n/* @(#)w_atan2.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_atanh.c",
    "chars": 944,
    "preview": "\n/* @(#)w_atanh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_cosh.c",
    "chars": 860,
    "preview": "\n/* @(#)w_cosh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_exp.c",
    "chars": 1066,
    "preview": "\n/* @(#)w_exp.c 1.4 04/04/22 */\n/*\n * ====================================================\n * Copyright (C) 2004 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_fmod.c",
    "chars": 856,
    "preview": "\n/* @(#)w_fmod.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_gamma.c",
    "chars": 1110,
    "preview": "\n/* @(#)w_gamma.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_gamma_r.c",
    "chars": 1148,
    "preview": "\n/* @(#)w_gamma_r.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_hypot.c",
    "chars": 865,
    "preview": "\n/* @(#)w_hypot.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_j0.c",
    "chars": 1472,
    "preview": "\n/* @(#)w_j0.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun M"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_j1.c",
    "chars": 1463,
    "preview": "\n/* @(#)w_j1.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun M"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_jn.c",
    "chars": 2347,
    "preview": "\n/* @(#)w_jn.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun M"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_lgamma.c",
    "chars": 1129,
    "preview": "\n/* @(#)w_lgamma.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by S"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_lgamma_r.c",
    "chars": 1156,
    "preview": "\n/* @(#)w_lgamma_r.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_log.c",
    "chars": 860,
    "preview": "\n/* @(#)w_log.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_log10.c",
    "chars": 923,
    "preview": "\n/* @(#)w_log10.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_pow.c",
    "chars": 1417,
    "preview": "\n\n/* @(#)w_pow.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_remainder.c",
    "chars": 885,
    "preview": "\n/* @(#)w_remainder.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 b"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_scalb.c",
    "chars": 1291,
    "preview": "\n/* @(#)w_scalb.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Su"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_sinh.c",
    "chars": 832,
    "preview": "\n/* @(#)w_sinh.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fdlibm/w_sqrt.c",
    "chars": 828,
    "preview": "\n/* @(#)w_sqrt.c 1.3 95/01/18 */\n/*\n * ====================================================\n * Copyright (C) 1993 by Sun"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/finite.c",
    "chars": 57,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_finite.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/fmod.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_fmod.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/hypot.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_hypot.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/ieee754names.h",
    "chars": 468,
    "preview": "/* Re-define all of the conflicting names of fdlibm to use __ieee754_ prefix */\r\n#define asinh __ieee754_asinh\r\n#define "
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/isnan.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_isnan.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/k_cos.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/k_cos.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/k_rem_pio2.c",
    "chars": 59,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/k_rem_pio2.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/k_sin.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/k_sin.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/k_tan.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/k_tan.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/ldexp.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_ldexp.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/log.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_log.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/log10.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_log10.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/log1p.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_log1p.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/modf.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_modf.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/pow.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_pow.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/rem_pio2.c",
    "chars": 59,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_rem_pio2.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/rint.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_rint.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/scalb.c",
    "chars": 56,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_scalb.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/scalbn.c",
    "chars": 57,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_scalbn.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/sin.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_sin.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/sinh.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_sinh.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/sqrt.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/e_sqrt.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/tan.c",
    "chars": 54,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_tan.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/FloatMathPlugin/tanh.c",
    "chars": 55,
    "preview": "#include \"ieee754names.h\"\r\n#include \"fdlibm/s_tanh.c\"\r\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/GStreamerPlugin/squeakAudioVideoPipeLineSignalInterface.c",
    "chars": 6201,
    "preview": "/*\n *  squeakAudioVideoPipeLineSignalInterface.c\n *  GStreamer\n *\n *  Created by John M McIntosh on 3/29/08.\n *  Copyrig"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/GStreamerPlugin/squeakAudioVideoPipeLineSignalInterface.h",
    "chars": 1410,
    "preview": "/*\n *  squeakAudioVideoPipeLineSignalInterface.h\n *  GStreamer\n *\n *  Created by John M McIntosh on 4/1/08.\n *  Copyrigh"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/HostWindowPlugin/HostWindowPlugin.h",
    "chars": 2937,
    "preview": "/* Host windows plugin header file\n * tim@sumeru.stanford.edu\n * All sizes are in pixels; convert from OS abstract units"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/IA32ABI/dabusiness.h",
    "chars": 2757,
    "preview": "/*\n *  dabusiness.h\n *\n *  Written by Eliot Miranda 11/07.\n *  Copyright 2007 Cadence Design Systems. All rights reserve"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/IA32ABI/ia32abi.h",
    "chars": 1523,
    "preview": "/*\n *  platforms/Cross/plugins/IA32ABI/ia32abi.h\n *\n *  Written by Eliot Miranda 11/07.\n *  Copyright 2007 Cadence Desig"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/IA32ABI/ia32abicc.c",
    "chars": 7571,
    "preview": "/*\n *  ia32abicc.c\n *\n * Support for Call-outs and Call-backs from the Plugin.\n *  Written by Eliot Miranda 11/07.\n *  C"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/InternetConfigPlugin/InternetConfigPlugin.h",
    "chars": 329,
    "preview": "int sqInternetConfigurationInit(void);\nint sqInternetConfigurationGetStringKeyedBykeySizeinto(char * aKey, int keyLength"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/Error.c",
    "chars": 552,
    "preview": "#include <stdio.h>\n#include \"jpeglib.h\"\n#include <setjmp.h>\n\nstruct error_mgr2 {\n  struct jpeg_error_mgr pub;\t/* \"public"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/JPEGReadWriter2Plugin.h",
    "chars": 606,
    "preview": "#include <stdio.h>\n/* Interface to JPEG code */\n#include \"jpeglib.h\"\n#include <setjmp.h>\n\nstruct error_mgr2 {\n  struct j"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/ReadMe.txt",
    "chars": 215,
    "preview": "\nProject Smarts - C Dynamic Link Library application README\n----------------------------------------------------------\n\n"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcapimin.c",
    "chars": 9121,
    "preview": "/*\n * jcapimin.c\n *\n * Copyright (C) 1994-1998, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcapistd.c",
    "chars": 5881,
    "preview": "/*\n * jcapistd.c\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jccoefct.c",
    "chars": 16400,
    "preview": "/*\n * jccoefct.c\n *\n * Copyright (C) 1994-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jccolor.c",
    "chars": 14848,
    "preview": "/*\n * jccolor.c\n *\n * Copyright (C) 1991-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's soft"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcdctmgr.c",
    "chars": 12469,
    "preview": "/*\n * jcdctmgr.c\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jchuff.c",
    "chars": 28222,
    "preview": "/*\n * jchuff.c\n *\n * Copyright (C) 1991-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's softw"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jchuff.h",
    "chars": 1575,
    "preview": "/*\n * jchuff.h\n *\n * Copyright (C) 1991-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's softw"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcinit.c",
    "chars": 2349,
    "preview": "/*\n * jcinit.c\n *\n * Copyright (C) 1991-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's softw"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcmainct.c",
    "chars": 9168,
    "preview": "/*\n * jcmainct.c\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcmarker.c",
    "chars": 17245,
    "preview": "/*\n * jcmarker.c\n *\n * Copyright (C) 1991-1998, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcmaster.c",
    "chars": 19889,
    "preview": "/*\n * jcmaster.c\n *\n * Copyright (C) 1991-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcomapi.c",
    "chars": 3110,
    "preview": "/*\n * jcomapi.c\n *\n * Copyright (C) 1994-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's soft"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jconfig.h",
    "chars": 5372,
    "preview": "/*\n * jconfig.doc\n *\n * Copyright (C) 1991-1994, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's so"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcparam.c",
    "chars": 21275,
    "preview": "/*\n * jcparam.c\n *\n * Copyright (C) 1991-1998, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's soft"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcphuff.c",
    "chars": 25115,
    "preview": "/*\n * jcphuff.c\n *\n * Copyright (C) 1995-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's soft"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcprepct.c",
    "chars": 12073,
    "preview": "/*\n * jcprepct.c\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jcsample.c",
    "chars": 18859,
    "preview": "/*\n * jcsample.c\n *\n * Copyright (C) 1991-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jctrans.c",
    "chars": 13977,
    "preview": "/*\n * jctrans.c\n *\n * Copyright (C) 1995-1998, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's soft"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdapimin.c",
    "chars": 12637,
    "preview": "/*\n * jdapimin.c\n *\n * Copyright (C) 1994-1998, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdapistd.c",
    "chars": 9348,
    "preview": "/*\n * jdapistd.c\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdatadst.c",
    "chars": 5119,
    "preview": "/*\n * jdatadst.c\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdatasrc.c",
    "chars": 7604,
    "preview": "/*\n * jdatasrc.c\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdcoefct.c",
    "chars": 25155,
    "preview": "/*\n * jdcoefct.c\n *\n * Copyright (C) 1994-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdcolor.c",
    "chars": 12962,
    "preview": "/*\n * jdcolor.c\n *\n * Copyright (C) 1991-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's soft"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdct.h",
    "chars": 7041,
    "preview": "/*\n * jdct.h\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's softwar"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jddctmgr.c",
    "chars": 8293,
    "preview": "/*\n * jddctmgr.c\n *\n * Copyright (C) 1994-1996, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's sof"
  },
  {
    "path": "vm/src/from_squeak/Cross/plugins/JPEGReadWriter2Plugin/jdhuff.c",
    "chars": 20866,
    "preview": "/*\n * jdhuff.c\n *\n * Copyright (C) 1991-1997, Thomas G. Lane.\n * This file is part of the Independent JPEG Group's softw"
  }
]

// ... and 1506 more files (download for full content)

About this extraction

This page contains the full source code of the smarr/RoarVM GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1706 files (39.0 MB), approximately 10.3M tokens, and a symbol index with 10485 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!