The BeSqueak Project

Porting Squeak--a Smalltalk-80 environment--to the BeOS
Home FAQ Status Project team Downloads Links


Welcome to the BeSqueak Project

rev 1/16/01 cps

NOTE: portions of this readme are out of date.

You must run BeSqueak the first time in Terminal. Use the following command line:

BeSqueakppc Squeak2.8.image
BeSqueakx86 Squeak2.8.image

After running BeSqueak once, you can launch BeSqueak by double-clicking on an image file provided that the image file's mime-type is set to "application/x-squeakimage".

Adjust the above if using different executable name/image name. The VM looks for the changes file in the same directory as the image, and the sources file in the same directory as the VM. (This allows you to have multiple image/changes pairs, but only one sources file.)

Note that if you just run the executable without any command line arguments you will see what arguments are available.

One usage note. When you resize the (BeApp) window, the Squeak view inside will not automatically resize to fill the new view area; you need to issue a "restore screen" command from the Smalltalk control menu. We're working on this problem, as well as others.

Please report changes/bugs/suggestions to the BeSqueak mailing list.

Check our web page for the latest links to team members, mailing lists, ftp sites, etc.

Known bugs

  • PPC sound has been reported to not be working properly - if anyone with access to a PPC machine would fix this it would be appreciated - I suspect it may be an endianness issue

Development info

Help is always welcome. Feel free to test / criticise / examine the VM and Squeak in general. Of course code contributions are always extra welcome :)

The project is pretty static these days, let me know if you need anything.

So far the three main people involved in this project, are Trey, Richard, and myself (Colin). I serve as the librarian / lead for the project. Trey has contributed the BDirectWindow code, and both of us have been experimenting with it / changing it (it is reasonably complete). Richard concentrates on the PPC port while Trey and I both tend to work the x86 port (Trey has access to PPC hardware though).

In order to build the binaries, execute the following in Terminal while in the source directory:


If you update header files or change flags in the makefiles, you will need to force a rebuild by deleting the appropriate object files.

To delete all object files, execute the following in Terminal while in the source directory:

make clean

To do:

  • Sound input still needs to be added
  • MIDI input / extension & fixup of MIDI output (output seems to work fine at this point, but could conform to the MIDI standard better)
  • research possible bug in display / mouse interaction -- now and then it seems like the display update occurs at the wrong coordinate -- I'm not sure if this is a VM bug or an image bug.
  • The following modules are currently not working or partially implemented:
    • sockets
    • external primitives
    • joystick/tablet
  • better support for server side networking - the networking could use some new Squeak primitives which are currently unimplemented. Using these will get around an old Squeak bug of not all back to back socket requested getting accepted.

Source files & descriptions

