X11R5 was the fifth release of the X Window System, Version 11 from MIT. It was released in September 1991, with the following changes excerpted from the release notes. The sources are available for download for historical reference from http://www.x.org/releases/X11R5/.
- New standards
- Libraries in General
- Xt Intrinsics
- Athena Widget Set
- X Server
The following standards are new in Release 5:
Instead of forcing each X server to read all fonts from the filesystem, the X Font Server Protocol makes it possible to manage fonts separately from the X server, directing the X server to request fonts via this new Consortium standard network protocol from a font server.
In addition, for fonts which take a long time to open, this allows the X server to continue with other clients while the font server services the font requests.
The X Logical Font Description standard has been compatibly enhanced to allow clients to specify and use scalable fonts.
This extension has been promoted from Draft Standard to full Consortium Standard with this release.
This standard has been updated to cover the new X Device Color Characterization Conventions for device-independent color support in Xlib.
We have tried hard with this release to make our code use standard
features from POSIX.1 and ANSI C when possible. A new include file
<X11/Xosdefs.h> describes which systems comply or do not comply with
Two new X authorization schemes are included, a DES based private-key system which was described in the R4 XDMCP document - XDM-AUTHORIZATION-1 (along with the associated XDMCP authentication system XDM-AUTHENTICATION-1) and the Sun Secure RPC based SUN-DES-1 system, which uses the SunOS supplied security system.
Most clients participate in the WM_DELETE_WINDOW protocol.
- New clients: editres, viewres, xconsole, xcmsdb.
- New demos: beach_ball, auto_box, gpc, xcmstest, xgas, x11perf.
- Xlswins has been removed; it is replaced by xwininfo -tree.
- Moved to contrib: muncher, plaid.
- Completely new implementation: bitmap and xmag.
Other changes of note:
Editres is a tool that allows users and application developers to view the full widget hierarchy of any X Toolkit client that speaks the Editres protocol. In addition editres will help the user construct resource specifications, allow the user to apply the resource to the application and view the results dynamically. Once the user is happy with a resource specification, editres will append the resource string to the user's resources file.
Xdm can now display a menu of hosts for XDMCP-capable terminals using the new chooser client. This is useful for X terminals that do not themselves offer such a menu.
XDMCP works with STREAMS.
A new setup program is invoked by xdm prior to putting up the login window; this program can be used to run xsetroot, xcmsdb, and do any other custom initialization required.
Cuts of wrapped lines are now treated as a single line. Cuts of multi-page regions now work and highlight correctly. Pasting large amounts of data into xterm now works (on systems with properly-working pty implementations). New arguments have been added to the send-signal action: quit, alarm. The titeInibit resource has been modified to also inhibit the escape sequence which switches to the alternate screen. Two new items have been added to the VT Fonts menu: 5x7 (Tiny) and 10x20 (Huge). The following resources have been added: resizeGravity, bellSuppressTime, appcursorDefault, appkeypadDefault, ginTerminator, autoWrap. The Xterm Control Sequences document is up to date. Xterm is installed securely when made setuid on SunOS 4.1.1 with shared libraries.
Xmh now uses the MH environment variable, if set.
Xmh now supports checking for mail in multiple maildrops.
Enhanced participation in WM_PROTOCOLS has been added.
New resources have been added, including:
rescanInterval, showOnInc, noMailBitmap,
newMailBitmap, newMailIconBitmap, and noMailIconBitmap.
New actions have been added:
XmhWMProtocols, XmhShellCommand, XmhCheckForNewMail,
Better recovery from unexpected inconsistencies with the filesystem
has been implemented.
Better POP support has been added.
See the file
mit/clients/xmh/CHANGES for more details.
Oclock has a new -transparent option.
Xload is secure on SunOS 4.1.1 with shared libraries.
Xditview now supports pic, scalable fonts, settable device resolution, and has a better user interface.
All of the useful libraries now use function prototypes by default for systems which support them. SunOS shared libraries now use much less swap space than in R4. In addition, System V Release 4 and AIX 3.1 shared libraries are also supported now. Configuring new shared library systems should be much easier than before.
Two new major pieces of functionality have been added to Xlib: device independent color, and internationalization (i18n). In addition, a few other additions and improvements have been made.
The Xlib manual has been reorganized for Release 5. Unfortunately, this may cause considerable confusion for a while when people quote section numbers without reference to the release. However, we feel that the new organization is a considerable improvement.
The Xcms (X Color Management System) functions in Xlib support device-independent color spaces derivable from the CIE XYZ color space. This includes the CIE XYZ, xyY, L*u*v*, and L*a*b* color spaces as well as the TekHVC color space. In addition, linear RGB intensity value space has been added, as well as gamma correction for device RGB values, and a uniform syntax has been adopted for specifying colors in strings. Xlib now supports client-side color name databases, and the existing Xlib functions that use color names (e.g., XLookupColor and XAllocNamedColor) now handle all color spaces, so that the contrivance of using XParseColor followed by XAllocColor is no longer necessary. Xlib provides direct programming interfaces for dealing with color values in different spaces, and for converting between spaces. New device-independent color spaces can also be added. For details on the new color functionality, read Chapter 6 of the new Xlib manual.
Monitors are characterized by data stored on root window properties;
the new xcmsdb program can be used to set these properties.
Unfortunately, you need a color analyzer instrument to generate
characterizations; choosing a random one will almost certainly
produce inaccurate colors. However, you will find some sample
database files in
mit/clients/xcmsdb/datafiles and in
An internationalized application is one which is adaptable to the requirements of different native languages, local customs, and character string encodings. The process of adapting the operation to a particular native language, local custom, or string encoding is called localizaton. A goal of internationalization is to permit localization without program source modifications or recompilation.
Internationalization in Xlib is based on the concept of a locale. A locale defines the “localized” behavior of a program at run-time. Locales affect Xlib in its:
- Encoding and processing of input method text
- Encoding of resource files and values
- Encoding and imaging of text strings
- Encoding and decoding for inter-client text communication
Characters from various languages are represented in a computer using an encoding. Different languages have different encodings, and there are even different encodings for the same characters in the same language.
Xlib provides support for localized text imaging and text input. Sets of functions are provided for multibyte (char\&) text as well as wide character (wchar_t*) text in the form supported by the host C language environment. For details on the new internationalization functionality, read Chapter 13 of the new Xlib manual.
Two sample implementations of the internationalization mechanisms
exist in this release, one called Xsi and one called Ximp.
You will find documentation for them in
contrib/im, and locale definition files in
contrib/im you will also find network-based
Input Method servers.
Unfortunately, none of the programs in the MIT software use the new
internationalization facilities. However, you will find some sample
contrib/im, and internationalized versions of some
of the MIT clients in
By default a database of all registered vendor-private keysyms gets installed, so that Xlib can map between keysym values and names.
A new SCREEN_RESOURCES property has been defined, permitting screen-specific resources to be set, so that (for example) colors can be specified for a color screen and not effect a monochrome screen on the same server. The xrdb program has been enhanced to “do the right thing” automatically in most cases.
New functions have been defined to merge a resource database directly from a file, and to combine two databases with either “augment” or “override” semantics.
A “#include” syntax is now supported in resource files. A specific example of using this is to have a customized app-defaults file (in an Xt application) include the base app-defaults file.
A new reserved component name, “?”, has been defined that matches a single level in the resource hierarchy. This makes it easier to override resources specified in app-defaults files.
A new function, XrmEnumerateDatabase, has been defined to search for matching entries in a resource database. The appres program has been enhanced in this release to become a convenient interface to this function.
A new function, XrmPermStringToQuark, has been introduced to avoid having Xlib allocate needless storage for constant strings.
A new function has been added to permit an extension to convert errors with additional data into Xlib format, and one has been added to permit an extension to print out the values in an error handler.
A new type XPointer has been introduced, replacing uses of the non-standard type caddr_t. Old programs using caddr_t will still work, of course.
The new color and internationalization facilities have the unfortunate effect of making executables quite a bit larger on systems that do not have shared libraries.
The resource database functions have been completely rewritten for this release. Databases should be significantly smaller in memory, and loading and parsing resources should be faster.
At the data structure level, Release 5 retains complete binary compatibility with Release 4. The specification of the ObjectPart, RectObjPart, CorePart, CompositePart, ShellPart, WMShellPart, TopLevelShellPart, and ApplicationShellPart instance records was made less strict to permit implementations to add internal fields to these structures. Any implementation that chooses to do so would, of course, force a recompilation. The Xlib specification for XrmValue and XrmOptionDescRec was updated to use a new type, XPointer, for the addr and value fields respectively, to avoid ANSI C conformance problems. The definition of XPointer is binary compatible with the previous implementation.
A new pseudo-resource, XtNbaseTranslations, was defined to permit application developers to specify translation tables in application defaults files while still giving end users the ability to augment or override individual event sequences. This change will affect only those applications that wish to take advantage of the new functionality, or those widgets that may have previously defined a resource named “baseTranslations”.
Applications wishing to take advantage of the new functionality would change their application defaults file, e.g., from
If it is important to the application to preserve complete compatibility of the defaults file between different versions of the application running under Release 4 and Release 5, the full translations can be replicated in both the “translations” and the “baseTranslations” resource.
The current specification allows implementations greater flexibility in defining the directory structure used to hold the application class and per-user application defaults files. Previous specifications required the substitution strings to appear in the default path in a certain order, preventing sites from collecting all the files for a specific application together in one directory. The Release 5 specification allows the default path to specify the substitution strings in any order within a single path entry. Users will need to pay close attention to the documentation for the specific implementation to know where to find these files and how to specify their own XFILESEARCHPATH and XUSERFILESEARCHPATH values when overriding the system defaults.
XtResolvePathname supports a new substitution string, %C, for specifying separate application class resource files according to arbitrary user-specified categories. The primary motivation for this addition was separate monochrome and color application class defaults files. The substitution value is obtained by querying the current resource database for the application resource name “customization”, class “Customization”. Any application that previously used this resource name and class will need to be aware of the possibly conflicting semantics.
To allow a user to specify separate preferences for each screen of a display, a per-screen resource specification string has been added and multiple resource databases are created; one for each screen. This will affect any application that modified the (formerly unique) resource database associated with the display subsequent to the Intrinsics database initialization. Such applications will need to be aware of the particular screen on which each shell widget is to be created.
Although the wording of the specification changed substantially in the description of the process by which the resource database(s) is initialized, the net effect is the same as in prior releases with the exception of the added per-screen resource specification and the new customization substitution string in XtResolvePathname.
Internationalization as defined by ANSI is a technology that allows support of an application in a single locale. In adding support for internationalization to the Intrinsics the restrictions of this model have been followed. In particular, the new Intrinsics interfaces are designed to not preclude an application from using other alternatives. For this reason, no Intrinsics routine makes a call to establish the locale. However, a convenience routine to establish the locale at initialize time has been provided, in the form of a default procedure that must be explicitly installed if the application desires ANSI C locale behavior.
As many objects in X, particularly resource databases, now inherit the global locale when they are created, applications wishing to use the ANSI C locale model should use the new function XtSetLanguageProc to do so.
The internationalization additions also define event filters as a part of the Xlib Input Method specifications. The Intrinsics enable the use of event filters through additions to XtDispatchEvent. Applications that may not be dispatching all events through XtDispatchEvent should be reviewed in the context of this new input method mechanism.
In order to permit internationalization of error messages the name and path of the error database file is now allowed to be implementation dependent. No adequate standard mechanism has yet been suggested to allow the Intrinsics to locate the database from localization information supplied by the client.
The previous specification for the syntax of the language string specified by xnlLanguage has been dropped to avoid potential conflicts with other standards. The language string syntax is now implementation-defined. The example syntax cited is consistent with the previous specification.
In order to permit additional memory savings, an Xlib interface was added to allow the resource manager to avoid copying certain string constants. The Intrinsics specification was updated to explicitly require the Object class_name, resource_name, resource_class, resource_type, default_type in resource tables, Core actions string field, and Constraint resource_name, resource_class, resource_type, and default_type resource fields to be permanently allocated. This explicit requirement is expected to affect only applications that may create and destroy classes on the fly.
The args argument to XtAppInitialize, XtVaAppInitialize, XtOpenDisplay, XtDisplayInitialize, and XtInitialize were changed from Cardinal* to int* to conform to pre-existing convention and avoid otherwise annoying typecasting in ANSI C environments.
Function prototypes are now fully supported in the header files.
<X11/Intrinsic.h> no longer includes
*lt;X11/Xos.h> by default.
Inclusion of this file was a bug in earlier releases. If you have
old code that depends on this bug, you can define
-DXT_BC when you compile
to get back the old behaviour.
String constants are now defined in a single array, saving memory and external symbols. Note that because the new implementation uses #defines, string constants in widget header files which duplicate a constant defined by Xt should either be removed or protected from a collision.
The translation manager facilities have been completely reimplemented in this release, resulting in substantially less memory consumed by some applications. A number of other memory-saving changes have been implemented, and in a few cases execution time should be faster.
The default keycode to keysym translator deals with all Latin keysyms.
Unfortunately, the Xt standard as of R5 still does not address the
issues of integrating events from protocol extensions into the
normal Xt dispatch mechanism. The adventurous will find a set
of patches to Xt in
contrib/lib/Xt that attempt to address
this problem. These patches are non-standard, experimental,
subject to change, not guaranteed, may adversely affect your ability to
apply public patches from MIT, and have not reviewed by the X Consortium.
The PEX Sample Implementation (SI) is composed of several parts. The major components are the extension to the X Server, which implements the PEX protocol, and the client side Application Protocol Interface (API), which provides a mechanism by which clients can generate PEX protocol. The API provided with the PEX-SI is the ISO IS PHIGS Binding and the yet to be standardized PHIGS PLUS Binding.
In addition to these major components, several other minor components are
provided. These include documentation, 3D fonts for PEX, demos, and
a verification suite called InsPEX. Also provided in
are additional example programs and demos.
These elements are located in the following area:
The PEX server extension is located in the directories under
mit/extensions/server/PEX. Device independent portions are located
mit/extensions/server/PEX/dipex. Device dependent functionality
mit/extensions/server/PEX/ddpex. Operating system font
dependent code appears in
purpose server include files are in
The API code is located under the directory
The PHIGS/PHIGS PLUS Binding routines are in the
The PHIGS Monitor (PM), a separate process started at client runtime
to handle PHIGS Input functionality, is in the
Other code located in the various subdirectories handles PHIGS archival,
error handling, and comprises the internal library level that PHIGS calls
to generate the PEX Protocol.
All PEX documentation is located in the directory
with pregenerated PostScript files in
The PEX Protocol Specification itself is in the
Proto subdirectory. All
SI documentation is in the
SI subdirectory. Three subdirectories there
contain an Architecture Specification, a Porting Guide (with implementation
details), and a User's Guide. The sources and programs used to generate
these files are located in the
Also located there is the
PHIGS subdirectory which contains PHIGS man
pages and macros for printing these pages.
Font source for PEX and utilities to build them are located in the directory
mit/fonts/PEX. Two stroke fonts are supplied.
The PEX verification tool InsPEX can be found in the
Shell scripts are provided there to run InsPEX.
More information on InsPEX is available in the User's Guide.
Demos for PEX can be found in the
Two demos and the
NCGA Graphics Performance Characterization (GPC) Suite can be found
there. The demos are in the
mit/demos/beach_ball directories, and are named auto_box
and beach_ball respectively.
The GPC suite is found in
This suite consists of demos (in the
benchmarks (various directories below
benchmarks) and tests
tests). For more information on how to run these demos see the
There are also several unsupported demos and examples available in
contrib/demos/beach_ball2 a newer version
of the beach_ball demo with enhanced functionality can be found.
contrib/examples/PEX various PHIGS based clients that
demonstrate how to use PEX via the PHIGS API are available.
This release conforms to the PEX Protocol Specification V5.0P. The release comes with 2 fonts, Roman and Roman_M (see the User's Guide for more details). It implements the minimum required HLHSR (Hidden Line/ Hidden Surface Removal) for PHIGS compliance (i.e., NONE). The release only supports 8-bit color.
The API binding has been updated to the ISO IS PHIGS binding.
sed scripts for
from the previous binding to the new binding. These scripts do most of
the work, but some manual editing is still needed. There is a README
file in this directory with notes and information.
The PHIGS Binding provides most PHIGS/PHIGS PLUS functionality. The full PHIGS Input Model (Valuator, Locator, Stroke, Choice, String, Pick) is implemented in a device independent manner using the Athena Widget Set. PHIGS/PHIGS PLUS functionality includes, but is not limited to the following graphical primitives: Polylines, Polymarkers, Fill Areas, Triangle Strips, NURBS Curves and Surfaces, 2D and 3D Text. Other operations include Depth Cueing, Modelling Clip, Backface removal, Lighting Models and Surface Reflection.
Functionality not completed in this release is as follows:
In the API:
- Mapping of PHIGS font ids to PEX fonts
In the Server:
- Backface Attributes and Distinguish Flag
- Font sharing between clients
- Patterns, Hatches and associated attributes
- Color Interpolation
- Depth Cueing for Markers
- Double Buffering
- Completion of port to ISO IS PHIGS Binding
The following documents are provided with this release:
- PEX-SI User Guide
- PEX-SI Graphics Library Manual Pages
- PEX-SI Architecture Specification
- PEX-SI Porting Guide
They are located in subdirectories of
Please read the PEX-SI User's Guide for descriptions of the documents and
how to use them. Instructions for printing the documents are provided
in a README file in each of the document directories.
The User's Guide is provided as a starting point in the documentation. It describes the various documents provided with the release, and includes instructions on using the clients, the API and the server code. It also includes specifications for the server functionality and archive format.
The Graphics Library Manual Pages are for the client-side library, written to the ISO IS binding.
The Architecture Specification describes the PEX-SI architecture at a high level.
The Porting Guide is intended as an extension to the Architecture Specification. There is a lot of good information in this document, and it is organized fairly well, but it lacks some polish. It is not a complete document.
This release of InsPEX includes coverage of all the PHIGS PLUS graphics primitives, such as fill area sets with data, quadrilateral meshes, triangle strips, and NURBS. PHIGS PLUS attributes such as direct color specification, depth cuing, and lighting are also exercised.
The testing of input is somewhat limited by the problem of simulating mouse and keyboard input in a reliable and portable fashion. For the pick, locator, and stroke devices, simulating the mouse events is straightforward, but since the string, valuator, and choice devices are built upon a toolkit (Athena Widgets in the PEX-SI's case), getting window id's for the appropriate windows and sending mouse clicks to the right place on those windows is more difficult, and probably impossible to do in a way that could be quickly ported to another toolkit along with these input devices. The technology for automatic testing of software using a graphical user interface under X has not progressed to the point where this functionality could be tested in a way that would be useful to all the potential users of InsPEX.
For nearly all of the tests that use image comparison to verify graphical output, reference images have been supplied. Due to outstanding bugs in the code, however, some tests are shipped without reference images. Also, since back-facing attributes are not implemented, the images saved for these tests are actually incorrect. These have been shipped, however, because they still can be helpful to someone porting the PEX-SI. It should be expected that when backfacing attributes are implemented, these tests will fail and image comparison will be required.
Along with the README in the main InsPEX directory, there is a sample
log file, sample.log, and an automatically-generated summary of all the
test_descrip. See the README for a description
of how that file was generated.
Many minor bugs have been fixed.
The Xaw examples have been moved to
However, please note that the Athena Widgets have been and continue
to be low on our priority list, so many bugs remain (particularly
in the Text widget) and many requests for enhancements have not
been implemented. Because some incompatible
changes have been made, the shared library major version number on
Suns has been incremented.
Function prototypes have been added to the public interfaces.
No warning message is printed when the file cannot be written to; the return value should be enough info. GetValues on the string resource was failing when "useStringInPlace" was set to true; fixed. A memory leak when freeing pieces in a source of type "ascii String" has been plugged. The buffer is now updated whenever the "string" resource is set using XtSetValues. If the type is file then the file is read in again.
Box.h now includes
<X11/Xmu/Converters.h> for the
Changed to be a subclass of Simple instead of Core.
A bug in changing the shape style back to Rectangular has been fixed.
The Icon resource type has changed from Pixmap to Bitmap.
The geometry handler now will now disallow geometry management requests that will force the child outside the Form's window. EdgeType names have been changed to have prefix “Xaw” instead of “Xt”, but the old definitions are still around with a #define. The string-to-widget converter no longer caches resources.
Changed to be a subclass of Simple instead of Core. Reverse video now works correctly.
Changed to be a subclass of Simple instead of Core. Reverse video now works correctly.
The MenuButton widget no longer places a server grab on itself. Instead, PopupMenu is registered as a grab action. As a result of this, clients which popped up menus without using XtMenuPopup or MenuPopup or PopupMenu in the menu button translations will fail to have a grab active. They should make a call to XtRegisterGrabAction on the appropriate action in the application initialization routine, or use a different translation.
Paned.h now includes
<X11/Xmu/Converters.h> for the
This widget is new in R5, see the Xaw manual for details.
This widget is new in R5, see the Xaw manual for details.
This widget is new in R5, see the Xaw manual for details.
Changed to be a subclass of Simple instead of Core. The type of thumb resource has changes from Pixmap to Bitmap. However, if applications provide the resource conversion, the SetValues method can still handle pixmaps of correct depth.
A color cursor converter has been added, as well as the new new resource types: XtNpointerColor, XtNpointerColorBackground, and XtNcursorName.
The Right bitmaps are now painted in the correct location. Right and Left Bitmaps can be specified in resource files, and at startup time.
If there is no current selection the the selection extends
from the insert point, rather than some random location.
Forward (Backward) Paragraph works at the paragraph boundaries now.
Selecting a word now transitions correctly at both end points.
An infinite loop when using fill paragraph in a read only text widget
has been found and fixed.
When the "resize" resource is set the text will start up with
exactly enough space to contain the text in the widget.
A bug that could cause an infinite loop when Meta-Q was used
to invoke the form-paragraph function on a read-only text widget has
Problems dealing with exposure events have been fixed.
TextP.h, the names of the following symbolic constants
have each had the prefix Xaw added to them:
XawLF, XawCR, XawTAB, XawBS, XawSP,
XawDEL, and XawBSLASH.
The widget state is preserved across changes in sensitivity. A string-to-widget converter is registered for radio groups.
This widget is new in R5, see the Xaw manual for details.
A bug that caused XtGeometryYes returns to have bogus values, and caused panes to get random sizes, has been fixed.
Support has been added for the editres protocol. All applications using the Athena Widgets are automatically editable with editres. A bug that cause Shell to ignore all but first child has been fixed.
XawPannerReport support has been added.
Considerably more work speeding up the server has been done,
particularly in the
The font interfaces are completely new.
Compressed fonts are not supported in the release.
Other changes are documented in
A sample implementation of the server side of the X Font Service Protocol is provided in a new program, fs. On the Macintosh, a special version of the server called MacFS can be used to serve TrueType fonts.
Both the X server and the font server use a new font format, pcf (portable compiled font). Pcf is readable across different machines and contains more information about a font than the old snf format. Fonts in snf format can still be used.
The following new utilities talk to the font server: fsinfo, fslsfonts, fstobdf, and showfont. To build pcf fonts, bdftosnf has been replaced by bdftopcf.
Bitstream, Inc. has donated an outline scaling engine along with a set of sample fonts, matching the donated bitmap fonts included with Release 4. In addition, a usable (but not very pretty) bitmap scaling engine has been implemented which allows the use of all other fonts at arbitrary point sizes.
Many misc fonts now have ISO Latin-1 upper half characters and some tuning. The following sets of fonts are new: Latin/Hebrew in ISO8859-8 encoding, Kanji in JISX0208.1983-0 encoding, Hangul in KSC5601.1987-0 encoding.
The JIS Kanji fonts were purchased on behalf of the MIT X Consortium from the Japanese Standards Association, 1-24, Akasaka 4, Minato-ku, Tokyo 107, Japan. They were converted to BDF format, keeping within the JIS rules. In keeping with JIS rules, these fonts should not be transformed into other encodings, they should only be used in the JISX0208.1983-0 encoding. It is also strongly recommended that companies wishing to use these fonts in commercial products should purchase the original JIS font standards directly from JSA. The purchase price is nominal.
The MIT Release 5 distribution is brought to you by the MIT X Consortium. A cast of thousands, literally, have made this release possible. We cannot possibly acknowledge them all here. The names of all people who made it a reality will be found in the individual documents and source files. We greatly appreciate the work that everyone has put into this release.
Hoping you enjoy Release 5,
- Donna Converse
- Stephen Gildea
- Susan Hardy
- Jay Hersh
- Keith Packard
- David Sternlicht
- Bob Scheifler
- Ralph Swick
(R5 Survival Club)