/* m2bodtrn.f -- translated by f2c (version 19980913).
   You must link the resulting object file with the libraries:
	-lf2c -lm   (in that order)
*/

#include "f2c.h"

/* Table of constant values */

static integer c__1 = 1;

/* $Procedure      M2BODTRN ( Body name and code translation ) */
/* Subroutine */ int m2bodtrn_0_(int n__, char *name__, integer *code, 
	logical *found, ftnlen name_len)
{
    /* Initialized data */

    static integer codes[415] = { 199,299,399,499,599,699,799,899,999,301,401,
	    402,501,502,503,504,505,506,507,508,509,510,511,512,513,514,514,
	    515,515,516,516,601,602,603,604,605,606,607,608,609,610,610,611,
	    611,612,612,613,613,614,614,615,615,616,616,617,617,701,702,703,
	    704,705,706,706,707,707,708,708,709,709,710,710,711,711,712,712,
	    713,713,714,714,715,715,801,802,803,804,805,806,807,808,901,901,
	    -12,-12,-12,-18,-18,-27,-27,-30,-30,-31,-31,-32,-32,-46,-46,-47,
	    -47,-58,-66,-67,-77,-77,-78,-94,-94,-112,0,0,1,2,3,3,3,3,4,5,6,7,
	    8,9,10,9511010,2431010,1000001,1000002,1000003,1000004,1000005,
	    1000006,1000007,1000008,1000009,1000010,1000011,1000012,1000013,
	    1000014,1000015,1000016,1000017,1000018,1000019,1000020,1000021,
	    1000022,1000023,1000024,1000025,1000026,1000027,1000028,1000029,
	    1000030,1000031,1000032,1000033,1000034,1000035,1000036,1000037,
	    1000038,1000039,1000040,1000041,1000042,1000043,1000044,1000045,
	    1000046,1000047,1000048,1000049,1000050,1000051,1000052,1000053,
	    1000054,1000055,1000056,1000057,1000058,1000059,1000060,1000061,
	    1000062,1000063,1000064,1000065,1000066,1000067,1000068,1000069,
	    1000070,1000071,1000072,1000073,1000074,1000075,1000076,1000077,
	    1000078,1000079,1000080,1000081,1000082,1000083,1000084,1000085,
	    1000086,1000087,1000088,1000089,1000090,1000091,1000092,1000093,
	    1000094,1000095,1000096,1000097,1000098,1000099,1000100,1000101,
	    1000102,1000103,1000104,1000105,1000106,1000107,1000108,1000109,
	    1000110,1000111,1000112,1000113,1000114,1000115,1000116,1000117,
	    1000118,1000119,1000120,1000121,1000122,1000123,1000124,1000125,
	    1000126,1000127,1000128,1000129,1000130,50000001,50000002,
	    50000003,50000004,50000005,50000006,50000007,50000008,50000009,
	    50000010,50000011,50000012,50000013,50000014,50000015,50000016,
	    50000017,50000018,50000019,50000020,50000021,50000022,50000023,
	    -40,-344,-344,2000433,2000253,618,-59,-53,-53,-93,-93,-82,-82,
	    -150,-55,399001,399002,399003,399004,1000131,1000132,-550,-550,
	    -550,-550,-90,-95,-81 };
    static char names[32*415] = "MERCURY                         " "VENUS   "
	    "                        " "EARTH                           " 
	    "MARS                            " "JUPITER                     "
	    "    " "SATURN                          " "URANUS                "
	    "          " "NEPTUNE                         " "PLUTO           "
	    "                " "MOON                            " "PHOBOS    "
	    "                      " "DEIMOS                          " "IO  "
	    "                            " "EUROPA                          " 
	    "GANYMEDE                        " "CALLISTO                    "
	    "    " "AMALTHEA                        " "HIMALIA               "
	    "          " "ELARA                           " "PASIPHAE        "
	    "                " "SINOPE                          " "LYSITHEA  "
	    "                      " "CARME                           " "ANAN"
	    "KE                          " "LEDA                            " 
	    "1979J2                          " "THEBE                       "
	    "    " "1979J1                          " "ADRASTEA              "
	    "          " "1979J3                          " "METIS           "
	    "                " "MIMAS                           " "ENCELADUS "
	    "                      " "TETHYS                          " "DION"
	    "E                           " "RHEA                            " 
	    "TITAN                           " "HYPERION                    "
	    "    " "IAPETUS                         " "PHOEBE                "
	    "          " "1980S1                          " "JANUS           "
	    "                " "1980S3                          " "EPIMETHEUS"
	    "                      " "1980S6                          " "HELE"
	    "NE                          " "1980S13                         " 
	    "TELESTO                         " "1980S25                     "
	    "    " "CALYPSO                         " "1980S28               "
	    "          " "ATLAS                           " "1980S27         "
	    "                " "PROMETHEUS                      " "1980S26   "
	    "                      " "PANDORA                         " "ARIE"
	    "L                           " "UMBRIEL                         " 
	    "TITANIA                         " "OBERON                      "
	    "    " "MIRANDA                         " "1986U7                "
	    "          " "CORDELIA                        " "1986U8          "
	    "                " "OPHELIA                         " "1986U9    "
	    "                      " "BIANCA                          " "1986"
	    "U4                          " "CRESSIDA                        " 
	    "1986U6                          " "DESDEMONA                   "
	    "    " "1986U3                          " "JULIET                "
	    "          " "1986U1                          " "PORTIA          "
	    "                " "1986U2                          " "ROSALIND  "
	    "                      " "1986U5                          " "BELI"
	    "NDA                         " "1985U1                          " 
	    "PUCK                            " "TRITON                      "
	    "    " "NEREID                          " "NAIAD                 "
	    "          " "THALASSA                        " "DESPINA         "
	    "                " "GALATEA                         " "LARISSA   "
	    "                      " "PROTEUS                         " "1978"
	    "P1                          " "CHARON                          " 
	    "VENUS ORBITER                   " "P12                         "
	    "    " "PIONEER 12                      " "MGN                   "
	    "          " "MAGELLAN                        " "VK1             "
	    "                " "VIKING 1 ORBITER                " "VK2       "
	    "                      " "VIKING 2 ORBITER                " "VG1 "
	    "                            " "VOYAGER 1                       " 
	    "VG2                             " "VOYAGER 2                   "
	    "    " "MS-T5                           " "SAKIGAKE              "
	    "          " "PLANET-A                        " "SUISEI          "
	    "                " "VSOP                            " "VEGA 1    "
	    "                      " "VEGA 2                          " "GLL "
	    "                            " "GALILEO ORBITER                 " 
	    "GIOTTO                          " "MGS                         "
	    "    " "MARS GLOBAL SURVEYOR            " "ICE                   "
	    "          " "SSB                             " "SOLAR SYSTEM BAR"
	    "YCENTER         " "MERCURY BARYCENTER              " "VENUS BARY"
	    "CENTER                " "EMB                             " "EART"
	    "H MOON BARYCENTER           " "EARTH-MOON BARYCENTER           " 
	    "EARTH BARYCENTER                " "MARS BARYCENTER             "
	    "    " "JUPITER BARYCENTER              " "SATURN BARYCENTER     "
	    "          " "URANUS BARYCENTER               " "NEPTUNE BARYCENT"
	    "ER              " "PLUTO BARYCENTER                " "SUN       "
	    "                      " "GASPRA                          " "IDA "
	    "                            " "AREND                           " 
	    "AREND-RIGAUX                    " "ASHBROOK-JACKSON            "
	    "    " "BOETHIN                         " "BORRELLY              "
	    "          " "BOWELL-SKIFF                    " "BRADFIELD       "
	    "                " "BROOKS 2                        " "BRORSEN-ME"
	    "TCALF                 " "BUS                             " "CHER"
	    "NYKH                        " "CHURYUMOV-GERASIMENKO           " 
	    "CIFFREO                         " "CLARK                       "
	    "    " "COMAS SOLA                      " "CROMMELIN             "
	    "          " "D'ARREST                        " "DANIEL          "
	    "                " "DE VICO-SWIFT                   " "DENNING-FU"
	    "JIKAWA                " "DU TOIT 1                       " "DU T"
	    "OIT-HARTLEY                 " "DUTOIT-NEUJMIN-DELPORTE         " 
	    "DUBIAGO                         " "ENCKE                       "
	    "    " "FAYE                            " "FINLAY                "
	    "          " "FORBES                          " "GEHRELS 1       "
	    "                " "GEHRELS 2                       " "GEHRELS 3 "
	    "                      " "GIACOBINI-ZINNER                " "GICL"
	    "AS                          " "GRIGG-SKJELLERUP                " 
	    "GUNN                            " "HALLEY                      "
	    "    " "HANEDA-CAMPOS                   " "HARRINGTON            "
	    "          " "HARRINGTON-ABELL                " "HARTLEY 1       "
	    "                " "HARTLEY 2                       " "HARTLEY-IR"
	    "AS                    " "HERSCHEL-RIGOLLET               " "HOLM"
	    "ES                          " "HONDA-MRKOS-PAJDUSAKOVA         " 
	    "HOWELL                          " "IRAS                        "
	    "    " "JACKSON-NEUJMIN                 " "JOHNSON               "
	    "          " "KEARNS-KWEE                     " "KLEMOLA         "
	    "                " "KOHOUTEK                        " "KOJIMA    "
	    "                      " "KOPFF                           " "KOWA"
	    "L 1                         " "KOWAL 2                         " 
	    "KOWAL-MRKOS                     " "KOWAL-VAVROVA               "
	    "    " "LONGMORE                        " "LOVAS 1               "
	    "          " "MACHHOLZ                        " "MAURY           "
	    "                " "NEUJMIN 1                       " "NEUJMIN 2 "
	    "                      " "NEUJMIN 3                       " "OLBE"
	    "RS                          " "PETERS-HARTLEY                  " 
	    "PONS-BROOKS                     " "PONS-WINNECKE               "
	    "    " "REINMUTH 1                      " "REINMUTH 2            "
	    "          " "RUSSELL 1                       " "RUSSELL 2       "
	    "                " "RUSSELL 3                       " "RUSSELL 4 "
	    "                      " "SANGUIN                         " "SCHA"
	    "UMASSE                      " "SCHUSTER                        " 
	    "SCHWASSMANN-WACHMANN 1          " "SCHWASSMANN-WACHMANN 2      "
	    "    " "SCHWASSMANN-WACHMANN 3          " "SHAJN-SCHALDACH       "
	    "          " "SHOEMAKER 1                     " "SHOEMAKER 2     "
	    "                " "SHOEMAKER 3                     " "SINGER-BRE"
	    "WSTER                 " "SLAUGHTER-BURNHAM               " "SMIR"
	    "NOVA-CHERNYKH               " "STEPHAN-OTERMA                  " 
	    "SWIFT-GEHRELS                   " "TAKAMIZAWA                  "
	    "    " "TAYLOR                          " "TEMPEL 1              "
	    "          " "TEMPEL 2                        " "TEMPEL-TUTTLE   "
	    "                " "TRITTON                         " "TSUCHINSHA"
	    "N 1                   " "TSUCHINSHAN 2                   " "TUTT"
	    "LE                          " "TUTTLE-GIACOBINI-KRESAK         " 
	    "VAISALA 1                       " "VAN BIESBROECK              "
	    "    " "VAN HOUTEN                      " "WEST-KOHOUTEK-IKEMURA "
	    "          " "WHIPPLE                         " "WILD 1          "
	    "                " "WILD 2                          " "WILD 3    "
	    "                      " "WIRTANEN                        " "WOLF"
	    "                            " "WOLF-HARRINGTON                 " 
	    "LOVAS 2                         " "URATA-NIIJIMA               "
	    "    " "WISEMAN-SKIFF                   " "HELIN                 "
	    "          " "MUELLER                         " "SHOEMAKER-HOLT 1"
	    "                " "HELIN-ROMAN-CROCKETT            " "HARTLEY 3 "
	    "                      " "PARKER-HARTLEY                  " "HELI"
	    "N-ROMAN-ALU 1               " "WILD 4                          " 
	    "MUELLER 2                       " "MUELLER 3                   "
	    "    " "SHOEMAKER-LEVY 1                " "SHOEMAKER-LEVY 2      "
	    "          " "HOLT-OLMSTEAD                   " "METCALF-BREWINGT"
	    "ON              " "LEVY                            " "SHOEMAKER-"
	    "LEVY 9                " "SHOEMAKER-LEVY 9-W              " "SHOE"
	    "MAKER-LEVY 9-V              " "SHOEMAKER-LEVY 9-U              " 
	    "SHOEMAKER-LEVY 9-T              " "SHOEMAKER-LEVY 9-S          "
	    "    " "SHOEMAKER-LEVY 9-R              " "SHOEMAKER-LEVY 9-Q    "
	    "          " "SHOEMAKER-LEVY 9-P              " "SHOEMAKER-LEVY 9"
	    "-N              " "SHOEMAKER-LEVY 9-M              " "SHOEMAKER-"
	    "LEVY 9-L              " "SHOEMAKER-LEVY 9-K              " "SHOE"
	    "MAKER-LEVY 9-J              " "SHOEMAKER-LEVY 9-H              " 
	    "SHOEMAKER-LEVY 9-G              " "SHOEMAKER-LEVY 9-F          "
	    "    " "SHOEMAKER-LEVY 9-E              " "SHOEMAKER-LEVY 9-D    "
	    "          " "SHOEMAKER-LEVY 9-C              " "SHOEMAKER-LEVY 9"
	    "-B              " "SHOEMAKER-LEVY 9-A              " "SHOEMAKER-"
	    "LEVY 9-Q1             " "SHOEMAKER-LEVY 9-P2             " "CLEM"
	    "ENTINE                      " "GLL PROBE                       " 
	    "GALILEO PROBE                   " "EROS                        "
	    "    " "MATHILDE                        " "PAN                   "
	    "          " "RADIOASTRON                     " "MARS PATHFINDER "
	    "                " "MPF                             " "NEAR      "
	    "                      " "NEAR EARTH ASTEROID RENDEZVOUS  " "CASS"
	    "INI                         " "CAS                             " 
	    "CASSINI HUYGENS PROBE           " "ULYSSES                     "
	    "    " "GOLDSTONE                       " "CANBERRA              "
	    "          " "MADRID                          " "USUDA           "
	    "                " "HYAKUTAKE                       " "HALE-BOPP "
	    "                      " "MARS-96                         " "M96 "
	    "                            " "MARS 96                         " 
	    "MARS96                          " "CASSINI SIMULATION          "
	    "    " "MGS SIMULATION                  " "CASSINI ITL           "
	    "          ";
    static logical init = TRUE_;
    static integer nnam = 315;

    /* System generated locals */
    integer i__1, i__2;

    /* Builtin functions */
    integer s_rnge(char *, integer, char *, integer);
    /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);

    /* Local variables */
    static integer ncod, i__;
    extern /* Subroutine */ int chkin_(char *, ftnlen), ucase_(char *, char *,
	     ftnlen, ftnlen), errch_(char *, char *, ftnlen, ftnlen);
    extern logical eqstr_(char *, char *, ftnlen, ftnlen);
    extern /* Subroutine */ int ljust_(char *, char *, ftnlen, ftnlen), 
	    bodn2c_(char *, integer *, logical *, ftnlen);
    extern integer bschoc_(char *, integer *, char *, integer *, ftnlen, 
	    ftnlen), bschoi_(integer *, integer *, integer *, integer *);
    static integer ordcod[415], ordnam[415];
    extern /* Subroutine */ int sigerr_(char *, ftnlen);
    static char tmpnam[32];
    extern /* Subroutine */ int chkout_(char *, ftnlen), setmsg_(char *, 
	    ftnlen), errint_(char *, integer *, ftnlen), cmprss_(char *, 
	    integer *, char *, char *, ftnlen, ftnlen, ftnlen);
    extern logical return_(void);
    extern /* Subroutine */ int m2bodini_(char *, integer *, integer *, 
	    integer *, integer *, integer *, ftnlen);

