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
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.
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.
-
Version 6.2 uses the 6.1 installation procedure: installation is
described in installation.htm.
-
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.
-
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.
-
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.
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.
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.
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:
-
Section 4.2.1 Increasing stack size on Mac OS X
-
Section 4.2.2 Building shared libraries 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.
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.
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 |
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).
We have added a number of new capabilities to Allegro CL. Here we give
links to the documentation of the new features.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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
.
-
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).
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
: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.
-
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.
-
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.
-
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.)
-
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.
-
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.
-
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.
-
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.
-
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.
-
(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.
-
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.
-
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.
-
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.
-
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
.
-
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.
-
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.
-
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.
-
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
-
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.
-
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
.
-
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.
-
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.
-
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.
-
New function jlinker-buffer-size. The new function jlinker-buffer-size
can be used to determine or to set the buffer size used to
transmit data from Lisp to Java.
-
jarray-ref now setf'able: the function jarray-ref can be used in a
setf form to set values in a
Java array (analogously with using aref and setf to set the value of a Lisp array).
-
Use of jarray-set is deprecated. Because you can now use
jarray-ref and setf to set values in a Java array, the function
jarray-set is no longer needed and its use is deprecated.
-
The name of the Lisp method destroy has been changed to
destroy-servlet: the jLinker Servlet API (described in The jLinker Servlet API
facilitates the creation of Java Servlets that call Allegro CL
functions to do the work of the Servlet. The Lisp API contains various
methods called from Java named by symbols in the
javatools.jlinker
package. The method named by the
symbol javatools.jlinker:destroy
is now named
javatools.jlinker:destroy-servlet
. The (unexported)
symbol javatools.jlinker::destroy
is preserved to
obtain the old behavior. See the description of the method in The jLinker Servlet API
for details of how to export that symbol if desired.
-
jclass now a function/compiler macro; use of jget-class
deprecated. See jclass.
-
jfield now a function; use of jget-field
deprecated. See jfield.
-
jcall now a function/compiler macro; use of jdo-call
deprecated. See jcall.
-
jstatic now a function/compiler macro; use of jdo-static
deprecated. See jstatic.
-
jnew now a function/compiler macro; use of jmake-new
deprecated. See jnew.
-
jcons now a function/compiler macro and renamed jconstructor; use
of jget-cons deprecated. See jconstructor.
-
jmeth now a function/compiler macro and renamed jmethod; use
of jget-meth deprecated. See jmethod.
-
New variable *jlinker-set-accessible* controls behavior during
certain exceptions.
*jlinker-debug*
determines the
jLinker behavior when Java throws
java.lang.IllegalAccessException
during a method
call. If the value is non-nil
(the default),
then jLinker calls m
.setAccessible(True)
where m is the method in the failed call, and then attempts the
failed call one more time. If the value is nil
, then jLinker signals an error.
-
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.
-
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.
-
Tray icon works for apps run as a service (using http://opensource.franz.com/ntservice/).
There no platform-specific information pertinent for the 6.2 release.
(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.
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.
(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.
-
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.
-
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
.
-
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.
-
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.
-
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.
-
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:
-
New class
dde-info
. The various generic functions listed below take instances of this class as arguments.
-
New function dde-info. This takes a process as
an argument and returns the dde-info instance used by that process, if
any.
-
New generic-function service-name (the variable
*service-name*
now
just provides the default value)
-
New generic-function service-topics (the variable
*service-topics*
now just provides
the default value)
-
New generic-function sysitems (the variable
*sysitems*
now just
provides the default value)
-
New generic-function case-sensitive-dde (the variable
*case-sensitive-dde*
now just
provides the default value)
-
New generic-function server-active-p (the variable
*server-active-p*
no longer exists)
-
New generic-function active-server-ports (the variable
*active-server-ports*
no longer exists)
-
New generic-function active-client-ports (the variable
*active-client-ports*
no longer exists)
-
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.
-
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).
-
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.
-
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.
-
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-info
s and outline-item
s) 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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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
.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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
).
-
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.
-
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.
-
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.
-
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.
-
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.
-
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).
-
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.
-
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).
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
New three-state property for check boxes.
check-box
es 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.
-
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.)
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.)
-
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.
-
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).
-
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.
-
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.
-
The Navigator pixmap manager enhanced. The Navigator pixmap
manager example has an additional option for semi-intelligently
packing multiple pixmaps into the window.
-
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.
-
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.
The AllegroStore manual is available online in PDF format,
allegrostore.pdf. A printed copy is available.
AllegroStore 2.1.8 requires a new version of ObjectStore (as described
in Installation
instructions and information for AllegroStore users in
installation.htm).
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.
Orblink in Allegro CL 6.2 now supports the Portable Object
Adaptor (POA). The next section contains a description of the POA
implementation.
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:
-
The _mark attribute of servant objects is no longer used to provide an
object id. User-supplied object ids are mediated by the POA system.
-
A reference unmartialed from an incoming request that refers to a
servant in the processing ORBLink is no longer unmartialed as a
servant object. It is unmartialed as a proxy, so operations on it
will satisfy the POA rules.
-
There is a new package containing the poa components, per the
mapping rules:
-
package name: omg.org/PortableServer
-
package nicknames: PortableServer, poa, omg.poa, orblink.poa
-
(op:resolve_initial_references corba:orb "RootPOA") returns the
root POA. This POA can be used to register objects, but is not
the default POA.
-
(op:resolve_initial_references corba:orb "POACurrent") returns an
instance of the poa:current class to use in context operations.
-
There are three predefined POA's in ORBLink, sharing a single
poamanager. See the poa:default-poa function for more information.
New conditions, as defined by POA spec.
-
poa:poa-exception
-- superclass of all the poa exceptions
-
poa:forwardrequest
-
poa:current/nocontext
-
poa:poamanager/adapterinactive
-
poa:adapteralreadyexists
-
poa:adapternonexistent
-
poa:invalidpolicy
-
poa:noservant
-
poa:objectalreadyactive
-
poa:objectnotactive
-
poa:servantalreadyactive
-
poa:servantnotactive
-
poa:wrongadapter
-
poa:wrongpolicy
New classes
Policy classes:
-
poa:threadpolicy
-
poa:lifespanpolicy
-
poa:iduniquenesspolicy
-
poa:idassignmentpolicy
-
poa:implicitactivationpolicy
-
poa:servantretentionpolicy
-
poa:requestprocessingpolicy
Other classes
-
poa:poa
-
poa:userid
-- a mixin class. A method for
poa:default-poa is specialized on this class returns a particular
(predefined) poa that supports user-specified object id's. See the
discussion of the default-poa function.
-
poa:poamanager
-
poa:adapteractivater
-- to be sublassed to provide for method specialization
-
poa:servantmanager
-- superclass of poa:servantactivator and poa:servantlocator
-
poa:servantactivator
-- to be sublassed to provide for method specialization
-
poa:servantlocator
-- to be sublassed to provide for method specialization
-
poa:current
New type names
-
poa:threadpolicyvalue-type
= (member
:orb_ctrl_model :single_thread_model)
-
poa:lifespanpolicyvalue-type
= (member
:transient :persistent)
-
poa:iduniquenesspolicyvalue-type
= (member
:unique_id :multiple_id)
-
poa:idassignmentpolicyvalue-type
= (member
:user_id :system_id)
-
poa:implicitactivationpolicyvalue-type
=
(member :implicit_activation
:no_implicit_activation)
-
poa:servantretentionpolicyvalue-type
=
(member :retain :non_retain)
-
poa:requestprocessingpolicyvalue-type
=
(member :use_active_object_map_only :use_default_servant
:use_servant_manager)
New functions
-
(poa:default-poa object)
A generic function. A method specialized on corba:servant returns a
particular :retain :system_id :transient :implicit_activation
:use_active_object_map_only POA that approximates the semantics
of pre-POA ORBLink.
A second POA, with :no_implicit_activation and :user_id policies,
is returned by a method specialized on poa:user-id. This allows
an application to mix the poa:user-id class in to an
implementation to get a default user_id POA for instances of that
class.
Applications can provide methods specialized on any
implementation classes to use specific POAs.
-
Predicates to test policy values
-
(poa:threadpolicyvalue-type-predicate x) ==
(typep x 'poa:threadpolicyvalue-type)
-
(poa:lifespanpolicyvalue-type-predicate x) ==
(typep x 'poa:lifespanpolicyvalue-type)
-
(poa:iduniquenesspolicyvalue-type-predicate x) ==
(typep x 'poa:iduniquenesspolicyvalue-type)
-
(poa:idassignmentpolicyvalue-type-predicate x) ==
(typep x 'poa:idassignmentpolicyvalue-type)
-
(poa:implicitactivationpolicyvalue-type-predicate x) ==
(typep x 'poa:implicitactivationpolicyvalue-type)
-
(poa:servantretentionpolicyvalue-type-predicate x) ==
(typep x 'poa:servantretentionpolicyvalue-type)
-
(poa:requestprocessingpolicyvalue-type-predicate x) ==
(typep x 'poa:requestprocessingpolicyvalue-type)
-
Other functions
-
(poa:proxy-from-reference reference) -- returns a proxy object
(of the correct type) to allow access to the object reference.
-
(poa:poa-has-policy poa keyword) -- returns true if and only if
the keyword is a POA policy value and the poa has a policy with that
value.
-
(poa:poa-policies &rest keys) -- useful for generating a
sequence of policy objects with the specified values. Such a sequence
is needed when creating POAs.
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.
-
The new section Force-output and finish-output
policy in streams.htm describes when
Allegro CL itself forces output from a buffer to a stream. The
behavior is not new, but has not previously been spelled out.
-
The descriptions of the classes
row-header-column
, column-header-row
,
row-sizing-column-mixin
, column-sizing-row-mixin
, row-selecting-column-mixin
, column-selecting-row-mixin
, and the
operators selectable, movable, selected have been significantly
rewritten.
-
The descriptions of pop-up-find-dialog and pop-up-replace-dialog
have been rewritten with much more detailed information on the
arguments and return values.
-
The descriptions of border-color, border-width, cell-3d-border, default-cell-border-color, default-cell-border-width, default-cell-3d-border,
effective-border-color, and effective-border-width
(all functions applied to
grid-widget
s of rows, columns, or
sections of grid-widget
) have been
significantly rewritten. The new descriptions of default-cell-3d-border and cell-3d-border describe
the :sunken-edge
value which makes the border
appear sunken (other non-nil
values make it
appear raised).
-
The descriptions of available-reader, selected-reader, and font-reader (all
functions applied to
grid-column
s) have been
significantly rewritten.
-
The descriptions of
fontmetrics
has been
significantly rewritten.
-
The descriptions of build-flags, runtime-modules, include-flags, runtime-build-option, splash-file, icon-file, and autoload-warning have all
been rewritten and greatly expanded.
-
The description of the Class Browser has been greatly
expanded.
-
no-drop-cursor:
the description has been rewritten. Note that the related drag-cursor and drop-cursor are now
exported.
-
foreground-color
and background-color: the descriptions
have been extended. See also
Section 7.2 Non-backward-compatible changes in Common Graphics for minor but technically
non-backward-compatible changes.
-
memref, memref-int: the descriptions have been
substantially rewritten to clarify certain issues, to warn that use of
these functions is dangerous, and to provide some examples.
-
update-window:
the description has been significantly rewritten to clarify issues
with updating windows in other threads.
-
stream-origin:
the description has been entirely rewritten. The previous description
contained too little information. The descriptions of nstream-origin and
move-stream-origin have also been
modified.
-
offset-from-selected-window: the
description has been entirely rewritten. The previous description was
incorrect.
-
jclass-of: the
description has been significantly rewritten to make its purpose and
use more clear.
-
The symbols naming operators and classes in the
jlinkent
module, which is part of the jLinker
facility, were previously documented in the The jLinker Servlet API
section of jlinker.htm. Now they have their own
manual pages, which are linked to from that section. Note that you
must have a Allegro CL Enterprise (or higher) license to load the
jlinkent
module.
-
open-palette:
the documentation has been expanded, with information provided on
when palette objects are released by the Operating System.
-
shortcut-commands:
the documentation has been rewritten and examples have been added.
-
pop-up-shortcut-menu:
the documentation has been rewritten.
-
default-menu-on-click: the
documentation has been modified to clarify the behavior of the default
method for
shortcut-menu
s.
-
shortcut-menu
:
the documentation now makes clear that a menu of this type is
displayed by pop-up-shortcut-menu when shortcut-commands returns
a list of menu-items to show in the menu.
-
rpc-send-request: the arguments
were incorrectly specified in the 6.1 documentation. This has been fixed.
-
with-printer: the
arguments were incorrectly specified in the 6.1 documentation. This
has been fixed.
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/.
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))))
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.
-
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.
-
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.
-
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.
-
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.
-
Reloading a saved
rich-edit-dialog
could result in a
double set of the standard rich-edit widgets. Now fixed.
-
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.
-
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.
-
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.
-
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.
-
read-line now
works correctly when called on an IDE listener pane.
-
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.
-
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.
-
The IDE's Build Project Distribution command no longer fails when the
Emacs-Lisp Interface is running.
-
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.
-
Various editor commands did not work correctly in win95/98/ME beyond
32k characters in the buffer. This is now fixed.
-
pop-up-lettered-menu destroyed the
list of strings passed in to it when the sortp argument is true.
Fixed.
-
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.
-
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.
-
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.
-
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.
-
There was a small flicker in IDE editor on incremental compile or
eval. Fixed.
-
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.
-
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.
-
The Edit | Reindent command should no longer leave the last line of text
highlighted when using the Emacs editor-mode.
-
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.
-
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.
-
The new widget-specific locales were not applied to the
case of reading a string that was typed into a text widget. Now
fixed.
-
(setf stream-origin) did not return the new value, as all
setf methods should do. Now it does.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
edit-in-place
positioned the edit control incorrectly when the parent window was
scrolled. Now fixed
-
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.
-
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.
-
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.
-
The find-again-after-replace
configuration option essentially did nothing. Now it works as
documented.
-
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.
-
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.
-
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.)
-
draw-wrapped-string didn't do
vertical spacing correctly when there are two or more contiguous
newlines in the text. Now fixed.
-
When printing a multi-page rich text document, the bottom margin could
creep upwards over successive pages. Now fixed.
-
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.
-
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.
-
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.
-
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.
-
The Arrest button on the Processes dialog no longer sometimes freezes
up the IDE.
-
ask-user-for-font
no longer breaks in a standalone application if no window is passed as the
stream-for-font argument.
-
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.
-
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.
-
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.