Index Page trcnam_c

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

Procedure Abstract Required_Reading Keywords Brief_I/O Detailed_Input | Detailed_Output Parameters Exceptions Files Particulars Examples | Restrictions Literature_References Author_and_Institution Version Index_Entries

#### Procedure

       void trcnam_c ( SpiceInt       index,
                       SpiceInt       namelen,
                       SpiceChar    * name     )

#### Abstract

       Return the name of the module having the specified position in
       the trace representation. The first module to check in is at
       index 0.

#### Required_Reading

       ERROR

#### Keywords

       ERROR

#### Brief_I/O

       VARIABLE  I/O  DESCRIPTION
       --------  ---  --------------------------------------------------

       index      I   The position of the requested module name.
       namelen    I   Available space in output name string.
       name       O   The name at position `index' in the traceback.
       SPICE_ERROR_MODLEN
                  P   Maximum length of stored module names.

#### Detailed_Input

       index          is the position in the traceback of the requested
                      module name. Indices are zero-based: the index
                      of the module at the start of the traceback is zero.
                      The last module to check in is located at index
                      depth - 1, where `depth' is the trace stack depth
                      returned by trcdep_c.

       namelen        is the available space in the output string `name,'
                      including room for the null terminator.

#### Detailed_Output

       name           is the name of the module at the position in
                      the traceback indicated by `index'. `name' should
                      be declared with length at least SPICE_ERROR_MODLEN.

                      The meaning of the traceback depends on the state
                      of the error handling mechanism.  There are two
                      cases:

                         1)  In RETURN mode, when an error is
                             signaled, the traceback at that point is
                             saved. trcdep_c, trcnam_c, and qcktrc_c
                             return values pertaining to the saved
                             traceback.

                         2)  In all other modes, the traceback represents
                             the CURRENT call chain. trcdep_c, trcnam_c,
                             and qcktrc_c return values pertaining to
                             the current trace representation.

#### Parameters

        SPICE_ERROR_MODLEN   is the maximum length of any module name that
                             can be returned by this routine, including
                             room for the null terminator. SPICE_ERROR_MODLEN
                             is declared in SpiceErr.h.

#### Exceptions

       If a SPICE error occurs, in order to ensure that this error can be
       signaled, this routine resets the SPICE error status. Error messages
       from any pre-existing error will be lost.

       1)  This routine detects the condition of INDEX being out of
           range. The short error message set in that case is
           SPICE(INDEXOUTOFRANGE).

           Note that the underlying SPICELIB routine trcnam_ cannot
           signal an error if `index' is out of range.

       2)  If the output string pointer is null, the error SPICE(NULLPOINTER)
           will be signaled.

       3)  If the output string has length less than 2 characters, the error
           SPICE(STRINGTOOSHORT) will be signaled.

#### Files

       None.

#### Particulars

       SPICE-based applications can use this routine, together with
       trcdep_c, to create a customized traceback report. This is normally
       done after an application detects a SPICE error condition using
       failed_c.

       The CSPICE routine qcktrc_c is an alternative to the combination of
       trcdep_c and trcnam_c; qcktrc_c can be used to fetch a complete,
       fixed-format traceback string in a single call.

#### Examples

       1) Deliberately generate a SPICE error to demonstrate use of
          this routine together with trcdep_c. We'll attempt to look up
          a state vector via spkezr_c without first having loaded any
          SPK files.

          Example code begins here.

             #include <stdio.h>
             #include "SpiceUsr.h"

             int main()
             {
                /.
                Local constants
                ./
                #define ACTION          "RETURN"

                /.
                Local variables
                ./
                SpiceChar             * abcorr;
                SpiceChar               longms  [ SPICE_ERROR_LMSGLN ];
                SpiceChar               modnam  [ SPICE_ERROR_MODLEN ];
                SpiceChar               shrtms  [ SPICE_ERROR_SMSGLN ];
                SpiceChar             * obsrvr;
                SpiceChar             * frame;
                SpiceChar             * target;

                SpiceDouble             et;
                SpiceDouble             lt;
                SpiceDouble             state [6];

                SpiceInt                depth;
                SpiceInt                i;

                /.
                Set error handling action to RETURN so that this program
                won't terminate when a SPICE error is signaled. Note that
                the input string length argument is unused for a "SET"
                operation.
                ./
                erract_c ( "SET", 0, ACTION );

                /.
                Generate a SPICE error: call spkezr_c without first having
                loaded an SPK file.
                ./
                et     = 0.0;
                target = "Moon";
                obsrvr = "Earth";
                frame  = "J2000";
                abcorr = "NONE";

                spkezr_c ( target, et, frame, abcorr, obsrvr, state, &lt );

                if ( failed_c() )
                {
                   /.
                   An error has been signaled. First fetch the long
                   and short error message. Next fetch the traceback depth,
                   then fetch and display the module names.
                   ./
                   getmsg_c ( "SHORT", SPICE_ERROR_SMSGLN, shrtms );
                   getmsg_c ( "LONG",  SPICE_ERROR_LMSGLN, longms );

                   printf ( "\n%s\n", shrtms );
                   printf ( "%s\n\n", longms );

                   trcdep_c ( &depth );

                   for ( i = 0;  i < depth;  i++ )
                   {
                      trcnam_c ( i, SPICE_ERROR_MODLEN, modnam );

                      printf ( "Trace level: %d. Module name = %s\n",
                               (int)i,
                               modnam                                 );
                   }

                   /.
                   Reset the error status so that CSPICE can resume normal
                   operation.
                   ./
                   reset_c();
                }

                return ( 0 );
             }

          When this program was executed on a PC/Linux/gcc platform, the
          output (which has been reformatted to fit in the available
          space in this header) was:

             ====================================================================
             ============

             Toolkit version: N0065

             SPICE(NOLOADEDFILES) --

             At least one SPK file needs to be loaded by SPKLEF before beginning
             a search.

             A traceback follows.  The name of the highest level module is first.
             spkezr_c --> SPKEZR --> SPKEZ --> SPKGEO --> SPKSFS

             ====================================================================
             ============

             SPICE(NOLOADEDFILES)
             At least one SPK file needs to be loaded by SPKLEF before beginning
             a search.

             Trace level: 0. Module name = spkezr_c
             Trace level: 1. Module name = SPKEZR
             Trace level: 2. Module name = SPKEZ
             Trace level: 3. Module name = SPKGEO
             Trace level: 4. Module name = SPKSFS

#### Restrictions

       1)  If a SPICE error occurs during the execution of this routine,
           this routine resets the SPICE error handling status. See the
           Exceptions section above.

#### Literature_References

       None.

#### Author_and_Institution

       N.J. Bachman    (JPL)
       K.R. Gehringer  (JPL)

#### Version

       -CSPICE Version 1.0.1, 12-JUL-2016 (EDW)

          Edit to example program to use "%d" with explicit casts
          to int for printing SpiceInts with printf.

       -CSPICE Version 1.0.0, 05-NOV-2013 (NJB) (KRG)

#### Index_Entries

       get module name from traceback

#### Link to routine trcnam_c source file trcnam_c.c

    Wed Apr  5 17:54:45 2017