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:
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
- 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
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:
- 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:
- external primitives
- 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
* These files are identical across many platforms.
| 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.h||The 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.h||This header defines the attributes of a variety of platforms.|
| sqMachDep.h||This code is only required for the jitter version of Squeak.|
| sqUserPrims.c||A file for user primitives, none, so far. You can put some here.|
| sqBeDirectory.c||Directory 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.cpp||Output is currently working. Input not yet implemented.|
| sqBeSerialAndMIDIPort.cpp||Serial & MIDI primitives. MIDI input isn't done at all,
but output is close, could use some cleanup though.|
| sqBeAsyncFilePrims.c||Asynchronous file primitives. Not implemented, and not slated to be.|
| sqBeJoystick.cpp||Joystick primitives.|
| sqBeNetwork.cpp ||Networking support. Reference the Win32 VM source to see the code
this was based on.|
| sqBeApp.cpp||The main application class, a bunch of functions called by other parts
of the VM, and a bunch of global variables.|
| sqCopyBits.cpp||This file provide bit copying services to both BWindow & BDirectWindow
| sqBeWindow.cpp||This file implements the Squeak display via a BWindow/BView/BBitmap
| sqBeDirectWindow.cpp||This 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.cpp||This file implements routines that are shared in between
sqBeWindow.cpp & sqBeDirectWindow.cpp|
| sqBeView.cpp||The BView descendent that handles the main squeak display for both
the BWindow and BDirectWindow implementations.|
| sqBeMisc.cpp||Miscellaneous functions called by the interpreter.|
| sqBeIOPrims.cpp||Primitives 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.mk||make files used for building the executable files from their sources.|
| SoundCodecPrims-xp.mk||make files used for building PPC executable files from sources on an x86 machine.|
** These files are generated from code in Squeak itself that is written in a subset of
- Colin Sarsfield (firstname.lastname@example.org) - most of the BeOS specific part of
- Trey Bordeau (email@example.com) - 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 (firstname.lastname@example.org) - PPC port, fixes, testing, and benchmarking
- William Bull (email@example.com) - 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 (firstname.lastname@example.org) - some of this code is based on
his work with the Unix port
- Andreas Raab (email@example.com) - 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 (firstname.lastname@example.org) - 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
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
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 :-)