Index of Functions: A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 
Index Page
dasa2l

Table of contents
Procedure
Abstract
Required_Reading
Keywords
Declarations
Brief_I/O
Detailed_Input
Detailed_Output
Parameters
Exceptions
Files
Particulars
Examples
Restrictions
Literature_References
Author_and_Institution
Version

Procedure

     DASA2L ( DAS, address to physical location )

     SUBROUTINE DASA2L ( HANDLE, TYPE,   ADDRSS,
    .                    CLBASE, CLSIZE, RECNO,  WORDNO )

Abstract

     Map a DAS address to a physical location in a specified DAS file.

Required_Reading

     DAS

Keywords

     DAS
     FILES
     TRANSFORMATION
     UTILITY

Declarations

     IMPLICIT NONE

     INTEGER               HANDLE
     INTEGER               TYPE
     INTEGER               ADDRSS
     INTEGER               CLBASE
     INTEGER               CLSIZE
     INTEGER               RECNO
     INTEGER               WORDNO

     INTEGER               CHAR
     PARAMETER           ( CHAR   =  1  )

     INTEGER               INT
     PARAMETER           ( INT    =  3  )

Brief_I/O

     VARIABLE  I/O  DESCRIPTION
     --------  ---  --------------------------------------------------
     HANDLE     I   DAS file handle.
     TYPE       I   Data type specifier.
     ADDRSS     I   DAS address of a word of data type TYPE.
     CLBASE,
     CLSIZE     O   Cluster base record number and size.
     RECNO,
     WORDNO     O   Record/word pair corresponding to ADDRSS.
     CHAR       P   Parameter indicating character data type.
     INT        P   Parameter indicating integer data type.

Detailed_Input

     HANDLE   is the file handle of an open DAS file.

     TYPE     is a data type specifier. TYPE may be any of
              the parameters

                 CHAR
                 DP
                 INT

              which indicate `character', `double precision',
              and `integer' respectively.


     ADDRSS   is the address in a DAS of a word of data
              type TYPE. For each data type (double precision,
              integer, or character), addresses range
              from 1 to the maximum current value for that type,
              which is available from DAFRFR.

Detailed_Output

     CLBASE,
     CLSIZE   are, respectively, the base record number and
              size, in records, of the cluster containing the
              word corresponding to ADDRSS. The cluster spans
              records numbered CLBASE through CLBASE +
              CLSIZE - 1.

     RECNO,
     WORD     are, respectively, the number of the physical
              record and the number of the word within the
              record that correspond to ADDRSS. Word numbers
              start at 1 and go up to NC, ND, or NI in
              character, double precision, or integer records
              respectively.

Parameters

     CHAR,
     DP,
     INT      are data type specifiers which indicate
              `character', `double precision', and `integer'
              respectively. These parameters are used in
              all DAS routines that require a data type
              specifier as input.

Exceptions

     If any of the following exceptions occur, the output arguments may
     contain bogus information.

     1)  If TYPE is not recognized, the error SPICE(DASINVALIDTYPE)
         is signaled.

     2)  ADDRSS must be between 1 and LAST inclusive, where LAST is
         last address in the DAS for a word of the specified type. If
         ADDRSS is out of range, the error SPICE(DASNOSUCHADDRESS) is
         signaled.

     3)  If this routine doesn't find an expected cluster descriptor
         in a directory record, the error SPICE(BADDASDIRECTORY) is
         signaled.

     4)  If the input handle is invalid, an error is signaled by a
         routine in the call tree of this routine.

Files

     See the description of the argument HANDLE in $Detailed_Input.

Particulars

     The DAS architecture allows a programmer to think of the data
     within a DAS file as three one-dimensional arrays: one of
     double precision numbers, one of integers, and one of characters.
     This model allows a programmer to ask the DAS system for the
     `nth double precision number (or integer, or character) in the
     file'.

     DAS files are Fortran direct access files, so to find the
     `nth double precision number', you must have the number of the
     record containing it and the `word number', or position, within
     the record of the double precision number. This routine finds
     the record/word number pair that specify the physical location
     in a DAS file corresponding to a DAS address.

     As opposed to DAFs, the mapping of addresses to physical
     locations for a DAS file depends on the organization of data in
     the file. For example, given a fixed set of DAS file summary
     parameters, the physical location of the nth double precision
     number can depend on how many integer and character records have
     been written prior to the record containing that double precision
     number.

     The cluster information output from this routine allows the
     caller to substantially reduce the number of directory reads
     required to read a from range of addresses that spans
     multiple physical records; the reading program only need call
     this routine once per cluster read, rather than once per
     physical record read.

