154359Sroberto/* 2182007Sroberto * /src/NTP/REPOSITORY/ntp4-dev/include/parse.h,v 4.12 2007/01/14 08:36:03 kardel RELEASE_20070114_A 354359Sroberto * 4182007Sroberto * parse.h,v 4.12 2007/01/14 08:36:03 kardel RELEASE_20070114_A 554359Sroberto * 6290001Sglebius * Copyright (c) 1995-2015 by Frank Kardel <kardel <AT> ntp.org> 7290001Sglebius * Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany 854359Sroberto * 9182007Sroberto * Redistribution and use in source and binary forms, with or without 10182007Sroberto * modification, are permitted provided that the following conditions 11182007Sroberto * are met: 12182007Sroberto * 1. Redistributions of source code must retain the above copyright 13182007Sroberto * notice, this list of conditions and the following disclaimer. 14182007Sroberto * 2. Redistributions in binary form must reproduce the above copyright 15182007Sroberto * notice, this list of conditions and the following disclaimer in the 16182007Sroberto * documentation and/or other materials provided with the distribution. 17182007Sroberto * 3. Neither the name of the author nor the names of its contributors 18182007Sroberto * may be used to endorse or promote products derived from this software 19182007Sroberto * without specific prior written permission. 20182007Sroberto * 21182007Sroberto * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 22182007Sroberto * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23182007Sroberto * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24182007Sroberto * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 25182007Sroberto * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26182007Sroberto * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27182007Sroberto * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28182007Sroberto * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29182007Sroberto * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30182007Sroberto * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31182007Sroberto * SUCH DAMAGE. 32182007Sroberto * 3354359Sroberto */ 3454359Sroberto 3554359Sroberto#ifndef __PARSE_H__ 3654359Sroberto#define __PARSE_H__ 3754359Sroberto#if !(defined(lint) || defined(__GNUC__)) 38182007Sroberto static char parsehrcsid[]="parse.h,v 4.12 2007/01/14 08:36:03 kardel RELEASE_20070114_A"; 3954359Sroberto#endif 4054359Sroberto 4154359Sroberto#include "ntp_types.h" 4254359Sroberto 4354359Sroberto#include "parse_conf.h" 4454359Sroberto 4554359Sroberto/* 4654359Sroberto * we use the following datastructures in two modes 4754359Sroberto * either in the NTP itself where we use NTP time stamps at some places 4854359Sroberto * or in the kernel, where only struct timeval will be used. 4954359Sroberto */ 5054359Sroberto#undef PARSEKERNEL 5154359Sroberto#if defined(KERNEL) || defined(_KERNEL) 5254359Sroberto#ifndef PARSESTREAM 5354359Sroberto#define PARSESTREAM 5454359Sroberto#endif 5554359Sroberto#endif 5654359Sroberto#if defined(PARSESTREAM) && defined(HAVE_SYS_STREAM_H) 5754359Sroberto#define PARSEKERNEL 5854359Sroberto#endif 5954359Sroberto#ifdef PARSEKERNEL 6054359Sroberto#ifndef _KERNEL 61290001Sglebiusextern caddr_t kmem_alloc (unsigned int); 62290001Sglebiusextern caddr_t kmem_free (caddr_t, unsigned int); 63290001Sglebiusextern unsigned int splx (unsigned int); 64290001Sglebiusextern unsigned int splhigh (void); 65290001Sglebiusextern unsigned int splclock (void); 6654359Sroberto#define MALLOC(_X_) (char *)kmem_alloc(_X_) 6754359Sroberto#define FREE(_X_, _Y_) kmem_free((caddr_t)_X_, _Y_) 6854359Sroberto#else 6954359Sroberto#include <sys/kmem.h> 7054359Sroberto#define MALLOC(_X_) (char *)kmem_alloc(_X_, KM_SLEEP) 7154359Sroberto#define FREE(_X_, _Y_) kmem_free((caddr_t)_X_, _Y_) 7254359Sroberto#endif 7354359Sroberto#else 7454359Sroberto#define MALLOC(_X_) malloc(_X_) 7554359Sroberto#define FREE(_X_, _Y_) free(_X_) 7654359Sroberto#endif 7754359Sroberto 7854359Sroberto#if defined(PARSESTREAM) && defined(HAVE_SYS_STREAM_H) 7954359Sroberto#include <sys/stream.h> 8054359Sroberto#include <sys/stropts.h> 8154359Sroberto#else /* STREAM */ 8254359Sroberto#include <stdio.h> 8354359Sroberto#include "ntp_syslog.h" 8454359Sroberto#ifdef DEBUG 8554359Sroberto#define DD_PARSE 5 8654359Sroberto#define DD_RAWDCF 4 8754359Sroberto#define parseprintf(LEVEL, ARGS) if (debug > LEVEL) printf ARGS 8854359Sroberto#else /* DEBUG */ 8954359Sroberto#define parseprintf(LEVEL, ARGS) 9054359Sroberto#endif /* DEBUG */ 9154359Sroberto#endif /* PARSESTREAM */ 9254359Sroberto 9354359Sroberto#if defined(timercmp) && defined(__GNUC__) 9454359Sroberto#undef timercmp 9554359Sroberto#endif 9654359Sroberto 9754359Sroberto#if !defined(timercmp) 9854359Sroberto#define timercmp(tvp, uvp, cmp) \ 9954359Sroberto ((tvp)->tv_sec cmp (uvp)->tv_sec || \ 10054359Sroberto ((tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)) 10154359Sroberto#endif 10254359Sroberto 10354359Sroberto#ifndef TIMES10 10454359Sroberto#define TIMES10(_X_) (((_X_) << 3) + ((_X_) << 1)) 10554359Sroberto#endif 10654359Sroberto 10754359Sroberto/* 108290001Sglebius * some constants useful for GPS time conversion 109290001Sglebius */ 110294905Sdelphij#define GPSORIGIN 2524953600UL /* NTP origin - GPS origin in seconds */ 111294905Sdelphij#define GPSWRAP 990 /* assume week count less than this in the previous epoch */ 112294905Sdelphij#define GPSWEEKS 1024 /* number of weeks until the GPS epch rolls over */ 113290001Sglebius 114290001Sglebius/* 11554359Sroberto * state flags 11654359Sroberto */ 11754359Sroberto#define PARSEB_POWERUP 0x00000001 /* no synchronisation */ 11854359Sroberto#define PARSEB_NOSYNC 0x00000002 /* timecode currently not confirmed */ 11954359Sroberto 12054359Sroberto/* 12154359Sroberto * time zone information 12254359Sroberto */ 12354359Sroberto#define PARSEB_ANNOUNCE 0x00000010 /* switch time zone warning (DST switch) */ 12454359Sroberto#define PARSEB_DST 0x00000020 /* DST in effect */ 12554359Sroberto#define PARSEB_UTC 0x00000040 /* UTC time */ 12654359Sroberto 12754359Sroberto/* 12854359Sroberto * leap information 12954359Sroberto */ 13054359Sroberto#define PARSEB_LEAPDEL 0x00000100 /* LEAP deletion warning */ 13154359Sroberto#define PARSEB_LEAPADD 0x00000200 /* LEAP addition warning */ 13254359Sroberto#define PARSEB_LEAPS 0x00000300 /* LEAP warnings */ 13354359Sroberto#define PARSEB_LEAPSECOND 0x00000400 /* actual leap second */ 13454359Sroberto/* 13554359Sroberto * optional status information 13654359Sroberto */ 137290001Sglebius#define PARSEB_CALLBIT 0x00001000 /* "call bit" used to signalize irregularities in the control facilities */ 13854359Sroberto#define PARSEB_POSITION 0x00002000 /* position available */ 13954359Sroberto#define PARSEB_MESSAGE 0x00004000 /* addtitional message data */ 14054359Sroberto/* 14154359Sroberto * feature information 14254359Sroberto */ 14354359Sroberto#define PARSEB_S_LEAP 0x00010000 /* supports LEAP */ 144290001Sglebius#define PARSEB_S_CALLBIT 0x00020000 /* supports callbit information */ 14554359Sroberto#define PARSEB_S_PPS 0x00040000 /* supports PPS time stamping */ 14654359Sroberto#define PARSEB_S_POSITION 0x00080000 /* supports position information (GPS) */ 14754359Sroberto 14854359Sroberto/* 14954359Sroberto * time stamp availability 15054359Sroberto */ 15154359Sroberto#define PARSEB_TIMECODE 0x10000000 /* valid time code sample */ 15254359Sroberto#define PARSEB_PPS 0x20000000 /* valid PPS sample */ 15354359Sroberto 15454359Sroberto#define PARSE_TCINFO (PARSEB_ANNOUNCE|PARSEB_POWERUP|PARSEB_NOSYNC|PARSEB_DST|\ 155290001Sglebius PARSEB_UTC|PARSEB_LEAPS|PARSEB_CALLBIT|PARSEB_S_LEAP|\ 15654359Sroberto PARSEB_S_LOCATION|PARSEB_TIMECODE|PARSEB_MESSAGE) 15754359Sroberto 15854359Sroberto#define PARSE_POWERUP(x) ((x) & PARSEB_POWERUP) 15954359Sroberto#define PARSE_NOSYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == PARSEB_NOSYNC) 16054359Sroberto#define PARSE_SYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == 0) 16154359Sroberto#define PARSE_ANNOUNCE(x) ((x) & PARSEB_ANNOUNCE) 16254359Sroberto#define PARSE_DST(x) ((x) & PARSEB_DST) 16354359Sroberto#define PARSE_UTC(x) ((x) & PARSEB_UTC) 16454359Sroberto#define PARSE_LEAPADD(x) (PARSE_SYNC(x) && (((x) & PARSEB_LEAPS) == PARSEB_LEAPADD)) 16554359Sroberto#define PARSE_LEAPDEL(x) (PARSE_SYNC(x) && (((x) & PARSEB_LEAPS) == PARSEB_LEAPDEL)) 166290001Sglebius#define PARSE_CALLBIT(x) ((x) & PARSEB_CALLBIT) 16754359Sroberto#define PARSE_LEAPSECOND(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP_SECOND)) 16854359Sroberto 16954359Sroberto#define PARSE_S_LEAP(x) ((x) & PARSEB_S_LEAP) 170290001Sglebius#define PARSE_S_CALLBIT(x) ((x) & PARSEB_S_CALLBIT) 17154359Sroberto#define PARSE_S_PPS(x) ((x) & PARSEB_S_PPS) 17254359Sroberto#define PARSE_S_POSITION(x) ((x) & PARSEB_S_POSITION) 17354359Sroberto 17454359Sroberto#define PARSE_TIMECODE(x) ((x) & PARSEB_TIMECODE) 17554359Sroberto#define PARSE_PPS(x) ((x) & PARSEB_PPS) 17654359Sroberto#define PARSE_POSITION(x) ((x) & PARSEB_POSITION) 17754359Sroberto#define PARSE_MESSAGE(x) ((x) & PARSEB_MESSAGE) 17854359Sroberto 17954359Sroberto/* 18054359Sroberto * operation flags - lower nibble contains fudge flags 18154359Sroberto */ 182182007Sroberto#define PARSE_TRUSTTIME CLK_FLAG1 /* use flag1 to indicate the time2 references mean the trust time */ 183182007Sroberto#define PARSE_CLEAR CLK_FLAG2 /* use flag2 to control pps on assert */ 184182007Sroberto#define PARSE_PPSKERNEL CLK_FLAG3 /* use flag3 to bind PPS to kernel */ 185182007Sroberto#define PARSE_LEAP_DELETE CLK_FLAG4 /* use flag4 to force leap deletion - only necessary when earth slows down */ 186182007Sroberto 18754359Sroberto#define PARSE_FIXED_FMT 0x10 /* fixed format */ 18854359Sroberto#define PARSE_PPSCLOCK 0x20 /* try to get PPS time stamp via ppsclock ioctl */ 18954359Sroberto 19054359Sroberto/* 19154359Sroberto * size of buffers 19254359Sroberto */ 19354359Sroberto#define PARSE_TCMAX 400 /* maximum addition data size */ 19454359Sroberto 195182007Srobertotypedef union 19654359Sroberto{ 19754359Sroberto struct timeval tv; /* timeval - kernel view */ 19854359Sroberto l_fp fp; /* fixed point - ntp view */ 19954359Sroberto} timestamp_t; 20054359Sroberto 20154359Sroberto/* 20254359Sroberto * standard time stamp structure 20354359Sroberto */ 20454359Srobertostruct parsetime 20554359Sroberto{ 20654359Sroberto u_long parse_status; /* data status - CVT_OK, CVT_NONE, CVT_FAIL ... */ 20754359Sroberto timestamp_t parse_time; /* PARSE timestamp */ 20854359Sroberto timestamp_t parse_stime; /* telegram sample timestamp */ 20954359Sroberto timestamp_t parse_ptime; /* PPS time stamp */ 21054359Sroberto long parse_usecerror; /* sampled usec error */ 21154359Sroberto u_long parse_state; /* current receiver state */ 21254359Sroberto unsigned short parse_format; /* format code */ 21354359Sroberto unsigned short parse_msglen; /* length of message */ 21454359Sroberto unsigned char parse_msg[PARSE_TCMAX]; /* original messages */ 21554359Sroberto}; 21654359Sroberto 21754359Srobertotypedef struct parsetime parsetime_t; 21854359Sroberto 21954359Sroberto/*---------- STREAMS interface ----------*/ 22054359Sroberto 22154359Sroberto#ifdef HAVE_SYS_STREAM_H 22254359Sroberto/* 22354359Sroberto * ioctls 22454359Sroberto */ 22554359Sroberto#define PARSEIOC_ENABLE (('D'<<8) + 'E') 22654359Sroberto#define PARSEIOC_DISABLE (('D'<<8) + 'D') 22754359Sroberto#define PARSEIOC_SETFMT (('D'<<8) + 'f') 22854359Sroberto#define PARSEIOC_GETFMT (('D'<<8) + 'F') 22954359Sroberto#define PARSEIOC_SETCS (('D'<<8) + 'C') 23054359Sroberto#define PARSEIOC_TIMECODE (('D'<<8) + 'T') 23154359Sroberto 23254359Sroberto#endif 23354359Sroberto 23454359Sroberto/*------ IO handling flags (sorry) ------*/ 23554359Sroberto 23654359Sroberto#define PARSE_IO_CSIZE 0x00000003 23754359Sroberto#define PARSE_IO_CS5 0x00000000 23854359Sroberto#define PARSE_IO_CS6 0x00000001 239290001Sglebius#define PARSE_IO_CS7 0x00000002 240290001Sglebius#define PARSE_IO_CS8 0x00000003 24154359Sroberto 24254359Sroberto/* 24354359Sroberto * ioctl structure 24454359Sroberto */ 245290001Sglebiusunion parsectl 24654359Sroberto{ 24754359Sroberto struct parsegettc 24854359Sroberto { 24954359Sroberto u_long parse_state; /* last state */ 25054359Sroberto u_long parse_badformat; /* number of bad packets since last query */ 25154359Sroberto unsigned short parse_format;/* last decoded format */ 25254359Sroberto unsigned short parse_count; /* count of valid time code bytes */ 25354359Sroberto char parse_buffer[PARSE_TCMAX+1]; /* timecode buffer */ 25454359Sroberto } parsegettc; 25554359Sroberto 25654359Sroberto struct parseformat 25754359Sroberto { 25854359Sroberto unsigned short parse_format;/* number of examined format */ 25954359Sroberto unsigned short parse_count; /* count of valid string bytes */ 26054359Sroberto char parse_buffer[PARSE_TCMAX+1]; /* format code string */ 26154359Sroberto } parseformat; 26254359Sroberto 26354359Sroberto struct parsesetcs 26454359Sroberto { 26554359Sroberto u_long parse_cs; /* character size (needed for stripping) */ 26654359Sroberto } parsesetcs; 26754359Sroberto}; 268290001Sglebius 26954359Srobertotypedef union parsectl parsectl_t; 27054359Sroberto 27154359Sroberto/*------ for conversion routines --------*/ 27254359Sroberto 27354359Srobertostruct parse /* parse module local data */ 27454359Sroberto{ 27554359Sroberto int parse_flags; /* operation and current status flags */ 276290001Sglebius 27754359Sroberto int parse_ioflags; /* io handling flags (5-8 Bit control currently) */ 27854359Sroberto 27954359Sroberto /* 28054359Sroberto * private data - fixed format only 28154359Sroberto */ 28254359Sroberto unsigned short parse_plen; /* length of private data */ 28354359Sroberto void *parse_pdata; /* private data pointer */ 28454359Sroberto 28554359Sroberto /* 28654359Sroberto * time code input buffer (from RS232 or PPS) 28754359Sroberto */ 28854359Sroberto unsigned short parse_index; /* current buffer index */ 28954359Sroberto char *parse_data; /* data buffer */ 29054359Sroberto unsigned short parse_dsize; /* size of data buffer */ 29154359Sroberto unsigned short parse_lformat; /* last format used */ 29254359Sroberto u_long parse_lstate; /* last state code */ 29354359Sroberto char *parse_ldata; /* last data buffer */ 29454359Sroberto unsigned short parse_ldsize; /* last data buffer length */ 29554359Sroberto u_long parse_badformat; /* number of unparsable pakets */ 296290001Sglebius 29754359Sroberto timestamp_t parse_lastchar; /* last time a character was received */ 29854359Sroberto parsetime_t parse_dtime; /* external data prototype */ 29954359Sroberto}; 30054359Sroberto 30154359Srobertotypedef struct parse parse_t; 30254359Sroberto 30354359Srobertostruct clocktime /* clock time broken up from time code */ 30454359Sroberto{ 30554359Sroberto long day; 30654359Sroberto long month; 30754359Sroberto long year; 30854359Sroberto long hour; 30954359Sroberto long minute; 31054359Sroberto long second; 31154359Sroberto long usecond; 31254359Sroberto long utcoffset; /* in seconds */ 31354359Sroberto time_t utctime; /* the actual time - alternative to date/time */ 31454359Sroberto u_long flags; /* current clock status */ 31554359Sroberto}; 31654359Sroberto 31754359Srobertotypedef struct clocktime clocktime_t; 31854359Sroberto 31954359Sroberto/* 32054359Sroberto * parser related return/error codes 32154359Sroberto */ 32254359Sroberto#define CVT_MASK (unsigned)0x0000000F /* conversion exit code */ 32354359Sroberto#define CVT_NONE (unsigned)0x00000001 /* format not applicable */ 32454359Sroberto#define CVT_FAIL (unsigned)0x00000002 /* conversion failed - error code returned */ 32554359Sroberto#define CVT_OK (unsigned)0x00000004 /* conversion succeeded */ 32654359Sroberto#define CVT_SKIP (unsigned)0x00000008 /* conversion succeeded */ 32754359Sroberto#define CVT_ADDITIONAL (unsigned)0x00000010 /* additional data is available */ 32854359Sroberto#define CVT_BADFMT (unsigned)0x00000100 /* general format error - (unparsable) */ 32954359Sroberto#define CVT_BADDATE (unsigned)0x00000200 /* date field incorrect */ 33054359Sroberto#define CVT_BADTIME (unsigned)0x00000400 /* time field incorrect */ 33154359Sroberto 33254359Sroberto/* 33354359Sroberto * return codes used by special input parsers 33454359Sroberto */ 33554359Sroberto#define PARSE_INP_SKIP 0x00 /* discard data - may have been consumed */ 33654359Sroberto#define PARSE_INP_TIME 0x01 /* time code assembled */ 33754359Sroberto#define PARSE_INP_PARSE 0x02 /* parse data using normal algorithm */ 33854359Sroberto#define PARSE_INP_DATA 0x04 /* additional data to pass up */ 33954359Sroberto#define PARSE_INP_SYNTH 0x08 /* just pass up synthesized time */ 34054359Sroberto 34154359Sroberto/* 34254359Sroberto * PPS edge info 34354359Sroberto */ 34454359Sroberto#define SYNC_ZERO 0x00 34554359Sroberto#define SYNC_ONE 0x01 34654359Sroberto 347290001Sglebiustypedef u_long parse_inp_fnc_t(parse_t *, char, timestamp_t *); 348290001Sglebiustypedef u_long parse_cvt_fnc_t(unsigned char *, int, struct format *, clocktime_t *, void *); 349290001Sglebiustypedef u_long parse_pps_fnc_t(parse_t *, int, timestamp_t *); 350290001Sglebius 35154359Srobertostruct clockformat 35254359Sroberto{ 35354359Sroberto /* special input protocol - implies fixed format */ 354290001Sglebius parse_inp_fnc_t *input; 35554359Sroberto /* conversion routine */ 356290001Sglebius parse_cvt_fnc_t *convert; 35754359Sroberto /* routine for handling RS232 sync events (time stamps) */ 35854359Sroberto /* PPS input routine */ 359290001Sglebius parse_pps_fnc_t *syncpps; 36054359Sroberto /* time code synthesizer */ 36154359Sroberto 36254359Sroberto void *data; /* local parameters */ 36354359Sroberto const char *name; /* clock format name */ 36454359Sroberto unsigned short length; /* maximum length of data packet */ 36554359Sroberto unsigned short plen; /* length of private data - implies fixed format */ 36654359Sroberto}; 36754359Sroberto 36854359Srobertotypedef struct clockformat clockformat_t; 36954359Sroberto 37054359Sroberto/* 37154359Sroberto * parse interface 37254359Sroberto */ 373290001Sglebiusextern int parse_ioinit (parse_t *); 374290001Sglebiusextern void parse_ioend (parse_t *); 375290001Sglebiusextern int parse_ioread (parse_t *, char, timestamp_t *); 376290001Sglebiusextern int parse_iopps (parse_t *, int, timestamp_t *); 377290001Sglebiusextern void parse_iodone (parse_t *); 378290001Sglebiusextern int parse_timecode (parsectl_t *, parse_t *); 379290001Sglebiusextern int parse_getfmt (parsectl_t *, parse_t *); 380290001Sglebiusextern int parse_setfmt (parsectl_t *, parse_t *); 381290001Sglebiusextern int parse_setcs (parsectl_t *, parse_t *); 38254359Sroberto 383290001Sglebiusextern unsigned int parse_restart (parse_t *, char); 384290001Sglebiusextern unsigned int parse_addchar (parse_t *, char); 385290001Sglebiusextern unsigned int parse_end (parse_t *); 38654359Sroberto 387290001Sglebiusextern int Strok (const unsigned char *, const unsigned char *); 388290001Sglebiusextern int Stoi (const unsigned char *, long *, int); 38954359Sroberto 390290001Sglebiusextern time_t parse_to_unixtime (clocktime_t *, u_long *); 391290001Sglebiusextern u_long updatetimeinfo (parse_t *, u_long); 392290001Sglebiusextern void syn_simple (parse_t *, timestamp_t *, struct format *, u_long); 393290001Sglebiusextern parse_pps_fnc_t pps_simple; 394290001Sglebiusextern parse_pps_fnc_t pps_one; 395290001Sglebiusextern parse_pps_fnc_t pps_zero; 396290001Sglebiusextern int parse_timedout (parse_t *, timestamp_t *, struct timeval *); 39754359Sroberto 39854359Sroberto#endif 39954359Sroberto 40054359Sroberto/* 40154359Sroberto * History: 40254359Sroberto * 40354359Sroberto * parse.h,v 404182007Sroberto * Revision 4.12 2007/01/14 08:36:03 kardel 405182007Sroberto * make timestamp union anonymous to avoid conflicts with 406182007Sroberto * some OSes that choose to create a nameing conflic here. 407182007Sroberto * 408182007Sroberto * Revision 4.11 2005/06/25 10:58:45 kardel 409182007Sroberto * add missing log keywords 410182007Sroberto * 41154359Sroberto * Revision 4.5 1998/08/09 22:23:32 kardel 41254359Sroberto * 4.0.73e2 adjustments 41354359Sroberto * 41454359Sroberto * Revision 4.4 1998/06/14 21:09:27 kardel 41554359Sroberto * Sun acc cleanup 41654359Sroberto * 41754359Sroberto * Revision 4.3 1998/06/13 11:49:25 kardel 41854359Sroberto * STREAM macro gone in favor of HAVE_SYS_STREAM_H 41954359Sroberto * 42054359Sroberto * Revision 4.2 1998/06/12 15:14:25 kardel 42154359Sroberto * fixed prototypes 42254359Sroberto * 42354359Sroberto * Revision 4.1 1998/05/24 10:07:59 kardel 42454359Sroberto * removed old data structure cruft (new input model) 42554359Sroberto * new PARSE_INP* macros for input handling 42654359Sroberto * removed old SYNC_* macros from old input model 42754359Sroberto * (struct clockformat): removed old parse functions in favor of the 42854359Sroberto * new input model 42954359Sroberto * updated prototypes 43054359Sroberto * 43154359Sroberto * form V3 3.31 - log info deleted 1998/04/11 kardel 43254359Sroberto */ 433