diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /vendor/x11iraf/cdl/doc | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'vendor/x11iraf/cdl/doc')
-rw-r--r-- | vendor/x11iraf/cdl/doc/RELEASE-1.6.NOTES | 168 | ||||
-rw-r--r-- | vendor/x11iraf/cdl/doc/cdlref.ms | 2637 | ||||
-rw-r--r-- | vendor/x11iraf/cdl/doc/cdlref.ms-V1.0 | 2297 | ||||
-rw-r--r-- | vendor/x11iraf/cdl/doc/cdlref.ms-V1.6 | 2512 | ||||
-rw-r--r-- | vendor/x11iraf/cdl/doc/cdlref.ps | 19799 | ||||
-rw-r--r-- | vendor/x11iraf/cdl/doc/greek.ps | 2521 | ||||
-rw-r--r-- | vendor/x11iraf/cdl/doc/vximtool.man | 276 | ||||
-rw-r--r-- | vendor/x11iraf/cdl/doc/vximtool.ps | 2472 |
8 files changed, 32682 insertions, 0 deletions
diff --git a/vendor/x11iraf/cdl/doc/RELEASE-1.6.NOTES b/vendor/x11iraf/cdl/doc/RELEASE-1.6.NOTES new file mode 100644 index 00000000..18c5399e --- /dev/null +++ b/vendor/x11iraf/cdl/doc/RELEASE-1.6.NOTES @@ -0,0 +1,168 @@ + + README FOR CLIENT DISPLAY LIBRARY (CDL) V1.6 + Updated March 1998 + +-------------------------------------------------------------------------- +21 Feb 1997 Initial V1.0 Release +04 Mar 1998 V1.6 Upgrade Release + +See also the post-distribution notes at the end of this file. These are +continually updated after the release as any problems are encountered. +-------------------------------------------------------------------------- + + +1. INTRODUCTION +================ + The Client Display Library (CDL) is a host interface for C or +Fortran programs allowing them to display images or overlay graphics to +display servers such as XImtool or SAOimage / SAOtng. High-level +procedures allow IRAF or FITS images to be displayed simply, other +routines permit access to all other server functions (e.g. cursor and +image readback, frame selection, etc). The library also features a number +of functions for doing image overlay graphics; supported graphics +primitives include numerous point shapes, lines, circles, ellipses, +polygons, annular shapes, and text. + + +1.1 WHAT'S NEW IN THIS RELEASE +------------------------------- + + The initial CDL release provided most of the functionality required +for image display or graphic overlay clients, since then a number of new +features have crept in that were needed. The V1.6 version number reflects +the stop-n-start nature of this work, more work is planned but a release of +the new version is long overdue. New features include: + + - Support for the new V2.11 IRAF OIF image format + - A prototype SPP language binding + - Full ANSI C function prototype support + - Support for variable line widths + - A selection of "dashed" line styles for polyline/polygon markers + - A selection of text fonts including + ROMAN FUTURA TIMES + GREEK BOLD + - Sub/Superscripting text + - In-line font changes + - Support for text line widths + - A "virtual" display server that may also be used as a 'proxy' + server providing an image display "tee" functionality + - Numerous bug fixes + +See the CDL Reference Guide in the 'doc' subdirectory for details on new +features. + +1.2 THINGS TO WATCH OUT FOR +---------------------------- + + The V1.6 release contains two small interface changes which may +cause problems, otherwise the new library should work seemlessly with +existing applications. The interface changes involve the routines + + cdl_readIRAF() and cdl_readFITS() + +These routines now have an extra 'title' argument to return the title string +from the image which allows the hi-level display routines to include this +information in the WCS string. This argument is a character pointer and +affects the Fortran and SPP bindings as well. See the Reference Guide for +additional information. + + New features such as line styles and text fonts have been well-tested +but the use of ANSI prototypes and the SPP binding have only been minimally +exercised. Anyone finding a problem with these features should send a bug +report the iraf@noao.edu help address, we can probably provide a quick fix +for most bugs. + + +2. Documentation and Example Applications +========================================== + + Documentation for the package is located in the 'doc' subdirectory +as both TROFF source and Postscript. The reference manual covers each of +the routines available in the library and contains a summary of the interface +as well as code samples. + Working programs are also included in the 'examples' subdirectory. +Users may find it easier to start by modifying these programs for a particular +need (e.g. add a new command for marking, an option for overlaying points +from a file, etc) before starting an application from scratch to become fam- +iliar with the library. + Fortran programmers should consult the reference manual for information +on array passing in the CDL. In particular, while the CDL can be used from +IMFORT programs special care needs to be taken when displaying arrays read +using the IMFORT routines. + + +3. Building the Package +======================== + + The CDL package relies on the Imake facility to generate the make- +files needed to compile the package. To build the CDL use the following +command: + + % xmkmf # build the parent Makefile + % make World # compile it all + +There is no supported "make install" option, all files will be left in the +CDL working directory following the World build. Users of the package +must either build the library and install the lib and include files by hand +in their final destination, or use compiler "-I" and "-L" flags to find the +files when compiling clients. + As an alternative for sites that don't have Imake installed or who +encounter problems you can try the generic makefiles provided. To use these +simply do + + % configure # create the makefiles + % make World # compile it all + + Programs using the CDL will need one of three include files depending +on the language interface being used: the "cdl.h" file for C programs, the +"cdlftn.inc" file for Fortran programs, or the "cdlspp.h" file for SPP tasks. +The C and SPP include files is required, the Fortran include file is optional +and just defines symbolic names for various constants. Fortran programmers +not using the cdlftn.inc file should see to Reference Manual for values of +symbolic constants. The library file to be linked is "libcdl.a", all programs +using the CDL must also link with the system math library. + +**************************************************************************** +***** NOTE: Solaris users will also need to include "-lnsl -lsocket" ***** +***** when linking programs to include the socket interfaces. ***** +**************************************************************************** + + +4. Reporting Problems +====================== + + Each of the CDL functions has been tested individually but there is +no practical way to test how various combinations of routines may be used +in any given application so bugs are inevitable. If you think you've found +a bug, have a suggestion for future enhancements, or just have a question +about how something works, contact + + iraf@noao.edu + +Messages may also be posted to the adass.iraf.programming newsgroup so that +others may benefit from the exchange. If you're not familiar with the ADASS +newsgroup hierarchy send a message + + irafinfo@iraf.noao.edu + +with the one-line message "get iraf newsgroups" in the body of the message +for more information. A small code sample demonstrating the problem would +help greatly in finding the solution. Debugging output for the package may +be enabled by defining a unix CDL_DEBUG environment variable. For example + + % setenv CDL_DEBUG 0 # minimal debug output + % setenv CDL_DEBUG 1 # CDL and IMD debug info + % setenv CDL_DEBUG 2 # print it all + +Send this output along with the code sample. An FAQ may be added later if +needed. + + +Mike Fitzpatrick +NOAO/IRAF Project +March 1998 + + +Post-Distribution Notes +======================= + diff --git a/vendor/x11iraf/cdl/doc/cdlref.ms b/vendor/x11iraf/cdl/doc/cdlref.ms new file mode 100644 index 00000000..da05ee1f --- /dev/null +++ b/vendor/x11iraf/cdl/doc/cdlref.ms @@ -0,0 +1,2637 @@ +.RP +.de us +\\$1\l'|0\(ul' +.. +.TL +A Reference Guide for the IRAF Client Display Library (CDL) +.AU +Michael Fitzpatrick +.AI +NOAO/IRAF Group +.sp 0.5 +February 1997 +.sp 0.5 +\fIRevised: August 2001\fR +\fICurrent Version: CDL V1.8\fR + +.AB +The Client Display Library (CDL) is a host interface for C, Fortran or SPP +programs allowing them to display images or overlay graphics to display +servers such as \fIXImtool\fR, \fIDS9\fR, or \fISAOimage / SAOtng\fR. +High-level procedures allow IRAF or FITS images to be displayed simply, other +routines permit access to all other server functions (e.g. cursor and image +readback, frame selection, etc). The library also features a number of +functions for doing image overlay graphics; supported graphics primitives +include numerous point shapes, lines, circles, ellipses, polygons, annular +shapes, and text. +.AE + +.pn 1 +.bp +.ce +.ps +3 +\fBContents\fR +.ps -3 +.sp 2 +1\h'|0.25i'\fBIntroduction\fP\l'|5.6i.'\0\01 +.sp 0.5 +2\h'|0.25i'\fBGetting Started\fP\l'|5.6i.'\0\01 +.sp 0.5 +3\h'|0.25i'\fBServer Connections\fP\l'|5.6i.'\0\02 +.br +\h'|0.25i'3.1\h'|0.75i'Domain Sockets\l'|5.6i.'\0\02 +.br +\h'|0.25i'3.2\h'|0.75i'Named FIFO Pipes\l'|5.6i.'\0\03 +.br +\h'|0.25i'3.3\h'|0.75i'Inet Sockets\l'|5.6i.'\0\03 +.br +\h'|0.25i'3.4\h'|0.75i'User-Defined Connections\l'|5.6i.'\0\03 +.sp 0.5 +4\h'|0.25i'\fBImage Display\fP\l'|5.6i.'\0\03 +.br +\h'|0.25i'4.1\h'|0.75i'Overview of the Display Process\l'|5.6i.'\0\03 +.br +\h'|0.25i'4.2\h'|0.75i'Displaying IRAF Images\l'|5.6i.'\0\04 +.br +\h'|0.25i'4.3\h'|0.75i'Displaying FITS Images\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.4\h'|0.75i'Displaying Raw Pixels\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.5\h'|0.75i'Frame Selection\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.6\h'|0.75i'Clearing the Display\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.7\h'|0.75i'Frame Buffer Selection\l'|5.6i.'\0\06 +.br +\h'|0.4i'4.7.1\h'|0.95i'Automatic Selection\l'|5.6i.'\0\06 +.br +\h'|0.4i'4.7.2\h'|0.95i'The Frame Buffer Configuration File\l'|5.6i.'\0\06 +.br +\h'|0.25i'4.8\h'|0.75i'Image WCS Description\l'|5.6i.'\0\07 +.br +\h'|0.4i'4.8.1\h'|0.95i'Image Mappings\l'|5.6i.'\0\07 +.br +\h'|0.25i'4.9\h'|0.75i'Image Colormaps\l'|5.6i.'\0\08 +.br +\h'|0.4i'4.9.1\h'|0.95i'Imtool Color Model\l'|5.6i.'\0\09 +.br +\h'|0.25i'4.10\h'|0.75i'ZScale Intensity Mapping\l'|5.6i.'\0\09 +.br +\h'|0.25i'4.11\h'|0.75i'Image Hardcopy\l'|5.6i.'\010 +.br +\h'|0.25i'4.12\h'|0.75i'Image Cursor\l'|5.6i.'\010 +.br +\h'|0.4i'4.12.1\h'|0.95i'Cursor Sampling\l'|5.6i.'\011 +.br +\h'|0.25i'4.13\h'|0.75i'Image Readout\l'|5.6i.'\011 +.br +\h'|0.25i'4.14\h'|0.75i'Subraster I/O\l'|5.6i.'\011 +.sp 0.5 +5\h'|0.25i'\fBGraphics Overlay\fP\l'|5.6i.'\011 +.br +\h'|0.25i'5.1\h'|0.75i'Marker Coordinates\l'|5.6i.'\011 +.br +\h'|0.25i'5.2\h'|0.75i'Mapping a Previously Displayed Image\l'|5.6i.'\011 +.br +\h'|0.25i'5.3\h'|0.75i'Marking a Coordinate File\l'|5.6i.'\012 +.br +\h'|0.25i'5.4\h'|0.75i'Marker Colors\l'|5.6i.'\012 +.br +\h'|0.25i'5.5\h'|0.75i'Marker Types\l'|5.6i.'\012 +.br +\h'|0.4i'5.5.1\h'|0.95i'Point\l'|5.6i.'\013 +.br +\h'|0.4i'5.5.2\h'|0.95i'Line\l'|5.6i.'\013 +.br +\h'|0.4i'5.5.3\h'|0.95i'Box\l'|5.6i.'\013 +.br +\h'|0.4i'5.5.4\h'|0.95i'Circle\l'|5.6i.'\013 +.br +\h'|0.4i'5.5.5\h'|0.95i'Polyline\l'|5.6i.'\014 +.br +\h'|0.4i'5.5.6\h'|0.95i'Polygon\l'|5.6i.'\014 +.br +\h'|0.4i'5.5.7\h'|0.95i'Ellipse\l'|5.6i.'\014 +.br +\h'|0.4i'5.5.8\h'|0.95i'Circular Annuli\l'|5.6i.'\014 +.br +\h'|0.4i'5.5.9\h'|0.95i'Elliptical Annuli\l'|5.6i.'\014 +.br +\h'|0.4i'5.5.10\h'|0.95i'Text\l'|5.6i.'\014 +.br +\h'|0.25i'5.6\h'|0.75i'Text Fonts\l'|5.6i.'\015 +.br +\h'|0.4i'5.6.1\h'|0.95i'In-line Font Changes\l'|5.6i.'\015 +.br +\h'|0.25i'5.7\h'|0.75i'Line Widths and Styles\l'|5.6i.'\015 +.br +\h'|0.25i'5.8\h'|0.75i'Deleting Markers\l'|5.6i.'\016 +.br +\h'|0.4i'5.8.1\h'|0.95i'Individual Markers\l'|5.6i.'\016 +.br +\h'|0.4i'5.8.2\h'|0.95i'The Entire Overlay\l'|5.6i.'\016 +.br +\h'|0.25i'5.9\h'|0.75i'Redrawing the Overlay\l'|5.6i.'\016 +.sp 0.5 +6\h'|0.25i'\fBANSI C Function Prototypes\fP\l'|5.6i.'\017 +.sp 0.5 +7\h'|0.25i'\fBFortran Language Binding Notes\fP\l'|5.6i.'\017 +.sp 0.5 +8\h'|0.25i'\fBSPP Language Binding Notes\fP\l'|5.6i.'\018 +.sp 0.5 +9\h'|0.25i'\fBIIS Protocol Description\fP\l'|5.6i.'\018 +.sp 0.5 +10\h'|0.25i'\fBVXIMTOOL Proxy/Display Server Usage\fP\l'|5.6i.'\019 +.sp 0.5 +11\h'|0.25i'\fBC Interface Summary\fP\l'|5.6i.'\021 +.sp 0.5 +12\h'|0.25i'\fBC Example Tasks\fP\l'|5.6i.'\023 +.br +\h'|0.25i'12.1\h'|0.75i'Display Example\l'|5.6i.'\023 +.br +\h'|0.25i'12.2\h'|0.75i'Interactive Graphics Overlay Example\l'|5.6i.'\027 +.br +\h'|0.25i'12.3\h'|0.75i'Image Mosaic Example\l'|5.6i.'\031 +.sp 0.5 +13\h'|0.25i'\fBFortran Interface Summary\fP\l'|5.6i.'\033 +.sp 0.5 +14\h'|0.25i'\fBFortran Example Tasks\fP\l'|5.6i.'\035 +.br +\h'|0.25i'14.1\h'|0.75i'Display Example\l'|5.6i.'\035 +.br +\h'|0.25i'14.2\h'|0.75i'Interactive Graphics Overlay Example\l'|5.6i.'\036 +.sp 0.5 +15\h'|0.25i'\fBSPP Interface Summary\fP\l'|5.6i.'\038 +.pn 1 + +.NH +Introduction +.LP + For more than a decade IRAF has used a \fIdisplay server\fR as the +primary means for image display. IRAF client tasks connect to the server +and send or read data using a modification of the IIS Model 70 protocol, +originally through named fifo pipes but more recently using unix domain +or inet sockets. The advantage to this approach was that IRAF client tasks +could make use of the image display functionality without duplicating +the code needed for actually displaying the image. The longtime disadvantage +was that the IIS protocol used was arcane and undocumented and therefore +largely unavailable to applications outside of the IRAF project. The +Client Display Library (CDL) provides a public C and Fortran interface for +displaying images and overlay graphics that is independent of the underlying +protocol used. +.LP + Unlike the interface used by IRAF applications, the CDL is meant to +provide an easy-to-use, fully featured interface for applications that can +be easily evolved for future display servers, communications schemes, or +display functionality. Indeed, the CDL is independent of IRAF itself (as +are the display servers) so display tasks can be written for any discipline +or application. +.LP + While this guide assumes programs are written in C, Fortran programmers +should find the translation straightforward by referring to the Fortran +interface summary. The package source files include example tasks as does +this guide; users with problems, questions, or bug reports are encouraged to +contact \fIiraf@noao.edu\fR. A small code sample demonstrating the problem +would be very helpful in finding a solution to any reported problems. + +.NH +Getting Started +.LP + All C programs must include the header file \fB"cdl.h"\fR in order +to get package definitions for constants such as colors and structure +definitions used. The Fortran interface does not \fIrequire\fR anything +similar, however for fortran compilers which support an \f(CWinclude\fR +directive a \fBcdlftn.inc\fR file may be used to define symbolic constants +passed to procedures, this file must be included by each procedure using the +CDL. Fortran programs not using this file must pass in the constants +explicitly, needed values are found throughout this manual. C procedures +which return an integer value will return a positive number to indicate an +error has occurred and print an error message, otherwise zero is returned. +.LP + The \fBcdl_open()\fR procedure is used to establish a connection +to the server and initialize the package, it returns a CDL structure pointer +that is passed to other CDL procedures. For C programs this means +a separate pointer may be maintained for each server connection, the Fortran +interface is limited to only one server connection per process since the +pointer is maintained internally. The connection is terminated using the +\fBcdl_close()\fR procedure. Between these two calls may be any combination +of CDL procedure calls for doing image display or overlay graphics. +.LP + For example, the simplest possible program for displaying an IRAF +image would look something like: +.sp 0.5 +.nf + \f(CW#include "cdl.h" + + main (int argc, char *argv[]) + { + CDLPtr cdl = cdl_open ((char *)0); + cdl_displayIRAF (cdl, argv[1], 1, 1, 1, 1); + cdl_close (cdl); + }\fR +.fi +.sp 0.5 +.LP +This program displays band one of an image named on the command line to the +server in frame one using the default 512x512 frame buffer, zscaling the +pixels to 8-bit values automatically. No error checking is performed to verify +that a connection was established or that the argument is a valid IRAF image. +Most programs will be more complex than this but it should be clear that +image display from client applications is a now trivial operation. + +.us "Synopsis" +.sp 0.5 +.nf + \f(CW#include "cdl.h"\fR + + \f(CWCDLPtr cdl_open (char *imtdev)\fR + \f(CWvoid cdl_close (CDLPtr cdl)\fR +.fi + +.NH +Server Connections +.LP + The \fBcdl_open()\fR procedure takes a single argument specifying the +type of connection to make to the server, this routine also initializes +the CDL package. If this is a NULL pointer the CDL will attempt to first +connect on a unix domain socket, if that fails the standard IRAF /dev/imt1* +fifo pipes are tried. The syntax for the \fIimtdev\fR argument is as follows: +.sp 0.5 + \f(CW<domain> : <address>\fR +.sp 0.5 +.LP +where <domain> is one of "\fBinet\fR" (internet tcp/ip socket), "\fBunix\fR" +(unix domain socket) or "\fBfifo\fR" (named pipe). The form of the address +depends upon the domain, as illustrated in the examples below. The address +field may contain up to two "%d" fields. If present, the user's UID will be +substituted (e.g. "unix:/tmp/.IMT%d"). The default connection if no imtdev +is specified is "unix:/tmp/.IMT%d", failing that a connection is attempted +on the /dev/imt1[io] named fifo pipes. +.NH 2 +Domain Sockets +.LP + Domain sockets are sockets created on the local host. The connection +is usually faster than an inet socket and comparable to a fifo. If the +socket name is specified with a '%d' field the client can be assured of a +unique socket name for each user allowing multiple clients to be run on the +same host by different users. +.LP +.us "Example" +.sp 0.5 +.nf +\f(CW + /* Connection to a local host using socket domain socket. */ + if ((cdl = cdl_open ("unix:/tmp/.IMT%d")) == NULL) { + fprintf (stderr, "cannot open domain socket connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +Named FIFO Pipes +.LP + This is the traditional approach, and the only one supported by +SAOimage (although recent versions contain support for sockets). Any named +fifo pipe may be used, the syntax for the \fIimtdev\fR string in this case is +.sp 0.5 + \fBfifo:\f(CW<input_fifo>\fB:\f(CW<output_fifo>\fR +.sp 0.5 +.LP +.us "Example" +.sp 0.5 +.nf + \f(CW/* Connection to a local host using named fifo pipes. */ + if ((cdl = cdl_open ("fifo:/dev/imt1i:/dev/imt1o")) == NULL) { + fprintf (stderr, "cannot open fifo pipe connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +Inet Sockets +.LP + Inet sockets are connections between hosts via a tcp/ip socket. +This permits connecting to the server over a remote network connection +anywhere on the Internet. +.LP +.us "Example" +.sp 0.5 +.nf + \f(CW/* Connection to a local host using socket 5137. */ + if ((cdl = cdl_open ("inet:5137")) == NULL) { + fprintf (stderr, "cannot open inet socket connection\\n"); + exit (1); + } + + /* Connection to a remote internet host using socket 5137. */ + if ((cdl = cdl_open ("inet:5137:foo.bar.edu")) == NULL) { + fprintf (stderr, "cannot open inet socket connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +User-Defined Connections +.LP + Since IRAF V2.10.3 client tasks have been able to use an \fBIMTDEV\fR +unix environment variable to set the connection type, the syntax of this +variable is the same as described above. If the \fIcdl_open()\fR procedure +is called with a NULL pointer the IMTDEV environment variable will +automatically be checked. To explicitly use this (or any other) variable +in the client task the \fIcdl_open()\fR procedure may be called as +e.g. +.sp 0.5 +.nf + \f(CWif ((cdl = cdl_open (getenv("IMTDEV"))) == NULL) { + fprintf (stderr, "cannot open server connection\\n"); + exit (1); + }\fR +.fi +.NH +Image Display +.NH 2 +Overview of the Display Process +.LP + Basic image display is done most easily using the high-level +\fBcdl_displayIRAF()\fR, \fBcdl_displayFITS()\fR and \fBcdl_displayPix()\fR +procedures. These routines automatically define an image WCS and mapping, +clear the frame, set the frame buffer configuration and center the image +in the display. For most applications these are all that will be needed, +but the \fBcdl_writeSubRaster()\fR procedure can also be used to display an +image. For example, to display one image in a mosaic or other cases where +the task needs low-level access to position the image or write raw pixel +values. +.LP + In these cases it is the responsibility of the client program to +prepare the server for display. The basic steps involved in displaying an +image include +.sp 0.5 +.TS +center; +lB lB +- - +l lI. +Operation CDL Procedure +Selecting the frame cdl_setFrame() +Clear the frame cdl_clearFrame() +Select the frame buffer configuration cdl_selectFB() +Set the frame buffer configuration cdl_setFBConfig() +Scale the image pixels to 201 display values cdl_zscaleImage() +Compute the raster placement in the frame buffer +Construct a \fInode!path\fR image path +Set the image mapping cdl_setMapping() +Define the image WCS +Set the image WCS cdl_setWCS() +Write the pixels to the display cdl_writeSubRaster() +.TE +.sp 0.5 +In cases like a mosaic display, obviously some steps (e.g. clearing the +frame, selecting the configuration, etc) will only need to be done once. +XImtool V1.3 and later version support multiple WCSs in a single frame +so each piece of the mosaic should define a mapping and an independent +WCS. The last step in the display here should be a single WCS for the +entire mosaic such as "\fIdetector coordinates\fR", without this the +coordinates used by default will be based on the last WCS sent to the +display. Servers which do not support mappings will just ignore the +mapping information, but may still require a frame buffer WCS for other +tasks to operate correctly. For simple displays of single images, the +high-level routines handle all of these steps automatically, they are +included here as checklist of what must be considered when using the CDL +for low-level display. +.NH 2 +Displaying IRAF Images +.LP + The \fBcdl_displayIRAF()\fR procedure can be used to display an +IRAF OIF format image (i.e. images with a \fI.imh\fR extension) by +simply passing in the image name. Pixel files for the image must be +accessible from the local machine but can be in any directory, the HDR$ +syntax for the imdir is also recognized. Images may be three dimensional, +the \fIband\fR argument is used to select the image band to be displayed. +The \fIframe\fR and \fIfbconfig\fR arguments select the frame and frame +buffer size respectively, the special symbolic value \fBFB_AUTO\fR may be +used for the \fIfbconfig\fR argument to have the procedure automatically +select the frame buffer most appropriate for the image size. +If the \fIzscale\fR flag is greater than zero +the image will automatically be converted to 8-bit values using the zscale +mapping algorithm. The function returns a positive value if the image +cannot be accessed or displayed for any reason, an error message will be +printed. +.LP + The \fIcdl_isIRAF()\fR procedure returns a positive value if the +filename argument is recognized as an IRAF image, it does not check whether +the pixel file can be successfully accessed. For simply reading the pixels +from an IRAF image the \fBcdl_readIRAF()\fR procedure may be used. The +function returns a zero value and sets the output pixel array, image +dimensions and pixel size if successful, otherwise the function returns a +positive value. Note that +the output pixel values may need to be scaled before they can be displayed. + +.us "Synopsis" +.nf + \f(CWint cdl_displayIRAF (CDLPtr cdl, char *fname, int band, + int frame, int fbconfig, int zscale)\fR + \f(CWint cdl_isIRAF (char *fname)\fR + \f(CWint cdl_readIRAF (char *fname, int band, uchar **pix, + int *nx, int *ny, int *bitpix, char *title)\fR +.fi +.NH 2 +Displaying FITS Images +.LP + The \fBcdl_displayFITS()\fR procedure can be used to display a +\fIsimple\fR FITS image by name. A "simple" FITS file is assumed to be +one containing a single image and having no extensions. Other types of +FITS files may of course be displayed but the client will have to use other +means to import the pixels. FITS image extensions may be supported in a future +release of the CDL. The \fIframe\fR and \fIfbconfig\fR +arguments select the frame and frame buffer size respectively, +the special symbolic value \fBFB_AUTO\fR may be +used for the \fIfbconfig\fR argument to have the procedure automatically +select the frame buffer most appropriate for the image size. +If the +\fIzscale\fR flag is greater than zero the image will automatically be +converted to 8-bit values using the zscale mapping algorithm. The function +returns a positive value if the image cannot be accessed or displayed for +any reason, an error message will be printed. +.LP + The \fIcdl_isFITS()\fR procedure returns a positive value if the +filename argument is recognized as a simple FITS image. For simply reading +the image pixels the \fBcdl_readFITS()\fR procedure may be used. The +output pixel array, image dimensions and pixel size are returned if +successful otherwise the function returns a positive value. Note that +the returned pixel values may need to be scaled before they can be displayed. + +.us "Synopsis" +.nf + \f(CWint cdl_displayFITS (CDLPtr cdl, char *fname, int frame, + int fbconfig, int zscale)\fR + \f(CWint cdl_isFITS (char *fname)\fR + \f(CWint cdl_readFITS (char *fname, uchar **pix, int *nx, int *ny, + int *bitpix, char *title)\fR +.fi +.NH 2 +Displaying Raw Pixels +.LP + The \fBcdl_displayPix()\fR procedure can be used to display an +arbitrary array of pixels of any size. The \fInx\fR and \fIny\fR arguments +are the raster dimensions, and \fIbitpix\fR is the pixel size and has the +same meaning as the FITS BITPIX keyword. The \fIframe\fR and \fIfbconfig\fR +arguments select the frame and frame buffer size respectively, +the special symbolic value \fBFB_AUTO\fR may be +used for the \fIfbconfig\fR argument to have the procedure automatically +select the frame buffer most appropriate for the image size. +If the +\fIzscale\fR flag is greater than zero the image will automatically be +converted to 8-bit values using the zscale mapping algorithm. + +.us "Synopsis" +.nf + \f(CWint cdl_displayPix (CDLPtr cdl, uchar *pix, int nx, int ny, + int bitpix, int frame, int fbconfig, int zscale)\fR +.fi +.NH 2 +Frame Selection +.LP + Frame selection is normally done as an argument to one of the display +procedures, however frames may be explicitly selected using the +\fBcdl_setFrame()\fR procedure. This allows client programs to essentially +"blink" frames independently, as long as the server supports multiple frames. +The \fBcdl_getFrame()\fR procedure may be used to get the current frame +set in the server. + +.us "Synopsis" +.nf + \f(CWvoid cdl_setFrame (CDLPtr cdl, int frame)\fR + \f(CWvoid cdl_getFrame (CDLPtr cdl, int *frame)\fR +.fi +.NH 2 +Clearing the Display +.LP + The current display frame may be explicitly cleared using the +\fBcdl_clearFrame()\fR procedure. The frame is also cleared prior to +displaying new images by the procedures \fBcdl_displayPix()\fR, +\fBcdl_displayFITS()\fR, and \fBcdl_displayIRAF()\fR. + +.us "Synopsis" +.nf + \f(CWint cdl_clearFrame (CDLPtr cdl)\fR +.fi +.NH 2 +Frame Buffer Selection +.LP + The default frame buffer used is 512x512, other sizes may be +selected using the \fBcdl_setFBConfig()\fR procedure. To set the frame +buffer size the client passes the frame buffer number as defined in +the frame buffer configuration file (see below) while setting the image +WCS. It is important to note that the frame buffer isn't actually changed +in the server until a subsequent \fBcdl_setWCS()\fR call, either directly +or through some other procedure which sets the WCS (e.g. one of the display +procedures). +.LP + To get the size of the currently defined frame buffer the user +may call the \fBcdl_getFBConfig()\fR procedure. This returns not only +the current configuration number, but the size as well. To get the size +and any arbitrary configuration without actually setting it, the +\fBcdl_lookupFBSize()\fR procedure may be used. Any configuration not actually +defined in the frame buffer configuration file is returned as the default +512x512 size. + +.us "Synopsis" +.nf + \f(CWvoid cdl_setFBConfig (CDLPtr cdl, int configno)\fR + \f(CWvoid cdl_getFBConfig (CDLPtr cdl, int *configno, int *width, + int *height, int *nframes)\fR + \f(CWvoid cdl_lookupFBSize (CDLPtr cdl, int configno, int *width, + int *height, int *nframes)\fR +.fi +.NH 3 +Automatic Selection +.LP + The \fBcdl_selectFB()\fR procedure may be used to select the most +appropriate frame buffer to use for a given image size. If possible a frame +buffer the same size as the image will be used, otherwise one that is +larger will be chosen. Rather than simply selecting the first configuration +larger than the image, the procedure searches the entire configuration file +selecting the one with the least empty space in both dimensions. If the +\fIreset\fR flag is non-zero this frame is set automatically by the +procedure, otherwise the selected dimension is simply returned to the +calling program. In either case the new frame buffer will not take effect +until a new WCS is defined for the frame. + +.us "Synopsis" +.nf + \f(CWvoid cdl_selectFB (CDLPtr cdl, int nx, int ny, int *fb, + int *w, int *h, int *nf, int reset) +.fi +.NH 3 +The Frame Buffer Configuration File +.LP + The size of the frame buffer is not passed directly to the server +since this is not part of the communications protocol used. Instead, the +frame buffer number is sent as part of the WCS header packet. So that +both the server and client can know that a particular frame buffer number +corresponds to a specific size, a \fIframe buffer configuration file\fR +is used which both the client and server read. +.LP + The default configuration file is /usr/local/lib/imtoolrc, this can +be overridden by defining an \fBIMTOOLRC\fR environment variable naming +the file to be used, or by creating a .imtoolrc file in your home directory. +Since the server must also read the same file, this must be done before +starting both the client and server applications. +.LP +The format of the frame buffer configuration file is +.sp 0.5 + \fIconfigno nframes width height [extra fields]\fP +.sp 0.5 +e.g. +.sp 0.5 + 1 2 512 512 + 2 2 800 800 + 3 1 1024 1024 # comment + : : : : + +At most 128 frame buffer sizes may be defined, each configuration may define +up to 4 frames, configuration numbers need not be sequential but should be +in ascending order. +.NH 2 +Image WCS Description +.LP + The image WCS is defined using the \fBcdl_setWCS()\fR procedure. The +WCS defines a mapping between any linear coordinate system and the image +pixels, for our purposes we will discuss how the WCS is used to map the frame +buffer pixels to image coordinates. It is passed to the server in a string +of the form: +.sp 0.5 +.nf + \fIname\fR - \fItitle\fR\\n + a b c d tx ty z1 z2 zt +.fi +.sp 0.2 +where: +.sp 0.2 + \fBX\fR' = a * \fBX\fR + c * \fBY\fR + tx + \fBY\fR' = b * \fBX\fR + d * \fBY\fR + ty + +The terms \fIa, b, c\fR, and \fId\fR define a rotation of the WCS wrt the +pixel (i.e. frame buffer) +coordinates, the \fItx\fR and \fIty\fR values are translation terms relative +to the upper-left corner of the display. The +remaining three values define the intensity mapping of the display pixels; +\fIz1\fR is the minimum pixel value used in the transformation, \fIz2\fR is +the maximum value, and \fIzt\fR defines the type of transformation used (0 for +none, 1 for linear, 2 for log10). +.LP + The WCS may be set explicitly by the calling program or a default +appropriate for the image will be set automatically by the high-level +display procedures, otherwise a WCS for the frame buffer is defined +(i.e. returned coordinates are frame buffer coords). As an example of how +the WCS is defined, the default WCS for an image \fIIMX\fR x \fIIMY\fR +pixels in a frame buffer \fIFBX\fR x \fIFBY\fR pixels is defined as +.sp 0.5 +.nf +\f(CW a = 1.0; /* no rotation */ + b = 0.0; + c = 0.0; + d = -1.0; + tx = (\fIIMX\f(CW / 2) - (\fIFBX\f(CW / 2) + 1; /* center in FB */ + ty = (\fIFBY\f(CW / 2) + (\fIIMY\f(CW / 2); + z1 = z1; /* zscale values */ + z2 = z2; + zt = 1;\fR +.fi + +.us "Synopsis" +.nf + \f(CWint cdl_setWCS (CDLPtr cdl, char *name, char *title, + float a, float b, float c, float d, float tx, float ty, + float z1, float z2, int zt)\fR + \f(CWint cdl_getWCS (CDLPtr cdl, char *name, char *title, + float *a, float *b, float *c, float *d, float *tx, float *ty, + float *z1, float *z2, int *zt)\fR +.fi +.NH 3 +Image Mappings +.LP + Beginning with \fBX11IRAF V1.3\fR the \fIXImtool\fR display server +has had the ability to use multiple world coordinate systems in a frame +(e.g. subrasters of a mosaic display). To do this, the \fBIRAF\fR and +\fBCDL\fR display interfaces were modified to pass in extra information +with the WCS string to define the mapping of the image pixels to the frame +buffer pixels. This extra information allows the XImtool to know when the +cursor in within one of the image subrasters and compute coordinates +appropriately. (See the \fIXImtool\fR documentation for details on how +this is done exactly). +.LP + The CDL will automatically determine when the connection is first +established whether the server is aware of this new mapping information. +Calls to send or receive mapping data will be ignored for servers which are +not aware of the extra data in the string. For servers which can use the +mappings, and where a mapping has been provided, the WCS string now looks +like +.sp 0.5 +.nf + \fIname\fR - \fItitle\fR\\n + a b c d tx ty z1 z2 zt\\n + \fBregion_name sx sy snx sny dx dy dnx dny\\n + object_ref\R +.fi +.sp 0.5 +where the new parameters are defined to be: +.sp 0.2 +.TS +center; +lB lI. +region_name User-defined name for the region. +sx, sy, snx, sny Source rect in the object. +dx, dy, dnx, dny Destination rect in the display frame buffer. +object_ref Full node!/path image specification. +.TE +The \fIobject_ref\fR should be a complete node!path specification to the +image including any image section or extension. This is needed by the +XImtool coordinate/pixel plug-in to map the same image as was displayed by +the client. The path and node are required to ensure the image will be +found properly. The \fIregion_name\fR can be anything such as \fIimage\fR, +\fIsubraster1\fR, or \fIccd3\fR. The purpose of this field is to provide +some named value for the mapping that may be useful to other client programs +needing to access the mapping. \fISource\fR coordinates refer to the image +pixels, \fIdestination\fR coordinates refer to the frame buffer. +.LP + Because we did not wish to change any of the existing interfaces, +mappings must be set prior to the \fBcdl_setWCS()\fR call using the +\fBcdl_setMapping()\fR procedure. The mapping is stored until the WCS is +actually sent. Similarly, a mapping may be retrieved \fIafter\fR a +\fBcdl_getWCS()\fR call using the \fBcdl_getMapping()\fR procedure to +return the values read with the last WCS retrieval. Since there can at +times be more than one WCS in a frame, it's also possible to query the +mapping for a particular WCS by number (e.g. the WCS number returned in a +cursor read) using the \fIcdl_queryMap()\fR procedure. See the sample +programs in the appendices for examples of how these procedures might be +called. + +.us "Synopsis" +.nf + \f(CWint cdl_getMapping(CDLPtr cdl, char *region, + float *sx, float *sy, int *snx, int *sny, + int *dx, int *dy, int *dnx, int *dny, char *ref); + \f(CWint cdl_setMapping(CDLPtr cdl, char *region, + float sx, float sy, int snx, int sny, + int dx, int dy, int dnx, int dny, char *ref); + \f(CWint cdl_queryMap(CDLPtr cdl, int wcs, char *region, + float *sx, float *sy, int *snx, int *sny, + int *dx, int *dy, int *dnx, int *dny, char *objref); +.fi + +.NH 2 +Image Colormaps +.LP + The IIS protocol used does not permit the downloading of user-defined +colormaps, all images are loaded as raw grayscale values according to the +XImtool colormap model used by currently supported servers. All images +containing private colormaps or more than the 201 grayscale values defined +by the Imtool colormap model must either convert the image to 8-bit +grayscale values by calling the CDL zscale procedures (\fBcdl_computeZscale()\fR +and \fBcdl_zscaleImage()\fR) or scale the images in client code with +user LUTs. The CDL zscale procedures scale image to 201 grayscale values +so that they are displayed to the full 8-bit range, user LUT +transformations or user code for converting to grayscale from a private +colormap procedures should do the same. +.NH 3 +Imtool Color Model +.LP + The IMTOOL color model defines at most 201 grayscale values for use in +displaying the image, a set of 16 static colors are also defined for overlay +graphics. Pixel values sent to the server should be already scaled to this +model, i.e. the image pixels should be scaled to the range 1-200, values +above this will either represent the overlay colors or will wrap around to +8-bit values. The CDL zscale procedures will automatically scale +arbitrary pixel values to use this color model, the overlay procedures +assume color values are defined for the static color range 201-217 but any +8-bit value may be used. +.LP + A summary of the color model values is included below: +.TS +center; +lB lB cB cB lB lB +l l c c l l. +Color Description Color Description +0 Background 208 Cyan +1 - 200 Image data 209 Magenta +201 Cursor (white) 210 Coral +202 Background (black) 211 Maroon +203 White 212 Orange +204 Red 213 Khaki +205 Green 214 Orchid +206 Blue 215 Turquoise +207 Yellow 216 Violet +217 Wheat 218-255 undefined +.TE +.NH 2 +ZScale Intensity Mapping +.LP + Since most display servers are only capable of displaying 8-bit pixel +values, images with more than 8-bits per pixel must be scaled prior to +display. For linear transformations this is typically done using a simple +conversion of the image min/max values to the 256 grayscale values, however +this doesn't produce very good results when most pixel values are near one +of the extremes (usually the image min for astronomical images). To solve +this IRAF uses a \fIzscale\fR mapping algorithm where a sampling grid is used +to approximate the image min/max values rather than computing it directly, +a line is then fit to these sample pixels to determine the optimal +transformation to the display values. This is not only more efficient but +maps the most common pixel values to the display range producing a better image. +.LP + The CDL has several routines for doing the same transformation: the +\fIcdl_computeZscale()\fR procedure is used to compute the optimal \fIz1\fR +and \fIz2\fR +values (the min/max used for the zscale transform) for an image of any pixel +size. The \fIbitpix\fR argument is the number of bits-per-pixel for the input +array and has the same meaning as for the FITS \fIBITPIX\fR keyword. To then +transform the image using these values (or user-defined values) the +\fIcdl_zscaleImage()\fR procedure is used. The input pixels are modified by +this procedure but the array is not reallocated to the smaller size needed by +an 8-bit array. The \fBcdl_setSample()\fR and \fBcdl_setSampleLines()\fR +procedures can be used to change the sampling grid and number of sample +points (the default is 600 points on 5 lines). The \fBcdl_setContrast()\fR +procedure can be used to change the default contrast adjustment to the slope +used in the transformation (the default is 0.25). If a value of zero is +given then the minimum and maximum of the intensity sample is used as the +z1/z2 value. +.LP + Each of the CDL display procedures has a \fIzscale\fR flag to +automatically scale the pixels prior to display. Applications wishing to +set their own z1/z2 values will need to call the zscale procedures and +disable this flag. By default cdl_zscaleImage() will use a linear transform, +the \fBcdl_setZTrans()\fR procedure may be used to change this. Acceptable +values are \fBCDL_UNITARY\fR (zero) for a unitary transform, \fBCDL_LINEAR\fR +(one) for a linear transform, or \fBCDL_LOG\fR (two) for a log10 transform. + +.us "Synopsis" +.nf + \f(CWvoid cdl_computeZscale (CDLPtr cdl, uchar *pix, int nx, + int ny, int bitpix, float *z1, float *z2)\fR + \f(CWvoid cdl_zscaleImage (CDLPtr cdl, uchar **pix, int nx, + int ny, int bitpix, float z1, float z2)\fR + + \f(CWvoid cdl_setZTrans (CDLPtr cdl, int ztrans)\fR + \f(CWvoid cdl_getZTrans (CDLPtr cdl, int *ztrans)\fR + \f(CWvoid cdl_setZScale (CDLPtr cdl, float z1, float z2)\fR + \f(CWvoid cdl_getZScale (CDLPtr cdl, float *z1, float *z2)\fR + + \f(CWvoid cdl_setSample (CDLPtr cdl, int nsample)\fR + \f(CWvoid cdl_setSampleLines (CDLPtr cdl, int nlines)\fR + \f(CWvoid cdl_setContrast (CDLPtr cdl, float contrast)\fR + \f(CWvoid cdl_getSample (CDLPtr cdl, int *nsample)\fR + \f(CWvoid cdl_getSampleLines (CDLPtr cdl, int *nlines)\fR + \f(CWvoid cdl_getContrast (CDLPtr cdl, float *contrast)\fR + +.fi +.NH 2 +Image Hardcopy +.LP + While most servers include some hardcopy capability of their own the +CDL provides two procedures for creating hardcopy images from the client +(e.g. for a batch processing application). The client will typically read +back the entire image, frame buffer, of just a subraster and pass those +pixels to the print procedure. Images will be written as Pseudocolor +Postscript (to preserve the overlay marker colors) and may be disposed to +a file using the \fBcdl_printPixToFile()\fR procedure or to any command string +accepting input from \fIstdin\fR (typically just an 'lpr' command) by using +the \fBcdl_printPix()\fR procedure. + +.us "Synopsis" +.nf + \f(CWint cdl_printPix (CDLPtr cdl, char *cmd, uchar *pix, int nx, + int ny, int annotate)\fR + \f(CWint cdl_printPixToFile (CDLPtr cdl, char *fname, uchar *pix, + int nx, int ny, int annotate)\fR +.fi +.NH 2 +Image Cursor +.LP + The image cursor is read using the \fBcdl_readCursor()\fR procedure. +The returned value is the cursor \fI(x,y)\fR position as floating point value +in terms of the currently define image WCS. Note that this position must +be converted to integer if it is to be used in one of the marker procedures. + +.us "Synopsis" +.nf + \f(CWint cdl_readCursor (CDLPtr cdl, int sample, float *x, + float *y, int *wcs, char *key)\fR +.fi + +The \fIwcs\fR argument is defined as + +.nf + wcs = frame * 100 + wcs_number +.fi + +(where wcs_number=0 for frame buffer coords and 1 for image coords). So, +you can get the frame as simply + +.nf + frame = (int) (wcs / 100) +.fi + +.NH 3 +Cursor Sampling +.LP + If the cdl_readCursor() \fIsample\fR flag is non-zero the \fIlogical +image cursor\fR position is returned immediately, otherwise the display server +will wait for a keystroke before returning the cursor position. The logical +image cursor is the last value set by a \fIcdl_setCursor()\fR call or the last +value returned by a \fIcdl_readCursor()\fR call. When sampling the cursor +position the keystroke value is undefined. +.NH 2 +Image Readout +.LP + The CDL maintains an internal knowledge of where an image has been +positioned if it was displayed using one of the \fIcdl_display*\fR procedures. +The \fBcdl_readImage()\fR procedure may be used to read back the entire image +pixels from the server ignoring the region of the frame buffer outside of +the image, the \fBcdl_readFrameBuffer()\fR procedure will read back the +contents of the entire frame buffer. The dimensions of the array are returned +in the \fInx\fR and \fIny\fR arguments. + +.us "Synopsis" +.nf + \f(CWint cdl_readImage (CDLPtr cdl, uchar **pix, int *nx, + int *ny)\R + \f(CWint cdl_readFrameBuffer (CDLPtr cdl, uchar **pix, + int *nx, int *ny)\R +.fi +.NH 2 +Subraster I/O +.LP + The \fBcdl_writeSubRaster()\fR procedure is used to write an arbitrary +raster to any location in the display. Similarly the +\fBcdl_readSubRaster()\fR procedure is used to read back an arbitrary raster. +When an image has previously been displayed the subraster position is given +in image coordinates (e.g. when writing a subregion of edited pixels), +otherwise the position is in frame buffer coordinates (e.g. to display +multiple images per frame you should use the cdl_writeSubRaster() call). +See the section on \fIMarker Coordinates\fR for further explanation of the +coordinate systems used. + +.us "Synopsis" +.nf + \f(CWint cdl_writeSubRaster (CDLPtr cdl, int lx, int ly, int nx, + int ny, uchar *pix)\fR + \f(CWint cdl_readSubRaster (CDLPtr cdl, int lx, int ly, int nx, + int ny, uchar **pix)\fR +.fi +.NH +Graphics Overlay +.NH 2 +Marker Coordinates +.LP + All marker positions are assumed to be image pixel coordinates, +although there is no requirement that the position be on the image itself. +When an image WCS is defined (using the CDL display procedures or explicitly) +the origin of the coordinates used shifts from the frame buffer lower-left +to the lower-left of the image as displayed in the frame. Negative +positions are allowed and will either refer to empty pixels if the frame +buffer is larger than the image, or pixels outside the frame buffer +boundaries. Raster I/O requests will be clipped to the frame buffer +endpoints, a request completely outside the frame buffer is an error. +.NH 2 +Mapping a Previously Displayed Image +.LP + Ideally any application wishing to draw markers on an image will have +also displayed that image, however the \fBcdl_mapFrame()\fR procedure may +be used to map the requested frame for marker overlay. It does this by +reading the WCS defined for that frame and assumes an image has been +displayed and centered in the frame buffer, then resets the internal CDL +image position. For this reason it should not be used when multiple image +mappings have been displayed to a frame unless the marker overlay can be +done reliably using the last WCS displayed to the frame buffer. +If no image has been displayed the frame buffer is mapped +directly. This can be used for example to map an empty frame for displaying +just the markers without an image, or for mapping another frame's WCS for +use on the current display. The frame is not changed by the procedure call +however the current WCS \fIis\fR changed. + +.us "Synopsis" +.nf + \f(CWint cdl_mapFrame (CDLPtr cdl, int frame)\fR +.fi +.NH 2 +Marking a Coordinate File +.LP + Since a common function for programs will be to mark a list of +coordinates, the high-level \fBcdl_markCoordsFile()\fR procedure is +provided to make this easier. The input parameters include a filename +expected to contain a set of (x,y) points (real or integer), and arguments +specifying the point type, size and color to draw. If the \fIlabel\fR +argument is positive each marker point will be labeled with it's relative +number in the file. The size, type and color arguments all have the same +meaning as for the \fBcdl_markPoint()\fR procedure described below. + +.us "Synopsis" +.nf + \f(CWint cdl_markCoordsFile (CDLPtr cdl, char *fname, int type, + int size, int color, int label)\fR +.fi +.NH 2 +Marker Colors +.LP + Markers may be drawn using any 8-bit value, in order to use the +static overlay colors the color must be in the range 201-217 (see above for +notes on the XImtool color model). The "\fIcdl.h\fR" include file +for C programs, the "\fIcdlftn.inc\fR" include for fortran programs, +or the "\fIcdlspp.h\fR" include for SPP programs, defines the following +symbolic constants for each of the static overlay colors: +.sp 0.5 +.TS +center; +lB l c c lB l. +C_BLACK 202 C_CORAL 210 +C_WHITE 203 C_MAROON 211 +C_RED 204 C_ORANGE 212 +C_GREEN 205 C_KHAKI 213 +C_BLUE 206 C_ORCHID 214 +C_YELLOW 207 C_TURQUOISE 215 +C_CYAN 208 C_VIOLET 216 +C_MAGENTA 209 C_WHEAT 217 +.TE +.NH 2 +Marker Types +.LP + Currently supported marker types include: \fI +.TS +center; +l l l l l. +Point Line Box Polyline Polygon +Circle Circular Annuli Ellipse Elliptical Annuli Text +.TE +.LP + \fRThe "\fIcdl.h\fR" include file for C programs, the +"\fIcdlftn.inc\fR" include for fortran programs, or the "\fIcdlspp.h\fR" +include file SPP programs, defines the following symbolic constants for +each of the defined \fIPoint\fR marker types: +.TS +center; +lB r c c lB r. +M_FILL 1 M_CIRCLE 64 +M_POINT 2 M_STAR 128 +M_BOX 4 M_HLINE 256 +M_PLUS 8 M_VLINE 512 +M_CROSS 16 M_HBLINE 1024 +M_DIAMOND 32 M_VBLINE 2048 +.TE +.LP + Point markers are drawn using the \fBcdl_markPoint()\fR procedure, +point types may be logically \fIOR\fR'd to create composite markers, closed +shapes such as a circles, diamonds, or squares may be \fIOR\fR'd with the +M_FILL flag to flood-fill the point with the current overlay color. +.NH 3 +Point +.LP + The \fBcdl_markPoint()\fR procedure is used to mark a specific point +on the image using one of the marker types listed above. The marker is +centered at the coordinates specified by the \fIx\fR and \fIy\fR arguments, +\fItype\fR is an integer flag indicating what kind of marker to draw and +may be a composite type by logically ORing two or more marker types. +\fISize\fR is the width and height of the marker measured in pixel unxits, +and \fIcolor\fR is the color used to draw the marker. If the \fInumber\fR +argument is greater than zero that number will be drawn next to the point +as a label, creating text labels for point markers can be done using the +\fIcdl_markPointLabel\fR procedure. +.LP + Most marker names are fairly obvious but several are worth special +mention: The M_DIAMOND, M_CIRCLE and M_BOX marker types may be logically +\fIOR\fRed with the M_FILL flag to produce a filled marker type. Unless +\fIOR\fRd with the M_POINT flag all point markers will leave the center +pixel unchanged. The M_HLINE and M_VLINE markers are most useful in +astronomical applications to mark an individual star, they are horizontal +and vertical lines respectively with a gap in the middle third of the marker +(the M_HBLINE and M_VBLINE are identical but with a width of 3 pixels). +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPoint (CDLPtr cdl, int x, int y, int number, + int size, int type, int color)\fR + \f(CWint cdl_markPointLabel (CDLPtr cdl, int x, int y, char *label + int size, int type, int color)\fR +.fi +.NH 3 +Line +.LP + The \fBcdl_markLine()\fR procedure is used to draw a line of the +specified color between points (\fIxs,ys\fR) and (\fIxe,ye\fR). +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markLine (CDLPtr cdl, int xs, int ys, int xe, int ye, + int color)\fR +.fi +.NH 3 +Box +.LP + The \fBcdl_markBox()\fR procedure is used to draw a box of the +specified color with endpoints specified by (\fIlx,ly\fR) and (\fIux,uy\fR). +If the \fIfill\fR flag is set the box will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markBox (CDLPtr cdl, int lx, int ly, int ux, int uy, + int fill, int color)\fR +.fi +.NH 3 +Circle +.LP + The \fBcdl_markCircle()\fR procedure is used to draw a circle of the +specified color with a center at (\fIx,y\fR) and radius \fIradius\fR. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markCircle (CDLPtr cdl, int x, int y, int radius, + int fill, int color)\fR +.fi +.NH 3 +Polyline +.LP + The \fBcdl_markPolyline()\fR procedure is used to draw a line +connecting the \fInpts\fR points specified by the \fIxpts\fR and +\fIypts\fR array in the desired \fIcolor\fR. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPolyline (CDLPtr cdl, int *xpts, int *ypts, + int npts, int color)\fR +.fi +.NH 3 +Polygon +.LP + The \fBcdl_markPolygon()\fR procedure is used to draw a closed +polygon consisting of \fInpts\fR vertices specified by the \fIxpts\fR and +\fIypts\fR array in the desired \fIcolor\fR. The last point in the array +will automatically be connected to the first point by the procedure. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPolygon (CDLPtr cdl, int *xpts, int *ypts, + int npts, int fill, int color)\fR +.fi +.NH 3 +Ellipse +.LP + The \fBcdl_markEllipse()\fR procedure is used to draw an ellipse of the +specified color with a center at (\fIx,y\fR) and semimajor-axis \fIxrad\fR +and semiminor-axis \fIyrad\fR pixels long. A rotation angle for the ellipse +may be specified by passing a non-zero \fIangle\fR argument, the angle is +measured in degrees from the positive x-axis. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markEllipse (CDLPtr cdl, int x, int y, int xrad, + int yrad, float ang, int fill, int color)\fR +.fi +.NH 3 +Circular Annuli +.LP + The \fBcdl_markCircAnnuli()\fR procedure is used to draw +\fInannuli\fR circles separated by \fIsep\fR pixels each. The circle is +centered at (\fIx,y\fR) with an initial radius of \fIradius\fR pixels. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markCircAnnuli (CDLPtr cdl, int x, int y, int radius, + int nannuli, int sep, int color)\fR +.fi +.NH 3 +Elliptical Annuli +.LP + The \fBcdl_markEllipAnnuli()\fR procedure is used to draw +\fInannuli\fR ellipses separated by \fIsep\fR pixels each. The ellipse is +centered at (\fIx,y\fR) with an initial semimajor and semiminor axis +specified by the \fIxrad\fR and \fIyrad\fR arguments. Each ellipse will +be optionally rotate by an \fIangle\fR degrees as measured from the positive +x-axis. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markEllipAnnuli (CDLPtr cdl, x, y, xrad, yrad, ang, + int nannuli, int sep, int color)\fR +.fi +.NH 3 +Text +.LP + The \fBcdl_markText()\fR procedure is used to draw a text string +specified by \fIstr\fR argument with an initial position at (\fIx,y\fR) +and optionally rotated by \fIangle\fR degrees as measured from the positive +x-axis. The default \fIsize\fR is 1.0 and is approximately a 6x13 font, +the font size may be scaled by any fractional amount. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markText (CDLPtr cdl, int x, int y, char *str, + float size, float angle, int color)\fR +.fi +.NH 2 +Text Fonts +.LP + The \fBcdl_setFont()\fR procedure is used to choose between one +of four available fonts as the text marker default: Roman, Greek, Futura, +Bold and Times respectively. By default the Roman font will be used. +The width of the lines used to draw the text may also be set. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWvoid cdl_setFont (CDLPtr cdl, int font)\fR + \f(CWvoid cdl_setTextWidth (CDLPtr cdl, int width)\fR +.fi +.sp 0.5 +A complete listing of the Greek character mappings can be found in the +file 'greek.ps' in the 'doc' subdirectory of the CDL distribution. + The \fIRoman\fR font is the font implemented in the original version +of the CDL and works well for most applications. Both the \fIGreek\fR and +\fITimes\fR fonts are hi-resolution fonts which work best for larger frame +buffers but can produce publication quality text. The \fIFutura\fR font +is a simpler font which can produce better results than the default on small +size frame buffers. A \fIBold\fR font automatically increases the text line +width by one pixel over the current setting and may be used with any font. +.NH 3 +In-Line Font Changes +.LP + Text markers are drawn using the font selected with +the \fIcdl_setFont()\fR +routine, however fonts may be change within a string itself (e.g. to set +a Greek character) using a \\f escape sequence. The escape is followed +by the character 'R' to set a Roman font, 'G' for Greek, 'F' for +futura, 'B' for bold +and 'T' for Times. Any number of escapes are permitted within a string, +the font change will remain in effect until it is changed, or the end of +string at which point any subsequent strings will again be drawn with the +default font. Additionally a 'P' in the escape sequence will change the +font to the one previously used, whatever that may be. +.LP + The CDL also supports a sub/superscripting of text which can only +be done with the font escapes. In this case the escape character followed by +a 'U' produces a superscript and a 'D' produces a subscript. The changes may +be nested permitting several levels of sub/superscripts, these escapes may +also be used in conjunction with a font change to cause the sub/superscript +to be drawn with a different font. A superscript escape will remain in +effect until the end of the string or a \\fD escape is seen. Similarly a +subscript remains in effect until the end of the string of a \\fU escape. +Sub/superscripted text is drawn using a smaller font size, there is presently +no way to specify a different size for the sub/superscripted text. +.TS +center; +cb s +l l. +Summary of Font Escapes +.sp 0.5 +\\\\fR change to Roman font +\\\\fG change to Greek font +\\\\fF change to Futura font +\\\\fT change to Times font +\\\\fB change to bold font +\\\\fP change to previous font +\\\\fU begin relative superscripted text +\\\\fD begin relative subscripted text +.TE +.NH 2 +Line Widths and Styles +.LP + The \fBcdl_setLineWidth()\fR procedure can be used to set the line +width used to draw polygon or polyline markers, point markers will not +be affected. The \fBcdl_setLineStyle()\fR procedure is used to set a line +style other than solid. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWvoid cdl_setLineWidth (CDLPtr cdl, int width)\fR + \f(CWvoid cdl_setLineStyle (CDLPtr cdl, int style)\fR +.fi +.LP + \fRThe "\fIcdl.h\fR" include file for C programs, the +"\fIcdlftn.inc\fR" include for fortran programs, or the "\fIcdlspp.h\fR" +include file SPP programs, defines the following symbolic constants for +each of the defined line styles: +.TS +center; +lB r c c lB r. +L_SOLID 0 L_DASHED 1 +L_DOTTED 2 L_DOTDASH 3 +L_HOLLOW 4 L_SHADOW 5 +.TE +.LP + The \fIhollow\fR line style is drawn with a linewidth of five pixels, +two pixels of color, a black line, and two pixels of color. It is best +used when the marker will traverse extreme changes in brightness, due to the +thickness of the line it may work best with larger frame buffers. The +\fIshadow\fR linestyle is drawn as two pixels of color and two pixels of black +and should be used for similar brightness variations, however it effectively +shows up as a line only two pixels wide and may be preferred for medium or +smaller frame buffers. +.LP + The three dashed linestyles are drawn using "gap" spacings of 5 +pixels in between line segments. Whether or not these gaps are resolved +depends on the size of the frame buffer being used and the magnification +used in the display server. By default they should resolve completely +using frame buffers up to 1024x1024 pixels, or magnification factors +displaying 1024x1024 pixels. If larger sizes are needed the image should +be subsampled prior to display to maintain the marker resolution needed +for these linestyles. + +.NH 2 +Deleting Markers +.LP + When markers are drawn the underlying subraster is first saved to +an internal structure, erasure is done by simply redisplaying the saved +raster. Problems can arise however when markers overlap; when deleting a +marker that is \fIunder\fR another marker the original pixels can overwrite +the pixels of the marker on top. This is an unfortunate side effect of the +simple scheme used in this version of the package, users can call the +\fBcdl_redrawOverlay()\fR procedure to help clean up any artifacts left +behind. +.NH 3 +Individual Markers +.LP + The \fBcdl_deleteMark()\fR procedure is used to delete a single +marker from the display(). The (\fIx,y\fR) argument is either the center +position of the marker if that is know by the application, more typically +it will be an approximate position. In the latter case the marker whose +center is closest to this position will be deleted. For markers with no +defined center the distance used to decide if the marker should be +deleted is the distance from the argument position to the edge of the +marker. For example, distance from a box or polygon is measured as the +distance from to one of the sides, for text it is the distance to the +start of the text string. There is no way to \fIun\fRdelete a marker other +than to redraw it. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_deleteMark (CDLPtr cdl, int x, int y)\fR +.fi +.NH 3 +The Entire Overlay +.LP + To erase all markers currently displayed use the +\fBcdl_clearOverlay()\fR procedure. Markers are erased in the reverse order +they were drawn to help reduce the chance that overlaying markers will leave +stray pixels. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_clearOverlay (CDLPtr cdl)\fR +.fi +.NH 2 +Redraw +.LP + The \fBcdl_redrawOverlay()\fR procedure can be used to redraw all +markers currently in the display list. This is sometimes needed when +subraster I/O procedures are used to redisplay subregions and overwrite +existing markers. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_redrawOverlay (CDLPtr cdl)\fR +.fi +.NH +ANSI C Function Prototypes +.LP + The current release of CDL provides full ANSI C function prototypes +for all public and private procedures. By default these will not be used +even on systems with native ANSI compilers, however. +To make use of the CDL prototypes users will +need to define the macro \fBCDL_ANSIC\fR either when compiling the program +(using the -D option to the compiler), +or as a definition in the program source preceding the 'cdl.h' include +directive. +.LP + For example, +.sp 0.5 +.nf + \f(CW#define CDL_ANSIC + #include "cdl.h" + : + main (int argc, char **argv) + :\fR +.fi +.sp 0.5 +or when compiling using something like +.sp 0.5 +.nf + \f(CWcc -DCDL_ANSIC client.c libcdl.a -lm\fR +.fi +.sp 0.5 + Note that when using CDL_ANSIC to build the client program it is +also required that the CDL itself be built in the same way to avoid +confusing FPE errors. Similarly, when building client tasks that \fIdo +not\fR +use CDL_ANSIC you must use a version of the library that has not been +compiled with prototypes. +.LP + The reason is that the float args to the CDL procedures in the +library, or in your task calls, are +promoted to doubles when compiling those procedures, but may only be passed as +floats in your code (or as double where the CDL is expecting float). +This means the argument stack is off by 4 bytes for each float arg and +the values interpreted by the CDL procedure will be corrupted. +If you're going to use the prototypes you'll +need to edit the CDL Imakefile to define "-DCDL_ANSIC" in the EXTRA_DEFINES +so it will use the prototypes and everything will line up. You will then +need to rebuild the libcdl.a as well as relink your program. +.NH +Fortran Language Binding Notes +.LP + The Fortran language binding routines are implemented in C but +should be accessible from any fortran program as though they were real +fortran subroutines. The calling sequences are the same as with the C +library routines with the following exceptions: +.IP +\(bu The CDL package pointer is maintained internally so no 'cdl' pointer is +passed in the fortran interface. +.IP +\(bu All routines which are integer procedures in the C interface return an +extra 'ier' argument to contain the error flag. All Fortran functions are +implemented as subroutines. +.IP +\(bu The procedure names are the same except that \fIcdl_\fR has been +replaced with \fIcf\fR in the fortran binding. If your compiler is +case-sensitive then use all lower case letters. +.LP +The binding has been tested on a number of different platforms without +problems. The procedure names haven't been restricted to the traditional +6-character fortran names since most modern compilers can handle longer +names, if yours isn't one of them contact \fIiraf@noao.edu\fR for help +in changing the names. +.LP + Since the CDL is implemented as a set of C routines, the one aspect +that cannot be overlooked in the fortran binding is the between Fortran and +C storage order for arrays. In most cases this will not be a problem since +the CDL routines are just passing around pointers even if they live for a +short while in a fortran program. The problem comes when using the fortran +program to read the arrays, for example in using the array returned by the +\fBcfreadIRAF()\fR procedure, or when passing in arrays for display that +originated in the user's fortran code. In these cases the array \fBmust\fR +be transposed to be interpreted correctly. It was assumed that in most +applications arrays returned by CDL procedures would be immediately passed +to other CDL procedures so having the binding routines +transpose the array to/from +Fortran storage order was unnecessarily inefficient. This may be changed in +later releases if required. + +.NH +SPP Language Binding Notes +.LP + The SPP language binding is experimental and is intended to provide +a way to quickly prototype tasks, it should not be used in production code +as it may not be as portable as the rest of the task. In essence this +binding is a layer on top of the Fortran binding since most IRAF platforms +still use Fortran as the intermediate code. The calling sequences are the +same as with the Fortran library routines with the following caveats: +.IP +\(bu The 'cdlspp.h' SPP include file is required by all files which call +CDL routines. The binding names are actually SPP macros to resolve the +current 6 character limit on procedure names. +.IP +\(bu All character string arguments must be dimensioned to at least SZ_FNAME +characters in length. +.IP +\(bu The CDL package pointer is maintained internally so no 'cdl' pointer is +passed in the fortran interface. +.IP +\(bu All routines which are integer procedures in the C interface return an +extra 'ier' argument to contain the error flag. All SPP functions are +implemented as subroutines. +.IP +\(bu On HPUX or IBM RS6000 systems the 'cdlspp.h' file must be edited to +remove the trailing underscores from the procedure name macros. This is +because on these platforms the fortran compiler will not append an +underscore to the SPP symbols as it does on other platforms. + +.NH +IIS Protocol Description +.LP + The communications protocol used by the CDL and servers such as +\fIXImtool\fR and \fISAOimage\fR, is a slightly modified version of that used +by the IIS Model 70. All operations are initiated by sending a header +packet containing a \fIthing id\fR (tid) and \fIsubunit\fR selecting the +function to be performed, optionally followed by data up to 32K bytes long. +The IIS header packet used is defined as +.nf + \f(CWstruct iism70 { + short tid; + short thingct; + short subunit; + short checksum; + short x, y, z; + short t; + };\fR +.fi + +The \fIthing count\fR field contains the negative number of bytes of data +that will be sent following the header packet. The IIS header checksum is +computed as +.nf +\f(CW + checksum = 0177777 - (tid + subunit + thingct + x + y + z + t); +\fR +.fi +The four IIS registers are set differently depending on the operation, a +summary of the header packets for each operation is summarized below. + +.KS +.ce 1 +\fBIIS Header Packet Summary\fR +.TS +tab(:); +c c c c c c c c c. +:TID:Subunit:Tct:X:Y:Z:T:Data +.T& +l | l | l | c | c | c | l | l | l |. +:_:_:_:_:_:_:_:_ +Read Data:IIS_READ\fB|\fPPACKED:MEMORY:-NB:x:y:fr:-:NB +Write Data:IIS_WRITE\fB|\fPPACKED:MEMORY:-NB:x:y:fr:-:NB +Read Cursor:IIS_READ:IMCURSOR:-:-:-:-:-:- +Write Cursor:IIS_WRITE:IMCURSOR:-:x:y:wcs:-:- +Set Frame:IIS_WRITE:LUT\fB|\fPCOMMAND:-1:-:-:-:-:2 +Erase Frame:IIS_WRITE \fB|\fP fb:FEEDBACK:-:-:-:fr:-:- + +Old Write WCS:IIS_WRITE\fB|\fPPACKED:WCS:-N:-:-:fr:fb:320 +Old Read WCS:IIS_READ:WCS:-:-:-:fr:wcs:320 + +WCS Version?:IIS_READ:WCS:-:1:1:-:-:320 +WCS by Number?:IIS_READ:WCS:-:1:-:fr:wcs:1024 +New Write WCS:IIS_WRITE\fB|\fPPACKED:WCS:-N:1:-:fr:fb:1024 +New Read WCS:IIS_READ:WCS:-:1:-:fr:wcs:1024 +:_:_:_:_:_:_:_:_ +.TE +.KE +.TS +l l l. +Where 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 +.TE +.LP +TID fields can be logically OR'd with the PACKED flag indicating the number +of data bytes is exactly \fIthingct\fR bytes long, otherwise \fIthingct\fR +must be specified as half the number of data bytes. In a cursor read, if +the IIS_READ flag is OR'd with IMC_SAMPLE the logical cursor position (i.e. +the last value read or set) is returned immediately, otherwise the server +will wait for a keystroke to be hit before returning a string containing the +(x,y) position, wcs of the read, and the keystroke. When setting the frame +you must send a short integer in the data containing the frame selected. + +.NH +VXIMTOOL Proxy/Display Server Usage +.LP +\fIVXIMTOOL\fR is a image display server process much like \fIXIMTOOL\fR, +except that all it normally does is respond to datastream requests +to read and write to internal frame buffers maintained as arrays in memory. +Multiple frame buffers and frame buffer configurations are supported. It +can be used to debug CDL programs by printing out the +protocol packets received, or can simply be used as a dummy server in cases +where no image display is really needed. By enabling the \fI-proxy\fR +flag the server can also be used to repeat the datastream requests to a +list of other servers, effectively splitting the image display to a number +of other servers. See the \fIvximtool\fR man page for details on other +command-line arguments and usage. +.LP +The program was originally intended as a debugging tool, either in the +development of CDL clients directly or in cases where the display may +need to go to separate screens as part of a larger project. For example, +engineers may wish to "eavesdrop" on the system by viewing images displayed +by CDL clients used as part of a data acquisition system. It can also be +used as a memory-only display server for CDL clients which need to be run +in the background as part of a pipeline processing system requiring a +frame buffer for image marking. +.LP +In proxy mode the program acts as a relay for the IIS datastream packets, +sending image data, frame requests, etc. to a list of other servers specified +on the command line. The effect of this is to allow a client to display to +this program which then re-displays to each of the other named servers. +Of course CDL clients can also do this internally by opening multiple +connections, using \fIvximtool\fR in proxy mode adds the functionality to +programs which may use this feature only ocasionally. A maximum of 8 servers +may be named, they may be either on the local host or a remote machine +and connections can be established using either fifos or sockets. See +above or the \fIvximtool\fR man page for details on how to specify the +server connection. +.LP +The current implementation has a few restrictions users should keep in mind: +.IP +\(bu The time to display an image or perform any output operation scales +with the number of connected hosts. Each IIS packet is forwarded to each +host in turn before processing the next input packet, and connection over a slow +network will delay the entire process. +.IP +\(bu Cursor and image readback are done by sending the request \fIonly\fR to +the first server named on the command line. This is done to avoid forcing +a cursor mode on all servers which cannot be terminated when a response is +received from only one server, and means that the first server named should +be the one used to control interactive sessions. The remaining servers +however can still respond to cursor requests from other applications +connected to that server on another channel. +.IP +\(bu All named servers must be running prior to starting the proxy server. +The connection to the remote servers is established when this task is first +run and if no server is running that connection will be ignored. The task will +exit if no remote servers can be found for display. +.IP +\(bu Any connected server that shuts down while the proxy server is running +is likely to cause the program to crash on the next display. +.bp +.NH +C Interface Summary +.LP +.in 0.5i +#include "\fBcdl.h\fR" +.in -0.5i + +.TS +center; +r l. +CDLPtr \fBcdl_open\fR (imtdev) +int \fBcdl_displayPix\fR (cdl, pix, nx, ny, bitpix, frame, fbconfig, zscale) +char \fBcdl_readCursor\fR (cdl, sample, x, y, wcs, key) +int \fBcdl_setCursor\fR (cdl, x, y, wcs) +int \fBcdl_setWCS\fR (cdl, name, title, a, b, c, d, tx, ty, z1, z2, zt) +int \fBcdl_getWCS\fR (cdl, name, title, a, b, c, d, tx, ty, z1, z2, zt) +void \fBcdl_setFrame\fR (cdl, frame) +int \fBcdl_clearFrame\fR (cdl) +void \fBcdl_close\fR (cdl) + +int \fBcdl_setMapping\fR (cdl, region, sx,sy,snx,sny, dx,dy,dnx,dny, ref) +int \fBcdl_getMapping\fR (cdl, region, sx,sy,snx,sny, dx,dy,dnx,dny, ref) +int \fBcdl_queryMap\fR (cdl, wcs, region, sx,sy,snx,sny, dx,dy,dnx,dny, objref) + +int \fBcdl_displayIRAF\fR (cdl, fname, band, frame, fbconfig, zscale) +int \fBcdl_isIRAF\fR (fname) +int \fBcdl_readIRAF\fR (fname, band, pix, nx, ny, bitpix, title) + +int \fBcdl_displayFITS\fR (cdl, fname, frame, fbconfig, zscale) +int \fBcdl_isFITS\fR (fname) +int \fBcdl_readFITS\fR (fname, pix, nx, ny, bitpix, title) + +void \fBcdl_computeZscale\fR (cdl, pix, nx, ny, bitpix, z1, z2) +void \fBcdl_zscaleImage\fR (cdl, pix, nx, ny, bitpix, z1, z2) + +int \fBcdl_printPix\fR (cdl, cmd, pix, nx, ny, annotate) +int \fBcdl_printPixToFile\fR (cdl, fname, pix, nx, ny, annotate) + +int \fBcdl_readImage\fR (cdl, pix, nx, ny) +int \fBcdl_readFrameBuffer\fR (cdl, pix, nx, ny) +int \fBcdl_readSubRaster\fR (cdl, lx, ly, nx, ny, pix) +int \fBcdl_writeSubRaster\fR (cdl, lx, ly, nx, ny, pix) + +void \fBcdl_selectFB\fR (cdl, nx, ny, fb, w, h, nf, reset) +void \fBcdl_setFBConfig\fR (cdl, configno) +void \fBcdl_getFBConfig\fR (cdl, configno, w, h, nf) +void \fBcdl_lookupFBSize\fR (cdl, configno, w, h, nf) + +void \fBcdl_setZTrans\fR (cdl, ztrans) +void \fBcdl_setZScale\fR (cdl, z1, z2) +void \fBcdl_setSample\fR (cdl, nsample) +void \fBcdl_setSampleLines\fR (cdl, nlines) +void \fBcdl_setContrast\fR (cdl, contrast) +void \fBcdl_setName\fR (cdl, imname) +void \fBcdl_setTitle\fR (cdl, imtitle) + +void \fBcdl_getFrame\fR (cdl, frame) +void \fBcdl_getZTrans\fR (cdl, ztrans) +void \fBcdl_getZScale\fR (cdl, z1, z2) +void \fBcdl_getSample\fR (cdl, nsample) +void \fBcdl_getSampleLines\fR (cdl, nlines) +void \fBcdl_getContrast\fR (cdl, contrast) +void \fBcdl_getName\fR (cdl, imname) +void \fBcdl_getTitle\fR (cdl, imtitle) + +int \fBcdl_mapFrame\fR (cdl, frame) +int \fBcdl_markCoordsFile\fR (cdl, fname, type, size, color, label) +int \fBcdl_markPoint\fR (cdl, x, y, number, size, type, color) +int \fBcdl_markPointLabel\fR (cdl, x, y, label, size, type, color) +int \fBcdl_markLine\fR (cdl, xs, ys, xe, ye, color) +int \fBcdl_markBox\fR (cdl, lx, ly, ux, uy, fill, color) +int \fBcdl_markPolygon\fR (cdl, xarray, yarray, npts, fill, color) +int \fBcdl_markPolyline\fR (cdl, xarray, yarray, npts, color) +int \fBcdl_markCircle\fR (cdl, x, y, radius, fill, color) +int \fBcdl_markCircAnnuli\fR (cdl, x, y, radius, nannuli, sep, color) +int \fBcdl_markEllipse\fR (cdl, x, y, xrad, yrad, rotang, fill, color) +int \fBcdl_markEllipAnnuli\fR (cdl, x, y, xrad, yrad, ang, nannuli, sep, color) +int \fBcdl_markText\fR (cdl, x, y, str, size, angle, color) +int \fBcdl_setFont\fR (cdl, font) +int \fBcdl_setTextWidth\fR (cdl, width) +int \fBcdl_setLineWidth\fR (cdl, width) +int \fBcdl_setLineStyle\fR (cdl, style) +int \fBcdl_deleteMark\fR (cdl, x, y) +int \fBcdl_clearOverlay\fR (cdl) +int \fBcdl_redrawOverlay\fR (cdl) +.TE + +.bp +.NH +C Example Tasks +.LP + The examples shown here are for demonstration purposes only. They +are based on working example tasks in the CDL source \fIexamples\fR +subdirectory, see the programs there for the full program listing. + +.NH 2 +Display Example +.LP +.ps -2 +.vs -2 +.nf +\f(CW +#include <stdio.h> +#include <unistd.h> +#include "cdl.h" + +/* \fIDISPLAY -- Example task to display an image as a command-line task. + * This task is meant to show three ways the CDL can be used to display + * an image, see the code comments for a description of each method. + * + * Examples: + * To display a simple IRAF or FITS file: + * % ./display -frame 2 image.imh + * % ./display image.fits + * + * To display a FITS file as a raw image: + * % ./display -nx 512 -ny 512 -depth 16 -hskip 5760 -raw dpix.fits + * + * Usage: + * display [-depth N] [-fits] [-frame N] [-fbconfig N] [-hskip N] + * [-iraf] [-nozscale] [-nx N] [-ny N] [-raw] [-zscale] file\fP + */ + +#define NONE -1 +#define IRAF 0 +#define FITS 1 +#define RAW 2 + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname, title[128]; + int i, status = 0, frame = 1, fbconfig = 0, zscale = 1; + int format = NONE, nx = 0, ny = 0, depth = 8, hskip = 0; + float z1, z2; + int fb_w, fb_h, nf; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strcmp (argv[i], "-depth") == 0) depth = atoi (argv[++i]); + else if (strcmp (argv[i], "-fits") == 0) format = FITS; + else if (strcmp (argv[i], "-frame") == 0) frame = atoi (argv[++i]); + else if (strcmp (argv[i], "-fbconfig") == 0) fbconfig = atoi (argv[++i]); + else if (strcmp (argv[i], "-hskip") == 0) hskip = atoi (argv[++i]); + else if (strcmp (argv[i], "-iraf") == 0) format = IRAF; + else if (strcmp (argv[i], "-nozscale") == 0) zscale = 0; + else if (strcmp (argv[i], "-nx") == 0) nx = atoi (argv[++i]); + else if (strcmp (argv[i], "-ny") == 0) ny = atoi (argv[++i]); + else if (strcmp (argv[i], "-raw") == 0) format = RAW; + else if (strcmp (argv[i], "-zscale") == 0) zscale = 1; + } + } + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + fname = argv[argc-1]; + + /* \fIMETHOD 1: Displays the image using the high-level format display + * call. Display as an IRAF image if the option was set indicating + * this is the format, otherwise test the file to see if it is anyway.\fP + */ + if (format == IRAF || (format == NONE && \fBcdl_isIRAF\fP (fname))) { + status = \fBcdl_displayIRAF\fP (cdl, fname, 1, frame, FB_AUTO, zscale); + + /* \fIMETHOD 2: Uses the CDL procedure for getting image pixels from + * a known format, minimal work required to display an image. The + * point here is that you can use this method to process the image + * yourself prior to display, e.g. subsample the pixels, apply a user + * LUT, etc but still use the CDL to get the raw image and do the + * display.\fP + */ + } else if (format == FITS || (format == NONE && \fBcdl_isFITS\fP (fname))) { + + /* \fIGet the FITS image pixels, exit w/ an error status if something + * went wrong, the procedure will print what that was.\fP + */ + if (\fBcdl_readFITS\fP (fname, &pix, &nx, &ny, &depth, title)) { + \fBcdl_close\fP (cdl); /* \fIclose the package\fP */ + exit (1); /* \fIexit w/ error code\fP */ + } + + /* \fINow select a frame buffer large enough for the image. The + * fbconfig number is passed in the WCS packet, but the display + * call below will compute the correct WCS for the image and + * transmit that prior to display, all we're doing here is + * setting up the FB to be used.\fP + */ + if (fbconfig == 0) + \fBcdl_selectFB\fP (cdl, nx, ny, &fbconfig, &fb_w, &fb_h, &nf, 0); + + /* \fILastly, display the pixels to the requested frame, do any + * zscaling requested using the CDL procedure.\fP + */ + status = \fBcdl_displayPix\fP (cdl, pix, nx, ny, depth, frame, + fbconfig, zscale); + + /* \fIMETHOD 3: Displays an image of raw pixels. The client code is + * responsible for reading the image and calling all the procedures + * needed for image display, initialize the frame, zscaling pix, etc. + * While we assume a simple raster format in this program, the user + * code can read a compressed image format such as GIF, mosaic multiple + * images for display as a single image, or just about anything that + * produces a raster for display. The intent here is to show all the + * lowest level calls needed for displaying the image.\fP + */ + } else if (format == RAW) { + FILE *fd; + int lx, ly; + + if (nx == 0 || ny == 0) { + fprintf (stderr, "No size given for raw data.\\n"); + exit (1); + } + + /* \fIOpen the image file if we can.\fP */ + if (fd = fopen (fname, "r")) { + + /* \fISeek to the offset specified.\fP */ + lseek (fileno(fd), (off_t) hskip, SEEK_SET); + + /* \fIAllocate the pixel pointer and read the data.\fP */ + pix = (unsigned char *) malloc (nx * ny * (depth / 8)); + fread (pix, depth/8, nx * ny, fd); + + /* \fIIf we're zscaling and depth is more than 8-bits, do that.\fP */ + if (zscale && depth > 8) { + \fBcdl_computeZscale\fP (cdl, pix, nx, ny, depth, &z1, &z2); + \fBcdl_zscaleImage\fP (cdl, &pix, nx, ny, depth, z1, z2); + } + + /* \fINow select a frame buffer large enough for the image. + * We'll ask that this be reset but the change won't go to + * the server until we send in the WCS below.\fP + */ + \fBcdl_selectFB\fP (cdl, nx, ny, &fbconfig, &fb_w, &fb_h, &nf, 1); + + /* \fICompute the image placement so it's centered in the frame, + * but note the cdl_writeSubRaster() routine can place an + * arbitrary raster anywhere in the frame buffer.\fP + lx = (fb_w / 2) - (nx / 2); + ly = fb_h - ((fb_h / 2) + (ny / 2)); + + /* \fISet the mapping we'll send with the WCS which must be + * called before the cdl_setWCS() call since the data is sent + * with the WCS and not as a separate call.\fP + * + * \fRFirst we must compose a node!path prefix for the image.\fP */ + */ + gethostname (node, 512); + (void) getcwd (path, 512); + if (*fname == '/') + (void) sprintf (path_prefix, "%s!%s", node, fname); + else + (void) sprintf (path_prefix, "%s!%s/%s", node, path, fname); + + \fBcdl_setMapping\fP (cdl, "image", 0., 0., nx, ny, lx, ly, nx, ny, + path_prefix); + + /* \fIFor the WCS we assume a simple linear transform where the + * image is Y-flipped, the (x,y) translation is computed so + * it is correct for an frame buffer >= than the image size.\fP + */ + \fBcdl_setWCS\fP (cdl, fname, "", 1., 0., 0., -1., + (float) (nx / 2) - (fb_w / 2) + 1, /* \fIX trans.\fP */ + (float) (fb_h / 2) + (ny / 2), /* \fIY trans.\fP */ + z1, z2, CDL_LINEAR); /* \fIZ transform\fP */ + + /* \fIFinally, display the pixels.\fP */ + if (\fBcdl_writeSubRaster\fR (cdl, lx, ly, nx, ny, pix)) + status = 1; + } else + status = 1; + } else { + if (access (fname, F_OK) == 0) + fprintf (stderr, "'%s': unknown image format.\\n", fname); + else + fprintf (stderr, "'%s': image does not exist.\\n", fname); + status = 1; + } + + /* \fINow just free the pixel pointer to clean up.\fP */ + if (pix) + free ((unsigned char *) pix); + \fBcdl_close\fP (cdl); /* \fIclose the package\fP */ + exit (status); +} +\fR +.fi +.vs +2 +.ps +2 +.bp +.NH 2 +Interactive Graphics Overlay Example +.LP +.ps -2 +.vs -2 +.nf +\f(CW +#include <stdio.h> +#include <unistd.h> +#include <math.h> +#include "cdl.h" + +/* \fI + * TVMARK -- Example task for displaying an marking images. This program + * can be used to either display an image and overlay points defined in + * a coordinate file, map an existing display frame for marking, or option- + * ally enter a cursor command loop after either of these providing other + * marking capability. All options support minimum match. + * + * Examples: + * % tvmark dpix.fits + * % tvmark -coords coords -color 205 dpix.fits + * % tvmark -frame 2 + * % tvmark -coords coords -interactive dpix.fits + * + * Usage: + * tvmark [-frame N] [-fbconfig N] [-coords <file>] [-size N] [-color N] + * [-nolabel] [-fill] [-interactive] [image]\fP + */ + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname = NULL, *cfname = NULL; + int i, status = 0, fill = 0, frame = 1, fb = FB_AUTO, zscale = 1; + int color = 201, label = 1, size = 9, interactive = 0; + float z1, z2; + int fb_w, fb_h, nf; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strncmp(argv[i], "-color",4) == 0) color = atoi (argv[++i]); + else if (strncmp(argv[i], "-coords",4) == 0) cfname = argv[++i]; + else if (strncmp(argv[i], "-fbconfig",3) == 0) fb = atoi (argv[++i]); + else if (strncmp(argv[i], "-fill",4) == 0) fill = 1; + else if (strncmp(argv[i], "-frame",3) == 0) frame = atoi (argv[++i]); + else if (strncmp(argv[i], "-interactive",4) == 0) interactive = 1; + else if (strncmp(argv[i], "-nolabel",4) == 0) label = 0; + else if (strncmp(argv[i], "-nozscale",4) == 0) zscale = 0; + else if (strncmp(argv[i], "-size",2) == 0) size = atoi (argv[++i]); + else + fname = argv[i]; + } + } + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + /* \fIIf an image was specified display it first, otherwise assume the + * image has already been loaded in the frame and mark that.\fP + */ + if (fname) { + if (\fBcdl_isIRAF\fP (fname)) + status = \fBcdl_displayIRAF\fP (cdl, fname, 1, frame, fb, zscale); + else if (\fBcdl_isFITS\fP (fname)) + status = \fBcdl_displayFITS\fP (cdl, fname, frame, fb, zscale); + else { + if (access (cfname, F_OK) == 0) + fprintf (stderr, "'%s': unknown image format.\\n", fname); + else + fprintf (stderr, "'%s': image doesn't exist.\\n", fname); + status = 1; + } + if (status) goto err_; + } else { + + /* \fIIf we've requested a special frame buffer, set it now.\fP */ + if (fb > 0) + \fBcdl_setFBConfig\fP (cdl, fb); + + /* \fIMap the current display frame for use as an image.\fP */ + \fBcdl_mapFrame\fP (cdl, frame); + } + + /* \fIIf a coordinate file was specified read the file and mark those + * coords with points.\fP + */ + if (cfname) + \fBcdl_markCoordsFile\fP (cdl, cfname, M_STAR, size, color, label); + + /* \fILastly, start up an interactive cursor loop if needed.\fP */ + if (interactive) + tvmInteractive (cdl, label, fill, color, size); + + /* \fIClose the package and clean up.\fP */ +err_: \fBcdl_close\fP (cdl); + exit (status); +} + +/* \fITVMINTERACTIVE -- Process commands interactively.\fP */ + +tvmInteractive (cdl, label, fill, color, size) +CDLPtr cdl; +int label, fill, color, size; +{ + float angle = 0.0, rx, ry, txsize = 1.; + int nx, ny, i, x, y, x2, y2, wcs; + int number=1, radius=11, xrad=11, yrad=6, nannuli=3, sep=5; + char key, cmd[SZ_NAME], str[SZ_NAME]; + unsigned char *pix; + + /* \fIProcess commands until a 'q' keystroke is hit.\fP */ + while (\fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &wcs, &key) != 'q') { + x = (int) (rx + 0.5); /* \fIconvert to int pixels\fP */ + y = (int) (ry + 0.5); + + switch (key) { + case ':': /* \fIprocess a colon command\fP */ + putchar (':'); + gets (str); + for (i=0; str[i] != ' ' && str[i]; i++) + cmd[i] = str[i]; + cmd[i++] = '\0'; + + if (strcmp (cmd, "angle") == 0) angle = atof (&str[i]); + else if (strcmp (cmd, "color") == 0) color = atoi (&str[i]); + else if (strcmp (cmd, "fill") == 0) fill = atoi (&str[i]); + else if (strcmp (cmd, "number") == 0) number = atoi (&str[i]); + else if (strcmp (cmd, "nannuli") == 0) nannuli = atoi (&str[i]); + else if (strcmp (cmd, "label") == 0) label = atoi (&str[i]); + else if (strcmp (cmd, "sep") == 0) sep = atoi (&str[i]); + else if (strcmp (cmd, "size") == 0) size = atoi (&str[i]); + else if (strcmp (cmd, "txsize") == 0) txsize = atof (&str[i]); + else if (strcmp (cmd, "xrad") == 0) xrad = atoi (&str[i]); + else if (strcmp (cmd, "yrad") == 0) yrad = atoi (&str[i]); + else if (strcmp (cmd, "print") == 0) { + \fBcdl_readFrameBuffer\fP (cdl, &pix, &nx, &ny); + \fBcdl_printPix\fP (cdl, NULL, pix, nx, ny, 1); + } else if (strcmp (cmd, "snap") == 0) { + \fBcdl_readFrameBuffer\fP (cdl, &pix, &nx, &ny); + \fBcdl_printPixToFile\fP (cdl, &str[i], pix, nx, ny, 1); + } else if (strcmp (cmd, "status") == 0) { + printf ("angle = %-5.3g\tcolor = %d\t", angle, color); + printf ("fill = %-5d\tnumber = %d\\n", fill, number); + printf ("nannuli = %-5d\tsep = %d\t", nannuli, sep); + printf ("size = %-5d\ttxsize = %g\\n", size, txsize); + printf ("xrad = %-5d\tyrad = %d\t", xrad, yrad); + printf ("label = %-5d\\n", label); + } + break; + + case '?': + /* ......\fIhelp procedures\fP */ + break; + + case 'p': /* \fIplus mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_PLUS, color); + break; + case 'x': /* \fIcross mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_CROSS, color); + break; + case '.': /* \fIpoint mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_POINT, color); + break; + case '*': /* \fIstar mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_STAR, color); + break; + case '_': /* \fIhoriz dash mark\fP*/ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_HBLINE, color); + break; + case '|': /* \fIvert dash mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_VBLINE, color); + break; + case 'o': /* \fIcircle mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_CIRCLE|fill, color); + break; + case 's': /* \fIsquare mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_BOX|fill, color); + break; + case 'v': /* \fIdiamond mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_DIAMOND|fill, color); + break; + + case 'b': /* \fIBox\fP */ + printf ("Hit another key to define the box...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &wcs, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + \fBcdl_markBox\fP (cdl, x, y, x2, y2, fill, color); + break; + case 'c': /* \fICircle\fP */ + printf ("Hit another key to set radius ...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &wcs, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + radius = (int) sqrt ((double) ((x2-x)*(x2-x) + (y2-y)*(y2-y))); + \fBcdl_markCircle\fP (cdl, x, y, radius, fill, color); + break; + case 'd': /* \fIDelete marker\fP */ + \fBcdl_deleteMark\fP (cdl, x, y); + break; + case 'e': /* \fIEllipse\fP */ + \fBcdl_markEllipse\fP (cdl, x, y, xrad, yrad, angle, fill, color); + break; + case 'l': /* \fILine\fP */ + printf ("Hit another key to set line endpoint...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &wcs, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + \fBcdl_markLine\fP (cdl, x, y, x2, y2, color); + break; + case 't': /* \fIText string\fP */ + printf ("Text string: "); + gets (str); + \fBcdl_markText\fP (cdl, x, y, str, txsize, angle, color); + break; + case 'C': /* \fICircular annuli\fP*/ + \fBcdl_markCircAnnuli\fP (cdl, x, y, radius, nannuli, sep, color); + break; + case 'D': /* \fIDelete all markers\fP*/ + \fBcdl_clearOverlay\fP (cdl); + break; + case 'E': /* \fIElliptical annuli\fP*/ + \fBcdl_markEllipAnnuli\fP (cdl, x, y, xrad, yrad, angle, nannuli, sep, color); + break; + default: + break; + } + } +} +\fR +.fi +.vs +2 +.ps +2 +.bp +.NH 2 +Image Mosaic Example +.LP +.in 0.5i +.ps -2 +.vs -2 +.nf +#include <stdio.h> +#include <unistd.h> +#\fBinclude "cdl.h"\fP + +/* \fIMOSAIC -- Example task to mosaic several images on a display. Demonstrates + * usage of low-level routines for complex display operations.\fP + */ + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname = NULL, title[128]; + int i, j, k, status=0, label=0, frame=1, fb=FB_AUTO, zscale=1; + int sample=1, pad=0, col=204, imx, imy, bitpix, nimages, nim; + int ii, xinit, rowx, rowy, nnx, nny, fb_w, fb_h, nf, mx, my, nx, ny; + float z1, z2; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strncmp (argv[i], "-fbconfig",3) == 0) fb=atoi(argv[++i]); + else if (strncmp (argv[i],"-frame",3) == 0) frame=atoi(argv[++i]); + else if (strncmp (argv[i],"-color",3) == 0) col=atoi(argv[++i]); + else if (strncmp (argv[i],"-label",4) == 0) label=1; + else if (strncmp (argv[i],"-nozscale",4) == 0) zscale=0; + else if (strncmp (argv[i],"-nx",3) == 0) nx=atoi(argv[++i]); + else if (strncmp (argv[i],"-ny",3) == 0) ny=atoi(argv[++i]); + else if (strncmp (argv[i],"-pad",4) == 0) pad=atoi(argv[++i]); + else if (strncmp (argv[i],"-sample",4) == 0) sample=atoi(argv[++i]); + else + break; + } + } + nimages = argc - i; + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + /* \fIClear the frame to begin.\fP */ + (void) \fBcdl_clearFrame\fP (cdl); + + /* \fILoop over each of the images in the list.\fP */ + nim = rowx = rowy = nnx = nny = 0; + for (k=0; k < ny && nim < nimages; k++) { + rowy += nny + pad; + for (rowx = xinit, j=0; j < nx && nim < nimages; j++) { + + /* \fIGet the image name for display.\fP */ + fname = argv[i++]; + + /* \fIFigure out what kind of image it is and get the pixels.\fP */ + if (cdl_isIRAF (fname)) + status = \fBcdl_readIRAF\fP (fname, 1, &pix, &imx, &imy, &bitpix, title); + else if (cdl_isFITS (fname)) + status = \fBcdl_readFITS\fP (fname, &pix, &imx, &imy, &bitpix, title); + else { + fprintf(stderr, "'%s': unknown or nonexistant image.\\n", fname); + status = 1; + } + if (status) goto err_; + + /* \fICompute subsampled image size.\fP */ + if (sample > 1) + nnx = imx / sample, nny = imy / sample; + else + nnx = imx, nny = imy; + + /* \fIUnless we asked for a specific FB size find one large enough + * to handle the mosaic. We don't check to be sure what's + * returned is really large enough.\fP + */ + if (nim == 0 && fb == FB_AUTO) + \fBcdl_selectFB\fP (cdl, nx*nnx+(pad*(nx-1)), ny*nny+(pad*(ny-1)), &fb, &fb_w, &fb_h, &nf, 1); + else { + \fBcdl_setFBConfig\fP (cdl, fb); + \fBcdl_lookupFBSize\fP (cdl, fb, &fb_w, &fb_h, &nf); + } + + /* \fIDefine a WCS for the frame.\fP */ + \fBcdl_setWCS\fP (cdl, "image mosaic", title, 1., 0., 0., -1., 0., (float) ny*imy+(pad*(ny+1)), 1., 255., 1); + + /* \fIThe first time through figure out the placement so the + * entire mosaic is centered in the frame.\fP + */ + if (nim == 0) { + mx = (nx * nnx) + pad * (nx-1); + my = (ny * nny) + pad * (ny-1); + rowy = (fb_h - my) / 2; + xinit = rowx = (fb_w - mx) / 2; + } + + /* \fICompute the zscaled imaged pixels.\fP */ + if (zscale) { + \fBcdl_computeZscale\fP (cdl, pix, imx ,imy, bitpix, &z1, &z2); + \fBcdl_zscaleImage\fP (cdl, &pix, imx ,imy, bitpix, z1, z2); + } + + /* \fISubsample the image if requested.\fP */ + if (sample > 1) { + int l, m, n=0; + for (l=0; l < imy; l+=sample) + for (m=0; m < imx; m+=sample) + pix[n++] = pix[(l*imx)+m]; + } + + /* \fIWrite the image to the frame buffer.\fP */ + if (\fBcdl_writeSubRaster\fP (cdl, rowx, rowy, nnx, nny, pix)) goto err_; + + /* \fIDraw the image name as a label.\fP */ + if (label) \fBcdl_markText\fP (cdl, rowx+10, rowy+10, fname, 1., 0., col); + + nim++; rowx += nnx + pad; + } + } + + /* \fIClose the package and clean up.\fP */ +err_: \fBcdl_close\fP (cdl); + exit (status); +} +.fi +.vs +2 +.ps +2 +.in -0.5i + +.bp +.NH +Fortran Interface Summary +.LP +.in 0.5i +include "\fBcdlftn.inc\fR" +.in -0.5i + +.TS +center; +r l. +\fBcfopen\fR (imtdev, ier) +\fBcfdisplayPix\fR (pix, nx, ny, bitpix, frame, fbconfig, zscale, ier) +\fBcfreadCursor\fR (sample, x, y, key, ier) +\fBcfsetCursor\fR (x, y, wcs, ier) +\fBcfsetWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcfgetWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcfsetFrame\fR (frame) +\fBcfclearFrame\fR (ier) +\fBcfclose\fR () + +\fBcfsetMapping\fR (region, sx,sy,snx,sny, dx,dy,dnx,dny, ref, ier) +\fBcfgetMapping\fR (region, sx,sy,snx,sny, dx,dy,dnx,dny, ref, ier) +\fBcfqueryMap\fR (wcs, region, sx,sy,snx,sny, dx,dy,dnx,dny, objref, ier) + +\fBcfdisplayIRAF\fR (fname, band, frame, fbconfig, zscale, ier) +\fBcfisIRAF\fR (fname, isiraf) +\fBcfreadIRAF\fR (fname, band, pix, nx, ny, bitpix, title, ier) + +\fBcfdisplayFITS\fR (fname, frame, fbconfig, zscale, ier) +\fBcfisFITS\fR (fname, isfits) +\fBcfreadFITS\fR (fname, pix, nx, ny, bitpix, title, ier) + +\fBcfcomputeZscale\fR (pix, nx, ny, bitpix, z1, z2) +\fBcfzscaleImage\fR (pix, nx, ny, bitpix, z1, z2) + +\fBcfprintPix\fR (cmd, pix, nx, ny, annotate, ier) +\fBcfprintPixToFile\fR (fname, pix, nx, ny, annotate, ier) + +\fBcfreadImage\fR (pix, nx, ny, ier) +\fBcfreadFrameBuffer\fR (pix, nx, ny, ier) +\fBcfreadSubRaster\fR (lx, ly, nx, ny, pix, ier) +\fBcfwriteSubRaster\fR (lx, ly, nx, ny, pix, ier) + +\fBcfselectFB\fR (nx, ny, fb, w, h, nf, reset) +\fBcfsetFBConfig\fR (configno) +\fBcfgetFBConfig\fR (configno, w, h, nf) +\fBcflookupFBSize\fR (configno, w, h, nf) + +\fBcfsetZTrans\fR (ztrans) +\fBcfsetZScale\fR (z1, z2) +\fBcfsetSample\fR (nsample) +\fBcfsetSampleLines\fR (nlines) +\fBcfsetContrast\fR (contrast) +\fBcfsetName\fR (imname) +\fBcfsetTitle\fR (imtitle) + +\fBcfgetFrame\fR (frame) +\fBcfgetZTrans\fR (ztrans) +\fBcfgetZScale\fR (z1, z2) +\fBcfgetSample\fR (nsample) +\fBcfgetSampleLines\fR (nlines) +\fBcfgetContrast\fR (contrast) +\fBcfgetName\fR (imname) +\fBcfgetTitle\fR (imtitle) + +\fBcfmapFrame\fR (frame, ier) +\fBcfmarkPoint\fR (x, y, number, size, type, color, ier) +\fBcfmarkcoordsfile\fR (fname, type, size, color, label, ier) +\fBcfmarkPointLabel\fR (x, y, label, size, type, color, ier) +\fBcfmarkLine\fR (xs, ys, xe, ye, color, ier) +\fBcfmarkBox\fR (lx, ly, ux, uy, fill, color, ier) +\fBcfmarkPolygon\fR (xarray, yarray, npts, fill, color, ier) +\fBcfmarkPolyline\fR (xarray, yarray, npts, color, ier) +\fBcfmarkCircle\fR (x, y, radius, fill, color, ier) +\fBcfmarkCircAnnuli\fR (x, y, radius, nannuli, sep, color, ier) +\fBcfmarkEllipse\fR (x, y, xrad, yrad, rotang, fill, color, ier) +\fBcfmarkEllipAnnuli\fR (x, y, xrad, yrad, ang, nannuli, sep, color, ier) +\fBcfmarkText\fR (x, y, str, size, angle, color, ier) +\fBcfsetfont\fR (font) +\fBcfsettextwidth\fR (width) +\fBcfsetlwidth\fR (width) +\fBcfsetlstyle\fR (style) +\fBcfdeleteMark\fR (x, y, ier) +\fBcfclearOverlay\fR (ier) +\fBcfredrawOverlay\fR (ier) +.TE +.bp +.NH +Fortran Example Tasks +.LP + The examples shown here are for demonstration purposes only. They +are based on working example tasks in the CDL source \fIexamples\fR +subdirectory, see the programs there for the full program listing. + +.NH 2 +Display Example +.in 0.5i +.ps -2 +.vs -2 +.nf +\f(CW +C ======================================================================== +C FDISPLAY -- Example fortran program showing the use of the Client +C Display Library (CDL) Fortran interface for displaying images. +C ======================================================================== + + PROGRAM FDISPLAY + character*64 imname + +C \fIInitialize the CDL package\fP + call \fBcfopen\fP (0, ier) + if (ier .gt. 0) then + write (*,*) 'open: Error return from CDL' + goto 999 + endif + + write (*, "('Image Name: ', $)") + read (5, *) imname + write (*, "('Frame Number: ', $)") + read (5, *) iframe + write (*, "('Frame buffer configuration number: ', $)") + read (5, *) ifb + +C \fIIf we've got a FITS format image, go ahead and display it.\fP + call \fBcfisFITS\fP (imname, isfits) + if (isfits .gt. 0) then + call \fBcfdisplayFITS\fP (imname, iframe, ifb, 1, ier) + else +C \fIWe've got an IRAF format image, go ahead and display it.\fP + call \fBcfisIRAF\fP (imname, isiraf) + if (isiraf .gt. 0) then + call \fBcfdisplayIRAF\fP (imname, 1, iframe, ifb, 1, ier) + else +C \fIUnrecognized image, punt and exit.\fP + write (*,*) 'Unrecognized image format' + endif + endif + +C \fIClean up and exit.\fP +999 continue + call \fBcfclose\fP (ier) + end +\fR +.fi +.ps +2 +.vs +2 +.in -0.5i +.bp +.NH 2 +Interactive Graphics Overlay Example +.in 0.5i +.ps -2 +.vs -2 +.nf +\f(CW +C ========================================================================== +C FTVMARK -- Example fortran program showing the use of the Client +C Display Library (CDL) Fortran interface for doing graphics overlay. No +C checking of the error flag is done here for space considerations. +C ========================================================================== + + PROGRAM FTVMARK + include "\fBcdlftn.inc\fP" + character*64 imname + +C \fIInitialize the CDL package\fP + call \fBcfopen\fP (0, ier) + + write (*, "('Image Name: ', $)") + read (5, *) imname + write (*, "('Frame Number: ', $)") + read (5, *) iframe + write (*, "('Frame buffer configuration number: ', $)") + read (5, *) ifb + +C \fIIf we've got a FITS format image, go ahead and display it.\fP + call \fBcfisFITS\fP (imname, isfits) + if (isfits .gt. 0) then + call \fBcfdisplayFITS\fP (imname, iframe, ifb, 1, ier) + else +C \fIWe've got an IRAF format image, go ahead and display it.\fP + call \fBcfisIRAF\fP (imname, isiraf) + if (isiraf .gt. 0) then + call \fBcfdisplayIRAF\fP (imname, 1, iframe, ifb, 1, ier) + else +C \fINo valid image given, so map the current display for marking.\fP + call \fBcfmapFrame\fP (iframe) + endif + endif + +C \fINow that we've got an image displayed or mapped, enter a cursor loop to mark the image. \fP + call markInteractive () + +C \fIClean up and exit\fP +999 continue + call \fBcfclose\fP (ier) + end + +C \fIMARKINTERACTIVE -- Subroutine for processing the cursor loop.\fP + subroutine markInteractive () + include "\fBcdlftn.inc\fP" + real angle, rx, ry, txsize + integer nx, ny, x, y, x2, y2, fill, size, color + integer number, radius, xrad, yrad, nannuli, sep + character key + character*64 cmd, str + +C \fIAllocate a 1024x1024 array for pixels. \fP + character pix(1048576) + +C \fI....Initialize the local parameters to use\fP + +C \fIRead a cursor keystroke telling us what to do.\fP +10 call \fBcfreadCursor\fP (0, rx, ry, key, ier) + +C \fIRound the real cursor position to integer pixel positions.\fP + x = nint (rx + 0.5) + y = nint (ry + 0.5) + +C \fICheck the keystroke and take the appropriate action.\fP +C \fIColon Commands\fP + if (key .eq. ':') then +C \fIRead a three character command and value field and process the colon command\fP + read (*,'(A3, i4)') cmd, ival + if (cmd(1:3) .eq. 'ang') then + angle = real (ival) + else if (cmd(1:3) .eq. 'col') then + color = ival + else if (cmd(1:3) .eq. 'fil') then + fill = ival +\fI : + ....and so on to set local variables + :\fR + else if (cmd(1:3) .eq. 'pri') then +C \fIPrint contents of the current frame buffer\fP + call \fBcfreadFrameBuffer\fP (pix, nx, ny, ier) + call \fBcfprintPix\fP ("lpr", pix, nx, ny, 1, ier) + else if (cmd(1:3) .eq. 'sta') then + \fI....print out the status (value) of variables\fP + endif + +C \fIPoint Markers\fP + else if (key .eq. 'p') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_PLUS, color, ier) + else if (key .eq. 'x') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_CROSS, color, ier) + else if (key .eq. '_') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_HBLINE, color, ier) + else if (key .eq. 'o') then +C \fIExample of a filled point marker \fP + call \fBcfmarkPoint\fP (x, y, 1, size, or(M_CIRCLE,fill), color, ier) +\fI : + ....and so on to set other types of point markers\fR + +C \fIOther Markers\fP + else if (key .eq. 'b') then + print '("Hit another key to define the box ....")' + call \fBcfreadCursor\fP (0, rx, ry, key, ier) + x2 = nint (rx + 0.5) + y2 = nint (ry + 0.5) + call \fBcfmarkBox\fP (x, y, x2, y2, fill, color, ier) + else if (key .eq. 'd') then + call \fBcfdeleteMark\fP (x, y, ier) + else if (key .eq. 'e') then + call \fBcfmarkEllipse\fP (x, y, xrad, yrad, angle, fill, color, ier) + else if (key .eq. 't') then + print '("Text string: ", $)' + read (*,'(A64)') str + call \fBcfmarkText\fP (x, y, str, txsize, angle, color, ier) +\fI : + ....and so on to set other types of markers\fR + +C \fIQuit\fP + else if (key .eq. 'q') then + goto 998 + endif + +C \fILoop back until we want to quit\fP + goto 10 +998 continue + end +\fR +.fi +.ps +2 +.vs +2 +.in -0.5i +.bp +.NH +SPP Interface Summary +.LP +.in 0.5i +#include "\fBcdlspp.h\fR" +.in -0.5i + +.TS +center; +r l. +\fBcdl_open\fR (imtdev, ier) +\fBcdl_displayPix\fR (pix, nx, ny, bitpix, frame, fbconfig, zscale, ier) +\fBcdl_readCursor\fR (sample, x, y, wcs, key, ier) +\fBcdl_setCursor\fR (x, y, wcs, ier) +\fBcdl_setWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcdl_getWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcdl_setFrame\fR (frame) +\fBcdl_clearFrame\fR (ier) +\fBcdl_close\fR () + +\fBcdl_setMapping\fR (region, sx,sy,snx,sny, dx,dy,dnx,dny, ref, ier) +\fBcdl_getMapping\fR (region, sx,sy,snx,sny, dx,dy,dnx,dny, ref, ier) +\fBcdl_queryMap\fR (wcs, region, sx,sy,snx,sny, dx,dy,dnx,dny, objref, ier) + +\fBcdl_displayIRAF\fR (fname, band, frame, fbconfig, zscale, ier) +\fBcdl_isIRAF\fR (fname, isiraf) +\fBcdl_readIRAF\fR (fname, band, pix, nx, ny, bitpix, title, ier) + +\fBcdl_displayFITS\fR (fname, frame, fbconfig, zscale, ier) +\fBcdl_isFITS\fR (fname, isfits) +\fBcdl_readFITS\fR (fname, pix, nx, ny, bitpix, title, ier) + +\fBcdl_computeZscale\fR (pix, nx, ny, bitpix, z1, z2) +\fBcdl_zscaleImage\fR (pix, nx, ny, bitpix, z1, z2) + +\fBcdl_printPix\fR (cmd, pix, nx, ny, annotate, ier) +\fBcdl_printPixToFile\fR (fname, pix, nx, ny, annotate, ier) + +\fBcdl_readImage\fR (pix, nx, ny, ier) +\fBcdl_readFrameBuffer\fR (pix, nx, ny, ier) +\fBcdl_readSubRaster\fR (lx, ly, nx, ny, pix, ier) +\fBcdl_writeSubRaster\fR (lx, ly, nx, ny, pix, ier) + +\fBcdl_selectFB\fR (nx, ny, fb, w, h, nf, reset) +\fBcdl_setFBConfig\fR (configno) +\fBcdl_getFBConfig\fR (configno, w, h, nf) +\fBcdl_lookupFBSize\fR (configno, w, h, nf) + +\fBcdl_setZTrans\fR (ztrans) +\fBcdl_setZScale\fR (z1, z2) +\fBcdl_setSample\fR (nsample) +\fBcdl_setSampleLines\fR (nlines) +\fBcdl_setContrast\fR (contrast) +\fBcdl_setName\fR (imname) +\fBcdl_setTitle\fR (imtitle) + +\fBcdl_getFrame\fR (frame) +\fBcdl_getZTrans\fR (ztrans) +\fBcdl_getZScale\fR (z1, z2) +\fBcdl_getSample\fR (nsample) +\fBcdl_getSampleLines\fR (nlines) +\fBcdl_getContrast\fR (contrast) +\fBcdl_getName\fR (imname) +\fBcdl_getTitle\fR (imtitle) + +\fBcdl_mapFrame\fR (frame, ier) +\fBcdl_markCoordsFile\fR (fname, type, size, color, label, ier) +\fBcdl_markPoint\fR (x, y, number, size, type, color, ier) +\fBcdl_markPointLabel\fR (x, y, label, size, type, color, ier) +\fBcdl_markLine\fR (xs, ys, xe, ye, color, ier) +\fBcdl_markBox\fR (lx, ly, ux, uy, fill, color, ier) +\fBcdl_markPolygon\fR (xarray, yarray, npts, fill, color, ier) +\fBcdl_markPolyline\fR (xarray, yarray, npts, color, ier) +\fBcdl_markCircle\fR (x, y, radius, fill, color, ier) +\fBcdl_markCircAnnuli\fR (x, y, radius, nannuli, sep, color, ier) +\fBcdl_markEllipse\fR (x, y, xrad, yrad, rotang, fill, color, ier) +\fBcdl_markEllipAnnuli\fR (x, y, xrad, yrad, ang, nannuli, sep, color, ier) +\fBcdl_markText\fR (x, y, str, size, angle, color, ier) +\fBcdl_setFont\fR (font) +\fBcdl_setTextWidth\fR (width) +\fBcdl_setLineWidth\fR (width) +\fBcdl_setLineStyle\fR (style) +\fBcdl_deleteMark\fR (x, y, ier) +\fBcdl_clearOverlay\fR (ier) +\fBcdl_redrawOverlay\fR (ier) +\fBcdl_setDebug\fR (level) +.TE diff --git a/vendor/x11iraf/cdl/doc/cdlref.ms-V1.0 b/vendor/x11iraf/cdl/doc/cdlref.ms-V1.0 new file mode 100644 index 00000000..52f4fafa --- /dev/null +++ b/vendor/x11iraf/cdl/doc/cdlref.ms-V1.0 @@ -0,0 +1,2297 @@ +.RP +.de us +\\$1\l'|0\(ul' +.. +.TL +A Reference Guide for the IRAF Client Display Library (CDL) +.AU +Michael Fitzpatrick +.AI +NOAO/IRAF Group +.sp 0.5 +February 1997 +.sp 0.5 +\fIRevised September 1997\fR + +.AB +The Client Display Library (CDL) is a host interface for C or Fortran +programs allowing them to display images or overlay graphics to display +servers such as \fIXImtool\fR or \fISAOimage / SAOtng\fR. High-level +procedures allow IRAF or FITS images to be displayed simply, other +routines permit access to all other server functions (e.g. cursor and image +readback, frame selection, etc). The library also features a number of +functions for doing image overlay graphics; supported graphics primitives +include numerous point shapes, lines, circles, ellipses, polygons, annular +shapes, and text. +.AE + +.pn 1 +.bp +.ce +.ps +3 +\fBContents\fR +.ps -3 +.sp 2 +1.\h'|0.25i'\fBIntroduction\fP\l'|5.6i.'\0\01 +.sp 0.5 +2.\h'|0.25i'\fBGetting Started\fP\l'|5.6i.'\0\01 +.sp 0.5 +3.\h'|0.25i'\fBServer Connections\fP\l'|5.6i.'\0\02 +.br +\h'|0.25i'3.1.\h'|0.75i'Domain Sockets\l'|5.6i.'\0\02 +.br +\h'|0.25i'3.2.\h'|0.75i'Named FIFO Pipes\l'|5.6i.'\0\03 +.br +\h'|0.25i'3.3.\h'|0.75i'Inet Sockets\l'|5.6i.'\0\03 +.br +\h'|0.25i'3.4.\h'|0.75i'User-Defined Connections\l'|5.6i.'\0\03 +.sp 0.5 +4.\h'|0.25i'\fBImage Display\fP\l'|5.6i.'\0\03 +.br +\h'|0.25i'4.1.\h'|0.75i'Overview of the Display Process\l'|5.6i.'\0\03 +.br +\h'|0.25i'4.2.\h'|0.75i'Displaying IRAF Images\l'|5.6i.'\0\04 +.br +\h'|0.25i'4.3.\h'|0.75i'Displaying FITS Images\l'|5.6i.'\0\04 +.br +\h'|0.25i'4.4.\h'|0.75i'Displaying Raw Pixels\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.5.\h'|0.75i'Frame Selection\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.6.\h'|0.75i'Clearing the Display\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.7.\h'|0.75i'Frame Buffer Selection\l'|5.6i.'\0\05 +.br +\h'|0.5i'4.7.1.\h'|0.9i'Automatic Selection\l'|5.6i.'\0\06 +.br +\h'|0.5i'4.7.2.\h'|0.9i'The Frame Buffer Configuration File\l'|5.6i.'\0\06 +.br +\h'|0.25i'4.8.\h'|0.75i'Image WCS Description\l'|5.6i.'\0\06 +.br +\h'|0.25i'4.9.\h'|0.75i'Image Colormaps\l'|5.6i.'\0\07 +.br +\h'|0.5i'5.2.1.\h'|0.9i'Imtool Color Model\l'|5.6i.'\0\07 +.br +\h'|0.25i'4.10.\h'|0.75i'ZScale Intensity Mapping\l'|5.6i.'\0\08 +.br +\h'|0.25i'4.11.\h'|0.75i'Image Hardcopy\l'|5.6i.'\0\09 +.br +\h'|0.25i'4.12.\h'|0.75i'Image Cursor\l'|5.6i.'\0\09 +.br +\h'|0.5i'4.13.1.\h'|0.9i'Cursor Sampling\l'|5.6i.'\0\09 +.br +\h'|0.25i'4.14.\h'|0.75i'Image Readout\l'|5.6i.'\0\09 +.br +\h'|0.25i'4.15.\h'|0.75i'Subraster I/O\l'|5.6i.'\0\09 +.sp 0.5 +5.\h'|0.25i'\fBGraphics Overlay\fP\l'|5.6i.'\010 +.br +\h'|0.25i'5.1.\h'|0.75i'Marker Coordinates\l'|5.6i.'\010 +.br +\h'|0.5i'5.1.1.\h'|0.9i'Mapping a Previously Displayed Image\l'|5.6i.'\010 +.br +\h'|0.25i'5.2.\h'|0.75i'Marker Colors\l'|5.6i.'\010 +.br +\h'|0.25i'5.3.\h'|0.75i'Marker Types\l'|5.6i.'\010 +.br +\h'|0.5i'5.3.1.\h'|0.9i'Point\l'|5.6i.'\011 +.br +\h'|0.5i'5.3.2.\h'|0.9i'Line\l'|5.6i.'\011 +.br +\h'|0.5i'5.3.3.\h'|0.9i'Box\l'|5.6i.'\011 +.br +\h'|0.5i'5.3.4.\h'|0.9i'Circle\l'|5.6i.'\011 +.br +\h'|0.5i'5.3.5.\h'|0.9i'Polyline\l'|5.6i.'\012 +.br +\h'|0.5i'5.3.6.\h'|0.9i'Polygon\l'|5.6i.'\012 +.br +\h'|0.5i'5.3.7.\h'|0.9i'Ellipse\l'|5.6i.'\012 +.br +\h'|0.5i'5.3.8.\h'|0.9i'Circular Annuli\l'|5.6i.'\012 +.br +\h'|0.5i'5.3.9.\h'|0.9i'Elliptical Annuli\l'|5.6i.'\012 +.br +\h'|0.5i'5.3.10.\h'|0.9i'Text\l'|5.6i.'\012 +.br +\h'|0.5i'5.4.\h'|0.9i'Text Fonts\l'|5.6i.'\013 +.br +\h'|0.5i'5.5.1.\h'|0.9i'In-line Font Changes\l'|5.6i.'\013 +.br +\h'|0.25i'5.5.\h'|0.75i'Deleting Markers\l'|5.6i.'\013 +.br +\h'|0.5i'5.5.1.\h'|0.9i'Individual Markers\l'|5.6i.'\013 +.br +\h'|0.5i'5.5.2.\h'|0.9i'The Entire Overlay\l'|5.6i.'\014 +.br +\h'|0.25i'5.6.\h'|0.75i'Redrawing the Overlay\l'|5.6i.'\014 +.sp 0.5 +6.\h'|0.25i'\fBFortran Language Binding Notes\fP\l'|5.6i.'\014 +.sp 0.5 +7.\h'|0.25i'\fBSPP Language Binding Notes\fP\l'|5.6i.'\014 +.sp 0.5 +8.\h'|0.25i'\fBIIS Protocol Description\fP\l'|5.6i.'\015 +.sp 0.5 +9.\h'|0.25i'\fBC Interface Summary\fP\l'|5.6i.'\017 +.sp 0.5 +10.\h'|0.25i'\fBC Example Tasks\fP\l'|5.6i.'\019 +.br +\h'|0.25i'10.1.\h'|0.75i'Display Example\l'|5.6i.'\019 +.br +\h'|0.25i'10.2.\h'|0.75i'Interactive Graphics Overlay Example\l'|5.6i.'\022 +.br +\h'|0.25i'10.3.\h'|0.75i'Image Mosaic Example\l'|5.6i.'\026 +.sp 0.5 +11.\h'|0.25i'\fBFortran Interface Summary\fP\l'|5.6i.'\028 +.sp 0.5 +12.\h'|0.25i'\fBFortran Example Tasks\fP\l'|5.6i.'\030 +.br +\h'|0.25i'12.1.\h'|0.75i'Display Example\l'|5.6i.'\030 +.br +\h'|0.25i'12.2.\h'|0.75i'Interactive Graphics Overlay Example\l'|5.6i.'\031 +.sp 0.5 +13.\h'|0.25i'\fBSPP Interface Summary\fP\l'|5.6i.'\033 +.pn 1 + +.NH +Introduction +.LP + For more than a decade IRAF has used a \fIdisplay server\fR as the +primary means for image display. IRAF client tasks connect to the server +and send or read data using a modification of the IIS Model 70 protocol, +originally through named fifo pipes but more recently using unix domain +or inet sockets. The advantage to this approach was that IRAF client tasks +could make use of the image display functionality without duplicating +the code needed for actually displaying the image. The longtime disadvantage +was that the IIS protocol used was arcane and undocumented and therefore +largely unavailable to applications outside of the IRAF project. The +Client Display Library (CDL) provides a public C and Fortran interface for +displaying images and overlay graphics that is independent of the underlying +protocol used. +.LP + Unlike the interface used by IRAF applications, the CDL is meant to +provide an easy-to-use, fully featured interface for applications that can +be easily evolved for future display servers, communications schemes, or +display functionality. Indeed, the CDL is independent of IRAF itself (as +are the display servers) so display tasks can be written for any discipline +or application. +.LP + While this guide assumes programs are written in C, Fortran programmers +should find the translation straightforward by referring to the Fortran +interface summary. The package source files include example tasks as does +this guide; users with problems, questions, or bug reports are encouraged to +contact \fIiraf@noao.edu\fR. A small code sample demonstrating the problem +would be very helpful in finding a solution to any reported problems. + +.NH +Getting Started +.LP + All C programs must include the header file \fB"cdl.h"\fR in order +to get package definitions for constants such as colors and structure +definitions used. The Fortran interface does not \fIrequire\fR anything +similar, however for fortran compilers which support an \f(CWinclude\fR +directive a \fBcdlftn.inc\fR file may be used to define symbolic constants +passed to procedures, this file must be included by each procedure using the +CDL. Fortran programs not using this file must pass in the constants +explicitly, needed values are found throughout this manual. C procedures +which return an integer value will return a positive number to indicate an +error has occured and print an error message, otherwise zero is returned. +.LP + The \fBcdl_open()\fR procedure is used to establish a connection +to the server and initialize the package, it returns a CDL structure pointer +that is passed to other CDL procedures. For C programs this means +a separate pointer may be maintained for each server connection, the Fortran +interface is limited to only one server connection per process since the +pointer is maintained internally. The connection is terminated using the +\fBcdl_close()\fR procedure. Between these two calls may be any combination +of CDL procedure calls for doing image display or overlay graphics. +.LP + For example, the simplest possible program for displaying an IRAF +image would look something like: +.sp 0.5 +.nf + \f(CW#include "cdl.h" + + main (int argc, char *argv[]) + { + CDLPtr cdl = cdl_open ((char *)0); + cdl_displayIRAF (cdl, argv[1], 1, 1, 1, 1); + cdl_close (cdl); + }\fR +.fi +.sp 0.5 +.LP +This program displays band one of an image named on the command line to the +server in frame one using the default 512x512 frame buffer, zscaling the +pixels to 8-bit values automatically. No error checking is performed to verify +that a connection was established or that the argument is a valid IRAF image. +Most programs will be more complex than this but it should be clear that +image display from client applications is a now trivial operation. + +.us "Synopsis" +.sp 0.5 +.nf + \f(CW#include "cdl.h"\fR + + \f(CWCDLPtr cdl_open (char *imtdev)\fR + \f(CWvoid cdl_close (CDLPtr cdl)\fR +.fi + +.NH +Server Connections +.LP + The \fBcdl_open()\fR procedure takes a single argument specifying the +type of connection to make to the server, this routine also initializes +the CDL package. If this is a NULL pointer the CDL will attempt to first +connect on a unix domain socket, if that fails the standard IRAF /dev/imt1* +fifo pipes are tried. The syntax for the \fIimtdev\fR argument is as follows: +.sp 0.5 + \f(CW<domain> : <address>\fR +.sp 0.5 +.LP +where <domain> is one of "\fBinet\fR" (internet tcp/ip socket), "\fBunix\fR" +(unix domain socket) or "\fBfifo\fR" (named pipe). The form of the address +depends upon the domain, as illustrated in the examples below. The address +field may contain up to two "%d" fields. If present, the user's UID will be +substituted (e.g. "unix:/tmp/.IMT%d"). The default connection if no imtdev +is specified is "unix:/tmp/.IMT%d", failing that a connection is attempted +on the /dev/imt1[io] named fifo pipes. +.NH 2 +Domain Sockets +.LP + Domain sockets are sockets created on the local host. The connection +is usually faster than an inet socket and comparable to a fifo. If the +socket name is specified with a '%d' field the client can be assured of a +unique socket name for each user allowing multiple clients to be run on the +same host by different users. +.LP +.us "Example" +.sp 0.5 +.nf +\f(CW + /* Connection to a local host using socket domain socket. */ + if ((cdl = cdl_open ("unix:/tmp/.IMT%d")) == NULL) { + fprintf (stderr, "cannot open domain socket connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +Named FIFO Pipes +.LP + This is the traditional approach, and the only one supported by +SAOimage (although recent versions contain support for sockets). Any named +fifo pipe may be used, the syntax for the \fIimtdev\fR string in this case is +.sp 0.5 + \fBfifo:\f(CW<input_fifo>\fB:\f(CW<output_fifo>\fR +.sp 0.5 +.LP +.us "Example" +.sp 0.5 +.nf + \f(CW/* Connection to a local host using named fifo pipes. */ + if ((cdl = cdl_open ("fifo:/dev/imt1i:/dev/imt1o")) == NULL) { + fprintf (stderr, "cannot open fifo pipe connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +Inet Sockets +.LP + Inet sockets are connections between hosts via a tcp/ip socket. +This permits connecting to the server over a remote network connection +anywhere on the Internet. +.LP +.us "Example" +.sp 0.5 +.nf + \f(CW/* Connection to a local host using socket 5137. */ + if ((cdl = cdl_open ("inet:5137")) == NULL) { + fprintf (stderr, "cannot open inet socket connection\\n"); + exit (1); + } + + /* Connection to a remote internet host using socket 5137. */ + if ((cdl = cdl_open ("inet:5137:foo.bar.edu")) == NULL) { + fprintf (stderr, "cannot open inet socket connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +User-Defined Connections +.LP + Since IRAF V2.10.3 client tasks have been able to use an \fBIMTDEV\fR +unix environment variable to set the connection type, the syntax of this +variable is the same as described above. If the \fIcdl_open()\fR procedure +is called with a NULL pointer the IMTDEV environment variable will +automatically be checked. To explicitly use this variable in the client +task the \fIcdl_open()\fR procedure may be called as +e.g. +.sp 0.5 +.nf + \f(CWif ((cdl = cdl_open (getenv("IMTDEV"))) == NULL) { + fprintf (stderr, "cannot open server connection\\n"); + exit (1); + }\fR +.fi +.NH +Image Display +.NH 2 +Overview of the Display Process +.LP + Basic image display is done most easily using the high-level +\fBcdl_displayIRAF()\fR, \fBcdl_displayFITS()\fR and \fBcdl_displayPix()\fR +procedures. These routines automaticaly define an image WCS, clear the +frame, set the frame buffer and center the image in the display. For most +applications these are all that will be needed, but the +\fBcdl_writeSubRaster()\fR procedure can also be used to display an image. +For example, to display one image in a mosaic or other cases where +the task needs low-level access to position the image or write raw pixel +values. +.LP + In these cases it is the responsibility of the client program to +prepare the server for display. The basic steps involed in displaying an +image include +.sp 0.5 +.TS +center; +lB lB +- - +l lI. +Operation CDL Procedure +Selecting the frame cdl_setFrame() +Clear the frame cdl_clearFrame() +Select the frame buffer configuration cdl_selectFB() +Set the frame buffer configuration cdl_setFBConfig() +Scale the image pixels to 201 display values cdl_zscaleImage() +Define the image WCS +Set the image WCS cdl_setWCS() +Compute the raster placement in the frame buffer +Write the pixels to the display cdl_writeSubRaster() +.TE +.sp 0.5 +In cases like a mosaic display obviously clearing the frame will only need +to be done once and a single WCS for the mosaic should be defined. For +simple display the high-level routines handle all of these steps for you, they +are included here as checklist of what must be considered when using the CDL +for low-level display. +.NH 2 +Displaying IRAF Images +.LP + The \fBcdl_displayIRAF()\fR procedure can be used to display an IRAF +OIF format image (i.e. images with a \fI.imh\fR extension) by simply +passing in the image name. Pixel files for the +image must be accessible from the local machine but can be in any directory, +the HDR$ syntax for the imdir is also recognized. Images may be three +dimensional, the +\fIband\fR argument is used to select the image band to be displayed. +The \fIframe\fR and \fIfbconfig\fR arguments select the frame and frame buffer +size respectively, if the \fIzscale\fR flag is greater than zero the image +will automatically be converted to 8-bit values using the zscale mapping +algorithm. The function returns a positive value if the image cannot +be accessed or displayed for any reason, an error message will be printed. +.LP + The \fIcdl_isIRAF()\fR procedure returns a positive value if the +filename argument is recognized as an IRAF image, it does not check whether +the pixel file can be successfully accessed. For simply reading the pixels +from an IRAF image the \fBcdl_readIRAF()\fR procedure may be used. The +function returns a zero value and sets the output pixel array, image +dimensions and pixel size if successful, otherwise the function returns a +positive value. Note that +the output pixel values may need to be scaled before they can be displayed. + +.us "Synopsis" +.nf + \f(CWint cdl_displayIRAF (CDLPtr cdl, char *fname, int band, + int frame, int fbconfig, int zscale)\fR + \f(CWint cdl_isIRAF (char *fname)\fR + \f(CWint cdl_readIRAF (char *fname, int band, uchar **pix, + int *nx, int *ny, int *bitpix)\fR +.fi +.NH 2 +Displaying FITS Images +.LP + The \fBcdl_displayFITS()\fR procedure can be used to display a +\fIsimple\fR FITS image by name. A "simple" FITS file is assumed to be +one containing a single image and having no extensions. Other types of +FITS files may of course be displayed but the client will have to use other +means to import the pixels. FITS image extensions may be supported in a future +release of the CDL. The \fIframe\fR and \fIfbconfig\fR +arguments select the frame and frame buffer size respectively, if the +\fIzscale\fR flag is greater than zero the image will automatically be +converted to 8-bit values using the zscale mapping algorithm. The function +returns a positive value if the image cannot be accessed or displayed for +any reason, an error message will be printed. +.LP + The \fIcdl_isFITS()\fR procedure returns a positive value if the +filename argument is recognized as a simple FITS image. For simply reading +the image pixels the \fBcdl_readFITS()\fR procedure may be used. The +output pixel array, image dimensions and pixel size are returned if +successful otherwise the function returns a positive value. Note that +the returned pixel values may need to be scaled before they can be displayed. + +.us "Synopsis" +.nf + \f(CWint cdl_displayFITS (CDLPtr cdl, char *fname, int frame, + int fbconfig, int zscale)\fR + \f(CWint cdl_isFITS (char *fname)\fR + \f(CWint cdl_readFITS (char *fname, uchar **pix, int *nx, int *ny, + int *bitpix)\fR +.fi +.NH 2 +Displaying Raw Pixels +.LP + The \fBcdl_displayPix()\fR procedure can be used to display an +arbitrary array of pixels of any size. The \fInx\fR and \fIny\fR arguments +are the raster dimensions, and \fIbitpix\fR is the pixel size and has the +same meaning as the FITS BITPIX keyword. The \fIframe\fR and \fIfbconfig\fR +arguments select the frame and frame buffer size respectively, if the +\fIzscale\fR flag is greater than zero the image will automatically be +converted to 8-bit values using the zscale mapping algorithm. + +.us "Synopsis" +.nf + \f(CWint cdl_displayPix (CDLPtr cdl, uchar *pix, int nx, int ny, + int bitpix, int frame, int fbconfig, int zscale)\fR +.fi +.NH 2 +Frame Selection +.LP + Frame selection is normally done as an argument to one of the display +procedures, however frames may be explicitly selected using the +\fBcdl_setFrame()\fR procedure. This allows client programs to essentially +"blink" frames independently, as long as the server supports multiple frames. + +.us "Synopsis" +.nf + \f(CWvoid cdl_getFrame (CDLPtr cdl, int frame)\fR +.fi +.NH 2 +Clearing the Display +.LP + The current display frame may be explicitly cleared using the +\fBcdl_clearFrame()\fR procedure. The frame is also cleared prior to +displaying new images by the procedures \fBcdl_displayPix()\fR, +\fBcdl_displayFITS()\fR, and \fBcdl_displayIRAF()\fR. + +.us "Synopsis" +.nf + \f(CWint cdl_clearFrame (CDLPtr cdl)\fR +.fi +.NH 2 +Frame Buffer Selection +.LP + The default frame buffer used is 512x512, other sizes may be +selected using the \fBcdl_setFBConfig()\fR procedure. To set the frame +buffer size the client passes the frame buffer number as defined in +the frame buffer configuration file (see below) while setting the image +WCS. It is important to note that the frame buffer isn't actually changed +in the server +until a subsequent \fBcdl_setWCS()\fR call, either directly or through +some other procedure which sets the WCS (e.g. one of the display procedures). +.LP + To get the size of the currently defined frame buffer the user +may call the \fBcdl_getFBConfig()\fR procedure. This returns not only +the current configuration number, but the size as well. To get the size +and any arbitrary configuration without actually setting it, the +\fBcdl_lookupFBSize()\fR procedure may be used. Any configuration not actually +defined in the frame buffer configuration file is returned as the default +512x512 size. + +.us "Synopsis" +.nf + \f(CWvoid cdl_setFBConfig (CDLPtr cdl, int configno)\fR + \f(CWvoid cdl_getFBConfig (CDLPtr cdl, int *configno, int *width, + int *height, int *nframes)\fR + \f(CWvoid cdl_lookupFBSize (CDLPtr cdl, int configno, int *width, + int *height, int *nframes)\fR +.fi +.NH 3 +Automatic Selection +.LP + The \fBcdl_selectFB()\fR procedure may be used to select the most +appropriate frame buffer to use for a given image size. If possible a frame +buffer the same size as the image will be used, otherwise one that is +larger will be chosen. Rather than simply selecting the first configuration +larger than the image, the procedure searches the entire configuration file +selecting the one with the least empty space in both dimensions. If the +\fIreset\fR flag is non-zero this frame is set automatically by the +procedure, otherwise the selected dimension is simply returned to the +calling program. In either case the new frame buffer will not take effect +until a new WCS is defined for the frame. + +.us "Synopsis" +.nf + \f(CWvoid cdl_selectFB (CDLPtr cdl, int nx, int ny, int *fb, + int *w, int *h, int *nf, int reset) +. +.NH 3 +The Frame Buffer Configuration File +.LP + The size of the frame buffer is not passed directly to the server +since this is not part of the communications protocol used. Instead, the +frame buffer number is sent as part of the WCS header packet. So that +both the server and client can know that a particular frame buffer number +corresponds to a specific size, a \fIframe buffer configuration file\fR +is used which both the client and server read. +.LP + The default configuration file is /usr/local/lib/imtoolrc, this can +be overridden by defining an \fBIMTOOLRC\fR environment variable naming +the file to be used, or by creating a .imtoolrc file in your home directory. +Since the server must also read the same file, this must be done before +starting both the client and server applications. +.LP +The format of the frame buffer configuration file is +.sp 0.5 + \fIconfigno nframes width height [extra fields]\fP +.sp 0.5 +e.g. +.sp 0.5 + 1 2 512 512 + 2 2 800 800 + 3 1 1024 1024 # comment + : : : : + +At most 128 frame buffer sizes may be defined, each configuration may define +up to 4 frames, configuration numbers need not be sequential but should be +in ascending order. +.NH 2 +Image WCS Description +.LP + The image WCS is defined using the \fBcdl_setWCS()\fR procedure. The +WCS defines a mapping between any linear coordinate system and the image +pixels, for our purposes we will discuss how the WCS is used to map the frame +buffer pixels to image coordinates. It is passed to the server in a string +of the form: +.sp 0.5 + Image_Name_String\\n a b c d tx ty z1 z2 zt +.sp 0.2 +where: +.sp 0.2 + X' = a*X + c*Y + tx + Y' = b*X + d*Y + ty + +The terms \fIa, b, c\fR, and \fId\fR define a rotation of the WCS wrt the pixel +coordinates, the \fItx\fR and \fIty\fR values are translation terms. The +remaining three values define the intensity mapping of the display pixels; +\fIz1\fR is the minimum pixel value used in the transformation, \fIz2\fR is +the maximum value, and \fIzt\fR defines the type of transformation used (0 for +none, 1 for linear, 2 for log10). +.LP + The WCS may be set explicitly by the calling program or a default +appropriate for the image will be set automatically by the high-level +display procedures, otherwise a WCS for the +frame buffer is defined (i.e. returned coordinates are frame buffer coords). +As an example of how the WCS is defined, the default WCS for an image +IMX x IMY pixels in a frame buffer FBX x FBY pixels is defined as +.sp 0.5 +.nf +\f(CW a = 1.0; /* no rotation */ + b = 0.0; + c = 0.0; + d = -1.0; + tx = (IMX / 2) - (FBX / 2) + 1; /* center in FB */ + ty = (FBY / 2) + (IMY / 2); + z1 = z1; /* zscale values */ + z2 = z2; + zt = 1;\fR +.fi + +.us "Synopsis" +.nf + \f(CWint cdl_setWCS (CDLPtr cdl, char *name, char *title, + float a, float b, float c, float d, float tx, float ty, + float z1, float z2, int zt)\fR + \f(CWint cdl_getWCS (CDLPtr cdl, char *name, char *title, + float *a, float *b, float *c, float *d, float *tx, float *ty, + float *z1, float *z2, int *zt)\fR +.fi +.NH 2 +Image Colormaps +.LP + The IIS protocol used does not permit the downloading of user-defined +colormaps, all images are loaded as raw grayscale values according to the +XImtool colormap model used by currently supported servers. All images +containing private colormaps or more than the 201 grayscale values defined +by the Imtool colormap model must either convert the image to 8-bit +grayscale values by calling the CDL zscale procedures (\fBcdl_computeZscale()\fR +and \fBcdl_zscaleImage()\fR) or scale the images in client code with +user LUTs. The CDL zscale procedures scale image to 201 grayscale values +so that they are displayed to the full 8-bit range, user LUT +transformations or user code for converting to grayscale from a private +colormap procedures should do the same. +.NH 3 +Imtool Color Model +.LP + The IMTOOL color model defines at most 201 grayscale values for use in +displaying the image, a set of 16 static colors are also defined for overlay +graphics. Pixel values sent to the server should be already scaled to this +model, i.e. the image pixels should be scaled to the range 1-200, values +above this will either represent the overlay colors or will wrap around to +8-bit values. The CDL zscale procedures will automatically scale +arbitrary pixel values to use this color model, the overlay procedures +assume color values are defined for the static color range 201-217 but any +8-bit value may be used. +.LP + A summary of the color model values is included below: +.TS +center; +lB lB cB cB lB lB +l l c c l l. +Color Description Color Description +0 Background 208 Cyan +1 - 200 Image data 209 Magenta +201 Cursor (white) 210 Coral +202 Background (black) 211 Maroon +203 White 212 Orange +204 Red 213 Khaki +205 Green 214 Orchid +206 Blue 215 Turquoise +207 Yellow 216 Violet +217 Wheat 218-255 undefined +.TE +.NH 2 +ZScale Intensity Mapping +.LP + Since most display servers are only capable of displaying 8-bit pixel +values, images with more than 8-bits per pixel must be scaled prior to +display. For linear transformations this is typically done using a simple +conversion of the image min/max values to the 256 grayscale values, however +this doesn't produce very good results when most pixel values are near one +of the extremes (usually the image min for astronomical images). To solve +this IRAF uses a \fIzscale\fR mapping algorithm where a sampling grid is used +to approximate the image min/max values rather than computing it directly, +a line is then fit to these sample pixels to determine the optimal +transformation to the display values. This is not only more efficient but +maps the most common pixel values to the display range producing a better image. +.LP + The CDL has several routines for doing the same transformation: the +\fIcdl_computeZscale()\fR procedure is used to compute the optimal \fIz1\fR +and \fIz2\fR +values (the min/max used for the zscale transform) for an image of any pixel +size. The \fIbitpix\fR argument is the number of bits-per-pixel for the input +array and has the same meaning as for the FITS \fIBITPIX\fR keyword. To then +transform the image using these values (or user-defined values) the +\fIcdl_zscaleImage()\fR procedure is used. The input pixels are modified by +this procedure but the array is not reallocated to the smaller size needed by +an 8-bit array. The \fBcdl_setSample()\fR and \fBcdl_setSampleLines()\fR +procedures can be used to change the sampling grid and number of sample +points (the default is 600 points on 5 lines). The \fBcdl_setContrast()\fR +procedure can be used to change the default contrast adjustment to the slope +used in the transformation (the default is 0.25). If a value of zero is +given then the minimum and maximum of the intensity sample is used as the +z1/z2 value. +.LP + Each of the CDL display procedures has a \fIzscale\fR flag to +automatically scale the pixels prior to display. Applications wishing to +set their own z1/z2 values will need to call the zscale procedures and +disable this flag. By default cdl_zscaleImage() will use a linear transform, +the \fBcdl_setZTrans()\fR procedure may be used to change this. Acceptable +values are \fBCDL_UNITARY\fR (zero) for a unitary transform, \fBCDL_LINEAR\fR +(one) for a linear transform, or \fBCDL_LOG\fR (two) for a log10 transform. + +.us "Synopsis" +.nf + \f(CWvoid cdl_computeZscale (CDLPtr cdl, uchar *pix, int nx, + int ny, int bitpix, float *z1, float *z2)\fR + \f(CWvoid cdl_zscaleImage (CDLPtr cdl, uchar **pix, int nx, + int ny, int bitpix, float z1, float z2)\fR + + \f(CWvoid cdl_setZTrans (CDLPtr cdl, int ztrans)\fR + \f(CWvoid cdl_getZTrans (CDLPtr cdl, int *ztrans)\fR + \f(CWvoid cdl_setZScale (CDLPtr cdl, float z1, float z2)\fR + \f(CWvoid cdl_getZScale (CDLPtr cdl, float *z1, float *z2)\fR + + \f(CWvoid cdl_setSample (CDLPtr cdl, int nsample)\fR + \f(CWvoid cdl_setSampleLines (CDLPtr cdl, int nlines)\fR + \f(CWvoid cdl_setContrast (CDLPtr cdl, float contrast)\fR + \f(CWvoid cdl_getSample (CDLPtr cdl, int *nsample)\fR + \f(CWvoid cdl_getSampleLines (CDLPtr cdl, int *nlines)\fR + \f(CWvoid cdl_getContrast (CDLPtr cdl, float *contrast)\fR + +.fi +.NH 2 +Image Hardcopy +.LP + While most servers include some hardcopy capability of their own the +CDL provides two procedures for creating hardcopy images from the client +(e.g. for a batch processing application). The client will typically read +back the entire image, frame buffer, of just a subraster and pass those +pixels to the print procedure. Images will be written as Pseudocolor +Postscript (to preserve the overlay marker colors) and may be disposed to +a file using the \fBcdl_printPixToFile()\fR procedure or to any command string +accepting input from \fIstdin\fR (typically just an 'lpr' command) by using +the \fBcdl_printPix()\fR procedure. + +.us "Synopsis" +.nf + \f(CWint cdl_printPix (CDLPtr cdl, char *cmd, uchar *pix, int nx, + int ny, int annotate)\fR + \f(CWint cdl_printPixToFile (CDLPtr cdl, char *fname, uchar *pix, + int nx, int ny, int annotate)\fR +.fi +.NH 2 +Image Cursor +.LP + The image cursor is read using the \fBcdl_readCursor()\fR procedure. +The returned value is the cursor \fI(x,y)\fR position as floating point value +in terms of the currently define image WCS. Note that this position must +be converted to integer if it is to be used in one of the marker procedures. + +.us "Synopsis" +.nf + \f(CWint cdl_readCursor (CDLPtr cdl, int sample, float *x, + float *y, char *key)\fR +.fi +.NH 3 +Cursor Sampling +.LP + If the cdl_readCursor() \fIsample\fR flag is non-zero the \fIlogical +image cursor\fR position is returned immediately, otherwise the display server +will wait for a keystroke before returning the cursor position. The logical +image cursor is the last value set by a \fIcdl_setCursor()\fR call or the last +value returned by a \fIbcdl_readCursor()\fR call. When sampling the cursor +position the keystroke value is undefined. +.NH 2 +Image Readout +.LP + The CDL maintains an internal knowledge of where an image has been +positioned if it was displayed using one of the \fIcdl_display*\fR procedures. +The \fBcdl_readImage()\fR procedure may be used to read back the entire image +pixels from the server ignoring the region of the frame buffer outside of +the image, the \fBcdl_readFrameBuffer()\fR procedure will read back the +contents of the entire frame buffer. The dimensions of the array are returned +in the \fInx\fR and \fIny\fR arguments. + +.us "Synopsis" +.nf + \f(CWint cdl_readImage (CDLPtr cdl, uchar **pix, int *nx, + int *ny)\R + \f(CWint cdl_readFrameBuffer (CDLPtr cdl, uchar **pix, + int *nx, int *ny)\R +.fi +.NH 2 +Subraster I/O +.LP + The \fBcdl_writeSubRaster()\fR procedure is used to write an arbitrary +raster to any location in the display. Similarly the +\fBcdl_readSubRaster()\fR procedure is used to read back an arbitrary raster. +When an image has previously been displayed the subraster position is given +in image coordinates (e.g. when writing a subregion of edited pixels), +otherwise the position is in frame buffer coordinates (e.g. to display +multiple images per frame you should use the cdl_writeSubRaster() call). +See the section on \fIMarker Coordinates\fR for further explanation of the +coordinate systems used. + +.us "Synopsis" +.nf + \f(CWint cdl_writeSubRaster (CDLPtr cdl, int lx, int ly, int nx, + int ny, uchar *pix)\fR + \f(CWint cdl_readSubRaster (CDLPtr cdl, int lx, int ly, int nx, + int ny, uchar **pix)\fR +.fi +.NH +Graphics Overlay +.NH 2 +Marker Coordinates +.LP + All marker positions are assumed to be image pixel coordinates, +although there is no requirement that the position be on the image itself. +When an image WCS is defined (using the CDL display procedures or explicitly) +the origin of the coordinates used shifts from the frame buffer lower-left +to the lower-left of the image as displayed in the frame. Negative +positions are allowed and will either refer to empty pixels if the frame +buffer is larger than the image, or pixels outside the frame buffer +boundaries. Raster I/O requests will be clipped to the frame buffer +endpoints, a request completely outside the frame buffer is an error. +.NH 3 +Mapping a Previously Displayed Image +.LP + Ideally any application wishing to draw markers on an image will have +also displayed that image, however the \fBcdl_mapFrame()\fR procedure may +be used to map the requested frame for marker overlay. It does this by +reading the WCS defined for that frame and assumes an image has been +displayed and centered in the frame buffer, then resets the internal CDL +image position. If no image has been displayed the frame buffer is mapped +directly. This can be used for example to map an empty frame for displaying +just the markers without an image, or for mapping another frame's WCS for +use on the current display. The frame is not changed by the procedure call +however the current WCS \fIis\fR changed. + +.us "Synopsis" +.nf + \f(CWint cdl_mapFrame (CDLPtr cdl, int frame)\fR +.fi +.NH 2 +Marker Colors +.LP + Markers may be drawn using any 8-bit value, in order to use the +static overlay colors the color must be in the range 201-217 (see above for +notes on the XImtool color model). The "\fIcdl.h\fR" include file +for C programs, or the "\fIcdlftn.inc\fR" include for fortran programs, +defines the following symbolic constants for each of the static overlay colors: +.sp 0.5 +.TS +center; +lB l c c lB l. +C_BLACK 202 C_CORAL 210 +C_WHITE 203 C_MAROON 211 +C_RED 204 C_ORANGE 212 +C_GREEN 205 C_KHAKI 213 +C_BLUE 206 C_ORCHID 214 +C_YELLOW 207 C_TURQUOISE 215 +C_CYAN 208 C_VIOLET 216 +C_MAGENTA 209 C_WHEAT 217 +.TE +.NH 2 +Marker Types +.LP + Currently supported marker types include: \fI +.TS +center; +l l l l l. +Point Line Box Polyline Polygon +Circle Circular Annuli Ellipse Elliptical Annuli Text +.TE +.LP + \fRThe "\fIcdl.h\fR" include file for C programs, or the +"\fIcdlftn.inc\fR" include for fortran programs, defines the following +symbolic constants for each of the defined \fIPoint\fR marker types: +.TS +center; +lB r c c lB r. +M_FILL 1 M_CIRCLE 64 +M_POINT 2 M_STAR 128 +M_BOX 4 M_HLINE 256 +M_PLUS 8 M_VLINE 512 +M_CROSS 16 M_HBLINE 1024 +M_DIAMOND 32 M_VBLINE 2048 +.TE +.LP + Point markers are drawn using the \fBcdl_markPoint()\fR procedure, +point types may be logically \fIOR\fR'd to create composite markers, closed +shapes such as a circles, diamonds, or squares may be \fIOR\fR'd with the +M_FILL flag to flood-fill the point with the current overlay color. +.NH 3 +Point +.LP + The \fBcdl_markPoint()\fR procedure is used to mark a specific point +on the image using one of the marker types listed above. The marker is +centered at the coordinates specified by the \fIx\fR and \fIy\fR arguments, +\fItype\fR is an integer flag indicating what kind of marker to draw and +may be a composite type by logically ORing two or more marker types. +\fISize\fR is the width and height of the marker measured in pixel unxits, +and \fIcolor\fR is the color used to draw the marker. If the \fInumber\fR +argument is greater than zero that number will be drawn next to the point +as a label, +creating text labels for point markers can bedone using the +\fIcdl_markPointLabel\fR procedure. +.LP + Most marker names are fairly obvious but several are worth special +mention: The M_DIAMOND, M_CIRCLE and M_BOX marker types may be logically +\fIOR\fRed with the M_FILL flag to produce a filled marker type. Unless +\fIOR\fRd with the M_POINT flag all point markers will leave the center +pixel unchanged. The M_HLINE and M_VLINE markers are most useful in +astronomical applications to mark an individual star, they are horizontal +and vertical lines respectively with a gap in the middle third of the marker +(the M_HBLINE and M_VBLINE are identical but with a width of 3 pixels). +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPoint (CDLPtr cdl, int x, int y, int number, + int size, int type, int color)\fR + \f(CWint cdl_markPoint (CDLPtr cdl, int x, int y, char *label + int size, int type, int color)\fR +.fi +.NH 3 +Line +.LP + The \fBcdl_markLine()\fR procedure is used to draw a line of the +specified color between points (\fIxs,ys\fR) and (\fIxe,ye\fR). +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markLine (CDLPtr cdl, int xs, int ys, int xe, int ye, + int color)\fR +.fi +.NH 3 +Box +.LP + The \fBcdl_markBox()\fR procedure is used to draw a box of the +specified color with endpoints specified by (\fIlx,ly\fR) and (\fIux,uy\fR). +If the \fIfill\fR flag is set the box will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markBox (CDLPtr cdl, int lx, int ly, int ux, int uy, + int fill, int color)\fR +.fi +.NH 3 +Circle +.LP + The \fBcdl_markCircle()\fR procedure is used to draw a circle of the +specified color with a center at (\fIx,y\fR) and radius \fIradius\fR. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markCircle (CDLPtr cdl, int x, int y, int radius, + int fill, int color)\fR +.fi +.NH 3 +Polyline +.LP + The \fBcdl_markPolyline()\fR procedure is used to draw a line +connecting the \fInpts\fR points specified by the \fIxpts\fR and +\fIypts\fR array in the desired \fIcolor\fR. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPolyline (CDLPtr cdl, int *xpts, int *ypts, + int npts, int color)\fR +.fi +.NH 3 +Polygon +.LP + The \fBcdl_markPolygon()\fR procedure is used to draw a closed +polygon consisting of \fInpts\fR vertices specified by the \fIxpts\fR and +\fIypts\fR array in the desired \fIcolor\fR. The last point in the array +will automatically be connected to the first point by the procedure. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPolygon (CDLPtr cdl, int *xpts, int *ypts, + int npts, int fill, int color)\fR +.fi +.NH 3 +Ellipse +.LP + The \fBcdl_markEllipse()\fR procedure is used to draw an ellipse of the +specified color with a center at (\fIx,y\fR) and semimajor-axis \fIxrad\fR +and semiminor-axis \fIyrad\fR pixels long. A rotation angle for the ellipse +may be specified by passing a non-zero \fIangle\fR argument, the angle is +measured in degrees from the positive x-axis. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markEllipse (CDLPtr cdl, int x, int y, int xrad, + int yrad, float ang, int fill, int color)\fR +.fi +.NH 3 +Circular Annuli +.LP + The \fBcdl_markCircAnnuli()\fR procedure is used to draw +\fInannuli\fR circles separated by \fIsep\fR pixels each. The circle is +centered at (\fIx,y\fR) with an initial radius of \fIradius\fR pixels. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markCircAnnuli (CDLPtr cdl, int x, int y, int radius, + int nannuli, int sep, int color)\fR +.fi +.NH 3 +Elliptical Annuli +.LP + The \fBcdl_markEllipAnnuli()\fR procedure is used to draw +\fInannuli\fR ellipses separated by \fIsep\fR pixels each. The ellipse is +centered at (\fIx,y\fR) with an initial semimajor and semiminor axis +specified by the \fIxrad\fR and \fIyrad\fR arguments. Each ellipse will +be optionally rotate by an \fIangle\fR degrees as measured from the positive +x-axis. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markEllipAnnuli (CDLPtr cdl, x, y, xrad, yrad, ang, + int nannuli, int sep, int color)\fR +.fi +.NH 3 +Text +.LP + The \fBcdl_markText()\fR procedure is used to draw a text string +specified by \fIstr\fR argument with an initial position at (\fIx,y\fR) +and optionally rotated by \fIangle\fR degrees as measured from the positive +x-axis. The default \fIsize\fR is 1.0 and is approximately a 6x13 font, +the font size may be scaled by any fractional amount. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markText (CDLPtr cdl, int x, int y, char *str, + float size, float angle, int color)\fR +.fi +.NH 2 +Text Fonts +.LP + The \fBcdl_setFont()\fR procedure is used to choose between one +of four available fonts as the text marker default: Roman, Greek, Futura, +and Times respectively. By default the Roman font will be used. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWvoid cdl_setFont (CDLPtr cdl, int font)\fR +.fi +A complete listing of the Greek character mappings can be found in the file +'greek.ps' in the 'doc' subdirectory of the CDL distribution. +.NH 3 +In-Line Font Changes +.LP + Text markers are drawn using the font selected with the cdl_setFont() +routine, however fonts may be change within a string itself (e.g. to set +a Greek character) using a \\f escape sequence. The escape is followed +by the character 'R' to set a Roman font, 'G' for Greek, 'F' for futura +and 'T' for Times. Any number of escapes are permitted within a string, +the font change will remain in effect until it is changed, or the end of +string at which point any subsequent strings will again be drawn with the +default font. Additionally a 'P' in the escape sequence will change the +font to the one previously used, whatever that may be. +.LP + The CDL also supports a sub/superscripting of text which is also +done with the font escapes. In this case the escape character followed by a +'U' produces a superscript and a 'D' produces a subscript. The changes may +be nested permitting several levels of sub/superscripts, these escapes may +also be used in conjustion with a font change to cause the sub/superscript +to be drawn with a different font. A superscript escape will remain in +effect until the end of the string or a \\fD escape is seen. Similary a +subscript remains in effect until the end of the string of a \\fU escape. +.TS +center; +c s +l l. +Summary of Font Escapes +.sp 0.5 +\\\\fR change to Roman font +\\\\fG change to Greek font +\\\\fF change to Futura font +\\\\fT change to Times font +\\\\fP change to previous font +\\\\fU begin superscripted text +\\\\fD begin subscripted text +.TE +.NH 2 +Deleting Markers +.LP + When markers are drawn the underlying subraster is first saved to +an internal structure, erasure is done by simply redisplaying the saved +raster. Problems can arise however when markers overlap; when deleting a +marker that is \fIunder\fR another marker the original pixels can overwrite +the pixels of the marker on top. This is an unfortunate side effect of the +simple scheme used in this version of the package, users can call the +\fBcdl_redrawOverlay()\fR procedure to help clean up any artifacts left +behind. +.NH 3 +Individual Markers +.LP + The \fBcdl_deleteMark()\fR procedure is used to delete a single +marker from the display(). The (\fIx,y\fR) argument is either the center +position of the marker if that is know by the application, more typically +it will be an approximate position. In the latter case the marker whose +center is closest to this position will be deleted. For markers with no +defined center the distance used to decide if the marker should be +deleted is the distance from the argument position to the edge of the +marker. For example, distance from a box or polygon is measured as the +distance from to one of the sides, for text it is the distance to the +start of the text string. There is no way to \fIun\fRdelete a marker other +than to redraw it. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_deleteMark (CDLPtr cdl, int x, int y)\fR +.fi +.NH 3 +The Entire Overlay +.LP + To erase all markers currently displayed use the +\fBcdl_clearOverlay()\fR procedure. Markers are erased in the reverse order +they were drawn to help reduce the chance that overlaying markers will leave +stray pixels. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_clearOverlay (CDLPtr cdl)\fR +.fi +.NH 2 +Redraw +.LP + The \fBcdl_redrawOverlay()\fR procedure can be used to redraw all +markers currently in the display list. This is sometimes needed when +subraster I/O procedures are used to redisplay subregions and overwrite +existing markers. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_redrawOverlay (CDLPtr cdl)\fR +.fi +.NH +Fortran Language Binding Notes +.LP + The Fortran languange binding routines are implemented in C but +should be accessible from any fortran program as though they were real +fortran subroutines. The calling sequences are the same as with the C +library routines with the following exceptions: +.IP +\(bu The CDL package pointer is maintained internally so no 'cdl' pointer is +passed in the fortran interface. +.IP +\(bu All routines which are integer procedures in the C interface return an +extra 'ier' argument to contain the error flag. All Fortran functions are +implemented as subroutines. +.IP +\(bu The procedure names are the same except that \fIcdl_\fR has been +replaced with \fIcf\fR in the fortran binding. If your compiler is +case-sensitive then use all lower case letters. +.LP +The binding has been tested on a number of different platforms without +problems. The procedure names haven't been restricted to the traditional +6-character fortran names since most modern compilers can handle longer +names, if yours isn't one of them contact \fIiraf@noao.edu\fR for help +in changing the names. +.LP + Since the CDL is implemented as a set of C routines, the one aspect +that cannot be overlooked in the fortran binding is the between Fortran and +C storage order for arrays. In most cases this will not be a problem since +the CDL routines are just passing around pointers even if they live for a +short while in a fortran program. The problem comes when using the fortran +program to read the arrays, for example in using the array returned by the +\fBcfreadIRAF()\fR procedure, or when passing in arrays for display that +originated in the user's fortran code. In these cases the array \fBmust\fR +be transposed to be interpreted correctly. It was assumed that in most +applications arrays returned by CDL procedures would be immediately passed +to other CDL procedures so having the binding routines +transpose the array to/from +Fortran storage order was unnecessarily inefficient. This may be changed in +later releases if required. + +.NH +SPP Language Binding Notes +.LP + The SPP language binding is experimental and is intended to provide +a way to quickly prototype tasks, it should not be used in production code +as it may not be as portable as the rest of the task. In essence this +binding is layer on top of the Fortran binding since most IRAF platforms +still use Fortran as the intermediate code. The calling sequences are the +same as with the Fortran library routines with the following caveats: +.IP +\(bu The 'cdlspp.h' SPP include file is required by all files which call +CDL routines. The binding names are actually SPP macros to resolve the +current 6 character limit on procedure name. +.IP +\(bu The CDL package pointer is maintained internally so no 'cdl' pointer is +passed in the fortran interface. +.IP +\(bu All routines which are integer procedures in the C interface return an +extra 'ier' argument to contain the error flag. All SPP functions are +implemented as subroutines. +.IP +\(bu The procedure names are the same except that they are all upper case +and the \fIcdl_\fR has been replaced with \fICDS_\fR in the SPP binding. The +upper case is required. + +.NH +IIS Protocol Description +.LP + The communications protocol used by the CDL and servers such as +\fIXImtool\fR and \fISAOimage\fR, is a slightly modified version of that used +by the IIS Model 70. All operations are initiated by sending a header +packet containing a \fIthing id\fR (tid) and \fIsubunit\fR selecting the +function to be performed, optionally followed by data up to 32K bytes long. +The IIS header packet used is defined as +.nf + \f(CWstruct iism70 { + short tid; + short thingct; + short subunit; + short checksum; + short x, y, z; + short t; + };\fR +.fi + +The \fIthing count\fR field contains the negative number of bytes of data +that will be sent following the header packet. The IIS header checksum is +computed as +.nf +\f(CW + checksum = 0177777 - (tid + subunit + thingct + x + y + z + t); +\fR +.fi +The four IIS registers are set differently depending on the operation, a +summary of the header packets for each operation is summarized below. + +.ce 1 +\fBIIS Header Packet Summary\fR +.TS +tab(:); +c c c c c c c c c. +:TID:Subunit:Thingct:X:Y:Z:T:Data +.T& +l | l | l | c | c | c | l | l | l |. +:_:_:_:_:_:_:_:_ +Read Data:IIS_READ\fB|\fPPACKED:MEMORY:-nbytes:x:y:frame:-:nbytes +Write Data:IIS_WRITE\fB|\fPPACKED:MEMORY:-nbytes:x:y:frame:-:nbytes +Read Cursor:IIS_READ:IMCURSOR:-:-:-:-:-:- +Write Cursor:IIS_WRITE:IMCURSOR:-:x:y:wcs:-:- +Set Frame:IIS_WRITE:LUT\fB|\fPCOMMAND:-1:-:-:-:-:2 +Write WCS:IIS_WRITE\fB|\fPPACKED:WCS:-N:-:-:frame:fb:N +Read WCS:IIS_READ:WCS:-:-:-:-:-:320 +Erase Frame:IIS_WRITE \fB|\fP fb:FEEDBACK:-:-:-:frame:-:- +:_:_:_:_:_:_:_:_ +.TE +.TS +l l l. +Where nbytes = number of bytes expected or written + x = x postion of operation in frame buffer coords + y = y postion of operation in frame buffer coords + frame = 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 +.TE +.LP +TID fields can be logically OR'd with the PACKED flag indicating the number +of data bytes is exactly \fIthingct\fR bytes long, otherwise \fIthingct\fR +must be specified as half the number of data bytes. In a cursor read, if +the IIS_READ flag is OR'd with IMC_SAMPLE the logical cursor position (i.e. +the last value read or set) is returned immediately, otherwise the server +will wait for a keystroke to be hit before returning a string containing the +(x,y) position, wcs of the read, and the keystroke. When setting the frame +you must send a short integer in the data containing the frame selected. +.bp +.NH +C Interface Summary +.LP +.in 0.5i +#include "\fBcdl.h\fR" +.in -0.5i + +.TS +center; +r l. +CDLPtr \fBcdl_open\fR (imtdev) +int \fBcdl_displayPix\fR (cdl, pix, nx, ny, bitpix, frame, fbconfig, zscale) +char \fBcdl_readCursor\fR (cdl, sample, x, y, key) +int \fBcdl_setCursor\fR (cdl, x, y, wcs) +int \fBcdl_setWCS\fR (cdl, name, title, a, b, c, d, tx, ty, z1, z2, zt) +int \fBcdl_getWCS\fR (cdl, name, title, a, b, c, d, tx, ty, z1, z2, zt) +void \fBcdl_setFrame\fR (cdl, frame) +int \fBcdl_clearFrame\fR (cdl) +void \fBcdl_close\fR (cdl) + +int \fBcdl_displayIRAF\fR (cdl, fname, band, frame, fbconfig, zscale) +int \fBcdl_isIRAF\fR (fname) +int \fBcdl_readIRAF\fR (fname, band, pix, nx, ny, bitpix) + +int \fBcdl_displayFITS\fR (cdl, fname, frame, fbconfig, zscale) +int \fBcdl_isFITS\fR (fname) +int \fBcdl_readFITS\fR (fname, pix, nx, ny, bitpix) + +void \fBcdl_computeZscale\fR (cdl, pix, nx, ny, bitpix, z1, z2) +void \fBcdl_zscaleImage\fR (cdl, pix, nx, ny, bitpix, z1, z2) + +int \fBcdl_printPix\fR (cdl, cmd, pix, nx, ny, annotate) +int \fBcdl_printPixToFile\fR (cdl, fname, pix, nx, ny, annotate) + +int \fBcdl_readImage\fR (cdl, pix, nx, ny) +int \fBcdl_readFrameBuffer\fR (cdl, pix, nx, ny) +int \fBcdl_readSubRaster\fR (cdl, lx, ly, nx, ny, pix) +int \fBcdl_writeSubRaster\fR (cdl, lx, ly, nx, ny, pix) + +void \fBcdl_selectFB\fR (cdl, nx, ny, fb, w, h, nf, reset) +void \fBcdl_setFBConfig\fR (cdl, configno) +void \fBcdl_getFBConfig\fR (cdl, configno, w, h, nf) +void \fBcdl_lookupFBSize\fR (cdl, configno, w, h, nf) + +void \fBcdl_setZTrans\fR (cdl, ztrans) +void \fBcdl_setZScale\fR (cdl, z1, z2) +void \fBcdl_setSample\fR (cdl, nsample) +void \fBcdl_setSampleLines\fR (cdl, nlines) +void \fBcdl_setContrast\fR (cdl, contrast) +void \fBcdl_setName\fR (cdl, imname) +void \fBcdl_setTitle\fR (cdl, imtitle) + +void \fBcdl_getFrame\fR (cdl, frame) +void \fBcdl_getZTrans\fR (cdl, ztrans) +void \fBcdl_getZScale\fR (cdl, z1, z2) +void \fBcdl_getSample\fR (cdl, nsample) +void \fBcdl_getSampleLines\fR (cdl, nlines) +void \fBcdl_getContrast\fR (cdl, contrast) +void \fBcdl_getName\fR (cdl, imname) +void \fBcdl_getTitle\fR (cdl, imtitle) + +int \fBcdl_mapFrame\fR (cdl, frame) +int \fBcdl_markPoint\fR (cdl, x, y, number, size, type, color) +int \fBcdl_markPointLabel\fR (cdl, x, y, label, size, type, color) +int \fBcdl_markLine\fR (cdl, xs, ys, xe, ye, color) +int \fBcdl_markBox\fR (cdl, lx, ly, ux, uy, fill, color) +int \fBcdl_markPolygon\fR (cdl, xarray, yarray, npts, fill, color) +int \fBcdl_markPolyline\fR (cdl, xarray, yarray, npts, color) +int \fBcdl_markCircle\fR (cdl, x, y, radius, fill, color) +int \fBcdl_markCircAnnuli\fR (cdl, x, y, radius, nannuli, sep, color) +int \fBcdl_markEllipse\fR (cdl, x, y, xrad, yrad, rotang, fill, color) +int \fBcdl_markEllipAnnuli\fR (cdl, x, y, xrad, yrad, ang, nannuli, sep, color) +int \fBcdl_markText\fR (cdl, x, y, str, size, angle, color) +int \fBcdl_deleteMark\fR (cdl, x, y) +int \fBcdl_clearOverlay\fR (cdl) +int \fBcdl_redrawOverlay\fR (cdl) +.TE + +.bp +.NH +C Example Tasks +.LP + The examples shown here are for demonstration purposes only. They +are based on working example tasks in the CDL source \fIexamples\fR +subdirectory, see the programs there for the full program listing. + +.NH 2 +Display Example +.LP +.ps -2 +.vs -2 +.nf +\f(CW +#include <stdio.h> +#include <unistd.h> +#include "cdl.h" + +/* \fIDISPLAY -- Example task to display an image as a command-line task. + * This task is meant to show three ways the CDL can be used to display + * an image, see the code comments for a description of each method. + * + * Examples: + * To display a simple IRAF or FITS file: + * % ./display -frame 2 image.imh + * % ./display image.fits + * + * To display a FITS file as a raw image: + * % ./display -nx 512 -ny 512 -depth 16 -hskip 5760 -raw dpix.fits + * + * Usage: + * display [-depth N] [-fits] [-frame N] [-fbconfig N] [-hskip N] + * [-iraf] [-nozscale] [-nx N] [-ny N] [-raw] [-zscale] file\fP + */ + +#define NONE -1 +#define IRAF 0 +#define FITS 1 +#define RAW 2 + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname; + int i, status = 0, frame = 1, fbconfig = 0, zscale = 1; + int format = NONE, nx = 0, ny = 0, depth = 8, hskip = 0; + float z1, z2; + int fb_w, fb_h, nf; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strcmp (argv[i], "-depth") == 0) depth = atoi (argv[++i]); + else if (strcmp (argv[i], "-fits") == 0) format = FITS; + else if (strcmp (argv[i], "-frame") == 0) frame = atoi (argv[++i]); + else if (strcmp (argv[i], "-fbconfig") == 0) fbconfig = atoi (argv[++i]); + else if (strcmp (argv[i], "-hskip") == 0) hskip = atoi (argv[++i]); + else if (strcmp (argv[i], "-iraf") == 0) format = IRAF; + else if (strcmp (argv[i], "-nozscale") == 0) zscale = 0; + else if (strcmp (argv[i], "-nx") == 0) nx = atoi (argv[++i]); + else if (strcmp (argv[i], "-ny") == 0) ny = atoi (argv[++i]); + else if (strcmp (argv[i], "-raw") == 0) format = RAW; + else if (strcmp (argv[i], "-zscale") == 0) zscale = 1; + } + } + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + fname = argv[argc-1]; + + /* \fIMETHOD 1: Displays the image using the high-level format display + * call. Display as an IRAF image if the option was set indicating + * this is the format, otherwise test the file to see if it is anyway.\fP + */ + if (format == IRAF || (format == NONE && \fBcdl_isIRAF\fP (fname))) { + status = \fBcdl_displayIRAF\fP (cdl, fname, 1, frame, FB_AUTO, zscale); + + /* \fIMETHOD 2: Uses the CDL procedure for getting image pixels from + * a known format, minimal work required to display an image. The + * point here is that you can use this method to process the image + * yourself prior to display, e.g. subsample the pixels, apply a user + * LUT, etc but still use the CDL to get the raw image and do the + * display.\fP + */ + } else if (format == FITS || (format == NONE && \fBcdl_isFITS\fP (fname))) { + + /* \fIGet the FITS image pixels, exit w/ an error status if something + * went wrong, the procedure will print what that was.\fP + */ + if (\fBcdl_readFITS\fP (fname, &pix, &nx, &ny, &depth)) { + \fBcdl_close\fP (cdl); /* close the package */ + exit (1); /* exit w/ error code */ + } + + /* \fINow select a frame buffer large enough for the image. The + * fbconfig number is passed in the WCS packet, but the display + * call below will compute the correct WCS for the image and + * transmit that prior to display, all we're doing here is + * setting up the FB to be used.\fP + */ + if (fbconfig == 0) + cdl_selectFB (cdl, nx, ny, &fbconfig, &fb_w, &fb_h, &nf, 0); + + /* \fILastly, display the pixels to the requested frame, do any + * zscaling requested using the CDL procedure.\fP + */ + status = \fBcdl_displayPix\fP (cdl, pix, nx, ny, depth, frame, + fbconfig, zscale); + + /* \fIMETHOD 3: Displays an image of raw pixels. The client code is + * responsible for reading the image and calling all the procedures + * needed for image display, initialize the frame, zscaling pix, etc. + * While we assume a simple raster format in this program, the user + * code can read a compressed image format such as GIF, mosaic multiple + * images for display as a single image, or just about anything that + * produces a raster for display. The intent here is to show all the + * lowest level calls needed for displaying the image.\fP + */ + } else if (format == RAW) { + FILE *fd; + int lx, ly; + + if (nx == 0 || ny == 0) { + fprintf (stderr, "No size given for raw data.\\n"); + exit (1); + } + + /* \fIOpen the image file if we can.\fP */ + if (fd = fopen (fname, "r")) { + + /* \fISeek to the offset specified.\fP */ + lseek (fileno(fd), (off_t) hskip, SEEK_SET); + + /* \fIAllocate the pixel pointer and read the data.\fP */ + pix = (unsigned char *) malloc (nx * ny * (depth / 8)); + fread (pix, depth/8, nx * ny, fd); + + /* \fIIf we're zscaling and depth is more than 8-bits, do that.\fP */ + if (zscale && depth > 8) { + \fBcdl_computeZscale\fP (cdl, pix, nx, ny, depth, &z1, &z2); + \fBcdl_zscaleImage\fP (cdl, &pix, nx, ny, depth, z1, z2); + } + + /* \fINow select a frame buffer large enough for the image. We'll + * ask that this be reset but the change won't go to the server + * until we send in a WCS, so compute that as well. For the + * WCS we assume a simple linear transform where the image is + * Y-flipped, the (x,y) translation is computed so it is correct + * for an frame buffer >= than the image size.\fP + */ + \fBcdl_selectFB\fP(cdl, nx, ny, &fbconfig, &fb_w, &fb_h, &nf,1); + \fBcdl_setWCS\fP (cdl, fname, NULL, 1., 0., 0., -1., + (float) (nx / 2) - (fb_w / 2) + 1, /* \fIX trans.\fP */ + (float) (fb_h / 2) + (ny / 2), /* \fIY trans.\fP */ + z1, z2, CDL_LINEAR); /* \fIZ transform\fP */ + + /* \fISelect and clear the requested frame prior to display.\fP */ + \fBcdl_setFrame\fP (cdl, frame); + \fBcdl_clearFrame\fP (cdl); + + /* \fINow display the pixels. We'll compute the image placement + * ourselves and write the image as a raw subraster of the frame + * buffer. In this case we'll center the image, but the CDL + * cdl_writeSubRaster() procedure can be used to write arbitrary + * rasters at any point in the frame buffer.\fP + */ + lx = (fb_w / 2) - (nx / 2); + ly = fb_h - ((fb_h / 2) + (ny / 2)); + status = \fBcdl_writeSubRaster\fP (cdl, lx, ly, nx, ny, pix); + } else + status = 1; + } else { + if (access (fname, F_OK) == 0) + fprintf (stderr, "'%s': unknown image format.\\n", fname); + else + fprintf (stderr, "'%s': image does not exist.\\n", fname); + status = 1; + } + + /* \fINow just free the pixel pointer to clean up.\fP */ + if (pix) + free ((unsigned char *) pix); + \fBcdl_close\fP (cdl); /* \fIclose the package\fP */ + exit (status); +} +\fR +.fi +.vs +2 +.ps +2 +.bp +.NH 2 +Interactive Graphics Overlay Example +.LP +.ps -2 +.vs -2 +.nf +\f(CW +#include <stdio.h> +#include <unistd.h> +#include <math.h> +#include "cdl.h" + +/* \fI + * TVMARK -- Example task for displaying an marking images. This program + * can be used to either display an image and overlay points defined in + * a coordinate file, map an existing display frame for marking, or option- + * ally enter a cursor command loop after either of these providing other + * marking capability. All options support minimum match. + * + * Examples: + * % tvmark dpix.fits + * % tvmark -coords coords -color 205 dpix.fits + * % tvmark -frame 2 + * % tvmark -coords coords -interactive dpix.fits + * + * Usage: + * tvmark [-frame N] [-fbconfig N] [-coords <file>] [-size N] [-color N] + * [-nolabel] [-fill] [-interactive] [image]\fP + */ + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname = NULL, *cfname = NULL; + int i, status = 0, fill = 0, frame = 1, fb = FB_AUTO, zscale = 1; + int color = 201, label = 1, size = 9, interactive = 0; + float z1, z2; + int fb_w, fb_h, nf; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strncmp(argv[i], "-color",4) == 0) color = atoi (argv[++i]); + else if (strncmp(argv[i], "-coords",4) == 0) cfname = argv[++i]; + else if (strncmp(argv[i], "-fbconfig",3) == 0) fb = atoi (argv[++i]); + else if (strncmp(argv[i], "-fill",4) == 0) fill = 1; + else if (strncmp(argv[i], "-frame",3) == 0) frame = atoi (argv[++i]); + else if (strncmp(argv[i], "-interactive",4) == 0) interactive = 1; + else if (strncmp(argv[i], "-nolabel",4) == 0) label = 0; + else if (strncmp(argv[i], "-nozscale",4) == 0) zscale = 0; + else if (strncmp(argv[i], "-size",2) == 0) size = atoi (argv[++i]); + else + fname = argv[i]; + } + } + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + /* \fIIf an image was specified display it first, otherwise assume the + * image has already been loaded in the frame and mark that.\fP + */ + if (fname) { + if (\fBcdl_isIRAF\fP (fname)) + status = \fBcdl_displayIRAF\fP (cdl, fname, 1, frame, fb, zscale); + else if (\fBcdl_isFITS\fP (fname)) + status = \fBcdl_displayFITS\fP (cdl, fname, frame, fb, zscale); + else { + if (access (cfname, F_OK) == 0) + fprintf (stderr, "'%s': unknown image format.\\n", fname); + else + fprintf (stderr, "'%s': image doesn't exist.\\n", fname); + status = 1; + } + if (status) goto err_; + } else { + + /* \fIIf we've requested a special frame buffer, set it now.\fP */ + if (fb > 0) + \fBcdl_setFBConfig\fP (cdl, fb); + + /* \fIMap the current display frame for use as an image.\fP */ + \fBcdl_mapFrame\fP (cdl, frame); + } + + /* \fIIf a coordinate file was specified read the file and mark those + * coords with points.\fP + */ + if (cfname) { + if (access (cfname, F_OK) == 0) { + FILE *fp; + int i, x, y; + + if (fp = fopen (cfname, "r")) { + /* \fIThe coord file is assumed to be simply a file containing + * (x,y) pairs, one per line. Scan the file and mark each + * point. We do no bounds checking to see if the coords + * are correct for the frame, marker type is fixed.\fP + */ + i = 1; + while (fscanf (fp, "%d %d", &x, &y) != EOF) { + if (label) + \fBcdl_markPoint\fP (cdl, x, y, i++, size, M_STAR, color); + else + \fBcdl_markPoint\fP (cdl, x, y, 0, size, M_STAR, color); + } + + } else + fprintf (stderr, "cannot open coord file '%s'.\\n", cfname); + } else + fprintf (stderr, "'%s': coord file doesn't exist, ignoring.\\n", cfname); + } + + /* \fILastly, start up an interactive cursor loop if needed.\fP */ + if (interactive) + tvmInteractive (cdl, label, fill, color, size); + + /* \fIClose the package and clean up.\fP */ +err_: \fBcdl_close\fP (cdl); + exit (status); +} + +/* \fITVMINTERACTIVE -- Process commands interactively.\fP */ + +tvmInteractive (cdl, label, fill, color, size) +CDLPtr cdl; +int label, fill, color, size; +{ + float angle = 0.0, rx, ry, txsize = 1.; + int nx, ny, i, x, y, x2, y2; + int number=1, radius=11, xrad=11, yrad=6, nannuli=3, sep=5; + char key, cmd[SZ_NAME], str[SZ_NAME]; + unsigned char *pix; + + /* \fIProcess commands until a 'q' keystrke is hit.\fP */ + while (\fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &key) != 'q') { + x = (int) (rx + 0.5); /* \fIconvert to int pixels\fP */ + y = (int) (ry + 0.5); + + switch (key) { + case ':': /* \fIprocess a colon command\fP */ + putchar (':'); + gets (str); + for (i=0; str[i] != ' ' && str[i]; i++) + cmd[i] = str[i]; + cmd[i++] = '\0'; + + if (strcmp (cmd, "angle") == 0) angle = atof (&str[i]); + else if (strcmp (cmd, "color") == 0) color = atoi (&str[i]); + else if (strcmp (cmd, "fill") == 0) fill = atoi (&str[i]); + else if (strcmp (cmd, "number") == 0) number = atoi (&str[i]); + else if (strcmp (cmd, "nannuli") == 0) nannuli = atoi (&str[i]); + else if (strcmp (cmd, "label") == 0) label = atoi (&str[i]); + else if (strcmp (cmd, "sep") == 0) sep = atoi (&str[i]); + else if (strcmp (cmd, "size") == 0) size = atoi (&str[i]); + else if (strcmp (cmd, "txsize") == 0) txsize = atof (&str[i]); + else if (strcmp (cmd, "xrad") == 0) xrad = atoi (&str[i]); + else if (strcmp (cmd, "yrad") == 0) yrad = atoi (&str[i]); + else if (strcmp (cmd, "print") == 0) { + \fBcdl_readFrameBuffer\fP (cdl, &pix, &nx, &ny); + \fBcdl_printPix\fP (cdl, NULL, pix, nx, ny, 1); + } else if (strcmp (cmd, "snap") == 0) { + \fBcdl_readFrameBuffer\fP (cdl, &pix, &nx, &ny); + \fBcdl_printPixToFile\fP (cdl, &str[i], pix, nx, ny, 1); + } else if (strcmp (cmd, "status") == 0) { + printf ("angle = %-5.3g\tcolor = %d\t", angle, color); + printf ("fill = %-5d\tnumber = %d\\n", fill, number); + printf ("nannuli = %-5d\tsep = %d\t", nannuli, sep); + printf ("size = %-5d\ttxsize = %g\\n", size, txsize); + printf ("xrad = %-5d\tyrad = %d\t", xrad, yrad); + printf ("label = %-5d\\n", label); + } + break; + + case '?': + /* ......\fIhelp procedures\fP */ + break; + + case 'p': /* \fIplus mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_PLUS, color); + break; + case 'x': /* \fIcross mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_CROSS, color); + break; + case '.': /* \fIpoint mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_POINT, color); + break; + case '*': /* \fIstar mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_STAR, color); + break; + case '_': /* \fIhoriz dash mark\fP*/ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_HBLINE, color); + break; + case '|': /* \fIvert dash mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_VBLINE, color); + break; + case 'o': /* \fIcircle mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_CIRCLE|fill, color); + break; + case 's': /* \fIsquare mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_BOX|fill, color); + break; + case 'v': /* \fIdiamond mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_DIAMOND|fill, color); + break; + + case 'b': /* \fIBox\fP */ + printf ("Hit another key to define the box...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + \fBcdl_markBox\fP (cdl, x, y, x2, y2, fill, color); + break; + case 'c': /* \fICircle\fP */ + printf ("Hit another key to set radius ...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + radius = (int) sqrt ((double) ((x2-x)*(x2-x) + (y2-y)*(y2-y))); + \fBcdl_markCircle\fP (cdl, x, y, radius, fill, color); + break; + case 'd': /* \fIDelete marker\fP */ + \fBcdl_deleteMark\fP (cdl, x, y); + break; + case 'e': /* \fIEllipse\fP */ + \fBcdl_markEllipse\fP (cdl, x, y, xrad, yrad, angle, fill, color); + break; + case 'l': /* \fILine\fP */ + printf ("Hit another key to set line endpoint...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + \fBcdl_markLine\fP (cdl, x, y, x2, y2, color); + break; + case 't': /* \fIText string\fP */ + printf ("Text string: "); + gets (str); + \fBcdl_markText\fP (cdl, x, y, str, txsize, angle, color); + break; + case 'C': /* \fICircular annuli\fP*/ + \fBcdl_markCircAnnuli\fP (cdl, x, y, radius, nannuli, sep, color); + break; + case 'D': /* \fIDelete all markers\fP*/ + \fBcdl_clearOverlay\fP (cdl); + break; + case 'E': /* \fIElliptical annuli\fP*/ + \fBcdl_markEllipAnnuli\fP (cdl, x, y, xrad, yrad, angle, nannuli, sep, color); + break; + default: + break; + } + } +} +\fR +.fi +.vs +2 +.ps +2 +.bp +.NH 2 +Image Mosaic Example +.LP +.in 0.5i +.ps -2 +.vs -2 +.nf +#include <stdio.h> +#include <unistd.h> +#\fBinclude "cdl.h"\fP + +/* \fIMOSAIC -- Example task to mosaic several images on a display. Demonstrates + * usage of low-level routines for complex display operations.\fP + */ + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname = NULL; + int i, j, k, status=0, label=0, frame=1, fb=FB_AUTO, zscale=1; + int sample=1, pad=0, col=204, imx, imy, bitpix, nimages, nim; + int ii, xinit, rowx, rowy, nnx, nny, fb_w, fb_h, nf, mx, my, nx, ny; + float z1, z2; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strncmp (argv[i], "-fbconfig",3) == 0) fb=atoi(argv[++i]); + else if (strncmp (argv[i],"-frame",3) == 0) frame=atoi(argv[++i]); + else if (strncmp (argv[i],"-color",3) == 0) col=atoi(argv[++i]); + else if (strncmp (argv[i],"-label",4) == 0) label=1; + else if (strncmp (argv[i],"-nozscale",4) == 0) zscale=0; + else if (strncmp (argv[i],"-nx",3) == 0) nx=atoi(argv[++i]); + else if (strncmp (argv[i],"-ny",3) == 0) ny=atoi(argv[++i]); + else if (strncmp (argv[i],"-pad",4) == 0) pad=atoi(argv[++i]); + else if (strncmp (argv[i],"-sample",4) == 0) sample=atoi(argv[++i]); + else + break; + } + } + nimages = argc - i; + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + /* \fIClear the frame to begin.\fP */ + (void) \fBcdl_clearFrame\fP (cdl); + + /* \fILoop over each of the images in the list.\fP */ + nim = rowx = rowy = nnx = nny = 0; + for (k=0; k < ny && nim < nimages; k++) { + rowy += nny + pad; + for (rowx = xinit, j=0; j < nx && nim < nimages; j++) { + + /* \fIGet the image name for display.\fP */ + fname = argv[i++]; + + /* \fIFigure out what kind of image it is and get the pixels.\fP */ + if (cdl_isIRAF (fname)) + status = \fBcdl_readIRAF\fP (fname, 1, &pix, &imx, &imy, &bitpix); + else if (cdl_isFITS (fname)) + status = \fBcdl_readFITS\fP (fname, &pix, &imx, &imy, &bitpix); + else { + fprintf(stderr, "'%s': unknown or nonexistant image.\\n", fname); + status = 1; + } + if (status) goto err_; + + /* \fICompute subsampled image size.\fP */ + if (sample > 1) + nnx = imx / sample, nny = imy / sample; + else + nnx = imx, nny = imy; + + /* \fIUnless we asked for a specific FB size find one large enough + * to handle the mosaic. We don't check to be sure what's + * returned is really large enough.\fP + */ + if (nim == 0 && fb == FB_AUTO) + \fBcdl_selectFB\fP (cdl, nx*nnx+(pad*(nx-1)), ny*nny+(pad*(ny-1)), &fb, &fb_w, &fb_h, &nf, 1); + else { + \fBcdl_setFBConfig\fP (cdl, fb); + \fBcdl_lookupFBSize\fP (cdl, fb, &fb_w, &fb_h, &nf); + } + + /* \fIDefine a WCS for the frame.\fP */ + \fBcdl_setWCS\fP (cdl, "image mosaic", "", 1., 0., 0., -1., 0., (float) ny*imy+(pad*(ny+1)), 1., 255., 1); + + /* \fIThe first time through figure out the placement so the + * entire mosaic is centered in the frame.\fP + */ + if (nim == 0) { + mx = (nx * nnx) + pad * (nx-1); + my = (ny * nny) + pad * (ny-1); + rowy = (fb_h - my) / 2; + xinit = rowx = (fb_w - mx) / 2; + } + + /* \fICompute the zscaled imaged pixels.\fP */ + if (zscale) { + \fBcdl_computeZscale\fP (cdl, pix, imx ,imy, bitpix, &z1, &z2); + \fBcdl_zscaleImage\fP (cdl, &pix, imx ,imy, bitpix, z1, z2); + } + + /* \fISubsample the image if requested.\fP */ + if (sample > 1) { + int l, m, n=0; + for (l=0; l < imy; l+=sample) + for (m=0; m < imx; m+=sample) + pix[n++] = pix[(l*imx)+m]; + } + + /* \fIWrite the image to the frame buffer.\fP */ + if (\fBcdl_writeSubRaster\fP (cdl, rowx, rowy, nnx, nny, pix)) goto err_; + + /* \fIDraw the image name as a label.\fP */ + if (label) \fBcdl_markText\fP (cdl, rowx+10, rowy+10, fname, 1., 0., col); + + nim++; rowx += nnx + pad; + } + } + + /* \fIClose the package and clean up.\fP */ +err_: \fBcdl_close\fP (cdl); + exit (status); +} +.fi +.vs +2 +.ps +2 +.in -0.5i + +.bp +.NH +Fortran Interface Summary +.LP +.in 0.5i +include "\fBcdlftn.inc\fR" +.in -0.5i + +.TS +center; +r l. +\fBcfopen\fR (imtdev, ier) +\fBcfdisplayPix\fR (pix, nx, ny, bitpix, frame, fbconfig, zscale, ier) +\fBcfreadCursor\fR (sample, x, y, key, ier) +\fBcfsetCursor\fR (x, y, wcs, ier) +\fBcfsetWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcfgetWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcfsetFrame\fR (frame) +\fBcfclearFrame\fR (ier) +\fBcfclose\fR () + +\fBcfdisplayIRAF\fR (fname, band, frame, fbconfig, zscale, ier) +\fBcfisIRAF\fR (fname, isiraf) +\fBcfreadIRAF\fR (fname, band, pix, nx, ny, bitpix, ier) + +\fBcfdisplayFITS\fR (fname, frame, fbconfig, zscale, ier) +\fBcfisFITS\fR (fname, isfits) +\fBcfreadFITS\fR (fname, pix, nx, ny, bitpix, ier) + +\fBcfcomputeZscale\fR (pix, nx, ny, bitpix, z1, z2) +\fBcfzscaleImage\fR (pix, nx, ny, bitpix, z1, z2) + +\fBcfprintPix\fR (cmd, pix, nx, ny, annotate, ier) +\fBcfprintPixToFile\fR (fname, pix, nx, ny, annotate, ier) + +\fBcfreadImage\fR (pix, nx, ny, ier) +\fBcfreadFrameBuffer\fR (pix, nx, ny, ier) +\fBcfreadSubRaster\fR (lx, ly, nx, ny, pix, ier) +\fBcfwriteSubRaster\fR (lx, ly, nx, ny, pix, ier) + +\fBcfselectFB\fR (nx, ny, fb, w, h, nf, reset) +\fBcfsetFBConfig\fR (configno) +\fBcfgetFBConfig\fR (configno, w, h, nf) +\fBcflookupFBSize\fR (configno, w, h, nf) + +\fBcfsetZTrans\fR (ztrans) +\fBcfsetZScale\fR (z1, z2) +\fBcfsetSample\fR (nsample) +\fBcfsetSampleLines\fR (nlines) +\fBcfsetContrast\fR (contrast) +\fBcfsetName\fR (imname) +\fBcfsetTitle\fR (imtitle) + +\fBcfgetFrame\fR (frame) +\fBcfgetZTrans\fR (ztrans) +\fBcfgetZScale\fR (z1, z2) +\fBcfgetSample\fR (nsample) +\fBcfgetSampleLines\fR (nlines) +\fBcfgetContrast\fR (contrast) +\fBcfgetName\fR (imname) +\fBcfgetTitle\fR (imtitle) + +\fBcfmapFrame\fR (frame, ier) +\fBcfmarkPoint\fR (x, y, number, size, type, color, ier) +\fBcfmarkPointLabel\fR (x, y, label, size, type, color, ier) +\fBcfmarkLine\fR (xs, ys, xe, ye, color, ier) +\fBcfmarkBox\fR (lx, ly, ux, uy, fill, color, ier) +\fBcfmarkPolygon\fR (xarray, yarray, npts, fill, color, ier) +\fBcfmarkPolyline\fR (xarray, yarray, npts, color, ier) +\fBcfmarkCircle\fR (x, y, radius, fill, color, ier) +\fBcfmarkCircAnnuli\fR (x, y, radius, nannuli, sep, color, ier) +\fBcfmarkEllipse\fR (x, y, xrad, yrad, rotang, fill, color, ier) +\fBcfmarkEllipAnnuli\fR (x, y, xrad, yrad, ang, nannuli, sep, color, ier) +\fBcfmarkText\fR (x, y, str, size, angle, color, ier) +\fBcfsetfont\fR (font) +\fBcfdeleteMark\fR (x, y, ier) +\fBcfclearOverlay\fR (ier) +\fBcfredrawOverlay\fR (ier) +.TE +.bp +.NH +Fortran Example Tasks +.LP + The examples shown here are for demonstration purposes only. They +are based on working example tasks in the CDL source \fIexamples\fR +subdirectory, see the programs there for the full program listing. + +.NH 2 +Display Example +.in 0.5i +.ps -2 +.vs -2 +.nf +\f(CW +C ======================================================================== +C FDISPLAY -- Example fortran program showing the use of the Client +C Display Library (CDL) Fortran interface for displaying images. +C ======================================================================== + + PROGRAM FDISPLAY + character*64 imname + +C \fIInitialize the CDL package\fP + call \fBcfopen\fP (0, ier) + if (ier .gt. 0) then + write (*,*) 'open: Error return from CDL' + goto 999 + endif + + write (*, "('Image Name: ', $)") + read (5, *) imname + write (*, "('Frame Number: ', $)") + read (5, *) iframe + write (*, "('Frame buffer configuration number: ', $)") + read (5, *) ifb + +C \fIIf we've got a FITS format image, go ahead and display it.\fP + call \fBcfisFITS\fP (imname, isfits) + if (isfits .gt. 0) then + call \fBcfdisplayFITS\fP (imname, iframe, ifb, 1, ier) + else +C \fIWe've got an IRAF format image, go ahead and display it.\fP + call \fBcfisIRAF\fP (imname, isiraf) + if (isiraf .gt. 0) then + call \fBcfdisplayIRAF\fP (imname, 1, iframe, ifb, 1, ier) + else +C \fIUnrecognized image, punt and exit.\fP + write (*,*) 'Unrecognized image format' + endif + endif + +C \fIClean up and exit.\fP +999 continue + call \fBcfclose\fP (ier) + end +\fR +.fi +.ps +2 +.vs +2 +.in -0.5i +.bp +.NH 2 +Interactive Graphics Overlay Example +.in 0.5i +.ps -2 +.vs -2 +.nf +\f(CW +C ========================================================================== +C FTVMARK -- Example fortran program showing the use of the Client +C Display Library (CDL) Fortran interface for doing graphics overlay. No +C checking of the error flag is done here for space considerations. +C ========================================================================== + + PROGRAM FTVMARK + include "\fBcdlftn.inc\fP" + character*64 imname + +C \fIInitialize the CDL package\fP + call \fBcfopen\fP (0, ier) + + write (*, "('Image Name: ', $)") + read (5, *) imname + write (*, "('Frame Number: ', $)") + read (5, *) iframe + write (*, "('Frame buffer configuration number: ', $)") + read (5, *) ifb + +C \fIIf we've got a FITS format image, go ahead and display it.\fP + call \fBcfisFITS\fP (imname, isfits) + if (isfits .gt. 0) then + call \fBcfdisplayFITS\fP (imname, iframe, ifb, 1, ier) + else +C \fIWe've got an IRAF format image, go ahead and display it.\fP + call \fBcfisIRAF\fP (imname, isiraf) + if (isiraf .gt. 0) then + call \fBcfdisplayIRAF\fP (imname, 1, iframe, ifb, 1, ier) + else +C \fINo valid image given, so map the current display for marking.\fP + call \fBcfmapFrame\fP (iframe) + endif + endif + +C \fINow that we've got an image displayed or mapped, enter a cursor loop to mark the image. \fP + call markInteractive () + +C \fIClean up and exit\fP +999 continue + call \fBcfclose\fP (ier) + end + +C \fIMARKINTERACTIVE -- Subroutine for processing the cursor loop.\fP + subroutine markInteractive () + include "\fBcdlftn.inc\fP" + real angle, rx, ry, txsize + integer nx, ny, x, y, x2, y2, fill, size, color + integer number, radius, xrad, yrad, nannuli, sep + character key + character*64 cmd, str + +C \fIAllocate a 1024x1024 array for pixels. \fP + character pix(1048576) + +C \fI....Initialize the local parameters to use\fP + +C \fIRead a cursor keystroke telling us what to do.\fP +10 call \fBcfreadCursor\fP (0, rx, ry, key, ier) + +C \fIRound the real cursor position to integer pixel positions.\fP + x = nint (rx + 0.5) + y = nint (ry + 0.5) + +C \fICheck the keystroke and take the appropriate action.\fP +C \fIColon Commands\fP + if (key .eq. ':') then +C \fIRead a three character command and value field and process the colon command\fP + read (*,'(A3, i4)') cmd, ival + if (cmd(1:3) .eq. 'ang') then + angle = real (ival) + else if (cmd(1:3) .eq. 'col') then + color = ival + else if (cmd(1:3) .eq. 'fil') then + fill = ival +\fI : + ....and so on to set local variables + :\fR + else if (cmd(1:3) .eq. 'pri') then +C \fIPrint contents of the current frame buffer\fP + call \fBcfreadFrameBuffer\fP (pix, nx, ny, ier) + call \fBcfprintPix\fP ("lpr", pix, nx, ny, 1, ier) + else if (cmd(1:3) .eq. 'sta') then + \fI....print out the status (value) of variables\fP + endif + +C \fIPoint Markers\fP + else if (key .eq. 'p') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_PLUS, color, ier) + else if (key .eq. 'x') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_CROSS, color, ier) + else if (key .eq. '_') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_HBLINE, color, ier) + else if (key .eq. 'o') then +C \fIExample of a filled point marker \fP + call \fBcfmarkPoint\fP (x, y, 1, size, or(M_CIRCLE,fill), color, ier) +\fI : + ....and so on to set other types of point markers\fR + +C \fIOther Markers\fP + else if (key .eq. 'b') then + print '("Hit another key to define the box ....")' + call \fBcfreadCursor\fP (0, rx, ry, key, ier) + x2 = nint (rx + 0.5) + y2 = nint (ry + 0.5) + call \fBcfmarkBox\fP (x, y, x2, y2, fill, color, ier) + else if (key .eq. 'd') then + call \fBcfdeleteMark\fP (x, y, ier) + else if (key .eq. 'e') then + call \fBcfmarkEllipse\fP (x, y, xrad, yrad, angle, fill, color, ier) + else if (key .eq. 't') then + print '("Text string: ", $)' + read (*,'(A64)') str + call \fBcfmarkText\fP (x, y, str, txsize, angle, color, ier) +\fI : + ....and so on to set other types of markers\fR + +C \fIQuit\fP + else if (key .eq. 'q') then + goto 998 + endif + +C \fILoop back until we want to quit\fP + goto 10 +998 continue + end +\fR +.fi +.ps +2 +.vs +2 +.in -0.5i +.bp +.NH +SPP Interface Summary +.LP +.in 0.5i +#include "\fBcdlspp.h\fR" +.in -0.5i + +.TS +center; +r l. +\fBCDS_OPEN\fR (imtdev, ier) +\fBCDS_DISPLAYPIX\fR (pix, nx, ny, bitpix, frame, fbconfig, zscale, ier) +\fBCDS_READCURSOR\fR (sample, x, y, key, ier) +\fBCDS_SETCURSOR\fR (x, y, wcs, ier) +\fBCDS_SETWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBCDS_GETWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBCDS_SETFRAME\fR (frame) +\fBCDS_CLEARFRAME\fR (ier) +\fBCDS_CLOSE\fR () + +\fBCDS_DISPLAYIRAF\fR (fname, band, frame, fbconfig, zscale, ier) +\fBCDS_ISIRAF\fR (fname, isiraf) +\fBCDS_READIRAF\fR (fname, band, pix, nx, ny, bitpix, ier) + +\fBCDS_DISPLAYFITS\fR (fname, frame, fbconfig, zscale, ier) +\fBCDS_ISFITS\fR (fname, isfits) +\fBCDS_READFITS\fR (fname, pix, nx, ny, bitpix, ier) + +\fBCDS_COMPUTEZSCALE\fR (pix, nx, ny, bitpix, z1, z2) +\fBCDS_ZSCALEIMAGE\fR (pix, nx, ny, bitpix, z1, z2) + +\fBCDS_PRINTPIX\fR (cmd, pix, nx, ny, annotate, ier) +\fBCDS_PRINTPIXTOFILE\fR (fname, pix, nx, ny, annotate, ier) + +\fBCDS_READIMAGE\fR (pix, nx, ny, ier) +\fBCDS_READFRAMEBUFFER\fR (pix, nx, ny, ier) +\fBCDS_READSUBRASTER\fR (lx, ly, nx, ny, pix, ier) +\fBCDS_WRITESUBRASTER\fR (lx, ly, nx, ny, pix, ier) + +\fBCDS_SELECTFB\fR (nx, ny, fb, w, h, nf, reset) +\fBCDS_SETFBCONFIG\fR (configno) +\fBCDS_GETFBCONFIG\fR (configno, w, h, nf) +\fBCDS_LOOKUPFBSIZE\fR (configno, w, h, nf) + +\fBCDS_SETZTRANS\fR (ztrans) +\fBCDS_SETZSCALE\fR (z1, z2) +\fBCDS_SETSAMPLE\fR (nsample) +\fBCDS_SETSAMPLELINES\fR (nlines) +\fBCDS_SETCONTRAST\fR (contrast) +\fBCDS_SETNAME\fR (imname) +\fBCDS_SETTITLE\fR (imtitle) + +\fBCDS_GETFRAME\fR (frame) +\fBCDS_GETZTRANS\fR (ztrans) +\fBCDS_GETZSCALE\fR (z1, z2) +\fBCDS_GETSAMPLE\fR (nsample) +\fBCDS_GETSAMPLELINES\fR (nlines) +\fBCDS_GETCONTRAST\fR (contrast) +\fBCDS_GETNAME\fR (imname) +\fBCDS_GETTITLE\fR (imtitle) + +\fBCDS_MAPFRAME\fR (frame, ier) +\fBCDS_MARKPOINT\fR (x, y, number, size, type, color, ier) +\fBCDS_MARKPOINTLABEL\fR (x, y, label, size, type, color, ier) +\fBCDS_MARKLINE\fR (xs, ys, xe, ye, color, ier) +\fBCDS_MARKBOX\fR (lx, ly, ux, uy, fill, color, ier) +\fBCDS_MARKPOLYGON\fR (xarray, yarray, npts, fill, color, ier) +\fBCDS_MARKPOLYLINE\fR (xarray, yarray, npts, color, ier) +\fBCDS_MARKCIRCLE\fR (x, y, radius, fill, color, ier) +\fBCDS_MARKCIRCANNULI\fR (x, y, radius, nannuli, sep, color, ier) +\fBCDS_MARKELLIPSE\fR (x, y, xrad, yrad, rotang, fill, color, ier) +\fBCDS_MARKELLIPANNULI\fR (x, y, xrad, yrad, ang, nannuli, sep, color, ier) +\fBCDS_MARKTEXT\fR (x, y, str, size, angle, color, ier) +\fBCDS_SETFONT\fR (font) +\fBCDS_DELETEMARK\fR (x, y, ier) +\fBCDS_CLEAROVERLAY\fR (ier) +\fBCDS_REDRAWOVERLAY\fR (ier) +.TE diff --git a/vendor/x11iraf/cdl/doc/cdlref.ms-V1.6 b/vendor/x11iraf/cdl/doc/cdlref.ms-V1.6 new file mode 100644 index 00000000..a97147be --- /dev/null +++ b/vendor/x11iraf/cdl/doc/cdlref.ms-V1.6 @@ -0,0 +1,2512 @@ +.RP +.de us +\\$1\l'|0\(ul' +.. +.TL +A Reference Guide for the IRAF Client Display Library (CDL) +.AU +Michael Fitzpatrick +.AI +NOAO/IRAF Group +.sp 0.5 +February 1997 +.sp 0.5 +\fIRevised March 1998\fR + +.AB +The Client Display Library (CDL) is a host interface for C, Fortran or SPP +programs allowing them to display images or overlay graphics to display +servers such as \fIXImtool\fR or \fISAOimage / SAOtng\fR. High-level +procedures allow IRAF or FITS images to be displayed simply, other +routines permit access to all other server functions (e.g. cursor and image +readback, frame selection, etc). The library also features a number of +functions for doing image overlay graphics; supported graphics primitives +include numerous point shapes, lines, circles, ellipses, polygons, annular +shapes, and text. +.AE + +.pn 1 +.bp +.ce +.ps +3 +\fBContents\fR +.ps -3 +.sp 2 +1\h'|0.25i'\fBIntroduction\fP\l'|5.6i.'\0\01 +.sp 0.5 +2\h'|0.25i'\fBGetting Started\fP\l'|5.6i.'\0\01 +.sp 0.5 +3\h'|0.25i'\fBServer Connections\fP\l'|5.6i.'\0\02 +.br +\h'|0.25i'3.1\h'|0.75i'Domain Sockets\l'|5.6i.'\0\02 +.br +\h'|0.25i'3.2\h'|0.75i'Named FIFO Pipes\l'|5.6i.'\0\03 +.br +\h'|0.25i'3.3\h'|0.75i'Inet Sockets\l'|5.6i.'\0\03 +.br +\h'|0.25i'3.4\h'|0.75i'User-Defined Connections\l'|5.6i.'\0\03 +.sp 0.5 +4\h'|0.25i'\fBImage Display\fP\l'|5.6i.'\0\03 +.br +\h'|0.25i'4.1\h'|0.75i'Overview of the Display Process\l'|5.6i.'\0\03 +.br +\h'|0.25i'4.2\h'|0.75i'Displaying IRAF Images\l'|5.6i.'\0\04 +.br +\h'|0.25i'4.3\h'|0.75i'Displaying FITS Images\l'|5.6i.'\0\04 +.br +\h'|0.25i'4.4\h'|0.75i'Displaying Raw Pixels\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.5\h'|0.75i'Frame Selection\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.6\h'|0.75i'Clearing the Display\l'|5.6i.'\0\05 +.br +\h'|0.25i'4.7\h'|0.75i'Frame Buffer Selection\l'|5.6i.'\0\05 +.br +\h'|0.4i'4.7.1\h'|0.95i'Automatic Selection\l'|5.6i.'\0\06 +.br +\h'|0.4i'4.7.2\h'|0.95i'The Frame Buffer Configuration File\l'|5.6i.'\0\06 +.br +\h'|0.25i'4.8\h'|0.75i'Image WCS Description\l'|5.6i.'\0\06 +.br +\h'|0.25i'4.9\h'|0.75i'Image Colormaps\l'|5.6i.'\0\07 +.br +\h'|0.4i'4.9.1\h'|0.95i'Imtool Color Model\l'|5.6i.'\0\07 +.br +\h'|0.25i'4.10\h'|0.75i'ZScale Intensity Mapping\l'|5.6i.'\0\08 +.br +\h'|0.25i'4.11\h'|0.75i'Image Hardcopy\l'|5.6i.'\0\09 +.br +\h'|0.25i'4.12\h'|0.75i'Image Cursor\l'|5.6i.'\0\09 +.br +\h'|0.4i'4.12.1\h'|0.95i'Cursor Sampling\l'|5.6i.'\0\09 +.br +\h'|0.25i'4.13\h'|0.75i'Image Readout\l'|5.6i.'\0\09 +.br +\h'|0.25i'4.14\h'|0.75i'Subraster I/O\l'|5.6i.'\0\09 +.sp 0.5 +5\h'|0.25i'\fBGraphics Overlay\fP\l'|5.6i.'\010 +.br +\h'|0.25i'5.1\h'|0.75i'Marker Coordinates\l'|5.6i.'\010 +.br +\h'|0.25i'5.2\h'|0.75i'Mapping a Previously Displayed Image\l'|5.6i.'\010 +.br +\h'|0.25i'5.3\h'|0.75i'Marking a Coordinate File\l'|5.6i.'\010 +.br +\h'|0.25i'5.4\h'|0.75i'Marker Colors\l'|5.6i.'\010 +.br +\h'|0.25i'5.5\h'|0.75i'Marker Types\l'|5.6i.'\011 +.br +\h'|0.4i'5.5.1\h'|0.95i'Point\l'|5.6i.'\011 +.br +\h'|0.4i'5.5.2\h'|0.95i'Line\l'|5.6i.'\011 +.br +\h'|0.4i'5.5.3\h'|0.95i'Box\l'|5.6i.'\012 +.br +\h'|0.4i'5.5.4\h'|0.95i'Circle\l'|5.6i.'\012 +.br +\h'|0.4i'5.5.5\h'|0.95i'Polyline\l'|5.6i.'\012 +.br +\h'|0.4i'5.5.6\h'|0.95i'Polygon\l'|5.6i.'\012 +.br +\h'|0.4i'5.5.7\h'|0.95i'Ellipse\l'|5.6i.'\012 +.br +\h'|0.4i'5.5.8\h'|0.95i'Circular Annuli\l'|5.6i.'\012 +.br +\h'|0.4i'5.5.9\h'|0.95i'Elliptical Annuli\l'|5.6i.'\013 +.br +\h'|0.4i'5.5.10\h'|0.95i'Text\l'|5.6i.'\013 +.br +\h'|0.25i'5.6\h'|0.75i'Text Fonts\l'|5.6i.'\013 +.br +\h'|0.4i'5.6.1\h'|0.95i'In-line Font Changes\l'|5.6i.'\013 +.br +\h'|0.25i'5.7\h'|0.75i'Line Widths and Styles\l'|5.6i.'\014 +.br +\h'|0.25i'5.8\h'|0.75i'Deleting Markers\l'|5.6i.'\014 +.br +\h'|0.4i'5.8.1\h'|0.95i'Individual Markers\l'|5.6i.'\014 +.br +\h'|0.4i'5.8.2\h'|0.95i'The Entire Overlay\l'|5.6i.'\015 +.br +\h'|0.25i'5.9\h'|0.75i'Redrawing the Overlay\l'|5.6i.'\015 +.sp 0.5 +6\h'|0.25i'\fBANSI C Function Prototypes\fP\l'|5.6i.'\015 +.sp 0.5 +7\h'|0.25i'\fBFortran Language Binding Notes\fP\l'|5.6i.'\015 +.sp 0.5 +8\h'|0.25i'\fBSPP Language Binding Notes\fP\l'|5.6i.'\015 +.sp 0.5 +9\h'|0.25i'\fBIIS Protocol Description\fP\l'|5.6i.'\016 +.sp 0.5 +10\h'|0.25i'\fBVXIMTOOL Proxy/Display Server Usage\fP\l'|5.6i.'\018 +.sp 0.5 +11\h'|0.25i'\fBC Interface Summary\fP\l'|5.6i.'\019 +.sp 0.5 +12\h'|0.25i'\fBC Example Tasks\fP\l'|5.6i.'\021 +.br +\h'|0.25i'12.1\h'|0.75i'Display Example\l'|5.6i.'\021 +.br +\h'|0.25i'12.2\h'|0.75i'Interactive Graphics Overlay Example\l'|5.6i.'\024 +.br +\h'|0.25i'12.3\h'|0.75i'Image Mosaic Example\l'|5.6i.'\028 +.sp 0.5 +13\h'|0.25i'\fBFortran Interface Summary\fP\l'|5.6i.'\030 +.sp 0.5 +14\h'|0.25i'\fBFortran Example Tasks\fP\l'|5.6i.'\032 +.br +\h'|0.25i'14.1\h'|0.75i'Display Example\l'|5.6i.'\032 +.br +\h'|0.25i'14.2\h'|0.75i'Interactive Graphics Overlay Example\l'|5.6i.'\033 +.sp 0.5 +15\h'|0.25i'\fBSPP Interface Summary\fP\l'|5.6i.'\035 +.pn 1 + +.NH +Introduction +.LP + For more than a decade IRAF has used a \fIdisplay server\fR as the +primary means for image display. IRAF client tasks connect to the server +and send or read data using a modification of the IIS Model 70 protocol, +originally through named fifo pipes but more recently using unix domain +or inet sockets. The advantage to this approach was that IRAF client tasks +could make use of the image display functionality without duplicating +the code needed for actually displaying the image. The longtime disadvantage +was that the IIS protocol used was arcane and undocumented and therefore +largely unavailable to applications outside of the IRAF project. The +Client Display Library (CDL) provides a public C and Fortran interface for +displaying images and overlay graphics that is independent of the underlying +protocol used. +.LP + Unlike the interface used by IRAF applications, the CDL is meant to +provide an easy-to-use, fully featured interface for applications that can +be easily evolved for future display servers, communications schemes, or +display functionality. Indeed, the CDL is independent of IRAF itself (as +are the display servers) so display tasks can be written for any discipline +or application. +.LP + While this guide assumes programs are written in C, Fortran programmers +should find the translation straightforward by referring to the Fortran +interface summary. The package source files include example tasks as does +this guide; users with problems, questions, or bug reports are encouraged to +contact \fIiraf@noao.edu\fR. A small code sample demonstrating the problem +would be very helpful in finding a solution to any reported problems. + +.NH +Getting Started +.LP + All C programs must include the header file \fB"cdl.h"\fR in order +to get package definitions for constants such as colors and structure +definitions used. The Fortran interface does not \fIrequire\fR anything +similar, however for fortran compilers which support an \f(CWinclude\fR +directive a \fBcdlftn.inc\fR file may be used to define symbolic constants +passed to procedures, this file must be included by each procedure using the +CDL. Fortran programs not using this file must pass in the constants +explicitly, needed values are found throughout this manual. C procedures +which return an integer value will return a positive number to indicate an +error has occurred and print an error message, otherwise zero is returned. +.LP + The \fBcdl_open()\fR procedure is used to establish a connection +to the server and initialize the package, it returns a CDL structure pointer +that is passed to other CDL procedures. For C programs this means +a separate pointer may be maintained for each server connection, the Fortran +interface is limited to only one server connection per process since the +pointer is maintained internally. The connection is terminated using the +\fBcdl_close()\fR procedure. Between these two calls may be any combination +of CDL procedure calls for doing image display or overlay graphics. +.LP + For example, the simplest possible program for displaying an IRAF +image would look something like: +.sp 0.5 +.nf + \f(CW#include "cdl.h" + + main (int argc, char *argv[]) + { + CDLPtr cdl = cdl_open ((char *)0); + cdl_displayIRAF (cdl, argv[1], 1, 1, 1, 1); + cdl_close (cdl); + }\fR +.fi +.sp 0.5 +.LP +This program displays band one of an image named on the command line to the +server in frame one using the default 512x512 frame buffer, zscaling the +pixels to 8-bit values automatically. No error checking is performed to verify +that a connection was established or that the argument is a valid IRAF image. +Most programs will be more complex than this but it should be clear that +image display from client applications is a now trivial operation. + +.us "Synopsis" +.sp 0.5 +.nf + \f(CW#include "cdl.h"\fR + + \f(CWCDLPtr cdl_open (char *imtdev)\fR + \f(CWvoid cdl_close (CDLPtr cdl)\fR +.fi + +.NH +Server Connections +.LP + The \fBcdl_open()\fR procedure takes a single argument specifying the +type of connection to make to the server, this routine also initializes +the CDL package. If this is a NULL pointer the CDL will attempt to first +connect on a unix domain socket, if that fails the standard IRAF /dev/imt1* +fifo pipes are tried. The syntax for the \fIimtdev\fR argument is as follows: +.sp 0.5 + \f(CW<domain> : <address>\fR +.sp 0.5 +.LP +where <domain> is one of "\fBinet\fR" (internet tcp/ip socket), "\fBunix\fR" +(unix domain socket) or "\fBfifo\fR" (named pipe). The form of the address +depends upon the domain, as illustrated in the examples below. The address +field may contain up to two "%d" fields. If present, the user's UID will be +substituted (e.g. "unix:/tmp/.IMT%d"). The default connection if no imtdev +is specified is "unix:/tmp/.IMT%d", failing that a connection is attempted +on the /dev/imt1[io] named fifo pipes. +.NH 2 +Domain Sockets +.LP + Domain sockets are sockets created on the local host. The connection +is usually faster than an inet socket and comparable to a fifo. If the +socket name is specified with a '%d' field the client can be assured of a +unique socket name for each user allowing multiple clients to be run on the +same host by different users. +.LP +.us "Example" +.sp 0.5 +.nf +\f(CW + /* Connection to a local host using socket domain socket. */ + if ((cdl = cdl_open ("unix:/tmp/.IMT%d")) == NULL) { + fprintf (stderr, "cannot open domain socket connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +Named FIFO Pipes +.LP + This is the traditional approach, and the only one supported by +SAOimage (although recent versions contain support for sockets). Any named +fifo pipe may be used, the syntax for the \fIimtdev\fR string in this case is +.sp 0.5 + \fBfifo:\f(CW<input_fifo>\fB:\f(CW<output_fifo>\fR +.sp 0.5 +.LP +.us "Example" +.sp 0.5 +.nf + \f(CW/* Connection to a local host using named fifo pipes. */ + if ((cdl = cdl_open ("fifo:/dev/imt1i:/dev/imt1o")) == NULL) { + fprintf (stderr, "cannot open fifo pipe connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +Inet Sockets +.LP + Inet sockets are connections between hosts via a tcp/ip socket. +This permits connecting to the server over a remote network connection +anywhere on the Internet. +.LP +.us "Example" +.sp 0.5 +.nf + \f(CW/* Connection to a local host using socket 5137. */ + if ((cdl = cdl_open ("inet:5137")) == NULL) { + fprintf (stderr, "cannot open inet socket connection\\n"); + exit (1); + } + + /* Connection to a remote internet host using socket 5137. */ + if ((cdl = cdl_open ("inet:5137:foo.bar.edu")) == NULL) { + fprintf (stderr, "cannot open inet socket connection\\n"); + exit (1); + } \fR +.fi +.NH 2 +User-Defined Connections +.LP + Since IRAF V2.10.3 client tasks have been able to use an \fBIMTDEV\fR +unix environment variable to set the connection type, the syntax of this +variable is the same as described above. If the \fIcdl_open()\fR procedure +is called with a NULL pointer the IMTDEV environment variable will +automatically be checked. To explicitly use this (or any other) variable +in the client task the \fIcdl_open()\fR procedure may be called as +e.g. +.sp 0.5 +.nf + \f(CWif ((cdl = cdl_open (getenv("IMTDEV"))) == NULL) { + fprintf (stderr, "cannot open server connection\\n"); + exit (1); + }\fR +.fi +.NH +Image Display +.NH 2 +Overview of the Display Process +.LP + Basic image display is done most easily using the high-level +\fBcdl_displayIRAF()\fR, \fBcdl_displayFITS()\fR and \fBcdl_displayPix()\fR +procedures. These routines automatically define an image WCS, clear the +frame, set the frame buffer and center the image in the display. For most +applications these are all that will be needed, but the +\fBcdl_writeSubRaster()\fR procedure can also be used to display an image. +For example, to display one image in a mosaic or other cases where +the task needs low-level access to position the image or write raw pixel +values. +.LP + In these cases it is the responsibility of the client program to +prepare the server for display. The basic steps involved in displaying an +image include +.sp 0.5 +.TS +center; +lB lB +- - +l lI. +Operation CDL Procedure +Selecting the frame cdl_setFrame() +Clear the frame cdl_clearFrame() +Select the frame buffer configuration cdl_selectFB() +Set the frame buffer configuration cdl_setFBConfig() +Scale the image pixels to 201 display values cdl_zscaleImage() +Define the image WCS +Set the image WCS cdl_setWCS() +Compute the raster placement in the frame buffer +Write the pixels to the display cdl_writeSubRaster() +.TE +.sp 0.5 +In cases like a mosaic display obviously clearing the frame will only need +to be done once and a single WCS for the mosaic should be defined. For +simple display the high-level routines handle all of these steps for you, they +are included here as checklist of what must be considered when using the CDL +for low-level display. +.NH 2 +Displaying IRAF Images +.LP + The \fBcdl_displayIRAF()\fR procedure can be used to display an + IRAF OIF format image (i.e. images with a \fI.imh\fR extension) by +simply passing in the image name. Pixel files for the image must be +accessible from the local machine but can be in any directory, the HDR$ +syntax for the imdir is also recognized. Images may be three dimensional, +the \fIband\fR argument is used to select the image band to be displayed. +The \fIframe\fR and \fIfbconfig\fR arguments select the frame and frame +buffer size respectively, the special symbolic value \fBFB_AUTO\fR may be +used for the \fIfbconfig\fR argument to have the procedure automatically +select the frame buffer most appropriate for the image size. +If the \fIzscale\fR flag is greater than zero +the image will automatically be converted to 8-bit values using the zscale +mapping algorithm. The function returns a positive value if the image +cannot be accessed or displayed for any reason, an error message will be +printed. +.LP + The \fIcdl_isIRAF()\fR procedure returns a positive value if the +filename argument is recognized as an IRAF image, it does not check whether +the pixel file can be successfully accessed. For simply reading the pixels +from an IRAF image the \fBcdl_readIRAF()\fR procedure may be used. The +function returns a zero value and sets the output pixel array, image +dimensions and pixel size if successful, otherwise the function returns a +positive value. Note that +the output pixel values may need to be scaled before they can be displayed. + +.us "Synopsis" +.nf + \f(CWint cdl_displayIRAF (CDLPtr cdl, char *fname, int band, + int frame, int fbconfig, int zscale)\fR + \f(CWint cdl_isIRAF (char *fname)\fR + \f(CWint cdl_readIRAF (char *fname, int band, uchar **pix, + int *nx, int *ny, int *bitpix, char *title)\fR +.fi +.NH 2 +Displaying FITS Images +.LP + The \fBcdl_displayFITS()\fR procedure can be used to display a +\fIsimple\fR FITS image by name. A "simple" FITS file is assumed to be +one containing a single image and having no extensions. Other types of +FITS files may of course be displayed but the client will have to use other +means to import the pixels. FITS image extensions may be supported in a future +release of the CDL. The \fIframe\fR and \fIfbconfig\fR +arguments select the frame and frame buffer size respectively, +the special symbolic value \fBFB_AUTO\fR may be +used for the \fIfbconfig\fR argument to have the procedure automatically +select the frame buffer most appropriate for the image size. +If the +\fIzscale\fR flag is greater than zero the image will automatically be +converted to 8-bit values using the zscale mapping algorithm. The function +returns a positive value if the image cannot be accessed or displayed for +any reason, an error message will be printed. +.LP + The \fIcdl_isFITS()\fR procedure returns a positive value if the +filename argument is recognized as a simple FITS image. For simply reading +the image pixels the \fBcdl_readFITS()\fR procedure may be used. The +output pixel array, image dimensions and pixel size are returned if +successful otherwise the function returns a positive value. Note that +the returned pixel values may need to be scaled before they can be displayed. + +.us "Synopsis" +.nf + \f(CWint cdl_displayFITS (CDLPtr cdl, char *fname, int frame, + int fbconfig, int zscale)\fR + \f(CWint cdl_isFITS (char *fname)\fR + \f(CWint cdl_readFITS (char *fname, uchar **pix, int *nx, int *ny, + int *bitpix, char *title)\fR +.fi +.NH 2 +Displaying Raw Pixels +.LP + The \fBcdl_displayPix()\fR procedure can be used to display an +arbitrary array of pixels of any size. The \fInx\fR and \fIny\fR arguments +are the raster dimensions, and \fIbitpix\fR is the pixel size and has the +same meaning as the FITS BITPIX keyword. The \fIframe\fR and \fIfbconfig\fR +arguments select the frame and frame buffer size respectively, +the special symbolic value \fBFB_AUTO\fR may be +used for the \fIfbconfig\fR argument to have the procedure automatically +select the frame buffer most appropriate for the image size. +If the +\fIzscale\fR flag is greater than zero the image will automatically be +converted to 8-bit values using the zscale mapping algorithm. + +.us "Synopsis" +.nf + \f(CWint cdl_displayPix (CDLPtr cdl, uchar *pix, int nx, int ny, + int bitpix, int frame, int fbconfig, int zscale)\fR +.fi +.NH 2 +Frame Selection +.LP + Frame selection is normally done as an argument to one of the display +procedures, however frames may be explicitly selected using the +\fBcdl_setFrame()\fR procedure. This allows client programs to essentially +"blink" frames independently, as long as the server supports multiple frames. +The \fBcdl_getFrame()\fR procedure may be used to get the current frame +set in the server. + +.us "Synopsis" +.nf + \f(CWvoid cdl_setFrame (CDLPtr cdl, int frame)\fR + \f(CWvoid cdl_getFrame (CDLPtr cdl, int *frame)\fR +.fi +.NH 2 +Clearing the Display +.LP + The current display frame may be explicitly cleared using the +\fBcdl_clearFrame()\fR procedure. The frame is also cleared prior to +displaying new images by the procedures \fBcdl_displayPix()\fR, +\fBcdl_displayFITS()\fR, and \fBcdl_displayIRAF()\fR. + +.us "Synopsis" +.nf + \f(CWint cdl_clearFrame (CDLPtr cdl)\fR +.fi +.NH 2 +Frame Buffer Selection +.LP + The default frame buffer used is 512x512, other sizes may be +selected using the \fBcdl_setFBConfig()\fR procedure. To set the frame +buffer size the client passes the frame buffer number as defined in +the frame buffer configuration file (see below) while setting the image +WCS. It is important to note that the frame buffer isn't actually changed +in the server +until a subsequent \fBcdl_setWCS()\fR call, either directly or through +some other procedure which sets the WCS (e.g. one of the display procedures). +.LP + To get the size of the currently defined frame buffer the user +may call the \fBcdl_getFBConfig()\fR procedure. This returns not only +the current configuration number, but the size as well. To get the size +and any arbitrary configuration without actually setting it, the +\fBcdl_lookupFBSize()\fR procedure may be used. Any configuration not actually +defined in the frame buffer configuration file is returned as the default +512x512 size. + +.us "Synopsis" +.nf + \f(CWvoid cdl_setFBConfig (CDLPtr cdl, int configno)\fR + \f(CWvoid cdl_getFBConfig (CDLPtr cdl, int *configno, int *width, + int *height, int *nframes)\fR + \f(CWvoid cdl_lookupFBSize (CDLPtr cdl, int configno, int *width, + int *height, int *nframes)\fR +.fi +.NH 3 +Automatic Selection +.LP + The \fBcdl_selectFB()\fR procedure may be used to select the most +appropriate frame buffer to use for a given image size. If possible a frame +buffer the same size as the image will be used, otherwise one that is +larger will be chosen. Rather than simply selecting the first configuration +larger than the image, the procedure searches the entire configuration file +selecting the one with the least empty space in both dimensions. If the +\fIreset\fR flag is non-zero this frame is set automatically by the +procedure, otherwise the selected dimension is simply returned to the +calling program. In either case the new frame buffer will not take effect +until a new WCS is defined for the frame. + +.us "Synopsis" +.nf + \f(CWvoid cdl_selectFB (CDLPtr cdl, int nx, int ny, int *fb, + int *w, int *h, int *nf, int reset) +. +.NH 3 +The Frame Buffer Configuration File +.LP + The size of the frame buffer is not passed directly to the server +since this is not part of the communications protocol used. Instead, the +frame buffer number is sent as part of the WCS header packet. So that +both the server and client can know that a particular frame buffer number +corresponds to a specific size, a \fIframe buffer configuration file\fR +is used which both the client and server read. +.LP + The default configuration file is /usr/local/lib/imtoolrc, this can +be overridden by defining an \fBIMTOOLRC\fR environment variable naming +the file to be used, or by creating a .imtoolrc file in your home directory. +Since the server must also read the same file, this must be done before +starting both the client and server applications. +.LP +The format of the frame buffer configuration file is +.sp 0.5 + \fIconfigno nframes width height [extra fields]\fP +.sp 0.5 +e.g. +.sp 0.5 + 1 2 512 512 + 2 2 800 800 + 3 1 1024 1024 # comment + : : : : + +At most 128 frame buffer sizes may be defined, each configuration may define +up to 4 frames, configuration numbers need not be sequential but should be +in ascending order. +.NH 2 +Image WCS Description +.LP + The image WCS is defined using the \fBcdl_setWCS()\fR procedure. The +WCS defines a mapping between any linear coordinate system and the image +pixels, for our purposes we will discuss how the WCS is used to map the frame +buffer pixels to image coordinates. It is passed to the server in a string +of the form: +.sp 0.5 + Image_Name_String\\n a b c d tx ty z1 z2 zt +.sp 0.2 +where: +.sp 0.2 + X' = a*X + c*Y + tx + Y' = b*X + d*Y + ty + +The terms \fIa, b, c\fR, and \fId\fR define a rotation of the WCS wrt the pixel +coordinates, the \fItx\fR and \fIty\fR values are translation terms. The +remaining three values define the intensity mapping of the display pixels; +\fIz1\fR is the minimum pixel value used in the transformation, \fIz2\fR is +the maximum value, and \fIzt\fR defines the type of transformation used (0 for +none, 1 for linear, 2 for log10). +.LP + The WCS may be set explicitly by the calling program or a default +appropriate for the image will be set automatically by the high-level +display procedures, otherwise a WCS for the +frame buffer is defined (i.e. returned coordinates are frame buffer coords). +As an example of how the WCS is defined, the default WCS for an image +IMX x IMY pixels in a frame buffer FBX x FBY pixels is defined as +.sp 0.5 +.nf +\f(CW a = 1.0; /* no rotation */ + b = 0.0; + c = 0.0; + d = -1.0; + tx = (IMX / 2) - (FBX / 2) + 1; /* center in FB */ + ty = (FBY / 2) + (IMY / 2); + z1 = z1; /* zscale values */ + z2 = z2; + zt = 1;\fR +.fi + +.us "Synopsis" +.nf + \f(CWint cdl_setWCS (CDLPtr cdl, char *name, char *title, + float a, float b, float c, float d, float tx, float ty, + float z1, float z2, int zt)\fR + \f(CWint cdl_getWCS (CDLPtr cdl, char *name, char *title, + float *a, float *b, float *c, float *d, float *tx, float *ty, + float *z1, float *z2, int *zt)\fR +.fi +.NH 2 +Image Colormaps +.LP + The IIS protocol used does not permit the downloading of user-defined +colormaps, all images are loaded as raw grayscale values according to the +XImtool colormap model used by currently supported servers. All images +containing private colormaps or more than the 201 grayscale values defined +by the Imtool colormap model must either convert the image to 8-bit +grayscale values by calling the CDL zscale procedures (\fBcdl_computeZscale()\fR +and \fBcdl_zscaleImage()\fR) or scale the images in client code with +user LUTs. The CDL zscale procedures scale image to 201 grayscale values +so that they are displayed to the full 8-bit range, user LUT +transformations or user code for converting to grayscale from a private +colormap procedures should do the same. +.NH 3 +Imtool Color Model +.LP + The IMTOOL color model defines at most 201 grayscale values for use in +displaying the image, a set of 16 static colors are also defined for overlay +graphics. Pixel values sent to the server should be already scaled to this +model, i.e. the image pixels should be scaled to the range 1-200, values +above this will either represent the overlay colors or will wrap around to +8-bit values. The CDL zscale procedures will automatically scale +arbitrary pixel values to use this color model, the overlay procedures +assume color values are defined for the static color range 201-217 but any +8-bit value may be used. +.LP + A summary of the color model values is included below: +.TS +center; +lB lB cB cB lB lB +l l c c l l. +Color Description Color Description +0 Background 208 Cyan +1 - 200 Image data 209 Magenta +201 Cursor (white) 210 Coral +202 Background (black) 211 Maroon +203 White 212 Orange +204 Red 213 Khaki +205 Green 214 Orchid +206 Blue 215 Turquoise +207 Yellow 216 Violet +217 Wheat 218-255 undefined +.TE +.NH 2 +ZScale Intensity Mapping +.LP + Since most display servers are only capable of displaying 8-bit pixel +values, images with more than 8-bits per pixel must be scaled prior to +display. For linear transformations this is typically done using a simple +conversion of the image min/max values to the 256 grayscale values, however +this doesn't produce very good results when most pixel values are near one +of the extremes (usually the image min for astronomical images). To solve +this IRAF uses a \fIzscale\fR mapping algorithm where a sampling grid is used +to approximate the image min/max values rather than computing it directly, +a line is then fit to these sample pixels to determine the optimal +transformation to the display values. This is not only more efficient but +maps the most common pixel values to the display range producing a better image. +.LP + The CDL has several routines for doing the same transformation: the +\fIcdl_computeZscale()\fR procedure is used to compute the optimal \fIz1\fR +and \fIz2\fR +values (the min/max used for the zscale transform) for an image of any pixel +size. The \fIbitpix\fR argument is the number of bits-per-pixel for the input +array and has the same meaning as for the FITS \fIBITPIX\fR keyword. To then +transform the image using these values (or user-defined values) the +\fIcdl_zscaleImage()\fR procedure is used. The input pixels are modified by +this procedure but the array is not reallocated to the smaller size needed by +an 8-bit array. The \fBcdl_setSample()\fR and \fBcdl_setSampleLines()\fR +procedures can be used to change the sampling grid and number of sample +points (the default is 600 points on 5 lines). The \fBcdl_setContrast()\fR +procedure can be used to change the default contrast adjustment to the slope +used in the transformation (the default is 0.25). If a value of zero is +given then the minimum and maximum of the intensity sample is used as the +z1/z2 value. +.LP + Each of the CDL display procedures has a \fIzscale\fR flag to +automatically scale the pixels prior to display. Applications wishing to +set their own z1/z2 values will need to call the zscale procedures and +disable this flag. By default cdl_zscaleImage() will use a linear transform, +the \fBcdl_setZTrans()\fR procedure may be used to change this. Acceptable +values are \fBCDL_UNITARY\fR (zero) for a unitary transform, \fBCDL_LINEAR\fR +(one) for a linear transform, or \fBCDL_LOG\fR (two) for a log10 transform. + +.us "Synopsis" +.nf + \f(CWvoid cdl_computeZscale (CDLPtr cdl, uchar *pix, int nx, + int ny, int bitpix, float *z1, float *z2)\fR + \f(CWvoid cdl_zscaleImage (CDLPtr cdl, uchar **pix, int nx, + int ny, int bitpix, float z1, float z2)\fR + + \f(CWvoid cdl_setZTrans (CDLPtr cdl, int ztrans)\fR + \f(CWvoid cdl_getZTrans (CDLPtr cdl, int *ztrans)\fR + \f(CWvoid cdl_setZScale (CDLPtr cdl, float z1, float z2)\fR + \f(CWvoid cdl_getZScale (CDLPtr cdl, float *z1, float *z2)\fR + + \f(CWvoid cdl_setSample (CDLPtr cdl, int nsample)\fR + \f(CWvoid cdl_setSampleLines (CDLPtr cdl, int nlines)\fR + \f(CWvoid cdl_setContrast (CDLPtr cdl, float contrast)\fR + \f(CWvoid cdl_getSample (CDLPtr cdl, int *nsample)\fR + \f(CWvoid cdl_getSampleLines (CDLPtr cdl, int *nlines)\fR + \f(CWvoid cdl_getContrast (CDLPtr cdl, float *contrast)\fR + +.fi +.NH 2 +Image Hardcopy +.LP + While most servers include some hardcopy capability of their own the +CDL provides two procedures for creating hardcopy images from the client +(e.g. for a batch processing application). The client will typically read +back the entire image, frame buffer, of just a subraster and pass those +pixels to the print procedure. Images will be written as Pseudocolor +Postscript (to preserve the overlay marker colors) and may be disposed to +a file using the \fBcdl_printPixToFile()\fR procedure or to any command string +accepting input from \fIstdin\fR (typically just an 'lpr' command) by using +the \fBcdl_printPix()\fR procedure. + +.us "Synopsis" +.nf + \f(CWint cdl_printPix (CDLPtr cdl, char *cmd, uchar *pix, int nx, + int ny, int annotate)\fR + \f(CWint cdl_printPixToFile (CDLPtr cdl, char *fname, uchar *pix, + int nx, int ny, int annotate)\fR +.fi +.NH 2 +Image Cursor +.LP + The image cursor is read using the \fBcdl_readCursor()\fR procedure. +The returned value is the cursor \fI(x,y)\fR position as floating point value +in terms of the currently define image WCS. Note that this position must +be converted to integer if it is to be used in one of the marker procedures. + +.us "Synopsis" +.nf + \f(CWint cdl_readCursor (CDLPtr cdl, int sample, float *x, + float *y, int *wcs, char *key)\fR +.fi + +The \fIwcs\fR argument is defined as + +.nf + wcs = frame * 100 + wcs_number +.fi + +(where wcs_number=0 for frame buffer coords and 1 for image coords). So, +you can get the frame as simply + +.nf + frame = (int) (wcs / 100) +.fi + +.NH 3 +Cursor Sampling +.LP + If the cdl_readCursor() \fIsample\fR flag is non-zero the \fIlogical +image cursor\fR position is returned immediately, otherwise the display server +will wait for a keystroke before returning the cursor position. The logical +image cursor is the last value set by a \fIcdl_setCursor()\fR call or the last +value returned by a \fIcdl_readCursor()\fR call. When sampling the cursor +position the keystroke value is undefined. +.NH 2 +Image Readout +.LP + The CDL maintains an internal knowledge of where an image has been +positioned if it was displayed using one of the \fIcdl_display*\fR procedures. +The \fBcdl_readImage()\fR procedure may be used to read back the entire image +pixels from the server ignoring the region of the frame buffer outside of +the image, the \fBcdl_readFrameBuffer()\fR procedure will read back the +contents of the entire frame buffer. The dimensions of the array are returned +in the \fInx\fR and \fIny\fR arguments. + +.us "Synopsis" +.nf + \f(CWint cdl_readImage (CDLPtr cdl, uchar **pix, int *nx, + int *ny)\R + \f(CWint cdl_readFrameBuffer (CDLPtr cdl, uchar **pix, + int *nx, int *ny)\R +.fi +.NH 2 +Subraster I/O +.LP + The \fBcdl_writeSubRaster()\fR procedure is used to write an arbitrary +raster to any location in the display. Similarly the +\fBcdl_readSubRaster()\fR procedure is used to read back an arbitrary raster. +When an image has previously been displayed the subraster position is given +in image coordinates (e.g. when writing a subregion of edited pixels), +otherwise the position is in frame buffer coordinates (e.g. to display +multiple images per frame you should use the cdl_writeSubRaster() call). +See the section on \fIMarker Coordinates\fR for further explanation of the +coordinate systems used. + +.us "Synopsis" +.nf + \f(CWint cdl_writeSubRaster (CDLPtr cdl, int lx, int ly, int nx, + int ny, uchar *pix)\fR + \f(CWint cdl_readSubRaster (CDLPtr cdl, int lx, int ly, int nx, + int ny, uchar **pix)\fR +.fi +.NH +Graphics Overlay +.NH 2 +Marker Coordinates +.LP + All marker positions are assumed to be image pixel coordinates, +although there is no requirement that the position be on the image itself. +When an image WCS is defined (using the CDL display procedures or explicitly) +the origin of the coordinates used shifts from the frame buffer lower-left +to the lower-left of the image as displayed in the frame. Negative +positions are allowed and will either refer to empty pixels if the frame +buffer is larger than the image, or pixels outside the frame buffer +boundaries. Raster I/O requests will be clipped to the frame buffer +endpoints, a request completely outside the frame buffer is an error. +.NH 2 +Mapping a Previously Displayed Image +.LP + Ideally any application wishing to draw markers on an image will have +also displayed that image, however the \fBcdl_mapFrame()\fR procedure may +be used to map the requested frame for marker overlay. It does this by +reading the WCS defined for that frame and assumes an image has been +displayed and centered in the frame buffer, then resets the internal CDL +image position. If no image has been displayed the frame buffer is mapped +directly. This can be used for example to map an empty frame for displaying +just the markers without an image, or for mapping another frame's WCS for +use on the current display. The frame is not changed by the procedure call +however the current WCS \fIis\fR changed. + +.us "Synopsis" +.nf + \f(CWint cdl_mapFrame (CDLPtr cdl, int frame)\fR +.fi +.NH 2 +Marking a Coordinate File +.LP + Since a common function for programs will be to mark a list of +coordinates, the high-level \fBcdl_markCoordsFile()\fR procedure is +provided to make this easier. The input parameters include a filename +expected to contain a set of (x,y) points (real or integer), and arguments +specifying the point type, size and color to draw. If the \fIlabel\fR +argument is positive each marker point will be labeled with it's relative +number in the file. The size, type and color arguments all have the same +meaning as for the \fBcdl_markPoint()\fR procedure described below. + +.us "Synopsis" +.nf + \f(CWint cdl_markCoordsFile (CDLPtr cdl, char *fname, int type, + int size, int color, int label)\fR +.fi +.NH 2 +Marker Colors +.LP + Markers may be drawn using any 8-bit value, in order to use the +static overlay colors the color must be in the range 201-217 (see above for +notes on the XImtool color model). The "\fIcdl.h\fR" include file +for C programs, the "\fIcdlftn.inc\fR" include for fortran programs, +or the "\fIcdlspp.h\fR" include for SPP programs, defines the following +symbolic constants for each of the static overlay colors: +.sp 0.5 +.TS +center; +lB l c c lB l. +C_BLACK 202 C_CORAL 210 +C_WHITE 203 C_MAROON 211 +C_RED 204 C_ORANGE 212 +C_GREEN 205 C_KHAKI 213 +C_BLUE 206 C_ORCHID 214 +C_YELLOW 207 C_TURQUOISE 215 +C_CYAN 208 C_VIOLET 216 +C_MAGENTA 209 C_WHEAT 217 +.TE +.NH 2 +Marker Types +.LP + Currently supported marker types include: \fI +.TS +center; +l l l l l. +Point Line Box Polyline Polygon +Circle Circular Annuli Ellipse Elliptical Annuli Text +.TE +.LP + \fRThe "\fIcdl.h\fR" include file for C programs, the +"\fIcdlftn.inc\fR" include for fortran programs, or the "\fIcdlspp.h\fR" +include file SPP programs, defines the following symbolic constants for +each of the defined \fIPoint\fR marker types: +.TS +center; +lB r c c lB r. +M_FILL 1 M_CIRCLE 64 +M_POINT 2 M_STAR 128 +M_BOX 4 M_HLINE 256 +M_PLUS 8 M_VLINE 512 +M_CROSS 16 M_HBLINE 1024 +M_DIAMOND 32 M_VBLINE 2048 +.TE +.LP + Point markers are drawn using the \fBcdl_markPoint()\fR procedure, +point types may be logically \fIOR\fR'd to create composite markers, closed +shapes such as a circles, diamonds, or squares may be \fIOR\fR'd with the +M_FILL flag to flood-fill the point with the current overlay color. +.NH 3 +Point +.LP + The \fBcdl_markPoint()\fR procedure is used to mark a specific point +on the image using one of the marker types listed above. The marker is +centered at the coordinates specified by the \fIx\fR and \fIy\fR arguments, +\fItype\fR is an integer flag indicating what kind of marker to draw and +may be a composite type by logically ORing two or more marker types. +\fISize\fR is the width and height of the marker measured in pixel unxits, +and \fIcolor\fR is the color used to draw the marker. If the \fInumber\fR +argument is greater than zero that number will be drawn next to the point +as a label, creating text labels for point markers can be done using the +\fIcdl_markPointLabel\fR procedure. +.LP + Most marker names are fairly obvious but several are worth special +mention: The M_DIAMOND, M_CIRCLE and M_BOX marker types may be logically +\fIOR\fRed with the M_FILL flag to produce a filled marker type. Unless +\fIOR\fRd with the M_POINT flag all point markers will leave the center +pixel unchanged. The M_HLINE and M_VLINE markers are most useful in +astronomical applications to mark an individual star, they are horizontal +and vertical lines respectively with a gap in the middle third of the marker +(the M_HBLINE and M_VBLINE are identical but with a width of 3 pixels). +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPoint (CDLPtr cdl, int x, int y, int number, + int size, int type, int color)\fR + \f(CWint cdl_markPointLabel (CDLPtr cdl, int x, int y, char *label + int size, int type, int color)\fR +.fi +.NH 3 +Line +.LP + The \fBcdl_markLine()\fR procedure is used to draw a line of the +specified color between points (\fIxs,ys\fR) and (\fIxe,ye\fR). +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markLine (CDLPtr cdl, int xs, int ys, int xe, int ye, + int color)\fR +.fi +.NH 3 +Box +.LP + The \fBcdl_markBox()\fR procedure is used to draw a box of the +specified color with endpoints specified by (\fIlx,ly\fR) and (\fIux,uy\fR). +If the \fIfill\fR flag is set the box will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markBox (CDLPtr cdl, int lx, int ly, int ux, int uy, + int fill, int color)\fR +.fi +.NH 3 +Circle +.LP + The \fBcdl_markCircle()\fR procedure is used to draw a circle of the +specified color with a center at (\fIx,y\fR) and radius \fIradius\fR. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markCircle (CDLPtr cdl, int x, int y, int radius, + int fill, int color)\fR +.fi +.NH 3 +Polyline +.LP + The \fBcdl_markPolyline()\fR procedure is used to draw a line +connecting the \fInpts\fR points specified by the \fIxpts\fR and +\fIypts\fR array in the desired \fIcolor\fR. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPolyline (CDLPtr cdl, int *xpts, int *ypts, + int npts, int color)\fR +.fi +.NH 3 +Polygon +.LP + The \fBcdl_markPolygon()\fR procedure is used to draw a closed +polygon consisting of \fInpts\fR vertices specified by the \fIxpts\fR and +\fIypts\fR array in the desired \fIcolor\fR. The last point in the array +will automatically be connected to the first point by the procedure. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markPolygon (CDLPtr cdl, int *xpts, int *ypts, + int npts, int fill, int color)\fR +.fi +.NH 3 +Ellipse +.LP + The \fBcdl_markEllipse()\fR procedure is used to draw an ellipse of the +specified color with a center at (\fIx,y\fR) and semimajor-axis \fIxrad\fR +and semiminor-axis \fIyrad\fR pixels long. A rotation angle for the ellipse +may be specified by passing a non-zero \fIangle\fR argument, the angle is +measured in degrees from the positive x-axis. +If the \fIfill\fR flag is set the circle will be filled with the marker color. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markEllipse (CDLPtr cdl, int x, int y, int xrad, + int yrad, float ang, int fill, int color)\fR +.fi +.NH 3 +Circular Annuli +.LP + The \fBcdl_markCircAnnuli()\fR procedure is used to draw +\fInannuli\fR circles separated by \fIsep\fR pixels each. The circle is +centered at (\fIx,y\fR) with an initial radius of \fIradius\fR pixels. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markCircAnnuli (CDLPtr cdl, int x, int y, int radius, + int nannuli, int sep, int color)\fR +.fi +.NH 3 +Elliptical Annuli +.LP + The \fBcdl_markEllipAnnuli()\fR procedure is used to draw +\fInannuli\fR ellipses separated by \fIsep\fR pixels each. The ellipse is +centered at (\fIx,y\fR) with an initial semimajor and semiminor axis +specified by the \fIxrad\fR and \fIyrad\fR arguments. Each ellipse will +be optionally rotate by an \fIangle\fR degrees as measured from the positive +x-axis. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markEllipAnnuli (CDLPtr cdl, x, y, xrad, yrad, ang, + int nannuli, int sep, int color)\fR +.fi +.NH 3 +Text +.LP + The \fBcdl_markText()\fR procedure is used to draw a text string +specified by \fIstr\fR argument with an initial position at (\fIx,y\fR) +and optionally rotated by \fIangle\fR degrees as measured from the positive +x-axis. The default \fIsize\fR is 1.0 and is approximately a 6x13 font, +the font size may be scaled by any fractional amount. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_markText (CDLPtr cdl, int x, int y, char *str, + float size, float angle, int color)\fR +.fi +.NH 2 +Text Fonts +.LP + The \fBcdl_setFont()\fR procedure is used to choose between one +of four available fonts as the text marker default: Roman, Greek, Futura, +Bold and Times respectively. By default the Roman font will be used. +The width of the lines used to draw the text may also be set. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWvoid cdl_setFont (CDLPtr cdl, int font)\fR + \f(CWvoid cdl_setTextWidth (CDLPtr cdl, int width)\fR +.fi +.sp 0.5 +A complete listing of the Greek character mappings can be found in the +file 'greek.ps' in the 'doc' subdirectory of the CDL distribution. + The \fIRoman\fR font is the font implemented in the original version +of the CDL and works well for most applications. Both the \fIGreek\fR and +\fITimes\fR fonts are hi-resolution fonts which work best for larger frame +buffers but can produce publication quality text. The \fIFutura\fR font +is a simpler font which can produce better results than the default on small +size frame buffers. A \fIBold\fR font automatically increases the text line +width by one pixel over the current setting and may be used with any font. +.NH 3 +In-Line Font Changes +.LP + Text markers are drawn using the font selected with +the \fIcdl_setFont()\fR +routine, however fonts may be change within a string itself (e.g. to set +a Greek character) using a \\f escape sequence. The escape is followed +by the character 'R' to set a Roman font, 'G' for Greek, 'F' for +futura, 'B' for bold +and 'T' for Times. Any number of escapes are permitted within a string, +the font change will remain in effect until it is changed, or the end of +string at which point any subsequent strings will again be drawn with the +default font. Additionally a 'P' in the escape sequence will change the +font to the one previously used, whatever that may be. +.LP + The CDL also supports a sub/superscripting of text which can only +be done with the font escapes. In this case the escape character followed by +a 'U' produces a superscript and a 'D' produces a subscript. The changes may +be nested permitting several levels of sub/superscripts, these escapes may +also be used in conjunction with a font change to cause the sub/superscript +to be drawn with a different font. A superscript escape will remain in +effect until the end of the string or a \\fD escape is seen. Similarly a +subscript remains in effect until the end of the string of a \\fU escape. +Sub/superscripted text is drawn using a smaller font size, there is presently +no way to specify a different size for the sub/superscripted text. +.TS +center; +cb s +l l. +Summary of Font Escapes +.sp 0.5 +\\\\fR change to Roman font +\\\\fG change to Greek font +\\\\fF change to Futura font +\\\\fT change to Times font +\\\\fB change to bold font +\\\\fP change to previous font +\\\\fU begin relative superscripted text +\\\\fD begin relative subscripted text +.TE +.NH 2 +Line Widths and Styles +.LP + The \fBcdl_setLineWidth()\fR procedure can be used to set the line +width used to draw polygon or polyline markers, point markers will not +be affected. The \fBcdl_setLineStyle()\fR procedure is used to set a line +style other than solid. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWvoid cdl_setLineWidth (CDLPtr cdl, int width)\fR + \f(CWvoid cdl_setLineStyle (CDLPtr cdl, int style)\fR +.fi +.LP + \fRThe "\fIcdl.h\fR" include file for C programs, the +"\fIcdlftn.inc\fR" include for fortran programs, or the "\fIcdlspp.h\fR" +include file SPP programs, defines the following symbolic constants for +each of the defined line styles: +.TS +center; +lB r c c lB r. +L_SOLID 0 L_DASHED 1 +L_DOTTED 2 L_DOTDASH 3 +L_HOLLOW 4 L_SHADOW 5 +.TE +.LP + The \fIhollow\fR line style is drawn with a linewidth of five pixels, +two pixels of color, a black line, and two pixels of color. It is best +used when the marker will traverse extreme changes in brightness, due to the +thickness of the line it may work best with larger frame buffers. The +\fIshadow\fR linestyle is drawn as two pixels of color and two pixels of black +and should be used for similar brightness variations, however it effectively +shows up as a line only two pixels wide and may be preferred for medium or +smaller frame buffers. +.LP + The three dashed linestyles are drawn using "gap" spacings of 5 +pixels in between line segments. Whether or not these gaps are resolved +depends on the size of the frame buffer being used and the magnification +used in the display server. By default they should resolve completely +using frame buffers up to 1024x1024 pixels, or magnification factors +displaying 1024x1024 pixels. If larger sizes are needed the image should +be subsampled prior to display to maintain the marker resolution needed +for these linestyles. + +.NH 2 +Deleting Markers +.LP + When markers are drawn the underlying subraster is first saved to +an internal structure, erasure is done by simply redisplaying the saved +raster. Problems can arise however when markers overlap; when deleting a +marker that is \fIunder\fR another marker the original pixels can overwrite +the pixels of the marker on top. This is an unfortunate side effect of the +simple scheme used in this version of the package, users can call the +\fBcdl_redrawOverlay()\fR procedure to help clean up any artifacts left +behind. +.NH 3 +Individual Markers +.LP + The \fBcdl_deleteMark()\fR procedure is used to delete a single +marker from the display(). The (\fIx,y\fR) argument is either the center +position of the marker if that is know by the application, more typically +it will be an approximate position. In the latter case the marker whose +center is closest to this position will be deleted. For markers with no +defined center the distance used to decide if the marker should be +deleted is the distance from the argument position to the edge of the +marker. For example, distance from a box or polygon is measured as the +distance from to one of the sides, for text it is the distance to the +start of the text string. There is no way to \fIun\fRdelete a marker other +than to redraw it. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_deleteMark (CDLPtr cdl, int x, int y)\fR +.fi +.NH 3 +The Entire Overlay +.LP + To erase all markers currently displayed use the +\fBcdl_clearOverlay()\fR procedure. Markers are erased in the reverse order +they were drawn to help reduce the chance that overlaying markers will leave +stray pixels. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_clearOverlay (CDLPtr cdl)\fR +.fi +.NH 2 +Redraw +.LP + The \fBcdl_redrawOverlay()\fR procedure can be used to redraw all +markers currently in the display list. This is sometimes needed when +subraster I/O procedures are used to redisplay subregions and overwrite +existing markers. +.sp 0.5 +.us "Synopsis" +.nf + \f(CWint cdl_redrawOverlay (CDLPtr cdl)\fR +.fi +.NH +ANSI C Function Prototypes +.LP + The current release of CDL provides full ANSI C function prototypes +for all public and private procedures. By default these will not be used +even on systems with native ANSI compilers, however. +To make use of the CDL prototypes users will +need to define the macro \fBCDL_ANSIC\fR either when compiling the program +(using the -D option to the compiler), +or as a definition in the program source preceding the 'cdl.h' include +directive. +.LP + For example, +.sp 0.5 +.nf + \f(CW#define CDL_ANSIC + #include "cdl.h" + : + main (int argc, char **argv) + :\fR +.fi +.sp 0.5 +or when compiling using something like +.sp 0.5 +.nf + \f(CWcc -DCDL_ANSIC client.c libcdl.a -lm\fR +.fi +.sp 0.5 + Note that when using CDL_ANSIC to build the client program it is +also required that the CDL itself be built in the same way to avoid +confusing FPE errors. Similarly, when building client tasks that \fIdo +not\fR +use CDL_ANSIC you must use a version of the library that has not been +compiled with prototypes. +.LP + The reason is that the float args to the CDL procedures in the +library, or in your task calls, are +promoted to doubles when compiling those procedures, but may only be passed as +floats in your code (or as double where the CDL is expecting float). +This means the argument stack is off by 4 bytes for each float arg and +the values interpreted by the CDL procedure will be corrupted. +If you're going to use the prototypes you'll +need to edit the CDL Imakefile to define "-DCDL_ANSIC" in the EXTRA_DEFINES +so it will use the prototypes and everything will line up. You will then +need to rebuild the libcdl.a as well as relink your program. +.NH +Fortran Language Binding Notes +.LP + The Fortran language binding routines are implemented in C but +should be accessible from any fortran program as though they were real +fortran subroutines. The calling sequences are the same as with the C +library routines with the following exceptions: +.IP +\(bu The CDL package pointer is maintained internally so no 'cdl' pointer is +passed in the fortran interface. +.IP +\(bu All routines which are integer procedures in the C interface return an +extra 'ier' argument to contain the error flag. All Fortran functions are +implemented as subroutines. +.IP +\(bu The procedure names are the same except that \fIcdl_\fR has been +replaced with \fIcf\fR in the fortran binding. If your compiler is +case-sensitive then use all lower case letters. +.LP +The binding has been tested on a number of different platforms without +problems. The procedure names haven't been restricted to the traditional +6-character fortran names since most modern compilers can handle longer +names, if yours isn't one of them contact \fIiraf@noao.edu\fR for help +in changing the names. +.LP + Since the CDL is implemented as a set of C routines, the one aspect +that cannot be overlooked in the fortran binding is the between Fortran and +C storage order for arrays. In most cases this will not be a problem since +the CDL routines are just passing around pointers even if they live for a +short while in a fortran program. The problem comes when using the fortran +program to read the arrays, for example in using the array returned by the +\fBcfreadIRAF()\fR procedure, or when passing in arrays for display that +originated in the user's fortran code. In these cases the array \fBmust\fR +be transposed to be interpreted correctly. It was assumed that in most +applications arrays returned by CDL procedures would be immediately passed +to other CDL procedures so having the binding routines +transpose the array to/from +Fortran storage order was unnecessarily inefficient. This may be changed in +later releases if required. + +.NH +SPP Language Binding Notes +.LP + The SPP language binding is experimental and is intended to provide +a way to quickly prototype tasks, it should not be used in production code +as it may not be as portable as the rest of the task. In essence this +binding is a layer on top of the Fortran binding since most IRAF platforms +still use Fortran as the intermediate code. The calling sequences are the +same as with the Fortran library routines with the following caveats: +.IP +\(bu The 'cdlspp.h' SPP include file is required by all files which call +CDL routines. The binding names are actually SPP macros to resolve the +current 6 character limit on procedure names. +.IP +\(bu All character string arguments must be dimensioned to at least SZ_FNAME +characters in length. +.IP +\(bu The CDL package pointer is maintained internally so no 'cdl' pointer is +passed in the fortran interface. +.IP +\(bu All routines which are integer procedures in the C interface return an +extra 'ier' argument to contain the error flag. All SPP functions are +implemented as subroutines. +.IP +\(bu On HPUX or IBM RS6000 systems the 'cdlspp.h' file must be edited to +remove the trailing underscores from the procedure name macros. This is +because on these platforms the fortran compiler will not append an +underscore to the SPP symbols as it does on other platforms. + +.NH +IIS Protocol Description +.LP + The communications protocol used by the CDL and servers such as +\fIXImtool\fR and \fISAOimage\fR, is a slightly modified version of that used +by the IIS Model 70. All operations are initiated by sending a header +packet containing a \fIthing id\fR (tid) and \fIsubunit\fR selecting the +function to be performed, optionally followed by data up to 32K bytes long. +The IIS header packet used is defined as +.nf + \f(CWstruct iism70 { + short tid; + short thingct; + short subunit; + short checksum; + short x, y, z; + short t; + };\fR +.fi + +The \fIthing count\fR field contains the negative number of bytes of data +that will be sent following the header packet. The IIS header checksum is +computed as +.nf +\f(CW + checksum = 0177777 - (tid + subunit + thingct + x + y + z + t); +\fR +.fi +The four IIS registers are set differently depending on the operation, a +summary of the header packets for each operation is summarized below. + +.KS +.ce 1 +\fBIIS Header Packet Summary\fR +.TS +tab(:); +c c c c c c c c c. +:TID:Subunit:Thingct:X:Y:Z:T:Data +.T& +l | l | l | c | c | c | l | l | l |. +:_:_:_:_:_:_:_:_ +Read Data:IIS_READ\fB|\fPPACKED:MEMORY:-nbytes:x:y:frame:-:nbytes +Write Data:IIS_WRITE\fB|\fPPACKED:MEMORY:-nbytes:x:y:frame:-:nbytes +Read Cursor:IIS_READ:IMCURSOR:-:-:-:-:-:- +Write Cursor:IIS_WRITE:IMCURSOR:-:x:y:wcs:-:- +Set Frame:IIS_WRITE:LUT\fB|\fPCOMMAND:-1:-:-:-:-:2 +Write WCS:IIS_WRITE\fB|\fPPACKED:WCS:-N:-:-:frame:fb:N +Read WCS:IIS_READ:WCS:-:-:-:frame:wcs:320 +Erase Frame:IIS_WRITE \fB|\fP fb:FEEDBACK:-:-:-:frame:-:- +:_:_:_:_:_:_:_:_ +.TE +.KE +.TS +l l l. +Where nbytes = number of bytes expected or written + x = x position of operation in frame buffer coords + y = y position of operation in frame buffer coords + frame = 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 +.TE +.LP +TID fields can be logically OR'd with the PACKED flag indicating the number +of data bytes is exactly \fIthingct\fR bytes long, otherwise \fIthingct\fR +must be specified as half the number of data bytes. In a cursor read, if +the IIS_READ flag is OR'd with IMC_SAMPLE the logical cursor position (i.e. +the last value read or set) is returned immediately, otherwise the server +will wait for a keystroke to be hit before returning a string containing the +(x,y) position, wcs of the read, and the keystroke. When setting the frame +you must send a short integer in the data containing the frame selected. + +.NH +VXIMTOOL Proxy/Display Server Usage +.LP +\fIVXIMTOOL\fR is a image display server process much like \fIXIMTOOL\fR, +except that all it normally does is respond to datastream requests +to read and write to internal frame buffers maintained as arrays in memory. +Multiple frame buffers and frame buffer configurations are supported. It +can be used to debug CDL programs by printing out the +protocol packets received, or can simply be used as a dummy server in cases +where no image display is really needed. By enabling the \fI-proxy\fR +flag the server can also be used to repeat the datastream requests to a +list of other servers, effectively splitting the image display to a number +of other servers. See the \fIvximtool\fR man page for details on other +command-line arguments and usage. +.LP +The program was originally intended as a debugging tool, either in the +development of CDL clients directly or in cases where the display may +need to go to separate screens as part of a larger project. For example, +engineers may wish to "eavesdrop" on the system by viewing images displayed +by CDL clients used as part of a data acquisition system. It can also be +used as a memory-only display server for CDL clients which need to be run +in the background as part of a pipeline processing system requiring a +frame buffer for image marking. +.LP +In proxy mode the program acts as a relay for the IIS datastream packets, +sending image data, frame requests, etc. to a list of other servers specified +on the command line. The effect of this is to allow a client to display to +this program which then re-displays to each of the other named servers. +Of course CDL clients can also do this internally by opening multiple +connections, using \fIvximtool\fR in proxy mode adds the functionality to +programs which may use this feature only ocasionally. A maximum of 8 servers +may be named, they may be either on the local host or a remote machine +and connections can be established using either fifos or sockets. See +above or the \fIvximtool\fR man page for details on how to specify the +server connection. +.LP +The current implementation has a few restrictions users should keep in mind: +.IP +\(bu The time to display an image or perform any output operation scales +with the number of connected hosts. Each IIS packet is forwarded to each +host in turn before processing the next input packet, and connection over a slow +network will delay the entire process. +.IP +\(bu Cursor and image readback are done by sending the request \fIonly\fR to +the first server named on the command line. This is done to avoid forcing +a cursor mode on all servers which cannot be terminated when a response is +received from only one server, and means that the first server named should +be the one used to control interactive sessions. The remaining servers +however can still respond to cursor requests from other applications +connected to that server on another channel. +.IP +\(bu All named servers must be running prior to starting the proxy server. +The connection to the remote servers is established when this task is first +run and if no server is running that connection will be ignored. The task will +exit if no remote servers can be found for display. +.IP +\(bu Any connected server that shuts down while the proxy server is running +is likely to cause the program to crash on the next display. +.bp +.NH +C Interface Summary +.LP +.in 0.5i +#include "\fBcdl.h\fR" +.in -0.5i + +.TS +center; +r l. +CDLPtr \fBcdl_open\fR (imtdev) +int \fBcdl_displayPix\fR (cdl, pix, nx, ny, bitpix, frame, fbconfig, zscale) +char \fBcdl_readCursor\fR (cdl, sample, x, y, wcs, key) +int \fBcdl_setCursor\fR (cdl, x, y, wcs) +int \fBcdl_setWCS\fR (cdl, name, title, a, b, c, d, tx, ty, z1, z2, zt) +int \fBcdl_getWCS\fR (cdl, name, title, a, b, c, d, tx, ty, z1, z2, zt) +void \fBcdl_setFrame\fR (cdl, frame) +int \fBcdl_clearFrame\fR (cdl) +void \fBcdl_close\fR (cdl) + +int \fBcdl_displayIRAF\fR (cdl, fname, band, frame, fbconfig, zscale) +int \fBcdl_isIRAF\fR (fname) +int \fBcdl_readIRAF\fR (fname, band, pix, nx, ny, bitpix, title) + +int \fBcdl_displayFITS\fR (cdl, fname, frame, fbconfig, zscale) +int \fBcdl_isFITS\fR (fname) +int \fBcdl_readFITS\fR (fname, pix, nx, ny, bitpix, title) + +void \fBcdl_computeZscale\fR (cdl, pix, nx, ny, bitpix, z1, z2) +void \fBcdl_zscaleImage\fR (cdl, pix, nx, ny, bitpix, z1, z2) + +int \fBcdl_printPix\fR (cdl, cmd, pix, nx, ny, annotate) +int \fBcdl_printPixToFile\fR (cdl, fname, pix, nx, ny, annotate) + +int \fBcdl_readImage\fR (cdl, pix, nx, ny) +int \fBcdl_readFrameBuffer\fR (cdl, pix, nx, ny) +int \fBcdl_readSubRaster\fR (cdl, lx, ly, nx, ny, pix) +int \fBcdl_writeSubRaster\fR (cdl, lx, ly, nx, ny, pix) + +void \fBcdl_selectFB\fR (cdl, nx, ny, fb, w, h, nf, reset) +void \fBcdl_setFBConfig\fR (cdl, configno) +void \fBcdl_getFBConfig\fR (cdl, configno, w, h, nf) +void \fBcdl_lookupFBSize\fR (cdl, configno, w, h, nf) + +void \fBcdl_setZTrans\fR (cdl, ztrans) +void \fBcdl_setZScale\fR (cdl, z1, z2) +void \fBcdl_setSample\fR (cdl, nsample) +void \fBcdl_setSampleLines\fR (cdl, nlines) +void \fBcdl_setContrast\fR (cdl, contrast) +void \fBcdl_setName\fR (cdl, imname) +void \fBcdl_setTitle\fR (cdl, imtitle) + +void \fBcdl_getFrame\fR (cdl, frame) +void \fBcdl_getZTrans\fR (cdl, ztrans) +void \fBcdl_getZScale\fR (cdl, z1, z2) +void \fBcdl_getSample\fR (cdl, nsample) +void \fBcdl_getSampleLines\fR (cdl, nlines) +void \fBcdl_getContrast\fR (cdl, contrast) +void \fBcdl_getName\fR (cdl, imname) +void \fBcdl_getTitle\fR (cdl, imtitle) + +int \fBcdl_mapFrame\fR (cdl, frame) +int \fBcdl_markCoordsFile\fR (cdl, fname, type, size, color, label) +int \fBcdl_markPoint\fR (cdl, x, y, number, size, type, color) +int \fBcdl_markPointLabel\fR (cdl, x, y, label, size, type, color) +int \fBcdl_markLine\fR (cdl, xs, ys, xe, ye, color) +int \fBcdl_markBox\fR (cdl, lx, ly, ux, uy, fill, color) +int \fBcdl_markPolygon\fR (cdl, xarray, yarray, npts, fill, color) +int \fBcdl_markPolyline\fR (cdl, xarray, yarray, npts, color) +int \fBcdl_markCircle\fR (cdl, x, y, radius, fill, color) +int \fBcdl_markCircAnnuli\fR (cdl, x, y, radius, nannuli, sep, color) +int \fBcdl_markEllipse\fR (cdl, x, y, xrad, yrad, rotang, fill, color) +int \fBcdl_markEllipAnnuli\fR (cdl, x, y, xrad, yrad, ang, nannuli, sep, color) +int \fBcdl_markText\fR (cdl, x, y, str, size, angle, color) +int \fBcdl_setFont\fR (cdl, font) +int \fBcdl_setTextWidth\fR (cdl, width) +int \fBcdl_setLineWidth\fR (cdl, width) +int \fBcdl_setLineStyle\fR (cdl, style) +int \fBcdl_deleteMark\fR (cdl, x, y) +int \fBcdl_clearOverlay\fR (cdl) +int \fBcdl_redrawOverlay\fR (cdl) +.TE + +.bp +.NH +C Example Tasks +.LP + The examples shown here are for demonstration purposes only. They +are based on working example tasks in the CDL source \fIexamples\fR +subdirectory, see the programs there for the full program listing. + +.NH 2 +Display Example +.LP +.ps -2 +.vs -2 +.nf +\f(CW +#include <stdio.h> +#include <unistd.h> +#include "cdl.h" + +/* \fIDISPLAY -- Example task to display an image as a command-line task. + * This task is meant to show three ways the CDL can be used to display + * an image, see the code comments for a description of each method. + * + * Examples: + * To display a simple IRAF or FITS file: + * % ./display -frame 2 image.imh + * % ./display image.fits + * + * To display a FITS file as a raw image: + * % ./display -nx 512 -ny 512 -depth 16 -hskip 5760 -raw dpix.fits + * + * Usage: + * display [-depth N] [-fits] [-frame N] [-fbconfig N] [-hskip N] + * [-iraf] [-nozscale] [-nx N] [-ny N] [-raw] [-zscale] file\fP + */ + +#define NONE -1 +#define IRAF 0 +#define FITS 1 +#define RAW 2 + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname, title[128]; + int i, status = 0, frame = 1, fbconfig = 0, zscale = 1; + int format = NONE, nx = 0, ny = 0, depth = 8, hskip = 0; + float z1, z2; + int fb_w, fb_h, nf; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strcmp (argv[i], "-depth") == 0) depth = atoi (argv[++i]); + else if (strcmp (argv[i], "-fits") == 0) format = FITS; + else if (strcmp (argv[i], "-frame") == 0) frame = atoi (argv[++i]); + else if (strcmp (argv[i], "-fbconfig") == 0) fbconfig = atoi (argv[++i]); + else if (strcmp (argv[i], "-hskip") == 0) hskip = atoi (argv[++i]); + else if (strcmp (argv[i], "-iraf") == 0) format = IRAF; + else if (strcmp (argv[i], "-nozscale") == 0) zscale = 0; + else if (strcmp (argv[i], "-nx") == 0) nx = atoi (argv[++i]); + else if (strcmp (argv[i], "-ny") == 0) ny = atoi (argv[++i]); + else if (strcmp (argv[i], "-raw") == 0) format = RAW; + else if (strcmp (argv[i], "-zscale") == 0) zscale = 1; + } + } + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + fname = argv[argc-1]; + + /* \fIMETHOD 1: Displays the image using the high-level format display + * call. Display as an IRAF image if the option was set indicating + * this is the format, otherwise test the file to see if it is anyway.\fP + */ + if (format == IRAF || (format == NONE && \fBcdl_isIRAF\fP (fname))) { + status = \fBcdl_displayIRAF\fP (cdl, fname, 1, frame, FB_AUTO, zscale); + + /* \fIMETHOD 2: Uses the CDL procedure for getting image pixels from + * a known format, minimal work required to display an image. The + * point here is that you can use this method to process the image + * yourself prior to display, e.g. subsample the pixels, apply a user + * LUT, etc but still use the CDL to get the raw image and do the + * display.\fP + */ + } else if (format == FITS || (format == NONE && \fBcdl_isFITS\fP (fname))) { + + /* \fIGet the FITS image pixels, exit w/ an error status if something + * went wrong, the procedure will print what that was.\fP + */ + if (\fBcdl_readFITS\fP (fname, &pix, &nx, &ny, &depth, title)) { + \fBcdl_close\fP (cdl); /* close the package */ + exit (1); /* exit w/ error code */ + } + + /* \fINow select a frame buffer large enough for the image. The + * fbconfig number is passed in the WCS packet, but the display + * call below will compute the correct WCS for the image and + * transmit that prior to display, all we're doing here is + * setting up the FB to be used.\fP + */ + if (fbconfig == 0) + cdl_selectFB (cdl, nx, ny, &fbconfig, &fb_w, &fb_h, &nf, 0); + + /* \fILastly, display the pixels to the requested frame, do any + * zscaling requested using the CDL procedure.\fP + */ + status = \fBcdl_displayPix\fP (cdl, pix, nx, ny, depth, frame, + fbconfig, zscale); + + /* \fIMETHOD 3: Displays an image of raw pixels. The client code is + * responsible for reading the image and calling all the procedures + * needed for image display, initialize the frame, zscaling pix, etc. + * While we assume a simple raster format in this program, the user + * code can read a compressed image format such as GIF, mosaic multiple + * images for display as a single image, or just about anything that + * produces a raster for display. The intent here is to show all the + * lowest level calls needed for displaying the image.\fP + */ + } else if (format == RAW) { + FILE *fd; + int lx, ly; + + if (nx == 0 || ny == 0) { + fprintf (stderr, "No size given for raw data.\\n"); + exit (1); + } + + /* \fIOpen the image file if we can.\fP */ + if (fd = fopen (fname, "r")) { + + /* \fISeek to the offset specified.\fP */ + lseek (fileno(fd), (off_t) hskip, SEEK_SET); + + /* \fIAllocate the pixel pointer and read the data.\fP */ + pix = (unsigned char *) malloc (nx * ny * (depth / 8)); + fread (pix, depth/8, nx * ny, fd); + + /* \fIIf we're zscaling and depth is more than 8-bits, do that.\fP */ + if (zscale && depth > 8) { + \fBcdl_computeZscale\fP (cdl, pix, nx, ny, depth, &z1, &z2); + \fBcdl_zscaleImage\fP (cdl, &pix, nx, ny, depth, z1, z2); + } + + /* \fINow select a frame buffer large enough for the image. We'll + * ask that this be reset but the change won't go to the server + * until we send in a WCS, so compute that as well. For the + * WCS we assume a simple linear transform where the image is + * Y-flipped, the (x,y) translation is computed so it is correct + * for an frame buffer >= than the image size.\fP + */ + \fBcdl_selectFB\fP(cdl, nx, ny, &fbconfig, &fb_w, &fb_h, &nf,1); + \fBcdl_setWCS\fP (cdl, fname, NULL, 1., 0., 0., -1., + (float) (nx / 2) - (fb_w / 2) + 1, /* \fIX trans.\fP */ + (float) (fb_h / 2) + (ny / 2), /* \fIY trans.\fP */ + z1, z2, CDL_LINEAR); /* \fIZ transform\fP */ + + /* \fISelect and clear the requested frame prior to display.\fP */ + \fBcdl_setFrame\fP (cdl, frame); + \fBcdl_clearFrame\fP (cdl); + + /* \fINow display the pixels. We'll compute the image placement + * ourselves and write the image as a raw subraster of the frame + * buffer. In this case we'll center the image, but the CDL + * cdl_writeSubRaster() procedure can be used to write arbitrary + * rasters at any point in the frame buffer.\fP + */ + lx = (fb_w / 2) - (nx / 2); + ly = fb_h - ((fb_h / 2) + (ny / 2)); + status = \fBcdl_writeSubRaster\fP (cdl, lx, ly, nx, ny, pix); + } else + status = 1; + } else { + if (access (fname, F_OK) == 0) + fprintf (stderr, "'%s': unknown image format.\\n", fname); + else + fprintf (stderr, "'%s': image does not exist.\\n", fname); + status = 1; + } + + /* \fINow just free the pixel pointer to clean up.\fP */ + if (pix) + free ((unsigned char *) pix); + \fBcdl_close\fP (cdl); /* \fIclose the package\fP */ + exit (status); +} +\fR +.fi +.vs +2 +.ps +2 +.bp +.NH 2 +Interactive Graphics Overlay Example +.LP +.ps -2 +.vs -2 +.nf +\f(CW +#include <stdio.h> +#include <unistd.h> +#include <math.h> +#include "cdl.h" + +/* \fI + * TVMARK -- Example task for displaying an marking images. This program + * can be used to either display an image and overlay points defined in + * a coordinate file, map an existing display frame for marking, or option- + * ally enter a cursor command loop after either of these providing other + * marking capability. All options support minimum match. + * + * Examples: + * % tvmark dpix.fits + * % tvmark -coords coords -color 205 dpix.fits + * % tvmark -frame 2 + * % tvmark -coords coords -interactive dpix.fits + * + * Usage: + * tvmark [-frame N] [-fbconfig N] [-coords <file>] [-size N] [-color N] + * [-nolabel] [-fill] [-interactive] [image]\fP + */ + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname = NULL, *cfname = NULL; + int i, status = 0, fill = 0, frame = 1, fb = FB_AUTO, zscale = 1; + int color = 201, label = 1, size = 9, interactive = 0; + float z1, z2; + int fb_w, fb_h, nf; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strncmp(argv[i], "-color",4) == 0) color = atoi (argv[++i]); + else if (strncmp(argv[i], "-coords",4) == 0) cfname = argv[++i]; + else if (strncmp(argv[i], "-fbconfig",3) == 0) fb = atoi (argv[++i]); + else if (strncmp(argv[i], "-fill",4) == 0) fill = 1; + else if (strncmp(argv[i], "-frame",3) == 0) frame = atoi (argv[++i]); + else if (strncmp(argv[i], "-interactive",4) == 0) interactive = 1; + else if (strncmp(argv[i], "-nolabel",4) == 0) label = 0; + else if (strncmp(argv[i], "-nozscale",4) == 0) zscale = 0; + else if (strncmp(argv[i], "-size",2) == 0) size = atoi (argv[++i]); + else + fname = argv[i]; + } + } + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + /* \fIIf an image was specified display it first, otherwise assume the + * image has already been loaded in the frame and mark that.\fP + */ + if (fname) { + if (\fBcdl_isIRAF\fP (fname)) + status = \fBcdl_displayIRAF\fP (cdl, fname, 1, frame, fb, zscale); + else if (\fBcdl_isFITS\fP (fname)) + status = \fBcdl_displayFITS\fP (cdl, fname, frame, fb, zscale); + else { + if (access (cfname, F_OK) == 0) + fprintf (stderr, "'%s': unknown image format.\\n", fname); + else + fprintf (stderr, "'%s': image doesn't exist.\\n", fname); + status = 1; + } + if (status) goto err_; + } else { + + /* \fIIf we've requested a special frame buffer, set it now.\fP */ + if (fb > 0) + \fBcdl_setFBConfig\fP (cdl, fb); + + /* \fIMap the current display frame for use as an image.\fP */ + \fBcdl_mapFrame\fP (cdl, frame); + } + + /* \fIIf a coordinate file was specified read the file and mark those + * coords with points.\fP + */ + if (cfname) + \fBcdl_markCoordsFile\fP (cdl, cfname, M_STAR, size, color, label); + + /* \fILastly, start up an interactive cursor loop if needed.\fP */ + if (interactive) + tvmInteractive (cdl, label, fill, color, size); + + /* \fIClose the package and clean up.\fP */ +err_: \fBcdl_close\fP (cdl); + exit (status); +} + +/* \fITVMINTERACTIVE -- Process commands interactively.\fP */ + +tvmInteractive (cdl, label, fill, color, size) +CDLPtr cdl; +int label, fill, color, size; +{ + float angle = 0.0, rx, ry, txsize = 1.; + int nx, ny, i, x, y, x2, y2, wcs; + int number=1, radius=11, xrad=11, yrad=6, nannuli=3, sep=5; + char key, cmd[SZ_NAME], str[SZ_NAME]; + unsigned char *pix; + + /* \fIProcess commands until a 'q' keystroke is hit.\fP */ + while (\fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &wcs, &key) != 'q') { + x = (int) (rx + 0.5); /* \fIconvert to int pixels\fP */ + y = (int) (ry + 0.5); + + switch (key) { + case ':': /* \fIprocess a colon command\fP */ + putchar (':'); + gets (str); + for (i=0; str[i] != ' ' && str[i]; i++) + cmd[i] = str[i]; + cmd[i++] = '\0'; + + if (strcmp (cmd, "angle") == 0) angle = atof (&str[i]); + else if (strcmp (cmd, "color") == 0) color = atoi (&str[i]); + else if (strcmp (cmd, "fill") == 0) fill = atoi (&str[i]); + else if (strcmp (cmd, "number") == 0) number = atoi (&str[i]); + else if (strcmp (cmd, "nannuli") == 0) nannuli = atoi (&str[i]); + else if (strcmp (cmd, "label") == 0) label = atoi (&str[i]); + else if (strcmp (cmd, "sep") == 0) sep = atoi (&str[i]); + else if (strcmp (cmd, "size") == 0) size = atoi (&str[i]); + else if (strcmp (cmd, "txsize") == 0) txsize = atof (&str[i]); + else if (strcmp (cmd, "xrad") == 0) xrad = atoi (&str[i]); + else if (strcmp (cmd, "yrad") == 0) yrad = atoi (&str[i]); + else if (strcmp (cmd, "print") == 0) { + \fBcdl_readFrameBuffer\fP (cdl, &pix, &nx, &ny); + \fBcdl_printPix\fP (cdl, NULL, pix, nx, ny, 1); + } else if (strcmp (cmd, "snap") == 0) { + \fBcdl_readFrameBuffer\fP (cdl, &pix, &nx, &ny); + \fBcdl_printPixToFile\fP (cdl, &str[i], pix, nx, ny, 1); + } else if (strcmp (cmd, "status") == 0) { + printf ("angle = %-5.3g\tcolor = %d\t", angle, color); + printf ("fill = %-5d\tnumber = %d\\n", fill, number); + printf ("nannuli = %-5d\tsep = %d\t", nannuli, sep); + printf ("size = %-5d\ttxsize = %g\\n", size, txsize); + printf ("xrad = %-5d\tyrad = %d\t", xrad, yrad); + printf ("label = %-5d\\n", label); + } + break; + + case '?': + /* ......\fIhelp procedures\fP */ + break; + + case 'p': /* \fIplus mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_PLUS, color); + break; + case 'x': /* \fIcross mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_CROSS, color); + break; + case '.': /* \fIpoint mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_POINT, color); + break; + case '*': /* \fIstar mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_STAR, color); + break; + case '_': /* \fIhoriz dash mark\fP*/ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_HBLINE, color); + break; + case '|': /* \fIvert dash mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_VBLINE, color); + break; + case 'o': /* \fIcircle mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_CIRCLE|fill, color); + break; + case 's': /* \fIsquare mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_BOX|fill, color); + break; + case 'v': /* \fIdiamond mark\fP */ + \fBcdl_markPoint\fP (cdl, x, y, (label ? number++ : 0), size, M_DIAMOND|fill, color); + break; + + case 'b': /* \fIBox\fP */ + printf ("Hit another key to define the box...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &wcs, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + \fBcdl_markBox\fP (cdl, x, y, x2, y2, fill, color); + break; + case 'c': /* \fICircle\fP */ + printf ("Hit another key to set radius ...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &wcs, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + radius = (int) sqrt ((double) ((x2-x)*(x2-x) + (y2-y)*(y2-y))); + \fBcdl_markCircle\fP (cdl, x, y, radius, fill, color); + break; + case 'd': /* \fIDelete marker\fP */ + \fBcdl_deleteMark\fP (cdl, x, y); + break; + case 'e': /* \fIEllipse\fP */ + \fBcdl_markEllipse\fP (cdl, x, y, xrad, yrad, angle, fill, color); + break; + case 'l': /* \fILine\fP */ + printf ("Hit another key to set line endpoint...\\n"); + (void) \fBcdl_readCursor\fP (cdl, 0, &rx, &ry, &wcs, &key); + x2 = (int) (rx + 0.5); y2 = (int) (ry + 0.5); + \fBcdl_markLine\fP (cdl, x, y, x2, y2, color); + break; + case 't': /* \fIText string\fP */ + printf ("Text string: "); + gets (str); + \fBcdl_markText\fP (cdl, x, y, str, txsize, angle, color); + break; + case 'C': /* \fICircular annuli\fP*/ + \fBcdl_markCircAnnuli\fP (cdl, x, y, radius, nannuli, sep, color); + break; + case 'D': /* \fIDelete all markers\fP*/ + \fBcdl_clearOverlay\fP (cdl); + break; + case 'E': /* \fIElliptical annuli\fP*/ + \fBcdl_markEllipAnnuli\fP (cdl, x, y, xrad, yrad, angle, nannuli, sep, color); + break; + default: + break; + } + } +} +\fR +.fi +.vs +2 +.ps +2 +.bp +.NH 2 +Image Mosaic Example +.LP +.in 0.5i +.ps -2 +.vs -2 +.nf +#include <stdio.h> +#include <unistd.h> +#\fBinclude "cdl.h"\fP + +/* \fIMOSAIC -- Example task to mosaic several images on a display. Demonstrates + * usage of low-level routines for complex display operations.\fP + */ + +main (argc, argv) +int argc; +char *argv[]; +{ + CDLPtr cdl; + char *fname = NULL, title[128]; + int i, j, k, status=0, label=0, frame=1, fb=FB_AUTO, zscale=1; + int sample=1, pad=0, col=204, imx, imy, bitpix, nimages, nim; + int ii, xinit, rowx, rowy, nnx, nny, fb_w, fb_h, nf, mx, my, nx, ny; + float z1, z2; + unsigned char *pix = NULL; + + /* \fIProcess the command line options.\fP */ + if (argc > 1) { + for (i=1; i < argc; i++) { + if (strncmp (argv[i], "-fbconfig",3) == 0) fb=atoi(argv[++i]); + else if (strncmp (argv[i],"-frame",3) == 0) frame=atoi(argv[++i]); + else if (strncmp (argv[i],"-color",3) == 0) col=atoi(argv[++i]); + else if (strncmp (argv[i],"-label",4) == 0) label=1; + else if (strncmp (argv[i],"-nozscale",4) == 0) zscale=0; + else if (strncmp (argv[i],"-nx",3) == 0) nx=atoi(argv[++i]); + else if (strncmp (argv[i],"-ny",3) == 0) ny=atoi(argv[++i]); + else if (strncmp (argv[i],"-pad",4) == 0) pad=atoi(argv[++i]); + else if (strncmp (argv[i],"-sample",4) == 0) sample=atoi(argv[++i]); + else + break; + } + } + nimages = argc - i; + + /* \fIOpen the package and a connection to the server.\fP */ + if (!(cdl = \fBcdl_open\fP ((char *)getenv("IMTDEV"))) ) + exit (-1); + + /* \fIClear the frame to begin.\fP */ + (void) \fBcdl_clearFrame\fP (cdl); + + /* \fILoop over each of the images in the list.\fP */ + nim = rowx = rowy = nnx = nny = 0; + for (k=0; k < ny && nim < nimages; k++) { + rowy += nny + pad; + for (rowx = xinit, j=0; j < nx && nim < nimages; j++) { + + /* \fIGet the image name for display.\fP */ + fname = argv[i++]; + + /* \fIFigure out what kind of image it is and get the pixels.\fP */ + if (cdl_isIRAF (fname)) + status = \fBcdl_readIRAF\fP (fname, 1, &pix, &imx, &imy, &bitpix, title); + else if (cdl_isFITS (fname)) + status = \fBcdl_readFITS\fP (fname, &pix, &imx, &imy, &bitpix, title); + else { + fprintf(stderr, "'%s': unknown or nonexistant image.\\n", fname); + status = 1; + } + if (status) goto err_; + + /* \fICompute subsampled image size.\fP */ + if (sample > 1) + nnx = imx / sample, nny = imy / sample; + else + nnx = imx, nny = imy; + + /* \fIUnless we asked for a specific FB size find one large enough + * to handle the mosaic. We don't check to be sure what's + * returned is really large enough.\fP + */ + if (nim == 0 && fb == FB_AUTO) + \fBcdl_selectFB\fP (cdl, nx*nnx+(pad*(nx-1)), ny*nny+(pad*(ny-1)), &fb, &fb_w, &fb_h, &nf, 1); + else { + \fBcdl_setFBConfig\fP (cdl, fb); + \fBcdl_lookupFBSize\fP (cdl, fb, &fb_w, &fb_h, &nf); + } + + /* \fIDefine a WCS for the frame.\fP */ + \fBcdl_setWCS\fP (cdl, "image mosaic", title, 1., 0., 0., -1., 0., (float) ny*imy+(pad*(ny+1)), 1., 255., 1); + + /* \fIThe first time through figure out the placement so the + * entire mosaic is centered in the frame.\fP + */ + if (nim == 0) { + mx = (nx * nnx) + pad * (nx-1); + my = (ny * nny) + pad * (ny-1); + rowy = (fb_h - my) / 2; + xinit = rowx = (fb_w - mx) / 2; + } + + /* \fICompute the zscaled imaged pixels.\fP */ + if (zscale) { + \fBcdl_computeZscale\fP (cdl, pix, imx ,imy, bitpix, &z1, &z2); + \fBcdl_zscaleImage\fP (cdl, &pix, imx ,imy, bitpix, z1, z2); + } + + /* \fISubsample the image if requested.\fP */ + if (sample > 1) { + int l, m, n=0; + for (l=0; l < imy; l+=sample) + for (m=0; m < imx; m+=sample) + pix[n++] = pix[(l*imx)+m]; + } + + /* \fIWrite the image to the frame buffer.\fP */ + if (\fBcdl_writeSubRaster\fP (cdl, rowx, rowy, nnx, nny, pix)) goto err_; + + /* \fIDraw the image name as a label.\fP */ + if (label) \fBcdl_markText\fP (cdl, rowx+10, rowy+10, fname, 1., 0., col); + + nim++; rowx += nnx + pad; + } + } + + /* \fIClose the package and clean up.\fP */ +err_: \fBcdl_close\fP (cdl); + exit (status); +} +.fi +.vs +2 +.ps +2 +.in -0.5i + +.bp +.NH +Fortran Interface Summary +.LP +.in 0.5i +include "\fBcdlftn.inc\fR" +.in -0.5i + +.TS +center; +r l. +\fBcfopen\fR (imtdev, ier) +\fBcfdisplayPix\fR (pix, nx, ny, bitpix, frame, fbconfig, zscale, ier) +\fBcfreadCursor\fR (sample, x, y, key, ier) +\fBcfsetCursor\fR (x, y, wcs, ier) +\fBcfsetWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcfgetWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcfsetFrame\fR (frame) +\fBcfclearFrame\fR (ier) +\fBcfclose\fR () + +\fBcfdisplayIRAF\fR (fname, band, frame, fbconfig, zscale, ier) +\fBcfisIRAF\fR (fname, isiraf) +\fBcfreadIRAF\fR (fname, band, pix, nx, ny, bitpix, title, ier) + +\fBcfdisplayFITS\fR (fname, frame, fbconfig, zscale, ier) +\fBcfisFITS\fR (fname, isfits) +\fBcfreadFITS\fR (fname, pix, nx, ny, bitpix, title, ier) + +\fBcfcomputeZscale\fR (pix, nx, ny, bitpix, z1, z2) +\fBcfzscaleImage\fR (pix, nx, ny, bitpix, z1, z2) + +\fBcfprintPix\fR (cmd, pix, nx, ny, annotate, ier) +\fBcfprintPixToFile\fR (fname, pix, nx, ny, annotate, ier) + +\fBcfreadImage\fR (pix, nx, ny, ier) +\fBcfreadFrameBuffer\fR (pix, nx, ny, ier) +\fBcfreadSubRaster\fR (lx, ly, nx, ny, pix, ier) +\fBcfwriteSubRaster\fR (lx, ly, nx, ny, pix, ier) + +\fBcfselectFB\fR (nx, ny, fb, w, h, nf, reset) +\fBcfsetFBConfig\fR (configno) +\fBcfgetFBConfig\fR (configno, w, h, nf) +\fBcflookupFBSize\fR (configno, w, h, nf) + +\fBcfsetZTrans\fR (ztrans) +\fBcfsetZScale\fR (z1, z2) +\fBcfsetSample\fR (nsample) +\fBcfsetSampleLines\fR (nlines) +\fBcfsetContrast\fR (contrast) +\fBcfsetName\fR (imname) +\fBcfsetTitle\fR (imtitle) + +\fBcfgetFrame\fR (frame) +\fBcfgetZTrans\fR (ztrans) +\fBcfgetZScale\fR (z1, z2) +\fBcfgetSample\fR (nsample) +\fBcfgetSampleLines\fR (nlines) +\fBcfgetContrast\fR (contrast) +\fBcfgetName\fR (imname) +\fBcfgetTitle\fR (imtitle) + +\fBcfmapFrame\fR (frame, ier) +\fBcfmarkPoint\fR (x, y, number, size, type, color, ier) +\fBcfmarkcoordsfile\fR (fname, type, size, color, label, ier) +\fBcfmarkPointLabel\fR (x, y, label, size, type, color, ier) +\fBcfmarkLine\fR (xs, ys, xe, ye, color, ier) +\fBcfmarkBox\fR (lx, ly, ux, uy, fill, color, ier) +\fBcfmarkPolygon\fR (xarray, yarray, npts, fill, color, ier) +\fBcfmarkPolyline\fR (xarray, yarray, npts, color, ier) +\fBcfmarkCircle\fR (x, y, radius, fill, color, ier) +\fBcfmarkCircAnnuli\fR (x, y, radius, nannuli, sep, color, ier) +\fBcfmarkEllipse\fR (x, y, xrad, yrad, rotang, fill, color, ier) +\fBcfmarkEllipAnnuli\fR (x, y, xrad, yrad, ang, nannuli, sep, color, ier) +\fBcfmarkText\fR (x, y, str, size, angle, color, ier) +\fBcfsetfont\fR (font) +\fBcfsettextwidth\fR (width) +\fBcfsetlwidth\fR (width) +\fBcfsetlstyle\fR (style) +\fBcfdeleteMark\fR (x, y, ier) +\fBcfclearOverlay\fR (ier) +\fBcfredrawOverlay\fR (ier) +.TE +.bp +.NH +Fortran Example Tasks +.LP + The examples shown here are for demonstration purposes only. They +are based on working example tasks in the CDL source \fIexamples\fR +subdirectory, see the programs there for the full program listing. + +.NH 2 +Display Example +.in 0.5i +.ps -2 +.vs -2 +.nf +\f(CW +C ======================================================================== +C FDISPLAY -- Example fortran program showing the use of the Client +C Display Library (CDL) Fortran interface for displaying images. +C ======================================================================== + + PROGRAM FDISPLAY + character*64 imname + +C \fIInitialize the CDL package\fP + call \fBcfopen\fP (0, ier) + if (ier .gt. 0) then + write (*,*) 'open: Error return from CDL' + goto 999 + endif + + write (*, "('Image Name: ', $)") + read (5, *) imname + write (*, "('Frame Number: ', $)") + read (5, *) iframe + write (*, "('Frame buffer configuration number: ', $)") + read (5, *) ifb + +C \fIIf we've got a FITS format image, go ahead and display it.\fP + call \fBcfisFITS\fP (imname, isfits) + if (isfits .gt. 0) then + call \fBcfdisplayFITS\fP (imname, iframe, ifb, 1, ier) + else +C \fIWe've got an IRAF format image, go ahead and display it.\fP + call \fBcfisIRAF\fP (imname, isiraf) + if (isiraf .gt. 0) then + call \fBcfdisplayIRAF\fP (imname, 1, iframe, ifb, 1, ier) + else +C \fIUnrecognized image, punt and exit.\fP + write (*,*) 'Unrecognized image format' + endif + endif + +C \fIClean up and exit.\fP +999 continue + call \fBcfclose\fP (ier) + end +\fR +.fi +.ps +2 +.vs +2 +.in -0.5i +.bp +.NH 2 +Interactive Graphics Overlay Example +.in 0.5i +.ps -2 +.vs -2 +.nf +\f(CW +C ========================================================================== +C FTVMARK -- Example fortran program showing the use of the Client +C Display Library (CDL) Fortran interface for doing graphics overlay. No +C checking of the error flag is done here for space considerations. +C ========================================================================== + + PROGRAM FTVMARK + include "\fBcdlftn.inc\fP" + character*64 imname + +C \fIInitialize the CDL package\fP + call \fBcfopen\fP (0, ier) + + write (*, "('Image Name: ', $)") + read (5, *) imname + write (*, "('Frame Number: ', $)") + read (5, *) iframe + write (*, "('Frame buffer configuration number: ', $)") + read (5, *) ifb + +C \fIIf we've got a FITS format image, go ahead and display it.\fP + call \fBcfisFITS\fP (imname, isfits) + if (isfits .gt. 0) then + call \fBcfdisplayFITS\fP (imname, iframe, ifb, 1, ier) + else +C \fIWe've got an IRAF format image, go ahead and display it.\fP + call \fBcfisIRAF\fP (imname, isiraf) + if (isiraf .gt. 0) then + call \fBcfdisplayIRAF\fP (imname, 1, iframe, ifb, 1, ier) + else +C \fINo valid image given, so map the current display for marking.\fP + call \fBcfmapFrame\fP (iframe) + endif + endif + +C \fINow that we've got an image displayed or mapped, enter a cursor loop to mark the image. \fP + call markInteractive () + +C \fIClean up and exit\fP +999 continue + call \fBcfclose\fP (ier) + end + +C \fIMARKINTERACTIVE -- Subroutine for processing the cursor loop.\fP + subroutine markInteractive () + include "\fBcdlftn.inc\fP" + real angle, rx, ry, txsize + integer nx, ny, x, y, x2, y2, fill, size, color + integer number, radius, xrad, yrad, nannuli, sep + character key + character*64 cmd, str + +C \fIAllocate a 1024x1024 array for pixels. \fP + character pix(1048576) + +C \fI....Initialize the local parameters to use\fP + +C \fIRead a cursor keystroke telling us what to do.\fP +10 call \fBcfreadCursor\fP (0, rx, ry, key, ier) + +C \fIRound the real cursor position to integer pixel positions.\fP + x = nint (rx + 0.5) + y = nint (ry + 0.5) + +C \fICheck the keystroke and take the appropriate action.\fP +C \fIColon Commands\fP + if (key .eq. ':') then +C \fIRead a three character command and value field and process the colon command\fP + read (*,'(A3, i4)') cmd, ival + if (cmd(1:3) .eq. 'ang') then + angle = real (ival) + else if (cmd(1:3) .eq. 'col') then + color = ival + else if (cmd(1:3) .eq. 'fil') then + fill = ival +\fI : + ....and so on to set local variables + :\fR + else if (cmd(1:3) .eq. 'pri') then +C \fIPrint contents of the current frame buffer\fP + call \fBcfreadFrameBuffer\fP (pix, nx, ny, ier) + call \fBcfprintPix\fP ("lpr", pix, nx, ny, 1, ier) + else if (cmd(1:3) .eq. 'sta') then + \fI....print out the status (value) of variables\fP + endif + +C \fIPoint Markers\fP + else if (key .eq. 'p') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_PLUS, color, ier) + else if (key .eq. 'x') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_CROSS, color, ier) + else if (key .eq. '_') then + call \fBcfmarkPoint\fP (x, y, 1, size, M_HBLINE, color, ier) + else if (key .eq. 'o') then +C \fIExample of a filled point marker \fP + call \fBcfmarkPoint\fP (x, y, 1, size, or(M_CIRCLE,fill), color, ier) +\fI : + ....and so on to set other types of point markers\fR + +C \fIOther Markers\fP + else if (key .eq. 'b') then + print '("Hit another key to define the box ....")' + call \fBcfreadCursor\fP (0, rx, ry, key, ier) + x2 = nint (rx + 0.5) + y2 = nint (ry + 0.5) + call \fBcfmarkBox\fP (x, y, x2, y2, fill, color, ier) + else if (key .eq. 'd') then + call \fBcfdeleteMark\fP (x, y, ier) + else if (key .eq. 'e') then + call \fBcfmarkEllipse\fP (x, y, xrad, yrad, angle, fill, color, ier) + else if (key .eq. 't') then + print '("Text string: ", $)' + read (*,'(A64)') str + call \fBcfmarkText\fP (x, y, str, txsize, angle, color, ier) +\fI : + ....and so on to set other types of markers\fR + +C \fIQuit\fP + else if (key .eq. 'q') then + goto 998 + endif + +C \fILoop back until we want to quit\fP + goto 10 +998 continue + end +\fR +.fi +.ps +2 +.vs +2 +.in -0.5i +.bp +.NH +SPP Interface Summary +.LP +.in 0.5i +#include "\fBcdlspp.h\fR" +.in -0.5i + +.TS +center; +r l. +\fBcdl_open\fR (imtdev, ier) +\fBcdl_displayPix\fR (pix, nx, ny, bitpix, frame, fbconfig, zscale, ier) +\fBcdl_readCursor\fR (sample, x, y, wcs, key, ier) +\fBcdl_setCursor\fR (x, y, wcs, ier) +\fBcdl_setWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcdl_getWCS\fR (name, title, a, b, c, d, tx, ty, z1, z2, zt, ier) +\fBcdl_setFrame\fR (frame) +\fBcdl_clearFrame\fR (ier) +\fBcdl_close\fR () + +\fBcdl_displayIRAF\fR (fname, band, frame, fbconfig, zscale, ier) +\fBcdl_isIRAF\fR (fname, isiraf) +\fBcdl_readIRAF\fR (fname, band, pix, nx, ny, bitpix, title, ier) + +\fBcdl_displayFITS\fR (fname, frame, fbconfig, zscale, ier) +\fBcdl_isFITS\fR (fname, isfits) +\fBcdl_readFITS\fR (fname, pix, nx, ny, bitpix, title, ier) + +\fBcdl_computeZscale\fR (pix, nx, ny, bitpix, z1, z2) +\fBcdl_zscaleImage\fR (pix, nx, ny, bitpix, z1, z2) + +\fBcdl_printPix\fR (cmd, pix, nx, ny, annotate, ier) +\fBcdl_printPixToFile\fR (fname, pix, nx, ny, annotate, ier) + +\fBcdl_readImage\fR (pix, nx, ny, ier) +\fBcdl_readFrameBuffer\fR (pix, nx, ny, ier) +\fBcdl_readSubRaster\fR (lx, ly, nx, ny, pix, ier) +\fBcdl_writeSubRaster\fR (lx, ly, nx, ny, pix, ier) + +\fBcdl_selectFB\fR (nx, ny, fb, w, h, nf, reset) +\fBcdl_setFBConfig\fR (configno) +\fBcdl_getFBConfig\fR (configno, w, h, nf) +\fBcdl_lookupFBSize\fR (configno, w, h, nf) + +\fBcdl_setZTrans\fR (ztrans) +\fBcdl_setZScale\fR (z1, z2) +\fBcdl_setSample\fR (nsample) +\fBcdl_setSampleLines\fR (nlines) +\fBcdl_setContrast\fR (contrast) +\fBcdl_setName\fR (imname) +\fBcdl_setTitle\fR (imtitle) + +\fBcdl_getFrame\fR (frame) +\fBcdl_getZTrans\fR (ztrans) +\fBcdl_getZScale\fR (z1, z2) +\fBcdl_getSample\fR (nsample) +\fBcdl_getSampleLines\fR (nlines) +\fBcdl_getContrast\fR (contrast) +\fBcdl_getName\fR (imname) +\fBcdl_getTitle\fR (imtitle) + +\fBcdl_mapFrame\fR (frame, ier) +\fBcdl_markCoordsFile\fR (fname, type, size, color, label, ier) +\fBcdl_markPoint\fR (x, y, number, size, type, color, ier) +\fBcdl_markPointLabel\fR (x, y, label, size, type, color, ier) +\fBcdl_markLine\fR (xs, ys, xe, ye, color, ier) +\fBcdl_markBox\fR (lx, ly, ux, uy, fill, color, ier) +\fBcdl_markPolygon\fR (xarray, yarray, npts, fill, color, ier) +\fBcdl_markPolyline\fR (xarray, yarray, npts, color, ier) +\fBcdl_markCircle\fR (x, y, radius, fill, color, ier) +\fBcdl_markCircAnnuli\fR (x, y, radius, nannuli, sep, color, ier) +\fBcdl_markEllipse\fR (x, y, xrad, yrad, rotang, fill, color, ier) +\fBcdl_markEllipAnnuli\fR (x, y, xrad, yrad, ang, nannuli, sep, color, ier) +\fBcdl_markText\fR (x, y, str, size, angle, color, ier) +\fBcdl_setFont\fR (font) +\fBcdl_setTextWidth\fR (width) +\fBcdl_setLineWidth\fR (width) +\fBcdl_setLineStyle\fR (style) +\fBcdl_deleteMark\fR (x, y, ier) +\fBcdl_clearOverlay\fR (ier) +\fBcdl_redrawOverlay\fR (ier) +\fBcdl_setDebug\fR (level) +.TE diff --git a/vendor/x11iraf/cdl/doc/cdlref.ps b/vendor/x11iraf/cdl/doc/cdlref.ps new file mode 100644 index 00000000..f192e0b1 --- /dev/null +++ b/vendor/x11iraf/cdl/doc/cdlref.ps @@ -0,0 +1,19799 @@ +%!PS-Adobe-1.0 +%%Creator: devps (Pipeline Associates, Inc.) +%%CreationDate: Sat Aug 11 21:36:49 2001 +%%Pages: (atend) +%%DocumentFonts: (atend) + +/X{exch}def +/r{rmoveto}def +/m{moveto}def +/l{lineto}def +/rl{rlineto}def +/lc{yc X xc X l st}def +/mc{yc X xc X m}def +/el{gs /a X def a div 1 X scale cp np a xc 2 div 0 360 arc st gr}def +/ar{cp 7 2 roll np xc 5 1 roll atan 3 1 roll atan X arc st}def +/sp{yc X xc X 6 2 roll yc X xc X 6 2 roll yc X xc X 6 2 roll ct}def +/st{stroke}def +/gs{gsave}def +/gr{grestore}def +/cp{currentpoint}def +/np{newpath}def +/ct{curveto}def +/m0{0 0 moveto}def +/BP{/devps-save save def m0}def +/EP{ +clear devps-save restore +showpage}def +/res 10.000000 def +/V{res neg div 792 add +currentpoint pop X +m}def +/H{res div +currentpoint X pop +moveto}def +/h{res div 0 r}def +/v{res neg div 0 X r}def +/xc{res div}def +/yc{res neg div 792 add}def +/S{X H show}def +/psize 10 def +/height 1 def +/slant 0 def +/FF{findfont X dup 12 div setlinewidth /psize X def + [psize 0 psize height mul slant sin slant cos div mul psize height mul 0 0] + makefont setfont}def +/shade{gs + /dy X def + /dx X def + np m + setgray + 0 dy rl + dx 0 rl + 0 dy neg rl + dx neg 0 rl + closepath + fill +gr}def +1 setlinecap +/R{/Times-Roman FF}def +/B{/Times-Bold FF}def +/I{/Times-Italic FF}def +/C{/Courier FF}def +%% Troff special characters not on Symbol font +%% Copyright (C) 1986 by Pipeline Associates, Inc. +%% Version 1.1 +/altRTD 20 dict def +altRTD begin +/s{setcachedevice}def +/C{1000 1000 scale}def +/m{moveto}def +/c{curveto}def +/S{stroke}def +/l{lineto}def +/a{arcto}def +/p{pop}def +/sl{setlinewidth}def +end +/F_Troff 17 dict def F_Troff begin +systemdict /currentpacking known +{/SavePacking currentpacking def true setpacking}if +/PaintType 0 def +/FontType 3 def +/StrokeWidth 0 def +/UniqueID 8277003 def +/FontMatrix [.001000 0 0 .001000 0 0] def +/FontBBox [-12 -105 942 855 ] def +/Encoding 256 array def +/CD 256 1 add dict def +/FontInfo 3 dict def FontInfo begin +/UnderlinePosition -133 def /UnderlineThickness 20 def end +/FontName (Troff) def +0 1 256 1 sub{Encoding exch /.notdef put}for +CD /.notdef{500 0 setcharwidth{}}put +Encoding (1) 0 get /br put +%% bold vertical rule used by tbl +CD /br{ +C +0 0 -.5 -.5 1 1 s +np +.05 sl +0 -.1 m +0 .9 l +{S} +}put +Encoding (2) 0 get /ul put +%% underline used by tbl +CD /ul{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +0 -.1 m +.5 -.1 l +{S} +}put +Encoding (3) 0 get /ru put +%% baseline rule +CD /ru{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +m0 +.5 0 l +{S} +}put +Encoding (4) 0 get /vr put +%% vertical rule +CD /vr{ +C +0 0 -.5 -.5 1 1 s +np +.05 sl +m0 +0 1 l +{S} +}put +Encoding (5) 0 get /sq put +%% square +CD /sq{ +C +.5 0 -.5 -.5 1 1 s +np +.05 sl +0 .25 m +0 .5 rl +.5 0 rl +0 -.5 rl +-.5 0 rl +closepath +{S} +}put +Encoding (6) 0 get /bx put +%% solid box +CD /bx{ +C +.5 0 -.5 -.5 1 1 s +np +0 .25 m +0 .5 rl +.5 0 rl +0 -.5 rl +-.5 0 rl +closepath +{fill} +}put +Encoding (7) 0 get /rn put +%% radical extender +CD /rn{ +C +.5 0 -.5 -.5 1 1 s +np +.03 sl +-.03 .9 m +.5 0 rl +{S} +}put +Encoding (8) 0 get /GR put +%% gray mask +CD /GR{ +C +.5 0 setcharwidth +.5 setgray +np +0 -.1 m +0 1 rl +.5 0 rl +0 -1 rl +-.5 0 rl +closepath +{fill} +}put +Encoding 97 /a put +CD /a{1000 0 0 66 942 421 s 430 415 +m 578 406 678 349 662 319 c 655 306 614 287 583 +296 c 570 300 466 340 438 332 c 365 309 335 213 +270 209 c 0 310 m 108 310 l 108 114 l 0 +114 l 0 310 l 42 161 m 42 134 l 66 134 l 66 +161 l 42 161 l 47 155 m 47 140 l 62 140 l 62 +155 l 47 155 l 110 133 m 226 113 300 66 410 +80 c 497 91 550 69 634 76 c 645 76 663 92 669 +107 c 677 125 673 141 668 160 c 725 334 m 758 +332 734 253 701 250 c 501 325 m 475 316 476 309 +473 302 c 465 282 482 263 499 257 c 552 236 615 +253 689 253 c 701 253 713 236 713 218 c 712 194 +702 168 678 161 c 671 159 663 160 655 160 c 591 +158 516 156 479 168 c 461 173 453 191 453 210 c 453 +224 456 235 466 244 c 476 253 490 252 503 255 c 459 +84 m 447 96 435 106 435 123 c 435 136 440 145 447 +155 c 453 163 462 168 469 173 c 110 293 m 173 +318 300 421 435 415 c 609 407 852 416 885 411 c 898 +409 924 411 930 380 c 942 316 828 339 742 334 c 731 +334 730 335 725 335 c 701 336 685 336 660 336 c{S}}put +Encoding 98 /b put +CD /b{1000 0 -12 66 930 421 s 500 +415 m 352 406 252 349 268 319 c 275 306 316 287 +347 296 c 360 300 464 340 492 332 c 565 309 595 +213 660 209 c 930 310 m 822 310 l 822 114 l 930 +114 l 930 310 l 888 161 m 888 134 l 864 134 +l 864 161 l 888 161 l 883 155 m 883 140 l 868 +140 l 868 155 l 883 155 l 820 133 m 704 113 +630 66 520 80 c 433 91 380 69 296 76 c 285 76 +267 92 261 107 c 253 125 257 141 262 160 c 205 +334 m 172 332 196 253 229 250 c 429 325 m 455 +316 454 309 457 302 c 465 282 448 263 431 257 c 378 +236 315 253 241 253 c 229 253 217 236 217 218 c 218 +194 228 168 252 161 c 259 159 267 160 275 160 c 339 +158 414 156 451 168 c 469 173 477 191 477 210 c 477 +224 474 235 464 244 c 454 253 440 252 427 255 c 471 +84 m 483 96 495 106 495 123 c 495 136 490 145 483 +155 c 477 163 468 168 461 173 c 820 293 m 757 +318 630 421 495 415 c 321 407 78 416 45 411 c 32 +409 6 411 0 380 c -12 316 102 339 188 334 c 199 +334 200 335 205 335 c 229 336 245 336 270 336 c{S}}put +Encoding 99 /c put +CD /c{1000 0 184 0 827 627 s 185 315 +m 186 488 332 627 505 625 c 682 623 827 467 815 +290 c 804 124 666 0 500 0 c 327 0 184 142 185 +315 c{S}}put +Encoding 100 /d put +CD /d{590 0 134 158 477 500 s 300 +160 m 208 162 134 238 135 330 c 136 423 212 500 +305 500 c 397 500 473 427 475 335 c 477 239 396 +158 300 160 c{fill}}put +Encoding 101 /e put % Bell Symbol +CD /e{1010 0 -100 -210 1010 1010 s 100 sl 0 setlinecap +420 300 450 0 360 arc +420 650 m 420 575 l S +newpath 120 125 m 720 125 l 75 sl S +420 125 m 420 25 l S +220 400 m 220 175 120 175 100 a p p p p +220 400 m 220 550 420 550 80 a p p p p +620 400 m 620 175 720 175 100 a p p p p +620 400 m 620 550 420 550 80 a p p p p +295 550 m 545 550 l{S}}put +/BuildChar{altRTD /BuildChar get exec}def end +altRTD begin /BuildChar{altRTD begin +/char exch def /fontdict exch def save +/charname fontdict /Encoding get char get def +fontdict /StrokeWidth get sl +fontdict /CD get dup charname known +{charname}{/.notdef}ifelse get newpath exec +fontdict /PaintType get 0 eq{exec}{p S}ifelse +restore end}def end +systemdict /currentpacking known{F_Troff /SavePacking get setpacking}if +/Troff F_Troff definefont pop +/Y1{/Troff FF}def +%%EndProlog +%%Page: 1 1 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +1230 V +12 B +1419(A)S +1541(Reference)S +2088(Guide)S +2439(for)S +2628(the)S +2824(IRAF)S +3152(Client)S +3502(Display)S +3926(Library)S +4369(\(CDL\))S +1470 V +10 I +2662(Michael)S +3019(Fitzpatrick)S +1650 V +10 R +2645(NOAO/IRAF)S +3219(Group)S +1890 V +2765(February)S +3155(1997)S +2130 V +10 I +2619(Revised:)S +2992(August)S +3300(2001)S +2250 V +2479(Current)S +2826(Version:)S +3230(CDL)S +3455(V1.8)S +2850 V +2823(ABSTRACT)S +3090 V +11 R +1510(The)S +1713(Client)S +2016(Display)S +2391(Library)S +2752(\(CDL\))S +3077(is)S +3184(a)S +3265(host)S +3482(interface)S +3896(for)S +4056(C,)S +4192(Fortran)S +4549(or)S +4674(SPP)S +3210 V +1260(programs)S +1707(allowing)S +2125(them)S +2378(to)S +2497(display)S +2848(images)S +3192(or)S +3316(overlay)S +3677(graphics)S +4081(to)S +4200(display)S +4551(servers)S +3330 V +1260(such)S +1513(as)S +11 I +1656(XImtool)S +11 R +2010(,)S +11 I +2090(DS9)S +11 R +2279(,)S +2359(or)S +11 I +2502(SAOimage)S +3023(/)S +3106(SAOtng)S +11 R +3448(.)S +3562(High-level)S +4084(procedures)S +4616(allow)S +3450 V +1260(IRAF)S +1545(or)S +1670(FITS)S +1931(images)S +2276(to)S +2396(be)S +2533(displayed)S +2988(simply,)S +3351(other)S +3610(routines)S +3998(permit)S +4319(access)S +4631(to)S +4750(all)S +3570 V +1260(other)S +1537(server)S +1855(functions)S +2316(\(e.g.)S +2563(cursor)S +2888(and)S +3098(image)S +3418(readback,)S +3891(frame)S +4198(selection,)S +4669(etc\).)S +3690 V +1260(The)S +1470(library)S +1802(also)S +2019(features)S +2404(a)S +2492(number)S +2867(of)S +2997(functions)S +3445(for)S +3611(doing)S +3901(image)S +4208(overlay)S +4575(graph-)S +3810 V +1260(ics;)S +1451(supported)S +1922(graphics)S +2331(primitives)S +2816(include)S +3177(numerous)S +3648(point)S +3913(shapes,)S +4272(lines,)S +4547(circles,)S +3930 V +1260(ellipses,)S +1651(polygons,)S +2116(annular)S +2477(shapes,)S +2830(and)S +3021(text.)S +4410 V +10 R +900(August)S +1219(11,)S +1374(2001)S +7920 V +EP +%%Page: 1 2 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +840 V +13 B +2810(Contents)S +1200 V +10 R +900(1)S +10 B +1080(Introduction)S +10 R +1632(....................................................................................................................................)S +5032(1)S +1380 V +900(2)S +10 B +1080(Getting)S +1432(Started)S +10 R +1757(...............................................................................................................................)S +5032(1)S +1560 V +900(3)S +10 B +1080(Server)S +1392(Connections)S +10 R +1932(........................................................................................................................)S +5032(2)S +1680 V +1080(3.1)S +1440(Domain)S +1792(Sockets)S +2107(.................................................................................................................)S +5032(2)S +1800 V +1080(3.2)S +1440(Named)S +1758(FIFO)S +2005(Pipes)S +2232(............................................................................................................)S +5032(3)S +1920 V +1080(3.3)S +1440(Inet)S +1625(Sockets)S +1957(.......................................................................................................................)S +5032(3)S +2040 V +1080(3.4)S +1440(User-De\256ned)S +2007(Connections.................................................................................................)S +5032(3)S +2220 V +900(4)S +10 B +1080(Image)S +1376(Display)S +10 R +1707(.................................................................................................................................)S +5032(3)S +2340 V +1080(4.1)S +1440(Overview)S +1863(of)S +1976(the)S +2128(Display)S +2469(Process)S +2782(......................................................................................)S +5032(3)S +2460 V +1080(4.2)S +1440(Displaying)S +1909(IRAF)S +2167(Images)S +2457(...................................................................................................)S +5032(4)S +2580 V +1080(4.3)S +1440(Displaying)S +1909(FITS)S +2145(Images)S +2457(...................................................................................................)S +5032(5)S +2700 V +1080(4.4)S +1440(Displaying)S +1909(Raw)S +2122(Pixels)S +2382(......................................................................................................)S +5032(5)S +2820 V +1080(4.5)S +1440(Frame)S +1725(Selection)S +2107(.................................................................................................................)S +5032(5)S +2940 V +1080(4.6)S +1440(Clearing)S +1814(the)S +1966(Display)S +2282(..........................................................................................................)S +5032(5)S +3060 V +1080(4.7)S +1440(Frame)S +1725(Bu)S +1842 H + (f)show 10 -.5 mul h (f)show +10 R +1903(er)S +2010(Selection......................................................................................................)S +5032(6)S +3180 V +1188(4.7.1)S +1584(Automatic)S +2036(Selection)S +2432(....................................................................................................)S +5032(6)S +3300 V +1188(4.7.2)S +1584(The)S +1769(Frame)S +2054(Bu)S +2171 H + (f)show 10 -.5 mul h (f)show +10 R +2232(er)S +2339(Con\256guration)S +2925(File)S +3082(..........................................................................)S +5032(6)S +3420 V +1080(4.8)S +1440(Image)S +1719(WCS)S +1966(Description....................................................................................................)S +5032(7)S +3540 V +1188(4.8.1)S +1584(Image)S +1863(Mappings)S +2282(..........................................................................................................)S +5032(7)S +3660 V +1080(4.9)S +1440(Image)S +1719(Colormaps)S +2182(..............................................................................................................)S +5032(8)S +3780 V +1188(4.9.1)S +1584(Imtool)S +1881(Color)S +2139(Model)S +2407(.....................................................................................................)S +5032(9)S +3900 V +1080(4.10)S +1440(ZScale)S +1747(Intensity)S +2127(Mapping)S +2507(.................................................................................................)S +5032(9)S +4020 V +1080(4.11)S +1440(Image)S +1719(Hardcopy)S +2132(................................................................................................................)S +4982(10)S +4140 V +1080(4.12)S +1440(Image)S +1719(Cursor)S +2007(.....................................................................................................................)S +4982(10)S +4260 V +1188(4.12.1)S +1584(Cursor)S +1886(Sampling)S +2282(..........................................................................................................)S +4982(11)S +4380 V +1080(4.13)S +1440(Image)S +1719(Readout)S +2057(...................................................................................................................)S +4982(11)S +4500 V +1080(4.14)S +1440(Subraster)S +1847(I/O)S +1982(......................................................................................................................)S +4982(11)S +4680 V +900(5)S +10 B +1080(Graphics)S +1505(Overlay)S +10 R +1857(...........................................................................................................................)S +4982(11)S +4800 V +1080(5.1)S +1440(Marker)S +1763(Coordinates)S +2257(...........................................................................................................)S +4982(11)S +4920 V +1080(5.2)S +1440(Mapping)S +1831(a)S +1905(Previously)S +2363(Displayed)S +2798(Image)S +3057(...........................................................................)S +4982(11)S +5040 V +1080(5.3)S +1440(Marking)S +1814(a)S +1888(Coordinate)S +2362(File)S +2532(................................................................................................)S +4982(12)S +5160 V +1080(5.4)S +1440(Marker)S +1763(Colors)S +2032(....................................................................................................................)S +4982(12)S +5280 V +1080(5.5)S +1440(Marker)S +1763(Types.....................................................................................................................)S +4982(12)S +5400 V +1188(5.5.1)S +1584(Point)S +1807(.............................................................................................................................)S +4982(13)S +5520 V +1188(5.5.2)S +1584(Line)S +1782(..............................................................................................................................)S +4982(13)S +5640 V +1188(5.5.3)S +1584(Box)S +1757(...............................................................................................................................)S +4982(13)S +5760 V +1188(5.5.4)S +1584(Circle)S +1832(............................................................................................................................)S +4982(13)S +5880 V +1188(5.5.5)S +1584(Polyline)S +1932(........................................................................................................................)S +4982(14)S +6000 V +1188(5.5.6)S +1584(Polygon)S +1932(........................................................................................................................)S +4982(14)S +6120 V +1188(5.5.7)S +1584(Ellipse)S +1882(..........................................................................................................................)S +4982(14)S +6240 V +1188(5.5.8)S +1584(Circular)S +1941(Annuli)S +2232(............................................................................................................)S +4982(14)S +6360 V +1188(5.5.9)S +1584(Elliptical)S +1981(Annuli)S +2282(..........................................................................................................)S +4982(14)S +6480 V +1188(5.5.10)S +1584(Text)S +1782(..............................................................................................................................)S +4982(14)S +6600 V +1080(5.6)S +1440(Text)S +1653(Fonts)S +1882(..........................................................................................................................)S +4982(15)S +6720 V +1188(5.6.1)S +1584(In-line)S +1880(Font)S +2094(Changes)S +2457(...................................................................................................)S +4982(15)S +6840 V +1080(5.7)S +1440(Line)S +1653(Widths)S +1972(and)S +2146(Styles)S +2407(.....................................................................................................)S +4982(15)S +6960 V +1080(5.8)S +1440(Deleting)S +1814(Markers)S +2157(...............................................................................................................)S +4982(16)S +7080 V +1188(5.8.1)S +1584(Individual)S +2025(Markers.......................................................................................................)S +4982(16)S +7200 V +1188(5.8.2)S +1584(The)S +1769(Entire)S +2043(Overlay)S +2382(......................................................................................................)S +4982(16)S +7920 V +EP +%%Page: 2 3 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +11 R +2963(- 2 -)S +840 V +10 R +1080(5.9)S +1440(Redrawing)S +1908(the)S +2060(Overlay)S +2382(......................................................................................................)S +4982(16)S +1020 V +900(6)S +10 B +1080(ANSI)S +1349(C)S +1451(Function)S +1865(Prototypes)S +10 R +2332(........................................................................................................)S +4982(17)S +1200 V +900(7)S +10 B +1080(Fortran)S +1448(Language)S +1901(Binding)S +2272(Notes)S +10 R +2532(................................................................................................)S +4982(17)S +1380 V +900(8)S +10 B +1080(SPP)S +1288(Language)S +1741(Binding)S +2112(Notes)S +10 R +2357(.......................................................................................................)S +4982(18)S +1560 V +900(9)S +10 B +1080(IIS)S +1244(Protocol)S +1634(Description)S +10 R +2132(................................................................................................................)S +4982(18)S +1740 V +900(10)S +10 B +1080(VXIMTOOL)S +1677(Proxy/Display)S +2313(Server)S +2625(Usage)S +10 R +2882(..................................................................................)S +4982(19)S +1920 V +900(11)S +10 B +1080(C)S +1182(Interface)S +1599(Summary)S +10 R +2032(....................................................................................................................)S +4982(21)S +2100 V +900(12)S +10 B +1080(C)S +1182(Example)S +1590(Tasks)S +10 R +1857(...........................................................................................................................)S +4982(23)S +2220 V +1080(12.1)S +1440(Display)S +1781(Example)S +2157(...............................................................................................................)S +4982(23)S +2340 V +1080(12.2)S +1440(Interactive)S +1896(Graphics)S +2286(Overlay)S +2637(Example)S +3007(.............................................................................)S +4982(27)S +2460 V +1080(12.3)S +1440(Image)S +1719(Mosaic)S +2043(Example)S +2407(.....................................................................................................)S +4982(31)S +2640 V +900(13)S +10 B +1080(Fortran)S +1448(Interface)S +1865(Summary)S +10 R +2307(.........................................................................................................)S +4982(33)S +2820 V +900(14)S +10 B +1080(Fortran)S +1448(Example)S +1856(Tasks)S +10 R +2107(.................................................................................................................)S +4982(35)S +2940 V +1080(14.1)S +1440(Display)S +1781(Example)S +2157(...............................................................................................................)S +4982(35)S +3060 V +1080(14.2)S +1440(Interactive)S +1896(Graphics)S +2286(Overlay)S +2637(Example)S +3007(.............................................................................)S +4982(36)S +3240 V +900(15)S +10 B +1080(SPP)S +1288(Interface)S +1705(Summary)S +10 R +2132(................................................................................................................)S +4982(38)S +7920 V +EP +%%Page: 1 4 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +1230 V +12 B +1419(A)S +1541(Reference)S +2088(Guide)S +2439(for)S +2628(the)S +2824(IRAF)S +3152(Client)S +3502(Display)S +3926(Library)S +4369(\(CDL\))S +1470 V +10 I +2662(Michael)S +3019(Fitzpatrick)S +1650 V +10 R +2645(NOAO/IRAF)S +3219(Group)S +1890 V +2765(February)S +3155(1997)S +2130 V +10 I +2619(Revised:)S +2992(August)S +3300(2001)S +2250 V +2479(Current)S +2826(Version:)S +3230(CDL)S +3455(V1.8)S +2730 V +11 B +900(1.)S +1049(Introduction)S +2886 V +11 R +1175(For)S +1368(more)S +1633(than)S +1862(a)S +1950(decade)S +2292(IRAF)S +2583(has)S +2769(used)S +3010(a)S +11 I +3098(display)S +3456(server)S +11 R +3769(as)S +3900(the)S +4075(primary)S +4463(means)S +4784(for)S +4952(image)S +3006 V +900(display.)S +1320(IRAF)S +1612(client)S +1897(tasks)S +2158(connect)S +2539(to)S +2666(the)S +2840(server)S +3146(and)S +3344(send)S +3585(or)S +3716(read)S +3943(data)S +4165(using)S +4444(a)S +4532(modi\256cation)S +5129(of)S +3126 V +900(the)S +1081(IIS)S +1262(Model)S +1596(70)S +1753(protocol,)S +2194(originally)S +2669(through)S +3058(named)S +3397(\256fo)S +3597(pipes)S +3876(but)S +4064(more)S +4337(recently)S +4737(using)S +5024(unix)S +3246 V +900(domain)S +1268(or)S +1397(inet)S +1600(sockets.)S +2022(The)S +2230(advantage)S +2710(to)S +2833(this)S +3030(approach)S +3467(was)S +3674(that)S +3876(IRAF)S +4164(client)S +4445(tasks)S +4702(could)S +4983(make)S +3366 V +900(use)S +1083(of)S +1211(the)S +1383(image)S +1689(display)S +2045(functionality)S +2645(without)S +3020(duplicating)S +3553(the)S +3725(code)S +3969(needed)S +4316(for)S +4481(actually)S +4866(display-)S +3486 V +900(ing)S +1078(the)S +1249(image.)S +1615(The)S +1822(longtime)S +2251(disadvantage)S +2859(was)S +3065(that)S +3266(the)S +3436(IIS)S +3606(protocol)S +4008(used)S +4245(was)S +4451(arcane)S +4770(and)S +4964(undo-)S +3606 V +900(cumented)S +1375(and)S +1582(therefore)S +2024(largely)S +2377(unavailable)S +2931(to)S +3066(applications)S +3646(outside)S +4013(of)S +4153(the)S +4336(IRAF)S +4636(project.)S +5050(The)S +3726 V +900(Client)S +1213(Display)S +1598(Library)S +1969(\(CDL\))S +2304(provides)S +2725(a)S +2816(public)S +3134(C)S +3251(and)S +3451(Fortran)S +3816(interface)S +4239(for)S +4408(displaying)S +4909(images)S +3846 V +900(and)S +1091(overlay)S +1452(graphics)S +1856(that)S +2054(is)S +2161(independent)S +2730(of)S +2854(the)S +3021(underlying)S +3530(protocol)S +3929(used.)S +4002 V +1175(Unlike)S +1512(the)S +1684(interface)S +2103(used)S +2342(by)S +2490(IRAF)S +2779(applications,)S +3376(the)S +3548(CDL)S +3807(is)S +3920(meant)S +4227(to)S +4352(provide)S +4726(an)S +4868(easy-to-)S +4122 V +900(use,)S +1109(fully)S +1351(featured)S +1742(interface)S +2157(for)S +2318(applications)S +2883(that)S +3082(can)S +3267(be)S +3404(easily)S +3694(evolved)S +4075(for)S +4236(future)S +4531(display)S +4883(servers,)S +4242 V +900(communications)S +1675(schemes,)S +2122(or)S +2261(display)S +2627(functionality.)S +3298(Indeed,)S +3671(the)S +3853(CDL)S +4121(is)S +4244(independent)S +4829(of)S +4969(IRAF)S +4362 V +900(itself)S +1163(\(as)S +1333(are)S +1508(the)S +1685(display)S +2046(servers\))S +2434(so)S +2575(display)S +2936(tasks)S +3199(can)S +3393(be)S +3539(written)S +3893(for)S +4063(any)S +4264(discipline)S +4735(or)S +4868(applica-)S +4482 V +900(tion.)S +4638 V +1175(While)S +1478(this)S +1673(guide)S +1952(assumes)S +2353(programs)S +2802(are)S +2969(written)S +3315(in)S +3436(C,)S +3573(Fortran)S +3931(programmers)S +4550(should)S +4879(\256nd)S +5086(the)S +4758 V +900(translation)S +1408(straightforward)S +2127(by)S +2281(referring)S +2706(to)S +2836(the)S +3014(Fortran)S +3381(interface)S +3806(summary.)S +4320(The)S +4534(package)S +4935(source)S +4878 V +900(\256les)S +1117(include)S +1473(example)S +1877(tasks)S +2130(as)S +2254(does)S +2488(this)S +2681(guide;)S +2989(users)S +3247(with)S +3477(problems,)S +3948(questions,)S +4426(or)S +4551(bug)S +4750(reports)S +5088(are)S +4998 V +900(encouraged)S +1444(to)S +1571(contact)S +11 I +1928(iraf@noao.edu)S +11 R +2595(.)S +2697(A)S +2817(small)S +3097(code)S +3344(sample)S +3696(demonstrating)S +4365(the)S +4539(problem)S +4945(would)S +5118 V +900(be)S +1036(very)S +1263(helpful)S +1607(in)S +1726(\256nding)S +2072(a)S +2153(solution)S +2542(to)S +2661(any)S +2852(reported)S +3249(problems.)S +5478 V +11 B +900(2.)S +1049(Getting)S +1436(Started)S +5634 V +11 R +1175(All)S +1358(C)S +1474(programs)S +1930(must)S +2188(include)S +2554(the)S +2731(header)S +3064(\256le)S +11 B +3248("cdl.h")S +11 R +3646(in)S +3775(order)S +4048(to)S +4177(get)S +4354(package)S +4754(de\256nitions)S +5754 V +900(for)S +1084(constants)S +1550(such)S +1808(as)S +1956(colors)S +2281(and)S +2496(structure)S +2936(de\256nitions)S +3459(used.)S +3778(The)S +4005(Fortran)S +4385(interface)S +4822(does)S +5079(not)S +5874 V +11 I +900(require)S +11 R +1257(anything)S +1676(similar,)S +2045(however)S +2456(for)S +2618(fortran)S +2950(compilers)S +3418(which)S +3721(support)S +4086(an)S +11 C +4257(include)S +11 R +4754(directive)S +5172(a)S +5994 V +11 B +900(cdlftn.inc)S +11 R +1383(\256le)S +1562(may)S +1789(be)S +1930(used)S +2169(to)S +2293(de\256ne)S +2599(symbolic)S +3041(constants)S +3488(passed)S +3818(to)S +3942(procedures,)S +4487(this)S +4685(\256le)S +4864(must)S +5117(be)S +6114 V +900(included)S +1320(by)S +1472(each)S +1713(procedure)S +2191(using)S +2472(the)S +2648(CDL.)S +2971(Fortran)S +3336(programs)S +3792(not)S +3975(using)S +4257(this)S +4460(\256le)S +4644(must)S +4902(pass)S +5134(in)S +6234 V +900(the)S +1077(constants)S +1529(explicitly,)S +2016(needed)S +2368(values)S +2690(are)S +2864(found)S +3162(throughout)S +3687(this)S +3889(manual.)S +4315(C)S +4431(procedures)S +4952(which)S +6354 V +900(return)S +1199(an)S +1340(integer)S +1682(value)S +1957(will)S +2167(return)S +2466(a)S +2552(positive)S +2939(number)S +3312(to)S +3436(indicate)S +3821(an)S +3962(error)S +4211(has)S +4395(occurred)S +4815(and)S +5012(print)S +6474 V +900(an)S +1036(error)S +1280(message,)S +1712(otherwise)S +2171(zero)S +2391(is)S +2498(returned.)S +6630 V +1175(The)S +11 B +1381(cdl_open\(\))S +11 R +1912(procedure)S +2384(is)S +2494(used)S +2731(to)S +2853(establish)S +3274(a)S +3358(connection)S +3875(to)S +3997(the)S +4167(server)S +4469(and)S +4664(initialize)S +5086(the)S +6750 V +900(package,)S +1323(it)S +1423(returns)S +1765(a)S +1851(CDL)S +2108(structure)S +2528(pointer)S +2876(that)S +3078(is)S +3189(passed)S +3518(to)S +3641(other)S +3903(CDL)S +4160(procedures.)S +4737(For)S +4927(C)S +5038(pro-)S +6870 V +900(grams)S +1207(this)S +1406(means)S +1726(a)S +1814(separate)S +2211(pointer)S +2562(may)S +2791(be)S +2934(maintained)S +3462(for)S +3629(each)S +3868(server)S +4174(connection,)S +4723(the)S +4897(Fortran)S +6990 V +900(interface)S +1329(is)S +1451(limited)S +1812(to)S +1946(only)S +2190(one)S +2396(server)S +2710(connection)S +3239(per)S +3425(process)S +3800(since)S +4072(the)S +4253(pointer)S +4611(is)S +4732(maintained)S +7110 V +900(internally.)S +1428(The)S +1644(connection)S +2171(is)S +2291(terminated)S +2806(using)S +3091(the)S +11 B +3271(cdl_close\(\))S +11 R +3810(procedure.)S +4353(Between)S +4783(these)S +5055(two)S +7230 V +900(calls)S +1158(may)S +1404(be)S +1564(any)S +1779(combination)S +2385(of)S +2532(CDL)S +2808(procedure)S +3300(calls)S +3557(for)S +3740(doing)S +4047(image)S +4371(display)S +4745(or)S +4892(overlay)S +7920 V +EP +%%Page: 2 5 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2963(- 2 -)S +840 V +900(graphics.)S +996 V +1175(For)S +1376(example,)S +1823(the)S +2005(simplest)S +2421(possible)S +2830(program)S +3249(for)S +3424(displaying)S +3931(an)S +4083(IRAF)S +4383(image)S +4700(would)S +5024(look)S +1116 V +900(something)S +1392(like:)S +1296 V +11 C +1450(#include)S +2044("cdl.h")S +1536 V +1450(main)S +1780(\(int)S +2110(argc,)S +2506(char)S +2836(*argv[]\))S +1656 V +1450({)S +1776 V +1714(CDLPtr)S +2176(cdl)S +2440(=)S +2572(cdl_open)S +3166(\(\(char)S +3628(*\)0\);)S +1896 V +1714(cdl_displayIRAF)S +2770(\(cdl,)S +3166(argv[1],)S +3760(1,)S +3958(1,)S +4156(1,)S +4354(1\);)S +2016 V +1714(cdl_close)S +2374(\(cdl\);)S +2136 V +1450(})S +2352 V +11 R +900(This)S +1131(program)S +1537(displays)S +1933(band)S +2181(one)S +2374(of)S +2500(an)S +2638(image)S +2941(named)S +3268(on)S +3413(the)S +3582(command)S +4050(line)S +4250(to)S +4372(the)S +4542(server)S +4844(in)S +4966(frame)S +2472 V +900(one)S +1092(using)S +1365(the)S +1533(default)S +1871(512x512)S +2290(frame)S +2577(bu)S +2687 H + (f)show 11 -.5 mul h (f)show +11 R +2754(er,)S +2899(zscaling)S +3291(the)S +3458(pixels)S +3754(to)S +3873(8-bit)S +4114(values)S +4427(automatically.)S +5086(No)S +2592 V +900(error)S +1146(checking)S +1576(is)S +1685(performed)S +2175(to)S +2296(verify)S +2592(that)S +2792(a)S +2875(connection)S +3391(was)S +3596(established)S +4119(or)S +4245(that)S +4445(the)S +4614(argument)S +5063(is)S +5172(a)S +2712 V +900(valid)S +1163(IRAF)S +1457(image.)S +1829(Most)S +2099(programs)S +2555(will)S +2769(be)S +2914(more)S +3181(complex)S +3601(than)S +3832(this)S +4034(but)S +4217(it)S +4321(should)S +4657(be)S +4802(clear)S +5055(that)S +2832 V +900(image)S +1201(display)S +1552(from)S +1798(client)S +2075(applications)S +2639(is)S +2746(a)S +2827(now)S +3049(trivial)S +3345(operation.)S +3072 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +3252 V +11 C +1175(#include)S +1769("cdl.h")S +3492 V +1175(CDLPtr)S +1637(cdl_open)S +2231(\(char)S +2627(*imtdev\))S +3612 V +1175(void)S +1505(cdl_close)S +2165(\(CDLPtr)S +2693(cdl\))S +3972 V +11 B +900(3.)S +1049(Server)S +1391(Connections)S +4128 V +11 R +1175(The)S +11 B +1391(cdl_open\(\))S +11 R +1932(procedure)S +2414(takes)S +2685(a)S +2779(single)S +3088(argument)S +3548(specifying)S +4051(the)S +4232(type)S +4468(of)S +4606(connection)S +5134(to)S +4248 V +900(make)S +1175(to)S +1298(the)S +1469(server,)S +1800(this)S +1997(routine)S +2345(also)S +2559(initializes)S +3024(the)S +3195(CDL)S +3452(package.)S +3907(If)S +4016(this)S +4213(is)S +4324(a)S +4409(NULL)S +4738(pointer)S +5086(the)S +4368 V +900(CDL)S +1171(will)S +1395(attempt)S +1777(to)S +1915(\256rst)S +2139(connect)S +2531(on)S +2693(a)S +2793(unix)S +3041(domain)S +3423(socket,)S +3783(if)S +3902(that)S +4119(fails)S +4360(the)S +4546(standard)S +4969(IRAF)S +4488 V +900(/dev/imt1*)S +1411(\256fo)S +1597(pipes)S +1862(are)S +2027(tried.)S +2322(The)S +2525(syntax)S +2845(for)S +3005(the)S +11 I +3172(imtdev)S +11 R +3497(argument)S +3944(is)S +4051(as)S +4175(follows:)S +4668 V +11 C +2000(<domain>)S +2594(:)S +2726(<address>)S +4884 V +11 R +900(where)S +1204(<domain>)S +1696(is)S +1808(one)S +2004(of)S +2133(")S +11 B +2178(inet)S +11 R +2355(")S +2438(\(internet)S +2847(tcp/ip)S +3136(socket\),)S +3518(")S +11 B +3563(unix)S +11 R +3773(")S +3856(\(unix)S +4126(domain)S +4494(socket\))S +4848(or)S +4977(")S +11 B +5022(\256fo)S +11 R +5175(")S +5004 V +900(\(named)S +1264(pipe\).)S +1586(The)S +1792(form)S +2041(of)S +2168(the)S +2338(address)S +2702(depends)S +3097(upon)S +3353(the)S +3522(domain,)S +3915(as)S +4041(illustrated)S +4516(in)S +4637(the)S +4806(examples)S +5124 V +900(below.)S +1264(The)S +1469(address)S +1832(\256eld)S +2063(may)S +2288(contain)S +2647(up)S +2793(to)S +2915(two)S +3116("%d")S +3388(\256elds.)S +3724(If)S +3832(present,)S +4212(the)S +4382(user's)S +4679(UID)S +4909(will)S +5117(be)S +5244 V +900(substituted)S +1440(\(e.g.)S +1697("unix:/tmp/.IMT%d"\).)S +2749(The)S +2981(default)S +3347(connection)S +3890(if)S +4019(no)S +4191(imtdev)S +4559(is)S +4695(speci\256ed)S +5146(is)S +5364 V +900("unix:/tmp/.IMT%d",)S +1909(failing)S +2251(that)S +2471(a)S +2574(connection)S +3110(is)S +3239(attempted)S +3727(on)S +3892(the)S +4082(/dev/imt1[io])S +4719(named)S +5067(\256fo)S +5484 V +900(pipes.)S +5724 V +11 B +900(3.1.)S +1132(Domain)S +1538(Sockets)S +5880 V +11 R +1175(Domain)S +1576(sockets)S +1946(are)S +2125(sockets)S +2495(created)S +2856(on)S +3013(the)S +3194(local)S +3454(host.)S +3746(The)S +3963(connection)S +4491(is)S +4612(usually)S +4978(faster)S +6000 V +900(than)S +1130(an)S +1274(inet)S +1479(socket)S +1799(and)S +1997(comparable)S +2547(to)S +2673(a)S +2761(\256fo.)S +3015(If)S +3127(the)S +3301(socket)S +3621(name)S +3898(is)S +4012(speci\256ed)S +4442(with)S +4678(a)S +4766('%d')S +5024(\256eld)S +6120 V +900(the)S +1073(client)S +1356(can)S +1546(be)S +1688(assured)S +2055(of)S +2185(a)S +2272(unique)S +2610(socket)S +2929(name)S +3205(for)S +3371(each)S +3609(user)S +3831(allowing)S +4256(multiple)S +4664(clients)S +4991(to)S +5117(be)S +6240 V +900(run)S +1079(on)S +1222(the)S +1389(same)S +1647(host)S +1864(by)S +2007(di)S +2093 H + (f)show 11 -.5 mul h (f)show +11 R +2160(erent)S +2411(users.)S +6396 V +900(Example)S +11 Y1 +900(2)S +905(2222222)S +6696 V +11 C +1175(/*)S +1373(Connection)S +2099(to)S +2297(a)S +2429(local)S +2825(host)S +3155(using)S +3551(socket)S +4013(domain)S +4475(socket.)S +5003(*/)S +6816 V +1175(if)S +1373(\(\(cdl)S +1769(=)S +1901(cdl_open)S +2495(\("unix:/tmp/.IMT%d"\)\))S +3947(==)S +4145(NULL\))S +4541({)S +6936 V +1505(fprintf)S +2033(\(stderr,)S +2627("cannot)S +3155(open)S +3485(domain)S +3947(socket)S +4409(connection\\n"\);)S +7056 V +1505(exit)S +1835(\(1\);)S +7176 V +1175(})S +7920 V +EP +%%Page: 3 6 +BP +/slant 0 def +/height 1.000000 def +11 C +11 C +480 V +11 R +2963(- 3 -)S +840 V +11 B +900(3.2.)S +1132(Named)S +1500(FIFO)S +1796(Pipes)S +996 V +11 R +1175(This)S +1426(is)S +1555(the)S +1744(traditional)S +2251(approach,)S +2734(and)S +2947(the)S +3136(only)S +3387(one)S +3600(supported)S +4089(by)S +4255(SAOimage)S +4799(\(although)S +1116 V +900(recent)S +1208(versions)S +1616(contain)S +1981(support)S +2353(for)S +2522(sockets\).)S +2951(Any)S +3182(named)S +3516(\256fo)S +3711(pipe)S +3942(may)S +4173(be)S +4318(used,)S +4589(the)S +4765(syntax)S +5093(for)S +1236 V +900(the)S +11 I +1067(imtdev)S +11 R +1392(string)S +1676(in)S +1795(this)S +1988(case)S +2208(is)S +1416 V +11 B +1450(\256fo:)S +11 C +1639(<input_fifo>)S +11 B +2431(:)S +11 C +2467(<output_fifo>)S +1632 V +11 R +900(Example)S +11 Y1 +900(2)S +905(2222222)S +1812 V +11 C +1175(/*)S +1373(Connection)S +2099(to)S +2297(a)S +2429(local)S +2825(host)S +3155(using)S +3551(named)S +3947(fifo)S +4277(pipes.)S +4739(*/)S +1932 V +1175(if)S +1373(\(\(cdl)S +1769(=)S +1901(cdl_open)S +2495(\("fifo:/dev/imt1i:/dev/imt1o"\)\))S +4607(==)S +4805(NULL\))S +5201({)S +2052 V +1505(fprintf)S +2033(\(stderr,)S +2627("cannot)S +3155(open)S +3485(fifo)S +3815(pipe)S +4145(connection\\n"\);)S +2172 V +1505(exit)S +1835(\(1\);)S +2292 V +1175(})S +2532 V +11 B +900(3.3.)S +1132(Inet)S +1354(Sockets)S +2688 V +11 R +1175(Inet)S +1378(sockets)S +1734(are)S +1899(connections)S +2456(between)S +2854(hosts)S +3115(via)S +3283(a)S +3365(tcp/ip)S +3650(socket.)S +4025(This)S +4255(permits)S +4619(connecting)S +5134(to)S +2808 V +900(the)S +1067(server)S +1366(over)S +1593(a)S +1674(remote)S +2011(network)S +2403(connection)S +2917(anywhere)S +3374(on)S +3517(the)S +3684(Internet.)S +2964 V +900(Example)S +11 Y1 +900(2)S +905(2222222)S +3144 V +11 C +1175(/*)S +1373(Connection)S +2099(to)S +2297(a)S +2429(local)S +2825(host)S +3155(using)S +3551(socket)S +4013(5137.)S +4409(*/)S +3264 V +1175(if)S +1373(\(\(cdl)S +1769(=)S +1901(cdl_open)S +2495(\("inet:5137"\)\))S +3485(==)S +3683(NULL\))S +4079({)S +3384 V +1505(fprintf)S +2033(\(stderr,)S +2627("cannot)S +3155(open)S +3485(inet)S +3815(socket)S +4277(connection\\n"\);)S +3504 V +1505(exit)S +1835(\(1\);)S +3624 V +1175(})S +3864 V +1175(/*)S +1373(Connection)S +2099(to)S +2297(a)S +2429(remote)S +2891(internet)S +3485(host)S +3815(using)S +4211(socket)S +4673(5137.)S +5069(*/)S +3984 V +1175(if)S +1373(\(\(cdl)S +1769(=)S +1901(cdl_open)S +2495(\("inet:5137:foo.bar.edu"\)\))S +4277(==)S +4475(NULL\))S +4871({)S +4104 V +1505(fprintf)S +2033(\(stderr,)S +2627("cannot)S +3155(open)S +3485(inet)S +3815(socket)S +4277(connection\\n"\);)S +4224 V +1505(exit)S +1835(\(1\);)S +4344 V +1175(})S +4584 V +11 B +900(3.4.)S +1132(User-De\256ned)S +1780(Connections)S +4740 V +11 R +1175(Since)S +1465(IRAF)S +1762(V2.10.3)S +2163(client)S +2453(tasks)S +2719(have)S +2971(been)S +3223(able)S +3451(to)S +3583(use)S +3775(an)S +11 B +3924(IMTDEV)S +11 R +4422(unix)S +4665(environment)S +4860 V +900(variable)S +1286(to)S +1406(set)S +1562(the)S +1730(connection)S +2245(type,)S +2496(the)S +2663(syntax)S +2983(of)S +3107(this)S +3300(variable)S +3685(is)S +3792(the)S +3959(same)S +4217(as)S +4341(described)S +4793(above.)S +5148(If)S +4980 V +900(the)S +11 I +1069(cdl_open\(\))S +11 R +1578(procedure)S +2049(is)S +2158(called)S +2454(with)S +2685(a)S +2768(NULL)S +3095(pointer)S +3441(the)S +3610(IMTDEV)S +4071(environment)S +4661(variable)S +5048(will)S +5100 V +900(automatically)S +1544(be)S +1693(checked.)S +2157(To)S +2325(explicitly)S +2787(use)S +2979(this)S +3185(\(or)S +3358(any)S +3562(other\))S +3868(variable)S +4265(in)S +4396(the)S +4575(client)S +4864(task)S +5086(the)S +5220 V +11 I +900(cdl_open\(\))S +11 R +1407(procedure)S +1876(may)S +2098(be)S +2234(called)S +2528(as)S +2652(e.g.)S +5400 V +11 C +1175(if)S +1373(\(\(cdl)S +1769(=)S +1901(cdl_open)S +2495(\(getenv\("IMTDEV"\)\)\))S +3815(==)S +4013(NULL\))S +4409({)S +5520 V +1505(fprintf)S +2033(\(stderr,)S +2627("cannot)S +3155(open)S +3485(server)S +3947(connection\\n"\);)S +5640 V +1505(exit)S +1835(\(1\);)S +5760 V +1175(})S +6000 V +11 B +900(4.)S +1049(Image)S +1374(Display)S +6240 V +900(4.1.)S +1132(Overview)S +1615(of)S +1739(the)S +1918(Display)S +2307(Process)S +6396 V +11 R +1175(Basic)S +1492(image)S +1833(display)S +2224(is)S +2371(done)S +2658(most)S +2947(easily)S +3277(using)S +3590(the)S +3798(high-level)S +11 B +4317(cdl_displayIRAF\(\))S +11 R +5192(,)S +6516 V +11 B +900(cdl_displayFITS\(\))S +11 R +1807(and)S +11 B +2018(cdl_displayPix\(\))S +11 R +2831(procedures.)S +3424(These)S +3738(routines)S +4145(automatically)S +4796(de\256ne)S +5117(an)S +6636 V +900(image)S +1218(WCS)S +1507(and)S +1715(mapping,)S +2178(clear)S +2439(the)S +2623(frame,)S +2955(set)S +3127(the)S +3311(frame)S +3615(bu)S +3725 H + (f)show 11 -.5 mul h (f)show +11 R +3792(er)S +3926(con\256guration)S +4562(and)S +4770(center)S +5086(the)S +6756 V +900(image)S +1237(in)S +1392(the)S +1595(display.)S +2043(For)S +2265(most)S +2549(applications)S +3149(these)S +3443(are)S +3644(all)S +3823(that)S +4057(will)S +4298(be)S +4470(needed,)S +4876(but)S +5086(the)S +6876 V +11 B +900(cdl_writeSubRaster\(\))S +11 R +1940(procedure)S +2411(can)S +2597(also)S +2809(be)S +2947(used)S +3183(to)S +3304(display)S +3657(an)S +3795(image.)S +4159(For)S +4347(example,)S +4781(to)S +4902(display)S +6996 V +900(one)S +1109(image)S +1428(in)S +1565(a)S +1664(mosaic)S +2026(or)S +2168(other)S +2444(cases)S +2725(where)S +3042(the)S +3226(task)S +3453(needs)S +3752(low-level)S +4216(access)S +4544(to)S +4680(position)S +5086(the)S +7116 V +900(image)S +1201(or)S +1325(write)S +1583(raw)S +1779(pixel)S +2032(values.)S +7920 V +EP +%%Page: 4 7 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2963(- 4 -)S +840 V +1175(In)S +1322(these)S +1603(cases)S +1889(it)S +2007(is)S +2137(the)S +2328(responsibility)S +2985(of)S +3133(the)S +3324(client)S +3625(program)S +4053(to)S +4196(prepare)S +4579(the)S +4770(server)S +5093(for)S +960 V +900(display.)S +1312(The)S +1515(basic)S +1773(steps)S +2026(involved)S +2444(in)S +2563(displaying)S +3055(an)S +3191(image)S +3492(include)S +1200 V +11 B +1407(Operation)S +3773(CDL)S +4038(Procedure)S +1210 V +11 Y1 +1407(2)S +1413(222222222222222222222222222222222222222222222222222222222222)S +1330 V +11 R +1407(Selecting)S +1849(the)S +2016(frame)S +11 I +3773(cdl_setFrame\(\))S +1450 V +11 R +1407(Clear)S +1677(the)S +1844(frame)S +11 I +3773(cdl_clearFrame\(\))S +1570 V +11 R +1407(Select)S +1708(the)S +1875(frame)S +2162(bu)S +2272 H + (f)show 11 -.5 mul h (f)show +11 R +2339(er)S +2456(con\256guration)S +11 I +3773(cdl_selectFB\(\))S +1690 V +11 R +1407(Set)S +1581(the)S +1748(frame)S +2035(bu)S +2145 H + (f)show 11 -.5 mul h (f)show +11 R +2212(er)S +2329(con\256guration)S +11 I +3773(cdl_setFBCon\256g\(\))S +1810 V +11 R +1407(Scale)S +1677(the)S +1844(image)S +2145(pixels)S +2441(to)S +2560(201)S +2758(display)S +3109(values)S +11 I +3773(cdl_zscaleImage\(\))S +1930 V +11 R +1407(Compute)S +1844(the)S +2011(raster)S +2286(placement)S +2769(in)S +2888(the)S +3055(frame)S +3342(bu)S +3452 H + (f)show 11 -.5 mul h (f)show +11 R +3519(er)S +2050 V +1407(Construct)S +1868(a)S +11 I +1949(node!path)S +11 R +2427(image)S +2728(path)S +2170 V +1407(Set)S +1581(the)S +1748(image)S +2049(mapping)S +11 I +3773(cdl_setMapping\(\))S +2290 V +11 R +1407(De\256ne)S +1732(the)S +1899(image)S +2200(WCS)S +2410 V +1407(Set)S +1581(the)S +1748(image)S +2049(WCS)S +11 I +3773(cdl_setWCS\(\))S +2530 V +11 R +1407(Write)S +1689(the)S +1856(pixels)S +2152(to)S +2271(the)S +2438(display)S +11 I +3773(cdl_writeSubRaster\(\))S +2770 V +11 R +900(In)S +1044(cases)S +1328(like)S +1547(a)S +1649(mosaic)S +2014(display,)S +2414(obviously)S +2903(some)S +3189(steps)S +3463(\(e.g.)S +3712(clearing)S +4118(the)S +4306(frame,)S +4642(selecting)S +5086(the)S +2890 V +900(con\256guration,)S +1548(etc\))S +1745(will)S +1950(only)S +2179(need)S +2418(to)S +2537(be)S +2673(done)S +2919(once.)S +3219(XImtool)S +3625(V1.3)S +3875(and)S +4066(later)S +4293(version)S +4649(support)S +5012(mul-)S +3010 V +900(tiple)S +1147(WCSs)S +1480(in)S +1617(a)S +1716(single)S +2030(frame)S +2335(so)S +2484(each)S +2734(piece)S +3015(of)S +3157(the)S +3342(mosaic)S +3704(should)S +4050(de\256ne)S +4370(a)S +4470(mapping)S +4907(and)S +5117(an)S +3130 V +900(independent)S +1487(WCS.)S +1838(The)S +2058(last)S +2261(step)S +2488(in)S +2624(the)S +2808(display)S +3176(here)S +3413(should)S +3757(be)S +3910(a)S +4008(single)S +4321(WCS)S +4610(for)S +4787(the)S +4971(entire)S +3250 V +900(mosaic)S +1264(such)S +1518(as)S +1662(")S +11 I +1707(detector)S +2119(coordinates)S +11 R +2638(",)S +2764(without)S +3154(this)S +3367(the)S +3555(coordinates)S +4114(used)S +4369(by)S +4533(default)S +4891(will)S +5117(be)S +3370 V +900(based)S +1195(on)S +1351(the)S +1530(last)S +1728(WCS)S +2012(sent)S +2234(to)S +2365(the)S +2544(display.)S +2968(Servers)S +3341(which)S +3654(do)S +3809(not)S +3995(support)S +4370(mappings)S +4843(will)S +5060(just)S +3490 V +900(ignore)S +1227(the)S +1408(mapping)S +1840(information,)S +2434(but)S +2622(may)S +2858(still)S +3072(require)S +3428(a)S +3523(frame)S +3824(bu)S +3934 H + (f)show 11 -.5 mul h (f)show +11 R +4001(er)S +4132(WCS)S +4418(for)S +4593(other)S +4866(tasks)S +5134(to)S +3610 V +900(operate)S +1269(correctly.)S +1766(For)S +1967(simple)S +2309(displays)S +2718(of)S +2857(single)S +3168(images,)S +3555(the)S +3737(high-level)S +4230(routines)S +4632(handle)S +4972(all)S +5129(of)S +3730 V +900(these)S +1164(steps)S +1423(automatically,)S +2088(they)S +2316(are)S +2487(included)S +2904(here)S +3130(as)S +3260(checklist)S +3689(of)S +3819(what)S +4071(must)S +4326(be)S +4469(considered)S +4983(when)S +3850 V +900(using)S +1172(the)S +1339(CDL)S +1592(for)S +1752(low-level)S +2199(display.)S +4090 V +11 B +900(4.2.)S +1132(Displaying)S +1669(IRAF)S +1970(Images)S +4246 V +11 R +1175(The)S +11 B +1379(cdl_displayIRAF\(\))S +11 R +2288(procedure)S +2758(can)S +2943(be)S +3080(used)S +3315(to)S +3435(display)S +3787(an)S +3924(IRAF)S +4209(OIF)S +4420(format)S +4746(image)S +5049(\(i.e.)S +4366 V +900(images)S +1252(with)S +1489(a)S +11 I +1578(.imh)S +11 R +1812(extension\))S +2310(by)S +2461(simply)S +2803(passing)S +3174(in)S +3300(the)S +3474(image)S +3782(name.)S +4120(Pixel)S +4387(\256les)S +4611(for)S +4778(the)S +4952(image)S +4486 V +900(must)S +1150(be)S +1288(accessible)S +1766(from)S +2014(the)S +2183(local)S +2431(machine)S +2837(but)S +3013(can)S +3199(be)S +3337(in)S +3458(any)S +3651(directory,)S +4109(the)S +4278(HDR$)S +4600(syntax)S +4923(for)S +5086(the)S +4606 V +900(imdir)S +1174(is)S +1283(also)S +1495(recognized.)S +2070(Images)S +2421(may)S +2645(be)S +2783(three)S +3036(dimensional,)S +3637(the)S +11 I +3806(band)S +11 R +4060(argument)S +4508(is)S +4616(used)S +4851(to)S +4971(select)S +4726 V +900(the)S +1073(image)S +1380(band)S +1632(to)S +1757(be)S +1899(displayed.)S +2420(The)S +11 I +2629(frame)S +11 R +2924(and)S +11 I +3121(fbcon\256g)S +11 R +3514(arguments)S +4011(select)S +4300(the)S +4474(frame)S +4768(and)S +4966(frame)S +4846 V +900(bu)S +1010 H + (f)show 11 -.5 mul h (f)show +11 R +1077(er)S +1210(size)S +1429(respectively,)S +2035(the)S +2218(special)S +2571(symbolic)S +3024(value)S +11 B +3310(FB_AUTO)S +11 R +3872(may)S +4109(be)S +4260(used)S +4509(for)S +4684(the)S +11 I +4866(fbcon\256g)S +4966 V +11 R +900(argument)S +1358(to)S +1488(have)S +1738(the)S +1916(procedure)S +2396(automatically)S +3038(select)S +3331(the)S +3509(frame)S +3807(bu)S +3917 H + (f)show 11 -.5 mul h (f)show +11 R +3984(er)S +4112(most)S +4371(appropriate)S +4914(for)S +5086(the)S +5086 V +900(image)S +1208(size.)S +1479(If)S +1591(the)S +11 I +1765(zscale)S +11 R +2073(\257ag)S +2278(is)S +2392(greater)S +2734(than)S +2963(zero)S +3190(the)S +3364(image)S +3672(will)S +3884(automatically)S +4522(be)S +4664(converted)S +5134(to)S +5206 V +900(8-bit)S +1154(values)S +1480(using)S +1765(the)S +1945(zscale)S +2257(mapping)S +2688(algorithm.)S +3223(The)S +3439(function)S +3851(returns)S +4201(a)S +4295(positive)S +4690(value)S +4973(if)S +5086(the)S +5326 V +900(image)S +1201(cannot)S +1526(be)S +1662(accessed)S +2076(or)S +2200(displayed)S +2654(for)S +2814(any)S +3005(reason,)S +3351(an)S +3487(error)S +3731(message)S +4135(will)S +4340(be)S +4476(printed.)S +5482 V +1175(The)S +11 I +1393(cdl_isIRAF\(\))S +11 R +2013(procedure)S +2497(returns)S +2849(a)S +2946(positive)S +3344(value)S +3630(if)S +3746(the)S +3929(\256lename)S +4356(argument)S +4819(is)S +4942(recog-)S +5602 V +900(nized)S +1177(as)S +1308(an)S +1451(IRAF)S +1742(image,)S +2078(it)S +2180(does)S +2421(not)S +2602(check)S +2896(whether)S +3288(the)S +3462(pixel)S +3722(\256le)S +3903(can)S +4094(be)S +4236(successfully)S +4811(accessed.)S +5722 V +900(For)S +1086(simply)S +1420(reading)S +1781(the)S +1948(pixels)S +2244(from)S +2490(an)S +2626(IRAF)S +2910(image)S +3211(the)S +11 B +3378(cdl_readIRAF\(\))S +11 R +4161(procedure)S +4631(may)S +4854(be)S +4991(used.)S +5842 V +900(The)S +1114(function)S +1524(returns)S +1872(a)S +1964(zero)S +2195(value)S +2475(and)S +2676(sets)S +2884(the)S +3061(output)S +3386(pixel)S +3649(array,)S +3943(image)S +4254(dimensions)S +4799(and)S +5000(pixel)S +5962 V +900(size)S +1117(if)S +1231(successful,)S +1756(otherwise)S +2229(the)S +2410(function)S +2823(returns)S +3175(a)S +3271(positive)S +3668(value.)S +4014(Note)S +4275(that)S +4488(the)S +4670(output)S +5000(pixel)S +6082 V +900(values)S +1213(may)S +1435(need)S +1674(to)S +1793(be)S +1929(scaled)S +2235(before)S +2546(they)S +2768(can)S +2952(be)S +3088(displayed.)S +6322 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +6442 V +11 C +1175(int)S +1439(cdl_displayIRAF)S +2495(\(CDLPtr)S +3023(cdl,)S +3353(char)S +3683(*fname,)S +4211(int)S +4475(band,)S +6562 V +1439(int)S +1703(frame,)S +2165(int)S +2429(fbconfig,)S +3089(int)S +3353(zscale\))S +6682 V +1175(int)S +1439(cdl_isIRAF)S +2165(\(char)S +2561(*fname\))S +6802 V +1175(int)S +1439(cdl_readIRAF)S +2297(\(char)S +2693(*fname,)S +3221(int)S +3485(band,)S +3881(uchar)S +4277(**pix,)S +6922 V +1439(int)S +1703(*nx,)S +2033(int)S +2297(*ny,)S +2627(int)S +2891(*bitpix,)S +3485(char)S +3815(*title\))S +7920 V +EP +%%Page: 5 8 +BP +/slant 0 def +/height 1.000000 def +11 C +11 C +480 V +11 R +2963(- 5 -)S +840 V +11 B +900(4.3.)S +1132(Displaying)S +1669(FITS)S +1948(Images)S +996 V +11 R +1175(The)S +11 B +1385(cdl_displayFITS\(\))S +11 R +2278(procedure)S +2754(can)S +2945(be)S +3088(used)S +3329(to)S +3455(display)S +3813(a)S +11 I +3901(simple)S +11 R +4228(FITS)S +4495(image)S +4804(by)S +4955(name.)S +1116 V +900(A)S +1016("simple")S +1437(FITS)S +1701(\256le)S +1879(is)S +1990(assumed)S +2405(to)S +2528(be)S +2668(one)S +2863(containing)S +3364(a)S +3449(single)S +3749(image)S +4053(and)S +4247(having)S +4582(no)S +4728(extensions.)S +1236 V +900(Other)S +1183(types)S +1449(of)S +1574(FITS)S +1835(\256les)S +2053(may)S +2276(of)S +2401(course)S +2720(be)S +2857(displayed)S +3312(but)S +3487(the)S +3655(client)S +3933(will)S +4139(have)S +4379(to)S +4499(use)S +4680(other)S +4940(means)S +1356 V +900(to)S +1026(import)S +1360(the)S +1534(pixels.)S +1898(FITS)S +2164(image)S +2471(extensions)S +2974(may)S +3202(be)S +3344(supported)S +3816(in)S +3941(a)S +4028(future)S +4328(release)S +4669(of)S +4799(the)S +4972(CDL.)S +1476 V +900(The)S +11 I +1110(frame)S +11 R +1406(and)S +11 I +1605(fbcon\256g)S +11 R +2000(arguments)S +2498(select)S +2788(the)S +2963(frame)S +3258(and)S +3457(frame)S +3752(bu)S +3862 H + (f)show 11 -.5 mul h (f)show +11 R +3929(er)S +4054(size)S +4265(respectively,)S +4863(the)S +5038(spe-)S +1596 V +900(cial)S +1103(symbolic)S +1552(value)S +11 B +1834(FB_AUTO)S +11 R +2393(may)S +2627(be)S +2775(used)S +3021(for)S +3192(the)S +11 I +3370(fbcon\256g)S +11 R +3768(argument)S +4226(to)S +4356(have)S +4606(the)S +4784(procedure)S +1716 V +900(automatically)S +1540(select)S +1831(the)S +2007(frame)S +2303(bu)S +2413 H + (f)show 11 -.5 mul h (f)show +11 R +2480(er)S +2606(most)S +2863(appropriate)S +3403(for)S +3573(the)S +3750(image)S +4061(size.)S +4335(If)S +4450(the)S +11 I +4627(zscale)S +11 R +4938(\257ag)S +5146(is)S +1836 V +900(greater)S +1236(than)S +1459(zero)S +1680(the)S +1847(image)S +2148(will)S +2353(automatically)S +2984(be)S +3120(converted)S +3584(to)S +3703(8-bit)S +3944(values)S +4257(using)S +4529(the)S +4696(zscale)S +4995(map-)S +1956 V +900(ping)S +1154(algorithm.)S +1702(The)S +1931(function)S +2356(returns)S +2719(a)S +2826(positive)S +3234(value)S +3530(if)S +3656(the)S +3849(image)S +4176(cannot)S +4527(be)S +4689(accessed)S +5129(or)S +2076 V +900(displayed)S +1354(for)S +1514(any)S +1705(reason,)S +2051(an)S +2187(error)S +2431(message)S +2835(will)S +3040(be)S +3176(printed.)S +2232 V +1175(The)S +11 I +1378(cdl_isFITS\(\))S +11 R +1966(procedure)S +2435(returns)S +2772(a)S +2853(positive)S +3235(value)S +3505(if)S +3605(the)S +3773(\256lename)S +4185(argument)S +4633(is)S +4741(recognized)S +2352 V +900(as)S +1037(a)S +1131(simple)S +1470(FITS)S +1742(image.)S +2116(For)S +2314(simply)S +2660(reading)S +3033(the)S +3212(image)S +3525(pixels)S +3833(the)S +11 B +4012(cdl_readFITS\(\))S +11 R +4784(procedure)S +2472 V +900(may)S +1123(be)S +1260(used.)S +1556(The)S +1760(output)S +2076(pixel)S +2330(array,)S +2615(image)S +2917(dimensions)S +3453(and)S +3645(pixel)S +3899(size)S +4103(are)S +4269(returned)S +4668(if)S +4770(successful)S +2592 V +900(otherwise)S +1362(the)S +1532(function)S +1934(returns)S +2274(a)S +2358(positive)S +2743(value.)S +3077(Note)S +3326(that)S +3527(the)S +3697(returned)S +4097(pixel)S +4353(values)S +4669(may)S +4893(need)S +5134(to)S +2712 V +900(be)S +1036(scaled)S +1342(before)S +1653(they)S +1875(can)S +2059(be)S +2195(displayed.)S +2952 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +3072 V +11 C +1175(int)S +1439(cdl_displayFITS)S +2495(\(CDLPtr)S +3023(cdl,)S +3353(char)S +3683(*fname,)S +4211(int)S +4475(frame,)S +3192 V +1439(int)S +1703(fbconfig,)S +2363(int)S +2627(zscale\))S +3312 V +1175(int)S +1439(cdl_isFITS)S +2165(\(char)S +2561(*fname\))S +3432 V +1175(int)S +1439(cdl_readFITS)S +2297(\(char)S +2693(*fname,)S +3221(uchar)S +3617(**pix,)S +4079(int)S +4343(*nx,)S +4673(int)S +4937(*ny,)S +3552 V +1439(int)S +1703(*bitpix,)S +2297(char)S +2627(*title\))S +3792 V +11 B +900(4.4.)S +1132(Displaying)S +1669(Raw)S +1915(Pixels)S +3948 V +11 R +1175(The)S +11 B +1381(cdl_displayPix\(\))S +11 R +2177(procedure)S +2649(can)S +2837(be)S +2977(used)S +3215(to)S +3338(display)S +3693(an)S +3833(arbitrary)S +4246(array)S +4506(of)S +4634(pixels)S +4934(of)S +5062(any)S +4068 V +900(size.)S +1166(The)S +11 I +1371(nx)S +11 R +1509(and)S +11 I +1701(ny)S +11 R +1838(arguments)S +2329(are)S +2495(the)S +2663(raster)S +2939(dimensions,)S +3503(and)S +11 I +3695(bitpix)S +11 R +3980(is)S +4088(the)S +4256(pixel)S +4510(size)S +4714(and)S +4906(has)S +5086(the)S +4188 V +900(same)S +1178(meaning)S +1609(as)S +1753(the)S +1940(FITS)S +2220(BITPIX)S +2627(keyword.)S +3124(The)S +11 I +3347(frame)S +11 R +3656(and)S +11 I +3867(fbcon\256g)S +11 R +4274(arguments)S +4784(select)S +5086(the)S +4308 V +900(frame)S +1199(and)S +1402(frame)S +1701(bu)S +1811 H + (f)show 11 -.5 mul h (f)show +11 R +1878(er)S +2007(size)S +2222(respectively,)S +2824(the)S +3003(special)S +3352(symbolic)S +3800(value)S +11 B +4081(FB_AUTO)S +11 R +4639(may)S +4872(be)S +5019(used)S +4428 V +900(for)S +1082(the)S +11 I +1271(fbcon\256g)S +11 R +1680(argument)S +2149(to)S +2290(have)S +2551(the)S +2740(procedure)S +3231(automatically)S +3884(select)S +4188(the)S +4378(frame)S +4688(bu)S +4798 H + (f)show 11 -.5 mul h (f)show +11 R +4865(er)S +5005(most)S +4548 V +900(appropriate)S +1441(for)S +1611(the)S +1788(image)S +2099(size.)S +2372(If)S +2486(the)S +11 I +2662(zscale)S +11 R +2972(\257ag)S +3179(is)S +3295(greater)S +3639(than)S +3870(zero)S +4099(the)S +4275(image)S +4585(will)S +4799(automati-)S +4668 V +900(cally)S +1146(be)S +1282(converted)S +1746(to)S +1865(8-bit)S +2106(values)S +2419(using)S +2691(the)S +2858(zscale)S +3157(mapping)S +3575(algorithm.)S +4908 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +5028 V +11 C +1175(int)S +1439(cdl_displayPix)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(uchar)S +3683(*pix,)S +4079(int)S +4343(nx,)S +4607(int)S +4871(ny,)S +5148 V +1439(int)S +1703(bitpix,)S +2231(int)S +2495(frame,)S +2957(int)S +3221(fbconfig,)S +3881(int)S +4145(zscale\))S +5388 V +11 B +900(4.5.)S +1132(Frame)S +1474(Selection)S +5544 V +11 R +1175(Frame)S +1495(selection)S +1925(is)S +2039(normally)S +2476(done)S +2729(as)S +2860(an)S +3003(argument)S +3457(to)S +3583(one)S +3781(of)S +3913(the)S +4088(display)S +4447(procedures,)S +4995(how-)S +5664 V +900(ever)S +1127(frames)S +1464(may)S +1693(be)S +1836(explicitly)S +2292(selected)S +2684(using)S +2963(the)S +11 B +3136(cdl_setFrame\(\))S +11 R +3879(procedure.)S +4415(This)S +4650(allows)S +4976(client)S +5784 V +900(programs)S +1361(to)S +1494(essentially)S +2005("blink")S +2370(frames)S +2715(independently,)S +3413(as)S +3552(long)S +3796(as)S +3935(the)S +4117(server)S +4431(supports)S +4852(multiple)S +5904 V +900(frames.)S +1291(The)S +11 B +1494(cdl_getFrame\(\))S +11 R +2243(procedure)S +2712(may)S +2934(be)S +3070(used)S +3304(to)S +3423(get)S +3590(the)S +3757(current)S +4099(frame)S +4386(set)S +4541(in)S +4660(the)S +4827(server.)S +6144 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +6264 V +11 C +1175(void)S +1505(cdl_setFrame)S +2363(\(CDLPtr)S +2891(cdl,)S +3221(int)S +3485(frame\))S +6384 V +1175(void)S +1505(cdl_getFrame)S +2363(\(CDLPtr)S +2891(cdl,)S +3221(int)S +3485(*frame\))S +6624 V +11 B +900(4.6.)S +1132(Clearing)S +1574(the)S +1753(Display)S +6780 V +11 R +1175(The)S +1400(current)S +1764(display)S +2137(frame)S +2446(may)S +2690(be)S +2848(explicitly)S +3320(cleared)S +3690(using)S +3985(the)S +11 B +4175(cdl_clearFrame\(\))S +11 R +5038(pro-)S +6900 V +900(cedure.)S +1329(The)S +1577(frame)S +1909(is)S +2061(also)S +2316(cleared)S +2707(prior)S +2997(to)S +3160(displaying)S +3696(new)S +3955(images)S +4343(by)S +4530(the)S +4741(procedures)S +7020 V +11 B +900(cdl_displayPix\(\))S +11 R +1660(,)S +11 B +1721(cdl_displayFITS\(\))S +11 R +2574(,)S +2635(and)S +11 B +2826(cdl_displayIRAF\(\))S +11 R +3701(.)S +7260 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +7920 V +EP +%%Page: 6 9 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2963(- 6 -)S +840 V +11 C +1175(int)S +1439(cdl_clearFrame)S +2429(\(CDLPtr)S +2957(cdl\))S +1080 V +11 B +900(4.7.)S +1132(Frame)S +1474(Bu)S +1610 H + (f)show 11 -.5 mul h (f)show +11 B +1677(er)S +1806(Selection)S +1236 V +11 R +1175(The)S +1415(default)S +1789(frame)S +2113(bu)S +2223 H + (f)show 11 -.5 mul h (f)show +11 R +2290(er)S +2444(used)S +2715(is)S +2859(512x512,)S +3342(other)S +3637(sizes)S +3920(may)S +4179(be)S +4353(selected)S +4776(using)S +5086(the)S +1356 V +11 B +900(cdl_setFBCon\256g\(\))S +11 R +1796(procedure.)S +2340(To)S +2509(set)S +2678(the)S +2859(frame)S +3160(bu)S +3270 H + (f)show 11 -.5 mul h (f)show +11 R +3337(er)S +3467(size)S +3683(the)S +3863(client)S +4153(passes)S +4479(the)S +4659(frame)S +4959(bu)S +5069 H + (f)show 11 -.5 mul h (f)show +11 R +5136(er)S +1476 V +900(number)S +1284(as)S +1424(de\256ned)S +1796(in)S +1931(the)S +2114(frame)S +2417(bu)S +2527 H + (f)show 11 -.5 mul h (f)show +11 R +2594(er)S +2727(con\256guration)S +3362(\256le)S +3552(\(see)S +3776(below\))S +4130(while)S +4424(setting)S +4768(the)S +4952(image)S +1596 V +900(WCS.)S +1243(It)S +1353(is)S +1470(important)S +1941(to)S +2069(note)S +2300(that)S +2507(the)S +2683(frame)S +2979(bu)S +3089 H + (f)show 11 -.5 mul h (f)show +11 R +3156(er)S +3282(isn't)S +3520(actually)S +3909(changed)S +4315(in)S +4443(the)S +4619(server)S +4927(until)S +5172(a)S +1716 V +900(subsequent)S +11 B +1431(cdl_setWCS\(\))S +11 R +2120(call,)S +2349(either)S +2641(directly)S +3019(or)S +3154(through)S +3540(some)S +3816(other)S +4085(procedure)S +4565(which)S +4877(sets)S +5086(the)S +1836 V +900(WCS)S +1172(\(e.g.)S +1400(one)S +1591(of)S +1715(the)S +1882(display)S +2233(procedures\).)S +1992 V +1175(To)S +1384(get)S +1605(the)S +1827(size)S +2085(of)S +2264(the)S +2486(currently)S +2969(de\256ned)S +3380(frame)S +3722(bu)S +3832 H + (f)show 11 -.5 mul h (f)show +11 R +3899(er)S +4071(the)S +4293(user)S +4563(may)S +4840(call)S +5086(the)S +2112 V +11 B +900(cdl_getFBCon\256g\(\))S +11 R +1803(procedure.)S +2342(This)S +2580(returns)S +2926(not)S +3109(only)S +3347(the)S +3523(current)S +3873(con\256guration)S +4500(number,)S +4904(but)S +5086(the)S +2232 V +900(size)S +1121(as)S +1263(well.)S +1564(To)S +1737(get)S +1922(the)S +2107(size)S +2328(and)S +2537(any)S +2746(arbitrary)S +3173(con\256guration)S +3810(without)S +4199(actually)S +4598(setting)S +4944(it,)S +5086(the)S +2352 V +11 B +900(cdl_lookupFBSize\(\))S +11 R +1880(procedure)S +2371(may)S +2615(be)S +2773(used.)S +3090(Any)S +3333(con\256guration)S +3973(not)S +4168(actually)S +4569(de\256ned)S +4946(in)S +5086(the)S +2472 V +900(frame)S +1187(bu)S +1297 H + (f)show 11 -.5 mul h (f)show +11 R +1364(er)S +1481(con\256guration)S +2100(\256le)S +2274(is)S +2381(returned)S +2778(as)S +2902(the)S +3069(default)S +3406(512x512)S +3824(size.)S +2712 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +2832 V +11 C +1175(void)S +1505(cdl_setFBConfig)S +2561(\(CDLPtr)S +3089(cdl,)S +3419(int)S +3683(configno\))S +2952 V +1175(void)S +1505(cdl_getFBConfig)S +2561(\(CDLPtr)S +3089(cdl,)S +3419(int)S +3683(*configno,)S +4409(int)S +4673(*width,)S +3072 V +1439(int)S +1703(*height,)S +2297(int)S +2561(*nframes\))S +3192 V +1175(void)S +1505(cdl_lookupFBSize)S +2627(\(CDLPtr)S +3155(cdl,)S +3485(int)S +3749(configno,)S +4409(int)S +4673(*width,)S +3312 V +1439(int)S +1703(*height,)S +2297(int)S +2561(*nframes\))S +3552 V +11 B +900(4.7.1.)S +1215(Automatic)S +1741(Selection)S +3708 V +11 R +1175(The)S +11 B +1383(cdl_selectFB\(\))S +11 R +2084(procedure)S +2558(may)S +2785(be)S +2926(used)S +3165(to)S +3289(select)S +3577(the)S +3750(most)S +4004(appropriate)S +4541(frame)S +4834(bu)S +4944 H + (f)show 11 -.5 mul h (f)show +11 R +5011(er)S +5134(to)S +3828 V +900(use)S +1085(for)S +1251(a)S +1338(given)S +1621(image)S +1928(size.)S +2198(If)S +2309(possible)S +2709(a)S +2796(frame)S +3089(bu)S +3199 H + (f)show 11 -.5 mul h (f)show +11 R +3266(er)S +3389(the)S +3562(same)S +3825(size)S +4033(as)S +4162(the)S +4334(image)S +4640(will)S +4850(be)S +4991(used,)S +3948 V +900(otherwise)S +1364(one)S +1560(that)S +1763(is)S +1875(larger)S +2167(will)S +2377(be)S +2518(chosen.)S +2922(Rather)S +3253(than)S +3481(simply)S +3821(selecting)S +4250(the)S +4423(\256rst)S +4634(con\256guration)S +4068 V +900(larger)S +1192(than)S +1419(the)S +1590(image,)S +1923(the)S +2094(procedure)S +2567(searches)S +2973(the)S +3144(entire)S +3430(con\256guration)S +4053(\256le)S +4231(selecting)S +4658(the)S +4829(one)S +5024(with)S +4188 V +900(the)S +1067(least)S +1302(empty)S +1611(space)S +1887(in)S +2007(both)S +2237(dimensions.)S +2834(If)S +2940(the)S +11 I +3108(reset)S +11 R +3355(\257ag)S +3554(is)S +3662(non-zero)S +4084(this)S +4278(frame)S +4566(is)S +4674(set)S +4830(automat-)S +4308 V +900(ically)S +1184(by)S +1334(the)S +1508(procedure,)S +2012(otherwise)S +2478(the)S +2652(selected)S +3044(dimension)S +3543(is)S +3657(simply)S +3998(returned)S +4402(to)S +4527(the)S +4700(calling)S +5038(pro-)S +4428 V +900(gram.)S +1227(In)S +1359(either)S +1649(case)S +1877(the)S +2052(new)S +2275(frame)S +2570(bu)S +2680 H + (f)show 11 -.5 mul h (f)show +11 R +2747(er)S +2872(will)S +3085(not)S +3267(take)S +3490(e)S +3538 H + (f)show 11 -.5 mul h (f)show +11 R +3605(ect)S +3773(until)S +4017(a)S +4107(new)S +4331(WCS)S +4612(is)S +4728(de\256ned)S +5093(for)S +4548 V +900(the)S +1067(frame.)S +4788 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +4908 V +11 C +1175(void)S +1505(cdl_selectFB)S +2363(\(CDLPtr)S +2891(cdl,)S +3221(int)S +3485(nx,)S +3749(int)S +4013(ny,)S +4277(int)S +4541(*fb,)S +5028 V +1450(int)S +1714(*w,)S +1978(int)S +2242(*h,)S +2506(int)S +2770(*nf,)S +3100(int)S +3364(reset\))S +5268 V +11 B +900(4.7.2.)S +1215(The)S +1432(Frame)S +1774(Bu)S +1910 H + (f)show 11 -.5 mul h (f)show +11 B +1977(er)S +2106(Con\256guration)S +2801(File)S +5424 V +11 R +1175(The)S +1378(size)S +1581(of)S +1705(the)S +1872(frame)S +2160(bu)S +2270 H + (f)show 11 -.5 mul h (f)show +11 R +2337(er)S +2455(is)S +2563(not)S +2738(passed)S +3064(directly)S +3433(to)S +3553(the)S +3721(server)S +4021(since)S +4280(this)S +4474(is)S +4582(not)S +4757(part)S +4961(of)S +5086(the)S +5544 V +900(communications)S +1675(protocol)S +2089(used.)S +2399(Instead,)S +2790(the)S +2971(frame)S +3272(bu)S +3382 H + (f)show 11 -.5 mul h (f)show +11 R +3449(er)S +3580(number)S +3962(is)S +4083(sent)S +4307(as)S +4445(part)S +4662(of)S +4800(the)S +4981(WCS)S +5664 V +900(header)S +1247(packet.)S +1650(So)S +1824(that)S +2046(both)S +2299(the)S +2490(server)S +2813(and)S +3028(client)S +3330(can)S +3539(know)S +3841(that)S +4064(a)S +4170(particular)S +4647(frame)S +4959(bu)S +5069 H + (f)show 11 -.5 mul h (f)show +11 R +5136(er)S +5784 V +900(number)S +1277(corresponds)S +1848(to)S +1976(a)S +2066(speci\256c)S +2443(size,)S +2683(a)S +11 I +2773(frame)S +3071(bu)S +3181 H + (f)show 11 -.5 mul h (f)show +11 I +3237(er)S +3370(con\256guration)S +4005(\256le)S +11 R +4181(is)S +4297(used)S +4540(which)S +4849(both)S +5086(the)S +5904 V +900(client)S +1177(and)S +1368(server)S +1667(read.)S +6060 V +1175(The)S +1383(default)S +1725(con\256guration)S +2349(\256le)S +2528(is)S +2640(/usr/local/lib/imtoolrc,)S +3667(this)S +3865(can)S +4055(be)S +4197(overridden)S +4710(by)S +4859(de\256ning)S +6180 V +900(an)S +11 B +1038(IMTOOLRC)S +11 R +1697(environment)S +2287(variable)S +2674(naming)S +3039(the)S +3208(\256le)S +3384(to)S +3505(be)S +3643(used,)S +3907(or)S +4032(by)S +4176(creating)S +4562(a)S +4644(.imtoolrc)S +5079(\256le)S +6300 V +900(in)S +1022(your)S +1259(home)S +1539(directory.)S +2031(Since)S +2311(the)S +2481(server)S +2783(must)S +3034(also)S +3247(read)S +3470(the)S +3640(same)S +3901(\256le,)S +4106(this)S +4302(must)S +4553(be)S +4692(done)S +4942(before)S +6420 V +900(starting)S +1263(both)S +1492(the)S +1659(client)S +1936(and)S +2127(server)S +2426(applications.)S +6576 V +900(The)S +1103(format)S +1428(of)S +1552(the)S +1719(frame)S +2006(bu)S +2116 H + (f)show 11 -.5 mul h (f)show +11 R +2183(er)S +2300(con\256guration)S +2919(\256le)S +3093(is)S +6756 V +11 I +1175(con\256gno)S +1586(nframes)S +1973(width)S +2252(height)S +2560([extra)S +2861(\256elds])S +6936 V +11 R +900(e.g.)S +7116 V +1230(1)S +1351(2)S +1472(512)S +1703(512)S +7236 V +1230(2)S +1351(2)S +1472(800)S +1703(800)S +7920 V +EP +%%Page: 7 10 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2963(- 7 -)S +840 V +1230(3)S +1351(1)S +1439(1024)S +1692(1024)S +2242(#)S +2330(comment)S +960 V +1230(:)S +1327(:)S +1457(:)S +1620(:)S +1200 V +900(At)S +1050(most)S +1305(128)S +1510(frame)S +1804(bu)S +1914 H + (f)show 11 -.5 mul h (f)show +11 R +1981(er)S +2105(sizes)S +2358(may)S +2587(be)S +2730(de\256ned,)S +3121(each)S +3360(con\256guration)S +3986(may)S +4215(de\256ne)S +4523(up)S +4673(to)S +4799(4)S +4895(frames,)S +1320 V +900(con\256guration)S +1519(numbers)S +1930(need)S +2169(not)S +2343(be)S +2479(sequential)S +2957(but)S +3131(should)S +3458(be)S +3594(in)S +3713(ascending)S +4184(order.)S +1560 V +11 B +900(4.8.)S +1132(Image)S +1457(WCS)S +1741(Description)S +1716 V +11 R +1175(The)S +1380(image)S +1683(WCS)S +1957(is)S +2066(de\256ned)S +2424(using)S +2698(the)S +11 B +2868(cdl_setWCS\(\))S +11 R +3550(procedure.)S +4083(The)S +4289(WCS)S +4564(de\256nes)S +4911(a)S +4995(map-)S +1836 V +900(ping)S +1137(between)S +1542(any)S +1741(linear)S +2031(coordinate)S +2534(system)S +2881(and)S +3080(the)S +3254(image)S +3562(pixels,)S +3893(for)S +4060(our)S +4246(purposes)S +4676(we)S +4843(will)S +5055(dis-)S +1956 V +900(cuss)S +1126(how)S +1352(the)S +1523(WCS)S +1799(is)S +1910(used)S +2148(to)S +2271(map)S +2497(the)S +2668(frame)S +2959(bu)S +3069 H + (f)show 11 -.5 mul h (f)show +11 R +3136(er)S +3257(pixels)S +3557(to)S +3680(image)S +3985(coordinates.)S +4588(It)S +4692(is)S +4804(passed)S +5134(to)S +2076 V +900(the)S +1067(server)S +1366(in)S +1485(a)S +1566(string)S +1850(of)S +1974(the)S +2141(form:)S +2256 V +11 I +1428(name)S +11 R +1698(-)S +11 I +1767(title)S +11 R +1939(\\n)S +2376 V +1450(a)S +1531(b)S +1619(c)S +1700(d)S +1788(tx)S +1907(ty)S +2026(z1)S +2162(z2)S +2298(zt)S +2520 V +900(where:)S +2664 V +11 B +1362(X)S +11 R +1441(')S +1510(=)S +1605(a)S +1686(*)S +11 B +1774(X)S +11 R +1886(+)S +1981(c)S +2062(*)S +11 B +2150(Y)S +11 R +2262(+)S +2357(tx)S +2784 V +11 B +1362(Y)S +11 R +1441(')S +1510(=)S +1605(b)S +1693(*)S +11 B +1781(X)S +11 R +1893(+)S +1988(d)S +2076(*)S +11 B +2164(Y)S +11 R +2276(+)S +2371(ty)S +3024 V +900(The)S +1111(terms)S +11 I +1396(a,)S +1520(b,)S +1644(c)S +11 R +1692(,)S +1761(and)S +11 I +1960(d)S +11 R +2056(de\256ne)S +2366(a)S +2456(rotation)S +2840(of)S +2973(the)S +3149(WCS)S +3430(wrt)S +3618(the)S +3794(pixel)S +4056(\(i.e.)S +4269(frame)S +4565(bu)S +4675 H + (f)show 11 -.5 mul h (f)show +11 R +4742(er\))S +4904(coordi-)S +3144 V +900(nates,)S +1195(the)S +11 I +1371(tx)S +11 R +1492(and)S +11 I +1692(ty)S +11 R +1813(values)S +2135(are)S +2309(translation)S +2815(terms)S +3101(relative)S +3471(to)S +3599(the)S +3775(upper-left)S +4248(corner)S +4567(of)S +4699(the)S +4874(display.)S +3264 V +900(The)S +1134(remaining)S +1643(three)S +1925(values)S +2269(de\256ne)S +2601(the)S +2799(intensity)S +3243(mapping)S +3692(of)S +3847(the)S +4045(display)S +4427(pixels;)S +11 I +4785(z1)S +11 R +4947(is)S +5086(the)S +3384 V +900(minimum)S +1373(pixel)S +1636(value)S +1916(used)S +2160(in)S +2289(the)S +2466(transformation,)S +11 I +3183(z2)S +11 R +3324(is)S +3441(the)S +3618(maximum)S +4108(value,)S +4416(and)S +11 I +4617(zt)S +11 R +4733(de\256nes)S +5086(the)S +3504 V +900(type)S +1122(of)S +1246(transformation)S +1925(used)S +2159(\(0)S +2283(for)S +2443(none,)S +2717(1)S +2805(for)S +2965(linear,)S +3275(2)S +3363(for)S +3523(log10\).)S +3660 V +1175(The)S +1391(WCS)S +1676(may)S +1911(be)S +2060(set)S +2228(explicitly)S +2690(by)S +2846(the)S +3026(calling)S +3371(program)S +3788(or)S +3925(a)S +4019(default)S +4369(appropriate)S +4913(for)S +5086(the)S +3780 V +900(image)S +1209(will)S +1422(be)S +1566(set)S +1729(automatically)S +2368(by)S +2519(the)S +2694(high-level)S +3180(display)S +3539(procedures,)S +4086(otherwise)S +4552(a)S +4640(WCS)S +4919(for)S +5086(the)S +3900 V +900(frame)S +1200(bu)S +1310 H + (f)show 11 -.5 mul h (f)show +11 R +1377(er)S +1507(is)S +1627(de\256ned)S +1996(\(i.e.)S +2213(returned)S +2623(coordinates)S +3174(are)S +3352(frame)S +3652(bu)S +3762 H + (f)show 11 -.5 mul h (f)show +11 R +3829(er)S +3959(coords\).)S +4394(As)S +4562(an)S +4711(example)S +5129(of)S +4020 V +900(how)S +1134(the)S +1313(WCS)S +1597(is)S +1716(de\256ned,)S +2112(the)S +2291(default)S +2640(WCS)S +2924(for)S +3096(an)S +3244(image)S +11 I +3557(IMX)S +11 R +3796(x)S +11 I +3896(IMY)S +11 R +4130(pixels)S +4438(in)S +4569(a)S +4661(frame)S +4959(bu)S +5069 H + (f)show 11 -.5 mul h (f)show +11 R +5136(er)S +4140 V +11 I +900(FBX)S +11 R +1134(x)S +11 I +1222(FBY)S +11 R +1451(pixels)S +1747(is)S +1854(de\256ned)S +2210(as)S +4320 V +11 C +1428(a)S +1626(=)S +1824(1.0;)S +3738(/*)S +3936(no)S +4134(rotation)S +4728(*/)S +4440 V +1428(b)S +1626(=)S +1824(0.0;)S +4560 V +1428(c)S +1626(=)S +1824(0.0;)S +4680 V +1428(d)S +1626(=)S +1758(-1.0;)S +4800 V +1428(tx)S +1626(=)S +1758(\()S +11 I +1824(IMX)S +11 C +2084(/)S +2216(2\))S +2414(-)S +2546(\()S +11 I +2612(FBX)S +11 C +2879(/)S +3011(2\))S +3209(+)S +3341(1;)S +3737(/*)S +3935(center)S +4397(in)S +4595(FB)S +4793(*/)S +4920 V +1428(ty)S +1626(=)S +1758(\()S +11 I +1824(FBY)S +11 C +2086(/)S +2218(2\))S +2416(+)S +2548(\()S +11 I +2614(IMY)S +11 C +2869(/)S +3001(2\);)S +5040 V +1428(z1)S +1626(=)S +1758(z1;)S +3738(/*)S +3936(zscale)S +4398(values)S +4860(*/)S +5160 V +1428(z2)S +1626(=)S +1758(z2;)S +5280 V +1428(zt)S +1626(=)S +1758(1;)S +5520 V +11 R +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +5640 V +11 C +1175(int)S +1439(cdl_setWCS)S +2165(\(CDLPtr)S +2693(cdl,)S +3023(char)S +3353(*name,)S +3815(char)S +4145(*title,)S +5760 V +1439(float)S +1835(a,)S +2033(float)S +2429(b,)S +2627(float)S +3023(c,)S +3221(float)S +3617(d,)S +3815(float)S +4211(tx,)S +4475(float)S +4871(ty,)S +5880 V +1439(float)S +1835(z1,)S +2099(float)S +2495(z2,)S +2759(int)S +3023(zt\))S +6000 V +1175(int)S +1439(cdl_getWCS)S +2165(\(CDLPtr)S +2693(cdl,)S +3023(char)S +3353(*name,)S +3815(char)S +4145(*title,)S +6120 V +1439(float)S +1835(*a,)S +2099(float)S +2495(*b,)S +2759(float)S +3155(*c,)S +3419(float)S +3815(*d,)S +4079(float)S +4475(*tx,)S +4805(float)S +5201(*ty,)S +6240 V +1439(float)S +1835(*z1,)S +2165(float)S +2561(*z2,)S +2891(int)S +3155(*zt\))S +6480 V +11 B +900(4.8.1.)S +1215(Image)S +1540(Mappings)S +6636 V +11 R +1175(Beginning)S +1668(with)S +11 B +1898(X11IRAF)S +2389(V1.3)S +11 R +2640(the)S +11 I +2808(XImtool)S +11 R +3196(display)S +3549(server)S +3850(has)S +4031(had)S +4224(the)S +4393(ability)S +4710(to)S +4831(use)S +5012(mul-)S +6756 V +900(tiple)S +1135(world)S +1430(coordinate)S +1931(systems)S +2319(in)S +2444(a)S +2531(frame)S +2824(\(e.g.)S +3058(subrasters)S +3535(of)S +3664(a)S +3750(mosaic)S +4099(display\).)S +4552(To)S +4712(do)S +4860(this,)S +5086(the)S +6876 V +11 B +900(IRAF)S +11 R +1214(and)S +11 B +1418(CDL)S +11 R +1696(display)S +2060(interfaces)S +2530(were)S +2787(modi\256ed)S +3225(to)S +3357(pass)S +3593(in)S +3726(extra)S +3991(information)S +4557(with)S +4800(the)S +4981(WCS)S +6996 V +900(string)S +1188(to)S +1311(de\256ne)S +1616(the)S +1787(mapping)S +2209(of)S +2337(the)S +2508(image)S +2813(pixels)S +3112(to)S +3234(the)S +3404(frame)S +3694(bu)S +3804 H + (f)show 11 -.5 mul h (f)show +11 R +3871(er)S +3991(pixels.)S +4351(This)S +4583(extra)S +4837(informa-)S +7116 V +900(tion)S +1119(allows)S +1453(the)S +1634(XImtool)S +2055(to)S +2189(know)S +2481(when)S +2766(the)S +2948(cursor)S +3269(in)S +3403(within)S +3733(one)S +3939(of)S +4078(the)S +4260(image)S +4576(subrasters)S +5062(and)S +7236 V +900(compute)S +1321(coordinates)S +1869(appropriately.)S +2557(\(See)S +2794(the)S +11 I +2971(XImtool)S +11 R +3368(documentation)S +4063(for)S +4232(details)S +4561(on)S +4713(how)S +4944(this)S +5146(is)S +7920 V +EP +%%Page: 8 11 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2963(- 8 -)S +840 V +900(done)S +1146(exactly\).)S +996 V +1175(The)S +1391(CDL)S +1657(will)S +1875(automatically)S +2519(determine)S +3003(when)S +3286(the)S +3466(connection)S +3993(is)S +4114(\256rst)S +4333(established)S +4868(whether)S +1116 V +900(the)S +1068(server)S +1368(is)S +1476(aware)S +1768(of)S +1892(this)S +2085(new)S +2300(mapping)S +2718(information.)S +3331(Calls)S +3591(to)S +3710(send)S +3944(or)S +4068(receive)S +4415(mapping)S +4833(data)S +5048(will)S +1236 V +900(be)S +1036(ignored)S +1404(for)S +1564(servers)S +1906(which)S +2208(are)S +2374(not)S +2549(aware)S +2842(of)S +2967(the)S +3135(extra)S +3387(data)S +3603(in)S +3723(the)S +3891(string.)S +4237(For)S +4424(servers)S +4767(which)S +5069(can)S +1356 V +900(use)S +1079(the)S +1246(mappings,)S +1735(and)S +1926(where)S +2225(a)S +2306(mapping)S +2724(has)S +2903(been)S +3142(provided,)S +3626(the)S +3793(WCS)S +4065(string)S +4349(now)S +4571(looks)S +4843(like)S +1536 V +11 I +1428(name)S +11 R +1698(-)S +11 I +1767(title)S +11 R +1939(\\n)S +1656 V +1450(a)S +1531(b)S +1619(c)S +1700(d)S +1788(tx)S +1907(ty)S +2026(z1)S +2162(z2)S +2298(zt\\n)S +1776 V +11 B +1450(region_name)S +2093(sx)S +2224(sy)S +2355(snx)S +2548(sny)S +2741(dx)S +2891(dy)S +3041(dnx)S +3253(dny\\n)S +1896 V +1450(object_refR)S +2076 V +900(where)S +1218(the)S +1397(new)S +1619(parameters)S +2186(are)S +2370(de\256ned)S +2747(to)S +2871(be:)S +2280 V +1606(region_name)S +11 I +2546(User-de\256ned)S +3144(name)S +3414(for)S +3576(the)S +3743(region.)S +2400 V +11 B +1606(sx,)S +1765(sy,)S +1924(snx,)S +2145(sny)S +11 I +2546(Source)S +2883(rect)S +3086(in)S +3205(the)S +3372(object.)S +2520 V +11 B +1606(dx,)S +1784(dy,)S +1962(dnx,)S +2202(dny)S +11 I +2546(Destination)S +3093(rect)S +3296(in)S +3415(the)S +3582(display)S +3933(frame)S +4222(bu)S +4332 H + (f)show 11 -.5 mul h (f)show +11 I +4388(er.)S +2640 V +11 B +1606(object_ref)S +11 I +2546(Full)S +2763(node!/path)S +3272(image)S +3573(speci\256cation.)S +2820 V +11 B +900(The)S +11 I +1124(object_ref)S +11 R +1609(should)S +1943(be)S +2086(a)S +2174(complete)S +2616(node!path)S +3094(speci\256cation)S +3689(to)S +3815(the)S +3989(image)S +4297(including)S +4753(any)S +4952(image)S +2940 V +900(section)S +1253(or)S +1385(extension.)S +1908(This)S +2145(is)S +2260(needed)S +2610(by)S +2761(the)S +2936(XImtool)S +3350(coordinate/pixel)S +4104(plug-in)S +4463(to)S +4590(map)S +4820(the)S +4995(same)S +3060 V +900(image)S +1206(as)S +1335(was)S +1543(displayed)S +2002(by)S +2150(the)S +2322(client.)S +2665(The)S +2873(path)S +3100(and)S +3296(node)S +3547(are)S +3717(required)S +4119(to)S +4244(ensure)S +4568(the)S +4741(image)S +5048(will)S +3180 V +900(be)S +1041(found)S +1335(properly.)S +1805(The)S +11 I +2013(region_name)S +11 R +2630(can)S +2819(be)S +2960(anything)S +3383(such)S +3621(as)S +11 I +3749(image)S +11 R +4017(,)S +11 I +4082(subraster1)S +11 R +4553(,)S +4618(or)S +11 I +4746(ccd3)S +11 R +4952(.)S +5050(The)S +3300 V +900(purpose)S +1294(of)S +1432(this)S +1639(\256eld)S +1883(is)S +2005(to)S +2139(provide)S +2522(some)S +2802(named)S +3142(value)S +3427(for)S +3602(the)S +3784(mapping)S +4217(that)S +4430(may)S +4667(be)S +4818(useful)S +5134(to)S +3420 V +900(other)S +1159(client)S +1437(programs)S +1885(needing)S +2266(to)S +2386(access)S +2698(the)S +2865(mapping.)S +11 I +3344(Source)S +11 R +3681(coordinates)S +4219(refer)S +4456(to)S +4575(the)S +4742(image)S +5043(pix-)S +3540 V +900(els,)S +11 I +1083(destination)S +11 R +1606(coordinates)S +2144(refer)S +2381(to)S +2500(the)S +2667(frame)S +2954(bu)S +3064 H + (f)show 11 -.5 mul h (f)show +11 R +3131(er.)S +3696 V +1175(Because)S +1580(we)S +1748(did)S +1930(not)S +2112(wish)S +2361(to)S +2488(change)S +2838(any)S +3037(of)S +3169(the)S +3344(existing)S +3734(interfaces,)S +4227(mappings)S +4696(must)S +4953(be)S +5098(set)S +3816 V +900(prior)S +1152(to)S +1277(the)S +11 B +1449(cdl_setWCS\(\))S +11 R +2133(call)S +2362(using)S +2639(the)S +11 B +2811(cdl_setMapping\(\))S +11 R +3674(procedure.)S +4209(The)S +4417(mapping)S +4840(is)S +4952(stored)S +3936 V +900(until)S +1147(the)S +1325(WCS)S +1608(is)S +1726(actually)S +2117(sent.)S +2399(Similarly,)S +2882(a)S +2974(mapping)S +3403(may)S +3636(be)S +3783(retrieved)S +11 I +4216(after)S +11 R +4469(a)S +11 B +4562(cdl_getWCS\(\))S +4056 V +11 R +900(call)S +1124(using)S +1428(the)S +11 B +1627(cdl_getMapping\(\))S +11 R +2529(procedure)S +3030(to)S +3181(return)S +3507(the)S +3706(values)S +4051(read)S +4303(with)S +4564(the)S +4763(last)S +4981(WCS)S +4176 V +900(retrieval.)S +1359(Since)S +1637(there)S +1889(can)S +2074(at)S +2187(times)S +2460(be)S +2597(more)S +2856(than)S +3079(one)S +3271(WCS)S +3545(in)S +3666(a)S +3749(frame,)S +4066(it's)S +4242(also)S +4454(possible)S +4850(to)S +4971(query)S +4296 V +900(the)S +1074(mapping)S +1499(for)S +1665(a)S +1752(particular)S +2210(WCS)S +2488(by)S +2637(number)S +3011(\(e.g.)S +3245(the)S +3418(WCS)S +3696(number)S +4070(returned)S +4473(in)S +4598(a)S +4685(cursor)S +4997(read\))S +4416 V +900(using)S +1178(the)S +11 I +1351(cdl_queryMap\(\))S +11 R +2101(procedure.)S +2637(See)S +2834(the)S +3008(sample)S +3359(programs)S +3813(in)S +3939(the)S +4113(appendices)S +4639(for)S +4806(examples)S +4536 V +900(of)S +1024(how)S +1246(these)S +1504(procedures)S +2016(might)S +2307(be)S +2443(called.)S +4776 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +4896 V +11 C +1175(int)S +1439(cdl_getMapping\(CDLPtr)S +2891(cdl,)S +3221(char)S +3551(*region,)S +5016 V +1439(float)S +1835(*sx,)S +2165(float)S +2561(*sy,)S +2891(int)S +3155(*snx,)S +3551(int)S +3815(*sny,)S +5136 V +1439(int)S +1703(*dx,)S +2033(int)S +2297(*dy,)S +2627(int)S +2891(*dnx,)S +3287(int)S +3551(*dny,)S +3947(char)S +4277(*ref\);)S +5256 V +1175(int)S +1439(cdl_setMapping\(CDLPtr)S +2891(cdl,)S +3221(char)S +3551(*region,)S +5376 V +1439(float)S +1835(sx,)S +2099(float)S +2495(sy,)S +2759(int)S +3023(snx,)S +3353(int)S +3617(sny,)S +5496 V +1439(int)S +1703(dx,)S +1967(int)S +2231(dy,)S +2495(int)S +2759(dnx,)S +3089(int)S +3353(dny,)S +3683(char)S +4013(*ref\);)S +5616 V +1175(int)S +1439(cdl_queryMap\(CDLPtr)S +2759(cdl,)S +3089(int)S +3353(wcs,)S +3683(char)S +4013(*region,)S +5736 V +1439(float)S +1835(*sx,)S +2165(float)S +2561(*sy,)S +2891(int)S +3155(*snx,)S +3551(int)S +3815(*sny,)S +5856 V +1439(int)S +1703(*dx,)S +2033(int)S +2297(*dy,)S +2627(int)S +2891(*dnx,)S +3287(int)S +3551(*dny,)S +3947(char)S +4277(*objref\);)S +6216 V +11 B +900(4.9.)S +1132(Image)S +1457(Colormaps)S +6372 V +11 R +1175(The)S +1395(IIS)S +1579(protocol)S +1996(used)S +2248(does)S +2500(not)S +2692(permit)S +3030(the)S +3215(downloading)S +3840(of)S +3982(user-de\256ned)S +4574(colormaps,)S +5110(all)S +6492 V +900(images)S +1255(are)S +1431(loaded)S +1767(as)S +1902(raw)S +2109(grayscale)S +2565(values)S +2889(according)S +3364(to)S +3494(the)S +3672(XImtool)S +4089(colormap)S +4547(model)S +4866(used)S +5110(by)S +6612 V +900(currently)S +1348(supported)S +1834(servers.)S +2257(All)S +2451(images)S +2815(containing)S +3332(private)S +3689(colormaps)S +4200(or)S +4345(more)S +4624(than)S +4867(the)S +5055(201)S +6732 V +900(grayscale)S +1355(values)S +1678(de\256ned)S +2043(by)S +2195(the)S +2371(Imtool)S +2707(colormap)S +3163(model)S +3480(must)S +3737(either)S +4028(convert)S +4398(the)S +4574(image)S +4884(to)S +5012(8-bit)S +6852 V +900(grayscale)S +1418(values)S +1804(by)S +2020(calling)S +2425(the)S +2665(CDL)S +2991(zscale)S +3364(procedures)S +3950(\()S +11 B +3986(cdl_computeZscale\(\))S +11 R +5062(and)S +6972 V +11 B +900(cdl_zscaleImage\(\))S +11 R +1733(\))S +1814(or)S +1950(scale)S +2213(the)S +2392(images)S +2748(in)S +2879(client)S +3168(code)S +3419(with)S +3660(user)S +3887(LUTs.)S +4249(The)S +4464(CDL)S +4728(zscale)S +5038(pro-)S +7092 V +900(cedures)S +1276(scale)S +1537(image)S +1849(to)S +1979(201)S +2188(grayscale)S +2644(values)S +2968(so)S +3110(that)S +3319(they)S +3552(are)S +3728(displayed)S +4193(to)S +4323(the)S +4501(full)S +4698(8-bit)S +4950(range,)S +7212 V +900(user)S +1135(LUT)S +1401(transformations)S +2143(or)S +2287(user)S +2522(code)S +2781(for)S +2961(converting)S +3483(to)S +3621(grayscale)S +4085(from)S +4350(a)S +4450(private)S +4806(colormap)S +7920 V +EP +%%Page: 9 12 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2963(- 9 -)S +840 V +900(procedures)S +1412(should)S +1739(do)S +1882(the)S +2049(same.)S +1080 V +11 B +900(4.9.1.)S +1215(Imtool)S +1559(Color)S +1860(Model)S +1236 V +11 R +1175(The)S +1383(IMTOOL)S +1847(color)S +2110(model)S +2423(de\256nes)S +2772(at)S +2889(most)S +3142(201)S +3345(grayscale)S +3795(values)S +4113(for)S +4278(use)S +4463(in)S +4588(displaying)S +5086(the)S +1356 V +900(image,)S +1239(a)S +1330(set)S +1495(of)S +1629(16)S +1782(static)S +2057(colors)S +2368(are)S +2543(also)S +2763(de\256ned)S +3129(for)S +3299(overlay)S +3670(graphics.)S +4145(Pixel)S +4415(values)S +4738(sent)S +4958(to)S +5086(the)S +1476 V +900(server)S +1200(should)S +1528(be)S +1665(already)S +2020(scaled)S +2327(to)S +2447(this)S +2641(model,)S +2978(i.e.)S +3147(the)S +3315(image)S +3617(pixels)S +3914(should)S +4242(be)S +4380(scaled)S +4688(to)S +4809(the)S +4978(range)S +1596 V +900(1-200,)S +1231(values)S +1558(above)S +1866(this)S +2073(will)S +2292(either)S +2588(represent)S +3035(the)S +3216(overlay)S +3591(colors)S +3906(or)S +4044(will)S +4263(wrap)S +4528(around)S +4879(to)S +5012(8-bit)S +1716 V +900(values.)S +1286(The)S +1501(CDL)S +1766(zscale)S +2077(procedures)S +2601(will)S +2818(automatically)S +3461(scale)S +3724(arbitrary)S +4145(pixel)S +4410(values)S +4736(to)S +4868(use)S +5060(this)S +1836 V +900(color)S +1169(model,)S +1516(the)S +1694(overlay)S +2066(procedures)S +2589(assume)S +2956(color)S +3224(values)S +3547(are)S +3722(de\256ned)S +4088(for)S +4258(the)S +4435(static)S +4710(color)S +4978(range)S +1956 V +900(201-217)S +1299(but)S +1473(any)S +1664(8-bit)S +1905(value)S +2175(may)S +2397(be)S +2533(used.)S +2112 V +1175(A)S +1287(summary)S +1729(of)S +1853(the)S +2020(color)S +2278(model)S +2586(values)S +2899(is)S +3006(included)S +3417(below:)S +2292 V +11 B +1593(Color)S +2080(Description)S +3337(Color)S +3819(Description)S +2412 V +11 R +1593(0)S +2080(Background)S +3388(208)S +3819(Cyan)S +2532 V +1593(1)S +1681(-)S +1750(200)S +2080(Image)S +2386(data)S +3388(209)S +3819(Magenta)S +2652 V +1593(201)S +2080(Cursor)S +2412(\(white\))S +3388(210)S +3819(Coral)S +2772 V +1593(202)S +2080(Background)S +2649(\(black\))S +3388(211)S +3819(Maroon)S +2892 V +1593(203)S +2080(White)S +3388(212)S +3819(Orange)S +3012 V +1593(204)S +2080(Red)S +3388(213)S +3819(Khaki)S +3132 V +1593(205)S +2080(Green)S +3388(214)S +3819(Orchid)S +3252 V +1593(206)S +2080(Blue)S +3388(215)S +3819(Turquoise)S +3372 V +1593(207)S +2080(Yellow)S +3388(216)S +3819(Violet)S +3492 V +1593(217)S +2080(Wheat)S +3288(218-255)S +3819(unde\256ned)S +3792 V +11 B +900(4.10.)S +1187(ZScale)S +1538(Intensity)S +1987(Mapping)S +3948 V +11 R +1175(Since)S +1455(most)S +1706(display)S +2060(servers)S +2405(are)S +2573(only)S +2805(capable)S +3174(of)S +3301(displaying)S +3796(8-bit)S +4041(pixel)S +4298(values,)S +4676(images)S +5024(with)S +4068 V +900(more)S +1172(than)S +1408(8-bits)S +1706(per)S +1892(pixel)S +2159(must)S +2421(be)S +2571(scaled)S +2891(prior)S +3151(to)S +3284(display.)S +3710(For)S +3910(linear)S +4205(transformations)S +4940(this)S +5146(is)S +4188 V +900(typically)S +1334(done)S +1596(using)S +1885(a)S +1983(simple)S +2327(conversion)S +2858(of)S +2999(the)S +3183(image)S +3501(min/max)S +3943(values)S +4273(to)S +4409(the)S +4593(256)S +4808(grayscale)S +4308 V +900(values,)S +1247(however)S +1662(this)S +1861(doesn't)S +2223(produce)S +2614(very)S +2847(good)S +3106(results)S +3432(when)S +3708(most)S +3962(pixel)S +4220(values)S +4538(are)S +4708(near)S +4933(one)S +5129(of)S +4428 V +900(the)S +1088(extremes)S +1537(\(usually)S +1945(the)S +2133(image)S +2455(min)S +2681(for)S +2862(astronomical)S +3483(images\).)S +3945(To)S +4121(solve)S +4407(this)S +4622(IRAF)S +4928(uses)S +5172(a)S +4548 V +11 I +900(zscale)S +11 R +1218(mapping)S +1653(algorithm)S +2131(where)S +2447(a)S +2544(sampling)S +2997(grid)S +3223(is)S +3346(used)S +3596(to)S +3731(approximate)S +4328(the)S +4511(image)S +4828(min/max)S +4668 V +900(values)S +1214(rather)S +1502(than)S +1725(computing)S +2230(it)S +2326(directly,)S +2723(a)S +2806(line)S +3006(is)S +3115(then)S +3339(\256t)S +3467(to)S +3588(these)S +3848(sample)S +4194(pixels)S +4492(to)S +4613(determine)S +5086(the)S +4788 V +900(optimal)S +1274(transformation)S +1957(to)S +2080(the)S +2251(display)S +2606(values.)S +2984(This)S +3217(is)S +3328(not)S +3506(only)S +3739(more)S +4001(e)S +4049 H + (f)show 11 -.5 mul h (\256)show +11 R +4141(cient)S +4390(but)S +4567(maps)S +4835(the)S +5005(most)S +4908 V +900(common)S +1318(pixel)S +1571(values)S +1884(to)S +2003(the)S +2170(display)S +2521(range)S +2796(producing)S +3274(a)S +3355(better)S +3637(image.)S +5064 V +1175(The)S +1379(CDL)S +1633(has)S +1813(several)S +2156(routines)S +2544(for)S +2705(doing)S +2991(the)S +3160(same)S +3420(transformation:)S +4132(the)S +11 I +4301(cdl_computeZscale\(\))S +5184 V +11 R +900(procedure)S +1383(is)S +1504(used)S +1752(to)S +1885(compute)S +2310(the)S +2491(optimal)S +11 I +2875(z1)S +11 R +3020(and)S +11 I +3225(z2)S +11 R +3370(values)S +3697(\(the)S +3914(min/max)S +4353(used)S +4601(for)S +4774(the)S +4954(zscale)S +5304 V +900(transform\))S +1402(for)S +1569(an)S +1712(image)S +2020(of)S +2151(any)S +2349(pixel)S +2609(size.)S +2880(The)S +11 I +3090(bitpix)S +11 R +3381(argument)S +3835(is)S +3949(the)S +4123(number)S +4498(of)S +4629(bits-per-pixel)S +5424 V +900(for)S +1086(the)S +1279(input)S +1565(array)S +1847(and)S +2063(has)S +2267(the)S +2459(same)S +2742(meaning)S +3178(as)S +3327(for)S +3512(the)S +3704(FITS)S +11 I +3989(BITPIX)S +11 R +4382(keyword.)S +4851(To)S +5031(then)S +5544 V +900(transform)S +1361(the)S +1530(image)S +1833(using)S +2107(these)S +2368(values)S +2684(\(or)S +2847(user-de\256ned)S +3424(values\))S +3776(the)S +11 I +3946(cdl_zscaleImage\(\))S +11 R +4784(procedure)S +5664 V +900(is)S +1015(used.)S +1318(The)S +1528(input)S +1795(pixels)S +2098(are)S +2270(modi\256ed)S +2702(by)S +2852(this)S +3052(procedure)S +3528(but)S +3709(the)S +3883(array)S +4146(is)S +4260(not)S +4441(reallocated)S +4960(to)S +5086(the)S +5784 V +900(smaller)S +1273(size)S +1493(needed)S +1852(by)S +2012(an)S +2166(8-bit)S +2425(array.)S +2760(The)S +11 B +2981(cdl_setSample\(\))S +11 R +3776(and)S +11 B +3985(cdl_setSampleLines\(\))S +11 R +5038(pro-)S +5904 V +900(cedures)S +1278(can)S +1474(be)S +1622(used)S +1868(to)S +1999(change)S +2352(the)S +2530(sampling)S +2978(grid)S +3199(and)S +3401(number)S +3780(of)S +3915(sample)S +4270(points)S +4584(\(the)S +4798(default)S +5146(is)S +6024 V +900(600)S +1099(points)S +1403(on)S +1547(5)S +1636(lines\).)S +1975(The)S +11 B +2179(cdl_setContrast\(\))S +11 R +3022(procedure)S +3493(can)S +3679(be)S +3817(used)S +4053(to)S +4174(change)S +4518(the)S +4687(default)S +5026(con-)S +6144 V +900(trast)S +1128(adjustment)S +1650(to)S +1775(the)S +1948(slope)S +2219(used)S +2459(in)S +2584(the)S +2757(transformation)S +3442(\(the)S +3651(default)S +3993(is)S +4105(0.25\).)S +4433(If)S +4543(a)S +4629(value)S +4904(of)S +5033(zero)S +6264 V +900(is)S +1007(given)S +1284(then)S +1506(the)S +1673(minimum)S +2136(and)S +2327(maximum)S +2807(of)S +2931(the)S +3098(intensity)S +3511(sample)S +3855(is)S +3962(used)S +4196(as)S +4320(the)S +4487(z1/z2)S +4757(value.)S +6420 V +1175(Each)S +1440(of)S +1578(the)S +1759(CDL)S +2026(display)S +2391(procedures)S +2917(has)S +3110(a)S +11 I +3205(zscale)S +11 R +3520(\257ag)S +3732(to)S +3865(automatically)S +4510(scale)S +4775(the)S +4957(pixels)S +6540 V +900(prior)S +1151(to)S +1275(display.)S +1691(Applications)S +2290(wishing)S +2676(to)S +2799(set)S +2958(their)S +3196(own)S +3422(z1/z2)S +3696(values)S +4013(will)S +4222(need)S +4465(to)S +4588(call)S +4783(the)S +4954(zscale)S +6660 V +900(procedures)S +1421(and)S +1621(disable)S +1974(this)S +2176(\257ag.)S +2444(By)S +2615(default)S +2961(cdl_zscaleImage\(\))S +3803(will)S +4017(use)S +4206(a)S +4297(linear)S +4589(transform,)S +5086(the)S +6780 V +11 B +900(cdl_setZTrans\(\))S +11 R +1764(procedure)S +2312(may)S +2613(be)S +2828(used)S +3141(to)S +3339(change)S +3760(this.)S +4093(Acceptable)S +4696(values)S +5088(are)S +6900 V +11 B +900(CDL_UNITARY)S +11 R +1733(\(zero\))S +2026(for)S +2187(a)S +2269(unitary)S +2614(transform,)S +11 B +3102(CDL_LINEAR)S +11 R +3851(\(one\))S +4115(for)S +4276(a)S +4358(linear)S +4641(transform,)S +5129(or)S +7020 V +11 B +900(CDL_LOG)S +11 R +1466(\(two\))S +1736(for)S +1896(a)S +1977(log10)S +2261(transform.)S +7260 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +7920 V +EP +%%Page: 10 13 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 10 -)S +840 V +11 C +1175(void)S +1505(cdl_computeZscale)S +2693(\(CDLPtr)S +3221(cdl,)S +3551(uchar)S +3947(*pix,)S +4343(int)S +4607(nx,)S +960 V +1439(int)S +1703(ny,)S +1967(int)S +2231(bitpix,)S +2759(float)S +3155(*z1,)S +3485(float)S +3881(*z2\))S +1080 V +1175(void)S +1505(cdl_zscaleImage)S +2561(\(CDLPtr)S +3089(cdl,)S +3419(uchar)S +3815(**pix,)S +4277(int)S +4541(nx,)S +1200 V +1439(int)S +1703(ny,)S +1967(int)S +2231(bitpix,)S +2759(float)S +3155(z1,)S +3419(float)S +3815(z2\))S +1440 V +1175(void)S +1505(cdl_setZTrans)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(int)S +3551(ztrans\))S +1560 V +1175(void)S +1505(cdl_getZTrans)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(int)S +3551(*ztrans\))S +1680 V +1175(void)S +1505(cdl_setZScale)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(float)S +3683(z1,)S +3947(float)S +4343(z2\))S +1800 V +1175(void)S +1505(cdl_getZScale)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(float)S +3683(*z1,)S +4013(float)S +4409(*z2\))S +2040 V +1175(void)S +1505(cdl_setSample)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(int)S +3551(nsample\))S +2160 V +1175(void)S +1505(cdl_setSampleLines)S +2759(\(CDLPtr)S +3287(cdl,)S +3617(int)S +3881(nlines\))S +2280 V +1175(void)S +1505(cdl_setContrast)S +2561(\(CDLPtr)S +3089(cdl,)S +3419(float)S +3815(contrast\))S +2400 V +1175(void)S +1505(cdl_getSample)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(int)S +3551(*nsample\))S +2520 V +1175(void)S +1505(cdl_getSampleLines)S +2759(\(CDLPtr)S +3287(cdl,)S +3617(int)S +3881(*nlines\))S +2640 V +1175(void)S +1505(cdl_getContrast)S +2561(\(CDLPtr)S +3089(cdl,)S +3419(float)S +3815(*contrast\))S +3000 V +11 B +900(4.11.)S +1187(Image)S +1512(Hardcopy)S +3156 V +11 R +1175(While)S +1479(most)S +1731(servers)S +2077(include)S +2437(some)S +2706(hardcopy)S +3150(capability)S +3620(of)S +3748(their)S +3986(own)S +4212(the)S +4383(CDL)S +4640(provides)S +5055(two)S +3276 V +900(procedures)S +1428(for)S +1603(creating)S +2003(hardcopy)S +2458(images)S +2817(from)S +3078(the)S +3260(client)S +3552(\(e.g.)S +3795(for)S +3970(a)S +4066(batch)S +4351(processing)S +4868(applica-)S +3396 V +900(tion\).)S +1207(The)S +1415(client)S +1697(will)S +1907(typically)S +2330(read)S +2555(back)S +2799(the)S +2971(entire)S +3258(image,)S +3592(frame)S +3884(bu)S +3994 H + (f)show 11 -.5 mul h (f)show +11 R +4061(er,)S +4212(of)S +4342(just)S +4541(a)S +4628(subraster)S +5062(and)S +3516 V +900(pass)S +1134(those)S +1411(pixels)S +1718(to)S +1848(the)S +2026(print)S +2278(procedure.)S +2819(Images)S +3179(will)S +3395(be)S +3542(written)S +3897(as)S +4032(Pseudocolor)S +4619(Postscript)S +5098(\(to)S +3636 V +900(preserve)S +1376(the)S +1617(overlay)S +2052(marker)S +2468(colors\))S +2879(and)S +3144(may)S +3440(be)S +3650(disposed)S +4142(to)S +4335(a)S +4490(\256le)S +4739(using)S +5086(the)S +3756 V +11 B +900(cdl_printPixToFile\(\))S +11 R +1903(procedure)S +2376(or)S +2504(to)S +2627(any)S +2822(command)S +3292(string)S +3580(accepting)S +4036(input)S +4299(from)S +11 I +4548(stdin)S +11 R +4799(\(typically)S +3876 V +900(just)S +1093(an)S +1229('lpr')S +1456(command\))S +1958(by)S +2101(using)S +2373(the)S +11 B +2540(cdl_printPix\(\))S +11 R +3233(procedure.)S +4116 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +4236 V +11 C +1175(int)S +1439(cdl_printPix)S +2297(\(CDLPtr)S +2825(cdl,)S +3155(char)S +3485(*cmd,)S +3881(uchar)S +4277(*pix,)S +4673(int)S +4937(nx,)S +4356 V +1439(int)S +1703(ny,)S +1967(int)S +2231(annotate\))S +4476 V +1175(int)S +1439(cdl_printPixToFile)S +2693(\(CDLPtr)S +3221(cdl,)S +3551(char)S +3881(*fname,)S +4409(uchar)S +4805(*pix,)S +4596 V +1439(int)S +1703(nx,)S +1967(int)S +2231(ny,)S +2495(int)S +2759(annotate\))S +4836 V +11 B +900(4.12.)S +1187(Image)S +1512(Cursor)S +4992 V +11 R +1175(The)S +1390(image)S +1703(cursor)S +2021(is)S +2140(read)S +2372(using)S +2656(the)S +11 B +2835(cdl_readCursor\(\))S +11 R +3696(procedure.)S +4238(The)S +4453(returned)S +4863(value)S +5146(is)S +5112 V +900(the)S +1082(cursor)S +11 I +1403(\(x,y\))S +11 R +1647(position)S +2051(as)S +2190(\257oating)S +2575(point)S +2850(value)S +3135(in)S +3269(terms)S +3561(of)S +3700(the)S +3881(currently)S +4323(de\256ne)S +4638(image)S +4953(WCS.)S +5232 V +900(Note)S +1149(that)S +1350(this)S +1546(position)S +1938(must)S +2189(be)S +2328(converted)S +2796(to)S +2919(integer)S +3260(if)S +3364(it)S +3463(is)S +3574(to)S +3697(be)S +3837(used)S +4075(in)S +4198(one)S +4393(of)S +4521(the)S +4692(marker)S +5038(pro-)S +5352 V +900(cedures.)S +5592 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +5712 V +11 C +1175(int)S +1439(cdl_readCursor)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(int)S +3551(sample,)S +4079(float)S +4475(*x,)S +5832 V +1439(float)S +1835(*y,)S +2099(int)S +2363(*wcs,)S +2759(char)S +3089(*key\))S +6072 V +11 R +900(The)S +11 I +1103(wcs)S +11 R +1301(argument)S +1748(is)S +1855(de\256ned)S +2211(as)S +6312 V +1164(wcs)S +1367(=)S +1462(frame)S +1749(*)S +1837(100)S +2035(+)S +2130(wcs_number)S +6552 V +900(\(where)S +1247(wcs_number=0)S +1969(for)S +2141(frame)S +2440(bu)S +2550 H + (f)show 11 -.5 mul h (f)show +11 R +2617(er)S +2746(coords)S +3083(and)S +3286(1)S +3386(for)S +3558(image)S +3872(coords\).)S +4307(So,)S +4498(you)S +4709(can)S +4906(get)S +5086(the)S +6672 V +900(frame)S +1187(as)S +1311(simply)S +6912 V +1164(frame)S +1451(=)S +1546(\(int\))S +1768(\(wcs)S +2007(/)S +2071(100\))S +7920 V +EP +%%Page: 11 14 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 11 -)S +840 V +11 B +900(4.12.1.)S +1270(Cursor)S +1638(Sampling)S +996 V +11 R +1175(If)S +1307(the)S +1501(cdl_readCursor\(\))S +11 I +2308(sample)S +11 R +2680(\257ag)S +2906(is)S +3041(non-zero)S +3490(the)S +11 I +3685(logical)S +4052(image)S +4381(cursor)S +11 R +4729(position)S +5146(is)S +1116 V +900(returned)S +1300(immediately,)S +1914(otherwise)S +2376(the)S +2545(display)S +2898(server)S +3199(will)S +3406(wait)S +3630(for)S +3792(a)S +3875(keystroke)S +4336(before)S +4649(returning)S +5086(the)S +1236 V +900(cursor)S +1214(position.)S +1672(The)S +1883(logical)S +2223(image)S +2532(cursor)S +2846(is)S +2961(the)S +3136(last)S +3330(value)S +3609(set)S +3773(by)S +3925(a)S +11 I +4015(cdl_setCursor\(\))S +11 R +4753(call)S +4953(or)S +5086(the)S +1356 V +900(last)S +1101(value)S +1386(returned)S +1798(by)S +1956(a)S +11 I +2051(cdl_readCursor\(\))S +11 R +2873(call.)S +3139(When)S +3447(sampling)S +3898(the)S +4079(cursor)S +4399(position)S +4802(the)S +4983(keys-)S +1476 V +900(troke)S +1158(value)S +1428(is)S +1535(unde\256ned.)S +1716 V +11 B +900(4.13.)S +1187(Image)S +1512(Readout)S +1872 V +11 R +1175(The)S +1390(CDL)S +1655(maintains)S +2128(an)S +2276(internal)S +2657(knowledge)S +3184(of)S +3321(where)S +3633(an)S +3782(image)S +4096(has)S +4288(been)S +4540(positioned)S +5045(if)S +5158(it)S +1992 V +900(was)S +1110(displayed)S +1571(using)S +1850(one)S +2048(of)S +2179(the)S +11 I +2353(cdl_display*)S +11 R +2955(procedures.)S +3535(The)S +11 B +3744(cdl_readImage\(\))S +11 R +4556(procedure)S +5031(may)S +2112 V +900(be)S +1046(used)S +1290(to)S +1419(read)S +1649(back)S +1899(the)S +2077(entire)S +2370(image)S +2682(pixels)S +2989(from)S +3246(the)S +3424(server)S +3734(ignoring)S +4151(the)S +4329(region)S +4653(of)S +4788(the)S +4966(frame)S +2232 V +900(bu)S +1010 H + (f)show 11 -.5 mul h (f)show +11 R +1077(er)S +1203(outside)S +1563(of)S +1696(the)S +1872(image,)S +2209(the)S +11 B +2384(cdl_readFrameBu)S +3238 H + (f)show 11 -.5 mul h (f)show +11 B +3305(er\(\))S +11 R +3514(procedure)S +3991(will)S +4204(read)S +4432(back)S +4679(the)S +4854(contents)S +2352 V +900(of)S +1024(the)S +1191(entire)S +1473(frame)S +1760(bu)S +1870 H + (f)show 11 -.5 mul h (f)show +11 R +1937(er.)S +2115(The)S +2318(dimensions)S +2853(of)S +2977(the)S +3144(array)S +3400(are)S +3565(returned)S +3962(in)S +4081(the)S +11 I +4248(nx)S +11 R +4384(and)S +11 I +4575(ny)S +11 R +4711(arguments.)S +2592 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +2712 V +11 C +1175(int)S +1439(cdl_readImage)S +2363(\(CDLPtr)S +2891(cdl,)S +3221(uchar)S +3617(**pix,)S +4079(int)S +4343(*nx,)S +2832 V +1439(int)S +1703(*ny\)R)S +2952 V +1175(int)S +1439(cdl_readFrameBuffer)S +2759(\(CDLPtr)S +3287(cdl,)S +3617(uchar)S +4013(**pix,)S +3072 V +1439(int)S +1703(*nx,)S +2033(int)S +2297(*ny\)R)S +3312 V +11 B +900(4.14.)S +1187(Subraster)S +1684(I/O)S +3468 V +11 R +1175(The)S +11 B +1379(cdl_writeSubRaster\(\))S +11 R +2418(procedure)S +2888(is)S +2996(used)S +3231(to)S +3351(write)S +3610(an)S +3747(arbitrary)S +4157(raster)S +4433(to)S +4553(any)S +4745(location)S +5134(in)S +3588 V +900(the)S +1069(display.)S +1483(Similarly)S +1929(the)S +11 B +2098(cdl_readSubRaster\(\))S +11 R +3109(procedure)S +3580(is)S +3689(used)S +3925(to)S +4046(read)S +4268(back)S +4509(an)S +4647(arbitrary)S +5057(ras-)S +3708 V +900(ter.)S +1127(When)S +1439(an)S +1593(image)S +1912(has)S +2109(previously)S +2624(been)S +2881(displayed)S +3353(the)S +3538(subraster)S +3984(position)S +4392(is)S +4518(given)S +4814(in)S +4952(image)S +3828 V +900(coordinates)S +1446(\(e.g.)S +1682(when)S +1960(writing)S +2319(a)S +2408(subregion)S +2882(of)S +3014(edited)S +3323(pixels\),)S +3690(otherwise)S +4156(the)S +4330(position)S +4726(is)S +4840(in)S +4966(frame)S +3948 V +900(bu)S +1010 H + (f)show 11 -.5 mul h (f)show +11 R +1077(er)S +1256(coordinates)S +1856(\(e.g.)S +2146(to)S +2327(display)S +2740(multiple)S +3203(images)S +3609(per)S +3843(frame)S +4193(you)S +4454(should)S +4844(use)S +5086(the)S +4068 V +900(cdl_writeSubRaster\(\))S +1885(call\).)S +2187(See)S +2392(the)S +2573(section)S +2931(on)S +11 I +3088(Marker)S +3463(Coordinates)S +11 R +4055(for)S +4228(further)S +4571(explanation)S +5129(of)S +4188 V +900(the)S +1067(coordinate)S +1562(systems)S +1944(used.)S +4428 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +4548 V +11 C +1175(int)S +1439(cdl_writeSubRaster)S +2693(\(CDLPtr)S +3221(cdl,)S +3551(int)S +3815(lx,)S +4079(int)S +4343(ly,)S +4607(int)S +4871(nx,)S +4668 V +1439(int)S +1703(ny,)S +1967(uchar)S +2363(*pix\))S +4788 V +1175(int)S +1439(cdl_readSubRaster)S +2627(\(CDLPtr)S +3155(cdl,)S +3485(int)S +3749(lx,)S +4013(int)S +4277(ly,)S +4541(int)S +4805(nx,)S +4908 V +1439(int)S +1703(ny,)S +1967(uchar)S +2363(**pix\))S +5148 V +11 B +900(5.)S +1049(Graphics)S +1517(Overlay)S +5388 V +900(5.1.)S +1132(Marker)S +1529(Coordinates)S +5544 V +11 R +1175(All)S +1369(marker)S +1731(positions)S +2183(are)S +2368(assumed)S +2799(to)S +2938(be)S +3094(image)S +3415(pixel)S +3688(coordinates,)S +4274(although)S +4712(there)S +4983(is)S +5110(no)S +5664 V +900(requirement)S +1465(that)S +1666(the)S +1836(position)S +2227(be)S +2365(on)S +2510(the)S +2679(image)S +2982(itself.)S +3298(When)S +3594(an)S +3732(image)S +4035(WCS)S +4309(is)S +4418(de\256ned)S +4776(\(using)S +5086(the)S +5784 V +900(CDL)S +1162(display)S +1522(procedures)S +2043(or)S +2176(explicitly\))S +2670(the)S +2846(origin)S +3151(of)S +3284(the)S +3460(coordinates)S +4007(used)S +4251(shifts)S +4533(from)S +4789(the)S +4966(frame)S +5904 V +900(bu)S +1010 H + (f)show 11 -.5 mul h (f)show +11 R +1077(er)S +1205(lower-left)S +1680(to)S +1810(the)S +1988(lower-left)S +2463(of)S +2598(the)S +2776(image)S +3088(as)S +3222(displayed)S +3686(in)S +3815(the)S +3992(frame.)S +4383(Negative)S +4821(positions)S +6024 V +900(are)S +1069(allowed)S +1453(and)S +1648(will)S +1857(either)S +2144(refer)S +2386(to)S +2510(empty)S +2823(pixels)S +3124(if)S +3229(the)S +3401(frame)S +3693(bu)S +3803 H + (f)show 11 -.5 mul h (f)show +11 R +3870(er)S +3992(is)S +4104(larger)S +4396(than)S +4623(the)S +4795(image,)S +5129(or)S +6144 V +900(pixels)S +1213(outside)S +1581(the)S +1765(frame)S +2069(bu)S +2179 H + (f)show 11 -.5 mul h (f)show +11 R +2246(er)S +2380(boundaries.)S +2971(Raster)S +3300(I/O)S +3495(requests)S +3903(will)S +4124(be)S +4276(clipped)S +4648(to)S +4783(the)S +4966(frame)S +6264 V +900(bu)S +1010 H + (f)show 11 -.5 mul h (f)show +11 R +1077(er)S +1194(endpoints,)S +1683(a)S +1764(request)S +2113(completely)S +2634(outside)S +2985(the)S +3152(frame)S +3439(bu)S +3549 H + (f)show 11 -.5 mul h (f)show +11 R +3616(er)S +3733(is)S +3840(an)S +3976(error.)S +6504 V +11 B +900(5.2.)S +1132(Mapping)S +1595(a)S +1683(Previously)S +2211(Displayed)S +2710(Image)S +6660 V +11 R +1175(Ideally)S +1512(any)S +1703(application)S +2224(wishing)S +2606(to)S +2725(draw)S +2976(markers)S +3361(on)S +3504(an)S +3641(image)S +3943(will)S +4149(have)S +4389(also)S +4600(displayed)S +5055(that)S +6780 V +900(image,)S +1242(however)S +1664(the)S +11 B +1844(cdl_mapFrame\(\))S +11 R +2675(procedure)S +3157(may)S +3392(be)S +3540(used)S +3786(to)S +3917(map)S +4151(the)S +4330(requested)S +4794(frame)S +5093(for)S +6900 V +900(marker)S +1247(overlay.)S +1674(It)S +1779(does)S +2018(this)S +2216(by)S +2365(reading)S +2732(the)S +2905(WCS)S +3183(de\256ned)S +3545(for)S +3711(that)S +3915(frame)S +4208(and)S +4405(assumes)S +4810(an)S +4952(image)S +7020 V +900(has)S +1089(been)S +1338(displayed)S +1802(and)S +2003(centered)S +2415(in)S +2544(the)S +2721(frame)S +3018(bu)S +3128 H + (f)show 11 -.5 mul h (f)show +11 R +3195(er,)S +3350(then)S +3582(resets)S +3874(the)S +4051(internal)S +4428(CDL)S +4690(image)S +5000(posi-)S +7140 V +900(tion.)S +1200(For)S +1387(this)S +1581(reason)S +1900(it)S +1997(should)S +2326(not)S +2502(be)S +2640(used)S +2876(when)S +3148(multiple)S +3551(image)S +3854(mappings)S +4317(have)S +4558(been)S +4799(displayed)S +7260 V +900(to)S +1026(a)S +1114(frame)S +1408(unless)S +1723(the)S +1897(marker)S +2246(overlay)S +2614(can)S +2805(be)S +2948(done)S +3201(reliably)S +3576(using)S +3855(the)S +4029(last)S +4222(WCS)S +4501(displayed)S +4961(to)S +5086(the)S +7920 V +EP +%%Page: 12 15 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 12 -)S +840 V +900(frame)S +1191(bu)S +1301 H + (f)show 11 -.5 mul h (f)show +11 R +1368(er.)S +1550(If)S +1659(no)S +1807(image)S +2113(has)S +2297(been)S +2541(displayed)S +3000(the)S +3172(frame)S +3464(bu)S +3574 H + (f)show 11 -.5 mul h (f)show +11 R +3641(er)S +3763(is)S +3875(mapped)S +4260(directly.)S +4694(This)S +4928(can)S +5117(be)S +960 V +900(used)S +1142(for)S +1310(example)S +1722(to)S +1849(map)S +2079(an)S +2223(empty)S +2539(frame)S +2834(for)S +3002(displaying)S +3502(just)S +3703(the)S +3878(markers)S +4271(without)S +4649(an)S +4793(image,)S +5129(or)S +1080 V +900(for)S +1063(mapping)S +1484(another)S +1849(frame's)S +2219(WCS)S +2495(for)S +2659(use)S +2842(on)S +2989(the)S +3160(current)S +3506(display.)S +3922(The)S +4129(frame)S +4420(is)S +4531(not)S +4709(changed)S +5110(by)S +1200 V +900(the)S +1067(procedure)S +1536(call)S +1727(however)S +2136(the)S +2303(current)S +2645(WCS)S +11 I +2917(is)S +11 R +3024(changed.)S +1440 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +1560 V +11 C +1175(int)S +1439(cdl_mapFrame)S +2297(\(CDLPtr)S +2825(cdl,)S +3155(int)S +3419(frame\))S +1800 V +11 B +900(5.3.)S +1132(Marking)S +1581(a)S +1669(Coordinate)S +2233(File)S +1956 V +11 R +1175(Since)S +1465(a)S +1559(common)S +1990(function)S +2402(for)S +2576(programs)S +3037(will)S +3256(be)S +3406(to)S +3539(mark)S +3811(a)S +3906(list)S +4089(of)S +4227(coordinates,)S +4807(the)S +4988(high-)S +2076 V +900(level)S +11 B +1158(cdl_markCoordsFile\(\))S +11 R +2246(procedure)S +2727(is)S +2846(provided)S +3281(to)S +3412(make)S +3693(this)S +3897(easier.)S +4256(The)S +4470(input)S +4741(parameters)S +2196 V +900(include)S +1273(a)S +1371(\256lename)S +1799(expected)S +2237(to)S +2373(contain)S +2747(a)S +2846(set)S +3019(of)S +3161(\(x,y\))S +3422(points)S +3743(\(real)S +3993(or)S +4135(integer\),)S +4554(and)S +4763(arguments)S +2316 V +900(specifying)S +1395(the)S +1567(point)S +1832(type,)S +2087(size)S +2294(and)S +2489(color)S +2751(to)S +2874(draw.)S +3190(If)S +3299(the)S +11 I +3470(label)S +11 R +3727(argument)S +4178(is)S +4289(positive)S +4675(each)S +4911(marker)S +2436 V +900(point)S +1160(will)S +1365(be)S +1501(labeled)S +1850(with)S +2079(it's)S +2254(relative)S +2616(number)S +2985(in)S +3105(the)S +3273(\256le.)S +3509(The)S +3713(size,)S +3945(type)S +4168(and)S +4360(color)S +4619(arguments)S +5110(all)S +2556 V +900(have)S +1139(the)S +1306(same)S +1564(meaning)S +1975(as)S +2099(for)S +2259(the)S +11 B +2426(cdl_markPoint\(\))S +11 R +3234(procedure)S +3703(described)S +4155(below.)S +2796 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +2916 V +11 C +1175(int)S +1439(cdl_markCoordsFile)S +2693(\(CDLPtr)S +3221(cdl,)S +3551(char)S +3881(*fname,)S +4409(int)S +4673(type,)S +3036 V +1439(int)S +1703(size,)S +2099(int)S +2363(color,)S +2825(int)S +3089(label\))S +3276 V +11 B +900(5.4.)S +1132(Marker)S +1529(Colors)S +3432 V +11 R +1175(Markers)S +1576(may)S +1802(be)S +1942(drawn)S +2252(using)S +2528(any)S +2723(8-bit)S +2969(value,)S +3272(in)S +3396(order)S +3664(to)S +3788(use)S +3972(the)S +4144(static)S +4414(overlay)S +4780(colors)S +5086(the)S +3552 V +900(color)S +1174(must)S +1438(be)S +1589(in)S +1723(the)S +1905(range)S +2195(201-217)S +2609(\(see)S +2832(above)S +3141(for)S +3316(notes)S +3596(on)S +3754(the)S +3936(XImtool)S +4357(color)S +4630(model\).)S +5050(The)S +3672 V +900(")S +11 I +945(cdl.h)S +11 R +1162(")S +1272(include)S +1660(\256le)S +1866(for)S +2059(C)S +2199(programs,)S +2707(the)S +2907(")S +11 I +2952(cdlftn.inc)S +11 R +3365(")S +3476(include)S +3865(for)S +4058(fortran)S +4421(programs,)S +4929(or)S +5086(the)S +3792 V +900(")S +11 I +945(cdlspp.h)S +11 R +1315(")S +1402(include)S +1767(for)S +1936(SPP)S +2164(programs,)S +2648(de\256nes)S +3001(the)S +3177(following)S +3647(symbolic)S +4093(constants)S +4544(for)S +4713(each)S +4954(of)S +5086(the)S +3912 V +900(static)S +1165(overlay)S +1526(colors:)S +4152 V +11 B +1730(C_BLACK)S +11 R +2603(202)S +11 B +3263(C_CORAL)S +11 R +4224(210)S +4272 V +11 B +1730(C_WHITE)S +11 R +2603(203)S +11 B +3263(C_MAROON)S +11 R +4224(211)S +4392 V +11 B +1730(C_RED)S +11 R +2603(204)S +11 B +3263(C_ORANGE)S +11 R +4224(212)S +4512 V +11 B +1730(C_GREEN)S +11 R +2603(205)S +11 B +3263(C_KHAKI)S +11 R +4224(213)S +4632 V +11 B +1730(C_BLUE)S +11 R +2603(206)S +11 B +3263(C_ORCHID)S +11 R +4224(214)S +4752 V +11 B +1730(C_YELLOW)S +11 R +2603(207)S +11 B +3263(C_TURQUOISE)S +11 R +4224(215)S +4872 V +11 B +1730(C_CYAN)S +11 R +2603(208)S +11 B +3263(C_VIOLET)S +11 R +4224(216)S +4992 V +11 B +1730(C_MAGENTA)S +11 R +2603(209)S +11 B +3263(C_WHEAT)S +11 R +4224(217)S +5292 V +11 B +900(5.5.)S +1132(Marker)S +1529(Types)S +5448 V +11 R +1175(Currently)S +1629(supported)S +2095(marker)S +2437(types)S +2702(include:)S +5628 V +11 I +1534(Point)S +1974(Line)S +2846(Box)S +3317(Polyline)S +4220(Polygon)S +5748 V +1534(Circle)S +1974(Circular)S +2387(Annuli)S +2846(Ellipse)S +3317(Elliptical)S +3761(Annuli)S +4220(Text)S +5964 V +11 R +1175(The)S +1386(")S +11 I +1431(cdl.h)S +11 R +1648(")S +1734(include)S +2099(\256le)S +2282(for)S +2451(C)S +2567(programs,)S +3051(the)S +3227(")S +11 I +3272(cdlftn.inc)S +11 R +3685(")S +3772(include)S +4137(for)S +4306(fortran)S +4645(programs,)S +5129(or)S +6084 V +900(the)S +1075(")S +11 I +1120(cdlspp.h)S +11 R +1490(")S +1576(include)S +1940(\256le)S +2122(SPP)S +2349(programs,)S +2832(de\256nes)S +3184(the)S +3359(following)S +3828(symbolic)S +4273(constants)S +4723(for)S +4890(each)S +5129(of)S +6204 V +900(the)S +1067(de\256ned)S +11 I +1423(Point)S +11 R +1695(marker)S +2037(types:)S +6384 V +11 B +1835(M_FILL)S +11 R +2761(1)S +11 B +3311(M_CIRCLE)S +11 R +4174(64)S +6504 V +11 B +1835(M_POINT)S +11 R +2761(2)S +11 B +3311(M_STAR)S +11 R +4119(128)S +6624 V +11 B +1835(M_BOX)S +11 R +2761(4)S +11 B +3311(M_HLINE)S +11 R +4119(256)S +6744 V +11 B +1835(M_PLUS)S +11 R +2761(8)S +11 B +3311(M_VLINE)S +11 R +4119(512)S +6864 V +11 B +1835(M_CROSS)S +11 R +2706(16)S +11 B +3311(M_HBLINE)S +11 R +4064(1024)S +6984 V +11 B +1835(M_DIAMOND)S +11 R +2706(32)S +11 B +3311(M_VBLINE)S +11 R +4064(2048)S +7920 V +EP +%%Page: 13 16 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 13 -)S +840 V +1175(Point)S +1449(markers)S +1841(are)S +2013(drawn)S +2326(using)S +2605(the)S +11 B +2779(cdl_markPoint\(\))S +11 R +3594(procedure,)S +4098(point)S +4365(types)S +4638(may)S +4868(be)S +5012(logi-)S +960 V +900(cally)S +11 I +1156(OR)S +11 R +1302('d)S +1436(to)S +1565(create)S +1867(composite)S +2362(markers,)S +2784(closed)S +3106(shapes)S +3440(such)S +3683(as)S +3816(a)S +3906(circles,)S +4261(diamonds,)S +4759(or)S +4892(squares)S +1080 V +900(may)S +1122(be)S +11 I +1258(OR)S +11 R +1404('d)S +1528(with)S +1757(the)S +1924(M_FILL)S +2342(\257ag)S +2540(to)S +2659(\257ood-\256ll)S +3079(the)S +3246(point)S +3506(with)S +3735(the)S +3902(current)S +4244(overlay)S +4605(color.)S +1320 V +11 B +900(5.5.1.)S +1215(Point)S +1476 V +11 R +1175(The)S +11 B +1384(cdl_markPoint\(\))S +11 R +2199(procedure)S +2675(is)S +2789(used)S +3030(to)S +3156(mark)S +3421(a)S +3509(speci\256c)S +3884(point)S +4151(on)S +4301(the)S +4475(image)S +4783(using)S +5062(one)S +1596 V +900(of)S +1033(the)S +1209(marker)S +1560(types)S +1834(listed)S +2115(above.)S +2479(The)S +2691(marker)S +3042(is)S +3158(centered)S +3569(at)S +3690(the)S +3866(coordinates)S +4413(speci\256ed)S +4845(by)S +4997(the)S +11 I +5172(x)S +1716 V +11 R +900(and)S +11 I +1099(y)S +11 R +1188(arguments,)S +11 I +1714(type)S +11 R +1937(is)S +2052(an)S +2196(integer)S +2542(\257ag)S +2749(indicating)S +3231(what)S +3486(kind)S +3724(of)S +3857(marker)S +4208(to)S +4336(draw)S +4596(and)S +4796(may)S +5027(be)S +5172(a)S +1836 V +900(composite)S +1393(type)S +1623(by)S +1774(logically)S +2200(ORing)S +2535(two)S +2741(or)S +2873(more)S +3138(marker)S +3487(types.)S +11 I +3820(Size)S +11 R +4037(is)S +4151(the)S +4325(width)S +4616(and)S +4814(height)S +5129(of)S +1956 V +900(the)S +1082(marker)S +1439(measured)S +1906(in)S +2040(pixel)S +2308(unxits,)S +2654(and)S +11 I +2860(color)S +11 R +3140(is)S +3262(the)S +3444(color)S +3717(used)S +3966(to)S +4100(draw)S +4366(the)S +4548(marker.)S +4966(If)S +5086(the)S +2076 V +11 I +900(number)S +11 R +1280(argument)S +1739(is)S +1858(greater)S +2205(than)S +2439(zero)S +2671(that)S +2881(number)S +3260(will)S +3476(be)S +3623(drawn)S +3940(next)S +4173(to)S +4303(the)S +4481(point)S +4752(as)S +4887(a)S +4979(label,)S +2196 V +900(creating)S +1285(text)S +1483(labels)S +1772(for)S +1932(point)S +2192(markers)S +2577(can)S +2761(be)S +2897(done)S +3143(using)S +3415(the)S +11 I +3582(cdl_markPointLabel)S +11 R +4519(procedure.)S +2352 V +1175(Most)S +1466(marker)S +1839(names)S +2183(are)S +2379(fairly)S +2680(obvious)S +3093(but)S +3299(several)S +3673(are)S +3870(worth)S +4191(special)S +4560(mention:)S +5050(The)S +2472 V +900(M_DIAMOND,)S +1676(M_CIRCLE)S +2287(and)S +2511(M_BOX)S +2962(marker)S +3337(types)S +3635(may)S +3890(be)S +4059(logically)S +11 I +4510(OR)S +11 R +4656(ed)S +4825(with)S +5086(the)S +2592 V +900(M_FILL)S +1331(\257ag)S +1542(to)S +1674(produce)S +2072(a)S +2166(\256lled)S +2439(marker)S +2794(type.)S +3090(Unless)S +11 I +3435(OR)S +11 R +3581(d)S +3682(with)S +3924(the)S +4104(M_POINT)S +4626(\257ag)S +4837(all)S +4993(point)S +2712 V +900(markers)S +1306(will)S +1531(leave)S +1814(the)S +2001(center)S +2320(pixel)S +2593(unchanged.)S +3181(The)S +3404(M_HLINE)S +3938(and)S +4149(M_VLINE)S +4683(markers)S +5088(are)S +2832 V +900(most)S +1149(useful)S +1451(in)S +1571(astronomical)S +2172(applications)S +2737(to)S +2857(mark)S +3116(an)S +3253(individual)S +3734(star,)S +3954(they)S +4177(are)S +4343(horizontal)S +4822(and)S +5014(vert-)S +2952 V +900(ical)S +1117(lines)S +1384(respectively)S +1971(with)S +2225(a)S +2331(gap)S +2547(in)S +2691(the)S +2883(middle)S +3247(third)S +3513(of)S +3662(the)S +3854(marker)S +4221(\(the)S +4449(M_HBLINE)S +5062(and)S +3072 V +900(M_VBLINE)S +1488(are)S +1653(identical)S +2064(but)S +2238(with)S +2467(a)S +2548(width)S +2832(of)S +2956(3)S +3044(pixels\).)S +3252 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +3372 V +11 C +1175(int)S +1439(cdl_markPoint)S +2363(\(CDLPtr)S +2891(cdl,)S +3221(int)S +3485(x,)S +3683(int)S +3947(y,)S +4145(int)S +4409(number,)S +3492 V +1439(int)S +1703(size,)S +2099(int)S +2363(type,)S +2759(int)S +3023(color\))S +3612 V +1175(int)S +1439(cdl_markPointLabel)S +2693(\(CDLPtr)S +3221(cdl,)S +3551(int)S +3815(x,)S +4013(int)S +4277(y,)S +4475(char)S +4805(*label)S +3732 V +1439(int)S +1703(size,)S +2099(int)S +2363(type,)S +2759(int)S +3023(color\))S +3972 V +11 B +900(5.5.2.)S +1215(Line)S +4128 V +11 R +1175(The)S +11 B +1399(cdl_markLine\(\))S +11 R +2192(procedure)S +2682(is)S +2810(used)S +3065(to)S +3205(draw)S +3477(a)S +3579(line)S +3798(of)S +3943(the)S +4131(speci\256ed)S +4576(color)S +4856(between)S +4248 V +900(points)S +1203(\()S +11 I +1239(xs,ys)S +11 R +1449(\))S +1518(and)S +1709(\()S +11 I +1745(xe,ye)S +11 R +1965(\).)S +4428 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +4548 V +11 C +1175(int)S +1439(cdl_markLine)S +2297(\(CDLPtr)S +2825(cdl,)S +3155(int)S +3419(xs,)S +3683(int)S +3947(ys,)S +4211(int)S +4475(xe,)S +4739(int)S +5003(ye,)S +4668 V +1439(int)S +1703(color\))S +4908 V +11 B +900(5.5.3.)S +1215(Box)S +5064 V +11 R +1175(The)S +11 B +1378(cdl_markBox\(\))S +11 R +2120(procedure)S +2590(is)S +2698(used)S +2933(to)S +3053(draw)S +3305(a)S +3387(box)S +3586(of)S +3711(the)S +3879(speci\256ed)S +4303(color)S +4562(with)S +4792(endpoints)S +5184 V +900(speci\256ed)S +1323(by)S +1466(\()S +11 I +1502(lx,ly)S +11 R +1688(\))S +1757(and)S +1948(\()S +11 I +1984(ux,uy)S +11 R +2218(\).)S +2348(If)S +2453(the)S +11 I +2620(\256ll)S +11 R +2770(\257ag)S +2968(is)S +3075(set)S +3230(the)S +3397(box)S +3595(will)S +3800(be)S +3936(\256lled)S +4196(with)S +4425(the)S +4592(marker)S +4934(color.)S +5364 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +5484 V +11 C +1175(int)S +1439(cdl_markBox)S +2231(\(CDLPtr)S +2759(cdl,)S +3089(int)S +3353(lx,)S +3617(int)S +3881(ly,)S +4145(int)S +4409(ux,)S +4673(int)S +4937(uy,)S +5604 V +1439(int)S +1703(fill,)S +2099(int)S +2363(color\))S +5844 V +11 B +900(5.5.4.)S +1215(Circle)S +6000 V +11 R +1175(The)S +11 B +1393(cdl_markCircle\(\))S +11 R +2250(procedure)S +2734(is)S +2856(used)S +3105(to)S +3239(draw)S +3505(a)S +3601(circle)S +3891(of)S +4031(the)S +4214(speci\256ed)S +4653(color)S +4927(with)S +5172(a)S +6120 V +900(center)S +1209(at)S +1331(\()S +11 I +1367(x,y)S +11 R +1491(\))S +1570(and)S +1771(radius)S +11 I +2082(radius)S +11 R +2364(.)S +2468(If)S +2583(the)S +11 I +2760(\256ll)S +11 R +2920(\257ag)S +3128(is)S +3245(set)S +3409(the)S +3585(circle)S +3869(will)S +4083(be)S +4228(\256lled)S +4497(with)S +4735(the)S +4911(marker)S +6240 V +900(color.)S +6420 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +6540 V +11 C +1175(int)S +1439(cdl_markCircle)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(int)S +3551(x,)S +3749(int)S +4013(y,)S +4211(int)S +4475(radius,)S +6660 V +1439(int)S +1703(fill,)S +2099(int)S +2363(color\))S +7920 V +EP +%%Page: 14 17 +BP +/slant 0 def +/height 1.000000 def +11 C +11 C +480 V +11 R +2936(- 14 -)S +840 V +11 B +900(5.5.5.)S +1215(Polyline)S +996 V +11 R +1175(The)S +11 B +1401(cdl_markPolyline\(\))S +11 R +2361(procedure)S +2853(is)S +2983(used)S +3240(to)S +3382(draw)S +3656(a)S +3760(line)S +3981(connecting)S +4518(the)S +11 I +4709(npts)S +11 R +4950(points)S +1116 V +900(speci\256ed)S +1323(by)S +1466(the)S +11 I +1633(xpts)S +11 R +1843(and)S +11 I +2034(ypts)S +11 R +2244(array)S +2500(in)S +2619(the)S +2786(desired)S +11 I +3135(color)S +11 R +3367(.)S +1296 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +1416 V +11 C +1175(int)S +1439(cdl_markPolyline)S +2561(\(CDLPtr)S +3089(cdl,)S +3419(int)S +3683(*xpts,)S +4145(int)S +4409(*ypts,)S +1536 V +1439(int)S +1703(npts,)S +2099(int)S +2363(color\))S +1776 V +11 B +900(5.5.6.)S +1215(Polygon)S +1932 V +11 R +1175(The)S +11 B +1390(cdl_markPolygon\(\))S +11 R +2339(procedure)S +2820(is)S +2939(used)S +3185(to)S +3316(draw)S +3579(a)S +3673(closed)S +3999(polygon)S +4406(consisting)S +4899(of)S +11 I +5036(npts)S +2052 V +11 R +900(vertices)S +1275(speci\256ed)S +1700(by)S +1845(the)S +11 I +2014(xpts)S +11 R +2226(and)S +11 I +2418(ypts)S +11 R +2629(array)S +2886(in)S +3006(the)S +3174(desired)S +11 I +3524(color)S +11 R +3756(.)S +3851(The)S +4055(last)S +4242(point)S +4503(in)S +4623(the)S +4791(array)S +5048(will)S +2172 V +900(automatically)S +1542(be)S +1689(connected)S +2176(to)S +2306(the)S +2484(\256rst)S +2700(point)S +2971(by)S +3125(the)S +3303(procedure.)S +3845(If)S +3962(the)S +11 I +4141(\256ll)S +11 R +4303(\257ag)S +4513(is)S +4632(set)S +4799(the)S +4978(circle)S +2292 V +900(will)S +1105(be)S +1241(\256lled)S +1501(with)S +1730(the)S +1897(marker)S +2239(color.)S +2472 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +2592 V +11 C +1175(int)S +1439(cdl_markPolygon)S +2495(\(CDLPtr)S +3023(cdl,)S +3353(int)S +3617(*xpts,)S +4079(int)S +4343(*ypts,)S +2712 V +1439(int)S +1703(npts,)S +2099(int)S +2363(fill,)S +2759(int)S +3023(color\))S +2952 V +11 B +900(5.5.7.)S +1215(Ellipse)S +3108 V +11 R +1175(The)S +11 B +1383(cdl_markEllipse\(\))S +11 R +2265(procedure)S +2739(is)S +2851(used)S +3091(to)S +3216(draw)S +3473(an)S +3615(ellipse)S +3941(of)S +4071(the)S +4244(speci\256ed)S +4673(color)S +4937(with)S +5172(a)S +3228 V +900(center)S +1207(at)S +1327(\()S +11 I +1363(x,y)S +11 R +1487(\))S +1563(and)S +1761(semimajor-axis)S +11 I +2478(xrad)S +11 R +2719(and)S +2917(semiminor-axis)S +11 I +3641(yrad)S +11 R +3882(pixels)S +4185(long.)S +4482(A)S +4601(rotation)S +4983(angle)S +3348 V +900(for)S +1063(the)S +1233(ellipse)S +1556(may)S +1781(be)S +1920(speci\256ed)S +2346(by)S +2492(passing)S +2858(a)S +2942(non-zero)S +11 I +3366(angle)S +11 R +3646(argument,)S +4124(the)S +4294(angle)S +4567(is)S +4678(measured)S +5134(in)S +3468 V +900(degrees)S +1276(from)S +1532(the)S +1709(positive)S +2101(x-axis.)S +2473(If)S +2587(the)S +11 I +2763(\256ll)S +11 R +2922(\257ag)S +3129(is)S +3245(set)S +3409(the)S +3585(circle)S +3869(will)S +4083(be)S +4228(\256lled)S +4497(with)S +4735(the)S +4911(marker)S +3588 V +900(color.)S +3768 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +3888 V +11 C +1175(int)S +1439(cdl_markEllipse)S +2495(\(CDLPtr)S +3023(cdl,)S +3353(int)S +3617(x,)S +3815(int)S +4079(y,)S +4277(int)S +4541(xrad,)S +4008 V +1439(int)S +1703(yrad,)S +2099(float)S +2495(ang,)S +2825(int)S +3089(fill,)S +3485(int)S +3749(color\))S +4248 V +11 B +900(5.5.8.)S +1215(Circular)S +1650(Annuli)S +4404 V +11 R +1175(The)S +11 B +1391(cdl_markCircAnnuli\(\))S +11 R +2494(procedure)S +2976(is)S +3096(used)S +3344(to)S +3477(draw)S +11 I +3742(nannuli)S +11 R +4126(circles)S +4458(separated)S +4917(by)S +11 I +5074(sep)S +4524 V +11 R +900(pixels)S +1196(each.)S +1489(The)S +1692(circle)S +1967(is)S +2074(centered)S +2476(at)S +2588(\()S +11 I +2624(x,y)S +11 R +2748(\))S +2817(with)S +3046(an)S +3182(initial)S +3473(radius)S +3774(of)S +11 I +3898(radius)S +11 R +4213(pixels.)S +4704 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +4824 V +11 C +1175(int)S +1439(cdl_markCircAnnuli)S +2693(\(CDLPtr)S +3221(cdl,)S +3551(int)S +3815(x,)S +4013(int)S +4277(y,)S +4475(int)S +4739(radius,)S +4944 V +1439(int)S +1703(nannuli,)S +2297(int)S +2561(sep,)S +2891(int)S +3155(color\))S +5184 V +11 B +900(5.5.9.)S +1215(Elliptical)S +1678(Annuli)S +5340 V +11 R +1175(The)S +11 B +1385(cdl_markEllipAnnuli\(\))S +11 R +2505(procedure)S +2981(is)S +3095(used)S +3336(to)S +3462(draw)S +11 I +3721(nannuli)S +11 R +4099(ellipses)S +4470(separated)S +4923(by)S +11 I +5074(sep)S +5460 V +11 R +900(pixels)S +1220(each.)S +1537(The)S +1764(ellipse)S +2108(is)S +2239(centered)S +2665(at)S +2801(\()S +11 I +2837(x,y)S +11 R +2961(\))S +3054(with)S +3307(an)S +3467(initial)S +3782(semimajor)S +4302(and)S +4516(semiminor)S +5043(axis)S +5580 V +900(speci\256ed)S +1335(by)S +1490(the)S +11 I +1669(xrad)S +11 R +1915(and)S +11 I +2118(yrad)S +11 R +2364(arguments.)S +2927(Each)S +3190(ellipse)S +3522(will)S +3739(be)S +3887(optionally)S +4379(rotate)S +4673(by)S +4828(an)S +11 I +4976(angle)S +5700 V +11 R +900(degrees)S +1266(as)S +1390(measured)S +1842(from)S +2088(the)S +2255(positive)S +2637(x-axis.)S +5880 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +6000 V +11 C +1175(int)S +1439(cdl_markEllipAnnuli)S +2759(\(CDLPtr)S +3287(cdl,)S +3617(x,)S +3815(y,)S +4013(xrad,)S +4409(yrad,)S +4805(ang,)S +6120 V +1439(int)S +1703(nannuli,)S +2297(int)S +2561(sep,)S +2891(int)S +3155(color\))S +6360 V +11 B +900(5.5.10.)S +1270(Text)S +6516 V +11 R +1175(The)S +11 B +1393(cdl_markText\(\))S +11 R +2178(procedure)S +2662(is)S +2784(used)S +3033(to)S +3167(draw)S +3433(a)S +3529(text)S +3742(string)S +4042(speci\256ed)S +4481(by)S +11 I +4640(str)S +11 R +4806(argument)S +6636 V +900(with)S +1142(an)S +1291(initial)S +1595(position)S +1997(at)S +2121(\()S +11 I +2157(x,y)S +11 R +2281(\))S +2362(and)S +2565(optionally)S +3057(rotated)S +3406(by)S +11 I +3561(angle)S +11 R +3850(degrees)S +4228(as)S +4364(measured)S +4828(from)S +5086(the)S +6756 V +900(positive)S +1288(x-axis.)S +1657(The)S +1867(default)S +11 I +2211(size)S +11 R +2416(is)S +2530(1.0)S +2708(and)S +2906(is)S +3020(approximately)S +3694(a)S +3782(6x13)S +4042(font,)S +4287(the)S +4461(font)S +4678(size)S +4888(may)S +5117(be)S +6876 V +900(scaled)S +1206(by)S +1349(any)S +1540(fractional)S +1992(amount.)S +7056 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +7176 V +11 C +1175(int)S +1439(cdl_markText)S +2297(\(CDLPtr)S +2825(cdl,)S +3155(int)S +3419(x,)S +3617(int)S +3881(y,)S +4079(char)S +4409(*str,)S +7296 V +1439(float)S +1835(size,)S +2231(float)S +2627(angle,)S +3089(int)S +3353(color\))S +7920 V +EP +%%Page: 15 18 +BP +/slant 0 def +/height 1.000000 def +11 C +11 C +480 V +11 R +2936(- 15 -)S +840 V +11 B +900(5.6.)S +1132(Text)S +1378(Fonts)S +996 V +11 R +1175(The)S +11 B +1382(cdl_setFont\(\))S +11 R +2034(procedure)S +2507(is)S +2618(used)S +2856(to)S +2979(choose)S +3320(between)S +3721(one)S +3917(of)S +4046(four)S +4266(available)S +4699(fonts)S +4957(as)S +5086(the)S +1116 V +900(text)S +1099(marker)S +1442(default:)S +1811(Roman,)S +2191(Greek,)S +2518(Futura,)S +2866(Bold)S +3114(and)S +3305(Times)S +3613(respectively.)S +4236(By)S +4398(default)S +4735(the)S +4902(Roman)S +1236 V +900(font)S +1110(will)S +1315(be)S +1451(used.)S +1713(The)S +1916(width)S +2200(of)S +2324(the)S +2491(lines)S +2732(used)S +2966(to)S +3085(draw)S +3336(the)S +3503(text)S +3701(may)S +3923(also)S +4133(be)S +4269(set.)S +1416 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +1536 V +11 C +1175(void)S +1505(cdl_setFont)S +2297(\(CDLPtr)S +2825(cdl,)S +3155(int)S +3419(font\))S +1656 V +1175(void)S +1505(cdl_setTextWidth)S +2627(\(CDLPtr)S +3155(cdl,)S +3485(int)S +3749(width\))S +1836 V +11 R +900(A)S +1023(complete)S +1469(listing)S +1790(of)S +1925(the)S +2103(Greek)S +2413(character)S +2856(mappings)S +3329(can)S +3525(be)S +3673(found)S +3974(in)S +4105(the)S +4284(\256le)S +4470('greek.ps')S +4955(in)S +5086(the)S +1956 V +900('doc')S +1173(subdirectory)S +1764(of)S +1898(the)S +2074(CDL)S +2336(distribution.)S +3223(The)S +11 I +3435(Roman)S +11 R +3788(font)S +4007(is)S +4123(the)S +4299(font)S +4518(implemented)S +5134(in)S +2076 V +900(the)S +1084(original)S +1476(version)S +1849(of)S +1990(the)S +2174(CDL)S +2444(and)S +2652(works)S +2970(well)S +3209(for)S +3386(most)S +3651(applications.)S +4294(Both)S +4560(the)S +11 I +4745(Greek)S +11 R +5062(and)S +2196 V +11 I +900(Times)S +11 R +1211(fonts)S +1479(are)S +1659(hi-resolution)S +2269(fonts)S +2537(which)S +2853(work)S +3126(best)S +3351(for)S +3526(larger)S +3828(frame)S +4130(bu)S +4240 H + (f)show 11 -.5 mul h (f)show +11 R +4307(ers)S +4482(but)S +4670(can)S +4868(produce)S +2316 V +900(publication)S +1429(quality)S +1769(text.)S +2029(The)S +11 I +2233(Futura)S +11 R +2573(font)S +2784(is)S +2892(a)S +2974(simpler)S +3338(font)S +3549(which)S +3852(can)S +4038(produce)S +4425(better)S +4709(results)S +5031(than)S +2436 V +900(the)S +1072(default)S +1414(on)S +1562(small)S +1839(size)S +2047(frame)S +2339(bu)S +2449 H + (f)show 11 -.5 mul h (f)show +11 R +2516(ers.)S +2742(A)S +11 I +2859(Bold)S +11 R +3105(font)S +3320(automatically)S +3956(increases)S +4394(the)S +4565(text)S +4767(line)S +4969(width)S +2556 V +900(by)S +1043(one)S +1234(pixel)S +1487(over)S +1714(the)S +1881(current)S +2223(setting)S +2550(and)S +2741(may)S +2963(be)S +3099(used)S +3333(with)S +3562(any)S +3753(font.)S +2796 V +11 B +900(5.6.1.)S +1215(In-Line)S +1604(Font)S +1857(Changes)S +2952 V +11 R +1175(Text)S +1421(markers)S +1818(are)S +1995(drawn)S +2314(using)S +2599(the)S +2779(font)S +3002(selected)S +3400(with)S +3642(the)S +11 I +3822(cdl_setFont\(\))S +11 R +4459(routine,)S +4844(however)S +3072 V +900(fonts)S +1174(may)S +1417(be)S +1573(change)S +1935(within)S +2270(a)S +2371(string)S +2675(itself)S +2948(\(e.g.)S +3196(to)S +3335(set)S +3510(a)S +3611(Greek)S +3930(character\))S +4417(using)S +4709(a)S +4810(\\f)S +4930(escape)S +3192 V +900(sequence.)S +1399(The)S +1608(escape)S +1937(is)S +2050(followed)S +2479(by)S +2628(the)S +2801(character)S +3238('R')S +3423(to)S +3548(set)S +3709(a)S +3796(Roman)S +4153(font,)S +4397('G')S +4587(for)S +4753(Greek,)S +5086('F')S +3312 V +900(for)S +1061(futura,)S +1384('B')S +1564(for)S +1725(bold)S +1954(and)S +2145('T')S +2317(for)S +2477(Times.)S +2846(Any)S +3068(number)S +3436(of)S +3560(escapes)S +3926(are)S +4091(permitted)S +4545(within)S +4860(a)S +4941(string,)S +3432 V +900(the)S +1071(font)S +1285(change)S +1631(will)S +1840(remain)S +2181(in)S +2304(e)S +2352 H + (f)show 11 -.5 mul h (f)show +11 R +2419(ect)S +2583(until)S +2823(it)S +2922(is)S +3033(changed,)S +3462(or)S +3590(the)S +3761(end)S +3956(of)S +4085(string)S +4374(at)S +4491(which)S +4797(point)S +5062(any)S +3552 V +900(subsequent)S +1431(strings)S +1768(will)S +1982(again)S +2261(be)S +2406(drawn)S +2721(with)S +2959(the)S +3135(default)S +3481(font.)S +3761(Additionally)S +4360(a)S +4450('P')S +4626(in)S +4754(the)S +4930(escape)S +3672 V +900(sequence)S +1333(will)S +1538(change)S +1880(the)S +2047(font)S +2257(to)S +2376(the)S +2543(one)S +2734(previously)S +3231(used,)S +3493(whatever)S +3926(that)S +4124(may)S +4346(be.)S +3828 V +1175(The)S +1382(CDL)S +1639(also)S +1853(supports)S +2263(a)S +2348(sub/superscripting)S +3191(of)S +3319(text)S +3521(which)S +3826(can)S +4014(only)S +4247(be)S +4387(done)S +4637(with)S +4871(the)S +5043(font)S +3948 V +900(escapes.)S +1337(In)S +1471(this)S +1674(case)S +1904(the)S +2081(escape)S +2414(character)S +2855(followed)S +3288(by)S +3441(a)S +3532('U')S +3726(produces)S +4164(a)S +4255(superscript)S +4779(and)S +4979(a)S +5069('D')S +4068 V +900(produces)S +1334(a)S +1421(subscript.)S +1918(The)S +2127(changes)S +2518(may)S +2746(be)S +2889(nested)S +3209(permitting)S +3708(several)S +4057(levels)S +4353(of)S +4484(sub/superscripts,)S +4188 V +900(these)S +1159(escapes)S +1526(may)S +1749(also)S +1960(be)S +2097(used)S +2332(in)S +2452(conjunction)S +3005(with)S +3235(a)S +3317(font)S +3528(change)S +3871(to)S +3991(cause)S +4267(the)S +4435(sub/superscript)S +5134(to)S +4308 V +900(be)S +1045(drawn)S +1360(with)S +1598(a)S +1688(di)S +1774 H + (f)show 11 -.5 mul h (f)show +11 R +1841(erent)S +2101(font.)S +2381(A)S +2502(superscript)S +3025(escape)S +3357(will)S +3571(remain)S +3917(in)S +4045(e)S +4093 H + (f)show 11 -.5 mul h (f)show +11 R +4160(ect)S +4329(until)S +4574(the)S +4751(end)S +4952(of)S +5086(the)S +4428 V +900(string)S +1188(or)S +1316(a)S +1401(\\fD)S +1584(escape)S +1911(is)S +2022(seen.)S +2314(Similarly)S +2762(a)S +2847(subscript)S +3281(remains)S +3665(in)S +3788(e)S +3836 H + (f)show 11 -.5 mul h (f)show +11 R +3903(ect)S +4067(until)S +4307(the)S +4478(end)S +4672(of)S +4799(the)S +4969(string)S +4548 V +900(of)S +1028(a)S +1113(\\fU)S +1296(escape.)S +1684(Sub/superscripted)S +2508(text)S +2710(is)S +2821(drawn)S +3131(using)S +3407(a)S +3492(smaller)S +3852(font)S +4066(size,)S +4302(there)S +4558(is)S +4670(presently)S +5110(no)S +4668 V +900(way)S +1115(to)S +1234(specify)S +1583(a)S +1664(di)S +1750 H + (f)show 11 -.5 mul h (f)show +11 R +1817(erent)S +2068(size)S +2271(for)S +2431(the)S +2598(sub/superscripted)S +3399(text.)S +4848 V +11 B +2436(Summary)S +2933(of)S +3057(Font)S +3310(Escapes)S +5028 V +11 R +2179(\\fR)S +2521(change)S +2863(to)S +2982(Roman)S +3333(font)S +5148 V +2179(\\fG)S +2521(change)S +2863(to)S +2982(Greek)S +3281(font)S +5268 V +2179(\\fF)S +2521(change)S +2863(to)S +2982(Futura)S +3302(font)S +5388 V +2179(\\fT)S +2521(change)S +2863(to)S +2982(Times)S +3290(font)S +5508 V +2179(\\fB)S +2521(change)S +2863(to)S +2982(bold)S +3211(font)S +5628 V +2179(\\fP)S +2521(change)S +2863(to)S +2982(previous)S +3393(font)S +5748 V +2179(\\fU)S +2521(begin)S +2798(relative)S +3159(superscripted)S +3776(text)S +5868 V +2179(\\fD)S +2521(begin)S +2798(relative)S +3159(subscripted)S +3692(text)S +6168 V +11 B +900(5.7.)S +1132(Line)S +1380(Widths)S +1757(and)S +1969(Styles)S +6324 V +11 R +1175(The)S +11 B +1407(cdl_setLineWidth\(\))S +11 R +2380(procedure)S +2878(can)S +3091(be)S +3256(used)S +3519(to)S +3667(set)S +3851(the)S +4047(line)S +4275(width)S +4589(used)S +4853(to)S +5002(draw)S +6444 V +900(polygon)S +1306(or)S +1442(polyline)S +1848(markers,)S +2273(point)S +2544(markers)S +2940(will)S +3156(not)S +3341(be)S +3488(a)S +3536 H + (f)show 11 -.5 mul h (f)show +11 R +3603(ected.)S +3938(The)S +11 B +4152(cdl_setLineStyle\(\))S +11 R +5038(pro-)S +6564 V +900(cedure)S +1223(is)S +1330(used)S +1564(to)S +1683(set)S +1838(a)S +1919(line)S +2117(style)S +2358(other)S +2616(than)S +2838(solid.)S +6744 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +6864 V +11 C +1175(void)S +1505(cdl_setLineWidth)S +2627(\(CDLPtr)S +3155(cdl,)S +3485(int)S +3749(width\))S +6984 V +1175(void)S +1505(cdl_setLineStyle)S +2627(\(CDLPtr)S +3155(cdl,)S +3485(int)S +3749(style\))S +7140 V +11 R +1175(The)S +1386(")S +11 I +1431(cdl.h)S +11 R +1648(")S +1734(include)S +2099(\256le)S +2282(for)S +2451(C)S +2567(programs,)S +3051(the)S +3227(")S +11 I +3272(cdlftn.inc)S +11 R +3685(")S +3772(include)S +4137(for)S +4306(fortran)S +4645(programs,)S +5129(or)S +7260 V +900(the)S +1075(")S +11 I +1120(cdlspp.h)S +11 R +1490(")S +1576(include)S +1940(\256le)S +2122(SPP)S +2349(programs,)S +2832(de\256nes)S +3184(the)S +3359(following)S +3828(symbolic)S +4273(constants)S +4723(for)S +4890(each)S +5129(of)S +7920 V +EP +%%Page: 16 19 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 16 -)S +840 V +900(the)S +1067(de\256ned)S +1423(line)S +1621(styles:)S +1020 V +11 B +1933(L_SOLID)S +11 R +2743(0)S +11 B +3293(L_DASHED)S +11 R +4132(1)S +1140 V +11 B +1933(L_DOTTED)S +11 R +2743(2)S +11 B +3293(L_DOTDASH)S +11 R +4132(3)S +1260 V +11 B +1933(L_HOLLOW)S +11 R +2743(4)S +11 B +3293(L_SHADOW)S +11 R +4132(5)S +1476 V +1175(The)S +11 I +1379(hollow)S +11 R +1714(line)S +1913(style)S +2155(is)S +2263(drawn)S +2571(with)S +2802(a)S +2885(linewidth)S +3336(of)S +3462(\256ve)S +3662(pixels,)S +3988(two)S +4188(pixels)S +4486(of)S +4612(color,)S +4900(a)S +4983(black)S +1596 V +900(line,)S +1132(and)S +1329(two)S +1533(pixels)S +1835(of)S +1965(color.)S +2290(It)S +2396(is)S +2509(best)S +2725(used)S +2965(when)S +3241(the)S +3414(marker)S +3761(will)S +3971(traverse)S +4354(extreme)S +4744(changes)S +5134(in)S +1716 V +900(brightness,)S +1414(due)S +1606(to)S +1726(the)S +1894(thickness)S +2337(of)S +2462(the)S +2630(line)S +2829(it)S +2925(may)S +3148(work)S +3407(best)S +3618(with)S +3848(larger)S +4137(frame)S +4426(bu)S +4536 H + (f)show 11 -.5 mul h (f)show +11 R +4603(ers.)S +4826(The)S +11 I +5031(sha-)S +1836 V +900(dow)S +11 R +1128(linestyle)S +1545(is)S +1663(drawn)S +1980(as)S +2115(two)S +2324(pixels)S +2631(of)S +2766(color)S +3035(and)S +3237(two)S +3445(pixels)S +3751(of)S +3885(black)S +4165(and)S +4366(should)S +4703(be)S +4849(used)S +5093(for)S +1956 V +900(similar)S +1240(brightness)S +1726(variations,)S +2221(however)S +2631(it)S +2727(e)S +2775 H + (f)show 11 -.5 mul h (f)show +11 R +2842(ectively)S +3223(shows)S +3532(up)S +3676(as)S +3802(a)S +3885(line)S +4085(only)S +4316(two)S +4516(pixels)S +4814(wide)S +5062(and)S +2076 V +900(may)S +1122(be)S +1258(preferred)S +1689(for)S +1849(medium)S +2243(or)S +2367(smaller)S +2723(frame)S +3010(bu)S +3120 H + (f)show 11 -.5 mul h (f)show +11 R +3187(ers.)S +2232 V +1175(The)S +1390(three)S +1654(dashed)S +2004(linestyles)S +2466(are)S +2644(drawn)S +2963(using)S +3248("gap")S +3542(spacings)S +3966(of)S +4103(5)S +4204(pixels)S +4513(in)S +4645(between)S +5055(line)S +2352 V +900(segments.)S +1405(Whether)S +1816(or)S +1942(not)S +2118(these)S +2378(gaps)S +2614(are)S +2781(resolved)S +3187(depends)S +3581(on)S +3726(the)S +3895(size)S +4100(of)S +4225(the)S +4393(frame)S +4681(bu)S +4791 H + (f)show 11 -.5 mul h (f)show +11 R +4858(er)S +4976(being)S +2472 V +900(used)S +1150(and)S +1358(the)S +1542(magni\256cation)S +2197(used)S +2448(in)S +2584(the)S +2768(display)S +3136(server.)S +3513(By)S +3692(default)S +4046(they)S +4285(should)S +4629(resolve)S +4995(com-)S +2592 V +900(pletely)S +1271(using)S +1582(frame)S +1908(bu)S +2018 H + (f)show 11 -.5 mul h (f)show +11 R +2085(ers)S +2284(up)S +2466(to)S +2624(1024x1024)S +3191(pixels,)S +3554(or)S +3717(magni\256cation)S +4393(factors)S +4761(displaying)S +2712 V +900(1024x1024)S +1428(pixels.)S +1785(If)S +1890(larger)S +2177(sizes)S +2423(are)S +2588(needed)S +2930(the)S +3097(image)S +3398(should)S +3725(be)S +3862(subsampled)S +4415(prior)S +4662(to)S +4782(display)S +5134(to)S +2832 V +900(maintain)S +1318(the)S +1485(marker)S +1827(resolution)S +2300(needed)S +2642(for)S +2802(these)S +3060(linestyles.)S +3192 V +11 B +900(5.8.)S +1132(Deleting)S +1555(Markers)S +3348 V +11 R +1175(When)S +1481(markers)S +1878(are)S +2055(drawn)S +2373(the)S +2552(underlying)S +3073(subraster)S +3514(is)S +3634(\256rst)S +3852(saved)S +4147(to)S +4279(an)S +4428(internal)S +4809(structure,)S +3468 V +900(erasure)S +1268(is)S +1396(done)S +1663(by)S +1827(simply)S +2181(redisplaying)S +2777(the)S +2964(saved)S +3266(raster.)S +3622(Problems)S +4091(can)S +4295(arise)S +4554(however)S +4983(when)S +3588 V +900(markers)S +1295(overlap;)S +1730(when)S +2010(deleting)S +2407(a)S +2498(marker)S +2850(that)S +3058(is)S +11 I +3175(under)S +11 R +3474(another)S +3845(marker)S +4198(the)S +4376(original)S +4762(pixels)S +5069(can)S +3708 V +900(overwrite)S +1372(the)S +1559(pixels)S +1875(of)S +2019(the)S +2206(marker)S +2568(on)S +2731(top.)S +2986(This)S +3235(is)S +3362(an)S +3517(unfortunate)S +4074(side)S +4303(e)S +4351 H + (f)show 11 -.5 mul h (f)show +11 R +4418(ect)S +4597(of)S +4740(the)S +4926(simple)S +3828 V +900(scheme)S +1268(used)S +1509(in)S +1635(this)S +1835(version)S +2198(of)S +2329(the)S +2503(package,)S +2928(users)S +3193(can)S +3384(call)S +3582(the)S +11 B +3757(cdl_redrawOverlay\(\))S +11 R +4784(procedure)S +3948 V +900(to)S +1019(help)S +1241(clean)S +1504(up)S +1647(any)S +1838(artifacts)S +2223(left)S +2402(behind.)S +4188 V +11 B +900(5.8.1.)S +1215(Individual)S +1742(Markers)S +4344 V +11 R +1175(The)S +11 B +1396(cdl_deleteMark\(\))S +11 R +2257(procedure)S +2745(is)S +2871(used)S +3124(to)S +3262(delete)S +3575(a)S +3675(single)S +3990(marker)S +4351(from)S +4616(the)S +4802(display\(\).)S +4464 V +900(The)S +1107(\()S +11 I +1143(x,y)S +11 R +1267(\))S +1340(argument)S +1791(is)S +1902(either)S +2188(the)S +2358(center)S +2660(position)S +3052(of)S +3179(the)S +3349(marker)S +3694(if)S +3797(that)S +3998(is)S +4108(know)S +4388(by)S +4534(the)S +4704(application,)S +4584 V +900(more)S +1162(typically)S +1584(it)S +1683(will)S +1893(be)S +2034(an)S +2175(approximate)S +2761(position.)S +3216(In)S +3345(the)S +3517(latter)S +3780(case)S +4005(the)S +4177(marker)S +4524(whose)S +4842(center)S +5146(is)S +4704 V +900(closest)S +1234(to)S +1355(this)S +1550(position)S +1941(will)S +2148(be)S +2286(deleted.)S +2698(For)S +2886(markers)S +3273(with)S +3504(no)S +3648(de\256ned)S +4005(center)S +4338(the)S +4506(distance)S +4899(used)S +5134(to)S +4824 V +900(decide)S +1220(if)S +1323(the)S +1493(marker)S +1838(should)S +2168(be)S +2307(deleted)S +2659(is)S +2769(the)S +2939(distance)S +3334(from)S +3583(the)S +3753(argument)S +4203(position)S +4595(to)S +4717(the)S +4887(edge)S +5129(of)S +4944 V +900(the)S +1075(marker.)S +1486(For)S +1680(example,)S +2120(distance)S +2520(from)S +2774(a)S +2863(box)S +3069(or)S +3201(polygon)S +3603(is)S +3718(measured)S +4177(as)S +4308(the)S +4482(distance)S +4881(from)S +5134(to)S +5064 V +900(one)S +1103(of)S +1239(the)S +1418(sides,)S +1711(for)S +1883(text)S +2093(it)S +2200(is)S +2319(the)S +2498(distance)S +2902(to)S +3033(the)S +3212(start)S +3446(of)S +3582(the)S +3761(text)S +3972(string.)S +4330(There)S +4630(is)S +4750(no)S +4906(way)S +5134(to)S +5184 V +11 I +900(un)S +11 R +1010(delete)S +1304(a)S +1385(marker)S +1727(other)S +1985(than)S +2207(to)S +2326(redraw)S +2661(it.)S +5364 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +5484 V +11 C +1175(int)S +1439(cdl_deleteMark)S +2429(\(CDLPtr)S +2957(cdl,)S +3287(int)S +3551(x,)S +3749(int)S +4013(y\))S +5724 V +11 B +900(5.8.2.)S +1215(The)S +1432(Entire)S +1764(Overlay)S +5880 V +11 R +1175(To)S +1337(erase)S +1600(all)S +1750(markers)S +2142(currently)S +2577(displayed)S +3039(use)S +3226(the)S +11 B +3401(cdl_clearOverlay\(\))S +11 R +4318(procedure.)S +4856(Markers)S +6000 V +900(are)S +1069(erased)S +1383(in)S +1505(the)S +1675(reverse)S +2025(order)S +2291(they)S +2516(were)S +2763(drawn)S +3072(to)S +3194(help)S +3419(reduce)S +3745(the)S +3915(chance)S +4253(that)S +4454(overlaying)S +4959(mark-)S +6120 V +900(ers)S +1060(will)S +1265(leave)S +1528(stray)S +1774(pixels.)S +6300 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +6420 V +11 C +1175(int)S +1439(cdl_clearOverlay)S +2561(\(CDLPtr)S +3089(cdl\))S +6660 V +11 B +900(5.9.)S +1132(Redraw)S +6816 V +11 R +1175(The)S +11 B +1389(cdl_redrawOverlay\(\))S +11 R +2419(procedure)S +2899(can)S +3094(be)S +3241(used)S +3486(to)S +3616(redraw)S +3963(all)S +4118(markers)S +4515(currently)S +4955(in)S +5086(the)S +6936 V +900(display)S +1271(list.)S +1520(This)S +1768(is)S +1894(sometimes)S +2417(needed)S +2778(when)S +3067(subraster)S +3514(I/O)S +3712(procedures)S +4243(are)S +4427(used)S +4680(to)S +4818(redisplay)S +7056 V +900(subregions)S +1409(and)S +1600(overwrite)S +2052(existing)S +2434(markers.)S +7236 V +900(Synopsis)S +11 Y1 +900(2)S +914(2222222)S +7920 V +EP +%%Page: 17 20 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 17 -)S +840 V +11 C +1175(int)S +1439(cdl_redrawOverlay)S +2627(\(CDLPtr)S +3155(cdl\))S +1080 V +11 B +900(6.)S +1049(ANSI)S +1345(C)S +1457(Function)S +1913(Prototypes)S +1236 V +11 R +1175(The)S +1387(current)S +1738(release)S +2082(of)S +2215(CDL)S +2477(provides)S +2897(full)S +3092(ANSI)S +3390(C)S +3506(function)S +3914(prototypes)S +4421(for)S +4591(all)S +4744(public)S +5062(and)S +1356 V +900(private)S +1244(procedures.)S +1824(By)S +1993(default)S +2337(these)S +2602(will)S +2814(not)S +2994(be)S +3136(used)S +3376(even)S +3621(on)S +3770(systems)S +4158(with)S +4393(native)S +4700(ANSI)S +4995(com-)S +1476 V +900(pilers,)S +1227(however.)S +1719(To)S +1896(make)S +2188(use)S +2389(of)S +2535(the)S +2724(CDL)S +3000(prototypes)S +3520(users)S +3801(will)S +4029(need)S +4291(to)S +4433(de\256ne)S +4757(the)S +4947(macro)S +1596 V +11 B +900(CDL_ANSIC)S +11 R +1566(either)S +1852(when)S +2126(compiling)S +2609(the)S +2779(program)S +3186(\(using)S +3497(the)S +3667(-D)S +3818(option)S +4136(to)S +4258(the)S +4428(compiler\),)S +4918(or)S +5045(as)S +5172(a)S +1716 V +900(de\256nition)S +1356(in)S +1475(the)S +1642(program)S +2046(source)S +2364(preceding)S +2828(the)S +2995('cdl.h')S +3317(include)S +3673(directive.)S +1872 V +1175(For)S +1361(example,)S +2052 V +11 C +1175(#define)S +1769(CDL_ANSIC)S +2172 V +1175(#include)S +1769("cdl.h")S +2292 V +1505(:)S +2412 V +1175(main)S +1505(\(int)S +1835(argc,)S +2231(char)S +2561(**argv\))S +2532 V +1505(:)S +2712 V +11 R +900(or)S +1024(when)S +1294(compiling)S +1774(using)S +2046(something)S +2538(like)S +2892 V +11 C +1175(cc)S +1373(-DCDL_ANSIC)S +2165(client.c)S +2759(libcdl.a)S +3353(-lm)S +3072 V +11 R +1175(Note)S +1424(that)S +1625(when)S +1898(using)S +2173(CDL_ANSIC)S +2814(to)S +2936(build)S +3199(the)S +3370(client)S +3651(program)S +4059(it)S +4158(is)S +4269(also)S +4483(required)S +4884(that)S +5086(the)S +3192 V +900(CDL)S +1163(itself)S +1426(be)S +1572(built)S +1818(in)S +1946(the)S +2122(same)S +2389(way)S +2613(to)S +2741(avoid)S +3027(confusing)S +3502(FPE)S +3735(errors.)S +4092(Similarly,)S +4573(when)S +4852(building)S +3312 V +900(client)S +1178(tasks)S +1432(that)S +11 I +1631(do)S +1775(not)S +11 R +1950(use)S +2130(CDL_ANSIC)S +2769(you)S +2968(must)S +3217(use)S +3397(a)S +3479(version)S +3836(of)S +3961(the)S +4130(library)S +4457(that)S +4657(has)S +4838(not)S +5014(been)S +3432 V +900(compiled)S +1342(with)S +1571(prototypes.)S +3588 V +1175(The)S +1378(reason)S +1696(is)S +1803(that)S +2001(the)S +2168(\257oat)S +2397(args)S +2612(to)S +2731(the)S +2898(CDL)S +3151(procedures)S +3663(in)S +3782(the)S +3949(library,)S +4302(or)S +4426(in)S +4545(your)S +4780(task)S +4991(calls,)S +3708 V +900(are)S +1071(promoted)S +1531(to)S +1656(doubles)S +2037(when)S +2313(compiling)S +2799(those)S +3070(procedures,)S +3616(but)S +3796(may)S +4023(only)S +4257(be)S +4398(passed)S +4728(as)S +4857(\257oats)S +5134(in)S +3828 V +900(your)S +1134(code)S +1373(\(or)S +1533(as)S +1657(double)S +1989(where)S +2288(the)S +2455(CDL)S +2709(is)S +2817(expecting)S +3277(\257oat\).)S +3571(This)S +3801(means)S +4115(the)S +4283(argument)S +4731(stack)S +4990(is)S +5098(o)S +5153 H + (f)show 11 -.5 mul h (f)show +11 R +3948 V +900(by)S +1045(4)S +1135(bytes)S +1402(for)S +1564(each)S +1798(\257oat)S +2029(arg)S +2203(and)S +2396(the)S +2565(values)S +2880(interpreted)S +3389(by)S +3534(the)S +3703(CDL)S +3958(procedure)S +4429(will)S +4636(be)S +4773(corrupted.)S +4068 V +900(If)S +1031(you're)S +1376(going)S +1687(to)S +1833(use)S +2039(the)S +2233(prototypes)S +2757(you'll)S +3080(need)S +3346(to)S +3492(edit)S +3717(the)S +3911(CDL)S +4191(Imake\256le)S +4665(to)S +4811(de\256ne)S +5139("-)S +4188 V +900(DCDL_ANSIC")S +1665(in)S +1787(the)S +1957(EXTRA_DEFINES)S +2865(so)S +2998(it)S +3095(will)S +3302(use)S +3483(the)S +3652(prototypes)S +4151(and)S +4344(everything)S +4848(will)S +5055(line)S +4308 V +900(up.)S +1104(You)S +1326(will)S +1531(then)S +1753(need)S +1992(to)S +2111(rebuild)S +2455(the)S +2622(libcdl.a)S +2982(as)S +3106(well)S +3328(as)S +3452(relink)S +3741(your)S +3975(program.)S +4548 V +11 B +900(7.)S +1049(Fortran)S +1453(Language)S +1952(Binding)S +2362(Notes)S +4704 V +11 R +1175(The)S +1396(Fortran)S +1770(language)S +2216(binding)S +2604(routines)S +3009(are)S +3193(implemented)S +3819(in)S +3957(C)S +4083(but)S +4276(should)S +4622(be)S +4777(accessible)S +4824 V +900(from)S +1155(any)S +1355(fortran)S +1694(program)S +2107(as)S +2240(though)S +2588(they)S +2819(were)S +3072(real)S +3277(fortran)S +3616(subroutines.)S +4226(The)S +4437(calling)S +4777(sequences)S +4944 V +900(are)S +1065(the)S +1232(same)S +1490(as)S +1614(with)S +1843(the)S +2010(C)S +2117(library)S +2442(routines)S +2829(with)S +3058(the)S +3225(following)S +3686(exceptions:)S +5100 V +11 Y1 +1150(d)S +11 R +1289(The)S +1500(CDL)S +1761(package)S +2159(pointer)S +2511(is)S +2626(maintained)S +3155(internally)S +3617(so)S +3756(no)S +3907('cdl')S +4155(pointer)S +4508(is)S +4624(passed)S +4958(in)S +5086(the)S +5220 V +1150(fortran)S +1480(interface.)S +5376 V +11 Y1 +1150(d)S +11 R +1289(All)S +1471(routines)S +1866(which)S +2175(are)S +2348(integer)S +2693(procedures)S +3213(in)S +3340(the)S +3515(C)S +3630(interface)S +4053(return)S +4356(an)S +4501(extra)S +4761('ier')S +4990(argu-)S +5496 V +1150(ment)S +1403(to)S +1522(contain)S +1878(the)S +2045(error)S +2289(\257ag.)S +2548(All)S +2722(Fortran)S +3078(functions)S +3520(are)S +3685(implemented)S +4292(as)S +4416(subroutines.)S +5652 V +11 Y1 +1150(d)S +11 R +1281(The)S +1485(procedure)S +1955(names)S +2269(are)S +2435(the)S +2603(same)S +2862(except)S +3181(that)S +11 I +3380(cdl_)S +11 R +3603(has)S +3783(been)S +4023(replaced)S +4426(with)S +11 I +4656(cf)S +11 R +4769(in)S +4889(the)S +5057(for-)S +5772 V +1150(tran)S +1353(binding.)S +1784(If)S +1889(your)S +2123(compiler)S +2546(is)S +2653(case-sensitive)S +3294(then)S +3516(use)S +3695(all)S +3838(lower)S +4120(case)S +4340(letters.)S +5928 V +900(The)S +1117(binding)S +1501(has)S +1695(been)S +1949(tested)S +2253(on)S +2411(a)S +2507(number)S +2890(of)S +3029(di)S +3115 H + (f)show 11 -.5 mul h (f)show +11 R +3182(erent)S +3448(platforms)S +3917(without)S +4302(problems.)S +4820(The)S +5038(pro-)S +6048 V +900(cedure)S +1243(names)S +1576(haven't)S +1957(been)S +2216(restricted)S +2676(to)S +2815(the)S +3002(traditional)S +3506(6-character)S +4047(fortran)S +4396(names)S +4728(since)S +5005(most)S +6168 V +900(modern)S +1278(compilers)S +1754(can)S +1948(handle)S +2283(longer)S +2606(names,)S +2957(if)S +3067(yours)S +3354(isn't)S +3593(one)S +3794(of)S +3929(them)S +4193(contact)S +11 I +4553(iraf@noao.edu)S +6288 V +11 R +900(for)S +1060(help)S +1282(in)S +1401(changing)S +1836(the)S +2003(names.)S +6444 V +1175(Since)S +1456(the)S +1627(CDL)S +1884(is)S +1995(implemented)S +2606(as)S +2734(a)S +2819(set)S +2978(of)S +3106(C)S +3217(routines,)S +3637(the)S +3809(one)S +4005(aspect)S +4316(that)S +4519(cannot)S +4849(be)S +4990(over-)S +6564 V +900(looked)S +1245(in)S +1377(the)S +1557(fortran)S +1900(binding)S +2283(is)S +2403(the)S +2583(between)S +2993(Fortran)S +3362(and)S +3566(C)S +3686(storage)S +4048(order)S +4324(for)S +4497(arrays.)S +4869(In)S +5005(most)S +6684 V +900(cases)S +1166(this)S +1362(will)S +1570(not)S +1747(be)S +1886(a)S +1970(problem)S +2372(since)S +2633(the)S +2803(CDL)S +3059(routines)S +3449(are)S +3617(just)S +3813(passing)S +4179(around)S +4519(pointers)S +4910(even)S +5153(if)S +6804 V +900(they)S +1136(live)S +1348(for)S +1522(a)S +1617(short)S +1884(while)S +2174(in)S +2306(a)S +2400(fortran)S +2743(program.)S +3221(The)S +3437(problem)S +3849(comes)S +4175(when)S +4458(using)S +4743(the)S +4923(fortran)S +6924 V +900(program)S +1313(to)S +1441(read)S +1670(the)S +1846(arrays,)S +2183(for)S +2353(example)S +2767(in)S +2896(using)S +3178(the)S +3355(array)S +3621(returned)S +4028(by)S +4181(the)S +11 B +4358(cfreadIRAF\(\))S +11 R +5038(pro-)S +7044 V +900(cedure,)S +1254(or)S +1381(when)S +1654(passing)S +2020(in)S +2142(arrays)S +2444(for)S +2607(display)S +2961(that)S +3162(originated)S +3643(in)S +3765(the)S +3935(user's)S +4232(fortran)S +4565(code.)S +4868(In)S +4995(these)S +7164 V +900(cases)S +1179(the)S +1362(array)S +11 B +1634(must)S +11 R +1915(be)S +2067(transposed)S +2585(to)S +2720(be)S +2872(interpreted)S +3395(correctly.)S +3893(It)S +4009(was)S +4228(assumed)S +4655(that)S +4869(in)S +5005(most)S +7284 V +900(applications)S +1481(arrays)S +1797(returned)S +2211(by)S +2371(CDL)S +2641(procedures)S +3170(would)S +3495(be)S +3648(immediately)S +4248(passed)S +4590(to)S +4726(other)S +5000(CDL)S +7920 V +EP +%%Page: 18 21 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 18 -)S +840 V +900(procedures)S +1415(so)S +1549(having)S +1885(the)S +2056(binding)S +2430(routines)S +2821(transpose)S +3272(the)S +3443(array)S +3703(to/from)S +4070(Fortran)S +4430(storage)S +4783(order)S +5050(was)S +960 V +900(unnecessarily)S +1529(ine)S +1663 H + (f)show 11 -.5 mul h (\256)show +11 R +1755(cient.)S +2062(This)S +2291(may)S +2513(be)S +2649(changed)S +3046(in)S +3165(later)S +3392(releases)S +3770(if)S +3870(required.)S +1320 V +11 B +900(8.)S +1049(SPP)S +1278(Language)S +1777(Binding)S +2187(Notes)S +1476 V +11 R +1175(The)S +1390(SPP)S +1621(language)S +2061(binding)S +2443(is)S +2562(experimental)S +3179(and)S +3382(is)S +3501(intended)S +3924(to)S +4055(provide)S +4436(a)S +4530(way)S +4758(to)S +4890(quickly)S +1596 V +900(prototype)S +1356(tasks,)S +1639(it)S +1736(should)S +2065(not)S +2241(be)S +2379(used)S +2615(in)S +2736(production)S +3247(code)S +3488(as)S +3614(it)S +3711(may)S +3935(not)S +4111(be)S +4249(as)S +4375(portable)S +4769(as)S +4894(the)S +5062(rest)S +1716 V +900(of)S +1033(the)S +1209(task.)S +1489(In)S +1622(essence)S +1997(this)S +2200(binding)S +2580(is)S +2697(a)S +2788(layer)S +3049(on)S +3202(top)S +3386(of)S +3520(the)S +3697(Fortran)S +4063(binding)S +4443(since)S +4711(most)S +4969(IRAF)S +1836 V +900(platforms)S +1357(still)S +1560(use)S +1742(Fortran)S +2101(as)S +2228(the)S +2398(intermediate)S +2982(code.)S +3285(The)S +3490(calling)S +3824(sequences)S +4302(are)S +4469(the)S +4638(same)S +4898(as)S +5024(with)S +1956 V +900(the)S +1067(Fortran)S +1423(library)S +1748(routines)S +2135(with)S +2364(the)S +2531(following)S +2992(caveats:)S +2112 V +11 Y1 +1150(d)S +11 R +1290(The)S +1502('cdlspp.h')S +1986(SPP)S +2214(include)S +2579(\256le)S +2762(is)S +2878(required)S +3284(by)S +3437(all)S +3590(\256les)S +3817(which)S +4128(call)S +4329(CDL)S +4592(routines.)S +5050(The)S +2232 V +1150(binding)S +1535(names)S +1863(are)S +2043(actually)S +2438(SPP)S +2672(macros)S +3036(to)S +3170(resolve)S +3534(the)S +3716(current)S +4073(6)S +4176(character)S +4622(limit)S +4880(on)S +5038(pro-)S +2352 V +1150(cedure)S +1473(names.)S +2508 V +11 Y1 +1150(d)S +11 R +1287(All)S +1467(character)S +1904(string)S +2194(arguments)S +2690(must)S +2944(be)S +3086(dimensioned)S +3687(to)S +3812(at)S +3930(least)S +4170(SZ_FNAME)S +4779(characters)S +2628 V +1150(in)S +1269(length.)S +2784 V +11 Y1 +1150(d)S +11 R +1289(The)S +1500(CDL)S +1761(package)S +2159(pointer)S +2511(is)S +2626(maintained)S +3155(internally)S +3617(so)S +3756(no)S +3907('cdl')S +4155(pointer)S +4508(is)S +4624(passed)S +4958(in)S +5086(the)S +2904 V +1150(fortran)S +1480(interface.)S +3060 V +11 Y1 +1150(d)S +11 R +1289(All)S +1471(routines)S +1866(which)S +2175(are)S +2348(integer)S +2693(procedures)S +3213(in)S +3340(the)S +3515(C)S +3630(interface)S +4053(return)S +4356(an)S +4501(extra)S +4761('ier')S +4990(argu-)S +3180 V +1150(ment)S +1403(to)S +1522(contain)S +1878(the)S +2045(error)S +2289(\257ag.)S +2548(All)S +2722(SPP)S +2941(functions)S +3383(are)S +3548(implemented)S +4155(as)S +4279(subroutines.)S +3336 V +11 Y1 +1150(d)S +11 R +1293(On)S +1472(HPUX)S +1816(or)S +1952(IBM)S +2205(RS6000)S +2606(systems)S +3001(the)S +3181('cdlspp.h')S +3669(\256le)S +3856(must)S +4117(be)S +4266(edited)S +4580(to)S +4712(remove)S +5086(the)S +3456 V +1150(trailing)S +1507(underscores)S +2068(from)S +2320(the)S +2493(procedure)S +2968(name)S +3244(macros.)S +3659(This)S +3893(is)S +4005(because)S +4388(on)S +4536(these)S +4799(platforms)S +3576 V +1150(the)S +1319(fortran)S +1652(compiler)S +2078(will)S +2286(not)S +2463(append)S +2815(an)S +2954(underscore)S +3469(to)S +3591(the)S +3761(SPP)S +3983(symbols)S +4387(as)S +4514(it)S +4612(does)S +4849(on)S +4995(other)S +3696 V +1150(platforms.)S +4056 V +11 B +900(9.)S +1049(IIS)S +1230(Protocol)S +1658(Description)S +4212 V +11 R +1175(The)S +1383(communications)S +2148(protocol)S +2552(used)S +2791(by)S +2939(the)S +3111(CDL)S +3369(and)S +3565(servers)S +3913(such)S +4153(as)S +11 I +4283(XImtool)S +11 R +4676(and)S +11 I +4873(SAOim-)S +4332 V +900(age)S +11 R +1058(,)S +1121(is)S +1230(a)S +1313(slightly)S +1679(modi\256ed)S +2105(version)S +2462(of)S +2587(that)S +2786(used)S +3021(by)S +3165(the)S +3333(IIS)S +3501(Model)S +3822(70.)S +4027(All)S +4202(operations)S +4693(are)S +4859(initiated)S +4452 V +900(by)S +1051(sending)S +1434(a)S +1523(header)S +1855(packet)S +2182(containing)S +2688(a)S +11 I +2778(thing)S +3047(id)S +11 R +3175(\(tid\))S +3406(and)S +11 I +3606(subunit)S +11 R +3973(selecting)S +4405(the)S +4581(function)S +4989(to)S +5117(be)S +4572 V +900(performed,)S +1429(optionally)S +1922(followed)S +2358(by)S +2514(data)S +2742(up)S +2897(to)S +3028(32K)S +3262(bytes)S +3539(long.)S +3841(The)S +4056(IIS)S +4235(header)S +4570(packet)S +4900(used)S +5146(is)S +4692 V +900(de\256ned)S +1256(as)S +4812 V +11 C +1450(struct)S +1978(iism70)S +2440({)S +4932 V +1725(short)S +2253(tid;)S +5052 V +1725(short)S +2253(thingct;)S +5172 V +1725(short)S +2253(subunit;)S +5292 V +1725(short)S +2253(checksum;)S +5412 V +1725(short)S +2253(x,)S +2451(y,)S +2649(z;)S +5532 V +1725(short)S +2253(t;)S +5652 V +1450(};)S +5892 V +11 R +900(The)S +11 I +1109(thing)S +1375(count)S +11 R +1658(\256eld)S +1893(contains)S +2299(the)S +2473(negative)S +2884(number)S +3259(of)S +3390(bytes)S +3662(of)S +3793(data)S +4015(that)S +4220(will)S +4432(be)S +4575(sent)S +4792(following)S +6012 V +900(the)S +1067(header)S +1390(packet.)S +1769(The)S +1972(IIS)S +2139(header)S +2462(checksum)S +2933(is)S +3040(computed)S +3506(as)S +6252 V +11 C +1164(checksum)S +1758(=)S +1890(0177777)S +2418(-)S +2550(\(tid)S +2880(+)S +3012(subunit)S +3540(+)S +3672(thingct)S +4200(+)S +4332(x)S +4464(+)S +4596(y)S +4728(+)S +4860(z)S +4992(+)S +5124(t\);)S +6492 V +11 R +900(The)S +1112(four)S +1336(IIS)S +1512(registers)S +1925(are)S +2099(set)S +2263(di)S +2349 H + (f)show 11 -.5 mul h (f)show +11 R +2416(erently)S +2762(depending)S +3261(on)S +3414(the)S +3591(operation,)S +4076(a)S +4167(summary)S +4619(of)S +4753(the)S +4930(header)S +6612 V +900(packets)S +1261(for)S +1421(each)S +1653(operation)S +2100(is)S +2207(summarized)S +2776(below.)S +7920 V +EP +%%Page: 19 22 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 19 -)S +840 V +11 B +2373(IIS)S +2554(Header)S +2934(Packet)S +3283(Summary)S +1020 V +11 R +2296(TID)S +3291(Subunit)S +4061(Tct)S +4394(X)S +4638(Y)S +4933(Z)S +5268(T)S +5575(Data)S +1030 V +11 Y1 +1805(2)S +1845(2222222222222222222222222222222222222222222222222222222222222222222222222)S +1150 V +11 R +900(Read)S +1158(Data)S +1887(IIS_READ)S +11 B +2375(|)S +11 R +2399(PACKED)S +3052(MEMORY)S +4040(-NB)S +4406(x)S +4650(y)S +4882(fr)S +5217(-)S +5552(NB)S +1270 V +900(Write)S +1182(Data)S +1887(IIS_WRITE)S +11 B +2423(|)S +11 R +2447(PACKED)S +3052(MEMORY)S +4040(-NB)S +4406(x)S +4650(y)S +4882(fr)S +5217(-)S +5552(NB)S +1390 V +900(Read)S +1158(Cursor)S +1887(IIS_READ)S +3052(IMCURSOR)S +4116(-)S +4415(-)S +4659(-)S +4882(-)S +5217(-)S +5552(-)S +1510 V +900(Write)S +1182(Cursor)S +1887(IIS_WRITE)S +3052(IMCURSOR)S +4116(-)S +4406(x)S +4650(y)S +4882(wcs)S +5217(-)S +5552(-)S +1630 V +900(Set)S +1074(Frame)S +1887(IIS_WRITE)S +3052(LUT)S +11 B +3265(|)S +11 R +3289(COMMAND)S +4089(-1)S +4415(-)S +4659(-)S +4882(-)S +5217(-)S +5552(2)S +1750 V +900(Erase)S +1175(Frame)S +1887(IIS_WRITE)S +11 B +2456(|)S +11 R +2513(fb)S +3052(FEEDBACK)S +4116(-)S +4415(-)S +4659(-)S +4882(fr)S +5217(-)S +5552(-)S +1990 V +900(Old)S +1098(Write)S +1380(WCS)S +1887(IIS_WRITE)S +11 B +2423(|)S +11 R +2447(PACKED)S +3052(WCS)S +4077(-N)S +4415(-)S +4659(-)S +4882(fr)S +5217(fb)S +5552(320)S +2110 V +900(Old)S +1098(Read)S +1356(WCS)S +1887(IIS_READ)S +3052(WCS)S +4116(-)S +4415(-)S +4659(-)S +4882(fr)S +5217(wcs)S +5552(320)S +2350 V +900(WCS)S +1172(Version?)S +1887(IIS_READ)S +3052(WCS)S +4116(-)S +4406(1)S +4650(1)S +4882(-)S +5217(-)S +5552(320)S +2470 V +900(WCS)S +1172(by)S +1315(Number?)S +1887(IIS_READ)S +3052(WCS)S +4116(-)S +4406(1)S +4659(-)S +4882(fr)S +5217(wcs)S +5552(1024)S +2590 V +900(New)S +1139(Write)S +1421(WCS)S +1887(IIS_WRITE)S +11 B +2423(|)S +11 R +2447(PACKED)S +3052(WCS)S +4077(-N)S +4406(1)S +4659(-)S +4882(fr)S +5217(fb)S +5552(1024)S +2710 V +900(New)S +1139(Read)S +1397(WCS)S +1887(IIS_READ)S +3052(WCS)S +4116(-)S +4406(1)S +4659(-)S +4882(fr)S +5217(wcs)S +5552(1024)S +2720 V +11 Y1 +1805(2)S +1845(2222222222222222222222222222222222222222222222222222222222222222222222222)S +1804(1)S +2680 V +1804(1)S +2570 V +1804(1)S +2460 V +1804(1)S +2350 V +1804(1)S +2240 V +1804(1)S +2130 V +1804(1)S +2020 V +1804(1)S +1910 V +1804(1)S +1800 V +1804(1)S +1690 V +1804(1)S +1580 V +1804(1)S +1470 V +1804(1)S +1360 V +1804(1)S +1250 V +1804(1)S +1140 V +1804(1)S +2720 V +2969(1)S +2680 V +2969(1)S +2570 V +2969(1)S +2460 V +2969(1)S +2350 V +2969(1)S +2240 V +2969(1)S +2130 V +2969(1)S +2020 V +2969(1)S +1910 V +2969(1)S +1800 V +2969(1)S +1690 V +2969(1)S +1580 V +2969(1)S +1470 V +2969(1)S +1360 V +2969(1)S +1250 V +2969(1)S +1140 V +2969(1)S +2720 V +3957(1)S +2680 V +3957(1)S +2570 V +3957(1)S +2460 V +3957(1)S +2350 V +3957(1)S +2240 V +3957(1)S +2130 V +3957(1)S +2020 V +3957(1)S +1910 V +3957(1)S +1800 V +3957(1)S +1690 V +3957(1)S +1580 V +3957(1)S +1470 V +3957(1)S +1360 V +3957(1)S +1250 V +3957(1)S +1140 V +3957(1)S +2720 V +4311(1)S +2680 V +4311(1)S +2570 V +4311(1)S +2460 V +4311(1)S +2350 V +4311(1)S +2240 V +4311(1)S +2130 V +4311(1)S +2020 V +4311(1)S +1910 V +4311(1)S +1800 V +4311(1)S +1690 V +4311(1)S +1580 V +4311(1)S +1470 V +4311(1)S +1360 V +4311(1)S +1250 V +4311(1)S +1140 V +4311(1)S +2720 V +4555(1)S +2680 V +4555(1)S +2570 V +4555(1)S +2460 V +4555(1)S +2350 V +4555(1)S +2240 V +4555(1)S +2130 V +4555(1)S +2020 V +4555(1)S +1910 V +4555(1)S +1800 V +4555(1)S +1690 V +4555(1)S +1580 V +4555(1)S +1470 V +4555(1)S +1360 V +4555(1)S +1250 V +4555(1)S +1140 V +4555(1)S +2720 V +4799(1)S +2680 V +4799(1)S +2570 V +4799(1)S +2460 V +4799(1)S +2350 V +4799(1)S +2240 V +4799(1)S +2130 V +4799(1)S +2020 V +4799(1)S +1910 V +4799(1)S +1800 V +4799(1)S +1690 V +4799(1)S +1580 V +4799(1)S +1470 V +4799(1)S +1360 V +4799(1)S +1250 V +4799(1)S +1140 V +4799(1)S +2720 V +5134(1)S +2680 V +5134(1)S +2570 V +5134(1)S +2460 V +5134(1)S +2350 V +5134(1)S +2240 V +5134(1)S +2130 V +5134(1)S +2020 V +5134(1)S +1910 V +5134(1)S +1800 V +5134(1)S +1690 V +5134(1)S +1580 V +5134(1)S +1470 V +5134(1)S +1360 V +5134(1)S +1250 V +5134(1)S +1140 V +5134(1)S +2720 V +5469(1)S +2680 V +5469(1)S +2570 V +5469(1)S +2460 V +5469(1)S +2350 V +5469(1)S +2240 V +5469(1)S +2130 V +5469(1)S +2020 V +5469(1)S +1910 V +5469(1)S +1800 V +5469(1)S +1690 V +5469(1)S +1580 V +5469(1)S +1470 V +5469(1)S +1360 V +5469(1)S +1250 V +5469(1)S +1140 V +5469(1)S +2720 V +5860(1)S +2680 V +5860(1)S +2570 V +5860(1)S +2460 V +5860(1)S +2350 V +5860(1)S +2240 V +5860(1)S +2130 V +5860(1)S +2020 V +5860(1)S +1910 V +5860(1)S +1800 V +5860(1)S +1690 V +5860(1)S +1580 V +5860(1)S +1470 V +5860(1)S +1360 V +5860(1)S +1250 V +5860(1)S +1140 V +5860(1)S +2960 V +11 R +900(Where)S +1355(NB)S +2218(=)S +2313(number)S +2681(of)S +2805(bytes)S +3070(expected)S +3491(or)S +3615(written)S +3080 V +1355(x)S +2218(=)S +2313(x)S +2401(position)S +2790(of)S +2914(operation)S +3361(in)S +3480(frame)S +3767(bu)S +3877 H + (f)show 11 -.5 mul h (f)show +11 R +3944(er)S +4061(coords)S +3200 V +1355(y)S +2218(=)S +2313(y)S +2401(position)S +2790(of)S +2914(operation)S +3361(in)S +3480(frame)S +3767(bu)S +3877 H + (f)show 11 -.5 mul h (f)show +11 R +3944(er)S +4061(coords)S +3320 V +1355(fr)S +2218(=)S +2313(frame)S +2600(number)S +2968(\(passed)S +3329(as)S +3453(bit\257ag)S +3768(\(i.e.)S +3972(1,)S +4088(2)S +4176(,4)S +4292(8,)S +4408(etc\))S +3440 V +1355(fb)S +2218(=)S +2313(frame)S +2600(bu)S +2710 H + (f)show 11 -.5 mul h (f)show +11 R +2777(er)S +2894(con\256g)S +3202(number)S +3570(\(zero)S +3826(indexed\))S +3560 V +1355(N)S +2218(=)S +2313(length)S +2621(of)S +2745(WCS)S +3017(string)S +3680 V +1355(wcs)S +2218(=)S +2313(WCS)S +2585(number)S +2953(\(usually)S +3340(zero\))S +3800 V +1355(Data)S +2218(=)S +2313(the)S +2480(number)S +2848(of)S +2972(bytes)S +3237(of)S +3361(data)S +3576(to)S +3695(be)S +3831(read)S +4051(or)S +4175(written)S +4519(following)S +4980(the)S +5147(header)S +5470(packet.)S +4040 V +1355(IIS_WRITE)S +2251(=)S +2346(0400000)S +4160 V +1355(IIS_READ)S +2251(=)S +2346(0100000)S +4280 V +1355(COMMAND)S +2251(=)S +2346(0100000)S +4400 V +1355(PACKED)S +2251(=)S +2346(0040000)S +4520 V +1355(IMC_SAMPLE)S +2251(=)S +2346(0040000)S +4760 V +1355(MEMORY)S +2251(=)S +2346(001)S +4880 V +1355(LUT)S +2251(=)S +2346(002)S +5000 V +1355(FEEDBACK)S +2251(=)S +2346(005)S +5120 V +1355(IMCURSOR)S +2251(=)S +2346(020)S +5240 V +1355(WCS)S +2251(=)S +2346(021)S +5456 V +900(TID)S +1119(\256elds)S +1395(can)S +1583(be)S +1723(logically)S +2145(OR'd)S +2426(with)S +2659(the)S +2830(PACKED)S +3307(\257ag)S +3509(indicating)S +3986(the)S +4157(number)S +4529(of)S +4657(data)S +4876(bytes)S +5146(is)S +5576 V +900(exactly)S +11 I +1252(thingct)S +11 R +1594(bytes)S +1862(long,)S +2122(otherwise)S +11 I +2584(thingct)S +11 R +2926(must)S +3177(be)S +3316(speci\256ed)S +3742(as)S +3869(half)S +4075(the)S +4245(number)S +4616(of)S +4743(data)S +4960(bytes.)S +5696 V +900(In)S +1028(a)S +1113(cursor)S +1423(read,)S +1675(if)S +1779(the)S +1951(IIS_READ)S +2477(\257ag)S +2680(is)S +2792(OR'd)S +3074(with)S +3308(IMC_SAMPLE)S +4044(the)S +4216(logical)S +4553(cursor)S +4864(position)S +5816 V +900(\(i.e.)S +1153(the)S +1336(last)S +1538(value)S +1824(read)S +2060(or)S +2200(set\))S +2407(is)S +2530(returned)S +2943(immediately,)S +3570(otherwise)S +4044(the)S +4226(server)S +4540(will)S +4760(wait)S +4997(for)S +5172(a)S +5936 V +900(keystroke)S +1366(to)S +1492(be)S +1635(hit)S +1792(before)S +2110(returning)S +2552(a)S +2640(string)S +2932(containing)S +3437(the)S +3612(\(x,y\))S +3863(position,)S +4288(wcs)S +4499(of)S +4631(the)S +4806(read,)S +5062(and)S +6056 V +900(the)S +1072(keystroke.)S +1597(When)S +1896(setting)S +2228(the)S +2400(frame)S +2692(you)S +2895(must)S +3148(send)S +3387(a)S +3473(short)S +3731(integer)S +4072(in)S +4195(the)S +4366(data)S +4585(containing)S +5086(the)S +6176 V +900(frame)S +1187(selected.)S +6536 V +11 B +900(10.)S +1104(VXIMTOOL)S +1761(Proxy/Display)S +2461(Server)S +2803(Usage)S +6692 V +11 I +900(VXIMTOOL)S +11 R +1481(is)S +1593(a)S +1679(image)S +1986(display)S +2343(server)S +2648(process)S +3015(much)S +3298(like)S +11 I +3502(XIMTOOL)S +11 R +3978(,)S +4045(except)S +4369(that)S +4573(all)S +4722(it)S +4823(normally)S +6812 V +900(does)S +1139(is)S +1251(respond)S +1636(to)S +1760(datastream)S +2272(requests)S +2669(to)S +2793(read)S +3018(and)S +3214(write)S +3477(to)S +3600(internal)S +3972(frame)S +4263(bu)S +4373 H + (f)show 11 -.5 mul h (f)show +11 R +4440(ers)S +4604(maintained)S +5129(as)S +6932 V +900(arrays)S +1201(in)S +1322(memory.)S +1784(Multiple)S +2199(frame)S +2488(bu)S +2598 H + (f)show 11 -.5 mul h (f)show +11 R +2665(ers)S +2827(and)S +3020(frame)S +3309(bu)S +3419 H + (f)show 11 -.5 mul h (f)show +11 R +3486(er)S +3605(con\256gurations)S +4269(are)S +4436(supported.)S +4966(It)S +5069(can)S +7052 V +900(be)S +1038(used)S +1274(to)S +1395(debug)S +1698(CDL)S +1953(programs)S +2402(by)S +2547(printing)S +2931(out)S +3107(the)S +3276(protocol)S +3677(packets)S +4040(received,)S +4472(or)S +4597(can)S +4782(simply)S +5117(be)S +7172 V +900(used)S +1148(as)S +1286(a)S +1381(dummy)S +1766(server)S +2080(in)S +2214(cases)S +2492(where)S +2806(no)S +2964(image)S +3280(display)S +3646(is)S +3768(really)S +4065(needed.)S +4483(By)S +4660(enabling)S +5086(the)S +7292 V +11 I +900(-proxy)S +11 R +1219(\257ag)S +1418(the)S +1585(server)S +1884(can)S +2068(also)S +2278(be)S +2414(used)S +2648(to)S +2767(repeat)S +3066(the)S +3233(datastream)S +3740(requests)S +4132(to)S +4251(a)S +4332(list)S +4501(of)S +4625(other)S +4883(servers,)S +7920 V +EP +%%Page: 20 23 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 20 -)S +840 V +900(e)S +948 H + (f)show 11 -.5 mul h (f)show +11 R +1015(ectively)S +1399(splitting)S +1799(the)S +1970(image)S +2275(display)S +2630(to)S +2753(a)S +2838(number)S +3210(of)S +3338(other)S +3600(servers.)S +4007(See)S +4202(the)S +11 I +4373(vximtool)S +11 R +4788(man)S +5014(page)S +960 V +900(for)S +1060(details)S +1380(on)S +1523(other)S +1781(command-line)S +2448(arguments)S +2938(and)S +3129(usage.)S +1116 V +900(The)S +1116(program)S +1533(was)S +1749(originally)S +2223(intended)S +2647(as)S +2785(a)S +2880(debugging)S +3391(tool,)S +3638(either)S +3934(in)S +4067(the)S +4248(development)S +4862(of)S +5000(CDL)S +1236 V +900(clients)S +1233(directly)S +1614(or)S +1751(in)S +1883(cases)S +2159(where)S +2471(the)S +2651(display)S +3015(may)S +3249(need)S +3500(to)S +3631(go)S +3786(to)S +3917(separate)S +4319(screens)S +4685(as)S +4821(part)S +5036(of)S +5172(a)S +1356 V +900(larger)S +1207(project.)S +1625(For)S +1832(example,)S +2285(engineers)S +2758(may)S +3001(wish)S +3263(to)S +3403("eavesdrop")S +3990(on)S +4154(the)S +4342(system)S +4702(by)S +4866(viewing)S +1476 V +900(images)S +1249(displayed)S +1708(by)S +1856(CDL)S +2114(clients)S +2439(used)S +2678(as)S +2807(part)S +3015(of)S +3144(a)S +3230(data)S +3449(acquisition)S +3969(system.)S +4373(It)S +4477(can)S +4665(also)S +4879(be)S +5019(used)S +1596 V +900(as)S +1036(a)S +1129(memory-only)S +1772(display)S +2135(server)S +2446(for)S +2618(CDL)S +2883(clients)S +3215(which)S +3529(need)S +3781(to)S +3913(be)S +4062(run)S +4254(in)S +4386(the)S +4566(background)S +5129(as)S +1716 V +900(part)S +1103(of)S +1227(a)S +1308(pipeline)S +1695(processing)S +2197(system)S +2536(requiring)S +2971(a)S +3052(frame)S +3339(bu)S +3449 H + (f)show 11 -.5 mul h (f)show +11 R +3516(er)S +3633(for)S +3793(image)S +4094(marking.)S +1872 V +900(In)S +1031(proxy)S +1327(mode)S +1611(the)S +1785(program)S +2197(acts)S +2408(as)S +2540(a)S +2629(relay)S +2888(for)S +3056(the)S +3231(IIS)S +3406(datastream)S +3921(packets,)S +4318(sending)S +4701(image)S +5010(data,)S +1992 V +900(frame)S +1188(requests,)S +1609(etc.)S +1798(to)S +1918(a)S +2000(list)S +2169(of)S +2293(other)S +2551(servers)S +2893(speci\256ed)S +3316(on)S +3459(the)S +3626(command)S +4092(line.)S +4351(The)S +4554(e)S +4602 H + (f)show 11 -.5 mul h (f)show +11 R +4669(ect)S +4829(of)S +4953(this)S +5146(is)S +2112 V +900(to)S +1027(allow)S +1312(a)S +1402(client)S +1688(to)S +1816(display)S +2176(to)S +2304(this)S +2506(program)S +2919(which)S +3229(then)S +3460(re-displays)S +3983(to)S +4111(each)S +4352(of)S +4485(the)S +4661(other)S +4928(named)S +2232 V +900(servers.)S +1289(Of)S +1456(course)S +1793(CDL)S +2065(clients)S +2404(can)S +2607(also)S +2836(do)S +2998(this)S +3210(internally)S +3683(by)S +3844(opening)S +4249(multiple)S +4668(connections,)S +2352 V +900(using)S +11 I +1185(vximtool)S +11 R +1609(in)S +1741(proxy)S +2044(mode)S +2335(adds)S +2583(the)S +2764(functionality)S +3373(to)S +3506(programs)S +3967(which)S +4282(may)S +4518(use)S +4711(this)S +4918(feature)S +2472 V +900(only)S +1132(ocasionally.)S +1729(A)S +1844(maximum)S +2327(of)S +2453(8)S +2543(servers)S +2887(may)S +3111(be)S +3249(named,)S +3604(they)S +3828(may)S +4052(be)S +4190(either)S +4474(on)S +4619(the)S +4788(local)S +5036(host)S +2592 V +900(or)S +1024(a)S +1105(remote)S +1442(machine)S +1846(and)S +2037(connections)S +2594(can)S +2779(be)S +2916(established)S +3438(using)S +3711(either)S +3994(\256fos)S +4224(or)S +4349(sockets.)S +4767(See)S +4959(above)S +2712 V +900(or)S +1024(the)S +11 I +1191(vximtool)S +11 R +1602(man)S +1824(page)S +2063(for)S +2223(details)S +2543(on)S +2686(how)S +2908(to)S +3027(specify)S +3376(the)S +3543(server)S +3842(connection.)S +2868 V +900(The)S +1103(current)S +1445(implementation)S +2169(has)S +2348(a)S +2429(few)S +2625(restrictions)S +3146(users)S +3404(should)S +3731(keep)S +3970(in)S +4089(mind:)S +3024 V +11 Y1 +1150(d)S +11 R +1288(The)S +1498(time)S +1734(to)S +1860(display)S +2218(an)S +2361(image)S +2669(or)S +2801(perform)S +3194(any)S +3393(output)S +3716(operation)S +4171(scales)S +4473(with)S +4710(the)S +4885(number)S +3144 V +1150(of)S +1285(connected)S +1772(hosts.)S +2104(Each)S +2366(IIS)S +2544(packet)S +2873(is)S +2991(forwarded)S +3483(to)S +3612(each)S +3854(host)S +4081(in)S +4210(turn)S +4430(before)S +4751(processing)S +3264 V +1150(the)S +1317(next)S +1539(input)S +1799(packet,)S +2145(and)S +2336(connection)S +2850(over)S +3077(a)S +3158(slow)S +3399(network)S +3791(will)S +3996(delay)S +4266(the)S +4433(entire)S +4715(process.)S +3420 V +11 Y1 +1150(d)S +11 R +1298(Cursor)S +1647(and)S +1855(image)S +2173(readback)S +2616(are)S +2799(done)S +3063(by)S +3224(sending)S +3617(the)S +3802(request)S +11 I +4169(only)S +11 R +4409(to)S +4546(the)S +4731(\256rst)S +4954(server)S +3540 V +1150(named)S +1483(on)S +1634(the)S +1809(command)S +2283(line.)S +2550(This)S +2787(is)S +2902(done)S +3156(to)S +3283(avoid)S +3568(forcing)S +3925(a)S +4014(cursor)S +4327(mode)S +4611(on)S +4761(all)S +4911(servers)S +3660 V +1150(which)S +1455(cannot)S +1784(be)S +1924(terminated)S +2430(when)S +2705(a)S +2791(response)S +3212(is)S +3324(received)S +3731(from)S +3982(only)S +4216(one)S +4412(server,)S +4744(and)S +4940(means)S +3780 V +1150(that)S +1365(the)S +1549(\256rst)S +1771(server)S +2087(named)S +2429(should)S +2773(be)S +2926(the)S +3110(one)S +3318(used)S +3569(to)S +3705(control)S +4066(interactive)S +4578(sessions.)S +5050(The)S +3900 V +1150(remaining)S +1648(servers)S +2010(however)S +2439(can)S +2643(still)S +2863(respond)S +3263(to)S +3403(cursor)S +3730(requests)S +4143(from)S +4410(other)S +4689(applications)S +4020 V +1150(connected)S +1626(to)S +1745(that)S +1943(server)S +2242(on)S +2385(another)S +2746(channel.)S +4176 V +11 Y1 +1150(d)S +11 R +1282(All)S +1457(named)S +1783(servers)S +2126(must)S +2375(be)S +2513(running)S +2890(prior)S +3138(to)S +3259(starting)S +3624(the)S +3793(proxy)S +4084(server.)S +4413(The)S +4618(connection)S +5134(to)S +4296 V +1150(the)S +1321(remote)S +1661(servers)S +2006(is)S +2116(established)S +2640(when)S +2913(this)S +3109(task)S +3322(is)S +3432(\256rst)S +3640(run)S +3822(and)S +4016(if)S +4119(no)S +4265(server)S +4567(is)S +4677(running)S +5055(that)S +4416 V +1150(connection)S +1687(will)S +1915(be)S +2074(ignored.)S +2493(The)S +2719(task)S +2952(will)S +3180(exit)S +3401(if)S +3524(no)S +3690(remote)S +4050(servers)S +4415(can)S +4622(be)S +4781(found)S +5093(for)S +4536 V +1150(display.)S +4692 V +11 Y1 +1150(d)S +11 R +1295(Any)S +1531(connected)S +2021(server)S +2334(that)S +2546(shuts)S +2820(down)S +3111(while)S +3402(the)S +3583(proxy)S +3887(server)S +4201(is)S +4323(running)S +4713(is)S +4835(likely)S +5134(to)S +4812 V +1150(cause)S +1425(the)S +1592(program)S +1996(to)S +2115(crash)S +2378(on)S +2521(the)S +2688(next)S +2910(display.)S +7920 V +EP +%%Page: 21 24 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 21 -)S +840 V +11 B +900(11.)S +1104(C)S +1216(Interface)S +1673(Summary)S +996 V +11 R +1260(#include)S +1704(")S +11 B +1749(cdl.h)S +11 R +1980(")S +1296 V +1537(CDLPtr)S +11 B +1919(cdl_open)S +11 R +2507(\(imtdev\))S +1416 V +1504(int)S +11 B +1654(cdl_displayPix)S +11 R +2507(\(cdl,)S +2738(pix,)S +2940(nx,)S +3111(ny,)S +3282(bitpix,)S +3601(frame,)S +3916(fbcon\256g,)S +4343(zscale\))S +1536 V +1378(char)S +11 B +1598(cdl_readCursor)S +11 R +2507(\(cdl,)S +2738(sample,)S +3110(x,)S +3226(y,)S +3342(wcs,)S +3573(key\))S +1656 V +1534(int)S +11 B +1684(cdl_setCursor)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y,)S +2970(wcs\))S +1776 V +1618(int)S +11 B +1768(cdl_setWCS)S +11 R +2507(\(cdl,)S +2738(name,)S +3036(title,)S +3269(a,)S +3378(b,)S +3494(c,)S +3603(d,)S +3719(tx,)S +3866(ty,)S +4013(z1,)S +4177(z2,)S +4341(zt\))S +1896 V +1606(int)S +11 B +1756(cdl_getWCS)S +11 R +2507(\(cdl,)S +2738(name,)S +3036(title,)S +3269(a,)S +3378(b,)S +3494(c,)S +3603(d,)S +3719(tx,)S +3866(ty,)S +4013(z1,)S +4177(z2,)S +4341(zt\))S +2016 V +1481(void)S +11 B +1710(cdl_setFrame)S +11 R +2507(\(cdl,)S +2738(frame\))S +2136 V +1457(int)S +11 B +1607(cdl_clearFrame)S +11 R +2507(\(cdl\))S +2256 V +1692(void)S +11 B +1921(cdl_close)S +11 R +2507(\(cdl\))S +2496 V +1439(int)S +11 B +1589(cdl_setMapping)S +11 R +2507(\(cdl,)S +2738(region,)S +3079(sx,sy,snx,sny,)S +3726(dx,dy,dnx,dny,)S +4421(ref\))S +2616 V +1427(int)S +11 B +1577(cdl_getMapping)S +11 R +2507(\(cdl,)S +2738(region,)S +3079(sx,sy,snx,sny,)S +3726(dx,dy,dnx,dny,)S +4421(ref\))S +2736 V +1501(int)S +11 B +1651(cdl_queryMap)S +11 R +2507(\(cdl,)S +2738(wcs,)S +2969(region,)S +3310(sx,sy,snx,sny,)S +3957(dx,dy,dnx,dny,)S +4652(objref\))S +2976 V +1389(int)S +11 B +1539(cdl_displayIRAF)S +11 R +2507(\(cdl,)S +2738(fname,)S +3072(band,)S +3346(frame,)S +3661(fbcon\256g,)S +4088(zscale\))S +3096 V +1654(int)S +11 B +1804(cdl_isIRAF)S +11 R +2507(\(fname\))S +3216 V +1515(int)S +11 B +1665(cdl_readIRAF)S +11 R +2507(\(fname,)S +2877(band,)S +3151(pix,)S +3353(nx,)S +3524(ny,)S +3695(bitpix,)S +4014(title\))S +3456 V +1411(int)S +11 B +1561(cdl_displayFITS)S +11 R +2507(\(cdl,)S +2738(fname,)S +3072(frame,)S +3387(fbcon\256g,)S +3814(zscale\))S +3576 V +1676(int)S +11 B +1826(cdl_isFITS)S +11 R +2507(\(fname\))S +3696 V +1537(int)S +11 B +1687(cdl_readFITS)S +11 R +2507(\(fname,)S +2877(pix,)S +3079(nx,)S +3250(ny,)S +3421(bitpix,)S +3740(title\))S +3936 V +1216(void)S +11 B +1445(cdl_computeZscale)S +11 R +2507(\(cdl,)S +2738(pix,)S +2940(nx,)S +3111(ny,)S +3282(bitpix,)S +3601(z1,)S +3765(z2\))S +4056 V +1352(void)S +11 B +1581(cdl_zscaleImage)S +11 R +2507(\(cdl,)S +2738(pix,)S +2940(nx,)S +3111(ny,)S +3282(bitpix,)S +3601(z1,)S +3765(z2\))S +4296 V +1604(int)S +11 B +1754(cdl_printPix)S +11 R +2507(\(cdl,)S +2738(cmd,)S +2988(pix,)S +3190(nx,)S +3361(ny,)S +3532(annotate\))S +4416 V +1298(int)S +11 B +1448(cdl_printPixToFile)S +11 R +2507(\(cdl,)S +2738(fname,)S +3072(pix,)S +3274(nx,)S +3445(ny,)S +3616(annotate\))S +4656 V +1491(int)S +11 B +1641(cdl_readImage)S +11 R +2507(\(cdl,)S +2738(pix,)S +2940(nx,)S +3111(ny\))S +4776 V +1175(int)S +11 B +1325(cdl_readFrameBu)S +2179 H + (f)show 11 -.5 mul h (f)show +11 B +2246(er)S +11 R +2507(\(cdl,)S +2738(pix,)S +2940(nx,)S +3111(ny\))S +4896 V +1288(int)S +11 B +1438(cdl_readSubRaster)S +11 R +2507(\(cdl,)S +2738(lx,)S +2885(ly,)S +3032(nx,)S +3203(ny,)S +3374(pix\))S +5016 V +1259(int)S +11 B +1409(cdl_writeSubRaster)S +11 R +2507(\(cdl,)S +2738(lx,)S +2885(ly,)S +3032(nx,)S +3203(ny,)S +3374(pix\))S +5256 V +1522(void)S +11 B +1751(cdl_selectFB)S +11 R +2507(\(cdl,)S +2738(nx,)S +2909(ny,)S +3080(fb,)S +3232(w,)S +3372(h,)S +3488(nf,)S +3640(reset\))S +5376 V +1336(void)S +11 B +1565(cdl_setFBCon\256g)S +11 R +2507(\(cdl,)S +2738(con\256gno\))S +5496 V +1324(void)S +11 B +1553(cdl_getFBCon\256g)S +11 R +2507(\(cdl,)S +2738(con\256gno,)S +3184(w,)S +3324(h,)S +3440(nf\))S +5616 V +1260(void)S +11 B +1489(cdl_lookupFBSize)S +11 R +2507(\(cdl,)S +2738(con\256gno,)S +3184(w,)S +3324(h,)S +3440(nf\))S +5856 V +1434(void)S +11 B +1663(cdl_setZTrans)S +11 R +2507(\(cdl,)S +2738(ztrans\))S +5976 V +1472(void)S +11 B +1701(cdl_setZScale)S +11 R +2507(\(cdl,)S +2738(z1,)S +2902(z2\))S +6096 V +1441(void)S +11 B +1670(cdl_setSample)S +11 R +2507(\(cdl,)S +2738(nsample\))S +6216 V +1183(void)S +11 B +1412(cdl_setSampleLines)S +11 R +2507(\(cdl,)S +2738(nlines\))S +6336 V +1376(void)S +11 B +1605(cdl_setContrast)S +11 R +2507(\(cdl,)S +2738(contrast\))S +6456 V +1517(void)S +11 B +1746(cdl_setName)S +11 R +2507(\(cdl,)S +2738(imname\))S +6576 V +1570(void)S +11 B +1799(cdl_setTitle)S +11 R +2507(\(cdl,)S +2738(imtitle\))S +6816 V +1469(void)S +11 B +1698(cdl_getFrame)S +11 R +2507(\(cdl,)S +2738(frame\))S +6936 V +1422(void)S +11 B +1651(cdl_getZTrans)S +11 R +2507(\(cdl,)S +2738(ztrans\))S +7056 V +1460(void)S +11 B +1689(cdl_getZScale)S +11 R +2507(\(cdl,)S +2738(z1,)S +2902(z2\))S +7176 V +1429(void)S +11 B +1658(cdl_getSample)S +11 R +2507(\(cdl,)S +2738(nsample\))S +7296 V +1171(void)S +11 B +1400(cdl_getSampleLines)S +11 R +2507(\(cdl,)S +2738(nlines\))S +7920 V +EP +%%Page: 22 25 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 22 -)S +840 V +1364(void)S +11 B +1593(cdl_getContrast)S +11 R +2507(\(cdl,)S +2738(contrast\))S +960 V +1505(void)S +11 B +1734(cdl_getName)S +11 R +2507(\(cdl,)S +2738(imname\))S +1080 V +1558(void)S +11 B +1787(cdl_getTitle)S +11 R +2507(\(cdl,)S +2738(imtitle\))S +1320 V +1479(int)S +11 B +1629(cdl_mapFrame)S +11 R +2507(\(cdl,)S +2738(frame\))S +1440 V +1221(int)S +11 B +1371(cdl_markCoordsFile)S +11 R +2507(\(cdl,)S +2738(fname,)S +3072(type,)S +3322(size,)S +3553(color,)S +3839(label\))S +1560 V +1489(int)S +11 B +1639(cdl_markPoint)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y,)S +2970(number,)S +3366(size,)S +3597(type,)S +3847(color\))S +1680 V +1219(int)S +11 B +1369(cdl_markPointLabel)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y,)S +2970(label,)S +3244(size,)S +3475(type,)S +3725(color\))S +1800 V +1525(int)S +11 B +1675(cdl_markLine)S +11 R +2507(\(cdl,)S +2738(xs,)S +2897(ys,)S +3056(xe,)S +3220(ye,)S +3384(color\))S +1920 V +1556(int)S +11 B +1706(cdl_markBox)S +11 R +2507(\(cdl,)S +2738(lx,)S +2885(ly,)S +3032(ux,)S +3203(uy,)S +3374(\256ll,)S +3559(color\))S +2040 V +1360(int)S +11 B +1510(cdl_markPolygon)S +11 R +2507(\(cdl,)S +2738(xarray,)S +3077(yarray,)S +3416(npts,)S +3661(\256ll,)S +3846(color\))S +2160 V +1360(int)S +11 B +1510(cdl_markPolyline)S +11 R +2507(\(cdl,)S +2738(xarray,)S +3077(yarray,)S +3416(npts,)S +3661(color\))S +2280 V +1455(int)S +11 B +1605(cdl_markCircle)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y,)S +2970(radius,)S +3299(\256ll,)S +3484(color\))S +2400 V +1207(int)S +11 B +1357(cdl_markCircAnnuli)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y,)S +2970(radius,)S +3299(nannuli,)S +3690(sep,)S +3897(color\))S +2520 V +1420(int)S +11 B +1570(cdl_markEllipse)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y,)S +2970(xrad,)S +3225(yrad,)S +3480(rotang,)S +3821(\256ll,)S +4006(color\))S +2640 V +1184(int)S +11 B +1334(cdl_markEllipAnnuli)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y,)S +2970(xrad,)S +3225(yrad,)S +3480(ang,)S +3699(nannuli,)S +4090(sep,)S +4297(color\))S +2760 V +1527(int)S +11 B +1677(cdl_markText)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y,)S +2970(str,)S +3141(size,)S +3372(angle,)S +3670(color\))S +2880 V +1649(int)S +11 B +1799(cdl_setFont)S +11 R +2507(\(cdl,)S +2738(font\))S +3000 V +1355(int)S +11 B +1505(cdl_setTextWidth)S +11 R +2507(\(cdl,)S +2738(width\))S +3120 V +1353(int)S +11 B +1503(cdl_setLineWidth)S +11 R +2507(\(cdl,)S +2738(width\))S +3240 V +1422(int)S +11 B +1572(cdl_setLineStyle)S +11 R +2507(\(cdl,)S +2738(style\))S +3360 V +1455(int)S +11 B +1605(cdl_deleteMark)S +11 R +2507(\(cdl,)S +2738(x,)S +2854(y\))S +3480 V +1355(int)S +11 B +1505(cdl_clearOverlay)S +11 R +2507(\(cdl\))S +3600 V +1245(int)S +11 B +1395(cdl_redrawOverlay)S +11 R +2507(\(cdl\))S +7920 V +EP +%%Page: 23 26 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 23 -)S +840 V +11 B +900(12.)S +1104(C)S +1216(Example)S +1665(Tasks)S +996 V +11 R +1175(The)S +1381(examples)S +1831(shown)S +2154(here)S +2377(are)S +2545(for)S +2708(demonstration)S +3374(purposes)S +3801(only.)S +4095(They)S +4357(are)S +4526(based)S +4812(on)S +4959(work-)S +1116 V +900(ing)S +1079(example)S +1488(tasks)S +1746(in)S +1870(the)S +2042(CDL)S +2300(source)S +11 I +2622(examples)S +11 R +3066(subdirectory,)S +3679(see)S +3855(the)S +4026(programs)S +4477(there)S +4732(for)S +4896(the)S +5067(full)S +1236 V +900(program)S +1304(listing.)S +1596 V +11 B +900(12.1.)S +1187(Display)S +1576(Example)S +1832 V +9 C +900(#include)S +1386(<stdio.h>)S +1932 V +900(#include)S +1386(<unistd.h>)S +2032 V +900(#include)S +1386("cdl.h")S +2232 V +900(/*)S +9 I +1116(DISPLAY)S +1493(--)S +1580(Example)S +1922(task)S +2094(to)S +2191(display)S +2478(an)S +2595(image)S +2842(as)S +2949(a)S +3021(command-line)S +3563(task.)S +2332 V +954(*)S +1053(This)S +1235(task)S +1407(is)S +1494(meant)S +1741(to)S +1838(show)S +2050(three)S +2262(ways)S +2469(the)S +2606(CDL)S +2808(can)S +2965(be)S +3077(used)S +3269(to)S +3366(display)S +2432 V +954(*)S +1053(an)S +1170(image,)S +1440(see)S +1582(the)S +1719(code)S +1916(comments)S +2303(for)S +2435(a)S +2507(description)S +2939(of)S +3036(each)S +3233(method.)S +2532 V +954(*)S +2632 V +954(*)S +1053(Examples:)S +2732 V +954(*)S +1161(To)S +1283(display)S +1570(a)S +1642(simple)S +1904(IRAF)S +2126(or)S +2233(FITS)S +2440(\256le:)S +2832 V +954(*)S +1283(%)S +1385(./display)S +1720(-frame)S +1987(2)S +2059(image.imh)S +2932 V +954(*)S +1242(%)S +1344(./display)S +1679(image.\256ts)S +3032 V +954(*)S +3132 V +954(*)S +1161(To)S +1283(display)S +1570(a)S +1642(FITS)S +1849(\256le)S +1986(as)S +2093(a)S +2165(raw)S +2332(image:)S +3232 V +954(*)S +1269(%)S +1371(./display)S +1706(-nx)S +1848(512)S +2010(-ny)S +2152(512)S +2314(-depth)S +2571(16)S +2688(-hskip)S +2935(5760)S +3142(-raw)S +3339(dpix.\256ts)S +3332 V +954(*)S +3432 V +954(*)S +1053(Usage:)S +3532 V +954(*)S +1175(display)S +1462([-depth)S +1754(N])S +1876([-\256ts])S +2108([-frame)S +2410(N])S +2532([-fbcon\256g)S +2914(N])S +3036([-hskip)S +3318(N])S +3632 V +954(*)S +1283([-iraf])S +1540([-nozscale])S +1977([-nx)S +2154(N])S +2276([-ny)S +2453(N])S +2575([-raw])S +2842([-zscale])S +3189(\256le)S +3732 V +9 C +954(*/)S +3932 V +900(#define)S +1332(NONE)S +1725(-1)S +4032 V +900(#define)S +1450(IRAF)S +1779(0)S +4132 V +900(#define)S +1450(FITS)S +1779(1)S +4232 V +900(#define)S +1450(RAW)S +1779(2)S +4432 V +900(main)S +1170(\(argc,)S +1548(argv\))S +4532 V +900(int)S +1175(argc;)S +4632 V +900(char)S +1175(*argv[];)S +4732 V +900({)S +4832 V +1175(CDLPtr)S +1725(cdl;)S +4932 V +1175(char)S +1450(*fname,)S +1882(title[128];)S +5032 V +1175(int)S +1450(i,)S +1612(status)S +1990(=)S +2098(0,)S +2260(frame)S +2584(=)S +2692(1,)S +2854(fbconfig)S +3340(=)S +3448(0,)S +3610(zscale)S +3988(=)S +4096(1;)S +5132 V +1175(int)S +1450(format)S +1828(=)S +1936(NONE,)S +2260(nx)S +2422(=)S +2530(0,)S +2692(ny)S +2854(=)S +2962(0,)S +3124(depth)S +3448(=)S +3556(8,)S +3718(hskip)S +4042(=)S +4150(0;)S +5232 V +1175(float)S +1725(z1,)S +1941(z2;)S +5332 V +1175(int)S +1450(fb_w,)S +1774(fb_h,)S +2098(nf;)S +5432 V +1175(unsigned)S +1661(char)S +1931(*pix)S +2201(=)S +2309(NULL;)S +5632 V +1175(/*)S +9 I +1337(Process)S +1649(the)S +1786(command)S +2163(line)S +2325(options.)S +9 C +2667(*/)S +5732 V +1175(if)S +1337(\(argc)S +1661(>)S +1769(1\))S +1931({)S +5832 V +1391(for)S +1607(\(i=1;)S +1931(i)S +2039(<)S +2147(argc;)S +2471(i++\))S +2741({)S +5932 V +1548(if)S +1710(\(strcmp)S +2142(\(argv[i],)S +2682("-depth"\))S +3222(==)S +3384(0\))S +3978(depth)S +4302(=)S +4410(atoi)S +4680(\(argv[++i]\);)S +6032 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-fits"\))S +3438(==)S +3600(0\))S +3978(format)S +4356(=)S +4464(FITS;)S +6132 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-frame"\))S +3492(==)S +3654(0\))S +3978(frame)S +4302(=)S +4410(atoi)S +4680(\(argv[++i]\);)S +6232 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-fbconfig"\))S +3654(==)S +3816(0\))S +3978(fbconfig)S +4464(=)S +4572(atoi)S +4842(\(argv[++i]\);)S +6332 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-hskip"\))S +3492(==)S +3654(0\))S +3978(hskip)S +4302(=)S +4410(atoi)S +4680(\(argv[++i]\);)S +6432 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-iraf"\))S +3438(==)S +3600(0\))S +3978(format)S +4356(=)S +4464(IRAF;)S +6532 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-nozscale"\))S +3654(==)S +3816(0\))S +3978(zscale)S +4356(=)S +4464(0;)S +6632 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-nx"\))S +3330(==)S +3492(0\))S +3978(nx)S +4140(=)S +4248(atoi)S +4518(\(argv[++i]\);)S +6732 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-ny"\))S +3330(==)S +3492(0\))S +3978(ny)S +4140(=)S +4248(atoi)S +4518(\(argv[++i]\);)S +6832 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-raw"\))S +3384(==)S +3546(0\))S +3978(format)S +4356(=)S +4464(RAW;)S +6932 V +1548(else)S +1818(if)S +1980(\(strcmp)S +2412(\(argv[i],)S +2952("-zscale"\))S +3546(==)S +3708(0\))S +3978(zscale)S +4356(=)S +4464(1;)S +7032 V +1391(})S +7132 V +1175(})S +7920 V +EP +%%Page: 24 27 +BP +/slant 0 def +/height 1.000000 def +9 C +9 C +460 V +11 R +2936(- 24 -)S +820 V +9 C +1175(/*)S +9 I +1337(Open)S +1559(the)S +1696(package)S +2023(and)S +2185(a)S +2257(connection)S +2679(to)S +2776(the)S +2913(server.)S +9 C +3215(*/)S +920 V +1175(if)S +1337(\(!\(cdl)S +1715(=)S +9 B +1823(cdl_open)S +9 C +2222(\(\(char)S +2600(*\)getenv\("IMTDEV"\)\)\))S +3734(\))S +1020 V +1337(exit)S +1607(\(-1\);)S +1220 V +1175(fname)S +1499(=)S +1607(argv[argc-1];)S +1420 V +1175(/*)S +9 I +1337(METHOD)S +1739(1:)S +1868(Displays)S +2210(the)S +2347(image)S +2594(using)S +2816(the)S +2953(high-level)S +3340(format)S +3607(display)S +1520 V +1229(*)S +1301(call.)S +1513(Display)S +1820(as)S +1927(an)S +2044(IRAF)S +2266(image)S +2513(if)S +2590(the)S +2727(option)S +2984(was)S +3151(set)S +3278(indicating)S +1620 V +1229(*)S +1301(this)S +1458(is)S +1545(the)S +1682(format,)S +1972(otherwise)S +2349(test)S +2501(the)S +2638(\256le)S +2775(to)S +2872(see)S +3014(if)S +3091(it)S +3168(is)S +3255(anyway.)S +1720 V +9 C +1229(*/)S +1820 V +1175(if)S +1337(\(format)S +1769(==)S +1931(IRAF)S +2201(||)S +2363(\(format)S +2795(==)S +2957(NONE)S +3227(&&)S +9 B +3389(cdl_isIRAF)S +9 C +3883(\(fname\)\)\))S +4423({)S +1920 V +1391(status)S +1769(=)S +9 B +1877(cdl_displayIRAF)S +9 C +2586(\(cdl,)S +2910(fname,)S +3288(1,)S +3450(frame,)S +3828(FB_AUTO,)S +4314(zscale\);)S +2120 V +1175(/*)S +9 I +1337(METHOD)S +1739(2:)S +1868(Uses)S +2070(the)S +2207(CDL)S +2409(procedure)S +2806(for)S +2938(getting)S +3215(image)S +3462(pixels)S +3699(from)S +2220 V +1229(*)S +1301(a)S +1373(known)S +1635(format,)S +1925(minimal)S +2247(work)S +2454(required)S +2791(to)S +2888(display)S +3175(an)S +3292(image.)S +3589(The)S +2320 V +1229(*)S +1301(point)S +1513(here)S +1700(is)S +1787(that)S +1954(you)S +2111(can)S +2268(use)S +2415(this)S +2572(method)S +2864(to)S +2961(process)S +3263(the)S +3400(image)S +2420 V +1229(*)S +1301(yourself)S +1618(prior)S +1830(to)S +1927(display,)S +2237(e.g.)S +2395(subsample)S +2802(the)S +2939(pixels,)S +3199(apply)S +3426(a)S +3498(user)S +2520 V +1229(*)S +1301(LUT,)S +1516(etc)S +1648(but)S +1790(still)S +1952(use)S +2099(the)S +2236(CDL)S +2438(to)S +2535(get)S +2672(the)S +2809(raw)S +2976(image)S +3223(and)S +3385(do)S +3502(the)S +2620 V +1229(*)S +1301(display.)S +2720 V +9 C +1229(*/)S +2820 V +1175(})S +1283(else)S +1553(if)S +1715(\(format)S +2147(==)S +2309(FITS)S +2579(||)S +2741(\(format)S +3173(==)S +3335(NONE)S +3605(&&)S +9 B +3767(cdl_isFITS)S +9 C +4241(\(fname\)\)\))S +4781({)S +3020 V +1391(/*)S +9 I +1553(Get)S +1710(the)S +1847(FITS)S +2054(image)S +2301(pixels,)S +2561(exit)S +2718(w/)S +2830(an)S +2947(error)S +3164(status)S +3401(if)S +3478(something)S +3120 V +1445(*)S +1517(went)S +1714(wrong,)S +1994(the)S +2131(procedure)S +2528(will)S +2690(print)S +2892(what)S +3094(that)S +3261(was.)S +3220 V +9 C +1445(*/)S +3320 V +1391(if)S +1553(\()S +9 B +1607(cdl_readFITS)S +9 C +2196(\(fname,)S +2628(&pix,)S +2952(&nx,)S +3222(&ny,)S +3492(&depth,)S +3924(title\)\))S +4356({)S +3420 V +9 B +1450(cdl_close)S +9 C +1849(\(cdl\);)S +2550(/*)S +9 I +2712(close)S +2924(the)S +3061(package)S +9 C +3469(*/)S +3520 V +1450(exit)S +1720(\(1\);)S +2550(/*)S +9 I +2712(exit)S +2869(w/)S +2981(error)S +3198(code)S +9 C +3422(*/)S +3620 V +1391(})S +3820 V +1391(/*)S +9 I +1553(Now)S +1745(select)S +1977(a)S +2049(frame)S +2286(bu)S +2376 H + (f)show 9 -.5 mul h (f)show +9 I +2422(er)S +2524(large)S +2741(enough)S +3033(for)S +3165(the)S +3302(image.)S +3572(The)S +3920 V +1445(*)S +1517(fbcon\256g)S +1834(number)S +2136(is)S +2223(passed)S +2495(in)S +2592(the)S +2729(WCS)S +2936(packet,)S +3221(but)S +3363(the)S +3500(display)S +4020 V +1445(*)S +1517(call)S +1679(below)S +1921(will)S +2083(compute)S +2415(the)S +2552(correct)S +2839(WCS)S +3046(for)S +3178(the)S +3315(image)S +3562(and)S +4120 V +1445(*)S +1517(transmit)S +1844(that)S +2011(prior)S +2223(to)S +2320(display,)S +2630(all)S +2752(we're)S +2984(doing)S +3216(here)S +3403(is)S +4220 V +1445(*)S +1517(setting)S +1784(up)S +1901(the)S +2038(FB)S +2175(to)S +2272(be)S +2384(used.)S +4320 V +9 C +1445(*/)S +4420 V +1391(if)S +1553(\(fbconfig)S +2093(==)S +2255(0\))S +4520 V +9 B +1607(cdl_selectFB)S +9 C +2146(\(cdl,)S +2470(nx,)S +2686(ny,)S +2902(&fbconfig,)S +3496(&fb_w,)S +3874(&fb_h,)S +4252(&nf,)S +4522(0\);)S +4720 V +1391(/*)S +9 I +1553(Lastly,)S +1823(display)S +2110(the)S +2247(pixels)S +2484(to)S +2581(the)S +2718(requested)S +3095(frame,)S +3355(do)S +3472(any)S +4820 V +1445(*)S +1517(zscaling)S +1839(requested)S +2216(using)S +2438(the)S +2575(CDL)S +2777(procedure.)S +4920 V +9 C +1445(*/)S +5020 V +1391(status)S +1769(=)S +9 B +1877(cdl_displayPix)S +9 C +2491(\(cdl,)S +2815(pix,)S +3085(nx,)S +3301(ny,)S +3517(depth,)S +3895(frame,)S +5120 V +1450(fbconfig,)S +1990(zscale\);)S +5320 V +1175(/*)S +9 I +1337(METHOD)S +1739(3:)S +1868(Displays)S +2210(an)S +2327(image)S +2574(of)S +2671(raw)S +2838(pixels.)S +3125(The)S +3287(client)S +3514(code)S +3711(is)S +5420 V +1229(*)S +1301(responsible)S +1743(for)S +1875(reading)S +2182(the)S +2319(image)S +2566(and)S +2728(calling)S +3005(all)S +3127(the)S +3264(procedures)S +5520 V +1229(*)S +1301(needed)S +1583(for)S +1715(image)S +1962(display,)S +2272(initialize)S +2614(the)S +2751(frame,)S +3011(zscaling)S +3333(pix,)S +3493(etc.)S +5620 V +1229(*)S +1301(While)S +1538(we)S +1665(assume)S +1957(a)S +2029(simple)S +2291(raster)S +2533(format)S +2800(in)S +2897(this)S +3054(program,)S +3419(the)S +3556(user)S +5720 V +1229(*)S +1301(code)S +1498(can)S +1655(read)S +1847(a)S +1919(compressed)S +2371(image)S +2618(format)S +2885(such)S +3077(as)S +3184(GIF,)S +3384(mosaic)S +3666(multiple)S +5820 V +1229(*)S +1301(images)S +1583(for)S +1715(display)S +2002(as)S +2109(a)S +2181(single)S +2423(image,)S +2693(or)S +2800(just)S +2957(about)S +3189(anything)S +3531(that)S +5920 V +1229(*)S +1301(produces)S +1658(a)S +1730(raster)S +1972(for)S +2104(display.)S +2414(The)S +2576(intent)S +2808(here)S +2995(is)S +3082(to)S +3179(show)S +3391(all)S +3513(the)S +6020 V +1229(*)S +1301(lowest)S +1558(level)S +1755(calls)S +1952(needed)S +2234(for)S +2366(displaying)S +2768(the)S +2905(image.)S +6120 V +9 C +1229(*/)S +6220 V +1175(})S +1283(else)S +1553(if)S +1715(\(format)S +2147(==)S +2309(RAW\))S +2579({)S +6320 V +1391(FILE)S +1725(*fd;)S +6420 V +1391(int)S +2000(lx,)S +2216(ly;)S +6620 V +1391(if)S +1553(\(nx)S +1769(==)S +1931(0)S +2039(||)S +2201(ny)S +2363(==)S +2525(0\))S +2687({)S +6720 V +1607(fprintf)S +2039(\(stderr,)S +2525("No)S +2741(size)S +3011(given)S +3335(for)S +3551(raw)S +3767(data.\\n"\);)S +6820 V +1607(exit)S +1877(\(1\);)S +6920 V +1391(})S +7120 V +1391(/*)S +9 I +1553(Open)S +1775(the)S +1912(image)S +2159(\256le)S +2296(if)S +2373(we)S +2500(can.)S +9 C +2707(*/)S +7220 V +1391(if)S +1553(\(fd)S +1769(=)S +1877(fopen)S +2201(\(fname,)S +2633("r"\)\))S +2957({)S +7920 V +EP +%%Page: 25 28 +BP +/slant 0 def +/height 1.000000 def +9 C +9 C +460 V +11 R +2936(- 25 -)S +820 V +9 C +1450(/*)S +9 I +1612(Seek)S +1804(to)S +1901(the)S +2038(o)S +2083 H + (f)show 9 -.5 mul h (f)show +9 I +2129(set)S +2256(speci\256ed.)S +9 C +2648(*/)S +920 V +1450(lseek)S +1774(\(fileno\(fd\),)S +2476(\(off_t\))S +2908(hskip,)S +3286(SEEK_SET\);)S +1120 V +1450(/*)S +9 I +1612(Allocate)S +1939(the)S +2076(pixel)S +2278(pointer)S +2565(and)S +2727(read)S +2919(the)S +3056(data.)S +9 C +3293(*/)S +1220 V +1450(pix)S +1666(=)S +1774(\(unsigned)S +2314(char)S +2584(*\))S +2746(malloc)S +3124(\(nx)S +3340(*)S +3448(ny)S +3610(*)S +3718(\(depth)S +4096(/)S +4204(8\)\);)S +1320 V +1450(fread)S +1774(\(pix,)S +2098(depth/8,)S +2584(nx)S +2746(*)S +2854(ny,)S +3070(fd\);)S +1520 V +1450(/*)S +9 I +1612(If)S +1694(we're)S +1926(zscaling)S +2248(and)S +2410(depth)S +2637(is)S +2724(more)S +2936(than)S +3123(8-bits,)S +3378(do)S +3495(that.)S +9 C +3712(*/)S +1620 V +1450(if)S +1612(\(zscale)S +2044(&&)S +2206(depth)S +2530(>)S +2638(8\))S +2800({)S +1720 V +9 B +1666(cdl_computeZscale)S +9 C +2455(\(cdl,)S +2779(pix,)S +3049(nx,)S +3265(ny,)S +3481(depth,)S +3859(&z1,)S +4129(&z2\);)S +1820 V +9 B +1666(cdl_zscaleImage)S +9 C +2345(\(cdl,)S +2669(&pix,)S +2993(nx,)S +3209(ny,)S +3425(depth,)S +3803(z1,)S +4019(z2\);)S +1920 V +1450(})S +2120 V +1450(/*)S +9 I +1612(Now)S +1804(select)S +2036(a)S +2108(frame)S +2345(bu)S +2435 H + (f)show 9 -.5 mul h (f)show +9 I +2481(er)S +2583(large)S +2800(enough)S +3092(for)S +3224(the)S +3361(image.)S +2220 V +1477(*)S +1549(We'll)S +1771(ask)S +1918(that)S +2085(this)S +2242(be)S +2354(reset)S +2556(but)S +2698(the)S +2835(change)S +3122(won't)S +3354(go)S +3471(to)S +2320 V +1477(*)S +1549(the)S +1686(server)S +1938(until)S +2130(we)S +2257(send)S +2449(in)S +2546(the)S +2683(WCS)S +2890(below.)S +2420 V +9 C +1504(*/)S +2520 V +9 B +1450(cdl_selectFB)S +9 C +1989(\(cdl,)S +2313(nx,)S +2529(ny,)S +2745(&fbconfig,)S +3339(&fb_w,)S +3717(&fb_h,)S +4095(&nf,)S +4365(1\);)S +2720 V +1450(/*)S +9 I +1612(Compute)S +1964(the)S +2101(image)S +2348(placement)S +2745(so)S +2852(it's)S +2994(centered)S +3331(in)S +3428(the)S +3565(frame,)S +2820 V +1477(*)S +1549(but)S +1691(note)S +1873(the)S +2010(cdl_writeSubRaster\(\))S +2807(routine)S +3094(can)S +3251(place)S +3473(an)S +2920 V +1477(*)S +1549(arbitrary)S +1906(raster)S +2148(anywhere)S +2525(in)S +2622(the)S +2759(frame)S +2996(bu)S +3086 H + (f)show 9 -.5 mul h (f)show +9 I +3132(er.)S +3020 V +9 C +1450(lx)S +1612(=)S +1720(\(fb_w)S +2044(/)S +2152(2\))S +2314(-)S +2422(\(nx)S +2638(/)S +2746(2\);)S +3120 V +1450(ly)S +1612(=)S +1720(fb_h)S +1990(-)S +2098(\(\(fb_h)S +2476(/)S +2584(2\))S +2746(+)S +2854(\(ny)S +3070(/)S +3178(2\)\);)S +3320 V +1450(/*)S +9 I +1612(Set)S +1749(the)S +1886(mapping)S +2228(we'll)S +2435(send)S +2627(with)S +2809(the)S +2946(WCS)S +3153(which)S +3395(must)S +3592(be)S +3420 V +1477(*)S +1549(called)S +1796(before)S +2053(the)S +2190(cdl_setWCS\(\))S +2712(call)S +2874(since)S +3086(the)S +3223(data)S +3410(is)S +3497(sent)S +3520 V +1477(*)S +1549(with)S +1731(the)S +1868(WCS)S +2075(and)S +2237(not)S +2379(as)S +2486(a)S +2558(separate)S +2895(call.)S +3620 V +9 C +1504(*)S +3720 V +1504(*)S +9 R +1612(First)S +1804(we)S +1936(must)S +2138(compose)S +2485(a)S +2552(node!path)S +2939(pre\256x)S +3176(for)S +3308(the)S +3445(image.)S +9 C +3742(*/)S +3820 V +1504(*/)S +3920 V +1450(gethostname)S +2098(\(node,)S +2476(512\);)S +4020 V +1450(\(void\))S +1828(getcwd)S +2206(\(path,)S +2584(512\);)S +4120 V +1450(if)S +1612(\(*fname)S +2044(==)S +2206('/'\))S +4220 V +1666(\(void\))S +2044(sprintf)S +2476(\(path_prefix,)S +3232("%s!%s",)S +3718(node,)S +4042(fname\);)S +4320 V +1450(else)S +4420 V +1666(\(void\))S +2044(sprintf)S +2476(\(path_prefix,)S +3232("%s!%s/%s",)S +3880(node,)S +4204(path,)S +4528(fname\);)S +4620 V +9 B +1450(cdl_setMapping)S +9 C +2119(\(cdl,)S +2443("image",)S +2929(0.,)S +3145(0.,)S +3361(nx,)S +3577(ny,)S +3793(lx,)S +4009(ly,)S +4225(nx,)S +4441(ny,)S +4720 V +1612(path_prefix\);)S +4920 V +1450(/*)S +9 I +1612(For)S +1774(the)S +1911(WCS)S +2118(we)S +2245(assume)S +2537(a)S +2609(simple)S +2871(linear)S +3113(transform)S +3495(where)S +3742(the)S +5020 V +1477(*)S +1549(image)S +1796(is)S +1883(Y-\257ipped,)S +2258(the)S +2395(\(x,y\))S +2585(translation)S +3007(is)S +3094(computed)S +3471(so)S +5120 V +1477(*)S +1549(it)S +1626(is)S +1713(correct)S +2000(for)S +2132(an)S +2249(frame)S +2486(bu)S +2576 H + (f)show 9 -.5 mul h (f)show +9 I +2622(er)S +2724(>=)S +2873(than)S +3060(the)S +3197(image)S +3444(size.)S +5220 V +9 C +1504(*/)S +5320 V +9 B +1450(cdl_setWCS)S +9 C +1974(\(cdl,)S +2298(fname,)S +2676("",)S +2892(1.,)S +3108(0.,)S +3324(0.,)S +3540(-1.,)S +5420 V +1666(\(float\))S +2098(\(nx)S +2314(/)S +2422(2\))S +2584(-)S +2692(\(fb_w)S +3016(/)S +3124(2\))S +3286(+)S +3394(1,)S +3826(/*)S +9 I +3988(X)S +4070(trans.)S +9 C +4494(*/)S +5520 V +1666(\(float\))S +2098(\(fb_h)S +2422(/)S +2530(2\))S +2692(+)S +2800(\(ny)S +3016(/)S +3124(2\),)S +3826(/*)S +9 I +3988(Y)S +4065(trans.)S +9 C +4489(*/)S +5620 V +1666(z1,)S +1882(z2,)S +2098(CDL_LINEAR\);)S +3826(/*)S +9 I +3988(Z)S +4065(transform)S +9 C +4474(*/)S +5820 V +1450(/*)S +9 I +1612(Finally,)S +1922(display)S +2209(the)S +2346(pixels.)S +9 C +2687(*/)S +5920 V +1450(if)S +1612(\()S +9 B +1666(cdl_writeSubRaster)S +9 R +2458(\(cdl,)S +2648(lx,)S +2768(ly,)S +2888(nx,)S +3028(ny,)S +3168(pix\)\))S +6020 V +1558(status)S +1790(=)S +1867(1;)S +6120 V +1283(})S +1353(else)S +6220 V +1450(status)S +1682(=)S +1759(1;)S +6320 V +1175(})S +1245(else)S +1412({)S +6420 V +1283(if)S +1365(\(access)S +1652(\(fname,)S +1957(F_OK\))S +2239(==)S +2366(0\))S +6520 V +1450(fprintf)S +1707(\(stderr,)S +1992("'%s':)S +2251(unknown)S +2613(image)S +2860(format.\\n",)S +3280(fname\);)S +6620 V +1283(else)S +6720 V +1450(fprintf)S +1707(\(stderr,)S +1992("'%s':)S +2251(image)S +2498(does)S +2690(not)S +2832(exist.\\n",)S +3182(fname\);)S +6820 V +1283(status)S +1515(=)S +1592(1;)S +6920 V +1175(})S +7120 V +1175(/*)S +9 I +1272(Now)S +1464(just)S +1621(free)S +1788(the)S +1925(pixel)S +2127(pointer)S +2414(to)S +2511(clean)S +2733(up.)S +9 R +2873(*/)S +7220 V +1175(if)S +1257(\(pix\))S +7920 V +EP +%%Page: 26 29 +BP +/slant 0 def +/height 1.000000 def +9 R +9 R +460 V +11 R +2936(- 26 -)S +820 V +9 R +1283(free)S +1450(\(\(unsigned)S +1862(char)S +2044(*\))S +2146(pix\);)S +920 V +9 B +1175(cdl_close)S +9 R +1547(\(cdl\);)S +2275(/*)S +9 I +2372(close)S +2584(the)S +2721(package)S +9 R +3048(*/)S +1020 V +1175(exit)S +1337(\(status\);)S +1120 V +900(})S +7920 V +EP +%%Page: 27 30 +BP +/slant 0 def +/height 1.000000 def +9 R +9 R +480 V +11 R +2936(- 27 -)S +840 V +11 B +900(12.2.)S +1187(Interactive)S +1730(Graphics)S +2198(Overlay)S +2609(Example)S +1076 V +9 C +900(#include)S +1386(<stdio.h>)S +1176 V +900(#include)S +1386(<unistd.h>)S +1276 V +900(#include)S +1386(<math.h>)S +1376 V +900(#include)S +1386("cdl.h")S +1576 V +900(/*)S +1676 V +9 I +954(*)S +1053(TVMARK)S +1430(--)S +1517(Example)S +1859(task)S +2031(for)S +2163(displaying)S +2565(an)S +2682(marking)S +3009(images.)S +3341(This)S +3523(program)S +1776 V +954(*)S +1053(can)S +1210(be)S +1322(used)S +1514(to)S +1611(either)S +1848(display)S +2135(an)S +2252(image)S +2499(and)S +2661(overlay)S +2958(points)S +3205(de\256ned)S +3492(in)S +1876 V +954(*)S +1053(a)S +1125(coordinate)S +1542(\256le,)S +1702(map)S +1884(an)S +2001(existing)S +2308(display)S +2595(frame)S +2832(for)S +2964(marking,)S +3314(or)S +3421(option-)S +1976 V +954(*)S +1053(ally)S +1215(enter)S +1427(a)S +1499(cursor)S +1761(command)S +2138(loop)S +2325(after)S +2522(either)S +2759(of)S +2856(these)S +3068(providing)S +3445(other)S +2076 V +954(*)S +1053(marking)S +1380(capability.)S +1817(All)S +1949(options)S +2241(support)S +2543(minimum)S +2905(match.)S +2176 V +954(*)S +2276 V +954(*)S +1053(Examples:)S +2376 V +954(*)S +1175(%)S +1277(tvmark)S +1554(dpix.\256ts)S +2476 V +954(*)S +1175(%)S +1277(tvmark)S +1554(-coords)S +1856(coords)S +2128(-color)S +2375(205)S +2537(dpix.\256ts)S +2576 V +954(*)S +1175(%)S +1277(tvmark)S +1554(-frame)S +1821(2)S +2676 V +954(*)S +1175(%)S +1277(tvmark)S +1554(-coords)S +1856(coords)S +2128(-interactive)S +2570(dpix.\256ts)S +2776 V +954(*)S +2876 V +954(*)S +1053(Usage:)S +2976 V +954(*)S +1175(tvmark)S +1452([-frame)S +1754(N])S +1876([-fbcon\256g)S +2258(N])S +2380([-coords)S +2717(<\256le>])S +3011([-size)S +3238(N])S +3360([-color)S +3642(N])S +3076 V +954(*)S +1310([-nolabel])S +1707([-\256ll])S +1929([-interactive])S +2441([image])S +3176 V +9 C +954(*/)S +3376 V +900(main)S +1170(\(argc,)S +1548(argv\))S +3476 V +900(int)S +1175(argc;)S +3576 V +900(char)S +1175(*argv[];)S +3676 V +900({)S +3776 V +1175(CDLPtr)S +1725(cdl;)S +3876 V +1175(char)S +1450(*fname)S +1828(=)S +1936(NULL,)S +2260(*cfname)S +2692(=)S +2800(NULL;)S +3976 V +1175(int)S +1450(i,)S +1612(status)S +1990(=)S +2098(0,)S +2260(fill)S +2530(=)S +2638(0,)S +2800(frame)S +3124(=)S +3232(1,)S +3394(fb)S +3556(=)S +3664(FB_AUTO,)S +4150(zscale)S +4528(=)S +4636(1;)S +4076 V +1175(int)S +1450(color)S +1774(=)S +1882(201,)S +2152(label)S +2476(=)S +2584(1,)S +2746(size)S +3016(=)S +3124(9,)S +3286(interactive)S +3934(=)S +4042(0;)S +4176 V +1175(float)S +1725(z1,)S +1941(z2;)S +4276 V +1175(int)S +1450(fb_w,)S +1774(fb_h,)S +2098(nf;)S +4376 V +1175(unsigned)S +1661(char)S +1931(*pix)S +2201(=)S +2309(NULL;)S +4576 V +1175(/*)S +9 I +1337(Process)S +1649(the)S +1786(command)S +2163(line)S +2325(options.)S +9 C +2667(*/)S +4676 V +1175(if)S +1337(\(argc)S +1661(>)S +1769(1\))S +1931({)S +4776 V +1391(for)S +1607(\(i=1;)S +1931(i)S +2039(<)S +2147(argc;)S +2471(i++\))S +2741({)S +4876 V +1548(if)S +1710(\(strncmp\(argv[i],)S +2682("-color",4\))S +3330(==)S +3492(0\))S +3654(color)S +3978(=)S +4086(atoi)S +4356(\(argv[++i]\);)S +4976 V +1548(else)S +1818(if)S +1980(\(strncmp\(argv[i],)S +2952("-coords",4\))S +3654(==)S +3816(0\))S +3978(cfname)S +4356(=)S +4464(argv[++i];)S +5076 V +1548(else)S +1818(if)S +1980(\(strncmp\(argv[i],)S +2952("-fbconfig",3\))S +3762(==)S +3924(0\))S +4086(fb)S +4248(=)S +4356(atoi)S +4626(\(argv[++i]\);)S +5176 V +1548(else)S +1818(if)S +1980(\(strncmp\(argv[i],)S +2952("-fill",4\))S +3546(==)S +3708(0\))S +3870(fill)S +4140(=)S +4248(1;)S +5276 V +1548(else)S +1818(if)S +1980(\(strncmp\(argv[i],)S +2952("-frame",3\))S +3600(==)S +3762(0\))S +3924(frame)S +4248(=)S +4356(atoi)S +4626(\(argv[++i]\);)S +5376 V +1548(else)S +1818(if)S +1980(\(strncmp\(argv[i],)S +2952("-interactive",4\))S +3924(==)S +4086(0\))S +4248(interactive)S +4896(=)S +5004(1;)S +5476 V +1548(else)S +1818(if)S +1980(\(strncmp\(argv[i],)S +2952("-nolabel",4\))S +3708(==)S +3870(0\))S +4032(label)S +4356(=)S +4464(0;)S +5576 V +1548(else)S +1818(if)S +1980(\(strncmp\(argv[i],)S +2952("-nozscale",4\))S +3762(==)S +3924(0\))S +4086(zscale)S +4464(=)S +4572(0;)S +5676 V +1548(else)S +1818(if)S +1980(\(strncmp\(argv[i],)S +2952("-size",2\))S +3546(==)S +3708(0\))S +3870(size)S +4140(=)S +4248(atoi)S +4518(\(argv[++i]\);)S +5776 V +1391(else)S +5876 V +1607(fname)S +1931(=)S +2039(argv[i];)S +5976 V +1391(})S +6076 V +1175(})S +6276 V +1175(/*)S +9 I +1337(Open)S +1559(the)S +1696(package)S +2023(and)S +2185(a)S +2257(connection)S +2679(to)S +2776(the)S +2913(server.)S +9 C +3215(*/)S +6376 V +1175(if)S +1337(\(!\(cdl)S +1715(=)S +9 B +1823(cdl_open)S +9 C +2222(\(\(char)S +2600(*\)getenv\("IMTDEV"\)\)\))S +3734(\))S +6476 V +1337(exit)S +1607(\(-1\);)S +6676 V +1175(/*)S +9 I +1337(If)S +1419(an)S +1536(image)S +1783(was)S +1950(speci\256ed)S +2292(display)S +2579(it)S +2656(\256rst,)S +2846(otherwise)S +3223(assume)S +3515(the)S +6776 V +1229(*)S +1301(image)S +1548(has)S +1700(already)S +2002(been)S +2199(loaded)S +2471(in)S +2568(the)S +2705(frame)S +2942(and)S +3104(mark)S +3316(that.)S +6876 V +9 C +1229(*/)S +6976 V +1175(if)S +1337(\(fname\))S +1769({)S +7076 V +1391(if)S +1553(\()S +9 B +1607(cdl_isIRAF)S +9 C +2101(\(fname\)\))S +7176 V +1607(status)S +1985(=)S +9 B +2093(cdl_displayIRAF)S +9 C +2802(\(cdl,)S +3126(fname,)S +3504(1,)S +3666(frame,)S +4044(fb,)S +4260(zscale\);)S +7276 V +1391(else)S +1661(if)S +1823(\()S +9 B +1877(cdl_isFITS)S +9 C +2351(\(fname\)\))S +7920 V +EP +%%Page: 28 31 +BP +/slant 0 def +/height 1.000000 def +9 C +9 C +460 V +11 R +2936(- 28 -)S +820 V +9 C +1607(status)S +1985(=)S +9 B +2093(cdl_displayFITS)S +9 C +2782(\(cdl,)S +3106(fname,)S +3484(frame,)S +3862(fb,)S +4078(zscale\);)S +920 V +1391(else)S +1661({)S +1020 V +1450(if)S +1612(\(access)S +2044(\(cfname,)S +2530(F_OK\))S +2854(==)S +3016(0\))S +1120 V +1823(fprintf)S +2255(\(stderr,)S +2741("'%s':)S +3119(unknown)S +3551(image)S +3875(format.\\n",)S +4523(fname\);)S +1220 V +1450(else)S +1320 V +1823(fprintf)S +2255(\(stderr,)S +2741("'%s':)S +3119(image)S +3443(doesn't)S +3875(exist.\\n",)S +4469(fname\);)S +1420 V +1607(status)S +1985(=)S +2093(1;)S +1520 V +1391(})S +1620 V +1391(if)S +1553(\(status\))S +2093(goto)S +2363(err_;)S +1720 V +1175(})S +1283(else)S +1553({)S +1920 V +1391(/*)S +9 I +1553(If)S +1635(we've)S +1872(requested)S +2249(a)S +2321(special)S +2603(frame)S +2840(bu)S +2930 H + (f)show 9 -.5 mul h (f)show +9 I +2976(er,)S +3101(set)S +3228(it)S +3305(now.)S +9 C +3532(*/)S +2020 V +1391(if)S +1553(\(fb)S +1769(>)S +1877(0\))S +2120 V +9 B +1558(cdl_setFBCon\256g)S +9 C +2247(\(cdl,)S +2571(fb\);)S +2320 V +1391(/*)S +9 I +1553(Map)S +1745(the)S +1882(current)S +2174(display)S +2461(frame)S +2698(for)S +2830(use)S +2977(as)S +3084(an)S +3201(image.)S +9 C +3498(*/)S +2420 V +9 B +1391(cdl_mapFrame)S +9 C +2030(\(cdl,)S +2354(frame\);)S +2520 V +1175(})S +2720 V +1175(/*)S +9 I +1337(If)S +1419(a)S +1491(coordinate)S +1908(\256le)S +2045(was)S +2212(speci\256ed)S +2554(read)S +2746(the)S +2883(\256le)S +3020(and)S +3182(mark)S +3394(those)S +2820 V +1229(*)S +1301(coords)S +1573(with)S +1755(points.)S +2920 V +9 C +1229(*/)S +3020 V +1175(if)S +1337(\(cfname\))S +3120 V +9 B +1548(cdl_markCoordsFile)S +9 C +2397(\(cdl,)S +2721(cfname,)S +3153(M_STAR,)S +3585(size,)S +3909(color,)S +4287(label\);)S +3320 V +1175(/*)S +9 I +1337(Lastly,)S +1607(start)S +1799(up)S +1916(an)S +2033(interactive)S +2445(cursor)S +2707(loop)S +2894(if)S +2971(needed.)S +9 C +3303(*/)S +3420 V +1175(if)S +1337(\(interactive\))S +3520 V +1391(tvmInteractive)S +2201(\(cdl,)S +2525(label,)S +2903(fill,)S +3227(color,)S +3605(size\);)S +3720 V +1175(/*)S +9 I +1337(Close)S +1569(the)S +1706(package)S +2033(and)S +2195(clean)S +2417(up.)S +9 C +2584(*/)S +3820 V +900(err_:)S +9 B +1175(cdl_close)S +9 C +1574(\(cdl\);)S +3920 V +1175(exit)S +1445(\(status\);)S +4020 V +900(})S +4220 V +900(/*)S +9 I +1116(TVMINTERACTIVE)S +1878(--)S +1965(Process)S +2277(commands)S +2689(interactively.)S +9 C +3270(*/)S +4420 V +900(tvmInteractive)S +1710(\(cdl,)S +2034(label,)S +2412(fill,)S +2736(color,)S +3114(size\))S +4520 V +900(CDLPtr)S +1450(cdl;)S +4620 V +900(int)S +1175(label,)S +1553(fill,)S +1877(color,)S +2255(size;)S +4720 V +900({)S +4820 V +1175(float)S +1607(angle)S +1931(=)S +2039(0.0,)S +2309(rx,)S +2525(ry,)S +2741(txsize)S +3119(=)S +3227(1.;)S +4920 V +1175(int)S +1607(nx,)S +1823(ny,)S +2039(i,)S +2201(x,)S +2363(y,)S +2525(x2,)S +2741(y2,)S +2957(wcs;)S +5020 V +1175(int)S +1607(number=1,)S +2147(radius=11,)S +2741(xrad=11,)S +3227(yrad=6,)S +3659(nannuli=3,)S +4253(sep=5;)S +5120 V +1175(char)S +1607(key,)S +1877(cmd[SZ_NAME],)S +2633(str[SZ_NAME];)S +5220 V +1175(unsigned)S +1661(char)S +1931(*pix;)S +5420 V +1175(/*)S +9 I +1337(Process)S +1649(commands)S +2061(until)S +2253(a)S +2325('q')S +2457(keystroke)S +2824(is)S +2911(hit.)S +9 C +3083(*/)S +5520 V +1175(while)S +1499(\()S +9 B +1553(cdl_readCursor)S +9 C +2217(\(cdl,)S +2541(0,)S +2703(&rx,)S +2973(&ry,)S +3243(&wcs,)S +3567(&key\))S +3891(!=)S +4053('q'\))S +4323({)S +5620 V +1391(x)S +1499(=)S +1607(\(int\))S +1931(\(rx)S +2147(+)S +2255(0.5\);)S +2550(/*)S +9 I +2712(convert)S +3009(to)S +3106(int)S +3228(pixels)S +9 C +3492(*/)S +5720 V +1391(y)S +1499(=)S +1607(\(int\))S +1931(\(ry)S +2147(+)S +2255(0.5\);)S +5920 V +1391(switch)S +1769(\(key\))S +2093({)S +6020 V +1391(case)S +1661(':':)S +2550(/*)S +9 I +2712(process)S +3014(a)S +3086(colon)S +3313(command)S +9 C +3717(*/)S +6120 V +1450(putchar)S +1882(\(':'\);)S +6220 V +1450(gets)S +1720(\(str\);)S +6320 V +1450(for)S +1666(\(i=0;)S +1990(str[i])S +2368(!=)S +2530(')S +2638(')S +2746(&&)S +2908(str[i];)S +3340(i++\))S +6420 V +1666(cmd[i])S +2044(=)S +2152(str[i];)S +6520 V +1450(cmd[i++])S +1936(=)S +2044(')S +2152(';)S +6720 V +1450(if)S +1612(\(strcmp)S +2044(\(cmd,)S +2368("angle"\))S +2854(==)S +3016(0\))S +3556(angle)S +3880(=)S +3988(atof)S +4258(\(&str[i]\);)S +6820 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("color"\))S +3124(==)S +3286(0\))S +3556(color)S +3880(=)S +3988(atoi)S +4258(\(&str[i]\);)S +6920 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("fill"\))S +3070(==)S +3232(0\))S +3556(fill)S +3826(=)S +3934(atoi)S +4204(\(&str[i]\);)S +7020 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("number"\))S +3178(==)S +3340(0\))S +3556(number)S +3934(=)S +4042(atoi)S +4312(\(&str[i]\);)S +7120 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("nannuli"\))S +3232(==)S +3394(0\))S +3556(nannuli)S +3988(=)S +4096(atoi)S +4366(\(&str[i]\);)S +7220 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("label"\))S +3124(==)S +3286(0\))S +3556(label)S +3880(=)S +3988(atoi)S +4258(\(&str[i]\);)S +7920 V +EP +%%Page: 29 32 +BP +/slant 0 def +/height 1.000000 def +9 C +9 C +460 V +11 R +2936(- 29 -)S +820 V +9 C +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("sep"\))S +3016(==)S +3178(0\))S +3556(sep)S +3772(=)S +3880(atoi)S +4150(\(&str[i]\);)S +920 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("size"\))S +3070(==)S +3232(0\))S +3556(size)S +3826(=)S +3934(atoi)S +4204(\(&str[i]\);)S +1020 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("txsize"\))S +3178(==)S +3340(0\))S +3556(txsize)S +3934(=)S +4042(atof)S +4312(\(&str[i]\);)S +1120 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("xrad"\))S +3070(==)S +3232(0\))S +3556(xrad)S +3826(=)S +3934(atoi)S +4204(\(&str[i]\);)S +1220 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("yrad"\))S +3070(==)S +3232(0\))S +3556(yrad)S +3826(=)S +3934(atoi)S +4204(\(&str[i]\);)S +1320 V +1450(else)S +1720(if)S +1882(\(strcmp)S +2314(\(cmd,)S +2638("print"\))S +3124(==)S +3286(0\))S +3448({)S +1420 V +9 B +1666(cdl_readFrameBu)S +2366 H + (f)show 9 -.5 mul h (f)show +9 B +2421(er)S +9 C +2555(\(cdl,)S +2879(&pix,)S +3203(&nx,)S +3473(&ny\);)S +1520 V +9 B +1666(cdl_printPix)S +9 C +2200(\(cdl,)S +2524(NULL,)S +2848(pix,)S +3118(nx,)S +3334(ny,)S +3550(1\);)S +1620 V +1450(})S +1558(else)S +1828(if)S +1990(\(strcmp)S +2422(\(cmd,)S +2746("snap"\))S +3178(==)S +3340(0\))S +3502({)S +1720 V +9 B +1666(cdl_readFrameBu)S +2366 H + (f)show 9 -.5 mul h (f)show +9 B +2421(er)S +9 C +2555(\(cdl,)S +2879(&pix,)S +3203(&nx,)S +3473(&ny\);)S +1820 V +9 B +1666(cdl_printPixToFile)S +9 C +2450(\(cdl,)S +2774(&str[i],)S +3260(pix,)S +3530(nx,)S +3746(ny,)S +3962(1\);)S +1920 V +1450(})S +1558(else)S +1828(if)S +1990(\(strcmp)S +2422(\(cmd,)S +2746("status"\))S +3286(==)S +3448(0\))S +3610({)S +2020 V +1666(printf)S +2044(\("angle)S +2550(=)S +2658(%-5.3gcolor)S +3375(=)S +3483(%d",)S +3753(angle,)S +4131(color\);)S +2120 V +1666(printf)S +2044(\("fill)S +2550(=)S +2658(%-5dnumber)S +3375(=)S +3483(%d\\n",)S +3861(fill,)S +4185(number\);)S +2220 V +1666(printf)S +2044(\("nannuli)S +2550(=)S +2658(%-5dsep)S +3100(=)S +3208(%d",)S +3478(nannuli,)S +3964(sep\);)S +2320 V +1666(printf)S +2044(\("size)S +2550(=)S +2658(%-5dtxsize)S +3375(=)S +3483(%g\\n",)S +3861(size,)S +4185(txsize\);)S +2420 V +1666(printf)S +2044(\("xrad)S +2550(=)S +2658(%-5dyrad)S +3100(=)S +3208(%d",)S +3478(xrad,)S +3802(yrad\);)S +2520 V +1666(printf)S +2044(\("label)S +2550(=)S +2658(%-5d\\n",)S +3144(label\);)S +2620 V +1450(})S +2720 V +1450(break;)S +2920 V +1391(case)S +1661('?':)S +3020 V +1450(/*)S +1612(......)S +9 I +1936(help)S +2118(procedures)S +9 C +2577(*/)S +3120 V +1450(break;)S +3320 V +1391(case)S +1661('p':)S +2825(/*)S +9 I +2987(plus)S +3164(mark)S +9 C +3375(*/)S +3420 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_PLUS,)S +4779(color\);)S +3520 V +1450(break;)S +3620 V +1391(case)S +1661('x':)S +2825(/*)S +9 I +2987(cross)S +3204(mark)S +9 C +3650(*/)S +3720 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_CROSS,)S +4833(color\);)S +3820 V +1450(break;)S +3920 V +1391(case)S +1661('.':)S +2825(/*)S +9 I +2987(point)S +3199(mark)S +9 C +3650(*/)S +4020 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_POINT,)S +4833(color\);)S +4120 V +1450(break;)S +4220 V +1391(case)S +1661('*':)S +2825(/*)S +9 I +2987(star)S +3154(mark)S +9 C +3375(*/)S +4320 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_STAR,)S +4779(color\);)S +4420 V +1450(break;)S +4520 V +1391(case)S +1661('_':)S +2825(/*)S +9 I +2987(horiz)S +3199(dash)S +3396(mark)S +9 C +3581(*/)S +4620 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_HBLINE,)S +4887(color\);)S +4720 V +1450(break;)S +4820 V +1391(case)S +1661('|':)S +2825(/*)S +9 I +2987(vert)S +3154(dash)S +3351(mark)S +9 C +3650(*/)S +4920 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_VBLINE,)S +4887(color\);)S +5020 V +1450(break;)S +5120 V +1391(case)S +1661('o':)S +2825(/*)S +9 I +2987(circle)S +3219(mark)S +9 C +3650(*/)S +5220 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_CIRCLE|fill,)S +5157(color\);)S +5320 V +1450(break;)S +5420 V +1391(case)S +1661('s':)S +2825(/*)S +9 I +2987(square)S +3259(mark)S +9 C +3650(*/)S +5520 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_BOX|fill,)S +4995(color\);)S +5620 V +1450(break;)S +5720 V +1391(case)S +1661('v':)S +2825(/*)S +9 I +2987(diamond)S +3329(mark)S +9 C +3650(*/)S +5820 V +9 B +1450(cdl_markPoint)S +9 C +2079(\(cdl,)S +2403(x,)S +2565(y,)S +2727(\(label)S +3105(?)S +3213(number++)S +3699(:)S +3807(0\),)S +4023(size,)S +4347(M_DIAMOND|fill,)S +5211(color\);)S +5920 V +1450(break;)S +6120 V +1391(case)S +1661('b':)S +2825(/*)S +9 I +2987(Box)S +9 C +3650(*/)S +6220 V +1450(printf)S +1828(\("Hit)S +2152(another)S +2584(key)S +2800(to)S +2962(define)S +3340(the)S +3556(box...\\n"\);)S +6320 V +1450(\(void\))S +9 B +1828(cdl_readCursor)S +9 C +2492(\(cdl,)S +2816(0,)S +2978(&rx,)S +3248(&ry,)S +3518(&wcs,)S +3842(&key\);)S +6420 V +1450(x2)S +1612(=)S +1720(\(int\))S +2044(\(rx)S +2260(+)S +2368(0.5\);)S +3100(y2)S +3262(=)S +3370(\(int\))S +3694(\(ry)S +3910(+)S +4018(0.5\);)S +6520 V +9 B +1450(cdl_markBox)S +9 C +2024(\(cdl,)S +2348(x,)S +2510(y,)S +2672(x2,)S +2888(y2,)S +3104(fill,)S +3428(color\);)S +6620 V +1450(break;)S +6720 V +1391(case)S +1661('c':)S +2825(/*)S +9 I +2987(Circle)S +9 C +3650(*/)S +6820 V +1450(printf)S +1828(\("Hit)S +2152(another)S +2584(key)S +2800(to)S +2962(set)S +3178(radius)S +3556(...\\n"\);)S +6920 V +1450(\(void\))S +9 B +1828(cdl_readCursor)S +9 C +2492(\(cdl,)S +2816(0,)S +2978(&rx,)S +3248(&ry,)S +3518(&wcs,)S +3842(&key\);)S +7020 V +1450(x2)S +1612(=)S +1720(\(int\))S +2044(\(rx)S +2260(+)S +2368(0.5\);)S +3100(y2)S +3262(=)S +3370(\(int\))S +3694(\(ry)S +3910(+)S +4018(0.5\);)S +7120 V +1450(radius)S +1828(=)S +1936(\(int\))S +2260(sqrt)S +2530(\(\(double\))S +3070(\(\(x2-x\)*\(x2-x\))S +3880(+)S +3988(\(y2-y\)*\(y2-y\)\)\);)S +7220 V +9 B +1450(cdl_markCircle)S +9 C +2109(\(cdl,)S +2433(x,)S +2595(y,)S +2757(radius,)S +3189(fill,)S +3513(color\);)S +7920 V +EP +%%Page: 30 33 +BP +/slant 0 def +/height 1.000000 def +9 C +9 C +460 V +11 R +2936(- 30 -)S +820 V +9 C +1450(break;)S +920 V +1391(case)S +1661('d':)S +2825(/*)S +9 I +2987(Delete)S +3249(marker)S +9 C +3650(*/)S +1020 V +9 B +1450(cdl_deleteMark)S +9 C +2109(\(cdl,)S +2433(x,)S +2595(y\);)S +1120 V +1450(break;)S +1220 V +1391(case)S +1661('e':)S +2825(/*)S +9 I +2987(Ellipse)S +9 C +3375(*/)S +1320 V +9 B +1450(cdl_markEllipse)S +9 C +2134(\(cdl,)S +2458(x,)S +2620(y,)S +2782(xrad,)S +3106(yrad,)S +3430(angle,)S +3808(fill,)S +4132(color\);)S +1420 V +1450(break;)S +1520 V +1391(case)S +1661('l':)S +2825(/*)S +9 I +2987(Line)S +9 C +3650(*/)S +1620 V +1450(printf)S +1828(\("Hit)S +2152(another)S +2584(key)S +2800(to)S +2962(set)S +3178(line)S +3448(endpoint...\\n"\);)S +1720 V +1450(\(void\))S +9 B +1828(cdl_readCursor)S +9 C +2492(\(cdl,)S +2816(0,)S +2978(&rx,)S +3248(&ry,)S +3518(&wcs,)S +3842(&key\);)S +1820 V +1450(x2)S +1612(=)S +1720(\(int\))S +2044(\(rx)S +2260(+)S +2368(0.5\);)S +3100(y2)S +3262(=)S +3370(\(int\))S +3694(\(ry)S +3910(+)S +4018(0.5\);)S +1920 V +9 B +1450(cdl_markLine)S +9 C +2049(\(cdl,)S +2373(x,)S +2535(y,)S +2697(x2,)S +2913(y2,)S +3129(color\);)S +2020 V +1450(break;)S +2120 V +1391(case)S +1661('t':)S +2825(/*)S +9 I +2987(Text)S +3169(string)S +9 C +3650(*/)S +2220 V +1450(printf)S +1828(\("Text)S +2206(string:)S +2638("\);)S +2320 V +1450(gets)S +1720(\(str\);)S +2420 V +9 B +1450(cdl_markText)S +9 C +2049(\(cdl,)S +2373(x,)S +2535(y,)S +2697(str,)S +2967(txsize,)S +3399(angle,)S +3777(color\);)S +2520 V +1450(break;)S +2620 V +1391(case)S +1661('C':)S +2825(/*)S +9 I +2987(Circular)S +3324(annuli)S +9 C +3554(*/)S +2720 V +9 B +1450(cdl_markCircAnnuli)S +9 C +2309(\(cdl,)S +2633(x,)S +2795(y,)S +2957(radius,)S +3389(nannuli,)S +3875(sep,)S +4145(color\);)S +2820 V +1450(break;)S +2920 V +1391(case)S +1661('D':)S +2825(/*)S +9 I +2987(Delete)S +3249(all)S +3371(markers)S +9 C +3666(*/)S +3020 V +9 B +1450(cdl_clearOverlay)S +9 C +2164(\(cdl\);)S +3120 V +1450(break;)S +3220 V +1391(case)S +1661('E':)S +2825(/*)S +9 I +2987(Elliptical)S +3349(annuli)S +9 C +3579(*/)S +3320 V +9 B +1450(cdl_markEllipAnnuli)S +9 C +2324(\(cdl,)S +2648(x,)S +2810(y,)S +2972(xrad,)S +3296(yrad,)S +3620(angle,)S +3998(nannuli,)S +4484(sep,)S +4754(color\);)S +3420 V +1450(break;)S +3520 V +1391(default:)S +3620 V +1450(break;)S +3720 V +1391(})S +3820 V +1175(})S +3920 V +900(})S +7920 V +EP +%%Page: 31 34 +BP +/slant 0 def +/height 1.000000 def +9 C +9 C +480 V +11 R +2936(- 31 -)S +840 V +11 B +900(12.3.)S +1187(Image)S +1512(Mosaic)S +1880(Example)S +976 V +9 R +1260(#include)S +1597(<stdio.h>)S +1076 V +1260(#include)S +1597(<unistd.h>)S +1176 V +1260(#)S +9 B +1305(include)S +1612("cdl.h")S +1376 V +9 R +1260(/*)S +9 I +1357(MOSAIC)S +1714(--)S +1801(Example)S +2143(task)S +2315(to)S +2412(mosaic)S +2694(several)S +2981(images)S +3263(on)S +3380(a)S +3452(display.)S +3762(Demonstrates)S +1476 V +1287(*)S +1359(usage)S +1596(of)S +1693(low-level)S +2050(routines)S +2372(for)S +2504(complex)S +2831(display)S +3118(operations.)S +1576 V +9 R +1287(*/)S +1776 V +1260(main)S +1467(\(argc,)S +1702(argv\))S +1876 V +1260(int)S +1535(argc;)S +1976 V +1260(char)S +1535(*argv[];)S +2076 V +1260({)S +2176 V +1535(CDLPtr)S +2085(cdl;)S +2276 V +1535(char)S +1810(*fname)S +2107(=)S +2184(NULL,)S +2474(title[128];)S +2376 V +1535(int)S +1810(i,)S +1885(j,)S +1960(k,)S +2055(status=0,)S +2405(label=0,)S +2725(frame=1,)S +3080(fb=FB_AUTO,)S +3660(zscale=1;)S +2476 V +1535(int)S +1810(sample=1,)S +2210(pad=0,)S +2485(col=204,)S +2830(imx,)S +3020(imy,)S +3210(bitpix,)S +3470(nimages,)S +3820(nim;)S +2576 V +1535(int)S +1810(ii,)S +1910(xinit,)S +2125(rowx,)S +2360(rowy,)S +2595(nnx,)S +2780(nny,)S +2965(fb_w,)S +3200(fb_h,)S +3415(nf,)S +3540(mx,)S +3705(my,)S +3870(nx,)S +4010(ny;)S +2676 V +1535(\257oat)S +1810(z1,)S +1945(z2;)S +2776 V +1535(unsigned)S +1887(char)S +2069(*pix)S +2256(=)S +2333(NULL;)S +2976 V +1535(/*)S +9 I +1632(Process)S +1944(the)S +2081(command)S +2458(line)S +2620(options.)S +9 R +2935(*/)S +3076 V +1535(if)S +1617(\(argc)S +1829(>)S +1906(1\))S +2008({)S +3176 V +1589(for)S +1721(\(i=1;)S +1923(i)S +1975(<)S +2052(argc;)S +2259(i++\))S +2441({)S +3276 V +1584(if)S +1666(\(strncmp)S +2013(\(argv[i],)S +2338("-fbcon\256g",3\))S +2867(==)S +2994(0\))S +3096(fb=atoi\(argv[++i]\);)S +3376 V +1643(else)S +1810(if)S +1892(\(strncmp)S +2239(\(argv[i],"-frame",3\))S +2976(==)S +3103(0\))S +3205(frame=atoi\(argv[++i]\);)S +3476 V +1643(else)S +1810(if)S +1892(\(strncmp)S +2239(\(argv[i],"-color",3\))S +2951(==)S +3078(0\))S +3180(col=atoi\(argv[++i]\);)S +3576 V +1643(else)S +1810(if)S +1892(\(strncmp)S +2239(\(argv[i],"-label",4\))S +2941(==)S +3068(0\))S +3170(label=1;)S +3676 V +1643(else)S +1810(if)S +1892(\(strncmp)S +2239(\(argv[i],"-nozscale",4\))S +3076(==)S +3203(0\))S +3305(zscale=0;)S +3776 V +1643(else)S +1810(if)S +1892(\(strncmp)S +2239(\(argv[i],"-nx",3\))S +2856(==)S +2983(0\))S +3085(nx=atoi\(argv[++i]\);)S +3876 V +1643(else)S +1810(if)S +1892(\(strncmp)S +2239(\(argv[i],"-ny",3\))S +2856(==)S +2983(0\))S +3085(ny=atoi\(argv[++i]\);)S +3976 V +1643(else)S +1810(if)S +1892(\(strncmp)S +2239(\(argv[i],"-pad",4\))S +2896(==)S +3023(0\))S +3125(pad=atoi\(argv[++i]\);)S +4076 V +1643(else)S +1810(if)S +1892(\(strncmp)S +2239(\(argv[i],"-sample",4\))S +3021(==)S +3148(0\))S +3250(sample=atoi\(argv[++i]\);)S +4176 V +1643(else)S +4276 V +1751(break;)S +4376 V +1589(})S +4476 V +1535(})S +4576 V +1535(nimages)S +1862(=)S +1939(argc)S +2121(-)S +2178(i;)S +4776 V +1535(/*)S +9 I +1632(Open)S +1854(the)S +1991(package)S +2318(and)S +2480(a)S +2552(connection)S +2974(to)S +3071(the)S +3208(server.)S +9 R +3483(*/)S +4876 V +1535(if)S +1617(\(!\(cdl)S +1844(=)S +9 B +1921(cdl_open)S +9 R +2293(\(\(char)S +2535(*\)getenv\("IMTDEV"\)\)\))S +3421(\))S +4976 V +1616(exit)S +1778(\(-1\);)S +5176 V +1535(/*)S +9 I +1632(Clear)S +1864(the)S +2001(frame)S +2238(to)S +2335(begin.)S +9 R +2585(*/)S +5276 V +1535(\(void\))S +9 B +1782(cdl_clearFrame)S +9 R +2414(\(cdl\);)S +5476 V +1535(/*)S +9 I +1632(Loop)S +1844(over)S +2031(each)S +2228(of)S +2325(the)S +2462(images)S +2744(in)S +2841(the)S +2978(list.)S +9 R +3138(*/)S +5576 V +1535(nim)S +1702(=)S +1779(rowx)S +1991(=)S +2068(rowy)S +2280(=)S +2357(nnx)S +2519(=)S +2596(nny)S +2758(=)S +2835(0;)S +5676 V +1535(for)S +1667(\(k=0;)S +1889(k)S +1961(<)S +2038(ny)S +2155(&&)S +2322(nim)S +2489(<)S +2566(nimages;)S +2918(k++\))S +3120({)S +5776 V +1643(rowy)S +1855(+=)S +1982(nny)S +2144(+)S +2221(pad;)S +5876 V +1643(for)S +1775(\(rowx)S +2017(=)S +2094(xinit,)S +2309(j=0;)S +2481(j)S +2533(<)S +2610(nx)S +2727(&&)S +2894(nim)S +3061(<)S +3138(nimages;)S +3490(j++\))S +3672({)S +6076 V +1810(/*)S +9 I +1907(Get)S +2064(the)S +2201(image)S +2448(name)S +2670(for)S +2802(display.)S +9 R +3112(*/)S +6176 V +1810(fname)S +2062(=)S +2139(argv[i++];)S +6376 V +1810(/*)S +9 I +1907(Figure)S +2179(out)S +2321(what)S +2523(kind)S +2705(of)S +2802(image)S +3049(it)S +3126(is)S +3213(and)S +3375(get)S +3512(the)S +3649(pixels.)S +9 R +3909(*/)S +6476 V +1810(if)S +1892(\(cdl_isIRAF)S +2369(\(fname\)\))S +6576 V +1918(status)S +2150(=)S +9 B +2227(cdl_readIRAF)S +9 R +2809(\(fname,)S +3114(1,)S +3209(&pix,)S +3444(&imx,)S +3704(&imy,)S +3964(&bitpix,)S +4294(title\);)S +6676 V +1810(else)S +1977(if)S +2059(\(cdl_isFITS)S +2516(\(fname\)\))S +6776 V +1918(status)S +2150(=)S +9 B +2227(cdl_readFITS)S +9 R +2789(\(fname,)S +3094(&pix,)S +3329(&imx,)S +3589(&imy,)S +3849(&bitpix,)S +4179(title\);)S +6876 V +1810(else)S +1977({)S +6976 V +1918(fprintf\(stderr,)S +2433("'%s':)S +2692(unknown)S +3054(or)S +3156(nonexistant)S +3598(image.\\n",)S +3998(fname\);)S +7076 V +1918(status)S +2150(=)S +2227(1;)S +7176 V +1810(})S +7276 V +1810(if)S +1892(\(status\))S +2211(goto)S +2398(err_;)S +7920 V +EP +%%Page: 32 35 +BP +/slant 0 def +/height 1.000000 def +9 R +9 R +460 V +11 R +2936(- 32 -)S +820 V +9 R +1810(/*)S +9 I +1907(Compute)S +2259(subsampled)S +2711(image)S +2958(size.)S +9 R +3143(*/)S +920 V +1810(if)S +1892(\(sample)S +2204(>)S +2281(1\))S +1020 V +1918(nnx)S +2080(=)S +2157(imx)S +2324(/)S +2376(sample,)S +2681(nny)S +2843(=)S +2920(imy)S +3087(/)S +3139(sample;)S +1120 V +1810(else)S +1220 V +1918(nnx)S +2080(=)S +2157(imx,)S +2347(nny)S +2509(=)S +2586(imy;)S +1420 V +1810(/*)S +9 I +1907(Unless)S +2179(we)S +2306(asked)S +2538(for)S +2670(a)S +2742(speci\256c)S +3039(FB)S +3176(size)S +3338(\256nd)S +3500(one)S +3657(large)S +3874(enough)S +1520 V +1837(*)S +1909(to)S +2006(handle)S +2278(the)S +2415(mosaic.)S +2747(We)S +2889(don't)S +3106(check)S +3338(to)S +3435(be)S +3547(sure)S +3729(what's)S +1620 V +1837(*)S +1909(returned)S +2246(is)S +2333(really)S +2570(large)S +2787(enough.)S +1720 V +9 R +1837(*/)S +1820 V +1810(if)S +1892(\(nim)S +2089(==)S +2216(0)S +2288(&&)S +2455(fb)S +2557(==)S +2684(FB_AUTO\))S +1920 V +9 B +1918(cdl_selectFB)S +9 R +2430(\(cdl,)S +2620(nx*nnx+\(pad*\(nx-1\)\),)S +3450(ny*nny+\(pad*\(ny-1\)\),)S +4280(&fb,)S +4475(&fb_w,)S +4780(&fb_h,)S +5065(&nf,)S +5260(1\);)S +2020 V +1810(else)S +1977({)S +2120 V +9 B +1918(cdl_setFBCon\256g)S +9 R +2580(\(cdl,)S +2770(fb\);)S +2220 V +9 B +1918(cdl_lookupFBSize)S +9 R +2640(\(cdl,)S +2830(fb,)S +2955(&fb_w,)S +3260(&fb_h,)S +3545(&nf\);)S +2320 V +1810(})S +2520 V +1810(/*)S +9 I +1907(De\256ne)S +2169(a)S +2241(WCS)S +2448(for)S +2580(the)S +2717(frame.)S +9 R +2977(*/)S +2620 V +9 B +1810(cdl_setWCS)S +9 R +2307(\(cdl,)S +2497("image)S +2781(mosaic",)S +3123(title,)S +3313(1.,)S +3431(0.,)S +3549(0.,)S +3667(-1.,)S +3815(0.,)S +3933(\(\257oat\))S +4180(ny*imy+\(pad*\(ny+1\)\),)S +5035(1.,)S +5153(255.,)S +5361(1\);)S +2820 V +1810(/*)S +9 I +1907(The)S +2069(\256rst)S +2236(time)S +2418(through)S +2730(\256gure)S +2967(out)S +3109(the)S +3246(placement)S +3643(so)S +3750(the)S +2920 V +1837(*)S +1909(entire)S +2146(mosaic)S +2428(is)S +2515(centered)S +2852(in)S +2949(the)S +3086(frame.)S +3020 V +9 R +1837(*/)S +3120 V +1810(if)S +1919(\(nim)S +2116(==)S +2243(0\))S +2345({)S +3220 V +1918(mx)S +2060(=)S +2137(\(nx)S +2284(*)S +2356(nnx\))S +2548(+)S +2625(pad)S +2782(*)S +2854(\(nx-1\);)S +3320 V +1918(my)S +2060(=)S +2137(\(ny)S +2284(*)S +2356(nny\))S +2548(+)S +2625(pad)S +2782(*)S +2854(\(ny-1\);)S +3420 V +1918(rowy)S +2130(=)S +2207(\(fb_h)S +2429(-)S +2486(my\))S +2658(/)S +2710(2;)S +3520 V +1918(xinit)S +2110(=)S +2187(rowx)S +2399(=)S +2476(\(fb_w)S +2718(-)S +2775(mx\))S +2947(/)S +2999(2;)S +3620 V +1810(})S +3820 V +1810(/*)S +9 I +1907(Compute)S +2259(the)S +2396(zscaled)S +2688(imaged)S +2980(pixels.)S +9 R +3240(*/)S +3920 V +1810(if)S +1892(\(zscale\))S +2199({)S +4020 V +9 B +1918(cdl_computeZscale)S +9 R +2680(\(cdl,)S +2870(pix,)S +3035(imx)S +3202(,imy,)S +3415(bitpix,)S +3675(&z1,)S +3880(&z2\);)S +4120 V +9 B +1918(cdl_zscaleImage)S +9 R +2570(\(cdl,)S +2760(&pix,)S +2995(imx)S +3162(,imy,)S +3375(bitpix,)S +3635(z1,)S +3770(z2\);)S +4220 V +1810(})S +4420 V +1810(/*)S +9 I +1907(Subsample)S +2324(the)S +2461(image)S +2708(if)S +2785(requested.)S +9 R +3185(*/)S +4520 V +1810(if)S +1892(\(sample)S +2204(>)S +2281(1\))S +2383({)S +4620 V +1918(int)S +2040(l,)S +2115(m,)S +2235(n=0;)S +4720 V +1918(for)S +2050(\(l=0;)S +2252(l)S +2304(<)S +2381(imy;)S +2573(l+=sample\))S +4820 V +2026(for)S +2158(\(m=0;)S +2405(m)S +2502(<)S +2579(imx;)S +2771(m+=sample\))S +4920 V +2134(pix[n++])S +2481(=)S +2558(pix[\(l*imx\)+m];)S +5020 V +1810(})S +5220 V +1810(/*)S +9 I +1907(Write)S +2134(the)S +2271(image)S +2518(to)S +2615(the)S +2752(frame)S +2989(bu)S +3079 H + (f)show 9 -.5 mul h (f)show +9 I +3125(er.)S +9 R +3250(*/)S +5320 V +1810(if)S +1892(\()S +9 B +1922(cdl_writeSubRaster)S +9 R +2714(\(cdl,)S +2904(rowx,)S +3139(rowy,)S +3374(nnx,)S +3559(nny,)S +3744(pix\)\))S +3946(goto)S +4133(err_;)S +5520 V +1810(/*)S +9 I +1907(Draw)S +2139(the)S +2276(image)S +2523(name)S +2745(as)S +2852(a)S +2924(label.)S +9 R +3154(*/)S +5620 V +1810(if)S +1892(\(label\))S +9 B +2154(cdl_markText)S +9 R +2726(\(cdl,)S +2916(rowx+10,)S +3291(rowy+10,)S +3666(fname,)S +3941(1.,)S +4059(0.,)S +4177(col\);)S +5820 V +1810(nim++;)S +2360(rowx)S +2572(+=)S +2699(nnx)S +2861(+)S +2938(pad;)S +5920 V +1643(})S +6020 V +1535(})S +6220 V +1535(/*)S +9 I +1632(Close)S +1864(the)S +2001(package)S +2328(and)S +2490(clean)S +2712(up.)S +9 R +2852(*/)S +6320 V +1260(err_:)S +9 B +1535(cdl_close)S +9 R +1907(\(cdl\);)S +6420 V +1535(exit)S +1697(\(status\);)S +6520 V +1260(})S +7920 V +EP +%%Page: 33 36 +BP +/slant 0 def +/height 1.000000 def +9 R +9 R +480 V +11 R +2936(- 33 -)S +840 V +11 B +900(13.)S +1104(Fortran)S +1541(Interface)S +1998(Summary)S +996 V +11 R +1260(include)S +1649(")S +11 B +1694(cdlftn.inc)S +11 R +2138(")S +1296 V +11 B +1910(cfopen)S +11 R +2386(\(imtdev,)S +2789(ier\))S +1416 V +11 B +1645(cfdisplayPix)S +11 R +2386(\(pix,)S +2624(nx,)S +2795(ny,)S +2966(bitpix,)S +3285(frame,)S +3600(fbcon\256g,)S +4027(zscale,)S +4354(ier\))S +1536 V +11 B +1589(cfreadCursor)S +11 R +2386(\(sample,)S +2794(x,)S +2910(y,)S +3026(key,)S +3245(ier\))S +1656 V +11 B +1675(cfsetCursor)S +11 R +2386(\(x,)S +2538(y,)S +2654(wcs,)S +2885(ier\))S +1776 V +11 B +1759(cfsetWCS)S +11 R +2386(\(name,)S +2720(title,)S +2953(a,)S +3062(b,)S +3178(c,)S +3287(d,)S +3403(tx,)S +3550(ty,)S +3697(z1,)S +3861(z2,)S +4025(zt,)S +4165(ier\))S +1896 V +11 B +1747(cfgetWCS)S +11 R +2386(\(name,)S +2720(title,)S +2953(a,)S +3062(b,)S +3178(c,)S +3287(d,)S +3403(tx,)S +3550(ty,)S +3697(z1,)S +3861(z2,)S +4025(zt,)S +4165(ier\))S +2016 V +11 B +1701(cfsetFrame)S +11 R +2386(\(frame\))S +2136 V +11 B +1598(cfclearFrame)S +11 R +2386(\(ier\))S +2256 V +11 B +1912(cfclose)S +11 R +2386(\(\))S +2496 V +11 B +1580(cfsetMapping)S +11 R +2386(\(region,)S +2763(sx,sy,snx,sny,)S +3410(dx,dy,dnx,dny,)S +4105(ref,)S +4286(ier\))S +2616 V +11 B +1568(cfgetMapping)S +11 R +2386(\(region,)S +2763(sx,sy,snx,sny,)S +3410(dx,dy,dnx,dny,)S +4105(ref,)S +4286(ier\))S +2736 V +11 B +1642(cfqueryMap)S +11 R +2386(\(wcs,)S +2653(region,)S +2994(sx,sy,snx,sny,)S +3641(dx,dy,dnx,dny,)S +4336(objref,)S +4658(ier\))S +2976 V +11 B +1530(cfdisplayIRAF)S +11 R +2386(\(fname,)S +2756(band,)S +3030(frame,)S +3345(fbcon\256g,)S +3772(zscale,)S +4099(ier\))S +3096 V +11 B +1800(c\256sIRAF)S +11 R +2386(\(fname,)S +2756(isiraf\))S +3216 V +11 B +1656(cfreadIRAF)S +11 R +2386(\(fname,)S +2756(band,)S +3030(pix,)S +3232(nx,)S +3403(ny,)S +3574(bitpix,)S +3893(title,)S +4126(ier\))S +3456 V +11 B +1552(cfdisplayFITS)S +11 R +2386(\(fname,)S +2756(frame,)S +3071(fbcon\256g,)S +3498(zscale,)S +3825(ier\))S +3576 V +11 B +1822(c\256sFITS)S +11 R +2386(\(fname,)S +2756(is\256ts\))S +3696 V +11 B +1678(cfreadFITS)S +11 R +2386(\(fname,)S +2756(pix,)S +2958(nx,)S +3129(ny,)S +3300(bitpix,)S +3619(title,)S +3852(ier\))S +3936 V +11 B +1436(cfcomputeZscale)S +11 R +2386(\(pix,)S +2624(nx,)S +2795(ny,)S +2966(bitpix,)S +3285(z1,)S +3449(z2\))S +4056 V +11 B +1572(cfzscaleImage)S +11 R +2386(\(pix,)S +2624(nx,)S +2795(ny,)S +2966(bitpix,)S +3285(z1,)S +3449(z2\))S +4296 V +11 B +1745(cfprintPix)S +11 R +2386(\(cmd,)S +2672(pix,)S +2874(nx,)S +3045(ny,)S +3216(annotate,)S +3648(ier\))S +4416 V +11 B +1439(cfprintPixToFile)S +11 R +2386(\(fname,)S +2756(pix,)S +2958(nx,)S +3129(ny,)S +3300(annotate,)S +3732(ier\))S +4656 V +11 B +1632(cfreadImage)S +11 R +2386(\(pix,)S +2624(nx,)S +2795(ny,)S +2966(ier\))S +4776 V +11 B +1316(cfreadFrameBu)S +2058 H + (f)show 11 -.5 mul h (f)show +11 B +2125(er)S +11 R +2386(\(pix,)S +2624(nx,)S +2795(ny,)S +2966(ier\))S +4896 V +11 B +1429(cfreadSubRaster)S +11 R +2386(\(lx,)S +2569(ly,)S +2716(nx,)S +2887(ny,)S +3058(pix,)S +3260(ier\))S +5016 V +11 B +1400(cfwriteSubRaster)S +11 R +2386(\(lx,)S +2569(ly,)S +2716(nx,)S +2887(ny,)S +3058(pix,)S +3260(ier\))S +5256 V +11 B +1742(cfselectFB)S +11 R +2386(\(nx,)S +2593(ny,)S +2764(fb,)S +2916(w,)S +3056(h,)S +3172(nf,)S +3324(reset\))S +5376 V +11 B +1556(cfsetFBCon\256g)S +11 R +2386(\(con\256gno\))S +5496 V +11 B +1544(cfgetFBCon\256g)S +11 R +2386(\(con\256gno,)S +2868(w,)S +3008(h,)S +3124(nf\))S +5616 V +11 B +1485(c\257ookupFBSize)S +11 R +2386(\(con\256gno,)S +2868(w,)S +3008(h,)S +3124(nf\))S +5856 V +11 B +1654(cfsetZTrans)S +11 R +2386(\(ztrans\))S +5976 V +11 B +1692(cfsetZScale)S +11 R +2386(\(z1,)S +2586(z2\))S +6096 V +11 B +1661(cfsetSample)S +11 R +2386(\(nsample\))S +6216 V +11 B +1403(cfsetSampleLines)S +11 R +2386(\(nlines\))S +6336 V +11 B +1596(cfsetContrast)S +11 R +2386(\(contrast\))S +6456 V +11 B +1737(cfsetName)S +11 R +2386(\(imname\))S +6576 V +11 B +1790(cfsetTitle)S +11 R +2386(\(imtitle\))S +6816 V +11 B +1689(cfgetFrame)S +11 R +2386(\(frame\))S +6936 V +11 B +1642(cfgetZTrans)S +11 R +2386(\(ztrans\))S +7056 V +11 B +1680(cfgetZScale)S +11 R +2386(\(z1,)S +2586(z2\))S +7176 V +11 B +1649(cfgetSample)S +11 R +2386(\(nsample\))S +7296 V +11 B +1391(cfgetSampleLines)S +11 R +2386(\(nlines\))S +7920 V +EP +%%Page: 34 37 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 34 -)S +840 V +11 B +1584(cfgetContrast)S +11 R +2386(\(contrast\))S +960 V +11 B +1725(cfgetName)S +11 R +2386(\(imname\))S +1080 V +11 B +1778(cfgetTitle)S +11 R +2386(\(imtitle\))S +1320 V +11 B +1620(cfmapFrame)S +11 R +2386(\(frame,)S +2737(ier\))S +1440 V +11 B +1630(cfmarkPoint)S +11 R +2386(\(x,)S +2538(y,)S +2654(number,)S +3050(size,)S +3281(type,)S +3531(color,)S +3817(ier\))S +1560 V +11 B +1429(cfmarkcoords\256le)S +11 R +2386(\(fname,)S +2756(type,)S +3006(size,)S +3237(color,)S +3523(label,)S +3797(ier\))S +1680 V +11 B +1360(cfmarkPointLabel)S +11 R +2386(\(x,)S +2538(y,)S +2654(label,)S +2928(size,)S +3159(type,)S +3409(color,)S +3695(ier\))S +1800 V +11 B +1666(cfmarkLine)S +11 R +2386(\(xs,)S +2581(ys,)S +2740(xe,)S +2904(ye,)S +3068(color,)S +3354(ier\))S +1920 V +11 B +1697(cfmarkBox)S +11 R +2386(\(lx,)S +2569(ly,)S +2716(ux,)S +2887(uy,)S +3058(\256ll,)S +3243(color,)S +3529(ier\))S +2040 V +11 B +1501(cfmarkPolygon)S +11 R +2386(\(xarray,)S +2761(yarray,)S +3100(npts,)S +3345(\256ll,)S +3530(color,)S +3816(ier\))S +2160 V +11 B +1501(cfmarkPolyline)S +11 R +2386(\(xarray,)S +2761(yarray,)S +3100(npts,)S +3345(color,)S +3631(ier\))S +2280 V +11 B +1596(cfmarkCircle)S +11 R +2386(\(x,)S +2538(y,)S +2654(radius,)S +2983(\256ll,)S +3168(color,)S +3454(ier\))S +2400 V +11 B +1348(cfmarkCircAnnuli)S +11 R +2386(\(x,)S +2538(y,)S +2654(radius,)S +2983(nannuli,)S +3374(sep,)S +3581(color,)S +3867(ier\))S +2520 V +11 B +1561(cfmarkEllipse)S +11 R +2386(\(x,)S +2538(y,)S +2654(xrad,)S +2909(yrad,)S +3164(rotang,)S +3505(\256ll,)S +3690(color,)S +3976(ier\))S +2640 V +11 B +1325(cfmarkEllipAnnuli)S +11 R +2386(\(x,)S +2538(y,)S +2654(xrad,)S +2909(yrad,)S +3164(ang,)S +3383(nannuli,)S +3774(sep,)S +3981(color,)S +4267(ier\))S +2760 V +11 B +1668(cfmarkText)S +11 R +2386(\(x,)S +2538(y,)S +2654(str,)S +2825(size,)S +3056(angle,)S +3354(color,)S +3640(ier\))S +2880 V +11 B +1821(cfsetfont)S +3000 V +1565(cfsettextwidth)S +11 R +2386(\(width\))S +3120 V +11 B +1709(cfsetlwidth)S +11 R +2386(\(width\))S +3240 V +11 B +1766(cfsetlstyle)S +11 R +2386(\(style\))S +3360 V +11 B +1596(cfdeleteMark)S +11 R +2386(\(x,)S +2538(y,)S +2654(ier\))S +3480 V +11 B +1529(cfclearOverlay)S +11 R +2386(\(ier\))S +3600 V +11 B +1419(cfredrawOverlay)S +11 R +2386(\(ier\))S +7920 V +EP +%%Page: 35 38 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 35 -)S +840 V +11 B +900(14.)S +1104(Fortran)S +1508(Example)S +1957(Tasks)S +996 V +11 R +1175(The)S +1381(examples)S +1831(shown)S +2154(here)S +2377(are)S +2545(for)S +2708(demonstration)S +3374(purposes)S +3801(only.)S +4095(They)S +4357(are)S +4526(based)S +4812(on)S +4959(work-)S +1116 V +900(ing)S +1079(example)S +1488(tasks)S +1746(in)S +1870(the)S +2042(CDL)S +2300(source)S +11 I +2622(examples)S +11 R +3066(subdirectory,)S +3679(see)S +3855(the)S +4026(programs)S +4477(there)S +4732(for)S +4896(the)S +5067(full)S +1236 V +900(program)S +1304(listing.)S +1596 V +11 B +900(14.1.)S +1187(Display)S +1576(Example)S +1796 V +9 C +1260(C)S +1368(========================================================================)S +1896 V +1260(C)S +1422(FDISPLAY)S +1908(--)S +2070(Example)S +2502(fortran)S +2934(program)S +3366(showing)S +3798(the)S +4014(use)S +4230(of)S +4392(the)S +4608(Client)S +1996 V +1260(C)S +1422(Display)S +1854(Library)S +2286(\(CDL\))S +2610(Fortran)S +3042(interface)S +3582(for)S +3798(displaying)S +4392(images.)S +2096 V +1260(C)S +1368(========================================================================)S +2296 V +1535(PROGRAM)S +1967(FDISPLAY)S +2396 V +1535(character*64)S +2345(imname)S +2596 V +1260(C)S +9 I +1535(Initialize)S +1882(the)S +2019(CDL)S +2221(package)S +2696 V +9 C +1535(call)S +9 B +1805(cfopen)S +9 C +2114(\(0,)S +2330(ier\))S +2796 V +1535(if)S +1697(\(ier)S +1967(.gt.)S +2237(0\))S +2399(then)S +2896 V +1751(write)S +2075(\(*,*\))S +2399('open:)S +2777(Error)S +3101(return)S +3479(from)S +3749(CDL')S +2996 V +1751(goto)S +2021(999)S +3096 V +1535(endif)S +3296 V +1535(write)S +1859(\(*,)S +2075("\('Image)S +2561(Name:)S +2885(',)S +3047($\)"\))S +3396 V +1535(read)S +1805(\(5,)S +2021(*\))S +2183(imname)S +3496 V +1535(write)S +1859(\(*,)S +2075("\('Frame)S +2561(Number:)S +2993(',)S +3155($\)"\))S +3596 V +1535(read)S +1805(\(5,)S +2021(*\))S +2183(iframe)S +3696 V +1535(write)S +1859(\(*,)S +2075("\('Frame)S +2561(buffer)S +2939(configuration)S +3695(number:)S +4127(',)S +4289($\)"\))S +3796 V +1535(read)S +1805(\(5,)S +2021(*\))S +2183(ifb)S +3996 V +1260(C)S +9 I +1535(If)S +1617(we've)S +1854(got)S +1996(a)S +2068(FITS)S +2275(format)S +2542(image,)S +2812(go)S +2929(ahead)S +3176(and)S +3338(display)S +3625(it.)S +4096 V +9 C +1535(call)S +9 B +1805(c\256sFITS)S +9 C +2184(\(imname,)S +2670(isfits\))S +4196 V +1535(if)S +1697(\(isfits)S +2129(.gt.)S +2399(0\))S +2561(then)S +4296 V +1751(call)S +9 B +2021(cfdisplayFITS)S +9 C +2620(\(imname,)S +3106(iframe,)S +3538(ifb,)S +3808(1,)S +3970(ier\))S +4396 V +1535(else)S +4496 V +1260(C)S +9 I +1751(We've)S +2003(got)S +2145(an)S +2262(IRAF)S +2484(format)S +2751(image,)S +3021(go)S +3138(ahead)S +3385(and)S +3547(display)S +3834(it.)S +4596 V +9 C +1751(call)S +9 B +2021(c\256sIRAF)S +9 C +2420(\(imname,)S +2906(isiraf\))S +4696 V +1751(if)S +1913(\(isiraf)S +2345(.gt.)S +2615(0\))S +2777(then)S +4796 V +1967(call)S +9 B +2237(cfdisplayIRAF)S +9 C +2856(\(imname,)S +3342(1,)S +3504(iframe,)S +3936(ifb,)S +4206(1,)S +4368(ier\))S +4896 V +1751(else)S +4996 V +1260(C)S +9 I +1810(Unrecognized)S +2342(image,)S +2612(punt)S +2799(and)S +2961(exit.)S +5096 V +9 C +1967(write)S +2291(\(*,*\))S +2615('Unrecognized)S +3371(image)S +3695(format')S +5196 V +1751(endif)S +5296 V +1535(endif)S +5496 V +1260(C)S +9 I +1535(Clean)S +1777(up)S +1894(and)S +2056(exit.)S +5596 V +9 C +1260(999)S +1535(continue)S +5696 V +1535(call)S +9 B +1805(cfclose)S +9 C +2114(\(ier\))S +5796 V +1535(end)S +7920 V +EP +%%Page: 36 39 +BP +/slant 0 def +/height 1.000000 def +9 C +9 C +480 V +11 R +2936(- 36 -)S +840 V +11 B +900(14.2.)S +1187(Interactive)S +1730(Graphics)S +2198(Overlay)S +2609(Example)S +1040 V +9 C +1260(C)S +1368(==========================================================================)S +1140 V +1260(C)S +1422(FTVMARK)S +1854(--)S +2070(Example)S +2502(fortran)S +2934(program)S +3366(showing)S +3798(the)S +4014(use)S +4230(of)S +4392(the)S +4608(Client)S +1240 V +1260(C)S +1422(Display)S +1854(Library)S +2286(\(CDL\))S +2610(Fortran)S +3042(interface)S +3582(for)S +3798(doing)S +4122(graphics)S +4608(overlay.)S +5094(No)S +1340 V +1260(C)S +1422(checking)S +1908(of)S +2070(the)S +2286(error)S +2610(flag)S +2880(is)S +3042(done)S +3312(here)S +3582(for)S +3798(space)S +4122(considerations.)S +1440 V +1260(C)S +1368(==========================================================================)S +1640 V +1535(PROGRAM)S +1967(FTVMARK)S +1740 V +1535(include)S +2085(")S +9 B +2139(cdlftn.inc)S +9 C +2502(")S +1840 V +1535(character*64)S +2360(imname)S +2040 V +1260(C)S +9 I +1535(Initialize)S +1882(the)S +2019(CDL)S +2221(package)S +2140 V +9 C +1535(call)S +9 B +1805(cfopen)S +9 C +2114(\(0,)S +2330(ier\))S +2340 V +1535(write)S +1859(\(*,)S +2075("\('Image)S +2561(Name:)S +2885(',)S +3047($\)"\))S +2440 V +1535(read)S +1805(\(5,)S +2021(*\))S +2183(imname)S +2540 V +1535(write)S +1859(\(*,)S +2075("\('Frame)S +2561(Number:)S +2993(',)S +3155($\)"\))S +2640 V +1535(read)S +1805(\(5,)S +2021(*\))S +2183(iframe)S +2740 V +1535(write)S +1859(\(*,)S +2075("\('Frame)S +2561(buffer)S +2939(configuration)S +3695(number:)S +4127(',)S +4289($\)"\))S +2840 V +1535(read)S +1805(\(5,)S +2021(*\))S +2183(ifb)S +3040 V +1260(C)S +9 I +1535(If)S +1617(we've)S +1854(got)S +1996(a)S +2068(FITS)S +2275(format)S +2542(image,)S +2812(go)S +2929(ahead)S +3176(and)S +3338(display)S +3625(it.)S +3140 V +9 C +1535(call)S +9 B +1805(c\256sFITS)S +9 C +2184(\(imname,)S +2670(isfits\))S +3240 V +1535(if)S +1697(\(isfits)S +2129(.gt.)S +2399(0\))S +2561(then)S +3340 V +1751(call)S +9 B +2021(cfdisplayFITS)S +9 C +2620(\(imname,)S +3106(iframe,)S +3538(ifb,)S +3808(1,)S +3970(ier\))S +3440 V +1535(else)S +3540 V +1260(C)S +9 I +1751(We've)S +2003(got)S +2145(an)S +2262(IRAF)S +2484(format)S +2751(image,)S +3021(go)S +3138(ahead)S +3385(and)S +3547(display)S +3834(it.)S +3640 V +9 C +1751(call)S +9 B +2021(c\256sIRAF)S +9 C +2420(\(imname,)S +2906(isiraf\))S +3740 V +1751(if)S +1913(\(isiraf)S +2345(.gt.)S +2615(0\))S +2777(then)S +3840 V +1967(call)S +9 B +2237(cfdisplayIRAF)S +9 C +2856(\(imname,)S +3342(1,)S +3504(iframe,)S +3936(ifb,)S +4206(1,)S +4368(ier\))S +3940 V +1751(else)S +4040 V +1260(C)S +9 I +1967(No)S +2099(valid)S +2306(image)S +2553(given,)S +2798(so)S +2905(map)S +3087(the)S +3224(current)S +3516(display)S +3803(for)S +3935(marking.)S +4140 V +9 C +1967(call)S +9 B +2237(cfmapFrame)S +9 C +2786(\(iframe\))S +4240 V +1751(endif)S +4340 V +1535(endif)S +4540 V +1260(C)S +9 I +1535(Now)S +1727(that)S +1894(we've)S +2131(got)S +2273(an)S +2390(image)S +2637(displayed)S +3009(or)S +3116(mapped,)S +3451(enter)S +3663(a)S +3735(cursor)S +3997(loop)S +4184(to)S +4281(mark)S +4493(the)S +4630(image.)S +4640 V +9 C +1535(call)S +1805(markInteractive)S +2669(\(\))S +4840 V +1260(C)S +9 I +1535(Clean)S +1777(up)S +1894(and)S +2056(exit)S +4940 V +9 C +1260(999)S +1535(continue)S +5040 V +1535(call)S +9 B +1805(cfclose)S +9 C +2114(\(ier\))S +5140 V +1535(end)S +5340 V +1260(C)S +9 I +1476(MARKINTERACTIVE)S +2303(--)S +2390(Subroutine)S +2812(for)S +2944(processing)S +3361(the)S +3498(cursor)S +3760(loop.)S +5440 V +9 C +1535(subroutine)S +2129(markInteractive)S +2993(\(\))S +5540 V +1535(include)S +2085(")S +9 B +2139(cdlftn.inc)S +9 C +2502(")S +5640 V +1535(real)S +2085(angle,)S +2463(rx,)S +2679(ry,)S +2895(txsize)S +5740 V +1535(integer)S +2360(nx,)S +2576(ny,)S +2792(x,)S +2954(y,)S +3116(x2,)S +3332(y2,)S +3548(fill,)S +3872(size,)S +4196(color)S +5840 V +1535(integer)S +2360(number,)S +2792(radius,)S +3224(xrad,)S +3548(yrad,)S +3872(nannuli,)S +4358(sep)S +5940 V +1535(character)S +2085(key)S +6040 V +1535(character*64)S +2360(cmd,)S +2630(str)S +6240 V +1260(C)S +9 I +1535(Allocate)S +1862(a)S +1934(1024x1024)S +2361(array)S +2588(for)S +2720(pixels.)S +6340 V +9 C +1535(character)S +2085(pix\(1048576\))S +6540 V +1260(C)S +9 I +1535(....Initialize)S +1974(the)S +2111(local)S +2318(parameters)S +2755(to)S +2852(use)S +6740 V +9 C +1260(C)S +9 I +1535(Read)S +1747(a)S +1819(cursor)S +2081(keystroke)S +2448(telling)S +2705(us)S +2812(what)S +3014(to)S +3111(do.)S +6840 V +9 C +1260(10)S +1535(call)S +9 B +1805(cfreadCursor)S +9 C +2379(\(0,)S +2595(rx,)S +2811(ry,)S +3027(key,)S +3297(ier\))S +7040 V +1260(C)S +9 I +1535(Round)S +1797(the)S +1934(real)S +2106(cursor)S +2368(position)S +2685(to)S +2782(integer)S +3064(pixel)S +3266(positions.)S +7140 V +9 C +1751(x)S +1859(=)S +1967(nint)S +2237(\(rx)S +2453(+)S +2561(0.5\))S +7240 V +1751(y)S +1859(=)S +1967(nint)S +2237(\(ry)S +2453(+)S +2561(0.5\))S +7920 V +EP +%%Page: 37 40 +BP +/slant 0 def +/height 1.000000 def +9 C +9 C +460 V +11 R +2936(- 37 -)S +820 V +9 C +1260(C)S +9 I +1535(Check)S +1787(the)S +1924(keystroke)S +2291(and)S +2453(take)S +2630(the)S +2767(appropriate)S +3224(action.)S +920 V +9 C +1260(C)S +9 I +1751(Colon)S +1998(Commands)S +1020 V +9 C +1751(if)S +1913(\(key)S +2183(.eq.)S +2453(':'\))S +2723(then)S +1120 V +1260(C)S +9 I +1810(Read)S +2022(a)S +2094(three)S +2306(character)S +2683(command)S +3060(and)S +3222(value)S +3444(\256eld)S +3626(and)S +3788(process)S +4090(the)S +4227(colon)S +4454(command)S +1220 V +9 C +1810(read)S +2080(\(*,'\(A3,)S +2566(i4\)'\))S +2890(cmd,)S +3160(ival)S +1320 V +1810(if)S +1972(\(cmd\(1:3\))S +2512(.eq.)S +2782('ang'\))S +3160(then)S +1420 V +2026(angle)S +2350(=)S +2458(real)S +2728(\(ival\))S +1520 V +1810(else)S +2080(if)S +2242(\(cmd\(1:3\))S +2782(.eq.)S +3052('col'\))S +3430(then)S +1620 V +2026(color)S +2350(=)S +2458(ival)S +1720 V +1810(else)S +2080(if)S +2242(\(cmd\(1:3\))S +2782(.eq.)S +3052('fil'\))S +3430(then)S +1820 V +2026(fill)S +2296(=)S +2404(ival)S +1920 V +9 I +2085(:)S +2020 V +2085(....and)S +2339(so)S +2446(on)S +2563(to)S +2660(set)S +2787(local)S +2994(variables)S +2120 V +2085(:)S +2220 V +9 R +1810(else)S +1977(if)S +2059(\(cmd\(1:3\))S +2446(.eq.)S +2604('pri'\))S +2821(then)S +2320 V +1260(C)S +9 I +1918(Print)S +2130(contents)S +2457(of)S +2554(the)S +2691(current)S +2983(frame)S +3220(bu)S +3310 H + (f)show 9 -.5 mul h (f)show +9 I +3356(er)S +2420 V +9 R +1918(call)S +9 B +2075(cfreadFrameBu)S +2685 H + (f)show 9 -.5 mul h (f)show +9 B +2740(er)S +9 R +2847(\(pix,)S +3042(nx,)S +3182(ny,)S +3322(ier\))S +2520 V +1918(call)S +9 B +2075(cfprintPix)S +9 R +2492(\("lpr",)S +2746(pix,)S +2911(nx,)S +3051(ny,)S +3191(1,)S +3286(ier\))S +2620 V +1810(else)S +1977(if)S +2059(\(cmd\(1:3\))S +2446(.eq.)S +2604('sta'\))S +2821(then)S +2720 V +9 I +2085(....print)S +2379(out)S +2521(the)S +2658(status)S +2895(\(value\))S +3177(of)S +3274(variables)S +2820 V +9 R +1810(endif)S +3020 V +1260(C)S +9 I +1643(Point)S +1865(Markers)S +3120 V +9 R +1643(else)S +1810(if)S +1892(\(key)S +2079(.eq.)S +2237('p'\))S +2399(then)S +3220 V +1810(call)S +9 B +1967(cfmarkPoint)S +9 R +2479(\(x,)S +2604(y,)S +2699(1,)S +2794(size,)S +2984(M_PLUS,)S +3379(color,)S +3614(ier\))S +3320 V +1643(else)S +1810(if)S +1892(\(key)S +2079(.eq.)S +2237('x'\))S +2399(then)S +3420 V +1810(call)S +9 B +1967(cfmarkPoint)S +9 R +2479(\(x,)S +2604(y,)S +2699(1,)S +2794(size,)S +2984(M_CROSS,)S +3444(color,)S +3679(ier\))S +3520 V +1643(else)S +1810(if)S +1892(\(key)S +2079(.eq.)S +2237('_'\))S +2399(then)S +3620 V +1810(call)S +9 B +1967(cfmarkPoint)S +9 R +2479(\(x,)S +2604(y,)S +2699(1,)S +2794(size,)S +2984(M_HBLINE,)S +3489(color,)S +3724(ier\))S +3720 V +1643(else)S +1810(if)S +1892(\(key)S +2079(.eq.)S +2237('o'\))S +2399(then)S +3820 V +1260(C)S +9 I +1810(Example)S +2152(of)S +2249(a)S +2321(\256lled)S +2528(point)S +2740(marker)S +3920 V +9 R +1810(call)S +9 B +1967(cfmarkPoint)S +9 R +2479(\(x,)S +2604(y,)S +2699(1,)S +2794(size,)S +2984(or\(M_CIRCLE,\256ll\),)S +3737(color,)S +3972(ier\))S +4020 V +9 I +2085(:)S +4120 V +2085(....and)S +2339(so)S +2446(on)S +2563(to)S +2660(set)S +2787(other)S +3004(types)S +3216(of)S +3313(point)S +3525(markers)S +4320 V +9 R +1260(C)S +9 I +1643(Other)S +1880(Markers)S +4420 V +9 R +1643(else)S +1810(if)S +1892(\(key)S +2079(.eq.)S +2237('b'\))S +2399(then)S +4520 V +1810(print)S +2007('\("Hit)S +2246(another)S +2543(key)S +2700(to)S +2797(de\256ne)S +3044(the)S +3181(box)S +3343(...."\)')S +4620 V +1810(call)S +9 B +1967(cfreadCursor)S +9 R +2514(\(0,)S +2639(rx,)S +2764(ry,)S +2889(key,)S +3069(ier\))S +4720 V +1810(x2)S +1927(=)S +2004(nint)S +2171(\(rx)S +2303(+)S +2380(0.5\))S +4820 V +1810(y2)S +1927(=)S +2004(nint)S +2171(\(ry)S +2303(+)S +2380(0.5\))S +4920 V +1810(call)S +9 B +1967(cfmarkBox)S +9 R +2424(\(x,)S +2549(y,)S +2644(x2,)S +2784(y2,)S +2924(\256ll,)S +3074(color,)S +3309(ier\))S +5020 V +1643(else)S +1810(if)S +1892(\(key)S +2079(.eq.)S +2237('d'\))S +2399(then)S +5120 V +1810(call)S +9 B +1967(cfdeleteMark)S +9 R +2509(\(x,)S +2634(y,)S +2729(ier\))S +5220 V +1643(else)S +1810(if)S +1892(\(key)S +2079(.eq.)S +2237('e'\))S +2394(then)S +5320 V +1810(call)S +9 B +1967(cfmarkEllipse)S +9 R +2534(\(x,)S +2659(y,)S +2754(xrad,)S +2964(yrad,)S +3174(angle,)S +3419(\256ll,)S +3569(color,)S +3804(ier\))S +5420 V +1584(else)S +1751(if)S +1833(\(key)S +2020(.eq.)S +2178('t'\))S +2320(then)S +5520 V +1692(print)S +1889('\("Text)S +2178(string:)S +2462(",)S +2549($\)')S +5620 V +1692(read)S +1874(\(*,'\(A64\)'\))S +2304(str)S +5720 V +1692(call)S +9 B +1849(cfmarkText)S +9 R +2331(\(x,)S +2456(y,)S +2551(str,)S +2691(txsize,)S +2951(angle,)S +3196(color,)S +3431(ier\))S +5820 V +9 I +2085(:)S +5920 V +2085(....and)S +2339(so)S +2446(on)S +2563(to)S +2660(set)S +2787(other)S +3004(types)S +3216(of)S +3313(markers)S +6120 V +9 R +1260(C)S +9 I +1643(Quit)S +6220 V +9 R +1643(else)S +1810(if)S +1892(\(key)S +2079(.eq.)S +2237('q'\))S +2399(then)S +6320 V +1810(goto)S +1997(998)S +6420 V +1643(endif)S +6620 V +1260(C)S +9 I +1535(Loop)S +1747(back)S +1944(until)S +2136(we)S +2263(want)S +2465(to)S +2562(quit)S +6720 V +9 R +1535(goto)S +1722(10)S +6820 V +1260(998)S +1535(continue)S +6920 V +1535(end)S +7920 V +EP +%%Page: 38 41 +BP +/slant 0 def +/height 1.000000 def +9 R +9 R +480 V +11 R +2936(- 38 -)S +840 V +11 B +900(15.)S +1104(SPP)S +1333(Interface)S +1790(Summary)S +996 V +11 R +1260(#include)S +1704(")S +11 B +1749(cdlspp.h)S +11 R +2147(")S +1296 V +11 B +1854(cdl_open)S +11 R +2442(\(imtdev,)S +2845(ier\))S +1416 V +11 B +1589(cdl_displayPix)S +11 R +2442(\(pix,)S +2680(nx,)S +2851(ny,)S +3022(bitpix,)S +3341(frame,)S +3656(fbcon\256g,)S +4083(zscale,)S +4410(ier\))S +1536 V +11 B +1533(cdl_readCursor)S +11 R +2442(\(sample,)S +2850(x,)S +2966(y,)S +3082(wcs,)S +3313(key,)S +3532(ier\))S +1656 V +11 B +1619(cdl_setCursor)S +11 R +2442(\(x,)S +2594(y,)S +2710(wcs,)S +2941(ier\))S +1776 V +11 B +1703(cdl_setWCS)S +11 R +2442(\(name,)S +2776(title,)S +3009(a,)S +3118(b,)S +3234(c,)S +3343(d,)S +3459(tx,)S +3606(ty,)S +3753(z1,)S +3917(z2,)S +4081(zt,)S +4221(ier\))S +1896 V +11 B +1691(cdl_getWCS)S +11 R +2442(\(name,)S +2776(title,)S +3009(a,)S +3118(b,)S +3234(c,)S +3343(d,)S +3459(tx,)S +3606(ty,)S +3753(z1,)S +3917(z2,)S +4081(zt,)S +4221(ier\))S +2016 V +11 B +1645(cdl_setFrame)S +11 R +2442(\(frame\))S +2136 V +11 B +1542(cdl_clearFrame)S +11 R +2442(\(ier\))S +2256 V +11 B +1856(cdl_close)S +11 R +2442(\(\))S +2496 V +11 B +1524(cdl_setMapping)S +11 R +2442(\(region,)S +2819(sx,sy,snx,sny,)S +3466(dx,dy,dnx,dny,)S +4161(ref,)S +4342(ier\))S +2616 V +11 B +1512(cdl_getMapping)S +11 R +2442(\(region,)S +2819(sx,sy,snx,sny,)S +3466(dx,dy,dnx,dny,)S +4161(ref,)S +4342(ier\))S +2736 V +11 B +1586(cdl_queryMap)S +11 R +2442(\(wcs,)S +2709(region,)S +3050(sx,sy,snx,sny,)S +3697(dx,dy,dnx,dny,)S +4392(objref,)S +4714(ier\))S +2976 V +11 B +1474(cdl_displayIRAF)S +11 R +2442(\(fname,)S +2812(band,)S +3086(frame,)S +3401(fbcon\256g,)S +3828(zscale,)S +4155(ier\))S +3096 V +11 B +1739(cdl_isIRAF)S +11 R +2442(\(fname,)S +2812(isiraf\))S +3216 V +11 B +1600(cdl_readIRAF)S +11 R +2442(\(fname,)S +2812(band,)S +3086(pix,)S +3288(nx,)S +3459(ny,)S +3630(bitpix,)S +3949(title,)S +4182(ier\))S +3456 V +11 B +1496(cdl_displayFITS)S +11 R +2442(\(fname,)S +2812(frame,)S +3127(fbcon\256g,)S +3554(zscale,)S +3881(ier\))S +3576 V +11 B +1761(cdl_isFITS)S +11 R +2442(\(fname,)S +2812(is\256ts\))S +3696 V +11 B +1622(cdl_readFITS)S +11 R +2442(\(fname,)S +2812(pix,)S +3014(nx,)S +3185(ny,)S +3356(bitpix,)S +3675(title,)S +3908(ier\))S +3936 V +11 B +1380(cdl_computeZscale)S +11 R +2442(\(pix,)S +2680(nx,)S +2851(ny,)S +3022(bitpix,)S +3341(z1,)S +3505(z2\))S +4056 V +11 B +1516(cdl_zscaleImage)S +11 R +2442(\(pix,)S +2680(nx,)S +2851(ny,)S +3022(bitpix,)S +3341(z1,)S +3505(z2\))S +4296 V +11 B +1689(cdl_printPix)S +11 R +2442(\(cmd,)S +2728(pix,)S +2930(nx,)S +3101(ny,)S +3272(annotate,)S +3704(ier\))S +4416 V +11 B +1383(cdl_printPixToFile)S +11 R +2442(\(fname,)S +2812(pix,)S +3014(nx,)S +3185(ny,)S +3356(annotate,)S +3788(ier\))S +4656 V +11 B +1576(cdl_readImage)S +11 R +2442(\(pix,)S +2680(nx,)S +2851(ny,)S +3022(ier\))S +4776 V +11 B +1260(cdl_readFrameBu)S +2114 H + (f)show 11 -.5 mul h (f)show +11 B +2181(er)S +11 R +2442(\(pix,)S +2680(nx,)S +2851(ny,)S +3022(ier\))S +4896 V +11 B +1373(cdl_readSubRaster)S +11 R +2442(\(lx,)S +2625(ly,)S +2772(nx,)S +2943(ny,)S +3114(pix,)S +3316(ier\))S +5016 V +11 B +1344(cdl_writeSubRaster)S +11 R +2442(\(lx,)S +2625(ly,)S +2772(nx,)S +2943(ny,)S +3114(pix,)S +3316(ier\))S +5256 V +11 B +1686(cdl_selectFB)S +11 R +2442(\(nx,)S +2649(ny,)S +2820(fb,)S +2972(w,)S +3112(h,)S +3228(nf,)S +3380(reset\))S +5376 V +11 B +1500(cdl_setFBCon\256g)S +11 R +2442(\(con\256gno\))S +5496 V +11 B +1488(cdl_getFBCon\256g)S +11 R +2442(\(con\256gno,)S +2924(w,)S +3064(h,)S +3180(nf\))S +5616 V +11 B +1424(cdl_lookupFBSize)S +11 R +2442(\(con\256gno,)S +2924(w,)S +3064(h,)S +3180(nf\))S +5856 V +11 B +1598(cdl_setZTrans)S +11 R +2442(\(ztrans\))S +5976 V +11 B +1636(cdl_setZScale)S +11 R +2442(\(z1,)S +2642(z2\))S +6096 V +11 B +1605(cdl_setSample)S +11 R +2442(\(nsample\))S +6216 V +11 B +1347(cdl_setSampleLines)S +11 R +2442(\(nlines\))S +6336 V +11 B +1540(cdl_setContrast)S +11 R +2442(\(contrast\))S +6456 V +11 B +1681(cdl_setName)S +11 R +2442(\(imname\))S +6576 V +11 B +1734(cdl_setTitle)S +11 R +2442(\(imtitle\))S +6816 V +11 B +1633(cdl_getFrame)S +11 R +2442(\(frame\))S +6936 V +11 B +1586(cdl_getZTrans)S +11 R +2442(\(ztrans\))S +7056 V +11 B +1624(cdl_getZScale)S +11 R +2442(\(z1,)S +2642(z2\))S +7176 V +11 B +1593(cdl_getSample)S +11 R +2442(\(nsample\))S +7296 V +11 B +1335(cdl_getSampleLines)S +11 R +2442(\(nlines\))S +7920 V +EP +%%Page: 39 42 +BP +/slant 0 def +/height 1.000000 def +11 R +11 R +480 V +2936(- 39 -)S +840 V +11 B +1528(cdl_getContrast)S +11 R +2442(\(contrast\))S +960 V +11 B +1669(cdl_getName)S +11 R +2442(\(imname\))S +1080 V +11 B +1722(cdl_getTitle)S +11 R +2442(\(imtitle\))S +1320 V +11 B +1564(cdl_mapFrame)S +11 R +2442(\(frame,)S +2793(ier\))S +1440 V +11 B +1306(cdl_markCoordsFile)S +11 R +2442(\(fname,)S +2812(type,)S +3062(size,)S +3293(color,)S +3579(label,)S +3853(ier\))S +1560 V +11 B +1574(cdl_markPoint)S +11 R +2442(\(x,)S +2594(y,)S +2710(number,)S +3106(size,)S +3337(type,)S +3587(color,)S +3873(ier\))S +1680 V +11 B +1304(cdl_markPointLabel)S +11 R +2442(\(x,)S +2594(y,)S +2710(label,)S +2984(size,)S +3215(type,)S +3465(color,)S +3751(ier\))S +1800 V +11 B +1610(cdl_markLine)S +11 R +2442(\(xs,)S +2637(ys,)S +2796(xe,)S +2960(ye,)S +3124(color,)S +3410(ier\))S +1920 V +11 B +1641(cdl_markBox)S +11 R +2442(\(lx,)S +2625(ly,)S +2772(ux,)S +2943(uy,)S +3114(\256ll,)S +3299(color,)S +3585(ier\))S +2040 V +11 B +1445(cdl_markPolygon)S +11 R +2442(\(xarray,)S +2817(yarray,)S +3156(npts,)S +3401(\256ll,)S +3586(color,)S +3872(ier\))S +2160 V +11 B +1445(cdl_markPolyline)S +11 R +2442(\(xarray,)S +2817(yarray,)S +3156(npts,)S +3401(color,)S +3687(ier\))S +2280 V +11 B +1540(cdl_markCircle)S +11 R +2442(\(x,)S +2594(y,)S +2710(radius,)S +3039(\256ll,)S +3224(color,)S +3510(ier\))S +2400 V +11 B +1292(cdl_markCircAnnuli)S +11 R +2442(\(x,)S +2594(y,)S +2710(radius,)S +3039(nannuli,)S +3430(sep,)S +3637(color,)S +3923(ier\))S +2520 V +11 B +1505(cdl_markEllipse)S +11 R +2442(\(x,)S +2594(y,)S +2710(xrad,)S +2965(yrad,)S +3220(rotang,)S +3561(\256ll,)S +3746(color,)S +4032(ier\))S +2640 V +11 B +1269(cdl_markEllipAnnuli)S +11 R +2442(\(x,)S +2594(y,)S +2710(xrad,)S +2965(yrad,)S +3220(ang,)S +3439(nannuli,)S +3830(sep,)S +4037(color,)S +4323(ier\))S +2760 V +11 B +1612(cdl_markText)S +11 R +2442(\(x,)S +2594(y,)S +2710(str,)S +2881(size,)S +3112(angle,)S +3410(color,)S +3696(ier\))S +2880 V +11 B +1734(cdl_setFont)S +11 R +2442(\(font\))S +3000 V +11 B +1440(cdl_setTextWidth)S +11 R +2442(\(width\))S +3120 V +11 B +1438(cdl_setLineWidth)S +11 R +2442(\(width\))S +3240 V +11 B +1507(cdl_setLineStyle)S +11 R +2442(\(style\))S +3360 V +11 B +1540(cdl_deleteMark)S +11 R +2442(\(x,)S +2594(y,)S +2710(ier\))S +3480 V +11 B +1473(cdl_clearOverlay)S +11 R +2442(\(ier\))S +3600 V +11 B +1363(cdl_redrawOverlay)S +11 R +2442(\(ier\))S +3720 V +11 B +1648(cdl_setDebug)S +11 R +2442(\(level\))S +7920 V +EP +%%Trailer +%%DocumentFonts: Times-Roman Times-Bold Times-Italic Courier Troff +%%Pages: 42 +
\ No newline at end of file diff --git a/vendor/x11iraf/cdl/doc/greek.ps b/vendor/x11iraf/cdl/doc/greek.ps new file mode 100644 index 00000000..ab2728e0 --- /dev/null +++ b/vendor/x11iraf/cdl/doc/greek.ps @@ -0,0 +1,2521 @@ +%!PS +/devppi 300 def +/userppi 72 def +/pagewidth 8.5 def +/devpixtouser { userppi mul devppi div } def +/pagetolandscape 90 def +/setcoords { pagewidth userppi mul 0 translate + pagetolandscape rotate 1 devpixtouser 1 devpixtouser scale } def +/setjoins { 1 setlinejoin 1 setlinecap } def +erasepage initgraphics setcoords setjoins +/getpoint { + currentfile read pop 8#77 and 6 bitshift + currentfile read pop 8#77 and or + currentfile read pop 8#77 and 6 bitshift + currentfile read pop 8#77 and or + } def +/m { getpoint moveto } def +/d { getpoint lineto } def +02 setlinewidth +02 setlinewidth +m WCfG d WDfM d WDfA d WCfG d W@fK d V}fM d VyfM d VufK d VrfG d VpfC +d Voe} d Voes d Vpem d Vrej d Vuef d Vyed d V}ed d W@ef d WCef d WDed +d WDes m VsfG d VrfC d Vpe} d Vpes d Vrem d Vsej m VyfM d VvfK d VsfE +d Vre} d Vres d Vsek d Vvef d Vyed m WCeq d WCeh m WAes d WAeh d W@ef +m V}es d WHes m V?es d WAeq m W@es d WAeo m WFes d WDeo m WGes d WDeq +m VneV m W\e? d W\ed m W^e} d W^ef m WWe? d W`e? d W`ed m Wle{ d Wle} +d Wke} d Wkey d Wney d Wne} d Wle? d Wie? d Wee} d Waey d W`es m WWed +d Weed m WXe? d W\e} m WZe? d W\e{ m W\ef d WXed m W\eh d WZed m W`eh +d Waed m W`ef d Wced m WWeV m W|es d XNes d XNew d XLe{ d XKe} d XFe? +d XCe? d W~e} d Wzey d Wyes d Wyeo d Wzej d W~ef d XCed d XFed d XKef +d XNej m XLeu d XLew d XKe{ m W|ey d Wzeu d Wzem d W|ej m XKes d XKey +d XIe} d XFe? m XCe? d W?e} d W~e{ d W|eu d W|em d W~eh d W?ef d XCed +m WweV m X_es d Xqes d Xqew d Xpe{ d Xne} d Xie? d Xfe? d Xae} d X^ey +d X\es d X\eo d X^ej d Xaef d Xfed d Xied d Xnef d Xqej m Xpeu d Xpew +d Xne{ m X_ey d X^eu d X^em d X_ej m Xnes d Xney d Xle} d Xie? m Xfe? +d Xce} d Xae{ d X_eu d X_em d Xaeh d Xcef d Xfed m XZeV m YBfM d YBed +m YCfK d YCef m X}fM d YEfM d YEed m YRe} d YEek m YKes d YUed m YKeq +d YTed m YIeq d YRed m YNe? d YXe? m X}ed d YIed m YNed d YXed m X?fM +d YBfK m Y@fM d YBfI m YOe? d YRe} m YVe? d YRe} m YBef d X?ed m YBeh +d Y@ed m YEeh d YFed m YEef d YHed m YReh d YOed m YQeh d YVed m X}eV +m YefZ m YeeV m ZIfM d ZIed m ZJfK d ZJef m ZLfM d ZLed m ZDfM d Z]fM +d Z]fA m ZLey d ZUey m ZUfA d ZUeq m ZDed d ZQed m ZFfM d ZIfK m ZGfM +d ZIfI m ZNfM d ZLfI m ZOfM d ZLfK m ZUfM d Z]fK m ZYfM d Z]fI m ZZfM +d Z]fG m Z\fM d Z]fA m ZUfA d ZTey d ZUeq m ZUe} d ZRey d ZUeu m ZUe{ +d ZOey d ZUew m ZIef d ZFed m ZIeh d ZGed m ZLeh d ZNed m ZLef d ZOed +m ZDeV m Zte? d Zoe} d Zley d Zjes d Zjeo d Zlej d Zoef d Zted d Zwed +d Z|ef d Z?ej d [@eo d [@es d Z?ey d Z|e} d Zwe? d Zte? m Zmey d Zleu +d Zlem d Zmej m Z}ej d Z?em d Z?eu d Z}ey m Zte? d Zqe} d Zoe{ d Zmeu +d Zmem d Zoeh d Zqef d Zted m Zwed d Zzef d Z|eh d Z}em d Z}eu d Z|e{ +d Zze} d Zwe? m ZieV m [Re? d [Red m [Se} d [Sef m [Me? d [Te? d [Ted +m [Tew d [Ve{ d [We} d [Ze? d [^e? d [ae} d [ce{ d [deu d [ded m [ae{ +d [ceu d [cef m [^e? d [`e} d [aew d [aed m [Med d [Yed m []ed d [hed +m [Oe? d [Re} m [Pe? d [Re{ m [Ref d [Oed m [Reh d [Ped m [Teh d [Ved +m [Tef d [Wed m [aef d [^ed m [aeh d [`ed m [deh d [eed m [def d [ged +m [MeV m [|fI d [|em d [~eh d \@ef d \Ded d \Hed d \Lef d \Nej m [~fI +d [~ek d \@eh m [|fI d \@fM d \@ek d \Bef d \Ded m [we? d \He? m [weV +m \TfZ m \TeV m ]IfG d ]JfM d ]JfA d ]IfG d ]FfK d ]AfM d \|fM d \wfK +d \tfG d \tfA d \ve} d \{ey d ]Deu d ]Ges d ]Ieo d ]Iej d ]Gef m \vfA +d \we} d \{e{ d ]Dew d ]Geu d ]Ieq m \wfK d \vfG d \vfC d \we? d \{e} +d ]Dey d ]Ieu d ]Jeq d ]Jek d ]Ieh d ]Gef d ]Ced d \~ed d \yef d \vej +d \teo d \ted d \vej m \seV m ]\es d ]oes d ]oew d ]me{ d ]ke} d ]fe? +d ]ce? d ]^e} d ][ey d ]Yes d ]Yeo d ][ej d ]^ef d ]ced d ]fed d ]kef +d ]oej m ]meu d ]mew d ]ke{ m ]\ey d ][eu d ][em d ]\ej m ]kes d ]key +d ]je} d ]fe? m ]ce? d ]`e} d ]^e{ d ]\eu d ]\em d ]^eh d ]`ef d ]ced +m ]WeV m ^AfI d ^Aem d ^Beh d ^Eef d ^Ied d ^Led d ^Pef d ^Rej m ^BfI +d ^Bek d ^Eeh m ^AfI d ^EfM d ^Eek d ^Fef d ^Ied m ]{e? d ^Le? m ]{eV +m Fwcf d Fycd d Fwcb d Fvcd d Fvcf d Fwcj d Fycl d F~cn d GDcn d GIcl +d GJch d GJcb d GIc^ d GDc\ d F?c\ m GDcn d GGcl d GIch d GIcb d GGc^ +d GDc\ m GDc\ d GGcZ d GJcV d GLcS d GLcM d GJcI d GIcG d GDcE d F~cE +d FycG d FwcI d FvcM d FvcO d FwcQ d FycO d FwcM m GIcX d GJcS d GJcM +d GIcI d GGcG d GDcE m Ftbw m G\cf d G]cd d G\cb d GZcd d GZcf d G\cj +d G]cl d Gbcn d Gicn d Gmcl d Gocj d Gpcf d Gpcb d Goc^ d GjcZ d GbcV +d G_cU d G\cQ d GZcK d GZcE m Gicn d Glcl d Gmcj d Gocf d Gocb d Gmc^ +d GicZ d GbcV m GZcI d G\cK d G_cK d GgcG d GlcG d GocI d GpcK m G_cK +d GgcE d GmcE d GocG d GpcK d GpcO m GYbw m G}c{ m G}bw m H\c{ m H\bw +m FwbW d FybU d FwbS d FvbU d FvbW d Fwb[ d Fyb] d F~b^ d GDb^ d GIb] +d GJbY d GJbS d GIbO d GDbM d F?bM m GDb^ d GGb] d GIbY d GIbS d GGbO +d GDbM m GDbM d GGbK d GJbG d GLbC d GLa} d GJaz d GIax d GDav d F~av +d Fyax d Fwaz d Fva} d Fva? d FwbA d Fya? d Fwa} m GIbI d GJbC d GJa} +d GIaz d GGax d GDav m Ftah m G\bW d G]bU d G\bS d GZbU d GZbW d G\b[ +d G]b] d Gbb^ d Gib^ d Gmb] d GobY d GobS d GmbO d GibM d GdbM m Gib^ +d Glb] d GmbY d GmbS d GlbO d GibM m GibM d GlbK d GobG d GpbC d Gpa} +d Goaz d Gmax d Giav d Gbav d G]ax d G\az d GZa} d GZa? d G\bA d G]a? +d G\a} m GmbI d GobC d Goa} d Gmaz d Glax d Giav m GYah m G}bl m G}ah +m H\bl m H\ah m ICb^ d I@b[ d ICbC d IFb[ d ICb^ m ICb[ d ICbO m ICaz +d I@ax d ICav d IFax d ICaz m H{ah m FwaG d FyaE d FwaC d FvaE d FvaG +d FwaK d FyaM d F~aO d GDaO d GIaM d GJaI d GJaC d GIa@ d GD`~ d F?`~ +m GDaO d GGaM d GIaI d GIaC d GGa@ +stroke +m GGa@ d GD`~ m GD`~ d GG`| d GJ`x d GL`t d GL`n d GJ`j d GI`h d GD`f +d F~`f d Fy`h d Fw`j d Fv`n d Fv`p d Fw`r d Fy`p d Fw`n m GI`z d GJ`t +d GJ`n d GI`j d GG`h d GD`f m Ft`Y m GiaK d Gi`f m GjaO d Gj`f m GjaO +d GY`r d Gr`r m Gd`f d Go`f m GY`Y m G}a] m G}`Y m H\a] m H\`Y m ICaB +d I@a@ d IC`~ d IFa@ d ICaB m IC`f d I@`h d IC`j d IF`h d IF`d d IC`a +d I@`_ m H{`Y m Fw_x d Fy_v d Fw_t d Fv_v d Fv_x d Fw_| d Fy_~ d F~`@ +d GD`@ d GI_~ d GJ_z d GJ_t d GI_p d GD_n d F?_n m GD`@ d GG_~ d GI_z +d GI_t d GG_p d GD_n m GD_n d GG_l d GJ_i d GL_e d GL__ d GJ_[ d GI_Y +d GD_W d F~_W d Fy_Y d Fw_[ d Fv__ d Fv_a d Fw_c d Fy_a d Fw__ m GI_j +d GJ_e d GJ__ d GI_[ d GG_Y d GD_W m Ft_I m G]`@ d GZ_l m GZ_l d G]_p +d Gb_r d Gg_r d Gl_p d Go_l d Gp_g d Gp_c d Go_] d Gl_Y d Gg_W d Gb_W +d G]_Y d G\_[ d GZ__ d GZ_a d G\_c d G]_a d G\__ m Gg_r d Gj_p d Gm_l +d Go_g d Go_c d Gm_] d Gj_Y d Gg_W m G]`@ d Gm`@ m G]_~ d Ge_~ d Gm`@ +m GY_I m G}`M m G}_I m H\`M m H\_I m II`@ d H~_I m IR`@ d IG_I m H~_j +d IS_j m H}__ d IR__ m H{_I m Fw^i d Fy^g d Fw^e d Fv^g d Fv^i d Fw^m +d Fy^o d F~^p d GD^p d GI^o d GJ^k d GJ^e d GI^a d GD^_ d F?^_ m GD^p +d GG^o d GI^k d GI^e d GG^a d GD^_ m GD^_ d GG^] d GJ^Y d GL^U d GL^O +d GJ^K d GI^J d GD^H d F~^H d Fy^J d Fw^K d Fv^O d Fv^Q d Fw^S d Fy^Q +d Fw^O m GI^[ d GJ^U d GJ^O d GI^K d GG^J d GD^H m Ft]z m Gm^k d Gl^i +d Gm^g d Go^i d Go^k d Gm^o d Gj^p d Ge^p d Ga^o d G]^k d G\^g d GZ^_ +d GZ^S d G\^M d G_^J d Gd^H d Gg^H d Gl^J d Go^M d Gp^S d Gp^U d Go^[ +d Gl^_ d Gg^a d Ge^a d Ga^_ d G]^[ d G\^U m Ge^p d Gb^o d G_^k d G]^g +d G\^_ d G\^S d G]^M d Ga^J d Gd^H m Gg^H d Gj^J d Gm^M d Go^S d Go^U +d Gm^[ d Gj^_ d Gg^a m GY]z m G}^~ m G}]z m H\^~ m H\]z m IE^x d IE^@ +m IK^x d IK^@ m IQ^k d IP^i d IQ^g d IS^i d IS^k d IP^o d IK^p d IE^p +d I@^o d H}^k d H}^g d H~^c d I@^a d IC^_ d IL^[ d IP^Y d IS^U m H}^g +d I@^c d IC^a d IL^] d IP^[ d IQ^Y d IS^U d IS^M d IP^J d IK^H d IE^H +d I@^J d H}^M d H}^O d H~^Q d I@^O d H~^M m H{]z m Fw]Y d Fy]W d Fw]U +d Fv]W d Fv]Y d Fw]] d Fy]_ d F~]a d GD]a d GI]_ d GJ][ d GJ]U d GI]R +d GD]P d F?]P m GD]a d GG]_ d GI][ d GI]U d GG]R d GD]P m GD]P d GG]N +d GJ]J d GL]F d GL]@ d GJ\| d GI\z d GD\x d F~\x d Fy\z d Fw\| d Fv]@ +d Fv]B d Fw]D d Fy]B d Fw]@ m GI]L d GJ]F d GJ]@ d GI\| d GG\z d GD\x +m Ft\k m GZ]a d GZ]U m GZ]Y d G\]] d G_]a d Gb]a d Gj][ d Gm][ d Go]] +d Gp]a m G\]] d G_]_ d Gb]_ d Gj][ m Gp]a d Gp][ d Go]U d Gi]L d Gg]H +d Ge]B d Ge\x m Go]U d Gg]L d Ge]H d Gd]B d Gd\x m GY\k m G}]o m G}\k +m H\]o m H\\k m IU]a d H|\x m IC]a d IF]] d IF]Y d IE]U d IB]S d H?]S +d H|]W d H|][ d H~]_ d IA]a d IC]a d IF]_ d IJ]] d IN]] d IR]_ d IU]a +m IP]F d IM]D d IK]@ d IK\| d IN\x d IQ\x d IT\z d IU\~ d IU]B d IR]F +d IP]F m H{\k m Fw\J d Fy\H d Fw\F d Fv\H d Fv\J d Fw\N d Fy\P d F~\R +d GD\R d GI\P d GJ\L d GJ\F d GI\B d GD\@ d F?\@ m GD\R d GG\P d GI\L +d GI\F d GG\B d GD\@ m GD\@ d GG[~ d GJ[{ d GL[w d GL[q d GJ[m d GI[k +d GD[i d F~[i d Fy[k d Fw[m d Fv[q d Fv[s d Fw[u d Fy[s d Fw[q m GI[| +d GJ[w d GJ[q d GI[m d GG[k d GD[i m Ft[[ m Gb\R d G]\P d G\\L d G\\F +d G]\B d Gb\@ d Gi\@ d Gm\B d Go\F d Go\L d Gm\P d Gi\R d Gb\R m Gb\R +d G_\P d G]\L d G]\F d G_\B d Gb\@ m Gi\@ d Gl\B d Gm\F d Gm\L d Gl\P +d Gi\R m Gb\@ d G][~ d G\[| d GZ[y d GZ[q d G\[m d G][k d Gb[i d Gi[i +d Gm[k d Go[m d Gp[q d Gp[y d Go[| d Gm[~ d Gi\@ m Gb\@ d G_[~ d G][| +d G\[y d G\[q d G][m d G_[k d Gb[i m Gi[i d Gl[k d Gm[m d Go[q d Go[y +d Gm[| d Gl[~ d Gi\@ m GY[[ m G}\_ m G}[[ m H\\_ m H\[[ m IT\B d IS\@ +d IT[~ d IU\@ d IU\B d IT\D d IS\D d IR\B d IP[~ d IN[u d IK[o d IH[k +d IF[i d IB[i d H~[k d H|[o d H|[u d H~[y d IF\@ d IH\D d IJ\H d IJ\L +d IH\P d IF\R d IC\P d IB\L d IB\H d IC\B d IF[| d IL[o d IO[k d IS[i +d IT[i d IU[k d IU[m m IB[i d H?[k d H~[o d H~[u d H?[y d IB[| m IB\H +d IC\D d IN[o d IP[k d IS[i m H{[[ m FwZ{ d FyZy d FwZw d FvZy d FvZ{ +d FwZ? d Fy[A d F~[C d GD[C d GI[A d GJZ} d GJZw d GIZs d GDZq d F?Zq +m GD[C d GG[A d GIZ} d GIZw d GGZs d GDZq m GDZq d GGZo d GJZk d GLZg +d GLZa d GJZ^ d GIZ\ d GDZZ d F~ZZ d FyZ\ d FwZ^ d FvZa d FvZc d FwZe +d FyZc d FwZa m GIZm d GJZg d GJZa d GIZ^ d GGZ\ d GDZZ m FtZL m GoZu +d GmZo d GjZk d GeZi d GdZi d G_Zk d G\Zo d GZZu d GZZw d G\Z} d G_[A +d Gd[C d Gg[C d Gl[A d GoZ} d GpZw d GpZk d GoZc d GmZ` d GjZ\ d GeZZ +d GaZZ d G]Z\ d G\Z` d G\Za d G]Zc d G_Za d G]Z` m GdZi d GaZk d G]Zo +d G\Zu d G\Zw d G]Z} +stroke +m G]Z} d Ga[A d Gd[C m Gg[C d Gj[A d GmZ} d GoZw d GoZk d GmZc d GlZ` +d GiZ\ d GeZZ m GYZL m G}[P m G}ZL m H\[P m H\ZL m ICZ? d I@[A d IC[C +d IF[A d IFZ} d ICZy d I@Zw m H{ZL m GDYo d GDYJ m GEYs d GEYJ m GEYs +d FtYV d GMYV m F?YJ d GJYJ m FtX} m GdYs d G_Yq d G\Yk d GZYb d GZY\ +d G\YR d G_YL d GdYJ d GgYJ d GlYL d GoYR d GpY\ d GpYb d GoYk d GlYq +d GgYs d GdYs m GdYs d GaYq d G_Yo d G]Yk d G\Yb d G\Y\ d G]YR d G_YN +d GaYL d GdYJ m GgYJ d GjYL d GlYN d GmYR d GoY\ d GoYb d GmYk d GlYo +d GjYq d GgYs m GYX} m G}ZA m G}X} m H\ZA m H\X} m INY{ d IJYw d IEYq +d IAYi d H?Y` d H?YX d IAYN d IEYF d IJYA d INX} m IJYw d IEYo d ICYi +d IAY` d IAYX d ICYN d IEYH d IJYA m H{X} m GDX` d GDW{ m GEXd d GEW{ +m GEXd d FtXG d GMXG m F?W{ d GJW{ m FtWm m G_X\ d GbX^ d GgXd d GgW{ +m GeXb d GeW{ m G_W{ d GmW{ m GYWm m G}Xq m G}Wm m H\Xq m H\Wm m H}Xl +d IAXh d IEXb d IJXZ d ILXP d ILXI d IJW? d IEWw d IAWq d H}Wm m IAXh +d IEX` d IHXZ d IJXP d IJXI d IHW? d IEWy d IAWq m H{Wm m GDWQ d GDVl +m GEWT d GEVl m GEWT d FtVw d GMVw m F?Vl d GJVl m FtV^ m G\WM d G]WK +d G\WI d GZWK d GZWM d G\WQ d G]WS d GbWT d GiWT d GmWS d GoWQ d GpWM +d GpWI d GoWE d GjWA d GbV} d G_V{ d G\Vw d GZVq d GZVl m GiWT d GlWS +d GmWQ d GoWM d GoWI d GmWE d GiWA d GbV} m GZVp d G\Vq d G_Vq d GgVn +d GlVn d GoVp d GpVq m G_Vq d GgVl d GmVl d GoVn d GpVq d GpVu m GYV^ +m G}Wb m G}V^ m H\Wb m H\V^ m H~WK d ISVp m ISWK d H~Vp m H{V^ m GDVA +d GDU\ m GEVE d GEU\ m GEVE d FtUh d GMUh m F?U\ d GJU\ m FtUO m G\U} +d G]U{ d G\Uy d GZU{ d GZU} d G\VA d G]VC d GbVE d GiVE d GmVC d GoU? +d GoUy d GmUv d GiUt d GdUt m GiVE d GlVC d GmU? d GmUy d GlUv d GiUt +m GiUt d GlUr d GoUn d GpUj d GpUd d GoU` d GmU^ d GiU\ d GbU\ d G]U^ +d G\U` d GZUd d GZUf d G\Uh d G]Uf d G\Ud m GmUp d GoUj d GoUd d GmU` +d GlU^ d GiU\ m GYUO m G}VS m G}UO m H\VS m H\UO m IIU} d IIU\ m H~Un +d ITUn m H~U\ d ITU\ m H{UO m GDTr d GDTM m GETv d GETM m GETv d FtTY +d GMTY m F?TM d GJTM m FtS? m GiTr d GiTM m GjTv d GjTM m GjTv d GYTY +d GrTY m GdTM d GoTM m GYS? m G}UC m G}S? m H\UC m H\S? m ITTU d IRTU +d IOTW d ILT[ d IHTb d IGTd d IDTf d IBTf d H?Td d H~T` d H~T] d H?TY +d IBTW d IDTW d IGTY d IHT[ d ILTb d IOTf d IRTh d ITTh m H{S? m GDSc +d GDR~ m GESf d GER~ m GESf d FtSI d GMSI m F?R~ d GJR~ m FtRp m G]Sf +d GZSS m GZSS d G]SW d GbSY d GgSY d GlSW d GoSS d GpSM d GpSI d GoSC +d GlS@ d GgR~ d GbR~ d G]S@ d G\SB d GZSE d GZSG d G\SI d G]SG d G\SE +m GgSY d GjSW d GmSS d GoSM d GoSI d GmSC d GjS@ d GgR~ m G]Sf d GmSf +m G]Se d GeSe d GmSf m GYRp m G}St m G}Rp m H\St m H\Rp m IIS_ d IIR~ +m H~S_ d ITS_ m H~SO d ITSO m H{Rp m GDRS d GDQn m GERW d GEQn m GERW +d FtQz d GMQz m F?Qn d GJQn m FtQa m GmRQ d GlRO d GmRM d GoRO d GoRQ +d GmRU d GjRW d GeRW d GaRU d G]RQ d G\RM d GZRF d GZQz d G\Qt d G_Qp +d GdQn d GgQn d GlQp d GoQt d GpQz d GpQ| d GoRB d GlRF d GgRH d GeRH +d GaRF d G]RB d G\Q| m GeRW d GbRU d G_RQ d G]RM d G\RF d G\Qz d G]Qt +d GaQp d GdQn m GgQn d GjQp d GmQt d GoQz d GoQ| d GmRB d GjRF d GgRH +m GYQa m G}Re m G}Qa m H\Re m H\Qa m ICQr d I@Qp d ICQn d IFQp d ICQr +m H{Qa m GDQD d GDP_ m GEQH d GEP_ m GEQH d FtPk d GMPk m F?P_ d GJP_ +m FtPQ m GZQH d GZP| m GZQ@ d G\QD d G_QH d GbQH d GjQB d GmQB d GoQD +d GpQH m G\QD d G_QF d GbQF d GjQB m GpQH d GpQB d GoP| d GiPr d GgPo +d GePi d GeP_ m GoP| d GgPr d GePo d GdPi d GdP_ m GYPQ m G}QU m G}PQ +m H\QU m H\PQ m IIQB d IHQ@ d IIP~ d IJQ@ d IIQB m H~Pq d IUPq m IIPc +d IHPa d IIP_ d IJPa d IIPc m H{PQ m GDOu d GDOP m GEOy d GEOP m GEOy +d FtO[ d GMO[ m F?OP d GJOP m FtOB m GbOy d G]Ow d G\Os d G\Om d G]Oi +d GbOg d GiOg d GmOi d GoOm d GoOs d GmOw d GiOy d GbOy m GbOy d G_Ow +d G]Os d G]Om d G_Oi d GbOg m GiOg d GlOi d GmOm d GmOs d GlOw d GiOy +m GbOg d G]Oe d G\Oc d GZO_ d GZOW d G\OT d G]OR d GbOP d GiOP d GmOR +d GoOT d GpOW d GpO_ d GoOc d GmOe d GiOg m GbOg d G_Oe d G]Oc d G\O_ +d G\OW d G]OT d G_OR d GbOP m GiOP d GlOR d GmOT d GoOW d GoO_ d GmOc +d GlOe d GiOg m GYOB m G}PF m G}OB m H\PF m H\OB m IFOy d IAOw d H~Oq +d H}Og d H}Oa d H~OW d IAOR d IFOP d IIOP d INOR d IQOW d ISOa d ISOg +d IQOq d INOw d IIOy d IFOy m IFOy d ICOw d IAOu d I@Oq d H~Og d H~Oa +d I@OW d IAOT d ICOR d IFOP m IIOP d ILOR d INOT d IPOW d IQOa d IQOg +d IPOq d INOu d ILOw d IIOy m H{OB m GDNe d GDN@ m GENi d GEN@ m GENi +d FtNL d GMNL m F?N@ d GJN@ m FtMs m GoN[ d GmNV d GjNR d GeNP d GdNP +d G_NR d G\NV d GZN[ d GZN] d G\Nc d G_Ng d GdNi d GgNi d GlNg d GoNc +d GpN] d GpNR d GoNJ d GmNF d GjNB d GeN@ d GaN@ d G]NB d G\NF d G\NH +d G]NJ d G_NH d G]NF m GdNP d GaNR d G]NV d G\N[ d G\N] d G]Nc d GaNg +d GdNi m GgNi d GjNg d GmNc d GoN] d GoNR d GmNJ d GlNF d GiNB d GeN@ +m GYMs m G}Nw m G}Ms m H\Nw m H\Ms m IANa d IENc d IINi d IIN@ m IHNg +d IHN@ m IAN@ d IPN@ m H{Ms m FyMZ d FvMF m FvMF d FyMJ d F~ML d GBML +d GGMJ d GJMF d GLMA d GLL} d GJLw d GGLs d GBLq d F~Lq d FyLs d FwLu +d FvLy d FvL{ d FwL} d FyL{ d FwLy m GBML d GEMJ d GIMF d GJMA d GJL} +d GILw d GELs d GBLq m FyMZ d GIMZ m FyMX d GAMX d GIMZ m FtLc m GdMZ +d G_MX d G\MR +stroke +m G\MR d GZMH d GZMC d G\Ly d G_Ls d GdLq d GgLq d GlLs d GoLy d GpMC +d GpMH d GoMR d GlMX d GgMZ d GdMZ m GdMZ d GaMX d G_MV d G]MR d G\MH +d G\MC d G]Ly d G_Lu d GaLs d GdLq m GgLq d GjLs d GlLu d GmLy d GoMC +d GoMH d GmMR d GlMV d GjMX d GgMZ m GYLc m G}Mg m G}Lc m H\Mg m H\Lc +m H~MR d I@MP d H~MN d H}MP d H}MR d H~MV d I@MX d IEMZ d IKMZ d IPMX +d IQMV d ISMR d ISMN d IQMJ d ILMF d IEMC d IAMA d H~L} d H}Lw d H}Lq +m IKMZ d INMX d IPMV d IQMR d IQMN d IPMJ d IKMF d IEMC m H}Lu d H~Lw +d IALw d IILs d INLs d IQLu d ISLw m IALw d IILq d IPLq d IQLs d ISLw +d ISL{ m H{Lc m FyLK d FvKw m FvKw d FyK{ d F~K} d GBK} d GGK{ d GJKw +d GLKq d GLKm d GJKg d GGKd d GBKb d F~Kb d FyKd d FwKf d FvKi d FvKk +d FwKm d FyKk d FwKi m GBK} d GEK{ d GIKw d GJKq d GJKm d GIKg d GEKd +d GBKb m FyLK d GILK m FyLI d GALI d GILK m FtKT m G_LC d GbLE d GgLK +d GgKb m GeLI d GeKb m G_Kb d GmKb m GYKT m G}LX m G}KT m H\LX m H\KT +m H~LC d I@LA d H~K? d H}LA d H}LC d H~LG d I@LI d IELK d IKLK d IPLI +d IQLE d IQK? d IPK{ d IKKy d IFKy m IKLK d INLI d IPLE d IPK? d INK{ +d IKKy m IKKy d INKw d IQKs d ISKo d ISKi d IQKf d IPKd d IKKb d IEKb +d I@Kd d H~Kf d H}Ki d H}Kk d H~Km d I@Kk d H~Ki m IPKu d IQKo d IQKi +d IPKf d INKd d IKKb m H{KT m FyJ{ d FvJh m FvJh d FyJl d F~Jn d GBJn +d GGJl d GJJh d GLJb d GLJ^ d GJJX d GGJT d GBJR d F~JR d FyJT d FwJV +d FvJZ d FvJ\ d FwJ^ d FyJ\ d FwJZ m GBJn d GEJl d GIJh d GJJb d GJJ^ +d GIJX d GEJT d GBJR m FyJ{ d GIJ{ m FyJy d GAJy d GIJ{ m FtJE m G\Js +d G]Jq d G\Jo d GZJq d GZJs d G\Jw d G]Jy d GbJ{ d GiJ{ d GmJy d GoJw +d GpJs d GpJo d GoJl d GjJh d GbJd d G_Jb d G\J^ d GZJX d GZJR m GiJ{ +d GlJy d GmJw d GoJs d GoJo d GmJl d GiJh d GbJd m GZJV d G\JX d G_JX +d GgJT d GlJT d GoJV d GpJX m G_JX d GgJR d GmJR d GoJT d GpJX d GpJ\ +m GYJE m G}KI m G}JE m H\KI m H\JE m IKJw d IKJR m ILJ{ d ILJR m ILJ{ +d H{J^ d ITJ^ m IFJR d IQJR m H{JE m FyIl d FvIX m FvIX d FyI\ d F~I^ +d GBI^ d GGI\ d GJIX d GLIS d GLIO d GJII d GGIE d GBIC d F~IC d FyIE +d FwIG d FvIK d FvIM d FwIO d FyIM d FwIK m GBI^ d GEI\ d GIIX d GJIS +d GJIO d GIII d GEIE d GBIC m FyIl d GIIl m FyIj d GAIj d GIIl m FtHu +m G\Id d G]Ib d G\I` d GZIb d GZId d G\Ih d G]Ij d GbIl d GiIl d GmIj +d GoIf d GoI` d GmI\ d GiIZ d GdIZ m GiIl d GlIj d GmIf d GmI` d GlI\ +d GiIZ m GiIZ d GlIX d GoIT d GpIQ d GpIK d GoIG d GmIE d GiIC d GbIC +d G]IE d G\IG d GZIK d GZIM d G\IO d G]IM d G\IK m GmIV d GoIQ d GoIK +d GmIG d GlIE d GiIC m GYHu m G}Iy m G}Hu m H\Iy m H\Hu m I@Il d H}IX +m H}IX d I@I\ d IEI^ d III^ d INI\ d IQIX d ISIS d ISIO d IQII d INIE +d IIIC d IEIC d I@IE d H~IG d H}IK d H}IM d H~IO d I@IM d H~IK m III^ +d ILI\ d IPIX d IQIS d IQIO d IPII d ILIE d IIIC m I@Il d IPIl m I@Ij +d IHIj d IPIl m H{Hu m FyH\ d FvHI m FvHI d FyHM d F~HO d GBHO d GGHM +d GJHI d GLHC d GLG? d GJGy d GGGv d GBGt d F~Gt d FyGv d FwGx d FvG{ +d FvG} d FwG? d FyG} d FwG{ m GBHO d GEHM d GIHI d GJHC d GJG? d GIGy +d GEGv d GBGt m FyH\ d GIH\ m FyH[ d GAH[ d GIH\ m FtGf m GiHY d GiGt +m GjH\ d GjGt m GjH\ d GYG? d GrG? m GdGt d GoGt m GYGf m G}Hj m G}Gf +m H\Hj m H\Gf m IPHW d INHU d IPHS d IQHU d IQHW d IPH[ d ILH\ d IHH\ +d ICH[ d I@HW d H~HS d H}HK d H}G? d H~Gy d IAGv d IFGt d IIGt d INGv +d IQGy d ISG? d ISHA d IQHG d INHK d IIHM d IHHM d ICHK d I@HG d H~HA +m IHH\ d IEH[ d IAHW d I@HS d H~HK d H~G? d I@Gy d ICGv d IFGt m IIGt +d ILGv d IPGy d IQG? d IQHA d IPHG d ILHK d IIHM m H{Gf m FyGM d FvFz +m FvFz d FyF~ d F~G@ d GBG@ d GGF~ d GJFz d GLFt d GLFp d GJFj d GGFf +d GBFd d F~Fd d FyFf d FwFh d FvFl d FvFn d FwFp d FyFn d FwFl m GBG@ +d GEF~ d GIFz d GJFt d GJFp d GIFj d GEFf d GBFd m FyGM d GIGM m FyGK +d GAGK d GIGM m FtFW m G]GM d GZFz m GZFz d G]F~ d GbG@ d GgG@ d GlF~ +d GoFz d GpFt d GpFp d GoFj d GlFf d GgFd d GbFd d G]Ff d G\Fh d GZFl +d GZFn d G\Fp d G]Fn d G\Fl m GgG@ d GjF~ d GmFz d GoFt d GoFp d GmFj +d GjFf d GgFd m G]GM d GmGM m G]GK d GeGK d GmGM m GYFW m G}G[ m G}FW +m H\G[ m H\FW m H}GM d H}GA m H}GE d H~GI d IAGM d IEGM d ILGG d IPGG +d IQGI d ISGM m H~GI d IAGK d IEGK d ILGG m ISGM d ISGG d IQGA d IKFx +d IIFt d IHFn d IHFd m IQGA d IIFx d IHFt d IFFn d IFFd m H{FW m RTcn +d RQcZ m RQcZ d RTc^ d RYc` d R^c` d Rbc^ d RfcZ d RgcU d RgcQ d RfcK +d RbcG d R^cE d RYcE d RTcG d RRcI d RQcM d RQcO d RRcQ d RTcO d RRcM +m R^c` d Rac^ d RdcZ d RfcU d RfcQ d RdcK d RacG d R^cE m RTcn d Rdcn +m RTcl d R\cl d Rdcn m RObw m SIch d SGcf d SIcd d SJcf d SJch d SIcl +d SEcn d SAcn d R|cl d Rych d Rwcd d Rvc\ d RvcQ d RwcK d RzcG d R?cE +d SBcE d SGcG d SJcK d SLcQ +stroke +m SLcQ d SLcS d SJcX d SGc\ d SBc^ d SAc^ d R|c\ d RycX d RwcS m SAcn +d R~cl d Rzch d Rycd d Rwc\ d RwcQ d RycK d R|cG d R?cE m SBcE d SEcG +d SIcK d SJcQ d SJcS d SIcX d SEc\ d SBc^ m Rtbw m SYc{ m SYbw m Sxc{ +m Sxbw m T`cn d T[cl d TZch d TZcb d T[c^ d T`c\ d Tfc\ d Tkc^ d Tmcb +d Tmch d Tkcl d Tfcn d T`cn m T`cn d T]cl d T[ch d T[cb d T]c^ d T`c\ +m Tfc\ d Tic^ d Tkcb d Tkch d Ticl d Tfcn m T`c\ d T[cZ d TZcX d TXcU +d TXcM d TZcI d T[cG d T`cE d TfcE d TkcG d TmcI d TncM d TncU d TmcX +d TkcZ d Tfc\ m T`c\ d T]cZ d T[cX d TZcU d TZcM d T[cI d T]cG d T`cE +m TfcE d TicG d TkcI d TmcM d TmcU d TkcX d TicZ d Tfc\ m TVbw m RTb^ +d RQbK m RQbK d RTbO d RYbQ d R^bQ d RbbO d RfbK d RgbE d RgbA d Rfa{ +d Rbax d R^av d RYav d RTax d RRaz d RQa} d RQa? d RRbA d RTa? d RRa} +m R^bQ d RabO d RdbK d RfbE d RfbA d Rda{ d Raax d R^av m RTb^ d Rdb^ +m RTb] d R\b] d Rdb^ m ROah m Rvb^ d RvbS m RvbW d Rwb[ d Rzb^ d R~b^ +d SEbY d SIbY d SJb[ d SLb^ m Rwb[ d Rzb] d R~b] d SEbY m SLb^ d SLbY +d SJbS d SDbI d SBbE d SAa? d SAav m SJbS d SBbI d SAbE d R?a? d R?av +m Rtah m SYbl m SYah m Sxbl m Sxah m TmbQ d TkbK d ThbG d TcbE d TbbE +d T]bG d TZbK d TXbQ d TXbS d TZbY d T]b] d Tbb^ d Teb^ d Tib] d TmbY +d TnbS d TnbG d Tma? d Tka{ d Thax d Tcav d T^av d T[ax d TZa{ d TZa} +d T[a? d T]a} d T[a{ m TbbE d T^bG d T[bK d TZbQ d TZbS d T[bY d T^b] +d Tbb^ m Teb^ d Thb] d TkbY d TmbS d TmbG d Tka? d Tia{ d Tfax d Tcav +m TVah m RTaO d RQ`| m RQ`| d RTa@ d RYaB d R^aB d Rba@ d Rf`| d Rg`v +d Rg`r d Rf`l d Rb`h d R^`f d RY`f d RT`h d RR`j d RQ`n d RQ`p d RR`r +d RT`p d RR`n m R^aB d Raa@ d Rd`| d Rf`v d Rf`r d Rd`l d Ra`h d R^`f +m RTaO d RdaO m RTaM d R\aM d RdaO m RO`Y m R~aO d RyaM d RwaI d RwaC +d Rya@ d R~`~ d SD`~ d SIa@ d SJaC d SJaI d SIaM d SDaO d R~aO m R~aO +d RzaM d RyaI d RyaC d Rza@ d R~`~ m SD`~ d SGa@ d SIaC d SIaI d SGaM +d SDaO m R~`~ d Ry`| d Rw`z d Rv`v d Rv`n d Rw`j d Ry`h d R~`f d SD`f +d SI`h d SJ`j d SL`n d SL`v d SJ`z d SI`| d SD`~ m R~`~ d Rz`| d Ry`z +d Rw`v d Rw`n d Ry`j d Rz`h d R~`f m SD`f d SG`h d SI`j d SJ`n d SJ`v +d SI`z d SG`| d SD`~ m Rt`Y m SYa] m SY`Y m Sxa] m Sx`Y m TpaU d ToaS +d TpaQ d TraS d TraU d TpaW d TnaW d TkaU d ThaQ d TgaM d TeaG d Tda@ +d Ta`h d T``a d T_`] m TjaS d ThaO d TgaG d Td`p d Tc`h d Ta`b d T``_ +d T]`[ d T[`Y d TX`Y d TV`[ d TV`] d TX`_ d TY`] d TX`[ m TV`Y m RT`@ +d RQ_l m RQ_l d RT_p d RY_r d R^_r d Rb_p d Rf_l d Rg_g d Rg_c d Rf_] +d Rb_Y d R^_W d RY_W d RT_Y d RR_[ d RQ__ d RQ_a d RR_c d RT_a d RR__ +m R^_r d Ra_p d Rd_l d Rf_g d Rf_c d Rd_] d Ra_Y d R^_W m RT`@ d Rd`@ +m RT_~ d R\_~ d Rd`@ m RO_I m SJ_r d SI_l d SE_i d SA_g d R?_g d Rz_i +d Rw_l d Rv_r d Rv_t d Rw_z d Rz_~ d R?`@ d SB`@ d SG_~ d SJ_z d SL_t +d SL_i d SJ_a d SI_] d SE_Y d SA_W d R|_W d Ry_Y d Rw_] d Rw__ d Ry_a +d Rz__ d Ry_] m R?_g d R|_i d Ry_l d Rw_r d Rw_t d Ry_z d R|_~ d R?`@ +m SB`@ d SE_~ d SI_z d SJ_t d SJ_i d SI_a d SG_] d SD_Y d SA_W m Rt_I +m SY`M m SY_I m Sx`M m Sx_I m T^_r d T\_p d T^_n d Ta_p d T^_r m T^_W +d T\_Y d T^_[ d Ta_Y d Ta_U d T^_Q d T\_O m TV_I m Rd^k d Rb^i d Rd^g +d Rf^i d Rf^k d Rd^o d Ra^p d R\^p d RW^o d RT^k d RR^g d RQ^_ d RQ^S +d RR^M d RV^J d RZ^H d R^^H d Rb^J d Rf^M d Rg^S d Rg^U d Rf^[ d Rb^_ +d R^^a d R\^a d RW^_ d RT^[ d RR^U m R\^p d RY^o d RV^k d RT^g d RR^_ +d RR^S d RT^M d RW^J d RZ^H m R^^H d Ra^J d Rd^M d Rf^S d Rf^U d Rd^[ +d Ra^_ d R^^a m RO]z m R?^p d Rz^o d Rw^i d Rv^_ d Rv^Y d Rw^O d Rz^J +d R?^H d SB^H d SG^J d SJ^O d SL^Y d SL^_ d SJ^i d SG^o d SB^p d R?^p +m R?^p d R|^o d Rz^m d Ry^i d Rw^_ d Rw^Y d Ry^O d Rz^K d R|^J d R?^H +m SB^H d SE^J d SG^K d SI^O d SJ^Y d SJ^_ d SI^i d SG^m d SE^o d SB^p +m Rt]z m SY^~ m SY]z m Sx^~ m Sx]z m To^p d TY^c d To^U m TY^Q d To^Q +m TY^H d To^H m TV]z m Rd][ d Rb]Y d Rd]W d Rf]Y d Rf][ d Rd]_ d Ra]a +d R\]a d RW]_ d RT][ d RR]W d RQ]P d RQ]D d RR\~ d RV\z d RZ\x d R^\x +d Rb\z d Rf\~ d Rg]D d Rg]F d Rf]L d Rb]P d R^]R d R\]R d RW]P d RT]L +d RR]F m R\]a d RY]_ d RV][ d RT]W d RR]P d RR]D d RT\~ d RW\z d RZ\x +m R^\x d Ra\z d Rd\~ d Rf]D d Rf]F d Rd]L d Ra]P d R^]R m RO\k m Rz]Y +d R~][ d SB]a d SB\x m SA]_ d SA\x m Rz\x d SI\x m Rt\k m SY]o m SY\k +m Sx]o m Sx\k m TY]S d Tp]S m TY]J d Tp]J m TY]@ d Tp]@ m TV\k m Rd\L +d Rb\J d Rd\H d Rf\J d Rf\L d Rd\P d Ra\R d R\\R d RW\P d RT\L d RR\H +d RQ\@ d RQ[u d RR[o d RV[k d RZ[i d R^[i d Rb[k d Rf[o d Rg[u d Rg[w +d Rf[| d Rb\@ d R^\B d R\\B d RW\@ d RT[| d RR[w m R\\R d RY\P +stroke +m RY\P d RV\L d RT\H d RR\@ d RR[u d RT[o d RW[k d RZ[i m R^[i d Ra[k +d Rd[o d Rf[u d Rf[w d Rd[| d Ra\@ d R^\B m RO[[ m Rw\J d Ry\H d Rw\F +d Rv\H d Rv\J d Rw\N d Ry\P d R~\R d SD\R d SI\P d SJ\N d SL\J d SL\F +d SJ\B d SE[~ d R~[{ d Rz[y d Rw[u d Rv[o d Rv[i m SD\R d SG\P d SI\N +d SJ\J d SJ\F d SI\B d SD[~ d R~[{ m Rv[m d Rw[o d Rz[o d SB[k d SG[k +d SJ[m d SL[o m Rz[o d SB[i d SI[i d SJ[k d SL[o d SL[s m Rt[[ m SY\_ +m SY[[ m Sx\_ m Sx[[ m TY\R d To\D d TY[w m TY[s d To[s m TY[i d To[i +m TV[[ m RdZ} d RbZ{ d RdZy d RfZ{ d RfZ} d Rd[A d Ra[C d R\[C d RW[A +d RTZ} d RRZy d RQZq d RQZe d RRZ` d RVZ\ d RZZZ d R^ZZ d RbZ\ d RfZ` +d RgZe d RgZg d RfZm d RbZq d R^Zs d R\Zs d RWZq d RTZm d RRZg m R\[C +d RY[A d RVZ} d RTZy d RRZq d RRZe d RTZ` d RWZ\ d RZZZ m R^ZZ d RaZ\ +d RdZ` d RfZe d RfZg d RdZm d RaZq d R^Zs m ROZL m RwZ{ d RyZy d RwZw +d RvZy d RvZ{ d RwZ? d Ry[A d R~[C d SD[C d SI[A d SJZ} d SJZw d SIZs +d SDZq d R?Zq m SD[C d SG[A d SIZ} d SIZw d SGZs d SDZq m SDZq d SGZo +d SJZk d SLZg d SLZa d SJZ^ d SIZ\ d SDZZ d R~ZZ d RyZ\ d RwZ^ d RvZa +d RvZc d RwZe d RyZc d RwZa m SIZm d SJZg d SJZa d SIZ^ d SGZ\ d SDZZ +m RtZL m SY[P m SYZL m Sx[P m SxZL m TmZ} d T[ZZ m TYZq d TpZq m TYZe +d TpZe m TVZL m RdYm d RbYk d RdYi d RfYk d RfYm d RdYq d RaYs d R\Ys +d RWYq d RTYm d RRYi d RQYb d RQYV d RRYP d RVYL d RZYJ d R^YJ d RbYL +d RfYP d RgYV d RgYX d RfY^ d RbYb d R^Yd d R\Yd d RWYb d RTY^ d RRYX +m R\Ys d RYYq d RVYm d RTYi d RRYb d RRYV d RTYP d RWYL d RZYJ m R^YJ +d RaYL d RdYP d RfYV d RfYX d RdY^ d RaYb d R^Yd m ROX} m SDYo d SDYJ +m SEYs d SEYJ m SEYs d RtYV d SMYV m R?YJ d SJYJ m RtX} m SYZA m SYX} +m SxZA m SxX} m TjYd d TiYg d TgYi d TcYi d T`Yg d T_Ye d T^Y` d T^YZ +d T_YV d TbYT d TeYT d ThYV d TiYZ m TcYi d T`Ye d T_Y` d T_YZ d T`YV +d TbYT m TjYi d TiYZ d TiYV d TlYT d TnYT d TpYX d TrY^ d TrYb d TpYg +d ToYk d TmYo d TjYq d TgYs d TcYs d T_Yq d T]Yo d TZYk d TYYg d TXYb +d TXY\ d TYYV d TZYR d T]YN d T_YL d TcYJ d TgYJ d TjYL d TmYN d TnYP +m TlYi d TjYZ d TjYV d TlYT m TVX} m RdX^ d RbX\ d RdXZ d RfX\ d RfX^ +d RdXb d RaXd d R\Xd d RWXb d RTX^ d RRXZ d RQXR d RQXG d RRXA d RVW} +d RZW{ d R^W{ d RbW} d RfXA d RgXG d RgXI d RfXN d RbXR d R^XT d R\XT +d RWXR d RTXN d RRXI m R\Xd d RYXb d RVX^ d RTXZ d RRXR d RRXG d RTXA +d RWW} d RZW{ m R^W{ d RaW} d RdXA d RfXG d RfXI d RdXN d RaXR d R^XT +m ROWm m RyXd d RvXP m RvXP d RyXT d R~XV d SBXV d SGXT d SJXP d SLXK +d SLXG d SJXA d SGW} d SBW{ d R~W{ d RyW} d RwW? d RvXC d RvXE d RwXG +d RyXE d RwXC m SBXV d SEXT d SIXP d SJXK d SJXG d SIXA d SEW} d SBW{ +m RyXd d SIXd m RyXb d SAXb d SIXd m RtWm m SYXq m SYWm m SxXq m SxWm +m TbX^ d TXW{ m TeX^ d TnW{ m TcX^ d TmW{ m T[XG d TiXG m TVW{ d T^W{ +m ThW{ d TqW{ m TbXl d T^Xj d T]Xf d T]Xb d T^X^ d TbX\ d TeX\ d ThX^ +d TiXb d TiXf d ThXj d TeXl d TbXl m TVWm m RdWO d RbWM d RdWK d RfWM +d RfWO d RdWS d RaWT d R\WT d RWWS d RTWO d RRWK d RQWC d RQVw d RRVq +d RVVn d RZVl d R^Vl d RbVn d RfVq d RgVw d RgVy d RfV? d RbWC d R^WE +d R\WE d RWWC d RTV? d RRVy m R\WT d RYWS d RVWO d RTWK d RRWC d RRVw +d RTVq d RWVn d RZVl m R^Vl d RaVn d RdVq d RfVw d RfVy d RdV? d RaWC +d R^WE m ROV^ m SIWO d SGWM d SIWK d SJWM d SJWO d SIWS d SEWT d SAWT +d R|WS d RyWO d RwWK d RvWC d RvVw d RwVq d RzVn d R?Vl d SBVl d SGVn +d SJVq d SLVw d SLVy d SJV? d SGWC d SBWE d SAWE d R|WC d RyV? d RwVy +m SAWT d R~WS d RzWO d RyWK d RwWC d RwVw d RyVq d R|Vn d R?Vl m SBVl +d SEVn d SIVq d SJVw d SJVy d SIV? d SEWC d SBWE m RtV^ m SYWb m SYV^ +m SxWb m SxV^ m TqV{ d TpVw d TmVu d TjVu d ThVw d TfVy d TbWA d TaWC +d T^WE d T\WE d TYWC d TXV? d TXV{ d TYVw d T\Vu d T^Vu d TaVw d TbVy +d TfWA d ThWC d TjWE d TmWE d TpWC d TqV? d TqV{ m TVV^ m RdU? d RbU} +d RdU{ d RfU} d RfU? d RdVC d RaVE d R\VE d RWVC d RTU? d RRU{ d RQUt +d RQUh d RRUb d RVU^ d RZU\ d R^U\ d RbU^ d RfUb d RgUh d RgUj d RfUp +d RbUt d R^Uv d R\Uv d RWUt d RTUp d RRUj m R\VE d RYVC d RVU? d RTU{ +d RRUt d RRUh d RTUb d RWU^ d RZU\ m R^U\ d RaU^ d RdUb d RfUh d RfUj +d RdUp d RaUt d R^Uv m ROUO m RvVE d RvUy m RvU} d RwVA d RzVE d R~VE +d SEU? d SIU? d SJVA d SLVE m RwVA d RzVC d R~VC d SEU? m SLVE d SLU? +d SJUy d SDUp d SBUl d SAUf d SAU\ m SJUy d SBUp d SAUl d R?Uf d R?U\ +m RtUO m SYVS m SYUO m SxVS m SxUO m TVVS m TVUO m RdTp d RbTn d RdTl +d RfTn d RfTp d RdTt d RaTv d R\Tv d RWTt d RTTp d RRTl d RQTd d RQTY +d RRTS d RVTO d RZTM d R^TM d RbTO d RfTS d RgTY +stroke +m RgTY d RgT[ d RfT` d RbTd d R^Tf d R\Tf d RWTd d RTT` d RRT[ m R\Tv +d RYTt d RVTp d RTTl d RRTd d RRTY d RTTS d RWTO d RZTM m R^TM d RaTO +d RdTS d RfTY d RfT[ d RdT` d RaTd d R^Tf m ROS? m R~Tv d RyTt d RwTp +d RwTj d RyTf d R~Td d SDTd d SITf d SJTj d SJTp d SITt d SDTv d R~Tv +m R~Tv d RzTt d RyTp d RyTj d RzTf d R~Td m SDTd d SGTf d SITj d SITp +d SGTt d SDTv m R~Td d RyTb d RwT` d RvT] d RvTU d RwTQ d RyTO d R~TM +d SDTM d SITO d SJTQ d SLTU d SLT] d SJT` d SITb d SDTd m R~Td d RzTb +d RyT` d RwT] d RwTU d RyTQ d RzTO d R~TM m SDTM d SGTO d SITQ d SJTU +d SJT] d SIT` d SGTb d SDTd m RtS? m SYUC m SYS? m SxUC m SxS? m TcTv +d TVTM m TcTv d TpTM m TcTp d TnTM m TXTO d TnTO m TVTM d TpTM m TVS? +m RdSa d RbS_ d RdS] d RfS_ d RfSa d RdSe d RaSf d R\Sf d RWSe d RTSa +d RRS] d RQSU d RQSI d RRSC d RVS@ d RZR~ d R^R~ d RbS@ d RfSC d RgSI +d RgSK d RfSQ d RbSU d R^SW d R\SW d RWSU d RTSQ d RRSK m R\Sf d RYSe +d RVSa d RTS] d RRSU d RRSI d RTSC d RWS@ d RZR~ m R^R~ d RaS@ d RdSC +d RfSI d RfSK d RdSQ d RaSU d R^SW m RORp m SJSY d SISS d SESO d SASM +d R?SM d RzSO d RwSS d RvSY d RvS[ d RwSa d RzSe d R?Sf d SBSf d SGSe +d SJSa d SLS[ d SLSO d SJSG d SISC d SES@ d SAR~ d R|R~ d RyS@ d RwSC +d RwSE d RySG d RzSE d RySC m R?SM d R|SO d RySS d RwSY d RwS[ d RySa +d R|Se d R?Sf m SBSf d SESe d SISa d SJS[ d SJSO d SISG d SGSC d SDS@ +d SAR~ m RtRp m SYSt m SYRp m SxSt m SxRp m ToS_ d TeS_ d T`S] d T]S[ +d T[SW d TYSQ d TYSM d T[SG d T]SC d T`SB d TeS@ d ToS@ m TYSO d TjSO +m TVRp m RQRW d RQRK m RQRO d RRRS d RVRW d RYRW d RaRQ d RdRQ d RfRS +d RgRW m RRRS d RVRU d RYRU d RaRQ m RgRW d RgRQ d RfRK d R_RB d R^Q~ +d R\Qx d R\Qn m RfRK d R^RB d R\Q~ d RZQx d RZQn m ROQa m R?RW d RzRU +d RwRO d RvRF d RvR@ d RwQv d RzQp d R?Qn d SBQn d SGQp d SJQv d SLR@ +d SLRF d SJRO d SGRU d SBRW d R?RW m R?RW d R|RU d RzRS d RyRO d RwRF +d RwR@ d RyQv d RzQr d R|Qp d R?Qn m SBQn d SEQp d SGQr d SIQv d SJR@ +d SJRF d SIRO d SGRS d SERU d SBRW m RtQa m SYRe m SYQa m SxRe m SxQa +m TcRW d TcQn m TdRW d TdQn m T`RM d T[RK d TYRJ d TXRF d TXR@ d TYQ| +d T[Qz d T`Qx d TgQx d TlQz d TmQ| d ToR@ d ToRF d TmRJ d TlRK d TgRM +d T`RM m T`RM d T\RK d T[RJ d TYRF d TYR@ d T[Q| d T\Qz d T`Qx m TgQx +d TjQz d TlQ| d TmR@ d TmRF d TlRJ d TjRK d TgRM m T^RW d TiRW m T^Qn +d TiQn m TVQa m RQQH d RQP| m RQQ@ d RRQD d RVQH d RYQH d RaQB d RdQB +d RfQD d RgQH m RRQD d RVQF d RYQF d RaQB m RgQH d RgQB d RfP| d R_Pr +d R^Po d R\Pi d R\P_ m RfP| d R^Pr d R\Po d RZPi d RZP_ m ROPQ m RzQ@ +d R~QB d SBQH d SBP_ m SAQF d SAP_ m RzP_ d SIP_ m RtPQ m SYQU m SYPQ +m SxQU m SxPQ m T\QH d T\P_ m T]QH d T]P_ m TVQH d TpQH d TpP| d ToQH +m TVP_ d TbP_ m TVPQ m RQOy d RQOm m RQOq d RROu d RVOy d RYOy d RaOs +d RdOs d RfOu d RgOy m RROu d RVOw d RYOw d RaOs m RgOy d RgOs d RfOm +d R_Oc d R^O_ d R\OY d R\OP m RfOm d R^Oc d R\O_ d RZOY d RZOP m ROOB +m RwOq d RyOo d RwOm d RvOo d RvOq d RwOu d RyOw d R~Oy d SDOy d SIOw +d SJOu d SLOq d SLOm d SJOi d SEOe d R~Oa d RzO_ d RwO[ d RvOV d RvOP +m SDOy d SGOw d SIOu d SJOq d SJOm d SIOi d SDOe d R~Oa m RvOT d RwOV +d RzOV d SBOR d SGOR d SJOT d SLOV m RzOV d SBOP d SIOP d SJOR d SLOV +d SLOY m RtOB m SYPF m SYOB m SxPF m SxOB m TdP@ d TYOB m TmP@ d TcOB +m TYOg d ToOg m TXO[ d TmO[ m TVOB m RQNi d RQN] m RQNa d RRNe d RVNi +d RYNi d RaNc d RdNc d RfNe d RgNi m RRNe d RVNg d RYNg d RaNc m RgNi +d RgNc d RfN] d R_NT d R^NP d R\NJ d R\N@ m RfN] d R^NT d R\NP d RZNJ +d RZN@ m ROMs m RwNa d RyN_ d RwN] d RvN_ d RvNa d RwNe d RyNg d R~Ni +d SDNi d SINg d SJNc d SJN] d SINZ d SDNX d R?NX m SDNi d SGNg d SINc +d SIN] d SGNZ d SDNX m SDNX d SGNV d SJNR d SLNN d SLNH d SJND d SINB +d SDN@ d R~N@ d RyNB d RwND d RvNH d RvNJ d RwNL d RyNJ d RwNH m SINT +d SJNN d SJNH d SIND d SGNB d SDN@ m RtMs m SYNw m SYMs m SxNw m SxMs +m T[Nq d T[Ms m TgNq d TgMs m TVMs m RQMZ d RQMN m RQMR d RRMV d RVMZ +d RYMZ d RaMT d RdMT d RfMV d RgMZ m RRMV d RVMX d RYMX d RaMT m RgMZ +d RgMT d RfMN d R_MD d R^MA d R\L{ d R\Lq m RfMN d R^MD d R\MA d RZL{ +d RZLq m ROLc m SDMV d SDLq m SEMZ d SELq m SEMZ d RtL} d SML} m R?Lq +d SJLq m RtLc m SYMg m SYLc m SxMg m SxLc m TVMZ d TcLq m TXMZ d TcLu +m TpMZ d TcLq m TVMZ d TpMZ m TXMX d TnMX m TVLc m RQLK d RQK? m RQLC +d RRLG d RVLK d RYLK d RaLE d RdLE d RfLG d RgLK m RRLG d RVLI d RYLI +d RaLE m RgLK d RgLE d RfK? d R_Ku d R^Kq d R\Kk d R\Kb m RfK? d R^Ku +d R\Kq d RZKk d RZKb m ROKT m RyLK d RvKw m RvKw d RyK{ d R~K} d SBK} +d SGK{ d SJKw d SLKq d SLKm d SJKg d SGKd d SBKb d R~Kb d RyKd d RwKf +d RvKi d RvKk d RwKm d RyKk d RwKi m SBK} d SEK{ d SIKw d SJKq d SJKm +d SIKg d SEKd d SBKb m RyLK d SILK m RyLI d SALI d SILK m RtKT m SYLX +m SYKT m SxLX m SxKT m TVLX m TVKT m RQJ{ d RQJo m RQJs d RRJw d RVJ{ +d RYJ{ d RaJu d RdJu d RfJw d RgJ{ m RRJw d RVJy d RYJy d RaJu m RgJ{ +d RgJu +stroke +m RgJu d RfJo d R_Jf d R^Jb d R\J\ d R\JR m RfJo d R^Jf d R\Jb d RZJ\ +d RZJR m ROJE m SIJu d SGJs d SIJq d SJJs d SJJu d SIJy d SEJ{ d SAJ{ +d R|Jy d RyJu d RwJq d RvJj d RvJ^ d RwJX d RzJT d R?JR d SBJR d SGJT +d SJJX d SLJ^ d SLJ` d SJJf d SGJj d SBJl d SAJl d R|Jj d RyJf d RwJ` +m SAJ{ d R~Jy d RzJu d RyJq d RwJj d RwJ^ d RyJX d R|JT d R?JR m SBJR +d SEJT d SIJX d SJJ^ d SJJ` d SIJf d SEJj d SBJl m RtJE m SYKI m SYJE +m SxKI m SxJE m TcJ{ d TXJR m TcJ{ d TnJR m TcJu d TmJR m TVJR d T^JR +m ThJR d TqJR m TVJE m RQIl d RQI` m RQId d RRIh d RVIl d RYIl d RaIf +d RdIf d RfIh d RgIl m RRIh d RVIj d RYIj d RaIf m RgIl d RgIf d RfI` +d R_IV d R^IS d R\IM d R\IC m RfI` d R^IV d R\IS d RZIM d RZIC m ROHu +m RvIl d RvI` m RvId d RwIh d RzIl d R~Il d SEIf d SIIf d SJIh d SLIl +m RwIh d RzIj d R~Ij d SEIf m SLIl d SLIf d SJI` d SDIV d SBIS d SAIM +d SAIC m SJI` d SBIV d SAIS d R?IM d R?IC m RtHu m SYIy m SYHu m SxIy +m SxHu m T^I` d TbIf d TeI` m TXIZ d TbId d TkIZ m TbId d TbIC m TVHu +m RQH\ d RQHQ m RQHU d RRHY d RVH\ d RYH\ d RaHW d RdHW d RfHY d RgH\ +m RRHY d RVH[ d RYH[ d RaHW m RgH\ d RgHW d RfHQ d R_HG d R^HC d R\G} +d R\Gt m RfHQ d R^HG d R\HC d RZG} d RZGt m ROGf m R~H\ d RyH[ d RwHW +d RwHQ d RyHM d R~HK d SDHK d SIHM d SJHQ d SJHW d SIH[ d SDH\ d R~H\ +m R~H\ d RzH[ d RyHW d RyHQ d RzHM d R~HK m SDHK d SGHM d SIHQ d SIHW +d SGH[ d SDH\ m R~HK d RyHI d RwHG d RvHC d RvG{ d RwGx d RyGv d R~Gt +d SDGt d SIGv d SJGx d SLG{ d SLHC d SJHG d SIHI d SDHK m R~HK d RzHI +d RyHG d RwHC d RwG{ d RyGx d RzGv d R~Gt m SDGt d SGGv d SIGx d SJG{ +d SJHC d SIHG d SGHI d SDHK m RtGf m SYHj m SYGf m SxHj m SxGf m T^Gy +d TbGt d TeGy m TXG? d TbGv d TkG? m TbHW d TbGv m TVGf m RQGM d RQGA +m RQGE d RRGI d RVGM d RYGM d RaGG d RdGG d RfGI d RgGM m RRGI d RVGK +d RYGK d RaGG m RgGM d RgGG d RfGA d R_Fx d R^Ft d R\Fn d R\Fd m RfGA +d R^Fx d R\Ft d RZFn d RZFd m ROFW m SJG@ d SIFz d SEFv d SAFt d R?Ft +d RzFv d RwFz d RvG@ d RvGA d RwGG d RzGK d R?GM d SBGM d SGGK d SJGG +d SLGA d SLFv d SJFn d SIFj d SEFf d SAFd d R|Fd d RyFf d RwFj d RwFl +d RyFn d RzFl d RyFj m R?Ft d R|Fv d RyFz d RwG@ d RwGA d RyGG d R|GK +d R?GM m SBGM d SEGK d SIGG d SJGA d SJFv d SIFn d SGFj d SDFf d SAFd +m RtFW m SYG[ m SYFW m SxG[ m SxFW m TbGM d T^GK d T[GG d TYGC d TXF| +d TXFv d TYFn d T[Fj d T^Ff d TbFd d TeFd d TiFf d TlFj d TnFn d ToFv +d ToF| d TnGC d TlGG d TiGK d TeGM d TbGM m TbGM d T_GK d T\GG d T[GC +d TYF| d TYFv d T[Fn d T\Fj d T_Ff d TbFd m TeFd d ThFf d TkFj d TlFn +d TnFv d TnF| d TlGC d TkGG d ThGK d TeGM m TVFW m ]Kc{ m ]Kbw m ]scn +d ]ocl d ]mch d ]mcb d ]oc^ d ]sc\ d ]zc\ d ]~c^ d ^@cb d ^@ch d ]~cl +d ]zcn d ]scn m ]scn d ]pcl d ]och d ]ocb d ]pc^ d ]sc\ m ]zc\ d ]}c^ +d ]~cb d ]~ch d ]}cl d ]zcn m ]sc\ d ]ocZ d ]mcX d ]kcU d ]kcM d ]mcI +d ]ocG d ]scE d ]zcE d ]~cG d ^@cI d ^BcM d ^BcU d ^@cX d ]~cZ d ]zc\ +m ]sc\ d ]pcZ d ]ocX d ]mcU d ]mcM d ]ocI d ]pcG d ]scE m ]zcE d ]}cG +d ]~cI d ^@cM d ^@cU d ]~cX d ]}cZ d ]zc\ m ]jbw m ^Zcn d ^Ucl d ^Rcf +d ^Pc\ d ^PcV d ^RcM d ^UcG d ^ZcE d ^]cE d ^bcG d ^ecM d ^fcV d ^fc\ +d ^ecf d ^bcl d ^]cn d ^Zcn m ^Zcn d ^Vcl d ^Ucj d ^Scf d ^Rc\ d ^RcV +d ^ScM d ^UcI d ^VcG d ^ZcE m ^]cE d ^`cG d ^bcI d ^ccM d ^ecV d ^ec\ +d ^ccf d ^bcj d ^`cl d ^]cn m ^Obw m ^sc{ m ^sbw m _Rc{ m _Rbw m _ucn +d _ucE m _vcn d _vcE m `Gcn d `GcE m `Hcn d `HcE m _qcn d `Lcn m _qcE +d _zcE m `CcE d `LcE m _qbw m ]Kbl m ]Kah m ]sb^ d ]ob] d ]mbY d ]mbS +d ]obO d ]sbM d ]zbM d ]~bO d ^@bS d ^@bY d ]~b] d ]zb^ d ]sb^ m ]sb^ +d ]pb] d ]obY d ]obS d ]pbO d ]sbM m ]zbM d ]}bO d ]~bS d ]~bY d ]}b] +d ]zb^ m ]sbM d ]obK d ]mbI d ]kbE d ]ka} d ]maz d ]oax d ]sav d ]zav +d ]~ax d ^@az d ^Ba} d ^BbE d ^@bI d ]~bK d ]zbM m ]sbM d ]pbK d ]obI +d ]mbE d ]ma} d ]oaz d ]pax d ]sav m ]zav d ]}ax d ]~az d ^@a} d ^@bE +d ]~bI d ]}bK d ]zbM m ]jah m ^UbW d ^XbY d ^]b^ d ^]av m ^[b] d ^[av +m ^Uav d ^cav m ^Oah m ^sbl m ^sah m _Rbl m _Rah m _}b^ d _xb] d _ubY +d _tbU d _rbM d _rbG d _ta? d _ua{ d _xax d _}av d `@av d `Dax d `Ga{ +d `Ha? d `JbG d `JbM d `HbU d `GbY d `Db] d `@b^ d _}b^ m _}b^ d _zb] +d _wbY d _ubU d _tbM d _tbG d _ua? d _wa{ d _zax d _}av m `@av d `Cax +d `Fa{ d `Ga? d `HbG d `HbM d `GbU d `FbY d `Cb] d `@b^ m _zbQ d _zbC +m `CbQ d `CbC m _zbK d `CbK m _zbI d `CbI m _qah m ]Ka] m ]K`Y m ]saO +d ]oaM d ]maI d ]maC d ]oa@ d ]s`~ d ]z`~ d ]~a@ d ^@aC d ^@aI d ]~aM +d ]zaO d ]saO m ]saO d ]paM d ]oaI d ]oaC d ]pa@ d ]s`~ m ]z`~ d ]}a@ +d ]~aC d ]~aI d ]}aM d ]zaO m ]s`~ d ]o`| d ]m`z d ]k`v d ]k`n d ]m`j +d ]o`h d ]s`f d ]z`f d ]~`h d ^@`j d ^B`n d ^B`v d ^@`z d ]~`| d ]z`~ +m ]s`~ d ]p`| d ]o`z d ]m`v d ]m`n d ]o`j +stroke +m ]o`j d ]p`h d ]s`f m ]z`f d ]}`h d ]~`j d ^@`n d ^@`v d ]~`z d ]}`| +d ]z`~ m ]j`Y m ^RaG d ^SaE d ^RaC d ^PaE d ^PaG d ^RaK d ^SaM d ^XaO +d ^^aO d ^caM d ^eaK d ^faG d ^faC d ^ea@ d ^``| d ^X`x d ^U`v d ^R`r +d ^P`l d ^P`f m ^^aO d ^baM d ^caK d ^eaG d ^eaC d ^ca@ d ^^`| d ^X`x +m ^P`j d ^R`l d ^U`l d ^]`h d ^b`h d ^e`j d ^f`l m ^U`l d ^]`f d ^c`f +d ^e`h d ^f`l d ^f`p m ^O`Y m ^sa] m ^s`Y m _Ra] m _R`Y m `KaO d _r`f +m _yaO d _|aK d _|aG d _zaC d _xaB d _uaB d _raE d _raI d _taM d _vaO +d _yaO d _|aM d `@aK d `DaK d `HaM d `KaO m `E`t d `C`r d `A`n d `A`j +d `D`f d `G`f d `I`h d `K`l d `K`p d `H`t d `E`t m _q`Y m ]K`M m ]K_I +m ]s`@ d ]o_~ d ]m_z d ]m_t d ]o_p d ]s_n d ]z_n d ]~_p d ^@_t d ^@_z +d ]~_~ d ]z`@ d ]s`@ m ]s`@ d ]p_~ d ]o_z d ]o_t d ]p_p d ]s_n m ]z_n +d ]}_p d ]~_t d ]~_z d ]}_~ d ]z`@ m ]s_n d ]o_l d ]m_j d ]k_g d ]k__ +d ]m_[ d ]o_Y d ]s_W d ]z_W d ]~_Y d ^@_[ d ^B__ d ^B_g d ^@_j d ]~_l +d ]z_n m ]s_n d ]p_l d ]o_j d ]m_g d ]m__ d ]o_[ d ]p_Y d ]s_W m ]z_W +d ]}_Y d ]~_[ d ^@__ d ^@_g d ]~_j d ]}_l d ]z_n m ]j_I m ^R_x d ^S_v +d ^R_t d ^P_v d ^P_x d ^R_| d ^S_~ d ^X`@ d ^^`@ d ^c_~ d ^e_z d ^e_t +d ^c_p d ^^_n d ^Z_n m ^^`@ d ^b_~ d ^c_z d ^c_t d ^b_p d ^^_n m ^^_n +d ^b_l d ^e_i d ^f_e d ^f__ d ^e_[ d ^c_Y d ^^_W d ^X_W d ^S_Y d ^R_[ +d ^P__ d ^P_a d ^R_c d ^S_a d ^R__ m ^c_j d ^e_e d ^e__ d ^c_[ d ^b_Y +d ^^_W m ^O_I m ^s`M m ^s_I m _R`M m _R_I m _r`@ d _}_l d _q_W m _q`@ +d _|_l m _q`@ d `H`@ d `I_t d `F`@ m _r_Y d `F_Y m _q_W d `H_W d `I_c +d `F_W m _q_I m ]K^~ m ]K]z m ]s^p d ]o^o d ]m^k d ]m^e d ]o^a d ]s^_ +d ]z^_ d ]~^a d ^@^e d ^@^k d ]~^o d ]z^p d ]s^p m ]s^p d ]p^o d ]o^k +d ]o^e d ]p^a d ]s^_ m ]z^_ d ]}^a d ]~^e d ]~^k d ]}^o d ]z^p m ]s^_ +d ]o^] d ]m^[ d ]k^W d ]k^O d ]m^K d ]o^J d ]s^H d ]z^H d ]~^J d ^@^K +d ^B^O d ^B^W d ^@^[ d ]~^] d ]z^_ m ]s^_ d ]p^] d ]o^[ d ]m^W d ]m^O +d ]o^K d ]p^J d ]s^H m ]z^H d ]}^J d ]~^K d ^@^O d ^@^W d ]~^[ d ]}^] +d ]z^_ m ]j]z m ^^^m d ^^^H m ^`^p d ^`^H m ^`^p d ^O^S d ^h^S m ^Z^H +d ^e^H m ^O]z m ^s^~ m ^s]z m _R^~ m _R]z m _u^x d _u]z m `B^x d `B]z +m _q]z m ]K]o m ]K\k m ]s]a d ]o]_ d ]m][ d ]m]U d ]o]R d ]s]P d ]z]P +d ]~]R d ^@]U d ^@][ d ]~]_ d ]z]a d ]s]a m ]s]a d ]p]_ d ]o][ d ]o]U +d ]p]R d ]s]P m ]z]P d ]}]R d ]~]U d ]~][ d ]}]_ d ]z]a m ]s]P d ]o]N +d ]m]L d ]k]H d ]k]@ d ]m\| d ]o\z d ]s\x d ]z\x d ]~\z d ^@\| d ^B]@ +d ^B]H d ^@]L d ]~]N d ]z]P m ]s]P d ]p]N d ]o]L d ]m]H d ]m]@ d ]o\| +d ]p\z d ]s\x m ]z\x d ]}\z d ]~\| d ^@]@ d ^@]H d ]~]L d ]}]N d ]z]P +m ]j\k m ^S]a d ^P]N m ^P]N d ^S]R d ^X]S d ^]]S d ^b]R d ^e]N d ^f]H +d ^f]D d ^e\~ d ^b\z d ^]\x d ^X\x d ^S\z d ^R\| d ^P]@ d ^P]B d ^R]D +d ^S]B d ^R]@ m ^]]S d ^`]R d ^c]N d ^e]H d ^e]D d ^c\~ d ^`\z d ^]\x +m ^S]a d ^c]a m ^S]_ d ^[]_ d ^c]a m ^O\k m ^s]o m ^s\k m _R]o m _R\k +m _q]W d _q][ d _s]_ d _t]a d _x]a d _y]_ d _{][ d _|]S d _|\x m _q][ +d _t]_ d _x]_ d _{][ m `J]W d `J][ d `H]_ d `F]a d `C]a d `A]_ d `@][ +d _~]S d _~\x m `J][ d `F]_ d `C]_ d `@][ m _x\x d `C\x m _q\k m ]K\_ +m ]K[[ m ]s\R d ]o\P d ]m\L d ]m\F d ]o\B d ]s\@ d ]z\@ d ]~\B d ^@\F +d ^@\L d ]~\P d ]z\R d ]s\R m ]s\R d ]p\P d ]o\L d ]o\F d ]p\B d ]s\@ +m ]z\@ d ]}\B d ]~\F d ]~\L d ]}\P d ]z\R m ]s\@ d ]o[~ d ]m[| d ]k[y +d ]k[q d ]m[m d ]o[k d ]s[i d ]z[i d ]~[k d ^@[m d ^B[q d ^B[y d ^@[| +d ]~[~ d ]z\@ m ]s\@ d ]p[~ d ]o[| d ]m[y d ]m[q d ]o[m d ]p[k d ]s[i +m ]z[i d ]}[k d ]~[m d ^@[q d ^@[y d ]~[| d ]}[~ d ]z\@ m ]j[[ m ^c\L +d ^b\J d ^c\H d ^e\J d ^e\L d ^c\P d ^`\R d ^[\R d ^V\P d ^S\L d ^R\H +d ^P\@ d ^P[u d ^R[o d ^U[k d ^Z[i d ^][i d ^b[k d ^e[o d ^f[u d ^f[w +d ^e[| d ^b\@ d ^]\B d ^[\B d ^V\@ d ^S[| d ^R[w m ^[\R d ^X\P d ^U\L +d ^S\H d ^R\@ d ^R[u d ^S[o d ^V[k d ^Z[i m ^][i d ^`[k d ^c[o d ^e[u +d ^e[w d ^c[| d ^`\@ d ^]\B m ^O[[ m ^s\_ m ^s[[ m _R\_ m _R[[ m _|\L +d _r[i m _?\L d `I[i m _~\L d `G[i m _v[u d `D[u m _q[i d _y[i m `B[i +d `L[i m _|\Z d _y\X d _w\T d _w\P d _y\L d _|\J d _?\J d `B\L d `D\P +d `D\T d `B\X d _?\Z d _|\Z m _q[[ m ]K[P m ]KZL m ]s[C d ]o[A d ]mZ} +d ]mZw d ]oZs d ]sZq d ]zZq d ]~Zs d ^@Zw d ^@Z} d ]~[A d ]z[C d ]s[C +m ]s[C d ]p[A d ]oZ} d ]oZw d ]pZs d ]sZq m ]zZq d ]}Zs d ]~Zw d ]~Z} +d ]}[A d ]z[C m ]sZq d ]oZo d ]mZm d ]kZi d ]kZa d ]mZ^ d ]oZ\ d ]sZZ +d ]zZZ d ]~Z\ d ^@Z^ d ^BZa d ^BZi d ^@Zm d ]~Zo d ]zZq m ]sZq d ]pZo +d ]oZm d ]mZi d ]mZa d ]oZ^ d ]pZ\ d ]sZZ m ]zZZ d ]}Z\ d ]~Z^ d ^@Za +d ^@Zi d ]~Zm d ]}Zo d ]zZq m ]jZL m ^P[C d ^PZw m ^PZ{ d ^RZ? d ^U[C +d ^X[C d ^`Z} d ^cZ} d ^eZ? d ^f[C m ^RZ? d ^U[A d ^X[A d ^`Z} m ^f[C +d ^fZ} d ^eZw d ^^Zm d ^]Zi d ^[Zc d ^[ZZ m ^eZw d ^]Zm +stroke +m ^]Zm d ^[Zi d ^ZZc d ^ZZZ m ^OZL m ^s[P m ^sZL m _R[P m _RZL m _rZ` +d _tZZ d _zZZ d _wZa d _tZi d _rZo d _rZw d _tZ} d _w[A d _{[C d `A[C +d `F[A d `HZ} d `JZw d `JZo d `HZi d `FZa d `CZZ d `HZZ d `JZ` m _wZa +d _uZg d _tZo d _tZw d _uZ} d _x[A d _{[C m `A[C d `D[A d `GZ} d `HZw +d `HZo d `GZg d `FZa m _tZ\ d _xZ\ m `DZ\ d `HZ\ m _qZL m ]KZA m ]KX} +m ]sYs d ]oYq d ]mYm d ]mYg d ]oYd d ]sYb d ]zYb d ]~Yd d ^@Yg d ^@Ym +d ]~Yq d ]zYs d ]sYs m ]sYs d ]pYq d ]oYm d ]oYg d ]pYd d ]sYb m ]zYb +d ]}Yd d ]~Yg d ]~Ym d ]}Yq d ]zYs m ]sYb d ]oY` d ]mY^ d ]kYZ d ]kYR +d ]mYN d ]oYL d ]sYJ d ]zYJ d ]~YL d ^@YN d ^BYR d ^BYZ d ^@Y^ d ]~Y` +d ]zYb m ]sYb d ]pY` d ]oY^ d ]mYZ d ]mYR d ]oYN d ]pYL d ]sYJ m ]zYJ +d ]}YL d ]~YN d ^@YR d ^@YZ d ]~Y^ d ]}Y` d ]zYb m ]jX} m ^XYs d ^SYq +d ^RYm d ^RYg d ^SYd d ^XYb d ^^Yb d ^cYd d ^eYg d ^eYm d ^cYq d ^^Ys +d ^XYs m ^XYs d ^UYq d ^SYm d ^SYg d ^UYd d ^XYb m ^^Yb d ^bYd d ^cYg +d ^cYm d ^bYq d ^^Ys m ^XYb d ^SY` d ^RY^ d ^PYZ d ^PYR d ^RYN d ^SYL +d ^XYJ d ^^YJ d ^cYL d ^eYN d ^fYR d ^fYZ d ^eY^ d ^cY` d ^^Yb m ^XYb +d ^UY` d ^SY^ d ^RYZ d ^RYR d ^SYN d ^UYL d ^XYJ m ^^YJ d ^bYL d ^cYN +d ^eYR d ^eYZ d ^cY^ d ^bY` d ^^Yb m ^OX} m ^sZA m ^sX} m _RZA m _RX} +m _tYu d _rYk m `JYu d `HYk m _zYd d _xYZ m `DYd d `CYZ m _tYR d _rYH +m `JYR d `HYH m _tYq d `HYq m _tYo d `HYo m _zY` d `CY` m _zY^ d `CY^ +m _tYN d `HYN m _tYL d `HYL m _qX} m ]KXq m ]KWm m ]sXd d ]oXb d ]mX^ +d ]mXX d ]oXT d ]sXR d ]zXR d ]~XT d ^@XX d ^@X^ d ]~Xb d ]zXd d ]sXd +m ]sXd d ]pXb d ]oX^ d ]oXX d ]pXT d ]sXR m ]zXR d ]}XT d ]~XX d ]~X^ +d ]}Xb d ]zXd m ]sXR d ]oXP d ]mXN d ]kXK d ]kXC d ]mW? d ]oW} d ]sW{ +d ]zW{ d ]~W} d ^@W? d ^BXC d ^BXK d ^@XN d ]~XP d ]zXR m ]sXR d ]pXP +d ]oXN d ]mXK d ]mXC d ]oW? d ]pW} d ]sW{ m ]zW{ d ]}W} d ]~W? d ^@XC +d ^@XK d ]~XN d ]}XP d ]zXR m ]jWm m ^eXV d ^cXP d ^`XM d ^[XK d ^ZXK +d ^UXM d ^RXP d ^PXV d ^PXX d ^RX^ d ^UXb d ^ZXd d ^]Xd d ^bXb d ^eX^ +d ^fXX d ^fXM d ^eXE d ^cXA d ^`W} d ^[W{ d ^VW{ d ^SW} d ^RXA d ^RXC +d ^SXE d ^UXC d ^SXA m ^ZXK d ^VXM d ^SXP d ^RXV d ^RXX d ^SX^ d ^VXb +d ^ZXd m ^]Xd d ^`Xb d ^cX^ d ^eXX d ^eXM d ^cXE d ^bXA d ^^W} d ^[W{ +m ^OWm m ^sXq m ^sWm m _RXq m _RWm m _~Xd d _~W{ m _?Xd d _?W{ m _qXV +d _rXX d _uXV d _wXN d _xXK d _yXI d _|XG m _rXX d _tXV d _uXN d _wXK +d _xXI d _|XG d `@XG d `EXI d `FXK d `HXN d `IXV d `JXX m `@XG d `CXI +d `EXK d `FXN d `HXV d `JXX d `LXV m _yXd d `CXd m _yW{ d `CW{ m _qWm +m ]KWb m ]KV^ m ^@WG d ]~WA d ]{V} d ]vV{ d ]uV{ d ]pV} d ]mWA d ]kWG +d ]kWI d ]mWO d ]pWS d ]uWT d ]xWT d ]}WS d ^@WO d ^BWI d ^BV} d ^@Vu +d ]~Vq d ]{Vn d ]vVl d ]rVl d ]oVn d ]mVq d ]mVs d ]oVu d ]pVs d ]oVq +m ]uV{ d ]rV} d ]oWA d ]mWG d ]mWI d ]oWO d ]rWS d ]uWT m ]xWT d ]{WS +d ]~WO d ^@WI d ^@V} d ]~Vu d ]}Vq d ]zVn d ]vVl m ]jV^ m ^ZWT d ^UWS +d ^RWM d ^PWC d ^PV} d ^RVs d ^UVn d ^ZVl d ^]Vl d ^bVn d ^eVs d ^fV} +d ^fWC d ^eWM d ^bWS d ^]WT d ^ZWT m ^ZWT d ^VWS d ^UWQ d ^SWM d ^RWC +d ^RV} d ^SVs d ^UVp d ^VVn d ^ZVl m ^]Vl d ^`Vn d ^bVp d ^cVs d ^eV} +d ^eWC d ^cWM d ^bWQ d ^`WS d ^]WT m ^OV^ m ^sWb m ^sV^ m _RWb m _RV^ +m _qWb m _qV^ m ]KVS m ]KUO m ^@Ux d ]~Ur d ]{Un d ]vUl d ]uUl d ]pUn +d ]mUr d ]kUx d ]kUy d ]mU? d ]pVC d ]uVE d ]xVE d ]}VC d ^@U? d ^BUy +d ^BUn d ^@Uf d ]~Ub d ]{U^ d ]vU\ d ]rU\ d ]oU^ d ]mUb d ]mUd d ]oUf +d ]pUd d ]oUb m ]uUl d ]rUn d ]oUr d ]mUx d ]mUy d ]oU? d ]rVC d ]uVE +m ]xVE d ]{VC d ]~U? d ^@Uy d ^@Un d ]~Uf d ]}Ub d ]zU^ d ]vU\ m ]jUO +m ^UU} d ^XU? d ^]VE d ^]U\ m ^[VC d ^[U\ m ^UU\ d ^cU\ m ^OUO m ^sVS +m ^sUO m _RVS m _RUO m _uVM d _uUO m _wVM d _wUO m _uVM d `DVM m _uUO +d `DUO m _qUO m ]KUC m ]KS? m ^@Th d ]~Tb d ]{T^ d ]vT] d ]uT] d ]pT^ +d ]mTb d ]kTh d ]kTj d ]mTp d ]pTt d ]uTv d ]xTv d ]}Tt d ^@Tp d ^BTj +d ^BT^ d ^@TW d ]~TS d ]{TO d ]vTM d ]rTM d ]oTO d ]mTS d ]mTU d ]oTW +d ]pTU d ]oTS m ]uT] d ]rT^ d ]oTb d ]mTh d ]mTj d ]oTp d ]rTt d ]uTv +m ]xTv d ]{Tt d ]~Tp d ^@Tj d ^@T^ d ]~TW d ]}TS d ]zTO d ]vTM m ]jS? +m ^RTn d ^STl d ^RTj d ^PTl d ^PTn d ^RTr d ^STt d ^XTv d ^^Tv d ^cTt +d ^eTr d ^fTn d ^fTj d ^eTf d ^`Tb d ^XT^ d ^UT] d ^RTY d ^PTS d ^PTM +m ^^Tv d ^bTt d ^cTr d ^eTn d ^eTj d ^cTf d ^^Tb d ^XT^ m ^PTQ d ^RTS +d ^UTS d ^]TO d ^bTO d ^eTQ d ^fTS m ^UTS d ^]TM d ^cTM d ^eTO d ^fTS +d ^fTW m ^OS? m ^sUC m ^sS? m _RUC m _RS? m _qTv d `JTG m _qS? m ]KSt +m ]KRp m ^@SY d ]~SS d ]{SO d ]vSM d ]uSM d ]pSO d ]mSS d ]kSY d ]kS[ +d ]mSa d ]pSe d ]uSf d ]xSf d ]}Se d ^@Sa d ^BS[ d ^BSO d ^@SG d ]~SC +d ]{S@ d ]vR~ d ]rR~ d ]oS@ d ]mSC d ]mSE d ]oSG d ]pSE d ]oSC m ]uSM +d ]rSO d ]oSS d ]mSY d ]mS[ d ]oSa d ]rSe d ]uSf m ]xSf d ]{Se d ]~Sa +stroke +m ]~Sa d ^@S[ d ^@SO d ]~SG d ]}SC d ]zS@ d ]vR~ m ]jRp m ^RS_ d ^SS] +d ^RS[ d ^PS] d ^PS_ d ^RSc d ^SSe d ^XSf d ^^Sf d ^cSe d ^eSa d ^eS[ +d ^cSW d ^^SU d ^ZSU m ^^Sf d ^bSe d ^cSa d ^cS[ d ^bSW d ^^SU m ^^SU +d ^bSS d ^eSO d ^fSK d ^fSE d ^eSB d ^cS@ d ^^R~ d ^XR~ d ^SS@ d ^RSB +d ^PSE d ^PSG d ^RSI d ^SSG d ^RSE m ^cSQ d ^eSK d ^eSE d ^cSB d ^bS@ +d ^^R~ m ^ORp m ^sSt m ^sRp m _RSt m _RRp m _?Sn d _?Rp m `BSn d `BRp +m _sSn d `BSn m _sRp d `BRp m _qRp m ]KRe m ]KQa m ^@RJ d ]~RD d ]{R@ +d ]vQ~ d ]uQ~ d ]pR@ d ]mRD d ]kRJ d ]kRK d ]mRQ d ]pRU d ]uRW d ]xRW +d ]}RU d ^@RQ d ^BRK d ^BR@ d ^@Qx d ]~Qt d ]{Qp d ]vQn d ]rQn d ]oQp +d ]mQt d ]mQv d ]oQx d ]pQv d ]oQt m ]uQ~ d ]rR@ d ]oRD d ]mRJ d ]mRK +d ]oRQ d ]rRU d ]uRW m ]xRW d ]{RU d ]~RQ d ^@RK d ^@R@ d ]~Qx d ]}Qt +d ]zQp d ]vQn m ]jQa m ^^RS d ^^Qn m ^`RW d ^`Qn m ^`RW d ^OQz d ^hQz +m ^ZQn d ^eQn m ^OQa m ^sRe m ^sQa m _RRe m _RQa m _qRe m _qQa m ]KQU +m ]KPQ m ^@Pz d ]~Pt d ]{Pq d ]vPo d ]uPo d ]pPq d ]mPt d ]kPz d ]kP| +d ]mQB d ]pQF d ]uQH d ]xQH d ]}QF d ^@QB d ^BP| d ^BPq d ^@Pi d ]~Pe +d ]{Pa d ]vP_ d ]rP_ d ]oPa d ]mPe d ]mPg d ]oPi d ]pPg d ]oPe m ]uPo +d ]rPq d ]oPt d ]mPz d ]mP| d ]oQB d ]rQF d ]uQH m ]xQH d ]{QF d ]~QB +d ^@P| d ^@Pq d ]~Pi d ]}Pe d ]zPa d ]vP_ m ]jPQ m ^SQH d ^PPt m ^PPt +d ^SPx d ^XPz d ^]Pz d ^bPx d ^ePt d ^fPo d ^fPk d ^ePe d ^bPa d ^]P_ +d ^XP_ d ^SPa d ^RPc d ^PPg d ^PPi d ^RPk d ^SPi d ^RPg m ^]Pz d ^`Px +d ^cPt d ^ePo d ^ePk d ^cPe d ^`Pa d ^]P_ m ^SQH d ^cQH m ^SQF d ^[QF +d ^cQH m ^OPQ m ^sQU m ^sPQ m _RQU m _RPQ m `GPt d `JPq d `GPm m `CPz +d `IPq d `CPg m _sPq d `IPq m _qPQ m ]KPF m ]KOB m ^@Ok d ]~Oe d ]{Oa +d ]vO_ d ]uO_ d ]pOa d ]mOe d ]kOk d ]kOm d ]mOs d ]pOw d ]uOy d ]xOy +d ]}Ow d ^@Os d ^BOm d ^BOa d ^@OY d ]~OV d ]{OR d ]vOP d ]rOP d ]oOR +d ]mOV d ]mOW d ]oOY d ]pOW d ]oOV m ]uO_ d ]rOa d ]oOe d ]mOk d ]mOm +d ]oOs d ]rOw d ]uOy m ]xOy d ]{Ow d ]~Os d ^@Om d ^@Oa d ]~OY d ]}OV +d ]zOR d ]vOP m ]jOB m ^cOs d ^bOq d ^cOo d ^eOq d ^eOs d ^cOw d ^`Oy +d ^[Oy d ^VOw d ^SOs d ^ROo d ^POg d ^PO[ d ^ROV d ^UOR d ^ZOP d ^]OP +d ^bOR d ^eOV d ^fO[ d ^fO] d ^eOc d ^bOg d ^]Oi d ^[Oi d ^VOg d ^SOc +d ^RO] m ^[Oy d ^XOw d ^UOs d ^SOo d ^ROg d ^RO[ d ^SOV d ^VOR d ^ZOP +m ^]OP d ^`OR d ^cOV d ^eO[ d ^eO] d ^cOc d ^`Og d ^]Oi m ^OOB m ^sPF +m ^sOB m _RPF m _ROB m _rOk d _xOk d `AOT m _wOk d `AOP m `NP@ d `AOP +m _qOB m ]KNw m ]KMs m ^@N[ d ]~NV d ]{NR d ]vNP d ]uNP d ]pNR d ]mNV +d ]kN[ d ]kN] d ]mNc d ]pNg d ]uNi d ]xNi d ]}Ng d ^@Nc d ^BN] d ^BNR +d ^@NJ d ]~NF d ]{NB d ]vN@ d ]rN@ d ]oNB d ]mNF d ]mNH d ]oNJ d ]pNH +d ]oNF m ]uNP d ]rNR d ]oNV d ]mN[ d ]mN] d ]oNc d ]rNg d ]uNi m ]xNi +d ]{Ng d ]~Nc d ^@N] d ^@NR d ]~NJ d ]}NF d ]zNB d ]vN@ m ]jMs m ^PNi +d ^PN] m ^PNa d ^RNe d ^UNi d ^XNi d ^`Nc d ^cNc d ^eNe d ^fNi m ^RNe +d ^UNg d ^XNg d ^`Nc m ^fNi d ^fNc d ^eN] d ^^NT d ^]NP d ^[NJ d ^[N@ +m ^eN] d ^]NT d ^[NP d ^ZNJ d ^ZN@ m ^OMs m ^sNw m ^sMs m _RNw m _RMs +m _|N[ d _xNZ d _uNV d _tNR d _rNL d _rNF d _tNB d _xN@ d _{N@ d _~NB +d `BNH d `ENN d `HNV d `IN[ m _|N[ d _yNZ d _wNV d _uNR d _tNL d _tNF +d _uNB d _xN@ m _|N[ d _?N[ d `BNZ d `CNV d `FNF d `HNB d `IN@ m _?N[ +d `@NZ d `BNV d `ENF d `FNB d `IN@ d `JN@ m _qMs m ]KMg m ]KLc m ^@ML +d ]~MF d ]{MC d ]vMA d ]uMA d ]pMC d ]mMF d ]kML d ]kMN d ]mMT d ]pMX +d ]uMZ d ]xMZ d ]}MX d ^@MT d ^BMN d ^BMC d ^@L{ d ]~Lw d ]{Ls d ]vLq +d ]rLq d ]oLs d ]mLw d ]mLy d ]oL{ d ]pLy d ]oLw m ]uMA d ]rMC d ]oMF +d ]mML d ]mMN d ]oMT d ]rMX d ]uMZ m ]xMZ d ]{MX d ]~MT d ^@MN d ^@MC +d ]~L{ d ]}Lw d ]zLs d ]vLq m ]jLc m ^XMZ d ^SMX d ^RMT d ^RMN d ^SMJ +d ^XMH d ^^MH d ^cMJ d ^eMN d ^eMT d ^cMX d ^^MZ d ^XMZ m ^XMZ d ^UMX +d ^SMT d ^SMN d ^UMJ d ^XMH m ^^MH d ^bMJ d ^cMN d ^cMT d ^bMX d ^^MZ +m ^XMH d ^SMF d ^RMD d ^PMA d ^PLy d ^RLu d ^SLs d ^XLq d ^^Lq d ^cLs +d ^eLu d ^fLy d ^fMA d ^eMD d ^cMF d ^^MH m ^XMH d ^UMF d ^SMD d ^RMA +d ^RLy d ^SLu d ^ULs d ^XLq m ^^Lq d ^bLs d ^cLu d ^eLy d ^eMA d ^cMD +d ^bMF d ^^MH m ^OLc m ^sMg m ^sLc m _RMg m _RLc m `BMZ d _}MX d _zMT +d _wML d _uMF d _tL? d _rLs d _qLc m `BMZ d _?MX d _|MT d _yML d _wMF +d _uL? d _tLs d _rLc m `BMZ d `EMZ d `HMX d `IMV d `IMP d `HML d `FMJ +d `BMH d _|MH m `EMZ d `HMV d `HMP d `FML d `EMJ d `BMH m _|MH d `BMF +d `EMC d `FL? d `FLy d `ELu d `CLs d _?Lq d _|Lq d _yLs d _wLu d _uL{ +m _|MH d `@MF d `CMC d `EL? d `ELy d `CLu d `BLs d _?Lq m _qLc m ]KLX +m ]KKT m ^@K} d ]~Kw d ]{Ks d ]vKq d ]uKq d ]pKs d ]mKw d ]kK} d ]kK? +d ]mLE d ]pLI d ]uLK d ]xLK d ]}LI d ^@LE d ^BK? d ^BKs d ^@Kk d ]~Kg +d ]{Kd d ]vKb +stroke +m ]vKb d ]rKb d ]oKd d ]mKg d ]mKi d ]oKk d ]pKi d ]oKg m ]uKq d ]rKs +d ]oKw d ]mK} d ]mK? d ]oLE d ]rLI d ]uLK m ]xLK d ]{LI d ]~LE d ^@K? +d ^@Ks d ]~Kk d ]}Kg d ]zKd d ]vKb m ]jKT m ^eK} d ^cKw d ^`Ks d ^[Kq +d ^ZKq d ^UKs d ^RKw d ^PK} d ^PK? d ^RLE d ^ULI d ^ZLK d ^]LK d ^bLI +d ^eLE d ^fK? d ^fKs d ^eKk d ^cKg d ^`Kd d ^[Kb d ^VKb d ^SKd d ^RKg +d ^RKi d ^SKk d ^UKi d ^SKg m ^ZKq d ^VKs d ^SKw d ^RK} d ^RK? d ^SLE +d ^VLI d ^ZLK m ^]LK d ^`LI d ^cLE d ^eK? d ^eKs d ^cKk d ^bKg d ^^Kd +d ^[Kb m ^OKT m ^sLX m ^sKT m _RLX m _RKT m _qK} d _tK} d _xK{ d _yKw +d `BKZ d `DKV d `FKT m _tK} d _vK{ d _xKw d `@KZ d `BKV d `FKT d `IKT +m `KK} d `IKy d `FKs d _tK^ d _qKX d _qKT m _qKT m ]QJs d ]TJu d ]YJ{ +d ]YJR m ]XJy d ]XJR m ]QJR d ]`JR m ]KJE m ]{J{ d ]vJy d ]sJs d ]qJj +d ]qJd d ]sJZ d ]vJT d ]{JR d ]~JR d ^CJT d ^FJZ d ^GJd d ^GJj d ^FJs +d ^CJy d ]~J{ d ]{J{ m ]{J{ d ]xJy d ]vJw d ]tJs d ]sJj d ]sJd d ]tJZ +d ]vJV d ]xJT d ]{JR m ]~JR d ^AJT d ^CJV d ^DJZ d ^FJd d ^FJj d ^DJs +d ^CJw d ^AJy d ]~J{ m ]pJE m ^_J{ d ^[Jy d ^WJs d ^VJj d ^VJd d ^WJZ +d ^[JT d ^_JR d ^cJR d ^gJT d ^kJZ d ^lJd d ^lJj d ^kJs d ^gJy d ^cJ{ +d ^_J{ m ^_J{ d ^\Jy d ^[Jw d ^YJs d ^WJj d ^WJd d ^YJZ d ^[JV d ^\JT +d ^_JR m ^cJR d ^fJT d ^gJV d ^iJZ d ^kJd d ^kJj d ^iJs d ^gJw d ^fJy +d ^cJ{ m ^TJE m ^yKI m ^yJE m _XKI m _XJE m `IJl d `FJn d `BJn d _}Jl +d _zJf d _xJ` d _xJZ d _zJV d _|JT d _?JR d `BJR d `GJT d `KJZ d `LJ` +d `LJf d `KJj d `DJs d `BJw d `BJ{ d `DJ} d `GJ} d `KJ{ d `NJw m `BJn +d _?Jl d _|Jf d _zJ` d _zJX d _|JT m `BJR d `FJT d `IJZ d `KJ` d `KJh +d `IJl d `FJq d `DJu d `DJy d `FJ{ d `IJ{ d `NJw m _wJE m ]QId d ]TIf +d ]YIl d ]YIC m ]XIj d ]XIC m ]QIC d ]`IC m ]KHu m ]{Il d ]vIj d ]sId +d ]qIZ d ]qIT d ]sIK d ]vIE d ]{IC d ]~IC d ^CIE d ^FIK d ^GIT d ^GIZ +d ^FId d ^CIj d ]~Il d ]{Il m ]{Il d ]xIj d ]vIh d ]tId d ]sIZ d ]sIT +d ]tIK d ]vIG d ]xIE d ]{IC m ]~IC d ^AIE d ^CIG d ^DIK d ^FIT d ^FIZ +d ^DId d ^CIh d ^AIj d ]~Il m ]pHu m ^[Id d ^^If d ^cIl d ^cIC m ^aIj +d ^aIC m ^[IC d ^iIC m ^THu m ^yIy m ^yHu m _XIy m _XHu m `MIX d `JI\ +d `FI^ d _?I^ d _|I\ d _|IX d _?IT d `EIS m _?I^ d _~I\ d _~IX d `AIT +d `EIS m `EIS d _|IQ d _xIM d _xII d _zIE d _?IC d `EIC d `HIE d `KII +m `EIS d _~IQ d _zIM d _zII d _|IE d _?IC m _wHu m ]QHU d ]THW d ]YH\ +d ]YGt m ]XH[ d ]XGt m ]QGt d ]`Gt m ]KGf m ]{H\ d ]vH[ d ]sHU d ]qHK +d ]qHE d ]sG{ d ]vGv d ]{Gt d ]~Gt d ^CGv d ^FG{ d ^GHE d ^GHK d ^FHU +d ^CH[ d ]~H\ d ]{H\ m ]{H\ d ]xH[ d ]vHY d ]tHU d ]sHK d ]sHE d ]tG{ +d ]vGx d ]xGv d ]{Gt m ]~Gt d ^AGv d ^CGx d ^DG{ d ^FHE d ^FHK d ^DHU +d ^CHY d ^AH[ d ]~H\ m ]pGf m ^WHU d ^YHS d ^WHQ d ^VHS d ^VHU d ^WHY +d ^YH[ d ^^H\ d ^dH\ d ^iH[ d ^kHY d ^lHU d ^lHQ d ^kHM d ^fHI d ^^HE +d ^[HC d ^WG? d ^VGy d ^VGt m ^dH\ d ^gH[ d ^iHY d ^kHU d ^kHQ d ^iHM +d ^dHI d ^^HE m ^VGx d ^WGy d ^[Gy d ^cGv d ^gGv d ^kGx d ^lGy m ^[Gy +d ^cGt d ^iGt d ^kGv d ^lGy d ^lG} m ^TGf m ^yHj m ^yGf m _XHj m _XGf +m _?HM d _}HK d _zHG d _xHA d _xG{ d _zGx d _{Gv d _~Gt d `CGt d `GGv +d `KGy d `NG? d `PHE d `PHK d `MHO d `JHO d `GHK d `DHC d `AGy d _}Gf +m _xG{ d _{Gx d _~Gv d `CGv d `GGx d `KG{ d `NG? m `PHK d `MHM d `JHM +d `GHI d `DHC d `AGx d _~Gf m _wGf m ]QGE d ]TGG d ]YGM d ]YFd m ]XGK +d ]XFd m ]QFd d ]`Fd m ]KFW m ]{GM d ]vGK d ]sGE d ]qF| d ]qFv d ]sFl +d ]vFf d ]{Fd d ]~Fd d ^CFf d ^FFl d ^GFv d ^GF| d ^FGE d ^CGK d ]~GM +d ]{GM m ]{GM d ]xGK d ]vGI d ]tGE d ]sF| d ]sFv d ]tFl d ]vFh d ]xFf +d ]{Fd m ]~Fd d ^AFf d ^CFh d ^DFl d ^FFv d ^FF| d ^DGE d ^CGI d ^AGK +d ]~GM m ]pFW m ^WGE d ^YGC d ^WGA d ^VGC d ^VGE d ^WGI d ^YGK d ^^GM +d ^dGM d ^iGK d ^kGG d ^kGA d ^iF~ d ^dF| d ^_F| m ^dGM d ^gGK d ^iGG +d ^iGA d ^gF~ d ^dF| m ^dF| d ^gFz d ^kFv d ^lFr d ^lFl d ^kFh d ^iFf +d ^dFd d ^^Fd d ^YFf d ^WFh d ^VFl d ^VFn d ^WFp d ^YFn d ^WFl m ^iFx +d ^kFr d ^kFl d ^iFh d ^gFf d ^dFd m ^TFW m ^yG[ m ^yFW m _XG[ m _XFW +m _}G@ d _zFd m _?G@ d _}Ft d _|Fj d _zFd m `OG@ d `MFx d `JFp m `PG@ +d `OFz d `MFv d `JFp d `GFl d `BFh d _?Ff d _zFd m _xG@ d _?G@ m _wFW +m ilcf d ipch d itcn d itcE m iscl d iscE m ilcE d i{cE m ifbw m jVcn +d jQcl d jNcf d jLc\ d jLcV d jNcM d jQcG d jVcE d jYcE d j^cG d jacM +d jbcV d jbc\ d jacf d j^cl d jYcn d jVcn m jVcn d jScl d jQcj d jOcf +d jNc\ d jNcV d jOcM d jQcI d jScG d jVcE m jYcE d j\cG d j^cI d j_cM +d jacV d jac\ d j_cf d j^cj d j\cl d jYcn m jKbw m j?cj d j?cE m kAcn +d kAcE m kAcn d jocQ d kIcQ m jzcE d kFcE m jobw m kTc{ m kTbw m ksc{ +m ksbw m lRcX d lRc\ d lUc` d lYc` d l[c^ d l[cZ d lYcS d lVcE m lXc` +d lYc^ d lYcZ d lXcS +stroke +m lXcS d lUcE m lYcS d l\cZ d l_c^ d lbc` d lec` d lhc^ d lic\ d licV +d lhcM d lcbw m lec` d lhc\ d lhcV d lfcM d lbbw m lRbw m ilbW d ipbY +d itb^ d itav m isb] d isav m ilav d i{av m ifah m jVb^ d jQb] d jNbW +d jLbM d jLbG d jNa} d jQax d jVav d jYav d j^ax d jaa} d jbbG d jbbM +d jabW d j^b] d jYb^ d jVb^ m jVb^ d jSb] d jQb[ d jObW d jNbM d jNbG +d jOa} d jQaz d jSax d jVav m jYav d j\ax d j^az d j_a} d jabG d jabM +d j_bW d j^b[ d j\b] d jYb^ m jKah m jtb^ d jqbK m jqbK d jtbO d jybQ +d j~bQ d kBbO d kFbK d kGbE d kGbA d kFa{ d kBax d j~av d jyav d jtax +d jraz d jqa} d jqa? d jrbA d jta? d jra} m j~bQ d kAbO d kDbK d kFbE +d kFbA d kDa{ d kAax d j~av m jtb^ d kDb^ m jtb] d j|b] d kDb^ m joah +m kTbl m kTah m ksbl m ksah m l[bQ d lVbC d lTa{ d lTax d lVav d l]av +d lbaz d lda} m l]bQ d lYbC d lVa{ d lVax d lYav m lRah m ilaG d ipaI +d itaO d it`f m isaM d is`f m il`f d i{`f m if`Y m jVaO d jQaM d jNaG +d jL`~ d jL`x d jN`n d jQ`h d jV`f d jY`f d j^`h d ja`n d jb`x d jb`~ +d jaaG d j^aM d jYaO d jVaO m jVaO d jSaM d jQaK d jOaG d jN`~ d jN`x +d jO`n d jQ`j d jS`h d jV`f m jY`f d j\`h d j^`j d j_`n d ja`x d ja`~ +d j_aG d j^aK d j\aM d jYaO m jK`Y m kDaI d kBaG d kDaE d kFaG d kFaI +d kDaM d kAaO d j|aO d jwaM d jtaI d jraE d jq`~ d jq`r d jr`l d jv`h +d jz`f d j~`f d kB`h d kF`l d kG`r d kG`t d kF`z d kB`~ d j~a@ d j|a@ +d jw`~ d jt`z d jr`t m j|aO d jyaM d jvaI d jtaE d jr`~ d jr`r d jt`l +d jw`h d jz`f m j~`f d kA`h d kD`l d kF`r d kF`t d kD`z d kA`~ d j~a@ +m jo`Y m kTa] m kT`Y m ksa] m ks`Y m lg`x d lf`~ d lda@ d laaB d l]aB +d lXa@ d lU`z d lS`t d lS`n d lU`j d lW`h d lZ`f d l]`f d lb`h d lf`l +d lg`r d li`| d liaE d lgaK d lfaM d lbaO d l]aO d lZaM d lXaK d lXaI +d lZaI d lZaK m l]aB d lZa@ d lW`z d lU`t d lU`l d lW`h m l]`f d la`h +d ld`l d lf`r d lg`| d lgaE d lfaK d lbaO m lR`Y m il_x d ip_z d it`@ +d it_W m is_~ d is_W m il_W d i{_W m if_I m jV`@ d jQ_~ d jN_x d jL_n +d jL_i d jN__ d jQ_Y d jV_W d jY_W d j^_Y d ja__ d jb_i d jb_n d ja_x +d j^_~ d jY`@ d jV`@ m jV`@ d jS_~ d jQ_| d jO_x d jN_n d jN_i d jO__ +d jQ_[ d jS_Y d jV_W m jY_W d j\_Y d j^_[ d j___ d ja_i d ja_n d j__x +d j^_| d j\_~ d jY`@ m jK_I m jq`@ d jq_t m jq_x d jr_| d jv`@ d jy`@ +d kA_z d kD_z d kF_| d kG`@ m jr_| d jv_~ d jy_~ d kA_z m kG`@ d kG_z +d kF_t d j?_j d j~_g d j|_a d j|_W m kF_t d j~_j d j|_g d jz_a d jz_W +m jo_I m kT`M m kT_I m ks`M m ks_I m lX_r d lR_W m lZ_r d lS_W m lh_r +d lj_p d lk_p d lj_r d lf_r d lc_p d l]_i d lZ_g d lW_g m lZ_g d l]_e +d l`_Y d lb_W m lZ_g d l[_e d l^_Y d l`_W d lc_W d lf_Y d lj__ m lR_I +m il^i d ip^k d it^p d it^H m is^o d is^H m il^H d i{^H m if]z m jV^p +d jQ^o d jN^i d jL^_ d jL^Y d jN^O d jQ^J d jV^H d jY^H d j^^J d ja^O +d jb^Y d jb^_ d ja^i d j^^o d jY^p d jV^p m jV^p d jS^o d jQ^m d jO^i +d jN^_ d jN^Y d jO^O d jQ^K d jS^J d jV^H m jY^H d j\^J d j^^K d j_^O +d ja^Y d ja^_ d j_^i d j^^m d j\^o d jY^p m jK]z m jy^p d jt^o d jr^k +d jr^e d jt^a d jy^_ d j?^_ d kD^a d kF^e d kF^k d kD^o d j?^p d jy^p +m jy^p d jv^o d jt^k d jt^e d jv^a d jy^_ m j?^_ d kB^a d kD^e d kD^k +d kB^o d j?^p m jy^_ d jt^] d jr^[ d jq^W d jq^O d jr^K d jt^J d jy^H +d j?^H d kD^J d kF^K d kG^O d kG^W d kF^[ d kD^] d j?^_ m jy^_ d jv^] +d jt^[ d jr^W d jr^O d jt^K d jv^J d jy^H m j?^H d kB^J d kD^K d kF^O +d kF^W d kD^[ d kB^] d j?^_ m jo]z m kT^~ m kT]z m ks^~ m ks]z m lS^p +d lW^p d lZ^o d l[^m d l]^i d lf^M d lh^J d lj^H m lW^p d lZ^m d l[^i +d le^M d lf^J d lj^H d lk^H m l^^c d lR^H m l^^c d lS^H m lR]z m il]Y +d ip][ d it]a d it\x m is]_ d is\x m il\x d i{\x m if\k m jV]a d jQ]_ +d jN]Y d jL]P d jL]J d jN]@ d jQ\z d jV\x d jY\x d j^\z d ja]@ d jb]J +d jb]P d ja]Y d j^]_ d jY]a d jV]a m jV]a d jS]_ d jQ]] d jO]Y d jN]P +d jN]J d jO]@ d jQ\| d jS\z d jV\x m jY\x d j\\z d j^\| d j_]@ d ja]J +d ja]P d j_]Y d j^]] d j\]_ d jY]a m jK\k m kF]S d kD]N d kA]J d j|]H +d jz]H d jv]J d jr]N d jq]S d jq]U d jr][ d jv]_ d jz]a d j~]a d kB]_ +d kF][ d kG]U d kG]J d kF]B d kD\~ d kA\z d j|\x d jw\x d jt\z d jr\~ +d jr]@ d jt]B d jv]@ d jt\~ m jz]H d jw]J d jt]N d jr]S d jr]U d jt][ +d jw]_ d jz]a m j~]a d kA]_ d kD][ d kF]U d kF]J d kD]B d kB\~ d j?\z +d j|\x m jo\k m kT]o m kT\k m ks]o m ks\k m lY]S d lR\k m lZ]S d lR\k +m lY]N d lW]B d lW\| d lZ\x d l]\x d l`\z d lc\~ d lf]D m lh]S d ld\~ +d ld\z d lf\x d lj\x d lm\| d ln]@ m lj]S d lf\~ d lf\z d lg\x m lR\k +m il\J d ip\L d it\R d it[i m is\P d is[i m il[i d i{[i m if[[ m jQ\J +d jT\L d jY\R d jY[i m jW\P d jW[i m jQ[i d j_[i m jK[[ m jz\R d jv\P +d jr\J d jq\@ d jq[{ d jr[q d jv[k d jz[i d j~[i +stroke +m j~[i d kB[k d kF[q d kG[{ d kG\@ d kF\J d kB\P d j~\R d jz\R m jz\R +d jw\P d jv\N d jt\J d jr\@ d jr[{ d jt[q d jv[m d jw[k d jz[i m j~[i +d kA[k d kB[m d kD[q d kF[{ d kF\@ d kD\J d kB\N d kA\P d j~\R m jo[[ +m kT\_ m kT[[ m ks\_ m ks[[ m lX\D d lU[i m lZ\D d lX[y d lW[o d lU[i +m lj\D d lh[| d le[u m lk\D d lj[~ d lh[{ d le[u d lb[q d l][m d lZ[k +d lU[i m lS\D d lZ\D m lR[[ m ilZ{ d ipZ} d it[C d itZZ m is[A d isZZ +m ilZZ d i{ZZ m ifZL m jQZ{ d jTZ} d jY[C d jYZZ m jW[A d jWZZ m jQZZ +d j_ZZ m jKZL m jvZ{ d jyZ} d j~[C d j~ZZ m j|[A d j|ZZ m jvZZ d kDZZ +m joZL m kT[P m kTZL m ks[P m ksZL m l^Zu d lYZs d lUZm d lSZg d lSZa +d lUZ^ d lWZ\ d lZZZ d l^ZZ d lcZ\ d lfZa d lhZg d lhZm d lfZq d leZs +d laZu d l^Zu m l^Zu d lZZs d lWZm d lUZg d lUZ` d lWZ\ m l^ZZ d laZ\ +d leZa d lfZg d lfZo d leZs m lRZL m ilYk d ipYm d itYs d itYJ m isYq +d isYJ m ilYJ d i{YJ m ifX} m jQYk d jTYm d jYYs d jYYJ m jWYq d jWYJ +m jQYJ d j_YJ m jKX} m jrYk d jtYi d jrYg d jqYi d jqYk d jrYo d jtYq +d jyYs d j?Ys d kDYq d kFYo d kGYk d kGYg d kFYd d kAY` d jyY\ d jvYZ +d jrYV d jqYP d jqYJ m j?Ys d kBYq d kDYo d kFYk d kFYg d kDYd d j?Y` +d jyY\ m jqYN d jrYP d jvYP d j~YL d kBYL d kFYN d kGYP m jvYP d j~YJ +d kDYJ d kFYL d kGYP d kGYT m joX} m kTZA m kTX} m ksZA m ksX} m l\Yd +d lVYJ m l\Yd d lXYJ m leYd d leYJ m leYd d lfYJ m lRY` d lUYd d lYYe +d llYe m lRY` d lUYb d lYYd d llYd m lRX} m ilX\ d ipX^ d itXd d itW{ +m isXb d isW{ m ilW{ d i{W{ m ifWm m jQX\ d jTX^ d jYXd d jYW{ m jWXb +d jWW{ m jQW{ d j_W{ m jKWm m jrX\ d jtXZ d jrXX d jqXZ d jqX\ d jrX` +d jtXb d jyXd d j?Xd d kDXb d kFX^ d kFXX d kDXT d j?XR d jzXR m j?Xd +d kBXb d kDX^ d kDXX d kBXT d j?XR m j?XR d kBXP d kFXM d kGXI d kGXC +d kFW? d kDW} d j?W{ d jyW{ d jtW} d jrW? d jqXC d jqXE d jrXG d jtXE +d jrXC m kDXN d kFXI d kFXC d kDW? d kBW} d j?W{ m joWm m kTXq m kTWm +m ksXq m ksWm m lRXN d lRXR d lUXV d lYXV d lZXT d lZXP d lYXG d lYXA +d lZW} d l\W{ m lWXV d lYXT d lYXP d lWXG d lWXA d lYW} d l\W{ d l^W{ +d laW} d ldXA d lgXG d lhXM d ljXV d ljX^ d lhXb d lfXd d lcXd d l`X` +d l`X\ d laXV d ldXP d lgXM d lkXI m laW} d ldXC d lfXG d lgXM d lhXV +d lhX^ d lgXb d lfXd m lRWm m ilWM d ipWO d itWT d itVl m isWS d isVl +m ilVl d i{Vl m ifV^ m jQWM d jTWO d jYWT d jYVl m jWWS d jWVl m jQVl +d j_Vl m jKV^ m j?WQ d j?Vl m kAWT d kAVl m kAWT d joVw d kIVw m jzVl +d kFVl m joV^ m kTWb m kTV^ m ksWb m ksV^ m lUVu d lWVp d lXVn d l\Vl +d l_Vl d ldVn d lgVs d liVy d liV? d lgWC d lfWE d lbWG d l_WG d lZWE +d lWV? d lUVy d lRV^ m l_Vl d lbVn d lfVs d lgVy d lgWA d lfWE m l_WG +d l\WE d lXV? d lWVy d lRV^ m lRV^ m ilU} d ipU? d itVE d itU\ m isVC +d isU\ m ilU\ d i{U\ m ifUO m jQU} d jTU? d jYVE d jYU\ m jWVC d jWU\ +m jQU\ d j_U\ m jKUO m jtVE d jqUr m jqUr d jtUv d jyUx d j~Ux d kBUv +d kFUr d kGUl d kGUh d kFUb d kBU^ d j~U\ d jyU\ d jtU^ d jrU` d jqUd +d jqUf d jrUh d jtUf d jrUd m j~Ux d kAUv d kDUr d kFUl d kFUh d kDUb +d kAU^ d j~U\ m jtVE d kDVE m jtVC d j|VC d kDVE m joUO m kTVS m kTUO +m ksVS m ksUO m llUx d l\Ux d lXUv d lUUp d lSUj d lSUd d lUU` d lVU^ +d lYU\ d l\U\ d laU^ d ldUd d lfUj d lfUp d ldUt d lcUv d l_Ux m l\Ux +d lYUv d lVUp d lUUj d lUUb d lVU^ m l\U\ d l_U^ d lcUd d ldUj d ldUr +d lcUv m lcUv d llUv m lRUO m ilTn d ipTp d itTv d itTM m isTt d isTM +m ilTM d i{TM m ifS? m jQTn d jTTp d jYTv d jYTM m jWTt d jWTM m jQTM +d j_TM m jKS? m kDTp d kBTn d kDTl d kFTn d kFTp d kDTt d kATv d j|Tv +d jwTt d jtTp d jrTl d jqTd d jqTY d jrTS d jvTO d jzTM d j~TM d kBTO +d kFTS d kGTY d kGT[ d kFT` d kBTd d j~Tf d j|Tf d jwTd d jtT` d jrT[ +m j|Tv d jyTt d jvTp d jtTl d jrTd d jrTY d jtTS d jwTO d jzTM m j~TM +d kATO d kDTS d kFTY d kFT[ d kDT` d kATd d j~Tf m joS? m kTUC m kTS? +m ksUC m ksS? m l`Tf d l[TM m l`Tf d l]TM m lRTb d lUTf d lZTh d lkTh +m lRTb d lUTd d lZTf d lkTf m lRS? m ilS_ d ipSa d itSf d itR~ m isSe +d isR~ m ilR~ d i{R~ m ifRp m jQS_ d jTSa d jYSf d jYR~ m jWSe d jWR~ +m jQR~ d j_R~ m jKRp m jqSf d jqS[ m jqS_ d jrSc d jvSf d jySf d kASa +d kDSa d kFSc d kGSf m jrSc d jvSe d jySe d kASa m kGSf d kGSa d kFS[ +d j?SQ d j~SM d j|SG d j|R~ m kFS[ d j~SQ d j|SM d jzSG d jzR~ m joRp +m kTSt m kTRp m ksSt m ksRp m lRSQ d lRSU d lUSY d lZSY d l[SW d l[SS +d lXSG d lXSB d l[R~ m lXSY d lZSW d lZSS d lWSG d lWSB d lXS@ d l[R~ +d l]R~ d lbS@ d leSC d lhSI d ljSO d ljSU d lhSY d lfSW d lhSU d ljSO +m lhSI d ljSU m lRRp m ilRO d ipRQ d itRW d itQn m isRU d isQn m ilQn +d i{Qn m ifQa m jQRO d jTRQ d jYRW d jYQn m jWRU d jWQn m jQQn d j_Qn +m jKQa m jyRW d jtRU d jrRQ d jrRK d jtRH d jyRF d j?RF d kDRH d kFRK +d kFRQ d kDRU d j?RW d jyRW m jyRW d jvRU d jtRQ d jtRK d jvRH d jyRF +m j?RF d kBRH d kDRK d kDRQ d kBRU d j?RW m jyRF d jtRD d jrRB d jqQ~ +d jqQv d jrQr d jtQp d jyQn d j?Qn d kDQp d kFQr d kGQv d kGQ~ d kFRB +d kDRD d j?RF m jyRF d jvRD d jtRB d jrQ~ d jrQv d jtQr d jvQp d jyQn +m j?Qn d kBQp d kDQr d kFQv d kFQ~ d kDRB d kBRD d j?RF m joQa m kTRe +m kTQa m ksRe m ksQa m lRRe m lRQa m ilQ@ d ipQB d itQH d itP_ m isQF +d isP_ m ilP_ d i{P_ +stroke +m i{P_ m ifPQ m jQQ@ d jTQB d jYQH d jYP_ m jWQF d jWP_ m jQP_ d j_P_ +m jKPQ m kFPz d kDPt d kAPq d j|Po d jzPo d jvPq d jrPt d jqPz d jqP| +d jrQB d jvQF d jzQH d j~QH d kBQF d kFQB d kGP| d kGPq d kFPi d kDPe +d kAPa d j|P_ d jwP_ d jtPa d jrPe d jrPg d jtPi d jvPg d jtPe m jzPo +d jwPq d jtPt d jrPz d jrP| d jtQB d jwQF d jzQH m j~QH d kAQF d kDQB +d kFP| d kFPq d kDPi d kBPe d j?Pa d j|P_ m joPQ m kTQU m kTPQ m ksQU +m ksPQ m lUPr d lWPv d l\Px d lZPz d lWPx d lUPr d lSPm d lSPg d lUPa +d lVP_ d lYP_ d l\Pa d l^Pg d l`Pm m lSPg d lUPc d lVPa d lYPa d l\Pc +d l^Pg m l^Pm d l^Pg d l`Pa d laP_ d ldP_ d lgPa d ljPg d lkPm d lkPr +d ljPx d lhPz d lgPx d ljPv d lkPr m l^Pg d l`Pc d laPa d ldPa d lgPc +d ljPg m lRPQ m ilOq d ipOs d itOy d itOP m isOw d isOP m ilOP d i{OP +m ifOB m jNOq d jOOo d jNOm d jLOo d jLOq d jNOu d jOOw d jTOy d j[Oy +d j_Ow d jaOu d jbOq d jbOm d jaOi d j\Oe d jTOa d jQO_ d jNO[ d jLOV +d jLOP m j[Oy d j^Ow d j_Ou d jaOq d jaOm d j_Oi d j[Oe d jTOa m jLOT +d jNOV d jQOV d jYOR d j^OR d jaOT d jbOV m jQOV d jYOP d j_OP d jaOR +d jbOV d jbOY m jKOB m jzOy d jvOw d jrOq d jqOg d jqOa d jrOW d jvOR +d jzOP d j~OP d kBOR d kFOW d kGOa d kGOg d kFOq d kBOw d j~Oy d jzOy +m jzOy d jwOw d jvOu d jtOq d jrOg d jrOa d jtOW d jvOT d jwOR d jzOP +m j~OP d kAOR d kBOT d kDOW d kFOa d kFOg d kDOq d kBOu d kAOw d j~Oy +m joOB m kTPF m kTOB m ksPF m ksOB m lbOy d l^Ow d l]Ou d l]Os d l^Oq +d ldOo d liOo m ldOo d l]Om d lYOk d lWOg d lWOc d l[O_ d l`O] d lfO] +m ldOo d l^Om d l[Ok d lYOg d lYOc d l]O_ d l`O] m l`O] d lYO[ d lUOY +d lTOV d lTOR d lWON d l`OJ d lbOH d lbOD d l^OB d l[OB m l`O] d l[O[ +d lWOY d lUOV d lUOR d lYON d l`OJ m lROB m ilNa d ipNc d itNi d itN@ +m isNg d isN@ m ilN@ d i{N@ m ifMs m jNNa d jON_ d jNN] d jLN_ d jLNa +d jNNe d jONg d jTNi d j[Ni d j_Ng d jaNe d jbNa d jbN] d jaNZ d j\NV +d jTNR d jQNP d jNNL d jLNF d jLN@ m j[Ni d j^Ng d j_Ne d jaNa d jaN] +d j_NZ d j[NV d jTNR m jLND d jNNF d jQNF d jYNB d j^NB d jaND d jbNF +m jQNF d jYN@ d j_N@ d jaNB d jbNF d jbNJ m jKMs m jvNa d jyNc d j~Ni +d j~N@ m j|Ng d j|N@ m jvN@ d kDN@ m joMs m kTNw m kTMs m ksNw m ksMs +m ldNi d l\Ms m lfNi d lZMs m lRNT d lRNX d lUN[ d lYN[ d lZNZ d lZNV +d lYNL d lYNF d l\NB d l`NB d lcND d lgNJ d ljNP m lWN[ d lYNZ d lYNV +d lWNL d lWNF d lYNB d l\N@ d l`N@ d lcNB d lfNF d lhNL d ljNP d lmN[ +m lRMs m ilMR d ipMT d itMZ d itLq m isMX d isLq m ilLq d i{Lq m ifLc +m jNMR d jOMP d jNMN d jLMP d jLMR d jNMV d jOMX d jTMZ d j[MZ d j_MX +d jaMV d jbMR d jbMN d jaMJ d j\MF d jTMC d jQMA d jNL} d jLLw d jLLq +m j[MZ d j^MX d j_MV d jaMR d jaMN d j_MJ d j[MF d jTMC m jLLu d jNLw +d jQLw d jYLs d j^Ls d jaLu d jbLw m jQLw d jYLq d j_Lq d jaLs d jbLw +d jbL{ m jKLc m jrMR d jtMP d jrMN d jqMP d jqMR d jrMV d jtMX d jyMZ +d j?MZ d kDMX d kFMV d kGMR d kGMN d kFMJ d kAMF d jyMC d jvMA d jrL} +d jqLw d jqLq m j?MZ d kBMX d kDMV d kFMR d kFMN d kDMJ d j?MF d jyMC +m jqLu d jrLw d jvLw d j~Ls d kBLs d kFLu d kGLw m jvLw d j~Lq d kDLq +d kFLs d kGLw d kGL{ m joLc m kTMg m kTLc m ksMg m ksLc m laMZ d l^MX +d l\MV d l\MT d l^MR d lcMP d llMP d llMR d lfMP d l`ML d lZMH d lUMC +d lSL} d lSLy d lULu d lZLq d l`Lm d laLi d laLe d l`Lc d l\Lc d lZLe +m lcMN d l\MH d lWMC d lUL} d lULy d lWLu d lZLq m lRLc m ilLC d ipLE +d itLK d itKb m isLI d isKb m ilKb d i{Kb m ifKT m jNLC d jOLA d jNK? +d jLLA d jLLC d jNLG d jOLI d jTLK d j[LK d j_LI d jaLG d jbLC d jbK? +d jaK{ d j\Kw d jTKs d jQKq d jNKm d jLKg d jLKb m j[LK d j^LI d j_LG +d jaLC d jaK? d j_K{ d j[Kw d jTKs m jLKf d jNKg d jQKg d jYKd d j^Kd +d jaKf d jbKg m jQKg d jYKb d j_Kb d jaKd d jbKg d jbKk m jKKT m jrLC +d jtLA d jrK? d jqLA d jqLC d jrLG d jtLI d jyLK d j?LK d kDLI d kFLE +d kFK? d kDK{ d j?Ky d jzKy m j?LK d kBLI d kDLE d kDK? d kBK{ d j?Ky +m j?Ky d kBKw d kFKs d kGKo d kGKi d kFKf d kDKd d j?Kb d jyKb d jtKd +d jrKf d jqKi d jqKk d jrKm d jtKk d jrKi m kDKu d kFKo d kFKi d kDKf +d kBKd d j?Kb m joKT m kTLX m kTKT m ksLX m ksKT m l`LR d l\LP d lZLN +d lXLK d lXLG d lZLC d l\LA d l^K} d l^Ky d lZKu m l\LP d lZLL d lZLI +d l\LE d l^LC d l`K? d l`K{ d l^Kw d lVKs d l^Ko d l`Kk d l`Kg d l^Kd +d l\Kb d lZK^ d lZKZ d l\KV m lZKq d l^Km d l^Ki d l\Kf d lZKd d lXK` +d lXK\ d lZKX d l\KV d l`KT m lRKT m ilJs d ipJu d itJ{ d itJR m isJy +d isJR m ilJR d i{JR m ifJE m jNJs d jOJq d jNJo d jLJq d jLJs d jNJw +d jOJy d jTJ{ d j[J{ d j_Jy d jaJw d jbJs d jbJo d jaJl d j\Jh d jTJd +d jQJb d jNJ^ d jLJX d jLJR m j[J{ d j^Jy +stroke +m j^Jy d j_Jw d jaJs d jaJo d j_Jl d j[Jh d jTJd m jLJV d jNJX d jQJX +d jYJT d j^JT d jaJV d jbJX m jQJX d jYJR d j_JR d jaJT d jbJX d jbJ\ +m jKJE m j?Jw d j?JR m kAJ{ d kAJR m kAJ{ d joJ^ d kIJ^ m jzJR d kFJR +m joJE m kTKI m kTJE m ksKI m ksJE m lVKC d lVJE m lbKC d lbJE m lRJE +m ilId d ipIf d itIl d itIC m isIj d isIC m ilIC d i{IC m ifHu m jNId +d jOIb d jNI` d jLIb d jLId d jNIh d jOIj d jTIl d j[Il d j_Ij d jaIh +d jbId d jbI` d jaI\ d j\IX d jTIT d jQIS d jNIO d jLII d jLIC m j[Il +d j^Ij d j_Ih d jaId d jaI` d j_I\ d j[IX d jTIT m jLIG d jNII d jQII +d jYIE d j^IE d jaIG d jbII m jQII d jYIC d j_IC d jaIE d jbII d jbIM +m jKHu m jtIl d jqIX m jqIX d jtI\ d jyI^ d j~I^ d kBI\ d kFIX d kGIS +d kGIO d kFII d kBIE d j~IC d jyIC d jtIE d jrIG d jqIK d jqIM d jrIO +d jtIM d jrIK m j~I^ d kAI\ d kDIX d kFIS d kFIO d kDII d kAIE d j~IC +m jtIl d kDIl m jtIj d j|Ij d kDIl m joHu m kTIy m kTHu m ksIy m ksHu +m lXIt d l\Ir d l^Ip d l`Il d l`Ih d l^Id d l\Ib d lZI^ d lZIZ d l^IV +m l\Ir d l^In d l^Ij d l\If d lZId d lXI` d lXI\ d lZIX d lbIT d lZIQ +d lXIM d lXII d lZIE d l\IC d l^H? d l^H{ d l\Hw m l^IS d lZIO d lZIK +d l\IG d l^IE d l`IA d l`H} d l^Hy d l\Hw d lXHu m lRHu m ilHU d ipHW +d itH\ d itGt m isH[ d isGt m ilGt d i{Gt m ifGf m jNHU d jOHS d jNHQ +d jLHS d jLHU d jNHY d jOH[ d jTH\ d j[H\ d j_H[ d jaHY d jbHU d jbHQ +d jaHM d j\HI d jTHE d jQHC d jNG? d jLGy d jLGt m j[H\ d j^H[ d j_HY +d jaHU d jaHQ d j_HM d j[HI d jTHE m jLGx d jNGy d jQGy d jYGv d j^Gv +d jaGx d jbGy m jQGy d jYGt d j_Gt d jaGv d jbGy d jbG} m jKGf m kDHW +d kBHU d kDHS d kFHU d kFHW d kDH[ d kAH\ d j|H\ d jwH[ d jtHW d jrHS +d jqHK d jqG? d jrGy d jvGv d jzGt d j~Gt d kBGv d kFGy d kGG? d kGHA +d kFHG d kBHK d j~HM d j|HM d jwHK d jtHG d jrHA m j|H\ d jyH[ d jvHW +d jtHS d jrHK d jrG? d jtGy d jwGv d jzGt m j~Gt d kAGv d kDGy d kFG? +d kFHA d kDHG d kAHK d j~HM m joGf m kTHj m kTGf m ksHj m ksGf m lXHI +d lTHE d lXHA m l\HO d lVHE d l\G{ m lVHE d lkHE m lRGf m ilGE d ipGG +d itGM d itFd m isGK d isFd m ilFd d i{Fd m ifFW m jNGE d jOGC d jNGA +d jLGC d jLGE d jNGI d jOGK d jTGM d j[GM d j_GK d jaGI d jbGE d jbGA +d jaF~ d j\Fz d jTFv d jQFt d jNFp d jLFj d jLFd m j[GM d j^GK d j_GI +d jaGE d jaGA d j_F~ d j[Fz d jTFv m jLFh d jNFj d jQFj d jYFf d j^Ff +d jaFh d jbFj m jQFj d jYFd d j_Fd d jaFf d jbFj d jbFn m jKFW m jqGM +d jqGA m jqGE d jrGI d jvGM d jyGM d kAGG d kDGG d kFGI d kGGM m jrGI +d jvGK d jyGK d kAGG m kGGM d kGGG d kFGA d j?Fx d j~Ft d j|Fn d j|Fd +m kFGA d j~Fx d j|Ft d jzFn d jzFd m joFW m kTG[ m kTFW m ksG[ m ksFW +m Fwcf d Fwcd d Fycd d Fycf d Fwcf m Fwch d Fych d Fzcf d Fzcd d Fycb +d Fwcb d Fvcd d Fvcf d Fwcj d Fycl d F~cn d GDcn d GIcl d GJch d GJcb +d GIc^ d GDc\ m GGcl d GIch d GIcb d GGc^ m GBcn d GEcl d GGch d GGcb +d GEc^ d GBc\ m F?c\ d GDc\ d GGcZ d GJcV d GLcS d GLcM d GJcI d GIcG +d GDcE d F~cE d FycG d FwcI d FvcM d FvcO d FwcQ d FycQ d FzcO d FzcM +d FycK d FwcK m GIcV d GJcS d GJcM d GIcI m GBc\ d GEcZ d GGcX d GIcS +d GIcM d GGcG d GDcE m FwcO d FwcM d FycM d FycO d FwcO m Ftbw m G\cf +d G\cd d G]cd d G]cf d G\cf m G\ch d G]ch d G_cf d G_cd d G]cb d G\cb +d GZcd d GZcf d G\cj d G]cl d Gbcn d Gicn d Gmcl d Gocj d Gpcf d Gpcb +d Goc^ d GjcZ d GbcV d G_cU d G\cQ d GZcK d GZcE m Gmcj d Gocf d Gocb +d Gmc^ m Gicn d Glcl d Gmcf d Gmcb d Glc^ d GicZ d GbcV m GZcI d G\cK +d G_cK d GgcI d GmcI d GpcK m G_cK d GgcG d GmcG d GocI m G_cK d GgcE +d GmcE d GocG d GpcK d GpcO m GYbw m G}c{ m G}bw m H\c{ m H\bw m FwbW +d FwbU d FybU d FybW d FwbW m FwbY d FybY d FzbW d FzbU d FybS d FwbS +d FvbU d FvbW d Fwb[ d Fyb] d F~b^ d GDb^ d GIb] d GJbY d GJbS d GIbO +d GDbM m GGb] d GIbY d GIbS d GGbO m GBb^ d GEb] d GGbY d GGbS d GEbO +d GBbM m F?bM d GDbM d GGbK d GJbG d GLbC d GLa} d GJaz d GIax d GDav +d F~av d Fyax d Fwaz d Fva} d Fva? d FwbA d FybA d Fza? d Fza} d Fya{ +d Fwa{ m GIbG d GJbC d GJa} d GIaz m GBbM d GEbK d GGbI d GIbC d GIa} +d GGax d GDav m Fwa? d Fwa} d Fya} d Fya? d Fwa? m Ftah m G\bW d G\bU +d G]bU d G]bW d G\bW m G\bY d G]bY d G_bW d G_bU d G]bS d G\bS d GZbU +d GZbW d G\b[ d G]b] d Gbb^ d Gib^ d Gmb] d GobY d GobS d GmbO d GibM +m Glb] d GmbY d GmbS d GlbO m Ggb^ d Gjb] d GlbY d GlbS d GjbO d GgbM +m GdbM d GibM d GlbK d GobG d GpbC d Gpa} d Goaz d Gmax d Giav d Gbav +d G]ax d G\az d GZa} d GZa? d G\bA d G]bA d G_a? d G_a} d G]a{ d G\a{ +m GmbG d GobC d Goa} d Gmaz m GgbM d GjbK d GlbI d GmbC d Gma} d Glax +d Giav m G\a? d G\a} d G]a} d G]a? d G\a? m GYah m G}bl m G}ah m H\bl +m H\ah m H{bl m H{ah m IZbl m IZah m Iybl m Iyah m J_b^ d J]b] d J]bY +d J_bI m J_b^ d J_bC +stroke +m J_bC d JbbC m J_b^ d Jbb^ d JbbC m Jbb^ d Jdb] d JdbY d JbbI m J_a{ +d J]az d J]ax d J_av d Jbav d Jdax d Jdaz d Jba{ d J_a{ m J_az d J_ax +d Jbax d Jbaz d J_az m JXah m FwaG d FwaE d FyaE d FyaG d FwaG m FwaI +d FyaI d FzaG d FzaE d FyaC d FwaC d FvaE d FvaG d FwaK d FyaM d F~aO +d GDaO d GIaM d GJaI d GJaC d GIa@ d GD`~ m GGaM d GIaI d GIaC d GGa@ +m GBaO d GEaM d GGaI d GGaC d GEa@ d GB`~ m F?`~ d GD`~ d GG`| d GJ`x +d GL`t d GL`n d GJ`j d GI`h d GD`f d F~`f d Fy`h d Fw`j d Fv`n d Fv`p +d Fw`r d Fy`r d Fz`p d Fz`n d Fy`l d Fw`l m GI`x d GJ`t d GJ`n d GI`j +m GB`~ d GE`| d GG`z d GI`t d GI`n d GG`h d GD`f m Fw`p d Fw`n d Fy`n +d Fy`p d Fw`p m Ft`Y m GgaI d Gg`f m GiaK d Gi`h m GjaO d Gj`f m GjaO +d GY`r d Gr`r m Gb`f d Go`f m Gg`h d Gd`f m Gg`j d Ge`f m Gj`j d Gl`f +m Gj`h d Gm`f m GY`Y m G}a] m G}`Y m H\a] m H\`Y m H{a] m H{`Y m IZa] +m IZ`Y m Iya] m Iy`Y m J]aO d J[aM d J[aB m J]aM d J[aB m J]aO d J_aM +d J[aB m JlaO d JkaM d JkaB m JlaM d JkaB m JlaO d JnaM d JkaB m JX`Y +m Fw_x d Fw_v d Fy_v d Fy_x d Fw_x m Fw_z d Fy_z d Fz_x d Fz_v d Fy_t +d Fw_t d Fv_v d Fv_x d Fw_| d Fy_~ d F~`@ d GD`@ d GI_~ d GJ_z d GJ_t +d GI_p d GD_n m GG_~ d GI_z d GI_t d GG_p m GB`@ d GE_~ d GG_z d GG_t +d GE_p d GB_n m F?_n d GD_n d GG_l d GJ_i d GL_e d GL__ d GJ_[ d GI_Y +d GD_W d F~_W d Fy_Y d Fw_[ d Fv__ d Fv_a d Fw_c d Fy_c d Fz_a d Fz__ +d Fy_] d Fw_] m GI_i d GJ_e d GJ__ d GI_[ m GB_n d GE_l d GG_j d GI_e +d GI__ d GG_Y d GD_W m Fw_a d Fw__ d Fy__ d Fy_a d Fw_a m Ft_I m G]`@ +d GZ_l d G]_p d Gb_r d Gg_r d Gl_p d Go_l d Gp_g d Gp_c d Go_] d Gl_Y +d Gg_W d Gb_W d G]_Y d G\_[ d GZ__ d GZ_a d G\_c d G]_c d G__a d G___ +d G]_] d G\_] m Gm_l d Go_i d Go_a d Gm_] m Gg_r d Gj_p d Gl_n d Gm_i +d Gm_a d Gl_[ d Gj_Y d Gg_W m G\_a d G\__ d G]__ d G]_a d G\_a m G]`@ +d Gm`@ m G]_~ d Gj_~ m G]_| d Gd_| d Gj_~ d Gm`@ m GY_I m G}`M m G}_I +m H\`M m H\_I m H{`M m H{_I m IZ`M m IZ_I m Iy`M m Iy_I m Je`@ d J[_I +m Jn`@ d Jd_I m J[_j d Jp_j m JY__ d Jn__ m JX_I m Fw^i d Fw^g d Fy^g +d Fy^i d Fw^i m Fw^k d Fy^k d Fz^i d Fz^g d Fy^e d Fw^e d Fv^g d Fv^i +d Fw^m d Fy^o d F~^p d GD^p d GI^o d GJ^k d GJ^e d GI^a d GD^_ m GG^o +d GI^k d GI^e d GG^a m GB^p d GE^o d GG^k d GG^e d GE^a d GB^_ m F?^_ +d GD^_ d GG^] d GJ^Y d GL^U d GL^O d GJ^K d GI^J d GD^H d F~^H d Fy^J +d Fw^K d Fv^O d Fv^Q d Fw^S d Fy^S d Fz^Q d Fz^O d Fy^M d Fw^M m GI^Y +d GJ^U d GJ^O d GI^K m GB^_ d GE^] d GG^[ d GI^U d GI^O d GG^J d GD^H +m Fw^Q d Fw^O d Fy^O d Fy^Q d Fw^Q m Ft]z m Gl^k d Gl^i d Gm^i d Gm^k +d Gl^k m Gm^m d Gl^m d Gj^k d Gj^i d Gl^g d Gm^g d Go^i d Go^k d Gm^o +d Gj^p d Ge^p d Ga^o d G]^k d G\^g d GZ^_ d GZ^S d G\^M d G_^J d Gd^H +d Gg^H d Gl^J d Go^M d Gp^S d Gp^U d Go^[ d Gl^_ d Gg^a d Gd^a d Ga^_ +d G_^] d G]^Y m G_^k d G]^g d G\^_ d G\^S d G]^M d G_^K m Gm^M d Go^Q +d Go^W d Gm^[ m Ge^p d Gb^o d Ga^m d G_^i d G]^a d G]^S d G_^M d Ga^J +d Gd^H m Gg^H d Gj^J d Gl^K d Gm^Q d Gm^W d Gl^] d Gj^_ d Gg^a m GY]z +m G}^~ m G}]z m H\^~ m H\]z m H{^~ m H{]z m IZ^~ m IZ]z m Iy^~ m Iy]z +m Ja^x d Ja^@ m Jg^x d Jg^@ m Jn^g d Jn^i d Jl^i d Jl^e d Jo^e d Jo^i +d Jn^m d Jl^o d Jg^p d Ja^p d J\^o d JY^k d JY^e d J[^a d J`^] d Ji^Y +d Jl^W d Jn^S d Jn^M d Jl^J m J[^e d J\^a d J`^_ d Ji^[ d Jl^Y d Jn^U +m J\^o d J[^k d J[^g d J\^c d J`^a d Ji^] d Jn^Y d Jo^U d Jo^O d Jn^K +d Jl^J d Jg^H d Ja^H d J\^J d J[^K d JY^O d JY^S d J\^S d J\^O d J[^O +d J[^Q m JX]z m Fw]Y d Fw]W d Fy]W d Fy]Y d Fw]Y m Fw][ d Fy][ d Fz]Y +d Fz]W d Fy]U d Fw]U d Fv]W d Fv]Y d Fw]] d Fy]_ d F~]a d GD]a d GI]_ +d GJ][ d GJ]U d GI]R d GD]P m GG]_ d GI][ d GI]U d GG]R m GB]a d GE]_ +d GG][ d GG]U d GE]R d GB]P m F?]P d GD]P d GG]N d GJ]J d GL]F d GL]@ +d GJ\| d GI\z d GD\x d F~\x d Fy\z d Fw\| d Fv]@ d Fv]B d Fw]D d Fy]D +d Fz]B d Fz]@ d Fy\~ d Fw\~ m GI]J d GJ]F d GJ]@ d GI\| m GB]P d GE]N +d GG]L d GI]F d GI]@ d GG\z d GD\x m Fw]B d Fw]@ d Fy]@ d Fy]B d Fw]B +m Ft\k m GZ]a d GZ]U m Gp]a d Gp][ d Go]U d Gi]L d Gg]H d Ge]@ d Ge\x +m Gg]J d Ge]F d Gd]@ d Gd\x m Go]U d Gg]L d Gd]F d Gb]@ d Gb\x d Ge\x +m GZ]Y d G\]] d G_]a d Gb]a d Gj][ d Gm][ d Go]] d Gp]a m G]]] d G_]_ +d Gb]_ d Ge]] m GZ]Y d G\][ d G_]] d Gb]] d Gj][ m GY\k m G}]o m G}\k +m H\]o m H\\k m H{]o m H{\k m IZ]o m IZ\k m Iy]o m Iy\k m Jr]a d JY\x +m J`]a d Jc]] d Jc]Y d Ja]U d J^]S d J\]S d JY]W d JY][ d JZ]_ d J]]a +d J`]a d Jc]_ d Jg]] d Jk]] d Jo]_ d Jr]a m Jl]F d Ji]D d Jh]@ d Jh\| +d Jk\x d Jn\x d Jp\z d Jr\~ d Jr]B d Jo]F d Jl]F m JX\k m Fw\J d Fw\H +d Fy\H d Fy\J d Fw\J m Fw\L d Fy\L d Fz\J d Fz\H d Fy\F d Fw\F d Fv\H +d Fv\J d Fw\N d Fy\P d F~\R d GD\R d GI\P d GJ\L d GJ\F d GI\B d GD\@ +m GG\P d GI\L d GI\F d GG\B m GB\R d GE\P d GG\L d GG\F d GE\B d GB\@ +m F?\@ d GD\@ d GG[~ d GJ[{ d GL[w +stroke +m GL[w d GL[q d GJ[m d GI[k d GD[i d F~[i d Fy[k d Fw[m d Fv[q d Fv[s +d Fw[u d Fy[u d Fz[s d Fz[q d Fy[o d Fw[o m GI[{ d GJ[w d GJ[q d GI[m +m GB\@ d GE[~ d GG[| d GI[w d GI[q d GG[k d GD[i m Fw[s d Fw[q d Fy[q +d Fy[s d Fw[s m Ft[[ m Gb\R d G]\P d G\\L d G\\F d G]\B d Gb\@ d Gi\@ +d Gm\B d Go\F d Go\L d Gm\P d Gi\R d Gb\R m G_\P d G]\L d G]\F d G_\B +m Gl\B d Gm\F d Gm\L d Gl\P m Gb\R d Ga\P d G_\L d G_\F d Ga\B d Gb\@ +m Gi\@ d Gj\B d Gl\F d Gl\L d Gj\P d Gi\R m Gb\@ d G][~ d G\[| d GZ[y +d GZ[q d G\[m d G][k d Gb[i d Gi[i d Gm[k d Go[m d Gp[q d Gp[y d Go[| +d Gm[~ d Gi\@ m G][| d G\[y d G\[q d G][m m Gm[m d Go[q d Go[y d Gm[| +m Gb\@ d G_[~ d G][y d G][q d G_[k d Gb[i m Gi[i d Gl[k d Gm[q d Gm[y +d Gl[~ d Gi\@ m GY[[ m G}\_ m G}[[ m H\\_ m H\[[ m H{\_ m H{[[ m IZ\_ +m IZ[[ m Iy\_ m Iy[[ m Jq\@ d Jq\B d Jp\B d Jp[~ d Js[~ d Js\B d Jq\D +d Jp\D d Jo\B d Jm[~ d Jk[u d Jh[o d Jf[k d Jc[i d J^[i d J[[k d JZ[o +d JZ[u d J[[y d Jc\@ d Jf\D d Jg\H d Jg\L d Jf\P d Jc\R d Ja\P d J_\L +d J_\F d Ja\@ d Jc[{ d Jh[q d Jl[k d Jo[i d Jq[i d Js[m d Js[o m J][k +d J[[o d J[[u d J][y d J^[{ m Jf\D d Jg\L m Jg\H d Jf\P m Ja\P d J_\H +m Ja\B d Jc[| d Jh[s d Jl[m d Jo[k m Ja[i d J^[k d J][o d J][u d J^[y +d Jc\@ m J_\L d Ja\D d Jd[| d Jj[s d Jm[m d Jp[k d Jq[k d Js[m m JX[[ +m FwZ{ d FwZy d FyZy d FyZ{ d FwZ{ m FwZ} d FyZ} d FzZ{ d FzZy d FyZw +d FwZw d FvZy d FvZ{ d FwZ? d Fy[A d F~[C d GD[C d GI[A d GJZ} d GJZw +d GIZs d GDZq m GG[A d GIZ} d GIZw d GGZs m GB[C d GE[A d GGZ} d GGZw +d GEZs d GBZq m F?Zq d GDZq d GGZo d GJZk d GLZg d GLZa d GJZ^ d GIZ\ +d GDZZ d F~ZZ d FyZ\ d FwZ^ d FvZa d FvZc d FwZe d FyZe d FzZc d FzZa +d FyZ` d FwZ` m GIZk d GJZg d GJZa d GIZ^ m GBZq d GEZo d GGZm d GIZg +d GIZa d GGZ\ d GDZZ m FwZc d FwZa d FyZa d FyZc d FwZc m FtZL m G]Za +d G]Z` d G_Z` d G_Za d G]Za m GmZq d GlZm d GjZk d GgZi d GdZi d G_Zk +d G\Zo d GZZu d GZZw d G\Z} d G_[A d Gd[C d Gg[C d Gl[A d GoZ} d GpZw +d GpZk d GoZc d GmZ` d GjZ\ d GeZZ d GaZZ d G]Z\ d G\Z` d G\Za d G]Zc +d G_Zc d GaZa d GaZ` d G_Z^ d G]Z^ m G]Zo d G\Zs d G\Zy d G]Z} m GlZ? +d GmZ} d GoZw d GoZk d GmZc d GlZ` m GdZi d GaZk d G_Zm d G]Zs d G]Zy +d G_Z? d Ga[A d Gd[C m Gg[C d Gj[A d GlZ} d GmZw d GmZi d GlZa d GjZ^ +d GiZ\ d GeZZ m GYZL m G}[P m G}ZL m H\[P m H\ZL m H{[P m H{ZL m IZ[P +m IZZL m Iy[P m IyZL m JdZ? d JbZ} d J_Z} d J]Z? d J][A d J_[C d Jb[C +d Jd[A d JdZ{ d JbZw d J]Zu m J_[A d J_Z? d JbZ? d Jb[A d J_[A m JbZ} +d JdZ{ m JdZ? d JbZw m JXZL m GBYm d GBYJ m GDYo d GDYL m GEYs d GEYJ +m GEYs d FtYV d GMYV m F~YJ d GJYJ m GBYL d F?YJ m GBYN d GAYJ m GEYN +d GGYJ m GEYL d GIYJ m FtX} m GdYs d G_Yq d G\Yk d GZYb d GZY\ d G\YR +d G_YL d GdYJ d GgYJ d GlYL d GoYR d GpY\ d GpYb d GoYk d GlYq d GgYs +d GdYs m G_Yo d G]Yk d G\Yd d G\YZ d G]YR d G_YN m GlYN d GmYR d GoYZ +d GoYd d GmYk d GlYo m GdYs d GaYq d G_Ym d G]Yd d G]YZ d G_YP d GaYL +d GdYJ m GgYJ d GjYL d GlYP d GmYZ d GmYd d GlYm d GjYq d GgYs m GYX} +m G}ZA m G}X} m H\ZA m H\X} m H{ZA m H{X} m IZZA m IZX} m IyZA m IyX} +m JhY{ d JdYw d J`Yq d J\Yi d JZY` d JZYX d J\YN d J`YF d JdYA d JhX} +m J`Yo d J^Yi d J\Yb d J\YV d J^YN d J`YH m JdYw d JbYs d J`Ym d J^Yb +d J^YV d J`YJ d JbYE d JdYA m JXX} m GBX^ d GBW{ m GDX` d GDW} m GEXd +d GEW{ m GEXd d FtXG d GMXG m F~W{ d GJW{ m GBW} d F?W{ m GBW? d GAW{ +m GEW? d GGW{ m GEW} d GIW{ m FtWm m GdX` d GdW{ m GeX` d GeW} m GgXd +d GgW{ m GgXd d GbX^ d G_X\ m G]W{ d GmW{ m GdW} d GaW{ m GdW? d GbW{ +m GgW? d GiW{ m GgW} d GjW{ m GYWm m G}Xq m G}Wm m H\Xq m H\Wm m H{Xq +m H{Wm m IZXq m IZWm m IyXq m IyWm m J\Xl d J`Xh d JdXb d JhXZ d JjXP +d JjXI d JhW? d JdWw d J`Wq d J\Wm m JdX` d JfXZ d JhXR d JhXG d JfW? +d JdWy m J`Xh d JbXd d JdX^ d JfXR d JfXG d JdW{ d JbWu d J`Wq m JXWm +m GBWO d GBVl m GDWQ d GDVn m GEWT d GEVl m GEWT d FtVw d GMVw m F~Vl +d GJVl m GBVn d F?Vl m GBVp d GAVl m GEVp d GGVl m GEVn d GIVl m FtV^ +m G\WM d G\WK d G]WK d G]WM d G\WM m G\WO d G]WO d G_WM d G_WK d G]WI +d G\WI d GZWK d GZWM d G\WQ d G]WS d GbWT d GiWT d GmWS d GoWQ d GpWM +d GpWI d GoWE d GjWA d GbV} d G_V{ d G\Vw d GZVq d GZVl m GmWQ d GoWM +d GoWI d GmWE m GiWT d GlWS d GmWM d GmWI d GlWE d GiWA d GbV} m GZVp +d G\Vq d G_Vq d GgVp d GmVp d GpVq m G_Vq d GgVn d GmVn d GoVp m G_Vq +d GgVl d GmVl d GoVn d GpVq d GpVu m GYV^ m G}Wb m G}V^ m H\Wb m H\V^ +m H{Wb m H{V^ m IZWb m IZV^ m IyWb m IyV^ m JcWT d JaWS d JeV? d JcV} +m JcWT d JcV} m JcWT d JeWS d JaV? d JcV} m JZWO d J[WO d JkWC d JlWC +m JZWO d JlWC m JZWO d JZWM d JlWE d JlWC m JlWO d JkWO d J[WC d JZWC +m JlWO d JZWC m JlWO d JlWM d JZWE d JZWC m JXV^ m GBU? d GBU\ m GDVA +d GDU^ m GEVE d GEU\ m GEVE d FtUh d GMUh m F~U\ d GJU\ m GBU^ d F?U\ +m GBU` d GAU\ m GEU` d GGU\ m GEU^ d GIU\ m FtUO m G\U} d G\U{ d G]U{ +d G]U} d G\U} m G\U? d G]U? d G_U} d G_U{ d G]Uy d G\Uy d GZU{ d GZU} +d G\VA d G]VC d GbVE d GiVE d GmVC d GoU? d GoUy d GmUv d GiUt m GlVC +d GmU? d GmUy d GlUv m GgVE d GjVC d GlU? d GlUy d GjUv d GgUt m GdUt +d GiUt d GlUr d GoUn d GpUj d GpUd d GoU` +stroke +m GoU` d GmU^ d GiU\ d GbU\ d G]U^ d G\U` d GZUd d GZUf d G\Uh d G]Uh +d G_Uf d G_Ud d G]Ub d G\Ub m GmUn d GoUj d GoUd d GmU` m GgUt d GjUr +d GlUp d GmUj d GmUd d GlU^ d GiU\ m G\Uf d G\Ud d G]Ud d G]Uf d G\Uf +m GYUO m G}VS m G}UO m H\VS m H\UO m H{VS m H{UO m IZVS m IZUO m IyVS +m IyUO m JeU? d JeU^ d JfU^ m JeU? d JfU? d JfU^ m JZUp d JqUp d JqUn +m JZUp d JZUn d JqUn m JXUO m GBTp d GBTM m GDTr d GDTO m GETv d GETM +m GETv d FtTY d GMTY m F~TM d GJTM m GBTO d F?TM m GBTQ d GATM m GETQ +d GGTM m GETO d GITM m FtS? m GgTp d GgTM m GiTr d GiTO m GjTv d GjTM +m GjTv d GYTY d GrTY m GbTM d GoTM m GgTO d GdTM m GgTQ d GeTM m GjTQ +d GlTM m GjTO d GmTM m GYS? m G}UC m G}S? m H\UC m H\S? m H{UC m H{S? +m IZUC m IZS? m IyUC m IyS? m JdTO d JbTM d J_TM d J]TO d J]TQ d J_TS +d JbTS d JdTQ d JdTK d JbTG d J]TE m J_TQ d J_TO d JbTO d JbTQ d J_TQ +m JbTM d JdTK m JdTO d JbTG m JXS? m GBSa d GBR~ m GDSc d GDS@ m GESf +d GER~ m GESf d FtSI d GMSI m F~R~ d GJR~ m GBS@ d F?R~ m GBSB d GAR~ +m GESB d GGR~ m GES@ d GIR~ m FtRp m G]Sf d GZSS d G]SW d GbSY d GgSY +d GlSW d GoSS d GpSM d GpSI d GoSC d GlS@ d GgR~ d GbR~ d G]S@ d G\SB +d GZSE d GZSG d G\SI d G]SI d G_SG d G_SE d G]SC d G\SC m GmSS d GoSO +d GoSG d GmSC m GgSY d GjSW d GlSU d GmSO d GmSG d GlSB d GjS@ d GgR~ +m G\SG d G\SE d G]SE d G]SG d G\SG m G]Sf d GmSf m G]Se d GjSe m G]Sc +d GdSc d GjSe d GmSf m GYRp m G}St m G}Rp m H\St m H\Rp m H{St m H{Rp +m IZSt m IZRp m IySt m IyRp m JZSQ d JqSQ d JqSO m JZSQ d JZSO d JqSO +m JXRp m GBRQ d GBQn m GDRS d GDQp m GERW d GEQn m GERW d FtQz d GMQz +m F~Qn d GJQn m GBQp d F?Qn m GBQr d GAQn m GEQr d GGQn m GEQp d GIQn +m FtQa m GlRQ d GlRO d GmRO d GmRQ d GlRQ m GmRS d GlRS d GjRQ d GjRO +d GlRM d GmRM d GoRO d GoRQ d GmRU d GjRW d GeRW d GaRU d G]RQ d G\RM +d GZRF d GZQz d G\Qt d G_Qp d GdQn d GgQn d GlQp d GoQt d GpQz d GpQ| +d GoRB d GlRF d GgRH d GdRH d GaRF d G_RD d G]R@ m G_RQ d G]RM d G\RF +d G\Qz d G]Qt d G_Qr m GmQt d GoQx d GoQ~ d GmRB m GeRW d GbRU d GaRS +d G_RO d G]RH d G]Qz d G_Qt d GaQp d GdQn m GgQn d GjQp d GlQr d GmQx +d GmQ~ d GlRD d GjRF d GgRH m GYQa m G}Re m G}Qa m H\Re m H\Qa m H{Re +m H{Qa m IZRe m IZQa m IyRe m IyQa m J_Qt d J]Qr d J]Qp d J_Qn d JbQn +d JdQp d JdQr d JbQt d J_Qt m J_Qr d J_Qp d JbQp d JbQr d J_Qr m JXQa +m GBQB d GBP_ m GDQD d GDPa m GEQH d GEP_ m GEQH d FtPk d GMPk m F~P_ +d GJP_ m GBPa d F?P_ m GBPc d GAP_ m GEPc d GGP_ m GEPa d GIP_ m FtPQ +m GZQH d GZP| m GpQH d GpQB d GoP| d GiPr d GgPo d GePg d GeP_ m GgPq +d GePm d GdPg d GdP_ m GoP| d GgPr d GdPm d GbPg d GbP_ d GeP_ m GZQ@ +d G\QD d G_QH d GbQH d GjQB d GmQB d GoQD d GpQH m G]QD d G_QF d GbQF +d GeQD m GZQ@ d G\QB d G_QD d GbQD d GjQB m GYPQ m G}QU m G}PQ m H\QU +m H\PQ m H{QU m H{PQ m IZQU m IZPQ m IyQU m IyPQ m JqQP d JXPQ d JYPQ +m JqQP d JsQP d JYPQ m JXPQ m GBOs d GBOP m GDOu d GDOR m GEOy d GEOP +m GEOy d FtO[ d GMO[ m F~OP d GJOP m GBOR d F?OP m GBOT d GAOP m GEOT +d GGOP m GEOR d GIOP m FtOB m GbOy d G]Ow d G\Os d G\Om d G]Oi d GbOg +d GiOg d GmOi d GoOm d GoOs d GmOw d GiOy d GbOy m G_Ow d G]Os d G]Om +d G_Oi m GlOi d GmOm d GmOs d GlOw m GbOy d GaOw d G_Os d G_Om d GaOi +d GbOg m GiOg d GjOi d GlOm d GlOs d GjOw d GiOy m GbOg d G]Oe d G\Oc +d GZO_ d GZOW d G\OT d G]OR d GbOP d GiOP d GmOR d GoOT d GpOW d GpO_ +d GoOc d GmOe d GiOg m G]Oc d G\O_ d G\OW d G]OT m GmOT d GoOW d GoO_ +d GmOc m GbOg d G_Oe d G]O_ d G]OW d G_OR d GbOP m GiOP d GlOR d GmOW +d GmO_ d GlOe d GiOg m GYOB m G}PF m G}OB m H\PF m H\OB m H{PF m H{OB +m IZPF m IZOB m IyPF m IyOB m JcOy d J^Ow d J[Oq d JYOg d JYOa d J[OW +d J^OR d JcOP d JfOP d JkOR d JnOW d JoOa d JoOg d JnOq d JkOw d JfOy +d JcOy m J^Ou d J\Oq d J[Oi d J[O_ d J\OW d J^OT m JkOT d JlOW d JnO_ +d JnOi d JlOq d JkOu m JcOy d J`Ow d J^Os d J\Oi d J\O_ d J^OV d J`OR +d JcOP m JfOP d JiOR d JkOV d JlO_ d JlOi d JkOs d JiOw d JfOy m JXOB +m GBNc d GBN@ m GDNe d GDNB m GENi d GEN@ m GENi d FtNL d GMNL m F~N@ +d GJN@ m GBNB d F?N@ m GBND d GAN@ m GEND d GGN@ m GENB d GIN@ m FtMs +m G]NH d G]NF d G_NF d G_NH d G]NH m GmNX d GlNT d GjNR d GgNP d GdNP +d G_NR d G\NV d GZN[ d GZN] d G\Nc d G_Ng d GdNi d GgNi d GlNg d GoNc +d GpN] d GpNR d GoNJ d GmNF d GjNB d GeN@ d GaN@ d G]NB d G\NF d G\NH +d G]NJ d G_NJ d GaNH d GaNF d G_ND d G]ND m G]NV d G\NZ d G\N_ d G]Nc +m GlNe d GmNc d GoN] d GoNR d GmNJ d GlNF m GdNP d GaNR d G_NT d G]NZ +d G]N_ d G_Ne d GaNg d GdNi m GgNi d GjNg d GlNc d GmN] d GmNP d GlNH +d GjND d GiNB d GeN@ m GYMs m G}Nw m G}Ms m H\Nw m H\Ms m H{Nw m H{Ms +m IZNw m IZMs m IyNw m IyMs m JcNe d JcN@ m JdNe d JdNB m JfNi d JfN@ +m JfNi d JaNc d J^Na m J\N@ d JlN@ m JcNB d J`N@ m JcND d JaN@ m JfND +d JgN@ m JfNB d JiN@ m JXMs m FyMZ d FvMF d FyMJ d F~ML d GBML d GGMJ +d GJMF d GLMA d GLL} d GJLw d GGLs d GBLq d F~Lq d FyLs d FwLu d FvLy +d FvL{ d FwL} d FyL} d FzL{ d FzLy d FyLw d FwLw m GIMF d GJMC d GJL{ +d GILw m GBML d GEMJ d GGMH d GIMC d GIL{ d GGLu d GELs d GBLq m FwL{ +d FwLy d FyLy d FyL{ d FwL{ m FyMZ d GIMZ m FyMX d GEMX m FyMV d F?MV +d GEMX d GIMZ m FtLc m GdMZ d G_MX d G\MR d GZMH d GZMC d G\Ly d G_Ls +d GdLq d GgLq d GlLs d GoLy d GpMC d GpMH d GoMR d GlMX d GgMZ d GdMZ +m G_MV d G]MR d G\MJ d G\MA d G]Ly d G_Lu m GlLu d GmLy d GoMA d GoMJ +d GmMR d GlMV m GdMZ d GaMX d G_MT d G]MJ d G]MA d G_Lw d GaLs d GdLq +m GgLq d GjLs d GlLw d GmMA d GmMJ d GlMT d GjMX +stroke +m GjMX d GgMZ m GYLc m G}Mg m G}Lc m H\Mg m H\Lc m H{Mg m H{Lc m IZMg +m IZLc m IyMg m IyLc m J[MR d J[MP d J\MP d J\MR d J[MR m J[MT d J\MT +d J^MR d J^MP d J\MN d J[MN d JYMP d JYMR d J[MV d J\MX d JaMZ d JgMZ +d JlMX d JnMV d JoMR d JoMN d JnMJ d JiMF d JaMC d J^MA d J[L} d JYLw +d JYLq m JlMV d JnMR d JnMN d JlMJ m JgMZ d JkMX d JlMR d JlMN d JkMJ +d JgMF d JaMC m JYLu d J[Lw d J^Lw d JfLu d JlLu d JoLw m J^Lw d JfLs +d JlLs d JnLu m J^Lw d JfLq d JlLq d JnLs d JoLw d JoL{ m JXLc m FyLK +d FvKw d FyK{ d F~K} d GBK} d GGK{ d GJKw d GLKq d GLKm d GJKg d GGKd +d GBKb d F~Kb d FyKd d FwKf d FvKi d FvKk d FwKm d FyKm d FzKk d FzKi +d FyKg d FwKg m GIKw d GJKs d GJKk d GIKg m GBK} d GEK{ d GGKy d GIKs +d GIKk d GGKf d GEKd d GBKb m FwKk d FwKi d FyKi d FyKk d FwKk m FyLK +d GILK m FyLI d GELI m FyLG d F?LG d GELI d GILK m FtKT m GdLG d GdKb +m GeLG d GeKd m GgLK d GgKb m GgLK d GbLE d G_LC m G]Kb d GmKb m GdKd +d GaKb m GdKf d GbKb m GgKf d GiKb m GgKd d GjKb m GYKT m G}LX m G}KT +m H\LX m H\KT m H{LX m H{KT m IZLX m IZKT m IyLX m IyKT m J[LC d J[LA +d J\LA d J\LC d J[LC m J[LE d J\LE d J^LC d J^LA d J\K? d J[K? d JYLA +d JYLC d J[LG d J\LI d JaLK d JgLK d JlLI d JnLE d JnK? d JlK{ d JgKy +m JkLI d JlLE d JlK? d JkK{ m JfLK d JiLI d JkLE d JkK? d JiK{ d JfKy +m JcKy d JgKy d JkKw d JnKs d JoKo d JoKi d JnKf d JlKd d JgKb d JaKb +d J\Kd d J[Kf d JYKi d JYKk d J[Km d J\Km d J^Kk d J^Ki d J\Kg d J[Kg +m JlKs d JnKo d JnKi d JlKf m JfKy d JiKw d JkKu d JlKo d JlKi d JkKd +d JgKb m J[Kk d J[Ki d J\Ki d J\Kk d J[Kk m JXKT m FyJ{ d FvJh d FyJl +d F~Jn d GBJn d GGJl d GJJh d GLJb d GLJ^ d GJJX d GGJT d GBJR d F~JR +d FyJT d FwJV d FvJZ d FvJ\ d FwJ^ d FyJ^ d FzJ\ d FzJZ d FyJX d FwJX +m GIJh d GJJd d GJJ\ d GIJX m GBJn d GEJl d GGJj d GIJd d GIJ\ d GGJV +d GEJT d GBJR m FwJ\ d FwJZ d FyJZ d FyJ\ d FwJ\ m FyJ{ d GIJ{ m FyJy +d GEJy m FyJw d F?Jw d GEJy d GIJ{ m FtJE m G\Js d G\Jq d G]Jq d G]Js +d G\Js m G\Ju d G]Ju d G_Js d G_Jq d G]Jo d G\Jo d GZJq d GZJs d G\Jw +d G]Jy d GbJ{ d GiJ{ d GmJy d GoJw d GpJs d GpJo d GoJl d GjJh d GbJd +d G_Jb d G\J^ d GZJX d GZJR m GmJw d GoJs d GoJo d GmJl m GiJ{ d GlJy +d GmJs d GmJo d GlJl d GiJh d GbJd m GZJV d G\JX d G_JX d GgJV d GmJV +d GpJX m G_JX d GgJT d GmJT d GoJV m G_JX d GgJR d GmJR d GoJT d GpJX +d GpJ\ m GYJE m G}KI m G}JE m H\KI m H\JE m H{KI m H{JE m IZKI m IZJE +m IyKI m IyJE m JfJu d JfJR m JgJw d JgJT m JiJ{ d JiJR m JiJ{ d JXJ^ +d JqJ^ m JaJR d JnJR m JfJT d JcJR m JfJV d JdJR m JiJV d JkJR m JiJT +d JlJR m JXJE m FyIl d FvIX d FyI\ d F~I^ d GBI^ d GGI\ d GJIX d GLIS +d GLIO d GJII d GGIE d GBIC d F~IC d FyIE d FwIG d FvIK d FvIM d FwIO +d FyIO d FzIM d FzIK d FyII d FwII m GIIX d GJIT d GJIM d GIII m GBI^ +d GEI\ d GGIZ d GIIT d GIIM d GGIG d GEIE d GBIC m FwIM d FwIK d FyIK +d FyIM d FwIM m FyIl d GIIl m FyIj d GEIj m FyIh d F?Ih d GEIj d GIIl +m FtHu m G\Id d G\Ib d G]Ib d G]Id d G\Id m G\If d G]If d G_Id d G_Ib +d G]I` d G\I` d GZIb d GZId d G\Ih d G]Ij d GbIl d GiIl d GmIj d GoIf +d GoI` d GmI\ d GiIZ m GlIj d GmIf d GmI` d GlI\ m GgIl d GjIj d GlIf +d GlI` d GjI\ d GgIZ m GdIZ d GiIZ d GlIX d GoIT d GpIQ d GpIK d GoIG +d GmIE d GiIC d GbIC d G]IE d G\IG d GZIK d GZIM d G\IO d G]IO d G_IM +d G_IK d G]II d G\II m GmIT d GoIQ d GoIK d GmIG m GgIZ d GjIX d GlIV +d GmIQ d GmIK d GlIE d GiIC m G\IM d G\IK d G]IK d G]IM d G\IM m GYHu +m G}Iy m G}Hu m H\Iy m H\Hu m H{Iy m H{Hu m IZIy m IZHu m IyIy m IyHu +m J\Il d JYIX d J\I\ d JaI^ d JfI^ d JkI\ d JnIX d JoIS d JoIO d JnII +d JkIE d JfIC d JaIC d J\IE d J[IG d JYIK d JYIM d J[IO d J\IO d J^IM +d J^IK d J\II d J[II m JlIX d JnIT d JnIM d JlII m JfI^ d JiI\ d JkIZ +d JlIT d JlIM d JkIG d JiIE d JfIC m J[IM d J[IK d J\IK d J\IM d J[IM +m J\Il d JlIl m J\Ij d JiIj m J\Ih d JcIh d JiIj d JlIl m JXHu m FyH\ +d FvHI d FyHM d F~HO d GBHO d GGHM d GJHI d GLHC d GLG? d GJGy d GGGv +d GBGt d F~Gt d FyGv d FwGx d FvG{ d FvG} d FwG? d FyG? d FzG} d FzG{ +d FyGy d FwGy m GIHI d GJHE d GJG} d GIGy m GBHO d GEHM d GGHK d GIHE +d GIG} d GGGx d GEGv d GBGt m FwG} d FwG{ d FyG{ d FyG} d FwG} m FyH\ +d GIH\ m FyH[ d GEH[ m FyHY d F?HY d GEH[ d GIH\ m FtGf m GgHW d GgGt +m GiHY d GiGv m GjH\ d GjGt m GjH\ d GYG? d GrG? m GbGt d GoGt m GgGv +d GdGt m GgGx d GeGt m GjGx d GlGt m GjGv d GmGt m GYGf m G}Hj m G}Gf +m H\Hj m H\Gf m H{Hj m H{Gf m IZHj m IZGf m IyHj m IyGf m JkHW d JkHU +d JlHU d JlHW d JkHW m JlHY d JkHY d JiHW d JiHU d JkHS d JlHS d JnHU +d JnHW d JlH[ d JiH\ d JdH\ d J`H[ d J\HW d J[HS d JYHK d JYG? d J[Gy +d J^Gv d JcGt d JfGt d JkGv d JnGy d JoG? d JoHA d JnHG d JkHK d JfHM +d JcHM d J`HK d J^HI d J\HE m J^HW d J\HS d J[HK d J[G? d J\Gy d J^Gx +m JlGy d JnG} d JnHC d JlHG m JdH\ d JaH[ d J`HY d J^HU d J\HM d J\G? +d J^Gy d J`Gv d JcGt m JfGt d JiGv d JkGx d JlG} d JlHC d JkHI d JiHK +d JfHM m JXGf m FyGM d FvFz d FyF~ d F~G@ d GBG@ +stroke +m GBG@ d GGF~ d GJFz d GLFt d GLFp d GJFj d GGFf d GBFd d F~Fd d FyFf +d FwFh d FvFl d FvFn d FwFp d FyFp d FzFn d FzFl d FyFj d FwFj m GIFz +d GJFv d GJFn d GIFj m GBG@ d GEF~ d GGF| d GIFv d GIFn d GGFh d GEFf +d GBFd m FwFn d FwFl d FyFl d FyFn d FwFn m FyGM d GIGM m FyGK d GEGK +m FyGI d F?GI d GEGK d GIGM m FtFW m G]GM d GZFz d G]F~ d GbG@ d GgG@ +d GlF~ d GoFz d GpFt d GpFp d GoFj d GlFf d GgFd d GbFd d G]Ff d G\Fh +d GZFl d GZFn d G\Fp d G]Fp d G_Fn d G_Fl d G]Fj d G\Fj m GmFz d GoFv +d GoFn d GmFj m GgG@ d GjF~ d GlF| d GmFv d GmFn d GlFh d GjFf d GgFd +m G\Fn d G\Fl d G]Fl d G]Fn d G\Fn m G]GM d GmGM m G]GK d GjGK m G]GI +d GdGI d GjGK d GmGM m GYFW m G}G[ m G}FW m H\G[ m H\FW m H{G[ m H{FW +m IZG[ m IZFW m IyG[ m IyFW m JYGM d JYGA m JoGM d JoGG d JnGA d JgFx +d JfFt d JdFl d JdFd m JfFv d JdFr d JcFl d JcFd m JnGA d JfFx d JcFr +d JaFl d JaFd d JdFd m JYGE d J[GI d J^GM d JaGM d JiGG d JlGG d JnGI +d JoGM m J\GI d J^GK d JaGK d JdGI m JYGE d J[GG d J^GI d JaGI d JiGG +m JXFW m RTcn d RQcZ d RTc^ d RYc` d R^c` d Rbc^ d RfcZ d RgcU d RgcQ +d RfcK d RbcG d R^cE d RYcE d RTcG d RRcI d RQcM d RQcO d RRcQ d RTcQ +d RVcO d RVcM d RTcK d RRcK m RdcZ d RfcV d RfcO d RdcK m R^c` d Rac^ +d Rbc\ d RdcV d RdcO d RbcI d RacG d R^cE m RRcO d RRcM d RTcM d RTcO +d RRcO m RTcn d Rdcn m RTcl d Racl m RTcj d RZcj d Racl d Rdcn m RObw +m SGch d SGcf d SIcf d SIch d SGch m SIcj d SGcj d SEch d SEcf d SGcd +d SIcd d SJcf d SJch d SIcl d SEcn d SAcn d R|cl d Rych d Rwcd d Rvc\ +d RvcQ d RwcK d RzcG d R?cE d SBcE d SGcG d SJcK d SLcQ d SLcS d SJcX +d SGc\ d SBc^ d R?c^ d R|c\ d RzcZ d RycV m Rzch d Rycd d Rwc\ d RwcQ +d RycK d RzcI m SIcK d SJcO d SJcU d SIcX m SAcn d R~cl d R|cj d Rzcf +d Ryc^ d RycQ d RzcK d R|cG d R?cE m SBcE d SEcG d SGcI d SIcO d SIcU +d SGcZ d SEc\ d SBc^ m Rtbw m SYc{ m SYbw m Sxc{ m Sxbw m TVc{ m TVbw +m Tuc{ m Tubw m UTc{ m UTbw m U}cn d Uxcl d Uvch d Uvcb d Uxc^ d U}c\ +d VCc\ d VHc^ d VIcb d VIch d VHcl d VCcn d U}cn m Uycl d Uxch d Uxcb +d Uyc^ m VFc^ d VHcb d VHch d VFcl m U}cn d U{cl d Uych d Uycb d U{c^ +d U}c\ m VCc\ d VDc^ d VFcb d VFch d VDcl d VCcn m U}c\ d UxcZ d UvcX +d UucU d UucM d UvcI d UxcG d U}cE d VCcE d VHcG d VIcI d VKcM d VKcU +d VIcX d VHcZ d VCc\ m UxcX d UvcU d UvcM d UxcI m VHcI d VIcM d VIcU +d VHcX m U}c\ d UycZ d UxcU d UxcM d UycG d U}cE m VCcE d VFcG d VHcM +d VHcU d VFcZ d VCc\ m Usbw m RTb^ d RQbK d RTbO d RYbQ d R^bQ d RbbO +d RfbK d RgbE d RgbA d Rfa{ d Rbax d R^av d RYav d RTax d RRaz d RQa} +d RQa? d RRbA d RTbA d RVa? d RVa} d RTa{ d RRa{ m RdbK d RfbG d Rfa? +d Rda{ m R^bQ d RabO d RbbM d RdbG d Rda? d Rbaz d Raax d R^av m RRa? +d RRa} d RTa} d RTa? d RRa? m RTb^ d Rdb^ m RTb] d Rab] m RTb[ d RZb[ +d Rab] d Rdb^ m ROah m Rvb^ d RvbS m SLb^ d SLbY d SJbS d SDbI d SBbE +d SAa} d SAav m SBbG d SAbC d R?a} d R?av m SJbS d SBbI d R?bC d R~a} +d R~av d SAav m RvbW d Rwb[ d Rzb^ d R~b^ d SEbY d SIbY d SJb[ d SLb^ +m Ryb[ d Rzb] d R~b] d SAb[ m RvbW d RwbY d Rzb[ d R~b[ d SEbY m Rtah +m SYbl m SYah m Sxbl m Sxah m TVbl m TVah m Tubl m Tuah m UTbl m UTah +m Uxa} d Uxa{ d Uya{ d Uya} d Uxa} m VHbM d VFbI d VDbG d VAbE d U~bE +d UybG d UvbK d UubQ d UubS d UvbY d Uyb] d U~b^ d VAb^ d VFb] d VIbY +d VKbS d VKbG d VIa? d VHa{ d VDax d V@av d U{av d Uxax d Uva{ d Uva} +d Uxa? d Uya? d U{a} d U{a{ d Uyaz d Uxaz m UxbK d UvbO d UvbU d UxbY +m VFb[ d VHbY d VIbS d VIbG d VHa? d VFa{ m U~bE d U{bG d UybI d UxbO +d UxbU d Uyb[ d U{b] d U~b^ m VAb^ d VDb] d VFbY d VHbS d VHbE d VFa} +d VDaz d VCax d V@av m Usah m RTaO d RQ`| d RTa@ d RYaB d R^aB d Rba@ +d Rf`| d Rg`v d Rg`r d Rf`l d Rb`h d R^`f d RY`f d RT`h d RR`j d RQ`n +d RQ`p d RR`r d RT`r d RV`p d RV`n d RT`l d RR`l m Rd`| d Rf`x d Rf`p +d Rd`l m R^aB d Raa@ d Rb`~ d Rd`x d Rd`p d Rb`j d Ra`h d R^`f m RR`p +d RR`n d RT`n d RT`p d RR`p m RTaO d RdaO m RTaM d RaaM m RTaK d RZaK +d RaaM d RdaO m RO`Y m R~aO d RyaM d RwaI d RwaC d Rya@ d R~`~ d SD`~ +d SIa@ d SJaC d SJaI d SIaM d SDaO d R~aO m RzaM d RyaI d RyaC d Rza@ +m SGa@ d SIaC d SIaI d SGaM m R~aO d R|aM d RzaI d RzaC d R|a@ d R~`~ +m SD`~ d SEa@ d SGaC d SGaI d SEaM d SDaO m R~`~ d Ry`| d Rw`z d Rv`v +d Rv`n d Rw`j d Ry`h d R~`f d SD`f d SI`h d SJ`j d SL`n d SL`v d SJ`z +d SI`| d SD`~ m Ry`z d Rw`v d Rw`n d Ry`j m SI`j d SJ`n d SJ`v d SI`z +m R~`~ d Rz`| d Ry`v d Ry`n d Rz`h d R~`f m SD`f d SG`h d SI`n d SI`v +d SG`| d SD`~ m Rt`Y m SYa] m SY`Y m Sxa] m Sx`Y m TVa] m TV`Y m Tua] +m Tu`Y m UTa] m UT`Y m UzaB d Uxa@ d Ux`~ d Uz`| d U}`| d U?`~ d U?a@ +d U}aB d UzaB m Uza@ d Uz`~ d U}`~ d U}a@ d Uza@ m Uz`l d Ux`j d Ux`h +d Uz`f d U}`f d U?`h d U?`j d U}`l d Uz`l m Uz`j d Uz`h d U}`h +stroke +m U}`h d U}`j d Uz`j m Us`Y m RT`@ d RQ_l d RT_p d RY_r d R^_r d Rb_p +d Rf_l d Rg_g d Rg_c d Rf_] d Rb_Y d R^_W d RY_W d RT_Y d RR_[ d RQ__ +d RQ_a d RR_c d RT_c d RV_a d RV__ d RT_] d RR_] m Rd_l d Rf_i d Rf_a +d Rd_] m R^_r d Ra_p d Rb_n d Rd_i d Rd_a d Rb_[ d Ra_Y d R^_W m RR_a +d RR__ d RT__ d RT_a d RR_a m RT`@ d Rd`@ m RT_~ d Ra_~ m RT_| d RZ_| +d Ra_~ d Rd`@ m RO_I m Ry__ d Ry_] d Rz_] d Rz__ d Ry__ m SI_n d SG_j +d SE_i d SB_g d R?_g d Rz_i d Rw_l d Rv_r d Rv_t d Rw_z d Rz_~ d R?`@ +d SB`@ d SG_~ d SJ_z d SL_t d SL_i d SJ_a d SI_] d SE_Y d SA_W d R|_W +d Ry_Y d Rw_] d Rw__ d Ry_a d Rz_a d R|__ d R|_] d Rz_[ d Ry_[ m Ry_l +d Rw_p d Rw_v d Ry_z m SG_| d SI_z d SJ_t d SJ_i d SI_a d SG_] m R?_g +d R|_i d Rz_j d Ry_p d Ry_v d Rz_| d R|_~ d R?`@ m SB`@ d SE_~ d SG_z +d SI_t d SI_g d SG__ d SE_[ d SD_Y d SA_W m Rt_I m SY`M m SY_I m Sx`M +m Sx_I m TV`M m TV_I m Tu`M m Tu_I m UT`M m UT_I m Uz_r d Ux_p d Ux_n +d Uz_l d U}_l d U?_n d U?_p d U}_r d Uz_r m Uz_p d Uz_n d U}_n d U}_p +d Uz_p m U?_Y d U}_W d Uz_W d Ux_Y d Ux_[ d Uz_] d U}_] d U?_[ d U?_U +d U}_Q d Ux_O m Uz_[ d Uz_Y d U}_Y d U}_[ d Uz_[ m U}_W d U?_U m U?_Y +d U}_Q m Us_I m Rb^k d Rb^i d Rd^i d Rd^k d Rb^k m Rd^m d Rb^m d Ra^k +d Ra^i d Rb^g d Rd^g d Rf^i d Rf^k d Rd^o d Ra^p d R\^p d RW^o d RT^k +d RR^g d RQ^_ d RQ^S d RR^M d RV^J d RZ^H d R^^H d Rb^J d Rf^M d Rg^S +d Rg^U d Rf^[ d Rb^_ d R^^a d RZ^a d RW^_ d RV^] d RT^Y m RV^k d RT^g +d RR^_ d RR^S d RT^M d RV^K m Rd^M d Rf^Q d Rf^W d Rd^[ m R\^p d RY^o +d RW^m d RV^i d RT^a d RT^S d RV^M d RW^J d RZ^H m R^^H d Ra^J d Rb^K +d Rd^Q d Rd^W d Rb^] d Ra^_ d R^^a m RO]z m R?^p d Rz^o d Rw^i d Rv^_ +d Rv^Y d Rw^O d Rz^J d R?^H d SB^H d SG^J d SJ^O d SL^Y d SL^_ d SJ^i +d SG^o d SB^p d R?^p m Rz^m d Ry^i d Rw^a d Rw^W d Ry^O d Rz^K m SG^K +d SI^O d SJ^W d SJ^a d SI^i d SG^m m R?^p d R|^o d Rz^k d Ry^a d Ry^W +d Rz^M d R|^J d R?^H m SB^H d SE^J d SG^M d SI^W d SI^a d SG^k d SE^o +d SB^p m Rt]z m SY^~ m SY]z m Sx^~ m Sx]z m TV^~ m TV]z m Tu^~ m Tu]z +m UT^~ m UT]z m VL^k d Uv^Y d VL^H m Us]z m Rb][ d Rb]Y d Rd]Y d Rd][ +d Rb][ m Rd]] d Rb]] d Ra][ d Ra]Y d Rb]W d Rd]W d Rf]Y d Rf][ d Rd]_ +d Ra]a d R\]a d RW]_ d RT][ d RR]W d RQ]P d RQ]D d RR\~ d RV\z d RZ\x +d R^\x d Rb\z d Rf\~ d Rg]D d Rg]F d Rf]L d Rb]P d R^]R d RZ]R d RW]P +d RV]N d RT]J m RV][ d RT]W d RR]P d RR]D d RT\~ d RV\| m Rd\~ d Rf]B +d Rf]H d Rd]L m R\]a d RY]_ d RW]] d RV]Y d RT]R d RT]D d RV\~ d RW\z +d RZ\x m R^\x d Ra\z d Rb\| d Rd]B d Rd]H d Rb]N d Ra]P d R^]R m RO\k +m R?]] d R?\x m SA]] d SA\z m SB]a d SB\x m SB]a d R~][ d Rz]Y m Ry\x +d SI\x m R?\z d R|\x m R?\| d R~\x m SB\| d SD\x m SB\z d SE\x m Rt\k +m SY]o m SY\k m Sx]o m Sx\k m TV]o m TV\k m Tu]o m Tu\k m UT]o m UT\k +m Uv]S d VL]S d VL]R m Uv]S d Uv]R d VL]R m Uv]D d VL]D d VL]B m Uv]D +d Uv]B d VL]B m Us\k m Rb\L d Rb\J d Rd\J d Rd\L d Rb\L m Rd\N d Rb\N +d Ra\L d Ra\J d Rb\H d Rd\H d Rf\J d Rf\L d Rd\P d Ra\R d R\\R d RW\P +d RT\L d RR\H d RQ\@ d RQ[u d RR[o d RV[k d RZ[i d R^[i d Rb[k d Rf[o +d Rg[u d Rg[w d Rf[| d Rb\@ d R^\B d RZ\B d RW\@ d RV[~ d RT[{ m RV\L +d RT\H d RR\@ d RR[u d RT[o d RV[m m Rd[o d Rf[s d Rf[y d Rd[| m R\\R +d RY\P d RW\N d RV\J d RT\B d RT[u d RV[o d RW[k d RZ[i m R^[i d Ra[k +d Rb[m d Rd[s d Rd[y d Rb[~ d Ra\@ d R^\B m RO[[ m Rw\J d Rw\H d Ry\H +d Ry\J d Rw\J m Rw\L d Ry\L d Rz\J d Rz\H d Ry\F d Rw\F d Rv\H d Rv\J +d Rw\N d Ry\P d R~\R d SD\R d SI\P d SJ\N d SL\J d SL\F d SJ\B d SE[~ +d R~[{ d Rz[y d Rw[u d Rv[o d Rv[i m SI\N d SJ\J d SJ\F d SI\B m SD\R +d SG\P d SI\J d SI\F d SG\B d SD[~ d R~[{ m Rv[m d Rw[o d Rz[o d SB[m +d SI[m d SL[o m Rz[o d SB[k d SI[k d SJ[m m Rz[o d SB[i d SI[i d SJ[k +d SL[o d SL[s m Rt[[ m SY\_ m SY[[ m Sx\_ m Sx[[ m TV\_ m TV[[ m Tu\_ +m Tu[[ m UT\_ m UT[[ m Uv\L d VL[{ d Uv[i m Us[[ m RbZ} d RbZ{ d RdZ{ +d RdZ} d RbZ} m RdZ? d RbZ? d RaZ} d RaZ{ d RbZy d RdZy d RfZ{ d RfZ} +d Rd[A d Ra[C d R\[C d RW[A d RTZ} d RRZy d RQZq d RQZe d RRZ` d RVZ\ +d RZZZ d R^ZZ d RbZ\ d RfZ` d RgZe d RgZg d RfZm d RbZq d R^Zs d RZZs +d RWZq d RVZo d RTZk m RVZ} d RTZy d RRZq d RRZe d RTZ` d RVZ^ m RdZ` +d RfZc d RfZi d RdZm m R\[C d RY[A d RWZ? d RVZ{ d RTZs d RTZe d RVZ` +d RWZ\ d RZZZ m R^ZZ d RaZ\ d RbZ^ d RdZc d RdZi d RbZo d RaZq d R^Zs +m ROZL m RwZ{ d RwZy d RyZy d RyZ{ d RwZ{ m RwZ} d RyZ} d RzZ{ d RzZy +d RyZw d RwZw d RvZy d RvZ{ d RwZ? d Ry[A d R~[C d SD[C d SI[A d SJZ} +d SJZw d SIZs d SDZq m SG[A d SIZ} d SIZw d SGZs m SB[C d SE[A d SGZ} +d SGZw d SEZs d SBZq m R?Zq d SDZq d SGZo d SJZk d SLZg d SLZa d SJZ^ +d SIZ\ d SDZZ d R~ZZ d RyZ\ d RwZ^ d RvZa d RvZc d RwZe d RyZe d RzZc +d RzZa d RyZ` d RwZ` +stroke +m RwZ` m SIZk d SJZg d SJZa d SIZ^ m SBZq d SEZo d SGZm d SIZg d SIZa +d SGZ\ d SDZZ m RwZc d RwZa d RyZa d RyZc d RwZc m RtZL m SY[P m SYZL +m Sx[P m SxZL m TV[P m TVZL m Tu[P m TuZL m UT[P m UTZL m UvZy d UvZ{ +d UxZ{ d UxZw d UuZw d UuZ{ d UvZ? d Ux[A d U{[C d VB[C d VG[A d VHZ? +d VJZ{ d VJZw d VHZs d VGZq d V@Zm m VGZ? d VHZ} d VHZu d VGZs m VB[C +d VE[A d VGZ} d VGZu d VEZq d VDZo m U?Zm d U?Zg d V@Zg d V@Zm d U?Zm +m U?Z` d U}Z^ d U}Z\ d U?ZZ d V@ZZ d VBZ\ d VBZ^ d V@Z` d U?Z` m U?Z^ +d U?Z\ d V@Z\ d V@Z^ d U?Z^ m UsZL m RbYm d RbYk d RdYk d RdYm d RbYm +m RdYo d RbYo d RaYm d RaYk d RbYi d RdYi d RfYk d RfYm d RdYq d RaYs +d R\Ys d RWYq d RTYm d RRYi d RQYb d RQYV d RRYP d RVYL d RZYJ d R^YJ +d RbYL d RfYP d RgYV d RgYX d RfY^ d RbYb d R^Yd d RZYd d RWYb d RVY` +d RTY\ m RVYm d RTYi d RRYb d RRYV d RTYP d RVYN m RdYP d RfYT d RfYZ +d RdY^ m R\Ys d RYYq d RWYo d RVYk d RTYd d RTYV d RVYP d RWYL d RZYJ +m R^YJ d RaYL d RbYN d RdYT d RdYZ d RbY` d RaYb d R^Yd m ROX} m SBYm +d SBYJ m SDYo d SDYL m SEYs d SEYJ m SEYs d RtYV d SMYV m R~YJ d SJYJ +m SBYL d R?YJ m SBYN d SAYJ m SEYN d SGYJ m SEYL d SIYJ m RtX} m SYZA +m SYX} m SxZA m SxX} m TVZA m TVX} m TuZA m TuX} m UTZA m UTX} m VGYd +d VFYg d VCYi d U?Yi d U}Yg d U|Ye d UzY` d UzYZ d U|YV d U~YT d VBYT +d VDYV d VFYZ m U?Yi d U}Ye d U|Y` d U|YZ d U}YV d U~YT m VGYi d VFYZ +d VFYV d VHYT d VKYT d VMYX d VNY^ d VNYb d VMYg d VLYk d VIYo d VGYq +d VCYs d U?Ys d U|Yq d UyYo d UwYk d UuYg d UtYb d UtY\ d UuYV d UwYR +d UyYN d U|YL d U?YJ d VCYJ d VGYL d VIYN d VKYP m VHYi d VGYZ d VGYV +d VHYT m UsX} m RbX^ d RbX\ d RdX\ d RdX^ d RbX^ m RdX` d RbX` d RaX^ +d RaX\ d RbXZ d RdXZ d RfX\ d RfX^ d RdXb d RaXd d R\Xd d RWXb d RTX^ +d RRXZ d RQXR d RQXG d RRXA d RVW} d RZW{ d R^W{ d RbW} d RfXA d RgXG +d RgXI d RfXN d RbXR d R^XT d RZXT d RWXR d RVXP d RTXM m RVX^ d RTXZ +d RRXR d RRXG d RTXA d RVW? m RdXA d RfXE d RfXK d RdXN m R\Xd d RYXb +d RWX` d RVX\ d RTXT d RTXG d RVXA d RWW} d RZW{ m R^W{ d RaW} d RbW? +d RdXE d RdXK d RbXP d RaXR d R^XT m ROWm m RyXd d RvXP d RyXT d R~XV +d SBXV d SGXT d SJXP d SLXK d SLXG d SJXA d SGW} d SBW{ d R~W{ d RyW} +d RwW? d RvXC d RvXE d RwXG d RyXG d RzXE d RzXC d RyXA d RwXA m SIXP +d SJXM d SJXE d SIXA m SBXV d SEXT d SGXR d SIXM d SIXE d SGW? d SEW} +d SBW{ m RwXE d RwXC d RyXC d RyXE d RwXE m RyXd d SIXd m RyXb d SEXb +m RyX` d R?X` d SEXb d SIXd m RtWm m SYXq m SYWm m SxXq m SxWm m TVXq +m TVWm m TuXq m TuWm m UTXq m UTWm m V@Xd d UuW} m U~X^ d VHW{ m V@X^ +d VIW{ m V@Xd d VKW{ m UxXG d VFXG m UsW{ d U{W{ m VCW{ d VNW{ m UuW} +d UsW{ m UuW} d UxW{ m VHW} d VDW{ m VHW? d VFW{ m VIW? d VLW{ m UsWm +m RbWO d RbWM d RdWM d RdWO d RbWO m RdWQ d RbWQ d RaWO d RaWM d RbWK +d RdWK d RfWM d RfWO d RdWS d RaWT d R\WT d RWWS d RTWO d RRWK d RQWC +d RQVw d RRVq d RVVn d RZVl d R^Vl d RbVn d RfVq d RgVw d RgVy d RfV? +d RbWC d R^WE d RZWE d RWWC d RVWA d RTV} m RVWO d RTWK d RRWC d RRVw +d RTVq d RVVp m RdVq d RfVu d RfV{ d RdV? m R\WT d RYWS d RWWQ d RVWM +d RTWE d RTVw d RVVq d RWVn d RZVl m R^Vl d RaVn d RbVp d RdVu d RdV{ +d RbWA d RaWC d R^WE m ROV^ m SGWO d SGWM d SIWM d SIWO d SGWO m SIWQ +d SGWQ d SEWO d SEWM d SGWK d SIWK d SJWM d SJWO d SIWS d SEWT d SAWT +d R|WS d RyWO d RwWK d RvWC d RvVw d RwVq d RzVn d R?Vl d SBVl d SGVn +d SJVq d SLVw d SLVy d SJV? d SGWC d SBWE d R?WE d R|WC d RzWA d RyV} +m RzWO d RyWK d RwWC d RwVw d RyVq d RzVp m SIVq d SJVu d SJV{ d SIV? +m SAWT d R~WS d R|WQ d RzWM d RyWE d RyVw d RzVq d R|Vn d R?Vl m SBVl +d SEVn d SGVp d SIVu d SIV{ d SGWA d SEWC d SBWE m RtV^ m SYWb m SYV^ +m SxWb m SxV^ m TVWb m TVV^ m TuWb m TuV^ m UTWb m UTV^ m UwWT d UwVl +m UyWS d UyVn m UzWT d UzVl m UsWT d VEWT d VIWS d VKWQ d VLWM d VLWI +d VKWE d VIWC d VEWA m VIWQ d VKWM d VKWI d VIWE m VEWT d VHWS d VIWO +d VIWG d VHWC d VEWA m UzWA d VEWA d VIV? d VKV} d VLVy d VLVs d VKVp +d VIVn d VEVl d UsVl m VIV} d VKVy d VKVs d VIVp m VEWA d VHV? d VIV{ +d VIVq d VHVn d VEVl m UtWT d UwWS m UvWT d UwWQ m U|WT d UzWQ m U}WT +d UzWS m UwVn d UtVl m UwVp d UvVl m UzVp d U|Vl m UzVn d U}Vl m UsV^ +m RbU? d RbU} d RdU} d RdU? d RbU? m RdVA d RbVA d RaU? d RaU} d RbU{ +d RdU{ d RfU} d RfU? d RdVC d RaVE d R\VE d RWVC d RTU? d RRU{ d RQUt +d RQUh d RRUb d RVU^ d RZU\ d R^U\ d RbU^ d RfUb d RgUh d RgUj d RfUp +d RbUt d R^Uv d RZUv d RWUt d RVUr d RTUn m RVU? d RTU{ d RRUt d RRUh +d RTUb d RVU` m RdUb d RfUf d RfUl d RdUp m R\VE d RYVC d RWVA d RVU} +d RTUv d RTUh d RVUb d RWU^ d RZU\ m R^U\ d RaU^ d RbU` d RdUf d RdUl +d RbUr d RaUt d R^Uv m ROUO m RvVE d RvUy m SLVE d SLU? d SJUy d SDUp +d SBUl d SAUd d SAU\ m SBUn d SAUj d R?Ud d R?U\ m SJUy d SBUp d R?Uj +d R~Ud d R~U\ d SAU\ m RvU} d RwVA d RzVE d R~VE d SEU? d SIU? +stroke +m SIU? d SJVA d SLVE m RyVA d RzVC d R~VC d SAVA m RvU} d RwU? d RzVA +d R~VA d SEU? m RtUO m SYVS m SYUO m SxVS m SxUO m TVVS m TVUO m TuVS +m TuUO m UTVS m UTUO m VJU? d VKVE d VKUy d VJU? d VGVC d VDVE d U?VE +d U{VC d UxU? d UvU{ d UtUv d UtUl d UvUf d UxUb d U{U^ d U?U\ d VDU\ +d VGU^ d VJUb d VKUf m UyU? d UxU{ d UvUv d UvUl d UxUf d UyUb m U?VE +d U|VC d UyU} d UxUv d UxUl d UyUd d U|U^ d U?U\ m UsUO m RbTp d RbTn +d RdTn d RdTp d RbTp m RdTr d RbTr d RaTp d RaTn d RbTl d RdTl d RfTn +d RfTp d RdTt d RaTv d R\Tv d RWTt d RTTp d RRTl d RQTd d RQTY d RRTS +d RVTO d RZTM d R^TM d RbTO d RfTS d RgTY d RgT[ d RfT` d RbTd d R^Tf +d RZTf d RWTd d RVTb d RTT^ m RVTp d RTTl d RRTd d RRTY d RTTS d RVTQ +m RdTS d RfTW d RfT] d RdT` m R\Tv d RYTt d RWTr d RVTn d RTTf d RTTY +d RVTS d RWTO d RZTM m R^TM d RaTO d RbTQ d RdTW d RdT] d RbTb d RaTd +d R^Tf m ROS? m R~Tv d RyTt d RwTp d RwTj d RyTf d R~Td d SDTd d SITf +d SJTj d SJTp d SITt d SDTv d R~Tv m RzTt d RyTp d RyTj d RzTf m SGTf +d SITj d SITp d SGTt m R~Tv d R|Tt d RzTp d RzTj d R|Tf d R~Td m SDTd +d SETf d SGTj d SGTp d SETt d SDTv m R~Td d RyTb d RwT` d RvT] d RvTU +d RwTQ d RyTO d R~TM d SDTM d SITO d SJTQ d SLTU d SLT] d SJT` d SITb +d SDTd m RyT` d RwT] d RwTU d RyTQ m SITQ d SJTU d SJT] d SIT` m R~Td +d RzTb d RyT] d RyTU d RzTO d R~TM m SDTM d SGTO d SITU d SIT] d SGTb +d SDTd m RtS? m SYUC m SYS? m SxUC m SxS? m TVUC m TVS? m TuUC m TuS? +m UTUC m UTS? m UwTv d UwTM m UyTt d UyTO m UzTv d UzTM m UsTv d VBTv +d VFTt d VITp d VKTl d VLTf d VLT] d VKTW d VITS d VFTO d VBTM d UsTM +m VHTp d VITl d VKTf d VKT] d VITW d VHTS m VBTv d VETt d VHTn d VITf +d VIT] d VHTU d VETO d VBTM m UtTv d UwTt m UvTv d UwTr m U|Tv d UzTr +m U}Tv d UzTt m UwTO d UtTM m UwTQ d UvTM m UzTQ d U|TM m UzTO d U}TM +m UsS? m RbSa d RbS_ d RdS_ d RdSa d RbSa m RdSc d RbSc d RaSa d RaS_ +d RbS] d RdS] d RfS_ d RfSa d RdSe d RaSf d R\Sf d RWSe d RTSa d RRS] +d RQSU d RQSI d RRSC d RVS@ d RZR~ d R^R~ d RbS@ d RfSC d RgSI d RgSK +d RfSQ d RbSU d R^SW d RZSW d RWSU d RVSS d RTSO m RVSa d RTS] d RRSU +d RRSI d RTSC d RVSB m RdSC d RfSG d RfSM d RdSQ m R\Sf d RYSe d RWSc +d RVS_ d RTSW d RTSI d RVSC d RWS@ d RZR~ m R^R~ d RaS@ d RbSB d RdSG +d RdSM d RbSS d RaSU d R^SW m RORp m RySE d RySC d RzSC d RzSE d RySE +m SISU d SGSQ d SESO d SBSM d R?SM d RzSO d RwSS d RvSY d RvS[ d RwSa +d RzSe d R?Sf d SBSf d SGSe d SJSa d SLS[ d SLSO d SJSG d SISC d SES@ +d SAR~ d R|R~ d RyS@ d RwSC d RwSE d RySG d RzSG d R|SE d R|SC d RzSB +d RySB m RySS d RwSW d RwS] d RySa m SGSc d SISa d SJS[ d SJSO d SISG +d SGSC m R?SM d R|SO d RzSQ d RySW d RyS] d RzSc d R|Se d R?Sf m SBSf +d SESe d SGSa d SIS[ d SISM d SGSE d SESB d SDS@ d SAR~ m RtRp m SYSt +m SYRp m SxSt m SxRp m TVSt m TVRp m TuSt m TuRp m UTSt m UTRp m UxSf +d UxR~ m UySe d UyS@ m U{Sf d U{R~ m UsSf d VKSf d VKS[ m U{SS d VDSS +m VDS[ d VDSK m UsR~ d VKR~ d VKSI m UtSf d UxSe m UvSf d UxSc m U|Sf +d U{Sc m U~Sf d U{Se m VDSf d VKSe m VGSf d VKSc m VHSf d VKSa m VJSf +d VKS[ m VDS[ d VBSS d VDSK m VDSW d VASS d VDSO m VDSU d U~SS d VDSQ +m UxS@ d UtR~ m UxSB d UvR~ m U{SB d U|R~ m U{S@ d U~R~ m VDR~ d VKS@ +m VGR~ d VKSB m VHR~ d VKSC m VJR~ d VKSI m UsRp m RQRW d RQRK m RgRW +d RgRQ d RfRK d R_RB d R^Q~ d R\Qv d R\Qn m R^R@ d R\Q| d RZQv d RZQn +m RfRK d R^RB d RZQ| d RYQv d RYQn d R\Qn m RQRO d RRRS d RVRW d RYRW +d RaRQ d RdRQ d RfRS d RgRW m RTRS d RVRU d RYRU d R\RS m RQRO d RRRQ +d RVRS d RYRS d RaRQ m ROQa m R?RW d RzRU d RwRO d RvRF d RvR@ d RwQv +d RzQp d R?Qn d SBQn d SGQp d SJQv d SLR@ d SLRF d SJRO d SGRU d SBRW +d R?RW m RzRS d RyRO d RwRH d RwQ~ d RyQv d RzQr m SGQr d SIQv d SJQ~ +d SJRH d SIRO d SGRS m R?RW d R|RU d RzRQ d RyRH d RyQ~ d RzQt d R|Qp +d R?Qn m SBQn d SEQp d SGQt d SIQ~ d SIRH d SGRQ d SERU d SBRW m RtQa +m SYRe m SYQa m SxRe m SxQa m TVRe m TVQa m TuRe m TuQa m UTRe m UTQa +m UxRW d UxQn m UyRU d UyQp m U{RW d U{Qn m UsRW d VLRW d VLRK m U{RD +d VDRD m VDRK d VDQ| m UsQn d V@Qn m UuRW d UxRU m UvRW d UxRS m U}RW +d U{RS m U~RW d U{RU m VDRW d VLRU m VHRW d VLRS m VIRW d VLRQ m VKRW +d VLRK m VDRK d VCRD d VDQ| m VDRH d VARD d VDR@ m VDRF d U~RD d VDRB +m UxQp d UuQn m UxQr d UvQn m U{Qr d U}Qn m U{Qp d U~Qn m UsQa m RQQH +d RQP| m RgQH d RgQB d RfP| d R_Pr d R^Po d R\Pg d R\P_ m R^Pq d R\Pm +d RZPg d RZP_ m RfP| d R^Pr d RZPm d RYPg d RYP_ d R\P_ m RQQ@ d RRQD +d RVQH d RYQH d RaQB d RdQB d RfQD d RgQH m RTQD d RVQF d RYQF d R\QD +m RQQ@ d RRQB d RVQD d RYQD d RaQB m ROPQ m R?QD d R?P_ m SAQD d SAPa +m SBQH d SBP_ m SBQH d R~QB d RzQ@ m RyP_ d SIP_ m R?Pa d R|P_ m R?Pc +d R~P_ m SBPc d SDP_ m SBPa d SEP_ m RtPQ m SYQU m SYPQ m SxQU m SxPQ +m TVQU m TVPQ m TuQU m TuPQ m UTQU m UTPQ m VHQB d VJQH d VJP| d VHQB +d VEQF d VCQH d U~QH d UzQF d UwQB d UvP~ d UtPx d UtPo d UvPi d UwPe +d UzPa d U~P_ d VCP_ d VEPa d VHPa d VJP_ d VJPo m UyQB d UwP~ d UvPx +d UvPo d UwPi d UyPe m U~QH d U{QF d UyQ@ d UwPx d UwPo d UyPg d U{Pa +d U~P_ m VHPm d VHPc m VGPo d VGPc d VEPa m VCPo d VNPo m VDPo d VGPm +m VEPo d VGPk m VKPo d VJPk m VLPo d VJPm m UsPQ m RQOy d RQOm m RgOy +d RgOs d RfOm d R_Oc +stroke +m R_Oc d R^O_ d R\OW d R\OP m R^Oa d R\O] d RZOW d RZOP m RfOm d R^Oc +d RZO] d RYOW d RYOP d R\OP m RQOq d RROu d RVOy d RYOy d RaOs d RdOs +d RfOu d RgOy m RTOu d RVOw d RYOw d R\Ou m RQOq d RROs d RVOu d RYOu +d RaOs m ROOB m RwOq d RwOo d RyOo d RyOq d RwOq m RwOs d RyOs d RzOq +d RzOo d RyOm d RwOm d RvOo d RvOq d RwOu d RyOw d R~Oy d SDOy d SIOw +d SJOu d SLOq d SLOm d SJOi d SEOe d R~Oa d RzO_ d RwO[ d RvOV d RvOP +m SIOu d SJOq d SJOm d SIOi m SDOy d SGOw d SIOq d SIOm d SGOi d SDOe +d R~Oa m RvOT d RwOV d RzOV d SBOT d SIOT d SLOV m RzOV d SBOR d SIOR +d SJOT m RzOV d SBOP d SIOP d SJOR d SLOV d SLOY m RtOB m SYPF m SYOB +m SxPF m SxOB m TVPF m TVOB m TuPF m TuOB m UTPF m UTOB m UwOy d UwOP +m UxOw d UxOR m UzOy d UzOP m VHOy d VHOP m VIOw d VIOR m VJOy d VJOP +m UsOy d U~Oy m VCOy d VNOy m UzOe d VHOe m UsOP d U~OP m VCOP d VNOP +m UtOy d UwOw m UvOy d UwOu m U{Oy d UzOu m U}Oy d UzOw m VEOy d VHOw +m VFOy d VHOu m VLOy d VJOu m VMOy d VJOw m UwOR d UtOP m UwOT d UvOP +m UzOT d U{OP m UzOR d U}OP m VHOR d VEOP m VHOT d VFOP m VJOT d VLOP +m VJOR d VMOP m UsOB m RQNi d RQN] m RgNi d RgNc d RfN] d R_NT d R^NP +d R\NH d R\N@ m R^NR d R\NN d RZNH d RZN@ m RfN] d R^NT d RZNN d RYNH +d RYN@ d R\N@ m RQNa d RRNe d RVNi d RYNi d RaNc d RdNc d RfNe d RgNi +m RTNe d RVNg d RYNg d R\Ne m RQNa d RRNc d RVNe d RYNe d RaNc m ROMs +m RwNa d RwN_ d RyN_ d RyNa d RwNa m RwNc d RyNc d RzNa d RzN_ d RyN] +d RwN] d RvN_ d RvNa d RwNe d RyNg d R~Ni d SDNi d SINg d SJNc d SJN] +d SINZ d SDNX m SGNg d SINc d SIN] d SGNZ m SBNi d SENg d SGNc d SGN] +d SENZ d SBNX m R?NX d SDNX d SGNV d SJNR d SLNN d SLNH d SJND d SINB +d SDN@ d R~N@ d RyNB d RwND d RvNH d RvNJ d RwNL d RyNL d RzNJ d RzNH +d RyNF d RwNF m SINR d SJNN d SJNH d SIND m SBNX d SENV d SGNT d SINN +d SINH d SGNB d SDN@ m RwNJ d RwNH d RyNH d RyNJ d RwNJ m RtMs m SYNw +m SYMs m SxNw m SxMs m TVNw m TVMs m TuNw m TuMs m UTNw m UTMs m UzNi +d UzN@ m U|Ng d U|NB m U?Ni d U?N@ m UsNi d VFNi m UsN@ d VFN@ m UuNi +d UzNg m UxNi d UzNe m VANi d U?Ne m VCNi d U?Ng m UzNB d UuN@ m UzND +d UxN@ m U?ND d VAN@ m U?NB d VCN@ m UsMs m RQMZ d RQMN m RgMZ d RgMT +d RfMN d R_MD d R^MA d R\Ly d R\Lq m R^MC d R\L? d RZLy d RZLq m RfMN +d R^MD d RZL? d RYLy d RYLq d R\Lq m RQMR d RRMV d RVMZ d RYMZ d RaMT +d RdMT d RfMV d RgMZ m RTMV d RVMX d RYMX d R\MV m RQMR d RRMT d RVMV +d RYMV d RaMT m ROLc m SBMT d SBLq m SDMV d SDLs m SEMZ d SELq m SEMZ +d RtL} d SML} m R~Lq d SJLq m SBLs d R?Lq m SBLu d SALq m SELu d SGLq +m SELs d SILq m RtLc m SYMg m SYLc m SxMg m SxLc m TVMg m TVLc m TuMg +m TuLc m UTMg m UTLc m V@MZ d V@Ly d U~Ls d U|Lq m VBMX d VBLy d V@Ls +m VDMZ d VDLy d VBLs d U|Lq d UyLq d UuLs d UsLw d UsL{ d UuL} d UwL} +d UyL{ d UyLy d UwLw d UuLw m UuL{ d UuLy d UwLy d UwL{ d UuL{ m U{MZ +d VJMZ m U|MZ d V@MX m U~MZ d V@MV m VFMZ d VDMV m VHMZ d VDMX m UsLc +m RQLK d RQK? m RgLK d RgLE d RfK? d R_Ku d R^Kq d R\Ki d R\Kb m R^Ks +d R\Ko d RZKi d RZKb m RfK? d R^Ku d RZKo d RYKi d RYKb d R\Kb m RQLC +d RRLG d RVLK d RYLK d RaLE d RdLE d RfLG d RgLK m RTLG d RVLI d RYLI +d R\LG m RQLC d RRLE d RVLG d RYLG d RaLE m ROKT m RyLK d RvKw d RyK{ +d R~K} d SBK} d SGK{ d SJKw d SLKq d SLKm d SJKg d SGKd d SBKb d R~Kb +d RyKd d RwKf d RvKi d RvKk d RwKm d RyKm d RzKk d RzKi d RyKg d RwKg +m SIKw d SJKs d SJKk d SIKg m SBK} d SEK{ d SGKy d SIKs d SIKk d SGKf +d SEKd d SBKb m RwKk d RwKi d RyKi d RyKk d RwKk m RyLK d SILK m RyLI +d SELI m RyLG d R?LG d SELI d SILK m RtKT m SYLX m SYKT m SxLX m SxKT +m TVLX m TVKT m TuLX m TuKT m UTLX m UTKT m UwLK d UwKb m UyLI d UyKd +m UzLK d UzKb m VKLI d UzKs m U?Kw d VIKb m V@Kw d VKKb m V@K{ d VLKb +m UsLK d U?LK m VFLK d VOLK m UsKb d U?Kb m VEKb d VOKb m UtLK d UwLI +m UvLK d UwLG m U|LK d UzLG m U}LK d UzLI m VILK d VKLI m VMLK d VKLI +m UwKd d UtKb m UwKf d UvKb m UzKf d U|Kb m UzKd d U}Kb m VIKf d VFKb +m VIKf d VMKb m UsKT m RQJ{ d RQJo m RgJ{ d RgJu d RfJo d R_Jf d R^Jb +d R\JZ d R\JR m R^Jd d R\J` d RZJZ d RZJR m RfJo d R^Jf d RZJ` d RYJZ +d RYJR d R\JR m RQJs d RRJw d RVJ{ d RYJ{ d RaJu d RdJu d RfJw d RgJ{ +m RTJw d RVJy d RYJy d R\Jw m RQJs d RRJu d RVJw d RYJw d RaJu m ROJE +m SGJu d SGJs d SIJs d SIJu d SGJu m SIJw d SGJw d SEJu d SEJs d SGJq +d SIJq d SJJs d SJJu d SIJy d SEJ{ d SAJ{ d R|Jy d RyJu d RwJq d RvJj +d RvJ^ d RwJX d RzJT d R?JR d SBJR d SGJT d SJJX d SLJ^ d SLJ` d SJJf +d SGJj d SBJl d R?Jl d R|Jj d RzJh d RyJd m RzJu d RyJq d RwJj d RwJ^ +d RyJX d RzJV m SIJX d SJJ\ d SJJb d SIJf m SAJ{ d R~Jy d R|Jw d RzJs +d RyJl d RyJ^ d RzJX d R|JT d R?JR m SBJR d SEJT d SGJV d SIJ\ d SIJb +d SGJh d SEJj d SBJl m RtJE m SYKI m SYJE m SxKI m SxJE m TVKI m TVJE +m TuKI m TuJE m UTKI m UTJE m UxJ{ d UxJR m UzJy d UzJT m U|J{ d U|JR +m UsJ{ d VAJ{ m UsJR d VMJR d VMJ^ m UuJ{ d UxJy m UvJ{ d UxJw m U}J{ +d U|Jw m U?J{ d U|Jy m UxJT d UuJR m UxJV d UvJR m U|JV d U}JR m U|JT +d U?JR m VDJR d VMJT m VHJR d VMJV m VIJR d VMJX m VKJR d VMJ^ m UsJE +m RQIl d RQI` m RgIl d RgIf d RfI` d R_IV d R^IS d R\IK d R\IC m R^IT +d R\IQ d RZIK d RZIC m RfI` d R^IV d RZIQ d RYIK d RYIC d R\IC m RQId +d RRIh d RVIl d RYIl d RaIf d RdIf d RfIh d RgIl m RTIh d RVIj d RYIj +d R\Ih m RQId d RRIf d RVIh d RYIh d RaIf m ROHu m RvIl d RvI` m SLIl +d SLIf d SJI` d SDIV d SBIS d SAIK d SAIC m SBIT d SAIQ d R?IK d R?IC +m SJI` d SBIV d R?IQ d R~IK d R~IC d SAIC m RvId d RwIh d RzIl d R~Il +d SEIf +stroke +m SEIf d SIIf d SJIh d SLIl m RyIh d RzIj d R~Ij d SAIh m RvId d RwIf +d RzIh d R~Ih d SEIf m RtHu m SYIy m SYHu m SxIy m SxHu m TVIy m TVHu +m TuIy m TuHu m UTIy m UTHu m UwIl d UwIE m UwIl d V@IC m UxIl d V@II +m UyIl d VAII m VIIl d V@IC m VIIl d VIIC m VJIj d VJIE m VKIl d VKIC +m UsIl d UyIl m VIIl d VOIl m UsIC d U{IC m VEIC d VOIC m UtIl d UwIj +m VMIl d VKIh m VNIl d VKIj m UwIE d UtIC m UwIE d UyIC m VIIE d VFIC +m VIIG d VHIC m VKIG d VMIC m VKIE d VNIC m UsHu m RQH\ d RQHQ m RgH\ +d RgHW d RfHQ d R_HG d R^HC d R\G{ d R\Gt m R^HE d R\HA d RZG{ d RZGt +m RfHQ d R^HG d RZHA d RYG{ d RYGt d R\Gt m RQHU d RRHY d RVH\ d RYH\ +d RaHW d RdHW d RfHY d RgH\ m RTHY d RVH[ d RYH[ d R\HY m RQHU d RRHW +d RVHY d RYHY d RaHW m ROGf m R~H\ d RyH[ d RwHW d RwHQ d RyHM d R~HK +d SDHK d SIHM d SJHQ d SJHW d SIH[ d SDH\ d R~H\ m RzH[ d RyHW d RyHQ +d RzHM m SGHM d SIHQ d SIHW d SGH[ m R~H\ d R|H[ d RzHW d RzHQ d R|HM +d R~HK m SDHK d SEHM d SGHQ d SGHW d SEH[ d SDH\ m R~HK d RyHI d RwHG +d RvHC d RvG{ d RwGx d RyGv d R~Gt d SDGt d SIGv d SJGx d SLG{ d SLHC +d SJHG d SIHI d SDHK m RyHG d RwHC d RwG{ d RyGx m SIGx d SJG{ d SJHC +d SIHG m R~HK d RzHI d RyHC d RyG{ d RzGv d R~Gt m SDGt d SGGv d SIG{ +d SIHC d SGHI d SDHK m RtGf m SYHj m SYGf m SxHj m SxGf m TVHj m TVGf +m TuHj m TuGf m UTHj m UTGf m UwH\ d UwGv m UwH\ d VJGt m UxH\ d VIGy +m UzH\ d VJGy m VJH[ d VJGt m UsH\ d UzH\ m VFH\ d VNH\ m UsGt d U{Gt +m UtH\ d UwH[ m VHH\ d VJH[ m VMH\ d VJH[ m UwGv d UtGt m UwGv d UzGt +m UsGf m RQGM d RQGA m RgGM d RgGG d RfGA d R_Fx d R^Ft d R\Fl d R\Fd +m R^Fv d R\Fr d RZFl d RZFd m RfGA d R^Fx d RZFr d RYFl d RYFd d R\Fd +m RQGE d RRGI d RVGM d RYGM d RaGG d RdGG d RfGI d RgGM m RTGI d RVGK +d RYGK d R\GI m RQGE d RRGG d RVGI d RYGI d RaGG m ROFW m RyFl d RyFj +d RzFj d RzFl d RyFl m SIF| d SGFx d SEFv d SBFt d R?Ft d RzFv d RwFz +d RvG@ d RvGA d RwGG d RzGK d R?GM d SBGM d SGGK d SJGG d SLGA d SLFv +d SJFn d SIFj d SEFf d SAFd d R|Fd d RyFf d RwFj d RwFl d RyFn d RzFn +d R|Fl d R|Fj d RzFh d RyFh m RyFz d RwF~ d RwGC d RyGG m SGGI d SIGG +d SJGA d SJFv d SIFn d SGFj m R?Ft d R|Fv d RzFx d RyF~ d RyGC d RzGI +d R|GK d R?GM m SBGM d SEGK d SGGG d SIGA d SIFt d SGFl d SEFh d SDFf +d SAFd m RtFW m SYG[ m SYFW m SxG[ m SxFW m TVG[ m TVFW m TuG[ m TuFW +m UTG[ m UTFW m U?GM d UzGK d UwGG d UvGC d UtF| d UtFv d UvFn d UwFj +d UzFf d U?Fd d VBFd d VFFf d VIFj d VKFn d VLFv d VLF| d VKGC d VIGG +d VFGK d VBGM d U?GM m UyGG d UwGC d UvF~ d UvFt d UwFn d UyFj m VHFj +d VIFn d VKFt d VKF~ d VIGC d VHGG m U?GM d U|GK d UyGE d UwF~ d UwFt +d UyFl d U|Ff d U?Fd m VBFd d VEFf d VHFl d VIFt d VIF~ d VHGE d VEGK +d VBGM m UsFW m ]Kc{ m ]Kbw m ]scn d ]ocl d ]mch d ]mcb d ]oc^ d ]sc\ +d ]zc\ d ]~c^ d ^@cb d ^@ch d ]~cl d ]zcn d ]scn m ]pcl d ]och d ]ocb +d ]pc^ m ]}c^ d ]~cb d ]~ch d ]}cl m ]scn d ]rcl d ]pch d ]pcb d ]rc^ +d ]sc\ m ]zc\ d ]{c^ d ]}cb d ]}ch d ]{cl d ]zcn m ]sc\ d ]ocZ d ]mcX +d ]kcU d ]kcM d ]mcI d ]ocG d ]scE d ]zcE d ]~cG d ^@cI d ^BcM d ^BcU +d ^@cX d ]~cZ d ]zc\ m ]ocX d ]mcU d ]mcM d ]ocI m ]~cI d ^@cM d ^@cU +d ]~cX m ]sc\ d ]pcZ d ]ocU d ]ocM d ]pcG d ]scE m ]zcE d ]}cG d ]~cM +d ]~cU d ]}cZ d ]zc\ m ]jbw m ^Zcn d ^Ucl d ^Rcf d ^Pc\ d ^PcV d ^RcM +d ^UcG d ^ZcE d ^]cE d ^bcG d ^ecM d ^fcV d ^fc\ d ^ecf d ^bcl d ^]cn +d ^Zcn m ^Ucj d ^Scf d ^Rc^ d ^RcU d ^ScM d ^UcI m ^bcI d ^ccM d ^ecU +d ^ec^ d ^ccf d ^bcj m ^Zcn d ^Vcl d ^Uch d ^Sc^ d ^ScU d ^UcK d ^VcG +d ^ZcE m ^]cE d ^`cG d ^bcK d ^ccU d ^cc^ d ^bch d ^`cl d ^]cn m ^Obw +m ^sc{ m ^sbw m _Rc{ m _Rbw m _qc{ m _qbw m `Pc{ m `Pbw m `oc{ m `obw +m aRcn d aRcE m aScl d aScG m aUcn d aUcE m aNcn d a_cn d adcl d aecj +d afcf d afc` d aec\ d adcZ d a_cX d aUcX m adcj d aecf d aec` d adc\ +m a_cn d abcl d adch d adc^ d abcZ d a_cX m aNcE d aYcE m aOcn d aRcl +m aPcn d aRcj m aVcn d aUcj m aXcn d aUcl m aRcG d aOcE m aRcI d aPcE +m aUcI d aVcE m aUcG d aXcE m aNbw m ]Kbl m ]Kah m ]sb^ d ]ob] d ]mbY +d ]mbS d ]obO d ]sbM d ]zbM d ]~bO d ^@bS d ^@bY d ]~b] d ]zb^ d ]sb^ +m ]pb] d ]obY d ]obS d ]pbO m ]}bO d ]~bS d ]~bY d ]}b] m ]sb^ d ]rb] +d ]pbY d ]pbS d ]rbO d ]sbM m ]zbM d ]{bO d ]}bS d ]}bY d ]{b] d ]zb^ +m ]sbM d ]obK d ]mbI d ]kbE d ]ka} d ]maz d ]oax d ]sav d ]zav d ]~ax +d ^@az d ^Ba} d ^BbE d ^@bI d ]~bK d ]zbM m ]obI d ]mbE d ]ma} d ]oaz +m ]~az d ^@a} d ^@bE d ]~bI m ]sbM d ]pbK d ]obE d ]oa} d ]pax d ]sav +m ]zav d ]}ax d ]~a} d ]~bE d ]}bK d ]zbM m ]jah m ^Zb[ d ^Zav m ^[b[ +d ^[ax m ^]b^ d ^]av m ^]b^ d ^XbY d ^UbW m ^Sav d ^cav m ^Zax d ^Vav +m ^Zaz d ^Xav m ^]az d ^^av m ^]ax d ^`av m ^Oah m ^sbl m ^sah m _Rbl +m _Rah m _qbl m _qah m `Pbl m `Pah m `obl m `oah m aYb^ d aUb] d aRbY +d aPbU d aObM d aObG d aPa? d aRa{ d aUax d aYav d a\av d aaax d ada{ +d aea? d afbG d afbM d aebU d adbY d aab] d a\b^ d aYb^ m aSbY d aRbU +d aPbO d aPbE d aRa? d aSa{ m aba{ d ada? d aebE d aebO d adbU d abbY +m aYb^ d aVb] d aSbW d aRbO d aRbE d aSa} d aVax d aYav m a\av d a_ax +d aba} d adbE d adbO d abbW d a_b] d a\b^ m aUa{ d aVa? d aYbA d a[bA +d a^a? d a_a{ d aaap d abal d aeal d afap d afat +stroke +m afat m aaat d abap d adan d aean m a_a{ d abar d adap d aeap d afar +m aNah m ]Ka] m ]K`Y m ]saO d ]oaM d ]maI d ]maC d ]oa@ d ]s`~ d ]z`~ +d ]~a@ d ^@aC d ^@aI d ]~aM d ]zaO d ]saO m ]paM d ]oaI d ]oaC d ]pa@ +m ]}a@ d ]~aC d ]~aI d ]}aM m ]saO d ]raM d ]paI d ]paC d ]ra@ d ]s`~ +m ]z`~ d ]{a@ d ]}aC d ]}aI d ]{aM d ]zaO m ]s`~ d ]o`| d ]m`z d ]k`v +d ]k`n d ]m`j d ]o`h d ]s`f d ]z`f d ]~`h d ^@`j d ^B`n d ^B`v d ^@`z +d ]~`| d ]z`~ m ]o`z d ]m`v d ]m`n d ]o`j m ]~`j d ^@`n d ^@`v d ]~`z +m ]s`~ d ]p`| d ]o`v d ]o`n d ]p`h d ]s`f m ]z`f d ]}`h d ]~`n d ]~`v +d ]}`| d ]z`~ m ]j`Y m ^RaG d ^RaE d ^SaE d ^SaG d ^RaG m ^RaI d ^SaI +d ^UaG d ^UaE d ^SaC d ^RaC d ^PaE d ^PaG d ^RaK d ^SaM d ^XaO d ^^aO +d ^caM d ^eaK d ^faG d ^faC d ^ea@ d ^``| d ^X`x d ^U`v d ^R`r d ^P`l +d ^P`f m ^caK d ^eaG d ^eaC d ^ca@ m ^^aO d ^baM d ^caG d ^caC d ^ba@ +d ^^`| d ^X`x m ^P`j d ^R`l d ^U`l d ^]`j d ^c`j d ^f`l m ^U`l d ^]`h +d ^c`h d ^e`j m ^U`l d ^]`f d ^c`f d ^e`h d ^f`l d ^f`p m ^O`Y m ^sa] +m ^s`Y m _Ra] m _R`Y m _qa] m _q`Y m `Pa] m `P`Y m `oa] m `o`Y m aRaO +d aR`f m aSaM d aS`h m aUaO d aU`f m aNaO d a_aO d adaM d aeaK d afaG +d afaC d aea@ d ad`~ d a_`| d aU`| m adaK d aeaG d aeaC d ada@ m a_aO +d abaM d adaI d adaB d ab`~ d a_`| m a[`| d a^`z d a_`v d ab`j d ad`f +d af`f d ah`j d ah`n m ab`n d ad`j d ae`h d af`h m a^`z d a_`x d ad`l +d ae`j d af`j d ah`l m aN`f d aY`f m aOaO d aRaM m aPaO d aRaK m aVaO +d aUaK m aXaO d aUaM m aR`h d aO`f m aR`j d aP`f m aU`j d aV`f m aU`h +d aX`f m aN`Y m ]K`M m ]K_I m ]s`@ d ]o_~ d ]m_z d ]m_t d ]o_p d ]s_n +d ]z_n d ]~_p d ^@_t d ^@_z d ]~_~ d ]z`@ d ]s`@ m ]p_~ d ]o_z d ]o_t +d ]p_p m ]}_p d ]~_t d ]~_z d ]}_~ m ]s`@ d ]r_~ d ]p_z d ]p_t d ]r_p +d ]s_n m ]z_n d ]{_p d ]}_t d ]}_z d ]{_~ d ]z`@ m ]s_n d ]o_l d ]m_j +d ]k_g d ]k__ d ]m_[ d ]o_Y d ]s_W d ]z_W d ]~_Y d ^@_[ d ^B__ d ^B_g +d ^@_j d ]~_l d ]z_n m ]o_j d ]m_g d ]m__ d ]o_[ m ]~_[ d ^@__ d ^@_g +d ]~_j m ]s_n d ]p_l d ]o_g d ]o__ d ]p_Y d ]s_W m ]z_W d ]}_Y d ]~__ +d ]~_g d ]}_l d ]z_n m ]j_I m ^R_x d ^R_v d ^S_v d ^S_x d ^R_x m ^R_z +d ^S_z d ^U_x d ^U_v d ^S_t d ^R_t d ^P_v d ^P_x d ^R_| d ^S_~ d ^X`@ +d ^^`@ d ^c_~ d ^e_z d ^e_t d ^c_p d ^^_n m ^b_~ d ^c_z d ^c_t d ^b_p +m ^]`@ d ^`_~ d ^b_z d ^b_t d ^`_p d ^]_n m ^Z_n d ^^_n d ^b_l d ^e_i +d ^f_e d ^f__ d ^e_[ d ^c_Y d ^^_W d ^X_W d ^S_Y d ^R_[ d ^P__ d ^P_a +d ^R_c d ^S_c d ^U_a d ^U__ d ^S_] d ^R_] m ^c_i d ^e_e d ^e__ d ^c_[ +m ^]_n d ^`_l d ^b_j d ^c_e d ^c__ d ^b_Y d ^^_W m ^R_a d ^R__ d ^S__ +d ^S_a d ^R_a m ^O_I m ^s`M m ^s_I m _R`M m _R_I m _q`M m _q_I m `P`M +m `P_I m `o`M m `o_I m ad_z d ae`@ d ae_t d ad_z d aa_~ d a\`@ d aW`@ +d aR_~ d aO_z d aO_t d aQ_p d aU_l d a__i d ab_g d ad_c d ad_] d ab_Y +m aQ_t d aR_p d aU_n d a__j d ab_i d ad_e m aR_~ d aQ_z d aQ_v d aR_r +d aU_p d a__l d ad_i d ae_e d ae__ d ad_[ d ab_Y d a]_W d aY_W d aT_Y +d aQ_] d aO_c d aO_W d aQ_] m aN_I m ]K^~ m ]K]z m ]s^p d ]o^o d ]m^k +d ]m^e d ]o^a d ]s^_ d ]z^_ d ]~^a d ^@^e d ^@^k d ]~^o d ]z^p d ]s^p +m ]p^o d ]o^k d ]o^e d ]p^a m ]}^a d ]~^e d ]~^k d ]}^o m ]s^p d ]r^o +d ]p^k d ]p^e d ]r^a d ]s^_ m ]z^_ d ]{^a d ]}^e d ]}^k d ]{^o d ]z^p +m ]s^_ d ]o^] d ]m^[ d ]k^W d ]k^O d ]m^K d ]o^J d ]s^H d ]z^H d ]~^J +d ^@^K d ^B^O d ^B^W d ^@^[ d ]~^] d ]z^_ m ]o^[ d ]m^W d ]m^O d ]o^K +m ]~^K d ^@^O d ^@^W d ]~^[ m ]s^_ d ]p^] d ]o^W d ]o^O d ]p^J d ]s^H +m ]z^H d ]}^J d ]~^O d ]~^W d ]}^] d ]z^_ m ]j]z m ^]^k d ^]^H m ^^^m +d ^^^J m ^`^p d ^`^H m ^`^p d ^O^S d ^h^S m ^X^H d ^e^H m ^]^J d ^Z^H +m ^]^K d ^[^H m ^`^K d ^b^H m ^`^J d ^c^H m ^O]z m ^s^~ m ^s]z m _R^~ +m _R]z m _q^~ m _q]z m `P^~ m `P]z m `o^~ m `o]z m aN^p d aN^e m aY^p +d aY^H m aZ^o d aZ^J m a\^p d a\^H m ag^p d ag^e m aN^p d ag^p m aT^H +d aa^H m aO^p d aN^e m aQ^p d aN^k m aR^p d aN^m m aU^p d aN^o m a_^p +d ag^o m ab^p d ag^m m ad^p d ag^k m ae^p d ag^e m aY^J d aU^H m aY^K +d aW^H m a\^K d a]^H m a\^J d a_^H m aN]z m ]K]o m ]K\k m ]s]a d ]o]_ +d ]m][ d ]m]U d ]o]R d ]s]P d ]z]P d ]~]R d ^@]U d ^@][ d ]~]_ d ]z]a +d ]s]a m ]p]_ d ]o][ d ]o]U d ]p]R m ]}]R d ]~]U d ]~][ d ]}]_ m ]s]a +d ]r]_ d ]p][ d ]p]U d ]r]R d ]s]P m ]z]P d ]{]R d ]}]U d ]}][ d ]{]_ +d ]z]a m ]s]P d ]o]N d ]m]L d ]k]H d ]k]@ d ]m\| d ]o\z d ]s\x d ]z\x +d ]~\z d ^@\| d ^B]@ d ^B]H d ^@]L d ]~]N d ]z]P m ]o]L d ]m]H d ]m]@ +d ]o\| m ]~\| d ^@]@ d ^@]H d ]~]L m ]s]P d ]p]N d ]o]H d ]o]@ d ]p\z +d ]s\x m ]z\x d ]}\z d ]~]@ d ]~]H d ]}]N d ]z]P m ]j\k m ^S]a d ^P]N +d ^S]R d ^X]S d ^]]S d ^b]R d ^e]N d ^f]H d ^f]D d ^e\~ d ^b\z d ^]\x +d ^X\x d ^S\z d ^R\| d ^P]@ d ^P]B d ^R]D d ^S]D d ^U]B d ^U]@ d ^S\~ +d ^R\~ m ^c]N d ^e]J d ^e]B d ^c\~ m ^]]S d ^`]R d ^b]P d ^c]J d ^c]B +d ^b\| d ^`\z d ^]\x m ^R]B d ^R]@ d ^S]@ d ^S]B d ^R]B m ^S]a d ^c]a +m ^S]_ d ^`]_ m ^S]] d ^Z]] d ^`]_ d ^c]a m ^O\k m ^s]o m ^s\k m _R]o +m _R\k m _q]o m _q\k m `P]o m `P\k m `o]o m `o\k m aR]a d aR]D d aS\~ +d aV\z d aZ\x d a]\x d aa\z d ac\~ d ae]D d ae]_ m aS]_ d aS]B +stroke +m aS]B d aT\~ m aT]a d aT]B d aV\| d aW\z d aZ\x m aN]a d aX]a m aa]a +d ai]a m aO]a d aR]_ m aP]a d aR]] m aV]a d aT]] m aW]a d aT]_ m ab]a +d ae]_ m ag]a d ae]_ m aN\k m ]K\_ m ]K[[ m ]s\R d ]o\P d ]m\L d ]m\F +d ]o\B d ]s\@ d ]z\@ d ]~\B d ^@\F d ^@\L d ]~\P d ]z\R d ]s\R m ]p\P +d ]o\L d ]o\F d ]p\B m ]}\B d ]~\F d ]~\L d ]}\P m ]s\R d ]r\P d ]p\L +d ]p\F d ]r\B d ]s\@ m ]z\@ d ]{\B d ]}\F d ]}\L d ]{\P d ]z\R m ]s\@ +d ]o[~ d ]m[| d ]k[y d ]k[q d ]m[m d ]o[k d ]s[i d ]z[i d ]~[k d ^@[m +d ^B[q d ^B[y d ^@[| d ]~[~ d ]z\@ m ]o[| d ]m[y d ]m[q d ]o[m m ]~[m +d ^@[q d ^@[y d ]~[| m ]s\@ d ]p[~ d ]o[y d ]o[q d ]p[k d ]s[i m ]z[i +d ]}[k d ]~[q d ]~[y d ]}[~ d ]z\@ m ]j[[ m ^b\L d ^b\J d ^c\J d ^c\L +d ^b\L m ^c\N d ^b\N d ^`\L d ^`\J d ^b\H d ^c\H d ^e\J d ^e\L d ^c\P +d ^`\R d ^[\R d ^V\P d ^S\L d ^R\H d ^P\@ d ^P[u d ^R[o d ^U[k d ^Z[i +d ^][i d ^b[k d ^e[o d ^f[u d ^f[w d ^e[| d ^b\@ d ^]\B d ^Z\B d ^V\@ +d ^U[~ d ^S[{ m ^U\L d ^S\H d ^R\@ d ^R[u d ^S[o d ^U[m m ^c[o d ^e[s +d ^e[y d ^c[| m ^[\R d ^X\P d ^V\N d ^U\J d ^S\B d ^S[u d ^U[o d ^V[k +d ^Z[i m ^][i d ^`[k d ^b[m d ^c[s d ^c[y d ^b[~ d ^`\@ d ^]\B m ^O[[ +m ^s\_ m ^s[[ m _R\_ m _R[[ m _q\_ m _q[[ m `P\_ m `P[[ m `o\_ m `o[[ +m aO\R d aZ[i m aQ\R d aZ[o d aZ[i m aR\R d a\[o m ae\P d aZ[i m aN\R +d aW\R m a_\R d ai\R m aN\R d aQ\N m aT\R d aR\N m aU\R d aR\P m ab\R +d ae\P m ag\R d ae\P m aN[[ m ]K[P m ]KZL m ]s[C d ]o[A d ]mZ} d ]mZw +d ]oZs d ]sZq d ]zZq d ]~Zs d ^@Zw d ^@Z} d ]~[A d ]z[C d ]s[C m ]p[A +d ]oZ} d ]oZw d ]pZs m ]}Zs d ]~Zw d ]~Z} d ]}[A m ]s[C d ]r[A d ]pZ} +d ]pZw d ]rZs d ]sZq m ]zZq d ]{Zs d ]}Zw d ]}Z} d ]{[A d ]z[C m ]sZq +d ]oZo d ]mZm d ]kZi d ]kZa d ]mZ^ d ]oZ\ d ]sZZ d ]zZZ d ]~Z\ d ^@Z^ +d ^BZa d ^BZi d ^@Zm d ]~Zo d ]zZq m ]oZm d ]mZi d ]mZa d ]oZ^ m ]~Z^ +d ^@Za d ^@Zi d ]~Zm m ]sZq d ]pZo d ]oZi d ]oZa d ]pZ\ d ]sZZ m ]zZZ +d ]}Z\ d ]~Za d ]~Zi d ]}Zo d ]zZq m ]jZL m ^P[C d ^PZw m ^f[C d ^fZ} +d ^eZw d ^^Zm d ^]Zi d ^[Za d ^[ZZ m ^]Zk d ^[Zg d ^ZZa d ^ZZZ m ^eZw +d ^]Zm d ^ZZg d ^XZa d ^XZZ d ^[ZZ m ^PZ{ d ^RZ? d ^U[C d ^X[C d ^`Z} +d ^cZ} d ^eZ? d ^f[C m ^SZ? d ^U[A d ^X[A d ^[Z? m ^PZ{ d ^RZ} d ^UZ? +d ^XZ? d ^`Z} m ^OZL m ^s[P m ^sZL m _R[P m _RZL m _q[P m _qZL m `P[P +m `PZL m `o[P m `oZL m aP[C d aVZZ m aR[C d aVZc d aVZZ m aS[C d aWZc +m a[[C d aWZc d aVZZ m a[[C d aaZZ m a][C d aaZc d aaZZ m a^[C d abZc +m af[A d abZc d aaZZ m aN[C d aW[C m a[[C d a^[C m ab[C d aj[C m aN[C +d aR[A m aO[C d aRZ? m aT[C d aSZ? m aV[C d aS[A m ac[C d af[A m ai[C +d af[A m aNZL m ]KZA m ]KX} m ]sYs d ]oYq d ]mYm d ]mYg d ]oYd d ]sYb +d ]zYb d ]~Yd d ^@Yg d ^@Ym d ]~Yq d ]zYs d ]sYs m ]pYq d ]oYm d ]oYg +d ]pYd m ]}Yd d ]~Yg d ]~Ym d ]}Yq m ]sYs d ]rYq d ]pYm d ]pYg d ]rYd +d ]sYb m ]zYb d ]{Yd d ]}Yg d ]}Ym d ]{Yq d ]zYs m ]sYb d ]oY` d ]mY^ +d ]kYZ d ]kYR d ]mYN d ]oYL d ]sYJ d ]zYJ d ]~YL d ^@YN d ^BYR d ^BYZ +d ^@Y^ d ]~Y` d ]zYb m ]oY^ d ]mYZ d ]mYR d ]oYN m ]~YN d ^@YR d ^@YZ +d ]~Y^ m ]sYb d ]pY` d ]oYZ d ]oYR d ]pYL d ]sYJ m ]zYJ d ]}YL d ]~YR +d ]~YZ d ]}Y` d ]zYb m ]jX} m ^XYs d ^SYq d ^RYm d ^RYg d ^SYd d ^XYb +d ^^Yb d ^cYd d ^eYg d ^eYm d ^cYq d ^^Ys d ^XYs m ^UYq d ^SYm d ^SYg +d ^UYd m ^bYd d ^cYg d ^cYm d ^bYq m ^XYs d ^VYq d ^UYm d ^UYg d ^VYd +d ^XYb m ^^Yb d ^`Yd d ^bYg d ^bYm d ^`Yq d ^^Ys m ^XYb d ^SY` d ^RY^ +d ^PYZ d ^PYR d ^RYN d ^SYL d ^XYJ d ^^YJ d ^cYL d ^eYN d ^fYR d ^fYZ +d ^eY^ d ^cY` d ^^Yb m ^SY^ d ^RYZ d ^RYR d ^SYN m ^cYN d ^eYR d ^eYZ +d ^cY^ m ^XYb d ^UY` d ^SYZ d ^SYR d ^UYL d ^XYJ m ^^YJ d ^bYL d ^cYR +d ^cYZ d ^bY` d ^^Yb m ^OX} m ^sZA m ^sX} m _RZA m _RX} m _qZA m _qX} +m `PZA m `PX} m `oZA m `oX} m aOYs d abYJ m aQYs d adYJ m aRYs d aeYJ +m adYq d aQYL m aNYs d aWYs m a_Ys d aiYs m aNYJ d aUYJ m a]YJ d aiYJ +m aNYs d aRYo m aTYs d aRYo m aUYs d aRYq m aaYs d adYq m agYs d adYq +m aQYL d aNYJ m aQYL d aTYJ m abYL d a_YJ m abYN d aaYJ m abYN d agYJ +m aNX} m ]KXq m ]KWm m ]sXd d ]oXb d ]mX^ d ]mXX d ]oXT d ]sXR d ]zXR +d ]~XT d ^@XX d ^@X^ d ]~Xb d ]zXd d ]sXd m ]pXb d ]oX^ d ]oXX d ]pXT +m ]}XT d ]~XX d ]~X^ d ]}Xb m ]sXd d ]rXb d ]pX^ d ]pXX d ]rXT d ]sXR +m ]zXR d ]{XT d ]}XX d ]}X^ d ]{Xb d ]zXd m ]sXR d ]oXP d ]mXN d ]kXK +d ]kXC d ]mW? d ]oW} d ]sW{ d ]zW{ d ]~W} d ^@W? d ^BXC d ^BXK d ^@XN +d ]~XP d ]zXR m ]oXN d ]mXK d ]mXC d ]oW? m ]~W? d ^@XC d ^@XK d ]~XN +m ]sXR d ]pXP d ]oXK d ]oXC d ]pW} d ]sW{ m ]zW{ d ]}W} d ]~XC d ]~XK +d ]}XP d ]zXR m ]jWm m ^SXC d ^SXA d ^UXA d ^UXC d ^SXC m ^cXR d ^bXN +d ^`XM d ^]XK d ^ZXK d ^UXM d ^RXP d ^PXV d ^PXX d ^RX^ d ^UXb d ^ZXd +d ^]Xd d ^bXb d ^eX^ d ^fXX d ^fXM d ^eXE d ^cXA d ^`W} d ^[W{ d ^VW{ +d ^SW} d ^RXA d ^RXC d ^SXE d ^UXE d ^VXC d ^VXA d ^UW? d ^SW? m ^SXP +d ^RXT d ^RXZ d ^SX^ m ^bX` d ^cX^ d ^eXX d ^eXM d ^cXE d ^bXA m ^ZXK +d ^VXM d ^UXN d ^SXT d ^SXZ d ^UX` d ^VXb d ^ZXd m ^]Xd d ^`Xb d ^bX^ +d ^cXX d ^cXK d ^bXC d ^`W? d ^^W} d ^[W{ m ^OWm m ^sXq m ^sWm m _RXq +m _RWm m _qXq m _qWm m `PXq m `PWm m `oXq m `oWm m aOXd d aYXN d aYW{ +m aPXd d a[XN d a[W} m aRXd d a\XN d a\W{ m aeXb d a\XN m aNXd d aVXd +m aaXd d aiXd m aUW{ d aaW{ m aNXd d aPXb +stroke +m aPXb m aUXd d aRXb m abXd d aeXb m ahXd d aeXb m aYW} d aVW{ m aYW? +d aXW{ m a\W? d a^W{ m a\W} d a_W{ m aNWm m ]KWb m ]KV^ m ]oVs d ]oVq +d ]pVq d ]pVs d ]oVs m ]~WC d ]}V? d ]{V} d ]xV{ d ]uV{ d ]pV} d ]mWA +d ]kWG d ]kWI d ]mWO d ]pWS d ]uWT d ]xWT d ]}WS d ^@WO d ^BWI d ^BV} +d ^@Vu d ]~Vq d ]{Vn d ]vVl d ]rVl d ]oVn d ]mVq d ]mVs d ]oVu d ]pVu +d ]rVs d ]rVq d ]pVp d ]oVp m ]oWA d ]mWE d ]mWK d ]oWO m ]}WQ d ]~WO +d ^@WI d ^@V} d ]~Vu d ]}Vq m ]uV{ d ]rV} d ]pV? d ]oWE d ]oWK d ]pWQ +d ]rWS d ]uWT m ]xWT d ]{WS d ]}WO d ]~WI d ]~V{ d ]}Vs d ]{Vp d ]zVn +d ]vVl m ]jV^ m ^ZWT d ^UWS d ^RWM d ^PWC d ^PV} d ^RVs d ^UVn d ^ZVl +d ^]Vl d ^bVn d ^eVs d ^fV} d ^fWC d ^eWM d ^bWS d ^]WT d ^ZWT m ^UWQ +d ^SWM d ^RWE d ^RV{ d ^SVs d ^UVp m ^bVp d ^cVs d ^eV{ d ^eWE d ^cWM +d ^bWQ m ^ZWT d ^VWS d ^UWO d ^SWE d ^SV{ d ^UVq d ^VVn d ^ZVl m ^]Vl +d ^`Vn d ^bVq d ^cV{ d ^cWE d ^bWO d ^`WS d ^]WT m ^OV^ m ^sWb m ^sV^ +m _RWb m _RV^ m _qWb m _qV^ m `PWb m `PV^ m `oWb m `oV^ m aeWT d aOWT +d aOWI m abWT d aOVl m adWT d aQVl m aeWT d aRVl m aOVl d aeVl d aeVw +m aQWT d aOWI m aRWT d aOWO m aTWT d aOWQ m aWWT d aOWS m a]Vl d aeVn +m aaVl d aeVp m abVl d aeVq m adVl d aeVw m aNV^ m ]KVS m ]KUO m ]oUd +d ]oUb d ]pUb d ]pUd d ]oUd m ]~Ut d ]}Up d ]{Un d ]xUl d ]uUl d ]pUn +d ]mUr d ]kUx d ]kUy d ]mU? d ]pVC d ]uVE d ]xVE d ]}VC d ^@U? d ^BUy +d ^BUn d ^@Uf d ]~Ub d ]{U^ d ]vU\ d ]rU\ d ]oU^ d ]mUb d ]mUd d ]oUf +d ]pUf d ]rUd d ]rUb d ]pU` d ]oU` m ]oUr d ]mUv d ]mU{ d ]oU? m ]}VA +d ]~U? d ^@Uy d ^@Un d ]~Uf d ]}Ub m ]uUl d ]rUn d ]pUp d ]oUv d ]oU{ +d ]pVA d ]rVC d ]uVE m ]xVE d ]{VC d ]}U? d ]~Uy d ]~Ul d ]}Ud d ]{U` +d ]zU^ d ]vU\ m ]jUO m ^ZVA d ^ZU\ m ^[VA d ^[U^ m ^]VE d ^]U\ m ^]VE +d ^XU? d ^UU} m ^SU\ d ^cU\ m ^ZU^ d ^VU\ m ^ZU` d ^XU\ m ^]U` d ^^U\ +m ^]U^ d ^`U\ m ^OUO m ^sVS m ^sUO m _RVS m _RUO m _qVS m _qUO m `PVS +m `PUO m `oVS m `oUO m aRVM d aRUO m aTVM d aTUO m aRVM d a`VM m aRUO +d a`UO m aNUO m ]KUC m ]KS? m ]oTU d ]oTS d ]pTS d ]pTU d ]oTU m ]~Td +d ]}T` d ]{T^ d ]xT] d ]uT] d ]pT^ d ]mTb d ]kTh d ]kTj d ]mTp d ]pTt +d ]uTv d ]xTv d ]}Tt d ^@Tp d ^BTj d ^BT^ d ^@TW d ]~TS d ]{TO d ]vTM +d ]rTM d ]oTO d ]mTS d ]mTU d ]oTW d ]pTW d ]rTU d ]rTS d ]pTQ d ]oTQ +m ]oTb d ]mTf d ]mTl d ]oTp m ]}Tr d ]~Tp d ^@Tj d ^@T^ d ]~TW d ]}TS +m ]uT] d ]rT^ d ]pT` d ]oTf d ]oTl d ]pTr d ]rTt d ]uTv m ]xTv d ]{Tt +d ]}Tp d ]~Tj d ]~T] d ]}TU d ]{TQ d ]zTO d ]vTM m ]jS? m ^RTn d ^RTl +d ^STl d ^STn d ^RTn m ^RTp d ^STp d ^UTn d ^UTl d ^STj d ^RTj d ^PTl +d ^PTn d ^RTr d ^STt d ^XTv d ^^Tv d ^cTt d ^eTr d ^fTn d ^fTj d ^eTf +d ^`Tb d ^XT^ d ^UT] d ^RTY d ^PTS d ^PTM m ^cTr d ^eTn d ^eTj d ^cTf +m ^^Tv d ^bTt d ^cTn d ^cTj d ^bTf d ^^Tb d ^XT^ m ^PTQ d ^RTS d ^UTS +d ^]TQ d ^cTQ d ^fTS m ^UTS d ^]TO d ^cTO d ^eTQ m ^UTS d ^]TM d ^cTM +d ^eTO d ^fTS d ^fTW m ^OS? m ^sUC m ^sS? m _RUC m _RS? m _qUC m _qS? +m `PUC m `PS? m `oUC m `oS? m aNTv d agTG m aNS? m ]KSt m ]KRp m ]oSE +d ]oSC d ]pSC d ]pSE d ]oSE m ]~SU d ]}SQ d ]{SO d ]xSM d ]uSM d ]pSO +d ]mSS d ]kSY d ]kS[ d ]mSa d ]pSe d ]uSf d ]xSf d ]}Se d ^@Sa d ^BS[ +d ^BSO d ^@SG d ]~SC d ]{S@ d ]vR~ d ]rR~ d ]oS@ d ]mSC d ]mSE d ]oSG +d ]pSG d ]rSE d ]rSC d ]pSB d ]oSB m ]oSS d ]mSW d ]mS] d ]oSa m ]}Sc +d ]~Sa d ^@S[ d ^@SO d ]~SG d ]}SC m ]uSM d ]rSO d ]pSQ d ]oSW d ]oS] +d ]pSc d ]rSe d ]uSf m ]xSf d ]{Se d ]}Sa d ]~S[ d ]~SM d ]}SE d ]{SB +d ]zS@ d ]vR~ m ]jRp m ^RS_ d ^RS] d ^SS] d ^SS_ d ^RS_ m ^RSa d ^SSa +d ^US_ d ^US] d ^SS[ d ^RS[ d ^PS] d ^PS_ d ^RSc d ^SSe d ^XSf d ^^Sf +d ^cSe d ^eSa d ^eS[ d ^cSW d ^^SU m ^bSe d ^cSa d ^cS[ d ^bSW m ^]Sf +d ^`Se d ^bSa d ^bS[ d ^`SW d ^]SU m ^ZSU d ^^SU d ^bSS d ^eSO d ^fSK +d ^fSE d ^eSB d ^cS@ d ^^R~ d ^XR~ d ^SS@ d ^RSB d ^PSE d ^PSG d ^RSI +d ^SSI d ^USG d ^USE d ^SSC d ^RSC m ^cSO d ^eSK d ^eSE d ^cSB m ^]SU +d ^`SS d ^bSQ d ^cSK d ^cSE d ^bS@ d ^^R~ m ^RSG d ^RSE d ^SSE d ^SSG +d ^RSG m ^ORp m ^sSt m ^sRp m _RSt m _RRp m _qSt m _qRp m `PSt m `PRp +m `oSt m `oRp m a\Sn d a\Rp m a^Sn d a^Rp m aPSn d a^Sn m aPRp d a^Rp +m aNRp m ]KRe m ]KQa m ]oQv d ]oQt d ]pQt d ]pQv d ]oQv m ]~RF d ]}RB +d ]{R@ d ]xQ~ d ]uQ~ d ]pR@ d ]mRD d ]kRJ d ]kRK d ]mRQ d ]pRU d ]uRW +d ]xRW d ]}RU d ^@RQ d ^BRK d ^BR@ d ^@Qx d ]~Qt d ]{Qp d ]vQn d ]rQn +d ]oQp d ]mQt d ]mQv d ]oQx d ]pQx d ]rQv d ]rQt d ]pQr d ]oQr m ]oRD +d ]mRH d ]mRM d ]oRQ m ]}RS d ]~RQ d ^@RK d ^@R@ d ]~Qx d ]}Qt m ]uQ~ +d ]rR@ d ]pRB d ]oRH d ]oRM d ]pRS d ]rRU d ]uRW m ]xRW d ]{RU d ]}RQ +d ]~RK d ]~Q~ d ]}Qv d ]{Qr d ]zQp d ]vQn m ]jQa m ^]RQ d ^]Qn m ^^RS +d ^^Qp m ^`RW d ^`Qn m ^`RW d ^OQz d ^hQz m ^XQn d ^eQn m ^]Qp d ^ZQn +m ^]Qr d ^[Qn m ^`Qr d ^bQn m ^`Qp d ^cQn m ^OQa m ^sRe m ^sQa m _RRe +m _RQa m _qRe m _qQa m `PRe m `PQa m `oRe m `oQa m aURK d aYRQ d a]RK +m aORF d aYRO d abRF m aYRO d aYQn m aNQa m ]KQU m ]KPQ m ]oPg d ]oPe +d ]pPe d ]pPg d ]oPg m ]~Pv d ]}Pr d ]{Pq d ]xPo d ]uPo d ]pPq d ]mPt +d ]kPz d ]kP| d ]mQB d ]pQF d ]uQH d ]xQH d ]}QF d ^@QB d ^BP| d ^BPq +d ^@Pi d ]~Pe d ]{Pa d ]vP_ +stroke +m ]vP_ d ]rP_ d ]oPa d ]mPe d ]mPg d ]oPi d ]pPi d ]rPg d ]rPe d ]pPc +d ]oPc m ]oPt d ]mPx d ]mP~ d ]oQB m ]}QD d ]~QB d ^@P| d ^@Pq d ]~Pi +d ]}Pe m ]uPo d ]rPq d ]pPr d ]oPx d ]oP~ d ]pQD d ]rQF d ]uQH m ]xQH +d ]{QF d ]}QB d ]~P| d ]~Po d ]}Pg d ]{Pc d ]zPa d ]vP_ m ]jPQ m ^SQH +d ^PPt d ^SPx d ^XPz d ^]Pz d ^bPx d ^ePt d ^fPo d ^fPk d ^ePe d ^bPa +d ^]P_ d ^XP_ d ^SPa d ^RPc d ^PPg d ^PPi d ^RPk d ^SPk d ^UPi d ^UPg +d ^SPe d ^RPe m ^cPt d ^ePq d ^ePi d ^cPe m ^]Pz d ^`Px d ^bPv d ^cPq +d ^cPi d ^bPc d ^`Pa d ^]P_ m ^RPi d ^RPg d ^SPg d ^SPi d ^RPi m ^SQH +d ^cQH m ^SQF d ^`QF m ^SQD d ^ZQD d ^`QF d ^cQH m ^OPQ m ^sQU m ^sPQ +m _RQU m _RPQ m _qQU m _qPQ m `PQU m `PPQ m `oQU m `oPQ m aNP[ d ahP[ +m aNPQ m ]KPF m ]KOB m ]oOW d ]oOV d ]pOV d ]pOW d ]oOW m ]~Og d ]}Oc +d ]{Oa d ]xO_ d ]uO_ d ]pOa d ]mOe d ]kOk d ]kOm d ]mOs d ]pOw d ]uOy +d ]xOy d ]}Ow d ^@Os d ^BOm d ^BOa d ^@OY d ]~OV d ]{OR d ]vOP d ]rOP +d ]oOR d ]mOV d ]mOW d ]oOY d ]pOY d ]rOW d ]rOV d ]pOT d ]oOT m ]oOe +d ]mOi d ]mOo d ]oOs m ]}Ou d ]~Os d ^@Om d ^@Oa d ]~OY d ]}OV m ]uO_ +d ]rOa d ]pOc d ]oOi d ]oOo d ]pOu d ]rOw d ]uOy m ]xOy d ]{Ow d ]}Os +d ]~Om d ]~O_ d ]}OW d ]{OT d ]zOR d ]vOP m ]jOB m ^bOs d ^bOq d ^cOq +d ^cOs d ^bOs m ^cOu d ^bOu d ^`Os d ^`Oq d ^bOo d ^cOo d ^eOq d ^eOs +d ^cOw d ^`Oy d ^[Oy d ^VOw d ^SOs d ^ROo d ^POg d ^PO[ d ^ROV d ^UOR +d ^ZOP d ^]OP d ^bOR d ^eOV d ^fO[ d ^fO] d ^eOc d ^bOg d ^]Oi d ^ZOi +d ^VOg d ^UOe d ^SOa m ^UOs d ^SOo d ^ROg d ^RO[ d ^SOV d ^UOT m ^cOV +d ^eOY d ^eO_ d ^cOc m ^[Oy d ^XOw d ^VOu d ^UOq d ^SOi d ^SO[ d ^UOV +d ^VOR d ^ZOP m ^]OP d ^`OR d ^bOT d ^cOY d ^cO_ d ^bOe d ^`Og d ^]Oi +m ^OOB m ^sPF m ^sOB m _RPF m _ROB m _qPF m _qOB m `PPF m `POB m `oPF +m `oOB m aZOy d aUOw d aROs d aROm d aUOk d aWOk d aZOm d aZOo d aWOq +d aUOq d aROo m aUOo d aUOm d aWOm d aWOo d aUOo m aUOw d aROo m aROs +d aUOq m aNOB m ]KNw m ]KMs m ]oNH d ]oNF d ]pNF d ]pNH d ]oNH m ]~NX +d ]}NT d ]{NR d ]xNP d ]uNP d ]pNR d ]mNV d ]kN[ d ]kN] d ]mNc d ]pNg +d ]uNi d ]xNi d ]}Ng d ^@Nc d ^BN] d ^BNR d ^@NJ d ]~NF d ]{NB d ]vN@ +d ]rN@ d ]oNB d ]mNF d ]mNH d ]oNJ d ]pNJ d ]rNH d ]rNF d ]pND d ]oND +m ]oNV d ]mNZ d ]mN_ d ]oNc m ]}Ne d ]~Nc d ^@N] d ^@NR d ]~NJ d ]}NF +m ]uNP d ]rNR d ]pNT d ]oNZ d ]oN_ d ]pNe d ]rNg d ]uNi m ]xNi d ]{Ng +d ]}Nc d ]~N] d ]~NP d ]}NH d ]{ND d ]zNB d ]vN@ m ]jMs m ^PNi d ^PN] +m ^fNi d ^fNc d ^eN] d ^^NT d ^]NP d ^[NH d ^[N@ m ^]NR d ^[NN d ^ZNH +d ^ZN@ m ^eN] d ^]NT d ^ZNN d ^XNH d ^XN@ d ^[N@ m ^PNa d ^RNe d ^UNi +d ^XNi d ^`Nc d ^cNc d ^eNe d ^fNi m ^SNe d ^UNg d ^XNg d ^[Ne m ^PNa +d ^RNc d ^UNe d ^XNe d ^`Nc m ^OMs m ^sNw m ^sMs m _RNw m _RMs m _qNw +m _qMs m `PNw m `PMs m `oNw m `oMs m aRNV d aRNX d aTNX d aTNT d aQNT +d aQNX d aRNZ d aUN[ d a\N[ d a_NZ d aaNX d abNT d abNF d adNB d aeN@ +m a_NX d aaNT d aaNF d abNB m a\N[ d a]NZ d a_NV d a_NF d aaNB d aeN@ +d agN@ m a_NR d a]NP d aUNN d aQNL d aONH d aONF d aQNB d aUN@ d aZN@ +d a]NB d a_NF m aRNL d aQNH d aQNF d aRNB m a]NP d aWNN d aTNL d aRNH +d aRNF d aTNB d aUN@ m aNMs m ]KMg m ]KLc m ]oLy d ]oLw d ]pLw d ]pLy +d ]oLy m ]~MH d ]}MD d ]{MC d ]xMA d ]uMA d ]pMC d ]mMF d ]kML d ]kMN +d ]mMT d ]pMX d ]uMZ d ]xMZ d ]}MX d ^@MT d ^BMN d ^BMC d ^@L{ d ]~Lw +d ]{Ls d ]vLq d ]rLq d ]oLs d ]mLw d ]mLy d ]oL{ d ]pL{ d ]rLy d ]rLw +d ]pLu d ]oLu m ]oMF d ]mMJ d ]mMP d ]oMT m ]}MV d ]~MT d ^@MN d ^@MC +d ]~L{ d ]}Lw m ]uMA d ]rMC d ]pMD d ]oMJ d ]oMP d ]pMV d ]rMX d ]uMZ +m ]xMZ d ]{MX d ]}MT d ]~MN d ]~MA d ]}Ly d ]{Lu d ]zLs d ]vLq m ]jLc +m ^XMZ d ^SMX d ^RMT d ^RMN d ^SMJ d ^XMH d ^^MH d ^cMJ d ^eMN d ^eMT +d ^cMX d ^^MZ d ^XMZ m ^UMX d ^SMT d ^SMN d ^UMJ m ^bMJ d ^cMN d ^cMT +d ^bMX m ^XMZ d ^VMX d ^UMT d ^UMN d ^VMJ d ^XMH m ^^MH d ^`MJ d ^bMN +d ^bMT d ^`MX d ^^MZ m ^XMH d ^SMF d ^RMD d ^PMA d ^PLy d ^RLu d ^SLs +d ^XLq d ^^Lq d ^cLs d ^eLu d ^fLy d ^fMA d ^eMD d ^cMF d ^^MH m ^SMD +d ^RMA d ^RLy d ^SLu m ^cLu d ^eLy d ^eMA d ^cMD m ^XMH d ^UMF d ^SMA +d ^SLy d ^ULs d ^XLq m ^^Lq d ^bLs d ^cLy d ^cMA d ^bMF d ^^MH m ^OLc +m ^sMg m ^sLc m _RMg m _RLc m _qMg m _qLc m `PMg m `PLc m `oMg m `oLc +m aRMZ d aRLq d aTLs d aWLs m aTMX d aTLu m aNMZ d aUMZ d aULs m aUMF +d aWMJ d aZML d a]ML d aaMJ d adMF d afMA d afL} d adLw d aaLs d a]Lq +d aZLq d aWLs d aULw m acMF d adMC d adL{ d acLw m a]ML d a`MJ d aaMH +d acMC d acL{ d aaLu d a`Ls d a]Lq m aOMZ d aRMX m aQMZ d aRMV m aNLc +m ]KLX m ]KKT m ]oKi d ]oKg d ]pKg d ]pKi d ]oKi m ]~Ky d ]}Ku d ]{Ks +d ]xKq d ]uKq d ]pKs d ]mKw d ]kK} d ]kK? d ]mLE d ]pLI d ]uLK d ]xLK +d ]}LI d ^@LE d ^BK? d ^BKs d ^@Kk d ]~Kg d ]{Kd d ]vKb d ]rKb d ]oKd +d ]mKg d ]mKi d ]oKk d ]pKk d ]rKi d ]rKg d ]pKf +stroke +m ]pKf d ]oKf m ]oKw d ]mK{ d ]mLA d ]oLE m ]}LG d ]~LE d ^@K? d ^@Ks +d ]~Kk d ]}Kg m ]uKq d ]rKs d ]pKu d ]oK{ d ]oLA d ]pLG d ]rLI d ]uLK +m ]xLK d ]{LI d ]}LE d ]~K? d ]~Kq d ]}Ki d ]{Kf d ]zKd d ]vKb m ]jKT +m ^SKi d ^SKg d ^UKg d ^UKi d ^SKi m ^cKy d ^bKu d ^`Ks d ^]Kq d ^ZKq +d ^UKs d ^RKw d ^PK} d ^PK? d ^RLE d ^ULI d ^ZLK d ^]LK d ^bLI d ^eLE +d ^fK? d ^fKs d ^eKk d ^cKg d ^`Kd d ^[Kb d ^VKb d ^SKd d ^RKg d ^RKi +d ^SKk d ^UKk d ^VKi d ^VKg d ^UKf d ^SKf m ^SKw d ^RK{ d ^RLA d ^SLE +m ^bLG d ^cLE d ^eK? d ^eKs d ^cKk d ^bKg m ^ZKq d ^VKs d ^UKu d ^SK{ +d ^SLA d ^ULG d ^VLI d ^ZLK m ^]LK d ^`LI d ^bLE d ^cK? d ^cKq d ^bKi +d ^`Kf d ^^Kd d ^[Kb m ^OKT m ^sLX m ^sKT m _RLX m _RKT m _qLX m _qKT +m `PLX m `PKT m `oLX m `oKT m acKu d acKw d aaKw d aaKs d aeKs d aeKw +d aaK{ d a^K} d aYK} d aTK{ d aQKw d aOKq d aOKm d aQKg d aTKd d aYKb +d a\Kb d aaKd d aeKg m aRKw d aQKs d aQKk d aRKg m aYK} d aVK{ d aTKy +d aRKs d aRKk d aTKf d aVKd d aYKb m aNKT m ]VJw d ]VJR m ]XJw d ]XJT +m ]YJ{ d ]YJR m ]YJ{ d ]TJu d ]QJs m ]PJR d ]`JR m ]VJT d ]SJR m ]VJV +d ]TJR m ]YJV d ][JR m ]YJT d ]\JR m ]KJE m ]{J{ d ]vJy d ]sJs d ]qJj +d ]qJd d ]sJZ d ]vJT d ]{JR d ]~JR d ^CJT d ^FJZ d ^GJd d ^GJj d ^FJs +d ^CJy d ]~J{ d ]{J{ m ]vJw d ]tJs d ]sJl d ]sJb d ]tJZ d ]vJV m ^CJV +d ^DJZ d ^FJb d ^FJl d ^DJs d ^CJw m ]{J{ d ]xJy d ]vJu d ]tJl d ]tJb +d ]vJX d ]xJT d ]{JR m ]~JR d ^AJT d ^CJX d ^DJb d ^DJl d ^CJu d ^AJy +d ]~J{ m ]pJE m ^_J{ d ^[Jy d ^WJs d ^VJj d ^VJd d ^WJZ d ^[JT d ^_JR +d ^cJR d ^gJT d ^kJZ d ^lJd d ^lJj d ^kJs d ^gJy d ^cJ{ d ^_J{ m ^[Jw +d ^YJs d ^WJl d ^WJb d ^YJZ d ^[JV m ^gJV d ^iJZ d ^kJb d ^kJl d ^iJs +d ^gJw m ^_J{ d ^\Jy d ^[Ju d ^YJl d ^YJb d ^[JX d ^\JT d ^_JR m ^cJR +d ^fJT d ^gJX d ^iJb d ^iJl d ^gJu d ^fJy d ^cJ{ m ^TJE m ^yKI m ^yJE +m _XKI m _XJE m _wKI m _wJE m `VKI m `VJE m `tKI m `tJE m afJ{ d afJR +d amJR m agJy d agJT m aaJ{ d aiJ{ d aiJR m afJh d adJl d aaJn d a^Jn +d aYJl d aVJh d aUJb d aUJ^ d aVJX d aYJT d a^JR d aaJR d adJT d afJX +m aXJh d aVJd d aVJ\ d aXJX m a^Jn d a[Jl d aYJj d aXJd d aXJ\ d aYJV +d a[JT d a^JR m acJ{ d afJy m adJ{ d afJw m aiJV d ajJR m aiJT d alJR +m aSJE m ]VIh d ]VIC m ]XIh d ]XIE m ]YIl d ]YIC m ]YIl d ]TIf d ]QId +m ]PIC d ]`IC m ]VIE d ]SIC m ]VIG d ]TIC m ]YIG d ][IC m ]YIE d ]\IC +m ]KHu m ]{Il d ]vIj d ]sId d ]qIZ d ]qIT d ]sIK d ]vIE d ]{IC d ]~IC +d ^CIE d ^FIK d ^GIT d ^GIZ d ^FId d ^CIj d ]~Il d ]{Il m ]vIh d ]tId +d ]sI\ d ]sIS d ]tIK d ]vIG m ^CIG d ^DIK d ^FIS d ^FI\ d ^DId d ^CIh +m ]{Il d ]xIj d ]vIf d ]tI\ d ]tIS d ]vII d ]xIE d ]{IC m ]~IC d ^AIE +d ^CII d ^DIS d ^DI\ d ^CIf d ^AIj d ]~Il m ]pHu m ^_Ih d ^_IC m ^aIh +d ^aIE m ^cIl d ^cIC m ^cIl d ^^If d ^[Id m ^YIC d ^iIC m ^_IE d ^\IC +m ^_IG d ^^IC m ^cIG d ^dIC m ^cIE d ^fIC m ^THu m ^yIy m ^yHu m _XIy +m _XHu m _wIy m _wHu m `VIy m `VHu m `tIy m `tHu m aXIS d ajIS d ajIV +d aiIZ d agI\ d abI^ d a_I^ d aZI\ d aWIX d aUIS d aUIO d aWII d aZIE +d a_IC d abIC d agIE d ajII m aiIT d aiIV d agIZ m aXIX d aWIT d aWIM +d aXII m agIS d agIX d aeI\ d abI^ m a_I^ d a\I\ d aZIZ d aXIT d aXIM +d aZIG d a\IE d a_IC m aSHu m ]VHY d ]VGt m ]XHY d ]XGv m ]YH\ d ]YGt +m ]YH\ d ]THW d ]QHU m ]PGt d ]`Gt m ]VGv d ]SGt m ]VGx d ]TGt m ]YGx +d ][Gt m ]YGv d ]\Gt m ]KGf m ]{H\ d ]vH[ d ]sHU d ]qHK d ]qHE d ]sG{ +d ]vGv d ]{Gt d ]~Gt d ^CGv d ^FG{ d ^GHE d ^GHK d ^FHU d ^CH[ d ]~H\ +d ]{H\ m ]vHY d ]tHU d ]sHM d ]sHC d ]tG{ d ]vGx m ^CGx d ^DG{ d ^FHC +d ^FHM d ^DHU d ^CHY m ]{H\ d ]xH[ d ]vHW d ]tHM d ]tHC d ]vGy d ]xGv +d ]{Gt m ]~Gt d ^AGv d ^CGy d ^DHC d ^DHM d ^CHW d ^AH[ d ]~H\ m ]pGf +m ^WHU d ^WHS d ^YHS d ^YHU d ^WHU m ^WHW d ^YHW d ^[HU d ^[HS d ^YHQ +d ^WHQ d ^VHS d ^VHU d ^WHY d ^YH[ d ^^H\ d ^dH\ d ^iH[ d ^kHY d ^lHU +d ^lHQ d ^kHM d ^fHI d ^^HE d ^[HC d ^WG? d ^VGy d ^VGt m ^iHY d ^kHU +d ^kHQ d ^iHM m ^dH\ d ^gH[ d ^iHU d ^iHQ d ^gHM d ^dHI d ^^HE m ^VGx +d ^WGy d ^[Gy d ^cGx d ^iGx d ^lGy m ^[Gy d ^cGv d ^iGv d ^kGx m ^[Gy +d ^cGt d ^iGt d ^kGv d ^lGy d ^lG} m ^TGf m ^yHj m ^yGf m _XHj m _XGf +m _wHj m _wGf m `VHj m `VGf m `tHj m `tGf m ahHY d ahH[ d afH[ d afHW +d ajHW d ajH[ d ahH\ d abH\ d a^H[ d a\HY d aZHS d aZGt m a^HY d a\HS +d a\Gv m abH\ d a`H[ d a^HW d a^Gt m aSHO d afHO m aSGt d adGt m aZGv +d aUGt m aZGx d aXGt m a^Gx d a`Gt m a^Gv d abGt m aSGf m ]VGI d ]VFd +m ]XGI d ]XFf m ]YGM d ]YFd m ]YGM d ]TGG d ]QGE m ]PFd d ]`Fd m ]VFf +d ]SFd m ]VFh d ]TFd m ]YFh d ][Fd m ]YFf d ]\Fd m ]KFW m ]{GM d ]vGK +d ]sGE d ]qF| d ]qFv d ]sFl d ]vFf d ]{Fd d ]~Fd d ^CFf d ^FFl d ^GFv +d ^GF| d ^FGE d ^CGK d ]~GM d ]{GM m ]vGI d ]tGE d ]sF~ d ]sFt d ]tFl +d ]vFh m ^CFh d ^DFl d ^FFt d ^FF~ d ^DGE d ^CGI m ]{GM d ]xGK d ]vGG +d ]tF~ d ]tFt d ]vFj d ]xFf d ]{Fd m ]~Fd d ^AFf d ^CFj d ^DFt d ^DF~ +d ^CGG d ^AGK d ]~GM m ]pFW m ^WGE d ^WGC d ^YGC d ^YGE d ^WGE m ^WGG +d ^YGG d ^[GE d ^[GC d ^YGA d ^WGA d ^VGC d ^VGE d ^WGI d ^YGK d ^^GM +d ^dGM d ^iGK d ^kGG d ^kGA d ^iF~ d ^dF| m ^gGK d ^iGG +stroke +m ^iGG d ^iGA d ^gF~ m ^cGM d ^fGK d ^gGG d ^gGA d ^fF~ d ^cF| m ^_F| +d ^dF| d ^gFz d ^kFv d ^lFr d ^lFl d ^kFh d ^iFf d ^dFd d ^^Fd d ^YFf +d ^WFh d ^VFl d ^VFn d ^WFp d ^YFp d ^[Fn d ^[Fl d ^YFj d ^WFj m ^iFv +d ^kFr d ^kFl d ^iFh m ^cF| d ^fFz d ^gFx d ^iFr d ^iFl d ^gFf d ^dFd +m ^WFn d ^WFl d ^YFl d ^YFn d ^WFn m ^TFW m ^yG[ m ^yFW m _XG[ m _XFW +m _wG[ m _wFW m `VG[ m `VFW m `tG[ m `tFW m aiF~ d ajF| d alF~ d ajG@ +d aiG@ d aeF~ d adF| m a]G@ d aZF~ d aXF| d aWFx d aWFt d aXFp d aZFn +d a]Fl d aaFl d adFn d aeFp d agFt d agFx d aeF| d adF~ d aaG@ d a]G@ +m aZF| d aXFx d aXFt d aZFp m adFp d aeFt d aeFx d adF| m a]G@ d a\F~ +d aZFz d aZFr d a\Fn d a]Fl m aaFl d abFn d adFr d adFz d abF~ d aaG@ +m aXFp d aWFn d aUFj d aUFh d aWFd d aXFb d a]F` d adF` d aiF_ d ajF] +m aXFd d a]Fb d adFb d aiF` m aUFh d aWFf d a\Fd d adFd d aiFb d ajF_ +d ajF] d aiFY d adFW d aZFW d aUFY d aSF] d aSF_ d aUFb d aZFd m aZFW +d aWFY d aUF] d aUF_ d aWFb d aZFd m aSFW m iqcj d iqcE m iscj d iscG +m itcn d itcE m itcn d ipch d ilcf m ikcE d i{cE m iqcG d incE m iqcI +d ipcE m itcI d ivcE m itcG d iwcE m ifbw m jVcn d jQcl d jNcf d jLc\ +d jLcV d jNcM d jQcG d jVcE d jYcE d j^cG d jacM d jbcV d jbc\ d jacf +d j^cl d jYcn d jVcn m jQcj d jOcf d jNc^ d jNcU d jOcM d jQcI m j^cI +d j_cM d jacU d jac^ d j_cf d j^cj m jVcn d jScl d jQch d jOc^ d jOcU +d jQcK d jScG d jVcE m jYcE d j\cG d j^cK d j_cU d j_c^ d j^ch d j\cl +d jYcn m jKbw m j~ch d j~cE m j?cj d j?cG m kAcn d kAcE m kAcn d jocQ +d kIcQ m jycE d kFcE m j~cG d jzcE m j~cI d j|cE m kAcI d kBcE m kAcG +d kDcE m jobw m kTc{ m kTbw m ksc{ m ksbw m lRc{ m lRbw m lqc{ m lqbw +m mPc{ m mPbw m mscn d mscE m mtcl d mtcG m mncn d mucn d mucE m mucX +d mwc\ d mxc^ d m{c` d m?c` d nBc^ d nDc\ d nEcV d nEcE m nBc\ d nDcV +d nDcG m m?c` d nAc^ d nBcX d nBcE m mncE d mzcE m m~cE d nIcE m mpcn +d mscl m mqcn d mscj m mscG d mpcE m mscI d mqcE m mucI d mwcE m mucG +d mxcE m nBcG d m?cE m nBcI d nAcE m nEcI d nFcE m nEcG d nHcE m mnbw +m iqb[ d iqav m isb[ d isax m itb^ d itav m itb^ d ipbY d ilbW m ikav +d i{av m iqax d inav m iqaz d ipav m itaz d ivav m itax d iwav m ifah +m jVb^ d jQb] d jNbW d jLbM d jLbG d jNa} d jQax d jVav d jYav d j^ax +d jaa} d jbbG d jbbM d jabW d j^b] d jYb^ d jVb^ m jQb[ d jObW d jNbO +d jNbE d jOa} d jQaz m j^az d j_a} d jabE d jabO d j_bW d j^b[ m jVb^ +d jSb] d jQbY d jObO d jObE d jQa{ d jSax d jVav m jYav d j\ax d j^a{ +d j_bE d j_bO d j^bY d j\b] d jYb^ m jKah m jtb^ d jqbK d jtbO d jybQ +d j~bQ d kBbO d kFbK d kGbE d kGbA d kFa{ d kBax d j~av d jyav d jtax +d jraz d jqa} d jqa? d jrbA d jtbA d jva? d jva} d jta{ d jra{ m kDbK +d kFbG d kFa? d kDa{ m j~bQ d kAbO d kBbM d kDbG d kDa? d kBaz d kAax +d j~av m jra? d jra} d jta} d jta? d jra? m jtb^ d kDb^ m jtb] d kAb] +m jtb[ d jzb[ d kAb] d kDb^ m joah m kTbl m kTah m ksbl m ksah m lRbl +m lRah m lqbl m lqah m mPbl m mPah m mub^ d mub[ d mzb[ d mzb^ d mub^ +m mxb^ d mxb[ m mub] d mzb] m mubQ d muav m mxbO d mxax m mnbQ d mzbQ +d mzav m mnav d nAav m mqbQ d mubO m msbQ d mubM m muax d mqav m muaz +d msav m mzaz d m|av m mzax d m?av m mnah m iqaK d iq`f m isaK d is`h +m itaO d it`f m itaO d ipaI d ilaG m ik`f d i{`f m iq`h d in`f m iq`j +d ip`f m it`j d iv`f m it`h d iw`f m if`Y m jVaO d jQaM d jNaG d jL`~ +d jL`x d jN`n d jQ`h d jV`f d jY`f d j^`h d ja`n d jb`x d jb`~ d jaaG +d j^aM d jYaO d jVaO m jQaK d jOaG d jNa@ d jN`v d jO`n d jQ`j m j^`j +d j_`n d ja`v d jaa@ d j_aG d j^aK m jVaO d jSaM d jQaI d jOa@ d jO`v +d jQ`l d jS`h d jV`f m jY`f d j\`h d j^`l d j_`v d j_a@ d j^aI d j\aM +d jYaO m jK`Y m kBaI d kBaG d kDaG d kDaI d kBaI m kDaK d kBaK d kAaI +d kAaG d kBaE d kDaE d kFaG d kFaI d kDaM d kAaO d j|aO d jwaM d jtaI +d jraE d jq`~ d jq`r d jr`l d jv`h d jz`f d j~`f d kB`h d kF`l d kG`r +d kG`t d kF`z d kB`~ d j~a@ d jza@ d jw`~ d jv`| d jt`x m jvaI d jtaE +d jr`~ d jr`r d jt`l d jv`j m kD`l d kF`p d kF`v d kD`z m j|aO d jyaM +d jwaK d jvaG d jta@ d jt`r d jv`l d jw`h d jz`f m j~`f d kA`h d kB`j +d kD`p d kD`v d kB`| d kA`~ d j~a@ m jo`Y m kTa] m kT`Y m ksa] m ks`Y +m lRa] m lR`Y m lqa] m lq`Y m mPa] m mP`Y m myaO d myaK d m~aK d m~aO +d myaO m m|aO d m|aK m myaM d m~aM m myaB d my`a d mw`[ d mu`Y m m|a@ +d m|`b d my`] m msaB d m~aB d m~`b d m|`] d my`[ d mu`Y d mn`Y d mn`[ +d mn`_ d mq`_ d mq`[ d mn`[ d mn`] m muaB d mya@ m mwaB d my`~ m mn`Y +m iq_| d iq_W m is_| d is_Y m it`@ d it_W m it`@ d ip_z d il_x m ik_W +d i{_W m iq_Y d in_W m iq_[ d ip_W m it_[ d iv_W m it_Y d iw_W m if_I +m jV`@ d jQ_~ d jN_x d jL_n d jL_i d jN__ d jQ_Y d jV_W d jY_W d j^_Y +d ja__ d jb_i d jb_n d ja_x d j^_~ d jY`@ d jV`@ m jQ_| d jO_x d jN_p +d jN_g d jO__ d jQ_[ m j^_[ d j___ d ja_g d ja_p d j__x d j^_| m jV`@ +d jS_~ d jQ_z d jO_p d jO_g d jQ_] d jS_Y d jV_W m jY_W d j\_Y d j^_] +d j__g d j__p d j^_z d j\_~ d jY`@ m jK_I m jq`@ d jq_t m kG`@ d kG_z +d kF_t d j?_j d j~_g d j|__ d j|_W m j~_i d j|_e d jz__ d jz_W m kF_t +d j~_j d jz_e d jy__ d jy_W d j|_W m jq_x d jr_| d jv`@ d jy`@ d kA_z +d kD_z d kF_| d kG`@ m jt_| d jv_~ d jy_~ d j|_| m jq_x d jr_z +stroke +m jr_z d jv_| d jy_| d kA_z m jo_I m kT`M m kT_I m ks`M m ks_I m lR`M +m lR_I m lq`M m lq_I m mP`M m mP_I m ms`@ d ms_W m mt_~ d mt_Y m mn`@ +d mv`@ d mv_W m nC_p d mv__ m m|_g d nF_W m m|_e d nD_W m mz_e d nC_W +m m~_r d nI_r m mn_W d mz_W m m~_W d nI_W m mp`@ d ms_~ m mq`@ d ms_| +m n@_r d nC_p m nG_r d nC_p m ms_Y d mp_W m ms_[ d mq_W m mv_[ d mw_W +m mv_Y d my_W m nC_[ d n@_W m nA_[ d nG_W m mn_I m iq^m d iq^H m is^m +d is^J m it^p d it^H m it^p d ip^k d il^i m ik^H d i{^H m iq^J d in^H +m iq^K d ip^H m it^K d iv^H m it^J d iw^H m if]z m jV^p d jQ^o d jN^i +d jL^_ d jL^Y d jN^O d jQ^J d jV^H d jY^H d j^^J d ja^O d jb^Y d jb^_ +d ja^i d j^^o d jY^p d jV^p m jQ^m d jO^i d jN^a d jN^W d jO^O d jQ^K +m j^^K d j_^O d ja^W d ja^a d j_^i d j^^m m jV^p d jS^o d jQ^k d jO^a +d jO^W d jQ^M d jS^J d jV^H m jY^H d j\^J d j^^M d j_^W d j_^a d j^^k +d j\^o d jY^p m jK]z m jy^p d jt^o d jr^k d jr^e d jt^a d jy^_ d j?^_ +d kD^a d kF^e d kF^k d kD^o d j?^p d jy^p m jv^o d jt^k d jt^e d jv^a +m kB^a d kD^e d kD^k d kB^o m jy^p d jw^o d jv^k d jv^e d jw^a d jy^_ +m j?^_ d kA^a d kB^e d kB^k d kA^o d j?^p m jy^_ d jt^] d jr^[ d jq^W +d jq^O d jr^K d jt^J d jy^H d j?^H d kD^J d kF^K d kG^O d kG^W d kF^[ +d kD^] d j?^_ m jt^[ d jr^W d jr^O d jt^K m kD^K d kF^O d kF^W d kD^[ +m jy^_ d jv^] d jt^W d jt^O d jv^J d jy^H m j?^H d kB^J d kD^O d kD^W +d kB^] d j?^_ m jo]z m kT^~ m kT]z m ks^~ m ks]z m lR^~ m lR]z m lq^~ +m lq]z m mP^~ m mP]z m mu^p d mu^H m mx^o d mx^J m mn^p d mz^p d mz^H +m mn^H d nA^H m mq^p d mu^o m ms^p d mu^m m mu^J d mq^H m mu^K d ms^H +m mz^K d m|^H m mz^J d m?^H m mn]z m iq]] d iq\x m is]] d is\z m it]a +d it\x m it]a d ip][ d il]Y m ik\x d i{\x m iq\z d in\x m iq\| d ip\x +m it\| d iv\x m it\z d iw\x m if\k m jV]a d jQ]_ d jN]Y d jL]P d jL]J +d jN]@ d jQ\z d jV\x d jY\x d j^\z d ja]@ d jb]J d jb]P d ja]Y d j^]_ +d jY]a d jV]a m jQ]] d jO]Y d jN]R d jN]H d jO]@ d jQ\| m j^\| d j_]@ +d ja]H d ja]R d j_]Y d j^]] m jV]a d jS]_ d jQ][ d jO]R d jO]H d jQ\~ +d jS\z d jV\x m jY\x d j\\z d j^\~ d j_]H d j_]R d j^][ d j\]_ d jY]a +m jK\k m jt]@ d jt\~ d jv\~ d jv]@ d jt]@ m kD]P d kB]L d kA]J d j~]H +d jz]H d jv]J d jr]N d jq]S d jq]U d jr][ d jv]_ d jz]a d j~]a d kB]_ +d kF][ d kG]U d kG]J d kF]B d kD\~ d kA\z d j|\x d jw\x d jt\z d jr\~ +d jr]@ d jt]B d jv]B d jw]@ d jw\~ d jv\| d jt\| m jt]N d jr]R d jr]W +d jt][ m kB]] d kD][ d kF]U d kF]J d kD]B d kB\~ m jz]H d jw]J d jv]L +d jt]R d jt]W d jv]] d jw]_ d jz]a m j~]a d kA]_ d kB][ d kD]U d kD]H +d kB]@ d kA\| d j?\z d j|\x m jo\k m kT]o m kT\k m ks]o m ks\k m lR]o +m lR\k m lq]o m lq\k m mP]o m mP\k m mr]S d mr\x m ms]R d ms\z m mn]S +d mt]S d mt\x m mt]L d mv]P d mw]R d mz]S d m}]S d n@]R d nA]P d nB]J +d nB\x m n@]P d nA]J d nA\z m m}]S d m~]R d n@]L d n@\x m nB]L d nC]P +d nE]R d nG]S d nK]S d nM]R d nO]P d nP]J d nP\x m nM]P d nO]J d nO\z +m nK]S d nL]R d nM]L d nM\x m mn\x d mx\x m m|\x d nF\x m nJ\x d nT\x +m mp]S d mr]R m mq]S d mr]P m mr\z d mp\x m mr\| d mq\x m mt\| d mv\x +m mt\z d mw\x m n@\z d m}\x m n@\| d m~\x m nB\| d nC\x m nB\z d nE\x +m nM\z d nK\x m nM\| d nL\x m nP\| d nQ\x m nP\z d nR\x m mn\k m iq\N +d iq[i m is\N d is[k m it\R d it[i m it\R d ip\L d il\J m ik[i d i{[i +m iq[k d in[i m iq[m d ip[i m it[m d iv[i m it[k d iw[i m if[[ m jV\N +d jV[i m jW\N d jW[k m jY\R d jY[i m jY\R d jT\L d jQ\J m jO[i d j_[i +m jV[k d jS[i m jV[m d jT[i m jY[m d j[[i m jY[k d j\[i m jK[[ m jz\R +d jv\P d jr\J d jq\@ d jq[{ d jr[q d jv[k d jz[i d j~[i d kB[k d kF[q +d kG[{ d kG\@ d kF\J d kB\P d j~\R d jz\R m jv\N d jt\J d jr\B d jr[y +d jt[q d jv[m m kB[m d kD[q d kF[y d kF\B d kD\J d kB\N m jz\R d jw\P +d jv\L d jt\B d jt[y d jv[o d jw[k d jz[i m j~[i d kA[k d kB[o d kD[y +d kD\B d kB\L d kA\P d j~\R m jo[[ m kT\_ m kT[[ m ks\_ m ks[[ m lR\_ +m lR[[ m lq\_ m lq[[ m mP\_ m mP[[ m ms\D d ms[i m mt\B d mt[k m mn\D +d mu\D d mu[i m mu[| d mw\@ d mx\B d m{\D d m?\D d nB\B d nD\@ d nE[{ +d nE[i m nB\@ d nD[{ d nD[k m m?\D d nA\B d nB[| d nB[i m mn[i d mz[i +m m~[i d nI[i m mp\D d ms\B m mq\D d ms\@ m ms[k d mp[i m ms[m d mq[i +m mu[m d mw[i m mu[k d mx[i m nB[k d m?[i m nB[m d nA[i m nE[m d nF[i +m nE[k d nH[i m mn[[ m iqZ? d iqZZ m isZ? d isZ\ m it[C d itZZ m it[C +d ipZ} d ilZ{ m ikZZ d i{ZZ m iqZ\ d inZZ m iqZ^ d ipZZ m itZ^ d ivZZ +m itZ\ d iwZZ m ifZL m jVZ? d jVZZ m jWZ? d jWZ\ m jY[C d jYZZ m jY[C +d jTZ} d jQZ{ m jOZZ d j_ZZ m jVZ\ d jSZZ m jVZ^ d jTZZ m jYZ^ d j[ZZ +m jYZ\ d j\ZZ m jKZL m jzZ? d jzZZ m j|Z? d j|Z\ m j~[C d j~ZZ m j~[C +d jyZ} d jvZ{ m jtZZ d kDZZ m jzZ\ d jwZZ m jzZ^ d jyZZ m j~Z^ d j?ZZ +m j~Z\ d kAZZ m joZL m kT[P m kTZL m ks[P m ksZL m lR[P m lRZL m lq[P +m lqZL m mP[P m mPZL m myZu d muZs d mqZo d mpZi d mpZe d mqZ` d muZ\ +d myZZ d m}ZZ d nAZ\ d nEZ` d nFZe d nFZi d nEZo d nAZs d m}Zu d myZu +m msZo d mqZk d mqZc d msZ` m nCZ` d nEZc d nEZk d nCZo m myZu d mvZs +d muZq d msZk d msZc d muZ^ d mvZ\ d myZZ m m}ZZ d n@Z\ d nAZ^ d nCZc +d nCZk d nAZq d n@Zs d m}Zu m mnZL m iqYo d iqYJ m isYo d isYL m itYs +d itYJ m itYs d ipYm d ilYk m ikYJ d i{YJ m iqYL d inYJ m iqYN d ipYJ +m itYN d ivYJ m itYL d iwYJ m ifX} m jVYo d jVYJ m jWYo d jWYL m jYYs +d jYYJ m jYYs d jTYm d jQYk m jOYJ d j_YJ m jVYL d jSYJ m jVYN d jTYJ +m jYYN d j[YJ m jYYL d j\YJ m jKX} m jrYk d jrYi d jtYi d jtYk d jrYk +m jrYm d jtYm d jvYk d jvYi d jtYg d jrYg d jqYi d jqYk d jrYo d jtYq +d jyYs d j?Ys d kDYq d kFYo d kGYk d kGYg d kFYd d kAY` d jyY\ d jvYZ +d jrYV d jqYP d jqYJ m kDYo d kFYk d kFYg d kDYd m j?Ys d kBYq d kDYk +d kDYg d kBYd d j?Y` d jyY\ m jqYN d jrYP d jvYP d j~YN d kDYN d kGYP +stroke +m kGYP m jvYP d j~YL d kDYL d kFYN m jvYP d j~YJ d kDYJ d kFYL d kGYP +d kGYT m joX} m kTZA m kTX} m ksZA m ksX} m lRZA m lRX} m lqZA m lqX} +m mPZA m mPX} m msYe d msX} m mtYd d mtX? m mnYe d mvYe d mvX} m mvY` +d mwYd d m{Ye d m~Ye d nBYd d nEY` d nGYZ d nGYV d nEYP d nBYL d m~YJ +d m{YJ d mwYL d mvYP m nDY` d nEY\ d nEYT d nDYP m m~Ye d nAYd d nBYb +d nDY\ d nDYT d nBYN d nAYL d m~YJ m mnX} d m{X} m mpYe d msYd m mqYe +d msYb m msX? d mpX} m msYA d mqX} m mvYA d mwX} m mvX? d myX} m mnX} +m iqX` d iqW{ m isX` d isW} m itXd d itW{ m itXd d ipX^ d ilX\ m ikW{ +d i{W{ m iqW} d inW{ m iqW? d ipW{ m itW? d ivW{ m itW} d iwW{ m ifWm +m jVX` d jVW{ m jWX` d jWW} m jYXd d jYW{ m jYXd d jTX^ d jQX\ m jOW{ +d j_W{ m jVW} d jSW{ m jVW? d jTW{ m jYW? d j[W{ m jYW} d j\W{ m jKWm +m jrX\ d jrXZ d jtXZ d jtX\ d jrX\ m jrX^ d jtX^ d jvX\ d jvXZ d jtXX +d jrXX d jqXZ d jqX\ d jrX` d jtXb d jyXd d j?Xd d kDXb d kFX^ d kFXX +d kDXT d j?XR m kBXb d kDX^ d kDXX d kBXT m j~Xd d kAXb d kBX^ d kBXX +d kAXT d j~XR m jzXR d j?XR d kBXP d kFXM d kGXI d kGXC d kFW? d kDW} +d j?W{ d jyW{ d jtW} d jrW? d jqXC d jqXE d jrXG d jtXG d jvXE d jvXC +d jtXA d jrXA m kDXM d kFXI d kFXC d kDW? m j~XR d kAXP d kBXN d kDXI +d kDXC d kBW} d j?W{ m jrXE d jrXC d jtXC d jtXE d jrXE m joWm m kTXq +m kTWm m ksXq m ksWm m lRXq m lRWm m lqXq m lqWm m mPXq m mPWm m nAXT +d nAWm m nCXR d nCWo m n@XT d nCXT d nEXV d nEWm m nAXP d n@XT d m}XV +d myXV d muXT d mqXP d mpXK d mpXG d mqXA d muW} d myW{ d m}W{ d n@W} +d nAXA m msXP d mqXM d mqXE d msXA m myXV d mvXT d muXR d msXM d msXE +d muW? d mvW} d myW{ m m}Wm d nIWm m nAWo d m~Wm m nAWq d n@Wm m nEWq +d nFWm m nEWo d nHWm m mnWm m iqWQ d iqVl m isWQ d isVn m itWT d itVl +m itWT d ipWO d ilWM m ikVl d i{Vl m iqVn d inVl m iqVp d ipVl m itVp +d ivVl m itVn d iwVl m ifV^ m jVWQ d jVVl m jWWQ d jWVn m jYWT d jYVl +m jYWT d jTWO d jQWM m jOVl d j_Vl m jVVn d jSVl m jVVp d jTVl m jYVp +d j[Vl m jYVn d j\Vl m jKV^ m j~WO d j~Vl m j?WQ d j?Vn m kAWT d kAVl +m kAWT d joVw d kIVw m jyVl d kFVl m j~Vn d jzVl m j~Vp d j|Vl m kAVp +d kBVl m kAVn d kDVl m joV^ m kTWb m kTV^ m ksWb m ksV^ m lRWb m lRV^ +m lqWb m lqV^ m mPWb m mPV^ m mtWG d mtVl m mvWE d mvVn m mnWG d mwWG +d mwVl m nDWC d nDWE d nBWE d nBWA d nFWA d nFWE d nDWG d n@WG d m}WE +d myWA d mwV{ m mnVl d m}Vl m mpWG d mtWE m mrWG d mtWC m mtVn d mpVl +m mtVp d mrVl m mwVp d myVl m mwVn d m{Vl m mnV^ m iqVA d iqU\ m isVA +d isU^ m itVE d itU\ m itVE d ipU? d ilU} m ikU\ d i{U\ m iqU^ d inU\ +m iqU` d ipU\ m itU` d ivU\ m itU^ d iwU\ m ifUO m jVVA d jVU\ m jWVA +d jWU^ m jYVE d jYU\ m jYVE d jTU? d jQU} m jOU\ d j_U\ m jVU^ d jSU\ +m jVU` d jTU\ m jYU` d j[U\ m jYU^ d j\U\ m jKUO m jtVE d jqUr d jtUv +d jyUx d j~Ux d kBUv d kFUr d kGUl d kGUh d kFUb d kBU^ d j~U\ d jyU\ +d jtU^ d jrU` d jqUd d jqUf d jrUh d jtUh d jvUf d jvUd d jtUb d jrUb +m kDUr d kFUn d kFUf d kDUb m j~Ux d kAUv d kBUt d kDUn d kDUf d kBU` +d kAU^ d j~U\ m jrUf d jrUd d jtUd d jtUf d jrUf m jtVE d kDVE m jtVC +d kAVC m jtVA d jzVA d kAVC d kDVE m joUO m kTVS m kTUO m ksVS m ksUO +m lRVS m lRUO m lqVS m lqUO m mPVS m mPUO m nBUt d nDUx d nDUp d nBUt +d n@Uv d m}Ux d mvUx d mrUv d mpUt d mpUp d mrUl d mvUj d m?Uh d nBUf +d nDU` m mrUv d mpUp m mrUn d mvUl d m?Uj d nBUh m nDUf d nBU^ m mpUt +d mrUp d mvUn d m?Ul d nBUj d nDUf d nDU` d nBU^ d m?U\ d mwU\ d mtU^ +d mrU` d mpUd d mpU\ d mrU` m mnUO m iqTr d iqTM m isTr d isTO m itTv +d itTM m itTv d ipTp d ilTn m ikTM d i{TM m iqTO d inTM m iqTQ d ipTM +m itTQ d ivTM m itTO d iwTM m ifS? m jVTr d jVTM m jWTr d jWTO m jYTv +d jYTM m jYTv d jTTp d jQTn m jOTM d j_TM m jVTO d jSTM m jVTQ d jTTM +m jYTQ d j[TM m jYTO d j\TM m jKS? m kBTp d kBTn d kDTn d kDTp d kBTp +m kDTr d kBTr d kATp d kATn d kBTl d kDTl d kFTn d kFTp d kDTt d kATv +d j|Tv d jwTt d jtTp d jrTl d jqTd d jqTY d jrTS d jvTO d jzTM d j~TM +d kBTO d kFTS d kGTY d kGT[ d kFT` d kBTd d j~Tf d jzTf d jwTd d jvTb +d jtT^ m jvTp d jtTl d jrTd d jrTY d jtTS d jvTQ m kDTS d kFTW d kFT] +d kDT` m j|Tv d jyTt d jwTr d jvTn d jtTf d jtTY d jvTS d jwTO d jzTM +m j~TM d kATO d kBTQ d kDTW d kDT] d kBTb d kATd d j~Tf m joS? m kTUC +m kTS? m ksUC m ksS? m lRUC m lRS? m lqUC m lqS? m mPUC m mPS? m mtTr +d mtTW d mvTQ d mxTO d m|TM d n@TM d nDTO d nFTS m mvTr d mvTU d mxTQ +m mtTr d mxTv d mxTU d mzTO d m|TM m mnTh d n@Th m mnS? m iqSc d iqR~ +m isSc d isS@ m itSf d itR~ m itSf d ipSa d ilS_ m ikR~ d i{R~ m iqS@ +d inR~ m iqSB d ipR~ m itSB d ivR~ m itS@ d iwR~ m ifRp m jVSc d jVR~ +m jWSc d jWS@ m jYSf d jYR~ m jYSf d jTSa d jQS_ m jOR~ d j_R~ m jVS@ +d jSR~ m jVSB d jTR~ m jYSB d j[R~ m jYS@ d j\R~ m jKRp m jqSf d jqS[ +m kGSf d kGSa d kFS[ d j?SQ d j~SM d j|SE d j|R~ m j~SO d j|SK d jzSE +d jzR~ m kFS[ d j~SQ d jzSK d jySE d jyR~ d j|R~ m jqS_ d jrSc d jvSf +d jySf d kASa d kDSa d kFSc d kGSf m jtSc d jvSe d jySe d j|Sc m jqS_ +d jrSa d jvSc d jySc d kASa m joRp m kTSt m kTRp m ksSt m ksRp m lRSt +m lRRp m lqSt m lqRp m mPSt m mPRp m msSY d msSG d mtSB d muS@ d mxR~ +d m}R~ d m?S@ d nASB d nBSE m mtSW d mtSE d muSB m mnSY d muSY d muSE +d mwS@ d mxR~ m nBSY d nBR~ d nIR~ m nDSW d nDS@ m m~SY d nESY d nER~ +m mpSY d msSW m mqSY d msSU m nESB d nFR~ m nES@ d nHR~ m mnRp m iqRS +d iqQn m isRS d isQp m itRW d itQn m itRW d ipRQ d ilRO m ikQn d i{Qn +m iqQp d inQn m iqQr d ipQn m itQr d ivQn m itQp d iwQn m ifQa m jVRS +d jVQn m jWRS d jWQp m jYRW d jYQn m jYRW d jTRQ d jQRO m jOQn d j_Qn +m jVQp d jSQn m jVQr d jTQn m jYQr d j[Qn m jYQp d j\Qn m jKQa m jyRW +d jtRU d jrRQ d jrRK d jtRH d jyRF d j?RF d kDRH d kFRK d kFRQ d kDRU +d j?RW d jyRW m jvRU d jtRQ d jtRK d jvRH m kBRH d kDRK d kDRQ d kBRU +m jyRW d jwRU d jvRQ d jvRK d jwRH d jyRF m j?RF d kARH d kBRK d kBRQ +d kARU d j?RW m jyRF d jtRD d jrRB +stroke +m jrRB d jqQ~ d jqQv d jrQr d jtQp d jyQn d j?Qn d kDQp d kFQr d kGQv +d kGQ~ d kFRB d kDRD d j?RF m jtRB d jrQ~ d jrQv d jtQr m kDQr d kFQv +d kFQ~ d kDRB m jyRF d jvRD d jtQ~ d jtQv d jvQp d jyQn m j?Qn d kBQp +d kDQv d kDQ~ d kBRD d j?RF m joQa m kTRe m kTQa m ksRe m ksQa m lRRe +m lRQa m lqRe m lqQa m mPRe m mPQa m mpRJ d mzQn m mrRJ d mzQr m mtRJ +d m|Qr m nERH d m|Qr d mzQn m mnRJ d myRJ m m~RJ d nHRJ m mnRJ d mtRF +m mwRJ d mtRH m nARJ d nERH m nFRJ d nERH m mnQa m iqQD d iqP_ m isQD +d isPa m itQH d itP_ m itQH d ipQB d ilQ@ m ikP_ d i{P_ m iqPa d inP_ +m iqPc d ipP_ m itPc d ivP_ m itPa d iwP_ m ifPQ m jVQD d jVP_ m jWQD +d jWPa m jYQH d jYP_ m jYQH d jTQB d jQQ@ m jOP_ d j_P_ m jVPa d jSP_ +m jVPc d jTP_ m jYPc d j[P_ m jYPa d j\P_ m jKPQ m jtPg d jtPe d jvPe +d jvPg d jtPg m kDPv d kBPr d kAPq d j~Po d jzPo d jvPq d jrPt d jqPz +d jqP| d jrQB d jvQF d jzQH d j~QH d kBQF d kFQB d kGP| d kGPq d kFPi +d kDPe d kAPa d j|P_ d jwP_ d jtPa d jrPe d jrPg d jtPi d jvPi d jwPg +d jwPe d jvPc d jtPc m jtPt d jrPx d jrP~ d jtQB m kBQD d kDQB d kFP| +d kFPq d kDPi d kBPe m jzPo d jwPq d jvPr d jtPx d jtP~ d jvQD d jwQF +d jzQH m j~QH d kAQF d kBQB d kDP| d kDPo d kBPg d kAPc d j?Pa d j|P_ +m joPQ m kTQU m kTPQ m ksQU m ksPQ m lRQU m lRPQ m lqQU m lqPQ m mPQU +m mPPQ m mqPz d mwP_ m mrPz d mwPe m mtPz d mxPe m m|Pz d mxPe d mwP_ +m m|Pz d nAP_ m m}Pz d nAPe m m|Pz d m?Pz d nCPe m nGPx d nCPe d nAP_ +m mnPz d mxPz m nCPz d nKPz m mnPz d mrPx m mwPz d mtPx m nDPz d nGPx +m nJPz d nGPx m mnPQ m iqOu d iqOP m isOu d isOR m itOy d itOP m itOy +d ipOs d ilOq m ikOP d i{OP m iqOR d inOP m iqOT d ipOP m itOT d ivOP +m itOR d iwOP m ifOB m jNOq d jNOo d jOOo d jOOq d jNOq m jNOs d jOOs +d jQOq d jQOo d jOOm d jNOm d jLOo d jLOq d jNOu d jOOw d jTOy d j[Oy +d j_Ow d jaOu d jbOq d jbOm d jaOi d j\Oe d jTOa d jQO_ d jNO[ d jLOV +d jLOP m j_Ou d jaOq d jaOm d j_Oi m j[Oy d j^Ow d j_Oq d j_Om d j^Oi +d j[Oe d jTOa m jLOT d jNOV d jQOV d jYOT d j_OT d jbOV m jQOV d jYOR +d j_OR d jaOT m jQOV d jYOP d j_OP d jaOR d jbOV d jbOY m jKOB m jzOy +d jvOw d jrOq d jqOg d jqOa d jrOW d jvOR d jzOP d j~OP d kBOR d kFOW +d kGOa d kGOg d kFOq d kBOw d j~Oy d jzOy m jvOu d jtOq d jrOi d jrO_ +d jtOW d jvOT m kBOT d kDOW d kFO_ d kFOi d kDOq d kBOu m jzOy d jwOw +d jvOs d jtOi d jtO_ d jvOV d jwOR d jzOP m j~OP d kAOR d kBOV d kDO_ +d kDOi d kBOs d kAOw d j~Oy m joOB m kTPF m kTOB m ksPF m ksOB m lRPF +m lROB m lqPF m lqOB m mPPF m mPOB m mqOk d nAOP m msOk d nCOP m muOk +d nEOP m nCOi d msOR m mnOk d myOk m m~Ok d nHOk m mnOP d mxOP m m}OP +d nHOP m mpOk d msOi m mxOk d muOi m n@Ok d nCOi m nFOk d nCOi m msOR +d mpOP m msOR d mvOP m nAOR d m~OP m nCOR d nFOP m mnOB m iqNe d iqN@ +m isNe d isNB m itNi d itN@ m itNi d ipNc d ilNa m ikN@ d i{N@ m iqNB +d inN@ m iqND d ipN@ m itND d ivN@ m itNB d iwN@ m ifMs m jNNa d jNN_ +d jON_ d jONa d jNNa m jNNc d jONc d jQNa d jQN_ d jON] d jNN] d jLN_ +d jLNa d jNNe d jONg d jTNi d j[Ni d j_Ng d jaNe d jbNa d jbN] d jaNZ +d j\NV d jTNR d jQNP d jNNL d jLNF d jLN@ m j_Ne d jaNa d jaN] d j_NZ +m j[Ni d j^Ng d j_Na d j_N] d j^NZ d j[NV d jTNR m jLND d jNNF d jQNF +d jYND d j_ND d jbNF m jQNF d jYNB d j_NB d jaND m jQNF d jYN@ d j_N@ +d jaNB d jbNF d jbNJ m jKMs m jzNe d jzN@ m j|Ne d j|NB m j~Ni d j~N@ +m j~Ni d jyNc d jvNa m jtN@ d kDN@ m jzNB d jwN@ m jzND d jyN@ m j~ND +d j?N@ m j~NB d kAN@ m joMs m kTNw m kTMs m ksNw m ksMs m lRNw m lRMs +m lqNw m lqMs m mPNw m mPMs m mrN[ d m|N@ m msN[ d m|ND m muN[ d m}ND +m nENZ d m}ND d mxMy d muMu d mrMs d mnMs d mnMu d mnMy d mpMy d mpMu +d mnMu d mnMw m mnN[ d mzN[ m m?N[ d nIN[ m mpN[ d muNX m mxN[ d muNZ +m nBN[ d nENZ m nGN[ d nENZ m mnMs m iqMV d iqLq m isMV d isLs m itMZ +d itLq m itMZ d ipMT d ilMR m ikLq d i{Lq m iqLs d inLq m iqLu d ipLq +m itLu d ivLq m itLs d iwLq m ifLc m jNMR d jNMP d jOMP d jOMR d jNMR +m jNMT d jOMT d jQMR d jQMP d jOMN d jNMN d jLMP d jLMR d jNMV d jOMX +d jTMZ d j[MZ d j_MX d jaMV d jbMR d jbMN d jaMJ d j\MF d jTMC d jQMA +d jNL} d jLLw d jLLq m j_MV d jaMR d jaMN d j_MJ m j[MZ d j^MX d j_MR +d j_MN d j^MJ d j[MF d jTMC m jLLu d jNLw d jQLw d jYLu d j_Lu d jbLw +m jQLw d jYLs d j_Ls d jaLu m jQLw d jYLq d j_Lq d jaLs d jbLw d jbL{ +m jKLc m jrMR d jrMP d jtMP d jtMR d jrMR m jrMT d jtMT d jvMR d jvMP +d jtMN d jrMN d jqMP d jqMR d jrMV d jtMX d jyMZ d j?MZ d kDMX d kFMV +d kGMR d kGMN d kFMJ d kAMF d jyMC d jvMA d jrL} d jqLw d jqLq m kDMV +d kFMR d kFMN d kDMJ m j?MZ d kBMX d kDMR d kDMN d kBMJ d j?MF d jyMC +m jqLu d jrLw d jvLw d j~Lu d kDLu d kGLw m jvLw d j~Ls d kDLs d kFLu +m jvLw d j~Lq d kDLq d kFLs d kGLw d kGL{ m joLc m kTMg m kTLc m ksMg +m ksLc m lRMg m lRLc m lqMg m lqLc m mPMg m mPLc m nAML d mpLq m nCML +d mrLq m nEML d mtLq m nEML d mpML d mpMD m mpLq d nELq d nELy m mrML +d mpMD m mtML d mpMF m muML d mpMH m myML d mpMJ m m|Lq d nELs m n@Lq +d nELu m nALq d nELw m nCLq d nELy m mnLc m iqLG d iqKb m isLG d isKd +m itLK d itKb m itLK d ipLE d ilLC m ikKb d i{Kb m iqKd d inKb m iqKf +d ipKb m itKf d ivKb m itKd d iwKb m ifKT m jNLC d jNLA d jOLA d jOLC +d jNLC m jNLE d jOLE d jQLC d jQLA d jOK? d jNK? d jLLA d jLLC d jNLG +d jOLI d jTLK d j[LK d j_LI d jaLG d jbLC d jbK? d jaK{ d j\Kw d jTKs +d jQKq d jNKm d jLKg d jLKb m j_LG d jaLC d jaK? d j_K{ m j[LK d j^LI +d j_LC d j_K? d j^K{ d j[Kw d jTKs m jLKf d jNKg d jQKg d jYKf d j_Kf +d jbKg m jQKg d jYKd d j_Kd d jaKf m jQKg d jYKb d j_Kb d jaKd +stroke +m jaKd d jbKg d jbKk m jKKT m jrLC d jrLA d jtLA d jtLC d jrLC m jrLE +d jtLE d jvLC d jvLA d jtK? d jrK? d jqLA d jqLC d jrLG d jtLI d jyLK +d j?LK d kDLI d kFLE d kFK? d kDK{ d j?Ky m kBLI d kDLE d kDK? d kBK{ +m j~LK d kALI d kBLE d kBK? d kAK{ d j~Ky m jzKy d j?Ky d kBKw d kFKs +d kGKo d kGKi d kFKf d kDKd d j?Kb d jyKb d jtKd d jrKf d jqKi d jqKk +d jrKm d jtKm d jvKk d jvKi d jtKg d jrKg m kDKs d kFKo d kFKi d kDKf +m j~Ky d kAKw d kBKu d kDKo d kDKi d kBKd d j?Kb m jrKk d jrKi d jtKi +d jtKk d jrKk m joKT m kTLX m kTKT m ksLX m ksKT m lRLX m lRKT m lqLX +m lqKT m mPLX m mPKT m m}LR d myLP d mwLN d muLK d muLG d mwLC d myLA +d m{K} d m{Ky d mwKu m myLP d mwLL d mwLI d myLE d m{LC d m}K? d m}K{ +d m{Kw d msKs d m{Ko d m}Kk d m}Kg d m{Kd d myKb d mwK^ d mwKZ d myKV +m mwKq d m{Km d m{Ki d myKf d mwKd d muK` d muK\ d mwKX d myKV d m}KT +m mnKT m iqJw d iqJR m isJw d isJT m itJ{ d itJR m itJ{ d ipJu d ilJs +m ikJR d i{JR m iqJT d inJR m iqJV d ipJR m itJV d ivJR m itJT d iwJR +m ifJE m jNJs d jNJq d jOJq d jOJs d jNJs m jNJu d jOJu d jQJs d jQJq +d jOJo d jNJo d jLJq d jLJs d jNJw d jOJy d jTJ{ d j[J{ d j_Jy d jaJw +d jbJs d jbJo d jaJl d j\Jh d jTJd d jQJb d jNJ^ d jLJX d jLJR m j_Jw +d jaJs d jaJo d j_Jl m j[J{ d j^Jy d j_Js d j_Jo d j^Jl d j[Jh d jTJd +m jLJV d jNJX d jQJX d jYJV d j_JV d jbJX m jQJX d jYJT d j_JT d jaJV +m jQJX d jYJR d j_JR d jaJT d jbJX d jbJ\ m jKJE m j~Ju d j~JR m j?Jw +d j?JT m kAJ{ d kAJR m kAJ{ d joJ^ d kIJ^ m jyJR d kFJR m j~JT d jzJR +m j~JV d j|JR m kAJV d kBJR m kAJT d kDJR m joJE m kTKI m kTJE m ksKI +m ksJE m lRKI m lRJE m lqKI m lqJE m mPKI m mPJE m mtKC d mtJE m mnJE +m iqIh d iqIC m isIh d isIE m itIl d itIC m itIl d ipIf d ilId m ikIC +d i{IC m iqIE d inIC m iqIG d ipIC m itIG d ivIC m itIE d iwIC m ifHu +m jNId d jNIb d jOIb d jOId d jNId m jNIf d jOIf d jQId d jQIb d jOI` +d jNI` d jLIb d jLId d jNIh d jOIj d jTIl d j[Il d j_Ij d jaIh d jbId +d jbI` d jaI\ d j\IX d jTIT d jQIS d jNIO d jLII d jLIC m j_Ih d jaId +d jaI` d j_I\ m j[Il d j^Ij d j_Id d j_I` d j^I\ d j[IX d jTIT m jLIG +d jNII d jQII d jYIG d j_IG d jbII m jQII d jYIE d j_IE d jaIG m jQII +d jYIC d j_IC d jaIE d jbII d jbIM m jKHu m jtIl d jqIX d jtI\ d jyI^ +d j~I^ d kBI\ d kFIX d kGIS d kGIO d kFII d kBIE d j~IC d jyIC d jtIE +d jrIG d jqIK d jqIM d jrIO d jtIO d jvIM d jvIK d jtII d jrII m kDIX +d kFIT d kFIM d kDII m j~I^ d kAI\ d kBIZ d kDIT d kDIM d kBIG d kAIE +d j~IC m jrIM d jrIK d jtIK d jtIM d jrIM m jtIl d kDIl m jtIj d kAIj +m jtIh d jzIh d kAIj d kDIl m joHu m kTIy m kTHu m ksIy m ksHu m lRIy +m lRHu m lqIy m lqHu m mPIy m mPHu m muIt d myIr d m{Ip d m}Il d m}Ih +d m{Id d myIb d mwI^ d mwIZ d m{IV m myIr d m{In d m{Ij d myIf d mwId +d muI` d muI\ d mwIX d m?IT d mwIQ d muIM d muII d mwIE d myIC d m{H? +d m{H{ d myHw m m{IS d mwIO d mwIK d myIG d m{IE d m}IA d m}H} d m{Hy +d myHw d muHu m mnHu m iqHY d iqGt m isHY d isGv m itH\ d itGt m itH\ +d ipHW d ilHU m ikGt d i{Gt m iqGv d inGt m iqGx d ipGt m itGx d ivGt +m itGv d iwGt m ifGf m jNHU d jNHS d jOHS d jOHU d jNHU m jNHW d jOHW +d jQHU d jQHS d jOHQ d jNHQ d jLHS d jLHU d jNHY d jOH[ d jTH\ d j[H\ +d j_H[ d jaHY d jbHU d jbHQ d jaHM d j\HI d jTHE d jQHC d jNG? d jLGy +d jLGt m j_HY d jaHU d jaHQ d j_HM m j[H\ d j^H[ d j_HU d j_HQ d j^HM +d j[HI d jTHE m jLGx d jNGy d jQGy d jYGx d j_Gx d jbGy m jQGy d jYGv +d j_Gv d jaGx m jQGy d jYGt d j_Gt d jaGv d jbGy d jbG} m jKGf m kBHW +d kBHU d kDHU d kDHW d kBHW m kDHY d kBHY d kAHW d kAHU d kBHS d kDHS +d kFHU d kFHW d kDH[ d kAH\ d j|H\ d jwH[ d jtHW d jrHS d jqHK d jqG? +d jrGy d jvGv d jzGt d j~Gt d kBGv d kFGy d kGG? d kGHA d kFHG d kBHK +d j~HM d jzHM d jwHK d jvHI d jtHE m jvHW d jtHS d jrHK d jrG? d jtGy +d jvGx m kDGy d kFG} d kFHC d kDHG m j|H\ d jyH[ d jwHY d jvHU d jtHM +d jtG? d jvGy d jwGv d jzGt m j~Gt d kAGv d kBGx d kDG} d kDHC d kBHI +d kAHK d j~HM m joGf m kTHj m kTGf m ksHj m ksGf m lRHj m lRGf m lqHj +m lqGf m mPHj m mPGf m mpG? d mpHC d mqHI d mtHK d mwHK d myHI d m?HC +d nAHA d nDHA d nGHC d nHHG m mpHC d mqHG d mtHI d mwHI d myHG d m?HA +d nAG? d nDG? d nGHA d nHHG d nHHK m mnGf m iqGI d iqFd m isGI d isFf +m itGM d itFd m itGM d ipGG d ilGE m ikFd d i{Fd m iqFf d inFd m iqFh +d ipFd m itFh d ivFd m itFf d iwFd m ifFW m jNGE d jNGC d jOGC d jOGE +d jNGE m jNGG d jOGG d jQGE d jQGC d jOGA d jNGA d jLGC d jLGE d jNGI +d jOGK d jTGM d j[GM d j_GK d jaGI d jbGE d jbGA d jaF~ d j\Fz d jTFv +d jQFt d jNFp d jLFj d jLFd m j_GI d jaGE d jaGA d j_F~ m j[GM d j^GK +d j_GE d j_GA d j^F~ d j[Fz d jTFv m jLFh d jNFj d jQFj d jYFh d j_Fh +d jbFj m jQFj d jYFf d j_Ff d jaFh m jQFj d jYFd d j_Fd d jaFf d jbFj +d jbFn m jKFW m jqGM d jqGA m kGGM d kGGG d kFGA d j?Fx d j~Ft d j|Fl +d j|Fd m j~Fv d j|Fr d jzFl d jzFd m kFGA d j~Fx d jzFr d jyFl d jyFd +d j|Fd m jqGE d jrGI d jvGM d jyGM d kAGG d kDGG d kFGI d kGGM +stroke +m kGGM m jtGI d jvGK d jyGK d j|GI m jqGE d jrGG d jvGI d jyGI d kAGG +m joFW m kTG[ m kTFW m ksG[ m ksFW +stroke +/Times-Roman findfont 24 scalefont setfont +initmatrix +-1 72 mul 300 div 1 72 mul 300 div scale +-2409 88 translate +1600 3150 moveto +[1 0 0 -1 0 0] concat +(NOAO/IRAF fitz@pisces Mon Jun 30 10:37:53 1997 +) show +showpage diff --git a/vendor/x11iraf/cdl/doc/vximtool.man b/vendor/x11iraf/cdl/doc/vximtool.man new file mode 100644 index 00000000..66f2afb7 --- /dev/null +++ b/vendor/x11iraf/cdl/doc/vximtool.man @@ -0,0 +1,276 @@ +.\" @(#)vximtool.1 1.1 18-Jun-97 MJF +.TH VXIMTOOL 1 "18 Jun 1997" "IRAF Project" +.SH NAME +vximtool \-- A virtual and/or proxy display server for IRAF IIS protocol clients +.SH SYNOPSIS +\fBvximtool\fP [ \fIoptions\fP ...] +.br +\fBvximtool\fP -proxy [ \fIoptions ...] server [ server\fP ... ] + +.SH "DESCRIPTION" +.LP +\fIVXIMTOOL\fR is a image display server process much like \fIXIMTOOL\fR, +except that all it normally does is respond to datastream requests +to read and write to internal frame buffers maintained as arrays in memory. +Multiple frame buffers and frame buffer configurations are supported. It +can be used to debug IIS protocol client programs by printing out the +protocol packets recieved, or can simply be used as a dummy server in cases +where no image display is really needed. By enabling the \fI-proxy\fR +flag the server can also be used to repeat the datastream requests to a +list of other servers, effectively splitting the image display to a number +of other servers. See below for details on using the program in this +manner. + +The \fI-verbose\fR flag will log all datastream requests to the stderr, +otherwise the task runs silently except for error messages. The process is +terminated with an EOF on the stdin, if the task is intended to be run +as a background job the \fI-background\fR flag should be enabled to shut +off the check of the stdin and avoid a "waiting for tty input" message that +would suspend the background job. Frame buffers are maintained as rasters +in memory, up to four frames may currently be defined. If it not necessary +to keep the displayed images in memory (i.e. the client will not need to +read back any subrasters such as when doing overlay graphics), the +\fI-noraster\fR flag can be used to disable the memory rasters. In this +case any image readback will return an array of zero values. + +The default frame buffer size is 512x512, with 2 frames defined initially. +The \fI-config\fR and \fI-nframes\fR flags can be used to change the +startup frame buffers used. The frame buffer configuration table is normally +taken to be /usr/local/lib/imtoolrc but can be overridden by using an +IMTOOLRC environment variable, a \fI$HOME/.imtoolrc\fR file, or +the \fI-imtoolrc\fR command-line flag respectively. The format of the +frame buffer configuration file is + + \fIconfigno nframes width height [extra fields]\fP + e.g. + 1 2 512 512 + 2 2 800 800 + 3 1 1024 1024 # comment + +and so on. At most 128 frame buffer sizes may be defined, each configuration +may define up to 4 frames, configuration numbers need not be sequential. + +.SH OPTIONS +.TP 5 +.B "-background" +The task will be run in the background so don't listen to STDIN for an +EOF to quit gracefully. +.TP 5 +.B "-config \fInum\fP" +Initial frame buffer configuration number. The default value is 1, indicating +a 512x512 frame buffer with 2 frames. See below for information on the frame +buffers. +.TP 5 +.B "-fifo \fIpipe\fP" +Specifies the name of the fifo pipe to be used, the \fIi\fP +and \fIo\fP suffixes will be added automatically. The default pipe names +will be /dev/imt1i (input pipe) and /dev/imt1o (output pipe). +.TP 5 +.B "-fifo_only" +If set, only fifo pipes will be used for communication with a client program, +sockets will be disabled. +.TP 5 +.B "-help" +Print a summary of command line options to the screen. +.TP 5 +.B "-interactive" +Allow cursor value strings to be typed into the STDIN in response to cursor +read requests from the client. +.TP 5 +.B "-imtoolrc \fIfile\fP" +Specifies the frame buffer configuration file to be used. See below for +information on frame buffers. +.TP 5 +.B "-inet_only" +If set, only inet sockets will be used for communication with a client program, +fifo pipes and unix sockets will be disabled. +.TP 5 +.B "-noraster" +If set no client data will be stored in memory, and image readback will +return an array of zeroes unless used as a proxy server. +.TP 5 +.B "-nframes \fInum\fP" +Specifies the number of frame buffers to configure at startup. By default +there will be 2 frames available, a maximum of 4 frames are allowed. +.TP 5 +.B "-port_only" +Same as \fI-inet_only\fP option. If set, only inet sockets will be used for +communication with a client program. +.TP 5 +.B "-port \fInum\fP" +Set the primary port to listen on for client connections. The default +is 5137 except when used as a proxy server in which case the default is +5136. +.TP 5 +.B "-proxy" +Run as a proxy server by repeating client requests to each of the +\fIserver\fR remote server arguments. See the section on proxy usage +below for details. +.TP 5 +.B "-verbose" +If set, print information about all IIS packets headers recieved to the +STDERR stream. +.TP 5 +.B "-unix \fIname\fP" +Specifies the unix domain socket name to use. A "%d" in the filename will +be replaced with the user id. +.TP 5 +.B "-unix_only" +If set, only unix domain sockets will be used for communication with a client +program, inet sockets and fifos will be disabled. + +.SH "CLIENT CONNECTIONS" + +\fIVXImtool\fR allows clients to connect in any of the following ways: +.TP 5 +.B "fifo pipes" +The traditional approach. The default global /dev/imt1[io] +pipes may be used, or a private set of fifos can be specified using the +\fI-fifo\fP command line argument. Values should be specified as the root +pathname to a pair of fifo pipes whose last character is 'i' or 'o', +these characters will be added automatically when opening the pipes. +For example, to use the default pipes the path would be specified as simply +"/dev/imt1". A value of "none" disables this connection. +.TP 5 +.B "tcp/ip sockets" +Clients connect via a tcp/ip socket. The default port is \fI5137\fP, or a +custom port may be specified using the \fI-port\fP command line switch. +This permits connecting to the server over a remote network connection +anywhere on the Internet. When used as a proxy server the default port +number is 5136 so as to avoid a conflict with an XImtool running on the +same machine, other connections are disabled unless otherwise overridden +by a command line option following the \fI-proxy\fR flag to reset the +connection. A port number of 0 (zero) disables this connection. +.TP 5 +.B "unix domain sockets" +Like a tcp/ip socket, but limited to a single host system. Usually faster +than a tcp/ip socket, and comparable to a fifo. By default each user gets +their own unix domain socket, so this option allows multiple users to run +ximtools on the same host without having to customize things. The default +value is "/tmp/.IMT%d", other sockets may be defined using the \fI-unix\fP +command line switch. Legal values should be specified as a filename to be +used for the socket, up to two "%d" fields are allowed and will be replaced +by the userid. An empty string value disables this connection. +.LP +By default \fIvximtool\fR listens simultaneously for client connections on all +three types of ports. Clients may connect simultaneously by different +means allowing up to three different displays to be loading at the same +time into different frames. + +.SH "COMMUNICATIONS PROTOCOL" + +Clients communicate with \fIvximtool\fR using a protocol developed originally +for IIS (International Imaging Systems) Frame Buffer hardware, the so-called +"IIS protocol"; other more modern protocols will likely be supported in the +future. The IIS protocol is basically a command packet stream with a header +describing the operation to be performed (select frame, load display, read +cursor, etc), and an optional data packet containing e.g. pixels. It is +beyond the scope of this document to describe fully the details of the +protocol; interested users should contact \fIiraf@noao.edu\fP for further +information or see the \fIA Reference Guide for the IRAF Client Display +Library\fR for details. + +.SH "PROXY USAGE" + +The \fIvximtool\fR may also be used as a proxy server by enabling the +\fI-proxy\fR command line flag. In this mode the program acts as +a relay for the IIS datastream packets, sending image data, frame requests, +etc. to a list of other servers specified on the command line. The effect +of this is to allow a client to display to this program which then +re-displays to each of the other named servers. A maximum of 8 servers +may be named, they may be either on the local host or a remote machine +and connections can be established using either fifos or sockets. See +below for details on how to specify the server connection. + +The current implementation has a few restrictions users should keep in mind: +.IP +Cursor and image readback are done by sending the request \fIonly\fR to +the first server named on the command line. This is done to avoid forcing +a cursor mode on all servers which cannot be terminated when a response is +received from only one server, and means that the first server named should +be the one used to control interactive sessions. The remaining servers +however can still respond to cursor requests from other applications connected +to that server on another channel. +.IP +All named servers must be running prior to starting the proxy server. The +connection to the remote servers is established when this task is first run +and if no server is running that connection will be ignored. The task will +exit if no remote servers can be found for display. +.IP +Any connected server that shuts down while the proxy server is running is +likely to cause the program to crash on the next display. + +.SH "SPECIFYING THE REMOTE SERVER CONNECTION" + +The syntax for the server argument used in proxy mode is as follows: + + \fI<domain> : <address>\fR + +where <domain> is one of \fBinet\fR (internet tcp/ip socket), \fBunix\fR +(unix domain socket) or \fBfifo\fR (named pipe). The form of the address +depends upon the domain, as illustrated in the examples below. + +.TP 30 +inet:5137 +Connect to port 5137 on the local host. +.TP 30 +inet:5137:foo.bar.edu +Client connection to port 5137 on internet host \fIfoo.bar.edu\fR. +The dotted (numeric) form of address may also be used. +.TP 30 +unix:/tmp/.IMT212 +Unix domain socket with the given pathname. IPC method, local host only. +.TP 30 +fifo:/dev/imt1i:/dev/imt1o +FIFO or named pipe with the given pathname. IPC method, local host only. +Two pathnames are required, one for input and one for output, since FIFOs +are not bidirectional. +.LP +The address field may contain up to two "%d" fields. If present, the +user's UID will be substituted (e.g. "unix:/tmp/.IMT%d"). + +.SH "EXAMPLES" + +.TP 5 +1) Run the vximtool, logging output to the file named "spool": + + \f(CW% vximtool -verbose >& spool\fR +.TP 5 +2) Run the vximtool in the background, connect only on unix sockets, no output: + + \f(CW% vximtool -b -unix_only &\fR +.TP 5 +3) Don't store images in memory, start with initial 1024x1024 frame buffer: + + \f(CW% vximtool -noraster -config 3\fR +.TP 5 +4) Run the vximtool in the background, taking cursor input from a file: + + \f(CW% vximtool -i < cursor_file &\fR +.TP 5 +5) Run as a proxy server, displaying to both a local and a remote XImtool, log output to stderr: + + \fI...start all XImtool servers to be used\fP + \f(CW% vximtool -v -proxy unix:/tmp/.IMT%d inet:5137:pisces + Connected to server on unix:/tmp/.IMT359 + Connected to server on inet:5137:pisces + Open to accept input on inet: port 5136\fR + +.LP +To display to the proxy server the client should connect to the vximtool on +\fIinet:5136\fP, the proxy in turn will relay data to the servers listed on +the command line. Note that in this last example any cursor requests from +the client connected to the vximtool will be handled by the +ximtool connected on a unix socket on the local machine (i.e. the first +server argument). The remote ximtool +on the machine pisces could simultaneously be used by another client on +that machine connected by some other means. In this case it will only +display images coming from the \fIvximtool\fR proxy, but could be used in +an interactive IRAF session running on pisces to examine the images. + +.SH SEE ALSO +ximtool(1) +.br +\fIA Reference Guide for the IRAF Client Display Library (CDL)\fR +.SH COPYRIGHT +Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. diff --git a/vendor/x11iraf/cdl/doc/vximtool.ps b/vendor/x11iraf/cdl/doc/vximtool.ps new file mode 100644 index 00000000..70cae4f5 --- /dev/null +++ b/vendor/x11iraf/cdl/doc/vximtool.ps @@ -0,0 +1,2472 @@ +%!PS-Adobe-1.0 +%%Creator: devps (Pipeline Associates, Inc.) +%%CreationDate: Tue Mar 3 16:57:09 1998 +%%Pages: (atend) +%%DocumentFonts: (atend) + +/X{exch}def +/r{rmoveto}def +/m{moveto}def +/l{lineto}def +/rl{rlineto}def +/lc{yc X xc X l st}def +/mc{yc X xc X m}def +/el{gs /a X def a div 1 X scale cp np a xc 2 div 0 360 arc st gr}def +/ar{cp 7 2 roll np xc 5 1 roll atan 3 1 roll atan X arc st}def +/sp{yc X xc X 6 2 roll yc X xc X 6 2 roll yc X xc X 6 2 roll ct}def +/st{stroke}def +/gs{gsave}def +/gr{grestore}def +/cp{currentpoint}def +/np{newpath}def +/ct{curveto}def +/m0{0 0 moveto}def +/BP{/devps-save save def m0}def +/EP{ +clear devps-save restore +showpage}def +/res 10.000000 def +/V{res neg div 792 add +currentpoint pop X +m}def +/H{res div +currentpoint X pop +moveto}def +/h{res div 0 r}def +/v{res neg div 0 X r}def +/xc{res div}def +/yc{res neg div 792 add}def +/S{X H show}def +/psize 10 def +/height 1 def +/slant 0 def +/FF{findfont X dup 12 div setlinewidth /psize X def + [psize 0 psize height mul slant sin slant cos div mul psize height mul 0 0] + makefont setfont}def +/shade{gs + /dy X def + /dx X def + np m + setgray + 0 dy rl + dx 0 rl + 0 dy neg rl + dx neg 0 rl + closepath + fill +gr}def +1 setlinecap +/R{/Times-Roman FF}def +/B{/Times-Bold FF}def +/I{/Times-Italic FF}def +/C{/Courier FF}def +%%EndProlog +%%Page: 1 1 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(VXIMTOOL)S +1448(\()S +1497(1)S +1563(\))S +2787(USER COMMANDS )S +4884(VXIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +9 B +900(NAME)S +1080 V +10 R +1260(vximtool)S +1652(\261-)S +1765(A)S +1867(virtual)S +2158(and/or)S +2443(proxy)S +2706(display)S +3025(server)S +3298(for)S +3444(IRAF)S +3702(IIS)S +3854(protocol)S +4217(clients)S +1248 V +9 B +900(SYNOPSIS)S +1368 V +10 B +1260(vximtool)S +10 R +1662([)S +10 I +1725(options)S +10 R +2050(...])S +1488 V +10 B +1260(vximtool)S +10 R +1662(-proxy)S +1958([)S +10 I +2021(options)S +2346(...])S +2490(server)S +2769([)S +2838(server)S +10 R +3117(...)S +3222(])S +1776 V +9 B +900(DESCRIPTION)S +1896 V +10 I +1260(VXIMTOOL)S +10 R +1793(is)S +1899(a)S +1982(image)S +2265(display)S +2593(server)S +2875(process)S +3213(much)S +3475(like)S +10 I +3665(XIMTOOL)S +10 R +4098(,)S +4163(except)S +4463(that)S +4653(all)S +4793(it)S +4889(normally)S +5290(does)S +5513(is)S +2016 V +1260(respond)S +1632(to)S +1766(datastream)S +2254(requests)S +2637(to)S +2770(read)S +2996(and)S +3195(write)S +3455(to)S +3588(internal)S +3948(frame)S +4235(bu)S +4335 H + (f)show 10 -.5 mul h (f)show +10 R +4396(ers)S +4567(maintained)S +5066(as)S +5204(arrays)S +5502(in)S +2136 V +1260(memory.)S +1682(Multiple)S +2062(frame)S +2329(bu)S +2429 H + (f)show 10 -.5 mul h (f)show +10 R +2490(ers)S +2641(and)S +2820(frame)S +3087(bu)S +3187 H + (f)show 10 -.5 mul h (f)show +10 R +3248(er)S +3360(con\256gurations)S +3967(are)S +4123(supported.)S +4607(It)S +4703(can)S +4876(be)S +5005(used)S +5223(to)S +5336(debug)S +2256 V +1260(IIS)S +1424(protocol)S +1799(client)S +2063(programs)S +2482(by)S +2624(printing)S +2983(out)S +3153(the)S +3317(protocol)S +3692(packets)S +4033(recieved,)S +4436(or)S +4560(can)S +4739(simply)S +5053(be)S +5188(used)S +5412(as)S +5536(a)S +2376 V +1260(dummy)S +1602(server)S +1881(in)S +1995(cases)S +2241(where)S +2520(no)S +2656(image)S +2936(display)S +3261(is)S +3364(really)S +3627(needed.)S +4000(By)S +4154(enabling)S +4535(the)S +10 I +4694(-proxy)S +10 R +4991(\257ag)S +5178(the)S +5337(server)S +2496 V +1260(can)S +1431(also)S +1625(be)S +1752(used)S +1968(to)S +2079(repeat)S +2355(the)S +2510(datastream)S +2975(requests)S +3335(to)S +3446(a)S +3522(list)S +3677(of)S +3792(other)S +4029(servers,)S +4368(e)S +4412 H + (f)show 10 -.5 mul h (f)show +10 R +4473(ectively)S +4821(splitting)S +5182(the)S +5336(image)S +2616 V +1260(display)S +1579(to)S +1687(a)S +1761(number)S +2096(of)S +2209(other)S +2444(servers.)S +2811(See)S +2985(below)S +3259(for)S +3405(details)S +3696(on)S +3826(using)S +4073(the)S +4225(program)S +4593(in)S +4701(this)S +4876(manner.)S +2856 V +1260(The)S +10 I +1448(-verbose)S +10 R +1824(\257ag)S +2007(will)S +2196(log)S +2357(all)S +2490(datastream)S +2955(requests)S +3315(to)S +3426(the)S +3581(stderr,)S +3866(otherwise)S +4287(the)S +4442(task)S +4636(runs)S +4841(silently)S +5170(except)S +5464(for)S +2976 V +1260(error)S +1485(messages.)S +1949(The)S +2136(process)S +2467(is)S +2566(terminated)S +3025(with)S +3234(an)S +3359(EOF)S +3579(on)S +3710(the)S +3863(stdin,)S +4114(if)S +4206(the)S +4359(task)S +4551(is)S +4649(intended)S +5024(to)S +5133(be)S +5258(run)S +5422(as)S +5536(a)S +3096 V +1260(background)S +1772(job)S +1941(the)S +10 I +2104(-background)S +10 R +2655(\257ag)S +2846(should)S +3154(be)S +3289(enabled)S +3640(to)S +3760(shut)S +3969(o)S +4019 H + (f)show 10 -.5 mul h (f)show +10 R +4122(the)S +4286(check)S +4560(of)S +4685(the)S +4849(stdin)S +5086(and)S +5272(avoid)S +5536(a)S +3216 V +1260("waiting)S +1634(for)S +1783(tty)S +1922(input")S +2202(message)S +2573(that)S +2756(would)S +3039(suspend)S +3394(the)S +3549(background)S +4053(job.)S +4269(Frame)S +4557(bu)S +4657 H + (f)show 10 -.5 mul h (f)show +10 R +4718(ers)S +4867(are)S +5021(maintained)S +5497(as)S +3336 V +1260(rasters)S +1554(in)S +1666(memory,)S +2058(up)S +2192(to)S +2305(four)S +2506(frames)S +2812(may)S +3019(currently)S +3414(be)S +3543(de\256ned.)S +3927(If)S +4028(it)S +4119(not)S +4282(necessary)S +4704(to)S +4817(keep)S +5040(the)S +5197(displayed)S +3456 V +1260(images)S +1580(in)S +1695(memory)S +2065(\(i.e.)S +2257(the)S +2416(client)S +2675(will)S +2868(not)S +3033(need)S +3258(to)S +3373(read)S +3581(back)S +3806(any)S +3987(subrasters)S +4423(such)S +4643(as)S +4763(when)S +5016(doing)S +5281(overlay)S +3576 V +1260(graphics\),)S +1690(the)S +10 I +1846(-noraster)S +10 R +2252(\257ag)S +2436(can)S +2608(be)S +2736(used)S +2953(to)S +3066(disable)S +3384(the)S +3541(memory)S +3909(rasters.)S +4259(In)S +4377(this)S +4557(case)S +4763(any)S +4942(image)S +5221(readback)S +3696 V +1260(will)S +1446(return)S +1714(an)S +1838(array)S +2072(of)S +2185(zero)S +2386(values.)S +3936 V +1260(The)S +1448(default)S +1758(frame)S +2023(bu)S +2123 H + (f)show 10 -.5 mul h (f)show +10 R +2184(er)S +2295(size)S +2484(is)S +2585(512x512,)S +2994(with)S +3206(2)S +3290(frames)S +3595(de\256ned)S +3923(initially.)S +4324(The)S +10 I +4513(-con\256g)S +10 R +4824(and)S +10 I +5002(-nframes)S +10 R +5391(\257ags)S +4056 V +1260(can)S +1437(be)S +1570(used)S +1792(to)S +1909(change)S +2230(the)S +2391(startup)S +2702(frame)S +2973(bu)S +3073 H + (f)show 10 -.5 mul h (f)show +10 R +3134(ers)S +3289(used.)S +3566(The)S +3760(frame)S +4031(bu)S +4131 H + (f)show 10 -.5 mul h (f)show +10 R +4192(er)S +4308(con\256guration)S +4880(table)S +5113(is)S +5219(normally)S +4176 V +1260(taken)S +1507(to)S +1616(be)S +1741(/usr/local/lib/imtoolrc)S +2645(but)S +2804(can)S +2973(be)S +3098(overridden)S +3561(by)S +3692(using)S +3941(an)S +4067(IMTOOLRC)S +4621(environment)S +5158(variable,)S +5536(a)S +4296 V +10 I +1260($HOME/.imtoolrc)S +10 R +2029(\256le,)S +2221(or)S +2343(the)S +10 I +2504(-imtoolrc)S +10 R +2915(command-line)S +3531(\257ag)S +3719(respectively.)S +4294(The)S +4487(format)S +4791(of)S +4912(the)S +5072(frame)S +5342(bu)S +5442 H + (f)show 10 -.5 mul h (f)show +10 R +5503(er)S +4416 V +1260(con\256guration)S +1823(\256le)S +1981(is)S +4656 V +10 I +1410(con\256gno)S +1784(nframes)S +2136(width)S +2389(height)S +2669([extra)S +2943(\256elds])S +4776 V +10 R +1290(e.g.)S +4896 V +1560(1)S +1670(2)S +1780(512)S +1990(512)S +5016 V +1560(2)S +1670(2)S +1780(800)S +1990(800)S +5136 V +1560(3)S +1670(1)S +1750(1024)S +1980(1024)S +2480(#)S +2560(comment)S +5376 V +1260(and)S +1434(so)S +1553(on.)S +1738(At)S +1868(most)S +2093(128)S +2273(frame)S +2536(bu)S +2636 H + (f)show 10 -.5 mul h (f)show +10 R +2697(er)S +2805(sizes)S +3030(may)S +3233(be)S +3358(de\256ned,)S +3708(each)S +3921(con\256guration)S +4485(may)S +4688(de\256ne)S +4963(up)S +5094(to)S +5203(4)S +5284(frames,)S +5496 V +1260(con\256guration)S +1823(numbers)S +2197(need)S +2415(not)S +2573(be)S +2697(sequential.)S +5784 V +9 B +900(OPTIONS)S +5904 V +10 B +1260(-background)S +6024 V +10 R +1510(The)S +1695(task)S +1886(will)S +2072(be)S +2196(run)S +2359(in)S +2467(the)S +2619(background)S +3120(so)S +3239(don't)S +3480(listen)S +3727(to)S +3835(STDIN)S +4159(for)S +4305(an)S +4429(EOF)S +4648(to)S +4756(quit)S +4942(gracefully.)S +6192 V +10 B +1260(-con\256g)S +10 I +1579(num)S +6312 V +10 R +1510(Initial)S +1799(frame)S +2081(bu)S +2181 H + (f)show 10 -.5 mul h (f)show +10 R +2242(er)S +2369(con\256guration)S +2952(number.)S +3362(The)S +3567(default)S +3894(value)S +4160(is)S +4277(1,)S +4402(indicating)S +4852(a)S +4947(512x512)S +5348(frame)S +6432 V +1510(bu)S +1610 H + (f)show 10 -.5 mul h (f)show +10 R +1671(er)S +1778(with)S +1986(2)S +2066(frames.)S +2422(See)S +2596(below)S +2870(for)S +3016(information)S +3518(on)S +3648(the)S +3800(frame)S +4062(bu)S +4162 H + (f)show 10 -.5 mul h (f)show +10 R +4223(ers.)S +6600 V +10 B +1260(-\256fo)S +10 I +1462(pipe)S +6720 V +10 R +1510(Speci\256es)S +1901(the)S +2053(name)S +2299(of)S +2412(the)S +2564(\256fo)S +2733(pipe)S +2936(to)S +3045(be)S +3170(used,)S +3409(the)S +10 I +3562(i)S +10 R +3621(and)S +10 I +3796(o)S +10 R +3877(su)S +3966 H + (f)show 10 -.5 mul h (\256)show +10 R +4050(xes)S +4214(will)S +4401(be)S +4526(added)S +4795(automatically.)S +5425(The)S +6840 V +1510(default)S +1817(pipe)S +2019(names)S +2304(will)S +2490(be)S +2614(/dev/imt1i)S +3056(\(input)S +3325(pipe\))S +3560(and)S +3734(/dev/imt1o)S +4198(\(output)S +4517(pipe\).)S +7008 V +10 B +1260(-\256fo_only)S +7128 V +10 R +1510(If)S +1615(set,)S +1790(only)S +2007(\256fo)S +2185(pipes)S +2435(will)S +2630(be)S +2763(used)S +2985(for)S +3140(communication)S +3801(with)S +4018(a)S +4101(client)S +4363(program,)S +4766(sockets)S +5100(will)S +5296(be)S +5430(dis-)S +7248 V +1510(abled.)S +7728 V +900(IRAF Project)S +2719(Last change: 18 Jun 1997)S +5530(1)S +7920 V +EP +%%Page: 2 2 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(VXIMTOOL)S +1448(\()S +1497(1)S +1563(\))S +2787(USER COMMANDS )S +4884(VXIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +10 B +1260(-help)S +10 R +1510(Print)S +1735(a)S +1809(summary)S +2211(of)S +2324(command)S +2748(line)S +2928(options)S +3253(to)S +3361(the)S +3513(screen.)S +1128 V +10 B +1260(-interactive)S +1248 V +10 R +1510(Allow)S +1792(cursor)S +2073(value)S +2321(strings)S +2620(to)S +2730(be)S +2856(typed)S +3110(into)S +3299(the)S +3454(STDIN)S +3781(in)S +3892(response)S +4274(to)S +4385(cursor)S +4667(read)S +4871(requests)S +5231(from)S +5458(the)S +1368 V +1510(client.)S +1536 V +10 B +1260(-imtoolrc)S +10 I +1683(\256le)S +1656 V +10 R +1510(Speci\256es)S +1923(the)S +2097(frame)S +2381(bu)S +2481 H + (f)show 10 -.5 mul h (f)show +10 R +2542(er)S +2671(con\256guration)S +3257(\256le)S +3438(to)S +3569(be)S +3716(used.)S +4007(See)S +4204(below)S +4501(for)S +4670(information)S +5195(on)S +5348(frame)S +1776 V +1510(bu)S +1610 H + (f)show 10 -.5 mul h (f)show +10 R +1671(ers.)S +1944 V +10 B +1260(-inet_only)S +2064 V +10 R +1510(If)S +1611(set,)S +1782(only)S +1995(inet)S +2180(sockets)S +2509(will)S +2700(be)S +2829(used)S +3047(for)S +3198(communication)S +3855(with)S +4068(a)S +4147(client)S +4404(program,)S +4802(\256fo)S +4976(pipes)S +5222(and)S +5402(unix)S +2184 V +1510(sockets)S +1834(will)S +2020(be)S +2144(disabled.)S +2352 V +10 B +1260(-noraster)S +2472 V +10 R +1510(If)S +1614(set)S +1763(no)S +1901(client)S +2162(data)S +2367(will)S +2562(be)S +2695(stored)S +2978(in)S +3095(memory,)S +3492(and)S +3675(image)S +3958(readback)S +4356(will)S +4551(return)S +4828(an)S +4961(array)S +5204(of)S +5326(zeroes)S +2592 V +1510(unless)S +1790(used)S +2003(as)S +2116(a)S +2190(proxy)S +2453(server.)S +2760 V +10 B +1260(-nframes)S +10 I +1672(num)S +2880 V +10 R +1510(Speci\256es)S +1913(the)S +2077(number)S +2424(of)S +2549(frame)S +2823(bu)S +2923 H + (f)show 10 -.5 mul h (f)show +10 R +2984(ers)S +3142(to)S +3262(con\256gure)S +3681(at)S +3795(startup.)S +4164(By)S +4323(default)S +4642(there)S +4883(will)S +5081(be)S +5217(2)S +5309(frames)S +3000 V +1510(available,)S +1925(a)S +1999(maximum)S +2435(of)S +2548(4)S +2628(frames)S +2929(are)S +3080(allowed.)S +3168 V +10 B +1260(-port_only)S +3288 V +10 R +1510(Same)S +1770(as)S +10 I +1891(-inet_only)S +10 R +2334(option.)S +2683(If)S +2787(set,)S +2961(only)S +3177(inet)S +3365(sockets)S +3697(will)S +3891(be)S +4023(used)S +4244(for)S +4398(communication)S +5058(with)S +5275(a)S +5358(client)S +3408 V +1510(program.)S +3576 V +10 B +1260(-port)S +10 I +1506(num)S +3696 V +10 R +1510(Set)S +1670(the)S +1825(primary)S +2174(port)S +2368(to)S +2479(listen)S +2729(on)S +2862(for)S +3011(client)S +3266(connections.)S +3831(The)S +4019(default)S +4329(is)S +4429(5137)S +4662(except)S +4955(when)S +5204(used)S +5420(as)S +5536(a)S +3816 V +1510(proxy)S +1773(server)S +2046(in)S +2154(which)S +2428(case)S +2629(the)S +2781(default)S +3088(is)S +3185(5136.)S +3984 V +10 B +1260(-proxy)S +4104 V +10 R +1510(Run)S +1714(as)S +1834(a)S +1915(proxy)S +2186(server)S +2467(by)S +2605(repeating)S +3014(client)S +3274(requests)S +3639(to)S +3755(each)S +3975(of)S +4096(the)S +10 I +4256(server)S +10 R +4543(remote)S +4858(server)S +5139(arguments.)S +4224 V +1510(See)S +1684(the)S +1836(section)S +2149(on)S +2279(proxy)S +2542(usage)S +2799(below)S +3073(for)S +3219(details.)S +4392 V +10 B +1260(-verbose)S +4512 V +10 R +1510(If)S +1606(set,)S +1772(print)S +1991(information)S +2493(about)S +2745(all)S +2875(IIS)S +3027(packets)S +3356(headers)S +3690(recieved)S +4057(to)S +4165(the)S +4317(STDERR)S +4731(stream.)S +4680 V +10 B +1260(-unix)S +10 I +1513(name)S +4800 V +10 R +1510(Speci\256es)S +1909(the)S +2069(unix)S +2285(domain)S +2623(socket)S +2916(name)S +3170(to)S +3286(use.)S +3512(A)S +3622("%d")S +3876(in)S +3993(the)S +4154(\256lename)S +4537(will)S +4732(be)S +4865(replaced)S +5241(with)S +5458(the)S +4920 V +1510(user)S +1706(id.)S +5088 V +10 B +1260(-unix_only)S +5208 V +10 R +1510(If)S +1607(set,)S +1774(only)S +1983(unix)S +2192(domain)S +2523(sockets)S +2848(will)S +3035(be)S +3160(used)S +3374(for)S +3521(communication)S +4174(with)S +4383(a)S +4458(client)S +4711(program,)S +5105(inet)S +5286(sockets)S +5328 V +1510(and)S +1684(\256fos)S +1892(will)S +2078(be)S +2202(disabled.)S +5616 V +9 B +900(CLIENT)S +1272(CONNECTIONS)S +5736 V +10 I +1260(VXImtool)S +10 R +1673(allows)S +1964(clients)S +2255(to)S +2363(connect)S +2703(in)S +2811(any)S +2985(of)S +3098(the)S +3250(following)S +3669(ways:)S +5904 V +10 B +1260(\256fo)S +1429(pipes)S +6024 V +10 R +1510(The)S +1706(traditional)S +2158(approach.)S +2589(The)S +2785(default)S +3103(global)S +3394(/dev/imt1[io])S +3963(pipes)S +4215(may)S +4428(be)S +4564(used,)S +4814(or)S +4939(a)S +5025(private)S +5344(set)S +5497(of)S +6144 V +1510(\256fos)S +1731(can)S +1911(be)S +2047(speci\256ed)S +2444(using)S +2703(the)S +10 I +2867(-\256fo)S +10 R +3070(command)S +3506(line)S +3698(argument.)S +4172(Values)S +4491(should)S +4800(be)S +4936(speci\256ed)S +5333(as)S +5458(the)S +6264 V +1510(root)S +1701(pathname)S +2119(to)S +2227(a)S +2301(pair)S +2486(of)S +2599(\256fo)S +2768(pipes)S +3009(whose)S +3294(last)S +3463(character)S +3857(is)S +3954('i')S +4078(or)S +4191('o',)S +4362(these)S +4597(characters)S +5030(will)S +5217(be)S +5342(added)S +6384 V +1510(automatically)S +2099(when)S +2360(opening)S +2727(the)S +2894(pipes.)S +3175(For)S +3359(example,)S +3767(to)S +3890(use)S +4068(the)S +4234(default)S +4555(pipes)S +4810(the)S +4976(path)S +5192(would)S +5486(be)S +6504 V +1510(speci\256ed)S +1895(as)S +2008(simply)S +2311("/dev/imt1".)S +2832(A)S +2934(value)S +3180(of)S +3293("none")S +3599(disables)S +3951(this)S +4126(connection.)S +6672 V +10 B +1260(tcp/ip)S +1535(sockets)S +6792 V +10 R +1510(Clients)S +1836(connect)S +2188(via)S +2352(a)S +2438(tcp/ip)S +2708(socket.)S +3030(The)S +3227(default)S +3546(port)S +3749(is)S +10 I +3858(5137)S +10 R +4058(,)S +4125(or)S +4250(a)S +4337(custom)S +4669(port)S +4873(may)S +5088(be)S +5225(speci\256ed)S +6912 V +1510(using)S +1760(the)S +10 I +1915(-port)S +10 R +2148(command)S +2575(line)S +2758(switch.)S +3107(This)S +3318(permits)S +3650(connecting)S +4120(to)S +4230(the)S +4384(server)S +4659(over)S +4868(a)S +4944(remote)S +5253(network)S +7032 V +1510(connection)S +1992(anywhere)S +2423(on)S +2567(the)S +2734(Internet.)S +3174(When)S +3457(used)S +3685(as)S +3813(a)S +3902(proxy)S +4180(server)S +4468(the)S +4635(default)S +4957(port)S +5163(number)S +5513(is)S +7152 V +1510(5136)S +1742(so)S +1863(as)S +1978(to)S +2088(avoid)S +2342(a)S +2418(con\257ict)S +2750(with)S +2960(an)S +3086(XImtool)S +3457(running)S +3800(on)S +3932(the)S +4085(same)S +4321(machine,)S +4715(other)S +4951(connections)S +5459(are)S +7272 V +1510(disabled)S +1881(unless)S +2169(otherwise)S +2595(overridden)S +3065(by)S +3203(a)S +3285(command)S +3717(line)S +3905(option)S +4199(following)S +4626(the)S +10 I +4787(-proxy)S +10 R +5086(\257ag)S +5275(to)S +5392(reset)S +7752 V +900(IRAF Project)S +2719(Last change: 18 Jun 1997)S +5530(2)S +7920 V +EP +%%Page: 3 3 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(VXIMTOOL)S +1448(\()S +1497(1)S +1563(\))S +2787(USER COMMANDS )S +4884(VXIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1510(the)S +1662(connection.)S +2185(A)S +2287(port)S +2478(number)S +2813(of)S +2926(0)S +3006(\(zero\))S +3273(disables)S +3625(this)S +3800(connection.)S +1128 V +10 B +1260(unix)S +1480(domain)S +1833(sockets)S +1248 V +10 R +1510(Like)S +1733(a)S +1817(tcp/ip)S +2085(socket,)S +2405(but)S +2573(limited)S +2898(to)S +3017(a)S +3102(single)S +3382(host)S +3590(system.)S +3934(Usually)S +4286(faster)S +4548(than)S +4761(a)S +4846(tcp/ip)S +5115(socket,)S +5436(and)S +1368 V +1510(comparable)S +2008(to)S +2119(a)S +2196(\256fo.)S +2393(By)S +2543(default)S +2853(each)S +3068(user)S +3267(gets)S +3460(their)S +3675(own)S +3879(unix)S +4089(domain)S +4421(socket,)S +4733(so)S +4854(this)S +5031(option)S +5319(allows)S +1488 V +1510(multiple)S +1882(users)S +2125(to)S +2241(run)S +2413(ximtools)S +2803(on)S +2942(the)S +3103(same)S +3347(host)S +3553(without)S +3898(having)S +4209(to)S +4326(customize)S +4770(things.)S +5109(The)S +5303(default)S +1608 V +1510(value)S +1758(is)S +1857("/tmp/.IMT%d",)S +2549(other)S +2785(sockets)S +3110(may)S +3313(be)S +3438(de\256ned)S +3763(using)S +4011(the)S +10 I +4164(-unix)S +10 R +4400(command)S +4825(line)S +5006(switch.)S +5353(Legal)S +1728 V +1510(values)S +1813(should)S +2128(be)S +2270(speci\256ed)S +2673(as)S +2804(a)S +2896(\256lename)S +3288(to)S +3414(be)S +3557(used)S +3789(for)S +3954(the)S +4125(socket,)S +4454(up)S +4603(to)S +4730(two)S +4929("%d")S +5193(\256elds)S +5459(are)S +1848 V +1510(allowed)S +1856(and)S +2030(will)S +2216(be)S +2340(replaced)S +2707(by)S +2837(the)S +2989(userid.)S +3288(An)S +3440(empty)S +3720(string)S +3978(value)S +4224(disables)S +4576(this)S +4751(connection.)S +2016 V +1260(By)S +1408(default)S +10 I +1716(vximtool)S +10 R +2091(listens)S +2378(simultaneously)S +3015(for)S +3162(client)S +3415(connections)S +3923(on)S +4054(all)S +4186(three)S +4417(types)S +4660(of)S +4775(ports.)S +5092(Clients)S +5408(may)S +2136 V +1260(connect)S +1614(simultaneously)S +2264(by)S +2408(di)S +2486 H + (f)show 10 -.5 mul h (f)show +10 R +2547(erent)S +2790(means)S +3089(allowing)S +3483(up)S +3627(to)S +3748(three)S +3990(di)S +4068 H + (f)show 10 -.5 mul h (f)show +10 R +4129(erent)S +4371(displays)S +4742(to)S +4863(be)S +5000(loading)S +5343(at)S +5458(the)S +2256 V +1260(same)S +1495(time)S +1703(into)S +1889(di)S +1967 H + (f)show 10 -.5 mul h (f)show +10 R +2028(erent)S +2257(frames.)S +2544 V +9 B +900(COMMUNICATIONS)S +1807(PROTOCOL)S +2664 V +10 R +1260(Clients)S +1583(communicate)S +2160(with)S +10 I +2377(vximtool)S +10 R +2760(using)S +3016(a)S +3099(protocol)S +3471(developed)S +3920(originally)S +4348(for)S +4503(IIS)S +4664(\(International)S +5247(Imaging)S +2784 V +1260(Systems\))S +1659(Frame)S +1946(Bu)S +2063 H + (f)show 10 -.5 mul h (f)show +10 R +2124(er)S +2232(hardware,)S +2658(the)S +2811(so-called)S +3202("IIS)S +3396(protocol";)S +3829(other)S +4065(more)S +4301(modern)S +4637(protocols)S +5040(will)S +5227(likely)S +5486(be)S +2904 V +1260(supported)S +1687(in)S +1798(the)S +1953(future.)S +2279(The)S +2467(IIS)S +2622(protocol)S +2988(is)S +3088(basically)S +3476(a)S +3553(command)S +3981(packet)S +4275(stream)S +4575(with)S +4787(a)S +4865(header)S +5164(describing)S +3024 V +1260(the)S +1421(operation)S +1837(to)S +1954(be)S +2087(performed)S +2541(\(select)S +2840(frame,)S +3136(load)S +3347(display,)S +3700(read)S +3910(cursor,)S +4223(etc\),)S +4436(and)S +4618(an)S +4750(optional)S +5116(data)S +5320(packet)S +3144 V +1260(containing)S +1712(e.g.)S +1886(pixels.)S +2180(It)S +2271(is)S +2368(beyond)S +2692(the)S +2844(scope)S +3101(of)S +3214(this)S +3390(document)S +3815(to)S +3924(describe)S +4287(fully)S +4507(the)S +4660(details)S +4952(of)S +5066(the)S +5219(protocol;)S +3264 V +1260(interested)S +1688(users)S +1933(should)S +2240(contact)S +10 I +2568(iraf@noao.edu)S +10 R +3214(for)S +3370(further)S +3681(information)S +4193(or)S +4316(see)S +4482(the)S +10 I +4643(A)S +4743(Reference)S +5180(Guide)S +5463(for)S +3384 V +1260(the)S +1412(IRAF)S +1658(Client)S +1933(Display)S +2274(Library)S +10 R +2610(for)S +2756(details.)S +3672 V +9 B +900(PROXY)S +1247(USAGE)S +3792 V +10 R +1260(The)S +10 I +1445(vximtool)S +10 R +1819(may)S +2021(also)S +2212(be)S +2336(used)S +2549(as)S +2663(a)S +2738(proxy)S +3002(server)S +3276(by)S +3407(enabling)S +3782(the)S +10 I +3935(-proxy)S +10 R +4226(command)S +4651(line)S +4832(\257ag.)S +5068(In)S +5182(this)S +5358(mode)S +3912 V +1260(the)S +1420(program)S +1796(acts)S +1989(as)S +2110(a)S +2191(relay)S +2427(for)S +2580(the)S +2739(IIS)S +2898(datastream)S +3367(packets,)S +3728(sending)S +4076(image)S +4357(data,)S +4585(frame)S +4854(requests,)S +5243(etc.)S +5421(to)S +5536(a)S +4032 V +1260(list)S +1421(of)S +1542(other)S +1785(servers)S +2105(speci\256ed)S +2498(on)S +2636(the)S +2796(command)S +3228(line.)S +3471(The)S +3664(e)S +3708 H + (f)show 10 -.5 mul h (f)show +10 R +3769(ect)S +3923(of)S +4045(this)S +4229(is)S +4335(to)S +4452(allow)S +4713(a)S +4796(client)S +5057(to)S +5174(display)S +5502(to)S +4152 V +1260(this)S +1436(program)S +1805(which)S +2080(then)S +2283(re-displays)S +2752(to)S +2861(each)S +3074(of)S +3188(the)S +3341(other)S +3577(named)S +3874(servers.)S +4241(A)S +4343(maximum)S +4779(of)S +4892(8)S +4972(servers)S +5284(may)S +5486(be)S +4272 V +1260(named,)S +1594(they)S +1809(may)S +2024(be)S +2161(either)S +2431(on)S +2574(the)S +2740(local)S +2978(host)S +3189(or)S +3316(a)S +3404(remote)S +3725(machine)S +4107(and)S +4295(connections)S +4816(can)S +4998(be)S +5136(established)S +4392 V +1260(using)S +1507(either)S +1764(\256fos)S +1972(or)S +2085(sockets.)S +2464(See)S +2638(below)S +2912(for)S +3058(details)S +3349(on)S +3479(how)S +3681(to)S +3789(specify)S +4107(the)S +4259(server)S +4532(connection.)S +4632 V +1260(The)S +1445(current)S +1757(implementation)S +2415(has)S +2578(a)S +2652(few)S +2831(restrictions)S +3305(users)S +3540(should)S +3837(keep)S +4055(in)S +4163(mind:)S +4800 V +1620(Cursor)S +1924(and)S +2100(image)S +2376(readback)S +2767(are)S +2920(done)S +3146(by)S +3278(sending)S +3621(the)S +3775(request)S +10 I +4095(only)S +10 R +4299(to)S +4409(the)S +4563(\256rst)S +4751(server)S +5026(named)S +5325(on)S +5458(the)S +4920 V +1620(command)S +2049(line.)S +2289(This)S +2502(is)S +2604(done)S +2833(to)S +2946(avoid)S +3203(forcing)S +3526(a)S +3605(cursor)S +3889(mode)S +4146(on)S +4281(all)S +4416(servers)S +4733(which)S +5012(cannot)S +5313(be)S +5442(ter-)S +5040 V +1620(minated)S +1973(when)S +2220(a)S +2295(response)S +2675(is)S +2773(received)S +3141(from)S +3366(only)S +3576(one)S +3752(server,)S +4052(and)S +4228(means)S +4515(that)S +4697(the)S +4851(\256rst)S +5039(server)S +5314(named)S +5160 V +1620(should)S +1924(be)S +2055(the)S +2214(one)S +2395(used)S +2615(to)S +2730(control)S +3050(interactive)S +3507(sessions.)S +3926(The)S +4117(remaining)S +4558(servers)S +4876(however)S +5255(can)S +5429(still)S +5280 V +1620(respond)S +1966(to)S +2074(cursor)S +2353(requests)S +2710(from)S +2934(other)S +3169(applications)S +3682(connected)S +4116(to)S +4224(that)S +4404(server)S +4677(on)S +4807(another)S +5136(channel.)S +5448 V +1620(All)S +1792(named)S +2102(servers)S +2428(must)S +2667(be)S +2805(running)S +3160(prior)S +3398(to)S +3520(starting)S +3864(the)S +4031(proxy)S +4309(server.)S +4652(The)S +4852(connection)S +5335(to)S +5458(the)S +5568 V +1620(remote)S +1934(servers)S +2253(is)S +2357(established)S +2838(when)S +3091(this)S +3273(task)S +3471(is)S +3575(\256rst)S +3768(run)S +3937(and)S +4117(if)S +4214(no)S +4350(server)S +4629(is)S +4732(running)S +5079(that)S +5265(connec-)S +5688 V +1620(tion)S +1806(will)S +1992(be)S +2116(ignored.)S +2506(The)S +2691(task)S +2882(will)S +3068(exit)S +3248(if)S +3339(no)S +3469(remote)S +3776(servers)S +4088(can)S +4256(be)S +4380(found)S +4643(for)S +4789(display.)S +5856 V +1620(Any)S +1832(connected)S +2276(server)S +2559(that)S +2749(shuts)S +2995(down)S +3257(while)S +3519(the)S +3682(proxy)S +3956(server)S +4240(is)S +4348(running)S +4700(is)S +4808(likely)S +5077(to)S +5196(cause)S +5458(the)S +5976 V +1620(program)S +1988(to)S +2096(crash)S +2336(on)S +2466(the)S +2618(next)S +2820(display.)S +6264 V +9 B +900(SPECIFYING)S +1482(THE)S +1699(REMOTE)S +2126(SERVER)S +2518(CONNECTION)S +6384 V +10 R +1260(The)S +1445(syntax)S +1736(for)S +1882(the)S +2034(server)S +2307(argument)S +2714(used)S +2927(in)S +3035(proxy)S +3298(mode)S +3550(is)S +3647(as)S +3760(follows:)S +6624 V +10 I +1620(<domain>)S +2086(:)S +2149(<address>)S +6864 V +10 R +1260(where)S +1539(<domain>)S +1988(is)S +2092(one)S +2273(of)S +10 B +2393(inet)S +10 R +2591(\(internet)S +2966(tcp/ip)S +3231(socket\),)S +10 B +3581(unix)S +10 R +3808(\(unix)S +4056(domain)S +4393(socket\))S +4718(or)S +10 B +4838(\256fo)S +10 R +5014(\(named)S +5350(pipe\).)S +6984 V +1260(The)S +1445(form)S +1669(of)S +1782(the)S +1934(address)S +2263(depends)S +2620(upon)S +2850(the)S +3002(domain,)S +3357(as)S +3470(illustrated)S +3900(in)S +4008(the)S +4160(examples)S +4567(below.)S +7272 V +1260(inet:5137)S +2760(Connect)S +3123(to)S +3231(port)S +3422(5137)S +3652(on)S +3782(the)S +3934(local)S +4158(host.)S +7752 V +900(IRAF Project)S +2719(Last change: 18 Jun 1997)S +5530(3)S +7920 V +EP +%%Page: 4 4 +BP +/slant 0 def +/height 1.000000 def +10 R +10 R +480 V +900(VXIMTOOL)S +1448(\()S +1497(1)S +1563(\))S +2787(USER COMMANDS )S +4884(VXIMTOOL)S +5432(\()S +5481(1)S +5547(\))S +960 V +1260(inet:5137:foo.bar.edu)S +2760(Client)S +3055(connection)S +3543(to)S +3671(port)S +3882(5137)S +4133(on)S +4284(internet)S +4640(host)S +10 I +4858(foo.bar.edu)S +10 R +5319(.)S +5425(The)S +1080 V +2760(dotted)S +3040(\(numeric\))S +3463(form)S +3687(of)S +3800(address)S +4129(may)S +4331(also)S +4522(be)S +4646(used.)S +1248 V +1260(unix:/tmp/.IMT212)S +2760(Unix)S +3010(domain)S +3360(socket)S +3665(with)S +3893(the)S +4066(given)S +4339(pathname.)S +4803(IPC)S +5010(method,)S +5386(local)S +1368 V +2760(host)S +2957(only.)S +1536 V +1260(\256fo:/dev/imt1i:/dev/imt1o)S +2760(FIFO)S +3021(or)S +3148(named)S +3458(pipe)S +3674(with)S +3896(the)S +4062(given)S +4328(pathname.)S +4815(IPC)S +5016(method,)S +5386(local)S +1656 V +2760(host)S +2969(only.)S +3244(Two)S +3469(pathnames)S +3938(are)S +4101(required,)S +4500(one)S +4686(for)S +4844(input)S +5092(and)S +5278(one)S +5464(for)S +1776 V +2760(output,)S +3071(since)S +3306(FIFOs)S +3592(are)S +3743(not)S +3901(bidirectional.)S +1944 V +1260(The)S +1450(address)S +1784(\256eld)S +1997(may)S +2204(contain)S +2533(up)S +2668(to)S +2781(two)S +2966("%d")S +3216(\256elds.)S +3523(If)S +3624(present,)S +3972(the)S +4129(user's)S +4402(UID)S +4614(will)S +4805(be)S +4934(substituted)S +5403(\(e.g.)S +2064 V +1260("unix:/tmp/.IMT%d"\).)S +2352 V +9 B +900(EXAMPLES)S +2472 V +10 R +1260(1\))S +1373(Run)S +1570(the)S +1722(vximtool,)S +2139(logging)S +2475(output)S +2761(to)S +2869(the)S +3021(\256le)S +3179(named)S +3475("spool":)S +2712 V +10 C +1750(%)S +1870(vximtool)S +2410(-verbose)S +2950(>&)S +3130(spool)S +2880 V +10 R +1260(2\))S +1373(Run)S +1570(the)S +1722(vximtool)S +2114(in)S +2222(the)S +2374(background,)S +2900(connect)S +3240(only)S +3448(on)S +3578(unix)S +3786(sockets,)S +4135(no)S +4265(output:)S +3120 V +10 C +1750(%)S +1870(vximtool)S +2410(-b)S +2590(-unix_only)S +3250(&)S +3288 V +10 R +1260(3\))S +1373(Don't)S +1636(store)S +1860(images)S +2173(in)S +2281(memory,)S +2669(start)S +2871(with)S +3079(initial)S +3343(1024x1024)S +3823(frame)S +4085(bu)S +4185 H + (f)show 10 -.5 mul h (f)show +10 R +4246(er:)S +3528 V +10 C +1750(%)S +1870(vximtool)S +2410(-noraster)S +3010(-config)S +3490(3)S +3696 V +10 R +1260(4\))S +1373(Run)S +1570(the)S +1722(vximtool)S +2114(in)S +2222(the)S +2374(background,)S +2900(taking)S +3180(cursor)S +3459(input)S +3695(from)S +3919(a)S +3993(\256le:)S +3936 V +10 C +1750(%)S +1870(vximtool)S +2410(-i)S +2590(<)S +2710(cursor_file)S +3430(&)S +4104 V +10 R +1260(5\))S +1373(Run)S +1570(as)S +1683(a)S +1757(proxy)S +2020(server,)S +2318(displaying)S +2765(to)S +2873(both)S +3081(a)S +3155(local)S +3379(and)S +3553(a)S +3627(remote)S +3934(XImtool,)S +4328(log)S +4486(output)S +4772(to)S +4880(stderr:)S +4344 V +10 I +1750(...start)S +2039(all)S +2175(XImtool)S +2527(servers)S +2845(to)S +2953(be)S +3077(used)S +4464 V +10 C +1750(%)S +1870(vximtool)S +2410(-v)S +2590(-proxy)S +3010(unix:/tmp/.IMT%d)S +4030(inet:5137:pisces)S +4584 V +1750(Connected)S +2350(to)S +2530(server)S +2950(on)S +3130(unix:/tmp/.IMT359)S +4704 V +1750(Connected)S +2350(to)S +2530(server)S +2950(on)S +3130(inet:5137:pisces)S +4824 V +1750(Open)S +2050(to)S +2230(accept)S +2650(input)S +3010(on)S +3190(inet:)S +3550(port)S +3850(5136)S +5112 V +10 R +1260(To)S +1407(display)S +1732(to)S +1846(the)S +2004(proxy)S +2273(server)S +2552(the)S +2710(client)S +2969(should)S +3273(connect)S +3620(to)S +3735(the)S +3894(vximtool)S +4293(on)S +10 I +4430(inet:5136)S +10 R +4813(,)S +4875(the)S +5034(proxy)S +5304(in)S +5419(turn)S +5232 V +1260(will)S +1463(relay)S +1709(data)S +1922(to)S +2047(the)S +2216(servers)S +2545(listed)S +2809(on)S +2956(the)S +3125(command)S +3566(line.)S +3818(Note)S +4059(that)S +4256(in)S +4381(this)S +4572(last)S +4757(example)S +5141(any)S +5331(cursor)S +5352 V +1260(requests)S +1626(from)S +1859(the)S +2020(client)S +2281(connected)S +2724(to)S +2841(the)S +3002(vximtool)S +3403(will)S +3598(be)S +3731(handled)S +4086(by)S +4225(the)S +4386(ximtool)S +4737(connected)S +5180(on)S +5319(a)S +5402(unix)S +5472 V +1260(socket)S +1554(on)S +1693(the)S +1854(local)S +2087(machine)S +2464(\(i.e.)S +2658(the)S +2819(\256rst)S +3014(server)S +3296(argument\).)S +3800(The)S +3994(remote)S +4310(ximtool)S +4661(on)S +4800(the)S +4960(machine)S +5336(pisces)S +5592 V +1260(could)S +1516(simultaneously)S +2156(be)S +2284(used)S +2501(by)S +2635(another)S +2968(client)S +3224(on)S +3358(that)S +3542(machine)S +3914(connected)S +4352(by)S +4486(some)S +4732(other)S +4972(means.)S +5317(In)S +5435(this)S +5712 V +1260(case)S +1476(it)S +1576(will)S +1776(only)S +1998(display)S +2331(images)S +2658(coming)S +3002(from)S +3240(the)S +10 I +3406(vximtool)S +10 R +3794(proxy,)S +4096(but)S +4268(could)S +4534(be)S +4672(used)S +4899(in)S +5021(an)S +5159(interactive)S +5832 V +1260(IRAF)S +1518(session)S +1837(running)S +2178(on)S +2308(pisces)S +2582(to)S +2690(examine)S +3058(the)S +3210(images.)S +6120 V +9 B +900(SEE)S +1112(ALSO)S +6240 V +10 R +1260(ximtool\(1\))S +6360 V +10 I +1260(A)S +1351(Reference)S +1779(Guide)S +2053(for)S +2200(the)S +2352(IRAF)S +2598(Client)S +2873(Display)S +3214(Library)S +3550(\(CDL\))S +6528 V +9 B +900(COPYRIGHT)S +6648 V +10 R +1260(Copyright\(c\))S +1806(1986)S +2036(Association)S +2538(of)S +2651(Universities)S +3164(for)S +3310(Research)S +3705(in)S +3813(Astronomy)S +4293(Inc.)S +7680 V +900(IRAF Project)S +2719(Last change: 18 Jun 1997)S +5530(4)S +7920 V +EP +%%Trailer +%%DocumentFonts: Times-Roman Times-Bold Times-Italic Courier +%%Pages: 4 +
\ No newline at end of file |