[comp.sources.bugs] Sunclock - interim patch for 4.2BSD-derived systems

john@cluster.cs.su.oz.au (John Mackin) (10/07/90)

I forgot to include support for vanilla 4.2 style systems in the
sunclock program that I recently posted to comp.sources.x.  In
an attempt to stem the flood of mail, here is an interim patch,
which you should apply if (1) you do not have a "tm_zone" in
your struct tm, and (2) you do not have an "extern char tzname[]";
in other words, if your system is 4.2-like.

Please let me know if none of the _three_ methods of getting the
local timezone name work for you.

Just feed this article to "patch" if you want to apply it.  Please
retain the original file for the first official patch, which will
address this issue in a more sophisticated manner, as well as fixing
other problems.  (Don't hold your breath waiting for it to come out,
though, as one of them seems to be awfully hard to debug.)

-- 
John Mackin, Basser Department of Computer Science,
	     University of Sydney, Sydney, Australia; <john@cs.su.oz.AU>
``Reading your standard output doesn't sound like a very good idea to me.''

*** sunclock.c	Sun Sep 30 19:51:20 1990
--- sunclock.c-4.2	Sat Oct  6 00:56:00 1990
***************
*** 62,67 ****
--- 62,69 ----
  #define	VERSION		"1.0"
  
  #include "sunclock.h"
+ #include <sys/types.h>
+ #include <sys/timeb.h>
  
  struct sunclock {
  	int		s_width;	/* size of pixmap */
***************
*** 95,100 ****
--- 97,103 ----
  
  char *				strrchr();
  long				time();
+ char *				timezone();
  
  double				jtime();
  double				gmst();
***************
*** 879,894 ****
  register struct tm *		gmtp;
  {
  	static char		s[80];
  
  	sprintf(s,
  		"%02d:%02d:%02d %s %s %02d %s %02d     %02d:%02d:%02d UTC %s %02d %s %02d",
  		ltp->tm_hour, ltp->tm_min,
  		ltp->tm_sec,
! #ifdef	NEW_CTIME
! 		ltp->tm_zone,
! #else
!  		tzname[ltp->tm_isdst],
! #endif
  		Wdayname[ltp->tm_wday], ltp->tm_mday,
  		Monname[ltp->tm_mon], ltp->tm_year % 100,
  		gmtp->tm_hour, gmtp->tm_min,
--- 882,899 ----
  register struct tm *		gmtp;
  {
  	static char		s[80];
+ 	struct timeb		tp;
  
+ 	if (ftime(&tp) < 0) {
+ 		fprintf(stderr, "%s: ftime failed: ");
+ 		perror("");
+ 		exit(1);
+ 	}
  	sprintf(s,
  		"%02d:%02d:%02d %s %s %02d %s %02d     %02d:%02d:%02d UTC %s %02d %s %02d",
  		ltp->tm_hour, ltp->tm_min,
  		ltp->tm_sec,
! 		timezone(tp.timezone, tp.dstflag),
  		Wdayname[ltp->tm_wday], ltp->tm_mday,
  		Monname[ltp->tm_mon], ltp->tm_year % 100,
  		gmtp->tm_hour, gmtp->tm_min,