/* $ Abstract */

/*     SPICE Private routine intended solely for the support of SPICE */
/*     routines.  Users should not call this routine directly due */
/*     to the volatile nature of this routine. */

/*     This is the umbrella routine that contains entry points for */
/*     translating between body names and NAIF integer codes and */
/*     for defining new name/code pairs. */

/* $ Copyright */

/*     Copyright (1995), California Institute of Technology. */
/*     U.S. Government sponsorship acknowledged. */

/* $ Required_Reading */

/*     NAIF_IDS */

/* $ Keywords */

/*     BODY */

/* $ Declarations */
/* $ Brief_I/O */

/*     Variable  I/O  Description */
/*     --------  ---  -------------------------------------------------- */
/*     NAME       I   M2BODN2C and M2BODDEF */
/*                O   M2BODC2N */
/*     CODE       I   M2BODC2N and M2BODDEF */
/*                O   M2BODN2C */
/*     FOUND      O   M2BODN2C and M2BODC2N */
/*     MAXL       P   (All) */
/*     MAXP       P   M2BODDEF */

/* $ Detailed_Input */

/*     See the entry points for a discussion of their arguments. */

/* $ Detailed_Output */

/*     See the entry points for a discussion of their arguments. */

/* $ Parameters */

/*     MAXL        is the maximum length of a name.  MAXL should only */
/*                 be increased if names longer than the current value */
/*                 need to be supported.  If MAXL is decreased the */
/*                 default names may be truncated. */