interp.c**The main interpreter. See ReadMe.Txt for details.
sq.h*The main Squeak header file.
sqOldSoundPrims.c**These are some old sound synthesis primitives.
sqSoundPrims.c**These are the newer version of the above.
sqMiscPrims.c**Miscellaneous primitives.
sqFilePrims.c*Primitives for synchronous file access.
sqPlatformSpecific.hThe name says it all. Right now this file defines a function that allows you to signal Squeak semaphores from a BeOS thread other than the interpreter thread. (these signals are queued and then signalled in the interpreter thread when it enters a primitive)
sqConfig.hThis header defines the attributes of a variety of platforms.
sqMachDep.hThis code is only required for the jitter version of Squeak.
sqUserPrims.cA file for user primitives, none, so far. You can put some here.
sqBeDirectory.cDirectory enumeration primitives. Right now these is just the same as sqUnixDirectory.c (I assume they both use POSIX functions). This could be changed to use native Be functions, but I don't know that there would be any benefit.
sqBeSound.cppOutput is currently working. Input not yet implemented.
sqBeSerialAndMIDIPort.cppSerial & MIDI primitives. MIDI input isn't done at all, but output is close, could use some cleanup though.
sqBeAsyncFilePrims.cAsynchronous file primitives. Not implemented, and not slated to be.
sqBeJoystick.cppJoystick primitives.
sqBeNetwork.cpp Networking support. Reference the Win32 VM source to see the code this was based on.
sqBeApp.cppThe main application class, a bunch of functions called by other parts of the VM, and a bunch of global variables.
sqCopyBits.cppThis file provide bit copying services to both BWindow & BDirectWindow display primitives.
sqBeWindow.cppThis file implements the Squeak display via a BWindow/BView/BBitmap combo.
sqBeDirectWindow.cppThis file implements the Squeak display via a BDirectWindow/BView combo with heavy support from sqCopyBits.cpp. This implementation provides a significant speedup over the sqBeWindow.cpp implementation.
sqBeSharedWindow.cppThis file implements routines that are shared in between sqBeWindow.cpp & sqBeDirectWindow.cpp
sqBeView.cppThe BView descendent that handles the main squeak display for both the BWindow and BDirectWindow implementations.
sqBeMisc.cppMiscellaneous functions called by the interpreter.
sqBeIOPrims.cppPrimitives dealing with I/O support, time, beep, exit.
b3d.h*3d primitives.
primitiveTable.decl**Will be used for JIT compiler. Not yet used.
sqADPCMPrims.c**Used for some sound compression related stuff.
SoundCodecPrims.mkmake files used for building the executable files from their sources.
SoundCodecPrims-xp.mkmake files used for building PPC executable files from sources on an x86 machine.
* These files are identical across many platforms.
** These files are generated from code in Squeak itself that is written in a subset of Smalltalk.


  • Colin Sarsfield ( - most of the BeOS specific part of the port
  • Trey Bordeau ( - R4 x86 & PPC port For his knowledge, regarding the BeAPI, and the Right Way To Do Things (tm) Work on performance improvements, and the BDirectWindow interface
  • Richard Peskin ( - PPC port, fixes, testing, and benchmarking
  • William Bull ( - for creating the full color BeSqueak icon
  • Serg Koren (Serg@VisualNewt.Com) - for starting the BeSqueak project (worked on a port of 1.23 different from this one)
  • Ian Piumarta ( - some of this code is based on his work with the Unix port
  • Andreas Raab ( - the code in sqBeNetwork.cpp is largely based on his work for the Win32 port
  • Whoever wrote MacMinimal.c - this file was a great starting point
  • Georg Gollmann ( - for his fix for the bug in the object memory that didn't allow it to work if malloc returned an address with the high bit set
  • Squeak Central - all the guys once at Apple and now at Disney that made this whole thing possible in the first place!
  • All those developers out there who have contributed to the Squeak project since its inception -- too numerous to list

Revision history

Changes added by version 1.1.1 1/16/2001

  • Fixed bug in Squeak 3D (aka Alice) where colors were not correct
  • Added some optional debugging code to sqBeSound.cpp

Changes added by version 1.1 1/2/2001

  • Brought interpreter code up to 2.8

Changes added by version 1.0 10/31/1999

  • Fix to BDirectWindow code that had caused lockup when Squeak window was closed from BeOS side in Alice
  • Brought interpreter code up to 2.6

Changes added by version 0.9 (beta) 7/19/1999

  • Rewrite of networking code - hopefully it should be easier to debug now.
  • Log window option added.

Changes added by version 0.8 (alpha) 4/23/1999

  • Drawing code cleaned up to be operationally the same as the Win32 implementation. This got rid of some redraw bugs. It also made the drawing perform worse statistically; however for most operations it feels faster. (genki--R4.5?--will provide some speed increases) Added "Defer Updates" preference.
  • brought up-to-date with 2.4a image. This included some bug fixes to the external primitive support.
  • changes to try help sqBeNetwork.cpp compile on PPC (no run-time fixes though)
  • moved from BeIDE .proj file for builds to shell script & makefiles
  • now images with appropriate mime-type can launch vm via double-click!

Changes added by version 0.7 (alpha) 3/20/1999

  • Changes to exit/quit code. Fixes a crash experienced during quit by PPC users.
  • Support for 1, 2, and 4 bit depths is back. Now supported by BDirectWindow as well.
  • BDirectWindow is now the default drawing mode. (instead of BWindow)
  • Addition of menu bar / about box - look for VM preferences / monitoring features to appear here
  • Addition of "Quit Squeak window saving?" confirmation dialog on exit
  • Cursor now changes to standard Be cursor outside of Squeak Display
  • FIX - Sources file is now looked for in the VM directory instead of the image directory
  • Cleanups to BWindow / BDirectWindow code. There is only one BView descendant class used now.
  • Some cleanup of compiler warnings. Note that portable portion of the VM (which is constant across platforms) still generates alot of warnings. I have no plans to change this.

Changes added by version 0.6 (alpha) 2/28/1999

  • Fixed deadlock bug that was causing BDirectWindow code to crash
  • Fixed some TCP/IP bugs; everything seems to work now; although calls to accept (server-side socket connections) are awful slow
  • TCP/IP code now caches listener socket (making some assumptions for you) let me know if this causes any bugs (it should eliminate the bug traditionally associated with Squeak)
  • Sound output is back and working (there is a noticable but minor lag upon first call upon start of sound player that wasn't there in R3)
  • Joystick support added
  • New icon thanks to William Bull
  • Serial support added
  • MIDI output mostly there, including output to the Headspace Software Synthesizer!

Changes added by version 0.5 (alpha) 2/18/1999

  • Support for Squeak 2.3
  • Fix to clipboard bug causing segment violation
  • Sound output disabled until revised for R4
  • BWindow based screen updates faster, however still in development
  • bitmap copying code now shared between BWindow & BDirectWindow code
  • some fixes to the TCP/IP support; but still needs cleanup / performance related fixes

Changes added by version 0.4 (alpha)

  • better support for sound output in R3; however, the sampling rate is wrong in R4
  • Squeak now has access to all command-line arguments
  • some in-development BDirectWindow support (thanks to Trey Boudreau)
  • some not quite functional TCP/IP support (a hacked up version of the Unix network source)
  • more performance enhancements to ioShowDisplay (esp. with Morphic)
  • more command-line options
  • some profiling code for benchmarking parts of the VM

Changes added by version 0.3 (alpha)

  • [partial] support for sound output
  • BeOS version & platform data returned to Squeak
  • better modifier key support (command, option, alt, shift) - things like Alt-A now work
  • better PPC support
  • clipboard support
  • prettier window resizing (fill in of non-Squeak space with white)
  • load/save window size in image
  • minor improvements to ioShowDisplay primitive

Changes added by version 0.2 (alpha)

  • better compiling for R4 (I've included Trey's changes; however, I am not sure if all of the new source that's been added is 100% compatible, but I have followed the pattern of his changes in it.)
  • a fix for the image name sometimes returning ""
  • more fixes to ioShowDisplay primitive (this _should_ get rid of all those segment violation errors)

Changes added by version 0.1 (alpha)

  • 2 & 4 bit color depth support
  • better compiling & linking under R4/gcc
  • 8 bit palette support
  • greatly increased reliability/speed (I haven't had this version hang, yet)
  • directory enumeration
  • command line parameter (image name)
  • support for the enter key
  • access to changes and sources files
  • a better chance of working on PPC?
  • Note Debugger>>openContext:label:context: has been 'fixed'. It had a bug in assuming that it could open the log file :-)