aboutsummaryrefslogtreecommitdiff
path: root/vendor/x11iraf/Notes-V1.3.txt
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/x11iraf/Notes-V1.3.txt')
-rw-r--r--vendor/x11iraf/Notes-V1.3.txt1472
1 files changed, 1472 insertions, 0 deletions
diff --git a/vendor/x11iraf/Notes-V1.3.txt b/vendor/x11iraf/Notes-V1.3.txt
new file mode 100644
index 00000000..bd708235
--- /dev/null
+++ b/vendor/x11iraf/Notes-V1.3.txt
@@ -0,0 +1,1472 @@
+
+ X11IRAF V1.3 REVISIONS NOTES
+ ============================
+
+-------------------------------------------------------------------------------
+ Last Modified: Mon Feb 4 14:29:30 MST 2002
+-------------------------------------------------------------------------------
+
+Table of Contents:
+------------------
+
+ 1. Installation Changes
+
+ 2. XImtool Revisions
+ 2.1 Real-Time WCS/pixel Readout
+ 2.2 "Peak-up" Cursor Centroid Positioning
+ 2.2.1 Command Summary
+ 2.2.2 Resource Summary
+ 2.3 Auto-Registration of Images
+ 2.3.1 Command Summary
+ 2.4 Integrated Control Panel
+ 2.4.1 Load Panel Changes
+ 2.4.2 Info Panel Changes
+ 2.4.3 Tile Panel (NEW)
+ 2.4.4 Coords Panel (NEW)
+ 2.5 Support for 16 Display Frames
+ 2.6 Magnifier
+ 2.7 Freezing Cursor Readout
+ 2.8 Cut-Graphs
+ 2.9 Ruler Markers
+ 2.10 Summary of Cursor Commands
+ 2.11 Summary of Application Resources
+ 2.12 Summary of Command-Line Options
+
+ 3. OBM (Widget Server) Revisions
+ 3.1 New Toolkit Widgets
+ 3.1.1 Tabs Widget
+ 3.1.2 ListTree Widget
+ 3.2 Dynamic Widget Creation
+
+ 4. Client Display Library (CDL) Revisions
+ 4.1 Display Protocol Changes
+ 4.2 New Procedures
+ 4.2.1 C Calling Sequence
+ 4.2.2 F77 Calling Sequence
+ 4.2.3 SPP Calling Sequence
+ 4.3 Demo Task Updates
+
+ 5. Technical Notes
+ 5.1 IIS Protocol Changes
+ 5.1.1 IIS Protocol Summary
+ 5.2 IRAF 'imd' Interface Changes.
+ 5.2.1 Program Initialization
+ 5.2.2 WCS Text Changes
+ 5.2.3 Cursor Reads
+ 5.3 ISM Communications
+ 5.3.1 Socket Connection
+ 5.3.2 Communications Protocol
+ 5.3.3 GUI Objects
+
+-------------------------------------------------------------------------------
+
+
+
+1. INSTALLATION CHANGES
+=======================
+
+ A new script automatically unpacks the distribution and installs
+files in the system (or user's directories for a private install), provides
+error checking and user interaction to skip parts of the process or change
+defaults. The 'install' script is packaged with both source and binary
+distribution files. To install for general use in the system directories
+the script must be run as root user, it may be run by any user to install
+to private directories.
+
+To install from an unpacked source distribution:
+
+ % xmkmf build the package Makefile
+ % make World build binaries from sources
+ % su become the root user
+ # ./install install the files (interactive)
+
+Only the last two commands are required to install from an unpacked binary
+distribution.
+
+
+
+2. XIMTOOL REVISIONS
+=====================
+
+ Aside from general bug fixes most of the changes in this release
+are all new features for XImtool. Details on individual features are
+explained below, but in summary:
+
+ - real-time cursor image WCS and actual pixel readout
+ - new cursor centroiding function
+ - ability to "auto-register" frames
+ - integrated/enhanced control panel
+ - support for up to 16 display frames
+ - improved support for image tiling
+ - a "compass" indicator for the display orientation
+ - pixel table readout
+ - image header display (keyword selection, WCS display)
+ - horizontal/vertical cut-graphs of the display
+ - ruler markers on the display
+ - control port for external process communications
+
+
+ The most significant change in this version is the ability to
+access the displayed image pixels or header data to produce the real-pixel
+and WCS readouts. This is done using an external process called an ISM
+(Image Support Module) which communicates with ximtool as a "plug-in"
+module to enhance the features of the core program. In this case the ISM
+is written as an IRAF task (although any application that can send text
+over a socket can be used as an ISM regardless of the
+language/environment) run at the host level with the ability to access any
+supported image format. Any number of such ISM plug-ins can be developed
+to provide e.g. catalog overlay, animation, and so on.
+
+ For the WCS/pixel ISM to operate properly changes to the display
+protocol were required to pass the needed information. These changes are all
+backwards compatible with "older" display servers however for the ISM to
+work at all you will need to be running at least IRAF V2.11.4. Updates to
+external packages using image display (notably MSCRED) have already been
+completed. Details of the changes required are found in the technical notes
+at the end of this document.
+
+ Users should feel free to contact IRAF site support (iraf@noao.edu)
+with any questions.
+
+
+------------------------------------------------------------------------------
+
+
+ Detailed Revisions Notes
+ ========================
+
+
+2.1 Real-Time WCS/pixel Readout
+================================
+
+ XImtool now has the ability to display the actual pixel value of
+an image (as well as the scaled value previously shown) and the
+cursor position in image WCS values (e.g. RA/DEC, GLAT/GLONG, etc). This
+is done using an external task (the 'ism_wcspix.e' binary in the new
+distribution) to access the image and pass the coordinate/pixel info-
+rmation to the GUI.
+
+ WCS readout is enabled by default but can be toggled or reset
+using the 'WCS/Pix' button on the Coords tab in the control panel or the
+"ISM" toggle on the alt-gui menubar. When enabled, images currently in
+the server or subsequently displayed will be passed to the external
+process where they are cached for access. Cursor movements generate an
+event that maps the current frame buffer position to a position in the
+cached image. The ISM (ISM is Image Support Module) task then reads the
+image to determine the pixel value (or a small table of values around the
+current position), and computes one or more coordinates from the image
+position. The ISM task also has access to the associated BPM images and
+can optionally return bad pixel information during the cursor readout.
+
+ By default, the logical and world image coordinates are displayed
+to both the Coords panel readout as well as the main display window wcsbox
+text marker. Alternate coordinate systems (e.g. transformation of
+equatorial to galactic coordinates or some other sky system, physical
+coords, amplifier coords, etc) can be selected for display by hitting the
+"Options" toggle on the Coords panel. Available coordinate systems are
+chosen using the "Type" menu on the panel, the readout format
+(sexigesimal, degrees, etc) using the "Format" menu, and the display to
+the current panel or main image window using the remaining toggles for
+each WCS. Up to four systems may be displayed at one time, the coordinate
+panel and wcsbox marker will adjust size automatically depending on the
+display.
+
+ By selecting the "BPM Data" toggle from the Coords.Options panel
+ximtool is able to flag pixels in images with an associated bad pixel mask.
+This bad pixel mask is currently assumed to be named in the image header
+"BPM" keyword by convention. If the cursor passes over a bad pixel in the
+mask, the Coords bpm display as well as the main window wcsbox will change
+to a red background color. Only the Coords display will show the value,
+any non-zero value will be flagged with the color change.
+
+ With the ISM enabled the Compass indicator will display a set of
+arrows showing North-East if a WCS is available, otherwise just the
+current X-Y axes are shown. The pixel table will display actual pixel
+values from the image, with the ISM off the pixel table displays the
+scaled image values from the frame buffer.
+
+
+
+2.2 "Peak-up" Cursor Centroid Positioning
+==========================================
+
+ Several new keystroke commands are available to reposition the
+cursor to a centroid or min/max pixel value within a bounding box of the
+cursor position, allowing you to approximate the position with the mouse
+and fine tune it quickly before typing the application keystroke command.
+The initial box size is controlled with a 'centerBoxSize' GUI resource
+(defaults to 5 pixels) but can be adjusted interactively using the Ctrl-[
+and Ctrl-] commands to descrease/increase the box size respectively. A
+marker will flash briefly to indicate the box size.
+
+ The Ctrl-0 (zero) key finds either a centroid or the local maximum
+pixel value within this box region, Alt-Ctrl-0 (zero) will find the local
+minimum value. In either case the cursor is reposition to the computed
+value. The default peak-up action is to find the centroid position in the
+box however this can be changed to find the max pixel by selection the
+"Centroid Peaks" option from the main Display control panel or by resetting
+the "peakCentroid" GUI resource (defaults to True).
+
+ Centroiding is done using only the scaled screen pixel values and
+only pixels above the mean value within the box are used. It works best
+if the box size is set appropriately, the centroid position may appear to
+drift if the box is too large and includes too many background pixels.
+
+
+ 2.2.1 Command Summary:
+ ----------------------
+
+ Ctrl-0 (zero) Reposition to centroid/max-pixel
+ Alt-Ctrl-0 (zero) Reposition to min-pixel
+ Ctrl-[ Decrease centering box size (min of 5)
+ Ctrl-] Increase centering box size
+
+ 2.2.2 Resource Summary:
+ -----------------------
+
+ peakCentroid True Compute the box centroid position, a
+ 'False' value force the max value to be used
+ centerBoxSize 5 Size of the centroid box, used as cursor
+ position +/- this value
+
+
+
+2.3 Auto-Registration of Images
+================================
+
+ The auto-register feature allows you specify a registration of
+two or more display frames with an offset. When enabled, this registration
+is maintained for all frames in the list if any one of them is panned or
+zoomed to a new location in the frame buffer.
+
+For example, to use this feature do the following:
+
+ 1) Enable Auto-Register (either on the Control Panel or the tool-
+ bar on the alt-gui) and pan/zoom to some star of interest.
+ 2) Use Mouse-Button-2 to center the star in the frame.
+ 3) Cycle through the frames and you may see a small shift
+ of the star. For each frame, position the cursor on the
+ star and type Ctrl-o to offset it to the center. Repeat
+ as necessary. Small corrections will be cumulatively added
+ so you can use the Ctrl-0 peak-up command to centroid each
+ object in the frame before the Ctrl-o offset.
+ 4) Pan around the image in one display frame, then switch frames
+ and the new frame should also be panned to the new image with
+ the proper offset.
+ 5) A Ctrl-a command will toggle the feature, offsets are only
+ allowed when autoreg is enabled.
+
+ Hitting "Register" will zero the offsets, as will toggling the
+auto-register function. What you should see is the object centered in
+the frame and as you blink through it remains registered but the panner
+box marker is moving around. Drag the panner around and all frames
+still remain registered with the given offset. The control/info panels
+now display what the offset is for each frame.
+
+ The register display list is shared with the blink list and can
+be set using the Display control panel. By default all frames are included
+in the list. For accessing more than four frames, use the box icon in
+the Blink/Register box of the Display control panel to bring up a new window
+with access to all 16 available frames.
+
+
+ 2.3.1 Command Summary:
+ -----------------------
+
+ Ctrl-o set the offset from center
+ Ctrl-a toggle the Auto-register feature
+
+
+
+2.4 Integrated Control Panel
+=============================
+
+ The separate windows previous used for Control/Print/Load/Save/etc
+have now been integrated into a single window with the appropriate control
+panel selectable with a Tab widget. There are also new Tab panels for
+setting the frame tile configuration (see below), more detailed information
+on the server status, and selecting the WCS readout options (see above).
+
+ All panels were updated as part of the integration, however some
+changes of note to each panels include:
+
+ Display
+ + View box
+ - supports 16 frames
+ - Frame offset added to readout
+ + Blink/Register
+ - new box icon button brings up independent control panel w/
+ access to all 16 frames
+ + Options
+ - addition of "Magnifier" and "Centroid Peaks" options
+ Print
+ + Postscript Options
+ - added B5 paper size as option
+ Load
+ + Complete redesign of panel (see below)
+ + New options group (see below)
+ + Filename filter accepts a comma-delimited list of templates
+ Save
+ + EPS added a save format, saves image w/ no annotation
+ Info
+ + Complete redesign of panel (see below)
+ Tile
+ + New panel allowing configuration of tile frame layout (see below)
+ Coords
+ + New panel allowing selection of WCS readout options (see below)
+
+
+2.4.1 Load Panel Changes
+-------------------------
+
+ The Load panel was redesigned to make directory navigation easier
+as well as to provide new features. The file list box is now larger and
+implemented using a more natural directory listing format. The filename
+filter box can now accept a comma-delimited list of templates providing
+multiple matches to e.g. "*.fits" and "*.imh" images in the same listing.
+Directories are always listed in the output.
+
+A new options group was added to the panel with the following features:
+
+ Auto Load
+ If enabled, selecting an image name from the list will force it
+ to the display automatically. Otherwise the Load button at the
+ bottom of the panel must be used to load the image. Specifying
+ a filename in the "Load File" text box will load that image either
+ with a CR or using the panel Load button.
+
+ Auto Grayscale
+ If enabled, color images (e.g. GIF) are converted to grayscale
+ automatically, otherwise a private colormap is loaded for the image.
+
+ List Image Headers
+ If enabled the file list will change to display only the matching
+ image names along with the pixel size, image size, and optional
+ title string. Directory navigation is disabled until this option
+ is turned off. MEF FITS files will be listed with the number
+ of extensions they contain but cannot be loaded.
+
+ Frame
+ Select the frame in which to display the image. The special
+ value "Current" is used to display to whichever is the current
+ display frame, otherwise any of 16 available frames may be selected.
+
+ Zscale Options
+ The remaining options can be used to specify the z-scale parameters
+ used when loading the image. The algorithm works as follows:
+
+ if (zscale enabled)
+ determine optiminal z1/z2 given 'Nsample' points
+ else if (zrange enabled)
+ use image min/max as z1/z2
+ else
+ use panel z1/z2 values
+
+ To load 8-bit data directly the 'zscale' option should be disabled.
+
+
+2.4.2 Info Panel Changes
+-------------------------
+ The Info panel was revised to provide a greater variety of status
+information. The type of output is controlled by the toggle buttons on
+the bottom of the frame, however all output is kept current as the program
+runs. Current info options include:
+
+ Frame - Info about the current display frame
+ Server - Info about various server options, e.g. colormaps,
+ memory model, antialias type, etc.
+ Clients - Show currently connected clients. Lists available
+ connection channels and active ISM clients.
+ WCS - List all WCS and mappings for the current frame
+ ISM - Log of various ISM status messages
+ Imtoolrc - Show current frame buffer configuration table
+
+
+2.4.3 Tile Panel (NEW)
+-----------------------
+
+ With the additional frames, the default tiling scheme proved in-
+adequate. A new control panel Tile frame now allows you to select from
+a number of tile configurations, the list of frames to be tiled, a "fill
+style" (left-to-right or top-to-bottom), as well as optional labels for
+each of the tiles (frame number, image title or image name).
+
+Tile configuration will make use of all frames currently selected in the
+"Tile Frame" group in the following manner:
+
+ Disabled Do not tile the display
+ Manual Tile according to "Manual Configuration" settings
+ Best Optimize layout for frame buffer aspect
+ Square Always force a square layout (2x2, 3x3, etc)
+ Horizontal Preferentially tile horizontally (6 frames ==> 3x2)
+ Vertical Preferentially tile vertically (6 frames ==> 2x3)
+ One Row Tile all in one row (Nx1)
+ One Column Tile all in one column (1xN)
+
+
+2.4.4 Coords Panel (NEW)
+-------------------------
+
+ The Coords Panel is meant to provide a full-featured readout as
+well as serve as a control panel for the various options. The display
+window contains the image name/title and frame buffer info, and a selection
+of coordinate and image pixel readouts. The intent is provide more infor-
+mation than can fit comfortably on the main image window while still
+taking up as little screen space as possible. To this end the "Options"
+button is used to hide most of the feature controls when not in use (see
+below). Other options on the main panel include:
+
+ WCS/Pix Toggle the real-time WCS/pixel readout capability
+ (i.e. the ISM used to access the disk image). This
+ must be enabled for certain other options to work.
+
+ Pix Table Open a panel showing an image pixel table. The panel
+ shows an array of pixels surrounding the cursor position,
+ either the actual pixel values if the ISM is enabled, or
+ scaled display values otherwise. The size of the table
+ may be selected from the menubar.
+
+ Header Display the current image header in a new panel. Both
+ the entire image header as well as WCS-specific parts of
+ the header are available under different tabs. This
+ option is only active when the ISM is enabled.
+
+ Compass Draw an orientation compass on the display panner. If
+ the ISM is enabled and a WCS is present in the header,
+ the compass will indicate N/E according to the WCS, other-
+ wise the X/Y axes of the image are drawn.
+
+ Options Pop-up/down the option control portion of the panel. When
+ enabled, the Coords Panel will change size to reveal the
+ options which can be changed (explained below).
+
+ The "Readout Values" group controls the selection of WCS type,
+location and format to be displayed. The "Type" menu always provides a
+selection of the image Logical, Physical or World systems, which may be
+identical depending on the image header. If a World system is supplied in
+the image addition entries for transformations to other sky systems, (e.g.
+FK5 to ICRS or galactic/ecliptic) will also be available. The selection
+is dependent on whether the ISM is running as well as WCS information
+present in the image. The "Format" menu allows the use to select a
+sexigeimal display, conversion to degrees or radians, or whichever format
+is most natural for the coordinate being display. The two toggle to the
+right control whether this WCS is to be displayed on the Panel (i.e. the
+Coords Panel window) or the ImgWin (i.e. the text marker on the main
+image window).
+
+ Other options below this group control whether or not to display the
+WCS labels, the image name/title, and frame buffer information in the main
+Coords Panel display. The "BPM Data" option controls whether or not the
+ISM will try to map any bad-pixel mask associated with the image. If enabled,
+a bad-pixel mask specified by the image header BPM keyword (currently fixed
+by convention but this may be selectable later) will be mapped along with the
+image. Aside from wcs/pixel readouts at each cursor position, any BPM data
+values found will also be displayed. A non-zero value will cause the BPM
+field of the Coords Panel readout as well as the main image window marker
+to switch to a red background color to flag the value.
+
+ The last box allows the user to specify a different ISM task to be
+executed or to reinitialize the current one. In most cases this won't need
+to be changed, however a custom ISM could be started when using special
+data formats. This command string can also be controlled by the application
+"ism_task" resource.
+
+
+
+2.5 Support for 16 Display Frames
+==================================
+
+ As part of the extensive GUI changes, support for the full 16
+frames allowed by the IIS protocol is now available. IRAF V2.12 or
+later client tasks (and CDL library) are required to take advantage of
+these frames. All changes are backwards compatible, older versions of IRAF
+will continue to work but cannot access more than the original four
+frames. The new DISPLAY task will automatically sense whether the display
+server being used supports 16 frames or the original 4 and adjust the
+'frame' parameter maximum accordingly. The changes are fully backwards
+compatible for other servers (e.g. SAOimage, DS9, etc).
+
+ More frames are possible if needed but will require further changes
+to the client IRAF code to be effective. Allowing creation of more than
+16 frames by the Load panel can be done independently but would also require
+numerous code change to XImtool. Please contact site support (iraf@noao.edu)
+if there is a need for this, or for workaround suggestions depending on your
+application.
+
+
+
+2.6 Magnifier
+==============
+
+ The magnifier marker appears to be stable and was moved into the
+default ximtool GUI and is now enabled by default. The ximtool-mag command
+has been removed.
+
+
+2.7 Freezing Cursor Readout
+============================
+
+ Holding down the Alt key will now freeze the cursor display readout
+and draw crosshairs on the screen at the last position. This can be used
+for example to position the cursor but then allow the cursor to be moved to
+another window (to enter text, start a program, whatever) without losing
+the position information displayed on the screen.
+
+
+2.8 Cut-Graphs
+===============
+
+ XImtool now has the ability to display horizontal and vertical
+cut-graphs of the display, these appear as "flip-out" panels that appear
+on the bottom and right side of the main display window and are controlled
+by the small "H" and "V" buttons in the lower right corner of the window.
+When both panels are enabled the corner area of the display also shows an
+options panel for the graphs. Current options are:
+
+
+ Better Speed Draw the graphics so they update at the fastest
+ possible rate. This is done by subsampling pixels
+ to produce a smoother graph but without sacrificing
+ too much accuracy.
+
+ Better Accuracy Draw the graphics using all screen pixels to produce
+ the most accurate display. On fast modern machines
+ this can be enabled with no apparent loss of speed,
+ however older machines may wish to use this only
+ occassionally to limit any lag in the cursor tracking.
+
+ Image Pixels (Not Yet Implemented)
+
+
+ Jump Cursor If enabled, large jumps of the cursor do not update
+ the graphics display, small movements around an object
+ of interest will update the display continuously.
+
+ Smooth Cursor If enabled, all cursor movements cause the display to
+ be updated. This is another option that can be set
+ safely on faster machines but will cause a delay on
+ slower ones.
+
+ Graphics Cursors If enabled, the graphics cursors in either of the
+ plots are active and can be used to update the cursor
+ readout on the main image window and the complementary
+ cut-graph. This can be used for example to freeze
+ the cursor in the main display using the Alt key (see
+ above), then moving to one of the graphics windows
+ to perform cut graphs in only one axis.
+
+ Graphs are (currently) drawn using only the scaled display values
+to avoid complications of accessing multiple images in a mosaic display. Both
+plots are labeled using the frame z1/z2 values and contain cursor indicators
+which update contuously.
+
+
+
+2.9 Ruler Markers
+==================
+
+ Holding down the Ctrl key and the Left-Mouse-Button while moving
+the mouse will drag out a "ruler marker" measuring the distance from the
+initial point to the current mouse position. Releasing the Ctrl key before
+lifting the mouse button will leave the marker on the display, otherwise
+it will be erased automatically once the mouse button is released. Any
+number of ruler markers can be created in the frame.
+
+ Distances are measured by default in image logical pixels however
+the Right-Mouse-Button can be used inside the marker to popup a menu of
+options:
+
+ Sticky By default rulers are destroyed whenever the display
+ changes due to a pan, zoom, flip, or frame change.
+ This option will make the ruler "sticky" so it will
+ not be erased, subsequent use of the menu to shows
+ this option to be "UnSticky" to remove this feature.
+
+ Units Sub-menu to select the units of the display. If the
+ ISM is enabled and a WCS is present in the image and
+ selected as one of the readout options, distances may
+ also be read out in units of arcseconds, arcminutes,
+ or degrees instead of the default logical pixels. All
+ markers created after the unit change will readout in
+ the new units as their default.
+
+ Color Select the color of the marker.
+
+ Draw into Frame (Not Yet Implemented) Draw the marker as overlay
+ graphics in the frame. Doing so will retain the
+ marker when printing a hardcopy of the display.
+
+ Destroy Destroy the marker.
+
+The marker can also be destroyed by hitting the Delete or Backspace key
+while the cursor is in the marker. There is presently no way to move the
+marker to a new position in the frame.
+
+
+
+2.10 Summary of Cursor Commands
+===============================
+
+ * - indicates a new/changed command
+
+ Misc Functions
+ --------------
+ Ctrl-b Backward frame
+ Ctrl-c Center frame
+ Ctrl-f Forward frame
+ Ctrl-i Invert
+ Ctrl-n Normalize
+* Ctrl-m Toggle Magnifier
+* Ctrl-p Toggle Panner
+ Ctrl-r Register
+* Ctrl-s Match LUTs
+ Ctrl-t Tile frames toggle
+ Ctrl-u Unzoom (zoom=1)
+ Ctrl-x Flip X
+ Ctrl-y Flip Y
+ Ctrl-= Print
+ Ctrl-< Decrease blink rate
+ Ctrl-> Increase blink rate
+ Ctrl-+ Zoom in
+ Ctrl-- Zoom out
+
+ Alt-1 thru Alt-4 Set frame displayed
+ Ctrl-1 thru Ctrl-9 Set integer zoom factor
+
+ Ctrl-Alt-q Quit
+ Ctrl-Alt-f Fitframe
+
+ Panels
+ ------
+ Alt-b Blink frames toggle
+ Alt-c Control panel
+ Alt-h Help panel
+ Alt-i Info box panel
+ Alt-l Load file panel
+ Alt-p Print panel
+ Alt-s Save panel
+ Alt-t Tcl Shell panel
+
+ Auto-Registration
+ -----------------
+* Ctrl-a Toggle Auto-Reg
+* Ctrl-o Set offset
+
+ Cursor Positioning
+ ------------------
+* Ctrl-h/Left_Arrow move cursor 1 pixel left
+* Ctrl-j/Down_Arrow move cursor 1 pixel down
+* Ctrl-k/Up_Arrorw move cursor 1 pixel up
+* Ctrl-l/Right_Arrow move cursor 1 pixel right
+
+* Shift-Ctrl-h move cursor 10 pixels left
+* Shift-Left move cursor 10 pixels left
+* Shift-Ctrl-j move cursor 10 pixels down
+* Shift-Down move cursor 10 pixels down
+* Shift-Ctrl-k move cursor 10 pixels up
+* Shift-Up move cursor 10 pixels up
+* Shift-Ctrl-l move cursor 10 pixels right
+* Shift-Right move cursor 10 pixels right
+
+ Frame Positioning
+ -----------------
+ Ctrl-Left shift one full frame left
+ Ctrl-Down shift one full frame down
+ Ctrl-Up shift one full frame up
+ Ctrl-Right shift one full frame right
+
+ Ctrl-Alt-Left shift one half frame left
+ Ctrl-Alt-Down shift one half frame down
+ Ctrl-Alt-Up shift one half frame up
+ Ctrl-Alt-Right shift one half frame right
+
+ Peak-Up Centroiding
+ -------------------
+* Ctrl-[ decrease centering box size
+* Ctrl-] inrease centering box size
+* Ctrl-0 (zero) centroid/find local max
+* Alt-Ctrl-0 (zero) find local min
+
+ Mouse Button Actions
+ --------------------
+ Shift-Btn1Down turn on magnifier
+ Shift-Btn1Up turn off magnifier
+ Shift-Btn2Down turn on crosshair cursor
+ Shift-Btn2Up turn off crosshair cursor
+ Btn1Down create marker
+ Btn1Motion resize marker being created
+ Btn2Down zoom on cursor position
+ Btn3Down/Motion brightness/contrast scaling
+
+* Ctrl-Btn1Down create ruler marker
+* Ctrl-Btn1Motion resize ruler marker
+* Ctrl-Btn1Up destroy ruler marker
+
+* Alt-Motion freeze cursor readout
+
+
+
+2.11 Summary of Application Resources
+=====================================
+
+ Following is a summary of the task client and GUI resources, along
+with select resources defined for the main image display Gterm widget. All
+GUI elements can be controlled to some exten with resource definitions
+although not all resources are useful. Feel free to contact site-support
+with questions about how to change the appearance of the GUI. Future
+versions of XImtool should feature a control panel to allow some of these
+more critical resources to be redefined at runtime.
+ Format for the listing is resource-name, default-value, and type,
+with an optional note appended. See the man page or online help for a full
+description of all resources. A '*' in the leftmost column indicates a new
+resource added with this release, some resource apply only to the alternative
+GUI.
+
+
+ Client Program Resources
+ ------------------------
+ defConfig 1 Int
+ defNFrames 0 Int
+ tileBorderWidth 3 Int
+ tileBorderColor 9 Int
+ autoscale False Boolean
+ antialias False Boolean
+ antialiasType boxcar String (1)
+ tileFrames False Boolean
+ highlightFrames True Boolean
+ gui default String (2)
+ imtoolrc /usr/local/lib/imtoolrc String
+ invert False Boolean
+ memModel Fast String (3)
+ basePixel 64 Int
+ maxColors 216 Int
+ cmapInitialize False Boolean
+ cmap1 none String (4)
+ cmap2 none String (4)
+ cmapDir1 none String (5)
+ cmapDir2 /usr/local/lib/imtoolcmap String (5)
+ input_fifo /dev/imt1i String (6)
+ output_fifo /dev/imt1o String (6)
+ unixaddr /tmp/.IMT%d String (7)
+* ism_addr /tmp/.ISM%d String (8)
+* ism_task "ism_wcspix.e wcspix &" String (9)
+
+ Notes:
+ 1) Options: nearest, bilinear, area, blkavg, boxcar, lowpass, gaussian
+ 2) Either the string 'default' or the path to a valid GUI file
+ 3) Options: fast, small, beNiceToServer
+ 4) Name of a colormap file in the cmapDir[1|2] directory
+ 5) Path to directory of valid colormaps
+ 6) Path to FIFO pipe
+ 7) Unix socket path, a '%d' is replaced with the uid
+ 8) Unix socket path, a '%d' is replaced with the uid. This is the
+ socket used by plug-ins to negotiate a socket, once connected the
+ actual communications use a different socket.
+ 9) Command used to start the default WCS/Pixel readout ISM task.
+
+
+ GUI Resources
+ -------------
+ autoscale True Boolean
+ zoomfactors 1 2 4 8 String
+ displayCoords True Boolean
+ displayPanner True Boolean
+ displayMagnifier False Boolean
+ blinkRate 1.0 Real (1)
+ pannerArea 150*150 Geometry
+ pannerGeom -5+5 Geometry
+* magnifierArea 100*100 Geometry
+* magnifierGeom +5+5 Geometry
+ wcsboxGeom -5-5 Geometry
+ maxContrast 5.0 Real
+* showToolBar False Boolean
+* showPanelBar False Boolean
+ warnings True Boolean
+* centerBoxSize 5 Int
+* peakCentroid True Boolean
+
+ Notes:
+ 1) Value represents blink rate in seconds
+
+
+ Main Image Window (Gterm) Resources
+ -----------------------------------
+ cmapName image String (1)
+ basePixel 64 Int
+ warpCursor True Boolean
+ raiseWindow True Boolean
+ deiconifyWindow True Boolean
+ ginmodeCursor circle Cursor
+ ginmodeBlinkInterval 500 Int (2)
+ color0 Black Pixel
+ color1 White Pixel
+ background Black Pixel
+ foreground White Pixel
+ width 512 Int
+ height 512 Int
+
+ Notes:
+ 1) Any user-defined name is acceptable
+ 2) Value represents blink rate in milliseconds
+
+
+
+2.12 Summary of Command-Line Options
+====================================
+
+ -basePixel <num> Base colormap pixel
+ -cmap1 <file> User colormap 1
+ -cmap2 <file> User colormap 2
+ -cmapDir1 <dir> User colormap directory
+ -cmapDir2 <dir> Default colormap directory
+ -cmapInitialize <bool> initialize colormap
+ -cmapName <name> Set Colormap name
+ -config <num> Set initial config number
+ -defgui Print default GUI and exit
+ -displayPanner <bool> Display Panner box
+ -displayMagnifier <bool> Display Magnifier box
+ -displayCoords <bool> Display WCS Coords box
+ -fifo <pipe> Fifo pipe to use for connection
+ -fifo_only Use fifo only for display
+ -gui <file> GUI file
+ -help Print help
+ -imtoolrc <file> Set frame buffer configuration file
+ -inet_only | -port_only Use inet only for display
+ -invert Start with inverted colormap
+ -ismdev <dev> ISM device (socket) template
+ -maxColors <num> Max number of image colors to allocate
+ -memModel <type> Memory model (fast|small|beNiceToServer)
+ -nframes <num> Number of frames to create at startup
+ -port <num> Set inet port to use for connection
+ -printConfig <name> Set printer config file
+ -tile Start in tile-frames mode
+ -unix <name> Set unix socket to use for connection
+ -unix_only Use only unix socket for display
+ <file> File to load at startup
+
+
+
+--------------------------------------------------------------------------------
+
+3. OBM (WIDGET SERVER) REVISIONS
+=================================
+
+
+3.1 New Widgets
+---------------
+
+ As part of the OBM modifications two new widgets were added to
+the toolkit. The widgets were also added to the LISTRES application in
+the X11IRAF sources which can be consulted for a complete list of resources.
+LISTRES is not normally built with the system but is installed locally on
+the NOAO/IRAF development machines. To build it yourself:
+
+ % cd /<path>/x11iraf/obm/listres # go to the source directory
+ % xmkmf # create the Makefile
+ % make listres # compile the task
+
+It may then be used as e.g. "listres <widget>" to print a full list of
+resources for the named widget.
+
+
+3.1.1 Tabs Widget
+------------------
+
+ The Tabs widget is a composite widget providing an "index tab"
+appearance to it's child widgets. The children will normally be layouts
+of more complex panels such as is done for the XImtool Control Panel.
+Only the children of the active Tab are visible, the contents of other
+Tabs are not displayed until that Tab is raised by selecting it with the
+mouse and the left mouse button.
+
+ A new Widget class command was added to allow GUI control of the
+active Tab (e.g. to programmatically raise a Tab). This command is of
+the form
+
+ send <tab> setTop <name>
+
+where <tab> is the name of the Tab widget, and <name> is the name of the
+child widget to be raised. Only one Tab widget is required to handle
+child widgets, the Tabs will be created automatically.
+
+ The widget code was also modified slightly to allow specific
+resource values to hide the appearance of the widget from the display, e.g.
+to completely change the appearance of a panel's layout by invisibly raising
+a different Tab. For instance, assuming we have a Tab widget called
+'opPanels' with several child widgets containing layouts of other widgets,
+the following resource settings will hide the parent Tabs widget:
+
+ *opPanels.tabLabel:
+ *opPanels.font: nil2
+ *opPanels.height: 0
+ *opPanels.width: 0
+ *opPanels.borderWidth: 65535
+ *opPanels.internalWidth: 32765
+ *opPanels.internalHeight: 32765
+
+Essentially we set NULL labels and sizes and values for the borderWidth
+and internalHeight/Width that have the same bit pattern as a negative value
+which internally means the borders are not drawn. The GUI callback code
+can then use the setTop Widget method to raise the desired Tab meaning the
+entire panel will change layouts automatically. This has advantages over
+simply unmapping/mapping the layouts as it doesn't create a window resize
+event which may cause the panel to "flash" during the change.
+
+ An example GUI for this widget is in x11iraf$guidemo/tabs.gui
+
+
+3.1.2 ListTree Widget
+----------------------
+
+ The ListTree widget provides a nested list of items, where each
+item is either a terminal item in a list, or another list. Lists may be
+"open" meaning their contents are displayed, or "closed" meaning they are
+shown as an individual item. This widget can best be used to represent
+e.g. contents of a directory or sections/subsections of a document.
+
+ A new Widget class command was added to allow GUI control of the
+list contents. This command is of the form
+
+ send <listree> setListTree <nested list>
+
+where <listree> is the name of the widget, and <nested list> is a list of
+items to be displayed. This list should be a valid Tcl list, where items
+in the list may be lists themselves to produce the nested format. All
+ListTree widget are initially presented with the embedded lists "closed".
+There is presently no way to append the contents of the list, the entire
+list must be redefined with the above command. For example, the command
+
+ send list setListTree {a1 {b1 { {a2 {a3 b3 c3 d3}} { b2 {z1 z2}} } } c1}
+
+would produce a nested list such as
+
+ a1
+ b1
+ a2
+ a3
+ b3
+ b2
+ c1
+
+Specifying the lists is a bit complex, but this widget is a nice way to
+handle something like a table of contents in online documentation.
+
+ An example GUI for this widget is in x11iraf$guidemo/ltree.gui
+
+
+3.2 Dynamic Widget Creation (TBD)
+---------------------------------
+
+ In the original implementation of the OBM, the GUI is created or
+defined using the 'appInitialize' and 'createObjects' server commands.
+appInitialize initializes the X display but the 'resources' argument just
+sets the fallback resources for the application. A 'createObjects' call
+then queries the fallback resource database (either by a named resource o
+the 'objects' resource by default) to get the widget tree and then parses
+that as a string to actually create the widgets in the OBM.
+
+ The initial example GUIs all defined an "objects" resource as the
+way to define the widgets and all the subsequent GUI tasks followed that form,
+however appInitialize requires only a string of resource definitions ('object'
+resources or otherwise), and createObjects can take an argument as to which
+resource value specifies the widgets to create. For dynamic widget creation
+all that's really required is that we have a way to append the fallback
+resource database with a new list of widgets.
+
+ The solution then was implement a new 'appExtend' server command
+that simply sends a new resource string to the OBM to be merged into the
+fallback resource DB. A plug-in would call this to load the widgets, then
+call createObjects naming the resource to realize the widgets. The new
+widgets are created as though they were specified from the start and can
+receive messages, be destroyed, etc. The appExtend server method essentially
+works by
+
+ - getting the fallback resource database
+ - convert resource string arg to a new resource database
+ - combine the two resource databases
+ - write the combined database back as the new fallback database
+
+For example, the plug-in code for a "Hello, World" GUI panel would look
+something like
+
+ appExtend {
+ *test_objects:\
+ toplevel TopLevelShell testPanel\
+ testPanel Form testForm\
+ testForm Label testLabel\
+ testForm Command testQuit
+
+ *testLabel.label: Hello, world!
+ *testQuit.fromHoriz: testLabel
+ *testQuit.label: Quit
+ }
+ createObjects test_objects
+ send testPanel map
+
+This code could be uploaded by an ISM plug-in and sourced as Tcl code
+in a callback. It's also possible to define objects w/ existing parents
+meaning a plug-in can add buttons to menubars or panels when they first
+connect (e.g. a plug-in can add a new activation button for it to an
+existing menubar on the GUI).
+
+ The ability to dynamically create widgets means that plug-in modules
+can create their own GUI components, but it also means that meta-widgets such
+as Help panels, Image Display panels, etc can be recycled from a library of
+code. To use this effectively, however, some rules need to be established
+for an object naming convention, protocols for adding/deleting callbacks and
+event handlers, and some method of object orientation is desired in the Tcl
+code to make having multiple instances of a meta-widget in a GUI easier to
+handle. These details are still largely TBD, the basic functionality now
+exists in this version but may change as we take advantage of it and
+implement new plug-in tasks or meta-widgets.
+
+
+--------------------------------------------------------------------------------
+
+4. CLIENT DISPLAY LIBRARY (CDL) REVISIONS
+==========================================
+
+
+4.1 Display Protocol Changes
+-----------------------------
+
+ The IIS display protocol used was modified to conform to the XImtool
+and IRAF changes implemented for the support of WCS mapping information.
+These are detailed in section 5.1 below.
+
+ Unlike the IRAF IMD interface changes though, the WCS version can
+be determined when the CDL is first opened so no explicit call to query
+this is required by CDL applications. Tasks may still set/retrieve mapping
+information and assume this is handled automatically by the interface.
+The hi-level routines for displaying FITS or IRAF images will also send the
+mapping information automatically, it's only when using the low-level
+cdl_displayPix() routine or setting the WCS explicitly where the mappings
+need to be set by the application.
+
+ Changes remain completely backwards compatible so client tasks need
+to be modified only to support the new XImtool features.
+
+
+4.2 New Procedures
+-------------------
+
+ Three new public interface procedures were added in addition to the
+internal changes made to support image mappings:
+
+ cdl_setMapping() - Set mapping data to be sent with next cdl_setWCS() call.
+ Returns a non-zero status if mapping was set.
+ cdl_getMapping() - Get mapping data returned with last cdl_getWCS() call.
+ Returns a non-zero status if valid mapping available
+ cdl_queryMap() - Given a WCS number return the mapping data for that WCS.
+ Returns a non-zero status if valid mapping available.
+
+
+4.2.1 C Calling Sequence
+-------------------------
+
+ valid = cdl_setMapping (cdl, region, sx,sy,snx,sny, dx,dy,dnx,dny, ref)
+ stat = cdl_getMapping (cdl, region, sx,sy,snx,sny, dx,dy,dnx,dny, ref)
+stat = cdl_queryMapping (cdl, wcs, region, sx,sy,snx,sny, dx,dy,dnx,dny, objref)
+
+Where the arguments are defined as
+
+ cdl - CDL package pointer returned by cdl_open()
+ region - user-defined name for the region (e.g. 'image',
+ 'subras1', 'ccd3', etc).
+ sx, sy, snx, sny - source rect in the object
+ dx, dy, dnx, dny - destinaton rect in the display frame buffer
+ ref - full node!/path/image[sec] image name, same as
+ was immap'd when the image was displayed. Used
+ for access after the display
+ wcs - WCS number for a specified mapping
+
+
+
+4.2.2 F77 Calling Sequence
+---------------------------
+
+ cfsetmapping (region, sx,sy,snx,sny, dx,dy,dnx,dny, ref, ier)
+ cfgetmapping (region, sx,sy,snx,sny, dx,dy,dnx,dny, ref, ier)
+ cfquerymapping (wcs, region, sx,sy,snx,sny, dx,dy,dnx,dny, objref, ier)
+
+Where the arguments are defined as above and 'ier' is an error status code.
+
+
+4.2.3 SPP Calling Sequence
+---------------------------
+
+ cdl_setMapping (region, sx,sy,snx,sny, dx,dy,dnx,dny, ref, ier)
+ cdl_getMapping (region, sx,sy,snx,sny, dx,dy,dnx,dny, ref, ier)
+ cdl_queryMapping (wcs, region, sx,sy,snx,sny, dx,dy,dnx,dny, objref, ier)
+
+Where the arguments are defined as above and 'ier' is an error status code.
+
+
+4.3 Demo Task Updates
+----------------------
+
+ o The DISPLAY demo task in the 'examples' subdirectory was modified
+ to show how the cdl_setMappings() call is to be used when displaying
+ the image using the low-level procedures.
+
+ o The CDLTEST test task in the 'test' subdirectory has a new 'Q'
+ command to test the cdl_queryMap() procedure.
+
+
+
+--------------------------------------------------------------------------------
+
+5. TECHNICAL NOTES
+==================
+
+5.1 IIS Protocol Changes
+-------------------------
+
+ For backwards compatability none of the existing IIS protocols were
+modified completely, however we take advantage of unused registers to flag
+the new features in existing functions (like read/write WCS). The WCS mapping
+changes required only that the unused 'x' register be set to indicate the new
+behavior was desired, e.g. the wcs text containing the extra mapping data.
+
+ We also added two new WCS calls that allow us to query the WCS version,
+or query a WCS by a specific number corresponding to a mapping. The WCS
+version query will return a string such as "version=10" which can be parsed
+by the client to get a version number '10' (corresponding to version 1.0).
+
+ Because of the added mapping text the WCS string length was increased
+from 320 to 1024 bytes, the string length used internally depends on whether
+the 'x' register has been set.
+
+ Support for the full 16 frames allowed by the bit-flag 'z' register
+in the IIS header packet required the masking values be changed at various
+places in the code. This was more a limitation of the initial implementation
+than a required change to the protocol.
+
+ A complete summary of the XImtool IIS protocol implementation follows.
+
+
+5.1.1 IIS Protocol Summary
+---------------------------
+
+ IIS Header Packet Summary
+
+ TID Subunit Tct X Y Z T Data
+ +------------------+-------------+-----+---+---+----+---+--------+
+Read Data | IIS_READ|PACKED | MEMORY | -NB | x | y | fr | - | nbytes |
+Write Data | IIS_WRITE|PACKED | MEMORY | -NB | x | y | fr | - | nbytes |
+Read Cursor | IIS_READ | IMCURSOR | - | - | - | wcs| - | - |
+Write Cursor | IIS_WRITE | IMCURSOR | - | x | y | wcs| - | - |
+Set Frame | IIS_WRITE | LUT|COMMAND | -1 | - | - | - | - | 2 |
+Erase Frame | IIS_WRITE | fb | FEEDBACK | - | - | - | fr | - | - |
+ | | | | | | | | |
+Old Read WCS | IIS_READ | WCS | - | - | - | fr | - | 320 |
+Old Write WCS | IIS_WRITE|PACKED | WCS | -N | - | - | fr |fb | 320 |
+ | | | | | | | | |
+WCS Version? | IIS_READ | WCS | - | 1 | 1 | - | - | 320 |
+WCS by Num.? | IIS_READ | WCS | - | 1 | - | fr |wcs| 1024 |
+New Read WCS | IIS_READ | WCS | - | 1 | - | fr | - | 1024 |
+New Write WCS | IIS_WRITE|PACKED | WCS | -N | 1 | - | fr |fb | 1024 |
+ +------------------+-------------+-----+---+---+----+---+--------+
+
+
+Where nbytes | NB = number of bytes expected or written
+ x = x position of operation in frame buffer coords
+ y = y position of operation in frame buffer coords
+ fr = frame number (passed as bitflag (i.e. 1, 2 ,4 8, etc)
+ fb = frame buffer config number (zero indexed)
+ N = length of WCS string
+ wcs = WCS number (usually zero)
+ Data = the number of bytes of data to be read or written
+ following the header packet.
+
+ IIS_WRITE = 0400000
+ IIS_READ = 0100000
+ COMMAND = 0100000
+ PACKED = 0040000
+ IMC_SAMPLE = 0040000
+
+ MEMORY = 001
+ LUT = 002
+ FEEDBACK = 005
+ IMCURSOR = 020
+ WCS = 021
+
+
+
+5.2 IRAF 'imd' Interface Changes.
+----------------------------------
+
+ In order for the XImtool ISM task map exactly the same image that
+was passed into the task displaying the image (i.e. the fully qualified
+node!path prefix including any image section or kernel args). It was
+necessary to modify the IIS SetWCS command to contain extra information
+at the end of the normal WCS text. This is passed from XImtool to the ISM
+at the time of the display if an ISM is already running, or when the ISM
+first connects thereafter.
+
+ To maintain complete backwards compatability it is not possible to
+bury this change in the internals of the interface, therefore it will be
+necessary for all tasks using the IMD interface to display images to make
+revisions to use the new features. Tasks which are not changed will continue
+to work, XImtool will simply disable the ISM when the display client connects
+without indicating it is able to pass mapping information. Client tasks,
+modified or not, will also continue to work when connecting to "mapping
+unaware" display servers since the interface only send the extra mapping
+information to servers which are expecting it.
+
+ To modify a task to make use these changes, there are just a few
+routines you need to be aware of:
+
+ imd_wcsver() - Query the server for new capabilities. Returns a
+ non-zero version if the server can use the new
+ mapping functionality.
+imd_setmapping() - Set mapping data to be sent with next imd_putwcs() call
+imd_getmapping() - Get mapping data returned with last imd_getwcs() call.
+ returns a non-zero status if valid mapping available
+ imd_query_map() - Given a WCS number return the mapping data. Returns a
+ non-zero status if valid mapping available
+
+where the calling sequence is
+
+ imd_setmapping (reg, sx,sy,snx,sny, dx,dy,dnx,dny, objref)
+ valid = imd_getmapping (reg, sx,sy,snx,sny, dx,dy,dnx,dny, objref)
+ status = imd_query_map (wcs, reg, sx,sy,snx,sny, dx,dy,dnx,dny, objref)
+ version = imd_wcsver ()
+
+In order to maintain compatability with existing servers as well as take
+advantage of the new ximtool features, the idea is that all interfaces will
+remain the same and any program wishing to use these features will need a
+slight modification to 1) determine whether mappings are supported via a
+call to imd_wcsver(), and 2) use the new imd_[sg]etmapping() procedures to
+set and retrieve the mapping information. imd_query_map() can be used to
+query for the mapping using the wcs number returned from e.g. a cursor read.
+Details and examples of these modifications are included below.
+
+
+5.2.1 Program Initialization
+----------------------------
+
+ For a program to use mappings it must first query the server to see
+if this is supported, the reply also serves to initialize the imd interface.
+This is done using the imd_wcsver() call. For example, in the DISPLAY task
+during startup one would do something like
+
+ # Query server to get the WCS version, this also tells us whether
+ # we can use the all 16 supported frames.
+ if (imd_wcsver() == 0)
+ call clputi ("display.frame.p_max", 4)
+ else
+ call clputi ("display.frame.p_max", 16)
+
+The call to imd_wcsver() in this case is used to reset the number of allowed
+frames depending on the server.
+
+ This call is REQUIRED before mappings can be used by the interface.
+Internally, the interface defaults to a "version" of zero meaning the server
+does not support mappings, once the procedure is called the server reply
+value is stored in the interface common and returned as the function value.
+The return value is always an integer, zero means the server does not support
+mappings and a non-zero value is the WCS version number of the display
+change (e.g. a value of 10 is version 1.0, 11 is 1.1, etc).
+
+ A 'disable_wcs_maps' boolean environment variable can be set by
+the user to force this procedure to always return zero and disable mappings
+in case a problem is found after release or the old behavior is desired.
+
+
+5.2.2 WCS Text Changes
+----------------------
+
+ Without getting into the details, if a server is found to be capable
+of using mappings in the imd_wcsver() call, the WCS string sent/read will
+have two additional lines of information to define the mapping. Specifically,
+
+ name - title\n
+ a b c d tx ty z1 z2 zt\n
+ region_name sx sy snx sny dx dy dnx dny\n
+ object_ref
+
+where the new parameters are defined as
+
+ region_name - user-defined name for the region (e.g. 'image',
+ 'subras1', 'ccd3', etc).
+ sx, sy, snx, sny - source rect in the object
+ dx, dy, dnx, dny - dest rect in the display frame buffer
+ object_ref - full node!/path/image[sec] image name, same as
+ was immap'd when the image was displayed. Used
+ for access after the display
+
+ Since the interfaces remain the same a separate imd_setmapping()
+or imd_getmapping() call is required to set/get the additional mapping data.
+For example,
+
+To set the WCS:
+
+ # Set the mapping info to be written with the WCS.
+ call imd_setmapping (region, sx,sy,snx,sny, dx,dy,dnx,dny, objref)
+
+ # Write the WCS and mapping info to the data.
+ call imd_putwcs (ds, frame, Memc[imname], Memc[title],
+ a, b, c, d, tx, ty, W_ZS(wdwin), W_ZE(wdwin), W_ZT(wdwin))
+
+
+To read the frame WCS:
+
+ # Query the server for a wcs.
+ if (imd_getwcs (frame, server, image, sz_image, title, sz_title,
+ a,b,c,d, tx,ty) == OK) {
+
+ # If we got that okay, get the mapping information returned.
+ if (imd_getmapping (reg, sx,sy,snx,sny, dx,dy,dnx,dny, obj) > 0) {
+ :
+ }
+ }
+
+In all cases if the imd_wcsver() initialization says the server can't
+do mappings these calls will be no-ops.
+
+ For multiple-image displays to a single frame it's important to
+remember that the default WCS for the frame will be the *last* WCS set
+by the client. For example, a mosaic display can set a wcs and mapping
+for each of the subrasters, but a final SetWCS call is required to define
+an overall WCS for the frame defining the "detector coords". Note that the
+'objref' string should include the MEF extension number so it's mapped
+properly by the ISM.
+
+
+5.2.3 Cursor Reads
+-------------------
+
+ The imd_query_map() procedure is used to return the mapping for a
+particular WCS number, such as that returned by a cursor read. It will do
+a new WCS query for this regardless of a previous imd_getwcs() call. Typical
+usage would be something like the following in IMEXAMINE:
+
+procedure t_imexamine ()
+ :
+begin
+ :
+ wcsver = imd_wcsver()
+ :
+ :
+ while (ie_gcur (ie, curtype, x,y,wcs, key, cmd, SZ_LINE) != EOF) {
+
+ if (imd_query_map (wcs,reg,sx,sy,snx,sny,dx,dy,dnx,dny,imname) > 0) {
+ .... add image name to list
+ }
+
+ }
+ :
+end
+
+[NOTE: in this example the ie_gcur() procedure was modified to return the
+ wcs from the cursor read.]
+
+The WCS number returned by a cursor read now corresponds to the object id
+used in the server. It still contains the frame number as before, but the
+wcs number itself is used to identify the mapping.
+
+
+5.3 ISM Communications
+-----------------------
+
+ The ISM (Image Support Module) can be any external task which
+connects to XImtool over a socket. Communications are limited to simple
+null-terminated text strings. In most cases these strings are just the
+standard OBM messages sent to XImtool objects but can also include Tcl
+callback code (either ISM-specific callbacks, procedures which can be
+added to the callback list for existing XImtool objects, or even new GUI
+code to create panels and new objects).
+
+
+5.3.1 Socket Connection
+------------------------
+
+ The ISM first requests a connection to XImtool on a dedicated
+socket whose default value is "/tmp/.ISM%d", where the '%d' is replaced
+by the userid allowing multiple users on a machine to have independent
+sockets. The XImtool 'ism_addr' resource or "-ismdev" command-line option
+can be used to change this address, a value of 'none' will disable ISM
+communications. The socket may also be set with an ISMDEV environment
+variable which will override the resource or command-line options.
+
+ Once a connection request is received, XImtool replies with
+a message telling the ISM to reconnect on a different socket, it then
+frees the initial connection allowing multiple other ISMs to request
+their own connection. The communications between XImtool and the ISM
+are carried out entirely over this second negotiated socket. Once connected,
+the ISM appears as just another named object which can receive OBM messages.
+
+
+5.3.2 Communications Protocol
+------------------------------
+
+ Messages from the ISM are written to the connection socket and must
+be preceeded by one of the following keywords:
+
+ callback Negotiate a connection on another socket
+ ready Client is ready to begin processing
+ quit Client is shutting down and disconnecting
+ send Send a message to another object
+
+
+Messages are of the form:
+
+ connect <name> Request a connection for the <name> ISM
+
+ ready <name> Reconnection request for the <name> ISM on
+ negotiated socket, ISM is ready to processing.
+
+ send <obj> '{' <msg> '}' Send <msg> to the named <obj>. The message
+ may be any valid string that will be under-
+ stood by the recipient. The object may be
+ any object in the GUI or OBM (see below).
+
+ quit ISM is shutting down. The named is determined
+ from the communications channel, ISM is
+ responsible for any cleanup of it's callbacks
+ before issuing the shutdown.
+
+All messages must be null-terminated. XImtool will buffer the text until
+a complete message is received. Once an ISM client has delivered a QUIT
+message no further messages will be sent the that ISM.
+
+ In OBM terminology the ISM is a named Client class object, where
+the name is set in the connection request. Messages sent to the ISM should
+use this name, messages sent to "client" are still interpreted to mean the
+XImtool client.
+
+ The content of messages delivered to the ISM are totally free-form
+and may contain any text the ISM is expected to understand.
+
+
+5.3.3 GUI Objects
+------------------
+
+ While the ISM can send a message to any object in the task, there
+is a GUI Parameter object called 'ism_msg' designed especially to process
+messages from the ISM. The callback in the GUI is expecting a message
+beginning with one of the following keywords:
+
+ source Source message text as Tcl code
+ alert Message contains error text to be displayed in the
+ GUI 'alert' box
+ deliver Message text should be passed to a callback routine
+ specific to that ISM. This processing callback may
+ have been previously uploaded. The message text
+ may be any form the processing callback is expected
+ to understand.
+ info Message text is status output intended for the
+ XImtool 'info' panel (connect/disconnect requests, etc)
+
+
+In all cases the message is expected to be of the form
+
+ <cmd> <ism_name> [ <arg1> <arg2> <...> ]
+
+where <cmd> is one of the above keywords, <ism_name> is the name of the
+ISM sending the message. The remainder of the message is passed as an 'argv'
+list to the processing callback uploaded for the ISM. The ISM is responsible
+for formatting these messages.
+
+