示例#1
0
/* $Procedure      M2CAL ( Parse a UTC time string ) */
/* Subroutine */ int m2cal_(char *utcstr, char *mssg, integer *tcode, ftnlen 
	utcstr_len, ftnlen mssg_len)
{
    /* Builtin functions */
    /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);
    integer s_cmp(char *, char *, ftnlen, ftnlen);

    /* Local variables */
    doublereal tvec[8];
    logical mods;
    char type__[8];
    integer ntvec;
    extern /* Subroutine */ int tcheck_(doublereal *, char *, logical *, char 
	    *, logical *, char *, ftnlen, ftnlen, ftnlen);
    logical succes, yabbrv;
    char modify[16*5], pictur[80];
    extern logical return_(void);
    extern /* Subroutine */ int tpartv_(char *, doublereal *, integer *, char 
	    *, char *, logical *, logical *, logical *, char *, char *, 
	    ftnlen, ftnlen, ftnlen, ftnlen, ftnlen);

/* $ Abstract */

/*      See is a string is a legitimate time string. */

/* $ Disclaimer */

/*     THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */
/*     CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */
/*     GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */
/*     ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */
/*     PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */
/*     TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */
/*     WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */
/*     PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */
/*     SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */
/*     SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */

/*     IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */
/*     BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */
/*     LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */
/*     INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */
/*     REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */
/*     REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */

/*     RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */
/*     THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */
/*     CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */
/*     ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */

/* $ Keywords */

/*      PARSING, TIME */

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

/*      VARIABLE  I/O  DESCRIPTION */
/*      --------  ---  -------------------------------------------------- */
/*      UTCSTR     I   Input time string, UTC. */
/*      MSSG       O   A diagnostic indicating why parsing failed. */
/*      TCODE      O   A short  parsing error flag. */

/* $ Detailed_Input */

/*      UTCSTR      is an input time string, containing a Calendar or */
/*                  Julian Date, UTC. */

/*                  Calendar dates consist of up to seven tokens: */
/*                  one each for System, Year, Month, Day, Hours, */
/*                  Minutes, and Seconds. */

/*                  Valid token delimiters are: */

/*                        ' '           space */
/*                        ','           comma */
/*                        '/'           slash */
/*                        '-'           dash */
/*                        ':'           colon */

/*                  The month may be an integer or a name. (At least */
/*                  three characters are required in a name.) The last */
/*                  three tokens always represent Hours, Minutes, and */
/*                  Seconds respectively. The first three tokens always */
/*                  represent Year, Month, and Day, with the order */
/*                  determined according to the following rules: */

/*                     1. If a month name is present, then the year is */
/*                        taken to be an integer greater than 1000 and */
/*                        less than 3000.  The day of the month is taken */
/*                        to be the non-negative integer less than 32. */

/*                     2. If no month name is present, the token greater */
/*                        than 1000 and less than 3000 is taken to be */
/*                        the year this must be the first token or the */
/*                        third.  In either case the other two tokens */
/*                        in order are then taken to be the month and */
/*                        day of month. */

/*                  Missing tokens are assigned the following defaults: */

/*                      - Month                    January */
/*                      - Day                      1 */
/*                      - Hours                    0 */
/*                      - Minutes                  0 */
/*                      - Seconds                  0.0000000 */

/*                  Note that Day of Year may be substituted for Month */
/*                  and Day in either of the following ways: */

/*                     1. By setting the month to January and the day to */
/*                        Day of Year, e.g., */

/*                           '1986 JAN 247 12:00:01.184' */

/*                     2. By eliminating the month token altogether. */
/*                        (It defaults to January anyway.) The most */
/*                        popular form for DOY entry is: */

/*                           '1986//247 12:00:01.184' */

/*                  Julian Dates consist of two tokens. */
/*                  The first contains the letters 'JD', in any */
/*                  combinations of upper- or lower-case. The */
/*                  second token is a Julian Date. For convenience, */
/*                  the two tokens may be concatenated, as shown */
/*                  in the examples below. Valid token delimiters */
/*                  are the same as for Calendar format. */

/*                  If the token 'JD' is entered by itself, the */
/*                  input string is rejected as ambiguous. */

/*                  The length of UTC should not exceed 80 characters. */

/* $ Detailed_Output */

/*      MSSG        is a descriptive message indicating what went wrong */
/*                  if the string could not be parsed. It is blank when */
/*                  the string parses successfully as a time. */

/*      TCODE       is a short string that indicates why the date did not */
/*                  parse. */
/* $ Input_Files */

/*      None. */

/* $ Output_Files */

/*      None. */

/* $ Common_Variables */

/*      None. */

/* $ Detailed_Description */

