[comp.sources.sun] v02i003: calentool - patch level 5, Part 1/4

mcgrew@dartagnan.rutgers.edu (Charles Mcgrew) (01/10/90)

Submitted-by: Bill Randle <billr@saab.cna.tek.com>
Posting-number: Volume 2, Issue 3
Archive-name: calentool/patch5a


[This is patch #5 for calentool, the day/week/month/year at-a-glance
 hackers almanac. This patch fixes several bugs and introduces several
 new features that have been requested. Amoung these are: 12/24 hour
 time display, European week formats (Mon-Sun), repeating appointments
 with a fixed duration, nested include files, relative dates for -d
 option and a new calencheck program. See the file 'PATCHLOG' for
 full details.
 A complete, patched source is available via anon uucp from host 'saab'
 (send mail for uucp info) and (eventually) from the sun-source archive
 on titan.rice.edu.
 Bug reports and feature suggestions are always welcome.
        Bill Randle
        billr@saab.CNA.TEK.COM
]

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 4)."
# Contents:  calencheck.1 expire.c patches05a
# Wrapped by billr@saab on Tue Dec 19 12:28:30 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'calencheck.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'calencheck.1'\"
else
echo shar: Extracting \"'calencheck.1'\" \(1124 characters\)
sed "s/^X//" >'calencheck.1' <<'END_OF_FILE'
X.\" $Header: calencheck.1,v 2.1 89/12/15 17:04:56 billr Exp $
X.\"
X.TH CALENCHECK 1 "14 December 1989"
X.SH NAME
Xcalencheck - check for pending appointments
X.SH SYNOPSIS
X.B calencheck
X[
X.B \-f
X.I apptsfile
X]
X.SH DESCRIPTION
X.I Calencheck
Xis a companion program for
X.IR calentool (1L).
X.I Calencheck
Xreads the
X.I calentool
X.B .appointments
Xfile and sends a message to the console approximately ten minutes
Xbefore a scheduled appointment is to start.  Its operation is
Xthe same as invoking
X.I calentool
Xwith the
X.B \-b
Xoption, with the exception that there is no icon to change.
X.LP
XThis program is especially useful for Sun systems with limited
Xmemory or swap space that can not afford to keep
X.I calentool
Xrunning continously.
XIt may also be useful if the user is not working at his/her console,
Xas it does not require the window system to work.
X.LP
XTo enter or edit appointments the
X.I calentool
Xprogram must still be used.
X.SH OPTIONS
X.TP 15
X.BI \-f \ apptsfile
XUse
X.I apptsfile
Xas the appointments file, rather than the default.
X.SH "SEE ALSO"
Xcalentool(1L)
X.SH AUTHOR
XBill Randle (Tektronix, Inc., billr@saab.CNA.TEK.COM)
END_OF_FILE
if test 1124 -ne `wc -c <'calencheck.1'`; then
    echo shar: \"'calencheck.1'\" unpacked with wrong size!
fi
# end of 'calencheck.1'
fi
if test -f 'expire.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'expire.c'\"
else
echo shar: Extracting \"'expire.c'\" \(4867 characters\)
sed "s/^X//" >'expire.c' <<'END_OF_FILE'
X/*
X * $Header: expire.c,v 2.1 89/12/15 17:04:54 billr Exp $
X *
X * expire.c
X * expire outdated appts, i.e. remove them from the appts file, if they
X * are older than <n> days.
X *
X * Copyright (C) 1989 Tektronix, Inc.
X *	All Rights Reserved
X * Permission is hereby granted to use and modify this code in source
X * or binary form as long as it is not sold for profit and this copyright
X * notice remains intact.
X */
X
X#include <stdio.h>
X#include <sys/time.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <sys/errno.h>
X#include "ct.h"
X
Xextern struct tm today, current;
Xextern char apts_pathname[], tmpapts_pathname[];
Xextern char inbuf[], apts_dir[];
Xextern int save_old;
Xextern int errno;
Xextern double julian_day();
Xextern double nth_mday_of_month();
X
X/*
X * Scan appointments file for outdated appointments. If <save_old> is
X * TRUE then save them to a special file of the form ".appointments.YY",
X * where YY is the year of that appointment.  If <edays> is zero, then
X * all other appointments are copied to the new appts file.  If <edays>
X * > 0, then any appointments more than <edays> old are discarded.
X * Setting <save_old> TRUE and <edays> to 0 gives the behavior described
X * by the "-o" switch.
X */
Xexpire(edays)
Xint edays;
X{
X	FILE *apts, *temp_apts, *fp;
X	int read_stat;
X	int runl, week;
X	char save_file[128];
X	struct appt_entry appt;
X	struct stat sbuf;
X
X	/*
X	 * method: for each regular appt in the file (or limited
X	 * duration appt), compare the Julian date of that appt
X	 * and the Julian date of today, looking for a difference
X	 * greater than <edays>.
X	 */
X	if ((apts = fopen(apts_pathname, "r")) == NULL)
X		err_rpt("can't open appointments file", FATAL);
X
X	if ((temp_apts = fopen(tmpapts_pathname, "w")) == NULL)
X		err_rpt("can't open temp file for writing", FATAL);
X
X	/*
X	 * now go thru the appointments file
X	 */
X	while ((read_stat=get_aentry(apts, &appt, TRUE)) != EOF) {
X		if (read_stat)
X			continue;	/* read error (ignore) */
X		if (appt.flags & A_COMMENT) {
X			fputs(inbuf, temp_apts);
X			continue;
X		}
X		current.tm_year = appt.year;
X		current.tm_mon = appt.month;
X		current.tm_mday = appt.day;
X		if (appt.flags & ALL_YEARS)
X			/* force this to be saved */
X			current.tm_year = today.tm_year + 1;
X		if (appt.flags & ALL_MONTHS)
X			/* maybe saved, pick worse case */
X			current.tm_mon = DEC;
X		if (appt.flags & ALL_DAYS) {
X			if (current.tm_year < today.tm_year ||
X			   (current.tm_year == today.tm_year &&
X			    current.tm_mon < today.tm_mon))
X				/* maybe saved, pick worse case */
X				current.tm_mday = monthlength(current.tm_mon);
X		}
X		if (appt.flags & EVERY_SOMEDAY) {
X			if ((appt.repeat & ALL_WEEKS) == ALL_WEEKS || appt.repeat & LAST_WEEK ||
X			    appt.repeat & WEEK5)
X				week = 5;
X			else if (appt.repeat & WEEK4)
X				week = 4;
X			else if (appt.repeat & WEEK3)
X				week = 3;
X			else if (appt.repeat & WEEK2)
X				week = 2;
X			else if (appt.repeat & WEEK1)
X				week = 1;
X			current.tm_mday = (int)nth_mday_of_month(week, Pickday(appt.flags), current.tm_mon, current.tm_year+1900);
X			if (current.tm_mday > monthlength(current.tm_mon))
X				current.tm_mday = (int)nth_mday_of_month(week-1, Pickday(appt.flags), current.tm_mon, current.tm_year+1900);
X			if (appt.flags & RUN) {
X				current.tm_mday += appt.runlength;
X				fix_current_day();
X			}
X		} else if (appt.flags & REPEAT) {
X			if (appt.flags & RUN)
X				runl = appt.runlength;
X			else
X				runl = 1;
X			while (ymd_compare(current, today) < 0 && runl) {
X				if (appt.flags & RUN)
X					--runl;
X				if (runl) {
X					current.tm_mday += appt.repeat;
X					fix_current_day();
X				}
X			}
X		}
X		if (save_old && current.tm_year < today.tm_year) {
X			/* prepend directory info */
X			sprintf(save_file, "%s/.appointments.%02d",
X				apts_dir, appt.year);
X			if (stat(save_file, &sbuf) && errno == ENOENT) {
X				/* new file*/
X				if ((fp = fopen(save_file, "w")) == NULL)
X					err_rpt("can't open save file, bailing out", FATAL);
X				fputs(HEADER, fp);
X				fclose(fp);
X			}
X			if ((fp = fopen(save_file, "a+")) == NULL)
X				err_rpt("can't open save file, bailing out", FATAL);
X			else {
X				if (put_aentry(fp, &appt))
X					err_rpt("write to save appt file failed, bailing out", FATAL);
X				fclose(fp);
X			}
X		}
X		current.tm_mday += edays;  /* offset by expire days */
X		fix_current_day();
X		if (edays == 0 ||
X		    julian_day((double)current.tm_mday, current.tm_mon, current.tm_year+1900) >=
X		    julian_day((double)today.tm_mday, today.tm_mon, today.tm_year+1900)) {
X			if (put_aentry(temp_apts, &appt)) {
X				/* write error */
X				break;
X			}
X		}
X        }
X	if (ferror(temp_apts))
X		err_rpt("write on temp file failed", FATAL);
X	fclose(temp_apts);
X        fclose(apts);
X	/* don't rename zero length files */
X	stat(tmpapts_pathname, &sbuf);
X	if (sbuf.st_size == (off_t) 0)
X		err_rpt("zero length temp file - not renamed", NON_FATAL);
X	else
X		xrename(tmpapts_pathname, apts_pathname);
X}
X
END_OF_FILE
if test 4867 -ne `wc -c <'expire.c'`; then
    echo shar: \"'expire.c'\" unpacked with wrong size!