/*     MAXP        is the maximum number of name/code pairs that can */
/*                 be defined via M2BODDEF.  It is the limit */
/*                 on the number of definitions over and above the */
/*                 number of default definitions.  The user may alter */
/*                 the the value of MAXP, however, it must remain a */
/*                 positive integer. */

/* $ Exceptions */

/*     1) If M2BODTRN is called directly, the error SPICE(BOGUSENTRY) is */
/*        signalled. */

/* $ Files */

/*     None. */

/* $ Particulars */

/*     M2BODTRN should never be called directly, but should instead be */
/*     accessed through its entry points: */

/*        M2BODN2C      Body name to code */

/*        M2BODC2N      Body code to name */

/*        M2BODDEF      Body name/code definition */

/*     M2BODN2C and M2BODC2N perform translations between body names */
/*     and their corresponding integer codes which are used */
/*     in SPK and PCK files and routines.  A set of name/code */
/*     pairs are automatically defined during the first call to */
/*     one of these entry points.  Additional name/code pairs may */
/*     be defined via M2BODDEF for two purposes: */

/*        1.  to associate another, perhaps more familiar or */
/*            abbreviated, name with a particular body integer */
/*            code that has already been defined, or */

/*        2.  to define a new body integer code and name, */

/*     Each body has a unique integer code, but may have several */
/*     names.  Thus you may associate more than one name with */
/*     a particular integer code.  However, associating more */
/*     than one integer code with a particular name creates ambiguity. */
/*     Therefore, once a name has been defined, it may not be redefined */
/*     with a different integer code. */

/*     For example, Europa is the name of the second satellite of */
/*     Jupiter, and has the NAIF integer code 502.  Thus (EUROPA, 502) */
/*     is one of the default definitions.  Europa is also the name */
/*     of an asteroid.  Suppose you were able to associate the asteroid */
/*     integer code with the name EUROPA.  Then when you call M2BODN2C to */
/*     translate the name EUROPA, which code should be returned?  That */
/*     of the asteroid or 502? */

/*     M2BODDEF prevents this ambiguity by signalling an error if the */
/*     specified name has already been defined with a different code. */
/*     In the case of EUROPA, you may want to use the name ASTEROID */
/*     EUROPA.  The set of default definitions are listed in DATA */
/*     statements in the umbrella routine M2BODTRN for easy reference. */

/* $ Examples */

/*     1.  In the following code fragment, SPKEZ computes the state */
/*     (position and velocity) of Jupiter as seen from the Galileo */
/*     Orbiter.  It requires the NAIF integer codes of the target and */
/*     observer, so we use M2BODN2C to convert names to integer codes */
/*     for those bodies. */

/*       CALL M2BODN2C( 'JUPITER',         TARGET, FOUND ) */

/*       CALL M2BODN2C( 'GALILEO ORBITER', OBSRVR, FOUND ) */

/*       CALL SPKEZ   ( TARGET, EPOCH, FRAME, ABCORR, OBSRVR, STATE, LT) */

/*     2.  In this example, we assume that M2BODDEF has not been called. */
/*         Thus, only the set of default name/code pairs has been */
/*         defined. */

/*     Given these names, M2BODN2C will return the following codes: */

