[source] rdate

I somehow managed to port the NetBSD’s rdate.
The guts was to write down the adjtime() which
wasn’t available in Neutrino.
I thought cburgess ported rdate before, but couldn’t find it now.

(time_t is UNSIGNED?? oh weez…)

Haven’t tried, but ntp(xntpd) may compile by plopping in this adjtime.c.

This post is just the current status; I’ll continue to refine.
better adjtime(), build directory, install, packaging, license, manual…

kabe

#!/bin/sh

This is a shell archive (produced by GNU sharutils 4.2.1).

To extract the files from this archive, save it to some FILE, remove

everything before the !/bin/sh' line above, then type sh FILE’.

Made on 2002-08-10 05:31 JST by kabe@imux3188.

Source directory was `/autofs/home/kabe’.

Existing files will not be overwritten unless `-c’ is specified.

This shar contains:

length mode name

------ ---------- ------------------------------------------

536 -rw-rw-r-- rdate/Makefile

2859 -rw-rw-r-- rdate/adjtime.c

2532 -rw-rw-r-- rdate/rdate.8

4983 -rw-rw-r-- rdate/rdate.c

save_IFS="${IFS}"
IFS="${IFS}:"
gettext_dir=FAILED
locale_dir=FAILED
first_param="$1"
for dir in $PATH
do
if test “$gettext_dir” = FAILED && test -f $dir/gettext
&& ($dir/gettext --version >/dev/null 2>&1)
then
set $dir/gettext --version 2>&1
if test “$3” = GNU
then
gettext_dir=$dir
fi
fi
if test “$locale_dir” = FAILED && test -f $dir/shar
&& ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
then
locale_dir=$dir/shar --print-text-domain-dir
fi
done
IFS="$save_IFS"
if test “$locale_dir” = FAILED || test “$gettext_dir” = FAILED
then
echo=echo
else
TEXTDOMAINDIR=$locale_dir
export TEXTDOMAINDIR
TEXTDOMAIN=sharutils
export TEXTDOMAIN
echo="$gettext_dir/gettext -s"
fi
if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
shar_touch=‘touch -am -t $1$2$3$4$5$6.$7 “$8”’
elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
shar_touch=‘touch -am $3$4$5$6$1$2.$7 “$8”’
elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
shar_touch=‘touch -am $3$4$5$6$2 “$8”’
else
shar_touch=:
echo
$echo ‘WARNING: not restoring timestamps. Consider getting and’
$echo “installing GNU `touch’, distributed in GNU File Utilities…”
echo
fi
rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch

if mkdir _sh12712; then
$echo ‘x -’ ‘creating lock directory’
else
$echo ‘failed to create lock directory’
exit 1
fi

============= rdate/Makefile ==============

if test ! -d ‘rdate’; then
$echo ‘x -’ ‘creating directory’ ‘rdate’
mkdir ‘rdate’
fi
if test -f ‘rdate/Makefile’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/Makefile’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/Makefile’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/Makefile’ &&

$NetBSD: Makefile,v 1.5 1997/10/18 03:50:58 lukem Exp $

$Id: Makefile,v 1.6 2002/08/09 20:25:49 kabe Exp $

X
PROG= rdate
X
MAN= rdate.8
X
LDLIBS=-lsocket
CCLINK=$(CC)
X
OBJS = rdate.o adjtime.o
X
$(PROG): $(OBJS) $(PROG).use
X $(CCLINK) -o $@ $(OBJS) $(LDLIBS)
X usemsg $@ $(PROG).use
X
$(PROG).use: rdate.c
X sed -ne ‘/#if __USAGE/,/#endif/s/^////p’ rdate.c > $@
X
clean::
X $(RM) $(PROG)
X $(RM) *.o a.out core *~ #~
X $(RM) $(PROG).use
X
#BINDIR=/usr/bin
#install: $(PROG)

mkdir -p $(DESTDIR)$(BINDIR)

cp -p $(PROG) $(DESTDIR)$(BINDIR)

X
SHAR_EOF
(set 20 02 08 10 05 25 49 ‘rdate/Makefile’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/Makefile’ ||
$echo ‘restore of’ ‘rdate/Makefile’ ‘failed’
if ( md5sum --help 2>&1 | grep ‘sage: md5sum [’ ) >/dev/null 2>&1
&& ( md5sum --version 2>&1 | grep -v ‘textutils 1.12’ ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1
|| $echo ‘rdate/Makefile:’ ‘MD5 check failed’
0d49c8c12afd6fdd367db85c70a048be rdate/Makefile
SHAR_EOF
else
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/Makefile'"
test 536 -eq “$shar_count” ||
$echo ‘rdate/Makefile:’ ‘original size’ ‘536,’ ‘current size’ “$shar_count!”
fi
fi

============= rdate/adjtime.c ==============

if test -f ‘rdate/adjtime.c’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/adjtime.c’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/adjtime.c’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/adjtime.c’ &&
/*
X * adjtime() for QNXNTO
X *
X * $Id: adjtime.c,v 1.2 2002/08/09 20:20:10 kabe Exp $
X /
X
#include <stdio.h>
#include <sys/types.h>
#include <sys/time.h>
#include <stdint.h>
X
#if QNXNTO
#include <sys/neutrino.h>
#define UNSIGNED_TV_SEC
#endif
X
static long nanoslew_per_sec = 500000; /
0.5millisec max slew per second /
X /
500000000; /* 0.5 max slew per second */
X
#if defined(QNXNTO) && !defined(HAVE_ADJTIME)
int
adjtime(struct timeval delta, struct timeval * const olddelta)
{
X int64_t nto_delta; /
nanosecs /
X
#ifdef DEBUG
X if (delta) fprintf(stderr,“adjtime: %ld:%ld\n”, delta->tv_sec, delta->tv_usec);
#endif
X /
if delta==0, return current delta remaining /
X /
(which is zero for now) /
X if (delta->tv_sec==0 && delta->tv_usec==0) {
X if (olddelta) {
X struct _clockadjust oldadjust;
X uint64_t d;
X ClockAdjust(CLOCK_REALTIME, NULL, &oldadjust);
X /
XXX overflow warning /
X nto_delta = (uint64_t)oldadjust.tick_nsec_inc * (uint64_t)oldadjust.tick_count;
X d = nto_delta /= 1000; /
nanosec to usec /
X olddelta->tv_sec = d / 1000000;
X /
beware for negative d;
X * should -1us be {0,-1} or {-1, 999999}? /
X d -= olddelta->tv_sec * 1000000;
X olddelta->tv_usec = d;
X }
X return 0;
X }
X
X /
XXX typeof(tv.tv_sec)==time_t COULD BE UNSIGNED! /
X nto_delta =
#ifdef UNSIGNED_TV_SEC
X (int64_t)(signed long)delta->tv_sec * 1000000000LL +
#else
X (int64_t)delta->tv_sec * 1000000000LL +
#endif
X (int64_t)delta->tv_usec * 1000LL;
X
#ifdef DEBUG
X fprintf(stderr,“delta=%lld\n”, nto_delta);
#endif
X if (-nanoslew_per_sec <= nto_delta &&
X nto_delta <= nanoslew_per_sec) {
X /
bump immediately /
X uint64_t nto_time;
X ClockTime(CLOCK_REALTIME, NULL, &nto_time);
X nto_time += nto_delta;
X return ClockTime(CLOCK_REALTIME, &nto_time, NULL);
X }
X
X {
X struct _clockperiod nto_period;
X struct _clockadjust newadjust;
X long nanoslew_per_tick;
X
X /
get current tick length /
X ClockPeriod(CLOCK_REALTIME, NULL, &nto_period, 0);
X
X /
how many nanosecs can we slew per tick?
X * ticks/s == 10e9 / nto_period.nsec (tick/s; Hz)
X * MAXNANOS/tick = nanoslew_per_sec / ticks/s
X * = nanoslew_per_sec / 10e9 * nto_period.nsec
X * = nanoslew_per_sec * nto_period.nsec / 10e9
X /
X /
this value doesn’t change unless ClockPeriod was changed /
X nanoslew_per_tick = (((uint64_t)nanoslew_per_sec / 1000) * nto_period.nsec) / 1000000;
X if (nto_delta<0) nanoslew_per_tick = -nanoslew_per_tick;
X
X newadjust.tick_nsec_inc = nanoslew_per_tick;
X newadjust.tick_count = nto_delta / nanoslew_per_tick;
#ifdef DEBUG
X fprintf(stderr, “Slewing %ld nsec * %lu ticks (range %ld seconds)\n”, newadjust.tick_nsec_inc, newadjust.tick_count, (long)((uint64_t)newadjust.tick_count
nto_period.nsec/1000000000));
#endif
X return ClockAdjust(CLOCK_REALTIME, &newadjust, NULL);
X }
}
#endif
SHAR_EOF
(set 20 02 08 10 05 20 10 ‘rdate/adjtime.c’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/adjtime.c’ ||
$echo ‘restore of’ ‘rdate/adjtime.c’ ‘failed’
if ( md5sum --help 2>&1 | grep ‘sage: md5sum [’ ) >/dev/null 2>&1
&& ( md5sum --version 2>&1 | grep -v ‘textutils 1.12’ ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1
|| $echo ‘rdate/adjtime.c:’ ‘MD5 check failed’
5b7b645682c9b8b4c8bc105062fe974f rdate/adjtime.c
SHAR_EOF
else
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/adjtime.c'"
test 2859 -eq “$shar_count” ||
$echo ‘rdate/adjtime.c:’ ‘original size’ ‘2859,’ ‘current size’ “$shar_count!”
fi
fi

============= rdate/rdate.8 ==============

if test -f ‘rdate/rdate.8’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/rdate.8’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/rdate.8’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/rdate.8’ &&
X." $NetBSD: rdate.8,v 1.9 2002/01/19 11:45:00 wiz Exp $
X."
X." Copyright (c) 1994 Christos Zoulas
X." All rights reserved.
X."
X." Redistribution and use in source and binary forms, with or without
X." modification, are permitted provided that the following conditions
X." are met:
X." 1. Redistributions of source code must retain the above copyright
X." notice, this list of conditions and the following disclaimer.
X." 2. Redistributions in binary form must reproduce the above copyright
X." notice, this list of conditions and the following disclaimer in the
X." documentation and/or other materials provided with the distribution.
X." 3. All advertising materials mentioning features or use of this software
X." must display the following acknowledgement:
X." This product includes software developed by Christos Zoulas.
X." 4. The name of the author may not be used to endorse or promote products
X." derived from this software without specific prior written permission.
X."
X." THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS’’ AND ANY EXPRESS OR
X." IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
X." OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
X." IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
X." INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
X." NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
X." DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
X." THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
X." (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
X." THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
X."
X.Dd April 30, 1994
X.Dt RDATE 8
X.Os
X.Sh NAME
X.Nm rdate
X.Nd set the system’s date from a remote host
X.Sh SYNOPSIS
X.Nm
X.Op Fl psa
X.Ar host
X.Sh DESCRIPTION
X.Nm
displays and sets the local date and time from the
host name or address given as the argument. It uses the RFC868
protocol which is usually implemented as a built-in service of
X.Xr inetd 8 .
X.Pp
Available options:
X.Pp
X.Bl -tag -width indent
X.It Fl p
Do not set, just print the remote time
X.It Fl s
Do not print the time.
X.It Fl a
Use the
X.Xr adjtime 2
call to gradually skew the local time to the
remote time rather than just hopping.
X.El
X.Sh FILES
X.Bl -tag -width /var/log/wtmp -compact
X.It Pa /var/log/wtmp
A record of date resets and time changes.
X.El
X.Sh SEE ALSO
X.Xr adjtime 2 ,
X.Xr gettimeofday 2 ,
X.Xr utmp 5 ,
X.Xr inetd 8
SHAR_EOF
(set 20 02 08 09 22 56 19 ‘rdate/rdate.8’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/rdate.8’ ||
$echo ‘restore of’ ‘rdate/rdate.8’ ‘failed’
if ( md5sum --help 2>&1 | grep ‘sage: md5sum [’ ) >/dev/null 2>&1
&& ( md5sum --version 2>&1 | grep -v ‘textutils 1.12’ ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1
|| $echo ‘rdate/rdate.8:’ ‘MD5 check failed’
446d9b8a0c5ad6b3423159a9b7feafbb rdate/rdate.8
SHAR_EOF
else
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/rdate.8'"
test 2532 -eq “$shar_count” ||
$echo ‘rdate/rdate.8:’ ‘original size’ ‘2532,’ ‘current size’ “$shar_count!”
fi
fi

============= rdate/rdate.c ==============

if test -f ‘rdate/rdate.c’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/rdate.c’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/rdate.c’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/rdate.c’ &&
/* $Id: rdate.c,v 1.7 2002/08/09 20:20:10 kabe Exp $ /
X
/

X * Copyright (c) 1994 Christos Zoulas
X * All rights reserved.
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Christos Zoulas.
X * 4. The name of the author may not be used to endorse or promote products
X * derived from this software without specific prior written permission.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS’’ AND ANY EXPRESS OR
X * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
X * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
X * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
X * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
X * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
X * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
X * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
X * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
X /
/
Modified for QNXRTP by kabe /
X
/

X * rdate.c: Set the date from the specified host
X *
X * Uses the rfc868 time protocol at socket 37.
X * Time is returned as the number of seconds since
X * midnight January 1st 1900.
X */
X
#include <sys/cdefs.h>
#ifndef lint
static const char _rcsid="$NetBSD: rdate.c,v 1.14 2002/07/14 01:01:10 wiz Exp $";
#endif /
lint /
X
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
X
#include <netinet/in.h>
X
#include <ctype.h>
#include <err.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#if __NETBSD
#include <util.h>
#endif
X
/
seconds from midnight Jan 1900 - 1970 */
#define DIFFERENCE 2208988800UL
X
static char gProgname = “”;
X
#if __USAGE
/
use Makefile to extract this … */
//%C - set system time and date from remote host (time server port 37)
//
//%C [-psa] host
// -p just print, don’t set
// -s just set, don’t print
// -a use adjtime for gradual change instead of instant change
#endif
X
int
main(int argc, char *argv[])
{
X int pr = 0, silent = 0, s;
X int slidetime = 0;
X int adjustment;
X time_t tim;
X char *hname, *emsg;
X struct addrinfo hints, *res, res0;
X int c;
X int error;
X
X gProgname=strrchr(argv[0], ‘/’);
X if (NULL == gProgname) {
X gProgname = argv[0];
X } else {
X gProgname++; /
skip / /
X }
X
X adjustment = 0;
X while ((c = getopt(argc, argv, “psa”)) != -1)
X switch (c) {
X case ‘p’:
X pr++;
X break;
X
X case ‘s’:
X silent++;
X break;
X
X case ‘a’:
X slidetime++;
X break;
X
X default:
X return 1;
X }
X
X if (argc - 1 != optind) {
X fprintf(stderr, “Usage: %s [-psa] host\n”, gProgname);
X return 1;
X }
X hname = argv[optind];
X
X memset(&hints, 0, sizeof (hints));
X hints.ai_family = PF_UNSPEC;
X hints.ai_socktype = SOCK_STREAM;
X hints.ai_flags = AI_CANONNAME;
X error = getaddrinfo(hname, “time”, &hints, &res0);
X if (error)
X errx(1, “%s: %s”, gai_strerror(error), hname);
X
X for (res = res0, s = -1; res != NULL; res = res->ai_next) {
X s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
X if (s < 0) {
X emsg = “socket”;
X continue;
X }
X
X if (connect(s, res->ai_addr, res->ai_addrlen)) {
X close(s);
X s = -1;
X emsg = “connect”;
X continue;
X }
X
X break;
X }
X if (s < 0)
X err(1, “%s”, emsg);
X
X if (read(s, &tim, sizeof(time_t)) != sizeof(time_t))
X err(1, “Could not read data”);
X
X (void) close(s);
X tim = ntohl(tim) - DIFFERENCE;
X
X if (!pr) {
X struct timeval tv;
X if (!slidetime) {
X logwtmp("|", “date”, “”);
X tv.tv_sec = tim;
X tv.tv_usec = 0;
X if (settimeofday(&tv, NULL) == -1)
X err(1, “Could not set time of day”);
X logwtmp("{", “date”, “”);
X } else {
X struct timeval tv_current;
X if (gettimeofday(&tv_current, NULL) == -1)
X err(1, “Could not get local time of day”);
X /
XXX typeof(tv.tv_sec)==time_t COULD BE UNSIGNED! */
X adjustment = tv.tv_sec = tim - tv_current.tv_sec;
X tv.tv_usec = 0;
X if (adjtime(&tv, NULL) == -1)
X err(1, “Could not adjust time of day”);
X }
X }
X
X if (!silent) {
X (void) fputs(ctime(&tim), stdout);
X if (slidetime)
X (void) fprintf(stdout,
X “%s: adjust local clock by %d seconds\n”,
X gProgname, adjustment);
X }
X return 0;
}
X
SHAR_EOF
(set 20 02 08 10 05 20 10 ‘rdate/rdate.c’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/rdate.c’ ||
$echo ‘restore of’ ‘rdate/rdate.c’ ‘failed’
if ( md5sum --help 2>&1 | grep ‘sage: md5sum [’ ) >/dev/null 2>&1
&& ( md5sum --version 2>&1 | grep -v ‘textutils 1.12’ ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1
|| $echo ‘rdate/rdate.c:’ ‘MD5 check failed’
26f8ea62456228f24165b395e0d8d0a0 rdate/rdate.c
SHAR_EOF
else
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/rdate.c'"
test 4983 -eq “$shar_count” ||
$echo ‘rdate/rdate.c:’ ‘original size’ ‘4983,’ ‘current size’ “$shar_count!”
fi
fi
rm -fr _sh12712
exit 0

Haven’t tried, but ntp(xntpd) may compile by plopping in this adjtime.c.

Wups, ntp-4.1.72 (alpha) already has QNX adjtime() in libntp/adjtime.c
(though I guess this will still barf on negative time delta)


kabe

Somehow managed to port ntp-4.1.72 (alpha).

URL:http://www.dais.is.tohoku.ac.jp/~kabe/vsd/qnx/ntp4-4.1.72-x86-public.qpr
(for QNX 6.2; recompile should do on 6.1)

At least it is working against explicit NTP server.

I’d like to hear whether it works for

  • multicast
  • Serial line clock sources
    which I can’t confirm.
    (I live in multicastclient NTP LAN which Solaris happily joins but
    QNX seems to not see it …)

Applied patch below.

kabe

ntp-4.1.72.tar.gz

already have --qnx* and adjtime.c for QNX …

configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/ntp

make

make -n install
(tries to install everything into /usr/bin …?)

configure --prefix=/usr --bindir=/usr/sbin --sysconfdir=/etc --localstatedir=/var/ntp

** tickadj will be installed, but of no use;
** tickadj -a 10000 (set tickadj) will coredump (no file to open)
** (NTP doesn’t have /dev/kmem, so kernel val tick/tickadj is useless)
build will be controlled by @MAKE_TICKADJ@ of configure
(–disable-kmem ?)
configure: added --qnx*) for NOKMEM, _tick, _tickadj

configure --prefix=/usr
–bindir=/usr/sbin
–sysconfdir=/etc
–localstatedir=/var/run

runnable as ntpd/ntpd

multicastclient won’t work (even after disable auth); nic driver?


packaging:
make install DESTDIR=pwd/…/pack
…ooops, correct was --prefix=/opt

configure --prefix=/opt
–bindir=/opt/sbin
–sysconfdir=/etc
–localstatedir=/var/run
make install DESTDIR=pwd/…/pack
cp -pr html …/pack/opt/help/ntp_4.2
(confirm …/pack/opt/help/ntp_4.2/index.htm)
#packager -a -d -f …/repo …/pack
packager -d -f …/repo -m …/repo/ntp4-4.1.72-*.qpr …/pack
(TODO?: direct the user to prepare /etc/ntp.conf)

#mv /tmp/pkgr*/.qpm …/repo/
rmdir /tmp/pkgr

.repdata needs the image;

repackaging *.qpr to include the gif image:

  • extract *qpr
  • add the image into repdata/LicenseUrl/
  • repackage
    tar cf - ntp4-*-public.{qpm,repdata,qpk} |
    gzip -9 > ntp4-4.1.72-x86-public.qpr

find . -name ‘*.dist’ | xargs -n1 …/0diff > /tmp/a
========================= patch ========
*** ./libntp/adjtime.c.dist Sat Nov 3 15:48:19 2001
— ./libntp/adjtime.c Sun Aug 11 11:28:49 2002


*** 261,266 ****
— 261,267 ----

include <sys/time.h>

include <ntp_stdlib.h>

  • include “ntp_syslog.h”

int
adjtime (struct timeval *delta, struct timeval *olddelta)


*** 272,278 ****
/*

  • How many nanoseconds are we adjusting?
    /
    ! delta_nsec = delta->tv_sec * 1e9 + delta->tv_usec * 1000;
    /
  • Build the adjust structure and call ClockAdjust()
    /
    — 273,282 ----
    /
  • How many nanoseconds are we adjusting?
    /
    ! /
    in NTO tv_sec==time_t==UNSIGNED so minus delta will go nowhere;
    ! * fortunately ntpd only adjtime()s on tv_sec=0 so
    ! * this doesn’t surface /
    ! delta_nsec = (signed long)delta->tv_sec * 1e9 + delta->tv_usec * 1000;
    /
  • Build the adjust structure and call ClockAdjust()
    */

*** 297,302 ****
— 301,314 ----

adj.tick_nsec_inc = increment;
adj.tick_count = count;

  • #ifdef DEBUG
  • if (debug > 2)
  •   msyslog(LOG_DEBUG,
    
  •   "QNX adjtime(): adjust %g msec for %ld nsec * %lu (durate %g ms)\n",
    
  •   delta_nsec/1000.0,
    
  •   adj.tick_nsec_inc, adj.tick_count,
    
  •   ((double)period.nsec/1e9*adj.tick_count*1000.0));
    
  • #endif
    }
    else
    {
    *** ./configure.dist Wed Dec 19 11:01:30 2001
    — ./configure Sun Aug 11 04:58:50 2002

*** 13855,13874 ****
— 13855,13877 ----
;;
--hpux*)
#ans=no
;;
--irix[456])
ans=no
;;
--linux
)
ans=no
;;

  •  *-*-qnx*)		# Microkernel, no tick, no tickadj
    
  •     ans=no
    
  •     ;;
    

--winnt3.5)
ans=no
;;
esac

fi;
ac_cv_var_can_kmem=$ans
fi
echo “$as_me:13873: result: $ac_cv_var_can_kmem” >&5
echo “${ECHO_T}$ac_cv_var_can_kmem” >&6


*** 13950,13972 ****
;;
-ibm-aix[34])
ans=no
;;
--mpeix*)
ans=no
;;
--ptx*)
ans=tick
;;
! --sco3.2v[45])
ans=no
;;
--solaris2
)
ans=nsec_per_tick
;;
--sysv4*)
ans=tick
;;
esac
ac_cv_var_nlist_tick=$ans
fi
echo “$as_me:13972: result: $ac_cv_var_nlist_tick” >&5
— 13953,13978 ----
;;
-ibm-aix[34])
ans=no
;;
--mpeix*)
ans=no
;;
--ptx*)
ans=tick
;;
! --qnx*)
ans=no
;;

  • --sco3.2v[45]*)
  • ans=no
    
  • ;;
    

--solaris2*)
ans=nsec_per_tick
;;
--sysv4*)
ans=tick
;;
esac
ac_cv_var_nlist_tick=$ans
fi
echo “$as_me:13972: result: $ac_cv_var_nlist_tick” >&5


*** 13979,14001 ****
;;
esac

echo “$as_me:13982: checking for the units of ‘tick’” >&5
echo $ECHO_N “checking for the units of ‘tick’… $ECHO_C” >&6
if test “${ac_cv_var_tick_nano+set}” = set; then
echo $ECHO_N “(cached) $ECHO_C” >&6
else
ans=usec
case “$target” in
! --solaris2*)
ans=nsec
;;
esac
ac_cv_var_tick_nano=$ans
fi
echo “$as_me:13995: result: $ac_cv_var_tick_nano” >&5
echo “${ECHO_T}$ac_cv_var_tick_nano” >&6
case “$ac_cv_var_tick_nano” in
nsec)
cat >>confdefs.h <<\EOF
#define TICK_NANO 1
EOF
— 13985,14010 ----
;;
esac

echo “$as_me:13982: checking for the units of ‘tick’” >&5
echo $ECHO_N “checking for the units of ‘tick’… $ECHO_C” >&6
if test “${ac_cv_var_tick_nano+set}” = set; then
echo $ECHO_N “(cached) $ECHO_C” >&6
else
ans=usec
case “$target” in
! --nto-qnx*)
ans=nsec
;;

  • --solaris2*)
  • ans=nsec
    
  • ;;
    

esac
ac_cv_var_tick_nano=$ans
fi
echo “$as_me:13995: result: $ac_cv_var_tick_nano” >&5
echo “${ECHO_T}$ac_cv_var_tick_nano” >&6
case “$ac_cv_var_tick_nano” in
nsec)
cat >>confdefs.h <<\EOF
#define TICK_NANO 1
EOF


*** 14027,14049 ****
;;
--aix*)
ans=tickadj
;;
--mpeix*)
ans=no
;;
--ptx*)
ans=tickadj
;;
! --sco3.2v4*)
ans=no
;;
--sco3.2v5.0*)
ans=clock_drift
;;
--solaris2*)
ans=no # hrestime_adj
;;
--sysv4*)
ans=tickadj
;;
esac
— 14036,14061 ----
;;
--aix*)
ans=tickadj
;;
--mpeix*)
ans=no
;;
--ptx*)
ans=tickadj
;;
! --qnx*)
ans=no
;;

  • --sco3.2v4*)
  • ans=no
    
  • ;;
    

--sco3.2v5.0*)
ans=clock_drift
;;
--solaris2*)
ans=no # hrestime_adj
;;
--sysv4*)
ans=tickadj
;;
esac


*** 14062,14081 ****
— 14074,14096 ----
echo “$as_me:14062: checking for the units of ‘tickadj’” >&5
echo $ECHO_N “checking for the units of ‘tickadj’… $ECHO_C” >&6
if test “${ac_cv_var_tickadj_nano+set}” = set; then
echo $ECHO_N “(cached) $ECHO_C” >&6
else
ans=usec
case “$target” in
--solaris2*)
ans=nsec
;;

  • --nto-qnx*)
  • ans=nsec
    
  • ;;
    

esac
ac_cv_var_tickadj_nano=$ans
fi
echo “$as_me:14075: result: $ac_cv_var_tickadj_nano” >&5
echo “${ECHO_T}$ac_cv_var_tickadj_nano” >&6
case “$ac_cv_var_tickadj_nano” in
nsec)
cat >>confdefs.h <<\EOF
#define TICKADJ_NANO 1
EOF


*** 14103,14125 ****
;;
--mpeix*)
ans=no
;;
--nextstep*)
ans=_dosynctodr
;;
--ptx*)
ans=doresettodr
;;
! --sco3.2v4*)
ans=no
;;
--sco3.2v5*)
ans=track_rtc
;;
--solaris2*)
ans=dosynctodr
;;
--sysv4*)
ans=doresettodr
;;
)
— 14118,14143 ----
;;
--mpeix
)
ans=no
;;
--nextstep*)
ans=_dosynctodr
;;
--ptx*)
ans=doresettodr
;;
! --qnx*) # manually invoke “rtc -s hw”
ans=no
;;

  • --sco3.2v4*)
  • ans=no
    
  • ;;
    

--sco3.2v5*)
ans=track_rtc
;;
--solaris2*)
ans=dosynctodr
;;
--sysv4*)
ans=doresettodr
;;
*)


*** 14208,14227 ****
— 14226,14248 ----
;;
--irix*)
ans=10000
;;
--linux*)
ans=txc.tick
;;
--mpeix*)
ans=no
;;

  •   *-*-nto-qnx*)
    
  •      ans=no		# approx 1ms or 10ms; use ClockPeriod()
    
  •      ;;
    

--winnt3.5)
ans=’(every / 10)’
;;
*)
ans=‘1000000L/hz’
;;
esac
fi;
ac_cv_var_tick=$ans
fi


*** 14271,14290 ****
— 14292,14314 ----
--hpux*)
case “$ac_cv_var_adjtime_is_accurate” in
yes) ans=‘tick/16’ ;;
esac
;;
--irix*)
ans=150
;;
--mpeix*)
ans=no

  •   ;;
    
  • --nto-qnx*)
  •   ans=no		# NTO assumes crystal is accurate?
    

;;
--sco3.2v5.0*)
ans=10000L/hz
;;
--solaris2*)
case “$ac_cv_var_adjtime_is_accurate” in
yes)
#ans=‘tick/16’
;;
esac

The previously posted rdate had a serious bug which could
go berserk on small negative adjust/zero adjust.

Dunno how may people were using this but strongly recommended update.

(Why is *qpg detected as binary??)

kabe

#!/bin/sh

This is a shell archive (produced by GNU sharutils 4.2.1).

To extract the files from this archive, save it to some FILE, remove

everything before the !/bin/sh' line above, then type sh FILE’.

Made on 2002-08-31 02:37 JST by <kabe@sra-tohoku.co.jp>.

Source directory was `/autofs/home/kabe/qnx’.

