
IRAF (Mar02)            V2.12EXPORT Release Notes           IRAF (Mar02)


                     IRAF V2.12EXPORT Release Notes
                            January 25, 2002
                        Updated: March 25, 2002


These release notes provide a summary of the  major  changes  in  V2.12.
This  is a major release of IRAF and will be available for all supported
platforms.  More detailed technical documentation of all system  changes
will  be  found  in  the  'notes.v211'  and  'notes.v212'  files  in the
iraf$doc and iraf$local directories.  Detailed revisions notes for  each
application  package  are  in  the  package directories in a file called
Revisions, e.g. apphot$Revisions.

     1.  Highlights of This Release
     2.  IRAF System Revisions Summary
     3.  Core IRAF Revisions Summary
          3.1 New Tasks
          3.2 Existing tasks with new parameters/defaults
          3.3 Existing tasks with new capabilities
     4.  NOAO Package Revisions Summary
          4.1 New NOAO Packages
          4.2 New NOAO Package Tasks
          4.3 Existing tasks with new parameters/defaults
          4.4 Existing tasks with new capabilities
     5.  General Package Changes
     6.  General Task Changes
     7.  Parameter File Changes
     8.  Details of Major System Changes
          8.1 FITS Kernel Changes
          8.2 Large Image Support
          8.3 Virtual Memory Cache
          8.4 New Developer libraries
     9.  System Changes Which May Affect You
          9.1 Shared Library Version Incremented
          9.2 External Package Recompilation
          9.3 Parameter File Changes
          9.4 Installation Script Changes
          9.5 Help System Changes
          9.6 Image Display Changes
          9.7 PLIO Changes
          9.8 New Environment Variables Changes




1. Highlights of This Release

    o Pixel Mask Support Added to FITS Kernel
        The FITS kernel was modified to add support for storing images in
        extensions as compressed pixel masks using the binary table extension.
        These masks may be accessed like any other image and allow for tasks
        to more easily store bad-pixel masks, regions masks, or error arrays
        in the same image file as the science data.
        
    o New Pixel Mask Tasks
        Several new tasks have been added to the system PROTO package for
        manipulating pixel masks:  

        o MIMSTATISTICS allows image statistics to be computed while
            rejecting pixels specified by an input mask.  
        o MSKEXPR task is a general-purpose mask expression evaluator
            similar to IMEXPR for images, but has builtin boolean region
            functions which can be used to set values inside or outside
            of certain geometric shapes.
        o MSKREGIONS creates an output mask based on an input text de-
            scription.  Region descriptions can be composed of geometric
            shapes and logical operation on mask regions.

        o OBJMASKS in the NPROTO package is a new task for detecting objects
            in an image and creating an output catalog or pixel mask of
            found objects.
        
    o Shared Memory Limitations Eased
        The IMAGES and DAOPHOT packages executables are now linked statically
        to remove per-process memory limitations imposed by the IRAF shared
        library on Sun and Dec Alpha systems.  Previously tasks such as
        DAOFIND and IMCOMBINE were limited to 268Mb on Sun systems,  these
        tasks can now use up to the machine memory limits.

    o Image I/O Buffer Sizes Increased
        Support for large image I/O was improved by changes to the internal
        buffer sizes.  These buffers may automatically adjust to optimal
        values for the image being accessed, however new environment variables
        may be set to further tune the buffers at the user level.  Where
        needed applications tasks were modified to take advantage of these
        buffer size changes to force the imio buffer to be the size of the
        input image.
        
    o Simplified Installation Script
        The install script was rewritten to clarify the output and provide
        some basic checking of the IRAF system setup prior to installation,
        and to do some of the most common post-install configuration.  The
        script will print an explanation of any errors it finds and suggest
        corrective action, the hope is this will lead the user past some of
        the most common installation errors.

        In addition, the SYSINFO diagnostic script which does more extensive
        checking of the system is also now part of the distribution.  This
        script can be used to verify the system once the install is complete,
        or to generate a report of the system configuration if needed by
        site support.  An UNINSTALL script to remove iraf command links and
        files created by the INSTALL script is also available to remove IRAF
        from a machine.  All scripts are now installed in the hlib$ directory.
        
    o New HELP GUI and Output Options
        The HELP task was enhanced to have a new GUI option for XGterm
        users.  This is essentially the XHELP task which has been available
        in the GUIAPPS external package for some time, however the task is
        fully backwards compatible and the text-mode output is still the
        default.  As part of this work, help pages may also now be formatted
        as either HTML or Postscript for web presentation or pretty-printing
        to a hardcopy device.  The LROFF task was similarly modified to
        provide direct conversion of lroff text sources.

    o DISPLAY Task Changes
        As part of the recent X11IRAF enhancements, the DISPLAY task and
        others such as IMEXAMINE which interact with the display server were
        modified to take advantage of the new features in XImtool V1.3.
        These include support for 16 frame buffers (increased from 4 in
        previous versions), and enhanced WCS readout capabilities.  The
        changes are fully backwards compatible for use with older XImtool
        versions or display servers such as SAOimage, SAOtng, or DS9 which
        have not yet been updated.

        X11IRAF V1.3 is being released simultaneously (but still separately)
        with IRAF V2.12.  While V2.12 is fully compatible with older versions
        of X11IRAF,  however users will need to upgrade both systems to take
        full advantage of all the new features.  Users should consult the
        X11IRAF Release Notes for details on what has changed there.
        
    o New Packages
        Several new packages are available in this release (see the NOAO
        package change notes below for details):

        - A new ASTCAT package for extracting astrometric and photometric
          calibration data from remote or local catalogs was added to NOAO.

        - A new CRUTIL package for doing cosmic ray detection and removal
          package was installed in the IMRED package.

        - A new QUADRED reduction package for QUAD format data was installed
          in the IMRED package.  This is a generalized replacement for the
          ARED.QUAD and XCCDRED external packages for processing CTIO and
          ESO FORS1 multi-amplifier data.

        - A new OBSUTIL package was installed in NOAO.  This is a collection
          of tasks from various external packages which are useful to plan or
          carry out observations.

    o New Developer Libraries.
        Several new libraries are available for SPP developers:

        - PSIO is a new Postscript text generation library installed in
          sys$psio.

        - CATQUERY is a remote astrometric/photometric catalog access lib
          installed in the XTOOLS utility library.  

        - SKYWCS is a sky coordinate transformation library installed in
          the XTOOLS utility library.




2. IRAF System Revisions Summary

    o The IRAF shared library version number was incremented for SunOS
        and Solaris systems.  See below for details on how this change
        will affect external packages and locally-compiled software.

    o The maximum number of nodes in a local iraf network was increased
        from 320 to 512.

    o The max number of open files in FIO, FIO_MAXFD, was increased from 
        256 to 4096.  This is the "hard limit" on the maximum number of
        open files in an IRAF process.

    o The maximum number of host level open files, MAXOFILES, was increased
        from 64 to 256.  This is the maximum number of files that can be
        simultaneously open at the host level.  It determines the maximum
        number of files that can be simultaneously open by an IRAF process
        in the usual case.

    o The number of keywords in a group header block for STF images (i.e.
        the MAX_PCOUNT) was increased from 50 to 99 in the STF image kernel.

    o Added support for the bitwise boolean operators: '&' (and), '|' (or),
        '^' (xor), and '~' (not/complement), to vectory expression evaluator
        fmtio$evvexpr.gy.  The IMEXPR task was modified to allow these new
        bitwise operations.

    o Added new vector operators to VOPS library: alan, alank (logical AND)
        and alor, alork (logical OR).  These take any integer data as input
        (short, int, long) and return a logical (expressed as int) result.

    o The 'imextn' environment variable will now accept upper-case extensions
        to specify image types.

    o Host Command Execution: The way command line arguments are parsed 
        was modified to make it easier to set the value of a string parameter
        to the null string. Whitespace is still skipped in @par files
        as before, however null strings are valid parameter values and will
        no longer cause a parameter prompt.

    o The MKPKG special file list link support was enhanced to allow replacing
        LFLAGS (the link flags variable) as well as the entire link line.
        This makes is possible to write special-file list entries for packages 
        which need e.g. to be compiled nonshared on certain platforms without
        creating a platform specific mkpkg file for the package itself.

    o The HSI zawset.c routine which controls a process working set size was
        modified to automatically detect the physical size of system memory
        (with a maximum return value of 2Gb).  The hard upper limit on memory
        utilization defined by the unix kernel can be limited either by the
        value return by the IRAF kernel (up to 90% of physical memory), or by
        the value set in the user environment variable MAXWORKSET (given in
        units of Mb).

    o New stdimage display devices were added to support the display of Gemini
        GMOS CCD data.  These devices are named 'imt45' thru 'imt49' and
        correspond to the following frame buffer sizes:

                imt45   2080 x 4644        # imt45|imtgmosccd
                imt46   6400 x 4644        # imt46|imtgmos
                imt47   3200 x 2322        # imt47|imtgmos2
                imt48   1600 x 1161        # imt48|imtgmos4
                imt49    800 x  581        # imt49|imtgmos8



3. CORE IRAF REVISIONS SUMMARY



3.1 New Tasks
     imcoords.ccget - extract objects from a test file catalog
     imcoords.ccstd - transform to and from standard astrometric coordinates
proto.mimstatistics - do image statistics through a mask
      proto.rskysub - sky subtract images using running mean or median
      proto.mskexpr - general mask expression evaluator
   proto.mskregions - create a mask from a list of region specifications



3.2 Existing Tasks with New Parameters or New Parameter Defaults
 immatch.imcentroid - new parameter maxshift
    immatch.imalign - new parameter maxshift
     immatch.geomap - new parameter maxiter, default reject = 3.0 not INDEF
     imcoords.ccmap - new parameter maxiter, default reject = 3.0 not INDEF
  imcoords.imcctran - new parameter longpole
       imutil.hedit - new parameter addonly
imutil.imstatistics - new parameters nclip, lsigma, usigma, cache



3.3 Existing Tasks with New Capabilities
 immatch.imcentroid - optionally rejects objects whose centers wander too much
    immatch.imalign - optionally rejects objects whose centers wander too much
     immatch.geomap - iterative rejection capability added
     imcoords.ccmap - iterative rejection capability added 
  imcoords.imcctran - support for non-zenithal projections added
       imutil.hedit - support for add keyword only if new option
imutil.imstatistics - support for iterative rejection and memory caching added
      imutil.imexpr - support for bitwise operators or, and, xor, and not added




4. NOAO PACKAGE REVISIONS SUMMARY



4.1 New NOAO Packages
      astcat - Astronomical catalog and surveys access package
      crutil - Cosmic ray detection and removal package
     obsutil - Observing utilities package



4.2 New NOAO Package Tasks
      apphot.pcalc - Do arithmetic operations on a list of apphot databases
   apphot.pconvert - Convert a text database to a tables database
      apphot.pdump - Print selected fields from a list of apphot databases
   apphot.pexamine - Interactively examine and edit an apphot database
  apphot.prenumber - Renumber stars in an apphot database
    apphot.pselect - Select records from an apphot database
      apphot.psort - Sort an apphot database

     astcat.aclist - List the supported astrometric catalogs
    astcat.agetcat - Extract astrometry files from astrometric catalogs
   astcat.afiltcat - Filter astrometry files derived from astrometric catalogs 
   astcat.adumpcat - Catalog access debugging task
     astcat.aslist - List the supported image surveys 
     astcat.agetim - Extract FITS images from image surveys 
     astcat.ahedit - Initialize the image wcs and set standard keywords
    astcat.aimfind - Select images containing catalog objects
    astcat.adumpim - Image survey access debugging task
   astcat.aregpars - Default region parameter set
   astcat.acatpars - Default astrometry file format parameter set 
  astcat.afiltpars - Default astrometry file filtering parameters
    astcat.aimpars - Default image data parameters
   astcat.awcspars - Default image wcs parameters

 crutil.cosmicrays - Remove cosmic rays using flux ratio algorithm
  crutil.craverage - Detect CRs against average and avoid objects
  crutil.crcombine - Combine multiple exposures to eliminate cosmic rays
     crutil.credit - Interactively edit cosmic rays using an image display
      crutil.crfix - Fix cosmic rays in images using cosmic ray masks
     crutil.crgrow - Grow cosmic rays in cosmic ray masks
   crutil.crmedian - Detect and replace cosmic rays with median filter
   crutil.crnebula - Detect and replace cosmic rays in nebular data

obsutil.psfmeasure - Measure PSF sizes from stellar images
 obsutil.specfocus - Determine spectral focus and alignment variations
 obsutil.starfocus - Determine direct focus variations from stellar images
   obsutil.ccdtime - CCD photometry exposure time calculator
  obsutil.pairmass - Plot airmass vs time for a given coordinate
    obsutil.sptime - Spectroscopic exposure time calculator
  obsutil.specpars - Spectrograph instrument parameters for sptime
  obsutil.bitcount - Accumulate the bit statistics for a list of images
  obsutil.findgain - Estimate the gain and readnoise of a CCD 
   obsutil.shutcor - Shutter correction from images of varying exposure times

   nproto.objmasks - detect and catalog objects in image



4.3 Existing Packages and Tasks with New Parameters or New Parameter Defaults
            apphot - new package parameters wcsin, wcsout, and cache
     apphot.center - new parameters wcsin, wcsout, cache
    apphot.daofind - new parameters wcsout, cache
     apphot.fitpsf - new parameters wcsin, wcsout, cache
     apphot.fitsky - new parameters wcsin, wcsout, cache
       apphot.phot - new parameters wcsin, wcsout, cache
   apphot.polymark - new parameters wcsin, wcsout, cache
   apphot.polyphot - new parameters wcsin, wcsout, cache
      apphot.qphot - new parameters wcsin, wcsout, cache
    apphot.radprof - new parameters wcsin, wcsout, cache
      apphot.wphot - new parameters wcsin, wcsout, cache
     apphot.txdump - replaced by pdump, available as a hidden task

astutil.setairmass - new parameters ra, dec, equinox, st, ut, scale

           daophot - new package parameters wcsin, wcsout, wcspsf, and cache
   daophot.addstar - new parameters wcsin, wcsout, wcspsf, and cache
   daophot.allstar - new parameters wcsin, wcsout, and wcspsf
   daophot.daoedit - new parameters cache
   daophot.daofind - new parameters wcsout, and cache
     daophot.group - new parameters wcsin, wcsout, wcspsf, and cache
     daophot.nstar - new parameters wcsin, wcsout, wcspsf, and cache
      daophot.peak - new parameters wcsin, wcsout, wcspsf, and cache
      daophot.phot - new parameters wcsin, wcsout, and cache
       daophot.psf - new parameters wcsin, wcsout, and cache
   daophot.substar - new parameters wcsin, wcsout, and cache



4.4 Existing Tasks with New Capabilities
     apphot.center - coordinate system support, optional image cacheing
    apphot.daofind - coordinate system support, optional image cacheing
     apphot.fitpsf - coordinate system support, optional image cacheing
     apphot.fitsky - coordinate system support, optional image cacheing
       apphot.phot - coordinate system support, optional image cacheing
   apphot.polymark - coordinate system support, optional image cacheing
   apphot.polyphot - coordinate system support, optional image cacheing
      apphot.qphot - coordinate system support, optional image cacheing
    apphot.radprof - coordinate system support, optional image cacheing
      apphot.wphot - coordinate system support, optional image cacheing

astutil.setairmass - ra, dec, equinox, st, ut, scale are no longer hardwired
 astutil.rvcorrect - more flexibility in setting ut

   daophot.addstar - coordinate system support, optional image cacheing
   daophot.allstar - coordinate system support
   daophot.daoedit - optional image cacheing
   daophot.daofind - coordinate system support, optional image cacheing
     daophot.group - coordinate system support, optional image cacheing
     daophot.nstar - coordinate system support, optional image cacheing
      daophot.peak - coordinate system support, optional image cacheing
      daophot.phot - coordinate system support, optional image cacheing
       daophot.psf - coordinate system support, optional image cacheing
   daophot.substar - coordinate system support, optional image cacheing




5. General Package Changes

NOAO

  ONEDSPEC
      More than 999 apertures are now allowed.

  APPHOT
      Coordinate Support:
          All the apphot tasks have been modified to accept input coordinates
          in the logical, tv, physical, or world systems, and to write output
          coordinates in the logical, tv, or physical coordinate systems. One
          consequence of this is that the apphot tasks will now work correctly
          on image sections in interactive mode. Another is that users can now
          work directly on image sections while preserving the coordinate
          system of the parent image.

      Image Cacheing Support:
          All the apphot tasks which accept image pixel input have been mod-
          ified to optional cache the entire input image in memory. Cacheing
          may significantly improve the performance of tasks where many random
          access operations are performed.

      File and image name directory information removed from output files
          All the apphot tasks have been modified to strip directory infor-
          mation from the image and coordinate file names written to the output
          files, to the terminal, and to the plot headers. The colon commands
          will still read and write full image and coordinate file path names.

      New PTOOLS Tasks Added
        The ptools package tasks pcalc, pconvert, pdump, prenumber, pselect
        and psort were added to the apphot package. The functionality of the
        old txdump task as been replaced by the pdump.  TXDUMP is still avail-
        able as a hidden task.

   ASTCAT
      The astcat package is a set of tasks for extracting astrometric and
      photometric calibration data from remote or local catalogs, filtering
      the data, extracting FITS images from remote or local surveys, and adding
      standard keywords to the extracted images.  There is also a task for
      selecting images which contain catalog objects and locating the catalog
      objects in the image.

  IMRED.CRUTIL
      Cosmic ray detection and removal package.  This package includes new
      tasks and links to tasks from other package.  It replaces the CRUTIL
      external package.

  IMRED.QUADRED
      Reduction package for QUAD format data.  This replaces the ARED.QUAD
      and XCCDRED external packages for processing CTIO and ESO FORS1 multi-
      amplifier data.

  DAOPHOT
    Coordinate Support
        All the daophot tasks have been modified to accept input coordinates
        in the logical, tv, physical, or world systems, and to write the output
        coordinates in the logical, tv, or physical coordinate systems. One
        consequence of this is that the daophot tasks will now work correctly
        on image sections in interactive mode. Another is that users can now
        work directly on image sections while preserving the coordinate
        system of the parent image.

    Image Cacheing Support
        All the daophot tasks which accept image pixel input have been modified
        to optionally cache the entire input image in memory. Cacheing signif-
        icantly improves the performance of the tasks when many random access
        operations are performed.  The cacheing already performed by the
        ALLSTAR task is unchanged.

    File and image name directory information removed from output files
        All the daophot tasks have been modified to strip directory information
        from the image and coordinate file names written to the output files,
        to the terminal, and to the plot headers. The colon commands will still
        read and write full image and coordinate file path names.

  OBSUTIL
        New observing utilities package.  This collects tasks from the NMISC,
        SPECTIME, PROTO, and NLOCAL external package which are useful to
        plan or carry out observations.  The new tasks are:

               PSFMEASURE    STARFOCUS   SPECFOCUS    CCDTIME       
               PAIRMASS      SPTIME      BITCOUNT     FINDGAIN    
               SHUTCOR

  OBSOLETE
        o  Added tasks OIMCOMBINE and OIMSTATISTICS which are the previous
           versions from V2.113b system
        o  Deleted the ODISPLAY task




6. General Task Changes

NOAO
  ONEDSPEC.SPLOT
      Rather than refusing to evaluate errors when there is negative data,
      negative data is treated as zero.

  ASTUTIL.SETAIRMASS
      Modified to have greater flexibility in selecting the keyword defining
      the universal time.  New parameters define the keywords for RA, dec,
      equinox, siderial time, universal time, and astrospheric scale height.

  ASTUTIL.RVCORRECT
      Modified to have greater flexibility in selecting the keyword defining
      the universal time.

  IMRED.ECHELLE.ECIDENTIFY
      Help page describes how to externally evaluate the dispersion fcns.

  IMRED.CCREDRED.COSMISRAYS
      Task was removed (see CRUTIL)

  NPROTO.FINDGAIN
      Task was removed (see OBSUTIL)

  NPROTO.OBJMASKS
      This is a new task for detecting objects in an image and creating
      an output catalog or pixel mask of found objects.

  TWODSPEC.LONGSLIT.FITCOORDS
      - Help page describes the contents of the database and how to ext-
        ernally evaluate the fits.
      - The RMS is shown in the graph title and in the :show output.

  TWODSPEC.APEXTRACT.APEDIT
      When there is just one aperture the background regions are shown
      on the graph without needing to enter the 'b' background mode.


IMAGES

  TV.DISPLAY
      - The mask overlay feature when the displayed image is a reduction of
        mask (e.g. a block average) now uses the maximum of all mask pixels
        within the display pixel.
      - The task will now allow up to 16 frame buffers to be used for the
        display if allowed by the server. (Currently requires XIMtool V1.3).

  TV.IMEXAMINE
      - A new key 't' allows output of a region centered on the cursor as an
        image for further analysis by other programs.
      - The task will now allow up to 16 frame buffers to be used for the
        display if allowed by the server. (Currently requires XIMtool V1.3).
      - Cursor readback will now properly detect the correct image when more
        than one image is displayed per frame, e.g. in a mosaic.  (Currently
        requires XIMtool V1.3).

  IMMATCH.IMCOMBINE
      - New parameters "headers", "bpmasks", "rejmasks",  "nrejmasks", and
        "expmasks" provide additional types of output.  The old parameters
        "rejmask" and "plfile" were removed.  The new "nrejmasks" parameter
        corresponds to the old "plfile" and the new "rejmasks" parameter
        corresponds to the old "rejmask".
      - There is a new "combine" type "sum" for summing instead of averaging
        the final set of offset, scaled, and weighted pixels.
      - There is a new parameter "outlimits" to allow output of a subregion
        of the full output.  This is useful for raster surveys with large
        numbers of images.
      - Additional keywords may appear in the output headers.
      - Scaling is now done relative to the first image rather than an average
        over the images.  This is done so that flux related keywords such as
        exposure time and airmass remain representative.
      - A median calculation was made faster.
      - The previous version is available in the OBSOLETE package.

  IMMATCH.IMCENTROID
  IMMATCH.IMALIGN
      A new parameter maxshift has been added to the imcentroid and imalign
      tasks.  Maxshift defines the maximum permitted difference between the
      predicted and computed shifts. It is used to reject objects whose
      positions have wandered too far from the predicted positions.

  IMMATCH.GEOMAP
  IMCOORDS.CCMAP
      An iterative rejection capability has been added to the geomap and
      ccmap tasks. The new parameter maxiter in combination with the existing
      parameter reject define the rejection parameter. The default value of
      the reject parameter has been changed from INDEF to 3.0. 

      The colon command ":order <value>" has been added to the geomap and ccmap
      tasks. The new command enables the user to change all the order parameters
      simultaneously when experimenting with different fitting functions.

  IMCOORDS.STARFIND
      The starfind task background estimation algorithm has been modified so
      that it no longer depends on the value and density of the central pixel.

  IMCOORDS.IMCCTRAN
      Support for non-zenithal projections has been added to the imcctran task.
      The previous technique of rotating the cd matrix does not work properly
      for these functions. The new parameter longpole was added to imcctran.
      Longpole enables the user to select either the cd matrix or longpole /
      latpole method for transforming zenithal projections.

  IMCOORDS.CCGET
      The new task ccget was added to the imcoords package. Ccget extracts
      objects in a user specified region from a a simple text file catalog.

  IMCOORDS.CCSTD
      The task ccstd was added to the imcoords package. Ccstd transforms pixel
      and celestial coordinates to standard coordinates and vice versa.

  IMUTIL.HEDIT
      The new parameter addonly was added to hedit task. The addonly switch
      is used to add a parameter to the image header only if it does not
      already exist. The addonly switch has a precedence intermediate between
      the add and delete switches.

  IMUTIL.IMSTATISTICS
      An interative rejection capability has been added to the imstatistics
      task. The new parameters nclip, lsigma, and usigma define the rejection
      parameters. A memory cacheing option was also added to imstatistics in
      order to optionally speed up performance if iterative rejection is en-
      abled or the midpt/mode is computed.

  IMUTIL.IMEXPR
      Support for the bitwise operators or (|), and (&), exclusive or (^), and
      not (~) has been added to the imexpr task. The logical operators or (||)
      and and (&&) have ben made truly logical i.e. they return 0's or 1's,
      rather than results of a bitwise or and and.


PROTO
  MIMSTATISTICS
      The new task mimstatistics has been added to the proto package.
      Mimstatistics does image statistics through a mask.

  RSKYSUB
      The new task rskysub was added to the proto package. Rskysub does a
      running mean or median sky subtraction on an ordered list of images
      using optional background scaling and object masking.

  MSKEXPR
      The new task mskexpr has been added to the proto package. Mskexpr
      creates a new mask from a user supplied expression, an optional
      reference image, and an optional reference mask.

  MSKREGIONS
      The new task mskregions has been added to the proto package. Mskregions
      creates a new mask or modifies an existing mask using a list of region
      definitions or region expressions.


XTOOLS
  SKYWCS
      A new library skywcs has been added to the xtools package. The skywcs
      library is a set of routines for managing image and catalog celestial
      coordinate systems and for transforming from one celestial coordinate
      system to another.  Skywcs is layered on the Starlink Positional
      Astronomy library slalib which is installed in the iraf math package.

  CATQUERY
      A new library catquery was added to the xtools package. The catquery
      library is a set of routines for doing local and remote catalog and
      image survey access.

SYSTEM
  HELP
      Task was modified to call the XHELP code to run the GUI version of
      the task if requested.  Task output is the same if the device
      remains the default 'terminal' value, however resetting the 'device'
      parameter to one of 'gui', 'html', or 'ps' will either spawn the GUI
      task under xgterm or print the converted help page to the stdout.

  LROFF
      The task was enhanced with a new 'format' parameter that allows the
      text to be formatted as one of: plain-text, HTML, or Postscript. 




7. Parameter File Changes

In the tables below each parameter change is identified with one of  the
following codes followed by task name and the description of the change.
   * n = new parameter
   * c = changed/modified parameter
   * d = deleted parameter


CL
  n cl                      Added the new CL parameter "release".  This
                            is a string valued parameter with values such
                            as "2.11.3a", "2.12", "3.0" etc.  This differs
                            from "version" which is a descriptive string
                            such as "NOAO/IRAF V2.11.3 EXPORT".  There can
                            be multiple releases of one version of the
                            software, and "release" specifies exactly what
                            build the software is.  The release strings are
                            composed in such a way that they can be used
                            in expressions, e.g. (release >= 2.11.3) would
                            be true for IRAF V2.11.3 and all subsequent
                            releases.

DATAIO
  c dataio.export           Made the 'format' parameter automatic mode
  c dataio.import           Made the 'format' parameter automatic mode

IMAGES
  n imcoords.imcctran       Added a new parameter longpole to the imcctran
                            task. If longpole=yes then coordinate transfor-
                            mations with zenithal projections will be rot-
                            ated using longpole rather than the CD matrix.

  c immatch.wregister       Fixed boundary option typo, "refect" to "reflect".
  c immatch.sregister       Fixed boundary option typo, "refect" to "reflect".

  n immatch.imcentroid      Added a new parameter maxshift to the imcentroid
    immatch.imalign         and imalign tasks.  Maxshift is the maximum perm-
                            itted difference between the computed and predicted
                            shifts. Maxshift can be used to reject objects whose
                            centers have wandered too far from the expected
                            center. By default maxshift is undefined.

  n immatch.geomap          Added a new parameter maxiter to the geomap and
    immatch.ccmap           ccmap tasks. Maxiter defines the maximum number of
                            rejection iterations and has a default value of 0
                            for no rejection.  

  c immatch.geomap          Changed the default value of the ccmap and geomap
  c immatch.ccmap           parameter reject from INDEF to 3.0.

  c immatch.imcombine       Numerous changes, see details above

  c imgeom.imlintran        Changed the nrows argument names to nlines 


  n imutil.hedit            Added a new addonly parameter to the hedit task. If
                            addonly is set a new field will only be added to
                            the image header if it does not already exist.

  n tv.imexamine            Added new parameters 'output', 'ncoutput', and
                            'nloutput' used by the new 't' keystroke when
                            outputting an image section centered on the cursor.

SYSTEM
  n help                    New parameters required for GUI options, output
                            formats for HTML/PS, printer, etc.
  n lroff                   Added new 'format' parameter for HTML/PS output 

UTILITIES

  c utilities.surfit        Added support for the half cross-terms option to
                            the surfit task.  This involved changing the type
                            of the xterms parameter from boolen (yes/no) to
                            string (none,half,full).

NOAO

  ASTUTIL
    n astutil.setairmass    new parameters ra, dec, equinox, st, ut, scale

  DIGIPHOT
    n apphot                new package parameters wcsin, wcsout, and cache
    n apphot.center         new parameters wcsin, wcsout, cache
    n apphot.daofind        new parameters wcsout, cache
    n apphot.fitpsf         new parameters wcsin, wcsout, cache
    n apphot.fitsky         new parameters wcsin, wcsout, cache
    n apphot.phot           new parameters wcsin, wcsout, cache
    n apphot.polymark       new parameters wcsin, wcsout, cache
    n apphot.polyphot       new parameters wcsin, wcsout, cache
    n apphot.qphot          new parameters wcsin, wcsout, cache
    n apphot.radprof        new parameters wcsin, wcsout, cache
    n apphot.wphot          new parameters wcsin, wcsout, cache

    n daophot               new package params wcsin, wcsout, wcspsf, and cache
    n daophot.addstar       new parameters wcsin, wcsout, wcspsf, and cache
    n daophot.allstar       new parameters wcsin, wcsout, and wcspsf
    n daophot.daoedit       new parameters cache
    n daophot.daofind       new parameters wcsout, and cache
    n daophot.group         new parameters wcsin, wcsout, wcspsf, and cache
    n daophot.nstar         new parameters wcsin, wcsout, wcspsf, and cache
    n daophot.peak          new parameters wcsin, wcsout, wcspsf, and cache
    n daophot.phot          new parameters wcsin, wcsout, and cache
    n daophot.psf           new parameters wcsin, wcsout, and cache
    n daophot.substar       new parameters wcsin, wcsout, and cache


  ONEDSPEC
    n standard              new parameter mag, magband, and teff.  These 
    n splot                 params can be use to specify calibration files
    n lcalib                as blackbody curves scale to a specified magnitude

  TWODSPEC
    c apextract.apall1      Reduced the 'polysep' parameter.
    c apextract.apdebug     Reduced the 'polysep' parameter.
    c apextract.apfit1      Reduced the 'polysep' parameter.
    c apextract.apnoise1    Reduced the 'polysep' parameter.
    c apextract.apnorm1     Reduced the 'polysep' parameter.
    c apextract.apparams    Reduced the 'polysep' parameter.





8. Details of Major System Changes



8.1 FITS kernel changes
        The FITS kernel was modified to add support for storing images in
    extensions as compressed pixel masks.  The mask is stored as a binary
    table using the "ZIMAGE" (compressed image) convention proposed by White,
    Greenfield, Pence, and Tody in 1999:

            http://heasarc.gsfc.nasa.gov
            /docs/software/fitsio/compression/compress_image.html

        In the current implementation only the "PLIO_1" compression
    algorithm is implemented.  Mask extensions may be read or written directly
    by the kernel.  When writing a new extension it will be appended to the
    MEF file.  To append an image to a MEF file as a mask, include "type=mask"
    in the image kernel section when the output image is opened.

        Masks are interfaced to the system as images and may be read and
    written like any other image via IMIO.  They have a normal image header
    and can be manipulated with any program that deals with images.  The pixel
    type is INT.

        It is also possible to access a mask image as a PLIO mask.  An
    IMSTATI query for IM_PLDES parameter will return the PLIO mask descriptor.
    While a mask extension is opened under IMIO it is represented as a PLIO
    mask and may be accessed in this form like any other mask.

        The mask image is stored in the FITS binary table (BINTABLE)
    extension when the image is closed, and is loaded from the extension when
    the image is opened.  The compression representation used to store the
    mask in the binary table is the same as is used within PLIO.  The new
    (V2.12) encoding is used, allowing very large masks to be stored.
    Currently masks up to 3D are supported.  Data on each 2D mask plane
    will be compressed in both X and Y as with PLIO.  The depth of the mask
    is preserved.

        Although a mask is stored as a binary table the format of the
    table is not completely general.  In the current implementation there
    can be only one column in the table (COMPRESSED_DATA).  This is an
    integer-valued variable length array column containing, for each line of
    the N-dimensional image, the PLIO compressed version of that image line.
    The actual compressed data is stored in the heap area of the table.
    Multiple image lines may point to the same compressed line list, e.g.,
    to store the empty line or to compression in Y.




8.2 Large Image Support

        The  following  changes  were  made to enable IMIO to use larger
buffer sizes to optimize i/o for large images:

        The default file buffer size set by IMIO is unchanged: it is still
    about 512 MB, the value set for V2.11.2.  However, a new parameter
    IM_BUFFRAC was added.  Both IM_BUFSIZE and IM_BUFFRAC are used to help
    determine the FIO buffer size set when an image is opened.  The logic
    for this is implemented in imsetbuf.x.

        Backwards compatibility.  If you do nothing about IMIO/FIO buffers
    in your program, the system may transparently use a larger buffer for
    larger images.  If you set BUFSIZE in your program, the system will
    by default use the value you give, or possibly a larger value, if the
    image you are accessing is very large.  If you set BUFSIZE and you want
    to guarantee that the value you set is used (even for very large images)
    then you should also set BUFFRAC=0 to ensure that only BUFSIZE is used.

        How it works.  BUFFRAC specifies the default FIO buffer size used to
    access an image, expressed as a percentage of the size of the image.
    For example, the builtin default value of BUFFRAC=10 will try to make a
    FIO buffer 10% of the size of the image.  The actual value used will be
    given by BUFFRAC, but will be at least BUFSIZE, and no more than a builtin
    default maximum value, currently 32 MB.  Given the builtin defaults,
    the buffer size will range from 0.5 to 32 MB depending upon the size of
    the image being accessed.  As noted above, BUFSIZE and BUFFRAC can be
    set to force the buffer size to a specific value if desired.

        Environment variables for both parameters are provided.  The names
    are "IMIO_BUFSIZE" (specified as bytes) and "IMIO_BUFFRAC" (specified
    as a decimal fraction).  If defined, these override (at image open time)
    the builtin default values for both parameters.  An IMSET call by the
    application will override all such defaults.

        The FIO buffer allocated will not be larger than the size of the
    image.  The FIO buffer will also not exceed the maximum size set by
    the file driver being accessed.  For example, for PLIO images the file
    buffer will not exceed about 2KB, even for a very large mask.  This is
    because the "pixel file" for a PLIO image is dev$null, the driver for
    which specifies a maximum i/o buffer size of 2K (the real file to load
    or save the mask will use a different descriptor).

        The intent here is to provide an adaptive mechanism for setting the
    FIO buffer size used to access an image, which automatically adapts to
    the size of the image being accessed.  If you access a lot of small
    images you will get smaller buffers - everything will be as before.
    If you access very large images, you may get large buffers up to the
    builtin maximum value of (currently) 32 MB.

        Using large buffers could cause a machine to run out of memory.
    However, it is likely that if someone is working on 300 MB images
    that they are using a machine which has a memory at least that large
    - probably larger.  If there are problems, the environment variable
    overrides can be used to tune IMIO.

        The reason for large file buffers is to limit the number of disk
    data transfers, and hence the number of disk seeks.  Using buffers larger
    than a certain amount (32 MB is generous) is probably counterproductive.
    If the i/o system provides 20 MB/sec i/o transfers, 32 MB will take
    1.6 seconds.  This should be more than a large enough granularity to
    provide efficient i/o, hence is a reasonable limit (at this point paging
    effects are likely to dominate).



8.3 Virtual Memory Cache

        The VMcache client interface and  daemon  provide  a  method  by
which  data-intensive IRAF tasks (or non-IRAF tasks for that matter) can
manage how files/images  are  maintained  in  virtual  memory  to  avoid
excessive  system  paging.   In  essence it's a way to "lock" a specific
image in memory to improve performance.  As of this release no tasks  in
the  system  have  been  modified  to  make  use  of the VMcache daemon,
however installing it in the system at this point provides  a  framework
for future applications and systems development.

        The  following notes summarize the changes made for this feature
and describe it's function in more detail.  A more complete  description
of  the  interface,  environment  variables which control it, etc can be
found in the main systems revisions file iraf$local/notes.v211.

        The source for the developmental version of the VMcache library
    and the VMcache daemon (vmcached) have been installed in the
    unix$boot tree and the HSI binary file driver was modified to add VMcache
    client support.  This adds two new capabilities to the driver: 1)
    built-in support for direct i/o (on systems that support it), and 2)
    a client interface to the VMcache daemon to permit the daemon to
    optimally manage binary file i/o if a VMcache daemon is present.

    The vmcached code is complete but only enough debug/testing was done to
    support development of the VMcache client interface for IRAF (the vmcached
    code is debugged but the new version of the vmcache library code has
    not been tested).  Since the daemon can be utilized outside the normal
    IRAF release we do not have to fully develop it for the release.

    It should be stressed that VMcache is only useful or warranted for
    systems that are very data intensive.  The standard host operating
    system file access heuristics are best for "normal" processing where
    either the system is not really busy, or the datafiles are not
    excessively large.  On systems with very large physical memories
    where massive amounts of data are being processed, VMcache can make
    a significant difference in overall system performance.

    VMcache is too complex to document here.  Without going into the
    details, its function is to manage a cache of files in system
    virtual memory.  Files can be explicitly cached or uncached, or they
    can be "accessed", and VMcache will decide whether or not to cache
    the file in virtual memory.  This is what the VMcache client
    interface does: every time it accesses (opens or extends) a file
    larger then the VM threshold it sends an "access" directive to the
    VMcache daemon.  The daemon sends back a response of 0 (file not
    cached; use direct i/o to access the file), or 1 (file cached in VM;
    use normal VM-buffered i/o to access the file).  Even if a file is
    not cached the daemon keeps track of all accesses.  Files which are
    frequently accessed will have a higher prority and are more likely
    to be cached in memory.

    The VMcache daemon is a separate system-level program outside of
    IRAF.  This is necessary to provide a central system-wide cache
    controller.  It also provides flexibility, allowing multiple
    versions of the daemon to exist, e.g., to allow experimentation with
    different types of caching algorithms.  It also allows easy
    customization of the daemon independently of the IRAF applications
    using the VMcache client interface.




8.4 New Developer Libraries

    o Several new libraries are now available for developers:

      PSIO      New Postscript text generation library installed in the
                sys$psio.  The PSIO interface is used to format a block of
                text as Postscript output on a page of a given size (Letter,
                Legal, A4 or B5).  See the psio$README file for details.

      CATQUERY  Remote astrometric/photometric catalog access lib installed
                in the XTOOLS utility library.  
                  The catquery package provides a set of routines for local
                and remote catalog and image survey server access.  The sup-
                ported catalogs and image surveys are described in records
                stored in a catalog and image survey configuration file
                respectively. The catalog and image survey records specify
                the network address, the query format, and the output format
                for each supported catalog or image display server.  See
                "help catalogs" and "help surveys" for details.

      SKYWCS    Sky coordinate transformation library installed in the XTOOLS
                utility library.
                  The skywcs package contains a simple set of routines for
                managing sky coordinate information and for transforming from
                one sky coordinate system to another. The sky coordinate
                system is defined either by a system name, e.g.  "J2000",
                "galactic", etc., or by an image system name, e.g. "dev$ypix"
                or "dev$ypix world".




9. System Changes Which May Affect You

   * SHARED LIBRARY VERSION INCREMENTED (Sun/IRAF only)
        The IRAF shared library for SunOS and Solaris platforms has been
        incremented with this release due to the nature of various system
        changes.  Existing IRAF binaries (e.g. locally written software
        or external packages) will continue to run using the old shared 
        image, however they will need to be recompiled against V2.12 in order
        to pick up the numerous system bug fixes and features in this release.
        In particular, pixel masks produced by V2.12 IRAF tasks may be 
        incompatible with external packages which have not been recompiled.

   * EXTERNAL PACKAGE RECOMPILATION
        The V2.12 release contains changes to the FIO and PLIO/PMIO interface
        header files used by numerous applications.  Relinking of an external
        package may fail to pick up these changes and not recompile a source
        file which uses one of these header files if the mkpkg file doesn't
        correctly list all of the dependencies (nearly all packages have one
        or more mkpkg files which have this problem).  In the worst cases 
        this could lead to a runtime error due to the incompatibilities.

        For this reason we recommend that all packages and local tasks be
        recompiled (completely from source* (rather than simply relinked
        against the new version) to assure that all changes and new features
        will be included.  Recompilation also guarantees that packages can
        take advantage of some of the larger buffer sizes and optimizations
        in this release.  Site support can supply a list of missing mkpkg
        dependencies for most external packages being developed outside NOAO
        that wish to fix these files for a future release.  

   * PARAMETER FILE CHANGES
        As with all major releases, we recommend that you do a MKIRAF and
        delete all your old parameter files after the IRAF upgrade. You may
        choose not to do this if you are in the midst of a project and have
        setups that may be difficult to reproduce. 

        The automatic parameter file update/merge mechanism, which is used
        if you do not initialize your parameters with MKIRAF, is based on
        file date comparisons.  If you run IRAF V2.11 after V2.12 has been
        installed, the file dates on your uparm parameter files will be
        more recent than the V2.12 installation date.  If you then try to
        run V2.12, the automatic parameter file merge/update will fail due
        to the file dates.  The system only updates personal parameter
        files which are older than the update date of the system.  A
        MKIRAF avoids the problem if you delete your parameter files,
        causing them to be updated from the system default versions.

   * INSTALLATION SCRIPT CHANGES
        As the first step of an ongoing effort to simplify the installation
        and system configuration, the IRAF install script was rewritten to
        do some error-checking of the iraf setup, present a simplified and
        easier to read output, and do some common post-install configuration
        of the system.  Additionally, the SYSINFO diagnostic script for
        finding system errors and reporting on the configuration, and a new
        UNINSTALL script for removing IRAF files/links from the system have
        also been installed.  The old install script is still available as
        a fallback in case problems with the new script are found.

   * HELP SYSTEM CHANGES
        The HELP task was modified with several new parameters controlling
        the display and formatting of the help pages.  Help may now be
        presented as formatted text (as before), HTML, or fully formatted
        Postscript.  Additionally, users running under an XGterm window can
        use the task in a new GUI mode.  The help GUI allows users to browse
        the help system and easily search for tasks/topics using a familiar
        web-like interface.  The GUI mode is not the default, but can be
        enabled easily using the 'device' parameter.

   * IMAGE DISPLAY CHANGES
        Tasks which display images or interact with the image display were
        modified to take advantage of new features added to XImtool V1.3
        (e.g. the multiple WCS and pixel-value readouts and 16 display frame
        buffers).  These changes were done in a backwards compatible way so
        interaction with display servers such as SAOimage, SAOtng, DS9, or
        older XImtool versions should be unaffected.  If problems are dis-
        covered a CL environment variable 'disable_wcs_maps' can be defined
        to force all of the old behaviors.  These changes do not add any new
        functionality to the tasks themselves, only the underlying display
        protocols.

  * PLIO Changes
        The LEN and BLEN fields of the encoded line list (LL) descriptor
        would limit the length of a pixel area (and hence the size of a
        pixel mask) to the max size of a signed short, 32768.  This was due
        to the use of a simple array of type short to encode the line list
        (which simplifies handling considerably).  Nonetheless the limit to
        32K was unacceptable.  The fix adopted was to increase the LL header
        from 3 to 7 words.  Two 16 bit words are now used to encode each of
        LEN and BLEN.  A "version" word was added to allow the old, new, and
        future encodings to be distinguished.  A "hdrlen" word was added to
        parameterize the length of the LL header, rather than fix it at
        compile time as in the initial version.  With this change, the
        maximum length of an image line under PLIO is increased from 32768
        to 1073741824 (32768*32768).  All the higher level PLIO code is
        integer, so should already support larger masks.

        This was done in such a way that old line lists can still be read,
        although PLIO will always write out new format line lists (pixel
        mask files and images, QPOE, and MWCS all store encoded line lists
        in external storage, so backwards compatibility is important; also
        existing complied programs will continue to generate the old
        format).  The cost is 8 bytes per encoded line list.  For most masks
        this should only increase the size of the mask by a few percent at
        most.

   * NEW ENVIRONMENT VARIABLES
        The following new environment variables may be defined to tune the
        size of the system file i/o buffers used by the image i/o system.
        The system will automatically adjust to use larger buffers when
        accessing larger images, these variables may be set to further
        optimize the buffers

          IMIO_BUFSIZE      Size of the FIO buffer size in bytes.

          IMIO_BUFFRAC      FIO buffer size expressed as a percentage of 
                            the image size.  Actual value will be at least
                            BUFSIZE and no more than BUFMAX.

          IMIO_BUFMAX       Max size of FIO buffer which will override the
                            32Mb default.


        Other miscellaneous environment variables:

          disable_wcs_maps  If defined or set to 'yes', this variable will
                            force any tasks which interact with the image
                            display to use the old protocols.

          pspage            Variable which is used by the PSIO interface to
                            set the default page size.  Acceptable values
                            include "letter" (the default) for US Letter,
                            "legal" for US Legal, and "a4" and "b5" for the
                            most common European sizes.  Pspage can be used
                            by the new HELP and LROFF tasks to automatically
                            set the desired Postscript page size. 

IRAF (Aug97)             V2.11 Revisions Summary            IRAF (Aug97)



                      IRAF V2.11 Revisions Summary
                            August 27, 1997

Introduction

    Modifications and additions to IRAF V2.11EXPORT, compiled since the last
documented  release of IRAF, V2.10.3, are summarized below.  V2.11EXPORT is
a major release of IRAF and  will  be  available  for  all  supported
platforms.   These  release notes provide a summary of the major changes in
V2.11.  More detailed technical documentation of all  system  changes will
be  found  in  the "notes.v210" and "notes.v211" files in the iraf$doc and
iraf$local directories.

    1. Things to be aware of or watch out for
        1.1. Parameter file changes 
        1.2. Networking change
        1.3. Image format change 
        1.4. FITS kernel
        1.5. RFITS/wfits changes 
        1.6. Merged SunOS and Solaris IRAF systems 
        1.7. Tape access 
        1.8. Default magnitude zero changed

    2. IMAGES package changes

    3. Major system changes
        3.1. New FITS image kernel (FXF)
        3.2. Changes to the IRAF native image format (OIF)
        3.3. IMFORT changes
        3.4. Environment variables
        3.5. New intrinsic functions
        3.6. System default modifications
        3.7. Libraries added
        3.8. Graphics changes
        3.9. FITS-related core-level task changes
        3.10. General changes

    4. New tasks, or old tasks moved to new packages

    5. Task and package deletions

    6. Modifications to old tasks

    7. Parameter file changes


The IRAF V2.11 release notes can also be found online on the Internet at
the URL http://iraf.noao.edu/v211revs.html.


1. Things to be aware of or watch out for


1.1 Parameter file changes 

Since this is a major release we recommend that  you  do  a  mkiraf  and
delete  all  your  old parameter files. You may choose not to do this if
you are in the midst of a project and have setups that may be  difficult
to  reproduce.   Old  IMAGES  package  parameter files will no longer be
recognized, however, because of  the  package  reorganization  mentioned
below.   Generally,  old  parameter  files are merged automatically with
any new parameter files if there have been any changes, but  if  you  do
have  problems you will need to unlearn the task before you can proceed.
A list of the parameter file changes appears below and you may  wish  to
check this list to see how this will affect your setups.

The  automatic  parameter  file update/merge mechanism, which is used if
you do not initialize your parameters with mkiraf, is based on file date
comparisons.   If you run IRAF V2.10 after V2.11 has been installed, the
file dates on your uparm parameter files will be more  recent  than  the
V2.11  installation  date.   If you then try to run V2.11, the automatic
parameter file merge/update will fail due to the file dates.  The system
only  updates  personal  parameter files which are older than the update
date of the system.  A mkiraf avoids the  problem  if  you  delete  your
parameter  files,  causing  them  to  be updated from the system default
versions.


1.2 Networking change

The "set node = foo" syntax, used to enable remote image  display  under
IRAF   networking,  has  changed.   The  new  syntax  requires  that  an 
exclamation be appended to the node name as in the example  below  (this
dates  back  to  V2.10.4 so many users will already be familiar with the
feature).

        cl> set node = "orion!"


1.3 Image format change 

The internal IRAF image format (.imh images) has  changed.   V2.11EXPORT
can  read  the old image format but the new image format is not readable
by V2.10.4 or earlier versions.  This means that you can not  easily  go
from  the  new  IRAF  system  (V2.11) to an old one (V2.10.4 or earlier)
unless you first convert the V2.11 IRAF images to FITS files.  All  your
old  V2.10.4 or earlier images are readable by V2.11EXPORT.  The benefit
is that the new image  format  is  machine  independent,  slightly  more
storage   efficient,  and  supports  long  file  pathnames.   If  it  is 
necessary to be  able  to  read  images  written  by  V2.11  with  older
software,  V2.11  can  be  made  to  write  the old IRAF image format by
setting the oifversion environment variable, e.g., "set oifversion =  1"
(the default is version 2).  See below for details.


1.4 FITS kernel

A  FITS  image  kernel  is available in V2.11, allowing runtime read and
write access to FITS files on disk.  There are many related  changes  to
IRAF  image  i/o  and  FITS  support.  More information on the new image
kernel, and on the expanded FITS support available in  V2.11,  is  given
below.


1.5 RFITS/WFITS changes 

rfits  and  wfits  have  been  modified  to support multi-extension FITS
files.  The extension numbering convention used is the same  as  in  the
FITS  image  kernel.   As  a result, users who read simple FITS files on
disk with a command such as  "rfits diskfilename 1 foo" will  find  that
this  no  longer  works  -  instead use "rfits diskfilename 0 foo".  See
below for details.


1.6 Merged SunOS and Solaris IRAF systems 

A single installation of Sun/IRAF will now simultaneously  support  both
SunOS  and Solaris (previously separate IRAF distributions were required
for each).


1.7 Tape access 

The "tapecap" mechanism has changed.   The  system  now  looks  for  the
filename  "tapecap.<node>"  followed  by the default "tapecap".  <node>:
should be the hostname (as  used  by  IRAF  networking)  of  the  server
hosting  the  tape drives described by the tapecap file.  For example if
host "gemini" serves up some tape drives  it's  tapecap  file  is  named
"tapecap.gemini".   If  a  server-specific tapecap file is not found the
default "tapecap" (on the possibly remote server node)  is  used.   This
feature  allows  a  single  IRAF  installation  to be shared by multiple
servers.


1.8 Default magnitude zero changed

The default APPHOT magnitude zero point has been changed  from  26.0  to
25.0  to  bring it into agreement with the DAOPHOT package default value
and thereby avoid confusion for users who switch back and forth  between
packages.   The  affected  APPHOT  tasks  are  phot, photpars, polypars,
polyphot, qphot, radprof, and wphot.  The APPHOTX package in  the  addon
DIGIPHOTX  package will retain the old zero point values until IRAF 2.11
is released after which they will be updated.

The default value of the magzero  parameter  in  imexamine  was  changed
from 30.0 to 25.0 for consistency with the DIGIPHOT package.


2. IMAGES package changes

The  IMAGES  package  has  been  reorganized  by  function  into  the  7 
subpackages listed below.

      imcoords - Image coordinates package
      imfilter - Image filtering package
         imfit - Image fitting package
        imgeom - Image geometric transformation package
       immatch - Image matching and combining package
        imutil - Image utilities package
            tv - Image display utilities package

The new IMAGES package contains a total of 82 tasks,  including  26  new
tasks  from  the  IMMATCH  and  VOL  external addon packages, 6 existing
PROTO package  tasks,  and  1  existing  NOAO.PROTO  package  task.  The
undocumented  IMAGES  package  IMDEBUG and its 6 tasks have been deleted
from the IMAGES package.  User should  use  the  tasks  in  the  ARTDATA
package instead.

This  reorganization  of the IMAGES package should be mostly transparent
to the user and not affect any existing scripts, unless you  were  using
any  of  the  6  deleted  tasks.  By default, the IMAGES subpackages are
automatically loaded when you log in to  the  CL.  Old  parameter  files
will not be recognized since the package names have changed.


3. Major system changes


3.1 New FITS image kernel (FXF)

V2.11  introduces  a  new  image kernel providing runtime access to FITS
multi-extension image datafiles.  What this means  is  that  IRAF  tasks
can now read and write FITS images directly at runtime.  The native IRAF
image format (used by images  with  the  .imh  extension),  remains  the
default  as it is the most efficient and well-tested format.  IMH, FITS,
and  the  other  types  of  images  supported  by  IRAF  can   be   used 
interchangeably in most IRAF tasks.  Although we have extensively tested
the new FITS image kernel, it is still evolving, is complex,  and  still
has some bugs.  Users should use it with caution.  Please let us know of
any problems.

Besides support for classical FITS images,  the  new  FITS  kernel  also
supports  multi-extension FITS files: several FITS files packed into one
large file with a PHU (Primary Header Unit) that contains global  header
information  shared  by the other files.  Multi-extension FITS files are
0-indexed, with the PHU being 0 and the first image extension (or  other
data  extension)  at  index  1.   If there is no PHU then the first FITS
image is 0 and there is no global header.

For further details about the FITS kernel please see the new FITS Kernel
User's Guide by Nelson Zarate.


3.2 Changes to the IRAF native image format (OIF)

   o It was necessary to change the IRAF image format to increase the
     maximum path length for header and pixel files.  This made it necessary
     to change the disk image format, since the old format only allowed 80
     characters for the pixel file pathname.  The path lengths can now be up
     to 255 characters.

     Support for two versions of the image and pixel file headers was added.
     V2.11 will read both the old image format (V1) and the new image format
     (V2). But the new image format is not readable by older versions of IRAF.

   o Native format IRAF images (OIF type or extension ".imh") are now machine
     independent, for example, a PC and a Sun can now access the same images.

   o Support was added for byte swapping pixels. With the machine independent
     image header, this allows .imh images to be read on any node (integer)
     or any IEEE-compatible node (floating).

   o Some pointers: "strings foo.imh" (or other tools like the "less" file
     viewer) can be used at the Unix level to look at the text contained in
     the new V2 OIF image headers.


3.3 IMFORT changes

   o IMFORT was brought up to date to read and write the new V2 ".imh" images.
     The old V1 format is still supported but new images are written using
     the new machine independent V2 format by default.

   o Image headers can now be any size (the old IMFORT had a fixed, relatively
     low, limit on the image header size).

   o The "min_lenuserarea" variable is now supported by IMFORT (since IMFORT
     is host level the variable must be defined in the host environment).
     The builtin default header buffer is 64000 chars, which is about 800
     card images.


3.4 Environment variables

Several new environment variable have been added to the system.

   o The new environment variable imextn determines the image kernels
     (image file formats) recognized by IRAF and defines the mapping of
     imagefile extensions to these image formats.  A file that does not have
     an extension listed in imextn may not be recognized as an image by all
     IRAF tasks.  The default value of imextn is as follows:

          imextn = "oif:imh fxf:fits,fit plf:pl qpf:qp stf:hhh,??h"

     IRAF tasks will not recognize a file as an image unless it has an
     extension (except rfits which will read FITS files on disk that
     have no extensions).  The rename task can be used to add
     extensions to image files if needed. "imextn" can be redefined (use
     reset imextn = "new-value") to modify the mapping of extensions to
     image types.

     The meaning of the fields of the default "imextn" are as follows.  Each
     substring corresponds to a single kernel. The "xxx:" is the internal
     name of the image kernel, i.e. "oif", "fxf", "plf", etc.  A comma
     delimited list of the extensions, or extension patterns, associated with
     that image format follows the colon.  For example, for the FITS image
     kernel, the internal kernel name is "fxf" and the system default file
     extensions are ".fits" and ".fit".

        - oif:imh - The original (native) IRAF image format.

        - fxf:fits,fit - The FITS image extension format, which supports
          classical FITS images as well as multi-extension FITS files.

        - plf:pl - The pixel list format used for compressed pixel masks.

        - qpf:qp - The QPOE image format for event list data (typically
          X-ray or other high energy data).

        - stf:hhh,??h - The Space Telescope runtime GEIS image format.

     Users can define extensions for the fxf and stf kernels. For example,
     if you have FITS files on disk that have a .ft extension then you can
     reset imextn so that IRAF will recognize these image extensions:

          cl> reset imextn="fxf:ft"

     The new .ft extension for the FITS kernel images will now override the
     default values - the other kernels remain unchanged. ".fits" will no
     longer be recognized as a FITS file unless you include it in the list
     of extensions for the "fxf" kernel.

     The first extension given for a kernel defines the default file
     extension for new images of that type (rather than e.g. the value of
     imtype, or a builtin default).

     The value of "imextn" is only read once when a process starts up. Hence
     it is advisable to do a "flpr" (flush process cache) after changing
     this variable, to force all processes to re-read it.

   o The environment variable imtype defines the default image type for
     new images created by IRAF.  If a file extension is given explicitly
     when creating a new image then this file extension, in combination with
     the "imextn" mappings, determines the type of the new image.  Otherwise
     the type is determined by the value of "imtype".  Typical values are
     "imh" for native IRAF images, or "fits" for FITS images.  The internal
     kernel name documented above for "imextn" can be used instead of a file
     extension to ensure that the desired image format is used regardless of
     what extensions are assigned to that type by imextn.

     The default value of imtype is "oif,noinherit" which means that the
     IRAF native format is the default for all new images, regardless of the
     type of the input image (i.e. do not "inherit" the input image type).
     "inherit" was the default in V2.10 and earlier versions of IRAF.

     For example, if you wish to use FITS as the default for new images you
     can set imtype=fits as follows:

            cl> reset imtype="fits"
            cl> flpr                  % needed before the next task execution

     Assuming "imextn" defines ".fits" as a valid file extension for FITS
     imagefiles (kernel "fxf"), all new images produced by IRAF will be FITS
     files with the extension .fits unless some other extension is given
     explicitly when creating a new image.

            cl> reset imtype = "imh,inherit"

     This example sets the default type for new images to ".imh" for native
     format images, but enables image type inheritance.  By default new
     images will be of the same type as the input image.  For example if a
     FITS image is being read another FITS image will be output, or if a
     pixel mask is being read a pixel mask will be created.

     You can override the default output image type specified by imtype by
     giving an image extension (as defined by imextn) explicitly in the image
     name, e.g. "pix.imh", "pix.fits", "pix.pl" and so on.

   o A new environment variable called imclobber has been added.
     The default value is set to no. If imclobber is set to yes, images
     can and will be overwritten, without warning, when you create new
     images.

   o The original IRAF image format (OIF) kernel now supports an environment
     variable oifversion which, if defined, specifies the file
     version for new OIF images (for example, oifversion=2 produces the
     new format, or version 2 images).  By default the variable is undefined,
     the builtin OIF default will be in effect, and new-format images will
     be generated.  This variable is provided only for backwards
     compatibility, e.g., when using V2.11 IRAF with old software which
     cannot easily be updated.


3.5 New intrinsic functions

Two  new  intrinsic functions were added to the CL, imaccess and defvar.
imaccess tests whether an image exists, e.g.,  (imaccess("dev$pix"))  or
(imaccess(foo.fits[3])).   defvar  tests whether an environment variable
exists, e.g. (defvar("imextn")).


3.6 System default modifications

   o The default size of the user area (min_lenuserarea) was increased
     to 64000 (about 800 80 character cards).  There was some ambiguity about
     units for min_lenuserarea; it should be consistently characters now.

   o The maximum number of open IRAF logical files was increased from 128 to
     256. This is good news for imcombine users.

   o Various buffer limits were increased:

        - The IRAF line length was increased from 161 to 1023 characters.
          One often ran into this lower limit when entering a long list of
          input image names, for example.

        - CL commands can now be 2047 characters long (the old limit was
          1024) - this is particularly useful for scripts.

        - IRAF file names can now be up to 255 characters long.

        - Expanded file names (pathnames) can be up to 511 characters long.


3.7 Libraries added

The Starlink positional astronomy library SLALIB was added to  the  math
package.


3.8 Graphics changes

   o SGI Translator change: Modified the header ID string produced by
     sgi2uapl to be "%!PS", this is required by certain models of printers.

   o Installed graphcap support for the STSDAS PostScript graphics kernel.

   o The SGI graphics kernel was upgraded with a better roman font, and a
     new greek font was added. To use the new high-quality greek fonts use
     the "\fG" escape sequence when you use the "T" keystroke to mark text
     in a plot, e.g., \fGa Hydra would produce " Hydra". The greek font
     may also be used in label parameters for tasks like GRAPH, for example

             cl> graph dev$pix xlabel="Wavelength\\fG(A)"

     would produce an Angstrom symbol in parenthesis.  The double backslash
     is necessary to pass the escape string thru the CL.  A file containing
     the mappings for the greek fonts and other special characters can be
     found at http://iraf.noao.edu/greek.ps.


3.9 FITS-related core-level task changes


3.9.1 IMHEADER

The  behavior of imheader has changed a bit - typed with no arguments it
will list all the images in the current directory, as in  the  following
example:

            cl> imhead
            pix4.imh[512,512][short]: m51  B  600s
            boc.fits: FXF: must specify which FITS extension (boc.fits)
            fits.fits[512,512][short]: m51  B  600s
            pix.fits[512,512][short]: m51  B  600s
            pix3.fits[512,512][short]: m51  B  600s
            pix5.fits: FXF: must specify which FITS extension (pix5.fits)
            zero.fits: FXF: must specify which FITS extension (zero.fits)
            mask.pl[512,512][int]: m51  B  600s
            foo.qp[1024,811][int]:

The  multi-extensions  FITS  files  show up in the list with the message
"FXF: must specify which FITS  extension",  since  these  files  contain
multiple  images  and  the task does not know which image to open to get
header information.

At present imheader does not use "imextn" to determine what  is  and  is
not  an  image.  The  parameter  "imlist"  defines  the  valid imagefile
extensions. If imextn is modified "imlist" may need to  be  modified  as
well.


3.9.2 RENAME

The  rename  task  was  modified  to allow a destination directory to be
specified without changing the filename.  A new "field" parameter option
"all"  was  added and made the default so the entire filename is changed
(or moved in the case of a destination directory).  When  field  is  set
to "extn" filenames without an extension will not have the new extension
appended so a filename isn't generated which can get overwritten.


3.9.3 rfits/wfits

Some changes were also implemented in rfits and  wfits  to  add  support
for multi-extension FITS files.

   o The default action of wfits when writing to tape is unchanged for
     single image files.

     wfits now has a new parameter called "fextn" and it is set to
     "fits".  This parameter only affects FITS files written by wfits
     to disk - the extension .fits will automatically be added to the
     filenames, so that the files will be automatically recognized by
     the FITS image kernel.

     wfits also has two additional parameters called "extensions" and
     "global_hdr" that deal with writing multi-extension FITS files.

   o The default action of rfits from tape to disk remains unchanged.

     If rfits is used to read FITS files on disk then users need to
     be aware of a change to the behavior of the "file-list" parameter.
     File-list is now used to define the list of files on the tape as
     well as the list of extensions in a multi-extension FITS image.
     To read single FITS images on disk use "" as the value for
     "file-list". Some users have been using "1" for this value but now
     that value will try to read the first extension which doesn't
     exist - use "0" if you wish to put something there.

     rfits will unpack multi-extension FITS files upon a read. If you
     wish to retain the multi-extension FITS format then use T2D and
     RENAME.

The help pages have been updated to reflect these changes.

wfits  now  writes  ushort (16 bit unsigned short) images to FITS images
with bitpix=16, bscale=1.0, and bzero=32768.0 by  default.   rfits  will
read these images back as type ushort.


3.10 General changes

   o The GSURFIT package has been updated to include support for the "half"
     cross terms option useful in computing plate solutions.  Tasks that can
     make use of this feature have been updated although their default
     behaviors have not changed.

   o The code which computes the CD matrix from CDELT/CROTA was modified.
     The old code computed the diagonal (scale) terms correctly but the
     rotation terms were evidently incorrect.  The old code was based on
     the 1988 Hanisch and Wells WCS paper and the new code is based on a
     more recent paper by Mark Calabretta et al, which supercedes the
     1988 representation.  The affect of this change should be limited
     as it only affects rotated images for which CDELT is given but no
     CD matrix is defined. (V2.10.4p2)

   o Several new celestial coordinate projection functions have been added.
     Users with IPAC data that use the CAR projection function should now be
     able to read the image coordinates directly with LISTPIXELS, etc.


4. New tasks, or old tasks moved to new packages

 Task Name      Package                  Function

 CCXYMATCH      IMCOORDS         Four new tasks for computing and evaluating
 CCMAP                           simple astrometric plate solutions and storing
 CCSETWC                         them in the image headers in fits-compatible
 CCTRAN                          format.

 CCFIND         IMCOORDS         CCFIND locate objects in an image given a
                                 celestial coordinate list and the image wcs.

 IMCCTRAN       IMCOORDS         Two new tasks for transforming celestial
 SKYCTRAN                        coordinate lists and image celestial
                                 coordinate systems from one celestial
                                 coordinate system to another.

 STARFIND       IMCOORDS         STARFIND automatically detects stellar objects
                                 in a list of images.

 WCSCTRAN       IMCOORDS         A new task for transforming between IRAF image
                                 coordinate systems.

 WCSEDIT        IMCOORDS         Two unaltered former PROTO package tasks for
 WCSRESET                        editing IRAF image coordinate systems.

 FRMEDIAN       IMFILTER         Four new tasks for doing circular/elliptical/
 FRMODE                          ring image median filtering.
 RMEDIAN
 RMODE

 IM3DTRAN       IMGEOM           The former addon VOL package task IM3DTRAN for
                                 doing 3D image transposes.

 GEOXYTRAN      IMMATCH          A new task for transforming coordinate lists
                                 using the results of the GEOMAP task.

 IMCENTROID     IMMATCH          Four new tasks for computing matched pixel
 SKYXYMATCH                      lists. IMCENTROID is a modified version of the
 WCSXYMATCH                      PROTO package task of the same name.
 XYXYMATCH

 SKYMAP         IMMATCH          Two new tasks for computing geometric
 WCSMAP                          transforms using the image coordinate system
                                 information.

 IMALIGN        IMMATCH          Three new tasks for doing automated image
 SREGISTER                       registration. IMALIGN is a modified version
 WREGISTER                       of the PROTO package task of the same name.

 WCSCOPY        IMMATCH          A new task for copying the coordinate system
                                 of a reference image to a set of input images.

 PSFMATCH       IMMATCH          A new task for matching the PSFs of a set of
                                 input images to the PSF of a reference image
                                 using Fourier techniques.

 LINMATCH       IMMATCH          A new task for matching the linear intensity a
                                 scale of a set of input images to the
                                 intensity scale of a reference image.

 IMFUNCTION     IMUTIL           The former PROTO package task for applying a
                                 single argument function to an image.

 IMJOIN         IMUTIL           The former addon VOL package task for joining
                                 same-dimensioned images along a specified
                                 dimension.

 IMREPLACE      IMUTIL           The former PROTO package task IMREPLACE for
                                 replacing bad pixels based on their value.

 IMTILE         IMUTIL           A modified version of the NOAO.PROTO IRMOSAIC
                                 task for tiling same sized 2D images into a
                                 single mosaiced image.

 EXPORT         DATAIO           Two new tasks from the external IMCNV package
 IMPORT                          for exporting IRAF images to binary formats
                                 and for importing binary files into IRAF
                                 images.

 TEXT2MASK      PROTO            This new task appears in conjunction with a
                                 new  pixel mask based version of FIXPIX.

 IMEXTENSIONS   PROTO            This task selects and lists image extensions 
                                 in  files.   Image extensions currently occur 
                                 in  multi-extension FITS files and multi-group 
                                 Geiss (STF format) files.
   
 CCDMASK        CCDRED           This new task creates a pixel mask from a
                                 CCD image.

 AIDPAR         ONEDSPEC         New parameter set for automatic line
                                 identification for the tasks AUTOIDENTIFY,
                                 IDENTIFY and REIDENTIFY.

 AUTOIDENTIFY   ONEDSPEC         A new task to automatically identify lines
                                 and fit the dispersion function.

 SKYTWEAK       ONEDSPEC         Sky spectra are shifted and scaled to best
                                 subtract sky features from data spectra.

 TELLURIC       ONEDSPEC         Telluric calibration spectra are shifted and
                                 scaled to best divide out telluric features
                                 from data spectra.

 ASTCALC        ASTUTIL          An astronomical calculator.

 ASTRADIUS      ASTUTIL          Finds images within a circle on the sky.


5. Task and package deletions

CUBE,  DUMP,  GSUBRAS,  MAXMIN,  MKIMAGE,  MKTEST: These tasks have been
superseded by the equivalent tasks in the IMAGES  or  ARTDATA  packages.
The    functionality    of    these    tasks   still   exists   in   the  
iraf$pkg/images/lib/zzdebug.x file.

REGISTER: This task has been renamed to GREGISTER.

IMALIGN, IMCENTROID, IMFUNCTION, IMREPLACE, WCSEDIT, WCSRESET: Moved  to
the IMAGES package.


6. Modifications to old tasks

Grouped  by  package,  a  list of modifications to old tasks in IRAF are
summarized below.  We have  included  modifications  since  the  V2.10.3
release.

IMFILTER:
    FMEDIAN, FMODE, MEDIAN, MODE
        Minimum and maximum good data value parameters zloreject and zhireject
        and a verbose option parameter were added.
    MEDIAN, MODE
        The 64 x 64 maximum kernel size limit was removed from these tasks.

IMMATCH:
    GEOMAP
        Renamed the output parameter to database for the sake of consistency
        with other new images tasks.

        Changed the default value of the reject parameter from 0.0 to INDEF.

        Added the transforms parameter. Transforms permits the user to specify
        the names of the output database records explicitly.

        Added the parameter results. Results permits the user to save a summary
        of the results including a description of the transform geometry, and a
        listing of the input coordinates, the fitted coordinates, and the fit
        residuals.

        Added the fitgeometry parameter. Fitgeometry permits the user to
        constrain the linear part of the fit to: 1) x and y shifts only, 2) x
        and y shifts and rotation only, 3) x and y shifts and x and y scale
        changes only, 4) x and y shifts, rotation, and a scale change only, 5)
        x and y shifts, rotation, x and y scale changes only, and 5) x and
        shifts, rotation, skew, and x and y scale changes.
    GREGISTER
        Renamed the register task gregister to emphasize that it is paired with
        the geomap task and to avoid confusion with the new registration tasks.
    GEOTRAN, GREGISTER
        Renamed the transform parameter to transforms.

        Added the verbose parameter.
    GEOTRAN
        Added the ability to write to a section of an existing image.
    IMCOMBINE
        The  limit of the number of images that may be combined has been
        removed.  If the number of images exceeds the maximum number  of
        open  images  permitted  then the images are stacked in a single
        temporary image and  then  combined  with  the  project  option.
        Note   that   this   will   double   the   amount  of  diskspace
        temporarily.  There is also a limitation in this case  that  the
        bad  pixel mask from the first image in the list will be applied
        to all the images.

        Integer  offsets  may  be  determined  from  the   image   world
        coordinate system.

        A  combination  of  ushort  and  short  images  now  defaults to
        integer.

        Added support for type ushort images.

        Added a new options for computing offsets using the image wcs.

        Removed the limit on the maximum number of images that can be combined.
    IMALIGN, IMCENTROID
        Renamed the images parameter to input, changed the reference parameter
        mode from hidden to automatic, and reversed the order of the reference
        and coords parameters.

IMUTILS:
    IMEXPR
        Modified the task so that it will accept an image name that looks like
        a number in the first few characters, but which is really an image
        name.  For example, "123.imh" or "../foo.imh".  The previous version
        of imexpr was treating any string which looked like a number in the
        first few characters as a numeric constant. (V2.10.4p2)
    IMREPLACE
        The lower value is now rounded up for integer images so  that  a
        range like 5.1-9.9 affects pixels 6-9 instead of 5-9.
    IMSUM
        Now allows "ushort" data types.

TV:
    DISPLAY
        The bad pixel mask,  overlay  mask,  sample  mask,  and  overlay
        colors  parameters  and  functionality  have  been  added.   The
        "nsample_lines" parameter is now an "nsample" parameter.

        Bugs in the coordinate system sent  to  the  image  display  for
        cursor readback were fixed.
    IMEDIT
        If  xorder  or  yorder  are  zero  then  a  median background is
        computed for the 'a' and 'b' keys.
    IMEXAMINE
        ('a'  and  'r'):  The  fit  to  the  radial  profile  points now
        includes both a Gaussian  and  a  Moffat  profile.   The  Moffat
        profile  exponent  parameter, beta, may be fixed or left free to
        be fit.

        ('a' and 'r'): New estimates fo the FWHM were added to  the  'a'
        and  'r'  keys.   These  include  the  Moffat  profile fit noted
        above, a direct  measurement  of  the  FWHM  from  the  radially
        binned  profile,  and  a  Gaussian  or  Moffat fit to the radial
        enclosed flux profile.  The output from these keys was  modified
        to include the new information.

        ('a'  and  'r'):  The  direct  FWHM  may  be used to iteratively
        adjust the fitting  radius  to  lessen  the  dependence  on  the
        initial fitting radius value.

        ('k'): Added a kimexam parameter set.

        The default value of rimexam.magzero parameter was changed from
        30.0 to 25.0 for consistency with the digiphot package.

PROTO:
    FIELDS
        The default value for the lines parameter was changed to an open
        upper limit.

        Changed the default value of the lines parameter from "1-999" to
        "1-" so that the upper bound would be open ended.
    FIXPIX
        This  task  replaces  the  old  task  (now obsolete.ofixpix) and
        works with the more general  pixel  mask  facilities.   It  also
        provides   greater  flexibility  in  chosing  the  interpolation
        direction.

ICFIT used in various tasks:
    ICFIT
        The  :xyshow output was modified to 1) not include colon labels,
        2) print (X, Y, Y fit, Weight) instead of (X, Y fit, Y), and  3)
        the printed values are those actually used in the fit when using
        composite points (naverage not 1).

ARTDATA:
    MK1DSPEC
        Lorentzian and Voigt profiles were added and the parameters  and
        input  line  list  format were changed.  The widths are now FWHM
        instead of gaussian sigmas.
    MKOBJECTS, MKNOISE
        The default value of "ranbuf" was changed to zero.
    GALLIST
        The  default value for the minimum elliptical galaxy axial ratio
        was changed to 0.3 to cover the range E0-E7 uniformly.
    MKPATTERN
        Now allows ndim=0 to make an dataless header.
        Now allows ushort pixel type.

ASTUTIL:
    SETJD
        The  checking  of  the  epoch  keyword   value   was   improved.
        Previously  if  there  was  a  problem  with  the  keyword value
        (missing or malformed) the task  would  use  the  epoch  of  the
        observation.   Now  it  is  an  error  if  an  epoch  keyword is
        specified but the epoch  value  can't  be  determined.   Also  a
        leading  'B'  or  'J'  is allowed and a warning will be given if
        the epoch value is unlikely.
    ASTHEDIT
        There are new astronomical functions and input/output functions.
        The command syntax may now use "=" as a  delimiter  as  well  as
        the whitespace.

        A  new parameter "update" allows protecting images and accessing
        read-only images for the purpose  of  calculating  and  printing
        quantities.

        The  special variable name "$I" has the value of the image name,
        $D the current date, and $T the current time.

        The case of no image name creates and deletes a temporary  image
        so  the  task  can  be  used  purely  as  a  calculator (but see
        astcalc).

CCDRED:
    CCDPROC
        The  bad  pixel fixing was modified to allow use of pixel masks,
        images, or the text file description.  Bad pixel masks  are  the
        desired  description and use of text files is only supported for
        backward compatibility.  Note that support for  the  trimmed  or
        untrimmed conversion from text files has been eliminated.

        Line-by-line  overscan/prescan  subtraction is now provided with
        three simple algorithms.
    COMBINE
        The  limit of the number of images that may be combined has been
        removed.  If the number of images exceeds the maximum number  of
        open  images  permitted  then the images are stacked in a single
        temporary image and  then  combined  with  the  project  option.
        Note   that   this   will   double   the   amount  of  diskspace
        temporarily.  There is also a limitation in this case  that  the
        bad  pixel mask from the first image in the list will be applied
        to all the images.

        Integer  offsets  may  be  determined  from  the   image   world
        coordinate system.

        Fixed a bug where a variable was improperly used for two different 
        purposes causing the algorithm to fail.  This also affected IMCOMBINE
        and SCOMBINE.  See bug 316 for details. (V2.10.4p2)
    COSMICRAYS
        The output bad pixel data accidentally included some extra fields 
        making it incorrect to use the file directly with BADPIXIMAGE.  
        The extra diagnostic fields were removed.  For details, see bug 311
        in the buglog. (V2.10.4p2)

ECHELLE:
    ECIDENTIFY
        The  dispersion  units are now determined from a user parameter,
        the coordinate list, or the database entry.

IMRED Spectral Packages:
    DOARGUS, DOFIBERS, DOHYDRA
        A  sky  alignment option was added.

        The aperture identification can new be taken from image  header
        keywords.

        The initial arc line identifications is done with the automatic
        line identification algorithm.
    DOSLIT, DO3FIBER
        The initial arc line identifications is done with the automatic
        line identification algorithm.

ONEDSPEC:
    Support for the Sloan Sky Survey was added by allowing multifiber
    reductions with up to 500 fibers with non-linear dispersions. (V2.10.4p2)

    BPLOT
        Fixed a general problem in BPLOT and SLIST that caused a segmentation
        violation error.  See buglog 312 for details. (V2.10.4p2)
    FITPROFS
        Modified  to  include  lorentzian  and  voigt   profiles.    The
        parameters  and  positions  file  format  have  changed  in this
        version.  A new parameter controls  the  number  of  Monte-Carlo
        samples used in the error estimates.
    IDENTIFY
        The  dispersion  units are now determined from a user parameter,
        the coordinate list, or the database entry.
        A new key, 'e', has been added to add features from a line  list
        without  doing  any  fits.  This is like the 'l' but without the
        automatic fitting before and after adding new features.

        A new key, 'b', has  been  added  to  apply  an  automatic  line
        identification algorithm.

        The  'x'  key  has  been  changed  to  use  the  automatic  line
        identification  algorithm.   The  allows  finding  much   larger
        shifts.

        The  match  parameter  may  now  be  specified  either  in  user
        coordinates or in pixels.  The default is now 3 pixels.

        The default threshold value has been changed to 0.
    REIDENTIFY
        A new parameter, "search", was added to specify a search radius
        for the automatic line identification algorithm.
 
        The "nlost" parameter now also applies when not tracing; i.e. it
        will issue a warning and not record a solution if the specified
        number of features is lost when reidentifying against a specific
        reference spectrum as is done with multispec data.

        The  task  will  now  work  with only a warning if the reference
        image is absent; i.e. it is possible to  reidentify  given  only
        the database.

        The  addfeatures  function will now add features before a fit if
        there are no reference database features.   Previously  features
        could  only  be  added  after an initial fit using the reference
        features and, so, required the  reference  database  to  contain
        features  for  reidentification.   This new feature is useful if
        one wants to  uses  a  dispersion  function  from  one  type  of
        calibration  but  wants  to add features for a different kind of
        calibration.
    SAPERTURES
        This task has  been  modified  to  allow  use  of  image  header
        keywords as done in the APEXTRACT package.
    SARITH
        Previously  both w1 and w2 had to be specified to select a range
        to be used.  Now if only one is specified  the  second  endpoint
        defaults to the first or last pixel.

        The noise band in multispec data is only copied from the primary
        spectrum and not modified.  This is a kludge until the noise  is
        handled properly.

        Fixed a problem in SARITH and SCOPY where a segmentation error 
        occurred when a wavelength range was specified in the reverse sense 
        of the data and without rebinning.  See buglog 323 for details.
        (V2.10.4p2)
    SBANDS
        Fixed a problem in SBANDS that caused a segmentation violation when 
        the number of input bandpasses was greater than 10.  See buglog 298
        for details. (V2.10.4p2)
    SCOPY
        Previously both w1 and w2 had to be specified to select a  range
        to  copy.   Now  if  only  one  is specified the second endpoint
        defaults to the first or last pixel.
    SPECPLOT
        The  scale and offset parameters may now be a value, a filename,
        or and image header keyword.

        The 'f' key was added to toggle between world and logical  pixel
        coordinates.
    SPLOT
        The profile fitting  and  deblending  was  expanded  to  include
        lorentzian  and  voigt  profiles.   A new parameter controls the
        number of Monte-Carlo samples used in the error estimates.
    RSPECTEXT
        The task now automatically senses the presence of a header.

APEXTRACT:
    APALL, APSUM, APNOISE, APNORMALIZE, APSCATTER, APTRACE,
    APRECENTER, APRESIZE, APMASK, APFIND, APFLATTEN
        The  "apertures"  parameter  can be used to select apertures for
        resizing, recentering, tracing, and extraction.  This  parameter
        name   was  previously  used  for  selecting  apertures  in  the
        recentering algorithm.  The new parameter name for this  is  now
        "aprecenter".
    APALL, APSUM
        The "nsubaps" parameter now allows onedspec and  echelle  output
        formats.   The  echelle  format is appropriate for treating each
        subaperture as a full echelle extraction.
    APALL
        The  aperture  ID  table information may now be contained in the
        image header under the keywords SLFIBnnn.
    APSUM
        The dispersion axis parameter was  moved  to  purely  a  package
        parameter.

        As  a  final step when computing a weighted/cleaned spectrum the
        total  fluxes  from  the  weighted  spectrum  and   the   simple
        unweighted   spectrum   (excluding  any  deviant  and  saturated
        pixels) are computed and a "bias" factor of  the  ratio  of  the
        two  fluxes  is  multiplied  into  the weighted spectrum and the
        sigma estimate.  This makes the total fluxes the same.  In  this
        version  the  bias  factor  is recorded in the logfile if one is
        kept.  Also a check is made for unusual bias  factors.   If  the
        two  fluxes  disagree  by more than a factor of two a warning is
        given on the standard output and the logfile with the individual
        total  fluxes as well as the bias factor.  If the bias factor is
        negative a warning is also given and no bias factor is  applied.
        In  the  previous  version  a negative (inverted) spectrum would
        result.

RV:
    RVIDLINES, RVREIDLINES
        These tasks now work in the units of the input spectra.
    FXCOR
        The input spectra are converted to Angstroms for the
        crosscorrelation and analysis.  Thus the velocities will
        be correctly computed regardless of the units of the
        input spectra.

DAOPHOT:
    DAOFIND
        A major bug in the DAOFIND task centering code that affects the
        computed x and y positions was fixed. Users should refer to bug 
        log entry number 332 for details. (V2.10.4p2)

        A new roundness statistic was added to the DAOFIND output to
        bring the task into conformance with standalone DAOPHOT II. The new
        statistic is sensitive to and tries to eliminate detected objects
        which are significantly elongated in directions other than 0, 90,
        180, and 270 degrees. The original roundness statistic is stored in
        the ground column, the new one in the sround column. The same
        default roundness limits apply to both statistics. (V2.10.4p2)

    DAOPARS
        Added a new parameter "mergerad" to the DAOPARS parameter set.
        Mergerad permits the user to control the merging process. If
        mergerad is INDEF (the default setting) the default merging radius
        is used. If mergerad is 0 object merging is turned off altogether.
        Otherwise the user can set the merging radius to a specific value.
        Mergerad is used by the nstar and allstar tasks, but their default
        behavior is unchanged. (V2.10.4p2)
 
        Changed the name of the "critovlap" parameter to "critsnratio" to
        avoid confusion with the the meaning of the parameter especially
        with regard the mergerad parameter. The behavior of the parameter is
        unchanged. (V2.10.4p2)


7. Parameter file changes

The  parameter  file changes below are for modifications between V2.10.4
and V2.11.  For a list of parameter file  changes  between  V2.10.3  and
V2.10.4 see the file iraf/v210/params.v2104.Z in the IRAF FTP archives.

In  the tables below each parameter change is identified with one of the
following   codes   followed   by   task_name.parameter_name   and   the  
description of the change.

    n = new parameter
    c = changed/modified parameter
    d = deleted parameter

TV:
 n  display.nsample: replaces nsample_lines
 d  display.nsample_lines: replaced by nsample
 n  display.bpmask: specify a bad pixel mask
 n  display.bpdisplay: specify display mode for bad pixel mask
 n  display.bpcolors: specify overlay colors for bad pixel mask
 n  display.overlay: specify an overlay mask
 n  display.ocolors: specify overlay colors for overlay mask
 n  display.zmask: specify a sample mask for the zscale calculation
 c  imedit.xorder: now allows a value of zero for median background
 c  imedit.yorder: now allows a value of zero for median background
 n  rimexam.fittype: specify a profile type to fit - default is now moffat
 n  rimexam.iterations: specify number of iterations to adjust fitting radius
 n  rimexam.beta: specify beta value for moffat fitting
 c  rimexam.buffer: default value changed from 1 to 5
 c  rimexam.width: default value changed from 2 to 5
 c  rimexam.magzero: default value changed from 30 to 25
 n  wcslab.overplot: specify overplotting

DATAIO:
 n  wfits.fextn: extension to append to output disk FITS filename - default is
      fits
 n  wfits.extensions: write all images to a single FITS file ? - default is no
 n  wfits.global_hdr: prepend a global header to the FITS extensions - default
      is yes

IMAGES:
 n  fmedian.zloreject: good data minimum
 n  fmedian.zhireject: good data maximum
 n  fmedian.verbose: verbose option
 n  fmode.zloreject: good data minimum
 n  fmode.zhireject: good data maximum
 n  fmode.verbose: verbose option
 n  median.zloreject: good data minimum
 n  median.zhireject: good data maximum
 n  median.verbose: verbose option
 n  mode.zloreject: good data minimum
 n  mode.zhireject: good data maximum
 n  mode.verbose: verbose option
 n  geomap.transforms: list of record names
 n  geomap.results: results summary file
 n  geomap.fitgeometry: fitting geometry
 d  geomap.output: renamed to database
 c  geomap.reject: changed from 0.0 to INDEF
 n  [g]register.verbose: verbose option
 d  [g]register.transform: renamed to transfo
 n  geotran.verbose: verbose option
 d  geotran.transform: renamed to transforms
 c  imcombine.offsets: now allows specifying "wcs" to compute offsets from WCS
 d  imalign.images: renamed to input
 c  imalign.reference: went from hidden to auto
 c  imalign.coords: reversed places with reference
 d  imcentroid.images: renamed to input
 c  imcentroid.reference: went from hidden to auto
 c  imcentroid.coords: reversed places with reference
 n  imheader.imlist: default image names

PLOT:
 n  graph.ltypes: specify the line types
 n  graph.colors: specify the colors

PROTO:
 n  fixpix.masks: new version specifies bad pixel masks
 n  fixpix.linterp: specify mask values for line interpolation
 n  fixpix.cinterp: specify mask values for column interpolation
 n  fixpix.pixels: list pixels that are modified
 d  fixpix.badpixels: new version does not use bad pixel region description
 c  fields.lines: default value changed from "1-9999" to "1-"

ARTDATA:
 n  mk1dspec.profile: define the profile type
 n  mk1dspec.gfwhm: replaces sigma for gaussian profile width
 n  mk1dspec.lfwhm: width for lorentzian profile
 c  artdata.randbuf: default value changed from 1000 to 0.
 c  mkpattern.ndim: allows a value of 0 for a dataless header.
 c  mkpattern.pixtype: allows ushort.
 c  gallist.ar: default value changed to 0.3.
 d  mk1dspec.sigma: replaced by gfwhm

ASTUTIL:
 n  rvcorrect.keywpars: added to define keywords used
 n  asthedit.prompt: used for new calculator option
 n  asthedit.update: update the header
 n  asthedit.oldstyle: to allow backward compatibility

APEXTRACT, IMRED spectral packages:
 n  apnoise.apertures: select apertures to be used
 n  apfit.apertures: select apertures to be used
 n  apedit.apertures: select apertures to be used
 n  apfind.apertures: select apertures to be used
 n  apnormalize.apertures: select apertures to be used
 n  apscatter.apertures: select apertures to be used
 n  apsum.apertures: select apertures to be used
 n  aptrace.apertures: select apertures to be used
 n  apresize.apertures: select apertures to be used
 n  apmask.apertures: select apertures to be used
 n  apflatten.apertures: select apertures to be used
 n  aprecenter.apertures: select apertures to be used
 n  aprecenter.aprecenter: was what was previously the apertures parameter
 n  apall.apertures: select apertures to be used
 n  apall.aprecenter: was what was previously the apertures parameter

ARGUS, HYDRA, SPECRED:
 n  doargus.crval: for automatic line identifications
 n  doargus.crdelt: for automatic line identifications
 n  doargus.skyalign: night sky alignment option
 n  dohydra.crval: for automatic line identifications
 n  dohydra.crdelt: for automatic line identifications
 n  dohydra.skyalign: night sky alignment option
 n  dofibers.crval: for automatic line identifications
 n  dofibers.crdelt: for automatic line identifications
 n  dofibers.skyalign: night sky alignment option
 n  do3fiber.crval: for automatic line identifications
 n  do3fiber.crdelt: for automatic line identifications

ARGUS, HYDRA, KPNOCOUDE, KPNOSLIT, SPECRED:
 c  params.match: default value changed to -3 (3 pixels instead of Angstroms)
 c  sparams.match: default value changed to to -3 (3 pixels instead of Angs)

ONEDSPEC, IMRED spectral packages:
 d  fitprofs.sigma: replaced by gfwhm
 d  fitprofs.function: replaced by profile
 d  fitprofs.fitsigmas: replaced by fitgfwhm
 d  rspectext.header: removed since the task now senses the header information

ONEDSPEC, LONGSLIT, IMRED spectral packages:
 n  identify.units: specify the desired units for the dispersion function
 n  identify.crval: for automatic line identifications
 n  identify.crdelt: for automatic line identifications
 n  identify.aidpars: parameter set for automatic line identifications
 c  identify.match: default value changed to -3 (3 pixels instead of Angstroms)
 c  identify.threshold: default value changed from 10 to 0.
 c  reidentify.match: default value changed to -3 (3 pixels instead of Angs)
 c  reidentify.threshold: default value changed from 10 to 0.
 n  reidentify.crval: for automatic line identifications
 n  reidentify.crdelt: for automatic line identifications
 n  reidentify.aidpars: parameter set for automatic line identifications
 n  reidentify.search: specify a search radius for the automatic line 
       identification algorithm
 n  ecidentify.units: specify the desired units for the dispersion function
 n  fitprofs.profile: define the profile type
 n  fitprofs.gfwhm: replaces sigma for gaussian profile width
 n  fitprofs.lfwhm: width for lorentzian profile
 n  fitprofs.fitgfwhm: replaces fitsigmas
 n  fitprofs.fitlfwhm: select whether to fit lorentzian profile widths
 n  fitprofs.nerrsample: allows control of the error calculation accuracy
 n  splot.nerrsample: allows control of the error calculation accuracy

CCDRED:
 c  ccdproc.fixfile: this now specifies a bad pixel mask
 c  combine.offsets: now allows specifying "wcs" to compute from WCS

RV:
 n  rvcorrect.par: Added the KEYWPARS pset declaration

DAOPHOT:
 c  daopars.critsnratio: critical S/N ratio for group membership - changed
       the name only from critovlap (V2.10.4p2)
 n  daopars.mergerad: critical object merging radius in scale units
    (V2.10.4p2)
IRAF (Jul92)             V2.10 Revisions Summary            IRAF (Jul92)


                  IRAF Version 2.10 Revisions Summary
                               July 1992




1. Introduction

    This document summarizes the changes made to IRAF in  version  2.10.
V2.10  is  a  major release of IRAF, meaning that there were significant
changes to both the system and applications software,  and  the  release
will eventually be made available on all supported platforms.

By  IRAF  version  2.10  we  refer only to the core IRAF system and NOAO
packages.  Numerous external or "layered" packages  are  also  available
for  IRAF,  for  example  the  NSO  package  (solar  astronomy), the ICE
package (data acquisition), the STSDAS  package  from  STScI  (HST  data
reduction  and  analysis), the TABLES package from STScI (tabular data),
the XRAY package from SAO (X-ray  data  analysis),  and  so  on.   These
packages  are layered upon the IRAF core system, and once installed, are
indistinguishable  from  the  rest  of  IRAF.   Layered   packages   are 
developed  and  maintained  separately  from  the  core IRAF release and
follow independent release schedules, hence we  will  not  discuss  them
further  here.   Contact  the  IRAF project or any of the outside groups
supporting IRAF layered packages for additional information on  what  is
available.

This  document is intended only as an overview of what is new in version
2.10 IRAF.  More detailed documentation will be found in the systems and
applications  notes  files (files sysnotes.v210.Z and pkgnotes.v210.Z in
the network archive), in the online help pages,  and  in  any  reference
papers  or  user's  manuals  distributed  with  the  software.  The IRAF
Newsletter is a good source of information for new IRAF software.

This revisions summary is organized as follows:

        1.  Introduction

        2.  IRAF System Revisions

        3.  IRAF and NOAO Package Revisions
            3.1. Changes to the System Packages
            3.2. Changes to the NOAO Packages

        4.  Programming Environment Revisions
            4.1. Compatibility Issues
            4.2. Portability Issues
	    4.3. Software Tools
	    4.4. Programming Interface Changes

	5.  Getting Copies of this Revisions Summary

The reader is assumed to already be familiar with the basic concepts and
operation  of  the  IRAF  system.   In particular, familiarity with V2.9
IRAF is assumed.



2. IRAF System Revisions


2.1 Starting up V2.10 IRAF

    Before attempting to start V2.10  IRAF  each  user  should  run  the
mkiraf  command  in  their IRAF login directory.  This will create a new
login.cl file and uparm (user parameter) directory.   mkiraf  should  be
allowed  to delete any existing parameter files, as there have been many
changes to task parameter sets in the new version of IRAF.


2.1.1 LOGIN.CL changes

    The login.cl file is read by the CL during startup to  perform  some
runtime  initialization and to customize IRAF for each user.  A standard
login.cl file is created and initialized by the mkiraf command when  the
user's  IRAF login directory is configured.  For V2.10 IRAF the login.cl
file has undergone the following changes.

    o   The IRAF version number is now  checked  automatically  whenever
        you  login,  and  a  warning  message  will  be  printed if your
        login.cl file is out of date.  If you see this message it  means
        that  important  changes have been made to the login.cl file and
        you need to rerun mkiraf to update this file.
    
    o   Most of core IRAF system packages are now  loaded  automatically
        at  login  time  by  the  login.cl  file.  If you use a personal
        loginuser.cl file and you  previously  loaded  any  core  system
        packages  in  this  file,  you  should  edit the file and remove
        those entries.
    
    o   A "quiet" login  option  is  now  provided.   If  a  file  named
        .hushiraf  exists  in  the login directory when you start up the
        CL, printing of the usual login messages will be  disabled  (the
        only output seen will be the "cl>" prompt).
    
    o   On  UNIX/IRAF  systems  the  login  script now looks at the host
        system environment variable  TERM  and  checks  for  the  common
        terminal  types  "sun"  and  "xterm",  configuring the IRAF stty
        accordingly if either terminal  type  is  seen  (note  that  the
        default  number  of  lines  set for an xterm terminal window may
        need to be  modified).   The  logic  used  to  do  this  is  not
        foolproof   however,   and   is  provided  only  as  an  example 
        illustrating how  to  make  use  of  the  host  system  terminal
        definitions.   You  may  need  to  customize this portion of the
        script, or override it in your loginuser.cl file.
    
    o   The CL hidden parameter showtype is now set to "yes" by default.
        This  will  cause  a  character  to be printed after the name of
        each package or named pset in CL package menus  to  allow  these
        objects   to   be  easily  distinguished  from  ordinary  tasks. 
        Packages are marked with a trailing period (".") and psets  with
        an  ampersand  ("@").   This  feature  can  be  disabled  with a
        "showtype=no" statement.
    
    o   The V2.10 login  script  contains  a  call  to  a  new  internal
        (non-user)  IRAF  task mtclean.  Be sure to leave this alone, it
        is required for the correct operation of  the  new  magtape  i/o
        system.
    
    The   USER  package  defined  in  the  template  login.cl  has  been 
    extensively revised, adding many new tasks.  These are  mainly  used
    to  make  common  UNIX  commands  available  from  within  the  IRAF 
    environment.  Type "?user" in the CL to see what is available, e.g.:
    
        cl> ?user
             adb     cp      fc      lpq     mv      rlogin  spell   top
             bc      csh     find    ls      nbugs   rsh     sps     touch
             buglog  date    finger  mail    nm      rtar    strings vi
             cal     df      ftp     make    od      ruptime su      w
             cat     diff    generic man     ps      rusers  sync    wc
             cls     du      grep    mkpkg   pwd     rwho    telnet  wtar
             comm    emacs   less    mon     rcp     sh      tip     xc
    
    
    Note that since the USER package is  defined  in  the  user's  login
    file  it  is  easily  customized  to  add  new  tasks.  Refer to the
    existing package for examples illustrating how to do this.
    
    
2.1.2 Compatibility Issues

    Version 2.10 IRAF requires the new login.cl file; if the CL does not
start  up  correctly,  it may be because the user has not done a mkiraf,
or because they have some construct in their loginuser.cl file which  is
incompatible  with V2.10 IRAF.  The V2.10 login file is usable with V2.9
IRAF, however this is not recommended.

There have been many task parameter changes between V2.9 and V2.10.   If
"parameter not found" messages are seen, most likely the user has an old
uparm directory, or has been  switching  back  and  forth  between  IRAF
versions.  An unlearn or mkiraf should fix the problem.

The  V2.10  IRAF  networking system is not fully compatible with earlier
versions of IRAF.  This can cause problems when, e.g., a newly installed
V2.10  system  is  used  to communicate with an older version of IRAF on
another system.  The  best  solution  is  to  update  to  V2.10  on  all
systems,  but  if this is not convenient it is possible to configure the
networking system to avoid the problems.  See the discussion of the  new
networking system given below.

Accessing  a  remote  magtape  device  via IRAF networking will not work
between V2.10 and older versions of IRAF  (the  remote  procedure  calls
have  changed).   To  remotely  access  magtape devices you will need to
install V2.10 IRAF on both the client and server nodes.

In  most  respects  installing  V2.10  IRAF  will  be  very  similar  to 
installing  earlier  versions  of  IRAF.   The  main  difference  is the
tapecap  file  required  to  use  the  new  magtape  system.   The   old 
dev$devices  file  is  no  longer  used.   See the discussion of the new
magtape system given below for more details.

Due to name changes in certain low level system routines (made to  avoid
name   clashes  when  linking  with  host  level  libraries)  the  V2.10 
libraries are incompatible  with  older  versions  of  IRAF.   Any  IRAF
programs  or  external  packages  relinked  under  V2.10 will have to be
fully  recompiled  or  the  linker  will   complain   about   unresolved 
externals.   Note  that so long as the old program is not relinked there
should be no problem, even if the program uses the  IRAF  shared  image,
since  the  V2.9  shared  image  is  included  in V2.10 (this applies to
Sun/IRAF systems only).

Starting  with  V2.10,  many  IRAF  applications   now   fully   support 
generalized  world  coordinates  (WCS).   While in principle this should
not pose any compatibility problems, the image headers do  contain  more
information  in V2.10 than previously, and there can be problems if, for
example, an input image contains an illegal WCS.  Previous  versions  of
IRAF  would  ignore  this  but in V2.10 such an image could result in an
error or warning message.  If WCS related problems  are  encountered  it
is probably best to contact the IRAF group for help.



2.2 CL Enhancements


2.2.1 Formatted scans and prints, scan from a pipe

    New  in the V2.10 CL (command language) are formatted scan and print
routines, and the  ability  to  scan  from  a  pipe  or  other  form  of
redirected  input.   These  new  facilities will prove most useful in CL
scripts.

The old unformatted scan and print routines are  the  following.   These
are  still available and are the simplest routines to use where they are
adequate.

      scan (arglist)          # scan standard input
     fscan (list, arglist)    # scan a list
     print (expr, exprlist)   # print to standard output
    fprint (param, exprlist)  # print to a string buffer


For example,

    list = "filename"
    while (fscan (list, x, y) != EOF)
        print ("x=", x, "y=", y)


In the above, arglist is a comma  delimited  list  of  output  arguments
(parameter  or  parameter field names) and exprlist is a comma delimited
list  of  expressions  to  be  printed.   list  is   the   name   of   a 
list-structured  parameter  to  be  scanned,  and param is the name of a
parameter, the value field of which is to  receive  the  output  string.
The  unformatted  scan  routines  will automatically convert output data
values to match the types of the output arguments.

The new formatted routines are as follows.  These take an  extra  format
argument  which  tells  how to parse the input string in the case of the
scanf routines, or how to format the output in the case  of  the  printf
routines.

     scanf (format, arglist)        # formatted scan from stdin
    fscanf (list, format, arglist)  # formatted scan from a list
    printf (format, exprlist)       # formatted print to standard output


Currently  there  is  no  fprintf  routine.   For the printf routine the
format argument is similar to that for  the  SPP/VOS  printf  (which  is
similar  to  the  C printf).  The format argument for the scanf routines
is the same as the VOS LIBC scanf, which is patterned after the C  scanf
(in  fact  the  UNIX manual page for scanf can be used as a guide to the
CL scanf with only minor deviations).

The following examples illustrate the new routines.

    cl> printf ("%d foo %7.3f\n", 5, 12.123) | scanf ("%d foo %g", i, x)
    cl> printf ("new values are i=%d, x=%g\n", i, x)
    new values are i=5, x=12.123

or,

    while (fscanf (list, " %*d size=%d name=%s", i, s1) != EOF)
        printf ("size=%05o, name=`%s'\n", i, s1)


Note in the first example the use of scanf to scan from a  pipe.   There
are  actually two different versions of scan and scanf in V2.10 IRAF, an
intrinsic function version and a procedure version.  When called  as  an
intrinsic  function,  a  scan  routine returns as its function value the
number of operands successfully scanned,  or  EOF.   When  called  as  a
procedure, the function value of a scan routine is discarded.

Here  is  another  example  illustrating  scan from a pipe, in this case
using an unformatted scan since  the  hselect  output  is  in  a  simple
tabular format (hselect prints selected fields of the image header).

    cl> hselect dev$pix naxis,naxis1,naxis2 yes | scan (i, j, k)
    cl> printf ("naxis=%d, axlen=[%d,%d]\n", i, j, k)
    naxis=2, axlen=[512,512]


When  using  the  formatted  scan routines, care must be taken to ensure
that the data types implied by the format argument match the actual data
types  of  the  output  parameters.   The scanf routines are implemented
using an internal call to the C (LIBC) scanf, with the output  parameter
value  fields  referenced  directly  via a pointer.  If the data type is
incorrect the output value may be meaningless.


2.2.2 Unlearning package parameters

    The unlearn task now works for package parameters as  well  as  task
parameters.   In  a  command  such  as  "unlearn  pkgname"  the  package 
parameters for the named package will  be  unlearned,  as  well  as  the
parameters  for all the tasks in the package.  This works whether or not
the package is loaded.


2.2.3 Loading packages at login time

    A  bug  has  been  fixed  which  affected  packages   with   package 
parameters  loaded  at  login  time.   It is now permissible to load any
package at login time regardless of whether it  has  package  parameters
(V2.9  users  will  recognize  this  bug  as one which prevented loading
CCDRED in the login script).


2.2.4 Environment variables

    The environment variables imtype, cmbuflen, and min_lenuserarea  are
now  defined  at  login  time.   Previously,  explicit  values for these
variables were not  defined,  and  the  system  would  use  the  builtin
internal  defaults.   Explicit  definitions  were added so that the user
can query the current value, e.g.

    cl> show cmbuflen
    128000

A show or set with no arguments will print the  full  environment  list.
New  values  for these and other common environment variables may be set
in the user login.cl file.



2.3 System Management Related Changes


2.3.1 Install script

    The UNIX/IRAF install script underwent minor changes to make it more
robust.  Problems are still possible if the IRAF root pathname is set to
different values in the various system dependent files modified  by  the
script.   The  system  as  shipped  from  NOAO has the same initial root
pathname set in all such files, but problems can occur if the files  are
manually  edited during or after installation.  To avoid problems always
use the install script to make system changes such as  installing  at  a
different root directory.


2.3.2 Caching of termcap entries

    User  caching  of termcap or graphcap entries with the old mkttydata
task is no longer recommended.   The  most  common  entries  (e.g.  sun,
xterm,  vt100) are already cached.  Modern workstations are so fast that
there is no  longer  much  point  in  caching  termcap  entries;  it  is
sufficient  to  merely  place  local additions near the top of the file.
Most programs that repeatedly access  the  terminal  cache  the  entries
internally  during  execution.   Custom  caching  of termcap or graphcap
device entries requires that  the  system  be  relinked,  and  the  risk
inherent  in  relinking  the  system  (hence  giving  up  the  prebuilt, 
pretested binaries) is not worth the small performance gain achieved.


2.3.3 Sorting of UNIX directories

    The UNIX-based versions of IRAF now sort UNIX directories whenever a
directory  is  accessed  to  expand a file or image template.  This will
fix the problem sometimes seen in earlier versions of IRAF, in which  an
image  template  could  appear  to  be  expanded  in  a seemingly random
fashion.


2.3.4 UMASK support

    The UNIX-based versions of IRAF now support  the  host  level  umask
file  creation mask correctly.  If files or directories created by V2.10
IRAF do not have the desired permissions, it is because you do not  have
umask set correctly at the UNIX level (most people set umask to 022).



2.4 Networking Enhancements


2.4.1 New networking driver

    The  UNIX/IRAF  networking  driver has been completely rewritten for
version 2.10 IRAF, with the  goals  of  eliminating  redundant  password
prompts,  improving  efficiency, and enhancing system security.  For the
most part the changes will be transparent to the user.   Once  the  IRAF
system  manager has configured the dev$hosts file for the local site the
networking  system  should  function  automatically;  in   the   default 
configuration  a  password prompt should be seen only when connecting to
a server for which rhosts ("trusted" hosts) permission is not granted.

The following information is provided mainly for IRAF  system  managers.
In  normal  use  the user does not need to understand how the networking
system functions.


2.4.1.1 How it works

    The IRAF  networking  system  is  an  RPC  (remote  procedure  call)
mechanism  for the IRAF kernel; all kernel procedures may execute either
locally or remotely, and the client and server nodes do  not  even  need
to   run   the   same   operating  system.   IRAF  applications  may  be 
distributed, and may access  resources  which  reside  anywhere  on  the
network.   IRAF networking is layered upon standard low level networking
protocols such as TCP/IP and DECNET.

The IRAF networking system defines  one  or  more  connection  protocols
which  are  used  by  a client to connect to the IRAF kernel server on a
remote  machine.   The  old  networking  driver   supported   only   one 
connection  protocol,  the  rexec  protocol, which requires a login name
and password.  The new driver adds support for an  rsh  based  protocol.
This  is  the  default  connection  protocol  for  V2.10 IRAF; automatic
fallback to the rexec protocol is provided in the  event  that  the  rsh
connect   fails.    The  rsh  connection  protocol  bootstraps  off  the 
suid-root rsh command found in  most  BSD  derived  UNIX  systems  (most
System V systems provide the equivalent command remsh).

The  connection protocol is used to start the in.irafksd IRAF networking
daemon on the remote server node.  This daemon executes  with  the  same
uid  and  permissions as the account which initiated the connection, and
there is one such daemon per user per server node.  Once the daemon  has
been  started  via  the  rsh  or  rexec  connection protocol, new client
connections are made very quickly,  by  merely  forking  the  daemon  to
create  the  IRAF  kernel server process, and setting up a direct socket
connection between the IRAF client process and the server.   The  daemon
process  runs  indefinitely,  shutting  down  if  idle for longer than a
certain interval (the current default is one hour).  When connecting  to
the  daemon a client must supply an authentication key to gain access to
the daemon.  If authentication fails the daemon shuts  down  and  it  is
necessary to reestablish the connection.


2.4.1.2 The .irafhosts file

    The  new  networking  driver retains the old irafhosts file, used to
store information telling how to connect  to  various  IRAF  hosts  (the
irafhosts  file  is  the file .irafhosts in the user's login directory).
The networking system will automatically create this file for  the  user
if  the  file  is  not  found; if an old-style file is found, it will be
edited by the system to make  it  compatible  with  the  new  networking
system.   While  it  is  no  longer  necessary for the irafhosts file to
contain password information to avoid  password  prompts,  the  file  is
used  to  store  the  user  authentication key, hence the file should be
read protected.  The networking system will automatically  read  protect
the file if it is not already protected.

To  avoid  authentication  failures  when  clients  on  different  nodes 
attempt to connect to the same  server,  the  same  authentication  code
should  be used on all server nodes.  Unfortunately there is no way that
the networking system can do this automatically (without going  to  some
much  more  complicated authentication scheme, such as a key server), so
users who make heavy use of the networking system should install a  copy
of  their  irafhosts  file in their login directory on all server nodes.
If this is not done the networking system will still work, but  will  be
less  efficient than it could be, when simultaneously accessing the same
server from IRAF sessions running on multiple client nodes.

The  truly  paranoid  may  not  be  happy  with  even  the  unique  user 
authentication  code  used in the current networking system.  If this is
the case the port parameter (see below) may be set to zero to force  rsh
to  be used for every connection (in effect the in.irafksd daemon has to
be restarted for every connection).  This  imposes  an  overhead  of  as
much  as several seconds on every server connect.  Alternatively, KSAUTH
can be defined in the user environment at login time, setting the  value
string  to some random integer value selected at login time.  If defined
in the user environment, KSAUTH will override the value of auth given in
the  irafhosts  file.   This  approach  would  at  least allow efficient
connects for a single login process tree.

The irafhosts file consists of two sections.  The first section  defines
several  networking  parameters:  port,  auth, hiport, and timeout.  The
second section is a list  of  server  nodes,  with  login  and  password
information describing how to connect to each node.

    port = default
    auth = 1234567890
    hiport = default
    timeout = default
    
    ursa    : <user> ?
    *       : <user> <user>


The  example  above  illustrates  a typical irafhosts file.  Typically a
unique authentication code is  allocated  automatically  by  the  system
when  the  file  is first created, and the other parameters retain their
default values as shown (i.e., the string "default").   In  the  example
the  host  list  consists  of an entry for the node "ursa", and an entry
for everything else.  The  format  of  a  host  entry  is  "host-name  :
login-name  password".   If  login-name  is the reserved string "<user>"
the user name on the client node is used  for  login  authentication  on
the  remote  node.   Setting the password to "<user>" as well causes the
rsh connect  protocol  to  be  used;  anything  else  causes  the  rexec
protocol  to  be used.  If the rexec protocol is used the password field
may be set to the actual password or to the string "?",  in  which  case
the  system  will  prompt for the password whenever a connection attempt
is made.  The "*" entry should always be the last  entry  in  the  list,
since  it  matches  all  nodes.  The default host list contains only the
"*" entry.

Additional  information  on  the  irafhosts  file  is  provided  in  the 
comments in the file dev$irafhosts, and in the system notes file.


2.4.1.3 Compatibility

    By  default  the  new  networking  system  will  try  to use the rsh
protocol to connect to the server node.  If the  server  is  running  an
older  version  of  IRAF the connection attempt will hang and eventually
time out.  If this occurs the networking system will fall  back  on  the
rexec  protocol  and  issue a password prompt, but by then the user will
probably have interrupted the connect.   The  best  way  to  avoid  this
problem  is  to  update  the  server  node  to V2.10, but if this is not
possible, an explicit entry for the node can be made  in  the  irafhosts
file,  setting  the  password  field  so that the rexec protocol will be
used.

An older, e.g. V2.9 client connecting to a V2.10 server should not be  a
problem.   In  this case the V2.10 server will see an attempt to connect
with the rexec protocol, which should be processed as in the past.

Aside from the problem of making a connection the  pre-V2.10  and  V2.10
networking  systems  are  compatible,  except for the magtape i/o calls.
Since the magtape driver calling sequences were changed in V2.10, remote
magtape access between V2.10 and older systems is not supported.


2.4.2 The hosts file

    The  file  dev$hosts  is  used to interface new host machines to the
IRAF networking system.  This file defines, for each host,  the  primary
host name, any aliases, and the command to be executed remotely to start
up the IRAF kernel server on a remote node.

The format and role of the  hosts  file  is  unchanged  in  V2.10.   Two
changes were made which affect the use of this file.

o   A  user  can  now  have a private copy of the hosts file.  To enable
    this feature, the variable irafhnt (IRAF host name table) should  be
    defined  in  the  user's  IRAF  or  host level environment, with the
    string value giving the file pathname of  the  user's  private  host
    name table file.

o   The  maximum  number  of  entries  in  the  host name table has been
    increased from 64 to  128.   In  the  current  implementation  these
    entries  are  statically  buffered,  so  it is necessary to keep the
    maximum number of entries to a reasonable value.
    
    The hosts file must be configured to enable IRAF  networking.   IRAF
    networking  is  disabled  if there is no entry for the local host in
    this file.  The netstatus command may be used to examine  the  state
    of  the  host  name table after it has been loaded by the networking
    system.
    
    There is another file dev$uhosts which often confuses people.   This
    file  is  not  used by UNIX/IRAF and can be ignored; it is there for
    VMS/IRAF and other IRAF implementations which  do  not  provide  the
    equivalent  of  the  UNIX  system  routine  gethostbyname.   On host
    machines which implement name server facilities IRAF  will  use  the
    name  server,  allowing  any  machine on the internet to be accessed
    via IRAF networking, so long as there is  an  entry  in  the  system
    wide or user IRAF hosts file.
    
    
    
2.5 Magtape System Enhancements

    The  magtape subsystem underwent a major revision in V2.10.  The VOS
level MTIO interface was extensively revised, and  the  host-level  IRAF
magtape  driver  ZFIOMT  is  completely new.  A new device configuration
facility  called  tapecap  was  introduced.   Together  with   the   new 
"programmable"  magtape  driver,  this  makes  it  possible to interface
almost  any  removable  media  mass  storage  device  to   the   magtape 
subsystem.   The  DATAIO  applications, in particular the FITS programs,
underwent minor, but important revisions.

A full specification of the  new  magtape  subsystem,  particularly  the
tapecap  facility,  is beyond the scope of this document.  Our intention
here is merely to introduce the new facilities.  A  reference  paper  is
planned,  time  permitting,  which  will  fully document the new magtape
system and tapecap.


2.5.1 Basic usage

    In most respects basic usage of the magtape system is unchanged from
previous releases.  Many new capabilities have been added, but these are
upwards compatible with earlier releases.


2.5.1.1 Logical device names

    Magtape devices are still referred to in IRAF applications  much  as
they  have  been  in  the past.  Whether or not the logical device names
are the same before and after the V2.10 upgrade  depends  upon  how  the
IRAF  system  manager  configures  the  tapecap  file.   The new magtape
system is much more flexible than  previously  regarding  device  names,
but  to  avoid  user  confusion  it is recommended that the old names be
supported as aliases regardless of whatever the full device name may be.

As in earlier versions of IRAF, a simple magtape reference might be

    cl> mtexamine mta

where "mta" is the device name.  To examine only file 3 on the tape  one
might enter

    cl> mtex mta[3]

If the device is on the remote node "ursa" the command would be

    cl> mtex ursa!mta[3]

If  the  device is a 9 track tape supporting multiple densities we might
specify the density explicitly, e.g.

    cl> mtex mta1600[3]

Device names can be more complex.  For example,

    cl> mtex mtwd

might refer to a WangDAT drive, and

    cl> mtex mtwdc

to the same drive, but with data compression enabled.

Devices can  have  multiple  names,  possibly  with  slightly  different
behavior  or  characteristics.   Device  names such as "mta" are usually
only host specific aliases for the lower level, host independent  device
names.  The names "mta" and "mtb" might be aliases for the actual device
names "mthp0" and "mtxt1".  This can  be  useful  in  networked  systems
where  IRAF  and  the tapecap file reside on a server node, but the user
is running IRAF on their workstation with a local tape  drive  attached.
In  this case there may be no entry for the local drive in the installed
tapecap file, but the user can still access the local  drive  using  the
lower  level, host independent device entry (it is also possible to have
a private tapecap file as we shall see later).

To see what logical devices are known to  the  magtape  system  you  can
enter  the  following  command  (the  task  gdevices  was  intended  for 
graphics devices but can be pressed into service to list a tapecap  file
as  well).   Just  because  a  device  is  listed does not mean that the
physical device actually exists on a particular host system.

    cl> gdev devices='^mt' graphcap=dev$tapecap

In IRAF V2.10 it is possible to include tapecap parameters in the device
specification to do clever things, as in the following example.

    cl> mtex "mta[:so=lepus:se:nb]"

This  is  discussed  further below in the section describing the tapecap
facility.


2.5.1.2 Device allocation

    Device allocation operates much the same  in  V2.10  as  in  earlier
versions  of IRAF.  The main change is that it is no longer necessary to
allocate a device in order to be able to  access  it.   It  is  strongly
recommended  however  that you always allocate a device before accessing
it in IRAF.  If the device  is  not  allocated  anyone  can  access  the
drive,  e.g.,  changing the tape position, and this can cause data to be
lost or improperly read back.  The  only  reason  to  access  the  drive
without   allocating  it  is  if  there  is  some  problem  with  device 
allocation on your system.

A device is allocated with the allocate command, e.g.

    cl> alloc mta

A device is deallocated with deallocate.  If the tape has  already  been
unmounted  use  the  rewind=no  option to avoid accessing the drive.  By
default the tape will be rewound when it is  deallocated.   Deallocating
and  reallocating  a  drive  initializes  the  magtape system, i.e., all
cached knowledge of the status of the drive is discarded.


2.5.1.3 Device status

    The device status can be examined  at  any  time  that  the  magtape
device  is  idle (not being actively accessed by an IRAF task) using the
devstatus task.

    cl> devs mtc
    # Magtape unit mtc status Thu 12:54:02 04-Jun-92 user v14
    file = 4
    record = 1
    nfiles = 0
    tapeused = 405
    pflags = 0


Of particular interest are  the  tapeused  and  nfiles  fields.   nfiles
refers  to  the total number of files on the tape (if a file is appended
to the tape it will be file nfiles+1).  If nfiles is given as zero  that
means  that  the  magtape system does not yet know how many files are on
the tape (it has not seen the end of tape).

tapeused reports the amount of tape used in units  of  kilobytes.   This
is  intended to refer to the amount of tape used up to and including the
end of tape (EOT).  However, the magtape system only  knows  about  data
that  it  has  seen, i.e.  physically read or written, so whether or not
tapeused is accurate depends upon how you have accessed the tape.

For example, if you started out with a fresh tape and appended a  number
of  files  the  number should be accurate.  If you just completed a full
scan of the tape with mtexamine the number  should  be  accurate,  since
all  the data was read.  If you just put on a new tape and did a scan of
the FITS headers with "rfits make-",  the  number  may  or  may  not  be
accurate,  depending  upon  the device and how file skipping forward was
done.  In most cases only the header area of each file  will  have  been
read  and  tapeused  will not reflect the full contents of the tape.  If
however, "rfits make-" is done immediately after writing to a new  tape,
the  number  will be accurate, since all the data was written before the
tape was rescanned to print the FITS headers.

Be advised that by default an explicit rewind will clear the nfiles  and
tapeused  fields,  since  by  default  rewind  initializes  the  magtape 
system.  See the discussion of rewind below.

In summary tapeused can be useful for monitoring how much space is  left
on  a  tape, but you have to know what you are doing.  When writing to a
new tape the number will be accurate so  long  as  you  avoid  doing  an
explicit  rewind.   A  simple  procedure  which  will  always  work when
mounting a non-empty tape and  appending  files  to  it,  is  to  do  an
mtexamine  of  the tape and then append the new files.  This can be time
consuming   for   large   tapes   but   does   provide   a   safe    and  
device-independent  method  for  getting the maximum amount of data on a
tape.


2.5.1.4 File positioning

    File  positioning  when  accessing  magtape   files   in   IRAF   is 
straightforward  in  the  sense  that  you  can  simply specify the file
number to read an existing file, or  "append"  (as  in  wfits  new-)  to
append  a  file  to  an existing tape.  Most tasks accept range lists to
access existing files, e.g.

    cl> mtexamine mta file="3,5,9-11"

It is even possible to position a tape to a  specific  record  within  a
file.   Opening  a  tape  with  file zero (as in "mta[0]") disables file
positioning,  allowing  the  tape  to  be  positioned  with  host  level 
utilities to workaround media problems.

There  can be problems with this simple scheme however, with modern tape
devices such as DAT and Exabyte which have capacities  in  the  gigabyte
range  and  which may be used to store thousands of files.  It is beyond
the scope of a revisions summary to go into this in detail here,  but  a
simple example will help illustrate the problem.

Assume we have a tape mounted on device "mtwd" containing 900 files.  We
want to append image "pix" as a FITS file.  The obvious thing to  do  is
enter the following command.

    cl> wfits pix mtwd new-

This  will  certainly  work.   The  only  problem is that if the tape is
freshly mounted the magtape system will not know how  many  files  there
are  on the tape, and it will have to skip forward one file at a time to
count the files and determine where EOT is.  In  the  worst  case  of  a
tape containing several thousand files this could literally take hours.

If  we  know  apriori  the number of files on the tape, e.g., 900 in our
example, the following command would  be  much  faster  (something  like
10-40 seconds on most DAT drives, assuming a decent host level driver).

    cl> wfits pix mtwd[901]

Of  course,  if  there  were actually 930 files on the tape, the last 30
files would be overwritten.

There is a useful trick which works in  some  cases  if  we  don't  care
exactly  how many files are on the tape (whether this works depends upon
the specific device and the host driver).  Assume  that  we  know  there
are  several  hundred  files  on the tape, but less than 1000.  We enter
the following command to append a file to the tape.

    cl> wfits pix mtwd[1000]

If this works, after the operation the magtape system will  think  there
are  1000  files  on  the tape.  A subsequent "wfits new-" would be very
fast regardless of the tape position,  since  so  long  as  the  magtape
system  knows where the end of tape is relative to the current position,
it can get there very fast.

If the trick doesn't work for your particular device or driver you  will
probably  get  a  positioning  error  when  attempting  to position to a
nonexistent file beyond the EOT.

More automated techniques for rapid positioning with very high  capacity
tapes are still a matter for study.  One promising technique would be to
formalize the above approach by supporting EOT-relative positioning.   A
tape  catalog  based  approach  is also possible.  The best approach may
simply be to not write so many small files on large tapes,  by  grouping
images  or  other  data  system  files into a single large tape file (as
with UNIX tar).  None of these approaches are implemented in V2.10.


2.5.1.5 Rewind

    In IRAF a magtape device is rewound with the rewind command,  as  in
the following example.

    cl> rewind mta

By  default  this  will not only rewind the tape but also initialize the
magtape system, in the sense that all cached information  regarding  the
named  device  is erased (e.g., nfiles and tapeused in the cached device
status).  This is necessary when changing tapes without deallocating the
drive; always do an explicit rewind (or deallocate) of the device before
removing a tape or mounting a new one.  Having rewind initialize  things
is  also  useful if error recovery should fail following an interrupt or
program abort.

In some cases it may be useful  to  be  able  to  do  a  rewind  without
erasing  the cached device status.  This is done by specifying the init-
option on the command line.


2.5.2 New magtape driver

    The IRAF magtape driver is new for V2.10.  The chief feature of  the
new  driver  is  that  it is programmable, via the tapecap device entry,
making it possible to interface new  devices  or  host  drivers  without
having  to  make  any binary code changes to IRAF.  All one has to do is
add a device entry in the tapecap file.


2.5.2.1 Software structure

    The IRAF magtape system has enough layers that it may  be  confusing
exactly  what  the  magtape  driver  is and what role it plays.  A brief
review of the software structure may help clarify things.

Starting at the top we have applications, such as the DATAIO and MTLOCAL
tasks,   which  can  access  magtape  files.   These  use  the  IRAF/VOS 
interfaces FIO (file i/o) and MTIO (magtape  i/o)  to  do  i/o  to  tape
devices.   For  the  most  part  i/o  is  done  with  FIO  and is device
independent, but a call to the magtape system  is  required  to  open  a
magtape  device.   The  tapecap file is read by the GTY interface, which
is called by MTIO.  MTIO passes the tapecap device entry as a string  to
ZFIOMT,  the  IRAF  magtape  device  driver, when a tape file is opened.
All magtape positioning and i/o is  done  by  ZFIOMT  driver  under  the
control  of  the  MTIO  interface.   Device  allocation is done prior to
accessing the device  by  the  CL  and  is  handled  by  the  allocation
routines  in  the  ETC  interface,  with kernel support (this is largely
independent of the magtape system).

All of the code listed above is part of the portable IRAF system  (i.e.,
is  OS independent and shared by all host versions of IRAF) until we get
to the ZFIOMT driver.  This is in the IRAF kernel  and  is  host  system
dependent.   At  present the only version of ZFIOMT is the UNIX version;
other versions, e.g., for VMS will follow as IRAF is  updated  to  V2.10
on  these  systems.   The  UNIX version of ZFIOMT uses only generic UNIX
ioctls and should compile on most UNIX systems without change.   All  of
the  system  and  device dependence has been concentrated in the tapecap
file.  The ioctls used to  communicate  with  a  UNIX  tape  device  are
fairly  standard,  but  the  semantics  are often poorly defined and are
certainly not standardized.

Beneath the IRAF driver are the host level magtape  device  drivers.   A
given  host  system  may  have more than one of these, typically one for
each class of magtape device.  Some systems, notably Sun with  their  ST
(SCSI  tape)  driver, try to control more than one type of device with a
single host driver.  The host driver may come with  the  OS  or  may  be
supplied by a third party vendor.

Beneath  the  host  driver  is the actual tape device.  Often these days
this is a SCSI tape device such as a DAT or Exabyte.  These devices  are
intelligent  peripherals;  control of the physical tape hardware resides
in the tape unit.  There is a small computer in each  tape  drive  which
communicates  with  the  host  computer  via the SCSI interface, passing
commands and data back and forth.  The drive will buffer  256K  to  512K
of  data  passed in bursts over the SCSI bus, and then copied to or from
the physical  media  at  a  much  slower  rate.   These  drives  emulate
variable  size records by blocking and deblocking within the drive unit,
and writing fixed size blocks to the  media.   Features  such  as  error
correction and data compression are also handled within the drive.

Although we usually speak of tape devices, the "magtape" device does not
have to be a tape device at all.  The IRAF magtape system can also  make
use  of,  e.g.,  a  floppy  disk, or anything that looks like a raw disk
partition.  The problem with the latter devices  is  that  they  usually
don't  support  files  and  file  positioning, hence can only be used to
store one "file".


2.5.2.2 Driver features

    A detailed description of the magtape driver is beyond the scope  of
this  document.   Briefly,  the  driver  supports  two  main  classes of
devices, variable record size devices  and  fixed  block  devices.   All
file  positioning is handled by the driver, and while the driver has the
device open it is responsible for keeping track of the  device  position
(the  saved  device  position is passed in at open time and saved by the
high level code at close time).  A couple of  dozen  tapecap  parameters
are  defined  which describe the characteristics of each device, such as
whether it supports variable records, the maximum record  size,  whether
it  can  backspace,  and  so  on.  A socket or file based status logging
feature is provided which allows detailed monitoring of the tape  status
during execution (see below).

In  the  simplest  case  the  new  magtape system, coupled with the UNIX
version of the magtape driver, will emulate simple  UNIX  commands  such
as  tar  and  mt  insofar  as  the  requests made to the host system and
magtape device are concerned.  That is, if one writes a series of  files
the  only  system  requests  made for each file will be open, write, and
close.  When reading a series of files in  sequence  the  only  requests
made  will  be  open, read, and close.  Providing no file positioning is
attempted it is possible to get by with  no  file  positioning  requests
other  than  rewind.   The driver provides extensive facilities for file
positioning, using tapecap parameters to work  around  any  shortcomings
of  the  host system or device, but in case of trouble it is possible to
operate with only open, close, read, and write  requests,  which  should
work for any device (unless it is truly broken).


2.5.3 Tapecap

    The  tapecap  file, or magtape device capabilities file, defines the
magtape devices known to the system and how  to  access  these  devices.
While  large  portions  of this file depend only upon the host operating
system and device type and hence are fairly site  independent,  it  will
typically  be  necessary  to customize the tapecap file to configure the
IRAF magtape system for a site.  In  normal  use  the  tapecap  file  is
invisible  to  the  user,  but  users  with special problems may wish to
learn more about tapecap to gain more control over the behavior  of  the
magtape system.


2.5.3.1 Using tapecap

    The  standard  tapecap  file  is  the  file  dev$tapecap.   A system
environment variable tapecap is defined which by default points to  this
file.

Users can customize or manipulate tapecap entries in either of two ways.
The user can have their own private copy of the tapecap file (much as is
currently  done  with  the termcap and graphcap files), by resetting the
value of the tapecap environment variable to point to their  local  copy
of the file.  For example,

    cl> reset tapecap = home$tapecap

This  may be necessary to customize a device entry, or add support for a
local device not supported by the system wide tapecap file.

It is also possible to modify a tapecap device entry "on  the  fly",  by
overriding the values of specific tapecap parameters on the command line
when the device is accessed.  For example,

    cl> mtex "mta[:so=/dev/tty]"

would override the default value  of  the  tapecap  parameter  "so"  for
device  mta  (in  this case enabling status output logging and directing
this output to the user terminal).

Specifying  tapecap  parameters  on  the  command  line  is  useful  for 
experimentation  but  rapidly  becomes  tiresome  if  many  commands are
entered.  In this case it becomes simpler to redefine tapecap to include
the desired tapecap parameter overrides.

    cl> reset tapecap = ":so=/dev/tty"

As  we  see,  the  tapecap  environment  variable  can be used to either
specify the tapecap file name, or  globally  override  specific  tapecap
parameters  (all  device  entries  are  affected).  The full form of the
value string for tapecap is

    cl> reset tapecap = [tapecap-file] [`:' capabilities-list]

Any number of colon-delimited tapecap capabilities or parameters may  be
given.

It  is  beyond  the  scope  of  this  document to detail all the tapecap
parameters here.  A reference paper for the magtape system  is  planned.
For  the  present,  there  is a summary of the tapecap parameters in the
ZFIOMT driver source file, os$zfiomt.c.  For examples  of  actual  usage
refer to the tapecap file in the distributed system.


2.5.3.2 Configuring tapecap

    The   tapecap   file   uses  the  standard  "termcap"  file  format, 
originally developed for BSD UNIX and adopted long ago  for  IRAF.   Any
UNIX  system  will probably have a manual page defining the termcap file
format, if not this can be obtained from the IRAF group.

The distributed tapecap file is divided into three  sections:  the  host
machine  specific  device  aliases  (names  like  "mta"  etc.), the site
logical devices, and the  generic  device  entries.   To  customize  the
tapecap  file  for  a site you modify the first and second sections.  To
configure the tapecap file for a particular host machine  you  uncomment
the  entries  for  that  host  in  the first section of the file.  Sites
which don't have a large network of hosts  may  prefer  to  combine  the
first  two  sections  to  simplify things.  Site specific changes should
never be made to the bottom, or generic, part of the  tapecap  file,  as
you  will  want  to update this portion of the file when new versions of
IRAF are released.

Don't be intimidated by the apparent complexity of some of  the  tapecap
device  entries.   In  most  cases the generic device entry will already
exist for the device you need to interface, and all you need  to  do  is
add  a site entry which references the generic entry.  In some cases the
generic entry itself may be sufficient (for example, in the  distributed
SunOS  version  of  tapecap, logical device "mtxb0" would provide access
to Exabyte unit 0 interfaced with the Sun ST driver,  "mtxb1"  would  be
the same but unit 1, "mthp0" the HP 9 track tape on unit 0, and so on).

For  example  to  interface  Exabyte unit 2, using the Sun ST driver, as
local device "mta", the following entry would suffice.

    mta|        :tc=mtst2-exb:

If the generic device  entry  provided  doesn't  quite  work  and  minor
modifications  are  needed,  these should be made to the local entry and
not the standard generic  entry.   This  is  easily  done  with  termcap
parameter  redefinitions.   For example, in SunOS 4.1.2 (but not earlier
versions  of  SunOS)  there  is  a  bug  in  the  Sun  ST  driver  which 
necessitates  rewinding  the  tape after a tape scan is made to position
to EOT (!).  The capabilities ":se:nb"  can  be  added  to  the  tapecap
entry  for  the  device  to  workaround  this  bug,  as in the following
example.

    mta|        :se:nb:tc=mtst2-exb:

The parameters mean that the device spaces past EOT in a read  (se)  and
cannot  backspace  (nb).   Neither of these things is actually true, but
the effect is that the tape is rewound and spaced forward  to  get  back
to  the  desired file, working around the host level driver bug.  Access
will be less efficient than it should be, but the  interface  will  work
properly and the user does not have to be concerned with the problem.

As  a  final  example, suppose we need to write a new tapecap entry from
scratch because there  is  no  generic  entry  for  the  device  in  the
distributed  tapecap file.  To simplify things we assume that no special
tapecap parameters are needed, i.e., that  the  standard  UNIX  defaults
builtin  to  the driver will work for the device.  We are upgrading from
an old version of IRAF so we already have an  old  dev$devices  file  to
work  with.   For the purposes of our example we use an old HP 88780 1/2
tape drive entry, but pretend that the device is something which is  not
already supported.

The old devices file entry was as follows.

    mta         nrst20 nrst4 nrst12 nrst28 rst4 rst12 rst20 rst28
    mta.6250    nrst20 nrst4 nrst12 nrst28 rst4 rst12 rst20 rst28

The minimal tapecap entry required to duplicate this is the following.

    mta|mta6250|HP 88780 1/2 inch tape drive:\
            :al=nrst4 nrst12 nrst20 nrst28 rst4 rst12 rst20 rst28:\
            :dv=nrst20:lk=st4:tc=9tk-6250:

Here,  the  "al"  parameter  lists the device files to be allocated, the
"dv" parameter is the device file to be used  for  i/o  at  the  desired
density  (6250bpi  in  this  case), and "lk" is the root file name to be
used for the ".lok", or device status file.   The  "tc="  picks  up  the
standard  parameters for a 9 track 1/2 inch tape drive operating at 6250
bpi.  Two device aliases are defined, "mta" and "mta6250".


2.5.3.3 Supported devices

    The IRAF magtape system itself should  support  almost  any  magtape
device  if  properly configured.  What devices are actually supported at
a site depends upon the tapecap file, and in particular  upon  the  host
system (different host systems have different tapecap files).

                Device                              Driver

        QIC-11 cartridge tape                  Sun st
        QIC-24 cartridge tape                  Sun st
        QIC-150 cartridge tape                 Sun st
        Pertec compatible 1/2 inch drives      Xylogics
        HP 88780 1/2 inch drive                 Sun st
        WangDAT 1300, 2000                     ApUNIX
        HP DAT                                 ApUNIX
        Exabyte 8200, 8500                     ApUNIX, Sun st, Ciprico
        DC2000 cartridge tape                  A/UX tc
        FDHD floppy disk                       A/UX fd

As  an  example,  the tapecap file distributed in the V2.10.0 release of
Sun/IRAF supported the devices listed in the table above.   New  devices
are  constantly  being  added.   As V2.10 IRAF propagates to the various
platforms on which IRAF is supported,  similar  tapecap  files  will  be
configured for those systems.


2.5.4 Status output

    The  new  magtape  driver  has  a  facility  known  as status output
logging which can be used to monitor  interactively  lengthy  tape  jobs
while  i/o  is  in  progress.   The  status  output facility can also be
useful for debugging magtape problems.

In its simplest form, the status output  may  be  directed  to  a  file,
e.g.,  an  actual  text  file,  or  a terminal device.  Status output is
enabled by setting the "so" option in tapecap.  For example,

    cl> mtex "mta[:so=/tmp/mta.out]"

would enable status output logging and direct the  output  text  to  the
file /tmp/mta.out.  Likewise,

    cl> mtex "mta[:so=/dev/ttyp7]"

would  enable  status  output and direct the output to a pseudoterminal,
e.g., an xterm window.  When this form of status output logging is  used
one  sees  the  raw,  driver  level status messages, as in the following
example.

    cl> mtex "mta[:so=/dev/tty]"
    open device tc2n\n
    devtype = Apple Tape 40SC
    tapetype = DC2000
    tapesize = 38500
    density = na
    blksize = 8192
    acmode = read
    file = -1
    record = -1
    nfiles = 0
    tapeused = 0
    device tc2n opened on descriptor 4\n
    rewinding...
    done\n
    position to file 1\n
    file = 1
    record = 1
    reading...\n
    recsize = 65536
    record = 9
    tapeused = 64
       (etc.)


The UNIX version of the new magtape driver also has an option to  direct
status  output to a TCP/IP socket, which can be anywhere on the network.
For this option to be useful one must have a program which  will  listen
on  the designated socket, accept the connection when the magtape driver
tries to open a  connection,  and  then  read  and  process  the  status
messages (which are still text, exactly as in the example above).

Status  output to a socket is enabled by giving a host name instead of a
file name in the "so" directive:

    cl> mtex "mta[3:so=lepus]"

to examine file 3,  directing  status  messages  to  a  socket  on  node
"lepus".

An  X11  client application called xtapemon has been developed to listen
on a socket, read messages from the tape driver, and provide a real-time
display  of  the  status  of the tape device.  While not included in the
V2.10 IRAF distribution, this utility will be available  later  in  1992
as part of the X11 support package currently under development.


2.5.5 Error recovery

    Considerable  effort  went  into  "bullet  proofing" the new magtape
system to make it recover gracefully from  ctrl/c  interrupts  or  other
program  aborts.  In practice it can be very difficult to reliably catch
and recover from interrupts in a multiprocess, distributed  system  such
as  IRAF.   No doubt there are still conditions under which an interrupt
will leave the magtape system in a bad state, but in most  circumstances
the  system  should  now be able to successfully recover gracefully from
an interrupt.

If it is necessary to interrupt a tape operation,  it  is  important  to
understand  that  the  host system will not deliver the interrupt signal
to the IRAF process until any pending  i/o  operation  or  other  driver
request  completes.  For example, in a read operation the interrupt will
not be acted upon until the read  operation  completes,  or  in  a  tape
positioning  operation  such  as  a  rewind  or  file  skip forward, the
interrupt will not be acted upon until the tape gets  to  the  requested
position.   For  a  device such as a disk you rarely notice the delay to
complete a driver request, but for a  magtape  device  these  operations
will  take  anywhere  from  a  few  seconds  to a few tens of seconds to
complete.  Type ctrl/c once, and wait until the operation completes  and
the system responds.

If a magtape operation is interrupted, the IRAF error recovery code will
mark the tape position  as  undefined  (devstatus  will  report  a  file
number of -1).  This will automatically cause a rewind and space forward
the next time the tape is accessed.  The rewind is necessary  to  return
the tape to a known position.


2.5.6 Device optimization

    In  addition to making it possible to characterize the behavior of a
magtape device to  permit  the  device  to  be  accessed  reliably,  the
tapecap  facility  is used to optimize i/o to the device.  The parameter
"fb" may be  specified  for  a  device  to  define  the  "optimum"  FITS
blocking  factor  for  the device.  Unless the user explicitly specifies
the blocking factor, this is the value that the V2.10  wfits  task  will
use  when writing FITS files to a tape.  Note that for cartridge devices
a FITS blocking factor of 22 is used for some  devices;  at  first  this
may  seem  non-standard  FITS,  but  it  is perfectly legal, since for a
fixed block  size  device  the  FITS  blocking  factor  serves  only  to
determine  how  the  program  buffers the data (for a fixed block device
you get exactly  the  same  tape  regardless  of  the  logical  blocking
factor).   For  non-FITS  device  access  the  magtape system defines an
optimum record size which is used to do  things  like  buffer  data  for
cartridge tape devices to allow streaming.

Some  devices,  i.e.,  some  DAT and Exabyte devices, are slow to switch
between read and skip mode, and for files smaller than a  certain  size,
when  skipping  forward  to the next file, it will be faster to read the
remainder of the file than  to  close  the  file  and  do  a  file  skip
forward.   The  "fe"  parameter  is provided for such devices, to define
the "file equivalent" in kilobytes of file data, which can  be  read  in
the  time  that  it takes to complete a short file positioning operation
and resume reading.  Use of this device parameter  in  a  tape  scanning
application  such  as  rfits can make a factor of 5-10 difference in the
time required to execute a tape scan of a  tape  containing  many  small
files.

On most cartridge tape devices backspacing, if permitted at all, is very
slow.  On such devices it may be best to set the "nf" parameter to  tell
the driver to rewind and space forward when backspacing to a file.


2.5.7 MTIO interface changes

    A  number  of  new  routines  were  added  to the MTIO (magtape i/o)
programming  interface.   These  are  documented  in  the   summary   of 
programming   environment   revisions  given  below.   Existing  magtape 
applications may benefit from being modified to make use  of  these  new
routines.



2.6 Graphics and Imaging Subsystem Enhancements


2.6.1 New graphics applications

    New  tasks  for  histogram  plotting,  radial  profile plotting, and
producing lists of the available graphics devices  have  been  added  to
the  PLOT package.  All of the tasks in this package were revised to add
support for  world  coordinates.   A  related  task  for  drawing  world
coordinate  grid  overlays on images or plots was added to the IMAGES.TV
package.   See  the  appropriate  sections  of  IRAF  and  NOAO  package 
revisions below for further information on these changes.


2.6.2 Graphics system changes


2.6.2.1 Encapsulated postscript SGI kernel

    A  new  encapsulated postscript SGI kernel has been added.  Graphics
output may be directed to any of the logical graphics devices eps, epsl,
epshalf,  etc.  to  render  a plot in encapsulated postscript, e.g., for
inclusion as a figure in a document.  For example,

    cl> prow dev$pix 101 dev=eps; gflush

will leave a ".eps" file containing the plot in the  current  directory.
The  command  "gdev  dev=eps"  will  produce a list of the available EPS
logical graphics devices.


2.6.2.2 Graphics output to the default printer

    Graphics output (SGI postscript) can now be  directed  to  the  UNIX
default  printer  device  by  directing  output  to  any  of the logical
devices "lpr", "lp", or "lw".

    cl> prow dev$pix 101 dev=lpr


Output will be sent to the default device for the UNIX lpr command  (set
by  defining  "PRINTER"  in  your  UNIX  environment).   This  makes  it 
possible to make immediate use the  distributed  IRAF  graphcap  without
having  to  add  entries  for  specific  local devices (although you may
still wish to do so).


2.6.2.3 Tick spacing algorithm improved

    The algorithm used to  draw  the  minor  ticks  on  IRAF  plots  was
replaced  by an improved algorithm contributed by the STScI STSDAS group
(Jonathan Eisenhamer in particular).   This  was  derived  from  similar
code in Mongo.


2.6.2.4 Graphics metacode buffer

    The  default maximum size of the graphics metacode buffer in the CL,
used  to  buffer  graphics  output  for  cursor  mode  interaction,  was 
increased  from  64K  to  128K  graphics  metacode  words  (256Kb).  The
cmbuflen environment variable may be used to change this value.


2.6.2.5 IMTOOL changes

    The imtool display server (SunView) was enhanced to  add  additional
builtin  color  tables,  support  for user color tables, and setup panel
control over  the  screen  capture  facilities.   A  version  supporting
encapsulated  postscript  output  is in testing.  This will be the final
version of the SunView based version of imtool (the new display  servers
are all X window system based).


2.6.2.6 IMTOOLRC changes

    The  imtoolrc  file,  used  by  display  servers  such as imtool and
saoimage to define the available image frame buffer configurations,  has
been  relocated  to  the  DEV directory to make it easier for local site
managers to customize.  The IRAF install  script  now  uses  a  link  to
point  to  this  file,  rather  than  copying it to /usr/local/lib.  The
maximum number of frame buffer configurations was increased from  64  to
128.


2.6.2.7 X11 support

    The  released  version of V2.10 does not contain any changes insofar
as X11 support is concerned.  Since our X11 support code is  host  level
stuff,  with  minimal  ties  to  IRAF  per  se,  it  is  being developed
independently  of  the  V2.10  release  and  will  be  distributed   and 
installed as a separate product.



2.7 Image Structures


2.7.1 Image I/O (IMIO)

    The  image  i/o  interface  (IMIO)  is  that part of the IRAF system
responsible for imagefile access and management.  The  changes  to  IMIO
for V2.10 included the following.


2.7.1.1 Null images

    Null  images  are now supported for image output, much like the null
files long supported by the file i/o system.  For example,

    cl> imcopy pix dev$null

would copy the image "pix"  to  the  null  image.   This  exercises  the
software  but  produces no actual output image.  Unlike null files, null
images do not work for input since images  have  some  minimal  required
structure, whereas files can be zero length.


2.7.1.2 Preallocating pixel file storage

    In  the  UNIX  versions of IRAF, when a new image is created storage
is not physically allocated for the  output  image  until  the  data  is
written.   This is because most UNIX systems do not provide any means to
preallocate file system storage.  The UNIX/IRAF file creation  primitive
zfaloc,  used  by  IMIO  to  create  pixel files, now provides an option
which can be used to force storage to be physically  allocated  at  file
creation  time.   This  feature  is  enabled by defining the environment
variable ZFALOC in the UNIX environment.  For example,

    % setenv ZFALOC

can be entered before starting IRAF to cause space for all  pixel  files
to  be  preallocated  as  images  are  created.  If it is not desired to
preallocate all image storage (there is a significant  runtime  overhead
associated  with  preallocating large images) then a value string can be
given to specify which types of images to preallocate storage for.   For
example,

    % setenv ZFALOC /scr5

would preallocate only those pixel files stored on the /scr5 disk, and

    % setenv ZFALOC "/scr5,zero"

would  preallocate  only  images  on  /scr5,  or  images  containing the
substring "zero" in the image name.  In general,  the  string  value  of
ZFALOC  may  be  the null string, which matches all images, or a list of
simple pattern substrings identifying the images to be matched.

In most cases the default behavior  of  the  system,  which  is  to  not
physically  allocate  storage  until  the data is written, is preferable
since it is more efficient.  The preallocation option  is  provided  for
users  who,  for example might have an application which spends a lot of
time computing an image, and they want to ensure  that  the  disk  space
will be available to finish writing out the image.


2.7.1.3 Image templates now sorted

    As mentioned earlier in the System Management section, UNIX/IRAF now
sorts UNIX directories.  One result of this  is  that  the  sections  of
image  templates  which  are  expanded  via  pattern  matching against a
directory will now be sorted, or at least logically ordered  (the  final
output  list will not necessarily be fully sorted if string substitution
is being performed - this is the reason the output list  itself  is  not
sorted).


2.7.1.4 The dev$pix test image

    Minor  changes  were  made  to  clean  up  the  image  header of the
standard test image dev$pix.  A second  test  image  dev$wpix  has  been
added.  This is the same image, but with a different header containing a
test world coordinate system (actually the image is just a second  image
header pointing to the dev$pix pixel file, now shared by both images).


2.7.2 Image kernels (IKI)

    The  IMIO  image  kernels  are  the data format specific part of the
IRAF image i/o  subsystem.   Each  kernel  supports  a  different  image
format.   Existing  disk image formats range from the conventional image
raster formats (OIF and STF) to the photon image format (QPF  and  QPOE)
and  the  pixel mask image format (PLF and PMIO/PLIO).  There also exist
special image kernels which allow IMIO to be  used  to  access  non-disk
storage devices such as image display frame buffers.


2.7.2.1 New PLF image kernel

    A  new  image  kernel,  the  PLF  image kernel, has been added which
allows IRAF PMIO/PLIO pixel masks to be stored as images.   This  kernel
first  appeared  as  a  patch  to  version  2.9  IRAF  but  was actually
developed within V2.10.

Pixel mask images may be created,  deleted,  read,  written,  etc.  like
other  IRAF  images,  but  the  image  is stored in a special compressed
format designed  specially  for  image  masks.   An  image  mask  is  an
N-dimensional  raster-like object wherein typically there are regions of
constant value but arbitrary shape.   Masks  are  used  by  applications
involving  image decomposition.  The image is decomposed into regions of
different types, the type of region being very dependent upon  the  type
of  image analysis being performed.  A special type of mask image is the
bad pixel mask, used  to  flag  the  bad  pixels  in  an  image.   Other
applications  use  masks  for  data  quality,  to identify the region or
regions to be used for analysis, and so on.

A PMIO image mask is a special case of a PLIO  pixel  list.   Masks  can
exist  and  be  accessed  independently of the image i/o system, but the
PLF image kernel allows a mask to be stored  and  accessed  as  an  IRAF
image.   Any  IRAF  application  which operates upon images can operated
upon a mask image.  For example, the imcalc (image  calculator)  program
in  the  SAO  XRAY  package  can be used to combine images and masks, or
compute new masks by evaluating an algebraic expression over an image.

Mask images have the  reserved  image  extension  ".pl".   Some  of  the
features of mask images are illustrated by the following example.

    cl> imcopy dev$pix pix.pl
    dev$pix -> pix.pl
    cl> imstat dev$pix,pix.pl
    #     IMAGE      NPIX      MEAN    STDDEV       MIN       MAX
        dev$pix    262144     108.3     131.3       -1.    19936.
         pix.pl    262144     108.3     131.3        6.    19936.

This  is a sort of worst case test of the mask encoding algorithm, since
our test image is not a mask but a  noisy  image  (and  hence  not  very
compressible).   Note  that masks must be positive valued, hence the MIN
value is different for the two images.  Storing dev$pix as a  mask  does
not  result  in  any  significant  compression, but for a real mask very
high compression factors are possible.  The compression  algorithm  used
in  PLIO  is  simple  and  fast,  combining 2D run length encoding and a
differencing technique in a data structure  allowing  random  access  of
multidimensional masks (masks are not limited to one or two dimensions).

For further information on pixel lists and pixel masks, see the document
plio$PLIO.hlp  in  the  online  system.   This  is  also  available   as 
plio.txt.Z in the IRAF network archive.


2.7.2.2 OIF image kernel changes

    The  OIF  image kernel is the kernel for the old IRAF image format -
this is still the default IRAF  image  format.   Revisions  to  the  OIF
kernel for V2.10 included the following items.

o   A  valid  image  header  is now written even if an application which
    writes to a new image is aborted.  Previously, the pixel file  would
    be  written  but  the  image  header  would be zero length until the
    image was closed.  If an image creation task aborts the  image  will
    likely  be  incomplete in some way, e.g., part of the pixels may not
    have been written to, or  the  header  may  be  missing  application
    specific  keywords.   By  valid image header we mean that the header
    will be valid to IMIO, allowing the image to be accessed to  try  to
    recover the data, or to delete the image.

o   The  image  header  file of a new image is now written to and closed
    at image create time, then reopened at image close  time  to  update
    the   header.    This   frees  one  file  descriptor,  an  important 
    consideration for applications which for some reason need  to  write
    to dozens of output images simultaneously.

o   The  OIF  image  kernel  uses file protection to prevent inadvertent
    deletion of the  image  header  file.   In  UNIX/IRAF  systems  file
    delete  protection  is  simulated  by  creating a ".." prefixed hard
    link to the file.  This could cause  problems  with  images  if  the
    user  deleted  the  image  header  file outside of IRAF, leaving the
    ".." prefixed link to the file behind.  A  subsequent  image  create
    operation  with  the same image name would fail due to the existence
    of the hidden ".." prefixed file.  It is unlikely that such  a  file
    (with  a  ".." prefix and a ".imh" extension) could ever be anything
    but an old IRAF image header file, so the system will  now  silently
    replace such files when creating a new image.
    
    A  couple  of  related  system  changes  were  made which, while not
    implemented in the OIF kernel, do involve the OIF  or  ".imh"  image
    format.   The  default template login.cl now defines the environment
    variable imtype and sets it  to  "imh".   The  environment  variable
    min_lenuserarea  is  also  defined now at login time, with a default
    value of 20000, allowing image headers with up to about  250  header
    parameters.
    
    
2.7.2.3 STF image kernel changes

    The  STF image kernel is the kernel for the online HST (Hubble Space
Telescope) image format.  This  format  allows  multiple  images  to  be
grouped  together  in  a single "group format" image.  There is a common
image header stored in a FITS-like format, as  well  as  a  small  fixed
format binary header associated with each image in the group.

o   A  check  was  added  for a group index out of range.  This yields a
    more meaningful error message  about  no  such  group,  rather  than
    having  IMIO  complain  about a reference out of bounds on the pixel
    file.

o   Support was added for non-group STF images (GROUPS=F in the header).
    At  first  glance a non-group group format image might seem a little
    silly, but it turns out that a  non-group  STF  image  with  a  zero
    length  group parameter block is very close to "FITS on disk", since
    the header is FITS-like and the  image  matrix  is  simple.   It  is
    still  not  true  FITS  since  the  header  and pixels are stored in
    separate  files  and  the  pixels  are  not  encoded  in  a  machine 
    independent  form, but on UNIX hosts which are IEEE standard and not
    byte swapped, it comes close enough to be useful  for  communicating
    with external applications in some cases.
    
    A  true  FITS  image kernel is planned for IRAF.  This will probably
    appear in one of the V2.10 patches, sometime during 1992.
    
    
2.7.2.4 QPF image kernel changes

    The QPF image kernel is the interface  between  the  QPOE  (position
ordered  event file) interface and IMIO, allowing QPOE event files to be
accessed as images by general IRAF applications.   Photon  "images"  are
unique  in that the image raster is generated at runtime as the image is
accessed, optionally passing the photon  list  through  event  attribute
and  spatial  filters,  and  sampling  the  photons  to produce a raster
image.  For example,

    cl> imcopy "snr[time=@snr.tf,bl=4]" snr.imh

would filter the event list stored in the  file  "snr.qp"  by  the  time
filter  stored  in  file  "snr.tf", sample the image space blocking by a
factor of 4, and store the resultant image raster in the OIF image  file
"snr.imh".

    cl> display "snr[time=@snr.tf,bl=4]" 1

would  display  the  same  image raster without creating an intermediate
disk image.

The changes to the QPF interface for V2.10 included the following.

o   A bug was fixed which would prevent  very  long  filter  expressions
    from  being  correctly  recorded  in  the  IMIO  image  header.  The
    current version of IMIO stores  applications  header  parameters  in
    FITS  format,  hence  multiple FITS cards are required to store long
    filter expressions.  The bug would cause only one such  card  to  be
    output.

o   A  new  facility  was  added  which allows general expressions to be
    computed for the input event list and  stored  as  keywords  in  the
    output  image header.  The header of the input QPOE file can contain
    one or more parameters named defattr1,  defattr2,  and  so  on.   If
    present,  the  string  value  of  each  such  parameter  should be a
    statement such as
    
        exptime = integral time:d
    
    which will cause a keyword  named  "exptime"  to  be  added  to  the
    output  image  header,  the  scalar  value  of the keyword being the
    value of the expression on the right.  Currently, only the  integral
    function  is  provided.   This computes the included area of a range
    list field of  the  event  attribute  expression,  such  as  a  time
    filter.   In  the example, "time" is the name of the event attribute
    to be integrated, and the ":d"  means  use  a  range  list  of  type
    double  for the computation.  The data types currently supported are
    integer, real and double.
    
    Other minor changes  to  QPF  included  improvements  to  the  error
    recovery, and other changes to support very large filters.
    
    
2.7.3 World coordinate system support (MWCS)

    MWCS  is  the IRAF world coordinate system package, one of the major
new system interfaces developed for the new  image  structures  project.
A  full  description  of  the  MWCS  interface  is  given  in  the  file 
mwcs$MWCS.hlp in the online system, and in the file  mwcs.txt.Z  in  the
IRAF network archive.


2.7.3.1 Applications support

    MWCS  was  first released in V2.9 IRAF and at the time the interface
was new and few applications were yet using  it.   In  V2.10  IRAF  most
(but  not  all)  applications  which deal with coordinates now use MWCS.
These include all  of  the  system  plotting  tasks,  and  the  spectral
reduction  packages.   Details  of  the MWCS support added to the system
and science applications in  V2.10  are  given  in  the  IRAF  and  NOAO
package revisions section of this revisions summary.


2.7.3.2 New function drivers

    Function   drivers   for   the  arc,  sin,  and  gls  nonlinear  sky 
projections were added, as well as a special  function  driver  for  the
multispec  image format.  The latter allows general programs which don't
know anything about spectra to  access  and  display  spectra  in  world
coordinates, e.g., for plotting.


2.7.3.3 WCS attributes

    The  maximum number of "attributes" per WCS was increased from 64 to
256, mainly to support the multispec function driver, which makes  heavy
use  of  attributes.   A  limit  on the size of a single attribute value
string was removed, allowing arbitrarily large attribute  values  to  be
stored.


2.7.3.4 Axis mapping

    Axis  mapping  is now fully implemented.  Axis mapping is used when,
for example, you extract a 2 dimensional section from  a  3  dimensional
image  and  write  the result to a new image.  Axis mapping allows the 2
dimensions of the new image to be mapped  backed  into  the  original  3
dimensional   WCS,   making   it  possible  to  get  the  full  physical 
coordinates (which are 3 dimensional) for any  point  in  the  extracted
image.   A  new  header keyword WAXMAPnn was added to store the axis map
in image headers.


2.7.3.5 MWCS save format

    The newer IRAF image formats such as QPOE  are  capable  of  storing
arbitrarily  complex  objects such as a MWCS in an image header keyword.
In the case of a stored MWCS object, the MWCS interface  is  responsible
for  encoding  the  object in its external storage format, and restoring
it to a MWCS descriptor when the MWCS is accessed.  The code which  does
this  was revised to add a new version number for the stored V2.10 MWCS,
to make it possible to differentiate between the MWCS save formats  used
in  V2.9  and  V2.10  and allow recovery of MWCS objects from data files
written under V2.9.


2.7.3.6 Bug fixes

    Since MWCS is a new interface and V2.10 saw its first  real  use  in
applications,  a  number  of  interface  bugs were discovered and fixed.
Most of the bugs turned out to be in the part  of  MWCS  which  converts
between   the  internal  MWCS  WCS  representation,  and  the  FITS  WCS 
representation, used for those image formats that  still  use  FITS-like
headers.   Bug  fixes included a problem with the treatment of CROTA2, a
problem with the FITS CD matrix, an axis  mapping  problem  that  caused
"dimension  mismatch"  errors,  and  a  problem  with  support  for  the 
old-style CDELT/CROTA which could result in  a  singular  matrix  during
WCS inversion when compiling a transformation.


2.7.4 Event files (QPOE)

    The  QPOE  interface  is  the interface responsible for creating and
accessing event files, the main data format produced by  event  counting
detectors.   We summarize here the main enhancements to QPOE made during
the preparation of V2.10.  Some of these features  appeared  earlier  in
the  patches  made  to  V2.9  IRAF  but  these revisions have never been
formally documented so we summarize  both  the  old  and  new  revisions
here.  See also the discussion of the QPF image kernel given earlier.


2.7.4.1 Blocking factors

    The  builtin  default  blocking factor, when sampling the event list
to make an image raster, is one.  This may be changed on a  per-datafile
basis by defining the parameter defblock in the QPOE file header.


2.7.4.2 Parameter defaults

    Since  parameters such as the blocking factor can be set at a number
of levels, a parameter defaulting scheme was defined  to  determine  the
precedence  of  parameter  overrides.  The lowest level of precedence is
the builtin default.  Next  is  any  datafile  specific  value  such  as
defblock.   A  value  such  as  blockfactor  set in the QPDEFS file will
override the datafile default value if any.   Specifying  the  parameter
value  in  a  runtime  filter  expression  or qpseti call is the highest
order of precedence and will override any other setting.

Another way to think of this is the  more  recently  the  parameter  was
set,  the  higher  the  precedence.   The  oldest  value  is the default
builtin to the code.  Next is the datafile value, usually set  when  the
datafile  was  created.   Next  is the QPDEFS macro file, usually set by
the user or for a site.  Last (highest precedence) is the value  set  by
the user when the data is accessed.


2.7.4.3 Referencing the current datafile in macros

    A  special  symbol $DFN is now recognized during macro expansion and
if present is replaced by the filename of the current QPOE  file.   This
allows  macros  to be written which automatically perform some operation
involving the  datafile  to  which  they  applied,  e.g.,  computing  an
attribute  list  from  aspect  or data quality information stored in the
datafile header.


2.7.4.4 Bitmask expressions

    Bitmask expressions may now be negated, e.g., "%3B" is the  mask  03
octal, "!%3B" or "!(%3B)" is the complement of 03 octal.


2.7.4.5 Large time filters

    A  number  of  changes  and bug fixes were made to QPOE for V2.10 to
support large time filters.  These are lists of  "good  time"  intervals
used  to  filter  the  event list.  These large time filters may contain
several hundred double precision time intervals  spanning  the  exposure
period.   Often  a  large time filter is combined with a complex spatial
filter (PLIO mask) to filter an event list consisting  of  from  several
hundred  thousand  to  several  million  events.   QPOE  can handle this
efficiently regardless of whether the data is temporarily  or  spatially
sorted  and  regardless  of  the  complexity  of the temporal or spatial
filters.

A number of minor bugs were fixed caused by the large filter expressions
overflowing  various buffers.  The default sizes of the program and data
buffers used to compile filter expressions were increased to  allow  all
but  very  large  filters  to  be  compiled without having to change the
defaults.  If the buffers  overflow  more  space  can  be  allocated  by
setting  the  progbuflen  and  databuflen  parameters  in  QPDEFS (these
buffers are not dynamically resized at runtime for efficiency  reasons).
During  testing with large time filters it was discovered that a routine
used to test floating point equality was being used  inefficiently,  and
compilation  of  large time filters was taking a surprisingly long time.
A change was made which reduced the time to compile large filters  by  a
factor of 10 to 15.


2.7.4.6 Default filters

    QPOE   now  fully  supports  default  event  attribute  and  spatial 
filtering of data at runtime.  The idea is that the full data  set  (all
events)  is  stored in the QPOE file, along with default event attribute
and spatial filters.  When the data is accessed these  filters  are,  by
default,  automatically  applied.  Any user specified event attribute or
spatial filters are "added" to the builtin default  filters  to  produce
the  combined filter used when the event list is accessed.  The point of
all this is to make it easy for  the  user  to  modify  or  replace  the
default  filters  and "reprocess" the raw event list.  In effect the raw
and processed event list are available in the same file.

The default filter and mask, if any, are stored in the  datafile  header
parameters  deffilt  and  defmask.   If  the  datafile contains multiple
event lists a default filter or mask may be associated  with  each  list
by  adding  a  period  and  the  name of the event list parameter, e.g.,
"deffilt.foo" would be the default filter for the event list "foo".

By default, if a default filter or mask exists for an event list  it  is
automatically  applied  when  the  event  list  is accessed.  Use of the
default filter or mask can be disabled in  QPDEFS  with  either  of  the
following statements:

    set nodeffilt
    set nodefmask

The  default filter and mask can also be disabled in a filter expression
by adding a "!" before the expression, as in the following example.

    display "snr[!time=@times.lst,pha=(3,8:11)]"

There are actually several variants on the "=" assignment operator  used
in  filter  expressions  such  as  that  above.   The  operator  "="  is 
equivalent to "+=", meaning the expression term on  the  right  adds  to
any  existing filter specified for the event attribute on the left.  The
operator ":=" on the other hand, means replace any  existing  filter  by
the new filter expression.


2.7.4.7 Alternate coordinate systems

    The  event  structure  used to represent each event in an event list
may  contain  multiple  coordinate  systems  if  desired,  for  example, 
detector  and  sky coordinates.  One coordinate system should be defined
as the default when the event list is created, and if the event list  is
to  be  indexed  it must be sorted using the coordinate system specified
as the default.  Any coordinate system may be  used  when  the  data  is
accessed  however;  this can result in quite different views of the same
data set.  For example,

    cl> display snr.qp 1

would display the QPOE file "snr.qp"  in  display  frame  1,  using  all
defaults  for  the event list, blocking factor, filter, mask, and so on.
The default event coordinate system would probably be  sky  coordinates.
To  display the same event list in detector coordinates, one could enter
the following command.

    cl> display "snr.qp[key=(dx,dy)]" 1

This assumes that the event structure fields "dx" and "dy"  are  defined
somewhere,  either  in  the  datafile header or in QPDEFS (otherwise the
actual field datatype-offset codes must be given).

Currently if the QPOE datafile has a WCS associated with it this WCS can
only  refer  to  one  coordinate  system,  normally  the  default  event 
coordinate system.  Additional WCS can  be  stored  in  the  QPOE  file,
either  in  the  stored  MWCS object or as separate MWCS objects, but at
present there is no mechanism for selecting which will be used  (if  the
parameter  qpwcs exists in the QPOE file header, this is assumed to be a
stored MWCS object and this is the WCS which will be used).



2.8 System Specific Changes


2.8.1 Sun/IRAF

    Since V2.10 has only just been completed and at this stage has  only
been  released on Sun platforms, there are few system specific revisions
to report.  For SunOS  there  were  several  system  specific  revisions
worth noting here.

o   The  HSI  binaries  for  the  sparc  architecture are now statically
    linked.  This makes them considerably larger,  but  avoids  problems
    with  SunOS  complaining  about  shared  library  version mismatches
    (note that we refer here to to Sun shared libraries - this is not  a
    problem  with  the IRAF shared library facility since we control the
    version numbers).

o   The HSI binaries for the Motorola architectures  (f68881  and  ffpa)
    are  not statically linked since they cannot be without running into
    linker problems warning about f68881_used etc.  To avoid or at least
    minimize warnings about SunOS shared library versions the system was
    linked on 4.1.1 instead of  4.1.2.   SunOS  4.0.3  versions  of  the
    Motorola HSI binaries are also available upon request.

o   The  system  as distributed was linked with the name server library,
    -lresolv.  This means that if the local host is  configured  to  use
    the  name server, IRAF will be able to access almost any host on the
    Internet without an entry in the /etc/hosts file on the local host.
    
    Additional  system  specific  changes  will  be  reported   in   the 
    documentation  distributed  with  each release, as V2.10 is moved to
    the various platforms for which IRAF is supported.
    
    
    
3. IRAF and NOAO package revisions

    The revisions for the various packages in the IRAF core  system  and
in  the NOAO packages are summarized below. There have been many changes
with this release.  Users are encouraged to refer  to  the  help  pages,
user's  guides  provided  with  some packages, revisions notes, and more
recent issues of  IRAF  Newsletters  for  more  details.   Comprehensive
notes  on  systems  and  applications  modifications  are  in  the files
pkgnotes.v210.Z and sysnotes.v210.Z in the directory  iraf/v210  in  the
network  archive.   This  summary  can  be  read  online by typing news.
Revisions notes for the various packages can also be accessed online  as
in the following example.

    cl> phelp dataio.revisions opt=sys


One  of  the system changes that affects many tasks in the IMAGES, PLOT,
and LISTS packages as well as most tasks in the  spectroscopic  packages
in  NOAO  is  the  full  implementation  of  the world coordinate system
(WCS), introduced in V2.9 but not fully integrated  into  the  IRAF  and
NOAO  tasks  at  that  time.   There  are  currently  three  classes  of 
coordinate systems: the logical system is in pixel units of the  current
image  section;  the  physical  system  is  in pixel units of the parent
image (for a WCS associated with a raster image); the world  system  can
be   any  system  defined  by  the  application,  e.g.  RA  and  DEC  or 
wavelength.  In general, this should be transparent to  the  user  since
most  defaults have been chosen carefully so that tasks perform the same
as in V2.9.  The NOAO spectroscopic tasks also use the WCS  extensively,
but  again,  this  should  be  transparent  to the user, although it can
cause some problems with backward compatibility.  Users will notice  the
biggest  difference  in the image headers with additional keywords added
by the  interface.   Two  tasks  in  the  PROTO  package  may  help  the
interested  user  understand  more  about  the  WCS  -  see  wcsedit and
wcsreset.  Technical notes on the WCS are available in a  paper  in  the
iraf$sys/mwcs  directory.   Type  the  following  to read more about the
MWCS interface.

    cl> phelp mwcs$MWCS.hlp fi+



3.1 Changes to the IRAF system packages


3.1.1 DATAIO package modifications

o   The output defaults for wfits have  been  modified.   If  the  pixel
    type  on  disk  is  real or double precision the output will be IEEE
    format (FITS bitpix = -32 or -64, respectively).  If the pixel  type
    on  disk  is  short  integer  then the output will be integer format
    (bitpix = 16) as before.  These defaults can of  course  be  changed
    by modifying the parameters for wfits.

o   The  wfits  "blocking_factor"  parameter can accept values up to and
    including 10 for variable blocked devices, i.e.  1/2"  tape  drives,
    Exabytes,  and  DATs.   If the "blocking_factor" parameter is set to
    "0", as in the default, the value is read from  the  "fb"  parameter
    in  the tapecap file (usually 10 for variable blocked devices).  For
    fixed blocked devices such as  cartridge  tape  drives  the  default
    value  for  the  "fb"  parameter  in the tapecap file is 22 (used to
    determine a buffer size) and the block size of the device  is  given
    by the "bs" parameter.

o   All  tasks were modified to accept tapecap parameters as part of the
    magtape file name syntax.  Tapecap parameters can  now  be  appended
    to  the  magtape  file  name  to  add  to  or override values in the
    tapecap file.  For example, "mta6250[:se]" is a valid  magtape  file
    name  (the "" are important when tapecap parameters are specified at
    execution time).  See the file os$zfiomt.c for  more  details  about
    the tapecap parameters.

o   The  rfits  task  has  been  modified to permit a short last record,
    i.e. a last record that has not been padded out to 2880  bytes.   No
    warning messages are issued.

o   rfits  was modified to map ASCII control characters in the header to
    blanks.

o   The sequence number appended to disk file names by rfits  and  wfits
    was modified to 4 digits, i.e. 0001 - 9999.
    
    
3.1.2 IMAGES package modifications

o   WCS  (world coordinate system) support was added to all tasks in the
    IMAGES package that could  introduce  a  coordinate  transformation.
    Some  tasks  had  already been modified for the V2.9 release.  These
    tasks  (blkavg,  blkrep,  geotran,   imcopy,   imlintran,   imshift, 
    imslice,   imstack,  imtranspose,  magnify,  register,  rotate,  and 
    shiftlines),  upon  execution,  will  update  the  image  header  to 
    reflect any transformation.

o   The  listpixels  task  was modified to list the pixel coordinates in
    either logical, physical, or world coordinates.  A format  parameter
    was  added  to  the task for formatting the output pixel coordinates
    taking precedence over the WCS in the image header, if used.

o   A new imcombine task was  added  to  the  package.   This  new  task
    supports  image  masks  and  offsets,  and  has an assortment of new
    combining algorithms.  See the help pages for  complete  details  on
    this powerful new task.

o   The  imhistogram  task  has  a  new "binwidth" parameter for setting
    histogram resolution in intensity units.

o   The default values for the parameters "xscale" and "yscale"  in  the
    register  and  geotran  tasks  were  changed  from  INDEF to 1.0, to
    preserve the scale of the reference image.
    
    
3.1.3 IMAGES.TV package reorganization and  modifications

o   The TV package has been reorganized.  The IIS dependent  tasks  have
    been  moved  into  a subpackage, TV.IIS.  The imedit, imexamine, and
    tvmark tasks that were previously in PROTO have been moved to TV.

o   A new task wcslab developed at  STScI  by  Jonathan  Eisenhamer  was
    added  to  the  package.  wcslab overlays a labeled world coordinate
    grid on an image using WCS information stored in the header  of  the
    image or in parameters of the task.

o   imexamine  was  modified  to  use WCS information in axis labels and
    coordinate readback, if selected by the user.  Two  new  parameters,
    "xformat"  and  "yformat",  were  added to specify the format of the
    WCS if it is not present in the header of the image.

o   A new option  was  added  to  imexamine  to  allow  for  fitting  1D
    gaussians to lines or columns.

o   tvmark  had  two cursor key changes.  The "d" keystroke command that
    marked an object with a dot was changed to ".";  the  "u"  keystroke
    command that deleted a point was changed to "d".
    
    
3.1.4 LISTS package modifications

o   Two  new parameters were added to the rimcursor task, "wxformat" and
    "wyformat".  These  parameters  allow  the  user  to   specify   the 
    coordinate  formats  for  the  output  of  the task and override any
    values stored in the WCS in the image header.
    
    
3.1.5 OBSOLETE package added

o   An new package called OBSOLETE was added.  Tasks will  be  moved  to
    this  package  as  they  are  replaced by newer tasks in the system.
    OBSOLETE tasks will then be removed at the time of the next release.

o   mkhistogram, imtitle, radplt, and the old imcombine task  have  been
    moved  to  the  OBSOLETE package.  Users should become familiar with
    phistogram, hedit, pradprof, and the  new  imcombine  and  use  them
    instead  since  mkhistogram, imtitle, radplt, and oimcombine will be
    retired with the next release.
    
    
3.1.6 PLOT package modifications

o   A new task called phistogram was added to the  PLOT  package.   This
    task  takes  input  from  an  image  or  from a list and allows full
    control over  the  plotting  parameters.   This  task  replaces  the
    obsolete.mkhistogram task.

o   A  new task pradprof was added to the PLOT package.  This task plots
    or lists  the  radial  profile  of  a  stellar  object.   This  task
    replaces the obsolete.radplt task.

o   A  new  task  called  gdevices  was  added to the package.  gdevices
    prints available information  known  about  a  particular  class  of
    device.   The  default  parameters are set up to print a list of the
    available stdimage devices in the standard graphcap file.

o   WCS support was added to the tasks graph, pcol(s), and  prow(s).   A
    new  parameter  called  "wcs"  was  added  to  define the coordinate
    system to be used on the axis, either logical,  physical  or  world.
    Two  additional parameters, "xformat" and "yformat", were also added
    to allow the user to set the format for axis labels  overriding  any
    values  in  the  image  header.   The "xlabel" parameter values were
    extended to include the special word "wcslabel" to  select  the  WCS
    label for the x axis from the image header.

o   WCS  support  was  added to the task implot.  A new parameter called
    "wcs" was added  to  define  the  coordinate  system  for  plotting,
    either  logical, physical, or world.  Two new ":" commands were also
    added: ":w" allows the user to set a  new  WCS  type  interactively;
    ":f"  allows  the  user to change the axis format, for instance, ":f
    %H" would change the axis to read h:m:s, if the world coordinate  RA
    had  been  defined  in the image header.  The "space" key now prints
    out the coordinate and pixel value information.

o   graph has a another new parameter "overplot" that  allows  the  user
    to overplot multiple plots with different axes.

o   The  default  parameters  for  "floor"  and "ceiling" in contour and
    surface were changed to INDEF.
    
    
3.1.7 PROTO package reorganization and modifications

    This package has been reorganized.  The PROTO  package  now  resides
in  the  core  system.  Tasks in the old PROTO package that were general
image processing tools were kept in this new PROTO package.  Tasks  that
were  more  data reduction specific were moved to the new NPROTO package
in the NOAO package.  The current PROTO package now contains  the  tasks
binfil,   bscale,  epix,  fields,  fixpix,  hfix,  imalign,  imcentroid, 
incntr,  imfunction,  imreplace,  imscale,  interp,  irafil,  joinlines, 
suntoiraf, wcsedit, and wcsreset.

o   The  new  task  hfix  was added to the package. This task allows the
    user to extract the image headers into a text file, view  or  modify
    this  file  with  a  specified  command,  and  then update the image
    header with the modified file.

o   A new task called suntoiraf was added to this package.   This  is  a
    host  dependent  task that will most likely be useful only on Sun's.
    This task converts a Sun raster file into an IRAF image.

o   Two new tasks dealing with the  WCS  were  added  to  this  package,
    wcsreset  and  wcsedit.   wcsreset  resets the coordinate systems in
    the image header to the logical coordinate system.   wcsedit  allows
    the  user to modify the existing WCS or to create a new WCS and then
    update the image header.

o   A new version of bscale was added to  the  package.   The  task  now
    takes a list of input images and output images.

o   A  new  version  of  imfunction  was added to the package.  The task
    supports many more functions, for example log10,  alog10,  ln,  aln,
    sqrt,  square,  cbrt,  cube,  abs,  neg,  cos, sin, tan, acos, asin,
    atan, hcos, hsin, htan, and reciprocal.

o   imreplace was modified to support the "ushort" pixel type.

o   The task join has been renamed joinlines.
    
    
3.1.8 Additions to XTOOLS and MATH

    Programmers may be interested in the following new additions to  the
XTOOLS and MATH libraries.

o   The  interactive  non-linear  least  squares fitting package INLFIT,
    developed by Pedro Gigoux at CTIO, was added to XTOOLS.

o   The 1D  image  interpolation  routines  in  the  MATH  library  were
    modified to support sinc interpolation.
    
    
3.1.9 Glossary of new tasks in the IRAF core system

Task            Package         Description

gdevices        plot    List imaging or other graphics devices
hfix            proto   Fix image headers
imcombine       images  Combine images pixel-by-pixel
phistogram      plot    Plot or print the histogram of an image or list
pradprof        plot    Plot or list the radial profile of an object
suntoiraf       proto   Convert Sun rasters into IRAF images
wcsedit         proto   Edit the image coordinate system
wcslab          tv      Overlay an image with a world coordinate grid
wcsreset        proto   Reset the image coordinate system


3.2 Changes to the NOAO Packages

    An updated version of the observatory task has been installed at the
NOAO level.  The task sets observatory parameters  from  a  database  of
observatories  or from the parameters in the task itself.  Many packages
and tasks within the NOAO packages that  need  information  about  where
the data was observed use information supplied by the observatory task.


3.2.1 ARTDATA package modifications

    A  new version of the ARTDATA package was released with IRAF version
2.9.1.  A summary of those changes plus modifications since that  update
are  listed below.  A more comprehensive list of the changes included in
V2.9.1 are discussed in IRAF Newsletter Number 10.

o   A new task mkechelle has  been  added  that  creates  artificial  2D
    echelle images.

o   A  new  task  mkexamples  has  been  added.  The task is intended to
    generate a variety of artificial images to be  used  in  testing  or
    demonstrations.

o   A  new  task  mkheader adds or modifies image headers using a header
    keyword data file.

o   The mk1dspec task was  modified  to  create  multispec  and  echelle
    format images, line by line.

o   A  parameter "header" was added to mkobjects, mknoise, mk1dspec, and
    mk2dspec so that a header data file could be  added  to  the  output
    image.   Other  header parameters are also added to the image header
    such as gain, rdnoise, and exptime.

o   A   "comments"   parameter   was   added   to   various   tasks   to  
    include/exclude  comments  in  the  header  of the output image that
    describe the data parameters.
    
    
3.2.2 ASTUTIL package modifications

o   A new task gratings  has  been  added  to  the  package.  This  task
    computes  grating  parameters;  five of the seven parameters must be
    specified at one time.

o   A new task setjd has been added to the package.  setjd computes  the
    geocentric,  heliocentric,  and  integer  local  Julian  dates  from 
    information given in the headers of the input list of images.   This
    information is then listed or added to the image headers.

o   A  few  changes  were  made  to  setairmass.  The  default value for
    "update" was changed to "yes"; an update  field  was  added  to  the
    "show"  messages;  a  warning is printed if both "show" and "update"
    are set to "no" indicating that nothing was done.
    
    
3.2.3 DIGIPHOT package modifications

    A new version of the DIGIPHOT package was installed.   Some  changes
were  made  to the existing APPHOT package used for aperture photometry,
and those are mentioned below.  But three new packages  have  also  been
installed, DAOPHOT, PHOTCAL, and PTOOLS.

DAOPHOT  has  been available for the past two years as an add-on package
known as TESTPHOT.  It is now part of the distributed system.  The  IRAF
version  of DAOPHOT, used to do photometry in crowded fields, has been a
collaborative effort with Peter  Stetson  and  Dennis  Crabtree  of  the
DAO.   For  the  convenience  of the many TESTPHOT users, changes to the
package since the last release of TESTPHOT are summarized below.

PHOTCAL  is  the  photometric  calibration  package  for  computing  the 
transformations  of  the  instrumental magnitudes output from APPHOT and
DAOPHOT to the standard photometric system.  This  package  has  been  a
collaborative effort with Pedro Gigoux at CTIO.

PTOOLS  is  a package containing an assortment of tools for manipulating
the data files produced from APPHOT and DAOPHOT.   If  users  are  using
STSDAS  TABLES format data files then they must first install the TABLES
layered package.  This package can be  obtained  from  either  STScI  or
NOAO (see iraf/contrib in the IRAF network archive).


3.2.4 DIGIPHOT.APPHOT package modifications

o   The  apselect  task  was  replaced  with the functionally equivalent
    txdump task.  txdump allows the user to select fields of  data  from
    the  output  data files produced from APPHOT tasks and either simply
    list the extracted data or save it in another file.

o   A new task called pexamine has been added to the package.   pexamine
    is  a  general  purpose tool for interactively examining and editing
    the data files produced from tasks  in  either  APPHOT  or  DAOPHOT.
    This task is intended to complement the batch oriented task txdump.

o   All  of  the APPHOT tasks will now query to verify the "datamin" and
    "datamax" values, if these values are used by the tasks.

o   The time of the observation, i.e. UT, can now be carried  over  into
    the  output  data  files,  if a keyword in the image header contains
    this information.

o   If there is bad data within  the  photometry  aperture  a  value  of
    INDEF will be stored in the data file for that magnitude.
    
    
3.2.5 DIGIPHOT.DAOPHOT (TESTPHOT) package modifications

    This  is  a new package but for the convenience of the many users of
the TESTPHOT add-on package, the changes to TESTPHOT  between  its  last
release  and  its  installation into the DIGIPHOT package as DAOPHOT are
summarized below.

o   The append, convert, dump, renumber, select,  and  sort  tasks  were
    renamed to pappend, pconvert, pdump, prenumber, pselect, and psort.

o   The  "text"  parameter was moved from daopars to the DAOPHOT package
    parameters.

o   All the DAOPHOT routines were modified so that  "psfrad",  "fitrad",
    and "matchrad" are defined in terms of scale.

o   The  tasks  allstar,  group,  nstar, peak, psf, and substar were all
    modified  to  include  "datamin"  and  "datamax"  in  their   verify 
    routines.

o   Support  was  added  for  a time of observation parameter to all the
    appropriate DAOPHOT tasks.  If present, this time  will  be  carried
    over into the output data files.

o   All  the DAOPHOT tasks except psf have been modified to accept lists
    of input and output files.

o   The new pexamine task was added  to  this  package.  pexamine  is  a
    general  purpose  tool  for  interactively examining and editing the
    data files produced from tasks in either APPHOT  or  DAOPHOT.   This
    task is intended to complement the batch oriented task txdump.

o   Several  changes were made to psf: the default PSF image header will
    now hold  up  to  66  stars  (but  it  is  still  dependent  on  the
    environment  variable  min_lenuserarea);  a  check was added so that
    the same star can not be added  to  the  PSF  twice;  potential  PSF
    stars  are  now rejected if their sky or magnitude values are INDEF;
    a check was added so that stars  with  INDEF  valued  positions  are
    treated as stars that were not found.

o   group  was modified so that the groups are output in y order instead
    of in order of the size of the group.

o   Both group and peak were modified so that stars with  INDEF  centers
    are not written to the output file.
    
    
3.2.6 IMRED package modifications

    The  spectroscopic  packages within the IMRED package have undergone
quite a bit of work and reorganization.  The spectroscopic packages  are
now  ARGUS,  CTIOSLIT,  ECHELLE,  HYDRA, IIDS, IRS, KPNOCOUDE, KPNOSLIT,
and SPECRED.  These packages are a collection of  tasks  from  APEXTRACT
and  ONEDSPEC  that  are appropriate for the specific applications.  All
these packages use the  new  versions  of  the  APEXTRACT  and  ONEDSPEC
packages;  the  changes for APEXTRACT and ONEDSPEC are summarized below.
Earlier versions of all these packages were  released  as  the  NEWIMRED
add-on   package.    The   NEWIMRED  package  is  now  defunct  and  the 
distributed system contains the latest versions of these packages.

The spectroscopic packages now contain "DO" tasks that are scripts  that
streamline the reduction process for the user.  The "DO" tasks have been
modified for each particular application.

The ARGUS package is for the reduction of data taken with the CTIO argus
instrument.  Its corresponding script task is doargus.

The  CTIOSLIT  package  is similar to the ARGUS package except that is a
collection  of  spectroscopic  tasks  used   for   general   CTIO   slit 
reductions.  The doslit task allows for streamlined reductions.

The  ECHELLE package  has the addition of the doecslit task for simplied
echelle reductions.  The dofoe task has been added for the reduction  of
Fiber Optic Echelle (FOE) spectra.

The  HYDRA package is used for the reduction of multifiber data taken at
KPNO.  The dohydra task has been customized for streamlining nessie  and
hydra reductions.

The  KPNOCOUDE  package  has  been  customized  for the KPNO Coude.  The
doslit task allows the user to go through the reduction process with  as
few  keystrokes as possible.  The do3fiber task is specialized for the 3
fiber (two arc and one object) instrument.

The KPNOSLIT package can be used for general slit  reductions  at  KPNO.
The  doslit  task  in  this  package  is  similar  to  that in the other
packages.

The  SPECRED  package  is  the  old  MSRED  package,  used  for  general 
multispectral  reductions.   This  is a generic package that can be used
for slit and multifiber/ aperture data.   General  doslit  and  dofibers
tasks are available.

Several of the spectroscopic packages has a special task called msresp1d
for creating 1d aperture response corrections from flat  and  throughput
data.  This task is specialized for multiaperture or multifiber data.

All  of  the "DO" tasks have reference manuals that are available in the
network archive in the iraf/docs directory.


3.2.7 IMRED.CCDRED package modifications

o   A new task ccdinstrument was added to the package.  The  purpose  of
    this  task  is  to  help users create new CCD instrument translation
    files to use with the package.

o   The  combine  task  (as  well  as  darkcombine,   flatcombine,   and 
    zerocombine)  is  the same task as the new imcombine task in IMAGES.
    A few parameters were added for compatibility with the CCDRED tasks.

o   A new parameter was added to  ccdproc  called  "minreplace".   Pixel
    values  in flat fields below the value for "minreplace" are replaced
    by the same value (after  overscan,  zero,  and  dark  corrections).
    This avoids dividing by zero problems.

o   The  default  computation  and  output  "pixeltype"  in  the package
    parameter for CCDRED are both real.   Note  that  both  can  now  be
    specified separately.

o   The  default  parameters  for  darkcombine and flatcombine have been
    changed.
    
    
3.2.8 NOBSOLETE package added

    This new package has been defined but currently no tasks  reside  in
it.   This package will be used as a repository for tasks that have been
replaced by newer tasks in the NOAO packages.  The NOBSOLETE tasks  will
then be removed at the time of the next release.


3.2.9 NPROTO package modifications

    The  old  PROTO  package was divided into two separate packages, one
called PROTO that now resides in the IRAF  core  system  and  the  other
called  NPROTO  that  resides  in  the NOAO package.  The current NPROTO
tasks  are   binpairs,   findgain,   findthresh,   iralign,   irmatch1d, 
irmatch2d,  irmosaic,  linpol,  and slitpic.  The imedit, imexamine, and
tvmark tasks were moved to the IMAGES.TV package. The  ndprep  task  was
moved  to  ONEDSPEC.  All other tasks were moved to the PROTO package at
the core level.

o   Two new tasks called findgain and  findthresh  were  added  to  this
    package.   findgain determines the gain and read noise of a CCD from
    a pair of dome flats and from a pair of bias/zero frames  using  the
    Janesick  method.   findthresh  estimates the background noise level
    of the CCD using a sky frame and the gain and readnoise of the CCD.

o   A new task called linpol has been added to the PROTO package.   This
    task  calculates  the  pixel-by-pixel fractional linear polarization
    and polarization angle for three  or  four  images.   The  polarizer
    must be set at even multiples of a 45 degree position angle.

o   The  task  ndprep used for CTIO 2DFRUTTI reductions was moved to the
    ONEDSPEC package.

o   The task toonedspec was  removed  since  its  function  can  now  be
    performed by the onedspec.scopy task.
    
    
3.2.10 ONEDSPEC package reductions

    There  have  been  significant  changes  to the ONEDSPEC package.  A
more detailed  revisions  summary  is  available  in  the  IRAF  network
archive as file onedv210.ps.Z in the subdirectory iraf/docs.

The new package supports a variety of spectral image formats.  The older
formats  can  still  be  read.   In  particular  the   one   dimensional 
"onedspec"  and  the  two  dimensional  "multispec" format will still be
acceptable as  input.   Note  that  the  image  naming  syntax  for  the
"onedspec"  format  using  record  number extensions is a separate issue
and  is  still  provided  but  only  in  the  IMRED.IIDS  and  IMRED.IRS 
packages.   Any  new spectra created are either a one dimensional format
using relatively simple keywords and a two or three  dimensional  format
which  treats  each  line of the image as a separate spectrum and uses a
more complex world coordinate system and  keywords.   For  the  sake  of
discussion  the  two formats are still called "onedspec" and "multispec"
though they are not equivalent to the earlier formats.

In addition, the one dimensional spectral tasks may also operate on  two
dimensional images.  This is done by using the "dispaxis" keyword in the
image header or a package dispaxis parameter if the keyword  is  missing
to  define  the  dispersion  axis.   In  addition  there  is  a  summing 
parameter in  the  package  to  allow  summing  a  number  of  lines  or
columns.   If  the  spectra are wavelength calibrated long slit spectra,
the product of the longslit.transform task, the  wavelength  information
will  also be properly handled.  Thus, one may use splot or specplot for
plotting such data without having to extract  them  to  another  format.
If  one  wants  to extract one dimensional spectra by summing columns or
lines, as opposed to using the more complex APEXTRACT package, then  one
can simply use scopy (this effectively replaces proto.toonedspec)

Another  major  change  to the package is that spectra no longer need to
be interpolated to a uniform sampling  in  wavelength.   The  dispersion
functions  determined  by  identify/reidentify  can now be carried along
with the spectra in the image  headers  and  recognized  throughout  the
package  and  the  IRAF  core  system.   Thus  the  WCS  has  been fully
implemented in the ONEDSPEC tasks and although much is to be  gained  by
this  it  can cause problems with earlier IRAF systems as well as making
it difficult to import data into  non-IRAF  software.   But  it  is  now
possible  to  use  imcopy  with  an  image  section  on  a spectrum, for
instance, and have the wavelength information retained correctly.

A sinc interpolator is now available for  those  tasks  doing  geometric
corrections  or  interpolations.  This option can be selected by setting
the "interp" parameter in the ONEDSPEC package parameters.

Other changes are summarized:

o   The new  task  deredden  corrects  input  spectra  for  interstellar
    extinction, or reddening.

o   The  new  task dopcor corrects input spectra by removing a specified
    doppler velocity.  The opposite sign can be used to  add  a  doppler
    shift to a spectrum.

o   The new task fitprofs fits 1D gaussian profiles to spectral lines or
    features in an image line or column.  This is done  noninteractively
    and driven by an input list of feature positions.

o   The  task  ndprep  was moved to this package from the PROTO package.
    ndprep is used for CTIO 2DFRUTTI reductions.

o   The new task sapertures adds or modifies beam numbers  and  aperture
    titles  for  selected  apertures based on an aperture identification
    file.

o   The new task sarith does  spectral  arithmetic  and  includes  unary
    operators.   The  arithmetic  can  be  performed  on  separate input
    spectra or on apertures within a multispec format image.

o   The task scombine has been added to the package.  This new  task  is
    similar  to  the  new  imcombine  task  in the IMAGES package but is
    specialized for spectral data.

o   The new task scopy copies  subsets  of  apertures  and  does  format
    conversions between the different spectrum formats.

o   The new task sfit fits spectra and outputs the fits in various ways.
    This includes a new feature to replace deviant points  by  the  fit.
    Apertures in  multispec and echelle format are fit independently.

o   The  tasks  addsets,  batchred,  bswitch, coincor, flatdiv, flatfit,
    subsets and sums were moved to the IIDS and IRS packages.

o   The task combine was removed with the all new scombine suggested  in
    its place.

o   The  tasks  rebin,  sflip  and shedit were removed from the package.
    Rebinning of spectra can now be done with scopy or  dispcor.   scopy
    and  imcopy  can  now  be  used  in place of sflip.  And hedit is an
    alternative for shedit.

o   bplot and slist have been modified to support the multispec format.

o   The task continuum now  does  independent  fits  for  multispec  and
    echelle format spectra.

o   There  is  now  only  one  dispcor  task doing the work of the three
    previous tasks dispcor, msdispcor and  ecdispcor.   Several  of  the
    parameters  for  this  task  have been changed.  The old "recformat"
    and "records" parameters for  supporting  the  old  onedspec  format
    have  been  removed  except in the IIDS/IRS packages.  A "linearize"
    parameter has been added for setting the interpolation to yes or  no
    on  output.   The  "interpolation"  parameter was removed since this
    information is now read from the package  parameter  "interp".   The
    "ignoreaps" parameter has been changed to "samedisp".

o   identify  and  reidentify now treat multispec format spectra and two
    dimensional  images  as  a  unit  allowing  easy  movement   between 
    different image lines or columns.  The database is only updated upon
    exiting the image.  The "j", "k", and "o" keys have  been  added  to
    the   interactive  sessions  to  allow  for  scrolling  through  the 
    different lines in a two dimensional  image.   The  database  format
    now  uses  aperture numbers rather than image sections for multispec
    format spectra.

o   The task specplot has new  parameters  "apertures"  and  "bands"  to
    select spectra for plotting in the multispec format.

o   splot  now  allows deblending of any number of components and allows
    simultaneous fitting of a linear background.   Several  cursor  keys
    have  been  redefined  and  colon  commands have been added to fully
    support the new multispec format and to add  even  more  flexibility
    to the task than before! Please see the help pages for details.

o   The  reidentify  task  is  essentially  a  new  task.  The important
    changes are  an  interactive  review  option,  the  ability  to  add
    features  from  a  line  list, using the same reference spectrum for
    all other spectra in a 2D  reference  image  rather  than  "tracing"
    (using  the  results  of  the  last  reidentification as the initial
    guess for the  next  one)  across  the  image,  and  matching  image
    lines/columns/apertures  from  a  2D  reference  image  to  other 2D
    images rather than "tracing" again.
    
    
3.2.11 RV package added

    This is a new package installed with IRAF version 2.10.   A  version
of  this package, RV0, has been available as an add-on for the past year
or so.  The package contains one main task fxcor that performs a Fourier
cross-correlation  on  the  input list of spectra.  The package supports
the multispec format.


3.2.12 TWODSPEC package modifications

    The old MULTISPEC package that has resided in the  TWODSPEC  package
for  years  has  been  disabled.   The code is still there for browsing,
however, and the package can be resurrected easily if needed.

The observatory  task  was  moved  to  the  NOAO  package  itself.   The
setairmass  task  was  moved  to  LONGSLIT.   And the setdisp task is no
longer needed; task or package parameters are used in its place.

Changes to the APEXTRACT and LONGSLIT packages are summarized below.


3.2.13 TWODSPEC.APEXTRACT package modifications

    A new version, version 3, of the IRAF  APEXTRACT  package  has  been
completed.   A  detailed  revisions  summary  is  available  in the IRAF
network archive (file apexv210.ps.Z in iraf/docs).

There were three goals for the new package: new  and  improved  cleaning
and  variance weighting (optimal extraction) algorithms, the addition of
recommended or desirable  new  tasks  and  algorithms  (particularly  to
support   large   numbers  of  spectra  from  fiber  and  aperture  mask 
instruments), and special support for the new image reduction scripts in
the various IMRED packages.

The  multispec  format,  the  default image format for all spectroscopic
packages except IIDS and IRS, is either 2D or 3D (the 3D format  is  new
with  this  release).   The  3D  format  is  produced when the parameter
"extras" is set to yes in the extraction tasks.  The  basic  2D  format,
which  applies to the first plane of the 3D format, has each 1D aperture
spectra extracted in a line.  Thus, the first coordinate  is  the  pixel
coordinate  along  the  spectra.   The  second  coordinate refers to the
separate apertures.  The third  coordinate  contains  extra  information
associated with the spectrum in the first plane.  The extra planes are:

        1: Primary spectra which are variance and/or cosmic ray cleaned
        2: Spectra which are not weighted or cleaned
        3: Sky spectra when using background subtraction
        4: Estimated sigma of the extracted spectra

If  background  subtraction  is  not  done then 4 moves down to plane 3.
Thus:

        output.ms[*,*,1] = all primary spectra
        output.ms[*,5,1] = 5th aperture spectrum which is cleaned
        output.ms[*,5,2] = raw/uncleaned 5th aperture spectrum
        output.ms[*,5,3] = sky for 5th spectrum
        output.ms[*,5,4] = sigma of 5th spectrum


The following summarizes the major new features and changes.

o   New  techniques  for  cleaning  and  variance  weighting   extracted 
    spectra have been implemented.

o   Special  features  for automatically numbering and identifying large
    numbers of apertures have been added.

o   There is no longer a limit to the number of apertures  that  can  be
    extracted.

o   The  new  task  apall  integrates  all  the  parameters used for one
    dimensional extraction of spectra.

o   The new task  apfit  provides  various  types  of  fitting  for  two
    dimensional multiobject spectra.

o   The  new  task  apflatten creates flat fields from fiber and slitlet
    spectra.

o   The new task apmask creates mask images  from  aperture  definitions
    using  the  new  pixel  list  image  format.  No tasks have yet been
    written, however, to use this new mask image format.

o   The  new  tasks  and  algorithms,  aprecenter  and  apresize,   will 
    automatically recenter and resize aperture definitions.

o   The  task  apio  is defunct.  Its functionality has been replaced by
    the APEXTRACT package parameters.

o   The task apstrip has been removed.

o   Minor changes have been made to the old "AP"  tasks  to  accommodate
    these  new changes in the package; in some cases new parameters have
    been added to the task and in other cases new  cursor  options  have
    been implemented.  See the help pages for details.
    
    
3.2.14 TWODSPEC.LONGSLIT package modifications

o   The  "dispaxis" parameter was added to the package parameters.  This
    value is used unless DISPAXIS is in the image header.
    
    
3.2.15 Glossary of new tasks in the NOAO packages

Task            Package         Description

addstar         daophot         Add artificial stars to an image
allstar         daophot         Group and fit psf to multiple stars
apall           apextract       Extract 1D spectra
apfit           apextract       Fit 2D spectra
apflatten       apextract       Remove shapes from flat fields
apmask          apextract       Create an IRAF pixel mask from apertures
aprecenter      apextract       Recenter apertures
apresize        apextract       Resize apertures
ccdinstrument   ccdred          Review instrument translation files
centerpars      daophot         Edit the centering algorithm parameters
chkconfig       photcal         Check the configuration file
continpars      rv              Edit continuum subtraction parameters
daofind         daophot         Find stars using the DAO algorithm
daopars         daophot         Edit the daophot algorithms parameter set
datapars        daophot         Edit the data dependent parameters
deredden        onedspec        Apply interstellar extinction correction
do3fiber        kpnocoude       Process KPNO coude three fiber spectra
doargus         argus           Process ARGUS spectra
doecslit        echelle         Process Echelle slit spectra
dofibers        specred         Process fiber spectra
dofoe           echelle         Process Fiber Optic Echelle (FOE) spectra
dohydra         hydra           Process HYDRA spectra
dopcor          onedspec        Apply doppler corrections
doslit          ctioslit        Process CTIO slit spectra
doslit          kpnocoude       Process KPNO coude slit spectra
doslit          kpnoslit        Process slit spectra
doslit          specred         Process slit spectra
evalfit         photcal         Compute standard indices
filtpars        rv              Edit the filter function parameters
findgain        nproto          Estimate the gain and readnoise of a CCD
findthresh      nproto          Estimate a CCD's sky noise
fitparams       photcal         Compute transformation equations
fitprofs        onedspec        Fit gaussian profiles
fitskypars      daophot         Edit the sky fitting parameters
fxcor           rv              Radial velocities via cross correlation
gratings        astutil         Compute and print grating parameters
group           daophot         Group stars
grpselect       daophot         Select groups from a daophot database
invertfit       photcal         Compute the standard indices by inversion
istable         ptools          Is a file a table or text database file?
linpol          nproto          Polarization and Stoke's parameters
keywpars        rv              Translate image header keywords
mkcatalog       photcal         Type in a standard star catalog
mkconfig        photcal         Prepare a configuration file
mkechelle       artdata         Make artificial 1D and 2D echelle spectra
mkexamples      artdata         Make artificial data examples
mkheader        artdata         Append/replace header parameters
mkimsets        photcal         Prepare an image set file for mkNobsfile
mk(n)obsfile    photcal         Make a starfield observations file
mkphotcors      photcal         Check photometric corrections files
msresp1d        argus           Create 1D response spectra
msresp1d        hydra           Create 1D response spectra
msresp1d        kpnocoude       Create fiber response spectra
msresp1d        specred         Create 1D response spectra
nstar           daophot         Fit the psf to groups of stars
obsfile         photcal         Make a starfield observations file
pappend         daophot         Concatenate daophot databases
pappend         ptools          Concatenate apphot/daophot databases
pconvert        daophot         Convert text database to tables database
pconvert        ptools          Convert text database to tables database
pdump           daophot         Print fields from daophot databases
pdump           ptools          Print columns of daophot/apphot databases
peak            daophot         Fit the psf to single stars
pexamine        apphot          Examine or edit an apphot output file
pexamine        daophot         Examine and edit a daophot database
pexamine        ptools          Examine and edit an apphot/daophot database
phot            daophot         Compute sky values and initial magnitudes
photpars        daophot         Edit the photometry parameters
prenumber       daophot         Renumber stars in a daophot database
prenumber       ptools          Renumber a list of apphot/daophot databases
pselect         daophot         Select records from daophot database
pselect         ptools          Select records from apphot/daophot databases
psf             daophot         Fit the point spread function
psort           daophot         Sort a daophot database
psort           ptools          Sort a list of apphot/daophot databases
sapertures      onedspec        Set or change aperture header information
sarith          onedspec        Spectrum arithmetic
scombine        onedspec        Combine spectra
scopy           onedspec        Select and copy apertures
seepsf          daophot         Compute an image of the PSF
setjd           astutil         Compute and set Julian dates in images
sfit            onedspec        Fit spectra
substar         daophot         Subtract the fitted stars
tbappend        ptools          Concatenate apphot/daophot tables databases
tbdump          ptools          Print columns of tables databases
tbrenumber      ptools          Renumber apphot/daophot tables databases
tbselect        ptools          Select records from apphot/daophot databases
tbsort          ptools          Sort apphot/daophot tables databases
txappend        ptools          Concatenate apphot/daophot text databases
txdump          apphot          Dump selected fields of apphot output file
txdump          ptools          Print columns of text databases
txrenumber      ptools          Renumber apphot/daophot text databases
txselect        ptools          Select records from text databases
txsort          ptools          Sort apphot/daophot text databases



4. Programming Environment Revisions



4.1 Compatibility Issues

    V2.10 IRAF requires that any local IRAF  programs  external  to  the
V2.10  system  (such  as  layered  packages or locally written tasks) be
fully recompiled if  they  are  relinked  against  V2.10.   The  problem
arises  only  if  the  programs  are  relinked;  external  programs will
continue to run after V2.10 is installed,  but  linker  errors  will  be
seen  if the programs are relinked without being fully recompiled.  This
is because the internal names of some  important  system  routines  were
changed  in  V2.10 to avoid name clashes with host system routines.  For
example, the SPP procedure "rename" is now translated to  "xfrnam"  when
the SPP code it appears in is compiled.

As  always, actual interface changes affecting existing source code were
very few.  The macro "E" in <math.h> was renamed to "BASE_E" to minimize
the  chance  of  an accidental name collision.  The calling sequence for
the onentry procedure (ETC) was changed, but since this is a little used
system  procedure  very  few  tasks should be affected.  A number of new
procedures were added to MTIO and the syntax of  a  magtape  device  has
changed;  old applications should be modified to use the MTIO procedures
to operate upon magtape device names.

These and other revisions  affecting  the  programming  environment  are
discussed in more detail below.



4.2 Portability Issues

    The  V2.10  UNIX/IRAF  kernel now includes "#ifdef SYSV" support for
System V UNIX, making it easier to port  IRAF  to  SysV  based  systems.
The  UNIX/IRAF  HSI  (host system interface) is still not as portable to
UNIX variants as it could be, but at this point it is easier for  us  to
make  the minor revisions required for a new port than to further refine
the HSI.  The disadvantage is that it is harder than it  should  be  for
people  in the community to do their own IRAF ports, due to the level of
IRAF expertise required to tune the code.  Someday we plan  to  generate
a  generic-UNIX  HSI.   Note that these comments pertain only to the few
thousand lines of code in the HSI - the bulk of the IRAF  code  is  100%
portable (identical on all IRAF systems) as it has always been.

The  recent  port  of  IRAF  to  A/UX  (the  Apple  Macintosh  UNIX)  is 
interesting  from  a  portability  standpoint  because   we   used   the 
publically  available  Fortran  to  C  translator  f2c  plus  the  GNU C
compiler gcc to compile all the SPP and Fortran code in IRAF.  This  was
remarkably  successful  and  means that the IRAF code is now portable to
any system with a C  compiler.   In  the  process  of  performing  these
compilations  a  few  dozen  minor bugs were found by the static compile
time checking performed by f2c  and  gcc.   The  IRAF  C  code  was  run
through  gcc  with  ANSI  mode  enabled,  and hence should now be ANSI-C
compatible.  The GNU debugger gdb proved to be  an  effective  tool  for
debugging of IRAF code compiled with gcc.



4.3 Software Tools


4.3.1 LOGIPC feature

    A  new  facility  has  been  added  to  UNIX/IRAF  (all systems) for
debugging interprocess communication (IPC).  This feature will  also  be
useful  for  debugging  tasks  standalone, particularly in cases where a
bug seen when running a task from the CL is difficult to reproduce  when
the  task is run standalone.  The new facility allows one to carry out a
normal  IRAF  session  while  transparently  logging  all   interprocess 
communications.   Each  process can then be rerun individually using the
logged IPC to exactly duplicate  the  functioning  of  the  process  to,
e.g., examine the program operation in detail under a debugger.

The  facility is this: if LOGIPC is defined in the host environment when
an iraf process is started, the process will  create  two  files  pid.in
and  pid.out, where pid is the process id.  Everything read from the IPC
input file is copied to the .in file, and everything written to the  IPC
output  (i.e., sent back to the CL) is copied to the .out file.  This is
done only for connected subprocesses.  It will work  for  any  connected
subprocess,  e.g.,  normal  cached  processes and graphics subkernels in
both foreground and background CLs, but not the i/o  of  the  CL  itself
since the CL is not driven by IPC.

The  IPC streams saved are an exact binary copy of whatever was sent via
IPC, including the binary IPC packet headers, and binary graphics  data,
and  so  on.   All  the IPC communications used to start up the process,
run zero or more tasks, and close  the  process  down  will  be  logged.
Most  IPC traffic is textual in nature so it will usually be possible to
examine the IPC files with a file pager, although  the  results  may  be
less  than  satisfactory  if  binary  data  such  as a graphics metacode
stream is logged.  It is not necessary to examine the IPC files  to  use
them for process execution or debugging.

A  particularly interesting use of this feature is to allow a process to
be run under the CL in the normal fashion, then rerun under a host level
debugger  using  the  saved IPC input to duplicate the input and actions
of the process when run under the CL.  For example,

    % setenv LOGIPC
    % cl
    cl> dir
    cl> logout
    % unsetenv LOGIPC

will run the CL, saving the IPC of all  subprocesses,  e.g.  x_system.e.
We can then run the system process manually, using the saved IPC input:

    % $iraf/bin/x_system.e -c < pid.in

To run the process under adb or dbx, using the saved input:

    % adb $iraf/bin/x_system.e
    :r <pid.in -c

or

    % dbx $iraf/bin/x_system.e
    dbx> r -c < pid.in

Note  that  the  redirection has to be given first for adb, and last for
dbx.  This  also  works  for  gdb   using   the   run   command.    Some 
implementations  of  adb  are  picky  about  syntax and will not allow a
space between the "<" and the process id in the :r command.

Running a task in  this  way  is  not  identical  to  running  the  task
standalone,  e.g.  using  a dparam file for parameter input, because the
full runtime context of the process as run under the  CL  is  reproduced
by  LOGIPC but not when the task is run standalone.  The differences are
subtle but can be important when trying to reproduce  a  bug  seen  when
the  process  is run under the CL.  It is often the case that a bug seen
when a task is run from the CL will  disappear  when  the  task  is  run
standalone, but in most cases LOGIPC will duplicate the bug.


4.3.2 XC changes

    The  xc  program  (IRAF  compiler-linker)  underwent  the  following 
changes for  V2.10,  in  addition  to  the  usual  host-system  specific
changes required to support new host compiler versions.

Multiple  "-p pkgname" arguments are now supported.  These are used when
compiling a module which uses multiple package environments, e.g.,

    cl> xc -p noao -p tables foo.x

Each package  environment  may  define  package  environment  variables,
directories  to  be searched for include files and libraries, and so on.
Package environments are used by the IRAF layered packages.

Host libraries named on the command line  using  the  -l  switch  (e.g.,
"-lresolv")  are  now  searched  after the IRAF system libraries, rather
than before as in previous versions of  xc.   If  the  host  library  is
referenced  by  absolute  pathname  it is still searched before the IRAF
libraries, since the command line order determines the search order.


4.3.3 SPPLINT code checker

    A static  code  checker  utility  spplint  has  been  developed  for
checking  SPP programs.  This uses the SPP translation utilities in IRAF
to convert SPP to Fortran, f2c to generate C code,  and  lint  to  check
the  C  code.   The  code  is  checked  in various ways at all phases of
translation.  Some of the most useful checking  are  performed  by  f2c,
which  checks  the number and type of arguments in all calls to IRAF VOS
library procedures.  In other words, spplint will determine if  an  IRAF
library  procedure  is  called incorrectly, as well as perform a variety
of other checks.

The spplint utility is not included in the main  IRAF  release,  but  is
available  separately.   Contact the IRAF project for information on the
availability of this and other optional code development utilities.


4.3.4 Multiple architecture support

    Multiple architecture support is a way of  using  multiple  sets  of
compiled  program  binaries within a single copy of IRAF.  Multiple sets
of binaries are used to support different  machine  architectures  (e.g.
sparc   and   Motorola),  different  compiler  options  (floating  point 
options,   vectorization   options,   profiling   options),    different  
compilers, and so on.

The  command  for checking the architecture of the IRAF core system or a
layered package has been changed from showfloat to arch to  reflect  the
fact  that  multiple  architecture  support  is no longer used merely to
select the floating point option.

    cl> mkpkg arch
    sparc

The default architecture of the distributed system is "generic", meaning
no  specific  architecture has been set (the source tree is generic, not
configured for any particular architecture).

It is suggested that developers of layered software for IRAF adopt  this
same convention in their root mkpkg files.


4.3.5 Package environments

    All  the  HSI  software  utilities  now permit multiple "-p pkgname"
package environment references.  The host  PKGENV  environment  variable
now also permits multiple package environments to be referenced, e.g.

    % setenv PKGENV "noao tables xray"

The  package  names  should  be  whitespace delimited (PKGENV is used to
avoid having to give the "-p" flags on the mkpkg or  xc  command  line).
To  successfully  load  a package enironment, the package root directory
must be defined in hlib$extern.pkg or in the  user's  host  environment.
A   host  environment  definition  will  override  the  value  given  in 
extern.pkg.


4.3.6 Finding module sources

    IRAF V2.10 includes a "tags" file in the IRAF root directory to  aid
software  development.  This file contains an index to all procedures in
the IRAF VOS and HSI and can be used with host editors  such  as  vi  to
rapidly  find  and  display the source for IRAF system procedures.  Note
that the names of the kernel procedures are given in upper  case,  e.g.,
"ZOPNBF",  whereas  the  names  of the VOS procedures are given in lower
case.  To use the tags file with vi, start the editor at the  IRAF  root
directory  and  while in the editor, type a command such as ":ta foo" to
view the source for procedure foo.



4.4 Programming Interface Changes


4.4.1 IEEE floating support

    Modifications were made to the IEEE floating conversion routines  in
the  OSB  package  to  support NaN mapping.  This is a low level package
used by, e.g., the MII package in ETC.  The interface  as  it  currently
stands is summarized below.

         ieepak[rd] (datum)               # pack scalar value
         ieeupk[rd] (datum)               # unpack scalar value
        ieevpak[rd] (native, ieee, nelem) # pack vector
        ieevupk[rd] (ieee, native, nelem) # unpack vector
     iee[sg]nan[rd] (NaN)                 # set/get NaN value
         ieemap[rd] (mapin, mapout)       # enable/disable NaN mapping
        ieestat[rd] (nin, nout)           # get count of NaN values
       ieezstat[rd] ()                    # zero NaN counters


The  new or modified routines are ieesnan, ieegnan, ieemap, ieestat, and
ieezstat.  By NaN (not-a-number)  we  refer  collectively  to  all  IEEE
non-arithmetic  values,  not  just  IEEE  NaN.  The routines ieesnan and
ieegnan set or get the native floating value used  to  replace  NaNs  or
overflows  occurring  when converting IEEE to the native floating format
(any floating value will do, e.g., zero or INDEF).  If  NaN  mapping  is
enabled,  the  ieestat  routines  may be used to determine the number of
input or output  NaN  conversions  occurring  since  the  last  call  to
ieezstat.  Both real and double versions of all routines are provided.

The  NaN  mapping enable switch and statistics counters are undefined at
process startup; programs which use the IEEE conversion  package  should
call   ieemap  to  enable  or  disable  NaN  mapping,  and  ieezstat  to 
initialize the statistics counters.


4.4.2 MATH libraries

    The following changes were made to the MATH libraries  in  the  IRAF
core  system.   Refer  to the online help pages of the affected routines
for detailed information.

o   The  one-dimensional  image  interpolation  library   iminterp   was 
    modified to add support for sinc interpolation.

o   A  new  library nlfit was added for non-linear function fitting.  An
    interactive graphics front end to this was also added in XTOOLS.

o   The name of the symbol E  in  <math.h>  was  changed  to  BASE_E  to
    minimize the chance of name clashes.
    
    
4.4.3 CLIO interface

    The  CLIO  (command  language i/o) interface underwent the following
changes for version 2.10 IRAF.

o   A README file was added to the source directory containing an up  to
    date interface summary.

o   The  routines  clgpset and clppset (get/put string valued parameter)
    were  renamed  clgpseta  and  clppseta.   The  old  procedures  were 
    retained  for  compatibility  but  are  now obsolete and may at some
    point in the future disappear or be reused for some other function.

o   Two new routines cllpset and clepset  were  added  for  listing  and
    editing psets (parameter sets).
    
    The calling sequences for the new pset routines are as follows.
    
        cllpset (pp, fd, format)    # list pset
        clepset (pp)                # edit pset
    
    These  new  routines are still considered experimental and should be
    avoided or used with caution (they could change).
    
    Internal to the  CLIO  code,  the  CLIO  parameter  caching  package
    underwent  minor  changes  to  add  a  new  clc_compress routine and
    improve pset handling, as part of the minilanguage support effort.
    
    
4.4.4 ETC interface

    The ETC interface contains miscellaneous system interface  routines.
The ETC interface underwent the following changes for V2.10 IRAF.


4.4.4.1 Calling sequence for onentry changed

    The  calling  sequence for the onentry routine was changed.  The new
calling sequence is as follows.

        action = onentry (prtype, bkgfile, cmd)

The onentry procedure is an optional procedure which is called  when  an
IRAF  process  starts  up.   Normally  the onentry procedure is a no-op,
passing control to the  IRAF  main  in-task  interpreter.   Custom  IRAF
applications,  e.g.,  the  CL,  have  a  special onentry procedure which
replaces the default in-task interpreter.

The change made to the onentry calling sequence was the addition of  the
additional  argument  cmd.  This argument receives the command line used
to invoke the IRAF process at  the  host  level.   The  application  can
parse  this command line to extract arguments, allowing the IRAF process
to operate as a host program (it is already possible to  call  any  IRAF
task  from  the  host  level, but use of an onentry procedure allows the
in-task interpreter to be bypassed and  gives  the  application  control
over parsing the command line).

See  etc$onentry.x  for  additional  information  on  how  to  use  this 
procedure.


4.4.4.2 New onerror and onexit procedures

    Two new procedures  onerror_remove  and  onexit_remove  were  added.
These have the following calling sequences.

        onerror_remove (proc)      # remove posted onerror procedure
         onexit_remove (proc)      # remove posted onexit procedure

The  new routines are used to remove onerror or onexit procedures posted
by a task during task execution.  Such user  procedures  are  called  if
the  task aborts (onerror procedures) or during normal task exit (onexit
procedures).  Formerly there was  no  way  to  "unpost"  the  procedures
other than by the normal cleanup occurring during task termination.


4.4.4.3 New gqsort routine

    A  new quick-sort routine gqsort (generalized quick sort) was added.
This has the following calling sequence.

        gqsort (x, nelem, compare, client_data)

gqsort is identical to the old qsort routine except for the addition  of
the  fourth  argument  client_data.   This  is an integer value which is
passed on to the compare procedure during sorting to  compare  two  data
values.  The compare routine is called as follows.

        result = compare (client_data, x1, x2)

The  new  routine  eliminates  the  need  to  use  a common area to pass
information to the compare routine, as was often necessary with qsort.


4.4.5 FIO interface

    The FIO interface (file i/o) underwent minor  changes  to  fix  some
bugs  affecting  pushed  back  data.  The F_UNREAD file status parameter
will now correctly report pushed back  data  as  well  as  any  buffered
input  file  data.   The  F_CANCEL  file  set option will now cancel any
pushed back data.


4.4.5.1 Nonblocking terminal i/o

    A new nonblocking form of raw mode terminal input  has  been  added.
This   permits   polling   the   terminal  for  input  without  blocking 
(suspending  process  execution)  if  no  input  is  available.   In   a 
character  read,  EOF is returned if no input is available otherwise the
character value  is  returned.   An  example  illustrating  the  use  of
nonblocking terminal i/o follows.

    include <fset.h>
    
    task foo
    
    procedure foo()

    int     fd, ch
    int     getci()

    begin
            fd = STDIN
            call fseti (fd, F_IOMODE, IO_RAW+IO_NDELAY)

            repeat {
                if (getci(fd,ch) == EOF)
                    call printf ("no pending input\r\n")
                else {
                    call printf ("ch = %03o\r\n")
                        call pargi (ch)
                }
                call sleep (1)
            } until (ch == '\004' || ch == 'q')

            call fseti (fd, F_IOMODE, IO_NORMAL)
    end


This  sample  program sets the terminal i/o mode to nonblocking raw mode
and polls the terminal once per second, printing the character value  in
octal  if  a  character is typed on the terminal, exiting when ctrl/d or
'q' is typed.  Note that in  raw  mode  characters  such  as  ctrl/d  or
ctrl/c  are  passed  through  as  data  and  do  not  get mapped to EOF,
generate an interrupt, and so on.  Raw mode i/o such as this  will  work
both   when  running  a  task  under  the  CL  and  standalone,  and  in 
combination with IRAF networking (e.g. to access a remote device).

Nonblocking  terminal  input  is  used   in   applications   which   run 
continuously but which we wish to be able to control interactively.


4.4.6 FMTIO interface

    The  FMTIO  interface  (formatted i/o) is used to format output text
or decode input text.  The V2.10 release  adds  two  new  printf  output
formats,   %H   and   %M.    These   are   used   to  print  numbers  in 
hours-minutes-seconds or minutes-seconds format and  are  equivalent  to
the  older  output  formats  %h  and  %m except that the number is first
divided by 15.  This converts degrees to hours allowing values given  in
units of degrees to be printed as hours with just a change of the output
format.  In other words, given a number N in units of degrees, %H  would
print  the number in hours-minutes-seconds, i.e., "hh:mm:ss.ss", whereas
%h   would   print   the   same   number   as   degrees-minutes-seconds,  
"dd:mm:ss.ss".   The  %m formats are similar except that only two of the
three fields are printed.


4.4.7 GTY interface

    The GTY interface is a generalized version of that  portion  of  the
older  TTY  interface  dealing  with termcap format files.  The TTY code
which accesses termcap format files has been extracted to form  the  new
GTY  interface,  allowing  arbitrary termcap format files to be accessed
by filename, unlike TTY which returns TTY descriptors given the  termcap
or  graphcap  device  name.   GTY  was  contributed  by Skip Schaller of
Steward Observatory.

            gty = gtyopen (termcap_file, device, ufields)
                 gtyclose (gty)
             cp = gtycaps (gty)
       pval = gtyget[bir] (gty, cap)
         nchars = gtygets (gty, cap, outstr, maxch)


The gtyopen call returns the GTY descriptor for the  named  device  from
the  file termcap_file.  The ufields string may be either NULL or a list
of  colon-delimited  device  capabilities,  which  will   override   the 
corresponding  capabilities  in  the  device  entry given in the termcap
file.  If termcap_file is the null string ufields is  taken  to  be  the
device  entry  for the named device.  The gtycaps routine may be used to
get the entire device entry as a string, whereas the gtyget and  gtygets
routines  are  used  to  get  the  values  of individual capabilities or
parameters.


4.4.8 MTIO interface

    MTIO is the magtape i/o interface.  The magtape  i/o  subsystem  was
extensively  revised  for  V2.10  IRAF,  as  documented  earlier in this
revisions summary.  The VOS level MTIO interface itself was not  changed
other  than  to  add a few new routines.  The tapecap facility is new in
V2.10.  The revisions to the host level magtape driver  ZFIOMT  required
that the calling sequences of some of the interface routines be changed.


4.4.8.1 MTIO applications programming interface

    The  current  MTIO  applications programming interface is summarized
below.  Most of these routines are new: the  old  routines  are  mtfile,
mtopen, mtrewind and mtposition.

          yes|no = mtfile (fname)
    yes|no = mtneedfileno (mtname)
              gty = mtcap (mtname)
                  mtfname (mtname, file, outstr, maxch)

                  mtparse (mtname, device, fileno, recno, attrl, maxch)
                 mtencode (mtname, maxch, device, fileno, recno, attrl)

              fd = mtopen (mtname, acmode, bufsize)
                 mtrewind (mtname, initcache)
               mtposition (mtname, file, record)


The  mtfile  routine  is  used  to  test whether the given filename is a
magtape file or something else, i.e., a disk file.   mtneedfileno  tests
whether  a  file number has been specified in mtname (e.g., to determine
whether or not to query for a file  number  parameter).   mtfname  takes
mtname  and  a  file  number and constructs a new magtape device name in
the output string.  mtparse  parses  a  magtape  device  name  into  its
component  parts,  and mtencode does the reverse.  mtcap returns the GTY
descriptor of the tapecap entry for  the  device.   gtyclose  should  be
used to free this descriptor when it is no longer needed.

Some  older  magtape applications programs parse the magtape device name
directly, looking for characters  like  `['.   These  old  programs  are
making  assumptions  about  the  form of a magtape device name which are
probably no longer true.  Such old applications should be  rewritten  to
use the new MTIO procedures for all magtape device name operations.


4.4.8.2 MTIO system procedures

    The  MTIO  interface  also  includes a number of procedures intended
for use in systems code.  These are summarized in the table below.

        mtallocate (mtname)
      mtdeallocate (mtname, rewind_tape)
          mtstatus (out, mtname)
           mtclean (level, stale, out)


The only new routine here is mtclean.  This is  called  by  the  mtclean
task  in the V2.10 SYSTEM package and is used to scan the magtape status
file storage area to delete old magtape position  status  files.   Prior
to  V2.10  these files were stored in the user's UPARM directory, but in
V2.10 the files are stored in /tmp so that multiple IRAF  sessions  will
share  the  same tape position information.  A special task is needed to
delete old position files in order to protect against,  e.g.,  one  user
deleting  another  user's  device  position  file  while  the  device is
actively in use.


4.4.8.3 Magtape driver procedures

    All access to the physical magtape device  is  via  the  host  level
IRAF  magtape  device  driver  ZFIOMT.   The driver procedures had to be
revised for V2.10 to  add  support  for  the  tapecap  facility  and  to
accommodate  changes  in the way the device position is maintained.  The
new driver procedures are summarized below.

        zzopmt (device, acmode, devcap, devpos, newfile, chan)
        zzrdmt (chan, buf, maxbytes, offset)
        zzwrmt (chan, buf, nbytes, offset)
        zzwtmt (chan, devpos, status)
        zzstmt (chan, param, value)
        zzclmt (chan, devpos, status)
        zzrwmt (device, devcap, status)


The corresponding KI (kernel interface) routines were also  modified  to
reflect  the  new  calling  sequences.   A  result  of this is that IRAF
networking  for  magtape  devices  is  incompatible  between  V2.10  and 
earlier versions of IRAF.

The host level device driver procedures are not normally called directly
in applications code (applications use mtopen).  Refer to  the  comments
in the source file os$zfiomt.c for additional details.


4.4.9 MWCS interface

    The  MWCS interface provides world coordinate system support for the
IRAF system and applications.  The main changes in  the  MWCS  interface
for   V2.10   were   bug   fixes  and  semantic  changes,  e.g.  various 
restrictions  having  to  do  with  WCS  attributes  were  removed,  new 
function  drivers  were  added, and so on.  These changes are documented
elsewhere in this revisions summary.

The only interface change affecting MWCS was the  addition  of  the  new
MWCS procedure mw_show.

        mw_show (mw, fd, what)


This  is used to dump a MWCS descriptor to the given output file, and is
useful for examining MWCS descriptors while debugging applications.



5. Getting Copies of this Revisions Summary

    Additional copies  of  this  revisions  summary  are  available  via
anonymous ftp from node iraf.noao.edu in the directory iraf/v210, or via
email from iraf@noao.edu.
IRAF (Mar90)             V2.9 Revisions Summary             IRAF (Mar90)


                   IRAF Version 2.9 Revisions Summary
                             April 10, 1990




1. Introduction

    This document summarizes the changes in IRAF version 2.9.  This  was
primarily   a  development  release  intended  to  support  applications 
software development, hence the major changes were  in  the  programming
environment,  although  there  are important new features of interest to
general users too.  Since IRAF V2.9 is primarily a development  release,
it  is not being released on all platforms, and it is expected that many
sites will not need to upgrade until IRAF  V2.10  is  available.   Sites
interested  in  obtaining  IRAF  V2.9 should contact the IRAF project to
determine if the release is available for a particular host system.   At
the  present  time,  the  release  is  being  made available for all Sun
systems, for VAX/VMS, and for the DECstation running Ultrix.

What follows is  a  brief  description  of  some  of  the  new  features
available  in  IRAF  Version  2.9.   This  is  not  intended  to  be  an 
exhaustive list, but rather a brief summary of the major  changes  since
the  last  release  of  IRAF,  Version 2.8, released in July 1989.  More
detailed revisions  notes  are  available  in  the  system  notes  file,
iraf$local/notes.v29,  as  well as in the online revisions notes for the
various packages.

Users looking for information on a particular new  package  should  note
that  if  the  package  is  not  mentioned  in  these  release notes and
therefore is not included in IRAF V2.9, that does not  necessarily  mean
that  it  is  not available.  Most major reduction and analysis packages
are now made available for testing as user installable layered  packages
before  they are included in the standard distribution.  For information
on the available add-on packages, contact the IRAF group, or  check  the
latest IRAF Newsletter.


This revisions summary is organized as follows:

        1.  Introduction

        2.  IRAF System Revisions

        3.  IRAF Package Revisions
            3.1. Changes to the System Packages
            3.2. Glossary of New Tasks in the IRAF System Packages
            3.3. Changes to the NOAO Packages
            3.4. Modifications and Additions to Calibration Data
            3.5. Glossary of New Tasks in the NOAO Packages

        4.  Programming Environment Revisions
            4.1. Changes to the Programming Utilities
            4.2. Programming Interface Changes



2. IRAF System Revisions


2.1 IEEE to native floating point conversions

    Support  has  been  added  to  the  programming  interfaces (section
4.2.3) for  converting  between  the  IEEE  floating  point  and  native
floating   point   data   formats,  including  both  single  and  double 
precision.  The FITS programs in DATAIO  (section  3.1.1)  make  use  of
this,  allowing  floating  point  data  to  be  exchanged in FITS format
without having to convert to type integer.


2.2 World coordinate system support

    A major new VOS interface MWCS has been  added  to  support  general
world  coordinate  systems  (WCS)  and  transformations thereon (section
4.2.1).  This includes support for linear, piecewise linear  or  sampled
WCS,  and  general  nonlinear  WCS such as the tangent plane or gnomonic
projection.

If a FITS image is read into the system which has WCS information in the
header,  the  WCS  will  be retained in the IRAF image header and can be
used in coordinate transformations.  The IMAGES tasks which move  pixels
around  have been modified to edit the WCS to reflect the transformation
(section 3.1.2).  The image i/o system will automatically propagate  the
WCS  of  an  image  to a new copy of the image, and will edit the WCS as
necessary if an image section is copied (this applies to all IRAF  tasks
which  operate  upon  images).   The task RIMCURSOR in the LISTS package
has  been  rewritten  to  add  support  for  coordinate  transformations 
(section  3.1.3),  and  can be used, e.g., to read out the RA and DEC of
objects on the image display using the image cursor, if  the  image  has
the necessary WCS information in the image header.

Full  integration  of  the  new world coordinate facilities into all the
IRAF applications, e.g., the graphics tasks and the  spectral  reduction
packages,  will  take  a  year  or  longer due to the amount of software
involved.  In  V2.9  the  IRAF  spectral  packages  have  not  yet  been
converted  to use MWCS, and if MWCS is enabled it could alter the normal
behavior of these packages.  IRAF V2.9 is therefore  shipped  with  MWCS
disabled.   What  "disabled"  means is that WCS information in the image
headers is not edited to reflect operations  involving  image  sections,
or  geometric  transformations of images.  Tasks such as RIMCURSOR which
use an already existing WCS  will  still  work  whether  or  not  header
editing  is  disabled.  If the spectral tasks will not be used and it is
desired  that  world  coordinates  be  propagated  correctly  in   image 
transformations,  MWCS  header  editing  can be enabled in either of the
following ways.

The MWCS transformations are disabled by defining the variable  "nomwcs"
in  the  IRAF  environment.   To  globally  enable  MWCS  by default for
everyone  using  the  system,  edit  the  file  "hlib$zzsetenv.def"  and 
comment  out the following line as shown (you want to add the leading #,
which will be missing in the distributed version):

    #set nomwcs = yes

To enable MWCS header editing temporarily, for the current IRAF run:

    cl> reset nomwcs = no

Detailed information on the coordinate systems defined by  MWCS  can  be
obtained in the online system with the command

    cl> phelp mwcs$MWCS.hlp fi+

Additional information is also given in the help page for RIMCURSOR.


2.3 IMFORT changes

    The  IMFORT interface (host level Fortran or C interface to the IRAF
image format) has undergone the following bug fixes and enhancements:

o   A couple  of  bugs  associated  with  the  IMDIR  (image  pixel-file
    directory) feature introduced in IRAF V2.8 have been fixed.

o   Image  clobber checking has been added.  By default, if you create a
    new image and another image with the same name already  exists,  the
    image  create  will  now  return  an error code leaving the existing
    image unchanged.  To override clobber checking in  IMFORT  programs,
    restoring  the  previous behavior of the interface, define "clobber"
    in your host environment.

o   IMFORT will now  perform  a  limited  filename  translation  service
    using  the  IRAF  VOS  filename translation code.  This should allow
    most IRAF filenames to  be  used  as  input  to  host  level  IMFORT
    programs.   Full VOS filename mapping is not provided, but filenames
    containing upper case characters and multiple "."  delimited  fields
    should be translated as in IRAF programs.

o   On  systems  with  multiple architecture support (e.g., Sun, Convex)
    the FC task, used to compile and link IMFORT  programs  from  within
    the  IRAF  environment, is now a script rather than a simple foreign
    task front end to XC.  The purpose of the script is to see that  all
    the  necessary  IRAF  and  host  level  command  line  switches  and 
    environment definitions (IRAFARCH,  FLOAT_OPTION,  etc.)  are  used.
    Previously,   users   had  to  make  these  environment  definitions 
    manually, and if they forgot the IMFORT program could fail  to  link
    or execute.

o   On  most  UNIX/IRAF  systems, the host library -lU77 is now searched
    automatically by FC when an IMFORT program is linked.  This  library
    is  not  used  by any of the IRAF code, but is required to link some
    Fortran programs that might want to use IMFORT.

Users are encouraged to use FC to link their  IMFORT  programs.   It  is
possible  to  manually  link against the IRAF libraries if you know what
you are doing, but the location of the libraries and the  required  host
level   command  line  switches  vary  for  different  systems  and  for 
different architectures of a single system,  and  it  is  easy  to  make
mistakes.


2.4 MKIRAF now copies login.cl to login.cl.OLD

    On  UNIX/IRAF systems, the MKIRAF command will now copy any existing
login.cl file to login.cl.OLD,  so  that,  for  example,  you  can  more
easily  merge  any  custom  changes  back  in  after running MKIRAF.  On
VMS/IRAF systems a new file version is created, as before.


2.5 Local additions to termcap/graphcap

    The  termcap  and  graphcap  device  capability  files   have   been 
reorganized  with  a  section  at  the  top  for local additions.  It is
recommended that any locally added entries be  made  in  this  area,  to
simplify  future system updates.  The local additions can then be simply
transferred to the new version of the file when a new  version  of  IRAF
is  installed  (any  entries  which  are  modified  versions of standard
entries should always be checked to see if anything has changed  in  the
distributed version).


2.6 BIN directories now smaller

    On  systems  with  multiple  architecture  support, the architecture
save file OBJS.arc stored in the BIN directory for each architecture  is
now  maintained  as  a  compressed file.  In a typical case this reduces
the size of the file by about a factor of two, saving  1-2  Mb  of  disk
space in each BIN directory.


2.7 Various system buffers increased in size

    The  layered software support in IRAF V2.8 (extern.pkg and all that)
had a problem with very long helpdb environment  strings,  limiting  the
number  of  external  packages  which  could  be  defined.   To fix this
problem, various buffers were increased in size  all  over  the  system.
The  maximum length of an environment variable such as helpdb is now 960
characters (12 80 character lines of text).  String parameters to  tasks
can  also  be  larger, and the system is more resistant to problems when
size limits are exceeded.  Foreign task commands, OS escapes, etc.,  can
all  be  larger  now.   The  current limit on such strings is about 1024
characters, and is defined at sysgen time by the  new  system  parameter
SZ_COMMAND in hlib$iraf.h.


2.8 Shared library versions

    The  Sun/IRAF  shared  library mechanism was modified to add support
for shared library versions.  The result is that when you  install  IRAF
V2.9,  which  has  a  different  shared  library  than  V2.8,  any local
programs or other layered software linked under V2.8  will  continue  to
run,  because  both  the old V2.8 shared library and the new V2.9 shared
library  are  included  in  V2.9  (with  different   version   numbers). 
Although  old programs will continue to run with V2.9, it is recommended
that they be relinked eventually to take advantage of the many  features
and  bug  fixes  provided  by V2.9.  In the case of very large packages,
e.g., STSDAS 1.0, it may be wise to wait until the  latest  release  can
be  obtained and installed before relinking, as the old version will not
have been tested under IRAF V2.9 (which of  course,  didn't  exist  back
then).


2.9 File pager enhancements

    The  system  file  pager, used in the PAGE task, the new PHELP task,
and other places, has undergone the following enhancements.

o   The N and P keys, used to move to the next  or  previous  file  when
    paging  a  list  of  files,  now  have a dual meaning: when paging a
    single file containing multiple formfeed delimited pages,  the  keys
    will  move  to  the next or previous page in the file.  This feature
    is used in the new PHELP task  to  page  a  large  file  containing,
    e.g., all the HELP pages for a package.

o   A  limited upscrolling capability is now supported, e.g., if you hit
    the 'k' key while in the pager, the screen will be scrolled  up  one
    line  in  the  file  being paged.  This feature may not be supported
    for some terminals, in which case the entire screen  is  redrawn  at
    the new file location.
    
    
2.10 STF image kernel enhancements

    Extensive  work  has  been  done  on  the  STF  image kernel in this
release (the STF kernel allows IRAF to access the Space Telescope  image
format directly).  The changes included the following.

o   Header  file  caching.   STF  images  often  have  quite  large FITS
    headers which can be time consuming to read.  A header file  caching
    scheme  is  now  used to optimize the kernel in cases where the same
    imagefile is repeatedly accessed, e.g.,  when  successively  reading
    each  element  of  a  large  group format image.  By default up to 3
    header files will be cached; this default should be  fine  for  most
    applications.   If  necessary  the  number  of  cache  slots  can be
    changed by defining the integer  variable  "stfcache"  in  the  IRAF
    environment (the builtin maximum is 5 cached headers per process).

o   The  semantics  of the kernel regarding header updates have changed.
    STF images differ from other IRAF images in that  they  may  consist
    of  a  group  of  images  all in the same file, with each individual
    image having its own  header  (the  group  header),  plus  a  single
    global  FITS  header  shared by all images in the group.  This is no
    problem in a read operation, but in  a  write  or  update  operation
    there  can  be  problems  since  parameters  cannot  be  added to or
    deleted from  the  individual  group  headers.   The  new  semantics
    regarding  STF image header updates are as follows: 1) when updating
    the header of a multigroup image (not recommended)  only  the  group
    header  is  updated, and attempts to add new parameters are ignored;
    2) when updating the header of an image containing a  single  group,
    both the group header and the FITS header are updated.
    
    As  a  result  of  these changes, the behavior of a single group STF
    image is now identical to that of  a  regular  IRAF  image.   It  is
    recommended  that  multigroup  STF images be treated as read only if
    possible, creating  only  single  group  images  during  interactive
    processing  (except  when  running  a  program  that  is  explicitly 
    designed to create multigroup images).

o   The kernel was modified to work with the new MWCS (world  coordinate
    system)   interface.    The  image  section  transformation  is  now 
    performed by MWCS rather than by the STF kernel.

o   A number of minor changes were made to the way the  group  parameter
    block  (GPB) cards are maintained in the IRAF image descriptor.  The
    comments on GPB definition cards are  now  preserved.   Restrictions
    on the grouping of GPB cards in the header have been removed.

o   A  number  of  bugs  were  fixed and restrictions removed, e.g., the
    size of a header is no  longer  limited  to  32767  characters  (404
    lines).
    
    The  IRAF core system and NOAO science applications were extensively
    tested with both single and multigroup  STF  images  using  the  new
    kernel,  and we now feel that it is safe to use the STF image format
    with these tasks, although the regular format is preferred if  there
    is  no  special  reason to use the STF format (the regular format is
    more efficient).
    
    
2.11 QPOE (event list image format) enhancements

    The QPOE image kernel, used for event  list  data  (photon  counting
detectors,   e.g.,   X-ray  satellites  such  as  ROSAT)  underwent  the 
following changes.

o   MWCS (world coordinate  system)  support  has  been  added  (section
    4.2.2).   This  provides  a  consistent  coordinate  system despite,
    e.g., the blocking factor, rect, or image section used to  construct
    an image matrix from an event list.

o   When  opening  a  QPOE  file  as  an  IRAF image, the runtime filter
    expression used to create the image  matrix  is  now  saved  in  the
    parameter  QPFILTn  in the image header (multiple cards are used for
    long expressions).

o   Region masks of arbitrary complexity and size can  now  be  used  to
    mask   the   event  list  when  reading  time-ordered  or  unordered 
    (unindexed) event lists.  This is done using the new  PLRIO  package
    (section  4.2.5) which provides the capability to efficiently random
    access large image masks of arbitrary complexity.

o   Unmatched brackets, braces, or parentheses are now  reported  as  an
    error  by  the  filter expression parser (this can occur even with a
    valid  expression,  e.g.,  due  to  truncation  of  the   expression 
    string).   A  reference  to  an  undefined  keyword,  e.g., due to a
    spelling error, is now detected  and  reported  as  an  error.   Any
    errors  occurring  during  expression  parsing  will  now  result in
    termination of the calling task, unless caught in an error handler.

o   A number of bugs were fixed.
    
    
2.12 Changes affecting image display in VMS/IRAF

    A new  version  of  Nigel  Sharp's  UISDISPLAY  program,  for  image
display   on   VMS   systems   running   UIS,   has  been  installed  in 
"iraf$vms/uis".  An executable for an  early  version  of  the  SAOIMAGE
display  program  for  the  X  window  system,  written by Mike VanHilst
(SAO), and ported to VMS by Jay Travisano (STScI)  has  been  placed  in
the  directory "iraf$vms/x11".  An executable for a VMS version of XTERM
(the X window terminal emulator, ported to VMS by  Stephan  Jansen),  is
also  in  this  directory.   We  wanted  our VMS users to have access to
these programs, although more development work  and  testing  is  needed
before  we  can  offer good support for X window based image display and
graphics on  VMS.   A  more  comprehensive  package  providing  enhanced
capabilities should be available as an add-on later this year.



3. IRAF Package Revisions

    The  most  notable  changes  to  the  tasks in the IRAF packages are
summarized below.  Further information may be obtained  by  reading  the
help  page  for  each  task,  or  by  paging  the  revisions  file for a
particular package.  For example, to page the revisions for  the  DATAIO
package:

    cl> phelp dataio.revisions op=sys



3.1 Changes to the System Packages


3.1.1 Modifications to tasks in the DATAIO package

o   The  RFITS and WFITS tasks have been modified to add support for the
    IEEE floating point format.  The "bitpix" parameter in WFITS can  be
    set  to -32 or -64 to specify real or double precision IEEE floating
    numbers on output.   RFITS  recognizes  these  same  values  in  the
    bitpix  keyword  in  the  FITS header on input and converts the data
    accordingly.  Note that this option must be selected by the user  as
    the  defaults for writing a FITS tape have not changed.  The user is
    cautioned that support for  the  IEEE  floating  formats  is  a  new
    feature of FITS and may not be supported by all FITS readers.

o   RFITS  was  modified so that the "iraf_file" parameter can be a list
    of output images or a image root name.
    
    
3.1.2 Modifications to tasks in the IMAGES package

o   MWCS (world coordinate system) support was added to those  tasks  in
    the  IMAGES  package  which  change  the geometry of an image, i.e.,
    IMSHIFT, SHIFTLINES, MAGNIFY, IMTRANSPOSE, IMCOPY,  BLKREP,  BLKAVG,
    ROTATE,  IMLINTRAN, REGISTER, and GEOTRAN (REGISTER and GEOTRAN only
    support simple linear transformations).  If one of  these  tasks  is
    used  to  linearly  transform  an image, the world coordinate system
    (WCS)  in  the  image  header  will  be  updated  to   reflect   the 
    transformation.   Note  that  MWCS  is  disabled  by default in IRAF
    V2.9, and must be explicitly enabled to allow these  tasks  to  edit
    the image header to update the WCS (see section 2.2).

o   The  IMSTATISTICS  task  was  modified.  The "verbose" parameter was
    renamed "format" with the default being set to "yes"  (fixed  format
    with  column  labels).   Otherwise  the  fields  are printed in free
    format with 2 blanks separating the fields.  The name of the  median
    field has been changed to "midpt".

o   The  IMHISTOGRAM  task  has  a new parameter called "hist_type" that
    gives  the  user  the  option  of  plotting  the   integral,   first 
    derivative,  or  second  derivative  of the histogram instead of the
    normal histogram.
    
    
3.1.3 Modifications to tasks in the LISTS package

o   The RIMCURSOR task in the LISTS package was completely rewritten  to
    add  MWCS  support,  so  that  coordinates may be output in any user
    specified coordinate system defined by the WCS  information  in  the
    image  header of the reference image.  For example, if an image with
    a TAN projection WCS is loaded into  the  image  display,  RIMCURSOR
    may  be  used  to  print  the right ascension and declination at the
    location defined by the image cursor.  Refer to the  help  page  for
    details.
    
    
3.1.4 Modifications to tasks in the PLOT package

o   A  new graphics kernel task IMDKERN (written by Zolt Levay at STScI)
    has been added to the PLOT package.  The new graphics kernel  allows
    the  graphics output of any task to be plotted as a graphics overlay
    on the image display.  As with the other graphics kernels, this  may
    be  done  by  calling  the  IMDKERN task directly, but is more often
    done by specifying the image display (e.g.,  device  "imd")  as  the
    output  device when running a graphics task.  Refer to the help page
    for details.

o   The CONTOUR task was modified so that it could be used with  IMDKERN
    to  overlay  contour  plots on the image display.  If the parameters
    fill=yes and perimeter=no are set the  contour  plot  is  scaled  to
    fill  the  entire  device viewport and all axis and plot labeling is
    disabled.  If the  image  being  displayed  also  fills  the  entire
    device  viewport (display frame) then the contour plot will be drawn
    to the same scale as the displayed image.  Refer to  the  help  page
    for details.

o   Several  tasks  in  the PLOT package were modified to allow use with
    image  specifications  containing  brackets,  e.g.,   group   format 
    images,  QPOE  filter  expressions,  and  image sections.  The tasks
    modified were PROW, PROWS, PCOL, PCOLS, SURFACE, and CONTOUR.

o   An option was added to the PVECTOR task to output  the  vector  (cut
    through  the  image at an arbitrary angle and center) as a text file
    or image, rather than plotting the vector.
    
    
3.1.5 Modifications to tasks in the SYSTEM package

o   A new task PHELP (paged help)  was  added  to  the  SYSTEM  package.
    PHELP  is  a script task front end to HELP which collects the output
    of HELP in a scratch file  and  pages  it  with  the  system  pager,
    allowing  one  to  randomly skip around to read the help text.  Note
    that paging of all the help pages in a package is supported, e.g.,
    
        cl> phelp images.*
    
    would page all the help files for the IMAGES package.

o   The NEWS task was completely rewritten, and is now used to page  the
    revisions  summary  for the current and previous releases.  In other
    words, one can now type NEWS to find out what is new in the  current
    release.

o   The  GRIPES  task  was  modified  to  send  mail to iraf@noao.edu or
    5355::iraf.  The IRAF site administrator  may  want  to  check  this
    script for compatibility with the local mail system.
    
    
3.2 Glossary of New Tasks in the IRAF System Packages

Task       Package                   Description

imdkern    plot      Image display device (IMD) graphics kernel
news       system    Summarize what is new in the current release
phelp      system    Paged HELP: collects and pages the output of HELP
rimcursor  lists     Read image cursor position in world coordinates



3.3 Changes to the NOAO Packages


3.3.1 New NOAO Packages

    A  new  package  ARTDATA, used to generate artificial data, has been
added to the NOAO packages.  ARTDATA includes tasks for  the  generation
of  star  fields,  optionally  containing  galaxies,  and  one  and  two 
dimensional spectra as well as simple test pattern  images.   The  tasks
GALLIST  and  STARLIST  provide  many  options  for  producing  lists of
galaxies or stars that can then be used by the task MKOBJECTS to produce
output images.  The tasks MK1DSPEC and MK2DSPEC provide tools for making
artificial spectral data.  The task  MKNOISE  allows  the  user  to  add
readout  noise, poisson noise and/or cosmic ray events to new or already
existing images.   The task MKPATTERN allows the  user  to  make  images
from a choice of patterns.


3.3.2 Modifications to Existing NOAO Packages


3.3.2.1 The ASTUTIL package

o   The  task  SETAIRMASS in the ASTUTIL package was modified so that it
    now precesses the coordinates to the epoch of the observation.
    
    
3.3.2.2 The DIGIPHOT.APPHOT package

o   A new task APTEST was added  to  the  DIGIPHOT.APPHOT  package  that
    tests the execution of the package.  Output files are generated that
    the user can review.

o   Two new parameters were added to DATAPARS, "datamin" and  "datamax".
    Pixels  outside  this  range  are  rejected  from  the  sky  fitting 
    algorithms and from the non-linear least square fits in  FITPSF  and
    RADPROF.

o   An  "update" parameter was added to all of the APPHOT tasks.  If the
    "verify"  parameter  is  set  to  "yes"  and  the  task  is  run  in 
    noninteractive  mode  update=yes will update the critical parameters
    in their respective parameter sets.

o   Four new parameters, "airmass", "xairmass", "filter", and "ifilter",
    were  added to the DATAPARS task.  These parameters provide the user
    the option of having the filter  and  airmass  quantities  from  the
    image  headers to be carried over into the APPHOT database files for
    later transmission to calibration programs.

o   A new algorithm "mean" was added to the sky fitting options.

o   A setup menu mode was added to all the APPHOT tasks.  When the  user
    types  "i" in interactive mode a setup menu is presented rather than
    a fixed set of predefined commands.
    
    
3.3.2.3 The IMRED.IRRED package

o   The APSELECT task (from the APPHOT package) has been made visible.

o   The image i/o for IRMOSAIC, IRALIGN, IRMATCH1D,  and  IRMATCH2D  has
    been  optimized  so  things should run much faster.  There is now an
    option to  trim  each  section  before  insertion  into  the  output
    image.   The  actions of these tasks can now optionally be output to
    the terminal.
    
    
3.3.2.4 The IMRED.MSRED package

o   A task called MSBPLOT was added to the  IMRED.MSRED  package.   This
    task  allows  the  user to plot a range of lines in multispec images
    in batch mode.
    
    
3.3.2.5 The ONEDSPEC package

o   Several modifications were made  to  the  ONEDSPEC  package.   These
    changes  affect  all  of the IMRED packages that include these tasks
    as well.

o   The equivalent width measurement using the "e"  keystroke  in  SPLOT
    is  now  computed  using the ratio of the spectrum to the continuum.
    The  previous  approximation  is  included  in   the   logfile   for 
    comparison.

o   The  DISPERSION  task will now add CDi_j (CD matrix) keywords to the
    image header as an alternative  way  of  expressing  the  dispersion
    function.   If  the keywords W0 and WPC or CRVALn and CDELTn are not
    in the image header the tasks reading this information  for  setting
    the  wavelength  (IDENTIFY, SENSFUNC, SPLOT, and SPECPLOT) will look
    for the CDi_j keywords.  This change should have no  affect  on  the
    NOAO   applications   but   provides   compatibility   with   STSDAS  
    applications  using  the  new  MWCS  interface  provided  with  IRAF 
    version 2.9.

o   The  call  to  the  CALIBRATE  task  in the script task BATCHRED was
    modified so that the "extinct" parameter is  always  set  to  "yes".
    Since  CALIBRATE  checks to be sure the data has not been previously
    extinction corrected this simple change provides more flexibility.
    
    
3.3.2.6 The PROTO package

o   Two new tasks, IMALIGN and IMCENTROID, were added  to  the  package.
    IMCENTROID  computes a set of relative shifts required to register a
    set of images.  The  task  IMALIGN  both  computes  the  shifts  and
    aligns the images.

o   The  JOIN  task  (previously a simple script) has been replaced by a
    compiled version which removes  many  of  the  restrictions  of  the
    previous version.

o   The  IR  tasks  have  been  modified  as  mentioned  above under the
    IMRED.IRRED section (section 3.3.2.3).

o   The TVMARK task was modified to permit deletion  (the  "u"  key)  as
    well  as addition of objects to the coordinate file.  Another cursor
    keystroke, the "f" key, was  added  allowing  the  user  to  draw  a
    filled rectangle.
    
    
3.3.2.7 The TWODSPEC.LONGSLIT package

o   Tasks  in  the  TWODSPEC.LONGSLIT  package that are used for setting
    wavelength information (EXTINCTION, FLUXCALIB, and  TRANSFORM)  were
    modified for the CDi_j keywords as outlined above for ONEDSPEC.
    
    
3.4 Modifications and Additions to Calibration Data

    The  calibration  data  used  by  some of the tasks in the TWODSPEC,
ONEDSPEC, and many of the IMRED packages are kept in a directory  called
ONEDSTDS  in  noao$lib.  The current contents of this directory are best
summarized by paging through its README file, e.g.,

    cl> page noao$lib/onedstds/README


A new directory  spec50redcal  in  "noao$lib/onedstds"  has  been  added
containing  flux  information for standard stars.  The data in this list
are from Massey and Gronwall, Ap. J., July 20, 1990.


3.5 Glossary of New Tasks in the NOAO Packages

Task        Package                 Description

aptest      apphot    Run basic tests on the apphot package tasks
gallist     artdata   Make an artificial galaxies list
imalign     proto     Register and shift a list of images 
imcentroid  proto     Compute relative shifts for a list of images
mk1dspec    artdata   Make/add artificial 1D spectra
mk2dspec    artdata   Make/add artificial 2D spectra
mknoise     artdata   Make/add noise and cosmic rays to 1D/2D images
mkobjects   artdata   Make/add artificial stars and galaxies to 2D images
mkpattern   artdata   Make/add patterns to images
msbplot     msred     Batch plots of multispec spectra using SPLOT
starlist    artdata   Make an artificial star list



4. Programming Environment Revisions


4.1 Changes to the Programming Utilities


4.1.1 MKPKG changes

    The MKPKG utility can now substitute the contents  of  a  file  back
into  the  input  stream,  as  a  special  case of the macro replacement
syntax.  For example, the sequence

    abc$(@file)def

would be translated as

    abc10def

if the file "file"  contained  the  string  "10".   The  replacement  is
performed  by  inserting  the  contents  of the file back into the input
stream, replacing sequences of newlines, spaces, or  tabs  by  a  single
space, and omitting any trailing whitespace.

The  "-p  <pkg>"  argument to MKPKG, XC, and so on loads the environment
of the named package pkg, to define the package  environment  variables,
load  the mkpkg special file list, define the directories to be searched
for global include files  and  libraries,  and  so  on.   Multiple  "-p"
arguments  may  be given to load multiple package environments.  What is
new is that if pkglibs is defined in the environment  of  a  package  to
list  the  package  library directories to be searched (the usual case),
and multiple package environments are loaded,  successive  redefinitions
of  pkglibs  will  add to the list of directories to be searched, rather
than redefining  the  old  list  as  each  new  package  environment  is
loaded.   For  example, if two package environments are loaded, and each
defines its own library, both libraries will be searched.


4.1.2 Generic preprocessor

    A minor change was made to the generic  preprocessor  which  affects
how  strings such as "FOO_PIXEL" are translated.  In the usual case, the
preprocessor replaces all occurrences of "PIXEL" by  "int",  "real",  or
whatever  the  actual  datatype  is.   The  translation  is  now context
sensitive.  Rather than  translating  "FOO_PIXEL"  as  "FOO_int"  (e.g.,
"MII_PIXEL"  ->  "MII_int"),  the  type name will now be output in upper
case if the rest of the name in which it occurs is upper  case.   Hence,
a  string such as "MII_PIXEL" will now be translated as "MII_INT".  This
allows the use of generic constructs to symbolize SPP macros.


4.1.3 SPP changes

    The language constant ARB, formerly defined as 32767, is now treated
differently depending upon how it is used.  In a declaration of an array
argument, ARB is replaced in the output Fortran by  a  "*",  e.g.,  "int
data[ARB]"  becomes  "INTEGER DATA(*)".  In an executable statement, ARB
is replaced by a very large ("arbitrarily" large) integer  value,  e.g.,
to  define  a DO-loop which is to loop an arbitrary number of times.  If
ARB is mistakenly used to dimension an array which is a  local  variable
rather  than  an argument, the SPP translator will now detect and report
the error.


4.1.4 Interactive development and the process cache

    Whenever a CL task is run and the process  containing  the  task  is
already  idling in the CL process cache, the CL will now check to see if
the modify date on the process executable has changed, and  restart  the
process  if  the  executable has been modified.  For example, when doing
software development from within the CL and  a  process  is  alternately
relinked  and  tested,  the  CL  will  now automatically detect that the
process has been relinked and will run  the  new  process,  without  any
need to manually flush the process cache.


4.2 Programming Interface Changes


4.2.1 New MWCS interface (world coordinate system support)

    A  major  new  VOS  interface MWCS, providing general facilities for
linear and nonlinear world coordinate systems, has  been  added  to  the
programming  environment  and  is used in IRAF V2.9 in IMIO, IMAGES, and
other parts of the system.  MWCS  is  intended  for  use  in  scientific
applications  as  well  as  in  system  code  such  as IMIO, hence is of
potential  interest  to  anyone  developing  software  within  the  IRAF 
environment.   The  source  directory  is  "mwcs"  and  the interface is
documented in the file "mwcs$MWCS.hlp".  Users  should  be  aware  that,
although  the  new  interface  addresses the general WCS problem and has
been carefully designed, a second version of the  interface  is  planned
and the current interface is not yet a "frozen" interface.


4.2.2 QPOE interface changes

    The  QPOE  (event  list  image)  interface  has been extended to add
routines to store MWCS objects in the QPOE header.   By  default,  there
is  one  MWCS  per  QPOE  file,  stored encoded in a machine independent
binary format in a variable length array qpwcs of type opaque.  The  new
routines are as follows:

            mw = qp_loadwcs (qp)
                 qp_savewcs (qp, mw)
          mw = qpio_loadwcs (io)

The  routines  qp_savewcs  and qp_loadwcs merely save a MWCS in the QPOE
header, or load a previously saved one.  The QPIO  (event  i/o)  routine
qpio_loadwcs  is  like  qp_loadwcs,  except that it will also modify the
Lterm of the MWCS to reflect any blocking factor or "rect" specified  in
the  filtering  expression  when  the  event  list  was opened.  The new
routine is called automatically by QPF and IMIO whenever  a  QPOE  event
list  is  opened  under image i/o, making the physical coordinate system
of the image matrix the same as physical event coordinates.

The calling sequences of  the  qp_add  and  qp_astr  routines,  used  to
conditionally add or update header parameters, have been changed (so far
as we could determine very  few  programs  exist  yet  which  use  these
routines,  so  we decided to risk an interface change).  The change made
was to add a  comment  argument.   This  change  was  motivated  by  the
observation  that  people  would  not use the routines but would instead
use lower level routines, in order to be able to set the  comment  field
if the parameter has to be added to the header.


4.2.3 IEEE support routines added

    Routines  for IEEE floating to native floating conversions have been
added to the MII and OSB  interfaces.   The  new  MII  routines  are  as
follows:

        nelem = miiread[rd] (fd, spp, maxelem)
               miiwrite[rd] (fd, spp, nelem)
                 miipak[rd] (spp, mii, nelems, spp_datatype)
                 miiupk[rd] (mii, spp, nelems, spp_datatype)

The  miiread  and  miiwrite  routines  are  like their FIO counterparts,
except that they are used only with data  of  the  indicated  type,  and
perform  the  IEEE to native floating conversion (or vice versa) as part
of  the  i/o  operation.   The   miipak   and   miiupk   routines   pack 
(native->IEEE) and unpack (IEEE->native) arrays of the indicated type.

The  lowest  level  conversion  routines are the OSB routines, which are
what the MII routines use to perform the lowest level translation.

                 ieepak[rd] (datum)
                 ieeupk[rd] (datum)
                ieevpak[rd] (native, ieee, nelem)
                ieevupk[rd] (ieee, native, nelem)
             iee[sg]nan[rd] (NaN)

The ieepak and ieeupk  routines  transform  a  single  scalar  value  in
place,  while  the  ieevpak and ieevupk routines transform vectors (note
that  the  package  prefix  is  "iee",  not  "ieee").   In-place  vector 
conversions  are  permitted.   Since  IRAF  does  not  support  the IEEE
not-a-number formats, NaN, Inf etc. values  are  converted  to  a  legal
native  floating  value  on  input.   The native floating value to which
NaNs are mapped (default zero) may be globally set with ieesnan.

On some systems, e.g., the VAX, the low level conversion routines may be
written  in  assembler  or  machine dependent C.  If so, the source file
actually used by the system will be found in the "host$as" directory.


4.2.4 New routine GETLLINE added to FIO

    A new routine getlline (get long line) has been added to FIO.   This
is  similar to getline, except that it will reconstruct arbitrarily long
newline delimited  lines  of  text,  whereas  getline  returns  at  most
SZ_LINE characters.

          nchars = getlline (fd, outstr, maxch)

The new routine should not be confused with the old routine getlongline,
a higher level routine which performs  a  similar  function,  but  which
also  ignores  comment  lines  and  help  blocks,  and  maintains a line
counter.


4.2.5 Modifications to PLIO/PMIO

    A new routine p[lm]_sectnotconst has been added  to  PLIO  and  PMIO
(the  pixel  list and image mask interfaces).  As the name suggests, the
routine tests whether a given rectangular section of the mask is all  at
the same value, and if so returns the mask value as an output argument.

     bool = pl_sectnotconst (pl_src, v1, v2, ndim, mval)

A  new  subpackage  PLRIO  has  been added.  This is used to efficiently
random access any 2D plane of an existing pixel list or image mask.

             plr = plr_open (pl, plane, buflimit)
                plr_setrect (plr, x1,y1, x2,y2)
          mval = plr_getpix (plr, x, y)
                 plr_getlut (plr, bufp, xsize,ysize, xblock,yblock)
                  plr_close (plr)

The mask is opened for random  access  on  a  special  descriptor  which
incorporates   a  scaled,  active  2D  lookup  table.   Most  subsequent 
plr_getpix calls will return the given  mask  value  directly  from  the
table  with very little overhead; only if the referenced pixel occurs in
a region too complex to be described by a  single  table  entry  is  the
value  computed  by  direct evaluation of the mask.  A special 2D binary
recursive  algorithm  (using   pl_sectnotconst   above)   with   log2(N) 
performance  is  used  to  calculate  the  scaled  lookup  table.  These
algorithms provide efficient table  generation  and  random  mask  pixel
access even for very large masks.
IRAF (Mar90)                 V2.8 Revisions                 IRAF (Mar90)


                   IRAF Version 2.8 Revisions Summary
                             June 30, 1989




1. Introduction

    This revisions notice coincides with the release of version  2.8  of
IRAF.   The  V2.8  release  is  a general release for all supported IRAF
hosts.

The following is a  brief  description  of  some  of  the  new  features
available  in  IRAF  Version  2.8.   This  is  not  intended  to  be  an 
exhaustive list, but rather a brief summary of the major  changes  since
the  last  major release of IRAF Version 2.5 in July 1987 and subsequent
intermediate releases primarily to support Sun/IRAF:  IRAF  Version  2.6
(February  1988),  IRAF  Version 2.6+ (March 1988), and IRAF Version 2.7
(December 1988).

More detailed revisions notes are available in the system notes files in
the  iraf$doc  and  iraf$local  directories,  as  well  as in the online
revisions notes for the various packages.



2. IRAF System Revisions

    This document highlights the most  notable  revisions  made  to  the
IRAF  core  system  software  for Version 2.8.  This is only a revisions
summary; no attempt is made to provide detailed technical  documentation
for  each  revision,  nor is there any attempt to exhaustively summarize
all revisions.  A complete record of all core system revisions  will  be
found  in  the System Notes for V2.8.  Additional information on some of
the topics covered below will  be  found  in  the  various  Installation
Guides  and  Site  Manager's  Guides, and in the IRAF User and Technical
Documentation manual sets.



2.1 Copyright notice

    Subject to  AURA  and  NSF  approval,  the  IRAF  software  will  be
copyrighted  sometime  during  1989.  As a first step in this process, a
copyright notice has been added to all core system  source  files.   The
notice  reads as follows: "Copyright(c) 1986 Association of Universities
for Research in Astronomy Inc".  We will also be adding  a  file  called
COPYRIGHT  to  the  distribution  stating the terms of the copyright and
associated licensing agreement for the software.

The intent of this  action  is  solely  to  protect  the  software  from
unauthorized  commercial exploitation, and the copyright grants, or will
grant, the right to copy, modify, and  redistribute  the  IRAF  software
provided  the  original copyright notice remains intact, the software is
made available in source form, and the rights we  grant  are  passed  on
with  the  software.   We  wish to prevent others, especially commercial
firms, from copyrighting IRAF software in their own  name  and  possibly
taking  away  the rights we grant with the software.  Granting the right
to modify and redistribute IRAF  software  does  not  mean  we  want  to
encourage  people  to do so, we merely want them to have the legal right
to do so if they feel they need to.



2.2 Major system enhancements

    The information in  this  section  is  provided  primarily  for  the
benefit  of  IRAF  site managers and programmers.  The reader interested
primarily in science applications may wish to skip ahead.  Some  systems
level familiarity with the current IRAF system is assumed.


2.2.1 Layered software enhancements

    A  given IRAF installation consists of the core IRAF system, and any
number of layered software products or external packages.  The  goal  of
the  layered software enhancements introduced in V2.8 is to make layered
software products self contained  and  hence  independent  of  the  core
system  and  of  other  layered  software.  Examples of layered software
products are the NOAO packages, LOCAL, STSDAS, PROS, and so on.

The layered  software  enhancements  make  it  possible  to  install  or
deinstall  a layered product by modifying only a single file in the core
IRAF system.  The core system may be updated without  affecting  layered
software,  and  vice  versa.  Since layered products are independent and
are simple to install, IRAF can easily be  configured  with  only  those
packages  needed at a particular site.  Software developers benefit from
the layered software enhancements because the  facilities  provided  for
development  and maintenance of layered software are equivalent to those
provided  for  development  of  the  core  IRAF  system  and  the   NOAO 
packages.   User  sites  benefit because it is easy to extend the system
with LOCAL packages of their own making.

Each layered product (usually this refers to a tree of  packages)  is  a
system  in itself, similar in structure to the core IRAF system.  Hence,
there is a LIB (global system library), one or more  BINs  (binary  file
directories),  a Help database, a set of global environment definitions,
and all the sources and runtime files, all  contained  within  the  same
directory  tree.   Layered software products, in their source only form,
are portable without change to any computer which runs IRAF.


2.2.1.1 The hlib$extern.pkg file

    This is the file which is modified to install or  deinstall  layered
software  products.   To  install  a  layered  product,  one  creates  a 
directory to hold the software, restores the files to  disk,  and  edits
the  extern.pkg  file  to  tell IRAF the name of the root package of the
layered product, and where  the  root  directory  is  located.   If  the
layered  software  is  distributed  in  source only form it will also be
necessary to recompile the software, but this is a completely  automated
process.


2.2.1.2 NOAO and LOCAL packages reorganized

    As  part of the project to better support layered software, the NOAO
and LOCAL packages have been reorganized  as  layered  products.   These
packages  are  now  structurally  equivalent  to  third party (non-NOAO)
packages, except that the directory trees  are  rooted  in  IRAF.   Both
packages  are  now  self  contained,  with  their  own  LIB,  BINs, Help
database, etc., and with an entry  in  extern.pkg,  like  other  layered
products.   The  NOAO  package  serves  as  a  working example of how to
configure a layered  package.   The  reorganization  of  these  packages
should be transparent to anyone merely using the system.


2.2.1.3 The template LOCAL

    The  LOCAL  package  included  with  the distributed system has been
stripped of all NOAO site-local tasks  and  restructured  as  a  layered
product,  the  template  local.   The  template  local contains only two
sample tasks and is not intended as an end-user package, but  rather  as
a  template  to  be  copied and modified by sites to construct their own
site dependent LOCAL package.  The desire to be able to  easily  develop
and  maintain  locally  added  packages was one of the major motivations
for the layered software enhancements project, and we  hope  that  sites
will  realize the significance of this new capability and take advantage
of it.


2.2.1.4 CL now supports package level BIN directories

    Rather than assuming a  global  BIN  directory  for  all  tasks  and
packages,  the  CL  now  permits  multiple  BIN  directories,  each  BIN 
directory being associated  with  the  package  of  definition  and  all
subpackages  of  that  package  (unless they have their own BIN).  A new
BIN directory is declared with the optional argument bindir=path in  the
package statement, e.g., in a package script task.


2.2.1.5 MKPKG support for package environments

    Layered  packages  now  have  their  own  private  LIB, including an
environment definitions file (zzsetenv.def), mkpkg global  include  file
(mkpkg.inc),  and,  optionally,  a mkpkg special file list file for each
supported host system, listing files requiring  special  compilation  to
work  around host compiler bugs or whatever.  The full mkpkg environment
is formed  by  reading  the  IRAF  core  system  environment  and  mkpkg
definitions  and  include files, followed by the package definitions and
include files.  Reading of the package environment occurs only if  mkpkg
is  called  with  the "-p" flag, or if the variable PKGENV is defined in
the user's environment.

Another way of expressing this is, when using  mkpkg  within  a  layered
package,  one  must now specify the name of the layered package in order
to pick up the package environment definitions.  For example, to  update
the  MTLOCAL  package  in NOAO, one would type "mkpkg -p noao update" in
the mtlocal directory.  If this  is  not  done  compilation  errors  may
result,  or  the  exectable  may  not  be  successfully installed in the
package BIN directory.


2.2.2 Multiple architecture support

    A single IRAF system (or layered  package)  can  now  simultaneously
support   any   number  of  machine  architectures  using  multiple  BIN 
directories sharing a single machine independent  copy  of  IRAF.   Each
BIN  directory  contains  all  the object modules, object libraries, and
executables  for  a  particular  architecture.   An   architecture   can 
represent  either  a  type  of  hardware,  e.g.,  sparc, mc68020+f68881,
mc68020+ffpa, vax,  etc.,  or  a  software  distinction,  e.g.,  systems
compiled  with  different  sets of compiler flags, or different versions
of a system.  Multiple architectures are now  supported  both  for  IRAF
execution,  and  for  IRAF  based  software  development, e.g., a single
version of IRAF can now be used to develop and run  IMFORT  programs  on
both Sun-3 and Sun-4 nodes.

The only case where multiple architecture support is used at the present
time is in  Sun/IRAF,  which  is  often  installed  on  a  heterogeneous
network  of  workstations,  e.g.,  Sun-3s with various hardware floating
point options, and Sun-4s.  A single copy of  IRAF  will  be  configured
with  several  BIN directories, one for each supported architecture, and
NFS mounted on all the network nodes which will be  using  IRAF.   There
is  no reason that this feature need be restricted to use with Sun/IRAF,
however.


2.2.2.1 IRAFBIN and IRAFARCH

    Starting with IRAF V2.8, the old environment  variable  IRAFBIN  has
been  obsoleted  and  replaced  by  IRAFARCH.  On machines which support
multiple architectures, the latter defines the architecture to  be  used
for  both  IRAF  execution  and  software  development.   If  only  IRAF 
execution  is  needed  the  variable  is   optional,   with   the   best 
architecture  being  selected  automatically when the CL is started.  If
one will be doing software development (including IMFORT) it is best  to
define  the  variable  in  the  host environment before starting IRAF or
doing any host level software development.  Typical values  of  IRAFARCH
for a Sun workstation are "sparc", "i386", "f68881", and "ffpa".


2.2.2.2 System libraries moved to the BIN directory

    As  part of the revisions required for multiple architecture support
for software development, all object libraries have been moved from  the
global,  architecture independent LIB to the architecture dependent BIN,
with the LIB entries being replaced by symbolic links (in  the  case  of
Sun/IRAF).    This   should   be  transparent  to  both  end  users  and 
programmers.


2.2.2.3 New bin.generic architecture

    On Sun/IRAF systems, which are distributed configured  for  multiple
architecture  support,  the system architecture is set to generic in the
distributed system.  What this means is that all architecture  dependent
files  (objects  and object libraries) have been removed from the system
directories and archived in the file OBJS.arc in the BIN  directory  for
each  architecture.   Rebuilding  any  of the packages in a system would
require restoring the binaries  for  a  particular  architecture,  e.g.,
typing  "mkpkg  sparc" at the IRAF root would restore the sparc binaries
for the core system on a Sun/IRAF installation.   Note  that  this  only
affects  software  development  for  the  system  in  question; software
development for external  packages  or  private  user  software  is  not
affected.


2.2.3 Shared library facility

    IRAF  version 2.8 adds support for a general shared library facility
for UNIX based systems.  Although currently  only  used  with  Sun/IRAF,
this  facility  is  potentially useful for other UNIX based IRAF systems
as well (VMS/IRAF already has its own shared library facility).

What the shared library facility does is take most of  the  IRAF  system
software   (currently  the  contents  of  the  ex,  sys,  vops,  and  os 
libraries) and link it together into a special sharable image, the  file
S.e  in  each  core  system BIN directory.  This file is mapped into the
virtual memory of each IRAF process at process startup time.  Since  the
shared  image  is  shared  by all IRAF processes, each process uses less
physical memory, and  the  process  pagein  time  is  reduced,  speeding
process  execution.   Likewise, since the subroutines forming the shared
image are no longer linked  into  each  individual  process  executable,
substantial  disk  space is saved for the BIN directories.  Link time is
correspondingly reduced, speeding software development.

With the introduction of the shared library  facility,  the  disk  space
required  for  Sun/IRAF  is substantially reduced.  Due to the increased
memory  sharing  and  reduced  process  pagein  times   performance   is 
substantially  improved,  especially  on systems like the Sun/386i which
has a relatively slow SCSI disk and  often  limited  memory.   The  disk
size  of  small  programs  is  reduced  by up to a factor of ten in some
cases, e.g., an executable for a small program that was formerly 250  Kb
in  size  might  be  as small as 25 Kb if the shared library is used and
the shared image symbols are omitted at link time.



2.3 User interface changes


2.3.1 Calling IRAF tasks from the host environment

    The IRAF main and zmain were modified to  make  it  easier  to  call
IRAF  tasks  as  host  level  tasks,  i.e.,  without  having to set up a
command file and run the process with  the  standard  input  redirected.
In  the  new  scheme,  any  extra arguments given on the process command
line are passed into the IRAF main as a command  buffer  containing  the
IRAF command or commands to be run.  For example,

    cl> x_system.e netstatus

would run the command netstatus in process x_system.e.

    cl> x_system.e count "files=*.x"

would  run  the  count  task,  counting  all  ".x"  files in the current
directory.

    cl> x_system.e count "files=*.x 4>_o"

would do the same, redirecting the output at the IRAF main level to  the
file _o.

    cl> x_system.e 'directory @pars $nargs=0'

would  run  the directory task with the given parameter set, with $nargs
set to 0.  If any of the parameters to a task are omitted the task  will
query the terminal for them in the usual way, so for example

    cl> alias count "$iraf/bin/x_system.e count files="

would  make  the  IRAF  task  count available in UNIX, allowing the IRAF
template specifying the files to be counted to be either  given  on  the
UNIX  command  line, or prompted for if omitted.  Given the above alias,
one could enter a UNIX command such as

    cl> count 'cl$*.h'


This feature is available in all UNIX based versions of IRAF  V2.8,  but
did not make it into VMS/IRAF version 2.8.


2.3.2 Image packing density control (impkden)

    Some  users  have  complained about images taking up more disk space
than they have to, due to the IMIO feature  which  conditionally  blocks
image  lines to fill an integral number of disk blocks.  This can result
in more efficient image i/o but can also make a  significant  difference
in the amount of disk space consumed by an image in some cases.

IMIO  can  actually  support both block-aligned and fully packed images.
The decision is made at image creation time and is based  on  the  image
packing  density  if  image  lines  are  block  aligned.  If the packing
density is too low for a block-aligned image, a fully  packed  image  is
created  to  avoid  wasting  disk  space.   The  default minimum packing
density is 0.6, i.e., up to 40% wasted space  before  IMIO  switches  to
full packing (no wasted space).

For finer control over the packing density, the user can now specify the
optional environment variable  impkden,  the  numeric  value  being  the
mininum packing density.  For example,

    cl> set impkden = 1.0

would completely disable block-alignment of image lines in IMIO.


2.3.3 User libraries (IRAFULIB)

    It  is  now possible for the programmer (SPP or IMFORT) to specify a
private  directory  to  be  searched  at  compile  or  link  time   when 
developing  IRAF  or IMFORT programs.  This is done by defining the path
to the directory in the  user  environment  as  the  variable  IRAFULIB.
When  locating a particular file, this directory will be searched before
the IRAF system libraries are searched, hence this feature may  be  used
to  substitute  custom  versions  of files in the IRAF system libraries,
e.g., for debugging purposes.


2.3.4 New logical printer device LPR

    A new logical line printer or plotter device lpr is now supported on
all  UNIX/IRAF  systems.   This  treats  the  UNIX task lpr as a kind of
pseudo-device, leaving it up to UNIX to decide what physical  device  to
dispose  of  the  output  to.   This default is system dependent, but on
some systems can be controlled by defining the variable PRINTER  in  the
user environment.


2.3.5 Machine independent help database

    The  IRAF help task uses a precompiled binary database to speed help
keyword searching.  This file is now machine  independent,  allowing  it
to  be  generated  on  one system and included in software distributions
without having to be recompiled.  In addition, as part  of  the  layered
software  support, help now allows each external package to have its own
private help database.  The first time help is run, all  such  databases
are  read  and  linked  to produce a database containing entries for all
help modules in the core system and  all  installed  external  packages.
The  help  database  file is the file helpdb.mip in the LIB directory of
the core system and each external package.


2.3.6 Set terminal type will no longer hangup

    On systems,  e.g.,  workstations,  which  provide  virtual  terminal
windows  which  can  change  in size, IRAF may query the terminal at run
time to determine  the  screen  size.   This  query  is  performed,  for
example,  at  login  time  if  the terminal type is set to gterm or sun.
Formerly this could cause the login process to hang indefinitely  (i.e.,
until  the  user  typed  return  or  interrupt)  if the terminal did not
respond to the size query, as would happen when the  terminal  type  was
set  improperly  and  the  actual terminal ignored the query.  Thanks to
the addition  of  non-blocking  raw  terminal  i/o  in  V2.8  IRAF,  the
terminal  screen  size query will now time out with a warning message to
reset the terminal type, if the terminal does not respond to  the  query
within several seconds.


2.3.7 Installing a new version of IRAF obsoletes old user parameter files

    The  problem  of  old,  obsolete  user (uparm) parameter files being
used with a newly  installed  version  of  IRAF,  which  could  lead  to
"parameter  not  found" error aborts, has been fixed.  The CL now checks
the date of the file utime in HLIB, and refuses to use  the  user  pfile
if  it is older than either utime or the package pfile provided with the
new system.  The contents of old user pfiles are  merged  into  the  new
system  pfile,  as before, preserving learned parameter values even when
the user pfile is obsolete.


2.3.8 @file list bug fixed

    The problem of the "@file" (at-file-list) syntax  not  working  when
the file in question was not in the current directory has been fixed.



2.4 Programming interface changes


2.4.1 IMFORT pixel directory control

    IMFORT  has  been modified to permit specification of the pixel file
directory by the calling  program.   The  modifications  are  completely
upwards   compatible,  i.e.,  existing  programs  linked  with  the  new 
interface will still create pixel files in the  same  directory  as  the
header file, with "HDR$" in the image header.

The  Fortran  programmer may set or query the pixel file directory using
the following routines:

    imsdir (dir)            # set pixel directory pathname
    imgdir (dir)            # get pixel directory pathname

where dir is a Fortran character variable.  The value should  be  either
"HDR$"  (the default) or a concatenatable host directory pathname (i.e.,
trailing / required for unix).  Once set, the pixel  directory  will  be
used  for  all  subsequent  image  create  or  rename  operations by the
calling process.

For example,

    call imsdir ("/tmp3/pixels/")
    call imcrea (image1, axlen, naxis, dtype, ier)
    call imcrea (image2, axlen, naxis, dtype, ier)

If desired the default pixel directory may  be  specified  in  the  host
environment  as  imdir or IMDIR before running the program.  IMFORT will
check the host  environment  for  this  environment  variable  then  use
"HDR$" as the default if no host definition is found.

Note  that although this is similar to setting the value of imdir in the
IRAF environment, IMFORT programs are not part of the  IRAF  environment
and  are  not affected by changes to the IRAF imdir.  Also, since IMFORT
is a host level facility and  IRAF  networking  is  not  supported,  the
network  prefix  (e.g., "node!") is omitted from the pixelfile pathname,
and since IMFORT programs are not necessarily used in  conjunction  with
IRAF,  the  ".."  (hidden file protection) files are not used to protect
against image deletion.


2.4.2 Image display interface: IMD

    A new  interface  IMD  has  been  added  to  provide  a  rudimentary
facility  for  interactive  image  display  device  control.  This is an
interim prototype interface which will be replaced by  the  new  display
interfaces when the latter become available.

The  IMD  interface  operates  by  mapping an image display device frame
buffer onto an IMIO image descriptor.   The  display  frame  buffer  may
then  be randomly edited by normal image i/o operations, e.g., to modify
subrasters of the displayed image,  or  overlay  the  image  with  color
graphics.    The   image   pixel  to  display  frame  buffer  coordinate 
transformation is supported, allowing  applications  to  work  in  image
pixel  coordinates  if  desired.  This interim interface is what is used
by the new display oriented tasks imexamine, imedit, and tvmark.


2.4.3 Image masks: PLIO, PMIO, MIO

    The following new VOS interfaces have been added in V2.8 to  provide
a general boolean or integer image mask facility.

    PLIO        pixel list i/o
    PMIO        pixel (image) mask i/o
    MIO         masked image i/o (image i/o through a mask)


PLIO   is   a   general   interface   for   storing   and   manipulating  
multidimensional integer valued rasters containing regions  of  constant
value  (i.e., masks).  The masks are stored in a highly compressed form,
the size of the compressed mask being  a  function  of  the  information
content  of  the  mask.   Both pixel array and range list i/o facilities
are provided, as well as a set  of  general  boolean  raster  operators,
e.g.,  to  extract  or  insert  subrasters,  AND  or  OR a source with a
destination, do the same through a  stencil,  draw  regions  of  various
kinds  (point, line, box, circle, polygon), and so on.  See the PLIO.hlp
file in the PLIO source directory for further information.

An  interactive  debug  program   (plio$zzdebug.x)   is   provided   for 
experimenting  with  masks.   Note  that PLIO is a stand alone interface
and is not tied in any way to  IMIO,  even  though  the  data  structure
operated upon is similar to an image matrix.

PMIO  is  very  similar  to  PLIO  except that it is used to associate a
masks with an IMIO maintained  reference  image.   Currently,  the  PMIO
mask  must  be the same resolution as the physical reference image.  All
coordinates input to PMIO are in the image section  coordinates  of  the
reference  image.   Hence,  given  a physical image and associated mask,
one can operate  upon  both  through  a  user  specified  image  section
transparently  to  the  applications  program.   This  includes all PLIO
style boolean rasterop operations, as well as mask pixel and range  list
i/o.   The PMIO interface is layered upon PLIO and IMIO, and the calling
sequences are identical with PLIO except for  the  package  prefix,  and
the addition of several new PMIO specific routines.

MIO  is  essentially  an  extension of image i/o for pixel i/o through a
mask.  The central routines are the following:

                    mio_setrange (mp, vs, ve, ndim)
    n|EOF = mio_[gp]lseg[silrdx] (mp, ptr, mval, v, npix)

One defines a rectangular region of the  image  with  mio_setrange,  and
then  sequentially  reads  or  writes  line  segments  until  all pixels
visible through the mask have been accessed.  This type  of  i/o  should
be  ideal  for  most image processing applications which need to operate
upon only those pixels visible through a region mask  (e.g.,  a  surface
fitting  task),  upon all pixels except those on a bad pixel mask (e.g.,
any analysis program), and so on.

PLIO (or PMIO) masks may be stored in binary files on  disk,  the  files
having   the  extension  ".pl".   The  V2.8  version  of  IMIO  has  the 
capability to treat such masks as if they were  images,  allowing  masks
to  be  easily  displayed, used in image expressions, converted to image
matrices and vice versa, etc.   Applications  may  do  either  pixel  or
range  list  i/o  to  a  mask image via IMIO, if MIO is not suitable for
some reason.


2.4.4 Photon images: QPOE, QPIO, QPEX

    A new set of VOS interfaces supporting photon  or  event  list  data
are  now  available.  The QPOE interface implements the Position Ordered
Event list object, which consists of a general header mechanism plus  an
event  list,  wherein  the  events are little data structures, e.g., the
attributes required to describe a photon  detection  (position,  energy,
time,  etc.).   QPOE  is designed to efficiently access very large event
lists, e.g., several hundred thousand or several million events in size.
Builtin  event attribute filtering and region filtering capabilities are
provided for selecting photons from the  event  list.   These  filtering
capabilities  may  be  combined  with the sampling capability to produce
filtered, block averaged image matrices from event lists.

The QPOE interfaces are the following:

    QPOE        header and file access and management facilities
    QPIO        raw and filtered event i/o
    QPEX        event attribute filter mechanism
    QPF         IMIO/IKI kernel for image interface to QPOE files

QPOE and QPF add  a  new  image  type  to  the  system,  with  .qp  file
extension.   Hence,  event  list data can be used as input to any of the
image processing tasks in standard IRAF, in addition to  being  analyzed
by  tasks which deal with the individual photon events.  A QPOE image is
contained in a single file.  When a QPOE file is accessed  as  an  image
the  interface  filters and samples the event list in real time, using a
user defined filter, block averaging factor, region  mask,  and  so  on,
producing  the image matrix seen by applications at the IMIO level.  The
QPOE object may be repeatedly examined with different event  filters  to
view the data in different ways.

The  QPOE  interface,  in addition to providing an event list capability
for IRAF, serves as a prototype for the  "flex-header"  portion  of  the
new  image  structures project.  Many of the capabilities to be provided
for image storage under the new image structures are already present  in
QPOE.

Further  information  is  given  in the QPOE.hlp file in the QPOE source
directory.


2.4.5 File manager: FMIO

    A new VOS library FMIO has been installed.  FMIO  is  "File  Manager
I/O",  and  is  used  to  implement  a  simple binary file manager which
maintains the  file  data  of  so-called  "lfiles"  (lightweight  files)
inside  a  single  host  binary file.  The system overhead for accessing
lfiles is much less than that of host files,  and  many  lfiles  can  be
used  to  store  a  complex  data  structure  without  cluttering a host
directory or incurring the inefficiency of accessing host  files.   FMIO
is  part  of  the  DFIO  project  and  will  serve  as  the lowest level
interface  within  DFIO;  it  is  also  used  currently  in   the   QPOE 
interface.   Additional  information  is given in the README file in the
source directory for the interface.


2.4.6 IMIO changes

    IMIO is the image i/o interface, the  standard  IRAF  VOS  interface
for managing all varieties of image data.


2.4.6.1 Mask image support

    IMIO  now  supports a new type of image, the mask image, stored as a
highly compressed binary (PLIO) file with the  extension  ".pl".   Image
masks  are  most  commonly used to store information describing selected
pixels in an associated data  image.   An  image  mask  is  logically  a
boolean  or  integer  image,  up to 28 bits deep, containing information
only on selected pixels or regions  of  pixels.   Masks  are  stored  in
highly  compressed  format,  e.g., a simple mask may be stored in only a
few hundred bytes of space.  Mask images  are  readable,  writable,  and
randomly  modifiable,  like  ordinary  raster images.  See \(sc2.4.3 for
more information.


2.4.6.2 Photon image support

    Support has also been added to IMIO for event  list  images,  stored
as  position  ordered  event  list  datafiles using the QPOE interfaces.
This new image type has the extension ".qp".  QPOE images are  read-only
under  IMIO.  Subject to that restriction, they may be accessed like any
other image by any IRAF image  analysis  program.   Accessing  an  event
list  image  as  a  raster image necessarily involves a runtime sampling
operation, wherein the events in the region of interest are  accumulated
into  an  initially zero image matrix; in the process the event list may
optionally be filtered by event attribute or event position, e.g.,

    cl> display "xray.qp[t=(30:40),pha=10,block=4]"

would display the QPOE image  xray.qp  with  a  blocking  factor  of  4,
selecting  only those events with t (time) in the range 30 to 40 and for
which pha (energy) has the value 10.  The  event  attributes  and  their
names  are user definable and may vary for different types of data.  See
\(sc2.4.4 for more information.


2.4.6.3 IMPUTH

    A new procedure imputh has been added  to  the  IMIO  header  access
library.   The  new  procedure  is  used  to append FITS like HISTORY or
COMMENT cards to the image header.


2.4.6.4 IMPARSE

    The calling sequence of the  internal  IMIO  procedure  imparse  has
changed.   Although this procedure is internal to the IMIO interface and
is  not  supposed  to  be  used  within  applications,  there   may   be 
applications  which  make  use of this procedure.  Any such applications
must be modified to  reflect  the  new  procedure  calling  sequence  or
runtime problems are guaranteed.


2.4.7 Null string environment variables

    The  semantics  of  the  VOS  procedures  envgets  and  envfind have
changed.  This could affect existing programs  and  any  programs  which
use  these  functions  should be checked to make certain they will still
work properly.

These procedures,  used  to  fetch  the  string  values  of  environment
variables, return the length of the output string as the function value.
Formerly, a value  of  zero  would  be  returned  both  when  the  named
variable  existed but had a null string value, and when the variable was
not found.  This made it impossible to discriminate between the case  of
a  variable  not  being defined, and one which is defined but has a null
value.  The routines have been  changed  to  return  the  value  ERR  (a
negative integer) if the variable is not defined.  Programs which do not
wish to make the distinction between undefined  and  null-valued  should
check  for  a function value less than or equal to zero.  Programs which
check for a function  value  equal  to  zero  will  fail  if  the  named
variable is not defined.


2.4.8 Environment substitution in filenames

    The  VOS  filename  mapping  code has been modified to add support a
powerful new  environment  substitution  syntax.   Previously  the  only
environment  substitution  mechanism available was the logical directory
facility, which  could  only  be  used  to  parameterize  the  directory
field.    The   new   facility   may  be  used  to  perform  environment 
substitution anywhere in a filename.  This is used in IRAF  version  2.8
to implement multiple architecture support, e.g.,

    cl> set bin = "iraf$bin(arch)/"

is  how  the  core  system  BIN  is  defined  in  V2.8 IRAF.  The syntax
"(arch)" tells the filename mapping code to substitute the string  value
of  the  environment  variable arch, if defined.  If the variable is not
defined the null string is substituted.  Hence, if the host system  does
not  implement  multiple  architecture  support and arch is not defined,
BIN is  defined  as  "iraf$bin/",  which  is  the  backwards  compatible
definition.   If  arch  is defined as, e.g., ".vax", then BIN is defined
as "iraf$bin.vax/".  The new feature allows use of a single  environment
variable  to  define  the  architecture, not only to form filenames, but
for other purposes as well, e.g., to generate compiler  switches  or  to
control library searching in mkpkg.


2.4.9 Nonblocking raw terminal i/o

    The  VOS  file  i/o interfaces have been modified to add support for
nonblocking terminal i/o.   This  facility  makes  it  possible  to,  in
effect,  "poll"  the terminal to see if there is any input waiting to be
read, to allow interaction without having a program block  if  the  user
has not typed anything.

The  immediate  application  of this in version 2.8 was the modification
of the stty (set-terminal) facility to implement  a  time  out  for  the
terminal  size  query.   Formerly,  stty would hang up indefinitely when
the terminal type was  set  to  "gterm"  but  the  actual  terminal  was
something different, causing the screen size query to be ignored.

In  the more general case, nonblocking terminal i/o makes possible a new
class of user interface,  which  is  not  only  interactive,  but  event
driven.   Nonblocking  i/o  makes  it  possible for an application to be
continually processing, while checking the terminal occasionally to  see
if the user has input any commands.

At  present, nonblocking i/o is always used in conjunction with raw mode
input from a terminal.  A new flag F_NDELAY,  defined  in  <fset.h>,  is
used to enable or disable nonblocking i/o.  For example,

    call fseti (fd, F_RAW, YES)

enables conventional blocking, single character raw mode reads, and

    call fseti (fd, F_RAW, YES + F_NDELAY)

enables  nonblocking  raw  mode  input  (YES,  NO,  and F_NDELAY are bit
flags).  These modes are mutually exclusive, e.g., the  first  call  may
be  issued  while  nonblocking  raw  mode is in effect to make the reads
block, and vice versa.  A call to fset(fd,F_RAW,NO)  disables  both  raw
mode  and  nonblocking mode.  Once nonblocking raw mode is in effect one
merely reads characters from  the  terminal  in  the  usual  way,  using
getc.   EOF is returned if a read is performed when no data is available
for input, otherwise the next  character  is  returned  from  the  input
queue.   Further  information  on nonblocking i/o is given in the system
notes file.


2.4.10 Function call tables (ZFUNC)

    IRAF has always had  the  ability  to  compute  the  integer  valued
address  of  a  procedure,  store that address in a table, and later use
the address as an argument to one of  the  zcall  kernel  primitives  to
call  the  addressed  procedure.  This facility has been extended by the
addition of a set of zfunc  primitives,  used  to  call  integer  valued
functions.   Only  integer  valued  functions are supported (in order to
simplify the kernel support  required),  but  in  the  systems  oriented
applications  where  procedure call tables are used, this is unlikely to
be a serious limitation.



2.5 Sun/IRAF specific revisions


2.5.1 IEEE exception handling

    By default the IEEE hardware is now configured, on all Sun  systems,
with  the invalid, overflow, and divide by zero IEEE exceptions enabled,
and with the default rounding direction and  precision  modes  (nearest,
extended)   in  effect.   This  configuration  should  ensure  that  all 
questionable floating point operations are detected, and  that  no  IEEE
"funny  numbers"  (NaN,  Inf,  etc.)  get  into the data.  These values,
since they don't behave like ordinary numbers,  can  cause  programs  to
misbehave,  e.g.,  go  into  an  infinite  loop.  In Sun/IRAF V2.8, if a
computation  results  in  an  IEEE  funny  number  being  generated,  an 
exception abort will result.  The most common example is divide by zero.

The  IRAF/IEEE  interface  offers a special debug feature that may be of
interest to programmers developing numerically sensitive  software.   If
desired,  one  can  change  the default rounding direction and precision
(e.g., to test the numerical stability of  applications)  by  using  the
debugger  to  set  a  nonzero  value  of  the variable debug_ieee before
running an executable.  The procedure for doing this  is  documented  in
the system notes file.


2.5.2 IMTOOL enhancements

    A  number  of  enhancements and bug fixes have been made for V2.8 to
the SunView  based  IMTOOL  image  display  server.   The  most  notable
changes  are summarized here; refer to the IMTOOL manual page for a more
complete description of the new features.


2.5.2.1 Software ZOOM added

    IMTOOL, which has had for some time the ability to pan  about  on  a
large  image,  now  has  the ability to zoom as well.  Both pan and zoom
are controlled very conveniently by the middle mouse button:  place  the
mouse  on an object and tape the middle button once to pan the object to
the center of the display window; tap it again and  the  image  will  be
zoomed.   Zoom,  currently  implemented  by  writing  directly  into the
hardware frame buffer,  is  very  fast,  almost  as  fast  as  a  normal
unzoomed  window  refresh.   The  default set of zoom factors is 1,2,4,8
after which the sequence wraps around to 1.  The zoom factors  are  user
configurable  via the IMTOOL setup panel; very large zoom factors, e.g.,
x64, are possible.   Dezoom  (making  a  large  image  smaller)  is  not
currently supported.


2.5.2.2 WCSDIR eliminated

    The  host  level WCSDIR environment variable, and the text file used
to communicate image coordinate (WCS) information  between  the  display
task  and the display server, have been eliminated.  All WCS information
is now passed via the datastream used to pass commands and data  between
the  client  and the display server.  This eliminates the need for users
to have to remember to define WCSDIR in  order  to  get  coordinates  in
image  units,  and  some  subtle  process  synchronization  problems are
eliminated as well.

In a related change, the frame buffer configuration index is  no  longer
passed  in  during  a  frame  erase,  hence it is no longer necessary to
erase a frame before displaying an image to ensure that a  frame  buffer
configuration  change  is passed to the server.  The configuration index
is now passed when the WCS information for a frame is set.


2.5.2.3 Graphics colors

    IMTOOL now allocates a range of pixel values  for  use  as  graphics
overlay  colors.   Setting  a  frame buffer pixel to one of these values
causes it to always be displayed with the assigned color.  The  graphics
color  values  are  not  affected  by  windowing  the display.  The most
common use of graphics colors with V2.8 IRAF  is  for  drawing  graphics
into  a  displayed  frame  with the new tvmark task, available in PROTO.
See the IMTOOL manpage for a table listing the color index assignments.


2.5.2.4 New imtoolrc entries

    Several new predefined frame buffer configurations have  been  added
to  the  default  imtoolrc.   These  include  an  128 pixel square frame
buffer (imt128), a 256 pixel square frame buffer (imt256),  and  a  full
screen display with the same aspect ratio as a 35 mm slide (imtfs35).


2.5.2.5 System crash (FIFO) bug fixed

    Versions  of  SunOS  through  at  least 4.0.1 have a bug in the FIFO
driver code which can cause the internal kernel FIFO data buffer  to  be
deallocated  while it is still in use.  This will result in a bad kernel
which will eventually panic and reboot the system.  This  is  the  cause
of  the  IMTOOL  crash  problem  which  some sites may have experienced.
IMTOOL has been modified to avoid the circumstances (repeated 4096  byte
transfers)  which cause the bug to surface.  So far as we know, the real
bug (in SunOS) has not  yet  been  fixed,  but  at  least  on  the  NOAO
systems,  the  frequency  of occurrence of the system crashes is greatly
reduced  with  the  new  version  of  IMTOOL  which   incorporates   the 
workaround for the SunOS bug.


2.5.2.6 Cursor marking now disabled by default

    When  the  interactive image cursor read facility was first added to
IMTOOL, the default response to each cursor read was  to  draw  a  small
white  dot  at  the  position  of  the  cursor.  This is convenient when
marking a series of objects to make a  list,  but  with  the  increasing
number  of IRAF programs making user of the interactive image cursor, it
has been necessary to change the default to  disable  automatic  marking
of  each  cursor read.  The cursor mark feature is still available as an
option and can be enabled via the setup panel.


2.5.2.7 Ctrl/b may be used for manual blinking

    In addition to the list of blink frames and the timed blink  feature
IMTOOL  has provided for some time, it is now possible to manually cycle
through the blink frames with the <ctrl/b> key.  Typing  <ctrl/b>  while
the  mouse  is in the image window will cause the display to display the
next blink frame in sequence.


2.5.2.8 F4 key will now toggle setup panel

    The F4 function key on the Sun keyboard may now be  used  to  toggle
whether  or  not  the  setup panel is displayed.  This provides a single
keystroke alternative to calling up the setup panel with the frame menu.



2.6 VMS/IRAF specific revisions


2.6.1 NEWUISDISP added to VMS/IRAF

    Nigel Sharp's NEWUISDISP display program,  used  for  image  display
under UIS on microvaxes with bitmapped displays, is now available in the
standard VMS/IRAF release, in the directory [IRAF.VMS.UIS].


2.6.2 New INSTALL.COM script

    A new INSTALL.COM script (also written  by  Nigel  Sharp)  has  been
added  to  VMS/IRAF.   This script, run by the system manager to install
selected IRAF executable images, will now automatically  check  for  and
deinstall  any old versions of the executables before installing the new
ones.


2.6.3 VMS 4.7/5.0

    Testing of the standard V2.8 VMS/IRAF release,  which  was  prepared
on  VMS  4.7, on a VMS 5.0 system has thus far not revealed any problems
(NOAO is still running VMS  4.7  as  our  standard  system).   Hence  it
appears  that  the  standard  V2.8 VMS/IRAF will run under VMS 5.  It is
likely, however, that any attempt to  recompile  VMS/IRAF  under  VMS  5
would  cause problems, since we have not yet tried to rebuild IRAF under
VMS 5, and such a major operating  system  upgrade  will  often  require
changes  to  the  IRAF  code.  The system may be relinked under VMS 5 if
desired, and this does not appear to cause  any  problems,  but  neither
does there appear to be any benefit to be gained from doing so.



2.7 Summary of IRAF System Packages Revisions


o   The  tasks  RFITS  and  WFITS  in the DATAIO package now support the
    reading and writing of arbitrary sized data blocks (IRAF version 2.7
    and later).

o   Several new tasks were added to the IMAGES package.  IMCOMBINE (IRAF
    version 2.6 and later) provides for the combining  of  images  by  a
    number  of algorithms.  The new task CHPIXTYPE (IRAF version 2.7 and
    later) changes the pixel types of a list of input images.  The  task
    IMSLICE  slices  images  into  images  of  one  less dimension (IRAF
    version 2.8).  The task IMSTACK  has  been  moved  into  the  IMAGES
    package (although it still resides in PROTO as well).
    
    The  IMSTATISTICS task has been rewritten and now allows the user to
    select which statistical  parameters  to  compute  and  print  (IRAF
    version  2.8).   The  IMRENAME  task  has been modified to allow "in
    place" image renames, used chiefly for moving the pixel files  to  a
    new IMDIR.
    
    Several  other  tasks  in  the  IMAGES  package  were modified (IRAF
    version 2.8).  IMSHIFT was modified to accept a list of shifts  from
    a  file.   REGISTER  and  GEOTRAN  were modified to accept a list of
    transforms instead of only a single one.  IMHISTOGRAM has  undergone
    extensive  revision  including support for "box" type plots, support
    for linear or log scaling in the y coordinate, as  well  as  support
    for antialiasing of the histogram bins.

o   All  the  tasks in the IMAGES.TV package were modified (IRAF version
    2.8) so that if a task is used with an unsupported display device  a
    message is printed to that effect.

o   The  STTY  task  in  the  LANGUAGE  package  has been improved (IRAF
    version 2.6 and later) to better facilitate its "playback"  feature.
    These  changes  have  been  documented  in  the  online help for the
    task.  This feature is little used by external sites but  can  be  a
    very useful instructional aid if users are aware of its capability.

o   A  new task PVECTOR was added to the PLOT package that allows one to
    plot an arbitrary vector in a two dimensional  image  (IRAF  version
    2.6 and later).
    
    The  task  STDPLOT  was  modified (IRAF version 2.8) so that it uses
    the more popular SGI kernel  rather  than  the  NSPP  (NCAR)  kernel
    (STDPLOT  is  now  equivalent  to  the  SGIKERN  task).   A new task
    NSPPKERN was added that uses the NSPP kernel.

o   Two new tasks were added to the SYSTEM package (IRAF  version  2.8).
    The  task  DEVICES  simply prints the dev$devices.hlp file as edited
    by the site manager listing available devices on the local  host  or
    network.   The  REFERENCES  task is used to search the help database
    for all tasks or other help modules pertaining  to  a  given  topic,
    e.g.,  references  vector  will  list all tasks that have the string
    "vector" in their one line description.
    
    
2.8 Glossary of New Tasks in the IRAF System Packages

Task         Package                     Description

chpixtype    images     Change the pixel type of a list of images
devices      system     Print information on the locally available devices
imcombine    images     Combine images pixel-by-pixel using various algorithms
imslice      images     Slice images into images of lower dimension
imstack      images     Stack images into a single image of higher dimension
nsppkern     plot       Plot metacode on a NSPP (NCAR) plotter device
pvector      plot       Plot an arbitrary vector in a 2D image
references   system     Find all help database references for a given topic

In addition, there are  new  image  display  oriented  tasks  imexamine,
imedit,  and  tvmark in the PROTO package in NOAO (used to interactively
examine and edit images, or draw graphics into  image  display  frames).
These  really  belong  in  the  core  system  but  have  been  placed in
noao.proto since they are prototype tasks.



3. NOAO Package Revisions

    Some of the major revisions to the NOAO packages are listed below.


3.1 Summary of NOAO Packages Revisions


3.1.1 New NOAO Packages

    Several new packages have been added to the NOAO suite of packages.

o   The APPHOT package  is  a  set  of  tasks  for  performing  aperture
    photometry  on  uncrowded  or  moderately  crowded stellar fields in
    either interactive or batch mode.  This package is now installed  in
    the  DIGIPHOT  package  (IRAF  version  2.7  and later).  The APPHOT
    package was available as an add-on package to IRAF version  2.5  and
    later  while  it  was  undergoing  alpha testing.  Many new features
    have been added to the  package  since  it  first  became  available
    including  the  new  task  QPHOT  (quick  aperture  photometry)  and 
    interaction with  the  image  display  cursor  for  supported  image
    displays (Sun workstation, IIS model 70).

o   The  CCDRED  package  provides  tools  for  the  easy  and efficient
    reduction of CCD images.  This package has  been  installed  in  the
    IMRED  package (IRAF version 2.6 and later).  The CCDRED package was
    also available as an add-on to IRAF version 2.5.
    
    A short demonstration of many of the tasks in the CCDRED package  is
    provided with the DEMO task in the CCDRED.CCDTEST package.

o   The   IMRED.ECHELLE   package   has   been   replaced  with  a  more 
    sophisticated collection of tasks for  reducing  echelle  type  data
    (IRAF  version  2.7 and later). The new ECHELLE package recognizes a
    new image format in which each extracted  echelle  order  becomes  a
    line  in  a  two dimensional image rather than having a separate one
    dimensional spectrum  for  each  order,  although  this  old  output
    format  is  still  available  as an option.  Several new tasks exist
    for computing and applying a  wavelength  calibration  to  the  data
    using  the  echelle  relationship  between  the  orders (ECIDENTIFY,
    ECREIDENTIFY, and ECDISPCOR) as well as  for  manipulating  the  new
    echelle format (ECSELECT, ECCONTINUUM, and ECBPLOT).

o   The  IRRED  package  has been added to the IMRED package.  The IRRED
    package collects  together  in  one  place  those  tasks  used  most
    frequently  by users reducing IR data such as that taken with the IR
    imager at KPNO.  The IRMOSAIC and IRALIGN tasks were available  with
    IRAF  version  2.6  and  later.   IRMOSAIC  takes an ordered list of
    input images and places them on a grid in an output image.   IRALIGN
    uses  this  grid  and  a coordinate list of overlapping objects from
    the individual subrasters to produce an aligned output  image.   The
    tasks  IRMATCH1D  and IRMATCH2D were available with IRAF version 2.7
    and later.  These tasks are  similar  to  IRALIGN  expect  that  the
    intensities  of  adjacent  subrasters  can  be  matched  as well.  A
    script called MOSPROC (IRAF version 2.8) has also  been  added  that
    prepares a list of images for a quick look mosaic.

o   The  MSRED  package  has been added to the IMRED package.  The MSRED
    package is a collection of tasks  used  for  reducing  multispectral
    types  of  data, e.g. fiber arrays, where the individual spectra are
    for different objects.  Like the ECHELLE package, it  also  has  its
    own  multispectral  image  format  (a two dimensional image in which
    each line is an extracted spectrum).  Several new  tasks  have  been
    added  to  the  package  for wavelength calibration of multispectral
    data.
    
    
3.1.2 Modifications to Existing NOAO Packages


o   The ASTUTIL package was reorganized (IRAF version 2.6  and  later  -
    see  IRAF Newsletter No. 3 for details) and several tasks were added
    and/or  modified.   A  new  task  ASTTIMES   computes   and   prints 
    astronomical  dates  and  times  given a local date and time.  A new
    task RVCORRECT computes and prints radial velocity  corrections  for
    an  observation.   The  tasks  PRECESS  and  GALACTIC  were modified
    slightly using different but more accurate algorithms.
    
    The new task SETAIRMASS (IRAF version 2.8)  computes  the  effective
    airmass  and  middle  UT  of  an  exposure.  This task was also made
    available in the TWODSPEC and IMRED packages.

o   The two tasks in the IMRED.BIAS package, COLBIAS and LINEBIAS,  were
    modified  slightly  (IRAF version 2.7 and later) so that the fitting
    parameters for the overscan region can be set by the user as  hidden
    parameters to the tasks.

o   The  task COSMICRAYS (from the CCDRED package) was made available in
    the IMRED.GENERIC package (IRAF version 2.6 and later).

o   A new task called SYNDICO has been added to the  IMRED.VTEL  package
    (IRAF  version  2.6  and  later). SYNDICO makes glossy prints on the
    NOAO Dicomed printer of the synoptic, full  disk,  magnetograms  and
    spectroheliograms taken at the vacuum telescope at Kitt Peak.

o   Modifications  were  made  to the IMRED.DTOI package.  These changes
    have been documented in IRAF Newsletter No. 4.

o   Three new tasks in the ONEDSPEC package, REFSPECTRA,  SEXTRACT,  and
    SPECPLOT,  were  made  available  in  the  IMRED.COUDE,  IMRED.IIDS, 
    IMRED.IRS, and IMRED.SPECPHOT packages.

o   Many new tasks and features have been added to the ONEDSPEC package.
    
    The SENSFUNC task was completely rewritten  (IRAF  version  2.6  and
    later)  to  allow  determination  of  extinction,  display  of  flux 
    calibrated  spectra,  and  many  new  features  for  displaying  and 
    manipulating the data.
    
    IDENTIFY,  REIDENTIFY  and  DISPCOR  were modified (IRAF version 2.6
    and later) so that a dispersion  solution  from  IDENTIFY  could  be
    shifted  without  changing  the  original  shape  of  the coordinate
    function (see IRAF Newsletter No. 3 for details).
    
    A new deblending algorithm was added to SPLOT (IRAF version 2.7  and
    later).   See  the  online  help for SPLOT as well as the article in
    IRAF Newsletter No. 4.
    
    The tasks in the ONEDSPEC.ONEDUTIL package were  absorbed  into  the
    ONEDSPEC package (IRAF version 2.7 and later).
    
    The  EXTINCT  task  disappeared  with  its functionality being taken
    over by a rewritten CALIBRATE (IRAF version 2.7 and later).
    
    The COEFS task was moved to the IMRED.IIDS  and  IMRED.IRS  packages
    since  this is a very instrument specific task (IRAF version 2.7 and
    later).
    
    Three new tasks were added to the package.  SEXTRACT  (IRAF  version
    2.6  and  later)  extracts  subspectra  from  one  dimensional input
    spectra.  REFSPECTRA (IRAF version 2.7 and later)  takes  over  part
    of  the functionality of the old DISPCOR task and allows the user to
    define which arc spectra are to be used in the  calculation  of  the
    dispersion  solution of object spectra.  SPECPLOT (IRAF version 2.8)
    is a new plotting task that allows the compression of  many  spectra
    to a page (see IRAF Newsletter No. 6).

o   Several new tasks have been added to the PROTO package.
    
    Four  tasks  were  added to IRAF version 2.6 and later.  BSCALE is a
    task that can  be  used  to  linearly  scale  images  by  the  mean,
    average,  or mode of the image.  IRMOSAIC and IRALIGN can be used to
    combine many frames into one large image.   These  three  tasks  are
    also  available  in the IMRED.IRRED package.  MKHISTOGRAM calculates
    the histogram of the data in a text file.
    
    Three new tasks were added to IRAF version 2.7 and  later.   IMSLICE
    is  a  task  that  slices  an  image into images of lower dimension.
    IRMATCH1D and IRMATCH2D are two tasks that allow combining  of  many
    overlapping  images while matching the background intensities in two
    different ways.
    
    Three new tasks have been added to IRAF version 2.8 that  allow  the
    user  to  interact  with  the  image  display (for supported display
    devices, ie Sun workstation, IIS model 70).   IMEXAMINE  allows  the
    user  to  interactively  examine  portions  of  the displayed image.
    TVMARK allows the  user  to  mark  objects  on  the  image  display.
    IMEDIT allows the user to interactively edit an image.

o   The  APEXTRACT  package  in  the TWODSPEC package has ungone several
    rounds of modifications, as discussed in the IRAF  Newsletters,  No.
    3  and 4.  These changes included improved techniques and additional
    options for the extraction of data.
    
    A new task, APSCATTER, has been added to the package  (IRAF  version
    2.8).   This  task determines and subtracts scattered light from two
    dimensional aperture or echelle spectra.  The  task  was  also  made
    available  from within the ECHELLE package.  This task was discussed
    in IRAF Newsletter No. 6.
    
    
3.2 Modifications and Additions to Calibration Data

    The calibration data used by some of  the  tasks  in  the  TWODSPEC,
ONEDSPEC,  and many of the IMRED packages are kept in a directory called
ONEDSTDS in noao$lib.  The current contents of this directory  are  best
summarized by paging through its README file, e.g.,

    cl> page noao$lib/onedstds/README


Two  additional  line  lists  (used by IDENTIFY) have been added to this
directory  (IRAF  version  2.8).   These  lists,   vacidhenear.dat   and 
vacthorium.dat,  are  simply  the standard .dat files in air wavelengths
converted to vacuum wavelengths.  The equation used for  the  conversion
as  well as the appropriate reference in the literature are contained in
the README file.

The thorium.dat file has been updated  to  contain  thorium  lines  from
3180  Angstroms  to 9540 Angstroms (IRAF version 2.6 and later).  Please
see the README file for the source.

Two new directories have been  added  containing  flux  information  for
standard stars (IRAF version 2.6 and later): SPECHAYESCAL and SPEC50CAL.
Both of these lists are from Massey et al., 1988, Ap. J., Vol.  328,  p.
315.


3.3 Glossary of New Tasks in the NOAO Packages

Task           Package                     Description

apscatter(1)   apextract  Fit and subtract scattered light
apselect       apphot     Extract select fields from apphot output files
asttimes       astutil    Compute UT, Julian day, epoch, and sidereal time
badpiximage    ccdred     Create a bad pixel mask image from a bad pixel file
bscale(3)      proto      Brightness scale images:  new = (old-bzero) / bscale
ccdgeometry    ccdred     Discussion of CCD coordinate/geometry keywords
ccdgroups      ccdred     Group CCD images into image lists
ccdhedit       ccdred     CCD image header editor
ccdlist        ccdred     List CCD processing information
ccdproc        ccdred     Process CCD images
ccdred         ccdred     CCD image reduction package
ccdtypes       ccdred     Description of the CCD image types
center(3)      apphot     Compute accurate centers for a list of objects
centerpars(3)  apphot     Edit the centering parameters
combine        ccdred     Combine CCD images
cosmicrays(4)  ccdred     Detect and replace cosmic rays
daofind        apphot     Find stars in an image using the DAO algorithm
darkcombine    ccdred     Combine and process dark count images
datapars(3)    apphot     Edit the data dependent parameters
demo           ccdtest    Run a demonstration of the CCD reduction package
ecbplot        echelle    Batch plots of echelle spectra
eccontinuum    echelle    Fit the continuum of echelle spectra
ecdispcor      echelle    Dispersion correct spectra
ecidentify     echelle    Identify features in spectrum for dispersion solution
ecreidentify   echelle    Automatically reidentify features in spectra
ecselect       echelle    Select and extract apertures from echelle spectra
fitpsf         apphot     Model the stellar psf with an analytic function
fitsky         apphot     Compute sky values in a list of regions
fitskypars     apphot     Edit the sky fitting parameters
flatcombine    ccdred     Combine and process flat field images
flatfields     ccdred     Discussion of CCD flat field calibrations
guide          ccdred     Introductory guide to using the CCDRED package
imedit         proto      Examine and edit pixels in images
imexamine      proto      Examine images using image display, graphics, and text
imslice        proto      Slice images into images of lower dimension
instruments    ccdred     Instrument specific data files
iralign(3)     proto      Align the mosaiced image produced by irmosaic
irmatch1d(3)   proto      Align and intensity match image produced by irmosaic
irmatch2d(3)   proto      Align and intensity match image produced by irmosaic
irmosaic(3)    proto      Mosaic an ordered list of images onto a grid
mkfringecor    ccdred     Make fringe correction images from sky images
mkhistogram    proto      List or plot the histogram of a data stream
mkillumcor     ccdred     Make flat field illumination correction images
mkillumflat    ccdred     Make illumination corrected flat fields
mkimage        ccdtest    Make or modify an image with simple values
mkskycor       ccdred     Make sky illumination correction images
mkskyflat      ccdred     Make sky corrected flat field images
mosproc        irred      Prepare images for quick look mosaicing
msdispcor      msred      Dispersion correct spectra
msreidentify   msred      Reidentify features from/to a multispec image
msselect       msred      Select and extract apertures from spectra
observe        ccdtest    Create an artificial CCD observation
phot           apphot     Measure magnitudes for a list of stars
photpars       apphot     Edit the photometry parameters
polymark       apphot     Create polygon lists for polyphot
polypars       apphot     Edit the polyphot parameters
polyphot       apphot     Measure magnitudes inside a list of polygonal regions
qphot          apphot     Measure quick magnitudes for a list of stars
radprof        apphot     Compute the stellar radial profile of a list of stars
refspectra(5)  onedspec   Assign wavelength reference spectra to other spectra
rvcorrect      astutil    Compute radial velocity corrections
setairmass(6)  astutil    Compute effective airmass for an exposure
setinstrument  ccdred     Set instrument parameters
sextract(2)    onedspec   Extract subspectra from dispersion corrected spectra
specplot(5)    onedspec   Stack and plot multiple spectra
subsection     ccdtest    Create an artificial subsection CCD observation
subsets        ccdred     Description of CCD subsets
syndico        vtel       Make dicomed print of daily grams 18 cm across
tvmark         proto      Mark objects on the image display
wphot          apphot     Measure magnitudes for a list of stars with weighting
zerocombine    ccdred     Combine and process zero level images


Notes:

(1) Tasks also in echelle and  msred packages.

(2) Tasks also in coude, iids, irs, and specphot packages.

(3) Tasks also in irred package.

(4) Tasks also in generic package.

(5) Tasks  also  in  coude,  echelle,  iids,  irs,  msred,  and specphot
    packages.

(6) Tasks also in imred and twodspec packages.
NEWS (Jul86)                  Ancient News                  NEWS (Jul86)

30 July 86      IMIO Modifications
-------------------------------------------------------------------------------

    The new IMIO interface, used by all IRAF tasks to access bulk image data
on disk, is now capabable of operating upon both the old IRAF format (OIF)
images as well as STScI SDAS/GEIS format images.  The default image type is
the OIF format.  Any existing OIF format images are readable by the new system
without change.  Although IRAF can read either OIF or STF format images,
SDAS can read only STF format images, so serious SDAS users should configure
IRAF to work with STF format images as the default.  All other users should
continue to use the OIF format images as image access is more efficient,
and the IRAF software has been extensively tested only for OIF format images.
Users of the OIF format should note that they can read a VMS BACKUP tape
(or UNIX TAR tape) containing STF format images directly to disk and immediately
access the images, without changing the default configuration of IRAF.

    The image type is specified by a filename extension; extensions for the
OIF format images are new in this release of the system.  The recognized
extensions are shown below.

        image type      header file extensions

            OIF                 .imh
            STF                 .??h    (? stands for any character)

In most cases when operating upon an image with an IRAF task the extension
can be omitted.  The most important exception occurs in image templates.
THE PATTERN GIVEN IN AN IMAGE TEMPLATE MUST FULLY MATCH THE IMAGE HEADER
FILE NAMES AS THEY APPEAR IN A DIRECTORY LISTING, i.e., the header filename
extension must be matched by the image template.  The image type extension
must also be specified to access an image which is not of the default image
type (OIF or STF), or when changing the type of an image.  For example,

        cl> imcopy dev$pix.imh pix.hhh

will make an STF format copy in the current directory of the OIF format image
"dev$pix".

The default image type is controlled by the new environment variable IMTYPE.
The string value of IMTYPE is the desired image header file extension, e.g.,
"imh" (omit the dot) for an OIF format image.  If IMTYPE is not defined the
default image type is "imh".  For STF format images there are many possible
image header extensions, and IMTYPE specifies the default type IMIO should
look for when the extension is not explicitly given, or the default extension
to use when a completely new image is to be created.  When making a new copy
of some existing image, IMIO will make a new image of the same type as the
existing input image unless an extension is given to force some other type
of image to be created.

   environment variable                 description

        IMTYPE                  the default image type (extension)
        IMDIR                   pixel storage directory for OIF images

The IMDIR environment variable defines the directory in which the pixel file
is to be placed when creating a new OIF format image.  In V2.2 and older
versions of IRAF, IMDIR could only be a logical or machine dependent directory
pathname.  The new system also recognizes the special "builtin" logical
directory name "HDR$" (must be upper case).  If the value of IMDIR is "HDR$",
IMIO will create the pixel file in the SAME directory as the header file,
rather than in some other directory.  It is also possible to place the pixel
file in some subdirectory of the header directory, e.g., "HDR$pixels/" will
cause the pixel files to go into the subdirectory "pixels".

        set imdir = "/tmp/user/"        # pixel files -> specified directory
        set imdir = "HDR$"              # pixel files -> header file directory
        set imdir = "HDR$pixels/"       # pixel files -> subdirectory of HDR$

The root filename of OIF pixel files is now the same as that of the header
file, rather than a computer generated name.  The filename extension of an
OIF pixel file is ".pix".

The STF format images support group format, a format very similar to that
used for group format FITS tapes.  IRAF users accessing an STF group format
image can specify the `group' (subimage) to be accessed by appending a
subscript to the image name, e.g.,

        cl> imstat pix.aah[3]           # access group 3
or
        cl> imstat pix.aah[3][*,100]    # line 100 of group 3

A new group format image can be created in a similar fashion, specifing the
number of groups to preallocate space for, e.g.,

        cl> imcopy dev$pix testimage[1/10]

would create a new group format image "testimage" with space for 10 groups
(subimages), and initialize group 1.  The remaining groups would then be
initialized by specifying only the group subscript "[N]".  Note that all
groups must be the same size, new groups cannot be allocated, old groups
cannot be deleted, the set of possible group parameters is fixed at creation
time, and all groups share the same FITS header.


15 June 86      System Tasks
-------------------------------------------------------------------------------

    The DIRECTORY, HELP, and PAGE system tasks have all undergone important
revisions.  The directory task has been completely rewritten and now handles
directory pathnames, etc., correctly, and in addition it has a more concise
syntax.  The HELP and PAGE tasks have been modified to replace the old "more"
boolean query mechanism (used to pause between pages of output) with a nicer
keystroke driven mechanism which offers more options and is faster.  Read the
manual pages for additional details.  The old parameter files should be
unlearned.


28 April 86     Package Reorganization
-------------------------------------------------------------------------------

    The basic package structure of IRAF has been modified to make a distinction
between the system packages and the NOAO optical astronomy packages.  The basic
directory structure of the system was also changed to reflect the new package
organization, and the printed documentation will be changed as well when time
permits.  These changes were necessary to better isolate science software such
as the NOAO and STScI/SDAS packages from the system software, for a more logical
package structure, and to make it easier to install and maintain the science
packages.

The new root menu of IRAF is as follows:

    dataio      images      lists       noao        sdas        system
    dbms        language    local       plot        softools    utilities

The NOAO menu is as follows:

    artdata     astutil     focas       mtlocal     proto       twodspec
    astrometry  digiphot    imred       onedspec    surfphot

Three new packages were added and three old packages were extensively revised.
The NOAO mountain tape readers were moved from the DATAIO package into the new
MTLOCAL package.  The astronomically oriented utility tasks were moved from
the UTILITIES package to the new ASTUTIL package.  The old LOCAL package was
renamed PROTO, and a new LOCAL package was added in the directory
"iraf$local/tasks".

The concept of the new PROTO package is appropriate for what the old LOCAL
package was used for, i.e., prototype, temporary, or contributed tasks which
are part of the NOAO package and which are exported with the system, but which
are expected to eventually disappear or be replaced by planned system
facilities.  The new LOCAL package is a place to put tasks of strictly local
interest, or tasks which are not portable, e.g., foreign tasks and the Peritek
package.  The LOCAL package should be particularly useful for outside sites
as it gives them a place to put locally added tasks which will not be affected
by future updates of the system.  Also, the framework (mkpkg, local.cl, etc.)
is all set up, making it easier for outside sites to add their own software
without having to figure out how to set up an IRAF package.


20 Feb 85       Recovery from Interrupts
-------------------------------------------------------------------------------

    Tests today (unfortunately only shortly before the first IRAF release)
have shown that VMS/IRAF has higher failure rate than expected for recovery
from a ctrl/c interrupt of a running subprocess, especially if the process
is actively doing i/o.  It is probably much safer to interrupt a compute
bound process than a process which is doing heavy i/o, e.g., reading a tape
or doing many file opens, or probably large numbers of any type of system
calls.  The failure rate for i/o intensive processes was as high as 1 failure
to recover in 4 interrupts in some of the cases tested.  Testing of UNIX/IRAF
turned up some of the same problems, but the failure rate was considerably
lower, probably because the kernel and i/o system are so much simpler.

Interrupting a process at the wrong time can cause many problems, e.g.,
[1] subprocess memory can be corrupted, resulting in unpredictable behaviour
and possibly deadlock when the CL later tries to talk the the process,
[2] a VMS forced exit of the process can occur, e.g., when trying to deliver
an AST to an invalid address, [3] corruption of the CL/subprocess communications
protocol can occur, resulting in deadlock or the loss of sync (the output of
a task will come out when the next command is entered), and various other
problems as well.

Tests on the old version of VMS/IRAF, which dates back to last fall, show
that the problem has existed all along.  The fact that we did not fully
appreciate the problem until now indicates that the problem is not a serious
hindrance provided one is conservative about the use of interrupts.  It also
appears that this will not be an easy problem to solve, hence it is likely
to be with us for a while.  Probably nothing at all will be done about it
for some months since other projects are likely to have a higher priority
if this problem is understood and can be worked around.

In summary, try to minimize the use of interrupts, and in particular, avoid
interrupting processes which are doing heavy i/o.  When in doubt, type
"flpr" after interrupting a process to force it to be restarted.  If a
subprocess becomes hung it may be necessary to restart the CL itself.


20 Feb 85       Process connect failure during ":.snap" in cursor mode
----------------------------------------------------------------------------

    We are still ocasionally having problems when trying to spawn a graphics
subkernel in response to a ":.snap" command in cursor mode.  This happens
infrequently (which is why it is so hard to find the bug), and will usually
go away after exiting and reentering cursor mode and trying again.  It might
also help to do a ":.gflush" while in cursor mode.
