** ANNOUNCING THE ALPHA RELEASE OF VERSION 2.1 OF GARNET. ** There are many new features and additions in this release. SUMMARY OF CHANGES FOR VERSION 2.1 ---------------------------------- We have added a significant number of new features to this version, including the release of C32 and its integration with Lapidary. We have also added a number of new gadgets, such as one for reading and saving Garnet objects; interactor support for animation; and full support for reading and writing X pixmap objects. In addition, we have corrected several bugs that were reported in version 2.0. This document contains a description of all the changes from version 2.0 to version 2.1. In summary, the primary changes are: * The spreadsheet object and constraint editor C32 is now ready for release. It allows Garnet objects to be viewed and edited using a spreadsheet-like interface. C32 was described in a paper presented at CHI. * Several bugs were fixed in Lapidary. In addition, Lapidary now uses C32. This makes it possible to edit objects and constraints created with Lapidary using a spreadsheet interface. * We have created new gadgets for saving and reading Garnet objects from a file, and pop-up option menus. Both come in Motif and Garnet looks-and-feels. * All button and menu widgets can now include arbitrary Garnet objects as the labels, in addition to text strings. This results from an extension to aggrelists to include arbitrary pictures. * It is now possible to have X pixmaps (color pictures) as first-class Garnet objects. Pixmap objects can be read and written to files. * The multi-graphics selection widget now supports many new features such as the ability to grow multiple objects, select all objects in a region, etc. * There is a new interactor, animator-interactor, which supports various forms of animation. * Garnet now supports modal windows, which can be specified with the slot :modal-p. These prevent input from going to any other windows, and are easier to use than priority-levels. In summary, the secondary changes are: KR: The function SCHEMA-P now returns T only for valid objects, i.e., objects that have not been destroyed. By default, KR functions such as G-VALUE now give more meaningful error messages when given illegal objects such as NIL. The behavior of the :override keyword to create-instance has been improved considerably. Formulas which used to depend on values that are overridden are properly invalidated. The macro gv now gives an error message if its first argument is a keyword. Usually, this results from using gv instead of gvl by mistake. destroy-slot now runs the invalidate demon before deleting the slot. This ensures that the Update algorithm sees the change and reflects it in the display. We have added two new macros, with-demon-enabled and with-demon-disabled, which allow finer control over which invalidate demons are executed. OPAL: The functions of the opal:gv- family, such as opal:gv-bottom, now behave as if a link was missing when the object they are given is NIL. The point-in-gob method now works appropriately for polygons and arcs, rather than just using the bounding-box. The circularities in dependencies for aggrelists were removed, so it is now easier to center an aggrelist in other objects with formulas. Opal parses the ":0.0" part of the DISPLAY environment variable, in case it is not the default ("0.0"). This environment variable is used by the X server to tell which display is being used. Postscript printing can now handle multiple windows, and is more robust. The cursor multi-text object gadget now scrolls the text so the cursor remains visible. If the cursor is pulled outside the window that displays the text, the window is scrolled continuously. INTERACTORS: The two-point interactor, text interactor, and polyline-creator now accept the same gridding control as the move-grow interactor. The button-interactor now supports auto-repeat using the animator-interactor (but only under Allegro or Lucid). GADGETS: Scrolling windows now have a new function to scroll the window so a given rectangular area is visible. The arrows on scroll bars and sliders will now auto-repeat if you hold the mouse button down on them (but only under Allegro or Lucid). Releasing the mouse button outside a menubar now makes the menubar go away. The functions Pop-Up-Win-For-Prop, Pop-Up-Win-Change-Obj, and Pop-Up-Win-Change-Items all take an optional modal-p final parameter. DEMOS AND UTILITIES: New demo demo-animator shows off how to make an animation, and demo-pixmap is a kind of pixmap editor. Garnetdraw has been substantially upgraded by using the new multi-graphics-selection and read and save gadgets, and it also supports gridding. GILT: The functions Gilt:show-in-window and Gilt:show-in-window-and-wait now take the parameter modal-p. LAPIDARY: Lapidary now uses so-called link parameters, i.e., slots that constraints use to reference other objects, and which may change with each incarnation of an object. The parameters menu has been extensively revised to make it work with aggrelists and link parameters. Lapidary no longer requests anything from the Lisp listener. The interactor menus now disappear when one of the action buttons has been hit. Lapidary-generated files are much smaller and more readable, because formulas that should be inherited are no longer dumped. CONTRIB: New contributions include a set of functions that let the user provide input (such as Lisp expressions) and handle errors that might occur during evaluation. DOCUMENTATION: The new Garnet manuals now use embedded postscript pictures instead of bitmaps, so the manuals should be much smaller files and quicker to print. HOW TO GET VERSION 2.1 ---------------------- Below are FTP instructions for V2.1. It is basically the same as always, except the software is in the subdirectory "alpha". -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- Instructions for Retrieving the Garnet Software August 27, 1992 V2.1 ALPHA RELEASE These instructions are for the ALPHA RELEASE of version 2.1 of Garnet. This software is still under testing, so you might want to wait for the official release if that makes you nervous. The alpha release does not yet have a complete manual, so you can retrieve the CHANGE DOCUMENT from the alpha/doc directory and print it, to be used with the official V2.0 manual which is in the top-level doc directory. If you cannot print out the change document, please send a check for $10 made out to "Carnegie Mellon University" to me. If you have trouble printing the change document, some people have reported that it works better to change the top line of each postscript file from %!PS-Adobe-2.0 to be just %! The following assumes you run Unix and can FTP from CMU. If you are running Garnet from CMU, or if you have access to AFS, you can access Garnet directly on the afs servers. The alpha release of Garnet is stored in /afs/cs.cmu.edu/project/garnet/alpha/src /afs/cs.cmu.edu/project/garnet/alpha/lib We are keeping binaries of the official release version, and the current version under test (which might be LESS stable than the alpha version). The binaries are in the test subdirectory. The new version of Garnet-Loader will try to choose the correct binary format. If you are using a Sparc Station to run Allegro, CMUCL, or Lucid, or you are using a DECstation to run Allegro, or you are using an HP to run Lucid, then you can load garnet with (load "/afs/cs.cmu.edu/project/garnet/test/garnet-loader") If one of these lisps works for you, then you can skip the rest of these instructions. For non-CMU users, or people with other types of machines and/or lisps, you will need to FTP the software and compile it yourself. The Garnet software and documentation takes about 22 megabytes of disk space: Source code: 5 megabytes Binaries (actual size depends on your lisp): about 9 megabytes Lib: 0.1 megabytes Documentation: (just change document) 1 megabyte Therefore, you first need to find a machine with enough room on the disk, and then create a directory called garnet wherever you want the system to be: % mkdir garnet (If you already have a copy of Garnet, you might want to move the old contents of the garnet directory somewhere, in case you need to go back. Otherwise, delete all the contents of the garnet directory.) Then, cd to the garnet directory. % cd garnet Now, ftp to a.gp.cs.cmu.edu (128.2.242.7). When asked to log in, use "anonymous", and your name as the password. % ftp a.gp.cs.cmu.edu Connected to A.GP.CS.CMU.EDU. 220 A.GP.CS.CMU.EDU FTP server (Version 4.105 of 10-Jul-90 12:07) ready. Name (a.gp.cs.cmu.edu:bam): anonymous 331 Guest login ok, send username@node as password. Password: 230 Filenames can not have '/..' in them. Then change to the garnet and alpha directory and use binary transfer mode: ftp> cd /usr/garnet/alpha ftp> bin The files have all been combined into TAR format files for your convenience. These will create the appropriate sub-directories automatically. We have both compressed and uncompressed versions. For the regular versions, do the following: ftp> get src.tar ftp> get lib.tar ftp> get doc.tar To get the compressed version, do the following: ftp> get src.tar.Z ftp> get lib.tar.Z ftp> get doc.tar.Z Now you can quit FTP: ftp> quit If you got the compressed versions, you will need to uncompress them: % uncompress src.tar.Z % uncompress lib.tar.Z % uncompress doc.tar.Z Now, for each tar file, you will need to "untar" it, to get all the original files: % tar -xvf src.tar % tar -xvf lib.tar % tar -xvf doc.tar This will create subdirectories will all the sources in them. At this point you can delete the original tar files, which will free up a lot of disk space: % rm *.tar Now, copy the files garnet-loader.lisp, garnet-compiler.lisp, garnet-prepare-compile.lisp, and garnet-after-compile from the src directory into the garnet directory: % cp src/garnet-* . The file garnet-loader.lisp contains path names for all the parts of garnet. You will now need to edit garnet-loader.lisp in an editor, and set up path names for all the parts of Garnet. Comments in the file will direct you how to do this. At the top of the file are two variables you will need to set: Your-Garnet-Pathname and Your-CLX-Pathname. These are used for all the :external branches of the loader. % emacs garnet-loader.lisp (or whatever editor you use) NOTE: Many people running Sun Common Lisp or Lucid Common Lisp V4.0 on Suns version 4.0 have reported a problem with the multiple process code in Garnet. This is due to a bug in the Lisp. Upgrading to version 4.1 of Lucid will fix this problem. Or else, please edit the line in Garnet-Loader that sets launch-process-p to make it be NIL if you are using this version of Lucid on Suns. As described in the manual and tour, you will then need to run (inter:main-event-loop) explicitly at various times (but not when running the demos since they run it for you). Lisp requires very large address spaces. We have found on many Unix systems, that you need to expand the area that it is willing to give to a process. The following commands work in many systems. Type these commands to the C shell (csh). You might want to also put these commands into your .cshrc file. % unlimit datasize % unlimit stacksize Note: If you are running OpenWindows from Sun, you will need to add the following line to your .Xdefaults file to make text input work correctly: OpenWindows.FocusLenience: True Also, to compile or load Garnet, the Unix environment variable DISPLAY must be set correctly. Typically, the variable will be set with something like unix:0.0. If you are running on a remote machine different from the one you want the windows to appear on, you can do something like: setenv DISPLAY mymachine.garnet.cs.cmu.edu:0.0 The setenv call might be put in your .login file. You can check the value of the DISPLAY variable (note it must be in all capitals), using echo $DISPLAY There is more information on the DISPLAY variable in the V2.0 full manual on page 163. Now, you will need to compile the Garnet source to make your own binaries. This is achieved by loading the compiler scripts. There is more information on compiling in the full V2.0 reference manual on page 9: lisp> (load "garnet-prepare-compile") lisp> (load "garnet-loader") lisp> (load "garnet-compiler") Now Garnet is all compiled and loaded, so you can run Garnet code. To set up for the next time, however, it is best to quit lisp now, and run a shell script to move all the binaries to the correct places. If your sources are not in a directory named garnet/src or your binaries should not be in a directory named garnet/bin, then you will need to edit garnet-after-compile to set the directories. Also, if your compiler produces binary files that do not have one of the following extensions, then you need to edit the variable CompilerExtension in garnet-after-compile: ".fasl", ".lbin", or ".sbin". Otherwise, you can just execute the file as it is supplied (note: this is run from the shell, not from Lisp). You should be in the garnet directory. % csh garnet-after-compile Now you can start lisp again, and load Garnet: lisp> (load "garnet-loader") Full instructions for how to load and then run Garnet are in the reference manual on page 10. You might now want to read the introductory material in the manual, and then run the "tour" and read the "tutorial". Thanks again for your interest in Garnet, and we hope that it works well for you.