/*      The input string is parsed for six tokens, delimited by any */
/*      of the valid delimiters (space, comma, slash, hyphen, colon). */

/*      If the first token is (or begins with) 'JD', the input is */
/*      taken to be a Julian Date. Extra tokens are ignored. */

/*      Otherwise, the last three tokens are assigned to hours, */
/*      minutes, and seconds respectively. The first three are */
/*      assigned to year, month, and day, according to magnitude and */
/*      the presence (or lack) of a month name, according to the rules */
/*      described under Detailed_Inputs above. The Muller-Wimberly */
/*      formula is used to compute the number of days past 2000 JAN 1, */
/*      which is then converted to UTC seconds past J2000. */

/* $ Examples */

/*      The following are examples of valid inputs to M2CAL: */

/*         '29 February 1975 3:00'       (  1 MAR 1975 03:00:00       ) */
/*         'JD 2451545.'                 (  1 JAN 2000 12:00:00       ) */
/*         'JD-2451545.'                 (  1 JAN 2000 12:00:00       ) */
/*         'jd 2451545.'                 (  1 JAN 2000 12:00:00       ) */
/*         'JD2451545.'                  (  1 JAN 2000 12:00:00       ) */

/*      The following examples would be rejected as ambiguous. */

/*          '32 jan 32' */
/*          '85 86 january' */
/*          '86 3  january' */
/*          'January 80 81' */
/*          'JD,,,2451545' */

/* $ Restrictions */

/*      None. */

/* $ Required_Reading */

/*      TIME */

/* $ Literature_References */

/*      None. */

/* $ Author_and_Institution */

/*      W. M. Owen, Jr. (JPL) */
/*      I. M. Underwood (JPL) */
/*      W. L. Taber     (JPL) */

/* $ Version */

/* -     META/2 Version 3.0.0, 3-SEP-1998 (WLT) */

/*         Replaced everything with foundation Time routine calls. */

/* -     META/2 Configured Version 2.0.0, 9-MAY-1994 (WLT) */

/*         This is the configured version of the Command Loop */
/*         software as of May 9, 1994 */


/* -     META/2 Configured Version 1.0.0, 3-MAY-1994 (WLT) */

/*         This is the configured version of META/2 */
/*         software as of May 3, 1994 */


/*      Version 1, 22-APR-1987 */

/* -& */

/*     NAIFLIB functions */

    if (return_()) {
	return 0;
    }
    s_copy(mssg, " ", mssg_len, (ftnlen)1);
    *tcode = 0;
    tpartv_(utcstr, tvec, &ntvec, type__, modify, &mods, &yabbrv, &succes, 
	    pictur, mssg, utcstr_len, (ftnlen)8, (ftnlen)16, (ftnlen)80, 
	    mssg_len);
    if (! succes) {
	*tcode = 1;
    } else if (s_cmp(type__, "JD", (ftnlen)8, (ftnlen)2) == 0) {

/*        Don't do anything. */

    } else {
	tcheck_(tvec, type__, &mods, modify, &succes, mssg, (ftnlen)8, (
		ftnlen)16, mssg_len);
	if (! succes) {
	    *tcode = 2;
	}
    }
    return 0;
} /* m2cal_ */
示例#2
0
文件: tpictr.c 项目: Dbelsa/coft
/* $Procedure      TPICTR ( Create a Time Format Picture ) */
/* Subroutine */ int tpictr_(char *sample, char *pictur, logical *ok, char *
	error, ftnlen sample_len, ftnlen pictur_len, ftnlen error_len)
{
    /* Builtin functions */
    /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);
    integer s_cmp(char *, char *, ftnlen, ftnlen);

    /* Local variables */
    doublereal tvec[10];
    logical mods;
    char type__[5];
    integer ntvec;
    logical succes, yabbrv;
    char modify[8*5];
    extern /* Subroutine */ int tpartv_(char *, doublereal *, integer *, char 
	    *, char *, logical *, logical *, logical *, char *, char *, 
	    ftnlen, ftnlen, ftnlen, ftnlen, ftnlen);

/* $ Abstract */

/*     Given a sample time string, create a time format picture */
/*     suitable for use by the routine TIMOUT. */

/* $ Disclaimer */

/*     THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */
/*     CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */
/*     GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */
/*     ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */
/*     PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */
/*     TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */
/*     WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */
/*     PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */
/*     SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */
/*     SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */

/*     IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */
/*     BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */
/*     LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */
/*     INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */
/*     REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */
/*     REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */

/*     RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */
/*     THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */
/*     CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */
/*     ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */

/* $ Required_Reading */

/*      None. */

/* $ Keywords */

/*      TIME */

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