fi
# end of 'expire.c'
fi
if test -f 'patches05a' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patches05a'\"
else
echo shar: Extracting \"'patches05a'\" \(44652 characters\)
sed "s/^X//" >'patches05a' <<'END_OF_FILE'
X*** moon.icon.orig	Fri Dec 15 17:19:43 1989
X--- moon.icon	Fri Dec 15 17:05:01 1989
X***************
X*** 1,4 ****
X--- 1,5 ----
X  /* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X+  * $Header: moon.icon,v 2.1 89/12/15 17:04:59 billr Exp $
X   */
X  	0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
X  	0xFFFF,0xFF00,0x00FF,0xFFFF,0xFFFF,0xF800,0x081F,0xFFFF,
X*** /tmp/,RCSt1a16881	Fri Dec 15 17:21:59 1989
X--- PATCHLOG	Fri Dec 15 17:13:47 1989
X***************
X*** 1,4
X! # $Header: PATCHLOG,v 2.5 89/09/19 06:17:10 billr Exp $
X  
X  #$Log:	PATCHLOG,v $
X  # Revision 2.5  89/09/19  06:17:10  billr
X
X--- 1,4 -----
X! # $Header: PATCHLOG,v 2.6 89/12/15 17:13:23 billr Exp $
X  
X  #$Log:	PATCHLOG,v $
X  # Revision 2.6  89/12/15  17:13:23  billr
X***************
X*** 1,6
X  # $Header: PATCHLOG,v 2.5 89/09/19 06:17:10 billr Exp $
X  
X  #$Log:	PATCHLOG,v $
X  # Revision 2.5  89/09/19  06:17:10  billr
X  # Patchlevel 4 of calentool. Fixes the following bug reports:
X  # 
X
X--- 1,58 -----
X  # $Header: PATCHLOG,v 2.6 89/12/15 17:13:23 billr Exp $
X  
X  #$Log:	PATCHLOG,v $
X+ # Revision 2.6  89/12/15  17:13:23  billr
X+ # Patchlevel 5 of calentool fixes the following bugs and adds features:
X+ # 
X+ # ===========
X+ # Bugs Fixed:
X+ # ===========
X+ # calentool -p -m misses warnings in advance if the warning and 
X+ # 	appointments are in different month.  <kayhan@eve.usc.edu>
X+ # Fixed bug with day/week PostScript printouts [reported by several people]
X+ # Fixed bug with "-m" option [reported by several people]
X+ # Corrected date for Australia Day <ajc@philabs.philips.COM>
X+ # Fixed -p/-P/-m options so nothing is printed (or mailed) if there are
X+ # 	no appointments for the day. <uunet.uu.net!xlab!milt!milt>, <brooks@ge-dab.crd.ge.COM>
X+ # Fixed bug whereby entire calentool was being changed to black&white
X+ # 	after the Moon data frame was displayed.
X+ # Fixed bug in calculation of Jewish passover (on which all the other
X+ # 	Jewish holidays are based) <smb@hector.att.COM>, <rjc@cs.brown.edu>
X+ # Fixed bug that displayed previous days calendar if a day is selected from a 6 day week. <bob@omni.COM>
X+ # Shortend length of an extra long entry in the dates/space file. <cdurst@aecmail.prime.com>
X+ # Fixed bug in calculation of nth_day_of_month (shows up as putting election
X+ # 	day on the wrong week). <uunet.uu.net!formtek!pen>, <att.att.COM!cbosgd!smk>
X+ # Fixed bug whereby deleted repeated appointments were not always recognized.
X+ # Added #define for mail program with default set to "usr/ucb/mail". The
X+ # 	problem showed up when a user had /usr/5bin in his path before
X+ # 	/usr/ucb. <uunet.uu.net!cjsa!jeff>
X+ # Fixed bug that caused calentool to dump core on notes sections with long messages.
X+ # Added dates/space entry in Makefile.
X+ # 
X+ # =============
X+ # New features:
X+ # =============
X+ # Modified parse_date to allow +nnn and -nnn syntax for dates relative to the
X+ # 	current date. <peter@hadrian.uwo.ca>
X+ # 
X+ # Add new #defines and switches for selected 12/24 time displays and either
X+ # 	Sunday-Saturday or Monday-Sunday weeks (for some Europeans). <hk@simulina.se>
X+ # Cleaner opening windows. <cdurst@aecmail.prime.com>
X+ # New -B option to beep AND open calentool window. <cdurst@aecmail.prime.com>
X+ # Nested includes (to 4 levels) are now allowed. (Idea from <mdf0%shemesh@gte.COM>)
X+ # Allow -p/-P[dw] options to work in conjunction with -m/-M so that a
X+ # 	weeks worth of appointments can be mailed.
X+ # Added new expire option (-x) to expire (trash) all appointments older than
X+ # 	a specified number of days.
X+ # The sense of the -w option was changed. In order to get the "Working!"
X+ # 	message, you now have to specify "-w".
X+ # Changed M/D/Y dates to D/M/Y when European option (-E) selected.
X+ # Optimized certain holiday calculations.
X+ # New feature for appointments that repeat for a fixed interval of time
X+ #       e.g. 12/26/89 for 5 days.
X+ # Wrote new calencheck program for checking for pending appts without having
X+ # 	to run calentool.
X+ #
X  # Revision 2.5  89/09/19  06:17:10  billr
X  # Patchlevel 4 of calentool. Fixes the following bug reports:
X  # 
X*** /tmp/,RCSt1a16886	Fri Dec 15 17:22:02 1989
X--- Bugs	Fri Dec 15 17:16:39 1989
X***************
X*** 1,8
X  These aren't major, but I haven't had time to track them down...
X  
X  1) The "Working!" message occasionally lingers on when it shouldn't.
X!    If it bothers you, use the "-w" option to turn off the message
X!    entirely.
X  
X  2) Arrow display messes up on rare occasions.  I haven't duplicated
X     this often enough to track down.
X
X--- 1,7 -----
X  These aren't major, but I haven't had time to track them down...
X  
X  1) The "Working!" message occasionally lingers on when it shouldn't.
X!    If it bothers you, don't use this option (-w).
X  
X  The following bugs have been reported by various users, but I haven't
X  been able to fix them, since I haven't been able to duplicate them
X***************
X*** 4,12
X     If it bothers you, use the "-w" option to turn off the message
X     entirely.
X  
X- 2) Arrow display messes up on rare occasions.  I haven't duplicated
X-    this often enough to track down.
X- 
X  The following bugs have been reported by various users, but I haven't
X  been able to fix them, since I haven't been able to duplicate them
X  (usually due to hardware/os combinations I don't have access to).
X
X--- 3,8 -----
X  1) The "Working!" message occasionally lingers on when it shouldn't.
X     If it bothers you, don't use this option (-w).
X  
X  The following bugs have been reported by various users, but I haven't
X  been able to fix them, since I haven't been able to duplicate them
X  (usually due to hardware/os combinations I don't have access to).
X***************
X*** 12,18
X  (usually due to hardware/os combinations I don't have access to).
X  
X  *Calentool dies (seg fault) after running overnight with lockscreen <mfeblowitz@ge.com>
X- *Core dump when clicking MS-MIDDLE button on note section on 386i <jmc@ptsfa.pacbell.com>
X  *Memory leakage <vicorp!sparky!scott@uunet.uu.net>
X  *Popup error window only gets partially displayed (OS 4.0.3/Sun3) <rohit@sun.com>
X  ?Deleting single occurrance of multiple meeting doesn't really delete it <ecm@aloft.uucp>
X
X--- 8,13 -----
X  (usually due to hardware/os combinations I don't have access to).
X  
X  *Calentool dies (seg fault) after running overnight with lockscreen <mfeblowitz@ge.com>
X  *Memory leakage <vicorp!sparky!scott@uunet.uu.net>
X  *Popup error window only gets partially displayed (OS 4.0.3/Sun3) <rohit@sun.com>
X  *Running calentool forces icon gravity change on 386i <lwv27%chemabs@cis.ohio-state.edu>
X***************
X*** 15,22
X  *Core dump when clicking MS-MIDDLE button on note section on 386i <jmc@ptsfa.pacbell.com>
X  *Memory leakage <vicorp!sparky!scott@uunet.uu.net>
X  *Popup error window only gets partially displayed (OS 4.0.3/Sun3) <rohit@sun.com>
X! ?Deleting single occurrance of multiple meeting doesn't really delete it <ecm@aloft.uucp>
X! ?Running calentool forces icon gravity change on 386i <lwv27%chemabs@cis.ohio-state.edu>
X  
X  If you fix any of these, or spot other bugs, please let me know.
X  
X
X--- 10,16 -----
X  *Calentool dies (seg fault) after running overnight with lockscreen <mfeblowitz@ge.com>
X  *Memory leakage <vicorp!sparky!scott@uunet.uu.net>
X  *Popup error window only gets partially displayed (OS 4.0.3/Sun3) <rohit@sun.com>
X! *Running calentool forces icon gravity change on 386i <lwv27%chemabs@cis.ohio-state.edu>
X  
X  If you fix any of these, or spot other bugs, please let me know.
X  
X***************
X*** 23,26
X  		Bill Randle
X  		billr@saab.CNA.TEK.COM
X  		{most backbones}!tektronix!saab.CNA.TEK!billr
X! 		August 11, 1989
X
X--- 17,20 -----
X  		Bill Randle
X  		billr@saab.CNA.TEK.COM
X  		{most backbones}!tektronix!saab.CNA.TEK!billr
X! 		December 15, 1989
X*** /tmp/,RCSt1a16891	Fri Dec 15 17:22:06 1989
X--- INSTALL	Fri Dec 15 17:16:42 1989
X***************
X*** 1,4
X! INSTALLATION NOTES FOR CALENTOOL - Version 2.1, April 1989
X  
X  1) Edit the file "ct.h" to tailor calentool to your site. The only things
X     that should really need to be "tweeked" are the define statements for:
X
X--- 1,4 -----
X! INSTALLATION NOTES FOR CALENTOOL - Version 2.1p5, December 1989
X  
X  1) Edit the file "ct.h" to tailor calentool to your site. The only things
X     that should really need to be "tweeked" are the define statements for:
X***************
X*** 11,16
X     START_YEAR (first year to appear in year menu)
X     NR_YEARS (total number of years to appear in year menu)
X     UPDATE_RATE (rate of clock updating)
X  
X     If you want to make a smaller version of calentool, without certain
X     features, uncomment the #defines for one or more of the following
X
X--- 11,19 -----
X     START_YEAR (first year to appear in year menu)
X     NR_YEARS (total number of years to appear in year menu)
X     UPDATE_RATE (rate of clock updating)
X+    MAILPROG (mailer for -m option)
X+    HOUR_24 (for 12 or 24 hour time formats)
X+    MON_FIRST (for Sun-Sat or Mon-Sun week formats)
X  
X     If you want to make a smaller version of calentool, without certain
X     features, uncomment the #defines for one or more of the following
X***************
X*** 58,61
X  
X  	Bill Randle
X  	billr@saab.CNA.TEK.COM
X! 	May 9, 1989
X
X--- 61,64 -----
X  
X  	Bill Randle
X  	billr@saab.CNA.TEK.COM
X! 	December 15, 1989
X*** /tmp/,RCSt1a02742	Tue Dec 19 12:26:34 1989
X--- Makefile	Tue Dec 19 12:26:06 1989
X***************
X*** 1,4
X! # $Header: Makefile,v 2.2 89/07/19 20:32:48 billr Exp $
X  #
X  #DATELIB_DIR  Directory containing the Date Library
X  #PRINT_CMD    Command to send postscript to appropriate printer
X
X--- 1,4 -----
X! # $Header: Makefile,v 2.4 89/12/19 12:25:42 billr Exp $
X  #
X  #DATELIB_DIR  Directory containing the Date Library
X  #PRINT_CMD    Command to send postscript to appropriate printer
X***************
X*** 8,13
X  #START_YEAR   What is first year of calendar to display
X  #NR_YEARS     How many years to display.
X  #UPDATE_RATE  How often to perform updates (second or minute)?
X  #APPT_CHECK_LIMIT What limits to check for appointments (see ct.h)
X  #
X  #NO_PRINTER   No printing is supported
X
X--- 8,16 -----
X  #START_YEAR   What is first year of calendar to display
X  #NR_YEARS     How many years to display.
X  #UPDATE_RATE  How often to perform updates (second or minute)?
X+ #MAILPROG     Mailer for -m option
X+ #HOUR_24      For 12 or 24 hour time formats
X+ #MON_FIRST    For Sun-Sat or Mon-Sun week formats
X  #APPT_CHECK_LIMIT What limits to check for appointments (see ct.h)
X  #
X  #NO_PRINTER   No printing is supported
X***************
X*** 15,20
X  #NO_HOLIDAYS  No holiday display is supported
X  #NO_SUN_MOON  No sun and moon phase info is supported
X  #
X  #BINDIR       Where to install binaries
X  #LIBDIR       Where to install date files and utility binaries
X  #MANDIR       Where to install man pages
X
X--- 18,25 -----
X  #NO_HOLIDAYS  No holiday display is supported
X  #NO_SUN_MOON  No sun and moon phase info is supported
X  #
X+ #CALENCHECK   Ifdefs out parts of files for calencheck program
X+ #
X  #BINDIR       Where to install binaries
X  #LIBDIR       Where to install date files and utility binaries
X  #MANDIR       Where to install man pages
X***************
X*** 30,35
X  CC = cc
X  DEFINES=  #-DDATELIB_DIR=\"./dates\" -DSTART_HOUR=7 -DEND_HOUR=19 -DSTART_YEAR=88
X  CFLAGS=	-g ${DEFINES}
X  LIBS=	-lsuntool -lsunwindow -lpixrect -lm
X  
X  DATEFILES= dates/README dates/celtic dates/computing dates/events\
X
X--- 35,41 -----
X  CC = cc
X  DEFINES=  #-DDATELIB_DIR=\"./dates\" -DSTART_HOUR=7 -DEND_HOUR=19 -DSTART_YEAR=88
X  CFLAGS=	-g ${DEFINES}
X+ CC_CFLAGS = ${CFLAGS} -DCALENCHECK
X  LIBS=	-lsuntool -lsunwindow -lpixrect -lm
X  
X  DATEFILES= dates/README dates/celtic dates/computing dates/events\
X***************
X*** 36,42
X  	 dates/lives dates/lotr dates/nature dates/popcult\
X  	 dates/usa_holiday dates/usa_other dates/usa_states dates/world\
X  	 dates/gdead dates/space
X! SRCS=	calentool.c datelib.o devent.c dpaint.c event.c holidays.c\
X  	 init.c moon.c mpaint.c notify.c pcal.c ras2ps.c riseset.c tool.c utils.c\
X  	 version.c wevent.c wpaint.c ypaint.c
X  INCLUDES= ct.h event.h paint.h patchlevel.h riseset.h
X
X--- 42,48 -----
X  	 dates/lives dates/lotr dates/nature dates/popcult\
X  	 dates/usa_holiday dates/usa_other dates/usa_states dates/world\
X  	 dates/gdead dates/space
X! SRCS=	calentool.c datelib.o devent.c dpaint.c event.c expire.c holidays.c\
X  	 init.c moon.c mpaint.c notify.c pcal.c ras2ps.c riseset.c tool.c utils.c\
X  	 version.c wevent.c wpaint.c ypaint.c
X  INCLUDES= ct.h event.h paint.h patchlevel.h riseset.h
X***************
X*** 40,47
X  	 init.c moon.c mpaint.c notify.c pcal.c ras2ps.c riseset.c tool.c utils.c\
X  	 version.c wevent.c wpaint.c ypaint.c
X  INCLUDES= ct.h event.h paint.h patchlevel.h riseset.h
X! OBJS=	calentool.o datelib.o devent.o dpaint.o event.o holidays.o\
X! 	 init.o moon.o mpaint.o notify.o pcal.o ras2ps.o riseset.o tool.o utils.o\
X  	 version.o wevent.o wpaint.o ypaint.o
X  
X  all: calentool conv_tools
X
X--- 46,53 -----
X  	 init.c moon.c mpaint.c notify.c pcal.c ras2ps.c riseset.c tool.c utils.c\
X  	 version.c wevent.c wpaint.c ypaint.c
X  INCLUDES= ct.h event.h paint.h patchlevel.h riseset.h
X! OBJS=	calentool.o ct_datelib.o devent.o ct_dpaint.o event.o expire.o holidays.o\
X! 	 init.o moon.o mpaint.o notify.o pcal.o ras2ps.o riseset.o tool.o ct_utils.o\
X  	 version.o wevent.o wpaint.o ypaint.o
X  CC_OBJS = calencheck.o cc_datelib.o cc_dpaint.o cc_utils.o
X  
X***************
X*** 43,48
X  OBJS=	calentool.o datelib.o devent.o dpaint.o event.o holidays.o\
X  	 init.o moon.o mpaint.o notify.o pcal.o ras2ps.o riseset.o tool.o utils.o\
X  	 version.o wevent.o wpaint.o ypaint.o
X  
X  all: calentool conv_tools
X  
X
X--- 49,55 -----
X  OBJS=	calentool.o ct_datelib.o devent.o ct_dpaint.o event.o expire.o holidays.o\
X  	 init.o moon.o mpaint.o notify.o pcal.o ras2ps.o riseset.o tool.o ct_utils.o\
X  	 version.o wevent.o wpaint.o ypaint.o
X+ CC_OBJS = calencheck.o cc_datelib.o cc_dpaint.o cc_utils.o
X  
X  all: calentool calencheck conv_tools
X  
X***************
X*** 44,50
X  	 init.o moon.o mpaint.o notify.o pcal.o ras2ps.o riseset.o tool.o utils.o\
X  	 version.o wevent.o wpaint.o ypaint.o
X  
X! all: calentool conv_tools
X  
X  # the main program
X  calentool: ${OBJS}
X
X--- 51,57 -----
X  	 version.o wevent.o wpaint.o ypaint.o
X  CC_OBJS = calencheck.o cc_datelib.o cc_dpaint.o cc_utils.o
X  
X! all: calentool calencheck conv_tools
X  
X  # the main program
X  calentool: ${OBJS}
X***************
X*** 51,57
X  	${CC} ${CFLAGS} -o calentool ${OBJS} ${LIBS}
X  
X  calentool.o: calentool.c ct.h std.icon rev.icon nap.icon
X! datelib.o: datelib.c
X  devent.o: devent.c ct.h event.h
X  dpaint.o: dpaint.c ct.h paint.h riseset.h
X  holidays.o: holidays.c
X
X--- 58,66 -----
X  	${CC} ${CFLAGS} -o calentool ${OBJS} ${LIBS}
X  
X  calentool.o: calentool.c ct.h std.icon rev.icon nap.icon
X! ct_datelib.o: datelib.c
X! 	${CC} ${CFLAGS} -c datelib.c
X! 	mv datelib.o ct_datelib.o
X  devent.o: devent.c ct.h event.h
X  ct_dpaint.o: dpaint.c ct.h paint.h riseset.h
X  	${CC} ${CFLAGS} -c dpaint.c
X***************
X*** 53,59
X  calentool.o: calentool.c ct.h std.icon rev.icon nap.icon
X  datelib.o: datelib.c
X  devent.o: devent.c ct.h event.h
X! dpaint.o: dpaint.c ct.h paint.h riseset.h
X  holidays.o: holidays.c
X  init.o: init.c ct.h
X  moon.o: moon.c
X
X--- 62,71 -----
X  	${CC} ${CFLAGS} -c datelib.c
X  	mv datelib.o ct_datelib.o
X  devent.o: devent.c ct.h event.h
X! ct_dpaint.o: dpaint.c ct.h paint.h riseset.h
X! 	${CC} ${CFLAGS} -c dpaint.c
X! 	mv dpaint.o ct_dpaint.o
X! expire.o: expire.c ct.h
X  holidays.o: holidays.c
X  init.o: init.c ct.h
X  moon.o: moon.c
X***************
X*** 64,70
X  ras2ps.o: ras2ps.c
X  riseset.o: riseset.h
X  tool.o: tool.c ct.h
X! utils.o: utils.c ct.h
X  version.o: version.c
X  wevent.o: wevent.c ct.h event.h
X  wpaint.o: wpaint.c ct.h paint.h
X
X--- 76,84 -----
X  ras2ps.o: ras2ps.c
X  riseset.o: riseset.h
X  tool.o: tool.c ct.h
X! ct_utils.o: utils.c ct.h
X! 	${CC} ${CFLAGS} -c utils.c
X! 	mv utils.o ct_utils.o
X  version.o: version.c
X  wevent.o: wevent.c ct.h event.h
X  wpaint.o: wpaint.c ct.h paint.h
X***************
X*** 70,75
X  wpaint.o: wpaint.c ct.h paint.h
X  ypaint.o: ypaint.c ct.h paint.h
X  
X  # conversion utilities
X  conv_tools: cal2ct month2ct mt2ct
X  
X
X--- 84,103 -----
X  wpaint.o: wpaint.c ct.h paint.h
X  ypaint.o: ypaint.c ct.h paint.h
X  
X+ # the calencheck program
X+ calencheck: ${CC_OBJS}
X+ 	${CC} ${CC_CFLAGS} -o calencheck ${CC_OBJS} -lsunwindow -lm
X+ 
X+ cc_utils.o: utils.c ct.h
X+ 	${CC} ${CC_CFLAGS} -c utils.c
X+ 	mv utils.o cc_utils.o
X+ cc_datelib.o: datelib.c
X+ 	${CC} ${CC_CFLAGS} -c datelib.c
X+ 	mv datelib.o cc_datelib.o
X+ cc_dpaint.o: dpaint.c ct.h
X+ 	${CC} ${CC_CFLAGS} -c dpaint.c
X+ 	mv dpaint.o cc_dpaint.o
X+ 
X  # conversion utilities
X  conv_tools: cal2ct month2ct mt2ct
X  
X***************
X*** 84,89
X  
X  install: all
X  	install -s calentool ${BINDIR}
X  	install -c -m 444 calentool.1 ${MANDIR}/calentool.${MANEXT}
X  	install -c -m 444 CalenTool.d ${DEFSDIR}/CalenTool.d
X  	-mkdir ${LIBDIR}
X
X--- 112,118 -----
X  
X  install: all
X  	install -s calentool ${BINDIR}
X+ 	install -s calencheck ${BINDIR}
X  	install -c -m 444 calentool.1 ${MANDIR}/calentool.${MANEXT}
X  	install -c -m 444 calencheck.1 ${MANDIR}/calencheck.${MANEXT}
X  	install -c -m 444 CalenTool.d ${DEFSDIR}/CalenTool.d
X***************
X*** 85,90
X  install: all
X  	install -s calentool ${BINDIR}
X  	install -c -m 444 calentool.1 ${MANDIR}/calentool.${MANEXT}
X  	install -c -m 444 CalenTool.d ${DEFSDIR}/CalenTool.d
X  	-mkdir ${LIBDIR}
X  	cp ${DATEFILES} ${LIBDIR}
X
X--- 114,120 -----
X  	install -s calentool ${BINDIR}
X  	install -s calencheck ${BINDIR}
X  	install -c -m 444 calentool.1 ${MANDIR}/calentool.${MANEXT}
X+ 	install -c -m 444 calencheck.1 ${MANDIR}/calencheck.${MANEXT}
X  	install -c -m 444 CalenTool.d ${DEFSDIR}/CalenTool.d
X  	-mkdir ${LIBDIR}
X  	cp ${DATEFILES} ${LIBDIR}
X***************
X*** 103,109
X  	rm -f *.o *.BAK core *~ #*#
X  
X  veryclean:
X! 	rm -f calentool cal2ct month2ct mt2ct *.o *.BAK core *~ #*#
X  
X  # If you are using GNU make, the following statement will cause it to
X  # ignore any (bogus) files named `clean', `all', etc.; if you are using
X
X--- 133,139 -----
X  	rm -f *.o *.BAK core *~ #*#
X  
X  veryclean:
X! 	rm -f calentool calencheck cal2ct month2ct mt2ct *.o *.BAK core *~ #*#
X  
X  # If you are using GNU make, the following statement will cause it to
X  # ignore any (bogus) files named `clean', `all', etc.; if you are using
X*** /tmp/,RCSt1a16901	Fri Dec 15 17:22:14 1989
X--- ToDo	Fri Dec 15 17:16:50 1989
X***************
X*** 1,7
X  Still to do someday...
X  
X  1) Convert display code and event handling, etc. to X11.  Using
X!    View2 may be the way to do this.
X  
X  2) Add Lunar based (e.g. Chinese, Japanese) holidays.
X  
X
X--- 1,7 -----
X  Still to do someday...
X  
X  1) Convert display code and event handling, etc. to X11.  Using
X!    XView may be the way to do this.
X  
X  2) Add Lunar based (e.g. Chinese, Japanese) holidays.
X  
X***************
X*** 33,39
X  =Want to come up in week display <bob@boulder.colorado.edu>
X  =Want to order the notes (i.e. pick which is displayed first) <dna@emmy.umd.edu>
X  =Want to see two days at a time <rohit@sun.com>
X- =Want to set duration of an appointment (e.g. gone for 4 days) <jeremy@kheops.cmi.no>
X  =Want to start arbitrary process at appt time <wyle@inf.ethz.ch>
X  =Want week display to show current day at left, then next 5-7 days <bob@boulder.colorado.edu>
X  =Want window to open when appt time approaches <rohit@sun.com>
X
X--- 33,38 -----
X  =Want to come up in week display <bob@boulder.colorado.edu>
X  =Want to order the notes (i.e. pick which is displayed first) <dna@emmy.umd.edu>
X  =Want to see two days at a time <rohit@sun.com>
X  =Want to start arbitrary process at appt time <wyle@inf.ethz.ch>
X  =Want week display to show current day at left, then next 5-7 days <bob@boulder.colorado.edu>
X  =Want jump scroll for long messages
X***************
X*** 36,39
X  =Want to set duration of an appointment (e.g. gone for 4 days) <jeremy@kheops.cmi.no>
X  =Want to start arbitrary process at appt time <wyle@inf.ethz.ch>
X  =Want week display to show current day at left, then next 5-7 days <bob@boulder.colorado.edu>
X! =Want window to open when appt time approaches <rohit@sun.com>
X
X--- 35,40 -----
X  =Want to see two days at a time <rohit@sun.com>
X  =Want to start arbitrary process at appt time <wyle@inf.ethz.ch>
X  =Want week display to show current day at left, then next 5-7 days <bob@boulder.colorado.edu>
X! =Want jump scroll for long messages
X! =Want more features from 'sched', e.g. alarm clock, marked time events, display month current month icon <cdurst@aecmail.prime.com>
X! =Want to be able to set all command line options from within the running tool.
X*** /tmp/,RCSt1a16906	Fri Dec 15 17:22:19 1989
X--- calentool.1	Fri Dec 15 17:16:57 1989
X***************
X*** 1,4
X! .\" $Header: calentool.1,v 2.4 89/09/19 06:06:11 billr Exp $
X  .\"
X  .TH CALENTOOL 1 "14 September 1989"
X  .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
X
X--- 1,4 -----
X! .\" $Header: calentool.1,v 2.5 89/12/15 17:16:51 billr Exp $
X  .\"
X  .TH CALENTOOL 1 "14 December 1989"
X  .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
X***************
X*** 1,6
X  .\" $Header: calentool.1,v 2.4 89/09/19 06:06:11 billr Exp $
X  .\"
X! .TH CALENTOOL 1 "14 September 1989"
X  .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
X  .SH NAME
X  calentool - day/week/month/year-at-a-glance SunView tool (the Hacker's Almanac)
X
X--- 1,6 -----
X  .\" $Header: calentool.1,v 2.5 89/12/15 17:16:51 billr Exp $
X  .\"
X! .TH CALENTOOL 1 "14 December 1989"
X  .ds Ps P\s-2OST\s+2S\s-2CRIPT\s+2
X  .SH NAME
X  calentool - day/week/month/year-at-a-glance SunView tool (the Hacker's Almanac)
X***************
X*** 10,15
X  .B \-b
X  ]
X  [
X  .B \-d
X  .I date
X  ]
X
X--- 10,18 -----
X  .B \-b
X  ]
X  [
X+ .B \-B
X+ ]
X+ [
X  .B \-d
X  .I date
X  ]
X***************
X*** 35,40
X  .I userid
X  ]
X  [
X  .B \-o
X  ]
X  [
X
X--- 38,47 -----
X  .I userid
X  ]
X  [
X+ .B \-M
X+ .I userid
X+ ]
X+ [
X  .B \-o
X  ]
X  [
X***************
X*** 67,72
X  .B \-5
X  ]
X  [
X  .B \-7
X  ]
X  [
X
X--- 74,83 -----
X  .B \-5
X  ]
X  [
X+ .B \-6
X+ ]
X+ [
X+ [
X  .B \-7
X  ]
X  [
X***************
X*** 70,76
X  .B \-7
X  ]
X  [
X! .I suntools options
X  ]
X  .SH DESCRIPTION
X  .I Calentool
X
X--- 81,87 -----
X  .B \-7
X  ]
X  [
X! .B \-12
X  ]
X  [
X  .B \-24
X***************
X*** 72,77
X  [
X  .I suntools options
X  ]
X  .SH DESCRIPTION
X  .I Calentool
X  is a day/week/month/year-at-a-glance tool.  It is a
X
X--- 83,104 -----
X  [
X  .B \-12
X  ]
X+ [
X+ .B \-24
X+ ]
X+ [
X+ .B \-e
X+ ]
X+ [
X+ .B \-E
X+ ]
X+ [
X+ .B \-x
X+ .I int
X+ ]
X+ [
X+ .I sunview options
X+ ]
X  .SH DESCRIPTION
X  .I Calentool
X  is a day/week/month/year-at-a-glance tool.  It is a
X***************
X*** 88,94
X  .IR mail (1),
X  and to examine colleagues appointment schedules.  Daily and weekly schedules
X  can be sent to a \*(Ps printer.  Outdated appointments can be sent
X! automatically to an archival file.  An extensive  set of files containing
X  commemorative dates is included, as well as a library of routines which
X  computes the dates of various holidays which do not fall on fixed days
X  of the Gregorian calendar (including religious holidays and astronomical
X
X--- 115,121 -----
X  .IR mail (1),
X  and to examine colleagues appointment schedules.  Daily and weekly schedules
X  can be sent to a \*(Ps printer.  Outdated appointments can be sent
X! automatically to an archival file.  An extensive set of files containing
X  commemorative dates is included, as well as a library of routines which
X  computes the dates of various holidays which do not fall on fixed days
X  of the Gregorian calendar (including religious holidays and astronomical
X***************
X*** 98,103
X  .I calentool
X  you should be operating within the SunView environment, the
X  .BR \-m ,
X  .B \-p
X  and
X  .B \-P
X
X--- 125,131 -----
X  .I calentool
X  you should be operating within the SunView environment, the
X  .BR \-m ,
X+ .BR \-M ,
X  .B \-p
X  and
X  .B \-P
X***************
X*** 121,127
X  .SH OPTIONS
X  .I Calentool
X  accepts standard
X! .I suntools
X  command line options at the end of the command line.
X  .TP 15
X  .B \-b
X
X--- 149,155 -----
X  .SH OPTIONS
X  .I Calentool
X  accepts standard
X! .I sunview
X  command line options at the end of the command line.
X  .TP 15
X  .B \-b
X***************
X*** 133,138
X  .IR nlock (1L);
X  notifying passers-by of the user's current activity.
X  .TP
X  .BI \-d \ date
X  Open the calendar at the day
X  .IR date ,
X
X--- 161,174 -----
X  .IR nlock (1L);
X  notifying passers-by of the user's current activity.
X  .TP
X+ .B \-B
X+ Similar to
X+ .B \-b
X+ except that the
X+ .I calentool
X+ frame is opened instead of writing to the console.  If both features are
X+ desired, both options may be specified.
X+ .TP
X  .BI \-d \ date
X  Open the calendar at the day
X  .IR date ,
X***************
X*** 148,153
X  MO/DD (day DD of month MO, for example 11/12 for November 12)
X  .br
X  MO/DD/YY (day DD of month MO, year YY, for example 9/1/88 for 1 September 1988)
X  .RE
X  .TP
X  .BI \-f \ apptsfile
X
X--- 184,194 -----
X  MO/DD (day DD of month MO, for example 11/12 for November 12)
X  .br
X  MO/DD/YY (day DD of month MO, year YY, for example 9/1/88 for 1 September 1988)
X+ .TP
X+ relative dates:
X+ +n (n days from now, for example +1 for tomorrow)
X+ .br
X+ -n (n days ago, for example -1 for yesterday)
X  .RE
X  .TP
X  .BI \-f \ apptsfile
X***************
X*** 217,222
X  represents the last two digits of a past year).
X  .TP
X  .BI \-m " userid"
X  Send mail listing todays appointments to the user specified by
X  .I userid
X  and exit.
X
X--- 258,265 -----
X  represents the last two digits of a past year).
X  .TP
X  .BI \-m " userid"
X+ .br
X+ .BI \-M " userid"
X  Send mail listing todays appointments to the user specified by
X  .I userid
X  and exit.
X***************
X*** 220,225
X  Send mail listing todays appointments to the user specified by
X  .I userid
X  and exit.
X  This feature is useful when calentool is run from
X  .IR cron (1),
X  to send yourself mail about today's appointments.  No mail is
X
X--- 263,272 -----
X  Send mail listing todays appointments to the user specified by
X  .I userid
X  and exit.
X+ .B \-m
X+ shows all notes, while
X+ .B \-M
X+ does not show notes not marked for display in the month/year displays.
X  This feature is useful when calentool is run from
X  .IR cron (1),
X  to send yourself mail about today's appointments.  No mail is
X***************
X*** 224,229
X  .IR cron (1),
X  to send yourself mail about today's appointments.  No mail is
X  sent about today's appointments, if there are none.
X  (Note: this option eliminates the need for the separate program,
X  .IR calenmail (1L),
X  which was distributed with earlier releases of
X
X--- 271,286 -----
X  .IR cron (1),
X  to send yourself mail about today's appointments.  No mail is
X  sent about today's appointments, if there are none.
X+ The
X+ .B \-p
X+ and
X+ .B \-P
X+ options may be used with these options to mail yourself a whole weeks
X+ worth of appointments, e.g.:
X+ .I
X+ calentool -Pw -m billr.
X+ .R
X+ 
X  (Note: this option eliminates the need for the separate program,
X  .IR calenmail (1L),
X  which was distributed with earlier releases of
X***************
X*** 281,288
X  seconds.
X  .TP
X  .B \-w
X! Don't display the "Working!" message in the control panel during
X! lengthy operations.  The cursor still changes to an hourglass.
X  .TP
X  .B \-z
X  Convert appointments file used by earlier versions of
X
X--- 338,345 -----
X  seconds.
X  .TP
X  .B \-w
X! Display the "Working!" message in the control panel during
X! lengthy operations.  The cursor also changes to an hourglass.
X  .TP
X  .BI \-x " int"
X  Expire appointment files entries if they are older than
X***************
X*** 284,289
X  Don't display the "Working!" message in the control panel during
X  lengthy operations.  The cursor still changes to an hourglass.
X  .TP
X  .B \-z
X  Convert appointments file used by earlier versions of
X  .I calentool
X
X--- 341,354 -----
X  Display the "Working!" message in the control panel during
X  lengthy operations.  The cursor also changes to an hourglass.
X  .TP
X+ .BI \-x " int"
X+ Expire appointment files entries if they are older than
X+ .I int
X+ days old.  Appointments in #include files are not expired.  To expire
X+ included appointments,
X+ .I calentool
X+ must be run on the included file directly.
X+ .TP
X  .B \-z
X  Convert appointments file used by earlier versions of
X  .I calentool
X***************
X*** 293,299
X  .TP
X  .B \-5
X  Display only five days (Monday through Friday) in the week display.  This is
X! useful if the installer has set the default display format to 7 days.
X  .TP
X  .B \-7
X  Display all seven days in the week display.  This is useful if the installer
X
X--- 358,364 -----
X  .TP
X  .B \-5
X  Display only five days (Monday through Friday) in the week display.  This is
X! useful if the installer has set the default display format to 6 or 7 days.
X  .TP
X  .B \-6
X  Display six days (Monday through Saturday) in the week display.  This is
X***************
X*** 295,300
X  Display only five days (Monday through Friday) in the week display.  This is
X  useful if the installer has set the default display format to 7 days.
X  .TP
X  .B \-7
X  Display all seven days in the week display.  This is useful if the installer
X  has set the default value to 5 days.  The 7-day display is wider than the 5-day
X
X--- 360,369 -----
X  Display only five days (Monday through Friday) in the week display.  This is
X  useful if the installer has set the default display format to 6 or 7 days.
X  .TP
X+ .B \-6
X+ Display six days (Monday through Saturday) in the week display.  This is
X+ useful if the installer has set the default display format to 5 or 7 days.
X+ .TP
X  .B \-7
X  Display all seven days in the week display.  This is useful if the installer
X  has set the default value to 5 or 6 days.  The 7-day display is wider than the 5-day
X***************
X*** 297,303
X  .TP
X  .B \-7
X  Display all seven days in the week display.  This is useful if the installer
X! has set the default value to 5 days.  The 7-day display is wider than the 5-day
X  display, allowing longer messages to be displayed.
X  .SH "DETAILED INSTRUCTIONS"
X  .SS "Examining the calendar"
X
X--- 366,372 -----
X  .TP
X  .B \-7
X  Display all seven days in the week display.  This is useful if the installer
X! has set the default value to 5 or 6 days.  The 7-day display is wider than the 5-day
X  display, allowing longer messages to be displayed.
X  .TP
X  .B \-12
X***************
X*** 299,304
X  Display all seven days in the week display.  This is useful if the installer
X  has set the default value to 5 days.  The 7-day display is wider than the 5-day
X  display, allowing longer messages to be displayed.
X  .SH "DETAILED INSTRUCTIONS"
X  .SS "Examining the calendar"
X  When first opened, the tool displays the appointments for a single day (today
X
X--- 368,394 -----
X  Display all seven days in the week display.  This is useful if the installer
X  has set the default value to 5 or 6 days.  The 7-day display is wider than the 5-day
X  display, allowing longer messages to be displayed.
X+ .TP
X+ .B \-12
X+ Display time in a 12-hour AM/PM format whenever practical.  This is usefful
X+ if the installer has set the default time format to 24-hour time.
X+ .TP
X+ .B \-24
X+ Display time in a 24-hour AM/PM format.  This is usefful
X+ if the installer has set the default time format to 12-hour time.
X+ .TP
X+ .B \-e
X+ Set European week display format (Monday through Sunday).  When 7 day
X+ week display is set, the display shows the days Monday through Sunday,
X+ rather than Sunday through Saturday.  This also affects the month
X+ and year displays.
X+ .TP
X+ .B \-E
X+ Set all European style options.  Currently, this includes:
X+ .B \-24
X+ and
X+ .BR \-e .
X+ Other options may be added in the future.
X  .SH "DETAILED INSTRUCTIONS"
X  .SS "Examining the calendar"
X  When first opened, the tool displays the appointments for a single day (today
X***************
X*** 459,465
X  year.  Alternatively,
X  the appointment may be repeated at a specified interval of days.  The user can
X  also specify a period of days prior to the appointment for which a reminder
X! will be printed.  For example, one could specify that a meeting is to occur
X  on the first and third Tuesday of the month, in perpetuity, by selecting
X  the repeat options
X  .BR "Selected Week" ,
X
X--- 549,556 -----
X  year.  Alternatively,
X  the appointment may be repeated at a specified interval of days.  The user can
X  also specify a period of days prior to the appointment for which a reminder
X! will be printed and how many times this appointment will be repeated.
X! For example, one could specify that a meeting is to occur
X  on the first and third Tuesday of the month, in perpetuity, by selecting
X  the repeat options
X  .BR "Selected Week" ,
X***************
X*** 560,566
X  	\fC# CalenTool V2 - DO NOT REMOVE THIS LINE
X  	#include "file"
X  	# <comment string>
X! 	YY MO DD HH MI AA [II] <WW> # \fImessage\fP
X  .fi
X  .SS Header line
X  The first line in an
X
X--- 651,657 -----
X  	\fC# CalenTool V2 - DO NOT REMOVE THIS LINE
X  	#include "file"
X  	# <comment string>
X! 	YY MO DD HH MI AA [II] <WW> +RR # \fImessage\fP
X  .fi
X  .SS Header line
X  The first line in an
X***************
X*** 644,650
X  appointments.  The
X  .I <WW>
X  field appears within broken brackets, and indicates the number of
X! days of advance warning required.
X  .SS Appointment text
X  If a # character appears in front of the text, it indicates that a recurring
X  appointment has been suppressed for that day.
X
X--- 735,744 -----
X  appointments.  The
X  .I <WW>
X  field appears within broken brackets, and indicates the number of
X! days of advance warning required.  The
X! .I +RR
X! field is preceded by a plus sign, and indicates the repetition count
X! for a given appointment.
X  .SS Appointment text
X  If a # character appears in front of the text, it indicates that a recurring
X  appointment has been suppressed for that day.
X***************
X*** 660,666
X  	\fC** 04 01 00 01 00            April Fool's Day
X  	** ** Tu 10 30 00 [1,3]      Meeting on 1st and 3rd Tues. of Month
X  	** ** 01 00 01 00 <1>        First day of every month, one day warning
X! 	88 05 ** 00 01 00            On vacation for entire month of May 1988\fP
X  .fi
X  .RE
X  .SH "SUPPLIED SPECIAL DATES FILES"
X
X--- 754,761 -----
X  	\fC** 04 01 00 01 00            April Fool's Day
X  	** ** Tu 10 30 00 [1,3]      Meeting on 1st and 3rd Tues. of Month
X  	** ** 01 00 01 00 <1>        First day of every month, one day warning
X! 	88 05 ** 00 01 00            On vacation for entire month of May 1988
X! 	89 11 06 99 00 00 +4         SigFishing Conference\fP
X  .fi
X  .RE
X  .SH "SUPPLIED SPECIAL DATES FILES"
X***************
X*** 779,785
X  .I $HOME/.defaults
X  file
X  .SH "SEE ALSO"
X! cal(1), cal2ct(1L), calendar(1), clocktool(1), cron(8),
X  mail(1), month(1L), monthtool(1L), month2ct(1L), mt2ct(1L),
X  nlock(1L), suntools(1), vi(1)
X  .SH REFERENCES
X
X--- 874,880 -----
X  .I $HOME/.defaults
X  file
X  .SH "SEE ALSO"
X! cal(1), cal2ct(1L), calencheck(1L), calendar(1), clocktool(1), cron(8),
X  mail(1), month(1L), monthtool(1L), month2ct(1L), mt2ct(1L),
X  nlock(1L), suntools(1)
X  .SH REFERENCES
X***************
X*** 781,787
X  .SH "SEE ALSO"
X  cal(1), cal2ct(1L), calendar(1), clocktool(1), cron(8),
X  mail(1), month(1L), monthtool(1L), month2ct(1L), mt2ct(1L),
X! nlock(1L), suntools(1), vi(1)
X  .SH REFERENCES
X  An excellent compendium which describes basic terminology of time measurement,
X  methods of astronomical computation, and the convoluted history of calendars:
X
X--- 876,882 -----
X  .SH "SEE ALSO"
X  cal(1), cal2ct(1L), calencheck(1L), calendar(1), clocktool(1), cron(8),
X  mail(1), month(1L), monthtool(1L), month2ct(1L), mt2ct(1L),
X! nlock(1L), suntools(1)
X  .SH REFERENCES
X  An excellent compendium which describes basic terminology of time measurement,
X  methods of astronomical computation, and the convoluted history of calendars:
X*** /tmp/,RCSt1a17008	Fri Dec 15 17:24:08 1989
X--- wpaint.c	Fri Dec 15 17:18:42 1989
X***************
X*** 1,5
X  /*
X!  * $Header: wpaint.c,v 2.2 89/07/19 20:32:38 billr Exp $
X   */
X  /*
X   * wpaint.c
X
X--- 1,5 -----
X  /*
X!  * $Header: wpaint.c,v 2.3 89/12/15 17:18:39 billr Exp $
X   */
X  /*
X   * wpaint.c
X***************
X*** 54,59
X  	fix_current_day();
X  	Save = current;
X  	current.tm_mday -= current.tm_wday; /* Sunday of this week */
X  	fix_current_day();
X  	if (nr_weekdays < 7) {
X  		current.tm_mday++;
X
X--- 54,65 -----
X  	fix_current_day();
X  	Save = current;
X  	current.tm_mday -= current.tm_wday; /* Sunday of this week */
X+ 	if (monday_first)  {
X+ 		if (current.tm_wday == SUN)
X+ 			current.tm_mday -= 7;
X+ 		if (nr_weekdays == 7)
X+ 			current.tm_mday++; /* start on Monday */
X+ 	}
X  	fix_current_day();
X  	if (nr_weekdays < 7) {
X  		current.tm_mday++;
X***************
X*** 127,133
X          c[3] = '\0';            /* Mon Tue Wed Thu Fri */
X          for (i=0; i<nr_weekdays; i++) {
X                  x = startx + i*weekslot_width + (weekslot_width - 2*(font->pf_defaultsize.x+2))/2;
X! 		sprintf(c, "%3.3s", daynames[First.tm_wday + i]);
X                  pw_text(main_pixwin, x, starty-5, PIX_SRC, font, c);
X          }
X          
X
X--- 133,142 -----
X          c[3] = '\0';            /* Mon Tue Wed Thu Fri */
X          for (i=0; i<nr_weekdays; i++) {
X                  x = startx + i*weekslot_width + (weekslot_width - 2*(font->pf_defaultsize.x+2))/2;
X! 		if (monday_first && i == 6)
X! 			sprintf(c, "%3.3s", daynames[SUN]);
X! 		else
X! 			sprintf(c, "%3.3s", daynames[First.tm_wday + i]);
X                  pw_text(main_pixwin, x, starty-5, PIX_SRC, font, c);
X          }
X          
X***************
X*** 135,143
X          rightx = startx + nr_weekdays*weekslot_width + 10;
X  	for (i=0; i<N_SLOTS; i++) {
X  		if (i < n_tslots) {
X! 			sprintf(c, "%2d:%s",
X! 				(START_HOUR+(i/2))%12 == 0 ? 12 : (START_HOUR+(i/2))%12,
X! 				i%2 == 0 ? "00" : "30");
X  		} else if (i == n_tslots) {
X  			sprintf(c, "Notes");
X  		} else {
X
X--- 144,157 -----
X          rightx = startx + nr_weekdays*weekslot_width + 10;
X  	for (i=0; i<N_SLOTS; i++) {
X  		if (i < n_tslots) {
X! 			if (hour24)
X! 				sprintf(c, "%2d:%s",
X! 					START_HOUR+(i/2),
X! 					i%2 == 0 ? "00" : "30");
X! 			else
X! 				sprintf(c, "%2d:%s%s",
X! 					(START_HOUR+(i/2))%12 == 0 ? 12 : (START_HOUR+(i/2))%12,
X! 					i%2 == 0 ? "00" : "30", (START_HOUR+(i/2) < 12 ? "am" : "pm"));
X  		} else if (i == n_tslots) {
X  			sprintf(c, (hour24 ? "Notes" : " Notes"));
X  		} else {
X***************
X*** 139,145
X  				(START_HOUR+(i/2))%12 == 0 ? 12 : (START_HOUR+(i/2))%12,
X  				i%2 == 0 ? "00" : "30");
X  		} else if (i == n_tslots) {
X! 			sprintf(c, "Notes");
X  		} else {
X  			sprintf(c, "     ");
X  		}
X
X--- 153,159 -----
X  					(START_HOUR+(i/2))%12 == 0 ? 12 : (START_HOUR+(i/2))%12,
X  					i%2 == 0 ? "00" : "30", (START_HOUR+(i/2) < 12 ? "am" : "pm"));
X  		} else if (i == n_tslots) {
X! 			sprintf(c, (hour24 ? "Notes" : " Notes"));
X  		} else {
X  			sprintf(c, "     ");
X  		}
X***************
X*** 143,150
X  		} else {
X  			sprintf(c, "     ");
X  		}
X!                 pw_text(main_pixwin, startx-6*font->pf_defaultsize.x, y, PIX_SRC, font, c);
X!                 pw_text(main_pixwin, rightx, y, PIX_SRC, font, c);
X                  y += weekslot_height;
X  	}
X  
X
X--- 157,169 -----
X  		} else {
X  			sprintf(c, "     ");
X  		}
X! 		if (hour24) {
X! 			pw_text(main_pixwin, startx-7*font->pf_defaultsize.x, y, PIX_SRC, font, c);
X! 			pw_text(main_pixwin, rightx, y, PIX_SRC, font, c);
X! 		} else {
X! 			pw_text(main_pixwin, startx-8*font->pf_defaultsize.x, y, PIX_SRC, font, c);
X! 			pw_text(main_pixwin, rightx-font->pf_defaultsize.x, y, PIX_SRC, font, c);
X! 		}
X                  y += weekslot_height;
X  	}
X  
X***************
X*** 155,162
X  
X  	/* display week dates (month, day) */
X          for (i=0; i<nr_weekdays; i++) {
X! 		sprintf(c, "%3.3s %2d",
X! 			monthnames[current.tm_mon], current.tm_mday);
X  		pw_text(main_pixwin, x, y, PIX_SRC, font, c);
X                  x += weekslot_width;
X  		current.tm_mday++;
X
X--- 174,185 -----
X  
X  	/* display week dates (month, day) */
X          for (i=0; i<nr_weekdays; i++) {
X! 		if (day_first)
X! 			sprintf(c, "%2d %3.3s",
X! 				current.tm_mday, monthnames[current.tm_mon]);
X! 		else
X! 			sprintf(c, "%3.3s %2d",
X! 				monthnames[current.tm_mon], current.tm_mday);
X  		pw_text(main_pixwin, x, y, PIX_SRC, font, c);
X                  x += weekslot_width;
X  		current.tm_mday++;
X*** /tmp/,RCSt1a17013	Fri Dec 15 17:24:12 1989
X--- ypaint.c	Fri Dec 15 17:18:46 1989
X***************
X*** 1,5
X  /*
X!  * $Header: ypaint.c,v 2.1 89/05/09 14:20:15 billr Exp $
X   */
X  /*
X   * ypaint.c
X
X--- 1,5 -----
X  /*
X!  * $Header: ypaint.c,v 2.2 89/12/15 17:18:43 billr Exp $
X   */
X  /*
X   * ypaint.c
X***************
X*** 40,45
X  	struct appt_entry appt;
X  	int read_stat;
X  	FILE *apts;
X  
X  	lock_cursors();
X  	/* destory future appts popup, if it exists */
X
X--- 40,46 -----
X  	struct appt_entry appt;
X  	int read_stat;
X  	FILE *apts;
X+ 	int runl;
X  
X  	lock_cursors();
X  	/* destory future appts popup, if it exists */
X***************
X*** 75,81
X  		err_rpt("can't open appointments file", FATAL);
X  
X  	working(FALSE);
X! 	while ((read_stat = get_aentry(apts, &appt)) != EOF) {
X  		if (read_stat)
X  			continue;	/* read error */
X  		if (appt.flags & A_COMMENT)
X
X--- 76,82 -----
X  		err_rpt("can't open appointments file", FATAL);
X  
X  	working(FALSE);
X! 	while ((read_stat = get_aentry(apts, &appt, FALSE)) != EOF) {
X  		if (read_stat)
X  			continue;	/* read error */
X  		if (appt.flags & A_COMMENT)
X***************
X*** 130,139
X  					}
X  				} else {
X  					fix_current_day();
X! 					while (ymd_compare(current, Last) <= 0) {
X! 						busy_today[current.tm_yday]++;
X! 						current.tm_mday += appt.repeat;
X! 						fix_current_day();
X  					}
X  				}
X  			} else {
X
X--- 131,148 -----
X  					}
X  				} else {
X  					fix_current_day();
X! 					if (appt.flags & RUN)
X! 						runl = appt.runlength;
X! 					else
X! 						runl = 1;
X! 					while (ymd_compare(current, Last) <= 0 && runl) {
X! 						if (runl) {
X! 							busy_today[current.tm_yday]++;
X! 							current.tm_mday += appt.repeat;
X! 							fix_current_day();
X! 							if (appt.flags & RUN)
X! 								--runl;
X! 						}
X  					}
X  				}
X  			} else {
X***************
X*** 145,153
X  			}
X  		} else if ((appt.flags & REPEAT) && !(appt.flags & EVERY_SOMEDAY)) {
X  			/* find 1st appt in this year */
X! 			while (ymd_compare(current, First) < 0) {
X! 				current.tm_mday += appt.repeat;
X! 				fix_current_day();
X  			}
X  			while (ymd_compare(current, Last) <= 0) {
X  				busy_today[current.tm_yday]++;
X
X--- 154,170 -----
X  			}
X  		} else if ((appt.flags & REPEAT) && !(appt.flags & EVERY_SOMEDAY)) {
X  			/* find 1st appt in this year */
X! 			if (appt.flags & RUN)
X! 				runl = appt.runlength;
X! 			else
X! 				runl = 1;
X! 			while (ymd_compare(current, First) < 0 && runl) {
X! 				if (appt.flags & RUN)
X! 					--runl;
X! 				if (runl) {
X! 					current.tm_mday += appt.repeat;
X! 					fix_current_day();
X! 				}
X  			}
X  			while (ymd_compare(current, Last) <= 0 && runl) {
X  				if (runl) {
X***************
X*** 149,158
X  				current.tm_mday += appt.repeat;
X  				fix_current_day();
X  			}
X! 			while (ymd_compare(current, Last) <= 0) {
X! 				busy_today[current.tm_yday]++;
X! 				current.tm_mday += appt.repeat;
X! 				fix_current_day();
X  			}
X  		}
X  
X
X--- 166,179 -----
X  					fix_current_day();
X  				}
X  			}
X! 			while (ymd_compare(current, Last) <= 0 && runl) {
X! 				if (runl) {
X! 					busy_today[current.tm_yday]++;
X! 					current.tm_mday += appt.repeat;
X! 					fix_current_day();
X! 					if (appt.flags & RUN)
X! 						--runl;
X! 				}
X  			}
X  		}
X  
X***************
X*** 194,202
X  	  PIX_SRC, bigfont, title);
X  
X  	/* display day names */
X! 	strcpy(buf, "Su Mo Tu We Th Fr Sa    ");
X! 	strcat(buf, "Su Mo Tu We Th Fr Sa    ");
X! 	strcat(buf, "Su Mo Tu We Th Fr Sa");
X  	pw_text(main_pixwin, startx+4, starty-2, PIX_SRC, font, buf);
X  
X  	/* draw months */
X
X--- 215,229 -----
X  	  PIX_SRC, bigfont, title);
X  
X  	/* display day names */
X! 	if (monday_first) {
X! 		strcpy(buf, "Mo Tu We Th Fr Sa Su    ");
X! 		strcat(buf, "Mo Tu We Th Fr Sa Su    ");
X! 		strcat(buf, "Mo Tu We Th Fr Sa Su");
X! 	} else {
X! 		strcpy(buf, "Su Mo Tu We Th Fr Sa    ");
X! 		strcat(buf, "Su Mo Tu We Th Fr Sa    ");
X! 		strcat(buf, "Su Mo Tu We Th Fr Sa");
X! 	}
X  	pw_text(main_pixwin, startx+4, starty-2, PIX_SRC, font, buf);
X  
X  	/* draw months */
X***************
X*** 203,209
X  	monthnr = 0;
X  	yrday = 0;
X  	extra_days = 0;
X! 	startbox = First.tm_wday;
X  	for (row=0; row<4; row++) {
X  		for (col=0; col<3; col++) {
X  			x = startx + 8*ybox_width*col;
X
X--- 230,242 -----
X  	monthnr = 0;
X  	yrday = 0;
X  	extra_days = 0;
X! 	if (monday_first) {
X! 		if (First.tm_wday == SUN)
X! 			startbox = 6;
X! 		else
X! 			startbox = First.tm_wday - 1;
X! 	} else
X! 		startbox = First.tm_wday;
X  	for (row=0; row<4; row++) {
X  		for (col=0; col<3; col++) {
X  			x = startx + 8*ybox_width*col;
END_OF_FILE
if test 44652 -ne `wc -c <'patches05a'`; then
    echo shar: \"'patches05a'\" unpacked with wrong size!
fi
# end of 'patches05a'
fi
echo shar: End of archive 1 \(of 4\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 4 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0