Make sure that when you use VMSTAR you use the command: $tar nm=xvf smtalk43.tar To install on VMS enter: $set def [.smtalk43.vmsmake] $@build_make $@make_startup $set command make $set def [-.smtalk.src] $make/makefile=makefile.vms Release 4.3 of Little Smalltalk for XWindows Note: This version has been built and tested on the following platforms: INTEL 386 (LINUX) INTEL 486 (SYSVR4) INTEL 486 (NEXT) CRAY XMP (UNICOS 6) SPARC 2 (SUNOS 4.1.3) AMDAHL (UTS 1.4.1) SYSV DECStation (ULTRIX 4.2) SEQUENT (DYNIX/ptx V2.1.0) SYSV ALPHA AXP (OSF/1) VAX (VMS 5.5-2) Origin: Little Smalltalk V3.04 and STDWIN for Xwindows V0.9.5 Little Smalltalk from Tim Budd STDWIN from Guido van Rossum I could not get the latest version of STDWIN 0.9.6 to work under any circumstances. Requirements: K + R compatible C compiler XWindows X.V11R4 or X.V11R5 8 MBytes of disk storage Installation: tar -xvf smtalk42.tar cd smtalk42 make zzzzz Where zzzzz can be: linux sunos ultrix scounix unicos uts sequent osf1 The Smalltalk image(systemImage) will be created in the smtalk42 directory along with the XWindow version of the Little Smalltalk interpretor(xst). Good Luck Tom McCune temccune@rockwell.com The following improvements have been made to Little Smalltalk and the Van Guido X window interface: Release 4.3 o Support for VMS o General bug fixes Release 4.2 o Fixes to the memory management that caused crashes when number objects exceeded the memory allocation block size of 6000 bytes. o Performance balance the multitasking system. o Integrate all platform code into one source code tar file. All platforms now have all fixes and new features. o Improvements to the makefile. o Stress test against over 33000 objects, e.g. input, parse, and process the objects. Passes with flying colors. wish I could display all of them at once in a browser window. Sorry, limitations of XWindows. o Add window edit feature. o Remove Window debugging code. My fixes appear to be working. o Add modified QuickSort to the Array class and add a primitive to speed it up. Release 4.1 o Improvements to the scheduler. Fixes of several problems related to the window management software. o Add sanity checks to the graphics primitives to prevent drawing conflicts. Release 4.0 o Clipping regions A problem in clipping regions manifested itself as highlighted text being redrawn incorrectly when an expose event occurred, .e.g. a partially covered Smalltalk window would find highlighted text clobbered when the window was exposed again. This was fixed by forcing a complete redraw of the window(no clipping). This was an aesthetic nuisance really, and I believe there could actually be a bug in XWindows since experimentation with the routines led me to believe that Guido knew what he was doing. o Scrollbars Scrollbars were not being added properly to text windows when the document size exceeded the window size as in the Workspace window. Actually, for text windows anyway, the call to update the document size was never being done. I added this to the routine terecompute (which is called as lines get added) and now you get scroll bars appropriately. o Horizontal Scrollbar The horizontal scrollbar was not being aligned properly which showed up on some workstations(SUN) but not others. The fix worked may it work for all workstations tested. Besides, the code was wrong. o Saveimage When the saveimage menu item is activated, selecting cancel would cause a core dump because nothing was returned from the routine. I added a return of the nilobject and changed Little Smalltalk to do nothing when a nilobject was returned (user did cancel after all). o Application Dictionary and Menu Item Created a global applications dictionary and matching menu item so one could create applications on the fly and activate them via the Workspace menu item. o Errors in handling the Windows The windows are reserved by placing themselves in an array. Then when the window is closed, a nil is stored in the array. Unfortunately, the check to store nil there is whether the window variable itself isNIL. Oops! This caused situations where opening and closing windows willy nilly could cause the close of a window to actually store a nil over anothers newly created window array item. This was validated by placing a couple of sanity checks in the system. Things appear very stable now. o Output interrupt Another nuisance related to XWindows was resolved in two ways. When printing to a text window, the printing would often just stop until the user "clicked" on the window. The Smalltalk interpretor has a loop counter to perform so many intructions for a Smalltalk process before allowing a yield to the Window system, e.g. wait-for-a-window-event. The process would then continue. This happened more often when numbers were printed. Further investigation revealed that conversion of integers to strings for printing was being done by Smalltalk code causing literally thousands of Smalltalk instructions to be executed(though quite correctly). To fix this, I added another primitive to perform a sprintf and return the resulting string object. The maximum steps allowed a Smalltalk program was also increased. The problem/nuisance still occurrs when a failure triggers a Smalltalk traceback. The Smalltalk traceback code must yield to the next process to update the process link pointers. Xwindows then gains control till a mouse event occurrs. The traceback then continues, albeit on whatever window you click on. o Multitasking Multitaksing was severely hampered by the above XWindow getevent problem. With that fixed, multitasking could be tuned to actually work. You could fork one Smalltalk code block and go on to others. o Sorted List Window as Browser Added sorted list browser for the class browser. o Problems with clicking on window while output is going While output was going to one window and another was clicked to start another task (or browse), the output would go to the new window. Yikes! This was fixed also. o Carriage Return displayed On some window systems(SUN), carriage return is displayed as a funky little symbol. I added code to not display Carriage Return. o Integer arithmetic All integers are now 32 bits, allowing for more objects. I have the maximum number of objects set to 64000. Be careful, all objects are intialized to nilobject at program startup. So choosing a larger number could result in a long wait before seeing your window. The arithmetic was changed to use double float arithmetic to check for overflow. Some may cry foul and want to use another more scientifically correct mult/carry/check-for-overflow method. I have been reviewing the latest Dr. Dobbs journal on arbitray precision arithmetic IEEE routines and I like what I see. But they are slow. Another choice would be to use GNU C as I understand that long long is supported as will the SUN compiler in the near future. o GNU C I have tried compiling and running the Little Smalltalk system with the SUNOS 4.1.1 c compiler on a SPARC and the GNU c compiler. Both provide the same results and pass the tests as provided with the system, which is encouraging. o DECstation with ULTRIX 4.2 Same as above. The only other change was use the mBlockAlloc macro in memory.h instead of the system mBlockAlloc which fails on the DECStation. o Syntax of Name Binding Name binding has been changed to support with the "<-" syntax as in some implementations or ":=" as in others. o Bag class Implementing a Bag class required only a few lines of Smalltalk code since a Bag is just a Set with no retrictions on duplicates. o Transcipt Window Adding a transcript window in Little Smalltalk is a rather trivial process. For example: In the Workspace enter: Transcript <- TextWindow new;title: 'Transcript';open Go to the menu and select do it. Your transcript window will appear. Then using the browser, select the print method for the string class and change printer to Transcript. From now on, print of any text will go to the transcript window. This saves deleting your output text from the Workspace menu when you just wish to repeat or modify the previous command. o addSubClass For those more adventurous, you might wish to change addSubClass to addclass as in other Smalltalk systems. This seems to work, but for now I felt it best to leave it so that it matches the documentation. o Futures BTrees and Sparse arrays There are enough primitives left over to implement such important things as sparse arrays, B+trees, and therefore virtual objects. I have most of the code to do this already but wish to be sure I do it right: simple fast, and without bugs. If nothing else, this could serve as a base for a better Dictionary container or Association (which is heavily used in Smalltalk). Streams Streams look fairly easy to implement. Better browser The class browser currently just displays all classes (not even sorted). With a little bit of work, the display could be made to collapse and expand or change to use indentation to display the classes as they are related.