Squeak is a free Smalltalk implementation. Squeak for NeXTSTEP is a native NEXTSTEP front-end for the Squeak Smalltalk. NOTE: For downloading instructions see http://www.imaginet.fr/~pjb/develop/squeak/english/ Index: ====== Versions What's new in this version? Features of Squeak.app Compiling Wish list Licence Author Versions: ========= This is version 0.3d91 of the Squeak User Interface for NeXTSTEP 3.3. (It may run on OPENSTEP 4.2 too, you'll tell me). This version, like the previous ones, integrates the version 2.0 of the Squeak virtual machine. This release is distributed without the Squeak image. You can retrieve it from: http://squeak.cs.uiuc.edu/ Note that theorically, both the versions 2.0 and 2.1 of the image can be used with the version 2.0 of the virtual machine, but I've only tested the 2.0 image. I'll wait for about a month for bug reports (mailto:pjb@imaginet.fr), and then name it 'Squeak.app for NEXTSTEP version 1.0'. Then it'll be on OPENSTEP. What's new in this version? --------------------------- 0.3d91: * Now the Squeak.app wears the Squeak Icon (Yes, I know, it's one of the most outstanding improvment!-) * The binaries are compiled for these architectures: m68k i386 sparc hppa. However, I never tested them on i386, sparc, or hppa. Please try it on these architectures and tell me how it went. * A fat headless virtual machine is compiled and distributed in: nextstep/SqueakVM-2.0h-nextstep-3.3 It merely uses the sqXWindow.c main with the headless option. I've not even tested it, just compiled it on NeXT. That means that it does not use the NeXT defaults, but only the environment variables and command-line arguments. * All the usual Squeak parameters can be set either: - in the Info/Preference panel, or - as environment variables, or - as arguments on command-line invocation. The noTitle, fullScreen, sleepWhenHidden and mouseButton preferences are taken into account as soon as OK is clicked. Other options are enacted only on next launch. * fullScreen and noTitle options are handled. Unfortunately, I don't want to mess too much with the Smalltalk<->Objective-C interactions, so the Smalltalk objects are not informed when the "screen" size changes, or when the fullScreen option switches. So you have to use the 'restore display' item and the Set Full Screen On/Off items in the Smalltalk menu to synchronize their points of view. * There's a character conversion table from NeXT encoding to Macintosh encoding, found in the SqView.m source. * The interrupt key (Command-.) is implemented. All command keys are transmitted to Squeak but Command-q and Command-h that are dispatched to the NeXT application to allow going back to the NeXT environment even when the fullScreen option is on. This is done by removing all command-key equivalents but 'h' and 'q' from the NeXT menu. * I've added an optimized subclass of SqView that's used when we infer that a MegaPixelDisplay is available, fullScreen is ON, and 1, 2 or 8-bit depth is set in Smalltalk. In these cases, the Smalltalk bitmap is directly copied to the video memory (via /dev/vid0). On a NeXTstation Turbo, the display speed improvement measured with: F1:=nil. Transcript show:(Time millisecondsToRun: [F1:=Form makeStar.(1 to: 100) do:[:i|F1 display]])asString;cr. is given in this table: MegaPixel Window --------- --------- 1->2: 407 ms 927 ms 2->2: 912 ms 1437 ms 8->2: 1224 ms 1588 ms A MegaPixelDisplay is deemed available when: - it's a MC680x0 CPU, - there is exactly ONE screen, - its size is 1120x832, - its depth is 2 bit/pixel. However, the rowByte is assumed to be 1120/4; that's not true when (dma_chip==313), but this can be determined only in kernel space, meaning that a device driver should be written to detect it, unless the DKIOCGFBINFO ioctl call tells it, but who knows? (It's not documented anywhere). That's the joys of proprietary software. LONG LIFE GNU & LINUX! If you have rowByte problems with you NeXTstation, you may change the value used in SqViewMegaPixel +initialize, and please let me know. A similar subclass of SqView could be added for color screens, and they could be extended to deal with white-hardware PC, but I'll leave that as an exercice to the reader. 0.2d14: * The distributed sources can be compiled "out-of-the-box". * The full screen on/off implementation has been given a try... * The DEL key is mapped to BS for Squeak only interpret BS. Features of Squeak.app: ======================= You can configure in the Info/Preference panel: - all the usual parameters of Squeak, - the mapping of the modifiers and mouse button to the tree-buttoned Smalltalk mouse. Have a look at the source to check how non-exclusive configuration is handled. The preferences are saved as defaults: dwrite Squeak imagePath /local/src/squeak-2.0/pjb/pjb6.image dwrite Squeak 'NXWindow Frame SqueakScreen' '9 53 1057 766 ' dwrite Squeak heapSize 8388608 dwrite Squeak stackCacheEntries 16 dwrite Squeak fullScreen NO dwrite Squeak sleepWhenUnmapped YES dwrite Squeak noTitle YES dwrite Squeak redButton l dwrite Squeak yellowButton r dwrite Squeak blueButton lm The supported Smalltalk screen depths are: 1, 2, 8, 16 and 32-bit. The Smalltalk screen depths of 1 and 2-bit are mapped to a 2-bit bitmap before rendering on the NeXT screen. The Smalltalk screen depth of 8-bit is mapped to either 2, 8, 16 or 32-bit depending on the depthLimit of the window. The Smalltalk screen depth of 16-bit is mapped to a 16-bit bitmap before rendering on the NeXT screen. The Smalltalk screen depth of 32-bit is mapped to a 32-bit bitmap before rendering on the NeXT screen. When the fullScreen option is on with a MegaPixel Display, screen depths of 1, 2, and 8-bit are mapped fastly to the 2-bit screen depth, but 16 and 32-bit are mapped the same way than without the MegaPixel Display optimization, thru DisplayPostscript. The 1, 2, 4, and 8-bit Smalltalk screen depths are based on a fixed palette which is a color palette for 4 and 8-bit, while the 8-bit NeXT screen depth is a gray-level screen. Since one entry of the palette is used to mean `transparent', there's only 3 remaining gray level to be used for 2-bit deep screens. Note that I only have a black-and-white NeXTstation, so I have no idea of how the colors are rendered on color stations or on NeXTSTEP for Intel. The Smalltalk screen width is always a multiple of 32 pixels. The minimum size of the Smalltalk screen window is arbitrarily the Original Macintosh Screen Size: 512x342. (It seems that when the screen is smaller than the size of the Smalltalk menu, it cannot appear). ------------------------------------------------------------------- pascal@despina/p2[151] ../nextstep/Squeak.app/Squeak -version 2.0/6502 #22 Fri Aug 28 03:12:16 MET 1998 cc NEXTSTEP despina Lightning9I 3.3 68040 MC680x0 0.3d89 No user-defined primitives installed pascal@despina/p2[152] ../nextstep/Squeak.app/Squeak -help Usage: Squeak [] [] are: any option interpreted by the Application class (-NX...) -notitle turn off the Squeak window title bar -fullscreen occupy the entire screen -lazy go to sleep when main window unmapped -memory [mk] set initial memory size (default: 5m) -ccache set context cache size (default: 16) -version print version information,then exit Notes: defaults to 'squeak.image'. -ccache is merely ignored when the virtual machine has not been compiled with CCACHE. -fullscreen implies -notitle. When you use -notitle on NeXT, you should set the size of the window in the defaults, because you won't be able to move/size it: dwrite Squeak 'NXWindow Frame SqueakScreen' '8 48 1024 800' All these options can be better set from the Info/Preference panel; they are stored in the user's default database. ------------------------------------------------------------------- When you change the size of the window, or change the fullScreen or noTitle options from the NeXT Preferences panel, please use the Redisplay item in the Smalltalk menu to let the Display object learn new screen size. Compiling: ========== You need to have a gmake installed to be able to compile the Squeak part of the project. You may compile the whole project from the squeak-2.0 directory, with a mere: make clean # to clean everything. make develop-app # to compile a lean nextstep/Squeak.app make distrib-app # to compile a fat nextstep/Squeak.app make distribution # to clean and archive a distribution. Once the Squeak library has been compiled, you may edit-compile-debug cycle the Squeak NeXT application from ProjectBuilder with nextstep/PB.project. Wish list: ========== * Optimization for NeXTstation Color, and perhaps for NeXTDimention. (1) * Adding user primitives by dynamically loading. (2) * Bridge between Smalltalk objects and Objective-C objects. (2) * Upgrade the sources to OPENSTEP 4.2. (3) * Integrate version 2.2 of the virtual machine. (3) (1) I most certainly won't endeavor it. (2) I most probably won't endeavor it, but I would like. (3) I'll probably do that, if time permits, before the end of the year. Licence: ======== I can only speak for the NeXT front-end application, whose sources are found in the nextstep subdirectory. It's GPLed. Please check the Information panel in the application or the LICENCE.rtf file. Author: ======= __Pascal Bourguignon__ mailto:pjb@imaginet.fr http://www.imaginet.fr/~pjb/develop/squeak/english/ /*** README / Tue Sep 29 05:10:23 GMT+0200 1998 / PJB ***/