Existing files will not be overwritten unless `-c’ is specified.

This shar contains:

length mode name

------ ---------- ------------------------------------------

815 -rw-rw-r-- rdate/Makefile

2532 -rw-rw-r-- rdate/rdate.8

5086 -rw-rw-r-- rdate/rdate.c

116 -rw-rw-r-- rdate/TODO

2493 -rw-rw-r-- rdate/adjtime.c

323 -rw-rw-r-- rdate/a.c

12075 -rw-rw-rw- rdate/rdate-1.1-x86-public.qpr

3819 -rw-rw-r-- rdate/rdate.qpg

echo=echo
if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
shar_touch=‘touch -am -t $1$2$3$4$5$6.$7 “$8”’
elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
shar_touch=‘touch -am $3$4$5$6$1$2.$7 “$8”’
elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
shar_touch=‘touch -am $3$4$5$6$2 “$8”’
else
shar_touch=:
echo
$echo ‘WARNING: not restoring timestamps. Consider getting and’
$echo “installing GNU `touch’, distributed in GNU File Utilities…”
echo
fi
rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch

if mkdir _sh04593; then
$echo ‘x -’ ‘creating lock directory’
else
$echo ‘failed to create lock directory’
exit 1
fi

============= rdate/Makefile ==============

if test ! -d ‘rdate’; then
$echo ‘x -’ ‘creating directory’ ‘rdate’
mkdir ‘rdate’
fi
if test -f ‘rdate/Makefile’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/Makefile’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/Makefile’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/Makefile’ &&

