🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sys.dec
Article #4649

Re: Resetting the Clock

#4649
From: chris
Date: Fri, 19 Jun 1987 18:18
149 lines
3801 bytes
In article <132@hal.UUCP> ane@hal.UUCP (Aydin "Bif" Edguer) writes:
>How can I get the [Vax 11/750 running 4.3BSD] to reset the realtime
>clock using the time-of-year clock without taking down the system?

Without changing the kernel, you cannot.  But why would you want to?
4.3BSD resets the time-of-year clock to track the realtime clock,
since that is the one you adjust with `adjtime' and `date'.

Incidentally, here is an adjtime command for 4.3BSD.

#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/time.h>

struct	timeval delta, olddelta;

main(argc, argv)
	int argc;
	char **argv;
{

	if (argc < 2) {
		timerclear(&delta);
		if (adjtime(&delta, &olddelta))
			error(1, -1, "adjtime");
		if (adjtime(&olddelta, &delta)) {
			showdelta("current adjustment", &olddelta);
			error(1, -1, "adjtime (readjust)");
		}
		showdelta("current adjustment", &olddelta);
		exit(0);
	}
	if (convtime(&delta, argv[1]))
		error(1, 0, "invalid time spec %s (should be sec.usec)\n",
			argv[1]);
	if (adjtime(&delta, &olddelta))
		error(1, -1, "adjtime");
	showdelta("old adjustment", &olddelta);
	showdelta("new adjustment", &delta);
	exit(0);
}

convtime(tvp, s)
	register struct timeval *tvp;
	register char *s;
{
	char *usec, *index();
	int neg = 0;

	if (*s == '-') {
		neg++;
		s++;
	}
	usec = index(s, '.');
	if (usec != NULL) {
		*usec++ = 0;
		if (convone(&tvp->tv_usec, usec))
			return (-1);
		if (tvp->tv_usec > 999999)
			return (-1);
	} else
		tvp->tv_usec = 0;
	if (convone(&tvp->tv_sec, s))
		return (-1);
	if (neg) {
		tvp->tv_usec = -tvp->tv_usec;
		tvp->tv_sec = -tvp->tv_sec;
	}
	return (0);
}

convone(lp, s)
	long *lp;
	register char *s;
{
	register long l = 0;
	register int c;

	while ((c = *s++) != 0) {
		if (!isdigit(c))
			return (-1);
		l *= 10;
		if (l < 0)
			return (-1);
		l += c - '0';
		if (l < 0)
			return (-1);
	}
	*lp = l;
	return (0);
}

showdelta(what, tvp)
	char *what;
	struct timeval *tvp;
{
	char *p = "";

	if (tvp->tv_usec < 0) {
		tvp->tv_usec = -tvp->tv_usec;
		if (tvp->tv_sec == 0)
			p = "-";
	}
	printf("%s: %s%ld.%06ld seconds\n", what, p, tvp->tv_sec, tvp->tv_usec);
}

#include <varargs.h>

char *_argv0;			/* argv[0], set by C startup code */

/*
 * error - University of Maryland specific (sigh)
 *
 * Useful for printing error messages.  Will print the program name
 * and (optionally) the system error associated with the values in
 * <errno.h>.
 */
error(quit, e, fmt, va_alist)
	int quit;
	register int e;
	char *fmt;
	va_dcl
{
	extern char *sys_errlist[];
	extern int sys_nerr, errno;
	va_list l;
	register char *p = _argv0;

	if (e < 0)
		e = errno;
	(void) fflush(stdout);		/* somewhat gratuitous */
	if (p != NULL)
		(void) fprintf(stderr, "%s: ", p);
	(void) vfprintf(stderr, fmt, l);
	if (e > 0) {
		if (e < sys_nerr)
			(void) fprintf(stderr, ": %s", sys_errlist[e]);
		else
			(void) fprintf(stderr, ": unknown error number %d", e);
	}
	(void) putc('\n', stderr);
	(void) fflush(stderr);
	if (quit)
		exit(quit);
}
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7690)
Domain:	chris@mimsy.umd.edu	Path:	seismo!mimsy!chris
Technical Details
Message-ID: <7142@mimsy.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!water!watmath!clyde!rutgers!husc6!seismo!mimsy!chris
References: <132@hal.UUCP>

Show Full Headers
Complete Article Headers
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: arc1-ca.pugleaf.net!utzoo!utgpu!water!watmath!clyde!rutgers!husc6!seismo!mimsy!chris
From: chris@mimsy.UUCP
Newsgroups: comp.sys.dec
Subject: Re: Resetting the Clock
Message-ID: <7142@mimsy.UUCP>
Date: Fri, 19-Jun-87 14:18:30 EDT
Article-I.D.: mimsy.7142
Posted: Fri Jun 19 14:18:30 1987
Date-Received: Sat, 20-Jun-87 09:59:33 EDT
References: <132@hal.UUCP>
Organization: U of Maryland, Dept. of Computer Science, Coll. Pk., MD 20742
Lines: 149
Keywords: vax clock set