/*        Name                         Code    Found? */
/*        ------------------------   ------    ------ */
/*        'EARTH'                       399    Yes */
/*        '  Earth '                    399    Yes */
/*        'EMB'                           3    Yes */
/*        'Solar System Barycenter'       0    Yes */
/*        'SolarSystemBarycenter'         -    No */
/*        'SSB'                           0    Yes */
/*        'Voyager 2'                   -32    Yes */
/*        'U.S.S. Enterprise'             -    No */
/*        ' '                             -    No */
/*        'Halley's Comet'                -    No */

/*     and, given these codes, M2BODC2N will return the following names: */

/*        Code        Name                        Found? */
/*        -------     -------------------         ------ */
/*        399         'EARTH'                     Yes */
/*          0         'SOLAR SYSTEM BARYCENTER'   Yes */
/*          3         'EARTH BARYCENTER'          Yes */
/*        -77         'GALILEO ORBITER'           Yes */
/*         11          -                          No */
/*         -1          -                          No */

/*     3.  This example shows how to define a name/code pair. */
/*     You may associate a new name with a particular code that */
/*     has already been defined: */

/*            CALL M2BODDEF ( 'JB', 5 ) */

/*     You may also define the name and integer code for a new body: */

/*            CALL M2BODDEF ( 'Asteroid Frank', 20103456 ) */

/*     After these calls to M2BODDEF, M2BODN2C would return the following */
/*     translations: */

/*        Name                         Code    Found? */
/*        ------------------------   ------    ------ */
/*        'JB'                            5    Yes */
/*        'Jupiter Barycenter'            5    Yes */
/*        'ASTEROID FRANK'         20103456    Yes */
/*        'ASTEROIDFRANK'                 -    No */
/*        'Frank'                         -    No */

/*     and M2BODC2N will return these translations: */

/*        Code        Name                     Found? */
/*        -------     -------------------      ------ */
/*               5    'JB'                     Yes */
/*        20103456    'Asteroid Frank'         Yes */

/* $ Restrictions */

/*     None. */

/* $ Literature_References */

/*     None. */

/* $ Author_and_Institution */

/*     J.E. McLean    (JPL) */
/*     H.A. Neilan    (JPL) */
/*     B.V. Semenov   (JPL) */
/*     M.J. Spencer   (JPL) */
/*     W.L. Taber     (JPL) */
/*     K.S. Zukor     (JPL) */

/* $ Version */

/* -    SPICELIB Version 1.1.0, 22-MAY-1996 (WLT) */

/*        Added the id-code for Comet Hyakutake, Comet Hale-Bopp, */
/*        Mars 96, Cassini Simulation, MGS Simulation. */

/* -    SPICELIB Version 1.0.0, 25-SEP-1995 (BVS) */

/*        Renamed umbrella subroutine and entry points to */
/*        correspond private routine convention (M2...). Added IDs for */
/*        tracking stations Goldstone (399001), Canberra (399002), */
/*        Madrid (399003), Usuda (399004). */

/* -    Beta Version 2.2.0, 01-AUG-1995 (HAN) */

/*        Added the IDs for Near Earth Asteroid Rendezvous (-93), */
/*        Mars Pathfinder (-53), Ulysses (-55), VSOP (-58), */
/*        Radioastron (-59), Cassini spacecraft (-82), and Cassini */
/*        Huygens probe (-150). */
/*        Mars Observer (-94) was replaced with Mars Global */
/*        Surveyor (-94). */

/* -    Beta Version 2.1.0, 15-MAR-1995 (KSZ) (HAN) */

/*        Two Shoemaker Levy 9 fragments were added, Q1 and P2 */
/*        (IDs 50000022 and 50000023). Two asteroids were added, */
/*        Eros and Mathilde (IDs 2000433 and 2000253). The */
/*        Saturnian satellite Pan (ID 618) was added. */

/* -    Beta Version 2.0.0, 03-FEB-1995 (NJB) */

/*        The Galileo probe (ID -344) has been added to the permanent */
/*        collection. */

/* -    Beta Version 1.0.0, 29-APR-1994 (MJS) */

/*        SPICELIB symbol tables are no longer used. Instead, two order */
/*        vectors are used to index the NAMES and CODES arrays. Also, */
/*        this version does not support reading body name ID pairs from a */
/*        file. */

/* -    MOSPICE  Version 2.0.1, 10-MAR-1992 (WLT) */

/*        Comment section for permuted index source lines was added */
/*        following the header. */

/* -    MOSPICE  Version 2.0.0, 15-JUL-1991 (WLT) */

/*       The body id's for the Uranian satellites discovered by Voyager */
/*       were modified to conform to those established by the IAU */
/*       nomenclature committee.  In addition the id's for Gaspra and */
/*       Ida were added. */

/* -    MOSPICE  Version 1.0.0,  7-MAR-1991 (WLT) */

/*       Some items that were previously considered errors were removed */
/*       and some minor modifications were made to improve the */
/*       robustness of the routines. */

/* -    GLLSPICE Version 1.0.0, 28-JUN-1990 (JEM) */

/* -& */

/*     SPICELIB functions */

/*     Functions */

/*     The parameters here are for ease in maintaining the */
/*     large collection of automatic names that are stored */
/*     in data statements.  To insert a name/code pair in the */
/*     block from BEGx to ENDx, redefine ENDx to be */
/*     one larger than its current definition.  Recompiling */
/*     will automatically modify all the other parameters. */

/*     Local variables */

/*     Introducing the permanent collection. */

    switch(n__) {
	case 1: goto L_m2bodn2c;
	case 2: goto L_m2bodc2n;
	case 3: goto L_m2boddef;
	}

/*     The 851, 852, ... codes are temporary codes for the newly- */
/*     discovered satellites of Neptune.  These will go away when */
/*     the official codes are assigned.  The codes listed above */
/*     do not include these temporary assignments. */

/*     The proposed names are the following: */

/*        1989N1 = Proteus */
/*        1989N2 = Larissa */
/*        1989N3 = Despina */
/*        1989N4 = Galatea */
/*        1989N5 = Thalassa */
/*        1989N6 = Naiad */

/*     Standard SPICELIB error handling. */

    if (return_()) {
	return 0;
    } else {
	chkin_("M2BODTRN", (ftnlen)8);
    }

/*     This routine should never be called. If it is called, */
/*     an error is signalled. */

    setmsg_("M2BODTRN: You have called an entry which performs no run-time f"
	    "unction. This may indicate a bug. Please check the documentation"
	    " for the subroutine M2BODTRN.", (ftnlen)156);
    sigerr_("SPICE(BOGUSENTRY)", (ftnlen)17);
    chkout_("M2BODTRN", (ftnlen)8);
    return 0;
/* $Procedure M2BODN2C ( Body name to code ) */

L_m2bodn2c:
/* $ Abstract */

/*     SPICE Private routine intended solely for the support of SPICE */
/*     routines.  Users should not call this routine directly due */
/*     to the volatile nature of this routine. */

/*     Translate the name of a body into the integer code for */
/*     that body. */

/* $ Copyright */

/*     Copyright (1995), California Institute of Technology. */
/*     U.S. Government sponsorship acknowledged. */

