ToCDocOverviewCGDocRelNotesIndexPermutedIndex
Allegro CL version 6.2
Significantly revised from 6.1

Release Notes for Allegro CL 6.2

This document contains the following sections:

1.0 Introduction
2.0 All pre-6.2 Lisp compiled files must be recompiled (old fasl files will not load)
3.0 Release Notes for installation
4.0 Release notes for specific platforms
   4.1 Compaq Alpha running Tru64: default stack size should be increased
   4.2 Mac OS X notes
      4.2.1 Increasing stack size on Mac OS X
      4.2.2 Building shared libraries on Mac OS X
   4.3 Heap start locations
5.0 Release Notes for the base Lisp
   5.1 New features in the base Lisp
   5.2 Non-backward-compatible changes in the base Lisp
   5.3 Other changes in the base Lisp
   5.4 Base Lisp platform-specific information
6.0 Release Notes for CLIM
7.0 Release Notes for Common Graphics (Windows only)
   7.1 Information on avoiding deadlocks in Common Graphics applications
   7.2 Non-backward-compatible changes in Common Graphics
   7.3 Other changes in Common Graphics
8.0 Release Notes for AllegroStore
   8.1 Non-backward-compatible changes in AllegroStore
   8.2 Other changes in AllegroStore
9.0 Release notes for Orblink
   9.1 Portable Object Adaptor (POA) in Allegro CL 6.2
10.0 Documentation modifications in Allegro CL 6.2
11.0 Availability of CLX for Allegro CL
Appendix A. cl:rename-file and excl:rename-file-raw
Appendix B. Common Graphics bug fixes and minor enhancements


1.0 Introduction

This document provides the release Notes for release 6.2 of Allegro Common Lisp and related products. The sections describe the release notes for the various components (Allegro CL and related products). Each section is divided into non-backward-compatible changes (that produce different behavior in release 6.2 compared to release 6.1) and changes unrelated to backward-compatibility. Note that a bug fix is not considered a backward-incompatible change even if it does result in changed behavior because the previous behavior was erroneous.

You may wish to look at the 6.1 Release Notes, included in this distribution as the file version-61-release-notes.htm

This document describes the changes, major and minor, from 6.1 to 6.2. Please look particularly at these sections:

If you notice changed or unexpected behavior with an operator, variable, or facility, search for its name in this document to see whether there is an entry concerning it.



2.0 All pre-6.2 Lisp compiled files must be recompiled (old fasl files will not load)

fasl files (compiled Lisp files) created by releases of Allegro CL prior to 6.2 will not load into Allegro CL 6.2. (Allegro CL 6.2.beta files will load.) All such files must be recreated by compiling the associated Lisp source files. An error will be signaled if Lisp attempts to load an older, incompatible fasl file.



3.0 Release Notes for installation

  1. Version 6.2 uses the 6.1 installation procedure: installation is described in installation.htm.
  2. The distribution includes 8 bit and 16 bit character images (this information is repeated from the 6.1 Release Notes). Allegro CL 6.2 has images that support 8 bit characters only, or 16 bit characters only. It is our expectation that most users will use the 16 bit images. Executables supplied with the distribution either have or do not have `8' in the name. Those with 8 in the name (mlisp8 and alisp8, e.g.) support 8 bit characters. Those without a number in the name support 16 bit characters. Image (dxl) files also come in 8 and 16 varieties. Again, 8 in the name means 8 bit character support. Character support for images and executables must match. Trying to start an executable with the wrong type of image fails.
  3. No prebuilt Allegro Composer images in the distribution (this information is repeated from the 6.1 Release Notes). To create an Allegro Composer image, start Allegro CL and load buildcomposer.cl. That will produce composer and composer.dxl, or composer8 and composer8.dxl. Allegro Composer is available on Unix only.
  4. No prebuilt Allegro CLIM images in the distribution (this information is repeated from the 6.1 Release Notes). To create a CLIM image, start Allegro CL and load buildclim.cl. That will produce clim and clim.dxl, or clim8 and clim8.dxl.


4.0 Release notes for specific platforms

Allegro CL 6.2 is known to work with the following operating system versions.

Allegro CL 6.2 will typically work with OS releases that come out after Allegro CL 6.2 was released. If you have a problem with a later release, please contact bugs@franz.com. See Where to report bugs and send questions in introduction.htm for information on reporting bugs and problems.


4.1 Compaq Alpha running Tru64: default stack size should be increased

The default stack size limit on an Alpha is 2 Megabytes, which is too low for normal stack overflow handling. Doing

 limit stacksize unlimited

in a csh shell seems to allow up to 16 or 32 Mb, and users can run that command before running Allegro CL. (That command could be put into a .cshrc file.)

However, that only solves the problem for Allegro CL processes that are started from within that shell. You can also change the default for the machine as a whole by doing something like the following. (This procedure is provided as an example of what might work. Please check your Tru64 system documentation or contact your Compaq service representative for the precise instructions.)

The procedure described here is best performed by a system administrator or similarly trained person. The vmunix file created and copied at the end is the UNIX kernel. Modifying it incorrectly or corrupting it can have serious consequences.

1. Log in as root. You must be root (or have superuser privileges) to perform most of the following operations.

2. Change into the /sys/conf/ directory.

  prompt# cd /sys/conf

3. Edit the file whose name is the machine name, which we will call MACHINE_NAME, as follows. (Such a file typically exists after normal Tru64 Unix install. If the file does not exist, the System Administrator will have to create one.

Change the line 

           dflssiz         2097152
to
           dflssiz         8388608
or
           dflssiz         16777216

The value of dflssiz may already be different than 2097152, which is 2 megabytes -- (* 2 (expt 2 20)). The new suggested values are 8388608, which is 8 megabytes and a good value for 32-bit Lisps, or 16777216, 16 megabytes and a good value for 64-bit Lisps.

4. Run /usr/sbin/doconfig as follows (recall that MACHINE_NAME is the file in /sys/conf whose name is the machine name):

 prompt# /usr/sbin/doconfig -c MACHINE_NAME

You should see output similar to:

*** KERNEL CONFIGURATION AND BUILD PROCEDURE ***

Saving /sys/conf/MACHINE_NAME as /sys/conf/MACHINE_NAME.bck

Do you want to edit the configuration file? (y/n) [n]: n


*** PERFORMING KERNEL BUILD ***
	Working....Thu Oct  4 09:58:16 PDT 2001

The new kernel is /sys/MACHINE_NAME/vmunix

5. Copy the new kernel to / with a command like the following

prompt# mv /sys/MACHINE_NAME/vmunix /

6. Reboot the system.


4.2 Mac OS X notes

Allegro CL 6.2 is not supported on Mac OS X version 10.0. You must use version 10.1.

There are two other issues:

  1. Section 4.2.1 Increasing stack size on Mac OS X
  2. Section 4.2.2 Building shared libraries on Mac OS X

4.2.1 Increasing stack size on Mac OS X

The default stack size limit on a Mac OS X machine (apparently 512 Kbytes) is too low for normal stack overflow handling. Doing

limit stacksize unlimited

in a csh shell seems to allow up to 16 or 32 Mb, and users can run that command before running Allegro CL. (That command could be put into a .cshrc file.)

However, that only solves the problem for Allegro CL processes that are started from within that shell. You can also change the default for the machine as a whole by doing something like the following. (This procedure is provided as an example of what might work. Please check your Mac OS X system documentation or contact your Apple service representative for the precise instructions.)

The procedure described here is best performed by a system administrator or similarly trained person. The /etc/rc file edited during the procedure is key to correct operation of the Operating System. Modifying it incorrectly or corrupting it can have serious consequences.

1. Log in as root. You must be root (or have superuser privileges) to perform most of the following operations.

2. Get access to the command line shell on the computer. This can be accomplished by launching the Terminal application.

3. Open up the file /etc/rc with a text editor.

4. Add the following lines near the top of the file (the values shown, 8m and 10m, should be suitable for Allegro CL applications):

 
limit stacksize 8m
limit datasize 10m

The actual contents of the file differ on different machines and setups. Here is an example of a suitable location: just before the following lines:

    ##
    # Handle arguments passed from init.
    ##

    BootType=$1; shift;

    if [ -z "${BootType}" ]; then BootType="multiuser"; fi

5. Save the file /etc/rc.

6. Reboot the machine.


4.2.2 Building shared libraries on Mac OS X

Building shared libraries

Building shared libraries on Mac OS X in foreign-functions.htm describes how to create a shared library suitable for loading into Allegro CL. We have determined that the -flat_namespace to the ld used to create the shared library is necessary, as shown in the linked section.


4.3 Heap start locations

When building large new images, it is often useful to specify Lisp Heap and C-heap start locations. See the discussion of the lisp-heap-start and c-heap-start keyword arguments in Arguments to build-lisp-image 2: defaults not inherited from the running image in building-images.htm. Here are the initial locations (called `bases') in Allegro CL 6.2 as delivered. Values are Hexadecimal integers.

