Squeak SmalltalkJoker Squeak Smalltalk : Image VM OS Application : prevnext UNIX Startup Script

Okay, I spent some time the last couple of weeks thinking about how to 
make typing "squeak" by itself do something sensible. This message 
includes a copy of the resulting script, a copy of its man page, and 
the rationale behind it all.

The main goal was that a new user can type "squeak" and get the 
expected behavior.  They should not get a lecture about the proper 
invocation. They should not be given a lesson on image files and 
changes files. They should jump right into the Squeak world and be 
ready to play with the *cool* stuff, which is etoys, morphic, FM 
synthesis, and so on.

This turns out to be nice for experienced users, too, so the script 
tries to accomodate them as well.  Just because you know how to 
install files manually from /usr/share/squeak doesn't mean you have to 
or want to.  But experienced users would like to be able to manage 
multiple image files, would like to specify extra VM parameters, and 
even would like to pass in arguments to their images.

Existing users are used to typing "squeak foo.image".  I thought long 
about this situation, but in the end, it is so simple to support, and 
it is such a common thing to want, that I added a special case for it. 
More complex command lines require the image to have an explicit 
-image argument.  For example:

 squeak -memory 100m -image foo.image

I ended up rejecting four alternatives here:

 1. The script could know how to parse every VM option, and thus 
    reliably pick out the image name.  Since the options are 
    irregular, however, this is a lot of work.  Further, the VM 
    options are not fixed, which means there is an arms race between 
    the script and the VM.

 2. The VM options other than the image could be preceded by "--".  
    This makes the command lines longer, however, and is especially 
    bad if you try to pass arguments to the image: squeak foo.image -- 
    -- arg1 arg2 Yuck!  One "--" is bad enough, and two is terrible.

 3. There could be a special option for VM arguments, e.g: squeak -vm 
    -memory,100m This is my favorite approach conceptually, because it 
    is unambiguously parsable and because most users should not be 
    entering VM arguments all the time.  However, in practice, I know 
    I have typed "squeak -memory 100m" too many times to be happy with 
    this.  Plus, people who use Squeak on machines without this script 
    (assuming that such machines continue to exist :)) will find it 
    weird.

 4. The VM arguments could be regularized, so that they may be 
    detected algorithmically.  I like this approach a lot, but 
    politically and practically it seems difficult to make happen at 
    this point. It was a close call between these five options.  If 
    anyone has a strong opinion I could certainly be swayed to change 
    it. A final consideration was that people would like to be able to 
    pass arguments to the squeak image.  This is supported just like 
    with the VM: you can either put in an explicit "--", or you can 
    just stick them at the end of the command line if you think 
    neither the script nor the VM will not get confused by them.

Other notable little things:

 1. -image can be used along with auto-installation.  If you do 
    "squeak -image temp" then the script will install squeak into 
    temp.image and temp.changes if those files do not already exist.  
    This is a tiny thing I've *long* desired from inisqueak.

 2. In addition to gzipped images, the script allows bzip2 and 
    uncompressed images.  Also, the changes file is optional now; the 
    script will happily install and run a bare changes-less image 
    file. That's all.  Comments welcome.  If there are a lot of flying 
    tomatoes I'll change it all back in the next update.

Lex

------------- man page ----------------------- SQUEAK(1)

SQUEAK(1) NAME squeak -- Squeak computer authoring system

SYNOPSIS squeak  [filename] [-install | -list  | -l  | -run ] 
[-image file- name] [-verbose  | -v ]  [vm options] [-- image options]

DESCRIPTION The squeak command starts Squeak,  a computer authoring 
system.   No arguments  are  necessary; typing  squeak alone should 
initialize any files you need in the current directory and then start 
Squeak. Squeak  uses  a few  files  in the  current  directory.    The 
file squeak.image  holds  the objects representing the entire state of 
your world, including things such as open windows, a class hierarchy, 
tex- tual notes, prototype objects, and diagrams. The file 
squeak.changes holds a  log  of  any  program code you  have   
written. Finally, SqueakV*.sources  files are symbolic links to 
system-wide sources files holding program code that is common to all 
Squeak worlds.

OPTIONS

       -install  Run Squeak, but first initialize  the present 
        directory  if there are  files missing.  If there is a choice 
        of images to install, then choose automatically. No files will 
         be  over- written.  This option gives the default behavior.
       -l
       -list  Behave as if -install were specified, except that if an 
        image file is to be installed, let the  user choose  from  a  
        list which image to install.
       -run  Do not install any files.  Either run Squeak, or fail.
       -image filename Instead of using squeak.image to save the state 
        of the world, use filename. Specifying the .image extension on 
        filename is optional.  The name of the changes file to use 
        will be deter- mined automatically.
       -v
       -verbose  Explain what files are being installed. vm options 
        Any unrecognized options are passed directly to squeakvm.
       -- image options Any options following a  double-hyphen are  
        passed  to  the Squeak world as it resumes.  By convention, 
        many worlds treat the first such option as the name of a file 
        to load and  exe- cute. For convenience, an image may also be 
        specified as the first argument. That is, the commandline 
        squeak filename args is treated  the same  as squeak -run 
        -image filename args. ENVIRONMENT SQUEAKVM  The  command  to 
        use for the virtual machine. The default is the first squeakvm 
        in PATH. SQUEAK_IMAGE_DIR The directory holding available 
        Squeak  images  to  install. The default is /usr/share/squeak. 
        SQUEAK_IMAGE The   filename   of the image  to  run.   The  
        default  is squeak.image. FILES /usr/share/squeak/*.image 
        /usr/share/squeak/*.changes Image and changes files that may 
        be installed.  They may also be  compressed with gzip(1) or 
        bzip2(1), so long as an exten- sion of .gz or .bz2 is added. 
        /usr/share/squeak/squeak.image 
        /usr/share/squeak/squeak.changes The default image and changes 
        files  to  install.   Typically these are symbolic  links.  If 
        they are links to compressed files, then they should have .gz 
        or  .bz2  exten- sions matching the files they link to. 
        /usr/share/squeak/SqueakV?.sources Source files. SEE ALSO 
        squeakvm(1) AUTHOR This manual page was written by Lex Spoon 
        (lex_at_debian.org). Permission is granted to copy, distribute 
        and/or modify this document in any way. SQUEAK(1)