/* $ Required_Reading */

/*     NAIF_IDS */

/* $ Keywords */

/*     BODY */
/*     CONVERSION */

/* $ Declarations */

/*     CHARACTER*(*)         NAME */
/*     INTEGER               CODE */
/*     LOGICAL               FOUND */

/* $ Brief_I/O */

/*     Variable  I/O  Description */
/*     --------  ---  -------------------------------------------------- */
/*     NAME       I   Body name to be translated. */
/*     CODE       O   Integer code for that body. */
/*     FOUND      O   True if translated, otherwise false. */
/*     MAXL       P   Max name length. */

/* $ Detailed_Input */

/*     NAME        is an arbitrary name of a body which could be */
/*                 a planet, satellite, barycenter, spacecraft, */
/*                 asteroid, comet, or other ephemeris object. */

/*                 Case and leading and trailing blanks in a name */
/*                 are not significant.  However when a name is made */
/*                 up of more than one word, they must be separated by */
/*                 at least one blank.  That is, all of the following */
/*                 strings are equivalent names: */

/*                         'JUPITER BARYCENTER' */
/*                         'Jupiter Barycenter' */
/*                         'JUPITER BARYCENTER   ' */
/*                         'JUPITER    BARYCENTER' */
/*                         '   JUPITER BARYCENTER' */

/*                 However, 'JUPITERBARYCENTER' is not equivalent to */
/*                 the names above. */

/*                 When ignoring trailing blanks, NAME must have fewer */
/*                 than MAXL characters. */

/* $ Detailed_Output */

/*     CODE        is the NAIF or user-defined integer code for the */
/*                 named body.  CODE will have at most MAXL digits */
/*                 including a minus sign if CODE is negative. */

/*     FOUND       is true if NAME has a translation.  Otherwise, FOUND */
/*                 is false. */

/* $ Parameters */

/*     MAXL        is the maximum length of a name.  MAXL should only */
/*                 be increased if names longer than the current value */
/*                 need to be supported.  If MAXL is decreased the */
/*                 default names may be truncated. */

/* $ Exceptions */

/*     NONE */

/* $ Files */

/*     None. */

/* $ Particulars */

/*     M2BODN2C is one of three related entry points, */

/*        M2BODN2C      Body name to code */

/*        M2BODC2N      Body code to name */

/*        M2BODDEF      Body name/code definition */

/*     M2BODN2C and M2BODC2N perform translations between body names */
/*     and their corresponding integer codes which are used */
/*     in SPK and PCK files and routines.  A set of name/code */
/*     pairs are automatically defined during the first call to */
/*     one of these entry points.  Additional name/code pairs may */
/*     be defined via M2BODDEF. */

/* $ Examples */

/*     1.  In the following code fragment, SPKEZ computes the state */
/*     (position and velocity) of Jupiter as seen from the Galileo */
/*     Orbiter.  It requires the NAIF integer codes of the target and */
/*     observer, so we use M2BODN2C to convert names to integer codes */
/*     for those bodies. */

/*       CALL M2BODN2C( 'JUPITER',         TARGET, FOUND ) */

/*       CALL M2BODN2C( 'GALILEO ORBITER', OBSRVR, FOUND ) */

/*       CALL SPKEZ   ( TARGET, EPOCH, FRAME, ABCORR, OBSRVR, STATE, LT ) */

/*     2.  In this example, we assume that neither M2BODDEF has not been */
/*         called.  Thus, only the set of default name/code pairs has */
/*         been defined. */

/*     Given these names, M2BODN2C will return the following codes: */

/*        Name                         Code    Found? */
/*        ------------------------   ------    ------ */
/*        'EARTH'                       399    Yes */
/*        '  Earth '                    399    Yes */
/*        'EMB'                           3    Yes */
/*        'Solar System Barycenter'       0    Yes */
/*        'SolarSystemBarycenter'         -    No */
/*        'SSB'                           0    Yes */
/*        'Voyager 2'                   -32    Yes */
/*        'U.S.S. Enterprise'             -    No */
/*        ' '                             -    No */
/*        'Halley's Comet'                -    No */

/*     and, given these codes, M2BODC2N will return the following names: */

/*        Code        Name                        Found? */
/*        -------     -------------------         ------ */
/*        399         'EARTH'                     Yes */
/*          0         'SOLAR SYSTEM BARYCENTER'   Yes */
/*          3         'EARTH BARYCENTER'          Yes */
/*        -77         'GALILEO ORBITER'           Yes */
/*         11          -                          No */
/*         -1          -                          No */

/* $ Restrictions */

/*     None. */

/* $ Literature_References */

/*     None. */

/* $ Author_and_Institution */

/*     J.E. McLean    (JPL) */
/*     B.V. Semenov   (JPL) */
/*     M.J. Spencer   (JPL) */
/*     W.L. Taber     (JPL) */

/* $ Version */

/* -    SPICELIB Version 1.1.0, 29-FEB-1996 (WLT) */

/*        Added the id-code for Comet Hyakutake, Comet Hale-Bopp. */

/* -    SPICELIB Version 1.0.0, 25-SEP-1995 (BVS) */

/*        Renamed to M2BODN2C (BVS) */

/* -    Beta Version 1.0.0, 29-APR-1994 (MJS) */

/*        SPICELIB symbol tables are no longer used. Instead, two order */
/*        vectors are used to index the NAMES and CODES arrays. */

/* -    MOSPICE  Version 2.0.1, 10-MAR-1992 (WLT) */

/*        Comment section for permuted index source lines was added */
/*        following the header. */

/* -    MOSPICE  Version 2.0.0, 15-JUL-1991 (WLT) */

/*       The body id's for the Uranian satellites discovered by Voyager */
/*       were modified to conform to those established by the IAU */
/*       nomenclature committee.  In addition the id's for Gaspra and */
/*       Ida were added. */

/* -    MOSPICE  Version 1.0.0,  7-MAR-1991 (WLT) */

/*       Items that were previously considered errors were downgraded */
/*       to simply be exceptions.  Any NAME is a legitimate input now. */
/*       If its not in the table, the FOUND flag is just set to .FALSE. */

/* -    GLLSPICE Version 1.0.0, 28-JUN-1990 (JEM) */

/* -& */
/* $ Index_Entries */

/*     body name to code */

/* -& */

/*     Standard SPICELIB error handling. */

    if (return_()) {
	return 0;
    } else {
	chkin_("M2BODN2C", (ftnlen)8);
    }
    *found = FALSE_;
    bodn2c_(name__, code, found, name_len);
    if (*found) {
	chkout_("M2BODN2C", (ftnlen)8);
	return 0;
    }

/*     Get the order vectors for the names and codes. */

    if (init) {
	init = FALSE_;
	m2bodini_(names, &nnam, codes, &ncod, ordnam, ordcod, (ftnlen)32);
    }