Operating System Lisp base C base
Tru64 32-bit 0x30000000 0x54000000
Tru64 64-bit 0x1000000000 0x2000000000
FreeBSD 0x10000000 0x64000000
HP-UX 32-bit 0x10000000 0x64000000
HP-UX 64-bit 0x8000001000000000 0x8000002000000000
Linux (x86) 0x71000000 0xa0000000
Linux (PPC) 0x40000000 0x74000000
Mac OS X 0x30000000 0x64000000
Windows 0x20000000 0x54000000
AIX 0x30000000 0x64000000
IRIX 0x30000000 0x64000000
Solaris 32-bit 0x4000000 0x54000000
Solaris 64-bit 0x1000000000 0x10000000000


5.0 Release Notes for the base Lisp

This main section contains three subsections: one on new features (Section 5.1 New features in the base Lisp), one on changes which are not backwards compatible and so may require code changes, (Section 5.2 Non-backward-compatible changes in the base Lisp), and one on miscellaneous changes Section 5.3 Other changes in the base Lisp).


5.1 New features in the base Lisp

We have added a number of new capabilities to Allegro CL. Here we give links to the documentation of the new features.

  1. XML Remote Procedure Call module: This module implements classes and functions to support the XML-RPC protocol for remote function calls through HTTP connections. The protocol is described in detail on the XML-RPC Home Page at http://xmlrpc.com/. This page also lists public XML-RPC servers and many community links.

    This implementation of XML-RPC is separate and independent from the Lisp RPC implementation in the aclrpc module. The Lisp RPC module is more appropriate for closely coupled applications on one processor or on a local area network. XML-RPC is more appropriate for occasional contact between applications separated by large distances and by firewalls.

    The module is described in two text files in the xmlrpc/ subdirectory of the Allegro CL distribution: xml-rpc.txt and readme.txt.

  2. GTK interface (Linux and Solaris): GTK is a graphics toolkit for X windows on various UNIX machines (and on Windows). Allegro CL 6.2 has an interface to GTK, available so far on Linux and Solaris machines. See readme.txt in the gtk/ subdirectory of the Allegro CL distribution for information.
  3. Multiprocessing binding model has changed Allegro CL 6.2 now uses a wide binding version of the shallow binding model. This allows for faster process switches and lays the groundwork for true multithreading. The user-visible changes are few, the most prominent being an association of each process with a binding index. The binding index is displayed in the printed representation of process objects, in trace output, and in lists of active processes. See Wide binding (both models) in multiprocessing.htm.
  4. You can now specify function objects as things to trace. The functions ftrace and funtrace each accept a function object (as well as a function name) as arguments. See Tracing function objects in debugging.htm.
  5. Support for bas64 encoding. Base64 is a standard encoding of 64 characters (lowercase and uppercase letters, numerical digits, and + and /) using 6 bits per character. See Base64 Support in miscellaneous.htm for information on Base64 and Base64 support in Allegro CL.