/*     VARIABLE  I/O  DESCRIPTION */
/*     --------  ---  -------------------------------------------------- */
/*     SAMPLE     I   is a sample date time string */
/*     PICTUR     O   is a format picture that describes SAMPLE */
/*     OK         O   indicates success or failure to parse SAMPLE */
/*     ERROR      O   a diagnostic returned if SAMPLE cannot be parsed */

/* $ Detailed_Input */

/*     SAMPLE     is a representative time string that to use */
/*                as a model to format time strings. */

/* $ Detailed_Output */

/*     PICTUR     is a format picture suitable for use with the SPICE */
/*                routine TIMOUT.  This picture when used to format */
/*                the appropriate  epoch via TIMOUT will yield the same */
/*                time components in the same order as the components */
/*                in SAMPLE. */

/*                Picture should be declared to be at least 80 characters */
/*                in length.  If Picture is not sufficiently large */
/*                to contain the format picture, the picture will */
/*                be truncated on the right. */

/*     OK         is a logical flag.  If all of the components of SAMPLE */
/*                are recognizable, OK will be returned with the value */
/*                TRUE.  If some part of PICTUR cannot be parsed, */
/*                OK will be returned with the value FALSE. */

/*     ERROR      is a diagnostic message  that indicates what part of */
/*                SAMPLE was not recognizable.  If SAMPLE can be */
/*                successfully parsed, OK will be TRUE and ERROR will */
/*                be returned as a blank string.  If ERROR does not */
/*                have sufficient room (up to 400 characters) to */
/*                contain the full message, the message will be truncated */
/*                on the right. */

/* $ Parameters */

/*     None. */

/* $ Files */

/*     None. */

/* $ Exceptions */

/*     Error free. */

/*     1) All problems with the inputs are diagnosed via OK and ERROR. */

/*     2) If a format picture can not be created from the sample */
/*        time string, PICTUR is returned as a blank string. */

/* $ Particulars */

/*     Although the routine TIMOUT provides SPICE users with a great */
/*     deal of flexibility in formatting time strings, users must */
/*     master the means by which a time picture is constructed */
/*     suitable for use by TIMOUT. */

/*     This routine allows SPICE users to supply a sample time string */
/*     from which a corresponding time format picture can be created, */
/*     freeing users from the task of mastering the intricacies of */
/*     the routine TIMOUT. */

/*     Note that TIMOUT can produce many time strings whose patterns */
/*     can not be discerned by this routine.  When such outputs are */
/*     called for, the user must consult TIMOUT and construct the */
/*     appropriate format picture "by hand".  However, these exceptional */
/*     formats are not widely used and are not generally recognizable */
/*     to an uninitiated reader. */

/* $ Examples */

/*     Suppose you need to print epochs corresponding to some */
/*     events and you wish the epochs to have the same arrangement */
/*     of components as in the string '10:23 P.M. PDT January 3, 1993' */

/*     The following subroutine call will construct the appropriate */
/*     format picture for use with TIMOUT. */

/*     CALL TPICTR ( '10:23 P.M. PDT January 3, 1993', PICTUR, OK, ERROR) */

/*     The resulting picture is: */

/*        'AP:MN AMPM PDT Month DD, YYYY ::UTC-7' */

/*     This picture can be used with TIMOUT to format a sequence */
/*     of epochs, ET(1),...,ET(N) (given as ephemeris seconds past J2000) */
/*     as shown in the loop below: */

/*        DO I = 1, N */
/*           CALL TIMOUT ( ET(I), PICTUR, STRING ) */
/*           WRITE (*,*) 'Epoch: ', I, ' --- ', STRING */
/*        END DO */

/* $ Restrictions */

/*     None. */

/* $ Author_and_Institution */

/*     W.L. Taber      (JPL) */

/* $ Literature_References */

/*     None. */

/* $ Version */

/* -    SPICELIB Version 1.0.1, 16-MAR-1999 (WLT) */

/*        Corrected a minor spelling error in the header comments. */

/* -    SPICELIB Version 1.0.0, 10-AUG-1996 (WLT) */


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

/*     Use a sample time string to produce a time format picture */

/* -& */

/*     This routine is really just a front for one aspect of */
/*     the routine TPARTV. */

    s_copy(error, " ", error_len, (ftnlen)1);
    tpartv_(sample, tvec, &ntvec, type__, modify, &mods, &yabbrv, &succes, 
	    pictur, error, sample_len, (ftnlen)5, (ftnlen)8, pictur_len, 
	    error_len);
    if (s_cmp(pictur, " ", pictur_len, (ftnlen)1) == 0) {
	*ok = FALSE_;
    } else {
	*ok = TRUE_;
	s_copy(error, " ", error_len, (ftnlen)1);
    }
    return 0;
} /* tpictr_ */