/*     Return the CODE associated with the name. */

    ljust_(name__, tmpnam, name_len, (ftnlen)32);
    ucase_(tmpnam, tmpnam, (ftnlen)32, (ftnlen)32);
    cmprss_(" ", &c__1, tmpnam, tmpnam, (ftnlen)1, (ftnlen)32, (ftnlen)32);
    i__ = bschoc_(tmpnam, &nnam, names, ordnam, (ftnlen)32, (ftnlen)32);
    if (i__ != 0) {
	*code = codes[(i__1 = i__ - 1) < 415 && 0 <= i__1 ? i__1 : s_rnge(
		"codes", i__1, "m2bodtrn_", (ftnlen)1224)];
	*found = TRUE_;
    } else {
	i__1 = nnam;
	for (i__ = 1; i__ <= i__1; ++i__) {
	    if (eqstr_(tmpnam, names + (((i__2 = i__ - 1) < 415 && 0 <= i__2 ?
		     i__2 : s_rnge("names", i__2, "m2bodtrn_", (ftnlen)1231)) 
		    << 5), (ftnlen)32, (ftnlen)32)) {
		*code = codes[(i__2 = i__ - 1) < 415 && 0 <= i__2 ? i__2 : 
			s_rnge("codes", i__2, "m2bodtrn_", (ftnlen)1232)];
		*found = TRUE_;
		chkout_("M2BODN2C", (ftnlen)8);
		return 0;
	    }
	}
    }
    chkout_("M2BODN2C", (ftnlen)8);
    return 0;
/* $Procedure M2BODC2N ( Body code to name ) */

L_m2bodc2n:
/* $ Abstract */

/*     SPICE Private routine intended solely for the support of SPICE */
/*     routines.  Users should not call this routine directly due */
/*     to the volatile nature of this routine. */

/*     Translate the integer code of a body into a common name for */
/*     that body. */

/* $ Copyright */

/*     Copyright (1995), California Institute of Technology. */
/*     U.S. Government sponsorship acknowledged. */

/* $ Required_Reading */

/*     NAIF_IDS */

/* $ Keywords */

/*     BODY */
/*     CONVERSION */

/* $ Declarations */

/*     INTEGER               CODE */
/*     CHARACTER*(*)         NAME */
/*     LOGICAL               FOUND */

/* $ Brief_I/O */

/*     Variable  I/O  Description */
/*     --------  ---  -------------------------------------------------- */
/*     CODE       I   Integer code to be translated. */
/*     NAME       O   Common name for the body identified by CODE. */
/*     FOUND      O   True if translated, otherwise false. */
/*     MAXL       P   Max name length. */

/* $ Detailed_Input */

/*     CODE        is an integer code for a body --- */
/*                 a planet, satellite, barycenter, spacecraft, */
/*                 asteroid, comet, or other ephemeris object. */

/* $ Detailed_Output */

/*     NAME        is the common name of the body identified by CODE. */
/*                 If CODE has more than one translation, then the */
/*                 most recently defined NAME corresponding to CODE */
/*                 is returned.  NAME will have the exact format (case */
/*                 and blanks) as when the name/code pair was defined. */

/*     FOUND       is true if CODE has a translation.  Otherwise, FOUND */
/*                 is false. */

/* $ Parameters */

/*     MAXL        is the maximum length of a name.  MAXL should only */
/*                 be increased if names longer than the current value */
/*                 need to be supported.  If MAXL is decreased the */
/*                 default names may be truncated. */

/* $ Exceptions */

/*     NONE */

/* $ Files */

/*     None. */

/* $ Particulars */

/*     M2BODC2N is one of three related entry points, */

/*        M2BODN2C      Body name to code */

/*        M2BODC2N      Body code to name */

/*        M2BODDEF      Body name/code definition */

/*     M2BODN2C and M2BODC2N perform translations between body names */
/*     and their corresponding integer codes which are used */
/*     in SPK and PCK files and routines.  A set of name/code */
/*     pairs are automatically defined during the first call to */
/*     one of these entry points.  Additional name/code pairs may */
/*     be defined via M2BODDEF. */

/* $ Examples */

/*     1.  Suppose you ran the utility program SPACIT to summarize */
/*     an SPK ephemeris file and the following data was output */
/*     to the terminal screen. */

/*         ---------------------------------------------------------- */
/*         Segment identifier: JPL archive 21354 */
/*         Body        : -77                         Center     : 399 */
/*         From        : 1990 DEC 08 18:00:00.000 */
/*         To          : 1990 DEC 10 21:10:00.000 */
/*         Reference   : DE-200                      SPK Type    :1 */
/*         ---------------------------------------------------------- */

/*     You could write a program to translate the body codes */
/*     shown in the SPACIT output: */

/*        CALL M2BODC2N ( -77, BODY,   FOUND ) */
/*        CALL M2BODC2N ( 399, CENTER, FOUND ) */

/*        IF ( FOUND ) THEN */

/*           WRITE ( *,* ) 'BODY:    -77 = ', BODY */
/*           WRITE ( *,* ) 'CENTER:  399 = ', CENTER */

/*        END IF */

/*     You could also read the body and center codes directly from */
/*     the SPK files, using the appropriate DAF routines, and then */
/*     translate them, as above. */

/*     2.  In this example, we assume that neither M2BODDEF has not been */
/*         called.  Thus, only the set of default name/code pairs has */
/*         been defined. */

/*     Given these names, M2BODN2C will return the following codes: */

/*        Name                         Code    Found? */
/*        ------------------------   ------    ------ */
/*        'EARTH'                       399    Yes */
/*        '  Earth '                    399    Yes */
/*        'EMB'                           3    Yes */
/*        'Solar System Barycenter'       0    Yes */
/*        'SolarSystemBarycenter'         -    No */
/*        'SSB'                           0    Yes */
/*        'Voyager 2'                   -32    Yes */
/*        'U.S.S. Enterprise'             -    No */
/*        ' '                             -    No */
/*        'Halley's Comet'                -    No */

/*     and, given these codes, M2BODC2N will return the following names: */

/*        Code        Name                        Found? */
/*        -------     -------------------         ------ */
/*        399         'EARTH'                     Yes */
/*          0         'SOLAR SYSTEM BARYCENTER'   Yes */
/*          3         'EARTH BARYCENTER'          Yes */
/*        -77         'GALILEO ORBITER'           Yes */
/*         11          -                          No */
/*         -1          -                          No */

/* $ Restrictions */

/*     None. */

/* $ Literature_References */

/*     None. */

/* $ Author_and_Institution */

/*     J.E. McLean    (JPL) */
/*     B.V. Semenov   (JPL) */
/*     M.J. Spencer   (JPL) */
/*     W.L. Taber     (JPL) */

/* $ Version */

/* -    SPICELIB Version 1.1.0, 29-FEB-1996 (WLT) */

/*        Added the id-code for Comet Hyakutake, Comet Hale-Bopp. */

/* -    SPICELIB Version 1.0.0, 25-SEP-1995 (BVS) */

/*        Renamed to M2BODC2N (BVS) */

/* -    Beta Version 1.0.0, 29-APR-1994 (MJS) */

