DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T t

⟦727836126⟧ TextFile

    Length: 2259 (0x8d3)
    Types: TextFile
    Names: »time.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« 
        └─⟦de7628f85⟧ 
            └─⟦this⟧ »isode-6.0/dsap/common/time.c« 

TextFile

/* time.c - */

#ifndef	lint
static char *rcsid = "$Header: /f/osi/dsap/common/RCS/time.c,v 7.0 89/11/23 21:44:38 mrose Rel $";
#endif

/* 
 * $Header: /f/osi/dsap/common/RCS/time.c,v 7.0 89/11/23 21:44:38 mrose Rel $
 *
 *
 * $Log:	time.c,v $
 * Revision 7.0  89/11/23  21:44:38  mrose
 * Release 6.0
 * 
 */

/*
 *				  NOTICE
 *
 *    Acquisition, use, and distribution of this module and related
 *    materials are subject to the restrictions of a license agreement.
 *    Consult the Preface in the User's Manual for the full terms of
 *    this agreement.
 *
 */


/* SYNTAX

	time ::= 'yymmddhhmmssz'

	where yy   = year
	      mm   = month
	      dd   = day
	      hh   = hours
	      mm   = minutes
	      ss   = seconds
              z    = timezone

    EXAMPLE
	890602093221Z -> 09:32:21 GMT, on June 2nd 1989.

*/

#include "quipu/util.h"
#include "quipu/attr.h"
#include "psap.h"

strprint ();
sfree ();
pstrcmp();

static UTC	qstr2utct (s, len)
char   *s;
int	len;
{
    UTC	    ut;
    
    if (len > 14
	    && strncmp (s, "1989", 4) == 0
	    && (ut = str2utct (s + 2, len - 2)))
	return ut;

    return str2utct (s, len);
}

#define	str2utct	qstr2utct


static PE timeenc (x)
char *x;
{
PE ret_pe = NULLPE;

	(void) build_UNIV_UTCTime (&ret_pe,0,0,x,NULL);
	return (ret_pe);
}

static char * timedec (pe)
PE pe;
{
char * x;
	if (parse_UNIV_UTCTime (pe,0,0,&x,NULL) == NOTOK)
		return (NULLCP);
	return (x);
}

utcprint (ps,time,format)
PS ps;
char *time;
int format;
{
    UTC	    ut;

    if (format == READOUT && (ut = str2utct (time, strlen (time)))) {
	long    mtime;

	mtime = gtime (ut2tm (ut));

	ps_printf (ps, "%-24.24s", ctime (&mtime));
    }
    else
	ps_printf (ps, "%s", time);
}


static utccmp (a, b)
char   *a, *b;
{
    long    a_time,
	    mdiff;
    UTC	    ut;

    if ((ut = str2utct (a, strlen (a))) == NULL)
	return pstrcmp (a, b);
    a_time = gtime (ut2tm (ut));

    if ((ut = str2utct (b, strlen (b))) == NULL)
	return pstrcmp (a, b);

    return ((mdiff = a_time - gtime (ut2tm (ut))) == 0L ? 0
							: mdiff > 0L ? 1 : -1);
}


time_syntax ()
{
	(void) add_attribute_syntax ("UTCTime",
		(IFP) timeenc,	(IFP) timedec,
		(IFP) strdup,	utcprint,
		(IFP) strdup,	utccmp,
		sfree,		NULLCP,
		NULLIFP,	FALSE);
}