5.2 Non-backward-compatible changes in the base Lisp

  1. New variable *print-circle-gravity*. The new variable *print-circle-gravity* acts with respect to *print-circle* as *pprint-gravity* does with *print-pretty*: no Allegro CL code sets the value of *print-circle*. Instead, Allegro CL code binds it where necessary to the value of *print-circle-gravity*, and *print-circle-gravity* is only set in two places: initially to nil and in the :pprint module to t.
  2. Change to rpc-do-request. The new security features in RPC have required a change to rpc-do-request which makes it incompatible with the 6.1 release: there is now an additional required argument which is the passcode (or nil if no passcode is used).
  3. Sockets are now created with the small-packet delay algorithm (the Nagle algorithm) turned off. You can turn it on by specifying :nodelay nil to make-socket or to set-socket-options. (The default value for that argument has been changed from nil to true. The delay (which allows bundling of messages) is rarely necessary with modern machines. You may notice a significant increase in network throughput in your application if your application sends small packets of data. Setting the value to nil should only be necessary when the network is very slow.
  4. Debugging arguments to build-lisp-image and generate-application changed. The ability to debug image builds has been improved, particularly on UNIX (as described here), but the changes required non-backward compatible modifications. The debug-on-error, exit-after-image-build, and wait keyword arguments to build-lisp-image and generate-application are no longer supported. An error is signaled if they are specified. In their place is a new keyword argument build-debug. It accepts values t (meaning provide extra debug information, but not interactively), :interactive (meaning allow interactive debugging of the build), and nil (meaning do not provide extra debug information -- this option is intended for batch builds). The default is t. See Debugging an image build problem or failure in building-images.htm for more information.

    The argument :dribble-file has been renamed :build-output. The argument :internal-debug has been renamed :build-input. The old names are accepted for backwards compatibility, but it is an error to specify a value for both the old and the new name.

  5. Patches are loaded in latest-first order and there are consequential changes to defpatch and load-patches. In release 6.1 and earlier, patch files were loaded earliest version first, with all later versions loaded (only the latest version should be a valid patch file, the rest should be superseded). In 6.2, patches are loaded latest version first, and earlier versions are looked at only if the latest version does not load fully, either because it is withdrawn or because the license does not allow the loaded of the later version or whatever. Because loading is in latest-first order and stops when a file is fully and successfully loaded, there is no need for superseded patches and that patch marking is no longer supported. The withdrawn marking now refers to single files rather than a patch as a whole, so if a withdrawn patch is seen, earlier versions that are now withdrawn are looked for and loaded if present.

    In general, this change should be transparent to Allegro CL users and requires only minor changes to application patches provided for users of applications written in Allegro CL. Patches for applications are described in Patching your application after delivery in delivery.htm. Patches for Allegro CL products are described in Patches in introduction.htm. See also defpatch and load-patches.

  6. net.rpc:export-remote-symbol now has three required arguments instread of two. export-remote-symbol takes three required and accepts two (new) optional arguments. In release 6.1, it took two required arguments only. The additional (first required) argument must be an instance of an rpc-port or of rpc-port-server. The generic function can now specialize on the type of the first argument. This allows keeping information in tables associated with each connection, rather than in a single table as was done in release 6.1.
  7. rename-file is now ANSI conformant. In release 6.1 and earlier, rename-file improperly depended on the value of *default-pathname-defaults*. For typical values of that variable, when the arguments are relative pathnames, rename-file did not place the result file in the correct (ANS-specified) directory. Further, it did not return a logical pathname when the second argument was a logical pathname. In release 6.2, rename-file works as specified by the ANS.

    This is put in the non-backward compatible section because the previous, incorrect behavior was reasonable and many users might have erroneously thought it correct. A new function, rename-file-raw, preserves the previous (incorrect but reasonable) behavior of rename-file. Appendix A cl:rename-file and excl:rename-file-raw provides a complete explanation, with examples, of the previous and current behaviors of rename-file and the behavior of rename-file-raw.

    Another fix to rename-file (also noted in Section 5.3 Other changes in the base Lisp): in releases prior to 6.2, rename-file could not be used to rename a directory on Windows. It now does correctly rename directories.

  8. Gate related operators in RPC module are not longer supported. In the initial release of the Allegro CL RPC module (see rpc.htm), the following macros and functions were provided as an interface to multiprocessing gate objects (see Gates (both models) in multiprocessing.htm). However, we have determined that they were not useful for that purpose. The symbols naming them have been unexported and the interface is no longer supported (gates themselves are still supported, of course). The operators are: with-access-gate, with-access-gate*, grab-gate, and ungrab-gate.
  9. shell has a new show-window keyword argument (Windows only). The new show-window keyword argument to shell specifies how the window associated with the cmd argument will be displayed. The default is :minimized, which provides the same behavior as in earlier releases. All values valid for the show-window keyword argument of run-shell-command are valid for that argument shell.
  10. changes to system:copy-file: element-type keyword argument removed, new :overwrite keyword argument copy-file no longer accepts an element-type keyword argument (which in earlier releases was used to specify the element type of the streams opened to the file to be copied and the new file). That argument was not in fact useful. A warning (but not an error) is signaled if element-type is specified.

    A second change to copy-file is backward-compatible: the new overwrite keyword argument, when specified non-nil, allows overwriting existing files with the file being copied.

  11. :showna value for :show-window argument to run-shell-command works inconsistently. Specifying that value is supposed to display but not select the window associated with the program being run (so the window is on the screen but not in front). However, value works inconsistently on different versions of Windows. On Windows 2000 for example, the window is displayed and selected when :showna is specified, but on Windows 95/98, it is displayed but not selected (as intended). It is not clear whether the Windows inconsistency is a feature, or whether the behavior will change when service packs are applied. See run-shell-command.
  12. Lisp epoch is changed to Jan 1, 2000. This value is used for certain internal timings (so that it can be determined that event A happened before event B). Epochs are chosen so timings are fixnums. This value does not typically affect user code.
  13. plugin example removed. The example in examples/cgplugin/ and the related document plugin.htm have been removed. The example provided code for implementing a Common Graphics application as a plugin for HTML browser programs such as Internet Explorer and Netscape Navigator. We have encountered difficulty in making this fuctionality robust, and have decided not to attempt to support it in the current release.
  14. Windows-compiled fasl files will not load into Linux and vice versa. Fasl (compiled Lisp) files created by Allegro CL on Windows will not load into Allegro CL running on Linux or FreeBSD, nor will fasl files created by Allegro CL on Linux or FreeBSD load into Allegro CL running on Windows. Attempting such loads causes an error. Fasl files created by Allegro CL on (x86) Linux will load into and work correctly in Allegro CL on FreeBSD and vice versa. (In 6.1, Windows fasl files did not error when loaded into a Linux Allegro CL, but neither did they work correctly because of signal handling differences and other reasons.)

5.3 Other changes in the base Lisp

  1. Maximum sizes of arrays on 64-bit Lisps is (expt 2 56). The maximum is (expt 2 24) on 32-bit Lisps. See Array sizes in implementation.htm.
  2. New function on Windows ensures that the console will be responsive. If your application on Windows is likely to have all threads running long-executing or blocked foreign code, you can start an additional thread (which doesn't have to actually do any work) and have it call mp:capture-console-interrupts to tell the console it is available. The console runs in a non-Lisp thread and needs to wake up a Lisp thread to read lines of characters when a line is complete. The additional thread, if provided, ensures that a thread is available to be awoken.
  3. Users licensed to do so can create demonstration applications. The generate-application function, which is used to create deliverable applications, accepts a demo keyword argument. You must be licensed to produce demos (demonstration applications) to specify a non-nil value for this keyword argument. If you are licensed, there is a maximum number of days that a demo will work specified in your license. You can then create deliverable applications with a license that expires in the specified number of days. See delivery.htm for more information.
  4. New function print-system-state prints dribble-bug header to any output stream. print-system-state prints, to the argument stream, information about the current state of the running Lisp and details of the operating-system. This function is called by dribble-bug to creates the initial header of a dribble file. In earlier releases, this function was named by the internal symbol excl::print-dribble-bug-info. That symbol is still (in 6.2) a synonym for print-system-state but will be removed in a later release.
  5. make-ssl-server-stream has new certificate-password keyword argument. make-ssl-server-stream now provides support for an encrypted private key in an SSL certificate file. If the private key stored with the certificate inside the file named by the certificate keyword argument to make-ssl-server-stream is encrypted, then the value of the certificate-password argument is used as the key to decrypt it.
  6. (make-random-state t) calls in a tight loop will generate different states. A "random" random state, generated by (make-random-state t), uses get-universal-time for its starting value. In earlier releases, we warned programmers not to use a tight loop to generate many different "random" random states, as they might use the same time value and thus not all be different. In release 6.2, the algorithm for using get-universal-time has been modified to ensure that repeats do not occur, so (make-random-state t) can safely be in any loop.
  7. New security features in RPC. The Allegro RPC facility has additional protection against improper use. See Security considerations in rpc.htm. The change to rpc-do-request is incompatible with the 6.1 release: there is now an additional required argument.
  8. Debugging of image build with build-lisp-image or generate-application improved. The improvements are most notable on UNIX, where interactive debugging of failed image builds started with build-lisp-image or generate-application is now supported. See Debugging an image build problem or failure in building-images.htm for more information. The changes have required non-backward compatible modifications, described here.
  9. New -s command-line argument on UNIX: this argument has the affect on UNIX that +s does on Windows. Also +s is accepted on UNIX as a synonym for -s, so you need not conditionalize between UNIX and Windows. (-s need not go before other - arguments as +s does.) See Command line arguments in startup.htm.
  10. New error-value argument to def-foreign-call. If this argument to def-foreign-call is specified :errno or :os-specific (the two possible non-nil values), the foreign call will return a second value which is the error value associated with the call. Note that call-direct is ineffective when error-value is non-nil.
  11. New function find-composed-external-format. find-composed-external-format returns a composed external format found by combining the composed external format first argument with another external format.
  12. New functions to convert file scheme URIs to pathnames and vice versa. pathname-to-uri and uri-to-pathname are designed to handle URIs with a scheme of file and no host.
  13. generate-application accepts an icon-file keyword argument to specify the application icon. generate-application (which is actually described in delivery.htm now accepts an icon-file keyword argument. If the value is non-nil, it must be a Windows icon file containing either a single 32 by 32 icon or two icons, one 32 by 32 and the other 16 by 16 (in either order). The icon(s) must have a depth of 4 bits (16 colors). The icon(s) will be stored in the resources of the application executable and will be used on the Windows desktop. (In previous releases, you had to set the icon by hand after building the application.) icon-file only has meaning on Windows. It is ignored on UNIX.
  14. Various RPC operators named define-[...] have been renamed make-[...]. A define operator in Common Lisp typically specifies the structure of an object but does not create the object itself. The operators named define-[...] in the Allegro RPC (see rpc.htm) did create objects, so they are better named make-[...]. The old define-[...] names are preserved for backward compatibility but users are encouraged to switch to the new names. The changed names are:
    define-rpc-server changed to make-rpc-server
    define-rpc-client changed to make-rpc-client
  15. net.rpc:define-remote-class now calls net.rpc:import-remote-class. define-remote-class calls import-remote-class with the current default port as the first argument. Users are advised to change calls to define-remote-class into explicit calls to import-remote-class.
  16. Various rpc operators have a new confirm keyword argument. The operators are: make-rpc-server, make-rpc-client, rpc-open-server, rpc-open-listener, and rpc-open-client. The argument allows specifying whether or not additional confirmation messages that track the progress of a remote call (see rpc-query) in more detail are sent. The default is nil, which means they are not sent. The argument did not exist in earlier releases, but the functions acted as if it was specified non-nil.
  17. New macro process-implementation expands to correct :os-threads/non :os-threads function: the macro process-implementation expands into a call to process-thread on versions that use the :os-threads multiprocessing model and to process-stack-group on versions that use the non :os-threads multiprocessing model, thereby reducing the need for #+:os-threads/+-:os-threads conditionalizations.
  18. rename-file now can rename directories on Windows. In earlier releases, rename-file could not rename directories on Windows -- instead, it signaled an error. This has been fixed. rename-file has always been able to rename directories on UNIX. Note that there are other significant corrections to rename-file not directly related to the issue of renaming directories on Windows discussed in Section 5.2 Non-backward-compatible changes in the base Lisp.
  19. Various modifications to the jLinker module. A number of changes have been made to the JLinker module (which is described in jlinker.htm). Many of the changes are intended to improve the user interface and are based on the experience and comments since the initial release in Allegro CL 6.1. There are a number of name changes. The old name has been preserved for backward compatibility (although in some cases, the old name is not exported). Users are encouraged to modify their code to use the new names.

    One change is that there used to be a macro/function pairing (the macro jstatic, the function jdo-static for example). The macro has been changed to be the function and use of the old function is deprecated. A compiler macro is also named by the symbol naming the function and performs the compile-time work of the old macro.

  20. New function eol-convention accesses/sets end of line convention of streams. eol-convention can be used to determine the end-of-line convention of the external format of a stream (whether unix-style linefeed, windows-style carriage-return/linefeed, or macintosh-style carriage-return) and to set it if desired. crlf-base-ef will also strip off a cr composing external format as it does crlf format.
  21. dbi:connect has new connect-string keyword argument. The new connect-string keyword argument to the Allegro ODBC function connect allows specifying the precise connection string to be passed to the ODBC library function to connect to a database. If no value is specified for the argument, a connection string is constructed from the values of other arguments, as in earlier releases. If a value is specified, it is used regardless of values specified for other arguments.
  22. Tray icon works for apps run as a service (using http://opensource.franz.com/ntservice/).

5.4 Base Lisp platform-specific information

There no platform-specific information pertinent for the 6.2 release.



6.0 Release Notes for CLIM

(Repeated from 6.1 Release Notes.) The documentation for CLIM is in an online PDF file, clim-ug.pdf. It has been updated since release 2.0 and is called The CLIM 2.2 User Guide. That document includes material formerly in the (printed) CLIM Release Notes.

On Linux and FreeBSD, Allegro CLIM works with Open Motif 2.1 and 2.2 (2.2 was released in early 2002). Open Motif 2.2 is available at no charge from www.openmotif.org. Allegro CL 6.2/Allegro CLIM will work with either version. (Allegro CLIM released with Allegro CL 6.1 will also work with either version.) Redhat Linux 7.2 is supplied with Lesstif, a version of Motif that does not work with CLIM. See this faq item for information on how to install Redhat Linux 7.2 without lesstif and how to uninstall lesstif if already present.

On Mac OS X 10.1, OpenMotif Motif is also required. However, CLIM will not work with version 2.2.0. As of this writing, we do not have CLIM working on MAC OS X. A new version of Motif (2.2.2) should soon be available. See the Read This First document for an update. Programmers planning to use CLIM on Mac OS X should also contact Franz Technical Support (bugs@franz.com) about the status of this problem.

Certain CLIM demos on Solaris 64 bit give segv unless CDE language environment is set to C. This is a problem when running the CDE environment on the Solaris64 machine. When bringing up the CDE environment, set the language/locale to "C". (On the login screen, there's an "Options" button, which displays a menu that has a "Languages" submenu. Choose "C". Note: the default value is typically "en_US".) The "C" setting can process all of the 64-bit font sets.



7.0 Release Notes for Common Graphics (Windows only)

The first subsection is a brief note pointing to a new discussion on and a new function for avoiding deadlocks in Common Graphics applications.

The second subsection describes changes to Common Graphics and the IDE that are non backward-compatible. Please review this section and make whatever necessary changes to your code to obtain the desired behavior in release 6.2.

The third subsection describes other changes to Common Graphics and the IDE. These should not require code changes (please tell us if any do, because that may indicate a bug), but note that certain function and argument names have been deprecated in favor of new names, and that new code should reflect these changes, and old code should be revised at some point.

The appendix Appendix B Common Graphics bug fixes and minor enhancements describes minor bug fixes and changes.


7.1 Information on avoiding deadlocks in Common Graphics applications

(Repeated from 6.1 release notes.) The section About design considerations for event-driven applications in cgide.htm discusses the issue of deadlocks (i.e. hanging) in Common Graphics applications. The new function post-funcall-in-cg-process is useful in protecting against deadlocks.


7.2 Non-backward-compatible changes in Common Graphics

  1. Functionality associated with deleting grid-widget cells is changed. The arguments passed to confirm-grid-subsection-deletion are now the subsection objects (as the documentation has always claimed) rather than their names (as was the actual case in earlier releases). The nothing-to-delete dialog is now in confirm-grid-subsection-deletion rather than in delete-selected-subsections, and delete-selected-subsections now has a confirm keyword parameter, which defaults to true (so a dialog is displayed by default when the delete key is pressed -- that is the non-backward-compatible change along with the new argument list). In line with these changes, the documentation pages for confirm-grid-subsection-deletion, delete-selected-subsections, delete-row, delete-column, add-row, and add-column have all been updated.
  2. Constant vk-hash removed. The constant vk-hash has been removed. The symbol naming it no longer exists. vk-hash was redundant with vk-quote (indicating the single-quote key), and its name was obscure. Any usage of vk-hash in Common Graphics applications should be changed to use vk-quote.
  3. The no-border-p argument to status-bar-message always defaults to nil. This argument to status-bar-message defaulted to t if the part argument was either nil or 0 (though this was not documented). If you notice an undesired new border on a common-status-bar, then pass the no-border-p argument to status-bar-message as true.
  4. process-events function removed. The function process-events is no longer supported. If your code called process-events, you can achieve the same effect by calling process-single-event in a loop. More typically, though, a Common Graphics process handles its events by calling event-loop.
  5. Initial value of on-change-test is now widget-value-equal. The initial value of the on-change-test event function for widgets is now the new generic function widget-value-equal. In earlier releases, it was either eql or (for multi-item-list and list-view widgets) equal. widget-value-equal compares strings with string= and compares all other types of objects with eql. This means that strings with identical characters will be considered the same (eql considers them to be different if they are not also eq) but without inefficiently recursing into deep trees or other complex widget values needlessly, as equal (which does consider strings with identical characters the same) might do. This change may be backwardly incompatible in certain cases, but this is expected to be rare, such as a multi-item-list whose on-change-test had defaulted to equal, and which counted on equal to match two values that were each lists of lists, and some of the sublists were equal but not eq.
  6. Significant revisions to the DDE interface allow per-process operation. The DDE interface in Common Graphics (available only on Windows) has been significantly revised. Various global variables used in earlier implementations have either been augmented with generic functions or (in a few cases) replaced with generic functions. Instances of the newly added dde-info class contain information on the process running the DDE server or client and details on the DDE connection. In 6.1 and earlier, only Common Graphics processes (which bound Common Graphics variables) could run a DDE server or client. Now any Lisp process can. Further, because needed information is stored in a dde-info instance and not in a global variable, it is easier to manage separate processes using DDE.

    The changes include:

  7. read-cell-value and write-cell-value have additional required arguments. The generic functions read-cell-value and write-cell-value now have two additional required arguments for row-number and column-number. The lack of these arguments was a flaw in the grid-widget design, and the new arguments are needed for consistency and in particular to make it feasible to use the built-in column widgets with replicating rows and columns. Any user-defined methods for these functions must add the two new parameters; the new arglists are (row column row-number column-number) for read-cell-value and (row column row-number column-number value) for write-cell-value. And any calls to these functions must pass the new arguments; passing zero for each of them will duplicate the earlier behavior.

    Previously, using replicating rows and columns [see section-count] required writing draw-cell, cell-click, and/or cell-key-down methods that did not make the typical calls to read-cell-value and write-cell-value due to this limitation; and this technique was not possible with columns that use built-in widgets, because they use built-in draw-cell, cell-click, and cell-key-down methods that always do call read-cell-value and write-cell-value. With this fix, replicating rows and columns can be used with built-in column widgets by writing custom read-cell-value and write-cell-value methods, which now receive all the information needed. See the new example on the Examples tab of the Navigator dialog called Grid-widget: a basic replicated editable-text column to see how to use this new capability to implement replicated built-in grid column widgets.

  8. The Options dialog is significantly revised. The names of the tabs and what is set on the Options dialog are changed in release 6.2. Removed from the dialog are the various printer options (use the top-level command :printer-variables to set printer options) and compiler options (use :optimize to set optimization values, which could before be set on the Options dialog).
  9. Control-Left clicking in Debug Window history copies an expression to a prompt. This is only technically a non-backward compatible change, since it is unlikely anyone used the feature before. If you left click while holding the Control key down in the Debug Window history list (or earlier in the Debug window), the chosen sub-expression will copy down either to the prompt or after any text already entered at the prompt. In release 6.1, the copying was done to the current cursor position, even if it was not at the current prompt.
  10. Ellipses must be vertical or horizontal. Because the Windows ellipse drawer can only draw ellipses that are vertically or horizontally oriented, the semi-major-axis-angle argument to the various ellipse drawing and erasing functions must be a multiple of 90. Other values will signal an error. The argument specifies the angle between the semi-major-axis and a line parallel to the x-axis passing through the center. Angles are measured clockwise. This has always been true, but was not correctly documented in earlier releases. The affected generic functions are: draw-ellipse, draw-ellipse-arc, draw-ellipse-sector, erase-contents-ellipse, erase-contents-ellipse-sector, erase-ellipse, erase-ellipse-arc, erase-ellipse-sector, fill-ellipse, and fill-ellipse-sector.
  11. background-color and foreground-color now save their RGB values. The value of the background-color and foreground-color of a window or dialog-item (and button-infos and outline-items) can be an RGB color. The actual RGB instance which is the value of background-color or foreground-color is saved and returned by those functions. Therefore, that RGB instance should not be modified. (A single one can be used many times, however.) Further the optional result-rgb argument to that function is ignored. In earlier releases it could be passed and the color value would be copied to it (thus avoiding consing a new RGB object.) Because the RGB value is now saved and returned, the optional argument is not needed and will not be set to the value of interest.
  12. The default mouse-right-down method for windows and dialog-items calls pop-up-shortcut-menu in all cases. In releases prior to 6.2, the default mouse-right-down method for basic-pane and dialog-item (and thus for all windows and controls) called pop-up-shortcut-menu only in the IDE and not in general (that is, not in standalone applications). Now pop-up-shortcut-menu is called in all cases. pop-up-shortcut-menu only does something if shortcut-commands returns a list of menu items. This change may affect programmers who have modified shortcut-commands but did not expect a shortcut menu to be displayed.
  13. print-address now is a no-op. The generic function print-address polled and set a configuration option that controlled whether addresses were printed in the print-names of Common Graphics objects. In 6.2, printing options are not part of the Common Graphics interface. Instead, printing options should be set using standard Common Lisp variables (the top-level command :printer-variables can be used to set the values). There is no Common Lisp variable that corresponds to print-address, however, since it was a Common Graphics-specific operator. But setting *print-escape* to nil has the desired effect, although for all objects, not just Common Graphics objects.

7.3 Other changes in Common Graphics

  1. New functionality for determining which Internet browser to invoke from Lisp and the IDE. Allegro CL on Windows often invokes an Internet browser to display information, particularly documentation. In earlier releases, if an instance of the user's default browser was running, its content was changed to display the desired Lisp information. Now users can choose between using an available browser and having Lisp invoke an additional browser, so that information in the currently running browser is not changed. See the descriptions of the new functions invoke-private-html-browser and use-private-html-browser. The description of invoke-html-browser has also been significantly changed.
  2. New function for determining whether a position is on a line within a specified margin of error. The function on-line-segment-p takes three position arguments specifying the position of interest and the endpoints of the line segment of interest, along with a non-negative margin argument. If the position of interest is no further than the margin from the line, the function returns true. This function is useful for determining whether or not a user clicked on a line.
  3. New functions for finding the accessible directories on other machines in a Microsoft Windows network. The new functions network-machines and network-shares allow finding the accessible directories on other machines in a Microsoft Windows network.
  4. New function destroy-icon-handle for freeing icon resources while running. Icon resources are always freed when Lisp is exited. But if an application creates many icons, then it is possible to run out of icon resources, in which case the new function destroy-icon-handle can be called on icons that are no longer being used.
  5. New variables *default-texture-info* and *default-inverted-texture-info*. The variables *default-texture-info* and *default-inverted-texture-info* hold standard texture-info objects that may be used by multiple pixmaps for efficiency, if the properties of those pixmaps all happen to match those specified by these texture-infos. Use of the functions default-texture-info and default-inverted-texture-info is deprecated. Those functions may be removed in a later release.
  6. Standard background color now used for typing in a cell. When doing type-in in an editable-text-column-mixin grid cell, the background color will now be the cell's usual background color rather than always white.
  7. New functions cell-horizontal-padding and cell-vertical-padding. The new generic functions cell-horizontal-padding and cell-vertical-padding allow customizing the margins in grid cells that are drawn by built-in draw-cell methods.
  8. Changes in transfer of focus when reselecting a top-level window. Re-selecting a top-level window returns the keyboard focus to the child control that most recently had the focus in that window. In earlier releases, this did not happen unless the window was an instance of dialog-mixin.
  9. Form window shortcut menu has item for editing source code file. The right-button shortcut pop-up menu for a form window has a new item for editing the associated source code file.
  10. The Download Patches dialog no longer initially selects all patches for the "Download Selected Patches Only" option. Instead, it leaves all of them unselected. See Download Patches.
  11. Characters can be typed to navigate an outline. Typing a graphic character when the keyboard focus is in an outline control will now jump to the next outline-item whose title begins with the typed character, if any, rather than doing nothing. Also, pressing the left arrow key in an outline-item that has no open children will now move to the parent item rather than doing nothing. And when using the control-up-arrow and control-down-arrow gestures to move among sibling items in an outline control, the movement will now stop when there is not another sibling to jump to, rather than moving to the next (non-sibling) item; this makes it easier to remain in the context of the siblings that are being browsed.
  12. A dialog now confirms your choice when you click to delete all items from a menu in the Menu Editor. The button to delete all menu items on the menu editor now first shows a confirmation dialog.
  13. Improved right-button-menus on the Menu Editor and the project Manager. The Menu Editor outline control now has a right-button shortcut menu of appropriate commands. Right-clicking a value in this outline now selects the new value before showing the shortcut menu for it. The shortcut menu in the Project Manager outline also now contains useful commands.
  14. Changes to handling errors in an on-set-focus function. When an error occurs in a widget's on-set-focus function (or in a set-focus method) in the IDE, then the Definitions dialog is selected to prevent the focus from returning to the problem widget or window when the restarts dialog goes away, retriggering the error each time. The erroring function will appear in the Definitions dialog to facilitate finding and fixing the problem.
  15. Help on Selection on the Project Manager will display help on project property with keyboard focus. In the Project Manager dialog, the Help | Help on Selection (F1) command will now display help on the project property associated with the project manager widget that currently has the keyboard focus. Previously it defaulted to attempting help on the value in the widget, which is not useful in this dialog. The dialog also now has a help-button in its frame for getting this help with the mouse.
  16. Escape key cancels drag gesture. The ESCAPE key may now be used to cancel during a drag gesture to move or resize a grid-row or grid-column (or to resize a grid-section).
  17. Event synonyms on the Menu Editor now include the numeric keys. The list of keys for menu-item event-synonyms (keyboard shortcuts) in the Menu Editor dialog now includes the numeric keys (on the main part of the keyboard) and the numeric keypad keys.
  18. New function for obtaining directories: ask-user-for-new-or-existing-directory. ask-user-for-new-or-existing-directory has more options than the existing ask-user-for-directory, but ask-user-for-directory uses the standard Windows directory dialog while ask-user-for-new-or-existing-directory uses a custom dialog.
  19. New generic functions cell-horizontal-border-color and cell-vertical-border-color for grid-widgets. The generic functions cell-horizontal-border-color and cell-vertical-border-color allow specifying colors for certain borders in a grid-widget. You can now specify that specific vertical or horizontal borders be different from the general border colors.
  20. New generic functions cell-selected-background-color and cell-selected-foreground-color for grid-widgets. cell-selected-background-color and cell-selected-foreground-color allow specifying colors for selected cells in a grid-widget. By default (continuing the behavior of earlier releases), system-highlight-background-color and system-highlight-foreground-color are used.
  21. New functions for determining whether a process is in an event loop, and for exiting an event loop. The function inside-event-loop returns true if its argument process is currently inside a call to event-loop. The function exit-event-loop allows a non-local exit from event-loop.
  22. Shortcut menu on editor workbooks now has third most recent tab item. The shortcut (right button) menu over the Editor Workbook dialog has items for selecting the most recent tab (Control-Shift-J), the next most recent tab (Control-Shift-K), and (new in 6.2) the third most recent tab (Control-Shift-L).
  23. pressed-color-mapper can be t, meaning reverse the colors when pressed. pressed-color-mapper specifies how to modify the appearance of a multi-picture-button or picture-button when they are pressed. The value can now be t, which means "reverse" all of the colors of the pixmap when the button is pressed. "Reverse" means go to the opposite side of the color wheel when the color is a true color, or reverse the order of colors in the palette vector when the pixel value is an index into a vectors of colors.
  24. You can add multiple files to a project with one action. When using the Project Manager dialog's Add button to add files to a project, it is now possible to specify multiple files in the file selection dialog at one time (as long as they are in the same directory, and for the same type of module).
  25. on-double-click can have value :push-again: the value of the on-double-click event property can be a function (which is then called when the user double-clicks), nil (which causes the second click to be ignored), and the keyword :push-again (which is new in release 6.2 and causes the second click to be treated the same as the first, triggering a call to the on-change function, if any). The new :push-again allows multiple clicks to trigger multiple calls to on-change rather than suppressing the additional clicks. Suppressing is useful when the second click is probably unintended. For example, when the on-change function toggles between two possible values, it is reasonable to assume that the first click is intended and an immediate second click is unintended. But if on-change cycles through a longer list of options, rapid multiple clicks are likely intentional and the :push-again would be appropriate. This affects button, default-button, cancel-button, radio-button, check-box, picture-button, and static-picture controls.
  26. Changes to save-options-to-user-specific-file to support multi-user environments: save-options-to-user-specific-file allows saving options to a file other than prefs.cl in the Allegro directory. This is useful when there is more than one user and their preferences differ. The function has been modified to look in more places, and you may also use an environment variable to specify a file at run time.
  27. Definitions dialog. The Definitions dialog, displayed by the Search | Find Definition command, has been somewhat rearranged in 6.2. Its functionally is essentially the same.
  28. New menu property show-help-strings-as-tooltips. If the show-help-strings-as-tooltips property is true the help-string of any menu-item on a pull-down-menu will be presented as a tooltip just below the menu if the user holds the mouse cursor over the menu-item for menu-tooltip-delay milliseconds. You may set this property on the menu editor dialog.
  29. Newly exported generic functions drag-cursor and drop-cursor. The names of the generic functions drag-cursor and drop-cursor have been exported. These functions take a dialog-item as an argument and return the cursor to be displayed during a drag-and-drop while the mouse is away from a dialog item (drag-cursor) or over a suitable dialog-item (drop-cursor). no-drop-cursor (displayed while the mouse is over an unsuitable dialog-item) was already exported.
  30. New Write a Bug Report button on Debug Window after an Error. The Debug Window after an error has a new Write a Bug Report button. Clicking it will display a dialog allowing you to specify a file to which debug information will be written. See About submitting a bug report from a break in the IDE in cgide.htm.
  31. New generic function creation-process returns the process which created a window. creation-process applied to a window returns the process that called make-window to create the window.
  32. More support for context-sensitive help. The help-button property has been added to allow placing a question mark icon on a window to be used to obtain context sensitive help on child windows or dialog items (by having the system call context-sensitive-help). (If the help button is displayed, no minimize or maximize button will be displayed regardless of the value of minimize-button or maximize-button.)

    context-sensitive-help is called when F1 is pressed or the question mark icon is clicked and a dialog item or child window is then clicked (see help-button).

    help-button-pressed is called when a Question Mark help button is clicked.

    menu-item-help is called when F1 is pressed while a menu is displayed and an item is highlighted.

  33. New three-state property for check boxes. check-boxes now allow three states, when the new three-state property is true. The three states are blank (value nil), checked (value t), and gray (value :gray). The value can also be :except-interactively, which allows :gray to be specified programmatically but not by clicking it or by pressing the spacebar when it has the keyboard focus.
  34. wrapping property now applies to various button controls. The wrapping property now applies to the button, default-button, cancel-button, radio-button, and check-box classes, as well as static-text and up-down-control. (In 6.1, it only applied to the last two.) If true, the title of the various button classes will wrap. (As in 6.1, if true, the value of a static-text will wrap and value of an up-down-control will wrap when an extreme of the range is reached.)
  35. File open dialogs and Find in Files dialog include *.jil files in default types. *.jil (see jil.htm) files are shown by default along with *.cl, *.lisp, and *.lsp files in various file dialogs, such as that displayed when File | Open is chosen, and the Find in Files dialog.
  36. Display of hourglass (waiting) cursor now more restricted. During an evaluation in the IDE, the hourglass cursor is now shown only when the cursor is in the IDE Listener pane of the process that's doing the evaluation. This is so that the hourglass cursor does not interfere with using the mouse simultaneously in other windows such as the editor.
  37. Class Browser dialog changes. When selecting slots in the item-list in the Class Browser dialog, all classes in the outline that define a slot by that name will be highighted. You could then select one of the highlighted classes and use the Search | Find Definition command to edit the class definition. This new feature aids in finding the source code that defines a slot on an arbitrary class. Also, the description of the Class Browser has been greatly expanded.
  38. You can change the class of a control on a form using the mouse. You can now change the class of a control on a form by changing the "class" property in the inspector. A drop-down list shows the compatible widget classes; only these are allowed as the new class.
  39. Opening a project with incompatible fasl files gives option to recompile. When opening or loading a project that has fasl files that are not compatible with the current version of Allegro, a dialog now offers to proceed by doing a full recompile and load.
  40. Menu commands may now be applied to the value of * in the Debug window. When the Debug Window is the selected window and the text cursor is at a fresh prompt in the listener pane, then any IDE commands that act on the currently selected object will then act on the value of the variable cl:* in that listener (that is, on the first value returned by the most recent evaluation). Formerly there had been no selected-object in this case. Example usage: Just after an evaluation in an IDE listener returns an arbitrary object, invoking the Tools | Browse Class command (control-shift-B) will browse the class of the returned object.
  41. IDE inspector now allows viewing global and per-process values. The IDE inspector now allows you to view and/or modify the global value of a symbol along with its binding in each process that is currently binding the symbol.
  42. Outline subtrees can be closed with the left arrow in some circumstances; escape key halts recursive outline opening which is taking too long. When the keyboard focus is on an outline-item that is not showing any child items (either because its state is :closed or because it has no child items), pressing the left arrow key will now close the parent item rather than doing nothing. This makes it more convenient to close subtrees when using the keyboard.

    If an outline control item is being opened recursively (with the control-left-click or control-right-arrow gesture) and is taking a long time, the escape key may be pressed to halt the recursive opening at the next step.

  43. open-files-in-gnu-emacs option now works when generating new skeleton event-handler code. The open-files-in-gnu-emacs option now works when generating new skeleton event-handler code for widgets on forms. And when invoked from the Find in Files dialog, it moves to the first match in the buffer, leaving the Find In Files search string as the current emacs incremental search string.
  44. The colors property may have value :default. A pixmap's colors property may now be the symbol :default as an alternative to a vector of RGB color values. This special value means to use the colors currently returned by default-palette-vector. If the colors used in the pixmap are equivalent to those returned by initial-palette-vector (and in the same order), then it may be desirable to specify :default. The reason is that Common Graphics replaces three of the colors in the default-palette-vector with colors that match the end user's color scheme (as specified in the Windows Control Panel). Specifying :default will ensure that the pixmap uses those three special colors in the end user's scheme. Specifically, the color at index 7 will be the value returned by system-dialog-background-color, position 8 will hold the system-edge-shadow-color, and position 15 (the last position) will hold the system-background-color.
  45. Navigator outline disk example can be used to clean up directories. The outline disk example on the Examples tab of the Navigator is now more useful for cleaning unwanted large directories and files from your disks.
  46. invoke-html-browser (used by the IDE's help facility) now works with Netscape 6.x and Mozilla 1.0. invoke-html-browser (used by the IDE's help facility) now works with Netscape 6.x. (These new browsers does not implement the customary DDE interface for HTML browsers. Currently we are using a somewhat awkward technique of sending keystrokes to the browser, and may implement the preferred OLE interface in the future.)
  47. The default parenthesis matching style has been changed. The default parenthesis matching style has been changed from a red vertical line to a green block, on the idea that it is somewhat easy to confuse the red vertical line with the text cursor (which is also a vertical line). The red vertical line can be retrieved if desired via the parenthesis-matching-style and parenthesis-matching-color configuration options.
  48. Some menu editor toolbar items have keyboard shortcuts. Some of the items on the toolbar of the Menu Editor dialog have keyboard shortcuts (shown in the tooltips associated with the buttons).
  49. Easier to write a project to an existing directory. When building a distribution from a project and writing to the existing distribution directory, you no longer need to de-select the distribution directory in the Windows File Explorer in order to proceed.
  50. allegro_prefs environment variable allows specifying user-specific prefs file. The new environment variable allegro_prefs may be set to store the prefs.cl file in an arbitrary directory and/or with an arbitrary file name. See save-options-to-user-specific-file.
  51. The Navigator pixmap manager enhanced. The Navigator pixmap manager example has an additional option for semi-intelligently packing multiple pixmaps into the window.
  52. Editor capitalization now leaves certain words downcased. The Change Case | Capitalize command now leaves lowercase or downcases if necessary a handful of short words (strings surrounded by non-alphas) such as "of" and "the" when not at the beginning of the selection. Applied to a man, a plan, a canal, panama! results in A Man, a Plan, a Canal, Panama!, while applied to A Man, A Plan, A Canal, Panama! results in A Man, a Plan, a Canal, Panama! again.
  53. ENTER key in a read-only multi-line-editable-text control acts as default button. If the ENTER key is pressed in a read-only multi-line-editable-text, then the usual dialog behavior of pressing the default-button (if there is one) is now done rather than doing nothing as before. When non-read-only, ENTER will still add a newline to the control's text.

See also Appendix B Common Graphics bug fixes and minor enhancements, which is a list of minor bug fixes in Common Graphics and the IDE.



8.0 Release Notes for AllegroStore

The AllegroStore manual is available online in PDF format, allegrostore.pdf. A printed copy is available.


8.1 Non-backward-compatible changes in AllegroStore

AllegroStore 2.1.8 requires a new version of ObjectStore (as described in Installation instructions and information for AllegroStore users in installation.htm).


8.2 Other changes in AllegroStore

The version of AllegroStore shipped with Allegro CL 6.2 is 2.1.8.

Problem with AllegroStore/ObjectStore on Linux

At this writing there is an unresolved failure of SIGPIPE handling under Allegrostore on Linux. Calls from the database client to the database server perform socket communication, and that communication resets the SIGPIPE handler to SIGDFL, thereby removing Lisp's handler. This causes no problem with Allegrostore itself, but can be fatal for other modules that may do socket communications and which may experience a SIGPIPE, immediately killing Lisp. This has been encountered with Allegroserve.

There is no robust workaround. The problem is in the underlying object database and the vendor is investigating.

Programmers planning to use Allegroserve (or any similar network server) on Linux backed by Allegrostore should see the Read This First document for an update. and subsequently should contact Franz Technical Support (bugs@franz.com) about the status of this bug.



9.0 Release notes for Orblink

Orblink in Allegro CL 6.2 now supports the Portable Object Adaptor (POA). The next section contains a description of the POA implementation.


9.1 Portable Object Adaptor (POA) in Allegro CL 6.2

We make no attempt to explain POA here. We only mention aspects of our implementation that affect an application's use of ORBLink with POA.

User-visible changes:

New conditions, as defined by POA spec.

New classes

Policy classes:

Other classes

New type names

New functions



10.0 Documentation modifications in Allegro CL 6.2

This section lists documentation updates or corrections (where revisions are significant or moderate). Changes documented elsewhere in this document generally have associated documentation changes, but those are not listed here. In some cases, we note the change in the document itself and not here.



11.0 Availability of CLX for Allegro CL

CLX (Common Lisp X) provides an interface between Common Lisp and the X window system. Allegro CL includes a compiled version of CLX (code/clx.fasl, loaded by evaluating (require :clx)) with the distribution. The Allegro CL products CLIM and Allegro Composer use CLX. Users wanting low-level access to an X server in Lisp may also want to use CLX. CLX is not supported by Franz Inc.

The sources to CLX are supplied with the regular Allegro CL distributions in the contrib/clx/ directory. Note that during installation, you are asked whether you wish to install the contrib/ directory and the default is not to install it. CLX is not supplied with the Allegro CL Trial distributions.

The sources to CLX are also available on the Franz Inc. web site (www.franz.com), at the location ftp://ftp.franz.com/pub/clx/.



Appendix A: cl:rename-file and excl:rename-file-raw

The implementation of rename-file in release 6.1 (and in some releases previous to 6.1) was incorrect (that is, did not implement the ANSI specification). Further, its behavior inappropriately depended on the value of *default-pathname-defaults*. Indeed, for some values of *default-pathname-defaults*, rename-file worked as specified and for other (more typical) values, it did not.

Because fixing rename-file to always work as specified by the ANS would cause significant changes to its behavior (when *default-pathname-defaults* has a typical value), Allegro CL 6.2 has provided two new functions: rename-file-raw whose behavior mimics the UNIX mv/Windows MOVE method of resolving relative pathnames when renaming files and resembles the behavior of Allegro CL 6.1 rename-file when the *default-pathname-defaults* is an absolute pathname; and rename-file-acl6.1, whose behavior is identical to the behavior of Allegro CL 6.1 rename-file.

rename-file takes two arguments: the file to be renamed and the new name. The issue was how to resolve a relative pathname passed as the second (new name) argument: should it be resolved with respect to *default-pathname-defaults* or should it be resolved with respect to the first argument (the file to be renamed)? The ANS says it should be resolved with respect to the first argument, which has the following results (we show the first returned argument only):

(rename-file "bar-dir/foo.cl" "baz.cl")
  -$gt; #p"bar-dir/baz.cl"
(rename-file "bar-dir/foo.cl" "bar-dir/baz.cl")
  -$gt; #p"bar-dir/bar-dir/baz.cl"

It is the second result (with the extra "bar-dir/" directory) that typically surprises users.

In Allegro CL 6.1, when *default-pathname-defaults* was an absolute pathname (which it typically is), rename-file would do the following:

*default-pathname-defaults*
  -> #p"/usr/foo/"
(rename-file "bar-dir/foo.cl" "baz.cl")
  -$gt; #p"/usr/foo/baz.cl"  ;;  non-conformant Allegro CL 6.1 result
(rename-file "bar-dir/foo.cl" "bar-dir/baz.cl")
  -$gt; #p"/usr/foo/bar-dir/baz.cl"  ;;  non-conformant Allegro CL 6.1 result

These results, though incorrect according to the ANS, are reasonable and mimic the behavior of the UNIX mv and the Windows MOVE commands. It is likely that programs depend on this behavior and will fail (absent recoding) when the newly conformant rename-file is used. The new function rename-file-acl6.1 is provided to preserve the 6.1 behavior. Users who wish to can change calls to rename-file to calls to rename-file-acl6.1 to preserve 6.1 behavior. Users can also choose to use the new rename-file-raw, which preserves 6.1 behavior when *default-pathname-defaults* is an absolute pathname and follows the typical operating system paradigm for renaming files.

(Note that the 6.1 behavior was a bug, just one that was unnoticed because it seemed reasonable. When *default-pathname-defaults* was a blank pathname (#p""), rename-file in Allegro CL 6.1 would produce the ANS-conformant results. In 6.2, the behavior of both rename-file and rename-file-raw do not depend in the same way on the value of *default-pathname-defaults*.)

Here are the sources to the recoded rename-file and the new rename-file-raw, provided for information only. They call excl::filesys-rename-file, which is an internal function (that sends the actual command to the operating system) not intended for users.

(defun rename-file-raw (filespec new-name)
  (let ((new-name (pathname new-name))
	(old-truename (truename filespec)))
    (excl::filesys-rename-file (namestring old-truename)
			 (namestring
			  (merge-pathnames
			   (translate-logical-pathname new-name))))
    (values new-name old-truename (truename new-name))))

(defun rename-file (filespec new-name)
  (let ((defaulted-new-name (merge-pathnames new-name filespec))
	(old-truename (truename filespec)))
    (excl::filesys-rename-file (namestring old-truename)
			 (namestring (translate-logical-pathname
				      (pathname defaulted-new-name))))
    (values defaulted-new-name old-truename
	    (truename defaulted-new-name))))


Appendix B: Common Graphics bug fixes and minor enhancements

The following are minor changes and bug fixes. See Section 7.0 Release Notes for Common Graphics (Windows only) for major changes to Common Graphics and the Integrated Development Environment. Many of the bugs listed here were fixed with patches in release 6.1.

  1. When tabbing through the widgets of a dialog, the acting default button did not once again become the official default-button upon moving the keyboard focus from a set of buttons. Now it does.
  2. Pressing the ENTER key in a dialog ran the default-button's on-change function even when the default-button was unavailable at the time. Now nothing will be done when the default-button is unavailable.
  3. While typing into a delayed editable-text widget, if a menu command was selected (either with the mouse or a keyboard shortcut), or if a global keyboard accelerator was invoked, the value of the widget was not updated to match the current text before the menu command or global command was run. This can be a problem if the command accesses the value of the text widget. The widget's value will now first be updated in these cases (and its on-change function run), as has been true previously when pressing ENTER to run the default-button's on-change function. This should now cover all of the cases where an action is invoked interactively before the text widget loses the keyboard focus, which is the normal time when a delayed text widget updates its value and runs its on-change function.
  4. When a numeric keypad key was used as an event-synonym for a menu-item, the name of the key was not properly displayed on the menu-item. (A lowercase letter was displayed instead.) This is now fixed.
  5. Reloading a saved rich-edit-dialog could result in a double set of the standard rich-edit widgets. Now fixed.
  6. Giving a multi-item-list a new set of values did not scroll the control as intended to reveal one of the new values when none of the new values is showing already. Now it does.
  7. Opening a 6.0 project in 6.1 (or 6.2.beta) with a form that has a tab-control that has widgets on it could disconnect the widgets from the tabs. This is fixed in 6.2.
  8. edit-in-place type-in in outline controls and in grid-cells in a grid-widget should no longer shift the text a bit when going between edit-in-place mode and regular mode.
  9. The function find-window previously would still return a window whose process had been killed. Now it will properly return nil instead of the dead window.
  10. read-line now works correctly when called on an IDE listener pane.
  11. A break occurred if you sorted IDE profile results on the "flat" page by number of calls when calls were not collected, and sometimes even when calls were collected. Now fixed.
  12. While it was possible in 6.1 to specify :default as the value of the :colors initarg when making a pixmap (in order to share the special default-palette-vector that adopts a few of the user's Control Panel colors), it did not work to pass :default to (setf colors). Now it does.
  13. The IDE's Build Project Distribution command no longer fails when the Emacs-Lisp Interface is running.
  14. Added a general fix for any possible remaining cases where a thread can hang due to sending a message to a window in another thread while inside a without-interrupts. It is now no longer possible to undesirably create the IDE status-bar in a thread other than the IDE GUI thread by calling (setf display-status-bar) in another thread.
  15. Various editor commands did not work correctly in win95/98/ME beyond 32k characters in the buffer. This is now fixed.
  16. pop-up-lettered-menu destroyed the list of strings passed in to it when the sortp argument is true. Fixed.
  17. Covering and uncovering a form window just after moving a widget with the arrow keys drew all alignment lines rather than just the ones for the moving widget. Fixed.
  18. Pressing ENTER in a multi-line-editable-text on a dialog that included a default-button was running the default-button's on-change function; this happens with all other widgets, but this one is an exception to only enter a newline in the text instead. Fixed.
  19. The class browser could break if the user overrode a MOP method such that a class is not always a subclass of its superclass (or maybe it was the other way round). Fixed.
  20. The IDE could fail to start up if there was a null character in the Windows login username (which apparently can happen if Windows is not configured for logins). Fixed.
  21. There was a small flicker in IDE editor on incremental compile or eval. Fixed.
  22. An error in a mouse-moved method could generate many restarts dialogs, sometimes confusing the IDE. Now mouse-moved calls will be skipped if the stack is still inside an earlier call to mouse-moved for the same window.
  23. Internet Explorer will now scroll down to the requested anchor when one is included in a DDE request to display a page. This had worked in Netscape, but the DDE command needed to be passed a different way in IE that we only recently discovered by trial and error.
  24. The Edit | Reindent command should no longer leave the last line of text highlighted when using the Emacs editor-mode.
  25. The IDE projects facility embedded an icon into the executable for a standalone Common Graphics application in such a way that the Windows File Explorer did not find it and display it. This is now fixed on the NT branch of Windows (including win2000 and XP), but does not look fixable on the win98/me branch. As long as the icon is embedded in NT, the Windows File Explorer will find the icon on any version of Windows.
  26. Dragging buttons into a multi-picture-button sometimes removed a separator bar when it shouldn't have. Dragging buttons between multipics now always use drag-images mode, since multipics support this well and it allows more control over separator bars. Also, the IDE's extended toolbar is now resizable.
  27. The new widget-specific locales were not applied to the case of reading a string that was typed into a text widget. Now fixed.
  28. (setf stream-origin) did not return the new value, as all setf methods should do. Now it does.
  29. In earlier releases, the *system* object was created while loading application code while generating a standalone application, so that calls to *system* accessor functions at load time would still work. This practice was problematic and only a partial solution to the general problem of running code at load time, and so it is no longer done. If an application has defparameter, defvar, defconstant, or other top-level forms that run code that call accessor functions of the *system* or configuration objects, then that code will need to be changed to run the code at run time rather than at load time. This is similar to the limitation where objects such as windows and fonts that use operating system "handles" should not be created at load time either, since handles created at load time during a build will not be valid when the built image is later run.
  30. There is a general fix for application drawing code that draws on non-interactive Common Graphics streams (basically printer streams) but which neglect to call force-output after printing text but before moving the current position. There is also a fix to a bug where printing hardcopy of the inspector window would wrap a long printed value down to the next row, infringing on its personal space.
  31. When doing a Generate Project Distribution or EXE, if there are compiler warnings and the dialog that shows the warnings is canceled, then the command will avoid proceeding to generate the distribution or EXE. In earlier releases, the IDE missed this particular opportunity to cancel.
  32. The IDE now defaults its colors more reasonably when a light-foreground-on-dark-background Control Panel color scheme is used. The IDE or a standalone Common Graphics app will now convert its colors more completely when the Control Panel color scheme is changed while the IDE or standalone Common Graphics app is running. And as with dialog-items before, the background-color property of a window can now be t to copy its parent's background color.
  33. Long window titles could make the Windows menu very wide. Long names are now truncated in this menu. Also, the Recent | Edit Definition menu sometimes inserted newlines in the menu-item titles, making that menu extremely wide. Now fixed.
  34. Sometimes files were pushed redundantly onto the Recent menus; now the older copies are removed as intended. Also, additional actions push items onto the Recent menus; for example, closing an editor buffer pushes the file onto the Recent | Open Editor File menu at that time to make it easier to retrieve a closed buffer.
  35. During an edit-in-place of an outline-item (see editable-in-place), clicking elsewhere on the outline did not end the edit-in-place. Now fixed.
  36. The available property of an outline-item of an outline on a form could get switched from nil to true when modifying other properties of controls on that form. Now fixed.
  37. Clicking on a tab-control whose focus-on-click property is turned off still moved the focus to a widget on the tab-control even if the focus had not been in a widget on the tab-control. Now fixed.
  38. edit-in-place positioned the edit control incorrectly when the parent window was scrolled. Now fixed
  39. When an error occurs while evaluating a form that has been entered into the inspector's expression editor, this no longer wipes out the previous value displayed in the inspector.
  40. The scroll-bar of a grid-section sometimes did not turn off when it should if the section was scrolled to the end at the time. Now fixed.
  41. An enhancement in 6.1 that allows tab-controls to be nested triggered a bug that could result in widgets on forms getting buried by the tab-controls that they are on. This is now fixed. The actual bug was that update-dialog confused the list of controls in the dialog-items slot of the window when some of the new controls were already on the dialog.
  42. The find-again-after-replace configuration option essentially did nothing. Now it works as documented.
  43. When two definitions in the editor have no blank lines between them and the cursor is at the end of the last line of the first definition, commands such as Incremental Compile would be applied to the second definition. The commands are now applied to the first definition as intended.
  44. A message timeout could sometimes occur when printing to an IDE Listener pane (which is *standard-output* in the IDE Listener threads in which user code runs in the IDE). We believe that we have now worked around this problem reliably, though this is not proven as it seems to be impossible to duplicate the problem purposefully.
  45. When multiple monitors are used, all tooltips were forced onto the primary monitor. Now they should appear at their proper positions on each monitor. This fix applies only to win98 and later on the non-NT line and win2000 or later on the NT line; in win95 and NT4, tooltips will still be constrained to the primary monitor. (Please report any trouble with this as it is hard to test fully.)
  46. draw-wrapped-string didn't do vertical spacing correctly when there are two or more contiguous newlines in the text. Now fixed.
  47. When printing a multi-page rich text document, the bottom margin could creep upwards over successive pages. Now fixed.
  48. Common Graphics inadvertently disallowed using keyboard shortcuts while a modal dialog is present even when those shortcuts were for a menu-bar on the modal dialog itself (unless you specified the allow-during-modality option on every menu-item). Now fixed.
  49. A DDE server in Lisp could map a client request to the wrong topic or item. This may have happened only after an unhandled topic or item was passed by the client. Now fixed.
  50. The break-on-signals option is no longer in the IDE options dialog, since this variable is normally bound only temporarily and therefore is not appropriate as a global option.
  51. A break could occur in a standalone Common Graphics app if it was generated from a direct generate-application call rather than using an IDE project, due to there being no current project as some internal Common Graphics code had expected. Now fixed.
  52. The Arrest button on the Processes dialog no longer sometimes freezes up the IDE.
  53. ask-user-for-font no longer breaks in a standalone application if no window is passed as the stream-for-font argument.
  54. There is a default mouse-right-down method that pops up a menu if a shortcut-commands method returns any menu items for the clicked window. This method had existed only in the IDE, however. It now exists in a standalone Common Graphics application as well, so that all an application needs to do to establish right-button shortcut menus is to define shortcut-commands methods.
  55. Turning off the show-dialog-on-compiler-warnings configuration option worked when compiling a file or project, but had no effect on incremental compiles of definitions. Now fixed.
  56. The Navigator pixmap managing example and pixmap grabbing example had a bug that prevented any of the pixmaps from being garbage collected. This could lead to memory depletion if many large pixmaps were viewed. This is now fixed.

Copyright (c) 1998-2002, Franz Inc. Oakland, CA., USA. All rights reserved.
Documentation for Allegro CL version 6.2. This page has had significant revisions compared to the 6.1 page.
Created 2002.2.26.

ToCDocOverviewCGDocRelNotesIndexPermutedIndex
Allegro CL version 6.2
Significantly revised from 6.1