/*        SPICELIB symbol tables are no longer used. Instead, two order */
/*        vectors are used to index the NAMES and CODES arrays. */

/* -    MOSPICE  Version 2.0.1, 10-MAR-1992 (WLT) */

/*        Comment section for permuted index source lines was added */
/*        following the header. */

/* -    MOSPICE  Version 2.0.0, 15-JUL-1991 (WLT) */

/*       The body id's for the Uranian satellites discovered by Voyager */
/*       were modified to conform to those established by the IAU */
/*       nomenclature committee.  In addition the id's for Gaspra and */
/*       Ida were added. */

/* -    MOSPICE  Version 1.0.0,  7-MAR-1991 (WLT) */

/*       Checks to see that the input integer code can be represented */
/*       as a character string were removed along with the exceptions */
/*       associated with these checks.  It is now the responsibility */
/*       of a maintenance programmer to make sure that MAXL is large */
/*       enough to allow any integer to be converted to a string */
/*       representation. */

/* -    GLLSPICE Version 1.0.0, 28-JUN-1990 (JEM) */

/* -& */
/* $ Index_Entries */

/*     body code to name */

/* -& */

/*     Standard SPICELIB error handling. */

    if (return_()) {
	return 0;
    } else {
	chkin_("M2BODC2N", (ftnlen)8);
    }
    *found = FALSE_;

/*     Get the order vectors for the names and codes. */

    if (init) {
	init = FALSE_;
	m2bodini_(names, &nnam, codes, &ncod, ordnam, ordcod, (ftnlen)32);
    }

/*     Return the name associated with the CODE. */

    i__ = bschoi_(code, &ncod, codes, ordcod);
    if (i__ != 0) {
	s_copy(name__, names + (((i__1 = i__ - 1) < 415 && 0 <= i__1 ? i__1 : 
		s_rnge("names", i__1, "m2bodtrn_", (ftnlen)1491)) << 5), 
		name_len, (ftnlen)32);
	*found = TRUE_;
    }
    chkout_("M2BODC2N", (ftnlen)8);
    return 0;
/* $Procedure M2BODDEF ( Body name/code definition ) */

L_m2boddef:
/* $ Abstract */

/*     SPICE Private routine intended solely for the support of SPICE */
/*     routines.  Users should not call this routine directly due */
/*     to the volatile nature of this routine. */

/*     Define a body name/code pair for later translation by */
/*     M2BODN2C or M2BODC2N. */

/* $ Copyright */

/*     Copyright (1995), California Institute of Technology. */
/*     U.S. Government sponsorship acknowledged. */

/* $ Required_Reading */

/*     NAIF_IDS */

/* $ Keywords */

/*     BODY */
/*     CONVERSION */

/* $ Declarations */

/*     CHARACTER*(*)         NAME */
/*     INTEGER               CODE */

/* $ Brief_I/O */

/*     Variable  I/O  Description */
/*     --------  ---  -------------------------------------------------- */
/*     NAME       I   Common name of some body. */
/*     CODE       I   Integer code for that body. */
/*     MAXL       P   Max name length and max number of digits in code. */
/*     MAXP       P   Maximum number of name/code pair definitions. */

/* $ Detailed_Input */

/*     NAME        is an arbitrary name of a body which could be */
/*                 a planet, satellite, barycenter, spacecraft, */
/*                 asteroid, comet, or other ephemeris object. */

/*                 NAME must uniquely identify a body, so NAME must */
/*                 be distinct from all other names that have been */
/*                 defined.  (The list of default definitions are */
/*                 in DATA statements in M2BODTRN for easy reference.) */

/*                 Case and leading and trailing blanks in a name */
/*                 are not significant.  However when a name is made */
/*                 up of more than one word, they must be separated by */
/*                 at least one blank.  That is, all of the following */
/*                 strings are equivalent names: */

/*                         'JUPITER BARYCENTER' */
/*                         'Jupiter Barycenter' */
/*                         'JUPITER BARYCENTER   ' */
/*                         'JUPITER    BARYCENTER' */
/*                         '   JUPITER BARYCENTER' */

/*                 However, 'JUPITERBARYCENTER' is distinct from */
/*                 the names above. */

/*                 When ignoring trailing blanks, NAME must have fewer */
/*                 than MAXL characters. */

/*     CODE        is the integer code for the named body. */

/*                 CODE may already have a name as defined by a */
/*                 previous call to M2BODDEF or as part of the set of */
/*                 default definitions.  That previous definition will */
/*                 remain, and a translation of that name will still */
/*                 give the same CODE.  However, future translations */
/*                 of CODE will give the new NAME instead of the */
/*                 previous one.  This feature is useful for assigning */
/*                 a more familiar or abbreviated name to a body. */
/*                 For example, in addition to the default name for */
/*                 body 5, 'JUPITER BARYCENTER', you could define the */
/*                 abbreviation 'JB' to mean 5. */

/*                 CODE must have at most MAXL digits, where the */
/*                 minus sign is counted as a digit if CODE is negative. */

/* $ Detailed_Output */

/*     None. */

/* $ Parameters */

/*     MAXL        is the maximum length of a name.  MAXL should only */
/*                 be increased if names longer than the current value */
/*                 need to be supported.  If MAXL is decreased the */
/*                 default names may be truncated. */

/*     MAXP        is the maximum number of name/code pairs that can */
/*                 be defined via M2BODDEF.  It is the limit */
/*                 on the number of definitions over and above the */
/*                 number of default definitions.  The user may alter */
/*                 the the value of MAXP, however, it must remain a */
/*                 positive integer. */

/* $ Exceptions */

/*     1) If NAME has already been associated with a different CODE, */
/*        the error SPICE(NAMENOTUNIQUE) is signalled. */

/*     2) If the maximum number of definitions is exceeded, a the */
/*        error SPICE(TOOMANYPAIRS) is signalled. */

/* $ Files */

/*     None. */

/* $ Particulars */

/*     M2BODDEF is one of three related entry points, */

/*        M2BODN2C      Body name to code */

/*        M2BODC2N      Body code to name */

/*        M2BODDEF      Body name/code definition */

/*     M2BODN2C and M2BODC2N perform translations between body names */
/*     and their corresponding integer codes which are used */
/*     in SPK and PCK files and routines.  A set of name/code */
/*     pairs are automatically defined during the first call to */
/*     one of these entry points.  Additional name/code pairs may */
/*     be defined via M2BODDEF for two purposes: */

/*        1.  to associate another, perhaps more familiar or */
/*            abbreviated, name with a particular body integer */
/*            code that has already been defined, or */

/*        2.  to define a new body integer code and name, */

/*     Each body has a unique integer code, but may have several */
/*     names.  Thus you may associate more than one name with */
/*     a particular integer code.  However, associating more */
/*     than one integer code with a particular name creates ambiguity. */
/*     Therefore, once a name has been defined, it may not be redefined */
/*     with a different integer code. */