$Id: Makefile,v 1.9 2002/08/14 04:15:55 kabe Exp $

X
PROG= rdate
X
MAN= rdate.8
X
LDLIBS=-lsocket
CCLINK=$(CC)
X
OBJS = rdate.o adjtime.o
X
$(PROG): $(OBJS) $(PROG).use
X $(CCLINK) -o $@ $(OBJS) $(LDLIBS)
X usemsg $@ $(PROG).use
X
$(PROG).use: $(PROG).c
X sed -ne ‘/#if __USAGE/,/#endif/s/^////p’ $(PROG).c > $@
X
clean::
X $(RM) $(PROG)
X $(RM) *.o a.out core *~ #~
X $(RM) $(PROG).use
X $(RM) history.qrs
X
X
BINDIR=/opt/sbin
MANDIR=/opt/man
install: $(PROG)
X mkdir -p $(DESTDIR)$(BINDIR)
X cp -p $(PROG) $(DESTDIR)$(BINDIR)
X MAN8=expr $(MAN) : '.*\.\([^.]*\)$$';
X mkdir -p $(DESTDIR)$(MANDIR)/man$$MAN8;
X cp -p $(MAN) $(DESTDIR)$(MANDIR)/man$$MAN8
X

QNX package thingies

package: $(PROG).qpg
X $(MAKE) CFLAGS="-O2 -Wall"
X $(MAKE) install DESTDIR=./DIST
X packager -d -f . -m $(PROG).qpg DIST
X
clean::
X $(RM) -r ./DIST
SHAR_EOF
(set 20 02 08 14 13 15 55 ‘rdate/Makefile’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/Makefile’ ||
$echo ‘restore of’ ‘rdate/Makefile’ ‘failed’
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/Makefile'"
test 815 -eq “$shar_count” ||
$echo ‘rdate/Makefile:’ ‘original size’ ‘815,’ ‘current size’ “$shar_count!”
fi

============= rdate/rdate.8 ==============

if test -f ‘rdate/rdate.8’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/rdate.8’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/rdate.8’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/rdate.8’ &&
X." $NetBSD: rdate.8,v 1.9 2002/01/19 11:45:00 wiz Exp $
X."
X." Copyright (c) 1994 Christos Zoulas
X." All rights reserved.
X."
X." Redistribution and use in source and binary forms, with or without
X." modification, are permitted provided that the following conditions
X." are met:
X." 1. Redistributions of source code must retain the above copyright
X." notice, this list of conditions and the following disclaimer.
X." 2. Redistributions in binary form must reproduce the above copyright
X." notice, this list of conditions and the following disclaimer in the
X." documentation and/or other materials provided with the distribution.
X." 3. All advertising materials mentioning features or use of this software
X." must display the following acknowledgement:
X." This product includes software developed by Christos Zoulas.
X." 4. The name of the author may not be used to endorse or promote products
X." derived from this software without specific prior written permission.
X."
X." THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS’’ AND ANY EXPRESS OR
X." IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
X." OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
X." IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
X." INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
X." NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
X." DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
X." THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
X." (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
X." THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
X."
X.Dd April 30, 1994
X.Dt RDATE 8
X.Os
X.Sh NAME
X.Nm rdate
X.Nd set the system’s date from a remote host
X.Sh SYNOPSIS
X.Nm
X.Op Fl psa
X.Ar host
X.Sh DESCRIPTION
X.Nm
displays and sets the local date and time from the
host name or address given as the argument. It uses the RFC868
protocol which is usually implemented as a built-in service of
X.Xr inetd 8 .
X.Pp
Available options:
X.Pp
X.Bl -tag -width indent
X.It Fl p
Do not set, just print the remote time
X.It Fl s
Do not print the time.
X.It Fl a
Use the
X.Xr adjtime 2
call to gradually skew the local time to the
remote time rather than just hopping.
X.El
X.Sh FILES
X.Bl -tag -width /var/log/wtmp -compact
X.It Pa /var/log/wtmp
A record of date resets and time changes.
X.El
X.Sh SEE ALSO
X.Xr adjtime 2 ,
X.Xr gettimeofday 2 ,
X.Xr utmp 5 ,
X.Xr inetd 8
SHAR_EOF
(set 20 02 08 09 22 56 19 ‘rdate/rdate.8’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/rdate.8’ ||
$echo ‘restore of’ ‘rdate/rdate.8’ ‘failed’
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/rdate.8'"
test 2532 -eq “$shar_count” ||
$echo ‘rdate/rdate.8:’ ‘original size’ ‘2532,’ ‘current size’ “$shar_count!”
fi

============= rdate/rdate.c ==============

if test -f ‘rdate/rdate.c’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/rdate.c’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/rdate.c’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/rdate.c’ &&
/* $Id: rdate.c,v 1.9 2002/08/14 04:27:36 kabe Exp $ /
X
/

X * Copyright (c) 1994 Christos Zoulas
X * All rights reserved.
X *
X * Redistribution and use in source and binary forms, with or without
X * modification, are permitted provided that the following conditions
X * are met:
X * 1. Redistributions of source code must retain the above copyright
X * notice, this list of conditions and the following disclaimer.
X * 2. Redistributions in binary form must reproduce the above copyright
X * notice, this list of conditions and the following disclaimer in the
X * documentation and/or other materials provided with the distribution.
X * 3. All advertising materials mentioning features or use of this software
X * must display the following acknowledgement:
X * This product includes software developed by Christos Zoulas.
X * 4. The name of the author may not be used to endorse or promote products
X * derived from this software without specific prior written permission.
X *
X * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS’’ AND ANY EXPRESS OR
X * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
X * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
X * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
X * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
X * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
X * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
X * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
X * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
X /
/
Modified for QNXRTP by kabe /
X
/

X * rdate.c: Set the date from the specified host
X *
X * Uses the rfc868 time protocol at socket 37.
X * Time is returned as the number of seconds since
X * midnight January 1st 1900.
X /
X
#include <sys/cdefs.h>
#ifndef lint
static const char * const _rcsidNetBSD="$NetBSD: rdate.c,v 1.14 2002/07/14 01:01:10 wiz Exp $";
static const char * const _rcsid = “$Id: rdate.c,v 1.9 2002/08/14 04:27:36 kabe Exp $”;
#endif /
lint /
X
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
X
#include <netinet/in.h>
X
#include <ctype.h>
#include <err.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#if __NETBSD
#include <util.h>
#endif
X
/
seconds from midnight Jan 1900 - 1970 */
#define DIFFERENCE 2208988800UL
X
static char gProgname = “”;
X
#if __USAGE
/
use Makefile to extract this … */
//%C - set system time and date from remote host (time server port 37)
//
//%C [-psa] host
// -p just print, don’t set
// -s just set, don’t print
// -a use adjtime for gradual change instead of instant change
#endif
X
int
main(int argc, char *argv[])
{
X int pr = 0, silent = 0, s;
X int slidetime = 0;
X int adjustment;
X time_t tim;
X char *hname, *emsg;
X struct addrinfo hints, *res, res0;
X int c;
X int error;
X
X gProgname=strrchr(argv[0], ‘/’);
X if (NULL == gProgname) {
X gProgname = argv[0];
X } else {
X gProgname++; /
skip ‘/’ /
X }
X
X adjustment = 0;
X while ((c = getopt(argc, argv, “psa”)) != -1)
X switch (c) {
X case ‘p’:
X pr++;
X break;
X
X case ‘s’:
X silent++;
X break;
X
X case ‘a’:
X slidetime++;
X break;
X
X default:
X return 1;
X }
X
X if (argc - 1 != optind) {
X fprintf(stderr, “Usage: %s [-psa] host\n”, gProgname);
X return 1;
X }
X hname = argv[optind];
X
X memset(&hints, 0, sizeof (hints));
X hints.ai_family = PF_UNSPEC;
X hints.ai_socktype = SOCK_STREAM;
X hints.ai_flags = AI_CANONNAME;
X error = getaddrinfo(hname, “time”, &hints, &res0);
X if (error)
X errx(1, “%s: %s”, gai_strerror(error), hname);
X
X for (res = res0, s = -1; res != NULL; res = res->ai_next) {
X s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
X if (s < 0) {
X emsg = “socket”;
X continue;
X }
X
X if (connect(s, res->ai_addr, res->ai_addrlen)) {
X close(s);
X s = -1;
X emsg = “connect”;
X continue;
X }
X
X break;
X }
X if (s < 0)
X err(1, “%s”, emsg);
X
X if (read(s, &tim, sizeof(time_t)) != sizeof(time_t))
X err(1, “Could not read data”);
X
X (void) close(s);
X tim = ntohl(tim) - DIFFERENCE;
X
X if (!pr) {
X struct timeval tv;
X if (!slidetime) {
X logwtmp("|", “date”, “”);
X tv.tv_sec = tim;
X tv.tv_usec = 0;
X if (settimeofday(&tv, NULL) == -1)
X err(1, “Could not set time of day”);
X logwtmp("{", “date”, “”);
X } else {
X struct timeval tv_current;
X if (gettimeofday(&tv_current, NULL) == -1)
X err(1, “Could not get local time of day”);
X /
XXX typeof(tv.tv_sec)==time_t COULD BE UNSIGNED! */
X adjustment = tv.tv_sec = tim - tv_current.tv_sec;
X tv.tv_usec = 0;
X if (adjtime(&tv, NULL) == -1)
X err(1, “Could not adjust time of day”);
X }
X }
X
X if (!silent) {
X (void) fputs(ctime(&tim), stdout);
X if (slidetime)
X (void) fprintf(stdout,
X “%s: adjust local clock by %d seconds\n”,
X gProgname, adjustment);
X }
X return 0;
}
X
SHAR_EOF
(set 20 02 08 14 13 27 36 ‘rdate/rdate.c’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/rdate.c’ ||
$echo ‘restore of’ ‘rdate/rdate.c’ ‘failed’
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/rdate.c'"
test 5086 -eq “$shar_count” ||
$echo ‘rdate/rdate.c:’ ‘original size’ ‘5086,’ ‘current size’ “$shar_count!”
fi

============= rdate/TODO ==============

if test -f ‘rdate/TODO’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/TODO’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/TODO’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/TODO’ &&
#test functions of crafted adjtime()
#don’t go backwards (don’t set beyond ticksize in ClockAdjust delta)
X
package?
SHAR_EOF
(set 20 02 08 31 02 32 04 ‘rdate/TODO’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/TODO’ ||
$echo ‘restore of’ ‘rdate/TODO’ ‘failed’
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/TODO'"
test 116 -eq “$shar_count” ||
$echo ‘rdate/TODO:’ ‘original size’ ‘116,’ ‘current size’ “$shar_count!”
fi

============= rdate/adjtime.c ==============

if test -f ‘rdate/adjtime.c’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/adjtime.c’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/adjtime.c’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/adjtime.c’ &&
/*
X * adjtime() for QNXNTO
X *
X /
static const char * const _rcsid="$Id: adjtime.c,v 1.11 2002/08/30 17:15:45 kabe Exp $";
X
#include <stdio.h>
#include <sys/types.h>
#include <sys/time.h>
#include <stdint.h>
X
#if QNXNTO
#include <sys/neutrino.h>
#define UNSIGNED_TV_SEC
#endif
X
#if defined(QNXNTO) && !defined(HAVE_ADJTIME)
int
adjtime(struct timeval delta, struct timeval * const olddelta)
{
X int retval = 0;
X struct _clockadjust newadjust;
X struct _clockadjust oldadjust;
X
#ifdef DEBUG
X /
in RTP, time_t (uint32) tv_sec, suseconds_t (int32) tv_usec /
X if (delta) fprintf(stderr,“adjtime: %ld:%ld\n”, (long)delta->tv_sec, (long)delta->tv_usec);
#endif
X
X if (delta) {
X int64_t nto_delta; /
nanosecs /
X struct _clockperiod nto_period;
X long tickadj; /nanosec/
X
X /
XXX typeof(tv.tv_sec)==time_t COULD BE UNSIGNED! /
X nto_delta =
#ifdef UNSIGNED_TV_SEC
X (int64_t)(signed long)delta->tv_sec * 1000000000LL +
#else
X (int64_t)delta->tv_sec * 1000000000LL +
#endif
X (int64_t)delta->tv_usec * 1000LL;
X
#ifdef DEBUG
X fprintf(stderr,“adjtime: delta=%lldns\n”, nto_delta);
#endif
X
X /
get current tick length /
X ClockPeriod(CLOCK_REALTIME, NULL, &nto_period, 0);
X
X /
10% deviation from standard tick /
X tickadj = nto_period.nsec * 10/percent/ / 100;
X if (-tickadj < nto_delta && nto_delta < tickadj) {
X /
lesser than 10% (including zero);
X direct bump by one tick /
X tickadj = nto_delta;
X newadjust.tick_nsec_inc = tickadj;
X newadjust.tick_count = 1;
X } else {
X if (nto_delta<0) tickadj = -tickadj;
X newadjust.tick_nsec_inc = tickadj;
X newadjust.tick_count = nto_delta / tickadj; /
possible roundoff error /
X }
#ifdef DEBUG
X fprintf(stderr, “adjtime: Slewing %ld nsec * %lu ticks (range %ld seconds)\n”,
X newadjust.tick_nsec_inc, newadjust.tick_count,
X (long)((uint64_t)newadjust.tick_count
nto_period.nsec/1000000000L));
#endif
X retval = ClockAdjust(CLOCK_REALTIME, &newadjust, &oldadjust);
X }
X
X if (olddelta) {
X int64_t d;
X if (!delta)
X retval = ClockAdjust(CLOCK_REALTIME, NULL, &oldadjust);
X /
XXX overflow warning /
X /
but could not if previous adjtime fitted in nto_delta /
X d = (int64_t)oldadjust.tick_nsec_inc * oldadjust.tick_count;
X d /= 1000; /
nanosec to usec /
X olddelta->tv_sec = d / 1000000; /
usec to sec /
X /
beware for negative d;
X * should -1us be {0,-1} or {-1, 999999}? /
X d -= olddelta->tv_sec * 1000000;
X olddelta->tv_usec = d;
X }
X
X return retval;
}
#endif /
QNXNTO */
SHAR_EOF
(set 20 02 08 31 02 15 45 ‘rdate/adjtime.c’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/adjtime.c’ ||
$echo ‘restore of’ ‘rdate/adjtime.c’ ‘failed’
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/adjtime.c'"
test 2493 -eq “$shar_count” ||
$echo ‘rdate/adjtime.c:’ ‘original size’ ‘2493,’ ‘current size’ “$shar_count!”
fi

============= rdate/a.c ==============

if test -f ‘rdate/a.c’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/a.c’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/a.c’ ‘(text)’
sed ‘s/^X//’ << ‘SHAR_EOF’ > ‘rdate/a.c’ &&
#include <stdio.h>
#include <sys/time.h>
X
int
main(int argc, char *argv[])
{
X struct timeval old,new;
X if (argc>1) {
X new.tv_sec=0;
X new.tv_usec = atoi(argv[1]);
X printf(“adjust %ld usec\n”, new.tv_usec);
X adjtime(&new, NULL);
X }
X adjtime(NULL, &old);
X printf(“delta=%ld.%ld\n”, (long)old.tv_sec, (long)old.tv_usec);
}
SHAR_EOF
(set 20 02 08 31 02 19 31 ‘rdate/a.c’; eval “$shar_touch”) &&
chmod 0664 ‘rdate/a.c’ ||
$echo ‘restore of’ ‘rdate/a.c’ ‘failed’
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/a.c'"
test 323 -eq “$shar_count” ||
$echo ‘rdate/a.c:’ ‘original size’ ‘323,’ ‘current size’ “$shar_count!”
fi

============= rdate/rdate-1.1-x86-public.qpr ==============

if test -f ‘rdate/rdate-1.1-x86-public.qpr’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/rdate-1.1-x86-public.qpr’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/rdate-1.1-x86-public.qpr’ ‘(binary)’
sed ‘s/^X//’ << ‘SHAR_EOF’ | uudecode &&
begin 600 rdate/rdate-1.1-x86-public.qpr
M’XL($2J;ST``^Q:>3Q4Z_]7E%!:=&]H<4(DS!AKMI$U9!]<E6C,G.$P,V?, MG#%DN6DA6BF2%*Y*5$JW$&DCM(E4*EL4RK54DB7E=\:2=73_N-_[_?WQ?5X< MX_F\/]OS69[G.:]ADHD(J(S#X)09;\J1,+X,GSX_N&A@E-145=7YU,9&L-_
M<2/:ZBKJOI:&FHJ6FI:N!4U%"\JI:6)A^@\D;,M5@LQB$S6%"</(=#@/ MB/YOF/-O#ZF]<_B,TV%]/OXV"1]650[.W?:F1_'A8[)JEU>$%%LCIU?I-#G& M(K(QZU.E1.6(0CB+#W/*(MLK.3.B8U='^&VSKO$)UXVU(B[Y6K3#I?"]]:WK M?@UB%E4K;-^%9#^CN2^5^>L)4KW$0$"GQJ;Y[=MWIO([^W__F%?5AGSL_=SS MX</GUSE5VB9]*04%AY>4]>(:I,(=S:.3U@@U?\+I-(0_3BYE%>0EWMP]H[K" M1&5%?MU?63J!!MV2':VW&[5#^**B[&P[NIL<BIK;OGAD>BF+;M8[UM;XPEVN M<E4K7)X=6UR0[\;/IYXZXQ>W.QX1TMNK/S@Z5YQ3*/D09'1=5S6E4M8CV[%D M9G:H&^FZ6:;A6PSIE5J#>&?"ZON<-FMRX].%0I#MQ7E7E;Z0\ETL.S5,&X/" MO]E4/?,Z/OO('!W+@J7QGW-7%8'5!*799STZDBJTO3BEK\)UM:'H]3V%KBKW M#C=B@K$;UQE0M)_\E55+::T4K+Q3D1'YF#)'K#WU9)#T+HGR-:))#_D\)0*$ M#K[HT$DJ:R::2QLLR=<\'9TL;-5Q)3#(+CYEO6*S"WZ_;!XH+GK!$FJ1O!P= M*K'HUU9FQWK)7KUR2=OG#E1:CO>!7XB]PC.MQ6#K+<7.OG&O"KQCK*SPT+"
M5](XZ^GOW$V-OJQ
[,Q;?)3UE_U#NSK$>%YHUZ6ID&MG&'7&_5!4@NF$$3 MMP^HGZNJZ;/+R77-YX>'#FYTL',T2=USJ5A&WH2#-U23O4?M_J/.TE_P[OT5 M,[/W’,:A?9(7]VHSJ^=^GI6=1[O=W%P6,&AYM=+2YH1Q;)Q-4DK+QQAGA MWK/YYOP*5USO&0GOD.M^F/+A59LM8/:<X=\WN^?"F=4*I&A2;WDI<$KK44
M%G0+2ST2BK5V48EX6F;J<*2I0&GEPC!=(O-E^F4+GSY].:="SO$/F=22)8]V
ME03<.*59>T!5H
)>5GK=@2=9]M\B
^CWZ@H\GV/@]HS5FDXYZDD[VK8_@O"P
MOF3SEXP75+?XC<:3YWHZDM\!2\)MC.4'[FM5&P^F'.J4JG!HB,Z.&6-O%A+ M*K':[=*MXH=Y=Y?QG^\U4C;=\VYN]O9JZ>ZN;<6UILSMSFMD;=N>$!&^
M>_M!@1")X%(‘O&WW^66A-F’…WO<GPD’?#-;N-[5
.%#8%-45RM3/Q]@55:
MAHRW;^LWR,V/RK-]9A0;UREM)P+?%0C_ZGU5_/MOLD6ALV+7-<C<?)YEO:G>
M\CC&X;/CQ64?J-1R\34**O8)BVL^;<33HJ>9<T?56^3#^DW[ESY?)?Y$5+> M'R]<1?.8P23MMW-3+=)R,R[6WBQOQ"A]>M[!YU':(+^D@O]TR%^$8UU)6R6N M/KG/I2I?J-1>^;FZ;F=JL?=BO15.4:+^FL;&P47!:5%JT,=G^KINDN/[Y…
MH
[@F-J_107H.^I(#M/9,/S!3&=HM%SK][V53^U/TEQ9ZZY4KA!:!N8YS^
M&@%;OVN%3E_/]HM&9U84R!1:R’42O8[W18KLWN.?&=C$7W6$7ZYAN]C=R>3
M]5>^C/>+(!-?RD:%,T:U%3BO/G^VC:[V(C=&'58%;@4C’QWJ$&YLOQK5
M8:IC.%N]2M#+CE[ME:D4\Y?6;.3"Z+4S21:%SUO4SK?Q53R
VLI,V&[2E
MI9@TVG?0
::Y>FVOSN/8@5AWVU;?.B0A\UM3,CNJXXGP3;!6LOB"CJQL56\6
M;JN024]?;PA<5^-W.O,ZC,)6>B=#(%E’(#;U9Z7]V0^Z8PX=8[F8;[‘G?
MN^2KIB<[<MSCW\Z7PDH@^\[*.?N&3Z-3?:1K5ZOCGHFMA7>2T\R_!XG6 M'-K[NZ5DJ;>GJ'.=K47_BCH]C83]--GV-9338%=&?OF!]QJ75_9_EAQH<W.< M]WB^KNU:G<._)^RS:3[+VA9TO7Q7RG$DS3_6]V!E@$FP-NMSX>)"1+WL@>
M4(QMT’X:0#][X&8ZV<"L2&K/P+UZ:/E\_;B-Q>_7/K=0.A[5X^4%$>TI<=
M,&A]?V?E+0,J?M;7<%2H5,\!G^QB’6QNZHDWI8FMWSL4^@=67_F>V5WQ
MX/R?[)/96:7QW66T
-WGW[R@<>J,L@-#D*#:][=V?!-MRA9WTV3\T7?+N$K0
M+1!.^OJE;2$5^:1Q;*%TCT!64=V3%K=MM=$@ON)?2^MX[<L-,.?VI%N%O\: M:@#SP:!0^7L.727&45U1H?)]!K:G*6+,Q)JFHT'6@-#N.+F5AZ/[SK4G)(BE M505DZ\W):9%(S\I^C+!,_[07,U[SN.L@W<=8-_E5Z+5-N<E+/&8G6T<GY49B MK]5W"\?DF;(,]^04RC#%+.)N$7:6T>[&D&D>&Y6/M,S:M5N]_.2.G30GN[?Q MFX6=/(*#4@<4:(#:E:V-+*Q3L(!#8<9^HD+&;%EK<:'"^]]TZ)&=N2N/!8<K MGUA5>#,U@FPDM5GM^B0P[Q:!VF"E?0O(3%RN?I[7-"%)>(7S?"M<TS’E&
M%3>^GK<’.[/E,2)B$MXG7S.C-$B^W
P&</&=E5A;L;W8J^14^VN&O^!3:__ M$&<'*6TK,G%73EZ^H4;F1K(ER9T=V'4U[@G>7M48ZW<K.?
ZV8/3-[#:X
MRRG]/7’;UC3[8@CG5MJ_7$&8$WJ-STJR[^\C%%TM%V^0'-&XL>$_G+)./Z< MGAWF8OO2C6RZBO=YPF67W0+Q4F^;A:)2Y377’&62/4Q>]Y%]JI7?TM:*E.I
M>D+.)>4[0^>2F50`<FJOL1O;9LQD1?>W.&<E/?FK74
<Y5J/LBHR3G4ECL
M5],’^5>JHZ(#(B0E5’#4RA;;+!YA]/T)73/DOB+B5+[N4<CP5SZ?7=&W
M^[T.N#(R]M4S:C)$Q)Q4,6&4(K$V29>LEYR83[V$TE,'W0QI8=8,.4J=P_PF
M3[%G6JU8Z\S/Q?+%/>#D29[=H7ZTH)4EOMO=M!R7H_Y]GQN%=-5Y\L4.:<
M67+YQJA<M?\-Q_771-?5O'=J\NZ&:NR3#'5_<Y3G-JSV6$^7K,.S=.98W%D M"Z'X2<9ELPRHJB+"9_]Z^+5WO]#RT%S)M<%)P3HK%/[L)*L4?UERU[77)"]? M*#'#:EEVS-)RHTK-(ZQEE5E][3H2]Y%B/TK=?8KX,:FPYX*LIUJ_W'7Q[2-K M-RW==Z1Q]<P->XM[4JK3--U-!:\6%+?-I;6LW<$6*GJ=<MJJ1'[KY^6*CQ>W MW?GNM&*'7J4@7CQGV<RUK>I=8;N,%U&1DT*>^Y^+5QY5"X_RI6EN2E&I^OS! MHLZMQ5016=\?PQ>LG?Z;U.W+Z97O$D32FG7=S=Y$D+0C!57WUZMN=SED]L#< MV82_XGU5[($]9QZ<BWK!WIB^^WWNN6WO>^-3Y]U5Q"I$Y"ZX<T=^:QA[A@]- M\X2LVI;MF[=:.+E=MO]Z^7<_YO-;\=+7BOE='A[3^HWCE&9NL4I=+=OTCDI
M9W%VI8"6@LC;&Z^0S@WN(55>P<Z-)RVE2OEJ=".6%ND30W-?&?HFC>XSL_&
MS’QQE#S[JT@3
<(S?>,^FW4Q1TB2_!DBP
MJ7;!:6'G(]=TN\^KYB4MF?4M MTC)Y\ZR3ZF=V4(Z7-9_*,=VY,RRU72SIW11@Z=S>N!M#7D?’?:L<$+E6R.C
MSV&[L8+V9VH3BG’MBU>7ST568R\DI[LLI61U6#P1[3F??X@X]^N*^:0&D&)K
M+E&E4N;%LOX,GLYM4M:]NZ:IA66B?:9T>_C7/+#2G.HJ]2[.B1B6K1N=OFR M%&833A?Y?I>9[UI3>2XY3-+[[-]_#*CUR!?GQ&/Y[/[;Y_%_>SGW_]H_[2.
MZ>].)R*.F[R_4_U?>?V/H&?C3J(?R&1!,%U?&H=1D3;"^LYF)CIH+`
M2J2SN)TI;T0A*&#Q7(X’Q'#0,S/:6'J?9VUN.HOG1_#FF2>.%08E&0"
MLDA,B(&@*@"B!\Q&>…Y+A'3LBR8?H"5H3Z1%9"$CMGD,8+'(":,8 M(-Z0P4"SF\A%ZF$G$GFRVA!I('YBB8SC'T3PY"=VT"\ZEHU]7$@[,>1Q M*DAD@39LF@?(Q./&<8ZG_4R$"6HW7E5%116KLA:K-J6D0<@T<A@P"T)@9@!V M"I916=AQ('C\-H#XD?.SDF9EA>09L85R9,9I.0G\1U"#0:'(#K!D(H).8
M,!W:-AAEP!BFT8AT\K#J,2P!0[&10NGH3J.AU>TAJ@69)".0!0(#<>@
>-8
MQQ!Y"C"E$2’J5,OK#-+),’/08KLQ>3=FFA>/!1WM:53J((8QB74LE9<$)P<K
MWB:9HLE’
@D"]0GO0_0U[&81&4$]H)]V&B-8[P98RT9@DT68LA&O(9=-/9B M0BP$9@&;8#:5R*P@V(&!%,AL2,?*2PL/.(>)TGHP@>$1G),(DF$Z@H<OY
M$XP5D>D)3H,9D
$5"V")P*DH?P%*#38(VD-D3W!!O$"!189(/@,``C/[' M!&A$DA=$'Y]\DT3^'>56,-USN*9&]*/6L]A4A#6H%X%H(,“F7X0"016.QK;
M0Q4-*"FI0#E$’$.(,K@6.,R,VDRD#IM.))%@)AEUAQJ@!‘@!$4#.!2* M:B,#GDPB'0TW$T(",+Q\&K3T[[C$([Z3@=-EPW#1V!$1K^&2P@ZN$A;U8G!O M&#)S+&Q2]YNBM4WH?B-->=KN-UUSG[ZK#U-'>_9XKLEM>P*C$YK#=%(WASR
M]!K’.4+@R4EB!X0%0TGGON)"H[C'B7RY+>!$=:HL-,O!GD#W)SD@F2V30&
ME@-1R6CF4=<]”>S^6(D'/=$MP]-5!^0@Z;8.&VCHJ;71O1&(8Y>$.M’
M(:?B8"]C<M0R@^G^U@:32-,)'MS*V2UA=,AQ&P83J,9K>-B; M8:*:E06C$HBH2=/F(9
)X/<0D;0G&=1N84W*@2=-N96BR’9&P6C$QRT!1+)
MJ#S,9)&#>;IDQ$;72G^(/S4UF,8;9=(098.I/HK+)4W:M80'&,".B28#
M@N>N@17:$^BL;$=14PLAZER?4(Y#MT8H[KKF.K=P,8,!45E3UX!F!Y08R? M%M,/Y.!1D)M9/PP<3YIJH6@,F([N\8-T!]"7#:%Y.<0^GC8-KQV1B3ZG6N4? M$/10A8!,[%1K.+6?PA,%T1%4S/1+,0QRA!D0"4\(8"$@;<23,02>?&@H.&A' M']H\E8?0YO%R-8%CI,VI^R,9-%@MF3K4DCMQ]%/D;$%L"‘KU7:[I_#$U M&6T.L[@$.CRR>PY/3$::0"P&E1A@2O>#4']HJ]XU!<6/-±IJ#S,LZ038;0
MAHG>2L@TB(X><)A$])]UM8?B(DAGRJ44]?&\%XTF"F(,]<:$"(9#%>R\< M3F"NZ:S)R?93L1/,0#OE<&/,?:‘V’$W@M%;WM@K(/<JP?/^Y^-I01]L3U-M
MUFCJXF57VSG8&IL2"+8."EAK0QL+,U."X_NS:5/<F^,Q$E]B(54YXV3"F M0$>/G_K2TN.IDP$PYF,&8$YT;DW%BI$]]&7QF"PXVQ’&;$L#X@NC><^AXP=
MQ/.4-JH4W;>F5#HE<BTOZ-B#-4W9NWH;8^7_.&B8$YI)D_B&,I/%I3-8O[_ M6])>M$?KC:4"SNTP-SGSS3^G;7YV?30W(3$‘8W9N++2PTYX1X,7’II"?’"
M
^T75/;]$Q^G++?ZWF?^@[0#]Y_ZN)PZE,>/^KIH[3^-[WW]CC’[IW73
M/(;K,W;(Y=\:+O70]L@?IZ\ZV$S7GGW!\8W,FZ/EOPGE+LJN/B,LYYMML4 M+WZAU1X,F2,Y=^]>]Z,GO'HT)([JG#*N6!>>2(D\5B9=)?G?]F"N6SJIV3 MC^@YT8MGW5T$7/]6&@R?KHEQ]@N;:^'99[:>\UB_^23K\6/][AMY2Y_'[YB1 M:/PET.EV_6$R\=JYDL9WKO;M9[=D!U28<6J<VQ4-;([^7SMG&55'LRYHG#!
M+21X<’>78$$W&PGN!)?@;L%==PBNP=TV;D$V[AK<)1#<=?=N3/GSC?GREDS
M9^[,W/W\Z+=7U5O5O597===:M9Z>TM+7’^0?Z;/";1S24M&&#,.RLDQ1Q] M]N^HR^WJ/1VMK+A[B"THTB=2C:>6S8@>.["[%R@X=Q$MM?MI@W;V*Z,(6\
MM;>"<G<CK62G<J7&:%,.!M-8)@=H31!9\EI_W][9V1G/Y0N>K…0<:1G2R%/
M%V;DGD\T$I’ESMKUX/&,C#[9NN=9C#JRB
5I969[VLX?T9A_546NTBEW3$ M5$0IP/ADOVPB&\RN=XU.+C$99WM;$D^O91DOR=*@M=K,8BAGL="BZFO1I/4
M#(U&"FESD.X;BWWL6K
"“B4"8B6ES>Q"D+38"(E7ZK”/8;MI$2X+:^77=
M=;H499R/5**FBIP)51N(URKT?[9XX8[LHFE19-X64LI>)32!:R0Y6/J0"
MA8&O7%FB<F2`9S^&<#*G3VF&@,!LQ@L(>$;[M6@D?/0*KXY'A4`/T[M8HS M'`VM0?+9#(=QF@XL%?@1V)[>84QEE6F(<Z^L+A%UTV*K_YH"AAV6N*^LF=,U M%;6>BEL!>YHXG=5W\DT4X)M4A1&J'%]YP`Y]4WS,T[E]9T&)W@J-43FE5U)I M`MVOR:K^2.WN`4[V'P5H6H7%N:;&8#ID/#65FV,Y[?'2$PS?VNR*RD7#"%GC M82KJ;B'`ALU7*CX.25ILHRR\$NM`P;%NU<U$'3,6^*FO[TBF2]3T5Y*^3,A1 M_H#/(=#'1UPA_.+=XJZV06W(L;IS&>X?%Y?@/26I'W;VFG[:N+PFR'=8?R*@ MI.NBQ)_'7P.A27@-]X9:IU38^U7N;4)$?NOT,)\*30\(1JH*Z>/H2C:W2R5F M(;KH,(HK\Z8@'$.C!Z%FSLA80_\*5A<S\G1%K@)/=8I^F"S1AF"&0[U-%4%T M7VG$;$+J^K")(G>*BS8@/6<M?Z9'LC@33#.J?F9>>4G@4I)0&).J/SR%-/LV M5J*]HD0'CMEXL!^!8K-?8&81[P5EGMH%/5U>5":E&7&'EDKPPCN9A%(>)`'$ M07FM$VM;(VEI\CWI*^ZW8^Z'"*C,TB)4=88?+:1KCG`$XLSH%PHD1RI&%E&_ MEAN_2]%]>;.W;;?:NJS@Q;@]DM!3&T27>GS9,,F@5?,E62)A,-2T6'BM+RI^ M(PT1D)CC050I$[?5?:IJ%>C<\2Y22VJ%44S;6U5\7`_`:);1@3^\M_>.Z.*. MHM*B&6#3162K7?E=5:T8EO>^`+/X:UT<@UN3H(_8B.C'[1J$#_+K+$0#V>KQ MF%9*A.)R5C:%?)-)W0I-F?7$3/Z7CG+!`/WO#:AZG,H4:1DO\=BQ1(Z-4[=, M=L40!)F"JUR`HQR)(J"&,NRH=JF;3()WCJG=JI:U49?NI@^\I78+2I%<0X;I M/1_$7(>W-E*6V43UE&2"DW\(F[+;)G;!&JCI)>6BVH:'TV!SQ$CD"2A=`-"2 MJOUV?!/FEX/P+%&NB*P;@$IX6YYGX4,_4T?;$WD,7!(^%ICP:'TJ+>U:#*-V MJ+$6N&;F._3'2L#1J9AASW"2>(>"W*9WI.0%0U"OC&6404D]N/KR0@&D4W@+ M7U3EGG3:@"C.AS^@GSX#VA488%>-J?WRP0H.4*-Q5(**E(J'AR_&K)*7NR%9 MDG>F&X>WBH@B$WZ`V(JMZ44WM(0N_JI0:AX?Z\OP?6-^FE"1@@'B+K[7DV75 MQ:EU#5OYI*%@5<F'!%.0+CVKA.IQ[0!KRP5!XCZ@`<D?8]A]\@=6W"U63+LU M`:MBOJ)Y7-=/Y\Q]&SE5<JZW!F>2H`/<;O,$Z^UZ(1]C3E6SGSSWDX=9DVD; M53,Q=5XA);=FA-E63V3W"=O`FP'WKR[DYL1^KT@4S8MK<\N8?CV-)7:.M`_< MB](N/R=^;>9K/\3\YGNU*W[\7,75'K/OO3QV>%H8<#(#6KN.]=.2E=I_[GL^ M<&<A?XJZ4G,>?_23DO)\P+5UD))U\*!\RL?OQ5]C_<T3;LNS*-GC\YY35HO9 M1W7U62J1T+0A;)Z2Q<-\BZSVB<,^QRW'1NJEF27><1R,>=M:W/*Y`)O/Z&Q) M$%S-"RD"+.8AN"LLDA,##4=BV.A=@M0+SLZQAQXS6LW(&+`37T'2WDT_22/J MB5O!`RF:(Q,)PJB=P@]WTX0V22>+B,/.B1GLBRDW3&??;=1B,GO^;!C[ZEZ_ M\ID=^';3'V)C0IU9\#*`G)E0>H<A&.>51M(3VT['SFA9'@,$S72"P'QU'80U M`.Z/=+LUEL,43@D#U\E=1-DL)Y`(J(,%\$;ZJ0G.GFC-JI-:EBOB@!=V3HN/ M_SF5ZBY+RS9SAB7%2)]UBMC7L%8T0THD8\QF9-FZ]CF.T^?!*0'%.SH81(;C MT/[E/HMO7_]>-6VY^\2[@LP6TSXMN$'LJ"46>/H,]XNCOZ4W0;I='[U5:*A' MS\+Z,RMX[QC^2&$2R&UQ0:&J+\+T],H6ZX*:H(W8GO7D#5,KW!DITE'MB56G M[YJ;SHT??"9R^W"7'6(KDM!8E^6RT%>3,8+^Q:2@U9@KA!MKYB?N["RX]L&N MY4X@?&7=B5G799#HCM,JG$CUW`79Q)O^YVR[VA/6_N=.6J:'^S6W)^?!+/[. M)/^G#6*0HFL%DK[%J0'<G7\'PK,N9SMXRV#<SW+"#L&7UKXPN,%>]72PKV0( M6?A%\V+N5%(%<L)&>7R'F%^OV>1,W>TR\!PXF!0:]K2$]T2U$`K:T7EQY^O# M\'1/+\(ERBB:F7,#T[&:>RSYC+*FC]81\8#Y`$#;53$HX\_"0T412;1>LN_; M<0&GE31!!&98+1G,.1RBW4$:301VV=C'YP%,\AQSQ%_A*<`I:,4)K[9,OA_L MGGP"$E*KU*XN]OI'6MM`^&@BV>+:?$7?<\OK;HYP-Y0;:$RY+T*B78[*HW7F MRBL=>!W%:>NX0KG5UKW%9+$;!WC=*JHGR"RND>7X7(?VL+<^;]&24(2K)LS0 MZ(D[)I<>XIJ.2IM@T`:_Z[=+G90)L!3?VUIHY>-:/^G\,A3P;O-!^Q5\$);/ M%3BX*9OR14LC!G\VAV/8G>:;HXWD"PBDB@D\CL8PEVD/^(@;U.41,+,6M('X M$93+->FJJ)>,-1-^:%,K8K*;?,!PS^$D;,K*<<[PIM<7Y6R;<NN<PRJ^0=$J MGCU_.G>\,IM`RH<;//]J5B6RJ]%?&V].IZ@7KB*'`'%$@AGU0-TJ'F^Q6,JA M%:1MP^:F&DEY4$B0%B+#S)-`#J9K-K)2ME"SJMYW5AEZ>UPL!;L$8.9)0BZ6 MHCS.)T!Y8`//VW@6]>Y<O`+3<=T7];ZOR]*VX8#X)#\8Q40FG>Z%$Q)H'E#K MRV1B[6^>*!$#*3PDJ19.8'Y_[RD3#]?U0T"AD@P3W:P<Z4+49T%DAGP>"GDJ M_$O=]F?I,O)^[KS=`X$;J%W=+VF!$=8H'6GK6\KQ<M=5H>M;6O%RWT^T?S?O M_14D2*2825`\C7'^DC8VTF3\1#P$M-O+MD[<30]G3+MN/HJM&(_EQGE/I(B- M?<WQ.\1C>R4_OBQ\$7[_1Y`)1_XCA(6+&EUQIE/2MO<?FO-)*0G]):@<FOY1 MR$#Z\8_`B,'V1R\$R"E_M(N4&/8-4>V1"OR!Z7U>X`+^D'8)4@9_CIS!FS>N M3S+.J$_N(]VO<[#Z5)81.1I.7/]K?P;RL]ZFI>W[S<MNR9(Q""".<+^6J-*/ M*/;:_%J3>JX1]UD(XHD%O)@^>,;F;RN*N7`0/!*=#)TF:4HW>;^"*+Q3O1\[ M&4I'2,;60LG(]ZN;Q(X8%K@PW_8*33R6_GS4%MTEOOW4HD&XF;-A=5E:X?%( MO]8C.E5=NK5G/K;XT1T/&2*S*IYL&#E*,J`])'"WO&7RR40+N*6KV7;8[A'O MI'^9&B]X41OO%.%Y&E9(>W3T1NNS1\]RVUO^,A_F25Z*E=.@$?V&D61XWCUI M"AY'EHHV@A;^=H:TB'#M%YGN1)98;B)B.=*%ZQ`NC$D/NT8XJ>###IJ-G]$N MF(!6.9'["_[E1^6.Q7[C6K+<;IUAGT%<)TP/R<1I(C(?V8H0E)^\1E=%?7S\ MWP6$C`<GWRK4@A3RJ1Z.JU4>??A<F*!`V1:7*W(/A>NM5$[2C6S5ZCKF/';L\V MO"'1?)ZOQKH:'4T#'?8EQ7O!X^.&K0B)SPKR<$N8PM^%7BT[C&1BUG4$APVQ ML?U\2I%^\"]>@>SP3E@MSAH><B-*06Q_B@?)>/>8W*(W>R5OV49Y<%6@O^;> M&U[Q\7ML:_9BF^R3;KYO;!6V^_XD<VV=3A/7T0`BS,KW&UO/.N6/&5*^SCXB M#6M")F_W*X^6>D-/ZR/F>-OOKCOTMM?/CH'@AW<"XB4H.XG\Q13Q:2`8_TED MAYV`RHQT[DRV,XY^#<D99'<0*V6-G-1>3C9W@'QQ%SAU,?6][_7HA1.P9AT) M4-J2-*6N2OOK'9MO6O41&F<`!%6>D4F],J(9T[/L8CTK;U!Z'P2OGA=99=>G M%VU';'3;\?KV.$!3,.EZ#8VXJ8<4_)PN^-2M=E==C?V(95]F&?LKVW_9^E#T MDO?2;TC`<[^R?]P!R%A@W2C2UUQ*@NRU[FLQN2K"):0A*G+5+G*"9Z9Z6WKO M6-<U^.W7W'Y?9LD#<7]BHOD"8>^2^455^:I/B(J:J-"9[8TIL-5K=+[R\F-U MAOF%CBW0]I0<^4Y!8\_0CZP]M@E]C&#OX8S3Q$B4DX<0UR\*QZ=03#VNF_;G M?`\2KL*$5=H1J0"7+[.Z]+0MN93NL>2RA.=C,;L1F[9@'MF`5\X5'G6WEP=K MH^B@)^>!!2-MPG=T%XBG-9+TQ?5XDZL/J<MDJ48=C\;8).9^'Z9/<MM%HXB] M!9WY_KMAU["%MQ-WNH\M]<GV]J$B(OO6KR0?+S>WMNZ")Q:D'C\)O'1J]OI0 M*5H^EQGN'.NT[#TM+!#B$1TH=_!>5.#*NJR@#'"GT\Q3XA8KW4SHL(RH?"V^ MH<VE+@K;@L,$?H_W?K:[?\KS,87NR4KZV_+-4N$<AA3X5/C8@E<M!KR[WW<! MA$"<W5;9O$;"G;-VZN3U32?X=CR1O_B2?+L_68][(DTW/7O"/U6W\OGEH5Y, M/,NOSGKV5-S.>C8`7L`OK6N/21\\HK@U\.H4/WL/EWW=`CQE:KF[:$B:S1+@ MSW.[?F\-S+#I?E[QZ+MH`#ZISR%I87ZE2LX^V^IK7C1NUCR862U`08^Q]*$- MIH!P7.D\6FR?QD1RW3/8%OE\:JT?NT2BM\?<`Q^_/T#._7ULIJTBN/"O%F/B MN:ZNOAZ079TX`%9QNXN3C<>J.I>U=8YRV.305FQ#N%NJ2=`F#Y^Q0T<P))RT M!K9$..>(U$A;XD5C,OSWIL%FQ&@QJH18Y39P6=%^KPJ%HUU4E4?KM9`IZ0![ MDC-5>!8_D#$/N]'"JT%!D^[3GUO[O-`V7YU^Q#F#8#^6\7^2FWZI/9=GD3%M M2BPN0(2YL?J%V+J.9^Q%+MG[KZJ/+A'$*S9,EJ>U;.Y+Q=MI`O1%R.%"CK)C MTTRZ;2`.PADIMX5JNS(C+N8Q]R#964?=MK=O+FL]*C4()2&[+GP;B%[Z04T> ME1\(N33,"-_ENH+IDV/56#5K/POLI)%X?)$`-;]_,I/N*K!LKLB:5$/4JV1K M&HE?&4M[NZE%,I\`^3AS2\I.U@81S037,_RB5`5\2HC9_28877S>+4Z,JT#R M4VC(]%H/6)V61-I")E;D&U2S'MG8;&V"]BNZ7*L\?7MX8Q7PZ]H*7;9?+FD\ MF<F('GW7^`VRD`ODAS+C.1;YEGZ&\HU@/?PL$?<K'-PH$K?\F^!X7X_1#?I\ M>)54`(WJRH&<OTQSM*Y-,41GIWUAR4`OKGN&:*QVD\A.R,(U,K#GYI@.`*G= ML80[BR)L-_E$]C'U*(>K5!I86X&G.57C^#8IH^$]P!8(PF*]T3V-7\A<+N6[ M%#19A)N6!BH,V+&1D@$0^A'%GW7K)3@<`W,X%RS*/%/Z;I*4G?IHML%5UV8O M.2IN$Y;"`B&UD#>X!5[#QNE565<BZ7=[,-QLIU8L@N_8'T]LAQ]S^AI]IX6B MF8HB+>'1(?@@;>,CE%B*&)K;S3P/,S;2_/.)0F&(`9#J]AN^*L>2#0;RC]FT M,.P,7]<=R-`>6/G!W6`CV6VNL.`'65'DGF$^<QGG_2+N*1FA-$V*7I9V(7F+ M`_^>\+[YMH\[<_1[Q5I.!]TV15%KRAWE6RY!8>!>+(<GK?.CF?2D@&+_O&>* MBQD/7A'?<'5AYX/MI-Q!GVR[Z:_6TGZUP331UZ7V:]^FP#A^++2KV(VA;FXA M'LW/Q#5')J@\MZI]ZF?AJVD3XY.)O?B,\H,>=\6[6YJDM/0L9>Y-GKV+E&5; M:/B^?8YK@AYW\8?>Y^!V)0KQC==4#H"`3"M9M+L?QP5[/P/-*Z\.WX1Y@60N M5%FOIK"+4PJ'PH^=B#*+*9A?&3_!L'NLX2T/5?"HA+E;I!)0W\Y%`O2\<U;O MP+D<B]=#PWZSL4TX*VZ`YJJ>@18&]>9!]:]?\YOC6MX4UAFD\SD$#*5RFK.0 MIEV:%`KS[WJPW$7$/L8^\"VTU;RE`_-Q@:/UEX1CYP_E)PU=7F.-;35BO)96 M-ID[6THLVKCX]"YK?^EKF"K+<I"F>RY@27`*U#%G9O"2#JD,V0:6"]:smiley:$_ZS M-,P8C#X2,5(K_`W6"8IAS*?:77@"^`C8`U@=&,T0G,&G8GY^<DV%#88QB1
MZ1$?(5CG^’>(<4??]O4S5X;V?7I.T84KQ\SA7D$E_=7’S^/
$)$TDU]8\4(
M><);/$I&G47EC/,^<[O7]YA?#YZL(V3SP(^(NX,I5Q?7PAWYN’^KO$GMA9I
ML%L9S??F=W=RN93S’1A)>V[P.4"OSHW8N%ZYGO5IH:^H7RAA%-)3"'9=$F6P
M120JC2,'IVZH]-Q<C1PNAMJMVISO[+\V-G[^$4^C!.X<(=5@1?(QF6Q?3R
M’D_9IPHG@"Y.:9Y<LLKIJ(G3Z?A0_D$EZZK&SGRTK<-K])'3[TAXEW=1W:RE
M+)-;7:.^MK"PL/:;M8MK,/!#1Z
J\K*[H+.KLUO%;8?2]6S%,S$X1[XYJ,.
M)N>0-J)?L#>IA
K]7LU9F<‘G")MCO;MZ=<C1CGU4,=-Z8=]DRMAM2426;Z[ M?C'E3"(\T+=I]Q-]-Z50A5BG_K]BC^DWK;ED"#=F##PP/A#E2U3+1EKE", M-P.L6DHHJ$-!K><=G'J90*]>=^8FGD9?(F90XO.7Q*'WF7'X)"ESN6<$@T)^ M0=OL#\G\GT-F!QEM6;R4XBBV\]5'IKP>>GR%5EO)QA:_0):%/KF^64(41Z(] ME:OI*“E-M&"^!%$]#[8?Q9%Z9?BV(W_%K&*VTUSXM%\J&,PB;\!<Z+EV,9 M^+M4&Z;B42EA^92S#A8OL<D8$)YVAEKL6;P48@+)HA9B!.GD[5%S'8H3NV!L MY(+)3L7$:F3Z'2=HR(BIY'E#O;/C%-8EO=GBA))D2I#'85_1)IXFBS%;”‘1
MA_H7X0E’?NL$R@7K5$IQ!-/;I:.:HDJ,IK\P1;7DD>8()M9YVR0[N!FO8#3J
M4BCA4<&N2’^;/+6]$R3$2C$&[,>DVOH:U$J.X<F9/IOF5A7JL#(B:.$PM7X2
M/$47V&?TS’AUS1K@/&H]VT=<8T]SET)Q%[%6SSCIBGD2PQAM12EO[>7YG8
M-//BQ*T6UHWGMKS"L’W6?6R;[5?LCE6’]"^);D,K]Z’GZ5
>A@V\I"^63;
M;,MW<81W&!UUFE-"GW/*-]MQ)V:?2(>]QSZ5?JW]>G&-:7M,^WYA"'Y5>* M]#2L&37'1ZA\2UW>"COX/+L@^:^(74IZI+6NE_JXZFP3]=.'6T3&US,>8F MEOYD</WNN,*H0RUM3+J)J,@LT]VO$4WXJR-50U?B<YL-A$U-\@M@*[7<'
MZLA99;!M]GO-Q0M_7^G6>5'A3TO&N*_V#"9DO3ER8T_VBXRH4]9M,XM,H&V M41:!;\RR7;[$C[!)]N4-A]C+QBZ<2?F$A720X_E0Z;:E>\V5]88_:T;S@\ M:(D*P]X(!YF-O!@7V0P-Q,<&3.[QEPH314*3,[4+9PM'8R2I=HCD#S[47$2
M^P
D><+7_\CFNUSR(&N$@WX7),NU1T@ST4E,V&HE"P9&,$6CG0?1-0ORJ20 M^UWY=T8,&LC"7N5WS76P+->-S.\33G+>[Y=.,I?'G$8XF.TP'G@0IW"&#BH% MRB[>+BK*AV2+9]8_(O7OF8C’.RC%Z"PN!!?$GXY-(<Z4493’-PC8$I/$"(]
M*+F**Y&<9NO1L),9;ZBJK.Y7>W1;8A]HN5F’TMOPH&F3</D-Q+G:P58[N%
MFV%UF,Z?7;5HU’;D&C49G>>,KA4"@W%>AH(SZ^O"-N/GYQ4D[O41G==6B=^S
M=5SS^%/:UHLO41)O9?+S,.+D9N#$&<?@:Q^]_?B6"50RL8)S^!R’[DCDT;K
M,UC;+)";8+<XHK030$KH:WQ[\RNZNA()^T!Y@?D-DQ+5'J&3XSU<O/1,UJ MJB!JUONXY;W^$F'*ZZC;3YGR;8JNH$HD3"/'':U*.+%%E4L"=<G1,('EPY@X M+TH\M3,-TJFTB3S1IWA3/W'/$#%&B@BI_FSR'21EA6R27L>>C;!]@@AY"B(Z M-E")!TI,2*XQG5FHV(>)%Q0"O!+Q$G&-E"B4TV+&@5B5B*^#O.3W[)-6UE8
MG^GAW7ZC^24U^2X/)S<]Z&,9IQ&E2KA)$=/!2+W\L8J4[[+D$?G#"=71W#/ MJUMKE>1JC=A'ZP?^Q'55!9D/RN+\"VWG6V)>QGUYKB_-":&U]%A]-)94< M'*PN;Y2!-UZ[71A"\&L(0/Z:I29--*%;KVM;T<7.RA62*#4[K\2M31PR6' M1!#KU0"'_$TE=Z1!O7E++=,]2>3:$,=$"C-^KT&EP!C_,:9YVVVC\X<JA5
MKZ,H,P91&K84M-II0U=SG]"D/PQ$%GC7CMU]PJ]=;DAHE;\O-T(/Q,@,/]V
M!K9UC6&:[H)Q7LV9I,8+T/^AY_+E)VO[J4F1\4L@H7^WCM2OO&VP%["4"0
M!,1,#VYN+&6!P)))]3TI0<ZCB5R^A+6AR3&EY^DXC825/B6/ES.Q+O16+J1
MO#6CW[“O=7%!\C”:7)?WC^<U^Q;2#=!LSFSEMTPDVZBG6V[4Z^X=-&G;'T’Y
M=67-MU2W
-X’A?O.V;-Y_W#/ECQZKY!MLV-W&[:QN
G^-[SD+0.Z]I
MB1$.6B[>8NM5,C4!.@H[EA9N#2’=(SW#B
IM&LE7EK]O@?L9[4@-/93U7+VS
M+:%S_;CJ)^.&O7+DH4D>RHPEW[2?@EV:.2R"YKE2L*C\/>+$0(F&Y@YY4W/ M6W+_Q9:PY,D!WW2Y-18FGI0V(Z(:DY]@;Q/EANG.8">"@DHQQZ)>72F]J,W
M’PRZ+Y#+7+]:$^6T1X9?<7]GV&/DX1Z1W;LGM4^RKK,3!3N<V443#FG*KK) M/\/<WZJN_^>SIO[_X5_8___?ZH#]&_O_;)R\?_[_!R<7!R=T____!%#_Z^_P MO_XZ1?Y>!XR7@XL-ZH#]1SE@?W%H?C^\O]<%8^?A9.?^7Y#!F"WLG)P-_GQA MJ!4&M<*@5MA_"BN,];_/?:@9]K=;0LTPJ!GVI^GP?ZT9]D\VUG^$'O;/Y?(_ M5T'%L3^)8R+_?,7U3T50E>QOCO&_#$DG!4MC1R-'#Q$;2V.GWR\54V<6)SL6 MCO\V5/['G']7+Q__71W\OV:T_8W\OPP?$Q='T__I3?,/U=_^\4;:7]/^JRKU MKSA/?]7"_G4I#"HV08$"!0H4*%"@0($"!0H4*%"@0($"!0H4*%"@0($"!0H4 /*%"@_/X+QLCY5$>```
end
SHAR_EOF
(set 20 02 08 31 02 24 20 ‘rdate/rdate-1.1-x86-public.qpr’; eval “$shar_touch”) &&
chmod 0666 ‘rdate/rdate-1.1-x86-public.qpr’ ||
$echo ‘restore of’ ‘rdate/rdate-1.1-x86-public.qpr’ ‘failed’
shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < 'rdate/rdate-1.1-x86-public.qpr'"
test 12075 -eq “$shar_count” ||
$echo ‘rdate/rdate-1.1-x86-public.qpr:’ ‘original size’ ‘12075,’ ‘current size’ “$shar_count!”
fi

============= rdate/rdate.qpg ==============

if test -f ‘rdate/rdate.qpg’ && test “$first_param” != -c; then
$echo ‘x -’ SKIPPING ‘rdate/rdate.qpg’ ‘(file already exists)’
else
$echo ‘x -’ extracting ‘rdate/rdate.qpg’ ‘(binary)’
sed ‘s/^X//’ << ‘SHAR_EOF’ | uudecode &&
begin 600 rdate/rdate.qpg
M/%%01SI’96YE<F%T:6]N/@H@("\45!'.D]P=&EO;G,^"B@("@(#Q14$<Z M57-E<B!U;F%T=&5N9&5D/2)N;R(@=F5R8F]S:71Y/2(R(B!L:7-T9FEL97,] M(GEE<R(O/@H@("@("\45!'.D1E9F%U;'1S('1Y<&4](G%N>%]P86-K86=E M(B\^"B@("@(#Q14$<Z4V]U<F-E/CPO45!'.E-O=7)C93X*("@("@/%%0 M1SI296QE87-E(&YU;6)E<CTB*R(O/@H@("@("\45!'.D)U:6QD/CPO45!' M.D)U:6QD/@H@("@("\45!'.D9I;&53;W)T:6YG('-T<FEP/2)Y97,B+SX* M("@("@/%%01SI086-K86=E('1A<F=E=',](F-O;6)I;F4B+SX*("@("@ M/%%01SI297!O<VET;W)Y(&=E;F5R871E/2)N;R(O/@H@("@("\45!'.D9I M;F%L1&ER/CPO45!'.D9I;F%L1&ER/@H@("@("\45!'.D-L96%N=7^/"]1
M4$<Z0VQE86YU<#X*("@/"]14$<Z3W!T:6]N<SX*"B@(#Q14$<Z4F5S<&]N
M<VEB;&4^“B@("@(#Q14$<Z0V]M<&%N>3X+U%01SI#;VUP86YY/@H@(”@ M("\45!’.D1E<&%R=&UE;G0^/"]14$<Z1&5P87)T;65N=#X*("@("@/%%0
M1SI’<F]U<#X+U%01SI’<F]U<#X*("@("@/%%01SI496%M/CPO45!’.E1E
M86T^“B@("@(#Q14$<Z16UP;&]Y964^/”]14$<Z16UP;&]Y964^“B@("@
M(#Q14$<Z16UA:6Q!9&1R97-S/CPO45!’.D5M86EL061D<F5S<SX*(”@/"]1 M4$<Z4F5S<&]N<VEB;&4^"@H@("\45!’.E9A;‘5E<SX*“B@("@(#Q14$<Z
M4&%C:V%G949I;'1E<CX*(”@("@("@/%%033I086-K86=E36%N:69E<W0^ M"B@("@("@("@(#Q14$TZ4&%C:V%G941E<V-R:7!T:6]N/@H@("@("@ M("@("@("\45!-.E!A8VMA9V54>7!E/D%P<&QI8V%T:6]N/"]14$TZ4&%C
M:V%G951Y<&4^“B@("@(”@("@("@(#Q14$TZ4&%C:V%G95)E<&]S:71O M<GD^/"]14$TZ4&%C:V%G95)E<&]S:71O<GD^"B@("@("@("@("@(#Q1
M4$TZ1FEL959E<G-I;VX^,2XY/"]14$TZ1FEL959E<G-I;VX^“B@("@(”@ M("@(#PO45!-.E!A8VMA9V5$97-C<FEP=&EO;CX*“B@("@(”@("@(#Q1
M4$TZ4’)O9’5C=$1E<V-R:7!T:6]N/@H@("@("@("@("@("\45!-.E!R M;V1U8W1.86UE/G)D871E($1A=&4@4WEN8W)O;FEZ871I;VX@0V]M;6%N9#PO M45!-.E!R;V1U8W1.86UE/@H@("@("@("@("@("\45!-.E!R;V1U8W1)
M9&5N=&EF:65R/G)D871E/"]14$TZ4’)O9’5C=$ED96YT:69I97(^“B@("@
M(”@("@("@(#Q14$TZ4')O9'5C=$5M86EL/CPO45!-.E!R;V1U8W1%;6%I M;#X*("@("@("@("@("@/%%033I696YD;W).86UE/E!U8FQI8SPO45!-
M.E9E;F1O<DYA;64^“B@("@(”@("@("@(#Q14$TZ5F5N9&]R26YS=&%L M;$YA;64^<'5B;&EC/"]14$TZ5F5N9&]R26YS=&%L;$YA;64^"B@("@("@
M("@("@(#Q14$TZ5F5N9&]R55),/CPO45!-.E9E;F1O<E523#X*("@("@
M("@("@("@/%%033I696YD;W)%;6)E9%523#X\+U%033I696YD;W)%;6)E M9%523#X*("@("@("@("@("@/%%033I696YD;W)%;6%I;#YK86)E0’-R
M82UT;VAO:W4N8V\N:G\+U%033I696YD;W)%;6%I;#X*("@("@("@("@ M("@/%%033I!=71H;W).86UE/D-H<FES=&]S(%IO=6QA<RO($YE=$)31#PO M45!-.D%U=&AO<DYA;64^"B@("@("@("@("@(#Q14$TZ075T:&]R55),
M/CPO45!-.D%U=&AO<E523#X*("@("@("@("@("@/%%033I!=71H;W)% M;6)E9%523#X\+U%033I!=71H;W)%;6)E9%523#X*("@("@("@("@("@
M/%%033I!=71H;W)%;6%I;#X+U%033I!=71H;W)%;6%I;#X*("@("@("@ M("@("@/%%033I0<F]D=6-T26-O;E-M86QL/CPO45!-.E!R;V1U8W1)8V]N M4VUA;&P^"B@("@("@("@("@(#Q14$TZ4’)O9’5C=$EC;VY,87)G93X
M+U%033I0<F]D=6-T26-O;DQA<F=E/@H@("@("@("@("@("\45!-.E!R M;V1U8W1$97-C<FEP=&EO;E-H;W)T/F$@8V]M;6%N9"!F;W(@<WEN8W)O;FEZ M:6YG('1H92!C;&]C:R!T;R!O=&AE<B!M86-H:6YE/"]14$TZ4')O9'5C=$1E M<V-R:7!T:6]N4VAO<G0^"B@("@("@("@("@(#Q14$TZ4’)O9’5C=$1E
M<V-R:7!T:6]N3&]N9SYR9&%T92!C;VUM86YD(&-O;G-U;'1S(‘1H92!T:6UE
M(’-E<G9I8V4@%1#4"!P;W)T(#,W2!O9B!T:&4@;W1H97(@;6%C:&EN92!A
M;F0@<V5T<R!T:&4@;&]C86P@8VQO8VL@86-C;W)D:6YG;‘DL(’=I=&AI;BQ M('-E8V]N9"!G<F%N=6QA<FET>2X\+U%033I0<F]D=6-T1&5S8W)I<'1I;VY, M;VYG/@H@("@("@("@("@("\45!-.E!R;V1U8W1$97-C<FEP=&EO;E52
M3#X+U%033I0<F]D=6-T1&5S8W)I<'1I;VY54DP^“B@("@(”@("@("@ M(#Q14$TZ4')O9'5C=$1E<V-R:7!T:6]N16UB96154DP^/"]14$TZ4')O9'5C M=$1E<V-R:7!T:6]N16UB96154DP^"B@("@("@("@(#PO45!-.E!R;V1U M8W1$97-C<FEP=&EO;CX*"B@("@("@("@(#Q14$TZ4F5L96%S941E<V-R M:7!T:6]N/@H@("@("@("@("@("\45!-.E)E;&5A<V5697)S:6]N/C$N
M,3PO45!-.E)E;&5A<V5697)S:6]N/@H@("@("@("@("@("\45!-.E)E M;&5A<V55<F=E;F-Y/DAI9V@\+U%033I296QE87-E57)G96YC>3X*("@("@ M("@("@("@/%%033I296QE87-E4W1A8FEL:71Y/E-T86)L93PO45!-.E)E
M;&5A<V53=&%B:6QI='D^“B@("@(”@("@("@(#Q14$TZ4F5L96%S94YO M=&5-:6YO<CY&:7AE9"!C;W)E9'5M<"]W:6QD(&]F9G-E="!O;B!S;6%L;"!N M96=A=&EV92!S:V5W:6YG/"]14$TZ4F5L96%S94YO=&5-:6YO<CX*("@("@ M("@("@("@/%%033I296QE87-E3F]T94UA:F]R/E1H:7,@8V]M;6%N9"!I
M<R!A(%%.6"!P;W)T(&]F(‘1H92!.971"4T0@<F1A=&4N"F%D:G1I;64H2!I
M<R!N;W0@<’)O=FED960@:6X@3F5U=’)I;F\L(’-O(&$@8W5S=&]M(&-O9&4@
M=&@=’)A;G-L871E(&%D:G1I;64H
2!T;R!#;&]C:T%D:G5S="@I(’=A<R!A
M9&1E9"X+U%033I296QE87-E3F]T94UA:F]R/@H@("@("@("@("@("\ M45!-.D-O=6YT<GE%>&-L=61E/CPO45!-.D-O=6YT<GE%>&-L=61E/@H@("@
M("@("@("@("\45!-.E)E;&5A<V5#;W!Y<FEG:'0^0E-$($QI8V5N<V4
M+U%033I296QE87-E0V]P>7)I9VAT/@H@("@("@("@("+U%033I296QE
M87-E1&5S8W)I<'1I;VX^"@H@("@("@("@("\45!-.D-O;G1E;G1$97-C
M<FEP=&EO;CX*("@("@("@("@("@/%%033I#;VYT96YT5&]P:6,@>&UL M;75L=&EP;&4](G1R=64B/E-Y<W1E;3PO45!-.D-O;G1E;G14;W!I8SX*("@
M("@("@("@("@/%%033I#;VYT96YT2V5Y=V]R9#YR9&%T92QD871E+‘1I
M;64@<WEN8W)O;FEZ93PO45!-.D-O;G1E;G1+97EW;W)D/@H@("@("@("@ M("@("\45!-.E1A<F=E=$]3/G%N>#8\+U%033I487)G971/4SX*("@("@ M("@("@("@/%%033I(;W-T3U,^;F]N93PO45!-.DAO<W1/4SX*("@("@
M("@("@("@/%%033I$:7-P;&%Y16YV:7)O;FUE;G0@>&UL;75L=&EP;&4] M(G1R=64B/D-O;G-O;&4\+U%033I$:7-P;&%Y16YV:7)O;FUE;G0^"B@("@ M("@("@("@(#Q14$TZ5&%R9V5T075D:65N8V4@>&UL;75L=&EP;&4](G1R
M=64B/D%D;6EN:7-T<F%T;W(+U%033I487)G971!=61I96YC93X*("@("@
M("@("@/"]14$TZ0V]N=&5N=$1E<V-R:7!T:6]N/@H*("@("@("@("@
M/%%033I,:6-E;G-E57)L/CPO45!-.DQI8V5N<V55<FP^“B@("@(”@(#PO M45!-.E!A8VMA9V5-86YI9F5S=#X*("@("@/"]14$<Z4&%C:V%G949I;'1E G<CX*"B@(#PO45!’.E9A;'5E<SX*/"]14$<Z1V5N97)A=&EO;CX*
end SHAR_EOF (set 20 02 08 31 02 21 34 'rdate/rdate.qpg'; eval "$shar_touch") && chmod 0664 'rdate/rdate.qpg' || $echo 'restore of' 'rdate/rdate.qpg' 'failed' shar_count="LC_ALL= LC_CTYPE= LANG= wc -c < ‘rdate/rdate.qpg’`"
test 3819 -eq “$shar_count” ||
$echo ‘rdate/rdate.qpg:’ ‘original size’ ‘3819,’ ‘current size’ “$shar_count!”
fi
rm -fr _sh04593
exit 0

Make sure any .qpg file you have is not marked executable.

Jerry Chappell

jchappell@qnx.com sed in <akogv9$7bb$1@nntp.qnx.com>

Make sure any .qpg file you have is not marked executable.
Not.

3819 -rw-rw-r-- rdate/rdate.qpg

After reading the source (sharutils-4.2.1/src/shar.c),
it revealed that sharutils treats the file as binary when there’s

  • MSB-set-char, or
  • line longer than MAXIMUM_NON_BINARY_LINE (200),
    which latter will trigger in some of the manifest files.
    (Description and Release notes are usually crammed into one line)


    Wrapping these loong text in the *.qpg by hand also makes
    “qnxinstall”'s comment window wrap accordingly;
    isn’t this violating XML which should treat
    linebreaks equivalent to whitespace?

    kabe

Unfortunately, Manifests (QPMs) are not ‘official’ XML. There have been some
tweaks to make them work according to the installers/packagers used at the
time the packages are generated.

<kabe@sra-tohoku.co.jp> wrote in message news:akoi9t$loj$1@inn.qnx.com

jchappell@qnx.com > sed in <akogv9$7bb$> 1@nntp.qnx.com

Make sure any .qpg file you have is not marked executable.
Not.

3819 -rw-rw-r-- rdate/rdate.qpg



After reading the source (sharutils-4.2.1/src/shar.c),
it revealed that sharutils treats the file as binary when there’s

  • MSB-set-char, or
  • line longer than MAXIMUM_NON_BINARY_LINE (200),
    which latter will trigger in some of the manifest files.
    (Description and Release notes are usually crammed into one line)


    Wrapping these loong text in the *.qpg by hand also makes
    “qnxinstall”'s comment window wrap accordingly;
    isn’t this violating XML which should treat
    linebreaks equivalent to whitespace?

    kabe

If you add files to your package using a QPG:Add line, then you can add
proc=“none” to force a QPG into the processor-independent package.

<kabe@sra-tohoku.co.jp> wrote in message news:akoi9t$loj$1@inn.qnx.com

jchappell@qnx.com > sed in <akogv9$7bb$> 1@nntp.qnx.com

Make sure any .qpg file you have is not marked executable.
Not.

3819 -rw-rw-r-- rdate/rdate.qpg



After reading the source (sharutils-4.2.1/src/shar.c),
it revealed that sharutils treats the file as binary when there’s

  • MSB-set-char, or
  • line longer than MAXIMUM_NON_BINARY_LINE (200),
    which latter will trigger in some of the manifest files.
    (Description and Release notes are usually crammed into one line)


    Wrapping these loong text in the *.qpg by hand also makes
    “qnxinstall”'s comment window wrap accordingly;
    isn’t this violating XML which should treat
    linebreaks equivalent to whitespace?

    kabe

If you add files to your package using a QPG:Add line, then you can add
[snip]

Thanks for followups, but I was talking about “shar”,
not the QNX “packager”. “packager” isn’t stupid enough to pack *qpg as binary.
Sorry for the confusion
(And the Subject became too off topic…)

kabe