diff options
Diffstat (limited to 'usr.sbin/xntpd')
174 files changed, 0 insertions, 55943 deletions
diff --git a/usr.sbin/xntpd/Config b/usr.sbin/xntpd/Config deleted file mode 100644 index c15ec05..0000000 --- a/usr.sbin/xntpd/Config +++ /dev/null @@ -1,200 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL=-DREFCLOCK -DEFS= -DSYS_FREEBSD -DSYS_386BSD -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lcrypt -RESLIB= -COPTS= -O2 -COMPILER= gcc -LIBDEFS= -DXNTP_LITTLE_ENDIAN -# This is the local configure file (distribution version). -# You must modify it to fit your particular configuration -# and name it Config.local -# The following configuratiions can be auto-generated: -# -# make Config.local.green -# make a Config.local that supports a local clock -# (i.e. allow fallback to use of the CPU's own clock) -# make Config.local.NO.clock -# make a Config.local that supports no clocks -# -# -# NOTE TO GREENHORNS -# -# For plug-'n-play and no radios or other complicated gadgetry, -# use "make Config.local.green" as above. -# -# Following defines can be set in the DEFS_OPT= define: -# -# The flag -DDEBUG includes some debugging code. To use this, include -# the define and start the daemon with one or more -d flags, depending -# on your calibration of pearannoya. The daemon will not detach your -# terminal in this case. Judicious use of grep will reduce the speaker -# volume to bearable levels. -# -# To change the location of the configuration file, use a -# -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar. -# -# The -DSYSLOG_FILE defines allows logging messages that are normally -# reported via syslof() in a file. The file name can be configured using -# the configuration line "logfile <filename>" in CONFIG_FILE. -# -# There are three serial port system software interfaces, each of -# which is peculiar to one or more Unix versions. Define -# -DHAVE_SYSV_TTYS for basic System V compatibility; define -DSTREAM -# for POSIX compatibility including System V Streams, and -# HAVE_BSD_TTYS for 4.3bsd compatibility. Only one of these three -# should be defined. If none are defined, HAVE_BSD_TTYS is assumed. -# Usually these defines are already set correctly. -# -DEFS_OPT=-DDEBUG - -# -# The DEFS_LOCAL define picks up all flags from DEFS_OPT (do not delete that) -# and one of the following: -# -# The flag -DREFCLOCK causes the basic reference clock support to be -# compiled into the daemon. If you set this you may also want to -# configure the particular clock drivers you want in the CLOCKDEFS= line -# below. This flag affects xntpd only. This define is included by -# default when using the "make makeconfig" script. -# -# The next two sets of defines are meaningful only when radio clock -# drivers or special 1-pps signals are to be used. For systems without -# these features, these delicious complexities can be avoided. Ordinarily, -# the "make makeconfig" script figures out which ones to use, but your -# mileage may vary. -# -# There are three ways to utilize external 1-pps signals. Define -# -DPPS to include just the pps routine, such as used by the DCF77(PARSE) -# clock driver. Define -DPPSCLK to include a serial device driver -# which avoids much of the jitter due to upper level port -# processing. This requires a dedicated serial port and either the -# tty_clock line discipline or tty_clk_streams module, both of -# which are in the ./kernel directory. Define -DPPSCD to include a -# special driver which intercepts carrier-detect transitions -# generated by the pps signal. This requires a nondedicated serial -# port and the ppsclock streams module in the ./kernel directory. -# Only one of these three flags should be defined. -# -# The flag KERNEL_PLL causes code to be compiled for a special feature of -# the kernel that (a) implements the phase-lock loop and (b) provides -# a user interface to learn time, maximum error and estimated error. -# See the file README.kern in the doc directory for further info. -# This code is activated only if the relevant kernel features have -# been configured; it does not affect operation of unmodified kernels. -# To compile it, however, requires a few header files from the -# special distribution. -# -# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT) -DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DPPSPPS -DKERNEL_PLL - -# -# Radio clock support definitions (these only make sense if -DREFCLOCK -# used), which is normally the case. Note that a configuration can include -# no clocks, more than one type of clock and even multiple clocks of the -# same type. -# -# For most radio clocks operating with serial ports, accuracy can -# be considerably improved through use of the tty_clk line -# discipline or tty_clk_STREAMS streams module found in the -# ./kernel directory. These gizmos capture a timestamp upon -# occurrence of an intercept character and stuff it in the data -# stream for the clock driver to munch. To select this mode, -# postfix the driver name with the string CLK; that is, WWVB -# becomes WWVBCLK. If more than one clock is in use, the CLK -# postfix can be used with any or all of them. -# -# Alternatively, for the best accuracy, use the ppsclock streams -# module in the ./ppsclock directory to steal the carrier-detect -# transition and capture a precision timestamp. At present this -# works only with SunOS 4.1.1 or later. To select this mode, -# postfix the driver name with the string PPS; that is, AS2201 -# becomes AS2201PPS. If more than one clock is in use, the PPS -# postfix should be used with only one of them. If any PPS -# postfix is defined, the -DPPSPPS define should be used on the -# DEFS above. -# -# Define -DLOCAL_CLOCK for a local pseudo-clock to masquerade as a -# reference clock for those subnets without access to the real thing. -# Works in all systems and requires no hardware support. This is defined -# by default when using the "make makeconfig" script and greenhorn -# configuraiton. -# -# Define -DPST for a PST/Traconex 1020 WWV/H receiver. The driver -# supports both the CLK and PPS modes. It should work in all systems -# with a serial port. -# -# Define -DWWVB for a Spectracom 8170 or Netclock/2 WWVB receiver. It -# should work in all systems with a serial port. The driver supports -# both the CLK and PPS modes if the requisite kernel support is installed. -# -# Define -DCHU for a special CHU receiver using an ordinary shortwave -# radio. This requires the chu_clk line discipline or chu_clk_STREAMS -# module in the ./kernel directory. At present, this driver works only -# on SunOS4.1.x; operation in other systems has not been confirmed. -# Construction details for a suitable modem can be found in the ./gadget -# directory. The driver supports # neither the CLK nor PPS modes. -# -# Define -DPARSE for a DCF77/GPS(GENERIC) receiver. For best performance -# this requires a special parsestreams STREAMS (SunOS 4.x) module in the -# ./parse directory. Define -DPARSEPPS for PPS support via the -# DCF77/GPS (GENERIC) receiver; also, define -DPPS in the DEFS above. -# Define: -DCLOCK_MEINBERG for Meinberg clocks -# -DCLOCK_SCHMID for Schmid receivers -# -DCLOCK_DCF7000 for ELV DCF7000 -# -DCLOCK_RAWDCF for simple receivers (100/200ms pulses on Rx) -# -DCLOCK_TRIMSV6 for Trimble SV6 GPS receiver -# -# Define -DMX4200PPS for a Magnavox 4200 GPS receiver. At present, this -# driver works only on SunOS4.1.x with CPU serial ports only. The PPS -# mode is required. -# -# Define -DAS2201 for an Austron 2200A or 2201A GPS receiver. It should -# work in all systems with a serial port. The driver does not support the -# CLK mode, but does support the PPS mode. If the radio is connected to -# more than one machine, the PPS mode is required. -# -# Define -DGOES for a Kinemetrics/TrueTime 468-DC GOES receiver. This -# driver is known to work with some other TrueTime products as well, -# including the GPS-DC GPS receiver. It should work in all systems with -# a serial port. The driver does not support the CLK mode, but does -# support the PPS mode. -# -# Define -DOMEGA for a Kinemetrics/TrueTime OM-DC OMEGA receiver. It -# should work in all systems with a serial port. The driver does not -# support the CLK mode, but does support the PPS mode. -# -# Define -DTPRO for a KSI/Odetics TPRO-S IRIG-B timecode reader. This -# requires the SunOS interface driver available from KSI. The driver -# supports neither the CLK nor PPS modes. -# -# Define -DLEITCH for a Leitch CSD 5300 Master Clock System Driver for -# the HP 5061B Cesium Clock. It should work in all systems with a serial -# port. The driver does not support the CLK mode, but does support the -# PPS mode. -# -# Define -DMSFEESPPS for an EES M201 MSF receiver. It currently only works -# under SunOS 4.x with the PPSCD (ppsclock) STREAMS module, but the RCS -# files on cl.cam.ac.uk still has support for CLK and CBREAK modes. -# -# Define -DIRIG for a IRIG-B timecode timecode using the audio codec of -# the Sun SPARCstations. This requires a modified BSD audio driver and -# exclusive access to the audio port. A memo describing how it works and -# how to install the driver is in the README.irig file in the ./doc -# directory. -# -# Note: The following defines result in compilation of all the above radio -# clocks. This works on a Sun 4.1.x system which has tty_clk, chu_clk and -# ppsclock STREAMS modules installed. If the trailing CLK and PPS suffixes -# are removed and the IRIG, PARSE* and CLOCK* deleted, all of the rest compile -# under Ultrix 4.2a/3. If the MX4200 is removed, all the rest compile on a DEC -# OSF/1 Alpha. -# -CLOCKDEFS= -DLOCAL_CLOCK -DAS2201PPS -DCHU -DGOES -DIRIG -DMX4200PPS -DOMEGA -DPSTCLK -DTPRO -DWWVBCLK -DMSFEESPPS -DLEITCH - -# -# Directory into which binaries should be installed (default /usr/local) -# -BINDIR= /usr/local/bin diff --git a/usr.sbin/xntpd/Config.local b/usr.sbin/xntpd/Config.local deleted file mode 100644 index 50bbe3a..0000000 --- a/usr.sbin/xntpd/Config.local +++ /dev/null @@ -1,198 +0,0 @@ -# This is the local configure file (distribution version). -# You must modify it to fit your particular configuration -# and name it Config.local -# The following configuratiions can be auto-generated: -# -# make Config.local.green -# make a Config.local that supports a local clock -# (i.e. allow fallback to use of the CPU's own clock) -# make Config.local.NO.clock -# make a Config.local that supports no clocks -# -# -# NOTE TO GREENHORNS -# -# For plug-'n-play and no radios or other complicated gadgetry, -# use "make Config.local.green" as above. -# -# Following defines can be set in the DEFS_OPT= define: -# -# The flag -DDEBUG includes some debugging code. To use this, include -# the define and start the daemon with one or more -d flags, depending -# on your calibration of pearannoya. The daemon will not detach your -# terminal in this case. Judicious use of grep will reduce the speaker -# volume to bearable levels. -# -# To change the location of the configuration file, use a -# -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar. -# -# The -DSYSLOG_FILE defines allows logging messages that are normally -# reported via syslog() in a file. The file name can be configured using -# the configuration line "logfile <filename>" in CONFIG_FILE. -# -# There are three serial port system software interfaces, each of -# which is peculiar to one or more Unix versions. Define -# -DHAVE_SYSV_TTYS for basic System V compatibility; define -DSTREAM -# for POSIX compatibility including System V Streams, and -# HAVE_BSD_TTYS for 4.3bsd compatibility. -# Use HAVE_TERMIOS for POSIX (termios.h) without System V Streams. -# Only one of these three should be defined. If none are defined, -# HAVE_BSD_TTYS is assumed. -# Usually these defines are already set correctly. -# -DEFS_OPT=-DDEBUG - -# -# The DEFS_LOCAL define picks up all flags from DEFS_OPT (do not delete that) -# and one of the following: -# -# The flag -DREFCLOCK causes the basic reference clock support to be -# compiled into the daemon. If you set this you may also want to -# configure the particular clock drivers you want in the CLOCKDEFS= line -# below. This flag affects xntpd only. This define is included by -# default when using the "make makeconfig" script. -# -# The next two sets of defines are meaningful only when radio clock -# drivers or special 1-pps signals are to be used. For systems without -# these features, these delicious complexities can be avoided. Ordinarily, -# the "make makeconfig" script figures out which ones to use, but your -# mileage may vary. -# -# There are three ways to utilize external 1-pps signals. Define -# -DPPS to include just the pps routine, such as used by the DCF77(PARSE) -# clock driver. Define -DPPSCLK to include a serial device driver -# which avoids much of the jitter due to upper level port -# processing. This requires a dedicated serial port and either the -# tty_clock line discipline or tty_clk_streams module, both of -# which are in the ./kernel directory. Define -DPPSCD to include a -# special driver which intercepts carrier-detect transitions -# generated by the pps signal. This requires a nondedicated serial -# port and the ppsclock streams module in the ./kernel directory. -# Only one of these three flags should be defined. -# -# The flag KERNEL_PLL causes code to be compiled for a special feature of -# the kernel that (a) implements the phase-lock loop and (b) provides -# a user interface to learn time, maximum error and estimated error. -# See the file README.kern in the doc directory for further info. -# This code is activated only if the relevant kernel features have -# been configured; it does not affect operation of unmodified kernels. -# To compile it, however, requires a few header files from the -# special distribution. -# -# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT) -DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK #TEST -DPPSPPS -DKERNEL_PLL - -# -# Radio clock support definitions (these only make sense if -DREFCLOCK -# used), which is normally the case. Note that a configuration can include -# no clocks, more than one type of clock and even multiple clocks of the -# same type. -# -# For most radio clocks operating with serial ports, accuracy can -# be considerably improved through use of the tty_clk line -# discipline or tty_clk_STREAMS streams module found in the -# ./kernel directory. These gizmos capture a timestamp upon -# occurrence of an intercept character and stuff it in the data -# stream for the clock driver to munch. To select this mode, -# postfix the driver name with the string CLK; that is, WWVB -# becomes WWVBCLK. If more than one clock is in use, the CLK -# postfix can be used with any or all of them. -# -# Alternatively, for the best accuracy, use the ppsclock streams -# module in the ./ppsclock directory to steal the carrier-detect -# transition and capture a precision timestamp. At present this -# works only with SunOS 4.1.1 or later. To select this mode, -# postfix the driver name with the string PPS; that is, AS2201 -# becomes AS2201PPS. If more than one clock is in use, the PPS -# postfix should be used with only one of them. If any PPS -# postfix is defined, the -DPPSPPS define should be used on the -# DEFS above. -# -# Define -DLOCAL_CLOCK for a local pseudo-clock to masquerade as a -# reference clock for those subnets without access to the real thing. -# Works in all systems and requires no hardware support. This is defined -# by default when using the "make makeconfig" script and greenhorn -# configuraiton. -# -# Define -DAS2201 for an Austron 2200A or 2201A GPS receiver. It should -# work in all systems with a serial port. The driver does not support the -# CLK mode, but does support the PPS mode. If the radio is connected to -# more than one machine, the PPS mode is required. -# -# Define -DCHU for a special CHU receiver using an ordinary shortwave -# radio. This requires the chu_clk line discipline or chu_clk_STREAMS -# module in the ./kernel directory. At present, this driver works only -# on SunOS4.1.x; operation in other systems has not been confirmed. -# Construction details for a suitable modem can be found in the ./gadget -# directory. The driver supports # neither the CLK nor PPS modes. -# -# Define -DGOES for a Kinemetrics/TrueTime 468-DC GOES receiver. This -# driver is known to work with some other TrueTime products as well, -# including the GPS-DC GPS receiver. It should work in all systems with -# a serial port. The driver does not support the CLK mode, but does -# support the PPS mode. -# -# Define -DGPSTM for a Kinemetrics/TrueTime GPS-TM/TMD receiver. It -# should work in all systems with a serial port. -# -# Define -DIRIG for a IRIG-B timecode timecode using the audio codec of -# the Sun SPARCstations. This requires a modified BSD audio driver and -# exclusive access to the audio port. A memo describing how it works and -# how to install the driver is in the README.irig file in the ./doc -# directory. -# -# Define -DLEITCH for a Leitch CSD 5300 Master Clock System Driver for -# the HP 5061B Cesium Clock. It should work in all systems with a serial -# port. The driver does not support the CLK mode, but does support the -# PPS mode. -# -# Define -DMX4200PPS for a Magnavox 4200 GPS receiver. At present, this -# driver works only on SunOS4.1.x with CPU serial ports only. The PPS -# mode is required. -# -# Define -DMSFEESPPS for an EES M201 MSF receiver. It currently only works -# under SunOS 4.x with the PPSCD (ppsclock) STREAMS module, but the RCS -# files on cl.cam.ac.uk still has support for CLK and CBREAK modes. -# -# Define -DOMEGA for a Kinemetrics/TrueTime OM-DC OMEGA receiver. It -# should work in all systems with a serial port. The driver does not -# support the CLK mode, but does support the PPS mode. -# -# Define -DPARSE for a DCF77/GPS(GENERIC) receiver. For best performance -# this requires a special parsestreams STREAMS (SunOS 4.x) module in the -# ./parse directory. Define -DPARSEPPS for PPS support via the -# DCF77/GPS (GENERIC) receiver; also, define -DPPS in the DEFS above. -# Define: -DCLOCK_MEINBERG for Meinberg clocks -# -DCLOCK_SCHMID for Schmid receivers -# -DCLOCK_DCF7000 for ELV DCF7000 -# -DCLOCK_RAWDCF for simple receivers (100/200ms pulses on Rx) -# -DCLOCK_TRIMSV6 for Trimble SV6 GPS receiver -# -# Define -DPST for a PST/Traconex 1020 WWV/H receiver. The driver -# supports both the CLK and PPS modes. It should work in all systems -# with a serial port. -# -# Define -DTPRO for a KSI/Odetics TPRO-S IRIG-B timecode reader. This -# requires the SunOS interface driver available from KSI. The driver -# supports neither the CLK nor PPS modes. -# -# Define -DTRAK for a 8810 GPS Receiver with Buffered RS-232-C Interface -# Module. The driver supports both the CLK and PPS modes. It should work -# in all systems with a serial port. -# -# Define -DWWVB for a Spectracom 8170 or Netclock/2 WWVB receiver. It -# should work in all systems with a serial port. The driver supports -# both the CLK and PPS modes if the requisite kernel support is installed. -# -# Note: The following defines result in compilation of all the above radio -# clocks. This works on a Sun 4.1.x system which has tty_clk, chu_clk and -# ppsclock STREAMS modules installed. If the trailing CLK and PPS suffixes -# are removed and the IRIG, PARSE* and CLOCK* deleted, all of the rest compile -# under Ultrix 4.2a/3 and DEC # OSF/1 Alpha. -# -CLOCKDEFS= -DLOCAL_CLOCK #TEST -DAS2201PPS -DCHU -DATUM -DGOES -DGPSTM -DIRIG -DLEITCH -DMSFEES -DMX4200PPS -DOMEGA -DPST -DTPRO -TRAK -DWWVB -DPARSE -DPARSEPPS -DCLOCK_MEINBERG -DCLOCK_RAWDCF -DCLOCK_SCHMID -DCLOCK_DCF7000 -DCLOCK_TRIMSV6 - -# -# Directory into which binaries should be installed (default /usr/local) -# -BINDIR= /usr/local/bin diff --git a/usr.sbin/xntpd/Config.local.dist b/usr.sbin/xntpd/Config.local.dist deleted file mode 100644 index 2f73866..0000000 --- a/usr.sbin/xntpd/Config.local.dist +++ /dev/null @@ -1,198 +0,0 @@ -# This is the local configure file (distribution version). -# You must modify it to fit your particular configuration -# and name it Config.local -# The following configuratiions can be auto-generated: -# -# make Config.local.green -# make a Config.local that supports a local clock -# (i.e. allow fallback to use of the CPU's own clock) -# make Config.local.NO.clock -# make a Config.local that supports no clocks -# -# -# NOTE TO GREENHORNS -# -# For plug-'n-play and no radios or other complicated gadgetry, -# use "make Config.local.green" as above. -# -# Following defines can be set in the DEFS_OPT= define: -# -# The flag -DDEBUG includes some debugging code. To use this, include -# the define and start the daemon with one or more -d flags, depending -# on your calibration of pearannoya. The daemon will not detach your -# terminal in this case. Judicious use of grep will reduce the speaker -# volume to bearable levels. -# -# To change the location of the configuration file, use a -# -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar. -# -# The -DSYSLOG_FILE defines allows logging messages that are normally -# reported via syslog() in a file. The file name can be configured using -# the configuration line "logfile <filename>" in CONFIG_FILE. -# -# There are three serial port system software interfaces, each of -# which is peculiar to one or more Unix versions. Define -# -DHAVE_SYSV_TTYS for basic System V compatibility; define -DSTREAM -# for POSIX compatibility including System V Streams, and -# HAVE_BSD_TTYS for 4.3bsd compatibility. -# Use HAVE_TERMIOS for POSIX (termios.h) without System V Streams. -# Only one of these three should be defined. If none are defined, -# HAVE_BSD_TTYS is assumed. -# Usually these defines are already set correctly. -# -DEFS_OPT=-DDEBUG - -# -# The DEFS_LOCAL define picks up all flags from DEFS_OPT (do not delete that) -# and one of the following: -# -# The flag -DREFCLOCK causes the basic reference clock support to be -# compiled into the daemon. If you set this you may also want to -# configure the particular clock drivers you want in the CLOCKDEFS= line -# below. This flag affects xntpd only. This define is included by -# default when using the "make makeconfig" script. -# -# The next two sets of defines are meaningful only when radio clock -# drivers or special 1-pps signals are to be used. For systems without -# these features, these delicious complexities can be avoided. Ordinarily, -# the "make makeconfig" script figures out which ones to use, but your -# mileage may vary. -# -# There are three ways to utilize external 1-pps signals. Define -# -DPPS to include just the pps routine, such as used by the DCF77(PARSE) -# clock driver. Define -DPPSCLK to include a serial device driver -# which avoids much of the jitter due to upper level port -# processing. This requires a dedicated serial port and either the -# tty_clock line discipline or tty_clk_streams module, both of -# which are in the ./kernel directory. Define -DPPSCD to include a -# special driver which intercepts carrier-detect transitions -# generated by the pps signal. This requires a nondedicated serial -# port and the ppsclock streams module in the ./kernel directory. -# Only one of these three flags should be defined. -# -# The flag KERNEL_PLL causes code to be compiled for a special feature of -# the kernel that (a) implements the phase-lock loop and (b) provides -# a user interface to learn time, maximum error and estimated error. -# See the file README.kern in the doc directory for further info. -# This code is activated only if the relevant kernel features have -# been configured; it does not affect operation of unmodified kernels. -# To compile it, however, requires a few header files from the -# special distribution. -# -# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT) -DEFS_LOCAL= $(DEFS_OPT) #GREEN -DREFCLOCK #TEST -DPPSPPS -DKERNEL_PLL - -# -# Radio clock support definitions (these only make sense if -DREFCLOCK -# used), which is normally the case. Note that a configuration can include -# no clocks, more than one type of clock and even multiple clocks of the -# same type. -# -# For most radio clocks operating with serial ports, accuracy can -# be considerably improved through use of the tty_clk line -# discipline or tty_clk_STREAMS streams module found in the -# ./kernel directory. These gizmos capture a timestamp upon -# occurrence of an intercept character and stuff it in the data -# stream for the clock driver to munch. To select this mode, -# postfix the driver name with the string CLK; that is, WWVB -# becomes WWVBCLK. If more than one clock is in use, the CLK -# postfix can be used with any or all of them. -# -# Alternatively, for the best accuracy, use the ppsclock streams -# module in the ./ppsclock directory to steal the carrier-detect -# transition and capture a precision timestamp. At present this -# works only with SunOS 4.1.1 or later. To select this mode, -# postfix the driver name with the string PPS; that is, AS2201 -# becomes AS2201PPS. If more than one clock is in use, the PPS -# postfix should be used with only one of them. If any PPS -# postfix is defined, the -DPPSPPS define should be used on the -# DEFS above. -# -# Define -DLOCAL_CLOCK for a local pseudo-clock to masquerade as a -# reference clock for those subnets without access to the real thing. -# Works in all systems and requires no hardware support. This is defined -# by default when using the "make makeconfig" script and greenhorn -# configuraiton. -# -# Define -DAS2201 for an Austron 2200A or 2201A GPS receiver. It should -# work in all systems with a serial port. The driver does not support the -# CLK mode, but does support the PPS mode. If the radio is connected to -# more than one machine, the PPS mode is required. -# -# Define -DCHU for a special CHU receiver using an ordinary shortwave -# radio. This requires the chu_clk line discipline or chu_clk_STREAMS -# module in the ./kernel directory. At present, this driver works only -# on SunOS4.1.x; operation in other systems has not been confirmed. -# Construction details for a suitable modem can be found in the ./gadget -# directory. The driver supports # neither the CLK nor PPS modes. -# -# Define -DGOES for a Kinemetrics/TrueTime 468-DC GOES receiver. This -# driver is known to work with some other TrueTime products as well, -# including the GPS-DC GPS receiver. It should work in all systems with -# a serial port. The driver does not support the CLK mode, but does -# support the PPS mode. -# -# Define -DGPSTM for a Kinemetrics/TrueTime GPS-TM/TMD receiver. It -# should work in all systems with a serial port. -# -# Define -DIRIG for a IRIG-B timecode timecode using the audio codec of -# the Sun SPARCstations. This requires a modified BSD audio driver and -# exclusive access to the audio port. A memo describing how it works and -# how to install the driver is in the README.irig file in the ./doc -# directory. -# -# Define -DLEITCH for a Leitch CSD 5300 Master Clock System Driver for -# the HP 5061B Cesium Clock. It should work in all systems with a serial -# port. The driver does not support the CLK mode, but does support the -# PPS mode. -# -# Define -DMX4200PPS for a Magnavox 4200 GPS receiver. At present, this -# driver works only on SunOS4.1.x with CPU serial ports only. The PPS -# mode is required. -# -# Define -DMSFEESPPS for an EES M201 MSF receiver. It currently only works -# under SunOS 4.x with the PPSCD (ppsclock) STREAMS module, but the RCS -# files on cl.cam.ac.uk still has support for CLK and CBREAK modes. -# -# Define -DOMEGA for a Kinemetrics/TrueTime OM-DC OMEGA receiver. It -# should work in all systems with a serial port. The driver does not -# support the CLK mode, but does support the PPS mode. -# -# Define -DPARSE for a DCF77/GPS(GENERIC) receiver. For best performance -# this requires a special parsestreams STREAMS (SunOS 4.x) module in the -# ./parse directory. Define -DPARSEPPS for PPS support via the -# DCF77/GPS (GENERIC) receiver; also, define -DPPS in the DEFS above. -# Define: -DCLOCK_MEINBERG for Meinberg clocks -# -DCLOCK_SCHMID for Schmid receivers -# -DCLOCK_DCF7000 for ELV DCF7000 -# -DCLOCK_RAWDCF for simple receivers (100/200ms pulses on Rx) -# -DCLOCK_TRIMSV6 for Trimble SV6 GPS receiver -# -# Define -DPST for a PST/Traconex 1020 WWV/H receiver. The driver -# supports both the CLK and PPS modes. It should work in all systems -# with a serial port. -# -# Define -DTPRO for a KSI/Odetics TPRO-S IRIG-B timecode reader. This -# requires the SunOS interface driver available from KSI. The driver -# supports neither the CLK nor PPS modes. -# -# Define -DTRAK for a 8810 GPS Receiver with Buffered RS-232-C Interface -# Module. The driver supports both the CLK and PPS modes. It should work -# in all systems with a serial port. -# -# Define -DWWVB for a Spectracom 8170 or Netclock/2 WWVB receiver. It -# should work in all systems with a serial port. The driver supports -# both the CLK and PPS modes if the requisite kernel support is installed. -# -# Note: The following defines result in compilation of all the above radio -# clocks. This works on a Sun 4.1.x system which has tty_clk, chu_clk and -# ppsclock STREAMS modules installed. If the trailing CLK and PPS suffixes -# are removed and the IRIG, PARSE* and CLOCK* deleted, all of the rest compile -# under Ultrix 4.2a/3 and DEC # OSF/1 Alpha. -# -CLOCKDEFS= #GREEN -DLOCAL_CLOCK #TEST -DAS2201PPS -DCHU -DATUM -DGOES -DGPSTM -DIRIG -DLEITCH -DMSFEES -DMX4200PPS -DOMEGA -DPST -DTPRO -TRAK -DWWVB -DPARSE -DPARSEPPS -DCLOCK_MEINBERG -DCLOCK_RAWDCF -DCLOCK_SCHMID -DCLOCK_DCF7000 -DCLOCK_TRIMSV6 - -# -# Directory into which binaries should be installed (default /usr/local) -# -BINDIR= /usr/local/bin diff --git a/usr.sbin/xntpd/Config.sed b/usr.sbin/xntpd/Config.sed deleted file mode 100644 index fe5a9b7..0000000 --- a/usr.sbin/xntpd/Config.sed +++ /dev/null @@ -1,14 +0,0 @@ -s~^RANLIB=.*~RANLIB= ranlib~ -s~^DEFS_LOCAL=.*~DEFS_LOCAL=-DREFCLOCK~ -s~^DEFS=.*~DEFS= -DSYS_FREEBSD -DSYS_386BSD~ -s~^AUTHDEFS=.*~AUTHDEFS= -DDES -DMD5~ -s~^CLOCKDEFS=.*~CLOCKDEFS= -DLOCAL_CLOCK~ -s~^DAEMONLIBS=.*~DAEMONLIBS= -lcrypt~ -s~^RESLIB=.*~RESLIB=~ -s~^COPTS=.*~COPTS= -O2~ -s~^COMPILER=.*~COMPILER= gcc~ -s~^LIBDEFS=.*~LIBDEFS= -DXNTP_LITTLE_ENDIAN~ -s~^DEFS_OPT=.*~DEFS_OPT=-DDEBUG~ -s~^DEFS_LOCAL=.*~DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DPPSPPS -DKERNEL_PLL~ -s~^CLOCKDEFS=.*~CLOCKDEFS= -DLOCAL_CLOCK -DAS2201PPS -DCHU -DGOES -DIRIG -DMX4200PPS -DOMEGA -DPSTCLK -DTPRO -DWWVBCLK -DMSFEESPPS -DLEITCH~ -s~^BINDIR=.*~BINDIR= /usr/local/bin~ diff --git a/usr.sbin/xntpd/adjtime/Makefile.tmpl b/usr.sbin/xntpd/adjtime/Makefile.tmpl deleted file mode 100644 index c2e8381..0000000 --- a/usr.sbin/xntpd/adjtime/Makefile.tmpl +++ /dev/null @@ -1,53 +0,0 @@ -######################################################################### -## (c) Copyright 1988, Hewlett-Packard Co. All Rights Reserved. ## -## ## -## Author: Tai Jin, Hewlett-Packard Laboratories. ## -######################################################################### - -## Makefile.tmpl,v 3.1 1993/07/06 01:04:40 jbj Exp - -# -PROGRAM = adjtimed -COMPILER= cc -CC= $(COMPILER) -BINDIR= /usr/local/etc -COPTS= -O -DEFS= -DEFS_OPT= -DEFS_LOCAL= -INCL= -I../include -LLIBS= -INSTALL= install - - -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LDFLAGS= -LIBS= $(LLIBS) -lc -OBJ= adjtime.o adjtimed.o -ALL= libadjtime.a adjtimed - -all: $(ALL) - -libadjtime.a: adjtime.o - ar vr libadjtime.a $? - -adjtimed: adjtimed.o ../lib/libntp.a - $(CC) $(LDFLAGS) -o adjtimed adjtimed.o ../lib/libntp.a $(LIBS) - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) - $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -clean: - -@rm -f *.a *.o adjtimed - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -install: $(PROGRAM) - cp $(PROGRAM) $(BINDIR) diff --git a/usr.sbin/xntpd/adjtime/README b/usr.sbin/xntpd/adjtime/README deleted file mode 100644 index fe8b7e5..0000000 --- a/usr.sbin/xntpd/adjtime/README +++ /dev/null @@ -1,23 +0,0 @@ ------------------------------------------------------------------------------- -The adjtimed daemon emulates the BSD adjtime(2) system call. The -adjtime() routine communicates with this daemon via SYSV messages. - -The emulation uses an undocumented kernel variable (as of 6.0/2.0 -and later releases) and as such it cannot be guaranteed to work in -future HP-UX releases. Perhaps HP-UX will have a real adjtime(2) -system call in the future. - -Author: Tai Jin (tai@sde.hp.com) ------------------------------------------------------------------------------- - -IMPORTANT NOTE: This stuff must be compiled with no optimization !! - -NOTE: This code is known to work as of 8.0 on s300's, s700's and s800's. - PLEASE do not modify it unless you have access to kernel sources - and fully understand the implications of any changes you are making. - One person already has trashed adjtimed by making it do "the right - thing". This is not an exact replacement for BSD adjtime(2), don't - try to make it into one. - - -- Ken - diff --git a/usr.sbin/xntpd/adjtime/adjtime.c b/usr.sbin/xntpd/adjtime/adjtime.c deleted file mode 100644 index 5b0475e..0000000 --- a/usr.sbin/xntpd/adjtime/adjtime.c +++ /dev/null @@ -1,101 +0,0 @@ -/*************************************************************************/ -/* (c) Copyright Tai Jin, 1988. All Rights Reserved. */ -/* Hewlett-Packard Laboratories. */ -/* */ -/* Permission is hereby granted for unlimited modification, use, and */ -/* distribution. This software is made available with no warranty of */ -/* any kind, express or implied. This copyright notice must remain */ -/* intact in all versions of this software. */ -/* */ -/* The author would appreciate it if any bug fixes and enhancements were */ -/* to be sent back to him for incorporation into future versions of this */ -/* software. Please send changes to tai@iag.hp.com or ken@sdd.hp.com. */ -/*************************************************************************/ - -#ifndef lint -static char RCSid[] = "adjtime.c,v 3.1 1993/07/06 01:04:42 jbj Exp"; -#endif - -#include <sys/types.h> -#include <sys/ipc.h> -#include <sys/msg.h> -#include <time.h> -#include <signal.h> -#include "adjtime.h" - -#define abs(x) ((x) < 0 ? -(x) : (x)) -static LONG adjthresh = 400L; -static LONG saveup; - - -_clear_adjtime() -{ - saveup = 0L; -} - - -adjtime(delta, olddelta) - register struct timeval *delta; - register struct timeval *olddelta; -{ - struct timeval newdelta; - - /* If they are giving us seconds, ignore up to current threshold saved */ - if (delta->tv_sec) { - saveup = 0L; - return(_adjtime(delta, olddelta)); - } - - /* add in, needs check for overflow ? */ - saveup += delta->tv_usec; - - /* Broke the threshold, call adjtime() */ - if (abs(saveup) > adjthresh) { - newdelta.tv_sec = 0L; - newdelta.tv_usec = saveup; - saveup = 0L; - return(_adjtime(&newdelta, olddelta)); - } - - if (olddelta) - olddelta->tv_sec = olddelta->tv_usec = 0L; - return(0); -} - - -_adjtime(delta, olddelta) - register struct timeval *delta; - register struct timeval *olddelta; -{ - register int mqid; - MsgBuf msg; - register MsgBuf *msgp = &msg; - - /* - * get the key to the adjtime message queue - * (note that we must get it every time because the queue might have been - * removed and recreated) - */ - if ((mqid = msgget(KEY, 0)) == -1) - return (-1); - - msgp->msgb.mtype = CLIENT; - msgp->msgb.tv = *delta; - - if (olddelta) - msgp->msgb.code = DELTA2; - else - msgp->msgb.code = DELTA1; - - if (msgsnd(mqid, &msgp->msgp, MSGSIZE, 0) == -1) - return (-1); - - if (olddelta) { - if (msgrcv(mqid, &msgp->msgp, MSGSIZE, SERVER, 0) == -1) - return (-1); - - *olddelta = msgp->msgb.tv; - } - - return (0); -} diff --git a/usr.sbin/xntpd/adjtime/adjtime.h b/usr.sbin/xntpd/adjtime/adjtime.h deleted file mode 100644 index f063a47..0000000 --- a/usr.sbin/xntpd/adjtime/adjtime.h +++ /dev/null @@ -1,63 +0,0 @@ -/*************************************************************************/ -/* (c) Copyright Tai Jin, 1988. All Rights Reserved. */ -/* Hewlett-Packard Laboratories. */ -/* */ -/* Permission is hereby granted for unlimited modification, use, and */ -/* distribution. This software is made available with no warranty of */ -/* any kind, express or implied. This copyright notice must remain */ -/* intact in all versions of this software. */ -/* */ -/* The author would appreciate it if any bug fixes and enhancements were */ -/* to be sent back to him for incorporation into future versions of this */ -/* software. Please send changes to tai@iag.hp.com or ken@sdd.hp.com. */ -/*************************************************************************/ - -/* "adjtime.h,v 3.1 1993/07/06 01:04:43 jbj Exp" */ -/* adjtime.h,v - * Revision 3.1 1993/07/06 01:04:43 jbj - * XNTP release 3.1 - * - * - * Revision 1.5 90/02/07 15:34:18 15:34:18 src (Source Hacker) - * CHANGED KEY !!! - * - * Revision 1.4 89/02/09 12:26:35 12:26:35 tai (Tai Jin (Guest)) - * *** empty log message *** - * - * Revision 1.4 89/02/09 12:26:35 12:26:35 tai (Tai Jin) - * added comment - * - * Revision 1.3 88/08/30 01:08:29 01:08:29 tai (Tai Jin) - * fix copyright notice again - * - * Revision 1.2 88/08/30 00:51:55 00:51:55 tai (Tai Jin) - * fix copyright notice - * - * Revision 1.1 88/04/02 14:56:54 14:56:54 tai (Tai Jin) - * Initial revision - * */ - -#include "ntp_types.h" - -#define KEY 659847L - -typedef union { - struct msgbuf msgp; - struct { - LONG mtype; - int code; - struct timeval tv; - } msgb; -} MsgBuf; - -#define MSGSIZE (sizeof(int) + sizeof(struct timeval)) -/* - * mtype values - */ -#define CLIENT 1L -#define SERVER 2L -/* - * code values - */ -#define DELTA1 0 -#define DELTA2 1 diff --git a/usr.sbin/xntpd/adjtime/adjtimed.c b/usr.sbin/xntpd/adjtime/adjtimed.c deleted file mode 100644 index 44e5444..0000000 --- a/usr.sbin/xntpd/adjtime/adjtimed.c +++ /dev/null @@ -1,496 +0,0 @@ -/*************************************************************************/ -/* (c) Copyright Tai Jin, 1988. All Rights Reserved. */ -/* Hewlett-Packard Laboratories. */ -/* */ -/* Permission is hereby granted for unlimited modification, use, and */ -/* distribution. This software is made available with no warranty of */ -/* any kind, express or implied. This copyright notice must remain */ -/* intact in all versions of this software. */ -/* */ -/* The author would appreciate it if any bug fixes and enhancements were */ -/* to be sent back to him for incorporation into future versions of this */ -/* software. Please send changes to tai@iag.hp.com or ken@sdd.hp.com. */ -/*************************************************************************/ - -#ifndef lint -static char RCSid[] = "adjtimed.c,v 3.1 1993/07/06 01:04:45 jbj Exp"; -#endif - -/* - * Adjust time daemon. - * This deamon adjusts the rate of the system clock a la BSD's adjtime(). - * The adjtime() routine uses SYSV messages to communicate with this daemon. - * - * Caveat: This emulation uses an undocumented kernel variable. As such, it - * cannot be guaranteed to work in future HP-UX releases. Perhaps a real - * adjtime(2) will be supported in the future. - */ - -#include <sys/param.h> -#include <sys/types.h> -#include <sys/ipc.h> -#include <sys/msg.h> -#include <sys/lock.h> -#include <time.h> -#include <signal.h> -#include <nlist.h> -#include <fcntl.h> -#include <stdio.h> -#include <errno.h> -#include "ntp_syslog.h" -#include "adjtime.h" - -double atof(); -extern int ntp_optind; -extern char *ntp_optarg; - -int InitClockRate(); -int AdjustClockRate(); -#ifdef notdef -LONG GetClockRate(); -#endif -int SetClockRate(); -void ResetClockRate(); -void Cleanup(); -void Exit(); - -#define MILLION 1000000L - -#define tvtod(tv) ((double)(LONG)tv.tv_sec + \ - ((double)tv.tv_usec / (double)MILLION)) - -char *progname = NULL; -int verbose = 0; -int sysdebug = 0; -static int mqid; -static double oldrate = 0.0; -static double RATE = 0.25; -static double PERIOD = 6.666667; - - -main(argc, argv) - int argc; - char **argv; -{ - struct timeval remains; - struct sigvec vec; - MsgBuf msg; - char ch; - int nofork = 0; - int fd; - - progname = argv[0]; - -#ifdef LOG_LOCAL6 - openlog("adjtimed", LOG_PID, LOG_LOCAL6); -#else - openlog("adjtimed", LOG_PID); -#endif - - while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) { - switch (ch) { - case 'k': - case 'r': - if ((mqid = msgget(KEY, 0)) != -1) { - if (msgctl(mqid, IPC_RMID, (struct msqid_ds *)0) == -1) { - syslog(LOG_ERR, "remove old message queue: %m"); - perror("adjtimed: remove old message queue"); - exit(1); - } - } - - if (ch == 'k') - exit(0); - - break; - - case 'v': - ++verbose, nofork = 1; - break; - - case 'd': - ++sysdebug; - break; - - case 'f': - nofork = 1; - break; - - case 'p': - if ((RATE = atof(ntp_optarg)) <= 0.0 || RATE >= 100.0) { - fputs("adjtimed: percentage must be between 0.0 and 100.0\n", stderr); - exit(1); - } - - RATE /= 100.0; - PERIOD = 1.0 / RATE; - break; - - default: - puts("usage: adjtimed -hkrvdf -p rate"); - puts("-h\thelp"); - puts("-k\tkill existing adjtimed, if any"); - puts("-r\trestart (kills existing adjtimed, if any)"); - puts("-v\tdebug output (repeat for more output)"); - puts("-d\tsyslog output (repeat for more output)"); - puts("-f\tno fork"); - puts("-p rate\tpercent rate of change"); - syslog(LOG_ERR, "usage error"); - exit(1); - } /* switch */ - } /* while */ - - if (!nofork) { - switch (fork()) { - case 0: - close(fileno(stdin)); - close(fileno(stdout)); - close(fileno(stderr)); - -#ifdef TIOCNOTTY - if ((fd = open("/dev/tty")) != -1) { - ioctl(fd, TIOCNOTTY, 0); - close(fd); - } -#else - setpgrp(); -#endif - break; - - case -1: - syslog(LOG_ERR, "fork: %m"); - perror("adjtimed: fork"); - exit(1); - - default: - exit(0); - } /* switch */ - } /* if */ - - if (nofork) { - setvbuf(stdout, NULL, _IONBF, BUFSIZ); - setvbuf(stderr, NULL, _IONBF, BUFSIZ); - } - - syslog(LOG_INFO, "started (rate %.2f%%)", RATE * 100.0); - if (verbose) printf("adjtimed: started (rate %.2f%%)\n", RATE * 100.0); - - if (InitClockRate() == -1) - Exit(2); - - (void)signal(SIGHUP, SIG_IGN); - (void)signal(SIGINT, SIG_IGN); - (void)signal(SIGQUIT, SIG_IGN); - (void)signal(SIGTERM, Cleanup); - - vec.sv_handler = ResetClockRate; - vec.sv_flags = 0; - vec.sv_mask = ~0; - sigvector(SIGALRM, &vec, (struct sigvec *)0); - - if (msgget(KEY, IPC_CREAT|IPC_EXCL) == -1) { - if (errno == EEXIST) { - syslog(LOG_ERR, "message queue already exists, use -r to remove it"); - fputs("adjtimed: message queue already exists, use -r to remove it\n", - stderr); - Exit(1); - } - - syslog(LOG_ERR, "create message queue: %m"); - perror("adjtimed: create message queue"); - Exit(1); - } - - if ((mqid = msgget(KEY, 0)) == -1) { - syslog(LOG_ERR, "get message queue id: %m"); - perror("adjtimed: get message queue id"); - Exit(1); - } - - if (plock(PROCLOCK)) { - syslog(LOG_ERR, "plock: %m"); - perror("adjtimed: plock"); - Cleanup(); - } - - for (;;) { - if (msgrcv(mqid, &msg.msgp, MSGSIZE, CLIENT, 0) == -1) { - if (errno == EINTR) continue; - syslog(LOG_ERR, "read message: %m"); - perror("adjtimed: read message"); - Cleanup(); - } - - switch (msg.msgb.code) { - case DELTA1: - case DELTA2: - AdjustClockRate(&msg.msgb.tv, &remains); - - if (msg.msgb.code == DELTA2) { - msg.msgb.tv = remains; - msg.msgb.mtype = SERVER; - - while (msgsnd(mqid, &msg.msgp, MSGSIZE, 0) == -1) { - if (errno == EINTR) continue; - syslog(LOG_ERR, "send message: %m"); - perror("adjtimed: send message"); - Cleanup(); - } - } - - if (remains.tv_sec + remains.tv_usec != 0L) { - if (verbose) { - printf("adjtimed: previous correction remaining %.6fs\n", - tvtod(remains)); - } - if (sysdebug) { - syslog(LOG_INFO, "previous correction remaining %.6fs", - tvtod(remains)); - } - } - break; - - default: - fprintf(stderr, "adjtimed: unknown message code %d\n", msg.msgb.code); - syslog(LOG_ERR, "unknown message code %d", msg.msgb.code); - } /* switch */ - } /* loop */ -} /* main */ - -/* - * Default clock rate (old_tick). - */ -#define DEFAULT_RATE (MILLION / HZ) -#define UNKNOWN_RATE 0L -#define SLEW_RATE (MILLION / DEFAULT_RATE) -#define MIN_DELTA SLEW_RATE -/* -#define RATE 0.005 -#define PERIOD (1.0 / RATE) -*/ -static LONG default_rate = DEFAULT_RATE; -static LONG slew_rate = SLEW_RATE; - -AdjustClockRate(delta, olddelta) - register struct timeval *delta, *olddelta; -{ - register LONG rate, dt; - struct itimerval period, remains; - static LONG leftover = 0; -/* - * rate of change - */ - dt = (delta->tv_sec * MILLION) + delta->tv_usec + leftover; - - if (dt < MIN_DELTA && dt > -MIN_DELTA) { - leftover += delta->tv_usec; - - if (olddelta) { - getitimer(ITIMER_REAL, &remains); - dt = ((remains.it_value.tv_sec * MILLION) + remains.it_value.tv_usec) * - oldrate; - olddelta->tv_sec = dt / MILLION; - olddelta->tv_usec = dt - (olddelta->tv_sec * MILLION); - } - - if (verbose > 2) printf("adjtimed: delta is too small: %dus\n", dt); - if (sysdebug > 2) syslog(LOG_INFO, "delta is too small: %dus", dt); - return (1); - } - - leftover = dt % MIN_DELTA; - dt -= leftover; - - if (verbose) - printf("adjtimed: new correction %.6fs\n", (double)dt / (double)MILLION); - if (sysdebug) - syslog(LOG_INFO, "new correction %.6fs", (double)dt / (double)MILLION); - if (verbose > 2) printf("adjtimed: leftover %dus\n", leftover); - if (sysdebug > 2) syslog(LOG_INFO, "leftover %dus", leftover); - rate = dt * RATE; - - if (rate < slew_rate && rate > -slew_rate) { - rate = (rate < 0L ? -slew_rate : slew_rate); - dt = abs(dt * (MILLION / slew_rate)); - period.it_value.tv_sec = dt / MILLION; - } else { - period.it_value.tv_sec = (LONG)PERIOD; - } -/* - * The adjustment will always be a multiple of the minimum adjustment. - * So the period will always be a whole second value. - */ - period.it_value.tv_usec = 0; - - if (verbose > 1) - printf("adjtimed: will be complete in %ds\n", period.it_value.tv_sec); - if (sysdebug > 1) - syslog(LOG_INFO, "will be complete in %ds", period.it_value.tv_sec); -/* - * adjust the clock rate - */ - if (SetClockRate((rate / slew_rate) + default_rate) == -1) { - syslog(LOG_ERR, "set clock rate: %m"); - perror("adjtimed: set clock rate"); - } -/* - * start the timer - * (do this after changing the rate because the period has been rounded down) - */ - period.it_interval.tv_sec = period.it_interval.tv_usec = 0L; - setitimer(ITIMER_REAL, &period, &remains); -/* - * return old delta - */ - if (olddelta) { - dt = ((remains.it_value.tv_sec * MILLION) + remains.it_value.tv_usec) * - oldrate; - olddelta->tv_sec = dt / MILLION; - olddelta->tv_usec = dt - (olddelta->tv_sec * MILLION); - } - - oldrate = (double)rate / (double)MILLION; -} /* AdjustClockRate */ - -static struct nlist nl[] = { -#ifdef hp9000s800 -#ifdef PRE7_0 - { "tick" }, -#else - { "old_tick" }, -#endif -#else - { "_old_tick" }, -#endif - { "" } -}; - -static int kmem; - -/* - * The return value is the clock rate in old_tick units or -1 if error. - */ -LONG -GetClockRate() -{ - LONG rate, mask; - - if (lseek(kmem, (LONG)nl[0].n_value, 0) == -1L) - return (-1L); - - mask = sigblock(sigmask(SIGALRM)); - - if (read(kmem, (caddr_t)&rate, sizeof(rate)) != sizeof(rate)) - rate = UNKNOWN_RATE; - - sigsetmask(mask); - return (rate); -} /* GetClockRate */ - -/* - * The argument is the new rate in old_tick units. - */ -SetClockRate(rate) - LONG rate; -{ - LONG mask; - - if (lseek(kmem, (LONG)nl[0].n_value, 0) == -1L) - return (-1); - - mask = sigblock(sigmask(SIGALRM)); - - if (write(kmem, (caddr_t)&rate, sizeof(rate)) != sizeof(rate)) { - sigsetmask(mask); - return (-1); - } - - sigsetmask(mask); - - if (rate != default_rate) { - if (verbose > 3) { - printf("adjtimed: clock rate (%lu) %ldus/s\n", rate, - (rate - default_rate) * slew_rate); - } - if (sysdebug > 3) { - syslog(LOG_INFO, "clock rate (%lu) %ldus/s", rate, - (rate - default_rate) * slew_rate); - } - } - - return (0); -} /* SetClockRate */ - -InitClockRate() -{ - if ((kmem = open("/dev/kmem", O_RDWR)) == -1) { - syslog(LOG_ERR, "open(/dev/kmem): %m"); - perror("adjtimed: open(/dev/kmem)"); - return (-1); - } - - nlist("/hp-ux", nl); - - if (nl[0].n_type == 0) { - fputs("adjtimed: /hp-ux has no symbol table\n", stderr); - syslog(LOG_ERR, "/hp-ux has no symbol table"); - return (-1); - } -/* - * Set the default to the system's original value - */ - default_rate = GetClockRate(); - if (default_rate == UNKNOWN_RATE) default_rate = DEFAULT_RATE; - slew_rate = (MILLION / default_rate); - - return (0); -} /* InitClockRate */ - -/* - * Reset the clock rate to the default value. - */ -void -ResetClockRate() -{ - struct itimerval it; - - it.it_value.tv_sec = it.it_value.tv_usec = 0L; - setitimer(ITIMER_REAL, &it, (struct itimerval *)0); - - if (verbose > 2) puts("adjtimed: resetting the clock"); - if (sysdebug > 2) syslog(LOG_INFO, "resetting the clock"); - - if (GetClockRate() != default_rate) { - if (SetClockRate(default_rate) == -1) { - syslog(LOG_ERR, "set clock rate: %m"); - perror("adjtimed: set clock rate"); - } - } - - oldrate = 0.0; -} /* ResetClockRate */ - -void -Cleanup() -{ - ResetClockRate(); - - if (msgctl(mqid, IPC_RMID, (struct msqid_ds *)0) == -1) { - if (errno != EINVAL) { - syslog(LOG_ERR, "remove message queue: %m"); - perror("adjtimed: remove message queue"); - } - } - - Exit(2); -} /* Cleanup */ - -void -Exit(status) - int status; -{ - syslog(LOG_ERR, "terminated"); - closelog(); - if (kmem != -1) close(kmem); - exit(status); -} /* Exit */ diff --git a/usr.sbin/xntpd/authstuff/Makefile.tmpl b/usr.sbin/xntpd/authstuff/Makefile.tmpl deleted file mode 100644 index ccafc5b..0000000 --- a/usr.sbin/xntpd/authstuff/Makefile.tmpl +++ /dev/null @@ -1,92 +0,0 @@ -# -# Makefile.tmpl -# -PROGRAM= authcert authspeed md5 -# -# authcert, authspeed - authentication utilities -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -DEFS= -DEFS_OPT= -DEFS_LOCAL= -COMPAT= -RESLIB= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a -MAKE= make -# -CRTOBJS= authcert.o -SPDOBJS= authspeed.o -PAROBJS= keyparity.o -IFPOBJS= makeIPFP.o -PC1OBJS= makePC1.o -PC2OBJS= makePC2.o -SPOBJS= makeSP.o -RNDOBJS= mkrandkeys.o -OIFOBJS= omakeIPFP.o -UNXOBJS= unixcert.o -MD5OBJS= md5driver.o - -SOURCE= authcert.c authspeed.c keyparity.c makeIPFP.c makePC1.c \ - makePC2.c makeSP.c mkrandkeys.c omakeIPFP.c unixcert.c md5driver.c - -all: $(PROGRAM) - -authcert: $(CRTOBJS) $(LIB) - $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB) $(COMPAT) $(RESLIB) - -authspeed: $(SPDOBJS) $(LIB) - $(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB) - -keyparity: $(PAROBJS) $(LIB) - $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB) $(COMPAT) $(RESLIB) - -makeIPFP: $(IFPOBJS) - $(CC) $(COPTS) -o $@ $(IFPOBJS) - -makePC1: $(PC1OBJS) - $(CC) $(COPTS) -o $@ $(PC1OBJS) - -makePC2: $(PC2OBJS) - $(CC) $(COPTS) -o $@ $(PC2OBJS) - -makeSP: $(SPOBJS) - $(CC) $(COPTS) -o $@ $(SPOBJS) - -mkrandkeys: $(RNDOBJS) $(LIB) - $(CC) $(COPTS) -o $@ $(RNDOBJS) $(LIB) - -omakeIPFP: $(OIFBJS) - $(CC) $(COPTS) -o $@ $(OIFBJS) - -unixcert: $(UNXBJS) - $(CC) $(COPTS) -o $@ $(UNXBJS) - -md5: $(MD5OBJS) - $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB) $(COMPAT) $(RESLIB) - -tags: - ctags *.c *.h - -install: - # Don't install any of this shit - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak keyparity \ - makeIPFP makePC1 makePC2 makeSP mkrandkeys omakeIPFP unixcert \ - lint.errs md5cert - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - diff --git a/usr.sbin/xntpd/clockstuff/Makefile.tmpl b/usr.sbin/xntpd/clockstuff/Makefile.tmpl deleted file mode 100644 index 9a0f9c1..0000000 --- a/usr.sbin/xntpd/clockstuff/Makefile.tmpl +++ /dev/null @@ -1,60 +0,0 @@ -# -# Makefile.tmpl,v 3.1 1993/07/06 01:05:19 jbj Exp -# -PROGRAM= propdelay -# -# Makefile for clock miscellany -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -DEFS= -DEFS_OPT= -DEFS_LOCAL= -COMPAT= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a -LINTLIB= ../lib/llib-llibntp.ln -MAKE= make -INSTALL= install -# -SOURCE= chutest.c propdelay.c -OBJS= propdelay.o -CHUOBJS= chutest.o -CLKOBJS= clktest.o - -all: $(PROGRAM) - -$(PROGRAM): $(OBJS) - $(CC) $(COPTS) -o $@ $(OBJS) -lm $(COMPAT) - -chutest: $(CHUOBJS) $(LIB) - $(CC) $(COPTS) -o $@ $(CHUOBJS) $(LIB) - -clktest: $(CLKOBJS) $(LIB) - $(CC) $(COPTS) -o $@ $(CLKOBJS) $(LIB) - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) -# $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -tags: - ctags *.c *.h - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak chutest clktest \ - lint.errs - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - diff --git a/usr.sbin/xntpd/compilers/README b/usr.sbin/xntpd/compilers/README deleted file mode 100644 index 46794dc..0000000 --- a/usr.sbin/xntpd/compilers/README +++ /dev/null @@ -1,5 +0,0 @@ -README file for directory ./compilers of the NTP Version 3 distribution - -This directory contains configuration files for the various machines -and compilers supported by the distribution. README and RELNOTES files in the -parent directory for directions on how to use these files. diff --git a/usr.sbin/xntpd/compilers/aux2.gcc b/usr.sbin/xntpd/compilers/aux2.gcc deleted file mode 100644 index 53672c4..0000000 --- a/usr.sbin/xntpd/compilers/aux2.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER=gcc -O -pipe -finline-functions -fomit-frame-pointer -D_POSIX_SOURCE diff --git a/usr.sbin/xntpd/compilers/aux3.gcc b/usr.sbin/xntpd/compilers/aux3.gcc deleted file mode 100644 index 53672c4..0000000 --- a/usr.sbin/xntpd/compilers/aux3.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER=gcc -O -pipe -finline-functions -fomit-frame-pointer -D_POSIX_SOURCE diff --git a/usr.sbin/xntpd/compilers/decosf1.gcc b/usr.sbin/xntpd/compilers/decosf1.gcc deleted file mode 100644 index d071385..0000000 --- a/usr.sbin/xntpd/compilers/decosf1.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= gcc -Wall -O2 -finline-functions diff --git a/usr.sbin/xntpd/compilers/domainos.cc b/usr.sbin/xntpd/compilers/domainos.cc deleted file mode 100644 index eb4dd62..0000000 --- a/usr.sbin/xntpd/compilers/domainos.cc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= cc diff --git a/usr.sbin/xntpd/compilers/hpux-adj.cc b/usr.sbin/xntpd/compilers/hpux-adj.cc deleted file mode 100644 index cf058ef..0000000 --- a/usr.sbin/xntpd/compilers/hpux-adj.cc +++ /dev/null @@ -1 +0,0 @@ -COMPILER=cc +O1 diff --git a/usr.sbin/xntpd/compilers/hpux-adj.gcc b/usr.sbin/xntpd/compilers/hpux-adj.gcc deleted file mode 100644 index e085a80..0000000 --- a/usr.sbin/xntpd/compilers/hpux-adj.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER=gcc -O2 diff --git a/usr.sbin/xntpd/compilers/hpux.cc b/usr.sbin/xntpd/compilers/hpux.cc deleted file mode 100644 index cf058ef..0000000 --- a/usr.sbin/xntpd/compilers/hpux.cc +++ /dev/null @@ -1 +0,0 @@ -COMPILER=cc +O1 diff --git a/usr.sbin/xntpd/compilers/hpux.gcc b/usr.sbin/xntpd/compilers/hpux.gcc deleted file mode 100644 index e085a80..0000000 --- a/usr.sbin/xntpd/compilers/hpux.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER=gcc -O2 diff --git a/usr.sbin/xntpd/compilers/hpux10+.cc b/usr.sbin/xntpd/compilers/hpux10+.cc deleted file mode 100644 index cf058ef..0000000 --- a/usr.sbin/xntpd/compilers/hpux10+.cc +++ /dev/null @@ -1 +0,0 @@ -COMPILER=cc +O1 diff --git a/usr.sbin/xntpd/compilers/irix4.cc b/usr.sbin/xntpd/compilers/irix4.cc deleted file mode 100644 index c5ae3af..0000000 --- a/usr.sbin/xntpd/compilers/irix4.cc +++ /dev/null @@ -1,2 +0,0 @@ -COMPILER= cc -cckr -COPTS= -O2 diff --git a/usr.sbin/xntpd/compilers/linux.gcc b/usr.sbin/xntpd/compilers/linux.gcc deleted file mode 100644 index 1051fcb..0000000 --- a/usr.sbin/xntpd/compilers/linux.gcc +++ /dev/null @@ -1,2 +0,0 @@ -COMPILER= gcc -DUSE_PROTOTYPES -Wall -COPTS= -O2 -finline-functions -fomit-frame-pointer diff --git a/usr.sbin/xntpd/compilers/mips.cc b/usr.sbin/xntpd/compilers/mips.cc deleted file mode 100644 index dcd8697..0000000 --- a/usr.sbin/xntpd/compilers/mips.cc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= cc -systype bsd43 diff --git a/usr.sbin/xntpd/compilers/sinix-m.cc b/usr.sbin/xntpd/compilers/sinix-m.cc deleted file mode 100644 index e4712dc..0000000 --- a/usr.sbin/xntpd/compilers/sinix-m.cc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= /usr/ucb/cc diff --git a/usr.sbin/xntpd/compilers/sinix-m.gcc b/usr.sbin/xntpd/compilers/sinix-m.gcc deleted file mode 100644 index fe6af58..0000000 --- a/usr.sbin/xntpd/compilers/sinix-m.gcc +++ /dev/null @@ -1,2 +0,0 @@ -COMPILER= gcc -traditional - diff --git a/usr.sbin/xntpd/compilers/sunos4.bsd.cc b/usr.sbin/xntpd/compilers/sunos4.bsd.cc deleted file mode 100644 index eb4dd62..0000000 --- a/usr.sbin/xntpd/compilers/sunos4.bsd.cc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= cc diff --git a/usr.sbin/xntpd/compilers/sunos4.bsd.gcc b/usr.sbin/xntpd/compilers/sunos4.bsd.gcc deleted file mode 100644 index 09e841a..0000000 --- a/usr.sbin/xntpd/compilers/sunos4.bsd.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= gcc -DUSE_PROTOTYPES -Wall -O2 -finline-functions -fdelayed-branch -fomit-frame-pointer diff --git a/usr.sbin/xntpd/compilers/sunos4.posix.gcc b/usr.sbin/xntpd/compilers/sunos4.posix.gcc deleted file mode 100644 index 09e841a..0000000 --- a/usr.sbin/xntpd/compilers/sunos4.posix.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= gcc -DUSE_PROTOTYPES -Wall -O2 -finline-functions -fdelayed-branch -fomit-frame-pointer diff --git a/usr.sbin/xntpd/compilers/sunos5.1.gcc b/usr.sbin/xntpd/compilers/sunos5.1.gcc deleted file mode 100644 index fe6af58..0000000 --- a/usr.sbin/xntpd/compilers/sunos5.1.gcc +++ /dev/null @@ -1,2 +0,0 @@ -COMPILER= gcc -traditional - diff --git a/usr.sbin/xntpd/compilers/sunos5.2.gcc b/usr.sbin/xntpd/compilers/sunos5.2.gcc deleted file mode 100644 index fe6af58..0000000 --- a/usr.sbin/xntpd/compilers/sunos5.2.gcc +++ /dev/null @@ -1,2 +0,0 @@ -COMPILER= gcc -traditional - diff --git a/usr.sbin/xntpd/compilers/ultrix.bsd.cc b/usr.sbin/xntpd/compilers/ultrix.bsd.cc deleted file mode 100644 index 06f6883..0000000 --- a/usr.sbin/xntpd/compilers/ultrix.bsd.cc +++ /dev/null @@ -1,2 +0,0 @@ -COMPILER= cc -Olimit 800 - diff --git a/usr.sbin/xntpd/compilers/ultrix.bsd.gcc b/usr.sbin/xntpd/compilers/ultrix.bsd.gcc deleted file mode 100644 index 5ed9d55..0000000 --- a/usr.sbin/xntpd/compilers/ultrix.bsd.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= gcc -Wall -O2 -finline-functions -fdelayed-branch diff --git a/usr.sbin/xntpd/compilers/ultrix.posix.cc b/usr.sbin/xntpd/compilers/ultrix.posix.cc deleted file mode 100644 index 06f6883..0000000 --- a/usr.sbin/xntpd/compilers/ultrix.posix.cc +++ /dev/null @@ -1,2 +0,0 @@ -COMPILER= cc -Olimit 800 - diff --git a/usr.sbin/xntpd/compilers/ultrix.posix.gcc b/usr.sbin/xntpd/compilers/ultrix.posix.gcc deleted file mode 100644 index 5ed9d55..0000000 --- a/usr.sbin/xntpd/compilers/ultrix.posix.gcc +++ /dev/null @@ -1 +0,0 @@ -COMPILER= gcc -Wall -O2 -finline-functions -fdelayed-branch diff --git a/usr.sbin/xntpd/gadget/README b/usr.sbin/xntpd/gadget/README deleted file mode 100644 index 35bbc18..0000000 --- a/usr.sbin/xntpd/gadget/README +++ /dev/null @@ -1,84 +0,0 @@ -Gadget Box - -The gadget box is a 5"x3"x2" aluminum minibox containing level-converter -and modem circuitry and intended for use with host time servers -supporting the Network Time Protocol. It includes two subcircuits. One -of these converts a TTL positive edge into a fixed-width pulse at EIA -levels and is for use with a timecode receiver or oscillator including a -TTL one-pulse-per-second (1-pps) output. The other converts the timecode -modulation broadcast by Canadian time/frequency standard station CHU -into a 300-bps serial character stream at EIA levels and is for use with -the clk_chu.c or clk_chu_STREAMS.c modules in the xntp3 distribution. - -This archive contains complete construction details for the gadget box, -including schematic, parts list and artwork for a two-sided, printed- -circuit board. All files are in PostScript, with the exception of this -file and an information file, which are in ASCII. The artwork is in the -1:1 scale and is suitable for direct printing on photographic resist for -each side of the board. While a plated-through-holes process is most -convenient, it is possible to bridge the two sides using soldered wires -where necessary. - -Following is a brief functional description of the device. See the -schematic diagram gadget.s01 for reference. The audio output of a -shortwave radio tuned to CHU at 3330, 7335 or 14670 kHz is connected to -J2. A level of at least 30 mV peak-peak is required, such as provided by -the recorder output on many receivers. The input level is adjusted by -potentiometer R8 so that the timecode modulation broadcast at 31-39 -seconds past the minute reliably lights green LED1, but the signals -broadcast during other seconds of the minute do not. - -Opamp U4A provides low-impedance drive for the bridged-tee bandpass -filter U4B. The filter has a bandpass of about 600 Hz at the 6-dB points -and a center frequency of about 2150 Hz. It is designed to avoid -aliasing effects with receivers of relatively wide bandpass -characteristics. The modem itself is implemented by U2 and its -associated circuitry. Resistors R4 and R1 are a 40-dB pad which matches -the filter output to the modem input. U2 is a TTL/EIA level converter -with integral power supply for bipolar signals. The modem output is -available at pin 3 (receive data) of DB25 connector J1. - -The TTL 1-pps signal is connected via J3 to a retriggerable one-shot -U3A, which generates a TTL pulse of width determined by potentiometer -R7. The pulse width is determined by the bit rate of the attached serial -port. In the common case the width is one bit-time, such as 26 us for -38.4 kbps, for example. This appears to the port as a single start bit -of zero followed by eight bits of ones and a stop bit of one. The second -one-shot U3B generates a 200-ms pulse suitable for driving the amber -LED3 as a visual monitor. The output of U3A is converted to EIA levels -by U1 and appears at pin 12 (secondary receive data) of J1. - -If only the 1-pps circuit is required, U2 and U4 can be deleted and the -gadget box powered from the EIA modem-control signal at pin 20 (terminal -ready) of J1, assuming this signal is placed in the on (positive -voltage) condition by the computer program. J1 is wired to keep most -finicky UARTs and terminal-driver programs happy. If the CHU circuit is -required, an external 12-volt AC transformer or 9-12-volt DC supply -connected to J4 is required. Red LED2 indicates power is supplied to the -box. - -Following is a list of files included in this archive. All files are in -PostScript, except this one (README) and the information file -(gadget.lst), which are in ASCII. The files gadget.s01, gadget.s02 and -gadget.lst were generated using the Schema schematic-capture program -from Omation. The printed-circuit files *.lpr were generated using -Schema-PCB, also from Omation. - -Files ----------------------------------------- -README this file -gadget.s01 circuit schematic -gadget.s02 minibox assembly drawing -gadget.lst net list, pin list, parts list, etc. -gen0102.lpr pcb x-ray diagram -art01.lpr pcb artword side 1 -art02.lpr pcb artwork side 2 -adt0127.lpr pcb assembly drawing -dd0124.lpr pcb drill drawing -sm0228.lpr pcb solder mask (side 2) -sst0126.lpr pcb silkscreen mask (side 1) - -Dave Mills -University of Delaware -6 July 1992 -Revised 21 August 1992 diff --git a/usr.sbin/xntpd/gadget/adt0127.lpr b/usr.sbin/xntpd/gadget/adt0127.lpr deleted file mode 100644 index f0359e8..0000000 --- a/usr.sbin/xntpd/gadget/adt0127.lpr +++ /dev/null @@ -1,1427 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: PADS Postscript Driver Header -%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851 -%%CreationDate: 06/08/90 -%%For: CAD Software, Littleton, MA -%%EndComments -%%BeginProcSet: Markers 1.0 0 -% marker attributes -/MAttr_Width 1 def -/MAttr_Size 0 def -/MAttr_Type /M1 def -% procedures -/M1 { %def -% draw marker 1: plus -% Stack: - M1 - - -2 0 rmoveto - 4 0 rlineto - -2 2 rmoveto - 0 -4 rlineto -} bind def -/M2 { %def -% draw marker 2: cross -% Stack: - M2 - - -2 -2 rmoveto - 4 4 rlineto - -4 0 rmoveto - 4 -4 rlineto -} bind def -/M3 { %def -% draw marker 3: square -% Stack: - M3 - - 0 2 rlineto - 2 0 rlineto - 0 -4 rlineto - -4 0 rlineto - 0 4 rlineto - 2 0 rlineto -} bind def -/M4 { %def -% draw marker 4: diamond -% Stack: - M4 - - 0 2 rlineto - 2 -2 rlineto - -2 -2 rlineto - -2 2 rlineto - 2 2 rlineto -} bind def -/M5 { %def -% draw marker 5: hourglass -% Stack: - M5 - - 2 2 rlineto - -4 0 rlineto - 4 -4 rlineto - -4 0 rlineto - 2 2 rlineto -} bind def -/M6 { %def -% draw marker 6: bowtie -% Stack: - M6 - - 2 2 rlineto - 0 -4 rlineto - -4 4 rlineto - 0 -4 rlineto - 2 2 rlineto -} bind def -/M7 { %def -% draw marker 7: small plus (goes with char marker) -% Stack: - M7 - - -1 0 rmoveto - 2 0 rlineto - -1 1 rmoveto - 0 -2 rlineto -} bind def -/Marker { %def -% Command from driver: draw marker -% STACK: x y Marker - - MAttr_Size 0 gt - { - gsave - moveto - MAttr_Size 4 div dup scale - MAttr_Type load exec - 4 MAttr_Size div dup scale - MAttr_Width setlinewidth - stroke - grestore - } if -} def -%%EndProcSet: Markers 1.0 0 -%%BeginProcSet: Lib 1.0 0 -/sg { %def -% Command from driver: set the gray scale 0 - 100 -% STACK: greylevel sg - 100 div dup setgray /glev exch def -} bind def -/Circle { %def -% draw a circle -% STACK: x y radius Circle - - 0 360 arc -} bind def -/RndAper { %def -% select a round aperture -% STACK: - RndAper - - 1 setlinejoin - 1 setlinecap -} bind def -/SqrAper { %def -% select a square aperture -% STACK: - SqrAper - - 0 setlinejoin - 2 setlinecap -} bind def -/Line { %def -% draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] Line - - 3 1 roll - moveto - true - exch - % This pushes the x then the y then does lineto - { exch { false } { lineto true } ifelse } forall - pop -} bind def -/Clipto { %def -% set clipping rectangle from 0,0 to new values -% STACK: x y Clipto - - 0 0 moveto - dup 0 exch lineto - 2 copy lineto - pop - 0 lineto - closepath - clip - newpath -} bind def -/Clip4 { %def -% set clipping rectangle from xmin,ymin to xmax,ymax -% STACK: xmin ymin xmax ymax Clip4 - - 4 copy pop pop moveto - 4 copy pop exch lineto pop - 2 copy lineto - exch pop exch pop lineto - closepath - clip - newpath -} bind def -%%EndProcSet: Lib 1.0 0 -%%BeginProcSet: Lines 1.0 0 -% line attributes % -/LAttr_Width 1 def -% line procedures -/PLine { %def -% Cammand from driver: draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - LAttr_Width setlinewidth - stroke -} bind def % PLine -/Char { %def -% Command from driver: draw a character at the current position -% STACK: type x y stroke_array Char - -% stroke array -- [ stroke1 stroke2 ... stroken ] -% stroke -- connected staight lines -% type = 0 if text 1 if marker - gsave - 4 1 roll - translate - 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth - { - dup length 2 gt - { - dup dup 0 get exch 1 get % get starting point - 3 -1 roll % put x y before array - dup length 2 sub 2 exch getinterval % delete first items from array - Line - stroke - } - { - aload pop currentlinewidth 2 div Circle fill - } ifelse - } forall - grestore -} bind def % Char -/PArc { %def -% Command from driver: draw an arc -% STACK: x y radius startangle deltaangle Arc - - 10 div exch 10 div exch - 2 copy pop add - arc - LAttr_Width setlinewidth - stroke -} bind def -/PCircle { %def -% Command from driver: draw an circle -% STACK: x y radius PCircle - - Circle - LAttr_Width setlinewidth - stroke -} bind def -%%EndProcSet: Lines 1.0 0 -%%BeginProcSet: Polygon 1.0 0 -% polygon attributes % -/PAttr_ExtWidth 1 def -/PAttr_IntWidth 1 def -/PAttr_Grid 1 def -% polygon procedures -/LoopSet { %def -% set up for loop condition -% STACK: start end LoopSet low gridwidth high - 2 copy lt { exch } if - % make grid line up to absolute coordinates - PAttr_Grid div truncate PAttr_Grid mul exch - PAttr_Grid exch -} bind def -/Hatch { %def -% draw cross hatch pattern in current path -% STACK: - Hatch - - pathbbox - /ury exch def - /urx exch def - /lly exch def - /llx exch def - clip - newpath - llx urx LoopSet - { % x loop - dup lly exch ury moveto lineto - } for - lly ury LoopSet - { % y loop - llx exch dup urx exch moveto lineto - } for - PAttr_IntWidth setlinewidth - stroke -} bind def -/PPoly { %def -% Command from driver: draw a plygon -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - closepath - gsave - PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse - grestore - PAttr_ExtWidth setlinewidth - stroke -} bind def -%%EndProcSet: Polygon 1.0 0 -%%BeginProcSet: Text 1.0 0 -% text attributes % -/TAttr_Mirr 0 def -/TAttr_Orient 0 def -/TAttr_Width 1 def -% text procedures -/Text { %def -% Command from driver: Draw text -% STACK: x y width string Text - - gsave - 4 2 roll - translate - TAttr_Mirr 0 gt - { - -1 1 scale - } if - TAttr_Orient rotate - 0 0 moveto - dup length dup 1 gt - { - exch dup stringwidth pop - 4 -1 roll - exch 2 copy - lt - { - div 1 scale show - } - { - sub - 3 -1 roll 1 sub div - 0 3 -1 roll ashow - } - ifelse - } - { - pop - show - } ifelse - grestore -} bind def -%%EndProcSet: Text 1.0 0 -%%BeginProcSet: FlashSymbols 1.0 0 -% flash symbol attributes % -/FAttr_Type /PRndPad def -/FAttr_Width 0 def -/FAttr_Length 1 def -/FAttr_Orient 0 def -% flash symbol procedures -/PRndPad { %def -% Command from driver: draw an circular pad -% STACK: - PCirclePad - - FAttr_Width dup scale - 0 0 .5 Circle - fill -} bind def -/PSqrPad { %def -% Draw an Square pad -% STACK: - PRectPad - - FAttr_Width dup scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/PRectPad { %def -% Draw an rectangular pad -% STACK: - PRectPad - - FAttr_Length FAttr_Width scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/POvalPad { %def -% Draw an oval pad -% STACK: - POvalPad - - FAttr_Width setlinewidth - FAttr_Length FAttr_Width sub 2 div dup - neg 0 moveto - 0 lineto - RndAper - stroke -} bind def -/Anl { %def - 0 0 .5 Circle - fill - FAttr_Length FAttr_Width lt - { % inner circle - 0 0 - FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse - 2 div Circle - 1 setgray - fill - glev setgray - } if -} bind def -/PAnlPad { %def -% Draw an annular pad -% STACK: - PAnlPad - - FAttr_Width dup scale - Anl -} bind def -/PRelPad { %def -% Draw an thermal relief pad -% STACK: - PRelPad - - PAnlPad - 1 setgray - .17 setlinewidth - 0 setlinecap % the x - 45 rotate - .5 0 moveto -.5 0 lineto - 0 .5 moveto 0 -.5 lineto - stroke - glev setgray -} bind def -/Flash { %def -% Command from driver: Flash a symbol -% STACK: x y Flash - - FAttr_Width 0 gt - { - gsave - translate - FAttr_Orient rotate - FAttr_Type load exec - grestore - } if -} def -%%EndProcSet: FlashSymbols 1.0 0 -%%BeginProcSet: SetAttr 1.0 0 -/SetLine { %def -% Set the width of the lines -% STACK: linewidth SetLine - - /LAttr_Width exch def - RndAper -} bind def -/SetPoly { %def -% Set attribute of polygon -% STACK: external_width internal_grid_width grid_spacing SetPoly - - /PAttr_Grid exch def - /PAttr_IntWidth exch def - /PAttr_ExtWidth exch def - RndAper -} bind def -/SetFlash { %def -% Set Attributed of flash pad -% STACK: orientation_angle length width aperture_type SetFlash - - /FAttr_Type exch def - FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or - { SqrAper } { RndAper } ifelse - /FAttr_Width exch def - /FAttr_Length exch def - /FAttr_Orient exch 10 div def -} bind def -/SetMkr { %def -% Set attributes of markers -% STACK: linewidth size type SetMkr - - /MAttr_Type exch def - /MAttr_Size exch def - /MAttr_Width exch def - RndAper -} bind def -/SetText1 { %def -% Set attributes of text -% STACK: fontname height orient mirror SetMkr - - /TAttr_Mirr exch def - /TAttr_Orient exch 10 div def - exch findfont exch scalefont setfont - RndAper -} bind def -/SetText2 { %def -% Set attributes of text -% STACK: linewidth height mirror orient SetMkr - - /TAttr_Width exch def - RndAper -} bind def -%%EndProcSet: SetAttr 1.0 0 -%%BeginProcSet: Initialize 1.0 0 -/Init { %def -% Initialize the driver -% STACK: Init - - 72 1000 div dup scale % Scale to 1/1000 inch - 250 250 translate % make origin 1/4 inch from bottom left - 1.5 setmiterlimit 1 RndAper % set line defaults - 0 setgray % set color default - /glev 0 def -} def -%%EndProcSet: Initialize 1.0 0 -%%EndProlog -/Helvetica findfont 12 scalefont setfont -35 760 moveto -(gadget.job - Fri Aug 21 03:35:14 1992) show -gsave -Init -8000 10500 Clipto -4025 2626 translate -0 rotate -1 1 div dup scale -75 sg -50 sg -25 sg -0 sg -10 SetLine --1350 0 [ -1350 4900 ] PLine --1350 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 0 ] PLine -1350 0 [ -1350 0 ] PLine -10 SetLine --1350 4700 [ -1350 4900 ] PLine --1350 4900 [ -1150 4900 ] PLine -10 SetLine -1150 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 4700 ] PLine -10 SetLine -1150 0 [ 1350 0 ] PLine -1350 0 [ 1350 200 ] PLine -10 SetLine --1350 200 [ -1350 0 ] PLine --1350 0 [ -1150 0 ] PLine -10 SetLine -400 5100 [ 1350 5100 ] PLine -10 SetLine -1350 5100 [ 1300 5150 ] PLine -10 SetLine -1350 5100 [ 1300 5050 ] PLine -10 SetLine --1525 4900 [ -1375 4900 ] PLine -10 SetLine --1350 5100 [ -375 5100 ] PLine -10 SetLine --1350 5100 [ -1300 5150 ] PLine -10 SetLine --1350 5100 [ -1300 5050 ] PLine -10 SetLine --1542 0 [ -1367 0 ] PLine -10 SetLine --1500 0 [ -1500 1965 ] PLine -10 SetLine --1500 0 [ -1450 50 ] PLine -10 SetLine --1500 0 [ -1550 50 ] PLine -10 SetLine --1500 4900 [ -1450 4850 ] PLine -10 SetLine --1500 4900 [ -1550 4850 ] PLine -10 SetLine -1350 5150 [ 1350 4925 ] PLine -10 SetLine --1350 5150 [ -1350 4925 ] PLine -10 SetLine --1500 4900 [ -1500 2750 ] PLine -10 SetLine --1050 1400 [ -1050 1200 ] PLine --1050 1200 [ -1150 1200 ] PLine --1150 1200 [ -1150 1400 ] PLine --1150 1400 [ -1050 1400 ] PLine -10 SetLine --50 3300 [ -100 3300 ] PLine -10 SetLine -250 3235 [ -50 3235 ] PLine --50 3235 [ -50 3365 ] PLine --50 3365 [ 250 3365 ] PLine -250 3365 [ 250 3235 ] PLine -10 SetLine -300 3300 [ 250 3300 ] PLine -10 SetLine -250 3100 [ 300 3100 ] PLine -10 SetLine --50 3165 [ 250 3165 ] PLine -250 3165 [ 250 3035 ] PLine -250 3035 [ -50 3035 ] PLine --50 3035 [ -50 3165 ] PLine -10 SetLine --100 3100 [ -50 3100 ] PLine -10 SetLine --50 3500 [ -100 3500 ] PLine -10 SetLine -250 3435 [ -50 3435 ] PLine --50 3435 [ -50 3565 ] PLine --50 3565 [ 250 3565 ] PLine -250 3565 [ 250 3435 ] PLine -10 SetLine -300 3500 [ 250 3500 ] PLine -10 SetLine --1150 3700 [ -1200 3700 ] PLine -10 SetLine --450 3575 [ -1150 3575 ] PLine --1150 3575 [ -1150 3825 ] PLine --1150 3825 [ -450 3825 ] PLine --450 3825 [ -450 3575 ] PLine -10 SetLine --400 3700 [ -450 3700 ] PLine -10 SetLine --850 1300 [ -900 1300 ] PLine -10 SetLine --150 1175 [ -850 1175 ] PLine --850 1175 [ -850 1425 ] PLine --850 1425 [ -150 1425 ] PLine --150 1425 [ -150 1175 ] PLine -10 SetLine --100 1300 [ -150 1300 ] PLine -10 SetLine -550 2800 [ 600 2800 ] PLine -10 SetLine --150 2925 [ 550 2925 ] PLine -550 2925 [ 550 2675 ] PLine -550 2675 [ -150 2675 ] PLine --150 2675 [ -150 2925 ] PLine -10 SetLine --200 2800 [ -150 2800 ] PLine -10 SetLine --450 2800 [ -400 2800 ] PLine -10 SetLine --1150 2925 [ -450 2925 ] PLine --450 2925 [ -450 2675 ] PLine --450 2675 [ -1150 2675 ] PLine --1150 2675 [ -1150 2925 ] PLine -10 SetLine --1200 2800 [ -1150 2800 ] PLine -10 SetLine -0 2150 [ 0 2100 ] PLine -10 SetLine -65 2450 [ 65 2150 ] PLine -65 2150 [ -65 2150 ] PLine --65 2150 [ -65 2450 ] PLine --65 2450 [ 65 2450 ] PLine -10 SetLine -0 2500 [ 0 2450 ] PLine -10 SetLine --1200 3050 [ -1200 3000 ] PLine -10 SetLine --1135 3350 [ -1135 3050 ] PLine --1135 3050 [ -1265 3050 ] PLine --1265 3050 [ -1265 3350 ] PLine --1265 3350 [ -1135 3350 ] PLine -10 SetLine --1200 3400 [ -1200 3350 ] PLine -10 SetLine --950 2250 [ -1150 2250 ] PLine --1150 2250 [ -1150 2350 ] PLine --1150 2350 [ -950 2350 ] PLine --950 2350 [ -950 2250 ] PLine -10 SetLine --1150 2550 [ -950 2550 ] PLine --950 2550 [ -950 2450 ] PLine --950 2450 [ -1150 2450 ] PLine --1150 2450 [ -1150 2550 ] PLine -10 SetLine -850 2850 [ 1050 2850 ] PLine -1050 2850 [ 1050 2750 ] PLine -1050 2750 [ 850 2750 ] PLine -850 2750 [ 850 2850 ] PLine -10 SetLine -500 1900 [ 450 1900 ] PLine -10 SetLine -1200 1775 [ 500 1775 ] PLine -500 1775 [ 500 2025 ] PLine -500 2025 [ 1200 2025 ] PLine -1200 2025 [ 1200 1775 ] PLine -10 SetLine -1250 1900 [ 1200 1900 ] PLine -10 SetLine --1150 900 [ -1200 900 ] PLine -10 SetLine --150 725 [ -1150 725 ] PLine --1150 725 [ -1150 1075 ] PLine --1150 1075 [ -150 1075 ] PLine --150 1075 [ -150 725 ] PLine -10 SetLine --100 900 [ -150 900 ] PLine -10 SetLine --1050 4000 [ -1100 4000 ] PLine -10 SetLine --750 3935 [ -1050 3935 ] PLine --1050 3935 [ -1050 4065 ] PLine --1050 4065 [ -750 4065 ] PLine --750 4065 [ -750 3935 ] PLine -10 SetLine --700 4000 [ -750 4000 ] PLine -10 SetLine -750 3000 [ 700 3000 ] PLine -10 SetLine -1050 2935 [ 750 2935 ] PLine -750 2935 [ 750 3065 ] PLine -750 3065 [ 1050 3065 ] PLine -1050 3065 [ 1050 2935 ] PLine -10 SetLine -1100 3000 [ 1050 3000 ] PLine -10 SetLine --250 3750 [ -50 3750 ] PLine --50 3750 [ -50 3650 ] PLine --50 3650 [ -250 3650 ] PLine --250 3650 [ -250 3750 ] PLine -10 SetLine -200 900 [ 150 900 ] PLine -10 SetLine -270 950 [ 270 850 ] PLine -10 SetLine -200 850 [ 200 950 ] PLine -200 950 [ 500 950 ] PLine -500 950 [ 500 850 ] PLine -500 850 [ 200 850 ] PLine -10 SetLine -500 900 [ 550 900 ] PLine -10 SetLine -250 850 [ 250 950 ] PLine -10 SetLine -260 850 [ 260 950 ] PLine -10 SetLine -600 3700 [ 650 3700 ] PLine -10 SetLine -530 3650 [ 530 3750 ] PLine -10 SetLine -600 3750 [ 600 3650 ] PLine -600 3650 [ 300 3650 ] PLine -300 3650 [ 300 3750 ] PLine -300 3750 [ 600 3750 ] PLine -10 SetLine -300 3700 [ 250 3700 ] PLine -10 SetLine -550 3750 [ 550 3650 ] PLine -10 SetLine -540 3750 [ 540 3650 ] PLine -10 SetLine --750 550 100 PCircle -10 SetLine -0 550 100 PCircle -10 SetLine -750 550 100 PCircle -10 SetLine -768 5000 [ 768 5248 ] PLine -768 5248 [ -768 5248 ] PLine --768 5248 [ -768 5000 ] PLine -10 SetLine -1058 4900 [ -1058 4900 ] PLine -10 SetLine -1058 5000 [ 1058 4408 ] PLine -1058 4408 [ -1058 4408 ] PLine --1058 4408 [ -1058 5000 ] PLine --1058 5000 [ 1058 5000 ] PLine -10 SetLine -1058 5000 [ -1058 5000 ] PLine -10 SetLine -768 4900 [ 768 4408 ] PLine -10 SetLine --768 4900 [ -768 4408 ] PLine -10 SetLine -900 200 [ 1100 200 ] PLine -1100 200 [ 1100 100 ] PLine -1100 100 [ 900 100 ] PLine -900 100 [ 900 200 ] PLine -10 SetLine --100 200 [ 100 200 ] PLine -100 200 [ 100 100 ] PLine -100 100 [ -100 100 ] PLine --100 100 [ -100 200 ] PLine -10 SetLine --1100 200 [ -900 200 ] PLine --900 200 [ -900 100 ] PLine --900 100 [ -1100 100 ] PLine --1100 100 [ -1100 200 ] PLine -10 SetLine -916 3493 [ 900 3456 ] PLine -900 3456 [ 939 3442 ] PLine -939 3442 [ 953 3477 ] PLine -10 SetLine -988 3612 140 PCircle -10 SetLine --1000 1529 [ -1039 1490 ] PLine -10 SetLine --1000 1490 [ -1000 1910 ] PLine --1000 1910 [ -1300 1910 ] PLine --1300 1910 [ -1300 1490 ] PLine --1300 1490 [ -1000 1490 ] PLine -10 SetLine -200 1730 [ 200 1670 ] PLine -200 1670 [ 0 1670 ] PLine -0 1670 [ 0 1730 ] PLine -0 1730 [ 200 1730 ] PLine -10 SetLine -200 1700 [ 260 1700 ] PLine -10 SetLine -0 1700 [ -50 1700 ] PLine -10 SetLine -300 1270 [ 300 1330 ] PLine -300 1330 [ 500 1330 ] PLine -500 1330 [ 500 1270 ] PLine -500 1270 [ 300 1270 ] PLine -10 SetLine -300 1300 [ 240 1300 ] PLine -10 SetLine -500 1300 [ 550 1300 ] PLine -10 SetLine --600 2270 [ -600 2330 ] PLine --600 2330 [ -400 2330 ] PLine --400 2330 [ -400 2270 ] PLine --400 2270 [ -600 2270 ] PLine -10 SetLine --600 2300 [ -660 2300 ] PLine -10 SetLine --400 2300 [ -350 2300 ] PLine -10 SetLine --800 4230 [ -800 4170 ] PLine --800 4170 [ -1000 4170 ] PLine --1000 4170 [ -1000 4230 ] PLine --1000 4230 [ -800 4230 ] PLine -10 SetLine --800 4200 [ -740 4200 ] PLine -10 SetLine --1000 4200 [ -1050 4200 ] PLine -10 SetLine -1000 3230 [ 1000 3170 ] PLine -1000 3170 [ 800 3170 ] PLine -800 3170 [ 800 3230 ] PLine -800 3230 [ 1000 3230 ] PLine -10 SetLine -1000 3200 [ 1060 3200 ] PLine -10 SetLine -800 3200 [ 750 3200 ] PLine -10 SetLine --600 2470 [ -600 2530 ] PLine --600 2530 [ -400 2530 ] PLine --400 2530 [ -400 2470 ] PLine --400 2470 [ -600 2470 ] PLine -10 SetLine --600 2500 [ -660 2500 ] PLine -10 SetLine --400 2500 [ -350 2500 ] PLine -10 SetLine --600 2070 [ -600 2130 ] PLine --600 2130 [ -400 2130 ] PLine --400 2130 [ -400 2070 ] PLine --400 2070 [ -600 2070 ] PLine -10 SetLine --600 2100 [ -660 2100 ] PLine -10 SetLine --400 2100 [ -350 2100 ] PLine -10 SetLine --900 2130 [ -900 2070 ] PLine --900 2070 [ -1100 2070 ] PLine --1100 2070 [ -1100 2130 ] PLine --1100 2130 [ -900 2130 ] PLine -10 SetLine --900 2100 [ -840 2100 ] PLine -10 SetLine --1100 2100 [ -1150 2100 ] PLine -10 SetLine -500 1130 [ 500 1070 ] PLine -500 1070 [ 300 1070 ] PLine -300 1070 [ 300 1130 ] PLine -300 1130 [ 500 1130 ] PLine -10 SetLine -500 1100 [ 560 1100 ] PLine -10 SetLine -300 1100 [ 250 1100 ] PLine -10 SetLine -1000 2521 [ 1039 2560 ] PLine -10 SetLine -1000 2560 [ 1000 2140 ] PLine -1000 2140 [ 1300 2140 ] PLine -1300 2140 [ 1300 2560 ] PLine -1300 2560 [ 1000 2560 ] PLine -10 SetLine -0 1870 [ 0 1930 ] PLine -0 1930 [ 200 1930 ] PLine -200 1930 [ 200 1870 ] PLine -200 1870 [ 0 1870 ] PLine -10 SetLine -0 1900 [ -60 1900 ] PLine -10 SetLine -200 1900 [ 250 1900 ] PLine -10 SetLine -100 1470 [ 100 1530 ] PLine -100 1530 [ 300 1530 ] PLine -300 1530 [ 300 1470 ] PLine -300 1470 [ 100 1470 ] PLine -10 SetLine -100 1500 [ 40 1500 ] PLine -10 SetLine -300 1500 [ 350 1500 ] PLine -10 SetLine --950 1650 [ -250 1650 ] PLine --250 1650 [ -250 1850 ] PLine --250 1850 [ -950 1850 ] PLine --950 1850 [ -950 1775 ] PLine --950 1775 [ -900 1775 ] PLine --900 1775 [ -900 1725 ] PLine --900 1725 [ -950 1725 ] PLine --950 1725 [ -950 1650 ] PLine -10 SetLine -150 2250 [ 950 2250 ] PLine -950 2250 [ 950 2450 ] PLine -950 2450 [ 150 2450 ] PLine -150 2450 [ 150 2375 ] PLine -150 2375 [ 200 2375 ] PLine -200 2375 [ 200 2325 ] PLine -200 2325 [ 150 2325 ] PLine -150 2325 [ 150 2250 ] PLine -10 SetLine -150 3950 [ 1150 3950 ] PLine -1150 3950 [ 1150 4150 ] PLine -1150 4150 [ 150 4150 ] PLine -150 4150 [ 150 4075 ] PLine -150 4075 [ 200 4075 ] PLine -200 4075 [ 200 4025 ] PLine -200 4025 [ 150 4025 ] PLine -150 4025 [ 150 3950 ] PLine -10 SetLine --1050 3150 [ -250 3150 ] PLine --250 3150 [ -250 3350 ] PLine --250 3350 [ -1050 3350 ] PLine --1050 3350 [ -1050 3275 ] PLine --1050 3275 [ -1000 3275 ] PLine --1000 3275 [ -1000 3225 ] PLine --1000 3225 [ -1050 3225 ] PLine --1050 3225 [ -1050 3150 ] PLine -10 SetLine -800 1075 [ 800 1675 ] PLine -800 1675 [ 1200 1675 ] PLine -1200 1675 [ 1200 1075 ] PLine -1200 1075 [ 800 1075 ] PLine -10 SetLine -875 1075 [ 875 825 ] PLine -875 825 [ 925 825 ] PLine -925 825 [ 925 1075 ] PLine -10 SetLine -1075 1075 [ 1075 825 ] PLine -1075 825 [ 1125 825 ] PLine -1125 825 [ 1125 1075 ] PLine -10 SetLine -975 1075 [ 975 825 ] PLine -975 825 [ 1025 825 ] PLine -1025 825 [ 1025 1075 ] PLine -10 SetLine -996 1549 75 PCircle -10 SetLine -800 1425 [ 1200 1425 ] PLine -10 SetLine --100 4200 [ -25 4200 ] PLine -10 SetLine --100 3900 [ -100 4300 ] PLine --100 4300 [ -500 4300 ] PLine --500 4300 [ -500 3900 ] PLine --500 3900 [ -100 3900 ] PLine -10 SetLine --100 4000 [ -25 4000 ] PLine -10 SetLine --1100 450 100 PCircle -10 SetLine -1100 450 100 PCircle -10 SetLine -1000 3430 [ 1000 3370 ] PLine -1000 3370 [ 800 3370 ] PLine -800 3370 [ 800 3430 ] PLine -800 3430 [ 1000 3430 ] PLine -10 SetLine -1000 3400 [ 1060 3400 ] PLine -10 SetLine -800 3400 [ 750 3400 ] PLine -10 SetText2 -0 -1175 1225 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -1175 1279 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char -0 -1175 1310 [ [ -65 29 -65 6 -37 4 -40 6 -43 13 -43 20 -40 27 -34 31 -25 34 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char -10 SetText2 -0 75 3375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3375 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 75 3175 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3175 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -10 SetText2 -0 75 3575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3575 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -825 3850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -771 3850 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -575 1450 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -521 1450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -490 1450 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 125 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 179 2950 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 210 2950 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -825 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -771 2950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char -10 SetText2 -0 -100 2250 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -100 2304 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char -0 -100 2335 [ [ -65 4 -65 29 -40 15 -40 22 -37 27 -34 29 -25 31 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char -10 SetText2 -0 -1275 3200 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -1275 3254 [ [ -50 2 -53 2 -59 4 -62 6 -65 11 -65 20 -62 25 -59 27 -53 29 -46 29 -40 27 -31 22 0 0 0 31 ] ] Char -10 SetText2 -0 -1100 2375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -1046 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -1015 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1100 2575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -1046 2575 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -1015 2575 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 900 2875 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 954 2875 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 985 2875 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 800 2050 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 854 2050 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 885 2050 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -10 SetText2 -0 -675 1100 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -621 1100 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -590 1100 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char -10 SetText2 -0 -925 4075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -871 4075 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 875 3075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 929 3075 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char -10 SetText2 -0 -200 3775 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -146 3775 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 325 975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 377 975 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 450 3775 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 502 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -775 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -732 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -50 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -7 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 700 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 743 675 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 -1175 4650 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -1132 4650 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1125 125 [ [ 0 65 0 0 27 0 ] ] Char -0 1172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 1222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 1274 125 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 125 125 [ [ 0 65 0 0 27 0 ] ] Char -0 172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 274 125 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -875 125 [ [ 0 65 0 0 27 0 ] ] Char -0 -828 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -778 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -726 125 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1075 3425 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] [ 20 12 34 -6 ] ] Char -0 1131 3425 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1075 1475 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char -0 -1127 1475 [ [ -11 -65 -4 -62 -2 -56 -2 -50 -4 -43 -9 -40 -18 -37 -25 -34 -29 -28 -31 -21 -31 -12 -29 -6 -27 -3 -20 0 -11 0 -4 -3 -2 -6 0 -12 0 -21 -2 -28 -6 -34 -13 -37 -22 -40 -27 -43 -29 -50 -29 -56 -27 -62 -20 -65 -11 -65 ] ] Char -10 SetText2 -0 25 1750 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 77 1750 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 108 1750 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 350 1350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 402 1350 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 433 1350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -550 2350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2350 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 -925 4250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -873 4250 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 850 3250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 902 3250 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -550 2550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -550 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2150 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 -1025 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -973 2150 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 350 1150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 402 1150 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 433 1150 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 1200 2125 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char -0 1148 2125 [ [ -31 -65 -9 0 ] [ 0 -65 -31 -65 ] ] Char -10 SetText2 -0 50 1950 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 102 1950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char -10 SetText2 -0 150 1550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 202 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 233 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -675 1950 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -623 1950 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 450 2550 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 502 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 500 4275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 552 4275 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -675 3450 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -623 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 950 1700 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 1002 1700 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -350 4325 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char -0 -298 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1225 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -1169 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 -1117 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1125 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 1181 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 1233 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 800 3450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 852 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 883 3450 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 -1075 1225 [ [ -65 0 0 0 ] [ -65 0 -65 15 -62 22 -56 27 -50 29 -40 31 -25 31 -15 29 -9 27 -3 22 0 15 0 0 ] ] Char -0 -1075 1277 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -1075 1331 [ [ -65 18 0 0 ] [ -65 18 0 36 ] [ -21 6 -21 29 ] ] Char -0 -1075 1387 [ [ -65 0 0 0 ] [ -65 0 -65 20 -62 27 -59 29 -53 31 -43 31 -37 29 -34 27 -31 20 -31 0 ] ] Char -10 SetText2 -0 75 3275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 127 3275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 181 3275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 237 3275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 289 3275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 75 3075 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 127 3075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 181 3075 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 237 3075 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 289 3075 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 75 3475 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 127 3475 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 181 3475 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 237 3475 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 289 3475 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 -825 3750 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -771 3750 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -715 3750 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 -663 3750 [ [ 0 78 40 -21 ] ] Char -0 -602 3750 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -546 3750 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -490 3750 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 -436 3750 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 -575 1350 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -521 1350 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -465 1350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 -413 1350 [ [ 0 78 40 -21 ] ] Char -0 -352 1350 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -296 1350 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -240 1350 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 -186 1350 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 125 2850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 179 2850 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 235 2850 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 287 2850 [ [ 0 78 40 -21 ] ] Char -0 348 2850 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 404 2850 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 460 2850 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 514 2850 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 -825 2850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -771 2850 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -715 2850 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 -663 2850 [ [ 0 78 40 -21 ] ] Char -0 -602 2850 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -546 2850 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -490 2850 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 -436 2850 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 0 2250 [ [ -65 0 0 0 ] [ -65 0 -65 15 -62 22 -56 27 -50 29 -40 31 -25 31 -15 29 -9 27 -3 22 0 15 0 0 ] ] Char -0 0 2302 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 0 2356 [ [ -65 18 0 0 ] [ -65 18 0 36 ] [ -21 6 -21 29 ] ] Char -0 0 2412 [ [ -65 0 0 0 ] [ -65 0 -65 20 -62 27 -59 29 -53 31 -43 31 -37 29 -34 27 -31 20 -31 0 ] ] Char -0 0 2464 [ [ -65 0 0 0 ] [ -65 0 -65 29 ] [ -34 0 -34 18 ] [ 0 0 0 29 ] ] Char -10 SetText2 -0 -1175 3200 [ [ -65 0 0 0 ] [ -65 0 -65 15 -62 22 -56 27 -50 29 -40 31 -25 31 -15 29 -9 27 -3 22 0 15 0 0 ] ] Char -0 -1175 3252 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -1175 3306 [ [ -65 18 0 0 ] [ -65 18 0 36 ] [ -21 6 -21 29 ] ] Char -0 -1175 3362 [ [ -65 0 0 0 ] [ -65 0 -65 20 -62 27 -59 29 -53 31 -43 31 -37 29 -34 27 -31 20 -31 0 ] ] Char -0 -1175 3414 [ [ -65 0 0 0 ] [ -65 0 -65 29 ] [ -34 0 -34 18 ] [ 0 0 0 29 ] ] Char -10 SetText2 -0 -1100 2275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -1048 2275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -994 2275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -938 2275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -10 SetText2 -0 -1100 2475 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -1048 2475 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -994 2475 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -938 2475 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -10 SetText2 -0 900 2775 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 952 2775 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 1006 2775 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 1062 2775 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -10 SetText2 -0 800 1950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 854 1950 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 910 1950 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 962 1950 [ [ 0 78 40 -21 ] ] Char -0 1023 1950 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 1079 1950 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 1135 1950 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 1189 1950 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 -675 1000 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -621 1000 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -565 1000 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 -513 1000 [ [ 0 78 40 -21 ] ] Char -0 -452 1000 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -396 1000 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -340 1000 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -0 -290 1000 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 -925 3975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -873 3975 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -819 3975 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -763 3975 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 -711 3975 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 875 2975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 927 2975 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 981 2975 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 1037 2975 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 1089 2975 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 -200 3675 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -148 3675 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -94 3675 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -38 3675 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -10 SetText2 -0 325 875 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 377 875 [ [ 0 65 0 0 ] ] Char -0 397 875 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 453 875 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 505 875 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 450 3675 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 502 3675 [ [ 0 65 0 0 ] ] Char -0 522 3675 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 578 3675 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 630 3675 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 -775 575 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -723 575 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char -0 -671 575 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char -0 -619 575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -10 SetText2 -0 -50 575 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 2 575 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char -0 54 575 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char -0 106 575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -10 SetText2 -0 700 575 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 752 575 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char -0 804 575 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char -0 856 575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -10 SetText2 -0 -1175 4550 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -1121 4550 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 -1065 4550 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char -0 -1013 4550 [ [ 0 78 40 -21 ] ] Char -0 -952 4550 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -900 4550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char -0 -848 4550 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 -796 4550 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 -742 4550 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 -690 4550 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] ] Char -10 SetText2 -0 1125 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 1177 25 [ [ 0 65 0 0 27 0 ] ] Char -0 1224 25 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 1274 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -10 SetText2 -0 125 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 177 25 [ [ 0 65 0 0 27 0 ] ] Char -0 224 25 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 274 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -10 SetText2 -0 -875 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -823 25 [ [ 0 65 0 0 27 0 ] ] Char -0 -776 25 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -726 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -10 SetText2 -0 1075 3325 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 1127 3325 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char -0 1179 3325 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 1231 3325 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char -0 1281 3325 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -0 1333 3325 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -10 SetText2 -0 -1075 1575 [ [ 0 -65 0 0 ] [ 0 -65 -15 -65 -22 -62 -27 -56 -29 -50 -31 -40 -31 -25 -29 -15 -27 -9 -22 -3 -15 0 0 0 ] ] Char -0 -1127 1575 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -43 -29 -37 -27 -34 -20 -31 0 -31 ] ] Char -0 -1179 1575 [ [ -13 -65 -9 -62 -4 -56 -2 -50 0 -40 0 -25 -2 -15 -4 -9 -9 -3 -13 0 -22 0 -27 -3 -31 -9 -34 -15 -36 -25 -36 -40 -34 -50 -31 -56 -27 -62 -22 -65 -13 -65 ] ] Char -0 -1235 1575 [ [ -15 -65 -15 0 ] [ 0 -65 -31 -65 ] ] Char -10 SetText2 -0 25 1650 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 77 1650 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 129 1650 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 179 1650 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 350 1250 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 402 1250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 454 1250 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 504 1250 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 -550 2250 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -498 2250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -446 2250 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -396 2250 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 -925 4150 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -873 4150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -821 4150 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -771 4150 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 850 3150 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 902 3150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 954 3150 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 1004 3150 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 -550 2450 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -498 2450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -446 2450 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -396 2450 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 -550 2050 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -498 2050 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -446 2050 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -396 2050 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 -1025 2050 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -973 2050 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -921 2050 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -871 2050 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 350 1050 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 402 1050 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 454 1050 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 504 1050 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 1200 2225 [ [ 0 -65 0 0 ] [ 0 -65 -15 -65 -22 -62 -27 -56 -29 -50 -31 -40 -31 -25 -29 -15 -27 -9 -22 -3 -15 0 0 0 ] ] Char -0 1148 2225 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -43 -29 -37 -27 -34 -20 -31 0 -31 ] ] Char -0 1096 2225 [ [ -13 -65 -9 -62 -4 -56 -2 -50 0 -40 0 -25 -2 -15 -4 -9 -9 -3 -13 0 -22 0 -27 -3 -31 -9 -34 -15 -36 -25 -36 -40 -34 -50 -31 -56 -27 -62 -22 -65 -13 -65 ] ] Char -0 1040 2225 [ [ -15 -65 -15 0 ] [ 0 -65 -31 -65 ] ] Char -10 SetText2 -0 50 1850 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 102 1850 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 154 1850 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 204 1850 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 150 1450 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 202 1450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 254 1450 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 304 1450 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 -675 1850 [ [ 0 65 0 0 27 0 ] ] Char -0 -628 1850 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -572 1850 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 -520 1850 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 -468 1850 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 450 2450 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -0 502 2450 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -0 556 2450 [ [ 0 65 0 0 27 0 ] ] Char -0 603 2450 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -0 655 2450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 686 2450 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 738 2450 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 500 4175 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 556 4175 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 610 4175 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 641 4175 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -0 695 4175 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 749 4175 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -0 803 4175 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -0 857 4175 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -675 3350 [ [ 0 65 0 0 ] ] Char -0 -655 3350 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -601 3350 [ [ 0 65 0 0 27 0 ] ] Char -0 -554 3350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 -502 3350 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -0 -450 3350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 950 1600 [ [ 0 65 0 0 27 0 ] ] Char -0 997 1600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 1053 1600 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -0 1105 1600 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char -0 1157 1600 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -0 1209 1600 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -350 4225 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -298 4225 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char -0 -246 4225 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char -0 -194 4225 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -138 4225 [ [ 0 65 0 0 27 0 ] ] Char -10 SetText2 -0 -1225 500 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -1169 500 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char -0 -1117 500 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 -1065 500 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 -1009 500 [ [ 0 65 0 0 27 0 ] ] Char -0 -962 500 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -912 500 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 -860 500 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 1125 500 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 1181 500 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char -0 1233 500 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 1285 500 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 1341 500 [ [ 0 65 0 0 27 0 ] ] Char -0 1388 500 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 1438 500 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 1490 500 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 800 3350 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 852 3350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 904 3350 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 954 3350 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 -300 4725 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -0 -248 4725 [ [ 0 65 0 0 ] ] Char -0 -228 4725 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -176 4725 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -74 4725 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -300 5075 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -0 -248 5075 [ [ 2 6 0 3 2 0 4 3 2 6 ] ] Char -0 -223 5075 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -0 -171 5075 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -0 -119 5075 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -0 -15 5075 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -0 46 5075 [ [ 40 78 0 -21 ] ] Char -0 107 5075 [ [ 0 28 40 28 ] ] Char -0 220 5075 [ [ 2 6 0 3 2 0 4 3 2 6 ] ] Char -0 245 5075 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -0 297 5075 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -0 349 5075 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1475 2025 [ [ -65 22 -21 0 -21 34 ] [ -65 22 0 22 ] ] Char -0 -1475 2079 [ [ -6 2 -3 0 0 2 -3 4 -6 2 ] ] Char -0 -1475 2104 [ [ -43 29 -34 27 -28 22 -25 15 -25 13 -28 6 -34 2 -43 0 -46 0 -56 2 -62 6 -65 13 -65 15 -62 22 -56 27 -43 29 -28 29 -12 27 -3 22 0 15 0 11 -3 4 -9 2 ] ] Char -0 -1475 2154 [ [ -65 13 -62 6 -53 2 -37 0 -28 0 -12 2 -3 6 0 13 0 18 -3 25 -12 29 -28 31 -37 31 -53 29 -62 25 -65 18 -65 13 ] ] Char -0 -1475 2206 [ [ -65 13 -62 6 -53 2 -37 0 -28 0 -12 2 -3 6 0 13 0 18 -3 25 -12 29 -28 31 -37 31 -53 29 -62 25 -65 18 -65 13 ] ] Char -0 -1475 2310 [ [ -56 20 0 20 ] [ -28 0 -28 40 ] ] Char -0 -1475 2371 [ [ -78 40 21 0 ] ] Char -0 -1475 2432 [ [ -28 0 -28 40 ] ] Char -0 -1475 2545 [ [ -6 2 -3 0 0 2 -3 4 -6 2 ] ] Char -0 -1475 2570 [ [ -65 13 -62 6 -53 2 -37 0 -28 0 -12 2 -3 6 0 13 0 18 -3 25 -12 29 -28 31 -37 31 -53 29 -62 25 -65 18 -65 13 ] ] Char -0 -1475 2622 [ [ -65 13 -62 6 -53 2 -37 0 -28 0 -12 2 -3 6 0 13 0 18 -3 25 -12 29 -28 31 -37 31 -53 29 -62 25 -65 18 -65 13 ] ] Char -0 -1475 2674 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char -grestore -showpage diff --git a/usr.sbin/xntpd/gadget/art01.lpr b/usr.sbin/xntpd/gadget/art01.lpr deleted file mode 100644 index d770fed..0000000 --- a/usr.sbin/xntpd/gadget/art01.lpr +++ /dev/null @@ -1,890 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: PADS Postscript Driver Header -%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851 -%%CreationDate: 06/08/90 -%%For: CAD Software, Littleton, MA -%%EndComments -%%BeginProcSet: Markers 1.0 0 -% marker attributes -/MAttr_Width 1 def -/MAttr_Size 0 def -/MAttr_Type /M1 def -% procedures -/M1 { %def -% draw marker 1: plus -% Stack: - M1 - - -2 0 rmoveto - 4 0 rlineto - -2 2 rmoveto - 0 -4 rlineto -} bind def -/M2 { %def -% draw marker 2: cross -% Stack: - M2 - - -2 -2 rmoveto - 4 4 rlineto - -4 0 rmoveto - 4 -4 rlineto -} bind def -/M3 { %def -% draw marker 3: square -% Stack: - M3 - - 0 2 rlineto - 2 0 rlineto - 0 -4 rlineto - -4 0 rlineto - 0 4 rlineto - 2 0 rlineto -} bind def -/M4 { %def -% draw marker 4: diamond -% Stack: - M4 - - 0 2 rlineto - 2 -2 rlineto - -2 -2 rlineto - -2 2 rlineto - 2 2 rlineto -} bind def -/M5 { %def -% draw marker 5: hourglass -% Stack: - M5 - - 2 2 rlineto - -4 0 rlineto - 4 -4 rlineto - -4 0 rlineto - 2 2 rlineto -} bind def -/M6 { %def -% draw marker 6: bowtie -% Stack: - M6 - - 2 2 rlineto - 0 -4 rlineto - -4 4 rlineto - 0 -4 rlineto - 2 2 rlineto -} bind def -/M7 { %def -% draw marker 7: small plus (goes with char marker) -% Stack: - M7 - - -1 0 rmoveto - 2 0 rlineto - -1 1 rmoveto - 0 -2 rlineto -} bind def -/Marker { %def -% Command from driver: draw marker -% STACK: x y Marker - - MAttr_Size 0 gt - { - gsave - moveto - MAttr_Size 4 div dup scale - MAttr_Type load exec - 4 MAttr_Size div dup scale - MAttr_Width setlinewidth - stroke - grestore - } if -} def -%%EndProcSet: Markers 1.0 0 -%%BeginProcSet: Lib 1.0 0 -/sg { %def -% Command from driver: set the gray scale 0 - 100 -% STACK: greylevel sg - 100 div dup setgray /glev exch def -} bind def -/Circle { %def -% draw a circle -% STACK: x y radius Circle - - 0 360 arc -} bind def -/RndAper { %def -% select a round aperture -% STACK: - RndAper - - 1 setlinejoin - 1 setlinecap -} bind def -/SqrAper { %def -% select a square aperture -% STACK: - SqrAper - - 0 setlinejoin - 2 setlinecap -} bind def -/Line { %def -% draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] Line - - 3 1 roll - moveto - true - exch - % This pushes the x then the y then does lineto - { exch { false } { lineto true } ifelse } forall - pop -} bind def -/Clipto { %def -% set clipping rectangle from 0,0 to new values -% STACK: x y Clipto - - 0 0 moveto - dup 0 exch lineto - 2 copy lineto - pop - 0 lineto - closepath - clip - newpath -} bind def -/Clip4 { %def -% set clipping rectangle from xmin,ymin to xmax,ymax -% STACK: xmin ymin xmax ymax Clip4 - - 4 copy pop pop moveto - 4 copy pop exch lineto pop - 2 copy lineto - exch pop exch pop lineto - closepath - clip - newpath -} bind def -%%EndProcSet: Lib 1.0 0 -%%BeginProcSet: Lines 1.0 0 -% line attributes % -/LAttr_Width 1 def -% line procedures -/PLine { %def -% Cammand from driver: draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - LAttr_Width setlinewidth - stroke -} bind def % PLine -/Char { %def -% Command from driver: draw a character at the current position -% STACK: type x y stroke_array Char - -% stroke array -- [ stroke1 stroke2 ... stroken ] -% stroke -- connected staight lines -% type = 0 if text 1 if marker - gsave - 4 1 roll - translate - 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth - { - dup length 2 gt - { - dup dup 0 get exch 1 get % get starting point - 3 -1 roll % put x y before array - dup length 2 sub 2 exch getinterval % delete first items from array - Line - stroke - } - { - aload pop currentlinewidth 2 div Circle fill - } ifelse - } forall - grestore -} bind def % Char -/PArc { %def -% Command from driver: draw an arc -% STACK: x y radius startangle deltaangle Arc - - 10 div exch 10 div exch - 2 copy pop add - arc - LAttr_Width setlinewidth - stroke -} bind def -/PCircle { %def -% Command from driver: draw an circle -% STACK: x y radius PCircle - - Circle - LAttr_Width setlinewidth - stroke -} bind def -%%EndProcSet: Lines 1.0 0 -%%BeginProcSet: Polygon 1.0 0 -% polygon attributes % -/PAttr_ExtWidth 1 def -/PAttr_IntWidth 1 def -/PAttr_Grid 1 def -% polygon procedures -/LoopSet { %def -% set up for loop condition -% STACK: start end LoopSet low gridwidth high - 2 copy lt { exch } if - % make grid line up to absolute coordinates - PAttr_Grid div truncate PAttr_Grid mul exch - PAttr_Grid exch -} bind def -/Hatch { %def -% draw cross hatch pattern in current path -% STACK: - Hatch - - pathbbox - /ury exch def - /urx exch def - /lly exch def - /llx exch def - clip - newpath - llx urx LoopSet - { % x loop - dup lly exch ury moveto lineto - } for - lly ury LoopSet - { % y loop - llx exch dup urx exch moveto lineto - } for - PAttr_IntWidth setlinewidth - stroke -} bind def -/PPoly { %def -% Command from driver: draw a plygon -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - closepath - gsave - PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse - grestore - PAttr_ExtWidth setlinewidth - stroke -} bind def -%%EndProcSet: Polygon 1.0 0 -%%BeginProcSet: Text 1.0 0 -% text attributes % -/TAttr_Mirr 0 def -/TAttr_Orient 0 def -/TAttr_Width 1 def -% text procedures -/Text { %def -% Command from driver: Draw text -% STACK: x y width string Text - - gsave - 4 2 roll - translate - TAttr_Mirr 0 gt - { - -1 1 scale - } if - TAttr_Orient rotate - 0 0 moveto - dup length dup 1 gt - { - exch dup stringwidth pop - 4 -1 roll - exch 2 copy - lt - { - div 1 scale show - } - { - sub - 3 -1 roll 1 sub div - 0 3 -1 roll ashow - } - ifelse - } - { - pop - show - } ifelse - grestore -} bind def -%%EndProcSet: Text 1.0 0 -%%BeginProcSet: FlashSymbols 1.0 0 -% flash symbol attributes % -/FAttr_Type /PRndPad def -/FAttr_Width 0 def -/FAttr_Length 1 def -/FAttr_Orient 0 def -% flash symbol procedures -/PRndPad { %def -% Command from driver: draw an circular pad -% STACK: - PCirclePad - - FAttr_Width dup scale - 0 0 .5 Circle - fill -} bind def -/PSqrPad { %def -% Draw an Square pad -% STACK: - PRectPad - - FAttr_Width dup scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/PRectPad { %def -% Draw an rectangular pad -% STACK: - PRectPad - - FAttr_Length FAttr_Width scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/POvalPad { %def -% Draw an oval pad -% STACK: - POvalPad - - FAttr_Width setlinewidth - FAttr_Length FAttr_Width sub 2 div dup - neg 0 moveto - 0 lineto - RndAper - stroke -} bind def -/Anl { %def - 0 0 .5 Circle - fill - FAttr_Length FAttr_Width lt - { % inner circle - 0 0 - FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse - 2 div Circle - 1 setgray - fill - glev setgray - } if -} bind def -/PAnlPad { %def -% Draw an annular pad -% STACK: - PAnlPad - - FAttr_Width dup scale - Anl -} bind def -/PRelPad { %def -% Draw an thermal relief pad -% STACK: - PRelPad - - PAnlPad - 1 setgray - .17 setlinewidth - 0 setlinecap % the x - 45 rotate - .5 0 moveto -.5 0 lineto - 0 .5 moveto 0 -.5 lineto - stroke - glev setgray -} bind def -/Flash { %def -% Command from driver: Flash a symbol -% STACK: x y Flash - - FAttr_Width 0 gt - { - gsave - translate - FAttr_Orient rotate - FAttr_Type load exec - grestore - } if -} def -%%EndProcSet: FlashSymbols 1.0 0 -%%BeginProcSet: SetAttr 1.0 0 -/SetLine { %def -% Set the width of the lines -% STACK: linewidth SetLine - - /LAttr_Width exch def - RndAper -} bind def -/SetPoly { %def -% Set attribute of polygon -% STACK: external_width internal_grid_width grid_spacing SetPoly - - /PAttr_Grid exch def - /PAttr_IntWidth exch def - /PAttr_ExtWidth exch def - RndAper -} bind def -/SetFlash { %def -% Set Attributed of flash pad -% STACK: orientation_angle length width aperture_type SetFlash - - /FAttr_Type exch def - FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or - { SqrAper } { RndAper } ifelse - /FAttr_Width exch def - /FAttr_Length exch def - /FAttr_Orient exch 10 div def -} bind def -/SetMkr { %def -% Set attributes of markers -% STACK: linewidth size type SetMkr - - /MAttr_Type exch def - /MAttr_Size exch def - /MAttr_Width exch def - RndAper -} bind def -/SetText1 { %def -% Set attributes of text -% STACK: fontname height orient mirror SetMkr - - /TAttr_Mirr exch def - /TAttr_Orient exch 10 div def - exch findfont exch scalefont setfont - RndAper -} bind def -/SetText2 { %def -% Set attributes of text -% STACK: linewidth height mirror orient SetMkr - - /TAttr_Width exch def - RndAper -} bind def -%%EndProcSet: SetAttr 1.0 0 -%%BeginProcSet: Initialize 1.0 0 -/Init { %def -% Initialize the driver -% STACK: Init - - 72 1000 div dup scale % Scale to 1/1000 inch - 250 250 translate % make origin 1/4 inch from bottom left - 1.5 setmiterlimit 1 RndAper % set line defaults - 0 setgray % set color default - /glev 0 def -} def -%%EndProcSet: Initialize 1.0 0 -%%EndProlog -/Helvetica findfont 12 scalefont setfont -35 760 moveto -(gadget.job - Fri Aug 21 03:34:56 1992) show -gsave -Init -8000 10500 Clipto -4000 2800 translate -0 rotate -1 1 div dup scale -75 sg -50 sg -25 sg -0 sg -10 SetLine --1350 4700 [ -1350 4900 ] PLine --1350 4900 [ -1150 4900 ] PLine -10 SetLine -1150 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 4700 ] PLine -10 SetLine -1150 0 [ 1350 0 ] PLine -1350 0 [ 1350 200 ] PLine -10 SetLine --1350 200 [ -1350 0 ] PLine --1350 0 [ -1150 0 ] PLine -0 0 60 /PRndPad SetFlash --1100 1450 Flash --1100 1150 Flash -300 3300 Flash --100 3300 Flash --100 3100 Flash -300 3100 Flash -300 3500 Flash --100 3500 Flash --400 3700 Flash --1200 3700 Flash --100 1300 Flash --900 1300 Flash --200 2800 Flash -600 2800 Flash --1200 2800 Flash --400 2800 Flash -0 2500 Flash -0 2100 Flash --1200 3400 Flash --1200 3000 Flash --900 2300 Flash --1200 2300 Flash --1200 2500 Flash --900 2500 Flash -800 2800 Flash -1100 2800 Flash -1250 1900 Flash -450 1900 Flash --100 900 Flash --1200 900 Flash --700 4000 Flash --1100 4000 Flash -1100 3000 Flash -700 3000 Flash --300 3700 Flash -0 3700 Flash -0 0 60 /PSqrPad SetFlash -100 900 Flash -0 0 60 /PRndPad SetFlash -600 900 Flash -0 0 60 /PSqrPad SetFlash -700 3700 Flash -0 0 60 /PRndPad SetFlash -200 3700 Flash -0 0 70 /PRndPad SetFlash --750 550 Flash --750 450 Flash -0 550 Flash -0 450 Flash -750 550 Flash -750 450 Flash --648 4479 Flash --540 4479 Flash --432 4479 Flash --324 4479 Flash --216 4479 Flash --108 4479 Flash -0 4479 Flash -108 4479 Flash -216 4479 Flash -324 4479 Flash -432 4479 Flash -540 4479 Flash -648 4479 Flash --594 4593 Flash --486 4593 Flash --378 4593 Flash --270 4593 Flash --162 4593 Flash --54 4593 Flash -54 4593 Flash -162 4593 Flash -270 4593 Flash -378 4593 Flash -486 4593 Flash -594 4593 Flash -0 0 177 /PRndPad SetFlash -940 4536 Flash --940 4536 Flash -0 0 60 /PSqrPad SetFlash -950 150 Flash -0 0 60 /PRndPad SetFlash -1050 150 Flash -0 0 60 /PSqrPad SetFlash --50 150 Flash -0 0 60 /PRndPad SetFlash -50 150 Flash -0 0 60 /PSqrPad SetFlash --1050 150 Flash -0 0 60 /PRndPad SetFlash --950 150 Flash -0 0 50 /PRndPad SetFlash -950 3524 Flash -1026 3612 Flash -950 3700 Flash -0 0 60 /PSqrPad SetFlash --1200 1600 Flash -0 0 60 /PRndPad SetFlash --1100 1700 Flash --1200 1800 Flash -300 1700 Flash --100 1700 Flash -200 1300 Flash -600 1300 Flash --700 2300 Flash --300 2300 Flash --700 4200 Flash --1100 4200 Flash -1100 3200 Flash -700 3200 Flash --700 2500 Flash --300 2500 Flash --700 2100 Flash --300 2100 Flash --800 2100 Flash --1200 2100 Flash -600 1100 Flash -200 1100 Flash -0 0 60 /PSqrPad SetFlash -1200 2450 Flash -0 0 60 /PRndPad SetFlash -1100 2350 Flash -1200 2250 Flash --100 1900 Flash -300 1900 Flash -0 1500 Flash -400 1500 Flash -0 0 60 /PSqrPad SetFlash --900 1600 Flash -0 0 60 /PRndPad SetFlash --800 1600 Flash --700 1600 Flash --600 1600 Flash --500 1600 Flash --400 1600 Flash --300 1600 Flash --300 1900 Flash --400 1900 Flash --500 1900 Flash --600 1900 Flash --700 1900 Flash --800 1900 Flash --900 1900 Flash -0 0 60 /PSqrPad SetFlash -200 2200 Flash -0 0 60 /PRndPad SetFlash -300 2200 Flash -400 2200 Flash -500 2200 Flash -600 2200 Flash -700 2200 Flash -800 2200 Flash -900 2200 Flash -900 2500 Flash -800 2500 Flash -700 2500 Flash -600 2500 Flash -500 2500 Flash -400 2500 Flash -300 2500 Flash -200 2500 Flash -0 0 60 /PSqrPad SetFlash -200 3900 Flash -0 0 60 /PRndPad SetFlash -300 3900 Flash -400 3900 Flash -500 3900 Flash -600 3900 Flash -700 3900 Flash -800 3900 Flash -900 3900 Flash -1000 3900 Flash -1100 3900 Flash -1100 4200 Flash -1000 4200 Flash -900 4200 Flash -800 4200 Flash -700 4200 Flash -600 4200 Flash -500 4200 Flash -400 4200 Flash -300 4200 Flash -200 4200 Flash -0 0 60 /PSqrPad SetFlash --1000 3100 Flash -0 0 60 /PRndPad SetFlash --900 3100 Flash --800 3100 Flash --700 3100 Flash --600 3100 Flash --500 3100 Flash --400 3100 Flash --300 3100 Flash --300 3400 Flash --400 3400 Flash --500 3400 Flash --600 3400 Flash --700 3400 Flash --800 3400 Flash --900 3400 Flash --1000 3400 Flash -0 0 70 /PRndPad SetFlash -900 800 Flash -1100 800 Flash -1000 800 Flash -0 0 177 /PRndPad SetFlash -1000 1550 Flash -0 0 60 /PRndPad SetFlash -0 4000 Flash -0 4200 Flash -0 0 250 /PRndPad SetFlash --1100 450 Flash -1100 450 Flash -0 0 60 /PRndPad SetFlash -1100 3400 Flash -700 3400 Flash -10 SetText2 -0 -300 4725 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -0 -248 4725 [ [ 0 65 0 0 ] ] Char -0 -228 4725 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -176 4725 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -74 4725 [ [ 0 53 4 56 11 65 11 0 ] ] Char -12 SetLine --100 900 [ -100 800 ] PLine --100 800 [ 100 800 ] PLine -100 900 [ 100 800 ] PLine -100 800 [ 900 800 ] PLine -300 1100 [ 600 1100 ] PLine --1100 1150 [ -700 1150 ] PLine --700 1150 [ -700 1600 ] PLine -175 3300 [ -100 3300 ] PLine -700 3000 [ 300 3000 ] PLine -300 3000 [ 300 3100 ] PLine -300 2500 [ 300 2650 ] PLine -300 2650 [ 800 2650 ] PLine -800 2800 [ 800 2650 ] PLine -800 2650 [ 1000 2650 ] PLine -400 2500 [ 400 2600 ] PLine -400 2600 [ 1100 2600 ] PLine -1100 2600 [ 1100 2800 ] PLine --900 2300 [ -700 2100 ] PLine --700 2100 [ -450 2100 ] PLine -500 2500 [ 550 2550 ] PLine -550 2550 [ 750 2550 ] PLine -750 2550 [ 800 2500 ] PLine --650 2600 [ -100 2600 ] PLine --100 2250 [ 450 2250 ] PLine -450 2250 [ 500 2200 ] PLine --1200 2300 [ -1050 2300 ] PLine --1050 2300 [ -1050 2100 ] PLine --1050 2100 [ -800 2100 ] PLine --900 2500 [ -700 2300 ] PLine --700 2300 [ -700 2200 ] PLine --700 2200 [ -300 2200 ] PLine --300 2200 [ -300 2100 ] PLine -1250 1900 [ 1250 1800 ] PLine -1250 1800 [ 800 1800 ] PLine -300 1900 [ 300 1800 ] PLine -300 1800 [ 800 1800 ] PLine -700 1900 [ 450 1900 ] PLine -300 1700 [ 600 1700 ] PLine -500 1600 [ -100 1600 ] PLine --100 1600 [ -100 1700 ] PLine -1000 3900 [ 1050 3950 ] PLine -1050 3950 [ 1050 4050 ] PLine -1050 4050 [ 50 4050 ] PLine -50 4050 [ 0 4000 ] PLine -0 4100 [ 900 4100 ] PLine -800 3000 [ 1100 3000 ] PLine -0 3700 [ 0 3850 ] PLine -0 3850 [ 450 3850 ] PLine -450 3850 [ 500 3900 ] PLine --400 3400 [ -400 3600 ] PLine --400 3600 [ 300 3600 ] PLine -300 3600 [ 300 3700 ] PLine -300 3700 [ 600 3700 ] PLine -450 2700 [ -400 2700 ] PLine --400 2300 [ -300 2300 ] PLine --700 4200 [ -650 4250 ] PLine --650 4250 [ 550 4250 ] PLine -550 4250 [ 600 4200 ] PLine -350 3800 [ 1100 3800 ] PLine -1100 3800 [ 1100 3900 ] PLine --800 3100 [ -800 2800 ] PLine --800 2800 [ -400 2800 ] PLine --850 3700 [ -400 3700 ] PLine -400 1300 [ 600 1300 ] PLine --1100 4200 [ -1050 4150 ] PLine --1050 4150 [ 650 4150 ] PLine -650 4150 [ 700 4200 ] PLine --300 3400 [ -250 3350 ] PLine --250 3350 [ 1200 3350 ] PLine -1200 3350 [ 1200 4200 ] PLine -1200 4200 [ 1100 4200 ] PLine --700 3100 [ -700 2875 ] PLine --700 2875 [ -200 2875 ] PLine --200 2875 [ -200 2800 ] PLine --600 3100 [ -600 2950 ] PLine --600 2950 [ 600 2950 ] PLine -600 2950 [ 600 2800 ] PLine --750 550 [ -750 1050 ] PLine --750 1050 [ -1050 1050 ] PLine -950 3200 [ 700 3200 ] PLine -850 1200 [ -600 1200 ] PLine --550 3900 [ -350 3900 ] PLine -540 4479 [ 540 4300 ] PLine -540 4300 [ -800 4300 ] PLine -432 4479 [ 432 4350 ] PLine -432 4350 [ -750 4350 ] PLine -400 3400 [ 700 3400 ] PLine -50 SetLine --1000 3400 [ -1000 3250 ] PLine --1000 3250 [ -200 3250 ] PLine --200 3250 [ -200 3100 ] PLine --200 3100 [ -100 3100 ] PLine -0 2500 [ 0 2350 ] PLine -0 2350 [ 200 2350 ] PLine -200 2350 [ 200 2500 ] PLine -0 2350 [ -200 2350 ] PLine --1000 3400 [ -1200 3400 ] PLine -200 2350 [ 1100 2350 ] PLine -1100 2350 [ 1100 2450 ] PLine -1100 2450 [ 1200 2450 ] PLine --600 1600 [ -600 1750 ] PLine --600 1750 [ -200 1750 ] PLine --1200 3700 [ -1000 3700 ] PLine --1000 3700 [ -1000 3400 ] PLine -1100 3200 [ 1250 3200 ] PLine -1250 3200 [ 1250 2450 ] PLine -1250 2450 [ 1200 2450 ] PLine -900 4200 [ 900 4300 ] PLine -900 4300 [ 1250 4300 ] PLine -1250 4300 [ 1250 3200 ] PLine --700 4000 [ -1000 4000 ] PLine --1000 4000 [ -1000 3700 ] PLine -900 4200 [ 800 4200 ] PLine -200 1400 [ 1100 1400 ] PLine -1100 1400 [ 1100 800 ] PLine --50 450 [ -50 150 ] PLine -950 150 [ 1100 450 ] PLine -1100 450 [ 1000 800 ] PLine --250 450 [ -250 1000 ] PLine --250 1000 [ 200 1000 ] PLine -200 1000 [ 200 1100 ] PLine -0 450 [ -750 450 ] PLine --750 450 [ -1100 450 ] PLine -0 4475 [ 0 4400 ] PLine -0 4400 [ -648 4400 ] PLine --648 4400 [ -648 4479 ] PLine -75 4000 [ 300 4000 ] PLine -300 4000 [ 300 3900 ] PLine -1100 450 [ 750 450 ] PLine -750 450 [ 0 450 ] PLine -900 2200 [ 900 2000 ] PLine -900 2000 [ 75 2000 ] PLine -75 2000 [ 75 2200 ] PLine -75 2200 [ 200 2200 ] PLine -300 4000 [ 1000 4000 ] PLine --1100 450 [ -1050 150 ] PLine --600 1900 [ -600 2000 ] PLine --600 2000 [ 75 2000 ] PLine -75 2100 [ 0 2100 ] PLine -0 0 55 /PRndPad SetFlash --200 2350 Flash --200 1750 Flash -200 1400 Flash -0 0 55 /PRndPad SetFlash -300 1100 Flash -0 0 55 /PRndPad SetFlash -175 3300 Flash -0 0 55 /PRndPad SetFlash -1000 2650 Flash -0 0 55 /PRndPad SetFlash --450 2100 Flash -0 0 55 /PRndPad SetFlash --650 2600 Flash --100 2600 Flash --100 2250 Flash -0 0 55 /PRndPad SetFlash -800 1800 Flash -0 0 55 /PRndPad SetFlash -700 1900 Flash -0 0 55 /PRndPad SetFlash -600 1700 Flash -0 0 55 /PRndPad SetFlash -500 1600 Flash -0 0 55 /PRndPad SetFlash -0 4100 Flash -900 4100 Flash -0 0 55 /PRndPad SetFlash -800 3000 Flash -0 0 55 /PRndPad SetFlash -600 3700 Flash -0 0 55 /PRndPad SetFlash -450 2700 Flash --400 2700 Flash --400 2300 Flash -0 0 55 /PRndPad SetFlash -350 3800 Flash -0 0 55 /PRndPad SetFlash --850 3700 Flash -0 0 55 /PRndPad SetFlash -400 1300 Flash -0 0 55 /PRndPad SetFlash --1050 1050 Flash -0 0 55 /PRndPad SetFlash -0 4475 Flash -75 4000 Flash -1000 4000 Flash -0 0 55 /PRndPad SetFlash -950 3200 Flash -0 0 55 /PRndPad SetFlash -850 1200 Flash --600 1200 Flash -0 0 55 /PRndPad SetFlash --550 3900 Flash --350 3900 Flash -0 0 55 /PRndPad SetFlash --800 4300 Flash -0 0 55 /PRndPad SetFlash --750 4350 Flash -0 0 55 /PRndPad SetFlash -400 3400 Flash -grestore -showpage diff --git a/usr.sbin/xntpd/gadget/art02.lpr b/usr.sbin/xntpd/gadget/art02.lpr deleted file mode 100644 index 1b336f3..0000000 --- a/usr.sbin/xntpd/gadget/art02.lpr +++ /dev/null @@ -1,893 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: PADS Postscript Driver Header -%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851 -%%CreationDate: 06/08/90 -%%For: CAD Software, Littleton, MA -%%EndComments -%%BeginProcSet: Markers 1.0 0 -% marker attributes -/MAttr_Width 1 def -/MAttr_Size 0 def -/MAttr_Type /M1 def -% procedures -/M1 { %def -% draw marker 1: plus -% Stack: - M1 - - -2 0 rmoveto - 4 0 rlineto - -2 2 rmoveto - 0 -4 rlineto -} bind def -/M2 { %def -% draw marker 2: cross -% Stack: - M2 - - -2 -2 rmoveto - 4 4 rlineto - -4 0 rmoveto - 4 -4 rlineto -} bind def -/M3 { %def -% draw marker 3: square -% Stack: - M3 - - 0 2 rlineto - 2 0 rlineto - 0 -4 rlineto - -4 0 rlineto - 0 4 rlineto - 2 0 rlineto -} bind def -/M4 { %def -% draw marker 4: diamond -% Stack: - M4 - - 0 2 rlineto - 2 -2 rlineto - -2 -2 rlineto - -2 2 rlineto - 2 2 rlineto -} bind def -/M5 { %def -% draw marker 5: hourglass -% Stack: - M5 - - 2 2 rlineto - -4 0 rlineto - 4 -4 rlineto - -4 0 rlineto - 2 2 rlineto -} bind def -/M6 { %def -% draw marker 6: bowtie -% Stack: - M6 - - 2 2 rlineto - 0 -4 rlineto - -4 4 rlineto - 0 -4 rlineto - 2 2 rlineto -} bind def -/M7 { %def -% draw marker 7: small plus (goes with char marker) -% Stack: - M7 - - -1 0 rmoveto - 2 0 rlineto - -1 1 rmoveto - 0 -2 rlineto -} bind def -/Marker { %def -% Command from driver: draw marker -% STACK: x y Marker - - MAttr_Size 0 gt - { - gsave - moveto - MAttr_Size 4 div dup scale - MAttr_Type load exec - 4 MAttr_Size div dup scale - MAttr_Width setlinewidth - stroke - grestore - } if -} def -%%EndProcSet: Markers 1.0 0 -%%BeginProcSet: Lib 1.0 0 -/sg { %def -% Command from driver: set the gray scale 0 - 100 -% STACK: greylevel sg - 100 div dup setgray /glev exch def -} bind def -/Circle { %def -% draw a circle -% STACK: x y radius Circle - - 0 360 arc -} bind def -/RndAper { %def -% select a round aperture -% STACK: - RndAper - - 1 setlinejoin - 1 setlinecap -} bind def -/SqrAper { %def -% select a square aperture -% STACK: - SqrAper - - 0 setlinejoin - 2 setlinecap -} bind def -/Line { %def -% draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] Line - - 3 1 roll - moveto - true - exch - % This pushes the x then the y then does lineto - { exch { false } { lineto true } ifelse } forall - pop -} bind def -/Clipto { %def -% set clipping rectangle from 0,0 to new values -% STACK: x y Clipto - - 0 0 moveto - dup 0 exch lineto - 2 copy lineto - pop - 0 lineto - closepath - clip - newpath -} bind def -/Clip4 { %def -% set clipping rectangle from xmin,ymin to xmax,ymax -% STACK: xmin ymin xmax ymax Clip4 - - 4 copy pop pop moveto - 4 copy pop exch lineto pop - 2 copy lineto - exch pop exch pop lineto - closepath - clip - newpath -} bind def -%%EndProcSet: Lib 1.0 0 -%%BeginProcSet: Lines 1.0 0 -% line attributes % -/LAttr_Width 1 def -% line procedures -/PLine { %def -% Cammand from driver: draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - LAttr_Width setlinewidth - stroke -} bind def % PLine -/Char { %def -% Command from driver: draw a character at the current position -% STACK: type x y stroke_array Char - -% stroke array -- [ stroke1 stroke2 ... stroken ] -% stroke -- connected staight lines -% type = 0 if text 1 if marker - gsave - 4 1 roll - translate - 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth - { - dup length 2 gt - { - dup dup 0 get exch 1 get % get starting point - 3 -1 roll % put x y before array - dup length 2 sub 2 exch getinterval % delete first items from array - Line - stroke - } - { - aload pop currentlinewidth 2 div Circle fill - } ifelse - } forall - grestore -} bind def % Char -/PArc { %def -% Command from driver: draw an arc -% STACK: x y radius startangle deltaangle Arc - - 10 div exch 10 div exch - 2 copy pop add - arc - LAttr_Width setlinewidth - stroke -} bind def -/PCircle { %def -% Command from driver: draw an circle -% STACK: x y radius PCircle - - Circle - LAttr_Width setlinewidth - stroke -} bind def -%%EndProcSet: Lines 1.0 0 -%%BeginProcSet: Polygon 1.0 0 -% polygon attributes % -/PAttr_ExtWidth 1 def -/PAttr_IntWidth 1 def -/PAttr_Grid 1 def -% polygon procedures -/LoopSet { %def -% set up for loop condition -% STACK: start end LoopSet low gridwidth high - 2 copy lt { exch } if - % make grid line up to absolute coordinates - PAttr_Grid div truncate PAttr_Grid mul exch - PAttr_Grid exch -} bind def -/Hatch { %def -% draw cross hatch pattern in current path -% STACK: - Hatch - - pathbbox - /ury exch def - /urx exch def - /lly exch def - /llx exch def - clip - newpath - llx urx LoopSet - { % x loop - dup lly exch ury moveto lineto - } for - lly ury LoopSet - { % y loop - llx exch dup urx exch moveto lineto - } for - PAttr_IntWidth setlinewidth - stroke -} bind def -/PPoly { %def -% Command from driver: draw a plygon -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - closepath - gsave - PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse - grestore - PAttr_ExtWidth setlinewidth - stroke -} bind def -%%EndProcSet: Polygon 1.0 0 -%%BeginProcSet: Text 1.0 0 -% text attributes % -/TAttr_Mirr 0 def -/TAttr_Orient 0 def -/TAttr_Width 1 def -% text procedures -/Text { %def -% Command from driver: Draw text -% STACK: x y width string Text - - gsave - 4 2 roll - translate - TAttr_Mirr 0 gt - { - -1 1 scale - } if - TAttr_Orient rotate - 0 0 moveto - dup length dup 1 gt - { - exch dup stringwidth pop - 4 -1 roll - exch 2 copy - lt - { - div 1 scale show - } - { - sub - 3 -1 roll 1 sub div - 0 3 -1 roll ashow - } - ifelse - } - { - pop - show - } ifelse - grestore -} bind def -%%EndProcSet: Text 1.0 0 -%%BeginProcSet: FlashSymbols 1.0 0 -% flash symbol attributes % -/FAttr_Type /PRndPad def -/FAttr_Width 0 def -/FAttr_Length 1 def -/FAttr_Orient 0 def -% flash symbol procedures -/PRndPad { %def -% Command from driver: draw an circular pad -% STACK: - PCirclePad - - FAttr_Width dup scale - 0 0 .5 Circle - fill -} bind def -/PSqrPad { %def -% Draw an Square pad -% STACK: - PRectPad - - FAttr_Width dup scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/PRectPad { %def -% Draw an rectangular pad -% STACK: - PRectPad - - FAttr_Length FAttr_Width scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/POvalPad { %def -% Draw an oval pad -% STACK: - POvalPad - - FAttr_Width setlinewidth - FAttr_Length FAttr_Width sub 2 div dup - neg 0 moveto - 0 lineto - RndAper - stroke -} bind def -/Anl { %def - 0 0 .5 Circle - fill - FAttr_Length FAttr_Width lt - { % inner circle - 0 0 - FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse - 2 div Circle - 1 setgray - fill - glev setgray - } if -} bind def -/PAnlPad { %def -% Draw an annular pad -% STACK: - PAnlPad - - FAttr_Width dup scale - Anl -} bind def -/PRelPad { %def -% Draw an thermal relief pad -% STACK: - PRelPad - - PAnlPad - 1 setgray - .17 setlinewidth - 0 setlinecap % the x - 45 rotate - .5 0 moveto -.5 0 lineto - 0 .5 moveto 0 -.5 lineto - stroke - glev setgray -} bind def -/Flash { %def -% Command from driver: Flash a symbol -% STACK: x y Flash - - FAttr_Width 0 gt - { - gsave - translate - FAttr_Orient rotate - FAttr_Type load exec - grestore - } if -} def -%%EndProcSet: FlashSymbols 1.0 0 -%%BeginProcSet: SetAttr 1.0 0 -/SetLine { %def -% Set the width of the lines -% STACK: linewidth SetLine - - /LAttr_Width exch def - RndAper -} bind def -/SetPoly { %def -% Set attribute of polygon -% STACK: external_width internal_grid_width grid_spacing SetPoly - - /PAttr_Grid exch def - /PAttr_IntWidth exch def - /PAttr_ExtWidth exch def - RndAper -} bind def -/SetFlash { %def -% Set Attributed of flash pad -% STACK: orientation_angle length width aperture_type SetFlash - - /FAttr_Type exch def - FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or - { SqrAper } { RndAper } ifelse - /FAttr_Width exch def - /FAttr_Length exch def - /FAttr_Orient exch 10 div def -} bind def -/SetMkr { %def -% Set attributes of markers -% STACK: linewidth size type SetMkr - - /MAttr_Type exch def - /MAttr_Size exch def - /MAttr_Width exch def - RndAper -} bind def -/SetText1 { %def -% Set attributes of text -% STACK: fontname height orient mirror SetMkr - - /TAttr_Mirr exch def - /TAttr_Orient exch 10 div def - exch findfont exch scalefont setfont - RndAper -} bind def -/SetText2 { %def -% Set attributes of text -% STACK: linewidth height mirror orient SetMkr - - /TAttr_Width exch def - RndAper -} bind def -%%EndProcSet: SetAttr 1.0 0 -%%BeginProcSet: Initialize 1.0 0 -/Init { %def -% Initialize the driver -% STACK: Init - - 72 1000 div dup scale % Scale to 1/1000 inch - 250 250 translate % make origin 1/4 inch from bottom left - 1.5 setmiterlimit 1 RndAper % set line defaults - 0 setgray % set color default - /glev 0 def -} def -%%EndProcSet: Initialize 1.0 0 -%%EndProlog -/Helvetica findfont 12 scalefont setfont -35 760 moveto -(gadget.job - Fri Aug 21 03:35:02 1992) show -gsave -Init -8000 10500 Clipto -4000 2800 translate --1 1 scale -0 rotate -1 1 div dup scale -75 sg -50 sg -25 sg -0 sg -10 SetLine --1350 4700 [ -1350 4900 ] PLine --1350 4900 [ -1150 4900 ] PLine -10 SetLine -1150 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 4700 ] PLine -10 SetLine -1150 0 [ 1350 0 ] PLine -1350 0 [ 1350 200 ] PLine -10 SetLine --1350 200 [ -1350 0 ] PLine --1350 0 [ -1150 0 ] PLine -0 0 60 /PRndPad SetFlash --1100 1450 Flash --1100 1150 Flash -300 3300 Flash --100 3300 Flash --100 3100 Flash -300 3100 Flash -300 3500 Flash --100 3500 Flash --400 3700 Flash --1200 3700 Flash --100 1300 Flash --900 1300 Flash --200 2800 Flash -600 2800 Flash --1200 2800 Flash --400 2800 Flash -0 2500 Flash -0 2100 Flash --1200 3400 Flash --1200 3000 Flash --900 2300 Flash --1200 2300 Flash --1200 2500 Flash --900 2500 Flash -800 2800 Flash -1100 2800 Flash -1250 1900 Flash -450 1900 Flash --100 900 Flash --1200 900 Flash --700 4000 Flash --1100 4000 Flash -1100 3000 Flash -700 3000 Flash --300 3700 Flash -0 3700 Flash -0 0 60 /PSqrPad SetFlash -100 900 Flash -0 0 60 /PRndPad SetFlash -600 900 Flash -0 0 60 /PSqrPad SetFlash -700 3700 Flash -0 0 60 /PRndPad SetFlash -200 3700 Flash -0 0 70 /PRndPad SetFlash --750 550 Flash --750 450 Flash -0 550 Flash -0 450 Flash -750 550 Flash -750 450 Flash --648 4479 Flash --540 4479 Flash --432 4479 Flash --324 4479 Flash --216 4479 Flash --108 4479 Flash -0 4479 Flash -108 4479 Flash -216 4479 Flash -324 4479 Flash -432 4479 Flash -540 4479 Flash -648 4479 Flash --594 4593 Flash --486 4593 Flash --378 4593 Flash --270 4593 Flash --162 4593 Flash --54 4593 Flash -54 4593 Flash -162 4593 Flash -270 4593 Flash -378 4593 Flash -486 4593 Flash -594 4593 Flash -0 0 177 /PRndPad SetFlash -940 4536 Flash --940 4536 Flash -0 0 60 /PSqrPad SetFlash -950 150 Flash -0 0 60 /PRndPad SetFlash -1050 150 Flash -0 0 60 /PSqrPad SetFlash --50 150 Flash -0 0 60 /PRndPad SetFlash -50 150 Flash -0 0 60 /PSqrPad SetFlash --1050 150 Flash -0 0 60 /PRndPad SetFlash --950 150 Flash -0 0 50 /PRndPad SetFlash -950 3524 Flash -1026 3612 Flash -950 3700 Flash -0 0 60 /PSqrPad SetFlash --1200 1600 Flash -0 0 60 /PRndPad SetFlash --1100 1700 Flash --1200 1800 Flash -300 1700 Flash --100 1700 Flash -200 1300 Flash -600 1300 Flash --700 2300 Flash --300 2300 Flash --700 4200 Flash --1100 4200 Flash -1100 3200 Flash -700 3200 Flash --700 2500 Flash --300 2500 Flash --700 2100 Flash --300 2100 Flash --800 2100 Flash --1200 2100 Flash -600 1100 Flash -200 1100 Flash -0 0 60 /PSqrPad SetFlash -1200 2450 Flash -0 0 60 /PRndPad SetFlash -1100 2350 Flash -1200 2250 Flash --100 1900 Flash -300 1900 Flash -0 1500 Flash -400 1500 Flash -0 0 60 /PSqrPad SetFlash --900 1600 Flash -0 0 60 /PRndPad SetFlash --800 1600 Flash --700 1600 Flash --600 1600 Flash --500 1600 Flash --400 1600 Flash --300 1600 Flash --300 1900 Flash --400 1900 Flash --500 1900 Flash --600 1900 Flash --700 1900 Flash --800 1900 Flash --900 1900 Flash -0 0 60 /PSqrPad SetFlash -200 2200 Flash -0 0 60 /PRndPad SetFlash -300 2200 Flash -400 2200 Flash -500 2200 Flash -600 2200 Flash -700 2200 Flash -800 2200 Flash -900 2200 Flash -900 2500 Flash -800 2500 Flash -700 2500 Flash -600 2500 Flash -500 2500 Flash -400 2500 Flash -300 2500 Flash -200 2500 Flash -0 0 60 /PSqrPad SetFlash -200 3900 Flash -0 0 60 /PRndPad SetFlash -300 3900 Flash -400 3900 Flash -500 3900 Flash -600 3900 Flash -700 3900 Flash -800 3900 Flash -900 3900 Flash -1000 3900 Flash -1100 3900 Flash -1100 4200 Flash -1000 4200 Flash -900 4200 Flash -800 4200 Flash -700 4200 Flash -600 4200 Flash -500 4200 Flash -400 4200 Flash -300 4200 Flash -200 4200 Flash -0 0 60 /PSqrPad SetFlash --1000 3100 Flash -0 0 60 /PRndPad SetFlash --900 3100 Flash --800 3100 Flash --700 3100 Flash --600 3100 Flash --500 3100 Flash --400 3100 Flash --300 3100 Flash --300 3400 Flash --400 3400 Flash --500 3400 Flash --600 3400 Flash --700 3400 Flash --800 3400 Flash --900 3400 Flash --1000 3400 Flash -0 0 70 /PRndPad SetFlash -900 800 Flash -1100 800 Flash -1000 800 Flash -0 0 177 /PRndPad SetFlash -1000 1550 Flash -0 0 60 /PRndPad SetFlash -0 4000 Flash -0 4200 Flash -0 0 250 /PRndPad SetFlash --1100 450 Flash -1100 450 Flash -0 0 60 /PRndPad SetFlash -1100 3400 Flash -700 3400 Flash -10 SetText2 -0 300 4725 [ [ -31 56 -27 62 -20 65 -11 65 -4 62 0 56 0 50 -2 43 -4 40 -9 37 -22 31 -27 28 -29 25 -31 18 -31 9 -27 3 -20 0 -11 0 -4 3 0 9 ] ] Char -0 248 4725 [ [ 0 65 0 0 ] ] Char -0 228 4725 [ [ 0 65 0 0 ] [ 0 65 -15 65 -22 62 -27 56 -29 50 -31 40 -31 25 -29 15 -27 9 -22 3 -15 0 0 0 ] ] Char -0 176 4725 [ [ 0 65 0 0 ] [ 0 65 -29 65 ] [ 0 34 -18 34 ] [ 0 0 -29 0 ] ] Char -0 74 4725 [ [ -2 50 -2 53 -4 59 -6 62 -11 65 -20 65 -25 62 -27 59 -29 53 -29 46 -27 40 -22 31 0 0 -31 0 ] ] Char -12 SetLine -700 3700 [ 750 3650 ] PLine -750 3650 [ 750 800 ] PLine -750 800 [ 900 800 ] PLine -0 550 [ 300 550 ] PLine -300 550 [ 300 1100 ] PLine -300 2200 [ 250 2150 ] PLine -250 2150 [ 250 1600 ] PLine -250 1600 [ 300 1550 ] PLine -300 1550 [ 300 1100 ] PLine --700 2500 [ -550 2500 ] PLine --550 2500 [ -550 1700 ] PLine --550 1700 [ -700 1700 ] PLine --700 1700 [ -700 1600 ] PLine -300 3500 [ 175 3500 ] PLine -175 3500 [ 175 3100 ] PLine -175 3100 [ 300 3100 ] PLine -300 4200 [ 250 4150 ] PLine -250 4150 [ 250 3800 ] PLine -250 3800 [ 300 3750 ] PLine -300 3750 [ 300 3500 ] PLine --300 2500 [ -250 2550 ] PLine --250 2550 [ -250 3300 ] PLine --250 3300 [ -100 3300 ] PLine -300 4200 [ 400 4200 ] PLine --900 1600 [ -800 1600 ] PLine --800 1600 [ -800 1500 ] PLine --800 1500 [ -500 1500 ] PLine --500 1500 [ -500 1600 ] PLine -1000 2650 [ 1000 2250 ] PLine -1000 2250 [ 1200 2250 ] PLine -400 1500 [ 400 2200 ] PLine -400 2200 [ 400 2300 ] PLine -400 2300 [ 700 2300 ] PLine -700 2300 [ 700 2500 ] PLine --450 2100 [ -450 1650 ] PLine --450 1650 [ -400 1600 ] PLine --500 3400 [ -500 3150 ] PLine --500 3150 [ -650 3150 ] PLine --650 3150 [ -650 2600 ] PLine --100 2600 [ -100 2250 ] PLine --1200 2500 [ -1200 2300 ] PLine --300 2100 [ -250 2050 ] PLine --250 2050 [ -250 1650 ] PLine --250 1650 [ -300 1600 ] PLine -800 1800 [ 800 2200 ] PLine -600 900 [ 600 550 ] PLine -600 550 [ 750 550 ] PLine -700 2200 [ 700 1900 ] PLine -600 1700 [ 600 2200 ] PLine -1050 150 [ 1050 250 ] PLine -1050 250 [ 500 250 ] PLine -500 250 [ 500 1600 ] PLine -0 4200 [ 0 4100 ] PLine -900 4100 [ 900 3900 ] PLine -800 3900 [ 800 3000 ] PLine -600 3700 [ 600 3900 ] PLine -600 4200 [ 600 4075 ] PLine -600 4075 [ 450 4075 ] PLine -450 4075 [ 450 2700 ] PLine --400 2700 [ -400 2300 ] PLine -300 3300 [ 350 3350 ] PLine -350 3350 [ 350 3800 ] PLine --1200 2800 [ -1000 2800 ] PLine --1000 2800 [ -1000 3100 ] PLine --900 3100 [ -850 3150 ] PLine --850 3150 [ -850 3700 ] PLine -50 150 [ 400 150 ] PLine -400 150 [ 400 1300 ] PLine --500 3100 [ -500 3000 ] PLine --500 3000 [ -350 3000 ] PLine --350 3000 [ -350 1300 ] PLine --350 1300 [ -100 1300 ] PLine -200 3700 [ 150 3750 ] PLine -150 3750 [ 150 4425 ] PLine -150 4425 [ 108 4479 ] PLine -108 4479 [ 54 4593 ] PLine --108 4479 [ 50 4600 ] PLine -50 4600 [ 54 4593 ] PLine --324 4479 [ -216 4479 ] PLine --1100 1700 [ -1100 1450 ] PLine --1050 1050 [ -1050 1800 ] PLine --1050 1800 [ -1200 1800 ] PLine -950 3524 [ 950 3200 ] PLine -950 3700 [ 850 3700 ] PLine -850 3700 [ 850 1200 ] PLine --600 1200 [ -600 150 ] PLine --600 150 [ -950 150 ] PLine --540 4479 [ -550 4479 ] PLine --550 4479 [ -550 3900 ] PLine --350 3900 [ -350 3150 ] PLine --350 3150 [ -300 3100 ] PLine --432 4479 [ -450 4479 ] PLine --450 4479 [ -450 3150 ] PLine --450 3150 [ -382 3100 ] PLine --382 3100 [ -400 3100 ] PLine --800 4300 [ -800 3400 ] PLine --750 4350 [ -750 3450 ] PLine --750 3450 [ -700 3400 ] PLine -400 3900 [ 400 3400 ] PLine -1100 3400 [ 1100 3600 ] PLine -1100 3600 [ 1026 3600 ] PLine -1026 3600 [ 1026 3612 ] PLine -50 SetLine --100 3100 [ 0 3100 ] PLine -0 3100 [ 0 2500 ] PLine --200 2350 [ -200 1900 ] PLine --200 1900 [ -100 1900 ] PLine --200 1900 [ -200 1500 ] PLine --200 1500 [ 0 1500 ] PLine -0 1500 [ 200 1500 ] PLine -200 1500 [ 200 1300 ] PLine -800 4200 [ 800 4050 ] PLine -800 4050 [ 700 4050 ] PLine -700 4050 [ 700 3900 ] PLine --750 450 [ -900 450 ] PLine --900 450 [ -900 1300 ] PLine --1200 1600 [ -1275 1600 ] PLine --1275 1600 [ -1275 900 ] PLine --900 900 [ -1275 900 ] PLine --600 1900 [ -600 1750 ] PLine --600 1750 [ -975 1750 ] PLine --975 1750 [ -975 1300 ] PLine --975 1300 [ -900 1300 ] PLine --1200 2100 [ -1275 2100 ] PLine --1275 2100 [ -1275 1600 ] PLine --1200 3000 [ -1275 3000 ] PLine --1275 3000 [ -1275 2100 ] PLine --900 3400 [ -900 3525 ] PLine --900 3525 [ -1275 3525 ] PLine --1100 4000 [ -1275 4000 ] PLine --1275 4000 [ -1275 3000 ] PLine -75 3500 [ 75 2100 ] PLine -75 2100 [ 0 2100 ] PLine -75 2200 [ 200 2200 ] PLine -0 4479 [ 0 4400 ] PLine -0 4400 [ 75 4400 ] PLine -75 4400 [ 75 3500 ] PLine --300 3700 [ -300 3500 ] PLine --300 3500 [ 75 3500 ] PLine -900 2500 [ 900 2200 ] PLine -1000 4000 [ 1000 4200 ] PLine -0 0 55 /PRndPad SetFlash --200 2350 Flash --200 1750 Flash -200 1400 Flash -0 0 55 /PRndPad SetFlash -300 1100 Flash -0 0 55 /PRndPad SetFlash -175 3300 Flash -0 0 55 /PRndPad SetFlash -1000 2650 Flash -0 0 55 /PRndPad SetFlash --450 2100 Flash -0 0 55 /PRndPad SetFlash --650 2600 Flash --100 2600 Flash --100 2250 Flash -0 0 55 /PRndPad SetFlash -800 1800 Flash -0 0 55 /PRndPad SetFlash -700 1900 Flash -0 0 55 /PRndPad SetFlash -600 1700 Flash -0 0 55 /PRndPad SetFlash -500 1600 Flash -0 0 55 /PRndPad SetFlash -0 4100 Flash -900 4100 Flash -0 0 55 /PRndPad SetFlash -800 3000 Flash -0 0 55 /PRndPad SetFlash -600 3700 Flash -0 0 55 /PRndPad SetFlash -450 2700 Flash --400 2700 Flash --400 2300 Flash -0 0 55 /PRndPad SetFlash -350 3800 Flash -0 0 55 /PRndPad SetFlash --850 3700 Flash -0 0 55 /PRndPad SetFlash -400 1300 Flash -0 0 55 /PRndPad SetFlash --1050 1050 Flash -0 0 55 /PRndPad SetFlash -0 4475 Flash -75 4000 Flash -1000 4000 Flash -0 0 55 /PRndPad SetFlash -950 3200 Flash -0 0 55 /PRndPad SetFlash -850 1200 Flash --600 1200 Flash -0 0 55 /PRndPad SetFlash --550 3900 Flash --350 3900 Flash -0 0 55 /PRndPad SetFlash --800 4300 Flash -0 0 55 /PRndPad SetFlash --750 4350 Flash -0 0 55 /PRndPad SetFlash -400 3400 Flash -grestore -showpage diff --git a/usr.sbin/xntpd/gadget/dd0124.lpr b/usr.sbin/xntpd/gadget/dd0124.lpr deleted file mode 100644 index f6474d4..0000000 --- a/usr.sbin/xntpd/gadget/dd0124.lpr +++ /dev/null @@ -1,813 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: PADS Postscript Driver Header -%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851 -%%CreationDate: 06/08/90 -%%For: CAD Software, Littleton, MA -%%EndComments -%%BeginProcSet: Markers 1.0 0 -% marker attributes -/MAttr_Width 1 def -/MAttr_Size 0 def -/MAttr_Type /M1 def -% procedures -/M1 { %def -% draw marker 1: plus -% Stack: - M1 - - -2 0 rmoveto - 4 0 rlineto - -2 2 rmoveto - 0 -4 rlineto -} bind def -/M2 { %def -% draw marker 2: cross -% Stack: - M2 - - -2 -2 rmoveto - 4 4 rlineto - -4 0 rmoveto - 4 -4 rlineto -} bind def -/M3 { %def -% draw marker 3: square -% Stack: - M3 - - 0 2 rlineto - 2 0 rlineto - 0 -4 rlineto - -4 0 rlineto - 0 4 rlineto - 2 0 rlineto -} bind def -/M4 { %def -% draw marker 4: diamond -% Stack: - M4 - - 0 2 rlineto - 2 -2 rlineto - -2 -2 rlineto - -2 2 rlineto - 2 2 rlineto -} bind def -/M5 { %def -% draw marker 5: hourglass -% Stack: - M5 - - 2 2 rlineto - -4 0 rlineto - 4 -4 rlineto - -4 0 rlineto - 2 2 rlineto -} bind def -/M6 { %def -% draw marker 6: bowtie -% Stack: - M6 - - 2 2 rlineto - 0 -4 rlineto - -4 4 rlineto - 0 -4 rlineto - 2 2 rlineto -} bind def -/M7 { %def -% draw marker 7: small plus (goes with char marker) -% Stack: - M7 - - -1 0 rmoveto - 2 0 rlineto - -1 1 rmoveto - 0 -2 rlineto -} bind def -/Marker { %def -% Command from driver: draw marker -% STACK: x y Marker - - MAttr_Size 0 gt - { - gsave - moveto - MAttr_Size 4 div dup scale - MAttr_Type load exec - 4 MAttr_Size div dup scale - MAttr_Width setlinewidth - stroke - grestore - } if -} def -%%EndProcSet: Markers 1.0 0 -%%BeginProcSet: Lib 1.0 0 -/sg { %def -% Command from driver: set the gray scale 0 - 100 -% STACK: greylevel sg - 100 div dup setgray /glev exch def -} bind def -/Circle { %def -% draw a circle -% STACK: x y radius Circle - - 0 360 arc -} bind def -/RndAper { %def -% select a round aperture -% STACK: - RndAper - - 1 setlinejoin - 1 setlinecap -} bind def -/SqrAper { %def -% select a square aperture -% STACK: - SqrAper - - 0 setlinejoin - 2 setlinecap -} bind def -/Line { %def -% draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] Line - - 3 1 roll - moveto - true - exch - % This pushes the x then the y then does lineto - { exch { false } { lineto true } ifelse } forall - pop -} bind def -/Clipto { %def -% set clipping rectangle from 0,0 to new values -% STACK: x y Clipto - - 0 0 moveto - dup 0 exch lineto - 2 copy lineto - pop - 0 lineto - closepath - clip - newpath -} bind def -/Clip4 { %def -% set clipping rectangle from xmin,ymin to xmax,ymax -% STACK: xmin ymin xmax ymax Clip4 - - 4 copy pop pop moveto - 4 copy pop exch lineto pop - 2 copy lineto - exch pop exch pop lineto - closepath - clip - newpath -} bind def -%%EndProcSet: Lib 1.0 0 -%%BeginProcSet: Lines 1.0 0 -% line attributes % -/LAttr_Width 1 def -% line procedures -/PLine { %def -% Cammand from driver: draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - LAttr_Width setlinewidth - stroke -} bind def % PLine -/Char { %def -% Command from driver: draw a character at the current position -% STACK: type x y stroke_array Char - -% stroke array -- [ stroke1 stroke2 ... stroken ] -% stroke -- connected staight lines -% type = 0 if text 1 if marker - gsave - 4 1 roll - translate - 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth - { - dup length 2 gt - { - dup dup 0 get exch 1 get % get starting point - 3 -1 roll % put x y before array - dup length 2 sub 2 exch getinterval % delete first items from array - Line - stroke - } - { - aload pop currentlinewidth 2 div Circle fill - } ifelse - } forall - grestore -} bind def % Char -/PArc { %def -% Command from driver: draw an arc -% STACK: x y radius startangle deltaangle Arc - - 10 div exch 10 div exch - 2 copy pop add - arc - LAttr_Width setlinewidth - stroke -} bind def -/PCircle { %def -% Command from driver: draw an circle -% STACK: x y radius PCircle - - Circle - LAttr_Width setlinewidth - stroke -} bind def -%%EndProcSet: Lines 1.0 0 -%%BeginProcSet: Polygon 1.0 0 -% polygon attributes % -/PAttr_ExtWidth 1 def -/PAttr_IntWidth 1 def -/PAttr_Grid 1 def -% polygon procedures -/LoopSet { %def -% set up for loop condition -% STACK: start end LoopSet low gridwidth high - 2 copy lt { exch } if - % make grid line up to absolute coordinates - PAttr_Grid div truncate PAttr_Grid mul exch - PAttr_Grid exch -} bind def -/Hatch { %def -% draw cross hatch pattern in current path -% STACK: - Hatch - - pathbbox - /ury exch def - /urx exch def - /lly exch def - /llx exch def - clip - newpath - llx urx LoopSet - { % x loop - dup lly exch ury moveto lineto - } for - lly ury LoopSet - { % y loop - llx exch dup urx exch moveto lineto - } for - PAttr_IntWidth setlinewidth - stroke -} bind def -/PPoly { %def -% Command from driver: draw a plygon -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - closepath - gsave - PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse - grestore - PAttr_ExtWidth setlinewidth - stroke -} bind def -%%EndProcSet: Polygon 1.0 0 -%%BeginProcSet: Text 1.0 0 -% text attributes % -/TAttr_Mirr 0 def -/TAttr_Orient 0 def -/TAttr_Width 1 def -% text procedures -/Text { %def -% Command from driver: Draw text -% STACK: x y width string Text - - gsave - 4 2 roll - translate - TAttr_Mirr 0 gt - { - -1 1 scale - } if - TAttr_Orient rotate - 0 0 moveto - dup length dup 1 gt - { - exch dup stringwidth pop - 4 -1 roll - exch 2 copy - lt - { - div 1 scale show - } - { - sub - 3 -1 roll 1 sub div - 0 3 -1 roll ashow - } - ifelse - } - { - pop - show - } ifelse - grestore -} bind def -%%EndProcSet: Text 1.0 0 -%%BeginProcSet: FlashSymbols 1.0 0 -% flash symbol attributes % -/FAttr_Type /PRndPad def -/FAttr_Width 0 def -/FAttr_Length 1 def -/FAttr_Orient 0 def -% flash symbol procedures -/PRndPad { %def -% Command from driver: draw an circular pad -% STACK: - PCirclePad - - FAttr_Width dup scale - 0 0 .5 Circle - fill -} bind def -/PSqrPad { %def -% Draw an Square pad -% STACK: - PRectPad - - FAttr_Width dup scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/PRectPad { %def -% Draw an rectangular pad -% STACK: - PRectPad - - FAttr_Length FAttr_Width scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/POvalPad { %def -% Draw an oval pad -% STACK: - POvalPad - - FAttr_Width setlinewidth - FAttr_Length FAttr_Width sub 2 div dup - neg 0 moveto - 0 lineto - RndAper - stroke -} bind def -/Anl { %def - 0 0 .5 Circle - fill - FAttr_Length FAttr_Width lt - { % inner circle - 0 0 - FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse - 2 div Circle - 1 setgray - fill - glev setgray - } if -} bind def -/PAnlPad { %def -% Draw an annular pad -% STACK: - PAnlPad - - FAttr_Width dup scale - Anl -} bind def -/PRelPad { %def -% Draw an thermal relief pad -% STACK: - PRelPad - - PAnlPad - 1 setgray - .17 setlinewidth - 0 setlinecap % the x - 45 rotate - .5 0 moveto -.5 0 lineto - 0 .5 moveto 0 -.5 lineto - stroke - glev setgray -} bind def -/Flash { %def -% Command from driver: Flash a symbol -% STACK: x y Flash - - FAttr_Width 0 gt - { - gsave - translate - FAttr_Orient rotate - FAttr_Type load exec - grestore - } if -} def -%%EndProcSet: FlashSymbols 1.0 0 -%%BeginProcSet: SetAttr 1.0 0 -/SetLine { %def -% Set the width of the lines -% STACK: linewidth SetLine - - /LAttr_Width exch def - RndAper -} bind def -/SetPoly { %def -% Set attribute of polygon -% STACK: external_width internal_grid_width grid_spacing SetPoly - - /PAttr_Grid exch def - /PAttr_IntWidth exch def - /PAttr_ExtWidth exch def - RndAper -} bind def -/SetFlash { %def -% Set Attributed of flash pad -% STACK: orientation_angle length width aperture_type SetFlash - - /FAttr_Type exch def - FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or - { SqrAper } { RndAper } ifelse - /FAttr_Width exch def - /FAttr_Length exch def - /FAttr_Orient exch 10 div def -} bind def -/SetMkr { %def -% Set attributes of markers -% STACK: linewidth size type SetMkr - - /MAttr_Type exch def - /MAttr_Size exch def - /MAttr_Width exch def - RndAper -} bind def -/SetText1 { %def -% Set attributes of text -% STACK: fontname height orient mirror SetMkr - - /TAttr_Mirr exch def - /TAttr_Orient exch 10 div def - exch findfont exch scalefont setfont - RndAper -} bind def -/SetText2 { %def -% Set attributes of text -% STACK: linewidth height mirror orient SetMkr - - /TAttr_Width exch def - RndAper -} bind def -%%EndProcSet: SetAttr 1.0 0 -%%BeginProcSet: Initialize 1.0 0 -/Init { %def -% Initialize the driver -% STACK: Init - - 72 1000 div dup scale % Scale to 1/1000 inch - 250 250 translate % make origin 1/4 inch from bottom left - 1.5 setmiterlimit 1 RndAper % set line defaults - 0 setgray % set color default - /glev 0 def -} def -%%EndProcSet: Initialize 1.0 0 -%%EndProlog -/Helvetica findfont 12 scalefont setfont -35 760 moveto -(gadget.job - Fri Aug 21 03:35:28 1992) show -gsave -Init -8000 10500 Clipto -4002 3763 translate -0 rotate -1 1 div dup scale -75 sg -50 sg -25 sg -0 sg -10 SetLine --1350 0 [ -1350 4900 ] PLine --1350 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 0 ] PLine -1350 0 [ -1350 0 ] PLine -10 SetLine --1350 4700 [ -1350 4900 ] PLine --1350 4900 [ -1150 4900 ] PLine -10 SetLine -1150 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 4700 ] PLine -10 SetLine -1150 0 [ 1350 0 ] PLine -1350 0 [ 1350 200 ] PLine -10 SetLine --1350 200 [ -1350 0 ] PLine --1350 0 [ -1150 0 ] PLine -10 80 /M4 SetMkr --1100 1450 Marker --1100 1150 Marker -300 3300 Marker --100 3300 Marker --100 3100 Marker -300 3100 Marker -300 3500 Marker --100 3500 Marker --400 3700 Marker --1200 3700 Marker --100 1300 Marker --900 1300 Marker --200 2800 Marker -600 2800 Marker --1200 2800 Marker --400 2800 Marker -0 2500 Marker -0 2100 Marker --1200 3400 Marker --1200 3000 Marker --900 2300 Marker --1200 2300 Marker --1200 2500 Marker --900 2500 Marker -800 2800 Marker -1100 2800 Marker -1250 1900 Marker -450 1900 Marker --100 900 Marker --1200 900 Marker --700 4000 Marker --1100 4000 Marker -1100 3000 Marker -700 3000 Marker --300 3700 Marker -0 3700 Marker -10 80 /M7 SetMkr -100 900 Marker -1 113 913 [ [ 25 52 0 0 ] [ 0 52 25 52 ] [ 0 0 25 0 ] ] Char -600 900 Marker -1 613 913 [ [ 25 52 0 0 ] [ 0 52 25 52 ] [ 0 0 25 0 ] ] Char -700 3700 Marker -1 713 3713 [ [ 25 52 0 0 ] [ 0 52 25 52 ] [ 0 0 25 0 ] ] Char -200 3700 Marker -1 213 3713 [ [ 25 52 0 0 ] [ 0 52 25 52 ] [ 0 0 25 0 ] ] Char -10 80 /M4 SetMkr --750 550 Marker --750 450 Marker -0 550 Marker -0 450 Marker -750 550 Marker -750 450 Marker --648 4479 Marker --540 4479 Marker --432 4479 Marker --324 4479 Marker --216 4479 Marker --108 4479 Marker -0 4479 Marker -108 4479 Marker -216 4479 Marker -324 4479 Marker -432 4479 Marker -540 4479 Marker -648 4479 Marker --594 4593 Marker --486 4593 Marker --378 4593 Marker --270 4593 Marker --162 4593 Marker --54 4593 Marker -54 4593 Marker -162 4593 Marker -270 4593 Marker -378 4593 Marker -486 4593 Marker -594 4593 Marker -10 80 /M7 SetMkr -940 4536 Marker -1 953 4549 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char --940 4536 Marker -1 -927 4549 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char -10 80 /M4 SetMkr -950 150 Marker -1050 150 Marker --50 150 Marker -50 150 Marker --1050 150 Marker --950 150 Marker -10 80 /M7 SetMkr -950 3524 Marker -1 963 3537 [ [ 0 52 25 0 ] [ 25 52 0 0 ] ] Char -1026 3612 Marker -1 1039 3625 [ [ 0 52 25 0 ] [ 25 52 0 0 ] ] Char -950 3700 Marker -1 963 3713 [ [ 0 52 25 0 ] [ 25 52 0 0 ] ] Char -10 80 /M7 SetMkr --1200 1600 Marker -1 -1187 1613 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char --1100 1700 Marker -1 -1087 1713 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char --1200 1800 Marker -1 -1187 1813 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char -10 80 /M4 SetMkr -300 1700 Marker --100 1700 Marker -200 1300 Marker -600 1300 Marker --700 2300 Marker --300 2300 Marker --700 4200 Marker --1100 4200 Marker -1100 3200 Marker -700 3200 Marker --700 2500 Marker --300 2500 Marker --700 2100 Marker --300 2100 Marker --800 2100 Marker --1200 2100 Marker -600 1100 Marker -200 1100 Marker -10 80 /M7 SetMkr -1200 2450 Marker -1 1213 2463 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char -1100 2350 Marker -1 1113 2363 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char -1200 2250 Marker -1 1213 2263 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char -10 80 /M4 SetMkr --100 1900 Marker -300 1900 Marker -0 1500 Marker -400 1500 Marker --900 1600 Marker --800 1600 Marker --700 1600 Marker --600 1600 Marker --500 1600 Marker --400 1600 Marker --300 1600 Marker --300 1900 Marker --400 1900 Marker --500 1900 Marker --600 1900 Marker --700 1900 Marker --800 1900 Marker --900 1900 Marker -200 2200 Marker -300 2200 Marker -400 2200 Marker -500 2200 Marker -600 2200 Marker -700 2200 Marker -800 2200 Marker -900 2200 Marker -900 2500 Marker -800 2500 Marker -700 2500 Marker -600 2500 Marker -500 2500 Marker -400 2500 Marker -300 2500 Marker -200 2500 Marker -200 3900 Marker -300 3900 Marker -400 3900 Marker -500 3900 Marker -600 3900 Marker -700 3900 Marker -800 3900 Marker -900 3900 Marker -1000 3900 Marker -1100 3900 Marker -1100 4200 Marker -1000 4200 Marker -900 4200 Marker -800 4200 Marker -700 4200 Marker -600 4200 Marker -500 4200 Marker -400 4200 Marker -300 4200 Marker -200 4200 Marker --1000 3100 Marker --900 3100 Marker --800 3100 Marker --700 3100 Marker --600 3100 Marker --500 3100 Marker --400 3100 Marker --300 3100 Marker --300 3400 Marker --400 3400 Marker --500 3400 Marker --600 3400 Marker --700 3400 Marker --800 3400 Marker --900 3400 Marker --1000 3400 Marker -900 800 Marker -1100 800 Marker -1000 800 Marker -10 80 /M7 SetMkr -1000 1550 Marker -1 1013 1563 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char -10 80 /M4 SetMkr -0 4000 Marker -0 4200 Marker -10 80 /M7 SetMkr --1100 450 Marker -1 -1087 463 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char -1100 450 Marker -1 1113 463 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char -10 80 /M4 SetMkr -1100 3400 Marker -700 3400 Marker -10 80 /M4 SetMkr --200 2350 Marker --200 1750 Marker -200 1400 Marker -10 80 /M4 SetMkr -300 1100 Marker -10 80 /M4 SetMkr -175 3300 Marker -10 80 /M4 SetMkr -1000 2650 Marker -10 80 /M4 SetMkr --450 2100 Marker -10 80 /M4 SetMkr --650 2600 Marker --100 2600 Marker --100 2250 Marker -10 80 /M4 SetMkr -800 1800 Marker -10 80 /M4 SetMkr -700 1900 Marker -10 80 /M4 SetMkr -600 1700 Marker -10 80 /M4 SetMkr -500 1600 Marker -10 80 /M4 SetMkr -0 4100 Marker -900 4100 Marker -10 80 /M4 SetMkr -800 3000 Marker -10 80 /M4 SetMkr -600 3700 Marker -10 80 /M4 SetMkr -450 2700 Marker --400 2700 Marker --400 2300 Marker -10 80 /M4 SetMkr -350 3800 Marker -10 80 /M4 SetMkr --850 3700 Marker -10 80 /M4 SetMkr -400 1300 Marker -10 80 /M4 SetMkr --1050 1050 Marker -10 80 /M4 SetMkr -0 4475 Marker -75 4000 Marker -1000 4000 Marker -10 80 /M4 SetMkr -950 3200 Marker -10 80 /M4 SetMkr -850 1200 Marker --600 1200 Marker -10 80 /M4 SetMkr --550 3900 Marker --350 3900 Marker -10 80 /M4 SetMkr --800 4300 Marker -10 80 /M4 SetMkr --750 4350 Marker -10 80 /M4 SetMkr -400 3400 Marker -10 SetLine --1355 -485 [ -275 -485 ] PLine --1355 -725 [ -275 -725 ] PLine --1355 -965 [ -275 -965 ] PLine --1355 -1205 [ -275 -1205 ] PLine --1355 -1445 [ -275 -1445 ] PLine --1355 -1685 [ -275 -1685 ] PLine --1355 -1925 [ -275 -1925 ] PLine --1355 -485 [ -1355 -1925 ] PLine --995 -485 [ -995 -1925 ] PLine --635 -485 [ -635 -1925 ] PLine --275 -485 [ -275 -1925 ] PLine -10 SetText2 -0 -1295 -665 [ [ 38 67 32 75 24 78 13 78 5 75 0 67 0 60 2 52 5 48 10 45 27 37 32 33 35 30 38 22 38 11 32 3 24 0 13 0 5 3 0 11 ] ] Char -0 -1233 -665 [ [ 0 78 0 0 ] ] Char -0 -1209 -665 [ [ 38 78 0 0 ] [ 0 78 38 78 ] [ 0 0 38 0 ] ] Char -0 -1147 -665 [ [ 0 78 0 0 ] [ 0 78 35 78 ] [ 0 41 21 41 ] [ 0 0 35 0 ] ] Char -10 SetText2 -0 -873 -665 [ [ 16 78 10 75 5 67 2 60 0 48 0 30 2 18 5 11 10 3 16 0 27 0 32 3 38 11 40 18 43 30 43 48 40 60 38 67 32 75 27 78 16 78 ] [ 24 15 40 -7 ] ] Char -0 -805 -665 [ [ 19 78 19 0 ] [ 0 78 38 78 ] ] Char -0 -743 -665 [ [ 0 78 21 41 21 0 ] [ 43 78 21 41 ] ] Char -10 SetText2 -0 -575 -665 [ [ 38 67 32 75 24 78 13 78 5 75 0 67 0 60 2 52 5 48 10 45 27 37 32 33 35 30 38 22 38 11 32 3 24 0 13 0 5 3 0 11 ] ] Char -0 -513 -665 [ [ 0 78 21 41 21 0 ] [ 43 78 21 41 ] ] Char -0 -445 -665 [ [ 0 78 0 0 ] [ 0 78 21 0 ] [ 43 78 21 0 ] [ 43 78 43 0 ] ] Char -10 SetText2 -0 -1233 -905 [ [ 5 78 35 78 19 48 27 48 32 45 35 41 38 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char -0 -1171 -905 [ [ 38 78 10 0 ] [ 0 78 38 78 ] ] Char -10 SetText2 -0 -873 -905 [ [ 2 60 2 63 5 71 8 75 13 78 24 78 30 75 32 71 35 63 35 56 32 48 27 37 0 0 38 0 ] ] Char -0 -811 -905 [ [ 16 78 8 75 2 63 0 45 0 33 2 15 8 3 16 0 21 0 30 3 35 15 38 33 38 45 35 63 30 75 21 78 16 78 ] ] Char -0 -749 -905 [ [ 27 78 0 26 40 26 ] [ 27 78 27 0 ] ] Char -10 120 /M4 SetMkr --455 -845 Marker -10 SetText2 -0 -1233 -1145 [ [ 27 78 0 26 40 26 ] [ 27 78 27 0 ] ] Char -0 -1168 -1145 [ [ 0 63 5 67 13 78 13 0 ] ] Char -10 SetText2 -0 -749 -1145 [ [ 32 67 30 75 21 78 16 78 8 75 2 63 0 45 0 26 2 11 8 3 16 0 19 0 27 3 32 11 35 22 35 26 32 37 27 45 19 48 16 48 8 45 2 37 0 26 ] ] Char -10 SetText2 -0 -515 -1145 [ [ 0 78 13 0 ] [ 27 78 13 0 ] [ 27 78 40 0 ] [ 54 78 40 0 ] ] Char -10 SetText2 -0 -1233 -1385 [ [ 5 78 35 78 19 48 27 48 32 45 35 41 38 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char -0 -1171 -1385 [ [ 2 60 2 63 5 71 8 75 13 78 24 78 30 75 32 71 35 63 35 56 32 48 27 37 0 0 38 0 ] ] Char -10 SetText2 -0 -749 -1385 [ [ 5 78 35 78 19 48 27 48 32 45 35 41 38 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char -10 SetText2 -0 -515 -1385 [ [ 0 78 38 0 ] [ 38 78 0 0 ] ] Char -10 SetText2 -0 -1295 -1625 [ [ 0 63 5 67 13 78 13 0 ] ] Char -0 -1257 -1625 [ [ 2 60 2 63 5 71 8 75 13 78 24 78 30 75 32 71 35 63 35 56 32 48 27 37 0 0 38 0 ] ] Char -0 -1195 -1625 [ [ 16 78 8 75 2 63 0 45 0 33 2 15 8 3 16 0 21 0 30 3 35 15 38 33 38 45 35 63 30 75 21 78 16 78 ] ] Char -10 SetText2 -0 -749 -1625 [ [ 35 78 8 78 5 45 8 48 16 52 24 52 32 48 38 41 40 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char -10 SetText2 -0 -515 -1625 [ [ 0 78 21 41 21 0 ] [ 43 78 21 41 ] ] Char -10 SetText2 -0 -1233 -1865 [ [ 5 78 35 78 19 48 27 48 32 45 35 41 38 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char -0 -1171 -1865 [ [ 35 78 8 78 5 45 8 48 16 52 24 52 32 48 38 41 40 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char -10 SetText2 -0 -749 -1865 [ [ 27 78 0 26 40 26 ] [ 27 78 27 0 ] ] Char -10 SetText2 -0 -515 -1865 [ [ 38 78 0 0 ] [ 0 78 38 78 ] [ 0 0 38 0 ] ] Char -grestore -showpage diff --git a/usr.sbin/xntpd/gadget/gadget.lst b/usr.sbin/xntpd/gadget/gadget.lst deleted file mode 100644 index a10aff3..0000000 --- a/usr.sbin/xntpd/gadget/gadget.lst +++ /dev/null @@ -1,332 +0,0 @@ - - - ---------------------------------------------------------------------------- - DESIGN RULE CHECK Tue Sep 15 01:23:56 1992 PAGE 1 - 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992 ---------------------------------------------------------------------------- - - - -FLOATING INPUTS: - NONE FOUND - -NETS WITH NO DRIVING SOURCE: - NONE FOUND - -NETS WITH MULTIPLE DRIVING SOURCES: - NONE FOUND - -NETS WITH MORE THAN ONE LABEL: - NONE FOUND - -NETS WITH A SINGLE PIN: - NONE FOUND - -REFERENCE DESIGNATORS USED TWO OR MORE TIMES: - NONE FOUND - - - ---------------------------------------------------------------------------- - REPORT REF. DES. Tue Sep 15 01:23:56 1992 PAGE 1 - 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992 ---------------------------------------------------------------------------- - - -C1 DCAP A/01 -C10 DCAP A/01 -C11 DCAP A/01 -C12 DCAPE A/01 -C13 DCAP A/01 -C14 DCAP A/01 -C15 DCAP A/01 -C16 DCAPE A/01 -C17 DCAPE A/01 -C18 DCAPE A/01 -C2 DCAP A/01 -C3 DCAPE A/01 -C4 DCAP A/01 -C5 DCAP A/01 -C6 DCAP A/01 -C7 DCAP A/01 -C8 DCAP A/01 -C9 DCAPE A/01 -D1 DDIODE A/01 -D2 DDIODE A/01 -J1 DB25 A/01 -J2 DBNC A/01 -J3 DBNC A/01 -J4 DBNC A/01 -LED1 DLED A/01 -LED2 DLED A/01 -LED3 DLED A/01 -Q1 DPNP A/01 -R1 DRES A/01 -R10 DRES A/01 -R11 DRES A/01 -R12 DRES A/01 -R13 DRES A/01 -R14 DRES A/01 -R2 DRES A/01 -R3 DRES A/01 -R4 DRES A/01 -R5 DRES A/01 -R6 DRES A/01 -R7 DPOT A/01 -R8 DPOT A/01 -R9 DRES A/01 -U1 ICL232 A/01 -U2 MC145443 A/01 -U3A 74LS123 A/01 -U3B 74LS123 B/01 -U4A LM324 A/01 -U4B LM324 B/01 - - - ---------------------------------------------------------------------------- - REPORT REF. DES. Tue Sep 15 01:23:57 1992 PAGE 2 - 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992 ---------------------------------------------------------------------------- - - -U5 LM7805 A/01 -X1 DXTAL A/01 - - - ---------------------------------------------------------------------------- - REPORT LABEL Tue Sep 15 01:23:57 1992 PAGE 1 - 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992 ---------------------------------------------------------------------------- - - -+12 01 -+5 01 -AGND 01 -CGND 01 -GND 01 -VCC 01 - - - ---------------------------------------------------------------------------- - WIRE LIST Tue Sep 15 01:23:57 1992 PAGE 1 - 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992 ---------------------------------------------------------------------------- - - -1 +12 C18-T D1-C D2-C - U5-1 - -2 +5 C1-T C13-T C2-T - C3-B C7-T R11-T - R12-L R2-T R7-1 - R7-2 R9-L U1-16 - U2-13 U2-14 U2-6 - U3A-16 U3B-16 U5-3 - -3 01007018 J2-1 R8-1 - -4 01007039 J3-1 R13-T U3A-2 - -5 01011019 C15-L R8-2 - -6 01013019 C15-R R3-T U4A-3 - -7 01013024 C5-T C6-B C7-B - C8-B R3-B U2-18 - U2-19 - -8 01015020 U4A-1 U4A-2 U4B-5 - -9 01017033 C14-T R7-3 U3A-15 - -10 01019043 R11-B U3A-3 U3B-11 - -11 01020035 C14-B U3A-14 - -12 01022016 C11-L R6-L U4B-6 - -13 01022039 U3A-13 U3B-10 - -14 01022040 U1-11 U3A-4 - -15 01024023 C10-L C11-R R5-T - -16 01027016 C10-R R4-L R6-R - U4B-7 - -17 01029043 C17-T R9-R U3B-7 - -18 01030057 D2-A J4-1 - -19 01031045 C17-B U3B-6 - -20 01033049 R10-L U3B-5 - -21 01036049 LED3-A R10-R - - - - ---------------------------------------------------------------------------- - WIRE LIST Tue Sep 15 01:23:57 1992 PAGE 2 - 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992 ---------------------------------------------------------------------------- - - -22 01037023 U2-9 X1-L - -23 01038014 Q1-E R2-B - -24 01038017 LED1-A Q1-C - -25 01040015 Q1-B R14-L - -26 01041023 U2-8 X1-R - -27 01042022 C8-T U2-7 - -28 01045015 C4-B U2-4 - -29 01045018 R14-R U2-3 - -30 01045020 U1-10 U2-5 - -31 01046010 R1-L R4-R U2-16 - -32 01046025 C6-T U2-10 - -33 01047042 C9-T U1-1 - -34 01047044 C9-B U1-3 - -35 01048033 J1-2 U1-8 - -36 01049034 J1-11 U1-13 - -37 01051047 C3-T U1-2 - -38 01052057 LED2-A R12-R - -39 01054021 R1-R U2-15 - -40 01054025 U1-9 U2-11 - -41 01054047 C16-T U1-6 - -42 01055053 D1-A J1-20 J1-6 - J1-8 - -43 01057040 J1-12 U1-14 - -44 01057041 J1-3 U1-7 - -45 01057042 C12-T U1-4 - -46 01057044 C12-B U1-5 - - - - ---------------------------------------------------------------------------- - WIRE LIST Tue Sep 15 01:23:57 1992 PAGE 3 - 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992 ---------------------------------------------------------------------------- - - -47 01068042 J1-4 J1-5 - -48 AGND C4-T C5-B LED1-C - R5-B R8-3 U2-2 - U4A-11 U4B-11 - -49 CGND J2-2 J3-2 J4-2 - -50 GND C1-B C13-B C16-B - C18-B C2-B J1-1 - J1-7 LED2-C LED3-C - R13-B U1-15 U2-12 - U3A-1 U3A-8 U3B-8 - U3B-9 U5-2 - -51 VCC U4A-4 U4B-4 - - - - ---------------------------------------------------------------------------------------------------------------- -BILL OF MATERIALS XYZ COMPUTER CORP. LORAN 150-0001-001 REV 1A Tue Sep 15 01:23:57 1992 PAGE 1 ---------------------------------------------------------------------------------------------------------------- - - - ITEM QUAN. PART NUMBER DESCRIPTION REF. DES. - - 1 7 CAPACITOR,100N, C1,C13,C2,C5,C6 - C7,C8 - - 2 1 CAPACITOR,100U C18 - - 3 5 CAPACITOR,10N, C10,C11,C14,C15 - C4 - - 4 5 CAPACITOR,22U C12,C16,C17,C3 - C9 - - 5 1 CRYSTAL, 3.59MHZ X1 - - 6 2 DIODE, 1N4002 D1,D2 - - 7 1 LIGHT EMITTING DIODE, AMBER LED3 - - 8 1 LIGHT EMITTING DIODE, GRN LED1 - - 9 1 LIGHT EMITTING DIODE, RED LED2 - - 10 1 PNP TRANSISTOR, 2N2907 Q1 - - 11 1 POTENTIOMETER, 10K R8 - - 12 1 POTENTIOMETER, 20K R7 - - 13 2 RESISTOR,100K, R13,R3 - - 14 1 RESISTOR,10K, R1 - - 15 1 RESISTOR,1MEG, R4 - - 16 2 RESISTOR,3.3K, R11,R14 - - 17 3 RESISTOR,330, R10,R12,R2 - - 18 1 RESISTOR,33K, R9 - - 19 1 RESISTOR,680, R5 - - 20 1 RESISTOR,68K, R6 - - 21 3 010-0002-001 CONNECTOR, BNC CHASSIS J2,J3,J4 - - 22 1 010-DB25-001 DB25 - 25-PIN CONNECTOR J1 - - 23 2 300-0123-001 74LS123 - LS TTL RETRIG MONOSTABLE MULTIVIBRATORS U3A,U3B - - - ---------------------------------------------------------------------------------------------------------------- -BILL OF MATERIALS XYZ COMPUTER CORP. LORAN 150-0001-001 REV 1A Tue Sep 15 01:23:57 1992 PAGE 2 ---------------------------------------------------------------------------------------------------------------- - - - ITEM QUAN. PART NUMBER DESCRIPTION REF. DES. - - 24 2 302-0324-001 LM324A - LOW POWER QUAD OP-AMP U4A,U4B - - 25 1 302-7805-001 LM7805C - VOLTAGE REGULATOR, +5VDC U5 - - 26 1 306-5443-001 MC145443 - 300-BPS MODEM U2 - - 27 1 310-0232-001 ICL232 - POWERED RS232 TRANSMITTER/RECEIVER U1 - diff --git a/usr.sbin/xntpd/gadget/gadget.s01 b/usr.sbin/xntpd/gadget/gadget.s01 deleted file mode 100644 index 314f7ba..0000000 --- a/usr.sbin/xntpd/gadget/gadget.s01 +++ /dev/null @@ -1,2277 +0,0 @@ -%!PS-Adobe-23.0 EPSF-1.2 -%%Creator: SCHEMA -%%BoundingBox: 0 0 1343.0 1023.0 -/scl 511804.0 0.072 mul 65536.0 div def -scl scl scale - -% Landscape Orientation -/xoff 256.0 65536.0 mul 511804.0 div def -/yoff 1343.0 -256.0 65536.0 mul 511804.0 div sub def -xoff yoff translate --90 rotate - -0 setgray - -/a { 1 setlinewidth newpath arcn stroke } def -/fa { 3 setlinewidth newpath arcn stroke } def -/c { 1 setlinewidth newpath 0 360 arc stroke } def -/fc { 1 setlinewidth newpath 0 360 arc fill } def -/l { 1 setlinewidth newpath moveto lineto stroke } def -/t { 3 setlinewidth newpath moveto lineto stroke } def -/ds { [4 4] 0 setdash 1 setlinewidth - newpath moveto lineto stroke [] 0 setdash } def -/dt { [2 2] 0 setdash 1 setlinewidth - newpath moveto lineto stroke [] 0 setdash } def - -8 7 8 1015 t -1328 7 912 7 t -1336 1015 8 1015 t -1336 7 1336 1015 t -912 7 8 7 t -1336 7 1328 7 t - -/reencsmalldict 12 dict def %% Schema font definitions -/ReEncodeSmall - { reencsmalldict begin - /newcodesandnames exch def - /newfontname exch def - /basefontname exch def - /basefontdict basefontname findfont def - /newfont basefontdict maxlength dict def - basefontdict - { exch dup /FID ne - { dup /Encoding eq - { exch dup length array copy newfont 3 1 roll put } - { exch newfont 3 1 roll put } - ifelse - } - { pop pop } - ifelse - } forall - newfont /FontName newfontname put - newcodesandnames aload pop - newcodesandnames length 2 idiv - { newfont /Encoding get 3 1 roll put } - repeat - newfontname newfont definefont pop - end - } def -/schfontvec [ 8#200 /Ccedilla 8#201 /udieresis 8#202 /eacute 8#203 /acircumflex -8#204 /adieresis 8#205 /agrave 8#207 /ccedilla 8#210 /ecircumflex -8#211 /edieresis 8#212 /egrave 8#213 /idieresis 8#214 /icircumflex -8#215 /igrave 8#216 /Adieresis 8#220 /Eacute 8#223 /ocircumflex -8#224 /odieresis 8#225 /ograve 8#226 /ucircumflex 8#227 /ugrave -8#230 /ydieresis 8#231 /Odieresis 8#232 /Udieresis 8#240 /aacute 8#241 /iacute -8#242 /oacute 8#243 /uacute 8#244 /ntilde 8#245 /Ntilde ] def -/schsymbvec [ 8#341 /beta 8#346 /mu 8#352 /Omega ] def -/Courier-Bold /Schfont schfontvec ReEncodeSmall -/Symbol /Schsymb schsymbvec ReEncodeSmall - - -/htdict 4 dict def %% HTEXT - variable spacing horizontal text routine -/ht - { htdict begin - /textstring exch def - /xskip exch def - 0 text_height neg rmoveto - /Schfont findfont text_height scalefont setfont - textstring - { - /charcode exch def - /thechar ( ) dup 0 charcode put def - gsave - charcode 8#245 gt - { /Schsymb findfont text_height scalefont setfont - thechar show - /Schfont findfont text_height scalefont setfont } - { thechar show } - ifelse - grestore - currentpoint moveto - xskip 0 rmoveto - } forall - end - } def - -/text_height 12 def -/text_width 6 def -1304 27 moveto 9 (2) ht -/text_height 12 def -/text_width 6 def -1272 27 moveto 9 (OF) ht -/text_height 12 def -/text_width 6 def -1248 27 moveto 9 (1) ht -/text_height 12 def -/text_width 6 def -1192 27 moveto 9 (SHEET) ht -1176 31 1176 7 l -1336 55 992 55 l -1336 31 992 31 l -992 7 992 87 t -1336 87 992 87 t -/text_height 20 def -/text_width 9 def -1032 87 moveto 13 (1-PPS/RS232 Converter) ht -/text_height 12 def -/text_width 6 def -1040 27 moveto 9 (26 June 1992) ht -1176 55 1176 31 l -/text_height 12 def -/text_width 6 def -1032 51 moveto 9 (100-0001-001) ht -/text_height 12 def -/text_width 6 def -1216 51 moveto 9 (REV) ht -/text_height 12 def -/text_width 6 def -1264 51 moveto 9 (1A) ht -584 54 568 54 l -576 54 576 63 l -581 51 571 51 l -578 48 574 48 l -/b { newpath 0.5 0 360 arc fill } def -576 45 b -760 54 744 54 l -752 54 752 63 l -757 51 747 51 l -754 48 750 48 l -752 45 b -752 103 752 95 l -752 103 2 fc -288 487 288 455 l -320 487 288 487 l -288 487 2 fc -248 383 248 367 l -456 103 8 c -456 71 456 95 l -/text_height 12 def -/text_width 6 def -441 129 moveto 9 (J4) ht -456 105 b -457 105 b -455 104 b -456 104 b -457 104 b -458 104 b -455 103 b -456 103 b -457 103 b -458 103 b -456 102 b -457 102 b -480 103 456 103 l -583 81 569 81 l -576 59 18 111 69 a -576 81 576 95 l -576 63 576 77 l -/text_height 12 def -/text_width 6 def -589 81 moveto 9 (100U) ht -/text_height 12 def -/text_width 6 def -590 94 moveto 9 (C18) ht -/text_height 12 def -/text_width 6 def -561 96 moveto 9 (+) ht -/text_height 12 def -/text_width 6 def -765 94 moveto 9 (C1) ht -/text_height 12 def -/text_width 6 def -765 81 moveto 9 (100N) ht -759 81 745 81 l -752 59 18 111 69 a -752 81 752 95 l -752 63 752 77 l -509 109 b -509 108 b -510 108 b -515 108 b -509 107 b -510 107 b -511 107 b -515 107 b -509 106 b -510 106 b -511 106 b -512 106 b -515 106 b -509 105 b -510 105 b -511 105 b -512 105 b -513 105 b -515 105 b -509 104 b -510 104 b -511 104 b -512 104 b -513 104 b -514 104 b -515 104 b -509 103 b -510 103 b -511 103 b -512 103 b -513 103 b -514 103 b -515 103 b -509 102 b -510 102 b -511 102 b -512 102 b -513 102 b -514 102 b -515 102 b -509 101 b -510 101 b -511 101 b -512 101 b -513 101 b -515 101 b -509 100 b -510 100 b -511 100 b -512 100 b -515 100 b -509 99 b -510 99 b -511 99 b -515 99 b -509 98 b -510 98 b -515 98 b -509 97 b -516 103 b -510 103 496 103 l -528 103 517 103 l -/text_height 12 def -/text_width 6 def -496 99 moveto 9 (1N4002) ht -/text_height 12 def -/text_width 6 def -497 124 moveto 9 (D2) ht -576 103 576 95 l -560 103 528 103 l -560 103 2 fc -592 103 576 103 l -576 103 560 103 l -576 103 2 fc -496 103 480 103 l -240 695 240 671 l -328 671 240 671 l -328 703 328 671 l -240 711 208 711 l -208 711 208 687 l -384 703 328 703 l -136 735 112 735 l -392 767 352 767 l -384 687 352 687 l -408 647 408 631 l -208 676 208 687 l -/text_height 12 def -/text_width 6 def -218 677 moveto 9 (R3) ht -/text_height 12 def -/text_width 6 def -218 664 moveto 9 (100K) ht -213 673 208 675 l -213 657 204 653 l -213 657 204 661 l -213 665 204 669 l -213 665 204 661 l -208 649 208 651 l -208 652 204 653 l -208 639 208 650 l -213 673 204 669 l -208 675 208 677 l -208 650 208 652 l -208 711 2 fc -328 703 2 fc -352 687 352 647 l -352 767 352 687 l -352 687 2 fc -432 647 408 647 l -408 647 384 647 l -408 647 2 fc -904 751 872 751 l -904 735 872 735 l -968 687 872 687 l -968 703 968 687 l -/text_height 12 def -/text_width 6 def -616 695 moveto 9 (X1) ht -/text_height 12 def -/text_width 6 def -616 683 moveto 9 (3.59MHZ) ht -628 645 628 665 l -637 645 637 665 l -634 667 631 667 l -634 643 634 667 l -634 643 631 643 l -631 643 631 667 l -628 655 600 655 l -664 655 637 655 l -920 607 904 607 l -920 655 920 647 l -744 575 744 559 l -752 623 744 623 l -744 623 744 607 l -752 671 696 671 l -752 655 664 655 l -600 655 600 639 l -752 639 600 639 l -680 575 680 559 l -680 671 680 607 l -752 703 728 703 l -712 815 712 751 l -752 751 712 751 l -728 783 728 719 l -752 719 728 719 l -696 671 680 671 l -888 863 736 863 l -688 863 480 863 l -/text_height 12 def -/text_width 6 def -590 855 moveto 9 (+5) ht -744 559 2 fc -904 607 2 fc -920 655 872 655 l -920 655 2 fc -920 703 888 703 l -888 703 872 703 l -888 703 2 fc -728 815 712 815 l -712 815 696 815 l -712 815 2 fc -888 863 888 703 l -904 607 904 559 l -904 735 904 607 l -904 751 904 735 l -904 735 2 fc -248 399 128 399 l -128 399 2 fc -136 342 120 342 l -128 342 128 351 l -133 339 123 339 l -130 336 126 336 l -128 333 b -256 358 240 358 l -248 358 248 367 l -253 355 243 355 l -250 352 246 352 l -248 349 b -560 175 560 103 l -464 327 464 295 l -496 327 464 327 l -880 94 864 94 l -872 94 872 103 l -877 91 867 91 l -874 88 870 88 l -872 85 b -872 103 864 103 l -424 223 424 207 l -416 327 400 327 l -400 327 400 303 l -400 255 400 167 l -480 167 400 167 l -432 198 416 198 l -424 198 424 207 l -429 195 419 195 l -426 192 422 192 l -424 189 b -464 327 2 fc -480 767 440 767 l -480 767 480 695 l -480 863 480 767 l -480 767 2 fc -480 695 480 647 l -480 647 464 647 l -480 695 2 fc -88 735 8 c -88 703 88 727 l -/text_height 12 def -/text_width 6 def -73 761 moveto 9 (J2) ht -88 737 b -89 737 b -87 736 b -88 736 b -89 736 b -90 736 b -87 735 b -88 735 b -89 735 b -90 735 b -88 734 b -89 734 b -112 735 88 735 l -/text_height 12 def -/text_width 6 def -333 486 moveto 9 (C14) ht -/text_height 12 def -/text_width 6 def -333 473 moveto 9 (10N) ht -327 473 313 473 l -320 451 18 111 69 a -320 473 320 487 l -320 455 320 469 l -698 863 688 863 l -736 863 726 863 l -/text_height 12 def -/text_width 6 def -691 883 moveto 9 (1MEG) ht -/text_height 12 def -/text_width 6 def -691 895 moveto 9 (R4) ht -702 868 700 863 l -706 859 702 868 l -710 868 706 859 l -714 859 710 868 l -718 868 714 859 l -722 859 718 868 l -724 863 722 859 l -726 863 724 863 l -700 863 699 863 l -930 703 920 703 l -968 703 958 703 l -/text_height 12 def -/text_width 6 def -923 723 moveto 9 (10K) ht -/text_height 12 def -/text_width 6 def -923 735 moveto 9 (R1) ht -934 708 932 703 l -938 699 934 708 l -942 708 938 699 l -946 699 942 708 l -950 708 946 699 l -954 699 950 708 l -956 703 954 699 l -958 703 956 703 l -932 703 931 703 l -784 103 768 103 l -768 103 752 103 l -288 487 272 487 l -480 695 472 695 l -920 607 920 599 l -920 615 920 607 l -920 607 2 fc -792 399 776 399 l -792 383 360 383 l -728 703 728 367 l -792 367 728 367 l -400 292 400 303 l -/text_height 12 def -/text_width 6 def -410 293 moveto 9 (R11) ht -/text_height 12 def -/text_width 6 def -410 280 moveto 9 (3.3K) ht -405 289 400 291 l -405 273 396 269 l -405 273 396 277 l -405 281 396 285 l -405 281 396 277 l -400 265 400 267 l -400 268 396 269 l -400 255 400 266 l -405 289 396 285 l -400 291 400 293 l -400 266 400 268 l -128 388 128 399 l -/text_height 12 def -/text_width 6 def -138 389 moveto 9 (R13) ht -/text_height 12 def -/text_width 6 def -138 376 moveto 9 (100K) ht -133 385 128 387 l -133 369 124 365 l -133 369 124 373 l -133 377 124 381 l -133 377 124 373 l -128 361 128 363 l -128 364 124 365 l -128 351 128 362 l -133 385 124 381 l -128 387 128 389 l -128 362 128 364 l -88 399 8 c -88 367 88 391 l -/text_height 12 def -/text_width 6 def -73 425 moveto 9 (J3) ht -88 401 b -89 401 b -87 400 b -88 400 b -89 400 b -90 400 b -87 399 b -88 399 b -89 399 b -90 399 b -88 398 b -89 398 b -112 399 88 399 l -128 399 112 399 l -376 399 360 399 l -376 399 376 239 l -424 239 376 239 l -608 836 608 847 l -/text_height 12 def -/text_width 6 def -618 837 moveto 9 (R2) ht -/text_height 12 def -/text_width 6 def -618 824 moveto 9 (330) ht -613 833 608 835 l -613 817 604 813 l -613 817 604 821 l -613 825 604 829 l -613 825 604 821 l -608 809 608 811 l -608 812 604 813 l -608 799 608 810 l -613 833 604 829 l -608 835 608 837 l -608 810 608 812 l -224 487 208 487 l -400 327 360 327 l -224 487 2 fc -400 327 2 fc -/text_height 12 def -/text_width 6 def -190 495 moveto 9 (+5) ht -/text_height 12 def -/text_width 6 def -342 335 moveto 9 (+5) ht -944 655 920 655 l -680 559 208 559 l -744 559 680 559 l -208 639 208 559 l -680 559 2 fc -/text_height 12 def -/text_width 6 def -947 663 moveto 9 (+5) ht -768 127 768 103 l -768 103 2 fc - -/vtdict 4 dict def %% VTEXT - variable spacing verticle text routine -/vt - { vtdict begin - /thestring exch def - /yskip exch def - 0 text_height neg rmoveto - /Schfont findfont text_height scalefont setfont - thestring - { - /charcode exch def - /thechar ( ) dup 0 charcode put def - gsave - charcode 8#245 gt - { /Schsymb findfont text_height scalefont setfont - thechar show - /Schfont findfont text_height scalefont setfont } - { thechar show } - ifelse - grestore - currentpoint moveto - 0 yskip neg rmoveto - } forall - end - } def - -/text_height 12 def -/text_width 6 def -765 153 moveto 11 (+5) vt -234 487 224 487 l -272 487 262 487 l -238 492 b -238 491 b -237 490 b -239 490 b -237 489 b -239 489 b -236 488 b -240 488 b -235 487 b -236 487 b -240 487 b -241 486 b -241 485 b -246 492 b -246 491 b -245 490 b -247 490 b -245 489 b -247 489 b -244 488 b -248 488 b -244 487 b -248 487 b -243 486 b -243 485 b -242 484 b -242 483 b -254 492 b -254 491 b -253 490 b -255 490 b -253 489 b -255 489 b -252 488 b -252 487 b -249 486 b -251 486 b -249 485 b -251 485 b -250 484 b -250 483 b -256 488 b -256 487 b -260 487 b -261 487 b -257 486 b -259 486 b -257 485 b -259 485 b -258 484 b -258 483 b -248 463 248 479 l -248 481 b -247 480 b -248 480 b -249 480 b -246 479 b -247 479 b -248 479 b -249 479 b -250 479 b -245 478 b -246 478 b -247 478 b -248 478 b -249 478 b -250 478 b -244 477 b -245 477 b -246 477 b -247 477 b -248 477 b -249 477 b -250 477 b -251 478 b -251 477 b -252 477 b -/text_height 12 def -/text_width 6 def -233 508 moveto 9 (R7) ht -/text_height 12 def -/text_width 6 def -225 488 moveto 9 (1) ht -/text_height 12 def -/text_width 6 def -238 478 moveto 9 (2) ht -/text_height 12 def -/text_width 6 def -263 488 moveto 9 (3) ht -/text_height 12 def -/text_width 6 def -257 475 moveto 9 (20K) ht -752 103 736 103 l -672 54 656 54 l -664 54 664 63 l -669 51 659 51 l -666 48 662 48 l -664 45 b -/text_height 12 def -/text_width 6 def -272 811 moveto 9 (2000+-500 Hz) ht -/text_height 12 def -/text_width 6 def -256 827 moveto 9 (bandpass filter) ht -/text_height 12 def -/text_width 6 def -272 515 moveto 9 (\(for 38.4 baud\)) ht -/text_height 12 def -/text_width 6 def -280 531 moveto 9 (26-us one-shot) ht -/text_height 12 def -/text_width 6 def -448 363 moveto 9 (200-ms one shot) ht -224 487 224 463 l -248 463 224 463 l -304 327 304 167 l -400 167 304 167 l -400 167 2 fc -/text_height 12 def -/text_width 6 def -384 99 moveto 9 (\(6-12V\)) ht -/text_height 12 def -/text_width 6 def -32 731 moveto 9 (\(BNC\)) ht -/text_height 12 def -/text_width 6 def -32 747 moveto 9 (audio) ht -/text_height 12 def -/text_width 6 def -40 411 moveto 9 (1pps) ht -/text_height 12 def -/text_width 6 def -32 395 moveto 9 (\(BNC\)) ht -/text_height 12 def -/text_width 6 def -400 115 moveto 9 (power) ht -767 337 753 337 l -760 315 18 111 69 a -760 337 760 351 l -760 319 760 333 l -/text_height 12 def -/text_width 6 def -773 337 moveto 9 (22U) ht -/text_height 12 def -/text_width 6 def -774 350 moveto 9 (C9) ht -/text_height 12 def -/text_width 6 def -745 352 moveto 9 (+) ht -935 337 921 337 l -928 315 18 111 69 a -928 337 928 351 l -928 319 928 333 l -/text_height 12 def -/text_width 6 def -941 337 moveto 9 (22U) ht -/text_height 12 def -/text_width 6 def -942 350 moveto 9 (C12) ht -/text_height 12 def -/text_width 6 def -913 352 moveto 9 (+) ht -880 257 880 271 l -880 239 880 253 l -/text_height 12 def -/text_width 6 def -893 257 moveto 9 (22U) ht -/text_height 12 def -/text_width 6 def -894 270 moveto 9 (C16) ht -873 259 b -874 259 b -875 258 b -876 258 b -877 258 b -878 257 b -879 257 b -873 254 b -874 254 b -875 254 b -876 254 b -877 254 b -878 254 b -879 254 b -886 259 b -883 258 b -884 258 b -885 258 b -880 257 b -881 257 b -882 257 b -880 254 b -881 254 b -882 254 b -883 254 b -884 254 b -885 254 b -886 254 b -887 259 b -887 254 b -/text_height 12 def -/text_width 6 def -865 255 moveto 9 (+) ht -831 257 817 257 l -824 235 18 111 69 a -824 257 824 271 l -824 239 824 253 l -/text_height 12 def -/text_width 6 def -837 257 moveto 9 (22U) ht -/text_height 12 def -/text_width 6 def -838 270 moveto 9 (C3) ht -/text_height 12 def -/text_width 6 def -809 272 moveto 9 (+) ht -888 230 872 230 l -880 230 880 239 l -885 227 875 227 l -882 224 878 224 l -880 221 b -792 351 760 351 l -792 319 760 319 l -928 351 912 351 l -928 319 912 319 l -832 271 824 271 l -880 271 872 271 l -/text_height 12 def -/text_width 6 def -821 240 moveto 11 (+5) vt -/text_height 12 def -/text_width 6 def -624 307 moveto 9 (EIA level converter) ht -936 399 912 399 l -872 671 872 655 l -872 655 2 fc -/text_height 12 def -/text_width 6 def -752 835 moveto 9 (300-baud modem) ht -88 359 88 367 l -81 357 b -80 356 b -79 355 b -78 354 b -77 353 b -76 352 b -75 351 b -82 358 b -88 357 b -87 356 b -86 355 b -85 354 b -84 353 b -83 352 b -82 351 b -89 358 b -95 357 b -94 356 b -93 355 b -92 354 b -91 353 b -90 352 b -89 351 b -96 358 b -96 358 82 358 l -88 695 88 703 l -81 693 b -80 692 b -79 691 b -78 690 b -77 689 b -76 688 b -75 687 b -82 694 b -88 693 b -87 692 b -86 691 b -85 690 b -84 689 b -83 688 b -82 687 b -89 694 b -95 693 b -94 692 b -93 691 b -92 690 b -91 689 b -90 688 b -89 687 b -96 694 b -96 694 82 694 l -456 63 456 71 l -449 61 b -448 60 b -447 59 b -446 58 b -445 57 b -444 56 b -443 55 b -450 62 b -456 61 b -455 60 b -454 59 b -453 58 b -452 57 b -451 56 b -450 55 b -457 62 b -463 61 b -462 60 b -461 59 b -460 58 b -459 57 b -458 56 b -457 55 b -464 62 b -464 62 450 62 l -696 807 696 815 l -688 806 b -689 806 b -690 806 b -691 806 b -692 806 b -693 806 b -694 806 b -689 805 b -690 804 b -691 803 b -692 802 b -693 801 b -694 800 b -696 807 b -695 806 b -696 806 b -697 806 b -698 806 b -699 806 b -700 806 b -701 806 b -701 803 b -700 802 b -699 801 b -698 800 b -695 799 b -697 799 b -696 798 b -702 806 b -703 806 b -704 806 b -703 805 b -702 804 b -920 559 920 567 l -912 558 b -913 558 b -914 558 b -915 558 b -916 558 b -917 558 b -918 558 b -913 557 b -914 556 b -915 555 b -916 554 b -917 553 b -918 552 b -920 559 b -919 558 b -920 558 b -921 558 b -922 558 b -923 558 b -924 558 b -925 558 b -925 555 b -924 554 b -923 553 b -922 552 b -919 551 b -921 551 b -920 550 b -926 558 b -927 558 b -928 558 b -927 557 b -926 556 b -136 679 136 687 l -128 678 b -129 678 b -130 678 b -131 678 b -132 678 b -133 678 b -134 678 b -129 677 b -130 676 b -131 675 b -132 674 b -133 673 b -134 672 b -136 679 b -135 678 b -136 678 b -137 678 b -138 678 b -139 678 b -140 678 b -141 678 b -141 675 b -140 674 b -139 673 b -138 672 b -135 671 b -137 671 b -136 670 b -142 678 b -143 678 b -144 678 b -143 677 b -142 676 b -408 575 408 583 l -400 574 b -401 574 b -402 574 b -403 574 b -404 574 b -405 574 b -406 574 b -401 573 b -402 572 b -403 571 b -404 570 b -405 569 b -406 568 b -408 575 b -407 574 b -408 574 b -409 574 b -410 574 b -411 574 b -412 574 b -413 574 b -413 571 b -412 570 b -411 569 b -410 568 b -407 567 b -409 567 b -408 566 b -414 574 b -415 574 b -416 574 b -415 573 b -414 572 b -794 103 784 103 l -832 103 822 103 l -/text_height 12 def -/text_width 6 def -787 123 moveto 9 (330) ht -/text_height 12 def -/text_width 6 def -787 135 moveto 9 (R12) ht -798 108 796 103 l -802 99 798 108 l -806 108 802 99 l -810 99 806 108 l -814 108 810 99 l -818 99 814 108 l -820 103 818 99 l -822 103 820 103 l -796 103 795 103 l -/text_height 12 def -/text_width 6 def -528 118 moveto 9 (+12) ht -712 119 616 119 l -712 87 712 119 l -616 87 616 119 l -712 87 616 87 l -616 103 592 103 l -664 63 664 87 l -/text_height 12 def -/text_width 6 def -652 101 moveto 9 (GND) ht -/text_height 12 def -/text_width 6 def -619 111 moveto 9 (IN) ht -/text_height 12 def -/text_width 6 def -685 111 moveto 9 (OUT) ht -/text_height 12 def -/text_width 6 def -602 118 moveto 9 (1) ht -/text_height 12 def -/text_width 6 def -640 136 moveto 9 (LM7805) ht -/text_height 12 def -/text_width 6 def -640 149 moveto 9 (U5) ht -/text_height 12 def -/text_width 6 def -667 83 moveto 9 (2) ht -736 103 712 103 l -/text_height 12 def -/text_width 6 def -720 118 moveto 9 (3) ht -862 180 b -867 180 b -862 179 b -866 179 b -867 179 b -862 178 b -865 178 b -866 178 b -867 178 b -862 177 b -864 177 b -865 177 b -866 177 b -867 177 b -862 176 b -863 176 b -864 176 b -865 176 b -866 176 b -867 176 b -861 175 b -862 175 b -863 175 b -864 175 b -865 175 b -866 175 b -867 175 b -862 174 b -863 174 b -864 174 b -865 174 b -866 174 b -867 174 b -862 173 b -864 173 b -865 173 b -866 173 b -867 173 b -862 172 b -865 172 b -866 172 b -867 172 b -862 171 b -866 171 b -867 171 b -862 170 b -867 170 b -868 181 b -868 180 b -868 179 b -868 178 b -868 177 b -868 176 b -868 175 b -868 174 b -868 173 b -868 172 b -868 171 b -868 170 b -868 169 b -862 175 848 175 l -880 175 867 175 l -/text_height 12 def -/text_width 6 def -850 196 moveto 9 (D1) ht -/text_height 12 def -/text_width 6 def -849 171 moveto 9 (1N4002) ht -848 175 560 175 l -810 383 792 383 l -813 383 3 c -810 367 792 367 l -813 367 3 c -816 415 792 415 l -816 399 792 399 l -891 399 3 c -912 399 894 399 l -912 383 888 383 l -912 367 888 367 l -891 415 3 c -912 415 894 415 l -/text_height 12 def -/text_width 6 def -903 430 moveto 16 (2 4) vt -/text_height 12 def -/text_width 6 def -796 430 moveto 16 (1 11) vt -/text_height 12 def -/text_width 6 def -870 424 moveto 16 (12122 2) vt -912 351 888 351 l -912 319 888 319 l -816 351 792 351 l -816 319 792 319 l -/text_height 12 def -/text_width 6 def -804 430 moveto 16 (38101 3) vt -888 431 816 431 l -/text_height 12 def -/text_width 6 def -879 424 moveto 16 (OOOO+ -) vt -/text_height 12 def -/text_width 6 def -895 430 moveto 16 (19174 5) vt -/text_height 12 def -/text_width 6 def -836 288 moveto 9 (2) ht -/text_height 12 def -/text_width 6 def -875 288 moveto 9 (6) ht -888 295 816 295 l -832 271 832 295 l -872 271 872 295 l -816 295 816 431 l -888 295 888 431 l -/text_height 12 def -/text_width 6 def -820 447 moveto 9 (ICL232) ht -/text_height 12 def -/text_width 6 def -831 460 moveto 9 (U1) ht -/text_height 12 def -/text_width 6 def -820 424 moveto 16 (RRTTC C) vt -/text_height 12 def -/text_width 6 def -829 424 moveto 16 (12121 1) vt -/text_height 12 def -/text_width 6 def -837 424 moveto 16 (IIII+ -) vt -/text_height 12 def -/text_width 6 def -861 424 moveto 16 (RRTTC C) vt -/text_height 12 def -/text_width 6 def -827 313 moveto 9 (V+) ht -/text_height 12 def -/text_width 6 def -865 313 moveto 9 (V-) ht -992 471 792 471 l -776 487 776 399 l -792 471 792 415 l -936 503 936 399 l -776 655 752 655 l -776 703 752 703 l -776 671 752 671 l -848 607 776 607 l -872 735 848 735 l -872 719 848 719 l -/text_height 12 def -/text_width 6 def -780 776 moveto 16 (DLCCR CXXF) vt -776 623 752 623 l -776 639 752 639 l -776 767 752 767 l -/text_height 12 def -/text_width 6 def -764 782 moveto 16 (12345 7890) vt -776 719 752 719 l -770 751 752 751 l -773 751 3 c -/text_height 12 def -/text_width 6 def -756 782 moveto 16 ( 1) vt -770 735 752 735 l -773 735 3 c -872 751 848 751 l -872 703 848 703 l -872 687 848 687 l -872 671 848 671 l -872 655 848 655 l -872 623 848 623 l -/text_height 12 def -/text_width 6 def -852 782 moveto 16 (21111111 1) vt -/text_height 12 def -/text_width 6 def -860 782 moveto 16 (09876543 1) vt -872 767 848 767 l -/text_height 12 def -/text_width 6 def -821 776 moveto 16 (TUETRRSO T) vt -/text_height 12 def -/text_width 6 def -797 776 moveto 16 (I TD A) vt -/text_height 12 def -/text_width 6 def -788 776 moveto 16 (SBDDX DIOB) vt -/text_height 12 def -/text_width 6 def -812 664 moveto 9 (M) ht -848 783 776 783 l -776 607 776 783 l -848 607 848 783 l -/text_height 12 def -/text_width 6 def -779 799 moveto 9 (MC145443) ht -/text_height 12 def -/text_width 6 def -790 812 moveto 9 (U2) ht -/text_height 12 def -/text_width 6 def -839 776 moveto 16 (AGLA12TE D) vt -/text_height 12 def -/text_width 6 def -830 776 moveto 16 (LAXXXXQD X) vt -904 559 744 559 l -880 623 872 623 l -880 623 880 503 l -936 503 880 503 l -1040 726 1024 726 l -1032 726 1032 735 l -1037 723 1027 723 l -1034 720 1030 720 l -1032 717 b -1096 726 1080 726 l -1088 726 1088 735 l -1093 723 1083 723 l -1090 720 1086 720 l -1088 717 b -1088 767 1032 767 l -1088 799 1088 767 l -/text_height 12 def -/text_width 6 def -1085 825 moveto 11 (+5) vt -1088 767 2 fc -/text_height 12 def -/text_width 6 def -1024 715 moveto 9 (U2) ht -/text_height 12 def -/text_width 6 def -1080 715 moveto 9 (U4) ht -1096 351 1096 335 l -1096 319 1032 319 l -1096 287 1032 287 l -1032 319 1032 287 l -1032 287 2 fc -1032 287 1032 175 l -/text_height 12 def -/text_width 6 def -1072 363 moveto 9 (RS) ht -/text_height 12 def -/text_width 6 def -1072 347 moveto 9 (CS) ht -/text_height 12 def -/text_width 6 def -1040 451 moveto 9 (\(DB25 female DCE\)) ht -1096 303 1064 303 l -1008 487 776 487 l -1072 270 1056 270 l -1064 270 1064 279 l -1069 267 1059 267 l -1066 264 1062 264 l -1064 261 b -1064 303 1064 279 l -1064 303 2 fc -1184 175 1032 175 l -1032 175 880 175 l -1032 175 2 fc -1096 399 1064 399 l -1064 399 1064 303 l -/text_height 12 def -/text_width 6 def -1112 467 moveto 9 (modem) ht -/text_height 12 def -/text_width 6 def -1074 415 moveto 9 (FG) ht -/text_height 12 def -/text_width 6 def -1074 398 moveto 9 (TD) ht -/text_height 12 def -/text_width 6 def -1074 383 moveto 9 (RD) ht -/text_height 12 def -/text_width 6 def -1073 334 moveto 9 (MR) ht -/text_height 12 def -/text_width 6 def -1073 318 moveto 9 (CG) ht -/text_height 12 def -/text_width 6 def -1073 302 moveto 9 (CD) ht -/text_height 12 def -/text_width 6 def -1069 254 moveto 9 (STD) ht -1114 367 1096 367 l -1117 367 3 c -1114 351 1096 351 l -1117 351 3 c -1114 335 1096 335 l -1117 335 3 c -1114 319 1096 319 l -1117 319 3 c -1114 303 1096 303 l -1117 303 3 c -1114 287 1096 287 l -1117 287 3 c -1114 239 1096 239 l -1117 239 3 c -1114 223 1096 223 l -1117 223 3 c -1114 271 1096 271 l -1117 271 3 c -1131 375 3 c -1152 375 1134 375 l -1131 359 3 c -1152 359 1134 359 l -1131 343 3 c -1152 343 1134 343 l -1131 327 3 c -1152 327 1134 327 l -1131 311 3 c -1152 311 1134 311 l -1131 295 3 c -1152 295 1134 295 l -1131 263 3 c -1152 263 1134 263 l -1131 247 3 c -1152 247 1134 247 l -1131 231 3 c -1152 231 1134 231 l -1131 215 3 c -1152 215 1134 215 l -/text_height 12 def -/text_width 6 def -1097 270 moveto 16 (1111) vt -/text_height 12 def -/text_width 6 def -1136 405 moveto 16 (111111222222) vt -/text_height 12 def -/text_width 6 def -1144 405 moveto 16 (456789012345) vt -/text_height 12 def -/text_width 6 def -1105 414 moveto 16 (1234567890123) vt -1131 391 3 c -1152 391 1134 391 l -1114 255 1096 255 l -1117 255 3 c -1114 207 1096 207 l -1117 207 3 c -1114 383 1096 383 l -1117 383 3 c -1114 399 1096 399 l -1117 399 3 c -1131 279 3 c -1152 279 1134 279 l -/text_height 12 def -/text_width 6 def -1118 420 moveto 9 (DB25) ht -/text_height 12 def -/text_width 6 def -1118 432 moveto 9 (J1) ht -/text_height 12 def -/text_width 6 def -1069 238 moveto 9 (SRD) ht -1184 295 1152 295 l -/text_height 12 def -/text_width 6 def -1160 315 moveto 9 (TR) ht -1184 295 1184 175 l -190 704 190 718 l -213 711 18 201 159 a -190 711 176 711 l -208 711 195 711 l -/text_height 12 def -/text_width 6 def -179 734 moveto 9 (C15) ht -/text_height 12 def -/text_width 6 def -173 704 moveto 9 (10N) ht -366 640 366 654 l -389 647 18 201 159 a -366 647 352 647 l -384 647 371 647 l -/text_height 12 def -/text_width 6 def -355 670 moveto 9 (C11) ht -/text_height 12 def -/text_width 6 def -349 640 moveto 9 (10N) ht -446 640 446 654 l -469 647 18 201 159 a -446 647 432 647 l -464 647 451 647 l -/text_height 12 def -/text_width 6 def -435 670 moveto 9 (C10) ht -/text_height 12 def -/text_width 6 def -429 640 moveto 9 (10N) ht -/text_height 12 def -/text_width 6 def -693 606 moveto 9 (C8) ht -/text_height 12 def -/text_width 6 def -693 593 moveto 9 (100N) ht -687 593 673 593 l -680 571 18 111 69 a -680 593 680 607 l -680 575 680 589 l -/text_height 12 def -/text_width 6 def -933 598 moveto 9 (C5) ht -/text_height 12 def -/text_width 6 def -933 585 moveto 9 (100N) ht -927 585 913 585 l -920 563 18 111 69 a -920 585 920 599 l -920 567 920 581 l -/text_height 12 def -/text_width 6 def -933 646 moveto 9 (C7) ht -/text_height 12 def -/text_width 6 def -933 633 moveto 9 (100N) ht -927 633 913 633 l -920 611 18 111 69 a -920 633 920 647 l -920 615 920 629 l -/text_height 12 def -/text_width 6 def -741 814 moveto 9 (C4) ht -/text_height 12 def -/text_width 6 def -741 801 moveto 9 (10N) ht -735 801 721 801 l -728 779 18 111 69 a -728 801 728 815 l -728 783 728 797 l -/text_height 12 def -/text_width 6 def -757 606 moveto 9 (C6) ht -/text_height 12 def -/text_width 6 def -757 593 moveto 9 (100N) ht -751 593 737 593 l -744 571 18 111 69 a -744 593 744 607 l -744 575 744 589 l -/text_height 12 def -/text_width 6 def -1045 766 moveto 9 (C13) ht -/text_height 12 def -/text_width 6 def -1045 753 moveto 9 (100N) ht -1039 753 1025 753 l -1032 731 18 111 69 a -1032 753 1032 767 l -1032 735 1032 749 l -/text_height 12 def -/text_width 6 def -1101 766 moveto 9 (C2) ht -/text_height 12 def -/text_width 6 def -1101 753 moveto 9 (100N) ht -1095 753 1081 753 l -1088 731 18 111 69 a -1088 753 1088 767 l -1088 735 1088 749 l -546 239 536 239 l -584 239 574 239 l -/text_height 12 def -/text_width 6 def -539 259 moveto 9 (330) ht -/text_height 12 def -/text_width 6 def -539 271 moveto 9 (R10) ht -550 244 548 239 l -554 235 550 244 l -558 244 554 235 l -562 235 558 244 l -566 244 562 235 l -570 235 566 244 l -572 239 570 235 l -574 239 572 239 l -548 239 547 239 l -845 109 b -845 108 b -846 108 b -851 108 b -845 107 b -846 107 b -847 107 b -851 107 b -845 106 b -846 106 b -847 106 b -848 106 b -851 106 b -845 105 b -846 105 b -847 105 b -848 105 b -849 105 b -851 105 b -845 104 b -846 104 b -847 104 b -848 104 b -849 104 b -850 104 b -851 104 b -845 103 b -846 103 b -847 103 b -848 103 b -849 103 b -850 103 b -851 103 b -845 102 b -846 102 b -847 102 b -848 102 b -849 102 b -850 102 b -851 102 b -845 101 b -846 101 b -847 101 b -848 101 b -849 101 b -851 101 b -845 100 b -846 100 b -847 100 b -848 100 b -851 100 b -845 99 b -846 99 b -847 99 b -851 99 b -845 98 b -846 98 b -851 98 b -845 97 b -852 103 b -846 103 832 103 l -864 103 853 103 l -/text_height 12 def -/text_width 6 def -832 131 moveto 9 (LED2) ht -859 116 b -857 115 b -858 115 b -857 114 b -858 114 b -856 113 b -855 112 b -855 111 b -856 111 b -857 111 b -858 111 b -859 111 b -860 111 b -860 110 b -859 109 b -858 108 b -857 107 b -/text_height 12 def -/text_width 6 def -833 97 moveto 9 (RED) ht -/text_height 12 def -/text_width 6 def -584 219 moveto 9 (1 pps) ht -/text_height 12 def -/text_width 6 def -832 83 moveto 9 (power) ht -328 703 304 703 l -264 679 264 727 l -264 711 240 711 l -264 695 240 695 l -/text_height 12 def -/text_width 6 def -267 719 moveto 9 (+) ht -/text_height 12 def -/text_width 6 def -267 703 moveto 9 (-) ht -/text_height 12 def -/text_width 6 def -250 726 moveto 9 (3) ht -/text_height 12 def -/text_width 6 def -250 710 moveto 9 (2) ht -/text_height 12 def -/text_width 6 def -312 718 moveto 9 (1) ht -/text_height 12 def -/text_width 6 def -264 744 moveto 9 (LM324) ht -/text_height 12 def -/text_width 6 def -264 757 moveto 9 (U4A) ht -304 703 264 727 l -304 703 264 679 l -472 695 448 695 l -408 671 408 719 l -/text_height 12 def -/text_width 6 def -411 711 moveto 9 (+) ht -/text_height 12 def -/text_width 6 def -411 695 moveto 9 (-) ht -/text_height 12 def -/text_width 6 def -408 736 moveto 9 (LM324) ht -/text_height 12 def -/text_width 6 def -408 749 moveto 9 (U4B) ht -408 703 384 703 l -408 687 384 687 l -/text_height 12 def -/text_width 6 def -394 718 moveto 9 (5) ht -/text_height 12 def -/text_width 6 def -394 702 moveto 9 (6) ht -/text_height 12 def -/text_width 6 def -456 710 moveto 9 (7) ht -448 695 408 719 l -448 695 408 671 l -336 431 272 431 l -272 351 272 431 l -336 351 272 351 l -336 351 336 431 l -272 399 248 399 l -266 383 248 383 l -269 383 3 c -360 399 336 399 l -288 431 288 455 l -320 431 320 455 l -304 345 304 327 l -304 348 3 c -/text_height 12 def -/text_width 6 def -275 407 moveto 16 (BA) vt -/text_height 12 def -/text_width 6 def -277 433 moveto 9 (R/C) ht -/text_height 12 def -/text_width 6 def -313 433 moveto 9 (CE) ht -/text_height 12 def -/text_width 6 def -297 366 moveto 9 (CL) ht -/text_height 12 def -/text_width 6 def -258 414 moveto 16 (21) vt -/text_height 12 def -/text_width 6 def -344 414 moveto 9 (13) ht -/text_height 12 def -/text_width 6 def -344 398 moveto 9 (4) ht -/text_height 12 def -/text_width 6 def -307 347 moveto 9 (3) ht -/text_height 12 def -/text_width 6 def -344 448 moveto 9 (74LS123) ht -/text_height 12 def -/text_width 6 def -344 461 moveto 9 (U3A) ht -/text_height 12 def -/text_width 6 def -292 457 moveto 11 (15) vt -/text_height 12 def -/text_width 6 def -324 457 moveto 11 (14) vt -/text_height 12 def -/text_width 6 def -327 407 moveto 16 (QQ) vt -/text_height 12 def -/text_width 6 def -326 403 moveto 9 (_) ht -339 383 3 c -360 383 342 383 l -512 271 448 271 l -448 191 448 271 l -512 191 448 191 l -512 191 512 271 l -464 271 464 295 l -496 271 496 295 l -/text_height 12 def -/text_width 6 def -451 247 moveto 16 (BA) vt -/text_height 12 def -/text_width 6 def -453 273 moveto 9 (R/C) ht -/text_height 12 def -/text_width 6 def -489 273 moveto 9 (CE) ht -/text_height 12 def -/text_width 6 def -473 206 moveto 9 (CL) ht -480 185 480 167 l -480 188 3 c -536 239 512 239 l -448 239 424 239 l -442 223 424 223 l -445 223 3 c -/text_height 12 def -/text_width 6 def -425 254 moveto 9 (10) ht -/text_height 12 def -/text_width 6 def -434 238 moveto 9 (9) ht -/text_height 12 def -/text_width 6 def -520 238 moveto 9 (12) ht -/text_height 12 def -/text_width 6 def -520 254 moveto 9 (5) ht -/text_height 12 def -/text_width 6 def -483 198 moveto 11 ( 11) vt -/text_height 12 def -/text_width 6 def -467 291 moveto 9 (7) ht -/text_height 12 def -/text_width 6 def -499 291 moveto 9 (6) ht -/text_height 12 def -/text_width 6 def -520 288 moveto 9 (74LS123) ht -/text_height 12 def -/text_width 6 def -520 301 moveto 9 (U3B) ht -/text_height 12 def -/text_width 6 def -503 247 moveto 16 (QQ) vt -/text_height 12 def -/text_width 6 def -502 243 moveto 9 (_) ht -515 223 3 c -536 223 518 223 l -136 724 b -136 723 b -137 723 b -138 722 b -138 720 b -136 719 b -137 719 b -134 718 b -135 718 b -132 717 b -133 717 b -134 716 b -135 716 b -136 715 b -137 715 b -138 714 b -138 712 b -136 711 b -137 711 b -134 710 b -135 710 b -132 709 b -133 709 b -134 708 b -135 708 b -136 707 b -137 707 b -138 706 b -138 704 b -136 703 b -137 703 b -134 702 b -135 702 b -132 701 b -133 701 b -134 700 b -135 700 b -136 699 b -139 722 b -140 721 b -141 721 b -139 720 b -139 714 b -140 713 b -141 713 b -139 712 b -139 706 b -140 705 b -141 705 b -139 704 b -136 724 136 735 l -136 687 136 698 l -176 711 152 711 l -147 715 b -146 714 b -147 714 b -145 713 b -146 713 b -147 713 b -144 712 b -145 712 b -146 712 b -147 712 b -143 711 b -144 711 b -145 711 b -146 711 b -147 711 b -148 711 b -149 711 b -144 710 b -145 710 b -146 710 b -147 710 b -145 709 b -146 709 b -147 709 b -146 708 b -147 708 b -147 707 b -150 711 b -151 711 b -152 711 b -153 711 b -/text_height 12 def -/text_width 6 def -148 708 moveto 9 (10K) ht -/text_height 12 def -/text_width 6 def -128 736 moveto 9 (1) ht -/text_height 12 def -/text_width 6 def -126 702 moveto 9 (3) ht -/text_height 12 def -/text_width 6 def -150 726 moveto 9 (2) ht -/text_height 12 def -/text_width 6 def -144 738 moveto 9 (R8) ht -608 751 608 762 l -640 775 616 775 l -616 767 616 783 l -608 788 608 799 l -614 768 b -613 767 b -612 766 b -611 765 b -610 764 b -609 763 b -608 762 b -616 770 b -615 769 b -608 788 b -609 787 b -610 786 b -613 786 b -611 785 b -612 785 b -613 785 b -611 784 b -612 784 b -613 784 b -610 783 b -611 783 b -612 783 b -613 783 b -614 783 b -613 782 b -614 782 b -615 781 b -616 780 b -613 775 16 c -/text_height 12 def -/text_width 6 def -632 795 moveto 9 (2N2907) ht -/text_height 12 def -/text_width 6 def -632 808 moveto 9 (Q1) ht -608 711 608 719 l -600 710 b -601 710 b -602 710 b -603 710 b -604 710 b -605 710 b -606 710 b -601 709 b -602 708 b -603 707 b -604 706 b -605 705 b -606 704 b -608 711 b -607 710 b -608 710 b -609 710 b -610 710 b -611 710 b -612 710 b -613 710 b -613 707 b -612 706 b -611 705 b -610 704 b -607 703 b -609 703 b -608 702 b -614 710 b -615 710 b -616 710 b -615 709 b -614 708 b -/text_height 12 def -/text_width 6 def -624 723 moveto 9 (car det) ht -664 775 664 735 l -664 775 640 775 l -1096 367 912 367 l -1008 487 1008 383 l -1096 383 1008 383 l -992 471 992 239 l -1096 239 992 239 l -976 383 912 383 l -976 383 976 223 l -1096 223 976 223 l -602 738 b -603 738 b -604 738 b -605 738 b -606 738 b -607 738 b -608 738 b -603 737 b -604 737 b -605 737 b -606 737 b -607 737 b -608 737 b -604 736 b -605 736 b -606 736 b -607 736 b -608 736 b -605 735 b -606 735 b -607 735 b -608 735 b -606 734 b -607 734 b -608 734 b -607 733 b -608 733 b -603 732 b -604 732 b -605 732 b -606 732 b -607 732 b -608 732 b -608 731 b -609 738 b -610 738 b -611 738 b -612 738 b -613 738 b -614 738 b -609 737 b -610 737 b -611 737 b -612 737 b -613 737 b -609 736 b -610 736 b -611 736 b -612 736 b -609 735 b -610 735 b -611 735 b -609 734 b -610 734 b -609 733 b -609 732 b -610 732 b -611 732 b -612 732 b -613 732 b -608 738 608 751 l -608 719 608 731 l -593 738 b -592 737 b -591 736 b -591 735 b -592 735 b -593 735 b -594 735 b -595 735 b -595 734 b -593 733 b -594 733 b -593 732 b -594 732 b -592 731 b -/text_height 12 def -/text_width 6 def -619 737 moveto 9 (GRN) ht -/text_height 12 def -/text_width 6 def -619 750 moveto 9 (LED1) ht -682 735 672 735 l -720 735 710 735 l -/text_height 12 def -/text_width 6 def -675 755 moveto 9 (3.3K) ht -/text_height 12 def -/text_width 6 def -675 767 moveto 9 (R14) ht -686 740 684 735 l -690 731 686 740 l -694 740 690 731 l -698 731 694 740 l -702 740 698 731 l -706 731 702 740 l -708 735 706 731 l -710 735 708 735 l -684 735 683 735 l -672 735 664 735 l -752 735 720 735 l -597 245 b -597 244 b -598 244 b -603 244 b -597 243 b -598 243 b -599 243 b -603 243 b -597 242 b -598 242 b -599 242 b -600 242 b -603 242 b -597 241 b -598 241 b -599 241 b -600 241 b -601 241 b -603 241 b -597 240 b -598 240 b -599 240 b -600 240 b -601 240 b -602 240 b -603 240 b -597 239 b -598 239 b -599 239 b -600 239 b -601 239 b -602 239 b -603 239 b -597 238 b -598 238 b -599 238 b -600 238 b -601 238 b -602 238 b -603 238 b -597 237 b -598 237 b -599 237 b -600 237 b -601 237 b -603 237 b -597 236 b -598 236 b -599 236 b -600 236 b -603 236 b -597 235 b -598 235 b -599 235 b -603 235 b -597 234 b -598 234 b -603 234 b -597 233 b -604 239 b -598 239 584 239 l -616 239 605 239 l -/text_height 12 def -/text_width 6 def -584 267 moveto 9 (LED3) ht -611 252 b -609 251 b -610 251 b -609 250 b -610 250 b -608 249 b -607 248 b -607 247 b -608 247 b -609 247 b -610 247 b -611 247 b -612 247 b -612 246 b -611 245 b -610 244 b -609 243 b -/text_height 12 def -/text_width 6 def -585 233 moveto 9 (AMBER) ht -648 230 632 230 l -640 230 640 239 l -645 227 635 227 l -642 224 638 224 l -640 221 b -640 239 616 239 l -402 767 392 767 l -440 767 430 767 l -/text_height 12 def -/text_width 6 def -395 787 moveto 9 (68K) ht -/text_height 12 def -/text_width 6 def -395 799 moveto 9 (R6) ht -406 772 404 767 l -410 763 406 772 l -414 772 410 763 l -418 763 414 772 l -422 772 418 763 l -426 763 422 772 l -428 767 426 763 l -430 767 428 767 l -404 767 403 767 l -408 620 408 631 l -/text_height 12 def -/text_width 6 def -418 621 moveto 9 (R5) ht -/text_height 12 def -/text_width 6 def -418 608 moveto 9 (680) ht -413 617 408 619 l -413 601 404 597 l -413 601 404 605 l -413 609 404 613 l -413 609 404 605 l -408 593 408 595 l -408 596 404 597 l -408 583 408 594 l -413 617 404 613 l -408 619 408 621 l -408 594 408 596 l -426 327 416 327 l -464 327 454 327 l -/text_height 12 def -/text_width 6 def -419 347 moveto 9 (33K) ht -/text_height 12 def -/text_width 6 def -419 359 moveto 9 (R9) ht -430 332 428 327 l -434 323 430 332 l -438 332 434 323 l -442 323 438 332 l -446 332 442 323 l -450 323 446 332 l -452 327 450 323 l -454 327 452 327 l -428 327 427 327 l -503 313 489 313 l -496 291 18 111 69 a -496 313 496 327 l -496 295 496 309 l -/text_height 12 def -/text_width 6 def -509 313 moveto 9 (22U) ht -/text_height 12 def -/text_width 6 def -510 326 moveto 9 (C17) ht -/text_height 12 def -/text_width 6 def -481 328 moveto 9 (+) ht - -showpage diff --git a/usr.sbin/xntpd/gadget/gadget.s02 b/usr.sbin/xntpd/gadget/gadget.s02 deleted file mode 100644 index 6af4a6e..0000000 --- a/usr.sbin/xntpd/gadget/gadget.s02 +++ /dev/null @@ -1,288 +0,0 @@ -%!PS-Adobe-23.0 EPSF-1.2 -%%Creator: SCHEMA -%%BoundingBox: 0 0 1343.0 1023.0 -/scl 511804.0 0.072 mul 65536.0 div def -scl scl scale - -% Landscape Orientation -/xoff 256.0 65536.0 mul 511804.0 div def -/yoff 1343.0 -256.0 65536.0 mul 511804.0 div sub def -xoff yoff translate --90 rotate - -0 setgray - -/a { 1 setlinewidth newpath arcn stroke } def -/fa { 3 setlinewidth newpath arcn stroke } def -/c { 1 setlinewidth newpath 0 360 arc stroke } def -/fc { 1 setlinewidth newpath 0 360 arc fill } def -/l { 1 setlinewidth newpath moveto lineto stroke } def -/t { 3 setlinewidth newpath moveto lineto stroke } def -/ds { [4 4] 0 setdash 1 setlinewidth - newpath moveto lineto stroke [] 0 setdash } def -/dt { [2 2] 0 setdash 1 setlinewidth - newpath moveto lineto stroke [] 0 setdash } def - -8 7 8 1015 t -1328 7 912 7 t -1336 1015 8 1015 t -1336 7 1336 1015 t -912 7 8 7 t -1336 7 1328 7 t - -/reencsmalldict 12 dict def %% Schema font definitions -/ReEncodeSmall - { reencsmalldict begin - /newcodesandnames exch def - /newfontname exch def - /basefontname exch def - /basefontdict basefontname findfont def - /newfont basefontdict maxlength dict def - basefontdict - { exch dup /FID ne - { dup /Encoding eq - { exch dup length array copy newfont 3 1 roll put } - { exch newfont 3 1 roll put } - ifelse - } - { pop pop } - ifelse - } forall - newfont /FontName newfontname put - newcodesandnames aload pop - newcodesandnames length 2 idiv - { newfont /Encoding get 3 1 roll put } - repeat - newfontname newfont definefont pop - end - } def -/schfontvec [ 8#200 /Ccedilla 8#201 /udieresis 8#202 /eacute 8#203 /acircumflex -8#204 /adieresis 8#205 /agrave 8#207 /ccedilla 8#210 /ecircumflex -8#211 /edieresis 8#212 /egrave 8#213 /idieresis 8#214 /icircumflex -8#215 /igrave 8#216 /Adieresis 8#220 /Eacute 8#223 /ocircumflex -8#224 /odieresis 8#225 /ograve 8#226 /ucircumflex 8#227 /ugrave -8#230 /ydieresis 8#231 /Odieresis 8#232 /Udieresis 8#240 /aacute 8#241 /iacute -8#242 /oacute 8#243 /uacute 8#244 /ntilde 8#245 /Ntilde ] def -/schsymbvec [ 8#341 /beta 8#346 /mu 8#352 /Omega ] def -/Courier-Bold /Schfont schfontvec ReEncodeSmall -/Symbol /Schsymb schsymbvec ReEncodeSmall - - -/htdict 4 dict def %% HTEXT - variable spacing horizontal text routine -/ht - { htdict begin - /textstring exch def - /xskip exch def - 0 text_height neg rmoveto - /Schfont findfont text_height scalefont setfont - textstring - { - /charcode exch def - /thechar ( ) dup 0 charcode put def - gsave - charcode 8#245 gt - { /Schsymb findfont text_height scalefont setfont - thechar show - /Schfont findfont text_height scalefont setfont } - { thechar show } - ifelse - grestore - currentpoint moveto - xskip 0 rmoveto - } forall - end - } def - -/text_height 12 def -/text_width 6 def -1304 27 moveto 9 (2) ht -/text_height 12 def -/text_width 6 def -1272 27 moveto 9 (OF) ht -/text_height 12 def -/text_width 6 def -1192 27 moveto 9 (SHEET) ht -1176 31 1176 7 l -1336 55 992 55 l -1336 31 992 31 l -992 7 992 87 t -1336 87 992 87 t -/text_height 20 def -/text_width 9 def -1032 87 moveto 13 (1-PPS/RS232 Converter) ht -/text_height 12 def -/text_width 6 def -1040 27 moveto 9 (26 June 1992) ht -1176 55 1176 31 l -/text_height 12 def -/text_width 6 def -1032 51 moveto 9 (100-0001-001) ht -/text_height 12 def -/text_width 6 def -1216 51 moveto 9 (REV) ht -/text_height 12 def -/text_width 6 def -1264 51 moveto 9 (1A) ht -640 303 240 303 l -240 463 240 303 l -640 463 240 463 l -640 463 640 303 l -240 783 240 543 l -640 543 240 543 l -640 783 640 543 l -640 783 240 783 l -1040 463 800 463 l -800 463 800 303 l -1040 463 1040 303 l -1040 303 800 303 l -632 327 248 327 l -632 335 632 327 l -248 335 248 327 l -632 335 248 335 l -656 367 640 367 l -656 367 656 351 l -656 351 640 351 l -640 367 624 367 l -624 367 624 351 l -640 351 624 351 l -248 335 240 335 l -224 367 224 335 l -240 335 224 335 l -624 359 616 359 l -616 359 616 335 l -288 367 288 335 l -288 367 224 367 l -624 327 624 303 l -592 327 592 303 l -844 419 20 c -996 419 20 c -1032 335 808 335 ds -1032 327 1032 335 ds -808 327 808 335 ds -1032 327 808 327 ds -816 303 816 327 ds -848 303 848 327 ds -1024 303 1024 327 ds -992 303 992 327 ds -632 775 248 775 l -632 775 632 551 l -632 551 248 551 l -248 775 248 551 l -288 751 248 751 l -288 575 248 575 l -288 751 288 575 l -600 751 16 c -/text_height 20 def -/text_width 9 def -344 223 moveto 13 (Assembly Drawing) ht -/text_height 12 def -/text_width 6 def -896 283 moveto 9 (End View) ht -/text_height 12 def -/text_width 6 def -280 163 moveto 9 (Material: 2" x 3" x 5" aluminum minibox) ht -600 575 16 c -842 357 10 c -1002 357 10 c -920 418 20 c -921 358 10 c -/text_height 12 def -/text_width 6 def -976 395 moveto 9 (POWER) ht -/text_height 12 def -/text_width 6 def -824 395 moveto 9 (AUDIO) ht -/text_height 12 def -/text_width 6 def -912 395 moveto 9 (PPS) ht -384 735 224 735 ds -384 591 224 591 ds -600 751 520 751 ds -600 575 520 575 ds -272 399 200 399 l -272 439 200 439 l -272 439 272 399 l -200 439 200 399 l -280 423 272 423 l -272 759 200 759 l -288 599 224 599 l -272 607 272 567 l -288 727 224 727 l -272 719 200 719 l -272 759 272 719 l -200 759 200 719 l -656 575 624 575 l -656 591 656 575 l -656 591 624 591 l -624 591 624 575 l -656 751 624 751 l -656 751 656 735 l -656 735 624 735 l -624 751 624 735 l -656 655 624 655 l -656 671 656 655 l -624 671 624 655 l -656 671 624 671 l -280 423 280 415 l -280 415 272 415 l -280 591 272 591 l -280 591 280 583 l -280 583 272 583 l -272 663 272 655 l -272 743 272 735 l -280 735 272 735 l -280 743 280 735 l -280 743 272 743 l -273 683 201 683 l -201 682 201 642 l -272 683 272 643 l -273 643 201 643 l -281 667 273 667 l -280 658 272 658 l -280 666 280 658 l -232 607 232 567 l -272 607 232 607 l -272 567 232 567 l -232 439 232 399 l -/text_height 12 def -/text_width 6 def -672 587 moveto 9 (LED1 \(green\)) ht -/text_height 12 def -/text_width 6 def -136 355 moveto 9 (J1 \(DB25\)) ht -/text_height 12 def -/text_width 6 def -120 747 moveto 9 (J2 \(BNC\)) ht -/text_height 12 def -/text_width 6 def -120 675 moveto 9 (J3 \(BNC\)) ht -/text_height 12 def -/text_width 6 def -128 611 moveto 9 (J4 \(power\)) ht -224 727 224 599 l -/text_height 12 def -/text_width 6 def -352 283 moveto 9 (Side View \(cover removed\)) ht -/text_height 12 def -/text_width 6 def -344 523 moveto 9 (Top View \(cover removed\)) ht -384 591 384 735 ds -528 575 528 751 ds -608 599 608 727 ds -/text_height 12 def -/text_width 6 def -416 619 moveto 9 (#4 x 1/4" spacers \(2\)) ht -/text_height 12 def -/text_width 6 def -400 699 moveto 9 (#4 screws \(4\)) ht -/text_height 12 def -/text_width 6 def -1248 27 moveto 9 (2) ht -/text_height 12 def -/text_width 6 def -672 667 moveto 9 (LED2 \(red\)) ht -/text_height 12 def -/text_width 6 def -672 747 moveto 9 (LED3 \(amber\)) ht - -showpage diff --git a/usr.sbin/xntpd/gadget/gen0102.lpr b/usr.sbin/xntpd/gadget/gen0102.lpr deleted file mode 100644 index cc4fd8e..0000000 --- a/usr.sbin/xntpd/gadget/gen0102.lpr +++ /dev/null @@ -1,1973 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: PADS Postscript Driver Header -%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851 -%%CreationDate: 06/08/90 -%%For: CAD Software, Littleton, MA -%%EndComments -%%BeginProcSet: Markers 1.0 0 -% marker attributes -/MAttr_Width 1 def -/MAttr_Size 0 def -/MAttr_Type /M1 def -% procedures -/M1 { %def -% draw marker 1: plus -% Stack: - M1 - - -2 0 rmoveto - 4 0 rlineto - -2 2 rmoveto - 0 -4 rlineto -} bind def -/M2 { %def -% draw marker 2: cross -% Stack: - M2 - - -2 -2 rmoveto - 4 4 rlineto - -4 0 rmoveto - 4 -4 rlineto -} bind def -/M3 { %def -% draw marker 3: square -% Stack: - M3 - - 0 2 rlineto - 2 0 rlineto - 0 -4 rlineto - -4 0 rlineto - 0 4 rlineto - 2 0 rlineto -} bind def -/M4 { %def -% draw marker 4: diamond -% Stack: - M4 - - 0 2 rlineto - 2 -2 rlineto - -2 -2 rlineto - -2 2 rlineto - 2 2 rlineto -} bind def -/M5 { %def -% draw marker 5: hourglass -% Stack: - M5 - - 2 2 rlineto - -4 0 rlineto - 4 -4 rlineto - -4 0 rlineto - 2 2 rlineto -} bind def -/M6 { %def -% draw marker 6: bowtie -% Stack: - M6 - - 2 2 rlineto - 0 -4 rlineto - -4 4 rlineto - 0 -4 rlineto - 2 2 rlineto -} bind def -/M7 { %def -% draw marker 7: small plus (goes with char marker) -% Stack: - M7 - - -1 0 rmoveto - 2 0 rlineto - -1 1 rmoveto - 0 -2 rlineto -} bind def -/Marker { %def -% Command from driver: draw marker -% STACK: x y Marker - - MAttr_Size 0 gt - { - gsave - moveto - MAttr_Size 4 div dup scale - MAttr_Type load exec - 4 MAttr_Size div dup scale - MAttr_Width setlinewidth - stroke - grestore - } if -} def -%%EndProcSet: Markers 1.0 0 -%%BeginProcSet: Lib 1.0 0 -/sg { %def -% Command from driver: set the gray scale 0 - 100 -% STACK: greylevel sg - 100 div dup setgray /glev exch def -} bind def -/Circle { %def -% draw a circle -% STACK: x y radius Circle - - 0 360 arc -} bind def -/RndAper { %def -% select a round aperture -% STACK: - RndAper - - 1 setlinejoin - 1 setlinecap -} bind def -/SqrAper { %def -% select a square aperture -% STACK: - SqrAper - - 0 setlinejoin - 2 setlinecap -} bind def -/Line { %def -% draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] Line - - 3 1 roll - moveto - true - exch - % This pushes the x then the y then does lineto - { exch { false } { lineto true } ifelse } forall - pop -} bind def -/Clipto { %def -% set clipping rectangle from 0,0 to new values -% STACK: x y Clipto - - 0 0 moveto - dup 0 exch lineto - 2 copy lineto - pop - 0 lineto - closepath - clip - newpath -} bind def -/Clip4 { %def -% set clipping rectangle from xmin,ymin to xmax,ymax -% STACK: xmin ymin xmax ymax Clip4 - - 4 copy pop pop moveto - 4 copy pop exch lineto pop - 2 copy lineto - exch pop exch pop lineto - closepath - clip - newpath -} bind def -%%EndProcSet: Lib 1.0 0 -%%BeginProcSet: Lines 1.0 0 -% line attributes % -/LAttr_Width 1 def -% line procedures -/PLine { %def -% Cammand from driver: draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - LAttr_Width setlinewidth - stroke -} bind def % PLine -/Char { %def -% Command from driver: draw a character at the current position -% STACK: type x y stroke_array Char - -% stroke array -- [ stroke1 stroke2 ... stroken ] -% stroke -- connected staight lines -% type = 0 if text 1 if marker - gsave - 4 1 roll - translate - 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth - { - dup length 2 gt - { - dup dup 0 get exch 1 get % get starting point - 3 -1 roll % put x y before array - dup length 2 sub 2 exch getinterval % delete first items from array - Line - stroke - } - { - aload pop currentlinewidth 2 div Circle fill - } ifelse - } forall - grestore -} bind def % Char -/PArc { %def -% Command from driver: draw an arc -% STACK: x y radius startangle deltaangle Arc - - 10 div exch 10 div exch - 2 copy pop add - arc - LAttr_Width setlinewidth - stroke -} bind def -/PCircle { %def -% Command from driver: draw an circle -% STACK: x y radius PCircle - - Circle - LAttr_Width setlinewidth - stroke -} bind def -%%EndProcSet: Lines 1.0 0 -%%BeginProcSet: Polygon 1.0 0 -% polygon attributes % -/PAttr_ExtWidth 1 def -/PAttr_IntWidth 1 def -/PAttr_Grid 1 def -% polygon procedures -/LoopSet { %def -% set up for loop condition -% STACK: start end LoopSet low gridwidth high - 2 copy lt { exch } if - % make grid line up to absolute coordinates - PAttr_Grid div truncate PAttr_Grid mul exch - PAttr_Grid exch -} bind def -/Hatch { %def -% draw cross hatch pattern in current path -% STACK: - Hatch - - pathbbox - /ury exch def - /urx exch def - /lly exch def - /llx exch def - clip - newpath - llx urx LoopSet - { % x loop - dup lly exch ury moveto lineto - } for - lly ury LoopSet - { % y loop - llx exch dup urx exch moveto lineto - } for - PAttr_IntWidth setlinewidth - stroke -} bind def -/PPoly { %def -% Command from driver: draw a plygon -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - closepath - gsave - PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse - grestore - PAttr_ExtWidth setlinewidth - stroke -} bind def -%%EndProcSet: Polygon 1.0 0 -%%BeginProcSet: Text 1.0 0 -% text attributes % -/TAttr_Mirr 0 def -/TAttr_Orient 0 def -/TAttr_Width 1 def -% text procedures -/Text { %def -% Command from driver: Draw text -% STACK: x y width string Text - - gsave - 4 2 roll - translate - TAttr_Mirr 0 gt - { - -1 1 scale - } if - TAttr_Orient rotate - 0 0 moveto - dup length dup 1 gt - { - exch dup stringwidth pop - 4 -1 roll - exch 2 copy - lt - { - div 1 scale show - } - { - sub - 3 -1 roll 1 sub div - 0 3 -1 roll ashow - } - ifelse - } - { - pop - show - } ifelse - grestore -} bind def -%%EndProcSet: Text 1.0 0 -%%BeginProcSet: FlashSymbols 1.0 0 -% flash symbol attributes % -/FAttr_Type /PRndPad def -/FAttr_Width 0 def -/FAttr_Length 1 def -/FAttr_Orient 0 def -% flash symbol procedures -/PRndPad { %def -% Command from driver: draw an circular pad -% STACK: - PCirclePad - - FAttr_Width dup scale - 0 0 .5 Circle - fill -} bind def -/PSqrPad { %def -% Draw an Square pad -% STACK: - PRectPad - - FAttr_Width dup scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/PRectPad { %def -% Draw an rectangular pad -% STACK: - PRectPad - - FAttr_Length FAttr_Width scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/POvalPad { %def -% Draw an oval pad -% STACK: - POvalPad - - FAttr_Width setlinewidth - FAttr_Length FAttr_Width sub 2 div dup - neg 0 moveto - 0 lineto - RndAper - stroke -} bind def -/Anl { %def - 0 0 .5 Circle - fill - FAttr_Length FAttr_Width lt - { % inner circle - 0 0 - FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse - 2 div Circle - 1 setgray - fill - glev setgray - } if -} bind def -/PAnlPad { %def -% Draw an annular pad -% STACK: - PAnlPad - - FAttr_Width dup scale - Anl -} bind def -/PRelPad { %def -% Draw an thermal relief pad -% STACK: - PRelPad - - PAnlPad - 1 setgray - .17 setlinewidth - 0 setlinecap % the x - 45 rotate - .5 0 moveto -.5 0 lineto - 0 .5 moveto 0 -.5 lineto - stroke - glev setgray -} bind def -/Flash { %def -% Command from driver: Flash a symbol -% STACK: x y Flash - - FAttr_Width 0 gt - { - gsave - translate - FAttr_Orient rotate - FAttr_Type load exec - grestore - } if -} def -%%EndProcSet: FlashSymbols 1.0 0 -%%BeginProcSet: SetAttr 1.0 0 -/SetLine { %def -% Set the width of the lines -% STACK: linewidth SetLine - - /LAttr_Width exch def - RndAper -} bind def -/SetPoly { %def -% Set attribute of polygon -% STACK: external_width internal_grid_width grid_spacing SetPoly - - /PAttr_Grid exch def - /PAttr_IntWidth exch def - /PAttr_ExtWidth exch def - RndAper -} bind def -/SetFlash { %def -% Set Attributed of flash pad -% STACK: orientation_angle length width aperture_type SetFlash - - /FAttr_Type exch def - FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or - { SqrAper } { RndAper } ifelse - /FAttr_Width exch def - /FAttr_Length exch def - /FAttr_Orient exch 10 div def -} bind def -/SetMkr { %def -% Set attributes of markers -% STACK: linewidth size type SetMkr - - /MAttr_Type exch def - /MAttr_Size exch def - /MAttr_Width exch def - RndAper -} bind def -/SetText1 { %def -% Set attributes of text -% STACK: fontname height orient mirror SetMkr - - /TAttr_Mirr exch def - /TAttr_Orient exch 10 div def - exch findfont exch scalefont setfont - RndAper -} bind def -/SetText2 { %def -% Set attributes of text -% STACK: linewidth height mirror orient SetMkr - - /TAttr_Width exch def - RndAper -} bind def -%%EndProcSet: SetAttr 1.0 0 -%%BeginProcSet: Initialize 1.0 0 -/Init { %def -% Initialize the driver -% STACK: Init - - 72 1000 div dup scale % Scale to 1/1000 inch - 250 250 translate % make origin 1/4 inch from bottom left - 1.5 setmiterlimit 1 RndAper % set line defaults - 0 setgray % set color default - /glev 0 def -} def -%%EndProcSet: Initialize 1.0 0 -%%EndProlog -/Helvetica findfont 12 scalefont setfont -35 760 moveto -(gadget.job - Fri Aug 21 03:34:44 1992) show -gsave -Init -8000 10500 Clipto -4015 2626 translate -0 rotate -1 1 div dup scale -75 sg -50 sg -12 SetLine --100 900 [ -100 800 ] PLine --100 800 [ 100 800 ] PLine -100 900 [ 100 800 ] PLine -100 800 [ 900 800 ] PLine -300 1100 [ 600 1100 ] PLine --1100 1150 [ -700 1150 ] PLine --700 1150 [ -700 1600 ] PLine -175 3300 [ -100 3300 ] PLine -700 3000 [ 300 3000 ] PLine -300 3000 [ 300 3100 ] PLine -300 2500 [ 300 2650 ] PLine -300 2650 [ 800 2650 ] PLine -800 2800 [ 800 2650 ] PLine -800 2650 [ 1000 2650 ] PLine -400 2500 [ 400 2600 ] PLine -400 2600 [ 1100 2600 ] PLine -1100 2600 [ 1100 2800 ] PLine --900 2300 [ -700 2100 ] PLine --700 2100 [ -450 2100 ] PLine -500 2500 [ 550 2550 ] PLine -550 2550 [ 750 2550 ] PLine -750 2550 [ 800 2500 ] PLine --650 2600 [ -100 2600 ] PLine --100 2250 [ 450 2250 ] PLine -450 2250 [ 500 2200 ] PLine --1200 2300 [ -1050 2300 ] PLine --1050 2300 [ -1050 2100 ] PLine --1050 2100 [ -800 2100 ] PLine --900 2500 [ -700 2300 ] PLine --700 2300 [ -700 2200 ] PLine --700 2200 [ -300 2200 ] PLine --300 2200 [ -300 2100 ] PLine -1250 1900 [ 1250 1800 ] PLine -1250 1800 [ 800 1800 ] PLine -300 1900 [ 300 1800 ] PLine -300 1800 [ 800 1800 ] PLine -700 1900 [ 450 1900 ] PLine -300 1700 [ 600 1700 ] PLine -500 1600 [ -100 1600 ] PLine --100 1600 [ -100 1700 ] PLine -1000 3900 [ 1050 3950 ] PLine -1050 3950 [ 1050 4050 ] PLine -1050 4050 [ 50 4050 ] PLine -50 4050 [ 0 4000 ] PLine -0 4100 [ 900 4100 ] PLine -800 3000 [ 1100 3000 ] PLine -0 3700 [ 0 3850 ] PLine -0 3850 [ 450 3850 ] PLine -450 3850 [ 500 3900 ] PLine --400 3400 [ -400 3600 ] PLine --400 3600 [ 300 3600 ] PLine -300 3600 [ 300 3700 ] PLine -300 3700 [ 600 3700 ] PLine -450 2700 [ -400 2700 ] PLine --400 2300 [ -300 2300 ] PLine --700 4200 [ -650 4250 ] PLine --650 4250 [ 550 4250 ] PLine -550 4250 [ 600 4200 ] PLine -350 3800 [ 1100 3800 ] PLine -1100 3800 [ 1100 3900 ] PLine --800 3100 [ -800 2800 ] PLine --800 2800 [ -400 2800 ] PLine --850 3700 [ -400 3700 ] PLine -400 1300 [ 600 1300 ] PLine --1100 4200 [ -1050 4150 ] PLine --1050 4150 [ 650 4150 ] PLine -650 4150 [ 700 4200 ] PLine --300 3400 [ -250 3350 ] PLine --250 3350 [ 1200 3350 ] PLine -1200 3350 [ 1200 4200 ] PLine -1200 4200 [ 1100 4200 ] PLine --700 3100 [ -700 2875 ] PLine --700 2875 [ -200 2875 ] PLine --200 2875 [ -200 2800 ] PLine --600 3100 [ -600 2950 ] PLine --600 2950 [ 600 2950 ] PLine -600 2950 [ 600 2800 ] PLine --750 550 [ -750 1050 ] PLine --750 1050 [ -1050 1050 ] PLine -950 3200 [ 700 3200 ] PLine -850 1200 [ -600 1200 ] PLine --550 3900 [ -350 3900 ] PLine -540 4479 [ 540 4300 ] PLine -540 4300 [ -800 4300 ] PLine -432 4479 [ 432 4350 ] PLine -432 4350 [ -750 4350 ] PLine -400 3400 [ 700 3400 ] PLine -50 SetLine --1000 3400 [ -1000 3250 ] PLine --1000 3250 [ -200 3250 ] PLine --200 3250 [ -200 3100 ] PLine --200 3100 [ -100 3100 ] PLine -0 2500 [ 0 2350 ] PLine -0 2350 [ 200 2350 ] PLine -200 2350 [ 200 2500 ] PLine -0 2350 [ -200 2350 ] PLine --1000 3400 [ -1200 3400 ] PLine -200 2350 [ 1100 2350 ] PLine -1100 2350 [ 1100 2450 ] PLine -1100 2450 [ 1200 2450 ] PLine --600 1600 [ -600 1750 ] PLine --600 1750 [ -200 1750 ] PLine --1200 3700 [ -1000 3700 ] PLine --1000 3700 [ -1000 3400 ] PLine -1100 3200 [ 1250 3200 ] PLine -1250 3200 [ 1250 2450 ] PLine -1250 2450 [ 1200 2450 ] PLine -900 4200 [ 900 4300 ] PLine -900 4300 [ 1250 4300 ] PLine -1250 4300 [ 1250 3200 ] PLine --700 4000 [ -1000 4000 ] PLine --1000 4000 [ -1000 3700 ] PLine -900 4200 [ 800 4200 ] PLine -200 1400 [ 1100 1400 ] PLine -1100 1400 [ 1100 800 ] PLine --50 450 [ -50 150 ] PLine -950 150 [ 1100 450 ] PLine -1100 450 [ 1000 800 ] PLine --250 450 [ -250 1000 ] PLine --250 1000 [ 200 1000 ] PLine -200 1000 [ 200 1100 ] PLine -0 450 [ -750 450 ] PLine --750 450 [ -1100 450 ] PLine -0 4475 [ 0 4400 ] PLine -0 4400 [ -648 4400 ] PLine --648 4400 [ -648 4479 ] PLine -75 4000 [ 300 4000 ] PLine -300 4000 [ 300 3900 ] PLine -1100 450 [ 750 450 ] PLine -750 450 [ 0 450 ] PLine -900 2200 [ 900 2000 ] PLine -900 2000 [ 75 2000 ] PLine -75 2000 [ 75 2200 ] PLine -75 2200 [ 200 2200 ] PLine -300 4000 [ 1000 4000 ] PLine --1100 450 [ -1050 150 ] PLine --600 1900 [ -600 2000 ] PLine --600 2000 [ 75 2000 ] PLine -75 2100 [ 0 2100 ] PLine -12 SetLine -700 3700 [ 750 3650 ] PLine -750 3650 [ 750 800 ] PLine -750 800 [ 900 800 ] PLine -0 550 [ 300 550 ] PLine -300 550 [ 300 1100 ] PLine -300 2200 [ 250 2150 ] PLine -250 2150 [ 250 1600 ] PLine -250 1600 [ 300 1550 ] PLine -300 1550 [ 300 1100 ] PLine --700 2500 [ -550 2500 ] PLine --550 2500 [ -550 1700 ] PLine --550 1700 [ -700 1700 ] PLine --700 1700 [ -700 1600 ] PLine -300 3500 [ 175 3500 ] PLine -175 3500 [ 175 3100 ] PLine -175 3100 [ 300 3100 ] PLine -300 4200 [ 250 4150 ] PLine -250 4150 [ 250 3800 ] PLine -250 3800 [ 300 3750 ] PLine -300 3750 [ 300 3500 ] PLine --300 2500 [ -250 2550 ] PLine --250 2550 [ -250 3300 ] PLine --250 3300 [ -100 3300 ] PLine -300 4200 [ 400 4200 ] PLine --900 1600 [ -800 1600 ] PLine --800 1600 [ -800 1500 ] PLine --800 1500 [ -500 1500 ] PLine --500 1500 [ -500 1600 ] PLine -1000 2650 [ 1000 2250 ] PLine -1000 2250 [ 1200 2250 ] PLine -400 1500 [ 400 2200 ] PLine -400 2200 [ 400 2300 ] PLine -400 2300 [ 700 2300 ] PLine -700 2300 [ 700 2500 ] PLine --450 2100 [ -450 1650 ] PLine --450 1650 [ -400 1600 ] PLine --500 3400 [ -500 3150 ] PLine --500 3150 [ -650 3150 ] PLine --650 3150 [ -650 2600 ] PLine --100 2600 [ -100 2250 ] PLine --1200 2500 [ -1200 2300 ] PLine --300 2100 [ -250 2050 ] PLine --250 2050 [ -250 1650 ] PLine --250 1650 [ -300 1600 ] PLine -800 1800 [ 800 2200 ] PLine -600 900 [ 600 550 ] PLine -600 550 [ 750 550 ] PLine -700 2200 [ 700 1900 ] PLine -600 1700 [ 600 2200 ] PLine -1050 150 [ 1050 250 ] PLine -1050 250 [ 500 250 ] PLine -500 250 [ 500 1600 ] PLine -0 4200 [ 0 4100 ] PLine -900 4100 [ 900 3900 ] PLine -800 3900 [ 800 3000 ] PLine -600 3700 [ 600 3900 ] PLine -600 4200 [ 600 4075 ] PLine -600 4075 [ 450 4075 ] PLine -450 4075 [ 450 2700 ] PLine --400 2700 [ -400 2300 ] PLine -300 3300 [ 350 3350 ] PLine -350 3350 [ 350 3800 ] PLine --1200 2800 [ -1000 2800 ] PLine --1000 2800 [ -1000 3100 ] PLine --900 3100 [ -850 3150 ] PLine --850 3150 [ -850 3700 ] PLine -50 150 [ 400 150 ] PLine -400 150 [ 400 1300 ] PLine --500 3100 [ -500 3000 ] PLine --500 3000 [ -350 3000 ] PLine --350 3000 [ -350 1300 ] PLine --350 1300 [ -100 1300 ] PLine -200 3700 [ 150 3750 ] PLine -150 3750 [ 150 4425 ] PLine -150 4425 [ 108 4479 ] PLine -108 4479 [ 54 4593 ] PLine --108 4479 [ 50 4600 ] PLine -50 4600 [ 54 4593 ] PLine --324 4479 [ -216 4479 ] PLine --1100 1700 [ -1100 1450 ] PLine --1050 1050 [ -1050 1800 ] PLine --1050 1800 [ -1200 1800 ] PLine -950 3524 [ 950 3200 ] PLine -950 3700 [ 850 3700 ] PLine -850 3700 [ 850 1200 ] PLine --600 1200 [ -600 150 ] PLine --600 150 [ -950 150 ] PLine --540 4479 [ -550 4479 ] PLine --550 4479 [ -550 3900 ] PLine --350 3900 [ -350 3150 ] PLine --350 3150 [ -300 3100 ] PLine --432 4479 [ -450 4479 ] PLine --450 4479 [ -450 3150 ] PLine --450 3150 [ -382 3100 ] PLine --382 3100 [ -400 3100 ] PLine --800 4300 [ -800 3400 ] PLine --750 4350 [ -750 3450 ] PLine --750 3450 [ -700 3400 ] PLine -400 3900 [ 400 3400 ] PLine -1100 3400 [ 1100 3600 ] PLine -1100 3600 [ 1026 3600 ] PLine -1026 3600 [ 1026 3612 ] PLine -50 SetLine --100 3100 [ 0 3100 ] PLine -0 3100 [ 0 2500 ] PLine --200 2350 [ -200 1900 ] PLine --200 1900 [ -100 1900 ] PLine --200 1900 [ -200 1500 ] PLine --200 1500 [ 0 1500 ] PLine -0 1500 [ 200 1500 ] PLine -200 1500 [ 200 1300 ] PLine -800 4200 [ 800 4050 ] PLine -800 4050 [ 700 4050 ] PLine -700 4050 [ 700 3900 ] PLine --750 450 [ -900 450 ] PLine --900 450 [ -900 1300 ] PLine --1200 1600 [ -1275 1600 ] PLine --1275 1600 [ -1275 900 ] PLine --900 900 [ -1275 900 ] PLine --600 1900 [ -600 1750 ] PLine --600 1750 [ -975 1750 ] PLine --975 1750 [ -975 1300 ] PLine --975 1300 [ -900 1300 ] PLine --1200 2100 [ -1275 2100 ] PLine --1275 2100 [ -1275 1600 ] PLine --1200 3000 [ -1275 3000 ] PLine --1275 3000 [ -1275 2100 ] PLine --900 3400 [ -900 3525 ] PLine --900 3525 [ -1275 3525 ] PLine --1100 4000 [ -1275 4000 ] PLine --1275 4000 [ -1275 3000 ] PLine -75 3500 [ 75 2100 ] PLine -75 2100 [ 0 2100 ] PLine -75 2200 [ 200 2200 ] PLine -0 4479 [ 0 4400 ] PLine -0 4400 [ 75 4400 ] PLine -75 4400 [ 75 3500 ] PLine --300 3700 [ -300 3500 ] PLine --300 3500 [ 75 3500 ] PLine -900 2500 [ 900 2200 ] PLine -1000 4000 [ 1000 4200 ] PLine -25 sg -0 sg -10 SetLine --1350 0 [ -1350 4900 ] PLine --1350 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 0 ] PLine -1350 0 [ -1350 0 ] PLine -10 SetLine --1350 4700 [ -1350 4900 ] PLine --1350 4900 [ -1150 4900 ] PLine -10 SetLine -1150 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 4700 ] PLine -10 SetLine -1150 0 [ 1350 0 ] PLine -1350 0 [ 1350 200 ] PLine -10 SetLine --1350 200 [ -1350 0 ] PLine --1350 0 [ -1150 0 ] PLine -10 SetLine --1050 1400 [ -1050 1200 ] PLine --1050 1200 [ -1150 1200 ] PLine --1150 1200 [ -1150 1400 ] PLine --1150 1400 [ -1050 1400 ] PLine -10 SetLine --50 3300 [ -100 3300 ] PLine -10 SetLine -250 3235 [ -50 3235 ] PLine --50 3235 [ -50 3365 ] PLine --50 3365 [ 250 3365 ] PLine -250 3365 [ 250 3235 ] PLine -10 SetLine -300 3300 [ 250 3300 ] PLine -10 SetLine -250 3100 [ 300 3100 ] PLine -10 SetLine --50 3165 [ 250 3165 ] PLine -250 3165 [ 250 3035 ] PLine -250 3035 [ -50 3035 ] PLine --50 3035 [ -50 3165 ] PLine -10 SetLine --100 3100 [ -50 3100 ] PLine -10 SetLine --50 3500 [ -100 3500 ] PLine -10 SetLine -250 3435 [ -50 3435 ] PLine --50 3435 [ -50 3565 ] PLine --50 3565 [ 250 3565 ] PLine -250 3565 [ 250 3435 ] PLine -10 SetLine -300 3500 [ 250 3500 ] PLine -10 SetLine --1150 3700 [ -1200 3700 ] PLine -10 SetLine --450 3575 [ -1150 3575 ] PLine --1150 3575 [ -1150 3825 ] PLine --1150 3825 [ -450 3825 ] PLine --450 3825 [ -450 3575 ] PLine -10 SetLine --400 3700 [ -450 3700 ] PLine -10 SetLine --850 1300 [ -900 1300 ] PLine -10 SetLine --150 1175 [ -850 1175 ] PLine --850 1175 [ -850 1425 ] PLine --850 1425 [ -150 1425 ] PLine --150 1425 [ -150 1175 ] PLine -10 SetLine --100 1300 [ -150 1300 ] PLine -10 SetLine -550 2800 [ 600 2800 ] PLine -10 SetLine --150 2925 [ 550 2925 ] PLine -550 2925 [ 550 2675 ] PLine -550 2675 [ -150 2675 ] PLine --150 2675 [ -150 2925 ] PLine -10 SetLine --200 2800 [ -150 2800 ] PLine -10 SetLine --450 2800 [ -400 2800 ] PLine -10 SetLine --1150 2925 [ -450 2925 ] PLine --450 2925 [ -450 2675 ] PLine --450 2675 [ -1150 2675 ] PLine --1150 2675 [ -1150 2925 ] PLine -10 SetLine --1200 2800 [ -1150 2800 ] PLine -10 SetLine -0 2150 [ 0 2100 ] PLine -10 SetLine -65 2450 [ 65 2150 ] PLine -65 2150 [ -65 2150 ] PLine --65 2150 [ -65 2450 ] PLine --65 2450 [ 65 2450 ] PLine -10 SetLine -0 2500 [ 0 2450 ] PLine -10 SetLine --1200 3050 [ -1200 3000 ] PLine -10 SetLine --1135 3350 [ -1135 3050 ] PLine --1135 3050 [ -1265 3050 ] PLine --1265 3050 [ -1265 3350 ] PLine --1265 3350 [ -1135 3350 ] PLine -10 SetLine --1200 3400 [ -1200 3350 ] PLine -10 SetLine --950 2250 [ -1150 2250 ] PLine --1150 2250 [ -1150 2350 ] PLine --1150 2350 [ -950 2350 ] PLine --950 2350 [ -950 2250 ] PLine -10 SetLine --1150 2550 [ -950 2550 ] PLine --950 2550 [ -950 2450 ] PLine --950 2450 [ -1150 2450 ] PLine --1150 2450 [ -1150 2550 ] PLine -10 SetLine -850 2850 [ 1050 2850 ] PLine -1050 2850 [ 1050 2750 ] PLine -1050 2750 [ 850 2750 ] PLine -850 2750 [ 850 2850 ] PLine -10 SetLine -500 1900 [ 450 1900 ] PLine -10 SetLine -1200 1775 [ 500 1775 ] PLine -500 1775 [ 500 2025 ] PLine -500 2025 [ 1200 2025 ] PLine -1200 2025 [ 1200 1775 ] PLine -10 SetLine -1250 1900 [ 1200 1900 ] PLine -10 SetLine --1150 900 [ -1200 900 ] PLine -10 SetLine --150 725 [ -1150 725 ] PLine --1150 725 [ -1150 1075 ] PLine --1150 1075 [ -150 1075 ] PLine --150 1075 [ -150 725 ] PLine -10 SetLine --100 900 [ -150 900 ] PLine -10 SetLine --1050 4000 [ -1100 4000 ] PLine -10 SetLine --750 3935 [ -1050 3935 ] PLine --1050 3935 [ -1050 4065 ] PLine --1050 4065 [ -750 4065 ] PLine --750 4065 [ -750 3935 ] PLine -10 SetLine --700 4000 [ -750 4000 ] PLine -10 SetLine -750 3000 [ 700 3000 ] PLine -10 SetLine -1050 2935 [ 750 2935 ] PLine -750 2935 [ 750 3065 ] PLine -750 3065 [ 1050 3065 ] PLine -1050 3065 [ 1050 2935 ] PLine -10 SetLine -1100 3000 [ 1050 3000 ] PLine -10 SetLine --250 3750 [ -50 3750 ] PLine --50 3750 [ -50 3650 ] PLine --50 3650 [ -250 3650 ] PLine --250 3650 [ -250 3750 ] PLine -10 SetLine -200 900 [ 150 900 ] PLine -10 SetLine -270 950 [ 270 850 ] PLine -10 SetLine -200 850 [ 200 950 ] PLine -200 950 [ 500 950 ] PLine -500 950 [ 500 850 ] PLine -500 850 [ 200 850 ] PLine -10 SetLine -500 900 [ 550 900 ] PLine -10 SetLine -250 850 [ 250 950 ] PLine -10 SetLine -260 850 [ 260 950 ] PLine -10 SetLine -600 3700 [ 650 3700 ] PLine -10 SetLine -530 3650 [ 530 3750 ] PLine -10 SetLine -600 3750 [ 600 3650 ] PLine -600 3650 [ 300 3650 ] PLine -300 3650 [ 300 3750 ] PLine -300 3750 [ 600 3750 ] PLine -10 SetLine -300 3700 [ 250 3700 ] PLine -10 SetLine -550 3750 [ 550 3650 ] PLine -10 SetLine -540 3750 [ 540 3650 ] PLine -10 SetLine --750 550 100 PCircle -10 SetLine -0 550 100 PCircle -10 SetLine -750 550 100 PCircle -10 SetLine -768 5000 [ 768 5248 ] PLine -768 5248 [ -768 5248 ] PLine --768 5248 [ -768 5000 ] PLine -10 SetLine -1058 4900 [ -1058 4900 ] PLine -10 SetLine -1058 5000 [ 1058 4408 ] PLine -1058 4408 [ -1058 4408 ] PLine --1058 4408 [ -1058 5000 ] PLine --1058 5000 [ 1058 5000 ] PLine -10 SetLine -1058 5000 [ -1058 5000 ] PLine -10 SetLine -768 4900 [ 768 4408 ] PLine -10 SetLine --768 4900 [ -768 4408 ] PLine -10 SetLine -900 200 [ 1100 200 ] PLine -1100 200 [ 1100 100 ] PLine -1100 100 [ 900 100 ] PLine -900 100 [ 900 200 ] PLine -10 SetLine --100 200 [ 100 200 ] PLine -100 200 [ 100 100 ] PLine -100 100 [ -100 100 ] PLine --100 100 [ -100 200 ] PLine -10 SetLine --1100 200 [ -900 200 ] PLine --900 200 [ -900 100 ] PLine --900 100 [ -1100 100 ] PLine --1100 100 [ -1100 200 ] PLine -10 SetLine -916 3493 [ 900 3456 ] PLine -900 3456 [ 939 3442 ] PLine -939 3442 [ 953 3477 ] PLine -10 SetLine -988 3612 140 PCircle -10 SetLine --1000 1529 [ -1039 1490 ] PLine -10 SetLine --1000 1490 [ -1000 1910 ] PLine --1000 1910 [ -1300 1910 ] PLine --1300 1910 [ -1300 1490 ] PLine --1300 1490 [ -1000 1490 ] PLine -10 SetLine -200 1730 [ 200 1670 ] PLine -200 1670 [ 0 1670 ] PLine -0 1670 [ 0 1730 ] PLine -0 1730 [ 200 1730 ] PLine -10 SetLine -200 1700 [ 260 1700 ] PLine -10 SetLine -0 1700 [ -50 1700 ] PLine -10 SetLine -300 1270 [ 300 1330 ] PLine -300 1330 [ 500 1330 ] PLine -500 1330 [ 500 1270 ] PLine -500 1270 [ 300 1270 ] PLine -10 SetLine -300 1300 [ 240 1300 ] PLine -10 SetLine -500 1300 [ 550 1300 ] PLine -10 SetLine --600 2270 [ -600 2330 ] PLine --600 2330 [ -400 2330 ] PLine --400 2330 [ -400 2270 ] PLine --400 2270 [ -600 2270 ] PLine -10 SetLine --600 2300 [ -660 2300 ] PLine -10 SetLine --400 2300 [ -350 2300 ] PLine -10 SetLine --800 4230 [ -800 4170 ] PLine --800 4170 [ -1000 4170 ] PLine --1000 4170 [ -1000 4230 ] PLine --1000 4230 [ -800 4230 ] PLine -10 SetLine --800 4200 [ -740 4200 ] PLine -10 SetLine --1000 4200 [ -1050 4200 ] PLine -10 SetLine -1000 3230 [ 1000 3170 ] PLine -1000 3170 [ 800 3170 ] PLine -800 3170 [ 800 3230 ] PLine -800 3230 [ 1000 3230 ] PLine -10 SetLine -1000 3200 [ 1060 3200 ] PLine -10 SetLine -800 3200 [ 750 3200 ] PLine -10 SetLine --600 2470 [ -600 2530 ] PLine --600 2530 [ -400 2530 ] PLine --400 2530 [ -400 2470 ] PLine --400 2470 [ -600 2470 ] PLine -10 SetLine --600 2500 [ -660 2500 ] PLine -10 SetLine --400 2500 [ -350 2500 ] PLine -10 SetLine --600 2070 [ -600 2130 ] PLine --600 2130 [ -400 2130 ] PLine --400 2130 [ -400 2070 ] PLine --400 2070 [ -600 2070 ] PLine -10 SetLine --600 2100 [ -660 2100 ] PLine -10 SetLine --400 2100 [ -350 2100 ] PLine -10 SetLine --900 2130 [ -900 2070 ] PLine --900 2070 [ -1100 2070 ] PLine --1100 2070 [ -1100 2130 ] PLine --1100 2130 [ -900 2130 ] PLine -10 SetLine --900 2100 [ -840 2100 ] PLine -10 SetLine --1100 2100 [ -1150 2100 ] PLine -10 SetLine -500 1130 [ 500 1070 ] PLine -500 1070 [ 300 1070 ] PLine -300 1070 [ 300 1130 ] PLine -300 1130 [ 500 1130 ] PLine -10 SetLine -500 1100 [ 560 1100 ] PLine -10 SetLine -300 1100 [ 250 1100 ] PLine -10 SetLine -1000 2521 [ 1039 2560 ] PLine -10 SetLine -1000 2560 [ 1000 2140 ] PLine -1000 2140 [ 1300 2140 ] PLine -1300 2140 [ 1300 2560 ] PLine -1300 2560 [ 1000 2560 ] PLine -10 SetLine -0 1870 [ 0 1930 ] PLine -0 1930 [ 200 1930 ] PLine -200 1930 [ 200 1870 ] PLine -200 1870 [ 0 1870 ] PLine -10 SetLine -0 1900 [ -60 1900 ] PLine -10 SetLine -200 1900 [ 250 1900 ] PLine -10 SetLine -100 1470 [ 100 1530 ] PLine -100 1530 [ 300 1530 ] PLine -300 1530 [ 300 1470 ] PLine -300 1470 [ 100 1470 ] PLine -10 SetLine -100 1500 [ 40 1500 ] PLine -10 SetLine -300 1500 [ 350 1500 ] PLine -10 SetLine --950 1650 [ -250 1650 ] PLine --250 1650 [ -250 1850 ] PLine --250 1850 [ -950 1850 ] PLine --950 1850 [ -950 1775 ] PLine --950 1775 [ -900 1775 ] PLine --900 1775 [ -900 1725 ] PLine --900 1725 [ -950 1725 ] PLine --950 1725 [ -950 1650 ] PLine -10 SetLine -150 2250 [ 950 2250 ] PLine -950 2250 [ 950 2450 ] PLine -950 2450 [ 150 2450 ] PLine -150 2450 [ 150 2375 ] PLine -150 2375 [ 200 2375 ] PLine -200 2375 [ 200 2325 ] PLine -200 2325 [ 150 2325 ] PLine -150 2325 [ 150 2250 ] PLine -10 SetLine -150 3950 [ 1150 3950 ] PLine -1150 3950 [ 1150 4150 ] PLine -1150 4150 [ 150 4150 ] PLine -150 4150 [ 150 4075 ] PLine -150 4075 [ 200 4075 ] PLine -200 4075 [ 200 4025 ] PLine -200 4025 [ 150 4025 ] PLine -150 4025 [ 150 3950 ] PLine -10 SetLine --1050 3150 [ -250 3150 ] PLine --250 3150 [ -250 3350 ] PLine --250 3350 [ -1050 3350 ] PLine --1050 3350 [ -1050 3275 ] PLine --1050 3275 [ -1000 3275 ] PLine --1000 3275 [ -1000 3225 ] PLine --1000 3225 [ -1050 3225 ] PLine --1050 3225 [ -1050 3150 ] PLine -10 SetLine -800 1075 [ 800 1675 ] PLine -800 1675 [ 1200 1675 ] PLine -1200 1675 [ 1200 1075 ] PLine -1200 1075 [ 800 1075 ] PLine -10 SetLine -875 1075 [ 875 825 ] PLine -875 825 [ 925 825 ] PLine -925 825 [ 925 1075 ] PLine -10 SetLine -1075 1075 [ 1075 825 ] PLine -1075 825 [ 1125 825 ] PLine -1125 825 [ 1125 1075 ] PLine -10 SetLine -975 1075 [ 975 825 ] PLine -975 825 [ 1025 825 ] PLine -1025 825 [ 1025 1075 ] PLine -10 SetLine -996 1549 75 PCircle -10 SetLine -800 1425 [ 1200 1425 ] PLine -10 SetLine --100 4200 [ -25 4200 ] PLine -10 SetLine --100 3900 [ -100 4300 ] PLine --100 4300 [ -500 4300 ] PLine --500 4300 [ -500 3900 ] PLine --500 3900 [ -100 3900 ] PLine -10 SetLine --100 4000 [ -25 4000 ] PLine -10 SetLine --1100 450 100 PCircle -10 SetLine -1100 450 100 PCircle -10 SetLine -1000 3430 [ 1000 3370 ] PLine -1000 3370 [ 800 3370 ] PLine -800 3370 [ 800 3430 ] PLine -800 3430 [ 1000 3430 ] PLine -10 SetLine -1000 3400 [ 1060 3400 ] PLine -10 SetLine -800 3400 [ 750 3400 ] PLine -10 SetText2 -0 -1175 1225 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -1175 1279 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char -0 -1175 1310 [ [ -65 29 -65 6 -37 4 -40 6 -43 13 -43 20 -40 27 -34 31 -25 34 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char -10 SetText2 -0 75 3375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3375 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 75 3175 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3175 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -10 SetText2 -0 75 3575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3575 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -825 3850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -771 3850 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -575 1450 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -521 1450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -490 1450 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 125 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 179 2950 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 210 2950 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -825 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -771 2950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char -10 SetText2 -0 -100 2250 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -100 2304 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char -0 -100 2335 [ [ -65 4 -65 29 -40 15 -40 22 -37 27 -34 29 -25 31 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char -10 SetText2 -0 -1275 3200 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -1275 3254 [ [ -50 2 -53 2 -59 4 -62 6 -65 11 -65 20 -62 25 -59 27 -53 29 -46 29 -40 27 -31 22 0 0 0 31 ] ] Char -10 SetText2 -0 -1100 2375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -1046 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -1015 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1100 2575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -1046 2575 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -1015 2575 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 900 2875 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 954 2875 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 985 2875 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 800 2050 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 854 2050 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 885 2050 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -10 SetText2 -0 -675 1100 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -621 1100 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -590 1100 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char -10 SetText2 -0 -925 4075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -871 4075 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 875 3075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 929 3075 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char -10 SetText2 -0 -200 3775 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -146 3775 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 325 975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 377 975 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 450 3775 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 502 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -775 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -732 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -50 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -7 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 700 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 743 675 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 -1175 4650 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -1132 4650 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1125 125 [ [ 0 65 0 0 27 0 ] ] Char -0 1172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 1222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 1274 125 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 125 125 [ [ 0 65 0 0 27 0 ] ] Char -0 172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 274 125 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -875 125 [ [ 0 65 0 0 27 0 ] ] Char -0 -828 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -778 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -726 125 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1075 3425 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] [ 20 12 34 -6 ] ] Char -0 1131 3425 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1075 1475 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char -0 -1127 1475 [ [ -11 -65 -4 -62 -2 -56 -2 -50 -4 -43 -9 -40 -18 -37 -25 -34 -29 -28 -31 -21 -31 -12 -29 -6 -27 -3 -20 0 -11 0 -4 -3 -2 -6 0 -12 0 -21 -2 -28 -6 -34 -13 -37 -22 -40 -27 -43 -29 -50 -29 -56 -27 -62 -20 -65 -11 -65 ] ] Char -10 SetText2 -0 25 1750 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 77 1750 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 108 1750 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 350 1350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 402 1350 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 433 1350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -550 2350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2350 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 -925 4250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -873 4250 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 850 3250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 902 3250 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -550 2550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -550 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2150 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 -1025 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -973 2150 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 350 1150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 402 1150 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 433 1150 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 1200 2125 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char -0 1148 2125 [ [ -31 -65 -9 0 ] [ 0 -65 -31 -65 ] ] Char -10 SetText2 -0 50 1950 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 102 1950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char -10 SetText2 -0 150 1550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 202 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 233 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -675 1950 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -623 1950 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 450 2550 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 502 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 500 4275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 552 4275 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -675 3450 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -623 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 950 1700 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 1002 1700 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -350 4325 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char -0 -298 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1225 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -1169 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 -1117 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1125 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 1181 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 1233 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 800 3450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 852 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 883 3450 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -0 0 60 /PRndPad SetFlash --1100 1450 Flash --1100 1150 Flash -300 3300 Flash --100 3300 Flash --100 3100 Flash -300 3100 Flash -300 3500 Flash --100 3500 Flash --400 3700 Flash --1200 3700 Flash --100 1300 Flash --900 1300 Flash --200 2800 Flash -600 2800 Flash --1200 2800 Flash --400 2800 Flash -0 2500 Flash -0 2100 Flash --1200 3400 Flash --1200 3000 Flash --900 2300 Flash --1200 2300 Flash --1200 2500 Flash --900 2500 Flash -800 2800 Flash -1100 2800 Flash -1250 1900 Flash -450 1900 Flash --100 900 Flash --1200 900 Flash --700 4000 Flash --1100 4000 Flash -1100 3000 Flash -700 3000 Flash --300 3700 Flash -0 3700 Flash -0 0 60 /PSqrPad SetFlash -100 900 Flash -0 0 60 /PRndPad SetFlash -600 900 Flash -0 0 60 /PSqrPad SetFlash -700 3700 Flash -0 0 60 /PRndPad SetFlash -200 3700 Flash -0 0 70 /PRndPad SetFlash --750 550 Flash --750 450 Flash -0 550 Flash -0 450 Flash -750 550 Flash -750 450 Flash --648 4479 Flash --540 4479 Flash --432 4479 Flash --324 4479 Flash --216 4479 Flash --108 4479 Flash -0 4479 Flash -108 4479 Flash -216 4479 Flash -324 4479 Flash -432 4479 Flash -540 4479 Flash -648 4479 Flash --594 4593 Flash --486 4593 Flash --378 4593 Flash --270 4593 Flash --162 4593 Flash --54 4593 Flash -54 4593 Flash -162 4593 Flash -270 4593 Flash -378 4593 Flash -486 4593 Flash -594 4593 Flash -0 0 177 /PRndPad SetFlash -940 4536 Flash --940 4536 Flash -0 0 60 /PSqrPad SetFlash -950 150 Flash -0 0 60 /PRndPad SetFlash -1050 150 Flash -0 0 60 /PSqrPad SetFlash --50 150 Flash -0 0 60 /PRndPad SetFlash -50 150 Flash -0 0 60 /PSqrPad SetFlash --1050 150 Flash -0 0 60 /PRndPad SetFlash --950 150 Flash -0 0 50 /PRndPad SetFlash -950 3524 Flash -1026 3612 Flash -950 3700 Flash -0 0 60 /PSqrPad SetFlash --1200 1600 Flash -0 0 60 /PRndPad SetFlash --1100 1700 Flash --1200 1800 Flash -300 1700 Flash --100 1700 Flash -200 1300 Flash -600 1300 Flash --700 2300 Flash --300 2300 Flash --700 4200 Flash --1100 4200 Flash -1100 3200 Flash -700 3200 Flash --700 2500 Flash --300 2500 Flash --700 2100 Flash --300 2100 Flash --800 2100 Flash --1200 2100 Flash -600 1100 Flash -200 1100 Flash -0 0 60 /PSqrPad SetFlash -1200 2450 Flash -0 0 60 /PRndPad SetFlash -1100 2350 Flash -1200 2250 Flash --100 1900 Flash -300 1900 Flash -0 1500 Flash -400 1500 Flash -0 0 60 /PSqrPad SetFlash --900 1600 Flash -0 0 60 /PRndPad SetFlash --800 1600 Flash --700 1600 Flash --600 1600 Flash --500 1600 Flash --400 1600 Flash --300 1600 Flash --300 1900 Flash --400 1900 Flash --500 1900 Flash --600 1900 Flash --700 1900 Flash --800 1900 Flash --900 1900 Flash -0 0 60 /PSqrPad SetFlash -200 2200 Flash -0 0 60 /PRndPad SetFlash -300 2200 Flash -400 2200 Flash -500 2200 Flash -600 2200 Flash -700 2200 Flash -800 2200 Flash -900 2200 Flash -900 2500 Flash -800 2500 Flash -700 2500 Flash -600 2500 Flash -500 2500 Flash -400 2500 Flash -300 2500 Flash -200 2500 Flash -0 0 60 /PSqrPad SetFlash -200 3900 Flash -0 0 60 /PRndPad SetFlash -300 3900 Flash -400 3900 Flash -500 3900 Flash -600 3900 Flash -700 3900 Flash -800 3900 Flash -900 3900 Flash -1000 3900 Flash -1100 3900 Flash -1100 4200 Flash -1000 4200 Flash -900 4200 Flash -800 4200 Flash -700 4200 Flash -600 4200 Flash -500 4200 Flash -400 4200 Flash -300 4200 Flash -200 4200 Flash -0 0 60 /PSqrPad SetFlash --1000 3100 Flash -0 0 60 /PRndPad SetFlash --900 3100 Flash --800 3100 Flash --700 3100 Flash --600 3100 Flash --500 3100 Flash --400 3100 Flash --300 3100 Flash --300 3400 Flash --400 3400 Flash --500 3400 Flash --600 3400 Flash --700 3400 Flash --800 3400 Flash --900 3400 Flash --1000 3400 Flash -0 0 70 /PRndPad SetFlash -900 800 Flash -1100 800 Flash -1000 800 Flash -0 0 177 /PRndPad SetFlash -1000 1550 Flash -0 0 60 /PRndPad SetFlash -0 4000 Flash -0 4200 Flash -0 0 250 /PRndPad SetFlash --1100 450 Flash -1100 450 Flash -0 0 60 /PRndPad SetFlash -1100 3400 Flash -700 3400 Flash -0 0 60 /PRndPad SetFlash --1100 1450 Flash --1100 1150 Flash -300 3300 Flash --100 3300 Flash --100 3100 Flash -300 3100 Flash -300 3500 Flash --100 3500 Flash --400 3700 Flash --1200 3700 Flash --100 1300 Flash --900 1300 Flash --200 2800 Flash -600 2800 Flash --1200 2800 Flash --400 2800 Flash -0 2500 Flash -0 2100 Flash --1200 3400 Flash --1200 3000 Flash --900 2300 Flash --1200 2300 Flash --1200 2500 Flash --900 2500 Flash -800 2800 Flash -1100 2800 Flash -1250 1900 Flash -450 1900 Flash --100 900 Flash --1200 900 Flash --700 4000 Flash --1100 4000 Flash -1100 3000 Flash -700 3000 Flash --300 3700 Flash -0 3700 Flash -0 0 60 /PSqrPad SetFlash -100 900 Flash -0 0 60 /PRndPad SetFlash -600 900 Flash -0 0 60 /PSqrPad SetFlash -700 3700 Flash -0 0 60 /PRndPad SetFlash -200 3700 Flash -0 0 70 /PRndPad SetFlash --750 550 Flash --750 450 Flash -0 550 Flash -0 450 Flash -750 550 Flash -750 450 Flash --648 4479 Flash --540 4479 Flash --432 4479 Flash --324 4479 Flash --216 4479 Flash --108 4479 Flash -0 4479 Flash -108 4479 Flash -216 4479 Flash -324 4479 Flash -432 4479 Flash -540 4479 Flash -648 4479 Flash --594 4593 Flash --486 4593 Flash --378 4593 Flash --270 4593 Flash --162 4593 Flash --54 4593 Flash -54 4593 Flash -162 4593 Flash -270 4593 Flash -378 4593 Flash -486 4593 Flash -594 4593 Flash -0 0 177 /PRndPad SetFlash -940 4536 Flash --940 4536 Flash -0 0 60 /PSqrPad SetFlash -950 150 Flash -0 0 60 /PRndPad SetFlash -1050 150 Flash -0 0 60 /PSqrPad SetFlash --50 150 Flash -0 0 60 /PRndPad SetFlash -50 150 Flash -0 0 60 /PSqrPad SetFlash --1050 150 Flash -0 0 60 /PRndPad SetFlash --950 150 Flash -0 0 50 /PRndPad SetFlash -950 3524 Flash -1026 3612 Flash -950 3700 Flash -0 0 60 /PSqrPad SetFlash --1200 1600 Flash -0 0 60 /PRndPad SetFlash --1100 1700 Flash --1200 1800 Flash -300 1700 Flash --100 1700 Flash -200 1300 Flash -600 1300 Flash --700 2300 Flash --300 2300 Flash --700 4200 Flash --1100 4200 Flash -1100 3200 Flash -700 3200 Flash --700 2500 Flash --300 2500 Flash --700 2100 Flash --300 2100 Flash --800 2100 Flash --1200 2100 Flash -600 1100 Flash -200 1100 Flash -0 0 60 /PSqrPad SetFlash -1200 2450 Flash -0 0 60 /PRndPad SetFlash -1100 2350 Flash -1200 2250 Flash --100 1900 Flash -300 1900 Flash -0 1500 Flash -400 1500 Flash -0 0 60 /PSqrPad SetFlash --900 1600 Flash -0 0 60 /PRndPad SetFlash --800 1600 Flash --700 1600 Flash --600 1600 Flash --500 1600 Flash --400 1600 Flash --300 1600 Flash --300 1900 Flash --400 1900 Flash --500 1900 Flash --600 1900 Flash --700 1900 Flash --800 1900 Flash --900 1900 Flash -0 0 60 /PSqrPad SetFlash -200 2200 Flash -0 0 60 /PRndPad SetFlash -300 2200 Flash -400 2200 Flash -500 2200 Flash -600 2200 Flash -700 2200 Flash -800 2200 Flash -900 2200 Flash -900 2500 Flash -800 2500 Flash -700 2500 Flash -600 2500 Flash -500 2500 Flash -400 2500 Flash -300 2500 Flash -200 2500 Flash -0 0 60 /PSqrPad SetFlash -200 3900 Flash -0 0 60 /PRndPad SetFlash -300 3900 Flash -400 3900 Flash -500 3900 Flash -600 3900 Flash -700 3900 Flash -800 3900 Flash -900 3900 Flash -1000 3900 Flash -1100 3900 Flash -1100 4200 Flash -1000 4200 Flash -900 4200 Flash -800 4200 Flash -700 4200 Flash -600 4200 Flash -500 4200 Flash -400 4200 Flash -300 4200 Flash -200 4200 Flash -0 0 60 /PSqrPad SetFlash --1000 3100 Flash -0 0 60 /PRndPad SetFlash --900 3100 Flash --800 3100 Flash --700 3100 Flash --600 3100 Flash --500 3100 Flash --400 3100 Flash --300 3100 Flash --300 3400 Flash --400 3400 Flash --500 3400 Flash --600 3400 Flash --700 3400 Flash --800 3400 Flash --900 3400 Flash --1000 3400 Flash -0 0 70 /PRndPad SetFlash -900 800 Flash -1100 800 Flash -1000 800 Flash -0 0 177 /PRndPad SetFlash -1000 1550 Flash -0 0 60 /PRndPad SetFlash -0 4000 Flash -0 4200 Flash -0 0 250 /PRndPad SetFlash --1100 450 Flash -1100 450 Flash -0 0 60 /PRndPad SetFlash -1100 3400 Flash -700 3400 Flash -10 SetText2 -0 -225 875 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 1125 1875 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 -125 2775 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 -1125 2775 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 -525 3675 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 -700 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -750 275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 34 25 ] [ 22 25 34 25 ] ] Char -0 -696 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -640 275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -588 275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 34 25 ] [ 22 25 34 25 ] ] Char -0 -534 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -484 275 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char -0 -380 275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char -0 -328 275 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 -272 275 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char -0 -168 275 [ [ 0 28 40 28 ] ] Char -0 -55 275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -3 275 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char -0 49 275 [ [ 0 65 0 0 ] ] Char -0 69 275 [ [ 0 65 18 0 ] [ 36 65 18 0 ] ] Char -0 177 275 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 233 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] ] Char -0 335 275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 387 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 437 275 [ [ 0 65 0 0 27 0 ] ] Char -0 484 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 540 275 [ [ 0 65 11 0 ] [ 22 65 11 0 ] [ 22 65 34 0 ] [ 45 65 34 0 ] ] Char -0 605 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 661 275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 713 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 125 600 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 177 600 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 229 600 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 500 600 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -0 561 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 592 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -625 600 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -569 600 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -517 600 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -465 600 [ [ 0 65 0 0 ] ] Char -0 -445 600 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -10 SetText2 -0 -300 4725 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -0 -248 4725 [ [ 0 65 0 0 ] ] Char -0 -228 4725 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -176 4725 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -74 4725 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 300 4725 [ [ -31 56 -27 62 -20 65 -11 65 -4 62 0 56 0 50 -2 43 -4 40 -9 37 -22 31 -27 28 -29 25 -31 18 -31 9 -27 3 -20 0 -11 0 -4 3 0 9 ] ] Char -0 248 4725 [ [ 0 65 0 0 ] ] Char -0 228 4725 [ [ 0 65 0 0 ] [ 0 65 -15 65 -22 62 -27 56 -29 50 -31 40 -31 25 -29 15 -27 9 -22 3 -15 0 0 0 ] ] Char -0 176 4725 [ [ 0 65 0 0 ] [ 0 65 -29 65 ] [ 0 34 -18 34 ] [ 0 0 -29 0 ] ] Char -0 74 4725 [ [ -2 50 -2 53 -4 59 -6 62 -11 65 -20 65 -25 62 -27 59 -29 53 -29 46 -27 40 -22 31 0 0 -31 0 ] ] Char -10 SetText2 -0 1100 2075 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1050 1925 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 875 675 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1075 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 975 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -925 1475 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 175 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1050 2975 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 625 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 656 4325 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -825 1275 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -0 0 55 /PRndPad SetFlash --200 2350 Flash --200 1750 Flash -200 1400 Flash -0 0 55 /PRndPad SetFlash --200 2350 Flash --200 1750 Flash -200 1400 Flash -0 0 55 /PRndPad SetFlash -300 1100 Flash -0 0 55 /PRndPad SetFlash -300 1100 Flash -0 0 55 /PRndPad SetFlash -175 3300 Flash -0 0 55 /PRndPad SetFlash -175 3300 Flash -0 0 55 /PRndPad SetFlash -1000 2650 Flash -0 0 55 /PRndPad SetFlash -1000 2650 Flash -0 0 55 /PRndPad SetFlash --450 2100 Flash -0 0 55 /PRndPad SetFlash --450 2100 Flash -0 0 55 /PRndPad SetFlash --650 2600 Flash --100 2600 Flash --100 2250 Flash -0 0 55 /PRndPad SetFlash --650 2600 Flash --100 2600 Flash --100 2250 Flash -0 0 55 /PRndPad SetFlash -800 1800 Flash -0 0 55 /PRndPad SetFlash -800 1800 Flash -0 0 55 /PRndPad SetFlash -700 1900 Flash -0 0 55 /PRndPad SetFlash -700 1900 Flash -0 0 55 /PRndPad SetFlash -600 1700 Flash -0 0 55 /PRndPad SetFlash -600 1700 Flash -0 0 55 /PRndPad SetFlash -500 1600 Flash -0 0 55 /PRndPad SetFlash -500 1600 Flash -0 0 55 /PRndPad SetFlash -0 4100 Flash -900 4100 Flash -0 0 55 /PRndPad SetFlash -0 4100 Flash -900 4100 Flash -0 0 55 /PRndPad SetFlash -800 3000 Flash -0 0 55 /PRndPad SetFlash -800 3000 Flash -0 0 55 /PRndPad SetFlash -600 3700 Flash -0 0 55 /PRndPad SetFlash -600 3700 Flash -0 0 55 /PRndPad SetFlash -450 2700 Flash --400 2700 Flash --400 2300 Flash -0 0 55 /PRndPad SetFlash -450 2700 Flash --400 2700 Flash --400 2300 Flash -0 0 55 /PRndPad SetFlash -350 3800 Flash -0 0 55 /PRndPad SetFlash -350 3800 Flash -0 0 55 /PRndPad SetFlash --850 3700 Flash -0 0 55 /PRndPad SetFlash --850 3700 Flash -0 0 55 /PRndPad SetFlash -400 1300 Flash -0 0 55 /PRndPad SetFlash -400 1300 Flash -0 0 55 /PRndPad SetFlash --1050 1050 Flash -0 0 55 /PRndPad SetFlash --1050 1050 Flash -0 0 55 /PRndPad SetFlash -0 4475 Flash -75 4000 Flash -1000 4000 Flash -0 0 55 /PRndPad SetFlash -0 4475 Flash -75 4000 Flash -1000 4000 Flash -0 0 55 /PRndPad SetFlash -950 3200 Flash -0 0 55 /PRndPad SetFlash -950 3200 Flash -0 0 55 /PRndPad SetFlash -850 1200 Flash --600 1200 Flash -0 0 55 /PRndPad SetFlash -850 1200 Flash --600 1200 Flash -0 0 55 /PRndPad SetFlash --550 3900 Flash --350 3900 Flash -0 0 55 /PRndPad SetFlash --550 3900 Flash --350 3900 Flash -0 0 55 /PRndPad SetFlash --800 4300 Flash -0 0 55 /PRndPad SetFlash --800 4300 Flash -0 0 55 /PRndPad SetFlash --750 4350 Flash -0 0 55 /PRndPad SetFlash --750 4350 Flash -0 0 55 /PRndPad SetFlash -400 3400 Flash -0 0 55 /PRndPad SetFlash -400 3400 Flash -grestore -showpage diff --git a/usr.sbin/xntpd/gadget/sm0228.lpr b/usr.sbin/xntpd/gadget/sm0228.lpr deleted file mode 100644 index cd39c9c..0000000 --- a/usr.sbin/xntpd/gadget/sm0228.lpr +++ /dev/null @@ -1,744 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: PADS Postscript Driver Header -%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851 -%%CreationDate: 06/08/90 -%%For: CAD Software, Littleton, MA -%%EndComments -%%BeginProcSet: Markers 1.0 0 -% marker attributes -/MAttr_Width 1 def -/MAttr_Size 0 def -/MAttr_Type /M1 def -% procedures -/M1 { %def -% draw marker 1: plus -% Stack: - M1 - - -2 0 rmoveto - 4 0 rlineto - -2 2 rmoveto - 0 -4 rlineto -} bind def -/M2 { %def -% draw marker 2: cross -% Stack: - M2 - - -2 -2 rmoveto - 4 4 rlineto - -4 0 rmoveto - 4 -4 rlineto -} bind def -/M3 { %def -% draw marker 3: square -% Stack: - M3 - - 0 2 rlineto - 2 0 rlineto - 0 -4 rlineto - -4 0 rlineto - 0 4 rlineto - 2 0 rlineto -} bind def -/M4 { %def -% draw marker 4: diamond -% Stack: - M4 - - 0 2 rlineto - 2 -2 rlineto - -2 -2 rlineto - -2 2 rlineto - 2 2 rlineto -} bind def -/M5 { %def -% draw marker 5: hourglass -% Stack: - M5 - - 2 2 rlineto - -4 0 rlineto - 4 -4 rlineto - -4 0 rlineto - 2 2 rlineto -} bind def -/M6 { %def -% draw marker 6: bowtie -% Stack: - M6 - - 2 2 rlineto - 0 -4 rlineto - -4 4 rlineto - 0 -4 rlineto - 2 2 rlineto -} bind def -/M7 { %def -% draw marker 7: small plus (goes with char marker) -% Stack: - M7 - - -1 0 rmoveto - 2 0 rlineto - -1 1 rmoveto - 0 -2 rlineto -} bind def -/Marker { %def -% Command from driver: draw marker -% STACK: x y Marker - - MAttr_Size 0 gt - { - gsave - moveto - MAttr_Size 4 div dup scale - MAttr_Type load exec - 4 MAttr_Size div dup scale - MAttr_Width setlinewidth - stroke - grestore - } if -} def -%%EndProcSet: Markers 1.0 0 -%%BeginProcSet: Lib 1.0 0 -/sg { %def -% Command from driver: set the gray scale 0 - 100 -% STACK: greylevel sg - 100 div dup setgray /glev exch def -} bind def -/Circle { %def -% draw a circle -% STACK: x y radius Circle - - 0 360 arc -} bind def -/RndAper { %def -% select a round aperture -% STACK: - RndAper - - 1 setlinejoin - 1 setlinecap -} bind def -/SqrAper { %def -% select a square aperture -% STACK: - SqrAper - - 0 setlinejoin - 2 setlinecap -} bind def -/Line { %def -% draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] Line - - 3 1 roll - moveto - true - exch - % This pushes the x then the y then does lineto - { exch { false } { lineto true } ifelse } forall - pop -} bind def -/Clipto { %def -% set clipping rectangle from 0,0 to new values -% STACK: x y Clipto - - 0 0 moveto - dup 0 exch lineto - 2 copy lineto - pop - 0 lineto - closepath - clip - newpath -} bind def -/Clip4 { %def -% set clipping rectangle from xmin,ymin to xmax,ymax -% STACK: xmin ymin xmax ymax Clip4 - - 4 copy pop pop moveto - 4 copy pop exch lineto pop - 2 copy lineto - exch pop exch pop lineto - closepath - clip - newpath -} bind def -%%EndProcSet: Lib 1.0 0 -%%BeginProcSet: Lines 1.0 0 -% line attributes % -/LAttr_Width 1 def -% line procedures -/PLine { %def -% Cammand from driver: draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - LAttr_Width setlinewidth - stroke -} bind def % PLine -/Char { %def -% Command from driver: draw a character at the current position -% STACK: type x y stroke_array Char - -% stroke array -- [ stroke1 stroke2 ... stroken ] -% stroke -- connected staight lines -% type = 0 if text 1 if marker - gsave - 4 1 roll - translate - 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth - { - dup length 2 gt - { - dup dup 0 get exch 1 get % get starting point - 3 -1 roll % put x y before array - dup length 2 sub 2 exch getinterval % delete first items from array - Line - stroke - } - { - aload pop currentlinewidth 2 div Circle fill - } ifelse - } forall - grestore -} bind def % Char -/PArc { %def -% Command from driver: draw an arc -% STACK: x y radius startangle deltaangle Arc - - 10 div exch 10 div exch - 2 copy pop add - arc - LAttr_Width setlinewidth - stroke -} bind def -/PCircle { %def -% Command from driver: draw an circle -% STACK: x y radius PCircle - - Circle - LAttr_Width setlinewidth - stroke -} bind def -%%EndProcSet: Lines 1.0 0 -%%BeginProcSet: Polygon 1.0 0 -% polygon attributes % -/PAttr_ExtWidth 1 def -/PAttr_IntWidth 1 def -/PAttr_Grid 1 def -% polygon procedures -/LoopSet { %def -% set up for loop condition -% STACK: start end LoopSet low gridwidth high - 2 copy lt { exch } if - % make grid line up to absolute coordinates - PAttr_Grid div truncate PAttr_Grid mul exch - PAttr_Grid exch -} bind def -/Hatch { %def -% draw cross hatch pattern in current path -% STACK: - Hatch - - pathbbox - /ury exch def - /urx exch def - /lly exch def - /llx exch def - clip - newpath - llx urx LoopSet - { % x loop - dup lly exch ury moveto lineto - } for - lly ury LoopSet - { % y loop - llx exch dup urx exch moveto lineto - } for - PAttr_IntWidth setlinewidth - stroke -} bind def -/PPoly { %def -% Command from driver: draw a plygon -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - closepath - gsave - PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse - grestore - PAttr_ExtWidth setlinewidth - stroke -} bind def -%%EndProcSet: Polygon 1.0 0 -%%BeginProcSet: Text 1.0 0 -% text attributes % -/TAttr_Mirr 0 def -/TAttr_Orient 0 def -/TAttr_Width 1 def -% text procedures -/Text { %def -% Command from driver: Draw text -% STACK: x y width string Text - - gsave - 4 2 roll - translate - TAttr_Mirr 0 gt - { - -1 1 scale - } if - TAttr_Orient rotate - 0 0 moveto - dup length dup 1 gt - { - exch dup stringwidth pop - 4 -1 roll - exch 2 copy - lt - { - div 1 scale show - } - { - sub - 3 -1 roll 1 sub div - 0 3 -1 roll ashow - } - ifelse - } - { - pop - show - } ifelse - grestore -} bind def -%%EndProcSet: Text 1.0 0 -%%BeginProcSet: FlashSymbols 1.0 0 -% flash symbol attributes % -/FAttr_Type /PRndPad def -/FAttr_Width 0 def -/FAttr_Length 1 def -/FAttr_Orient 0 def -% flash symbol procedures -/PRndPad { %def -% Command from driver: draw an circular pad -% STACK: - PCirclePad - - FAttr_Width dup scale - 0 0 .5 Circle - fill -} bind def -/PSqrPad { %def -% Draw an Square pad -% STACK: - PRectPad - - FAttr_Width dup scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/PRectPad { %def -% Draw an rectangular pad -% STACK: - PRectPad - - FAttr_Length FAttr_Width scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/POvalPad { %def -% Draw an oval pad -% STACK: - POvalPad - - FAttr_Width setlinewidth - FAttr_Length FAttr_Width sub 2 div dup - neg 0 moveto - 0 lineto - RndAper - stroke -} bind def -/Anl { %def - 0 0 .5 Circle - fill - FAttr_Length FAttr_Width lt - { % inner circle - 0 0 - FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse - 2 div Circle - 1 setgray - fill - glev setgray - } if -} bind def -/PAnlPad { %def -% Draw an annular pad -% STACK: - PAnlPad - - FAttr_Width dup scale - Anl -} bind def -/PRelPad { %def -% Draw an thermal relief pad -% STACK: - PRelPad - - PAnlPad - 1 setgray - .17 setlinewidth - 0 setlinecap % the x - 45 rotate - .5 0 moveto -.5 0 lineto - 0 .5 moveto 0 -.5 lineto - stroke - glev setgray -} bind def -/Flash { %def -% Command from driver: Flash a symbol -% STACK: x y Flash - - FAttr_Width 0 gt - { - gsave - translate - FAttr_Orient rotate - FAttr_Type load exec - grestore - } if -} def -%%EndProcSet: FlashSymbols 1.0 0 -%%BeginProcSet: SetAttr 1.0 0 -/SetLine { %def -% Set the width of the lines -% STACK: linewidth SetLine - - /LAttr_Width exch def - RndAper -} bind def -/SetPoly { %def -% Set attribute of polygon -% STACK: external_width internal_grid_width grid_spacing SetPoly - - /PAttr_Grid exch def - /PAttr_IntWidth exch def - /PAttr_ExtWidth exch def - RndAper -} bind def -/SetFlash { %def -% Set Attributed of flash pad -% STACK: orientation_angle length width aperture_type SetFlash - - /FAttr_Type exch def - FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or - { SqrAper } { RndAper } ifelse - /FAttr_Width exch def - /FAttr_Length exch def - /FAttr_Orient exch 10 div def -} bind def -/SetMkr { %def -% Set attributes of markers -% STACK: linewidth size type SetMkr - - /MAttr_Type exch def - /MAttr_Size exch def - /MAttr_Width exch def - RndAper -} bind def -/SetText1 { %def -% Set attributes of text -% STACK: fontname height orient mirror SetMkr - - /TAttr_Mirr exch def - /TAttr_Orient exch 10 div def - exch findfont exch scalefont setfont - RndAper -} bind def -/SetText2 { %def -% Set attributes of text -% STACK: linewidth height mirror orient SetMkr - - /TAttr_Width exch def - RndAper -} bind def -%%EndProcSet: SetAttr 1.0 0 -%%BeginProcSet: Initialize 1.0 0 -/Init { %def -% Initialize the driver -% STACK: Init - - 72 1000 div dup scale % Scale to 1/1000 inch - 250 250 translate % make origin 1/4 inch from bottom left - 1.5 setmiterlimit 1 RndAper % set line defaults - 0 setgray % set color default - /glev 0 def -} def -%%EndProcSet: Initialize 1.0 0 -%%EndProlog -/Helvetica findfont 12 scalefont setfont -35 760 moveto -(gadget.job - Fri Aug 21 03:35:33 1992) show -gsave -Init -8000 10500 Clipto -4000 2800 translate -0 rotate -1 1 div dup scale -75 sg -50 sg -25 sg -0 sg -10 SetLine --1350 4700 [ -1350 4900 ] PLine --1350 4900 [ -1150 4900 ] PLine -10 SetLine -1150 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 4700 ] PLine -10 SetLine -1150 0 [ 1350 0 ] PLine -1350 0 [ 1350 200 ] PLine -10 SetLine --1350 200 [ -1350 0 ] PLine --1350 0 [ -1150 0 ] PLine -0 0 70 /PRndPad SetFlash --1100 1450 Flash --1100 1150 Flash -300 3300 Flash --100 3300 Flash --100 3100 Flash -300 3100 Flash -300 3500 Flash --100 3500 Flash --400 3700 Flash --1200 3700 Flash --100 1300 Flash --900 1300 Flash --200 2800 Flash -600 2800 Flash --1200 2800 Flash --400 2800 Flash -0 2500 Flash -0 2100 Flash --1200 3400 Flash --1200 3000 Flash --900 2300 Flash --1200 2300 Flash --1200 2500 Flash --900 2500 Flash -800 2800 Flash -1100 2800 Flash -1250 1900 Flash -450 1900 Flash --100 900 Flash --1200 900 Flash --700 4000 Flash --1100 4000 Flash -1100 3000 Flash -700 3000 Flash --300 3700 Flash -0 3700 Flash -0 0 70 /PSqrPad SetFlash -100 900 Flash -0 0 70 /PRndPad SetFlash -600 900 Flash -0 0 70 /PSqrPad SetFlash -700 3700 Flash -0 0 70 /PRndPad SetFlash -200 3700 Flash -0 0 80 /PRndPad SetFlash --750 550 Flash --750 450 Flash -0 550 Flash -0 450 Flash -750 550 Flash -750 450 Flash --648 4479 Flash --540 4479 Flash --432 4479 Flash --324 4479 Flash --216 4479 Flash --108 4479 Flash -0 4479 Flash -108 4479 Flash -216 4479 Flash -324 4479 Flash -432 4479 Flash -540 4479 Flash -648 4479 Flash --594 4593 Flash --486 4593 Flash --378 4593 Flash --270 4593 Flash --162 4593 Flash --54 4593 Flash -54 4593 Flash -162 4593 Flash -270 4593 Flash -378 4593 Flash -486 4593 Flash -594 4593 Flash -0 0 187 /PRndPad SetFlash -940 4536 Flash --940 4536 Flash -0 0 70 /PSqrPad SetFlash -950 150 Flash -0 0 70 /PRndPad SetFlash -1050 150 Flash -0 0 70 /PSqrPad SetFlash --50 150 Flash -0 0 70 /PRndPad SetFlash -50 150 Flash -0 0 70 /PSqrPad SetFlash --1050 150 Flash -0 0 70 /PRndPad SetFlash --950 150 Flash -0 0 60 /PRndPad SetFlash -950 3524 Flash -1026 3612 Flash -950 3700 Flash -0 0 70 /PSqrPad SetFlash --1200 1600 Flash -0 0 70 /PRndPad SetFlash --1100 1700 Flash --1200 1800 Flash -300 1700 Flash --100 1700 Flash -200 1300 Flash -600 1300 Flash --700 2300 Flash --300 2300 Flash --700 4200 Flash --1100 4200 Flash -1100 3200 Flash -700 3200 Flash --700 2500 Flash --300 2500 Flash --700 2100 Flash --300 2100 Flash --800 2100 Flash --1200 2100 Flash -600 1100 Flash -200 1100 Flash -0 0 70 /PSqrPad SetFlash -1200 2450 Flash -0 0 70 /PRndPad SetFlash -1100 2350 Flash -1200 2250 Flash --100 1900 Flash -300 1900 Flash -0 1500 Flash -400 1500 Flash -0 0 70 /PSqrPad SetFlash --900 1600 Flash -0 0 70 /PRndPad SetFlash --800 1600 Flash --700 1600 Flash --600 1600 Flash --500 1600 Flash --400 1600 Flash --300 1600 Flash --300 1900 Flash --400 1900 Flash --500 1900 Flash --600 1900 Flash --700 1900 Flash --800 1900 Flash --900 1900 Flash -0 0 70 /PSqrPad SetFlash -200 2200 Flash -0 0 70 /PRndPad SetFlash -300 2200 Flash -400 2200 Flash -500 2200 Flash -600 2200 Flash -700 2200 Flash -800 2200 Flash -900 2200 Flash -900 2500 Flash -800 2500 Flash -700 2500 Flash -600 2500 Flash -500 2500 Flash -400 2500 Flash -300 2500 Flash -200 2500 Flash -0 0 70 /PSqrPad SetFlash -200 3900 Flash -0 0 70 /PRndPad SetFlash -300 3900 Flash -400 3900 Flash -500 3900 Flash -600 3900 Flash -700 3900 Flash -800 3900 Flash -900 3900 Flash -1000 3900 Flash -1100 3900 Flash -1100 4200 Flash -1000 4200 Flash -900 4200 Flash -800 4200 Flash -700 4200 Flash -600 4200 Flash -500 4200 Flash -400 4200 Flash -300 4200 Flash -200 4200 Flash -0 0 70 /PSqrPad SetFlash --1000 3100 Flash -0 0 70 /PRndPad SetFlash --900 3100 Flash --800 3100 Flash --700 3100 Flash --600 3100 Flash --500 3100 Flash --400 3100 Flash --300 3100 Flash --300 3400 Flash --400 3400 Flash --500 3400 Flash --600 3400 Flash --700 3400 Flash --800 3400 Flash --900 3400 Flash --1000 3400 Flash -0 0 80 /PRndPad SetFlash -900 800 Flash -1100 800 Flash -1000 800 Flash -0 0 187 /PRndPad SetFlash -1000 1550 Flash -0 0 70 /PRndPad SetFlash -0 4000 Flash -0 4200 Flash -0 0 260 /PRndPad SetFlash --1100 450 Flash -1100 450 Flash -0 0 70 /PRndPad SetFlash -1100 3400 Flash -700 3400 Flash -0 0 65 /PRndPad SetFlash --200 2350 Flash --200 1750 Flash -200 1400 Flash -0 0 65 /PRndPad SetFlash -300 1100 Flash -0 0 65 /PRndPad SetFlash -175 3300 Flash -0 0 65 /PRndPad SetFlash -1000 2650 Flash -0 0 65 /PRndPad SetFlash --450 2100 Flash -0 0 65 /PRndPad SetFlash --650 2600 Flash --100 2600 Flash --100 2250 Flash -0 0 65 /PRndPad SetFlash -800 1800 Flash -0 0 65 /PRndPad SetFlash -700 1900 Flash -0 0 65 /PRndPad SetFlash -600 1700 Flash -0 0 65 /PRndPad SetFlash -500 1600 Flash -0 0 65 /PRndPad SetFlash -0 4100 Flash -900 4100 Flash -0 0 65 /PRndPad SetFlash -800 3000 Flash -0 0 65 /PRndPad SetFlash -600 3700 Flash -0 0 65 /PRndPad SetFlash -450 2700 Flash --400 2700 Flash --400 2300 Flash -0 0 65 /PRndPad SetFlash -350 3800 Flash -0 0 65 /PRndPad SetFlash --850 3700 Flash -0 0 65 /PRndPad SetFlash -400 1300 Flash -0 0 65 /PRndPad SetFlash --1050 1050 Flash -0 0 65 /PRndPad SetFlash -0 4475 Flash -75 4000 Flash -1000 4000 Flash -0 0 65 /PRndPad SetFlash -950 3200 Flash -0 0 65 /PRndPad SetFlash -850 1200 Flash --600 1200 Flash -0 0 65 /PRndPad SetFlash --550 3900 Flash --350 3900 Flash -0 0 65 /PRndPad SetFlash --800 4300 Flash -0 0 65 /PRndPad SetFlash --750 4350 Flash -0 0 65 /PRndPad SetFlash -400 3400 Flash -grestore -showpage diff --git a/usr.sbin/xntpd/gadget/sst0126.lpr b/usr.sbin/xntpd/gadget/sst0126.lpr deleted file mode 100644 index c3f1986..0000000 --- a/usr.sbin/xntpd/gadget/sst0126.lpr +++ /dev/null @@ -1,1118 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: PADS Postscript Driver Header -%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851 -%%CreationDate: 06/08/90 -%%For: CAD Software, Littleton, MA -%%EndComments -%%BeginProcSet: Markers 1.0 0 -% marker attributes -/MAttr_Width 1 def -/MAttr_Size 0 def -/MAttr_Type /M1 def -% procedures -/M1 { %def -% draw marker 1: plus -% Stack: - M1 - - -2 0 rmoveto - 4 0 rlineto - -2 2 rmoveto - 0 -4 rlineto -} bind def -/M2 { %def -% draw marker 2: cross -% Stack: - M2 - - -2 -2 rmoveto - 4 4 rlineto - -4 0 rmoveto - 4 -4 rlineto -} bind def -/M3 { %def -% draw marker 3: square -% Stack: - M3 - - 0 2 rlineto - 2 0 rlineto - 0 -4 rlineto - -4 0 rlineto - 0 4 rlineto - 2 0 rlineto -} bind def -/M4 { %def -% draw marker 4: diamond -% Stack: - M4 - - 0 2 rlineto - 2 -2 rlineto - -2 -2 rlineto - -2 2 rlineto - 2 2 rlineto -} bind def -/M5 { %def -% draw marker 5: hourglass -% Stack: - M5 - - 2 2 rlineto - -4 0 rlineto - 4 -4 rlineto - -4 0 rlineto - 2 2 rlineto -} bind def -/M6 { %def -% draw marker 6: bowtie -% Stack: - M6 - - 2 2 rlineto - 0 -4 rlineto - -4 4 rlineto - 0 -4 rlineto - 2 2 rlineto -} bind def -/M7 { %def -% draw marker 7: small plus (goes with char marker) -% Stack: - M7 - - -1 0 rmoveto - 2 0 rlineto - -1 1 rmoveto - 0 -2 rlineto -} bind def -/Marker { %def -% Command from driver: draw marker -% STACK: x y Marker - - MAttr_Size 0 gt - { - gsave - moveto - MAttr_Size 4 div dup scale - MAttr_Type load exec - 4 MAttr_Size div dup scale - MAttr_Width setlinewidth - stroke - grestore - } if -} def -%%EndProcSet: Markers 1.0 0 -%%BeginProcSet: Lib 1.0 0 -/sg { %def -% Command from driver: set the gray scale 0 - 100 -% STACK: greylevel sg - 100 div dup setgray /glev exch def -} bind def -/Circle { %def -% draw a circle -% STACK: x y radius Circle - - 0 360 arc -} bind def -/RndAper { %def -% select a round aperture -% STACK: - RndAper - - 1 setlinejoin - 1 setlinecap -} bind def -/SqrAper { %def -% select a square aperture -% STACK: - SqrAper - - 0 setlinejoin - 2 setlinecap -} bind def -/Line { %def -% draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] Line - - 3 1 roll - moveto - true - exch - % This pushes the x then the y then does lineto - { exch { false } { lineto true } ifelse } forall - pop -} bind def -/Clipto { %def -% set clipping rectangle from 0,0 to new values -% STACK: x y Clipto - - 0 0 moveto - dup 0 exch lineto - 2 copy lineto - pop - 0 lineto - closepath - clip - newpath -} bind def -/Clip4 { %def -% set clipping rectangle from xmin,ymin to xmax,ymax -% STACK: xmin ymin xmax ymax Clip4 - - 4 copy pop pop moveto - 4 copy pop exch lineto pop - 2 copy lineto - exch pop exch pop lineto - closepath - clip - newpath -} bind def -%%EndProcSet: Lib 1.0 0 -%%BeginProcSet: Lines 1.0 0 -% line attributes % -/LAttr_Width 1 def -% line procedures -/PLine { %def -% Cammand from driver: draw a set of connected lines -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - LAttr_Width setlinewidth - stroke -} bind def % PLine -/Char { %def -% Command from driver: draw a character at the current position -% STACK: type x y stroke_array Char - -% stroke array -- [ stroke1 stroke2 ... stroken ] -% stroke -- connected staight lines -% type = 0 if text 1 if marker - gsave - 4 1 roll - translate - 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth - { - dup length 2 gt - { - dup dup 0 get exch 1 get % get starting point - 3 -1 roll % put x y before array - dup length 2 sub 2 exch getinterval % delete first items from array - Line - stroke - } - { - aload pop currentlinewidth 2 div Circle fill - } ifelse - } forall - grestore -} bind def % Char -/PArc { %def -% Command from driver: draw an arc -% STACK: x y radius startangle deltaangle Arc - - 10 div exch 10 div exch - 2 copy pop add - arc - LAttr_Width setlinewidth - stroke -} bind def -/PCircle { %def -% Command from driver: draw an circle -% STACK: x y radius PCircle - - Circle - LAttr_Width setlinewidth - stroke -} bind def -%%EndProcSet: Lines 1.0 0 -%%BeginProcSet: Polygon 1.0 0 -% polygon attributes % -/PAttr_ExtWidth 1 def -/PAttr_IntWidth 1 def -/PAttr_Grid 1 def -% polygon procedures -/LoopSet { %def -% set up for loop condition -% STACK: start end LoopSet low gridwidth high - 2 copy lt { exch } if - % make grid line up to absolute coordinates - PAttr_Grid div truncate PAttr_Grid mul exch - PAttr_Grid exch -} bind def -/Hatch { %def -% draw cross hatch pattern in current path -% STACK: - Hatch - - pathbbox - /ury exch def - /urx exch def - /lly exch def - /llx exch def - clip - newpath - llx urx LoopSet - { % x loop - dup lly exch ury moveto lineto - } for - lly ury LoopSet - { % y loop - llx exch dup urx exch moveto lineto - } for - PAttr_IntWidth setlinewidth - stroke -} bind def -/PPoly { %def -% Command from driver: draw a plygon -% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine - - Line - closepath - gsave - PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse - grestore - PAttr_ExtWidth setlinewidth - stroke -} bind def -%%EndProcSet: Polygon 1.0 0 -%%BeginProcSet: Text 1.0 0 -% text attributes % -/TAttr_Mirr 0 def -/TAttr_Orient 0 def -/TAttr_Width 1 def -% text procedures -/Text { %def -% Command from driver: Draw text -% STACK: x y width string Text - - gsave - 4 2 roll - translate - TAttr_Mirr 0 gt - { - -1 1 scale - } if - TAttr_Orient rotate - 0 0 moveto - dup length dup 1 gt - { - exch dup stringwidth pop - 4 -1 roll - exch 2 copy - lt - { - div 1 scale show - } - { - sub - 3 -1 roll 1 sub div - 0 3 -1 roll ashow - } - ifelse - } - { - pop - show - } ifelse - grestore -} bind def -%%EndProcSet: Text 1.0 0 -%%BeginProcSet: FlashSymbols 1.0 0 -% flash symbol attributes % -/FAttr_Type /PRndPad def -/FAttr_Width 0 def -/FAttr_Length 1 def -/FAttr_Orient 0 def -% flash symbol procedures -/PRndPad { %def -% Command from driver: draw an circular pad -% STACK: - PCirclePad - - FAttr_Width dup scale - 0 0 .5 Circle - fill -} bind def -/PSqrPad { %def -% Draw an Square pad -% STACK: - PRectPad - - FAttr_Width dup scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/PRectPad { %def -% Draw an rectangular pad -% STACK: - PRectPad - - FAttr_Length FAttr_Width scale - .5 .5 moveto - -.5 .5 lineto - -.5 -.5 lineto - .5 -.5 lineto - closepath - fill -} bind def -/POvalPad { %def -% Draw an oval pad -% STACK: - POvalPad - - FAttr_Width setlinewidth - FAttr_Length FAttr_Width sub 2 div dup - neg 0 moveto - 0 lineto - RndAper - stroke -} bind def -/Anl { %def - 0 0 .5 Circle - fill - FAttr_Length FAttr_Width lt - { % inner circle - 0 0 - FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse - 2 div Circle - 1 setgray - fill - glev setgray - } if -} bind def -/PAnlPad { %def -% Draw an annular pad -% STACK: - PAnlPad - - FAttr_Width dup scale - Anl -} bind def -/PRelPad { %def -% Draw an thermal relief pad -% STACK: - PRelPad - - PAnlPad - 1 setgray - .17 setlinewidth - 0 setlinecap % the x - 45 rotate - .5 0 moveto -.5 0 lineto - 0 .5 moveto 0 -.5 lineto - stroke - glev setgray -} bind def -/Flash { %def -% Command from driver: Flash a symbol -% STACK: x y Flash - - FAttr_Width 0 gt - { - gsave - translate - FAttr_Orient rotate - FAttr_Type load exec - grestore - } if -} def -%%EndProcSet: FlashSymbols 1.0 0 -%%BeginProcSet: SetAttr 1.0 0 -/SetLine { %def -% Set the width of the lines -% STACK: linewidth SetLine - - /LAttr_Width exch def - RndAper -} bind def -/SetPoly { %def -% Set attribute of polygon -% STACK: external_width internal_grid_width grid_spacing SetPoly - - /PAttr_Grid exch def - /PAttr_IntWidth exch def - /PAttr_ExtWidth exch def - RndAper -} bind def -/SetFlash { %def -% Set Attributed of flash pad -% STACK: orientation_angle length width aperture_type SetFlash - - /FAttr_Type exch def - FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or - { SqrAper } { RndAper } ifelse - /FAttr_Width exch def - /FAttr_Length exch def - /FAttr_Orient exch 10 div def -} bind def -/SetMkr { %def -% Set attributes of markers -% STACK: linewidth size type SetMkr - - /MAttr_Type exch def - /MAttr_Size exch def - /MAttr_Width exch def - RndAper -} bind def -/SetText1 { %def -% Set attributes of text -% STACK: fontname height orient mirror SetMkr - - /TAttr_Mirr exch def - /TAttr_Orient exch 10 div def - exch findfont exch scalefont setfont - RndAper -} bind def -/SetText2 { %def -% Set attributes of text -% STACK: linewidth height mirror orient SetMkr - - /TAttr_Width exch def - RndAper -} bind def -%%EndProcSet: SetAttr 1.0 0 -%%BeginProcSet: Initialize 1.0 0 -/Init { %def -% Initialize the driver -% STACK: Init - - 72 1000 div dup scale % Scale to 1/1000 inch - 250 250 translate % make origin 1/4 inch from bottom left - 1.5 setmiterlimit 1 RndAper % set line defaults - 0 setgray % set color default - /glev 0 def -} def -%%EndProcSet: Initialize 1.0 0 -%%EndProlog -/Helvetica findfont 12 scalefont setfont -35 760 moveto -(gadget.job - Fri Aug 21 03:35:07 1992) show -gsave -Init -8000 10500 Clipto -4015 2626 translate -0 rotate -1 1 div dup scale -75 sg -50 sg -25 sg -0 sg -10 SetLine --1350 4700 [ -1350 4900 ] PLine --1350 4900 [ -1150 4900 ] PLine -10 SetLine -1150 4900 [ 1350 4900 ] PLine -1350 4900 [ 1350 4700 ] PLine -10 SetLine -1150 0 [ 1350 0 ] PLine -1350 0 [ 1350 200 ] PLine -10 SetLine --1350 200 [ -1350 0 ] PLine --1350 0 [ -1150 0 ] PLine -10 SetLine --1050 1400 [ -1050 1200 ] PLine --1050 1200 [ -1150 1200 ] PLine --1150 1200 [ -1150 1400 ] PLine --1150 1400 [ -1050 1400 ] PLine -10 SetLine --50 3300 [ -100 3300 ] PLine -10 SetLine -250 3235 [ -50 3235 ] PLine --50 3235 [ -50 3365 ] PLine --50 3365 [ 250 3365 ] PLine -250 3365 [ 250 3235 ] PLine -10 SetLine -300 3300 [ 250 3300 ] PLine -10 SetLine -250 3100 [ 300 3100 ] PLine -10 SetLine --50 3165 [ 250 3165 ] PLine -250 3165 [ 250 3035 ] PLine -250 3035 [ -50 3035 ] PLine --50 3035 [ -50 3165 ] PLine -10 SetLine --100 3100 [ -50 3100 ] PLine -10 SetLine --50 3500 [ -100 3500 ] PLine -10 SetLine -250 3435 [ -50 3435 ] PLine --50 3435 [ -50 3565 ] PLine --50 3565 [ 250 3565 ] PLine -250 3565 [ 250 3435 ] PLine -10 SetLine -300 3500 [ 250 3500 ] PLine -10 SetLine --1150 3700 [ -1200 3700 ] PLine -10 SetLine --450 3575 [ -1150 3575 ] PLine --1150 3575 [ -1150 3825 ] PLine --1150 3825 [ -450 3825 ] PLine --450 3825 [ -450 3575 ] PLine -10 SetLine --400 3700 [ -450 3700 ] PLine -10 SetLine --850 1300 [ -900 1300 ] PLine -10 SetLine --150 1175 [ -850 1175 ] PLine --850 1175 [ -850 1425 ] PLine --850 1425 [ -150 1425 ] PLine --150 1425 [ -150 1175 ] PLine -10 SetLine --100 1300 [ -150 1300 ] PLine -10 SetLine -550 2800 [ 600 2800 ] PLine -10 SetLine --150 2925 [ 550 2925 ] PLine -550 2925 [ 550 2675 ] PLine -550 2675 [ -150 2675 ] PLine --150 2675 [ -150 2925 ] PLine -10 SetLine --200 2800 [ -150 2800 ] PLine -10 SetLine --450 2800 [ -400 2800 ] PLine -10 SetLine --1150 2925 [ -450 2925 ] PLine --450 2925 [ -450 2675 ] PLine --450 2675 [ -1150 2675 ] PLine --1150 2675 [ -1150 2925 ] PLine -10 SetLine --1200 2800 [ -1150 2800 ] PLine -10 SetLine -0 2150 [ 0 2100 ] PLine -10 SetLine -65 2450 [ 65 2150 ] PLine -65 2150 [ -65 2150 ] PLine --65 2150 [ -65 2450 ] PLine --65 2450 [ 65 2450 ] PLine -10 SetLine -0 2500 [ 0 2450 ] PLine -10 SetLine --1200 3050 [ -1200 3000 ] PLine -10 SetLine --1135 3350 [ -1135 3050 ] PLine --1135 3050 [ -1265 3050 ] PLine --1265 3050 [ -1265 3350 ] PLine --1265 3350 [ -1135 3350 ] PLine -10 SetLine --1200 3400 [ -1200 3350 ] PLine -10 SetLine --950 2250 [ -1150 2250 ] PLine --1150 2250 [ -1150 2350 ] PLine --1150 2350 [ -950 2350 ] PLine --950 2350 [ -950 2250 ] PLine -10 SetLine --1150 2550 [ -950 2550 ] PLine --950 2550 [ -950 2450 ] PLine --950 2450 [ -1150 2450 ] PLine --1150 2450 [ -1150 2550 ] PLine -10 SetLine -850 2850 [ 1050 2850 ] PLine -1050 2850 [ 1050 2750 ] PLine -1050 2750 [ 850 2750 ] PLine -850 2750 [ 850 2850 ] PLine -10 SetLine -500 1900 [ 450 1900 ] PLine -10 SetLine -1200 1775 [ 500 1775 ] PLine -500 1775 [ 500 2025 ] PLine -500 2025 [ 1200 2025 ] PLine -1200 2025 [ 1200 1775 ] PLine -10 SetLine -1250 1900 [ 1200 1900 ] PLine -10 SetLine --1150 900 [ -1200 900 ] PLine -10 SetLine --150 725 [ -1150 725 ] PLine --1150 725 [ -1150 1075 ] PLine --1150 1075 [ -150 1075 ] PLine --150 1075 [ -150 725 ] PLine -10 SetLine --100 900 [ -150 900 ] PLine -10 SetLine --1050 4000 [ -1100 4000 ] PLine -10 SetLine --750 3935 [ -1050 3935 ] PLine --1050 3935 [ -1050 4065 ] PLine --1050 4065 [ -750 4065 ] PLine --750 4065 [ -750 3935 ] PLine -10 SetLine --700 4000 [ -750 4000 ] PLine -10 SetLine -750 3000 [ 700 3000 ] PLine -10 SetLine -1050 2935 [ 750 2935 ] PLine -750 2935 [ 750 3065 ] PLine -750 3065 [ 1050 3065 ] PLine -1050 3065 [ 1050 2935 ] PLine -10 SetLine -1100 3000 [ 1050 3000 ] PLine -10 SetLine --250 3750 [ -50 3750 ] PLine --50 3750 [ -50 3650 ] PLine --50 3650 [ -250 3650 ] PLine --250 3650 [ -250 3750 ] PLine -10 SetLine -200 900 [ 150 900 ] PLine -10 SetLine -270 950 [ 270 850 ] PLine -10 SetLine -200 850 [ 200 950 ] PLine -200 950 [ 500 950 ] PLine -500 950 [ 500 850 ] PLine -500 850 [ 200 850 ] PLine -10 SetLine -500 900 [ 550 900 ] PLine -10 SetLine -250 850 [ 250 950 ] PLine -10 SetLine -260 850 [ 260 950 ] PLine -10 SetLine -600 3700 [ 650 3700 ] PLine -10 SetLine -530 3650 [ 530 3750 ] PLine -10 SetLine -600 3750 [ 600 3650 ] PLine -600 3650 [ 300 3650 ] PLine -300 3650 [ 300 3750 ] PLine -300 3750 [ 600 3750 ] PLine -10 SetLine -300 3700 [ 250 3700 ] PLine -10 SetLine -550 3750 [ 550 3650 ] PLine -10 SetLine -540 3750 [ 540 3650 ] PLine -10 SetLine --750 550 100 PCircle -10 SetLine -0 550 100 PCircle -10 SetLine -750 550 100 PCircle -10 SetLine -768 5000 [ 768 5248 ] PLine -768 5248 [ -768 5248 ] PLine --768 5248 [ -768 5000 ] PLine -10 SetLine -1058 4900 [ -1058 4900 ] PLine -10 SetLine -1058 5000 [ 1058 4408 ] PLine -1058 4408 [ -1058 4408 ] PLine --1058 4408 [ -1058 5000 ] PLine --1058 5000 [ 1058 5000 ] PLine -10 SetLine -1058 5000 [ -1058 5000 ] PLine -10 SetLine -768 4900 [ 768 4408 ] PLine -10 SetLine --768 4900 [ -768 4408 ] PLine -10 SetLine -900 200 [ 1100 200 ] PLine -1100 200 [ 1100 100 ] PLine -1100 100 [ 900 100 ] PLine -900 100 [ 900 200 ] PLine -10 SetLine --100 200 [ 100 200 ] PLine -100 200 [ 100 100 ] PLine -100 100 [ -100 100 ] PLine --100 100 [ -100 200 ] PLine -10 SetLine --1100 200 [ -900 200 ] PLine --900 200 [ -900 100 ] PLine --900 100 [ -1100 100 ] PLine --1100 100 [ -1100 200 ] PLine -10 SetLine -916 3493 [ 900 3456 ] PLine -900 3456 [ 939 3442 ] PLine -939 3442 [ 953 3477 ] PLine -10 SetLine -988 3612 140 PCircle -10 SetLine --1000 1529 [ -1039 1490 ] PLine -10 SetLine --1000 1490 [ -1000 1910 ] PLine --1000 1910 [ -1300 1910 ] PLine --1300 1910 [ -1300 1490 ] PLine --1300 1490 [ -1000 1490 ] PLine -10 SetLine -200 1730 [ 200 1670 ] PLine -200 1670 [ 0 1670 ] PLine -0 1670 [ 0 1730 ] PLine -0 1730 [ 200 1730 ] PLine -10 SetLine -200 1700 [ 260 1700 ] PLine -10 SetLine -0 1700 [ -50 1700 ] PLine -10 SetLine -300 1270 [ 300 1330 ] PLine -300 1330 [ 500 1330 ] PLine -500 1330 [ 500 1270 ] PLine -500 1270 [ 300 1270 ] PLine -10 SetLine -300 1300 [ 240 1300 ] PLine -10 SetLine -500 1300 [ 550 1300 ] PLine -10 SetLine --600 2270 [ -600 2330 ] PLine --600 2330 [ -400 2330 ] PLine --400 2330 [ -400 2270 ] PLine --400 2270 [ -600 2270 ] PLine -10 SetLine --600 2300 [ -660 2300 ] PLine -10 SetLine --400 2300 [ -350 2300 ] PLine -10 SetLine --800 4230 [ -800 4170 ] PLine --800 4170 [ -1000 4170 ] PLine --1000 4170 [ -1000 4230 ] PLine --1000 4230 [ -800 4230 ] PLine -10 SetLine --800 4200 [ -740 4200 ] PLine -10 SetLine --1000 4200 [ -1050 4200 ] PLine -10 SetLine -1000 3230 [ 1000 3170 ] PLine -1000 3170 [ 800 3170 ] PLine -800 3170 [ 800 3230 ] PLine -800 3230 [ 1000 3230 ] PLine -10 SetLine -1000 3200 [ 1060 3200 ] PLine -10 SetLine -800 3200 [ 750 3200 ] PLine -10 SetLine --600 2470 [ -600 2530 ] PLine --600 2530 [ -400 2530 ] PLine --400 2530 [ -400 2470 ] PLine --400 2470 [ -600 2470 ] PLine -10 SetLine --600 2500 [ -660 2500 ] PLine -10 SetLine --400 2500 [ -350 2500 ] PLine -10 SetLine --600 2070 [ -600 2130 ] PLine --600 2130 [ -400 2130 ] PLine --400 2130 [ -400 2070 ] PLine --400 2070 [ -600 2070 ] PLine -10 SetLine --600 2100 [ -660 2100 ] PLine -10 SetLine --400 2100 [ -350 2100 ] PLine -10 SetLine --900 2130 [ -900 2070 ] PLine --900 2070 [ -1100 2070 ] PLine --1100 2070 [ -1100 2130 ] PLine --1100 2130 [ -900 2130 ] PLine -10 SetLine --900 2100 [ -840 2100 ] PLine -10 SetLine --1100 2100 [ -1150 2100 ] PLine -10 SetLine -500 1130 [ 500 1070 ] PLine -500 1070 [ 300 1070 ] PLine -300 1070 [ 300 1130 ] PLine -300 1130 [ 500 1130 ] PLine -10 SetLine -500 1100 [ 560 1100 ] PLine -10 SetLine -300 1100 [ 250 1100 ] PLine -10 SetLine -1000 2521 [ 1039 2560 ] PLine -10 SetLine -1000 2560 [ 1000 2140 ] PLine -1000 2140 [ 1300 2140 ] PLine -1300 2140 [ 1300 2560 ] PLine -1300 2560 [ 1000 2560 ] PLine -10 SetLine -0 1870 [ 0 1930 ] PLine -0 1930 [ 200 1930 ] PLine -200 1930 [ 200 1870 ] PLine -200 1870 [ 0 1870 ] PLine -10 SetLine -0 1900 [ -60 1900 ] PLine -10 SetLine -200 1900 [ 250 1900 ] PLine -10 SetLine -100 1470 [ 100 1530 ] PLine -100 1530 [ 300 1530 ] PLine -300 1530 [ 300 1470 ] PLine -300 1470 [ 100 1470 ] PLine -10 SetLine -100 1500 [ 40 1500 ] PLine -10 SetLine -300 1500 [ 350 1500 ] PLine -10 SetLine --950 1650 [ -250 1650 ] PLine --250 1650 [ -250 1850 ] PLine --250 1850 [ -950 1850 ] PLine --950 1850 [ -950 1775 ] PLine --950 1775 [ -900 1775 ] PLine --900 1775 [ -900 1725 ] PLine --900 1725 [ -950 1725 ] PLine --950 1725 [ -950 1650 ] PLine -10 SetLine -150 2250 [ 950 2250 ] PLine -950 2250 [ 950 2450 ] PLine -950 2450 [ 150 2450 ] PLine -150 2450 [ 150 2375 ] PLine -150 2375 [ 200 2375 ] PLine -200 2375 [ 200 2325 ] PLine -200 2325 [ 150 2325 ] PLine -150 2325 [ 150 2250 ] PLine -10 SetLine -150 3950 [ 1150 3950 ] PLine -1150 3950 [ 1150 4150 ] PLine -1150 4150 [ 150 4150 ] PLine -150 4150 [ 150 4075 ] PLine -150 4075 [ 200 4075 ] PLine -200 4075 [ 200 4025 ] PLine -200 4025 [ 150 4025 ] PLine -150 4025 [ 150 3950 ] PLine -10 SetLine --1050 3150 [ -250 3150 ] PLine --250 3150 [ -250 3350 ] PLine --250 3350 [ -1050 3350 ] PLine --1050 3350 [ -1050 3275 ] PLine --1050 3275 [ -1000 3275 ] PLine --1000 3275 [ -1000 3225 ] PLine --1000 3225 [ -1050 3225 ] PLine --1050 3225 [ -1050 3150 ] PLine -10 SetLine -800 1075 [ 800 1675 ] PLine -800 1675 [ 1200 1675 ] PLine -1200 1675 [ 1200 1075 ] PLine -1200 1075 [ 800 1075 ] PLine -10 SetLine -875 1075 [ 875 825 ] PLine -875 825 [ 925 825 ] PLine -925 825 [ 925 1075 ] PLine -10 SetLine -1075 1075 [ 1075 825 ] PLine -1075 825 [ 1125 825 ] PLine -1125 825 [ 1125 1075 ] PLine -10 SetLine -975 1075 [ 975 825 ] PLine -975 825 [ 1025 825 ] PLine -1025 825 [ 1025 1075 ] PLine -10 SetLine -996 1549 75 PCircle -10 SetLine -800 1425 [ 1200 1425 ] PLine -10 SetLine --100 4200 [ -25 4200 ] PLine -10 SetLine --100 3900 [ -100 4300 ] PLine --100 4300 [ -500 4300 ] PLine --500 4300 [ -500 3900 ] PLine --500 3900 [ -100 3900 ] PLine -10 SetLine --100 4000 [ -25 4000 ] PLine -10 SetLine --1100 450 100 PCircle -10 SetLine -1100 450 100 PCircle -10 SetLine -1000 3430 [ 1000 3370 ] PLine -1000 3370 [ 800 3370 ] PLine -800 3370 [ 800 3430 ] PLine -800 3430 [ 1000 3430 ] PLine -10 SetLine -1000 3400 [ 1060 3400 ] PLine -10 SetLine -800 3400 [ 750 3400 ] PLine -10 SetText2 -0 -1175 1225 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -1175 1279 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char -0 -1175 1310 [ [ -65 29 -65 6 -37 4 -40 6 -43 13 -43 20 -40 27 -34 31 -25 34 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char -10 SetText2 -0 75 3375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3375 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 75 3175 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3175 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -10 SetText2 -0 75 3575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 129 3575 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -825 3850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -771 3850 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -575 1450 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -521 1450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -490 1450 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 125 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 179 2950 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 210 2950 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -825 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -771 2950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char -10 SetText2 -0 -100 2250 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -100 2304 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char -0 -100 2335 [ [ -65 4 -65 29 -40 15 -40 22 -37 27 -34 29 -25 31 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char -10 SetText2 -0 -1275 3200 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char -0 -1275 3254 [ [ -50 2 -53 2 -59 4 -62 6 -65 11 -65 20 -62 25 -59 27 -53 29 -46 29 -40 27 -31 22 0 0 0 31 ] ] Char -10 SetText2 -0 -1100 2375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -1046 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -1015 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1100 2575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -1046 2575 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -1015 2575 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 900 2875 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 954 2875 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 985 2875 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 800 2050 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 854 2050 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 885 2050 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char -10 SetText2 -0 -675 1100 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -621 1100 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 -590 1100 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char -10 SetText2 -0 -925 4075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -871 4075 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 875 3075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 929 3075 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char -10 SetText2 -0 -200 3775 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char -0 -146 3775 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 325 975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 377 975 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 450 3775 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 502 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -775 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -732 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -50 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -7 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 700 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 743 675 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 -1175 4650 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char -0 -1132 4650 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1125 125 [ [ 0 65 0 0 27 0 ] ] Char -0 1172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 1222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 1274 125 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 125 125 [ [ 0 65 0 0 27 0 ] ] Char -0 172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 274 125 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -875 125 [ [ 0 65 0 0 27 0 ] ] Char -0 -828 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -778 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -726 125 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1075 3425 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] [ 20 12 34 -6 ] ] Char -0 1131 3425 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1075 1475 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char -0 -1127 1475 [ [ -11 -65 -4 -62 -2 -56 -2 -50 -4 -43 -9 -40 -18 -37 -25 -34 -29 -28 -31 -21 -31 -12 -29 -6 -27 -3 -20 0 -11 0 -4 -3 -2 -6 0 -12 0 -21 -2 -28 -6 -34 -13 -37 -22 -40 -27 -43 -29 -50 -29 -56 -27 -62 -20 -65 -11 -65 ] ] Char -10 SetText2 -0 25 1750 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 77 1750 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 108 1750 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char -10 SetText2 -0 350 1350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 402 1350 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 433 1350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -550 2350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2350 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 -925 4250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -873 4250 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 850 3250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 902 3250 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -550 2550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -550 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -498 2150 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char -10 SetText2 -0 -1025 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 -973 2150 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 350 1150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 402 1150 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 433 1150 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 1200 2125 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char -0 1148 2125 [ [ -31 -65 -9 0 ] [ 0 -65 -31 -65 ] ] Char -10 SetText2 -0 50 1950 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 102 1950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char -10 SetText2 -0 150 1550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 202 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 233 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -675 1950 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -623 1950 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 450 2550 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 502 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 500 4275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 552 4275 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -675 3450 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -623 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 950 1700 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 1002 1700 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -350 4325 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char -0 -298 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1225 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 -1169 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 -1117 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1125 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char -0 1181 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char -0 1233 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 800 3450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 852 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 883 3450 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char -10 SetText2 -0 -225 875 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 1125 1875 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 -125 2775 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 -1125 2775 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 -525 3675 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -10 SetText2 -0 -700 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -750 275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 34 25 ] [ 22 25 34 25 ] ] Char -0 -696 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -640 275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -588 275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 34 25 ] [ 22 25 34 25 ] ] Char -0 -534 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 -484 275 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char -0 -380 275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char -0 -328 275 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 -272 275 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char -0 -168 275 [ [ 0 28 40 28 ] ] Char -0 -55 275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -3 275 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char -0 49 275 [ [ 0 65 0 0 ] ] Char -0 69 275 [ [ 0 65 18 0 ] [ 36 65 18 0 ] ] Char -0 177 275 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -0 233 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] ] Char -0 335 275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 387 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -0 437 275 [ [ 0 65 0 0 27 0 ] ] Char -0 484 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 540 275 [ [ 0 65 11 0 ] [ 22 65 11 0 ] [ 22 65 34 0 ] [ 45 65 34 0 ] ] Char -0 605 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 661 275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char -0 713 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char -10 SetText2 -0 125 600 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 177 600 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char -0 229 600 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char -10 SetText2 -0 500 600 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -0 561 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 592 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 -625 600 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char -0 -569 600 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char -0 -517 600 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char -0 -465 600 [ [ 0 65 0 0 ] ] Char -0 -445 600 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char -10 SetText2 -0 1100 2075 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1050 1925 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 875 675 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 1075 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char -10 SetText2 -0 975 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -925 1475 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 175 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 -1050 2975 [ [ 0 53 4 56 11 65 11 0 ] ] Char -10 SetText2 -0 625 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char -0 656 4325 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char -10 SetText2 -0 -825 1275 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char -grestore -showpage diff --git a/usr.sbin/xntpd/hints/README b/usr.sbin/xntpd/hints/README deleted file mode 100644 index f7fdb72..0000000 --- a/usr.sbin/xntpd/hints/README +++ /dev/null @@ -1,12 +0,0 @@ -README file for directory ./hints of the NTP Version 3 distribution - -This directory contains files with hints for particular architectures. - -All files are derived from the earlier README.<machine> files. -I have tried to adjust these files to match the current state of -affairs of this xntp distribution. The information contained in the -files may or may not be completely correct. But these files contain -valuable hints for specific architectures. - -Frank Kardel 93/12/3 - diff --git a/usr.sbin/xntpd/hints/aux b/usr.sbin/xntpd/hints/aux deleted file mode 100644 index aa7ccbb..0000000 --- a/usr.sbin/xntpd/hints/aux +++ /dev/null @@ -1,159 +0,0 @@ -Last revision: 09-Aug-1993 - -Included in this distribution of XNTP V3 is a configuration file suitable -for use under Apple's A/UX Version 3.0.x While it may work with -other versions, it has not been tested. To make the executables follow -the steps outlined below. - -*** NOTE: You must have gcc installed to successfully compile the current -distribution; the native cc supplied with A/UX will NOT correctly compile -this source. See the FAQ in comp.unix.aux for places to obtain gcc from -and how to install it. - -Now, you need to create the makefiles: - - % make refconf - -First of all, you need to edit Config.local to make sure that BINDIR is -correct for where you wish the programs to be "installed". The default -(and what I use) is /usr/local/etc. Make sure that DEFS_LOCAL and -CLOCKDEFS are commented out! - - -After this is done (you should be told that your system is A/UX 3), make -xntpd (the options to 'gcc' are held in compilers/aux3.gcc): - - % make - -I do not normally use the `make install' option and so have not verified its -compatibility with A/UX. Rather, I pull out each of the executables and -place them in the locally appropriate locations. - -At this point you need to set things up so that 'xntpd' is started upon -boot-up. You can do this in 1 of 2 ways: either add entries in /etc/inittab -or create and use an /etc/rc.local file. - -By default, A/UX doesn't have one, so you'll need to add the following to -/etc/inittab: - - net6:2:wait:/etc/syslogd # set to "wait" to run a syslog daemon -+ jmj0:2:wait:/etc/rc.local 1>/dev/syscon 2>&1 # Local stuff - dbg2::wait:/etc/telinit v # turn off init's verbose mode - -Now, the look of /etc/rc.local is as follows: - - #!/bin/sh - : - : rc.local - : - # @(#)Copyright Apple Computer 1987 Version 1.17 of rc.sh on 91/11/08 15:56:21 (ATT 1.12) - - - # Push line discipline/set the device so it will print - /etc/line_sane 1 - echo " " - echo "Entering rc.local..." - - set `/bin/who -r` - if [ "$7" = 2 ] - then - /bin/echo " now setting the time..." - /usr/local/etc/ntpdate -s -b <host.domain> - sleep 5 - # - # start up xntpd if we want - # - if [ -f /etc/ntp.conf ] - then - /bin/echo " setting tick and tickadj..." - /usr/local/etc/tickadj -t 16672 -a 54 - sleep 5 - /bin/echo " starting xntpd..." - /usr/local/etc/xntpd <&- > /dev/null 2>&1 - sleep 5 - fi - # - fi - - echo "Leaving rc.local..." - -There are a few things to notice about the above: - - o When run, 'ntpdate' forces your clock to the time returned by the - host(s) specified by <host.domain> (you'll need to replace this - be the IP address(es) of your timehosts. This is good since it gets - things close to start off with. - - o 'tickadj' is also called. This does two things: changes the - default value of 'tick' (which the the amount of time, in ms, that - is added to the clock every 1/60 seconds) and changes the value - of 'tickadj' which the the amount that is added or subtracted - from 'tickadj' when adjtime() is called. - - Now Mac clocks are pretty bad and tend to be slow. Sooo, instead of - having A/UX add the default of 16666ms every 1/60th of a second, - you want it to add more so that it keeps better time. The above - value works for me but your "best" value may be different and will - likely require some fooling around to find the best value. - - A/UX's default value of 'tickadj' is 1666 which is too big for - 'xntpd'... so it also needs to be adjusted. - - -Finally, before A/UX and 'xntpd' will work happily together, you need to -patch the kernel. This is due to the fact that A/UX attempts to keep the -UNIX-software clock and the Mac-hardware clock in sync. Now both of these -are too good. Also, 'xntpd' will be attempting to adjust the software -clock as well, so having A/UX muck around with it is asking for headaches. -What you therefore need to do is tell the kernel _not_ to sync the s/w clock -with the h/w one. This is done using 'adb'. The following is a shell script -that will do the patch for you: - - #! /bin/sh - adb -w /unix <<! - init_time_fix_timeout?4i - init_time_fix_timeout?w 0x4e75 - init_time_fix_timeout?4i - $q - ! - -This must be done _every_ time you create a new kernel (via newconfig or -newunix) or else 'xntpd' will go crazy. - -John Dundas was the original porter of xntpd and a lot of the additions -and A/UX-ports are from him. I got involved when I wanted to run 'xntpd' -on jagubox. It was also around this time that the base-patchlevel of -'xntpd' changed relatively significantly so John may not be up on this -version (called the "jones" version). - -The original kernel patch (which patched 'time_fix_timeout') was from -Richard Todd. I suggest patching 'init_time_fix_timeout' which prevents -'time_fix_timeout' from even being called. - -TECHNICAL NOTES: - - o As configured (see machines/aux3), 'xntpd' will log messages via syslogd - using the LOC_LOCAL1 facility. I would suggest the following in - /etc/syslog.conf: - - local1.notice /usr/adm/ntpd-syslog - - o As mentioned above, the clocks on A/UX and Macs are kinda bad. Not - only that, but logging in and out of the MacOS mode as well as - extensive floppy use causes A/UX to drop and lose clock interupts - (these are sent every 1/60th of a second). So, if you do these - activities a lot, you find out that you lose about 300ms of time - (i.e., you become 300ms slow). 'xntpd' default way of handling this - is to called 'settimeofday()' and step the clock to the correct - time. I prefer having 'xntpd' slew the clock back into line by - making gradual adjustments to the clock over a coupla minutes - or so. It's for this reason that SLEWALWAYS is defined in - include/ntp_machine.h for SYS_AUX3. - -Good luck! If you have problems under A/UX feel free to contact me (e-mail -is preferred). --- - Jim Jagielski | "That is no ordinary rabbit... 'tis the - jim@jagubox.gsfc.nasa.gov | most foul, cruel and bad-tempered - NASA/GSFC, Code 734.4 | rodent you ever set eyes on" - Greenbelt, MD 20771 | Tim the Enchanter diff --git a/usr.sbin/xntpd/hints/bsdi b/usr.sbin/xntpd/hints/bsdi deleted file mode 100644 index 3ab518b..0000000 --- a/usr.sbin/xntpd/hints/bsdi +++ /dev/null @@ -1,61 +0,0 @@ -README.bsdi - -Author: Bdale Garbee, bdale@gag.com -Last revision: 16 July 1993 - -Included in this distribution of XNTP is a configuration file suitable -for use with the BSDI BSD/386 operation system. It has been tested against -the version 1.0 "production release", but should work with any 0.9.X "gamma -release" version if anyone still cares. I'm using the stock gcc provided -with the OS. - -[ As the pmake is badly broken on these systems at the time of this writing - the only way to compile is to call make like this "make -e MAKE=make [target]" - - Frank Kardel - 93/12/3 ] - -To date, I haven't used this with any hardware clocks, but I will probably -get around to trying a Spectracom WWVB receiver at some point, and I'm hacking -on an interface for the Rockwell Navcore 5 GPS widget in my "copious spare -time". - -The config file is Config.bsdi, and the following steps should be all that -are required to install and use the bits. - -To build the software: - - rm -f Config.local - make refconf - make - -To install the software: - - make install - - This will place all of the executables in /usr/local/etc. The config - file is expected to be /usr/local/etc/xntp.conf and the key file for - the optional authentication is /etc/ntp.keys. - - Craft a config file and a key file, and put them in the right places. - There is information on how to do this elsewhere in the documentation, - the only thing I'll mention is that I put the drift file in - /var/log/ntp.drift, and the authdelay on my 486DX/50 system is - 0.000064. Your mileage will vary, learn to use the authspeed tools - if you're going to authenticate. - - In the file /etc/rc.local, make sure that the invocation of ntpd is - commented out, and add an invocation of xntpd. Here's what I'm using: - - echo -n 'starting local daemons:' - - if [ -f /etc/ntp.keys -a -f /usr/local/etc/xntp.conf ]; then - echo -n ' xntpd'; /usr/local/etc/xntpd - fi - - #XXX# echo -n ' ntpd'; /usr/libexec/ntpd -t - -At this point, you should be good to go. Try running /usr/local/etc/xntpd and -using ntpq or xntpdc to see if things are working, then pay attention the next -time you reboot to make sure that xntpd is being invoked, and use ntpq or -xntpdc again to make sure all is well. - -Enjoy! diff --git a/usr.sbin/xntpd/hints/decosf1 b/usr.sbin/xntpd/hints/decosf1 deleted file mode 100644 index bc4ce0b..0000000 --- a/usr.sbin/xntpd/hints/decosf1 +++ /dev/null @@ -1,40 +0,0 @@ -Some major changes were necessary to make xntp v3 run on the DEC Alpha -hardware running DEC OSF/1. All "long" and "u_long" declarations and -casts in the code were changed to "LONG" and "U_LONG" and a new header -file (include/ntp_types.h) was added. The new header file defines -LONG as int and U_LONG as u_int for the Alpha hardware and as long -and u_long for anything else. A couple of #ifs where changed in -ntpq and xntpdc to get the result of a signal defined correctly. The -Config.decosf1 file built the programs here with no problems. - -I don't have a radio clock here, so none of that code has been tested. -I have run xntpd, xntpdc, xntpres, ntpq, ntpdate, and tickadj under -DEC OSF/1 v1.2-2 (BL10). - -Mike Iglesias Internet: iglesias@draco.acs.uci.edu -University of California, Irvine BITNET: iglesias@uci -Office of Academic Computing uucp: ...!ucbvax!ucivax!iglesias -Distributed Computing Support phone: (714) 856-6926 - -Support for NTP Version 2 is included with the current OSF/1 release. If -you are upgrading to NTP Version 3 with this distribution, you should not -use the xntpd or ntpq programs that come with the OSF/1 release. The -older programs should be replaced by the newer programs of the same name, -either in situ or via a link to a tranquil spot like /usr/local/bin. The -make install script in the this distribution don't work due to a silly -install program incompatibility, so you will need to copy the programs by -hand. - -Don't use the setup utility to install or configure the xntpd installation, -as it will cheerfully clobber your painstakingly crafted ntp.conf program. -However, assuming you put this file in /etc/ntp.conf, you can use the -/sbin/init.d/xntpd script to start and stop the daemon. - -This distribution compiles with nominal mumur with the stock cc compiler -that comes with OSF/1. - -Dave Mills -Electrical Engineering Department -Unibergisty of Delabunch -mills@udel.edu - diff --git a/usr.sbin/xntpd/hints/hpux b/usr.sbin/xntpd/hints/hpux deleted file mode 100644 index f0e231d..0000000 --- a/usr.sbin/xntpd/hints/hpux +++ /dev/null @@ -1,92 +0,0 @@ -Last update: Sun Mar 13 15:05:31 PST 1994 - -This file hopefully describes the whatever and however of how to get xntp -running on hpux 7.0 and later s300. s400, s700, and s800. - -First off, all the standard disclaimers hold here ... HP doesn't have anthing -to do with this stuff. I fool with it in my spare time because we use it and -because I like to. We just happen to have a lot of HP machines around here :-) -Xntpd has been in use here for several years and has a fair amount of mileage -on various HP platforms within the company. I can't really guarantee bug fixes -but I'd certainly like to hear about bugs and I won't hestitate to look at -any fixes sent to me. - -Now lets talk OS. If you don't have 7.0 or later, pretty much hang it up now. -This stuff has run here on pretty much everything from 8.0 upward on s300, -s700, and s800. It is known to run on 7.0 s300/s400 but all reports are -from the field and not my personal experience. - -If you are lucky enough to have a s300 or s400 with 9.03, then you no longer -have to worry about adjtimed as HP-UX now has adjtime(2). The rest of you -will have to wait on 10.0 which will have adjtime(2) and a supported though -a bit older version of xntpd. - -Next, let me explain a bit about how this stuff works on HP-UX's that do not -have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed -daemon. Instead of the adjtime(2) system call, we use a library routine to -talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and -causes the clock to skew properly as needed. PLEASE NOTE that the adjtime -code provided here is NOT a general replacement for adjtime(2) ... use of -this adjtime(3)/adjtimed(8) other than with xntpd may yield very odd results. - -What to do to get this stuff running ? - - * If you are running an OS less than 10.0 or do not have a s300/s400 - with 9.03 or better - -> cd machines - -> vi hpux - -> (change -DSYS_HPUX=? to match whatever you are running [7,8,9]) - -> cd .. - - * Say "make makeconfig" - - * Say "make", sit back for a few minutes. - - * cd authstuff - * Say "./authcert < certdata" and check the output. Every line should - end with "OK" ... if not, we got trouble. - * Now try "./authspeed auth.samplekeys". What we want to - remember here is the "authentication delay in CPU time" - * cd .. - - * Say "make install" - - * I'd suggest reading the xntp docs about now :-) ... seriously !! - - * One thing I have added to this version of xntpd is a way to select - config files if you are sharing /usr/local thru NFS or whatever. - If the file /usr/local/etc/xntp.conf happens to be a directory, the - files in that directory are searched until a match is found. The - rules for a match are: - - 1. Our hostname - 2. default.<machine id> (as in default.375 or default.850) - 3. default - - * Ok, make sure adjtimed is running (just start it up for now with - "/usr/local/etc/adjtimed"). Using -z as an option will get you - a usage message. - - * Now start up xntpd and watch it work. - - * Make sure that adjtimed gets started at boot right before xntpd. - We do this in /etc/netbsdsrc. They must both run as root !! - -Possible problems ? - - * On some 320's and 835's we have had to run adjtimed with "-p 45" or - so to get rid of syslog messages about "last adjust did not finish". - - * At 9.0, there is a problem with DIAGMON (patch available from the - response center) which causes it to delete the message queue that - adjtimed/xntpd use to communicate. (see next note for result) - - * Xntpd has been known to get really ticked off when adjtime() fails - which is usually only while running the emulation code on HP-UX. - When it gets mad, it usually jumps the clock into never never land. - Possible reasons for this are adjtimed being killed or just never - started or adjtimed being completely swapped out on a really busy - machine (newer adjtimed try to lock themselves in memory to prevent - this one). - -Anything else ... just drop me a line at ken@sdd.hp.com diff --git a/usr.sbin/xntpd/hints/linux b/usr.sbin/xntpd/hints/linux deleted file mode 100644 index 0efc12b..0000000 --- a/usr.sbin/xntpd/hints/linux +++ /dev/null @@ -1,9 +0,0 @@ - -Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer ------------- - - With this configuration, xntp should build an run right out of the box -(see generic hints for how-to). If you really need to run xntp on any earlier -versions of the kernel or libc, or have any other question not covered in the -READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel -free to ask me (duwe@informatik.uni-erlangen.de) diff --git a/usr.sbin/xntpd/hints/notes-xntp-v3 b/usr.sbin/xntpd/hints/notes-xntp-v3 deleted file mode 100644 index ba027f2..0000000 --- a/usr.sbin/xntpd/hints/notes-xntp-v3 +++ /dev/null @@ -1,119 +0,0 @@ -Notes for NTP Version 3 - -This version operates in much the same manner as Version 2 with the -following changes and additions: - -1. The protocol machinery operates in conformance with the RFC1305 NTP - Version 3 specification. The most visible characteristic of this - version is that the poll intervals for all polls, even selected - ones, is significantly increased. This is especially desirable when - serving a large client population. This implementation supports - previous versions as non-configured peers; for version-2 configured - peers a "version 2" keyword should be included on the "peer" line. - -2. The configuration file has a new keyword: statfile <file>, where - <file> is the name of a statistics file." When present, each clock - update generates an entry of the form: - - <day> <sec>.<frac> <addr> <status> <offset> <delay> <disp> - - where <day> is the modified Julian day, <sec>.<frac> is the time of - day, <addr> is the peer address and <status> is the peer status. - The <offset>, <delay> and <disp> are the measured offset, delay and - dispersion, respectively, of the peer clock relative to the local - clock. About once per day the current file is closed and a new one - created with names <file>.<gen>, where <gen> starts at one and - increments for each new generation. - -3. A number of additional platforms are supported. See ./Config file - for details. - -4. A driver for the TrueTime 468DC GOES Synchronized Clock is - included. This driver (refclock_goes.c) should also work for other - TrueTime radio clocks, since all use the same format. - -5. A replacement driver for the Spectracom 8170 WWVB Synchronized - Clock is included. This driver (refclock_wwvb.c) (a) does not - require a 1-pulse-per-second signal, (b) supports both format 0 - (original 8170) and format 2 (Netclock/2 and upgraded 8170), (c) - can be connected to more than one computer and (d) automatically - compensates for all serial baud rates. - -6. A driver for the German time/frequency station DCF77 is included. - This requires a special STREAMS module. - -7. In Version 2 special line-discipline modules were required for the - CHU and WWVB drivers. This code continues to work in Version 3, - although it is no longer needed for the WWVB driver. However, this - code does not work under STREAMS, as used in SunOS 4.1.1. - Equivalent STREAMS modules are supplied with Version 3. - -8. Support for an external 1-pulse-per-second (pps) signal is - provided. The signal is connected to a serial port (see - xntpd/ntp_loopfilter.c for details). When present the leading edge - of the pulse establishes the on-time epoch within an interval - established by the selected radio clock or other NTP time server. - Use of the pps is indicated when the tattletale displayed by ntpq - changes from "*" to "o". - -9. The clock-selection and poll-update procedures have been modified - slightly in order to achieve better performance on high speed LANs - with compromise in performance on typical WANs. - -10. In order to comply with U.S. Commerce Department regulations, the DES - encryption routine lib/authdes.c cannot be exported. For exportable - versions of this distribution a DES-encrypted version of this routine - lib/authdes.c.des is included along with an unencrypted version - lib/authdes.c.export, which allows normal operation, but without the - NTP authentication feature. Further information is available in the - lib/authdes.c.export file. - -11. As an alternative to the DES-based authentication mechanism, an - implementation of the RSA Message Digest 5 algorithm is provided. - (see applicable copyright information in the library files). - -12. A driver for the Magnavox MX4200 GPS clock. - -13. A STREAMS module which captures carrier-detect data-lead transitions to - connect a precision source of 1-pps, yet avoid the ugly overhead in the - usual STREAMS processing. See the ppsclock subdirectory. - -14. Support for the Apple A/UX operating system and enhanced support for the - Hewlet-Packard HP/UX operating system. See the various README and Config - files for further information. - -See the COPYRIGHT file for authors and copyright information. Note that some -modules in this distribution contain copyright information that supersedes -the copyright information in that file. - -If I missed something or neglected to give due credit, please advise. - -David L. Mills -University of Delaware -31 May 1992, amended 23 July 1992, 25 October 1992 - -Bugs and notes - -A bug in the original tty_clk_STREAMS.c module has been fixed. - -The poll-interval randomization feature of poll_update (in -xntpd/ntp_proto.c) has been extended to apply when the poll interval is -increased, as well as reduced. This spreads the update messages in time -and helps avoid unpleasant bursts of messages. - -In the clock_select algorithm the peers selected for combining are -limited to those survivors at the lowest stratum, not the entire list. -This helps avoid whiplash when large numbers of peers are at the same -stratum. - -The number formerly displayed by ntpq as "compliance" is now the time -constant of integration. - -The DNS resolver xntpd/ntp_intres.c is now integrated into xntpd, making -configuration of multiple hosts easier. - -System and peer event are now written to the system log at priority -LOG_INFO. - -The leap-second code was fixed to avoid broadcasting leap warnings on -all except the last day of June and December. diff --git a/usr.sbin/xntpd/hints/parse b/usr.sbin/xntpd/hints/parse deleted file mode 100644 index d252351..0000000 --- a/usr.sbin/xntpd/hints/parse +++ /dev/null @@ -1,105 +0,0 @@ -Compilation: - Usual thing: rm -f Config.local ; make for vanilla - make refconf for reference clock (e. g. DCF77) - -Directory contents: - - hints/PARSE - this file - - xntpd/refclock_parse.c - - reference clock support for DCF77/GPS in xntp - parse/parse.c - - Reference clock data parser framework - parse/parse_conf.c - - parser configuration (clock types) - parse/clk_meinberg.c - - Meinberg clock formats (DCF U/A 31, PZF 535, GPS166) - parse/clk_schmid.c - - Schmid receiver (DCF77) - parse/clk_rawdcf.c - - 100/200ms pulses via 50 Baud line (DCF77) - parse/clk_dcf7000.c - - ELV DCF7000 (DCF77) - parse/clk_trimble.c - - Trimble SV6 GPS receiver - - If you want to add new clock types please check - with kardel@informatik.uni-erlangen.de. These files - implement the conversion of RS232 data streams into - timing information used by refclock_parse.c which is - mostly generic except for NTP configuration constants. - - parse/Makefile.kernel - - *SIMPLE* makefile to build a loadable STREAMS - module for SunOS 4.x / SunOS 5.x systems - - parse/parsestreams.c - - SUN Streams module (loadable) for radio clocks - This streams module is designed for SunOS 4.1.X. - - parse/parsesolaris.c - - SUN Streams module (loadable) for radio clocks. - This streams module is designed for SunOS 5.x - Beware this is still new - so it might crash - your machine (we have seen it working, though). - - parse/parsetest.c - - simple test program for STREAMS module. Its so simple, - that it doesn't even set TTY-modes, thus they got to - be correct on startup - works for Meinberg receivers - - parse/testdcf.c - - test program for raw DCF77 (100/200ms pulses) - receivers - - include/parse.h - interface to "parse" module and more - include/parse_conf.h - - interface to "parse" configuration - - include/sys/parsestreams.h - - STREAMS specific definitions - - scripts/support - - scripts (perl & sh) for statistics and rc startup - the startup scripts are used in Erlangen for - starting the daemon on a variety of Suns and HPs - and for Reference Clock startup on Suns - These scripts may or may not be helpful to you. - -Supported clocks: - Meinberg DCF U/A 31 - Meinberg PZF535/TCXO (Software revision PZFUERL 4.6) - Meinberg PZF535/OCXO (Software revision PZFUERL 4.6) - Meinberg GPS166 (Software version for Uni-Erlangen) - ELV DCF7000 (not recommended - casual/emergency use only) - Conrad DCF77 receiver (email: time@informatik.uni-erlangen.de) - + level converter - TimeBrick (email: time@informatik.uni-erlangen.de) - Schmid Receiver Kit - Trimble SV6 GPS receiver - -Addresses: - Meinberg Funkuhren - Auf der Landwehr 22 - 31812 Bad Pyrmont - Germany - Tel.: 05281/20 18 - FAX: 05281/60 81 80 - - ELV Kundenservice - Postfach 1000 - 26787 Leer - Germany - Tel.: 0491/60 08 88 - - Walter Schmidt - Eichwisrain 14 - 8634 Hombrechtikon - Switzerland - -If you have problems mail to: - - time@informatik.uni-erlangen.de - -We'll help (conditions permitting) - diff --git a/usr.sbin/xntpd/hints/refclocks b/usr.sbin/xntpd/hints/refclocks deleted file mode 100644 index 34b2ea9..0000000 --- a/usr.sbin/xntpd/hints/refclocks +++ /dev/null @@ -1,32 +0,0 @@ -This is a short overview for the reference clocks currently supported -by xntp V3. (Ultimate wisdom can be obtained from xntpd/refclock_*.c -this file was derived from that information - unfortunately some comments -in the files tend to get stale - so use with caution) - -Refclock address Type -127.127.0.x no clock (fails to configure) -127.127.1.x local clock - use local clock as reference -127.127.2.x no clock (fails to configure) -127.127.3.x PSTI 1010/1020 WWV Clock -127.127.4.x SPECTRACOM WWVB receiver 8170 and Netclock/2 -127.127.5.x Kinimetric Truetime 468-DC GOES receiver -127.127.6.x IRIG audio decode (Sun & modified BSD audio driver) -127.127.7.x CHU Timecode (via normal receiver & Bell 103 modem) -127.127.8.x PARSE (generic driver for a bunch of DCF/GPS clocks - can be extended for other clocks too) - 8.0-3 Meinberg PZF535/TCXO - 8.4-7 Meinberg PZF535/OCXO - 8.8-11 Meinberg DCF U/A 31 - 8.12-15 ELV DCF7000 - 8.16-19 Walter Schmid DCF receiver (Kit) - 8.20-23 Conrad DCF77 receiver module + level converter (Kit) - 8.24-27 TimeBrick (limited availability ask - time@informatik.uni-erlangen.de) - 8.28-31 Meinberg GPS166 - 8.32-35 Trimble SV6 GPS receiver -127.127.9.x MX4200 GPS receiver -127.127.10.x Austron 2201A GPS Timing Receiver -127.127.11.x Kinemetrics Truetime OM-DC OMEGA Receiver -127.127.12.x KSI/Odetecs TPRO-S IRIG-B / TPRO-SAT GPS -127.127.13.x Leitch: CSD 5300 Master Clock System Driver -127.127.14.x MSFEES diff --git a/usr.sbin/xntpd/hints/rs6000 b/usr.sbin/xntpd/hints/rs6000 deleted file mode 100644 index 8561ac2..0000000 --- a/usr.sbin/xntpd/hints/rs6000 +++ /dev/null @@ -1,56 +0,0 @@ -15.7.1993 -xntp3 compiles now again on AIX. I have disabled prototyping and added -the switch -D_NO_PROTO which disables prototyping in the system include -files. - -Matthias Ernst maer@nmr.lpc.ethz.ch --------------------------------------------------------------------------------- -Xntp version 3 now support the cc compiler for AIX. -The Config.aix will now use cc by default. You can still compile xntp -with the bsd compiler by changing "COMP= cc" to "COMP= bsdcc" and -and removing the "-DSTUPID_SIGNAL" option from the "DEFS" option. - -xntp and tickadj was also modified so that the value of tickadj is read -form the kernel and can be set by tickadj. For now I would not set -tickadj below 40 us. - -Bill Jones -jones@chpc.utexas.edu -------------------------------------------------------------------------------- - -This is a modified version of xntp version 3 for the RS6000. It works for -AIX 3.2 and these are the same changes as have been applied tothe version 2 -implementation of xntp. It works fine for us but I have not tested all of -the features, especially the local clock support for the RS6000 is not tested -at all. - -Matthias Ernst, ETH-Zuerich, Switzerland - maer@nmr.lpc.ethz.ch - --------------------------------------------------------------------------------- - -Here the original README.rs6000 for the version 2 implementation: - -A hacked version of xntp for the IBM RS/6000 under AIX 3.1 can be found -in xntp.rs6000.tar.Z. [ if still available at all - Frank Kardel 93/12/3 ] - -This will not work on older versions of AIX due to a kernel bug; to find -out whether you have the kernel bug, compile and run testrs6000.c (see -comments in the code for instructions). - -xntp and testrs6000 require "bsdcc" to compile. This is simply another -entry point into the xlc compiler with various options set for BSD -compatibility. If your system does not have bsdcc, do the following: - -link /bin/bsdcc to /bin/xlc - -put the following into /etc/xlc.cfg: - -* BSD compatibility -bsdcc: use = DEFLT - crt = /lib/crt0.o - mcrt = /lib/mcrt0.o - gcrt = /lib/gcrt0.o - libraries = -lbsd, -lc - proflibs = -L/lib/profiled,-L/usr/lib/profiled - options = -H512,-T512, -qlanglvl=extended, -qnoro, -D_BSD, -D_NONSTD_TYPES, -D_NO_PROTO, -tp,-B/lib/ - diff --git a/usr.sbin/xntpd/hints/sgi b/usr.sbin/xntpd/hints/sgi deleted file mode 100644 index 5e4f7de..0000000 --- a/usr.sbin/xntpd/hints/sgi +++ /dev/null @@ -1,74 +0,0 @@ -adjtime, tick and tickadj: --------------------------- - -The SGI value for HZ is 100 under Irix 4, with the system clock running -in nominal mode (ftimer off), so the value for tick is 10000 usec. -Tickadj is a bit more tricky because of the behaviour of adjtime(), -which seems to try to perform the correction over 100-200 seconds, with -a rate limit of 0.04 secs/sec for large corrections. Corrections of -less than 0.017 seconds generally complete in less than a second, -however. - -Some measured rates are as follows: - - Delta Rate (sec/sec) - - > 1 0.04 - 0.75 0.04 - 0.6 0.004 - 0.5 0.004 - 0.4 0.0026 - 0.3 0.0026 - 0.2 0.0013 - 0.1 0.0015 - 0.05 0.0015 - 0.02 0.0003 - 0.01 0.015 -Strange. Anyway, since adjtime will complete adjustments of less than -17msec in less than a second, whether the fast clock is on or off, I -have used a value of 150usec/tick for the tickadj value. - -Fast clock: ------------ - -I get smoother timekeeping if I turn on the fast clock, thereby making -the clock tick at 1kHz rather than 100Hz. With the fast clock off, I -see a sawtooth clock offset with an amplitude of 5msec. With it on, -the amplitude drops to 0.5msec (surprise!). This may be a consequence -of having a local reference clock which spits out the time at exactly -one-second intervals - I am probably seeing sampling aliasing between -that and the machine clock. This may all be irrelevant for machines -without a local reference clock. Fiddling with the fast clock doesn't -seem to compromise the above choices for tick and tickadj. - -I use the "ftimer" program to switch the fast clock on when the system -goes into multiuser mode, but you can set the "fastclock" flag in -/usr/sysgen/master.d/kernel to have it on by default. See ftimer(1). - -timetrim: ---------- - -Irix has a kernel variable called timetrim which adjusts the system -time increment, effectively trimming the clock frequency. Xntpd could -use this rather than adjtime() to do it's frequency trimming, but I -haven't the time to explore this. There is a utility program, -"timetrim", in the util directory which allows manipulation of the -timetrim value in both SGI and xntpd native units. You can fiddle with -default timetrim value in /usr/sysgen/master.d/kernel, but I think -that's ugly. I just use xntpd to figure out the right value for -timetrim for a particular CPU and then set it using "timetrim" when -going to multiuser mode. - -Serial I/O latency: -------------------- - -If you use a local clock on an RS-232 line, look into the kernel -configuration stuff with regard to improving the input latency (check -out /usr/sysgen/master.d/[sduart|cdsio]). I have a Kinemetrics OM-DC -hooked onto /dev/ttyd2 (the second CPU board RS-232 port) on an SGI -Crimson, and setting the duart_rsrv_duration flag to 0 improves things -a bit. - - -12 Jan 93 -Steve Clift, CSIRO Marine Labs, Hobart, Australia (clift@ml.csiro.au) diff --git a/usr.sbin/xntpd/hints/solaris b/usr.sbin/xntpd/hints/solaris deleted file mode 100644 index 1d0e47f..0000000 --- a/usr.sbin/xntpd/hints/solaris +++ /dev/null @@ -1,87 +0,0 @@ - A quick summary of how to compile under Solaris: - - If you are running Solaris 2.0, you should upgrade to a later version of -Solaris immediately. - If you are running Solaris 2.1 or later, all should be fine (i hope) - - Solaris 2.1 contains fairly traditional clock code, with tick and tickadj. -Solaris 2.2 and later contains completely re-written clock code to provide -high resolution microsecond timers. A benefit of the re-written clock code -is that adjtime does not round off its adjustments, so xntp does not have to -compensate for this rounding. On Solaris 2.2 and later we #define -ADJTIME_IS_ACCURATE, and do not look for the tickadj kernel variable. - - If you are running both Solaris 2.1 and 2.2 on your net, you will need to -maintain two sets of xntp binaries. The Config.solaris2.2 file will compile -on Solaris 2.1, but the resulting binaries will not work correctly. - -ADDITIONAL NOTES FOR SOLARIS 2.1 -(by William L. Jones jones@chpc.utexas.edu) - -Since settimeofday under Solaris 2.1 only sets the seconds part of timeval -care must be used in starting xntpd. I suggest the following start -up script: - - tickadj -s -a 1000 - ntpdate -v server1 server2 - sleep 20 - ntpdate -v server1 server2 - sleep 20 - tickadj -a 200 - xntpd - -The first tickadj turns of the time of day clock and sets the tick adjust -value to 1 ms. This will insure that an adjtime value of at most 2 -seconds will complete in 20 seconds. - -The first ntpdate will set the time to within two seconds -using settimeofday or it will adjust time using adjtime. - -The first sleep insures the adjtime has completed for the first ntpdate. - -The second ntpdate will use adjtime to set the time of day since the -clock should be within 2 seconds of the correct time. - -The second tickadj set the tick adjust system value to 5 us. - -The second sleeps insure that adjtime will complete before starting -the next xntpd. - -I tried running with a tickadj of 5 us with out much success. -200 us seems to work well. - - -ADDITIONAL NOTES FOR SOLARIS 2.2 AND LATER: - You still need to turn off dosynctodr for XNTP to be able to keep accurate -time. You can either do this in the /etc/system file (consulted at boot to set -various kernel variables) by putting in the following line: -set dosynctodr=0 -or you can use the tickadj program to force the variable to 0 in the running -kernel. Fiddling with a running kernel is almost never a good idea, I'd -recommend using /etc/system. - I would recommend starting xntp from the following script, placed in -/etc/rc2.d and named S99xntpd - -#!/bin/sh - -if [ $1 = "start" ]; then - if [ -x /usr/local/bin/xntpd ]; then - echo "Starting NTP daemon, takes about 1 minute... " - # The following line is unnecessary if you turn off - # dosynctodr in /etc/system. - /usr/local/bin/tickadj -s - /usr/local/bin/ntpdate -v server1 server2 - sleep 5 - /usr/local/bin/xntpd - fi -else - if [ $1 = "stop" ]; then - pid=`/usr/bin/ps -e | /usr/bin/grep xntpd | /usr/bin/sed -e 's/^ *//' -e 's/ .*//'` - if [ "${pid}" != "" ]; then - echo "Stopping Network Time Protocol daemon " - /usr/bin/kill ${pid} - fi - fi -fi - -Denny Gentry denny@eng.sun.com diff --git a/usr.sbin/xntpd/hints/sun4 b/usr.sbin/xntpd/hints/sun4 deleted file mode 100644 index 6dc36ea..0000000 --- a/usr.sbin/xntpd/hints/sun4 +++ /dev/null @@ -1,17 +0,0 @@ -Notes on CPU clock oscillator tolerance with SunOS 4.1.1 and 4.1.3 - -A bug in SunOS 4.1.1 results in the kernel time losing 1 microsecond -per tick of the system clock. The bug was fixed (bugid 1094383) for -SunOS 4.1.1 and corrected in SunOS 4.1.3. The easiest way to fix this -is to replace the 4.1.1 binary clock.o with the corresponding 4.1.3 -binary. Without this change it is necessary to use the tickadj program -included in this distribution with the -t 9999 option. - -The tickadj option will work in all cases except when the kernel has -been modified to correct the CPU clock oscillator frequency using a -1-pps signal from a precision source. The bugfix must be installed for -this wrinkle to work properly. - -Dave Mills (mills@udle.edu) - - diff --git a/usr.sbin/xntpd/hints/svr4-dell b/usr.sbin/xntpd/hints/svr4-dell deleted file mode 100644 index b6d0157..0000000 --- a/usr.sbin/xntpd/hints/svr4-dell +++ /dev/null @@ -1,6 +0,0 @@ -Notes on the DELL SVR4. - -You should use -DSETTIMEOFDAY_BROKEN. - -Philip.Gladstone@mail.citicorp.com - diff --git a/usr.sbin/xntpd/kernel/Makefile.tmpl b/usr.sbin/xntpd/kernel/Makefile.tmpl deleted file mode 100644 index 8b40f4a..0000000 --- a/usr.sbin/xntpd/kernel/Makefile.tmpl +++ /dev/null @@ -1,59 +0,0 @@ -# -# /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.6 1994/01/25 19:04:35 kardel Exp -# -# parse routine that could be used in two places -# -COMPILER= cc -COPTS= -O -AUTHDEFS=-DDES -LIBDEFS= -DBIG_ENDIAN -RANLIB= ranlib -INSTALL= install -CLOCKDEFS= -DEFS= -DEFS_OPT= -DEFS_LOCAL= -CLK_VDOBJS=clkinit.o tty_clk_STREAMS.o -CHU_VDOBJS=chuinit.o tty_chu_STREAMS.o -INCL=-I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -DKERNEL -CC= $(COMPILER) -# - -all: - @echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) | \ - awk '/-DREFCLOCK/ && ( /-D.*CLK/ || /-D.*PPS/ ) { makeit=1; }\ - END { if (makeit) \ - { print ""; \ - print "### STREAMS kernel modules ppsclock, ppsclocd or line disciplines must"; \ - print "### be installed manually if needed"; \ - print "### see kernel/README* for details"; \ - print "### The parse refclock implementation has their own support in"; \ - print "### parse/*."; } }' - -loadable: clk.o chu.o - -clk.o: ${CLK_VDOBJS} - ld -r ${OBJS} -o clk.o - -clk.h: - echo "#define NCLK 2" > clk.h - -tty_clk_STREAMS.o: clk.h tty_clk_STREAMS.c - cc ${CFLAGS} tty_clk_STREAMS.c -c tty_clk_STREAMS.o - -chu.o: ${CHU_VDOBJS} - ld -r ${OBJS} -o chu.o - -chu.h: - echo "#define NCHU 2" > chu.h - -tty_chu_STREAMS.o: chu.h tty_chu_STREAMS.c - cc ${CFLAGS} tty_chu_STREAMS.c -c tty_chu_STREAMS.o - -clean: - -@rm -f *~ *.o *.out *.ln make.log Makefile.bak \ - lintlib.errs lint.errs - -distclean: clean - -@rm -f *.orig *.rej .version Makefile diff --git a/usr.sbin/xntpd/kernel/README b/usr.sbin/xntpd/kernel/README deleted file mode 100644 index cf69b13..0000000 --- a/usr.sbin/xntpd/kernel/README +++ /dev/null @@ -1,90 +0,0 @@ -This directory contains code for two line disciplines which may -work with BSD-style terminal drivers. While I'll try to cover -installation details for the more useful one here as best I can, -you really should know what you are doing before attempting to -put one of these in your kernel since the details seem to vary -from BSD variant to BSD variant. - -Tty_clk.c contains a generic clock support line discipline. -The terminal driver is actually run in raw mode, giving you an -eight bit data path. Instead of delivering the data -character-by-character, however, the line discipline collects -characters until one of two magic characters (your current erase -and kill characters. Don't throw up) is received. A timestamp -is then taken (by calling microtime()), inserted in the input -buffer after the magic character, and the whole mess made available -for input by the application. Both select() and SIGIO are supported -by the discipline. - -Tty_chu.c is a special purpose line discipline for receiving -the CHU time code. It understands enough about the format of the -code CHU transmits to filter out errors, and delivers an entire -ten character code group to the application all at once, including -a timestamp for each character. The structure the code group is -delivered in is defined in chudefs.h. Note that this line discipline -is old and could use some rewriting for better portability. Please -drop me a line if you are interested in using this. - -To install the clock line discipline, do something like the following: - -(1) Copy tty_clk.c into /sys/sys - -(2) Edit /sys/sys/tty_conf.c. You will want to include some facsimile - of the following lines: - -#include "clk.h" -#if NCLK > 0 -int clkopen(), clkclose(), clkwrite(), clkinput(), clkioctl(); -#endif - -#if NCLK > 0 - { clkopen, clkclose, ttread, clkwrite, clkioctl, - clkinput, nodev, nulldev, ttstart, nullmodem, /* 10- CLKLDISC */ - ttselect }, -#else - { nodev, nodev, nodev, nodev, nodev, - nodev, nodev, nodev, nodev, nodev, - nodev }, -#endif - - In Ultrix 4.2a and 4.3 the file to edit is /sys/data/tty_conf_data.c. - The lines should be - -#if NCLK > 0 - clkopen, clkclose, ttread, clkwrite, clkioctl, /* 10 */ - clkinput, nodev, nulldev, ttstart, nulldev, -#else - nodev, nodev, nodev, nodev, nodev, - nodev, nodev, nodev, nodev, nodev, -#endif - - Note that if your kernel doesn't include the ??select() entry in - the structure (i.e. there are only 10 entry points in the structure) - just leave it out. Also note that the number you give the line - discipline (10 in my kernel) will be specific to your kernel and - will depend on what is in there already. The entries sould be in - order with no missing space; that is, if there are only seven - disciplines already defined and you want to use 10 for good reason, - you should define a dummy 9th entry like this - - nodev, nodev, nodev, nodev, nodev, /* 9 */ - nodev, nodev, nodev, nodev, nodev, - -(3) Edit /sys/h/ioctl.h and include a line (somewhere near where other - line disciplines are defined) like: - -#define CLKLDISC 10 /* clock line discipline */ - - The `10' should match what you used in /sys/sys/tty_conf.c. - -(4) Edit /sys/conf/files and add a line which looks like: - -sys/tty_clk.c optional clk - -(5) Edit the configuration file for the machine you want to use - the clock line discipline on to include the following: - -pseudo-device clk 4 - -(6) Run config, then make clean, then make depend, then make vmunix. - Then reboot the new kernel. diff --git a/usr.sbin/xntpd/kernel/README.streams b/usr.sbin/xntpd/kernel/README.streams deleted file mode 100644 index 26c2825..0000000 --- a/usr.sbin/xntpd/kernel/README.streams +++ /dev/null @@ -1,86 +0,0 @@ -Some kernels don't support additional user defined line disciplines. -Especially notable in this regard is SunOS and System V. They -provide similar support in the form of "Streams". Accordingly, -included in this directory is a pair of STREAMS modules to -replace the line disciplines that provide clock support for -xntpd. Notice that the "clkdefs.h" file is not used in the -original line discipline, but the "chudefs.h" file is the -same one used in the original line discipline. - -TO INSTALL A NEW STREAMS DRIVER: - -1. Copy your choice to /sys/os, removing the "_STREAMS" in the -filename. - -2. Copy the appropriate *defs.h file to /usr/include/sys, -then link it (with ln) to /sys/sys. - -In the following steps, substitute "clk" for "chu" if you're -installing the clk driver. - -3. Append to /sys/conf.common/files.cmn: - -os/tty_chu.c optional chu - -4. Edit /sys/sun/str_conf.c. You'll want to add lines in three -places. It'll be sort of clear where when you see the file. - -. -. -. -#include "chu.h" -. -. -. -#if NCHU > 0 -extern struct streamtab chuinfo; -#endif -. -. -. -#if NCHU > 0 - { "chu", &chuinfo }, -#endif -. -. -. - -At this point, the kernel-making "config [k-name] ; cd ../[k-name] ; make" -should produce a kernel just as it did before. If it fouls up, -something's wrong. - -5. Edit /sys/[arch]/conf/[k-name] (substituting the architecture and -kernel name) to stick in: - -pseudo-device chu4 # CHU clock support - -You can change 4 to anything you like. It will limit the number -of instantiations of the chu driver you can use at the same time. - -6. Make a new kernel and boot it. - -HOW TO USE THE CHU STREAMS DRIVER: - -The driver should act exactly like the line discipline. -After setting the raw mode, and exclusive access (if you want), -pop off all the extra streams, then push the chu module -on. From then on, any reads from the file in question -will return chucode structures as defined in chudefs.h. -Depending on the settings of PEDANTIC and ANAL_RETENTIVE -used when compiling the kernel, some checking of the -data may or may not be necessary. - -HOW TO USE THE CLK STREAMS DRIVER: - -First, it should be noted that a new ioctl() has been defined. -The CLK_SETSTR ioctl takes a pointer to a string of no more -than CLK_MAXSTRSIZE characters. Until the first CLK_SETSTR -is performed, the driver will simply pass through characters. -Once it is passed a string, then any character in that string -will be immediately followed by a struct timeval. You can -change the string whenever you want by doing another -CLK_SETSTR. The character must be an exact, 8 bit match. -The character '\000' cannot, unfortunately, be stamped. -Passing an empty string to CLK_SETSTR turns off stamping. -Passing NULL will produce undefined results. - diff --git a/usr.sbin/xntpd/kernel/tty_chu.c b/usr.sbin/xntpd/kernel/tty_chu.c deleted file mode 100644 index 4615875..0000000 --- a/usr.sbin/xntpd/kernel/tty_chu.c +++ /dev/null @@ -1,276 +0,0 @@ -/* tty_chu.c,v 3.1 1993/07/06 01:07:30 jbj Exp - * tty_chu.c - CHU line driver - */ - -#include "chu.h" -#if NCHU > 0 - -#include "../h/param.h" -#include "../h/types.h" -#include "../h/systm.h" -#include "../h/dir.h" -#include "../h/user.h" -#include "../h/ioctl.h" -#include "../h/tty.h" -#include "../h/proc.h" -#include "../h/file.h" -#include "../h/conf.h" -#include "../h/buf.h" -#include "../h/uio.h" - -#include "../h/chudefs.h" - -/* - * Line discipline for receiving CHU time codes. - * Does elementary noise elimination, takes time stamps after - * the arrival of each character, returns a buffer full of the - * received 10 character code and the associated time stamps. - */ -#define NUMCHUBUFS 3 - -struct chudata { - u_char used; /* Set to 1 when structure in use */ - u_char lastindex; /* least recently used buffer */ - u_char curindex; /* buffer to use */ - u_char sleeping; /* set to 1 when we're sleeping on a buffer */ - struct chucode chubuf[NUMCHUBUFS]; -} chu_data[NCHU]; - -/* - * Number of microseconds we allow between - * character arrivals. The speed is 300 baud - * so this should be somewhat more than 30 msec - */ -#define CHUMAXUSEC (50*1000) /* 50 msec */ - -int chu_debug = 0; - -/* - * Open as CHU time discipline. Called when discipline changed - * with ioctl, and changes the interpretation of the information - * in the tty structure. - */ -/*ARGSUSED*/ -chuopen(dev, tp) - dev_t dev; - register struct tty *tp; -{ - register struct chudata *chu; - - /* - * Don't allow multiple opens. This will also protect us - * from someone opening /dev/tty - */ - if (tp->t_line == CHULDISC) - return (EBUSY); - ttywflush(tp); - for (chu = chu_data; chu < &chu_data[NCHU]; chu++) - if (!chu->used) - break; - if (chu >= &chu[NCHU]) - return (EBUSY); - chu->used++; - chu->lastindex = chu->curindex = 0; - chu->sleeping = 0; - chu->chubuf[0].ncodechars = 0; - tp->T_LINEP = (caddr_t) chu; - return (0); -} - -/* - * Break down... called when discipline changed or from device - * close routine. - */ -chuclose(tp) - register struct tty *tp; -{ - register int s = spl5(); - - ((struct chudata *) tp->T_LINEP)->used = 0; - tp->t_cp = 0; - tp->t_inbuf = 0; - tp->t_rawq.c_cc = 0; /* clear queues -- paranoid */ - tp->t_canq.c_cc = 0; - tp->t_line = 0; /* paranoid: avoid races */ - splx(s); -} - -/* - * Read a CHU buffer. Sleep on the current buffer - */ -churead(tp, uio) - register struct tty *tp; - struct uio *uio; -{ - register struct chudata *chu; - register struct chucode *chucode; - register int s; - - if ((tp->t_state&TS_CARR_ON)==0) - return (EIO); - - chu = (struct chudata *) (tp->T_LINEP); - - s = spl5(); - chucode = &(chu->chubuf[chu->lastindex]); - while (chu->curindex == chu->lastindex) { - chu->sleeping = 1; - sleep((caddr_t)chucode, TTIPRI); - } - chu->sleeping = 0; - if (++(chu->lastindex) >= NUMCHUBUFS) - chu->lastindex = 0; - splx(s); - - return (uiomove((caddr_t)chucode, sizeof(*chucode), UIO_READ, uio)); -} - -/* - * Low level character input routine. - * If the character looks okay, grab a time stamp. If the stuff in - * the buffer is too old, dump it and start fresh. If the character is - * non-BCDish, everything in the buffer too. - */ -chuinput(c, tp) - register int c; - register struct tty *tp; -{ - register struct chudata *chu = (struct chudata *) tp->T_LINEP; - register struct chucode *chuc; - register int i; - long sec, usec; - struct timeval tv; - - /* - * Do a check on the BSDness of the character. This delays - * the time stamp a bit but saves a fair amount of overhead - * when the static is bad. - */ - if (((c) & 0xf) > 9 || (((c)>>4) & 0xf) > 9) { - chuc = &(chu->chubuf[chu->curindex]); - chuc->ncodechars = 0; /* blow all previous away */ - return; - } - - /* - * Call microtime() to get the current time of day - */ - microtime(&tv); - - /* - * Compute the difference in this character's time stamp - * and the last. If it exceeds the margin, blow away all - * the characters currently in the buffer. - */ - chuc = &(chu->chubuf[chu->curindex]); - i = (int)chuc->ncodechars; - if (i > 0) { - sec = tv.tv_sec - chuc->codetimes[i-1].tv_sec; - usec = tv.tv_usec - chuc->codetimes[i-1].tv_usec; - if (usec < 0) { - sec -= 1; - usec += 1000000; - } - if (sec != 0 || usec > CHUMAXUSEC) { - i = 0; - chuc->ncodechars = 0; - } - } - - /* - * Store the character. If we're done, have to tell someone - */ - chuc->codechars[i] = (u_char)c; - chuc->codetimes[i] = tv; - - if (++i < NCHUCHARS) { - /* - * Not much to do here. Save the count and wait - * for another character. - */ - chuc->ncodechars = (u_char)i; - } else { - /* - * Mark this buffer full and point at next. If the - * next buffer is full we overwrite it by bumping the - * next pointer. - */ - chuc->ncodechars = NCHUCHARS; - if (++(chu->curindex) >= NUMCHUBUFS) - chu->curindex = 0; - if (chu->curindex == chu->lastindex) - if (++(chu->lastindex) >= NUMCHUBUFS) - chu->lastindex = 0; - chu->chubuf[chu->curindex].ncodechars = 0; - - /* - * Wake up anyone sleeping on this. Also wake up - * selectors and/or deliver a SIGIO as required. - */ - if (tp->t_rsel) { - selwakeup(tp->t_rsel, tp->t_state&TS_RCOLL); - tp->t_state &= ~TS_RCOLL; - tp->t_rsel = 0; - } - if (tp->t_state & TS_ASYNC) - gsignal(tp->t_pgrp, SIGIO); - if (chu->sleeping) - (void) wakeup((caddr_t)chuc); - } -} - -/* - * Handle ioctls. We reject all tty-style except those that - * change the line discipline. - */ -chuioctl(tp, cmd, data, flag) - struct tty *tp; - int cmd; - caddr_t data; - int flag; -{ - - if ((cmd>>8) != 't') - return (-1); - switch (cmd) { - case TIOCSETD: - case TIOCGETD: - case TIOCGETP: - case TIOCGETC: - return (-1); - } - return (ENOTTY); /* not quite appropriate */ -} - - -chuselect(dev, rw) - dev_t dev; - int rw; -{ - register struct tty *tp = &cdevsw[major(dev)].d_ttys[minor(dev)]; - struct chudata *chu; - int s = spl5(); - - chu = (struct chudata *) (tp->T_LINEP); - - switch (rw) { - - case FREAD: - if (chu->curindex != chu->lastindex) - goto win; - if (tp->t_rsel && tp->t_rsel->p_wchan == (caddr_t)&selwait) - tp->t_state |= TS_RCOLL; - else - tp->t_rsel = u.u_procp; - break; - - case FWRITE: - goto win; - } - splx(s); - return (0); -win: - splx(s); - return (1); -} -#endif NCHU diff --git a/usr.sbin/xntpd/kernel/tty_chu_STREAMS.c b/usr.sbin/xntpd/kernel/tty_chu_STREAMS.c deleted file mode 100644 index f46e25d..0000000 --- a/usr.sbin/xntpd/kernel/tty_chu_STREAMS.c +++ /dev/null @@ -1,603 +0,0 @@ -/* - * CHU STREAMS module for SunOS - * - * Version 2.6 - * - * Copyright 1991-1994, Nick Sayer - * - * Special thanks to Greg Onufer for his debug assists. - * Special thanks to Matthias Urlichs for the 4.1.x loadable driver support - * code. - * Special wet-noodle whippings to Sun for not properly documenting - * ANYTHING that makes this stuff at all possible. - * - * Should be PUSHed directly on top of a serial I/O channel. - * Provides complete chucode structures to user space. - * - * COMPILATION: - * - * - * To make a SunOS 4.1.x compatable loadable module (from the ntp kernel - * directory): - * - * % cc -c -I../include -DLOADABLE tty_chu_STREAMS.c - * - * The resulting .o file is the loadable module. Modload it - * thusly: - * - * % modload tty_chu_STREAMS.o -entry _chuinit - * - * When none of the instances are pushed in a STREAM, you can - * modunload the driver in the usual manner if you wish. - * - * As an alternative to loading it dynamically you can compile it - * directly into the kernel by hacking str_conf.c. See the README - * file for more details on doing it the old fashioned way. - * - * - * To make a Solaris 2.x compatable module (from the ntp kernel - * directory): - * - * % {gcc,cc} -c -I../include -DSOLARIS2 tty_chu_STREAMS.c - * % ld -r -o /usr/kernel/strmod/chu tty_chu_STREAMS.o - * % chmod 755 /usr/kernel/strmod/chu - * - * The OS will load it for you automagically when it is first pushed. - * - * If you get syntax errors from <sys/timer.h> (really references - * to types that weren't typedef'd in gcc's version of types.h), - * add -D_SYS_TIMER_H to blot out the miscreants. - * - * Under Solaris 2.2 and previous, do not attempt to modunload the - * module unless you're SURE it's not in use. I haven't tried it, but - * I've been told it won't do the right thing. Under Solaris 2.3 (and - * presumably future revs) an attempt to unload the module when it's in - * use will properly refuse with a "busy" message. - * - * - * HISTORY: - * - * v2.6 - Mutexed the per-instance chucode just to be safe. - * v2.5 - Fixed show-stopper bug in Solaris 2.x - qprocson(). - * v2.4 - Added dynamic allocation support for Solaris 2.x. - * v2.3 - Added support for Solaris 2.x. - * v2.2 - Added SERVICE IMMEDIATE hack. - * v2.1 - Added 'sixth byte' heuristics. - * v2.0 - first version with an actual version number. - * Added support for new CHU 'second 31' data format. - * Deleted PEDANTIC and ANAL_RETENTIVE. - * - */ - -#ifdef SOLARIS2 -# ifndef NCHU -# define NCHU 1 -# endif -# define _KERNEL -#elif defined(LOADABLE) -# ifndef NCHU -# define NCHU 3 -# define KERNEL -# endif -#else -# include "chu.h" -#endif - -#if NCHU > 0 - -/* - * Number of microseconds we allow between - * character arrivals. The speed is 300 baud - * so this should be somewhat more than 30 msec - */ -#define CHUMAXUSEC (60*1000) /* 60 msec */ - -#include <sys/types.h> -#include <sys/stream.h> -#include <sys/param.h> -#include <sys/time.h> -#include <sys/errno.h> -#include <sys/user.h> -#include <syslog.h> -#include <sys/tty.h> - -#include <sys/chudefs.h> - -#ifdef SOLARIS2 - -#include <sys/ksynch.h> -#include <sys/kmem.h> -#include <sys/cmn_err.h> -#include <sys/conf.h> -#include <sys/strtty.h> -#include <sys/modctl.h> -#include <sys/ddi.h> -#include <sys/sunddi.h> - -#endif - -#ifdef LOADABLE - -#include <sys/kernel.h> -#include <sys/conf.h> -#include <sys/buf.h> -#include <sundev/mbvar.h> -#include <sun/autoconf.h> -#include <sun/vddrv.h> - -#endif - - -static struct module_info rminfo = { 0, "chu", 0, INFPSZ, 0, 0 }; -static struct module_info wminfo = { 0, "chu", 0, INFPSZ, 0, 0 }; -static int chuopen(), churput(), chuwput(), chuclose(); - -static struct qinit rinit = { churput, NULL, chuopen, chuclose, NULL, - &rminfo, NULL }; - -static struct qinit winit = { chuwput, NULL, NULL, NULL, NULL, - &wminfo, NULL }; - -struct streamtab chuinfo = { &rinit, &winit, NULL, NULL }; - -/* - * Here's our private data type and structs - */ -struct priv_data -{ -#ifdef SOLARIS2 - kmutex_t chucode_mutex; -#else - char in_use; -#endif - struct chucode chu_struct; -}; - -#ifndef SOLARIS2 -struct priv_data our_priv_data[NCHU]; -#endif - -#ifdef SOLARIS2 - -static struct fmodsw fsw = -{ - "chu", - &chuinfo, - D_NEW | D_MP -}; - -extern struct mod_ops mod_strmodops; - -static struct modlstrmod modlstrmod = -{ - &mod_strmodops, - "CHU timecode decoder v2.6", - &fsw -}; - -static struct modlinkage modlinkage = -{ - MODREV_1, - (void*) &modlstrmod, - NULL -}; - -int _init() -{ - return mod_install(&modlinkage); -} - -int _info(foo) -struct modinfo *foo; -{ - return mod_info(&modlinkage,foo); -} - -int _fini() -{ - return mod_remove(&modlinkage); -} - -#endif /* SOLARIS2 */ - -#ifdef LOADABLE - -# ifdef sun - -static struct vdldrv vd = -{ - VDMAGIC_PSEUDO, - "chu", - NULL, NULL, NULL, 0, 0, NULL, NULL, 0, 0, -}; - -static struct fmodsw *chu_fmod; - -/*ARGSUSED*/ -chuinit (fc, vdp, vdi, vds) - unsigned int fc; - struct vddrv *vdp; - addr_t vdi; - struct vdstat *vds; -{ - switch (fc) { - case VDLOAD: - { - int dev, i; - - /* Find free entry in fmodsw */ - for (dev = 0; dev < fmodcnt; dev++) { - if (fmodsw[dev].f_str == NULL) - break; - } - if (dev == fmodcnt) - return (ENODEV); - chu_fmod = &fmodsw[dev]; - - /* If you think a kernel would have strcpy() you're mistaken. */ - for (i = 0; i <= FMNAMESZ; i++) - chu_fmod->f_name[i] = wminfo.mi_idname[i]; - - chu_fmod->f_str = &chuinfo; - } - vdp->vdd_vdtab = (struct vdlinkage *) & vd; - - { - int i; - - for (i=0; i<NCHU; i++) - our_priv_data[i].in_use=0; - } - - return 0; - case VDUNLOAD: - { - int dev; - - for (dev = 0; dev < NCHU; dev++) - if (our_priv_data[dev].in_use) { - /* One of the modules is still open */ - return (EBUSY); - } - } - chu_fmod->f_name[0] = '\0'; - chu_fmod->f_str = NULL; - return 0; - case VDSTAT: - return 0; - default: - return EIO; - } -} - -# endif /* sun */ - -#endif /* LOADABLE */ - -#if !defined(LOADABLE) && !defined(SOLARIS2) - -char chu_first_open=1; - -#endif - -/*ARGSUSED*/ -static int chuopen(q, dev, flag, sflag) -queue_t *q; -dev_t dev; -int flag; -int sflag; -{ - int i; - -#if !defined(LOADABLE) && !defined(SOLARIS2) - if (chu_first_open) - { - chu_first_open=0; - - for(i=0;i<NCHU;i++) - our_priv_data[i].in_use=0; - } -#endif - -#ifdef SOLARIS2 - /* According to the docs, calling with KM_SLEEP can never - fail */ - - q->q_ptr = kmem_alloc( sizeof(struct priv_data), KM_SLEEP ); - ((struct priv_data *) q->q_ptr)->chu_struct.ncodechars = 0; - - mutex_init(&((struct priv_data *) q->q_ptr)->chucode_mutex,"Chucode Mutex",MUTEX_DRIVER,NULL); - qprocson(q); - - if (!putnextctl1(WR(q), M_CTL, MC_SERVICEIMM)) - { - qprocsoff(q); - mutex_destroy(&((struct priv_data *)q->q_ptr)->chucode_mutex); - kmem_free(q->q_ptr, sizeof(struct chucode) ); - return (EFAULT); - } - - return 0; - -#else - for(i=0;i<NCHU;i++) - if (!our_priv_data[i].in_use) - { - ((struct priv_data *) (q->q_ptr))=&(our_priv_data[i]); - our_priv_data[i].in_use++; - our_priv_data[i].chu_struct.ncodechars = 0; - if (!putctl1(WR(q)->q_next, M_CTL, MC_SERVICEIMM)) - { - our_priv_data[i].in_use=0; - u.u_error = EFAULT; - return (OPENFAIL); - } - return 0; - } - - u.u_error = EBUSY; - return (OPENFAIL); -#endif - -} - -/*ARGSUSED*/ -static int chuclose(q, flag) -queue_t *q; -int flag; -{ -#ifdef SOLARIS2 - qprocsoff(q); - mutex_destroy(&((struct priv_data *)q->q_ptr)->chucode_mutex); - kmem_free(q->q_ptr, sizeof(struct chucode) ); -#else - ((struct priv_data *) (q->q_ptr))->in_use=0; -#endif - return (0); -} - -/* - * Now the crux of the biscuit. - * - * We will be passed data from the man downstairs. If it's not a data - * packet, it must be important, so pass it along unmunged. If, however, - * it is a data packet, we're gonna do special stuff to it. We're going - * to pass each character we get to the old line discipline code we - * include below for just such an occasion. When the old ldisc code - * gets a full chucode struct, we'll hand it back upstairs. - * - * chuinput takes a single character and q (as quickly as possible). - * passback takes a pointer to a chucode struct and q and sends it upstream. - */ - -void chuinput(); -void passback(); - -static int churput(q, mp) -queue_t *q; -mblk_t *mp; -{ - mblk_t *bp; - - switch(mp->b_datap->db_type) - { - case M_DATA: - for(bp=mp; bp!=NULL; bp=bp->b_cont) - { - while(bp->b_rptr < bp->b_wptr) - chuinput( ((u_char)*(bp->b_rptr++)) , q ); - } - freemsg(mp); - break; - default: - putnext(q,mp); - break; - } - -} - -/* - * Writing to a chu device doesn't make sense, but we'll pass them - * through in case they're important. - */ - -static int chuwput(q, mp) -queue_t *q; -mblk_t *mp; -{ - putnext(q,mp); -} - -/* - * Take a pointer to a filled chucode struct and a queue and - * send the chucode stuff upstream - */ - -void passback(outdata,q) -struct chucode *outdata; -queue_t *q; -{ - mblk_t *mp; - int j; - - mp=(mblk_t*) allocb(sizeof(struct chucode),BPRI_LO); - - if (mp==NULL) - { -#ifdef SOLARIS2 - cmn_err(CE_WARN,"chu module couldn't allocate message block"); -#else - log(LOG_ERR,"chu: cannot allocate message"); -#endif - return; - } - - for(j=0;j<sizeof(struct chucode); j++) - *mp->b_wptr++ = *( ((char*)outdata) + j ); - - putnext(q,mp); -} - -/* - * This routine was copied nearly verbatim from the old line discipline. - */ -void chuinput(c,q) -register u_char c; -queue_t *q; -{ - register struct chucode *chuc; - register int i; - long sec, usec; - struct timeval tv; - - /* - * Quick, Batman, get a timestamp! We need to do this - * right away. The time between the end of the stop bit - * and this point is critical, and should be as nearly - * constant and as short as possible. (Un)fortunately, - * the Sun's clock granularity is so big this isn't a - * major problem. - * - * uniqtime() is totally undocumented, but there you are. - */ - uniqtime(&tv); - -#ifdef SOLARIS2 - mutex_enter(&((struct priv_data *)q->q_ptr)->chucode_mutex); -#endif - - /* - * Now, locate the chu struct once so we don't have to do it - * over and over. - */ - chuc=&(((struct priv_data *) (q->q_ptr))->chu_struct); - - /* - * Compute the difference in this character's time stamp - * and the last. If it exceeds the margin, blow away all - * the characters currently in the buffer. - */ - i = (int)chuc->ncodechars; - if (i > 0) - { - sec = tv.tv_sec - chuc->codetimes[i-1].tv_sec; - usec = tv.tv_usec - chuc->codetimes[i-1].tv_usec; - if (usec < 0) - { - sec -= 1; - usec += 1000000; - } - if (sec != 0 || usec > CHUMAXUSEC) - { - i = 0; - chuc->ncodechars = 0; - } - } - - /* - * Store the character. - */ - chuc->codechars[i] = (u_char)c; - chuc->codetimes[i] = tv; - - /* - * Now we perform the 'sixth byte' heuristics. - * - * This is a long story. - * - * We used to be able to count on the first byte of the code - * having a '6' in the LSD. This prevented most code framing - * errors (garbage before the first byte wouldn't typically - * have a 6 in the LSD). That's no longer the case. - * - * We can get around this, however, by noting that the 6th byte - * must be either equal to or one's complement of the first. - * If we get a sixth byte that ISN'T like that, then it may - * well be that the first byte is garbage. The right thing - * to do is to left-shift the whole buffer one count and - * continue to wait for the sixth byte. - */ - if (i == NCHUCHARS/2) - { - register u_char temp_byte; - - temp_byte=chuc->codechars[i] ^ chuc->codechars[0]; - - if ( (temp_byte) && (temp_byte!=0xff) ) - { - register int t; - /* - * No match. Left-shift the buffer and try again - */ - for(t=0;t<=NCHUCHARS/2;t++) - { - chuc->codechars[t]=chuc->codechars[t+1]; - chuc->codetimes[t]=chuc->codetimes[t+1]; - } - - i--; /* This is because of the ++i immediately following */ - } - } - - /* - * We done yet? - */ - if (++i < NCHUCHARS) - { - /* - * We're not done. Not much to do here. Save the count and wait - * for another character. - */ - chuc->ncodechars = (u_char)i; - } - else - { - /* - * We are done. Mark this buffer full and pass it along. - */ - chuc->ncodechars = NCHUCHARS; - - /* - * Now we have a choice. Either the front half and back half - * have to match, or be one's complement of each other. - * - * So let's try the first byte and see - */ - - if(chuc->codechars[0] == chuc->codechars[NCHUCHARS/2]) - { - chuc->chutype = CHU_TIME; - for( i=0; i<(NCHUCHARS/2); i++) - if (chuc->codechars[i] != chuc->codechars[i+(NCHUCHARS/2)]) - { - chuc->ncodechars = 0; -#ifdef SOLARIS2 - mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex); -#endif - return; - } - } - else - { - chuc->chutype = CHU_YEAR; - for( i=0; i<(NCHUCHARS/2); i++) - if (((chuc->codechars[i] ^ chuc->codechars[i+(NCHUCHARS/2)]) & 0xff) - != 0xff ) - { - chuc->ncodechars = 0; -#ifdef SOLARIS2 - mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex); -#endif - return; - } - } - - passback(chuc,q); /* We're done! */ - chuc->ncodechars = 0; /* Start all over again! */ - } -#ifdef SOLARIS2 - mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex); -#endif -} - -#endif /* NCHU > 0 */ diff --git a/usr.sbin/xntpd/kernel/tty_clk.c b/usr.sbin/xntpd/kernel/tty_clk.c deleted file mode 100644 index 0720610..0000000 --- a/usr.sbin/xntpd/kernel/tty_clk.c +++ /dev/null @@ -1,317 +0,0 @@ -/* tty_clk.c,v 3.1 1993/07/06 01:07:33 jbj Exp - * tty_clk.c - Generic line driver for receiving radio clock timecodes - */ - -#include "clk.h" -#if NCLK > 0 - -#include "../h/param.h" -#include "../h/types.h" -#include "../h/systm.h" -#include "../h/dir.h" -#include "../h/user.h" -#include "../h/ioctl.h" -#include "../h/tty.h" -#include "../h/proc.h" -#include "../h/file.h" -#include "../h/conf.h" -#include "../h/buf.h" -#include "../h/uio.h" -#include "../h/clist.h" - -/* - * This line discipline is intended to provide well performing - * generic support for the reception and time stamping of radio clock - * timecodes. Most radio clock devices return a string where a - * particular character in the code (usually a \r) is on-time - * synchronized with the clock. The idea here is to collect characters - * until (one of) the synchronization character(s) (we allow two) is seen. - * When the magic character arrives we take a timestamp by calling - * microtime() and insert the eight bytes of struct timeval into the - * buffer after the magic character. We then wake up anyone waiting - * for the buffer and return the whole mess on the next read. - * - * To use this the calling program is expected to first open the - * port, and then to set the port into raw mode with the speed - * set appropriately with a TIOCSETP ioctl(), with the erase and kill - * characters set to those to be considered magic (yes, I know this - * is gross, but they were so convenient). If only one character is - * magic you can set then both the same, or perhaps to the alternate - * parity versions of said character. After getting all this set, - * change the line discipline to CLKLDISC and you are on your way. - * - * The only other bit of magic we do in here is to flush the receive - * buffers on writes if the CRMOD flag is set (hack, hack). - */ - -/* - * We run this very much like a raw mode terminal, with the exception - * that we store up characters locally until we hit one of the - * magic ones and then dump it into the rawq all at once. We keep - * the buffered data in clists since we can then often move it to - * the rawq without copying. For sanity we limit the number of - * characters between specials, and the total number of characters - * before we flush the rawq, as follows. - */ -#define CLKLINESIZE (256) -#define NCLKCHARS (CLKLINESIZE*4) - -struct clkdata { - int inuse; - struct clist clkbuf; -}; -#define clk_cc clkbuf.c_cc -#define clk_cf clkbuf.c_cf -#define clk_cl clkbuf.c_cl - -struct clkdata clk_data[NCLK]; - -/* - * Routine for flushing the internal clist - */ -#define clk_bflush(clk) (ndflush(&((clk)->clkbuf), (clk)->clk_cc)) - -int clk_debug = 0; - -/*ARGSUSED*/ -clkopen(dev, tp) - dev_t dev; - register struct tty *tp; -{ - register struct clkdata *clk; - - /* - * Don't allow multiple opens. This will also protect us - * from someone opening /dev/tty - */ - if (tp->t_line == CLKLDISC) - return (EBUSY); - ttywflush(tp); - for (clk = clk_data; clk < &clk_data[NCLK]; clk++) - if (!clk->inuse) - break; - if (clk >= &clk_data[NCLK]) - return (EBUSY); - clk->inuse++; - clk->clk_cc = 0; - clk->clk_cf = clk->clk_cl = NULL; - tp->T_LINEP = (caddr_t) clk; - return (0); -} - - -/* - * Break down... called when discipline changed or from device - * close routine. - */ -clkclose(tp) - register struct tty *tp; -{ - register struct clkdata *clk; - register int s = spltty(); - - clk = (struct clkdata *)tp->T_LINEP; - if (clk->clk_cc > 0) - clk_bflush(clk); - clk->inuse = 0; - tp->t_line = 0; /* paranoid: avoid races */ - splx(s); -} - - -/* - * Receive a write request. We pass these requests on to the terminal - * driver, except that if the CRMOD bit is set in the flags we - * first flush the input queues. - */ -clkwrite(tp, uio) - register struct tty *tp; - struct uio *uio; -{ - if (tp->t_flags & CRMOD) { - register struct clkdata *clk; - int s; - - s = spltty(); - if (tp->t_rawq.c_cc > 0) - ndflush(&tp->t_rawq, tp->t_rawq.c_cc); - clk = (struct clkdata *) tp->T_LINEP; - if (clk->clk_cc > 0) - clk_bflush(clk); - (void)splx(s); - } - ttwrite(tp, uio); -} - - -/* - * Low level character input routine. - * If the character looks okay, grab a time stamp. If the stuff in - * the buffer is too old, dump it and start fresh. If the character is - * non-BCDish, everything in the buffer too. - */ -clkinput(c, tp) - register int c; - register struct tty *tp; -{ - register struct clkdata *clk; - register int i; - register long s; - struct timeval tv; - - /* - * Check to see whether this isn't the magic character. If not, - * save the character and return. - */ -#ifdef ultrix - if (c != tp->t_cc[VERASE] && c != tp->t_cc[VKILL]) { -#else - if (c != tp->t_erase && c != tp->t_kill) { -#endif - clk = (struct clkdata *) tp->T_LINEP; - if (clk->clk_cc >= CLKLINESIZE) - clk_bflush(clk); - if (putc(c, &clk->clkbuf) == -1) { - /* - * Hopeless, no clists. Flush what we have - * and hope things improve. - */ - clk_bflush(clk); - } - return; - } - - /* - * Here we have a magic character. Get a timestamp and store - * everything. - */ - microtime(&tv); - clk = (struct clkdata *) tp->T_LINEP; - - if (putc(c, &clk->clkbuf) == -1) - goto flushout; - -#ifdef CLKLDISC - /* - * STREAMS people started writing timestamps this way. - * It's not my fault, I am just going along with the flow... - */ - for (i = 0; i < sizeof(struct timeval); i++) - if (putc(*( ((char*)&tv) + i ), &clk->clkbuf) == -1) - goto flushout; -#else - /* - * This is a machine independant way of puting longs into - * the datastream. It has fallen into disuse... - */ - s = tv.tv_sec; - for (i = 0; i < sizeof(long); i++) { - if (putc((s >> 24) & 0xff, &clk->clkbuf) == -1) - goto flushout; - s <<= 8; - } - - s = tv.tv_usec; - for (i = 0; i < sizeof(long); i++) { - if (putc((s >> 24) & 0xff, &clk->clkbuf) == -1) - goto flushout; - s <<= 8; - } -#endif - - /* - * If the length of the rawq exceeds our sanity limit, dump - * all the old crap in there before copying this in. - */ - if (tp->t_rawq.c_cc > NCLKCHARS) - ndflush(&tp->t_rawq, tp->t_rawq.c_cc); - - /* - * Now copy the buffer in. There is a special case optimization - * here. If there is nothing on the rawq at present we can - * just copy the clists we own over. Otherwise we must concatenate - * the present data on the end. - */ - s = (long)spltty(); - if (tp->t_rawq.c_cc <= 0) { - tp->t_rawq = clk->clkbuf; - clk->clk_cc = 0; - clk->clk_cl = clk->clk_cf = NULL; - (void) splx((int)s); - } else { - (void) splx((int)s); - catq(&clk->clkbuf, &tp->t_rawq); - clk_bflush(clk); - } - - /* - * Tell the world - */ - ttwakeup(tp); - return; - -flushout: - /* - * It would be nice if this never happened. Flush the - * internal clists and hope someone else frees some of them - */ - clk_bflush(clk); - return; -} - - -/* - * Handle ioctls. We reject most tty-style except those that - * change the line discipline and a couple of others.. - */ -clkioctl(tp, cmd, data, flag) - struct tty *tp; - int cmd; - caddr_t data; - int flag; -{ - int flags; - struct sgttyb *sg; - - if ((cmd>>8) != 't') - return (-1); - switch (cmd) { - case TIOCSETD: - case TIOCGETD: - case TIOCGETP: - case TIOCGETC: - case TIOCOUTQ: - return (-1); - - case TIOCSETP: - /* - * He likely wants to set new magic characters in. - * Do this part. - */ - sg = (struct sgttyb *)data; -#ifdef ultrix - tp->t_cc[VERASE] = sg->sg_erase; - tp->t_cc[VKILL] = sg->sg_kill; -#else - tp->t_erase = sg->sg_erase; - tp->t_kill = sg->sg_kill; -#endif - return (0); - - case TIOCFLUSH: - flags = *(int *)data; - if (flags == 0 || (flags & FREAD)) { - register struct clkdata *clk; - - clk = (struct clkdata *) tp->T_LINEP; - if (clk->clk_cc > 0) - clk_bflush(clk); - } - return (-1); - - default: - break; - } - return (ENOTTY); /* not quite appropriate */ -} -#endif NCLK diff --git a/usr.sbin/xntpd/kernel/tty_clk_STREAMS.c b/usr.sbin/xntpd/kernel/tty_clk_STREAMS.c deleted file mode 100644 index 13b0a25..0000000 --- a/usr.sbin/xntpd/kernel/tty_clk_STREAMS.c +++ /dev/null @@ -1,266 +0,0 @@ -/* tty_clk_STREAMS.c,v 3.1 1993/07/06 01:07:34 jbj Exp - * Timestamp STREAMS module for SunOS 4.1 - * - * Copyright 1991, Nick Sayer - * - * Special thanks to Greg Onufer for his debug assists. - * - * Should be PUSHed directly on top of a serial I/O channel. - * For any character in a user-designated set, adds a kernel - * timestamp to that character. - * - * BUGS: - * - * Only so many characters can be timestamped. This number, however, - * is adjustable. - * - * The null character ($00) cannot be timestamped. - * - * The M_DATA messages passed upstream will not be the same - * size as when they arrive from downstream, even if no - * timestamp character is in the message. This, however, - * should not affect anything. - * - */ - -#include "clk.h" -#if NCLK > 0 -/* - * How big should the messages we pass upstream be? - */ -#define MESSAGE_SIZE 128 - -#include <string.h> -#include <sys/types.h> -#include <sys/stream.h> -#include <sys/param.h> -#include <sys/time.h> -#include <sys/kernel.h> -#include <sys/user.h> -#include <sys/errno.h> -#include <sys/syslog.h> - -#include <sys/clkdefs.h> - -static struct module_info rminfo = { 0, "clk", 0, INFPSZ, 0, 0 }; -static struct module_info wminfo = { 0, "clk", 0, INFPSZ, 0, 0 }; -static int clkopen(), clkrput(), clkwput(), clkclose(); - -static struct qinit rinit = { clkrput, NULL, clkopen, clkclose, NULL, - &rminfo, NULL }; - -static struct qinit winit = { clkwput, NULL, NULL, NULL, NULL, - &wminfo, NULL }; - -struct streamtab clkinfo = { &rinit, &winit, NULL, NULL }; - -struct priv_data_type -{ - char in_use; - char string[CLK_MAXSTRSIZE]; -} priv_data[NCLK]; - -char first_open=1; - -/* - * God only knows why, but linking with strchr() fails - * on my system, so here's a renamed copy. - */ - -u_char *str_chr(s,c) -u_char *s; -int c; -{ - while (*s) - if(*s++ == c) - return (s-1); - return NULL; -} - -/*ARGSUSED*/ -static int clkopen(q, dev, flag, sflag) -queue_t *q; -dev_t dev; -int flag; -int sflag; -{ - int i; - -/* Damn it! We can't even have the global data struct properly - initialized! So we have a mark to tell us to init the global - data on the first open */ - - if (first_open) - { - first_open=0; - - for(i=0;i<NCLK;i++) - priv_data[i].in_use=0; - } - - for(i=0;i<NCLK;i++) - if(!priv_data[i].in_use) - { - priv_data[i].in_use++; - ((struct priv_data_type *) (q->q_ptr))=priv_data+i; - priv_data[i].string[0]=0; - return (0); - } - u.u_error = EBUSY; - return (OPENFAIL); -} - -/*ARGSUSED*/ -static int clkclose(q, flag) -queue_t *q; -int flag; -{ - ((struct priv_data_type *) (q->q_ptr))->in_use=0; - - return (0); -} - -/* - * Now the crux of the biscuit. - * - * If it's an M_DATA package, we take each character and pass - * it to clkchar. - */ - -void clkchar(); - -static int clkrput(q, mp) -queue_t *q; -mblk_t *mp; -{ - mblk_t *bp; - - switch(mp->b_datap->db_type) - { - case M_DATA: - clkchar(0,q,2); - for(bp=mp; bp!=NULL; bp=bp->b_cont) - { - while(bp->b_rptr < bp->b_wptr) - clkchar( ((u_char)*(bp->b_rptr++)) , q , 0 ); - } - clkchar(0,q,1); - freemsg(mp); - break; - default: - putnext(q,mp); - break; - } - -} - -/* - * If it's a matching M_IOCTL, handle it. - */ - -static int clkwput(q, mp) -queue_t *q; -mblk_t *mp; -{ - struct iocblk *iocp; - - switch(mp->b_datap->db_type) - { - case M_IOCTL: - iocp=(struct iocblk*) mp->b_rptr; - if (iocp->ioc_cmd==CLK_SETSTR) - { - strncpy( ((struct priv_data_type *) (RD(q)->q_ptr))->string, - (char *) mp->b_cont->b_rptr,CLK_MAXSTRSIZE); - /* make sure it's null terminated */ - ((struct priv_data_type *) (RD(q)->q_ptr))->string[CLK_MAXSTRSIZE-1]=0; - mp->b_datap->db_type = M_IOCACK; - qreply(q,mp); - } - else - putnext(q,mp); - break; - default: - putnext(q,mp); - break; - } -} - -/* - * Now clkchar. It takes a character, a queue pointer and an action - * flag and depending on the flag either: - * - * 0 - adds the character to the current message. If there's a - * timestamp to be done, do that too. If the message is less than - * 8 chars from being full, link in a new one, and set it up for - * the next call. - * - * 1 - sends the whole mess to Valhala. - * - * 2 - set things up. - * - * Yeah, it's an ugly hack. Complaints may be filed with /dev/null. - */ - - -void clkchar(c,q,f) - register u_char c; - queue_t *q; - char f; -{ - static char error; - static mblk_t *message,*mp; - struct timeval tv; - -/* Get a timestamp ASAP! */ - uniqtime(&tv); - - switch(f) - { - case 1: - if (!error) - putnext(q,message); - break; - case 2: - mp=message= (mblk_t*) allocb(MESSAGE_SIZE,BPRI_LO); - error=(message==NULL); - if (error) - log(LOG_ERR,"clk: cannot allocate message - data lost"); - break; - case 0: - if (error) /* If we had an error, forget it. */ - return; - - *mp->b_wptr++=c; /* Put the char away first. - - /* If it's in the special string, append a struct timeval */ - - if (str_chr( ((struct priv_data_type *) (q->q_ptr))->string , - c )!=NULL) - { - int i; - - for (i=0;i<sizeof(struct timeval);i++) - *mp->b_wptr++= *( ((char*)&tv) + i ); - } - - /* If we don't have space for a complete struct timeval, and a - char, it's time for a new mp block */ - - if (((mp->b_wptr-mp->b_rptr)+sizeof(struct timeval)+2)>MESSAGE_SIZE) - { - mp->b_cont= (mblk_t*) allocb(MESSAGE_SIZE,BPRI_LO); - error=(mp->b_cont==NULL); - if (error) - { - log(LOG_ERR,"clk: cannot allocate message - data lost"); - freemsg(message); - } - mp=mp->b_cont; - } - - break; - } -} - -#endif diff --git a/usr.sbin/xntpd/lib/Makefile.tmpl b/usr.sbin/xntpd/lib/Makefile.tmpl deleted file mode 100644 index 1a8d020..0000000 --- a/usr.sbin/xntpd/lib/Makefile.tmpl +++ /dev/null @@ -1,75 +0,0 @@ -# -# Makefile.tmpl -# -LIBNAME= libntp -# -# xntp routines which are used a lot of places -# -COMPILER= cc -COPTS= -O -AUTHDEFS=-DDES -LIBDEFS= -DBIG_ENDIAN -RANLIB= ranlib -INSTALL= install -CLOCKDEFS= -DEFS= -DEFS_OPT= -DEFS_LOCAL= -# -INCL=-I../include -CFLAGS= $(COPTS) $(AUTHDEFS) $(LIBDEFS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -# -SOURCE= atoint.c atolfp.c atouint.c auth12crypt.c authdecrypt.c authdes.c \ - authencrypt.c authkeys.c authparity.c authreadkeys.c authusekey.c \ - buftvtots.c caljulian.c calleapwhen.c caltontp.c calyearstart.c \ - clocktime.c dofptoa.c dolfptoa.c emalloc.c fptoa.c fptoms.c getopt.c \ - gettstamp.c hextoint.c hextolfp.c humandate.c inttoa.c \ - lib_strbuf.c mfptoa.c mfptoms.c modetoa.c mstolfp.c \ - msutotsf.c numtoa.c refnumtoa.c numtohost.c octtoint.c \ - prettydate.c ranny.c tsftomsu.c tstotv.c tvtoa.c tvtots.c \ - uglydate.c uinttoa.c utvtoa.c machines.c clocktypes.c \ - md5.c a_md5encrypt.c a_md5decrypt.c \ - a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \ - findconfig.c netof.c - -OBJS= atoint.o atolfp.o atouint.o auth12crypt.o authdecrypt.o authdes.o \ - authencrypt.o authkeys.o authparity.o authreadkeys.o authusekey.o \ - buftvtots.o caljulian.o calleapwhen.o caltontp.o calyearstart.o \ - clocktime.o dofptoa.o dolfptoa.o emalloc.o fptoa.o fptoms.o getopt.o \ - gettstamp.o hextoint.o hextolfp.o humandate.o inttoa.o \ - lib_strbuf.o mfptoa.o mfptoms.o modetoa.o mstolfp.o \ - msutotsf.o numtoa.o refnumtoa.o numtohost.o octtoint.o \ - prettydate.o ranny.o tsftomsu.o tstotv.o tvtoa.o tvtots.o \ - uglydate.o uinttoa.o utvtoa.o machines.o clocktypes.o \ - md5.o a_md5encrypt.o a_md5decrypt.o \ - a_md512crypt.o decodenetnum.o systime.o msyslog.o syssignal.o \ - findconfig.o netof.o - -$(LIBNAME).a: $(OBJS) - ar rv $@ $? - -rm -f $? - @if ( ../scripts/hpadjtime.sh ) > /dev/null 2>&1; then \ - ( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \ - else \ - :; \ - fi - $(RANLIB) $@ - -lintlib: llib-l$(LIBNAME).ln - -llib-l$(LIBNAME).ln: $(SOURCE) - lint -C$(LIBNAME) $(INCL) $(CLOCKDEFS) $(AUTHDEFS) $(LIBDEFS) $(SOURCE) >lintlib.errs - -lint: - lint -u $(DEFS) $(INCL) $(CLOCKDEFS) $(AUTHDEFS) $(LIBDEFS) $(SOURCE) >lint.errs - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(LIBNAME).a *.o *.out *.ln make.log Makefile.bak \ - lintlib.errs lint.errs - -distclean: clean - -@rm -f *.orig *.rej .version Makefile diff --git a/usr.sbin/xntpd/lib/authdes.c b/usr.sbin/xntpd/lib/authdes.c deleted file mode 100644 index dd122de..0000000 --- a/usr.sbin/xntpd/lib/authdes.c +++ /dev/null @@ -1,845 +0,0 @@ -/* - * authdes.c - an implementation of the DES cipher algorithm for NTP - */ -#include "ntp_stdlib.h" - -/* - * There are two entries in here. auth_subkeys() called to - * compute the encryption and decryption key schedules, while - * auth_des() is called to do the actual encryption/decryption - */ - -/* - * Key setup. Here we entirely permute a key, saving the results - * for both the encryption and decryption. Note that while the - * decryption subkeys are simply the encryption keys reordered, - * we save both so that a common cipher routine may be used. - */ - -/* - * Permuted choice 1 tables. These are used to extract bits - * from the left and right parts of the key to form Ci and Di. - * The code that uses these tables knows which bits from which - * part of each key are used to form Ci and Di. - */ -static U_LONG PC1_CL[8] = { - 0x00000000, 0x00000010, 0x00001000, 0x00001010, - 0x00100000, 0x00100010, 0x00101000, 0x00101010 -}; - -static U_LONG PC1_DL[16] = { - 0x00000000, 0x00100000, 0x00001000, 0x00101000, - 0x00000010, 0x00100010, 0x00001010, 0x00101010, - 0x00000001, 0x00100001, 0x00001001, 0x00101001, - 0x00000011, 0x00100011, 0x00001011, 0x00101011 -}; - -static U_LONG PC1_CR[16] = { - 0x00000000, 0x00000001, 0x00000100, 0x00000101, - 0x00010000, 0x00010001, 0x00010100, 0x00010101, - 0x01000000, 0x01000001, 0x01000100, 0x01000101, - 0x01010000, 0x01010001, 0x01010100, 0x01010101 -}; - -static U_LONG PC1_DR[8] = { - 0x00000000, 0x01000000, 0x00010000, 0x01010000, - 0x00000100, 0x01000100, 0x00010100, 0x01010100 -}; - - -/* - * At the start of some iterations of the key schedule we do - * a circular left shift by one place, while for others we do a shift by - * two places. This has bits set for the iterations where we do 2 bit - * shifts, starting at the low order bit. - */ -#define TWO_BIT_SHIFTS 0x7efc - -/* - * Permuted choice 2 tables. The first actually produces the low order - * 24 bits of the subkey Ki from the 28 bit value of Ci. The second produces - * the high order 24 bits from Di. The tables are indexed by six bit - * segments of Ci and Di respectively. The code is handcrafted to compute - * the appropriate 6 bit chunks. - * - * Note that for ease of computation, the 24 bit values are produced with - * six bits going into each byte. - */ -static U_LONG PC2_C[4][64] = { - { 0x00000000, 0x00040000, 0x01000000, 0x01040000, - 0x00000400, 0x00040400, 0x01000400, 0x01040400, - 0x00200000, 0x00240000, 0x01200000, 0x01240000, - 0x00200400, 0x00240400, 0x01200400, 0x01240400, - 0x00000001, 0x00040001, 0x01000001, 0x01040001, - 0x00000401, 0x00040401, 0x01000401, 0x01040401, - 0x00200001, 0x00240001, 0x01200001, 0x01240001, - 0x00200401, 0x00240401, 0x01200401, 0x01240401, - 0x02000000, 0x02040000, 0x03000000, 0x03040000, - 0x02000400, 0x02040400, 0x03000400, 0x03040400, - 0x02200000, 0x02240000, 0x03200000, 0x03240000, - 0x02200400, 0x02240400, 0x03200400, 0x03240400, - 0x02000001, 0x02040001, 0x03000001, 0x03040001, - 0x02000401, 0x02040401, 0x03000401, 0x03040401, - 0x02200001, 0x02240001, 0x03200001, 0x03240001, - 0x02200401, 0x02240401, 0x03200401, 0x03240401 }, - - { 0x00000000, 0x00000002, 0x00000800, 0x00000802, - 0x08000000, 0x08000002, 0x08000800, 0x08000802, - 0x00010000, 0x00010002, 0x00010800, 0x00010802, - 0x08010000, 0x08010002, 0x08010800, 0x08010802, - 0x00000100, 0x00000102, 0x00000900, 0x00000902, - 0x08000100, 0x08000102, 0x08000900, 0x08000902, - 0x00010100, 0x00010102, 0x00010900, 0x00010902, - 0x08010100, 0x08010102, 0x08010900, 0x08010902, - 0x00000010, 0x00000012, 0x00000810, 0x00000812, - 0x08000010, 0x08000012, 0x08000810, 0x08000812, - 0x00010010, 0x00010012, 0x00010810, 0x00010812, - 0x08010010, 0x08010012, 0x08010810, 0x08010812, - 0x00000110, 0x00000112, 0x00000910, 0x00000912, - 0x08000110, 0x08000112, 0x08000910, 0x08000912, - 0x00010110, 0x00010112, 0x00010910, 0x00010912, - 0x08010110, 0x08010112, 0x08010910, 0x08010912 }, - - { 0x00000000, 0x04000000, 0x00002000, 0x04002000, - 0x10000000, 0x14000000, 0x10002000, 0x14002000, - 0x00000020, 0x04000020, 0x00002020, 0x04002020, - 0x10000020, 0x14000020, 0x10002020, 0x14002020, - 0x00080000, 0x04080000, 0x00082000, 0x04082000, - 0x10080000, 0x14080000, 0x10082000, 0x14082000, - 0x00080020, 0x04080020, 0x00082020, 0x04082020, - 0x10080020, 0x14080020, 0x10082020, 0x14082020, - 0x20000000, 0x24000000, 0x20002000, 0x24002000, - 0x30000000, 0x34000000, 0x30002000, 0x34002000, - 0x20000020, 0x24000020, 0x20002020, 0x24002020, - 0x30000020, 0x34000020, 0x30002020, 0x34002020, - 0x20080000, 0x24080000, 0x20082000, 0x24082000, - 0x30080000, 0x34080000, 0x30082000, 0x34082000, - 0x20080020, 0x24080020, 0x20082020, 0x24082020, - 0x30080020, 0x34080020, 0x30082020, 0x34082020 }, - - { 0x00000000, 0x00100000, 0x00000008, 0x00100008, - 0x00000200, 0x00100200, 0x00000208, 0x00100208, - 0x00020000, 0x00120000, 0x00020008, 0x00120008, - 0x00020200, 0x00120200, 0x00020208, 0x00120208, - 0x00000004, 0x00100004, 0x0000000c, 0x0010000c, - 0x00000204, 0x00100204, 0x0000020c, 0x0010020c, - 0x00020004, 0x00120004, 0x0002000c, 0x0012000c, - 0x00020204, 0x00120204, 0x0002020c, 0x0012020c, - 0x00001000, 0x00101000, 0x00001008, 0x00101008, - 0x00001200, 0x00101200, 0x00001208, 0x00101208, - 0x00021000, 0x00121000, 0x00021008, 0x00121008, - 0x00021200, 0x00121200, 0x00021208, 0x00121208, - 0x00001004, 0x00101004, 0x0000100c, 0x0010100c, - 0x00001204, 0x00101204, 0x0000120c, 0x0010120c, - 0x00021004, 0x00121004, 0x0002100c, 0x0012100c, - 0x00021204, 0x00121204, 0x0002120c, 0x0012120c } -}; - -static U_LONG PC2_D[4][64] = { - { 0x00000000, 0x00000200, 0x00020000, 0x00020200, - 0x00000001, 0x00000201, 0x00020001, 0x00020201, - 0x08000000, 0x08000200, 0x08020000, 0x08020200, - 0x08000001, 0x08000201, 0x08020001, 0x08020201, - 0x00200000, 0x00200200, 0x00220000, 0x00220200, - 0x00200001, 0x00200201, 0x00220001, 0x00220201, - 0x08200000, 0x08200200, 0x08220000, 0x08220200, - 0x08200001, 0x08200201, 0x08220001, 0x08220201, - 0x00000002, 0x00000202, 0x00020002, 0x00020202, - 0x00000003, 0x00000203, 0x00020003, 0x00020203, - 0x08000002, 0x08000202, 0x08020002, 0x08020202, - 0x08000003, 0x08000203, 0x08020003, 0x08020203, - 0x00200002, 0x00200202, 0x00220002, 0x00220202, - 0x00200003, 0x00200203, 0x00220003, 0x00220203, - 0x08200002, 0x08200202, 0x08220002, 0x08220202, - 0x08200003, 0x08200203, 0x08220003, 0x08220203 }, - - { 0x00000000, 0x00000010, 0x20000000, 0x20000010, - 0x00100000, 0x00100010, 0x20100000, 0x20100010, - 0x00000800, 0x00000810, 0x20000800, 0x20000810, - 0x00100800, 0x00100810, 0x20100800, 0x20100810, - 0x04000000, 0x04000010, 0x24000000, 0x24000010, - 0x04100000, 0x04100010, 0x24100000, 0x24100010, - 0x04000800, 0x04000810, 0x24000800, 0x24000810, - 0x04100800, 0x04100810, 0x24100800, 0x24100810, - 0x00000004, 0x00000014, 0x20000004, 0x20000014, - 0x00100004, 0x00100014, 0x20100004, 0x20100014, - 0x00000804, 0x00000814, 0x20000804, 0x20000814, - 0x00100804, 0x00100814, 0x20100804, 0x20100814, - 0x04000004, 0x04000014, 0x24000004, 0x24000014, - 0x04100004, 0x04100014, 0x24100004, 0x24100014, - 0x04000804, 0x04000814, 0x24000804, 0x24000814, - 0x04100804, 0x04100814, 0x24100804, 0x24100814 }, - - { 0x00000000, 0x00001000, 0x00010000, 0x00011000, - 0x02000000, 0x02001000, 0x02010000, 0x02011000, - 0x00000020, 0x00001020, 0x00010020, 0x00011020, - 0x02000020, 0x02001020, 0x02010020, 0x02011020, - 0x00040000, 0x00041000, 0x00050000, 0x00051000, - 0x02040000, 0x02041000, 0x02050000, 0x02051000, - 0x00040020, 0x00041020, 0x00050020, 0x00051020, - 0x02040020, 0x02041020, 0x02050020, 0x02051020, - 0x00002000, 0x00003000, 0x00012000, 0x00013000, - 0x02002000, 0x02003000, 0x02012000, 0x02013000, - 0x00002020, 0x00003020, 0x00012020, 0x00013020, - 0x02002020, 0x02003020, 0x02012020, 0x02013020, - 0x00042000, 0x00043000, 0x00052000, 0x00053000, - 0x02042000, 0x02043000, 0x02052000, 0x02053000, - 0x00042020, 0x00043020, 0x00052020, 0x00053020, - 0x02042020, 0x02043020, 0x02052020, 0x02053020 }, - - { 0x00000000, 0x00000400, 0x01000000, 0x01000400, - 0x00000100, 0x00000500, 0x01000100, 0x01000500, - 0x10000000, 0x10000400, 0x11000000, 0x11000400, - 0x10000100, 0x10000500, 0x11000100, 0x11000500, - 0x00080000, 0x00080400, 0x01080000, 0x01080400, - 0x00080100, 0x00080500, 0x01080100, 0x01080500, - 0x10080000, 0x10080400, 0x11080000, 0x11080400, - 0x10080100, 0x10080500, 0x11080100, 0x11080500, - 0x00000008, 0x00000408, 0x01000008, 0x01000408, - 0x00000108, 0x00000508, 0x01000108, 0x01000508, - 0x10000008, 0x10000408, 0x11000008, 0x11000408, - 0x10000108, 0x10000508, 0x11000108, 0x11000508, - 0x00080008, 0x00080408, 0x01080008, 0x01080408, - 0x00080108, 0x00080508, 0x01080108, 0x01080508, - 0x10080008, 0x10080408, 0x11080008, 0x11080408, - 0x10080108, 0x10080508, 0x11080108, 0x11080508 } -}; - - - -/* - * Permute the key to give us our key schedule. - */ -void -DESauth_subkeys(key, encryptkeys, decryptkeys) - const U_LONG *key; - u_char *encryptkeys; - u_char *decryptkeys; -{ - register U_LONG tmp; - register U_LONG c, d; - register u_char *ek, *dk; - register int two_bit_shifts; - register int i; - - /* - * The first permutted choice gives us the 28 bits for C0 and - * 28 for D0. C0 gets 12 bits from the left key and 16 from - * the right, while D0 gets 16 from the left and 12 from the - * right. The code knows which bits go where. - */ - tmp = *key; /* left part of key */ - c = PC1_CL[(tmp >> 29) & 0x7] - | (PC1_CL[(tmp >> 21) & 0x7] << 1) - | (PC1_CL[(tmp >> 13) & 0x7] << 2) - | (PC1_CL[(tmp >> 5) & 0x7] << 3); - d = PC1_DL[(tmp >> 25) & 0xf] - | (PC1_DL[(tmp >> 17) & 0xf] << 1) - | (PC1_DL[(tmp >> 9) & 0xf] << 2) - | (PC1_DL[(tmp >> 1) & 0xf] << 3); - - tmp = *(key+1); /* right part of key */ - c |= PC1_CR[(tmp >> 28) & 0xf] - | (PC1_CR[(tmp >> 20) & 0xf] << 1) - | (PC1_CR[(tmp >> 12) & 0xf] << 2) - | (PC1_CR[(tmp >> 4) & 0xf] << 3); - d |= PC1_DR[(tmp >> 25) & 0x7] - | (PC1_DR[(tmp >> 17) & 0x7] << 1) - | (PC1_DR[(tmp >> 9) & 0x7] << 2) - | (PC1_DR[(tmp >> 1) & 0x7] << 3); - - /* - * Now iterate to compute the key schedule. Note that we - * record the entire set of subkeys in 6 bit chunks since - * they are used that way. At 6 bits/char, we need - * 48/6 char's/subkey * 16 subkeys/encryption == 128 chars. - * encryptkeys and decryptkeys must be this big. - */ - ek = encryptkeys; - dk = decryptkeys + (8 * 15); - two_bit_shifts = TWO_BIT_SHIFTS; - for (i = 16; i > 0; i--) { - /* - * Do the rotation. One bit and two bit rotations - * are done separately. Note C and D are 28 bits. - */ - if (two_bit_shifts & 0x1) { - c = ((c << 2) & 0xffffffc) | (c >> 26); - d = ((d << 2) & 0xffffffc) | (d >> 26); - } else { - c = ((c << 1) & 0xffffffe) | (c >> 27); - d = ((d << 1) & 0xffffffe) | (d >> 27); - } - two_bit_shifts >>= 1; - - /* - * Apply permutted choice 2 to C to get the first - * 24 bits worth of keys. Note that bits 9, 18, 22 - * and 25 (using DES numbering) in C are unused. The - * shift-mask stuff is done to delete these bits from - * the indices, since this cuts the table size in half. - */ - tmp = PC2_C[0][((c >> 22) & 0x3f)] - | PC2_C[1][((c >> 15) & 0xf) | ((c >> 16) & 0x30)] - | PC2_C[2][((c >> 4) & 0x3) | ((c >> 9) & 0x3c)] - | PC2_C[3][((c ) & 0x7) | ((c >> 4) & 0x38)]; - *ek++ = *dk++ = (u_char)(tmp >> 24); - *ek++ = *dk++ = (u_char)(tmp >> 16); - *ek++ = *dk++ = (u_char)(tmp >> 8); - *ek++ = *dk++ = (u_char)tmp; - - /* - * Apply permutted choice 2 to D to get the other half. - * Here, bits 7, 10, 15 and 26 go unused. The sqeezing - * actually turns out to be cheaper here. - */ - tmp = PC2_D[0][((d >> 22) & 0x3f)] - | PC2_D[1][((d >> 14) & 0xf) | ((d >> 15) & 0x30)] - | PC2_D[2][((d >> 7) & 0x3f)] - | PC2_D[3][((d ) & 0x3) | ((d >> 1) & 0x3c)]; - *ek++ = *dk++ = (u_char)(tmp >> 24); - *ek++ = *dk++ = (u_char)(tmp >> 16); - *ek++ = *dk++ = (u_char)(tmp >> 8); - *ek++ = *dk++ = (u_char)tmp; - - /* - * We are filling in the decryption subkeys from the end. - * Space it back 16 elements to get to the start of the - * next set. - */ - dk -= 16; - } -} - -/* - * The DES algorithm. This is intended to be fairly speedy at the - * expense of some memory. - * - * This uses all the standard hacks. The S boxes and the P permutation - * are precomputed into one table. The E box never actually appears - * explicitly since it is easy to apply this algorithmically. The - * initial permutation and final (inverse initial) permuation are - * computed from tables designed to permute four bits at a time. This - * should run pretty fast on machines with 32 bit words and - * bit field/multiple bit shift instructions which are fast. - */ - -/* - * The initial permutation array. This is used to compute both the - * left and the right halves of the initial permutation using bytes - * from words made from the following operations: - * - * ((left & 0x55555555) << 1) | (right & 0x55555555) for left half - * (left & 0xaaaaaaaa) | ((right & 0xaaaaaaaa) >> 1) for right half - * - * The scheme is that we index into the table using each byte. The - * result from the high order byte is or'd with the result from the - * next byte shifted left once is or'd with the result from the next - * byte shifted left twice if or'd with the result from the low order - * byte shifted left by three. Clear? - */ -static U_LONG IP[256] = { - 0x00000000, 0x00000010, 0x00000001, 0x00000011, - 0x00001000, 0x00001010, 0x00001001, 0x00001011, - 0x00000100, 0x00000110, 0x00000101, 0x00000111, - 0x00001100, 0x00001110, 0x00001101, 0x00001111, - 0x00100000, 0x00100010, 0x00100001, 0x00100011, - 0x00101000, 0x00101010, 0x00101001, 0x00101011, - 0x00100100, 0x00100110, 0x00100101, 0x00100111, - 0x00101100, 0x00101110, 0x00101101, 0x00101111, - 0x00010000, 0x00010010, 0x00010001, 0x00010011, - 0x00011000, 0x00011010, 0x00011001, 0x00011011, - 0x00010100, 0x00010110, 0x00010101, 0x00010111, - 0x00011100, 0x00011110, 0x00011101, 0x00011111, - 0x00110000, 0x00110010, 0x00110001, 0x00110011, - 0x00111000, 0x00111010, 0x00111001, 0x00111011, - 0x00110100, 0x00110110, 0x00110101, 0x00110111, - 0x00111100, 0x00111110, 0x00111101, 0x00111111, - 0x10000000, 0x10000010, 0x10000001, 0x10000011, - 0x10001000, 0x10001010, 0x10001001, 0x10001011, - 0x10000100, 0x10000110, 0x10000101, 0x10000111, - 0x10001100, 0x10001110, 0x10001101, 0x10001111, - 0x10100000, 0x10100010, 0x10100001, 0x10100011, - 0x10101000, 0x10101010, 0x10101001, 0x10101011, - 0x10100100, 0x10100110, 0x10100101, 0x10100111, - 0x10101100, 0x10101110, 0x10101101, 0x10101111, - 0x10010000, 0x10010010, 0x10010001, 0x10010011, - 0x10011000, 0x10011010, 0x10011001, 0x10011011, - 0x10010100, 0x10010110, 0x10010101, 0x10010111, - 0x10011100, 0x10011110, 0x10011101, 0x10011111, - 0x10110000, 0x10110010, 0x10110001, 0x10110011, - 0x10111000, 0x10111010, 0x10111001, 0x10111011, - 0x10110100, 0x10110110, 0x10110101, 0x10110111, - 0x10111100, 0x10111110, 0x10111101, 0x10111111, - 0x01000000, 0x01000010, 0x01000001, 0x01000011, - 0x01001000, 0x01001010, 0x01001001, 0x01001011, - 0x01000100, 0x01000110, 0x01000101, 0x01000111, - 0x01001100, 0x01001110, 0x01001101, 0x01001111, - 0x01100000, 0x01100010, 0x01100001, 0x01100011, - 0x01101000, 0x01101010, 0x01101001, 0x01101011, - 0x01100100, 0x01100110, 0x01100101, 0x01100111, - 0x01101100, 0x01101110, 0x01101101, 0x01101111, - 0x01010000, 0x01010010, 0x01010001, 0x01010011, - 0x01011000, 0x01011010, 0x01011001, 0x01011011, - 0x01010100, 0x01010110, 0x01010101, 0x01010111, - 0x01011100, 0x01011110, 0x01011101, 0x01011111, - 0x01110000, 0x01110010, 0x01110001, 0x01110011, - 0x01111000, 0x01111010, 0x01111001, 0x01111011, - 0x01110100, 0x01110110, 0x01110101, 0x01110111, - 0x01111100, 0x01111110, 0x01111101, 0x01111111, - 0x11000000, 0x11000010, 0x11000001, 0x11000011, - 0x11001000, 0x11001010, 0x11001001, 0x11001011, - 0x11000100, 0x11000110, 0x11000101, 0x11000111, - 0x11001100, 0x11001110, 0x11001101, 0x11001111, - 0x11100000, 0x11100010, 0x11100001, 0x11100011, - 0x11101000, 0x11101010, 0x11101001, 0x11101011, - 0x11100100, 0x11100110, 0x11100101, 0x11100111, - 0x11101100, 0x11101110, 0x11101101, 0x11101111, - 0x11010000, 0x11010010, 0x11010001, 0x11010011, - 0x11011000, 0x11011010, 0x11011001, 0x11011011, - 0x11010100, 0x11010110, 0x11010101, 0x11010111, - 0x11011100, 0x11011110, 0x11011101, 0x11011111, - 0x11110000, 0x11110010, 0x11110001, 0x11110011, - 0x11111000, 0x11111010, 0x11111001, 0x11111011, - 0x11110100, 0x11110110, 0x11110101, 0x11110111, - 0x11111100, 0x11111110, 0x11111101, 0x11111111 -}; - -/* - * The final permutation array. Like the IP array, used - * to compute both the left and right results from the nibbles - * of words computed from: - * - * ((left & 0x0f0f0f0f) << 4) | (right & 0x0f0f0f0f) for left result - * (left & 0xf0f0f0f0) | ((right & 0xf0f0f0f0) >> 4) for right result - * - * The result from the high order byte is shifted left 6 bits and - * or'd with the result from the next byte shifted left 4 bits, which - * is or'd with the result from the next byte shifted left 2 bits, - * which is or'd with the result from the low byte. - * - * There is one of these for big end machines (the natural order for - * DES) and a second for little end machines. One is a byte swapped - * version of the other. - */ -#ifndef XNTP_LITTLE_ENDIAN - /* - * Big end version - */ -static U_LONG FP[256] = { - 0x00000000, 0x02000000, 0x00020000, 0x02020000, - 0x00000200, 0x02000200, 0x00020200, 0x02020200, - 0x00000002, 0x02000002, 0x00020002, 0x02020002, - 0x00000202, 0x02000202, 0x00020202, 0x02020202, - 0x01000000, 0x03000000, 0x01020000, 0x03020000, - 0x01000200, 0x03000200, 0x01020200, 0x03020200, - 0x01000002, 0x03000002, 0x01020002, 0x03020002, - 0x01000202, 0x03000202, 0x01020202, 0x03020202, - 0x00010000, 0x02010000, 0x00030000, 0x02030000, - 0x00010200, 0x02010200, 0x00030200, 0x02030200, - 0x00010002, 0x02010002, 0x00030002, 0x02030002, - 0x00010202, 0x02010202, 0x00030202, 0x02030202, - 0x01010000, 0x03010000, 0x01030000, 0x03030000, - 0x01010200, 0x03010200, 0x01030200, 0x03030200, - 0x01010002, 0x03010002, 0x01030002, 0x03030002, - 0x01010202, 0x03010202, 0x01030202, 0x03030202, - 0x00000100, 0x02000100, 0x00020100, 0x02020100, - 0x00000300, 0x02000300, 0x00020300, 0x02020300, - 0x00000102, 0x02000102, 0x00020102, 0x02020102, - 0x00000302, 0x02000302, 0x00020302, 0x02020302, - 0x01000100, 0x03000100, 0x01020100, 0x03020100, - 0x01000300, 0x03000300, 0x01020300, 0x03020300, - 0x01000102, 0x03000102, 0x01020102, 0x03020102, - 0x01000302, 0x03000302, 0x01020302, 0x03020302, - 0x00010100, 0x02010100, 0x00030100, 0x02030100, - 0x00010300, 0x02010300, 0x00030300, 0x02030300, - 0x00010102, 0x02010102, 0x00030102, 0x02030102, - 0x00010302, 0x02010302, 0x00030302, 0x02030302, - 0x01010100, 0x03010100, 0x01030100, 0x03030100, - 0x01010300, 0x03010300, 0x01030300, 0x03030300, - 0x01010102, 0x03010102, 0x01030102, 0x03030102, - 0x01010302, 0x03010302, 0x01030302, 0x03030302, - 0x00000001, 0x02000001, 0x00020001, 0x02020001, - 0x00000201, 0x02000201, 0x00020201, 0x02020201, - 0x00000003, 0x02000003, 0x00020003, 0x02020003, - 0x00000203, 0x02000203, 0x00020203, 0x02020203, - 0x01000001, 0x03000001, 0x01020001, 0x03020001, - 0x01000201, 0x03000201, 0x01020201, 0x03020201, - 0x01000003, 0x03000003, 0x01020003, 0x03020003, - 0x01000203, 0x03000203, 0x01020203, 0x03020203, - 0x00010001, 0x02010001, 0x00030001, 0x02030001, - 0x00010201, 0x02010201, 0x00030201, 0x02030201, - 0x00010003, 0x02010003, 0x00030003, 0x02030003, - 0x00010203, 0x02010203, 0x00030203, 0x02030203, - 0x01010001, 0x03010001, 0x01030001, 0x03030001, - 0x01010201, 0x03010201, 0x01030201, 0x03030201, - 0x01010003, 0x03010003, 0x01030003, 0x03030003, - 0x01010203, 0x03010203, 0x01030203, 0x03030203, - 0x00000101, 0x02000101, 0x00020101, 0x02020101, - 0x00000301, 0x02000301, 0x00020301, 0x02020301, - 0x00000103, 0x02000103, 0x00020103, 0x02020103, - 0x00000303, 0x02000303, 0x00020303, 0x02020303, - 0x01000101, 0x03000101, 0x01020101, 0x03020101, - 0x01000301, 0x03000301, 0x01020301, 0x03020301, - 0x01000103, 0x03000103, 0x01020103, 0x03020103, - 0x01000303, 0x03000303, 0x01020303, 0x03020303, - 0x00010101, 0x02010101, 0x00030101, 0x02030101, - 0x00010301, 0x02010301, 0x00030301, 0x02030301, - 0x00010103, 0x02010103, 0x00030103, 0x02030103, - 0x00010303, 0x02010303, 0x00030303, 0x02030303, - 0x01010101, 0x03010101, 0x01030101, 0x03030101, - 0x01010301, 0x03010301, 0x01030301, 0x03030301, - 0x01010103, 0x03010103, 0x01030103, 0x03030103, - 0x01010303, 0x03010303, 0x01030303, 0x03030303 -}; -#else - /* - * Byte swapped for little end machines. - */ -static U_LONG FP[256] = { - 0x00000000, 0x00000002, 0x00000200, 0x00000202, - 0x00020000, 0x00020002, 0x00020200, 0x00020202, - 0x02000000, 0x02000002, 0x02000200, 0x02000202, - 0x02020000, 0x02020002, 0x02020200, 0x02020202, - 0x00000001, 0x00000003, 0x00000201, 0x00000203, - 0x00020001, 0x00020003, 0x00020201, 0x00020203, - 0x02000001, 0x02000003, 0x02000201, 0x02000203, - 0x02020001, 0x02020003, 0x02020201, 0x02020203, - 0x00000100, 0x00000102, 0x00000300, 0x00000302, - 0x00020100, 0x00020102, 0x00020300, 0x00020302, - 0x02000100, 0x02000102, 0x02000300, 0x02000302, - 0x02020100, 0x02020102, 0x02020300, 0x02020302, - 0x00000101, 0x00000103, 0x00000301, 0x00000303, - 0x00020101, 0x00020103, 0x00020301, 0x00020303, - 0x02000101, 0x02000103, 0x02000301, 0x02000303, - 0x02020101, 0x02020103, 0x02020301, 0x02020303, - 0x00010000, 0x00010002, 0x00010200, 0x00010202, - 0x00030000, 0x00030002, 0x00030200, 0x00030202, - 0x02010000, 0x02010002, 0x02010200, 0x02010202, - 0x02030000, 0x02030002, 0x02030200, 0x02030202, - 0x00010001, 0x00010003, 0x00010201, 0x00010203, - 0x00030001, 0x00030003, 0x00030201, 0x00030203, - 0x02010001, 0x02010003, 0x02010201, 0x02010203, - 0x02030001, 0x02030003, 0x02030201, 0x02030203, - 0x00010100, 0x00010102, 0x00010300, 0x00010302, - 0x00030100, 0x00030102, 0x00030300, 0x00030302, - 0x02010100, 0x02010102, 0x02010300, 0x02010302, - 0x02030100, 0x02030102, 0x02030300, 0x02030302, - 0x00010101, 0x00010103, 0x00010301, 0x00010303, - 0x00030101, 0x00030103, 0x00030301, 0x00030303, - 0x02010101, 0x02010103, 0x02010301, 0x02010303, - 0x02030101, 0x02030103, 0x02030301, 0x02030303, - 0x01000000, 0x01000002, 0x01000200, 0x01000202, - 0x01020000, 0x01020002, 0x01020200, 0x01020202, - 0x03000000, 0x03000002, 0x03000200, 0x03000202, - 0x03020000, 0x03020002, 0x03020200, 0x03020202, - 0x01000001, 0x01000003, 0x01000201, 0x01000203, - 0x01020001, 0x01020003, 0x01020201, 0x01020203, - 0x03000001, 0x03000003, 0x03000201, 0x03000203, - 0x03020001, 0x03020003, 0x03020201, 0x03020203, - 0x01000100, 0x01000102, 0x01000300, 0x01000302, - 0x01020100, 0x01020102, 0x01020300, 0x01020302, - 0x03000100, 0x03000102, 0x03000300, 0x03000302, - 0x03020100, 0x03020102, 0x03020300, 0x03020302, - 0x01000101, 0x01000103, 0x01000301, 0x01000303, - 0x01020101, 0x01020103, 0x01020301, 0x01020303, - 0x03000101, 0x03000103, 0x03000301, 0x03000303, - 0x03020101, 0x03020103, 0x03020301, 0x03020303, - 0x01010000, 0x01010002, 0x01010200, 0x01010202, - 0x01030000, 0x01030002, 0x01030200, 0x01030202, - 0x03010000, 0x03010002, 0x03010200, 0x03010202, - 0x03030000, 0x03030002, 0x03030200, 0x03030202, - 0x01010001, 0x01010003, 0x01010201, 0x01010203, - 0x01030001, 0x01030003, 0x01030201, 0x01030203, - 0x03010001, 0x03010003, 0x03010201, 0x03010203, - 0x03030001, 0x03030003, 0x03030201, 0x03030203, - 0x01010100, 0x01010102, 0x01010300, 0x01010302, - 0x01030100, 0x01030102, 0x01030300, 0x01030302, - 0x03010100, 0x03010102, 0x03010300, 0x03010302, - 0x03030100, 0x03030102, 0x03030300, 0x03030302, - 0x01010101, 0x01010103, 0x01010301, 0x01010303, - 0x01030101, 0x01030103, 0x01030301, 0x01030303, - 0x03010101, 0x03010103, 0x03010301, 0x03010303, - 0x03030101, 0x03030103, 0x03030301, 0x03030303 -}; -#endif - - -/* - * The SP table is actually the S boxes and the P permutation - * table combined. - */ -static U_LONG SP[8][64] = { - { 0x00808200, 0x00000000, 0x00008000, 0x00808202, - 0x00808002, 0x00008202, 0x00000002, 0x00008000, - 0x00000200, 0x00808200, 0x00808202, 0x00000200, - 0x00800202, 0x00808002, 0x00800000, 0x00000002, - 0x00000202, 0x00800200, 0x00800200, 0x00008200, - 0x00008200, 0x00808000, 0x00808000, 0x00800202, - 0x00008002, 0x00800002, 0x00800002, 0x00008002, - 0x00000000, 0x00000202, 0x00008202, 0x00800000, - 0x00008000, 0x00808202, 0x00000002, 0x00808000, - 0x00808200, 0x00800000, 0x00800000, 0x00000200, - 0x00808002, 0x00008000, 0x00008200, 0x00800002, - 0x00000200, 0x00000002, 0x00800202, 0x00008202, - 0x00808202, 0x00008002, 0x00808000, 0x00800202, - 0x00800002, 0x00000202, 0x00008202, 0x00808200, - 0x00000202, 0x00800200, 0x00800200, 0x00000000, - 0x00008002, 0x00008200, 0x00000000, 0x00808002 }, - - { 0x40084010, 0x40004000, 0x00004000, 0x00084010, - 0x00080000, 0x00000010, 0x40080010, 0x40004010, - 0x40000010, 0x40084010, 0x40084000, 0x40000000, - 0x40004000, 0x00080000, 0x00000010, 0x40080010, - 0x00084000, 0x00080010, 0x40004010, 0x00000000, - 0x40000000, 0x00004000, 0x00084010, 0x40080000, - 0x00080010, 0x40000010, 0x00000000, 0x00084000, - 0x00004010, 0x40084000, 0x40080000, 0x00004010, - 0x00000000, 0x00084010, 0x40080010, 0x00080000, - 0x40004010, 0x40080000, 0x40084000, 0x00004000, - 0x40080000, 0x40004000, 0x00000010, 0x40084010, - 0x00084010, 0x00000010, 0x00004000, 0x40000000, - 0x00004010, 0x40084000, 0x00080000, 0x40000010, - 0x00080010, 0x40004010, 0x40000010, 0x00080010, - 0x00084000, 0x00000000, 0x40004000, 0x00004010, - 0x40000000, 0x40080010, 0x40084010, 0x00084000 }, - - { 0x00000104, 0x04010100, 0x00000000, 0x04010004, - 0x04000100, 0x00000000, 0x00010104, 0x04000100, - 0x00010004, 0x04000004, 0x04000004, 0x00010000, - 0x04010104, 0x00010004, 0x04010000, 0x00000104, - 0x04000000, 0x00000004, 0x04010100, 0x00000100, - 0x00010100, 0x04010000, 0x04010004, 0x00010104, - 0x04000104, 0x00010100, 0x00010000, 0x04000104, - 0x00000004, 0x04010104, 0x00000100, 0x04000000, - 0x04010100, 0x04000000, 0x00010004, 0x00000104, - 0x00010000, 0x04010100, 0x04000100, 0x00000000, - 0x00000100, 0x00010004, 0x04010104, 0x04000100, - 0x04000004, 0x00000100, 0x00000000, 0x04010004, - 0x04000104, 0x00010000, 0x04000000, 0x04010104, - 0x00000004, 0x00010104, 0x00010100, 0x04000004, - 0x04010000, 0x04000104, 0x00000104, 0x04010000, - 0x00010104, 0x00000004, 0x04010004, 0x00010100 }, - - { 0x80401000, 0x80001040, 0x80001040, 0x00000040, - 0x00401040, 0x80400040, 0x80400000, 0x80001000, - 0x00000000, 0x00401000, 0x00401000, 0x80401040, - 0x80000040, 0x00000000, 0x00400040, 0x80400000, - 0x80000000, 0x00001000, 0x00400000, 0x80401000, - 0x00000040, 0x00400000, 0x80001000, 0x00001040, - 0x80400040, 0x80000000, 0x00001040, 0x00400040, - 0x00001000, 0x00401040, 0x80401040, 0x80000040, - 0x00400040, 0x80400000, 0x00401000, 0x80401040, - 0x80000040, 0x00000000, 0x00000000, 0x00401000, - 0x00001040, 0x00400040, 0x80400040, 0x80000000, - 0x80401000, 0x80001040, 0x80001040, 0x00000040, - 0x80401040, 0x80000040, 0x80000000, 0x00001000, - 0x80400000, 0x80001000, 0x00401040, 0x80400040, - 0x80001000, 0x00001040, 0x00400000, 0x80401000, - 0x00000040, 0x00400000, 0x00001000, 0x00401040 }, - - { 0x00000080, 0x01040080, 0x01040000, 0x21000080, - 0x00040000, 0x00000080, 0x20000000, 0x01040000, - 0x20040080, 0x00040000, 0x01000080, 0x20040080, - 0x21000080, 0x21040000, 0x00040080, 0x20000000, - 0x01000000, 0x20040000, 0x20040000, 0x00000000, - 0x20000080, 0x21040080, 0x21040080, 0x01000080, - 0x21040000, 0x20000080, 0x00000000, 0x21000000, - 0x01040080, 0x01000000, 0x21000000, 0x00040080, - 0x00040000, 0x21000080, 0x00000080, 0x01000000, - 0x20000000, 0x01040000, 0x21000080, 0x20040080, - 0x01000080, 0x20000000, 0x21040000, 0x01040080, - 0x20040080, 0x00000080, 0x01000000, 0x21040000, - 0x21040080, 0x00040080, 0x21000000, 0x21040080, - 0x01040000, 0x00000000, 0x20040000, 0x21000000, - 0x00040080, 0x01000080, 0x20000080, 0x00040000, - 0x00000000, 0x20040000, 0x01040080, 0x20000080 }, - - { 0x10000008, 0x10200000, 0x00002000, 0x10202008, - 0x10200000, 0x00000008, 0x10202008, 0x00200000, - 0x10002000, 0x00202008, 0x00200000, 0x10000008, - 0x00200008, 0x10002000, 0x10000000, 0x00002008, - 0x00000000, 0x00200008, 0x10002008, 0x00002000, - 0x00202000, 0x10002008, 0x00000008, 0x10200008, - 0x10200008, 0x00000000, 0x00202008, 0x10202000, - 0x00002008, 0x00202000, 0x10202000, 0x10000000, - 0x10002000, 0x00000008, 0x10200008, 0x00202000, - 0x10202008, 0x00200000, 0x00002008, 0x10000008, - 0x00200000, 0x10002000, 0x10000000, 0x00002008, - 0x10000008, 0x10202008, 0x00202000, 0x10200000, - 0x00202008, 0x10202000, 0x00000000, 0x10200008, - 0x00000008, 0x00002000, 0x10200000, 0x00202008, - 0x00002000, 0x00200008, 0x10002008, 0x00000000, - 0x10202000, 0x10000000, 0x00200008, 0x10002008 }, - - { 0x00100000, 0x02100001, 0x02000401, 0x00000000, - 0x00000400, 0x02000401, 0x00100401, 0x02100400, - 0x02100401, 0x00100000, 0x00000000, 0x02000001, - 0x00000001, 0x02000000, 0x02100001, 0x00000401, - 0x02000400, 0x00100401, 0x00100001, 0x02000400, - 0x02000001, 0x02100000, 0x02100400, 0x00100001, - 0x02100000, 0x00000400, 0x00000401, 0x02100401, - 0x00100400, 0x00000001, 0x02000000, 0x00100400, - 0x02000000, 0x00100400, 0x00100000, 0x02000401, - 0x02000401, 0x02100001, 0x02100001, 0x00000001, - 0x00100001, 0x02000000, 0x02000400, 0x00100000, - 0x02100400, 0x00000401, 0x00100401, 0x02100400, - 0x00000401, 0x02000001, 0x02100401, 0x02100000, - 0x00100400, 0x00000000, 0x00000001, 0x02100401, - 0x00000000, 0x00100401, 0x02100000, 0x00000400, - 0x02000001, 0x02000400, 0x00000400, 0x00100001 }, - - { 0x08000820, 0x00000800, 0x00020000, 0x08020820, - 0x08000000, 0x08000820, 0x00000020, 0x08000000, - 0x00020020, 0x08020000, 0x08020820, 0x00020800, - 0x08020800, 0x00020820, 0x00000800, 0x00000020, - 0x08020000, 0x08000020, 0x08000800, 0x00000820, - 0x00020800, 0x00020020, 0x08020020, 0x08020800, - 0x00000820, 0x00000000, 0x00000000, 0x08020020, - 0x08000020, 0x08000800, 0x00020820, 0x00020000, - 0x00020820, 0x00020000, 0x08020800, 0x00000800, - 0x00000020, 0x08020020, 0x00000800, 0x00020820, - 0x08000800, 0x00000020, 0x08000020, 0x08020000, - 0x08020020, 0x08000000, 0x00020000, 0x08000820, - 0x00000000, 0x08020820, 0x00020020, 0x08000020, - 0x08020000, 0x08000800, 0x08000820, 0x00000000, - 0x08020820, 0x00020800, 0x00020800, 0x00000820, - 0x00000820, 0x00020020, 0x08000000, 0x08020800 } -}; - - - -/* - * DESauth_des - perform an in place DES encryption on 64 bits - * - * Note that the `data' argument is always in big-end-first - * byte order, i.e. *(char *)data is the high order byte of - * the 8 byte data word. We modify the initial and final - * permutation computations for little-end-first machines to - * swap bytes into the natural host order at the beginning and - * back to big-end order at the end. This is unclean but avoids - * a byte swapping performance penalty on Vaxes (which are slow already). - */ -void -DESauth_des(data, subkeys) - U_LONG *data; - u_char *subkeys; -{ - register U_LONG left, right; - register U_LONG temp; - register u_char *kp; - register int i; - - /* - * Do the initial permutation. The first operation gets - * all the bits which are used to form the left half of the - * permutted result in one word, which is then used to - * index the appropriate table a byte at a time. - */ - temp = ((*data & 0x55555555) << 1) | (*(data+1) & 0x55555555); -#ifdef XNTP_LITTLE_ENDIAN - /* - * Modify the computation to use the opposite set of bytes. - */ - left = (IP[(temp >> 24) & 0xff] << 3) - | (IP[(temp >> 16) & 0xff] << 2) - | (IP[(temp >> 8) & 0xff] << 1) - | IP[temp & 0xff]; -#else - left = IP[(temp >> 24) & 0xff] - | (IP[(temp >> 16) & 0xff] << 1) - | (IP[(temp >> 8) & 0xff] << 2) - | (IP[temp & 0xff] << 3); -#endif - - /* - * Same thing again except for the right half. - */ - temp = (*data & 0xaaaaaaaa) | ((*(data+1) & 0xaaaaaaaa) >> 1); -#ifdef XNTP_LITTLE_ENDIAN - right = (IP[(temp >> 24) & 0xff] << 3) - | (IP[(temp >> 16) & 0xff] << 2) - | (IP[(temp >> 8) & 0xff] << 1) - | IP[temp & 0xff]; -#else - right = IP[(temp >> 24) & 0xff] - | (IP[(temp >> 16) & 0xff] << 1) - | (IP[(temp >> 8) & 0xff] << 2) - | (IP[temp & 0xff] << 3); -#endif - - /* - * Do the 16 rounds through the cipher function. We actually - * do two at a time, one on the left half and one on the right - * half. - */ - kp = subkeys; - for (i = 0; i < 8; i++) { - /* - * The E expansion is easy to compute algorithmically. - * Take a look at its form and compare it to - * everything involving temp below. Note that - * since SP[0-7] don't have any bits in common set - * it is okay to do the successive xor's. - */ - temp = (right >> 1) | ((right & 1) ? 0x80000000 : 0); - left ^= SP[0][((temp >> 26) & 0x3f) ^ *kp++]; - left ^= SP[1][((temp >> 22) & 0x3f) ^ *kp++]; - left ^= SP[2][((temp >> 18) & 0x3f) ^ *kp++]; - left ^= SP[3][((temp >> 14) & 0x3f) ^ *kp++]; - left ^= SP[4][((temp >> 10) & 0x3f) ^ *kp++]; - left ^= SP[5][((temp >> 6) & 0x3f) ^ *kp++]; - left ^= SP[6][((temp >> 2) & 0x3f) ^ *kp++]; - left ^= SP[7][(((right << 1) | ((right & 0x80000000)?1:0)) - & 0x3f) ^ *kp++]; - - /* - * Careful here. Right now `right' is actually the - * left side and `left' is the right side. Do the - * same thing again, except swap `left' and `right' - */ - temp = (left >> 1) | ((left & 1) ? 0x80000000 : 0); - right ^= SP[0][((temp >> 26) & 0x3f) ^ *kp++]; - right ^= SP[1][((temp >> 22) & 0x3f) ^ *kp++]; - right ^= SP[2][((temp >> 18) & 0x3f) ^ *kp++]; - right ^= SP[3][((temp >> 14) & 0x3f) ^ *kp++]; - right ^= SP[4][((temp >> 10) & 0x3f) ^ *kp++]; - right ^= SP[5][((temp >> 6) & 0x3f) ^ *kp++]; - right ^= SP[6][((temp >> 2) & 0x3f) ^ *kp++]; - right ^= SP[7][(((left << 1) | ((left & 0x80000000)?1:0)) - & 0x3f) ^ *kp++]; - - /* - * By the time we get here, all is straightened out - * again. `left' is left and `right' is right. - */ - } - - /* - * Now the final permutation. Note this is like the IP above - * except that the data is computed from - * - * ((left & 0x0f0f0f0f) << 4) | (right & 0x0f0f0f0f) for left result - * (left & 0xf0f0f0f0) | ((right & 0xf0f0f0f0) >> 4) for right result - * - * Just to confuse things more, we're supposed to swap the right - * and the left halves before doing this. Instead, we'll just - * switch which goes where when computing the temporary. - * - * This operation also byte swaps stuff back into big end byte - * order. This is accomplished by modifying the FP table for - * little end machines, however, so we don't have to worry about - * it here. - */ - temp = ((right & 0x0f0f0f0f) << 4) | (left & 0x0f0f0f0f); - *data = (FP[(temp >> 24) & 0xff] << 6) - | (FP[(temp >> 16) & 0xff] << 4) - | (FP[(temp >> 8) & 0xff] << 2) - | FP[temp & 0xff]; - - temp = (right & 0xf0f0f0f0) | ((left & 0xf0f0f0f0) >> 4); - *(data+1) = (FP[(temp >> 24) & 0xff] << 6) - | (FP[(temp >> 16) & 0xff] << 4) - | (FP[(temp >> 8) & 0xff] << 2) - | FP[temp & 0xff]; -} diff --git a/usr.sbin/xntpd/machines/README b/usr.sbin/xntpd/machines/README deleted file mode 100644 index b12db88..0000000 --- a/usr.sbin/xntpd/machines/README +++ /dev/null @@ -1,5 +0,0 @@ -README file for directory ./machines of the NTP Version 3 distribution - -This directory contains configuration files for the various machines -and compilers supported by the distribution. README and RELNOTES files in the -parent directory contain directions on how to use these files. diff --git a/usr.sbin/xntpd/machines/aix3.2 b/usr.sbin/xntpd/machines/aix3.2 deleted file mode 100644 index 93a0181..0000000 --- a/usr.sbin/xntpd/machines/aix3.2 +++ /dev/null @@ -1,10 +0,0 @@ -RANLIB= : -DEFS_LOCAL= -DREFCLOCK -DEFS= -DRS6000 -DSYS_AIX -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -INSTALL= /usr/ucb/install -COPTS= -O -COMPAT= diff --git a/usr.sbin/xntpd/machines/aux2 b/usr.sbin/xntpd/machines/aux2 deleted file mode 100644 index 0aa8ee0..0000000 --- a/usr.sbin/xntpd/machines/aux2 +++ /dev/null @@ -1,9 +0,0 @@ -RANLIB= true # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_AUX2 -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -DFASTMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -COMPAT= -lposix -lbsd -lmalloc -s -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/aux3 b/usr.sbin/xntpd/machines/aux3 deleted file mode 100644 index 1c6313b..0000000 --- a/usr.sbin/xntpd/machines/aux3 +++ /dev/null @@ -1,9 +0,0 @@ -RANLIB= true # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_AUX3 -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -DFASTMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -COMPAT= -lposix -lbsd -lmalloc -s -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/bsdi b/usr.sbin/xntpd/machines/bsdi deleted file mode 100644 index 3145bd6..0000000 --- a/usr.sbin/xntpd/machines/bsdi +++ /dev/null @@ -1,8 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL=-DREFCLOCK -DEFS= -DSYS_BSDI -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lkvm -RESLIB= -COPTS= -g -O diff --git a/usr.sbin/xntpd/machines/convexos10 b/usr.sbin/xntpd/machines/convexos10 deleted file mode 100644 index 39eb384..0000000 --- a/usr.sbin/xntpd/machines/convexos10 +++ /dev/null @@ -1,10 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL=-DREFCLOCK -DEFS= -DSYS_CONVEXOS10 -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -RESLIB= -COPTS= -O -ADJLIB= -COMPAT= - diff --git a/usr.sbin/xntpd/machines/convexos9 b/usr.sbin/xntpd/machines/convexos9 deleted file mode 100644 index a0276b8..0000000 --- a/usr.sbin/xntpd/machines/convexos9 +++ /dev/null @@ -1,9 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL=-DREFCLOCK -DEFS= -DSYS_CONVEXOS9 -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -RESLIB= -COPTS= -O -ADJLIB= -COMPAT= diff --git a/usr.sbin/xntpd/machines/decosf1 b/usr.sbin/xntpd/machines/decosf1 deleted file mode 100644 index 0f92351..0000000 --- a/usr.sbin/xntpd/machines/decosf1 +++ /dev/null @@ -1,9 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSTREAM -DSYS_DECOSF1 -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -COPTS= -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/dell.svr4 b/usr.sbin/xntpd/machines/dell.svr4 deleted file mode 100644 index 5b53a2b..0000000 --- a/usr.sbin/xntpd/machines/dell.svr4 +++ /dev/null @@ -1,9 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_SVR4 -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -lnsl -lsocket -lelf -INSTALL= /usr/ucb/install diff --git a/usr.sbin/xntpd/machines/domainos b/usr.sbin/xntpd/machines/domainos deleted file mode 100644 index 0ca6713..0000000 --- a/usr.sbin/xntpd/machines/domainos +++ /dev/null @@ -1,7 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -COMPAT= diff --git a/usr.sbin/xntpd/machines/freebsd b/usr.sbin/xntpd/machines/freebsd deleted file mode 100644 index 9380c0e..0000000 --- a/usr.sbin/xntpd/machines/freebsd +++ /dev/null @@ -1,8 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL=-DREFCLOCK -DEFS= -DSYS_FREEBSD -DSYS_386BSD -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lcrypt -RESLIB= -COPTS= -O2 diff --git a/usr.sbin/xntpd/machines/hpux b/usr.sbin/xntpd/machines/hpux deleted file mode 100644 index fdb0789..0000000 --- a/usr.sbin/xntpd/machines/hpux +++ /dev/null @@ -1,8 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DHAVE_TERMIOS -DSYS_HPUX=8 -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -COPTS= -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/hpux-adj b/usr.sbin/xntpd/machines/hpux-adj deleted file mode 100644 index 0119b63..0000000 --- a/usr.sbin/xntpd/machines/hpux-adj +++ /dev/null @@ -1,8 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DHAVE_TERMIOS -DSYS_HPUX=10 -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -COPTS= -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/hpux10+ b/usr.sbin/xntpd/machines/hpux10+ deleted file mode 100644 index 0119b63..0000000 --- a/usr.sbin/xntpd/machines/hpux10+ +++ /dev/null @@ -1,8 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DHAVE_TERMIOS -DSYS_HPUX=10 -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -COPTS= -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/i386 b/usr.sbin/xntpd/machines/i386 deleted file mode 100644 index c5d9357..0000000 --- a/usr.sbin/xntpd/machines/i386 +++ /dev/null @@ -1,7 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_I386 -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -COMPAT= diff --git a/usr.sbin/xntpd/machines/i386svr4 b/usr.sbin/xntpd/machines/i386svr4 deleted file mode 100644 index bc3fadb..0000000 --- a/usr.sbin/xntpd/machines/i386svr4 +++ /dev/null @@ -1,9 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -lnsl -lsocket -lelf -INSTALL= /usr/ucb/install diff --git a/usr.sbin/xntpd/machines/irix4 b/usr.sbin/xntpd/machines/irix4 deleted file mode 100644 index ae2bbf8..0000000 --- a/usr.sbin/xntpd/machines/irix4 +++ /dev/null @@ -1,9 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DHAVE_SYSV_TTYS -DSYS_IRIX4 -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lmld -RESLIB= -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/irix5 b/usr.sbin/xntpd/machines/irix5 deleted file mode 100644 index a808b97..0000000 --- a/usr.sbin/xntpd/machines/irix5 +++ /dev/null @@ -1,9 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DHAVE_SYSV_TTYS -DSYS_IRIX5 -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lmld -RESLIB= -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/linux b/usr.sbin/xntpd/machines/linux deleted file mode 100644 index d7a8ac4..0000000 --- a/usr.sbin/xntpd/machines/linux +++ /dev/null @@ -1,8 +0,0 @@ -SHELL= /bin/sh -RANLIB= ranlib -DEFS= -DSYS_LINUX -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -INCL= -I../include -I/usr/include/bsd -CLOCKDEFS= -DAEMONLIBS= -COMPAT= diff --git a/usr.sbin/xntpd/machines/mips b/usr.sbin/xntpd/machines/mips deleted file mode 100644 index a624e8f..0000000 --- a/usr.sbin/xntpd/machines/mips +++ /dev/null @@ -1,9 +0,0 @@ -#RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_MIPS -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lmld -RESLIB= -COMPAT= - diff --git a/usr.sbin/xntpd/machines/netbsd b/usr.sbin/xntpd/machines/netbsd deleted file mode 100644 index 1cfd8e1..0000000 --- a/usr.sbin/xntpd/machines/netbsd +++ /dev/null @@ -1,8 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL=-DREFCLOCK -DEFS= -DSYS_NETBSD -DSYS_386BSD -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lcrypt -lutil -RESLIB= -COPTS= -O diff --git a/usr.sbin/xntpd/machines/next b/usr.sbin/xntpd/machines/next deleted file mode 100644 index 9125f7d..0000000 --- a/usr.sbin/xntpd/machines/next +++ /dev/null @@ -1,9 +0,0 @@ -RANLIB= ranlib -c -s -DEFS= -DSYS_NEXT -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -COPTS= -O -pipe -COMPAT= - diff --git a/usr.sbin/xntpd/machines/ptx b/usr.sbin/xntpd/machines/ptx deleted file mode 100644 index 4759851..0000000 --- a/usr.sbin/xntpd/machines/ptx +++ /dev/null @@ -1,8 +0,0 @@ -RANLIB= : -DEFS_LOCAL= -DREFCLOCK -DEFS= -DREADKMEM -DSYS_PTX -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -lseq -lsocket -linet -lnsl -COPTS= -O diff --git a/usr.sbin/xntpd/machines/sequent b/usr.sbin/xntpd/machines/sequent deleted file mode 100644 index 9962788..0000000 --- a/usr.sbin/xntpd/machines/sequent +++ /dev/null @@ -1,8 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -COPTS= -O diff --git a/usr.sbin/xntpd/machines/sinix-m b/usr.sbin/xntpd/machines/sinix-m deleted file mode 100644 index fb01a01..0000000 --- a/usr.sbin/xntpd/machines/sinix-m +++ /dev/null @@ -1,11 +0,0 @@ -RANLIB= : -DEFS_LOCAL=-DREFCLOCK -DEFS= -DSYS_SINIXM -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -COPTS= -O -ADJLIB= -COMPAT= -lsocket -lnsl -lelf -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/sony b/usr.sbin/xntpd/machines/sony deleted file mode 100644 index 890e9f5..0000000 --- a/usr.sbin/xntpd/machines/sony +++ /dev/null @@ -1,6 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_SONY -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lmld diff --git a/usr.sbin/xntpd/machines/sunos4.bsd b/usr.sbin/xntpd/machines/sunos4.bsd deleted file mode 100644 index f18ffda..0000000 --- a/usr.sbin/xntpd/machines/sunos4.bsd +++ /dev/null @@ -1,11 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_SUNOS4 -DHAVE_BSD_TTYS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lkvm -RESLIB= -COPTS= -O -ADJLIB= -COMPAT= - diff --git a/usr.sbin/xntpd/machines/sunos4.posix b/usr.sbin/xntpd/machines/sunos4.posix deleted file mode 100644 index 86716e1..0000000 --- a/usr.sbin/xntpd/machines/sunos4.posix +++ /dev/null @@ -1,11 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSTREAM -DSYS_SUNOS4 -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -lkvm -RESLIB= -COPTS= -O -ADJLIB= -COMPAT= - diff --git a/usr.sbin/xntpd/machines/sunos5.1 b/usr.sbin/xntpd/machines/sunos5.1 deleted file mode 100644 index 16ab8ff..0000000 --- a/usr.sbin/xntpd/machines/sunos5.1 +++ /dev/null @@ -1,11 +0,0 @@ -RANLIB= : -DEFS_LOCAL=-DREFCLOCK -DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -COPTS= -O -ADJLIB= -COMPAT= -lsocket -lnsl -lelf -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/sunos5.2 b/usr.sbin/xntpd/machines/sunos5.2 deleted file mode 100644 index 3e09c15..0000000 --- a/usr.sbin/xntpd/machines/sunos5.2 +++ /dev/null @@ -1,11 +0,0 @@ -RANLIB= : -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= -COPTS= -O -ADJLIB= -COMPAT= -lsocket -lnsl -lelf -INSTALL=$(TOP)scripts/install.sh diff --git a/usr.sbin/xntpd/machines/svr4 b/usr.sbin/xntpd/machines/svr4 deleted file mode 100644 index 63997b6..0000000 --- a/usr.sbin/xntpd/machines/svr4 +++ /dev/null @@ -1,10 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DAEMONLIBS= -lnet -lnsl -lsocket -lelf -RESLIB= -lnet -lnsl -lsocket -lelf -INSTALL=$(TOP)scripts/install.sh -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V diff --git a/usr.sbin/xntpd/machines/ultrix.bsd b/usr.sbin/xntpd/machines/ultrix.bsd deleted file mode 100644 index a8e9f1d..0000000 --- a/usr.sbin/xntpd/machines/ultrix.bsd +++ /dev/null @@ -1,7 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_ULTRIX -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -COMPAT= diff --git a/usr.sbin/xntpd/machines/ultrix.posix b/usr.sbin/xntpd/machines/ultrix.posix deleted file mode 100644 index 7db6993..0000000 --- a/usr.sbin/xntpd/machines/ultrix.posix +++ /dev/null @@ -1,7 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -COMPAT= diff --git a/usr.sbin/xntpd/machines/univel b/usr.sbin/xntpd/machines/univel deleted file mode 100644 index 23d683a..0000000 --- a/usr.sbin/xntpd/machines/univel +++ /dev/null @@ -1,10 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS= -DSYS_UNIVEL -DSTREAMS_TLI -DHAVE_TERMIOS -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DAEMONLIBS= -lnsl -lsocket -lelf -RESLIB= -lnsl -lsocket -lelf -INSTALL=$(TOP)scripts/install.sh -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V diff --git a/usr.sbin/xntpd/machines/unixware1 b/usr.sbin/xntpd/machines/unixware1 deleted file mode 100644 index 7707376..0000000 --- a/usr.sbin/xntpd/machines/unixware1 +++ /dev/null @@ -1,10 +0,0 @@ -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS= -DSYS_UNIXWARE1 -DSTREAMS_TLI -DHAVE_TERMIOS -DCONFIG_FILE=\\"/usr/local/etc/ntp.conf\\" -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DAEMONLIBS= -lnsl -lsocket -lelf -RESLIB= -lnsl -lsocket -lelf -INSTALL=$(TOP)scripts/install.sh -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V diff --git a/usr.sbin/xntpd/machines/vax b/usr.sbin/xntpd/machines/vax deleted file mode 100644 index 55e8c44..0000000 --- a/usr.sbin/xntpd/machines/vax +++ /dev/null @@ -1,6 +0,0 @@ -RANLIB= ranlib -DEFS_LOCAL= -DREFCLOCK -DEFS= -DSYS_VAX -DHAVE_BSD_TTYS -CLOCKDEFS= -DLOCAL_CLOCK -DAEMONLIBS= -RESLIB= diff --git a/usr.sbin/xntpd/ntpdate/Makefile.tmpl b/usr.sbin/xntpd/ntpdate/Makefile.tmpl deleted file mode 100644 index 34f8f66..0000000 --- a/usr.sbin/xntpd/ntpdate/Makefile.tmpl +++ /dev/null @@ -1,70 +0,0 @@ -# -# Makefile.tmpl -# -PROGRAM= ntpdate -# -# ntpdate - private mode query program for ntpdate -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -INSTALL= install -DEFS= -DEFS_OPT= -DEFS_LOCAL= -RESLIB= -ADJLIB= -COMPAT= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a -LINTLIB= ../lib/llib-llibntp.ln -MAKE= make -TOP=../ -# -OBJS= ntpdate.o -SOURCE= ntpdate.c - -all: $(PROGRAM) - -$(PROGRAM): $(OBJS) $(LIB) version.o - $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) \ - $(ADJLIB) $(COMPAT) - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) - $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -tags: - ctags *.c *.h - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -lint: $(LINTLIB) - lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs - -../lib/llib-llibntp.ln: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - -# -# we want to build the current version string here -# -version.o: ../VERSION - ../scripts/mkversion $(PROGRAM) - $(CC) $(COPTS) $(INCL) -c version.c - -../VERSION: - -@rm -f .version diff --git a/usr.sbin/xntpd/ntpq/Makefile.tmpl b/usr.sbin/xntpd/ntpq/Makefile.tmpl deleted file mode 100644 index 76a09ad..0000000 --- a/usr.sbin/xntpd/ntpq/Makefile.tmpl +++ /dev/null @@ -1,68 +0,0 @@ -# -# Makefile.tmpl -# -PROGRAM= ntpq -# -# ntpq - control mode query program -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -INSTALL= install -DEFS= -DEFS_OPT= -DEFS_LOCAL= -RESLIB= -COMPAT= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a -LINTLIB= ../lib/llib-llibntp.ln -MAKE= make -TOP=../ -# -OBJS= ntpq.o ntpq_ops.o -SOURCE= ntpq.c ntpq_ops.c - -all: $(PROGRAM) - -$(PROGRAM): $(OBJS) $(LIB) version.o - $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) $(COMPAT) - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) - $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -tags: - ctags *.c *.h - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -lint: $(LINTLIB) - lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs - -../lib/llib-llibntp.ln: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - -# -# we want to build the current version string here -# -version.o: ../VERSION - ../scripts/mkversion $(PROGRAM) - $(CC) $(COPTS) $(INCL) -c version.c - -../VERSION: - -@rm -f .version diff --git a/usr.sbin/xntpd/ntptrace/Makefile.tmpl b/usr.sbin/xntpd/ntptrace/Makefile.tmpl deleted file mode 100644 index ca321f1..0000000 --- a/usr.sbin/xntpd/ntptrace/Makefile.tmpl +++ /dev/null @@ -1,70 +0,0 @@ -# -# Makefile.tmpl -# -PROGRAM= ntptrace -# -# ntptrace - private mode query program for ntptrace -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -INSTALL= install -DEFS= -DEFS_OPT= -DEFS_LOCAL= -RESLIB= -ADJLIB= -COMPAT= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a -LINTLIB= ../lib/llib-llibntp.ln -MAKE= make -TOP=../ -# -OBJS= ntptrace.o -SOURCE= ntptrace.c - -all: $(PROGRAM) - -$(PROGRAM): $(OBJS) $(LIB) version.o - $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) \ - $(ADJLIB) $(COMPAT) - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) - $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -tags: - ctags *.c *.h - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -lint: $(LINTLIB) - lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs - -../lib/llib-llibntp.ln: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - -# -# we want to build the current version string here -# -version.o: ../VERSION - ../scripts/mkversion $(PROGRAM) - $(CC) $(COPTS) $(INCL) -c version.c - -../VERSION: - -@rm -f .version diff --git a/usr.sbin/xntpd/parse/Makefile.kernel b/usr.sbin/xntpd/parse/Makefile.kernel deleted file mode 100644 index 4cd0ace..0000000 --- a/usr.sbin/xntpd/parse/Makefile.kernel +++ /dev/null @@ -1,76 +0,0 @@ -# -# very simple makefile (SunOS!) -# -# Possible defines: -# DEBUG_PARSE: include debug code (STREAMS mechanism and parsing) -# DEBUG_CD: include signal propagation to sun4c LED (sun4c only) -# -# Possible defines (parsestreams variants only): -# KERNEL: must define -# VDDRV: loadable driver support - recommended -# KARCH: must define at make call for correct kernel module -# (currently only needed for parsestreams variants) -# -KARCH= -DEFS=-DSTREAM -DKERNEL -DVDDRV -D$(KARCH) -MICROTIME=../ppsclock/sys/$(KARCH)/microtime.s - -all: - @if [ -f /kernel/unix ]; then \ - $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" KARCH="`(arch -k) 2>/dev/null || uname -a | awk '{ print $5 }'`" -f Makefile.kernel parse; \ - else \ - $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" KARCH="`(arch -k) 2>/dev/null || uname -a | awk '{ print $5 }'`" -f Makefile.kernel parsestreams.o; \ - fi - -parse: parsesolaris.c libparse_kernel.a ../lib/libntp.a - @echo "--- WARNING: SunOS5 support is fresh and hardly tested" - @echo "--- This code could lead to kernel panics more" - @echo "--- easily than other streams modules" - $(CC) -c -I../include -D_KERNEL parsesolaris.c - ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a - @echo "--- Install 'parse' in /kernel/strmod for automatic loading" - -mparsestreams.o: mparsestreams.$(KARCH).o - @echo "--- You may load mparsestreams.$(KARCH).o via 'modload mparsestreams.$(KARCH).o' into the kernel" - -mparsestreams.$(KARCH).o: parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c - ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \ - microtime.o - rm -f parsestreams.o - -parsestreams.o: parsestreams.$(KARCH).o - @echo "--- You may load parsestreams.$(KARCH).o via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel" - -parsestreams.$(KARCH).o: parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c $(DEFS) -I../include parsestreams.c - ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a - rm -f parsestreams.o - -microtime.o: $(MICROTIME) assym.s - cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i - as -o $@ $@.i - rm -f $@.i assym.s - -assym.s: genassym - ./genassym > $@ - -genassym: ../ppsclock/sys/genassym/genassym.c - cc -o $@ $? - -libparse_kernel.a: - $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" libparse_kernel.a - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - -lint: parsestreams.c ../include/parse.h ../include/sys/parsestreams.h ../lib/llib-llibntp.ln - lint -u -I../include $(DEFS) parsestreams.c ../lib/llib-llibntp.ln - -../lib/llib-llibntp.ln: - cd ../lib && make lintlib - -clean: - rm -f *.o genassym assym.s parsestreams - -distclean: clean diff --git a/usr.sbin/xntpd/parse/Makefile.tmpl b/usr.sbin/xntpd/parse/Makefile.tmpl deleted file mode 100644 index 781fed6..0000000 --- a/usr.sbin/xntpd/parse/Makefile.tmpl +++ /dev/null @@ -1,111 +0,0 @@ -# -# /src/NTP/REPOSITORY/v3/parse/Makefile.tmpl,v 3.6 1993/10/10 22:44:36 kardel Exp -# -LIBNAME= libparse -KLIBNAME= libparse_kernel -# -# parse routine that could be used in two places -# -COMPILER= cc -COPTS= -O -AUTHDEFS=-DDES -LIBDEFS= -DBIG_ENDIAN -RANLIB= ranlib -INSTALL= install -CLOCKDEFS= -DEFS= -DEFS_OPT= -DEFS_LOCAL= -# -INCL=-I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -# -SOURCE= parse.c parse_conf.c clk_meinberg.c clk_schmid.c clk_rawdcf.c \ - clk_dcf7000.c clk_trimtaip.c clk_trimtsip.c - -OBJS= parse.o parse_conf.o clk_meinberg.o clk_schmid.o clk_rawdcf.o \ - clk_dcf7000.o clk_trimtaip.o clk_trimtsip.o - -all: - @echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) | \ - awk '/-DREFCLOCK/ && /-DPARSE/ && /-DCLOCK_/ { makeit=1; }\ - END { if (makeit) \ - { print "echo ; echo --- creating parse libraries ; $(MAKE) $(MFLAGS) MFLAGS=\"$(MFLAGS)\" MAKE=\"$(MAKE)\" libs"; } \ - else \ - { print "echo ; echo --- creating parse placebo libraries ; $(MAKE) $(MFLAGS) MFLAGS=\"$(MFLAGS)\" MAKE=\"$(MAKE)\" emptyplacebolibs";} }' |\ - sh - @echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) | \ - awk '/-DREFCLOCK/ && /-DPARSE/ && /-DCLOCK_/ {makeit=1; }\ - END { if (makeit) \ - { print "echo ; echo --- creating utility programs ; cd util && $(MAKE) $(MFLAGS) MFLAGS=\"$(MFLAGS)\" MAKE=\"$(MAKE)\" -k"; } \ - else \ - { print ":";} }' |\ - sh - @if (sun) > /dev/null 2>&1; then \ - echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS); \ - else :; fi | \ - awk '/-DSTREAM/ && /-DREFCLOCK/ && /-DPARSE/ && /-DCLOCK_/ { makeit=1; }\ - END { if (makeit) \ - { print "echo ; echo --- creating kernel files ; $(MAKE) $(MFLAGS) MFLAGS=\"$(MFLAGS)\" MAKE=\"$(MAKE)\" -f Makefile.kernel"; } \ - else \ - { print ":";} }' |\ - sh - -emptyplacebolibs: empty.c - @if [ ! -f "$(LIBNAME).a" -o ! -f "$(KLIBNAME).a" ]; then \ - $(CC) -c empty.c; \ - rm -f $(LIBNAME).a $(KLIBNAME).a; \ - ar r $(LIBNAME).a empty.o; \ - $(RANLIB) $(LIBNAME).a; \ - ar r $(KLIBNAME).a empty.o; \ - $(RANLIB) $(KLIBNAME).a; \ - rm -f empty.o; \ - else \ - : sorry guys - but i always get bitten by the broken ultrix sh; \ - fi - -libs: $(LIBNAME).a $(KLIBNAME).a - -$(LIBNAME).a: $(SOURCE) - $(CC) -c $(CFLAGS) $(CLOCKDEFS) -UPARSESTREAM $(SOURCE) - ar rv $@ $(OBJS) - rm -f $(OBJS) - $(RANLIB) $@ - -$(KLIBNAME).a: $(SOURCE) $(LIBNAME).a - $(CC) -c $(CFLAGS) $(CLOCKDEFS) -DPARSESTREAM $(SOURCE) - ar rv $@ $(OBJS) - rm -f $(OBJS) - $(RANLIB) $@ - -lintlib: llib-l$(LIBNAME).ln - -llib-l$(LIBNAME).ln: $(SOURCE) - lint -C$(LIBNAME) $(INCL) $(CLOCKDEFS) $(AUTHDEFS) $(LIBDEFS) $(SOURCE) >lintlib.errs - -lint: - lint -u $(DEFS) $(INCL) $(CLOCKDEFS) $(AUTHDEFS) $(LIBDEFS) $(SOURCE) >lint.errs - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \ - lintlib.errs lint.errs genassym assym.s parsestreams parse parsestreams.o.* - -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl distclean - -install: all - @echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) | \ - awk '/-DREFCLOCK/ && /-DPARSE/ && /-DCLOCK_/ { makeit=1; }\ - END { if (makeit) \ - { print "echo --- installing utility programs ; cd util && $(MAKE) MAKE=\"$(MAKE)\" $@"; } \ - else \ - { print ":";} }' |\ - sh - @echo "--- Kernel modules like "parse" or "parsestreams.o" must be installed manually" - @echo "--- if applicable." diff --git a/usr.sbin/xntpd/patches/patch.1 b/usr.sbin/xntpd/patches/patch.1 deleted file mode 100644 index a6089ff..0000000 --- a/usr.sbin/xntpd/patches/patch.1 +++ /dev/null @@ -1,790 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa12064; 26 Jan 94 16:33 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa12284; - 26 Jan 94 16:26 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA16418 (5.65c-6/7.3v-FAU); Wed, 26 Jan 1994 22:26:48 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA29418 (5.65c-6/7.3m-FAU); Wed, 26 Jan 1994 22:26:45 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199401262126.AA29418@faui43.informatik.uni-erlangen.de> -Subject: Re: Solaribum -To: Mills@udel.edu -Date: Wed, 26 Jan 94 22:26:38 MET -Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk, - Paul_Vixie@corpmis.sjc.hw.sony.com -In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm -X-Mailer: ELM [version 2.3 PL11] - - -> Frank, - -> Your command-line weenie sounds rather useful, especially in cases where -> 1-pps signals, kernel mods, etc., are involved. Better be quick about -> patches, though. Paul Vixie is burning rubber on changes. - -> Dave - -Ok, you overan me with 3.3c - thus the following patches will be -relative to 3.3c around Jan 26th 11:something. - -The patches include additional sys and refclock variables, the -adjtime fix from Lewis, doc fixes and a include botch fix for -lib/numtohost.c. - -For examples how to add extra refclock variables see refclock_parse.c -(as usual 8-). The variable mechanism is documented in doc/xntpd.8. - -Ok, here it goes... - -begin 644 patches-fau.Z -M'YV09-*8,0.BQ1@05)X0>:(CA@N'#F<@5,APAHL:"E1HG+BPX<./,Q)<*4,& -MA)(P;D#(L*$RA@X:-E[> !$C1PX:"EKHY/A$)$F3*%6RE.$2YDL<-&WBU,BT -MJ5,5&3?&8%$#1%,%($",4!!"*T\6=D!8I)'TY@L8,5[(D!CC1L,<.F"P7!-& -M#IDR;$ 4P0,'JU:_5-"DF0/"3!HV94",>>.&3I@T;@C#D?-&#.(VA->X>7,G -M)9TW(.B@21RFCN@W<@B+#D,'Q!PZA_.Z*?/S,P@QB<DP+N/"[T@0=][485,R -M#)S)9<:D89U8((@\PA4+)^X:3MW$<]ZT2?R&(/0Z<D*GV1X:-)LW;]:$1D.Y -MSADT.7=.K:I3I]^M74=\#6NQ:DVS:*GE'UPPS*!##57191=>>O%U'V""$688 -M8M(U]EAD($Q6V669;=99>>N19AH:J*F&!FNNP<:&;+259!MN(.@V6V]9_1;< -M<,4=)T=RR]'1G'?1+89C==>YIAUW0((G'GFVG9?>>NV]IT! Q5TD&YCO(!' -M8W"0X0(.'D'T4 PQOI'EEG1T^:4.%A$5E0IEGLFEEV"*"5$,/I5T4DHKM233 -M@63]AU-]<6HYYY=Y L7G4$6YA6!92STE*51,@7 ##2S<D(-53,77@J68XD!? -M?7YU <(6?KD@1$%TI)I$:'+4\1I):Y21AP(K@& JJKFJ6I =N(+@PJMVU+6< -M964$NVNPOK9@!;/$&AL&LJ6F.@42(!!1Q!1#2)$$%%0D\803KH* Q9QO3GI5 -MI3'0 ,+[59U%:'MV@#OH_6UX-<<</!H1AX@A!%C&CN.\9D< +^8F*P_F8&: -M8CNR!MD9*4K\6AIC2'A8&7.X"@>K(.#@5QAD% ="K0"[44<;N(5GFVB)T1'K -MK"6A# (;@[7::Q(?MQ"6R+F2;/(<><S:!@C%RG$L8M#V;$7(P0H=L&M%^WAT -MTDLGAC/-MP%\EQFEL=%J5BY<"X((0XQK1!)'5"%%$.&."\+:3!0!PA/@BNO$ -M%"*X*H6Y<X)P0L=9+>:&86> )S%CA6T,PF @[,B&Q';@!; 9.R;FL!QML.9" -M5D-HMUUC<[ G&!CH %"YP#CEJZZ&KT) @TWL4#[IO/N5 ,,F-8P UGY0@CY -M8FUT[D9)D%>6'6(^!GP\")NU%D:QATU+(63K05YY:FDPWEVY:*J9*A10,+OJ -M'&70D32T2$M+[<ZG?ATV'5TP2WZP@0TO.DK%E4Q84$)+ VP8$X:\$,UH[5.: -M]7B#D-&@+X%9(\P8@N*Z7#',1: )R&N4)@;3D*9D NR>&PKXN,.AIG,#3,D< -MZI"Z@)F(-&,8 \<D\P:<C2$/GTN"&8(%,P@N$ 3="5%A*',T'HQP.S[H 0^* -MQ88ZE,$'CY-0#<]SAY^((6&C89_\AJ.SD]DJ.'81(M9^>(?8W$9K.?M)&"13 -ME]8$L8=;%!O5C!:L,2*+,"C@4APB%Q;B&8\,*?A<8#CVP8"DD(1V1 QAT">' -MRI5P<R@480&#!0?PP.$-Z",,8]B PP;:*F [@MX;6B,YYF!0B!KZS&+R,LK1 -MN.Q$K8$9P":8D@K>+(U>\N3)/)225)JIACZ\(W#,6, [A*%H0-Q>&N[B/( E -MDF,Q*H-A9D.&.BXG1.Q#G_KJ$JSMI XE@VE#;WIUOUP-,I1%$DWFJL,C1+I/ -MD>M!D>$<@[T>'A&:02Q@7IX)Q!WFJH=S" -YSM >. @RB_ [X!>2]H6M=9%$ -MQ'DA] 2*3X+H<XY6"Z8B#YHL^/6K#')8:%T:FK-@090,$KVG)BVZH@S1)CS/ -M_-_S8,:^,9QG#&L0:4@=:M(:NF@T$]W.2H6X(S. M QND*%B;JJ>F(Y36/<C -MVZIVM+SME>L%UA&-H=)$U?&5#W9.D5T,8)"#&<!KK&2Z2E9@LQT:W<TS0)W> -M8R8GAL,($&!!)-\4'GG"Q<$U661[%5O+( .N%*8.9#B#YL)@L(?-@41W$"*5 -MC+JCI"8&-W2X@X^0*D2]+@D[CFG#Q_A'U.24 0XI-.Q@*R;:?@J1D<LQ8!K. -M,$(V'!1RUI$#17T4'LA%K"2;!!AKK(9:U;S!L-K,'AMUNQW>#K.E,)KM9G;D -M)0@!5EBO,L/DS@ #OR!U@82!3"5;,R'>3NRV_UL=29:3DO*"=)BBJ1!L5":< -M10H4#CASPQDXZBF:Q$ &.#BKNPI"JK6.AS=^><)? T8]NMJ5#G@EB&<A TF_ -M8C.PGRUL5\R 6,46AK$'B^8TH0G06D46LU7D; \]N]K7W-=Y/TU,P4Z;VJZT -M.+0?>R-0/3L'Z180O1FJRV[?"SE9U4&? (.!"T%@9"2K=L=0V&N/:4M"R.$& -M9V6H'/(\<V 8WVVO=YD<,A\[G9+ :#%R*)B/JMF5>@*U<ZF##';ZI1S#' 1] -M!A.A:WM8*SG,)B]D4-KV>M.58678L+,AB2;=P,DSNB9]IU-Q7/-,0A[[."^0 -M"_,Q&^;8(QDV8MEQ@UL'62[MAH&[WAVA,,5KFL:)#:3G;2#D!+:=@ 3%O>$I -M8WSG"9DZU-<U]\WO?CWY.MB)=:PY."M1.!4[#.O1+X-=##.?Z57##O*STDX, -M/]V<&#U&K@PD6ZJ9FOK.Q/B1M/.\T"*S#-));C@->$$I1QN7&O+"FSJ0Z^%- -M2;A:[%7!#6G 0V'Z2H=YXYDQ)3%,O*/X9"29(;FVJ0(5A@ "%%2X-4A 0A.: -M$$A=C@$\E:5#HT&<!D?.N.3O-?49_A=*AY($T67 0\%!$ 00'C(O1F4->#2W -MW:'V\.3; R5W4"O)%0',Y5L.LFX;X\#!$%J7(#YR7E:;[2B" *DVQ>1/L(>2 -M,U!(#+K%:?H(PP,0^.!S00!!'*0N$(Q96,?)ZLI=LNVB+E?]XE9WV(HX,S$A -M4OT-=YGWY%Z3(7@K-8@4)K@(#9MOH+YA>Q>-E1L KM_/>KF'C/UX&X9CRL]* -M\97F9NK5*]>8BOEH#FYU051!\&\!7CVI@)]8M>G5K@#'H"TR(+!]G)VF.$#[ -MP%6G-MGNUY5K>_NWXL:I1J%Y[N<Y]-&0WV>Y4>])]!GVI /?>QD/QU?.^54' -MAC5T4;..TR\,EO$2W??4NZQKU?6P.P^'=,0G7G&\9WSC@;0V4#^>9J2*7+AY -M9G*FA7+AH7(LAT9< QGA]RKCQU1?X&)T("M/5W.&5'2% 6X1&$H&N&= !73O -M521O0'0$9'2WE("])&1,QS%.IW\P%('\9G> UQR$@70EM(#8%H,3J'9L9V=O -M1Q!PE!PQ6'?D<7<$EW=3Q'>5IX"%QH#21'XY=7%/=VV#UQIP8'A(TGV1Q#B- -MQQW1EQ>21WD4LUJDA7DQM#*<MV:J=6"?)T1..'K^9WK0I(38]6UFX(0/Z!BG -M]W17,!HI,6$FY'TI9'7(@3ZE%T WMWQ"QV!SM4!/)WY-Z(#'<3';85@.]4(+ -MQF)JB&,P9H,-.&Y?$(ES8&*4F#,2-5E'95EGE%FTD1)2, 5KD7MW(6BUD8DO -M-H90ME>#Y6*BE7JKUWJM@76QIU_5-EE64D(VA5AE\ )<\@7S1!FVA09A\A%5 -M 1G'>!?*F";,R!@R4T,N (T680.R0XU-9(W+V(S<"(UV<A&)LB="X2<T ";+ -M)BC])8[(>(UPD(V-X8S=N(Y!T2=$<10Z$(]*46SJ(E8V8%9MD5:=DA4C\#5R -ME@!#, 5?, 59, 544 1-D !M<1\..1L0*9%+4 19D 1$H)$BPY =608?^052 -M4 1&, 4A>04:F0.&U9#2]) 1^0564 2MJ#<)( /=E14UF9(KV01!@ 5IHRTK -MN9,].2Y^X1<O !59814@ 4OM7R$445,=CP@Y6+'TU\Q<)#P<@-D$CPH>9,> -MF9,4:9$8J9$WP)%HJ9(Y&9(C69(Q<)):090YV9(O&9,S.91Q"0(Y:05!( 5, -MD 06^9-!"0* .6)%>91)601+69B':9%/F151Z1=4:97O%5/ L3!<66_\0Y"3 -M(CM B2E$D7MJE9=Q"9%0,)%%X 14D ), .%=9:..02O23<7*052\ 124)LS -M )>YN9M,$ 374ILXD1]Z^9I$@)A00)LS@!',V9JZ^05&B90*(9G7^9Q34#Y" -MB9E2F15P,@2BYYE:60>AZ975-)4J\ +]=9HL0!0289:L69RP*9O2>9OWB9.[ -MF01,T)N_&9PS,)RXZ9]?8 3'F9R_TYAR)IBO29B&B9BS.9U/F2LVB9_9&9FN -MJ9.42:'! I7C297F.6Y8^9E;&8OLJ9GO29J28IHR( /S*0.XLY#]F99#D*!5 -M0 1'4 2$R00RH)&+F:$XF:,*&@1', 4:&0/$6:1?H"U6D 1#()G_]935F9LY -MNJ';"9$Y"J526@27"0*9Z9[9@I8AY#T^"%0;Q$(9N##HLV6\55N-9AO8)S/& -M@85^U1N$$J-FM19E66 W*I=&NJ,]^J-!.E9-BJ,)>IQ)NJ2)*JA/ZJ-?JI&% -MA:$I*9@Y*J&5.9LQ8*",>:5.JJ5*.029^J&6&9YB.J)P0@1F&HAPER*Q8C [ -MQV1O6D)QBF0@4J>Z]3&)!X@BU!O$:!#&.([)N(P34@:*)6KH^!$1,:SU:*P; -MDZS=R"8N\):50H_DB(W'*JW+*B8A,1)ZTH^, I Q"BGSF%3$:H]?L*U(M8_@ -MJBCM^(_O&)"Y)X]@M2Y2017,-IZ9V154":V(P:U@(18NP!+_,0-GD0-G02;_ -M6 ,N(0-DH2!AUB!]X9XL*F*0<:88LCD@()M0X&J)D:SMED*+5 ?'@1IC0YY@ -MJ:_VV:_D"3W:&JWMB@8#:Q$S(2@+*R!)$1<TT!!S41<3NQ<5J[)DVI$:NX8> -M"[(@(+*Z1;*N8;*7) <I:Q53(A $(:S86JS8"&>",2/=^A&;DK7JRK5R-JT. -M ;'AB*[/NK6,U;6\\;4.D0/\N"CN"(\W.Y"$(K;+2+9>.[?Q6A1V:Z[WVBGL -MLA;P\CO[&J99@01!L)-?4 5.0*%$\ 78,I4% 0)-<$PP0F9# B.YY48$X;%? -M 5/, 5)@ 43^01N,Z4@\ -AF@5!4F8@H :R0H6M]H,CMFA"I"TO>4NS44*K -MT[9R-@<OP .8!$7'ZE:O(B,GT!H]AHHP@TXMATF@.S #<8JQE ?](D':486( -M\4HH(C '9#5'TP:SA08I>R*58SK9P22PI!A!H1L90ADOH[U]1UJMU)7QU!JT -M%#U M& !509',[X"K+Q+"VD"\TV1$3.@D5G+1 84TKY7V$.&@SB*$XBY)5!K -MQ%O_P[_=NS&_1QYBL$8_P3C$@U\@]0)\:V[:45<C1 <]QAB$<46TVG>B 3E9 -M"[)/-P6T42&5@P>F\Q@"1UHKE!(5/%L7+$+KEAB0)1VBA1@"YWJ*57!AVJ*6 -M"Y:&VZE(89^:"0*,Z[B0*[F4:[F7F[EYL+DDTKF)\;FN);JD:[JH.P6J*P6L -MZ[I"F2N\FP21&S=[,S? "0)K>9%- (F8 )5^9M3.@5R+ 7!DA46*04369&" -M3,93^2E,Y$2N1<!74VZ-#,A4 ,E0@,C;LLAD;,D%A,E!I"$R- ?9 5.<G"M^ -M ;MU(!U#0KN$-UZ2%9>ZVT.\NU?YU1PIL<+$:[QS@+P;8\#,Z[S4&#.N1!K3 -M2WA!9(HA%QK:RWP?_+W[.S6:7+[GF[[34P;L>R393$ME,K^CU,#V6WGX&[TF -M(D\HX;^, U!A(, 85<!^\2I3/#4*_$ O4T8E$\'B_*I'G#A-JV<9W#FSDAH! -MX\&B!<(&)L(D#%Q&W+W?J\+"^[O$X\*L$<,80L.R8L,1XJS,E+R&Q<,L[ 8_ -M',0!YV5%7"$67- R_&A,S!E.C,)1W!I3C'I5#)]7/+BQPRXU(*,Q4 ,SD3N? -M,M3V$I; Z@C@%14<A].[1Q1^05", 5$8!4\':@)\,5%0-56_061.Z7!,@(" -MP94$\<B1S)9-,-:7BM:!C)%G$\98\ )!<+I]@Z%1O4,,F=>I"@*M: ,P$-A8 -M'::9Z=.4(A4VD-1DF;CT<@,(B0-_NGM:W9)48+I'0 59 62:0=OL$R/F@"B -MNY9#$ 1,P 1?T*.<:IN?'=H5.=JE_05!0 1*H)$T\)886M9?X\F0_-9K;:F! -MZ=:2#-<B(-<O, 7J6;JSXP)X<-=:D==0?3P"0=B'/;ABA0-"C0-(8=1)(:- -M&=GZ<J"_Z\:E>[JIN[I@"MZ)P=6P3054 )M4 5'( 7@&:A>W+A=#3?M'=9@ -M>MMF8-:ZG=:"S-:__<D +MS$;;J1BP4MT 1]L]?0[4_-_>#2?;'&[0;(70,/ -M 43A4>$7[@*Y]S!34$/&0A@RD.$@+N)*0^(>[J)/(58Y$&! *1':3113012; -M8I]$^KOJC=_N#=_R_:CU[;@\KM] OJ.O>04 2@2C+063JRV'R919,-:X+4W_ -MS=L"/F)5'MR#/-P)7MPH#CDEOMQC[=P._M2H6M@^#:,U+@-%W2E[.@,W,)\P -MH7O?3=_B#<?E3<?G3=\[SMX]'M_SW=02SM_^#=QJ?>4/:NB3S.6G^P*A@](Q -M5[H-'N%/C=<2?N:J"@))X"U8D-R=3EJ;?KH@@.%XP.)A52EK40-RKF0S7@.H -M:0.YA^.7VN?M/05%\-Z #N3J7=632^3HW;'O/;KC'<=S+-:$GMN*CI&(_KO) -MON7$'>I8P-R";N:4'MV8;NKX"B<0&^<RX#N,O1,KD6QLOL5,/>OV[=6]_J6? -M3=F6C=F:G0"<[=GH#=K!+MJDS002:9%$(.7]C>P$;N6^C>7-'M==7@5BHS1B -M7N;1;>G4+J(7&P15@ 783K@;P>;<?0-M'CM[F@-Q/@,P,"J2G>/I?>Z\_@7L -M79% S@1/< 1@_=X@H/(LK_*NS:2_KMZ6[02D7023*R[\7NC_KN7+GA@#S^AS -M#?'1/N:77NUZS9CB.?$_7?$XT*<X4*,:OQ,S<'LL8)M*)NN!N>M?[>M\?NY. -M\+CDPI#JF=MW3MYR;-X][^^[#?0!G^@_K]8$W^A.$'-T,.G3OO!*/^%DB@10 -M$/%./]UB@199+Q??_BD%*J._L_5,C1?65_/GWI*QO01-H.P*#^%DW>]4WNQ! -MG^5T3_0O /@1+^UDWO?7;MBR<_53<?4LH=V_H^K369_EWO7G?IA"L 16L-:_ -MGO;$SO:2[[@E3^3'WOES'^!QS^S';^!=SNM)8/I)+_)!WM4E?_)3\-P-K_J5 -M8IL=;YN)+Q8V@"EP'NN 2I4%Q!@4TW[:[!C' [1!Q1V_2P;'! )=8<7TO8PD -MHP:K]05?D/^#5>K!C_I]/757_,[:\NMM]&WH$3<FT&O$',.S=JB/Z:6JP;?Z -M9D" ^1UD ?;=@ N( V8"U\-RZHWR$0'+A_GL7+![8VJOV.TYZ>?UTIVQTPI3 -MS@"^O4.7_(3> :Q[<TT%\#J]Y]P>X-)S>&1*6Z2-*6 $F)3VVPB_(]E,IPSH -MYJQ>#I!1[L+QA;Q+Y?ORG%B;=ZR-6]R[?$<%]MV\:X%@C0#"0,XG PL< I1^ -M"K#+"<'2502A'[7;>S^PZ1U!.#&=+F#X^W[N E/0@$Y%YW3=Y"L"E>_R#3(@ -M)Y&& .."9'G,">@\"<@"2=X ?(&;S^?-0.27 &^@Z$L"%M &\,!!%P&!X,MJ -M FD #G2,.0C^[ 6<4TA5[U/L055' ]9"'V1(SB$ED0$4L):PT[>8 BD R#F! -M)T "!V$ 1'=A$!+&0-!'"=&@)21NH% 4ND$(" <G'"F$<V8%SE$]J$ H6B$K -M1%SV:;#!0H(@"VEA18)-4: *Q"8JD M_X? 3@Y'0[9G!SY<&&QT/6SMOB CD -M 8 C<&; )JQTG;#ID2EP(?%(H;N(<WM0-35!50CK;,<-D()U#L+TB]RFGJ8, -M-7$-)$)J,9D'%!'IP Z -M6,(48&Z?(3SD/EJ0,-!?U=Q,S7]HS?)%1V-9 8 -M,C]W6 ;@8>GAA\MPZ35#5$4!*\4>!(BN4+O5-E:( Y;:% Q,NW BL0U%.+D, -M86&*5$. "3!"<^>X1& O](/"[Q'NMS$H"==A2FR'<RW$N8$\< _YWDR4@&/J -M91&F?ICF;.)*L!U7#P]V0-N1 T!>G9-^0?'FZ;PO8!0181%(BDO1]C5%0#@" -M!6%>!(&.T 5.Q71H$JUB)3R)SJ[+C<68B/T@H(AB3/Z0!K#"1[&:I)_,6P*C -M2Y0I,D)8D:R R4L"E^\)& $B$ 2BW*\S75J@JU$VMT$4OX >HVI5P @8 9Y4 -MDYQ;5ZA) L'M <*,1)NBDF[;C8_CB<$;PM";FH"XV"LM*C\,0_56'(^C@])Q -MYZXYEJ[&*!-/7W_9'<G&8;&$#_B@+F-F? *)[/J=QL[X&4/C:"R-A# )I$:6 -M=.M8XUQ\C4(@-LY&1J8<R:!*7&N@2ODA1AQ8W(J&%9 "-* K5L>D5Q,W DS0 -M@S9@&E[';D<59L"-JWU8+@NZ-GPWD;I@D;-UWS$AN+MM4>2(P)%+<DNNR16! -M)\>3HEP!O(_L\!BJP2=@E/28I$-Z^+ 9PC+^IAN# &], +[QD0''\8!?AB-" -MX$G&$;FUJ!/)'(&D<TR)15(*!,GKYP.I8Y@BC&8@ ; [MK$AJU:5P%IJ*UO= -MHTZ$4\P6L_H2(DUK;<E'-&ZFE440&=<J2XK)+\ EUX"7%!,XP&_Y(\ 5D)"" -M/,I;:E)=M4EW]1/8T9PD5W9R()'"&Z#J>F+BR@H)0.4Y@2-P6!)+EBD@,F D -M@H $ !*_27C@/R$' LD*24DIF=&)" ]3B-TTAHO8%3JEI=Q*%V0+Q( N("G[ -M@*3,"6 QTTD!:7**E$H;2@(OX G *C:U<SX'ZZE5MD%#V(%E0AI2 F3@+6!# -MJ:"8572Q?@ZMK"RV4O0$&@(D4V*,ILN5JP/P# <$0R@()0LPE/8I48X+1LEA -M'"43B91^P51^2L4 <OR/IIP#G+)2KLM027HLHF%1EW4!5;XI4CDIUY3!4 PB -M1Z=8A35@!TC*:]@!.!).&"(+Y)GLGZOT>R]K5E(6K!-Z3!2NU)7^LDWYRBH -M+$&#L"26SL-6@91D>5G21XIQ \VR SU+BIE\U,.TW![54HA<S&Q)!K8EL+): -MQ4AOI0DO ;<*5IBT1SS3(V"$-%F-Q&303$<V0$Z.JWDUG<P5GBR:0)-/ABNZ -M):_ 1-.T5V4Q7S'!V-$5?..AH%G\(<,=K+-P \X"2T +<<$M%(C9)0;4 ,6Z -M6%_S<D$!^C5*JMD:"A_5Q3UEM97E$_5%U\QT<?-3S,USIA"A"<?"FVY%&T+& -MK*GM:MSK&X@M@2JX1>\B<T"*&X!WG8T,) !5-D/PT39B PD "J %) QO\T8 -ML ,=A""H --Q+%- "I"4>,]R8LYED@!V1-2B U] 5-*!T#DZCR7[DAELRJ6\ -M%Q7@.E]EKO":V,@<V9:#,"0G8*Z@2E, >,HJ#?0P[%1DF!R!R#$(DV7)68ZE -MY20AFJR1P8EM ]U6V>7!>P,'$#V5P98K2J?!8 ,"<P\$BTY)9B1BMKF(N8)^ -M5L3"T'/PYZ0\E2K 1\@<__DPCR=4>)YPP@ALE_;11#B&^(1/-1 B!8&Q)P(3 -M S V@AZ$G0L7<%O,5%LJ 8M%(QII3(NVC3!05*&A0*Q+;GM"A-*!YP%QJT -M"#P!*^!"<4!WF9&3K2>@@-%&0?EB+HR@5T"'\M OT$&3P$7ZH9--)NW0"<H> -M8QL?&*)%](B&J%P1._U,X5B7<")@E R!*3I)I_3D7P$S:7 *T]$0.6))\(AG -M@'4VAN(9+*IH2D :F=-R80[:H%.>3Q=UGV$T7Q+/U]E&*Z<5A:/+Q')I$RXZ -M.O$H_!2C&L%T % RNA%I2T=$?VJ4#K!1*NI'WVB\*PE3:9 J%#':11?I5G*( -MCU2_1-))&BMAUCTZEE3%!3#/K.9&9Z?F7$:HE&/P3A1P2=FH4 I6!T%LY1;T -M\28_ DO0I76!EWJCAS"<B&:ZVJ5O*QHYA*3YKOSDTK2:!@MO[01@FAK>EM*L -M6VPBFMZ$ @DGID+&XU=0P5_!B1<P!^1 EO!8+Z EH<"$( 6RP NP PB+F@K3 -MFO40ZI52R%FNL"T$) /Q\4X&T&(00HM%&1:JA$R[$3W]+Y "G[(%M[ 6XD*" -M^*=Y(:!:+#(5.N! 'E :[Z$UH( QD *2PM2#%S;A7?R'J? ?A)I-0$@#B4P9 -M@:6C'I8 1)T;2H,D*(W4T0*" !3C'^^E]<!, 3+/6D,1D .30[\@E1;@!)R( -MGVD99V!E>4! Y;*H$CDUIR\ G:K3\<9.W2D\?0'R]&T=5+9P3P-$M]M9O",@ -MD0F)!5 =A,42ITIGGH9-/HBSO.J X%EBU9\NB(AJ5HG6RZJH%[6;51R.ZE&3 -MS7\0J3:!I-H$DUI60.HV5:DL%02XU+D*4^'-M*2I-C7FX-3PH%.[$D^%-#\U -MJ"8KHFI4W0!2Y:8T0=4MF\HX#/F?"FU%70T)\#\@9UH+$X94K5_@/@B$!! " -M4$ WS"^2% 3P 3Z L:@)"N!_1\ )5($<]05<YT U/1A#,:Q+9,H>,L8RV0)= -MH >(@((*-@D60FVK:2&?,E1^^E 9J]":&Q!/!$C*KRA;U>396$:%$_6@@;Y! -M+T2K=Y.M]K&UHE;*M5I_G7Q]K?5U#-)6VQJ79B%N[:B[M;>2A-]ZVH0K<36N -M_@JY'H13R5S-:8\A ]!5NE+7K9I0W2I8[5G+AJS2U8]A!,+K>+6.L-"\B@#T -M:C>[4=]XAC9 ]AW$[S<#4FS6<VRO\&4A@9R!&O( ^)FH+VO" @L$ZM>RS� -M,Q:!#U;8[%H5+FQ<E:MA1GR" "1725"P6 ,R@%[+AX$>K%FY;#D:-8U]PQ9 -MM2 1:,)V=:A90<->+$%A.J%L]4@M%@N7_DQDBH_,0"]U"-,H3[+9"F8F+T+: -M@IISEC&XV9Y9 ZYIU603=VN;/LUC&DS+0)N5FO#J3S+-0!LIJ!N[R!2'<@*B -MU:=Z3M];.BT"ZQ0X6=5X*F<+[:&MKF-ARVK7?9HVD6Q9'5I4"ZWFV<-A4,-F -MH.BJ3=;+DEH8,!,T[-O$L20J!.75C+I7.^K!,JPX ;&BA);Z4E>J8YVI:*"F -MWM30Q'H SDYU#)@5J':=H5I4+>=GI1>0MF6%TY=%::.JI9VJIJNJOE-.BV<] -M+9T%M1=!U+[5L.H*;:U$55FJUMSJV59+L 8$D]59-0&NMMN7^FZI%D75M1@5 -M??7:LH!2#^O+6JG#5K$6VYCZ6)-M9,4#D[794LO+ZE.EK5!U YS5VH*4I$H* -MA]I\0H7C"4J"@/O:U=*&$S "]#6VVM?1Y5I+KMI(N?!UO][6UJE;>6LW!*X& -MEO\AV$R*AY+KJ20#8\ ,--<'&V&GJ[QEM>CVU=[;4=M0::VIW;#@M0J(5R=Y -M[=KKQXVQ(I?DTL67"UM9*\N=KR87Y7;=;2AS^RL*^*\U5\#.0IP[7'5N+DRP -M$,CGKDN@*W0=['.-KD:WFGY:>FIO:0 ^7;<85B*X6[X0=:<N2;QV:E9L'1"L -M4F@W"+C!#&_69RK>HL%XJZGC%2CJE5K=GCN;KA8O,KV\D+=G,M,^*:ZP*0U0 -MNH-BFN9)S]MX9<;C5:]^EDZ>7L'%.&D"I%U-376<EM-*"P4N;:9MI^,6JZY> -MROMY72_FI;=!5LE@5RXK:QLJ0AV\J';;$M36&S%"[T%5OK"6^>I3YYM[H*] -M_;<6->!J5+Y:$S[J7S6L@O4)&M:"&VP/;F)=K!/+V,I4C.%PEVTLDKC/MJ?J -M!8N[6:OM4=VX2C7&YEXQM7N];>\%MT94TP;?R4N\BF_U5:\'E4PLWZ^:;\.J -MQWNZMQ;>YECJ^WJ1[YA0MT;V GM?7%N> *Y>W:B^]L7YU9"*?@TK866_%POA -MN@%BRUCE;\-5MI*5V596[@%M*ZYFI;:=];-V7)0::15GS*VM,W>-IMV;6V#; -M;G%]NSQ78BS8Y5IH,=[0O;L2E@,?7W0[5D3M0B6USY??\@7#FP^UPMFC<J?5 -MUH4D*: (F0!8(L+9T/X=8?XZ8OPKS0VP3#BX.N&=FQ7B[A3.E\C4"MM="(MW -M'7 'YL(2./M28 +1LT2P&(8#9)B\FCW_EH:+P!INPU;R:AV$/O-G7D#FJA7) -MBPX\,67J @2OY<0+GC@,@.)C)HKQ"[4"1Y6"$Z/B3WR3$(,+:,5L@!1_*])+ -M-67OIKB3.T$6LX%4O(IM,2Z.O0")=M!>1YNOONF#R \$&*I*54Q+517P517& -MQ+@6\P9<S'>]L*R%<P="\#[B!_$IM@)#2JLR1CC,%V8F3V07C+@@P"NS>,S) -ML<H>!.A@D5 0/&D'J 8QL#*VHY,K29%8][K>ZLQ\+W&IW@8T^)0_,3HJ3;U -MNQ:V C?B[AJTZJHY]@K(-'*HXP>U&CR8&J-56\<S!(<,08\=*$/R"VFC">3C -MNB$%^'$,R<3%"&>( 7):-0Z,*B7%75@FTV1)Q!O&@$>P5AM!)X\OF^R3T]%8 -M0<:[(RY@7T&[$X1R36XK8P IPP"EO(SOE6FR@/,)QE;&TY< ^L!3^A0)0*'8 -M(?BC35P _*P#:0 $\&.RG#Z^0!JXB&!9+#L@MEQPSC)!6,L#89": ;@L 1. -M<T !_N_ H 3X/_L@.DP 6^@,'?4L@,#.JK\1)1AN6B<AS. F#>%^!)4L!T -MH V4T+S*F1@B [9,%/L?'0 "2D ;$ %\%#(W$A+"CV$ O^S*5X<-1+Y)63N9 -MB%JF":]R&^8V;1$?X]L4 &R![5X>D,E<F5?>9?9-FCG_/:"G7 900 F8 RF -M--/EV_R<GS,7< ,B@ 7<RP1@N=J &4 MB7ETYC\> -^0 MP"8TYB(%FTY$# -M4@#KG .SX0S\ !'0 D2 #A !V7D[6ZZ5\9T_0QA 739+9N. &T&V#,;+97# -M^0U09LN,F35S"2@)#[HT0V@R<)VS<\6AN87Y%A=,/*.=2V4"0 $8&C2K#PW] -M!1C&&# =(%H))V81;0=(-(>^T&MT.Z]H_=>BU4>)QC.I6>GU-=Y<!7PS<&9U -M>[-4_F4 G:%M-)ZA?ZTY[<[H$6VC3322!@&-F9 9,A30.?# %]@,V>B)I8_$ -M $4:LV/>SG. "E@!#3D%!O.2-LR$;$E#Y]><*&$;$2 "@UDN>R*Z?)C5-!_U -MT EZ01OG*U"8(M>BU,QST\?^FL\<FD=':P@(9, -=.83QCS* &H>K[F1RO'H -M(["=__)=Z" 4 XK0 "A,FR+S'"#.EGE2=VC:S)VGD@@(U,/RUP3F[8 ".BHU -MHFA;VG10E64B=:CS'*C0H[I36R[UX9_-M&+.T<W00_]EG5"EK_0;R-(HK'GT -M@-;<4?-T<69Y?)H-Z[$CD*MIDPBH%$X -+0!U) 83@"JMCSY;V DZD4-JWW$ -M"7C4Z=(K(\H=D8'< I8S6P@1WOE-P?C,![6Y<KJNB__Y57=G DSBZ[3BAD$ -M,.8O#9F=-8-&SF=C"'#F0]W NDS^JUV&FC2;9G2MFFUS:W[-?2 V/Q#YB:>+ -M!C.:RWDY?9CE$IV6\7+\P9UO&4Q[[+$<LNMRB;[+_>1DKRM.69M9,VY^DI&: -M($SJOQ;8NDO'_M0*^ED?Y\Q\-I3S4&;5SSDZQ^SDPH^K\ZW&SM4Z 7AG\/R? -M 3-H)L_F&3V[9RVJ!@ST>X[/\[D^W^?\[*$IY=3NU0$Z#0SHEKVN#/2=ILT& -MVS@WZ+,1H>OVA,;5,#JW%ND-G1RB=HK6VRR:1)MH%$USS[2+[MMYFU/3)L/= -MI''TAWUP.[H(]&:>+=CDL+ F"$0Z<!OIY/"DE4R 9=P%TTF' &8- C@VJ0[3 -M8_H)5#9?_:_3M/];T]NY3:_0.+VR0?;)!M@B&G:7[;]<K+$TH][29@=*?^FR -M[:E!]9[NT],Z:I?JK'"J=T2JEA7@&C1#[#>$J!4U0TO6CAI8Y^QL(;E[=.SV -MRYC[4KN'X+VIOW?Q#MJANGM3:_-MN9JWH(;>_+I5&Z-R#<Z^S8.MU4W[:9-M -M4DV;=K4=Z-6(^5<_[J=&O(=U"^C=Q_IW*VMF;;[C-K1&WG^:?9MJ;*VMN;7@ -M^-:$6EQ;[YK6J,_UV^[47ME#Y^NNG"[9-7APU_!:7L-D8:5'[%$<N,GI""B9 -MTCC@PF]RF^@NE:*%ZQ$8_B6!DE0^$+]8FGX*'=Y[5.D/KP%!?)N2PFZ'\>93 -M#;!NWX^)<[LG3OLD6^U$5FGD4F+1,0 '..6.. -97+GJ43?0Q4LX%D]H8CP\ -MJ N[M3\IU\N/6MGE/R$BYTN_7 :?W];(#MIJMC$*NMXS_W#KJR!YO&C]*/J -MAA/HXT)IB<.Z/G606)V-2@!W0#!0B(WZ,<H.&W\>A>Q"LS+K($-0P!J' QTU -MDW_R)WT"N( <. %2VBIP<5)^G4^ <87,7'P%K !.2<9O\R4K Z\YDCL.2BZP -M%4._P.2&;)2/;L'! ESY=E8!9%R6W^9/+LLYI2Z?Y+4<BMSR5#X8^ 5C:<XJ -M((_ @?/L.LLA;2;C.H%3(O./P8]+.0PX 7 9W,&Z5X<- 14DE^2)@9=;\E]> -M$C(YB-[DU]R3<_%0'LQ7^3 OY:<\E0OS<M[*7SEMCN6S/%W6<GY\RW,Y/-^K -ME=R7.[54/CH'.C%WY6DWCJ^9G5NJ3??RUD%RO"1X 7Y<T9-YKN#'S'P%=-1E -M+3A$@"M_S5DAA/?E9Q[/HSD#Q629O)IS<FRNS;FY0:=-X+P%B/.%+CBXP#F_ -MB&H6F6;CY"6,27'N4>H+^9@U]3,I.Z"Z*M;&+J"IQW"D[!)NC]/<"5:]&/,& -M8<S5&T(B5N*UU^/9CL?9;"8E=6@!X:$%>,Q"BXZ7QXAS >8A#8@!-BN,78# -M< $NX 7H9)G,)?QZN@0"R8%$G U"D00B@V-H*2< F:)R[/$"L/$&V=8)YV&4 -MAL\020[">2 9$V/2&1;1HH4A[QL@S8;X^!X$\S4&Z)=-!@V 7;#K==DN!@J[ -MP)#)?#TA^W5A$=BS:C?B[<(7:K)>RVM\0V^ZC"'%J 40 >/8+50W:+0;) % -M]+*.V@*20&S/8:D=\OIC1/G6XSIH( % H*X7=]0#VP/[8-?KMOV6['5/V]<% -M!A=(EQ^=M;OVMG)<UO71: $$(;N3]WN)V%,':*#/.T&6!:^CLZ)7AW['ZTCC -MFIP S/[92P)I)^X/&*]/]L;0P("*,!;M7>' GW;Q'N$/0FP_[[4]3>QVW,[> -M=?M?[^V=MIK^]NL^?!MP:5>OQ_T@"*OH/MT+@G5'\463PW=@?UPJNWM!^.[A -M';P#=Q"?WDF\WFWO_#VQ_W="(>!9Q\TH\!H^P0N,!0]X&KR./[YO8,*_# N? -MD$5[5I#OH^2UD^;HSMQ_4[BX?!UUC1 -<4(X_J>,MQO5_7.0>2EEYI\[@'TT -M):$%=.L7P 5<@->I#"2D1 .<.#!87@ 90.50!+R[@#307]2ZPXJQ"<#'RW5T -M7->_''E7[[G=S^"%W?[A9SMA%_%AX+ K^<6^$QJ[BX'LDAUX5?:$3$YE!F9/ -MGP'#-&@'*?SD0;M^P? &_L7C==+\X#/)>,?K+B"Z+X'"9 @Y=7]7[ #^4S3Y -M^6?E>SW'^/5O(-BC@&%/QY! 1QV64Y[!%WAG#WK)N[2G]L5>RU?XQ'#A#<MH -MU_#?GMA;>]2NZU<[QICOO*&\TW;:7N3U>J;_,YP>QQ-:%:\Z6+QP)[ZZ'CX@ -M2N0NK)1[F7?NEP\$T'B7A MMO+\G5E=>NZ=+20_D(_ZE[_0S^=,;E-MN[TN\ -MIK<M[AV^=^=W'^;I>PF_[_E=UQ^7VYCA53Z[A_ =.-H+>W5O[$=]L@<!RY[ -MAQMT/_.K_;57\-I^YZO\=._SQ;T0*?="J>7#?"Q/](O]R_?U'7[(>WKT#NHQ -MO<?']R<^N.][80K<&7#EA?J'.,87HX7_DJC[C=?ZR,CBJ])[2?$5?GB/\AB? -MWE=](X\^O@"2+Y6<HR"D_*5OVL,4F!\LNU[AHX"#?^:+0)IG97F S8O]%@#G -MK;O@)_QV7K?B^8*PY_O\GQ]A>4'0IP%"?V ,/:)W^XM^A1\$I6Y3<@K=/8B! -MC8>+B9E ^MF Z0^ZJ!\&V/"'@,,W0NM__68@]JO^CW #RGI8^NJ?XO9_@=/? -MLXUX,RV]#:NK,UK0.A6RFXW:?&H7!?"EI @>EP _KSC=L!(#6)MK=BNQ7G&= -MJ;P;4O\A@!F5G!&(_=Y\ '?;:?Q[-^W73T:E?_C#_N)_HL-F$H?(L7;[NH1' -M/X)?UJ=Z6?$?\9?ZU7\$R_VG4#5?^]]8-8Z18'H!$_ TF'^Q'\VT+0E4V!:Y -M$_+$0F;7]'<977]TF)PQ"VE_2UCWUW)]?]>?^.<=08 ]6_HG?>E>TMBW18V% -M6]88PB+\"8"R'P&8?(%@%5@-4&KU?U3)_T>5!(#SWP!X?>& !((.Z'3Q@)G. -MB/0 #@'G7\\F 3(-:1;.)*P(?]L!9(!4[7X. >M7:+T \5\5Z%EM7+/?YE4I -M4(%E@!4(!A9E7U+O=_SU8@>"\@?\H6-<H.OW!7B!5V!4M@;^+6U@0Q HH77, -M6#?U+45:T%\WI %6?QQ@]M=R;7_1G_<798!_F9P)6/UA)T6 'B,$\"1'@ HX -M4+& !!D")FY=562@&2@'[!<V(.WGC>E_@ (&UF]E49?@4I%3T(%GX! X@7UA -M#4O$L@#:551)$U &?H&?8,OTM)PL4@L%*!_\@3@.!EB'27\NR?AG_5%TAB!J -MA0@F@[8."1C^F5W&("0H"5*"EN"D58"Q?P:9^]<)XH*@8 1&!#I4#8&2@00F -M?0"@',@*?H*JE#<X@:U;.F 7A@1>++:@)T@QM"$K!"\XM4PW5IE-U"[8#C4! -M'K0/MD+DCV1#E<Q8KT&-=6/1@G!"%W@+UH%@@9)E9?U8C$.012: 8&!5.ZAD -M/%U*UM+E9 $A2<69-64AA#W6E05DB8+>& )8"F*$9 J9]61UA%(68R!0)75; -M8/RG6]P!=!<66*W @3)A&$ 3!EVS'TTR!L:$<N!,6!.B@:N?[W?_]1?"GU#( -M$]J!O!@>Z+"\!5496"%6_(&D%3>4 1:#&R R* (J@R'@,*@(XD(E(#3H';T- -M5X#Y5PUR6]>@"]C^!5])H4XX%-)3>R#^IQ;4*P]+S^+5C8,^8$(8%+J%2R%< -M*&K1A0&)7:@ >E=UE;\5,>F$V0(3:*]5$K)9Q:1\U(.WDR]XU "#3(TPZ $2 -M@T: ,5@(;H6VSC+(&6):BV!8. Q&@V2A6>CP6(,MX 'V B9@!YD,"!3F%$JA -MFQ4*&H 161'8$'1?LV /F KFA#NA;$A/T89$5D5X&YJ"A:&LA!A"@*S?</! -MT(-0"\HB4)%"04UVA+AH-]%A@[14"81P D%X,-A8WU<Y"!ORA;[ACA4Q^5A8 -MED6P*5"$.>!PB!'R6!IAF<42^A7B4Y5%'HZ$2,%?F!7<'H&A61=F0507BV& -M!_P$GL6)<#P(&R^A%#CZO88/2.I@OG@)1"'OAQ/*@7. @KA,A(&U'YP@_$6( -M:,"":!.J@4WAG_04RG# 6/"'(&*(&B)3.#4YA0_+4M9HY8/YBO/7U@6"5V%F -MF!7:<\R@X=<57H9?(2-HR#B"Y-]$8@@91T3 6>A4I86JX5K("8Z($B*#^!N. -M@@S5_O>S$(;1%SGX T*(26(Z:/\QB6+5@? D5F31%X63).J"D*%S:+%4@%B7 -M9>A;#8+DWV;H%1Z"-Z)OE2.*AI=A-,@M:!PDB9"("1I@!1D,V!J^?W%@3D$B -M3HBA8!>V#@J'0PUQ&"7FA:I@@I@A HJNH"+&#C8$%-FIU1U"3U\B<V@//H>U -M5UAB>VAED).F.)8 9-BA%T-C(0P'H6$X)?J)56+]YQ#.AQ$A23@H$HI%EIC% -M'LJ%KM!*&&7!AU06F?(0EH<NP'GX"MZ'3:*6N!_.56.64N >WHIHELH"$U93 -M?:+YH32P#+98@WBV/(@YA<PP'B +LQ]09B$BB-8BM-B3.75EG4#"E(F(S&+\ -MURUBBR9BHC6N?(AGW8HH%3Y:;%W(928.6&CB,4@C?H:>X9J(6CF#C:!8^ A^ -M,J#1%& %V !VXD"&)VJ",2"?:"X^B^BB0T9PO0!CQ0MP@9$5+T'/(AD9BI,B -MG$ %,(P4@L#($EB*D:'>](^5B5;A,%@OJHDX(IN(AWV&_.*.Z"_VB !C$^ Q -M%HSKGUJ8#;*%W"+'V)/14XS6WT4HUEJY8::S,5Z+'>/ ""8VA[V@R-AQR05G -M!<@%EC"-MT??=+%HAP9AQI@HGHO18D/(8^V*(^%,@![:AFW!L)ADS8H'H*WH -M$;J$N>)X*!*VBBS!PQ@Q7F!0&EQP>KT$L2)_2*88#A7("%+3G(WMQ0)E4X ; -M*D.7N"RB#^_?A@@'%E0^69#E$]I^6R#B2(IQB">BAU@7OH%*'>(8+J)>S!]5 -M^/S-B[/0R:@5ZHN=89LX8+V)IR%:F!KFB:RA-M@X%EI6HG45%QZ I" 2AS&2 -M*8@BXGA0O8Y>%2RX_VT*[^ ^5&B%!YC=M@3K%16UDF.X!DB&MI<%^!9QCIBA -M9O@YIHQ<X<H(.H*&8&'I."2>C@CCGE@YLHZ!(G"(;]F&,AQ>F K:CFN5][B( -M@8/A8]!XL4 !O^,3J#D\#,0CM&0\8HI]H$K W;B(JLK>1'8A8687VB4]7H9L -MUX$%A=EQI](@!EW=9GD7+Q4HXH[Y7[ H.T)?D1B(!0.)6(M7>F5BQ2?W8XQE -MA.V/':!OY3]R?\-@ .EV(1=_W!UG0)H*_%@"N3.6C]_@QQ.0B(./6 1)((58 -M.9X(4$&66.L5\]>I^%7MPM9$#<D'.Z2 <1W6.0/AJ,@=,H#DXZJX-J8$BN-] -MZ"@ZD>CC12@KOBSMH=G8$J),:2-5PC6VBG>)$]D>FH2R(TKXLJB$'"&RN'A$ -M@5?2@<@LKEJRX>-X.!Y=;62054PQCFLD'+DAAHM]%U*X.NI==%:ZZ$SY"1]B -M'MEQ:8XO(O/H.=Z+TV.^"#TV@Z&A]7@G8H-ZHNI81_*1\U:@:$^UA]N7#! 7 -MX(90XL52.]J1EB26&*-LDK,C2,@^5E.7DIZ%Q, TP8RV1"%P+/$CR^2$M'E4 -M"YD8#):,E^$A.:75B(JDFS@"-I)-#VJ8":Z&FZ!K.$G6?7TDA34HIH?[5B=) -M.XZ/H*0R^40RD^*8,VE*MH\#31+#. 2/KR3\N#*A(K,D_<@BP@F0S;<4+_87 -MY>34HT%FAT9DJ9CIL)%6HA()$3*1Q)0722L66=2DV(@79(2TXD9H.)B1:"-( -MN$72DPA529A)DI)B)%5"1OZ3?&.!F$:^D9:7I6<3D@7;8T0Y.:0X/6%5MT=F -M$A*EM.@"T #AXD.F1QZ3'$-'&2XN?X.D,Q9,FH[#I)%H3!*.GU='Z1?^B@<E -M[U!*ZH;QED5YUX6"#*3VQ5!IDC9E[_BRZ$@VTE[!3;Z/X4$L"4XR%;0DG$ + -M'3=3 *ESN?@O' 8)<GJL&9=+!Y$'O!>X@3$12G0%GP)RLP0 *"R943G_7 S0 -M1;* ;0V1CJ3!"$FFCC@C26G7892S80NI _8)XF-.R5%>E$Y'7;E,@H];HJ3( -M !*5,J/[.#Q^D]'2N-%45AP<3E2IW$R5H\1A854^>S_!IZ!5<I5E@%>9&("5 -M7X9B15;R)&8EP(!6Y@6N0\<E[L@+-LH&217E-K@5"4GK%9#.%2&&0,:4?"7J -MP5.*DD"E+ @ERI -3]-#+YR6ZZ3^N%I2.:UE5T! KDLGY&S9>,F45^)?B3X& -MEAL6;^D8R4&9HH,$+UR,N)<*4)@D*56 K4,$V#_'TLB5L= !M%3FY,V9;GU8 -M"5E LHINP &90IY)9-@5I4>5#E;!%& Z!%"2$JKB6\H'UF6\((!IEU( =^E= -M@I>EAUL&<)"7M91?@%XJ6"8D>^E>G@WF87QYQZD ]*4*8%]:!?;2%6.YH#GU -MX^VA*9P5AI)VXV'RD!W0.BDJ%H2DHM5(6^Z46J/:.$\6@/:DSR@<]@GK(179 -M3QZ+#646"2<,E 1+??@K-E^YI3[)!A2+-P&.>44ZE)H81 GVJ7:D&$M042Z9 -MVIWF55C\A'+EK^=1CEZ1X[KXL,2%(R5,V>Z%BUQF2AEIJ7]$(NI83/*)!UZ@ -MV"["CC_E#A@T2HG;(M]G6ZJ#BA@L"%0"C=:DJ0@G$)9&I2N)5-(AQ6/+M%@^ -ME1;.%$ #*#>YT%KY7Z:"-6.1>#,>B55FAW=079+WI'#HB.69J*!>^>Q)FFL5 -MI>DSIH>7)I=H-?*9AB4LB5@:CX-F8WEHX@&Y4,=E+Y0KJXEJ*7(5EPPF;$ET -MH9!G0YI)9V*2;>81&$,.<-/E!%E#WI#;RP5)+[R: 2$1*8=M0_X-K7E<YDO) -M90JI:W::=B6; $/NEL!F'"1L0GPV).5E0>:0IJ5HA19$6B0<)9,50#[7A;E9 -MNMU+Z>5KB5PZF+BF"" 1DF&E&@!585Z8^&6ZA*J4:AM$4F%1@6AF0!O0 O@ -M9L"51E&8#FW /6$Z& %- ,YS^4P!6@ ?]5N*F^\5HI2O43+H9A=#R7AT[29L -M ,A]&TOD@REOUE/TIGRIQMV;]V6&.2GMF^FEG\'%Y0$ I\!)<!J<VP'"J7#. -M#0VGC;0M1)P74<?5[=@>*X&,TRG^G/#"2@ J*ILGYG;H3EXLTZ8\R2L6E*\B -MJ"E%\H=D8^YH9.** B5[:5U-A#]F3>DUBEDIH;%H1<*':&22J=29!H?!4L>* -MC6(Q'!R(=BID5QU#YHH%65,F'4DXOIUJIS'&=O9P95U:%"*ZG2I"WKF-/3%] -M9[N8.:*6+Z) UFB:F0GCV1EX1G5Z)WZQ:R(LMP?$>+,8"+_#<-C_760IV4JV -MC_5C?D$OTP.L+)/320:-+9[9HR1Y=SZ><>?:*7E2F\ZE"^D@E9*<)SZFC[5D -MH&=6('J*?H!GVDEW,8BD&$6Y!>*=OV<8.#39G<D(\1ET 9_I"$AY!TJ.; )7 -M-2[VGL-8\>E'(G\)8/09%1H;CY9**6FQE <C,=EX#I^!I_4I3?*:] JD>%-F -MFB^+^;E629\WYD%9* J55 ER2!,$-FI!8(,99 C*(78P#Z4.E ' $5 $(O*/ -M ,,X: @$A4!1<6![HPX,( 24!B4!;$%"_#+>7"WY"[*5*^7UV%(^FB]E\EE^ -M+I^M8Y#5=WV:MF$KM'["F3$""!HHCJ"U(3AH@M*?JXIB>+/@GT )#+!_,H8/ -M!-&05+ 'C,%@8&$4H-M:+T$9)*!' RUU3>P.#RAB\6@H$'D!!2I.OHL;@6-C -M5EP*CEQ;1Z:H>2L#.]8::"6&P_802P ?,0A\T;4($>I)P/$"2!P4QVEA)J@. -M1&2.Y8R@/] $$[%,W!6N!2PR6[@>6V4PI7$F1U/)7^:$#)QY:'A0=M0$@0T4 -M9KG\H3Y ( H"K #\V%CAFO5&< (6((DJ%\\%H $:N!XJ0E[ P E3Y!JJ0]9 -M+G#"YD%XJ"\E$V<A,$0,)$A\1CDD!HIHU?$I!!HAR./0*G1+!4JF,&!D0R\+ -M%NJ^H A<*&/@A=X@S$3[P6UL)68H&GIU7!(M1!M*4+VA0A5A((<:$A&&2C P -M@'&M02!*2Y(G\$F"Y8<R%8 HN"&(0@J&Z%2"B"JBC.C]^8@F3.;")'K#9"5F -MA/R"B9H1FRA9D0$)EY\HF2**M@:DZ!EABGX;N(HJ"ALX$JUH&/J*4@:\2JLP -M.'J@:>=5.1228E6!XYF0/GL+J7FH43*+>*="NA0RI'UG'DDH.*3#F$4J&V:D -MVV=!TGV.F2N@6VDS1I)QY>KYD+X&;V'8U%,R79ID^HAIHJ >:0@*)M&4;:9, -M*FHR@#V&EI88GG\S* R0?]J@DD'_&1H\>^8,$;J 'J$.* 2ZA,86ODL94('^ -MD),A!OI]:J#AITO))U:D$&E?V%Q.DR5HI+AA>9*I8$WJ5X*E+JA8FH'IF:X! -MCT0AV)^.Z%!Z@QJE5V52REPLI0(#$NJ42J!-J)PQE?*>$:+24%R\ $> $\'* -MN "/19/I&K1VH1 ,0Y@:IJA'8GHGR Z!:6-*O!2F,P1B*GHA99JD5_=W5J:# -M*69ZF#X6G.EPB#5UF,#E:D*;/"\!QP'GS75JB<,,T0.PIGC 0??)0 [ )M6 -MQ& 2'17\\D"( "2 /52#0&8)P*$9 Q!/2PMD*EWMIG- @ 0"Y*:W*883 _2F -MR:EL:D.J)YB$="H"/*<T6P* X2"G64%LRLHLI]CI'(#AR #;*73Z6\XG1R=\ -M1YNZIK>I>#H'S*892VW:!MRFT"F>5I[R 7/E8*"X)0 3Q&\:G&ZG"@AQ:IPB -MI_(I>;H9-*?I:7<JG5*G">IUNJ!JI]QI=.H"@*?5Z7@JH6:G'DZ#"EHA<2Q -MBD5NTB81ZFQ !X@!<P 9,.ET:M I9*8?> A"!(>A0C@&4@MA\"E$+\Z,MN'4 -ME C[RW:F'\@O_@LJVF@02XV!0(!%E('A 7*CGFPE%(5;09OH!T; @S+$T32O -M@I.@'J (P@%,85DQ#J0%B= OP'?Z04<F2H@!@ ? @&Z" "?"3P$Y= Z-!%YP -M'D!OQ%(8X*0F /K!JZ" ^B]EQ(I@PVAK_H>>T4.0'KI!>!!S]$C*P?_17P V -M(6I[2IR6J.D#BJJBXJ<TVXM*T_00,FK%4*->+CAJ(@*H\J@=F8]:S@2IX 8) -M0J3"!O]"B$ P=);8@WK2I(*I<X.4*DI$%E4J>G"ENA%*PD[%I3X/7NIU\:1F -M,YL!F4H&F*F-(9H:;JRCP4N;NG? J7>!G,JJVJE' YX:&^RIZD61&L\ %9NJ -MH,H7V! "!"?!>^)-ZLI 8Q-VD=QJ.:)*@H+4BIM0*82KR=.X^JW&2<_GNJA) -MRHY_)[IZCWBKUR<;Z#M09:?I.+EDF14OSO=36-D$6->E$G:Q#:-+E$&;H"WS -MSL#*\N1C1 #=()G\)!A!PJHV$*PPC\-ZL((C*9'"ZMY(* ?K6X*JB#P0R<O5 -M!"@$.@EHZ9/0/%I-V(6=D*QTR<'*_#5Q=XE E IY6;8'N.3.[0%G0]QU,60, -MV1EMHK%:)' #A2*E[!5]@':&*.<]4R<:STK"'KR46P,JP.*PA0M*9+2.MD -MMK2R #[KQ!KSK#Q1Z]2:/R&MVD32P+3^K+>.A"*U&JV3$M+*M#:M:P/+ [DL -M ;O0%> $2*U^P<.4R*5U84G6 VL^?Z>/&S5A1JG'PZ.#.+1J^24E T AH/<$ -MO_1LJG'APQ<0@C@M*>2TX)/=!3J &: #K $Z0"X&!^@ <H ., ?H '3 ?9:; -M,9C'4@(PQ7P&M4)D,$M%K:O3A*E(85&M:WBY1TE*=ESIBD*D#BC#+.5)E4XH -M QA1$LRNC=Y=HK=*C8?7U5%)_:V0 1D@N,X6A*O&>8AB48@K1:&XJI=85./Z -MN"HQ"*3DJ@-0KI8KYJJY<JZ>*^BJ ]@!.H 5(+J&*;5K8V"ZI@^H*U(Q!ZRN -M^IA5\+KJ4?.K&A>[EA[ :\>97-FNK 'N:BOHKEC4[Q2KM :]*VKPN[)1S]"E -MD/5 -B/J")<N_64@A1R@75 ,GQO1\3P,<W7!&<!7>70?6BU5&$P&QY(9X$7% -M(G) M=:^R0JG1AD@L1$&6T!!( :4!+M",3+0K"N.0Q> MT6OVT&.1IO$' ($ -M"B #Z+ CW/7Z/%QLD*C]!FD(L:<$54&CXC3IP^/:4 PVA *<8PJ)"I!>N3DI -M/;"86P0[P2II%FQ)@,%^@AOL=E9>+A,=U7>F-#0&(BQ+&L%J9BBL8K'"G@H% -MP;0 P\*QPLH,>ZSH"G1L8H!U( PB2$J@:0 ,-BS4EI3>$Q]<!VM>?K!G+!V0 -MQM(!)*QFQ@70 8]L"XO?#1$MD1.15%P.-2P=JQ[8#'=L#-L"-*$*FM(2R*)K -M'MH8"T@@LB'L"+O&G@V/;"1;$'P,54C"D<E*LN$!V+&B!:B'&EXP_WBRBP0> -M KT%!&I&C:4K5&B%K"E;QH*P:*PJFV8XLI L'2#)QA(S U9I,WBR8<$!@8AX -MLD]#'.&\(!/\Q"BKPR8 /"QY^<-R2D%L%WN;G:.^$55QQ)JSMH$2VT8<,)\! -M:O'$MBC^$("!%@F=,RL-8)N@1<KC<;<NH0S'RB"'!3BL#F<1@,A-2GYK>(G$ -M<DI^*P#UN&:P;EQ#BT59 5NJ&\#0'J]5P!>@*#%*B4?_,R+8?;;",L$I.:P] -MRMRJ K K%NU3$AF9%:<7_MA?M+2V@^P8+E$5ZPHYU[%4 :4-IT2*LDDE)1L0 -M=/!C.RU ZSC0<7?,I)29Y$]4"61PZN4% L-FX,=*$_,#(J+^$*M *.-@JV*1 -M*V?S9,B2L=5!(BO"_C*:657K!BP4%6T/P 6( -89?F8Z4+3< V/ 1^5/FI3' -MEC2<77*& (L8N&L4Z HP%?@U3\!;RPAM;RV)'., =C5Z3&^"\[AAZUI/6SD8 -MF+=*7M"(9IL?*DP@.3F-A *"$.?4 (E-%0N;T7051V/6G8(=X,8:T)W.3P J -M"2,XV $G /B1/Y6V#\0)8 6DMJ1M6-:6;5)U 8"&6F2P=BU28=O2J&= "J#7 -MF@Y2P!4@^8U.!P%+Y]IB=#\ ]V8$@ "DF9?FQM$FH*TJ-MI"9MKL0=BI:;%L -MP!G0S#%_F=#ATHFJIKK:5(("R$MU00KP4<@!* .*1M[* >;M2V& ?+-6;*<6 -MW8JVL1M\-\*-<,9L89!UH \6!RB7SATU[@))M0<]2%9<>)L5C+>>4GE[WJ:W -M%<=ZV]Z.3#T'?#O"0;<1 WW+\AUTIBW9*J85)N#'[H:Y47BI*]FA$ORG60$' -M^]$Y<$.;\F9NCEB@P33'L82M^5+SD>=%I8\#;<&MJ:B%;*DFTUVWC6'L5N+Z -MN)G4;"O7UK;M:V2@*G4!N:V[5N3. 4>N;[O7!K>ZE?DV.HU.(*[[&KS]L*E< -M"+!!C &B!0JPY&X!,@"2>S9HLZ@9^)?<\B[,K?"6X\9TL=M\2[/=M^E2?EN' -MG ?\[7?&1W5<IY>J$R]4H50I35#;"#6U33^;V()Q:!P Q<5Y<6><<Q%>E@$U -M!*)+Z"JZI0>(Z\9]<6%<>*G1S7%0VNB:,.F;"53R:JE6+X9!O5$>I*[,'TS@ -M5]4VYR2B!.*>L\[<0X<"A ",;KRV;D)F1:Y#L06 N+(<KGGH;F><[:N+F,A0 -M3( ^!\IEN8C)=Q($3"G"+D='FR!T--M?]NL^ <'N)P?^/6:DVBA'T!UUMVFL -M>YO% /^MG\OQW O]5+BTZA*UDU*O"^O6$ 0;;5;KY@RW+NJ:Z]YFNZZ'9NX^ -MN]'N/D?1A0#%K@J%[$J[&9VOL=']IY>N2$?2I71J63GGTKUM\)VS:^M N\EN -MNMNI6;M%';9+G&J[C^VV.B=TJ]J(/N)1%HKRJN>D\9:K1M!&T/$J3]]JG]6N -M I+\E.%)*(R\&2\W4J\ZA?P4I9DY^I"&!?(TK[:\R]-!]3#26F83E-;5=742 -M@1K0-JVE<(*XFH^XO)<+57%)S!2@@?*D7K R*6S,1(@4!SKH06"GB$(L2E9# -MUIA7/ !+VCUT(SX W]0'_4UP4[IZ]"Y/22_'L/2>$DZO4!%0*!92[T2W1OR? -ML()QT%1JO3E,U\O(?KUH0-A+"MD 4T%FJ]T OB&J5>J'N5( :L T7C@ALY3O -MM"O]2VT2!"*_VBJVE-*#CM:+BM/A:T@)3&M<P#3%"! "S"RU^2)2]2NG0$K9 -M<9^4&?7D51Y"0F- 2'E1 RS =$CI497OX7M) :@XKZ#'+R0'HN\793JA3G6 -MZC1*Y6BV;^9TQ9$,=XC.\;[>4;YOP0#\"K^4+_'[QR&^OX5.$4'TOK&O\YLZ -M3;ZMTYU;>T4]9P4^.YXD #AK4-22A$/; A6 M5I0=&M,]RI]"K!29O(I0$]? -MU*S"L5A/GYJ%H3W!$]R3L=08?$\&1-4@P,!*5 GY%!"83V,(^@2%$, MRJ<P -M^N9+\A-8!A+53Q[,7<"7Z4\H"_]T:L!+L!* BD4)4/;2I_ PP;^^Y<&U0-UR -M'</\VP"GK$Q4!75!,2GEF%["1$51DLD)!2N!K"K4FS:MU5#=10S<FLA0-!0( -M!4/!OSZP8_*;?&A#E B4:&HU0102/ -[4(;?#4R4!+=.< _E1$%14/ 2#"O% -MOYG.%" ;S(*!+)PTW$,OM*U41?H%K,$!0',W 7_H9EQ*Y I?VJY44*PP2#" -M-&$M@<"UVCV1.#7 .T%/Q +D @1=POH.HU'JV"2[V@Y6.MO@K5VFT;#=EJT -MHJ-AH_U#_AK"7P!=0I(DPD_ (HPR+!..,-;J&W61DC#.NI<P?#$))KP(%Q6A -M2&;9"4/"N$,VFK92PDR)Z3(NF,()@ @@UI*U;2UV=K:BHS)<* REK;] \"(L -M EBQ=FNL1.%\P2>*5H+,M@8TC#8+HQT6>H >@/FQ$@M""9LM[0ARG1SPR<X0 -M4RE\0B^0%45G(%P(JR6(L)24"=?"FLPJ_ D7-5G-)#R7B"27L#FL"8>T*NHN -M_ EG-^VP*"R1\"4P21%P!=#"(@ J;&*HP]U4*WPOZ<,>RH1BD0#$M.U.D3-T -MPKY1+YP/_\*T23!<"P_#^5HQ'"QHOK[O^\3YXCW+V1P@,)%T#[ :EP*X9B%* -M/;IG(L/HR1J3R'8-(D94FZ)!P]+P16' @A0()[>6#6_#K$PWS/SY#O>"@H0H -MY22BT4MRZZ"M*PD1X"T8 >IONI23=)Z'R00UI6AG8-E@8K+.PNG28J(1TPO[ -M;*?"5IJ6W X,(+/VN6V!GLO ADNB\&MBZ\@F#+'_01"+!:K)1'R=\":8&7 " -M$.,:E($<\!87*(J3.VR<("=(P%T\>*Q7]C =-(_.3VEQ0KRI ,3GK4YA,.4] -M9VM?TS3YPN]"13Q#"</$\*NTQ"$(["F?&Y_\#JL.I"<*#RH\BH]"VL@H\G M -M7"XI%N?26]R%^<*DRJ*"I-B7J;$(8("XQFF%7-RE2"I3<6U\%PQ+,H1K'!<C -MQIB*8DRA ,1V"$/A4$#$W92,,Q%7Q@F 18R?9<8J;>T%8/0I@' 4)Y:P.59I -M6 0](<.D!>?$RCP,1@O)4@8[$(E!GIH7*# >QOT+5(!Q>L"V=ALD9G;!'@Q! -M#9=ED)4S[S0[M;!<PQB=2&A-* ,>C3+ R6<3(&M&BTPMK)YH!IP!=@8C\3T; -M,?6:+VT0(;'5\& V._[3X@JK?"*4P2K3RES(!(Z '!X!)Z.K=ZPQ[BJ/;YM" -M?8 OT%P$3!H'U.#41%9P!WH0Q#S/$R]S%^,0E+%*-ZG1SQ>'!"TE+$ 2#RP -MI0?60 9(2A$P0GN\ E!L+4?#*<%/WUEH(%IHNG. KM%"!,E*PRD; <L'0 G0 -MR0<%#SZG#55TY@"$\$&G^)H&:%EC0#H-N7+ %I"3U U! !00K?EI1T 7<(OA -M/2A:1KO1I@"(@7'P!7B58,@WZ^8>=QFN1"(B$\A20(=K)L-//[+,L":+Q$F# -MFVPH(\C B9T, IL.!_* K,C8Q?I9)I4&Z &,K@B;*8_(4@!U1Q,(RA4NIQ2@ -M)@;DL%JC*"^[9S(,XR@WQ)*R&60IX\GWD0GK*8/*W0$M= "9RM,IS38H#WR% -M<B4,#Q,!UFWBRRBCR<?2HZQ3U,J6,!%P*\L<>;)&.RZ=Q!(GEYS8%)WV6KBD -M+'\BS+*:3"N_R8"0G S!U<EW,K5<<>C)UW*??(\ RA,#JAS:JLK%\J&\*2?* -MVYF/;!IL$,YRI)R3V,N+S+1,!PBP'+*9,$.@!KIR'_8IA\JP;\'L(:,&P+*\ -M+-T2R@]$JRS(O,K?<J,L!_3+=4&MS-L(S 2S)I,PMZ6\\B(;4F@R$;.PG"I3 -MS*PR2'(L)\OZ<@32+(_++G-= C*OR];RHH0M]YR9(HV"D'@\93)KVS*S1WV) -M/PPSQ\ILP'?&,;?)HW#1? 7<S": 0B$09Y82LX7[/Q7+L;#>@#''S/PRS5RR -M-B6'7+H\,(, 3;((,3)O$'<M"E VN[55,SE;MV(Q'V:G8@%!>JLR)<P/QR1' -M\[(L<BC-7O/=[ ]#S5*S-)$*WP%M\[U4-P\FI@H5@#%SL";G;1#\NLE4@&F3 -MG3PI<$,0H-'R<6Q:5D#I%KI85(7)RJ2<]R5ND#E_&X\ND5%ZI&P>FN:<Z+X7 -M)?' Q"]URH0!/Y8ZC<XP@NP<_"ZB)#/#G#J9RFBS;NLU:RH4BL!L*M, H_-? -M1AA $;B!XF:YN+GHJ)!*X%4>8M0]$3*T "C Y;($Q ;#DRO<O_U_V_.6^V_2 -ME[]SXBP\C\Y;+FM .FEF9BU^5LCV88LH/]8[NVNZ&VVV5MQF'/"%NSUS+"B -M>N ^L\D[ /V3/P^<&X@) 2_3B>#+*<\3R6,,QE3LL$J:?,:,'""P.NS HVY -MS0$K0!J@UYH=LK-4VN:NS*FS!%UQ$ ;#G"05NU&8REPY5\R-SH*4S/!RGL\G -MPP.-]T30@E3[_#B@T'2K_5RJX<_ZL_&*.S7$_;-ZD,G55@XTP=ES$#(#= ]M -M0'?*/VX'+4C%SBVT#P "T]!9P5^FY4)GL1NOH3+@<N:>$CV5]+H4)F$@RK$R -MI%P/8,R5;:S,=FM#4S(+-!C]*0313S02W8=.T!7T!9U$G!'_Z:"L14?1$_23 -M)D*7;23T27?10=&PBK\)<]*7;#2NG ; T)F4#(TZR\]3B4S7*1O/*T#N,4<G -MSVZT'<U(=\I]]&UVKJ%SF#03;<YQTF>T[ LN,[*LP7^6.K$O667P:SIXMMO9 -MA#LL3TH9<:EKS[8+?+&("1/HN;N#52HT0RCYB>(,W\7,:3)YV1C[RVKQ.'0S -MG[<#)R$B2:G,\_+\=#A'*(FS:DN;R4^K;>.<.D'.DO-10CE3 9:S(=?'5=.D -M<QAG;X+.5H'H3-JJSJ5S;W$Z/[?H=!C7.JL ]"T.U3W?9K/S.>UHV,X$0?NT -M,/?*N_/E\CZC ,-TQWR= ,\6B?!\N1#/]K3Q'+Q1TN!T5L \I[.A:J.!1B40 -M[\_T7#U_"M?SBI ]V]/VM/<\2)L. 373#$TKQ%3 ^-Q1J]#F,WTI J3/Z!HX -M31B4H_\T[ 9.MP;NL_]D3^/0MUE(W3\#T0#T$"U SU $]!IP1#?4ZR91'473 -MSS)# ^U"RQQ^[?9LN4#2%C29,$EKT*MM C H&]6/0QX=0B-1#R\%[4>? ">T -M/9U"FU/?L^E02#/5[#09\U+S8RD;4>V5R=.E&B0M26?07/5'=U5?TN!T)FWP -M<M)YM2=MU/'5(Q0C'3/+/XX!"G!*NP:I=($FO#VW;S5M]DH3P]5QA[D[D%2[ -MPSG97GE+84F+I=F.U6DS(NJ$W 418N5+F[C2*W/^=#B7*B2U-$V;4-."];IT -M30\!D3-VHDV31MSTY7S(I=6;LW,Q3EL%GS.&&3ICT>!T;FTZMP9M-2,M7(<' -M[W0\'5C/T_AT6ET[.\[Y=.[,3P>_O'-2K=LFQP(U:KVI&-2J4%JM4"//5#4C -M[5"GRLUS1/T\4PS1,T5A45O/V+,:=Q]OSR<U6?U1MTS/<FQ,4)?48G-3S6^B -MU.2E2LU2Z]?L,TQM7<// '9H0#_;U. T3NV2.2!)PT[]/PO1&S 1#50;T2J= -M6%U4B]=]*%(-5.FV9_4R;6'CT1]T'"U5T]6Q[5WM5+_1'[0>75<G 'KU'_UA -MPRHK-"&]5'O86/5:/4-;V(WU3?TPY,_P+C?J Q!,CW$/G>4^V %T$5U 5]A$ -M-6M]8O=A3'2'G58_U9C;%+UB6]%.Q),]E;S87#08_46#T.6<&+UBE]$)'5R- -M1M//-FH3W49CU5"U'$UB5]4F]D<'8I-.*G9LVV*#U8#UDAU(Q]AF]8S-.A78 -M,70Y6ES;V12F)OU76]DY-C@M5V/0=+2%W687M=OSG.W2I=6!]K4+6-O3@W4I -M;5BKTHBU98EIL]*K;6--X3;3%N?;3!)U7 Y+G#/4[*TSJU)C:J=855R=0^U> -M<>ETBBQ*(U)V@*,K3F]Q<$#*6<;!M25DZTSQEFZ_L%YP&4NMG)*&?$W_%SC -M09LN<9CZZJEM>_@.XB]8DF+Y58F-58K%5AP[0AR 6B#:V;93\YI><>U:ICM% -M34I_F7*<,Q2\'W1'G$>9Q(W9_*0ZA]LF0*S+*2W;XR]5P@3(JK">P!#J$AZ6 -M$HCQ7MRNJL.T&C.<&KZ2#H&BV,$_,58VU+PCY*:Y2TOUU!&V(3- .[S@6\51 -M6]D!$/?*0<A4)2O4M';]6;LHW</M1+_0%'<"D";8<C,VF_;.[7(!U,?PS_W5 -MJ=PJ5W9TV\"<*D?.H71I0LD-H,(!VRUQ:G+SW D=<;KCTB9_6<N-;G_2.G>O -M*W-_&W' 1)?3X7.=G+3[;7=JS.YM6G'S<BP=S5T2!%@@]T7WI1V;-X!08P- -M<>&2PXUQ0]@:M\0-5%/<4K3('4!SW#JPSBS0K7(L739W=D/0)??)S="EW+$; -M%WURO]SGG$#W=W?9J%PFMW1KW7/WS8UA#KNO-M4-='>G/W?/3:H-W5>W)Z=W -M2]J(H.6M>)\ 7G;2[>H>WBV1TVW(Z'3YG-1M=>_<DG>G=G73W?P8XLUUL]Y> -M][KI:HH*\$*"-!:;<;'V.UUKX]Z5[CKMS^I1MUP95RJMM\ !2@##; $[E$0B -MJA0!/L!ULGQW5,EM\BU;:R?:@E[;49%F.]1KLGQ;WWV<D%9ZG &C1(,=IES= -M-*V:9R8$4BQ=E-9XR[_R 63C5UDWBNJD=%S+VAXQK6UKHW'A9<HV\&%1P?=K -M1GRK ,8$Z?":A9?@]S81'I!T.<GRW7QKWY#)=@)]5QP)> ->?4^G:6[V/7U' -M)M:WION7E=_CL7)0$J3?%#>S#85V4PF28N-T@;=R !RP!A0<[])MAK[(,!N5 -MR'% O$NMVC>[@7,,'NUI0!?D 5.W1ZQ0J QM0.Y4+S'1*+&')@: RI0!<8M% -MI0 !. QC.D3@U'<1D('#=P6X&$7NTB:]+BT%[WJ^Z0/HVP8LS8=9\ W^#7/J -M]VU:;F?<7K2P;04,;_R;1QS!H@8[%&9&]L"M3X#<*J'DN.#V"=>=3KB0G/'- -MY)[=V0:NR>W&I^%WOE3QT@M1CT@E*K3:\%T*OH(CIKXL$_V"1P8QN&Q6--#@ -MHC7YC8-O=B3"#MZ#!TP_^,H@A+M+K.YV5H7G2^5HZXL[S;4@<4-<R#;A3#2" -M"T"E *,/F$FH "G.'O+IAWA(,4;H(33OK"XZ9"+?[.Y>"D.F67A88%+QH7# -M!E8#&$[(B.$=%1E><I_A:'<:/D"OFV6;NCFD)>.B].?;C+?B;'(8?LJ<%F,X -MZ6;BNMDHMMOM4ZOA;+CJC8X7#@'3&[XQ3RF^R1P>MSH!=[C*W:G-4<W91K6$ -MP^)X.&UBPOD9^C@)1[SUX:1#K;Q]QP K " >@PCB!7DQ7O$>Y%0V%IV-4S*P -MV9EZCJN;;FY?P[D0!QO<B7 <<!;UC_8,PMVF?#@LO@4XY'<!1$Z(&^#;+L_< -M89(E(E78'333)OCS LWM/@X"&S\&A4<F_;,%76'[W'^92IX&= %3-ZRL-P/) -MA_2;J[$E!HTWK!W&_=\9@Z:+D^_8&<-M]C6$Q#I%_[S&<=F9KF+@5?^G&?.^ -M7#3T3FO45_[-WK=/^:Q+F\W?I=-Y:Q6<M^]O^XW9P@L=4/R]C^_8.GE0WI-3 -MPLMW4'Y$$^68FU&.E)_>7/-9WI3'MCDYJZM#<^5BU ^- H#CD'+'?)2[ &^W -MD2V4K]C:>&'NAV\!%O1/OIWHM8=Y5?V.B]+C!6']GU'FS_)E?BG'M@8N ZW; -MLN:1LFO^0J_2:WE;'I7/WU0Y!UQ5P^7J]NRKQA%,5GD"@#]GY?S85LY#JW)@ -MN6LFEA_1%[GA&BL#R7];"J"6J]PX-#=.F]<%/718()D33&CXQFUD$TS0.:G6 -MF5<<X'DUOG'S+F2YNEEI%];I^:4LF[MK\?EMOEC;MZ0M/_Z+F\0 .3FKFS?B -MJS-R[?O*Y2H 71Y9-]N.C5!S*=S>JID*SH)'XB[X9T")OT_G+0U^WF;B-[A( -MS(FG!\?$U(U,^P! ^"A..I3B1C@2[HO[XW4!\12,\](+.3%>B!_@XO8Q[NIJ -MX<HX_.2-"S ]4NA4XCC#10H%XV;XV8XYG9V9^9 M5NN>KOA:08<3H]#,F_K -M/9Z/6]T#>4HK=-^F*CE+7@:XY(CX6G27 *S>LB/^H"N_$3H,3J&_%!;Z2X&A -M8V[E]XC H?/@M^F''J+K3D0XFP:+WV:R^!)>B^\=8P N_J(7LKQX$HZBRP$J -MNA\NC._I-)M$'J/39LCX%FZC=^'->$C-HSL1/GKG-HT+Z>&YVKV&&^E4=SR> -MI,_C<GB37H?CXX6)?HV39P[[N57 A/OA\&T>3I"CY%3Z9VZEN^0=%Z&DH!,U -MWP\ANH(5BMZR<8Z5V[1;N4YM<W=N_3-"EY3'S.<M6BY)?7(@M9G^YN;GI/J? -M;JKWY^G:<1<P:1>R AK@H*, K#2;&ZN/W6,)IYAJ/T%)35F1;!+)I,2FB3&H -MG*\V<![[UM_ ]Z0;H-LJC[GXO7\#W^-X&8<H;;0,5+R4X()*X$85<CR8#NXR -MH"R3(^AM$5Z>%JFF]C:^K4X(!^^!&#%]^$I$P,J08[0:* *E2C 0'@[1GM$> -M8(N<;CN<J-?H7\"-_H4WQ(\Z.?ZC"V^8.C5.I%_J)BZ2GA?'X?6XIVZ'A^HJ -M=Y2^K$-F;?>0OHYCP4:4X5=RN^Q*NARNV2A)Q:[> -_:[/CYY59QJ #!]]$- -M<P=8(0!KT-FHR<$WCS[MWJ9 .Z=>CPL!L0W#20YUIT@[9#9T;^,DA"'C!\#) -MK\DN%"[L#5F $S $G.QE.'&:M</LD S73@3\*.+0T9X^Z.'X.3D(B>IG&F-( -MLQO(-/MG0#$C.#+?C"SZ=/1O?.AJ:B6C 2)WMM&.[]+D<IR\-1?+:+L>@RS' -M;NZRITO2.;A,A,IM22^[F'NY/"=/:QASI->O \IT.NA>0(CN'#1M5MU6T9KZ -MR[ZDDSW?R5WT.A6Q6>J'P47(:N;U8%.VA>VT&9PKE$R<J E:P(@C2@G[D["P -MNP?N![7ZL.N>$CL00;''$D#%OJW,T!8:NW# L3/ODO#'WHTSZC@ZR?Z,U^OE -M.,JN9(.S,L=(?*@3W92Z>FZI3^Z5-S?N$8OLDWG[;KZ; -"XI(Z-\V\J^SI^ -MC9_CW[(\3K?;XY_ZDWZ0(^W$&^7-OJ_BAOC-5K9E;!KY]S:ZC]9].VV6LU?J -M@LD3W+-?[7)[[1ZTU^-#NW&DR!CM8/O>OJJ+[95:E T21^93&M->KSOM@3?4 -M+K4WRU7[^1ZO@?"DVMQ^N]OM7KO>WJXMZTK[J_O"YTOVG&UFMJ/M8(USQ[:[ -M[7#[SR[":^UU>VR#MQM^*?P0G\&W\!7'$<_>_N]4=^=\F]WI-P7LFS;?W2_T -M"O!/B^&1-"+]O.I18W, 15.[!J_S'3V5S/%H_ #5=[NZ 93@'4:/T>8YADD' -ME- 8IAE-JHW0=, @_U6+T2IW^4Q>)O*F@QA>QY]N0FYEOC&#SP,VZ>3D1O)H -M>(ZKG\?/H_5_7K:Y++I:X)X\_"[H@P!C7QSN@$SB+D L[HR[21Z6/>Z1>PQ" -MOQ_.$@G:GKKC\I=SG*RYI^ZJNW'@N3>X^WH*$+I;\+$[U5VZQ\FG^Z($S ?L -M=4%*\+D7\\<\\7;!)P"S._'FPW?J>X-F\[8C3.AH[PXV_.[\* G2N&_/JGI* -M.\%G\%8L\X<#$+YWB0W@?4KE^+?O/>BZTP/Z55*@OQ2J,O]=K_O?^WKQG9#' -MQ@OY0?O&X30O>K'=_))).(7DZX34Y9_":=*G\ X$;IU#ST.ZQ/7][5S$Y?J\ -M@3ZOJW']][WT?\/BG!(!GM#[<=DO0[\&./1,A6:<*4X]M@>9C'B.OV$1=P8G -M&-Q:20&.IAX5*$H^*C#(Y;I<"S%KM$R^TA$ :80T[Y*3VA>W21YO#3&8?>B[ -M%\E@#<.^P5/DBX>8ZN\"(>.$Y&CT-J?[\N#;'(MG,HQR<K4"%0.^M\->.B0. -MI@.U$OH<4(F7?C2X";#5Z["&>A$^*?7I)[JE%*B3#D]XEB*!2^'!\KTDOM_O -MY/O('H[K\)!Z^AZW:_#Q^\I^RT_Q![S,#JJ7RC6["B^E%^_P794^< ;B,3D5 -M_J)W]GL*#" FTSCC.J)4TU,E.'W($EDV,SU]XO[37R5!O>HPU#LA1?U1#SDD -M]1V[,\U49'4%T_-!$@?GG.])[,:9<7.N)Z(\/?4O13)M3DGU*%KI9-6C",13 -M5B_7,Q5<O6E?;\,)]_:3$-9/'_$84$'6BVRY_;KFH*OU$8@DWM:_]:Y?7#_7 -MNW&&.D'_U^NU*X JKE-L5+L]D.U0--5S^C0_BY/QM_@P[L;A]?OY7N^$+RV$ -M>KI4USMTNQR-/KXSXS@Z=FT-\^_H>Q2?LC?V GR1GD"CT9B;@D_8,_A?.&UO -MW^<,)7ND+HV#\7;VFZVS1]SL.(E?XHO2!OSM+MDK\/R;<=ZLZ_6G.ND0D//C -M=53.0-^721_^:Q"0,_#\FP.ODKOW43A\_ZIW]L2;H3Z(:_/:2*]AD4_>HGP@ -M3\ETY+[11SZNX:/&P2]'_PCODS<[CY ?WT=^Q0N9*?D#^PB>%-0$(-4%-N/< -M'J_F#EG%-N:/+4_. _CD?GT4+I@/Y:1:4?Z9'^7#>JSLA(!HAYD38CH$]JLM -MG!^6UU8>?F_/[E[FCOV=OV+K^0EY:%[G8^"K$F=N;K[G_UFB_QB#YB S;'[B -M9O*:OJUKFS/5N+E_7L&K9N\Z53X&/+?J>O#$K@_GN_>^J:N'!QM5<2MB?&R> -M2(.MRAT$9'BP/@8,YCV\G\]4&.O6>0P1Z#,5I7Y^OF,33#TVCZ_H'TPG@W=N -MR #1)W[:S8YWYT,U(WUUI^=O-WL>V[KGL;)JGC_G\6/S/UV?D_KW>:@M3^OG -M?[J +U-/2CA^TN!0[/A=4H]/8_=E'C&U_EA<Z]EZ!.25+7%K ;<#L0C%\K,D -M?'5'L.BVCR*;T$6741& E( +%+>ZZ=RK]"S]N*&/,_7'O0D U2_W@092K'JG -MVRE]<=_07_71O<>OJTWWXP9\&S./!G@ "A 04_R1>'[F<XNW[++._#[!]9'X -M8+;>WZ:&_DZ>ELWYQ7%@_C@ ^[&YY5*6TP%_OMJFU2/[Z3YFG_FD*O6B)$S! -M!ZM;<D1_>KV:,(&@6_"WPP=_FI'P6P$+OS'H\.LFY!"F+O$O]"+_2G_5/_2Q -M6W*]>]O0 &I]_^S/\53]O_3J8_63?*>&\>.\R#U(H=Q/$!W_Z0WR5_4P/W1_ -M$IO\_1O*CU.H_+$RR^_R/_?EO<S/O]'\.7,E>/.G]SF_XK\&D%(\/U\>D\OY -M=/X%OITX^K>INGGT)_W'_KB1[%?5V7FS7^_/_=WYD,WM5_AK.+:/9$OY'O2X -MS\%[^U6UN@GNZ\WB_KE?[F?RPO_6QFDOUZ,Z'27OZ_BA?LZPEE-'4#]66/U) -M_?\YP%\0\<@T[Y[RCM0XNP/Q:IX;_%W_ <Z/*?SMC6;#DSB/4?G9'_+/DFM_ -M2P^;N_T(=ALN]S_&=/H[+=S#YIJ)ZKWWG[U]OS;L T3U@3^?6_^F[E>N2_M) -MODI^IS?NC.;/KV5U6_G%'!Y_A;_('^)O>8,"J/E9_D0..#_EE\Z/NL< ]+GU -M_/QR0#\B'U!NZ(?GP_T9_6)FJ+^EG^KO/F>::_TMV)Q]0;9HG^ROVF>-F[!% -M^[)]'S]STU]F]H?BX_W%^'Y_H[3@'[DOR:7[&[FA^XY_L+EX7UU@WM?\\_'M -MX:!_48FH7SOLWV<=\WCT*3P>,[WX!+2-/57;@/0 X=XG(PS=@$T+):;J6AG, -MO9(*F &-&[FKT,9@*J,X4LXHZ(]@@7QOKK7YZV0DU_PGK+5V&AK'#?@0F:BM -M^L9MA8-2W//D=+#+\:%-^_)GLAP.WL2MDU$XV&[A4-YM)QS% %EW 9 B1IL -M4>B :)H> ZC,=/ U0**HU8![B!1XVNYM$#B5X .&4B@&FD#@&AJM]/ UP -V -M,GASC90^(/I#$O@*?-?= 0&!B@%XEW# ]377$@4R >!.311H/^$/,'LJ_^! -M FE?_+T\W4:EC4=AVJ>9S%Q]ZS92RINM#D@*O+!-^18#_R9G'?%D#8"BF<6) -M MD7SD "X*RMO+7&\6M1,MA]L[C-WS"PD88+].003%( 6X Q@)VLZ@#O6@>Z -M ^T \$!YH-@L*T#2V>]U#O!TI).%F3EP:?<.C ?:R380R3EI@CW0%Q@/),VI -M4L)0@D#Q%D/PU[<JV0?2Z69Q*+%!X#TP'^@01 BJX=:!43J"(#[0("@VFP3B -M4"XI&[&V#":0$UA* P=N D4,GL"Q&C10.,<I(,XQ AMG*@#5W#JP%!@+/ 7F -MSG:"4316H$(P6) '#*>A<6Z!@\#YVVXMW_0(S*I9W%1S:1<MET#P)HBT:PH. -M:8*![\"8X(^K&I@5<+@%T1Q[7#4E&_LL.5=*<^/,S_@Q3C9WFU/0R\55LUR( -M!<D8?K<_GD"GS-;' \&1MM9W?1A'("--D<=84PM"V99VL3.<&T7'\G9T\[)% -M!0,HQI75%EZ0DM6<Z; 5V#IL%T$[W3^PC)<*++") ;"!,"?57)[-"%CN$PBF -MU;Z"0[2$X%[&GE85Q.PAM=B!I\&,TVEP*[AR(F- !ON!DD%;7)ZN,F@6)&-< -M!G4MMI66H)D-5T8;] M.)4"#$3;18&W0<E$:_.AXVL(L>D$23C6PL786U**0 -M >9[!!.78/VF$[@.O W^FS2#H0'IH%^+#8@2;)]4\N9[V,%4("=0FJ 5Q GJ -M!&^"J:\WX.H+%;@P PK"ZUJ!1$$[H$JPMA5OT]\=]L*#"[/QH!E@.SANZPXR -M!G-\KX%Q7WF0_K9N&YB, JV!!$*:(#QM';@#Q ?>!(N"<I1EWVV&..<_ PY: -M^\9S.$#]G&/0/<@8+-5M _&!0,'&FE=&S=+Q0FG9A*H")4*9A:@A<51/D1VD -M" ,6[0J/DLFK0[0NXJ=@CE9>%R^ !;(B1HB4L1&&I$H3CY8L8 :JZ!6S@!&N -M"!M%906(D0S@+" 1*! <"'1 39/)0!T 8' *\B2YI008I+@[%M/"KU"RL ?! -M>CP6GB2KU<9 ZM5SV5F!+%)@OZ#2TU6*2'B/,!&&DF)/,8&[D/J(=G0E--1H -M#"@$6T*G19A((L*Q !/2CL2$\ 0B1IG0XW0FM'CM3/0DE:QGS[=*(M#QRK89 -MI@H.+,).A8LP1XB-<!0J"C=>NY@L$\I+#_0&:A0F"E\#QA\:X::PBY2O,O/1 -M.&H<;+XHSNT!5=@/RM5EV_H?. 72"<?/&N8]H162<59PI@,]AA'@"3"T:>+1 -MUH( 0CR^'0L/KM8$I/O9_S*"?9DK3MJOJ<<&&,P(#:9Z$S\#(,GO\*<"7/Q9 -MY3 &FSVF@E3O-O,L1$Q!!OH?)0,Y &(*7!AH*/-QGRH>R+:/2RT-<D*?0!7. -MS;QEV$*"4X?A4<(&(!.P]38)]#XWR6J,7AC8P]F- 0!H\\)S29B.T9 OQ,P% -M#"$E7+U"7^8 0$A>*A9V #5XMCYQ8$>K#4$\V=;L"#X1*[CF5:@-4:+O0P-@ -M#,E+?!02X<6+J><X2D=L"KA5)$/N$;5",C(I/!2F#%4\'B6YQ<FK88%Y.@KA -M"%V&*KU/!/>H1\@F. H-DEQ:VY#HCRX)^X,O$AU]@'Y)U:,AH4G*T822NJJ@ -M#'.&Y"."A3YK%!03 ##T#-=/J:"7H0*)GC(UI"E5#:TFO*,YX<N":9%<42HE -MEI0/+Y.4@S=)AD M01XU?TA&0D/I7YKH>>1+BAZ!D!9)U".##ID)>R1^VA,] -M#9>%4<.Q LJ.%2!J1KBF792&ABJA-9PA20U'!Q^C^("AD.L(9F";'@0,!L: -MCV($LH@"Q-JP# 0S>4*="[LI-(K#A9!PVY3V42%=D#Y6SH$00#<D+D*J,%T$ -MB;)<29C<R@\M#Y-S*:ZXE@B%MB8LS,L/<,@]XAK"GV!'7\.K(00)LH7I4 $L -M:XZ'R,/DH?)P><@\;!XZ#Y^'SD,LAE^E:1(,$K%05[P\8Q#ZQ^J05\@MB$C4 -MB6"'_2.:R^S0[")"LAT:ER1D2:784M%E<6B3NAC!"0,2A\-3BW1)VQ25,!Y" -M#^^'^,/\H?X0>0A:@5CT*1AN,PY]EIRCHK>' A/1&=H."Y9QE38)94+&L']D -M!:!D'P/?WY0OHJ'+R@/TS\Q-OI$VA/HA0W B>"!,9YHG#\2:E@21DA&)^&-= -M$#&(>B$3Q08Q$L%!-&U]$.E1$Y &(I@(#\'$X!\(&UX MA.4A>QAB5.P\WAX -MQC8>IA"Q6, **,(KC$V4)+9:)0%/3@J@!C>DH(+P"G^%M E3%E9/%\(KW!4J -M2> &%['/1U!$K^#D*(V0,1830 [SCVODB"@",/\,PWPCE,.?E.)$^B%&M)R1 -M)&IAYI\PP!D13F CB29PDRP,]*S:"^W@LB5$U(G8!*@"X:[R!R %DZ+*@9_H -M!(M8&T2HX'5 W_8PF*Y,$;93W@0!43A!<9(5 (E$R<11\!/*P"C!A%C$TB0R -MLBJ(E$360^6O< _&6&\*2J(X+P,8KND]#"=^128 L\H(D3, <E!;\3& "&* -M$O%U2X5/A"B$DXB.PI2\(3P+K<3T8!\PEAAV.$34$K,:C3/RA$W!+7,D*V*1 -M)*0#S(3QU@H!5U%&9 *A9D*)IQ)EHB&18\"8ZF,A3'PCOS&,0;=!O>9 O.-H -M$]<5!(=4(IS /\1I $0,-J!#>:N@!F5+=X#F"VJH"2T709%?(=K*<F'^@0)H -M 8P OH,: $OB":"ZZ2)F ?:)4XE^XC\QH$C50$[H/$8DI1'M3#5PBQAE,"@B -M%'5/3*#1Q1CQHOB3\B<"%*<3D0IN@;<@;X 5HV0$1:R(1HFF&'0(-.8[4)!4 -MMK RK@[O'S[QB5@YXR@J%#^*-0#P"!: 5_B;*"A"% ^*SJN;8D!1I\@KY-IY -MEWZ*$D4R!D71JH%4#"IF%%\3ES"GHA' HSA4' +L%$.*W8)O 1^#HWA2!$ZD -M%+4ST*&@AN3$&5/9(FI0!0X2&J2I1#ZQIBA5K ($ :X> T6?XG$"J$C),/^X -M%>&*1L6'XEPQJ3A3+%@Q%?>*4D78QD:QK?A6C %@%4>*6T7G55?QBJA2K+T0 -M-=X%1(TL8&7K!F O>.*4]I2*-$5NFDU1,=2SB2MV09J*=47.8F"CH7A4!"Q. -M%'F%7$30(AFCC3A8#"TV@4:+V@*1HE91;\!5K")Z%>$&8$7'(G:#*E!6^'X@ -M<50=@(V*$QGC"F#5R"CJ$YU7Q$4Q8D_QLPA8I&0D%S.*>46+XDUPJ2A=="T* -M%J.*SL7B(LHEMIA5)"DZ 3B*ST64"TH1MPA: 6S8"P!?\\1/ > +4P#K$(=A -M%K=I00".8FDHH[A<K"Z2,4PN;X/)172QJ7A:]"O:%_F)&44W(A& HXA?C&T< -M%F>+)44RQGQ1O'A;;"S6C]8Y(2H:Q??C(&%6.$@0$$V*F<7XHO-JP>A9_"]. -M)0H_0@!O08]HOVA:?"^F%IN+J\4 8VN1C %B%#&6?[8%W<7$(B6#PSA>=##J -MJ\(?,HKP!UEQ)Y!BR3$^<=**68$C0)0A+&$#@"]R%(6,4P B8X=1M6BY0#(J -M&4F,$<7I(FJQHLADG$HX&1,;*\8FXY 1R\A=1"S2%IU75\8B8XTQM_A@1%0E -M-B2+/$:R1.'+*F6YB!D) >H&'B,CH_/*S0AG'!@M&5&,;49O01/@S;@ML#-" -M&8&*_<438Y21DD%G[#,6&;&++$8](Y\QSMAE1#!^%^>,BL8ZHYBQP4AFU%?9 -M.& <,8XH#E'@7: CT_IE!9 I R=3(DF@@CBR0<NPNM!17*B@@(L,.6 04""& -M$OY8,X@90CPA)4 F.#@\#\J)H$8?@*CQCU5JA-GD&MDLA9-LX1=@UXA*O%!, -M)7Z-NT12XUDF+7-J](VD&E,"JT9L6#;IU5A!C#6"T58#M,9' ]Z(?7)L++0, -MG$J(RL:7#3\0'?-M]+0$&WT RT1PHYC!IF:Y^-!Y$O]8YB9^S*_1W%C-$#:^ -M&XN-[<;DWO_O-5#Z*9Q0,N2-WD8? +"QWHANA)\43@I7'SKD@'( R_)OG"-P -MR'@$3K+^(8( -8$@<"F".S!;IR5""9!Q*J&."362#/ .EHNUC&G XU@R**6% -M' ]UE(R.HQ/MP*#.:@V<',F YB:5HR^1= "A$SG2 09.])(WA$^._-?$,XX< -MMCB$*D=[7[QQ\&?W*Q!&]PI7;"[]TEJP#-4:F*-E)\(8E8U6DW6,J'%:HF*M -M)IQ7;S;(P,")%/5V2XI@1K@:A9\?%M6*W=37\%]TEQ8A4C_%1>Y/Z^@#X#KN -M[)@ 7T?[QH]B.J4%+-BM!,9-7(SS7(IFZ_C-Z#K"'2D7]HVPXVN*XT1N%#@F -M&\4,MQFVX[YPL( NV1A*0#!\,!J^8^7 [QAWW$G,':6.]:.5 )HOZ.1]>K.I -M8RI0"#2LHU'0N?!*?'F,2YX61P,Z3H*%./BN Z"HG"@9K;Y_B2@&P]0&0#I. -M)>!R^Q/3P&)@(&![U /JUM8E#I'>X^AQN'9C4S<-%LP/2X)7R>J1XSAR;#OV -M'4.#@HF_(]CQN1,#>*)('^6.I(WJH]<1\+B3.%(< ;2/U\?N(Z-"!F!]K#RZ -M)!@5,P#AH\R1J0!:L_7-&_4NY\9E8OM1,)5"&%VE')N/B\<#@[VP\$AL7#=: -M*<Q-IHVDB!3 3(-_G!<R'JM[,<<"I+FD@+!_+,[HS'Z-^L8-@LZA]OB54>=, -M)]A3^ )!XE_F\^B\HG;!'E-]/<&2 +YNA9!Z%+<M'WV/[P778\KI]4C&B#W& -M$HX& 10*I+H)]Y@!TSW"'X2/2D'@HW0!!_FNR[\)'X^/7R@9I ^(C*&.>9=L -M 6 N*9/VB3O_GAS=#Y.'J&/V\?IX^4#_&A^##N6'[F/IC$F !42"^E]W$)R -M-;R/Y,<HI'W#^YA^%#VN'\<-[<><6L!QX-@O$#;.'QM3(@3[(Q%2 ?GYV@[L -M'W.-_<=C@O(Q =F$S#]N!W(/ ,=JRK?Q\*B'5#M:+E2.^T(F0@-R3P:!]/O] -M_^P4$0@A9/\PQ<+MJ+:-J"1A,<<J02 2??! L\FP67@RF#E[76N0C&':F )4 -M 80 9IJ!P&$FUPCX8;,0'=H*=J[^F6\$>.)P2"XT[OB0 $-'">/Q-G.#)#O. -M(9N0;L<(&Q_ )Q=^O'4\=QJ/H\BDX\HI7R-Z](Y1,A0F+05B%<<B--,X@&Y4 -M'M0Q0H050 L #\"-%#BP,;Q<K+TB03'AF'"-DB'.!B(+Z 8!$1BG\J!PB"AT -M]T +_ .@!6$ !T ]RS_L*>1YHI4$B7"1-H&)3#EJ(@N/K4A/"RCR.\,I 4!. -M)$Z1J4C%FL8OX!B0U+N\(GD#L<B^!BUR:0-IN$52,A)YW,)+('TPZ#CW,QVX -M"X!;?2V8#B6#7^#5\G*-S7:'=@A0A(FA!_"<L= DS< SF(&$I.F 8*3#(F., -M<-I?@37((PJ@$N-7!*@Q)#V1 DD:8F(P;:46Q$CR8X0&\SW$3//1WF<Z$)/Q -MM?@ [+G:($DRE07).QN0#$4A@X7T65K+0H,<2.3E 0AK_1I6)%#2(0GXL7,U -MU7)LZB9GI SQHB"-?!A0(^U@?0=L9 ]!&]F-]$:^L\"1/#UQ)!O F% T$#W^ -M*S)+7@;V6-^A'8E2>$=6#-H?=H%Y9#VR-Z#(>>=E9?J(CQR%&?>NG+,"X*0Y -M'H\KNYKQ@!I2$+ER;"L &VTRWYE28UKF4Z $8*+4! XB_)*1I KMWU2$C,0I -M4@8+@QFVPH'&W#3'VR"84]@# )I]F6NRJ*.H>=OH)$, (K2C%=EQCM>:!-.U -M3S)YQ<GRGF]R*F'%PCCUN(23I9(^S#),A'62+,V, 4H 8C$R '92!J"B @?2 -M%L@H2#_X@Y@"!("H8C*$)ZL$)0#R)"LM.FE@$[!MV)1<0"Q#9#HN!,"31&T4 -M?B(3/LEJRF&F%?,^,:[L*6AR61D)8[A$,BG-$QQ4)MUF4B(RAE'2.9B4Y$@^ -MQ@9]]JRG9%02,YE)F4Z:)#4S3+VLY%F+E$6;; VX)]-FB3R$UPER+2B6]$R: -M&T&3!H5E([JMW0:=; UZU"Z49P,> .0B$:+S\ %L*#\X%R<R1L:I1;E?DZ_! -M*+N2$ :PY%/O)VFBA#^B*&>3I9HY'D;R./F>-$E^</QVTLF29'72.7.=S$YN -M)P$)&TKOI!L /+E[) B\ -237$KQ9'H2L!&?5#K^!5]=]<E;QWUR.Y&?K)$1 -M,OB3(@?CRA+G("):<6P$S7*4EHL=)5&2>1=#'$4FA'0M58DH@P9,XX8YT [< -M##88_"@7P=(AH)!G8!RD:"X.%HC@PFM*9,2GA%/:%I IIZLQ@ O@$TE#U*UL -M(LL G<@B9=T' I$8, $(_@Y<E1@A@%^1#Y"JG$CX%;EZ[,F_S!XM&4EX!$7- -M\5 YH+1DY('+@U5\80YXN40+[Y--9:$E4RFLU+N0*DT'@[S 'GN2S<6>S#@M -M*\%XJLGE'GDI.2DKT,R<#9Z49(S\5J_21_"KA ,$*S&5["M-):>2.3"@T4T: -M)^=SN4E9F?(+26FYV'&UG"8(TTIS97F/!;"=X@%0;%J#LDI@I<BA6(D^(%;F -M6=03L\KX#ET@0I0&2 .D*]\E:CSDI+Q25K"U207VRJB5T!E_FL)27:F<O%Q, -M!40^=SQ]Y:5R6!FNY%<:6E(GE 5DI<;28^FOE+< +"V6V$I'WL'2-2D"\ '< -M*TLU>,B/8Q&B'&6I)%EV+-DL8<"+ X+RBO6?W&>Q.3*05AP\Y51"3TG^*DK. -M\9"2<RVE9!.2*4D3B%#^)J"2+HFF6I22*GF29.J]2_YKM<$EI?LLDQ>B9#>V -M!D][ "! I6=A U&H/!I,(1*5=:_(P"PQ)?"H5#SHC225^B9L5-RR9@FN3.2) -M*X.2S %/)4!R+#FJ[%2:*@6 XJU6I5Z!5=ER454:RA9!>\A2C;:R]>*KI%MR -M+.V6'LODEX\ 6>EALY^]*\UG54D1P(WR=<:GS%=Z*_>5=4ND7^12%<>IZ<X, -M+)4#!DN(9<*R20FQ;%B& UN7#K")Y;L$6.;QV]6,+$.7=TN]"\@2)R8E^UQN -M+*LI)4M*TLGRJ('PXE/&+,D > >:Y>WR<2FZQ%G*+ $1.\L$0/_0L<'MD-61 -MFX26YZ;G)%&2/:FRA%C2*RL.',H>95+!?.:][%U^*PLM4 B<9? K9&F^!%VB -M+PD.H\M=8.721<E?6UDJO^B5*8"7)3,R+3FB>$8N+5@#K@0X!')E9U6.!$4% -M:6B3O,B%Y4L-7=FZE$-&"&E]"S3GW,]OYPCV:V]D)TA_PLG_).%KW.%>;$[J -M*+6714OVY((2:;F17$IV)$,&6;VGY822>VFAS%PR]2X.6,LL&OW2Y82Y')LY -M+JLIZ4M/R^[2&G;#1!_D,(67:Q21I,H2DJ>Y5)_M+)N1_4L9XAD @,DZZU3J -MK#Q.!4Q*Y1!R5W.TU$ANS)26 R>F90T*) FU- (L)\=J*S079LZ05#F?VEQ2 -M*-<*'LJM99.R:RF?S H8^B28?[DI105S^H;!)$K.*1,D69D2T]6Q<SE!&RQ, -M*D./S\JI93+K).FT><Z\L9PS7H(K90F@!)"_')GU858&K8NS0?]L.T6:V4YM -M 21_(\018IL25/F(7.NQU1YPUQI*YME \F=G8_]I ]IM4LR!ORD#;""$\SP -M9-PS&,M\HSGE#?&E=$0EZV:9I8?TI".J)JE6@V0*V X,(LE=S53B0ZG;\K#Q -M*961[;P1Y51RD*F9Z9]](6P8!X855A? )3D':F6R:DB0E2\S9//QKD4/)&.H -M,=-F#4QM9A-R"M'-G$K8'-\EZL?FXV"AY>C-W%L*%998)(%N%YOCVP5@@%C$ -M6.*6QC,_9MPRB::K[&I1+1TT<P"GS2'S0>,"4&0R,O<W=C829"13O'(V2'.I -MM?R2F4SQ5JZQ!<?2.:0M-%4 HLR')F3&<,54ROFA,F.94XE5IC6S.?/*3&7* -M,F4(I8=:9F#CEHG2; WH,@M1!<E>YM'@E[D="&;>\5R.Q$PEES$S&6F\FV)6 -M**64)TEGIGH"#/%96&%E*6\&U4S8)#931-FAS$@^!Y.6#DJ'@NE@G\77^F+^ -M-/^95LF<X3)!*WFK46L5'MF0G,QE(AG+>-+4/$I:,0F02\L3IE/R-S$0%*2T -M,*N66DWM0 R"JWG4Q$,FKR8&H<;GX!NRC_4++&LR**&:)LP'9=,RP%#5Y! N -M,Q59,$J4I ,B;1A2N&JES]B'H2#W(5I*+@ _-!29,6$9ZB:5(S<3(MC._*>% -M,S.;V\P-1CESW BQ3&<V(=>9A 27HSG3G?GL:2/$,T$K'@_'I,>#3,9B^2]$ -M0SH5[D5S4SGQ$-FRV4QJ$PX,Y4:R)(J2K$G),&W,;A S+9M5Y!J2$,F#\UKJ -M)'F2:TIMP29SL!#<[%LR!WXZK[8W6Q/ -3(%Z%%$ 0 T X&1C=(/_C"R4:R= -M9U9I> ;2L\F!22E@6W./K(>=1 6BX.$\>$N6-[)6-I)5B/(9HM)BZ1U$AS& -MF"PL8)7(88V)*E%%*B/EF%066Z/^YD>)+( ><@O8)O8I0B8EBS9A_Z7'JIQP -M)4H",87XD*Y(P3DU-"@%#V=/":7L4'3$2(+<0*5H2V0([0EED8&H(" '2$<@ -M!70R0+C/ (D 5.B/J13 .%<&,D[JA4TH3C*!&0I,9?X+;:#^PHVS#9#CI''. -M))8NXPI]2@9ED&19NT#]EZ '.,XWP(P34JCS&IOPO! ?:!/1WDM R2#T<IN< -M@J"<1$XI)_7B<M&% BFT!DQ48 3U !"N99"K&'/JP;)>4@X1"XFEV)1#HB%Q -8FY81&X3S0IV3=,A,,"*D#\@ 8@"PUU," - -end - --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.10 b/usr.sbin/xntpd/patches/patch.10 deleted file mode 100644 index 1771b5f..0000000 --- a/usr.sbin/xntpd/patches/patch.10 +++ /dev/null @@ -1,1925 +0,0 @@ -diff -c COPYRIGHT:1.1.1.16 COPYRIGHT:1.21 -*** COPYRIGHT:1.1.1.16 Wed Feb 2 18:09:17 1994 ---- COPYRIGHT Wed Feb 2 18:09:18 1994 -*************** -*** 1,6 **** - /****************************************************************************** - * * -! * Copyright (c) David L. Mills 1992, 1993, 1994 * - * * - * Permission to use, copy, modify, and distribute this software and its * - * documentation for any purpose and without fee is hereby granted, provided * ---- 1,6 ---- - /****************************************************************************** - * * -! * Copyright (c) David L. Mills 1992, 1993, 1994 * - * * - * Permission to use, copy, modify, and distribute this software and its * - * documentation for any purpose and without fee is hereby granted, provided * -*************** -*** 55,58 **** - * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port) - * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver) - * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port) -! */ ---- 55,58 ---- - * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port) - * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver) - * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port) -! */ -diff -c doc/xntpd.8:1.1.1.12 doc/xntpd.8:3.24 -*** doc/xntpd.8:1.1.1.12 Wed Feb 2 18:10:44 1994 ---- doc/xntpd.8 Wed Feb 2 18:10:45 1994 -*************** -*** 446,451 **** ---- 446,467 ---- - .Ip notrust 10 - Treat these hosts normally in other respects, but never use them as - synchronization sources. -+ .Ip limited 10 -+ These hosts are subject to limitation of number of clients from the -+ same net. Net in this context refers to the IP notion of net (class A, -+ class B, class C, etc.). Only the first \*(L"client_limit\*(R" hosts -+ that have shown up at the server and that have been active during the -+ last \*(L"client_limit_period\*(R" seconds are accepted. Requests from -+ other clients from the same net are rejected. Only time request -+ packets are taken into account. \*(L"Private\*(R", \*(L"control\*(R", -+ and \*(L"broadcast\*(R" packets are not subject to client limitation -+ and therefore are not contributing to client count. History of clients -+ is kept using the monitoring capability of -+ .IR xntpd . -+ Thus, monitoring is active as long as there is a restriction entry -+ with the \*(L"limited\*(R" flag. The default value for -+ \*(L"client_limit\*(R" is 3. The default value for -+ \*(L"client_limit_period\*(R" is 3600 seconds. - .Ip ntpport 10 - This is actually a match algorithm modifier, rather than a restriction - flag. Its presence causes the restriction entry to be matched only if -*************** -*** 469,474 **** ---- 485,505 ---- - considered an alternative to the standard NTP authentication facility. Source - address based restrictions are easily circumvented by a determined cracker. - .PP -+ .B clientlimit -+ .I limit -+ .PP -+ Sets \*(L"client_limit\*(R" to \*(L"limit\*(R", allows configuration -+ of client limitation policy. This variable defines the number of -+ clients from the same network that are allowed to use the server. -+ .PP -+ .B clientperiod -+ .I period -+ .PP -+ Sets \*(L"client_limit_period\*(R", allows configuration of client -+ limitation policy. This variable specifies the number -+ of seconds after which a client is considered inactive and thus no -+ longer is counted for client limit restriction. -+ .PP - .B trap - .I host_address - [ -diff -c doc/xntpdc.8:1.1.1.2 doc/xntpdc.8:3.4 -*** doc/xntpdc.8:1.1.1.2 Wed Feb 2 18:10:46 1994 ---- doc/xntpdc.8 Wed Feb 2 18:10:47 1994 -*************** -*** 539,544 **** ---- 539,555 ---- - Ignore all NTP mode 7 packets which attempt to modify the state of the - server (i.e. run time reconfiguration). Queries which return information - are permitted. -+ .Ip notrap 10 -+ Decline to provide mode 6 control message trap service to matching -+ hosts. The trap service is a subsystem of the mode 6 control message -+ protocol which is intended for use by remote event logging programs. -+ .Ip lowpriotrap 10 -+ Declare traps set by matching hosts to be low priority. The number -+ of traps a server can maintain is limited (the current limit is 3). -+ Traps are usually assigned on a first come, first served basis, with -+ later trap requestors being denied service. This flag modifies the -+ assignment algorithm by allowing low priority traps to be overridden -+ by later requests for normal priority traps. - .Ip noserve 10 - Ignore NTP packets whose mode is other than 7. In effect, time service is - denied, though queries may still be permitted. -*************** -*** 549,554 **** ---- 560,582 ---- - .Ip notrust 10 - Treat these hosts normally in other respects, but never use them as - synchronization sources. -+ .Ip limited 10 -+ These hosts are subject to limitation of number of clients from the -+ same net. Net in this context refers to the IP notion of net (class A, -+ class B, class C, etc.). Only the first \*(L"client_limit\*(R" hosts -+ that have shown up at the server and that have been active during the -+ last \*(L"client_limit_period\*(R" seconds are accepted. Requests from -+ other clients from the same net are rejected. Only time request -+ packets are taken into account. \*(L"Private\*(R", \*(L"control\*(R", -+ and \*(L"broadcast\*(R" packets are not subject to client limitation -+ and therefore are not contributing to client count. History of clients -+ is kept using the monitoring capability of -+ .IR xntpd. -+ Thus, monitoring is active as long as there is a restriction entry -+ with the \*(L"limited\*(R" flag. The default value for -+ \*(L"client_limit\*(R" is 3. The default value for -+ \*(L"client_limit_period\*(R" is 3600 seconds. Currently both -+ variables are not runtime configurable. - .Ip ntpport 10 - This is actually a match algorithm modifier, rather than a restriction - flag. Its presence causes the restriction entry to be matched only if -diff -c hints/linux:1.1.1.1 hints/linux:1.2 -*** hints/linux:1.1.1.1 Wed Feb 2 18:10:58 1994 ---- hints/linux Wed Feb 2 18:10:59 1994 -*************** -*** 1,29 **** - -! Requirements: kernel 0.99.14 or newer, libc 4.5 or newer - ------------ - -! With this configuration, xntp should build an run right out of the -! box (see generic hints for how-to), with one big limitation: tickadj doesn't -! work yet. This is especially painful since PCs are usually equipped with -! untuned, badly-drifting quartzes, values up to 200 ppm being no exception. -! Because the loop filter algorithms are limited to compensating no more than -! 100 ppm, currently only one workaround is possible: -! Compile your own kernel and adjust linux/include/linux/timex.h, -! line 67 (in pl14): -! -! #define CLOCK_TICK_RATE 1193180 /* Underlying HZ */ -! -! Since this is surely not true for your hardware, adjust the hundreds -! to match your quartz. Adding 100 compensates for a drift of -83.8 ppm -! (1/CLOCK_TICK_RATE). The number gets rounded to the nearest 100 so don't -! bother to tune any finer. -! -! Fixing tickadj is already in my work queue, so the previous comment should be -! obsolete RSN. If you really need to run xntp on any earlier versions of the -! kernel or libc, or have any other question not covered in the READMEs / hint -! files (sorry, necessary comment in the Linux community ;-) feel free to ask -! me (duwe@informatik.uni-erlangen.de) -! -! xntp3.3b of 1993/12/06 : remember to change #define ntp_adjtime adjtimex to -! __adjtimex in the Linux section (line 316). This is hopefully done if you -! (don't :-) see this paragraph in the xntp3.x distribution. ---- 1,9 ---- - -! Requirements: kernel 0.99.14y or newer, libc 4.5.8 or newer - ------------ - -! With this configuration, xntp should build an run right out of the box -! (see generic hints for how-to). If you really need to run xntp on any earlier -! versions of the kernel or libc, or have any other question not covered in the -! READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel -! free to ask me (duwe@informatik.uni-erlangen.de) -diff -c include/ntp.h:1.1.1.17 include/ntp.h:3.23 -*** include/ntp.h:1.1.1.17 Wed Feb 2 18:11:18 1994 ---- include/ntp.h Wed Feb 2 18:11:18 1994 -*************** -*** 612,617 **** ---- 612,620 ---- - struct mon_data *hash_prev; /* previous structure in hash list */ - struct mon_data *mru_next; /* next structure in MRU list */ - struct mon_data *mru_prev; /* previous structure in MRU list */ -+ struct mon_data *fifo_next; /* next structure in FIFO list */ -+ struct mon_data *fifo_prev; /* previous structure in FIFO list */ -+ U_LONG lastdrop; /* last time dropped due to RES_LIMIT*/ - U_LONG lasttime; /* last time data updated */ - U_LONG firsttime; /* time structure initialized */ - U_LONG count; /* count we have seen */ -*************** -*** 621,627 **** - u_char version; /* version of incoming packet */ - }; - -! - /* - * Structure used for restrictlist entries - */ ---- 624,635 ---- - u_char version; /* version of incoming packet */ - }; - -! /* -! * Values used with mon_enabled to indicate reason for enabling monitoring -! */ -! #define MON_OFF 0x00 /* no monitoring */ -! #define MON_ON 0x01 /* monitoring explicitly enabled */ -! #define MON_RES 0x02 /* implicit monitoring for RES_LIMITED */ - /* - * Structure used for restrictlist entries - */ -*************** -*** 645,654 **** - #define RES_NOPEER 0x20 /* don't allocate memory resources */ - #define RES_NOTRAP 0x40 /* don't allow him to set traps */ - #define RES_LPTRAP 0x80 /* traps set by him are low priority */ - - #define RES_ALLFLAGS \ - (RES_IGNORE|RES_DONTSERVE|RES_DONTTRUST|RES_NOQUERY\ -! |RES_NOMODIFY|RES_NOPEER|RES_NOTRAP|RES_LPTRAP) - - /* - * Match flags ---- 653,663 ---- - #define RES_NOPEER 0x20 /* don't allocate memory resources */ - #define RES_NOTRAP 0x40 /* don't allow him to set traps */ - #define RES_LPTRAP 0x80 /* traps set by him are low priority */ -+ #define RES_LIMITED 0x100 /* limit per net number of clients */ - - #define RES_ALLFLAGS \ - (RES_IGNORE|RES_DONTSERVE|RES_DONTTRUST|RES_NOQUERY\ -! |RES_NOMODIFY|RES_NOPEER|RES_NOTRAP|RES_LPTRAP|RES_LIMITED) - - /* - * Match flags -diff -c include/ntp_request.h:1.1.1.7 include/ntp_request.h:3.7 -*** include/ntp_request.h:1.1.1.7 Wed Feb 2 18:11:27 1994 ---- include/ntp_request.h Wed Feb 2 18:11:28 1994 -*************** -*** 429,438 **** ---- 429,456 ---- - U_LONG processed; /* packets processed */ - U_LONG badauth; /* packets dropped because of authorization */ - U_LONG wanderhold; -+ U_LONG limitrejected; /* rejected because of client limitation */ - }; - - - /* -+ * System stats - old version -+ */ -+ struct old_info_sys_stats { -+ U_LONG timeup; /* time we have been up and running */ -+ U_LONG timereset; /* time since these were last cleared */ -+ U_LONG badstratum; /* packets claiming an invalid stratum */ -+ U_LONG oldversionpkt; /* old version packets received */ -+ U_LONG newversionpkt; /* new version packets received */ -+ U_LONG unknownversion; /* don't know version packets */ -+ U_LONG badlength; /* packets with bad length */ -+ U_LONG processed; /* packets processed */ -+ U_LONG badauth; /* packets dropped because of authorization */ -+ U_LONG wanderhold; -+ }; -+ -+ -+ /* - * Peer memory statistics. Collected in the peer module. - */ - struct info_mem_stats { -*************** -*** 546,551 **** ---- 564,570 ---- - struct info_monitor { - U_LONG lasttime; /* last packet from this host */ - U_LONG firsttime; /* first time we received a packet */ -+ U_LONG lastdrop; /* last time we rejected a packet due to client limitation policy */ - U_LONG count; /* count of packets received */ - U_LONG addr; /* host address */ - u_short port; /* port number of last reception */ -*************** -*** 553,558 **** ---- 572,589 ---- - u_char version; /* version number of last packet */ - }; - -+ /* -+ * Structure used for returning monitor data (old format -+ */ -+ struct old_info_monitor { -+ U_LONG lasttime; /* last packet from this host */ -+ U_LONG firsttime; /* first time we received a packet */ -+ U_LONG count; /* count of packets received */ -+ U_LONG addr; /* host address */ -+ u_short port; /* port number of last reception */ -+ u_char mode; /* mode of last packet */ -+ u_char version; /* version number of last packet */ -+ }; - - /* - * Structure used for passing indication of flags to clear -diff -c include/ntp_stdlib.h:1.1.1.7 include/ntp_stdlib.h:1.2 -*** include/ntp_stdlib.h:1.1.1.7 Wed Feb 2 18:11:31 1994 ---- include/ntp_stdlib.h Wed Feb 2 18:11:31 1994 -*************** -*** 79,84 **** ---- 79,85 ---- - extern char * mfptoa P((U_LONG, U_LONG, int)); - extern char * mfptoms P((U_LONG, U_LONG, int)); - extern char * modetoa P((int)); -+ extern U_LONG netof P((U_LONG)); - extern char * numtoa P((U_LONG)); - extern char * numtohost P((U_LONG)); - extern int octtoint P((const char *, U_LONG *)); -diff -c include/ntpd.h:1.1.1.7 include/ntpd.h:1.6 -*** include/ntpd.h:1.1.1.7 Wed Feb 2 18:11:38 1994 ---- include/ntpd.h Wed Feb 2 18:11:38 1994 -*************** -*** 93,100 **** - - /* ntp_monitor.c */ - extern void init_mon P((void)); -! extern void mon_start P((void)); -! extern void mon_stop P((void)); - extern void monitor P((struct recvbuf *)); - - /* ntp_peer.c */ ---- 93,100 ---- - - /* ntp_monitor.c */ - extern void init_mon P((void)); -! extern void mon_start P((int)); -! extern void mon_stop P((int)); - extern void monitor P((struct recvbuf *)); - - /* ntp_peer.c */ -diff -c lib/Makefile.tmpl:1.1.1.14 lib/Makefile.tmpl:3.25 -*** lib/Makefile.tmpl:1.1.1.14 Wed Feb 2 18:12:06 1994 ---- lib/Makefile.tmpl Wed Feb 2 18:12:07 1994 -*************** -*** 31,37 **** - uglydate.c uinttoa.c utvtoa.c machines.c clocktypes.c \ - md5.c a_md5encrypt.c a_md5decrypt.c \ - a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \ -! findconfig.c - - OBJS= atoint.o atolfp.o atouint.o auth12crypt.o authdecrypt.o authdes.o \ - authencrypt.o authkeys.o authparity.o authreadkeys.o authusekey.o \ ---- 31,37 ---- - uglydate.c uinttoa.c utvtoa.c machines.c clocktypes.c \ - md5.c a_md5encrypt.c a_md5decrypt.c \ - a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \ -! findconfig.c netof.c - - OBJS= atoint.o atolfp.o atouint.o auth12crypt.o authdecrypt.o authdes.o \ - authencrypt.o authkeys.o authparity.o authreadkeys.o authusekey.o \ -*************** -*** 44,50 **** - uglydate.o uinttoa.o utvtoa.o machines.o clocktypes.o \ - md5.o a_md5encrypt.o a_md5decrypt.o \ - a_md512crypt.o decodenetnum.o systime.o msyslog.o syssignal.o \ -! findconfig.o - - $(LIBNAME).a: $(OBJS) - ar rv $@ $? ---- 44,50 ---- - uglydate.o uinttoa.o utvtoa.o machines.o clocktypes.o \ - md5.o a_md5encrypt.o a_md5decrypt.o \ - a_md512crypt.o decodenetnum.o systime.o msyslog.o syssignal.o \ -! findconfig.o netof.o - - $(LIBNAME).a: $(OBJS) - ar rv $@ $? -diff -c /dev/null lib/netof.c:3.1 -*** /dev/null Wed Feb 2 18:13:07 1994 ---- lib/netof.c Wed Feb 2 18:13:07 1994 -*************** -*** 0 **** ---- 1,25 ---- -+ /* -+ * netof - return the net address part of an ip address -+ * (zero out host part) -+ */ -+ #include <stdio.h> -+ -+ #include "ntp_fp.h" -+ #include "ntp_stdlib.h" -+ -+ U_LONG -+ netof(num) -+ U_LONG num; -+ { -+ register U_LONG netnum; -+ -+ netnum = num; -+ -+ if(IN_CLASSC(netnum)) -+ netnum &= IN_CLASSC_NET; -+ else if (IN_CLASSB(netnum)) -+ netnum &= IN_CLASSB_NET; -+ else /* treat als other like class A */ -+ netnum &= IN_CLASSA_NET; -+ return netnum; -+ } -diff -c /dev/null parse/README.new_clocks:3.2 -*** /dev/null Wed Feb 2 18:14:30 1994 ---- parse/README.new_clocks Wed Feb 2 18:14:30 1994 -*************** -*** 0 **** ---- 1,203 ---- -+ Here is an attempt to scetch out what you need to do in order to -+ add another clock to the parse driver: -+ -+ Prerequsites: -+ - Does the system you want the clock connect to have -+ termio.h or termios.h ? (You need that for the parse driver) -+ -+ What to do: -+ -+ Make a conversion module (parse/clk_*.c) -+ -+ - What ist the time code format ? -+ - find year, month, day, hour, minute, second, status (synchronised or -+ not), possibly time zone information (you need to give the offset to UTC) -+ You will have to convert the data from a string into a struct clocktime: -+ struct clocktime /* clock time broken up from time code */ -+ { -+ LONG day; -+ LONG month; -+ LONG year; -+ LONG hour; -+ LONG minute; -+ LONG second; -+ LONG usecond; -+ LONG utcoffset; /* in seconds */ -+ LONG flags; /* current clock status */ -+ }; -+ -+ Conversion is usually simple and straight forward. For the flags following -+ values can be OR'ed together: -+ -+ PARSEB_ANNOUNCE switch time zone warning (informational only) -+ PARSEB_POWERUP no synchronisation - clock confused (must set then) -+ PARSEB_NOSYNC timecode currently not confirmed (must set then) -+ usually on reception error when the is still a -+ chance the the generated time is still ok. -+ -+ PARSEB_DST DST in effect (informational only) -+ PARSEB_UTC timecode contains UTC time (informational only) -+ PARSEB_LEAP LEAP warning (prior to leap happening - must set when imminent) -+ PARSEB_ALTERNATE backup transmitter (informational only) -+ PARSEB_POSITION geographic position available (informational only) -+ PARSEB_LEAPSECOND actual leap second (this time code is the leap -+ second - informational only) -+ -+ These are feature flags denoting items that are supported by the clock: -+ PARSEB_S_LEAP supports LEAP - might set PARSEB_LEAP -+ PARSEB_S_ANTENNA supports ANTENNA - might set PARSEB_ALTERNATE -+ PARSEB_S_PPS supports PPS time stamping -+ PARSEB_S_POSITION supports position information (GPS) -+ -+ Conversion is done in the cvt_* routine in parse/clk_*.c files. look in -+ them for examples. The basic structure is: -+ -+ struct clockformat <yourclock>_format = { -+ lots of field for you to fill out (see below) -+ }; -+ -+ static cvt_<yourclock>() -+ ... -+ { -+ if (<I do not recognize my time code>) { -+ return CVT_NONE; -+ } else { -+ if (<conversion into clockformat is ok>) { -+ <set all necessary flags>; -+ return CVT_OK; -+ } else { -+ return CVT_FAIL|CVT_BADFMT; -+ } -+ } -+ -+ The struct clockformat is the interface to the rest of the parse -+ driver - it holds all information necessary for finding the -+ clock message and doing the appropriate time stamping. -+ -+ struct clockformat -+ { -+ unsigned LONG (*convert)(); -+ /* conversion routine - your routine - cvt_<yourclock> */ -+ void (*syncevt)(); -+ /* routine for handling RS232 sync events (time stamps) - usually sync_simple */ -+ unsigned LONG (*syncpps)(); -+ /* PPS input routine - usually pps_simple */ -+ unsigned LONG (*synth)(); -+ /* time code synthesizer - usually not used - (LONG (*)())0 */ -+ void *data; -+ /* local parameters - any parameters/data/configuration info your conversion -+ routine might need */ -+ char *name; -+ /* clock format name - Name of the time code */ -+ unsigned short length; -+ /* maximum length of data packet for your clock format */ -+ unsigned LONG flags; -+ /* information for the parser what to look for */ -+ struct timeval timeout; -+ /* buffer restart after timeout (us) - some clocks preceede new data by -+ a longer period of silence - unsually not used */ -+ unsigned char startsym; -+ /* start symbol - character at the beginning of the clock data */ -+ unsigned char endsym; -+ /* end symbol - character at the end of the clock data */ -+ unsigned char syncsym; -+ /* sync symbol - character that is "on time" - where the time stamp should be taken */ -+ }; -+ -+ The flags: -+ F_START use startsym to find the beginning of the clock data -+ F_END use endsym to find the end of the clock data -+ SYNC_TIMEOUT packet restart after timeout in timeout field -+ SYNC_START packet start is sync event (time stamp at paket start) -+ SYNC_END packet end is sync event (time stamp at paket end) -+ SYNC_CHAR special character (syncsym) is sync event -+ SYNC_ONE PPS synchronize on 'ONE' transition -+ SYNC_ZERO PPS synchronize on 'ZERO' transition -+ SYNC_SYNTHESIZE generate intermediate time stamps (very special case!) -+ CVT_FIXEDONLY convert only in fixed configuration - (data format not -+ suitable for auto-configuration) -+ -+ -+ The above should have given you some hints on how to build a clk_*.c -+ file with the time code conversion. See the examples and pick a clock -+ closest to yours and tweak the code to match your clock. -+ -+ In order to make your clk_*.c file usable a referenc to the clockformat -+ structure must be put into parse_conf.c. -+ -+ -+ -+ TTY setup and initialisation/configuration will be done in -+ xntpd/refclock_parse.c -+ -+ - Find out the exact tty settings for your clock (baud rate, parity, -+ stop bits, character size, ...) and note them in terms of -+ termio*.h c_cflag macros. -+ -+ - in xntpd/refclock_parse.c fill out a new the struct clockinfo element -+ (allocates a new "IP" address - see comments) -+ (see all the other clocks for example) -+ struct clockinfo -+ { -+ U_LONG cl_flags; /* operation flags (io modes) */ -+ PARSE_F_NOPOLLONLY always do async io - read whenever input comes -+ PARSE_F_POLLONLY never do async io - only read when expecting data -+ PARSE_F_PPSPPS use loopfilter PPS code (CIOGETEV) -+ PARSE_F_PPSONSECOND PPS pulses are on second -+ usually flags stay 0 as they are used only for special setups -+ -+ void (*cl_poll)(); /* active poll routine */ -+ The routine to call when the clock needs data sent to it in order to -+ get a time code from the clock (e.g. Trimble clock) -+ int (*cl_init)(); /* active poll init routine */ -+ The routine to call for very special initializations. -+ void (*cl_end)(); /* active poll end routine */ -+ The routine to call to undo any special initialisation (free memory/timers) -+ void *cl_data; /* local data area for "poll" mechanism */ -+ local data for polling routines -+ u_fp cl_rootdelay; /* rootdelay */ -+ NTP rottdelay estimate (usually 0) -+ U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional par -+ time (fraction) by which the RS232 time code is delayed from the actual time. -+ t */ -+ U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional -+ time (fraction) by which the PPS time stamp is delayed (usually 0) -+ part */ -+ char *cl_id; /* ID code (usually "DCF") */ -+ Refclock id - (max 4 chars) -+ char *cl_description; /* device name */ -+ Name of this device. -+ char *cl_format; /* fixed format */ -+ If the data format cann not ne detected automatically this is the name -+ as in clk_*.c clockformat. -+ u_char cl_type; /* clock type (ntp control) */ -+ Type if clock as in clock status word (ntp control messages) - usually 0 -+ U_LONG cl_maxunsync; /* time to trust oscillator after loosing synch -+ */ -+ seconds a clock can be trusted after loosing synchronisation. -+ -+ U_LONG cl_cflag; /* terminal io flags */ -+ U_LONG cl_iflag; /* terminal io flags */ -+ U_LONG cl_oflag; /* terminal io flags */ -+ U_LONG cl_lflag; /* terminal io flags */ -+ termio*.h tty modes. -+ } clockinfo[] = { -+ ...,<other clocks>,... -+ { < your parameters> }, -+ }; -+ -+ -+ Well, this is very sketchy, i know. But I hope it helps a little bit. -+ The best way is to look which clock comes closet to your and tweak that -+ code. -+ Two sorts of clocks are used with parse. Clocks that automatically sent -+ thier time code (once a second) do not nee entries in the poll routines because -+ they sent the data all the time. The second sort are the clocks that need a -+ command sent to then in order to reply with a time code (like the Trimble -+ clock). -+ -+ For questions: kardel@informatik.uni-erlangen.de. Please include -+ an exact description on how your clock works. (initialisation, -+ TTY modes, strings to be sent to it, responses received from the clock). -+ -+ Frank Kardel -diff -c /dev/null parse/README.parse_clocks:3.1 -*** /dev/null Wed Feb 2 18:14:33 1994 ---- parse/README.parse_clocks Wed Feb 2 18:14:33 1994 -*************** -*** 0 **** ---- 1,263 ---- -+ The parse driver currently supports several clock with different -+ query mechanisms. In order for you to find a sample that might be -+ similar to a clock you might want to integrate into parse i'll sum -+ up the major features of the clocks (this information is distributed -+ in the parse/clk_*.c and xntpd/refclock_parse.c files). -+ -+ --- -+ Meinberg: 127.127.8. 0- 3 (PZF535TCXO) -+ 127.127.8. 4- 7 (PZF535OCXO) -+ 127.127.8. 8-11 (DCFUA31) -+ 127.127.8.28-31 (GPS166) -+ Meinberg: start=<STX>, end=<ETX>, sync on start -+ pattern="\2D: . . ;T: ;U: . . ; \3" -+ pattern="\2 . . ; ; : : ; \3" -+ pattern="\2 . . ; ; : : ; : ; ; . . " -+ -+ Meinberg is a german manufacturer of time code receivers. Those clocks -+ have a pretty common output format in the stock version. In order to -+ support NTP Meinberg was so kind to produce some special versions of -+ the firmware for the use with NTP. So, if you are going to use a -+ Meinberg clock please ask whether there is a special Uni Erlangen -+ version. -+ -+ General characteristics: -+ Meinberg clocks primarily output pulse per second and a describing -+ ASCII string. This string can be produced in two modes. either upon -+ the reception of a question mark or every second. NTP uses the latter -+ mechanism. The DCF77 variants have a pretty good relationship between -+ RS232 time code and the PPS signal while the GPS receiver has no fixed -+ timeing between the datagram and the pulse (you need to use PPS with -+ GPS!) on DCF77 you might get away without the PPS signal. -+ -+ The preferred tty setting for Meinberg is: -+ CFLAG (B9600|CS7|PARENB|CREAD|HUPCL) -+ IFLAG (IGNBRK|IGNPAR|ISTRIP) -+ OFLAG 0 -+ LFLAG 0 -+ -+ The clock is run at datagram once per second. -+ Stock dataformat is: -+ -+ <STX>D:<dd>.<mm>.<yy>;T:<w>;U:<hh>:<mm>:<ss>;<S><F><D><A><ETX> -+ pos: 0 00 00 0 00 0 11 111 1 111 12 2 22 2 22 2 2 2 3 3 3 -+ 1 23 45 6 78 9 01 234 5 678 90 1 23 4 56 7 8 9 0 1 2 -+ -+ <STX> = '\002' ASCII start of text -+ <ETX> = '\003' ASCII end of text -+ <dd>,<mm>,<yy> = day, month, year(2 digits!!) -+ <w> = day of week (sunday= 0) -+ <hh>,<mm>,<ss> = hour, minute, second -+ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31 -+ '#' if not PZF sychronisation available else ' ' for PZF 535 -+ <F> = '*' if time comes from internal quartz else ' ' -+ <D> = 'S' if daylight saving time is active else ' ' -+ <A> = '!' during the hour preceeding an daylight saving time -+ start/end change -+ -+ For the university of Erlangen a special format was implemented to support -+ LEAP announcement and anouncement of alternate antenna. -+ -+ Version for UNI-ERLANGEN Software is: PZFUERL V4.6 (Meinberg) -+ -+ The use of this software release (or higher) is *ABSOLUTELY* -+ recommended (ask for PZFUERL version as some minor HW fixes have -+ been introduced) due to the LEAP second support and UTC indication. -+ The standard timecode does not indicate when the timecode is in -+ UTC (by front panel configuration) thus we have no chance to find -+ the correct utc offset. For the standard format do not ever use -+ UTC display as this is not detectable in the time code !!! -+ -+ <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <U><S><F><D><A><L><R><ETX> -+ pos: 0 00 0 00 0 00 11 1 11 11 1 11 2 22 22 2 2 2 2 2 3 3 3 -+ 1 23 4 56 7 89 01 2 34 56 7 89 0 12 34 5 6 7 8 9 0 1 2 -+ <STX> = '\002' ASCII start of text -+ <ETX> = '\003' ASCII end of text -+ <dd>,<mm>,<yy> = day, month, year(2 digits!!) -+ <w> = day of week (sunday= 0) -+ <hh>,<mm>,<ss> = hour, minute, second -+ <U> = 'U' UTC time display -+ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31 -+ '#' if not PZF sychronisation available else ' ' for PZF 535 -+ <F> = '*' if time comes from internal quartz else ' ' -+ <D> = 'S' if daylight saving time is active else ' ' -+ <A> = '!' during the hour preceeding an daylight saving time -+ start/end change -+ <L> = 'A' LEAP second announcement -+ <R> = 'R' alternate antenna -+ -+ Meinberg GPS166 receiver -+ -+ You must get the Uni-Erlangen firmware for the GPS receiver support -+ to work to full satisfaction ! -+ -+ <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <+/-><00:00>; <U><S><F><D><A><L><R><L>; <position...><ETX> -+ * -+ 000000000111111111122222222223333333333444444444455555555556666666 -+ 123456789012345678901234567890123456789012345678901234567890123456 -+ \x0209.07.93; 5; 08:48:26; +00:00; ; 49.5736N 11.0280E 373m\x03 -+ * -+ -+ <STX> = '\002' ASCII start of text -+ <ETX> = '\003' ASCII end of text -+ <dd>,<mm>,<yy> = day, month, year(2 digits!!) -+ <w> = day of week (sunday= 0) -+ <hh>,<mm>,<ss> = hour, minute, second -+ <+/->,<00:00> = offset to UTC -+ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31 -+ '#' if not PZF sychronisation available else ' ' for PZF 535 -+ <U> = 'U' UTC time display -+ <F> = '*' if time comes from internal quartz else ' ' -+ <D> = 'S' if daylight saving time is active else ' ' -+ <A> = '!' during the hour preceeding an daylight saving time -+ start/end change -+ <L> = 'A' LEAP second announcement -+ <R> = 'R' alternate antenna (reminiscent of PZF535) usually ' ' -+ <L> = 'L' on 23:59:60 -+ -+ -+ For the Meinberg parse look into clock_meinberg.c -+ -+ --- -+ RAWDCF: 127.127.8.20-23 (Conrad receiver module - delay 210ms) -+ 127.127.8.24-27 (FAU receiver - delay 258ms) -+ RAWDCF: end=TIMEOUT>1.5s, sync each char (any char),generate psuedo time -+ codes, fixed format -+ -+ direct DCF77 code input -+ In Europe it is relatively easy/cheap the receive the german time code -+ transmitter DCF77. The simplest version to process its signal is to -+ feed the 100/200ms pulse of the demodulated AM signal via a level -+ converter to an RS232 port at 50Baud. parse/clk_rawdcf.c holds all -+ necessary decoding logic for the time code which is transmitted each -+ minute for one minute. A bit of the time code is sent once a second. -+ -+ The preferred tty setting is: -+ CFLAG (B50|CS8|CREAD|CLOCAL) -+ IFLAG 0 -+ OFLAG 0 -+ LFLAG 0 -+ -+ DCF77 raw time code -+ -+ From "Zur Zeit", Physikalisch-Technische Bundesanstalt (PTB), Braunschweig -+ und Berlin, Maerz 1989 -+ -+ Timecode transmission: -+ AM: -+ time marks are send every second except for the second before the -+ next minute mark -+ time marks consist of a reduction of transmitter power to 25% -+ of the nominal level -+ the falling edge is the time indication (on time) -+ time marks of a 100ms duration constitute a logical 0 -+ time marks of a 200ms duration constitute a logical 1 -+ FM: -+ see the spec. (basically a (non-)inverted psuedo random phase shift) -+ -+ Encoding: -+ Second Contents -+ 0 - 10 AM: free, FM: 0 -+ 11 - 14 free -+ 15 R - alternate antenna -+ 16 A1 - expect zone change (1 hour before) -+ 17 - 18 Z1,Z2 - time zone -+ 0 0 illegal -+ 0 1 MEZ (MET) -+ 1 0 MESZ (MED, MET DST) -+ 1 1 illegal -+ 19 A2 - expect leap insertion/deletion (1 hour before) -+ 20 S - start of time code (1) -+ 21 - 24 M1 - BCD (lsb first) Minutes -+ 25 - 27 M10 - BCD (lsb first) 10 Minutes -+ 28 P1 - Minute Parity (even) -+ 29 - 32 H1 - BCD (lsb first) Hours -+ 33 - 34 H10 - BCD (lsb first) 10 Hours -+ 35 P2 - Hour Parity (even) -+ 36 - 39 D1 - BCD (lsb first) Days -+ 40 - 41 D10 - BCD (lsb first) 10 Days -+ 42 - 44 DW - BCD (lsb first) day of week (1: Monday -> 7: Sunday) -+ 45 - 49 MO - BCD (lsb first) Month -+ 50 MO0 - 10 Months -+ 51 - 53 Y1 - BCD (lsb first) Years -+ 54 - 57 Y10 - BCD (lsb first) 10 Years -+ 58 P3 - Date Parity (even) -+ 59 - usually missing (minute indication), except for leap insertion -+ -+ --- -+ Schmid clock: 127.127.8.16-19 -+ Schmid clock: needs poll, binary input, end='\xFC', sync start -+ -+ The Schmid clock is a DCF77 receiver that sends a binary -+ time code at the reception of a flag byte. The contents -+ if the flag byte determined the time code format. The -+ binary time code is delimited by the byte 0xFC. -+ -+ TTY setup is: -+ CFLAG (B1200|CS8|CREAD|CLOCAL) -+ IFLAG 0 -+ OFLAG 0 -+ LFLAG 0 -+ -+ The command to Schmid's DCF77 clock is a single byte; each bit -+ allows the user to select some part of the time string, as follows (the -+ output for the lsb is sent first). -+ -+ Bit 0: time in MEZ, 4 bytes *binary, not BCD*; hh.mm.ss.tenths -+ Bit 1: date 3 bytes *binary, not BCD: dd.mm.yy -+ Bit 2: week day, 1 byte (unused here) -+ Bit 3: time zone, 1 byte, 0=MET, 1=MEST. (unused here) -+ Bit 4: clock status, 1 byte, 0=time invalid, -+ 1=time from crystal backup, -+ 3=time from DCF77 -+ Bit 5: transmitter status, 1 byte, -+ bit 0: backup antenna -+ bit 1: time zone change within 1h -+ bit 3,2: TZ 01=MEST, 10=MET -+ bit 4: leap second will be -+ added within one hour -+ bits 5-7: Zero -+ Bit 6: time in backup mode, units of 5 minutes (unused here) -+ -+ -+ --- -+ Trimble SV6: 127.127.8.32-35 -+ Trimble SV6: needs poll, ascii timecode, start='>', end='<', -+ query='>QTM<', eol='<' -+ -+ Trimble SV6 is a GPS receiver with PPS output. It needs to be polled. -+ It also need a special tty mode setup (EOL='<'). -+ -+ TTY setup is: -+ CFLAG (B4800|CS8|CREAD) -+ IFLAG (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON) -+ OFLAG (OPOST|ONLCR) -+ LFLAG (ICANON|ECHOK) -+ -+ Special flags are: -+ PARSE_F_PPSPPS - use CIOGETEV for PPS time stamping -+ PARSE_F_PPSONSECOND - the time code is not related to -+ the PPS pulse (so use the time code -+ only for the second epoch) -+ -+ Timecode -+ 0000000000111111111122222222223333333 / char -+ 0123456789012345678901234567890123456 \ posn -+ >RTMhhmmssdddDDMMYYYYoodnnvrrrrr;*xx< Actual -+ ----33445566600112222BB7__-_____--99- Parse -+ >RTM 1 ;* <", Check -+ -+ --- -+ ELV DCF7000: 127.127.8.12-15 -+ ELV DCF7000: end='\r', pattern=" - - - - - - - \r" -+ -+ The ELV DCF7000 is a cheap DCF77 receiver sending each second -+ a time code (though not very precise!) delimited by '`r' -+ -+ Timecode -+ YY-MM-DD-HH-MM-SS-FF\r -+ -+ FF&0x1 - DST -+ FF&0x2 - DST switch warning -+ FF&0x4 - unsynchronised -+ -diff -c parse/parsesolaris.c:1.1.1.5 parse/parsesolaris.c:3.11 -*** parse/parsesolaris.c:1.1.1.5 Wed Feb 2 18:14:49 1994 ---- parse/parsesolaris.c Wed Feb 2 18:14:49 1994 -*************** -*** 65,71 **** - { - "parse", /* module name */ - &parseinfo, /* module information */ -! 0, /* not clean yet */ - /* lock ptr */ - }; - ---- 65,71 ---- - { - "parse", /* module name */ - &parseinfo, /* module information */ -! D_NEW, /* not clean yet */ - /* lock ptr */ - }; - -diff -c scripts/support/bin/monl:1.1.1.1 scripts/support/bin/monl:1.2 -*** scripts/support/bin/monl:1.1.1.1 Wed Feb 2 18:16:01 1994 ---- scripts/support/bin/monl Wed Feb 2 18:16:01 1994 -*************** -*** 143,149 **** - { - chop; - split; -! ($host, $count, $mode, $version, $lasttime, $firsttime) = (@_[$[, $[+2 .. $[+6]); - - $Seen{$host, $mode} = 1; - ---- 143,150 ---- - { - chop; - split; -! ($host, $count, $mode, $version, $lasttime, $firsttime) = -! (@_[$[, $[+2 .. $[+4, $#_-1,$#_]); - - $Seen{$host, $mode} = 1; - -diff -c util/tickadj.c:1.1.1.16 util/tickadj.c:3.17 -*** util/tickadj.c:1.1.1.16 Wed Feb 2 18:16:23 1994 ---- util/tickadj.c Wed Feb 2 18:16:23 1994 -*************** -*** 1,4 **** -! /* tickadj.c,v 3.1 1993/07/06 01:11:05 jbj Exp - * tickadj - read, and possibly modify, the kernel `tick' and - * `tickadj' variables, as well as `dosynctodr'. Note that - * this operates on the running kernel only. I'd like to be ---- 1,4 ---- -! /* - * tickadj - read, and possibly modify, the kernel `tick' and - * `tickadj' variables, as well as `dosynctodr'. Note that - * this operates on the running kernel only. I'd like to be -*************** -*** 6,11 **** ---- 6,46 ---- - * mastered this yet. - */ - #include <stdio.h> -+ -+ #ifdef SYS_LINUX -+ #include <sys/timex.h> -+ -+ struct timex txc; -+ -+ int -+ main(int argc, char ** argv) -+ { -+ if (argc > 2) -+ { -+ fprintf(stderr, "Usage: %s [tick_value]\n", argv[0]); -+ exit(-1); -+ } -+ else if (argc == 2) -+ { -+ if ( (txc.tick = atoi(argv[1])) < 1 ) -+ { -+ fprintf(stderr, "Silly value for tick: %s\n", argv[1]); -+ exit(-1); -+ } -+ txc.mode = ADJ_TICK; -+ } -+ else -+ txc.mode = 0; -+ -+ if (__adjtimex(&txc) < 0) -+ perror("adjtimex"); -+ else -+ printf("tick = %d\n", txc.tick); -+ -+ return(0); -+ } -+ #else /* not Linux... kmem tweaking: */ -+ - #include <sys/types.h> - #include <sys/file.h> - #include <sys/stat.h> -*************** -*** 513,515 **** ---- 548,551 ---- - exit(1); - } - } -+ #endif /* not Linux */ -diff -c xntpd/ntp_config.c:1.1.1.19 xntpd/ntp_config.c:3.24 -*** xntpd/ntp_config.c:1.1.1.19 Wed Feb 2 18:16:36 1994 ---- xntpd/ntp_config.c Wed Feb 2 18:16:37 1994 -*************** -*** 58,63 **** ---- 58,64 ---- - * statsdir /var/NTP/ - * filegen peerstats [ file peerstats ] [ type day ] [ link ] - * resolver /path/progname -+ * netlimit integer - * - * And then some. See the manual page. - */ -*************** -*** 94,99 **** ---- 95,102 ---- - #define CONFIG_PIDFILE 25 - #define CONFIG_LOGFILE 26 - #define CONFIG_SETVAR 27 -+ #define CONFIG_CLIENTLIMIT 28 -+ #define CONFIG_CLIENTPERIOD 29 - - #define CONF_MOD_VERSION 1 - #define CONF_MOD_KEY 2 -*************** -*** 114,119 **** ---- 117,123 ---- - #define CONF_RES_NOTRAP 8 - #define CONF_RES_LPTRAP 9 - #define CONF_RES_NTPPORT 10 -+ #define CONF_RES_LIMITED 11 - - #define CONF_TRAP_PORT 1 - #define CONF_TRAP_INTERFACE 2 -*************** -*** 179,184 **** ---- 183,190 ---- - { "pidfile", CONFIG_PIDFILE }, - { "logfile", CONFIG_LOGFILE }, - { "setvar", CONFIG_SETVAR }, -+ { "clientlimit", CONFIG_CLIENTLIMIT }, -+ { "clientperiod", CONFIG_CLIENTPERIOD }, - { "", CONFIG_UNKNOWN } - }; - -*************** -*** 217,222 **** ---- 223,229 ---- - { "notrap", CONF_RES_NOTRAP }, - { "lowpriotrap", CONF_RES_LPTRAP }, - { "ntpport", CONF_RES_NTPPORT }, -+ { "limited", CONF_RES_LIMITED }, - { "", CONFIG_UNKNOWN } - }; - -*************** -*** 817,825 **** - errflg = 0; - if (ntokens >= 2) { - if (STREQ(tokens[1], "yes")) -! mon_start(); - else if (STREQ(tokens[1], "no")) -! mon_stop(); - else - errflg++; - } else { ---- 824,832 ---- - errflg = 0; - if (ntokens >= 2) { - if (STREQ(tokens[1], "yes")) -! mon_start(MON_ON); - else if (STREQ(tokens[1], "no")) -! mon_stop(MON_ON); - else - errflg++; - } else { -*************** -*** 965,970 **** ---- 972,981 ---- - peerkey |= RESM_NTPONLY; - break; - -+ case CONF_RES_LIMITED: -+ peerversion |= RES_LIMITED; -+ break; -+ - case CONFIG_UNKNOWN: - errflg++; - break; -*************** -*** 1413,1418 **** ---- 1424,1483 ---- - set_sys_var(tokens[1], strlen(tokens[1])+1, RW | - ((((ntokens > 2) && !strcmp(tokens[2], "default"))) ? DEF : 0)); - } -+ break; -+ -+ case CONFIG_CLIENTLIMIT: -+ if (ntokens < 2) -+ { -+ syslog(LOG_ERR, -+ "no value for clientlimit command - line ignored"); -+ } -+ else -+ { -+ U_LONG i; -+ if (!atouint(tokens[1], &i) || !i) -+ { -+ syslog(LOG_ERR, -+ "illegal value for clientlimit command - line ignored"); -+ } -+ else -+ { -+ extern U_LONG client_limit; -+ char bp[80]; -+ -+ sprintf(bp, "client_limit=%d", i); -+ set_sys_var(bp, strlen(bp)+1, RO); -+ -+ client_limit = i; -+ } -+ } -+ break; -+ -+ case CONFIG_CLIENTPERIOD: -+ if (ntokens < 2) -+ { -+ syslog(LOG_ERR, -+ "no value for clientperiod command - line ignored"); -+ } -+ else -+ { -+ U_LONG i; -+ if (!atouint(tokens[1], &i) || i < 64) -+ { -+ syslog(LOG_ERR, -+ "illegal value for clientperiod command - line ignored"); -+ } -+ else -+ { -+ extern U_LONG client_limit_period; -+ char bp[80]; -+ -+ sprintf(bp, "client_limit_period=%d", i); -+ set_sys_var(bp, strlen(bp)+1, RO); -+ -+ client_limit_period = i; -+ } -+ } - break; - } - } -diff -c xntpd/ntp_monitor.c:1.1.1.10 xntpd/ntp_monitor.c:3.9 -*** xntpd/ntp_monitor.c:1.1.1.10 Wed Feb 2 18:16:48 1994 ---- xntpd/ntp_monitor.c Wed Feb 2 18:16:48 1994 -*************** -*** 58,64 **** - static struct mon_data *mon_hash; /* Pointer to array of hash buckets */ - static int *mon_hash_count; /* Point to hash count stats keeper */ - struct mon_data mon_mru_list; -! - /* - * List of free structures structures, and counters of free and total - * structures. The free structures are linked with the hash_next field. ---- 58,64 ---- - static struct mon_data *mon_hash; /* Pointer to array of hash buckets */ - static int *mon_hash_count; /* Point to hash count stats keeper */ - struct mon_data mon_mru_list; -! struct mon_data mon_fifo_list; - /* - * List of free structures structures, and counters of free and total - * structures. The free structures are linked with the hash_next field. -*************** -*** 93,99 **** - * Don't do much of anything here. We don't allocate memory - * until someone explicitly starts us. - */ -! mon_enabled = 0; - mon_have_memory = 0; - - mon_free_mem = 0; ---- 93,99 ---- - * Don't do much of anything here. We don't allocate memory - * until someone explicitly starts us. - */ -! mon_enabled = MON_OFF; - mon_have_memory = 0; - - mon_free_mem = 0; -*************** -*** 103,108 **** ---- 103,109 ---- - mon_hash = 0; - mon_hash_count = 0; - memset((char *)&mon_mru_list, 0, sizeof mon_mru_list); -+ memset((char *)&mon_fifo_list, 0, sizeof mon_fifo_list); - } - - -*************** -*** 110,122 **** - * mon_start - start up the monitoring software - */ - void -! mon_start() - { - register struct mon_data *md; - register int i; - -! if (mon_enabled) - return; - - if (!mon_have_memory) { - mon_hash = (struct mon_data *) ---- 111,128 ---- - * mon_start - start up the monitoring software - */ - void -! mon_start(mode) -! int mode; - { - register struct mon_data *md; - register int i; - -! if (mon_enabled != MON_OFF) { -! mon_enabled |= mode; - return; -+ } -+ if (mode == MON_OFF) -+ return; /* Ooops.. */ - - if (!mon_have_memory) { - mon_hash = (struct mon_data *) -*************** -*** 142,148 **** - mon_mru_list.mru_next = &mon_mru_list; - mon_mru_list.mru_prev = &mon_mru_list; - -! mon_enabled = 1; - } - - ---- 148,157 ---- - mon_mru_list.mru_next = &mon_mru_list; - mon_mru_list.mru_prev = &mon_mru_list; - -! mon_fifo_list.fifo_next = &mon_fifo_list; -! mon_fifo_list.fifo_prev = &mon_fifo_list; -! -! mon_enabled = mode; - } - - -*************** -*** 150,161 **** - * mon_stop - stop the monitoring software - */ - void -! mon_stop() - { - register struct mon_data *md; - register int i; - -! if (!mon_enabled) - return; - - /* ---- 159,177 ---- - * mon_stop - stop the monitoring software - */ - void -! mon_stop(mode) -! int mode; - { - register struct mon_data *md; - register int i; - -! if (mon_enabled == MON_OFF) -! return; -! if ((mon_enabled & mode) == 0 || mode == MON_OFF) -! return; -! -! mon_enabled &= ~mode; -! if (mon_enabled != MON_OFF) - return; - - /* -*************** -*** 176,182 **** - mon_mru_list.mru_next = &mon_mru_list; - mon_mru_list.mru_prev = &mon_mru_list; - -! mon_enabled = 0; - } - - ---- 192,199 ---- - mon_mru_list.mru_next = &mon_mru_list; - mon_mru_list.mru_prev = &mon_mru_list; - -! mon_fifo_list.fifo_next = &mon_fifo_list; -! mon_fifo_list.fifo_prev = &mon_fifo_list; - } - - -*************** -*** 194,200 **** - register int mode; - register struct mon_data *mdhash; - -! if (!mon_enabled) - return; - - pkt = &rbufp->recv_pkt; ---- 211,217 ---- - register int mode; - register struct mon_data *mdhash; - -! if (mon_enabled == MON_OFF) - return; - - pkt = &rbufp->recv_pkt; -*************** -*** 220,225 **** ---- 237,243 ---- - md->mru_prev = &mon_mru_list; - mon_mru_list.mru_next->mru_prev = md; - mon_mru_list.mru_next = md; -+ - return; - } - md = md->hash_next; -*************** -*** 240,245 **** ---- 258,269 ---- - md->hash_next->hash_prev = md->hash_prev; - md->hash_prev->hash_next = md->hash_next; - *(mon_hash_count + MON_HASH(md->rmtadr)) -= 1; -+ /* -+ * Get it from FIFO list -+ */ -+ md->fifo_prev->fifo_next = md->fifo_next; -+ md->fifo_next->fifo_prev = md->fifo_prev; -+ - } else { - if (mon_free_mem == 0) - mon_getmoremem(); -*************** -*** 252,257 **** ---- 276,282 ---- - * Got one, initialize it - */ - md->lasttime = md->firsttime = current_time; -+ md->lastdrop = 0; - md->count = 1; - md->rmtadr = netnum; - md->rmtport = NSRCPORT(&rbufp->recv_srcadr); -*************** -*** 260,266 **** - - /* - * Shuffle him into the hash table, inserting him at the -! * end. Also put him on top of the MRU list. - */ - mdhash = mon_hash + MON_HASH(netnum); - md->hash_next = mdhash; ---- 285,292 ---- - - /* - * Shuffle him into the hash table, inserting him at the -! * end. Also put him on top of the MRU list -! * and at bottom of FIFO list - */ - mdhash = mon_hash + MON_HASH(netnum); - md->hash_next = mdhash; -*************** -*** 273,278 **** ---- 299,309 ---- - md->mru_prev = &mon_mru_list; - mon_mru_list.mru_next->mru_prev = md; - mon_mru_list.mru_next = md; -+ -+ md->fifo_prev = mon_fifo_list.fifo_prev; -+ md->fifo_next = &mon_fifo_list; -+ mon_fifo_list.fifo_prev->fifo_next = md; -+ mon_fifo_list.fifo_prev = md; - } - - -diff -c xntpd/ntp_proto.c:1.1.1.19 xntpd/ntp_proto.c:3.21 -*** xntpd/ntp_proto.c:1.1.1.19 Wed Feb 2 18:16:51 1994 ---- xntpd/ntp_proto.c Wed Feb 2 18:16:52 1994 -*************** -*** 49,54 **** ---- 49,55 ---- - U_LONG sys_processed; /* packets processed */ - U_LONG sys_badauth; /* packets dropped because of authorization */ - U_LONG sys_wanderhold; /* sys_peer held to prevent wandering */ -+ U_LONG sys_limitrejected; /* pkts rejected due toclient count per net */ - - /* - * Imported from ntp_timer.c -*************** -*** 373,378 **** ---- 374,394 ---- - return; - - /* -+ * See if we only accept limited number of clients -+ * from the net this guy is from. -+ * Note: the flag is determined dynamically within restrictions() -+ */ -+ if (restrict & RES_LIMITED) { -+ extern U_LONG client_limit; -+ -+ sys_limitrejected++; -+ syslog(LOG_NOTICE, -+ "rejected mode %d request from %s - per net client limit (%d) exceeded", -+ PKT_MODE(pkt->li_vn_mode), -+ ntoa(&rbufp->recv_srcadr), client_limit); -+ return; -+ } -+ /* - * Dump anything with a putrid stratum. These will most likely - * come from someone trying to poll us with ntpdc. - */ -*************** -*** 2165,2168 **** ---- 2181,2185 ---- - sys_badauth = 0; - sys_wanderhold = 0; - sys_stattime = current_time; -+ sys_limitrejected = 0; - } -diff -c xntpd/ntp_request.c:1.1.1.14 xntpd/ntp_request.c:3.15 -*** xntpd/ntp_request.c:1.1.1.14 Wed Feb 2 18:16:55 1994 ---- xntpd/ntp_request.c Wed Feb 2 18:16:55 1994 -*************** -*** 916,921 **** ---- 916,922 ---- - extern U_LONG sys_processed; - extern U_LONG sys_badauth; - extern U_LONG sys_wanderhold; -+ extern U_LONG sys_limitrejected; - - ss = (struct info_sys_stats *)prepare_pkt(srcadr, inter, inpkt, - sizeof(struct info_sys_stats)); -*************** -*** 930,936 **** - ss->processed = htonl(sys_processed); - ss->badauth = htonl(sys_badauth); - ss->wanderhold = htonl(sys_wanderhold); -! - (void) more_pkt(); - flush_pkt(); - } ---- 931,937 ---- - ss->processed = htonl(sys_processed); - ss->badauth = htonl(sys_badauth); - ss->wanderhold = htonl(sys_wanderhold); -! ss->limitrejected = htonl(sys_limitrejected); - (void) more_pkt(); - flush_pkt(); - } -*************** -*** 1311,1317 **** - struct interface *inter; - struct req_pkt *inpkt; - { -! mon_start(); - req_ack(srcadr, inter, inpkt, INFO_OKAY); - } - ---- 1312,1318 ---- - struct interface *inter; - struct req_pkt *inpkt; - { -! mon_start(MON_ON); - req_ack(srcadr, inter, inpkt, INFO_OKAY); - } - -*************** -*** 1325,1331 **** - struct interface *inter; - struct req_pkt *inpkt; - { -! mon_stop(); - req_ack(srcadr, inter, inpkt, INFO_OKAY); - } - ---- 1326,1332 ---- - struct interface *inter; - struct req_pkt *inpkt; - { -! mon_stop(MON_ON); - req_ack(srcadr, inter, inpkt, INFO_OKAY); - } - -*************** -*** 1497,1502 **** ---- 1498,1507 ---- - md = md->mru_next) { - im->lasttime = htonl(current_time - md->lasttime); - im->firsttime = htonl(current_time - md->firsttime); -+ if (md->lastdrop) -+ im->lastdrop = htonl(current_time - md->lastdrop); -+ else -+ im->lastdrop = 0; - im->count = htonl(md->count); - im->addr = md->rmtadr; - im->port = md->rmtport; -diff -c xntpd/ntp_restrict.c:1.1.1.10 xntpd/ntp_restrict.c:3.10 -*** xntpd/ntp_restrict.c:1.1.1.10 Wed Feb 2 18:16:57 1994 ---- xntpd/ntp_restrict.c Wed Feb 2 18:16:57 1994 -*************** -*** 1,4 **** -! /* ntp_restrict.c,v 3.1 1993/07/06 01:11:28 jbj Exp - * ntp_restrict.c - find out what restrictions this host is running under - */ - #include <stdio.h> ---- 1,4 ---- -! /* - * ntp_restrict.c - find out what restrictions this host is running under - */ - #include <stdio.h> -*************** -*** 60,65 **** ---- 60,80 ---- - U_LONG res_timereset; - - /* -+ * Parameters of the RES_LIMITED restriction option. -+ * client_limit is the number of hosts allowed per source net -+ * client_limit_period is the number of seconds after which an entry -+ * is no longer considered for client limit determination -+ */ -+ U_LONG client_limit; -+ U_LONG client_limit_period; -+ /* -+ * count number of restriction entries referring to RES_LIMITED -+ * controls activation/deactivation of monitoring -+ * (with respect ro RES_LIMITED control) -+ */ -+ U_LONG res_limited_refcnt; -+ -+ /* - * Our initial allocation of list entries. - */ - static struct restrictlist resinit[INITRESLIST]; -*************** -*** 70,81 **** ---- 85,102 ---- - extern U_LONG current_time; - - /* -+ * debug flag -+ */ -+ extern int debug; -+ -+ /* - * init_restrict - initialize the restriction data structures - */ - void - init_restrict() - { - register int i; -+ char bp[80]; - - /* - * Zero the list and put all but one on the free list -*************** -*** 108,113 **** ---- 129,146 ---- - res_found = 0; - res_not_found = 0; - res_timereset = 0; -+ -+ /* -+ * set default values for RES_LIMIT functionality -+ */ -+ client_limit = 3; -+ client_limit_period = 3600; -+ res_limited_refcnt = 0; -+ -+ sprintf(bp, "client_limit=%d", client_limit); -+ set_sys_var(bp, strlen(bp)+1, RO); -+ sprintf(bp, "client_limit_period=%d", client_limit_period); -+ set_sys_var(bp, strlen(bp)+1, RO); - } - - -*************** -*** 150,155 **** ---- 183,302 ---- - else - res_found++; - -+ /* -+ * The following implements limiting the number of clients -+ * accepted from a given network. The notion of "same network" -+ * is determined by the mask and addr fields of the restrict -+ * list entry. The monitor mechanism has to be enabled for -+ * collecting info on current clients. -+ * -+ * The policy is as follows: -+ * - take the list of clients recorded -+ * from the given "network" seen within the last -+ * client_limit_period seconds -+ * - if there are at most client_limit entries: -+ * --> access allowed -+ * - otherwise sort by time first seen -+ * - current client among the first client_limit seen -+ * hosts? -+ * if yes: access allowed -+ * else: eccess denied -+ */ -+ if (match->flags & RES_LIMITED) { -+ int lcnt; -+ struct mon_data *md, *this_client; -+ extern int mon_enabled; -+ extern struct mon_data mon_fifo_list, mon_mru_list; -+ -+ #ifdef DEBUG -+ if (debug > 2) -+ printf("limited clients check: %d clients, period %d seconds, net is 0x%X\n", -+ client_limit, client_limit_period, -+ netof(hostaddr)); -+ #endif /*DEBUG*/ -+ if (mon_enabled == MON_OFF) { -+ #ifdef DEBUG -+ if (debug > 4) -+ printf("no limit - monitoring is off\n"); -+ #endif -+ return (int)(match->flags & ~RES_LIMITED); -+ } -+ -+ /* -+ * How nice, MRU list provides our current client as the -+ * first entry in the list. -+ * Monitoring was verified to be active above, thus we -+ * know an entry for our client must exist, or some -+ * brain dead set the memory limit for mon entries to ZERO!!! -+ */ -+ this_client = mon_mru_list.mru_next; -+ -+ for (md = mon_fifo_list.fifo_next,lcnt = 0; -+ md != &mon_fifo_list; -+ md = md->fifo_next) { -+ if ((current_time - md->lasttime) -+ > client_limit_period) { -+ #ifdef DEBUG -+ if (debug > 5) -+ printf("checking: %s: ignore: too old: %d\n", -+ numtoa(md->rmtadr), -+ current_time - md->lasttime); -+ #endif -+ continue; -+ } -+ if (md->mode == MODE_BROADCAST || -+ md->mode == MODE_CONTROL || -+ md->mode == MODE_PRIVATE) { -+ #ifdef DEBUG -+ if (debug > 5) -+ printf("checking: %s: ignore mode %d\n", -+ numtoa(md->rmtadr), -+ md->mode); -+ #endif -+ continue; -+ } -+ if (netof(md->rmtadr) != -+ netof(hostaddr)) { -+ #ifdef DEBUG -+ if (debug > 5) -+ printf("checking: %s: different net 0x%X\n", -+ numtoa(md->rmtadr), -+ netof(md->rmtadr)); -+ #endif -+ continue; -+ } -+ lcnt++; -+ if (lcnt > client_limit || -+ md->rmtadr == hostaddr) { -+ #ifdef DEBUG -+ if (debug > 5) -+ printf("considering %s: found host\n", -+ numtoa(md->rmtadr)); -+ #endif -+ break; -+ } -+ #ifdef DEBUG -+ else { -+ if (debug > 5) -+ printf("considering %s: same net\n", -+ numtoa(md->rmtadr)); -+ } -+ #endif -+ -+ } -+ #ifdef DEBUG -+ if (debug > 4) -+ printf("this one is rank %d in list, limit is %d: %s\n", -+ lcnt, client_limit, -+ (lcnt <= client_limit) ? "ALLOW" : "REJECT"); -+ #endif -+ if (lcnt <= client_limit) { -+ this_client->lastdrop = 0; -+ return (int)(match->flags & ~RES_LIMITED); -+ } else { -+ this_client->lastdrop = current_time; -+ } -+ } - return (int)match->flags; - } - -*************** -*** 257,262 **** ---- 404,413 ---- - rlprev->next = rl; - restrictcount++; - } -+ if ((rl->flags ^ (u_short)flags) & RES_LIMITED) { -+ res_limited_refcnt++; -+ mon_start(MON_RES); /* ensure data gets collected */ -+ } - rl->flags |= (u_short)flags; - break; - -*************** -*** 265,272 **** - * Remove some bits from the flags. If we didn't - * find this one, just return. - */ -! if (rl != 0) - rl->flags &= (u_short)~flags; - break; - - case RESTRICT_REMOVE: ---- 416,429 ---- - * Remove some bits from the flags. If we didn't - * find this one, just return. - */ -! if (rl != 0) { -! if ((rl->flags ^ (u_short)flags) & RES_LIMITED) { -! res_limited_refcnt--; -! if (res_limited_refcnt == 0) -! mon_stop(MON_RES); -! } - rl->flags &= (u_short)~flags; -+ } - break; - - case RESTRICT_REMOVE: -*************** -*** 280,285 **** ---- 437,447 ---- - && !(rl->mflags & RESM_INTERFACE)) { - rlprev->next = rl->next; - restrictcount--; -+ if (rl->flags & RES_LIMITED) { -+ res_limited_refcnt--; -+ if (res_limited_refcnt == 0) -+ mon_stop(MON_RES); -+ } - memset((char *)rl, 0, sizeof(struct restrictlist)); - - rl->next = resfree; -diff -c xntpd/ntp_unixclock.c:1.1.1.27 xntpd/ntp_unixclock.c:3.29 -*** xntpd/ntp_unixclock.c:1.1.1.27 Wed Feb 2 18:17:00 1994 ---- xntpd/ntp_unixclock.c Wed Feb 2 18:17:01 1994 -*************** -*** 556,568 **** - #endif /* SOLARIS */ - - #ifdef SYS_LINUX -! /* XXX should look this up somewhere ! */ - static void - clock_parms(tickadj, tick) - U_LONG *tickadj; - U_LONG *tick; - { -! *tickadj = (U_LONG)1; -! *tick = (U_LONG)10000; - } - #endif /* SYS_LINUX */ ---- 556,573 ---- - #endif /* SOLARIS */ - - #ifdef SYS_LINUX -! #include <sys/timex.h> - static void - clock_parms(tickadj, tick) - U_LONG *tickadj; - U_LONG *tick; - { -! struct timex txc; -! -! txc.mode = 0; -! __adjtimex(&txc); -! -! *tickadj = (U_LONG)1; /* our adjtime is accurate */ -! *tick = (U_LONG)txc.tick; - } - #endif /* SYS_LINUX */ -diff -c xntpdc/ntpdc_ops.c:1.1.1.12 xntpdc/ntpdc_ops.c:3.16 -*** xntpdc/ntpdc_ops.c:1.1.1.12 Wed Feb 2 18:17:35 1994 ---- xntpdc/ntpdc_ops.c Wed Feb 2 18:17:36 1994 -*************** -*** 846,853 **** - if (!check1item(items, fp)) - return; - -! if (!checkitemsize(itemsize, sizeof(struct info_sys_stats))) - return; - - (void) fprintf(fp, "system uptime: %d\n", - ntohl(ss->timeup)); ---- 846,857 ---- - if (!check1item(items, fp)) - return; - -! if (itemsize != sizeof(struct info_sys_stats) && -! itemsize != sizeof(struct old_info_sys_stats)) { -! /* issue warning according to new structure size */ -! checkitemsize(itemsize, sizeof(struct info_sys_stats)); - return; -+ } - - (void) fprintf(fp, "system uptime: %d\n", - ntohl(ss->timeup)); -*************** -*** 869,874 **** ---- 873,883 ---- - ntohl(ss->badauth)); - (void) fprintf(fp, "wander hold downs: %d\n", - ntohl(ss->wanderhold)); -+ if (itemsize != sizeof(struct info_sys_stats)) -+ return; -+ -+ (void) fprintf(fp, "limitation rejects: %d\n", -+ ntohl(ss->limitrejected)); - } - - -*************** -*** 1243,1248 **** ---- 1252,1258 ---- - { "nopeer", RES_NOPEER }, - { "notrap", RES_NOTRAP }, - { "lptrap", RES_LPTRAP }, -+ { "limited", RES_LIMITED }, - { "", 0 } - }; - -*************** -*** 1463,1468 **** ---- 1473,1479 ---- - FILE *fp; - { - struct info_monitor *ml; -+ struct old_info_monitor *oml; - int items; - int itemsize; - int res; -*************** -*** 1476,1498 **** - if (!checkitems(items, fp)) - return; - -! if (!checkitemsize(itemsize, sizeof(struct info_monitor))) -! return; - -! (void) fprintf(fp, -! " address port count mode version lasttime firsttime\n"); -! (void) fprintf(fp, -! "=====================================================================\n"); -! while (items > 0) { -! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u\n", -! nntohost(ml->addr), -! ntohs(ml->port), -! ntohl(ml->count), -! ml->mode, ml->version, -! ntohl(ml->lasttime), -! ntohl(ml->firsttime)); -! ml++; -! items--; - } - } - ---- 1487,1535 ---- - if (!checkitems(items, fp)) - return; - -! if (itemsize == sizeof(struct info_monitor)) { - -! (void) fprintf(fp, -! " address port count mode version lastdrop lasttime firsttime\n"); -! (void) fprintf(fp, -! "===============================================================================\n"); -! while (items > 0) { -! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u %9u\n", -! nntohost(ml->addr), -! ntohs(ml->port), -! ntohl(ml->count), -! ml->mode, -! ml->version, -! ntohl(ml->lastdrop), -! ntohl(ml->lasttime), -! ntohl(ml->firsttime)); -! ml++; -! items--; -! } -! } else { -! if (itemsize != sizeof(struct old_info_monitor)) { -! /* issue warning according to new info_monitor size */ -! checkitemsize(itemsize, sizeof(struct info_monitor)); -! return; -! } -! -! oml = (struct old_info_monitor *)ml; -! (void) fprintf(fp, -! " address port count mode version lasttime firsttime\n"); -! (void) fprintf(fp, -! "======================================================================\n"); -! while (items > 0) { -! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u\n", -! nntohost(oml->addr), -! ntohs(oml->port), -! ntohl(oml->count), -! oml->mode, -! oml->version, -! ntohl(oml->lasttime), -! ntohl(oml->firsttime)); -! oml++; -! items--; -! } - } - } - diff --git a/usr.sbin/xntpd/patches/patch.11 b/usr.sbin/xntpd/patches/patch.11 deleted file mode 100644 index 8554d88..0000000 --- a/usr.sbin/xntpd/patches/patch.11 +++ /dev/null @@ -1,536 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa05908; 9 Feb 94 18:18 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa21398; - 9 Feb 94 18:13 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA29809 (5.65c-6/7.3v-FAU); Thu, 10 Feb 1994 00:12:50 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA11633 (5.65c-6/7.3m-FAU); Thu, 10 Feb 1994 00:12:46 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402092312.AA11633@faui43.informatik.uni-erlangen.de> -Subject: .zz Patches -To: Mills@udel.edu -Date: Thu, 10 Feb 94 0:12:41 MET -Cc: Frank.Kardel@informatik.uni-erlangen.de, - Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk -X-Mailer: ELM [version 2.3 PL11] - -Guys, - -Ok, here are some patches (including some WWVB cleanup 8-) relative -to the zz version. The KERNEL stuff in ntp_timex.h must still -be resolved. - -diff -c Makefile:1.1.1.11 Makefile:3.46 -*** Makefile:1.1.1.11 Wed Feb 9 23:54:57 1994 ---- Makefile Wed Feb 9 23:54:57 1994 -*************** -*** 162,168 **** - FRC: - - savebin: -! @test -d bin || mkdir bin - @echo - @echo '### saving $(TARGETS) $(OPTTARG) in bin' - -@for f in $(TARGETS) $(OPTTARG); \ ---- 162,168 ---- - FRC: - - savebin: -! -@test -d bin || mkdir bin - @echo - @echo '### saving $(TARGETS) $(OPTTARG) in bin' - -@for f in $(TARGETS) $(OPTTARG); \ -diff -c include/ntp_machine.h:1.1.1.11 include/ntp_machine.h:1.27 -*** include/ntp_machine.h:1.1.1.11 Wed Feb 9 23:56:27 1994 ---- include/ntp_machine.h Wed Feb 9 23:56:27 1994 -*************** -*** 274,280 **** - #ifndef STR_SYSTEM - #define STR_SYSTEM "UNIX/Ultrix" - #endif -- #define HAVE_TERMIOS - #endif - - /* ---- 274,279 ---- -diff -c lib/systime.c:1.1.1.11 lib/systime.c:1.9 -*** lib/systime.c:1.1.1.11 Wed Feb 9 23:57:45 1994 ---- lib/systime.c Wed Feb 9 23:57:45 1994 -*************** -*** 47,58 **** - * We also remember the clock precision we computed from the kernel in - * case someone asks us. - */ - LONG adj_precision; /* adj precision in usec (tickadj) */ - LONG tvu_maxslew; /* maximum adjust doable in 1<<CLOCK_ADJ sec (usec) */ - - U_LONG tsf_maxslew; /* same as above, as LONG format */ - -- LONG sys_clock; - l_fp sys_clock_offset; /* correction for current system time */ - - /* ---- 47,59 ---- - * We also remember the clock precision we computed from the kernel in - * case someone asks us. - */ -+ LONG sys_clock; -+ - LONG adj_precision; /* adj precision in usec (tickadj) */ - LONG tvu_maxslew; /* maximum adjust doable in 1<<CLOCK_ADJ sec (usec) */ - - U_LONG tsf_maxslew; /* same as above, as LONG format */ - - l_fp sys_clock_offset; /* correction for current system time */ - - /* -diff -c machines/sunos4.bsd:1.1.1.3 machines/sunos4.bsd:1.3 -*** machines/sunos4.bsd:1.1.1.3 Wed Feb 9 23:58:15 1994 ---- machines/sunos4.bsd Wed Feb 9 23:58:15 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_SUNOS4 - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -lkvm ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_SUNOS4 -DHAVE_BSD_TTYS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -lkvm -diff -c machines/ultrix.bsd:1.1.1.2 machines/ultrix.bsd:1.3 -*** machines/ultrix.bsd:1.1.1.2 Wed Feb 9 23:58:19 1994 ---- machines/ultrix.bsd Wed Feb 9 23:58:19 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_ULTRIX - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_ULTRIX -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/ultrix.posix:1.1.1.2 machines/ultrix.posix:1.3 -*** machines/ultrix.posix:1.1.1.2 Wed Feb 9 23:58:20 1994 ---- machines/ultrix.posix Wed Feb 9 23:58:20 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c parse/clk_dcf7000.c:1.1.1.8 parse/clk_dcf7000.c:3.11 -*** parse/clk_dcf7000.c:1.1.1.8 Wed Feb 9 23:58:51 1994 ---- parse/clk_dcf7000.c Wed Feb 9 23:58:51 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp - * -! * clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp - * - * ELV DCF7000 module - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.11 1994/02/02 17:45:14 kardel Exp - * -! * clk_dcf7000.c,v 3.11 1994/02/02 17:45:14 kardel Exp - * - * ELV DCF7000 module - * -*************** -*** 121,126 **** ---- 121,129 ---- - * History: - * - * clk_dcf7000.c,v -+ * Revision 3.11 1994/02/02 17:45:14 kardel -+ * rcs ids fixed -+ * - * Revision 3.6 1993/10/09 15:01:27 kardel - * file structure unified - * -diff -c parse/clk_meinberg.c:1.1.1.8 parse/clk_meinberg.c:3.13 -*** parse/clk_meinberg.c:1.1.1.8 Wed Feb 9 23:58:53 1994 ---- parse/clk_meinberg.c Wed Feb 9 23:58:53 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp - * -! * clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp - * - * Meinberg clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp - * -! * clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp - * - * Meinberg clock support - * -*************** -*** 414,419 **** ---- 414,422 ---- - * History: - * - * clk_meinberg.c,v -+ * Revision 3.13 1994/02/02 17:45:21 kardel -+ * rcs ids fixed -+ * - * Revision 3.11 1994/01/25 19:05:10 kardel - * 94/01/23 reconcilation - * -diff -c parse/clk_rawdcf.c:1.1.1.8 parse/clk_rawdcf.c:3.11 -*** parse/clk_rawdcf.c:1.1.1.8 Wed Feb 9 23:58:54 1994 ---- parse/clk_rawdcf.c Wed Feb 9 23:58:54 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp - * -! * clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp - * - * Raw DCF77 pulse clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp - * -! * clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp - * - * Raw DCF77 pulse clock support - * -*************** -*** 529,534 **** ---- 529,537 ---- - * History: - * - * clk_rawdcf.c,v -+ * Revision 3.11 1994/02/02 17:45:23 kardel -+ * rcs ids fixed -+ * - * Revision 3.9 1994/01/25 19:05:12 kardel - * 94/01/23 reconcilation - * -diff -c parse/clk_schmid.c:1.1.1.8 parse/clk_schmid.c:3.12 -*** parse/clk_schmid.c:1.1.1.8 Wed Feb 9 23:58:55 1994 ---- parse/clk_schmid.c Wed Feb 9 23:58:55 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp - * -! * clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp - * - * Schmid clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp - * -! * clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp - * - * Schmid clock support - * -*************** -*** 168,173 **** ---- 168,176 ---- - * History: - * - * clk_schmid.c,v -+ * Revision 3.12 1994/02/02 17:45:25 kardel -+ * rcs ids fixed -+ * - * Revision 3.10 1994/01/25 19:05:15 kardel - * 94/01/23 reconcilation - * -diff -c parse/clk_trimble.c:1.1.1.3 parse/clk_trimble.c:3.9 -*** parse/clk_trimble.c:1.1.1.3 Wed Feb 9 23:58:56 1994 ---- parse/clk_trimble.c Wed Feb 9 23:58:57 1994 -*************** -*** 1,6 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.7 1994/01/25 19:05:17 kardel Exp - * - * Trimble SV6 clock support - */ ---- 1,6 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.9 1994/02/02 17:45:27 kardel Exp - * - * Trimble SV6 clock support - */ -*************** -*** 106,111 **** ---- 106,114 ---- - * History: - * - * clk_trimble.c,v -+ * Revision 3.9 1994/02/02 17:45:27 kardel -+ * rcs ids fixed -+ * - * Revision 3.7 1994/01/25 19:05:17 kardel - * 94/01/23 reconcilation - * -diff -c parse/parse.c:1.1.1.8 parse/parse.c:3.21 -*** parse/parse.c:1.1.1.8 Wed Feb 9 23:58:59 1994 ---- parse/parse.c Wed Feb 9 23:59:00 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp - * -! * parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp - * - * Parser module for reference clock - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp - * -! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp - * - * Parser module for reference clock - * -*************** -*** 1148,1153 **** ---- 1148,1156 ---- - * History: - * - * parse.c,v -+ * Revision 3.21 1994/02/02 17:45:30 kardel -+ * rcs ids fixed -+ * - * Revision 3.19 1994/01/25 19:05:20 kardel - * 94/01/23 reconcilation - * -diff -c parse/parse_conf.c:1.1.1.8 parse/parse_conf.c:3.15 -*** parse/parse_conf.c:1.1.1.8 Wed Feb 9 23:59:01 1994 ---- parse/parse_conf.c Wed Feb 9 23:59:01 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp - * -! * parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp - * - * Parser configuration module for reference clocks - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.15 1994/02/02 17:45:32 kardel Exp - * -! * parse_conf.c,v 3.15 1994/02/02 17:45:32 kardel Exp - * - * Parser configuration module for reference clocks - * -*************** -*** 81,86 **** ---- 81,89 ---- - * History: - * - * parse_conf.c,v -+ * Revision 3.15 1994/02/02 17:45:32 kardel -+ * rcs ids fixed -+ * - * Revision 3.13 1994/01/25 19:05:23 kardel - * 94/01/23 reconcilation - * -diff -c parse/parsesolaris.c:1.1.1.6 parse/parsesolaris.c:3.12 -*** parse/parsesolaris.c:1.1.1.6 Wed Feb 9 23:59:02 1994 ---- parse/parsesolaris.c Wed Feb 9 23:59:02 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp - * -! * parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp - * -! * parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be -*************** -*** 139,145 **** - /*ARGSUSED*/ - int _init(void) - { -! static char revision[] = "3.9"; - char *s, *S, *t; - - /* ---- 139,145 ---- - /*ARGSUSED*/ - int _init(void) - { -! static char revision[] = "3.12"; - char *s, *S, *t; - - /* -*************** -*** 1179,1184 **** ---- 1179,1187 ---- - * History: - * - * parsesolaris.c,v -+ * Revision 3.12 1994/02/02 17:45:35 kardel -+ * rcs ids fixed -+ * - * Revision 3.9 1994/01/25 19:05:26 kardel - * 94/01/23 reconcilation - * -diff -c parse/parsestreams.c:1.1.1.7 parse/parsestreams.c:3.14 -*** parse/parsestreams.c:1.1.1.7 Wed Feb 9 23:59:03 1994 ---- parse/parsestreams.c Wed Feb 9 23:59:04 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp - * -! * parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp - * -! * parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) -*************** -*** 1258,1263 **** ---- 1258,1266 ---- - * History: - * - * parsestreams.c,v -+ * Revision 3.14 1994/02/02 17:45:38 kardel -+ * rcs ids fixed -+ * - * Revision 3.12 1994/01/25 19:05:30 kardel - * 94/01/23 reconcilation - * -diff -c xntpd/ntp_proto.c:1.1.1.20 xntpd/ntp_proto.c:3.22 -*** xntpd/ntp_proto.c:1.1.1.20 Thu Feb 10 00:00:36 1994 ---- xntpd/ntp_proto.c Thu Feb 10 00:00:36 1994 -*************** -*** 25,31 **** - l_fp sys_refskew; /* accumulated skew since last update */ - struct peer *sys_peer; /* our current peer */ - u_char sys_poll; /* log2 of desired system poll interval */ -! LONG sys_clock; /* second part of current time */ - LONG sys_lastselect; /* sys_clock at last synch-dist update */ - - /* ---- 25,31 ---- - l_fp sys_refskew; /* accumulated skew since last update */ - struct peer *sys_peer; /* our current peer */ - u_char sys_poll; /* log2 of desired system poll interval */ -! extern LONG sys_clock; /* second part of current time - now in systime.c */ - LONG sys_lastselect; /* sys_clock at last synch-dist update */ - - /* -diff -c xntpd/ntpd.c:1.1.1.28 xntpd/ntpd.c:3.32 -*** xntpd/ntpd.c:1.1.1.28 Thu Feb 10 00:00:43 1994 ---- xntpd/ntpd.c Thu Feb 10 00:00:43 1994 -*************** -*** 139,145 **** - (void) dup2(0, 1); - (void) dup2(0, 2); - #ifdef NTP_POSIX_SOURCE -! #if defined(SOLARIS) || defined(SYS_PTX) || defined(SYS_AUX3) || defined(SYS_AIX) - (void) setsid(); - #else - (void) setpgid(0, 0); ---- 139,145 ---- - (void) dup2(0, 1); - (void) dup2(0, 2); - #ifdef NTP_POSIX_SOURCE -! #if defined(SOLARIS) || defined(SYS_PTX) || defined(SYS_AUX3) || defined(SYS_AIX) || defined(SYS_ULTRIX) - (void) setsid(); - #else - (void) setpgid(0, 0); -diff -c xntpd/refclock_parse.c:1.1.1.10 xntpd/refclock_parse.c:3.47 -*** xntpd/refclock_parse.c:1.1.1.10 Thu Feb 10 00:00:54 1994 ---- xntpd/refclock_parse.c Thu Feb 10 00:00:54 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp - * -! * refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp - * - * generic reference clock driver for receivers - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp - * -! * refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp - * - * generic reference clock driver for receivers - * -*************** -*** 3396,3401 **** ---- 3396,3404 ---- - * History: - * - * refclock_parse.c,v -+ * Revision 3.47 1994/02/02 17:44:30 kardel -+ * rcs ids fixed -+ * - * Revision 3.45 1994/01/25 19:06:27 kardel - * 94/01/23 reconcilation - * - --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.12 b/usr.sbin/xntpd/patches/patch.12 deleted file mode 100644 index 9d7db0f..0000000 --- a/usr.sbin/xntpd/patches/patch.12 +++ /dev/null @@ -1,66 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa16020; 11 Feb 94 10:28 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27338; - 11 Feb 94 10:12 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA00715 (5.65c-6/7.3v-FAU); Fri, 11 Feb 1994 14:26:34 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA24390 (5.65c-6/7.3m-FAU); Fri, 11 Feb 1994 14:26:31 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402111326.AA24390@faui43.informatik.uni-erlangen.de> -Subject: Re: Beep, beep, beep -To: Mills@udel.edu -Date: Fri, 11 Feb 94 14:26:25 MET -Cc: Frank.Kardel@informatik.uni-erlangen.de, - Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk -In-Reply-To: <9402101138.aa10259@huey.udel.edu>; from "Mills@udel.edu" at Feb 10, 94 11:38 am -X-Mailer: ELM [version 2.3 PL11] - - -> Frank, - -> In the latest xntp3.3zz.tar.Z the Ultrix kernel finds joy of clock. -> (Whew). - -Ok, I just dug out an old allocation failure in xntpdc. While -reading respones the input buffer might be realloced(and MOVED) without -telling the rest of the system. This was fatal when stdio needed a -buffer for non terminal operation. Net result was confused output. - -Ok, here ist the patch: - -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/xntpdc/ntpdc.c,v -retrieving revision 3.17 -diff -c -r3.17 xntpdc/ntpdc.c -*** xntpdc/ntpdc.c:3.17 1994/01/28 14:07:13 ---- xntpdc/ntpdc.c 1994/02/11 13:20:56 -*************** -*** 598,605 **** - /* - * So far, so good. Copy this data into the output array. - */ -! if ((datap + datasize) > (pktdata + pktdatasize)) - growpktdata(); - memmove(datap, (char *)rpkt.data, datasize); - datap += datasize; - if (firstpkt) { ---- 598,609 ---- - /* - * So far, so good. Copy this data into the output array. - */ -! if ((datap + datasize) > (pktdata + pktdatasize)) { -! int offset = datap - pktdata; - growpktdata(); -+ *rdata = pktdata; /* might have been realloced ! */ -+ datap = pktdata + offset; -+ } - memmove(datap, (char *)rpkt.data, datasize); - datap += datasize; - if (firstpkt) { - --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.13 b/usr.sbin/xntpd/patches/patch.13 deleted file mode 100644 index 17363e2..0000000 --- a/usr.sbin/xntpd/patches/patch.13 +++ /dev/null @@ -1,68 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id af16153; 14 Feb 94 7:27 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27498; - 13 Feb 94 13:23 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA22387 (5.65c-6/7.3v-FAU); Sun, 13 Feb 1994 19:22:59 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA27117 (5.65c-6/7.3m-FAU); Sun, 13 Feb 1994 19:22:57 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402131822.AA27117@faui43.informatik.uni-erlangen.de> -Subject: compilation setup for solaris -To: mills@udel.edu -Date: Sun, 13 Feb 94 19:22:53 MET -X-Mailer: ELM [version 2.3 PL11] - -Hi, Dave. - -Just to remove some compilation noise in solaris (NTP_POSIX_SOURCE -redefined): - -For 3.3e: -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/machines/sunos5.1,v -retrieving revision 1.4 -diff -c -r1.4 machines/sunos5.1 -*** machines/sunos5.1:1.4 1994/02/01 23:30:54 ---- machines/sunos5.1 1994/02/13 18:16:24 -*************** -*** 1,6 **** - RANLIB= : - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DNTP_POSIX_SOURCE - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= : - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/machines/sunos5.2,v -retrieving revision 1.4 -diff -c -r1.4 machines/sunos5.2 -*** machines/sunos5.2:1.4 1994/02/01 23:30:56 ---- machines/sunos5.2 1994/02/13 18:16:27 -*************** -*** 1,6 **** - RANLIB= : - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE -DNTP_POSIX_SOURCE - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= : - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.14 b/usr.sbin/xntpd/patches/patch.14 deleted file mode 100644 index 775f9da..0000000 --- a/usr.sbin/xntpd/patches/patch.14 +++ /dev/null @@ -1,116 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa16187; 14 Feb 94 7:27 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27096; - 13 Feb 94 13:04 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA21590 (5.65c-6/7.3v-FAU); Sun, 13 Feb 1994 19:04:48 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA26947 (5.65c-6/7.3m-FAU); Sun, 13 Feb 1994 19:04:46 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402131804.AA26947@faui43.informatik.uni-erlangen.de> -Subject: patches for 3.3e -To: mills@udel.edu -Date: Sun, 13 Feb 94 19:04:42 MET -X-Mailer: ELM [version 2.3 PL11] - -Hi, Dave. - -Here is something to make Sequent PTX happier. -I also changed the version number from 3.3zz to 3.3e. -The patch is relative to the current 3.3e version. - -diff -c Makefile:1.1.1.12 Makefile:3.47 -*** Makefile:1.1.1.12 Sun Feb 13 18:53:06 1994 ---- Makefile Sun Feb 13 18:53:07 1994 -*************** -*** 144,150 **** - @echo '###' creating XNTPRES utility - @cd xntpres && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" - -! util/tickadj: util/Makefile FRC - @echo - @echo '###' creating TICKADJ utility - @cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ---- 144,150 ---- - @echo '###' creating XNTPRES utility - @cd xntpres && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" - -! util/tickadj: util/Makefile lib/libntp.a FRC - @echo - @echo '###' creating TICKADJ utility - @cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" -diff -c VERSION:1.1.1.7 VERSION:3.12 -*** VERSION:1.1.1.7 Sun Feb 13 18:53:10 1994 ---- VERSION Sun Feb 13 18:53:10 1994 -*************** -*** 1 **** -! version=3.3zz (beta) ---- 1 ---- -! version=3.3e (beta) -diff -c authstuff/Makefile.tmpl:1.1.1.9 authstuff/Makefile.tmpl:3.12 -*** authstuff/Makefile.tmpl:1.1.1.9 Sun Feb 13 18:53:18 1994 ---- authstuff/Makefile.tmpl Sun Feb 13 18:53:18 1994 -*************** -*** 38,50 **** - all: $(PROGRAM) - - authcert: $(CRTOBJS) $(LIB) -! $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB) - - authspeed: $(SPDOBJS) $(LIB) - $(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB) - - keyparity: $(PAROBJS) $(LIB) -! $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB) - - makeIPFP: $(IFPOBJS) - $(CC) $(COPTS) -o $@ $(IFPOBJS) ---- 38,50 ---- - all: $(PROGRAM) - - authcert: $(CRTOBJS) $(LIB) -! $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB) $(COMPAT) $(RESLIB) - - authspeed: $(SPDOBJS) $(LIB) - $(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB) - - keyparity: $(PAROBJS) $(LIB) -! $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB) $(COMPAT) $(RESLIB) - - makeIPFP: $(IFPOBJS) - $(CC) $(COPTS) -o $@ $(IFPOBJS) -*************** -*** 68,74 **** - $(CC) $(COPTS) -o $@ $(UNXBJS) - - md5: $(MD5OBJS) -! $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB) - - tags: - ctags *.c *.h ---- 68,74 ---- - $(CC) $(COPTS) -o $@ $(UNXBJS) - - md5: $(MD5OBJS) -! $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB) $(COMPAT) $(RESLIB) - - tags: - ctags *.c *.h -diff -c include/ntp_machine.h:1.1.1.12 include/ntp_machine.h:1.28 -*** include/ntp_machine.h:1.1.1.12 Sun Feb 13 18:54:32 1994 ---- include/ntp_machine.h Sun Feb 13 18:54:32 1994 -*************** -*** 457,462 **** ---- 457,463 ---- - #define HAVE_READKMEM - #define UDP_WILDCARD_DELIVERY - #define NTP_POSIX_SOURCE -+ #define memmove(x, y, z) memcpy(x, y, z) - struct timezone { int __0; }; /* unused placebo */ - /* - * no comment !@! --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.15 b/usr.sbin/xntpd/patches/patch.15 deleted file mode 100644 index 1ef861d..0000000 --- a/usr.sbin/xntpd/patches/patch.15 +++ /dev/null @@ -1,39 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aq16153; 14 Feb 94 7:28 EST -Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa24615; - 14 Feb 94 6:34 EST -Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #1) - id m0pW1Zk-000C8UC; Mon, 14 Feb 94 06:34 EST -Message-Id: <m0pW1Zk-000C8UC@jagubox.gsfc.nasa.gov> -From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov> -Subject: xntp 3.3e (or is that zz ;) ) -To: Mills@udel.edu -Date: Mon, 14 Feb 1994 06:34:52 -0500 (EST) -Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov> -In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm -X-Mailer: ELM [version 2.4 PL23] -Content-Type: text -Content-Length: 621 - -This latest version requires the NTP_NEED_BOPS define in ntp_machine.h for -A/UX: - -*** ntp_machine.h.orig Mon Feb 14 06:34:34 1994 ---- ntp_machine.h Mon Feb 14 06:20:57 1994 -*************** -*** 299,304 **** ---- 299,305 ---- - #define HAVE_BSD_TTYS - #define LOG_NTP LOG_LOCAL1 - #define HAVE_SIGNALED_IO -+ #define NTP_NEED_BOPS - #ifndef STR_SYSTEM - #define STR_SYSTEM "UNIX/AUX" - #endif --- -#include <std/disclaimer.h> - Jim Jagielski | - jim@jagubox.gsfc.nasa.gov | "Ahh... west and wewaxation at wast" - NASA/GSFC, Code 734.4 | Elmer Fudd - Greenbelt, MD 20771 | - diff --git a/usr.sbin/xntpd/patches/patch.16 b/usr.sbin/xntpd/patches/patch.16 deleted file mode 100644 index 909f0c7..0000000 --- a/usr.sbin/xntpd/patches/patch.16 +++ /dev/null @@ -1,267 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa25712; 15 Feb 94 17:54 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa18345; - 15 Feb 94 17:51 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA15109 (5.65c-6/7.3v-FAU); Tue, 15 Feb 1994 23:50:53 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA17375 (5.65c-6/7.3m-FAU); Tue, 15 Feb 1994 23:50:51 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402152250.AA17375@faui43.informatik.uni-erlangen.de> -Subject: fixed for parse kernel stuff... -To: mills@udel.edu -Date: Tue, 15 Feb 94 23:50:47 MET -X-Mailer: ELM [version 2.3 PL11] - - -Hi, Dave ! - -Here are some fixes for the PARSE kernel modules. Basically they -fix a memory leak on an open error condition and pronounce the -Solaris 2.x stream module MT safe. - -Well, actually I should put something for you to eat here 8-). - -RCS file: /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v -retrieving revision 1.1.1.7 -diff -c -r1.1.1.7 parsesolaris.c -*** parse/parsesolaris.c:1.1.1.7 1994/02/12 09:53:42 ---- parse/parsesolaris.c 1994/02/15 22:20:51 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp - * -! * parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp - * -! * parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be -*************** -*** 19,25 **** - */ - - #ifndef lint -! static char rcsid[] = "parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp"; - #endif - - /* ---- 19,25 ---- - */ - - #ifndef lint -! static char rcsid[] = "parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp"; - #endif - - /* -*************** -*** 65,71 **** - { - "parse", /* module name */ - &parseinfo, /* module information */ -! D_NEW, /* not clean yet */ - /* lock ptr */ - }; - ---- 65,71 ---- - { - "parse", /* module name */ - &parseinfo, /* module information */ -! D_NEW|D_MP|D_MTQPAIR, /* exclusive for q pair */ - /* lock ptr */ - }; - -*************** -*** 139,145 **** - /*ARGSUSED*/ - int _init(void) - { -! static char revision[] = "3.12"; - char *s, *S, *t; - - /* ---- 139,145 ---- - /*ARGSUSED*/ - int _init(void) - { -! static char revision[] = "3.15"; - char *s, *S, *t; - - /* -*************** -*** 413,418 **** ---- 413,420 ---- - parse->parse_ppsclockev.tv.tv_usec = 0; - parse->parse_ppsclockev.serial = 0; - -+ qprocson(q); -+ - parseprintf(DD_OPEN,("parse: OPEN - initializing io subsystem q=%x\n", q)); - - if (!parse_ioinit(&parse->parse_io)) -*************** -*** 420,425 **** ---- 422,429 ---- - /* - * ok guys - beat it - */ -+ qprocsoff(q); -+ - kmem_free((caddr_t)parse, sizeof(parsestream_t)); - - parsebusy--; -*************** -*** 441,447 **** - */ - if (!notice) - { -! printf("%s: Copyright (c) 1991-1993, Frank Kardel\n", modlstrmod.strmod_linkinfo); - notice = 1; - } - ---- 445,451 ---- - */ - if (!notice) - { -! printf("%s: Copyright (c) 1991-1994, Frank Kardel\n", modlstrmod.strmod_linkinfo); - notice = 1; - } - -*************** -*** 449,455 **** ---- 453,464 ---- - } - else - { -+ qprocsoff(q); -+ -+ kmem_free((caddr_t)parse, sizeof(parsestream_t)); -+ - parsebusy--; -+ - return EIO; - } - } -*************** -*** 462,467 **** ---- 471,478 ---- - - parseprintf(DD_CLOSE,("parse: CLOSE\n")); - -+ qprocsoff(q); -+ - s = splhigh(); - - if (parse->parse_dqueue) -*************** -*** 1178,1184 **** - /* - * History: - * -! * parsesolaris.c,v - * Revision 3.12 1994/02/02 17:45:35 kardel - * rcs ids fixed - * ---- 1189,1204 ---- - /* - * History: - * -! * parsesolaris.c,v -! * Revision 3.15 1994/02/15 22:20:51 kardel -! * rcsid fixed -! * -! * Revision 3.14 1994/02/15 22:06:04 kardel -! * added qprocsx & flags for MT capability -! * -! * Revision 3.13 1994/02/13 19:16:47 kardel -! * updated verbose Copyright message -! * - * Revision 3.12 1994/02/02 17:45:35 kardel - * rcs ids fixed - * -RCS file: /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v -retrieving revision 1.1.1.8 -diff -c -r1.1.1.8 parsestreams.c -*** parse/parsestreams.c:1.1.1.8 1994/02/12 09:53:45 ---- parse/parsestreams.c 1994/02/15 22:39:50 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp - * -! * parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp - * -! * parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) -*************** -*** 527,533 **** - */ - if (!notice) - { -! printf("%s: Copyright (c) 1991-1993, Frank Kardel\n", parsesync_vd.Drv_name); - notice = 1; - } - ---- 527,533 ---- - */ - if (!notice) - { -! printf("%s: Copyright (c) 1991-1994, Frank Kardel\n", parsesync_vd.Drv_name); - notice = 1; - } - -*************** -*** 535,540 **** ---- 535,542 ---- - } - else - { -+ kmem_free((caddr_t)parse, sizeof(parsestream_t)); -+ - #ifdef VDDRV - parsebusy--; - #endif -*************** -*** 1257,1263 **** - /* - * History: - * -! * parsestreams.c,v - * Revision 3.14 1994/02/02 17:45:38 kardel - * rcs ids fixed - * ---- 1259,1271 ---- - /* - * History: - * -! * parsestreams.c,v -! * Revision 3.16 1994/02/15 22:39:50 kardel -! * memory leak on open failure closed -! * -! * Revision 3.15 1994/02/13 19:16:50 kardel -! * updated verbose Copyright message -! * - * Revision 3.14 1994/02/02 17:45:38 kardel - * rcs ids fixed - * - --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.17 b/usr.sbin/xntpd/patches/patch.17 deleted file mode 100644 index f98f754..0000000 --- a/usr.sbin/xntpd/patches/patch.17 +++ /dev/null @@ -1,50 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa00480; 16 Feb 94 12:17 EST -Received: from quack.kfu.com by louie.udel.edu id aa24950; 16 Feb 94 12:12 EST -Received: by quack.kfu.com id AA03532 - (5.65c8/IDA-1.4.4 for mills@udel.edu); Wed, 16 Feb 1994 09:12:04 -0800 -Date: Wed, 16 Feb 1994 09:12:04 -0800 -From: Nick Sayer <nsayer@quack.kfu.com> -Message-Id: <199402161712.AA03532@quack.kfu.com> -To: mills@udel.edu -Subject: CHU debug patch - -I don't know what you think about this, but I thought I'd pass it -along. I'm sorry I don't have a proper 'patch' format patch, but -it should be aparent from the context where this goes in refclock_chu.c: - - return; - } - - /* - * Get the clock this applies to and a pointer to the data - */ - chu = (struct chuunit *)rbufp->recv_srcclock; - chuc = (struct chucode *)&rbufp->recv_space; - chu->responses++; - chu->lastupdate = current_time; - - /* - * Just for fun, we can debug the whole frame if - * we want. - */ - -#ifndef NO_CHU_DEBUG - syslog(LOG_DEBUG,"CHU %s packet:",(chuc->chutype==CHU_YEAR)? - "year":"time"); - for (i=0;i<NCHUCHARS;i++) - { - char c[64]; - - sprintf(c,"%c%c %s",hexstring[chuc->codechars[i]&0xf], - hexstring[chuc->codechars[i]>>4], - ctime(&(chuc->codetimes[i].tv_sec))); - c[strlen(c)-1]=0; /* ctime() adds a damn \n */ - syslog(LOG_DEBUG,"%s .%06d",c,chuc->codetimes[i].tv_usec); - } -#endif - - /* - * At this point we're assured that both halves of the - * data match because of what the kernel has done. - diff --git a/usr.sbin/xntpd/patches/patch.18 b/usr.sbin/xntpd/patches/patch.18 deleted file mode 100644 index e81eb62..0000000 --- a/usr.sbin/xntpd/patches/patch.18 +++ /dev/null @@ -1,99 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa00679; 16 Feb 94 13:00 EST -Received: from spatula.csv.warwick.ac.uk by louie.udel.edu id aa26092; - 16 Feb 94 12:48 EST -Date: Wed, 16 Feb 1994 17:47:50 GMT -From: Ian Dickinson <cudep@csv.warwick.ac.uk> -Message-Id: <7051.199402161747@spatula.csv.warwick.ac.uk> -Received: from localhost by spatula.csv.warwick.ac.uk - id RAA07051; Wed, 16 Feb 1994 17:47:50 GMT -In-Reply-To: Mills@udel.edu - "Re: xntp sunos5 config" (Feb 16, 10:50am) -X-Mailer: Mail User's Shell (7.2.4 2/2/92) -To: Mills@udel.edu -Subject: Re: xntp sunos5 config -MIME-Version: 1.0 -Content-Type: text/plain; charset=US-ASCII - -On Feb 16, 10:50am, Mills@udel.edu wrote: -} Subject: Re: xntp sunos5 config - -BTW, 3.3f seems to work fine on an SC2000 sunos5.3 (including the patch below) - -> Your message did not say in which file sunos5.1 or sunos5.2 or both -> you wanted the -DLOCK_PROCESS. I'll wait for your patches. - -I've never done any heavy work on a sunos5.1 machine, so I can't remember if -plock() exists there. I *think* sunso5.2 will work with it. -Perhaps it's time to create a sunos5.3 file which has -DLOCK_PROCESS and is -otherwise identical to sunos5.2, though this is getting silly for supposedly -a single SVR4-based operating system. - -As far as I'm aware, the choice between plock() and mlockall() can be done -with feature testing and doesn't need a seperate #define. - -This patch applies to 3.3b and 3.3f (with line fuzz). -I'm certainly not sure this is the best way to do this, but it does work here. -Perhaps it's worth asking around how widely this works in sunos5.x - -*** 1.1 1994/02/01 17:16:13 ---- xntpd/ntpd.c 1994/02/16 16:32:47 -*************** -*** 28,35 **** ---- 28,39 ---- - #include "ntp_stdlib.h" - - #ifdef LOCK_PROCESS -+ #ifdef SYS_SOLARIS -+ #include <sys/mman.h> -+ #else - #include <sys/lock.h> - #endif -+ #endif - - /* - * Signals we catch for debugging. If not debugging we ignore them. -*************** -*** 218,229 **** - if (rtprio(0, 120) < 0) - syslog(LOG_ERR, "rtprio() error: %m"); - #else -! #if defined(PROCLOCK) && defined(LOCK_PROCESS) - /* - * lock the process into memory - */ - if (plock(PROCLOCK) < 0) - syslog(LOG_ERR, "plock(): %m"); - #endif - #if defined(NTPD_PRIO) && NTPD_PRIO != 0 - /* ---- 222,243 ---- - if (rtprio(0, 120) < 0) - syslog(LOG_ERR, "rtprio() error: %m"); - #else -! #if defined(LOCK_PROCESS) -! #if defined(MCL_CURRENT) && defined(MCL_FUTURE) -! /* -! * lock the process into memory -! */ -! if (mlockall(MCL_CURRENT|MCL_FUTURE) < 0) -! syslog(LOG_ERR, "mlockall(): %m"); -! #else -! #if defined(PROCLOCK) - /* - * lock the process into memory - */ - if (plock(PROCLOCK) < 0) - syslog(LOG_ERR, "plock(): %m"); -+ #endif -+ #endif - #endif - #if defined(NTPD_PRIO) && NTPD_PRIO != 0 - /* - - - -Cheers, --- -Ian - diff --git a/usr.sbin/xntpd/patches/patch.19 b/usr.sbin/xntpd/patches/patch.19 deleted file mode 100644 index 396f16f..0000000 --- a/usr.sbin/xntpd/patches/patch.19 +++ /dev/null @@ -1,599 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa08047; 17 Feb 94 15:26 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa17403; - 17 Feb 94 15:15 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA04056 (5.65c-6/7.3v-FAU); Thu, 17 Feb 1994 21:14:43 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA29721 (5.65c-6/7.3m-FAU); Thu, 17 Feb 1994 21:14:39 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402172014.AA29721@faui43.informatik.uni-erlangen.de> -Subject: Re: Beep, beep, beep -To: Mills@udel.edu -Date: Thu, 17 Feb 94 21:14:33 MET -Cc: Frank.Kardel@informatik.uni-erlangen.de, - Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk -In-Reply-To: <9402171155.aa07032@huey.udel.edu>; from "Mills@udel.edu" at Feb 17, 94 11:55 am -X-Mailer: ELM [version 2.3 PL11] - - -> Guys, - -> Trouble with HAVE_BSD_TTYS on a VAX - -> ### creating NTP library -> cc -O -DDES -DXNTP_LITTLE_ENDIAN -DSYS_VAX -DDEBUG -DREFCLOCK -I../include -c atoint.c -> "../include/ntp_machine.h", line 570: syntax error -Yupp, nit TTY define set. - -> "atoint.c", line 12: redeclaration of ival -> "atoint.c", line 13: syntax error -> ... - -Well, I guess the trouble is more that none of the tty defines was -defined. For the sake of completeness i have added the tty defines to -(hopefully) all machine/* files. Some configurations were unknown to -me so I assumed HAVE_BSD_TTYS. Would be nice if someone could run -the whole suite 8-). -I have put the tty defines into the machine files so that the -refconf scripts can pick up the define without having to run the -preprocessor to dig out the configuration. -Hope this works. - -diff -c include/ntp_machine.h:1.1.1.13 include/ntp_machine.h:1.30 -*** include/ntp_machine.h:1.1.1.13 Thu Feb 17 20:17:59 1994 ---- include/ntp_machine.h Thu Feb 17 20:17:59 1994 -*************** -*** 44,54 **** - WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if - NTP_POSIX_SOURCE was set but can't. The - posix tty driver is too restrictive on most systems. -! It defined if you define STREAMS. - - HAVE_SYSV_TTYS - Use SYSV termio.h - HAVE_BSD_TTYS - Use BSD stty.h -- HAVE_TERMIOS - Use POSIX termios.h - - THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about - kernel mucking. ---- 44,59 ---- - WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if - NTP_POSIX_SOURCE was set but can't. The - posix tty driver is too restrictive on most systems. -! It is defined if you define STREAMS. - -+ We do not put these defines in the ntp_machine.h as some systems -+ offer multiple interfaces and refclock configuration likes to -+ peek into the configuration defines for tty model restrictions. -+ Thus all tty definitions should be in the files in the machines directory. -+ -+ HAVE_TERMIOS - Use POSIX termios.h - HAVE_SYSV_TTYS - Use SYSV termio.h - HAVE_BSD_TTYS - Use BSD stty.h - - THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about - kernel mucking. -*************** -*** 296,302 **** - #define FORCE_NTPDATE_STEP - #define RETSIGTYPE void - #define HAVE_ATT_SETPGRP -- #define HAVE_BSD_TTYS - #define LOG_NTP LOG_LOCAL1 - #define HAVE_SIGNALED_IO - #define NTP_NEED_BOPS ---- 301,306 ---- -*************** -*** 352,359 **** - #ifndef STR_SYSTEM - #define STR_SYSTEM "UNIX/BSDI" - #endif -- #define HAVE_BSD_TTYS -- #define HAVE_TERMIOS - #endif - - /* ---- 356,361 ---- -*************** -*** 441,449 **** - */ - #if defined(SYS_PTX) - #define NO_SIGNED_CHAR_DECL -- #ifndef HAVE_SYSV_TTYS -- #define HAVE_SYSV_TTYS -- #endif - #define STREAMS_TLI - #define HAVE_ATT_SETPGRP - #define HAVE_SIGNALED_IO ---- 443,448 ---- -*************** -*** 528,534 **** - #define HAVE_BSD_NICE - #define NOKMEM - #define HAVE_SIGNALED_IO -- #define HAVE_BSD_TTYS - #define NTP_SYSCALLS_STD - #define USE_PROTOTYPES - #define UDP_WILDCARD_DELIVERY ---- 527,532 ---- -*************** -*** 565,570 **** ---- 563,582 ---- - && !defined(HAVE_NO_NICE) - ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines - #endif -+ -+ /* -+ * use only one tty model - no use in initialising -+ * a tty in three ways -+ * HAVE_TERMIOS is preferred over HAVE_SYSV_TTYS over HAVE_BSD_TTYS -+ */ -+ #ifdef HAVE_TERMIOS -+ #undef HAVE_BSD_TTYS -+ #undef HAVE_SYSV_TTYS -+ #endif -+ -+ #ifdef HAVE_SYSV_TTYS -+ #undef HAVE_BSD_TTYS -+ #endif - - #if !defined(HAVE_SYSV_TTYS) \ - && !defined(HAVE_BSD_TTYS) \ -diff -c machines/aux2:1.1.1.2 machines/aux2:1.4 -*** machines/aux2:1.1.1.2 Thu Feb 17 20:19:50 1994 ---- machines/aux2 Thu Feb 17 20:19:50 1994 -*************** -*** 1,6 **** - RANLIB= true # ar does the work of ranlib under System V - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_AUX2 - AUTHDEFS= -DDES -DMD5 -DFASTMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= true # ar does the work of ranlib under System V - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_AUX2 -DHAVE_BSD_TTYS - AUTHDEFS= -DDES -DMD5 -DFASTMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/aux3:1.1.1.2 machines/aux3:1.4 -*** machines/aux3:1.1.1.2 Thu Feb 17 20:19:52 1994 ---- machines/aux3 Thu Feb 17 20:19:52 1994 -*************** -*** 1,6 **** - RANLIB= true # ar does the work of ranlib under System V - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_AUX3 - AUTHDEFS= -DDES -DMD5 -DFASTMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= true # ar does the work of ranlib under System V - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_AUX3 -DHAVE_BSD_TTYS - AUTHDEFS= -DDES -DMD5 -DFASTMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/bsdi:1.1.1.4 machines/bsdi:1.6 -*** machines/bsdi:1.1.1.4 Thu Feb 17 20:19:53 1994 ---- machines/bsdi Thu Feb 17 20:19:53 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_BSDI - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -lkvm ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_BSDI -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -lkvm -diff -c machines/convexos10:1.1.1.2 machines/convexos10:1.3 -*** machines/convexos10:1.1.1.2 Thu Feb 17 20:19:54 1994 ---- machines/convexos10 Thu Feb 17 20:19:54 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_CONVEXOS10 - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - RESLIB= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_CONVEXOS10 -DHAVE_BSD_TTYS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - RESLIB= -diff -c machines/convexos9:1.1.1.2 machines/convexos9:1.3 -*** machines/convexos9:1.1.1.2 Thu Feb 17 20:19:55 1994 ---- machines/convexos9 Thu Feb 17 20:19:56 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_CONVEXOS9 - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - RESLIB= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_CONVEXOS9 -DHAVE_BSD_TTYS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - RESLIB= -diff -c machines/decosf1:1.1.1.2 machines/decosf1:1.4 -*** machines/decosf1:1.1.1.2 Thu Feb 17 20:19:57 1994 ---- machines/decosf1 Thu Feb 17 20:19:57 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSTREAM -DSYS_DECOSF1 - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSTREAM -DSYS_DECOSF1 -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/dell.svr4:1.1.1.1 machines/dell.svr4:1.2 -*** machines/dell.svr4:1.1.1.1 Thu Feb 17 20:19:58 1994 ---- machines/dell.svr4 Thu Feb 17 20:19:58 1994 -*************** -*** 1,7 **** - SHELL= /bin/sh - RANLIB= ls # ar does the work of ranlib under System V - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_SVR4 - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,7 ---- - SHELL= /bin/sh - RANLIB= ls # ar does the work of ranlib under System V - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_SVR4 -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/domainos:1.1.1.1 machines/domainos:1.2 -*** machines/domainos:1.1.1.1 Thu Feb 17 20:19:59 1994 ---- machines/domainos Thu Feb 17 20:19:59 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE -DHAVE_BSD_TTYS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/i386:1.1.1.2 machines/i386:1.3 -*** machines/i386:1.1.1.2 Thu Feb 17 20:20:04 1994 ---- machines/i386 Thu Feb 17 20:20:05 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_I386 - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_I386 -DHAVE_BSD_TTYS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/i386svr4:1.1.1.3 machines/i386svr4:1.4 -*** machines/i386svr4:1.1.1.3 Thu Feb 17 20:20:05 1994 ---- machines/i386svr4 Thu Feb 17 20:20:05 1994 -*************** -*** 1,7 **** - SHELL= /bin/sh - RANLIB= ls # ar does the work of ranlib under System V - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_SVR4 -DSTREAMS_TLI - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,7 ---- - SHELL= /bin/sh - RANLIB= ls # ar does the work of ranlib under System V - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/mips:1.1.1.2 machines/mips:1.3 -*** machines/mips:1.1.1.2 Thu Feb 17 20:20:10 1994 ---- machines/mips Thu Feb 17 20:20:10 1994 -*************** -*** 1,7 **** - #RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK - DEFS= -! AUTHDEFS= -DDES -DMD5 -DSYS_MIPS - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -lmld - RESLIB= ---- 1,7 ---- - #RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK - DEFS= -! AUTHDEFS= -DDES -DMD5 -DSYS_MIPS -DHAVE_BSD_TTYS - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -lmld - RESLIB= -diff -c machines/next:1.1.1.1 machines/next:1.2 -*** machines/next:1.1.1.1 Thu Feb 17 20:20:12 1994 ---- machines/next Thu Feb 17 20:20:13 1994 -*************** -*** 1,6 **** - RANLIB= ranlib -c -s - DEFS= -DSYS_NEXT -! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= - RESLIB= ---- 1,6 ---- - RANLIB= ranlib -c -s - DEFS= -DSYS_NEXT -! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -DHAVE_BSD_TTYS - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= - RESLIB= -diff -c machines/sequent:1.1.1.3 machines/sequent:1.4 -*** machines/sequent:1.1.1.3 Thu Feb 17 20:20:14 1994 ---- machines/sequent Thu Feb 17 20:20:14 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT -DHAVE_BSD_TTYS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/sinix-m:1.1.1.2 machines/sinix-m:1.5 -*** machines/sinix-m:1.1.1.2 Thu Feb 17 20:20:15 1994 ---- machines/sinix-m Thu Feb 17 20:20:15 1994 -*************** -*** 1,6 **** - RANLIB= : - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_SINIXM - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= ---- 1,6 ---- - RANLIB= : - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_SINIXM -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -diff -c machines/sony:1.1.1.2 machines/sony:1.3 -*** machines/sony:1.1.1.2 Thu Feb 17 20:20:16 1994 ---- machines/sony Thu Feb 17 20:20:16 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_SONY - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -lmld ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_SONY -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= -lmld -diff -c machines/svr4:1.1.1.4 machines/svr4:1.4 -*** machines/svr4:1.1.1.4 Thu Feb 17 20:20:20 1994 ---- machines/svr4 Thu Feb 17 20:20:20 1994 -*************** -*** 1,6 **** - SHELL= /bin/sh - RANLIB= ls # ar does the work of ranlib under System V -! DEFS= -DSYS_SVR4 -DSTREAMS_TLI - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= - DAEMONLIBS= -lnet -lnsl -lsocket -lelf ---- 1,6 ---- - SHELL= /bin/sh - RANLIB= ls # ar does the work of ranlib under System V -! DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= - DAEMONLIBS= -lnet -lnsl -lsocket -lelf -diff -c machines/vax:1.1.1.2 machines/vax:1.3 -*** machines/vax:1.1.1.2 Thu Feb 17 20:20:23 1994 ---- machines/vax Thu Feb 17 20:20:23 1994 -*************** -*** 1,6 **** - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_VAX - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= - RESLIB= ---- 1,6 ---- - RANLIB= ranlib - DEFS_LOCAL= -DREFCLOCK -! DEFS= -DSYS_VAX -DHAVE_BSD_TTYS - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= - RESLIB= -RCS file: /src/NTP/REPOSITORY/v3/parse/README.new_clocks,v -retrieving revision 1.1.1.2 -retrieving revision 3.3 -diff -c -r1.1.1.2 -r3.3 -*** parse/README.new_clocks:1.1.1.2 1994/02/12 09:53:48 ---- parse/README.new_clocks 1994/02/17 20:09:58 -*************** -*** 1,7 **** -! Here is an attempt to scetch out what you need to do in order to - add another clock to the parse driver: - -! Prerequsites: - - Does the system you want the clock connect to have - termio.h or termios.h ? (You need that for the parse driver) - ---- 1,7 ---- -! Here is an attempt to sketch out what you need to do in order to - add another clock to the parse driver: - -! Prerequisites: - - Does the system you want the clock connect to have - termio.h or termios.h ? (You need that for the parse driver) - -*************** -*** 32,38 **** - PARSEB_ANNOUNCE switch time zone warning (informational only) - PARSEB_POWERUP no synchronisation - clock confused (must set then) - PARSEB_NOSYNC timecode currently not confirmed (must set then) -! usually on reception error when the is still a - chance the the generated time is still ok. - - PARSEB_DST DST in effect (informational only) ---- 32,38 ---- - PARSEB_ANNOUNCE switch time zone warning (informational only) - PARSEB_POWERUP no synchronisation - clock confused (must set then) - PARSEB_NOSYNC timecode currently not confirmed (must set then) -! usually on reception error when there is still a - chance the the generated time is still ok. - - PARSEB_DST DST in effect (informational only) -*************** -*** 53,59 **** - them for examples. The basic structure is: - - struct clockformat <yourclock>_format = { -! lots of field for you to fill out (see below) - }; - - static cvt_<yourclock>() ---- 53,59 ---- - them for examples. The basic structure is: - - struct clockformat <yourclock>_format = { -! lots of fields for you to fill out (see below) - }; - - static cvt_<yourclock>() -*************** -*** 122,132 **** - file with the time code conversion. See the examples and pick a clock - closest to yours and tweak the code to match your clock. - -! In order to make your clk_*.c file usable a referenc to the clockformat - structure must be put into parse_conf.c. - -- -- - TTY setup and initialisation/configuration will be done in - xntpd/refclock_parse.c - ---- 122,130 ---- - file with the time code conversion. See the examples and pick a clock - closest to yours and tweak the code to match your clock. - -! In order to make your clk_*.c file usable a reference to the clockformat - structure must be put into parse_conf.c. - - TTY setup and initialisation/configuration will be done in - xntpd/refclock_parse.c - -*************** -*** 135,141 **** - termio*.h c_cflag macros. - - - in xntpd/refclock_parse.c fill out a new the struct clockinfo element -! (allocates a new "IP" address - see comments) - (see all the other clocks for example) - struct clockinfo - { ---- 133,139 ---- - termio*.h c_cflag macros. - - - in xntpd/refclock_parse.c fill out a new the struct clockinfo element -! (that allocates a new "IP" address - see comments) - (see all the other clocks for example) - struct clockinfo - { -*************** -*** 188,199 **** - - - Well, this is very sketchy, i know. But I hope it helps a little bit. -! The best way is to look which clock comes closet to your and tweak that - code. -! Two sorts of clocks are used with parse. Clocks that automatically sent -! thier time code (once a second) do not nee entries in the poll routines because -! they sent the data all the time. The second sort are the clocks that need a -! command sent to then in order to reply with a time code (like the Trimble - clock). - - For questions: kardel@informatik.uni-erlangen.de. Please include ---- 186,197 ---- - - - Well, this is very sketchy, i know. But I hope it helps a little bit. -! The best way is to look which clock comes closest to your and tweak that - code. -! Two sorts of clocks are used with parse. Clocks that automatically send -! their time code (once a second) do not need entries in the poll routines because -! they send the data all the time. The second sort are the clocks that need a -! command sent to them in order to reply with a time code (like the Trimble - clock). - - For questions: kardel@informatik.uni-erlangen.de. Please include -RCS file: /src/NTP/REPOSITORY/v3/parse/README.parse_clocks,v -retrieving revision 1.1.1.1 -retrieving revision 3.2 -diff -c -r1.1.1.1 -r3.2 -*** parse/README.parse_clocks:1.1.1.1 1994/01/01 00:00:00 ---- parse/README.parse_clocks 1994/02/17 20:10:02 -*************** -*** 1,4 **** -! The parse driver currently supports several clock with different - query mechanisms. In order for you to find a sample that might be - similar to a clock you might want to integrate into parse i'll sum - up the major features of the clocks (this information is distributed ---- 1,4 ---- -! The parse driver currently supports several clocks with different - query mechanisms. In order for you to find a sample that might be - similar to a clock you might want to integrate into parse i'll sum - up the major features of the clocks (this information is distributed --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.2 b/usr.sbin/xntpd/patches/patch.2 deleted file mode 100644 index 50a10235..0000000 --- a/usr.sbin/xntpd/patches/patch.2 +++ /dev/null @@ -1,129 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa12171; 26 Jan 94 17:04 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa15368; - 26 Jan 94 17:00 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA17953 (5.65c-6/7.3v-FAU); Wed, 26 Jan 1994 23:00:40 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA29710 (5.65c-6/7.3m-FAU); Wed, 26 Jan 1994 23:00:37 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199401262200.AA29710@faui43.informatik.uni-erlangen.de> -Subject: Re: Solaribum -To: Mills@udel.edu -Date: Wed, 26 Jan 94 23:00:31 MET -Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk, - Paul_Vixie@corpmis.sjc.hw.sony.com -In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm -X-Mailer: ELM [version 2.3 PL11] - - -Sorry, guys - i tripped over a backward compatibility -variable. Thus the second patch: - -diff -c include/ntp_control.h:3.6 include/ntp_control.h:3.7 -*** include/ntp_control.h:3.6 Wed Jan 26 22:57:52 1994 ---- include/ntp_control.h Wed Jan 26 22:57:52 1994 -*************** -*** 204,210 **** - #define CP_SENT 32 - #define CP_FILTERROR 33 - #define CP_FLASH 34 -! #define CP_VARLIST 35 - - #define CP_MAXCODE CP_VARLIST - ---- 204,211 ---- - #define CP_SENT 32 - #define CP_FILTERROR 33 - #define CP_FLASH 34 -! #define CP_DISP 35 -! #define CP_VARLIST 36 - - #define CP_MAXCODE CP_VARLIST - -diff -c xntpd/ntp_control.c:3.21 xntpd/ntp_control.c:3.22 -*** xntpd/ntp_control.c:3.21 Wed Jan 26 22:58:30 1994 ---- xntpd/ntp_control.c Wed Jan 26 22:58:31 1994 -*************** -*** 175,181 **** - { CP_SENT, RO, "sent" }, /* 32 */ - { CP_FILTERROR, RO, "filterror" }, /* 33 */ - { CP_FLASH, RO, "flash" }, /* 34 */ -! { CP_VARLIST, RO, "peer_var_list" }, /* 35 */ - { 0, EOV, "" } - }; - ---- 175,182 ---- - { CP_SENT, RO, "sent" }, /* 32 */ - { CP_FILTERROR, RO, "filterror" }, /* 33 */ - { CP_FLASH, RO, "flash" }, /* 34 */ -! { CP_DISP, PADDING,"" }, /* 35 */ -! { CP_VARLIST, RO, "peer_var_list" }, /* 36 */ - { 0, EOV, "" } - }; - -*************** -*** 1298,1303 **** ---- 1299,1307 ---- - - for (k = sys_var; !(k->flags &EOV); k++) - { -+ if (k->flags & PADDING) -+ continue; -+ - i = strlen(k->text); - if (s+i+1 >= be) - break; -*************** -*** 1309,1314 **** ---- 1313,1321 ---- - - for (k = ext_sys_var; k && !(k->flags &EOV); k++) - { -+ if (k->flags & PADDING) -+ continue; -+ - ss = k->text; - if (!ss) - continue; -*************** -*** 1484,1489 **** ---- 1491,1499 ---- - - for (k = peer_var; !(k->flags &EOV); k++) - { -+ if (k->flags & PADDING) -+ continue; -+ - i = strlen(k->text); - if (s+i+1 >= be) - break; -*************** -*** 1594,1599 **** ---- 1604,1612 ---- - - for (k = clock_var; !(k->flags &EOV); k++) - { -+ if (k->flags & PADDING) -+ continue; -+ - i = strlen(k->text); - if (s+i+1 >= be) - break; -*************** -*** 1605,1610 **** ---- 1618,1626 ---- - - for (k = clock->kv_list; k && !(k->flags &EOV); k++) - { -+ if (k->flags & PADDING) -+ continue; -+ - ss = k->text; - if (!ss) - continue; --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.20 b/usr.sbin/xntpd/patches/patch.20 deleted file mode 100644 index 3975507..0000000 --- a/usr.sbin/xntpd/patches/patch.20 +++ /dev/null @@ -1,1031 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa03713; 20 Feb 94 10:36 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02155; - 20 Feb 94 10:26 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA03871 (5.65c-6/7.3v-FAU); Sun, 20 Feb 1994 16:26:26 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA04409 (5.65c-6/7.3m-FAU); Sun, 20 Feb 1994 16:26:24 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402201526.AA04409@faui43.informatik.uni-erlangen.de> -Subject: 3.3g patches -To: mills@udel.edu -Date: Sun, 20 Feb 94 16:26:19 MET -X-Mailer: ELM [version 2.3 PL11] - -Hi, Dave, - -here are some more patches. They fix the following: - - nroff macros from John Line - - parse add/delete leap second (as opposed to just add second) - - some rcs ids - - linux support - - xntpd.8 leap variable documentation - -And here we go... - -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/compilers/linux.gcc,v -retrieving revision 1.2 -diff -c -r1.2 linux.gcc -*** 1.2 1993/10/10 23:10:03 ---- compilers/linux.gcc 1994/02/20 13:03:27 -*************** -*** 1,2 **** - COMPILER= gcc -DUSE_PROTOTYPES -Wall -! COPTS= -O6 -finline-functions -fomit-frame-pointer ---- 1,2 ---- - COMPILER= gcc -DUSE_PROTOTYPES -Wall -! COPTS= -O2 -finline-functions -fomit-frame-pointer -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/doc/notes.txt,v -retrieving revision 1.3 -diff -c -r1.3 notes.txt -*** 1.3 1993/08/24 21:24:55 ---- doc/notes.txt 1994/02/20 11:57:24 -*************** -*** 785,791 **** - with mode-6 messages is set the leap-second warning bits) and the ntpq - program provides generic support for the latter. The leap bits that can be - set in the leap_warning variable (up to one month ahead) and in the -! leap_indication variable have a slighly different encoding than the - usual interpretation: - - Value Action ---- 785,791 ---- - with mode-6 messages is set the leap-second warning bits) and the ntpq - program provides generic support for the latter. The leap bits that can be - set in the leap_warning variable (up to one month ahead) and in the -! leap_indication variable have a slightly different encoding than the - usual interpretation: - - Value Action -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/doc/ntpdate.8,v -retrieving revision 3.0 -diff -c -r3.0 ntpdate.8 -*** 3.0 1992/08/14 15:11:44 ---- doc/ntpdate.8 1994/02/20 11:27:53 -*************** -*** 20,32 **** - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Bell System Logo is used as a dummy character. - ''' -! .tr \(bs-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(bs- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' ---- 20,32 ---- - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Greek uppercase omega is used as a dummy character. - ''' -! .tr \(*W-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(*W- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/doc/ntpq.8,v -retrieving revision 3.3 -diff -c -r3.3 ntpq.8 -*** 3.3 1993/10/22 14:26:57 ---- doc/ntpq.8 1994/02/20 11:27:55 -*************** -*** 20,32 **** - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Bell System Logo is used as a dummy character. - ''' -! .tr \(bs-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(bs- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' ---- 20,32 ---- - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Greek uppercase omega is used as a dummy character. - ''' -! .tr \(*W-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(*W- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/doc/ntptrace.8,v -retrieving revision 1.1.1.2 -diff -c -r1.1.1.2 ntptrace.8 -*** 1.1.1.2 1993/01/26 18:55:43 ---- doc/ntptrace.8 1994/02/20 11:27:58 -*************** -*** 20,32 **** - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Bell System Logo is used as a dummy character. - ''' -! .tr \(bs-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(bs- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' ---- 20,32 ---- - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Greek uppercase omega is used as a dummy character. - ''' -! .tr \(*W-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(*W- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/doc/tickadj.8,v -retrieving revision 3.0 -diff -c -r3.0 tickadj.8 -*** 3.0 1992/08/14 15:11:53 ---- doc/tickadj.8 1994/02/20 11:28:00 -*************** -*** 20,32 **** - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Bell System Logo is used as a dummy character. - ''' -! .tr \(bs-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(bs- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' ---- 20,32 ---- - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Greek uppercase omega is used as a dummy character. - ''' -! .tr \(*W-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(*W- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/doc/xntpd.8,v -retrieving revision 3.24 -diff -c -r3.24 xntpd.8 -*** 3.24 1994/02/02 16:42:25 ---- doc/xntpd.8 1994/02/20 11:57:28 -*************** -*** 20,32 **** - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Bell System Logo is used as a dummy character. - ''' -! .tr \(bs-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(bs- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' ---- 20,32 ---- - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Greek uppercase omega is used as a dummy character. - ''' -! .tr \(*W-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(*W- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' -*************** -*** 374,380 **** - Certain changes can be made to the - .I xntpd - server via mode 6 control messages, in particular the setting of -! leap second indications in a server with a radio clock. The - .B controlkey - statement specifies an encription key number to be used for authenticating - such messages. Omitting this statement will cause control messages ---- 374,381 ---- - Certain changes can be made to the - .I xntpd - server via mode 6 control messages, in particular the setting of -! leap second indications in a server with a radio clock. -! The - .B controlkey - statement specifies an encription key number to be used for authenticating - such messages. Omitting this statement will cause control messages -*************** -*** 1401,1406 **** ---- 1402,1432 ---- - If flag3 is set, then the sample information is dumped. - If flag4 is set, then the input data is smoothed, and all data - points are used. -+ .PP -+ .SH VARIABLES -+ Most variables used by the NTP protocol can be examined with the xntpdc -+ (mode 7 messages) and the ntpq (mode 6 messages). Currently very few variables -+ can be modified via mode 6 messages. These variables are either created with the -+ .I setvar -+ directive or the leap warning variables. The leap warning bits that can be -+ set in the -+ .B leapwarning -+ variable (up to one month ahead). Both, the -+ .B leapwarning and in the -+ .B leapindication -+ variable, have a slightly different encoding than the usual -+ .B leap -+ bits interpretation: -+ .P -+ .Ip 00 8 -+ The daemon passes the leap bits of its synchronisation source (usual mode of -+ operation). -+ .Ip 01/10 8 -+ A leap second is added/deleted (operator forced leap second). -+ .Ip 11 8 -+ Leap information from the sychronisation source is ignored (thus LEAP_NOWARNING -+ is passed on). -+ .PP - .SH FILES - .Ip /etc/ntp.conf 20 - the default name of the configuration file -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/doc/xntpdc.8,v -retrieving revision 3.4 -diff -c -r3.4 xntpdc.8 -*** 3.4 1994/02/02 15:54:14 ---- doc/xntpdc.8 1994/02/20 11:28:06 -*************** -*** 20,32 **** - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Bell System Logo is used as a dummy character. - ''' -! .tr \(bs-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(bs- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' ---- 20,32 ---- - ''' - ''' Set up \*(-- to give an unbreakable dash; - ''' string Tr holds user defined translation string. -! ''' Greek uppercase omega is used as a dummy character. - ''' -! .tr \(*W-|\(bv\*(Tr - .ie n \{\ -! .ds -- \(*W- -! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch - .ds L" "" - .ds R" "" - .ds L' ' -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/hints/linux,v -retrieving revision 1.2 -diff -c -r1.2 linux -*** 1.2 1994/02/01 23:19:26 ---- hints/linux 1994/02/20 11:26:44 -*************** -*** 1,5 **** - -! Requirements: kernel 0.99.14y or newer, libc 4.5.8 or newer - ------------ - - With this configuration, xntp should build an run right out of the box ---- 1,5 ---- - -! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer - ------------ - - With this configuration, xntp should build an run right out of the box -*************** -*** 7,9 **** ---- 7,14 ---- - versions of the kernel or libc, or have any other question not covered in the - READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel - free to ask me (duwe@informatik.uni-erlangen.de) -+ -+ [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first -+ binary compiled under the appropriate kernel. Get this one from -+ tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next -+ puplic relase after 4.5.20] -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/include/parse.h,v -retrieving revision 3.14 -diff -c -r3.14 parse.h -*** 3.14 1994/01/28 14:03:35 ---- include/parse.h 1994/02/20 13:04:26 -*************** -*** 81,115 **** - /* - * state flags - */ -! #define PARSEB_ANNOUNCE 0x0001 /* switch time zone warning (DST switch) */ -! #define PARSEB_POWERUP 0x0002 /* no synchronisation */ -! #define PARSEB_NOSYNC 0x0004 /* timecode currently not confirmed */ -! #define PARSEB_DST 0x0008 /* DST in effect */ -! #define PARSEB_UTC 0x0010 /* UTC time */ -! #define PARSEB_LEAP 0x0020 /* LEAP warning (1 hour prior to occurence) */ -! #define PARSEB_ALTERNATE 0x0040 /* alternate antenna used */ -! #define PARSEB_POSITION 0x0080 /* position available */ -! #define PARSEB_LEAPSECOND 0x0100 /* actual leap second */ -! -! #define PARSEB_S_LEAP 0x0200 /* supports LEAP */ -! #define PARSEB_S_ANTENNA 0x0400 /* supports antenna information */ -! #define PARSEB_S_PPS 0x0800 /* supports PPS time stamping */ -! #define PARSEB_S_POSITION 0x1000 /* supports position information (GPS) */ - -! #define PARSEB_TIMECODE 0x2000 /* valid time code sample */ -! #define PARSEB_PPS 0x4000 /* valid PPS sample */ - - #define PARSE_TCINFO (PARSEB_ANNOUNCE|PARSEB_POWERUP|PARSEB_NOSYNC|PARSEB_DST|\ -! PARSEB_UTC|PARSEB_LEAP|PARSEB_ALTERNATE|PARSEB_S_LEAP|\ - PARSEB_S_LOCATION|PARSEB_TIMECODE) - -! #define PARSE_POWERUP(x) ((x) & PARSEB_POWERUP) -! #define PARSE_NOSYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == PARSEB_NOSYNC) -! #define PARSE_SYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == 0) -! #define PARSE_ANNOUNCE(x) ((x) & PARSEB_ANNOUNCE) -! #define PARSE_DST(x) ((x) & PARSEB_DST) - #define PARSE_UTC(x) ((x) & PARSEB_UTC) -! #define PARSE_LEAP(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP)) - #define PARSE_ALTERNATE(x) ((x) & PARSEB_ALTERNATE) - #define PARSE_LEAPSECOND(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP_SECOND)) - ---- 81,135 ---- - /* - * state flags - */ -! #define PARSEB_POWERUP 0x00000001 /* no synchronisation */ -! #define PARSEB_NOSYNC 0x00000002 /* timecode currently not confirmed */ - -! /* -! * time zone information -! */ -! #define PARSEB_ANNOUNCE 0x00000010 /* switch time zone warning (DST switch) */ -! #define PARSEB_DST 0x00000020 /* DST in effect */ -! #define PARSEB_UTC 0x00000040 /* UTC time */ -! -! /* -! * leap information -! */ -! #define PARSEB_LEAPDEL 0x00000100 /* LEAP deletion warning */ -! #define PARSEB_LEAPADD 0x00000200 /* LEAP addition warning */ -! #define PARSEB_LEAPS 0x00000300 /* LEAP warnings */ -! #define PARSEB_LEAPSECOND 0x00000400 /* actual leap second */ -! /* -! * optional status information -! */ -! #define PARSEB_ALTERNATE 0x00001000 /* alternate antenna used */ -! #define PARSEB_POSITION 0x00002000 /* position available */ -! -! /* -! * feature information -! */ -! #define PARSEB_S_LEAP 0x00010000 /* supports LEAP */ -! #define PARSEB_S_ANTENNA 0x00020000 /* supports antenna information */ -! #define PARSEB_S_PPS 0x00040000 /* supports PPS time stamping */ -! #define PARSEB_S_POSITION 0x00080000 /* supports position information (GPS) */ -! -! /* -! * time stamp availality -! */ -! #define PARSEB_TIMECODE 0x10000000 /* valid time code sample */ -! #define PARSEB_PPS 0x20000000 /* valid PPS sample */ - - #define PARSE_TCINFO (PARSEB_ANNOUNCE|PARSEB_POWERUP|PARSEB_NOSYNC|PARSEB_DST|\ -! PARSEB_UTC|PARSEB_LEAPS|PARSEB_ALTERNATE|PARSEB_S_LEAP|\ - PARSEB_S_LOCATION|PARSEB_TIMECODE) - -! #define PARSE_POWERUP(x) ((x) & PARSEB_POWERUP) -! #define PARSE_NOSYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == PARSEB_NOSYNC) -! #define PARSE_SYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == 0) -! #define PARSE_ANNOUNCE(x) ((x) & PARSEB_ANNOUNCE) -! #define PARSE_DST(x) ((x) & PARSEB_DST) - #define PARSE_UTC(x) ((x) & PARSEB_UTC) -! #define PARSE_LEAPADD(x) (PARSE_SYNC(x) && (((x) & PARSEB_LEAPS) == PARSEB_LEAPADD)) -! #define PARSE_LEAPDEL(x) (PARSE_SYNC(x) && (((x) & PARSEB_LEAPS) == PARSEB_LEAPDEL)) - #define PARSE_ALTERNATE(x) ((x) & PARSEB_ALTERNATE) - #define PARSE_LEAPSECOND(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP_SECOND)) - -*************** -*** 118,126 **** - #define PARSE_S_PPS(x) ((x) & PARSEB_S_PPS) - #define PARSE_S_POSITION(x) ((x) & PARSEB_S_POSITION) - -! #define PARSE_TIMECODE(x) ((x) & PARSEB_TIMECODE) - #define PARSE_PPS(x) ((x) & PARSEB_PPS) -! #define PARSE_POSITION(x) ((x) & PARSEB_POSITION) - - /* - * operation flags - some are also fudge flags ---- 138,146 ---- - #define PARSE_S_PPS(x) ((x) & PARSEB_S_PPS) - #define PARSE_S_POSITION(x) ((x) & PARSEB_S_POSITION) - -! #define PARSE_TIMECODE(x) ((x) & PARSEB_TIMECODE) - #define PARSE_PPS(x) ((x) & PARSEB_PPS) -! #define PARSE_POSITION(x) ((x) & PARSEB_POSITION) - - /* - * operation flags - some are also fudge flags -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/parse/README.new_clocks,v -retrieving revision 3.3 -diff -c -r3.3 README.new_clocks -*** 3.3 1994/02/17 20:09:58 ---- parse/README.new_clocks 1994/02/20 13:04:34 -*************** -*** 37,43 **** - - PARSEB_DST DST in effect (informational only) - PARSEB_UTC timecode contains UTC time (informational only) -! PARSEB_LEAP LEAP warning (prior to leap happening - must set when imminent) - PARSEB_ALTERNATE backup transmitter (informational only) - PARSEB_POSITION geographic position available (informational only) - PARSEB_LEAPSECOND actual leap second (this time code is the leap ---- 37,46 ---- - - PARSEB_DST DST in effect (informational only) - PARSEB_UTC timecode contains UTC time (informational only) -! PARSEB_LEAPADD LEAP addition warning (prior to leap happening - must set when imminent) -! also used for time code that do not encode the -! direction (as this is currently the default). -! PARSEB_LEAPDEL LEAP deletion warning (prior to leap happening - must set when imminent) - PARSEB_ALTERNATE backup transmitter (informational only) - PARSEB_POSITION geographic position available (informational only) - PARSEB_LEAPSECOND actual leap second (this time code is the leap -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v -retrieving revision 3.13 -diff -c -r3.13 clk_meinberg.c -*** 3.13 1994/02/02 17:45:21 ---- parse/clk_meinberg.c 1994/02/20 13:04:37 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp - * -! * clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp - * - * Meinberg clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.14 1994/02/20 13:04:37 kardel Exp - * -! * clk_meinberg.c,v 3.14 1994/02/20 13:04:37 kardel Exp - * - * Meinberg clock support - * -*************** -*** 284,291 **** - clock->flags |= PARSEB_S_LEAP; - clock->flags |= PARSEB_S_ANTENNA; - - if (f[4] == 'A') -! clock->flags |= PARSEB_LEAP; - - if (f[5] == 'R') - clock->flags |= PARSEB_ALTERNATE; ---- 284,296 ---- - clock->flags |= PARSEB_S_LEAP; - clock->flags |= PARSEB_S_ANTENNA; - -+ /* -+ * DCF77 does not encode the direction - -+ * so we take the current default - -+ * earth slowing down -+ */ - if (f[4] == 'A') -! clock->flags |= PARSEB_LEAPADD; - - if (f[5] == 'R') - clock->flags |= PARSEB_ALTERNATE; -*************** -*** 394,402 **** - - /* - * oncoming leap second - */ - if (f[5] == 'A') -! clock->flags |= PARSEB_LEAP; - - /* - * this is the leap second ---- 399,410 ---- - - /* - * oncoming leap second -+ * data format does not (yet) specify whether -+ * to add or to delete a second - thus we -+ * pick the current default - */ - if (f[5] == 'A') -! clock->flags |= PARSEB_LEAPADD; - - /* - * this is the leap second -*************** -*** 413,419 **** - /* - * History: - * -! * clk_meinberg.c,v - * Revision 3.13 1994/02/02 17:45:21 kardel - * rcs ids fixed - * ---- 421,430 ---- - /* - * History: - * -! * clk_meinberg.c,v -! * Revision 3.14 1994/02/20 13:04:37 kardel -! * parse add/delete second support -! * - * Revision 3.13 1994/02/02 17:45:21 kardel - * rcs ids fixed - * -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v -retrieving revision 3.11 -diff -c -r3.11 clk_rawdcf.c -*** 3.11 1994/02/02 17:45:23 ---- parse/clk_rawdcf.c 1994/02/20 13:04:39 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp - * -! * clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp - * - * Raw DCF77 pulse clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp - * -! * clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp - * - * Raw DCF77 pulse clock support - * -*************** -*** 278,284 **** - clock->flags |= PARSEB_ANNOUNCE; - - if (ext_bf(buffer, DCF_A2, dcfparam->zerobits)) -! clock->flags |= PARSEB_LEAP; - - if (ext_bf(buffer, DCF_R, dcfparam->zerobits)) - clock->flags |= PARSEB_ALTERNATE; ---- 278,284 ---- - clock->flags |= PARSEB_ANNOUNCE; - - if (ext_bf(buffer, DCF_A2, dcfparam->zerobits)) -! clock->flags |= PARSEB_LEAPADD; /* default: DCF77 data format deficiency */ - - if (ext_bf(buffer, DCF_R, dcfparam->zerobits)) - clock->flags |= PARSEB_ALTERNATE; -*************** -*** 528,534 **** - /* - * History: - * -! * clk_rawdcf.c,v - * Revision 3.11 1994/02/02 17:45:23 kardel - * rcs ids fixed - * ---- 528,537 ---- - /* - * History: - * -! * clk_rawdcf.c,v -! * Revision 3.12 1994/02/20 13:04:39 kardel -! * parse add/delete second support -! * - * Revision 3.11 1994/02/02 17:45:23 kardel - * rcs ids fixed - * -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v -retrieving revision 3.12 -diff -c -r3.12 clk_schmid.c -*** 3.12 1994/02/02 17:45:25 ---- parse/clk_schmid.c 1994/02/20 13:04:41 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp - * -! * clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp - * - * Schmid clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.13 1994/02/20 13:04:41 kardel Exp - * -! * clk_schmid.c,v 3.13 1994/02/20 13:04:41 kardel Exp - * - * Schmid clock support - * -*************** -*** 152,158 **** - - if (buffer[8] & WS_LEAP) - { -! clock->flags |= PARSEB_LEAP; - } - } - ---- 152,158 ---- - - if (buffer[8] & WS_LEAP) - { -! clock->flags |= PARSEB_LEAPADD; /* default: DCF77 data format deficiency */ - } - } - -*************** -*** 167,173 **** - /* - * History: - * -! * clk_schmid.c,v - * Revision 3.12 1994/02/02 17:45:25 kardel - * rcs ids fixed - * ---- 167,176 ---- - /* - * History: - * -! * clk_schmid.c,v -! * Revision 3.13 1994/02/20 13:04:41 kardel -! * parse add/delete second support -! * - * Revision 3.12 1994/02/02 17:45:25 kardel - * rcs ids fixed - * -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v -retrieving revision 3.47 -diff -c -r3.47 refclock_parse.c -*** 3.47 1994/02/02 17:44:30 ---- xntpd/refclock_parse.c 1994/02/20 13:26:00 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp - * -! * refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp - * - * generic reference clock driver for receivers - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp - * -! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp - * - * generic reference clock driver for receivers - * -*************** -*** 129,135 **** - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp"; - #endif - - /**=========================================================================== ---- 129,135 ---- - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp"; - #endif - - /**=========================================================================== -*************** -*** 1706,1712 **** - { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" }, - { PARSEB_DST, "DST" }, - { PARSEB_UTC, "UTC DISPLAY" }, -! { PARSEB_LEAP, "LEAP WARNING" }, - { PARSEB_LEAPSECOND, "LEAP SECOND" }, - { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" }, - { PARSEB_TIMECODE, "TIME CODE" }, ---- 1706,1713 ---- - { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" }, - { PARSEB_DST, "DST" }, - { PARSEB_UTC, "UTC DISPLAY" }, -! { PARSEB_LEAPADD, "LEAP ADD WARNING" }, -! { PARSEB_LEAPDEL, "LEAP DELETE WARNING" }, - { PARSEB_LEAPSECOND, "LEAP SECOND" }, - { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" }, - { PARSEB_TIMECODE, "TIME CODE" }, -*************** -*** 2539,2547 **** - parse_leap() - { - /* -- * PARSE does encode a leap warning... we are aware but not afraid of that -- * as long as we get a little help for the direction from the operator until - * PARSE encodes the LEAP correction direction. - */ - } - ---- 2540,2549 ---- - parse_leap() - { - /* - * PARSE encodes the LEAP correction direction. -+ * For timecodes that do not pass on the leap correction direction -+ * the default PARSEB_LEAPADD must be used. It may then be modified -+ * with a fudge flag (flag2). - */ - } - -*************** -*** 2821,2827 **** - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); -! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; ---- 2823,2829 ---- - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); -! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; -*************** -*** 3245,3258 **** - } - else - { -! if (PARSE_LEAP(parsetime->parse_state)) - { - leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND; - } - else -! { -! leap = LEAP_NOWARNING; -! } - } - - refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap); ---- 3247,3270 ---- - } - else - { -! if (PARSE_LEAPADD(parsetime->parse_state)) - { -+ /* -+ * we pick this state also for time code that pass leap warnings -+ * without direction information (as earth is currently slowing -+ * down). -+ */ - leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND; - } - else -! if (PARSE_LEAPDEL(parsetime->parse_state)) -! { -! leap = LEAP_DELSECOND; -! } -! else -! { -! leap = LEAP_NOWARNING; -! } - } - - refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap); -*************** -*** 3395,3401 **** - /* - * History: - * -! * refclock_parse.c,v - * Revision 3.47 1994/02/02 17:44:30 kardel - * rcs ids fixed - * ---- 3407,3419 ---- - /* - * History: - * -! * refclock_parse.c,v -! * Revision 3.49 1994/02/20 13:26:00 kardel -! * rcs id cleanup -! * -! * Revision 3.48 1994/02/20 13:04:56 kardel -! * parse add/delete second support -! * - * Revision 3.47 1994/02/02 17:44:30 kardel - * rcs ids fixed - * -*** parse/util/parsetest.c Sun Feb 20 15:54:11 1994 ---- parse/util/parsetest.c Sun Feb 20 14:04:46 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/kernel/parsetest.c,v 3.4 1993/03/17 17:16:57 kardel Exp - * -! * parsetest.c,v 3.10 1994/01/23 17:22:18 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/util/parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp - * -! * parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg -*************** -*** 10,26 **** - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * -! * parsetest.c,v -! * Revision 3.4 1993/03/17 17:16:57 kardel -! * DEC OSF/1 ALPHA Integration - 930314 - * -! * Revision 3.3 1993/01/18 09:24:33 kardel -! * updated copyright conditions in conjunction with -! * conditions set up in the COPYRIGHT file - * -- * Revision 3.2 1993/01/17 13:43:00 kardel -- * 1993 initial update -- * - */ - - #ifndef STREAM ---- 10,22 ---- - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * -! * parsetest.c,v -! * Revision 3.13 1994/02/20 13:04:46 kardel -! * parse add/delete second support - * -! * Revision 3.12 1994/02/02 17:45:51 kardel -! * rcs ids fixed - * - */ - - #ifndef STREAM -*************** -*** 199,205 **** - parsetime_t parsetime; - struct strioctl strioc; - -! printf("parsetest.c,v 3.10 1994/01/23 17:22:18 kardel Exp\n"); - - while (ioctl(fd, I_POP, 0) == 0) - ; ---- 195,201 ---- - parsetime_t parsetime; - struct strioctl strioc; - -! printf("parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp\n"); - - while (ioctl(fd, I_POP, 0) == 0) - ; -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v -retrieving revision 3.16 -diff -c -r3.16 parsestreams.c -*** 3.16 1994/02/15 22:39:50 ---- parse/parsestreams.c 1994/02/20 15:18:02 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp - * -! * parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp - * -! * parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) -*************** -*** 16,22 **** - */ - - #ifndef lint -! static char rcsid[] = "parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp"; - #endif - - #include "sys/types.h" ---- 16,22 ---- - */ - - #ifndef lint -! static char rcsid[] = "parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp"; - #endif - - #include "sys/types.h" -*************** -*** 195,201 **** - } - else - { -! static char revision[] = "3.12"; - char *s, *S, *t; - - strncpy(ifm->f_name, mname, FMNAMESZ); ---- 195,201 ---- - } - else - { -! static char revision[] = "3.17"; - char *s, *S, *t; - - strncpy(ifm->f_name, mname, FMNAMESZ); -*************** -*** 1259,1265 **** - /* - * History: - * -! * parsestreams.c,v - * Revision 3.16 1994/02/15 22:39:50 kardel - * memory leak on open failure closed - * ---- 1259,1268 ---- - /* - * History: - * -! * parsestreams.c,v -! * Revision 3.17 1994/02/20 15:18:02 kardel -! * rcs id cleanup -! * - * Revision 3.16 1994/02/15 22:39:50 kardel - * memory leak on open failure closed - * --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.21 b/usr.sbin/xntpd/patches/patch.21 deleted file mode 100644 index 9299971..0000000 --- a/usr.sbin/xntpd/patches/patch.21 +++ /dev/null @@ -1,54 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa25363; 23 Feb 94 18:50 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa28210; - 23 Feb 94 18:44 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA07903 (5.65c-6/7.3v-FAU); Thu, 24 Feb 1994 00:44:18 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA19013 (5.65c-6/7.3m-FAU); Thu, 24 Feb 1994 00:44:17 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402232344.AA19013@faui43.informatik.uni-erlangen.de> -Subject: TRAK clock -To: mills@udel.edu -Date: Thu, 24 Feb 94 0:44:12 MET -X-Mailer: ELM [version 2.3 PL11] - -Hi, Dave - some obvious things about the TRAK clock: - - please removed the 4 ^A at the end of the - xntpd/reflock_trak.c file (email leftovers). - - add following refclocks/rclk.TRAK file - -#!/bin/sh - -CMD="$1" -shift; - -. refclocks/setup - -case "$CMD" in - info) - echo " TRAK - TRAK 8810 GPS station clock" - ;; - check) - if check "$RCONFIG" '$0 ~ /TRAK/'; then - echo "TRAK - TRAK 8810 GPS station clock" - fi - ;; - config) - if check "$REFCONF" '$0 ~ /TRAK/' || - ( [ ! "$REFCONF" ] && query "Include TRAK 8810 GPS station clock (TRAK)" n); then - if check "$PPSFEATURES" '$0 ~ /CD/' && - [ "$PPSOK" -eq 1 ] && - (check "$REFCONF" '$0 ~ /TRAKPPS/' || - ( [ ! "$REFCONF" ] && query " Use TRAK for PPS" n)); then - echo "-DTRAKPPS" >> $RCONFIG - else - echo "-DTRAK" >> $RCONFIG - fi - fi - ;; -esac --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.22 b/usr.sbin/xntpd/patches/patch.22 deleted file mode 100644 index 8b4296c..0000000 --- a/usr.sbin/xntpd/patches/patch.22 +++ /dev/null @@ -1,296 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa02110; 24 Feb 94 18:54 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa13897; - 24 Feb 94 18:53 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA27796 (5.65c-6/7.3v-FAU); Fri, 25 Feb 1994 00:53:32 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA16114 (5.65c-6/7.3m-FAU); Fri, 25 Feb 1994 00:53:31 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199402242353.AA16114@faui43.informatik.uni-erlangen.de> -Subject: patches (parse pps/pll control) -To: mills@udel.edu -Date: Fri, 25 Feb 94 0:52:59 MET -X-Mailer: ELM [version 2.3 PL11] - -Hi, here are some patches. - -pps pll control is nor supported by parse. -pps output variable are readable via mode 6 messages. - -diff -c v3/parse/parsestreams.c:1.1.1.10 v3/parse/parsestreams.c:3.19 -*** v3/parse/parsestreams.c:1.1.1.10 Fri Feb 25 00:44:41 1994 ---- v3/parse/parsestreams.c Fri Feb 25 00:44:41 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp - * -! * parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp - * -! * parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) -*************** -*** 16,22 **** - */ - - #ifndef lint -! static char rcsid[] = "parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp"; - #endif - - #include "sys/types.h" ---- 16,22 ---- - */ - - #ifndef lint -! static char rcsid[] = "parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp"; - #endif - - #include "sys/types.h" -*************** -*** 195,201 **** - } - else - { -! static char revision[] = "3.17"; - char *s, *S, *t; - - strncpy(ifm->f_name, mname, FMNAMESZ); ---- 195,201 ---- - } - else - { -! static char revision[] = "3.19"; - char *s, *S, *t; - - strncpy(ifm->f_name, mname, FMNAMESZ); -*************** -*** 1076,1081 **** ---- 1076,1086 ---- - - #define MAXDEPTH 50 /* maximum allowed stream crawl */ - -+ #ifdef PPS_SYNC -+ extern hardpps(); -+ extern struct timeval time; -+ #endif -+ - /* - * take external status interrupt (only CD interests us) - */ -*************** -*** 1087,1101 **** - register queue_t *q; - register unsigned char zsstatus; - register int loopcheck; -- register unsigned char cdstate; - register char *dname; - - /* - * pick up current state - */ - zsstatus = zsaddr->zscc_control; - -! if (za->za_rr0 ^ (cdstate = zsstatus & ZSRR0_CD)) - { - timestamp_t cdevent; - register int status; ---- 1092,1109 ---- - register queue_t *q; - register unsigned char zsstatus; - register int loopcheck; - register char *dname; -+ #ifdef PPS_SYNC -+ register int s; -+ register long usec; -+ #endif - - /* - * pick up current state - */ - zsstatus = zsaddr->zscc_control; - -! if ((za->za_rr0 ^ zsstatus) & (ZSRR0_CD|ZSRR0_SYNC)) - { - timestamp_t cdevent; - register int status; -*************** -*** 1103,1129 **** - /* - * CONDITIONAL external measurement support - */ -! SET_LED(cdstate); /* - * inconsistent with upper SET_LED, but this - * is for oscilloscope business anyway and we - * are just interested in edge delays in the - * lower us range - */ -! - /* - * time stamp - */ - uniqtime(&cdevent.tv); -! -! TIMEVAL_USADD(&cdevent.tv, xsdelay); -! -! q = za->za_ttycommon.t_readq; - - /* - * logical state - */ -! status = cd_invert ? cdstate == 0 : cdstate != 0; - - /* - * ok - now the hard part - find ourself - */ ---- 1111,1155 ---- - /* - * CONDITIONAL external measurement support - */ -! SET_LED(zsstatus & (ZSRR0_CD|ZSRR0_SYNC)); /* - * inconsistent with upper SET_LED, but this - * is for oscilloscope business anyway and we - * are just interested in edge delays in the - * lower us range - */ -! #ifdef PPS_SYNC -! s = splclock(); -! usec = time.tv_usec; -! #endif - /* - * time stamp - */ - uniqtime(&cdevent.tv); -! -! #ifdef PPS_SYNC -! splx(s); -! #endif - - /* - * logical state - */ -! status = cd_invert ? (zsstatus & (ZSRR0_CD|ZSRR0_SYNC)) == 0 : (zsstatus & (ZSRR0_CD|ZSRR0_SYNC)) != 0; - -+ #ifdef PPS_SYNC -+ if (status) -+ { -+ usec = cdevent.tv.tv_usec - usec; -+ if (usec < 0) -+ usec += 1000000; -+ -+ hardpps(&cdevent.tv, usec); -+ } -+ #endif -+ -+ TIMEVAL_USADD(&cdevent.tv, xsdelay); -+ -+ q = za->za_ttycommon.t_readq; -+ - /* - * ok - now the hard part - find ourself - */ -*************** -*** 1179,1188 **** - /* - * only pretend that CD has been handled - */ -! za->za_rr0 = za->za_rr0 & ~ZSRR0_CD | zsstatus & ZSRR0_CD; - ZSDELAY(2); - -! if (!((za->za_rr0 ^ zsstatus) & ~ZSRR0_CD)) - { - /* - * all done - kill status indication and return ---- 1205,1214 ---- - /* - * only pretend that CD has been handled - */ -! za->za_rr0 = za->za_rr0 & ~(ZSRR0_CD|ZSRR0_SYNC) | zsstatus & (ZSRR0_CD|ZSRR0_SYNC); - ZSDELAY(2); - -! if (!((za->za_rr0 ^ zsstatus) & ~(ZSRR0_CD|ZSRR0_SYNC))) - { - /* - * all done - kill status indication and return -*************** -*** 1260,1265 **** ---- 1286,1297 ---- - * History: - * - * parsestreams.c,v -+ * Revision 3.19 1994/02/24 16:33:54 kardel -+ * CD events can also be posted on sync flag -+ * -+ * Revision 3.18 1994/02/24 14:12:58 kardel -+ * initial PPS_SYNC support version -+ * - * Revision 3.17 1994/02/20 15:18:02 kardel - * rcs id cleanup - * -diff -c v3/xntpd/ntp_loopfilter.c:1.1.1.33 v3/xntpd/ntp_loopfilter.c:3.40 -*** v3/xntpd/ntp_loopfilter.c:1.1.1.33 Fri Feb 25 00:46:20 1994 ---- v3/xntpd/ntp_loopfilter.c Fri Feb 25 00:46:21 1994 -*************** -*** 522,529 **** ---- 522,545 ---- - ntv.maxerror = sys_rootdispersion + sys_rootdelay / 2; - ntv.esterror = sys_rootdispersion; - ntv.time_constant = time_constant; -+ ntv.shift = 0; - (void)ntp_adjtime(&ntv); - drift_comp = ntv.frequency; -+ if (ntv.shift != 0) { -+ char buf[128]; -+ (void) sprintf(buf, "pps_freq=%s", fptoa(ntv.ybar, 3)); -+ set_sys_var(buf, strlen(buf)+1, RO|DEF); -+ (void) sprintf(buf, "pps_disp=%s", fptoa(ntv.disp, 3)); -+ set_sys_var(buf, strlen(buf)+1, RO|DEF); -+ (void) sprintf(buf, "pps_interval=%ld",1 << ntv.shift); -+ set_sys_var(buf, strlen(buf)+1, RO); -+ (void) sprintf(buf, "pps_intervals=%ld", ntv.calcnt); -+ set_sys_var(buf, strlen(buf)+1, RO); -+ (void) sprintf(buf, "pps_jitterexceeded=%ld", ntv.jitcnt); -+ set_sys_var(buf, strlen(buf)+1, RO); -+ (void) sprintf(buf, "pps_dispersionexceeded=%ld", ntv.discnt); -+ set_sys_var(buf, strlen(buf)+1, RO); -+ } - #endif /* KERNEL_PLL */ - } else { - if (offset < 0) { -*************** -*** 725,730 **** ---- 741,748 ---- - "loop_config: skew compensation %s too large", - fptoa(tmp, 5)); - } else { -+ char var[40]; -+ - drift_comp = tmp; - - #if defined(KERNEL_PLL) -*************** -*** 751,756 **** ---- 769,778 ---- - syslog(LOG_NOTICE, - "%susing kernel phase-lock loop", - (pll_control) ? "" : "Not "); -+ (void)sprintf(var, "kernel_pll=%s", pll_control ? "true" : "false"); -+ -+ set_sys_var(var, strlen(var)+1, RO); -+ - #if DEBUG - if (debug) - printf("pll_control %d\n", pll_control); --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.23 b/usr.sbin/xntpd/patches/patch.23 deleted file mode 100644 index 5fee16f..0000000 --- a/usr.sbin/xntpd/patches/patch.23 +++ /dev/null @@ -1,80 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa18634; 27 Feb 94 13:54 EST -Received: from rincewind.mech.virginia.edu by louie.udel.edu id aa11711; - 27 Feb 94 13:53 EST -Received: from localhost (dmm0t@localhost) by rincewind.mech.virginia.edu (8.6.5/8.6.5) id NAA04646 for mills@udel.edu; Sun, 27 Feb 1994 13:53:35 -0500 -From: David Meyer <dmm0t@rincewind.mech.virginia.edu> -Message-Id: <199402271853.NAA04646@rincewind.mech.virginia.edu> -Subject: patches to xntpd-3.3j for NeXT -To: mills@udel.edu -Date: Sun, 27 Feb 1994 13:53:34 -0500 (EST) -X-Mailer: ELM [version 2.4 PL23] -MIME-Version: 1.0 -Content-Type: text/plain; charset=US-ASCII -Content-Transfer-Encoding: 7bit -Content-Length: 2043 - -I have a couple of patches to make the 3.3j beta compile on a NeXT -running NS3.1. - -The first patch just defines RETSIGTYPE. The second patch puts -HAVE_BSD_TTYS in DEFS rather than AUTHDEFS. The last patch just fixes -a type - using # rather than * in a comment block. - -*** ../orig/include/ntp_machine.h Sun Feb 20 22:23:29 1994 ---- include/ntp_machine.h Sun Feb 27 13:47:59 1994 -*************** -*** 313,318 **** ---- 313,319 ---- - * Next - */ - #if defined(SYS_NEXT) -+ #define RETSIGTYPE void - #define DOSYNCTODR - #define HAVE_READKMEM - #define HAVE_BSD_NICE - -*** ../orig/machines/next Sun Feb 20 22:23:36 1994 ---- machines/next Sun Feb 27 13:47:15 1994 -*************** -*** 1,6 **** - RANLIB= ranlib -c -s -! DEFS= -DSYS_NEXT -! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -DHAVE_BSD_TTYS - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= - RESLIB= ---- 1,6 ---- - RANLIB= ranlib -c -s -! DEFS= -DSYS_NEXT -DHAVE_BSD_TTYS -! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 - CLOCKDEFS= -DLOCAL_CLOCK - DAEMONLIBS= - RESLIB= - -*** ../orig/xntpd/refclock_irig.c Thu Jan 27 09:03:58 1994 ---- xntpd/refclock_irig.c Sun Feb 27 13:36:30 1994 -*************** -*** 19,25 **** - * This driver supports the IRIG audio decoder. This clever gadget uses - * a modified BSD audio driver for the Sun SPARCstation which provides - * a timestamp, raw binary timecode, status byte and decoded ASCII -! # timecode. The data are represented in the structure: - * - * struct irig_time { - * struct timeval stamp; timestamp ---- 19,25 ---- - * This driver supports the IRIG audio decoder. This clever gadget uses - * a modified BSD audio driver for the Sun SPARCstation which provides - * a timestamp, raw binary timecode, status byte and decoded ASCII -! * timecode. The data are represented in the structure: - * - * struct irig_time { - * struct timeval stamp; timestamp - - --- -David M. Meyer Mechanical & Aerospace Engineering -dmm0t@rincewind.mech.virginia.edu University of Virginia -NeXTmail ok - diff --git a/usr.sbin/xntpd/patches/patch.24 b/usr.sbin/xntpd/patches/patch.24 deleted file mode 100644 index 6ab00e2..0000000 --- a/usr.sbin/xntpd/patches/patch.24 +++ /dev/null @@ -1,474 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa16943; 4 Mar 94 6:43 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02686; - 4 Mar 94 6:34 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA12349 (5.65c-6/7.3v-FAU); Fri, 4 Mar 1994 12:34:08 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA26044 (5.65c-6/7.3m-FAU); Fri, 4 Mar 1994 12:34:06 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199403041134.AA26044@faui43.informatik.uni-erlangen.de> -Subject: Re: patches for 3.3l -To: Mills@udel.edu -Date: Fri, 4 Mar 94 12:33:49 MET -In-Reply-To: <9403040253.aa16147@huey.udel.edu>; from "Mills@udel.edu" at Mar 4, 94 2:53 am -X-Mailer: ELM [version 2.3 PL11] - - -> Frank, - - -> ld: ../lib/libntp.a: warning: archive has no table of contents; add one using ranlib(1) -I didn't fiddle with lib/* this round. Thus it must be some problem -with the lib building process. Try make clean and again. I just checked -the patches with my 3.3l tree - fine. I do admit being a bit lax when -sending you the patches - you might have had to enter some paths -manually. - -> ld: Undefined symbol -> _DESauth1crypt .... -Happens if ranlib isn't run. - -> Obviously, it bombed. -Not likely being a problem from my patches - the lib/libntp.a got -inconsistent. -Usually this should not happen (ranlib need to be run on BSD systems). -Try building again from scratch (make clean all). If the problem -persists look (or send me) at the output of the lib building step -something is amiss there at your site. - -I'll include the patches here again not properly prepared for a -plain "patch < patchfile". - - -Hi, Dave, - -Here are some more patches: - - allow parse conversion routines to deliver UTC directly - - irix4 machine/cc from Amos - - rcs id fixing - - linux hints - - modload hints - - full integration of trak refclock driver (was only partially integrated) - -diff -c /dev/null compilers/irix4.cc:1.1 -*** /dev/null Thu Mar 3 10:29:50 1994 ---- compilers/irix4.cc Thu Mar 3 10:29:50 1994 -*************** -*** 0 **** ---- 1,2 ---- -+ COMPILER= cc -cckr -+ COPTS= -O2 -diff -c hints/linux:1.1.1.3 hints/linux:1.5 -*** hints/linux:1.1.1.3 Thu Mar 3 10:30:53 1994 ---- hints/linux Thu Mar 3 10:30:53 1994 -*************** -*** 1,5 **** - -! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer - ------------ - - With this configuration, xntp should build an run right out of the box ---- 1,5 ---- - -! Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer - ------------ - - With this configuration, xntp should build an run right out of the box -*************** -*** 7,14 **** - versions of the kernel or libc, or have any other question not covered in the - READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel - free to ask me (duwe@informatik.uni-erlangen.de) -- -- [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first -- binary compiled under the appropriate kernel. Get this one from -- tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next -- puplic relase after 4.5.20] ---- 7,9 ---- -diff -c include/parse.h:1.1.1.8 include/parse.h:3.17 -*** include/parse.h:1.1.1.8 Thu Mar 3 10:31:37 1994 ---- include/parse.h Thu Mar 3 10:31:37 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp - * -! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp - * -! * parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg -*************** -*** 15,21 **** - #ifndef __PARSE_H__ - #define __PARSE_H__ - #if !(defined(lint) || defined(__GNUC__)) -! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU"; - #endif - - #include "ntp_types.h" ---- 15,21 ---- - #ifndef __PARSE_H__ - #define __PARSE_H__ - #if !(defined(lint) || defined(__GNUC__)) -! static char parsehrcsid[]="parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp"; - #endif - - #include "ntp_types.h" -*************** -*** 301,306 **** ---- 301,307 ---- - LONG second; - LONG usecond; - LONG utcoffset; /* in seconds */ -+ time_t utctime; /* the actual time - alternative to date/time */ - LONG flags; /* current clock status */ - }; - -*************** -*** 385,390 **** ---- 386,394 ---- - * History: - * - * parse.h,v -+ * Revision 3.17 1994/03/03 09:27:20 kardel -+ * rcs ids fixed -+ * - * Revision 3.13 1994/01/25 19:04:21 kardel - * 94/01/23 reconcilation - * -diff -c parse/Makefile.kernel:1.1.1.3 parse/Makefile.kernel:3.9 -*** parse/Makefile.kernel:1.1.1.3 Thu Mar 3 10:35:48 1994 ---- parse/Makefile.kernel Thu Mar 3 10:35:48 1994 -*************** -*** 40,46 **** - rm -f parsestreams.o - - parsestreams.o: parsestreams.o.$(KARCH) -! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel" - - parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c $(DEFS) -I../include parsestreams.c ---- 40,46 ---- - rm -f parsestreams.o - - parsestreams.o: parsestreams.o.$(KARCH) -! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel" - - parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c $(DEFS) -I../include parsestreams.c -diff -c parse/README.new_clocks:1.1.1.3 parse/README.new_clocks:3.5 -*** parse/README.new_clocks:1.1.1.3 Thu Mar 3 10:35:52 1994 ---- parse/README.new_clocks Thu Mar 3 10:35:53 1994 -*************** -*** 23,28 **** ---- 23,29 ---- - LONG second; - LONG usecond; - LONG utcoffset; /* in seconds */ -+ time_t utcoffset; /* true utc time instead of date/time */ - LONG flags; /* current clock status */ - }; - -*************** -*** 52,57 **** ---- 53,65 ---- - PARSEB_S_PPS supports PPS time stamping - PARSEB_S_POSITION supports position information (GPS) - -+ If the utctime field is non zero this value will be take as -+ time code value. This allows for conversion routines that -+ already have the utc time value. The utctime field gives the seconds -+ since Jan 1st 1970, 0:00:00. The useconds field gives the respective -+ usec value. The fields for date and time (down to second resolution) -+ will be ignored. -+ - Conversion is done in the cvt_* routine in parse/clk_*.c files. look in - them for examples. The basic structure is: - -diff -c parse/parse.c:1.1.1.9 parse/parse.c:3.22 -*** parse/parse.c:1.1.1.9 Thu Mar 3 10:36:06 1994 ---- parse/parse.c Thu Mar 3 10:36:07 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp - * -! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp - * - * Parser module for reference clock - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp - * -! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp - * - * Parser module for reference clock - * -*************** -*** 556,561 **** ---- 556,564 ---- - register int i; - time_t t; - -+ if (clock->utctime) -+ return clock->utctime; /* if the conversion routine gets it right away - why not */ -+ - if (clock->year < 100) - clock->year += 1900; - -*************** -*** 628,633 **** ---- 631,639 ---- - t += clock->utcoffset; /* warp to UTC */ - - /* done */ -+ -+ clock->utctime = t; /* documentray only */ -+ - return t; - } - -*************** -*** 890,895 **** ---- 896,903 ---- - - if (parseio->parse_flags & PARSE_FIXED_FMT) - { -+ clock.utctime = 0; -+ - switch ((cvtrtc = clockformats[format]->convert ? clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : CVT_NONE) & CVT_MASK) - { - case CVT_FAIL: -*************** -*** 941,946 **** ---- 949,956 ---- - { - do - { -+ clock.utctime = 0; -+ - switch ((cvtrtc = (clockformats[format]->convert && !(clockformats[format]->flags & CVT_FIXEDONLY)) ? - clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : - CVT_NONE) & CVT_MASK) -*************** -*** 1148,1153 **** ---- 1158,1166 ---- - * History: - * - * parse.c,v -+ * Revision 3.22 1994/02/25 12:34:49 kardel -+ * allow for converter generated utc times -+ * - * Revision 3.21 1994/02/02 17:45:30 kardel - * rcs ids fixed - * -diff -c parse/util/testdcf.c:1.1.1.6 parse/util/testdcf.c:3.11 -*** parse/util/testdcf.c:1.1.1.6 Thu Mar 3 10:36:27 1994 ---- parse/util/testdcf.c Thu Mar 3 10:36:27 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp - * -! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp - * - * simple DCF77 100/200ms pulse test program (via 50Baud serial line) - * ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp - * -! * testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp - * - * simple DCF77 100/200ms pulse test program (via 50Baud serial line) - * -diff -c xntpd/Makefile.tmpl:1.1.1.18 xntpd/Makefile.tmpl:3.28 -*** xntpd/Makefile.tmpl:1.1.1.18 Thu Mar 3 10:38:13 1994 ---- xntpd/Makefile.tmpl Thu Mar 3 10:38:13 1994 -*************** -*** 34,40 **** - refclock_wwvb.c refclock_goes.c refclock_mx4200.c \ - refclock_parse.c refclock_as2201.c refclock_omega.c \ - refclock_tpro.c refclock_leitch.c refclock_irig.c \ -! refclock_msfees.c refclock_gpstm.c ntp_intres.c ntp_filegen.c - - OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \ - ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \ ---- 34,41 ---- - refclock_wwvb.c refclock_goes.c refclock_mx4200.c \ - refclock_parse.c refclock_as2201.c refclock_omega.c \ - refclock_tpro.c refclock_leitch.c refclock_irig.c \ -! refclock_msfees.c refclock_gpstm.c refclock_trak.c \ -! ntp_intres.c ntp_filegen.c - - OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \ - ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \ -*************** -*** 44,50 **** - refclock_wwvb.o refclock_goes.o refclock_mx4200.o \ - refclock_parse.o refclock_as2201.o refclock_omega.o \ - refclock_tpro.o refclock_leitch.o refclock_irig.o \ -! refclock_msfees.o refclock_gpstm.o ntp_intres.o ntp_filegen.o - - all: $(PROGRAM) - ---- 45,52 ---- - refclock_wwvb.o refclock_goes.o refclock_mx4200.o \ - refclock_parse.o refclock_as2201.o refclock_omega.o \ - refclock_tpro.o refclock_leitch.o refclock_irig.o \ -! refclock_msfees.o refclock_gpstm.o refclock_trak.o \ -! ntp_intres.o ntp_filegen.o - - all: $(PROGRAM) - -*************** -*** 136,141 **** ---- 138,146 ---- - - refclock_msfees.o: refclock_msfees.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c -+ -+ refclock_trak.o: refclock_trak.c -+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - - refclock_gpstm.o: refclock_gpstm.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c -diff -c xntpd/ntp_control.c:1.1.1.17 xntpd/ntp_control.c:3.26 -*** xntpd/ntp_control.c:1.1.1.17 Thu Mar 3 10:38:16 1994 ---- xntpd/ntp_control.c Thu Mar 3 10:38:17 1994 -*************** -*** 301,307 **** - static u_char clocktypes[] = { - CTL_SST_TS_NTP, /* REFCLK_NONE */ - CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */ -! CTL_SST_TS_HF, /* REFCLK_WWV_HEATH */ - CTL_SST_TS_HF, /* REFCLK_WWV_PST */ - CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */ - CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */ ---- 301,307 ---- - static u_char clocktypes[] = { - CTL_SST_TS_NTP, /* REFCLK_NONE */ - CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */ -! CTL_SST_TS_HF, /* REFCLK_GPS_TRAK */ - CTL_SST_TS_HF, /* REFCLK_WWV_PST */ - CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */ - CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */ -diff -c xntpd/refclock_conf.c:1.1.1.22 xntpd/refclock_conf.c:3.21 -*** xntpd/refclock_conf.c:1.1.1.22 Thu Mar 3 10:38:54 1994 ---- xntpd/refclock_conf.c Thu Mar 3 10:38:54 1994 -*************** -*** 113,119 **** - struct refclock *refclock_conf[] = { - &refclock_none, /* 0 REFCLK_NONE */ - &refclock_local, /* 1 REFCLK_LOCAL */ -! &refclock_none, /* 2 REFCLK_WWV_HEATH */ - &refclock_pst, /* 3 REFCLK_WWV_PST */ - &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */ - &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */ ---- 113,119 ---- - struct refclock *refclock_conf[] = { - &refclock_none, /* 0 REFCLK_NONE */ - &refclock_local, /* 1 REFCLK_LOCAL */ -! &refclock_trak, /* 2 REFCLK_GPS_TRAK */ - &refclock_pst, /* 3 REFCLK_WWV_PST */ - &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */ - &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */ -RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v -retrieving revision 1.1.1.12 -diff -c -r1.1.1.12 xntpd/refclock_parse.c -*** xntpd/refclock_parse.c:1.1.1.12 1994/02/22 21:57:57 ---- xntpd/refclock_parse.c 1994/03/03 09:49:54 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp - * -! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp - * - * generic reference clock driver for receivers - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp - * -! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp - * - * generic reference clock driver for receivers - * -*************** -*** 129,135 **** - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp"; - #endif - - /**=========================================================================== ---- 129,135 ---- - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp"; - #endif - - /**=========================================================================== -*************** -*** 1653,1659 **** - * done if no more characters are available - */ - FD_SET(fd, &fdmask); -! if (select(fd + 1, &fdmask, 0, 0, &null_time) == 0) - return; - } - } ---- 1653,1660 ---- - * done if no more characters are available - */ - FD_SET(fd, &fdmask); -! if ((i == 0) && -! (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)) - return; - } - } -*************** -*** 2823,2829 **** - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); -! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; ---- 2824,2830 ---- - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); -! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - - --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.25 b/usr.sbin/xntpd/patches/patch.25 deleted file mode 100644 index 6ab00e2..0000000 --- a/usr.sbin/xntpd/patches/patch.25 +++ /dev/null @@ -1,474 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa16943; 4 Mar 94 6:43 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02686; - 4 Mar 94 6:34 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA12349 (5.65c-6/7.3v-FAU); Fri, 4 Mar 1994 12:34:08 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA26044 (5.65c-6/7.3m-FAU); Fri, 4 Mar 1994 12:34:06 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199403041134.AA26044@faui43.informatik.uni-erlangen.de> -Subject: Re: patches for 3.3l -To: Mills@udel.edu -Date: Fri, 4 Mar 94 12:33:49 MET -In-Reply-To: <9403040253.aa16147@huey.udel.edu>; from "Mills@udel.edu" at Mar 4, 94 2:53 am -X-Mailer: ELM [version 2.3 PL11] - - -> Frank, - - -> ld: ../lib/libntp.a: warning: archive has no table of contents; add one using ranlib(1) -I didn't fiddle with lib/* this round. Thus it must be some problem -with the lib building process. Try make clean and again. I just checked -the patches with my 3.3l tree - fine. I do admit being a bit lax when -sending you the patches - you might have had to enter some paths -manually. - -> ld: Undefined symbol -> _DESauth1crypt .... -Happens if ranlib isn't run. - -> Obviously, it bombed. -Not likely being a problem from my patches - the lib/libntp.a got -inconsistent. -Usually this should not happen (ranlib need to be run on BSD systems). -Try building again from scratch (make clean all). If the problem -persists look (or send me) at the output of the lib building step -something is amiss there at your site. - -I'll include the patches here again not properly prepared for a -plain "patch < patchfile". - - -Hi, Dave, - -Here are some more patches: - - allow parse conversion routines to deliver UTC directly - - irix4 machine/cc from Amos - - rcs id fixing - - linux hints - - modload hints - - full integration of trak refclock driver (was only partially integrated) - -diff -c /dev/null compilers/irix4.cc:1.1 -*** /dev/null Thu Mar 3 10:29:50 1994 ---- compilers/irix4.cc Thu Mar 3 10:29:50 1994 -*************** -*** 0 **** ---- 1,2 ---- -+ COMPILER= cc -cckr -+ COPTS= -O2 -diff -c hints/linux:1.1.1.3 hints/linux:1.5 -*** hints/linux:1.1.1.3 Thu Mar 3 10:30:53 1994 ---- hints/linux Thu Mar 3 10:30:53 1994 -*************** -*** 1,5 **** - -! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer - ------------ - - With this configuration, xntp should build an run right out of the box ---- 1,5 ---- - -! Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer - ------------ - - With this configuration, xntp should build an run right out of the box -*************** -*** 7,14 **** - versions of the kernel or libc, or have any other question not covered in the - READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel - free to ask me (duwe@informatik.uni-erlangen.de) -- -- [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first -- binary compiled under the appropriate kernel. Get this one from -- tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next -- puplic relase after 4.5.20] ---- 7,9 ---- -diff -c include/parse.h:1.1.1.8 include/parse.h:3.17 -*** include/parse.h:1.1.1.8 Thu Mar 3 10:31:37 1994 ---- include/parse.h Thu Mar 3 10:31:37 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp - * -! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp - * -! * parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg -*************** -*** 15,21 **** - #ifndef __PARSE_H__ - #define __PARSE_H__ - #if !(defined(lint) || defined(__GNUC__)) -! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU"; - #endif - - #include "ntp_types.h" ---- 15,21 ---- - #ifndef __PARSE_H__ - #define __PARSE_H__ - #if !(defined(lint) || defined(__GNUC__)) -! static char parsehrcsid[]="parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp"; - #endif - - #include "ntp_types.h" -*************** -*** 301,306 **** ---- 301,307 ---- - LONG second; - LONG usecond; - LONG utcoffset; /* in seconds */ -+ time_t utctime; /* the actual time - alternative to date/time */ - LONG flags; /* current clock status */ - }; - -*************** -*** 385,390 **** ---- 386,394 ---- - * History: - * - * parse.h,v -+ * Revision 3.17 1994/03/03 09:27:20 kardel -+ * rcs ids fixed -+ * - * Revision 3.13 1994/01/25 19:04:21 kardel - * 94/01/23 reconcilation - * -diff -c parse/Makefile.kernel:1.1.1.3 parse/Makefile.kernel:3.9 -*** parse/Makefile.kernel:1.1.1.3 Thu Mar 3 10:35:48 1994 ---- parse/Makefile.kernel Thu Mar 3 10:35:48 1994 -*************** -*** 40,46 **** - rm -f parsestreams.o - - parsestreams.o: parsestreams.o.$(KARCH) -! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel" - - parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c $(DEFS) -I../include parsestreams.c ---- 40,46 ---- - rm -f parsestreams.o - - parsestreams.o: parsestreams.o.$(KARCH) -! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel" - - parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c $(DEFS) -I../include parsestreams.c -diff -c parse/README.new_clocks:1.1.1.3 parse/README.new_clocks:3.5 -*** parse/README.new_clocks:1.1.1.3 Thu Mar 3 10:35:52 1994 ---- parse/README.new_clocks Thu Mar 3 10:35:53 1994 -*************** -*** 23,28 **** ---- 23,29 ---- - LONG second; - LONG usecond; - LONG utcoffset; /* in seconds */ -+ time_t utcoffset; /* true utc time instead of date/time */ - LONG flags; /* current clock status */ - }; - -*************** -*** 52,57 **** ---- 53,65 ---- - PARSEB_S_PPS supports PPS time stamping - PARSEB_S_POSITION supports position information (GPS) - -+ If the utctime field is non zero this value will be take as -+ time code value. This allows for conversion routines that -+ already have the utc time value. The utctime field gives the seconds -+ since Jan 1st 1970, 0:00:00. The useconds field gives the respective -+ usec value. The fields for date and time (down to second resolution) -+ will be ignored. -+ - Conversion is done in the cvt_* routine in parse/clk_*.c files. look in - them for examples. The basic structure is: - -diff -c parse/parse.c:1.1.1.9 parse/parse.c:3.22 -*** parse/parse.c:1.1.1.9 Thu Mar 3 10:36:06 1994 ---- parse/parse.c Thu Mar 3 10:36:07 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp - * -! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp - * - * Parser module for reference clock - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp - * -! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp - * - * Parser module for reference clock - * -*************** -*** 556,561 **** ---- 556,564 ---- - register int i; - time_t t; - -+ if (clock->utctime) -+ return clock->utctime; /* if the conversion routine gets it right away - why not */ -+ - if (clock->year < 100) - clock->year += 1900; - -*************** -*** 628,633 **** ---- 631,639 ---- - t += clock->utcoffset; /* warp to UTC */ - - /* done */ -+ -+ clock->utctime = t; /* documentray only */ -+ - return t; - } - -*************** -*** 890,895 **** ---- 896,903 ---- - - if (parseio->parse_flags & PARSE_FIXED_FMT) - { -+ clock.utctime = 0; -+ - switch ((cvtrtc = clockformats[format]->convert ? clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : CVT_NONE) & CVT_MASK) - { - case CVT_FAIL: -*************** -*** 941,946 **** ---- 949,956 ---- - { - do - { -+ clock.utctime = 0; -+ - switch ((cvtrtc = (clockformats[format]->convert && !(clockformats[format]->flags & CVT_FIXEDONLY)) ? - clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : - CVT_NONE) & CVT_MASK) -*************** -*** 1148,1153 **** ---- 1158,1166 ---- - * History: - * - * parse.c,v -+ * Revision 3.22 1994/02/25 12:34:49 kardel -+ * allow for converter generated utc times -+ * - * Revision 3.21 1994/02/02 17:45:30 kardel - * rcs ids fixed - * -diff -c parse/util/testdcf.c:1.1.1.6 parse/util/testdcf.c:3.11 -*** parse/util/testdcf.c:1.1.1.6 Thu Mar 3 10:36:27 1994 ---- parse/util/testdcf.c Thu Mar 3 10:36:27 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp - * -! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp - * - * simple DCF77 100/200ms pulse test program (via 50Baud serial line) - * ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp - * -! * testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp - * - * simple DCF77 100/200ms pulse test program (via 50Baud serial line) - * -diff -c xntpd/Makefile.tmpl:1.1.1.18 xntpd/Makefile.tmpl:3.28 -*** xntpd/Makefile.tmpl:1.1.1.18 Thu Mar 3 10:38:13 1994 ---- xntpd/Makefile.tmpl Thu Mar 3 10:38:13 1994 -*************** -*** 34,40 **** - refclock_wwvb.c refclock_goes.c refclock_mx4200.c \ - refclock_parse.c refclock_as2201.c refclock_omega.c \ - refclock_tpro.c refclock_leitch.c refclock_irig.c \ -! refclock_msfees.c refclock_gpstm.c ntp_intres.c ntp_filegen.c - - OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \ - ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \ ---- 34,41 ---- - refclock_wwvb.c refclock_goes.c refclock_mx4200.c \ - refclock_parse.c refclock_as2201.c refclock_omega.c \ - refclock_tpro.c refclock_leitch.c refclock_irig.c \ -! refclock_msfees.c refclock_gpstm.c refclock_trak.c \ -! ntp_intres.c ntp_filegen.c - - OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \ - ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \ -*************** -*** 44,50 **** - refclock_wwvb.o refclock_goes.o refclock_mx4200.o \ - refclock_parse.o refclock_as2201.o refclock_omega.o \ - refclock_tpro.o refclock_leitch.o refclock_irig.o \ -! refclock_msfees.o refclock_gpstm.o ntp_intres.o ntp_filegen.o - - all: $(PROGRAM) - ---- 45,52 ---- - refclock_wwvb.o refclock_goes.o refclock_mx4200.o \ - refclock_parse.o refclock_as2201.o refclock_omega.o \ - refclock_tpro.o refclock_leitch.o refclock_irig.o \ -! refclock_msfees.o refclock_gpstm.o refclock_trak.o \ -! ntp_intres.o ntp_filegen.o - - all: $(PROGRAM) - -*************** -*** 136,141 **** ---- 138,146 ---- - - refclock_msfees.o: refclock_msfees.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c -+ -+ refclock_trak.o: refclock_trak.c -+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - - refclock_gpstm.o: refclock_gpstm.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c -diff -c xntpd/ntp_control.c:1.1.1.17 xntpd/ntp_control.c:3.26 -*** xntpd/ntp_control.c:1.1.1.17 Thu Mar 3 10:38:16 1994 ---- xntpd/ntp_control.c Thu Mar 3 10:38:17 1994 -*************** -*** 301,307 **** - static u_char clocktypes[] = { - CTL_SST_TS_NTP, /* REFCLK_NONE */ - CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */ -! CTL_SST_TS_HF, /* REFCLK_WWV_HEATH */ - CTL_SST_TS_HF, /* REFCLK_WWV_PST */ - CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */ - CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */ ---- 301,307 ---- - static u_char clocktypes[] = { - CTL_SST_TS_NTP, /* REFCLK_NONE */ - CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */ -! CTL_SST_TS_HF, /* REFCLK_GPS_TRAK */ - CTL_SST_TS_HF, /* REFCLK_WWV_PST */ - CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */ - CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */ -diff -c xntpd/refclock_conf.c:1.1.1.22 xntpd/refclock_conf.c:3.21 -*** xntpd/refclock_conf.c:1.1.1.22 Thu Mar 3 10:38:54 1994 ---- xntpd/refclock_conf.c Thu Mar 3 10:38:54 1994 -*************** -*** 113,119 **** - struct refclock *refclock_conf[] = { - &refclock_none, /* 0 REFCLK_NONE */ - &refclock_local, /* 1 REFCLK_LOCAL */ -! &refclock_none, /* 2 REFCLK_WWV_HEATH */ - &refclock_pst, /* 3 REFCLK_WWV_PST */ - &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */ - &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */ ---- 113,119 ---- - struct refclock *refclock_conf[] = { - &refclock_none, /* 0 REFCLK_NONE */ - &refclock_local, /* 1 REFCLK_LOCAL */ -! &refclock_trak, /* 2 REFCLK_GPS_TRAK */ - &refclock_pst, /* 3 REFCLK_WWV_PST */ - &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */ - &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */ -RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v -retrieving revision 1.1.1.12 -diff -c -r1.1.1.12 xntpd/refclock_parse.c -*** xntpd/refclock_parse.c:1.1.1.12 1994/02/22 21:57:57 ---- xntpd/refclock_parse.c 1994/03/03 09:49:54 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp - * -! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp - * - * generic reference clock driver for receivers - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp - * -! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp - * - * generic reference clock driver for receivers - * -*************** -*** 129,135 **** - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp"; - #endif - - /**=========================================================================== ---- 129,135 ---- - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp"; - #endif - - /**=========================================================================== -*************** -*** 1653,1659 **** - * done if no more characters are available - */ - FD_SET(fd, &fdmask); -! if (select(fd + 1, &fdmask, 0, 0, &null_time) == 0) - return; - } - } ---- 1653,1660 ---- - * done if no more characters are available - */ - FD_SET(fd, &fdmask); -! if ((i == 0) && -! (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)) - return; - } - } -*************** -*** 2823,2829 **** - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); -! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; ---- 2824,2830 ---- - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); -! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - - --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.26 b/usr.sbin/xntpd/patches/patch.26 deleted file mode 100644 index a55360d..0000000 --- a/usr.sbin/xntpd/patches/patch.26 +++ /dev/null @@ -1,36 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa24501; 5 Mar 94 21:23 EST -Received: from goofus.wustl.edu by louie.udel.edu id aa01087; 5 Mar 94 21:15 EST -Received: from mumps.pfcs.com by goofus.wustl.edu with UUCP id AA17154 - (5.67a+/IDA-1.5 for mills@udel.edu); Sat, 5 Mar 1994 20:15:06 -0600 -Received: by mumps.pfcs.com id AA09821 - (5.65c/IDA-1.4.4 for mills@udel.edu); Sat, 5 Mar 1994 19:10:18 -0600 -Date: Sat, 5 Mar 1994 19:10:18 -0600 -From: Harlan Stenn <harlan@mumps.pfcs.com> -Message-Id: <199403060110.AA09821@mumps.pfcs.com> -To: mills@udel.edu -Subject: xntpd/Makefile and 3.3l - -Dave, - -xntpd/Makefile doesn't get -DSYS_whatever and -DHAVE_xxx_TTYS "installed" -when the Makefile gets created. This is for OS=mips. - -Same for xntpdc/Makefile. - -A patch follows... - -Harlan - -PS - might you have a copy of the message I sent you a couple of weeks -ago where I asked about broadcast servers and clients and the ntp.conf -file? I was going to send it to the maling list but I lost my copy. - -machines/mips -3,4c3,4 -< DEFS= -< AUTHDEFS= -DDES -DMD5 -DSYS_MIPS -DHAVE_BSD_TTYS ---- -> DEFS= -DSYS_MIPS -DHAVE_BSD_TTYS -> AUTHDEFS= -DDES -DMD5 - diff --git a/usr.sbin/xntpd/patches/patch.27 b/usr.sbin/xntpd/patches/patch.27 deleted file mode 100644 index 5d450d4..0000000 --- a/usr.sbin/xntpd/patches/patch.27 +++ /dev/null @@ -1,86 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa23654; 11 Mar 94 7:49 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa14038; - 10 Mar 94 14:14 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA13885 (5.65c-6/7.3v-FAU); Thu, 10 Mar 1994 20:10:36 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA03872 (5.65c-6/7.3m-FAU); Thu, 10 Mar 1994 20:10:33 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199403101910.AA03872@faui43.informatik.uni-erlangen.de> -Subject: RAW dcf77 showstopper 8-(. -To: mills@udel.edu -Date: Thu, 10 Mar 94 20:10:25 MET -Cc: dpk@morgan.com, Frank.Kardel@informatik.uni-erlangen.de, - Piete.Brooks@cl.cam.ac.uk, jcs@bear.zoo.bt.co.uk -X-Mailer: ELM [version 2.3 PL11] - -Hi, my changes for 3.3m introduced a subtle reliability problem for -the cheap DCF77 receiver code - it only returned somtimes the -correct time 8-(. - -Well, here is the patch. (I'll post this one to the news group -also as it is a show stopper for the cheap clocks 8-(). So -don't be confused. - - -RCS file: /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v -retrieving revision 3.12 -diff -c -r3.12 clk_rawdcf.c -*** parse/clk_rawdcf.c:3.12 1994/02/20 13:04:39 ---- parse/clk_rawdcf.c 1994/03/10 19:00:43 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp - * -! * clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp - * - * Raw DCF77 pulse clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.13 1994/03/10 19:00:43 kardel Exp - * -! * clk_rawdcf.c,v 3.13 1994/03/10 19:00:43 kardel Exp - * - * Raw DCF77 pulse clock support - * -*************** -*** 245,250 **** ---- 245,251 ---- - parseprintf(DD_RAWDCF,("parse: convert_rawdcf: parity check passed\n")); - - clock->flags = PARSEB_S_ANTENNA|PARSEB_S_LEAP; -+ clock->utctime= 0; - clock->usecond= 0; - clock->second = 0; - clock->minute = ext_bf(buffer, DCF_M10, dcfparam->zerobits); -*************** -*** 528,534 **** - /* - * History: - * -! * clk_rawdcf.c,v - * Revision 3.12 1994/02/20 13:04:39 kardel - * parse add/delete second support - * ---- 529,538 ---- - /* - * History: - * -! * clk_rawdcf.c,v -! * Revision 3.13 1994/03/10 19:00:43 kardel -! * clear utctime field to avoid confusion on synthesize time stamps -! * - * Revision 3.12 1994/02/20 13:04:39 kardel - * parse add/delete second support - * - --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.28 b/usr.sbin/xntpd/patches/patch.28 deleted file mode 100644 index 37e2065..0000000 --- a/usr.sbin/xntpd/patches/patch.28 +++ /dev/null @@ -1,454 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa07183; 13 Mar 94 23:57 EST -Received: from hpsdlo.sdd.hp.com by louie.udel.edu id aa17483; - 13 Mar 94 23:50 EST -Received: from hpsdlz.sdd.hp.com by hpsdlo.sdd.hp.com with SMTP - (1.36.108.4/15.5+IOS 3.21+sdd) id AA07032; Sun, 13 Mar 1994 20:50:23 -0800 -Received: from localhost by hpsdlz.sdd.hp.com with SMTP - (1.36.108.4/15.5+IOS 3.21+sdd) id AA05726; Sun, 13 Mar 1994 20:50:21 -0800 -Message-Id: <9403140450.AA05726@hpsdlz.sdd.hp.com> -To: mills@udel.edu -Subject: patches for xntpd -Date: Sun, 13 Mar 1994 20:50:21 -0800 -From: Ken Stone <ken@sdd.hp.com> - - -Ok Dave, - -I guess I'll take a poke at the "m" version for cleanup and updates. This -should take care of the newly released 9.03 for s300/s400 which has the -adjtime(2) syscall. Also, cleanup in readiness for 10.0 all around. - - -- Ken - -P.S. How is your HP hardware/software deal going ? I haven't heard anything - lately. - - - -First do a "rm */hpux10+*" as I have renamed all that to hpux-adj ... that -9.03 blew me out of the water on the naming scheme :-) - -Then unshar the following ... it will add a few new files and give you -diff to apply (diffs.hpux). - - -#---------------------------------- cut here ---------------------------------- -# This is a shell archive. Remove anything before this line, -# then unpack it by saving it in a file and typing "sh file". -# -# Wrapped by Source Hacker <src@hpsdlz> on Sun Mar 13 20:47:57 1994 -# -# This archive contains: -# compilers/hpux-adj.cc compilers/hpux-adj.gcc -# machines/hpux-adj scripts/hpadjtime.sh -# diffs.hpux -# -# Error checking via wc(1) will be performed. -# Error checking via sum(1) will be performed. - -LANG=""; export LANG -PATH=/bin:/usr/bin:$PATH; export PATH - -if sum -r </dev/null >/dev/null 2>&1 -then - sumopt='-r' -else - sumopt='' -fi - -echo x - compilers/hpux-adj.cc -cat >compilers/hpux-adj.cc <<'@EOF' -COMPILER=cc +O1 -@EOF -set `sum $sumopt <compilers/hpux-adj.cc`; if test $1 -ne 22541 -then - echo ERROR: compilers/hpux-adj.cc checksum is $1 should be 22541 -fi -set `wc -lwc <compilers/hpux-adj.cc` -if test $1$2$3 != 1216 -then - echo ERROR: wc results of compilers/hpux-adj.cc are $* should be 1 2 16 -fi - -chmod 644 compilers/hpux-adj.cc - -echo x - compilers/hpux-adj.gcc -cat >compilers/hpux-adj.gcc <<'@EOF' -COMPILER=gcc -O2 -@EOF -set `sum $sumopt <compilers/hpux-adj.gcc`; if test $1 -ne 23593 -then - echo ERROR: compilers/hpux-adj.gcc checksum is $1 should be 23593 -fi -set `wc -lwc <compilers/hpux-adj.gcc` -if test $1$2$3 != 1217 -then - echo ERROR: wc results of compilers/hpux-adj.gcc are $* should be 1 2 17 -fi - -chmod 644 compilers/hpux-adj.gcc - -echo x - machines/hpux-adj -cat >machines/hpux-adj <<'@EOF' -SHELL= /bin/sh -RANLIB= ls # ar does the work of ranlib under System V -DEFS_LOCAL= -DREFCLOCK -DEFS= -DHAVE_TERMIOS -DSYS_HPUX=10 -AUTHDEFS= -DDES -DMD5 -CLOCKDEFS= -DLOCAL_CLOCK -COPTS= -INSTALL=$(TOP)scripts/install.sh -@EOF -set `sum $sumopt <machines/hpux-adj`; if test $1 -ne 42265 -then - echo ERROR: machines/hpux-adj checksum is $1 should be 42265 -fi -set `wc -lwc <machines/hpux-adj` -if test $1$2$3 != 826251 -then - echo ERROR: wc results of machines/hpux-adj are $* should be 8 26 251 -fi - -chmod 644 machines/hpux-adj - -echo x - scripts/hpadjtime.sh -cat >scripts/hpadjtime.sh <<'@EOF' -#! /bin/sh - -if [ -f /bin/uname -o -f /usr/bin/uname ]; then - set `uname -a | tr '[A-Z]' '[a-z]'` - case "$1" in - hp-ux) case "$3" in - *.10.*) val=1 ;; - *.09.03) case "$5" in - 9000/3*) val=1 ;; - *) val=0 ;; - esac ;; - *) val=0 ;; - esac - ;; - *) - esac -fi -exit $val -@EOF -set `sum $sumopt <scripts/hpadjtime.sh`; if test $1 -ne 1497 -then - echo ERROR: scripts/hpadjtime.sh checksum is $1 should be 1497 -fi -set `wc -lwc <scripts/hpadjtime.sh` -if test $1$2$3 != 1850287 -then - echo ERROR: wc results of scripts/hpadjtime.sh are $* should be 18 50 287 -fi - -chmod 755 scripts/hpadjtime.sh - -echo x - diffs.hpux -cat >diffs.hpux <<'@EOF' -*** xntp3.3m.orig/compilers/hpux.cc Thu Sep 2 13:19:56 1993 ---- xntp3.3m/compilers/hpux.cc Sun Mar 13 12:10:23 1994 -*************** -*** 1,2 **** -! COMPILER=cc -! COPTS=+O1 ---- 1 ---- -! COMPILER=cc +O1 -*** xntp3.3m.orig/compilers/hpux.gcc Thu Sep 2 13:19:59 1993 ---- xntp3.3m/compilers/hpux.gcc Sun Mar 13 12:10:29 1994 -*************** -*** 1,2 **** -! COMPILER=gcc -! COPTS=-O2 ---- 1 ---- -! COMPILER=gcc -O2 -*** xntp3.3m.orig/hints/hpux Fri Dec 3 02:28:57 1993 ---- xntp3.3m/hints/hpux Sun Mar 13 20:20:38 1994 -*************** -*** 1,59 **** - This file hopefully describes the whatever and however of how to get xntp -! running on hpux 8.0 and later s300, s700, and s800. - - First off, all the standard disclaimers hold here ... HP doesn't have anthing - to do with this stuff. I fool with it in my spare time because we use it and - because I like to. We just happen to have a lot of HP machines around here :-) -! Xntp has been in use here for several months and has a fair amount of mileage - on various HP platforms within the company. I can't really guarantee bug fixes - but I'd certainly like to hear about bugs and I won't hestitate to look at - any fixes sent to me. - -! Now lets talk OS. If you don't have 8.0 or later, pretty much hang it up now. -! This stuff has run here on 8.0 s300, s700, and s800. Its possible that it -! runs on 7.0 but I have not tried v3 code on 7.0 at all. - -! [Note that recent reports state that this release does in fact run on HP -! 300 and 400 boxes, which run 7.0 - Ed.] - -! Next, let me explain a bit about how this stuff works on HP-UX since we don't - have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed - daemon. Instead of the adjtime(2) system call, we use a library routine to - talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and - causes the clock to skew properly as needed. PLEASE NOTE that the adjtime - code provided here is NOT a general replacement for adjtime(2) ... use of -! this adjtime(3)/adjtimed(8) other than here may yield very odd results. - - What to do to get this stuff running ? - -! * cd .. -! * Say "make makeconfig" - -! * cd .. -! * Say "make", sit back for a few minutes. - - * cd authstuff - * Say "./authcert < certdata" and check the output. Every line should - end with "OK" ... if not, we got trouble. - * Now try "./authspeed auth.samplekeys". What we want to - remember here is the "authentication delay in CPU time" - -! * cd .. -! * Now we need to install this stuff ... make install will not work -! unless you have replaced the SYSV install command with a BSD -! compatible version. So ... the simplest thing to do is run -! make -n install and do manually what it would have done. - - * I'd suggest reading the xntp docs about now :-) ... seriously !! - -! * Check out the docs and the stuff in xntp/conf and build a config -! file ... put it in /usr/local/etc/xntp.conf (or where ever you -! defined the config file to be in Config). One thing we have -! added to this version of xntpd is a way to select config files -! if you are sharing /usr/local thru NFS or whatever. If the -! file /usr/local/etc/xntp.conf happens to be a directory, the files -! in that directory are searched until a match is found. The rules -! for a match are: - - 1. Our hostname - 2. default.<machine id> (as in default.375 or default.850) ---- 1,63 ---- -+ Last update: Sun Mar 13 15:05:31 PST 1994 -+ - This file hopefully describes the whatever and however of how to get xntp -! running on hpux 7.0 and later s300. s400, s700, and s800. - - First off, all the standard disclaimers hold here ... HP doesn't have anthing - to do with this stuff. I fool with it in my spare time because we use it and - because I like to. We just happen to have a lot of HP machines around here :-) -! Xntpd has been in use here for several years and has a fair amount of mileage - on various HP platforms within the company. I can't really guarantee bug fixes - but I'd certainly like to hear about bugs and I won't hestitate to look at - any fixes sent to me. - -! Now lets talk OS. If you don't have 7.0 or later, pretty much hang it up now. -! This stuff has run here on pretty much everything from 8.0 upward on s300, -! s700, and s800. It is known to run on 7.0 s300/s400 but all reports are -! from the field and not my personal experience. - -! If you are lucky enough to have a s300 or s400 with 9.03, then you no longer -! have to worry about adjtimed as HP-UX now has adjtime(2). The rest of you -! will have to wait on 10.0 which will have adjtime(2) and a supported though -! a bit older version of xntpd. - -! Next, let me explain a bit about how this stuff works on HP-UX's that do not - have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed - daemon. Instead of the adjtime(2) system call, we use a library routine to - talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and - causes the clock to skew properly as needed. PLEASE NOTE that the adjtime - code provided here is NOT a general replacement for adjtime(2) ... use of -! this adjtime(3)/adjtimed(8) other than with xntpd may yield very odd results. - - What to do to get this stuff running ? - -! * If you are running an OS less than 10.0 or do not have a s300/s400 -! with 9.03 or better -! -> cd machines -! -> vi hpux -! -> (change -DSYS_HPUX=? to match whatever you are running [7,8,9]) -! -> cd .. - -! * Say "make makeconfig" - -+ * Say "make", sit back for a few minutes. -+ - * cd authstuff - * Say "./authcert < certdata" and check the output. Every line should - end with "OK" ... if not, we got trouble. - * Now try "./authspeed auth.samplekeys". What we want to - remember here is the "authentication delay in CPU time" -+ * cd .. - -! * Say "make install" - - * I'd suggest reading the xntp docs about now :-) ... seriously !! - -! * One thing I have added to this version of xntpd is a way to select -! config files if you are sharing /usr/local thru NFS or whatever. -! If the file /usr/local/etc/xntp.conf happens to be a directory, the -! files in that directory are searched until a match is found. The -! rules for a match are: - - 1. Our hostname - 2. default.<machine id> (as in default.375 or default.850) -*************** -*** 72,76 **** ---- 76,92 ---- - - * On some 320's and 835's we have had to run adjtimed with "-p 45" or - so to get rid of syslog messages about "last adjust did not finish". -+ -+ * At 9.0, there is a problem with DIAGMON (patch available from the -+ response center) which causes it to delete the message queue that -+ adjtimed/xntpd use to communicate. (see next note for result) -+ -+ * Xntpd has been known to get really ticked off when adjtime() fails -+ which is usually only while running the emulation code on HP-UX. -+ When it gets mad, it usually jumps the clock into never never land. -+ Possible reasons for this are adjtimed being killed or just never -+ started or adjtimed being completely swapped out on a really busy -+ machine (newer adjtimed try to lock themselves in memory to prevent -+ this one). - - Anything else ... just drop me a line at ken@sdd.hp.com -*** xntp3.3m.orig/include/ntp_machine.h Sun Feb 27 19:34:59 1994 ---- xntp3.3m/include/ntp_machine.h Sun Mar 13 15:35:33 1994 -*************** -*** 334,341 **** - #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0) - #define NO_SIGNED_CHAR_DECL - #define LOCK_PROCESS -- #define HAVE_NO_NICE /* HPUX uses rtprio instead */ - #define RETSIGTYPE void - #if (SYS_HPUX < 10) - #define NOKMEM - #else ---- 334,345 ---- - #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0) - #define NO_SIGNED_CHAR_DECL - #define LOCK_PROCESS - #define RETSIGTYPE void -+ #if (SYS_HPUX < 9) -+ #define HAVE_NO_NICE /* HPUX uses rtprio instead */ -+ #else -+ #define HAVE_BSD_NICE /* new at 9.X */ -+ #endif - #if (SYS_HPUX < 10) - #define NOKMEM - #else -*** xntp3.3m.orig/lib/Makefile.tmpl Wed Feb 2 21:20:13 1994 ---- xntp3.3m/lib/Makefile.tmpl Sun Mar 13 16:27:50 1994 -*************** -*** 49,55 **** - $(LIBNAME).a: $(OBJS) - ar rv $@ $? - -rm -f $? -! @if ( hp-pa || hp-mc680x0 ) > /dev/null 2>&1; then \ - ( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \ - else \ - :; \ ---- 49,55 ---- - $(LIBNAME).a: $(OBJS) - ar rv $@ $? - -rm -f $? -! @if ( ../scripts/hpadjtime.sh ) > /dev/null 2>&1; then \ - ( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \ - else \ - :; \ -*** xntp3.3m.orig/scripts/Guess.sh Wed Jan 26 15:26:03 1994 ---- xntp3.3m/scripts/Guess.sh Sun Mar 13 14:10:19 1994 -*************** -*** 40,46 **** - guess="ultrix" - ;; - hp-ux) case "$3" in -! *.10.*) guess="hpux10+" ;; - *) guess="hpux" ;; - esac - ;; ---- 40,50 ---- - guess="ultrix" - ;; - hp-ux) case "$3" in -! *.10.*) guess="hpux-adj" ;; -! *.09.03) case "$5" in -! 9000/3*) guess="hpux-adj" ;; -! *) guess="hpux" ;; -! esac ;; - *) guess="hpux" ;; - esac - ;; -*** xntp3.3m.orig/util/tickadj.c Wed Feb 2 21:20:17 1994 ---- xntp3.3m/util/tickadj.c Sun Mar 13 13:55:53 1994 -*************** -*** 388,393 **** ---- 388,409 ---- - #endif - #endif - -+ #if defined(SYS_HPUX) -+ #define X_TICKADJ 0 -+ #define X_TICK 1 -+ #define X_DEF -+ static struct nlist nl[] = -+ #ifdef hp9000s300 -+ { {"_tickadj"}, -+ {"_old_tick"}, -+ #else -+ { {"tickadj"}, -+ {"old_tick"}, -+ #endif -+ {""}, -+ }; -+ #endif -+ - #if !defined(X_DEF) - #define X_TICKADJ 0 - #define X_TICK 1 -*************** -*** 408,413 **** ---- 424,430 ---- - "/kernel/unix", - "/386bsd", - "/netbsd", -+ "/hp-ux", - NULL - }; - struct stat stbuf; -*** xntp3.3m.orig/xntpd/ntp_loopfilter.c Sun Feb 27 19:36:16 1994 ---- xntp3.3m/xntpd/ntp_loopfilter.c Sun Mar 13 14:03:54 1994 -*************** -*** 349,356 **** - } - } - #endif /* HAVE_BSD_TTYS */ -- fdpps = fd232; - #endif /* HPUXGADGET */ - - /* - * Insert in device list. ---- 349,356 ---- - } - } - #endif /* HAVE_BSD_TTYS */ - #endif /* HPUXGADGET */ -+ fdpps = fd232; - - /* - * Insert in device list. -@EOF -set `sum $sumopt <diffs.hpux`; if test $1 -ne 46307 -then - echo ERROR: diffs.hpux checksum is $1 should be 46307 -fi -set `wc -lwc <diffs.hpux` -if test $1$2$3 != 288172410391 -then - echo ERROR: wc results of diffs.hpux are $* should be 288 1724 10391 -fi - -chmod 664 diffs.hpux - -exit 0 - - - diff --git a/usr.sbin/xntpd/patches/patch.29 b/usr.sbin/xntpd/patches/patch.29 deleted file mode 100644 index ee161a2..0000000 --- a/usr.sbin/xntpd/patches/patch.29 +++ /dev/null @@ -1,52 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa24239; 16 Mar 94 18:01 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa18720; - 16 Mar 94 17:57 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA25324 (5.65c-6/7.3v-FAU); Wed, 16 Mar 1994 23:57:39 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA18230 (5.65c-6/7.3m-FAU); Wed, 16 Mar 1994 23:57:37 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199403162257.AA18230@faui43.informatik.uni-erlangen.de> -Subject: hpadjtime.sh -To: mills@udel.edu, ken@sdd.hp.com -Date: Wed, 16 Mar 94 23:57:32 MET -Return-Receipt-To: "Frank Kardel" <Frank.Kardel@informatik.uni-erlangen.de> -X-Mailer: ELM [version 2.3 PL11] - -Hi, 3.3n is somewhat broken... - -First of all - - scripts/hpadjtime.sh is missing (it's in patch.28) - -And - - scripts/hpadjtime.sh is broken for non hp-ux - (will try to build adjtime libs on non hp-ux architectures - as a default value was no set) - -Please use this version of scripts/hpadjtime.sh for increased safety: - -#! /bin/sh -val=1 -if [ -f /bin/uname -o -f /usr/bin/uname ]; then - set `uname -a | tr '[A-Z]' '[a-z]'` - case "$1" in - hp-ux) case "$3" in - *.10.*) val=1 ;; - *.09.03) case "$5" in - 9000/3*) val=1 ;; - *) val=0 ;; - esac ;; - *) val=0 ;; - esac - ;; - *) - esac -fi -exit $val - --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.3 b/usr.sbin/xntpd/patches/patch.3 deleted file mode 100644 index beba805..0000000 --- a/usr.sbin/xntpd/patches/patch.3 +++ /dev/null @@ -1,3032 +0,0 @@ -diff -c TODO:1.1.1.3 TODO:3.5 -*** TODO:1.1.1.3 Wed Jan 26 21:46:47 1994 ---- TODO Wed Jan 26 21:46:48 1994 -*************** -*** 1,5 **** - # -! # TODO,v 3.4 1994/01/23 17:19:06 kardel Exp - # - This file contains problems known to the authors that still need to be done. - We would appreciate if you could spare some of your time to look through ---- 1,5 ---- - # -! # TODO,v 3.5 1994/01/25 19:03:55 kardel Exp - # - This file contains problems known to the authors that still need to be done. - We would appreciate if you could spare some of your time to look through -diff -c doc/xntpd.8:1.1.1.11 doc/xntpd.8:3.21 -*** doc/xntpd.8:1.1.1.11 Wed Jan 26 21:47:54 1994 ---- doc/xntpd.8 Wed Jan 26 21:47:55 1994 -*************** -*** 74,79 **** ---- 74,85 ---- - ] [ - .B -t - .I trustedkey -+ ] [ -+ .B -v -+ .I variable -+ ] [ -+ .B -V -+ .I variable - ] - .SH DESCRIPTION - .I Xntpd -*************** -*** 140,145 **** ---- 146,155 ---- - specify a directory to be used for creating statistics files - .Ip -t 8 - add a key number to the trusted key list -+ .Ip -v 8 -+ add a system variable -+ .Ip -V 8 -+ add a system variable listed by default - .SH "CONFIGURATION FILE OPTIONS" - .IR Xntpd 's - configuration file is relatively free format. Comments, which may be -*************** -*** 494,499 **** ---- 504,534 ---- - This command is obsolete and not available in this version of - .I xntpd. - .PP -+ .B setvar -+ .I variable -+ .I [default] -+ .PP -+ This command adds an additional system variable. These variables can be -+ used to distribute additional information such as the access policy. If -+ the variable of the from <name>=<value> is followed by the -+ .I default -+ keyword the variable will be listed as part of the default system -+ variables (ntpq rv command). These additional variables serve informational -+ purposes only. They are not related to the protocol other that they can be -+ listed. The known protocol variables will always overide any variables defined -+ via the -+ .I setvar -+ mechanism. -+ .PP -+ There are three special variables that contain the names of all variable of -+ the same group. The -+ .I sys_var_list -+ holds the names of all system variables. The -+ .I peer_var_list -+ holds the names of all peer variables and the -+ .I clock_var_list -+ hold the names of the reference clock variables. -+ .PP - .B resolver - .I /path/xntpres - .PP -*************** -*** 1093,1101 **** - time. - On the availability of PPS information the - .I time2 -! fudge factor show the difference betwteen the PPS time stamp and the reception -! time stamp of the serial signal. This parameter is read only attempts to -! set this parameter will be ignored. - The - .I flag0 - enables input filtering. This a median filter with continuous sampling. The ---- 1128,1140 ---- - time. - On the availability of PPS information the - .I time2 -! fudge factor defines the skew between the PPS time stamp and the reception -! time stamp of the PPS signal. This parameter is usually 0 as usually -! the PPS signal is believed in time and OS delays should be corrected -! in the machine specific section of the kernel driver. -! .I time2 -! needs only be set when the actial PPS signal is delayed for some -! reason. - The - .I flag0 - enables input filtering. This a median filter with continuous sampling. The -*************** -*** 1109,1121 **** - .I ntpq - timecode variable - .PP -! The timecode variable in the ntpq read clock variable command contains several -! fields. The first field is the local time in Unix format. The second field is -! the offset to UTC (format HHMM). The currently active receiver flags are listed -! next. Additional feature flags of the receiver are optionally listed in paranthesis. -! The actual time code is enclosed in angle brackets < >. A qualification of the -! decoded time code format is following the time code. The last piece of information -! is the overall running time and the accumulated times for the clock event states. - .PP - Unit encoding - .PP ---- 1148,1172 ---- - .I ntpq - timecode variable - .PP -! The ntpq read clock variables command list several variables. These -! hold followinf information: -! .I refclock_time -! is the local time with the offset to UTC (format HHMM). -! The currently active receiver flags are listed in -! .I refclock_status. -! Additional feature flags of the receiver are optionally listed in paranthesis. -! The actual time code is listed in -! .I timecode. -! A qualification of the decoded time code format is following in -! .I refclock_format. -! The last piece of information is the overall running time and the accumulated -! times for the clock event states in -! .I refclock_states. -! When PPS information is present additional variable are available. -! .I refclock_ppstime -! lists then the PPS timestamp and -! .I refclock_ppsskew -! lists the difference between RS232 derived timestamp and the PPS timestamp. - .PP - Unit encoding - .PP -diff -c include/ntp_control.h:1.1.1.5 include/ntp_control.h:3.6 -*** include/ntp_control.h:1.1.1.5 Wed Jan 26 21:48:21 1994 ---- include/ntp_control.h Wed Jan 26 21:48:21 1994 -*************** -*** 163,171 **** - #define CS_SYSTEM 17 - #define CS_KEYID 18 - #define CS_REFSKEW 19 -! #define CS_VERSION 20 - -! #define CS_MAXCODE CS_VERSION - - /* - * Peer variables we understand ---- 163,171 ---- - #define CS_SYSTEM 17 - #define CS_KEYID 18 - #define CS_REFSKEW 19 -! #define CS_VARLIST 20 - -! #define CS_MAXCODE CS_VARLIST - - /* - * Peer variables we understand -*************** -*** 204,212 **** - #define CP_SENT 32 - #define CP_FILTERROR 33 - #define CP_FLASH 34 -! #define CP_DISP 35 -! #define CP_MAXCODE CP_DISP - - /* - * Clock variables we understand - */ ---- 204,213 ---- - #define CP_SENT 32 - #define CP_FILTERROR 33 - #define CP_FLASH 34 -! #define CP_VARLIST 35 - -+ #define CP_MAXCODE CP_VARLIST -+ - /* - * Clock variables we understand - */ -*************** -*** 222,229 **** - #define CC_FUDGEVAL2 10 - #define CC_FLAGS 11 - #define CC_DEVICE 12 - -! #define CC_MAXCODE CC_DEVICE - - /* - * Definition of the structure used internally to hold trap information. ---- 223,231 ---- - #define CC_FUDGEVAL2 10 - #define CC_FLAGS 11 - #define CC_DEVICE 12 -+ #define CC_VARLIST 13 - -! #define CC_MAXCODE CC_VARLIST - - /* - * Definition of the structure used internally to hold trap information. -diff -c include/ntp_filegen.h:1.1.1.3 include/ntp_filegen.h:3.7 -*** include/ntp_filegen.h:1.1.1.3 Wed Jan 26 21:48:22 1994 ---- include/ntp_filegen.h Wed Jan 26 21:48:22 1994 -*************** -*** 1,5 **** - /* -! * ntp_filegen.h,v 3.6 1993/09/01 21:51:24 kardel Exp - * - * definitions for NTP file generations support - * ---- 1,5 ---- - /* -! * ntp_filegen.h,v 3.7 1994/01/25 19:04:16 kardel Exp - * - * definitions for NTP file generations support - * -diff -c include/ntp_machine.h:1.1.1.9 include/ntp_machine.h:1.24 -*** include/ntp_machine.h:1.1.1.9 Wed Jan 26 21:48:27 1994 ---- include/ntp_machine.h Wed Jan 26 21:48:27 1994 -*************** -*** 123,134 **** - - HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ? - - You could just put the defines on the DEFS line in machines/<os> file. - I don't since there are lost of different types compiler that a systemm might - have, some that can do proto typing and others that cannot on the saem system. - I get a chanse to twiddle some of the configuration paramasters at compile - time based on compler/machine combinatsions by using this include file. -! See convex, aix and sun configurations see how complex it get. - - */ - ---- 123,138 ---- - - HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ? - -+ DEFINITIONS FOR SYSTEM && PROCESSOR -+ STR_SYSTEM - value of system variable -+ STR_PROCESSOR - value of processor variable -+ - You could just put the defines on the DEFS line in machines/<os> file. - I don't since there are lost of different types compiler that a systemm might - have, some that can do proto typing and others that cannot on the saem system. - I get a chanse to twiddle some of the configuration paramasters at compile - time based on compler/machine combinatsions by using this include file. -! See convex, aix and sun configurations see how complex it gets. - - */ - -*************** -*** 152,157 **** ---- 156,164 ---- - #endif - #endif /*_BSD */ - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/AIX" -+ #endif - #endif /* RS6000 */ - - /* -*************** -*** 166,171 **** ---- 173,181 ---- - #define RETSIGTYPE void - #define NTP_SYSCALL_GET 132 - #define NTP_SYSCALL_ADJ 147 -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/SunOS 4.x" -+ #endif - #endif - - /* -*************** -*** 182,188 **** ---- 192,201 ---- - #define NTP_POSIX_SOURCE - #define HAVE_ATT_SETPGRP - #define HAVE_ATT_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/SINIX-M" - #endif -+ #endif - - /* - * SunOS 5.1 or SunOS 5.2 or Solaris 2.1 or Solaris 2.2 -*************** -*** 198,203 **** ---- 211,219 ---- - #define HAVE_ATT_SETPGRP - #define HAVE_ATT_NICE - #define UDP_WILDCARD_DELIVERY -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Solaris 2.x" -+ #endif - #endif - - /* -*************** -*** 221,227 **** ---- 237,246 ---- - #define NTP_POSIX_SOURCE - #define HAVE_ATT_SETPGRP - #endif -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/ConvexOS" - #endif -+ #endif - - /* - * IRIX 4.X and IRIX 5.x -*************** -*** 235,240 **** ---- 254,262 ---- - #define HAVE_ATT_SETPGRP - #define HAVE_BSD_NICE - #define NTP_POSIX_SOURCE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/IRIX" -+ #endif - #endif - - /* -*************** -*** 247,253 **** ---- 269,278 ---- - #define HAVE_BSD_NICE - #define RETSIGTYPE void - #define NTP_SYSCALLS_STD -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Ultrix" - #endif -+ #endif - - /* - * AUX -*************** -*** 272,277 **** ---- 297,305 ---- - #define HAVE_BSD_TTYS - #define LOG_NTP LOG_LOCAL1 - #define HAVE_SIGNALED_IO -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/AUX" -+ #endif - #endif - - /* -*************** -*** 283,289 **** ---- 311,320 ---- - #define HAVE_BSD_NICE - #define HAVE_N_UN - #undef NTP_POSIX_SOURCE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Next" - #endif -+ #endif - - /* - * HPUX -*************** -*** 301,306 **** ---- 332,340 ---- - #else - #define HAVE_READKMEM - #endif -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/HPUX" -+ #endif - #endif - - /* -*************** -*** 311,316 **** ---- 345,353 ---- - #define HAVE_LIBKVM - #define NTP_POSIX_SOURCE - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/BSDI" -+ #endif - #define HAVE_BSD_TTYS - #endif - -*************** -*** 327,332 **** ---- 364,372 ---- - * along with a standard name one day ! */ - #define ntp_adjtime __adjtimex - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Linux" -+ #endif - #endif - - /* -*************** -*** 338,344 **** ---- 378,387 ---- - #define HAVE_READKMEM - #define NTP_POSIX_SOURCE - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/*BSD" - #endif -+ #endif - - /* - * DECOSF1 -*************** -*** 349,354 **** ---- 392,400 ---- - #define NTP_POSIX_SOURCE - #define NTP_SYSCALLS_STD - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/DECOSF1" -+ #endif - #endif - - /* -*************** -*** 358,364 **** ---- 404,413 ---- - #define HAVE_READKMEM - #define S_CHAR_DEFINED - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/I386" - #endif -+ #endif - - /* - * Mips -*************** -*** 366,371 **** ---- 415,423 ---- - #if defined(SYS_MIPS) - #define NOKMEM - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Mips" -+ #endif - #endif - - /* -*************** -*** 373,379 **** ---- 425,434 ---- - */ - #if defined(SYS_SEQUENT) - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Sequent Dynix 3" - #endif -+ #endif - - /* - * PTX -*************** -*** 407,412 **** ---- 462,470 ---- - typedef unsigned short u_short; - typedef unsigned long u_long; - #endif -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Sequent PTX" -+ #endif - #endif - - -*************** -*** 417,423 **** ---- 475,484 ---- - #define NO_SIGNED_CHAR_DECL - #define HAVE_READKMEM - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Sony" - #endif -+ #endif - - /* - * VAX -*************** -*** 426,431 **** ---- 487,495 ---- - #define NO_SIGNED_CHAR_DECL - #define HAVE_READKMEM - #define HAVE_BSD_NICE -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/VAX" -+ #endif - #endif - - /* -*************** -*** 445,455 **** - #define LOCK_PROCESS - #define SYSV_TIMEOFDAY - #define SIZE_RETURNED_IN_BUFFER -! #endif -! -! #ifdef STREAM /* STREAM implies TERMIOS */ -! #ifndef HAVE_TERMIOS -! #define HAVE_TERMIOS - #endif - #endif - ---- 509,516 ---- - #define LOCK_PROCESS - #define SYSV_TIMEOFDAY - #define SIZE_RETURNED_IN_BUFFER -! #ifndef STR_SYSTEM -! #define STR_SYSTEM "UNIX/SysVR4" - #endif - #endif - -*************** -*** 464,469 **** ---- 525,539 ---- - #define NTP_SYSCALLS_STD - #define USE_PROTOTYPES - #define UDP_WILDCARD_DELIVERY -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/DOMAINOS" -+ #endif -+ #endif -+ -+ #ifdef STREAM /* STREAM implies TERMIOS */ -+ #ifndef HAVE_TERMIOS -+ #define HAVE_TERMIOS -+ #endif - #endif - - #ifndef RETSIGTYPE -diff -c include/ntp_refclock.h:1.1.1.8 include/ntp_refclock.h:3.8 -*** include/ntp_refclock.h:1.1.1.8 Wed Jan 26 21:48:28 1994 ---- include/ntp_refclock.h Wed Jan 26 21:48:28 1994 -*************** -*** 75,84 **** - LONG fudgeval2; - u_char currentstatus; - u_char lastevent; -! u_char unused[1]; - }; - -- - /* - * Reference clock I/O structure. Used to provide an interface between - * the reference clock drivers and the I/O module. ---- 75,84 ---- - LONG fudgeval2; - u_char currentstatus; - u_char lastevent; -! u_char unused; -! struct ctl_var *kv_list; /* additional variables */ - }; - - /* - * Reference clock I/O structure. Used to provide an interface between - * the reference clock drivers and the I/O module. -diff -c include/ntpd.h:1.1.1.6 include/ntpd.h:1.5 -*** include/ntpd.h:1.1.1.6 Wed Jan 26 21:48:35 1994 ---- include/ntpd.h Wed Jan 26 21:48:35 1994 -*************** -*** 1,4 **** -! /* ntpd.h,v 3.1 1993/07/06 01:07:03 jbj Exp - * ntpd.h - Prototypes for xntpd. - */ - ---- 1,4 ---- -! /* - * ntpd.h - Prototypes for xntpd. - */ - -*************** -*** 21,26 **** ---- 21,55 ---- - extern void process_control P((struct recvbuf *, int)); - extern void report_event P((int, struct peer *)); - -+ /* ntp_control.c */ -+ /* -+ * Structure for translation tables between internal system -+ * variable indices and text format. -+ */ -+ struct ctl_var { -+ u_short code; -+ u_short flags; -+ char *text; -+ }; -+ /* -+ * Flag values -+ */ -+ #define CAN_READ 0x01 -+ #define CAN_WRITE 0x02 -+ -+ #define DEF 0x20 -+ #define PADDING 0x40 -+ #define EOV 0x80 -+ -+ #define RO (CAN_READ) -+ #define WO (CAN_WRITE) -+ #define RW (CAN_READ|CAN_WRITE) -+ -+ extern char * add_var P((struct ctl_var **, unsigned long, int)); -+ extern void free_varlist P((struct ctl_var *)); -+ extern void set_var P((struct ctl_var **, char *, unsigned long, int)); -+ extern void set_sys_var P((char *, unsigned long, int)); -+ - /* ntp_intres.c */ - extern void ntp_intres P((void)); - -diff -c include/parse.h:1.1.1.6 include/parse.h:3.13 -*** include/parse.h:1.1.1.6 Wed Jan 26 21:48:36 1994 ---- include/parse.h Wed Jan 26 21:48:36 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp - * -! * parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp - * -! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg -*************** -*** 15,21 **** - #ifndef __PARSE_H__ - #define __PARSE_H__ - #if !(defined(lint) || defined(__GNUC__)) -! static char parsehrcsid[]="parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp FAU"; - #endif - - #include "ntp_types.h" ---- 15,21 ---- - #ifndef __PARSE_H__ - #define __PARSE_H__ - #if !(defined(lint) || defined(__GNUC__)) -! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU"; - #endif - - #include "ntp_types.h" -*************** -*** 365,370 **** ---- 365,373 ---- - * History: - * - * parse.h,v -+ * Revision 3.13 1994/01/25 19:04:21 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.12 1994/01/23 17:23:05 kardel - * 1994 reconcilation - * -diff -c include/parse_conf.h:1.1.1.5 include/parse_conf.h:3.5 -*** include/parse_conf.h:1.1.1.5 Wed Jan 26 21:48:37 1994 ---- include/parse_conf.h Wed Jan 26 21:48:37 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/include/parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp - * -! * parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp - * - * Copyright (c) 1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/include/parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp - * -! * parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp - * - * Copyright (c) 1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg -*************** -*** 15,21 **** - #ifndef __PARSE_CONF_H__ - #define __PARSE_CONF_H__ - #if !(defined(lint) || defined(__GNUC__)) -! static char dcfhrcsid[]="parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp FAU"; - #endif - - /* ---- 15,21 ---- - #ifndef __PARSE_CONF_H__ - #define __PARSE_CONF_H__ - #if !(defined(lint) || defined(__GNUC__)) -! static char dcfhrcsid[]="parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp FAU"; - #endif - - /* -diff -c include/sys/parsestreams.h:1.1.1.6 include/sys/parsestreams.h:3.11 -*** include/sys/parsestreams.h:1.1.1.6 Wed Jan 26 21:48:44 1994 ---- include/sys/parsestreams.h Wed Jan 26 21:48:44 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/include/sys/parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp - * -! * parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/include/sys/parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp - * -! * parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg -*************** -*** 13,19 **** - */ - - #if !(defined(lint) || defined(__GNUC__)) -! static char parse77hrcsid[]="parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp"; - #endif - - #undef PARSEKERNEL ---- 13,19 ---- - */ - - #if !(defined(lint) || defined(__GNUC__)) -! static char parse77hrcsid[]="parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp"; - #endif - - #undef PARSEKERNEL -diff -c kernel/Makefile.tmpl:1.1.1.3 kernel/Makefile.tmpl:3.6 -*** kernel/Makefile.tmpl:1.1.1.3 Wed Jan 26 21:48:49 1994 ---- kernel/Makefile.tmpl Wed Jan 26 21:48:49 1994 -*************** -*** 1,7 **** - # -! # /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.5 1994/01/23 17:37:53 kardel Exp - # -- # - # parse routine that could be used in two places - # - COMPILER= cc ---- 1,6 ---- - # -! # /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.6 1994/01/25 19:04:35 kardel Exp - # - # parse routine that could be used in two places - # - COMPILER= cc -diff -c lib/systime.c:1.1.1.10 lib/systime.c:1.7 -*** lib/systime.c:1.1.1.10 Wed Jan 26 21:50:00 1994 ---- lib/systime.c Wed Jan 26 21:50:00 1994 -*************** -*** 238,273 **** - #endif - } - -- sys_clock_offset.l_ui = offset_i; -- sys_clock_offset.l_uf = offset_f; -- - if (adjtime(&adjtv, &oadjtv) < 0) { - syslog(LOG_ERR, "Can't do time adjustment: %m"); - rval = 0; -! } else - rval = 1; - - #ifdef DEBUGRS6000 -! syslog(LOG_ERR, "adj_systime(%s): offset = %s%s\n", -! mfptoa((adj<0?-1:0), adj, 9), isneg?"-":"", -! umfptoa(offset_i, offset_f, 9)); -! syslog(LOG_ERR, "%d %d %d %d\n", (int) adjtv.tv_sec, -! (int) adjtv.tv_usec, (int) oadjtv.tv_sec, (int) -! oadjtv.tv_usec); - #endif /* DEBUGRS6000 */ - -! if ((oadjtv.tv_sec != 0 || oadjtv.tv_usec != 0) && (max_no_complete > 0)) { -! sTVTOTS(&oadjtv, &oadjts); -! L_ADD(&sys_clock_offset, &oadjts); -! syslog(LOG_WARNING, "Previous time adjustment didn't complete"); - #ifdef DEBUG -! if (debug > 4) -! syslog(LOG_DEBUG, -! "Previous adjtime() incomplete, residual = %s\n", -! tvtoa(&oadjtv)); - #endif -! if (--max_no_complete == 0) syslog(LOG_WARNING, -! "*** No more 'Prev time adj didn't complete'"); - } - return(rval); - } ---- 238,277 ---- - #endif - } - - if (adjtime(&adjtv, &oadjtv) < 0) { - syslog(LOG_ERR, "Can't do time adjustment: %m"); - rval = 0; -! } else { -! sys_clock_offset.l_ui = offset_i; -! sys_clock_offset.l_uf = offset_f; - rval = 1; - - #ifdef DEBUGRS6000 -! syslog(LOG_ERR, "adj_systime(%s): offset = %s%s\n", -! mfptoa((adj<0?-1:0), adj, 9), isneg?"-":"", -! umfptoa(offset_i, offset_f, 9)); -! syslog(LOG_ERR, "%d %d %d %d\n", (int) adjtv.tv_sec, -! (int) adjtv.tv_usec, (int) oadjtv.tv_sec, (int) -! oadjtv.tv_usec); - #endif /* DEBUGRS6000 */ - -! if (oadjtv.tv_sec != 0 || oadjtv.tv_usec != 0) { -! sTVTOTS(&oadjtv, &oadjts); -! L_ADD(&sys_clock_offset, &oadjts); -! if (max_no_complete > 0) { -! syslog(LOG_WARNING, -! "Previous time adjustment didn't complete"); - #ifdef DEBUG -! if (debug > 4) -! syslog(LOG_DEBUG, -! "Previous adjtime() incomplete, residual = %s\n", -! tvtoa(&oadjtv)); - #endif -! if (--max_no_complete == 0) -! syslog(LOG_WARNING, -! "*** No more 'Prev time adj didn't complete'"); -! } -! } - } - return(rval); - } -diff -c ntpq/ntpq.c:1.1.1.20 ntpq/ntpq.c:3.20 -*** ntpq/ntpq.c:1.1.1.20 Wed Jan 26 21:50:59 1994 ---- ntpq/ntpq.c Wed Jan 26 21:50:59 1994 -*************** -*** 2577,2582 **** ---- 2577,2583 ---- - register char *cp; - register char *np; - register char *cpend; -+ int quoted = 0; - static char name[MAXVARLEN]; - static char value[MAXVALLEN]; - -*************** -*** 2623,2630 **** - while (cp < cpend && (isspace(*cp) && *cp != '\r' && *cp != '\n')) - cp++; - np = value; -! while (cp < cpend && *cp != ',') -! *np++ = *cp++; - while (np > value && isspace(*(np-1))) - np--; - *np = '\0'; ---- 2624,2634 ---- - while (cp < cpend && (isspace(*cp) && *cp != '\r' && *cp != '\n')) - cp++; - np = value; -! while (cp < cpend && ((*cp != ',') || quoted)) -! { -! quoted ^= ((*np++ = *cp++) == '"'); -! } -! - while (np > value && isspace(*(np-1))) - np--; - *np = '\0'; -diff -c parse/Makefile.kernel:1.1.1.2 parse/Makefile.kernel:3.8 -*** parse/Makefile.kernel:1.1.1.2 Wed Jan 26 21:51:11 1994 ---- parse/Makefile.kernel Wed Jan 26 21:51:11 1994 -*************** -*** 30,46 **** - ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a - @echo "--- Install 'parse' in /kernel/strmod for automatic loading" - -! mparsestreams.o: parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c - ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \ - microtime.o - rm -f parsestreams.o -! @echo "--- You may load mparsestreams.o via 'modload mparsestreams.o' into the kernel" - -! parsestreams.o: parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c $(DEFS) -I../include parsestreams.c -! ld -r -o $@ $@ ../lib/libntp.a libparse_kernel.a -! @echo "--- You may load parsestreams.o via 'modload parsestreams.o' into the kernel" - - microtime.o: $(MICROTIME) assym.s - cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i ---- 30,51 ---- - ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a - @echo "--- Install 'parse' in /kernel/strmod for automatic loading" - -! mparsestreams.o: mparsestreams.o.$(KARCH) -! @echo "--- You may load mparsestreams.o.$(KARCH) via 'modload mparsestreams.o.$(KARCH)' into the kernel" -! -! mparsestreams.o.$(KARCH): parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c - ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \ - microtime.o - rm -f parsestreams.o -! -! parsestreams.o: parsestreams.o.$(KARCH) -! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel" - -! parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h - cc -c $(DEFS) -I../include parsestreams.c -! ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a -! rm -f parsestreams.o - - microtime.o: $(MICROTIME) assym.s - cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i -diff -c parse/clk_dcf7000.c:1.1.1.7 parse/clk_dcf7000.c:3.10 -*** parse/clk_dcf7000.c:1.1.1.7 Wed Jan 26 21:51:16 1994 ---- parse/clk_dcf7000.c Wed Jan 26 21:51:17 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.9 1994/01/23 17:21:51 kardel Exp - * -! * clk_dcf7000.c,v 3.9 1994/01/23 17:21:51 kardel Exp - * - * ELV DCF7000 module - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp - * -! * clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp - * - * ELV DCF7000 module - * -diff -c parse/clk_meinberg.c:1.1.1.7 parse/clk_meinberg.c:3.11 -*** parse/clk_meinberg.c:1.1.1.7 Wed Jan 26 21:51:17 1994 ---- parse/clk_meinberg.c Wed Jan 26 21:51:18 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.10 1994/01/23 17:21:54 kardel Exp - * -! * clk_meinberg.c,v 3.10 1994/01/23 17:21:54 kardel Exp - * - * Meinberg clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp - * -! * clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp - * - * Meinberg clock support - * -*************** -*** 414,419 **** ---- 414,422 ---- - * History: - * - * clk_meinberg.c,v -+ * Revision 3.11 1994/01/25 19:05:10 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.10 1994/01/23 17:21:54 kardel - * 1994 reconcilation - * -diff -c parse/clk_rawdcf.c:1.1.1.7 parse/clk_rawdcf.c:3.9 -*** parse/clk_rawdcf.c:1.1.1.7 Wed Jan 26 21:51:19 1994 ---- parse/clk_rawdcf.c Wed Jan 26 21:51:19 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.8 1994/01/22 11:24:11 kardel Exp - * -! * clk_rawdcf.c,v 3.8 1994/01/22 11:24:11 kardel Exp - * - * Raw DCF77 pulse clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp - * -! * clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp - * - * Raw DCF77 pulse clock support - * -*************** -*** 529,534 **** ---- 529,537 ---- - * History: - * - * clk_rawdcf.c,v -+ * Revision 3.9 1994/01/25 19:05:12 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.8 1994/01/22 11:24:11 kardel - * fixed PPS handling - * -diff -c parse/clk_schmid.c:1.1.1.7 parse/clk_schmid.c:3.10 -*** parse/clk_schmid.c:1.1.1.7 Wed Jan 26 21:51:20 1994 ---- parse/clk_schmid.c Wed Jan 26 21:51:20 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.9 1994/01/23 17:21:56 kardel Exp - * -! * clk_schmid.c,v 3.9 1994/01/23 17:21:56 kardel Exp - * - * Schmid clock support - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp - * -! * clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp - * - * Schmid clock support - * -*************** -*** 168,173 **** ---- 168,176 ---- - * History: - * - * clk_schmid.c,v -+ * Revision 3.10 1994/01/25 19:05:15 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.9 1994/01/23 17:21:56 kardel - * 1994 reconcilation - * -diff -c parse/clk_trimble.c:1.1.1.2 parse/clk_trimble.c:3.7 -*** parse/clk_trimble.c:1.1.1.2 Wed Jan 26 21:51:21 1994 ---- parse/clk_trimble.c Wed Jan 26 21:51:21 1994 -*************** -*** 1,6 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.6 1993/10/30 09:44:45 kardel Exp - * - * Trimble SV6 clock support - */ ---- 1,6 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6) - /* -! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.7 1994/01/25 19:05:17 kardel Exp - * - * Trimble SV6 clock support - */ -*************** -*** 106,111 **** ---- 106,114 ---- - * History: - * - * clk_trimble.c,v -+ * Revision 3.7 1994/01/25 19:05:17 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.6 1993/10/30 09:44:45 kardel - * conditional compilation flag cleanup - * -diff -c parse/parse.c:1.1.1.7 parse/parse.c:3.19 -*** parse/parse.c:1.1.1.7 Wed Jan 26 21:51:24 1994 ---- parse/parse.c Wed Jan 26 21:51:24 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp - * -! * parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp - * - * Parser module for reference clock - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp - * -! * parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp - * - * Parser module for reference clock - * -*************** -*** 22,28 **** - */ - - #if !(defined(lint) || defined(__GNUC__)) -! static char rcsid[] = "parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp"; - #endif - - #include "sys/types.h" ---- 22,28 ---- - */ - - #if !(defined(lint) || defined(__GNUC__)) -! static char rcsid[] = "parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp"; - #endif - - #include "sys/types.h" -*************** -*** 1139,1144 **** ---- 1139,1147 ---- - * History: - * - * parse.c,v -+ * Revision 3.19 1994/01/25 19:05:20 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.18 1994/01/23 17:21:59 kardel - * 1994 reconcilation - * -diff -c parse/parse_conf.c:1.1.1.7 parse/parse_conf.c:3.13 -*** parse/parse_conf.c:1.1.1.7 Wed Jan 26 21:51:25 1994 ---- parse/parse_conf.c Wed Jan 26 21:51:25 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.12 1994/01/23 17:22:02 kardel Exp - * -! * parse_conf.c,v 3.12 1994/01/23 17:22:02 kardel Exp - * - * Parser configuration module for reference clocks - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp - * -! * parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp - * - * Parser configuration module for reference clocks - * -*************** -*** 81,86 **** ---- 81,89 ---- - * History: - * - * parse_conf.c,v -+ * Revision 3.13 1994/01/25 19:05:23 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.12 1994/01/23 17:22:02 kardel - * 1994 reconcilation - * -diff -c parse/parsesolaris.c:1.1.1.4 parse/parsesolaris.c:3.9 -*** parse/parsesolaris.c:1.1.1.4 Wed Jan 26 21:51:26 1994 ---- parse/parsesolaris.c Wed Jan 26 21:51:27 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp - * -! * parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp - * -! * parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be -*************** -*** 19,25 **** - */ - - #ifndef lint -! static char rcsid[] = "parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp"; - #endif - - /* ---- 19,25 ---- - */ - - #ifndef lint -! static char rcsid[] = "parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp"; - #endif - - /* -*************** -*** 139,145 **** - /*ARGSUSED*/ - int _init(void) - { -! static char revision[] = "3.8"; - char *s, *S, *t; - - /* ---- 139,145 ---- - /*ARGSUSED*/ - int _init(void) - { -! static char revision[] = "3.9"; - char *s, *S, *t; - - /* -*************** -*** 1179,1184 **** ---- 1179,1187 ---- - * History: - * - * parsesolaris.c,v -+ * Revision 3.9 1994/01/25 19:05:26 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.8 1994/01/23 17:22:04 kardel - * 1994 reconcilation - * -diff -c parse/parsestreams.c:1.1.1.6 parse/parsestreams.c:3.12 -*** parse/parsestreams.c:1.1.1.6 Wed Jan 26 21:51:28 1994 ---- parse/parsestreams.c Wed Jan 26 21:51:28 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp - * -! * parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp - * -! * parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp - * - * STREAMS module for reference clocks - * (SunOS4.x) -*************** -*** 16,22 **** - */ - - #ifndef lint -! static char rcsid[] = "parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp"; - #endif - - #include "sys/types.h" ---- 16,22 ---- - */ - - #ifndef lint -! static char rcsid[] = "parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp"; - #endif - - #include "sys/types.h" -*************** -*** 195,201 **** - } - else - { -! static char revision[] = "3.11"; - char *s, *S, *t; - - strncpy(ifm->f_name, mname, FMNAMESZ); ---- 195,201 ---- - } - else - { -! static char revision[] = "3.12"; - char *s, *S, *t; - - strncpy(ifm->f_name, mname, FMNAMESZ); -*************** -*** 1258,1263 **** ---- 1258,1266 ---- - * History: - * - * parsestreams.c,v -+ * Revision 3.12 1994/01/25 19:05:30 kardel -+ * 94/01/23 reconcilation -+ * - * Revision 3.11 1994/01/23 17:22:07 kardel - * 1994 reconcilation - * -diff -c parse/util/Makefile.tmpl:1.1.1.2 parse/util/Makefile.tmpl:3.12 -*** parse/util/Makefile.tmpl:1.1.1.2 Wed Jan 26 21:51:31 1994 ---- parse/util/Makefile.tmpl Wed Jan 26 21:51:31 1994 -*************** -*** 1,5 **** - # -! # /src/NTP/REPOSITORY/v3/parse/util/Makefile.tmpl,v 3.11 1993/11/17 13:34:12 kardel Exp - # - COMPILER= cc - DEFS= ---- 1,5 ---- - # -! # /src/NTP/REPOSITORY/v3/parse/util/Makefile.tmpl,v 3.12 1994/01/25 19:05:39 kardel Exp - # - COMPILER= cc - DEFS= -diff -c parse/util/dcfd.c:1.1.1.4 parse/util/dcfd.c:3.15 -*** parse/util/dcfd.c:1.1.1.4 Wed Jan 26 21:51:33 1994 ---- parse/util/dcfd.c Wed Jan 26 21:51:33 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/util/dcfd.c,v 3.13 1994/01/23 17:22:15 kardel Exp - * -! * dcfd.c,v 3.13 1994/01/23 17:22:15 kardel Exp - * - * DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line) - * ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/util/dcfd.c,v 3.15 1994/01/25 19:05:42 kardel Exp - * -! * dcfd.c,v 3.15 1994/01/25 19:05:42 kardel Exp - * - * DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line) - * -*************** -*** 733,740 **** - * assume that we convert timecode within the unix/UTC epoch - - * prolonges validity of 2 digit years - */ -! if (clock->year < 1900) -! clock->year += 100; /* XXX this will do it till <2092 */ - - /* - * must have been a really negative year code - drop it ---- 733,740 ---- - * assume that we convert timecode within the unix/UTC epoch - - * prolonges validity of 2 digit years - */ -! if (clock->year < 1994) -! clock->year += 100; /* XXX this will do it till <2094 */ - - /* - * must have been a really negative year code - drop it -diff -c parse/util/testdcf.c:1.1.1.5 parse/util/testdcf.c:3.9 -*** parse/util/testdcf.c:1.1.1.5 Wed Jan 26 21:51:35 1994 ---- parse/util/testdcf.c Wed Jan 26 21:51:35 1994 -*************** -*** 1,7 **** - /* -! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.8 1994/01/23 17:22:20 kardel Exp - * -! * testdcf.c,v 3.8 1994/01/23 17:22:20 kardel Exp - * - * simple DCF77 100/200ms pulse test program (via 50Baud serial line) - * ---- 1,7 ---- - /* -! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp - * -! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp - * - * simple DCF77 100/200ms pulse test program (via 50Baud serial line) - * -diff -c scripts/Guess.sh:1.1.1.6 scripts/Guess.sh:1.11 -*** scripts/Guess.sh:1.1.1.6 Wed Jan 26 21:52:11 1994 ---- scripts/Guess.sh Wed Jan 26 21:52:12 1994 -*************** -*** 19,25 **** - sinix-m) - guess=sinix-m - ;; -! sunos) case "$3" in - 4.1*) guess="sunos4" ;; - 5.1) guess="sunos5.1" ;; - 5.*) guess="sunos5.2" ;; ---- 19,26 ---- - sinix-m) - guess=sinix-m - ;; -! sunos|solaris) -! case "$3" in - 4.1*) guess="sunos4" ;; - 5.1) guess="sunos5.1" ;; - 5.*) guess="sunos5.2" ;; -*************** -*** 59,65 **** - guess="netbsd" - ;; - # now the fun starts - there are vendors that -! # do not really identify their OS un uname. - # Fine - now I look at our version and hope - # that nobody else had this marvellous idea. - # I am not willing to mention the vendor explicitly ---- 60,66 ---- - guess="netbsd" - ;; - # now the fun starts - there are vendors that -! # do not really identify their OS in uname. - # Fine - now I look at our version and hope - # that nobody else had this marvellous idea. - # I am not willing to mention the vendor explicitly -diff -c xntpd/ntp_config.c:1.1.1.18 xntpd/ntp_config.c:3.21 -*** xntpd/ntp_config.c:1.1.1.18 Wed Jan 26 21:52:59 1994 ---- xntpd/ntp_config.c Wed Jan 26 21:53:00 1994 -*************** -*** 93,98 **** ---- 93,99 ---- - #define CONFIG_PPS 24 - #define CONFIG_PIDFILE 25 - #define CONFIG_LOGFILE 26 -+ #define CONFIG_SETVAR 27 - - #define CONF_MOD_VERSION 1 - #define CONF_MOD_KEY 2 -*************** -*** 177,182 **** ---- 178,184 ---- - { "statistics", CONFIG_STATISTICS }, - { "pidfile", CONFIG_PIDFILE }, - { "logfile", CONFIG_LOGFILE }, -+ { "setvar", CONFIG_SETVAR }, - { "", CONFIG_UNKNOWN } - }; - -*************** -*** 316,322 **** - #endif - extern char *FindConfig(); - char *progname; -! static char *xntp_options = "abc:de:f:k:l:p:r:s:t:"; - - static int gettokens P((FILE *, char *, char **, int *)); - static int matchkey P((char *, struct keyword *)); ---- 318,324 ---- - #endif - extern char *FindConfig(); - char *progname; -! static char *xntp_options = "abc:de:f:k:l:p:r:s:t:v:V:"; - - static int gettokens P((FILE *, char *, char **, int *)); - static int matchkey P((char *, struct keyword *)); -*************** -*** 374,381 **** - } - - if (errflg || optind != argc) { -! (void) fprintf(stderr, -! "usage: %s [ -bd ] [ -c config_file ]\n", progname); - exit(2); - } - optind = 0; /* reset optind to restart getopt_l */ ---- 376,385 ---- - } - - if (errflg || optind != argc) { -! (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname); -! (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n"); -! (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n"); -! (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n"); - exit(2); - } - optind = 0; /* reset optind to restart getopt_l */ -*************** -*** 428,433 **** ---- 432,438 ---- - char keyfile[MAXFILENAME]; - extern int optind; - extern char *optarg; -+ extern char *Version; - extern U_LONG info_auth_keyid; - FILEGEN *filegen; - -*************** -*** 443,448 **** ---- 448,459 ---- - res_fp = NULL; - have_resolver = have_keyfile = 0; - -+ /* -+ * install a non default variable with this daemon version -+ */ -+ (void) sprintf(line, "daemon_version=\"%s\"", Version); -+ set_sys_var(line, strlen(line)+1, RO); -+ - #ifdef RESOLVE_INTERNAL - resolve_internal = 1; - #endif -*************** -*** 546,551 **** ---- 557,566 ---- - } while (0); - break; - -+ case 'v': -+ case 'V': -+ set_sys_var(optarg, strlen(optarg)+1, RW | ((c == 'V') ? DEF : 0)); -+ break; - - default: - errflg++; -*************** -*** 1386,1392 **** - (u_char)peerkey, (u_char)peerflags); - } - break; -! - } - } - (void) fclose(fp); ---- 1401,1419 ---- - (u_char)peerkey, (u_char)peerflags); - } - break; -! -! case CONFIG_SETVAR: -! if (ntokens < 2) -! { -! syslog(LOG_ERR, -! "no value for setvar command - line ignored"); -! } -! else -! { -! set_sys_var(tokens[1], strlen(tokens[1])+1, RW | -! ((((ntokens > 2) && !strcmp(tokens[2], "default"))) ? DEF : 0)); -! } -! break; - } - } - (void) fclose(fp); -*************** -*** 1445,1450 **** ---- 1472,1478 ---- - register char *cp; - register int eol; - register int ntok; -+ register int quoted = 0; - - /* - * Find start of first token -*************** -*** 1469,1476 **** - ntok = 0; - while (!eol) { - tokenlist[ntok++] = cp; -! while (!ISEOL(*cp) && !ISSPACE(*cp)) -! cp++; - if (ISEOL(*cp)) { - *cp = '\0'; - eol = 1; ---- 1497,1505 ---- - ntok = 0; - while (!eol) { - tokenlist[ntok++] = cp; -! while (!ISEOL(*cp) && (!ISSPACE(*cp) || quoted)) -! quoted ^= (*cp++ == '"'); -! - if (ISEOL(*cp)) { - *cp = '\0'; - eol = 1; -diff -c xntpd/ntp_control.c:1.1.1.15 xntpd/ntp_control.c:3.21 -*** xntpd/ntp_control.c:1.1.1.15 Wed Jan 26 21:53:01 1994 ---- xntpd/ntp_control.c Wed Jan 26 21:53:02 1994 -*************** -*** 1,4 **** -! /* ntp_control.c,v 3.1 1993/07/06 01:11:13 jbj Exp - * ntp_control.c - respond to control messages and send async traps - */ - #include <stdio.h> ---- 1,4 ---- -! /* - * ntp_control.c - respond to control messages and send async traps - */ - #include <stdio.h> -*************** -*** 61,66 **** ---- 61,67 ---- - static void ctl_putclock P((int, struct refclockstat *, int)); - #endif /* REFCLOCK */ - static struct ctl_var *ctl_getitem P((struct ctl_var *, char **)); -+ static unsigned long count_var P((struct ctl_var *)); - static void control_unspec P((struct recvbuf *, int)); - static void read_status P((struct recvbuf *, int)); - static void read_variables P((struct recvbuf *, int)); -*************** -*** 83,113 **** - { NO_REQUEST, 0 } - }; - -- -- /* -- * Structure for translation tables between internal system -- * variable indices and text format. -- */ -- struct ctl_var { -- u_short code; -- u_short flags; -- char *text; -- }; -- - /* -- * Flag values -- */ -- #define CAN_READ 0x1 -- #define CAN_WRITE 0x2 -- #define PADDING 0x80 -- #define EOV 0x40 -- -- #define RO (CAN_READ) -- #define WO (CAN_WRITE) -- #define RW (CAN_READ|CAN_WRITE) -- -- -- /* - * System variable values. The array can be indexed by - * the variable index to find the textual name. - */ ---- 84,90 ---- -*************** -*** 132,141 **** - { CS_SYSTEM, RO, "system" }, /* 17 */ - { CS_KEYID, RO, "keyid" }, /* 18 */ - { CS_REFSKEW, RO, "refskew" }, /* 19 */ -! { CS_VERSION, RO, "daemon_version" }, /* 20 */ - { 0, EOV, "" } - }; - - /* - * System variables we print by default (in fuzzball order, more-or-less) - */ ---- 109,120 ---- - { CS_SYSTEM, RO, "system" }, /* 17 */ - { CS_KEYID, RO, "keyid" }, /* 18 */ - { CS_REFSKEW, RO, "refskew" }, /* 19 */ -! { CS_VARLIST, RO, "sys_var_list" },/* 20 */ - { 0, EOV, "" } - }; - -+ static struct ctl_var *ext_sys_var = (struct ctl_var *)0; -+ - /* - * System variables we print by default (in fuzzball order, more-or-less) - */ -*************** -*** 153,159 **** - CS_OFFSET, - CS_DRIFT, - CS_COMPLIANCE, -- CS_VERSION, - 0 - }; - ---- 132,137 ---- -*************** -*** 197,202 **** ---- 175,181 ---- - { CP_SENT, RO, "sent" }, /* 32 */ - { CP_FILTERROR, RO, "filterror" }, /* 33 */ - { CP_FLASH, RO, "flash" }, /* 34 */ -+ { CP_VARLIST, RO, "peer_var_list" }, /* 35 */ - { 0, EOV, "" } - }; - -*************** -*** 255,260 **** ---- 234,240 ---- - { CC_FUDGEVAL2, RO, "fudgeval2" }, /* 10 */ - { CC_FLAGS, RO, "flags" }, /* 11 */ - { CC_DEVICE, RO, "device" }, /* 12 */ -+ { CC_VARLIST, RO, "clock_var_list" },/* 13 */ - { 0, EOV, "" } - }; - -*************** -*** 283,290 **** ---- 263,277 ---- - /* - * System and processor definitions. These will change for the gizmo board. - */ -+ #ifndef STR_SYSTEM - #define STR_SYSTEM "UNIX" -+ #endif -+ #ifndef STR_PROCESSOR - #define STR_PROCESSOR "unknown" -+ #endif -+ -+ static char str_system[] = STR_SYSTEM; -+ static char str_processor[] = STR_PROCESSOR; - - /* - * Trap structures. We only allow a few of these, and send -*************** -*** 1221,1227 **** - ctl_putsys(varid) - int varid; - { -- extern char *Version; - l_fp tmp; - - switch (varid) { ---- 1208,1213 ---- -*************** -*** 1280,1291 **** - ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning); - break; - case CS_PROCESSOR: -! ctl_putstr(sys_var[CS_PROCESSOR].text, STR_PROCESSOR, -! sizeof(STR_PROCESSOR) - 1); - break; - case CS_SYSTEM: -! ctl_putstr(sys_var[CS_SYSTEM].text, STR_SYSTEM, -! sizeof(STR_SYSTEM) - 1); - break; - case CS_KEYID: - ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0); ---- 1266,1277 ---- - ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning); - break; - case CS_PROCESSOR: -! ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor, -! sizeof(str_processor) - 1); - break; - case CS_SYSTEM: -! ctl_putstr(sys_var[CS_SYSTEM].text, str_system, -! sizeof(str_system) - 1); - break; - case CS_KEYID: - ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0); -*************** -*** 1293,1301 **** - case CS_REFSKEW: - ctl_putlfp(sys_var[CS_REFSKEW].text, &sys_refskew); - break; -! case CS_VERSION: -! ctl_putstr(sys_var[CS_VERSION].text, Version, -! strlen(Version)); - break; - } - } ---- 1279,1338 ---- - case CS_REFSKEW: - ctl_putlfp(sys_var[CS_REFSKEW].text, &sys_refskew); - break; -! case CS_VARLIST: -! { -! char buf[CTL_MAX_DATA_LEN]; -! register char *s, *ss, *t, *be; -! register int i; -! register struct ctl_var *k; -! -! s = buf; -! be = buf + sizeof(buf) - strlen(sys_var[CS_VARLIST].text) - 4; -! if (s > be) -! break; /* really long var name 8-( - Killer */ -! -! strcpy(s, sys_var[CS_VARLIST].text); -! strcat(s, "=\""); -! s += strlen(s); -! t = s; -! -! for (k = sys_var; !(k->flags &EOV); k++) -! { -! i = strlen(k->text); -! if (s+i+1 >= be) -! break; -! if (s != t) -! *s++ = ','; -! strcpy(s, k->text); -! s += i; -! } -! -! for (k = ext_sys_var; k && !(k->flags &EOV); k++) -! { -! ss = k->text; -! if (!ss) -! continue; -! -! while (*ss && *ss != '=') -! ss++; -! -! i = ss - k->text; -! if (s+i+1 >= be) -! break; -! if (s != t) -! *s++ = ','; -! strncpy(s, k->text, i); -! s += i; -! } -! -! if (s+2 >= be) -! break; -! -! *s++ = '"'; -! *s = '\0'; -! -! ctl_putdata(buf, s - buf, 0); -! } - break; - } - } -*************** -*** 1428,1433 **** ---- 1465,1507 ---- - case CP_SENT: - ctl_putuint(peer_var[CP_SENT].text, peer->sent); - break; -+ case CP_VARLIST: -+ { -+ char buf[CTL_MAX_DATA_LEN]; -+ register char *s, *t, *be; -+ register int i; -+ register struct ctl_var *k; -+ -+ s = buf; -+ be = buf + sizeof(buf) - strlen(peer_var[CP_VARLIST].text) - 4; -+ if (s > be) -+ break; /* really long var name 8-( - Killer */ -+ -+ strcpy(s, peer_var[CP_VARLIST].text); -+ strcat(s, "=\""); -+ s += strlen(s); -+ t = s; -+ -+ for (k = peer_var; !(k->flags &EOV); k++) -+ { -+ i = strlen(k->text); -+ if (s+i+1 >= be) -+ break; -+ if (s != t) -+ *s++ = ','; -+ strcpy(s, k->text); -+ s += i; -+ } -+ -+ if (s+2 >= be) -+ break; -+ -+ *s++ = '"'; -+ *s = '\0'; -+ -+ ctl_putdata(buf, s - buf, 0); -+ } -+ break; - } - } - -*************** -*** 1501,1506 **** ---- 1575,1636 ---- - strlen(clock->clockdesc)); - } - break; -+ case CC_VARLIST: -+ { -+ char buf[CTL_MAX_DATA_LEN]; -+ register char *s, *ss, *t, *be; -+ register int i; -+ register struct ctl_var *k; -+ -+ s = buf; -+ be = buf + sizeof(buf) - strlen(clock_var[CC_VARLIST].text) - 4; -+ if (s > be) -+ break; /* really long var name 8-( - Killer */ -+ -+ strcpy(s, clock_var[CC_VARLIST].text); -+ strcat(s, "=\""); -+ s += strlen(s); -+ t = s; -+ -+ for (k = clock_var; !(k->flags &EOV); k++) -+ { -+ i = strlen(k->text); -+ if (s+i+1 >= be) -+ break; -+ if (s != t) -+ *s++ = ','; -+ strcpy(s, k->text); -+ s += i; -+ } -+ -+ for (k = clock->kv_list; k && !(k->flags &EOV); k++) -+ { -+ ss = k->text; -+ if (!ss) -+ continue; -+ -+ while (*ss && *ss != '=') -+ ss++; -+ -+ i = ss - k->text; -+ if (s+i+1 >= be) -+ break; -+ if (s != t) -+ *s++ = ','; -+ strncpy(s, k->text, i); -+ s += i; -+ *s = '\0'; -+ } -+ -+ if (s+2 >= be) -+ break; -+ -+ *s++ = '"'; -+ *s = '\0'; -+ -+ ctl_putdata(buf, s - buf, 0); -+ } -+ break; - } - } - #endif -*************** -*** 1517,1522 **** ---- 1647,1653 ---- - { - register struct ctl_var *v; - register char *cp, *tp; -+ static struct ctl_var eol = { 0, EOV, }; - static char buf[128]; - - /* -*************** -*** 1528,1533 **** ---- 1659,1667 ---- - - if (reqpt >= reqend) - return 0; -+ -+ if (var_list == (struct ctl_var *)0) -+ return &eol; - - /* - * Look for a first character match on the tag. If we find -*************** -*** 1538,1548 **** - while (!(v->flags & EOV)) { - if (!(v->flags & PADDING) && *cp == *(v->text)) { - tp = v->text; -! while (*tp != '\0' && cp < reqend && *cp == *tp) { - cp++; - tp++; - } -! if (*tp == '\0') { - while (cp < reqend && isspace(*cp)) - cp++; - if (cp == reqend || *cp == ',') { ---- 1672,1682 ---- - while (!(v->flags & EOV)) { - if (!(v->flags & PADDING) && *cp == *(v->text)) { - tp = v->text; -! while (*tp != '\0' && *tp != '=' && cp < reqend && *cp == *tp) { - cp++; - tp++; - } -! if ((*tp == '\0') || (*tp == '=')) { - while (cp < reqend && isspace(*cp)) - cp++; - if (cp == reqend || *cp == ',') { -*************** -*** 1685,1692 **** - register struct ctl_var *v; - register int i; - char *valuep; -! u_char wants[(CS_MAXCODE>CP_MAXCODE) ? (CS_MAXCODE+1) : (CP_MAXCODE+1)]; -! int gotvar; - - if (res_associd == 0) { - /* ---- 1819,1826 ---- - register struct ctl_var *v; - register int i; - char *valuep; -! u_char *wants; -! int gotvar = (CS_MAXCODE>CP_MAXCODE) ? (CS_MAXCODE+1) : (CP_MAXCODE+1); - - if (res_associd == 0) { - /* -*************** -*** 1696,1707 **** - rpkt.status = htons(ctlsysstatus()); - if (res_authokay) - ctl_sys_num_events = 0; -! bzero((char *)wants, CS_MAXCODE+1); - gotvar = 0; - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { - if (v->flags & EOV) { -! ctl_error(CERR_UNKNOWNVAR); -! return; - } - wants[v->code] = 1; - gotvar = 1; ---- 1830,1853 ---- - rpkt.status = htons(ctlsysstatus()); - if (res_authokay) - ctl_sys_num_events = 0; -! gotvar += count_var(ext_sys_var); -! wants = (u_char *)emalloc(gotvar); -! bzero((char *)wants, gotvar); - gotvar = 0; - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { - if (v->flags & EOV) { -! if ((v = ctl_getitem(ext_sys_var, &valuep)) != 0) { -! if (v->flags & EOV) { -! ctl_error(CERR_UNKNOWNVAR); -! free((char *)wants); -! return; -! } -! wants[CS_MAXCODE+1+v->code] = 1; -! gotvar = 1; -! continue; -! } else { -! break; /* shouldn't happen ! */ -! } - } - wants[v->code] = 1; - gotvar = 1; -*************** -*** 1710,1721 **** - for (i = 1; i <= CS_MAXCODE; i++) - if (wants[i]) - ctl_putsys(i); - } else { - register u_char *cs; - - for (cs = def_sys_var; *cs != 0; cs++) -! ctl_putsys((int)*cs); - } - } else { - register struct peer *peer; - ---- 1856,1876 ---- - for (i = 1; i <= CS_MAXCODE; i++) - if (wants[i]) - ctl_putsys(i); -+ for (i = 0; ext_sys_var && !(ext_sys_var[i].flags & EOV); i++) -+ if (wants[i+CS_MAXCODE+1]) -+ ctl_putdata(ext_sys_var[i].text, -+ strlen(ext_sys_var[i].text), 0); - } else { - register u_char *cs; -+ register struct ctl_var *kv; - - for (cs = def_sys_var; *cs != 0; cs++) -! ctl_putsys((int)*cs); -! for (kv = ext_sys_var; kv && !(kv->flags & EOV); kv++) -! if (kv->flags & DEF) -! ctl_putdata(kv->text, strlen(kv->text), 0); - } -+ free((char *)wants); - } else { - register struct peer *peer; - -*************** -*** 1732,1742 **** - rpkt.status = htons(ctlpeerstatus(peer)); - if (res_authokay) - peer->num_events = 0; -! bzero((char*)wants, CP_MAXCODE+1); - gotvar = 0; - while ((v = ctl_getitem(peer_var, &valuep)) != 0) { - if (v->flags & EOV) { - ctl_error(CERR_UNKNOWNVAR); - return; - } - wants[v->code] = 1; ---- 1887,1899 ---- - rpkt.status = htons(ctlpeerstatus(peer)); - if (res_authokay) - peer->num_events = 0; -! wants = (u_char *)emalloc(gotvar); -! bzero((char*)wants, gotvar); - gotvar = 0; - while ((v = ctl_getitem(peer_var, &valuep)) != 0) { - if (v->flags & EOV) { - ctl_error(CERR_UNKNOWNVAR); -+ free((char *)wants); - return; - } - wants[v->code] = 1; -*************** -*** 1752,1757 **** ---- 1909,1915 ---- - for (cp = def_peer_var; *cp != 0; cp++) - ctl_putpeer((int)*cp, peer); - } -+ free((char *)wants); - } - ctl_flushpkt(0); - } -*************** -*** 1768,1773 **** ---- 1926,1932 ---- - int restrict; - { - register struct ctl_var *v; -+ register int ext_var; - char *valuep; - LONG val; - u_char leapind, leapwarn; -*************** -*** 1795,1831 **** - * Look through the variables. Dump out at the first sign of trouble. - */ - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { - if (v->flags & EOV) { -! ctl_error(CERR_UNKNOWNVAR); -! return; - } - if (!(v->flags & CAN_WRITE)) { - ctl_error(CERR_PERMISSION); - return; - } -! if (*valuep == '\0' || !atoint(valuep, &val)) { - ctl_error(CERR_BADFMT); - return; - } -! if ((val & ~LEAP_NOTINSYNC) != 0) { - ctl_error(CERR_BADVALUE); - return; - } - -! /* -! * This one seems sane. Save it. -! */ -! switch(v->code) { -! case CS_LEAP: -! case CS_LEAPIND: -! leapind = (u_char)val; -! break; -! case CS_LEAPWARNING: -! leapwarn = (u_char)val; -! break; -! default: -! ctl_error(CERR_UNSPEC); /* our fault, really */ -! return; - } - } - ---- 1954,2013 ---- - * Look through the variables. Dump out at the first sign of trouble. - */ - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { -+ ext_var = 0; - if (v->flags & EOV) { -! if ((v = ctl_getitem(ext_sys_var, &valuep)) != 0) { -! if (v->flags & EOV) { -! ctl_error(CERR_UNKNOWNVAR); -! return; -! } -! ext_var = 1; -! } else { -! break; -! } - } - if (!(v->flags & CAN_WRITE)) { - ctl_error(CERR_PERMISSION); - return; - } -! if (!ext_var && (*valuep == '\0' || !atoint(valuep, &val))) { - ctl_error(CERR_BADFMT); - return; - } -! if (!ext_var && (val & ~LEAP_NOTINSYNC) != 0) { - ctl_error(CERR_BADVALUE); - return; - } - -! if (ext_var) { -! char *s = emalloc(strlen(v->text)+strlen(valuep)+2); -! char *t, *tt = s; -! -! t = v->text; -! while (*t && *t != '=') -! *tt++ = *t++; -! -! *tt++ = '='; -! strcat(tt, valuep); -! -! set_sys_var(s, strlen(s)+1, v->flags); -! free(s); -! } else { -! /* -! * This one seems sane. Save it. -! */ -! switch(v->code) { -! case CS_LEAP: -! case CS_LEAPIND: -! leapind = (u_char)val; -! break; -! case CS_LEAPWARNING: -! leapwarn = (u_char)val; -! break; -! default: -! ctl_error(CERR_UNSPEC); /* our fault, really */ -! return; -! } - } - } - -*************** -*** 1861,1867 **** - register int i; - register struct peer *peer; - char *valuep; -! u_char wants[CC_MAXCODE+1]; - int gotvar; - struct refclockstat clock; - ---- 2043,2049 ---- - register int i; - register struct peer *peer; - char *valuep; -! u_char *wants; - int gotvar; - struct refclockstat clock; - -*************** -*** 1898,1915 **** - /* - * If we got here we have a peer which is a clock. Get his status. - */ - refclock_control(&peer->srcadr, (struct refclockstat *)0, &clock); - - /* - * Look for variables in the packet. - */ - rpkt.status = htons(ctlclkstatus(&clock)); - gotvar = 0; -! bzero((char*)wants, CC_MAXCODE+1); -! while ((v = ctl_getitem(sys_var, &valuep)) != 0) { - if (v->flags & EOV) { -! ctl_error(CERR_UNKNOWNVAR); -! return; - } - wants[v->code] = 1; - gotvar = 1; ---- 2080,2112 ---- - /* - * If we got here we have a peer which is a clock. Get his status. - */ -+ clock.kv_list = (struct ctl_var *)0; -+ - refclock_control(&peer->srcadr, (struct refclockstat *)0, &clock); - - /* - * Look for variables in the packet. - */ - rpkt.status = htons(ctlclkstatus(&clock)); -+ gotvar = CC_MAXCODE+1+count_var(clock.kv_list); -+ wants = (u_char *)emalloc(gotvar); -+ bzero((char*)wants, gotvar); - gotvar = 0; -! while ((v = ctl_getitem(clock_var, &valuep)) != 0) { - if (v->flags & EOV) { -! if ((v = ctl_getitem(clock.kv_list, &valuep)) != 0) { -! if (v->flags & EOV) { -! ctl_error(CERR_UNKNOWNVAR); -! free((char*)wants); -! free_varlist(clock.kv_list); -! return; -! } -! wants[CC_MAXCODE+1+v->code] = 1; -! gotvar = 1; -! continue; -! } else { -! break; /* shouldn't happen ! */ -! } - } - wants[v->code] = 1; - gotvar = 1; -*************** -*** 1919,1930 **** ---- 2116,2139 ---- - for (i = 1; i <= CC_MAXCODE; i++) - if (wants[i]) - ctl_putclock(i, &clock, 1); -+ for (i = 0; !(clock.kv_list[i].flags & EOV); i++) -+ if (wants[i+CC_MAXCODE+1]) -+ ctl_putdata(clock.kv_list[i].text, -+ strlen(clock.kv_list[i].text), 0); - } else { - register u_char *cc; -+ register struct ctl_var *kv; - - for (cc = def_clock_var; *cc != 0; cc++) - ctl_putclock((int)*cc, &clock, 0); -+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++) -+ if (kv->flags & DEF) -+ ctl_putdata(kv->text, strlen(kv->text), 0); - } -+ -+ free((char*)wants); -+ free_varlist(clock.kv_list); -+ - ctl_flushpkt(0); - #endif - } -*************** -*** 2237,2249 **** - */ - if (err == EVNT_CLOCKEXCPT) { - struct refclockstat clock; -! refclock_control(&peer->srcadr, - (struct refclockstat *)0, - &clock); - ctl_puthex("refclockstatus", - (U_LONG)ctlclkstatus(&clock)); - for (i = 1; i <= CC_MAXCODE; i++) - ctl_putclock(i, &clock, 0); - } - #endif /*REFCLOCK*/ - } else { ---- 2446,2468 ---- - */ - if (err == EVNT_CLOCKEXCPT) { - struct refclockstat clock; -! struct ctl_var *kv; -! -! clock.kv_list = (struct ctl_var *)0; -! -! refclock_control(&peer->srcadr, - (struct refclockstat *)0, - &clock); - ctl_puthex("refclockstatus", - (U_LONG)ctlclkstatus(&clock)); -+ - for (i = 1; i <= CC_MAXCODE; i++) - ctl_putclock(i, &clock, 0); -+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++) -+ if (kv->flags & DEF) -+ ctl_putdata(kv->text, strlen(kv->text), 0); -+ -+ free_varlist(clock.kv_list); - } - #endif /*REFCLOCK*/ - } else { -*************** -*** 2262,2274 **** ---- 2481,2504 ---- - */ - if (err == EVNT_PEERCLOCK) { - struct refclockstat clock; -+ struct ctl_var *kv; -+ -+ clock.kv_list = (struct ctl_var *)0; -+ - refclock_control(&peer->srcadr, - (struct refclockstat *)0, - &clock); -+ - ctl_puthex("refclockstatus", - (U_LONG)ctlclkstatus(&clock)); -+ - for (i = 1; i <= CC_MAXCODE; i++) - ctl_putclock(i, &clock, 0); -+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++) -+ if (kv->flags & DEF) -+ ctl_putdata(kv->text, strlen(kv->text), 0); -+ -+ free_varlist(clock.kv_list); - } - #endif /*REFCLOCK*/ - } -*************** -*** 2303,2305 **** ---- 2533,2647 ---- - numctlbadop = 0; - numasyncmsgs = 0; - } -+ -+ static unsigned long -+ count_var(k) -+ struct ctl_var *k; -+ { -+ register unsigned long c; -+ -+ c = 0; -+ while (k && !(k++->flags & EOV)) -+ c++; -+ -+ return c; -+ } -+ -+ char * -+ add_var(kv, size, def) -+ struct ctl_var **kv; -+ unsigned long size; -+ int def; -+ { -+ register unsigned long c; -+ register struct ctl_var *k; -+ -+ c = count_var(*kv); -+ -+ k = *kv; -+ *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var)); -+ if (k) -+ { -+ bcopy((char *)k, (char *)*kv, sizeof(struct ctl_var)*c); -+ free((char *)k); -+ } -+ -+ (*kv)[c].code = c; -+ (*kv)[c].text = (char *)emalloc(size); -+ (*kv)[c].flags = def; -+ (*kv)[c+1].code = 0; -+ (*kv)[c+1].text = (char *)0; -+ (*kv)[c+1].flags = EOV; -+ return (*kv)[c].text; -+ } -+ -+ void -+ set_var(kv, data, size, def) -+ struct ctl_var **kv; -+ char *data; -+ unsigned long size; -+ int def; -+ { -+ register struct ctl_var *k; -+ register char *s, *t; -+ -+ if (!data || !size) -+ return; -+ -+ if ((k = *kv)) -+ { -+ while (!(k->flags & EOV)) -+ { -+ s = data; -+ t = k->text; -+ if (t) -+ { -+ while (*t != '=' && *s - *t == 0) -+ { -+ s++; -+ t++; -+ } -+ if (*s == *t && ((*t == '=') || !*t)) -+ { -+ free(k->text); -+ k->text = (char *)emalloc(size); -+ bcopy(data, k->text, size); -+ k->flags = def; -+ return; -+ } -+ } -+ else -+ { -+ k->text = (char *)emalloc(size); -+ bcopy(data, k->text, size); -+ k->flags = def; -+ return; -+ } -+ k++; -+ } -+ } -+ t = add_var(kv, size, def); -+ bcopy(data, t, size); -+ } -+ -+ void -+ set_sys_var(data, size, def) -+ char *data; -+ unsigned long size; -+ int def; -+ { -+ set_var(&ext_sys_var, data, size, def); -+ } -+ -+ void -+ free_varlist(kv) -+ struct ctl_var *kv; -+ { -+ struct ctl_var *k; -+ if (kv) -+ { -+ for (k = kv; !(k->flags & EOV); k++) -+ free(k->text); -+ free((char *)kv); -+ } -+ } -diff -c xntpd/ntp_filegen.c:1.1.1.5 xntpd/ntp_filegen.c:3.12 -*** xntpd/ntp_filegen.c:1.1.1.5 Wed Jan 26 21:53:04 1994 ---- xntpd/ntp_filegen.c Wed Jan 26 21:53:04 1994 -*************** -*** 1,5 **** - /* -! * ntp_filegen.c,v 3.10 1993/12/03 03:55:35 pruy Exp - * - * implements file generations support for NTP - * logfiles and statistic files ---- 1,5 ---- - /* -! * ntp_filegen.c,v 3.12 1994/01/25 19:06:11 kardel Exp - * - * implements file generations support for NTP - * logfiles and statistic files -diff -c xntpd/ntp_request.c:1.1.1.13 xntpd/ntp_request.c:3.13 -*** xntpd/ntp_request.c:1.1.1.13 Wed Jan 26 21:53:18 1994 ---- xntpd/ntp_request.c Wed Jan 26 21:53:18 1994 -*************** -*** 2111,2116 **** ---- 2111,2119 ---- - req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA); - return; - } -+ -+ clock.kv_list = (struct ctl_var *)0; -+ - refclock_control(&addr, (struct refclockstat *)0, &clock); - - ic->clockadr = addr.sin_addr.s_addr; -*************** -*** 2128,2133 **** ---- 2131,2138 ---- - ic->fudgeval1 = htonl(clock.fudgeval1); - ic->fudgeval2 = htonl(clock.fudgeval2); - -+ free_varlist(clock.kv_list); -+ - ic = (struct info_clock *)more_pkt(); - } - flush_pkt(); -diff -c xntpd/refclock_parse.c:1.1.1.9 xntpd/refclock_parse.c:3.45 -*** xntpd/refclock_parse.c:1.1.1.9 Wed Jan 26 21:53:39 1994 ---- xntpd/refclock_parse.c Wed Jan 26 21:53:39 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp - * -! * refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp - * - * generic reference clock driver for receivers - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp - * -! * refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp - * - * generic reference clock driver for receivers - * -*************** -*** 129,135 **** - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp"; - #endif - - /**=========================================================================== ---- 129,135 ---- - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp"; - #endif - - /**=========================================================================== -*************** -*** 243,248 **** ---- 243,249 ---- - * clock specific configuration - */ - l_fp basedelay; /* clock local phase offset */ -+ l_fp ppsdelay; /* clock local pps phase offset */ - - /* - * clock state handling/reporting -*************** -*** 295,300 **** ---- 296,302 ---- - #define NO_END (void (*)())0 - #define NO_DATA (void *)0 - #define NO_FORMAT "" -+ #define NO_PPSDELAY 0 - - #define DCF_ID "DCF" /* generic DCF */ - #define DCF_A_ID "DCFa" /* AM demodulation */ -*************** -*** 497,502 **** ---- 499,505 ---- - void *cl_data; /* local data area for "poll" mechanism */ - u_fp cl_rootdelay; /* rootdelay */ - U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional part */ -+ U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional part */ - char *cl_id; /* ID code (usually "DCF") */ - char *cl_description; /* device name */ - char *cl_format; /* fixed format */ -*************** -*** 516,521 **** ---- 519,525 ---- - NO_DATA, - DCFPZF535_ROOTDELAY, - DCFPZF535_BASEDELAY, -+ NO_PPSDELAY, - DCF_P_ID, - DCFPZF535_DESCRIPTION, - NO_FORMAT, -*************** -*** 534,539 **** ---- 538,544 ---- - NO_DATA, - DCFPZF535OCXO_ROOTDELAY, - DCFPZF535OCXO_BASEDELAY, -+ NO_PPSDELAY, - DCF_P_ID, - DCFPZF535OCXO_DESCRIPTION, - NO_FORMAT, -*************** -*** 552,557 **** ---- 557,563 ---- - NO_DATA, - DCFUA31_ROOTDELAY, - DCFUA31_BASEDELAY, -+ NO_PPSDELAY, - DCF_A_ID, - DCFUA31_DESCRIPTION, - NO_FORMAT, -*************** -*** 570,575 **** ---- 576,582 ---- - NO_DATA, - DCF7000_ROOTDELAY, - DCF7000_BASEDELAY, -+ NO_PPSDELAY, - DCF_A_ID, - DCF7000_DESCRIPTION, - NO_FORMAT, -*************** -*** 588,593 **** ---- 595,601 ---- - WSDCF_DATA, - WSDCF_ROOTDELAY, - WSDCF_BASEDELAY, -+ NO_PPSDELAY, - DCF_A_ID, - WSDCF_DESCRIPTION, - WSDCF_FORMAT, -*************** -*** 606,611 **** ---- 614,620 ---- - NO_DATA, - RAWDCF_ROOTDELAY, - CONRAD_BASEDELAY, -+ NO_PPSDELAY, - DCF_A_ID, - CONRAD_DESCRIPTION, - RAWDCF_FORMAT, -*************** -*** 624,629 **** ---- 633,639 ---- - NO_DATA, - RAWDCF_ROOTDELAY, - TIMEBRICK_BASEDELAY, -+ NO_PPSDELAY, - DCF_A_ID, - TIMEBRICK_DESCRIPTION, - RAWDCF_FORMAT, -*************** -*** 642,647 **** ---- 652,658 ---- - GPS166_DATA, - GPS166_ROOTDELAY, - GPS166_BASEDELAY, -+ NO_PPSDELAY, - GPS166_ID, - GPS166_DESCRIPTION, - GPS166_FORMAT, -*************** -*** 660,665 **** ---- 671,677 ---- - TRIMBLESV6_DATA, - TRIMBLESV6_ROOTDELAY, - TRIMBLESV6_BASEDELAY, -+ NO_PPSDELAY, - TRIMBLESV6_ID, - TRIMBLESV6_DESCRIPTION, - TRIMBLESV6_FORMAT, -*************** -*** 2198,2203 **** ---- 2210,2218 ---- - parse->basedelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */ - parse->basedelay.l_uf = parse->parse_type->cl_basedelay; - -+ parse->ppsdelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */ -+ parse->ppsdelay.l_uf = parse->parse_type->cl_ppsdelay; -+ - peer->rootdelay = parse->parse_type->cl_rootdelay; - peer->sstclktype = parse->parse_type->cl_type; - peer->precision = sys_precision; -*************** -*** 2554,2559 **** ---- 2569,2575 ---- - out->badformat = out->baddata = 0; - out->timereset = 0; - out->currentstatus = out->lastevent = CEVNT_NOMINAL; -+ out->kv_list = (struct ctl_var *)0; - } - - if (unit >= MAXUNITS) -*************** -*** 2579,2585 **** - - if (in->haveflags & CLK_HAVETIME2) - { -! /* not USED */ - } - - if (in->haveflags & CLK_HAVEVAL1) ---- 2595,2601 ---- - - if (in->haveflags & CLK_HAVETIME2) - { -! parse->ppsdelay = in->fudgetime2; - } - - if (in->haveflags & CLK_HAVEVAL1) -*************** -*** 2619,2637 **** - if (out) - { - register unsigned LONG sum = 0; -! register char *t; - register struct tm *tm; - register short utcoff; - register char sign; - register int i; - time_t tim; - -! out->haveflags = CLK_HAVETIME1|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3; - out->clockdesc = parse->parse_type->cl_description; - - out->fudgetime1 = parse->basedelay; - -! L_CLR(&out->fudgetime2); - - out->fudgeval1 = (LONG)parse->peer->stratum; - ---- 2635,2655 ---- - if (out) - { - register unsigned LONG sum = 0; -! register char *t, *tt; - register struct tm *tm; - register short utcoff; - register char sign; - register int i; - time_t tim; - -! outstatus[0] = '\0'; -! -! out->haveflags = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3; - out->clockdesc = parse->parse_type->cl_description; - - out->fudgetime1 = parse->basedelay; - -! out->fudgetime2 = parse->ppsdelay; - - out->fudgeval1 = (LONG)parse->peer->stratum; - -*************** -*** 2657,2667 **** - */ - off = parse->time.parse_stime.fp; - L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */ -! out->fudgetime2 = off; -! out->haveflags |= CLK_HAVETIME2; - } - } - - /* - * all this for just finding out the +-xxxx part (there are always - * new and changing fields in the standards 8-(). ---- 2675,2691 ---- - */ - off = parse->time.parse_stime.fp; - L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */ -! tt = add_var(&out->kv_list, 40, RO); -! sprintf(tt, "refclock_ppsskew=%s", lfptoms(&off, 6)); - } - } - -+ if (PARSE_PPS(parse->time.parse_state)) -+ { -+ tt = add_var(&out->kv_list, 80, RO|DEF); -+ sprintf(tt, "refclock_ppstime=\"%s\"", prettydate(&parse->time.parse_ptime.fp)); -+ } -+ - /* - * all this for just finding out the +-xxxx part (there are always - * new and changing fields in the standards 8-(). -*************** -*** 2686,2702 **** - sign = '+'; - } - -! tim = parse->time.parse_time.fp.l_ui - JAN_1970; -! strcpy(outstatus, ctime(&tim)); -! t = strrchr(outstatus, '\n'); -! if (!t) - { -! t = outstatus + strlen(outstatus); -! } - else - { -! sprintf(t, " %c%02d%02d", sign, utcoff / 60, utcoff % 60); -! t += strlen(t); - } - - if (!PARSE_GETTIMECODE(parse, &tmpctl)) ---- 2710,2729 ---- - sign = '+'; - } - -! tt = add_var(&out->kv_list, 128, RO|DEF); -! sprintf(tt, "refclock_time=\""); -! tt += strlen(tt); -! -! if (parse->time.parse_time.fp.l_ui == 0) - { -! strcpy(tt, "<UNDEFINED>\""); -! } - else - { -! strcpy(tt, prettydate(&parse->time.parse_time.fp)); -! t = tt + strlen(tt); -! -! sprintf(t, " (%c%02d%02d)\"", sign, utcoff / 60, utcoff % 60); - } - - if (!PARSE_GETTIMECODE(parse, &tmpctl)) -*************** -*** 2705,2731 **** - } - else - { - /* - * copy PPS flags from last read transaction (informational only) - */ - tmpctl.parsegettc.parse_state |= parse->time.parse_state & - (PARSEB_PPS|PARSEB_S_PPS); - -! if (t) -! { -! *t = ' '; -! (void) parsestate(tmpctl.parsegettc.parse_state, t+1); -! } -! else -! { -! strcat(outstatus, " "); -! (void) parsestate(tmpctl.parsegettc.parse_state, outstatus + strlen(outstatus)); -! } -! strcat(outstatus," <"); - if (tmpctl.parsegettc.parse_count) -! mkascii(outstatus+strlen(outstatus), sizeof(outstatus) - strlen(outstatus) - 1, - tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1); -! strcat(outstatus,">"); - parse->badformat += tmpctl.parsegettc.parse_badformat; - } - ---- 2732,2755 ---- - } - else - { -+ tt = add_var(&out->kv_list, 128, RO|DEF); -+ sprintf(tt, "refclock_status=\""); -+ tt += strlen(tt); -+ - /* - * copy PPS flags from last read transaction (informational only) - */ - tmpctl.parsegettc.parse_state |= parse->time.parse_state & - (PARSEB_PPS|PARSEB_S_PPS); - -! (void) parsestate(tmpctl.parsegettc.parse_state, tt); -! -! strcat(tt, "\""); -! - if (tmpctl.parsegettc.parse_count) -! mkascii(outstatus+strlen(outstatus), sizeof(outstatus)- strlen(outstatus) - 1, - tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1); -! - parse->badformat += tmpctl.parsegettc.parse_badformat; - } - -*************** -*** 2737,2752 **** - } - else - { -! strcat(outstatus," ("); -! strncat(outstatus, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count); -! strcat(outstatus,")"); - } - - /* - * gather state statistics - */ - -! t = outstatus + strlen(outstatus); - - for (i = 0; i <= CEVNT_MAX; i++) - { ---- 2761,2780 ---- - } - else - { -! tt = add_var(&out->kv_list, 80, RO|DEF); -! sprintf(tt, "refclock_format=\""); -! -! strncat(tt, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count); -! strcat(tt,"\""); - } - - /* - * gather state statistics - */ - -! tt = add_var(&out->kv_list, 200, RO|DEF); -! strcpy(tt, "refclock_states=\""); -! tt += strlen(tt); - - for (i = 0; i <= CEVNT_MAX; i++) - { -*************** -*** 2769,2787 **** - - if (stime) - { -! sprintf(t, "%s%s%s: %s (%d.%02d%%)", -! sum ? "; " : " [", - (parse->status == i) ? "*" : "", - clockstatus(i), - l_mktime(stime), - percent / 100, percent % 100); - sum += stime; -! t += strlen(t); - } - } - -! sprintf(t, "; running time: %s]", l_mktime(sum)); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; - out->timereset = parse->timestarted; ---- 2797,2824 ---- - - if (stime) - { -! sprintf(tt, "%s%s%s: %s (%d.%02d%%)", -! sum ? "; " : "", - (parse->status == i) ? "*" : "", - clockstatus(i), - l_mktime(stime), - percent / 100, percent % 100); - sum += stime; -! tt += strlen(tt); - } - } - -! sprintf(tt, "; running time: %s\"", l_mktime(sum)); -! -! tt = add_var(&out->kv_list, 32, RO); -! sprintf(tt, "refclock_id=\"%s\"", parse->parse_type->cl_id); - -+ tt = add_var(&out->kv_list, 80, RO); -+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); -+ -+ tt = add_var(&out->kv_list, 128, RO); -+ sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp\""); -+ - out->lencode = strlen(outstatus); - out->lastcode = outstatus; - out->timereset = parse->timestarted; -*************** -*** 3086,3091 **** ---- 3123,3130 ---- - */ - offset = parsetime->parse_ptime.fp; - -+ L_ADD(&offset, &parse->ppsdelay); -+ - if (PARSE_TIMECODE(parsetime->parse_state)) - { - if (M_ISGEQ(off.l_i, off.l_f, -1, 0x80000000) && -*************** -*** 3353,3358 **** ---- 3392,3403 ---- - * History: - * - * refclock_parse.c,v -+ * Revision 3.45 1994/01/25 19:06:27 kardel -+ * 94/01/23 reconcilation -+ * -+ * Revision 3.44 1994/01/25 17:32:23 kardel -+ * settable extended variables -+ * - * Revision 3.43 1994/01/23 16:28:39 kardel - * HAVE_TERMIOS introduced - * -diff -c -r1.1.1.8 lib/numtohost.c -*** lib/numtohost.c:1.1.1.8 1994/01/26 20:12:51 ---- lib/numtohost.c 1994/01/26 21:17:01 -*************** -*** 1,6 **** ---- 1,7 ---- - /* numtohost.c,v 3.1 1993/07/06 01:08:40 jbj Exp - * numtohost - convert network number to host name. - */ -+ #include "ntp_types.h" - #include "ntp_string.h" - #include <netdb.h> - diff --git a/usr.sbin/xntpd/patches/patch.30 b/usr.sbin/xntpd/patches/patch.30 deleted file mode 100644 index 55897f9..0000000 --- a/usr.sbin/xntpd/patches/patch.30 +++ /dev/null @@ -1,73 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa14619; 22 Mar 94 11:53 EST -Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa24926; - 22 Mar 94 11:48 EST -Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #2) - id m0pj9dD-000C8UC; Tue, 22 Mar 94 11:48 EST -Message-Id: <m0pj9dD-000C8UC@jagubox.gsfc.nasa.gov> -From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov> -Subject: Small patch for xntpd 3.3p and A/UX (tickadj) -To: Mills@udel.edu -Date: Tue, 22 Mar 1994 11:48:42 -0500 (EST) -Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov> -In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm -X-Mailer: ELM [version 2.4 PL23] -Content-Type: text -Content-Length: 1355 - -This little patch streamlines things a bit for tickadj and A/UX: - ------------>8 cut here -------------------------------- - -*** tickadj.c.orig Mon Mar 14 02:47:28 1994 ---- tickadj.c Tue Mar 22 11:41:19 1994 -*************** -*** 333,342 **** - - #if defined(SYS_AUX3) || defined(SYS_AUX2) - #define X_TICKADJ 0 -! #define X_V 1 -! #define X_TICK 2 - #define X_DEF -! static struct nlist nl[4]; - #endif - - #ifdef NeXT ---- 333,345 ---- - - #if defined(SYS_AUX3) || defined(SYS_AUX2) - #define X_TICKADJ 0 -! #define X_TICK 1 - #define X_DEF -! static struct nlist nl[] = -! { {"tickadj"}, -! {"tick"}, -! {""}, -! }; - #endif - - #ifdef NeXT -*************** -*** 428,440 **** - NULL - }; - struct stat stbuf; -- -- #if defined(SYS_AUX3) || defined(SYS_AUX2) -- strcpy (nl[X_TICKADJ].n_name, "tickadj"); -- strcpy (nl[X_V].n_name, "v"); -- strcpy (nl[X_TICK].n_name, "tick"); -- nl[3].n_name[0] = '\0'; -- #endif - - for (kname = kernels; *kname != NULL; kname++) { - if (stat(*kname, &stbuf) == -1) ---- 431,436 ---- ------------>8 cut here -------------------------------- --- -#include <std/disclaimer.h> - Jim Jagielski | - jim@jagubox.gsfc.nasa.gov | "Dead or alive, you're coming with me." - NASA/GSFC, Code 734.4 | RoboCop - Greenbelt, MD 20771 | - diff --git a/usr.sbin/xntpd/patches/patch.31 b/usr.sbin/xntpd/patches/patch.31 deleted file mode 100644 index 33048f9..0000000 --- a/usr.sbin/xntpd/patches/patch.31 +++ /dev/null @@ -1,83 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa12734; 27 Mar 94 8:52 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa20329; - 27 Mar 94 8:48 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA05771 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 15:48:38 +0200 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA01229 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 14:48:37 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199403271348.AA01229@faui43.informatik.uni-erlangen.de> -Subject: minor patches -To: mills@udel.edu -Date: Sun, 27 Mar 94 15:48:32 MET DST -X-Mailer: ELM [version 2.3 PL11] - -Hi, Dave, - -I just got through manually read news (in the spool area 8-( - when -will they ever fix our news installation). - -In order to avoid ptx being picked up in AT&T machine i added hope-fully -an additional check. Why do vendor have to make machine look the -same when they aren't ? I though uname was supposed to find out - I -guess I was wrong - every vendor seems to have his own ideas about -uname and they all do not mix very well. - -The fix to numtohost allows it to compile on ptx - I hope it still -compiles on all others (should though). - -diff -c lib/numtohost.c:1.1.1.9 lib/numtohost.c:3.7 -*** lib/numtohost.c:1.1.1.9 Sun Mar 27 15:36:54 1994 ---- lib/numtohost.c Sun Mar 27 15:36:54 1994 -*************** -*** 1,12 **** -! /* numtohost.c,v 3.1 1993/07/06 01:08:40 jbj Exp - * numtohost - convert network number to host name. - */ -- #include "ntp_types.h" - #include <netdb.h> - - #include "ntp_fp.h" -- #include "lib_strbuf.h" - #include "ntp_stdlib.h" - - #define LOOPBACKNET 0x7f000000 - #define LOOPBACKHOST 0x7f000001 ---- 1,11 ---- -! /* - * numtohost - convert network number to host name. - */ - #include <netdb.h> - - #include "ntp_fp.h" - #include "ntp_stdlib.h" -+ #include "lib_strbuf.h" - - #define LOOPBACKNET 0x7f000000 - #define LOOPBACKHOST 0x7f000001 -diff -c scripts/Guess.sh:1.1.1.8 scripts/Guess.sh:1.13 -*** scripts/Guess.sh:1.1.1.8 Sun Mar 27 15:38:53 1994 ---- scripts/Guess.sh Sun Mar 27 15:38:53 1994 -*************** -*** 78,84 **** - 3.2.*) - case "$4" in - v*) -! (i386) >/dev/null 2>&1 && guess=ptx;; - esac - esac - fi ---- 78,84 ---- - 3.2.*) - case "$4" in - v*) -! (i386) >/dev/null 2>&1 && [ -f /usr/lib/libseq.a ] && guess=ptx;; - esac - esac - fi --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.32 b/usr.sbin/xntpd/patches/patch.32 deleted file mode 100644 index 2e951cb..0000000 --- a/usr.sbin/xntpd/patches/patch.32 +++ /dev/null @@ -1,89 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa12910; 27 Mar 94 10:06 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa22473; - 27 Mar 94 10:05 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA09307 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 17:05:03 +0200 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA05359 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 16:05:01 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199403271505.AA05359@faui43.informatik.uni-erlangen.de> -Subject: more PTX related patches... -To: mills@udel.edu -Date: Sun, 27 Mar 94 17:04:56 MET DST -X-Mailer: ELM [version 2.3 PL11] - -Hi, Dave ! - -And another patche to make parse compile on PTX (Sequents -SysVR2 version). - -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/parse/parse.c,v -retrieving revision 3.23 -retrieving revision 3.24 -diff -c -r3.23 -r3.24 -*** parse/parse.c:3.23 1994/03/25 13:09:02 ---- parse/parse.c 1994/03/27 15:01:36 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp - * -! * parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp - * - * Parser module for reference clock - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.24 1994/03/27 15:01:36 kardel Exp - * -! * parse.c,v 3.24 1994/03/27 15:01:36 kardel Exp - * - * Parser module for reference clock - * -*************** -*** 29,34 **** ---- 29,38 ---- - #include "sys/time.h" - #include "sys/errno.h" - -+ #include "ntp_fp.h" -+ #include "ntp_unixtime.h" -+ #include "ntp_calendar.h" -+ - #include "ntp_machine.h" - - #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM) -*************** -*** 49,58 **** - #endif - #endif - -- #include "ntp_fp.h" -- #include "ntp_unixtime.h" -- #include "ntp_calendar.h" -- - #include "parse.h" - - #include "ntp_stdlib.h" ---- 53,58 ---- -*************** -*** 1162,1167 **** ---- 1162,1170 ---- - * History: - * - * parse.c,v -+ * Revision 3.24 1994/03/27 15:01:36 kardel -+ * reorder include file to cope with PTX -+ * - * Revision 3.23 1994/03/25 13:09:02 kardel - * considering FIXEDONLY entries only in FIXEDONLY mode - * --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.33 b/usr.sbin/xntpd/patches/patch.33 deleted file mode 100644 index e7d1934..0000000 --- a/usr.sbin/xntpd/patches/patch.33 +++ /dev/null @@ -1,75 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa13737; 27 Mar 94 15:27 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa29101; - 27 Mar 94 15:23 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA24270 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 22:23:35 +0200 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA07515 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 21:23:34 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199403272023.AA07515@faui43.informatik.uni-erlangen.de> -Subject: and for patch 33? -To: mills@udel.edu -Date: Sun, 27 Mar 94 22:23:30 MET DST -X-Mailer: ELM [version 2.3 PL11] - -This should get you to Patch 33. or higher. - - gcc 2.5.8 (from Per Hedeland - gcc 2.5.8 is just - causing to many poeple to complain 8-()_ - - a an note what one can do in Config.local in HACKermode. - -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/RELNOTES,v -retrieving revision 1.1.1.11 -diff -c -r1.1.1.11 RELNOTES -*** 1.1.1.11 1994/01/30 17:08:20 ---- RELNOTES 1994/03/27 19:40:27 -*************** -*** 31,36 **** ---- 31,40 ---- - For custom tailored configuration copying Config.local.dist to Config.local - and editing Config.local to suit the local needs is neccessary (at most - 3 lines to change), or use one of the make's above and then tweak it. -+ Config.local can also be used to override common settings from the -+ machines/* files like the AUTHDEFS= to select very specific configurations. -+ Please use this feature with care and don't be disappointed if it doesn't -+ work the way you expect. - - (2) Type "make" to compile everything of general interest. Expect few or - no warnings using cc and a moderate level of warnings using gcc. -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/include/l_stdlib.h,v -retrieving revision 1.1.1.6 -diff -c -r1.1.1.6 l_stdlib.h -*** include/l_stdlib.h:1.1.1.6 1994/01/28 13:07:49 ---- include/l_stdlib.h 1994/03/27 19:34:40 -*************** -*** 70,80 **** - - extern int close P((int)); - extern int ioctl P((int, int, char *)); -! extern int read P((int, char *, unsigned)); - extern int rename P((char *, char *)); -! extern int write P((int, char *, int)); -! extern int unlink P((char *)); -! extern int link P((char *, char *)); - - #ifdef FILE - extern int fclose P((FILE *)); ---- 70,80 ---- - - extern int close P((int)); - extern int ioctl P((int, int, char *)); -! extern int read P((int, void *, unsigned)); - extern int rename P((char *, char *)); -! extern int write P((int, const void *, unsigned)); -! extern int unlink P((const char *)); -! extern int link P((const char *, const char *)); - - #ifdef FILE - extern int fclose P((FILE *)); --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.34 b/usr.sbin/xntpd/patches/patch.34 deleted file mode 100644 index a382889..0000000 --- a/usr.sbin/xntpd/patches/patch.34 +++ /dev/null @@ -1,303 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa02155; 25 Mar 94 8:47 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa05544; - 25 Mar 94 8:45 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA27199 (5.65c-6/7.3v-FAU); Fri, 25 Mar 1994 14:45:13 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA06935 (5.65c-6/7.3m-FAU); Fri, 25 Mar 1994 14:45:11 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199403251345.AA06935@faui43.informatik.uni-erlangen.de> -Subject: bugfixes for parse & ntpq enhancements -To: mills@udel.edu -Date: Fri, 25 Mar 94 14:45:05 MET -X-Mailer: ELM [version 2.3 PL11] - -Hi Dave, - -I have a 2 bug fixes and an ntpq enhancement: - - parse bitmap initialisation fixed - - allow for large offsets in refclock_parse (>4 min 8-() - - decode the flash bits in cooked mode - -diff -c ntpq/ntpq.c:1.1.1.21 ntpq/ntpq.c:3.22 -*** ntpq/ntpq.c:1.1.1.21 Fri Mar 25 14:32:38 1994 ---- ntpq/ntpq.c Fri Mar 25 14:32:38 1994 -*************** -*** 75,80 **** ---- 75,81 ---- - #define OC 12 /* integer, print in octal */ - #define MD 13 /* mode */ - #define AR 14 /* array of times */ -+ #define TST 15 /* test flags */ - #define EOV 255 /* end of table */ - - -*************** -*** 145,151 **** - { CP_RECEIVED, UI, "received" }, /* 31 */ - { CP_SENT, UI, "sent" }, /* 32 */ - { CP_FILTERROR, AR, "filterror" }, /* 33 */ -! { CP_FLASH, ST, "flash"}, /* 34 */ - { CP_DISP, AR, "disp" }, /* 35 */ - /* - * These are duplicate entires so that we can ---- 146,152 ---- - { CP_RECEIVED, UI, "received" }, /* 31 */ - { CP_SENT, UI, "sent" }, /* 32 */ - { CP_FILTERROR, AR, "filterror" }, /* 33 */ -! { CP_FLASH, TST, "flash"}, /* 34 */ - { CP_DISP, AR, "disp" }, /* 35 */ - /* - * These are duplicate entires so that we can -*************** -*** 189,194 **** ---- 190,209 ---- - }; - - /* -+ * flasher bits -+ */ -+ static char *tstflagnames[] = { -+ "DUPLICATE PKT", -+ "BOGUS PKT", -+ "PROTO UNSYNC", -+ "PEER BOUNDS", -+ "BAD AUTH", -+ "PEER CLOCK UNSYNC", -+ "BAD STRATUM", -+ "ROOT BOUNDS" -+ }; -+ -+ /* - * Leap values - */ - struct codestring leap_codes[] = { -*************** -*** 2836,2842 **** - output(fp, name, buf); - } - -! - - /* - * cookedprint - output variables in cooked mode ---- 2851,2895 ---- - output(fp, name, buf); - } - -! static char * -! tstflags(val) -! U_LONG val; -! { -! register char *cb, *s; -! register int i; -! register char *sep; -! -! sep = ""; -! i = 0; -! s = cb = &circ_buf[nextcb][0]; -! if (++nextcb >= NUMCB) -! nextcb = 0; -! -! sprintf(cb, "0x%x", val); -! cb += strlen(cb); -! if (val <= ((1<<8)-1)) { -! if (!val) { -! strcat(cb, "<OK>"); -! cb += strlen(cb); -! } else { -! *cb++ = '<'; -! while (val) { -! if (val & 0x1) { -! sprintf(cb, "%s%s", sep, tstflagnames[i]); -! sep = ";"; -! cb += strlen(cb); -! } -! i++; -! val >>= 1; -! } -! *cb++ = '>'; -! } -! } else { -! *cb++ = '?'; -! } -! *cb = '\0'; -! return s; -! } - - /* - * cookedprint - output variables in cooked mode -*************** -*** 2994,2999 **** ---- 3047,3059 ---- - outputarr(fp, name, narr, lfparr); - break; - -+ case TST: -+ if (!decodeuint(value, &uval)) -+ output_raw = '?'; -+ else -+ output(fp, name, tstflags(uval)); -+ break; -+ - default: - (void) fprintf(stderr, - "Internal error in cookedprint, %s=%s, fmt %d\n", -diff -c parse/parse.c:1.1.1.10 parse/parse.c:3.23 -*** parse/parse.c:1.1.1.10 Fri Mar 25 14:33:02 1994 ---- parse/parse.c Fri Mar 25 14:33:02 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp - * -! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp - * - * Parser module for reference clock - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp - * -! * parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp - * - * Parser module for reference clock - * -*************** -*** 178,183 **** ---- 178,187 ---- - { - fmt = clockformats[i]; - -+ if (!(parseio->parse_flags & PARSE_FIXED_FMT) && -+ (fmt->flags & CVT_FIXEDONLY)) -+ continue; -+ - if (fmt->flags & F_START) - { - index = fmt->startsym / 8; -*************** -*** 1158,1163 **** ---- 1162,1170 ---- - * History: - * - * parse.c,v -+ * Revision 3.23 1994/03/25 13:09:02 kardel -+ * considering FIXEDONLY entries only in FIXEDONLY mode -+ * - * Revision 3.22 1994/02/25 12:34:49 kardel - * allow for converter generated utc times - * -diff -c xntpd/refclock_parse.c:1.1.1.13 xntpd/refclock_parse.c:3.53 -*** xntpd/refclock_parse.c:1.1.1.13 Fri Mar 25 14:35:07 1994 ---- xntpd/refclock_parse.c Fri Mar 25 14:35:08 1994 -*************** -*** 1,8 **** - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp - * -! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp - * - * generic reference clock driver for receivers - * ---- 1,8 ---- - #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) - /* -! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp - * -! * refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp - * - * generic reference clock driver for receivers - * -*************** -*** 129,135 **** - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp"; - #endif - - /**=========================================================================== ---- 129,135 ---- - #include "parse.h" - - #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -! static char rcsid[]="refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp"; - #endif - - /**=========================================================================== -*************** -*** 2824,2830 **** - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); -! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; ---- 2824,2830 ---- - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); -! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; -*************** -*** 3103,3109 **** - L_ADD(&off, &offset); - rectime = off; /* this makes org time and xmt time somewhat artificial */ - -! if (parse->flags & PARSE_STAT_FILTER) - { - struct timeval usecerror; - /* ---- 3103,3113 ---- - L_ADD(&off, &offset); - rectime = off; /* this makes org time and xmt time somewhat artificial */ - -! L_SUB(&off, &parsetime->parse_stime.fp); -! -! if ((parse->flags & PARSE_STAT_FILTER) && -! (off.l_i > -60) && -! (off.l_i < 60)) /* take usec error only if within +- 60 secs */ - { - struct timeval usecerror; - /* -*************** -*** 3115,3124 **** - sTVTOTS(&usecerror, &off); - L_ADD(&off, &offset); - } -- else -- { -- L_SUB(&off, &parsetime->parse_stime.fp); -- } - } - - if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit)) ---- 3119,3124 ---- -*************** -*** 3409,3414 **** ---- 3409,3420 ---- - * History: - * - * refclock_parse.c,v -+ * Revision 3.53 1994/03/25 13:07:39 kardel -+ * fixed offset calculation for large (>4 Min) offsets -+ * -+ * Revision 3.52 1994/03/03 09:58:00 kardel -+ * stick -kv in cvs is no fun -+ * - * Revision 3.49 1994/02/20 13:26:00 kardel - * rcs id cleanup - * --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.35 b/usr.sbin/xntpd/patches/patch.35 deleted file mode 100644 index e6b1ea4..0000000 --- a/usr.sbin/xntpd/patches/patch.35 +++ /dev/null @@ -1,914 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa25410; 3 Apr 94 18:04 EDT -Received: from adrastea.lcs.mit.edu by louie.udel.edu id aa09227; - 3 Apr 94 17:56 EDT -Received: by adrastea.lcs.mit.edu; id AA26407; Sun, 3 Apr 1994 17:56:48 -0400 -Date: Sun, 3 Apr 1994 17:56:48 -0400 -From: Garrett Wollman <wollman@adrastea.lcs.mit.edu> -Message-Id: <9404032156.AA26407@adrastea.lcs.mit.edu> -To: Dave Mills <Mills@udel.edu> -Subject: xntpd 3.3p changes for FreeBSD - -This still doesn't solve the 18-second discrepancy. However, the -patch file below shows the current differences between xntp3.3p and -the FreeBSD version of same, deleted files not included. I have also -included the Makefiles that we use to provide some idea of our build -structure. (Thankfully, xntp---unlike some other popular pieces of -software---has a sane directory structure to begin with, so it isn't -nearly as difficult to handle this sort of thing than it is with, say, -GCC.) - -diff -c /dev/null 386BSD/src/contrib/xntpd/Makefile.inc:1.3 -*** /dev/null Sun Apr 3 13:42:15 1994 ---- 386BSD/src/contrib/xntpd/Makefile.inc Sun Apr 3 13:42:15 1994 -*************** -*** 0 **** ---- 1,7 ---- -+ DEFS_LOCAL=-DREFCLOCK -DPARSE -+ NTPDEFS= -DSYS_FREEBSD -DSYS_386BSD -DHAVE_TERMIOS -+ AUTHDEFS= -DMD5 -+ CLOCKDEFS= -DLOCAL_CLOCK -DPST -DWWVB -DAS2201 -DGOES -DGPSTM -DOMEGA \ -+ -DLEITCH -DTRAK -+ CFLAGS+= ${NTPDEFS} ${DEFS_LOCAL} ${AUTHDEFS} ${CLOCKDEFS} ${COPTS} -+ BINDIR?= /usr/sbin -diff -c /dev/null 386BSD/src/contrib/xntpd/README.FreeBSD:1.5 -*** /dev/null Sun Apr 3 13:42:15 1994 ---- 386BSD/src/contrib/xntpd/README.FreeBSD Sun Apr 3 13:42:15 1994 -*************** -*** 0 **** ---- 1,78 ---- -+ This version of NTP was converted to the BSD-style Makefile system by -+ Garrett Wollman (wollman@freefall.cdrom.com); it is based on version -+ 3.3p (late beta) from the University of Delaware. -+ -+ Besides the Makefile changes, the DES code has been completely removed -+ in order to make this code exportable. If you have a legal copy of -+ `authdes.c', you can just add it to the lib/ directory and add `-DDES' -+ to the AUTHDEFS in Makefile.inc. -+ -+ You can change CLOCKDEFS in the same file to add other reference clocks. -+ -+ ---------------------------------------------------- -+ Support for Conrad electronic's "DCF-77 Uhr, Mobil". -+ ---------------------------------------------------- -+ Conrad electronic in Germany,, Phone (+49) 962230111 (?), sells a gadget -+ called "DCF77 Uhr, mobil", which is a DCF77 timecode receiver with a -+ rs-232 interface. The price is around DM130. -+ 9-pin interface is Order# 97 94 57 66 -+ 25-pin interface is Order# 97 94 81 66 -+ -+ You must define -+ -DDCF77 -DPPS -DFREEBSD_CONRAD -DDEBUG -+ when you compile xntpd. You can later remove -DDEBUG, if you feel like it. -+ -+ You must also have -+ options COM_BIDIR -+ defined in your kernel, and finally the ttyport you intend to use must -+ have special interrupt vector: -+ device sio1 at isa? port "IO_COM2" tty irq 3 vector siointrts -+ ^^^^^^^^^^^^ -+ connect the radio-clock to the tty port and link it to /dev/refclock-0: -+ -+ cd /dev -+ sh MAKEDEV cua1 -+ ln -s /dev/cua01 /dev/refclock-0 -+ -+ make a directory to gather statistics in: -+ mkdir /var/tmp/ntp -+ -+ Create a /etc/ntp.conf along these lines: -+ -+ # DCF77 without PPS -+ server 127.127.8.20 -+ # DCF77 with PPS -+ #server 127.127.8.148 prefer -+ -+ driftfile /var/tmp/ntp/ntp.drift -+ statsdir /var/tmp/ntp -+ statistics loopstats -+ statistics peerstats -+ statistics clockstats -+ filegen peerstats file peerstats type day enable -+ filegen loopstats file loopstats type day enable -+ filegen clockstats file clockstats type day enable -+ -+ Try to start it: -+ comcontrol ttyd1 bidir -+ tickadj -A -+ xntpd -d -d -d -+ -+ You should see the red LED flash on the receiver every second now. You -+ may have to experiment a bit with the location, and possibly adjust the -+ minute variable resistor inside to get a good signal. Be aware, that just -+ because you see the light flash, is not the same as the signal being -+ received by the computer. The chip doing the work in the reciver uses -+ less than 1 micro-ampere, so even if RTS isn't pulled low, it will happily -+ receive, but be unable to buffer the signal to the rs-232 levels needed. -+ -+ You can see what's going on in /var/log/messages, and query the -+ daemon using xntpdc and ntpq, in particular the "clockvar" command -+ of ntpq will tell about the clocks healt. -+ -+ I live in Slagelse, Denmark, which is ~1000 Km from Mainflingen, yet -+ I have +/- 2 ms precision from this cheap gadget. If you have a very -+ stable signal, you can use the 'pps' address instead to improve your -+ timing. -+ -+ Have fun... Poul-Henning Kamp <phk@login.dkuug.dk> -diff -c /dev/null 386BSD/src/contrib/xntpd/authstuff/Makefile:1.2 -*** /dev/null Sun Apr 3 13:42:19 1994 ---- 386BSD/src/contrib/xntpd/authstuff/Makefile Sun Apr 3 13:42:20 1994 -*************** -*** 0 **** ---- 1,27 ---- -+ # -+ # $Id: Makefile,v 1.2 1993/12/22 11:32:10 rgrimes Exp $ -+ # -+ # Most of the programs in this directory are completely useless for the -+ # NTP configuration that we provide by default. -+ # We provide the `md5' program as a public service. -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ .if exists(${.CURDIR}/../lib/obj) -+ LDADD+= -L${.CURDIR}/../lib/obj -+ DPADD+= ${.CURDIR}/../lib/obj/libntp.a -+ .else -+ LDADD+= -L${.CURDIR}/../lib -+ DPADD+= ${.CURDIR}/../lib/libntp.a -+ .endif -+ -+ LDADD+= -lntp -+ -+ PROG= md5 -+ -+ SRCS= md5driver.c -+ NOMAN= -+ -+ install: -+ -+ .include <bsd.prog.mk> -diff -c 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.1.1.2 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.2 -*** 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.1.1.2 Sun Apr 3 13:42:20 1994 ---- 386BSD/src/contrib/xntpd/authstuff/md5driver.c Sun Apr 3 13:42:20 1994 -*************** -*** 30,36 **** ---- 30,38 ---- - #endif /* SYS_BSDI */ - #include "md5.h" - -+ #ifndef MD5 - #define MD5 -+ #endif - #include "ntp_string.h" - #include "ntp_stdlib.h" - -diff -c /dev/null 386BSD/src/contrib/xntpd/clockstuff/Makefile:1.1 -*** /dev/null Sun Apr 3 13:42:21 1994 ---- 386BSD/src/contrib/xntpd/clockstuff/Makefile Sun Apr 3 13:42:21 1994 -*************** -*** 0 **** ---- 1,16 ---- -+ # -+ # $Id: Makefile,v 1.1 1993/12/21 21:06:24 wollman Exp $ -+ # -+ -+ PROG= propdelay -+ LIBADD= -L${.CURDIR}/../lib -lntp -lm -+ DPADD= ${.CURDIR}/../lib/libntp.a -+ -+ SRCS= propdelay.c -+ NOMAN= -+ -+ install: -+ -+ CLEANFILES+= chutest clktest chutest.o clktest.o -+ -+ .include <bsd.prog.mk> -diff -c /dev/null 386BSD/src/contrib/xntpd/lib/Makefile:1.5 -*** /dev/null Sun Apr 3 13:43:01 1994 ---- 386BSD/src/contrib/xntpd/lib/Makefile Sun Apr 3 13:43:01 1994 -*************** -*** 0 **** ---- 1,30 ---- -+ # -+ # $Id: Makefile,v 1.5 1994/04/03 20:37:05 wollman Exp $ -+ # -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ SRCS= atoint.c atolfp.c atouint.c auth12crypt.c authdecrypt.c authdes.c \ -+ authencrypt.c authkeys.c authparity.c authreadkeys.c authusekey.c \ -+ buftvtots.c caljulian.c calleapwhen.c caltontp.c calyearstart.c \ -+ clocktime.c dofptoa.c dolfptoa.c emalloc.c fptoa.c fptoms.c \ -+ gettstamp.c hextoint.c hextolfp.c humandate.c inttoa.c \ -+ lib_strbuf.c mfptoa.c mfptoms.c modetoa.c mstolfp.c \ -+ msutotsf.c netof.c numtoa.c refnumtoa.c numtohost.c octtoint.c \ -+ prettydate.c ranny.c tsftomsu.c tstotv.c tvtoa.c tvtots.c \ -+ uglydate.c uinttoa.c utvtoa.c clocktypes.c \ -+ md5.c a_md5encrypt.c a_md5decrypt.c \ -+ a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \ -+ findconfig.c getopt.c -+ -+ NOMAN= -+ NOPROFILE= -+ LIB= ntp -+ CLEANFILES+=authdes.c -+ -+ install: -+ -+ authdes.c: authdes.c.export -+ cp ${.CURDIR}/authdes.c.export authdes.c -+ -+ .include <bsd.lib.mk> -diff -c /dev/null 386BSD/src/contrib/xntpd/ntpdate/Makefile:1.3 -*** /dev/null Sun Apr 3 13:43:27 1994 ---- 386BSD/src/contrib/xntpd/ntpdate/Makefile Sun Apr 3 13:43:27 1994 -*************** -*** 0 **** ---- 1,28 ---- -+ # -+ # $Id: Makefile,v 1.3 1993/12/22 11:32:56 rgrimes Exp $ -+ # -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ .if exists(${.CURDIR}/../lib/obj) -+ LDADD+= -L${.CURDIR}/../lib/obj -+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a -+ .else -+ LDADD+= -L${.CURDIR}/../lib -+ DPADD+= -L${.CURDIR}/../lib/libntp.a -+ .endif -+ -+ LDADD+= -lntp -+ -+ PROG= ntpdate -+ MAN8= ${.CURDIR}/../doc/ntpdate.8 -+ CLEANFILES+= .version version.c -+ -+ SRCS= ntpdate.c version.c -+ -+ beforedepend: version.c -+ -+ version.c: ${.CURDIR}/../VERSION -+ ${.CURDIR}/../scripts/mkversion ntpdate -+ -+ .include <bsd.prog.mk> -diff -c /dev/null 386BSD/src/contrib/xntpd/ntpq/Makefile:1.3 -*** /dev/null Sun Apr 3 13:43:28 1994 ---- 386BSD/src/contrib/xntpd/ntpq/Makefile Sun Apr 3 13:43:29 1994 -*************** -*** 0 **** ---- 1,29 ---- -+ # -+ # $Id: Makefile,v 1.3 1993/12/22 11:33:07 rgrimes Exp $ -+ # -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ .if exists(${.CURDIR}/../lib/obj) -+ LDADD+= -L${.CURDIR}/../lib/obj -+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a -+ .else -+ LDADD+= -L${.CURDIR}/../lib -+ DPADD+= -L${.CURDIR}/../lib/libntp.a -+ .endif -+ -+ LDADD+= -lntp -+ -+ PROG= ntpq -+ MAN8= ${.CURDIR}/../doc/ntpq.8 -+ CLEANFILES+= .version version.c -+ BINDIR= /usr/bin -+ -+ SRCS= ntpq.c ntpq_ops.c version.c -+ -+ beforedepend: version.c -+ -+ version.c: ${.CURDIR}/../VERSION -+ ${.CURDIR}/../scripts/mkversion ntpq -+ -+ .include <bsd.prog.mk> -diff -c 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.1.1.2 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.2 -*** 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.1.1.2 Sun Apr 3 13:43:30 1994 ---- 386BSD/src/contrib/xntpd/ntpq/ntpq.c Sun Apr 3 13:43:30 1994 -*************** -*** 301,307 **** - static int decodearr P((char *, int *, l_fp *)); - static char * getcode P((int, struct codestring *)); - static void help P((struct parse *, FILE *)); -! #if defined(sgi) || defined(SYS_BSDI) - static int helpsort P((const void *, const void *)); - #else - static int helpsort P((char **, char **)); ---- 301,307 ---- - static int decodearr P((char *, int *, l_fp *)); - static char * getcode P((int, struct codestring *)); - static void help P((struct parse *, FILE *)); -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - static int helpsort P((const void *, const void *)); - #else - static int helpsort P((char **, char **)); -*************** -*** 335,341 **** - static void endoutput P((FILE *)); - static void outputarr P((FILE *, char *, int, l_fp *)); - static void cookedprint P((int, int, char *, int, FILE *)); -! #if defined(sgi) || defined(SYS_BSDI) - static int assoccmp P((const void *, const void *)); - #else - static int assoccmp P((struct association *, struct association *)); ---- 335,341 ---- - static void endoutput P((FILE *)); - static void outputarr P((FILE *, char *, int, l_fp *)); - static void cookedprint P((int, int, char *, int, FILE *)); -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - static int assoccmp P((const void *, const void *)); - #else - static int assoccmp P((struct association *, struct association *)); -*************** -*** 1888,1894 **** - for (xcp = opcmds; xcp->keyword != 0; xcp++) - cmdsort[n++] = xcp->keyword; - -! #if defined(sgi) || defined(SYS_BSDI) - qsort((void *)cmdsort, n, sizeof(char *), helpsort); - #else - qsort((char *)cmdsort, n, sizeof(char *), helpsort); ---- 1888,1894 ---- - for (xcp = opcmds; xcp->keyword != 0; xcp++) - cmdsort[n++] = xcp->keyword; - -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - qsort((void *)cmdsort, n, sizeof(char *), helpsort); - #else - qsort((char *)cmdsort, n, sizeof(char *), helpsort); -*************** -*** 1934,1940 **** - * helpsort - do hostname qsort comparisons - */ - static int -! #if defined(sgi) || defined(SYS_BSDI) - helpsort(t1, t2) - const void *t1; - const void *t2; ---- 1934,1940 ---- - * helpsort - do hostname qsort comparisons - */ - static int -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - helpsort(t1, t2) - const void *t1; - const void *t2; -*************** -*** 3028,3034 **** - sortassoc() - { - if (numassoc > 1) -! #if defined(sgi) || defined(SYS_BSDI) - qsort((void *)assoc_cache, numassoc, - sizeof(struct association), assoccmp); - #else ---- 3028,3034 ---- - sortassoc() - { - if (numassoc > 1) -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - qsort((void *)assoc_cache, numassoc, - sizeof(struct association), assoccmp); - #else -*************** -*** 3042,3048 **** - * assoccmp - compare two associations - */ - static int -! #if defined(sgi) || defined(SYS_BSDI) - assoccmp(t1, t2) - const void *t1; - const void *t2; ---- 3042,3048 ---- - * assoccmp - compare two associations - */ - static int -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - assoccmp(t1, t2) - const void *t1; - const void *t2; -diff -c /dev/null 386BSD/src/contrib/xntpd/ntptrace/Makefile:1.2 -*** /dev/null Sun Apr 3 13:43:31 1994 ---- 386BSD/src/contrib/xntpd/ntptrace/Makefile Sun Apr 3 13:43:31 1994 -*************** -*** 0 **** ---- 1,28 ---- -+ # -+ # $Id: Makefile,v 1.2 1993/12/22 11:33:14 rgrimes Exp $ -+ # -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ .if exists(${.CURDIR}/../lib/obj) -+ LDADD+= -L${.CURDIR}/../lib/obj -+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a -+ .else -+ LDADD+= -L${.CURDIR}/../lib -+ DPADD+= -L${.CURDIR}/../lib/libntp.a -+ .endif -+ -+ LDADD+= -lntp -+ -+ PROG= ntptrace -+ MAN8= ${.CURDIR}/../doc/ntptrace.8 -+ CLEANFILES+= .version version.c -+ -+ SRCS= ntptrace.c version.c -+ -+ beforedepend: version.c -+ -+ version.c: ${.CURDIR}/../VERSION -+ ${.CURDIR}/../scripts/mkversion ntptrace -+ -+ .include <bsd.prog.mk> -diff -c /dev/null 386BSD/src/contrib/xntpd/parse/Makefile:1.1 -*** /dev/null Sun Apr 3 13:43:32 1994 ---- 386BSD/src/contrib/xntpd/parse/Makefile Sun Apr 3 13:43:32 1994 -*************** -*** 0 **** ---- 1,19 ---- -+ # -+ # $Id: Makefile,v 1.1 1993/12/21 20:04:14 wollman Exp $ -+ # -+ -+ PARSEFLAGS= -DCLOCK_SCHMID -DCLOCK_DCF7000 -DCLOCK_MEINBERG \ -+ -DCLOCK_RAWDCF -DCLOCK_TRIMSV6 -+ -+ CFLAGS+= -I${.CURDIR}/../include ${PARSEFLAGS} -+ -+ SRCS= parse.c parse_conf.c clk_meinberg.c clk_schmid.c clk_rawdcf.c \ -+ clk_dcf7000.c clk_trimble.c -+ -+ NOMAN= -+ NOPROFILE= -+ LIB= parse -+ -+ install: -+ -+ .include <bsd.lib.mk> -diff -c 386BSD/src/contrib/xntpd/scripts/mkversion:1.1.1.1 386BSD/src/contrib/xntpd/scripts/mkversion:1.2 -*** 386BSD/src/contrib/xntpd/scripts/mkversion:1.1.1.1 Sun Apr 3 13:43:49 1994 ---- 386BSD/src/contrib/xntpd/scripts/mkversion Sun Apr 3 13:43:49 1994 -*************** -*** 9,20 **** - echo $RUN > .version - - DATE="`date`" - - if [ -r VERSION ]; then - VERSION=VERSION - else - VERSION=../VERSION -! fi - - if [ -f "$VERSION" ]; then - FLAGS="`egrep '^[0-9a-zA-Z_]+=' "$VERSION" | tr '\012' ';'` " ---- 9,23 ---- - echo $RUN > .version - - DATE="`date`" -+ TOPDIR=`echo $0 | sed -e 's;mkversion;..;'` - - if [ -r VERSION ]; then - VERSION=VERSION -+ else if [ -r ${TOPDIR}/VERSION ]; then -+ VERSION=${TOPDIR}/VERSION - else - VERSION=../VERSION -! fi; fi - - if [ -f "$VERSION" ]; then - FLAGS="`egrep '^[0-9a-zA-Z_]+=' "$VERSION" | tr '\012' ';'` " -diff -c /dev/null 386BSD/src/contrib/xntpd/util/Makefile:1.2 -*** /dev/null Sun Apr 3 13:43:53 1994 ---- 386BSD/src/contrib/xntpd/util/Makefile Sun Apr 3 13:43:54 1994 -*************** -*** 0 **** ---- 1,28 ---- -+ # -+ # $Id: Makefile,v 1.2 1993/12/22 11:33:28 rgrimes Exp $ -+ # -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ .if exists(${.CURDIR}/../lib/obj) -+ LDADD+= -L${.CURDIR}/../lib/obj -+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a -+ .else -+ LDADD+= -L${.CURDIR}/../lib -+ DPADD+= -L${.CURDIR}/../lib/libntp.a -+ .endif -+ -+ LDADD+= -lntp -+ -+ PROG= tickadj -+ MAN8= ${.CURDIR}/../doc/tickadj.8 -+ CLEANFILES+= .version version.c -+ -+ SRCS= tickadj.c version.c -+ -+ beforedepend: version.c -+ -+ version.c: ${.CURDIR}/../VERSION -+ ${.CURDIR}/../scripts/mkversion tickadj -+ -+ .include <bsd.prog.mk> -diff -c /dev/null 386BSD/src/contrib/xntpd/xntpd/Makefile:1.5 -*** /dev/null Sun Apr 3 13:43:56 1994 ---- 386BSD/src/contrib/xntpd/xntpd/Makefile Sun Apr 3 13:43:56 1994 -*************** -*** 0 **** ---- 1,45 ---- -+ # -+ # $Id: Makefile,v 1.5 1994/04/03 20:37:26 wollman Exp $ -+ # -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ .if exists(${.CURDIR}/../lib/obj) -+ LDADD+= -L${.CURDIR}/../lib/obj -+ DPADD+= ${.CURDIR}/../lib/obj/libntp.a -+ .else -+ LDADD+= -L${.CURDIR}/../lib -+ DPADD+= ${.CURDIR}/../lib/libntp.a -+ .endif -+ -+ .if exists(${.CURDIR}/../parse/obj) -+ LDADD+= -L${.CURDIR}/../parse/obj -+ DPADD+= ${.CURDIR}/../parse/obj/libparse.a -+ .else -+ LDADD+= -L${.CURDIR}/../parse -+ DPADD+= ${.CURDIR}/../parse/libparse.a -+ .endif -+ -+ LDADD+= -lntp -lparse -+ -+ PROG= xntpd -+ MAN8= ${.CURDIR}/../doc/xntpd.8 -+ CLEANFILES+= .version version.c -+ -+ SRCS= ntp_config.c ntp_control.c ntp_io.c ntp_leap.c \ -+ ntp_loopfilter.c ntp_monitor.c ntp_peer.c ntp_proto.c \ -+ ntp_refclock.c ntp_request.c ntp_restrict.c ntp_timer.c \ -+ ntp_unixclock.c ntp_util.c ntpd.c refclock_chu.c \ -+ refclock_conf.c refclock_local.c refclock_pst.c \ -+ refclock_wwvb.c refclock_goes.c refclock_mx4200.c \ -+ refclock_parse.c refclock_as2201.c refclock_omega.c \ -+ refclock_tpro.c refclock_leitch.c refclock_irig.c \ -+ refclock_msfees.c refclock_gpstm.c refclock_trak.c ntp_intres.c \ -+ ntp_filegen.c version.c -+ -+ beforedepend: version.c -+ -+ version.c: ${.CURDIR}/../VERSION -+ ${.CURDIR}/../scripts/mkversion xntpd -+ -+ .include <bsd.prog.mk> -diff -c 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.3 -*** 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.1.1.3 Sun Apr 3 13:43:59 1994 ---- 386BSD/src/contrib/xntpd/xntpd/ntp_control.c Sun Apr 3 13:44:00 1994 -*************** -*** 264,278 **** - /* - * System and processor definitions. These will change for the gizmo board. - */ -! #ifndef STR_SYSTEM -! #define STR_SYSTEM "UNIX" -! #endif -! #ifndef STR_PROCESSOR -! #define STR_PROCESSOR "unknown" -! #endif -! -! static char str_system[] = STR_SYSTEM; -! static char str_processor[] = STR_PROCESSOR; - - /* - * Trap structures. We only allow a few of these, and send ---- 264,271 ---- - /* - * System and processor definitions. These will change for the gizmo board. - */ -! #include <sys/utsname.h> -! static struct utsname utsname; - - /* - * Trap structures. We only allow a few of these, and send -*************** -*** 433,438 **** ---- 426,433 ---- - { - int i; - -+ uname(&utsname); -+ - ctl_clr_stats(); - - ctl_auth_keyid = 0; -*************** -*** 1267,1278 **** - ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning); - break; - case CS_PROCESSOR: -! ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor, -! sizeof(str_processor) - 1); - break; - case CS_SYSTEM: -! ctl_putstr(sys_var[CS_SYSTEM].text, str_system, -! sizeof(str_system) - 1); - break; - case CS_KEYID: - ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0); ---- 1262,1273 ---- - ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning); - break; - case CS_PROCESSOR: -! ctl_putstr(sys_var[CS_PROCESSOR].text, utsname.machine, -! strlen(utsname.machine)); - break; - case CS_SYSTEM: -! ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname, -! strlen(utsname.sysname)); - break; - case CS_KEYID: - ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0); -diff -c 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.3 -*** 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.1.1.3 Sun Apr 3 13:44:01 1994 ---- 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c Sun Apr 3 13:44:01 1994 -*************** -*** 30,35 **** ---- 30,37 ---- - * PPS - supply loopfilter with PPS samples (if configured) - * PPSPPS - notify loopfilter of PPS file descriptor - * -+ * FREEBSD_CONRAD - Make very cheap "Conrad DCF77 RS-232" gadget work -+ * with FreeBSD. - * TTY defines: - * HAVE_BSD_TTYS - currently unsupported - * HAVE_SYSV_TTYS - will use termio.h -*************** -*** 82,87 **** ---- 84,92 ---- - #include <time.h> - - #include <sys/errno.h> -+ #ifdef FREEBSD_CONRAD -+ #include <sys/ioctl.h> -+ #endif - extern int errno; - - #if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS) -*************** -*** 440,446 **** ---- 445,456 ---- - #define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */ - #define RAWDCF_FORMAT "RAW DCF77 Timecode" - #define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */ -+ -+ #ifdef FREEBSD_CONRAD -+ #define RAWDCF_CFLAG (CS8|CREAD|CLOCAL) -+ #else - #define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL) -+ #endif - #define RAWDCF_IFLAG 0 - #define RAWDCF_OFLAG 0 - #define RAWDCF_LFLAG 0 -*************** -*** 1482,1492 **** ---- 1492,1513 ---- - struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock; - register int count; - register char *s; -+ #ifdef FREEBSD_CONRAD -+ struct timeval foo; -+ #endif -+ - /* - * eat all characters, parsing then and feeding complete samples - */ - count = rbufp->recv_length; - s = rbufp->recv_buffer; -+ #ifdef FREEBSD_CONRAD -+ ioctl(parse->fd,TIOCTIMESTAMP,&foo); -+ TVTOTS(&foo, &rbufp->recv_time); -+ rbufp->recv_time.l_uf += TS_ROUNDBIT; -+ rbufp->recv_time.l_ui += JAN_1970; -+ rbufp->recv_time.l_uf &= TS_MASK; -+ #endif - - while (count--) - { -*************** -*** 2271,2277 **** - tm.c_iflag = clockinfo[type].cl_iflag; - tm.c_oflag = clockinfo[type].cl_oflag; - tm.c_lflag = clockinfo[type].cl_lflag; -! - if (TTY_SETATTR(fd232, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232); ---- 2292,2301 ---- - tm.c_iflag = clockinfo[type].cl_iflag; - tm.c_oflag = clockinfo[type].cl_oflag; - tm.c_lflag = clockinfo[type].cl_lflag; -! #ifdef FREEBSD_CONRAD -! tm.c_ispeed = 50; -! tm.c_ospeed = 50; -! #endif - if (TTY_SETATTR(fd232, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232); -*************** -*** 2314,2319 **** ---- 2338,2358 ---- - return 0; /* well, ok - special initialisation broke */ - } - -+ #ifdef FREEBSD_CONRAD -+ { -+ int i,j; -+ struct timeval tv; -+ ioctl(parse->fd,TIOCTIMESTAMP,&tv); -+ j = TIOCM_RTS; -+ i = ioctl(fd232, TIOCMBIC, &j); -+ if (i < 0) { -+ syslog(LOG_ERR, -+ "PARSE receiver #%d: lowrts_poll: failed to lower RTS: %m", -+ CL_UNIT(parse->unit)); -+ } -+ } -+ #endif -+ - strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format); - tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer); - -diff -c 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.1.1.1 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.2 -*** 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.1.1.1 Sun Apr 3 13:44:02 1994 ---- 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c Sun Apr 3 13:44:02 1994 -*************** -*** 14,19 **** ---- 14,21 ---- - #include "ntp_refclock.h" - #include "ntp_unixtime.h" - -+ static void gps_send(); -+ - #if defined(HAVE_BSD_TTYS) - #include <sgtty.h> - #endif /* HAVE_BSD_TTYS */ -*************** -*** 841,847 **** - /* - * usually trak_receive can get a timestamp every second - */ -! #ifndef TRAKPPS && TRAKCLK - gettstamp(&gps->lastrec); - #endif - gps->polls++; ---- 843,849 ---- - /* - * usually trak_receive can get a timestamp every second - */ -! #if !defined(TRAKPPS) && !defined(TRAKCLK) - gettstamp(&gps->lastrec); - #endif - gps->polls++; -diff -c /dev/null 386BSD/src/contrib/xntpd/xntpdc/Makefile:1.2 -*** /dev/null Sun Apr 3 13:44:03 1994 ---- 386BSD/src/contrib/xntpd/xntpdc/Makefile Sun Apr 3 13:44:03 1994 -*************** -*** 0 **** ---- 1,28 ---- -+ # -+ # $Id: Makefile,v 1.2 1993/12/22 11:34:00 rgrimes Exp $ -+ # -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ .if exists(${.CURDIR}/../lib/obj) -+ LDADD+= -L${.CURDIR}/../lib/obj -+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a -+ .else -+ LDADD+= -L${.CURDIR}/../lib -+ DPADD+= -L${.CURDIR}/../lib/libntp.a -+ .endif -+ -+ LDADD+= -lntp -+ -+ PROG= xntpdc -+ MAN8= ${.CURDIR}/../doc/xntpdc.8 -+ CLEANFILES+= .version version.c -+ -+ SRCS= ntpdc.c ntpdc_ops.c version.c -+ -+ beforedepend: version.c -+ -+ version.c: ${.CURDIR}/../VERSION -+ ${.CURDIR}/../scripts/mkversion xntpdc -+ -+ .include <bsd.prog.mk> -diff -c 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.2 -*** 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.1.1.3 Sun Apr 3 13:44:04 1994 ---- 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c Sun Apr 3 13:44:04 1994 -*************** -*** 53,59 **** - static int getarg P((char *, int, arg_v *)); - static int getnetnum P((char *, U_LONG *, char *)); - static void help P((struct parse *, FILE *)); -! #if defined(sgi) || defined(SYS_BSDI) - static int helpsort P((const void *, const void *)); - #else - static int helpsort P((char **, char **)); ---- 53,59 ---- - static int getarg P((char *, int, arg_v *)); - static int getnetnum P((char *, U_LONG *, char *)); - static void help P((struct parse *, FILE *)); -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - static int helpsort P((const void *, const void *)); - #else - static int helpsort P((char **, char **)); -*************** -*** 1153,1159 **** - for (xcp = opcmds; xcp->keyword != 0; xcp++) - cmdsort[n++] = xcp->keyword; - -! #if defined(sgi) || defined(SYS_BSDI) - qsort((void *)cmdsort, n, sizeof(char *), helpsort); - #else - qsort((char *)cmdsort, n, sizeof(char *), helpsort); ---- 1153,1159 ---- - for (xcp = opcmds; xcp->keyword != 0; xcp++) - cmdsort[n++] = xcp->keyword; - -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - qsort((void *)cmdsort, n, sizeof(char *), helpsort); - #else - qsort((char *)cmdsort, n, sizeof(char *), helpsort); -*************** -*** 1199,1205 **** - * helpsort - do hostname qsort comparisons - */ - static int -! #if defined(sgi) || defined(SYS_BSDI) - helpsort(t1, t2) - const void *t1; - const void *t2; ---- 1199,1205 ---- - * helpsort - do hostname qsort comparisons - */ - static int -! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__) - helpsort(t1, t2) - const void *t1; - const void *t2; -diff -c /dev/null 386BSD/src/contrib/xntpd/xntpres/Makefile:1.2 -*** /dev/null Sun Apr 3 13:44:05 1994 ---- 386BSD/src/contrib/xntpd/xntpres/Makefile Sun Apr 3 13:44:05 1994 -*************** -*** 0 **** ---- 1,28 ---- -+ # -+ # $Id: Makefile,v 1.2 1993/12/22 11:34:09 rgrimes Exp $ -+ # -+ -+ CFLAGS+= -I${.CURDIR}/../include -+ -+ .if exists(${.CURDIR}/../lib/obj) -+ LDADD+= -L${.CURDIR}/../lib/obj -+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a -+ .else -+ LDADD+= -L${.CURDIR}/../lib -+ DPADD+= -L${.CURDIR}/../lib/libntp.a -+ .endif -+ -+ LDADD+= -lntp -+ -+ PROG= xntpres -+ NOMAN= -+ CLEANFILES+= .version version.c -+ -+ SRCS= xntpres.c version.c -+ -+ beforedepend: version.c -+ -+ version.c: ${.CURDIR}/../VERSION -+ ${.CURDIR}/../scripts/mkversion xntpres -+ -+ .include <bsd.prog.mk> - --GAWollman - --- -Garrett A. Wollman | Shashish is simple, it's discreet, it's brief. ... -wollman@lcs.mit.edu | Shashish is the bonding of hearts in spite of distance. -formerly known as | It is a bond more powerful than absence. We like people -wollman@emba.uvm.edu | who like Shashish. - Claude McKenzie + Florent Vollant -[no save] - diff --git a/usr.sbin/xntpd/patches/patch.36 b/usr.sbin/xntpd/patches/patch.36 deleted file mode 100644 index b90df0d..0000000 --- a/usr.sbin/xntpd/patches/patch.36 +++ /dev/null @@ -1,42 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa18708; 7 Apr 94 14:50 EDT -Received: from mudshark.artisoft.com by louie.udel.edu id aa16541; - 7 Apr 94 14:46 EDT -Received: by mudshark.artisoft.com id AA11987 - (5.67b/IDA-1.5 for mills@udel.edu); Thu, 7 Apr 1994 11:46:32 -0700 -Date: Thu, 7 Apr 1994 11:46:32 -0700 -From: Matt Day <mday@artisoft.com> -Message-Id: <199404071846.AA11987@mudshark.artisoft.com> -To: mills@udel.edu -Subject: XNTP bug on Linux - -adjtime() on Linux fails if you try to adjust more than 131072 -microseconds. This causes `ntpdate' to fail on Linux when the system -clock is off by more than 131072 microseconds but less than -NTPDATE_THRESHOLD (500 ms). - -Reducing NTPDATE_THRESHOLD to less than 131072 microseconds fixed the -problem. - -From the comments in the code for Linux's adjtime(), it looks like this -problem might go away someday. - -Thanks! - -*** ntpdate.h- Tue Aug 24 14:29:30 1993 ---- ntpdate.h Thu Apr 7 11:33:53 1994 -*************** -*** 54,60 **** ---- 54,64 ---- - * are close, or step the time if the times are farther apart. The - * following defines what is "close". - */ -+ #ifdef linux -+ #define NTPDATE_THRESHOLD (FP_SECOND / 8) /* 1/8 second */ -+ #else - #define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */ -+ #endif - - /* - * When doing adjustments, ntpdate actually overadjusts (currently - diff --git a/usr.sbin/xntpd/patches/patch.37 b/usr.sbin/xntpd/patches/patch.37 deleted file mode 100644 index e17267f..0000000 --- a/usr.sbin/xntpd/patches/patch.37 +++ /dev/null @@ -1,204 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa25219; 8 Apr 94 17:07 EDT -Received: from ni.umd.edu by louie.udel.edu id aa03359; 8 Apr 94 16:58 EDT -Received: by ni.umd.edu id AA18341 - (5.65c/IDA-1.4.4 for ntp-list); Fri, 8 Apr 1994 16:55:09 -0400 -Received: from RUTGERS.EDU by ni.umd.edu with SMTP id AA18337 - (5.65c/IDA-1.4.4 for <ntp@ni.umd.edu>); Fri, 8 Apr 1994 16:55:02 -0400 -Received: from unipress-link.rutgers.edu by rutgers.edu (5.59/SMI4.0/RU1.5/3.08) - id AA16356; Fri, 8 Apr 94 16:54:44 EDT -Received: from huh.unipress.com by repo.unipress.com (4.1/SMI-4.1/UniPress022294.2) - id AA10459; Fri, 8 Apr 94 16:54:36 EDT via -Message-Id: <9404082054.AA10459@repo.unipress.com> -To: ntp@ni.umd.edu -Subject: Re: xntp for univel/unix-ware on x86 -Date: Fri, 08 Apr 94 16:54:31 -0400 -From: Ray Schnitzler <ras@unipress.com> - - -I am happy (but not particularly proud - it's more than a - little rough around the edges) to report a working - xntpd for Univel. - -It wound up being a hack on solaris, svr4, and (for the lack - of kernel tickadj) irix. - -util/tickadj does *not* work, even for controlling 'tick'. - I'm not sure what the right behavior should be. - -Most of the changes are signalled by SYS_UNIVEL, as - initiated by OS=univel. - -There are many additional loose ends, which are not terribly - important to me to clean up, since the univel is a - very low usage machine, here, and my because - employer expects me to be working on other things, - altogether. - -Nevertheless, it seems to work. - -Special thanks go to Denton Gentry for advice along the way. - - -Enjoy. - - -Here are the changes I made. First, the (new) - machines/univel file, and then the (rest of the) - context diffs: - -*** /dev/null Fri Apr 8 16:49:24 1994 ---- machines/univel Fri Apr 8 12:38:20 1994 -*************** -*** 0 **** ---- 1,10 ---- -+ SHELL= /bin/sh -+ RANLIB= ls # ar does the work of ranlib under System V -+ DEFS= -DSYS_UNIVEL -DSTREAMS_TLI -DHAVE_TERMIOS -+ AUTHDEFS= -DDES -DMD5 -+ CLOCKDEFS= -+ DAEMONLIBS= -lnsl -lsocket -lelf -+ RESLIB= -lnsl -lsocket -lelf -+ INSTALL=$(TOP)scripts/install.sh -+ SHELL= /bin/sh -+ RANLIB= ls # ar does the work of ranlib under System V -*** authstuff/authspeed.c.orig Thu Jan 27 09:03:12 1994 ---- authstuff/authspeed.c Fri Apr 8 14:19:35 1994 -*************** -*** 2,8 **** - * authspeed - figure out how LONG it takes to do an NTP encryption - */ - -! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) - #define FAKE_RUSAGE - #endif - ---- 2,8 ---- - * authspeed - figure out how LONG it takes to do an NTP encryption - */ - -! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIVEL) - #define FAKE_RUSAGE - #endif -*** include/ntp_if.h.orig Mon Nov 15 16:21:29 1993 ---- include/ntp_if.h Fri Apr 8 14:51:49 1994 -*************** -*** 16,21 **** ---- 16,25 ---- - #include <sys/sockio.h> - #endif - -+ #if defined(SYS_UNIVEL) -+ #include <sys/sockio.h> -+ #endif -+ - #if defined(SYS_PTX) || defined(SYS_SINIXM) - #include <sys/stream.h> - #include <sys/stropts.h> -*** include/ntp_machine.h.orig Mon Mar 14 02:47:02 1994 ---- include/ntp_machine.h Fri Apr 8 14:45:42 1994 -*************** -*** 526,531 **** ---- 526,563 ---- - #endif - - /* -+ * Univel SVR4 on intel x86 processor -+ */ -+ #if defined(SYS_UNIVEL) -+ /* #define _POSIX_SOURCE */ -+ #define NTP_POSIX_SOURCE -+ #define HAVE_ATT_NICE -+ #define HAVE_READKMEM -+ #define USE_PROTOTYPES -+ #undef HAVE_ATT_SETPGRP -+ #define UDP_WILDCARD_DELIVERY -+ #define HAVE_SIGNALED_IO -+ #define USE_TTY_SIGPOLL -+ #define USE_UDP_SIGPOLL -+ #define STREAM -+ #define STREAMS -+ #ifndef STREAMS_TLI -+ /*#define STREAMS_TLI*/ -+ #endif -+ /* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */ -+ #undef STEP_SLEW /* TWO step */ -+ #define LOCK_PROCESS -+ #undef SYSV_TIMEOFDAY -+ #define SIZE_RETURNED_IN_BUFFER -+ #define RETSIGTYPE void -+ #include <sys/types.h> -+ #include <netinet/in_systm.h> -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Univel" -+ #endif -+ #endif -+ -+ /* - * DomainOS - */ - #if defined(SYS_DOMAINOS) -*** xntpd/ntp_unixclock.c.orig Thu Feb 3 00:20:20 1994 ---- xntpd/ntp_unixclock.c Fri Apr 8 14:40:55 1994 -*************** -*** 255,260 **** ---- 255,277 ---- - /* Define the following to be what the tick and tickadj variables are - * called in your kernel. - */ -+ #if defined(SYS_UNIVEL) -+ /* -+ * clock_parms - return the local clock tickadj and tick parameters -+ * -+ * The values set here were determined experimentally on a 486 system -+ * I'm not confident in them. - RAS -+ * -+ */ -+ static void -+ clock_parms(tickadj, tick) -+ U_LONG *tickadj; -+ U_LONG *tick; -+ { -+ *tick = 10000; /* microseconds */ -+ *tickadj = 80; /* microseconds */ -+ } -+ #else /* SYS_UNIVEL */ - - #if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX) - #define K_TICKADJ_NAME "tickadj" -*************** -*** 421,427 **** - } - #endif /* sgi */ - -- - #ifdef NOKMEM - - #ifndef HZ ---- 438,443 ---- -*************** -*** 571,573 **** ---- 587,590 ---- - *tick = (U_LONG)txc.tick; - } - #endif /* SYS_LINUX */ -+ #endif /* SYS_UNIVEL */ -*** xntpd/ntpd.c.orig Wed Feb 16 22:09:35 1994 ---- xntpd/ntpd.c Fri Apr 8 16:35:57 1994 -*************** -*** 14,20 **** - #include <sys/rtprio.h> - #endif - -! #if defined(SYS_SVR4) - #include <termios.h> - #endif - ---- 14,20 ---- - #include <sys/rtprio.h> - #endif - -! #if defined(SYS_SVR4) || defined (SYS_UNIVEL) - #include <termios.h> - #endif - diff --git a/usr.sbin/xntpd/patches/patch.38 b/usr.sbin/xntpd/patches/patch.38 deleted file mode 100644 index dddba69..0000000 --- a/usr.sbin/xntpd/patches/patch.38 +++ /dev/null @@ -1,226 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa09565; 11 Apr 94 13:04 EDT -Received: from ni.umd.edu by louie.udel.edu id aa10661; 11 Apr 94 12:57 EDT -Received: by ni.umd.edu id AA00787 - (5.65c/IDA-1.4.4 for ntp-list); Mon, 11 Apr 1994 12:50:20 -0400 -Received: from RUTGERS.EDU by ni.umd.edu with SMTP id AA00783 - (5.65c/IDA-1.4.4 for <ntp@ni.umd.edu>); Mon, 11 Apr 1994 12:50:13 -0400 -Received: from unipress-link.rutgers.edu by rutgers.edu (5.59/SMI4.0/RU1.5/3.08) - id AA26905; Mon, 11 Apr 94 12:49:43 EDT -Received: from huh.unipress.com by repo.unipress.com (4.1/SMI-4.1/UniPress022294.2) - id AA03031; Mon, 11 Apr 94 12:49:27 EDT via -Message-Id: <9404111649.AA03031@repo.unipress.com> -To: ntp@ni.umd.edu -Subject: Re: xntp for univel/unix-ware on x86 -Date: Mon, 11 Apr 94 12:49:25 -0400 -From: Ray Schnitzler <ras@unipress.com> - - -As seems usual, every patch is followed by a re-patch. This - is a (modified) re-posting of patches to make xntp - work on unixware svr4. It now uses - machines/unixware1 and SYS_UNIXWARE1 (instead of - univel, as suggested by J J Farrell), and now - includes some RELNOTES and COPYRIGHT text (as - suggested by Dave) - -It is still rough, but it still works. The tickadj utility - still does *not* work, even for controlling 'tick'. - I'm not sure what the right behavior should be since - there is no 'tickadj' kernel var. - -In addition to the credits I mentioned above, special thanks - go to Denton Gentry for advice along the way. - - -Enjoy. - -Ray Schnitzler -UniPress Software, Inc. ------------------------------------------------------------- -Here are the changes I made. First, the (new) - machines/univel file, and then the (rest of the) - context diffs: - -*** machines/unixware1.3.3p Fri Apr 8 16:48:35 1994 ---- machines/unixware1 Mon Apr 11 11:08:10 1994 -*************** -*** 0 **** ---- 1,10 ---- -+ SHELL= /bin/sh -+ RANLIB= ls # ar does the work of ranlib under System V -+ DEFS= -DSYS_UNIXWARE1 -DSTREAMS_TLI -DHAVE_TERMIOS -DCONFIG_FILE=\\"/usr/local/etc/ntp.conf\\" -+ AUTHDEFS= -DDES -DMD5 -+ CLOCKDEFS= -+ DAEMONLIBS= -lnsl -lsocket -lelf -+ RESLIB= -lnsl -lsocket -lelf -+ INSTALL=$(TOP)scripts/install.sh -+ SHELL= /bin/sh -+ RANLIB= ls # ar does the work of ranlib under System V -*** COPYRIGHT.3.3p Thu Feb 3 00:20:07 1994 ---- COPYRIGHT Mon Apr 11 10:47:24 1994 -*************** -*** 55,58 **** ---- 55,59 ---- - * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port) - * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver) - * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port) -+ * Ray Schnitzler <schnitz@unipress.com> (First pass at a Unixware1 port.) - */ -*** RELNOTES.3.3p Thu Jan 27 09:33:09 1994 ---- RELNOTES Mon Apr 11 11:14:35 1994 -*************** -*** 140,145 **** ---- 140,146 ---- - PC BSD/386 1.0 gcc LOCAL_CLOCK possibly see "build problems" - PC Linux (pl14) gcc LOCAL_CLOCK (dw 93/10/30) - PC Dell SVR4 v2.2 gcc ? (tl 93/12/30) -+ PC Unixware1/SVR4 cc no tickadj, ? (ras 93/04/11) - NCR3445 NCR SVR4 cc LOCAL_CLOCK (tm 93/11/29) - - pb: Piete Brooks -*************** -*** 149,154 **** ---- 150,156 ---- - tl: Tony Lill <ajlill@tlill.hookup.net> - tm: Tom Moore <Tom.Moore@DaytonOH.NCR.COM> - jmj: Jim Jagielski <jim@jagubox.gsfc.nasa.gov> -+ ras: Ray Schnitzler <schnitz@unipress.com> - - Build Problems (and workaround): - -*** authstuff/authspeed.c.3.3p Thu Jan 27 09:03:12 1994 ---- authstuff/authspeed.c Mon Apr 11 10:29:47 1994 -*************** -*** 2,8 **** - * authspeed - figure out how LONG it takes to do an NTP encryption - */ - -! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) - #define FAKE_RUSAGE - #endif - ---- 2,8 ---- - * authspeed - figure out how LONG it takes to do an NTP encryption - */ - -! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIXWARE1) - #define FAKE_RUSAGE - #endif - -*** include/ntp_if.h.3.3p Mon Nov 15 16:21:29 1993 ---- include/ntp_if.h Mon Apr 11 10:30:21 1994 -*************** -*** 16,21 **** ---- 16,25 ---- - #include <sys/sockio.h> - #endif - -+ #if defined(SYS_UNIXWARE1) -+ #include <sys/sockio.h> -+ #endif -+ - #if defined(SYS_PTX) || defined(SYS_SINIXM) - #include <sys/stream.h> - #include <sys/stropts.h> -*** include/ntp_machine.h.3.3p Mon Mar 14 02:47:02 1994 ---- include/ntp_machine.h Mon Apr 11 10:31:11 1994 -*************** -*** 526,531 **** ---- 526,565 ---- - #endif - - /* -+ * (Univel/Novell) Unixware1 SVR4 on intel x86 processor -+ */ -+ #if defined(SYS_UNIXWARE1) -+ /* #define _POSIX_SOURCE */ -+ #undef HAVE_ATT_SETPGRP -+ #define USE_PROTOTYPES -+ #define NTP_POSIX_SOURCE -+ #define HAVE_ATT_NICE -+ #define HAVE_READKMEM -+ #define USE_TTY_SIGPOLL -+ #define USE_UDP_SIGPOLL -+ #define UDP_WILDCARD_DELIVERY -+ #undef HAVE_SIGNALED_IO -+ #define STREAM -+ #define STREAMS -+ #ifndef STREAMS_TLI -+ /*#define STREAMS_TLI*/ -+ #endif -+ /* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */ -+ #undef STEP_SLEW /* TWO step */ -+ #define LOCK_PROCESS -+ #define NO_SIGNED_CHAR_DECL -+ #undef SYSV_TIMEOFDAY -+ #define SIZE_RETURNED_IN_BUFFER -+ #define RETSIGTYPE void -+ #include <sys/sockio.h> -+ #include <sys/types.h> -+ #include <netinet/in_systm.h> -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX/Unixware1" -+ #endif -+ #endif -+ -+ /* - * DomainOS - */ - #if defined(SYS_DOMAINOS) -*** xntpd/ntp_unixclock.c.3.3p Thu Feb 3 00:20:20 1994 ---- xntpd/ntp_unixclock.c Mon Apr 11 10:33:23 1994 -*************** -*** 255,260 **** ---- 255,277 ---- - /* Define the following to be what the tick and tickadj variables are - * called in your kernel. - */ -+ #if defined(SYS_UNIXWARE1) -+ /* -+ * clock_parms - return the local clock tickadj and tick parameters -+ * -+ * The values set here were determined experimentally on a 486 system -+ * I'm not confident in them. - RAS -+ * -+ */ -+ static void -+ clock_parms(tickadj, tick) -+ U_LONG *tickadj; -+ U_LONG *tick; -+ { -+ *tick = 10000; /* microseconds */ -+ *tickadj = 80; /* microseconds */ -+ } -+ #else /* SYS_UNIXWARE1 */ - - #if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX) - #define K_TICKADJ_NAME "tickadj" -*************** -*** 571,573 **** ---- 587,590 ---- - *tick = (U_LONG)txc.tick; - } - #endif /* SYS_LINUX */ -+ #endif /* SYS_UNIXWARE1 */ -*** xntpd/ntpd.c.3.3p Wed Feb 16 22:09:35 1994 ---- xntpd/ntpd.c Mon Apr 11 10:33:58 1994 -*************** -*** 14,20 **** - #include <sys/rtprio.h> - #endif - -! #if defined(SYS_SVR4) - #include <termios.h> - #endif - ---- 14,21 ---- - #include <sys/rtprio.h> - #endif - -! /* Shouldn't this test for HAVE_TERMIOS - RAS */ -! #if defined(SYS_SVR4) || defined (SYS_UNIXWARE1) - #include <termios.h> - #endif - - diff --git a/usr.sbin/xntpd/patches/patch.39 b/usr.sbin/xntpd/patches/patch.39 deleted file mode 100644 index 12e09fe..0000000 --- a/usr.sbin/xntpd/patches/patch.39 +++ /dev/null @@ -1,78 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa21593; 13 Apr 94 8:23 EDT -Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa20245; - 13 Apr 94 8:15 EDT -Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #2) - id m0pr3rH-0005s0C; Wed, 13 Apr 94 08:15 EDT -Message-Id: <m0pr3rH-0005s0C@jagubox.gsfc.nasa.gov> -From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov> -Subject: Minor change for ntp_loopfilter (and loop.c) in 3.3q -To: Mills@udel.edu -Date: Wed, 13 Apr 1994 08:15:55 -0400 (EDT) -Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov> -In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm -X-Mailer: ELM [version 2.4 PL23] -Content-Type: text -Content-Length: 1738 - -One of the changes between 3.3p and 3.3q was the format change of the syslog -message when the clock is reset when xntpd sees a "large" offset. This change -is nice, but it would be "better" is the notice also made mention of whether -the reset was a step or slew (as defined by SLEWALWAYS). - -This patch adds that: -*** xntpd/Oloop.c Wed Apr 13 08:05:09 1994 ---- xntpd/loop.c Wed Apr 13 08:06:32 1994 -*************** -*** 458,464 **** - lfptoa(fp_offset, 6)); - return (0); - } -! syslog(LOG_NOTICE, "clock reset %s\n", - lfptoa(fp_offset, 6)); - step_systime(fp_offset); - clock_adjust = 0; ---- 458,469 ---- - lfptoa(fp_offset, 6)); - return (0); - } -! syslog(LOG_NOTICE, "clock reset (%s) %s\n", -! #ifdef SLEWALWAYS -! "slew", -! #else -! "step", -! #endif - lfptoa(fp_offset, 6)); - step_systime(fp_offset); - clock_adjust = 0; -*** xntpd/Ontp_loopfilter.c Wed Apr 13 08:05:23 1994 ---- xntpd/ntp_loopfilter.c Wed Apr 13 08:07:03 1994 -*************** -*** 458,464 **** - lfptoa(fp_offset, 6)); - return (0); - } -! syslog(LOG_NOTICE, "clock reset %s\n", - lfptoa(fp_offset, 6)); - step_systime(fp_offset); - clock_adjust = 0; ---- 458,469 ---- - lfptoa(fp_offset, 6)); - return (0); - } -! syslog(LOG_NOTICE, "clock reset (%s) %s\n", -! #ifdef SLEWALWAYS -! "slew", -! #else -! "step", -! #endif - lfptoa(fp_offset, 6)); - step_systime(fp_offset); - clock_adjust = 0; --- -#include <std/disclaimer.h> - Jim Jagielski | "Is this something you can share with - jim@jagubox.gsfc.nasa.gov | the rest of us Amazing Larry!!??" - NASA/GSFC, Code 734.4 | Pee Wee - Greenbelt, MD 20771 | - diff --git a/usr.sbin/xntpd/patches/patch.4 b/usr.sbin/xntpd/patches/patch.4 deleted file mode 100644 index ef06ee9..0000000 --- a/usr.sbin/xntpd/patches/patch.4 +++ /dev/null @@ -1,4719 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa12898; 26 Jan 94 21:06 EST -Received: from sony.com by louie.udel.edu id aa05924; 26 Jan 94 21:01 EST -Received: by sony.com id AA18168; Wed, 26 Jan 94 18:00:44 -0800 -X-Btw: sony.com is also sonygate.sony.com -Received: by mail1.gw.in.sel.sony.com id AA25072; Wed, 26 Jan 94 18:00:43 -0800 -Received: by mail1.sjc.in.sel.sony.com id AA13634; Wed, 26 Jan 94 18:00:41 -0800 -Received: by morality.sjc.hw.sony.com; id AA23624; Wed, 26 Jan 94 18:00:40 -0800 -Date: Wed, 26 Jan 94 18:00:40 -0800 -From: Paul Vixie <Paul_Vixie@corpmis.sjc.hw.sony.com> -Message-Id: <9401270200.AA23624@morality.sjc.hw.sony.com> -To: mills@udel.edu -Subject: diffs against 3.3c (26-jan 11:36) -Cc: paul@vix.com - -These have been tested on BSD/386 1.0 and on HP-UX 8.??. I have more to do, -but this is the last I'm going to do before 3.3d (or whatever) comes out with -the other patches you're expecting. I need to have a day with just me and NTP -and everybody else with their mits outa the code while I finish the portability -stuff. - -*** /tmp/RCSA023397 Wed Jan 26 17:56:22 1994 ---- adjtime/adjtimed.c Wed Jan 26 16:33:27 1994 -*************** -*** 42,47 **** - - double atof(); -! extern int optind; -! extern char *optarg; - - int InitClockRate(); ---- 42,47 ---- - - double atof(); -! extern int ntp_optind; -! extern char *ntp_optarg; - - int InitClockRate(); -*************** -*** 84,88 **** - openlog("adjtimed", LOG_PID, LOG_LOCAL6); - -! while ((ch = getopt(argc, argv, "hkrvdfp:")) != EOF) { - switch (ch) { - case 'k': ---- 84,88 ---- - openlog("adjtimed", LOG_PID, LOG_LOCAL6); - -! while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) { - switch (ch) { - case 'k': -*************** -*** 114,118 **** - - case 'p': -! if ((RATE = atof(optarg)) <= 0.0 || RATE >= 100.0) { - fputs("adjtimed: percentage must be between 0.0 and 100.0\n", stderr); - exit(1); ---- 114,118 ---- - - case 'p': -! if ((RATE = atof(ntp_optarg)) <= 0.0 || RATE >= 100.0) { - fputs("adjtimed: percentage must be between 0.0 and 100.0\n", stderr); - exit(1); -*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994 ---- authstuff/authspeed.c Wed Jan 26 16:33:28 1994 -*************** -*** 66,75 **** - int i; - int errflg = 0; -! extern int optind; -! extern char *optarg; - - progname = argv[0]; - loops = DEFLOOPS; -! while ((c = getopt_l(argc, argv, "cdmn:")) != EOF) - switch (c) { - case 'c': ---- 66,75 ---- - int i; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - - progname = argv[0]; - loops = DEFLOOPS; -! while ((c = ntp_getopt(argc, argv, "cdmn:")) != EOF) - switch (c) { - case 'c': -*************** -*** 83,91 **** - break; - case 'n': -! loops = atoi(optarg); - if (loops <= 0) { - (void) fprintf(stderr, - "%s: %s is unlikely to be a useful number of loops\n", -! progname, optarg); - errflg++; - } ---- 83,91 ---- - break; - case 'n': -! loops = atoi(ntp_optarg); - if (loops <= 0) { - (void) fprintf(stderr, - "%s: %s is unlikely to be a useful number of loops\n", -! progname, ntp_optarg); - errflg++; - } -*************** -*** 95,99 **** - break; - } -! if (errflg || optind == argc) { - (void) fprintf(stderr, - "usage: %s [-d] [-n loops] [ -c ] auth.samplekeys\n", ---- 95,99 ---- - break; - } -! if (errflg || ntp_optind == argc) { - (void) fprintf(stderr, - "usage: %s [-d] [-n loops] [ -c ] auth.samplekeys\n", -*************** -*** 109,113 **** - - init_auth(); -! authreadkeys(argv[optind]); - for (i = 0; i < 16; i++) { - if (!auth_havekey(i + domd5)) { ---- 109,113 ---- - - init_auth(); -! authreadkeys(argv[ntp_optind]); - for (i = 0; i < 16; i++) { - if (!auth_havekey(i + domd5)) { -*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994 ---- authstuff/keyparity.c Wed Jan 26 16:33:28 1994 -*************** -*** 50,58 **** - int keytype; - U_LONG key[2]; -! extern int optind; -! extern char *optarg; - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "adno:s")) != EOF) - switch (c) { - case 'a': ---- 50,58 ---- - int keytype; - U_LONG key[2]; -! extern int ntp_optind; -! extern char *ntp_optarg; - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "adno:s")) != EOF) - switch (c) { - case 'a': -*************** -*** 69,76 **** - break; - case 'o': -! if (*optarg == 'n') { - ntpoutflag = 1; - gotoopt = 1; -! } else if (*optarg == 's') { - ntpoutflag = 0; - gotoopt = 1; ---- 69,76 ---- - break; - case 'o': -! if (*ntp_optarg == 'n') { - ntpoutflag = 1; - gotoopt = 1; -! } else if (*ntp_optarg == 's') { - ntpoutflag = 0; - gotoopt = 1; -*************** -*** 86,90 **** - break; - } -! if (errflg || optind == argc) { - (void) fprintf(stderr, - "usage: %s -n|-s [-a] [-o n|s] key [...]\n", ---- 86,90 ---- - break; - } -! if (errflg || ntp_optind == argc) { - (void) fprintf(stderr, - "usage: %s -n|-s [-a] [-o n|s] key [...]\n", -*************** -*** 119,127 **** - keytype = KEY_TYPE_STD; - -! for (; optind < argc; optind++) { -! if (!decodekey(keytype, argv[optind], key)) { - (void) fprintf(stderr, - "%s: format of key %s invalid\n", -! progname, argv[optind]); - exit(1); - } ---- 119,127 ---- - keytype = KEY_TYPE_STD; - -! for (; ntp_optind < argc; ntp_optind++) { -! if (!decodekey(keytype, argv[ntp_optind], key)) { - (void) fprintf(stderr, - "%s: format of key %s invalid\n", -! progname, argv[ntp_optind]); - exit(1); - } -*************** -*** 243,247 **** - * Make up key from ascii representation - */ -! bzero(keybytes, sizeof(keybytes)); - for (i = 0; i < 8 && i < len; i++) - keybytes[i] = *cp++ << 1; ---- 243,247 ---- - * Make up key from ascii representation - */ -! memset(keybytes, 0, sizeof(keybytes)); - for (i = 0; i < 8 && i < len; i++) - keybytes[i] = *cp++ << 1; -*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994 ---- authstuff/makeIPFP.c Wed Jan 26 16:33:28 1994 -*************** -*** 29,37 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "d")) != EOF) - switch (c) { - case 'd': ---- 29,37 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "d")) != EOF) - switch (c) { - case 'd': -*************** -*** 184,188 **** - int octbits; - -! bzero((char *)bits, sizeof bits); - - /* ---- 184,188 ---- - int octbits; - -! memset((char *)bits, 0, sizeof bits); - - /* -*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994 ---- authstuff/makePC1.c Wed Jan 26 16:33:28 1994 -*************** -*** 26,34 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "d")) != EOF) - switch (c) { - case 'd': ---- 26,34 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "d")) != EOF) - switch (c) { - case 'd': -*************** -*** 83,88 **** - u_char d[28]; - -! bzero((char *)c, sizeof c); -! bzero((char *)d, sizeof d); - - for (i = 0; i < 28; i++) { ---- 83,88 ---- - u_char d[28]; - -! memset((char *)c, 0, sizeof c); -! memset((char *)d, 0, sizeof d); - - for (i = 0; i < 28; i++) { -*************** -*** 141,145 **** - u_char bits[64]; - -! bzero((char *)bits, sizeof bits); - - printf("static U_LONG PC1_CL[8] = {"); ---- 141,145 ---- - u_char bits[64]; - -! memset((char *)bits, 0, sizeof bits); - - printf("static U_LONG PC1_CL[8] = {"); -*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994 ---- authstuff/makePC2.c Wed Jan 26 16:33:28 1994 -*************** -*** 27,35 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "d")) != EOF) - switch (c) { - case 'd': ---- 27,35 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "d")) != EOF) - switch (c) { - case 'd': -*************** -*** 88,92 **** - u_char res[24]; - -! bzero((char *)res, sizeof res); - - for (i = 0; i < 24; i++) { ---- 88,92 ---- - u_char res[24]; - -! memset((char *)res, 0, sizeof res); - - for (i = 0; i < 24; i++) { -*************** -*** 118,122 **** - u_char res[24]; - -! bzero((char *)res, sizeof res); - - for (i = 0; i < 24; i++) { ---- 118,122 ---- - u_char res[24]; - -! memset((char *)res, 0, sizeof res); - - for (i = 0; i < 24; i++) { -*************** -*** 169,173 **** - u_char bits[28]; - -! bzero((char *)bits, sizeof bits); - - printf("static U_LONG PC2_C[4][64] = {"); ---- 169,173 ---- - u_char bits[28]; - -! memset((char *)bits, 0, sizeof bits); - - printf("static U_LONG PC2_C[4][64] = {"); -*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994 ---- authstuff/makeSP.c Wed Jan 26 16:33:28 1994 -*************** -*** 26,34 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "d")) != EOF) - switch (c) { - case 'd': ---- 26,34 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "d")) != EOF) - switch (c) { - case 'd': -*************** -*** 166,170 **** - int sixbits; - -! bzero((char *)bits, sizeof bits); - printf("static U_LONG SP[8][64] = {"); - for (selno = 0; selno < 8; selno++) { ---- 166,170 ---- - int sixbits; - -! memset((char *)bits, 0, sizeof bits); - printf("static U_LONG SP[8][64] = {"); - for (selno = 0; selno < 8; selno++) { -*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994 ---- authstuff/mkrandkeys.c Wed Jan 26 16:33:28 1994 -*************** -*** 35,40 **** - U_LONG tmp; - char *passwd; -! extern int optind; -! extern char *optarg; - extern char *getpass(); - ---- 35,40 ---- - U_LONG tmp; - char *passwd; -! extern int ntp_optind; -! extern char *ntp_optarg; - extern char *getpass(); - -*************** -*** 42,46 **** - progname = argv[0]; - passwd = NULL; -! while ((c = getopt_l(argc, argv, "dnp:s")) != EOF) - switch (c) { - case 'd': ---- 42,46 ---- - progname = argv[0]; - passwd = NULL; -! while ((c = ntp_getopt(argc, argv, "dnp:s")) != EOF) - switch (c) { - case 'd': -*************** -*** 51,55 **** - break; - case 'p': -! passwd = optarg; - break; - case 's': ---- 51,55 ---- - break; - case 'p': -! passwd = ntp_optarg; - break; - case 's': -*************** -*** 62,70 **** - - numkeys = 0; -! for (; !errflg && optind < argc; optind++) { -! c = atoi(argv[optind]); - if (c <= 0 || c > 15) { - (void) fprintf(stderr, "%s: invalid key number `%s'\n", -! progname, argv[optind]); - exit(2); - } ---- 62,70 ---- - - numkeys = 0; -! for (; !errflg && ntp_optind < argc; ntp_optind++) { -! c = atoi(argv[ntp_optind]); - if (c <= 0 || c > 15) { - (void) fprintf(stderr, "%s: invalid key number `%s'\n", -! progname, argv[ntp_optind]); - exit(2); - } -*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994 ---- authstuff/omakeIPFP.c Wed Jan 26 16:33:29 1994 -*************** -*** 35,43 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "d")) != EOF) - switch (c) { - case 'd': ---- 35,43 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "d")) != EOF) - switch (c) { - case 'd': -*************** -*** 189,193 **** - int quadbits; - -! bzero((char *)bits, sizeof bits); - - /* ---- 189,193 ---- - int quadbits; - -! memset((char *)bits, 0, sizeof bits); - - /* -*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994 ---- clockstuff/chutest.c Wed Jan 26 16:33:29 1994 -*************** -*** 69,78 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - void init_chu(); - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "cdfpt")) != EOF) - switch (c) { - case 'c': ---- 69,78 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - void init_chu(); - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "cdfpt")) != EOF) - switch (c) { - case 'c': -*************** -*** 108,112 **** - break; - } -! if (errflg || optind+1 != argc) { - #ifdef STREAM - (void) fprintf(stderr, "usage: %s [-dft] tty_device\n", ---- 108,112 ---- - break; - } -! if (errflg || ntp_optind+1 != argc) { - #ifdef STREAM - (void) fprintf(stderr, "usage: %s [-dft] tty_device\n", -*************** -*** 127,131 **** - - (void) gettimeofday(&lasttv, (struct timezone *)0); -! c = openterm(argv[optind]); - init_chu(); - #ifdef STREAM ---- 127,131 ---- - - (void) gettimeofday(&lasttv, (struct timezone *)0); -! c = openterm(argv[ntp_optind]); - init_chu(); - #ifdef STREAM -*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994 ---- clockstuff/clktest.c Wed Jan 26 16:33:29 1994 -*************** -*** 106,111 **** - struct sgttyb ttyb; - struct itimerval itimer; -! extern int optind; -! extern char *optarg; - int alarming(); - int ioready(); ---- 106,111 ---- - struct sgttyb ttyb; - struct itimerval itimer; -! extern int ntp_optind; -! extern char *ntp_optarg; - int alarming(); - int ioready(); -*************** -*** 115,119 **** - magic[0] = 0; - #endif -! while ((c = getopt_l(argc, argv, "a:b:c:dfs:t:")) != EOF) - switch (c) { - #ifdef CLKLDISC ---- 115,119 ---- - magic[0] = 0; - #endif -! while ((c = ntp_getopt(argc, argv, "a:b:c:dfs:t:")) != EOF) - switch (c) { - #ifdef CLKLDISC -*************** -*** 121,125 **** - #endif - case 'c': -! if (!atouint(optarg, &tmp)) { - (void) fprintf(stderr, - "%s: argument for -%c must be integer\n", ---- 121,125 ---- - #endif - case 'c': -! if (!atouint(ntp_optarg, &tmp)) { - (void) fprintf(stderr, - "%s: argument for -%c must be integer\n", -*************** -*** 140,144 **** - break; - case 'b': -! if (!atouint(optarg, &tmp)) { - errflg++; - break; ---- 140,144 ---- - break; - case 'b': -! if (!atouint(ntp_optarg, &tmp)) { - errflg++; - break; -*************** -*** 164,175 **** - break; - case 's': -! cmdlen = strlen(optarg); - if (cmdlen == 0) - errflg++; - else -! cmd = optarg; - break; - case 't': -! if (!atouint(optarg, &tmp)) - errflg++; - else { ---- 164,175 ---- - break; - case 's': -! cmdlen = strlen(ntp_optarg); - if (cmdlen == 0) - errflg++; - else -! cmd = ntp_optarg; - break; - case 't': -! if (!atouint(ntp_optarg, &tmp)) - errflg++; - else { -*************** -*** 182,186 **** - break; - } -! if (errflg || optind+1 != argc) { - (void) fprintf(stderr, - #ifdef CLKLDISC ---- 182,186 ---- - break; - } -! if (errflg || ntp_optind+1 != argc) { - (void) fprintf(stderr, - #ifdef CLKLDISC -*************** -*** 200,209 **** - - if (docmd) -! fd = open(argv[optind], O_RDWR, 0777); - else -! fd = open(argv[optind], O_RDONLY, 0777); - if (fd == -1) { - (void) fprintf(stderr, "%s: open(%s): ", progname, -! argv[optind]); - perror(""); - exit(1); ---- 200,209 ---- - - if (docmd) -! fd = open(argv[ntp_optind], O_RDWR, 0777); - else -! fd = open(argv[ntp_optind], O_RDONLY, 0777); - if (fd == -1) { - (void) fprintf(stderr, "%s: open(%s): ", progname, -! argv[ntp_optind]); - perror(""); - exit(1); -*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994 ---- clockstuff/propdelay.c Wed Jan 26 16:33:29 1994 -*************** -*** 141,149 **** - double lat2, long2; - double lat3, long3; -! extern int optind; -! extern char *optarg; - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "dh:CWG")) != EOF) - switch (c) { - case 'd': ---- 141,149 ---- - double lat2, long2; - double lat3, long3; -! extern int ntp_optind; -! extern char *ntp_optarg; - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "dh:CWG")) != EOF) - switch (c) { - case 'd': -*************** -*** 152,159 **** - case 'h': - hflag++; -! height = atof(optarg); - if (height <= 0.0) { - (void) fprintf(stderr, "height %s unlikely\n", -! optarg); - errflg++; - } ---- 152,159 ---- - case 'h': - hflag++; -! height = atof(ntp_optarg); - if (height <= 0.0) { - (void) fprintf(stderr, "height %s unlikely\n", -! ntp_optarg); - errflg++; - } -*************** -*** 172,177 **** - break; - } -! if (errflg || (!(Cflag || Wflag || Gflag) && optind+4 != argc) || -! ((Cflag || Wflag || Gflag) && optind+2 != argc)) { - (void) fprintf(stderr, - "usage: %s [-d] [-h height] lat1 long1 lat2 long2\n", ---- 172,177 ---- - break; - } -! if (errflg || (!(Cflag || Wflag || Gflag) && ntp_optind+4 != argc) || -! ((Cflag || Wflag || Gflag) && ntp_optind+2 != argc)) { - (void) fprintf(stderr, - "usage: %s [-d] [-h height] lat1 long1 lat2 long2\n", -*************** -*** 186,193 **** - - if (!(Cflag || Wflag || Gflag)) { -! lat1 = latlong(argv[optind], 1); -! long1 = latlong(argv[optind + 1], 0); -! lat2 = latlong(argv[optind + 2], 1); -! long2 = latlong(argv[optind + 3], 0); - if (hflag) { - doit(lat1, long1, lat2, long2, height, ""); ---- 186,193 ---- - - if (!(Cflag || Wflag || Gflag)) { -! lat1 = latlong(argv[ntp_optind], 1); -! long1 = latlong(argv[ntp_optind + 1], 0); -! lat2 = latlong(argv[ntp_optind + 2], 1); -! long2 = latlong(argv[ntp_optind + 3], 0); - if (hflag) { - doit(lat1, long1, lat2, long2, height, ""); -*************** -*** 202,207 **** - * Compute delay from WWV - */ -! lat1 = latlong(argv[optind], 1); -! long1 = latlong(argv[optind + 1], 0); - lat2 = latlong(wwvlat, 1); - long2 = latlong(wwvlong, 0); ---- 202,207 ---- - * Compute delay from WWV - */ -! lat1 = latlong(argv[ntp_optind], 1); -! long1 = latlong(argv[ntp_optind + 1], 0); - lat2 = latlong(wwvlat, 1); - long2 = latlong(wwvlong, 0); -*************** -*** 229,234 **** - } - } else if (Cflag) { -! lat1 = latlong(argv[optind], 1); -! long1 = latlong(argv[optind + 1], 0); - lat2 = latlong(chulat, 1); - long2 = latlong(chulong, 0); ---- 229,234 ---- - } - } else if (Cflag) { -! lat1 = latlong(argv[ntp_optind], 1); -! long1 = latlong(argv[ntp_optind + 1], 0); - lat2 = latlong(chulat, 1); - long2 = latlong(chulong, 0); -*************** -*** 244,249 **** - lat1 = latlong(goes_up_lat, 1); - long1 = latlong(goes_up_long, 0); -! lat3 = latlong(argv[optind], 1); -! long3 = latlong(argv[optind + 1], 0); - - lat2 = latlong(goes_sat_lat, 1); ---- 244,249 ---- - lat1 = latlong(goes_up_lat, 1); - long1 = latlong(goes_up_long, 0); -! lat3 = latlong(argv[ntp_optind], 1); -! long3 = latlong(argv[ntp_optind + 1], 0); - - lat2 = latlong(goes_sat_lat, 1); -*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994 ---- conf/Config.CHATHAM Wed Jan 26 16:33:29 1994 -*************** -*** 90,96 **** - # CLOCKDEFS= line below. This flag affects xntpd only. - # -- # There is an occurance of a call to rindex() in the daemon. You may -- # have to include a -Drindex=strrchr to get this to load right. -- # - # To change the location of the configuration file, use a - # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar. ---- 90,93 ---- -*************** -*** 110,114 **** - # generated by the pps signal. Only one of these flags should be defined. - # -! DEFS= -DUSELIBKVM -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DPPS -DPPSDEV -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H - - # ---- 107,111 ---- - # generated by the pps signal. Only one of these flags should be defined. - # -! DEFS= -DUSELIBKVM -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DPPS -DPPSDEV -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE - - # -*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994 ---- conf/Config.MONOMOY Wed Jan 26 16:33:29 1994 -*************** -*** 85,91 **** - # CLOCKDEFS= line below. This flag affects xntpd only. - # -- # There is an occurance of a call to rindex() in the daemon. You may -- # have to include a -Drindex=strrchr to get this to load right. -- # - # To change the location of the configuration file, use a - # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar. ---- 85,88 ---- -*************** -*** 105,109 **** - # be used) - # -! DEFS= -DBSDI -DUSELIBKVM -DDEBUG -DREFCLOCK -DPPS -DCONFIG_FILE=\\"/usr/local/etc/xntp.conf\\" -DHAVE_UNISTD_H - - # ---- 102,106 ---- - # be used) - # -! DEFS= -DBSDI -DUSELIBKVM -DDEBUG -DREFCLOCK -DPPS -DCONFIG_FILE=\\"/usr/local/etc/xntp.conf\\" -DNTP_POSIX_SOURCE - - # -*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994 ---- conf/Config.TIGER Wed Jan 26 16:33:30 1994 -*************** -*** 81,87 **** - # CLOCKDEFS= line below. This flag affects xntpd only. - # -- # There is an occurance of a call to rindex() in the daemon. You may -- # have to include a -Drindex=strrchr to get this to load right. -- # - # To change the location of the configuration file, use a - # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar. ---- 81,84 ---- -*************** -*** 101,105 **** - # be used) - # -! DEFS= -DREFCLOCK -DS_CHAR_DEFINED -DREADKMEM -DDEBUG -DPLL -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H - - # ---- 98,102 ---- - # be used) - # -! DEFS= -DREFCLOCK -DS_CHAR_DEFINED -DREADKMEM -DDEBUG -DPLL -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE - - # -*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994 ---- conf/Config.TRURO Wed Jan 26 16:33:30 1994 -*************** -*** 87,93 **** - # CLOCKDEFS= line below. This flag affects xntpd only. - # -- # There is an occurance of a call to rindex() in the daemon. You may -- # have to include a -Drindex=strrchr to get this to load right. -- # - # To change the location of the configuration file, use a - # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar. ---- 87,90 ---- -*************** -*** 110,114 **** - # generated by the pps signal. Only one of these flags should be defined. - # -! DEFS= -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DSLEWALWAYS -DSOLARIS -DPPS -DSTUPID_SIGNAL -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H - - # ---- 107,111 ---- - # generated by the pps signal. Only one of these flags should be defined. - # -! DEFS= -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DSLEWALWAYS -DSOLARIS -DPPS -DSTUPID_SIGNAL -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE - - # -*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994 ---- include/l_stdlib.h Wed Jan 26 16:33:30 1994 -*************** -*** 39,43 **** - #if !defined(NTP_POSIX_SOURCE) - extern int atoi P((char *)); -- extern void bcopy P((char *, char *, int)); - extern int dup2 P((int, int)); - extern int execve P((char *, char **,char **)); ---- 39,42 ---- -*************** -*** 51,58 **** - #endif - -- #ifndef bzero /* XXX macro prototyping clash */ -- extern void bzero P((char *, int)); -- extern int bcmp P((char *, char *, int)); -- #endif - extern char *mktemp P((char *)); - ---- 50,53 ---- -*************** -*** 193,200 **** - #ifndef NTP_POSIX_SOURCE - extern int atoi P((char *)); -- extern void bcopy P((char *, char *, int)); -- extern void bzero P((char *, int)); -- extern int bcmp P((char *, char *, int)); -- extern void bcopy P((char *, char *, int)); - extern int execve P((char *, char **,char **)); - extern int fork P((void)); ---- 188,191 ---- -*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994 ---- include/ntp.h Wed Jan 26 16:33:30 1994 -*************** -*** 329,333 **** - - /* -! * Definitions for the clear() routine. We use bzero() to clear - * the parts of the peer structure which go to zero. These are - * used to calculate the start address and length of the area. ---- 329,333 ---- - - /* -! * Definitions for the clear() routine. We use memset() to clear - * the parts of the peer structure which go to zero. These are - * used to calculate the start address and length of the area. -*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994 ---- include/ntp_machine.h Wed Jan 26 16:33:31 1994 -*************** -*** 1,3 **** -! /* ntp_compat.h,v 3.1 1993/07/06 01:06:49 jbj Exp - * Collect all machine dependent idiosyncrasies in one place. - */ ---- 1,3 ---- -! /* ntp_machine.h,v 3.1 1993/07/06 01:06:49 jbj Exp - * Collect all machine dependent idiosyncrasies in one place. - */ -*************** -*** 53,61 **** - - THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about -! kernal mucking. - - NTP_POSIX_SOURCE - Use POSIX functions over bsd functions and att functions. - This is NOT the same as _POSIX_SOURCE. -! It is much weeker! - - ---- 53,61 ---- - - THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about -! kernel mucking. - - NTP_POSIX_SOURCE - Use POSIX functions over bsd functions and att functions. - This is NOT the same as _POSIX_SOURCE. -! It is much weaker! - - -*************** -*** 95,99 **** - UNIX V.4 machines implement a sockets library on top of streams. - When requesting the IP interface configuration with an ioctl(2) calll, -! an arrat of ifreq structures are placed in the provided buffer. Some - implementations also place the length of the buffer information in - the first integer position of the buffer. ---- 95,99 ---- - UNIX V.4 machines implement a sockets library on top of streams. - When requesting the IP interface configuration with an ioctl(2) calll, -! an array of ifreq structures are placed in the provided buffer. Some - implementations also place the length of the buffer information in - the first integer position of the buffer. -*************** -*** 115,121 **** - RETSIGTYPE - Define signal function type. - NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h -! LOCK_PROCESS - Have plock. - UDP_WILDCARD_DELIVERY -! - these systems deliver broadcast pakets to the wildcard - port instead to a port bound to the interface bound - to the correct broadcast address - are these ---- 115,121 ---- - RETSIGTYPE - Define signal function type. - NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h -! LOCK_PROCESS - Have plock. - UDP_WILDCARD_DELIVERY -! - these systems deliver broadcast packets to the wildcard - port instead to a port bound to the interface bound - to the correct broadcast address - are these -*************** -*** 122,133 **** - implementations broken or did the spec change ? - -- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ? -- - You could just put the defines on the DEFS line in machines/<os> file. -! I don't since there are lost of different types compiler that a systemm might -! have, some that can do proto typing and others that cannot on the saem system. -! I get a chanse to twiddle some of the configuration paramasters at compile -! time based on compler/machine combinatsions by using this include file. -! See convex, aix and sun configurations see how complex it get. - - */ ---- 122,135 ---- - implementations broken or did the spec change ? - - You could just put the defines on the DEFS line in machines/<os> file. -! I don't since there are lots of different types of compiler that a system might -! have, some that can do prototyping and others that cannot on the saem system. -! I get a chance to twiddle some of the configuration paramasters at compile -! time based on compler/machine combinations by using this include file. -! See convex, aix and sun configurations see how complex it gets. -! -! Note that it _is_ considered reasonable to add some system-specific defines -! to the machine/<os> file if it would be too inconvenient to puzzle them out -! in this file. - - */ -*************** -*** 145,152 **** - * Keep USE_PROTOTYPES and _NO_PROTO in step. - */ -! #if defined(_NO_PROTO)&&defined(USE_PROTOTYPES) - #undef USE_PROTOTYPES - #endif -! #if !defined(_NO_PROTO)&&!defined(USE_PROTOTYPES) - #define USE_PROTOTYPES - #endif ---- 147,154 ---- - * Keep USE_PROTOTYPES and _NO_PROTO in step. - */ -! #if defined(_NO_PROTO) && defined(USE_PROTOTYPES) - #undef USE_PROTOTYPES - #endif -! #if !defined(_NO_PROTO) && !defined(USE_PROTOTYPES) - #define USE_PROTOTYPES - #endif -*************** -*** 204,208 **** - * Convex - */ -! #if defined(SYS_CONVEXOS10)||defined(SYS_CONVEXOS9) - #define HAVE_SIGNALED_IO - #define HAVE_N_UN ---- 206,210 ---- - * Convex - */ -! #if defined(SYS_CONVEXOS10) || defined(SYS_CONVEXOS9) - #define HAVE_SIGNALED_IO - #define HAVE_N_UN -*************** -*** 213,221 **** - #define NO_SIGNED_CHAR_DECL - #else -! #if defined(__stdc__)&&!defined(USE_PROTOTYPES) - #define USE_PROTOTYPES - #endif -! #if !defined(__stdc__)&&defined(USE_PROTOTYPES) -! #undef USE_PROTOTYPES - #endif - #define NTP_POSIX_SOURCE ---- 215,223 ---- - #define NO_SIGNED_CHAR_DECL - #else -! #if defined(__stdc__) && !defined(USE_PROTOTYPES) - #define USE_PROTOTYPES - #endif -! #if !defined(__stdc__) && defined(USE_PROTOTYPES) -! #undef USE_PROTOTYPES - #endif - #define NTP_POSIX_SOURCE -*************** -*** 253,257 **** - * AUX - */ -! #if defined(SYS_AUX2)||defined(SYS_AUX3) - #define NO_SIGNED_CHAR_DECL - #define HAVE_READKMEM ---- 255,259 ---- - * AUX - */ -! #if defined(SYS_AUX2) || defined(SYS_AUX3) - #define NO_SIGNED_CHAR_DECL - #define HAVE_READKMEM -*************** -*** 292,296 **** - #define NTP_POSIX_SOURCE - #define HAVE_SIGNALED_IO -- #define HAVE_UNISTD_H - #define NO_SIGNED_CHAR_DECL - #define LOCK_PROCESS ---- 294,297 ---- -*************** -*** 302,305 **** ---- 303,308 ---- - #define HAVE_READKMEM - #endif -+ #define getdtablesize() sysconf(_SC_OPEN_MAX) -+ #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0) - #endif - -*************** -*** 313,316 **** ---- 316,320 ---- - #define HAVE_BSD_NICE - #define HAVE_BSD_TTYS -+ #define HAVE_TERMIOS - #endif - -*************** -*** 342,346 **** - - /* -! * DECOSF1 - */ - #if defined(SYS_DECOSF1) ---- 346,350 ---- - - /* -! * DEC AXP OSF/1 - */ - #if defined(SYS_DECOSF1) -*************** -*** 354,357 **** ---- 358,362 ---- - /* - * I386 -+ * XXX - what OS? - */ - #if defined(SYS_I386) -*************** -*** 412,416 **** - - /* -! * Sony - */ - #if defined(SYS_SONY) ---- 417,421 ---- - - /* -! * Sony NEWS - */ - #if defined(SYS_SONY) -*************** -*** 422,425 **** ---- 427,431 ---- - /* - * VAX -+ * XXX - VMS? - */ - #if defined(SYS_VAX) -*************** -*** 435,439 **** - #define HAVE_ATT_SETPGRP - #define USE_PROTOTYPES -- #define HAVE_UNISTD_H - #define NTP_POSIX_SOURCE - #define HAVE_ATT_NICE ---- 441,444 ---- -*************** -*** 484,490 **** - #endif /* NTP_SYSCALLS_STD */ - -! #if !defined(HAVE_ATT_NICE) && !defined(HAVE_BSD_NICE) && !defined(HAVE_NO_NICE) - ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines - #endif - - #endif /* __ntp_machine */ ---- 489,545 ---- - #endif /* NTP_SYSCALLS_STD */ - -! #if !defined(HAVE_ATT_NICE) \ -! && !defined(HAVE_BSD_NICE) \ -! && !defined(HAVE_NO_NICE) - ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines - #endif -+ -+ -+ #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN) -+ -+ # if defined(XNTP_AUTO_ENDIAN) -+ # include <netinet/in.h> -+ -+ # if BYTE_ORDER == BIG_ENDIAN -+ # define XNTP_BIG_ENDIAN -+ # endif -+ # if BYTE_ORDER == LITTLE_ENDIAN -+ # define XNTP_LITTLE_ENDIAN -+ # endif -+ -+ # else /* AUTO */ -+ -+ # ifdef WORDS_BIGENDIAN -+ # define XNTP_BIG_ENDIAN 1 -+ # else -+ # define XNTP_LITTLE_ENDIAN 1 -+ # endif -+ -+ # endif /* AUTO */ -+ -+ #endif /* !BIG && !LITTLE */ -+ -+ /* -+ * Byte order woes. The DES code is sensitive to byte order. This -+ * used to be resolved by calling ntohl() and htonl() to swap things -+ * around, but this turned out to be quite costly on Vaxes where those -+ * things are actual functions. The code now straightens out byte -+ * order troubles on its own, with no performance penalty for little -+ * end first machines, but at great expense to cleanliness. -+ */ -+ #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN) -+ /* -+ * Pick one or the other. -+ */ -+ BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION -+ #endif -+ -+ #if defined(XNTP_BIG_ENDIAN) && defined(XNTP_LITTLE_ENDIAN) -+ /* -+ * Pick one or the other. -+ */ -+ BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION -+ #endif -+ - - #endif /* __ntp_machine */ -*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994 ---- include/ntp_select.h Wed Jan 26 16:33:31 1994 -*************** -*** 15,19 **** - #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) - #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) -! #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p))) - #endif - ---- 15,19 ---- - #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) - #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) -! #define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p))) - #endif - -*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994 ---- include/ntp_stdlib.h Wed Jan 26 16:33:31 1994 -*************** -*** 48,52 **** - extern int clocktime P((int, int, int, int, int, U_LONG, U_LONG *, U_LONG *)); - extern char * emalloc P((u_int)); -! extern int getopt_l P((int, char **, char *)); - extern void init_auth P((void)); - extern void init_lib P((void)); ---- 48,52 ---- - extern int clocktime P((int, int, int, int, int, U_LONG, U_LONG *, U_LONG *)); - extern char * emalloc P((u_int)); -! extern int ntp_getopt P((int, char **, char *)); - extern void init_auth P((void)); - extern void init_lib P((void)); -*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994 ---- include/ntp_string.h Wed Jan 26 16:33:31 1994 -*************** -*** 1,4 **** - /* -! * Define bcopy, bzero, and bcmp and string op's - */ - ---- 1,4 ---- - /* -! * Define string ops: strchr strrchr memcmp memmove memset - */ - -*************** -*** 8,27 **** - #ifdef NTP_POSIX_SOURCE - -! #if defined(HAVE_MEMORY_H) -! #include <memory.h> -! #endif -! -! #include <string.h> -! -! #define bcopy(s1,s2,n) memcpy(s2, s1, n) -! #define bzero(s,n) memset(s, 0, n) -! #define bcmp(s1,s2,n) memcmp(s1, s2, n) - - #else /* NTP_POSIX_SOURCE */ - -! #include <strings.h> - -! #define strrchr rindex -! #define strchr index - - #endif /* NTP_POSIX_SOURCE */ ---- 8,27 ---- - #ifdef NTP_POSIX_SOURCE - -! # if defined(HAVE_MEMORY_H) -! # include <memory.h> -! # endif - -+ # include <string.h> -+ - #else /* NTP_POSIX_SOURCE */ - -! # include <strings.h> - -! # define strchr(s,c) index(s,c) -! # define strrchr(s,c) rindex(s,c) -! # define memcmp(a,b,c) bcmp(a,b,c) -! # define memmove(t,f,c) bcopy(f,t,c) -! # define memset(a,x,c) if (x == 0x00) bzero(a,c) else ntp_memset((char*)a,x,c) -! void ntp_memset P((char *, int, int)); - - #endif /* NTP_POSIX_SOURCE */ -*** /tmp/RCSA023456 Wed Jan 26 17:56:31 1994 ---- kernel/tty_clk_STREAMS.c Wed Jan 26 16:33:31 1994 -*************** -*** 63,67 **** - - /* -! * God only knows why, but linking with strchr() and index() fail - * on my system, so here's a renamed copy. - */ ---- 63,67 ---- - - /* -! * God only knows why, but linking with strchr() fails - * on my system, so here's a renamed copy. - */ -*** /tmp/RCSA023460 Wed Jan 26 17:56:32 1994 ---- lib/a_md512crypt.c Wed Jan 26 16:33:31 1994 -*************** -*** 81,86 **** - MD5Final(&ctx); - -! bcopy((char *)ctx.digest, (char *) &pkt[NOCRYPT_LONGS + length/sizeof(U_LONG)], -! BLOCK_OCTETS); -! return 4 + BLOCK_OCTETS; - } ---- 81,87 ---- - MD5Final(&ctx); - -! memmove((char *) &pkt[NOCRYPT_LONGS + length/sizeof(U_LONG)], -! (char *) ctx.digest, -! BLOCK_OCTETS); -! return (4 + BLOCK_OCTETS); - } -*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994 ---- lib/a_md5decrypt.c Wed Jan 26 16:33:32 1994 -*************** -*** 55,58 **** - MD5Final(&ctx); - -! return (0 == bcmp((char *)ctx.digest, (char *)pkt + length + 4, BLOCK_OCTETS)); - } ---- 55,60 ---- - MD5Final(&ctx); - -! return (!memcmp((char *)ctx.digest, -! (char *)pkt + length + 4, -! BLOCK_OCTETS)); - } -*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994 ---- lib/a_md5encrypt.c Wed Jan 26 16:33:32 1994 -*************** -*** 64,68 **** - MD5Final(&ctx); - -! bcopy((char *)ctx.digest, (char *) &pkt[NOCRYPT_LONGS + len], BLOCK_OCTETS); -! return 4 + BLOCK_OCTETS; /* return size of key and MAC */ - } ---- 64,70 ---- - MD5Final(&ctx); - -! memmove((char *)&pkt[NOCRYPT_LONGS + len], -! (char *)ctx.digest, -! BLOCK_OCTETS); -! return (4 + BLOCK_OCTETS); /* return size of key and MAC */ - } -*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994 ---- lib/authdes.c Wed Jan 26 16:33:32 1994 -*************** -*** 4,31 **** - #include "ntp_stdlib.h" - -- #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN) -- -- #if defined(XNTP_AUTO_ENDIAN) -- #include <netinet/in.h> -- -- #if BYTE_ORDER == BIG_ENDIAN -- #define XNTP_BIG_ENDIAN -- #endif -- #if BYTE_ORDER == LITTLE_ENDIAN -- #define XNTP_LITTLE_ENDIAN -- #endif -- -- #else /* AUTO */ -- -- #ifdef WORDS_BIGENDIAN -- #define XNTP_BIG_ENDIAN 1 -- #else -- #define XNTP_LITTLE_ENDIAN 1 -- #endif -- -- #endif /* AUTO */ -- -- #endif /* !BIG && !LITTLE */ -- - /* - * There are two entries in here. auth_subkeys() called to ---- 4,7 ---- -*************** -*** 33,58 **** - * auth_des() is called to do the actual encryption/decryption - */ -- -- /* -- * Byte order woes. The DES code is sensitive to byte order. This -- * used to be resolved by calling ntohl() and htonl() to swap things -- * around, but this turned out to be quite costly on Vaxes where those -- * things are actual functions. The code now straightens out byte -- * order troubles on its own, with no performance penalty for little -- * end first machines, but at great expense to cleanliness. -- */ -- #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN) -- /* -- * Pick one or the other. -- */ -- BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION -- #endif -- -- #if defined(XNTP_BIG_ENDIAN) && defined(XNTP_LITTLE_ENDIAN) -- /* -- * Pick one or the other. -- */ -- BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION -- #endif - - /* ---- 9,12 ---- -*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994 ---- lib/authkeys.c Wed Jan 26 16:33:32 1994 -*************** -*** 110,114 **** - * Initialize hash table and free list - */ -! bzero((char *)key_hash, sizeof key_hash); - cache_flags = cache_keyid = 0; - ---- 110,114 ---- - * Initialize hash table and free list - */ -! memset((char *)key_hash, 0, sizeof key_hash); - cache_flags = cache_keyid = 0; - -*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994 ---- lib/authusekey.c Wed Jan 26 16:33:32 1994 -*************** -*** 97,101 **** - * Make up key from ascii representation - */ -! bzero((char *) keybytes, sizeof(keybytes)); - for (i = 0; i < 8 && i < len; i++) - keybytes[i] = *cp++ << 1; ---- 97,101 ---- - * Make up key from ascii representation - */ -! memset((char *) keybytes, 0, sizeof(keybytes)); - for (i = 0; i < 8 && i < len; i++) - keybytes[i] = *cp++ << 1; -*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994 ---- lib/dofptoa.c Wed Jan 26 16:33:33 1994 -*************** -*** 32,36 **** - * Zero out the buffer - */ -! bzero((char *)cbuf, sizeof cbuf); - - /* ---- 32,36 ---- - * Zero out the buffer - */ -! memset((char *)cbuf, 0, sizeof cbuf); - - /* -*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994 ---- lib/dolfptoa.c Wed Jan 26 16:33:33 1994 -*************** -*** 33,37 **** - * Zero the character buffer - */ -! bzero((char *) cbuf, sizeof(cbuf)); - - /* ---- 33,37 ---- - * Zero the character buffer - */ -! memset((char *) cbuf, 0, sizeof(cbuf)); - - /* -*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994 ---- lib/getopt.c Wed Jan 26 16:33:33 1994 -*************** -*** 5,9 **** - * Henry Spencer, changed for 4.3BSD compatibility (in addition to System V). - * It allows rescanning of an option list by setting optind to 0 before -! * calling. Thanks to Dennis Ferguson for the appropriate modifications. - * - * This file is in the Public Domain. ---- 5,11 ---- - * Henry Spencer, changed for 4.3BSD compatibility (in addition to System V). - * It allows rescanning of an option list by setting optind to 0 before -! * calling, which is why we use it even if the system has its own (in fact, -! * this one has a unique name so as not to conflict with the system's). -! * Thanks to Dennis Ferguson for the appropriate modifications. - * - * This file is in the Public Domain. -*************** -*** 21,57 **** - #endif /* lint */ - -! char *optarg; /* Global argument pointer. */ -! #ifndef __convex__ -! int optind = 0; /* Global argv index. */ -! #else /* __convex__ */ -! extern int optind; /* Global argv index. */ -! #endif /* __convex__ */ - -- /* -- * N.B. use following at own risk -- */ -- #ifndef __convex__ -- int opterr = 1; /* for compatibility, should error be printed? */ -- #else /* __convex__ */ -- extern int opterr; /* for compatibility, should error be printed? */ -- #endif /* __convex__ */ -- int optopt; /* for compatibility, option character checked */ -- - static char *scan = NULL; /* Private scan pointer. */ - - /* -! * Print message about a bad option. Watch this definition, it's -! * not a single statement. - */ -! #define BADOPT(mess, ch) if (opterr) { \ -! fputs(argv[0], stderr); \ -! fputs(mess, stderr); \ -! (void) putc(ch, stderr); \ -! (void) putc('\n', stderr); \ -! } \ -! return('?') - - int -! getopt_l(argc, argv, optstring) - int argc; - char *argv[]; ---- 23,53 ---- - #endif /* lint */ - -! char *ntp_optarg; /* Global argument pointer. */ -! int ntp_optind = 0; /* Global argv index. */ -! int ntp_opterr = 1; /* for compatibility, should error be printed? */ -! int ntp_optopt; /* for compatibility, option character checked */ - - static char *scan = NULL; /* Private scan pointer. */ -+ static char *prog = "amnesia"; - - /* -! * Print message about a bad option. - */ -! static int -! badopt(mess, ch) -! char *mess; -! int ch; -! { -! if (ntp_opterr) { -! fputs(prog, stderr); -! fputs(mess, stderr); -! (void) putc(ch, stderr); -! (void) putc('\n', stderr); -! } -! return ('?'); -! } - - int -! ntp_getopt(argc, argv, optstring) - int argc; - char *argv[]; -*************** -*** 61,85 **** - register char *place; - -! optarg = NULL; - -! if (optind == 0) { - scan = NULL; -! optind++; - } - - if (scan == NULL || *scan == '\0') { -! if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0') -! return EOF; -! if (argv[optind][1] == '-' && argv[optind][2] == '\0') { -! optind++; -! return EOF; - } - -! scan = argv[optind]+1; -! optind++; - } - - c = *scan++; -! optopt = c & 0377; - for (place = optstring; place != NULL && *place != '\0'; ++place) - if (*place == c) ---- 57,85 ---- - register char *place; - -! prog = argv[0]; -! ntp_optarg = NULL; - -! if (ntp_optind == 0) { - scan = NULL; -! ntp_optind++; - } - - if (scan == NULL || *scan == '\0') { -! if (ntp_optind >= argc -! || argv[ntp_optind][0] != '-' -! || argv[ntp_optind][1] == '\0') { -! return (EOF); -! } -! if (argv[ntp_optind][1] == '-' -! && argv[ntp_optind][2] == '\0') { -! ntp_optind++; -! return (EOF); - } - -! scan = argv[ntp_optind++]+1; - } - - c = *scan++; -! ntp_optopt = c & 0377; - for (place = optstring; place != NULL && *place != '\0'; ++place) - if (*place == c) -*************** -*** 87,91 **** - - if (place == NULL || *place == '\0' || c == ':' || c == '?') { -! BADOPT(": unknown option -", c); - } - ---- 87,91 ---- - - if (place == NULL || *place == '\0' || c == ':' || c == '?') { -! return (badopt(": unknown option -", c)); - } - -*************** -*** 93,106 **** - if (*place == ':') { - if (*scan != '\0') { -! optarg = scan; - scan = NULL; -! } else if (optind >= argc) { -! BADOPT(": option requires argument -", c); - } else { -! optarg = argv[optind]; -! optind++; - } - } - -! return c&0377; - } ---- 93,105 ---- - if (*place == ':') { - if (*scan != '\0') { -! ntp_optarg = scan; - scan = NULL; -! } else if (ntp_optind >= argc) { -! return (badopt(": option requires argument -", c)); - } else { -! ntp_optarg = argv[ntp_optind++]; - } - } - -! return (c & 0377); - } -*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994 ---- lib/machines.c Wed Jan 26 16:33:33 1994 -*************** -*** 1,18 **** -! /* -! * provide special support for peculiar architectures - * - * Real bummers unite ! - */ - - #ifdef SYS_PTX - #include <sys/types.h> - #include <sys/procstats.h> -! int settimeofday(tvp) - struct timeval *tvp; - { -! return stime(&tvp->tv_sec); /* lie as bad as SysVR4 */ - } - -! int gettimeofday(tvp) - struct timeval *tvp; - { ---- 1,24 ---- -! /* machines.c - provide special support for peculiar architectures - * - * Real bummers unite ! -+ * -+ * $Id:$ - */ - -+ #include "ntp_stdlib.h" -+ - #ifdef SYS_PTX - #include <sys/types.h> - #include <sys/procstats.h> -! -! int -! settimeofday(tvp) - struct timeval *tvp; - { -! return (stime(&tvp->tv_sec)); /* lie as bad as SysVR4 */ - } - -! int -! gettimeofday(tvp) - struct timeval *tvp; - { -*************** -*** 21,118 **** - * this is also the most logical syscall for such a function - */ -! return get_process_stats(tvp, PS_SELF, (struct procstats *) 0, -! (struct procstats *) 0); -! } -! #endif -! -! #ifdef SYS_HPUX -! /* hpux.c,v 3.1 1993/07/06 01:08:23 jbj Exp -! * hpux.c -- compatibility routines for HP-UX. -! * XXX many of these are not needed anymore. -! */ -! #include "ntp_machine.h" -! -! #ifdef HAVE_UNISTD_H -! #include <unistd.h> -! #endif -! #include <stdio.h> -! -! #include "ntp_stdlib.h" -! -! #if (SYS_HPUX < 8) -! char -! *index(s, c) -! register char *s; -! register int c; -! { -! return strchr (s, c); -! } -! -! -! char -! *rindex(s, c) -! register char *s; -! register int c; -! { -! return strrchr (s, c); -! } -! -! -! int -! bcmp(a, b, count) -! register char *a, *b; -! register int count; -! { -! return memcmp (a, b, count); -! } -! -! -! void -! bcopy(from, to, count) -! register char *from; -! register char *to; -! register int count; -! { -! if ((to == from) || (count <= 0)) -! return; -! -! if ((to > from) && (to <= (from + count))) { -! to += count; -! from += count; -! -! do { -! *--to = *--from; -! } while (--count); -! } -! else { -! do { -! *to++ = *from++; -! } while (--count); -! } -! } -! -! -! void -! bzero(area, count) -! register char *area; -! register int count; -! { -! memset(area, 0, count); - } - #endif - -! -! getdtablesize() -! { -! return(sysconf(_SC_OPEN_MAX)); -! } -! -! -! int -! setlinebuf(a_stream) -! FILE *a_stream; - { -! return setvbuf(a_stream, (char *) NULL, _IOLBF, 0); - } -! -! #endif ---- 27,43 ---- - * this is also the most logical syscall for such a function - */ -! return (get_process_stats(tvp, PS_SELF, (struct procstats *) 0, -! (struct procstats *) 0)); - } - #endif - -! #if !defined(NTP_POSIX_SOURCE) -! void -! ntp_memset(a, x, c) -! char *a; -! int x, c; - { -! while (c-- > 0) -! *a++ = x; - } -! #endif /*POSIX*/ -*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994 ---- lib/numtohost.c Wed Jan 26 16:37:59 1994 -*************** -*** 2,6 **** - * numtohost - convert network number to host name. - */ -- #include "ntp_string.h" - #include <netdb.h> - ---- 2,5 ---- -*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994 ---- lib/systime.c Wed Jan 26 16:33:33 1994 -*************** -*** 346,350 **** - */ - if (oldtime != timetv.tv_sec) { -! bzero((char *)&ut, sizeof(ut)); - ut.ut_type = OLD_TIME; - ut.ut_time = oldtime; ---- 346,350 ---- - */ - if (oldtime != timetv.tv_sec) { -! memset((char *)&ut, 0, sizeof(ut)); - ut.ut_type = OLD_TIME; - ut.ut_time = oldtime; -*** /tmp/RCSA023486 Wed Jan 26 17:56:35 1994 ---- machines/bsdi Wed Jan 26 16:33:33 1994 -*************** -*** 1,5 **** - RANLIB= ranlib - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_BSDI -DHAVE_TERMIOS - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK ---- 1,5 ---- - RANLIB= ranlib - DEFS_LOCAL=-DREFCLOCK -! DEFS= -DSYS_BSDI - AUTHDEFS= -DDES -DMD5 - CLOCKDEFS= -DLOCAL_CLOCK -*** /tmp/RCSA023490 Wed Jan 26 17:56:36 1994 ---- ntpdate/ntpdate.c Wed Jan 26 16:33:34 1994 -*************** -*** 168,173 **** - int errflg; - int c; -! extern char *optarg; -! extern int optind; - extern char *Version; - ---- 168,173 ---- - int errflg; - int c; -! extern char *ntp_optarg; -! extern int ntp_optind; - extern char *Version; - -*************** -*** 179,186 **** - * Decode argument list - */ -! while ((c = getopt_l(argc, argv, "a:bde:k:o:p:qst:v")) != EOF) - switch (c) { - case 'a': -! c = atoi(optarg); - sys_authenticate = 1; - sys_authkey = (U_LONG)c; ---- 179,186 ---- - * Decode argument list - */ -! while ((c = ntp_getopt(argc, argv, "a:bde:k:o:p:qst:v")) != EOF) - switch (c) { - case 'a': -! c = atoi(ntp_optarg); - sys_authenticate = 1; - sys_authkey = (U_LONG)c; -*************** -*** 193,201 **** - break; - case 'e': -! if (!atolfp(optarg, &tmp) - || tmp.l_ui != 0) { - (void) fprintf(stderr, - "%s: encryption delay %s is unlikely\n", -! progname, optarg); - errflg++; - } else { ---- 193,201 ---- - break; - case 'e': -! if (!atolfp(ntp_optarg, &tmp) - || tmp.l_ui != 0) { - (void) fprintf(stderr, - "%s: encryption delay %s is unlikely\n", -! progname, ntp_optarg); - errflg++; - } else { -*************** -*** 204,214 **** - break; - case 'k': -! key_file = optarg; - break; - case 'o': -! sys_version = atoi(optarg); - break; - case 'p': -! c = atoi(optarg); - if (c <= 0 || c > NTP_SHIFT) { - (void) fprintf(stderr, ---- 204,214 ---- - break; - case 'k': -! key_file = ntp_optarg; - break; - case 'o': -! sys_version = atoi(ntp_optarg); - break; - case 'p': -! c = atoi(ntp_optarg); - if (c <= 0 || c > NTP_SHIFT) { - (void) fprintf(stderr, -*************** -*** 227,234 **** - break; - case 't': -! if (!atolfp(optarg, &tmp)) { - (void) fprintf(stderr, - "%s: timeout %s is undecodeable\n", -! progname, optarg); - errflg++; - } else { ---- 227,234 ---- - break; - case 't': -! if (!atolfp(ntp_optarg, &tmp)) { - (void) fprintf(stderr, - "%s: timeout %s is undecodeable\n", -! progname, ntp_optarg); - errflg++; - } else { -*************** -*** 249,253 **** - } - -! sys_maxservers = argc - optind; - if (errflg || sys_maxservers == 0) { - (void) fprintf(stderr, ---- 249,253 ---- - } - -! sys_maxservers = argc - ntp_optind; - if (errflg || sys_maxservers == 0) { - (void) fprintf(stderr, -*************** -*** 294,299 **** - * Add servers we are going to be polling - */ -! for ( ; optind < argc; optind++) -! addserver(argv[optind]); - - if (sys_numservers == 0) { ---- 294,299 ---- - * Add servers we are going to be polling - */ -! for ( ; ntp_optind < argc; ntp_optind++) -! addserver(argv[ntp_optind]); - - if (sys_numservers == 0) { -*************** -*** 1031,1035 **** - - server = (struct server *)emalloc(sizeof(struct server)); -! bzero((char *)server, sizeof(struct server)); - - server->srcadr.sin_family = AF_INET; ---- 1031,1035 ---- - - server = (struct server *)emalloc(sizeof(struct server)); -! memset((char *)server, 0, sizeof(struct server)); - - server->srcadr.sin_family = AF_INET; -*************** -*** 1189,1193 **** - struct sockaddr_in addr; - -! bzero((char *)&addr, sizeof addr); - addr.sin_family = AF_INET; - addr.sin_port = htons(NTP_PORT); ---- 1189,1193 ---- - struct sockaddr_in addr; - -! memset((char *)&addr, 0, sizeof addr); - addr.sin_family = AF_INET; - addr.sin_port = htons(NTP_PORT); -*************** -*** 1483,1490 **** - return 1; - } else if ((hp = gethostbyname(host)) != 0) { -! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG)); -! return 1; - } -! return 0; - } - ---- 1483,1490 ---- - return 1; - } else if ((hp = gethostbyname(host)) != 0) { -! memmove((char *)num, hp->h_addr, sizeof(U_LONG)); -! return (1); - } -! return (0); - } - -*************** -*** 1520,1524 **** - if (pp->stratum == 1) { - junk[4] = 0; -! bcopy((char *)&pp->refid, junk, 4); - str = junk; - } else { ---- 1520,1524 ---- - if (pp->stratum == 1) { - junk[4] = 0; -! memmove(junk, (char *)&pp->refid, 4); - str = junk; - } else { -*** /tmp/RCSA023494 Wed Jan 26 17:56:37 1994 ---- ntpq/ntpq.c Wed Jan 26 16:33:34 1994 -*************** -*** 510,515 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - - delay_time.l_ui = 0; ---- 510,515 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - - delay_time.l_ui = 0; -*************** -*** 517,524 **** - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "c:dinp")) != EOF) - switch (c) { - case 'c': -! ADDCMD(optarg); - break; - case 'd': ---- 517,524 ---- - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "c:dinp")) != EOF) - switch (c) { - case 'c': -! ADDCMD(ntp_optarg); - break; - case 'd': -*************** -*** 544,552 **** - exit(2); - } -! if (optind == argc) { - ADDHOST(DEFHOST); - } else { -! for (; optind < argc; optind++) -! ADDHOST(argv[optind]); - } - ---- 544,552 ---- - exit(2); - } -! if (ntp_optind == argc) { - ADDHOST(DEFHOST); - } else { -! for (; ntp_optind < argc; ntp_optind++) -! ADDHOST(argv[ntp_optind]); - } - -*************** -*** 983,987 **** - * Copy the data into the data buffer. - */ -! bcopy((char *)rpkt.data, (char *)pktdata + offset, count); - - /* ---- 983,987 ---- - * Copy the data into the data buffer. - */ -! memmove((char *)pktdata + offset, (char *)rpkt.data, count); - - /* -*************** -*** 1051,1055 **** - */ - if (qsize > 0) { -! bcopy(qdata, (char *)qpkt.data, qsize); - pktsize = qsize + CTL_HEADER_LEN; - while (pktsize & (sizeof(U_LONG)-1)) { ---- 1051,1055 ---- - */ - if (qsize > 0) { -! memmove((char *)qpkt.data, qdata, qsize); - pktsize = qsize + CTL_HEADER_LEN; - while (pktsize & (sizeof(U_LONG)-1)) { -*************** -*** 1542,1546 **** - return 1; - } else if ((hp = gethostbyname(host)) != 0) { -! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG)); - if (fullhost != 0) - (void) strcpy(fullhost, hp->h_name); ---- 1542,1546 ---- - return 1; - } else if ((hp = gethostbyname(host)) != 0) { -! memmove((char *)num, hp->h_addr, sizeof(U_LONG)); - if (fullhost != 0) - (void) strcpy(fullhost, hp->h_name); -*** /tmp/RCSA023494 Wed Jan 26 17:56:37 1994 ---- ntpq/ntpq_ops.c Wed Jan 26 16:33:34 1994 -*************** -*** 218,221 **** ---- 218,222 ---- - /* - * strsave - save a string -+ * XXX - should be in libntp.a - */ - static char * -*************** -*** 232,237 **** - } - -! bcopy(str, cp, len); -! return cp; - } - ---- 233,238 ---- - } - -! memmove(cp, str, len); -! return (cp); - } - -*************** -*** 373,381 **** - if (cp != data) - *cp++ = ','; -! bcopy(vl->name, cp, namelen); - cp += namelen; - if (valuelen != 0) { - *cp++ = '='; -! bcopy(vl->value, cp, valuelen); - cp += valuelen; - } ---- 374,382 ---- - if (cp != data) - *cp++ = ','; -! memmove(cp, vl->name, namelen); - cp += namelen; - if (valuelen != 0) { - *cp++ = '='; -! memmove(cp, vl->value, valuelen); - cp += valuelen; - } -*************** -*** 601,605 **** - return; - -! bzero((char *)tmplist, sizeof(tmplist)); - if (pcmd->nargs >= 2) - doaddvlist(tmplist, pcmd->argval[1].string); ---- 602,606 ---- - return; - -! memset((char *)tmplist, 0, sizeof(tmplist)); - if (pcmd->nargs >= 2) - doaddvlist(tmplist, pcmd->argval[1].string); -*************** -*** 632,636 **** - return; - -! bzero((char *)tmplist, sizeof(tmplist)); - doaddvlist(tmplist, pcmd->argval[1].string); - ---- 633,637 ---- - return; - -! memset((char *)tmplist, 0, sizeof(tmplist)); - doaddvlist(tmplist, pcmd->argval[1].string); - -*************** -*** 691,695 **** - return; - -! bzero((char *)tmplist, sizeof(tmplist)); - if (pcmd->nargs >= 2) - doaddvlist(tmplist, pcmd->argval[1].string); ---- 692,696 ---- - return; - -! memset((char *)tmplist, 0, sizeof(tmplist)); - if (pcmd->nargs >= 2) - doaddvlist(tmplist, pcmd->argval[1].string); -*************** -*** 803,807 **** - return; - -! bzero((char *)tmplist, sizeof(tmplist)); - if (pcmd->nargs >= 3) - doaddvlist(tmplist, pcmd->argval[2].string); ---- 804,808 ---- - return; - -! memset((char *)tmplist, 0, sizeof(tmplist)); - if (pcmd->nargs >= 3) - doaddvlist(tmplist, pcmd->argval[2].string); -*************** -*** 1283,1287 **** - extern struct ctl_var peer_var[]; - -! bzero((char *)havevar, sizeof(havevar)); - gettstamp(&ts); - ---- 1284,1288 ---- - extern struct ctl_var peer_var[]; - -! memset((char *)havevar, 0, sizeof(havevar)); - gettstamp(&ts); - -*** /tmp/RCSA023500 Wed Jan 26 17:56:38 1994 ---- ntptrace/ntptrace.c Wed Jan 26 16:33:35 1994 -*************** -*** 112,117 **** - int errflg; - int c; -! extern char *optarg; -! extern int optind; - extern char *Version; - ---- 112,117 ---- - int errflg; - int c; -! extern char *ntp_optarg; -! extern int ntp_optind; - extern char *Version; - -*************** -*** 122,126 **** - * Decode argument list - */ -! while ((c = getopt_l(argc, argv, "do:nr:t:v")) != EOF) - switch (c) { - case 'd': ---- 122,126 ---- - * Decode argument list - */ -! while ((c = ntp_getopt(argc, argv, "do:nr:t:v")) != EOF) - switch (c) { - case 'd': -*************** -*** 131,138 **** - break; - case 'o': -! sys_version = atoi(optarg); - break; - case 'r': -! sys_retries = atoi(optarg); - if (sys_retries < 1) { - (void)fprintf(stderr, ---- 131,138 ---- - break; - case 'o': -! sys_version = atoi(ntp_optarg); - break; - case 'r': -! sys_retries = atoi(ntp_optarg); - if (sys_retries < 1) { - (void)fprintf(stderr, -*************** -*** 143,147 **** - break; - case 't': -! sys_timeout = atoi(optarg); - if (sys_timeout < 1) { - (void)fprintf(stderr, ---- 143,147 ---- - break; - case 't': -! sys_timeout = atoi(ntp_optarg); - if (sys_timeout < 1) { - (void)fprintf(stderr, -*************** -*** 161,165 **** - } - -! if (errflg || (argc - optind) > 1) { - (void) fprintf(stderr, - "usage: %s [-vnd] [-r retries] [-t timeout] [server]\n", ---- 161,165 ---- - } - -! if (errflg || (argc - ntp_optind) > 1) { - (void) fprintf(stderr, - "usage: %s [-vnd] [-r retries] [-t timeout] [server]\n", -*************** -*** 183,188 **** - syslog(LOG_NOTICE, "%s", Version); - -! if ((argc - optind) == 1) -! firstserver = addservbyname(argv[optind]); - else - firstserver = addservbyname("localhost"); ---- 183,188 ---- - syslog(LOG_NOTICE, "%s", Version); - -! if ((argc - ntp_optind) == 1) -! firstserver = addservbyname(argv[ntp_optind]); - else - firstserver = addservbyname("localhost"); -*************** -*** 503,507 **** - - server = (struct server *)emalloc(sizeof(struct server)); -! bzero((char *)server, sizeof(struct server)); - - server->srcadr.sin_family = AF_INET; ---- 503,507 ---- - - server = (struct server *)emalloc(sizeof(struct server)); -! memset((char *)server, 0, sizeof(struct server)); - - server->srcadr.sin_family = AF_INET; -*************** -*** 617,621 **** - return 1; - } else if ((hp = gethostbyname(host)) != 0) { -! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG)); - return 1; - } ---- 617,621 ---- - return 1; - } else if ((hp = gethostbyname(host)) != 0) { -! memmove((char *)num, hp->h_addr, sizeof(U_LONG)); - return 1; - } -*************** -*** 736,740 **** - if (pp->stratum == 1) { - junk[4] = 0; -! bcopy((char *)&pp->refid, junk, 4); - str = junk; - (void) fprintf(fp, "'%s'", str); ---- 736,740 ---- - if (pp->stratum == 1) { - junk[4] = 0; -! memmove(junk, (char *)&pp->refid, 4); - str = junk; - (void) fprintf(fp, "'%s'", str); -*** /tmp/RCSA023505 Wed Jan 26 17:56:39 1994 ---- parse/util/testdcf.c Wed Jan 26 16:33:35 1994 -*************** -*** 353,357 **** - } - -! bzero(term.c_cc, sizeof(term.c_cc)); - term.c_cc[VMIN] = 1; - term.c_cflag = B50|CS8|CREAD|CLOCAL; ---- 353,357 ---- - } - -! memset(term.c_cc, 0, sizeof(term.c_cc)); - term.c_cc[VMIN] = 1; - term.c_cflag = B50|CS8|CREAD|CLOCAL; -*** /tmp/RCSA023510 Wed Jan 26 17:56:40 1994 ---- ppsclock/ppstest/ppstest.c Wed Jan 26 16:33:35 1994 -*************** -*** 103,107 **** - speed_t speed = B4800; - -! bzero((char *)&termios, sizeof(termios)); - termios.c_cflag = CS8 | CREAD | CLOCAL; - termios.c_iflag = IGNCR; ---- 103,107 ---- - speed_t speed = B4800; - -! memset((char *)&termios, 0, sizeof(termios)); - termios.c_cflag = CS8 | CREAD | CLOCAL; - termios.c_iflag = IGNCR; -*** /tmp/RCSA023525 Wed Jan 26 17:56:43 1994 ---- scripts/autoconf Wed Jan 26 16:33:35 1994 -*************** -*** 324,329 **** - { - test -n "$verbose" && \ -! echo ' defining' HAVE_UNISTD_H -! DEFS="$DEFS -DHAVE_UNISTD_H=1" - } - ---- 324,329 ---- - { - test -n "$verbose" && \ -! echo ' defining' NTP_POSIX_SOURCE -! DEFS="$DEFS -DNTP_POSIX_SOURCE=1" - } - -*** /tmp/RCSA023535 Wed Jan 26 17:56:46 1994 ---- util/Makefile.tmpl Wed Jan 26 16:33:35 1994 -*************** -*** 33,37 **** - - tickadj: $(TKOBJS) -! $(CC) $(COPTS) -o $@ $(TKOBJS) $(DAEMONLIBS) $(RESLIB) $(COMPAT) - - ntptime: $(NTOBJS) ---- 33,37 ---- - - tickadj: $(TKOBJS) -! $(CC) $(COPTS) -o $@ $(TKOBJS) $(LIB) $(DAEMONLIBS) $(RESLIB) $(COMPAT) - - ntptime: $(NTOBJS) -*** /tmp/RCSA023535 Wed Jan 26 17:56:47 1994 ---- util/ntptime.c Wed Jan 26 16:33:36 1994 -*************** -*** 38,42 **** - extern int sigvec P((int, struct sigvec *, struct sigvec *)); - void pll_trap P((void)); -- extern int getopt_l P((int, char **, char *)); - - static struct sigvec newsigsys; /* new sigvec status */ ---- 38,41 ---- -*************** -*** 52,57 **** - char *argv[]; - { -! extern int optind; -! extern char *optarg; - int status; - struct ntptimeval ntv; ---- 51,56 ---- - char *argv[]; - { -! extern int ntp_optind; -! extern char *ntp_optarg; - int status; - struct ntptimeval ntv; -*************** -*** 67,71 **** - ntx.mode = 0; - progname = argv[0]; -! while ((c = getopt_l(argc, argv, optargs)) != EOF) switch (c) { - case 'c': - cost++; ---- 66,70 ---- - ntx.mode = 0; - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, optargs)) != EOF) switch (c) { - case 'c': - cost++; -*************** -*** 73,81 **** - case 'e': - ntx.mode |= ADJ_ESTERROR; -! ntx.esterror = atoi(optarg); - break; - case 'f': - ntx.mode |= ADJ_FREQUENCY; -! ntx.frequency = (int) (atof(optarg) * (1 << SHIFT_USEC)); - if (ntx.frequency < (-100 << SHIFT_USEC) - || ntx.frequency > ( 100 << SHIFT_USEC)) errflg++; ---- 72,81 ---- - case 'e': - ntx.mode |= ADJ_ESTERROR; -! ntx.esterror = atoi(ntp_optarg); - break; - case 'f': - ntx.mode |= ADJ_FREQUENCY; -! ntx.frequency = (int) (atof(ntp_optarg) -! * (1 << SHIFT_USEC)); - if (ntx.frequency < (-100 << SHIFT_USEC) - || ntx.frequency > ( 100 << SHIFT_USEC)) errflg++; -*************** -*** 83,91 **** - case 'm': - ntx.mode |= ADJ_MAXERROR; -! ntx.maxerror = atoi(optarg); - break; - case 'o': - ntx.mode |= ADJ_OFFSET; -! ntx.offset = atoi(optarg); - break; - case 'r': ---- 83,91 ---- - case 'm': - ntx.mode |= ADJ_MAXERROR; -! ntx.maxerror = atoi(ntp_optarg); - break; - case 'o': - ntx.mode |= ADJ_OFFSET; -! ntx.offset = atoi(ntp_optarg); - break; - case 'r': -*************** -*** 94,98 **** - case 's': - ntx.mode |= ADJ_STATUS; -! ntx.status = atoi(optarg); - if (ntx.status < 0 || ntx.status > 4) errflg++; - break; ---- 94,98 ---- - case 's': - ntx.mode |= ADJ_STATUS; -! ntx.status = atoi(ntp_optarg); - if (ntx.status < 0 || ntx.status > 4) errflg++; - break; -*************** -*** 99,103 **** - case 't': - ntx.mode |= ADJ_TIMECONST; -! ntx.time_constant = atoi(optarg); - if (ntx.time_constant < 0 || ntx.time_constant > MAXTC) - errflg++; ---- 99,103 ---- - case 't': - ntx.mode |= ADJ_TIMECONST; -! ntx.time_constant = atoi(ntp_optarg); - if (ntx.time_constant < 0 || ntx.time_constant > MAXTC) - errflg++; -*************** -*** 106,110 **** - errflg++; - } -! if (errflg || (optind != argc)) { - (void) fprintf(stderr, - "usage: %s [-%s]\n\n\ ---- 106,110 ---- - errflg++; - } -! if (errflg || (ntp_optind != argc)) { - (void) fprintf(stderr, - "usage: %s [-%s]\n\n\ -*** /tmp/RCSA023535 Wed Jan 26 17:56:47 1994 ---- util/tickadj.c Wed Jan 26 16:33:36 1994 -*************** -*** 62,68 **** - static void writevar P((int, unsigned long, int)); - static void readvar P((int, unsigned long, int *)); -- #ifndef NTP_POSIX_SOURCE -- extern int getopt P((int, char **, char *)); -- #endif - - /* ---- 62,65 ---- -*************** -*** 76,81 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - unsigned long tickadj_offset; - unsigned long tick_offset; ---- 73,78 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - unsigned long tickadj_offset; - unsigned long tick_offset; -*************** -*** 95,99 **** - - progname = argv[0]; -! while ((c = getopt(argc, argv, "a:Adkqpst:")) != EOF) - switch (c) { - case 'd': ---- 92,96 ---- - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "a:Adkqpst:")) != EOF) - switch (c) { - case 'd': -*************** -*** 110,118 **** - break; - case 'a': -! writetickadj = atoi(optarg); - if (writetickadj <= 0) { - (void) fprintf(stderr, - "%s: unlikely value for tickadj: %s\n", -! progname, optarg); - errflg++; - } ---- 107,115 ---- - break; - case 'a': -! writetickadj = atoi(ntp_optarg); - if (writetickadj <= 0) { - (void) fprintf(stderr, - "%s: unlikely value for tickadj: %s\n", -! progname, ntp_optarg); - errflg++; - } -*************** -*** 125,133 **** - break; - case 't': -! writetick = atoi(optarg); - if (writetick <= 0) { - (void) fprintf(stderr, - "%s: unlikely value for tick: %s\n", -! progname, optarg); - errflg++; - } ---- 122,130 ---- - break; - case 't': -! writetick = atoi(ntp_optarg); - if (writetick <= 0) { - (void) fprintf(stderr, - "%s: unlikely value for tick: %s\n", -! progname, ntp_optarg); - errflg++; - } -*************** -*** 137,141 **** - break; - } -! if (errflg || optind != argc) { - (void) fprintf(stderr, - "usage: %s [-Aqsp] [-a newadj] [-t newtick]\n", progname); ---- 134,138 ---- - break; - } -! if (errflg || ntp_optind != argc) { - (void) fprintf(stderr, - "usage: %s [-Aqsp] [-a newadj] [-t newtick]\n", progname); -*** /tmp/RCSA023543 Wed Jan 26 17:56:49 1994 ---- xntpd/ntp_config.c Wed Jan 26 16:33:36 1994 -*************** -*** 341,345 **** - int errflg; - int c; -! extern int optind; - - debug = 0; /* no debugging by default */ ---- 341,345 ---- - int errflg; - int c; -! extern int ntp_optind; - - debug = 0; /* no debugging by default */ -*************** -*** 353,357 **** - * the terminal, but we won't know to do that until we've - * parsed the command line. Do that now, crudely, and do it -! * again later. Our getopt_l() is explicitly reusable, by the - * way. Your own mileage may vary. - */ ---- 353,357 ---- - * the terminal, but we won't know to do that until we've - * parsed the command line. Do that now, crudely, and do it -! * again later. Our ntp_getopt() is explicitly reusable, by the - * way. Your own mileage may vary. - */ -*************** -*** 362,366 **** - * Decode argument list - */ -! while ((c = getopt_l(argc, argv, xntp_options)) != EOF) - switch (c) { - case 'd': ---- 362,366 ---- - * Decode argument list - */ -! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF) - switch (c) { - case 'd': -*************** -*** 374,378 **** - } - -! if (errflg || optind != argc) { - (void) fprintf(stderr, - "usage: %s [ -bd ] [ -c config_file ]\n", progname); ---- 374,378 ---- - } - -! if (errflg || ntp_optind != argc) { - (void) fprintf(stderr, - "usage: %s [ -bd ] [ -c config_file ]\n", progname); -*************** -*** 379,383 **** - exit(2); - } -! optind = 0; /* reset optind to restart getopt_l */ - - if (debug) { ---- 379,383 ---- - exit(2); - } -! ntp_optind = 0; /* reset optind to restart ntp_getopt() */ - - if (debug) { -*************** -*** 427,432 **** - int have_keyfile; - char keyfile[MAXFILENAME]; -! extern int optind; -! extern char *optarg; - extern U_LONG info_auth_keyid; - FILEGEN *filegen; ---- 427,432 ---- - int have_keyfile; - char keyfile[MAXFILENAME]; -! extern int ntp_optind; -! extern char *ntp_optarg; - extern U_LONG info_auth_keyid; - FILEGEN *filegen; -*************** -*** 451,455 **** - * Decode argument list - */ -! while ((c = getopt_l(argc, argv, xntp_options)) != EOF) { - switch (c) { - case 'a': ---- 451,455 ---- - * Decode argument list - */ -! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF) { - switch (c) { - case 'a': -*************** -*** 460,464 **** - break; - case 'c': -! config_file = optarg; - break; - case 'd': ---- 460,464 ---- - break; - case 'c': -! config_file = ntp_optarg; - break; - case 'd': -*************** -*** 474,481 **** - l_fp tmp; - -! if (!atolfp(optarg, &tmp)) { - syslog(LOG_ERR, - "command line encryption delay value %s undecodable", -! optarg); - errflg++; - } else if (tmp.l_ui != 0) { ---- 474,481 ---- - l_fp tmp; - -! if (!atolfp(ntp_optarg, &tmp)) { - syslog(LOG_ERR, - "command line encryption delay value %s undecodable", -! ntp_optarg); - errflg++; - } else if (tmp.l_ui != 0) { -*************** -*** 482,486 **** - syslog(LOG_ERR, - "command line encryption delay value %s is unlikely", -! optarg); - errflg++; - } else { ---- 482,486 ---- - syslog(LOG_ERR, - "command line encryption delay value %s is unlikely", -! ntp_optarg); - errflg++; - } else { -*************** -*** 491,500 **** - - case 'f': -! stats_config(STATS_FREQ_FILE, optarg); - break; - - case 'k': -! getauthkeys(optarg); -! if ((int)strlen(optarg) >= MAXFILENAME) { - syslog(LOG_ERR, - "key file name too LONG (>%d, sigh), no name resolution possible", ---- 491,500 ---- - - case 'f': -! stats_config(STATS_FREQ_FILE, ntp_optarg); - break; - - case 'k': -! getauthkeys(ntp_optarg); -! if ((int)strlen(ntp_optarg) >= MAXFILENAME) { - syslog(LOG_ERR, - "key file name too LONG (>%d, sigh), no name resolution possible", -*************** -*** 502,506 **** - } else { - have_keyfile = 1; -! (void)strcpy(keyfile, optarg); - } - break; ---- 502,506 ---- - } else { - have_keyfile = 1; -! (void)strcpy(keyfile, ntp_optarg); - } - break; -*************** -*** 507,511 **** - - case 'p': -! stats_config(STATS_PID_FILE, optarg); - break; - ---- 507,511 ---- - - case 'p': -! stats_config(STATS_PID_FILE, ntp_optarg); - break; - -*************** -*** 514,525 **** - l_fp tmp; - -! if (!atolfp(optarg, &tmp)) { - syslog(LOG_ERR, - "command line broadcast delay value %s undecodable", -! optarg); - } else if (tmp.l_ui != 0) { - syslog(LOG_ERR, - "command line broadcast delay value %s is unlikely", -! optarg); - } else { - proto_config(PROTO_BROADDELAY, tmp.l_f); ---- 514,525 ---- - l_fp tmp; - -! if (!atolfp(ntp_optarg, &tmp)) { - syslog(LOG_ERR, - "command line broadcast delay value %s undecodable", -! ntp_optarg); - } else if (tmp.l_ui != 0) { - syslog(LOG_ERR, - "command line broadcast delay value %s is unlikely", -! ntp_optarg); - } else { - proto_config(PROTO_BROADDELAY, tmp.l_f); -*************** -*** 529,533 **** - - case 's': -! stats_config(STATS_STATSDIR, optarg); - break; - ---- 529,533 ---- - - case 's': -! stats_config(STATS_STATSDIR, ntp_optarg); - break; - -*************** -*** 536,544 **** - int tkey; - -! tkey = atoi(optarg); - if (tkey <= 0 || tkey > NTP_MAXKEY) { - syslog(LOG_ERR, - "command line trusted key %s is unlikely", -! optarg); - } else { - authtrust(tkey, (LONG)1); ---- 536,544 ---- - int tkey; - -! tkey = atoi(ntp_optarg); - if (tkey <= 0 || tkey > NTP_MAXKEY) { - syslog(LOG_ERR, - "command line trusted key %s is unlikely", -! ntp_optarg); - } else { - authtrust(tkey, (LONG)1); -*************** -*** 554,558 **** - } - -! if (errflg || optind != argc) { - (void) fprintf(stderr, - "usage: %s [ -bd ] [ -c config_file ]\n", progname); ---- 554,558 ---- - } - -! if (errflg || ntp_optind != argc) { - (void) fprintf(stderr, - "usage: %s [ -bd ] [ -c config_file ]\n", progname); -*************** -*** 1130,1134 **** - } - -! bzero((char *)&clock, sizeof clock); - errflg = 0; - for (i = 2; i < ntokens-1; i++) { ---- 1130,1134 ---- - } - -! memset((char *)&clock, 0, sizeof clock); - errflg = 0; - for (i = 2; i < ntokens-1; i++) { -*************** -*** 1582,1586 **** - * make up socket address. Clear it out for neatness. - */ -! bzero((char *)addr, sizeof(struct sockaddr_in)); - addr->sin_family = AF_INET; - addr->sin_port = htons(NTP_PORT); ---- 1582,1586 ---- - * make up socket address. Clear it out for neatness. - */ -! memset((char *)addr, 0, sizeof(struct sockaddr_in)); - addr->sin_family = AF_INET; - addr->sin_port = htons(NTP_PORT); -*** /tmp/RCSA023543 Wed Jan 26 17:56:49 1994 ---- xntpd/ntp_control.c Wed Jan 26 16:33:36 1994 -*************** -*** 873,877 **** - } - -! bcopy(dp, (char *)datapt, dlen); - datapt += dlen; - datalinelen += dlen; ---- 873,877 ---- - } - -! memmove((char *)datapt, dp, dlen); - datapt += dlen; - datalinelen += dlen; -*************** -*** 901,905 **** - if (len > (sizeof(buffer) - (cp - buffer) - 1)) - len = sizeof(buffer) - (cp - buffer) - 1; -! bcopy(data, cp, len); - cp += len; - *cp++ = '"'; ---- 901,905 ---- - if (len > (sizeof(buffer) - (cp - buffer) - 1)) - len = sizeof(buffer) - (cp - buffer) - 1; -! memmove(cp, data, len); - cp += len; - *cp++ = '"'; -*************** -*** 1697,1701 **** - if (res_authokay) - ctl_sys_num_events = 0; -! bzero((char *)wants, CS_MAXCODE+1); - gotvar = 0; - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { ---- 1697,1701 ---- - if (res_authokay) - ctl_sys_num_events = 0; -! memset((char *)wants, 0, CS_MAXCODE+1); - gotvar = 0; - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { -*************** -*** 1733,1737 **** - if (res_authokay) - peer->num_events = 0; -! bzero((char*)wants, CP_MAXCODE+1); - gotvar = 0; - while ((v = ctl_getitem(peer_var, &valuep)) != 0) { ---- 1733,1737 ---- - if (res_authokay) - peer->num_events = 0; -! memset((char*)wants, 0, CP_MAXCODE+1); - gotvar = 0; - while ((v = ctl_getitem(peer_var, &valuep)) != 0) { -*************** -*** 1906,1910 **** - rpkt.status = htons(ctlclkstatus(&clock)); - gotvar = 0; -! bzero((char*)wants, CC_MAXCODE+1); - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { - if (v->flags & EOV) { ---- 1906,1910 ---- - rpkt.status = htons(ctlclkstatus(&clock)); - gotvar = 0; -! memset((char*)wants, 0, CC_MAXCODE+1); - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { - if (v->flags & EOV) { -*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994 ---- xntpd/ntp_intres.c Wed Jan 26 16:33:37 1994 -*************** -*** 295,299 **** - len = strlen(name) + 1; - cp = emalloc((unsigned)len); -! bcopy(name, cp, len); - - ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry)); ---- 295,299 ---- - len = strlen(name) + 1; - cp = emalloc((unsigned)len); -! memmove(cp, name, len); - - ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry)); -*************** -*** 348,354 **** - - if (h_errno == TRY_AGAIN) -! return 1; - #endif -! return 0; - } - ---- 348,354 ---- - - if (h_errno == TRY_AGAIN) -! return (1); - #endif -! return (0); - } - -*************** -*** 358,364 **** - * only return one. - */ -! (void) bcopy(hp->h_addr, (char *)&(entry->ce_peeraddr), -! sizeof(struct in_addr)); -! return 1; - } - ---- 358,365 ---- - * only return one. - */ -! memmove((char *)&(entry->ce_peeraddr), -! (char *)hp->h_addr, -! sizeof(struct in_addr)); -! return (1); - } - -*************** -*** 381,385 **** - } - -! bzero((char *)&saddr, sizeof(saddr)); - saddr.sin_family = AF_INET; - saddr.sin_port = htons(NTP_PORT); /* trash */ ---- 382,386 ---- - } - -! memset((char *)&saddr, 0, sizeof(saddr)); - saddr.sin_family = AF_INET; - saddr.sin_port = htons(NTP_PORT); /* trash */ -*************** -*** 449,453 **** - * Make up a request packet with the configuration info - */ -! bzero((char *)&reqpkt, sizeof(reqpkt)); - - reqpkt.rm_vn_mode = RM_VN_MODE(0, 0); ---- 450,454 ---- - * Make up a request packet with the configuration info - */ -! memset((char *)&reqpkt, 0, sizeof(reqpkt)); - - reqpkt.rm_vn_mode = RM_VN_MODE(0, 0); -*************** -*** 457,461 **** - reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */ - reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer)); -! bcopy((char *)conf, reqpkt.data, sizeof(struct conf_peer)); - reqpkt.keyid = htonl(req_keyid); - ---- 458,462 ---- - reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */ - reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer)); -! memmove(reqpkt.data, (char *)conf, sizeof(struct conf_peer)); - reqpkt.keyid = htonl(req_keyid); - -*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994 ---- xntpd/ntp_monitor.c Wed Jan 26 16:33:37 1994 -*************** -*** 103,107 **** - mon_hash = 0; - mon_hash_count = 0; -! bzero((char *)&mon_mru_list, sizeof mon_mru_list); - } - ---- 103,107 ---- - mon_hash = 0; - mon_hash_count = 0; -! memset((char *)&mon_mru_list, 0, sizeof mon_mru_list); - } - -*************** -*** 122,126 **** - mon_hash = (struct mon_data *) - emalloc(MON_HASH_SIZE * sizeof(struct mon_data)); -! bzero((char *)mon_hash, MON_HASH_SIZE*sizeof(struct mon_data)); - mon_hash_count = (int *)emalloc(MON_HASH_SIZE * sizeof(int)); - mon_free_mem = 0; ---- 122,127 ---- - mon_hash = (struct mon_data *) - emalloc(MON_HASH_SIZE * sizeof(struct mon_data)); -! memset((char *)mon_hash, 0, -! MON_HASH_SIZE*sizeof(struct mon_data)); - mon_hash_count = (int *)emalloc(MON_HASH_SIZE * sizeof(int)); - mon_free_mem = 0; -*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994 ---- xntpd/ntp_peer.c Wed Jan 26 16:33:37 1994 -*************** -*** 440,444 **** - * Zero the whole thing for now. We might be pickier later. - */ -! bzero((char *)peer, sizeof(struct peer)); - - peer->srcadr = *srcadr; ---- 440,444 ---- - * Zero the whole thing for now. We might be pickier later. - */ -! memset((char *)peer, 0, sizeof(struct peer)); - - peer->srcadr = *srcadr; -*** /tmp/RCSA023543 Wed Jan 26 17:56:51 1994 ---- xntpd/ntp_proto.c Wed Jan 26 16:33:37 1994 -*************** -*** 1079,1083 **** - else { - if (pps_control) -! bcopy(PPSREFID, (char *)&sys_refid, 4); - else - sys_refid = peer->srcadr.sin_addr.s_addr; ---- 1079,1083 ---- - else { - if (pps_control) -! memmove((char *)&sys_refid, PPSREFID, 4); - else - sys_refid = peer->srcadr.sin_addr.s_addr; -*************** -*** 1128,1132 **** - sys_refid = peer->refid; - else -! bcopy(PPSREFID, (char *)&sys_refid, 4); - } - } ---- 1128,1132 ---- - sys_refid = peer->refid; - else -! memmove((char *)&sys_refid, PPSREFID, 4); - } - } -*************** -*** 1251,1255 **** - printf("clear(%s)\n", ntoa(&peer->srcadr)); - #endif -! bzero(CLEAR_TO_ZERO(peer), LEN_CLEAR_TO_ZERO); - peer->hpoll = peer->minpoll; - peer->dispersion = NTP_MAXDISPERSE; ---- 1251,1255 ---- - printf("clear(%s)\n", ntoa(&peer->srcadr)); - #endif -! memset(CLEAR_TO_ZERO(peer), 0, LEN_CLEAR_TO_ZERO); - peer->hpoll = peer->minpoll; - peer->dispersion = NTP_MAXDISPERSE; -*** /tmp/RCSA023543 Wed Jan 26 17:56:51 1994 ---- xntpd/ntp_request.c Wed Jan 26 16:33:38 1994 -*************** -*** 313,317 **** - * Copy data out of exbuf into the packet. - */ -! bcopy(exbuf, &rpkt.data[0], itemsize); - seqno++; - databytes = 0; ---- 313,317 ---- - * Copy data out of exbuf into the packet. - */ -! memmove(&rpkt.data[0], exbuf, itemsize); - seqno++; - databytes = 0; -*************** -*** 683,687 **** - extern struct peer *sys_peer; - -! bzero((char *)&addr, sizeof addr); - addr.sin_family = AF_INET; - items = INFO_NITEMS(inpkt->err_nitems); ---- 683,687 ---- - extern struct peer *sys_peer; - -! memset((char *)&addr, 0, sizeof addr); - addr.sin_family = AF_INET; - items = INFO_NITEMS(inpkt->err_nitems); -*************** -*** 774,778 **** - extern struct peer *sys_peer; - -! bzero((char *)&addr, sizeof addr); - addr.sin_family = AF_INET; - items = INFO_NITEMS(inpkt->err_nitems); ---- 774,778 ---- - extern struct peer *sys_peer; - -! memset((char *)&addr, 0, sizeof addr); - addr.sin_family = AF_INET; - items = INFO_NITEMS(inpkt->err_nitems); -*************** -*** 1142,1146 **** - items = INFO_NITEMS(inpkt->err_nitems); - cp = (struct conf_peer *)inpkt->data; -! bzero((char *)&peeraddr, sizeof(struct sockaddr_in)); - peeraddr.sin_family = AF_INET; - peeraddr.sin_port = htons(NTP_PORT); ---- 1142,1146 ---- - items = INFO_NITEMS(inpkt->err_nitems); - cp = (struct conf_peer *)inpkt->data; -! memset((char *)&peeraddr, 0, sizeof(struct sockaddr_in)); - peeraddr.sin_family = AF_INET; - peeraddr.sin_port = htons(NTP_PORT); -*************** -*** 1452,1457 **** - items = INFO_NITEMS(inpkt->err_nitems); - cr = (struct conf_restrict *)inpkt->data; -! bzero((char *)&matchaddr, sizeof(struct sockaddr_in)); -! bzero((char *)&matchmask, sizeof(struct sockaddr_in)); - matchaddr.sin_family = AF_INET; - matchmask.sin_family = AF_INET; ---- 1452,1457 ---- - items = INFO_NITEMS(inpkt->err_nitems); - cr = (struct conf_restrict *)inpkt->data; -! memset((char *)&matchaddr, 0, sizeof(struct sockaddr_in)); -! memset((char *)&matchmask, 0, sizeof(struct sockaddr_in)); - matchaddr.sin_family = AF_INET; - matchmask.sin_family = AF_INET; -*************** -*** 1870,1874 **** - * Prepare sockaddr_in structure - */ -! bzero((char *)&laddr, sizeof laddr); - laddr.sin_family = AF_INET; - laddr.sin_port = ntohs(NTP_PORT); ---- 1870,1874 ---- - * Prepare sockaddr_in structure - */ -! memset((char *)&laddr, 0, sizeof laddr); - laddr.sin_family = AF_INET; - laddr.sin_port = ntohs(NTP_PORT); -*************** -*** 2096,2100 **** - struct sockaddr_in addr; - -! bzero((char *)&addr, sizeof addr); - addr.sin_family = AF_INET; - addr.sin_port = htons(NTP_PORT); ---- 2096,2100 ---- - struct sockaddr_in addr; - -! memset((char *)&addr, 0, sizeof addr); - addr.sin_family = AF_INET; - addr.sin_port = htons(NTP_PORT); -*************** -*** 2150,2155 **** - struct sockaddr_in addr; - -! bzero((char *)&addr, sizeof addr); -! bzero((char *)&clock, sizeof clock); - addr.sin_family = AF_INET; - addr.sin_port = htons(NTP_PORT); ---- 2150,2155 ---- - struct sockaddr_in addr; - -! memset((char *)&addr, 0, sizeof addr); -! memset((char *)&clock, 0, sizeof clock); - addr.sin_family = AF_INET; - addr.sin_port = htons(NTP_PORT); -*************** -*** 2287,2291 **** - struct sockaddr_in addr; - -! bzero((char *)&addr, sizeof addr); - addr.sin_family = AF_INET; - addr.sin_port = htons(NTP_PORT); ---- 2287,2291 ---- - struct sockaddr_in addr; - -! memset((char *)&addr, 0, sizeof addr); - addr.sin_family = AF_INET; - addr.sin_port = htons(NTP_PORT); -*************** -*** 2304,2308 **** - } - -! bzero((char *)&bug, sizeof bug); - refclock_buginfo(&addr, &bug); - if (bug.nvalues == 0 && bug.ntimes == 0) { ---- 2304,2308 ---- - } - -! memset((char *)&bug, 0, sizeof bug); - refclock_buginfo(&addr, &bug); - if (bug.nvalues == 0 && bug.ntimes == 0) { -*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994 ---- xntpd/ntp_restrict.c Wed Jan 26 16:33:38 1994 -*************** -*** 82,86 **** - */ - resfree = 0; -! bzero((char *)resinit, sizeof resinit); - - for (i = 1; i < INITRESLIST; i++) { ---- 82,86 ---- - */ - resfree = 0; -! memset((char *)resinit, 0, sizeof resinit); - - for (i = 1; i < INITRESLIST; i++) { -*************** -*** 235,239 **** - rl = (struct restrictlist *) emalloc( - INCRESLIST*sizeof(struct restrictlist)); -! bzero((char *)rl, - INCRESLIST*sizeof(struct restrictlist)); - ---- 235,239 ---- - rl = (struct restrictlist *) emalloc( - INCRESLIST*sizeof(struct restrictlist)); -! memset((char *)rl, 0, - INCRESLIST*sizeof(struct restrictlist)); - -*************** -*** 281,285 **** - rlprev->next = rl->next; - restrictcount--; -! bzero((char *)rl, sizeof(struct restrictlist)); - - rl->next = resfree; ---- 281,285 ---- - rlprev->next = rl->next; - restrictcount--; -! memset((char *)rl, 0, sizeof(struct restrictlist)); - - rl->next = resfree; -*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994 ---- xntpd/ntp_util.c Wed Jan 26 16:33:39 1994 -*************** -*** 224,230 **** - stats_drift_file = emalloc((u_int)(len + 1)); - stats_temp_file = emalloc((u_int)(len + sizeof(".TEMP"))); -! bcopy(value, stats_drift_file, len+1); -! bcopy(value, stats_temp_file, len); -! bcopy(".TEMP", stats_temp_file + len, sizeof(".TEMP")); - L_CLR(&old_drift); - ---- 224,230 ---- - stats_drift_file = emalloc((u_int)(len + 1)); - stats_temp_file = emalloc((u_int)(len + sizeof(".TEMP"))); -! memmove(stats_drift_file, value, len+1); -! memmove(stats_temp_file, value, len); -! memmove(stats_temp_file + len, ".TEMP", sizeof(".TEMP")); - L_CLR(&old_drift); - -*************** -*** 450,454 **** - key_file_name = emalloc((u_int)(len + 1)); - -! bcopy(keyfile, key_file_name, len+1); - - authreadkeys(key_file_name); ---- 450,454 ---- - key_file_name = emalloc((u_int)(len + 1)); - -! memmove(key_file_name, keyfile, len+1); - - authreadkeys(key_file_name); -*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994 ---- xntpd/refclock_as2201.c Wed Jan 26 16:33:39 1994 -*************** -*** 251,256 **** - * Just zero the data arrays - */ -! bzero((char *)gpsunits, sizeof gpsunits); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 251,256 ---- - * Just zero the data arrays - */ -! memset((char *)gpsunits, 0, sizeof gpsunits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 442,446 **** - } - } -! bzero((char *)gps, sizeof(struct gpsunit)); - gpsunits[unit] = gps; - ---- 442,446 ---- - } - } -! memset((char *)gps, 0, sizeof(struct gpsunit)); - gpsunits[unit] = gps; - -*************** -*** 480,484 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(GPSREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(GPSHSREFID); ---- 480,484 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, GPSREFID, 4); - else - peer->refid = htonl(GPSHSREFID); -*************** -*** 908,913 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(GPSREFID, (char *)&peer->refid, -! 4); - else - peer->refid = htonl(GPSHSREFID); ---- 908,913 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, -! GPSREFID, 4); - else - peer->refid = htonl(GPSHSREFID); -*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994 ---- xntpd/refclock_chu.c Wed Jan 26 16:33:39 1994 -*************** -*** 294,299 **** - * Just zero the data arrays - */ -! bzero((char *)chuunits, sizeof chuunits); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 294,299 ---- - * Just zero the data arrays - */ -! memset((char *)chuunits, 0, sizeof chuunits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 462,466 **** - } - } -! bzero((char *)chu, sizeof(struct chuunit)); - chuunits[unit] = chu; - ---- 462,466 ---- - } - } -! memset((char *)chu, 0, sizeof(struct chuunit)); - chuunits[unit] = chu; - -*************** -*** 499,507 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(CHUREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(CHUHSREFID); - unitinuse[unit] = 1; -! return 1; - - /* ---- 499,507 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, CHUREFID, 4); - else - peer->refid = htonl(CHUHSREFID); - unitinuse[unit] = 1; -! return (1); - - /* -*************** -*** 1091,1095 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(CHUREFID, (char *)&peer->refid,4); - else - peer->refid = htonl(CHUHSREFID); ---- 1091,1096 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, -! CHUREFID, 4); - else - peer->refid = htonl(CHUHSREFID); -*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994 ---- xntpd/refclock_goes.c Wed Jan 26 16:33:39 1994 -*************** -*** 211,216 **** - * Just zero the data arrays - */ -! bzero((char *)goesunits, sizeof goesunits); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 211,216 ---- - * Just zero the data arrays - */ -! memset((char *)goesunits, 0, sizeof goesunits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 401,405 **** - } - } -! bzero((char *)goes, sizeof(struct goesunit)); - goesunits[unit] = goes; - ---- 401,405 ---- - } - } -! memset((char *)goes, 0, sizeof(struct goesunit)); - goesunits[unit] = goes; - -*************** -*** 429,433 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(GOESREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(GOESHSREFID); ---- 429,433 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, GOESREFID, 4); - else - peer->refid = htonl(GOESHSREFID); -*************** -*** 924,929 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(GOESREFID, (char *)&peer->refid, -! 4); - else - peer->refid = htonl(GOESHSREFID); ---- 924,929 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, -! GOESREFID, 4); - else - peer->refid = htonl(GOESHSREFID); -*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994 ---- xntpd/refclock_gpstm.c Wed Jan 26 16:52:22 1994 -*************** -*** 18,22 **** - #ifdef SYS_BSDI - #undef HAVE_BSD_TTYS -- #define HAVE_POSIX_TTYS - #include <sys/ioctl.h> - #endif ---- 18,21 ---- -*************** -*** 30,34 **** - #endif /* HAVE_SYSV_TTYS */ - -! #if defined(HAVE_POSIX_TTYS) - #include <termios.h> - #endif ---- 29,33 ---- - #endif /* HAVE_SYSV_TTYS */ - -! #if defined(HAVE_TERMIOS) - #include <termios.h> - #endif -*************** -*** 203,208 **** - * Just zero the data arrays - */ -! bzero((char *)gpstm_units, sizeof gpstm_units); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 202,207 ---- - * Just zero the data arrays - */ -! memset((char *)gpstm_units, 0, sizeof gpstm_units); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 278,282 **** - } - #endif /* HAVE_SYSV_TTYS */ -! #if defined(HAVE_POSIX_TTYS) - /* - * POSIX serial line parameters (termios interface) ---- 277,281 ---- - } - #endif /* HAVE_SYSV_TTYS */ -! #if defined(HAVE_TERMIOS) - /* - * POSIX serial line parameters (termios interface) -*************** -*** 331,335 **** - #endif /* STREAM */ - } -! #endif /* HAVE_POSIX_TTYS */ - #if defined(HAVE_BSD_TTYS) - /* ---- 330,334 ---- - #endif /* STREAM */ - } -! #endif /* HAVE_TERMIOS */ - #if defined(HAVE_BSD_TTYS) - /* -*************** -*** 393,397 **** - } - } -! bzero((char *)gpstm, sizeof(struct gpstm_unit)); - gpstm_units[unit] = gpstm; - ---- 392,396 ---- - } - } -! memset((char *)gpstm, 0, sizeof(struct gpstm_unit)); - gpstm_units[unit] = gpstm; - -*************** -*** 420,424 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(REFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(HSREFID); ---- 419,423 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, REFID, 4); - else - peer->refid = htonl(HSREFID); -*************** -*** 928,932 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(REFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(HSREFID); ---- 927,932 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, -! REFID, 4); - else - peer->refid = htonl(HSREFID); -*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994 ---- xntpd/refclock_irig.c Wed Jan 26 16:33:40 1994 -*************** -*** 170,175 **** - * Just zero the data arrays - */ -! bzero((char *) irigunits, sizeof irigunits); -! bzero((char *) unitinuse, sizeof unitinuse); - - /* ---- 170,175 ---- - * Just zero the data arrays - */ -! memset((char *) irigunits, 0, sizeof irigunits); -! memset((char *) unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 251,255 **** - } - } -! bzero((char *) irig, sizeof(struct irigunit)); - - irigunits[unit] = irig; ---- 251,255 ---- - } - } -! memset((char *) irig, 0, sizeof(struct irigunit)); - - irigunits[unit] = irig; -*************** -*** 277,281 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(IRIGREFID, (char *) &peer->refid, 4); - else - peer->refid = htonl(IRIGHSREFID); ---- 277,281 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *) &peer->refid, IRIGREFID, 4); - else - peer->refid = htonl(IRIGHSREFID); -*************** -*** 486,491 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(IRIGREFID, (char *) &peer->refid, -! 4); - else - peer->refid = htonl(IRIGHSREFID); ---- 486,491 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *) &peer->refid, -! IRIGREFID, 4); - else - peer->refid = htonl(IRIGHSREFID); -*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994 ---- xntpd/refclock_leitch.c Wed Jan 26 16:33:40 1994 -*************** -*** 145,150 **** - leitch_init() - { -! bzero((char*)leitchunits,sizeof(leitchunits)); -! bzero((char*)unitinuse,sizeof(unitinuse)); - } - ---- 145,150 ---- - leitch_init() - { -! memset((char*)leitchunits, 0, sizeof(leitchunits)); -! memset((char*)unitinuse, 0, sizeof(unitinuse)); - } - -*************** -*** 271,275 **** - - leitch = &leitchunits[unit]; -! bzero((char*)leitch,sizeof(*leitch)); - - #if defined(HAVE_SYSV_TTYS) ---- 271,275 ---- - - leitch = &leitchunits[unit]; -! memset((char*)leitch, 0, sizeof(*leitch)); - - #if defined(HAVE_SYSV_TTYS) -*** /tmp/RCSA023543 Wed Jan 26 17:56:54 1994 ---- xntpd/refclock_local.c Wed Jan 26 16:33:40 1994 -*************** -*** 101,106 **** - * Just zero the data arrays - */ -! bzero((char *)lclunits, sizeof lclunits); -! bzero((char *)unitinuse, sizeof unitinuse); - } - ---- 101,106 ---- - * Just zero the data arrays - */ -! memset((char *)lclunits, 0, sizeof lclunits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - } - -*************** -*** 149,153 **** - } - } -! bzero((char *)lcl, sizeof(struct lclunit)); - lclunits[unit] = lcl; - ---- 149,153 ---- - } - } -! memset((char *)lcl, 0, sizeof(struct lclunit)); - lclunits[unit] = lcl; - -*************** -*** 167,171 **** - peer->stratum = (u_char)unit; - if (unit <= 1) -! bcopy(LCLREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(LCLHSREFID); ---- 167,171 ---- - peer->stratum = (u_char)unit; - if (unit <= 1) -! memmove((char *)&peer->refid, LCLREFID, 4); - else - peer->refid = htonl(LCLHSREFID); -*** /tmp/RCSA023576 Wed Jan 26 17:56:54 1994 ---- xntpd/refclock_msfees.c Wed Jan 26 16:33:41 1994 -*************** -*** 380,385 **** - register int i; - /* Just zero the data arrays */ -! bzero((char *)eesunits, sizeof eesunits); -! bzero((char *)unitinuse, sizeof unitinuse); - - acceptable_slop.l_ui = 0; ---- 380,385 ---- - register int i; - /* Just zero the data arrays */ -! memset((char *)eesunits, 0, sizeof eesunits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - acceptable_slop.l_ui = 0; -*************** -*** 507,511 **** - else ees = (struct eesunit *) emalloc(sizeof(struct eesunit)); - } -! bzero((char *)ees, sizeof(struct eesunit)); - eesunits[unit] = ees; - ---- 507,511 ---- - else ees = (struct eesunit *) emalloc(sizeof(struct eesunit)); - } -! memset((char *)ees, 0, sizeof(struct eesunit)); - eesunits[unit] = ees; - -*************** -*** 548,553 **** - if (!io_addclock(&ees->io)) { - /* Oh shit. Just close and return. */ -! syslog(LOG_ERR, "ees clock: io_addclock(%s): %m", -! eesdev); - goto screwed; - } ---- 548,552 ---- - if (!io_addclock(&ees->io)) { - /* Oh shit. Just close and return. */ -! syslog(LOG_ERR, "ees clock: io_addclock(%s): %m", eesdev); - goto screwed; - } -*************** -*** 560,575 **** - peer->rootdelay = 0; /* ++++ */ - peer->rootdispersion = 0; /* ++++ */ -! if (stratumtouse[unit] <= 1) -! { bcopy(EESREFID, (char *)&peer->refid, 4); -! if (unit>0 && unit<10) ((char *)&peer->refid)[3] = '0' + unit; - } -- else peer->refid = htonl(EESHSREFID); - unitinuse[unit] = 1; - syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit); -! return 1; - - screwed: -! if (fd232 != -1) (void) close(fd232); -! return 0; - } - ---- 559,577 ---- - peer->rootdelay = 0; /* ++++ */ - peer->rootdispersion = 0; /* ++++ */ -! if (stratumtouse[unit] <= 1) { -! memmove((char *)&peer->refid, EESREFID, 4); -! if (unit > 0 && unit < 10) -! ((char *)&peer->refid)[3] = '0' + unit; -! } else { -! peer->refid = htonl(EESHSREFID); - } - unitinuse[unit] = 1; - syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit); -! return (1); - - screwed: -! if (fd232 != -1) -! (void) close(fd232); -! return (0); - } - -*************** -*** 860,864 **** - sincelast = this_uisec - ees->last_step; - -! bzero(&ppsclockev, sizeof ppsclockev); - - rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev); ---- 862,866 ---- - sincelast = this_uisec - ees->last_step; - -! memset(&ppsclockev, 0, sizeof ppsclockev); - - rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev); -*************** -*** 1444,1449 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) { -! bcopy(EESREFID, (char *)&peer->refid, -! 4); - if (unit>0 && unit<10) - ((char *)&peer->refid)[3] = ---- 1446,1451 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) { -! memmove((char *)&peer->refid, -! EESREFID, 4); - if (unit>0 && unit<10) - ((char *)&peer->refid)[3] = -*** /tmp/RCSA023576 Wed Jan 26 17:56:55 1994 ---- xntpd/refclock_mx4200.c Wed Jan 26 16:33:41 1994 -*************** -*** 263,268 **** - * Just zero the data arrays - */ -! bzero((char *)mx4200units, sizeof mx4200units); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 263,268 ---- - * Just zero the data arrays - */ -! memset((char *)mx4200units, 0, sizeof mx4200units); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 487,491 **** - } - -! bzero((char *)mx4200, sizeof(struct mx4200unit)); - mx4200units[unit] = mx4200; - ---- 487,491 ---- - } - -! memset((char *)mx4200, 0, sizeof(struct mx4200unit)); - mx4200units[unit] = mx4200; - -*************** -*** 513,517 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(MX4200REFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(MX4200HSREFID); ---- 513,517 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, MX4200REFID, 4); - else - peer->refid = htonl(MX4200HSREFID); -*************** -*** 702,706 **** - return; - mx4200->lencode = n; -! bcopy(dpt, mx4200->lastcode, n); - - /* ---- 702,706 ---- - return; - mx4200->lencode = n; -! memmove(mx4200->lastcode, dpt, n); - - /* -*************** -*** 1052,1057 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(MX4200REFID, (char *)&peer->refid, -! 4); - else - peer->refid = htonl(MX4200HSREFID); ---- 1052,1057 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, -! MX4200REFID, 4); - else - peer->refid = htonl(MX4200HSREFID); -*************** -*** 1116,1120 **** - mx4200 = mx4200units[unit]; - -! bzero((char *)bug, sizeof(*bug)); - bug->nvalues = 10; - bug->ntimes = 2; ---- 1116,1120 ---- - mx4200 = mx4200units[unit]; - -! memset((char *)bug, 0, sizeof(*bug)); - bug->nvalues = 10; - bug->ntimes = 2; -*************** -*** 1212,1216 **** - - cp = buf; -! bzero((char *)jt, sizeof(*jt)); - - if ((cp = strchr(cp, ',')) == NULL) ---- 1212,1216 ---- - - cp = buf; -! memset((char *)jt, 0, sizeof(*jt)); - - if ((cp = strchr(cp, ',')) == NULL) -*** /tmp/RCSA023576 Wed Jan 26 17:56:55 1994 ---- xntpd/refclock_omega.c Wed Jan 26 16:33:42 1994 -*************** -*** 227,232 **** - * Just zero the data arrays - */ -! bzero((char *)omegaunits, sizeof omegaunits); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 227,232 ---- - * Just zero the data arrays - */ -! memset((char *)omegaunits, 0, sizeof omegaunits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 417,421 **** - } - } -! bzero((char *)omega, sizeof(struct omegaunit)); - omegaunits[unit] = omega; - ---- 417,421 ---- - } - } -! memset((char *)omega, 0, sizeof(struct omegaunit)); - omegaunits[unit] = omega; - -*************** -*** 445,449 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(OMEGAREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(OMEGAHSREFID); ---- 445,449 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, OMEGAREFID, 4); - else - peer->refid = htonl(OMEGAHSREFID); -*************** -*** 928,933 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(OMEGAREFID, (char *)&peer->refid, -! 4); - else - peer->refid = htonl(OMEGAHSREFID); ---- 928,933 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, -! OMEGAREFID, 4); - else - peer->refid = htonl(OMEGAHSREFID); -*** /tmp/RCSA023576 Wed Jan 26 17:56:56 1994 ---- xntpd/refclock_parse.c Wed Jan 26 16:33:42 1994 -*************** -*** 1068,1072 **** - return; - } -! bcopy((caddr_t)&rbufp->recv_space, (caddr_t)&parsetime, sizeof(parsetime_t)); - - /* ---- 1068,1074 ---- - return; - } -! memmove((caddr_t)&parsetime, -! (caddr_t)&rbufp->recv_space, -! sizeof(parsetime_t)); - - /* -*************** -*** 2009,2013 **** - parse_init() - { -! bzero((caddr_t)parseunits, sizeof parseunits); - } - ---- 2011,2015 ---- - parse_init() - { -! memset((caddr_t)parseunits, 0, sizeof parseunits); - } - -*************** -*** 2169,2173 **** - } - -! bzero((char *)parse, sizeof(struct parseunit)); - parseunits[unit] = parse; - ---- 2171,2175 ---- - } - -! memset((char *)parse, 0, sizeof(struct parseunit)); - parseunits[unit] = parse; - -*************** -*** 2204,2208 **** - peer->stratum = STRATUM_REFCLOCK; - if (peer->stratum <= 1) -! bcopy(parse->parse_type->cl_id, (char *)&peer->refid, 4); - else - peer->refid = htonl(PARSEHSREFID); ---- 2206,2210 ---- - peer->stratum = STRATUM_REFCLOCK; - if (peer->stratum <= 1) -! memmove((char *)&peer->refid, parse->parse_type->cl_id, 4); - else - peer->refid = htonl(PARSEHSREFID); -*************** -*** 2233,2237 **** - { - #ifndef _PC_VDISABLE -! bzero((char *)tm.c_cc, sizeof(tm.c_cc)); - #else - int disablec; ---- 2235,2239 ---- - { - #ifndef _PC_VDISABLE -! memset((char *)tm.c_cc, 0, sizeof(tm.c_cc)); - #else - int disablec; -*************** -*** 2587,2591 **** - parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf); - if (parse->peer->stratum <= 1) -! bcopy(parse->parse_type->cl_id, (char *)&parse->peer->refid, 4); - else - parse->peer->refid = htonl(PARSEHSREFID); ---- 2589,2595 ---- - parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf); - if (parse->peer->stratum <= 1) -! memmove((char *)&parse->peer->refid, -! parse->parse_type->cl_id, -! 4); - else - parse->peer->refid = htonl(PARSEHSREFID); -*************** -*** 3280,3284 **** - { - parse->localdata = (void *)malloc(sizeof(poll_timer_t)); -! bzero((char *)parse->localdata, sizeof(poll_timer_t)); - - pt = (poll_timer_t *)parse->localdata; ---- 3284,3288 ---- - { - parse->localdata = (void *)malloc(sizeof(poll_timer_t)); -! memset((char *)parse->localdata, 0, sizeof(poll_timer_t)); - - pt = (poll_timer_t *)parse->localdata; -*** /tmp/RCSA023576 Wed Jan 26 17:56:56 1994 ---- xntpd/refclock_pst.c Wed Jan 26 16:33:42 1994 -*************** -*** 438,443 **** - * Just zero the data arrays - */ -! bzero((char *)pstunits, sizeof pstunits); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 438,443 ---- - * Just zero the data arrays - */ -! memset((char *)pstunits, 0, sizeof pstunits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 630,634 **** - } - } -! bzero((char *)pst, sizeof(struct pstunit)); - pstunits[unit] = pst; - ---- 630,634 ---- - } - } -! memset((char *)pst, 0, sizeof(struct pstunit)); - pstunits[unit] = pst; - -*************** -*** 663,667 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(WWVREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(PSTHSREFID); ---- 663,667 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, WWVREFID, 4); - else - peer->refid = htonl(PSTHSREFID); -*************** -*** 1461,1467 **** - if (stratumtouse[pst->unit] <= 1) { - if (pst->station >= 0) -! bcopy(WWVREFID, (char *)&pst->peer->refid, 4); - else -! bcopy(WWVHREFID, (char *)&pst->peer->refid, 4); - } - ---- 1461,1467 ---- - if (stratumtouse[pst->unit] <= 1) { - if (pst->station >= 0) -! memmove((char *)&pst->peer->refid, WWVREFID, 4); - else -! memmove((char *)&pst->peer->refid, WWVHREFID, 4); - } - -*** /tmp/RCSA023576 Wed Jan 26 17:56:57 1994 ---- xntpd/refclock_tpro.c Wed Jan 26 16:33:43 1994 -*************** -*** 131,136 **** - * Just zero the data arrays - */ -! bzero((char *)tprounits, sizeof tprounits); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 131,136 ---- - * Just zero the data arrays - */ -! memset((char *)tprounits, 0, sizeof tprounits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 201,205 **** - } - } -! bzero((char *)tpro, sizeof(struct tprounit)); - tprounits[unit] = tpro; - ---- 201,205 ---- - } - } -! memset((char *)tpro, 0, sizeof(struct tprounit)); - tprounits[unit] = tpro; - -*************** -*** 226,230 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(TPROREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(TPROHSREFID); ---- 226,230 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, TPROREFID, 4); - else - peer->refid = htonl(TPROHSREFID); -*************** -*** 416,421 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(TPROREFID, (char *)&peer->refid, -! 4); - else - peer->refid = htonl(TPROHSREFID); ---- 416,421 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, -! TPROREFID, 4); - else - peer->refid = htonl(TPROHSREFID); -*** /tmp/RCSA023576 Wed Jan 26 17:56:57 1994 ---- xntpd/refclock_wwvb.c Wed Jan 26 16:33:43 1994 -*************** -*** 220,225 **** - * Just zero the data arrays - */ -! bzero((char *)wwvbunits, sizeof wwvbunits); -! bzero((char *)unitinuse, sizeof unitinuse); - - /* ---- 220,225 ---- - * Just zero the data arrays - */ -! memset((char *)wwvbunits, 0, sizeof wwvbunits); -! memset((char *)unitinuse, 0, sizeof unitinuse); - - /* -*************** -*** 408,412 **** - } - } -! bzero((char *)wwvb, sizeof(struct wwvbunit)); - wwvbunits[unit] = wwvb; - ---- 408,412 ---- - } - } -! memset((char *)wwvb, 0, sizeof(struct wwvbunit)); - wwvbunits[unit] = wwvb; - -*************** -*** 436,440 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(WWVBREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(WWVBHSREFID); ---- 436,440 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, WWVBREFID, 4); - else - peer->refid = htonl(WWVBHSREFID); -*************** -*** 957,962 **** - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! bcopy(WWVBREFID, (char *)&peer->refid, -! 4); - else - peer->refid = htonl(WWVBHSREFID); ---- 957,962 ---- - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) -! memmove((char *)&peer->refid, -! WWVBREFID, 4); - else - peer->refid = htonl(WWVBHSREFID); -*** /tmp/RCSA023592 Wed Jan 26 17:56:58 1994 ---- xntpdc/ntpdc.c Wed Jan 26 16:33:43 1994 -*************** -*** 222,227 **** - int c; - int errflg = 0; -! extern int optind; -! extern char *optarg; - - delay_time.l_ui = 0; ---- 222,227 ---- - int c; - int errflg = 0; -! extern int ntp_optind; -! extern char *ntp_optarg; - - delay_time.l_ui = 0; -*************** -*** 229,236 **** - - progname = argv[0]; -! while ((c = getopt_l(argc, argv, "c:dilnps")) != EOF) - switch (c) { - case 'c': -! ADDCMD(optarg); - break; - case 'd': ---- 229,236 ---- - - progname = argv[0]; -! while ((c = ntp_getopt(argc, argv, "c:dilnps")) != EOF) - switch (c) { - case 'c': -! ADDCMD(ntp_optarg); - break; - case 'd': -*************** -*** 262,270 **** - exit(2); - } -! if (optind == argc) { - ADDHOST(DEFHOST); - } else { -! for (; optind < argc; optind++) -! ADDHOST(argv[optind]); - } - ---- 262,270 ---- - exit(2); - } -! if (ntp_optind == argc) { - ADDHOST(DEFHOST); - } else { -! for (; ntp_optind < argc; ntp_optind++) -! ADDHOST(argv[ntp_optind]); - } - -*************** -*** 440,444 **** - *rdata = datap = pktdata; - lastseq = 999; /* too big to be a sequence number */ -! bzero(haveseq, sizeof(haveseq)); - FD_ZERO(&fds); - ---- 440,444 ---- - *rdata = datap = pktdata; - lastseq = 999; /* too big to be a sequence number */ -! memset(haveseq, 0, sizeof(haveseq)); - FD_ZERO(&fds); - -*************** -*** 601,605 **** - if ((datap + datasize) > (pktdata + pktdatasize)) - growpktdata(); -! bcopy((char *)rpkt.data, datap, datasize); - datap += datasize; - if (firstpkt) { ---- 601,605 ---- - if ((datap + datasize) > (pktdata + pktdatasize)) - growpktdata(); -! memmove(datap, (char *)rpkt.data, datasize); - datap += datasize; - if (firstpkt) { -*************** -*** 635,639 **** - int datasize; - -! bzero((char *)&qpkt, sizeof qpkt); - - qpkt.rm_vn_mode = RM_VN_MODE(0, 0); ---- 635,639 ---- - int datasize; - -! memset((char *)&qpkt, 0, sizeof qpkt); - - qpkt.rm_vn_mode = RM_VN_MODE(0, 0); -*************** -*** 643,647 **** - datasize = qitems * qsize; - if (datasize != 0 && qdata != NULL) { -! bcopy(qdata, (char *)qpkt.data, datasize); - qpkt.err_nitems = ERR_NITEMS(0, qitems); - qpkt.mbz_itemsize = MBZ_ITEMSIZE(qsize); ---- 643,647 ---- - datasize = qitems * qsize; - if (datasize != 0 && qdata != NULL) { -! memmove((char *)qpkt.data, qdata, datasize); - qpkt.err_nitems = ERR_NITEMS(0, qitems); - qpkt.mbz_itemsize = MBZ_ITEMSIZE(qsize); -*************** -*** 1092,1096 **** - return 1; - } else if ((hp = gethostbyname(host)) != 0) { -! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG)); - if (fullhost != 0) - (void) strcpy(fullhost, hp->h_name); ---- 1092,1096 ---- - return 1; - } else if ((hp = gethostbyname(host)) != 0) { -! memmove((char *)num, hp->h_addr, sizeof(U_LONG)); - if (fullhost != 0) - (void) strcpy(fullhost, hp->h_name); -*** /tmp/RCSA023592 Wed Jan 26 17:56:58 1994 ---- xntpdc/ntpdc_ops.c Wed Jan 26 16:33:44 1994 -*************** -*** 443,447 **** - if (pp->stratum <= 1) { - junk[4] = 0; -! bcopy((char *)&pp->refid, junk, 4); - str = junk; - } else { ---- 443,447 ---- - if (pp->stratum <= 1) { - junk[4] = 0; -! memmove(junk, (char *)&pp->refid, 4); - str = junk; - } else { -*************** -*** 789,793 **** - if (is->stratum <= 1) { - junk[4] = 0; -! bcopy((char *)&is->refid, junk, 4); - str = junk; - } else { ---- 789,793 ---- - if (is->stratum <= 1) { - junk[4] = 0; -! memmove(junk, (char *)&is->refid, 4); - str = junk; - } else { -*************** -*** 2193,2197 **** - - err = 0; -! bzero((char *)&fudgedata, sizeof fudgedata); - fudgedata.clockadr = pcmd->argval[0].netnum; - ---- 2193,2197 ---- - - err = 0; -! memset((char *)&fudgedata, 0, sizeof fudgedata); - fudgedata.clockadr = pcmd->argval[0].netnum; - -*** /tmp/RCSA023598 Wed Jan 26 17:56:59 1994 ---- xntpres/xntpres.c Wed Jan 26 16:33:44 1994 -*************** -*** 149,153 **** - char *cp; - FILE *in; -! extern int optind; - - progname = argv[0]; ---- 149,153 ---- - char *cp; - FILE *in; -! extern int ntp_optind; - - progname = argv[0]; -*************** -*** 181,185 **** - syslog(LOG_NOTICE, Version); - -! while ((c = getopt_l(argc, argv, "dr")) != EOF) - switch (c) { - case 'd': ---- 181,185 ---- - syslog(LOG_NOTICE, Version); - -! while ((c = ntp_getopt(argc, argv, "dr")) != EOF) - switch (c) { - case 'd': -*************** -*** 193,197 **** - break; - } -! if (errflg || (optind + 3) != argc) { - (void) fprintf(stderr, - "usage: %s [-d] [-r] keyid keyfile conffile\n", progname); ---- 193,197 ---- - break; - } -! if (errflg || (ntp_optind + 3) != argc) { - (void) fprintf(stderr, - "usage: %s [-d] [-r] keyid keyfile conffile\n", progname); -*************** -*** 200,210 **** - } - -! if (!atouint(argv[optind], &req_keyid)) { -! syslog(LOG_ERR, "undecodeable keyid %s", argv[optind]); - exit(1); - } - -! keyfile = argv[optind+1]; -! conffile = argv[optind+2]; - - /* ---- 200,210 ---- - } - -! if (!atouint(argv[ntp_optind], &req_keyid)) { -! syslog(LOG_ERR, "undecodeable keyid %s", argv[ntp_optind]); - exit(1); - } - -! keyfile = argv[ntp_optind+1]; -! conffile = argv[ntp_optind+2]; - - /* -*************** -*** 354,358 **** - len = strlen(name) + 1; - cp = emalloc((unsigned)len); -! bcopy(name, cp, len); - - ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry)); ---- 354,358 ---- - len = strlen(name) + 1; - cp = emalloc((unsigned)len); -! memmove(cp, name, len); - - ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry)); -*************** -*** 409,413 **** - return 1; - #endif -! return 0; - } - ---- 409,413 ---- - return 1; - #endif -! return (0); - } - -*************** -*** 417,423 **** - * only return one. - */ -! (void) bcopy(hp->h_addr, (char *)&(entry->ce_peeraddr), -! sizeof(struct in_addr)); -! return 1; - } - ---- 417,424 ---- - * only return one. - */ -! memmove((char *)&(entry->ce_peeraddr), -! hp->h_addr, -! sizeof(struct in_addr)); -! return (1); - } - -*************** -*** 440,444 **** - } - -! bzero((char *)&saddr, sizeof(saddr)); - saddr.sin_family = AF_INET; - saddr.sin_port = htons(NTP_PORT); /* trash */ ---- 441,445 ---- - } - -! memset((char *)&saddr, 0, sizeof(saddr)); - saddr.sin_family = AF_INET; - saddr.sin_port = htons(NTP_PORT); /* trash */ -*************** -*** 500,504 **** - * Make up a request packet with the configuration info - */ -! bzero((char *)&reqpkt, sizeof(reqpkt)); - - reqpkt.rm_vn_mode = RM_VN_MODE(0, 0); ---- 501,505 ---- - * Make up a request packet with the configuration info - */ -! memset((char *)&reqpkt, 0, sizeof(reqpkt)); - - reqpkt.rm_vn_mode = RM_VN_MODE(0, 0); -*************** -*** 508,512 **** - reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */ - reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer)); -! bcopy((char *)conf, reqpkt.data, sizeof(struct conf_peer)); - reqpkt.keyid = htonl(req_keyid); - ---- 509,513 ---- - reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */ - reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer)); -! memmove(reqpkt.data, (char *)conf, sizeof(struct conf_peer)); - reqpkt.keyid = htonl(req_keyid); - - diff --git a/usr.sbin/xntpd/patches/patch.40 b/usr.sbin/xntpd/patches/patch.40 deleted file mode 100644 index 7f1941d..0000000 --- a/usr.sbin/xntpd/patches/patch.40 +++ /dev/null @@ -1,92 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa23994; 13 Apr 94 15:58 EDT -Received: from adrastea.lcs.mit.edu by louie.udel.edu id aa07113; - 13 Apr 94 15:44 EDT -Received: by adrastea.lcs.mit.edu; id AA04845; Wed, 13 Apr 1994 15:44:23 -0400 -Date: Wed, 13 Apr 1994 15:44:23 -0400 -From: Garrett Wollman <wollman@adrastea.lcs.mit.edu> -Message-Id: <9404131944.AA04845@adrastea.lcs.mit.edu> -To: Mills@udel.edu -Cc: Garrett Wollman <wollman@adrastea.lcs.mit.edu>, - Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Subject: Re: You xntp modifications... -In-Reply-To: <9404122159.aa18355@huey.udel.edu> -References: <9404122159.aa18355@huey.udel.edu> - -<<On Tue, 12 Apr 94 21:59:57 EDT, Mills@udel.edu said: - -> Note that we are two versions further along, what with the average of -> a patch per day, so it would be survivable if this issue could be -> cleared up ASAP. - -This patch, applied relative to my previous patch, provides for both -behaviors. - - -*** xntpd/xntpd/ntp_control.c Wed Apr 13 12:37:51 1994 ---- ntp_control.c Wed Apr 13 12:38:42 1994 -*************** -*** 264,271 **** ---- 264,283 ---- - /* - * System and processor definitions. These will change for the gizmo board. - */ -+ #ifndef HAVE_UNAME -+ #ifndef STR_SYSTEM -+ #define STR_SYSTEM "UNIX" -+ #endif -+ #ifndef STR_PROCESSOR -+ #define STR_PROCESSOR "unknown" -+ #endif -+ -+ static char str_system[] = STR_SYSTEM; -+ static char str_processor[] = STR_PROCESSOR; -+ #else - #include <sys/utsname.h> - static struct utsname utsname; -+ #endif /* HAVE_UNAME */ - - /* - * Trap structures. We only allow a few of these, and send -*************** -*** 426,433 **** ---- 438,447 ---- - { - int i; - -+ #ifdef HAVE_UNAME - uname(&utsname); - -+ #endif /* HAVE_UNAME */ - ctl_clr_stats(); - - ctl_auth_keyid = 0; -*************** -*** 1262,1273 **** ---- 1276,1297 ---- - ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning); - break; - case CS_PROCESSOR: -+ #ifndef HAVE_UNAME -+ ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor, -+ sizeof(str_processor) - 1); -+ #else - ctl_putstr(sys_var[CS_PROCESSOR].text, utsname.machine, - strlen(utsname.machine)); -+ #endif /* HAVE_UNAME */ - break; - case CS_SYSTEM: -+ #ifndef HAVE_UNAME -+ ctl_putstr(sys_var[CS_SYSTEM].text, str_system, -+ sizeof(str_system) - 1); -+ #else - ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname, - strlen(utsname.sysname)); -+ #endif /* HAVE_UNAME */ - break; - case CS_KEYID: - ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0); - - -[no save] - diff --git a/usr.sbin/xntpd/patches/patch.41 b/usr.sbin/xntpd/patches/patch.41 deleted file mode 100644 index 5d1f91c..0000000 --- a/usr.sbin/xntpd/patches/patch.41 +++ /dev/null @@ -1,50 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa13197; 16 Apr 94 22:05 EDT -Received: from motgate.mot.com by louie.udel.edu id aa18176; 16 Apr 94 21:57 EDT -Received: from pobox.mot.com ([129.188.137.100]) by motgate.mot.com with SMTP (5.67b/IDA-1.4.4/MOT-3.1 for <mills@udel.edu>) - id AA01015; Sat, 16 Apr 1994 20:57:21 -0500 -Received: from merlin.dev.cdx.mot.com by pobox.mot.com with SMTP (5.67b/IDA-1.4.4/MOT-3.1 for <mills@udel.edu>) - id AA29067; Sat, 16 Apr 1994 20:57:19 -0500 -Received: from ronald.dev.cdx.mot.com (ronald.dev.cdx.mot.com [134.33.39.18]) by merlin.dev.cdx.mot.com (8.6.5/8.6.5) with ESMTP id VAA06544; Sat, 16 Apr 1994 21:57:12 -0400 -From: "Gregory M. Paris" <paris@merlin.dev.cdx.mot.com> -Received: from localhost (paris@localhost) by ronald.dev.cdx.mot.com (8.6.5/8.6.5) id VAA22231; Sat, 16 Apr 1994 21:57:11 -0400 -Date: Sat, 16 Apr 1994 21:57:11 -0400 -Message-Id: <199404170157.VAA22231@ronald.dev.cdx.mot.com> -To: mills@udel.edu -Subject: 3.3y patch - -Dave, - -I had the same problem compiling 3.3p as I got with 3.3y. The fix -was to move a #endif that seems to be out of place in xntpd/ntp_unixclock.c. -It now compiles fine on my HP-UX 9.03. Here's the patch. - -Greg - --- -Greg Paris <paris@merlin.dev.cdx.mot.com> -Motorola Inc, Information Systems Group, 20 Cabot Blvd, Mansfield, MA 02048-1193 -"Your Plastic Pal who's fun to be with." TM Sirius Cybernetics -These posts are self-disclamatory. - -################################################## -*** xntpd/ntp_unixclock.c.orig Mon Apr 11 22:19:21 1994 ---- xntpd/ntp_unixclock.c Sat Apr 16 21:49:15 1994 -*************** -*** 386,391 **** ---- 386,392 ---- - #undef K_TICK_NAME - #undef N_NAME - } -+ #endif /* SYS_UNIXWARE1 */ - #endif /* HAVE_READKMEM */ - - #if defined(SOLARIS)&&defined(ADJTIME_IS_ACCURATE) -*************** -*** 583,586 **** - *tick = (U_LONG)txc.tick; - } - #endif /* SYS_LINUX */ -- #endif /* SYS_UNIXWARE1 */ ---- 584,586 ---- - diff --git a/usr.sbin/xntpd/patches/patch.42 b/usr.sbin/xntpd/patches/patch.42 deleted file mode 100644 index 78c9bdf..0000000 --- a/usr.sbin/xntpd/patches/patch.42 +++ /dev/null @@ -1,38 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa00358; 19 Apr 94 17:48 EDT -Received: from swan.cl.cam.ac.uk by louie.udel.edu id aa12986; - 19 Apr 94 17:40 EDT -Received: from labes.cl.cam.ac.uk (user pb (rfc931)) by swan.cl.cam.ac.uk - with SMTP (PP-6.5) to cl; Tue, 19 Apr 1994 22:39:48 +0100 -To: Mills@udel.edu -cc: Piete Brooks <Piete.Brooks@cl.cam.ac.uk> -Subject: Re: Multicast NTP - take 1 -In-reply-to: Your message of Tue, 19 Apr 1994 12:29:25 -0400. <9404191229.aa28742@huey.udel.edu> -Date: Tue, 19 Apr 1994 22:39:44 +0100 -From: Piete Brooks <Piete.Brooks@cl.cam.ac.uk> -Message-ID: <"swan.cl.cam.:138990:940419214000"@cl.cam.ac.uk> - -Shucks ! - -I omitted the "-c" to diff ... - -*** xntpd/refclock_msfees.c.dist Thu Jan 27 14:03:59 1994 ---- xntpd/refclock_msfees.c Tue Apr 19 10:58:57 1994 -*************** -*** 139,145 **** - #define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600) - - #ifndef STREAM_PP1 -! #define STREAM_PP1 "ppsclockd\0<-- patch space for module name1 -->" - #endif - #ifndef STREAM_PP2 - #define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->" ---- 139,145 ---- - #define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600) - - #ifndef STREAM_PP1 -! #define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->" - #endif - #ifndef STREAM_PP2 - #define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->" - diff --git a/usr.sbin/xntpd/patches/patch.43 b/usr.sbin/xntpd/patches/patch.43 deleted file mode 100644 index 92f9200..0000000 --- a/usr.sbin/xntpd/patches/patch.43 +++ /dev/null @@ -1,48 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa00412; 19 Apr 94 18:04 EDT -Received: from swan.cl.cam.ac.uk by louie.udel.edu id aa13181; - 19 Apr 94 17:44 EDT -Received: from labes.cl.cam.ac.uk (user pb (rfc931)) by swan.cl.cam.ac.uk - with SMTP (PP-6.5) to cl; Tue, 19 Apr 1994 22:44:05 +0100 -To: Mills@udel.edu -cc: Piete Brooks <Piete.Brooks@cl.cam.ac.uk> -Subject: Re: Cisco/Multicast/ntp3.3m -In-reply-to: Your message of Tue, 19 Apr 1994 12:24:31 -0400. <9404191224.aa28707@huey.udel.edu> -Date: Tue, 19 Apr 1994 22:43:58 +0100 -From: Piete Brooks <Piete.Brooks@cl.cam.ac.uk> -Message-ID: <"swan.cl.cam.:140740:940419214417"@cl.cam.ac.uk> - -> Yes, I think you have caught all the gotchas. - -I fear not :-(( - -> I take it you have the latest kernel mods. - -Look for a call sign I assume .... -Do I take it that they are **REQUIRED** ? :-((( - - -Other problems ..... - -It appears that you have your own in.h in include/ntp_in.h - -I suspect that that is why things are failing ... -Why not use the syatem's own in.h ?? - -To make it compile I added: - -*** include/ntp_in.h.dist Thu Apr 14 16:20:29 1994 ---- include/ntp_in.h Tue Apr 19 21:40:12 1994 -*************** -*** 19,24 **** ---- 19,27 ---- - - #ifndef _netinet_in_h - #define _netinet_in_h -+ #define _NETINET_IN_H_ -+ #define _SYS_IN_INCLUDED -+ #define __IN_HEADER - - /* - * Protocols - diff --git a/usr.sbin/xntpd/patches/patch.5 b/usr.sbin/xntpd/patches/patch.5 deleted file mode 100644 index 2225804..0000000 --- a/usr.sbin/xntpd/patches/patch.5 +++ /dev/null @@ -1,49 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa14816; 27 Jan 94 5:15 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa11733; - 27 Jan 94 5:09 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA25056 (5.65c-6/7.3v-FAU); Thu, 27 Jan 1994 11:09:06 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA09091 (5.65c-6/7.3m-FAU); Thu, 27 Jan 1994 11:09:03 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199401271009.AA09091@faui43.informatik.uni-erlangen.de> -Subject: Re: Solaribum -To: Mills@udel.edu -Date: Thu, 27 Jan 94 11:08:55 MET -Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk, - Paul_Vixie@corpmis.sjc.hw.sony.com -In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm -X-Mailer: ELM [version 2.3 PL11] - - -And another corer generator to be removed: - -=================================================================== -RCS file: /src/NTP/REPOSITORY/v3/xntpd/ntp_control.c,v -retrieving revision 3.22 -diff -c -r3.22 xntpd/ntp_control.c -*** xntpd/ntp_control.c:3.22 1994/01/26 21:56:23 ---- xntpd/ntp_control.c 1994/01/27 10:03:01 -*************** -*** 2132,2138 **** - for (i = 1; i <= CC_MAXCODE; i++) - if (wants[i]) - ctl_putclock(i, &clock, 1); -! for (i = 0; !(clock.kv_list[i].flags & EOV); i++) - if (wants[i+CC_MAXCODE+1]) - ctl_putdata(clock.kv_list[i].text, - strlen(clock.kv_list[i].text), 0); ---- 2132,2138 ---- - for (i = 1; i <= CC_MAXCODE; i++) - if (wants[i]) - ctl_putclock(i, &clock, 1); -! for (i = 0; clock.kv_list && !(clock.kv_list[i].flags & EOV); i++) - if (wants[i+CC_MAXCODE+1]) - ctl_putdata(clock.kv_list[i].text, - strlen(clock.kv_list[i].text), 0); --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.6 b/usr.sbin/xntpd/patches/patch.6 deleted file mode 100644 index 220acad..0000000 --- a/usr.sbin/xntpd/patches/patch.6 +++ /dev/null @@ -1,550 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa17107; 27 Jan 94 14:37 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa16998; - 27 Jan 94 14:34 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA29914 (5.65c-6/7.3v-FAU); Thu, 27 Jan 1994 20:34:08 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA23509 (5.65c-6/7.3m-FAU); Thu, 27 Jan 1994 20:34:05 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199401271934.AA23509@faui43.informatik.uni-erlangen.de> -Subject: Re: Solaribum -To: Mills@udel.edu -Date: Thu, 27 Jan 94 20:33:59 MET -Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk, - Paul_Vixie@corpmis.sjc.hw.sony.com -In-Reply-To: <9401271111.aa16183@huey.udel.edu>; from "Mills@udel.edu" at Jan 27, 94 11:11 am -X-Mailer: ELM [version 2.3 PL11] - - -> Guys, - -> Two masive patches collided in midair here, leaving broken parts scattered -> over three counties. The National Time Safety Board has investigated, -> but been unable, ... - -Additional efforts of the european branch of the NTPSB have uncovered -that the collision was due to low visibility across the atlantic. - -And I wanted to go on: - All measures have been taken to limit the effects of the crash to a - minimum and to resume normal aircraft operation as soon as possible. - - All crew members and passengers are required to apply following patch - to xntp3.3y.tar.Z for increased comfort and safety. This patch should - enable us to resume normal operation again. - - After applying the patches you may remove following debris: - - include/ntp_machine.h.rej - xntpd/ntp_config.c.rej - xntpd/ntp_control.c.rej - -Unfortunately I did a test compile and the results of that will -extend the ground stay of the 3.3y aircraft considerably. -(You may start thinking about bringing up 3.3xx - see below) - -SunOS 4.x.x does NOT have the new highly portable "memmove()" -routine. The lack of this will mean that we will have to -#define memmove(a, b, c) memcpy(a, b, c) -or find something else. I'd like to leave this to Paul. -Also on Sunos 4.x there are implicit declarations of bzero due -the the FDSET macro from the system header files. So I am not -so sure whether strictly using mem* is the best or whether we should -add b* prototypes to l_stdlib.h. I think Paul has now something -to work on. Anyhow, the patches below will rectify some problems -but the resulting code still needs much polishing (providing memmove -where it is missing e.g. SunOS4.x). - -In order to get a flying version fast (3.3xx) Dave could apply my -patch he is holding to 3.3x - that should then make a workable -version. 3.3y can then be cleaned up slowly (starting with the -patches below and then port it again to the rest of the systems). - -Sorry about the bad news. - -> I have one more patch from Frank which I will hold on to until the aircraft -> is recertified. - -That one is still to be applied because without it, it is possible -to shoot down any plane around the NTP universe that is bearing -the 3.3x banner (but can be applied to 3.3x). - - -For the 3.3y construction crew: - -diff -c -r ../yy/include/ntp_machine.h ./include/ntp_machine.h -*** ../yy/include/ntp_machine.h Thu Jan 27 15:03:23 1994 ---- ./include/ntp_machine.h Thu Jan 27 19:13:35 1994 -*************** -*** 121,139 **** - to the correct broadcast address - are these - implementations broken or did the spec change ? - -- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ? -- - DEFINITIONS FOR SYSTEM && PROCESSOR - STR_SYSTEM - value of system variable - STR_PROCESSOR - value of processor variable - - You could just put the defines on the DEFS line in machines/<os> file. -! I don't since there are lost of different types compiler that a systemm might -! have, some that can do proto typing and others that cannot on the saem system. -! I get a chanse to twiddle some of the configuration paramasters at compile -! time based on compler/machine combinatsions by using this include file. -! See convex, aix and sun configurations see how complex it gets. -! - */ - - ---- 121,141 ---- - to the correct broadcast address - are these - implementations broken or did the spec change ? - - DEFINITIONS FOR SYSTEM && PROCESSOR - STR_SYSTEM - value of system variable - STR_PROCESSOR - value of processor variable - - You could just put the defines on the DEFS line in machines/<os> file. -! I don't since there are lots of different types of compilers that a system might -! have, some that can do proto typing and others that cannot on the same system. -! I get a chance to twiddle some of the configuration parameters at compile -! time based on compiler/machine combinations by using this include file. -! See convex, aix and sun configurations see how complex it get. -! -! Note that it _is_ considered reasonable to add some system-specific defines -! to the machine/<os> file if it would be too inconvenient to puzzle them out -! in this file. -! - */ - - -diff -c -r ../yy/parse/parse.c ./parse/parse.c -*** ../yy/parse/parse.c Thu Jan 27 00:25:18 1994 ---- ./parse/parse.c Thu Jan 27 20:18:58 1994 -*************** -*** 29,40 **** - #include "sys/time.h" - #include "sys/errno.h" - -- #include "ntp_fp.h" -- #include "ntp_unixtime.h" -- #include "ntp_calendar.h" -- -- #include "parse.h" -- - #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM) - /* - * Sorry, but in SunOS 4.x kernels there are no ---- 29,34 ---- -*************** -*** 44,51 **** ---- 38,54 ---- - #define _ntp_string_h - extern void bcopy(); - extern void bzero(); -+ #else -+ #define bzero(_X_, _Y_) memset(_X_, 0, _Y_) -+ #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_) - #endif - -+ #include "ntp_fp.h" -+ #include "ntp_unixtime.h" -+ #include "ntp_calendar.h" -+ -+ #include "parse.h" -+ - #include "ntp_stdlib.h" - - #ifdef PARSESTREAM -diff -c -r ../yy/xntpd/ntp_config.c ./xntpd/ntp_config.c -*** ../yy/xntpd/ntp_config.c Thu Jan 27 15:03:47 1994 ---- ./xntpd/ntp_config.c Thu Jan 27 19:18:40 1994 -*************** -*** 1,4 **** -! /* ntp_config.c,v 3.1 1993/07/06 01:11:12 jbj Exp - * ntp_config.c - read and apply configuration information - */ - #define RESOLVE_INTERNAL /* gdt */ ---- 1,4 ---- -! /* - * ntp_config.c - read and apply configuration information - */ - #define RESOLVE_INTERNAL /* gdt */ -*************** -*** 375,388 **** - break; - } - -! if (errflg || optind != argc) { - (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname); - (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n"); - (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n"); - (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n"); - exit(2); - } -! optind = 0; /* reset optind to restart getopt_l */ - - if (debug) { - #ifdef NTP_POSIX_SOURCE ---- 375,388 ---- - break; - } - -! if (errflg || ntp_optind != argc) { - (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname); - (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n"); - (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n"); - (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n"); - exit(2); - } -! ntp_optind = 0; /* reset ntp_optind to restart ntp_getopt */ - - if (debug) { - #ifdef NTP_POSIX_SOURCE -*************** -*** 430,437 **** - char resolver_name[MAXFILENAME]; - int have_keyfile; - char keyfile[MAXFILENAME]; -! extern int optind; -! extern char *optarg; - extern char *Version; - extern U_LONG info_auth_keyid; - FILEGEN *filegen; ---- 430,437 ---- - char resolver_name[MAXFILENAME]; - int have_keyfile; - char keyfile[MAXFILENAME]; -! extern int ntp_optind; -! extern char *ntp_optarg; - extern char *Version; - extern U_LONG info_auth_keyid; - FILEGEN *filegen; -*************** -*** 461,467 **** - /* - * Decode argument list - */ -! while ((c = getopt_l(argc, argv, xntp_options)) != EOF) { - switch (c) { - case 'a': - proto_config(PROTO_AUTHENTICATE, (LONG)1); ---- 461,467 ---- - /* - * Decode argument list - */ -! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF) { - switch (c) { - case 'a': - proto_config(PROTO_AUTHENTICATE, (LONG)1); -*************** -*** 470,476 **** - proto_config(PROTO_BROADCLIENT, (LONG)1); - break; - case 'c': -! config_file = optarg; - break; - case 'd': - #ifdef DEBUG ---- 470,476 ---- - proto_config(PROTO_BROADCLIENT, (LONG)1); - break; - case 'c': -! config_file = ntp_optarg; - break; - case 'd': - #ifdef DEBUG -*************** -*** 484,498 **** - do { - l_fp tmp; - -! if (!atolfp(optarg, &tmp)) { - syslog(LOG_ERR, - "command line encryption delay value %s undecodable", -! optarg); - errflg++; - } else if (tmp.l_ui != 0) { - syslog(LOG_ERR, - "command line encryption delay value %s is unlikely", -! optarg); - errflg++; - } else { - proto_config(PROTO_AUTHDELAY, tmp.l_f); ---- 484,498 ---- - do { - l_fp tmp; - -! if (!atolfp(ntp_optarg, &tmp)) { - syslog(LOG_ERR, - "command line encryption delay value %s undecodable", -! ntp_optarg); - errflg++; - } else if (tmp.l_ui != 0) { - syslog(LOG_ERR, - "command line encryption delay value %s is unlikely", -! ntp_optarg); - errflg++; - } else { - proto_config(PROTO_AUTHDELAY, tmp.l_f); -*************** -*** 501,537 **** - break; - - case 'f': -! stats_config(STATS_FREQ_FILE, optarg); - break; - - case 'k': -! getauthkeys(optarg); -! if ((int)strlen(optarg) >= MAXFILENAME) { - syslog(LOG_ERR, - "key file name too LONG (>%d, sigh), no name resolution possible", - MAXFILENAME); - } else { - have_keyfile = 1; -! (void)strcpy(keyfile, optarg); - } - break; - - case 'p': -! stats_config(STATS_PID_FILE, optarg); - break; - - case 'r': - do { - l_fp tmp; - -! if (!atolfp(optarg, &tmp)) { - syslog(LOG_ERR, - "command line broadcast delay value %s undecodable", -! optarg); - } else if (tmp.l_ui != 0) { - syslog(LOG_ERR, - "command line broadcast delay value %s is unlikely", -! optarg); - } else { - proto_config(PROTO_BROADDELAY, tmp.l_f); - } ---- 501,537 ---- - break; - - case 'f': -! stats_config(STATS_FREQ_FILE, ntp_optarg); - break; - - case 'k': -! getauthkeys(ntp_optarg); -! if ((int)strlen(ntp_optarg) >= MAXFILENAME) { - syslog(LOG_ERR, - "key file name too LONG (>%d, sigh), no name resolution possible", - MAXFILENAME); - } else { - have_keyfile = 1; -! (void)strcpy(keyfile, ntp_optarg); - } - break; - - case 'p': -! stats_config(STATS_PID_FILE, ntp_optarg); - break; - - case 'r': - do { - l_fp tmp; - -! if (!atolfp(ntp_optarg, &tmp)) { - syslog(LOG_ERR, - "command line broadcast delay value %s undecodable", -! ntp_optarg); - } else if (tmp.l_ui != 0) { - syslog(LOG_ERR, - "command line broadcast delay value %s is unlikely", -! ntp_optarg); - } else { - proto_config(PROTO_BROADDELAY, tmp.l_f); - } -*************** -*** 539,556 **** - break; - - case 's': -! stats_config(STATS_STATSDIR, optarg); - break; - - case 't': - do { - int tkey; - -! tkey = atoi(optarg); - if (tkey <= 0 || tkey > NTP_MAXKEY) { - syslog(LOG_ERR, - "command line trusted key %s is unlikely", -! optarg); - } else { - authtrust(tkey, (LONG)1); - } ---- 539,556 ---- - break; - - case 's': -! stats_config(STATS_STATSDIR, ntp_optarg); - break; - - case 't': - do { - int tkey; - -! tkey = atoi(ntp_optarg); - if (tkey <= 0 || tkey > NTP_MAXKEY) { - syslog(LOG_ERR, - "command line trusted key %s is unlikely", -! ntp_optarg); - } else { - authtrust(tkey, (LONG)1); - } -*************** -*** 559,565 **** - - case 'v': - case 'V': -! set_sys_var(optarg, strlen(optarg)+1, RW | ((c == 'V') ? DEF : 0)); - break; - - default: ---- 559,565 ---- - - case 'v': - case 'V': -! set_sys_var(ntp_optarg, strlen(ntp_optarg)+1, RW | ((c == 'V') ? DEF : 0)); - break; - - default: -diff -c -r ../yy/xntpd/ntp_control.c ./xntpd/ntp_control.c -*** ../yy/xntpd/ntp_control.c Thu Jan 27 15:03:48 1994 ---- ./xntpd/ntp_control.c Thu Jan 27 19:29:06 1994 -*************** -*** 1848,1854 **** - ctl_sys_num_events = 0; - gotvar += count_var(ext_sys_var); - wants = (u_char *)emalloc(gotvar); -! bzero((char *)wants, gotvar); - gotvar = 0; - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { - if (v->flags & EOV) { ---- 1848,1854 ---- - ctl_sys_num_events = 0; - gotvar += count_var(ext_sys_var); - wants = (u_char *)emalloc(gotvar); -! memset((char *)wants, 0, gotvar); - gotvar = 0; - while ((v = ctl_getitem(sys_var, &valuep)) != 0) { - if (v->flags & EOV) { -*************** -*** 1904,1910 **** - if (res_authokay) - peer->num_events = 0; - wants = (u_char *)emalloc(gotvar); -! bzero((char*)wants, gotvar); - gotvar = 0; - while ((v = ctl_getitem(peer_var, &valuep)) != 0) { - if (v->flags & EOV) { ---- 1904,1910 ---- - if (res_authokay) - peer->num_events = 0; - wants = (u_char *)emalloc(gotvar); -! memset((char*)wants, 0, gotvar); - gotvar = 0; - while ((v = ctl_getitem(peer_var, &valuep)) != 0) { - if (v->flags & EOV) { -*************** -*** 2106,2112 **** - rpkt.status = htons(ctlclkstatus(&clock)); - gotvar = CC_MAXCODE+1+count_var(clock.kv_list); - wants = (u_char *)emalloc(gotvar); -! bzero((char*)wants, gotvar); - gotvar = 0; - while ((v = ctl_getitem(clock_var, &valuep)) != 0) { - if (v->flags & EOV) { ---- 2106,2112 ---- - rpkt.status = htons(ctlclkstatus(&clock)); - gotvar = CC_MAXCODE+1+count_var(clock.kv_list); - wants = (u_char *)emalloc(gotvar); -! memset((char*)wants, 0, gotvar); - gotvar = 0; - while ((v = ctl_getitem(clock_var, &valuep)) != 0) { - if (v->flags & EOV) { -*************** -*** 2578,2584 **** - *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var)); - if (k) - { -! bcopy((char *)k, (char *)*kv, sizeof(struct ctl_var)*c); - free((char *)k); - } - ---- 2578,2584 ---- - *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var)); - if (k) - { -! memmove((char *)*kv, (char *)k, sizeof(struct ctl_var)*c); - free((char *)k); - } - -*************** -*** 2621,2627 **** - { - free(k->text); - k->text = (char *)emalloc(size); -! bcopy(data, k->text, size); - k->flags = def; - return; - } ---- 2621,2627 ---- - { - free(k->text); - k->text = (char *)emalloc(size); -! memmove(k->text, data, size); - k->flags = def; - return; - } -*************** -*** 2629,2635 **** - else - { - k->text = (char *)emalloc(size); -! bcopy(data, k->text, size); - k->flags = def; - return; - } ---- 2629,2635 ---- - else - { - k->text = (char *)emalloc(size); -! memmove(k->text, data, size); - k->flags = def; - return; - } -*************** -*** 2637,2643 **** - } - } - t = add_var(kv, size, def); -! bcopy(data, t, size); - } - - void ---- 2637,2643 ---- - } - } - t = add_var(kv, size, def); -! memmove(t, data, size); - } - - void --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.7 b/usr.sbin/xntpd/patches/patch.7 deleted file mode 100644 index 682065f..0000000 --- a/usr.sbin/xntpd/patches/patch.7 +++ /dev/null @@ -1,274 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa21105; 28 Jan 94 9:25 EST -Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa08838; - 28 Jan 94 9:20 EST -Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP; - id AA29169 (5.65c-6/7.3v-FAU); Fri, 28 Jan 1994 15:19:56 +0100 -Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP; - id AA11999 (5.65c-6/7.3m-FAU); Fri, 28 Jan 1994 15:19:51 +0100 -From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de> -Message-Id: <199401281419.AA11999@faui43.informatik.uni-erlangen.de> -Subject: Re: Solaribum -To: Paul A Vixie <Paul_Vixie@corpmis.sjc.hw.sony.com> -Date: Fri, 28 Jan 94 14:02:02 MET -Cc: Mills@udel.edu, Frank.Kardel@informatik.uni-erlangen.de, - Piete.Brooks@cl.cam.ac.uk, Paul_Vixie@corpmis.sjc.hw.sony.com -In-Reply-To: <9401272236.AA27835@morality.sjc.hw.sony.com>; from "Paul A Vixie" at Jan 27, 94 2:36 pm -X-Mailer: ELM [version 2.3 PL11] - - -> >memmove() and crumps in loading with an unknown external. If the missing -> >routine is not there in SunOS 4, why not conditionally compile one -> >and be done with it? - -> as i said in earlier mail, there is already a macro for memmove, to define -> it in terms of bcopy, but it is only enabled on systems that don't have a -> native memmove. include/*.h tells the story. - -Ok, in order to cope with the problems (non existent memmove() and -sys header files that use bops) I fixed SUNOS4 and ULTRIX to use the -b-ops (via the NTP_NEED_BOPS define). All other should to my knowledge -use the mem* stuff (I'd rather use either mem* or b* instead of mixtures -of both). - -Now, the following patch should get 3.3y (and 3.3yy) to fly -(=compile) on suns. Functional test have not been done. ULTRIX -has not been tested. - -> there are too many x's and y's now. i'm confused. i promise not to send -> any more patches until the dust clears.. - -With this patch we should get to 3.3yyy which should be the -base for all next efforts (-> and 3.3{x,xx,y,yy} can be deleted). - -May the source be with us: - -diff -c -r ../yy/include/l_stdlib.h ./include/l_stdlib.h -*** ../yy/include/l_stdlib.h Thu Jan 27 15:03:21 1994 ---- ./include/l_stdlib.h Fri Jan 28 12:46:31 1994 -*************** -*** 47,54 **** ---- 47,60 ---- - extern int rand P((void)); - extern int setpgrp P((int, int)); - extern void srand P((unsigned int)); -+ extern void bcopy P((char *, char *, int)); - #endif - -+ #ifndef bzero /* XXX macro prototyping clash */ -+ extern void bzero P((char *, int)); -+ extern int bcmp P((char *, char *, int)); -+ extern void bcopy P((char *, char *, int)); -+ #endif - extern char *mktemp P((char *)); - - extern int tolower P((int)); -*************** -*** 92,102 **** ---- 98,110 ---- - - #ifdef _ntp_string_h - #ifdef NTP_POSIX_SOURCE /* these are builtins */ -+ #ifndef NTP_NEED_BOPS /* but may be emulated by bops */ - extern char *memcpy(); - extern char *memset(); - extern int memcmp(); - #endif - #endif -+ #endif - - #ifdef _sys_socket_h - extern int bind P((int, struct sockaddr *, int)); -*************** -*** 187,192 **** ---- 195,203 ---- - - #ifndef NTP_POSIX_SOURCE - extern int atoi P((char *)); -+ extern void bzero P((char *, int)); -+ extern int bcmp P((char *, char *, int)); -+ extern void bcopy P((char *, char *, int)); - extern int execve P((char *, char **,char **)); - extern int fork P((void)); - extern int getdtablesize P((void)); -diff -c -r ../yy/include/ntp_machine.h ./include/ntp_machine.h -*** ../yy/include/ntp_machine.h Fri Jan 28 13:32:33 1994 ---- ./include/ntp_machine.h Fri Jan 28 12:25:29 1994 -*************** -*** 168,173 **** ---- 168,174 ---- - * Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO - */ - #if defined(SYS_SUNOS4) -+ #define NTP_NEED_BOPS - #define NO_SIGNED_CHAR_DECL - #define HAVE_LIBKVM - #define HAVE_MALLOC_H -*************** -*** 266,271 **** ---- 267,273 ---- - * Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO - */ - #if defined(SYS_ULTRIX) -+ #define NTP_NEED_BOPS - #define S_CHAR_DEFINED - #define HAVE_READKMEM - #define HAVE_BSD_NICE -diff -c -r ../yy/include/ntp_string.h ./include/ntp_string.h -*** ../yy/include/ntp_string.h Thu Jan 27 15:03:24 1994 ---- ./include/ntp_string.h Fri Jan 28 12:36:44 1994 -*************** -*** 5,11 **** - #ifndef _ntp_string_h - #define _ntp_string_h - -! #ifdef NTP_POSIX_SOURCE - - # if defined(HAVE_MEMORY_H) - # include <memory.h> ---- 5,11 ---- - #ifndef _ntp_string_h - #define _ntp_string_h - -! #if defined(NTP_POSIX_SOURCE) - - # if defined(HAVE_MEMORY_H) - # include <memory.h> -*************** -*** 13,29 **** - - # include <string.h> - -! #else /* NTP_POSIX_SOURCE */ - - # include <strings.h> -- - # define strchr(s,c) index(s,c) - # define strrchr(s,c) rindex(s,c) - # define memcmp(a,b,c) bcmp(a,b,c) - # define memmove(t,f,c) bcopy(f,t,c) -! # define memset(a,x,c) if (x == 0x00) bzero(a,c) else ntp_memset((char*)a,x,c) - void ntp_memset P((char *, int, int)); - -! #endif /* NTP_POSIX_SOURCE */ - - #endif /* _ntp_string_h */ ---- 13,35 ---- - - # include <string.h> - -! #else - - # include <strings.h> - # define strchr(s,c) index(s,c) - # define strrchr(s,c) rindex(s,c) -+ # ifndef NTP_NEED_BOPS -+ # define NTP_NEED_BOPS -+ # endif -+ #endif /* NTP_POSIX_SOURCE */ -+ -+ #ifdef NTP_NEED_BOPS -+ - # define memcmp(a,b,c) bcmp(a,b,c) - # define memmove(t,f,c) bcopy(f,t,c) -! # define memset(a,x,c) if (x == 0x00) bzero(a,c); else ntp_memset((char*)a,x,c) - void ntp_memset P((char *, int, int)); - -! #endif /* NTP_NEED_BOPS */ - - #endif /* _ntp_string_h */ -diff -c -r ../yy/lib/machines.c ./lib/machines.c -*** ../yy/lib/machines.c Thu Jan 27 15:03:35 1994 ---- ./lib/machines.c Fri Jan 28 13:55:26 1994 -*************** -*** 31,37 **** - } - #endif - -! #if !defined(NTP_POSIX_SOURCE) - void - ntp_memset(a, x, c) - char *a; ---- 31,37 ---- - } - #endif - -! #if !defined(NTP_POSIX_SOURCE) || defined(NTP_NEED_BOPS) - void - ntp_memset(a, x, c) - char *a; -diff -c -r ../yy/parse/Makefile.tmpl ./parse/Makefile.tmpl -*** ../yy/parse/Makefile.tmpl Fri Nov 26 05:28:30 1993 ---- ./parse/Makefile.tmpl Fri Jan 28 13:47:30 1994 -*************** -*** 92,98 **** - - clean: - -@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \ -! lintlib.errs lint.errs genassym assym.s parsestreams parse - -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean - - distclean: clean ---- 92,98 ---- - - clean: - -@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \ -! lintlib.errs lint.errs genassym assym.s parsestreams parse parsestreams.o.* - -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean - - distclean: clean -diff -c -r ../yy/parse/parse.c ./parse/parse.c -*** ../yy/parse/parse.c Fri Jan 28 13:32:34 1994 ---- ./parse/parse.c Fri Jan 28 13:08:01 1994 -*************** -*** 29,47 **** - #include "sys/time.h" - #include "sys/errno.h" - - #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM) - /* -! * Sorry, but in SunOS 4.x kernels there are no - * mem* operations. I don't want them - bcopy, bzero - * are fine in the kernel - */ -! #define _ntp_string_h -! extern void bcopy(); -! extern void bzero(); - #else - #define bzero(_X_, _Y_) memset(_X_, 0, _Y_) - #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_) - #endif - - #include "ntp_fp.h" - #include "ntp_unixtime.h" ---- 29,53 ---- - #include "sys/time.h" - #include "sys/errno.h" - -+ #include "ntp_machine.h" -+ - #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM) - /* -! * Sorry, but in SunOS 4.x AND Solaris 2.x kernels there are no - * mem* operations. I don't want them - bcopy, bzero - * are fine in the kernel - */ -! #ifndef NTP_NEED_BOPS -! #define NTP_NEED_BOPS -! #endif - #else -+ #ifndef NTP_NEED_BOPS -+ #ifndef bzero - #define bzero(_X_, _Y_) memset(_X_, 0, _Y_) - #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_) - #endif -+ #endif -+ #endif - - #include "ntp_fp.h" - #include "ntp_unixtime.h" --- - Frank Kardel (kardel@informatik.uni-erlangen.de) - All SCSI disks will from now on be required to send an email - notice 24 hours prior to complete hardware failure! - diff --git a/usr.sbin/xntpd/patches/patch.8 b/usr.sbin/xntpd/patches/patch.8 deleted file mode 100644 index 52e928c..0000000 --- a/usr.sbin/xntpd/patches/patch.8 +++ /dev/null @@ -1,44 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa21136; 28 Jan 94 9:30 EST -Received: from relay1.uu.net by louie.udel.edu id aa09355; 28 Jan 94 9:29 EST -Received: from outpost.wg.waii.com by relay1.UU.NET with SMTP - (5.61/UUNET-internet-primary) id AAwaur00219; Fri, 28 Jan 94 09:29:28 -0500 -Received: from airgun.wg.waii.com by outpost.wg.waii.com with SMTP id AA18918 - (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 08:29:23 -0600 -Received: from merlin.london.waii.com by airgun.wg.waii.com with SMTP id AA18376 - (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 08:29:16 -0600 -Received: from phoenix.london.waii.com by merlin.london.waii.com with SMTP id AA21698 - (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 14:24:29 GMT -Received: by phoenix.london.waii.com (4.1/SMI-4.1) - id AA21825; Fri, 28 Jan 94 14:29:12 GMT -Date: Fri, 28 Jan 94 14:29:12 GMT -From: Marc Brett <ltso@london.waii.com> -Message-Id: <9401281429.AA21825@phoenix.london.waii.com> -To: mills@udel.edu -Subject: Bug in export version of xntp.3.3c - -Dave, - -The crippled DES routine fails to compile on my machine (SunOS 1.4.3, cc). -It complains about U_LONG being unrecognized. Luckily, the fix is a -one-liner. - -*** authdes.c.export Tue Aug 24 22:26:45 1993 ---- authdes.c Fri Jan 28 12:18:40 1994 -*************** -*** 15,20 **** ---- 15,21 ---- - * to its exportable state, copy this file to authdes.c . - */ - #include <sys/types.h> -+ #include "ntp_stdlib.h" - - /* - * This routine is normally called to compute the key schedule. - - -Regards, - -Marc Brett marc.brett@london.waii.com -Western Geophysical Tel: +44 81 560 3160 - diff --git a/usr.sbin/xntpd/patches/patch.9 b/usr.sbin/xntpd/patches/patch.9 deleted file mode 100644 index 76b3309..0000000 --- a/usr.sbin/xntpd/patches/patch.9 +++ /dev/null @@ -1,83 +0,0 @@ - -Received: from louie.udel.edu by huey.udel.edu id aa04410; 31 Jan 94 4:58 EST -Received: from gw.home.vix.com by louie.udel.edu id aa00370; 31 Jan 94 4:52 EST -Received: by gw.home.vix.com id AA12643; Mon, 31 Jan 94 01:52:12 -0800 -Message-Id: <9401310952.AA12643@gw.home.vix.com> -X-Btw: vix.com is also gw.home.vix.com and vixie.sf.ca.us -To: Mills@udel.edu -Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk -Subject: diffs to yyy to make ultrix/GOES happy -Date: Mon, 31 Jan 94 01:52:11 PST -From: Paul A Vixie <vixie@vix.com> - -diff -r -c2 yyy.ref/adjtime/adjtimed.c xntp3.3yyy/adjtime/adjtimed.c -*** yyy.ref/adjtime/adjtimed.c Thu Jan 27 06:03:11 1994 ---- xntp3.3yyy/adjtime/adjtimed.c Mon Jan 31 01:24:49 1994 -*************** -*** 82,86 **** ---- 82,90 ---- - progname = argv[0]; - -+ #ifdef LOG_LOCAL6 - openlog("adjtimed", LOG_PID, LOG_LOCAL6); -+ #else -+ openlog("adjtimed", LOG_PID); -+ #endif - - while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) { -diff -r -c2 yyy.ref/include/ntp_machine.h xntp3.3yyy/include/ntp_machine.h -*** yyy.ref/include/ntp_machine.h Fri Jan 28 07:26:11 1994 ---- xntp3.3yyy/include/ntp_machine.h Mon Jan 31 01:01:11 1994 -*************** -*** 42,47 **** - - -! WHICH TERMINAL MODEL TO USE - I would assume HAVE_POSIX_TTYS if -! NTP_POSIX_SOURCE was set but cann't. The - posix tty driver is too restrictive on most systems. - It defined if you define STREAMS. ---- 42,47 ---- - - -! WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if -! NTP_POSIX_SOURCE was set but can't. The - posix tty driver is too restrictive on most systems. - It defined if you define STREAMS. -*************** -*** 50,54 **** - HAVE_BSD_TTYS - Use BSD stty.h - HAVE_TERMIOS - Use POSIX termios.h -- HAVE_POSIX_TTYS - "struct termios" has c_line defined - - THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about ---- 50,53 ---- -*************** -*** 268,272 **** - */ - #if defined(SYS_ULTRIX) -- #define NTP_NEED_BOPS - #define S_CHAR_DEFINED - #define HAVE_READKMEM ---- 267,270 ---- -*************** -*** 277,280 **** ---- 275,279 ---- - #define STR_SYSTEM "UNIX/Ultrix" - #endif -+ #define HAVE_TERMIOS - #endif - -*************** -*** 565,568 **** ---- 564,573 ---- - && !defined(HAVE_NO_NICE) - ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines -+ #endif -+ -+ #if !defined(HAVE_SYSV_TTYS) \ -+ && !defined(HAVE_BSD_TTYS) \ -+ && !defined(HAVE_TERMIOS) -+ ERROR no_tty_type_defined - #endif - - diff --git a/usr.sbin/xntpd/scripts/hpadjtime.sh b/usr.sbin/xntpd/scripts/hpadjtime.sh deleted file mode 100644 index 07773dc..0000000 --- a/usr.sbin/xntpd/scripts/hpadjtime.sh +++ /dev/null @@ -1,18 +0,0 @@ -#! /bin/sh -val=1 -if [ -f /bin/uname -o -f /usr/bin/uname ]; then - set `uname -a | tr '[A-Z]' '[a-z]'` - case "$1" in - hp-ux) case "$3" in - *.10.*) val=1 ;; - *.09.03) case "$5" in - 9000/3*) val=1 ;; - *) val=0 ;; - esac ;; - *) val=0 ;; - esac - ;; - *) - esac -fi -exit $val diff --git a/usr.sbin/xntpd/util/Makefile.tmpl b/usr.sbin/xntpd/util/Makefile.tmpl deleted file mode 100644 index e30292f..0000000 --- a/usr.sbin/xntpd/util/Makefile.tmpl +++ /dev/null @@ -1,62 +0,0 @@ -# -# Makefile.tmpl -# -PROGRAM= tickadj -# -# Makefile for utilities -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -INSTALL= install -DEFS= -DEFS_OPT= -DEFS_LOCAL= -DAEMONLIBS= -RESLIB= -COMPAT= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a -LINTLIB= ../lib/llib-llibntp.ln -MAKE= make -TOP=../ -# -SOURCE= tickadj.c ntptime.c -TKOBJS= tickadj.o -NTOBJS= ntptime.o -EXECS= ntptime jitter timetrim kern byteorder longsize precision - -all: $(PROGRAM) - -tickadj: $(TKOBJS) - $(CC) $(COPTS) -o $@ $(TKOBJS) $(LIB) $(DAEMONLIBS) $(RESLIB) $(COMPAT) - -ntptime: $(NTOBJS) - $(CC) $(COPTS) -o $@ $(NTOBJS) $(LIB) - -precision: precision.o - $(CC) $(COPTS) -o $@ $@.o - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) - $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -tags: - ctags *.c *.h - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) $(EXECS) *.o *.out tags make.log Makefile.bak lint.errs - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) $(MFLAGS) MFLAGS="$(MFLAGS)" - diff --git a/usr.sbin/xntpd/xntpd/Makefile.tmpl b/usr.sbin/xntpd/xntpd/Makefile.tmpl deleted file mode 100644 index 919d2a0..0000000 --- a/usr.sbin/xntpd/xntpd/Makefile.tmpl +++ /dev/null @@ -1,168 +0,0 @@ -# -# Makefile.tmpl -# -PROGRAM= xntpd -# -# xntpd - NTP daemon -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -INSTALL= install -DEFS= -DEFS_OPT= -DEFS_LOCAL= -CLOCKDEFS= -DAEMONLIBS= -RESLIB= -ADJLIB= -COMPAT= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a ../parse/libparse.a -LINTLIB= ../lib/llib-llibntp.ln -MAKE= make -TOP=../ -# -SOURCE= ntp_config.c ntp_control.c ntp_io.c ntp_leap.c \ - ntp_loopfilter.c ntp_monitor.c ntp_peer.c ntp_proto.c \ - ntp_refclock.c ntp_request.c ntp_restrict.c ntp_timer.c \ - ntp_unixclock.c ntp_util.c ntp_intres.c ntp_filegen.c ntpd.c \ - refclock_conf.c refclock_chu.c refclock_local.c \ - refclock_pst.c refclock_wwvb.c refclock_goes.c \ - refclock_mx4200.c refclock_parse.c refclock_as2201.c \ - refclock_omega.c refclock_tpro.c refclock_leitch.c \ - refclock_irig.c refclock_msfees.c refclock_gpstm.c \ - refclock_trak.c refclock_datum.c refclock_acts.c \ - refclock_heath.c, refclock_nmea.c refclock_moto.c \ - refclock_atom.c - -OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \ - ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \ - ntp_refclock.o ntp_request.o ntp_restrict.o ntp_timer.o \ - ntp_unixclock.o ntp_util.o ntp_intres.o ntp_filegen.o ntpd.o \ - refclock_conf.o refclock_chu.o refclock_local.o \ - refclock_pst.o refclock_wwvb.o refclock_goes.o \ - refclock_mx4200.o refclock_parse.o refclock_as2201.o \ - refclock_omega.o refclock_tpro.o refclock_leitch.o \ - refclock_irig.o refclock_msfees.o refclock_gpstm.o \ - refclock_trak.o refclock_datum.o refclock_acts.o \ - refclock_heath.o refclock_nmea.o refclock_moto.o \ - refclock_atom.o - -all: $(PROGRAM) - -$(PROGRAM): $(OBJS) $(LIB) version.o - -rm -f $(PROGRAM) - $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(DAEMONLIBS) \ - $(RESLIB) $(ADJLIB) $(COMPAT) - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) - $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -tags: - ctags *.c *.h - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) *.o *.out tags oxntpd make.log Makefile.bak lint.errs - -@rm -f .depend *~ .version - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -lint: $(LINTLIB) - lint -x -u $(DEFS) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs - -../lib/llib-llibntp.ln: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - -../parse/libparse.a: - cd ../parse && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - -# -# we want to build the current version string here -# -version.o: ../VERSION - ../scripts/mkversion $(PROGRAM) - $(CC) $(COPTS) $(INCL) -c version.c - -../VERSION: - -@rm -f .version -# -# These guys require knowledge of our clock configuration -# -refclock_chu.o: refclock_chu.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_conf.o: refclock_conf.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_local.o: refclock_local.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_pst.o: refclock_pst.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_goes.o: refclock_goes.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_wwvb.o: refclock_wwvb.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_parse.o: refclock_parse.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_mx4200.o: refclock_mx4200.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_as2201.o: refclock_as2201.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_omega.o: refclock_omega.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_tpro.o: refclock_tpro.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_leitch.o: refclock_leitch.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_irig.o: refclock_irig.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_msfees.o: refclock_msfees.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_trak.o: refclock_trak.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_gpstm.o: refclock_gpstm.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_datum.o: refclock_datum.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_acts.o: refclock_acts.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_heath.o: refclock_heath.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_nmea.o: refclock_nmea.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_moto.o: refclock_moto.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c - -refclock_atom.o: refclock_atom.c - $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_datum.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_datum.c deleted file mode 100644 index 2ce53a7..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_datum.c +++ /dev/null @@ -1,593 +0,0 @@ -/* - * refclock_datum.c - clock driver for the Datum/Bancomm - * bc635VME Time and Frequency Processor. - * R. Schmidt, Time Service, US Naval Obs. May 94 - * modelled after the TPRO NTP driver. - * - * This requires the Datum HP-UX V9.01 kernel driver and the HP-UX vme2 - * driver subsystem. It has been tested on an HP9000/747i at HP-UX 9.03. - * There are no restrictions on release and use of the following code. - * The refclock type has been defined as 16. - */ -#if defined(REFCLOCK) && defined(DATUM) -#include <stdio.h> -#include <syslog.h> -#include <ctype.h> -#include <string.h> -#include <strings.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" -#include "/etc/conf/machine/vme2.h" -#include "/etc/conf/h/io.h" -#include "ntp_datum.h" -#include "ntp_stdlib.h" - -/* - * Definitions - */ -#define MAXUNITS 1 /* max number of VME units */ -#define BMAX 50 /* timecode buffer length */ - -/* - * VME interface parameters. The "IRIG" can be changed to "GPS" for the - * VME-GPS. - */ -#define VMEPRECISION (-21) /* precision assumed (1 us) */ -#define VMEREFID "IRIG" /* reference id */ -#define VMEDESCRIPTION "Datum/ VME IRIG-B Reader" /* who we are */ -#define VMEHSREFID 0x7f7f1000 /* 127.127.16.00 refid hi strata */ -#define GMT 0 /* hour offset from Greenwich */ - -/* - * Imported from ntp_timer module - */ -extern u_long current_time; /* current time (s) */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * VME unit control structure. - */ -struct vmeunit { - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - struct vmedate vmedata; /* data returned from vme read */ - l_fp lastrec; /* last local time */ - l_fp lastref; /* last timecode time */ - char lastcode[BMAX]; /* last timecode received */ - u_short lencode; /* length of last timecode */ - u_long lasttime; /* last time clock heard from */ - u_short unit; /* unit number for this guy */ - u_short status; /* clock status */ - u_short lastevent; /* last clock event */ - u_short year; /* year of eternity */ - u_short day; /* day of year */ - u_short hour; /* hour of day */ - u_short minute; /* minute of hour */ - u_short second; /* seconds of minute */ - u_long usec; /* microsecond of second */ - u_long yearstart; /* start of current year */ - u_short leap; /* leap indicators */ - /* - * Status tallies - */ - u_long polls; /* polls sent */ - u_long noreply; /* no replies to polls */ - u_long coderecv; /* timecodes received */ - u_long badformat; /* bad format */ - u_long baddata; /* bad data */ - u_long timestarted; /* time we started this */ -}; - -/* - * Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. - */ -static struct vmeunit *vmeunits[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; - -/* - * Keep the fudge factors separately so they can be set even - * when no clock is configured. - */ -static l_fp fudgefactor[MAXUNITS]; -static u_char stratumtouse[MAXUNITS]; -static u_char sloppyclockflag[MAXUNITS]; - -/* - * Function prototypes - */ -static void vme_init P(()); -static int vme_start P((u_int, struct peer *)); -static void vme_shutdown P((int)); -static void vme_report_event P((struct vmeunit *, int)); -static void vme_receive P((struct recvbuf *)); -static void vme_poll P((int unit, struct peer *)); -static void vme_control P((u_int, struct refclockstat *, struct refclockstat *)); -static void vme_buginfo P((int, struct refclockbug *)); -struct vmedate *get_datumtime(); - -/* - * Transfer vector - */ -struct refclock refclock_vme = { - vme_start, vme_shutdown, vme_poll, - vme_control, vme_init, vme_buginfo, NOFLAGS -}; - -int fd_vme; /* file descriptor for ioctls */ -int regvalue; - -/* - * vme_init - initialize internal vme driver data - */ -static void -vme_init() -{ - register int i; - /* - * Just zero the data arrays - */ - /* - bzero((char *)vmeunits, sizeof vmeunits); - bzero((char *)unitinuse, sizeof unitinuse); - */ - - /* - * Initialize fudge factors to default. - */ - for (i = 0; i < MAXUNITS; i++) { - fudgefactor[i].l_ui = 0; - fudgefactor[i].l_uf = 0; - stratumtouse[i] = 0; - sloppyclockflag[i] = 0; - } -} - -/* - * vme_start - open the VME device and initialize data for processing - */ -static int -vme_start(unit, peer) - u_int unit; - struct peer *peer; -{ - register struct vmeunit *vme; - register int i; - int dummy; - char vmedev[20]; - - /* - * Check configuration info. - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "vme_start: unit %d invalid", unit); - return (0); - } - if (unitinuse[unit]) { - syslog(LOG_ERR, "vme_start: unit %d in use", unit); - return (0); - } - - /* - * Open VME device - */ - - if ( (fd_vme = open(VMEFD, O_RDWR)) < 0) { - syslog(LOG_ERR, "vme_start: failed open of %s: %m", vmedev); - return (0); - } - else { /* Release capture lockout in case it was set from before. */ - if( ioctl( fd_vme, RUNLOCK, &dummy ) ) - syslog(LOG_ERR, "vme_start: RUNLOCK failed %m"); - - regvalue = 0; /* More esoteric stuff to do... */ - if( ioctl( fd_vme, WCR0, ®value ) ) - syslog(LOG_ERR, "vme_start: WCR0 failed %m"); - } - - /* - * Allocate unit structure - */ - if (vmeunits[unit] != 0) { - vme = vmeunits[unit]; /* The one we want is okay */ - } else { - for (i = 0; i < MAXUNITS; i++) { - if (!unitinuse[i] && vmeunits[i] != 0) - break; - } - if (i < MAXUNITS) { - /* - * Reclaim this one - */ - vme = vmeunits[i]; - vmeunits[i] = 0; - } else { - vme = (struct vmeunit *) - emalloc(sizeof(struct vmeunit)); - } - } - bzero((char *)vme, sizeof(struct vmeunit)); - vmeunits[unit] = vme; - - /* - * Set up the structures - */ - vme->peer = peer; - vme->unit = (u_short)unit; - vme->timestarted = current_time; - - vme->io.clock_recv = vme_receive; - vme->io.srcclock = (caddr_t)vme; - vme->io.datalen = 0; - vme->io.fd = fd_vme; - - /* - * All done. Initialize a few random peer variables, then - * return success. Note that root delay and root dispersion are - * always zero for this clock. - */ - peer->precision = VMEPRECISION; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) - bcopy(VMEREFID, (char *)&peer->refid, 4); - else - peer->refid = htonl(VMEHSREFID); - unitinuse[unit] = 1; - return (1); -} - - -/* - * vme_shutdown - shut down a VME clock - */ -static void -vme_shutdown(unit) - int unit; -{ - register struct vmeunit *vme; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "vme_shutdown: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "vme_shutdown: unit %d not in use", unit); - return; - } - - /* - * Tell the I/O module to turn us off. We're history. - */ - vme = vmeunits[unit]; - io_closeclock(&vme->io); - unitinuse[unit] = 0; -} - -/* - * vme_report_event - note the occurance of an event - * - * This routine presently just remembers the report and logs it, but - * does nothing heroic for the trap handler. - */ -static void -vme_report_event(vme, code) - struct vmeunit *vme; - int code; -{ - struct peer *peer; - - peer = vme->peer; - if (vme->status != (u_short)code) { - vme->status = (u_short)code; - if (code != CEVNT_NOMINAL) - vme->lastevent = (u_short)code; - syslog(LOG_INFO, - "clock %s event %x", ntoa(&peer->srcadr), code); - } -} - - -/* - * vme_receive - receive data from the VME device. - * - * Note: This interface would be interrupt-driven. We don't use that - * now, but include a dummy routine for possible future adventures. - */ -static void -vme_receive(rbufp) - struct recvbuf *rbufp; -{ -} - -/* - * vme_poll - called by the transmit procedure - */ -static void -vme_poll(unit, peer) - int unit; - struct peer *peer; -{ - struct vmedate *tptr; - struct vmeunit *vme; - l_fp tstmp; - time_t tloc; - struct tm *tadr; - - - vme = (struct vmeunit *)emalloc(sizeof(struct vmeunit *)); - tptr = (struct vmedate *)emalloc(sizeof(struct vmedate *)); - - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "vme_poll: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "vme_poll: unit %d not in use", unit); - return; - } - vme = vmeunits[unit]; /* Here is the structure */ - vme->polls++; - - tptr = &vme->vmedata; - if ((tptr = get_datumtime()) == NULL ) { - vme_report_event(vme, CEVNT_BADREPLY); - return; - } - - gettstamp(&vme->lastrec); - vme->lasttime = current_time; - - /* - * Get VME time and convert to timestamp format. - * The year must come from the system clock. - */ - - time(&tloc); - tadr = gmtime(&tloc); - tptr->year = (unsigned short)(tadr->tm_year + 1900); - - sprintf(vme->lastcode, - "%3.3d %2.2d:%2.2d:%2.2d.%.6d %1d\0", - tptr->doy, tptr->hr, tptr->mn, - tptr->sec, tptr->frac, tptr->status); - - record_clock_stats(&(vme->peer->srcadr), vme->lastcode); - vme->lencode = (u_short) strlen(vme->lastcode); - - vme->day = tptr->doy; - vme->hour = tptr->hr; - vme->minute = tptr->mn; - vme->second = tptr->sec; - vme->usec = tptr->frac; - -#ifdef DEBUG - if (debug) - printf("vme: %3d %02d:%02d:%02d.%06ld %1x\n", - vme->day, vme->hour, vme->minute, vme->second, - vme->usec, tptr->status); -#endif - if (tptr->status ) { /* Status 0 is locked to ref., 1 is not */ - vme_report_event(vme, CEVNT_BADREPLY); - return; - } - - /* - * Now, compute the reference time value. Use the heavy - * machinery for the seconds and the millisecond field for the - * fraction when present. If an error in conversion to internal - * format is found, the program declares bad data and exits. - * Note that this code does not yet know how to do the years and - * relies on the clock-calendar chip for sanity. - */ - if (!clocktime(vme->day, vme->hour, vme->minute, - vme->second, GMT, vme->lastrec.l_ui, - &vme->yearstart, &vme->lastref.l_ui)) { - vme->baddata++; - vme_report_event(vme, CEVNT_BADTIME); - syslog(LOG_ERR, "refclock_datum: bad data!!"); - return; - } - TVUTOTSF(vme->usec, vme->lastref.l_uf); - tstmp = vme->lastref; - - L_SUB(&tstmp, &vme->lastrec); - vme->coderecv++; - - L_ADD(&tstmp, &(fudgefactor[vme->unit])); - - refclock_receive(vme->peer, &tstmp, GMT, 0, - &vme->lastrec, &vme->lastrec, vme->leap); -} - -/* - * vme_control - set fudge factors, return statistics - */ -static void -vme_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct vmeunit *vme; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "vme_control: unit %d invalid)", unit); - return; - } - - if (in != 0) { - if (in->haveflags & CLK_HAVETIME1) - fudgefactor[unit] = in->fudgetime1; - if (in->haveflags & CLK_HAVEVAL1) { - stratumtouse[unit] = (u_char)(in->fudgeval1 & 0xf); - if (unitinuse[unit]) { - struct peer *peer; - - /* - * Should actually reselect clock, but - * will wait for the next timecode - */ - vme = vmeunits[unit]; - peer = vme->peer; - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) - bcopy(VMEREFID, (char *)&peer->refid, - 4); - else - peer->refid = htonl(VMEHSREFID); - } - } - if (in->haveflags & CLK_HAVEFLAG1) { - sloppyclockflag[unit] = in->flags & CLK_FLAG1; - } - } - - if (out != 0) { -/* out->type = REFCLK_IRIG_VME; */ - out->type = 16; /* made up by RES */ - out->haveflags - = CLK_HAVETIME1|CLK_HAVEVAL1|CLK_HAVEVAL2|CLK_HAVEFLAG1; - out->clockdesc = VMEDESCRIPTION; - out->fudgetime1 = fudgefactor[unit]; - out->fudgetime2.l_ui = 0; - out->fudgetime2.l_uf = 0; - out->fudgeval1 = (LONG)stratumtouse[unit]; - out->fudgeval2 = 0; - out->flags = sloppyclockflag[unit]; - if (unitinuse[unit]) { - vme = vmeunits[unit]; - out->lencode = vme->lencode; - out->lastcode = vme->lastcode; - out->timereset = current_time - vme->timestarted; - out->polls = vme->polls; - out->noresponse = vme->noreply; - out->badformat = vme->badformat; - out->baddata = vme->baddata; - out->lastevent = vme->lastevent; - out->currentstatus = vme->status; - } else { - out->lencode = 0; - out->lastcode = ""; - out->polls = out->noresponse = 0; - out->badformat = out->baddata = 0; - out->timereset = 0; - out->currentstatus = out->lastevent = CEVNT_NOMINAL; - } - } -} - -/* - * vme_buginfo - return clock dependent debugging info - */ -static void -vme_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ - register struct vmeunit *vme; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "vme_buginfo: unit %d invalid)", unit); - return; - } - - if (!unitinuse[unit]) - return; - vme = vmeunits[unit]; - - bug->nvalues = 11; - bug->ntimes = 5; - if (vme->lasttime != 0) - bug->values[0] = current_time - vme->lasttime; - else - bug->values[0] = 0; - bug->values[2] = (u_long)vme->year; - bug->values[3] = (u_long)vme->day; - bug->values[4] = (u_long)vme->hour; - bug->values[5] = (u_long)vme->minute; - bug->values[6] = (u_long)vme->second; - bug->values[7] = (u_long)vme->usec; - bug->values[9] = vme->yearstart; - bug->stimes = 0x1c; - bug->times[0] = vme->lastref; - bug->times[1] = vme->lastrec; -} - -struct vmedate *get_datumtime() -{ - unsigned short status; - char cbuf[7]; - struct vmedate *time_vme; - struct btfp_time vts; - time_vme = (struct vmedate *)malloc(sizeof(struct vmedate )); - - if( ioctl(fd_vme, READTIME, &vts)) - syslog(LOG_ERR, "get_datumtime error: %m"); - -/* sprintf converts BCD to ASCII */ -/* Get doy */ - sprintf(cbuf,"%3.3x\0", ((vts.btfp_time[ 0 ] & 0x000f) <<8) + - ((vts.btfp_time[ 1 ] & 0xff00) >> 8)); - - if (isdigit(cbuf[0]) && isdigit(cbuf[1]) && isdigit(cbuf[2]) ) - time_vme->doy = (unsigned short)atoi(cbuf); - else - time_vme->doy = (unsigned short) 0; - -/* Get hour */ - sprintf(cbuf,"%2.2x\0", vts.btfp_time[ 1 ] & 0x00ff); - - if (isdigit(cbuf[0]) && isdigit(cbuf[1])) - time_vme->hr = (unsigned short)atoi(cbuf); - else - time_vme->hr = (unsigned short) 0; - -/* Get minutes */ - sprintf(cbuf,"%2.2x\0", (vts.btfp_time[ 2 ] & 0xff00) >>8); - if (isdigit(cbuf[0]) && isdigit(cbuf[1])) - time_vme->mn = (unsigned short)atoi(cbuf); - else - time_vme->mn = (unsigned short) 0; - -/* Get seconds */ - sprintf(cbuf,"%2.2x\0", vts.btfp_time[ 2 ] & 0x00ff); - - if (isdigit(cbuf[0]) && isdigit(cbuf[1])) - time_vme->sec = (unsigned short)atoi(cbuf); - else - time_vme->sec = (unsigned short) 0; - -/* Get microseconds. Yes, we ignore the 0.1 microsecond digit so we can -use the TVTOTSF function later on...*/ - - sprintf(cbuf,"%4.4x%2.2x\0", vts.btfp_time[ 3 ], - vts.btfp_time[ 4 ]>>8); - - if (isdigit(cbuf[0]) && isdigit(cbuf[1]) && isdigit(cbuf[2]) - && isdigit(cbuf[3]) && isdigit(cbuf[4]) && isdigit(cbuf[5])) - time_vme->frac = (u_long) atoi(cbuf); - else - time_vme->frac = (u_long) 0; - -/* Get status bit */ - status = (vts.btfp_time[0] & 0x0010) >>4; - time_vme->status = status; /* Status=0 if locked to ref. */ - /* Status=1 if flywheeling */ - if (status) { /* lost lock ? */ - return ((void *)NULL); - } - else - return (time_vme); -} -#endif diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_gpstm.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_gpstm.c deleted file mode 100644 index deab7f4..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_gpstm.c +++ /dev/null @@ -1,999 +0,0 @@ -/* - * refclock_gpstm - clock driver for the Kinimetrics Truetime GPSTM/TMD rcvr - * Version 1.0 (from Version 2.0 of the GOES driver, as of 03Jan94) - */ - -#if defined(REFCLOCK) && (defined(GPSTM) || defined(GPSTMCLK) \ - || defined(GPSTMPPS)) - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" - -#ifdef SYS_BSDI -#undef HAVE_BSD_TTYS -#include <sys/ioctl.h> -#endif - -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ - -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ - -#if defined(HAVE_TERMIOS) -#include <termios.h> -#endif - -#if defined(STREAM) -#include <stropts.h> -#if defined(GPSTMCLK) -#include <clkdefs.h> -#endif /* GPSTMCLK */ -#endif /* STREAM */ - -#if defined(GPSTMPPS) -#include <sys/ppsclock.h> -#endif /* GPSTMPPS */ - -#include "ntp_stdlib.h" - -/* - * Support for Kinemetrics Truetime GPS-TM/TMD Receiver - * - * Most of this code is copied from refclock_goes.c with thanks. - * - * the time code looks like follows: - * - * ADDD:HH:MM:SSQCL - * A - control A - * Q Quality indication: indicates possible error of - * ? +/- 500 milliseconds # +/- 50 milliseconds - * * +/- 5 milliseconds . +/- 1 millisecond - * space less than 1 millisecond - * C - Carriage return - * L - Line feed - * The carriage return start bit begins on 0 seconds and extends to 1 bit time. - * - * Flag1 set to 1 will silence the clock side of xntpd, just reading the - * clock without trying to write to it. This is usefull if several - * xntpds listen to the same clock. This has not been tested yet... - */ - -/* - * Definitions - */ -#define MAXUNITS 4 /* max number of GPSTM units */ -#define GPSTM232 "/dev/gpstm%d" -#define SPEED232 B9600 /* 9600 baud */ - -/* - * Radio interface parameters - */ -#define MAXDISPERSE (FP_SECOND>>1) /* max error for synchronized clock (0.5 s as an u_fp) */ -#define PRECISION (-20) /* precision assumed (about 1 ms) */ -#define REFID "GPS\0" /* reference id */ -#define DESCRIPTION "Kinemetrics GPS-TM/TMD Receiver" /* who we are */ -#define GMT 0 /* hour offset from Greenwich */ -#define NCODES 3 /* stages of median filter */ -#define BMAX 99 /* timecode buffer length */ -#define CODEDIFF 0x20000000 /* 0.125 seconds as an l_fp fraction */ -#define TIMEOUT 180 /* ping the clock if it's silent this long */ - -/* - * used by the state machine - */ -enum gpstm_event {e_Init, e_F18, e_F50, e_F51, e_TS}; -static enum {Base, Start, F18, F50, F51, F08} State[MAXUNITS]; -static void gpstm_doevent P((int, enum gpstm_event)); -static void gpstm_initstate P((int)); - -/* - * Hack to avoid excercising the multiplier. I have no pride. - */ -#define MULBY10(x) (((x)<<3) + ((x)<<1)) - -/* - * Imported from the timer module - */ -extern u_long current_time; -extern struct event timerqueue[]; - -/* - * Imported from ntp_loopfilter module - */ -extern int fdpps; /* pps file descriptor */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * GPSTM unit control structure - */ -struct gpstm_unit { - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - l_fp lastrec; /* last receive time */ - l_fp lastref; /* last timecode time */ - l_fp offset[NCODES]; /* recent sample offsets */ - char lastcode[BMAX]; /* last timecode received */ - u_short polled; /* Hand in a time sample? */ - u_char lencode; /* length of last timecode */ - u_long lasttime; /* last time clock heard from */ - u_char unit; /* unit number for this guy */ - u_char status; /* clock status */ - u_char lastevent; /* last clock event */ - u_char reason; /* reason for last abort */ - u_char year; /* year of eternity */ - u_short day; /* day of year */ - u_char hour; /* hour of day */ - u_char minute; /* minute of hour */ - u_char second; /* seconds of minute */ - u_char leap; /* leap indicators */ - u_short msec; /* millisecond of second */ - u_char quality; /* quality character */ - u_long yearstart; /* start of current year */ - /* - * Status tallies - */ - u_long polls; /* polls sent */ - u_long noreply; /* no replies to polls */ - u_long coderecv; /* timecodes received */ - u_long badformat; /* bad format */ - u_long baddata; /* bad data */ - u_long timestarted; /* time we started this */ -}; - -/* - * Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. - */ -static struct gpstm_unit *gpstm_units[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; - -/* - * Keep the fudge factors separately so they can be set even - * when no clock is configured. - */ -static l_fp fudgefactor1[MAXUNITS]; -static l_fp fudgefactor2[MAXUNITS]; -static u_char stratumtouse[MAXUNITS]; -static u_char readonlyclockflag[MAXUNITS]; -static u_long refid[MAXUNITS]; - -/* - * Function prototypes - */ -static void gpstm_init P((void)); -static int gpstm_start P((u_int, struct peer *)); -static void gpstm_shutdown P((int)); -static void gpstm_rep_event P((struct gpstm_unit *, int)); -static void gpstm_receive P((struct recvbuf *)); -static char gpstm_process P((struct gpstm_unit *, l_fp *, u_fp *)); -static void gpstm_poll P((int, struct peer *)); -static void gpstm_control P((u_int, struct refclockstat *, - struct refclockstat *)); -static void gpstm_buginfo P((int, struct refclockbug *)); -static void gpstm_send P((struct gpstm_unit *, char *)); - -struct refclock refclock_gpstm = { - gpstm_start, gpstm_shutdown, gpstm_poll, - gpstm_control, gpstm_init, gpstm_buginfo, NOFLAGS -}; - -/* - * gpstm_init - initialize internal driver data - */ -static void -gpstm_init() -{ - register int i; - /* - * Just zero the data arrays - */ - memset((char *)gpstm_units, 0, sizeof gpstm_units); - memset((char *)unitinuse, 0, sizeof unitinuse); - - /* - * Initialize fudge factors to default. - */ - for (i = 0; i < MAXUNITS; i++) { - fudgefactor1[i].l_ui = 0; - fudgefactor1[i].l_uf = 0; - fudgefactor2[i].l_ui = 0; - fudgefactor2[i].l_uf = 0; - stratumtouse[i] = 0; - readonlyclockflag[i] = 0; - memcpy((char *)&refid[i], REFID, 4); - } -} - - -/* - * gpstm_start - open the device and initialize data for processing - */ -static int -gpstm_start(unit, peer) - u_int unit; - struct peer *peer; -{ - register struct gpstm_unit *gpstm; - register int i; - int fd232; - char dev[20]; - - /* - * Check configuration info - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_start: unit %d invalid", unit); - return 0; - } - if (unitinuse[unit]) { - syslog(LOG_ERR, "gpstm_start: unit %d in use", unit); - return 0; - } - - /* - * Open serial port - */ - (void) sprintf(dev, GPSTM232, unit); - fd232 = open(dev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, "gpstm_start: open of %s: %m", dev); - return 0; - } - -#if defined(HAVE_SYSV_TTYS) - /* - * System V serial line parameters (termio interface) - * - */ - { struct termio ttyb; - if (ioctl(fd232, TCGETA, &ttyb) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TCGETA): %m", dev); - goto screwed; - } - ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyb.c_oflag = 0; - ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyb.c_lflag = ICANON; - ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0'; - if (ioctl(fd232, TCSETA, &ttyb) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TCSETA): %m", dev); - goto screwed; - } - } -#endif /* HAVE_SYSV_TTYS */ -#if defined(HAVE_TERMIOS) - /* - * POSIX serial line parameters (termios interface) - * - * The GPSTMCLK option provides timestamping at the driver level. - * It requires the tty_clk streams module. - * - * The GPSTMPPS option provides timestamping at the driver level. - * It uses a 1-pps signal and level converter (gadget box) and - * requires the ppsclock streams module and SunOS 4.1.1 or - * later. - */ - { struct termios ttyb, *ttyp; - ttyp = &ttyb; - - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, - "gpstm_start: tcgetattr(%s): %m", dev); - goto screwed; - } - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_oflag = 0; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, - "gpstm_start: tcsetattr(%s): %m", dev); - goto screwed; - } - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, - "gpstm_start: tcflush(%s): %m", dev); - goto screwed; - } -#if defined(STREAM) -#if defined(GPSTMCLK) - if (ioctl(fd232, I_PUSH, "clk") < 0) - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, I_PUSH, clk): %m", dev); - if (ioctl(fd232, CLK_SETSTR, "\n") < 0) - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, CLK_SETSTR): %m", dev); -#endif /* GPSTMCLK */ -#if defined(GPSTMPPS) - if (ioctl(fd232, I_PUSH, "ppsclock") < 0) - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, I_PUSH, ppsclock): %m", dev); - else - fdpps = fd232; -#endif /* GPSTMPPS */ -#endif /* STREAM */ - } -#endif /* HAVE_TERMIOS */ -#if defined(HAVE_BSD_TTYS) - /* - * 4.3bsd serial line parameters (sgttyb interface) - * - * The GPSTMCLK option provides timestamping at the driver level. - * It requires the tty_clk line discipline and 4.3bsd or later. - */ - { struct sgttyb ttyb; -#if defined(GPSTMCLK) - int ldisc = CLKLDISC; -#endif /* GPSTMCLK */ - - if (ioctl(fd232, TIOCGETP, &ttyb) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TIOCGETP): %m", dev); - goto screwed; - } - ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232; -#if defined(GPSTMCLK) - ttyb.sg_erase = ttyb.sg_kill = '\r'; - ttyb.sg_flags = RAW; -#else - ttyb.sg_erase = ttyb.sg_kill = '\0'; - ttyb.sg_flags = EVENP|ODDP|CRMOD; -#endif /* GPSTMCLK */ - if (ioctl(fd232, TIOCSETP, &ttyb) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TIOCSETP): %m", dev); - goto screwed; - } -#if defined(GPSTMCLK) - if (ioctl(fd232, TIOCSETD, &ldisc) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TIOCSETD): %m", dev); - goto screwed; - } -#endif /* GPSTMCLK */ - } -#endif /* HAVE_BSD_TTYS */ - - /* - * Allocate unit structure - */ - if (gpstm_units[unit] != 0) { - gpstm = gpstm_units[unit]; /* The one we want is okay */ - } else { - for (i = 0; i < MAXUNITS; i++) { - if (!unitinuse[i] && gpstm_units[i] != 0) - break; - } - if (i < MAXUNITS) { - /* - * Reclaim this one - */ - gpstm = gpstm_units[i]; - gpstm_units[i] = 0; - } else { - gpstm = (struct gpstm_unit *) - emalloc(sizeof(struct gpstm_unit)); - } - } - memset((char *)gpstm, 0, sizeof(struct gpstm_unit)); - gpstm_units[unit] = gpstm; - - /* - * Set up the structures - */ - gpstm->peer = peer; - gpstm->unit = (u_char)unit; - gpstm->timestarted = current_time; - - gpstm->io.clock_recv = gpstm_receive; - gpstm->io.srcclock = (caddr_t)gpstm; - gpstm->io.datalen = 0; - gpstm->io.fd = fd232; - if (!io_addclock(&gpstm->io)) { - goto screwed; - } - - /* - * All done. Initialize a few random peer variables, then - * return success. - */ - peer->precision = PRECISION; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - unitinuse[unit] = 1; - gpstm_initstate(unit); - return 1; - - /* - * Something broke; abandon ship - */ -screwed: - (void) close(fd232); - return 0; -} - -/* - * gpstm_shutdown - shut down a clock - */ -static void -gpstm_shutdown(unit) - int unit; -{ - register struct gpstm_unit *gpstm; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_shutdown: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "gpstm_shutdown: unit %d not in use", unit); - return; - } - - /* - * Tell the I/O module to turn us off. We're history. - */ - gpstm = gpstm_units[unit]; - io_closeclock(&gpstm->io); - unitinuse[unit] = 0; -} - - -/* - * gpstm_rep_event - note the occurance of an event - */ -static void -gpstm_rep_event(gpstm, code) - struct gpstm_unit *gpstm; - int code; -{ - struct peer *peer; - - peer = gpstm->peer; - if (gpstm->status != (u_char)code) { - gpstm->status = (u_char)code; - if (code != CEVNT_NOMINAL) - gpstm->lastevent = (u_char)code; - syslog(LOG_INFO, - "clock %s event %x\n", ntoa(&peer->srcadr), code); -#ifdef DEBUG - if (debug) { - printf("gpstm_rep_event(gpstm%d, code %d)\n", - gpstm->unit, code); - } -#endif - } - if (code == CEVNT_BADREPLY) - gpstm_initstate(gpstm->unit); -} - - -/* - * gpstm_receive - receive data from the serial interface on a clock - */ -static void -gpstm_receive(rbufp) - struct recvbuf *rbufp; -{ - register int i; - register struct gpstm_unit *gpstm; - register u_char *dpt; - register char *cp; - register u_char *dpend; - l_fp tstmp; - u_fp dispersion; - - /* - * Get the clock this applies to and a pointers to the data - */ - gpstm = (struct gpstm_unit *)rbufp->recv_srcclock; - dpt = (u_char *)&rbufp->recv_space; - - /* - * Edit timecode to remove control chars - */ - dpend = dpt + rbufp->recv_length; - cp = gpstm->lastcode; - while (dpt < dpend) { - if ((*cp = 0x7f & *dpt++) >= ' ') cp++; -#ifdef GPSTMCLK - else if (*cp == '\r') { - if (dpend - dpt < 8) { - /* short timestamp */ - return; - } - if (!buftvtots(dpt,&gpstm->lastrec)) { - /* screwy timestamp */ - return; - } - dpt += 8; - } -#endif - } - *cp = '\0'; - gpstm->lencode = cp - gpstm->lastcode; - if (gpstm->lencode == 0) - return; -#ifndef GPSTMCLK - gpstm->lastrec = rbufp->recv_time; -#endif /* GPSTMCLK */ -#if !defined(GPSTMCLK) && !defined(GPSTMPPS) && defined(TIOCMODT) - do { - auto struct timeval cur, now; - register long usec; - - if (ioctl(gpstm->io.fd, TIOCMODT, &cur) < 0) { - syslog(LOG_ERR, "TIOCMODT: %m"); -#ifdef DEBUG - if (debug) perror("TIOCMODT"); - break; -#endif - } - if (cur.tv_sec == 0) { - /* no timestamps yet */ - if (debug) printf("MODT tv_sec == 0\n"); - break; - } - - gettimeofday(&now, NULL); - usec = 1000000 * (now.tv_sec - cur.tv_sec) - + (now.tv_usec - cur.tv_usec); -#ifdef DEBUG - if (debug) printf("lastmodem: delay=%d us\n", usec); -#endif - if (usec < 0 || usec > 10000) { - /* time warp or stale timestamp */ - break; - } - if (!buftvtots((char *)&cur, &gpstm->lastrec)) { - /* screwy timestamp */ - break; - } - } while (0); -#endif /*TIOCMODT*/ - -#ifdef DEBUG - if (debug) - printf("gpstm: timecode %d %s\n", - gpstm->lencode, gpstm->lastcode); -#endif - - cp = gpstm->lastcode; - gpstm->leap = 0; - if ((cp[0] == 'F' && isdigit(cp[1]) && isdigit(cp[2])) - || (cp[0] == ' ' && cp[1] == 'T' && cp[2] == 'R')) { - enum gpstm_event event; - - syslog(LOG_NOTICE, "gpstm%d: \"%s\"", gpstm->unit, cp); - if (cp[1] == '5' && cp[2] == '0') - event = e_F50; - else if (cp[1] == '5' && cp[2] == '1') - event = e_F51; - else if (!strncmp(" TRUETIME Mk III", cp, 16)) - event = e_F18; - else { - gpstm_rep_event(gpstm, CEVNT_BADREPLY); - return; - } - gpstm_doevent(gpstm->unit, event); - return; - } else if (gpstm->lencode == 13) { - /* - * Check timecode format 0 - */ - if (!isdigit(cp[0]) /* day of year */ - || !isdigit(cp[1]) - || !isdigit(cp[2]) - || cp[3] != ':' /* : separator */ - || !isdigit(cp[4]) /* hours */ - || !isdigit(cp[5]) - || cp[6] != ':' /* : separator */ - || !isdigit(cp[7]) /* minutes */ - || !isdigit(cp[8]) - || cp[9] != ':' /* : separator */ - || !isdigit(cp[10]) /* seconds */ - || !isdigit(cp[11])) - { - gpstm->badformat++; - gpstm_rep_event(gpstm, CEVNT_BADREPLY); - return; - } - - /* - * Convert format 0 and check values - */ - gpstm->year = 0; /* fake */ - gpstm->day = cp[0] - '0'; - gpstm->day = MULBY10(gpstm->day) + cp[1] - '0'; - gpstm->day = MULBY10(gpstm->day) + cp[2] - '0'; - gpstm->hour = MULBY10(cp[4] - '0') + cp[5] - '0'; - gpstm->minute = MULBY10(cp[7] - '0') + cp[8] - '0'; - gpstm->second = MULBY10(cp[10] - '0') + cp[11] - '0'; - gpstm->msec = 0; - - if (cp[12] != ' ' && cp[12] != '.' && cp[12] != '*') - gpstm->leap = LEAP_NOTINSYNC; - else - gpstm->lasttime = current_time; - - if (gpstm->day < 1 || gpstm->day > 366) { - gpstm->baddata++; - gpstm_rep_event(gpstm, CEVNT_BADDATE); - return; - } - if (gpstm->hour > 23 || gpstm->minute > 59 - || gpstm->second > 59) { - gpstm->baddata++; - gpstm_rep_event(gpstm, CEVNT_BADTIME); - return; - } - gpstm_doevent(gpstm->unit, e_TS); - } else { - gpstm_rep_event(gpstm, CEVNT_BADREPLY); - return; - } - - /* - * The clock will blurt a timecode every second but we only - * want one when polled. If we havn't been polled, bail out. - */ - if (!gpstm->polled) - return; - - /* - * Now, compute the reference time value. Use the heavy - * machinery for the seconds and the millisecond field for the - * fraction when present. - * - * this code does not yet know how to do the years - */ - tstmp = gpstm->lastrec; - if (!clocktime(gpstm->day, gpstm->hour, gpstm->minute, - gpstm->second, GMT, tstmp.l_ui, - &gpstm->yearstart, &gpstm->lastref.l_ui)) - { - gpstm->baddata++; - gpstm_rep_event(gpstm, CEVNT_BADTIME); - return; - } - MSUTOTSF(gpstm->msec, gpstm->lastref.l_uf); - - i = ((int)(gpstm->coderecv)) % NCODES; - gpstm->offset[i] = gpstm->lastref; - L_SUB(&gpstm->offset[i], &tstmp); - if (gpstm->coderecv == 0) - for (i = 1; i < NCODES; i++) - gpstm->offset[i] = gpstm->offset[0]; - - gpstm->coderecv++; - - /* - * Process the median filter, and pass the - * offset and dispersion along. We use lastrec as both the - * reference time and receive time in order to avoid being cute, - * like setting the reference time later than the receive time, - * which may cause a paranoid protocol module to chuck out the - * data. - */ - if (!gpstm_process(gpstm, &tstmp, &dispersion)) { - gpstm->baddata++; - gpstm_rep_event(gpstm, CEVNT_BADTIME); - return; - } - refclock_receive(gpstm->peer, &tstmp, GMT, dispersion, - &gpstm->lastrec, &gpstm->lastrec, gpstm->leap); - - /* - * We have succedded in answering the poll. Turn off the flag - */ - gpstm->polled = 0; -} - -/* - * gpstm_send - time to send the clock a signal to cough up a time sample - */ -static void -gpstm_send(gpstm, cmd) - struct gpstm_unit *gpstm; - char *cmd; -{ -#ifdef DEBUG - if (debug) { - printf("gpstm_send(gpstm%d): %s\n", gpstm->unit, cmd); - } -#endif - if (!readonlyclockflag[gpstm->unit]) { - register int len = strlen(cmd); - - if (write(gpstm->io.fd, cmd, len) != len) { - syslog(LOG_ERR, "gpstm_send: unit %d: %m", - gpstm->unit); - gpstm_rep_event(gpstm, CEVNT_FAULT); - } - } -} - -/* - * state machine for initializing the clock - */ - -static void -gpstm_doevent(unit, event) - int unit; - enum gpstm_event event; -{ - struct gpstm_unit *gpstm = gpstm_units[unit]; - -#ifdef DEBUG - if (debug) { - printf("gpstm_doevent(gpstm%d, %d)\n", unit, (int)event); - } -#endif - if (event == e_TS && State[unit] != F51 && State[unit] != F08) { - gpstm_send(gpstm, "\03\r"); - } - - switch (event) { - case e_Init: - gpstm_send(gpstm, "F18\r"); - State[unit] = Start; - break; - case e_F18: - gpstm_send(gpstm, "F50\r"); - State[unit] = F18; - break; - case e_F50: - gpstm_send(gpstm, "F51\r"); - State[unit] = F50; - break; - case e_F51: - gpstm_send(gpstm, "F08\r"); - State[unit] = F51; - break; - case e_TS: - /* nothing to send - we like this mode */ - State[unit] = F08; - break; - } -} - -static void -gpstm_initstate(unit) - int unit; -{ - State[unit] = Base; /* just in case */ - gpstm_doevent(unit, e_Init); -} - -/* - * gpstm_process - process a pile of samples from the clock - */ -static char -gpstm_process(gpstm, offset, dispersion) - struct gpstm_unit *gpstm; - l_fp *offset; - u_fp *dispersion; -{ - register int i, j; - register u_long tmp_ui, tmp_uf; - int not_median1 = -1; /* XXX correct? */ - int not_median2 = -1; /* XXX correct? */ - int median; - u_fp disp_tmp, disp_tmp2; - - /* - * This code implements a three-stage median filter. First, we - * check if the samples are within 125 ms of each other. If not, - * dump the sample set. We take the median of the three offsets - * and use that as the sample offset. We take the maximum - * difference and use that as the sample dispersion. There - * probably is not much to be gained by a longer filter, since - * the clock filter in ntp_proto should do its thing. - */ - disp_tmp2 = 0; - for (i = 0; i < NCODES-1; i++) { - for (j = i+1; j < NCODES; j++) { - tmp_ui = gpstm->offset[i].l_ui; - tmp_uf = gpstm->offset[i].l_uf; - M_SUB(tmp_ui, tmp_uf, gpstm->offset[j].l_ui, - gpstm->offset[j].l_uf); - if (M_ISNEG(tmp_ui, tmp_uf)) { - M_NEG(tmp_ui, tmp_uf); - } - if (tmp_ui != 0 || tmp_uf > CODEDIFF) { - return 0; - } - disp_tmp = MFPTOFP(0, tmp_uf); - if (disp_tmp > disp_tmp2) { - disp_tmp2 = disp_tmp; - not_median1 = i; - not_median2 = j; - } - } - } - - /* - * It seems as if all are within 125 ms of each other. - * Now to determine the median of the three. Whlie the - * 125 ms check was going on, we also subtly catch the - * dispersion and set-up for a very easy median calculation. - * The largest difference between any two samples constitutes - * the dispersion. The sample not involve in the dispersion is - * the median sample. EASY! - */ - if (gpstm->lasttime == 0 || disp_tmp2 > MAXDISPERSE) - disp_tmp2 = MAXDISPERSE; - if (not_median1 == 0) { - if (not_median2 == 1) - median = 2; - else - median = 1; - } else { - median = 0; - } - *offset = gpstm->offset[median]; - *dispersion = disp_tmp2; - return 1; -} - -/* - * gpstm_poll - called by the transmit procedure - */ -static void -gpstm_poll(unit, peer) - int unit; - struct peer *peer; -{ - struct gpstm_unit *gpstm; - - /* - * You don't need to poll this clock. It puts out timecodes - * once per second. If asked for a timestamp, take note. - * The next time a timecode comes in, it will be fed back. - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_poll: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "gpstm_poll: unit %d not in use", unit); - return; - } - gpstm = gpstm_units[unit]; - if ((current_time - gpstm->lasttime) > 150) { - gpstm->noreply++; - gpstm_rep_event(gpstm_units[unit], CEVNT_TIMEOUT); - gpstm_initstate(gpstm->unit); - } - - /* - * polled every 64 seconds. Ask our receiver to hand in a timestamp. - */ - gpstm->polled = 1; - gpstm->polls++; -} - -/* - * gpstm_control - set fudge factors, return statistics - */ -static void -gpstm_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct gpstm_unit *gpstm; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_control: unit %d invalid", unit); - return; - } - - if (in != 0) { - if (in->haveflags & CLK_HAVETIME1) - fudgefactor1[unit] = in->fudgetime1; - if (in->haveflags & CLK_HAVETIME2) - fudgefactor2[unit] = in->fudgetime2; - if (in->haveflags & CLK_HAVEVAL1) - stratumtouse[unit] = (u_char)(in->fudgeval1); - if (in->haveflags & CLK_HAVEVAL2) - refid[unit] = in->fudgeval2; - if (in->haveflags & CLK_HAVEFLAG1) - readonlyclockflag[unit] = in->flags & CLK_FLAG1; - if (unitinuse[unit]) { - struct peer *peer; - - peer = gpstm_units[unit]->peer; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - } - } - - if (out != 0) { - memset((char *)out, 0, sizeof (struct refclockstat)); - out->type = REFCLK_GPSTM_TRUETIME; - out->haveflags = CLK_HAVETIME1 | CLK_HAVETIME2 | CLK_HAVEVAL1 | - CLK_HAVEVAL2 | CLK_HAVEFLAG1; - out->clockdesc = DESCRIPTION; - out->fudgetime1 = fudgefactor1[unit]; - out->fudgetime2 = fudgefactor2[unit]; - out->fudgeval1 = stratumtouse[unit]; - out->fudgeval2 = refid[unit]; - out->flags = readonlyclockflag[unit]; - if (unitinuse[unit]) { - gpstm = gpstm_units[unit]; - out->lencode = gpstm->lencode; - out->lastcode = gpstm->lastcode; - out->timereset = current_time - gpstm->timestarted; - out->polls = gpstm->polls; - out->noresponse = gpstm->noreply; - out->badformat = gpstm->badformat; - out->baddata = gpstm->baddata; - out->lastevent = gpstm->lastevent; - out->currentstatus = gpstm->status; - } - } -} - -/* - * gpstm_buginfo - return clock dependent debugging info - */ -static void -gpstm_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ - register struct gpstm_unit *gpstm; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_buginfo: unit %d invalid", unit); - return; - } - - if (!unitinuse[unit]) - return; - gpstm = gpstm_units[unit]; - - bug->nvalues = 11; - bug->ntimes = 5; - if (gpstm->lasttime != 0) - bug->values[0] = current_time - gpstm->lasttime; - else - bug->values[0] = 0; - bug->values[1] = gpstm->reason; - bug->values[2] = gpstm->year; - bug->values[3] = gpstm->day; - bug->values[4] = gpstm->hour; - bug->values[5] = gpstm->minute; - bug->values[6] = gpstm->second; - bug->values[7] = gpstm->msec; - bug->values[8] = gpstm->noreply; - bug->values[9] = gpstm->yearstart; - bug->values[10] = gpstm->quality; - bug->stimes = 0x1c; - bug->times[0] = gpstm->lastref; - bug->times[1] = gpstm->lastrec; - bug->times[2] = gpstm->offset[0]; - bug->times[3] = gpstm->offset[1]; - bug->times[4] = gpstm->offset[2]; -} - -#endif /*GPSTM et al*/ diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_leitch.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_leitch.c deleted file mode 100644 index b2a0e7f..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_leitch.c +++ /dev/null @@ -1,718 +0,0 @@ -/* - * refclock_leitch - clock driver for the Leitch CSD-5300 Master Clock - */ -#if defined(REFCLOCK) && (defined(LEITCH) || defined(LEITCHCLK) || defined(LEITCHPPS)) - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" - -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ - -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ - -#if defined(HAVE_TERMIOS) -#include <termios.h> -#endif -#ifdef STREAM -#include <stropts.h> -#if defined(LEITCHCLK) -#include <sys/clkdefs.h> -#endif /* LEITCHCLK */ -#endif /* STREAM */ - -#if defined (LEITCHPPS) -#include <sys/ppsclock.h> -#endif /* LEITCHPPS */ - -#include "ntp_stdlib.h" - -/* - * Driver for Leitch CSD-5300 Master Clock System - * - * COMMANDS: - * DATE: D <CR> - * TIME: T <CR> - * STATUS: S <CR> - * LOOP: L <CR> - * - * FORMAT: - * DATE: YYMMDD<CR> - * TIME: <CR>/HHMMSS <CR>/HHMMSS <CR>/HHMMSS <CR>/ - * second bondaried on the stop bit of the <CR> - * second boundaries at '/' above. - * STATUS: G (good), D (diag fail), T (time not provided) or - * P (last phone update failed) - */ -#define MAXUNITS 1 /* max number of LEITCH units */ -#define LEITCHREFID "ATOM" /* reference id */ -#define LEITCH_DESCRIPTION "Leitch: CSD 5300 Master Clock System Driver" -#define LEITCH232 "/dev/leitch%d" /* name of radio device */ -#define SPEED232 B300 /* uart speed (300 baud) */ -#define leitch_send(A,M) \ - if (debug) fprintf(stderr,"write leitch %s\n",M); \ - if ((write(A->leitchio.fd,M,sizeof(M)) < 0)) {\ - if (debug) \ - fprintf(stderr, "leitch_send: unit %d send failed\n", A->unit); \ - else \ - syslog(LOG_ERR, "leitch_send: unit %d send failed %m",A->unit);} - -#define STATE_IDLE 0 -#define STATE_DATE 1 -#define STATE_TIME1 2 -#define STATE_TIME2 3 -#define STATE_TIME3 4 - -extern struct event timerqueue[]; - -/* - * Imported from ntp_loopfilter module - */ -extern int fdpps; /* pps file descriptor */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * LEITCH unit control structure - */ -struct leitchunit { - struct peer *peer; - struct event leitchtimer; - struct refclockio leitchio; - u_char unit; - short year; - short yearday; - short month; - short day; - short hour; - short second; - short minute; - short state; - u_short fudge1; - l_fp reftime1; - l_fp reftime2; - l_fp reftime3; - l_fp codetime1; - l_fp codetime2; - l_fp codetime3; - u_long yearstart; -}; - -/* - * Function prototypes - */ -static void leitch_init P((void)); -static int leitch_start P((u_int, struct peer *)); -static void leitch_shutdown P((int)); -static void leitch_poll P((int, struct peer *)); -static void leitch_control P((u_int, struct refclockstat *, struct refclockstat *)); -#define leitch_buginfo noentry -static void leitch_receive P((struct recvbuf *)); -static void leitch_process P((struct leitchunit *)); -static void leitch_timeout P((struct peer *)); -static int leitch_get_date P((struct recvbuf *, struct leitchunit *)); -static int leitch_get_time P((struct recvbuf *, struct leitchunit *, int)); -static int dysize P((int)); - -static struct leitchunit leitchunits[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; -static u_char stratumtouse[MAXUNITS]; -static u_long refid[MAXUNITS]; - -static char days_in_month [] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - -/* - * Transfer vector - */ -struct refclock refclock_leitch = { - leitch_start, leitch_shutdown, leitch_poll, - leitch_control, leitch_init, leitch_buginfo, NOFLAGS -}; - -/* - * leitch_init - initialize internal leitch driver data - */ -static void -leitch_init() -{ - int i; - - memset((char*)leitchunits, 0, sizeof(leitchunits)); - memset((char*)unitinuse, 0, sizeof(unitinuse)); - for (i = 0; i < MAXUNITS; i++) - memcpy((char *)&refid[i], LEITCHREFID, 4); -} - -/* - * leitch_shutdown - shut down a LEITCH clock - */ -static void -leitch_shutdown(unit) -int unit; -{ -#ifdef DEBUG - if (debug) - fprintf(stderr, "leitch_shutdown()\n"); -#endif -} - -/* - * leitch_poll - called by the transmit procedure - */ -static void -leitch_poll(unit, peer) - int unit; - struct peer *peer; -{ - struct leitchunit *leitch; - - /* start the state machine rolling */ - -#ifdef DEBUG - if (debug) - fprintf(stderr, "leitch_poll()\n"); -#endif - if (unit > MAXUNITS) { - /* XXXX syslog it */ - return; - } - - leitch = &leitchunits[unit]; - - if (leitch->state != STATE_IDLE) { - /* reset and wait for next poll */ - /* XXXX syslog it */ - leitch->state = STATE_IDLE; - } else { - leitch_send(leitch,"D\r"); - leitch->state = STATE_DATE; - } -} - -static void -leitch_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, - "leitch_control: unit %d invalid", unit); - return; - } - - if (in) { - if (in->haveflags & CLK_HAVEVAL1) - stratumtouse[unit] = (u_char)(in->fudgeval1); - if (in->haveflags & CLK_HAVEVAL2) - refid[unit] = in->fudgeval2; - if (unitinuse[unit]) { - struct peer *peer; - - peer = (&leitchunits[unit])->peer; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - } - } - - if (out) { - memset((char *)out, 0, sizeof (struct refclockstat)); - out->type = REFCLK_ATOM_LEITCH; - out->haveflags = CLK_HAVEVAL1 | CLK_HAVEVAL2; - out->fudgeval1 = stratumtouse[unit]; - out->fudgeval2 = refid[unit]; - out->lastcode = ""; - out->clockdesc = LEITCH_DESCRIPTION; - } -} - -/* - * leitch_start - open the LEITCH devices and initialize data for processing - */ -static int -leitch_start(unit, peer) - u_int unit; - struct peer *peer; -{ - struct leitchunit *leitch; - int fd232; - char leitchdev[20]; - - /* - * Check configuration info. - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "leitch_start: unit %d invalid", unit); - return (0); - } - - if (unitinuse[unit]) { - syslog(LOG_ERR, "leitch_start: unit %d in use", unit); - return (0); - } - - /* - * Open serial port. - */ - (void) sprintf(leitchdev, LEITCH232, unit); - fd232 = open(leitchdev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, - "leitch_start: open of %s: %m", leitchdev); - return (0); - } - - leitch = &leitchunits[unit]; - memset((char*)leitch, 0, sizeof(*leitch)); - -#if defined(HAVE_SYSV_TTYS) - /* - * System V serial line parameters (termio interface) - * - */ - { struct termio ttyb; - if (ioctl(fd232, TCGETA, &ttyb) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TCGETA): %m", leitchdev); - goto screwed; - } - ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyb.c_oflag = 0; - ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyb.c_lflag = ICANON; - ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0'; - if (ioctl(fd232, TCSETA, &ttyb) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TCSETA): %m", leitchdev); - goto screwed; - } - } -#endif /* HAVE_SYSV_TTYS */ -#if defined(HAVE_TERMIOS) - /* - * POSIX serial line parameters (termios interface) - * - * The LEITCHCLK option provides timestamping at the driver level. - * It requires the tty_clk streams module. - * - * The LEITCHPPS option provides timestamping at the driver level. - * It uses a 1-pps signal and level converter (gadget box) and - * requires the ppsclock streams module and SunOS 4.1.1 or - * later. - */ - { struct termios ttyb, *ttyp; - - ttyp = &ttyb; - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, - "leitch_start: tcgetattr(%s): %m", leitchdev); - goto screwed; - } - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_oflag = 0; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, - "leitch_start: tcsetattr(%s): %m", leitchdev); - goto screwed; - } - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, - "leitch_start: tcflush(%s): %m", leitchdev); - goto screwed; - } - } -#endif /* HAVE_TERMIOS */ -#ifdef STREAM -#if defined(LEITCHCLK) - if (ioctl(fd232, I_PUSH, "clk") < 0) - syslog(LOG_ERR, - "leitch_start: ioctl(%s, I_PUSH, clk): %m", leitchdev); - if (ioctl(fd232, CLK_SETSTR, "\n") < 0) - syslog(LOG_ERR, - "leitch_start: ioctl(%s, CLK_SETSTR): %m", leitchdev); -#endif /* LEITCHCLK */ -#if defined(LEITCHPPS) - if (ioctl(fd232, I_PUSH, "ppsclock") < 0) - syslog(LOG_ERR, - "leitch_start: ioctl(%s, I_PUSH, ppsclock): %m", leitchdev); - else - fdpps = fd232; -#endif /* LEITCHPPS */ -#endif /* STREAM */ -#if defined(HAVE_BSD_TTYS) - /* - * 4.3bsd serial line parameters (sgttyb interface) - * - * The LEITCHCLK option provides timestamping at the driver level. - * It requires the tty_clk line discipline and 4.3bsd or later. - */ - { struct sgttyb ttyb; -#if defined(LEITCHCLK) - int ldisc = CLKLDISC; -#endif /* LEITCHCLK */ - - if (ioctl(fd232, TIOCGETP, &ttyb) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TIOCGETP): %m", leitchdev); - goto screwed; - } - ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232; -#if defined(LEITCHCLK) - ttyb.sg_erase = ttyb.sg_kill = '\r'; - ttyb.sg_flags = RAW; -#else - ttyb.sg_erase = ttyb.sg_kill = '\0'; - ttyb.sg_flags = EVENP|ODDP|CRMOD; -#endif /* LEITCHCLK */ - if (ioctl(fd232, TIOCSETP, &ttyb) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TIOCSETP): %m", leitchdev); - goto screwed; - } -#if defined(LEITCHCLK) - if (ioctl(fd232, TIOCSETD, &ldisc) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TIOCSETD): %m",leitchdev); - goto screwed; - } -#endif /* LEITCHCLK */ - } -#endif /* HAVE_BSD_TTYS */ - - /* - * Set up the structures - */ - leitch->peer = peer; - leitch->unit = unit; - leitch->state = STATE_IDLE; - leitch->fudge1 = 15; /* 15ms */ - - leitch->leitchio.clock_recv = leitch_receive; - leitch->leitchio.srcclock = (caddr_t) leitch; - leitch->leitchio.datalen = 0; - leitch->leitchio.fd = fd232; - if (!io_addclock(&leitch->leitchio)) { - goto screwed; - } - - /* - * All done. Initialize a few random peer variables, then - * return success. Note that root delay and root dispersion are - * always zero for this clock. - */ - peer->precision = 0; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - unitinuse[unit] = 1; - return(1); - - /* - * Something broke; abandon ship. - */ -screwed: - close(fd232); - return(0); -} - -/* - * leitch_receive - receive data from the serial interface on a leitch - * clock - */ -static void -leitch_receive(rbufp) - struct recvbuf *rbufp; -{ - struct leitchunit *leitch = (struct leitchunit *)rbufp->recv_srcclock; - -#ifdef DEBUG - if (debug) - fprintf(stderr, "leitch_recieve(%*.*s)\n", - rbufp->recv_length, rbufp->recv_length, - rbufp->recv_buffer); -#endif - if (rbufp->recv_length != 7) - return; /* The date is return with a trailing newline, - discard it. */ - - switch (leitch->state) { - case STATE_IDLE: /* unexpected, discard and resync */ - return; - case STATE_DATE: - if (!leitch_get_date(rbufp,leitch)) { - leitch->state = STATE_IDLE; - break; - } - leitch_send(leitch,"T\r"); -#ifdef DEBUG - if (debug) - fprintf(stderr, "%u\n",leitch->yearday); -#endif - leitch->state = STATE_TIME1; - break; - case STATE_TIME1: - if (!leitch_get_time(rbufp,leitch,1)) { - } - if (!clocktime(leitch->yearday,leitch->hour,leitch->minute, - leitch->second, 0, rbufp->recv_time.l_ui, - &leitch->yearstart, &leitch->reftime1.l_ui)) { - leitch->state = STATE_IDLE; - break; - } -#ifdef DEBUG - if (debug) - fprintf(stderr, "%lu\n", (u_long)leitch->reftime1.l_ui); -#endif - MSUTOTSF(leitch->fudge1, leitch->reftime1.l_uf); - leitch->codetime1 = rbufp->recv_time; - leitch->state = STATE_TIME2; - break; - case STATE_TIME2: - if (!leitch_get_time(rbufp,leitch,2)) { - } - if (!clocktime(leitch->yearday,leitch->hour,leitch->minute, - leitch->second, 0, rbufp->recv_time.l_ui, - &leitch->yearstart, &leitch->reftime2.l_ui)) { - leitch->state = STATE_IDLE; - break; - } -#ifdef DEBUG - if (debug) - fprintf(stderr, "%lu\n", (u_long)leitch->reftime2.l_ui); -#endif - MSUTOTSF(leitch->fudge1, leitch->reftime2.l_uf); - leitch->codetime2 = rbufp->recv_time; - leitch->state = STATE_TIME3; - break; - case STATE_TIME3: - if (!leitch_get_time(rbufp,leitch,3)) { - } - if (!clocktime(leitch->yearday,leitch->hour,leitch->minute, - leitch->second, 0, rbufp->recv_time.l_ui, - &leitch->yearstart, &leitch->reftime3.l_ui)) { - leitch->state = STATE_IDLE; - break; - } -#ifdef DEBUG - if (debug) - fprintf(stderr, "%lu\n", (u_long)leitch->reftime3.l_ui); -#endif - MSUTOTSF(leitch->fudge1, leitch->reftime3.l_uf); - leitch->codetime3 = rbufp->recv_time; - leitch_process(leitch); - leitch->state = STATE_IDLE; - break; - default: - syslog(LOG_ERR, - "leitech_receive: invalid state %d unit %d", - leitch->state, leitch->unit); - } -} - -/* - * leitch_process - process a pile of samples from the clock - * - * This routine uses a three-stage median filter to calculate offset and - * dispersion. reduce jitter. The dispersion is calculated as the span - * of the filter (max - min), unless the quality character (format 2) is - * non-blank, in which case the dispersion is calculated on the basis of - * the inherent tolerance of the internal radio oscillator, which is - * +-2e-5 according to the radio specifications. - */ -static void -leitch_process(leitch) - struct leitchunit *leitch; -{ - l_fp off; - s_fp delay; - l_fp codetime; - l_fp tmp_fp; - int isinsync = 1; - u_fp dispersion = 10; - - delay = 20; - - codetime = leitch->codetime3; - - off = leitch->reftime1; - L_SUB(&off,&leitch->codetime1); - -#ifdef DEBUG - if (debug) - fprintf(stderr,"%lu %lu %lu %lu %ld %ld\n", - (u_long)leitch->codetime1.l_ui, - (u_long)leitch->codetime1.l_uf, - (u_long)leitch->reftime1.l_ui, - (u_long)leitch->reftime1.l_uf, - (u_long)off.l_i, - (u_long)off.l_f); -#endif - tmp_fp = leitch->reftime2; - L_SUB(&tmp_fp,&leitch->codetime2); - if (L_ISGEQ(&off,&tmp_fp)) - off = tmp_fp; -#ifdef DEBUG - if (debug) - fprintf(stderr,"%lu %lu %lu %lu %ld %ld\n", - (u_long)leitch->codetime2.l_ui, - (u_long)leitch->codetime2.l_uf, - (u_long)leitch->reftime2.l_ui, - (u_long)leitch->reftime2.l_uf, - (u_long)off.l_i, - (u_long)off.l_f); -#endif - tmp_fp = leitch->reftime3; - L_SUB(&tmp_fp,&leitch->codetime3); - - if (L_ISGEQ(&off,&tmp_fp)) - off = tmp_fp; - -#ifdef DEBUG - if (debug) - fprintf(stderr,"%lu %lu %lu %lu %ld %ld\n", - (u_long)leitch->codetime3.l_ui, - (u_long)leitch->codetime3.l_uf, - (u_long)leitch->reftime3.l_ui, - (u_long)leitch->reftime3.l_uf, - (u_long)off.l_i, - (u_long)off.l_f); -#endif - refclock_receive(leitch->peer, &off, 0, dispersion, &codetime, - &codetime, isinsync); -} - -/* - * leitch_timeout - */ -static void -leitch_timeout(fp) - struct peer *fp; -{ - -#ifdef DEBUG - if (debug) - fprintf(stderr, "leitch_timeout()\n"); -#endif - -#ifdef NOTYET - { struct leitchunit *leitch = (struct leitchunit *)fp; - - switch(leitch->state) { - case STATE_IDLE: - leitch_send(leitch,"D\r"); - leitch->state = STATE_DATE; - break; - case STATE_DATE: - leitch_send(leitch,"T\r"); - leitch->state = STATE_TIME1; - break; - case STATE_TIME1: - case STATE_TIME2: - case STATE_TIME3: - default: - break; - } - - leitch->leitchtimer.event_time += 30; - TIMER_ENQUEUE(timerqueue, &leitch->leitchtimer); - } -#endif /* NOTYET */ -} - -/* - * dysize - */ -static int -dysize(year) -int year; -{ - if (year%4) { /* not a potential leap year */ - return (365); - } else { - if (year % 100) { /* is a leap year */ - return (366); - } else { - if (year % 400) { - return (365); - } else { - return (366); - } - } - } -} - -static int -leitch_get_date(rbufp,leitch) - struct recvbuf *rbufp; - struct leitchunit *leitch; -{ - int i; - - if (rbufp->recv_length < 6) - return(0); -#define BAD(A) (rbufp->recv_buffer[A] < '0') || (rbufp->recv_buffer[A] > '9') - if (BAD(0)||BAD(1)||BAD(2)||BAD(3)||BAD(4)||BAD(5)) - return(0); -#define ATOB(A) ((rbufp->recv_buffer[A])-'0') - leitch->year = ATOB(0)*10 + ATOB(1); - leitch->month = ATOB(2)*10 + ATOB(3); - leitch->day = ATOB(4)*10 + ATOB(5); - - /* sanity checks */ - if (leitch->month > 12) - return(0); - if (leitch->day > days_in_month[leitch->month-1]) - return(0); - - /* calculate yearday */ - i = 0; - leitch->yearday = leitch->day; - - while ( i < (leitch->month-1) ) - leitch->yearday += days_in_month[i++]; - - if ((dysize((leitch->year>90?1900:2000)+leitch->year)==365) && - leitch->month > 2) - leitch->yearday--; - - return(1); -} - -/* - * leitch_get_time - */ -static int -leitch_get_time(rbufp,leitch,which) - struct recvbuf *rbufp; - struct leitchunit *leitch; - int which; -{ - if (BAD(0)||BAD(1)||BAD(2)||BAD(3)||BAD(4)||BAD(5)) - return(0); - leitch->hour = ATOB(0)*10 +ATOB(1); - leitch->minute = ATOB(2)*10 +ATOB(3); - leitch->second = ATOB(4)*10 +ATOB(5); - - if ((leitch->hour > 23) || (leitch->minute > 60) || - (leitch->second > 60)) - return(0); - return(1); -} - -#endif diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_msfees.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_msfees.c deleted file mode 100644 index 5a6307c..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_msfees.c +++ /dev/null @@ -1,1575 +0,0 @@ -/* refclock_ees - clock driver for the EES M201 receiver */ - -#if defined(REFCLOCK) && defined(MSFEESPPS) && defined(STREAM) - -/* Currently REQUIRES STREAM and PPSCD. CLK and CBREAK modes - * were removed as the code was overly hairy, they weren't in use - * (hence probably didn't work). Still in RCS file at cl.cam.ac.uk - */ - -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" -#include "ntp_calendar.h" -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ -#include <termios.h> -#include <stropts.h> -#include <sys/ppsclock.h> -#include "ntp_stdlib.h" - - /* - fudgefactor = fudgetime1; - os_delay = fudgetime2; - offset_fudge = os_delay + fudgefactor + inherent_delay; - stratumtouse = fudgeval1 & 0xf - debug = fudgeval2; - sloppyclockflag = flags & CLK_FLAG1; - 1 log smoothing summary when processing sample - 4 dump the buffer from the clock - 8 EIOGETKD the last n uS time stamps - if (flags & CLK_FLAG2 && unitinuse) ees->leaphold = 0; - ees->dump_vals = flags & CLK_FLAG3; - ees->usealldata = flags & CLK_FLAG4; - - - bug->values[0] = (ees->lasttime) ? current_time - ees->lasttime : 0; - bug->values[1] = (ees->clocklastgood)?current_time-ees->clocklastgood:0; - bug->values[2] = ees->status; - bug->values[3] = ees->lastevent; - bug->values[4] = ees->reason; - bug->values[5] = ees->nsamples; - bug->values[6] = ees->codestate; - bug->values[7] = ees->day; - bug->values[8] = ees->hour; - bug->values[9] = ees->minute; - bug->values[10] = ees->second; - bug->values[11] = ees->tz; - bug->values[12] = ees->yearstart; - bug->values[13] = (ees->leaphold > current_time) ? - ees->leaphold - current_time : 0; - bug->values[14] = inherent_delay[unit].l_uf; - bug->values[15] = offset_fudge[unit].l_uf; - - bug->times[0] = ees->reftime; - bug->times[1] = ees->arrvtime; - bug->times[2] = ees->lastsampletime; - bug->times[3] = ees->offset; - bug->times[4] = ees->lowoffset; - bug->times[5] = ees->highoffset; - bug->times[6] = inherent_delay[unit]; - bug->times[8] = os_delay[unit]; - bug->times[7] = fudgefactor[unit]; - bug->times[9] = offset_fudge[unit]; - bug->times[10]= ees->yearstart, 0; - */ - -/* This should support the use of an EES M201 receiver with RS232 - * output (modified to transmit time once per second). - * - * For the format of the message sent by the clock, see the EESM_ - * definitions below. - * - * It appears to run free for an integral number of minutes, until the error - * reaches 4mS, at which point it steps at second = 01. - * It appears that sometimes it steps 4mS (say at 7 min interval), - * then the next minute it decides that it was an error, so steps back. - * On the next minute it steps forward again :-( - * This is typically 16.5uS/S then 3975uS at the 4min re-sync, - * or 9.5uS/S then 3990.5uS at a 7min re-sync, - * at which point it may loose the "00" second time stamp. - * I assume that the most accurate time is just AFTER the re-sync. - * Hence remember the last cycle interval, - * - * Can run in any one of: - * - * PPSCD PPS signal sets CD which interupts, and grabs the current TOD - * (sun) *in the interupt code*, so as to avoid problems with - * the STREAMS scheduling. - * - * It appears that it goes 16.5 uS slow each second, then every 4 mins it - * generates no "00" second tick, and gains 3975 uS. Ho Hum ! (93/2/7) - */ - -/* Definitions */ -#ifndef MAXUNITS -#define MAXUNITS 4 /* maximum number of EES units permitted */ -#endif - -#ifndef EES232 -#define EES232 "/dev/ees%d" /* Device to open to read the data */ -#endif - -/* Other constant stuff */ -#ifndef EESPRECISION -#define EESPRECISION (-10) /* what the heck - 2**-10 = 1ms */ -#endif -#ifndef EESREFID -#define EESREFID "MSF\0" /* String to identify the clock */ -#endif -#ifndef EESHSREFID -#define EESHSREFID (0x7f7f0000 | ((REFCLK_MSF_EES) << 8)) /* Numeric refid */ -#endif - -/* Description of clock */ -#define EESDESCRIPTION "EES M201 MSF Receiver" - -/* Speed we run the clock port at. If this is changed the UARTDELAY - * value should be recomputed to suit. - */ -#ifndef SPEED232 -#define SPEED232 B9600 /* 9600 baud */ -#endif - -/* What is the inherent delay for this mode of working, i.e. when is the - * data time stamped. - */ -#define SAFETY_SHIFT 10 /* Split the shift to avoid overflow */ -#define BITS_TO_L_FP(bits, baud) \ - (((((bits)*2 +1) << (FRACTION_PREC-SAFETY_SHIFT)) / (2*baud)) << SAFETY_SHIFT) -#define INH_DELAY_CBREAK BITS_TO_L_FP(119, 9600) -#define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600) - -#ifndef STREAM_PP1 -#define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->" -#endif -#ifndef STREAM_PP2 -#define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->" -#endif - -/* Offsets of the bytes of the serial line code. The clock gives - * local time with a GMT/BST indication. The EESM_ definitions - * give offsets into ees->lastcode. - */ -#define EESM_CSEC 0 /* centiseconds - always zero in our clock */ -#define EESM_SEC 1 /* seconds in BCD */ -#define EESM_MIN 2 /* minutes in BCD */ -#define EESM_HOUR 3 /* hours in BCD */ -#define EESM_DAYWK 4 /* day of week (Sun = 0 etc) */ -#define EESM_DAY 5 /* day of month in BCD */ -#define EESM_MON 6 /* month in BCD */ -#define EESM_YEAR 7 /* year MOD 100 in BCD */ -#define EESM_LEAP 8 /* 0x0f if leap year, otherwise zero */ -#define EESM_BST 9 /* 0x03 if BST, 0x00 if GMT */ -#define EESM_MSFOK 10 /* 0x3f if radio good, otherwise zero */ - /* followed by a frame alignment byte (0xff) / - / which is not put into the lastcode buffer*/ - -/* Length of the serial time code, in characters. The first length - * is less the frame alignment byte. - */ -#define LENEESPRT (EESM_MSFOK+1) -#define LENEESCODE (LENEESPRT+1) - -/* Code state. */ -#define EESCS_WAIT 0 /* waiting for start of timecode */ -#define EESCS_GOTSOME 1 /* have an incomplete time code buffered */ - -/* Default fudge factor and character to receive */ -#define DEFFUDGETIME 0 /* Default user supplied fudge factor */ -#ifndef DEFOSTIME -#define DEFOSTIME 0 /* Default OS delay -- passed by Make ? */ -#endif -#define DEFINHTIME INH_DELAY_PPS /* inherent delay due to sample point*/ - -/* Limits on things. Reduce the number of samples to SAMPLEREDUCE by median - * elimination. If we're running with an accurate clock, chose the BESTSAMPLE - * as the estimated offset, otherwise average the remainder. - */ -#define FULLSHIFT 6 /* NCODES root 2 */ -#define NCODES (1<< FULLSHIFT) /* 64 */ -#define REDUCESHIFT (FULLSHIFT -1) /* SAMPLEREDUCE root 2 */ - -/* Towards the high ( Why ?) end of half */ -#define BESTSAMPLE ((samplereduce * 3) /4) /* 24 */ - -/* Leap hold time. After a leap second the clock will no longer be - * reliable until it resynchronizes. Hope 40 minutes is enough. */ -#define EESLEAPHOLD (40 * 60) - -#define EES_STEP_F (1 << 24) /* the receiver steps in units of about 4ms */ -#define EES_STEP_F_GRACE (EES_STEP_F/8) /*Allow for slop of 1/8 which is .5ms*/ -#define EES_STEP_NOTE (1 << 21)/* Log any unexpected jumps, say .5 ms .... */ -#define EES_STEP_NOTES 50 /* Only do a limited number */ -#define MAX_STEP 16 /* Max number of steps to remember */ - -/* debug is a bit mask of debugging that is wanted */ -#define DB_SYSLOG_SMPLI 0x0001 -#define DB_SYSLOG_SMPLE 0x0002 -#define DB_SYSLOG_SMTHI 0x0004 -#define DB_SYSLOG_NSMTHE 0x0008 -#define DB_SYSLOG_NSMTHI 0x0010 -#define DB_SYSLOG_SMTHE 0x0020 -#define DB_PRINT_EV 0x0040 -#define DB_PRINT_CDT 0x0080 -#define DB_PRINT_CDTC 0x0100 -#define DB_SYSLOG_KEEPD 0x0800 -#define DB_SYSLOG_KEEPE 0x1000 -#define DB_LOG_DELTAS 0x2000 -#define DB_PRINT_DELTAS 0x4000 -#define DB_LOG_AWAITMORE 0x8000 -#define DB_LOG_SAMPLES 0x10000 -#define DB_NO_PPS 0x20000 -#define DB_INC_PPS 0x40000 -#define DB_DUMP_DELTAS 0x80000 - -struct eesunit { /* EES unit control structure. */ - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - l_fp reftime; /* reference time */ - l_fp lastsampletime; /* time as in txt from last EES msg */ - l_fp arrvtime; /* Time at which pkt arrived */ - l_fp codeoffsets[NCODES]; /* the time of arrival of 232 codes */ - l_fp offset; /* chosen offset (for clkbug) */ - l_fp lowoffset; /* lowest sample offset (for clkbug) */ - l_fp highoffset; /* highest " " (for clkbug) */ - char lastcode[LENEESCODE+6]; /* last time code we received */ - u_long lasttime; /* last time clock heard from */ - u_long clocklastgood; /* last time good radio seen */ - u_char lencode; /* length of code in buffer */ - u_char nsamples; /* number of samples we've collected */ - u_char codestate; /* state of 232 code reception */ - u_char unit; /* unit number for this guy */ - u_char status; /* clock status */ - u_char lastevent; /* last clock event */ - u_char reason; /* reason for last abort */ - u_char hour; /* hour of day */ - u_char minute; /* minute of hour */ - u_char second; /* seconds of minute */ - char tz; /* timezone from clock */ - u_char ttytype; /* method used */ - u_char dump_vals; /* Should clock values be dumped */ - u_char usealldata; /* Use ALL samples */ - u_short day; /* day of year from last code */ - u_long yearstart; /* start of current year */ - u_long leaphold; /* time of leap hold expiry */ - u_long badformat; /* number of bad format codes */ - u_long baddata; /* number of invalid time codes */ - u_long timestarted; /* time we started this */ - long last_pps_no; /* The serial # of the last PPS */ - char fix_pending; /* Is a "sync to time" pending ? */ - /* Fine tuning - compensate for 4 mS ramping .... */ - l_fp last_l; /* last time stamp */ - u_char last_steps[MAX_STEP]; /* Most recent n steps */ - int best_av_step; /* Best guess at average step */ - char best_av_step_count; /* # of steps over used above */ - char this_step; /* Current pos in buffer */ - int last_step_late; /* How late the last step was (0-59) */ - long jump_fsecs; /* # of fractions of a sec last jump */ - u_long last_step; /* time of last step */ - int last_step_secs; /* Number of seconds in last step */ - int using_ramp; /* 1 -> noemal, -1 -> over stepped */ -}; -#define last_sec last_l.l_ui -#define last_sfsec last_l.l_f -#define this_uisec ((ees->arrvtime).l_ui) -#define this_sfsec ((ees->arrvtime).l_f) -#define msec(x) ((x) / (1<<22)) -#define LAST_STEPS (sizeof ees->last_steps / sizeof ees->last_steps[0]) -#define subms(x) ((((((x < 0) ? (-(x)) : (x)) % (1<<22))/2) * 625) / (1<<(22 -5))) - -/* Bitmask for what methods to try to use -- currently only PPS enabled */ -#define T_CBREAK 1 -#define T_PPS 8 -/* macros to test above */ -#define is_cbreak(x) ((x)->ttytype & T_CBREAK) -#define is_pps(x) ((x)->ttytype & T_PPS) -#define is_any(x) ((x)->ttytype) - -#define CODEREASON 20 /* reason codes */ - -/* Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. */ -static struct eesunit *eesunits[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; - -/* Keep the fudge factors separately so they can be set even - * when no clock is configured. */ -static l_fp inherent_delay[MAXUNITS]; /* when time stamp is taken */ -static l_fp fudgefactor[MAXUNITS]; /* fudgetime1 */ -static l_fp os_delay[MAXUNITS]; /* fudgetime2 */ -static l_fp offset_fudge[MAXUNITS]; /* Sum of above */ -static u_char stratumtouse[MAXUNITS]; -static u_char sloppyclockflag[MAXUNITS]; - -static int deltas[60]; - -static l_fp acceptable_slop; /* = { 0, 1 << (FRACTION_PREC -2) }; */ -static l_fp onesec; /* = { 1, 0 }; */ - -/* Imported from the timer module */ -extern u_long current_time; - -#ifdef DEBUG -static int debug; -#endif - -#ifndef DUMP_BUF_SIZE /* Size of buffer to be used by dump_buf */ -#define DUMP_BUF_SIZE 10112 -#endif - -/* ees_reset - reset the count back to zero */ -#define ees_reset(ees) (ees)->nsamples = 0; \ - (ees)->codestate = EESCS_WAIT - -/* ees_event - record and report an event */ -#define ees_event(ees, evcode) if ((ees)->status != (u_char)(evcode)) \ - ees_report_event((ees), (evcode)) - -/* Find the precision of the system clock by reading it */ -#define USECS 1000000 -#define MINSTEP 5 /* some systems increment uS on each call */ -#define MAXLOOPS (USECS/9) -static int ees_get_precision() -{ - struct timeval tp; - struct timezone tzp; - long last; - int i; - long diff; - long val; - gettimeofday(&tp, &tzp); - - last = tp.tv_usec; - for (i=0; i< 100000; i++) { - gettimeofday(&tp, &tzp); - diff = tp.tv_usec - last; - if (diff < 0) diff += USECS; - if (diff > MINSTEP) break; - last = tp.tv_usec; - } - syslog(LOG_INFO, - "I: ees: precision calculation given %duS after %d loop%s", - diff, i, (i==1) ? "" : "s"); - - if (i == 0) return -20 /* assume 1uS */; - if (i >= MAXLOOPS) return EESPRECISION /* Lies ! */; - for (i=0, val=USECS; val > 0; i--, val /= 2) if (diff > val) return i; - return EESPRECISION /* Lies ! */; -} - -static void dump_buf(coffs, from, to, text) -l_fp *coffs; -int from; -int to; -char *text; -{ - char buff[DUMP_BUF_SIZE + 80]; - int i; - register char *ptr = buff; - sprintf(ptr, text); - for (i=from; i<to; i++) - { while (*ptr) ptr++; - if ((ptr-buff) > DUMP_BUF_SIZE) syslog(LOG_DEBUG, "D: %s", ptr=buff); - sprintf(ptr, " %06d", ((int)coffs[i].l_f) / 4295); - } - syslog(LOG_DEBUG, "D: %s", buff); -} - -/* msfees_init - initialize internal ees driver data */ -static void msfees_init() -{ - register int i; - /* Just zero the data arrays */ - memset((char *)eesunits, 0, sizeof eesunits); - memset((char *)unitinuse, 0, sizeof unitinuse); - - acceptable_slop.l_ui = 0; - acceptable_slop.l_uf = 1 << (FRACTION_PREC -2); - - onesec.l_ui = 1; - onesec.l_uf = 0; - - /* Initialize fudge factors to default. */ - for (i = 0; i < MAXUNITS; i++) { - fudgefactor[i].l_ui = 0; - fudgefactor[i].l_uf = DEFFUDGETIME; - os_delay[i].l_ui = 0; - os_delay[i].l_uf = DEFOSTIME; - inherent_delay[i].l_ui = 0; - inherent_delay[i].l_uf = DEFINHTIME; - offset_fudge[i] = os_delay[i]; - L_ADD(&offset_fudge[i], &fudgefactor[i]); - L_ADD(&offset_fudge[i], &inherent_delay[i]); - stratumtouse[i] = 0; - sloppyclockflag[i] = 0; - } -} - - -/* msfees_start - open the EES devices and initialize data for processing */ -static int msfees_start(unit, peer) - u_int unit; - struct peer *peer; -{ - register struct eesunit *ees; - register int i; - int fd232 = -1; - char eesdev[20]; - struct termios ttyb, *ttyp; - static void ees_receive(); - extern int io_addclock(); - extern void io_closeclock(); - extern char *emalloc(); - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "ees clock: unit number %d invalid (max %d)", - unit, MAXUNITS-1); - return 0; - } - if (unitinuse[unit]) { - syslog(LOG_ERR, "ees clock: unit number %d in use", unit); - return 0; - } - - /* Unit okay, attempt to open the devices. We do them both at - * once to make sure we can */ - (void) sprintf(eesdev, EES232, unit); - - fd232 = open(eesdev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, "ees clock: open of %s failed: %m", eesdev); - return 0; - } - -#ifdef TIOCEXCL - /* Set for exclusive use */ - if (ioctl(fd232, TIOCEXCL, (char *)0) < 0) { - syslog(LOG_ERR, "ees clock: ioctl(%s, TIOCEXCL): %m", eesdev); - goto screwed; - } -#endif - - /* STRIPPED DOWN VERSION: Only PPS CD is supported at the moment */ - - /* Set port characteristics. If we don't have a STREAMS module or - * a clock line discipline, cooked mode is just usable, even though it - * strips the top bit. The only EES byte which uses the top - * bit is the year, and we don't use that anyway. If we do - * have the line discipline, we choose raw mode, and the - * line discipline code will block up the messages. - */ - - /* STIPPED DOWN VERSION: Only PPS CD is supported at the moment */ - - ttyp = &ttyb; - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, "msfees_start: tcgetattr(%s): %m", eesdev); - goto screwed; - } - - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_oflag = 0; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, "msfees_start: tcsetattr(%s): %m", eesdev); - goto screwed; - } - - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, "msfees_start: tcflush(%s): %m", eesdev); - goto screwed; - } - - inherent_delay[unit].l_uf = INH_DELAY_PPS; - - /* offset fudge (how *late* the timestamp is) = fudge + os delays */ - offset_fudge[unit] = os_delay[unit]; - L_ADD(&offset_fudge[unit], &fudgefactor[unit]); - L_ADD(&offset_fudge[unit], &inherent_delay[unit]); - - /* Looks like this might succeed. Find memory for the structure. - * Look to see if there are any unused ones, if not we malloc() one. - */ - if (eesunits[unit] != 0) /* The one we want is okay */ - ees = eesunits[unit]; - else { - /* Look for an unused, but allocated struct */ - for (i = 0; i < MAXUNITS; i++) { - if (!unitinuse[i] && eesunits[i] != 0) - break; - } - - if (i < MAXUNITS) { /* Reclaim this one */ - ees = eesunits[i]; - eesunits[i] = 0; - } /* no spare -- make a new one */ - else ees = (struct eesunit *) emalloc(sizeof(struct eesunit)); - } - memset((char *)ees, 0, sizeof(struct eesunit)); - eesunits[unit] = ees; - - /* Set up the structures */ - ees->peer = peer; - ees->unit = (u_char)unit; - ees->timestarted= current_time; - ees->ttytype = 0; - ees->io.clock_recv= ees_receive; - ees->io.srcclock= (caddr_t)ees; - ees->io.datalen = 0; - ees->io.fd = fd232; - - /* Okay. Push one of the two (linked into the kernel, or dynamically - * loaded) STREAMS module, and give it to the I/O code to start - * receiving stuff. - */ - - { - int rc1; - /* Pop any existing onews first ... */ - while (ioctl(fd232, I_POP, 0 ) >= 0) ; - - /* Now try pushing either of the possible modules */ - if ((rc1=ioctl(fd232, I_PUSH, STREAM_PP1)) < 0 && - ioctl(fd232, I_PUSH, STREAM_PP2) < 0) { - syslog(LOG_ERR, - "ees clock: Push of `%s' and `%s' to %s failed %m", - STREAM_PP1, STREAM_PP2, eesdev); - goto screwed; - } - else { - syslog(LOG_INFO, "I: ees clock: PUSHed %s on %s", - (rc1 >= 0) ? STREAM_PP1 : STREAM_PP2, eesdev); - ees->ttytype |= T_PPS; - } - } - - /* Add the clock */ - if (!io_addclock(&ees->io)) { - /* Oh shit. Just close and return. */ - syslog(LOG_ERR, "ees clock: io_addclock(%s): %m", eesdev); - goto screwed; - } - - - /* All done. Initialize a few random peer variables, then - * return success. */ - peer->precision = ees_get_precision(); - peer->stratum = stratumtouse[unit]; - peer->rootdelay = 0; /* ++++ */ - peer->rootdispersion = 0; /* ++++ */ - if (stratumtouse[unit] <= 1) { - memmove((char *)&peer->refid, EESREFID, 4); - if (unit > 0 && unit < 10) - ((char *)&peer->refid)[3] = '0' + unit; - } else { - peer->refid = htonl(EESHSREFID); - } - unitinuse[unit] = 1; - syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit); - return (1); - -screwed: - if (fd232 != -1) - (void) close(fd232); - return (0); -} - - -/* msfees_shutdown - shut down a EES clock */ -static void msfees_shutdown(unit) - int unit; -{ - register struct eesunit *ees; - extern void io_closeclock(); - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, - "ees clock: INTERNAL ERROR, unit number %d invalid (max %d)", - unit, MAXUNITS); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, - "ees clock: INTERNAL ERROR, unit number %d not in use", unit); - return; - } - - /* Tell the I/O module to turn us off. We're history. */ - ees = eesunits[unit]; - io_closeclock(&ees->io); - unitinuse[unit] = 0; -} - - -/* ees_report_event - note the occurance of an event */ -static void ees_report_event(ees, code) - struct eesunit *ees; - int code; -{ - if (ees->status != (u_char)code) { - ees->status = (u_char)code; - if (code != CEVNT_NOMINAL) - ees->lastevent = (u_char)code; - /* Should report event to trap handler in here. - * Soon... - */ - } -} - - -/* ees_receive - receive data from the serial interface on an EES clock */ -static void ees_receive(rbufp) - struct recvbuf *rbufp; -{ - register int n_sample; - register int day; - register struct eesunit *ees; - register u_char *dpt; /* Data PoinTeR: move along ... */ - register u_char *dpend; /* Points just *after* last data char */ - register char *cp; - l_fp tmp; - static void ees_process(); - int call_pps_sample = 0; - l_fp pps_arrvstamp; - int sincelast; - int pps_step = 0; - int suspect_4ms_step = 0; - struct ppsclockev ppsclockev; - long *ptr = (long *) &ppsclockev; - extern errno; - int rc; - - /* Get the clock this applies to and a pointer to the data */ - ees = (struct eesunit *)rbufp->recv_srcclock; - dpt = (u_char *)&rbufp->recv_space; - dpend = dpt + rbufp->recv_length; - if ((debug & DB_LOG_AWAITMORE) && (rbufp->recv_length != LENEESCODE)) - printf("[%d] ", rbufp->recv_length); - - /* Check out our state and process appropriately */ - switch (ees->codestate) { - case EESCS_WAIT: - /* Set an initial guess at the timestamp as the recv time. - * If just running in CBREAK mode, we can't improve this. - * If we have the CLOCK Line Discipline, PPSCD, or sime such, - * then we will do better later .... - */ - ees->arrvtime = rbufp->recv_time; - ees->codestate = EESCS_GOTSOME; - ees->lencode = 0; - /*FALLSTHROUGH*/ - - case EESCS_GOTSOME: - cp = &(ees->lastcode[ees->lencode]); - - /* Gobble the bytes until the final (possibly stripped) 0xff */ - while (dpt < dpend && (*dpt & 0x7f) != 0x7f) { - *cp++ = (char)*dpt++; - ees->lencode++; - /* Oh dear -- too many bytes .. */ - if (ees->lencode > LENEESPRT) { - syslog(LOG_INFO, -"I: ees clock: %d + %d > %d [%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x]", - ees->lencode, dpend - dpt, LENEESPRT, -#define D(x) (ees->lastcode[x]) - D(0), D(1), D(2), D(3), D(4), D(5), D(6), - D(7), D(8), D(9), D(10), D(11), D(12)); -#undef D - ees->badformat++; - ees->reason = CODEREASON + 1; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - } - /* Gave up because it was end of the buffer, rather than ff */ - if (dpt == dpend) { - /* Incomplete. Wait for more. */ - if (debug & DB_LOG_AWAITMORE) syslog(LOG_INFO, - "I: ees clock %d: %d == %d: await more", - ees->unit, dpt, dpend); - return; - } - - /* This shouldn't happen ... ! */ - if ((*dpt & 0x7f) != 0x7f) { - syslog(LOG_INFO, "I: ees clock: %0x & 0x7f != 0x7f", *dpt); - ees->badformat++; - ees->reason = CODEREASON + 2; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - /* Skip the 0xff */ - dpt++; - - /* Finally, got a complete buffer. Mainline code will - * continue on. */ - cp = ees->lastcode; - break; - - default: - syslog(LOG_ERR, "ees clock: INTERNAL ERROR: %d state %d", - ees->unit, ees->codestate); - ees->reason = CODEREASON + 5; - ees_event(ees, CEVNT_FAULT); - ees_reset(ees); - return; - } - - /* Boy! After all that crap, the lastcode buffer now contains - * something we hope will be a valid time code. Do length - * checks and sanity checks on constant data. - */ - ees->codestate = EESCS_WAIT; - ees->lasttime = current_time; - if (ees->lencode != LENEESPRT) { - ees->badformat++; - ees->reason = CODEREASON + 6; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - cp = ees->lastcode; - - /* Check that centisecond is zero */ - if (cp[EESM_CSEC] != 0) { - ees->baddata++; - ees->reason = CODEREASON + 7; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - /* Check flag formats */ - if (cp[EESM_LEAP] != 0 && cp[EESM_LEAP] != 0x0f) { - ees->badformat++; - ees->reason = CODEREASON + 8; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - if (cp[EESM_BST] != 0 && cp[EESM_BST] != 0x03) { - ees->badformat++; - ees->reason = CODEREASON + 9; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - if (cp[EESM_MSFOK] != 0 && cp[EESM_MSFOK] != 0x3f) { - ees->badformat++; - ees->reason = CODEREASON + 10; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - /* So far, so good. Compute day, hours, minutes, seconds, - * time zone. Do range checks on these. - */ - -#define bcdunpack(val) ( (((val)>>4) & 0x0f) * 10 + ((val) & 0x0f) ) -#define istrue(x) ((x)?1:0) - - ees->second = bcdunpack(cp[EESM_SEC]); /* second */ - ees->minute = bcdunpack(cp[EESM_MIN]); /* minute */ - ees->hour = bcdunpack(cp[EESM_HOUR]); /* hour */ - - day = bcdunpack(cp[EESM_DAY]); /* day of month */ - - switch (bcdunpack(cp[EESM_MON])) { /* month */ - - /* Add in lengths of all previous months. Add one more - if it is a leap year and after February. - */ - case 12: day += NOV; /*FALLSTHROUGH*/ - case 11: day += OCT; /*FALLSTHROUGH*/ - case 10: day += SEP; /*FALLSTHROUGH*/ - case 9: day += AUG; /*FALLSTHROUGH*/ - case 8: day += JUL; /*FALLSTHROUGH*/ - case 7: day += JUN; /*FALLSTHROUGH*/ - case 6: day += MAY; /*FALLSTHROUGH*/ - case 5: day += APR; /*FALLSTHROUGH*/ - case 4: day += MAR; /*FALLSTHROUGH*/ - case 3: day += FEB; - if (istrue(cp[EESM_LEAP])) day++; /*FALLSTHROUGH*/ - case 2: day += JAN; /*FALLSTHROUGH*/ - case 1: break; - default: ees->baddata++; - ees->reason = CODEREASON + 11; - ees_event(ees, CEVNT_BADDATE); - ees_reset(ees); - return; - } - - ees->day = day; - - /* Get timezone. The clocktime routine wants the number - * of hours to add to the delivered time to get UT. - * Currently -1 if BST flag set, 0 otherwise. This - * is the place to tweak things if double summer time - * ever happens. - */ - ees->tz = istrue(cp[EESM_BST]) ? -1 : 0; - - if (ees->day > 366 || ees->day < 1 || - ees->hour > 23 || ees->minute > 59 || ees->second > 59) { - ees->baddata++; - ees->reason = CODEREASON + 12; - ees_event(ees, CEVNT_BADDATE); - ees_reset(ees); - return; - } - - n_sample = ees->nsamples; - - /* Now, compute the reference time value: text -> tmp.l_ui */ - if (!clocktime(ees->day, ees->hour, ees->minute, ees->second, - ees->tz, rbufp->recv_time.l_ui, &ees->yearstart, - &tmp.l_ui)) { - ees->baddata++; - ees->reason = CODEREASON + 13; - ees_event(ees, CEVNT_BADDATE); - ees_reset(ees); - return; - } - tmp.l_uf = 0; - - /* DON'T use ees->arrvtime -- it may be < reftime */ - ees->lastsampletime = tmp; - - /* If we are synchronised to the radio, update the reference time. - * Also keep a note of when clock was last good. - */ - if (istrue(cp[EESM_MSFOK])) { - ees->reftime = tmp; - ees->clocklastgood = current_time; - } - - - /* Compute the offset. For the fractional part of the - * offset we use the expected delay for the message. - */ - ees->codeoffsets[n_sample].l_ui = tmp.l_ui; - ees->codeoffsets[n_sample].l_uf = 0; - - /* Number of seconds since the last step */ - sincelast = this_uisec - ees->last_step; - - memset(&ppsclockev, 0, sizeof ppsclockev); - - rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev); - if (debug & DB_PRINT_EV) fprintf(stderr, - "[%x] CIOGETEV u%d %d (%x %d) gave %d (%d): %08x %08x %d\n", - DB_PRINT_EV, ees->unit, ees->io.fd, CIOGETEV, is_pps(ees), - rc, errno, ptr[0], ptr[1], ptr[2]); - - /* If we managed to get the time of arrival, process the info */ - if (rc >= 0) { - int conv = -1; - pps_step = ppsclockev.serial - ees->last_pps_no; - - /* Possible that PPS triggered, but text message didn't */ - if (pps_step == 2) syslog(LOG_ERR, "pps step = 2 @ %02d", ees->second); - if (pps_step == 2 && ees->second == 1) suspect_4ms_step |= 1; - if (pps_step == 2 && ees->second == 2) suspect_4ms_step |= 4; - - /* allow for single loss of PPS only */ - if (pps_step != 1 && pps_step != 2) - fprintf(stderr, "PPS step: %d too far off %d (%d)\n", - ppsclockev.serial, ees->last_pps_no, pps_step); - else if (!buftvtots((char *) &(ppsclockev.tv), &pps_arrvstamp)) - fprintf(stderr, "buftvtots failed\n"); - else { /* if ((ABS(time difference) - 0.25) < 0) - * then believe it ... - */ - l_fp diff; - diff = pps_arrvstamp; - conv = 0; - L_SUB(&diff, &ees->arrvtime); -if (debug & DB_PRINT_CDT) printf("[%x] Have %x.%08x and %x.%08x -> %x.%08x @ %s", - DB_PRINT_CDT, ees->arrvtime.l_ui, ees->arrvtime.l_uf, - pps_arrvstamp.l_ui, pps_arrvstamp.l_uf, - diff.l_ui, diff.l_uf, - ctime(&(ppsclockev.tv.tv_sec))); - if (L_ISNEG(&diff)) M_NEG(diff.l_ui, diff.l_uf); - L_SUB(&diff, &acceptable_slop); - if (L_ISNEG(&diff)) { /* AOK -- pps_sample */ - ees->arrvtime = pps_arrvstamp; - conv++; - call_pps_sample++; - } - /* Some loss of some signals around sec = 1 */ - else if (ees->second == 1) { - diff = pps_arrvstamp; - L_ADD(&diff, &onesec); - L_SUB(&diff, &ees->arrvtime); - if (L_ISNEG(&diff)) M_NEG(diff.l_ui, diff.l_uf); - L_SUB(&diff, &acceptable_slop); -syslog(LOG_ERR, "Have sec==1 slip %ds a=%08x-p=%08x -> %x.%08x (u=%d) %s", - pps_arrvstamp.l_ui - ees->arrvtime.l_ui, - pps_arrvstamp.l_uf, - ees->arrvtime.l_uf, - diff.l_ui, diff.l_uf, - ppsclockev.tv.tv_usec, - ctime(&(ppsclockev.tv.tv_sec))); - if (L_ISNEG(&diff)) { /* AOK -- pps_sample */ - suspect_4ms_step |= 2; - ees->arrvtime = pps_arrvstamp; - L_ADD(&ees->arrvtime, &onesec); - conv++; - call_pps_sample++; - } - } - } - ees->last_pps_no = ppsclockev.serial; - if (debug & DB_PRINT_CDTC) printf( - "[%x] %08x %08x %d u%d (%d %d)\n", - DB_PRINT_CDTC, pps_arrvstamp.l_ui, - pps_arrvstamp.l_uf, conv, ees->unit, - call_pps_sample, pps_step); - } - - /* See if there has been a 4ms jump at a minute boundry */ - { l_fp delta; -#define delta_isec delta.l_ui -#define delta_ssec delta.l_i -#define delta_sfsec delta.l_f - long delta_f_abs; - - delta.l_i = ees->arrvtime.l_i; - delta.l_f = ees->arrvtime.l_f; - - L_SUB(&delta, &ees->last_l); - delta_f_abs = delta_sfsec; - if (delta_f_abs < 0) delta_f_abs = -delta_f_abs; - - /* Dump the deltas each minute */ - if (debug & DB_DUMP_DELTAS) - { if (0 <= ees->second && - ees->second < ((sizeof deltas) / (sizeof deltas[0]))) deltas[ees->second] = delta_sfsec; - /* Dump on second 1, as second 0 sometimes missed */ - if (ees->second == 1) { - char text[16 * ((sizeof deltas) / (sizeof deltas[0]))]; - char *ptr=text; - int i; - for (i=0; i<((sizeof deltas) / (sizeof deltas[0])); i++) { - sprintf(ptr, " %d.%04d", - msec(deltas[i]), subms(deltas[i])); - while (*ptr) ptr++; - } - syslog(LOG_ERR, "Deltas: %d.%04d<->%d.%04d: %s", - msec(EES_STEP_F - EES_STEP_F_GRACE), subms(EES_STEP_F - EES_STEP_F_GRACE), - msec(EES_STEP_F + EES_STEP_F_GRACE), subms(EES_STEP_F + EES_STEP_F_GRACE), - text+1); - for (i=0; i<((sizeof deltas) / (sizeof deltas[0])); i++) deltas[i] = 0; - } - } - - /* Lets see if we have a 4 mS step at a minute boundaary */ - if ( ((EES_STEP_F - EES_STEP_F_GRACE) < delta_f_abs) && - (delta_f_abs < (EES_STEP_F + EES_STEP_F_GRACE)) && - (ees->second == 0 || ees->second == 1 || ees->second == 2) && - (sincelast < 0 || sincelast > 122) - ) { /* 4ms jump at min boundry */ - int old_sincelast; - int count=0; - int sum = 0; - /* Yes -- so compute the ramp time */ - if (ees->last_step == 0) sincelast = 0; - old_sincelast = sincelast; - - /* First time in, just set "ees->last_step" */ - if(ees->last_step) { - int other_step = 0; - int third_step = 0; - int this_step = (sincelast + (60 /2)) / 60; - int p_step = ees->this_step; - int p; - ees->last_steps[p_step] = this_step; - p= p_step; - p_step++; - if (p_step >= LAST_STEPS) p_step = 0; - ees->this_step = p_step; - /* Find the "average" interval */ - while (p != p_step) { - int this = ees->last_steps[p]; - if (this == 0) break; - if (this != this_step) { - if (other_step == 0 && ( - this== (this_step +2) || - this== (this_step -2) || - this== (this_step +1) || - this== (this_step -1))) - other_step = this; - if (other_step != this) { - int delta = (this_step - other_step); - if (delta < 0) delta = - delta; - if (third_step == 0 && ( - (delta == 1) ? ( - this == (other_step +1) || - this == (other_step -1) || - this == (this_step +1) || - this == (this_step -1)) - : - ( - this == (this_step + other_step)/2 - ) - )) third_step = this; - if (third_step != this) break; - } - } - sum += this; - p--; - if (p < 0) p += LAST_STEPS; - count++; - } -syslog(LOG_ERR, "MSF%d: %d: This=%d (%d), other=%d/%d, sum=%d, count=%d, pps_step=%d, suspect=%x", ees->unit, p, ees->last_steps[p], this_step, other_step, third_step, sum, count, pps_step, suspect_4ms_step); - if (count != 0) sum = ((sum * 60) + (count /2)) / count; -#define SV(x) (ees->last_steps[(x + p_step) % LAST_STEPS]) -syslog(LOG_ERR, "MSF%d: %x steps %d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", - ees->unit, suspect_4ms_step, p_step, SV(0), SV(1), SV(2), SV(3), SV(4), SV(5), SV(6), - SV(7), SV(8), SV(9), SV(10), SV(11), SV(12), SV(13), SV(14), SV(15)); -printf("MSF%d: steps %d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", - ees->unit, p_step, SV(0), SV(1), SV(2), SV(3), SV(4), SV(5), SV(6), - SV(7), SV(8), SV(9), SV(10), SV(11), SV(12), SV(13), SV(14), SV(15)); -#undef SV - ees->jump_fsecs = delta_sfsec; - ees->using_ramp = 1; - if (sincelast > 170) - ees->last_step_late += sincelast - ((sum) ? sum : ees->last_step_secs); - else ees->last_step_late = 30; - if (ees->last_step_late < -60 || ees->last_step_late > 120) ees->last_step_late = 30; - if (ees->last_step_late < 0) ees->last_step_late = 0; - if (ees->last_step_late >= 60) ees->last_step_late = 59; - sincelast = 0; - } - else { /* First time in -- just save info */ - ees->last_step_late = 30; - ees->jump_fsecs = delta_sfsec; - ees->using_ramp = 1; - sum = 4 * 60; - } - ees->last_step = this_uisec; -printf("MSF%d: d=%3d.%04d@%d :%d:%d:$%d:%d:%d\n", -ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, old_sincelast, ees->last_step_late, count, sum, ees->last_step_secs); -syslog(LOG_ERR, "MSF%d: d=%3d.%04d@%d :%d:%d:%d:%d:%d", -ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, old_sincelast, ees->last_step_late, count, sum, ees->last_step_secs); - if (sum) ees->last_step_secs = sum; - } - /* OK, so not a 4ms step at a minute boundry */ - else { - if (suspect_4ms_step) syslog(LOG_ERR, - "MSF%d: suspect = %x, but delta of %d.%04d [%d.%04d<%d.%04d<%d.%04d: %d %d]", - ees->unit, suspect_4ms_step, msec(delta_sfsec), subms(delta_sfsec), - msec(EES_STEP_F - EES_STEP_F_GRACE), - subms(EES_STEP_F - EES_STEP_F_GRACE), - msec(delta_f_abs), - subms(delta_f_abs), - msec(EES_STEP_F + EES_STEP_F_GRACE), - subms(EES_STEP_F + EES_STEP_F_GRACE), - ees->second, - sincelast); - if ((delta_f_abs > EES_STEP_NOTE) && ees->last_l.l_i) { - static ees_step_notes = EES_STEP_NOTES; - if (ees_step_notes > 0) { - ees_step_notes--; -printf("MSF%d: D=%3d.%04d@%02d :%d%s\n", -ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, sincelast, ees_step_notes ? "" : " -- NO MORE !"); -syslog(LOG_ERR, "MSF%d: D=%3d.%04d@%02d :%d%s", -ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, (ees->last_step) ? sincelast : -1, ees_step_notes ? "" : " -- NO MORE !"); - } - } - } - } - ees->last_l = ees->arrvtime; - - /* IF we have found that it's ramping - * && it's within twice the expected ramp period - * && there is a non zero step size (avoid /0 !) - * THEN we twiddle things - */ - if (ees->using_ramp && - sincelast < (ees->last_step_secs)*2 && - ees->last_step_secs) - { long sec_of_ramp = sincelast + ees->last_step_late; - long fsecs; - l_fp inc; - - /* Ramp time may vary, so may ramp for longer than last time */ - if (sec_of_ramp > (ees->last_step_secs + 120)) - sec_of_ramp = ees->last_step_secs; - - /* sec_of_ramp * ees->jump_fsecs may overflow 2**32 */ - fsecs = sec_of_ramp * (ees->jump_fsecs / ees->last_step_secs); - - if (debug & DB_LOG_DELTAS) syslog(LOG_ERR, - "[%x] MSF%d: %3d/%03d -> d=%11d (%d|%d)", - DB_LOG_DELTAS, - ees->unit, sec_of_ramp, ees->last_step_secs, fsecs, - pps_arrvstamp.l_f, pps_arrvstamp.l_f + fsecs); - if (debug & DB_PRINT_DELTAS) printf( - "MSF%d: %3d/%03d -> d=%11d (%d|%d)\n", - ees->unit, sec_of_ramp, ees->last_step_secs, fsecs, - pps_arrvstamp.l_f, pps_arrvstamp.l_f + fsecs); - - /* Must sign extend the result */ - inc.l_i = (fsecs < 0) ? -1 : 0; - inc.l_f = fsecs; - if (debug & DB_INC_PPS) - { L_SUB(&pps_arrvstamp, &inc); - L_SUB(&ees->arrvtime, &inc); - } - else - { L_ADD(&pps_arrvstamp, &inc); - L_ADD(&ees->arrvtime, &inc); - } - } - else { - if (debug & DB_LOG_DELTAS) syslog(LOG_ERR, - "[%x] MSF%d: ees->using_ramp=%d, sincelast=%x / %x, ees->last_step_secs=%x", - DB_LOG_DELTAS, - ees->unit, ees->using_ramp, - sincelast, - (ees->last_step_secs)*2, - ees->last_step_secs); - if (debug & DB_PRINT_DELTAS) printf( - "[%x] MSF%d: ees->using_ramp=%d, sincelast=%x / %x, ees->last_step_secs=%x\n", - DB_LOG_DELTAS, - ees->unit, ees->using_ramp, - sincelast, - (ees->last_step_secs)*2, - ees->last_step_secs); - } - - L_SUB(&ees->arrvtime, &offset_fudge[ees->unit]); - L_SUB(&pps_arrvstamp, &offset_fudge[ees->unit]); - - if (call_pps_sample && !(debug & DB_NO_PPS)) { - /* Sigh -- it expects its args negated */ - L_NEG(&pps_arrvstamp); - (void) pps_sample(&pps_arrvstamp); - } - - /* Subtract off the local clock time stamp */ - L_SUB(&ees->codeoffsets[n_sample], &ees->arrvtime); - if (debug & DB_LOG_SAMPLES) syslog(LOG_ERR, - "MSF%d: [%x] %d (ees: %d %d) (pps: %d %d)%s", - ees->unit, DB_LOG_DELTAS, n_sample, - ees->codeoffsets[n_sample].l_f, - ees->codeoffsets[n_sample].l_f / 4295, - pps_arrvstamp.l_f, - pps_arrvstamp.l_f /4295, - (debug & DB_NO_PPS) ? " [no PPS]" : ""); - - if (ees->nsamples++ == NCODES-1) ees_process(ees); - - /* Done! */ -} - - -static void set_x(fp_offset) -l_fp *fp_offset; -{ - step_systime_real(fp_offset); -} - - -/* offcompare - auxiliary comparison routine for offset sort */ - -static int -offcompare(a, b) -l_fp *a, *b; -{ - return(L_ISGEQ(a, b) ? (L_ISEQU(a, b) ? 0 : 1) : -1); -} - - -/* ees_process - process a pile of samples from the clock */ -static void ees_process(ees) - struct eesunit *ees; -{ - static last_samples = -1; - register int i, j; - register int noff; - register l_fp *coffs = ees->codeoffsets; - l_fp offset, tmp; - u_fp dispersion; /* ++++ */ - int lostsync, isinsync; - int samples = ees->nsamples; - int samplelog; - int samplereduce = (samples + 1) / 2; - - /* Reset things to zero so we don't have to worry later */ - ees_reset(ees); - - if (sloppyclockflag[ees->unit]) { - samplelog = (samples < 2) ? 0 : - (samples < 5) ? 1 : - (samples < 9) ? 2 : - (samples < 17) ? 3 : - (samples < 33) ? 4 : 5; - samplereduce = (1 << samplelog); - } - - if (samples != last_samples && - ((samples != (last_samples-1)) || samples < 3)) { - syslog(LOG_ERR, "Samples=%d (%d), samplereduce=%d ....", - samples, last_samples, samplereduce); - last_samples = samples; - } - if (samples < 1) return; - - /* If requested, dump the raw data we have in the buffer */ - if (ees->dump_vals) dump_buf(coffs, 0, samples, "Raw data is:"); - - /* Sort the offsets, trim off the extremes, then choose one. */ - qsort((char *) coffs, samples, sizeof(l_fp), offcompare); - - noff = samples; - i = 0; - while ((noff - i) > samplereduce) { - /* Trim off the sample which is further away - * from the median. We work this out by doubling - * the median, subtracting off the end samples, and - * looking at the sign of the answer, using the - * identity (c-b)-(b-a) == 2*b-a-c - */ - tmp = coffs[(noff + i)/2]; - L_ADD(&tmp, &tmp); - L_SUB(&tmp, &coffs[i]); - L_SUB(&tmp, &coffs[noff-1]); - if (L_ISNEG(&tmp)) noff--; else i++; - } - - /* If requested, dump the reduce data we have in the buffer */ - if (ees->dump_vals) dump_buf(coffs, i, noff, "Reduced to:"); - - /* What we do next depends on the setting of the sloppy clock flag. - * If it is on, average the remainder to derive our estimate. - * Otherwise, just pick a representative value from the remaining stuff - */ - if (sloppyclockflag[ees->unit]) { - offset.l_ui = offset.l_uf = 0; - for (j = i; j < noff; j++) - L_ADD(&offset, &coffs[j]); - for (j = samplelog; j > 0; j--) - L_RSHIFTU(&offset); - } - else offset = coffs[i+BESTSAMPLE]; - - /* Compute the dispersion as the difference between the - * lowest and highest offsets that remain in the - * consideration list. - * - * It looks like MOST clocks have MOD (max error), so halve it ! - */ - tmp = coffs[noff-1]; - L_SUB(&tmp, &coffs[i]); -#define FRACT_SEC(n) ((1 << 30) / (n/2)) - dispersion = LFPTOFP(&tmp) / 2; /* ++++ */ - if (debug & (DB_SYSLOG_SMPLI | DB_SYSLOG_SMPLE)) syslog( - (debug & DB_SYSLOG_SMPLE) ? LOG_ERR : LOG_INFO, - "I: [%x] Offset=%06d (%d), disp=%06d%s [%d], %d %d=%d %d:%d %d=%d %d", - debug & (DB_SYSLOG_SMPLI | DB_SYSLOG_SMPLE), - offset.l_f / 4295, offset.l_f, - (dispersion * 1526) / 100, - (sloppyclockflag[ees->unit]) ? " by averaging" : "", - FRACT_SEC(10) / 4295, - (coffs[0].l_f) / 4295, - i, - (coffs[i].l_f) / 4295, - (coffs[samples/2].l_f) / 4295, - (coffs[i+BESTSAMPLE].l_f) / 4295, - noff-1, - (coffs[noff-1].l_f) / 4295, - (coffs[samples-1].l_f) / 4295); - - /* Are we playing silly wotsits ? - * If we are using all data, see if there is a "small" delta, - * and if so, blurr this with 3/4 of the delta from the last value - */ - if (ees->usealldata && ees->offset.l_uf) { - long diff = (long) (ees->offset.l_uf - offset.l_uf); - - /* is the delta small enough ? */ - if ((- FRACT_SEC(100)) < diff && diff < FRACT_SEC(100)) { - int samd = (64 * 4) / samples; - long new; - if (samd < 2) samd = 2; - new = offset.l_uf + ((diff * (samd -1)) / samd); - - /* Sign change -> need to fix up int part */ - if ((new & (1 << 31)) != - (((long) offset.l_uf) & ( 1 << 31))) - { syslog(LOG_INFO, "I: %x != %x (%x %x), so add %d", - new & (1 << 31), - ((long) offset.l_uf) & ( 1 << 31), - new, (long) offset.l_uf, - (new < 0) ? -1 : 1); - offset.l_ui += (new < 0) ? -1 : 1; - } - dispersion /= 4; - if (debug & (DB_SYSLOG_SMTHI | DB_SYSLOG_SMTHE)) syslog( - (debug & DB_SYSLOG_SMTHE) ? LOG_ERR : LOG_INFO, - "I: [%x] Smooth data: %d -> %d, dispersion now %d", - debug & (DB_SYSLOG_SMTHI | DB_SYSLOG_SMTHE), - ((long) offset.l_uf) / 4295, new / 4295, - (dispersion * 1526) / 100); - offset.l_uf = new; - } - else if (debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE)) syslog( - (debug & DB_SYSLOG_NSMTHE) ? LOG_ERR : LOG_INFO, - "[%x] No smooth as delta not %d < %d < %d", - debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE), - - FRACT_SEC(100), diff, FRACT_SEC(100)); - } - else if (debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE)) syslog( - (debug & DB_SYSLOG_NSMTHE) ? LOG_ERR : LOG_INFO, - "I: [%x] No smooth as flag=%x and old=%x=%d (%d:%d)", - debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE), - ees->usealldata, ees->offset.l_f, ees->offset.l_uf, - offset.l_f, ees->offset.l_f - offset.l_f); - - /* Collect offset info for debugging info */ - ees->offset = offset; - ees->lowoffset = coffs[i]; - ees->highoffset = coffs[noff-1]; - - /* Determine synchronization status. Can be unsync'd either - * by a report from the clock or by a leap hold. - * - * Loss of the radio signal for a short time does not cause - * us to go unsynchronised, since the receiver keeps quite - * good time on its own. The spec says 20ms in 4 hours; the - * observed drift in our clock (Cambridge) is about a second - * a day, but even that keeps us within the inherent tolerance - * of the clock for about 15 minutes. Observation shows that - * the typical "short" outage is 3 minutes, so to allow us - * to ride out those, we will give it 5 minutes. - */ - lostsync = current_time - ees->clocklastgood > 300 ? 1 : 0; - isinsync = (lostsync || ees->leaphold > current_time) ? 0 : 1; - - /* Done. Use time of last good, synchronised code as the - * reference time, and lastsampletime as the receive time. - */ - if (ees->fix_pending) { - syslog(LOG_ERR, "MSF%d: fix_pending=%d -> jump %x.%08x\n", - ees->fix_pending, ees->unit, offset.l_i, offset.l_f); - ees->fix_pending = 0; - set_x(&offset); - L_CLR(&offset); - } - refclock_receive(ees->peer, - &offset, - 0, /* delay */ - dispersion, - &ees->reftime, - &ees->lastsampletime, /* receive time */ - (isinsync) ? 0 : LEAP_NOTINSYNC); - ees_event(ees, lostsync ? CEVNT_PROP : CEVNT_NOMINAL); -} - -/* msfees_poll - called by the transmit procedure */ -static void msfees_poll(unit, peer) - int unit; - char *peer; -{ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "ees clock poll: INTERNAL: unit %d invalid", - unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "ees clock poll: INTERNAL: unit %d unused", - unit); - return; - } - - ees_process(eesunits[unit]); - - if ((current_time - eesunits[unit]->lasttime) > 150) - ees_event(eesunits[unit], CEVNT_FAULT); -} - -/* msfees_leap - called when a leap second occurs */ -static void msfees_leap() -{ - register int i; - - /* This routine should be entered a few seconds after - * midnight UTC when a leap second occurs. To ensure we - * don't believe foolish time from the clock(s) we set a - * 40 minute hold on them. It shouldn't take anywhere - * near this amount of time to adjust if the clock is getTING - * data, but doing anything else is complicated. - */ - for (i = 0; i < MAXUNITS; i++) if (unitinuse[i]) - eesunits[i]->leaphold = current_time + EESLEAPHOLD; -} - -/* msfees_control - set fudge factors, return statistics */ -static void msfees_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct eesunit *ees = eesunits[unit]; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "ees clock: unit %d invalid (max %d)", - unit, MAXUNITS-1); - return; - } - - if (in != 0) { - if (in->haveflags & CLK_HAVETIME1) - fudgefactor[unit] = in->fudgetime1; - if (in->haveflags & CLK_HAVETIME2) - os_delay[unit] = in->fudgetime2; - offset_fudge[unit] = os_delay[unit]; - L_ADD(&offset_fudge[unit], &fudgefactor[unit]); - L_ADD(&offset_fudge[unit], &inherent_delay[unit]); - if (in->haveflags & CLK_HAVEVAL1) { - stratumtouse[unit] = (u_char)(in->fudgeval1 & 0xf); - if (unitinuse[unit]) { - /* Should actually reselect clock, but - * will wait for the next timecode - */ - struct peer *peer = ees->peer; - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) { - memmove((char *)&peer->refid, - EESREFID, 4); - if (unit>0 && unit<10) - ((char *)&peer->refid)[3] = - '0' + unit; - } - else peer->refid = htonl(EESHSREFID); - } - } - if (in->haveflags & CLK_HAVEVAL2) { - printf("Debug: %x -> %x\n", debug, in->fudgeval2); - syslog(LOG_ERR, "MSF%d: debug %x -> %x", - unit, debug, in->fudgeval2); - debug = in->fudgeval2; - } - if (in->haveflags & CLK_HAVEFLAG1) { - sloppyclockflag[unit] = in->flags & CLK_FLAG1; - } - if (in->haveflags & CLK_HAVEFLAG2) { - ees->fix_pending++; - /* if (in->flags & CLK_FLAG2 && unitinuse[unit]) - ees->leaphold = 0; */ - } - if (in->haveflags & CLK_HAVEFLAG3 && unitinuse[unit]) { - printf("dump_vals: %x -> %x\n", ees->dump_vals, in->flags & CLK_FLAG3); - ees->dump_vals = in->flags & CLK_FLAG3; - } - if (in->haveflags & CLK_HAVEFLAG4 && unitinuse[unit]) { - ees->usealldata = in->flags & CLK_FLAG4; - } - } - - if (out != 0) { - out->type = REFCLK_MSF_EES; - out->haveflags - = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEVAL2|CLK_HAVEFLAG1|CLK_HAVEFLAG3|CLK_HAVEFLAG4; - out->clockdesc = EESDESCRIPTION; - out->fudgetime1 = fudgefactor[unit]; - out->fudgetime2 = os_delay[unit]; - out->fudgeval1 = stratumtouse[unit]; - /*out->fudgeval2= debug*/; - memmove((char *)&out->fudgeval2, EESREFID, 4); - if (unit > 0 && unit < 10) - ((char *)&out->fudgeval2)[3] = '0' + unit; - out->flags = sloppyclockflag[unit]; - if (unitinuse[unit]) { - out->flags |= ees->dump_vals | ees->usealldata; - out->lencode = ees->lencode; - out->lastcode = ees->lastcode; - out->timereset = current_time - ees->timestarted; - out->polls = 0; /* we don't poll */ - out->noresponse = 0; /* ditto */ - out->badformat = ees->badformat; - out->baddata = ees->baddata; - out->lastevent = ees->lastevent; - out->currentstatus = ees->status; - } else { - out->lencode = 0; - out->lastcode = ""; - out->polls = out->noresponse = 0; - out->badformat = out->baddata = 0; - out->timereset = 0; - out->currentstatus = out->lastevent = CEVNT_NOMINAL; - } - } -} - - -/* msfees_buginfo - return clock dependent debugging info */ -static void msfees_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ - register struct eesunit *ees; - - bug->nvalues = bug->ntimes = 0; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "ees clock: unit %d invalid (max %d)", - unit, MAXUNITS-1); - return; - } - - if (!unitinuse[unit]) - return; - ees = eesunits[unit]; - - bug->nvalues = 16; - bug->svalues = 0x0800; - bug->values[0] = (ees->lasttime) ? current_time - ees->lasttime : 0; - bug->values[1] = (ees->clocklastgood)?current_time-ees->clocklastgood:0; - bug->values[2] = ees->status; - bug->values[3] = ees->lastevent; - bug->values[4] = ees->reason; - bug->values[5] = ees->nsamples; - bug->values[6] = ees->codestate; - bug->values[7] = ees->day; - bug->values[8] = ees->hour; - bug->values[9] = ees->minute; - bug->values[10] = ees->second; - bug->values[11] = ees->tz; - bug->values[12] = ees->yearstart; - bug->values[13] = (ees->leaphold > current_time) ? - ees->leaphold - current_time : 0; - bug->values[14] = inherent_delay[unit].l_uf; - bug->values[15] = offset_fudge[unit].l_uf; - - bug->ntimes = 11; - bug->stimes = 0x3f8; - bug->times[0] = ees->reftime; - bug->times[1] = ees->arrvtime; - bug->times[2] = ees->lastsampletime; - bug->times[3] = ees->offset; - bug->times[4] = ees->lowoffset; - bug->times[5] = ees->highoffset; - bug->times[6] = inherent_delay[unit]; - bug->times[8] = os_delay[unit]; - bug->times[7] = fudgefactor[unit]; - bug->times[9] = offset_fudge[unit]; - bug->times[10].l_ui = ees->yearstart; - bug->times[10].l_uf = 0; -} - -struct refclock refclock_msfees = { - msfees_start, msfees_shutdown, msfees_poll, - msfees_control, msfees_init, msfees_buginfo, NOFLAGS -}; -#endif /* defined(REFCLOCK) && defined(MSFEESPPS) && defined(STREAM) */ diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_mx4200.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_mx4200.c deleted file mode 100644 index caf5951..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_mx4200.c +++ /dev/null @@ -1,977 +0,0 @@ -/* - * This software was developed by the Computer Systems Engineering group - * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66. - * - * Copyright (c) 1992 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Lawrence Berkeley Laboratory. - * 4. The name of the University may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(REFCLOCK) && defined(MX4200) - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_calendar.h" -#include "ntp_unixtime.h" - -#if __STDC__ -#include <stdarg.h> -#else -#include <varargs.h> -#endif - -#include <sys/ppsclock.h> - -#include "mx4200.h" -#include "ntp_stdlib.h" - -/* - * This driver supports the Magnavox Model MX4200 GPS Receiver. - */ - -/* - * Definitions - */ -#define MAXUNITS 2 /* max number of mx4200 units */ -#define MX4200FD "/dev/gps%d" -#define SPEED232 B4800 /* baud */ - -/* - * The number of raw samples which we acquire to derive a single estimate. - */ -#define NSTMPS 64 - -/* - * Radio interface parameters - */ -#define MX4200PRECISION (-18) /* precision assumed (about 4 us) */ -#define MX4200REFID "GPS" /* reference id */ -#define MX4200DESCRIPTION "Magnavox MX4200 GPS Receiver" /* WRU */ -#define DEFFUDGETIME 0 /* default fudge time (ms) */ - -/* Leap stuff */ -extern u_long leap_hoursfromleap; -extern u_long leap_happened; -static int leap_debug; - -/* - * mx4200_reset - reset the count back to zero - */ -#define mx4200_reset(up) \ - do { \ - (up)->nsamples = 0; \ - } while (0) - -/* - * Imported from the timer module - */ -extern u_long current_time; -extern struct event timerqueue[]; - -/* - * Imported from ntp_loopfilter module - */ -extern int fdpps; /* pps file descriptor */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * MX4200 unit control structure. - */ -struct mx4200unit { - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - u_long gpssamples[NSTMPS]; /* the GPS time samples */ - l_fp unixsamples[NSTMPS]; /* the UNIX time samples */ - - - l_fp lastsampletime; /* time of last estimate */ - u_int lastserial; /* last pps serial number */ -#ifdef notdef - l_fp lastrec; /* last receive time */ - l_fp lastref; /* last timecode time */ -#endif - char lastcode[RX_BUFF_SIZE]; /* last timecode received */ - u_long lasttime; /* last time clock heard from */ - u_char nsamples; /* number of samples we've collected */ - u_char unit; /* unit number for this guy */ - u_char status; /* clock status */ - u_char lastevent; /* last clock event */ - u_char reason; /* reason for last abort */ - u_char lencode; /* length of last timecode */ - u_char year; /* year of eternity */ - u_short monthday; /* day of month */ - u_char hour; /* hour of day */ - u_char minute; /* minute of hour */ - u_char second; /* seconds of minute */ - u_char leap; /* leap indicators */ - /* - * Status tallies - */ -#ifdef notdef - u_long polls; /* polls sent */ - u_long noresponse; /* number of nonresponses */ -#endif - u_long badformat; /* bad format */ - u_long baddata; /* bad data */ - u_long timestarted; /* time we started this */ -}; - -/* - * We demand that consecutive PPS samples are more than 0.995 seconds - * and less than 1.005 seconds apart. - */ -#define PPSLODIFF_UI 0 /* 0.900 as an l_fp */ -#define PPSLODIFF_UF 0xe6666610 - -#define PPSHIDIFF_UI 1 /* 1.100 as an l_fp */ -#define PPSHIDIFF_UF 0x19999990 - -/* - * reason codes - */ -#define PPSREASON 20 -#define CODEREASON 40 -#define PROCREASON 60 - -/* - * Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. - */ -static struct mx4200unit *mx4200units[MAXUNITS]; - -static const char pmvxg[] = "PMVXG"; - -/* - * Function prototypes - */ -static int mx4200_start P((int, struct peer *)); -static void mx4200_shutdown P((int, struct peer *)); -static void mx4200_receive P((struct recvbuf *)); -static void mx4200_process P((struct mx4200unit *)); -static void mx4200_poll P((int, struct peer *)); - -static char * mx4200_parse P((char *, struct calendar *, int *, int *)); -static int mx4200_needconf P((char *)); -static void mx4200_config P((struct mx4200unit *)); -static void mx4200_send P((int, const char *, ...)); -static int mx4200_cmpl_fp P((void *, void *)); -static u_char cksum P((char *, u_int)); - -#ifdef DEBUG -static void opendfile P((int)); -static void checkdfile P((void)); -#endif /* DEBUG */ - -/* - * Transfer vector - */ -struct refclock refclock_mx4200 = { - mx4200_start, /* start up driver */ - mx4200_shutdown, /* shut down driver */ - mx4200_poll, /* transmit poll message */ - noentry, /* not used (old mx4200_control) */ - noentry, /* initialize driver (not used) */ - noentry, /* not used (old mx4200_buginfo) */ - NOFLAGS /* not used */ -}; - -#ifdef DEBUG -static char dfile[] = "/var/tmp/MX4200.debug"; -static FILE *df = NULL; - -static void -opendfile(create) - int create; -{ - if (!create && access(dfile, F_OK) < 0) { - syslog(LOG_ERR, "mx4200: open %s: %m", dfile); - return; - } - df = fopen(dfile, "a"); - if (df == NULL) - syslog(LOG_ERR, "mx4200: open %s: %m", dfile); - else if (setvbuf(df, NULL, _IOLBF, 0) < 0) - syslog(LOG_ERR, "mx4200: setvbuf %s: %m", dfile); -} - -static void -checkdfile() -{ - - if (df == NULL) - return; - - if (access(dfile, F_OK) < 0) { - fclose(df); - opendfile(1); - } -} - -#endif - - -/* - * mx4200_start - open the devices and initialize data for processing - */ -static int -mx4200_start(unit, peer) - int unit; - struct peer *peer; -{ - register struct mx4200unit *up; - struct refclockproc *pp; - int fd; - char device[20]; - - /* - * Open serial port - */ - (void)sprintf(device, MX4200FD, unit); - if (!(fd = refclock_open(device, SPEED232, 0))) - return (0); - - /* - * Allocate and initialize unit structure - */ - if (!(up = (struct mx4200unit *) - emalloc(sizeof(struct mx4200unit)))) { - (void) close(fd); - return (0); - } - memset((char *)up, 0, sizeof(struct mx4200unit)); - up->io.clock_recv = mx4200_receive; - up->io.srcclock = (caddr_t)up; - up->io.datalen = 0; - up->io.fd = fd; - if (!io_addclock(&up->io)) { - (void) close(fd); - free(up); - return (0); - } - up->peer = peer; - pp = peer->procptr; - pp->unitptr = (caddr_t)up; - - /* - * Initialize miscellaneous variables - */ - peer->precision = MX4200PRECISION; - pp->clockdesc = MX4200DESCRIPTION; - memcpy((char *)&pp->refid, MX4200REFID, 4); - - /* Insure the receiver is properly configured */ - mx4200_config(up); - -#ifdef DEBUG - opendfile(0); -#endif - return (1); -} - - -/* - * mx4200_shutdown - shut down the clock - */ -static void -mx4200_shutdown(unit, peer) - int unit; - struct peer *peer; -{ - register struct mx4200unit *up; - struct refclockproc *pp; - - pp = peer->procptr; - up = (struct mx4200unit *)pp->unitptr; - io_closeclock(&up->io); - free(up); -} - - -static void -mx4200_config(up) - register struct mx4200unit *up; -{ - register int fd = up->io.fd; - -syslog(LOG_DEBUG, "mx4200_config"); - - /* Zero the output list (do it twice to flush possible junk) */ - mx4200_send(fd, "%s,%03d,,%d,,,,,,", pmvxg, PMVXG_S_PORTCONF, 1); - mx4200_send(fd, "%s,%03d,,%d,,,,,,", pmvxg, PMVXG_S_PORTCONF, 1); - - /* Switch to 2d mode */ - mx4200_send(fd, "%s,%03d,%d,,%.1f,%.1f,,%d,%d,%c,%d", - pmvxg, PMVXG_S_INITMODEB, - 2, /* 2d mode */ - 0.1, /* hor accel fact as per Steve */ - 0.1, /* ver accel fact as per Steve */ - 10, /* hdop limit as per Steve */ - 5, /* elevation limit as per Steve */ - 'U', /* time output mode */ - 0); /* local time offset from gmt */ - - /* Configure time recovery */ - mx4200_send(fd, "%s,%03d,%c,%c,%c,%d,%d,%d,", - pmvxg, PMVXG_S_TRECOVCONF, -#ifdef notdef - 'K', /* known position */ - 'D', /* dynamic position */ -#else - 'S', /* static position */ -#endif - 'U', /* steer clock to gps time */ - 'A', /* always output time pulse */ - 500, /* max time error in ns */ - 0, /* user bias in ns */ - 1); /* output to control port */ -} - - -/* - * mx4200_poll - mx4200 watchdog routine - */ -static void -mx4200_poll(unit, peer) - int unit; - struct peer *peer; -{ - register struct mx4200unit *up; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "mx4200_poll: unit %d invalid", unit); - return; - } - - up = mx4200units[unit]; - if ((current_time - up->lasttime) > 150) { - refclock_report(peer, CEVNT_FAULT); - - /* Request a status message which should trigger a reconfig */ - mx4200_send(up->io.fd, "%s,%03d", "CDGPQ", PMVXG_D_STATUS); - syslog(LOG_DEBUG, "mx4200_poll: request status"); - } -} - -static const char char2hex[] = "0123456789ABCDEF"; - - -/* - * mx4200_receive - receive gps data - */ -static void -mx4200_receive(rbufp) - struct recvbuf *rbufp; -{ - register struct mx4200unit *up; - struct peer *peer; - register char *dpt, *cp; - register u_long tmp_ui; - register u_long tmp_uf; - register u_long gpstime; - struct ppsclockev ev; - register struct calendar *jt; - struct calendar sjt; - register int n; - int valid, leapsec; - register u_char ck; - - up = (struct mx4200unit *)rbufp->recv_srcclock; - peer = up->peer; -#ifdef DEBUG - if (debug > 3) - printf("mx4200_receive: nsamples = %d\n", up->nsamples); -#endif - - /* Record the time of this event */ - up->lasttime = current_time; - - /* Get the pps value */ - if (ioctl(up->io.fd, CIOGETEV, (char *)&ev) < 0) { - /* XXX Actually, if this fails, we're pretty much screwed */ -#ifdef DEBUG - if (debug) { - fprintf(stderr, "mx4200_receive: "); - perror("CIOGETEV"); - } -#endif - refclock_report(peer, CEVNT_FAULT); - mx4200_reset(up); - return; - } - tmp_ui = ev.tv.tv_sec + JAN_1970; - TVUTOTSF(ev.tv.tv_usec, tmp_uf); - - /* Get buffer and length; sock away last timecode */ - n = rbufp->recv_length; - dpt = rbufp->recv_buffer; - if (n <= 1) - return; - up->lencode = n; - memmove(up->lastcode, dpt, n); - - /* - * We expect to see something like: - * - * $PMVXG,830,T,1992,07,09,04:18:34,U,S,-02154,00019,000000,00*1D\n - * - * Reject if any important landmarks are missing. - */ - cp = dpt + n - 4; - if (cp < dpt || *dpt != '$' || cp[0] != '*' || cp[3] != '\n') { -#ifdef DEBUG - if (debug) - printf("mx4200_receive: bad format\n"); -#endif - refclock_report(peer, CEVNT_BADREPLY); - mx4200_reset(up); - return; - } - - /* Check checksum */ - ck = cksum(&dpt[1], n - 5); - if (char2hex[ck >> 4] != cp[1] || char2hex[ck & 0xf] != cp[2]) { -#ifdef DEBUG - if (debug) - printf("mx4200_receive: bad checksum\n"); -#endif - refclock_report(peer, CEVNT_BADREPLY); - mx4200_reset(up); - return; - } - - /* Truncate checksum (and the buffer for that matter) */ - *cp = '\0'; - - /* Leap second debugging stuff */ - if ((leap_hoursfromleap && !leap_happened) || leap_debug > 0) { - /* generate reports for awhile after leap */ - if (leap_hoursfromleap && !leap_happened) - leap_debug = 3600; - else - --leap_debug; - syslog(LOG_INFO, "mx4200 leap: %s \"%s\"", - umfptoa(tmp_ui, tmp_uf, 6), dpt); - } - - /* Parse time recovery message */ - jt = &sjt; - if ((cp = mx4200_parse(dpt, jt, &valid, &leapsec)) != NULL) { - /* Configure the receiver if necessary */ - if (mx4200_needconf(dpt)) - mx4200_config(up); -#ifdef DEBUG - if (debug) - printf("mx4200_receive: mx4200_parse: %s\n", cp); -#endif - refclock_report(peer, CEVNT_BADREPLY); - mx4200_reset(up); - return; - } - - /* Setup leap second indicator */ - if (leapsec == 0) - up->leap = LEAP_NOWARNING; - else if (leapsec == 1) - up->leap = LEAP_ADDSECOND; - else if (leapsec == -1) - up->leap = LEAP_DELSECOND; - else - up->leap = LEAP_NOTINSYNC; /* shouldn't happen */ - - /* Check parsed time (allow for possible leap seconds) */ - if (jt->second >= 61 || jt->minute >= 60 || jt->hour >= 24) { -#ifdef DEBUG - if (debug) { - printf("mx4200_receive: bad time %d:%02d:%02d", - jt->hour, jt->minute, jt->second); - if (leapsec != 0) - printf(" (leap %+d)", leapsec); - putchar('\n'); - } -#endif - refclock_report(peer, CEVNT_BADTIME); - mx4200_reset(up); - /* Eat the next pulse which the clock claims will be bad */ - up->nsamples = -1; - return; - } - - /* Check parsed date */ - if (jt->monthday > 31 || jt->month > 12 || jt->year < 1900) { -#ifdef DEBUG - if (debug) - printf("mx4200_receive: bad date (%d/%d/%d)\n", - jt->monthday, jt->month, jt->year); -#endif - refclock_report(peer, CEVNT_BADDATE); - mx4200_reset(up); - return; - } - - /* Convert to ntp time */ - gpstime = caltontp(jt); - - /* The gps message describes the *next* pulse; pretend it's this one */ - --gpstime; - - /* Debugging */ -#ifdef DEBUG - checkdfile(); - if (df != NULL) { - l_fp t; - - t.l_ui = gpstime; - t.l_uf = 0; - M_SUB(t.l_ui, t.l_uf, tmp_ui, tmp_uf); - fprintf(df, "%s\t%s", - umfptoa(tmp_ui, tmp_uf, 6), mfptoa(t.l_ui, t.l_uf, 6)); - if (debug > 3) - fprintf(df, "\t(gps: %lu)", gpstime); - if (leapsec != 0) - fprintf(df, "\t(leap sec %+d)", leapsec); - if (!valid) - fprintf(df, "\t(pulse not valid)"); - fputc('\n', df); - } -#endif - - /* Check pps serial number against last one */ - if (up->lastserial + 1 != ev.serial && up->lastserial != 0) { -#ifdef DEBUG - if (debug) { - if (ev.serial == up->lastserial) - printf("mx4200_receive: no new pps event\n"); - else - printf("mx4200_receive: missed %d pps events\n", - ev.serial - up->lastserial - 1); - } -#endif - refclock_report(peer, CEVNT_FAULT); - mx4200_reset(up); - /* fall through and this one collect as first sample */ - } - up->lastserial = ev.serial; - -/* - * XXX - * Since this message is for the next pulse, it's really the next pulse - * that the clock might be telling us will be invalid. - */ - /* Toss if not designated "valid" by the gps */ - if (!valid) { -#ifdef DEBUG - if (debug) - printf("mx4200_receive: pps not valid\n"); -#endif - refclock_report(peer, CEVNT_BADTIME); - mx4200_reset(up); - return; - } - - /* Copy time into mx4200unit struct */ - /* XXX (why?) */ - up->year = jt->year; - up->monthday = jt->monthday; - up->hour = jt->hour; - up->minute = jt->minute; - up->second = jt->second; - - /* Sock away the GPS and UNIX timesamples */ - n = up->nsamples++; - if (n < 0) - return; /* oops, this pulse is bad */ - up->gpssamples[n] = gpstime; - up->unixsamples[n].l_ui = up->lastsampletime.l_ui = tmp_ui; - up->unixsamples[n].l_uf = up->lastsampletime.l_uf = tmp_uf; - if (up->nsamples >= NSTMPS) { - /* - * Here we've managed to complete an entire NSTMPS - * second cycle without major mishap. Process what has - * been received. - */ - mx4200_process(up); - mx4200_reset(up); - } -} - -/* - * Compare two l_fp's, used with qsort() - */ -static int -mx4200_cmpl_fp(p1, p2) - register void *p1, *p2; -{ - - if (!L_ISGEQ((l_fp *)p1, (l_fp *)p2)) - return (-1); - if (L_ISEQU((l_fp *)p1, (l_fp *)p2)) - return (0); - return (1); -} - -/* - * mx4200_process - process a pile of samples from the clock - */ -static void -mx4200_process(up) - struct mx4200unit *up; -{ - struct peer *peer; - struct refclockproc *pp; - register int i, n; - register l_fp *fp, *op; - register u_long *lp; - l_fp off[NSTMPS]; - register u_long tmp_ui, tmp_uf; - register u_long date_ui, date_uf; - u_fp dispersion; - - /* Compute offsets from the raw data. */ - peer = up->peer; - pp = peer->procptr; - fp = up->unixsamples; - op = off; - lp = up->gpssamples; - for (i = 0; i < NSTMPS; ++i, ++lp, ++op, ++fp) { - op->l_ui = *lp; - op->l_uf = 0; - L_SUB(op, fp); - } - - /* Sort offsets into ascending order. */ - qsort((char *)off, NSTMPS, sizeof(l_fp), mx4200_cmpl_fp); - - /* - * Reject the furthest from the median until 8 samples left - */ - i = 0; - n = NSTMPS; - while ((n - i) > 8) { - tmp_ui = off[n-1].l_ui; - tmp_uf = off[n-1].l_uf; - date_ui = off[(n+i)/2].l_ui; - date_uf = off[(n+i)/2].l_uf; - M_SUB(tmp_ui, tmp_uf, date_ui, date_uf); - M_SUB(date_ui, date_uf, off[i].l_ui, off[i].l_uf); - if (M_ISHIS(date_ui, date_uf, tmp_ui, tmp_uf)) { - /* - * reject low end - */ - i++; - } else { - /* - * reject high end - */ - n--; - } - } - - /* - * Compute the dispersion based on the difference between the - * extremes of the remaining offsets. - */ - tmp_ui = off[n-1].l_ui; - tmp_uf = off[n-1].l_uf; - M_SUB(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf); - dispersion = MFPTOFP(tmp_ui, tmp_uf); - - /* - * Now compute the offset estimate. If the sloppy clock - * flag is set, average the remainder, otherwise pick the - * median. - */ - if (pp->sloppyclockflag) { - tmp_ui = tmp_uf = 0; - while (i < n) { - M_ADD(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf); - i++; - } - M_RSHIFT(tmp_ui, tmp_uf); - M_RSHIFT(tmp_ui, tmp_uf); - M_RSHIFT(tmp_ui, tmp_uf); - i = 0; - off[0].l_ui = tmp_ui; - off[0].l_uf = tmp_uf; - } else { - i = (n + i) / 2; - } - - /* - * Add the default MX4200 QT delay into this. - */ -#ifdef notdef - L_ADDUF(&off[i], MX4200QTFUDGE); -#endif - - /* - * Done. Use lastref as the reference time and lastrec - * as the receive time. ** note this can result in tossing - * out the peer in the protocol module if lastref > lastrec, - * so last rec is used for both values - dlm *** - */ - refclock_receive(up->peer, &off[i], - (s_fp)0, /* delay */ - dispersion, - &up->unixsamples[NSTMPS-1], /* reftime */ - &up->unixsamples[NSTMPS-1], /* rectime */ - up->leap); - - refclock_report(peer, CEVNT_NOMINAL); -} - - -/* - * Returns true if the this is a status message. We use this as - * an indication that the receiver needs to be initialized. - */ -static int -mx4200_needconf(buf) - char *buf; -{ - register long v; - char *cp; - - cp = buf; - - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Record type */ - v = strtol(cp, &cp, 10); - if (v != PMVXG_D_STATUS) - return (0); - /* - * XXX - * Since we configure the receiver to not give us status - * messages and since the receiver outputs status messages by - * default after being reset to factory defaults when sent the - * "$PMVXG,018,C\r\n" message, any status message we get - * indicates the reciever needs to be initialized; thus, it is - * not necessary to decode the status message. - */ -#ifdef notdef - ++cp; - - /* Receiver status */ - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Number of satellites which should be visible */ - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Number of satellites being tracked */ - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Time since last NAV */ - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Initialization status */ - v = strtol(cp, &cp, 10); - if (v == 0) -#endif - return (1); -} - -/* Parse a mx4200 time recovery message. Returns a string if error */ -static char * -mx4200_parse(buf, jt, validp, leapsecp) - register char *buf; - register struct calendar *jt; - register int *validp, *leapsecp; -{ - register long v; - char *cp; - - cp = buf; - memset((char *)jt, 0, sizeof(*jt)); - - if ((cp = strchr(cp, ',')) == NULL) - return ("no rec-type"); - ++cp; - - /* Record type */ - v = strtol(cp, &cp, 10); - if (v != PMVXG_D_TRECOVOUT) - return ("wrong rec-type"); - - /* Pulse valid indicator */ - if (*cp++ != ',') - return ("no pulse-valid"); - if (*cp == 'T') - *validp = 1; - else if (*cp == 'F') - *validp = 0; - else - return ("bad pulse-valid"); - ++cp; - - /* Year */ - if (*cp++ != ',') - return ("no year"); - jt->year = strtol(cp, &cp, 10); - - /* Month of year */ - if (*cp++ != ',') - return ("no month"); - jt->month = strtol(cp, &cp, 10); - - /* Day of month */ - if (*cp++ != ',') - return ("no month day"); - jt->monthday = strtol(cp, &cp, 10); - - /* Hour */ - if (*cp++ != ',') - return ("no hour"); - jt->hour = strtol(cp, &cp, 10); - - /* Minute */ - if (*cp++ != ':') - return ("no minute"); - jt->minute = strtol(cp, &cp, 10); - - /* Second */ - if (*cp++ != ':') - return ("no second"); - jt->second = strtol(cp, &cp, 10); - - /* Time indicator */ - if (*cp++ != ',' || *cp++ == '\0') - return ("no time indicator"); - - /* Time recovery mode */ - if (*cp++ != ',' || *cp++ == '\0') - return ("no time mode"); - - /* Oscillator offset */ - if ((cp = strchr(cp, ',')) == NULL) - return ("no osc off"); - ++cp; - - /* Time mark error */ - if ((cp = strchr(cp, ',')) == NULL) - return ("no time mark err"); - ++cp; - - /* User time bias */ - if ((cp = strchr(cp, ',')) == NULL) - return ("no user bias"); - ++cp; - - /* Leap second flag */ - if ((cp = strchr(cp, ',')) == NULL) - return ("no leap"); - ++cp; - *leapsecp = strtol(cp, &cp, 10); - - return (NULL); -} - -/* Calculate the checksum */ -static u_char -cksum(cp, n) - register char *cp; - register u_int n; -{ - register u_char ck; - - for (ck = 0; n-- > 0; ++cp) - ck ^= *cp; - return (ck); -} - -static void -#if __STDC__ -mx4200_send(register int fd, const char *fmt, ...) -#else -mx4200_send(fd, fmt, va_alist) - register int fd; - const char *fmt; - va_dcl -#endif -{ - register char *cp; - register int n, m; - va_list ap; - char buf[1024]; - u_char ck; - -#if __STDC__ - va_start(ap, fmt); -#else - va_start(ap); -#endif - cp = buf; - *cp++ = '$'; -#ifdef notdef - /* BSD is rational */ - n = vsnprintf(cp, sizeof(buf) - 1, fmt, ap); -#else - /* SunOS sucks */ - (void)vsprintf(cp, fmt, ap); - n = strlen(cp); -#endif - ck = cksum(cp, n); - cp += n; - ++n; -#ifdef notdef - /* BSD is rational */ - n += snprintf(cp, sizeof(buf) - n - 5, "*%02X\r\n", ck); -#else - /* SunOS sucks */ - sprintf(cp, "*%02X\r\n", ck); - n += strlen(cp); -#endif - - m = write(fd, buf, n); - if (m < 0) - syslog(LOG_ERR, "mx4200_send: write: %m (%s)", buf); - else if (m != n) - syslog(LOG_ERR, "mx4200_send: write: %d != %d (%s)", m, n, buf); - va_end(ap); -} -#endif diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_omega.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_omega.c deleted file mode 100644 index e62b668..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_omega.c +++ /dev/null @@ -1,999 +0,0 @@ -/* - * refclock_omega - clock driver for the Kinemetrics Truetime OM-DC OMEGA - * receiver. - * - * Version 1.0 11-Dec-92 Steve Clift (clift@ml.csiro.au) - * Initial version, mostly lifted from refclock_goes.c. - * - * 1.1 03-May-93 Steve Clift - * Tarted up the sample filtering mechanism to give improved - * one-off measurements. Improved measurement dispersion code - * to account for accumulated drift when the clock loses lock. - * - */ - -#if defined(REFCLOCK) && (defined(OMEGA) || defined(OMEGACLK) || defined(OMEGAPPS)) - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" - -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ - -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ - -#if defined(HAVE_TERMIOS) -#include <termios.h> -#endif -#if defined(STREAM) -#include <stropts.h> -#if defined(OMEGACLK) -#include <sys/clkdefs.h> -#endif /* OMEGACLK */ -#endif /* STREAM */ - -#if defined (OMEGAPPS) -#include <sys/ppsclock.h> -#endif /* OMEGAPPS */ - -#include "ntp_stdlib.h" - -/* - * Support for Kinemetrics Truetime OM-DC OMEGA Receiver - * - * Most of this code is copied from refclock_goes.c with thanks. - * - * the time code looks like follows; Send the clock a R or C and once per - * second a timestamp will appear that looks like this: - * ADDD:HH:MM:SSQCL - * A - control A - * Q Quality indication: indicates possible error of - * > >+- 5 seconds - * ? >+/- 500 milliseconds # >+/- 50 milliseconds - * * >+/- 5 milliseconds . >+/- 1 millisecond - * A-H less than 1 millisecond. Character indicates which station - * is being received as follows: - * A = Norway, B = Liberia, C = Hawaii, D = North Dakota, - * E = La Reunion, F = Argentina, G = Australia, H = Japan. - * C - Carriage return - * L - Line feed - * The carriage return start bit begins on 0 seconds and extends to 1 bit time. - */ - -/* - * Definitions - */ -#define MAXUNITS 4 /* max number of OMEGA units */ -#define OMEGA232 "/dev/omega%d" -#define SPEED232 B9600 /* 9600 baud */ - -/* - * Radio interface parameters - */ -#define OMEGADESCRIPTION "Kinemetrics OM-DC OMEGA Receiver" /* who we are */ -#define OMEGAMAXDISPERSE (FP_SECOND/32) /* max allowed sample dispersion */ -#define OMEGAPRECISION (-10) /* precision assumed (about 1 ms) */ -#define OMEGAREFID "VLF\0" /* reference id */ -#define LENOMEGA 13 /* length of standard response */ -#define GMT 0 /* hour offset from Greenwich */ -#define NSTAMPS 9 /* samples collected when polled */ -#define NSKEEP 5 /* samples to keep after discards */ -#define BMAX 50 /* timecode buffer length */ - -/* - * The OM-DC puts out the start bit of the <CR> on the second, but - * we see the result after the <LF> is received, about 2ms later at - * 9600 baud. Use this as the default fudge time, and let the user - * fiddle it to account for driver latency etc. - */ -#define DEFFUDGETIME 0x00830000 /* default fudge time (~2ms) */ - -/* - * Clock drift errors as u_fp values. - */ -#define U_FP5000MS (5*FP_SECOND) /* 5 seconds */ -#define U_FP500MS (FP_SECOND/2) /* 500 msec */ -#define U_FP50MS (FP_SECOND/20) /* 50 msec */ -#define U_FP5MS (FP_SECOND/200) /* 5 msec */ - -/* - * Station codes - */ -#define STATION_NONE 0 -#define STATION_NORWAY 1 -#define STATION_LIBERIA 2 -#define STATION_HAWAII 3 -#define STATION_N_DAKOTA 4 -#define STATION_LA_REUNION 5 -#define STATION_ARGENTINA 6 -#define STATION_AUSTRALIA 7 -#define STATION_JAPAN 8 - -/* - * Hack to avoid excercising the multiplier. I have no pride. - */ -#define MULBY10(x) (((x)<<3) + ((x)<<1)) - -/* - * Imported from the timer module - */ -extern u_long current_time; -extern struct event timerqueue[]; - -/* - * Imported from ntp_loopfilter module - */ -extern int fdpps; /* pps file descriptor */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * OMEGA unit control structure - */ -struct omegaunit { - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - l_fp lastrec; /* last receive time */ - l_fp lastref; /* last timecode time */ - l_fp offset[NSTAMPS]; /* recent sample offsets */ - char lastcode[BMAX]; /* last timecode received */ - u_short station; /* which station we're locked to */ - u_short polled; /* Hand in a time sample? */ - u_long coderecv; /* timecodes received */ - u_char lencode; /* length of last timecode */ - u_long lasttime; /* last time clock heard from */ - u_char unit; /* unit number for this guy */ - u_char status; /* clock status */ - u_char lastevent; /* last clock event */ - u_char reason; /* reason for last failure */ - u_char year; /* year of eternity */ - u_short day; /* day of year */ - u_char hour; /* hour of day */ - u_char minute; /* minute of hour */ - u_char second; /* seconds of minute */ - u_char leap; /* leap indicators */ - u_short msec; /* millisecond of second */ - u_char quality; /* quality char from last timecode */ - u_long yearstart; /* start of current year */ - /* - * Status tallies - */ - u_long polls; /* polls sent */ - u_long noreply; /* no replies to polls */ - u_long badformat; /* bad format */ - u_long baddata; /* bad data */ - u_long timestarted; /* time we started this */ -}; - -/* - * Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. - */ -static struct omegaunit *omegaunits[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; - -/* - * Keep the fudge factors separately so they can be set even - * when no clock is configured. - */ -static l_fp fudgefactor1[MAXUNITS]; -static l_fp fudgefactor2[MAXUNITS]; -static u_char stratumtouse[MAXUNITS]; -static u_char readonlyclockflag[MAXUNITS]; -static u_long refid[MAXUNITS]; - -/* - * Function prototypes - */ -static void omega_init P((void)); -static int omega_start P((u_int, struct peer *)); -static void omega_shutdown P((int)); -static void omega_report_event P((struct omegaunit *, int)); -static void omega_receive P((struct recvbuf *)); -static char omega_process P((struct omegaunit *, l_fp *, u_fp *)); -static void omega_poll P((int, struct peer *)); -static void omega_control P((u_int, struct refclockstat *, struct refclockstat *)); -static void omega_buginfo P((int, struct refclockbug *)); -static void omega_send P((struct omegaunit *, char *)); - -/* - * Transfer vector - */ -struct refclock refclock_omega = { - omega_start, omega_shutdown, omega_poll, - omega_control, omega_init, omega_buginfo, NOFLAGS -}; - -/* - * omega_init - initialize internal omega driver data - */ -static void -omega_init() -{ - register int i; - /* - * Just zero the data arrays - */ - memset((char *)omegaunits, 0, sizeof omegaunits); - memset((char *)unitinuse, 0, sizeof unitinuse); - - /* - * Initialize fudge factors to default. - */ - for (i = 0; i < MAXUNITS; i++) { - fudgefactor1[i].l_ui = 0; - fudgefactor1[i].l_uf = DEFFUDGETIME; - fudgefactor2[i].l_ui = 0; - fudgefactor2[i].l_uf = 0; - stratumtouse[i] = 0; - readonlyclockflag[i] = 0; - memcpy((char *)&refid[i], OMEGAREFID, 4); - } -} - - -/* - * omega_start - open the OMEGA devices and initialize data for processing - */ -static int -omega_start(unit, peer) - u_int unit; - struct peer *peer; -{ - register struct omegaunit *omega; - register int i; - int fd232; - char omegadev[20]; - - /* - * Check configuration info - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR,"omega_start: unit %d invalid", unit); - return 0; - } - if (unitinuse[unit]) { - syslog(LOG_ERR, "omega_start: unit %d in use", unit); - return 0; - } - - /* - * Open serial port - */ - (void) sprintf(omegadev, OMEGA232, unit); - fd232 = open(omegadev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, "omega_start: open of %s: %m", omegadev); - return 0; - } - -#if defined(HAVE_SYSV_TTYS) - /* - * System V serial line parameters (termio interface) - * - */ - { struct termio ttyb; - if (ioctl(fd232, TCGETA, &ttyb) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TCGETA): %m", omegadev); - goto screwed; - } - ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyb.c_oflag = 0; - ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyb.c_lflag = ICANON; - ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0'; - if (ioctl(fd232, TCSETA, &ttyb) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TCSETA): %m", omegadev); - goto screwed; - } - } -#endif /* HAVE_SYSV_TTYS */ -#if defined(HAVE_TERMIOS) - /* - * POSIX serial line parameters (termios interface) - * - * The OMEGACLK option provides timestamping at the driver level. - * It requires the tty_clk streams module. - * - * The OMEGAPPS option provides timestamping at the driver level. - * It uses a 1-pps signal and level converter (gadget box) and - * requires the ppsclock streams module and SunOS 4.1.1 or - * later. - */ - { struct termios ttyb, *ttyp; - - ttyp = &ttyb; - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, - "omega_start: tcgetattr(%s): %m", omegadev); - goto screwed; - } - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_oflag = 0; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, - "omega_start: tcsetattr(%s): %m", omegadev); - goto screwed; - } - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, - "omega_start: tcflush(%s): %m", omegadev); - goto screwed; - } - } -#endif /* HAVE_TERMIOS */ -#ifdef STREAM -#if defined(OMEGACLK) - if (ioctl(fd232, I_PUSH, "clk") < 0) - syslog(LOG_ERR, - "omega_start: ioctl(%s, I_PUSH, clk): %m", omegadev); - if (ioctl(fd232, CLK_SETSTR, "\n") < 0) - syslog(LOG_ERR, - "omega_start: ioctl(%s, CLK_SETSTR): %m", omegadev); -#endif /* OMEGACLK */ -#if defined(OMEGAPPS) - if (ioctl(fd232, I_PUSH, "ppsclock") < 0) - syslog(LOG_ERR, - "omega_start: ioctl(%s, I_PUSH, ppsclock): %m", omegadev); - else - fdpps = fd232; -#endif /* OMEGAPPS */ -#endif /* STREAM */ -#if defined(HAVE_BSD_TTYS) - /* - * 4.3bsd serial line parameters (sgttyb interface) - * - * The OMEGACLK option provides timestamping at the driver level. - * It requires the tty_clk line discipline and 4.3bsd or later. - */ - { struct sgttyb ttyb; -#if defined(OMEGACLK) - int ldisc = CLKLDISC; -#endif /* OMEGACLK */ - - if (ioctl(fd232, TIOCGETP, &ttyb) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TIOCGETP): %m", omegadev); - goto screwed; - } - ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232; -#if defined(OMEGACLK) - ttyb.sg_erase = ttyb.sg_kill = '\r'; - ttyb.sg_flags = RAW; -#else - ttyb.sg_erase = ttyb.sg_kill = '\0'; - ttyb.sg_flags = EVENP|ODDP|CRMOD; -#endif /* OMEGACLK */ - if (ioctl(fd232, TIOCSETP, &ttyb) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TIOCSETP): %m", omegadev); - goto screwed; - } -#if defined(OMEGACLK) - if (ioctl(fd232, TIOCSETD, &ldisc) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TIOCSETD): %m",omegadev); - goto screwed; - } -#endif /* OMEGACLK */ - } -#endif /* HAVE_BSD_TTYS */ - - /* - * Allocate unit structure - */ - if (omegaunits[unit] != 0) { - omega = omegaunits[unit]; /* The one we want is okay */ - } else { - for (i = 0; i < MAXUNITS; i++) { - if (!unitinuse[i] && omegaunits[i] != 0) - break; - } - if (i < MAXUNITS) { - /* - * Reclaim this one - */ - omega = omegaunits[i]; - omegaunits[i] = 0; - } else { - omega = (struct omegaunit *) - emalloc(sizeof(struct omegaunit)); - } - } - memset((char *)omega, 0, sizeof(struct omegaunit)); - omegaunits[unit] = omega; - - /* - * Set up the structures - */ - omega->peer = peer; - omega->unit = (u_char)unit; - omega->timestarted = current_time; - omega->station = STATION_NONE; - - omega->io.clock_recv = omega_receive; - omega->io.srcclock = (caddr_t)omega; - omega->io.datalen = 0; - omega->io.fd = fd232; - if (!io_addclock(&omega->io)) { - goto screwed; - } - - /* - * All done. Initialize a few random peer variables, then - * return success. - */ - peer->precision = OMEGAPRECISION; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - unitinuse[unit] = 1; - return 1; - - /* - * Something broke; abandon ship - */ -screwed: - (void) close(fd232); - return 0; -} - - -/* - * omega_shutdown - shut down a OMEGA clock - */ -static void -omega_shutdown(unit) - int unit; -{ - register struct omegaunit *omega; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "omega_shutdown: unit %d invalid", - unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "omega_shutdown: unit %d not in use", unit); - return; - } - - /* - * Tell the I/O module to turn us off. We're history. - */ - omega = omegaunits[unit]; - io_closeclock(&omega->io); - unitinuse[unit] = 0; -} - - -/* - * omega_report_event - note the occurance of an event - */ -static void -omega_report_event(omega, code) - struct omegaunit *omega; - int code; -{ - struct peer *peer; - - peer = omega->peer; - if (omega->status != (u_char)code) { - omega->status = (u_char)code; - if (code != CEVNT_NOMINAL) - omega->lastevent = (u_char)code; - syslog(LOG_INFO, - "omega clock %s event %x\n", ntoa(&peer->srcadr), code); - } -} - - -/* - * omega_receive - receive data from the serial interface on a - * Kinemetrics OM-DC OMEGA clock. - */ -static void -omega_receive(rbufp) - struct recvbuf *rbufp; -{ - register int i; - register struct omegaunit *omega; - register u_char *dpt; - register char *cp, *cpend; - register u_char *dpend; - l_fp tstmp; - u_fp dispersion, drift; - - /* - * Get the clock this applies to and a pointers to the data - */ - omega = (struct omegaunit *)rbufp->recv_srcclock; - dpt = (u_char *)&rbufp->recv_space; - -#ifndef PEDANTIC - /* - * The OM-DC outputs a timecode every second, but we only want - * a set of NSTAMPS timecodes when polled (every 64 seconds). - * Setting PEDANTIC causes a sanity check on every timecode. - */ - if (!omega->polled) - return; -#endif - - /* - * Edit timecode to remove control chars - */ - dpend = dpt + rbufp->recv_length; - cp = omega->lastcode; - cpend = omega->lastcode + BMAX - 1; - while (dpt < dpend && cp < cpend) { - if ((*cp = 0x7f & *dpt++) >= ' ') cp++; -#ifdef OMEGACLK - else if (*cp == '\r') { - if (dpend - dpt < 8) { - /* short timestamp */ - return; - } - if (!buftvtots(dpt,&omega->lastrec)) { - /* screwy timestamp */ - return; - } - dpt += 8; - } -#endif - } - *cp = '\0'; - omega->lencode = cp - omega->lastcode; - - if (omega->lencode == 0) - return; - else if (omega->lencode != LENOMEGA) { - omega->badformat++; - /* Sometimes get a lot of these, filling the log with noise */ - /* omega_report_event(omega, CEVNT_BADREPLY); */ - return; - } - -#ifndef OMEGACLK - omega->lastrec = rbufp->recv_time; -#endif - -#ifdef DEBUG - if (debug) - printf("omega: timecode %d %s\n", - omega->lencode, omega->lastcode); -#endif - - /* - * We get down to business, check the timecode format - * and decode its contents. - */ - cp = omega->lastcode; - omega->leap = 0; - /* - * Check timecode format. - */ - if (!isdigit(cp[0]) || /* day of year */ - !isdigit(cp[1]) || - !isdigit(cp[2]) || - cp[3] != ':' || /* <sp> */ - !isdigit(cp[4]) || /* hours */ - !isdigit(cp[5]) || - cp[6] != ':' || /* : separator */ - !isdigit(cp[7]) || /* minutes */ - !isdigit(cp[8]) || - cp[9] != ':' || /* : separator */ - !isdigit(cp[10]) || /* seconds */ - !isdigit(cp[11])) { - omega->badformat++; - omega_report_event(omega, CEVNT_BADREPLY); - return; - } - - /* - * Convert and check values. - */ - omega->year = 0; /* fake */ - omega->day = cp[0] - '0'; - omega->day = MULBY10(omega->day) + cp[1] - '0'; - omega->day = MULBY10(omega->day) + cp[2] - '0'; - omega->hour = MULBY10(cp[4] - '0') + cp[5] - '0'; - omega->minute = MULBY10(cp[7] - '0') + cp[8] - '0'; - omega->second = MULBY10(cp[10] - '0') + cp[11] - '0'; - omega->msec = 0; - - if (omega->day < 1 || omega->day > 366) { - omega->baddata++; - omega_report_event(omega, CEVNT_BADDATE); - return; - } - if (omega->hour > 23 || omega->minute > 59 || omega->second > 59) { - omega->baddata++; - omega_report_event(omega, CEVNT_BADTIME); - return; - } - - /* - * Check quality/station-id flag. The OM-DC should normally stay - * permanently locked to a station, and its time error should be less - * than 1 msec. If it loses lock for any reason, it makes a worst - * case drift estimate based on the internally stored stability figure - * for its reference oscillator. The stability figure can be adjusted - * by the user based on experience. The default value is 1E05, which - * is pretty bad - 2E07 is about right for the unit I have. - * - * The following is arbitrary, change it if you're offended: - * For errors less than 50 msec, just clear the station indicator. - * For errors greater than 50 msec, flag loss of sync and report a - * propagation problem. If the error is greater than 500 msec, - * something is dreadfully wrong - report a clock fault. - * - * In each case, we set a drift estimate which is used below as an - * estimate of measurement accuracy. - */ - omega->quality = cp[12]; - if (cp[12] == '>' || cp[12] == '?') { - /* Error 500 to 5000 msec */ - omega_report_event(omega, CEVNT_FAULT); - omega->leap = LEAP_NOTINSYNC; - omega->station = STATION_NONE; - drift = U_FP5000MS; - } else if (cp[12] == '#') { - /* Error 50 to 500 msec */ - omega_report_event(omega, CEVNT_PROP); - omega->leap = LEAP_NOTINSYNC; - omega->station = STATION_NONE; - drift = U_FP500MS; - } else if (cp[12] == '*') { - /* Error 5 to 50 msec */ - omega->lasttime = current_time; - omega->station = STATION_NONE; - drift = U_FP50MS; - } else if (cp[12] == '.') { - /* Error 1 to 5 msec */ - omega->lasttime = current_time; - omega->station = STATION_NONE; - drift = U_FP5MS; - } else if ('A' <= cp[12] && cp[12] <= 'H') { - /* Error less than 1 msec */ - omega->lasttime = current_time; - omega->station = cp[12] - 'A' + 1; - drift = 0; - } else { - omega->badformat++; - omega_report_event(omega, CEVNT_BADREPLY); - return; - } - -#ifdef PEDANTIC - /* If we haven't been polled, bail out. */ - if (!omega->polled) - return; -#endif - - /* - * Now, compute the reference time value. Use the heavy - * machinery for the seconds and the millisecond field for the - * fraction when present. - * - * this code does not yet know how to do the years - */ - tstmp = omega->lastrec; - if (!clocktime(omega->day, omega->hour, omega->minute, - omega->second, GMT, tstmp.l_ui, - &omega->yearstart, &omega->lastref.l_ui)) { - omega->baddata++; - omega_report_event(omega, CEVNT_BADTIME); - return; - } - MSUTOTSF(omega->msec, omega->lastref.l_uf); - - /* - * Adjust the read value by fudgefactor1 to correct RS232 delays. - */ - L_ADD(&omega->lastref, &fudgefactor1[omega->unit]); - - /* Carousel of NSTAMPS offsets. */ - i = omega->coderecv % NSTAMPS; - omega->offset[i] = omega->lastref; - L_SUB(&omega->offset[i], &tstmp); - omega->coderecv++; - - /* If we don't yet have a full set, return. */ - if (omega->coderecv < NSTAMPS) - return; - - /* - * Filter the samples, add the fudge factor and pass the - * offset and dispersion along. We use lastrec as both the - * reference time and receive time in order to avoid being cute, - * like setting the reference time later than the receive time, - * which may cause a paranoid protocol module to chuck out the - * data. If the sample filter chokes because of excessive - * dispersion or whatever, get a new sample (omega->coderecv - * is still >= NSTAMPS) and try again. - */ - if (!omega_process(omega, &tstmp, &dispersion)) { - omega->baddata++; - omega_report_event(omega, CEVNT_BADTIME); - return; - } - - /* - * Add accumulated clock drift to the dispersion to get - * a (hopefully) meaningful measurement accuracy estimate. - */ - dispersion += drift; - refclock_receive(omega->peer, &tstmp, GMT, dispersion, - &omega->lastrec, &omega->lastrec, omega->leap); - - /* - * We have succeeded in answering the poll. If the clock - * is locked, we're nominal. - */ - omega->polled = 0; - omega->coderecv = 0; - if (omega->leap != LEAP_NOTINSYNC) - omega_report_event(omega, CEVNT_NOMINAL); -} - - -/* - * omega_send - time to send the clock a signal to cough up a time sample - */ -static void -omega_send(omega,cmd) - struct omegaunit *omega; - char *cmd; -{ - if (!readonlyclockflag[omega->unit]) { - /* - * Send a command to the clock. - */ - if (write(omega->io.fd, cmd, 1) != 1) { - syslog(LOG_ERR, "omega_send: unit %d: %m", omega->unit); - omega_report_event(omega, CEVNT_FAULT); - } - } -} - - -/* - * Compare two l_fp's, used with qsort() - */ -static int -omega_cmpl_fp(p1, p2) - register void *p1, *p2; -{ - - if (!L_ISGEQ((l_fp *)p1, (l_fp *)p2)) - return (-1); - if (L_ISEQU((l_fp *)p1, (l_fp *)p2)) - return (0); - return (1); -} - - -/* - * omega_process - process a pile of samples from the clock - */ -static char -omega_process(omega, offset, dispersion) - struct omegaunit *omega; - l_fp *offset; - u_fp *dispersion; -{ - register int i, n; - register u_long med_ui, med_uf, tmp_ui, tmp_uf; - l_fp off[NSTAMPS]; - u_fp disp; - - /* Copy in offsets and sort into ascending order */ - for (i = 0; i < NSTAMPS; i++) - off[i] = omega->offset[i]; - qsort((char *)off, NSTAMPS, sizeof(l_fp), omega_cmpl_fp); - /* - * Reject the furthest from the median until NSKEEP samples remain - */ - i = 0; - n = NSTAMPS; - while ((n - i) > NSKEEP) { - tmp_ui = off[n-1].l_ui; - tmp_uf = off[n-1].l_uf; - med_ui = off[(n+i)/2].l_ui; - med_uf = off[(n+i)/2].l_uf; - M_SUB(tmp_ui, tmp_uf, med_ui, med_uf); - M_SUB(med_ui, med_uf, off[i].l_ui, off[i].l_uf); - if (M_ISHIS(med_ui, med_uf, tmp_ui, tmp_uf)) { - /* reject low end */ - i++; - } else { - /* reject high end */ - n--; - } - } - - /* - * Compute the dispersion based on the difference between the - * extremes of the remaining offsets. If this is greater than - * the allowed sample set dispersion, bail out. Otherwise, - * return the median offset and the dispersion. - */ - tmp_ui = off[n-1].l_ui; - tmp_uf = off[n-1].l_uf; - M_SUB(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf); - disp = MFPTOFP(tmp_ui, tmp_uf); - if (disp > OMEGAMAXDISPERSE) - return 0; - *offset = off[(n+1)/2]; - *dispersion = disp; - return 1; -} - - -/* - * omega_poll - called by the transmit procedure - */ -static void -omega_poll(unit, peer) - int unit; - struct peer *peer; -{ - struct omegaunit *omega; - - /* - * You don't need to poll this clock. It puts out timecodes - * once per second. If asked for a timestamp, take note. - * The next time a timecode comes in, it will be fed back. - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "omega_poll: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "omega_poll: unit %d not in use", unit); - return; - } - omega = omegaunits[unit]; - if ((current_time - omega->lasttime) > 150) { - omega->noreply++; - omega_report_event(omegaunits[unit], CEVNT_TIMEOUT); - } - - /* - * polled every 64 seconds. Ask OMEGA_RECEIVE to hand in a timestamp. - */ - omega->polled = 1; - omega->polls++; - /* - * Ensure the clock is running in the correct mode - on-second - * timestamps. - */ - omega_send(omega,"C"); -} - - -/* - * omega_control - set fudge factors, return statistics - */ -static void -omega_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct omegaunit *omega; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "omega_control: unit %d invalid", unit); - return; - } - - if (in != 0) { - if (in->haveflags & CLK_HAVETIME1) - fudgefactor1[unit] = in->fudgetime1; - if (in->haveflags & CLK_HAVETIME2) - fudgefactor2[unit] = in->fudgetime2; - if (in->haveflags & CLK_HAVEVAL1) - stratumtouse[unit] = (u_char)(in->fudgeval1); - if (in->haveflags & CLK_HAVEVAL2) - refid[unit] = in->fudgeval2; - if (in->haveflags & CLK_HAVEFLAG1) - readonlyclockflag[unit] = in->flags & CLK_FLAG1; - if (unitinuse[unit]) { - struct peer *peer; - - peer = omegaunits[unit]->peer; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - } - } - - if (out != 0) { - out->type = REFCLK_OMEGA_TRUETIME; - out->haveflags = CLK_HAVETIME1 | CLK_HAVETIME2 | CLK_HAVEVAL1 | - CLK_HAVEVAL2| CLK_HAVEFLAG1; - out->clockdesc = OMEGADESCRIPTION; - out->fudgetime1 = fudgefactor1[unit]; - out->fudgetime2 = fudgefactor2[unit]; - out->fudgeval1 = stratumtouse[unit]; - out->fudgeval2 = refid[unit]; - out->flags = readonlyclockflag[unit]; - if (unitinuse[unit]) { - omega = omegaunits[unit]; - out->flags |= omega->station << 1; - out->lencode = omega->lencode; - out->lastcode = omega->lastcode; - out->timereset = current_time - omega->timestarted; - out->polls = omega->polls; - out->noresponse = omega->noreply; - out->badformat = omega->badformat; - out->baddata = omega->baddata; - out->lastevent = omega->lastevent; - out->currentstatus = omega->status; - } - } -} - - -/* - * omega_buginfo - return clock dependent debugging info - */ -static void -omega_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ - register struct omegaunit *omega; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "omega_buginfo: unit %d invalid", unit); - return; - } - - if (!unitinuse[unit]) - return; - omega = omegaunits[unit]; - - bug->nvalues = 11; - bug->ntimes = 5; - if (omega->lasttime != 0) - bug->values[0] = current_time - omega->lasttime; - else - bug->values[0] = 0; - bug->values[1] = omega->reason; - bug->values[2] = omega->year; - bug->values[3] = omega->day; - bug->values[4] = omega->hour; - bug->values[5] = omega->minute; - bug->values[6] = omega->second; - bug->values[7] = omega->msec; - bug->values[8] = omega->noreply; - bug->values[9] = omega->yearstart; - bug->values[10] = omega->quality; - bug->stimes = 0x1c; - bug->times[0] = omega->lastref; - bug->times[1] = omega->lastrec; - bug->times[2] = omega->offset[0]; - bug->times[3] = omega->offset[1]; - bug->times[4] = omega->offset[2]; -} -#endif diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_parse.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_parse.c deleted file mode 100644 index 1b950a9..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_parse.c +++ /dev/null @@ -1,3617 +0,0 @@ -#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) -/* - * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.59 1994/05/23 16:29:27 kardel Exp - * - * refclock_parse.c,v 3.59 1994/05/23 16:29:27 kardel Exp - * - * generic reference clock driver for receivers - * - * make use of a STREAMS module for input processing where - * available and configured. Currently the STREAMS module - * is only available for Suns running SunOS 4.x and SunOS5.x (new - careful!) - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - */ - -/* - * Defines: - * REFCLOCK && (PARSE||PARSEPPS) - * - enable this mess - * STREAM - allow for STREAMS modules - * ("parse", "ppsclocd", "ppsclock") - * PARSEPPS - provide PPS information to loopfilter (for - * backward compatibilty only) - * PPS - supply loopfilter with PPS samples (if configured) - * PPSPPS - notify loopfilter of PPS file descriptor - * - * TTY defines: - * HAVE_BSD_TTYS - currently unsupported - * HAVE_SYSV_TTYS - will use termio.h - * HAVE_TERMIOS - will use termios.h - * STREAM - will use streams and implies HAVE_TERMIOS - */ - -/* - * This driver currently provides the support for - * - Meinberg DCF77 receiver DCF77 PZF 535 (TCXO version) (DCF) - * - Meinberg DCF77 receiver DCF77 PZF 535 (OCXO version) (DCF) - * - Meinberg DCF77 receiver U/A 31 (DCF) - * - IGEL CLOCK (DCF) - * - ELV DCF7000 (DCF) - * - Schmid clock (DCF) - * - Conrad DCF77 receiver module (DCF) - * - FAU DCF77 NTP receiver (TimeBrick) (DCF) - * - Meinberg GPS166 (GPS) - * - Trimble SV6 (GPS) - * - */ - -/* - * Meinberg receivers are connected via a 9600 baud serial line - * - * Receivers that do NOT support: - * - leap second indication - * DCF U/A 31 - * DCF PZF535 (stock version) - * - * so... - * - for PZF535 please ask for revision PZFUERL4.6 or higher - * (support for leap second and alternate antenna) - * - * The Meinberg GPS receiver also has a special NTP time stamp - * format. The firmware release is Uni-Erlangen. Only this - * firmware release is supported by xntp3. - * - * Meinberg generic receiver setup: - * output time code every second - * Baud rate 9600 7E2S - */ - -#include "ntpd.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" -#include "ntp_control.h" - -#include <stdio.h> -#include <ctype.h> -#include <time.h> - -#include <sys/errno.h> -extern int errno; - -#if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS) -/* #error NEED TO DEFINE ONE OF "STREAM" or "HAVE_SYSV_TTYS" */ -NEED TO DEFINE ONE OF "STREAM", "HAVE_SYSV_TTYS" or "HAVE_TERMIOS" -#endif - -#ifdef STREAM -#include <sys/stream.h> -#include <sys/stropts.h> -#ifndef HAVE_TERMIOS -#define HAVE_TERMIOS -#endif -#endif - -#ifdef HAVE_TERMIOS -#include <termios.h> -#define TTY_GETATTR(_FD_, _ARG_) tcgetattr((_FD_), (_ARG_)) -#define TTY_SETATTR(_FD_, _ARG_) tcsetattr((_FD_), TCSANOW, (_ARG_)) -#undef HAVE_SYSV_TTYS -#endif - -#ifdef HAVE_SYSV_TTYS -#include <termio.h> -#define TTY_GETATTR(_FD_, _ARG_) ioctl((_FD_), TCGETA, (_ARG_)) -#define TTY_SETATTR(_FD_, _ARG_) ioctl((_FD_), TCSETAW, (_ARG_)) -#endif - -#ifdef HAVE_BSD_TTYS -/* #error CURRENTLY NO BSD TTY SUPPORT */ -CURRENTLY NO BSD TTY SUPPORT -#endif - -#if !defined(O_RDWR) /* XXX SOLARIS */ -#include <fcntl.h> -#endif /* !def(O_RDWR) */ - -#ifdef PPSPPS -#include <sys/ppsclock.h> -#endif - -#include "ntp_select.h" -#include "ntp_stdlib.h" - -#include "parse.h" - -#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -static char rcsid[]="refclock_parse.c,v 3.59 1994/05/23 16:29:27 kardel Exp"; -#endif - -/**=========================================================================== - ** external interface to xntp mechanism - **/ - -static void parse_init P((void)); -static int parse_start P((u_int, struct peer *)); -static void parse_shutdown P((int)); -static void parse_poll P((int, struct peer *)); -static void parse_control P((u_int, struct refclockstat *, struct refclockstat *)); - -#define parse_buginfo noentry - -struct refclock refclock_parse = { - parse_start, - parse_shutdown, - parse_poll, - parse_control, - parse_init, - parse_buginfo, - NOFLAGS -}; - -/* - * the unit field selects for one the prototype to be used (lower 4 bits) - * and for the other the clock type in case of different but similar - * receivers (bits 4-6) - * the most significant bit encodes PPS support - * when the most significant bit is set the pps telegrams will be used - * for controlling the local clock (ntp_loopfilter.c) - * receiver specific configration data is kept in the clockinfo field. - */ - -/* - * Definitions - */ -#define MAXUNITS 4 /* maximum number of "PARSE" units permitted */ -#define PARSEDEVICE "/dev/refclock-%d" /* device to open %d is unit number */ - -/**=========================================================================== - ** function vector for dynamically binding io handling mechanism - **/ - -typedef struct bind -{ - char *bd_description; /* name of type of binding */ - int (*bd_init)(); /* initialize */ - void (*bd_end)(); /* end */ - int (*bd_setcs)(); /* set character size */ - int (*bd_disable)(); /* disable */ - int (*bd_enable)(); /* enable */ - int (*bd_getfmt)(); /* get format */ - int (*bd_setfmt)(); /* setfmt */ - int (*bd_getstat)(); /* getstat */ - int (*bd_setstat)(); /* setstat */ - int (*bd_timecode)(); /* get time code */ - void (*bd_receive)(); /* receive operation */ - void (*bd_poll)(); /* poll operation */ -} bind_t; - -#define PARSE_END(_X_) (*(_X_)->binding->bd_end)(_X_) -#define PARSE_SETCS(_X_, _CS_) (*(_X_)->binding->bd_setcs)(_X_, _CS_) -#define PARSE_ENABLE(_X_) (*(_X_)->binding->bd_enable)(_X_) -#define PARSE_DISABLE(_X_) (*(_X_)->binding->bd_disable)(_X_) -#define PARSE_GETFMT(_X_, _DCT_) (*(_X_)->binding->bd_getfmt)(_X_, _DCT_) -#define PARSE_SETFMT(_X_, _DCT_) (*(_X_)->binding->bd_setfmt)(_X_, _DCT_) -#define PARSE_GETSTAT(_X_, _DCT_) (*(_X_)->binding->bd_getstat)(_X_, _DCT_) -#define PARSE_SETSTAT(_X_, _DCT_) (*(_X_)->binding->bd_setstat)(_X_, _DCT_) -#define PARSE_GETTIMECODE(_X_, _DCT_) (*(_X_)->binding->bd_timecode)(_X_, _DCT_) -#define PARSE_POLL(_X_) (*(_X_)->binding->bd_poll)(_X_) - -/* - * io modes - */ -#define PARSE_F_NOPOLLONLY 0x0001 /* always do async io (possible PPS support via PARSE) */ -#define PARSE_F_POLLONLY 0x0002 /* never do async io (no PPS support via PARSE) */ -#define PARSE_F_PPSPPS 0x0004 /* use loopfilter PPS code (CIOGETEV) */ -#define PARSE_F_PPSONSECOND 0x0008 /* PPS pulses are on second */ - -/**=========================================================================== - ** refclock instance data - **/ - -struct parseunit -{ - /* - * XNTP management - */ - struct peer *peer; /* backlink to peer structure - refclock inactive if 0 */ - int fd; /* device file descriptor */ - u_char unit; /* encoded unit/type/PPS */ - - /* - * XNTP io - */ - struct refclockio io; /* io system structure (used in PPS mode) */ - bind_t *binding; /* io handling binding */ - - /* - * parse state - */ - parse_t parseio; /* io handling structure (user level parsing) */ - - /* - * type specific parameters - */ - struct clockinfo *parse_type; /* link to clock description */ - - /* - * clock specific configuration - */ - l_fp basedelay; /* clock local phase offset */ - l_fp ppsdelay; /* clock local pps phase offset */ - - /* - * clock state handling/reporting - */ - u_char flags; /* flags (leap_control) */ - u_char status; /* current status */ - u_char lastevent; /* last not NORMAL status */ - u_long lastchange; /* time (xntp) when last state change accured */ - u_long statetime[CEVNT_MAX+1]; /* accumulated time of clock states */ - struct event stattimer; /* statistics timer */ - u_long polls; /* polls from NTP protocol machine */ - u_long noresponse; /* number of expected but not seen datagrams */ - u_long badformat; /* bad format (failed format conversions) */ - u_long baddata; /* usually bad receive length, bad format */ - - u_char pollonly; /* 1 for polling only (no PPS mode) */ - u_char pollneeddata; /* 1 for receive sample expected in PPS mode */ - u_long laststatus; /* last packet status (error indication) */ - u_short lastformat; /* last format used */ - u_long lastsync; /* time (xntp) when clock was last seen fully synchronized */ - u_long timestarted; /* time (xntp) when peer clock was instantiated */ - u_long nosynctime; /* time (xntp) when last nosync message was posted */ - u_long lastmissed; /* time (xntp) when poll didn't get data (powerup heuristic) */ - u_long ppsserial; /* magic cookie for ppsclock serials (avoids stale ppsclock data) */ - parsetime_t time; /* last (parse module) data */ - void *localdata; /* optional local data */ -}; - - -/**=========================================================================== - ** Clockinfo section all parameter for specific clock types - ** includes NTP paramaters, TTY parameters and IO handling parameters - **/ - -static void poll_dpoll P((struct parseunit *)); -static void poll_poll P((struct parseunit *)); -static int poll_init P((struct parseunit *)); -static void poll_end P((struct parseunit *)); - -typedef struct poll_info -{ - u_long rate; /* poll rate - once every "rate" seconds - 0 off */ - char * string; /* string to send for polling */ - u_long count; /* number of charcters in string */ -} poll_info_t; - -#define NO_FLAGS 0 -#define NO_POLL (void (*)())0 -#define NO_INIT (int (*)())0 -#define NO_END (void (*)())0 -#define NO_DATA (void *)0 -#define NO_FORMAT "" -#define NO_PPSDELAY 0 - -#define DCF_ID "DCF" /* generic DCF */ -#define DCF_A_ID "DCFa" /* AM demodulation */ -#define DCF_P_ID "DCFp" /* psuedo random phase shift */ -#define GPS_ID "GPS" /* GPS receiver */ - -#define NOCLOCK_ROOTDELAY 0x00000000 -#define NOCLOCK_BASEDELAY 0x00000000 -#define NOCLOCK_DESCRIPTION ((char *)0) -#define NOCLOCK_MAXUNSYNC 0 -#define NOCLOCK_CFLAG 0 -#define NOCLOCK_IFLAG 0 -#define NOCLOCK_OFLAG 0 -#define NOCLOCK_LFLAG 0 -#define NOCLOCK_ID "TILT" -#define NOCLOCK_POLL NO_POLL -#define NOCLOCK_INIT NO_INIT -#define NOCLOCK_END NO_END -#define NOCLOCK_DATA NO_DATA -#define NOCLOCK_FORMAT NO_FORMAT -#define NOCLOCK_TYPE CTL_SST_TS_UNSPEC - -#define DCF_TYPE CTL_SST_TS_LF -#define GPS_TYPE CTL_SST_TS_UHF - -/* - * receiver specific constants - */ -#define MBG_CFLAG19200 (B19200|CS7|PARENB|CREAD|HUPCL) -#define MBG_CFLAG (B9600|CS7|PARENB|CREAD|HUPCL) -#define MBG_IFLAG (IGNBRK|IGNPAR|ISTRIP) -#define MBG_OFLAG 0 -#define MBG_LFLAG 0 -/* - * Meinberg DCF U/A 31 (AM) receiver - */ -#define DCFUA31_ROOTDELAY 0x00000D00 /* 50.78125ms */ -#define DCFUA31_BASEDELAY 0x02C00000 /* 10.7421875ms: 10 ms (+/- 3 ms) */ -#define DCFUA31_DESCRIPTION "Meinberg DCF U/A 31" -#define DCFUA31_MAXUNSYNC 60*30 /* only trust clock for 1/2 hour */ -#define DCFUA31_CFLAG MBG_CFLAG -#define DCFUA31_IFLAG MBG_IFLAG -#define DCFUA31_OFLAG MBG_OFLAG -#define DCFUA31_LFLAG MBG_LFLAG - -/* - * Meinberg DCF PZF535/TCXO (FM/PZF) receiver - */ -#define DCFPZF535_ROOTDELAY 0x00000034 /* 800us */ -#define DCFPZF535_BASEDELAY 0x00800000 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */ -#define DCFPZF535_DESCRIPTION "Meinberg DCF PZF 535/TCXO" -#define DCFPZF535_MAXUNSYNC 60*60*12 /* only trust clock for 12 hours - * @ 5e-8df/f we have accumulated - * at most 2.16 ms (thus we move to - * NTP synchronisation */ -#define DCFPZF535_CFLAG MBG_CFLAG -#define DCFPZF535_IFLAG MBG_IFLAG -#define DCFPZF535_OFLAG MBG_OFLAG -#define DCFPZF535_LFLAG MBG_LFLAG - - -/* - * Meinberg DCF PZF535/OCXO receiver - */ -#define DCFPZF535OCXO_ROOTDELAY 0x00000034 /* 800us (max error * 10) */ -#define DCFPZF535OCXO_BASEDELAY 0x00800000 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */ -#define DCFPZF535OCXO_DESCRIPTION "Meinberg DCF PZF 535/OCXO" -#define DCFPZF535OCXO_MAXUNSYNC 60*60*96 /* only trust clock for 4 days - * @ 5e-9df/f we have accumulated - * at most an error of 1.73 ms - * (thus we move to NTP synchronisation) */ -#define DCFPZF535OCXO_CFLAG MBG_CFLAG -#define DCFPZF535OCXO_IFLAG MBG_IFLAG -#define DCFPZF535OCXO_OFLAG MBG_OFLAG -#define DCFPZF535OCXO_LFLAG MBG_LFLAG - -/* - * Meinberg GPS166 receiver - */ -#define GPS166_ROOTDELAY 0x00000000 /* nothing here */ -#define GPS166_BASEDELAY 0x00800000 /* XXX to be fixed ! 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */ -#define GPS166_DESCRIPTION "Meinberg GPS166 receiver" -#define GPS166_MAXUNSYNC 0 /* this clock is immediately lost */ -#define GPS166_CFLAG MBG_CFLAG -#define GPS166_IFLAG MBG_IFLAG -#define GPS166_OFLAG MBG_OFLAG -#define GPS166_LFLAG MBG_LFLAG -#define GPS166_POLL NO_POLL -#define GPS166_INIT NO_INIT -#define GPS166_END NO_END -#define GPS166_DATA NO_DATA -#define GPS166_ID GPS_ID -#define GPS166_FORMAT NO_FORMAT - -/* - * ELV DCF7000 Wallclock-Receiver/Switching Clock (Kit) - * - * This is really not the hottest clock - but before you have nothing ... - */ -#define DCF7000_ROOTDELAY 0x00000364 /* 13 ms */ -#define DCF7000_BASEDELAY 0x67AE0000 /* 405 ms - slow blow */ -#define DCF7000_DESCRIPTION "ELV DCF7000" -#define DCF7000_MAXUNSYNC (60*5) /* sorry - but it just was not build as a clock */ -#define DCF7000_CFLAG (B9600|CS8|CREAD|PARENB|PARODD|CLOCAL|HUPCL) -#define DCF7000_IFLAG (IGNBRK) -#define DCF7000_OFLAG 0 -#define DCF7000_LFLAG 0 - -/* - * Schmid DCF Receiver Kit - * - * When the WSDCF clock is operating optimally we want the primary clock - * distance to come out at 300 ms. Thus, peer.distance in the WSDCF peer - * structure is set to 290 ms and we compute delays which are at least - * 10 ms long. The following are 290 ms and 10 ms expressed in u_fp format - */ -#define WS_POLLRATE 1 /* every second - watch interdependency with poll routine */ -#define WS_POLLCMD "\163" -#define WS_CMDSIZE 1 - -static poll_info_t wsdcf_pollinfo = { WS_POLLRATE, WS_POLLCMD, WS_CMDSIZE }; - -#define WSDCF_INIT poll_init -#define WSDCF_POLL poll_dpoll -#define WSDCF_END poll_end -#define WSDCF_DATA ((void *)(&wsdcf_pollinfo)) -#define WSDCF_ROOTDELAY 0X00004A3D /* ~ 290ms */ -#define WSDCF_BASEDELAY 0x028F5C29 /* ~ 10ms */ -#define WSDCF_DESCRIPTION "WS/DCF Receiver" -#define WSDCF_FORMAT "Schmid" -#define WSDCF_MAXUNSYNC (60*60) /* assume this beast hold at 1 h better than 2 ms XXX-must verify */ -#define WSDCF_CFLAG (B1200|CS8|CREAD|CLOCAL) -#define WSDCF_IFLAG 0 -#define WSDCF_OFLAG 0 -#define WSDCF_LFLAG 0 - -/* - * RAW DCF77 - input of DCF marks via RS232 - many variants - */ -#define RAWDCF_FLAGS PARSE_F_NOPOLLONLY -#define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */ -#define RAWDCF_FORMAT "RAW DCF77 Timecode" -#define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */ -#define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL|PARENB) -#define RAWDCF_IFLAG (IGNPAR) -#define RAWDCF_OFLAG 0 -#define RAWDCF_LFLAG 0 - -/* - * RAW DCF variants - */ -/* - * Conrad receiver - * - * simplest (cheapest) DCF clock - e. g. DCF77 receiver by Conrad - * (~40DM - roughly $30 ) followed by a level converter for RS232 - */ -#define CONRAD_BASEDELAY 0x420C49B0 /* ~258 ms - Conrad receiver @ 50 Baud on a Sun */ -#define CONRAD_DESCRIPTION "RAW DCF77 CODE (Conrad DCF77 receiver module)" - -/* - * TimeBrick receiver - */ -#define TIMEBRICK_BASEDELAY 0x35C29000 /* ~210 ms - TimeBrick @ 50 Baud on a Sun */ -#define TIMEBRICK_DESCRIPTION "RAW DCF77 CODE (TimeBrick)" - -/* - * IGEL:clock receiver - */ -#define IGELCLOCK_BASEDELAY 0x420C49B0 /* ~258 ms - IGEL:clock receiver */ -#define IGELCLOCK_DESCRIPTION "RAW DCF77 CODE (IGEL:clock)" -#define IGELCLOCK_CFLAG (B1200|CS8|CREAD|HUPCL|CLOCAL) - -/* - * Trimble SV6 GPS receiver - */ -#ifndef TRIM_POLLRATE -#define TRIM_POLLRATE 0 /* only true direct polling */ -#endif -#define TRIM_POLLCMD ">SRM;FR_FLAG=F<>QTM<" -#define TRIM_CMDSIZE 20 - -static poll_info_t trimble_pollinfo = { TRIM_POLLRATE, TRIM_POLLCMD, TRIM_CMDSIZE }; -static int trimble_init P((struct parseunit *)); - -#define TRIMBLESV6_CFLAG (B4800|CS8|CREAD) -#define TRIMBLESV6_IFLAG (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON) -#define TRIMBLESV6_OFLAG (OPOST|ONLCR) -#define TRIMBLESV6_LFLAG (ICANON|ECHOK) -#define TRIMBLESV6_FLAGS (PARSE_F_PPSPPS|PARSE_F_PPSONSECOND) -#define TRIMBLESV6_POLL poll_dpoll -#define TRIMBLESV6_INIT trimble_init -#define TRIMBLESV6_END poll_end -#define TRIMBLESV6_DATA ((void *)(&trimble_pollinfo)) -#define TRIMBLESV6_ID GPS_ID -#define TRIMBLESV6_FORMAT NO_FORMAT -#define TRIMBLESV6_ROOTDELAY 0x0 -#define TRIMBLESV6_BASEDELAY 0x0 -#define TRIMBLESV6_DESCRIPTION "Trimble SV6 GPS receiver" -#define TRIMBLESV6_MAXUNSYNC 0 -#define TRIMBLESV6_EOL '<' - -static struct clockinfo -{ - u_long cl_flags; /* operation flags (io modes) */ - void (*cl_poll)(); /* active poll routine */ - int (*cl_init)(); /* active poll init routine */ - void (*cl_end)(); /* active poll end routine */ - void *cl_data; /* local data area for "poll" mechanism */ - u_fp cl_rootdelay; /* rootdelay */ - u_long cl_basedelay; /* current offset - unsigned l_fp fractional part */ - u_long cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional part */ - char *cl_id; /* ID code (usually "DCF") */ - char *cl_description; /* device name */ - char *cl_format; /* fixed format */ - u_char cl_type; /* clock type (ntp control) */ - u_long cl_maxunsync; /* time to trust oscillator after loosing synch */ - u_long cl_cflag; /* terminal io flags */ - u_long cl_iflag; /* terminal io flags */ - u_long cl_oflag; /* terminal io flags */ - u_long cl_lflag; /* terminal io flags */ -} clockinfo[] = -{ /* 0. 0.0.128 - base offset for PPS support */ - { /* 127.127.8.<device> */ - NO_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - DCFPZF535_ROOTDELAY, - DCFPZF535_BASEDELAY, - NO_PPSDELAY, - DCF_P_ID, - DCFPZF535_DESCRIPTION, - NO_FORMAT, - DCF_TYPE, - DCFPZF535_MAXUNSYNC, - DCFPZF535_CFLAG, - DCFPZF535_IFLAG, - DCFPZF535_OFLAG, - DCFPZF535_LFLAG - }, - { /* 127.127.8.4+<device> */ - NO_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - DCFPZF535OCXO_ROOTDELAY, - DCFPZF535OCXO_BASEDELAY, - NO_PPSDELAY, - DCF_P_ID, - DCFPZF535OCXO_DESCRIPTION, - NO_FORMAT, - DCF_TYPE, - DCFPZF535OCXO_MAXUNSYNC, - DCFPZF535OCXO_CFLAG, - DCFPZF535OCXO_IFLAG, - DCFPZF535OCXO_OFLAG, - DCFPZF535OCXO_LFLAG - }, - { /* 127.127.8.8+<device> */ - NO_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - DCFUA31_ROOTDELAY, - DCFUA31_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - DCFUA31_DESCRIPTION, - NO_FORMAT, - DCF_TYPE, - DCFUA31_MAXUNSYNC, - DCFUA31_CFLAG, - DCFUA31_IFLAG, - DCFUA31_OFLAG, - DCFUA31_LFLAG - }, - { /* 127.127.8.12+<device> */ - NO_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - DCF7000_ROOTDELAY, - DCF7000_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - DCF7000_DESCRIPTION, - NO_FORMAT, - DCF_TYPE, - DCF7000_MAXUNSYNC, - DCF7000_CFLAG, - DCF7000_IFLAG, - DCF7000_OFLAG, - DCF7000_LFLAG - }, - { /* 127.127.8.16+<device> */ - NO_FLAGS, - WSDCF_POLL, - WSDCF_INIT, - WSDCF_END, - WSDCF_DATA, - WSDCF_ROOTDELAY, - WSDCF_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - WSDCF_DESCRIPTION, - WSDCF_FORMAT, - DCF_TYPE, - WSDCF_MAXUNSYNC, - WSDCF_CFLAG, - WSDCF_IFLAG, - WSDCF_OFLAG, - WSDCF_LFLAG - }, - { /* 127.127.8.20+<device> */ - RAWDCF_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - RAWDCF_ROOTDELAY, - CONRAD_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - CONRAD_DESCRIPTION, - RAWDCF_FORMAT, - DCF_TYPE, - RAWDCF_MAXUNSYNC, - RAWDCF_CFLAG, - RAWDCF_IFLAG, - RAWDCF_OFLAG, - RAWDCF_LFLAG - }, - { /* 127.127.8.24+<device> */ - RAWDCF_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - RAWDCF_ROOTDELAY, - TIMEBRICK_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - TIMEBRICK_DESCRIPTION, - RAWDCF_FORMAT, - DCF_TYPE, - RAWDCF_MAXUNSYNC, - RAWDCF_CFLAG, - RAWDCF_IFLAG, - RAWDCF_OFLAG, - RAWDCF_LFLAG - }, - { /* 127.127.8.28+<device> */ - NO_FLAGS, - GPS166_POLL, - GPS166_INIT, - GPS166_END, - GPS166_DATA, - GPS166_ROOTDELAY, - GPS166_BASEDELAY, - NO_PPSDELAY, - GPS166_ID, - GPS166_DESCRIPTION, - GPS166_FORMAT, - GPS_TYPE, - GPS166_MAXUNSYNC, - GPS166_CFLAG, - GPS166_IFLAG, - GPS166_OFLAG, - GPS166_LFLAG - }, - { /* 127.127.8.32+<device> */ - TRIMBLESV6_FLAGS, -#if TRIM_POLLRATE /* DHD940515: Allow user config */ - NO_POLL, -#else - TRIMBLESV6_POLL, -#endif - TRIMBLESV6_INIT, - TRIMBLESV6_END, - TRIMBLESV6_DATA, - TRIMBLESV6_ROOTDELAY, - TRIMBLESV6_BASEDELAY, - NO_PPSDELAY, - TRIMBLESV6_ID, - TRIMBLESV6_DESCRIPTION, - TRIMBLESV6_FORMAT, - GPS_TYPE, - TRIMBLESV6_MAXUNSYNC, - TRIMBLESV6_CFLAG, - TRIMBLESV6_IFLAG, - TRIMBLESV6_OFLAG, - TRIMBLESV6_LFLAG - }, - { /* 127.127.8.36+<device> */ - RAWDCF_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - RAWDCF_ROOTDELAY, - IGELCLOCK_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - IGELCLOCK_DESCRIPTION, - RAWDCF_FORMAT, - DCF_TYPE, - RAWDCF_MAXUNSYNC, - IGELCLOCK_CFLAG, - RAWDCF_IFLAG, - RAWDCF_OFLAG, - RAWDCF_LFLAG - } -}; - -static int ncltypes = sizeof(clockinfo) / sizeof(struct clockinfo); - -#define CL_REALTYPE(x) (((x) >> 2) & 0x1F) -#define CL_TYPE(x) ((CL_REALTYPE(x) >= ncltypes) ? ~0 : CL_REALTYPE(x)) -#define CL_PPS(x) ((x) & 0x80) -#define CL_UNIT(x) ((x) & 0x3) - -/* - * Other constant stuff - */ -#define PARSEHSREFID 0x7f7f08ff /* 127.127.8.255 refid for hi strata */ - -#define PARSENOSYNCREPEAT (10*60) /* mention uninitialized clocks all 10 minutes */ -#define PARSESTATISTICS (60*60) /* output state statistics every hour */ - -static struct parseunit *parseunits[MAXUNITS]; - -extern u_long current_time; -extern s_char sys_precision; -extern struct event timerqueue[]; -#ifdef PPSPPS -extern int fdpps; -#endif - -static int notice = 0; - -#define PARSE_STATETIME(parse, i) ((parse->status == i) ? parse->statetime[i] + current_time - parse->lastchange : parse->statetime[i]) - -static void parse_event P((struct parseunit *, int)); -static void parse_process P((struct parseunit *, parsetime_t *)); - -/**=========================================================================== - ** implementation of i/o handling methods - ** (all STREAM, partial STREAM, user level) - **/ - -/* - * define possible io handling methods - */ -#ifdef STREAM -static int ppsclock_init P((struct parseunit *)); -static int stream_init P((struct parseunit *)); -static void stream_nop P((struct parseunit *)); -static int stream_enable P((struct parseunit *)); -static int stream_disable P((struct parseunit *)); -static int stream_setcs P((struct parseunit *, parsectl_t *)); -static int stream_getfmt P((struct parseunit *, parsectl_t *)); -static int stream_setfmt P((struct parseunit *, parsectl_t *)); -static int stream_getstat P((struct parseunit *, parsectl_t *)); -static int stream_setstat P((struct parseunit *, parsectl_t *)); -static int stream_timecode P((struct parseunit *, parsectl_t *)); -static void stream_receive P((struct recvbuf *)); -static void stream_poll P((struct parseunit *)); -#endif - -static int local_init P((struct parseunit *)); -static void local_end P((struct parseunit *)); -static int local_nop P((struct parseunit *)); -static int local_setcs P((struct parseunit *, parsectl_t *)); -static int local_getfmt P((struct parseunit *, parsectl_t *)); -static int local_setfmt P((struct parseunit *, parsectl_t *)); -static int local_getstat P((struct parseunit *, parsectl_t *)); -static int local_setstat P((struct parseunit *, parsectl_t *)); -static int local_timecode P((struct parseunit *, parsectl_t *)); -static void local_receive P((struct recvbuf *)); -static void local_poll P((struct parseunit *)); - -static bind_t io_bindings[] = -{ -#ifdef STREAM - { - "parse STREAM", - stream_init, - stream_nop, - stream_setcs, - stream_disable, - stream_enable, - stream_getfmt, - stream_setfmt, - stream_getstat, - stream_setstat, - stream_timecode, - stream_receive, - stream_poll - }, - { - "ppsclock STREAM", - ppsclock_init, - local_end, - local_setcs, - local_nop, - local_nop, - local_getfmt, - local_setfmt, - local_getstat, - local_setstat, - local_timecode, - local_receive, - local_poll - }, -#endif - { - "normal", - local_init, - local_end, - local_setcs, - local_nop, - local_nop, - local_getfmt, - local_setfmt, - local_getstat, - local_setstat, - local_timecode, - local_receive, - local_poll - }, - { - (char *)0, - } -}; - -#ifdef STREAM -/*-------------------------------------------------- - * ppsclock STREAM init - */ -static int -ppsclock_init(parse) - struct parseunit *parse; -{ - /* - * now push the parse streams module - * it will ensure exclusive access to the device - */ - if (ioctl(parse->fd, I_PUSH, (caddr_t)"ppsclocd") == -1 && - ioctl(parse->fd, I_PUSH, (caddr_t)"ppsclock") == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: ppsclock_init: ioctl(fd, I_PUSH, \"ppsclock\"): %m", - CL_UNIT(parse->unit)); - return 0; - } - if (!local_init(parse)) - { - (void)ioctl(parse->fd, I_POP, (caddr_t)0); - return 0; - } - - parse->flags |= PARSE_PPSCLOCK; - return 1; -} - -/*-------------------------------------------------- - * parse STREAM init - */ -static int -stream_init(parse) - struct parseunit *parse; -{ - /* - * now push the parse streams module - * to test whether it is there (Oh boy - neat kernel interface) - */ - if (ioctl(parse->fd, I_PUSH, (caddr_t)"parse") == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CL_UNIT(parse->unit)); - return 0; - } - else - { - while(ioctl(parse->fd, I_POP, (caddr_t)0) == 0) - /* empty loop */; - - /* - * now push it a second time after we have removed all - * module garbage - */ - if (ioctl(parse->fd, I_PUSH, (caddr_t)"parse") == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CL_UNIT(parse->unit)); - return 0; - } - else - { - return 1; - } - } -} - - /*-------------------------------------------------- - * STREAM setcs - */ -static int -stream_setcs(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_SETCS; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_setcs: ioctl(fd, I_STR, PARSEIOC_SETCS): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM nop - */ -static void -stream_nop(parse) - struct parseunit *parse; -{ -} - -/*-------------------------------------------------- - * STREAM enable - */ -static int -stream_enable(parse) - struct parseunit *parse; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_ENABLE; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)0; - strioc.ic_len = 0; - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_enable: ioctl(fd, I_STR, PARSEIOC_ENABLE): %m", CL_UNIT(parse->unit)); - return 0; - } - parse->io.clock_recv = stream_receive; /* ok - parse input in kernel */ - return 1; -} - -/*-------------------------------------------------- - * STREAM disable - */ -static int -stream_disable(parse) - struct parseunit *parse; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_DISABLE; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)0; - strioc.ic_len = 0; - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_disable: ioctl(fd, I_STR, PARSEIOC_DISABLE): %m", CL_UNIT(parse->unit)); - return 0; - } - parse->io.clock_recv = local_receive; /* ok - parse input in daemon */ - return 1; -} - -/*-------------------------------------------------- - * STREAM getfmt - */ -static int -stream_getfmt(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_GETFMT; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: ioctl(fd, I_STR, PARSEIOC_GETFMT): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM setfmt - */ -static int -stream_setfmt(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_SETFMT; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_setfmt: ioctl(fd, I_STR, PARSEIOC_SETFMT): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM getstat - */ -static int -stream_getstat(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_GETSTAT; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_getstat: ioctl(fd, I_STR, PARSEIOC_GETSTAT): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM setstat - */ -static int -stream_setstat(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_SETSTAT; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_setstat: ioctl(fd, I_STR, PARSEIOC_SETSTAT): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM timecode - */ -static int -stream_timecode(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_TIMECODE; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_process: ioctl(fd, I_STR, PARSEIOC_TIMECODE): %m", CL_UNIT(parse->unit), parse->fd); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM receive - */ -static void -stream_receive(rbufp) - struct recvbuf *rbufp; -{ - struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock; - parsetime_t parsetime; - - if (rbufp->recv_length != sizeof(parsetime_t)) - { - syslog(LOG_ERR,"PARSE receiver #%d: parse_receive: bad size (got %d expected %d)", - CL_UNIT(parse->unit), rbufp->recv_length, sizeof(parsetime_t)); - parse->baddata++; - parse_event(parse, CEVNT_BADREPLY); - return; - } - memmove((caddr_t)&parsetime, - (caddr_t)&rbufp->recv_space, - sizeof(parsetime_t)); - - /* - * switch time stamp world - be sure to normalize small usec field - * errors. - */ - -#define fix_ts(_X_) \ - if ((&(_X_))->tv.tv_usec >= 1000000) \ - { \ - (&(_X_))->tv.tv_usec -= 1000000; \ - (&(_X_))->tv.tv_sec += 1; \ - } - -#define cvt_ts(_X_, _Y_) \ - { \ - l_fp ts; \ - \ - fix_ts((_X_)); \ - if (!buftvtots((const char *)&(&(_X_))->tv, &ts)) \ - { \ - syslog(LOG_ERR,"parse: stream_receive: timestamp conversion error (buftvtots) (%s) (%d.%06d) ", (_Y_), (&(_X_))->tv.tv_sec, (&(_X_))->tv.tv_usec);\ - return; \ - } \ - else \ - { \ - (&(_X_))->fp = ts; \ - } \ - } - - if (PARSE_TIMECODE(parsetime.parse_state)) - { - cvt_ts(parsetime.parse_time, "parse_time"); - cvt_ts(parsetime.parse_stime, "parse_stime"); - } - - if (PARSE_PPS(parsetime.parse_state)) - cvt_ts(parsetime.parse_ptime, "parse_ptime"); - - parse_process(parse, &parsetime); -} - -/*-------------------------------------------------- - * STREAM poll - */ -static void -stream_poll(parse) - struct parseunit *parse; -{ - register int fd, i, rtc; - fd_set fdmask; - struct timeval timeout, starttime, curtime, selecttime; - parsetime_t parsetime; - - /* - * now we do the following: - * - read the first packet from the parse module (OLD !!!) - * - read the second packet from the parse module (fresh) - * - compute values for xntp - */ - - FD_ZERO(&fdmask); - fd = parse->fd; - FD_SET(fd, &fdmask); - timeout.tv_sec = 0; - timeout.tv_usec = 500000; /* 0.5 sec */ - - if (parse->parse_type->cl_poll) - { - parse->parse_type->cl_poll(parse); - } - - if (GETTIMEOFDAY(&starttime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - - selecttime = timeout; - - while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1) - { - /* no data from the radio clock */ - - if (rtc == -1) - { - if (errno == EINTR) - { - if (GETTIMEOFDAY(&curtime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec; - if (curtime.tv_usec < starttime.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec; - } - else - { - selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec; - } - - - if (timercmp(&selecttime, &timeout, >)) - { - /* - * elapsed real time passed timeout value - consider it timed out - */ - break; - } - - /* - * calculate residual timeout value - */ - selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec; - - if (selecttime.tv_usec > timeout.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec; - } - else - { - selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec; - } - - FD_SET(fd, &fdmask); - continue; - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data[old] from device (select() error: %m)", CL_UNIT(parse->unit)); - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data[old] from device", CL_UNIT(parse->unit)); - } - parse->noresponse++; - parse->lastmissed = current_time; - parse_event(parse, CEVNT_TIMEOUT); - - return; - } - - while (((i = read(fd, (char *)&parsetime, sizeof(parsetime))) < sizeof(parsetime))) - { - /* bad packet */ - if ( i == -1) - { - if (errno == EINTR) - { - continue; - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: bad read[old] from streams module (read() error: %m)", CL_UNIT(parse->unit), i, sizeof(parsetime)); - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: bad read[old] from streams module (got %d bytes - expected %d bytes)", CL_UNIT(parse->unit), i, sizeof(parsetime)); - } - parse->baddata++; - parse_event(parse, CEVNT_BADREPLY); - - return; - } - - if (parse->parse_type->cl_poll) - { - parse->parse_type->cl_poll(parse); - } - - timeout.tv_sec = 1; - timeout.tv_usec = 500000; /* 1.500 sec */ - FD_ZERO(&fdmask); - FD_SET(fd, &fdmask); - - if (GETTIMEOFDAY(&starttime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - - selecttime = timeout; - - while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1) - { - /* no data from the radio clock */ - - if (rtc == -1) - { - if (errno == EINTR) - { - if (GETTIMEOFDAY(&curtime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec; - if (curtime.tv_usec < starttime.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec; - } - else - { - selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec; - } - - - if (timercmp(&selecttime, &timeout, >)) - { - /* - * elapsed real time passed timeout value - consider it timed out - */ - break; - } - - /* - * calculate residual timeout value - */ - selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec; - - if (selecttime.tv_usec > timeout.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec; - } - else - { - selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec; - } - - FD_SET(fd, &fdmask); - continue; - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data[new] from device (select() error: %m)", CL_UNIT(parse->unit)); - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data[new] from device", CL_UNIT(parse->unit)); - } - - /* - * we will return here iff we got a good old sample as this would - * be misinterpreted. bad samples are passed on to be logged into the - * state statistics - */ - if ((parsetime.parse_status & CVT_MASK) == CVT_OK) - { - parse->noresponse++; - parse->lastmissed = current_time; - parse_event(parse, CEVNT_TIMEOUT); - return; - } - } - - /* - * we get here either by a possible read() (rtc == 1 - while assertion) - * or by a timeout or a system call error. when a read() is possible we - * get the new data, otherwise we stick with the old - */ - if ((rtc == 1) && ((i = read(fd, (char *)&parsetime, sizeof(parsetime))) < sizeof(parsetime))) - { - /* bad packet */ - if ( i== -1) - { - syslog(LOG_WARNING, "PARSE receiver #%d: bad read[new] from streams module (read() error: %m)", CL_UNIT(parse->unit), i, sizeof(parsetime)); - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: bad read[new] from streams module (got %d bytes - expected %d bytes)", CL_UNIT(parse->unit), i, sizeof(parsetime)); - } - parse->baddata++; - parse_event(parse, CEVNT_BADREPLY); - - return; - } - - /* - * process what we got - */ - parse_process(parse, &parsetime); -} -#endif - -/*-------------------------------------------------- - * local init - */ -static int -local_init(parse) - struct parseunit *parse; -{ - return parse_ioinit(&parse->parseio); -} - -/*-------------------------------------------------- - * local end - */ -static void -local_end(parse) - struct parseunit *parse; -{ - parse_ioend(&parse->parseio); -} - - -/*-------------------------------------------------- - * local nop - */ -static int -local_nop(parse) - struct parseunit *parse; -{ - return 1; -} - -/*-------------------------------------------------- - * local setcs - */ -static int -local_setcs(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_setcs(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local getfmt - */ -static int -local_getfmt(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_getfmt(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local setfmt - */ -static int -local_setfmt(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_setfmt(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local getstat - */ -static int -local_getstat(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_getstat(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local setstat - */ -static int -local_setstat(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_setstat(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local timecode - */ -static int -local_timecode(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_timecode(tcl, &parse->parseio); -} - - -/*-------------------------------------------------- - * local receive - */ -static void -local_receive(rbufp) - struct recvbuf *rbufp; -{ - struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock; - register int count; - register char *s; - /* - * eat all characters, parsing then and feeding complete samples - */ - count = rbufp->recv_length; - s = rbufp->recv_buffer; - - while (count--) - { - if (parse_ioread(&parse->parseio, *s++, &rbufp->recv_time)) - { - /* - * got something good to eat - */ -#ifdef PPSPPS - if (!PARSE_PPS(parse->parseio.parse_dtime.parse_state) && - (parse->flags & PARSE_PPSCLOCK)) - { - l_fp ts; - struct ppsclockev ev; - - if (ioctl(parse->fd, CIOGETEV, (caddr_t)&ev) == 0) - { - if (ev.serial != parse->ppsserial) - { - /* - * add PPS time stamp if available via ppsclock module - * and not supplied already. - */ - if (!buftvtots((const char *)&ev.tv, &ts)) - { - syslog(LOG_ERR,"parse: local_receive: timestamp conversion error (buftvtots) (ppsclockev.tv)"); - } - else - { - parse->parseio.parse_dtime.parse_ptime.fp = ts; - parse->parseio.parse_dtime.parse_state |= PARSEB_PPS|PARSEB_S_PPS; - } - } - parse->ppsserial = ev.serial; - } - } -#endif - parse_process(parse, &parse->parseio.parse_dtime); - parse_iodone(&parse->parseio); - } - } -} - -/*-------------------------------------------------- - * local poll - */ -static void -local_poll(parse) - struct parseunit *parse; -{ - register int fd, i, rtc; - fd_set fdmask; - struct timeval timeout, starttime, curtime, selecttime; - static struct timeval null_time = { 0, 0}; - timestamp_t ts; - - FD_ZERO(&fdmask); - fd = parse->fd; - FD_SET(fd, &fdmask); - timeout.tv_sec = 1; - timeout.tv_usec = 500000; /* 1.5 sec */ - - if (parse->parse_type->cl_poll) - { - parse->parse_type->cl_poll(parse); - } - - if (GETTIMEOFDAY(&starttime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - - selecttime = timeout; - - do - { - while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1) - { - /* no data from the radio clock */ - - if (rtc == -1) - { - if (errno == EINTR) - { - if (GETTIMEOFDAY(&curtime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec; - if (curtime.tv_usec < starttime.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec; - } - else - { - selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec; - } - - - if (!timercmp(&selecttime, &timeout, >)) - { - /* - * calculate residual timeout value - */ - selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec; - - if (selecttime.tv_usec > timeout.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec; - } - else - { - selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec; - } - - FD_SET(fd, &fdmask); - continue; - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data from device (select() error: %m)", CL_UNIT(parse->unit)); - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data from device", CL_UNIT(parse->unit)); - } - - parse->noresponse++; - parse->lastmissed = current_time; - parse_event(parse, CEVNT_TIMEOUT); - - return; - } - - /* - * at least 1 character is available - gobble everthing up that is available - */ - do - { - char inbuf[256]; - - register char *s = inbuf; - - rtc = i = read(fd, inbuf, sizeof(inbuf)); - - get_systime(&ts.fp); - - while (i-- > 0) - { - if (parse_ioread(&parse->parseio, *s++, &ts)) - { - /* - * got something good to eat - */ - parse_process(parse, &parse->parseio.parse_dtime); - parse_iodone(&parse->parseio); - /* - * done if no more characters are available - */ - FD_SET(fd, &fdmask); - if ((i == 0) && - (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)) - return; - } - } - FD_SET(fd, &fdmask); - } while ((rtc = select(fd + 1, &fdmask, 0, 0, &null_time)) == 1); - FD_SET(fd, &fdmask); - } while (1); -} - -/*-------------------------------------------------- - * init_iobinding - find and initialize lower layers - */ -static bind_t * -init_iobinding(parse) - struct parseunit *parse; -{ - register bind_t *b = io_bindings; - - while (b->bd_description != (char *)0) - { - if ((*b->bd_init)(parse)) - { - return b; - } - b++; - } - return (bind_t *)0; -} - -/**=========================================================================== - ** support routines - **/ - -/*-------------------------------------------------- - * convert a flag field to a string - */ -static char * -parsestate(state, buffer) - u_long state; - char *buffer; -{ - static struct bits - { - u_long bit; - char *name; - } flagstrings[] = - { - { PARSEB_ANNOUNCE, "DST SWITCH WARNING" }, - { PARSEB_POWERUP, "NOT SYNCHRONIZED" }, - { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" }, - { PARSEB_DST, "DST" }, - { PARSEB_UTC, "UTC DISPLAY" }, - { PARSEB_LEAPADD, "LEAP ADD WARNING" }, - { PARSEB_LEAPDEL, "LEAP DELETE WARNING" }, - { PARSEB_LEAPSECOND, "LEAP SECOND" }, - { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" }, - { PARSEB_TIMECODE, "TIME CODE" }, - { PARSEB_PPS, "PPS" }, - { PARSEB_POSITION, "POSITION" }, - { 0 } - }; - - static struct sbits - { - u_long bit; - char *name; - } sflagstrings[] = - { - { PARSEB_S_LEAP, "LEAP INDICATION" }, - { PARSEB_S_PPS, "PPS SIGNAL" }, - { PARSEB_S_ANTENNA, "ANTENNA" }, - { PARSEB_S_POSITION, "POSITION" }, - { 0 } - }; - int i; - - *buffer = '\0'; - - i = 0; - while (flagstrings[i].bit) - { - if (flagstrings[i].bit & state) - { - if (buffer[0]) - strcat(buffer, "; "); - strcat(buffer, flagstrings[i].name); - } - i++; - } - - if (state & (PARSEB_S_LEAP|PARSEB_S_ANTENNA|PARSEB_S_PPS|PARSEB_S_POSITION)) - { - register char *s, *t; - - if (buffer[0]) - strcat(buffer, "; "); - - strcat(buffer, "("); - - t = s = buffer + strlen(buffer); - - i = 0; - while (sflagstrings[i].bit) - { - if (sflagstrings[i].bit & state) - { - if (t != s) - { - strcpy(t, "; "); - t += 2; - } - - strcpy(t, sflagstrings[i].name); - t += strlen(t); - } - i++; - } - strcpy(t, ")"); - } - return buffer; -} - -/*-------------------------------------------------- - * convert a status flag field to a string - */ -static char * -parsestatus(state, buffer) - u_long state; - char *buffer; -{ - static struct bits - { - u_long bit; - char *name; - } flagstrings[] = - { - { CVT_OK, "CONVERSION SUCCESSFUL" }, - { CVT_NONE, "NO CONVERSION" }, - { CVT_FAIL, "CONVERSION FAILED" }, - { CVT_BADFMT, "ILLEGAL FORMAT" }, - { CVT_BADDATE, "DATE ILLEGAL" }, - { CVT_BADTIME, "TIME ILLEGAL" }, - { 0 } - }; - int i; - - *buffer = '\0'; - - i = 0; - while (flagstrings[i].bit) - { - if (flagstrings[i].bit & state) - { - if (buffer[0]) - strcat(buffer, "; "); - strcat(buffer, flagstrings[i].name); - } - i++; - } - - return buffer; -} - -/*-------------------------------------------------- - * convert a clock status flag field to a string - */ -static char * -clockstatus(state) - u_long state; -{ - static char buffer[20]; - static struct status - { - u_long value; - char *name; - } flagstrings[] = - { - { CEVNT_NOMINAL, "NOMINAL" }, - { CEVNT_TIMEOUT, "NO RESPONSE" }, - { CEVNT_BADREPLY,"BAD FORMAT" }, - { CEVNT_FAULT, "FAULT" }, - { CEVNT_PROP, "PROPAGATION DELAY" }, - { CEVNT_BADDATE, "ILLEGAL DATE" }, - { CEVNT_BADTIME, "ILLEGAL TIME" }, - { ~0 } - }; - int i; - - i = 0; - while (flagstrings[i].value != ~0) - { - if (flagstrings[i].value == state) - { - return flagstrings[i].name; - } - i++; - } - - sprintf(buffer, "unknown #%ld", (u_long)state); - - return buffer; -} - -/*-------------------------------------------------- - * mkascii - make a printable ascii string - * assumes (unless defined better) 7-bit ASCII - */ -#ifndef isprint -#define isprint(_X_) (((_X_) > 0x1F) && ((_X_) < 0x7F)) -#endif - -static char * -mkascii(buffer, blen, src, srclen) - register char *buffer; - register long blen; - register char *src; - register long srclen; -{ - register char *b = buffer; - register char *endb = (char *)0; - - if (blen < 4) - return (char *)0; /* don't bother with mini buffers */ - - endb = buffer + blen - 4; - - blen--; /* account for '\0' */ - - while (blen && srclen--) - { - if ((*src != '\\') && isprint(*src)) - { /* printables are easy... */ - *buffer++ = *src++; - blen--; - } - else - { - if (blen < 4) - { - while (blen--) - { - *buffer++ = '.'; - } - *buffer = '\0'; - return b; - } - else - { - if (*src == '\\') - { - strcpy(buffer,"\\\\"); - buffer += 2; - blen -= 2; - } - else - { - sprintf(buffer, "\\x%02x", *src++); - blen -= 4; - buffer += 4; - } - } - } - if (srclen && !blen && endb) /* overflow - set last chars to ... */ - strcpy(endb, "..."); - } - - *buffer = '\0'; - return b; -} - - -/*-------------------------------------------------- - * l_mktime - make representation of a relative time - */ -static char * -l_mktime(delta) - u_long delta; -{ - u_long tmp, m, s; - static char buffer[40]; - - buffer[0] = '\0'; - - if ((tmp = delta / (60*60*24)) != 0) - { - sprintf(buffer, "%ldd+", (u_long)tmp); - delta -= tmp * 60*60*24; - } - - s = delta % 60; - delta /= 60; - m = delta % 60; - delta /= 60; - - sprintf(buffer+strlen(buffer), "%02d:%02d:%02d", - (int)delta, (int)m, (int)s); - - return buffer; -} - - -/*-------------------------------------------------- - * parse_statistics - list summary of clock states - */ -static void -parse_statistics(parse) - register struct parseunit *parse; -{ - register int i; - - syslog(LOG_INFO, "PARSE receiver #%d: running time: %s", - CL_UNIT(parse->unit), - l_mktime(current_time - parse->timestarted)); - - syslog(LOG_INFO, "PARSE receiver #%d: current status: %s", - CL_UNIT(parse->unit), - clockstatus(parse->status)); - - for (i = 0; i <= CEVNT_MAX; i++) - { - register u_long stime; - register u_long percent, div = current_time - parse->timestarted; - - percent = stime = PARSE_STATETIME(parse, i); - - while (((u_long)(~0) / 10000) < percent) - { - percent /= 10; - div /= 10; - } - - if (div) - percent = (percent * 10000) / div; - else - percent = 10000; - - if (stime) - syslog(LOG_INFO, "PARSE receiver #%d: state %18s: %13s (%3d.%02d%%)", - CL_UNIT(parse->unit), - clockstatus(i), - l_mktime(stime), - percent / 100, percent % 100); - } -} - -/*-------------------------------------------------- - * cparse_statistics - wrapper for statistics call - */ -static void -cparse_statistics(peer) - register struct peer *peer; -{ - register struct parseunit *parse = (struct parseunit *)peer; - - parse_statistics(parse); - parse->stattimer.event_time = current_time + PARSESTATISTICS; - TIMER_ENQUEUE(timerqueue, &parse->stattimer); -} - -/**=========================================================================== - ** xntp interface routines - **/ - -/*-------------------------------------------------- - * parse_init - initialize internal parse driver data - */ -static void -parse_init() -{ - memset((caddr_t)parseunits, 0, sizeof parseunits); -} - - -/*-------------------------------------------------- - * parse_shutdown - shut down a PARSE clock - */ -static void -parse_shutdown(unit) - int unit; -{ - register struct parseunit *parse; - - unit = CL_UNIT(unit); - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, - "PARSE receiver #%d: parse_shutdown: INTERNAL ERROR, unit invalid (max %d)", - unit,MAXUNITS); - return; - } - - parse = parseunits[unit]; - - if (parse && !parse->peer) { - syslog(LOG_ERR, - "PARSE receiver #%d: parse_shutdown: INTERNAL ERROR, unit not in use", unit); - return; - } - - /* - * print statistics a last time and - * stop statistics machine - */ - parse_statistics(parse); - TIMER_DEQUEUE(&parse->stattimer); - -#if PPSPPS - { - /* - * kill possible PPS association - */ - if (fdpps == parse->fd) - fdpps = -1; - } -#endif - - if (parse->parse_type->cl_end) - { - parse->parse_type->cl_end(parse); - } - - if (parse->binding) - PARSE_END(parse); - - /* - * Tell the I/O module to turn us off. We're history. - */ - if (!parse->pollonly) - io_closeclock(&parse->io); - else - (void) close(parse->fd); - - syslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" removed", - CL_UNIT(parse->unit), parse->parse_type->cl_description); - - parse->peer = (struct peer *)0; /* unused now */ -} - -/*-------------------------------------------------- - * parse_start - open the PARSE devices and initialize data for processing - */ -static int -parse_start(sysunit, peer) - u_int sysunit; - struct peer *peer; -{ - u_int unit; - int fd232, i; -#ifdef HAVE_TERMIOS - struct termios tm; /* NEEDED FOR A LONG TIME ! */ -#endif -#ifdef HAVE_SYSV_TTYS - struct termio tm; /* NEEDED FOR A LONG TIME ! */ -#endif - struct parseunit * parse; - char parsedev[sizeof(PARSEDEVICE)+20]; - parsectl_t tmp_ctl; - u_int type; - - type = CL_TYPE(sysunit); - unit = CL_UNIT(sysunit); - - if (unit >= MAXUNITS) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unit number invalid (max %d)", - unit, MAXUNITS-1); - return 0; - } - - if ((type == ~0) || (clockinfo[type].cl_description == (char *)0)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unsupported clock type %d (max %d)", - unit, CL_REALTYPE(sysunit), ncltypes-1); - return 0; - } - - if (parseunits[unit] && parseunits[unit]->peer) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unit in use", unit); - return 0; - } - - /* - * Unit okay, attempt to open the device. - */ - (void) sprintf(parsedev, PARSEDEVICE, unit); - -#ifndef O_NOCTTY -#define O_NOCTTY 0 -#endif - - fd232 = open(parsedev, O_RDWR|O_NOCTTY, 0777); - if (fd232 == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: open of %s failed: %m", unit, parsedev); - return 0; - } - - /* - * Looks like this might succeed. Find memory for the structure. - * Look to see if there are any unused ones, if not we malloc() - * one. - */ - if (parseunits[unit]) - { - parse = parseunits[unit]; /* The one we want is okay - and free */ - } - else - { - for (i = 0; i < MAXUNITS; i++) - { - if (parseunits[i] && !parseunits[i]->peer) - break; - } - if (i < MAXUNITS) - { - /* - * Reclaim this one - */ - parse = parseunits[i]; - parseunits[i] = (struct parseunit *)0; - } - else - { - parse = (struct parseunit *) - emalloc(sizeof(struct parseunit)); - } - } - - memset((char *)parse, 0, sizeof(struct parseunit)); - parseunits[unit] = parse; - - /* - * Set up the structures - */ - parse->unit = (u_char)sysunit; - parse->timestarted = current_time; - parse->lastchange = current_time; - /* - * we want to filter input for the sake of - * getting an impression on dispersion - * also we like to average the median range - */ - parse->flags = PARSE_STAT_FILTER|PARSE_STAT_AVG; - parse->pollneeddata = 0; - parse->pollonly = 1; /* go for default polling mode */ - parse->lastformat = ~0; /* assume no format known */ - parse->status = CEVNT_TIMEOUT; /* expect the worst */ - parse->laststatus = ~0; /* be sure to mark initial status change */ - parse->nosynctime = 0; /* assume clock reasonable */ - parse->lastmissed = 0; /* assume got everything */ - parse->ppsserial = 0; - parse->localdata = (void *)0; - - parse->parse_type = &clockinfo[type]; - - parse->basedelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */ - parse->basedelay.l_uf = parse->parse_type->cl_basedelay; - - parse->ppsdelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */ - parse->ppsdelay.l_uf = parse->parse_type->cl_ppsdelay; - - peer->rootdelay = parse->parse_type->cl_rootdelay; - peer->sstclktype = parse->parse_type->cl_type; - peer->precision = sys_precision; - peer->stratum = STRATUM_REFCLOCK; - if (peer->stratum <= 1) - memmove((char *)&peer->refid, parse->parse_type->cl_id, 4); - else - peer->refid = htonl(PARSEHSREFID); - - parse->fd = fd232; - - parse->peer = peer; /* marks it also as busy */ - - parse->binding = init_iobinding(parse); - - if (parse->binding == (bind_t *)0) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: io sub system initialisation failed."); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - - /* - * configure terminal line - */ - if (TTY_GETATTR(fd232, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcgetattr(%d, &tm): %m", unit, fd232); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; - } - else - { -#ifndef _PC_VDISABLE - memset((char *)tm.c_cc, 0, sizeof(tm.c_cc)); -#else - int disablec; - errno = 0; /* pathconf can deliver -1 without changing errno ! */ - - disablec = fpathconf(parse->fd, _PC_VDISABLE); - if (disablec == -1 && errno) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: fpathconf(fd, _PC_VDISABLE): %m", CL_UNIT(parse->unit)); - memset((char *)tm.c_cc, 0, sizeof(tm.c_cc)); /* best guess */ - } - else - if (disablec != -1) - memset((char *)tm.c_cc, disablec, sizeof(tm.c_cc)); -#endif - - tm.c_cflag = clockinfo[type].cl_cflag; - tm.c_iflag = clockinfo[type].cl_iflag; - tm.c_oflag = clockinfo[type].cl_oflag; - tm.c_lflag = clockinfo[type].cl_lflag; - - if (TTY_SETATTR(fd232, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; - } - } - - /* - * as we always(?) get 8 bit chars we want to be - * sure, that the upper bits are zero for less - * than 8 bit I/O - so we pass that information on. - * note that there can be only one bit count format - * per file descriptor - */ - - switch (tm.c_cflag & CSIZE) - { - case CS5: - tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS5; - break; - - case CS6: - tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS6; - break; - - case CS7: - tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS7; - break; - - case CS8: - tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS8; - break; - } - - if (!PARSE_SETCS(parse, &tmp_ctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setcs() FAILED.", unit); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - - strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format); - tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer); - - if (!PARSE_SETFMT(parse, &tmp_ctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setfmt() FAILED.", unit); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - -#ifdef TCFLSH - /* - * get rid of all IO accumulated so far - */ - { -#ifndef TCIOFLUSH -#define TCIOFLUSH 2 -#endif - int flshcmd = TCIOFLUSH; - - (void) ioctl(parse->fd, TCFLSH, (caddr_t)&flshcmd); - } -#endif - - tmp_ctl.parsestatus.flags = parse->flags & PARSE_STAT_FLAGS; - - if (!PARSE_SETSTAT(parse, &tmp_ctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setstat() FAILED.", unit); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - - /* - * try to do any special initializations - */ - if (parse->parse_type->cl_init) - { - if (parse->parse_type->cl_init(parse)) - { - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - } - - if (!(parse->parse_type->cl_flags & PARSE_F_POLLONLY) && - (CL_PPS(parse->unit) || (parse->parse_type->cl_flags & PARSE_F_NOPOLLONLY))) - { - /* - * Insert in async io device list. - */ - parse->io.clock_recv = parse->binding->bd_receive; /* pick correct receive routine */ - parse->io.srcclock = (caddr_t)parse; - parse->io.datalen = 0; - parse->io.fd = parse->fd; /* replicated, but what the heck */ - if (!io_addclock(&parse->io)) - { - if (parse->parse_type->cl_flags & PARSE_F_NOPOLLONLY) - { - syslog(LOG_ERR, - "PARSE receiver #%d: parse_start: addclock %s fails (ABORT - clock type requires async io)", CL_UNIT(parse->unit), parsedev); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; - } - else - { - syslog(LOG_ERR, - "PARSE receiver #%d: parse_start: addclock %s fails (switching to polling mode)", CL_UNIT(parse->unit), parsedev); - } - } - else - { - parse->pollonly = 0; /* - * update at receipt of time_stamp - also - * supports PPS processing - */ - } - } - -#ifdef PPSPPS - if (parse->pollonly && (parse->parse_type->cl_flags & PARSE_F_PPSPPS)) - { - if (fdpps == -1) - { - fdpps = parse->fd; - if (!PARSE_DISABLE(parse)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_disable() FAILED", CL_UNIT(parse->unit)); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; - } - } - else - { - syslog(LOG_NOTICE, "PARSE receiver #%d: parse_start: loopfilter PPS already active - no PPS via CIOGETEV", CL_UNIT(parse->unit)); - } - } -#endif - - /* - * wind up statistics timer - */ - parse->stattimer.peer = (struct peer *)parse; /* we know better, but what the heck */ - parse->stattimer.event_handler = cparse_statistics; - parse->stattimer.event_time = current_time + PARSESTATISTICS; - TIMER_ENQUEUE(timerqueue, &parse->stattimer); - - /* - * get out Copyright information once - */ - if (!notice) - { - syslog(LOG_INFO, "NTP PARSE support: Copyright (c) 1989-1993, Frank Kardel"); - notice = 1; - } - - /* - * print out configuration - */ - syslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" (device %s) added", - CL_UNIT(parse->unit), - parse->parse_type->cl_description, parsedev); - - syslog(LOG_INFO, "PARSE receiver #%d: Stratum %d, %sPPS support, trust time %s, precision %d", - CL_UNIT(parse->unit), - parse->peer->stratum, (parse->pollonly || !CL_PPS(parse->unit)) ? "no " : "", - l_mktime(parse->parse_type->cl_maxunsync), parse->peer->precision); - - syslog(LOG_INFO, "PARSE receiver #%d: rootdelay %s s, phaseadjust %s s, %s IO handling", - CL_UNIT(parse->unit), - ufptoa(parse->parse_type->cl_rootdelay, 6), - lfptoa(&parse->basedelay, 8), - parse->binding->bd_description); - - syslog(LOG_INFO, "PARSE receiver #%d: Format recognition: %s", CL_UNIT(parse->unit), - !(*parse->parse_type->cl_format) ? "<AUTOMATIC>" : parse->parse_type->cl_format); - -#ifdef PPSPPS - syslog(LOG_INFO, "PARSE receiver #%d: %sCD PPS support", - CL_UNIT(parse->unit), - (fdpps == parse->fd) ? "" : "NO "); -#endif - - return 1; -} - -/*-------------------------------------------------- - * parse_poll - called by the transmit procedure - */ -static void -parse_poll(unit, peer) - int unit; - struct peer *peer; -{ - register struct parseunit *parse; - - unit = CL_UNIT(unit); - - if (unit >= MAXUNITS) - { - syslog(LOG_ERR, "PARSE receiver #%d: poll: INTERNAL: unit invalid", - unit); - return; - } - - parse = parseunits[unit]; - - if (!parse->peer) - { - syslog(LOG_ERR, "PARSE receiver #%d: poll: INTERNAL: unit unused", - unit); - return; - } - - if (peer != parse->peer) - { - syslog(LOG_ERR, - "PARSE receiver #%d: poll: INTERNAL: peer incorrect", - unit); - return; - } - - /* - * Update clock stat counters - */ - parse->polls++; - - /* - * in PPS mode we just mark that we want the next sample - * for the clock filter - */ - if (!parse->pollonly) - { - if (parse->pollneeddata) - { - /* - * bad news - didn't get a response last time - */ - parse->noresponse++; - parse->lastmissed = current_time; - parse_event(parse, CEVNT_TIMEOUT); - - syslog(LOG_WARNING, "PARSE receiver #%d: no data from device within poll interval", CL_UNIT(parse->unit)); - } - parse->pollneeddata = 1; - if (parse->parse_type->cl_poll) - { - parse->parse_type->cl_poll(parse); - } - return; - } - - /* - * the following code is only executed only when polling is used - */ - - PARSE_POLL(parse); -} - -/*-------------------------------------------------- - * parse_leap - called when a leap second occurs - */ - -static void -parse_leap() -{ - /* - * PARSE encodes the LEAP correction direction. - * For timecodes that do not pass on the leap correction direction - * the default PARSEB_LEAPADD must be used. It may then be modified - * with a fudge flag (flag2). - */ -} - - -/*-------------------------------------------------- - * parse_control - set fudge factors, return statistics - */ -static void -parse_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct parseunit *parse; - parsectl_t tmpctl; - u_long type; - static char outstatus[400]; /* status output buffer */ - - type = CL_TYPE(unit); - unit = CL_UNIT(unit); - - if (out) - { - out->lencode = 0; - out->lastcode = 0; - out->polls = out->noresponse = 0; - out->badformat = out->baddata = 0; - out->timereset = 0; - out->currentstatus = out->lastevent = CEVNT_NOMINAL; - out->kv_list = (struct ctl_var *)0; - } - - if (unit >= MAXUNITS) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_control: unit invalid (max %d)", - unit, MAXUNITS-1); - return; - } - - parse = parseunits[unit]; - - if (!parse || !parse->peer) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_control: unit invalid (UNIT INACTIVE)", - unit); - return; - } - - if (in) - { - if (in->haveflags & CLK_HAVETIME1) - parse->basedelay = in->fudgetime1; - - if (in->haveflags & CLK_HAVETIME2) - { - parse->ppsdelay = in->fudgetime2; - } - - if (in->haveflags & CLK_HAVEVAL1) - { - parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf); - if (parse->peer->stratum <= 1) - memmove((char *)&parse->peer->refid, - parse->parse_type->cl_id, - 4); - else - parse->peer->refid = htonl(PARSEHSREFID); - } - - if (in->haveflags & CLK_HAVEVAL2) - { - parse->peer->refid = in->fudgeval2; - } - - if (in->haveflags & (CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4)) - { - parse->flags = (in->flags & (CLK_FLAG1|CLK_FLAG2|CLK_FLAG3|CLK_FLAG4)) | - (parse->flags & ~PARSE_STAT_FLAGS); - } - - if (in->haveflags & (CLK_HAVEVAL2|CLK_HAVETIME2|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4)) - { - parsectl_t tmpctl; - tmpctl.parsestatus.flags = parse->flags & PARSE_STAT_FLAGS; - - if (!PARSE_SETSTAT(parse, &tmpctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_control: parse_setstat() FAILED", unit); - } - } - } - - if (out) - { - register u_long sum = 0; - register char *t, *tt; - register struct tm *tm; - register short utcoff; - register char sign; - register int i; - time_t tim; - - outstatus[0] = '\0'; - - out->haveflags = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3; - out->clockdesc = parse->parse_type->cl_description; - - out->fudgetime1 = parse->basedelay; - - out->fudgetime2 = parse->ppsdelay; - - out->fudgeval1 = parse->peer->stratum; - - out->fudgeval2 = parse->peer->refid; - - out->flags = parse->flags & PARSE_STAT_FLAGS; - - out->type = REFCLK_PARSE; - - /* - * figure out skew between PPS and RS232 - just for informational - * purposes - returned in time2 value - */ - if (PARSE_SYNC(parse->time.parse_state)) - { - if (PARSE_PPS(parse->time.parse_state) && PARSE_TIMECODE(parse->time.parse_state)) - { - l_fp off; - - /* - * we have a PPS and RS232 signal - calculate the skew - * WARNING: assumes on TIMECODE == PULSE (timecode after pulse) - */ - off = parse->time.parse_stime.fp; - L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */ - tt = add_var(&out->kv_list, 40, RO); - sprintf(tt, "refclock_ppsskew=%s", lfptoms(&off, 6)); - } - } - - if (PARSE_PPS(parse->time.parse_state)) - { - tt = add_var(&out->kv_list, 80, RO|DEF); - sprintf(tt, "refclock_ppstime=\"%s\"", prettydate(&parse->time.parse_ptime.fp)); - } - - /* - * all this for just finding out the +-xxxx part (there are always - * new and changing fields in the standards 8-(). - * - * but we do it for the human user... - */ - tim = parse->time.parse_time.fp.l_ui - JAN_1970; - tm = gmtime(&tim); - utcoff = tm->tm_hour * 60 + tm->tm_min; - tm = localtime(&tim); - utcoff = tm->tm_hour * 60 + tm->tm_min - utcoff + 12 * 60; - utcoff += 24 * 60; - utcoff %= 24 * 60; - utcoff -= 12 * 60; - if (utcoff < 0) - { - utcoff = -utcoff; - sign = '-'; - } - else - { - sign = '+'; - } - - tt = add_var(&out->kv_list, 128, RO|DEF); - sprintf(tt, "refclock_time=\""); - tt += strlen(tt); - - if (parse->time.parse_time.fp.l_ui == 0) - { - strcpy(tt, "<UNDEFINED>\""); - } - else - { - strcpy(tt, prettydate(&parse->time.parse_time.fp)); - t = tt + strlen(tt); - - sprintf(t, " (%c%02d%02d)\"", sign, utcoff / 60, utcoff % 60); - } - - if (!PARSE_GETTIMECODE(parse, &tmpctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_control: parse_timecode() FAILED", unit); - } - else - { - tt = add_var(&out->kv_list, 128, RO|DEF); - sprintf(tt, "refclock_status=\""); - tt += strlen(tt); - - /* - * copy PPS flags from last read transaction (informational only) - */ - tmpctl.parsegettc.parse_state |= parse->time.parse_state & - (PARSEB_PPS|PARSEB_S_PPS); - - (void) parsestate(tmpctl.parsegettc.parse_state, tt); - - strcat(tt, "\""); - - if (tmpctl.parsegettc.parse_count) - mkascii(outstatus+strlen(outstatus), sizeof(outstatus)- strlen(outstatus) - 1, - tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1); - - parse->badformat += tmpctl.parsegettc.parse_badformat; - } - - tmpctl.parseformat.parse_format = tmpctl.parsegettc.parse_format; - - if (!PARSE_GETFMT(parse, &tmpctl)) - { - syslog (LOG_ERR, "PARSE receiver #%d: parse_control: parse_getfmt() FAILED", unit); - } - else - { - tt = add_var(&out->kv_list, 80, RO|DEF); - sprintf(tt, "refclock_format=\""); - - strncat(tt, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count); - strcat(tt,"\""); - } - - /* - * gather state statistics - */ - - tt = add_var(&out->kv_list, 200, RO|DEF); - strcpy(tt, "refclock_states=\""); - tt += strlen(tt); - - for (i = 0; i <= CEVNT_MAX; i++) - { - register u_long stime; - register u_long div = current_time - parse->timestarted; - register u_long percent; - - percent = stime = PARSE_STATETIME(parse, i); - - while (((u_long)(~0) / 10000) < percent) - { - percent /= 10; - div /= 10; - } - - if (div) - percent = (percent * 10000) / div; - else - percent = 10000; - - if (stime) - { - sprintf(tt, "%s%s%s: %s (%d.%02d%%)", - sum ? "; " : "", - (parse->status == i) ? "*" : "", - clockstatus(i), - l_mktime(stime), - (int)(percent / 100), (int)(percent % 100)); - sum += stime; - tt += strlen(tt); - } - } - - sprintf(tt, "; running time: %s\"", l_mktime(sum)); - - tt = add_var(&out->kv_list, 32, RO); - sprintf(tt, "refclock_id=\"%s\"", parse->parse_type->cl_id); - - tt = add_var(&out->kv_list, 80, RO); - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); - sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.59 1994/05/23 16:29:27 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; - out->timereset = parse->timestarted; - out->polls = parse->polls; - out->noresponse = parse->noresponse; - out->badformat = parse->badformat; - out->baddata = parse->baddata; - out->lastevent = parse->lastevent; - out->currentstatus = parse->status; - } -} - -/**=========================================================================== - ** processing routines - **/ - -/*-------------------------------------------------- - * event handling - note that nominal events will also be posted - */ -static void -parse_event(parse, event) - struct parseunit *parse; - int event; -{ - if (parse->status != (u_char) event) - { - parse->statetime[parse->status] += current_time - parse->lastchange; - parse->lastchange = current_time; - - parse->status = (u_char)event; - if (event != CEVNT_NOMINAL) - parse->lastevent = parse->status; - - report_event(EVNT_PEERCLOCK, parse->peer); - } -} - -/*-------------------------------------------------- - * process a PARSE time sample - */ -static void -parse_process(parse, parsetime) - struct parseunit *parse; - parsetime_t *parsetime; -{ - unsigned char leap; - struct timeval usecdisp; - l_fp off, rectime, reftime, dispersion; - - /* - * check for changes in conversion status - * (only one for each new status !) - */ - if (parse->laststatus != parsetime->parse_status) - { - char buffer[200]; - - syslog(LOG_WARNING, "PARSE receiver #%d: conversion status \"%s\"", - CL_UNIT(parse->unit), parsestatus(parsetime->parse_status, buffer)); - - if ((parsetime->parse_status & CVT_MASK) == CVT_FAIL) - { - /* - * tell more about the story - list time code - * there is a slight change for a race condition and - * the time code might be overwritten by the next packet - */ - parsectl_t tmpctl; - - if (!PARSE_GETTIMECODE(parse, &tmpctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_process: parse_timecode() FAILED", CL_UNIT(parse->unit)); - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: FAILED TIMECODE: \"%s\"", - CL_UNIT(parse->unit), mkascii(buffer, sizeof buffer, tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1)); - parse->badformat += tmpctl.parsegettc.parse_badformat; - } - } - - parse->laststatus = parsetime->parse_status; - } - - /* - * examine status and post appropriate events - */ - if ((parsetime->parse_status & CVT_MASK) != CVT_OK) - { - /* - * got bad data - tell the rest of the system - */ - switch (parsetime->parse_status & CVT_MASK) - { - case CVT_NONE: - break; /* well, still waiting - timeout is handled at higher levels */ - - case CVT_FAIL: - parse->badformat++; - if (parsetime->parse_status & CVT_BADFMT) - { - parse_event(parse, CEVNT_BADREPLY); - } - else - if (parsetime->parse_status & CVT_BADDATE) - { - parse_event(parse, CEVNT_BADDATE); - } - else - if (parsetime->parse_status & CVT_BADTIME) - { - parse_event(parse, CEVNT_BADTIME); - } - else - { - parse_event(parse, CEVNT_BADREPLY); /* for the lack of something better */ - } - } - return; /* skip the rest - useless */ - } - - /* - * check for format changes - * (in case somebody has swapped clocks 8-) - */ - if (parse->lastformat != parsetime->parse_format) - { - parsectl_t tmpctl; - - tmpctl.parseformat.parse_format = parsetime->parse_format; - - if (!PARSE_GETFMT(parse, &tmpctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_getfmt() FAILED", CL_UNIT(parse->unit)); - } - else - { - syslog(LOG_INFO, "PARSE receiver #%d: new packet format \"%s\"", - CL_UNIT(parse->unit), tmpctl.parseformat.parse_buffer); - } - parse->lastformat = parsetime->parse_format; - } - - /* - * now, any changes ? - */ - if (parse->time.parse_state != parsetime->parse_state) - { - char tmp1[200]; - char tmp2[200]; - /* - * something happend - */ - - (void) parsestate(parsetime->parse_state, tmp1); - (void) parsestate(parse->time.parse_state, tmp2); - - syslog(LOG_INFO,"PARSE receiver #%d: STATE CHANGE: %s -> %s", - CL_UNIT(parse->unit), tmp2, tmp1); - } - - /* - * remember for future - */ - parse->time = *parsetime; - - /* - * check to see, whether the clock did a complete powerup or lost PZF signal - * and post correct events for current condition - */ - if (PARSE_POWERUP(parsetime->parse_state)) - { - /* - * this is bad, as we have completely lost synchronisation - * well this is a problem with the receiver here - * for PARSE U/A 31 the lost synchronisation ist true - * as it is the powerup state and the time is taken - * from a crude real time clock chip - * for the PZF series this is only partly true, as - * PARSE_POWERUP only means that the pseudo random - * phase shift sequence cannot be found. this is only - * bad, if we have never seen the clock in the SYNC - * state, where the PHASE and EPOCH are correct. - * for reporting events the above business does not - * really matter, but we can use the time code - * even in the POWERUP state after having seen - * the clock in the synchronized state (PZF class - * receivers) unless we have had a telegram disruption - * after having seen the clock in the SYNC state. we - * thus require having seen the clock in SYNC state - * *after* having missed telegrams (noresponse) from - * the clock. one problem remains: we might use erroneously - * POWERUP data if the disruption is shorter than 1 polling - * interval. fortunately powerdowns last usually longer than 64 - * seconds and the receiver is at least 2 minutes in the - * POWERUP or NOSYNC state before switching to SYNC - */ - parse_event(parse, CEVNT_FAULT); - if (parse->nosynctime) - { - /* - * repeated POWERUP/NOSYNC state - look whether - * the message should be repeated - */ - if (current_time - parse->nosynctime > PARSENOSYNCREPEAT) - { - syslog(LOG_ERR,"PARSE receiver #%d: *STILL* NOT SYNCHRONIZED (POWERUP or no PZF signal)", - CL_UNIT(parse->unit)); - parse->nosynctime = current_time; - } - } - else - { - syslog(LOG_ERR,"PARSE receiver #%d: NOT SYNCHRONIZED", - CL_UNIT(parse->unit)); - parse->nosynctime = current_time; - } - } - else - { - /* - * we have two states left - * - * SYNC: - * this state means that the EPOCH (timecode) and PHASE - * information has be read correctly (at least two - * successive PARSE timecodes were received correctly) - * this is the best possible state - full trust - * - * NOSYNC: - * The clock should be on phase with respect to the second - * signal, but the timecode has not been received correctly within - * at least the last two minutes. this is a sort of half baked state - * for PARSE U/A 31 this is bad news (clock running without timecode - * confirmation) - * PZF 535 has also no time confirmation, but the phase should be - * very precise as the PZF signal can be decoded - */ - parse->nosynctime = 0; /* current state is better than worst state */ - - if (PARSE_SYNC(parsetime->parse_state)) - { - /* - * currently completely synchronized - best possible state - */ - parse->lastsync = current_time; - /* - * log OK status - */ - parse_event(parse, CEVNT_NOMINAL); - } - else - { - /* - * we have had some problems receiving the time code - */ - parse_event(parse, CEVNT_PROP); - } - } - - if (PARSE_TIMECODE(parsetime->parse_state)) - { - l_fp offset; - - /* - * calculate time offset including systematic delays - * off = PARSE-timestamp + propagation delay - kernel time stamp - */ - offset = parse->basedelay; - - off = parsetime->parse_time.fp; - - reftime = off; - - L_ADD(&off, &offset); - rectime = off; /* this makes org time and xmt time somewhat artificial */ - - L_SUB(&off, &parsetime->parse_stime.fp); - - if ((parse->flags & PARSE_STAT_FILTER) && - (off.l_i > -60) && - (off.l_i < 60)) /* take usec error only if within +- 60 secs */ - { - struct timeval usecerror; - /* - * offset is already calculated - */ - usecerror.tv_sec = parsetime->parse_usecerror / 1000000; - usecerror.tv_usec = parsetime->parse_usecerror % 1000000; - - sTVTOTS(&usecerror, &off); - L_ADD(&off, &offset); - } - } - - if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit)) - { - l_fp offset; - - /* - * we have a PPS signal - much better than the RS232 stuff (we hope) - */ - offset = parsetime->parse_ptime.fp; - - L_ADD(&offset, &parse->ppsdelay); - - if (PARSE_TIMECODE(parsetime->parse_state)) - { - if (M_ISGEQ(off.l_i, off.l_f, -1, 0x80000000) && - M_ISGEQ(0, 0x7fffffff, off.l_i, off.l_f)) - { - /* - * RS232 offsets within [-0.5..0.5[ - take PPS offsets - */ - - if (parse->parse_type->cl_flags & PARSE_F_PPSONSECOND) - { - reftime = off = offset; - rectime = offset; - /* - * implied on second offset - */ - off.l_uf = ~off.l_uf; /* map [0.5..1[ -> [-0.5..0[ */ - off.l_ui = (off.l_f < 0) ? ~0 : 0; /* sign extend */ - } - else - { - /* - * time code describes pulse - */ - off = parsetime->parse_time.fp; - - rectime = reftime = off; /* take reference time - fake rectime */ - - L_SUB(&off, &offset); /* true offset */ - } - } - /* - * take RS232 offset when PPS when out of bounds - */ - } - else - { - /* - * Well, no time code to guide us - assume on second pulse - * and pray, that we are within [-0.5..0.5[ - */ - reftime = off = offset; - rectime = offset; - /* - * implied on second offset - */ - off.l_uf = ~off.l_uf; /* map [0.5..1[ -> [-0.5..0[ */ - off.l_ui = (off.l_f < 0) ? ~0 : 0; /* sign extend */ - } - } - else - { - if (!PARSE_TIMECODE(parsetime->parse_state)) - { - /* - * Well, no PPS, no TIMECODE, no more work ... - */ - return; - } - } - - -#if defined(PPS) || defined(PPSCLK) || defined(PPSPPS) || defined(PARSEPPS) - if (CL_PPS(parse->unit) && !parse->pollonly && PARSE_SYNC(parsetime->parse_state)) - { - /* - * only provide PPS information when clock - * is in sync - * thus PHASE and EPOCH are correct and PPS is not - * done via the CIOGETEV loopfilter mechanism - */ -#ifdef PPSPPS - if (fdpps != parse->fd) -#endif - (void) pps_sample(&off); - } -#endif /* PPS || PPSCLK || PPSPPS || PARSEPPS */ - - /* - * ready, unless the machine wants a sample - */ - if (!parse->pollonly && !parse->pollneeddata) - return; - - parse->pollneeddata = 0; - - if (PARSE_PPS(parsetime->parse_state)) - { - L_CLR(&dispersion); - } - else - { - /* - * convert usec dispersion into NTP TS world - */ - - usecdisp.tv_sec = parsetime->parse_usecdisp / 1000000; - usecdisp.tv_usec = parsetime->parse_usecdisp % 1000000; - - TVTOTS(&usecdisp, &dispersion); - } - - /* - * and now stick it into the clock machine - * samples are only valid iff lastsync is not too old and - * we have seen the clock in sync at least once - * after the last time we didn't see an expected data telegram - * see the clock states section above for more reasoning - */ - if (((current_time - parse->lastsync) > parse->parse_type->cl_maxunsync) || - (parse->lastsync <= parse->lastmissed)) - { - leap = LEAP_NOTINSYNC; - } - else - { - if (PARSE_LEAPADD(parsetime->parse_state)) - { - /* - * we pick this state also for time code that pass leap warnings - * without direction information (as earth is currently slowing - * down). - */ - leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND; - } - else - if (PARSE_LEAPDEL(parsetime->parse_state)) - { - leap = LEAP_DELSECOND; - } - else - { - leap = LEAP_NOWARNING; - } - } - - refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap); -} - -/**=========================================================================== - ** clock polling support - **/ - -struct poll_timer -{ - struct event timer; /* we'd like to poll a a higher rate than 1/64s */ -}; - -typedef struct poll_timer poll_timer_t; - -/*-------------------------------------------------- - * direct poll routine - */ -static void -poll_dpoll(parse) - struct parseunit *parse; -{ - register int rtc; - register char *ps = ((poll_info_t *)parse->parse_type->cl_data)->string; - register int ct = ((poll_info_t *)parse->parse_type->cl_data)->count; - - rtc = write(parse->fd, ps, ct); - if (rtc < 0) - { - syslog(LOG_ERR, "PARSE receiver #%d: poll_dpoll: failed to send cmd to clock: %m", CL_UNIT(parse->unit)); - } - else - if (rtc != ct) - { - syslog(LOG_ERR, "PARSE receiver #%d: poll_dpoll: failed to send cmd incomplete (%d of %d bytes sent)", CL_UNIT(parse->unit), rtc, ct); - } -} - -/*-------------------------------------------------- - * periodic poll routine - */ -static void -poll_poll(parse) - struct parseunit *parse; -{ - register poll_timer_t *pt = (poll_timer_t *)parse->localdata; - - poll_dpoll(parse); - - if (pt != (poll_timer_t *)0) - { - pt->timer.event_time = current_time + ((poll_info_t *)parse->parse_type->cl_data)->rate; - TIMER_ENQUEUE(timerqueue, &pt->timer); - } -} - -/*-------------------------------------------------- - * init routine - setup timer - */ -static int -poll_init(parse) - struct parseunit *parse; -{ - register poll_timer_t *pt; - - if (((poll_info_t *)parse->parse_type->cl_data)->rate) - { - parse->localdata = (void *)malloc(sizeof(poll_timer_t)); - memset((char *)parse->localdata, 0, sizeof(poll_timer_t)); - - pt = (poll_timer_t *)parse->localdata; - - pt->timer.peer = (struct peer *)parse; /* well, only we know what it is */ - pt->timer.event_handler = poll_poll; - poll_poll(parse); - } - else - { - parse->localdata = (void *)0; - } - - return 0; -} - -/*-------------------------------------------------- - * end routine - clean up timer - */ -static void -poll_end(parse) - struct parseunit *parse; -{ - if (parse->localdata != (void *)0) - { - TIMER_DEQUEUE(&((poll_timer_t *)parse->localdata)->timer); - free((char *)parse->localdata); - parse->localdata = (void *)0; - } -} - -/**=========================================================================== - ** special code for special clocks - **/ - -/*-------------------------------------------------- - * trimble init routine - setup EOL and then do poll_init. - */ -static int -trimble_init(parse) - struct parseunit *parse; -{ -#ifdef HAVE_TERMIOS - struct termios tm; -#endif -#ifdef HAVE_SYSV_TTYS - struct termio tm; -#endif - /* - * configure terminal line for trimble receiver - */ - if (TTY_GETATTR(parse->fd, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: trimble_init: tcgetattr(fd, &tm): %m", CL_UNIT(parse->unit)); - return 0; - } - else - { - tm.c_cc[VEOL] = TRIMBLESV6_EOL; - - if (TTY_SETATTR(parse->fd, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: trimble_init: tcsetattr(fd, &tm): %m", CL_UNIT(parse->unit)); - return 0; - } - } - return poll_init(parse); -} -#endif /* defined(REFCLOCK) && defined(PARSE) */ - -/* - * History: - * - * refclock_parse.c,v - * Revision 3.59 1994/05/23 16:29:27 kardel - * IGEL clock - Trimble update - * - * Revision 3.58 1994/05/12 21:03:39 kardel - * adhere to new standard that fudgeval2 is refid - * - * Revision 3.57 1994/05/12 12:50:47 kardel - * printf fmt/arg cleanup - * - * Revision 3.56 1994/05/10 21:15:51 kardel - * var reference level bug, kernel disable fix - * - * Revision 3.55 1994/05/02 00:37:01 kardel - * 3.3t reconcilation + bug fixes (PPS simulation - old kpll) - * - * Revision 3.54 1994/04/11 19:34:42 kardel - * longer input characters for DCF77 raw input (8Bit+parity ignored) - * - * Revision 3.53 1994/03/25 13:07:39 kardel - * fixed offset calculation for large (>4 Min) offsets - * - * Revision 3.52 1994/03/03 09:58:00 kardel - * stick -kv in cvs is no fun - * - * Revision 3.49 1994/02/20 13:26:00 kardel - * rcs id cleanup - * - * Revision 3.48 1994/02/20 13:04:56 kardel - * parse add/delete second support - * - * Revision 3.47 1994/02/02 17:44:30 kardel - * rcs ids fixed - * - * Revision 3.45 1994/01/25 19:06:27 kardel - * 94/01/23 reconcilation - * - * Revision 3.44 1994/01/25 17:32:23 kardel - * settable extended variables - * - * Revision 3.43 1994/01/23 16:28:39 kardel - * HAVE_TERMIOS introduced - * - * Revision 3.42 1994/01/22 11:35:04 kardel - * added HAVE_TERMIOS - * - * Revision 3.41 1993/11/27 18:44:37 kardel - * can't trust GPS166 on unsync - * - * Revision 3.40 1993/11/21 18:03:36 kardel - * useless declaration deleted - * - * Revision 3.39 1993/11/21 15:30:15 kardel - * static funcitions may be declared only at outer level - * - * Revision 3.38 1993/11/15 21:26:49 kardel - * conditional define comments fixed - * - * Revision 3.37 1993/11/11 11:20:49 kardel - * declaration fixes - * - * Revision 3.36 1993/11/10 12:17:14 kardel - * #ifdef glitch - * - * Revision 3.35 1993/11/01 21:15:06 kardel - * comments updated - * - * Revision 3.34 1993/11/01 20:01:08 kardel - * parse Solaris support (initial version) - * - * Revision 3.33 1993/10/30 09:44:58 kardel - * conditional compilation flag cleanup - * - * Revision 3.32 1993/10/22 14:28:43 kardel - * Oct. 22nd 1993 reconcilation - * - * Revision 3.31 1993/10/10 21:19:10 kardel - * compilation cleanup - (minimal porting tests) - * - * Revision 3.30 1993/10/09 21:44:35 kardel - * syslog strings fixed - * - * Revision 3.29 1993/10/09 14:40:15 kardel - * default precision setting fixed - * - * Revision 3.28 1993/10/08 14:48:22 kardel - * Changed offset determination logic: - * Take the PPS offset if it is available and the time - * code offset is within [-0.5..0.5[, otherwise stick - * to the time code offset - * - * Revision 3.27 1993/10/08 00:53:17 kardel - * announce also simulated PPS via CIOGETEV in ntpq cl - * - * Revision 3.26 1993/10/07 23:29:35 kardel - * trimble fixes - * - * Revision 3.25 1993/10/06 21:13:35 kardel - * test reversed (CIOGETEV support) - * - * Revision 3.24 1993/10/03 20:18:26 kardel - * Well, values > 999999 in the usec field from uniqtime() timestamps - * can prove harmful. - * - * Revision 3.23 1993/10/03 19:49:54 kardel - * buftvtots where failing on uninitialized time stamps - * - * Revision 3.22 1993/10/03 19:11:09 kardel - * restructured I/O handling - * - * Revision 3.21 1993/09/29 11:30:18 kardel - * special init for trimble to set EOL - * - * Revision 3.20 1993/09/27 22:46:28 kardel - * preserve module stack if I_PUSH parse fails - * - * Revision 3.19 1993/09/27 21:10:11 kardel - * wrong structure member - * - * Revision 3.18 1993/09/27 13:05:06 kardel - * Trimble is true polling only - * - * Revision 3.17 1993/09/27 12:47:10 kardel - * poll string support generalized - * - * Revision 3.16 1993/09/26 23:40:56 kardel - * new parse driver logic - * - * Revision 3.15 1993/09/24 15:00:51 kardel - * Sep 23rd distribution... - * - * Revision 3.14 1993/09/22 18:21:15 kardel - * support ppsclock streams module (-DSTREAM -DPPSPPS -DPARSEPPS -UPARSESTREAM) - * - * Revision 3.13 1993/09/05 15:38:33 kardel - * not every cpp understands #error... - * - * Revision 3.12 1993/09/02 20:04:19 kardel - * TTY cleanup - * - * Revision 3.11 1993/09/01 21:48:47 kardel - * conditional cleanup - * - * Revision 3.10 1993/09/01 11:32:45 kardel - * assuming HAVE_POSIX_TTYS when STREAM defined - * - * Revision 3.9 1993/08/31 22:31:46 kardel - * SINIX-M SysVR4 integration - * - * Revision 3.8 1993/08/27 00:29:50 kardel - * compilation cleanup - * - * Revision 3.7 1993/08/24 22:27:30 kardel - * cleaned up AUTOCONF DCF77 mess 8-) - wasn't too bad - * - * Revision 3.6 1993/08/24 21:36:23 kardel - * casting and ifdefs - * - * Revision 3.5 1993/07/09 23:36:59 kardel - * HAVE_POSIX_TTYS used to produce errors 8-( - BSD driver support still lacking - * - * Revision 3.4 1993/07/09 12:42:29 kardel - * RAW DCF now officially released - * - * Revision 3.3 1993/07/09 11:50:37 kardel - * running GPS also on 960 to be able to switch GPS/DCF77 - * - * Revision 3.2 1993/07/09 11:37:34 kardel - * Initial restructured version + GPS support - * - * Revision 3.1 1993/07/06 10:01:07 kardel - * DCF77 driver goes generic... - * - */ diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_datum.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_datum.c deleted file mode 100644 index 680f104..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_datum.c +++ /dev/null @@ -1,645 +0,0 @@ -/* - * refclock_datum - clock driver for the Datum watchayamacallit - */ -#if defined(REFCLOCK) && (defined(DATUM) || defined(DATUMCLK) || defined(DATUMPPS)) -/* */ -/*...... Include Files .................................................*/ -/* */ - - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> -#include <sys/errno.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" - -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ - -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ - -#if defined(HAVE_TERMIOS) -#include <termios.h> -#endif -#if defined(STREAM) -#include <stropts.h> -#if defined(WWVBCLK) -#include <sys/clkdefs.h> -#endif /* WWVBCLK */ -#endif /* STREAM */ - -#if defined (WWVBPPS) -#include <sys/ppsclock.h> -#endif /* WWVBPPS */ - -#include "ntp_stdlib.h" - -/* -#include "temp.c" -void set_logfile(); -*/ - - -#define DEBUG_DATUM_PTC - - -/* */ -/*...... #defines ......................................................*/ -/* */ - -/* -#define refclock_datum_pts refclock_wwvb -*/ - -#define MAXUNITS 4 -#define PTSPRECISION (-13) /* precision assumed (about 100 us) */ -#define GMT 7 -#define DATUM_MAX_ERROR 0.100 -#define DATUM_MAX_ERROR2 DATUM_MAX_ERROR*DATUM_MAX_ERROR - -/* */ -/*...... externals .....................................................*/ -/* */ - -extern U_LONG current_time; /* current time (s) */ -extern int debug; /* global debug flag */ - - -/* */ -/*...... My structure ..................................................*/ -/* */ - -struct datum_pts_unit { - struct peer *peer; /* peer used by xntp */ - struct refclockio io; /* io structure used by xntp */ - int PTS_fd; /* file descriptor for PTS */ - int PTS_START; /* ? */ - u_int unit; /* id for unit */ - U_LONG timestarted; /* time started */ - int inuse; /* in use flag */ - l_fp lastrec; - l_fp lastref; - int yearstart; - int coderecv; - int day; /* day */ - int hour; /* hour */ - int minute; /* minutes */ - int second; /* seconds */ - int msec; /* miliseconds */ - int usec; /* miliseconds */ - u_char leap; - char retbuf[8]; /* returned time from the datum pts */ - char nbytes; /* number of bytes received from datum pts */ - double sigma2; /* average squared error (roughly) */ -}; - - -/* */ -/*...... pts static constant variables for internal use ................*/ -/* */ - -static char STOP_GENERATOR[6]; -static char START_GENERATOR[6]; -static char TIME_REQUEST[6]; - -static int nunits; -static struct datum_pts_unit **datum_pts_unit; -static u_char stratumtouse[MAXUNITS]; -static l_fp fudgefactor[MAXUNITS]; - -static FILE *logfile; - -/* */ -/*...... callback functions that xntp knows about ......................*/ -/* */ - -static int datum_pts_start P((u_int, struct peer *)); -static void datum_pts_shutdown P((int)); -static void datum_pts_poll P((int, struct peer *)); -static void datum_pts_control P((u_int, struct refclockstat *, - struct refclockstat *)); -static void datum_pts_init P((void)); -static void datum_pts_buginfo P((int, struct refclockbug *)); - -struct refclock refclock_datum = { - datum_pts_start, - datum_pts_shutdown, - datum_pts_poll, - datum_pts_control, - datum_pts_init, - datum_pts_buginfo, - NOFLAGS -}; - -/* -struct refclock refclock_wvvb = { - datum_pts_start, - datum_pts_shutdown, - datum_pts_poll, - datum_pts_control, - datum_pts_init, - datum_pts_buginfo, - NOFLAGS -}; -*/ - -/* */ -/*...... receive callback functions for xntp ..........................*/ -/* */ - -static void datum_pts_receive P((struct recvbuf *)); - - -/*......................................................................*/ -/* datum_pts_start */ -/*......................................................................*/ - -static int datum_pts_start(unit, peer) - u_int unit; - struct peer *peer; -{ - struct datum_pts_unit **temp_datum_pts_unit; - struct datum_pts_unit *datum_pts; - struct termios arg; - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile, "Starting Datum PTS unit %d\n", unit); - fflush(logfile); -#endif - -/* */ -/*...... create the memory for the new unit ............................*/ -/* */ - - temp_datum_pts_unit = (struct datum_pts_unit **) - malloc((nunits+1)*sizeof(struct datum_pts_unit *)); - if (nunits > 0) memcpy(temp_datum_pts_unit, datum_pts_unit, - nunits*sizeof(struct datum_pts_unit *)); - free(datum_pts_unit); - datum_pts_unit = temp_datum_pts_unit; - datum_pts_unit[nunits] = (struct datum_pts_unit *) - malloc(sizeof(struct datum_pts_unit)); - datum_pts = datum_pts_unit[nunits]; - - datum_pts->unit = unit; - datum_pts->yearstart = 0; - datum_pts->sigma2 = 0.0; - -/* */ -/*...... open the datum pts device .....................................*/ -/* */ - - datum_pts->PTS_fd = open("/dev/ttya",O_RDWR); - - fcntl(datum_pts->PTS_fd, F_SETFL, 0); - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Opening RS232 port ttya with file descriptor %d\n", - datum_pts->PTS_fd); - fflush(logfile); -#endif - -/* */ -/*...... set up the RS232 terminal device information ..................*/ -/* */ - - arg.c_iflag = IGNBRK; - arg.c_oflag = 0; - arg.c_cflag = B9600 | CS8 | CREAD | PARENB | CLOCAL; - arg.c_lflag = 0; - arg.c_line = 0; - arg.c_cc[VMIN] = 0; /* start timeout timer right away */ - arg.c_cc[VTIME] = 30; /* this is a 3 second timout on reads */ - - tcsetattr(datum_pts->PTS_fd, TCSANOW, &arg); - -/* */ -/*...... initialize the io structure ...................................*/ -/* */ - - datum_pts->peer = peer; - datum_pts->timestarted = current_time; - - datum_pts->io.clock_recv = datum_pts_receive; - datum_pts->io.srcclock = (caddr_t)datum_pts; - datum_pts->io.datalen = 0; - datum_pts->io.fd = datum_pts->PTS_fd; - - if (!io_addclock(&(datum_pts->io))) { -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Problem adding clock\n"); - fflush(logfile); -#endif - syslog(LOG_ERR, "Datum_PTS: Problem adding clock"); - } - - peer->precision = PTSPRECISION; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - -/* */ -/*...... now add one to the number of units ............................*/ -/* */ - - nunits++; - -/* */ -/*...... return successful code ........................................*/ -/* */ - - return 1; - -} - - -/*......................................................................*/ -/* datum_pts_shutdown */ -/*......................................................................*/ - -static void datum_pts_shutdown(unit) - int unit; -{ - int i,j; - struct datum_pts_unit **temp_datum_pts_unit; - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Shutdown Datum PTS\n"); - fflush(logfile); -#endif - syslog(LOG_ERR, "Datum_PTS: Shutdown Datum PTS"); - -/* */ -/*...... loop until the right unit is found ............................*/ -/* */ - - for (i=0; i<nunits; i++) { - if (datum_pts_unit[i]->unit == unit) { - -/* */ -/*...... found it so close the file descriptor and free up memory .....*/ -/* */ - - io_closeclock(&datum_pts_unit[i]->io); - close(datum_pts_unit[i]->PTS_fd); - free(datum_pts_unit[i]); - -/* */ -/*...... clean up the datum_pts_unit array (no holes) ..................*/ -/* */ - - if (nunits > 1) { - - temp_datum_pts_unit = (struct datum_pts_unit **) - malloc((nunits-1)*sizeof(struct datum_pts_unit *)); - if (i!= 0) memcpy(temp_datum_pts_unit, datum_pts_unit, - i*sizeof(struct datum_pts_unit *)); - - for (j=i+1; j<nunits; j++) { - temp_datum_pts_unit[j-1] = datum_pts_unit[j]; - } - - free(datum_pts_unit); - datum_pts_unit = temp_datum_pts_unit; - - }else{ - - free(datum_pts_unit); - datum_pts_unit = NULL; - - } - - return; - - } - } - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Error, could not shut down unit %d\n",unit); - fflush(logfile); -#endif - syslog(LOG_ERR, "Datum_PTS: Could not shut down Datum PTS unit %d",unit); - -} - - -/*......................................................................*/ -/* datum_pts_poll */ -/*......................................................................*/ - -static void datum_pts_poll(unit, peer) - int unit; - struct peer *peer; -{ - int i; - int index; - int error_code; - l_fp tstmp; - struct datum_pts_unit *datum_pts; - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Poll Datum PTS\n"); - fflush(logfile); -#endif - -/* */ -/*...... find the unit and send out a time request .....................*/ -/* */ - - index = -1; - for (i=0; i<nunits; i++) { - if (datum_pts_unit[i]->unit == unit) { - index = i; - datum_pts = datum_pts_unit[i]; - error_code = write(datum_pts->PTS_fd, TIME_REQUEST, 6); - if (error_code != 6) perror("TIME_REQUEST"); - datum_pts->nbytes = 0; - break; - } - } - - if (index == -1) { -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Error, could not poll unit %d\n",unit); - fflush(logfile); -#endif - syslog(LOG_ERR, "Datum_PTS: Could not poll unit %d",unit); - return; - } - -} - - -/*......................................................................*/ -/* datum_pts_control */ -/*......................................................................*/ - -static void datum_pts_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Control Datum PTS\n"); - fflush(logfile); -#endif -} - - -/*......................................................................*/ -/* datum_pts_init */ -/*......................................................................*/ - -static void datum_pts_init() -{ - -#ifdef DEBUG_DATUM_PTC - logfile = fopen("xntpd.log", "w"); - fprintf(logfile,"Init Datum PTS\n"); - fflush(logfile); -#endif - - memcpy(START_GENERATOR, "//kk01",6); - memcpy(STOP_GENERATOR, "//kk00",6); - memcpy(TIME_REQUEST, "//k/mn",6); - - datum_pts_unit = NULL; - nunits = 0; -} - - -/*......................................................................*/ -/* datum_pts_buginfo */ -/*......................................................................*/ - -static void datum_pts_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Buginfo Datum PTS\n"); - fflush(logfile); -#endif -} - - -/*......................................................................*/ -/* datum_pts_receive */ -/*......................................................................*/ - -static void datum_pts_receive(rbufp) - struct recvbuf *rbufp; -{ - int i; - l_fp tstmp, trtmp, tstmp1; - struct datum_pts_unit *datum_pts; - char *dpt; - int dpend; - time_t tim; - struct tm *loctm; - int tzoff; - int timerr; - double ftimerr, abserr; - - datum_pts = (struct datum_pts_unit *)rbufp->recv_srcclock; - dpt = (char *)&rbufp->recv_space; - dpend = rbufp->recv_length; - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Receive Datum PTS: %d bytes\n", dpend); - fflush(logfile); -#endif - - for (i=0; i<dpend; i++) { - datum_pts->retbuf[datum_pts->nbytes+i] = dpt[i]; - } - datum_pts->nbytes += dpend; - - if (datum_pts->nbytes != 7) { - return; - } - - -/* */ -/*...... save the ntp system time ......................................*/ -/* */ - - trtmp = rbufp->recv_time; - datum_pts->lastrec = trtmp; - -/* */ -/*...... convert the time from the buffer ..............................*/ -/* */ - - datum_pts->day = 100*(datum_pts->retbuf[0] & 0x0f) + - 10*((datum_pts->retbuf[1] & 0xf0)>>4) + - (datum_pts->retbuf[1] & 0x0f); - - datum_pts->hour = 10*((datum_pts->retbuf[2] & 0x30)>>4) + - (datum_pts->retbuf[2] & 0x0f); - - datum_pts->minute = 10*((datum_pts->retbuf[3] & 0x70)>>4) + - (datum_pts->retbuf[3] & 0x0f); - - datum_pts->second = 10*((datum_pts->retbuf[4] & 0x70)>>4) + - (datum_pts->retbuf[4] & 0x0f); - - datum_pts->msec = 100*((datum_pts->retbuf[5] & 0xf0) >> 4) + - 10*(datum_pts->retbuf[5] & 0x0f) + - ((datum_pts->retbuf[6] & 0xf0)>>4); - - datum_pts->usec = 1000*datum_pts->msec; - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"day %d, hour %d, minute %d, second %d, msec %d\n", - datum_pts->day, - datum_pts->hour, - datum_pts->minute, - datum_pts->second, - datum_pts->msec); - fflush(logfile); -#endif - -/* */ -/*...... get the GMT time zone offset ..................................*/ -/* */ - - tim = trtmp.l_ui - JAN_1970; - loctm = localtime(&tim); - tzoff = -loctm->tm_gmtoff/3600; - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Time Zone = %d, time (sec) since 1970 = %d\n",tzoff, tim); - fflush(logfile); -#endif - -/* */ -/*...... make sure that we have a good time from the Datum PTS .........*/ -/* */ - - if (!clocktime( datum_pts->day, - datum_pts->hour, - datum_pts->minute, - datum_pts->second, - tzoff, - datum_pts->lastrec.l_ui, - &datum_pts->yearstart, - &datum_pts->lastref.l_ui) ) { - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Error: bad clocktime\n"); - fprintf(logfile,"GMT %d, lastrec %d, yearstart %d, lastref %d\n", - tzoff, - datum_pts->lastrec.l_ui, - datum_pts->yearstart, - datum_pts->lastref.l_ui); - fflush(logfile); -#endif - syslog(LOG_ERR, "Datum_PTS: Bad clocktime"); - - return; - - }else{ - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Good clocktime\n"); - fflush(logfile); -#endif - - } - -/* */ -/*...... we have datum_pts->lastref.l_ui set, get useconds now .........*/ -/* */ - - TVUTOTSF(datum_pts->usec, datum_pts->lastref.l_uf); - -/* */ -/*...... pass the new time to xntpd ....................................*/ -/* */ - - tstmp = datum_pts->lastref; - L_SUB(&tstmp, &datum_pts->lastrec); /* tstmp is the time correction */ - datum_pts->coderecv++; - -/* - set_logfile(logfile); -*/ - - refclock_receive( datum_pts->peer, - &tstmp, - tzoff, - 0, - &datum_pts->lastrec, - &datum_pts->lastrec, - datum_pts->leap ); - timerr = tstmp.l_ui<<20; - timerr |= (tstmp.l_uf>>12) & 0x000fffff; - ftimerr = timerr; - ftimerr /= 1024*1024; - abserr = ftimerr; - if (ftimerr < 0.0) abserr = -ftimerr; - - if (datum_pts->sigma2 == 0.0) { - if (abserr < DATUM_MAX_ERROR) { - datum_pts->sigma2 = abserr*abserr; - }else{ - datum_pts->sigma2 = DATUM_MAX_ERROR2; - } - }else{ - if (abserr < DATUM_MAX_ERROR) { - datum_pts->sigma2 = 0.95*datum_pts->sigma2 + 0.05*abserr*abserr; - }else{ - datum_pts->sigma2 = 0.95*datum_pts->sigma2 + 0.05*DATUM_MAX_ERROR2; - } - } - -#ifdef DEBUG_DATUM_PTC - fprintf(logfile,"Time error = %f seconds, Sigma Squared = %f\n", - ftimerr, datum_pts->sigma2); - fflush(logfile); -#endif - -/* */ -/*...... make sure that we understand the format for xntp time .........*/ -/* */ - -#ifdef DEBUG_DATUM_PTC - tstmp.l_ui = 2; - TVUTOTSF(123456, tstmp.l_uf); - - timerr = tstmp.l_ui<<20; - timerr |= (tstmp.l_uf>>12) & 0x000fffff; - ftimerr = timerr; - ftimerr /= 1024*1024; - fprintf(logfile,"Test1 2.123456 = %f\n",ftimerr); - fflush(logfile); - - tstmp1.l_ui = 3; - TVUTOTSF(223456, tstmp1.l_uf); - timerr = tstmp1.l_ui<<20; - timerr |= (tstmp1.l_uf>>12) & 0x000fffff; - ftimerr = timerr; - ftimerr /= 1024*1024; - fprintf(logfile,"Test2 3.223456 = %f\n",ftimerr); - fflush(logfile); - - L_SUB(&tstmp, &tstmp1); - timerr = tstmp.l_ui<<20; - timerr |= (tstmp.l_uf>>12) & 0x000fffff; - ftimerr = timerr; - ftimerr /= 1024*1024; - fprintf(logfile,"Test3 -1.100000 = %f\n",ftimerr); - fflush(logfile); -#endif - - -} -#endif diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_gpstm.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_gpstm.c deleted file mode 100644 index 2e81e52..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_gpstm.c +++ /dev/null @@ -1,998 +0,0 @@ -/* - * refclock_gpstm - clock driver for the Kinimetrics Truetime GPSTM/TMD rcvr - * Version 1.0 (from Version 2.0 of the GOES driver, as of 03Jan94) - */ - -#if defined(REFCLOCK) && (defined(GPSTM) || defined(GPSTMCLK) \ - || defined(GPSTMPPS)) - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" - -#ifdef SYS_BSDI -#undef HAVE_BSD_TTYS -#include <sys/ioctl.h> -#endif - -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ - -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ - -#if defined(HAVE_TERMIOS) -#include <termios.h> -#endif - -#if defined(STREAM) -#include <stropts.h> -#if defined(GPSTMCLK) -#include <clkdefs.h> -#endif /* GPSTMCLK */ -#endif /* STREAM */ - -#if defined(GPSTMPPS) -#include <sys/ppsclock.h> -#endif /* GPSTMPPS */ - -#include "ntp_stdlib.h" - -/* - * Support for Kinemetrics Truetime GPS-TM/TMD Receiver - * - * Most of this code is copied from refclock_goes.c with thanks. - * - * the time code looks like follows: - * - * ADDD:HH:MM:SSQCL - * A - control A - * Q Quality indication: indicates possible error of - * ? +/- 500 milliseconds # +/- 50 milliseconds - * * +/- 5 milliseconds . +/- 1 millisecond - * space less than 1 millisecond - * C - Carriage return - * L - Line feed - * The carriage return start bit begins on 0 seconds and extends to 1 bit time. - * - * Flag1 set to 1 will silence the clock side of xntpd, just reading the - * clock without trying to write to it. This is usefull if several - * xntpds listen to the same clock. This has not been tested yet... - */ - -/* - * Definitions - */ -#define MAXUNITS 4 /* max number of GPSTM units */ -#define GPSTM232 "/dev/gpstm%d" -#define SPEED232 B9600 /* 9600 baud */ - -/* - * Radio interface parameters - */ -#define MAXDISPERSE (FP_SECOND>>1) /* max error for synchronized clock (0.5 s as an u_fp) */ -#define PRECISION (-20) /* precision assumed (about 1 ms) */ -#define REFID "GPS\0" /* reference id */ -#define DESCRIPTION "Kinemetrics GPS-TM/TMD Receiver" /* who we are */ -#define GMT 0 /* hour offset from Greenwich */ -#define NCODES 3 /* stages of median filter */ -#define BMAX 99 /* timecode buffer length */ -#define CODEDIFF 0x20000000 /* 0.125 seconds as an l_fp fraction */ -#define TIMEOUT 180 /* ping the clock if it's silent this long */ - -/* - * used by the state machine - */ -enum gpstm_event {e_Init, e_F18, e_F50, e_F51, e_TS}; -static enum {Base, Start, F18, F50, F51, F08} State[MAXUNITS]; -static time_t Last[MAXUNITS]; -static void gpstm_doevent P((int, enum gpstm_event)); -static void gpstm_initstate P((int)); - -/* - * Hack to avoid excercising the multiplier. I have no pride. - */ -#define MULBY10(x) (((x)<<3) + ((x)<<1)) - -/* - * Imported from the timer module - */ -extern U_LONG current_time; -extern struct event timerqueue[]; - -/* - * Imported from ntp_loopfilter module - */ -extern int fdpps; /* pps file descriptor */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * GPSTM unit control structure - */ -struct gpstm_unit { - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - l_fp lastrec; /* last receive time */ - l_fp lastref; /* last timecode time */ - l_fp offset[NCODES]; /* recent sample offsets */ - char lastcode[BMAX]; /* last timecode received */ - u_short polled; /* Hand in a time sample? */ - u_char lencode; /* length of last timecode */ - U_LONG lasttime; /* last time clock heard from */ - u_char unit; /* unit number for this guy */ - u_char status; /* clock status */ - u_char lastevent; /* last clock event */ - u_char reason; /* reason for last abort */ - u_char year; /* year of eternity */ - u_short day; /* day of year */ - u_char hour; /* hour of day */ - u_char minute; /* minute of hour */ - u_char second; /* seconds of minute */ - u_char leap; /* leap indicators */ - u_short msec; /* millisecond of second */ - u_char quality; /* quality character */ - U_LONG yearstart; /* start of current year */ - /* - * Status tallies - */ - U_LONG polls; /* polls sent */ - U_LONG noreply; /* no replies to polls */ - U_LONG coderecv; /* timecodes received */ - U_LONG badformat; /* bad format */ - U_LONG baddata; /* bad data */ - U_LONG timestarted; /* time we started this */ -}; - -/* - * Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. - */ -static struct gpstm_unit *gpstm_units[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; - -/* - * Keep the fudge factors separately so they can be set even - * when no clock is configured. - */ -static l_fp fudgefactor1[MAXUNITS]; -static l_fp fudgefactor2[MAXUNITS]; -static u_char stratumtouse[MAXUNITS]; -static u_char readonlyclockflag[MAXUNITS]; -static U_LONG refid[MAXUNITS]; - -/* - * Function prototypes - */ -static void gpstm_init P((void)); -static int gpstm_start P((u_int, struct peer *)); -static void gpstm_shutdown P((int)); -static void gpstm_rep_event P((struct gpstm_unit *, int)); -static void gpstm_receive P((struct recvbuf *)); -static char gpstm_process P((struct gpstm_unit *, l_fp *, u_fp *)); -static void gpstm_poll P((int, struct peer *)); -static void gpstm_control P((u_int, struct refclockstat *, - struct refclockstat *)); -static void gpstm_buginfo P((int, struct refclockbug *)); -static void gpstm_send P((struct gpstm_unit *, char *)); - -struct refclock refclock_gpstm = { - gpstm_start, gpstm_shutdown, gpstm_poll, - gpstm_control, gpstm_init, gpstm_buginfo, NOFLAGS -}; - -/* - * gpstm_init - initialize internal driver data - */ -static void -gpstm_init() -{ - register int i; - /* - * Just zero the data arrays - */ - memset((char *)gpstm_units, 0, sizeof gpstm_units); - memset((char *)unitinuse, 0, sizeof unitinuse); - - /* - * Initialize fudge factors to default. - */ - for (i = 0; i < MAXUNITS; i++) { - fudgefactor1[i].l_ui = 0; - fudgefactor1[i].l_uf = 0; - fudgefactor2[i].l_ui = 0; - fudgefactor2[i].l_uf = 0; - stratumtouse[i] = 0; - readonlyclockflag[i] = 0; - memcpy((char *)&refid[i], REFID, 4); - } -} - - -/* - * gpstm_start - open the device and initialize data for processing - */ -static int -gpstm_start(unit, peer) - u_int unit; - struct peer *peer; -{ - register struct gpstm_unit *gpstm; - register int i; - int fd232; - char dev[20]; - - /* - * Check configuration info - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_start: unit %d invalid", unit); - return 0; - } - if (unitinuse[unit]) { - syslog(LOG_ERR, "gpstm_start: unit %d in use", unit); - return 0; - } - - /* - * Open serial port - */ - (void) sprintf(dev, GPSTM232, unit); - fd232 = open(dev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, "gpstm_start: open of %s: %m", dev); - return 0; - } - -#if defined(HAVE_SYSV_TTYS) - /* - * System V serial line parameters (termio interface) - * - */ - { struct termio ttyb; - if (ioctl(fd232, TCGETA, &ttyb) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TCGETA): %m", dev); - goto screwed; - } - ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyb.c_oflag = 0; - ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyb.c_lflag = ICANON; - ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0'; - if (ioctl(fd232, TCSETA, &ttyb) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TCSETA): %m", dev); - goto screwed; - } - } -#endif /* HAVE_SYSV_TTYS */ -#if defined(HAVE_TERMIOS) - /* - * POSIX serial line parameters (termios interface) - * - * The GPSTMCLK option provides timestamping at the driver level. - * It requires the tty_clk streams module. - * - * The GPSTMPPS option provides timestamping at the driver level. - * It uses a 1-pps signal and level converter (gadget box) and - * requires the ppsclock streams module and SunOS 4.1.1 or - * later. - */ - { struct termios ttyb, *ttyp; - ttyp = &ttyb; - - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, - "gpstm_start: tcgetattr(%s): %m", dev); - goto screwed; - } - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_oflag = 0; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, - "gpstm_start: tcsetattr(%s): %m", dev); - goto screwed; - } - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, - "gpstm_start: tcflush(%s): %m", dev); - goto screwed; - } -#if defined(STREAM) -#if defined(GPSTMCLK) - if (ioctl(fd232, I_PUSH, "clk") < 0) - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, I_PUSH, clk): %m", dev); - if (ioctl(fd232, CLK_SETSTR, "\n") < 0) - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, CLK_SETSTR): %m", dev); -#endif /* GPSTMCLK */ -#if defined(GPSTMPPS) - if (ioctl(fd232, I_PUSH, "ppsclock") < 0) - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, I_PUSH, ppsclock): %m", dev); - else - fdpps = fd232; -#endif /* GPSTMPPS */ -#endif /* STREAM */ - } -#endif /* HAVE_TERMIOS */ -#if defined(HAVE_BSD_TTYS) - /* - * 4.3bsd serial line parameters (sgttyb interface) - * - * The GPSTMCLK option provides timestamping at the driver level. - * It requires the tty_clk line discipline and 4.3bsd or later. - */ - { struct sgttyb ttyb; -#if defined(GPSTMCLK) - int ldisc = CLKLDISC; -#endif /* GPSTMCLK */ - - if (ioctl(fd232, TIOCGETP, &ttyb) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TIOCGETP): %m", dev); - goto screwed; - } - ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232; -#if defined(GPSTMCLK) - ttyb.sg_erase = ttyb.sg_kill = '\r'; - ttyb.sg_flags = RAW; -#else - ttyb.sg_erase = ttyb.sg_kill = '\0'; - ttyb.sg_flags = EVENP|ODDP|CRMOD; -#endif /* GPSTMCLK */ - if (ioctl(fd232, TIOCSETP, &ttyb) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TIOCSETP): %m", dev); - goto screwed; - } -#if defined(GPSTMCLK) - if (ioctl(fd232, TIOCSETD, &ldisc) < 0) { - syslog(LOG_ERR, - "gpstm_start: ioctl(%s, TIOCSETD): %m", dev); - goto screwed; - } -#endif /* GPSTMCLK */ - } -#endif /* HAVE_BSD_TTYS */ - - /* - * Allocate unit structure - */ - if (gpstm_units[unit] != 0) { - gpstm = gpstm_units[unit]; /* The one we want is okay */ - } else { - for (i = 0; i < MAXUNITS; i++) { - if (!unitinuse[i] && gpstm_units[i] != 0) - break; - } - if (i < MAXUNITS) { - /* - * Reclaim this one - */ - gpstm = gpstm_units[i]; - gpstm_units[i] = 0; - } else { - gpstm = (struct gpstm_unit *) - emalloc(sizeof(struct gpstm_unit)); - } - } - memset((char *)gpstm, 0, sizeof(struct gpstm_unit)); - gpstm_units[unit] = gpstm; - - /* - * Set up the structures - */ - gpstm->peer = peer; - gpstm->unit = (u_char)unit; - gpstm->timestarted = current_time; - - gpstm->io.clock_recv = gpstm_receive; - gpstm->io.srcclock = (caddr_t)gpstm; - gpstm->io.datalen = 0; - gpstm->io.fd = fd232; - if (!io_addclock(&gpstm->io)) { - goto screwed; - } - - /* - * All done. Initialize a few random peer variables, then - * return success. - */ - peer->precision = PRECISION; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - unitinuse[unit] = 1; - gpstm_initstate(unit); - return 1; - - /* - * Something broke; abandon ship - */ -screwed: - (void) close(fd232); - return 0; -} - -/* - * gpstm_shutdown - shut down a clock - */ -static void -gpstm_shutdown(unit) - int unit; -{ - register struct gpstm_unit *gpstm; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_shutdown: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "gpstm_shutdown: unit %d not in use", unit); - return; - } - - /* - * Tell the I/O module to turn us off. We're history. - */ - gpstm = gpstm_units[unit]; - io_closeclock(&gpstm->io); - unitinuse[unit] = 0; -} - - -/* - * gpstm_rep_event - note the occurance of an event - */ -static void -gpstm_rep_event(gpstm, code) - struct gpstm_unit *gpstm; - int code; -{ - struct peer *peer; - - peer = gpstm->peer; - if (gpstm->status != (u_char)code) { - gpstm->status = (u_char)code; - if (code != CEVNT_NOMINAL) - gpstm->lastevent = (u_char)code; - syslog(LOG_INFO, - "clock %s event %x\n", ntoa(&peer->srcadr), code); -#ifdef DEBUG - if (debug) { - printf("gpstm_rep_event(gpstm%d, code %d)\n", - gpstm->unit, code); - } -#endif - } - if (code == CEVNT_BADREPLY) - gpstm_initstate(gpstm->unit); -} - - -/* - * gpstm_receive - receive data from the serial interface on a clock - */ -static void -gpstm_receive(rbufp) - struct recvbuf *rbufp; -{ - register int i; - register struct gpstm_unit *gpstm; - register u_char *dpt; - register char *cp; - register u_char *dpend; - l_fp tstmp; - u_fp dispersion; - - /* - * Get the clock this applies to and a pointers to the data - */ - gpstm = (struct gpstm_unit *)rbufp->recv_srcclock; - dpt = (u_char *)&rbufp->recv_space; - - /* - * Edit timecode to remove control chars - */ - dpend = dpt + rbufp->recv_length; - cp = gpstm->lastcode; - while (dpt < dpend) { - if ((*cp = 0x7f & *dpt++) >= ' ') cp++; -#ifdef GPSTMCLK - else if (*cp == '\r') { - if (dpend - dpt < 8) { - /* short timestamp */ - return; - } - if (!buftvtots(dpt,&gpstm->lastrec)) { - /* screwy timestamp */ - return; - } - dpt += 8; - } -#endif - } - *cp = '\0'; - gpstm->lencode = cp - gpstm->lastcode; - if (gpstm->lencode == 0) - return; -#ifndef GPSTMCLK - gpstm->lastrec = rbufp->recv_time; -#endif /* GPSTMCLK */ -#if !defined(GPSTMCLK) && !defined(GPSTMPPS) && defined(TIOCMODT) - do { - auto struct timeval cur, now; - register long usec; - - if (ioctl(gpstm->io.fd, TIOCMODT, &cur) < 0) { - syslog(LOG_ERR, "TIOCMODT: %m"); -#ifdef DEBUG - if (debug) perror("TIOCMODT"); - break; -#endif - } - if (cur.tv_sec == 0) { - /* no timestamps yet */ - if (debug) printf("MODT tv_sec == 0\n"); - break; - } - - gettimeofday(&now, NULL); - usec = 1000000 * (now.tv_sec - cur.tv_sec) - + (now.tv_usec - cur.tv_usec); -#ifdef DEBUG - if (debug) printf("lastmodem: delay=%d us\n", usec); -#endif - if (usec < 0 || usec > 10000) { - /* time warp or stale timestamp */ - break; - } - if (!buftvtots((char *)&cur, &gpstm->lastrec)) { - /* screwy timestamp */ - break; - } - } while (0); -#endif /*TIOCMODT*/ - -#ifdef DEBUG - if (debug) - printf("gpstm: timecode %d %s\n", - gpstm->lencode, gpstm->lastcode); -#endif - - cp = gpstm->lastcode; - gpstm->leap = 0; - if ((cp[0] == 'F' && isdigit(cp[1]) && isdigit(cp[2])) - || (cp[0] == ' ' && cp[1] == 'T' && cp[2] == 'R')) { - enum gpstm_event event; - - syslog(LOG_NOTICE, "gpstm%d: \"%s\"", gpstm->unit, cp); - if (cp[1] == '5' && cp[2] == '0') - event = e_F50; - else if (cp[1] == '5' && cp[2] == '1') - event = e_F51; - else if (!strncmp(" TRUETIME Mk III", cp, 16)) - event = e_F18; - else { - gpstm_rep_event(gpstm, CEVNT_BADREPLY); - return; - } - gpstm_doevent(gpstm->unit, event); - return; - } else if (gpstm->lencode == 13) { - /* - * Check timecode format 0 - */ - if (!isdigit(cp[0]) /* day of year */ - || !isdigit(cp[1]) - || !isdigit(cp[2]) - || cp[3] != ':' /* : separator */ - || !isdigit(cp[4]) /* hours */ - || !isdigit(cp[5]) - || cp[6] != ':' /* : separator */ - || !isdigit(cp[7]) /* minutes */ - || !isdigit(cp[8]) - || cp[9] != ':' /* : separator */ - || !isdigit(cp[10]) /* seconds */ - || !isdigit(cp[11])) - { - gpstm->badformat++; - gpstm_rep_event(gpstm, CEVNT_BADREPLY); - return; - } - - /* - * Convert format 0 and check values - */ - gpstm->year = 0; /* fake */ - gpstm->day = cp[0] - '0'; - gpstm->day = MULBY10(gpstm->day) + cp[1] - '0'; - gpstm->day = MULBY10(gpstm->day) + cp[2] - '0'; - gpstm->hour = MULBY10(cp[4] - '0') + cp[5] - '0'; - gpstm->minute = MULBY10(cp[7] - '0') + cp[8] - '0'; - gpstm->second = MULBY10(cp[10] - '0') + cp[11] - '0'; - gpstm->msec = 0; - - if (cp[12] != ' ' && cp[12] != '.' && cp[12] != '*') - gpstm->leap = LEAP_NOTINSYNC; - else - gpstm->lasttime = current_time; - - if (gpstm->day < 1 || gpstm->day > 366) { - gpstm->baddata++; - gpstm_rep_event(gpstm, CEVNT_BADDATE); - return; - } - if (gpstm->hour > 23 || gpstm->minute > 59 - || gpstm->second > 59) { - gpstm->baddata++; - gpstm_rep_event(gpstm, CEVNT_BADTIME); - return; - } - gpstm_doevent(gpstm->unit, e_TS); - } else { - gpstm_rep_event(gpstm, CEVNT_BADREPLY); - return; - } - - /* - * The clock will blurt a timecode every second but we only - * want one when polled. If we havn't been polled, bail out. - */ - if (!gpstm->polled) - return; - - /* - * Now, compute the reference time value. Use the heavy - * machinery for the seconds and the millisecond field for the - * fraction when present. - * - * this code does not yet know how to do the years - */ - tstmp = gpstm->lastrec; - if (!clocktime(gpstm->day, gpstm->hour, gpstm->minute, - gpstm->second, GMT, tstmp.l_ui, - &gpstm->yearstart, &gpstm->lastref.l_ui)) - { - gpstm->baddata++; - gpstm_rep_event(gpstm, CEVNT_BADTIME); - return; - } - MSUTOTSF(gpstm->msec, gpstm->lastref.l_uf); - - i = ((int)(gpstm->coderecv)) % NCODES; - gpstm->offset[i] = gpstm->lastref; - L_SUB(&gpstm->offset[i], &tstmp); - if (gpstm->coderecv == 0) - for (i = 1; i < NCODES; i++) - gpstm->offset[i] = gpstm->offset[0]; - - gpstm->coderecv++; - - /* - * Process the median filter, and pass the - * offset and dispersion along. We use lastrec as both the - * reference time and receive time in order to avoid being cute, - * like setting the reference time later than the receive time, - * which may cause a paranoid protocol module to chuck out the - * data. - */ - if (!gpstm_process(gpstm, &tstmp, &dispersion)) { - gpstm->baddata++; - gpstm_rep_event(gpstm, CEVNT_BADTIME); - return; - } - refclock_receive(gpstm->peer, &tstmp, GMT, dispersion, - &gpstm->lastrec, &gpstm->lastrec, gpstm->leap); - - /* - * We have succedded in answering the poll. Turn off the flag - */ - gpstm->polled = 0; -} - -/* - * gpstm_send - time to send the clock a signal to cough up a time sample - */ -static void -gpstm_send(gpstm, cmd) - struct gpstm_unit *gpstm; - char *cmd; -{ -#ifdef DEBUG - if (debug) { - printf("gpstm_send(gpstm%d): %s\n", gpstm->unit, cmd); - } -#endif - if (!readonlyclockflag[gpstm->unit]) { - register int len = strlen(cmd); - - if (write(gpstm->io.fd, cmd, len) != len) { - syslog(LOG_ERR, "gpstm_send: unit %d: %m", - gpstm->unit); - gpstm_rep_event(gpstm, CEVNT_FAULT); - } - } -} - -/* - * state machine for initializing the clock - */ - -static void -gpstm_doevent(unit, event) - int unit; - enum gpstm_event event; -{ - struct gpstm_unit *gpstm = gpstm_units[unit]; - -#ifdef DEBUG - if (debug) { - printf("gpstm_doevent(gpstm%d, %d)\n", unit, (int)event); - } -#endif - if (event == e_TS && State[unit] != F51 && State[unit] != F08) { - gpstm_send(gpstm, "\03\r"); - } - - switch (event) { - case e_Init: - gpstm_send(gpstm, "F18\r"); - State[unit] = Start; - break; - case e_F18: - gpstm_send(gpstm, "F50\r"); - State[unit] = F18; - break; - case e_F50: - gpstm_send(gpstm, "F51\r"); - State[unit] = F50; - break; - case e_F51: - gpstm_send(gpstm, "F08\r"); - State[unit] = F51; - break; - case e_TS: - /* nothing to send - we like this mode */ - State[unit] = F08; - break; - } -} - -static void -gpstm_initstate(unit) { - State[unit] = Base; /* just in case */ - gpstm_doevent(unit, e_Init); -} - -/* - * gpstm_process - process a pile of samples from the clock - */ -static char -gpstm_process(gpstm, offset, dispersion) - struct gpstm_unit *gpstm; - l_fp *offset; - u_fp *dispersion; -{ - register int i, j; - register U_LONG tmp_ui, tmp_uf; - int not_median1 = -1; /* XXX correct? */ - int not_median2 = -1; /* XXX correct? */ - int median; - u_fp disp_tmp, disp_tmp2; - - /* - * This code implements a three-stage median filter. First, we - * check if the samples are within 125 ms of each other. If not, - * dump the sample set. We take the median of the three offsets - * and use that as the sample offset. We take the maximum - * difference and use that as the sample dispersion. There - * probably is not much to be gained by a longer filter, since - * the clock filter in ntp_proto should do its thing. - */ - disp_tmp2 = 0; - for (i = 0; i < NCODES-1; i++) { - for (j = i+1; j < NCODES; j++) { - tmp_ui = gpstm->offset[i].l_ui; - tmp_uf = gpstm->offset[i].l_uf; - M_SUB(tmp_ui, tmp_uf, gpstm->offset[j].l_ui, - gpstm->offset[j].l_uf); - if (M_ISNEG(tmp_ui, tmp_uf)) { - M_NEG(tmp_ui, tmp_uf); - } - if (tmp_ui != 0 || tmp_uf > CODEDIFF) { - return 0; - } - disp_tmp = MFPTOFP(0, tmp_uf); - if (disp_tmp > disp_tmp2) { - disp_tmp2 = disp_tmp; - not_median1 = i; - not_median2 = j; - } - } - } - - /* - * It seems as if all are within 125 ms of each other. - * Now to determine the median of the three. Whlie the - * 125 ms check was going on, we also subtly catch the - * dispersion and set-up for a very easy median calculation. - * The largest difference between any two samples constitutes - * the dispersion. The sample not involve in the dispersion is - * the median sample. EASY! - */ - if (gpstm->lasttime == 0 || disp_tmp2 > MAXDISPERSE) - disp_tmp2 = MAXDISPERSE; - if (not_median1 == 0) { - if (not_median2 == 1) - median = 2; - else - median = 1; - } else { - median = 0; - } - *offset = gpstm->offset[median]; - *dispersion = disp_tmp2; - return 1; -} - -/* - * gpstm_poll - called by the transmit procedure - */ -static void -gpstm_poll(unit, peer) - int unit; - struct peer *peer; -{ - struct gpstm_unit *gpstm; - - /* - * You don't need to poll this clock. It puts out timecodes - * once per second. If asked for a timestamp, take note. - * The next time a timecode comes in, it will be fed back. - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_poll: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "gpstm_poll: unit %d not in use", unit); - return; - } - gpstm = gpstm_units[unit]; - if ((current_time - gpstm->lasttime) > 150) { - gpstm->noreply++; - gpstm_rep_event(gpstm_units[unit], CEVNT_TIMEOUT); - gpstm_initstate(gpstm->unit); - } - - /* - * polled every 64 seconds. Ask our receiver to hand in a timestamp. - */ - gpstm->polled = 1; - gpstm->polls++; -} - -/* - * gpstm_control - set fudge factors, return statistics - */ -static void -gpstm_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct gpstm_unit *gpstm; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_control: unit %d invalid", unit); - return; - } - - if (in != 0) { - if (in->haveflags & CLK_HAVETIME1) - fudgefactor1[unit] = in->fudgetime1; - if (in->haveflags & CLK_HAVETIME2) - fudgefactor2[unit] = in->fudgetime2; - if (in->haveflags & CLK_HAVEVAL1) - stratumtouse[unit] = (u_char)(in->fudgeval1); - if (in->haveflags & CLK_HAVEVAL2) - refid[unit] = in->fudgeval2; - if (in->haveflags & CLK_HAVEFLAG1) - readonlyclockflag[unit] = in->flags & CLK_FLAG1; - if (unitinuse[unit]) { - struct peer *peer; - - peer = gpstm_units[unit]->peer; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - } - } - - if (out != 0) { - memset((char *)out, 0, sizeof (struct refclockstat)); - out->type = REFCLK_GPSTM_TRUETIME; - out->haveflags = CLK_HAVETIME1 | CLK_HAVETIME2 | CLK_HAVEVAL1 | - CLK_HAVEVAL2 | CLK_HAVEFLAG1; - out->clockdesc = DESCRIPTION; - out->fudgetime1 = fudgefactor1[unit]; - out->fudgetime2 = fudgefactor2[unit]; - out->fudgeval1 = (LONG)stratumtouse[unit]; - out->fudgeval2 = refid[unit]; - out->flags = readonlyclockflag[unit]; - if (unitinuse[unit]) { - gpstm = gpstm_units[unit]; - out->lencode = gpstm->lencode; - out->lastcode = gpstm->lastcode; - out->timereset = current_time - gpstm->timestarted; - out->polls = gpstm->polls; - out->noresponse = gpstm->noreply; - out->badformat = gpstm->badformat; - out->baddata = gpstm->baddata; - out->lastevent = gpstm->lastevent; - out->currentstatus = gpstm->status; - } - } -} - -/* - * gpstm_buginfo - return clock dependent debugging info - */ -static void -gpstm_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ - register struct gpstm_unit *gpstm; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "gpstm_buginfo: unit %d invalid", unit); - return; - } - - if (!unitinuse[unit]) - return; - gpstm = gpstm_units[unit]; - - bug->nvalues = 11; - bug->ntimes = 5; - if (gpstm->lasttime != 0) - bug->values[0] = current_time - gpstm->lasttime; - else - bug->values[0] = 0; - bug->values[1] = (U_LONG)gpstm->reason; - bug->values[2] = (U_LONG)gpstm->year; - bug->values[3] = (U_LONG)gpstm->day; - bug->values[4] = (U_LONG)gpstm->hour; - bug->values[5] = (U_LONG)gpstm->minute; - bug->values[6] = (U_LONG)gpstm->second; - bug->values[7] = (U_LONG)gpstm->msec; - bug->values[8] = gpstm->noreply; - bug->values[9] = gpstm->yearstart; - bug->values[10] = gpstm->quality; - bug->stimes = 0x1c; - bug->times[0] = gpstm->lastref; - bug->times[1] = gpstm->lastrec; - bug->times[2] = gpstm->offset[0]; - bug->times[3] = gpstm->offset[1]; - bug->times[4] = gpstm->offset[2]; -} - -#endif /*GPSTM et al*/ diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_leitch.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_leitch.c deleted file mode 100644 index 808f65b..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_leitch.c +++ /dev/null @@ -1,709 +0,0 @@ -/* - * refclock_leitch - clock driver for the Leitch CSD-5300 Master Clock - */ -#if defined(REFCLOCK) && (defined(LEITCH) || defined(LEITCHCLK) || defined(LEITCHPPS)) - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" - -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ - -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ - -#if defined(HAVE_TERMIOS) -#include <termios.h> -#endif -#ifdef STREAM -#include <stropts.h> -#if defined(LEITCHCLK) -#include <sys/clkdefs.h> -#endif /* LEITCHCLK */ -#endif /* STREAM */ - -#if defined (LEITCHPPS) -#include <sys/ppsclock.h> -#endif /* LEITCHPPS */ - -#include "ntp_stdlib.h" - -/* - * Driver for Leitch CSD-5300 Master Clock System - * - * COMMANDS: - * DATE: D <CR> - * TIME: T <CR> - * STATUS: S <CR> - * LOOP: L <CR> - * - * FORMAT: - * DATE: YYMMDD<CR> - * TIME: <CR>/HHMMSS <CR>/HHMMSS <CR>/HHMMSS <CR>/ - * second bondaried on the stop bit of the <CR> - * second boundaries at '/' above. - * STATUS: G (good), D (diag fail), T (time not provided) or - * P (last phone update failed) - */ -#define MAXUNITS 1 /* max number of LEITCH units */ -#define LEITCHREFID "ATOM" /* reference id */ -#define LEITCH_DESCRIPTION "Leitch: CSD 5300 Master Clock System Driver" -#define LEITCH232 "/dev/leitch%d" /* name of radio device */ -#define SPEED232 B300 /* uart speed (300 baud) */ -#define leitch_send(A,M) \ - if (debug) fprintf(stderr,"write leitch %s\n",M); \ - if ((write(A->leitchio.fd,M,sizeof(M)) < 0)) {\ - if (debug) \ - fprintf(stderr, "leitch_send: unit %d send failed\n", A->unit); \ - else \ - syslog(LOG_ERR, "leitch_send: unit %d send failed %m",A->unit);} - -#define STATE_IDLE 0 -#define STATE_DATE 1 -#define STATE_TIME1 2 -#define STATE_TIME2 3 -#define STATE_TIME3 4 - -extern struct event timerqueue[]; - -/* - * Imported from ntp_loopfilter module - */ -extern int fdpps; /* pps file descriptor */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * LEITCH unit control structure - */ -struct leitchunit { - struct peer *peer; - struct event leitchtimer; - struct refclockio leitchio; - u_char unit; - short year; - short yearday; - short month; - short day; - short hour; - short second; - short minute; - short state; - u_short fudge1; - l_fp reftime1; - l_fp reftime2; - l_fp reftime3; - l_fp codetime1; - l_fp codetime2; - l_fp codetime3; - U_LONG yearstart; -}; - -/* - * Function prototypes - */ -static void leitch_init P((void)); -static int leitch_start P((u_int, struct peer *)); -static void leitch_shutdown P((int)); -static void leitch_poll P((int, struct peer *)); -static void leitch_control P((u_int, struct refclockstat *, struct refclockstat *)); -#define leitch_buginfo noentry -static void leitch_receive P((struct recvbuf *)); -static void leitch_process P((struct leitchunit *)); -static void leitch_timeout P((struct peer *)); -static int leitch_get_date P((struct recvbuf *, struct leitchunit *)); -static int leitch_get_time P((struct recvbuf *, struct leitchunit *, int)); -static int dysize P((int)); - -static struct leitchunit leitchunits[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; -static u_char stratumtouse[MAXUNITS]; -static U_LONG refid[MAXUNITS]; - -static char days_in_month [] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - -/* - * Transfer vector - */ -struct refclock refclock_leitch = { - leitch_start, leitch_shutdown, leitch_poll, - leitch_control, leitch_init, leitch_buginfo, NOFLAGS -}; - -/* - * leitch_init - initialize internal leitch driver data - */ -static void -leitch_init() -{ - int i; - - memset((char*)leitchunits, 0, sizeof(leitchunits)); - memset((char*)unitinuse, 0, sizeof(unitinuse)); - for (i = 0; i < MAXUNITS; i++) - memcpy((char *)&refid[i], LEITCHREFID, 4); -} - -/* - * leitch_shutdown - shut down a LEITCH clock - */ -static void -leitch_shutdown(unit) -int unit; -{ -#ifdef DEBUG - if (debug) - fprintf(stderr, "leitch_shutdown()\n"); -#endif -} - -/* - * leitch_poll - called by the transmit procedure - */ -static void -leitch_poll(unit, peer) - int unit; - struct peer *peer; -{ - struct leitchunit *leitch; - - /* start the state machine rolling */ - -#ifdef DEBUG - if (debug) - fprintf(stderr, "leitch_poll()\n"); -#endif - if (unit > MAXUNITS) { - /* XXXX syslog it */ - return; - } - - leitch = &leitchunits[unit]; - - if (leitch->state != STATE_IDLE) { - /* reset and wait for next poll */ - /* XXXX syslog it */ - leitch->state = STATE_IDLE; - } else { - leitch_send(leitch,"D\r"); - leitch->state = STATE_DATE; - } -} - -static void -leitch_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, - "leitch_control: unit %d invalid", unit); - return; - } - - if (in) { - if (in->haveflags & CLK_HAVEVAL1) - stratumtouse[unit] = (u_char)(in->fudgeval1); - if (in->haveflags & CLK_HAVEVAL2) - refid[unit] = in->fudgeval2; - if (unitinuse[unit]) { - struct peer *peer; - - peer = (&leitchunits[unit])->peer; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - } - } - - if (out) { - memset((char *)out, 0, sizeof (struct refclockstat)); - out->type = REFCLK_ATOM_LEITCH; - out->haveflags = CLK_HAVEVAL1 | CLK_HAVEVAL2; - out->fudgeval1 = (LONG)stratumtouse[unit]; - out->fudgeval2 = refid[unit]; - out->lastcode = ""; - out->clockdesc = LEITCH_DESCRIPTION; - } -} - -/* - * leitch_start - open the LEITCH devices and initialize data for processing - */ -static int -leitch_start(unit, peer) - u_int unit; - struct peer *peer; -{ - struct leitchunit *leitch; - int fd232; - char leitchdev[20]; - - /* - * Check configuration info. - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "leitch_start: unit %d invalid", unit); - return (0); - } - - if (unitinuse[unit]) { - syslog(LOG_ERR, "leitch_start: unit %d in use", unit); - return (0); - } - - /* - * Open serial port. - */ - (void) sprintf(leitchdev, LEITCH232, unit); - fd232 = open(leitchdev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, - "leitch_start: open of %s: %m", leitchdev); - return (0); - } - - leitch = &leitchunits[unit]; - memset((char*)leitch, 0, sizeof(*leitch)); - -#if defined(HAVE_SYSV_TTYS) - /* - * System V serial line parameters (termio interface) - * - */ - { struct termio ttyb; - if (ioctl(fd232, TCGETA, &ttyb) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TCGETA): %m", leitchdev); - goto screwed; - } - ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyb.c_oflag = 0; - ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyb.c_lflag = ICANON; - ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0'; - if (ioctl(fd232, TCSETA, &ttyb) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TCSETA): %m", leitchdev); - goto screwed; - } - } -#endif /* HAVE_SYSV_TTYS */ -#if defined(HAVE_TERMIOS) - /* - * POSIX serial line parameters (termios interface) - * - * The LEITCHCLK option provides timestamping at the driver level. - * It requires the tty_clk streams module. - * - * The LEITCHPPS option provides timestamping at the driver level. - * It uses a 1-pps signal and level converter (gadget box) and - * requires the ppsclock streams module and SunOS 4.1.1 or - * later. - */ - { struct termios ttyb, *ttyp; - - ttyp = &ttyb; - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, - "leitch_start: tcgetattr(%s): %m", leitchdev); - goto screwed; - } - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_oflag = 0; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, - "leitch_start: tcsetattr(%s): %m", leitchdev); - goto screwed; - } - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, - "leitch_start: tcflush(%s): %m", leitchdev); - goto screwed; - } - } -#endif /* HAVE_TERMIOS */ -#ifdef STREAM -#if defined(LEITCHCLK) - if (ioctl(fd232, I_PUSH, "clk") < 0) - syslog(LOG_ERR, - "leitch_start: ioctl(%s, I_PUSH, clk): %m", leitchdev); - if (ioctl(fd232, CLK_SETSTR, "\n") < 0) - syslog(LOG_ERR, - "leitch_start: ioctl(%s, CLK_SETSTR): %m", leitchdev); -#endif /* LEITCHCLK */ -#if defined(LEITCHPPS) - if (ioctl(fd232, I_PUSH, "ppsclock") < 0) - syslog(LOG_ERR, - "leitch_start: ioctl(%s, I_PUSH, ppsclock): %m", leitchdev); - else - fdpps = fd232; -#endif /* LEITCHPPS */ -#endif /* STREAM */ -#if defined(HAVE_BSD_TTYS) - /* - * 4.3bsd serial line parameters (sgttyb interface) - * - * The LEITCHCLK option provides timestamping at the driver level. - * It requires the tty_clk line discipline and 4.3bsd or later. - */ - { struct sgttyb ttyb; -#if defined(LEITCHCLK) - int ldisc = CLKLDISC; -#endif /* LEITCHCLK */ - - if (ioctl(fd232, TIOCGETP, &ttyb) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TIOCGETP): %m", leitchdev); - goto screwed; - } - ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232; -#if defined(LEITCHCLK) - ttyb.sg_erase = ttyb.sg_kill = '\r'; - ttyb.sg_flags = RAW; -#else - ttyb.sg_erase = ttyb.sg_kill = '\0'; - ttyb.sg_flags = EVENP|ODDP|CRMOD; -#endif /* LEITCHCLK */ - if (ioctl(fd232, TIOCSETP, &ttyb) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TIOCSETP): %m", leitchdev); - goto screwed; - } -#if defined(LEITCHCLK) - if (ioctl(fd232, TIOCSETD, &ldisc) < 0) { - syslog(LOG_ERR, - "leitch_start: ioctl(%s, TIOCSETD): %m",leitchdev); - goto screwed; - } -#endif /* LEITCHCLK */ - } -#endif /* HAVE_BSD_TTYS */ - - /* - * Set up the structures - */ - leitch->peer = peer; - leitch->unit = unit; - leitch->state = STATE_IDLE; - leitch->fudge1 = 15; /* 15ms */ - - leitch->leitchio.clock_recv = leitch_receive; - leitch->leitchio.srcclock = (caddr_t) leitch; - leitch->leitchio.datalen = 0; - leitch->leitchio.fd = fd232; - if (!io_addclock(&leitch->leitchio)) { - goto screwed; - } - - /* - * All done. Initialize a few random peer variables, then - * return success. Note that root delay and root dispersion are - * always zero for this clock. - */ - peer->precision = 0; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - unitinuse[unit] = 1; - return(1); - - /* - * Something broke; abandon ship. - */ -screwed: - close(fd232); - return(0); -} - -/* - * leitch_receive - receive data from the serial interface on a leitch - * clock - */ -static void -leitch_receive(rbufp) - struct recvbuf *rbufp; -{ - struct leitchunit *leitch = (struct leitchunit *)rbufp->recv_srcclock; - -#ifdef DEBUG - if (debug) - fprintf(stderr, "leitch_recieve(%*.*s)\n", - rbufp->recv_length, rbufp->recv_length, - rbufp->recv_buffer); -#endif - if (rbufp->recv_length != 7) - return; /* The date is return with a trailing newline, - discard it. */ - - switch (leitch->state) { - case STATE_IDLE: /* unexpected, discard and resync */ - return; - case STATE_DATE: - if (!leitch_get_date(rbufp,leitch)) { - leitch->state = STATE_IDLE; - break; - } - leitch_send(leitch,"T\r"); -#ifdef DEBUG - if (debug) - fprintf(stderr, "%u\n",leitch->yearday); -#endif - leitch->state = STATE_TIME1; - break; - case STATE_TIME1: - if (!leitch_get_time(rbufp,leitch,1)) { - } - if (!clocktime(leitch->yearday,leitch->hour,leitch->minute, - leitch->second, 0, rbufp->recv_time.l_ui, - &leitch->yearstart, &leitch->reftime1.l_ui)) { - leitch->state = STATE_IDLE; - break; - } -#ifdef DEBUG - if (debug) - fprintf(stderr, "%u\n", leitch->reftime1.l_ui); -#endif - MSUTOTSF(leitch->fudge1, leitch->reftime1.l_uf); - leitch->codetime1 = rbufp->recv_time; - leitch->state = STATE_TIME2; - break; - case STATE_TIME2: - if (!leitch_get_time(rbufp,leitch,2)) { - } - if (!clocktime(leitch->yearday,leitch->hour,leitch->minute, - leitch->second, 0, rbufp->recv_time.l_ui, - &leitch->yearstart, &leitch->reftime2.l_ui)) { - leitch->state = STATE_IDLE; - break; - } -#ifdef DEBUG - if (debug) - fprintf(stderr, "%u\n", leitch->reftime2.l_ui); -#endif - MSUTOTSF(leitch->fudge1, leitch->reftime2.l_uf); - leitch->codetime2 = rbufp->recv_time; - leitch->state = STATE_TIME3; - break; - case STATE_TIME3: - if (!leitch_get_time(rbufp,leitch,3)) { - } - if (!clocktime(leitch->yearday,leitch->hour,leitch->minute, - leitch->second, 0, rbufp->recv_time.l_ui, - &leitch->yearstart, &leitch->reftime3.l_ui)) { - leitch->state = STATE_IDLE; - break; - } -#ifdef DEBUG - if (debug) - fprintf(stderr, "%u\n", leitch->reftime3.l_ui); -#endif - MSUTOTSF(leitch->fudge1, leitch->reftime3.l_uf); - leitch->codetime3 = rbufp->recv_time; - leitch_process(leitch); - leitch->state = STATE_IDLE; - break; - default: - syslog(LOG_ERR, - "leitech_receive: invalid state %d unit %d", - leitch->state, leitch->unit); - } -} - -/* - * leitch_process - process a pile of samples from the clock - * - * This routine uses a three-stage median filter to calculate offset and - * dispersion. reduce jitter. The dispersion is calculated as the span - * of the filter (max - min), unless the quality character (format 2) is - * non-blank, in which case the dispersion is calculated on the basis of - * the inherent tolerance of the internal radio oscillator, which is - * +-2e-5 according to the radio specifications. - */ -static void -leitch_process(leitch) - struct leitchunit *leitch; -{ - l_fp off; - s_fp delay; - l_fp codetime; - l_fp tmp_fp; - int isinsync = 1; - u_fp dispersion = 10; - - delay = 20; - - codetime = leitch->codetime3; - - off = leitch->reftime1; - L_SUB(&off,&leitch->codetime1); - -#ifdef DEBUG - if (debug) - fprintf(stderr,"%u %u %u %u %d %d\n", - leitch->codetime1.l_ui, leitch->codetime1.l_uf, - leitch->reftime1.l_ui, leitch->reftime1.l_uf, - off.l_ui, off.l_uf); -#endif - tmp_fp = leitch->reftime2; - L_SUB(&tmp_fp,&leitch->codetime2); - if (L_ISGEQ(&off,&tmp_fp)) - off = tmp_fp; -#ifdef DEBUG - if (debug) - fprintf(stderr,"%u %u %u %u %d %d\n", - leitch->codetime2.l_ui, leitch->codetime2.l_uf, - leitch->reftime2.l_ui, leitch->reftime2.l_uf, - off.l_ui, off.l_uf); -#endif - tmp_fp = leitch->reftime3; - L_SUB(&tmp_fp,&leitch->codetime3); - - if (L_ISGEQ(&off,&tmp_fp)) - off = tmp_fp; - -#ifdef DEBUG - if (debug) - fprintf(stderr,"%u %u %u %u %d %d\n", - leitch->codetime3.l_ui, leitch->codetime3.l_uf, - leitch->reftime3.l_ui, leitch->reftime3.l_uf, - off.l_ui, off.l_uf); -#endif - refclock_receive(leitch->peer, &off, 0, dispersion, &codetime, - &codetime, isinsync); -} - -/* - * leitch_timeout - */ -static void -leitch_timeout(fp) - struct peer *fp; -{ - -#ifdef DEBUG - if (debug) - fprintf(stderr, "leitch_timeout()\n"); -#endif - -#ifdef NOTYET - { struct leitchunit *leitch = (struct leitchunit *)fp; - - switch(leitch->state) { - case STATE_IDLE: - leitch_send(leitch,"D\r"); - leitch->state = STATE_DATE; - break; - case STATE_DATE: - leitch_send(leitch,"T\r"); - leitch->state = STATE_TIME1; - break; - case STATE_TIME1: - case STATE_TIME2: - case STATE_TIME3: - default: - break; - } - - leitch->leitchtimer.event_time += 30; - TIMER_ENQUEUE(timerqueue, &leitch->leitchtimer); - } -#endif /* NOTYET */ -} - -/* - * dysize - */ -static int -dysize(year) -int year; -{ - if (year%4) { /* not a potential leap year */ - return (365); - } else { - if (year % 100) { /* is a leap year */ - return (366); - } else { - if (year % 400) { - return (365); - } else { - return (366); - } - } - } -} - -static int -leitch_get_date(rbufp,leitch) - struct recvbuf *rbufp; - struct leitchunit *leitch; -{ - int i; - - if (rbufp->recv_length < 6) - return(0); -#define BAD(A) (rbufp->recv_buffer[A] < '0') || (rbufp->recv_buffer[A] > '9') - if (BAD(0)||BAD(1)||BAD(2)||BAD(3)||BAD(4)||BAD(5)) - return(0); -#define ATOB(A) ((rbufp->recv_buffer[A])-'0') - leitch->year = ATOB(0)*10 + ATOB(1); - leitch->month = ATOB(2)*10 + ATOB(3); - leitch->day = ATOB(4)*10 + ATOB(5); - - /* sanity checks */ - if (leitch->month > 12) - return(0); - if (leitch->day > days_in_month[leitch->month-1]) - return(0); - - /* calculate yearday */ - i = 0; - leitch->yearday = leitch->day; - - while ( i < (leitch->month-1) ) - leitch->yearday += days_in_month[i++]; - - if ((dysize((leitch->year>90?1900:2000)+leitch->year)==365) && - leitch->month > 2) - leitch->yearday--; - - return(1); -} - -/* - * leitch_get_time - */ -static int -leitch_get_time(rbufp,leitch,which) - struct recvbuf *rbufp; - struct leitchunit *leitch; - int which; -{ - if (BAD(0)||BAD(1)||BAD(2)||BAD(3)||BAD(4)||BAD(5)) - return(0); - leitch->hour = ATOB(0)*10 +ATOB(1); - leitch->minute = ATOB(2)*10 +ATOB(3); - leitch->second = ATOB(4)*10 +ATOB(5); - - if ((leitch->hour > 23) || (leitch->minute > 60) || - (leitch->second > 60)) - return(0); - return(1); -} - -#endif diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_msfees.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_msfees.c deleted file mode 100644 index 255d74f..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_msfees.c +++ /dev/null @@ -1,1575 +0,0 @@ -/* refclock_ees - clock driver for the EES M201 receiver */ - -#if defined(REFCLOCK) && defined(MSFEESPPS) && defined(STREAM) - -/* Currently REQUIRES STREAM and PPSCD. CLK and CBREAK modes - * were removed as the code was overly hairy, they weren't in use - * (hence probably didn't work). Still in RCS file at cl.cam.ac.uk - */ - -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" -#include "ntp_calendar.h" -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ -#include <termios.h> -#include <stropts.h> -#include <sys/ppsclock.h> -#include "ntp_stdlib.h" - - /* - fudgefactor = fudgetime1; - os_delay = fudgetime2; - offset_fudge = os_delay + fudgefactor + inherent_delay; - stratumtouse = fudgeval1 & 0xf - debug = fudgeval2; - sloppyclockflag = flags & CLK_FLAG1; - 1 log smoothing summary when processing sample - 4 dump the buffer from the clock - 8 EIOGETKD the last n uS time stamps - if (flags & CLK_FLAG2 && unitinuse) ees->leaphold = 0; - ees->dump_vals = flags & CLK_FLAG3; - ees->usealldata = flags & CLK_FLAG4; - - - bug->values[0] = (ees->lasttime) ? current_time - ees->lasttime : 0; - bug->values[1] = (ees->clocklastgood)?current_time-ees->clocklastgood:0; - bug->values[2] = (u_long)ees->status; - bug->values[3] = (u_long)ees->lastevent; - bug->values[4] = (u_long)ees->reason; - bug->values[5] = (u_long)ees->nsamples; - bug->values[6] = (u_long)ees->codestate; - bug->values[7] = (u_long)ees->day; - bug->values[8] = (u_long)ees->hour; - bug->values[9] = (u_long)ees->minute; - bug->values[10] = (u_long)ees->second; - bug->values[11] = (u_long)ees->tz; - bug->values[12] = ees->yearstart; - bug->values[13] = (ees->leaphold > current_time) ? - ees->leaphold - current_time : 0; - bug->values[14] = inherent_delay[unit].l_uf; - bug->values[15] = offset_fudge[unit].l_uf; - - bug->times[0] = ees->reftime; - bug->times[1] = ees->arrvtime; - bug->times[2] = ees->lastsampletime; - bug->times[3] = ees->offset; - bug->times[4] = ees->lowoffset; - bug->times[5] = ees->highoffset; - bug->times[6] = inherent_delay[unit]; - bug->times[8] = os_delay[unit]; - bug->times[7] = fudgefactor[unit]; - bug->times[9] = offset_fudge[unit]; - bug->times[10]= ees->yearstart, 0; - */ - -/* This should support the use of an EES M201 receiver with RS232 - * output (modified to transmit time once per second). - * - * For the format of the message sent by the clock, see the EESM_ - * definitions below. - * - * It appears to run free for an integral number of minutes, until the error - * reaches 4mS, at which point it steps at second = 01. - * It appears that sometimes it steps 4mS (say at 7 min interval), - * then the next minute it decides that it was an error, so steps back. - * On the next minute it steps forward again :-( - * This is typically 16.5uS/S then 3975uS at the 4min re-sync, - * or 9.5uS/S then 3990.5uS at a 7min re-sync, - * at which point it may loose the "00" second time stamp. - * I assume that the most accurate time is just AFTER the re-sync. - * Hence remember the last cycle interval, - * - * Can run in any one of: - * - * PPSCD PPS signal sets CD which interupts, and grabs the current TOD - * (sun) *in the interupt code*, so as to avoid problems with - * the STREAMS scheduling. - * - * It appears that it goes 16.5 uS slow each second, then every 4 mins it - * generates no "00" second tick, and gains 3975 uS. Ho Hum ! (93/2/7) - */ - -/* Definitions */ -#ifndef MAXUNITS -#define MAXUNITS 4 /* maximum number of EES units permitted */ -#endif - -#ifndef EES232 -#define EES232 "/dev/ees%d" /* Device to open to read the data */ -#endif - -/* Other constant stuff */ -#ifndef EESPRECISION -#define EESPRECISION (-10) /* what the heck - 2**-10 = 1ms */ -#endif -#ifndef EESREFID -#define EESREFID "MSF\0" /* String to identify the clock */ -#endif -#ifndef EESHSREFID -#define EESHSREFID (0x7f7f0000 | ((REFCLK_MSF_EES) << 8)) /* Numeric refid */ -#endif - -/* Description of clock */ -#define EESDESCRIPTION "EES M201 MSF Receiver" - -/* Speed we run the clock port at. If this is changed the UARTDELAY - * value should be recomputed to suit. - */ -#ifndef SPEED232 -#define SPEED232 B9600 /* 9600 baud */ -#endif - -/* What is the inherent delay for this mode of working, i.e. when is the - * data time stamped. - */ -#define SAFETY_SHIFT 10 /* Split the shift to avoid overflow */ -#define BITS_TO_L_FP(bits, baud) \ - (((((bits)*2 +1) << (FRACTION_PREC-SAFETY_SHIFT)) / (2*baud)) << SAFETY_SHIFT) -#define INH_DELAY_CBREAK BITS_TO_L_FP(119, 9600) -#define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600) - -#ifndef STREAM_PP1 -#define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->" -#endif -#ifndef STREAM_PP2 -#define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->" -#endif - -/* Offsets of the bytes of the serial line code. The clock gives - * local time with a GMT/BST indication. The EESM_ definitions - * give offsets into ees->lastcode. - */ -#define EESM_CSEC 0 /* centiseconds - always zero in our clock */ -#define EESM_SEC 1 /* seconds in BCD */ -#define EESM_MIN 2 /* minutes in BCD */ -#define EESM_HOUR 3 /* hours in BCD */ -#define EESM_DAYWK 4 /* day of week (Sun = 0 etc) */ -#define EESM_DAY 5 /* day of month in BCD */ -#define EESM_MON 6 /* month in BCD */ -#define EESM_YEAR 7 /* year MOD 100 in BCD */ -#define EESM_LEAP 8 /* 0x0f if leap year, otherwise zero */ -#define EESM_BST 9 /* 0x03 if BST, 0x00 if GMT */ -#define EESM_MSFOK 10 /* 0x3f if radio good, otherwise zero */ - /* followed by a frame alignment byte (0xff) / - / which is not put into the lastcode buffer*/ - -/* Length of the serial time code, in characters. The first length - * is less the frame alignment byte. - */ -#define LENEESPRT (EESM_MSFOK+1) -#define LENEESCODE (LENEESPRT+1) - -/* Code state. */ -#define EESCS_WAIT 0 /* waiting for start of timecode */ -#define EESCS_GOTSOME 1 /* have an incomplete time code buffered */ - -/* Default fudge factor and character to receive */ -#define DEFFUDGETIME 0 /* Default user supplied fudge factor */ -#ifndef DEFOSTIME -#define DEFOSTIME 0 /* Default OS delay -- passed by Make ? */ -#endif -#define DEFINHTIME INH_DELAY_PPS /* inherent delay due to sample point*/ - -/* Limits on things. Reduce the number of samples to SAMPLEREDUCE by median - * elimination. If we're running with an accurate clock, chose the BESTSAMPLE - * as the estimated offset, otherwise average the remainder. - */ -#define FULLSHIFT 6 /* NCODES root 2 */ -#define NCODES (1<< FULLSHIFT) /* 64 */ -#define REDUCESHIFT (FULLSHIFT -1) /* SAMPLEREDUCE root 2 */ - -/* Towards the high ( Why ?) end of half */ -#define BESTSAMPLE ((samplereduce * 3) /4) /* 24 */ - -/* Leap hold time. After a leap second the clock will no longer be - * reliable until it resynchronizes. Hope 40 minutes is enough. */ -#define EESLEAPHOLD (40 * 60) - -#define EES_STEP_F (1 << 24) /* the receiver steps in units of about 4ms */ -#define EES_STEP_F_GRACE (EES_STEP_F/8) /*Allow for slop of 1/8 which is .5ms*/ -#define EES_STEP_NOTE (1 << 21)/* Log any unexpected jumps, say .5 ms .... */ -#define EES_STEP_NOTES 50 /* Only do a limited number */ -#define MAX_STEP 16 /* Max number of steps to remember */ - -/* debug is a bit mask of debugging that is wanted */ -#define DB_SYSLOG_SMPLI 0x0001 -#define DB_SYSLOG_SMPLE 0x0002 -#define DB_SYSLOG_SMTHI 0x0004 -#define DB_SYSLOG_NSMTHE 0x0008 -#define DB_SYSLOG_NSMTHI 0x0010 -#define DB_SYSLOG_SMTHE 0x0020 -#define DB_PRINT_EV 0x0040 -#define DB_PRINT_CDT 0x0080 -#define DB_PRINT_CDTC 0x0100 -#define DB_SYSLOG_KEEPD 0x0800 -#define DB_SYSLOG_KEEPE 0x1000 -#define DB_LOG_DELTAS 0x2000 -#define DB_PRINT_DELTAS 0x4000 -#define DB_LOG_AWAITMORE 0x8000 -#define DB_LOG_SAMPLES 0x10000 -#define DB_NO_PPS 0x20000 -#define DB_INC_PPS 0x40000 -#define DB_DUMP_DELTAS 0x80000 - -struct eesunit { /* EES unit control structure. */ - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - l_fp reftime; /* reference time */ - l_fp lastsampletime; /* time as in txt from last EES msg */ - l_fp arrvtime; /* Time at which pkt arrived */ - l_fp codeoffsets[NCODES]; /* the time of arrival of 232 codes */ - l_fp offset; /* chosen offset (for clkbug) */ - l_fp lowoffset; /* lowest sample offset (for clkbug) */ - l_fp highoffset; /* highest " " (for clkbug) */ - char lastcode[LENEESCODE+6]; /* last time code we received */ - u_long lasttime; /* last time clock heard from */ - u_long clocklastgood; /* last time good radio seen */ - u_char lencode; /* length of code in buffer */ - u_char nsamples; /* number of samples we've collected */ - u_char codestate; /* state of 232 code reception */ - u_char unit; /* unit number for this guy */ - u_char status; /* clock status */ - u_char lastevent; /* last clock event */ - u_char reason; /* reason for last abort */ - u_char hour; /* hour of day */ - u_char minute; /* minute of hour */ - u_char second; /* seconds of minute */ - char tz; /* timezone from clock */ - u_char ttytype; /* method used */ - u_char dump_vals; /* Should clock values be dumped */ - u_char usealldata; /* Use ALL samples */ - u_short day; /* day of year from last code */ - u_long yearstart; /* start of current year */ - u_long leaphold; /* time of leap hold expiry */ - u_long badformat; /* number of bad format codes */ - u_long baddata; /* number of invalid time codes */ - u_long timestarted; /* time we started this */ - long last_pps_no; /* The serial # of the last PPS */ - char fix_pending; /* Is a "sync to time" pending ? */ - /* Fine tuning - compensate for 4 mS ramping .... */ - l_fp last_l; /* last time stamp */ - u_char last_steps[MAX_STEP]; /* Most recent n steps */ - int best_av_step; /* Best guess at average step */ - char best_av_step_count; /* # of steps over used above */ - char this_step; /* Current pos in buffer */ - int last_step_late; /* How late the last step was (0-59) */ - long jump_fsecs; /* # of fractions of a sec last jump */ - u_long last_step; /* time of last step */ - int last_step_secs; /* Number of seconds in last step */ - int using_ramp; /* 1 -> noemal, -1 -> over stepped */ -}; -#define last_sec last_l.l_ui -#define last_sfsec last_l.l_f -#define this_uisec ((ees->arrvtime).l_ui) -#define this_sfsec ((ees->arrvtime).l_f) -#define msec(x) ((x) / (1<<22)) -#define LAST_STEPS (sizeof ees->last_steps / sizeof ees->last_steps[0]) -#define subms(x) ((((((x < 0) ? (-(x)) : (x)) % (1<<22))/2) * 625) / (1<<(22 -5))) - -/* Bitmask for what methods to try to use -- currently only PPS enabled */ -#define T_CBREAK 1 -#define T_PPS 8 -/* macros to test above */ -#define is_cbreak(x) ((x)->ttytype & T_CBREAK) -#define is_pps(x) ((x)->ttytype & T_PPS) -#define is_any(x) ((x)->ttytype) - -#define CODEREASON 20 /* reason codes */ - -/* Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. */ -static struct eesunit *eesunits[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; - -/* Keep the fudge factors separately so they can be set even - * when no clock is configured. */ -static l_fp inherent_delay[MAXUNITS]; /* when time stamp is taken */ -static l_fp fudgefactor[MAXUNITS]; /* fudgetime1 */ -static l_fp os_delay[MAXUNITS]; /* fudgetime2 */ -static l_fp offset_fudge[MAXUNITS]; /* Sum of above */ -static u_char stratumtouse[MAXUNITS]; -static u_char sloppyclockflag[MAXUNITS]; - -static int deltas[60]; - -static l_fp acceptable_slop; /* = { 0, 1 << (FRACTION_PREC -2) }; */ -static l_fp onesec; /* = { 1, 0 }; */ - -/* Imported from the timer module */ -extern u_long current_time; - -#ifdef DEBUG -static int debug; -#endif - -#ifndef DUMP_BUF_SIZE /* Size of buffer to be used by dump_buf */ -#define DUMP_BUF_SIZE 10112 -#endif - -/* ees_reset - reset the count back to zero */ -#define ees_reset(ees) (ees)->nsamples = 0; \ - (ees)->codestate = EESCS_WAIT - -/* ees_event - record and report an event */ -#define ees_event(ees, evcode) if ((ees)->status != (u_char)(evcode)) \ - ees_report_event((ees), (evcode)) - -/* Find the precision of the system clock by reading it */ -#define USECS 1000000 -#define MINSTEP 5 /* some systems increment uS on each call */ -#define MAXLOOPS (USECS/9) -static int ees_get_precision() -{ - struct timeval tp; - struct timezone tzp; - long last; - int i; - long diff; - long val; - gettimeofday(&tp, &tzp); - - last = tp.tv_usec; - for (i=0; i< 100000; i++) { - gettimeofday(&tp, &tzp); - diff = tp.tv_usec - last; - if (diff < 0) diff += USECS; - if (diff > MINSTEP) break; - last = tp.tv_usec; - } - syslog(LOG_INFO, - "I: ees: precision calculation given %duS after %d loop%s", - diff, i, (i==1) ? "" : "s"); - - if (i == 0) return -20 /* assume 1uS */; - if (i >= MAXLOOPS) return EESPRECISION /* Lies ! */; - for (i=0, val=USECS; val > 0; i--, val /= 2) if (diff > val) return i; - return EESPRECISION /* Lies ! */; -} - -static void dump_buf(coffs, from, to, text) -l_fp *coffs; -int from; -int to; -char *text; -{ - char buff[DUMP_BUF_SIZE + 80]; - int i; - register char *ptr = buff; - sprintf(ptr, text); - for (i=from; i<to; i++) - { while (*ptr) ptr++; - if ((ptr-buff) > DUMP_BUF_SIZE) syslog(LOG_DEBUG, "D: %s", ptr=buff); - sprintf(ptr, " %06d", ((int)coffs[i].l_f) / 4295); - } - syslog(LOG_DEBUG, "D: %s", buff); -} - -/* msfees_init - initialize internal ees driver data */ -static void msfees_init() -{ - register int i; - /* Just zero the data arrays */ - memset((char *)eesunits, 0, sizeof eesunits); - memset((char *)unitinuse, 0, sizeof unitinuse); - - acceptable_slop.l_ui = 0; - acceptable_slop.l_uf = 1 << (FRACTION_PREC -2); - - onesec.l_ui = 1; - onesec.l_uf = 0; - - /* Initialize fudge factors to default. */ - for (i = 0; i < MAXUNITS; i++) { - fudgefactor[i].l_ui = 0; - fudgefactor[i].l_uf = DEFFUDGETIME; - os_delay[i].l_ui = 0; - os_delay[i].l_uf = DEFOSTIME; - inherent_delay[i].l_ui = 0; - inherent_delay[i].l_uf = DEFINHTIME; - offset_fudge[i] = os_delay[i]; - L_ADD(&offset_fudge[i], &fudgefactor[i]); - L_ADD(&offset_fudge[i], &inherent_delay[i]); - stratumtouse[i] = 0; - sloppyclockflag[i] = 0; - } -} - - -/* msfees_start - open the EES devices and initialize data for processing */ -static int msfees_start(unit, peer) - u_int unit; - struct peer *peer; -{ - register struct eesunit *ees; - register int i; - int fd232 = -1; - char eesdev[20]; - struct termios ttyb, *ttyp; - static void ees_receive(); - extern int io_addclock(); - extern void io_closeclock(); - extern char *emalloc(); - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "ees clock: unit number %d invalid (max %d)", - unit, MAXUNITS-1); - return 0; - } - if (unitinuse[unit]) { - syslog(LOG_ERR, "ees clock: unit number %d in use", unit); - return 0; - } - - /* Unit okay, attempt to open the devices. We do them both at - * once to make sure we can */ - (void) sprintf(eesdev, EES232, unit); - - fd232 = open(eesdev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, "ees clock: open of %s failed: %m", eesdev); - return 0; - } - -#ifdef TIOCEXCL - /* Set for exclusive use */ - if (ioctl(fd232, TIOCEXCL, (char *)0) < 0) { - syslog(LOG_ERR, "ees clock: ioctl(%s, TIOCEXCL): %m", eesdev); - goto screwed; - } -#endif - - /* STRIPPED DOWN VERSION: Only PPS CD is supported at the moment */ - - /* Set port characteristics. If we don't have a STREAMS module or - * a clock line discipline, cooked mode is just usable, even though it - * strips the top bit. The only EES byte which uses the top - * bit is the year, and we don't use that anyway. If we do - * have the line discipline, we choose raw mode, and the - * line discipline code will block up the messages. - */ - - /* STIPPED DOWN VERSION: Only PPS CD is supported at the moment */ - - ttyp = &ttyb; - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, "msfees_start: tcgetattr(%s): %m", eesdev); - goto screwed; - } - - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_oflag = 0; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, "msfees_start: tcsetattr(%s): %m", eesdev); - goto screwed; - } - - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, "msfees_start: tcflush(%s): %m", eesdev); - goto screwed; - } - - inherent_delay[unit].l_uf = INH_DELAY_PPS; - - /* offset fudge (how *late* the timestamp is) = fudge + os delays */ - offset_fudge[unit] = os_delay[unit]; - L_ADD(&offset_fudge[unit], &fudgefactor[unit]); - L_ADD(&offset_fudge[unit], &inherent_delay[unit]); - - /* Looks like this might succeed. Find memory for the structure. - * Look to see if there are any unused ones, if not we malloc() one. - */ - if (eesunits[unit] != 0) /* The one we want is okay */ - ees = eesunits[unit]; - else { - /* Look for an unused, but allocated struct */ - for (i = 0; i < MAXUNITS; i++) { - if (!unitinuse[i] && eesunits[i] != 0) - break; - } - - if (i < MAXUNITS) { /* Reclaim this one */ - ees = eesunits[i]; - eesunits[i] = 0; - } /* no spare -- make a new one */ - else ees = (struct eesunit *) emalloc(sizeof(struct eesunit)); - } - memset((char *)ees, 0, sizeof(struct eesunit)); - eesunits[unit] = ees; - - /* Set up the structures */ - ees->peer = peer; - ees->unit = (u_char)unit; - ees->timestarted= current_time; - ees->ttytype = 0; - ees->io.clock_recv= ees_receive; - ees->io.srcclock= (caddr_t)ees; - ees->io.datalen = 0; - ees->io.fd = fd232; - - /* Okay. Push one of the two (linked into the kernel, or dynamically - * loaded) STREAMS module, and give it to the I/O code to start - * receiving stuff. - */ - - { - int rc1; - /* Pop any existing onews first ... */ - while (ioctl(fd232, I_POP, 0 ) >= 0) ; - - /* Now try pushing either of the possible modules */ - if ((rc1=ioctl(fd232, I_PUSH, STREAM_PP1)) < 0 && - ioctl(fd232, I_PUSH, STREAM_PP2) < 0) { - syslog(LOG_ERR, - "ees clock: Push of `%s' and `%s' to %s failed %m", - STREAM_PP1, STREAM_PP2, eesdev); - goto screwed; - } - else { - syslog(LOG_INFO, "I: ees clock: PUSHed %s on %s", - (rc1 >= 0) ? STREAM_PP1 : STREAM_PP2, eesdev); - ees->ttytype |= T_PPS; - } - } - - /* Add the clock */ - if (!io_addclock(&ees->io)) { - /* Oh shit. Just close and return. */ - syslog(LOG_ERR, "ees clock: io_addclock(%s): %m", eesdev); - goto screwed; - } - - - /* All done. Initialize a few random peer variables, then - * return success. */ - peer->precision = ees_get_precision(); - peer->stratum = stratumtouse[unit]; - peer->rootdelay = 0; /* ++++ */ - peer->rootdispersion = 0; /* ++++ */ - if (stratumtouse[unit] <= 1) { - memmove((char *)&peer->refid, EESREFID, 4); - if (unit > 0 && unit < 10) - ((char *)&peer->refid)[3] = '0' + unit; - } else { - peer->refid = htonl(EESHSREFID); - } - unitinuse[unit] = 1; - syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit); - return (1); - -screwed: - if (fd232 != -1) - (void) close(fd232); - return (0); -} - - -/* msfees_shutdown - shut down a EES clock */ -static void msfees_shutdown(unit) - int unit; -{ - register struct eesunit *ees; - extern void io_closeclock(); - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, - "ees clock: INTERNAL ERROR, unit number %d invalid (max %d)", - unit, MAXUNITS); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, - "ees clock: INTERNAL ERROR, unit number %d not in use", unit); - return; - } - - /* Tell the I/O module to turn us off. We're history. */ - ees = eesunits[unit]; - io_closeclock(&ees->io); - unitinuse[unit] = 0; -} - - -/* ees_report_event - note the occurance of an event */ -static void ees_report_event(ees, code) - struct eesunit *ees; - int code; -{ - if (ees->status != (u_char)code) { - ees->status = (u_char)code; - if (code != CEVNT_NOMINAL) - ees->lastevent = (u_char)code; - /* Should report event to trap handler in here. - * Soon... - */ - } -} - - -/* ees_receive - receive data from the serial interface on an EES clock */ -static void ees_receive(rbufp) - struct recvbuf *rbufp; -{ - register int n_sample; - register int day; - register struct eesunit *ees; - register u_char *dpt; /* Data PoinTeR: move along ... */ - register u_char *dpend; /* Points just *after* last data char */ - register char *cp; - l_fp tmp; - static void ees_process(); - int call_pps_sample = 0; - l_fp pps_arrvstamp; - int sincelast; - int pps_step = 0; - int suspect_4ms_step = 0; - struct ppsclockev ppsclockev; - long *ptr = (long *) &ppsclockev; - extern errno; - int rc; - - /* Get the clock this applies to and a pointer to the data */ - ees = (struct eesunit *)rbufp->recv_srcclock; - dpt = (u_char *)&rbufp->recv_space; - dpend = dpt + rbufp->recv_length; - if ((debug & DB_LOG_AWAITMORE) && (rbufp->recv_length != LENEESCODE)) - printf("[%d] ", rbufp->recv_length); - - /* Check out our state and process appropriately */ - switch (ees->codestate) { - case EESCS_WAIT: - /* Set an initial guess at the timestamp as the recv time. - * If just running in CBREAK mode, we can't improve this. - * If we have the CLOCK Line Discipline, PPSCD, or sime such, - * then we will do better later .... - */ - ees->arrvtime = rbufp->recv_time; - ees->codestate = EESCS_GOTSOME; - ees->lencode = 0; - /*FALLSTHROUGH*/ - - case EESCS_GOTSOME: - cp = &(ees->lastcode[ees->lencode]); - - /* Gobble the bytes until the final (possibly stripped) 0xff */ - while (dpt < dpend && (*dpt & 0x7f) != 0x7f) { - *cp++ = (char)*dpt++; - ees->lencode++; - /* Oh dear -- too many bytes .. */ - if (ees->lencode > LENEESPRT) { - syslog(LOG_INFO, -"I: ees clock: %d + %d > %d [%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x]", - ees->lencode, dpend - dpt, LENEESPRT, -#define D(x) (ees->lastcode[x]) - D(0), D(1), D(2), D(3), D(4), D(5), D(6), - D(7), D(8), D(9), D(10), D(11), D(12)); -#undef D - ees->badformat++; - ees->reason = CODEREASON + 1; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - } - /* Gave up because it was end of the buffer, rather than ff */ - if (dpt == dpend) { - /* Incomplete. Wait for more. */ - if (debug & DB_LOG_AWAITMORE) syslog(LOG_INFO, - "I: ees clock %d: %d == %d: await more", - ees->unit, dpt, dpend); - return; - } - - /* This shouldn't happen ... ! */ - if ((*dpt & 0x7f) != 0x7f) { - syslog(LOG_INFO, "I: ees clock: %0x & 0x7f != 0x7f", *dpt); - ees->badformat++; - ees->reason = CODEREASON + 2; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - /* Skip the 0xff */ - dpt++; - - /* Finally, got a complete buffer. Mainline code will - * continue on. */ - cp = ees->lastcode; - break; - - default: - syslog(LOG_ERR, "ees clock: INTERNAL ERROR: %d state %d", - ees->unit, ees->codestate); - ees->reason = CODEREASON + 5; - ees_event(ees, CEVNT_FAULT); - ees_reset(ees); - return; - } - - /* Boy! After all that crap, the lastcode buffer now contains - * something we hope will be a valid time code. Do length - * checks and sanity checks on constant data. - */ - ees->codestate = EESCS_WAIT; - ees->lasttime = current_time; - if (ees->lencode != LENEESPRT) { - ees->badformat++; - ees->reason = CODEREASON + 6; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - cp = ees->lastcode; - - /* Check that centisecond is zero */ - if (cp[EESM_CSEC] != 0) { - ees->baddata++; - ees->reason = CODEREASON + 7; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - /* Check flag formats */ - if (cp[EESM_LEAP] != 0 && cp[EESM_LEAP] != 0x0f) { - ees->badformat++; - ees->reason = CODEREASON + 8; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - if (cp[EESM_BST] != 0 && cp[EESM_BST] != 0x03) { - ees->badformat++; - ees->reason = CODEREASON + 9; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - if (cp[EESM_MSFOK] != 0 && cp[EESM_MSFOK] != 0x3f) { - ees->badformat++; - ees->reason = CODEREASON + 10; - ees_event(ees, CEVNT_BADREPLY); - ees_reset(ees); - return; - } - - /* So far, so good. Compute day, hours, minutes, seconds, - * time zone. Do range checks on these. - */ - -#define bcdunpack(val) ( (((val)>>4) & 0x0f) * 10 + ((val) & 0x0f) ) -#define istrue(x) ((x)?1:0) - - ees->second = bcdunpack(cp[EESM_SEC]); /* second */ - ees->minute = bcdunpack(cp[EESM_MIN]); /* minute */ - ees->hour = bcdunpack(cp[EESM_HOUR]); /* hour */ - - day = bcdunpack(cp[EESM_DAY]); /* day of month */ - - switch (bcdunpack(cp[EESM_MON])) { /* month */ - - /* Add in lengths of all previous months. Add one more - if it is a leap year and after February. - */ - case 12: day += NOV; /*FALLSTHROUGH*/ - case 11: day += OCT; /*FALLSTHROUGH*/ - case 10: day += SEP; /*FALLSTHROUGH*/ - case 9: day += AUG; /*FALLSTHROUGH*/ - case 8: day += JUL; /*FALLSTHROUGH*/ - case 7: day += JUN; /*FALLSTHROUGH*/ - case 6: day += MAY; /*FALLSTHROUGH*/ - case 5: day += APR; /*FALLSTHROUGH*/ - case 4: day += MAR; /*FALLSTHROUGH*/ - case 3: day += FEB; - if (istrue(cp[EESM_LEAP])) day++; /*FALLSTHROUGH*/ - case 2: day += JAN; /*FALLSTHROUGH*/ - case 1: break; - default: ees->baddata++; - ees->reason = CODEREASON + 11; - ees_event(ees, CEVNT_BADDATE); - ees_reset(ees); - return; - } - - ees->day = day; - - /* Get timezone. The clocktime routine wants the number - * of hours to add to the delivered time to get UT. - * Currently -1 if BST flag set, 0 otherwise. This - * is the place to tweak things if double summer time - * ever happens. - */ - ees->tz = istrue(cp[EESM_BST]) ? -1 : 0; - - if (ees->day > 366 || ees->day < 1 || - ees->hour > 23 || ees->minute > 59 || ees->second > 59) { - ees->baddata++; - ees->reason = CODEREASON + 12; - ees_event(ees, CEVNT_BADDATE); - ees_reset(ees); - return; - } - - n_sample = ees->nsamples; - - /* Now, compute the reference time value: text -> tmp.l_ui */ - if (!clocktime(ees->day, ees->hour, ees->minute, ees->second, - ees->tz, rbufp->recv_time.l_ui, &ees->yearstart, - &tmp.l_ui)) { - ees->baddata++; - ees->reason = CODEREASON + 13; - ees_event(ees, CEVNT_BADDATE); - ees_reset(ees); - return; - } - tmp.l_uf = 0; - - /* DON'T use ees->arrvtime -- it may be < reftime */ - ees->lastsampletime = tmp; - - /* If we are synchronised to the radio, update the reference time. - * Also keep a note of when clock was last good. - */ - if (istrue(cp[EESM_MSFOK])) { - ees->reftime = tmp; - ees->clocklastgood = current_time; - } - - - /* Compute the offset. For the fractional part of the - * offset we use the expected delay for the message. - */ - ees->codeoffsets[n_sample].l_ui = tmp.l_ui; - ees->codeoffsets[n_sample].l_uf = 0; - - /* Number of seconds since the last step */ - sincelast = this_uisec - ees->last_step; - - memset(&ppsclockev, 0, sizeof ppsclockev); - - rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev); - if (debug & DB_PRINT_EV) fprintf(stderr, - "[%x] CIOGETEV u%d %d (%x %d) gave %d (%d): %08x %08x %d\n", - DB_PRINT_EV, ees->unit, ees->io.fd, CIOGETEV, is_pps(ees), - rc, errno, ptr[0], ptr[1], ptr[2]); - - /* If we managed to get the time of arrival, process the info */ - if (rc >= 0) { - int conv = -1; - pps_step = ppsclockev.serial - ees->last_pps_no; - - /* Possible that PPS triggered, but text message didn't */ - if (pps_step == 2) syslog(LOG_ERR, "pps step = 2 @ %02d", ees->second); - if (pps_step == 2 && ees->second == 1) suspect_4ms_step |= 1; - if (pps_step == 2 && ees->second == 2) suspect_4ms_step |= 4; - - /* allow for single loss of PPS only */ - if (pps_step != 1 && pps_step != 2) - fprintf(stderr, "PPS step: %d too far off %d (%d)\n", - ppsclockev.serial, ees->last_pps_no, pps_step); - else if (!buftvtots((char *) &(ppsclockev.tv), &pps_arrvstamp)) - fprintf(stderr, "buftvtots failed\n"); - else { /* if ((ABS(time difference) - 0.25) < 0) - * then believe it ... - */ - l_fp diff; - diff = pps_arrvstamp; - conv = 0; - L_SUB(&diff, &ees->arrvtime); -if (debug & DB_PRINT_CDT) printf("[%x] Have %x.%08x and %x.%08x -> %x.%08x @ %s", - DB_PRINT_CDT, ees->arrvtime.l_ui, ees->arrvtime.l_uf, - pps_arrvstamp.l_ui, pps_arrvstamp.l_uf, - diff.l_ui, diff.l_uf, - ctime(&(ppsclockev.tv.tv_sec))); - if (L_ISNEG(&diff)) M_NEG(diff.l_ui, diff.l_uf); - L_SUB(&diff, &acceptable_slop); - if (L_ISNEG(&diff)) { /* AOK -- pps_sample */ - ees->arrvtime = pps_arrvstamp; - conv++; - call_pps_sample++; - } - /* Some loss of some signals around sec = 1 */ - else if (ees->second == 1) { - diff = pps_arrvstamp; - L_ADD(&diff, &onesec); - L_SUB(&diff, &ees->arrvtime); - if (L_ISNEG(&diff)) M_NEG(diff.l_ui, diff.l_uf); - L_SUB(&diff, &acceptable_slop); -syslog(LOG_ERR, "Have sec==1 slip %ds a=%08x-p=%08x -> %x.%08x (u=%d) %s", - pps_arrvstamp.l_ui - ees->arrvtime.l_ui, - pps_arrvstamp.l_uf, - ees->arrvtime.l_uf, - diff.l_ui, diff.l_uf, - ppsclockev.tv.tv_usec, - ctime(&(ppsclockev.tv.tv_sec))); - if (L_ISNEG(&diff)) { /* AOK -- pps_sample */ - suspect_4ms_step |= 2; - ees->arrvtime = pps_arrvstamp; - L_ADD(&ees->arrvtime, &onesec); - conv++; - call_pps_sample++; - } - } - } - ees->last_pps_no = ppsclockev.serial; - if (debug & DB_PRINT_CDTC) printf( - "[%x] %08x %08x %d u%d (%d %d)\n", - DB_PRINT_CDTC, pps_arrvstamp.l_ui, - pps_arrvstamp.l_uf, conv, ees->unit, - call_pps_sample, pps_step); - } - - /* See if there has been a 4ms jump at a minute boundry */ - { l_fp delta; -#define delta_isec delta.l_ui -#define delta_ssec delta.l_i -#define delta_sfsec delta.l_f - long delta_f_abs; - - delta.l_i = ees->arrvtime.l_i; - delta.l_f = ees->arrvtime.l_f; - - L_SUB(&delta, &ees->last_l); - delta_f_abs = delta_sfsec; - if (delta_f_abs < 0) delta_f_abs = -delta_f_abs; - - /* Dump the deltas each minute */ - if (debug & DB_DUMP_DELTAS) - { if (0 <= ees->second && - ees->second < ((sizeof deltas) / (sizeof deltas[0]))) deltas[ees->second] = delta_sfsec; - /* Dump on second 1, as second 0 sometimes missed */ - if (ees->second == 1) { - char text[16 * ((sizeof deltas) / (sizeof deltas[0]))]; - char *ptr=text; - int i; - for (i=0; i<((sizeof deltas) / (sizeof deltas[0])); i++) { - sprintf(ptr, " %d.%04d", - msec(deltas[i]), subms(deltas[i])); - while (*ptr) ptr++; - } - syslog(LOG_ERR, "Deltas: %d.%04d<->%d.%04d: %s", - msec(EES_STEP_F - EES_STEP_F_GRACE), subms(EES_STEP_F - EES_STEP_F_GRACE), - msec(EES_STEP_F + EES_STEP_F_GRACE), subms(EES_STEP_F + EES_STEP_F_GRACE), - text+1); - for (i=0; i<((sizeof deltas) / (sizeof deltas[0])); i++) deltas[i] = 0; - } - } - - /* Lets see if we have a 4 mS step at a minute boundaary */ - if ( ((EES_STEP_F - EES_STEP_F_GRACE) < delta_f_abs) && - (delta_f_abs < (EES_STEP_F + EES_STEP_F_GRACE)) && - (ees->second == 0 || ees->second == 1 || ees->second == 2) && - (sincelast < 0 || sincelast > 122) - ) { /* 4ms jump at min boundry */ - int old_sincelast; - int count=0; - int sum = 0; - /* Yes -- so compute the ramp time */ - if (ees->last_step == 0) sincelast = 0; - old_sincelast = sincelast; - - /* First time in, just set "ees->last_step" */ - if(ees->last_step) { - int other_step = 0; - int third_step = 0; - int this_step = (sincelast + (60 /2)) / 60; - int p_step = ees->this_step; - int p; - ees->last_steps[p_step] = this_step; - p= p_step; - p_step++; - if (p_step >= LAST_STEPS) p_step = 0; - ees->this_step = p_step; - /* Find the "average" interval */ - while (p != p_step) { - int this = ees->last_steps[p]; - if (this == 0) break; - if (this != this_step) { - if (other_step == 0 && ( - this== (this_step +2) || - this== (this_step -2) || - this== (this_step +1) || - this== (this_step -1))) - other_step = this; - if (other_step != this) { - int delta = (this_step - other_step); - if (delta < 0) delta = - delta; - if (third_step == 0 && ( - (delta == 1) ? ( - this == (other_step +1) || - this == (other_step -1) || - this == (this_step +1) || - this == (this_step -1)) - : - ( - this == (this_step + other_step)/2 - ) - )) third_step = this; - if (third_step != this) break; - } - } - sum += this; - p--; - if (p < 0) p += LAST_STEPS; - count++; - } -syslog(LOG_ERR, "MSF%d: %d: This=%d (%d), other=%d/%d, sum=%d, count=%d, pps_step=%d, suspect=%x", ees->unit, p, ees->last_steps[p], this_step, other_step, third_step, sum, count, pps_step, suspect_4ms_step); - if (count != 0) sum = ((sum * 60) + (count /2)) / count; -#define SV(x) (ees->last_steps[(x + p_step) % LAST_STEPS]) -syslog(LOG_ERR, "MSF%d: %x steps %d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", - ees->unit, suspect_4ms_step, p_step, SV(0), SV(1), SV(2), SV(3), SV(4), SV(5), SV(6), - SV(7), SV(8), SV(9), SV(10), SV(11), SV(12), SV(13), SV(14), SV(15)); -printf("MSF%d: steps %d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", - ees->unit, p_step, SV(0), SV(1), SV(2), SV(3), SV(4), SV(5), SV(6), - SV(7), SV(8), SV(9), SV(10), SV(11), SV(12), SV(13), SV(14), SV(15)); -#undef SV - ees->jump_fsecs = delta_sfsec; - ees->using_ramp = 1; - if (sincelast > 170) - ees->last_step_late += sincelast - ((sum) ? sum : ees->last_step_secs); - else ees->last_step_late = 30; - if (ees->last_step_late < -60 || ees->last_step_late > 120) ees->last_step_late = 30; - if (ees->last_step_late < 0) ees->last_step_late = 0; - if (ees->last_step_late >= 60) ees->last_step_late = 59; - sincelast = 0; - } - else { /* First time in -- just save info */ - ees->last_step_late = 30; - ees->jump_fsecs = delta_sfsec; - ees->using_ramp = 1; - sum = 4 * 60; - } - ees->last_step = this_uisec; -printf("MSF%d: d=%3d.%04d@%d :%d:%d:$%d:%d:%d\n", -ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, old_sincelast, ees->last_step_late, count, sum, ees->last_step_secs); -syslog(LOG_ERR, "MSF%d: d=%3d.%04d@%d :%d:%d:%d:%d:%d", -ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, old_sincelast, ees->last_step_late, count, sum, ees->last_step_secs); - if (sum) ees->last_step_secs = sum; - } - /* OK, so not a 4ms step at a minute boundry */ - else { - if (suspect_4ms_step) syslog(LOG_ERR, - "MSF%d: suspect = %x, but delta of %d.%04d [%d.%04d<%d.%04d<%d.%04d: %d %d]", - ees->unit, suspect_4ms_step, msec(delta_sfsec), subms(delta_sfsec), - msec(EES_STEP_F - EES_STEP_F_GRACE), - subms(EES_STEP_F - EES_STEP_F_GRACE), - msec(delta_f_abs), - subms(delta_f_abs), - msec(EES_STEP_F + EES_STEP_F_GRACE), - subms(EES_STEP_F + EES_STEP_F_GRACE), - ees->second, - sincelast); - if ((delta_f_abs > EES_STEP_NOTE) && ees->last_l.l_i) { - static ees_step_notes = EES_STEP_NOTES; - if (ees_step_notes > 0) { - ees_step_notes--; -printf("MSF%d: D=%3d.%04d@%02d :%d%s\n", -ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, sincelast, ees_step_notes ? "" : " -- NO MORE !"); -syslog(LOG_ERR, "MSF%d: D=%3d.%04d@%02d :%d%s", -ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, (ees->last_step) ? sincelast : -1, ees_step_notes ? "" : " -- NO MORE !"); - } - } - } - } - ees->last_l = ees->arrvtime; - - /* IF we have found that it's ramping - * && it's within twice the expected ramp period - * && there is a non zero step size (avoid /0 !) - * THEN we twiddle things - */ - if (ees->using_ramp && - sincelast < (ees->last_step_secs)*2 && - ees->last_step_secs) - { long sec_of_ramp = sincelast + ees->last_step_late; - long fsecs; - l_fp inc; - - /* Ramp time may vary, so may ramp for longer than last time */ - if (sec_of_ramp > (ees->last_step_secs + 120)) - sec_of_ramp = ees->last_step_secs; - - /* sec_of_ramp * ees->jump_fsecs may overflow 2**32 */ - fsecs = sec_of_ramp * (ees->jump_fsecs / ees->last_step_secs); - - if (debug & DB_LOG_DELTAS) syslog(LOG_ERR, - "[%x] MSF%d: %3d/%03d -> d=%11d (%d|%d)", - DB_LOG_DELTAS, - ees->unit, sec_of_ramp, ees->last_step_secs, fsecs, - pps_arrvstamp.l_f, pps_arrvstamp.l_f + fsecs); - if (debug & DB_PRINT_DELTAS) printf( - "MSF%d: %3d/%03d -> d=%11d (%d|%d)\n", - ees->unit, sec_of_ramp, ees->last_step_secs, fsecs, - pps_arrvstamp.l_f, pps_arrvstamp.l_f + fsecs); - - /* Must sign extend the result */ - inc.l_i = (fsecs < 0) ? -1 : 0; - inc.l_f = fsecs; - if (debug & DB_INC_PPS) - { L_SUB(&pps_arrvstamp, &inc); - L_SUB(&ees->arrvtime, &inc); - } - else - { L_ADD(&pps_arrvstamp, &inc); - L_ADD(&ees->arrvtime, &inc); - } - } - else { - if (debug & DB_LOG_DELTAS) syslog(LOG_ERR, - "[%x] MSF%d: ees->using_ramp=%d, sincelast=%x / %x, ees->last_step_secs=%x", - DB_LOG_DELTAS, - ees->unit, ees->using_ramp, - sincelast, - (ees->last_step_secs)*2, - ees->last_step_secs); - if (debug & DB_PRINT_DELTAS) printf( - "[%x] MSF%d: ees->using_ramp=%d, sincelast=%x / %x, ees->last_step_secs=%x\n", - DB_LOG_DELTAS, - ees->unit, ees->using_ramp, - sincelast, - (ees->last_step_secs)*2, - ees->last_step_secs); - } - - L_SUB(&ees->arrvtime, &offset_fudge[ees->unit]); - L_SUB(&pps_arrvstamp, &offset_fudge[ees->unit]); - - if (call_pps_sample && !(debug & DB_NO_PPS)) { - /* Sigh -- it expects its args negated */ - L_NEG(&pps_arrvstamp); - (void) pps_sample(&pps_arrvstamp); - } - - /* Subtract off the local clock time stamp */ - L_SUB(&ees->codeoffsets[n_sample], &ees->arrvtime); - if (debug & DB_LOG_SAMPLES) syslog(LOG_ERR, - "MSF%d: [%x] %d (ees: %d %d) (pps: %d %d)%s", - ees->unit, DB_LOG_DELTAS, n_sample, - ees->codeoffsets[n_sample].l_f, - ees->codeoffsets[n_sample].l_f / 4295, - pps_arrvstamp.l_f, - pps_arrvstamp.l_f /4295, - (debug & DB_NO_PPS) ? " [no PPS]" : ""); - - if (ees->nsamples++ == NCODES-1) ees_process(ees); - - /* Done! */ -} - - -static void set_x(fp_offset) -l_fp *fp_offset; -{ - step_systime_real(fp_offset); -} - - -/* offcompare - auxiliary comparison routine for offset sort */ - -static int -offcompare(a, b) -l_fp *a, *b; -{ - return(L_ISGEQ(a, b) ? (L_ISEQU(a, b) ? 0 : 1) : -1); -} - - -/* ees_process - process a pile of samples from the clock */ -static void ees_process(ees) - struct eesunit *ees; -{ - static last_samples = -1; - register int i, j; - register int noff; - register l_fp *coffs = ees->codeoffsets; - l_fp offset, tmp; - u_fp dispersion; /* ++++ */ - int lostsync, isinsync; - int samples = ees->nsamples; - int samplelog; - int samplereduce = (samples + 1) / 2; - - /* Reset things to zero so we don't have to worry later */ - ees_reset(ees); - - if (sloppyclockflag[ees->unit]) { - samplelog = (samples < 2) ? 0 : - (samples < 5) ? 1 : - (samples < 9) ? 2 : - (samples < 17) ? 3 : - (samples < 33) ? 4 : 5; - samplereduce = (1 << samplelog); - } - - if (samples != last_samples && - ((samples != (last_samples-1)) || samples < 3)) { - syslog(LOG_ERR, "Samples=%d (%d), samplereduce=%d ....", - samples, last_samples, samplereduce); - last_samples = samples; - } - if (samples < 1) return; - - /* If requested, dump the raw data we have in the buffer */ - if (ees->dump_vals) dump_buf(coffs, 0, samples, "Raw data is:"); - - /* Sort the offsets, trim off the extremes, then choose one. */ - qsort((char *) coffs, samples, sizeof(l_fp), offcompare); - - noff = samples; - i = 0; - while ((noff - i) > samplereduce) { - /* Trim off the sample which is further away - * from the median. We work this out by doubling - * the median, subtracting off the end samples, and - * looking at the sign of the answer, using the - * identity (c-b)-(b-a) == 2*b-a-c - */ - tmp = coffs[(noff + i)/2]; - L_ADD(&tmp, &tmp); - L_SUB(&tmp, &coffs[i]); - L_SUB(&tmp, &coffs[noff-1]); - if (L_ISNEG(&tmp)) noff--; else i++; - } - - /* If requested, dump the reduce data we have in the buffer */ - if (ees->dump_vals) dump_buf(coffs, i, noff, "Reduced to:"); - - /* What we do next depends on the setting of the sloppy clock flag. - * If it is on, average the remainder to derive our estimate. - * Otherwise, just pick a representative value from the remaining stuff - */ - if (sloppyclockflag[ees->unit]) { - offset.l_ui = offset.l_uf = 0; - for (j = i; j < noff; j++) - L_ADD(&offset, &coffs[j]); - for (j = samplelog; j > 0; j--) - L_RSHIFTU(&offset); - } - else offset = coffs[i+BESTSAMPLE]; - - /* Compute the dispersion as the difference between the - * lowest and highest offsets that remain in the - * consideration list. - * - * It looks like MOST clocks have MOD (max error), so halve it ! - */ - tmp = coffs[noff-1]; - L_SUB(&tmp, &coffs[i]); -#define FRACT_SEC(n) ((1 << 30) / (n/2)) - dispersion = LFPTOFP(&tmp) / 2; /* ++++ */ - if (debug & (DB_SYSLOG_SMPLI | DB_SYSLOG_SMPLE)) syslog( - (debug & DB_SYSLOG_SMPLE) ? LOG_ERR : LOG_INFO, - "I: [%x] Offset=%06d (%d), disp=%06d%s [%d], %d %d=%d %d:%d %d=%d %d", - debug & (DB_SYSLOG_SMPLI | DB_SYSLOG_SMPLE), - offset.l_f / 4295, offset.l_f, - (dispersion * 1526) / 100, - (sloppyclockflag[ees->unit]) ? " by averaging" : "", - FRACT_SEC(10) / 4295, - (coffs[0].l_f) / 4295, - i, - (coffs[i].l_f) / 4295, - (coffs[samples/2].l_f) / 4295, - (coffs[i+BESTSAMPLE].l_f) / 4295, - noff-1, - (coffs[noff-1].l_f) / 4295, - (coffs[samples-1].l_f) / 4295); - - /* Are we playing silly wotsits ? - * If we are using all data, see if there is a "small" delta, - * and if so, blurr this with 3/4 of the delta from the last value - */ - if (ees->usealldata && ees->offset.l_uf) { - long diff = (long) (ees->offset.l_uf - offset.l_uf); - - /* is the delta small enough ? */ - if ((- FRACT_SEC(100)) < diff && diff < FRACT_SEC(100)) { - int samd = (64 * 4) / samples; - long new; - if (samd < 2) samd = 2; - new = offset.l_uf + ((diff * (samd -1)) / samd); - - /* Sign change -> need to fix up int part */ - if ((new & (1 << 31)) != - (((long) offset.l_uf) & ( 1 << 31))) - { syslog(LOG_INFO, "I: %x != %x (%x %x), so add %d", - new & (1 << 31), - ((long) offset.l_uf) & ( 1 << 31), - new, (long) offset.l_uf, - (new < 0) ? -1 : 1); - offset.l_ui += (new < 0) ? -1 : 1; - } - dispersion /= 4; - if (debug & (DB_SYSLOG_SMTHI | DB_SYSLOG_SMTHE)) syslog( - (debug & DB_SYSLOG_SMTHE) ? LOG_ERR : LOG_INFO, - "I: [%x] Smooth data: %d -> %d, dispersion now %d", - debug & (DB_SYSLOG_SMTHI | DB_SYSLOG_SMTHE), - ((long) offset.l_uf) / 4295, new / 4295, - (dispersion * 1526) / 100); - offset.l_uf = (unsigned long) new; - } - else if (debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE)) syslog( - (debug & DB_SYSLOG_NSMTHE) ? LOG_ERR : LOG_INFO, - "[%x] No smooth as delta not %d < %d < %d", - debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE), - - FRACT_SEC(100), diff, FRACT_SEC(100)); - } - else if (debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE)) syslog( - (debug & DB_SYSLOG_NSMTHE) ? LOG_ERR : LOG_INFO, - "I: [%x] No smooth as flag=%x and old=%x=%d (%d:%d)", - debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE), - ees->usealldata, ees->offset.l_f, ees->offset.l_uf, - offset.l_f, ees->offset.l_f - offset.l_f); - - /* Collect offset info for debugging info */ - ees->offset = offset; - ees->lowoffset = coffs[i]; - ees->highoffset = coffs[noff-1]; - - /* Determine synchronization status. Can be unsync'd either - * by a report from the clock or by a leap hold. - * - * Loss of the radio signal for a short time does not cause - * us to go unsynchronised, since the receiver keeps quite - * good time on its own. The spec says 20ms in 4 hours; the - * observed drift in our clock (Cambridge) is about a second - * a day, but even that keeps us within the inherent tolerance - * of the clock for about 15 minutes. Observation shows that - * the typical "short" outage is 3 minutes, so to allow us - * to ride out those, we will give it 5 minutes. - */ - lostsync = current_time - ees->clocklastgood > 300 ? 1 : 0; - isinsync = (lostsync || ees->leaphold > current_time) ? 0 : 1; - - /* Done. Use time of last good, synchronised code as the - * reference time, and lastsampletime as the receive time. - */ - if (ees->fix_pending) { - syslog(LOG_ERR, "MSF%d: fix_pending=%d -> jump %x.%08x\n", - ees->fix_pending, ees->unit, offset.l_i, offset.l_f); - ees->fix_pending = 0; - set_x(&offset); - L_CLR(&offset); - } - refclock_receive(ees->peer, - &offset, - 0, /* delay */ - dispersion, - &ees->reftime, - &ees->lastsampletime, /* receive time */ - (isinsync) ? 0 : LEAP_NOTINSYNC); - ees_event(ees, lostsync ? CEVNT_PROP : CEVNT_NOMINAL); -} - -/* msfees_poll - called by the transmit procedure */ -static void msfees_poll(unit, peer) - int unit; - char *peer; -{ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "ees clock poll: INTERNAL: unit %d invalid", - unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "ees clock poll: INTERNAL: unit %d unused", - unit); - return; - } - - ees_process(eesunits[unit]); - - if ((current_time - eesunits[unit]->lasttime) > 150) - ees_event(eesunits[unit], CEVNT_FAULT); -} - -/* msfees_leap - called when a leap second occurs */ -static void msfees_leap() -{ - register int i; - - /* This routine should be entered a few seconds after - * midnight UTC when a leap second occurs. To ensure we - * don't believe foolish time from the clock(s) we set a - * 40 minute hold on them. It shouldn't take anywhere - * near this amount of time to adjust if the clock is getTING - * data, but doing anything else is complicated. - */ - for (i = 0; i < MAXUNITS; i++) if (unitinuse[i]) - eesunits[i]->leaphold = current_time + EESLEAPHOLD; -} - -/* msfees_control - set fudge factors, return statistics */ -static void msfees_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct eesunit *ees = eesunits[unit]; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "ees clock: unit %d invalid (max %d)", - unit, MAXUNITS-1); - return; - } - - if (in != 0) { - if (in->haveflags & CLK_HAVETIME1) - fudgefactor[unit] = in->fudgetime1; - if (in->haveflags & CLK_HAVETIME2) - os_delay[unit] = in->fudgetime2; - offset_fudge[unit] = os_delay[unit]; - L_ADD(&offset_fudge[unit], &fudgefactor[unit]); - L_ADD(&offset_fudge[unit], &inherent_delay[unit]); - if (in->haveflags & CLK_HAVEVAL1) { - stratumtouse[unit] = (u_char)(in->fudgeval1 & 0xf); - if (unitinuse[unit]) { - /* Should actually reselect clock, but - * will wait for the next timecode - */ - struct peer *peer = ees->peer; - peer->stratum = stratumtouse[unit]; - if (stratumtouse[unit] <= 1) { - memmove((char *)&peer->refid, - EESREFID, 4); - if (unit>0 && unit<10) - ((char *)&peer->refid)[3] = - '0' + unit; - } - else peer->refid = htonl(EESHSREFID); - } - } - if (in->haveflags & CLK_HAVEVAL2) { - printf("Debug: %x -> %x\n", debug, in->fudgeval2); - syslog(LOG_ERR, "MSF%d: debug %x -> %x", - unit, debug, in->fudgeval2); - debug = in->fudgeval2; - } - if (in->haveflags & CLK_HAVEFLAG1) { - sloppyclockflag[unit] = in->flags & CLK_FLAG1; - } - if (in->haveflags & CLK_HAVEFLAG2) { - ees->fix_pending++; - /* if (in->flags & CLK_FLAG2 && unitinuse[unit]) - ees->leaphold = 0; */ - } - if (in->haveflags & CLK_HAVEFLAG3 && unitinuse[unit]) { - printf("dump_vals: %x -> %x\n", ees->dump_vals, in->flags & CLK_FLAG3); - ees->dump_vals = in->flags & CLK_FLAG3; - } - if (in->haveflags & CLK_HAVEFLAG4 && unitinuse[unit]) { - ees->usealldata = in->flags & CLK_FLAG4; - } - } - - if (out != 0) { - out->type = REFCLK_MSF_EES; - out->haveflags - = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEVAL2|CLK_HAVEFLAG1|CLK_HAVEFLAG3|CLK_HAVEFLAG4; - out->clockdesc = EESDESCRIPTION; - out->fudgetime1 = fudgefactor[unit]; - out->fudgetime2 = os_delay[unit]; - out->fudgeval1 = (long)stratumtouse[unit]; - /*out->fudgeval2= debug*/; - memmove((char *)&out->fudgeval2, EESREFID, 4); - if (unit > 0 && unit < 10) - ((char *)&out->fudgeval2)[3] = '0' + unit; - out->flags = sloppyclockflag[unit]; - if (unitinuse[unit]) { - out->flags |= ees->dump_vals | ees->usealldata; - out->lencode = ees->lencode; - out->lastcode = ees->lastcode; - out->timereset = current_time - ees->timestarted; - out->polls = 0; /* we don't poll */ - out->noresponse = 0; /* ditto */ - out->badformat = ees->badformat; - out->baddata = ees->baddata; - out->lastevent = ees->lastevent; - out->currentstatus = ees->status; - } else { - out->lencode = 0; - out->lastcode = ""; - out->polls = out->noresponse = 0; - out->badformat = out->baddata = 0; - out->timereset = 0; - out->currentstatus = out->lastevent = CEVNT_NOMINAL; - } - } -} - - -/* msfees_buginfo - return clock dependent debugging info */ -static void msfees_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ - register struct eesunit *ees; - - bug->nvalues = bug->ntimes = 0; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "ees clock: unit %d invalid (max %d)", - unit, MAXUNITS-1); - return; - } - - if (!unitinuse[unit]) - return; - ees = eesunits[unit]; - - bug->nvalues = 16; - bug->svalues = 0x0800; - bug->values[0] = (ees->lasttime) ? current_time - ees->lasttime : 0; - bug->values[1] = (ees->clocklastgood)?current_time-ees->clocklastgood:0; - bug->values[2] = (u_long)ees->status; - bug->values[3] = (u_long)ees->lastevent; - bug->values[4] = (u_long)ees->reason; - bug->values[5] = (u_long)ees->nsamples; - bug->values[6] = (u_long)ees->codestate; - bug->values[7] = (u_long)ees->day; - bug->values[8] = (u_long)ees->hour; - bug->values[9] = (u_long)ees->minute; - bug->values[10] = (u_long)ees->second; - bug->values[11] = (u_long)ees->tz; - bug->values[12] = ees->yearstart; - bug->values[13] = (ees->leaphold > current_time) ? - ees->leaphold - current_time : 0; - bug->values[14] = inherent_delay[unit].l_uf; - bug->values[15] = offset_fudge[unit].l_uf; - - bug->ntimes = 11; - bug->stimes = 0x3f8; - bug->times[0] = ees->reftime; - bug->times[1] = ees->arrvtime; - bug->times[2] = ees->lastsampletime; - bug->times[3] = ees->offset; - bug->times[4] = ees->lowoffset; - bug->times[5] = ees->highoffset; - bug->times[6] = inherent_delay[unit]; - bug->times[8] = os_delay[unit]; - bug->times[7] = fudgefactor[unit]; - bug->times[9] = offset_fudge[unit]; - bug->times[10].l_ui = ees->yearstart; - bug->times[10].l_uf = 0; -} - -struct refclock refclock_msfees = { - msfees_start, msfees_shutdown, msfees_poll, - msfees_control, msfees_init, msfees_buginfo, NOFLAGS -}; -#endif /* defined(REFCLOCK) && defined(MSFEESPPS) && defined(STREAM) */ diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_mx4200.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_mx4200.c deleted file mode 100644 index 7cfa3cf..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_mx4200.c +++ /dev/null @@ -1,1342 +0,0 @@ -/* - * This software was developed by the Computer Systems Engineering group - * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66. - * - * Copyright (c) 1992 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Lawrence Berkeley Laboratory. - * 4. The name of the University may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#if defined(REFCLOCK) && (defined(MX4200) || defined(MX4200CLK) || defined(MX4200PPS)) - -#if !defined(lint) && !defined(__GNUC__) -static char rcsid[] = - "@(#) /src/master/xntp-930612/xntpd/refclock_mx4200.c,v 1.5 1993/06/18 21:19:54 jbj Exp (LBL) "; -#endif - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_calendar.h" -#include "ntp_unixtime.h" - -#if __STDC__ -#include <stdarg.h> -#else -#include <varargs.h> -#endif - -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ - -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ - -#if defined(HAVE_TERMIOS) -#include <termios.h> -#endif -#if defined(STREAM) -#include <stropts.h> -#if defined(MX4200CLK) -#include <sys/clkdefs.h> -#endif /* MX4200CLK */ -#endif /* STREAM */ - -#include <sys/ppsclock.h> - -#include "mx4200.h" -#include "ntp_stdlib.h" - -/* - * This driver supports the Magnavox Model MX4200 GPS Receiver. - */ - -/* - * Definitions - */ -#define MAXUNITS 2 /* max number of mx4200 units */ -#define MX4200232 "/dev/gps%d" -#define SPEED232 B4800 /* baud */ - -/* - * The number of raw samples which we acquire to derive a single estimate. - */ -#define NSTAMPS 64 - -/* - * Radio interface parameters - */ -#define MX4200PRECISION (-18) /* precision assumed (about 4 us) */ -#define MX4200REFID "GPS" /* reference id */ -#define MX4200DESCRIPTION "Magnavox MX4200 GPS Receiver" /* who we are */ -#define DEFFUDGETIME 0 /* default fudge time (ms) */ - -/* Leap stuff */ -extern U_LONG leap_hoursfromleap; -extern U_LONG leap_happened; -static int leap_debug; - -/* - * mx4200_reset - reset the count back to zero - */ -#define mx4200_reset(mx4200) \ - do { \ - (mx4200)->nsamples = 0; \ - } while (0) - -/* - * mx4200_event - record and report an event - */ -#define mx4200_event(mx4200, evcode) \ - do { \ - if ((mx4200)->status != (u_char)(evcode)) \ - mx4200_report_event((mx4200), (evcode)); \ - } while (0) - -/* - * Imported from the timer module - */ -extern U_LONG current_time; -extern struct event timerqueue[]; - -/* - * Imported from ntp_loopfilter module - */ -extern int fdpps; /* pps file descriptor */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * MX4200 unit control structure. - */ -struct mx4200unit { - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - U_LONG gpssamples[NSTAMPS]; /* the GPS time samples */ - l_fp unixsamples[NSTAMPS]; /* the UNIX time samples */ - - - l_fp lastsampletime; /* time of last estimate */ - u_int lastserial; /* last pps serial number */ -#ifdef notdef - l_fp lastrec; /* last receive time */ - l_fp lastref; /* last timecode time */ -#endif - char lastcode[RX_BUFF_SIZE]; /* last timecode received */ - U_LONG lasttime; /* last time clock heard from */ - u_char nsamples; /* number of samples we've collected */ - u_char unit; /* unit number for this guy */ - u_char status; /* clock status */ - u_char lastevent; /* last clock event */ - u_char reason; /* reason for last abort */ - u_char lencode; /* length of last timecode */ - u_char year; /* year of eternity */ - u_short monthday; /* day of month */ - u_char hour; /* hour of day */ - u_char minute; /* minute of hour */ - u_char second; /* seconds of minute */ - u_char leap; /* leap indicators */ - /* - * Status tallies - */ -#ifdef notdef - U_LONG polls; /* polls sent */ - U_LONG noresponse; /* number of nonresponses */ -#endif - U_LONG badformat; /* bad format */ - U_LONG baddata; /* bad data */ - U_LONG timestarted; /* time we started this */ -}; - -/* - * We demand that consecutive PPS samples are more than 0.995 seconds - * and less than 1.005 seconds apart. - */ -#define PPSLODIFF_UI 0 /* 0.900 as an l_fp */ -#define PPSLODIFF_UF 0xe6666610 - -#define PPSHIDIFF_UI 1 /* 1.100 as an l_fp */ -#define PPSHIDIFF_UF 0x19999990 - -/* - * reason codes - */ -#define PPSREASON 20 -#define CODEREASON 40 -#define PROCREASON 60 - -/* - * Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. - */ -static struct mx4200unit *mx4200units[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; - -/* - * Keep the fudge factors separately so they can be set even - * when no clock is configured. - */ -static l_fp fudgefactor[MAXUNITS]; -static u_char stratumtouse[MAXUNITS]; -static u_char sloppyclockflag[MAXUNITS]; -static U_LONG refid[MAXUNITS]; - -static const char pmvxg[] = "PMVXG"; - -/* - * Function prototypes - */ -static void mx4200_init P((void)); -static int mx4200_start P((u_int, struct peer *)); -static void mx4200_shutdown P((int)); -static void mx4200_receive P((struct recvbuf *)); -static void mx4200_process P((struct mx4200unit *)); -static void mx4200_report_event P((struct mx4200unit *, int)); -static void mx4200_poll P((int, struct peer *)); -static void mx4200_control P((u_int, struct refclockstat *, struct refclockstat *)); -static void mx4200_buginfo P((int, struct refclockbug *)); - -static char * mx4200_parse P((char *, struct calendar *, int *, int *)); -static int mx4200_needconf P((char *)); -static void mx4200_config P((struct mx4200unit *)); -static void mx4200_send P((int, const char *, ...)); -static int mx4200_cmpl_fp P((void *, void *)); -static u_char cksum P((char *, u_int)); - -#ifdef DEBUG -static void opendfile P((int)); -static void checkdfile P((void)); -#endif /* DEBUG */ - -/* - * Transfer vector - */ -struct refclock refclock_mx4200 = { - mx4200_start, mx4200_shutdown, mx4200_poll, - mx4200_control, mx4200_init, mx4200_buginfo, NOFLAGS -}; - -/* - * mx4200_init - initialize internal mx4200 driver data - */ -static void -mx4200_init() -{ - register int i; - /* - * Just zero the data arrays - */ - memset((char *)mx4200units, 0, sizeof mx4200units); - memset((char *)unitinuse, 0, sizeof unitinuse); - - /* - * Initialize fudge factors to default. - */ - for (i = 0; i < MAXUNITS; i++) { - fudgefactor[i].l_ui = 0; - fudgefactor[i].l_uf = DEFFUDGETIME; - stratumtouse[i] = 0; - sloppyclockflag[i] = 0; - memcpy((char *)&refid[i], MX4200REFID, 4); - } -} - -#ifdef DEBUG -static char dfile[] = "/var/tmp/MX4200.debug"; -static FILE *df = NULL; - -static void -opendfile(create) - int create; -{ - if (!create && access(dfile, F_OK) < 0) { - syslog(LOG_ERR, "mx4200: open %s: %m", dfile); - return; - } - df = fopen(dfile, "a"); - if (df == NULL) - syslog(LOG_ERR, "mx4200: open %s: %m", dfile); - else if (setvbuf(df, NULL, _IOLBF, 0) < 0) - syslog(LOG_ERR, "mx4200: setvbuf %s: %m", dfile); -} - -static void -checkdfile() -{ - - if (df == NULL) - return; - - if (access(dfile, F_OK) < 0) { - fclose(df); - opendfile(1); - } -} - -#endif - - -/* - * mx4200_start - open the MX4200 devices and initialize data for processing - */ -static int -mx4200_start(unit, peer) - u_int unit; - struct peer *peer; -{ - register struct mx4200unit *mx4200; - register int i; - int fd232; - char mx4200dev[20]; - - /* - * Check configuration info - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "mx4200_start: unit %d invalid", unit); - return (0); - } - if (unitinuse[unit]) { - syslog(LOG_ERR, "mx4200_start: unit %d in use", unit); - return (0); - } - - /* - * Open serial port - */ - (void) sprintf(mx4200dev, MX4200232, unit); - fd232 = open(mx4200dev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, - "mx4200_start: open of %s: %m", mx4200dev); - return (0); - } - -#if defined(HAVE_SYSV_TTYS) - /* - * System V serial line parameters (termio interface) - * - */ - { struct termio ttyb; - if (ioctl(fd232, TCGETA, &ttyb) < 0) { - syslog(LOG_ERR, - "mx4200_start: ioctl(%s, TCGETA): %m", mx4200dev); - goto screwed; - } - ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyb.c_oflag = 0; - ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyb.c_lflag = ICANON; - ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0'; - if (ioctl(fd232, TCSETA, &ttyb) < 0) { - syslog(LOG_ERR, - "mx4200_start: ioctl(%s, TCSETA): %m", mx4200dev); - goto screwed; - } - } -#endif /* HAVE_SYSV_TTYS */ -#if defined(HAVE_TERMIOS) - /* - * POSIX serial line parameters (termios interface) - * - * The MX4200CLK option provides timestamping at the driver level. - * It requires the tty_clk streams module. - * - * The MX4200PPS option provides timestamping at the driver level. - * It uses a 1-pps signal and level converter (gadget box) and - * requires the ppsclock streams module and SunOS 4.1.1 or - * later. - */ - { struct termios ttyb, *ttyp; - - ttyp = &ttyb; - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, - "mx4200_start: tcgetattr(%s): %m", mx4200dev); - goto screwed; - } - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_oflag = 0; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, - "mx4200_start: tcsetattr(%s): %m", mx4200dev); - goto screwed; - } - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, - "mx4200_start: tcflush(%s): %m", mx4200dev); - goto screwed; - } - } -#endif /* HAVE_TERMIOS */ -#ifdef STREAM -#if defined(MX4200CLK) - if (ioctl(fd232, I_PUSH, "clk") < 0) - syslog(LOG_ERR, - "mx4200_start: ioctl(%s, I_PUSH, clk): %m", mx4200dev); - if (ioctl(fd232, CLK_SETSTR, "\n") < 0) - syslog(LOG_ERR, - "mx4200_start: ioctl(%s, CLK_SETSTR): %m", mx4200dev); -#endif /* MX4200CLK */ -#if defined(MX4200PPS) - if (ioctl(fd232, I_PUSH, "ppsclock") < 0) - syslog(LOG_ERR, - "mx4200_start: ioctl(%s, I_PUSH, ppsclock): %m", mx4200dev); - else - fdpps = fd232; -#endif /* MX4200PPS */ -#endif /* STREAM */ -#if defined(HAVE_BSD_TTYS) - /* - * 4.3bsd serial line parameters (sgttyb interface) - * - * The MX4200CLK option provides timestamping at the driver level. - * It requires the tty_clk line discipline and 4.3bsd or later. - */ - { struct sgttyb ttyb; -#if defined(MX4200CLK) - int ldisc = CLKLDISC; -#endif /* MX4200CLK */ - - if (ioctl(fd232, TIOCGETP, &ttyb) < 0) { - syslog(LOG_ERR, - "mx4200_start: ioctl(%s, TIOCGETP): %m", mx4200dev); - goto screwed; - } - ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232; -#if defined(MX4200CLK) - ttyb.sg_erase = ttyb.sg_kill = '\r'; - ttyb.sg_flags = RAW; -#else - ttyb.sg_erase = ttyb.sg_kill = '\0'; - ttyb.sg_flags = EVENP|ODDP|CRMOD; -#endif /* MX4200CLK */ - if (ioctl(fd232, TIOCSETP, &ttyb) < 0) { - syslog(LOG_ERR, - "mx4200_start: ioctl(%s, TIOCSETP): %m", mx4200dev); - goto screwed; - } -#if defined(MX4200CLK) - if (ioctl(fd232, TIOCSETD, &ldisc) < 0) { - syslog(LOG_ERR, - "mx4200_start: ioctl(%s, TIOCSETD): %m",mx4200dev); - goto screwed; - } -#endif /* MX4200CLK */ - } -#endif /* HAVE_BSD_TTYS */ - - /* - * Allocate unit structure - */ - if (mx4200units[unit] != 0) { - mx4200 = mx4200units[unit]; /* The one we want is okay */ - } else { - for (i = 0; i < MAXUNITS; i++) { - if (!unitinuse[i] && mx4200units[i] != 0) - break; - } - if (i < MAXUNITS) { - /* - * Reclaim this one - */ - mx4200 = mx4200units[i]; - mx4200units[i] = 0; - } else { - mx4200 = (struct mx4200unit *) - emalloc(sizeof(struct mx4200unit)); - } - } - - memset((char *)mx4200, 0, sizeof(struct mx4200unit)); - mx4200units[unit] = mx4200; - - /* - * Set up the structures - */ - mx4200->peer = peer; - mx4200->unit = (u_char)unit; - mx4200->timestarted = current_time; - - mx4200->io.clock_recv = mx4200_receive; - mx4200->io.srcclock = (caddr_t)mx4200; - mx4200->io.datalen = 0; - mx4200->io.fd = fd232; - if (!io_addclock(&mx4200->io)) - goto screwed; - - /* - * All done. Initialize a few random peer variables, then - * return success. - */ - peer->precision = MX4200PRECISION; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - unitinuse[unit] = 1; - - /* Insure the receiver is properly configured */ - mx4200_config(mx4200); - -#ifdef DEBUG - opendfile(0); -#endif - return (1); - - /* - * Something broke; abandon ship - */ -screwed: - (void) close(fd232); - return (0); -} - -/* - * mx4200_shutdown - shut down a MX4200 clock - */ -static void -mx4200_shutdown(unit) - int unit; -{ - register struct mx4200unit *mx4200; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "mx4200_shutdown: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "mx4200_shutdown: unit %d not in use", unit); - return; - } - - /* - * Tell the I/O module to turn us off. We're history. - */ - mx4200 = mx4200units[unit]; - io_closeclock(&mx4200->io); - unitinuse[unit] = 0; -} - -static void -mx4200_config(mx4200) - register struct mx4200unit *mx4200; -{ - register int fd = mx4200->io.fd; - -syslog(LOG_DEBUG, "mx4200_config"); - - /* Zero the output list (do it twice to flush possible junk) */ - mx4200_send(fd, "%s,%03d,,%d,,,,,,", pmvxg, PMVXG_S_PORTCONF, 1); - mx4200_send(fd, "%s,%03d,,%d,,,,,,", pmvxg, PMVXG_S_PORTCONF, 1); - - /* Switch to 2d mode */ - mx4200_send(fd, "%s,%03d,%d,,%.1f,%.1f,,%d,%d,%c,%d", - pmvxg, PMVXG_S_INITMODEB, - 2, /* 2d mode */ - 0.1, /* hor accel fact as per Steve */ - 0.1, /* ver accel fact as per Steve */ - 10, /* hdop limit as per Steve */ - 5, /* elevation limit as per Steve */ - 'U', /* time output mode */ - 0); /* local time offset from gmt */ - - /* Configure time recovery */ - mx4200_send(fd, "%s,%03d,%c,%c,%c,%d,%d,%d,", - pmvxg, PMVXG_S_TRECOVCONF, -#ifdef notdef - 'K', /* known position */ - 'D', /* dynamic position */ -#else - 'S', /* static position */ -#endif - 'U', /* steer clock to gps time */ - 'A', /* always output time pulse */ - 500, /* max time error in ns */ - 0, /* user bias in ns */ - 1); /* output to control port */ -} - -/* - * mx4200_report_event - note the occurrence of an event - */ -static void -mx4200_report_event(mx4200, code) - struct mx4200unit *mx4200; - int code; -{ - struct peer *peer; - - peer = mx4200->peer; - if (mx4200->status != (u_char)code) { - mx4200->status = (u_char)code; - if (code != CEVNT_NOMINAL) - mx4200->lastevent = (u_char)code; - syslog(LOG_INFO, - "mx4200 clock %s event %x", ntoa(&peer->srcadr), code); - } -} - -/* - * mx4200_poll - mx4200 watchdog routine - */ -static void -mx4200_poll(unit, peer) - int unit; - struct peer *peer; -{ - register struct mx4200unit *mx4200; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "mx4200_poll: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "mx4200_poll: unit %d not used", unit); - return; - } - - mx4200 = mx4200units[unit]; - if ((current_time - mx4200->lasttime) > 150) { - mx4200_event(mx4200, CEVNT_FAULT); - - /* Request a status message which should trigger a reconfig */ - mx4200_send(mx4200->io.fd, "%s,%03d", "CDGPQ", PMVXG_D_STATUS); - syslog(LOG_DEBUG, "mx4200_poll: request status"); - } -} - -static const char char2hex[] = "0123456789ABCDEF"; - -/* - * mx4200_receive - receive gps data - */ -static void -mx4200_receive(rbufp) - struct recvbuf *rbufp; -{ - register struct mx4200unit *mx4200; - register char *dpt, *cp; - register U_LONG tmp_ui; - register U_LONG tmp_uf; - register U_LONG gpstime; - struct ppsclockev ev; - register struct calendar *jt; - struct calendar sjt; - register int n; - int valid, leapsec; - register u_char ck; - - mx4200 = (struct mx4200unit *)rbufp->recv_srcclock; - -#ifdef DEBUG - if (debug > 3) - printf("mx4200_receive: nsamples = %d\n", mx4200->nsamples); -#endif - - /* Record the time of this event */ - mx4200->lasttime = current_time; - - /* Get the pps value */ - if (ioctl(mx4200->io.fd, CIOGETEV, (char *)&ev) < 0) { - /* XXX Actually, if this fails, we're pretty much screwed */ -#ifdef DEBUG - if (debug) { - fprintf(stderr, "mx4200_receive: "); - perror("CIOGETEV"); - } -#endif - mx4200->reason = PPSREASON + 1; - mx4200_event(mx4200, CEVNT_FAULT); - mx4200_reset(mx4200); - return; - } - tmp_ui = ev.tv.tv_sec + (U_LONG)JAN_1970; - TVUTOTSF(ev.tv.tv_usec, tmp_uf); - - /* Get buffer and length; sock away last timecode */ - n = rbufp->recv_length; - dpt = rbufp->recv_buffer; - if (n <= 1) - return; - mx4200->lencode = n; - memmove(mx4200->lastcode, dpt, n); - - /* - * We expect to see something like: - * - * $PMVXG,830,T,1992,07,09,04:18:34,U,S,-02154,00019,000000,00*1D\n - * - * Reject if any important landmarks are missing. - */ - cp = dpt + n - 4; - if (cp < dpt || *dpt != '$' || cp[0] != '*' || cp[3] != '\n') { -#ifdef DEBUG - if (debug) - printf("mx4200_receive: bad format\n"); -#endif - mx4200->badformat++; - mx4200->reason = PPSREASON + 2; - mx4200_event(mx4200, CEVNT_BADREPLY); - mx4200_reset(mx4200); - return; - } - - /* Check checksum */ - ck = cksum(&dpt[1], n - 5); - if (char2hex[ck >> 4] != cp[1] || char2hex[ck & 0xf] != cp[2]) { -#ifdef DEBUG - if (debug) - printf("mx4200_receive: bad checksum\n"); -#endif - mx4200->badformat++; - mx4200->reason = PPSREASON + 3; - mx4200_event(mx4200, CEVNT_BADREPLY); - mx4200_reset(mx4200); - return; - } - - /* Truncate checksum (and the buffer for that matter) */ - *cp = '\0'; - - /* Leap second debugging stuff */ - if ((leap_hoursfromleap && !leap_happened) || leap_debug > 0) { - /* generate reports for awhile after leap */ - if (leap_hoursfromleap && !leap_happened) - leap_debug = 3600; - else - --leap_debug; - syslog(LOG_INFO, "mx4200 leap: %s \"%s\"", - umfptoa(tmp_ui, tmp_uf, 6), dpt); - } - - /* Parse time recovery message */ - jt = &sjt; - if ((cp = mx4200_parse(dpt, jt, &valid, &leapsec)) != NULL) { - /* Configure the receiver if necessary */ - if (mx4200_needconf(dpt)) - mx4200_config(mx4200); -#ifdef DEBUG - if (debug) - printf("mx4200_receive: mx4200_parse: %s\n", cp); -#endif - mx4200->badformat++; - mx4200->reason = PPSREASON + 5; - mx4200_event(mx4200, CEVNT_BADREPLY); - mx4200_reset(mx4200); - return; - } - - /* Setup leap second indicator */ - if (leapsec == 0) - mx4200->leap = LEAP_NOWARNING; - else if (leapsec == 1) - mx4200->leap = LEAP_ADDSECOND; - else if (leapsec == -1) - mx4200->leap = LEAP_DELSECOND; - else - mx4200->leap = LEAP_NOTINSYNC; /* shouldn't happen */ - - /* Check parsed time (allow for possible leap seconds) */ - if (jt->second >= 61 || jt->minute >= 60 || jt->hour >= 24) { -#ifdef DEBUG - if (debug) { - printf("mx4200_receive: bad time %d:%02d:%02d", - jt->hour, jt->minute, jt->second); - if (leapsec != 0) - printf(" (leap %+d)", leapsec); - putchar('\n'); - } -#endif - mx4200->baddata++; - mx4200->reason = PPSREASON + 6; - mx4200_event(mx4200, CEVNT_BADTIME); - mx4200_reset(mx4200); - /* Eat the next pulse which the clock claims will be bad */ - mx4200->nsamples = -1; - return; - } - - /* Check parsed date */ - if (jt->monthday > 31 || jt->month > 12 || jt->year < 1900) { -#ifdef DEBUG - if (debug) - printf("mx4200_receive: bad date (%d/%d/%d)\n", - jt->monthday, jt->month, jt->year); -#endif - mx4200->baddata++; - mx4200->reason = PPSREASON + 7; - mx4200_event(mx4200, CEVNT_BADDATE); - mx4200_reset(mx4200); - return; - } - - /* Convert to ntp time */ - gpstime = caltontp(jt); - - /* The gps message describes the *next* pulse; pretend it's this one */ - --gpstime; - - /* Debugging */ -#ifdef DEBUG - checkdfile(); - if (df != NULL) { - l_fp t; - - t.l_ui = gpstime; - t.l_uf = 0; - M_SUB(t.l_ui, t.l_uf, tmp_ui, tmp_uf); - fprintf(df, "%s\t%s", - umfptoa(tmp_ui, tmp_uf, 6), mfptoa(t.l_ui, t.l_uf, 6)); - if (debug > 3) - fprintf(df, "\t(gps: %lu)", gpstime); - if (leapsec != 0) - fprintf(df, "\t(leap sec %+d)", leapsec); - if (!valid) - fprintf(df, "\t(pulse not valid)"); - fputc('\n', df); - } -#endif - - /* Check pps serial number against last one */ - if (mx4200->lastserial + 1 != ev.serial && mx4200->lastserial != 0) { -#ifdef DEBUG - if (debug) { - if (ev.serial == mx4200->lastserial) - printf("mx4200_receive: no new pps event\n"); - else - printf("mx4200_receive: missed %d pps events\n", - ev.serial - mx4200->lastserial - 1); - } -#endif - mx4200->reason = PPSREASON + 8; - mx4200_event(mx4200, CEVNT_FAULT); - mx4200_reset(mx4200); - /* fall through and this one collect as first sample */ - } - mx4200->lastserial = ev.serial; - -/* - * XXX - * Since this message is for the next pulse, it's really the next pulse - * that the clock might be telling us will be invalid. - */ - /* Toss if not designated "valid" by the gps */ - if (!valid) { -#ifdef DEBUG - if (debug) - printf("mx4200_receive: pps not valid\n"); -#endif - mx4200->reason = PPSREASON + 9; - mx4200_event(mx4200, CEVNT_BADTIME); - mx4200_reset(mx4200); - return; - } - - /* Copy time into mx4200unit struct */ - /* XXX (why?) */ - mx4200->year = jt->year; - mx4200->monthday = jt->monthday; - mx4200->hour = jt->hour; - mx4200->minute = jt->minute; - mx4200->second = jt->second; - - /* Sock away the GPS and UNIX timesamples */ - n = mx4200->nsamples++; - if (n < 0) - return; /* oops, this pulse is bad */ - mx4200->gpssamples[n] = gpstime; - mx4200->unixsamples[n].l_ui = mx4200->lastsampletime.l_ui = tmp_ui; - mx4200->unixsamples[n].l_uf = mx4200->lastsampletime.l_uf = tmp_uf; - if (mx4200->nsamples >= NSTAMPS) { - /* - * Here we've managed to complete an entire NSTAMPS - * second cycle without major mishap. Process what has - * been received. - */ - mx4200_process(mx4200); - mx4200_reset(mx4200); - } -} - -/* Compare two l_fp's, used with qsort() */ -static int -mx4200_cmpl_fp(p1, p2) - register void *p1, *p2; -{ - - if (!L_ISGEQ((l_fp *)p1, (l_fp *)p2)) - return (-1); - if (L_ISEQU((l_fp *)p1, (l_fp *)p2)) - return (0); - return (1); -} - -/* - * mx4200_process - process a pile of samples from the clock - */ -static void -mx4200_process(mx4200) - struct mx4200unit *mx4200; -{ - register int i, n; - register l_fp *fp, *op; - register U_LONG *lp; - l_fp off[NSTAMPS]; - register U_LONG tmp_ui, tmp_uf; - register U_LONG date_ui, date_uf; - u_fp dispersion; - - /* Compute offsets from the raw data. */ - fp = mx4200->unixsamples; - op = off; - lp = mx4200->gpssamples; - for (i = 0; i < NSTAMPS; ++i, ++lp, ++op, ++fp) { - op->l_ui = *lp; - op->l_uf = 0; - L_SUB(op, fp); - } - - /* Sort offsets into ascending order. */ - qsort((char *)off, NSTAMPS, sizeof(l_fp), mx4200_cmpl_fp); - - /* - * Reject the furthest from the median until 8 samples left - */ - i = 0; - n = NSTAMPS; - while ((n - i) > 8) { - tmp_ui = off[n-1].l_ui; - tmp_uf = off[n-1].l_uf; - date_ui = off[(n+i)/2].l_ui; - date_uf = off[(n+i)/2].l_uf; - M_SUB(tmp_ui, tmp_uf, date_ui, date_uf); - M_SUB(date_ui, date_uf, off[i].l_ui, off[i].l_uf); - if (M_ISHIS(date_ui, date_uf, tmp_ui, tmp_uf)) { - /* - * reject low end - */ - i++; - } else { - /* - * reject high end - */ - n--; - } - } - - /* - * Compute the dispersion based on the difference between the - * extremes of the remaining offsets. - */ - tmp_ui = off[n-1].l_ui; - tmp_uf = off[n-1].l_uf; - M_SUB(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf); - dispersion = MFPTOFP(tmp_ui, tmp_uf); - - /* - * Now compute the offset estimate. If the sloppy clock - * flag is set, average the remainder, otherwise pick the - * median. - */ - if (sloppyclockflag[mx4200->unit]) { - tmp_ui = tmp_uf = 0; - while (i < n) { - M_ADD(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf); - i++; - } - M_RSHIFT(tmp_ui, tmp_uf); - M_RSHIFT(tmp_ui, tmp_uf); - M_RSHIFT(tmp_ui, tmp_uf); - i = 0; - off[0].l_ui = tmp_ui; - off[0].l_uf = tmp_uf; - } else { - i = (n + i) / 2; - } - - /* - * Add the default MX4200 QT delay into this. - */ -#ifdef notdef - L_ADDUF(&off[i], MX4200QTFUDGE); -#endif - - /* - * Done. Use lastref as the reference time and lastrec - * as the receive time. ** note this can result in tossing - * out the peer in the protocol module if lastref > lastrec, - * so last rec is used for both values - dlm *** - */ - refclock_receive(mx4200->peer, &off[i], - (s_fp)0, /* delay */ - dispersion, - &mx4200->unixsamples[NSTAMPS-1], /* reftime */ - &mx4200->unixsamples[NSTAMPS-1], /* rectime */ - mx4200->leap); - - mx4200_event(mx4200, CEVNT_NOMINAL); -} - -/* - * mx4200_control - set fudge factors, return statistics - */ -static void -mx4200_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct mx4200unit *mx4200; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "mx4200_control: unit %d invalid", unit); - return; - } - - if (in != 0) { - if (in->haveflags & CLK_HAVETIME1) - fudgefactor[unit] = in->fudgetime1; - if (in->haveflags & CLK_HAVEVAL1) - stratumtouse[unit] = (u_char)(in->fudgeval1); - if (in->haveflags & CLK_HAVEVAL2) - refid[unit] = in->fudgeval2; - if (in->haveflags & CLK_HAVEFLAG1) - sloppyclockflag[unit] = in->flags & CLK_FLAG1; - if (unitinuse[unit]) { - struct peer *peer; - - peer = mx4200units[unit]->peer; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - } - } - - if (out != 0) { - memset((char *)out, 0, sizeof (struct refclockstat)); - out->type = REFCLK_GPS_MX4200; - out->haveflags = CLK_HAVETIME1 | CLK_HAVEVAL1 | CLK_HAVEVAL2 | - CLK_HAVEFLAG1; - out->clockdesc = MX4200DESCRIPTION; - out->fudgetime1 = fudgefactor[unit]; - out->fudgeval1 = (LONG)stratumtouse[unit]; - out->fudgeval2 = refid[unit];; - out->flags = sloppyclockflag[unit]; - if (unitinuse[unit]) { - mx4200 = mx4200units[unit]; - out->lencode = mx4200->lencode; - out->lastcode = mx4200->lastcode; - out->lastevent = mx4200->lastevent; - out->currentstatus = mx4200->status; - - out->polls = 0; /* mx4200->polls; */ - out->noresponse = 0; /* mx4200->noresponse; */ - out->badformat = mx4200->badformat; - out->baddata = mx4200->baddata; - out->timereset = current_time - mx4200->timestarted; - } - } -} - -/* - * mx4200_buginfo - return clock dependent debugging info - */ -static void -mx4200_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ - register struct mx4200unit *mx4200; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "mx4200_buginfo: unit %d invalid", unit); - return; - } - - if (!unitinuse[unit]) - return; - mx4200 = mx4200units[unit]; - - memset((char *)bug, 0, sizeof(*bug)); - bug->nvalues = 10; - bug->ntimes = 2; - if (mx4200->lasttime != 0) - bug->values[0] = current_time - mx4200->lasttime; - else - bug->values[0] = 0; - bug->values[1] = (U_LONG)mx4200->reason; - bug->values[2] = (U_LONG)mx4200->year; - bug->values[3] = (U_LONG)mx4200->monthday; - bug->values[4] = (U_LONG)mx4200->hour; - bug->values[5] = (U_LONG)mx4200->minute; - bug->values[6] = (U_LONG)mx4200->second; -#ifdef notdef - bug->values[7] = mx4200->msec; - bug->values[8] = mx4200->noreply; - bug->values[9] = mx4200->yearstart; -#endif - bug->stimes = 0x1c; -#ifdef notdef - bug->times[0] = mx4200->lastref; - bug->times[1] = mx4200->lastrec; -#endif -} - -/* - * Returns true if the this is a status message. We use this as - * an indication that the receiver needs to be initialized. - */ -static int -mx4200_needconf(buf) - char *buf; -{ - register LONG v; - char *cp; - - cp = buf; - - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Record type */ - v = strtol(cp, &cp, 10); - if (v != PMVXG_D_STATUS) - return (0); - /* - * XXX - * Since we configure the receiver to not give us status - * messages and since the receiver outputs status messages by - * default after being reset to factory defaults when sent the - * "$PMVXG,018,C\r\n" message, any status message we get - * indicates the reciever needs to be initialized; thus, it is - * not necessary to decode the status message. - */ -#ifdef notdef - ++cp; - - /* Receiver status */ - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Number of satellites which should be visible */ - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Number of satellites being tracked */ - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Time since last NAV */ - if ((cp = strchr(cp, ',')) == NULL) - return (0); - ++cp; - - /* Initialization status */ - v = strtol(cp, &cp, 10); - if (v == 0) -#endif - return (1); -} - -/* Parse a mx4200 time recovery message. Returns a string if error */ -static char * -mx4200_parse(buf, jt, validp, leapsecp) - register char *buf; - register struct calendar *jt; - register int *validp, *leapsecp; -{ - register LONG v; - char *cp; - - cp = buf; - memset((char *)jt, 0, sizeof(*jt)); - - if ((cp = strchr(cp, ',')) == NULL) - return ("no rec-type"); - ++cp; - - /* Record type */ - v = strtol(cp, &cp, 10); - if (v != PMVXG_D_TRECOVOUT) - return ("wrong rec-type"); - - /* Pulse valid indicator */ - if (*cp++ != ',') - return ("no pulse-valid"); - if (*cp == 'T') - *validp = 1; - else if (*cp == 'F') - *validp = 0; - else - return ("bad pulse-valid"); - ++cp; - - /* Year */ - if (*cp++ != ',') - return ("no year"); - jt->year = strtol(cp, &cp, 10); - - /* Month of year */ - if (*cp++ != ',') - return ("no month"); - jt->month = strtol(cp, &cp, 10); - - /* Day of month */ - if (*cp++ != ',') - return ("no month day"); - jt->monthday = strtol(cp, &cp, 10); - - /* Hour */ - if (*cp++ != ',') - return ("no hour"); - jt->hour = strtol(cp, &cp, 10); - - /* Minute */ - if (*cp++ != ':') - return ("no minute"); - jt->minute = strtol(cp, &cp, 10); - - /* Second */ - if (*cp++ != ':') - return ("no second"); - jt->second = strtol(cp, &cp, 10); - - /* Time indicator */ - if (*cp++ != ',' || *cp++ == '\0') - return ("no time indicator"); - - /* Time recovery mode */ - if (*cp++ != ',' || *cp++ == '\0') - return ("no time mode"); - - /* Oscillator offset */ - if ((cp = strchr(cp, ',')) == NULL) - return ("no osc off"); - ++cp; - - /* Time mark error */ - if ((cp = strchr(cp, ',')) == NULL) - return ("no time mark err"); - ++cp; - - /* User time bias */ - if ((cp = strchr(cp, ',')) == NULL) - return ("no user bias"); - ++cp; - - /* Leap second flag */ - if ((cp = strchr(cp, ',')) == NULL) - return ("no leap"); - ++cp; - *leapsecp = strtol(cp, &cp, 10); - - return (NULL); -} - -/* Calculate the checksum */ -static u_char -cksum(cp, n) - register char *cp; - register u_int n; -{ - register u_char ck; - - for (ck = 0; n-- > 0; ++cp) - ck ^= *cp; - return (ck); -} - -static void -#if __STDC__ -mx4200_send(register int fd, const char *fmt, ...) -#else -mx4200_send(fd, fmt, va_alist) - register int fd; - const char *fmt; - va_dcl -#endif -{ - register char *cp; - register int n, m; - va_list ap; - char buf[1024]; - u_char ck; - -#if __STDC__ - va_start(ap, fmt); -#else - va_start(ap); -#endif - cp = buf; - *cp++ = '$'; -#ifdef notdef - /* BSD is rational */ - n = vsnprintf(cp, sizeof(buf) - 1, fmt, ap); -#else - /* SunOS sucks */ - (void)vsprintf(cp, fmt, ap); - n = strlen(cp); -#endif - ck = cksum(cp, n); - cp += n; - ++n; -#ifdef notdef - /* BSD is rational */ - n += snprintf(cp, sizeof(buf) - n - 5, "*%02X\r\n", ck); -#else - /* SunOS sucks */ - sprintf(cp, "*%02X\r\n", ck); - n += strlen(cp); -#endif - - m = write(fd, buf, n); - if (m < 0) - syslog(LOG_ERR, "mx4200_send: write: %m (%s)", buf); - else if (m != n) - syslog(LOG_ERR, "mx4200_send: write: %d != %d (%s)", m, n, buf); - va_end(ap); -} -#endif diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_omega.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_omega.c deleted file mode 100644 index 95a20a0..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_omega.c +++ /dev/null @@ -1,999 +0,0 @@ -/* - * refclock_omega - clock driver for the Kinemetrics Truetime OM-DC OMEGA - * receiver. - * - * Version 1.0 11-Dec-92 Steve Clift (clift@ml.csiro.au) - * Initial version, mostly lifted from refclock_goes.c. - * - * 1.1 03-May-93 Steve Clift - * Tarted up the sample filtering mechanism to give improved - * one-off measurements. Improved measurement dispersion code - * to account for accumulated drift when the clock loses lock. - * - */ - -#if defined(REFCLOCK) && (defined(OMEGA) || defined(OMEGACLK) || defined(OMEGAPPS)) - -#include <stdio.h> -#include <ctype.h> -#include <sys/time.h> - -#include "ntpd.h" -#include "ntp_io.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" - -#if defined(HAVE_BSD_TTYS) -#include <sgtty.h> -#endif /* HAVE_BSD_TTYS */ - -#if defined(HAVE_SYSV_TTYS) -#include <termio.h> -#endif /* HAVE_SYSV_TTYS */ - -#if defined(HAVE_TERMIOS) -#include <termios.h> -#endif -#if defined(STREAM) -#include <stropts.h> -#if defined(OMEGACLK) -#include <sys/clkdefs.h> -#endif /* OMEGACLK */ -#endif /* STREAM */ - -#if defined (OMEGAPPS) -#include <sys/ppsclock.h> -#endif /* OMEGAPPS */ - -#include "ntp_stdlib.h" - -/* - * Support for Kinemetrics Truetime OM-DC OMEGA Receiver - * - * Most of this code is copied from refclock_goes.c with thanks. - * - * the time code looks like follows; Send the clock a R or C and once per - * second a timestamp will appear that looks like this: - * ADDD:HH:MM:SSQCL - * A - control A - * Q Quality indication: indicates possible error of - * > >+- 5 seconds - * ? >+/- 500 milliseconds # >+/- 50 milliseconds - * * >+/- 5 milliseconds . >+/- 1 millisecond - * A-H less than 1 millisecond. Character indicates which station - * is being received as follows: - * A = Norway, B = Liberia, C = Hawaii, D = North Dakota, - * E = La Reunion, F = Argentina, G = Australia, H = Japan. - * C - Carriage return - * L - Line feed - * The carriage return start bit begins on 0 seconds and extends to 1 bit time. - */ - -/* - * Definitions - */ -#define MAXUNITS 4 /* max number of OMEGA units */ -#define OMEGA232 "/dev/omega%d" -#define SPEED232 B9600 /* 9600 baud */ - -/* - * Radio interface parameters - */ -#define OMEGADESCRIPTION "Kinemetrics OM-DC OMEGA Receiver" /* who we are */ -#define OMEGAMAXDISPERSE (FP_SECOND/32) /* max allowed sample dispersion */ -#define OMEGAPRECISION (-10) /* precision assumed (about 1 ms) */ -#define OMEGAREFID "VLF\0" /* reference id */ -#define LENOMEGA 13 /* length of standard response */ -#define GMT 0 /* hour offset from Greenwich */ -#define NSTAMPS 9 /* samples collected when polled */ -#define NSKEEP 5 /* samples to keep after discards */ -#define BMAX 50 /* timecode buffer length */ - -/* - * The OM-DC puts out the start bit of the <CR> on the second, but - * we see the result after the <LF> is received, about 2ms later at - * 9600 baud. Use this as the default fudge time, and let the user - * fiddle it to account for driver latency etc. - */ -#define DEFFUDGETIME 0x00830000 /* default fudge time (~2ms) */ - -/* - * Clock drift errors as u_fp values. - */ -#define U_FP5000MS (5*FP_SECOND) /* 5 seconds */ -#define U_FP500MS (FP_SECOND/2) /* 500 msec */ -#define U_FP50MS (FP_SECOND/20) /* 50 msec */ -#define U_FP5MS (FP_SECOND/200) /* 5 msec */ - -/* - * Station codes - */ -#define STATION_NONE 0 -#define STATION_NORWAY 1 -#define STATION_LIBERIA 2 -#define STATION_HAWAII 3 -#define STATION_N_DAKOTA 4 -#define STATION_LA_REUNION 5 -#define STATION_ARGENTINA 6 -#define STATION_AUSTRALIA 7 -#define STATION_JAPAN 8 - -/* - * Hack to avoid excercising the multiplier. I have no pride. - */ -#define MULBY10(x) (((x)<<3) + ((x)<<1)) - -/* - * Imported from the timer module - */ -extern U_LONG current_time; -extern struct event timerqueue[]; - -/* - * Imported from ntp_loopfilter module - */ -extern int fdpps; /* pps file descriptor */ - -/* - * Imported from ntpd module - */ -extern int debug; /* global debug flag */ - -/* - * OMEGA unit control structure - */ -struct omegaunit { - struct peer *peer; /* associated peer structure */ - struct refclockio io; /* given to the I/O handler */ - l_fp lastrec; /* last receive time */ - l_fp lastref; /* last timecode time */ - l_fp offset[NSTAMPS]; /* recent sample offsets */ - char lastcode[BMAX]; /* last timecode received */ - u_short station; /* which station we're locked to */ - u_short polled; /* Hand in a time sample? */ - U_LONG coderecv; /* timecodes received */ - u_char lencode; /* length of last timecode */ - U_LONG lasttime; /* last time clock heard from */ - u_char unit; /* unit number for this guy */ - u_char status; /* clock status */ - u_char lastevent; /* last clock event */ - u_char reason; /* reason for last failure */ - u_char year; /* year of eternity */ - u_short day; /* day of year */ - u_char hour; /* hour of day */ - u_char minute; /* minute of hour */ - u_char second; /* seconds of minute */ - u_char leap; /* leap indicators */ - u_short msec; /* millisecond of second */ - u_char quality; /* quality char from last timecode */ - U_LONG yearstart; /* start of current year */ - /* - * Status tallies - */ - U_LONG polls; /* polls sent */ - U_LONG noreply; /* no replies to polls */ - U_LONG badformat; /* bad format */ - U_LONG baddata; /* bad data */ - U_LONG timestarted; /* time we started this */ -}; - -/* - * Data space for the unit structures. Note that we allocate these on - * the fly, but never give them back. - */ -static struct omegaunit *omegaunits[MAXUNITS]; -static u_char unitinuse[MAXUNITS]; - -/* - * Keep the fudge factors separately so they can be set even - * when no clock is configured. - */ -static l_fp fudgefactor1[MAXUNITS]; -static l_fp fudgefactor2[MAXUNITS]; -static u_char stratumtouse[MAXUNITS]; -static u_char readonlyclockflag[MAXUNITS]; -static U_LONG refid[MAXUNITS]; - -/* - * Function prototypes - */ -static void omega_init P((void)); -static int omega_start P((u_int, struct peer *)); -static void omega_shutdown P((int)); -static void omega_report_event P((struct omegaunit *, int)); -static void omega_receive P((struct recvbuf *)); -static char omega_process P((struct omegaunit *, l_fp *, u_fp *)); -static void omega_poll P((int, struct peer *)); -static void omega_control P((u_int, struct refclockstat *, struct refclockstat *)); -static void omega_buginfo P((int, struct refclockbug *)); -static void omega_send P((struct omegaunit *, char *)); - -/* - * Transfer vector - */ -struct refclock refclock_omega = { - omega_start, omega_shutdown, omega_poll, - omega_control, omega_init, omega_buginfo, NOFLAGS -}; - -/* - * omega_init - initialize internal omega driver data - */ -static void -omega_init() -{ - register int i; - /* - * Just zero the data arrays - */ - memset((char *)omegaunits, 0, sizeof omegaunits); - memset((char *)unitinuse, 0, sizeof unitinuse); - - /* - * Initialize fudge factors to default. - */ - for (i = 0; i < MAXUNITS; i++) { - fudgefactor1[i].l_ui = 0; - fudgefactor1[i].l_uf = DEFFUDGETIME; - fudgefactor2[i].l_ui = 0; - fudgefactor2[i].l_uf = 0; - stratumtouse[i] = 0; - readonlyclockflag[i] = 0; - memcpy((char *)&refid[i], OMEGAREFID, 4); - } -} - - -/* - * omega_start - open the OMEGA devices and initialize data for processing - */ -static int -omega_start(unit, peer) - u_int unit; - struct peer *peer; -{ - register struct omegaunit *omega; - register int i; - int fd232; - char omegadev[20]; - - /* - * Check configuration info - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR,"omega_start: unit %d invalid", unit); - return 0; - } - if (unitinuse[unit]) { - syslog(LOG_ERR, "omega_start: unit %d in use", unit); - return 0; - } - - /* - * Open serial port - */ - (void) sprintf(omegadev, OMEGA232, unit); - fd232 = open(omegadev, O_RDWR, 0777); - if (fd232 == -1) { - syslog(LOG_ERR, "omega_start: open of %s: %m", omegadev); - return 0; - } - -#if defined(HAVE_SYSV_TTYS) - /* - * System V serial line parameters (termio interface) - * - */ - { struct termio ttyb; - if (ioctl(fd232, TCGETA, &ttyb) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TCGETA): %m", omegadev); - goto screwed; - } - ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyb.c_oflag = 0; - ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyb.c_lflag = ICANON; - ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0'; - if (ioctl(fd232, TCSETA, &ttyb) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TCSETA): %m", omegadev); - goto screwed; - } - } -#endif /* HAVE_SYSV_TTYS */ -#if defined(HAVE_TERMIOS) - /* - * POSIX serial line parameters (termios interface) - * - * The OMEGACLK option provides timestamping at the driver level. - * It requires the tty_clk streams module. - * - * The OMEGAPPS option provides timestamping at the driver level. - * It uses a 1-pps signal and level converter (gadget box) and - * requires the ppsclock streams module and SunOS 4.1.1 or - * later. - */ - { struct termios ttyb, *ttyp; - - ttyp = &ttyb; - if (tcgetattr(fd232, ttyp) < 0) { - syslog(LOG_ERR, - "omega_start: tcgetattr(%s): %m", omegadev); - goto screwed; - } - ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL; - ttyp->c_oflag = 0; - ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD; - ttyp->c_lflag = ICANON; - ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0'; - if (tcsetattr(fd232, TCSANOW, ttyp) < 0) { - syslog(LOG_ERR, - "omega_start: tcsetattr(%s): %m", omegadev); - goto screwed; - } - if (tcflush(fd232, TCIOFLUSH) < 0) { - syslog(LOG_ERR, - "omega_start: tcflush(%s): %m", omegadev); - goto screwed; - } - } -#endif /* HAVE_TERMIOS */ -#ifdef STREAM -#if defined(OMEGACLK) - if (ioctl(fd232, I_PUSH, "clk") < 0) - syslog(LOG_ERR, - "omega_start: ioctl(%s, I_PUSH, clk): %m", omegadev); - if (ioctl(fd232, CLK_SETSTR, "\n") < 0) - syslog(LOG_ERR, - "omega_start: ioctl(%s, CLK_SETSTR): %m", omegadev); -#endif /* OMEGACLK */ -#if defined(OMEGAPPS) - if (ioctl(fd232, I_PUSH, "ppsclock") < 0) - syslog(LOG_ERR, - "omega_start: ioctl(%s, I_PUSH, ppsclock): %m", omegadev); - else - fdpps = fd232; -#endif /* OMEGAPPS */ -#endif /* STREAM */ -#if defined(HAVE_BSD_TTYS) - /* - * 4.3bsd serial line parameters (sgttyb interface) - * - * The OMEGACLK option provides timestamping at the driver level. - * It requires the tty_clk line discipline and 4.3bsd or later. - */ - { struct sgttyb ttyb; -#if defined(OMEGACLK) - int ldisc = CLKLDISC; -#endif /* OMEGACLK */ - - if (ioctl(fd232, TIOCGETP, &ttyb) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TIOCGETP): %m", omegadev); - goto screwed; - } - ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232; -#if defined(OMEGACLK) - ttyb.sg_erase = ttyb.sg_kill = '\r'; - ttyb.sg_flags = RAW; -#else - ttyb.sg_erase = ttyb.sg_kill = '\0'; - ttyb.sg_flags = EVENP|ODDP|CRMOD; -#endif /* OMEGACLK */ - if (ioctl(fd232, TIOCSETP, &ttyb) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TIOCSETP): %m", omegadev); - goto screwed; - } -#if defined(OMEGACLK) - if (ioctl(fd232, TIOCSETD, &ldisc) < 0) { - syslog(LOG_ERR, - "omega_start: ioctl(%s, TIOCSETD): %m",omegadev); - goto screwed; - } -#endif /* OMEGACLK */ - } -#endif /* HAVE_BSD_TTYS */ - - /* - * Allocate unit structure - */ - if (omegaunits[unit] != 0) { - omega = omegaunits[unit]; /* The one we want is okay */ - } else { - for (i = 0; i < MAXUNITS; i++) { - if (!unitinuse[i] && omegaunits[i] != 0) - break; - } - if (i < MAXUNITS) { - /* - * Reclaim this one - */ - omega = omegaunits[i]; - omegaunits[i] = 0; - } else { - omega = (struct omegaunit *) - emalloc(sizeof(struct omegaunit)); - } - } - memset((char *)omega, 0, sizeof(struct omegaunit)); - omegaunits[unit] = omega; - - /* - * Set up the structures - */ - omega->peer = peer; - omega->unit = (u_char)unit; - omega->timestarted = current_time; - omega->station = STATION_NONE; - - omega->io.clock_recv = omega_receive; - omega->io.srcclock = (caddr_t)omega; - omega->io.datalen = 0; - omega->io.fd = fd232; - if (!io_addclock(&omega->io)) { - goto screwed; - } - - /* - * All done. Initialize a few random peer variables, then - * return success. - */ - peer->precision = OMEGAPRECISION; - peer->rootdelay = 0; - peer->rootdispersion = 0; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - unitinuse[unit] = 1; - return 1; - - /* - * Something broke; abandon ship - */ -screwed: - (void) close(fd232); - return 0; -} - - -/* - * omega_shutdown - shut down a OMEGA clock - */ -static void -omega_shutdown(unit) - int unit; -{ - register struct omegaunit *omega; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "omega_shutdown: unit %d invalid", - unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "omega_shutdown: unit %d not in use", unit); - return; - } - - /* - * Tell the I/O module to turn us off. We're history. - */ - omega = omegaunits[unit]; - io_closeclock(&omega->io); - unitinuse[unit] = 0; -} - - -/* - * omega_report_event - note the occurance of an event - */ -static void -omega_report_event(omega, code) - struct omegaunit *omega; - int code; -{ - struct peer *peer; - - peer = omega->peer; - if (omega->status != (u_char)code) { - omega->status = (u_char)code; - if (code != CEVNT_NOMINAL) - omega->lastevent = (u_char)code; - syslog(LOG_INFO, - "omega clock %s event %x\n", ntoa(&peer->srcadr), code); - } -} - - -/* - * omega_receive - receive data from the serial interface on a - * Kinemetrics OM-DC OMEGA clock. - */ -static void -omega_receive(rbufp) - struct recvbuf *rbufp; -{ - register int i; - register struct omegaunit *omega; - register u_char *dpt; - register char *cp, *cpend; - register u_char *dpend; - l_fp tstmp; - u_fp dispersion, drift; - - /* - * Get the clock this applies to and a pointers to the data - */ - omega = (struct omegaunit *)rbufp->recv_srcclock; - dpt = (u_char *)&rbufp->recv_space; - -#ifndef PEDANTIC - /* - * The OM-DC outputs a timecode every second, but we only want - * a set of NSTAMPS timecodes when polled (every 64 seconds). - * Setting PEDANTIC causes a sanity check on every timecode. - */ - if (!omega->polled) - return; -#endif - - /* - * Edit timecode to remove control chars - */ - dpend = dpt + rbufp->recv_length; - cp = omega->lastcode; - cpend = omega->lastcode + BMAX - 1; - while (dpt < dpend && cp < cpend) { - if ((*cp = 0x7f & *dpt++) >= ' ') cp++; -#ifdef OMEGACLK - else if (*cp == '\r') { - if (dpend - dpt < 8) { - /* short timestamp */ - return; - } - if (!buftvtots(dpt,&omega->lastrec)) { - /* screwy timestamp */ - return; - } - dpt += 8; - } -#endif - } - *cp = '\0'; - omega->lencode = cp - omega->lastcode; - - if (omega->lencode == 0) - return; - else if (omega->lencode != LENOMEGA) { - omega->badformat++; - /* Sometimes get a lot of these, filling the log with noise */ - /* omega_report_event(omega, CEVNT_BADREPLY); */ - return; - } - -#ifndef OMEGACLK - omega->lastrec = rbufp->recv_time; -#endif - -#ifdef DEBUG - if (debug) - printf("omega: timecode %d %s\n", - omega->lencode, omega->lastcode); -#endif - - /* - * We get down to business, check the timecode format - * and decode its contents. - */ - cp = omega->lastcode; - omega->leap = 0; - /* - * Check timecode format. - */ - if (!isdigit(cp[0]) || /* day of year */ - !isdigit(cp[1]) || - !isdigit(cp[2]) || - cp[3] != ':' || /* <sp> */ - !isdigit(cp[4]) || /* hours */ - !isdigit(cp[5]) || - cp[6] != ':' || /* : separator */ - !isdigit(cp[7]) || /* minutes */ - !isdigit(cp[8]) || - cp[9] != ':' || /* : separator */ - !isdigit(cp[10]) || /* seconds */ - !isdigit(cp[11])) { - omega->badformat++; - omega_report_event(omega, CEVNT_BADREPLY); - return; - } - - /* - * Convert and check values. - */ - omega->year = 0; /* fake */ - omega->day = cp[0] - '0'; - omega->day = MULBY10(omega->day) + cp[1] - '0'; - omega->day = MULBY10(omega->day) + cp[2] - '0'; - omega->hour = MULBY10(cp[4] - '0') + cp[5] - '0'; - omega->minute = MULBY10(cp[7] - '0') + cp[8] - '0'; - omega->second = MULBY10(cp[10] - '0') + cp[11] - '0'; - omega->msec = 0; - - if (omega->day < 1 || omega->day > 366) { - omega->baddata++; - omega_report_event(omega, CEVNT_BADDATE); - return; - } - if (omega->hour > 23 || omega->minute > 59 || omega->second > 59) { - omega->baddata++; - omega_report_event(omega, CEVNT_BADTIME); - return; - } - - /* - * Check quality/station-id flag. The OM-DC should normally stay - * permanently locked to a station, and its time error should be less - * than 1 msec. If it loses lock for any reason, it makes a worst - * case drift estimate based on the internally stored stability figure - * for its reference oscillator. The stability figure can be adjusted - * by the user based on experience. The default value is 1E05, which - * is pretty bad - 2E07 is about right for the unit I have. - * - * The following is arbitrary, change it if you're offended: - * For errors less than 50 msec, just clear the station indicator. - * For errors greater than 50 msec, flag loss of sync and report a - * propagation problem. If the error is greater than 500 msec, - * something is dreadfully wrong - report a clock fault. - * - * In each case, we set a drift estimate which is used below as an - * estimate of measurement accuracy. - */ - omega->quality = cp[12]; - if (cp[12] == '>' || cp[12] == '?') { - /* Error 500 to 5000 msec */ - omega_report_event(omega, CEVNT_FAULT); - omega->leap = LEAP_NOTINSYNC; - omega->station = STATION_NONE; - drift = U_FP5000MS; - } else if (cp[12] == '#') { - /* Error 50 to 500 msec */ - omega_report_event(omega, CEVNT_PROP); - omega->leap = LEAP_NOTINSYNC; - omega->station = STATION_NONE; - drift = U_FP500MS; - } else if (cp[12] == '*') { - /* Error 5 to 50 msec */ - omega->lasttime = current_time; - omega->station = STATION_NONE; - drift = U_FP50MS; - } else if (cp[12] == '.') { - /* Error 1 to 5 msec */ - omega->lasttime = current_time; - omega->station = STATION_NONE; - drift = U_FP5MS; - } else if ('A' <= cp[12] && cp[12] <= 'H') { - /* Error less than 1 msec */ - omega->lasttime = current_time; - omega->station = cp[12] - 'A' + 1; - drift = 0; - } else { - omega->badformat++; - omega_report_event(omega, CEVNT_BADREPLY); - return; - } - -#ifdef PEDANTIC - /* If we haven't been polled, bail out. */ - if (!omega->polled) - return; -#endif - - /* - * Now, compute the reference time value. Use the heavy - * machinery for the seconds and the millisecond field for the - * fraction when present. - * - * this code does not yet know how to do the years - */ - tstmp = omega->lastrec; - if (!clocktime(omega->day, omega->hour, omega->minute, - omega->second, GMT, tstmp.l_ui, - &omega->yearstart, &omega->lastref.l_ui)) { - omega->baddata++; - omega_report_event(omega, CEVNT_BADTIME); - return; - } - MSUTOTSF(omega->msec, omega->lastref.l_uf); - - /* - * Adjust the read value by fudgefactor1 to correct RS232 delays. - */ - L_ADD(&omega->lastref, &fudgefactor1[omega->unit]); - - /* Carousel of NSTAMPS offsets. */ - i = omega->coderecv % NSTAMPS; - omega->offset[i] = omega->lastref; - L_SUB(&omega->offset[i], &tstmp); - omega->coderecv++; - - /* If we don't yet have a full set, return. */ - if (omega->coderecv < NSTAMPS) - return; - - /* - * Filter the samples, add the fudge factor and pass the - * offset and dispersion along. We use lastrec as both the - * reference time and receive time in order to avoid being cute, - * like setting the reference time later than the receive time, - * which may cause a paranoid protocol module to chuck out the - * data. If the sample filter chokes because of excessive - * dispersion or whatever, get a new sample (omega->coderecv - * is still >= NSTAMPS) and try again. - */ - if (!omega_process(omega, &tstmp, &dispersion)) { - omega->baddata++; - omega_report_event(omega, CEVNT_BADTIME); - return; - } - - /* - * Add accumulated clock drift to the dispersion to get - * a (hopefully) meaningful measurement accuracy estimate. - */ - dispersion += drift; - refclock_receive(omega->peer, &tstmp, GMT, dispersion, - &omega->lastrec, &omega->lastrec, omega->leap); - - /* - * We have succeeded in answering the poll. If the clock - * is locked, we're nominal. - */ - omega->polled = 0; - omega->coderecv = 0; - if (omega->leap != LEAP_NOTINSYNC) - omega_report_event(omega, CEVNT_NOMINAL); -} - - -/* - * omega_send - time to send the clock a signal to cough up a time sample - */ -static void -omega_send(omega,cmd) - struct omegaunit *omega; - char *cmd; -{ - if (!readonlyclockflag[omega->unit]) { - /* - * Send a command to the clock. - */ - if (write(omega->io.fd, cmd, 1) != 1) { - syslog(LOG_ERR, "omega_send: unit %d: %m", omega->unit); - omega_report_event(omega, CEVNT_FAULT); - } - } -} - - -/* - * Compare two l_fp's, used with qsort() - */ -static int -omega_cmpl_fp(p1, p2) - register void *p1, *p2; -{ - - if (!L_ISGEQ((l_fp *)p1, (l_fp *)p2)) - return (-1); - if (L_ISEQU((l_fp *)p1, (l_fp *)p2)) - return (0); - return (1); -} - - -/* - * omega_process - process a pile of samples from the clock - */ -static char -omega_process(omega, offset, dispersion) - struct omegaunit *omega; - l_fp *offset; - u_fp *dispersion; -{ - register int i, n; - register U_LONG med_ui, med_uf, tmp_ui, tmp_uf; - l_fp off[NSTAMPS]; - u_fp disp; - - /* Copy in offsets and sort into ascending order */ - for (i = 0; i < NSTAMPS; i++) - off[i] = omega->offset[i]; - qsort((char *)off, NSTAMPS, sizeof(l_fp), omega_cmpl_fp); - /* - * Reject the furthest from the median until NSKEEP samples remain - */ - i = 0; - n = NSTAMPS; - while ((n - i) > NSKEEP) { - tmp_ui = off[n-1].l_ui; - tmp_uf = off[n-1].l_uf; - med_ui = off[(n+i)/2].l_ui; - med_uf = off[(n+i)/2].l_uf; - M_SUB(tmp_ui, tmp_uf, med_ui, med_uf); - M_SUB(med_ui, med_uf, off[i].l_ui, off[i].l_uf); - if (M_ISHIS(med_ui, med_uf, tmp_ui, tmp_uf)) { - /* reject low end */ - i++; - } else { - /* reject high end */ - n--; - } - } - - /* - * Compute the dispersion based on the difference between the - * extremes of the remaining offsets. If this is greater than - * the allowed sample set dispersion, bail out. Otherwise, - * return the median offset and the dispersion. - */ - tmp_ui = off[n-1].l_ui; - tmp_uf = off[n-1].l_uf; - M_SUB(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf); - disp = MFPTOFP(tmp_ui, tmp_uf); - if (disp > OMEGAMAXDISPERSE) - return 0; - *offset = off[(n+1)/2]; - *dispersion = disp; - return 1; -} - - -/* - * omega_poll - called by the transmit procedure - */ -static void -omega_poll(unit, peer) - int unit; - struct peer *peer; -{ - struct omegaunit *omega; - - /* - * You don't need to poll this clock. It puts out timecodes - * once per second. If asked for a timestamp, take note. - * The next time a timecode comes in, it will be fed back. - */ - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "omega_poll: unit %d invalid", unit); - return; - } - if (!unitinuse[unit]) { - syslog(LOG_ERR, "omega_poll: unit %d not in use", unit); - return; - } - omega = omegaunits[unit]; - if ((current_time - omega->lasttime) > 150) { - omega->noreply++; - omega_report_event(omegaunits[unit], CEVNT_TIMEOUT); - } - - /* - * polled every 64 seconds. Ask OMEGA_RECEIVE to hand in a timestamp. - */ - omega->polled = 1; - omega->polls++; - /* - * Ensure the clock is running in the correct mode - on-second - * timestamps. - */ - omega_send(omega,"C"); -} - - -/* - * omega_control - set fudge factors, return statistics - */ -static void -omega_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct omegaunit *omega; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "omega_control: unit %d invalid", unit); - return; - } - - if (in != 0) { - if (in->haveflags & CLK_HAVETIME1) - fudgefactor1[unit] = in->fudgetime1; - if (in->haveflags & CLK_HAVETIME2) - fudgefactor2[unit] = in->fudgetime2; - if (in->haveflags & CLK_HAVEVAL1) - stratumtouse[unit] = (u_char)(in->fudgeval1); - if (in->haveflags & CLK_HAVEVAL2) - refid[unit] = in->fudgeval2; - if (in->haveflags & CLK_HAVEFLAG1) - readonlyclockflag[unit] = in->flags & CLK_FLAG1; - if (unitinuse[unit]) { - struct peer *peer; - - peer = omegaunits[unit]->peer; - peer->stratum = stratumtouse[unit]; - peer->refid = refid[unit]; - } - } - - if (out != 0) { - out->type = REFCLK_OMEGA_TRUETIME; - out->haveflags = CLK_HAVETIME1 | CLK_HAVETIME2 | CLK_HAVEVAL1 | - CLK_HAVEVAL2| CLK_HAVEFLAG1; - out->clockdesc = OMEGADESCRIPTION; - out->fudgetime1 = fudgefactor1[unit]; - out->fudgetime2 = fudgefactor2[unit]; - out->fudgeval1 = (LONG)stratumtouse[unit]; - out->fudgeval2 = refid[unit]; - out->flags = readonlyclockflag[unit]; - if (unitinuse[unit]) { - omega = omegaunits[unit]; - out->flags |= omega->station << 1; - out->lencode = omega->lencode; - out->lastcode = omega->lastcode; - out->timereset = current_time - omega->timestarted; - out->polls = omega->polls; - out->noresponse = omega->noreply; - out->badformat = omega->badformat; - out->baddata = omega->baddata; - out->lastevent = omega->lastevent; - out->currentstatus = omega->status; - } - } -} - - -/* - * omega_buginfo - return clock dependent debugging info - */ -static void -omega_buginfo(unit, bug) - int unit; - register struct refclockbug *bug; -{ - register struct omegaunit *omega; - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, "omega_buginfo: unit %d invalid", unit); - return; - } - - if (!unitinuse[unit]) - return; - omega = omegaunits[unit]; - - bug->nvalues = 11; - bug->ntimes = 5; - if (omega->lasttime != 0) - bug->values[0] = current_time - omega->lasttime; - else - bug->values[0] = 0; - bug->values[1] = (U_LONG)omega->reason; - bug->values[2] = (U_LONG)omega->year; - bug->values[3] = (U_LONG)omega->day; - bug->values[4] = (U_LONG)omega->hour; - bug->values[5] = (U_LONG)omega->minute; - bug->values[6] = (U_LONG)omega->second; - bug->values[7] = (U_LONG)omega->msec; - bug->values[8] = omega->noreply; - bug->values[9] = omega->yearstart; - bug->values[10] = omega->quality; - bug->stimes = 0x1c; - bug->times[0] = omega->lastref; - bug->times[1] = omega->lastrec; - bug->times[2] = omega->offset[0]; - bug->times[3] = omega->offset[1]; - bug->times[4] = omega->offset[2]; -} -#endif diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_parse.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_parse.c deleted file mode 100644 index 0d95d18..0000000 --- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_parse.c +++ /dev/null @@ -1,3605 +0,0 @@ -#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) -/* - * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp - * - * refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp - * - * generic reference clock driver for receivers - * - * make use of a STREAMS module for input processing where - * available and configured. Currently the STREAMS module - * is only available for Suns running SunOS 4.x and SunOS5.x (new - careful!) - * - * Copyright (c) 1989,1990,1991,1992,1993,1994 - * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - */ - -/* - * Defines: - * REFCLOCK && (PARSE||PARSEPPS) - * - enable this mess - * STREAM - allow for STREAMS modules - * ("parse", "ppsclocd", "ppsclock") - * PARSEPPS - provide PPS information to loopfilter (for - * backward compatibilty only) - * PPS - supply loopfilter with PPS samples (if configured) - * PPSPPS - notify loopfilter of PPS file descriptor - * - * FREEBSD_CONRAD - Make very cheap "Conrad DCF77 RS-232" gadget work - * with FreeBSD. - * TTY defines: - * HAVE_BSD_TTYS - currently unsupported - * HAVE_SYSV_TTYS - will use termio.h - * HAVE_TERMIOS - will use termios.h - * STREAM - will use streams and implies HAVE_TERMIOS - */ - -/* - * This driver currently provides the support for - * - Meinberg DCF77 receiver DCF77 PZF 535 (TCXO version) (DCF) - * - Meinberg DCF77 receiver DCF77 PZF 535 (OCXO version) (DCF) - * - Meinberg DCF77 receiver U/A 31 (DCF) - * - ELV DCF7000 (DCF) - * - Schmid clock (DCF) - * - Conrad DCF77 receiver module (DCF) - * - FAU DCF77 NTP receiver (TimeBrick) (DCF) - * - Meinberg GPS166 (GPS) - * - Trimble SV6 (GPS) - * - */ - -/* - * Meinberg receivers are connected via a 9600 baud serial line - * - * Receivers that do NOT support: - * - leap second indication - * DCF U/A 31 - * DCF PZF535 (stock version) - * - * so... - * - for PZF535 please ask for revision PZFUERL4.6 or higher - * (support for leap second and alternate antenna) - * - * The Meinberg GPS receiver also has a special NTP time stamp - * format. The firmware release is Uni-Erlangen. Only this - * firmware release is supported by xntp3. - * - * Meinberg generic receiver setup: - * output time code every second - * Baud rate 9600 7E2S - */ - -#include "ntpd.h" -#include "ntp_refclock.h" -#include "ntp_unixtime.h" -#include "ntp_control.h" - -#include <stdio.h> -#include <ctype.h> -#include <time.h> - -#include <sys/errno.h> -#ifdef FREEBSD_CONRAD -#include <sys/ioctl.h> -#endif -extern int errno; - -#if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS) -/* #error NEED TO DEFINE ONE OF "STREAM" or "HAVE_SYSV_TTYS" */ -NEED TO DEFINE ONE OF "STREAM", "HAVE_SYSV_TTYS" or "HAVE_TERMIOS" -#endif - -#ifdef STREAM -#include <sys/stream.h> -#include <sys/stropts.h> -#ifndef HAVE_TERMIOS -#define HAVE_TERMIOS -#endif -#endif - -#ifdef HAVE_TERMIOS -#include <termios.h> -#define TTY_GETATTR(_FD_, _ARG_) tcgetattr((_FD_), (_ARG_)) -#define TTY_SETATTR(_FD_, _ARG_) tcsetattr((_FD_), TCSANOW, (_ARG_)) -#undef HAVE_SYSV_TTYS -#endif - -#ifdef HAVE_SYSV_TTYS -#include <termio.h> -#define TTY_GETATTR(_FD_, _ARG_) ioctl((_FD_), TCGETA, (_ARG_)) -#define TTY_SETATTR(_FD_, _ARG_) ioctl((_FD_), TCSETAW, (_ARG_)) -#endif - -#ifdef HAVE_BSD_TTYS -/* #error CURRENTLY NO BSD TTY SUPPORT */ -CURRENTLY NO BSD TTY SUPPORT -#endif - -#if !defined(O_RDWR) /* XXX SOLARIS */ -#include <fcntl.h> -#endif /* !def(O_RDWR) */ - -#ifdef PPSPPS -#include <sys/ppsclock.h> -#endif - -#include "ntp_select.h" -#include "ntp_stdlib.h" - -#include "parse.h" - -#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__) -static char rcsid[]="refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp"; -#endif - -/**=========================================================================== - ** external interface to xntp mechanism - **/ - -static void parse_init P((void)); -static int parse_start P((u_int, struct peer *)); -static void parse_shutdown P((int)); -static void parse_poll P((int, struct peer *)); -static void parse_control P((u_int, struct refclockstat *, struct refclockstat *)); - -#define parse_buginfo noentry - -struct refclock refclock_parse = { - parse_start, - parse_shutdown, - parse_poll, - parse_control, - parse_init, - parse_buginfo, - NOFLAGS -}; - -/* - * the unit field selects for one the prototype to be used (lower 4 bits) - * and for the other the clock type in case of different but similar - * receivers (bits 4-6) - * the most significant bit encodes PPS support - * when the most significant bit is set the pps telegrams will be used - * for controlling the local clock (ntp_loopfilter.c) - * receiver specific configration data is kept in the clockinfo field. - */ - -/* - * Definitions - */ -#define MAXUNITS 4 /* maximum number of "PARSE" units permitted */ -#define PARSEDEVICE "/dev/refclock-%d" /* device to open %d is unit number */ - -/**=========================================================================== - ** function vector for dynamically binding io handling mechanism - **/ - -typedef struct bind -{ - char *bd_description; /* name of type of binding */ - int (*bd_init)(); /* initialize */ - void (*bd_end)(); /* end */ - int (*bd_setcs)(); /* set character size */ - int (*bd_disable)(); /* disable */ - int (*bd_enable)(); /* enable */ - int (*bd_getfmt)(); /* get format */ - int (*bd_setfmt)(); /* setfmt */ - int (*bd_getstat)(); /* getstat */ - int (*bd_setstat)(); /* setstat */ - int (*bd_timecode)(); /* get time code */ - void (*bd_receive)(); /* receive operation */ - void (*bd_poll)(); /* poll operation */ -} bind_t; - -#define PARSE_END(_X_) (*(_X_)->binding->bd_end)(_X_) -#define PARSE_SETCS(_X_, _CS_) (*(_X_)->binding->bd_setcs)(_X_, _CS_) -#define PARSE_ENABLE(_X_) (*(_X_)->binding->bd_enable)(_X_) -#define PARSE_DISABLE(_X_) (*(_X_)->binding->bd_disable)(_X_) -#define PARSE_GETFMT(_X_, _DCT_) (*(_X_)->binding->bd_getfmt)(_X_, _DCT_) -#define PARSE_SETFMT(_X_, _DCT_) (*(_X_)->binding->bd_setfmt)(_X_, _DCT_) -#define PARSE_GETSTAT(_X_, _DCT_) (*(_X_)->binding->bd_getstat)(_X_, _DCT_) -#define PARSE_SETSTAT(_X_, _DCT_) (*(_X_)->binding->bd_setstat)(_X_, _DCT_) -#define PARSE_GETTIMECODE(_X_, _DCT_) (*(_X_)->binding->bd_timecode)(_X_, _DCT_) -#define PARSE_POLL(_X_) (*(_X_)->binding->bd_poll)(_X_) - -/* - * io modes - */ -#define PARSE_F_NOPOLLONLY 0x0001 /* always do async io (possible PPS support via PARSE) */ -#define PARSE_F_POLLONLY 0x0002 /* never do async io (no PPS support via PARSE) */ -#define PARSE_F_PPSPPS 0x0004 /* use loopfilter PPS code (CIOGETEV) */ -#define PARSE_F_PPSONSECOND 0x0008 /* PPS pulses are on second */ - -/**=========================================================================== - ** refclock instance data - **/ - -struct parseunit -{ - /* - * XNTP management - */ - struct peer *peer; /* backlink to peer structure - refclock inactive if 0 */ - int fd; /* device file descriptor */ - u_char unit; /* encoded unit/type/PPS */ - - /* - * XNTP io - */ - struct refclockio io; /* io system structure (used in PPS mode) */ - bind_t *binding; /* io handling binding */ - - /* - * parse state - */ - parse_t parseio; /* io handling structure (user level parsing) */ - - /* - * type specific parameters - */ - struct clockinfo *parse_type; /* link to clock description */ - - /* - * clock specific configuration - */ - l_fp basedelay; /* clock local phase offset */ - l_fp ppsdelay; /* clock local pps phase offset */ - - /* - * clock state handling/reporting - */ - u_char flags; /* flags (leap_control) */ - u_char status; /* current status */ - u_char lastevent; /* last not NORMAL status */ - U_LONG lastchange; /* time (xntp) when last state change accured */ - U_LONG statetime[CEVNT_MAX+1]; /* accumulated time of clock states */ - struct event stattimer; /* statistics timer */ - U_LONG polls; /* polls from NTP protocol machine */ - U_LONG noresponse; /* number of expected but not seen datagrams */ - U_LONG badformat; /* bad format (failed format conversions) */ - U_LONG baddata; /* usually bad receive length, bad format */ - - u_char pollonly; /* 1 for polling only (no PPS mode) */ - u_char pollneeddata; /* 1 for receive sample expected in PPS mode */ - U_LONG laststatus; /* last packet status (error indication) */ - u_short lastformat; /* last format used */ - U_LONG lastsync; /* time (xntp) when clock was last seen fully synchronized */ - U_LONG timestarted; /* time (xntp) when peer clock was instantiated */ - U_LONG nosynctime; /* time (xntp) when last nosync message was posted */ - U_LONG lastmissed; /* time (xntp) when poll didn't get data (powerup heuristic) */ - U_LONG ppsserial; /* magic cookie for ppsclock serials (avoids stale ppsclock data) */ - parsetime_t time; /* last (parse module) data */ - void *localdata; /* optional local data */ -}; - - -/**=========================================================================== - ** Clockinfo section all parameter for specific clock types - ** includes NTP paramaters, TTY parameters and IO handling parameters - **/ - -static void poll_dpoll P((struct parseunit *)); -static void poll_poll P((struct parseunit *)); -static int poll_init P((struct parseunit *)); -static void poll_end P((struct parseunit *)); - -typedef struct poll_info -{ - U_LONG rate; /* poll rate - once every "rate" seconds - 0 off */ - char * string; /* string to send for polling */ - U_LONG count; /* number of charcters in string */ -} poll_info_t; - -#define NO_FLAGS 0 -#define NO_POLL (void (*)())0 -#define NO_INIT (int (*)())0 -#define NO_END (void (*)())0 -#define NO_DATA (void *)0 -#define NO_FORMAT "" -#define NO_PPSDELAY 0 - -#define DCF_ID "DCF" /* generic DCF */ -#define DCF_A_ID "DCFa" /* AM demodulation */ -#define DCF_P_ID "DCFp" /* psuedo random phase shift */ -#define GPS_ID "GPS" /* GPS receiver */ - -#define NOCLOCK_ROOTDELAY 0x00000000 -#define NOCLOCK_BASEDELAY 0x00000000 -#define NOCLOCK_DESCRIPTION ((char *)0) -#define NOCLOCK_MAXUNSYNC 0 -#define NOCLOCK_CFLAG 0 -#define NOCLOCK_IFLAG 0 -#define NOCLOCK_OFLAG 0 -#define NOCLOCK_LFLAG 0 -#define NOCLOCK_ID "TILT" -#define NOCLOCK_POLL NO_POLL -#define NOCLOCK_INIT NO_INIT -#define NOCLOCK_END NO_END -#define NOCLOCK_DATA NO_DATA -#define NOCLOCK_FORMAT NO_FORMAT -#define NOCLOCK_TYPE CTL_SST_TS_UNSPEC - -#define DCF_TYPE CTL_SST_TS_LF -#define GPS_TYPE CTL_SST_TS_UHF - -/* - * receiver specific constants - */ -#define MBG_CFLAG19200 (B19200|CS7|PARENB|CREAD|HUPCL) -#define MBG_CFLAG (B9600|CS7|PARENB|CREAD|HUPCL) -#define MBG_IFLAG (IGNBRK|IGNPAR|ISTRIP) -#define MBG_OFLAG 0 -#define MBG_LFLAG 0 -/* - * Meinberg DCF U/A 31 (AM) receiver - */ -#define DCFUA31_ROOTDELAY 0x00000D00 /* 50.78125ms */ -#define DCFUA31_BASEDELAY 0x02C00000 /* 10.7421875ms: 10 ms (+/- 3 ms) */ -#define DCFUA31_DESCRIPTION "Meinberg DCF U/A 31" -#define DCFUA31_MAXUNSYNC 60*30 /* only trust clock for 1/2 hour */ -#define DCFUA31_CFLAG MBG_CFLAG -#define DCFUA31_IFLAG MBG_IFLAG -#define DCFUA31_OFLAG MBG_OFLAG -#define DCFUA31_LFLAG MBG_LFLAG - -/* - * Meinberg DCF PZF535/TCXO (FM/PZF) receiver - */ -#define DCFPZF535_ROOTDELAY 0x00000034 /* 800us */ -#define DCFPZF535_BASEDELAY 0x00800000 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */ -#define DCFPZF535_DESCRIPTION "Meinberg DCF PZF 535/TCXO" -#define DCFPZF535_MAXUNSYNC 60*60*12 /* only trust clock for 12 hours - * @ 5e-8df/f we have accumulated - * at most 2.16 ms (thus we move to - * NTP synchronisation */ -#define DCFPZF535_CFLAG MBG_CFLAG -#define DCFPZF535_IFLAG MBG_IFLAG -#define DCFPZF535_OFLAG MBG_OFLAG -#define DCFPZF535_LFLAG MBG_LFLAG - - -/* - * Meinberg DCF PZF535/OCXO receiver - */ -#define DCFPZF535OCXO_ROOTDELAY 0x00000034 /* 800us (max error * 10) */ -#define DCFPZF535OCXO_BASEDELAY 0x00800000 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */ -#define DCFPZF535OCXO_DESCRIPTION "Meinberg DCF PZF 535/OCXO" -#define DCFPZF535OCXO_MAXUNSYNC 60*60*96 /* only trust clock for 4 days - * @ 5e-9df/f we have accumulated - * at most an error of 1.73 ms - * (thus we move to NTP synchronisation) */ -#define DCFPZF535OCXO_CFLAG MBG_CFLAG -#define DCFPZF535OCXO_IFLAG MBG_IFLAG -#define DCFPZF535OCXO_OFLAG MBG_OFLAG -#define DCFPZF535OCXO_LFLAG MBG_LFLAG - -/* - * Meinberg GPS166 receiver - */ -#define GPS166_ROOTDELAY 0x00000000 /* nothing here */ -#define GPS166_BASEDELAY 0x00800000 /* XXX to be fixed ! 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */ -#define GPS166_DESCRIPTION "Meinberg GPS166 receiver" -#define GPS166_MAXUNSYNC 0 /* this clock is immediately lost */ -#define GPS166_CFLAG MBG_CFLAG -#define GPS166_IFLAG MBG_IFLAG -#define GPS166_OFLAG MBG_OFLAG -#define GPS166_LFLAG MBG_LFLAG -#define GPS166_POLL NO_POLL -#define GPS166_INIT NO_INIT -#define GPS166_END NO_END -#define GPS166_DATA NO_DATA -#define GPS166_ID GPS_ID -#define GPS166_FORMAT NO_FORMAT - -/* - * ELV DCF7000 Wallclock-Receiver/Switching Clock (Kit) - * - * This is really not the hottest clock - but before you have nothing ... - */ -#define DCF7000_ROOTDELAY 0x00000364 /* 13 ms */ -#define DCF7000_BASEDELAY 0x67AE0000 /* 405 ms - slow blow */ -#define DCF7000_DESCRIPTION "ELV DCF7000" -#define DCF7000_MAXUNSYNC (60*5) /* sorry - but it just was not build as a clock */ -#define DCF7000_CFLAG (B9600|CS8|CREAD|PARENB|PARODD|CLOCAL|HUPCL) -#define DCF7000_IFLAG (IGNBRK) -#define DCF7000_OFLAG 0 -#define DCF7000_LFLAG 0 - -/* - * Schmid DCF Receiver Kit - * - * When the WSDCF clock is operating optimally we want the primary clock - * distance to come out at 300 ms. Thus, peer.distance in the WSDCF peer - * structure is set to 290 ms and we compute delays which are at least - * 10 ms long. The following are 290 ms and 10 ms expressed in u_fp format - */ -#define WS_POLLRATE 1 /* every second - watch interdependency with poll routine */ -#define WS_POLLCMD "\163" -#define WS_CMDSIZE 1 - -static poll_info_t wsdcf_pollinfo = { WS_POLLRATE, WS_POLLCMD, WS_CMDSIZE }; - -#define WSDCF_INIT poll_init -#define WSDCF_POLL poll_dpoll -#define WSDCF_END poll_end -#define WSDCF_DATA ((void *)(&wsdcf_pollinfo)) -#define WSDCF_ROOTDELAY 0X00004A3D /* ~ 290ms */ -#define WSDCF_BASEDELAY 0x028F5C29 /* ~ 10ms */ -#define WSDCF_DESCRIPTION "WS/DCF Receiver" -#define WSDCF_FORMAT "Schmid" -#define WSDCF_MAXUNSYNC (60*60) /* assume this beast hold at 1 h better than 2 ms XXX-must verify */ -#define WSDCF_CFLAG (B1200|CS8|CREAD|CLOCAL) -#define WSDCF_IFLAG 0 -#define WSDCF_OFLAG 0 -#define WSDCF_LFLAG 0 - -/* - * RAW DCF77 - input of DCF marks via RS232 - many variants - */ -#define RAWDCF_FLAGS PARSE_F_NOPOLLONLY -#define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */ -#define RAWDCF_FORMAT "RAW DCF77 Timecode" -#define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */ - -#ifdef FREEBSD_CONRAD -#define RAWDCF_CFLAG (CS8|CREAD|CLOCAL) -#else -#define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL) -#endif -#define RAWDCF_IFLAG 0 -#define RAWDCF_OFLAG 0 -#define RAWDCF_LFLAG 0 - -/* - * RAW DCF variants - */ -/* - * Conrad receiver - * - * simplest (cheapest) DCF clock - e. g. DCF77 receiver by Conrad - * (~40DM - roughly $30 ) followed by a level converter for RS232 - */ -#define CONRAD_BASEDELAY 0x420C49B0 /* ~258 ms - Conrad receiver @ 50 Baud on a Sun */ -#define CONRAD_DESCRIPTION "RAW DCF77 CODE (Conrad DCF77 receiver module)" - -/* - * TimeBrick receiver - */ -#define TIMEBRICK_BASEDELAY 0x35C29000 /* ~210 ms - TimeBrick @ 50 Baud on a Sun */ -#define TIMEBRICK_DESCRIPTION "RAW DCF77 CODE (TimeBrick)" - -/* - * Trimble SV6 GPS receiver - */ -#define TRIM_POLLRATE 0 /* only true direct polling */ -#define TRIM_POLLCMD ">QTM<" -#define TRIM_CMDSIZE 5 - -static poll_info_t trimble_pollinfo = { TRIM_POLLRATE, TRIM_POLLCMD, TRIM_CMDSIZE }; -static int trimble_init P((struct parseunit *)); - -#define TRIMBLESV6_CFLAG (B4800|CS8|CREAD) -#define TRIMBLESV6_IFLAG (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON) -#define TRIMBLESV6_OFLAG (OPOST|ONLCR) -#define TRIMBLESV6_LFLAG (ICANON|ECHOK) -#define TRIMBLESV6_FLAGS (PARSE_F_PPSPPS|PARSE_F_PPSONSECOND) -#define TRIMBLESV6_POLL poll_dpoll -#define TRIMBLESV6_INIT trimble_init -#define TRIMBLESV6_END poll_end -#define TRIMBLESV6_DATA ((void *)(&trimble_pollinfo)) -#define TRIMBLESV6_ID GPS_ID -#define TRIMBLESV6_FORMAT NO_FORMAT -#define TRIMBLESV6_ROOTDELAY 0x0 -#define TRIMBLESV6_BASEDELAY 0x0 -#define TRIMBLESV6_DESCRIPTION "Trimble SV6 GPS receiver" -#define TRIMBLESV6_MAXUNSYNC 0 -#define TRIMBLESV6_EOL '<' - -static struct clockinfo -{ - U_LONG cl_flags; /* operation flags (io modes) */ - void (*cl_poll)(); /* active poll routine */ - int (*cl_init)(); /* active poll init routine */ - void (*cl_end)(); /* active poll end routine */ - void *cl_data; /* local data area for "poll" mechanism */ - u_fp cl_rootdelay; /* rootdelay */ - U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional part */ - U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional part */ - char *cl_id; /* ID code (usually "DCF") */ - char *cl_description; /* device name */ - char *cl_format; /* fixed format */ - u_char cl_type; /* clock type (ntp control) */ - U_LONG cl_maxunsync; /* time to trust oscillator after loosing synch */ - U_LONG cl_cflag; /* terminal io flags */ - U_LONG cl_iflag; /* terminal io flags */ - U_LONG cl_oflag; /* terminal io flags */ - U_LONG cl_lflag; /* terminal io flags */ -} clockinfo[] = -{ /* 0. 0.0.128 - base offset for PPS support */ - { /* 127.127.8.<device> */ - NO_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - DCFPZF535_ROOTDELAY, - DCFPZF535_BASEDELAY, - NO_PPSDELAY, - DCF_P_ID, - DCFPZF535_DESCRIPTION, - NO_FORMAT, - DCF_TYPE, - DCFPZF535_MAXUNSYNC, - DCFPZF535_CFLAG, - DCFPZF535_IFLAG, - DCFPZF535_OFLAG, - DCFPZF535_LFLAG - }, - { /* 127.127.8.4+<device> */ - NO_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - DCFPZF535OCXO_ROOTDELAY, - DCFPZF535OCXO_BASEDELAY, - NO_PPSDELAY, - DCF_P_ID, - DCFPZF535OCXO_DESCRIPTION, - NO_FORMAT, - DCF_TYPE, - DCFPZF535OCXO_MAXUNSYNC, - DCFPZF535OCXO_CFLAG, - DCFPZF535OCXO_IFLAG, - DCFPZF535OCXO_OFLAG, - DCFPZF535OCXO_LFLAG - }, - { /* 127.127.8.8+<device> */ - NO_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - DCFUA31_ROOTDELAY, - DCFUA31_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - DCFUA31_DESCRIPTION, - NO_FORMAT, - DCF_TYPE, - DCFUA31_MAXUNSYNC, - DCFUA31_CFLAG, - DCFUA31_IFLAG, - DCFUA31_OFLAG, - DCFUA31_LFLAG - }, - { /* 127.127.8.12+<device> */ - NO_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - DCF7000_ROOTDELAY, - DCF7000_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - DCF7000_DESCRIPTION, - NO_FORMAT, - DCF_TYPE, - DCF7000_MAXUNSYNC, - DCF7000_CFLAG, - DCF7000_IFLAG, - DCF7000_OFLAG, - DCF7000_LFLAG - }, - { /* 127.127.8.16+<device> */ - NO_FLAGS, - WSDCF_POLL, - WSDCF_INIT, - WSDCF_END, - WSDCF_DATA, - WSDCF_ROOTDELAY, - WSDCF_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - WSDCF_DESCRIPTION, - WSDCF_FORMAT, - DCF_TYPE, - WSDCF_MAXUNSYNC, - WSDCF_CFLAG, - WSDCF_IFLAG, - WSDCF_OFLAG, - WSDCF_LFLAG - }, - { /* 127.127.8.20+<device> */ - RAWDCF_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - RAWDCF_ROOTDELAY, - CONRAD_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - CONRAD_DESCRIPTION, - RAWDCF_FORMAT, - DCF_TYPE, - RAWDCF_MAXUNSYNC, - RAWDCF_CFLAG, - RAWDCF_IFLAG, - RAWDCF_OFLAG, - RAWDCF_LFLAG - }, - { /* 127.127.8.24+<device> */ - RAWDCF_FLAGS, - NO_POLL, - NO_INIT, - NO_END, - NO_DATA, - RAWDCF_ROOTDELAY, - TIMEBRICK_BASEDELAY, - NO_PPSDELAY, - DCF_A_ID, - TIMEBRICK_DESCRIPTION, - RAWDCF_FORMAT, - DCF_TYPE, - RAWDCF_MAXUNSYNC, - RAWDCF_CFLAG, - RAWDCF_IFLAG, - RAWDCF_OFLAG, - RAWDCF_LFLAG - }, - { /* 127.127.8.28+<device> */ - NO_FLAGS, - GPS166_POLL, - GPS166_INIT, - GPS166_END, - GPS166_DATA, - GPS166_ROOTDELAY, - GPS166_BASEDELAY, - NO_PPSDELAY, - GPS166_ID, - GPS166_DESCRIPTION, - GPS166_FORMAT, - GPS_TYPE, - GPS166_MAXUNSYNC, - GPS166_CFLAG, - GPS166_IFLAG, - GPS166_OFLAG, - GPS166_LFLAG - }, - { /* 127.127.8.32+<device> */ - TRIMBLESV6_FLAGS, - TRIMBLESV6_POLL, - TRIMBLESV6_INIT, - TRIMBLESV6_END, - TRIMBLESV6_DATA, - TRIMBLESV6_ROOTDELAY, - TRIMBLESV6_BASEDELAY, - NO_PPSDELAY, - TRIMBLESV6_ID, - TRIMBLESV6_DESCRIPTION, - TRIMBLESV6_FORMAT, - GPS_TYPE, - TRIMBLESV6_MAXUNSYNC, - TRIMBLESV6_CFLAG, - TRIMBLESV6_IFLAG, - TRIMBLESV6_OFLAG, - TRIMBLESV6_LFLAG - } -}; - -static int ncltypes = sizeof(clockinfo) / sizeof(struct clockinfo); - -#define CL_REALTYPE(x) (((x) >> 2) & 0x1F) -#define CL_TYPE(x) ((CL_REALTYPE(x) >= ncltypes) ? ~0 : CL_REALTYPE(x)) -#define CL_PPS(x) ((x) & 0x80) -#define CL_UNIT(x) ((x) & 0x3) - -/* - * Other constant stuff - */ -#define PARSEHSREFID 0x7f7f08ff /* 127.127.8.255 refid for hi strata */ - -#define PARSENOSYNCREPEAT (10*60) /* mention uninitialized clocks all 10 minutes */ -#define PARSESTATISTICS (60*60) /* output state statistics every hour */ - -static struct parseunit *parseunits[MAXUNITS]; - -extern U_LONG current_time; -extern s_char sys_precision; -extern struct event timerqueue[]; -#ifdef PPSPPS -extern int fdpps; -#endif - -static int notice = 0; - -#define PARSE_STATETIME(parse, i) ((parse->status == i) ? parse->statetime[i] + current_time - parse->lastchange : parse->statetime[i]) - -static void parse_event P((struct parseunit *, int)); -static void parse_process P((struct parseunit *, parsetime_t *)); - -/**=========================================================================== - ** implementation of i/o handling methods - ** (all STREAM, partial STREAM, user level) - **/ - -/* - * define possible io handling methods - */ -#ifdef STREAM -static int ppsclock_init P((struct parseunit *)); -static int stream_init P((struct parseunit *)); -static void stream_nop P((struct parseunit *)); -static int stream_enable P((struct parseunit *)); -static int stream_disable P((struct parseunit *)); -static int stream_setcs P((struct parseunit *, parsectl_t *)); -static int stream_getfmt P((struct parseunit *, parsectl_t *)); -static int stream_setfmt P((struct parseunit *, parsectl_t *)); -static int stream_getstat P((struct parseunit *, parsectl_t *)); -static int stream_setstat P((struct parseunit *, parsectl_t *)); -static int stream_timecode P((struct parseunit *, parsectl_t *)); -static void stream_receive P((struct recvbuf *)); -static void stream_poll P((struct parseunit *)); -#endif - -static int local_init P((struct parseunit *)); -static void local_end P((struct parseunit *)); -static int local_nop P((struct parseunit *)); -static int local_setcs P((struct parseunit *, parsectl_t *)); -static int local_getfmt P((struct parseunit *, parsectl_t *)); -static int local_setfmt P((struct parseunit *, parsectl_t *)); -static int local_getstat P((struct parseunit *, parsectl_t *)); -static int local_setstat P((struct parseunit *, parsectl_t *)); -static int local_timecode P((struct parseunit *, parsectl_t *)); -static void local_receive P((struct recvbuf *)); -static void local_poll P((struct parseunit *)); - -static bind_t io_bindings[] = -{ -#ifdef STREAM - { - "parse STREAM", - stream_init, - stream_nop, - stream_setcs, - stream_disable, - stream_enable, - stream_getfmt, - stream_setfmt, - stream_getstat, - stream_setstat, - stream_timecode, - stream_receive, - stream_poll - }, - { - "ppsclock STREAM", - ppsclock_init, - local_end, - local_setcs, - local_nop, - local_nop, - local_getfmt, - local_setfmt, - local_getstat, - local_setstat, - local_timecode, - local_receive, - local_poll - }, -#endif - { - "normal", - local_init, - local_end, - local_setcs, - local_nop, - local_nop, - local_getfmt, - local_setfmt, - local_getstat, - local_setstat, - local_timecode, - local_receive, - local_poll - }, - { - (char *)0, - } -}; - -#ifdef STREAM -/*-------------------------------------------------- - * ppsclock STREAM init - */ -static int -ppsclock_init(parse) - struct parseunit *parse; -{ - /* - * now push the parse streams module - * it will ensure exclusive access to the device - */ - if (ioctl(parse->fd, I_PUSH, (caddr_t)"ppsclocd") == -1 && - ioctl(parse->fd, I_PUSH, (caddr_t)"ppsclock") == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: ppsclock_init: ioctl(fd, I_PUSH, \"ppsclock\"): %m", - CL_UNIT(parse->unit)); - return 0; - } - if (!local_init(parse)) - { - (void)ioctl(parse->fd, I_POP, (caddr_t)0); - return 0; - } - - parse->flags |= PARSE_PPSCLOCK; - return 1; -} - -/*-------------------------------------------------- - * parse STREAM init - */ -static int -stream_init(parse) - struct parseunit *parse; -{ - /* - * now push the parse streams module - * to test whether it is there (Oh boy - neat kernel interface) - */ - if (ioctl(parse->fd, I_PUSH, (caddr_t)"parse") == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CL_UNIT(parse->unit)); - return 0; - } - else - { - while(ioctl(parse->fd, I_POP, (caddr_t)0) == 0) - /* empty loop */; - - /* - * now push it a second time after we have removed all - * module garbage - */ - if (ioctl(parse->fd, I_PUSH, (caddr_t)"parse") == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CL_UNIT(parse->unit)); - return 0; - } - else - { - return 1; - } - } -} - - /*-------------------------------------------------- - * STREAM setcs - */ -static int -stream_setcs(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_SETCS; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_setcs: ioctl(fd, I_STR, PARSEIOC_SETCS): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM nop - */ -static void -stream_nop(parse) - struct parseunit *parse; -{ -} - -/*-------------------------------------------------- - * STREAM enable - */ -static int -stream_enable(parse) - struct parseunit *parse; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_ENABLE; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)0; - strioc.ic_len = 0; - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_enable: ioctl(fd, I_STR, PARSEIOC_ENABLE): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM disable - */ -static int -stream_disable(parse) - struct parseunit *parse; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_DISABLE; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)0; - strioc.ic_len = 0; - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_disable: ioctl(fd, I_STR, PARSEIOC_DISABLE): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM getfmt - */ -static int -stream_getfmt(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_GETFMT; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: ioctl(fd, I_STR, PARSEIOC_GETFMT): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM setfmt - */ -static int -stream_setfmt(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_SETFMT; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_setfmt: ioctl(fd, I_STR, PARSEIOC_SETFMT): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM getstat - */ -static int -stream_getstat(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_GETSTAT; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_getstat: ioctl(fd, I_STR, PARSEIOC_GETSTAT): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM setstat - */ -static int -stream_setstat(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_SETSTAT; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: stream_setstat: ioctl(fd, I_STR, PARSEIOC_SETSTAT): %m", CL_UNIT(parse->unit)); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM timecode - */ -static int -stream_timecode(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - struct strioctl strioc; - - strioc.ic_cmd = PARSEIOC_TIMECODE; - strioc.ic_timout = 0; - strioc.ic_dp = (char *)tcl; - strioc.ic_len = sizeof (*tcl); - - if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_process: ioctl(fd, I_STR, PARSEIOC_TIMECODE): %m", CL_UNIT(parse->unit), parse->fd); - return 0; - } - return 1; -} - -/*-------------------------------------------------- - * STREAM receive - */ -static void -stream_receive(rbufp) - struct recvbuf *rbufp; -{ - struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock; - parsetime_t parsetime; - - if (rbufp->recv_length != sizeof(parsetime_t)) - { - syslog(LOG_ERR,"PARSE receiver #%d: parse_receive: bad size (got %d expected %d)", - CL_UNIT(parse->unit), rbufp->recv_length, sizeof(parsetime_t)); - parse->baddata++; - parse_event(parse, CEVNT_BADREPLY); - return; - } - memmove((caddr_t)&parsetime, - (caddr_t)&rbufp->recv_space, - sizeof(parsetime_t)); - - /* - * switch time stamp world - be sure to normalize small usec field - * errors. - */ - -#define fix_ts(_X_) \ - if ((&(_X_))->tv.tv_usec >= 1000000) \ - { \ - (&(_X_))->tv.tv_usec -= 1000000; \ - (&(_X_))->tv.tv_sec += 1; \ - } - -#define cvt_ts(_X_, _Y_) \ - { \ - l_fp ts; \ - \ - fix_ts((_X_)); \ - if (!buftvtots((const char *)&(&(_X_))->tv, &ts)) \ - { \ - syslog(LOG_ERR,"parse: stream_receive: timestamp conversion error (buftvtots) (%s) (%d.%06d) ", (_Y_), (&(_X_))->tv.tv_sec, (&(_X_))->tv.tv_usec);\ - return; \ - } \ - else \ - { \ - (&(_X_))->fp = ts; \ - } \ - } - - if (PARSE_TIMECODE(parsetime.parse_state)) - { - cvt_ts(parsetime.parse_time, "parse_time"); - cvt_ts(parsetime.parse_stime, "parse_stime"); - } - - if (PARSE_PPS(parsetime.parse_state)) - cvt_ts(parsetime.parse_ptime, "parse_ptime"); - - parse_process(parse, &parsetime); -} - -/*-------------------------------------------------- - * STREAM poll - */ -static void -stream_poll(parse) - struct parseunit *parse; -{ - register int fd, i, rtc; - fd_set fdmask; - struct timeval timeout, starttime, curtime, selecttime; - parsetime_t parsetime; - - /* - * now we do the following: - * - read the first packet from the parse module (OLD !!!) - * - read the second packet from the parse module (fresh) - * - compute values for xntp - */ - - FD_ZERO(&fdmask); - fd = parse->fd; - FD_SET(fd, &fdmask); - timeout.tv_sec = 0; - timeout.tv_usec = 500000; /* 0.5 sec */ - - if (parse->parse_type->cl_poll) - { - parse->parse_type->cl_poll(parse); - } - - if (GETTIMEOFDAY(&starttime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - - selecttime = timeout; - - while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1) - { - /* no data from the radio clock */ - - if (rtc == -1) - { - if (errno == EINTR) - { - if (GETTIMEOFDAY(&curtime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec; - if (curtime.tv_usec < starttime.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec; - } - else - { - selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec; - } - - - if (timercmp(&selecttime, &timeout, >)) - { - /* - * elapsed real time passed timeout value - consider it timed out - */ - break; - } - - /* - * calculate residual timeout value - */ - selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec; - - if (selecttime.tv_usec > timeout.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec; - } - else - { - selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec; - } - - FD_SET(fd, &fdmask); - continue; - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data[old] from device (select() error: %m)", CL_UNIT(parse->unit)); - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data[old] from device", CL_UNIT(parse->unit)); - } - parse->noresponse++; - parse->lastmissed = current_time; - parse_event(parse, CEVNT_TIMEOUT); - - return; - } - - while (((i = read(fd, (char *)&parsetime, sizeof(parsetime))) < sizeof(parsetime))) - { - /* bad packet */ - if ( i == -1) - { - if (errno == EINTR) - { - continue; - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: bad read[old] from streams module (read() error: %m)", CL_UNIT(parse->unit), i, sizeof(parsetime)); - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: bad read[old] from streams module (got %d bytes - expected %d bytes)", CL_UNIT(parse->unit), i, sizeof(parsetime)); - } - parse->baddata++; - parse_event(parse, CEVNT_BADREPLY); - - return; - } - - if (parse->parse_type->cl_poll) - { - parse->parse_type->cl_poll(parse); - } - - timeout.tv_sec = 1; - timeout.tv_usec = 500000; /* 1.500 sec */ - FD_ZERO(&fdmask); - FD_SET(fd, &fdmask); - - if (GETTIMEOFDAY(&starttime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - - selecttime = timeout; - - while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1) - { - /* no data from the radio clock */ - - if (rtc == -1) - { - if (errno == EINTR) - { - if (GETTIMEOFDAY(&curtime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec; - if (curtime.tv_usec < starttime.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec; - } - else - { - selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec; - } - - - if (timercmp(&selecttime, &timeout, >)) - { - /* - * elapsed real time passed timeout value - consider it timed out - */ - break; - } - - /* - * calculate residual timeout value - */ - selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec; - - if (selecttime.tv_usec > timeout.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec; - } - else - { - selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec; - } - - FD_SET(fd, &fdmask); - continue; - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data[new] from device (select() error: %m)", CL_UNIT(parse->unit)); - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data[new] from device", CL_UNIT(parse->unit)); - } - - /* - * we will return here iff we got a good old sample as this would - * be misinterpreted. bad samples are passed on to be logged into the - * state statistics - */ - if ((parsetime.parse_status & CVT_MASK) == CVT_OK) - { - parse->noresponse++; - parse->lastmissed = current_time; - parse_event(parse, CEVNT_TIMEOUT); - return; - } - } - - /* - * we get here either by a possible read() (rtc == 1 - while assertion) - * or by a timeout or a system call error. when a read() is possible we - * get the new data, otherwise we stick with the old - */ - if ((rtc == 1) && ((i = read(fd, (char *)&parsetime, sizeof(parsetime))) < sizeof(parsetime))) - { - /* bad packet */ - if ( i== -1) - { - syslog(LOG_WARNING, "PARSE receiver #%d: bad read[new] from streams module (read() error: %m)", CL_UNIT(parse->unit), i, sizeof(parsetime)); - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: bad read[new] from streams module (got %d bytes - expected %d bytes)", CL_UNIT(parse->unit), i, sizeof(parsetime)); - } - parse->baddata++; - parse_event(parse, CEVNT_BADREPLY); - - return; - } - - /* - * process what we got - */ - parse_process(parse, &parsetime); -} -#endif - -/*-------------------------------------------------- - * local init - */ -static int -local_init(parse) - struct parseunit *parse; -{ - return parse_ioinit(&parse->parseio); -} - -/*-------------------------------------------------- - * local end - */ -static void -local_end(parse) - struct parseunit *parse; -{ - parse_ioend(&parse->parseio); -} - - -/*-------------------------------------------------- - * local nop - */ -static int -local_nop(parse) - struct parseunit *parse; -{ - return 1; -} - -/*-------------------------------------------------- - * local setcs - */ -static int -local_setcs(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_setcs(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local getfmt - */ -static int -local_getfmt(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_getfmt(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local setfmt - */ -static int -local_setfmt(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_setfmt(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local getstat - */ -static int -local_getstat(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_getstat(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local setstat - */ -static int -local_setstat(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_setstat(tcl, &parse->parseio); -} - -/*-------------------------------------------------- - * local timecode - */ -static int -local_timecode(parse, tcl) - struct parseunit *parse; - parsectl_t *tcl; -{ - return parse_timecode(tcl, &parse->parseio); -} - - -/*-------------------------------------------------- - * local receive - */ -static void -local_receive(rbufp) - struct recvbuf *rbufp; -{ - struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock; - register int count; - register char *s; -#ifdef FREEBSD_CONRAD - struct timeval foo; -#endif - - /* - * eat all characters, parsing then and feeding complete samples - */ - count = rbufp->recv_length; - s = rbufp->recv_buffer; -#ifdef FREEBSD_CONRAD - ioctl(parse->fd,TIOCTIMESTAMP,&foo); - TVTOTS(&foo, &rbufp->recv_time); - rbufp->recv_time.l_uf += TS_ROUNDBIT; - rbufp->recv_time.l_ui += JAN_1970; - rbufp->recv_time.l_uf &= TS_MASK; -#endif - - while (count--) - { - if (parse_ioread(&parse->parseio, *s++, &rbufp->recv_time)) - { - /* - * got something good to eat - */ -#ifdef PPSPPS - if (!PARSE_PPS(parse->parseio.parse_dtime.parse_state) && - (parse->flags & PARSE_PPSCLOCK)) - { - l_fp ts; - struct ppsclockev ev; - - if (ioctl(parse->fd, CIOGETEV, (caddr_t)&ev) == 0) - { - if (ev.serial != parse->ppsserial) - { - /* - * add PPS time stamp if available via ppsclock module - * and not supplied already. - */ - if (!buftvtots((const char *)&ev.tv, &ts)) - { - syslog(LOG_ERR,"parse: local_receive: timestamp conversion error (buftvtots) (ppsclockev.tv)"); - } - else - { - parse->parseio.parse_dtime.parse_ptime.fp = ts; - parse->parseio.parse_dtime.parse_state |= PARSEB_PPS|PARSEB_S_PPS; - } - } - parse->ppsserial = ev.serial; - } - } -#endif - parse_process(parse, &parse->parseio.parse_dtime); - parse_iodone(&parse->parseio); - } - } -} - -/*-------------------------------------------------- - * local poll - */ -static void -local_poll(parse) - struct parseunit *parse; -{ - register int fd, i, rtc; - fd_set fdmask; - struct timeval timeout, starttime, curtime, selecttime; - static struct timeval null_time = { 0, 0}; - timestamp_t ts; - - FD_ZERO(&fdmask); - fd = parse->fd; - FD_SET(fd, &fdmask); - timeout.tv_sec = 1; - timeout.tv_usec = 500000; /* 1.5 sec */ - - if (parse->parse_type->cl_poll) - { - parse->parse_type->cl_poll(parse); - } - - if (GETTIMEOFDAY(&starttime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - - selecttime = timeout; - - do - { - while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1) - { - /* no data from the radio clock */ - - if (rtc == -1) - { - if (errno == EINTR) - { - if (GETTIMEOFDAY(&curtime, 0L) == -1) - { - syslog(LOG_ERR,"gettimeofday failed: %m"); - exit(1); - } - selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec; - if (curtime.tv_usec < starttime.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec; - } - else - { - selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec; - } - - - if (!timercmp(&selecttime, &timeout, >)) - { - /* - * calculate residual timeout value - */ - selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec; - - if (selecttime.tv_usec > timeout.tv_usec) - { - selecttime.tv_sec -= 1; - selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec; - } - else - { - selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec; - } - - FD_SET(fd, &fdmask); - continue; - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data from device (select() error: %m)", CL_UNIT(parse->unit)); - } - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: no data from device", CL_UNIT(parse->unit)); - } - - parse->noresponse++; - parse->lastmissed = current_time; - parse_event(parse, CEVNT_TIMEOUT); - - return; - } - - /* - * at least 1 character is available - gobble everthing up that is available - */ - do - { - char inbuf[256]; - - register char *s = inbuf; - - rtc = i = read(fd, inbuf, sizeof(inbuf)); - - get_systime(&ts.fp); - - while (i-- > 0) - { - if (parse_ioread(&parse->parseio, *s++, ts)) - { - /* - * got something good to eat - */ - parse_process(parse, &parse->parseio.parse_dtime); - parse_iodone(&parse->parseio); - /* - * done if no more characters are available - */ - FD_SET(fd, &fdmask); - if ((i == 0) && - (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)) - return; - } - } - FD_SET(fd, &fdmask); - } while ((rtc = select(fd + 1, &fdmask, 0, 0, &null_time)) == 1); - FD_SET(fd, &fdmask); - } while (1); -} - -/*-------------------------------------------------- - * init_iobinding - find and initialize lower layers - */ -static bind_t * -init_iobinding(parse) - struct parseunit *parse; -{ - register bind_t *b = io_bindings; - - while (b->bd_description != (char *)0) - { - if ((*b->bd_init)(parse)) - { - return b; - } - b++; - } - return (bind_t *)0; -} - -/**=========================================================================== - ** support routines - **/ - -/*-------------------------------------------------- - * convert a flag field to a string - */ -static char * -parsestate(state, buffer) - unsigned LONG state; - char *buffer; -{ - static struct bits - { - unsigned LONG bit; - char *name; - } flagstrings[] = - { - { PARSEB_ANNOUNCE, "DST SWITCH WARNING" }, - { PARSEB_POWERUP, "NOT SYNCHRONIZED" }, - { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" }, - { PARSEB_DST, "DST" }, - { PARSEB_UTC, "UTC DISPLAY" }, - { PARSEB_LEAPADD, "LEAP ADD WARNING" }, - { PARSEB_LEAPDEL, "LEAP DELETE WARNING" }, - { PARSEB_LEAPSECOND, "LEAP SECOND" }, - { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" }, - { PARSEB_TIMECODE, "TIME CODE" }, - { PARSEB_PPS, "PPS" }, - { PARSEB_POSITION, "POSITION" }, - { 0 } - }; - - static struct sbits - { - unsigned LONG bit; - char *name; - } sflagstrings[] = - { - { PARSEB_S_LEAP, "LEAP INDICATION" }, - { PARSEB_S_PPS, "PPS SIGNAL" }, - { PARSEB_S_ANTENNA, "ANTENNA" }, - { PARSEB_S_POSITION, "POSITION" }, - { 0 } - }; - int i; - - *buffer = '\0'; - - i = 0; - while (flagstrings[i].bit) - { - if (flagstrings[i].bit & state) - { - if (buffer[0]) - strcat(buffer, "; "); - strcat(buffer, flagstrings[i].name); - } - i++; - } - - if (state & (PARSEB_S_LEAP|PARSEB_S_ANTENNA|PARSEB_S_PPS|PARSEB_S_POSITION)) - { - register char *s, *t; - - if (buffer[0]) - strcat(buffer, "; "); - - strcat(buffer, "("); - - t = s = buffer + strlen(buffer); - - i = 0; - while (sflagstrings[i].bit) - { - if (sflagstrings[i].bit & state) - { - if (t != s) - { - strcpy(t, "; "); - t += 2; - } - - strcpy(t, sflagstrings[i].name); - t += strlen(t); - } - i++; - } - strcpy(t, ")"); - } - return buffer; -} - -/*-------------------------------------------------- - * convert a status flag field to a string - */ -static char * -parsestatus(state, buffer) - unsigned LONG state; - char *buffer; -{ - static struct bits - { - unsigned LONG bit; - char *name; - } flagstrings[] = - { - { CVT_OK, "CONVERSION SUCCESSFUL" }, - { CVT_NONE, "NO CONVERSION" }, - { CVT_FAIL, "CONVERSION FAILED" }, - { CVT_BADFMT, "ILLEGAL FORMAT" }, - { CVT_BADDATE, "DATE ILLEGAL" }, - { CVT_BADTIME, "TIME ILLEGAL" }, - { 0 } - }; - int i; - - *buffer = '\0'; - - i = 0; - while (flagstrings[i].bit) - { - if (flagstrings[i].bit & state) - { - if (buffer[0]) - strcat(buffer, "; "); - strcat(buffer, flagstrings[i].name); - } - i++; - } - - return buffer; -} - -/*-------------------------------------------------- - * convert a clock status flag field to a string - */ -static char * -clockstatus(state) - unsigned LONG state; -{ - static char buffer[20]; - static struct status - { - unsigned LONG value; - char *name; - } flagstrings[] = - { - { CEVNT_NOMINAL, "NOMINAL" }, - { CEVNT_TIMEOUT, "NO RESPONSE" }, - { CEVNT_BADREPLY,"BAD FORMAT" }, - { CEVNT_FAULT, "FAULT" }, - { CEVNT_PROP, "PROPAGATION DELAY" }, - { CEVNT_BADDATE, "ILLEGAL DATE" }, - { CEVNT_BADTIME, "ILLEGAL TIME" }, - { ~0 } - }; - int i; - - i = 0; - while (flagstrings[i].value != ~0) - { - if (flagstrings[i].value == state) - { - return flagstrings[i].name; - } - i++; - } - - sprintf(buffer, "unknown #%d", state); - - return buffer; -} - -/*-------------------------------------------------- - * mkascii - make a printable ascii string - * assumes (unless defined better) 7-bit ASCII - */ -#ifndef isprint -#define isprint(_X_) (((_X_) > 0x1F) && ((_X_) < 0x7F)) -#endif - -static char * -mkascii(buffer, blen, src, srclen) - register char *buffer; - register LONG blen; - register char *src; - register LONG srclen; -{ - register char *b = buffer; - register char *endb = (char *)0; - - if (blen < 4) - return (char *)0; /* don't bother with mini buffers */ - - endb = buffer + blen - 4; - - blen--; /* account for '\0' */ - - while (blen && srclen--) - { - if ((*src != '\\') && isprint(*src)) - { /* printables are easy... */ - *buffer++ = *src++; - blen--; - } - else - { - if (blen < 4) - { - while (blen--) - { - *buffer++ = '.'; - } - *buffer = '\0'; - return b; - } - else - { - if (*src == '\\') - { - strcpy(buffer,"\\\\"); - buffer += 2; - blen -= 2; - } - else - { - sprintf(buffer, "\\x%02x", *src++); - blen -= 4; - buffer += 4; - } - } - } - if (srclen && !blen && endb) /* overflow - set last chars to ... */ - strcpy(endb, "..."); - } - - *buffer = '\0'; - return b; -} - - -/*-------------------------------------------------- - * l_mktime - make representation of a relative time - */ -static char * -l_mktime(delta) - unsigned LONG delta; -{ - unsigned LONG tmp, m, s; - static char buffer[40]; - - buffer[0] = '\0'; - - if ((tmp = delta / (60*60*24)) != 0) - { - sprintf(buffer, "%dd+", tmp); - delta -= tmp * 60*60*24; - } - - s = delta % 60; - delta /= 60; - m = delta % 60; - delta /= 60; - - sprintf(buffer+strlen(buffer), "%02d:%02d:%02d", - delta, m, s); - - return buffer; -} - - -/*-------------------------------------------------- - * parse_statistics - list summary of clock states - */ -static void -parse_statistics(parse) - register struct parseunit *parse; -{ - register int i; - - syslog(LOG_INFO, "PARSE receiver #%d: running time: %s", - CL_UNIT(parse->unit), - l_mktime(current_time - parse->timestarted)); - - syslog(LOG_INFO, "PARSE receiver #%d: current status: %s", - CL_UNIT(parse->unit), - clockstatus(parse->status)); - - for (i = 0; i <= CEVNT_MAX; i++) - { - register unsigned LONG stime; - register unsigned LONG percent, div = current_time - parse->timestarted; - - percent = stime = PARSE_STATETIME(parse, i); - - while (((unsigned LONG)(~0) / 10000) < percent) - { - percent /= 10; - div /= 10; - } - - if (div) - percent = (percent * 10000) / div; - else - percent = 10000; - - if (stime) - syslog(LOG_INFO, "PARSE receiver #%d: state %18s: %13s (%3d.%02d%%)", - CL_UNIT(parse->unit), - clockstatus(i), - l_mktime(stime), - percent / 100, percent % 100); - } -} - -/*-------------------------------------------------- - * cparse_statistics - wrapper for statistics call - */ -static void -cparse_statistics(peer) - register struct peer *peer; -{ - register struct parseunit *parse = (struct parseunit *)peer; - - parse_statistics(parse); - parse->stattimer.event_time = current_time + PARSESTATISTICS; - TIMER_ENQUEUE(timerqueue, &parse->stattimer); -} - -/**=========================================================================== - ** xntp interface routines - **/ - -/*-------------------------------------------------- - * parse_init - initialize internal parse driver data - */ -static void -parse_init() -{ - memset((caddr_t)parseunits, 0, sizeof parseunits); -} - - -/*-------------------------------------------------- - * parse_shutdown - shut down a PARSE clock - */ -static void -parse_shutdown(unit) - int unit; -{ - register struct parseunit *parse; - - unit = CL_UNIT(unit); - - if (unit >= MAXUNITS) { - syslog(LOG_ERR, - "PARSE receiver #%d: parse_shutdown: INTERNAL ERROR, unit invalid (max %d)", - unit,MAXUNITS); - return; - } - - parse = parseunits[unit]; - - if (parse && !parse->peer) { - syslog(LOG_ERR, - "PARSE receiver #%d: parse_shutdown: INTERNAL ERROR, unit not in use", unit); - return; - } - - /* - * print statistics a last time and - * stop statistics machine - */ - parse_statistics(parse); - TIMER_DEQUEUE(&parse->stattimer); - -#if PPSPPS - { - /* - * kill possible PPS association - */ - if (fdpps == parse->fd) - fdpps = -1; - } -#endif - - if (parse->parse_type->cl_end) - { - parse->parse_type->cl_end(parse); - } - - if (parse->binding) - PARSE_END(parse); - - /* - * Tell the I/O module to turn us off. We're history. - */ - if (!parse->pollonly) - io_closeclock(&parse->io); - else - (void) close(parse->fd); - - syslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" removed", - CL_UNIT(parse->unit), parse->parse_type->cl_description); - - parse->peer = (struct peer *)0; /* unused now */ -} - -/*-------------------------------------------------- - * parse_start - open the PARSE devices and initialize data for processing - */ -static int -parse_start(sysunit, peer) - u_int sysunit; - struct peer *peer; -{ - u_int unit; - int fd232, i; -#ifdef HAVE_TERMIOS - struct termios tm; /* NEEDED FOR A LONG TIME ! */ -#endif -#ifdef HAVE_SYSV_TTYS - struct termio tm; /* NEEDED FOR A LONG TIME ! */ -#endif - struct parseunit * parse; - char parsedev[sizeof(PARSEDEVICE)+20]; - parsectl_t tmp_ctl; - u_int type; - - type = CL_TYPE(sysunit); - unit = CL_UNIT(sysunit); - - if (unit >= MAXUNITS) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unit number invalid (max %d)", - unit, MAXUNITS-1); - return 0; - } - - if ((type == ~0) || (clockinfo[type].cl_description == (char *)0)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unsupported clock type %d (max %d)", - unit, CL_REALTYPE(sysunit), ncltypes-1); - return 0; - } - - if (parseunits[unit] && parseunits[unit]->peer) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unit in use", unit); - return 0; - } - - /* - * Unit okay, attempt to open the device. - */ - (void) sprintf(parsedev, PARSEDEVICE, unit); - -#ifndef O_NOCTTY -#define O_NOCTTY 0 -#endif - - fd232 = open(parsedev, O_RDWR|O_NOCTTY, 0777); - if (fd232 == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: open of %s failed: %m", unit, parsedev); - return 0; - } - - /* - * Looks like this might succeed. Find memory for the structure. - * Look to see if there are any unused ones, if not we malloc() - * one. - */ - if (parseunits[unit]) - { - parse = parseunits[unit]; /* The one we want is okay - and free */ - } - else - { - for (i = 0; i < MAXUNITS; i++) - { - if (parseunits[i] && !parseunits[i]->peer) - break; - } - if (i < MAXUNITS) - { - /* - * Reclaim this one - */ - parse = parseunits[i]; - parseunits[i] = (struct parseunit *)0; - } - else - { - parse = (struct parseunit *) - emalloc(sizeof(struct parseunit)); - } - } - - memset((char *)parse, 0, sizeof(struct parseunit)); - parseunits[unit] = parse; - - /* - * Set up the structures - */ - parse->unit = (u_char)sysunit; - parse->timestarted = current_time; - parse->lastchange = current_time; - /* - * we want to filter input for the sake of - * getting an impression on dispersion - * also we like to average the median range - */ - parse->flags = PARSE_STAT_FILTER|PARSE_STAT_AVG; - parse->pollneeddata = 0; - parse->pollonly = 1; /* go for default polling mode */ - parse->lastformat = ~0; /* assume no format known */ - parse->status = CEVNT_TIMEOUT; /* expect the worst */ - parse->laststatus = ~0; /* be sure to mark initial status change */ - parse->nosynctime = 0; /* assume clock reasonable */ - parse->lastmissed = 0; /* assume got everything */ - parse->ppsserial = 0; - parse->localdata = (void *)0; - - parse->parse_type = &clockinfo[type]; - - parse->basedelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */ - parse->basedelay.l_uf = parse->parse_type->cl_basedelay; - - parse->ppsdelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */ - parse->ppsdelay.l_uf = parse->parse_type->cl_ppsdelay; - - peer->rootdelay = parse->parse_type->cl_rootdelay; - peer->sstclktype = parse->parse_type->cl_type; - peer->precision = sys_precision; - peer->stratum = STRATUM_REFCLOCK; - if (peer->stratum <= 1) - memmove((char *)&peer->refid, parse->parse_type->cl_id, 4); - else - peer->refid = htonl(PARSEHSREFID); - - parse->fd = fd232; - - parse->peer = peer; /* marks it also as busy */ - - parse->binding = init_iobinding(parse); - - if (parse->binding == (bind_t *)0) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: io sub system initialisation failed."); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - - /* - * configure terminal line - */ - if (TTY_GETATTR(fd232, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcgetattr(%d, &tm): %m", unit, fd232); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; - } - else - { -#ifndef _PC_VDISABLE - memset((char *)tm.c_cc, 0, sizeof(tm.c_cc)); -#else - int disablec; - errno = 0; /* pathconf can deliver -1 without changing errno ! */ - - disablec = fpathconf(parse->fd, _PC_VDISABLE); - if (disablec == -1 && errno) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: fpathconf(fd, _PC_VDISABLE): %m", CL_UNIT(parse->unit)); - memset((char *)tm.c_cc, 0, sizeof(tm.c_cc)); /* best guess */ - } - else - if (disablec != -1) - memset((char *)tm.c_cc, disablec, sizeof(tm.c_cc)); -#endif - - tm.c_cflag = clockinfo[type].cl_cflag; - tm.c_iflag = clockinfo[type].cl_iflag; - tm.c_oflag = clockinfo[type].cl_oflag; - tm.c_lflag = clockinfo[type].cl_lflag; -#ifdef FREEBSD_CONRAD - tm.c_ispeed = 50; - tm.c_ospeed = 50; -#endif - if (TTY_SETATTR(fd232, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; - } - } - - /* - * as we always(?) get 8 bit chars we want to be - * sure, that the upper bits are zero for less - * than 8 bit I/O - so we pass that information on. - * note that there can be only one bit count format - * per file descriptor - */ - - switch (tm.c_cflag & CSIZE) - { - case CS5: - tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS5; - break; - - case CS6: - tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS6; - break; - - case CS7: - tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS7; - break; - - case CS8: - tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS8; - break; - } - - if (!PARSE_SETCS(parse, &tmp_ctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setcs() FAILED.", unit); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - -#ifdef FREEBSD_CONRAD - { - int i,j; - struct timeval tv; - ioctl(parse->fd,TIOCTIMESTAMP,&tv); - j = TIOCM_RTS; - i = ioctl(fd232, TIOCMBIC, &j); - if (i < 0) { - syslog(LOG_ERR, - "PARSE receiver #%d: lowrts_poll: failed to lower RTS: %m", - CL_UNIT(parse->unit)); - } - } -#endif - - strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format); - tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer); - - if (!PARSE_SETFMT(parse, &tmp_ctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setfmt() FAILED.", unit); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - -#ifdef TCFLSH - /* - * get rid of all IO accumulated so far - */ - { -#ifndef TCIOFLUSH -#define TCIOFLUSH 2 -#endif - int flshcmd = TCIOFLUSH; - - (void) ioctl(parse->fd, TCFLSH, (caddr_t)&flshcmd); - } -#endif - - tmp_ctl.parsestatus.flags = parse->flags & PARSE_STAT_FLAGS; - - if (!PARSE_SETSTAT(parse, &tmp_ctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setstat() FAILED.", unit); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - - /* - * try to do any special initializations - */ - if (parse->parse_type->cl_init) - { - if (parse->parse_type->cl_init(parse)) - { - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; /* well, ok - special initialisation broke */ - } - } - - if (!(parse->parse_type->cl_flags & PARSE_F_POLLONLY) && - (CL_PPS(parse->unit) || (parse->parse_type->cl_flags & PARSE_F_NOPOLLONLY))) - { - /* - * Insert in async io device list. - */ - parse->io.clock_recv = parse->binding->bd_receive; /* pick correct receive routine */ - parse->io.srcclock = (caddr_t)parse; - parse->io.datalen = 0; - parse->io.fd = parse->fd; /* replicated, but what the heck */ - if (!io_addclock(&parse->io)) - { - if (parse->parse_type->cl_flags & PARSE_F_NOPOLLONLY) - { - syslog(LOG_ERR, - "PARSE receiver #%d: parse_start: addclock %s fails (ABORT - clock type requires async io)", CL_UNIT(parse->unit), parsedev); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; - } - else - { - syslog(LOG_ERR, - "PARSE receiver #%d: parse_start: addclock %s fails (switching to polling mode)", CL_UNIT(parse->unit), parsedev); - } - } - else - { - parse->pollonly = 0; /* - * update at receipt of time_stamp - also - * supports PPS processing - */ - } - } - -#ifdef PPSPPS - if (parse->pollonly || (parse->parse_type->cl_flags & PARSE_F_PPSPPS)) - { - if (fdpps == -1) - { - fdpps = parse->fd; - if (!PARSE_DISABLE(parse)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_disable() FAILED", CL_UNIT(parse->unit)); - parse_shutdown(parse->unit); /* let our cleaning staff do the work */ - return 0; - } - } - else - { - syslog(LOG_NOTICE, "PARSE receiver #%d: parse_start: loopfilter PPS already active - no PPS via CIOGETEV", CL_UNIT(parse->unit)); - } - } -#endif - - /* - * wind up statistics timer - */ - parse->stattimer.peer = (struct peer *)parse; /* we know better, but what the heck */ - parse->stattimer.event_handler = cparse_statistics; - parse->stattimer.event_time = current_time + PARSESTATISTICS; - TIMER_ENQUEUE(timerqueue, &parse->stattimer); - - /* - * get out Copyright information once - */ - if (!notice) - { - syslog(LOG_INFO, "NTP PARSE support: Copyright (c) 1989-1993, Frank Kardel"); - notice = 1; - } - - /* - * print out configuration - */ - syslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" (device %s) added", - CL_UNIT(parse->unit), - parse->parse_type->cl_description, parsedev); - - syslog(LOG_INFO, "PARSE receiver #%d: Stratum %d, %sPPS support, trust time %s, precision %d", - CL_UNIT(parse->unit), - parse->peer->stratum, (parse->pollonly || !CL_PPS(parse->unit)) ? "no " : "", - l_mktime(parse->parse_type->cl_maxunsync), parse->peer->precision); - - syslog(LOG_INFO, "PARSE receiver #%d: rootdelay %s s, phaseadjust %s s, %s IO handling", - CL_UNIT(parse->unit), - ufptoa(parse->parse_type->cl_rootdelay, 6), - lfptoa(&parse->basedelay, 8), - parse->binding->bd_description); - - syslog(LOG_INFO, "PARSE receiver #%d: Format recognition: %s", CL_UNIT(parse->unit), - !(*parse->parse_type->cl_format) ? "<AUTOMATIC>" : parse->parse_type->cl_format); - -#ifdef PPSPPS - syslog(LOG_INFO, "PARSE receiver #%d: %sCD PPS support", - CL_UNIT(parse->unit), - (fdpps == parse->fd) ? "" : "NO "); -#endif - - return 1; -} - -/*-------------------------------------------------- - * parse_poll - called by the transmit procedure - */ -static void -parse_poll(unit, peer) - int unit; - struct peer *peer; -{ - register struct parseunit *parse; - - unit = CL_UNIT(unit); - - if (unit >= MAXUNITS) - { - syslog(LOG_ERR, "PARSE receiver #%d: poll: INTERNAL: unit invalid", - unit); - return; - } - - parse = parseunits[unit]; - - if (!parse->peer) - { - syslog(LOG_ERR, "PARSE receiver #%d: poll: INTERNAL: unit unused", - unit); - return; - } - - if (peer != parse->peer) - { - syslog(LOG_ERR, - "PARSE receiver #%d: poll: INTERNAL: peer incorrect", - unit); - return; - } - - /* - * Update clock stat counters - */ - parse->polls++; - - /* - * in PPS mode we just mark that we want the next sample - * for the clock filter - */ - if (!parse->pollonly) - { - if (parse->pollneeddata) - { - /* - * bad news - didn't get a response last time - */ - parse->noresponse++; - parse->lastmissed = current_time; - parse_event(parse, CEVNT_TIMEOUT); - - syslog(LOG_WARNING, "PARSE receiver #%d: no data from device within poll interval", CL_UNIT(parse->unit)); - } - parse->pollneeddata = 1; - if (parse->parse_type->cl_poll) - { - parse->parse_type->cl_poll(parse); - } - return; - } - - /* - * the following code is only executed only when polling is used - */ - - PARSE_POLL(parse); -} - -/*-------------------------------------------------- - * parse_leap - called when a leap second occurs - */ - -static void -parse_leap() -{ - /* - * PARSE encodes the LEAP correction direction. - * For timecodes that do not pass on the leap correction direction - * the default PARSEB_LEAPADD must be used. It may then be modified - * with a fudge flag (flag2). - */ -} - - -/*-------------------------------------------------- - * parse_control - set fudge factors, return statistics - */ -static void -parse_control(unit, in, out) - u_int unit; - struct refclockstat *in; - struct refclockstat *out; -{ - register struct parseunit *parse; - parsectl_t tmpctl; - unsigned LONG type; - static char outstatus[400]; /* status output buffer */ - - type = CL_TYPE(unit); - unit = CL_UNIT(unit); - - if (out) - { - out->lencode = 0; - out->lastcode = 0; - out->polls = out->noresponse = 0; - out->badformat = out->baddata = 0; - out->timereset = 0; - out->currentstatus = out->lastevent = CEVNT_NOMINAL; - out->kv_list = (struct ctl_var *)0; - } - - if (unit >= MAXUNITS) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_control: unit invalid (max %d)", - unit, MAXUNITS-1); - return; - } - - parse = parseunits[unit]; - - if (!parse || !parse->peer) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_control: unit invalid (UNIT INACTIVE)", - unit); - return; - } - - if (in) - { - if (in->haveflags & CLK_HAVETIME1) - parse->basedelay = in->fudgetime1; - - if (in->haveflags & CLK_HAVETIME2) - { - parse->ppsdelay = in->fudgetime2; - } - - if (in->haveflags & CLK_HAVEVAL1) - { - parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf); - if (parse->peer->stratum <= 1) - memmove((char *)&parse->peer->refid, - parse->parse_type->cl_id, - 4); - else - parse->peer->refid = htonl(PARSEHSREFID); - } - - /* - * NOT USED - yet - * - if (in->haveflags & CLK_HAVEVAL2) - { - } - */ - if (in->haveflags & (CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4)) - { - parse->flags = (in->flags & (CLK_FLAG1|CLK_FLAG2|CLK_FLAG3|CLK_FLAG4)) | - (parse->flags & ~PARSE_STAT_FLAGS); - } - - if (in->haveflags & (CLK_HAVEVAL2|CLK_HAVETIME2|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4)) - { - parsectl_t tmpctl; - tmpctl.parsestatus.flags = parse->flags & PARSE_STAT_FLAGS; - - if (!PARSE_SETSTAT(parse, &tmpctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_control: parse_setstat() FAILED", unit); - } - } - } - - if (out) - { - register unsigned LONG sum = 0; - register char *t, *tt; - register struct tm *tm; - register short utcoff; - register char sign; - register int i; - time_t tim; - - outstatus[0] = '\0'; - - out->haveflags = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3; - out->clockdesc = parse->parse_type->cl_description; - - out->fudgetime1 = parse->basedelay; - - out->fudgetime2 = parse->ppsdelay; - - out->fudgeval1 = (LONG)parse->peer->stratum; - - out->fudgeval2 = 0; - - out->flags = parse->flags & PARSE_STAT_FLAGS; - - out->type = REFCLK_PARSE; - - /* - * figure out skew between PPS and RS232 - just for informational - * purposes - returned in time2 value - */ - if (PARSE_SYNC(parse->time.parse_state)) - { - if (PARSE_PPS(parse->time.parse_state) && PARSE_TIMECODE(parse->time.parse_state)) - { - l_fp off; - - /* - * we have a PPS and RS232 signal - calculate the skew - * WARNING: assumes on TIMECODE == PULSE (timecode after pulse) - */ - off = parse->time.parse_stime.fp; - L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */ - tt = add_var(&out->kv_list, 40, RO); - sprintf(tt, "refclock_ppsskew=%s", lfptoms(&off, 6)); - } - } - - if (PARSE_PPS(parse->time.parse_state)) - { - tt = add_var(&out->kv_list, 80, RO|DEF); - sprintf(tt, "refclock_ppstime=\"%s\"", prettydate(&parse->time.parse_ptime.fp)); - } - - /* - * all this for just finding out the +-xxxx part (there are always - * new and changing fields in the standards 8-(). - * - * but we do it for the human user... - */ - tim = parse->time.parse_time.fp.l_ui - JAN_1970; - tm = gmtime(&tim); - utcoff = tm->tm_hour * 60 + tm->tm_min; - tm = localtime(&tim); - utcoff = tm->tm_hour * 60 + tm->tm_min - utcoff + 12 * 60; - utcoff += 24 * 60; - utcoff %= 24 * 60; - utcoff -= 12 * 60; - if (utcoff < 0) - { - utcoff = -utcoff; - sign = '-'; - } - else - { - sign = '+'; - } - - tt = add_var(&out->kv_list, 128, RO|DEF); - sprintf(tt, "refclock_time=\""); - tt += strlen(tt); - - if (parse->time.parse_time.fp.l_ui == 0) - { - strcpy(tt, "<UNDEFINED>\""); - } - else - { - strcpy(tt, prettydate(&parse->time.parse_time.fp)); - t = tt + strlen(tt); - - sprintf(t, " (%c%02d%02d)\"", sign, utcoff / 60, utcoff % 60); - } - - if (!PARSE_GETTIMECODE(parse, &tmpctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_control: parse_timecode() FAILED", unit); - } - else - { - tt = add_var(&out->kv_list, 128, RO|DEF); - sprintf(tt, "refclock_status=\""); - tt += strlen(tt); - - /* - * copy PPS flags from last read transaction (informational only) - */ - tmpctl.parsegettc.parse_state |= parse->time.parse_state & - (PARSEB_PPS|PARSEB_S_PPS); - - (void) parsestate(tmpctl.parsegettc.parse_state, tt); - - strcat(tt, "\""); - - if (tmpctl.parsegettc.parse_count) - mkascii(outstatus+strlen(outstatus), sizeof(outstatus)- strlen(outstatus) - 1, - tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1); - - parse->badformat += tmpctl.parsegettc.parse_badformat; - } - - tmpctl.parseformat.parse_format = tmpctl.parsegettc.parse_format; - - if (!PARSE_GETFMT(parse, &tmpctl)) - { - syslog (LOG_ERR, "PARSE receiver #%d: parse_control: parse_getfmt() FAILED", unit); - } - else - { - tt = add_var(&out->kv_list, 80, RO|DEF); - sprintf(tt, "refclock_format=\""); - - strncat(tt, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count); - strcat(tt,"\""); - } - - /* - * gather state statistics - */ - - tt = add_var(&out->kv_list, 200, RO|DEF); - strcpy(tt, "refclock_states=\""); - tt += strlen(tt); - - for (i = 0; i <= CEVNT_MAX; i++) - { - register unsigned LONG stime; - register unsigned LONG div = current_time - parse->timestarted; - register unsigned LONG percent; - - percent = stime = PARSE_STATETIME(parse, i); - - while (((unsigned LONG)(~0) / 10000) < percent) - { - percent /= 10; - div /= 10; - } - - if (div) - percent = (percent * 10000) / div; - else - percent = 10000; - - if (stime) - { - sprintf(tt, "%s%s%s: %s (%d.%02d%%)", - sum ? "; " : "", - (parse->status == i) ? "*" : "", - clockstatus(i), - l_mktime(stime), - percent / 100, percent % 100); - sum += stime; - tt += strlen(tt); - } - } - - sprintf(tt, "; running time: %s\"", l_mktime(sum)); - - tt = add_var(&out->kv_list, 32, RO); - sprintf(tt, "refclock_id=\"%s\"", parse->parse_type->cl_id); - - tt = add_var(&out->kv_list, 80, RO); - sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description); - - tt = add_var(&out->kv_list, 128, RO); - sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp\""); - - out->lencode = strlen(outstatus); - out->lastcode = outstatus; - out->timereset = parse->timestarted; - out->polls = parse->polls; - out->noresponse = parse->noresponse; - out->badformat = parse->badformat; - out->baddata = parse->baddata; - out->lastevent = parse->lastevent; - out->currentstatus = parse->status; - } -} - -/**=========================================================================== - ** processing routines - **/ - -/*-------------------------------------------------- - * event handling - note that nominal events will also be posted - */ -static void -parse_event(parse, event) - struct parseunit *parse; - int event; -{ - if (parse->status != (u_char) event) - { - parse->statetime[parse->status] += current_time - parse->lastchange; - parse->lastchange = current_time; - - parse->status = (u_char)event; - if (event != CEVNT_NOMINAL) - parse->lastevent = parse->status; - - report_event(EVNT_PEERCLOCK, parse->peer); - } -} - -/*-------------------------------------------------- - * process a PARSE time sample - */ -static void -parse_process(parse, parsetime) - struct parseunit *parse; - parsetime_t *parsetime; -{ - unsigned char leap; - struct timeval usecdisp; - l_fp off, rectime, reftime, dispersion; - - /* - * check for changes in conversion status - * (only one for each new status !) - */ - if (parse->laststatus != parsetime->parse_status) - { - char buffer[200]; - - syslog(LOG_WARNING, "PARSE receiver #%d: conversion status \"%s\"", - CL_UNIT(parse->unit), parsestatus(parsetime->parse_status, buffer)); - - if ((parsetime->parse_status & CVT_MASK) == CVT_FAIL) - { - /* - * tell more about the story - list time code - * there is a slight change for a race condition and - * the time code might be overwritten by the next packet - */ - parsectl_t tmpctl; - - if (!PARSE_GETTIMECODE(parse, &tmpctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_process: parse_timecode() FAILED", CL_UNIT(parse->unit)); - } - else - { - syslog(LOG_WARNING, "PARSE receiver #%d: FAILED TIMECODE: \"%s\"", - CL_UNIT(parse->unit), mkascii(buffer, sizeof buffer, tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1)); - parse->badformat += tmpctl.parsegettc.parse_badformat; - } - } - - parse->laststatus = parsetime->parse_status; - } - - /* - * examine status and post appropriate events - */ - if ((parsetime->parse_status & CVT_MASK) != CVT_OK) - { - /* - * got bad data - tell the rest of the system - */ - switch (parsetime->parse_status & CVT_MASK) - { - case CVT_NONE: - break; /* well, still waiting - timeout is handled at higher levels */ - - case CVT_FAIL: - parse->badformat++; - if (parsetime->parse_status & CVT_BADFMT) - { - parse_event(parse, CEVNT_BADREPLY); - } - else - if (parsetime->parse_status & CVT_BADDATE) - { - parse_event(parse, CEVNT_BADDATE); - } - else - if (parsetime->parse_status & CVT_BADTIME) - { - parse_event(parse, CEVNT_BADTIME); - } - else - { - parse_event(parse, CEVNT_BADREPLY); /* for the lack of something better */ - } - } - return; /* skip the rest - useless */ - } - - /* - * check for format changes - * (in case somebody has swapped clocks 8-) - */ - if (parse->lastformat != parsetime->parse_format) - { - parsectl_t tmpctl; - - tmpctl.parseformat.parse_format = parsetime->parse_format; - - if (!PARSE_GETFMT(parse, &tmpctl)) - { - syslog(LOG_ERR, "PARSE receiver #%d: parse_getfmt() FAILED", CL_UNIT(parse->unit)); - } - else - { - syslog(LOG_INFO, "PARSE receiver #%d: new packet format \"%s\"", - CL_UNIT(parse->unit), tmpctl.parseformat.parse_buffer); - } - parse->lastformat = parsetime->parse_format; - } - - /* - * now, any changes ? - */ - if (parse->time.parse_state != parsetime->parse_state) - { - char tmp1[200]; - char tmp2[200]; - /* - * something happend - */ - - (void) parsestate(parsetime->parse_state, tmp1); - (void) parsestate(parse->time.parse_state, tmp2); - - syslog(LOG_INFO,"PARSE receiver #%d: STATE CHANGE: %s -> %s", - CL_UNIT(parse->unit), tmp2, tmp1); - } - - /* - * remember for future - */ - parse->time = *parsetime; - - /* - * check to see, whether the clock did a complete powerup or lost PZF signal - * and post correct events for current condition - */ - if (PARSE_POWERUP(parsetime->parse_state)) - { - /* - * this is bad, as we have completely lost synchronisation - * well this is a problem with the receiver here - * for PARSE U/A 31 the lost synchronisation ist true - * as it is the powerup state and the time is taken - * from a crude real time clock chip - * for the PZF series this is only partly true, as - * PARSE_POWERUP only means that the pseudo random - * phase shift sequence cannot be found. this is only - * bad, if we have never seen the clock in the SYNC - * state, where the PHASE and EPOCH are correct. - * for reporting events the above business does not - * really matter, but we can use the time code - * even in the POWERUP state after having seen - * the clock in the synchronized state (PZF class - * receivers) unless we have had a telegram disruption - * after having seen the clock in the SYNC state. we - * thus require having seen the clock in SYNC state - * *after* having missed telegrams (noresponse) from - * the clock. one problem remains: we might use erroneously - * POWERUP data if the disruption is shorter than 1 polling - * interval. fortunately powerdowns last usually longer than 64 - * seconds and the receiver is at least 2 minutes in the - * POWERUP or NOSYNC state before switching to SYNC - */ - parse_event(parse, CEVNT_FAULT); - if (parse->nosynctime) - { - /* - * repeated POWERUP/NOSYNC state - look whether - * the message should be repeated - */ - if (current_time - parse->nosynctime > PARSENOSYNCREPEAT) - { - syslog(LOG_ERR,"PARSE receiver #%d: *STILL* NOT SYNCHRONIZED (POWERUP or no PZF signal)", - CL_UNIT(parse->unit)); - parse->nosynctime = current_time; - } - } - else - { - syslog(LOG_ERR,"PARSE receiver #%d: NOT SYNCHRONIZED", - CL_UNIT(parse->unit)); - parse->nosynctime = current_time; - } - } - else - { - /* - * we have two states left - * - * SYNC: - * this state means that the EPOCH (timecode) and PHASE - * information has be read correctly (at least two - * successive PARSE timecodes were received correctly) - * this is the best possible state - full trust - * - * NOSYNC: - * The clock should be on phase with respect to the second - * signal, but the timecode has not been received correctly within - * at least the last two minutes. this is a sort of half baked state - * for PARSE U/A 31 this is bad news (clock running without timecode - * confirmation) - * PZF 535 has also no time confirmation, but the phase should be - * very precise as the PZF signal can be decoded - */ - parse->nosynctime = 0; /* current state is better than worst state */ - - if (PARSE_SYNC(parsetime->parse_state)) - { - /* - * currently completely synchronized - best possible state - */ - parse->lastsync = current_time; - /* - * log OK status - */ - parse_event(parse, CEVNT_NOMINAL); - } - else - { - /* - * we have had some problems receiving the time code - */ - parse_event(parse, CEVNT_PROP); - } - } - - if (PARSE_TIMECODE(parsetime->parse_state)) - { - l_fp offset; - - /* - * calculate time offset including systematic delays - * off = PARSE-timestamp + propagation delay - kernel time stamp - */ - offset = parse->basedelay; - - off = parsetime->parse_time.fp; - - reftime = off; - - L_ADD(&off, &offset); - rectime = off; /* this makes org time and xmt time somewhat artificial */ - - L_SUB(&off, &parsetime->parse_stime.fp); - - if ((parse->flags & PARSE_STAT_FILTER) && - (off.l_i > -60) && - (off.l_i < 60)) /* take usec error only if within +- 60 secs */ - { - struct timeval usecerror; - /* - * offset is already calculated - */ - usecerror.tv_sec = parsetime->parse_usecerror / 1000000; - usecerror.tv_usec = parsetime->parse_usecerror % 1000000; - - sTVTOTS(&usecerror, &off); - L_ADD(&off, &offset); - } - } - - if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit)) - { - l_fp offset; - - /* - * we have a PPS signal - much better than the RS232 stuff (we hope) - */ - offset = parsetime->parse_ptime.fp; - - L_ADD(&offset, &parse->ppsdelay); - - if (PARSE_TIMECODE(parsetime->parse_state)) - { - if (M_ISGEQ(off.l_i, off.l_f, -1, 0x80000000) && - M_ISGEQ(0, 0x7fffffff, off.l_i, off.l_f)) - { - /* - * RS232 offsets within [-0.5..0.5[ - take PPS offsets - */ - - if (parse->parse_type->cl_flags & PARSE_F_PPSONSECOND) - { - reftime = off = offset; - rectime = offset; - /* - * implied on second offset - */ - off.l_uf = ~off.l_uf; /* map [0.5..1[ -> [-0.5..0[ */ - off.l_ui = (off.l_f < 0) ? ~0 : 0; /* sign extend */ - } - else - { - /* - * time code describes pulse - */ - off = parsetime->parse_time.fp; - - rectime = reftime = off; /* take reference time - fake rectime */ - - L_SUB(&off, &offset); /* true offset */ - } - } - /* - * take RS232 offset when PPS when out of bounds - */ - } - else - { - /* - * Well, no time code to guide us - assume on second pulse - * and pray, that we are within [-0.5..0.5[ - */ - reftime = off = offset; - rectime = offset; - /* - * implied on second offset - */ - off.l_uf = ~off.l_uf; /* map [0.5..1[ -> [-0.5..0[ */ - off.l_ui = (off.l_f < 0) ? ~0 : 0; /* sign extend */ - } - } - else - { - if (!PARSE_TIMECODE(parsetime->parse_state)) - { - /* - * Well, no PPS, no TIMECODE, no more work ... - */ - return; - } - } - - -#if defined(PPS) || defined(PPSCLK) || defined(PPSPPS) || defined(PARSEPPS) - if (CL_PPS(parse->unit) && !parse->pollonly && PARSE_SYNC(parsetime->parse_state)) - { - /* - * only provide PPS information when clock - * is in sync - * thus PHASE and EPOCH are correct and PPS is not - * done via the CIOGETEV loopfilter mechanism - */ -#ifdef PPSPPS - if (fdpps != parse->fd) -#endif - (void) pps_sample(&off); - } -#endif /* PPS || PPSCLK || PPSPPS || PARSEPPS */ - - /* - * ready, unless the machine wants a sample - */ - if (!parse->pollonly && !parse->pollneeddata) - return; - - parse->pollneeddata = 0; - - if (PARSE_PPS(parsetime->parse_state)) - { - L_CLR(&dispersion); - } - else - { - /* - * convert usec dispersion into NTP TS world - */ - - usecdisp.tv_sec = parsetime->parse_usecdisp / 1000000; - usecdisp.tv_usec = parsetime->parse_usecdisp % 1000000; - - TVTOTS(&usecdisp, &dispersion); - } - - /* - * and now stick it into the clock machine - * samples are only valid iff lastsync is not too old and - * we have seen the clock in sync at least once - * after the last time we didn't see an expected data telegram - * see the clock states section above for more reasoning - */ - if (((current_time - parse->lastsync) > parse->parse_type->cl_maxunsync) || - (parse->lastsync <= parse->lastmissed)) - { - leap = LEAP_NOTINSYNC; - } - else - { - if (PARSE_LEAPADD(parsetime->parse_state)) - { - /* - * we pick this state also for time code that pass leap warnings - * without direction information (as earth is currently slowing - * down). - */ - leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND; - } - else - if (PARSE_LEAPDEL(parsetime->parse_state)) - { - leap = LEAP_DELSECOND; - } - else - { - leap = LEAP_NOWARNING; - } - } - - refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap); -} - -/**=========================================================================== - ** clock polling support - **/ - -struct poll_timer -{ - struct event timer; /* we'd like to poll a a higher rate than 1/64s */ -}; - -typedef struct poll_timer poll_timer_t; - -/*-------------------------------------------------- - * direct poll routine - */ -static void -poll_dpoll(parse) - struct parseunit *parse; -{ - register int rtc; - register char *ps = ((poll_info_t *)parse->parse_type->cl_data)->string; - register int ct = ((poll_info_t *)parse->parse_type->cl_data)->count; - - rtc = write(parse->fd, ps, ct); - if (rtc < 0) - { - syslog(LOG_ERR, "PARSE receiver #%d: poll_dpoll: failed to send cmd to clock: %m", CL_UNIT(parse->unit)); - } - else - if (rtc != ct) - { - syslog(LOG_ERR, "PARSE receiver #%d: poll_dpoll: failed to send cmd incomplete (%d of %d bytes sent)", CL_UNIT(parse->unit), rtc, ct); - } -} - -/*-------------------------------------------------- - * periodic poll routine - */ -static void -poll_poll(parse) - struct parseunit *parse; -{ - register poll_timer_t *pt = (poll_timer_t *)parse->localdata; - - poll_dpoll(parse); - - if (pt != (poll_timer_t *)0) - { - pt->timer.event_time = current_time + ((poll_info_t *)parse->parse_type->cl_data)->rate; - TIMER_ENQUEUE(timerqueue, &pt->timer); - } -} - -/*-------------------------------------------------- - * init routine - setup timer - */ -static int -poll_init(parse) - struct parseunit *parse; -{ - register poll_timer_t *pt; - - if (((poll_info_t *)parse->parse_type->cl_data)->rate) - { - parse->localdata = (void *)malloc(sizeof(poll_timer_t)); - memset((char *)parse->localdata, 0, sizeof(poll_timer_t)); - - pt = (poll_timer_t *)parse->localdata; - - pt->timer.peer = (struct peer *)parse; /* well, only we know what it is */ - pt->timer.event_handler = poll_poll; - poll_poll(parse); - } - else - { - parse->localdata = (void *)0; - } - - return 0; -} - -/*-------------------------------------------------- - * end routine - clean up timer - */ -static void -poll_end(parse) - struct parseunit *parse; -{ - if (parse->localdata != (void *)0) - { - TIMER_DEQUEUE(&((poll_timer_t *)parse->localdata)->timer); - free((char *)parse->localdata); - parse->localdata = (void *)0; - } -} - -/**=========================================================================== - ** special code for special clocks - **/ - -/*-------------------------------------------------- - * trimble init routine - setup EOL and then do poll_init. - */ -static int -trimble_init(parse) - struct parseunit *parse; -{ -#ifdef HAVE_TERMIOS - struct termios tm; -#endif -#ifdef HAVE_SYSV_TTYS - struct termio tm; -#endif - /* - * configure terminal line for trimble receiver - */ - if (TTY_GETATTR(parse->fd, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: trimble_init: tcgetattr(fd, &tm): %m", CL_UNIT(parse->unit)); - return 0; - } - else - { - tm.c_cc[VEOL] = TRIMBLESV6_EOL; - - if (TTY_SETATTR(parse->fd, &tm) == -1) - { - syslog(LOG_ERR, "PARSE receiver #%d: trimble_init: tcsetattr(fd, &tm): %m", CL_UNIT(parse->unit)); - return 0; - } - } - return poll_init(parse); -} -#endif /* defined(REFCLOCK) && defined(PARSE) */ - -/* - * History: - * - * refclock_parse.c,v - * Revision 3.53 1994/03/25 13:07:39 kardel - * fixed offset calculation for large (>4 Min) offsets - * - * Revision 3.52 1994/03/03 09:58:00 kardel - * stick -kv in cvs is no fun - * - * Revision 3.49 1994/02/20 13:26:00 kardel - * rcs id cleanup - * - * Revision 3.48 1994/02/20 13:04:56 kardel - * parse add/delete second support - * - * Revision 3.47 1994/02/02 17:44:30 kardel - * rcs ids fixed - * - * Revision 3.45 1994/01/25 19:06:27 kardel - * 94/01/23 reconcilation - * - * Revision 3.44 1994/01/25 17:32:23 kardel - * settable extended variables - * - * Revision 3.43 1994/01/23 16:28:39 kardel - * HAVE_TERMIOS introduced - * - * Revision 3.42 1994/01/22 11:35:04 kardel - * added HAVE_TERMIOS - * - * Revision 3.41 1993/11/27 18:44:37 kardel - * can't trust GPS166 on unsync - * - * Revision 3.40 1993/11/21 18:03:36 kardel - * useless declaration deleted - * - * Revision 3.39 1993/11/21 15:30:15 kardel - * static funcitions may be declared only at outer level - * - * Revision 3.38 1993/11/15 21:26:49 kardel - * conditional define comments fixed - * - * Revision 3.37 1993/11/11 11:20:49 kardel - * declaration fixes - * - * Revision 3.36 1993/11/10 12:17:14 kardel - * #ifdef glitch - * - * Revision 3.35 1993/11/01 21:15:06 kardel - * comments updated - * - * Revision 3.34 1993/11/01 20:01:08 kardel - * parse Solaris support (initial version) - * - * Revision 3.33 1993/10/30 09:44:58 kardel - * conditional compilation flag cleanup - * - * Revision 3.32 1993/10/22 14:28:43 kardel - * Oct. 22nd 1993 reconcilation - * - * Revision 3.31 1993/10/10 21:19:10 kardel - * compilation cleanup - (minimal porting tests) - * - * Revision 3.30 1993/10/09 21:44:35 kardel - * syslog strings fixed - * - * Revision 3.29 1993/10/09 14:40:15 kardel - * default precision setting fixed - * - * Revision 3.28 1993/10/08 14:48:22 kardel - * Changed offset determination logic: - * Take the PPS offset if it is available and the time - * code offset is within [-0.5..0.5[, otherwise stick - * to the time code offset - * - * Revision 3.27 1993/10/08 00:53:17 kardel - * announce also simulated PPS via CIOGETEV in ntpq cl - * - * Revision 3.26 1993/10/07 23:29:35 kardel - * trimble fixes - * - * Revision 3.25 1993/10/06 21:13:35 kardel - * test reversed (CIOGETEV support) - * - * Revision 3.24 1993/10/03 20:18:26 kardel - * Well, values > 999999 in the usec field from uniqtime() timestamps - * can prove harmful. - * - * Revision 3.23 1993/10/03 19:49:54 kardel - * buftvtots where failing on uninitialized time stamps - * - * Revision 3.22 1993/10/03 19:11:09 kardel - * restructured I/O handling - * - * Revision 3.21 1993/09/29 11:30:18 kardel - * special init for trimble to set EOL - * - * Revision 3.20 1993/09/27 22:46:28 kardel - * preserve module stack if I_PUSH parse fails - * - * Revision 3.19 1993/09/27 21:10:11 kardel - * wrong structure member - * - * Revision 3.18 1993/09/27 13:05:06 kardel - * Trimble is true polling only - * - * Revision 3.17 1993/09/27 12:47:10 kardel - * poll string support generalized - * - * Revision 3.16 1993/09/26 23:40:56 kardel - * new parse driver logic - * - * Revision 3.15 1993/09/24 15:00:51 kardel - * Sep 23rd distribution... - * - * Revision 3.14 1993/09/22 18:21:15 kardel - * support ppsclock streams module (-DSTREAM -DPPSPPS -DPARSEPPS -UPARSESTREAM) - * - * Revision 3.13 1993/09/05 15:38:33 kardel - * not every cpp understands #error... - * - * Revision 3.12 1993/09/02 20:04:19 kardel - * TTY cleanup - * - * Revision 3.11 1993/09/01 21:48:47 kardel - * conditional cleanup - * - * Revision 3.10 1993/09/01 11:32:45 kardel - * assuming HAVE_POSIX_TTYS when STREAM defined - * - * Revision 3.9 1993/08/31 22:31:46 kardel - * SINIX-M SysVR4 integration - * - * Revision 3.8 1993/08/27 00:29:50 kardel - * compilation cleanup - * - * Revision 3.7 1993/08/24 22:27:30 kardel - * cleaned up AUTOCONF DCF77 mess 8-) - wasn't too bad - * - * Revision 3.6 1993/08/24 21:36:23 kardel - * casting and ifdefs - * - * Revision 3.5 1993/07/09 23:36:59 kardel - * HAVE_POSIX_TTYS used to produce errors 8-( - BSD driver support still lacking - * - * Revision 3.4 1993/07/09 12:42:29 kardel - * RAW DCF now officially released - * - * Revision 3.3 1993/07/09 11:50:37 kardel - * running GPS also on 960 to be able to switch GPS/DCF77 - * - * Revision 3.2 1993/07/09 11:37:34 kardel - * Initial restructured version + GPS support - * - * Revision 3.1 1993/07/06 10:01:07 kardel - * DCF77 driver goes generic... - * - */ diff --git a/usr.sbin/xntpd/xntpdc/Makefile.tmpl b/usr.sbin/xntpd/xntpdc/Makefile.tmpl deleted file mode 100644 index 80c8f93..0000000 --- a/usr.sbin/xntpd/xntpdc/Makefile.tmpl +++ /dev/null @@ -1,68 +0,0 @@ -# -# Makefile.tmpl -# -PROGRAM= xntpdc -# -# xntpdc - private mode query program for xntp -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -INSTALL= install -DEFS= -DEFS_OPT= -DEFS_LOCAL= -RESLIB= -COMPAT= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a -LINTLIB= ../lib/llib-llibntp.ln -MAKE= make -TOP=../ -# -OBJS= ntpdc.o ntpdc_ops.o -SOURCE= ntpdc.c ntpdc_ops.c - -all: $(PROGRAM) - -$(PROGRAM): $(OBJS) $(LIB) version.o - $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) $(COMPAT) - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) - $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -tags: - ctags *.c *.h - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -lint: $(LINTLIB) - lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs - -../lib/llib-llibntp.ln: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - -# -# we want to build the current version string here -# -version.o: ../VERSION - ../scripts/mkversion $(PROGRAM) - $(CC) $(COPTS) $(INCL) -c version.c - -../VERSION: - -@rm -f .version diff --git a/usr.sbin/xntpd/xntpres/Makefile.tmpl b/usr.sbin/xntpd/xntpres/Makefile.tmpl deleted file mode 100644 index 8f0742b..0000000 --- a/usr.sbin/xntpd/xntpres/Makefile.tmpl +++ /dev/null @@ -1,68 +0,0 @@ -# -# Makefile.tmpl,v 3.1 1993/07/06 01:12:07 jbj Exp -# -PROGRAM= xntpres -# -# xntpres - name resolver support for xntpd -# -COMPILER= cc -COPTS= -O -BINDIR= /usr/local -INSTALL= install -DEFS= -DEFS_OPT= -DEFS_LOCAL= -RESLIB= -COMPAT= -# -INCL= -I../include -CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -CC= $(COMPILER) -LIB= ../lib/libntp.a -LINTLIB= ../lib/llib-llibntp.ln -MAKE= make -TOP=../ -# -OBJS= xntpres.o -SOURCE= xntpres.c - -all: $(PROGRAM) - -$(PROGRAM): $(OBJS) $(LIB) version.o - $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) $(COMPAT) - -install: $(BINDIR)/$(PROGRAM) - -$(BINDIR)/$(PROGRAM): $(PROGRAM) - $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR) - -tags: - ctags *.c *.h - -depend: - mkdep $(CFLAGS) $(SOURCE) - -clean: - -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version - -distclean: clean - -@rm -f *.orig *.rej .version Makefile - -lint: $(LINTLIB) - lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs - -../lib/llib-llibntp.ln: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib - -../lib/libntp.a: - cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" - -# -# we want to build the current version string here -# -version.o: ../VERSION - ../scripts/mkversion $(PROGRAM) - $(CC) $(COPTS) $(INCL) -c version.c - -../VERSION: - -@rm -f .version diff --git a/usr.sbin/xntpd/xntpres/README b/usr.sbin/xntpd/xntpres/README deleted file mode 100644 index 06d7266..0000000 --- a/usr.sbin/xntpd/xntpres/README +++ /dev/null @@ -1,6 +0,0 @@ -README file for directory ./xntpres of the NTP Version 3 distribution - -This directory contains the sources for the xntpres utility program. See -the README and RELNOTES files in the parent directory for directions on -how to make and install this program. The current version number of this -program is in the version.c file. diff --git a/usr.sbin/xntpd/xntpres/xntpres.c b/usr.sbin/xntpd/xntpres/xntpres.c deleted file mode 100644 index 47c6eda..0000000 --- a/usr.sbin/xntpd/xntpres/xntpres.c +++ /dev/null @@ -1,850 +0,0 @@ -/* xntpres.c,v 3.1 1993/07/06 01:12:09 jbj Exp - * xntpres - process configuration entries which require use of the resolver - * - * This is meant to be run by xntpd on the fly. It is not guaranteed - * to work properly if run by hand. This is actually a quick hack to - * stave off violence from people who hate using numbers in the - * configuration file (at least I hope the rest of the daemon is - * better than this). Also might provide some ideas about how one - * might go about autoconfiguring an NTP distribution network. - * - * Usage is: - * xntpres [-d] [-r] keyid keyfile configuration_data - */ -#include <stdio.h> -#include <ctype.h> -#include <sys/types.h> -#include <sys/time.h> -#include <netdb.h> -#include <signal.h> -#include <errno.h> - -#include "ntp_select.h" -#include "ntp_fp.h" -#include "ntp.h" -#include "ntp_io.h" -#include "ntp_malloc.h" -#include "ntp_request.h" -#include "ntp_string.h" -#include "ntp_stdlib.h" -#include "ntp_syslog.h" - -#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) - -/* - * Each item we are to resolve and configure gets one of these - * structures defined for it. - */ -struct conf_entry { - struct conf_entry *ce_next; - char *ce_name; /* name we are trying to resolve */ - struct conf_peer ce_config; /* configuration info for peer */ -}; -#define ce_peeraddr ce_config.peeraddr -#define ce_hmode ce_config.hmode -#define ce_version ce_config.version -#define ce_minpoll ce_config.minpoll -#define ce_maxpoll ce_config.maxpoll -#define ce_flags ce_config.flags -#define ce_ttl ce_config.ttl -#define ce_keyid ce_config.keyid - -/* - * confentries is a pointer to the list of configuration entries - * we have left to do. - */ -struct conf_entry *confentries = NULL; - -/* - * We take an interrupt every thirty seconds, at which time we decrement - * config_timer and resolve_timer. The former is set to 2, so we retry - * unsucessful reconfigurations every minute. The latter is set to - * an exponentially increasing value which starts at 2 and increases to - * 32. When this expires we retry failed name resolutions. - * - * We sleep SLEEPTIME seconds before doing anything, to give the server - * time to arrange itself. - */ -#define MINRESOLVE 2 -#define MAXRESOLVE 32 -#define CONFIG_TIME 2 -#define ALARM_TIME 30 - -#define SLEEPTIME 2 - -int config_timer = 0; -int resolve_timer = 0; - -int resolve_value; /* next value of resolve timer */ - -/* - * Big hack attack - */ -#define LOCALHOST 0x7f000001 /* 127.0.0.1, in hex, of course */ -#define SKEWTIME 0x08000000 /* 0.03125 seconds as a l_fp fraction */ - -/* - * Select time out. Set to 2 seconds. The server is on the local machine, - * after all. - */ -#define TIMEOUT_SEC 2 -#define TIMEOUT_USEC 0 - - -/* - * Input processing. The data on each line in the configuration file - * is supposed to consist of entries in the following order - */ -#define TOK_HOSTNAME 0 -#define TOK_HMODE 1 -#define TOK_VERSION 2 -#define TOK_MINPOLL 3 -#define TOK_MAXPOLL 4 -#define TOK_FLAGS 5 -#define TOK_TTL 6 -#define TOK_KEYID 7 -#define NUMTOK 8 - -#define MAXLINESIZE 512 - - -/* - * File descriptor for ntp request code. - */ -int sockfd = -1; - -/* - * Misc. data from argument processing - */ -int removefile = 0; /* remove configuration file when done */ - -U_LONG req_keyid; /* request keyid */ -char *keyfile; /* file where keys are kept */ -char *conffile; /* name of the file with configuration info */ - -char *progname; -int debug = 0; -extern char *Version; -extern int errno; - -static RETSIGTYPE bong P((int)); -static void checkparent P((void)); -static void removeentry P((struct conf_entry *)); -static void addentry P((char *, int, int, int, int, int, int, U_LONG)); -static int findhostaddr P((struct conf_entry *)); -static void openntp P((void)); -static int request P((struct conf_peer *)); -static char * nexttoken P((char **)); -static void readconf P((FILE *, char *)); -static void doconfigure P((int)); - -/* - * main - parse arguments and handle options - */ -void -main(argc, argv) - int argc; - char *argv[]; -{ - int c; - int errflg = 0; - char *cp; - FILE *in; - extern int ntp_optind; - - progname = argv[0]; - - /* - * Better get syslog open early since stderr messages are likely - * ending up in the twilight zone - */ - cp = strrchr(argv[0], '/'); - if (cp == 0) - cp = argv[0]; - else - cp++; - -#ifndef LOG_DAEMON - openlog(cp, LOG_PID); -#else - -#ifndef LOG_NTP -#define LOG_NTP LOG_DAEMON -#endif - openlog(cp, LOG_PID | LOG_NDELAY, LOG_NTP); -#ifdef DEBUG - if (debug) - setlogmask(LOG_UPTO(LOG_DEBUG)); - else -#endif /* DEBUG */ - setlogmask(LOG_UPTO(LOG_INFO)); -#endif /* LOG_DAEMON */ - - syslog(LOG_NOTICE, Version); - - while ((c = ntp_getopt(argc, argv, "dr")) != EOF) - switch (c) { - case 'd': - ++debug; - break; - case 'r': - ++removefile; - break; - default: - errflg++; - break; - } - if (errflg || (ntp_optind + 3) != argc) { - (void) fprintf(stderr, - "usage: %s [-d] [-r] keyid keyfile conffile\n", progname); - syslog(LOG_ERR, "exiting due to usage error"); - exit(2); - } - - if (!atouint(argv[ntp_optind], &req_keyid)) { - syslog(LOG_ERR, "undecodeable keyid %s", argv[ntp_optind]); - exit(1); - } - - keyfile = argv[ntp_optind+1]; - conffile = argv[ntp_optind+2]; - - /* - * Make sure we have the key we need - */ - if (!authreadkeys(keyfile)) - exit(1); - if (!authhavekey(req_keyid)) { - syslog(LOG_ERR, "request keyid %lu not found in %s", - req_keyid, keyfile); - exit(1); - } - - /* - * Read the configuration info - */ - if ((in = fopen(conffile, "r")) == NULL) { - syslog(LOG_ERR, "can't open configuration file %s: %m", - conffile); - exit(1); - } - readconf(in, conffile); - (void) fclose(in); - if (removefile) - (void) unlink(conffile); - - /* - * Sleep a little to make sure the server is completely up - */ - sleep(SLEEPTIME); - - /* - * Make a first cut at resolving the bunch - */ - doconfigure(1); - if (confentries == NULL) - exit(0); /* done that quick */ - - /* - * Here we've got some problem children. Set up the timer - * and wait for it. - */ - resolve_value = resolve_timer = MINRESOLVE; - config_timer = CONFIG_TIME; - (void) signal(SIGALRM, bong); - alarm(ALARM_TIME); - - for (;;) { - if (confentries == NULL) - exit(0); - checkparent(); - if (resolve_timer == 0) { - if (resolve_value < MAXRESOLVE) - resolve_value <<= 1; - resolve_timer = resolve_value; - config_timer = CONFIG_TIME; - doconfigure(1); - continue; - } else if (config_timer == 0) { - config_timer = CONFIG_TIME; - doconfigure(0); - continue; - } - /* - * There is a race in here. Is okay, though, since - * all it does is delay things by 30 seconds. - */ - (void) pause(); - } -} - - -/* - * bong - service and reschedule an alarm() interrupt - */ -static RETSIGTYPE -bong(sig) -int sig; -{ - if (config_timer > 0) - config_timer--; - if (resolve_timer > 0) - resolve_timer--; - alarm(ALARM_TIME); -} - - -/* - * checkparent - see if our parent process is still running - */ -static void -checkparent() -{ - /* - * If our parent (the server) has died we will have been - * inherited by init. If so, exit. - */ - if (getppid() == 1) { - syslog(LOG_INFO, "parent died before we finished, exiting"); - exit(0); - } -} - - -/* - * removeentry - we are done with an entry, remove it from the list - */ -static void -removeentry(entry) - struct conf_entry *entry; -{ - register struct conf_entry *ce; - - ce = confentries; - if (ce == entry) { - confentries = ce->ce_next; - return; - } - - while (ce != NULL) { - if (ce->ce_next == entry) { - ce->ce_next = entry->ce_next; - return; - } - ce = ce->ce_next; - } -} - - -/* - * addentry - add an entry to the configuration list - */ -static void -addentry(name, mode, version, minpoll, maxpoll, flags, ttl, keyid) - char *name; - int mode; - int version; - int minpoll; - int maxpoll; - int flags; - int ttl; - U_LONG keyid; -{ - register char *cp; - register struct conf_entry *ce; - int len; - - len = strlen(name) + 1; - cp = emalloc((unsigned)len); - memmove(cp, name, len); - - ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry)); - ce->ce_name = cp; - ce->ce_peeraddr = 0; - ce->ce_hmode = (u_char)mode; - ce->ce_version = (u_char)version; - ce->ce_minpoll = (u_char)minpoll; - ce->ce_maxpoll = (u_char)maxpoll; - ce->ce_flags = (u_char)flags; - ce->ce_ttl = (u_char)ttl; - ce->ce_keyid = htonl(keyid); - ce->ce_next = NULL; - - if (confentries == NULL) { - confentries = ce; - } else { - register struct conf_entry *cep; - - for (cep = confentries; cep->ce_next != NULL; - cep = cep->ce_next) - /* nothing */; - cep->ce_next = ce; - } -} - - -/* - * findhostaddr - resolve a host name into an address - * - * The routine sticks the address into the entry's ce_peeraddr if it - * gets one. It returns 1 for "success" and 0 for an uncorrectable - * failure. Note that "success" includes try again errors. You can - * tell that you got a try again since ce_peeraddr will still be zero. - */ -static int -findhostaddr(entry) - struct conf_entry *entry; -{ - struct hostent *hp; - - checkparent(); /* make sure our guy is still running */ - - hp = gethostbyname(entry->ce_name); - - if (hp == NULL) { -#ifndef NODNS - /* - * If the resolver is in use, see if the failure is - * temporary. If so, return success. - */ - extern int h_errno; - - if (h_errno == TRY_AGAIN) - return 1; -#endif - return (0); - } - - /* - * Use the first address. We don't have any way to - * tell preferences and older gethostbyname() implementations - * only return one. - */ - memmove((char *)&(entry->ce_peeraddr), - hp->h_addr, - sizeof(struct in_addr)); - return (1); -} - - -/* - * openntp - open a socket to the ntp server - */ -static void -openntp() -{ - struct sockaddr_in saddr; - - if (sockfd >= 0) - return; - - sockfd = socket(AF_INET, SOCK_DGRAM, 0); - if (sockfd == -1) { - syslog(LOG_ERR, "socket() failed: %m"); - exit(1); - } - - memset((char *)&saddr, 0, sizeof(saddr)); - saddr.sin_family = AF_INET; - saddr.sin_port = htons(NTP_PORT); /* trash */ - saddr.sin_addr.s_addr = htonl(LOCALHOST); /* garbage */ - - - /* - * Make the socket non-blocking. We'll wait with select() - */ -#if defined(O_NONBLOCK) - if (fcntl(sockfd, F_SETFL, O_NONBLOCK) == -1) { - syslog(LOG_ERR, "fcntl(O_NONBLOCK) failed: %m"); - exit(1); - } -#else -#if defined(FNDELAY) - if (fcntl(sockfd, F_SETFL, FNDELAY) == -1) { - syslog(LOG_ERR, "fcntl(FNDELAY) failed: %m"); - exit(1); - } -#else -NEED NON BLOCKING IO -#endif -#endif - - if (connect(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)) == -1) { - syslog(LOG_ERR, "connect() failed: %m"); - exit(1); - } -} - - -/* - * request - send a configuration request to the server, wait for a response - */ -static int -request(conf) - struct conf_peer *conf; -{ - fd_set fdset; - struct timeval tvout; - struct req_pkt reqpkt; - l_fp ts; - int n; - - checkparent(); /* make sure our guy is still running */ - - if (sockfd < 0) - openntp(); - - /* - * Try to clear out any previously received traffic so it - * doesn't fool us. Note the socket is nonblocking. - */ - while (read(sockfd, (char *)&reqpkt, REQ_LEN_MAC) > 0) - /* nothing */; - - /* - * Make up a request packet with the configuration info - */ - memset((char *)&reqpkt, 0, sizeof(reqpkt)); - - reqpkt.rm_vn_mode = RM_VN_MODE(0, 0); - reqpkt.auth_seq = AUTH_SEQ(1, 0); /* authenticated, no seq */ - reqpkt.implementation = IMPL_XNTPD; /* local implementation */ - reqpkt.request = REQ_CONFIG; /* configure a new peer */ - reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */ - reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer)); - memmove(reqpkt.data, (char *)conf, sizeof(struct conf_peer)); - reqpkt.keyid = htonl(req_keyid); - - auth1crypt(req_keyid, (U_LONG *)&reqpkt, REQ_LEN_NOMAC); - gettstamp(&ts); - M_ADDUF(ts.l_ui, ts.l_uf, SKEWTIME); - HTONL_FP(&ts, &reqpkt.tstamp); - n = auth2crypt(req_keyid, (U_LONG *)&reqpkt, REQ_LEN_NOMAC); - - /* - * Done. Send it. - */ - n = write(sockfd, (char *)&reqpkt, REQ_LEN_NOMAC + n); - if (n < 0) { - syslog(LOG_ERR, "send to NTP server failed: %m"); - return 0; /* maybe should exit */ - } - - /* - * Wait for a response. A weakness of the mode 7 protocol used - * is that there is no way to associate a response with a - * particular request, i.e. the response to this configuration - * request is indistinguishable from that to any other. I should - * fix this some day. In any event, the time out is fairly - * pessimistic to make sure that if an answer is coming back - * at all, we get it. - */ - for (;;) { - FD_ZERO(&fdset); - FD_SET(sockfd, &fdset); - tvout.tv_sec = TIMEOUT_SEC; - tvout.tv_usec = TIMEOUT_USEC; - - n = select(sockfd + 1, &fdset, (fd_set *)0, - (fd_set *)0, &tvout); - - if (n <= 0) { - if (n < 0) - syslog(LOG_ERR, "select() fails: %m"); - return 0; - } - - n = read(sockfd, (char *)&reqpkt, REQ_LEN_MAC); - if (n <= 0) { - if (n < 0) { - syslog(LOG_ERR, "read() fails: %m"); - return 0; - } - continue; - } - - /* - * Got one. Check through to make sure it is what - * we expect. - */ - if (n < RESP_HEADER_SIZE) { - syslog(LOG_ERR, "received runt response (%d octets)", - n); - continue; - } - - if (!ISRESPONSE(reqpkt.rm_vn_mode)) { -#ifdef DEBUG - if (debug > 1) - printf("received non-response packet\n"); -#endif - continue; - } - - if (ISMORE(reqpkt.rm_vn_mode)) { -#ifdef DEBUG - if (debug > 1) - printf("received fragmented packet\n"); -#endif - continue; - } - - if (INFO_VERSION(reqpkt.rm_vn_mode) != NTP_VERSION - || INFO_MODE(reqpkt.rm_vn_mode) != MODE_PRIVATE) { -#ifdef DEBUG - if (debug > 1) - printf("version (%d) or mode (%d) incorrect\n", - INFO_VERSION(reqpkt.rm_vn_mode), - INFO_MODE(reqpkt.rm_vn_mode)); -#endif - continue; - } - - if (INFO_SEQ(reqpkt.auth_seq) != 0) { -#ifdef DEBUG - if (debug > 1) - printf("nonzero sequence number (%d)\n", - INFO_SEQ(reqpkt.auth_seq)); -#endif - continue; - } - - if (reqpkt.implementation != IMPL_XNTPD || - reqpkt.request != REQ_CONFIG) { -#ifdef DEBUG - if (debug > 1) - printf( - "implementation (%d) or request (%d) incorrect\n", - reqpkt.implementation, reqpkt.request); -#endif - continue; - } - - if (INFO_NITEMS(reqpkt.err_nitems) != 0 || - INFO_MBZ(reqpkt.mbz_itemsize) != 0 || - INFO_ITEMSIZE(reqpkt.mbz_itemsize != 0)) { -#ifdef DEBUG - if (debug > 1) - printf( - "nitems (%d) mbz (%d) or itemsize (%d) nonzero\n", - INFO_NITEMS(reqpkt.err_nitems), - INFO_MBZ(reqpkt.mbz_itemsize), - INFO_ITEMSIZE(reqpkt.mbz_itemsize)); -#endif - continue; - } - - n = INFO_ERR(reqpkt.err_nitems); - switch (n) { - case INFO_OKAY: - /* success */ - return 1; - - case INFO_ERR_IMPL: - syslog(LOG_ERR, - "server reports implementation mismatch!!"); - return 0; - - case INFO_ERR_REQ: - syslog(LOG_ERR, - "server claims configuration request is unknown"); - return 0; - - case INFO_ERR_FMT: - syslog(LOG_ERR, - "server indicates a format error occured(!!)"); - return 0; - - case INFO_ERR_NODATA: - syslog(LOG_ERR, - "server indicates no data available (shouldn't happen)"); - return 0; - - case INFO_ERR_AUTH: - syslog(LOG_ERR, - "server returns a permission denied error"); - return 0; - - default: - syslog(LOG_ERR, - "server returns unknown error code %d", n); - return 0; - } - } -} - - -/* - * nexttoken - return the next token from a line - */ -static char * -nexttoken(lptr) - char **lptr; -{ - register char *cp; - register char *tstart; - - cp = *lptr; - - /* - * Skip leading white space - */ - while (*cp == ' ' || *cp == '\t') - cp++; - - /* - * If this is the end of the line, return nothing. - */ - if (*cp == '\n' || *cp == '\0') { - *lptr = cp; - return NULL; - } - - /* - * Must be the start of a token. Record the pointer and look - * for the end. - */ - tstart = cp++; - while (*cp != ' ' && *cp != '\t' && *cp != '\n' && *cp != '\0') - cp++; - - /* - * Terminate the token with a \0. If this isn't the end of the - * line, space to the next character. - */ - if (*cp == '\n' || *cp == '\0') - *cp = '\0'; - else - *cp++ = '\0'; - - *lptr = cp; - return tstart; -} - - -/* - * readconf - read the configuration information out of the file we - * were passed. Note that since the file is supposed to be - * machine generated, we bail out at the first sign of trouble. - */ -static void -readconf(fp, name) - FILE *fp; - char *name; -{ - register int i; - char *token[NUMTOK]; - U_LONG intval[NUMTOK]; - int flags; - char buf[MAXLINESIZE]; - char *bp; - - while (fgets(buf, MAXLINESIZE, fp) != NULL) { - - bp = buf; - for (i = 0; i < NUMTOK; i++) { - if ((token[i] = nexttoken(&bp)) == NULL) { - syslog(LOG_ERR, - "tokenizing error in file `%s', quitting", - name); - exit(1); - } - } - - for (i = 1; i < NUMTOK; i++) { - if (!atouint(token[i], &intval[i])) { - syslog(LOG_ERR, - "format error for integer token `%s', file `%s', quitting", - token[i], name); - exit(1); - } - } - - if (intval[TOK_HMODE] != MODE_ACTIVE && - intval[TOK_HMODE] != MODE_CLIENT && - intval[TOK_HMODE] != MODE_BROADCAST) { - syslog(LOG_ERR, "invalid mode (%d) in file %s", - intval[TOK_HMODE], name); - exit(1); - } - - if (intval[TOK_VERSION] > NTP_VERSION || - intval[TOK_VERSION] < NTP_OLDVERSION) { - syslog(LOG_ERR, "invalid version (%d) in file %s", - intval[TOK_VERSION], name); - exit(1); - } - - if (intval[TOK_MINPOLL] < NTP_MINPOLL || - intval[TOK_MINPOLL] > NTP_MAXPOLL) { - syslog(LOG_ERR, "invalid MINPOLL value (%d) in file %s", - intval[TOK_MINPOLL], name); - exit(1); - } - - if (intval[TOK_MAXPOLL] < NTP_MINPOLL || - intval[TOK_MAXPOLL] > NTP_MAXPOLL) { - syslog(LOG_ERR, "invalid MAXPOLL value (%d) in file %s", - intval[TOK_MAXPOLL], name); - exit(1); - } - - if ((intval[TOK_FLAGS] & ~(FLAG_AUTHENABLE|FLAG_PREFER)) - != 0) { - syslog(LOG_ERR, "invalid flags (%d) in file %s", - intval[TOK_FLAGS], name); - exit(1); - } - - flags = 0; - if (intval[TOK_FLAGS] & FLAG_AUTHENABLE) - flags |= CONF_FLAG_AUTHENABLE; - if (intval[TOK_FLAGS] & FLAG_PREFER) - flags |= CONF_FLAG_PREFER; - - /* - * This is as good as we can check it. Add it in. - */ - addentry(token[TOK_HOSTNAME], (int)intval[TOK_HMODE], - (int)intval[TOK_VERSION], (int)intval[TOK_MINPOLL], - (int)intval[TOK_MAXPOLL], flags, (int)intval[TOK_TTL], - intval[TOK_KEYID]); - } -} - - -/* - * doconfigure - attempt to resolve names and configure the server - */ -static void -doconfigure(dores) - int dores; -{ - register struct conf_entry *ce; - register struct conf_entry *ceremove; - - ce = confentries; - while (ce != NULL) { - if (dores && ce->ce_peeraddr == 0) { - if (!findhostaddr(ce)) { - syslog(LOG_ERR, - "couldn't resolve `%s', giving up on it", - ce->ce_name); - ceremove = ce; - ce = ceremove->ce_next; - removeentry(ceremove); - continue; - } - } - - if (ce->ce_peeraddr != 0) { - if (request(&ce->ce_config)) { - ceremove = ce; - ce = ceremove->ce_next; - removeentry(ceremove); - continue; - } - } - ce = ce->ce_next; - } -} |