/*     For example, Europa is the name of the second satellite of */
/*     Jupiter, and has the NAIF integer code 502.  Thus (EUROPA, 502) */
/*     is one of the default definitions.  Europa is also the name */
/*     of an asteroid.  Suppose you were able to associate the asteroid */
/*     integer code with the name EUROPA.  Then when you call M2BODN2C to */
/*     translate the name EUROPA, which code should be returned?  That */
/*     of the asteroid or 502? */

/*     M2BODDEF prevent this ambiguity by signalling an error */
/*     if the specified name has already been defined with a */
/*     different code.  In the case of EUROPA, you may want to use the */
/*     name ASTEROID EUROPA.  The set of default definitions are listed */
/*     in DATA statements in the umbrella routine M2BODTRN for easy */
/*     reference. */

/* $ Examples */

/*     You may associate a new name with a particular code that */
/*     has already been defined: */

/*            CALL M2BODDEF ( 'JB', 5 ) */

/*     You may also define the name and integer code for a new body: */

/*            CALL M2BODDEF ( 'Asteroid Frank', 20103456 ) */

/*     After these calls to M2BODDEF, M2BODN2C would return the following */
/*     translations: */

/*        Name                         Code    Found? */
/*        ------------------------   ------    ------ */
/*        'JB'                            5    Yes */
/*        'Jupiter Barycenter'            5    Yes */
/*        'ASTEROID FRANK'         20103456    Yes */
/*        'ASTEROIDFRANK'                 -    No */
/*        'Frank'                         -    No */

/*     and M2BODC2N will return these translations: */

/*        Code        Name                     Found? */
/*        -------     -------------------      ------ */
/*               5    'JB'                     Yes */
/*        20103456    'Asteroid Frank'         Yes */

/* $ Restrictions */

/*     None. */

/* $ Literature_References */

/*     None. */

/* $ Author_and_Institution */

/*     J.E. McLean    (JPL) */
/*     B.V. Semenov   (JPL) */
/*     W.L. Taber     (JPL) */

/* $ Version */

/* -    SPICELIB Version 1.1.0, 29-FEB-1996 (WLT) */

/*        Added the id-code for Comet Hyakutake, Comet Hale-Bopp. */

/* -    SPICELIB Version 1.0.0, 25-SEP-1995 (BVS) */

/*        Renamed to M2BODDEF (BVS). More careful checking for overflow */
/*        of the recognized names is now performed. */

/* -    Beta Version 1.0.0, 29-APR-1994 (MJS) */

/*        SPICELIB symbol tables are no longer used. Instead, two order */
/*        vectors are used to index the NAMES and CODES arrays. */

/* -    MOSPICE  Version 2.0.1, 10-MAR-1992 (WLT) */

/*        Comment section for permuted index source lines was added */
/*        following the header. */

/* -    MOSPICE  Version 2.0.0, 15-JUL-1991 (WLT) */

/*       The body id's for the Uranian satellites discovered by Voyager */
/*       were modified to conform to those established by the IAU */
/*       nomenclature committee.  In addition the id's for Gaspra and */
/*       Ida were added. */

/* -    MOSPICE  Version 1.0.0,  7-MAR-1991 (WLT) */

/*       Checks to see that an integer code can be represented */
/*       as a character string were removed along with the exceptions */
/*       associated with these checks.  It is now the responsibility */
/*       of a maintenance programmer to make sure that MAXL is large */
/*       enough to allow any integer to be converted to a string */
/*       representation. */

/* -    GLLSPICE Version 1.0.0, 28-JUN-1990 (JEM) */

/* -& */
/* $ Index_Entries */

/*     body name/code definition */

/* -& */

/*     Standard SPICELIB error handling. */

    if (return_()) {
	return 0;
    } else {
	chkin_("M2BODDEF", (ftnlen)8);
    }

/*     Initialize the order vectors if we haven't already. */

    if (init) {
	init = FALSE_;
	m2bodini_(names, &nnam, codes, &ncod, ordnam, ordcod, (ftnlen)32);
    }

/*     Make sure the name has not already been used. */

    ljust_(name__, tmpnam, name_len, (ftnlen)32);
    ucase_(tmpnam, tmpnam, (ftnlen)32, (ftnlen)32);
    cmprss_(" ", &c__1, tmpnam, tmpnam, (ftnlen)1, (ftnlen)32, (ftnlen)32);
    i__ = bschoc_(tmpnam, &nnam, names, ordnam, (ftnlen)32, (ftnlen)32);
    if (i__ != 0) {
	setmsg_("The name, '#', has already been used for body having id-cod"
		"e #.", (ftnlen)63);
	errch_("#", name__, (ftnlen)1, name_len);
	errint_("#", &codes[(i__1 = i__ - 1) < 415 && 0 <= i__1 ? i__1 : 
		s_rnge("codes", i__1, "m2bodtrn_", (ftnlen)1786)], (ftnlen)1);
	sigerr_("SPICE(NAMENOTUNIQUE)", (ftnlen)20);
	chkout_("M2BODDEF", (ftnlen)8);
	return 0;
    }

/*     Do we have room for another name/code pair? */

    if (nnam < 415) {
	++nnam;
    } else {
	setmsg_("There is no room available for adding '#'  to the list of n"
		"ame/code pairs. The number of names that can be supported is"
		" #.  This number has been reached. ", (ftnlen)154);
	errch_("#", name__, (ftnlen)1, name_len);
	errint_("#", &nnam, (ftnlen)1);
	sigerr_("SPICE(TOOMANYPAIRS)", (ftnlen)19);
	chkout_("M2BODDEF", (ftnlen)8);
	return 0;
    }

/*     Add NAME and CODE and reorder the vectors. */

    s_copy(names + (((i__1 = nnam - 1) < 415 && 0 <= i__1 ? i__1 : s_rnge(
	    "names", i__1, "m2bodtrn_", (ftnlen)1820)) << 5), tmpnam, (ftnlen)
	    32, (ftnlen)32);
    codes[(i__1 = nnam - 1) < 415 && 0 <= i__1 ? i__1 : s_rnge("codes", i__1, 
	    "m2bodtrn_", (ftnlen)1821)] = *code;
    m2bodini_(names, &nnam, codes, &ncod, ordnam, ordcod, (ftnlen)32);
    chkout_("M2BODDEF", (ftnlen)8);
    return 0;
} /* m2bodtrn_ */

/* Subroutine */ int m2bodtrn_(char *name__, integer *code, logical *found, 
	ftnlen name_len)
{
    return m2bodtrn_0_(0, name__, code, found, name_len);
    }

/* Subroutine */ int m2bodn2c_(char *name__, integer *code, logical *found, 
	ftnlen name_len)
{
    return m2bodtrn_0_(1, name__, code, found, name_len);
    }

/* Subroutine */ int m2bodc2n_(integer *code, char *name__, logical *found, 
	ftnlen name_len)
{
    return m2bodtrn_0_(2, name__, code, found, name_len);
    }

/* Subroutine */ int m2boddef_(char *name__, integer *code, ftnlen name_len)
{
    return m2bodtrn_0_(3, name__, code, (logical *)0, name_len);
    }