Examples

     1)  Use this routine to read integers from a range of
         addresses. This is done in the routine DASRDI.

            C
            C     Decide how many integers to read.
            C
                  NUMINT = LAST - FIRST + 1
                  NREAD  = 0

            C
            C     Find out the physical location of the first
            C     integer. If FIRST is invalid, DASA2L will take care
            C     of the problem.
            C
                  CALL DASA2L (  HANDLE,  INT,     FIRST,
                 .               CLBASE,  CLSIZE,  RECNO,  WORDNO  )

            C
            C     Read as much data from record RECNO as necessary.
            C
                  N  =  MIN ( NUMINT,  NWI - WORDNO + 1 )

                  CALL DASRRI ( HANDLE, RECNO, WORDNO, WORDNO + N-1,
                 .              DATA                                 )

                  NREAD  =  N
                  RECNO  =  RECNO + 1

            C
            C     Read from as many additional records as necessary.
            C
                  DO WHILE ( NREAD .LT. NUMINT )
            C
            C        At this point, RECNO if RECNO refers to
            C        a record in the current cluster, RECNO
            C        is the correct number of the record to read
            C        from next. Otherwise, the next cluster of
            C        records containing integer data must be located.
            C        CLBASE is the number of the first record of
            C        the cluster we're about to read from.
            C
                     IF (  RECNO  .LT.  ( CLBASE + CLSIZE )  ) THEN
            C
            C           We can continue reading from the current
            C           cluster.
            C
                        N  =  MIN ( NUMINT - NREAD,  NWI )

                        CALL DASRRI (  HANDLE,
                 .                     RECNO,
                 .                     1,
                 .                     N,
                 .                     DATA ( NREAD + 1 )   )

                        NREAD   =   NREAD + N
                        RECNO   =   RECNO + 1


                     ELSE
            C
            C           We must find the next integer cluster to
            C           read from. The first integer in this
            C           cluster has address FIRST + NREAD.
            C
                        CALL DASA2L ( HANDLE,
                 .                    INT,
                 .                    FIRST + NREAD,
                 .                    CLBASE,
                 .                    CLSIZE,
                 .                    RECNO,
                 .                    WORDNO  )

                     END IF

                  END DO

Restrictions

     None.

Literature_References

     None.

Author_and_Institution

     N.J. Bachman       (JPL)
     J. Diaz del Rio    (ODC Space)
     K.R. Gehringer     (JPL)
     W.L. Taber         (JPL)

Version

    SPICELIB Version 3.0.1, 12-AUG-2021 (JDR)

        Edited the header to comply with NAIF standard. Removed
        unnecessary entries from $Revisions section.

    SPICELIB Version 3.0.0, 09-FEB-2015 (NJB)

        Updated to use DAF/DAS handle manager subsystem.

    SPICELIB Version 2.0.0, 15-APR-2014 (NJB)

        Previous update was 25-FEB-2014

        Bug fix: value of variable FAST for "unknown" files with one
        directory record is now stored in TBFAST. The routine
        previously computed correct outputs but did so more slowly
        than necessary when multiple "fast" files were accessed.

        Functional change: new entries in the file attribute table are
        now inserted at index 1; the existing part of the table is
        shifted to make room. Old entries drop off the end of the
        list. The previous algorithm simply overwrote the first entry
        once the table became full.

        The file attribute table was expanded to store values of a
        "read only" flag for each file. This enables the routine to
        avoid look up of maximum addresses for known, read-only,
        non-segregated files.

        Tests of FAILED and backup loop termination checks
        were added. Logic was introduced to prevent reliance on
        previous values of logical flags unless those flags were
        set on a successful call. On any call that fails, the
        table entry for the current file is marked as unused by
        setting the handle entry to zero.

        The state variables FIRST and RDONLY have been removed.

        Unneeded declarations were removed.

        The code was re-structured to improve clarity.

    SPICELIB Version 1.2.1, 20-NOV-2001 (NJB)

        Comment fix: diagram showing directory record pointers
        incorrectly showed element 2 of the record as a backward
        pointer. The element is actually a forward pointer.

    SPICELIB Version 1.2.0, 03-JUL-1996 (NJB)

        Bug fix: calculation to determine whether file is segregated
        has been fixed.

    SPICELIB Version 1.1.1, 19-DEC-1995 (NJB)

        Corrected title of permuted index entry section.

    SPICELIB Version 1.1.0, 03-NOV-1995 (NJB)

        Re-written to optimize address calculations for segregated,
        read-only files.

    SPICELIB Version 1.0.1, 26-OCT-1993 (KRG)

        Fixed a typo in the $Brief_I/O section of the header.

        Removed references to specific DAS file open routines in the
        $Detailed_Input section of the header. This was done in order
        to minimize documentation changes if the DAS open routines ever
        change.

    SPICELIB Version 1.0.0, 11-NOV-1992 (NJB) (WLT)
Fri Dec 31 18:36:10 2021