[net.wanted] Appointments Calendar Program Wanted

furuta (10/19/82)

Andy,
	Here at your very own site, uw-beaver, is a program called uwcal
which has much of the functionality you want.  Specifically, it lets you
schedule and recall appointments but doesn't have the "waking up in the
middle of the night to send you mail" behavior.  It's a port from VMS,
written in VMS's Pascal.
	Personally, I don't trust computers to keep my appointments.  They
have nasty tendencies to garbage disks, etc.  You may remember seeing half
of the faculty wandering aimlessly in the halls the last time this happened.

			--Rick

thomas (10/20/82)

For people who want a "waking up in the middle of the night to send mail"
program, have you looked into the standard Unix program "calendar"?

Try it, you might like it. 

=Spencer

mclure@sri-unix (10/21/82)

#R:uw-beave:-13100:sri-unix:2700001:000:6738
sri-unix!mclure    Oct 20 14:32:00 1982

We have written such a beast, called Remind.  It's sort of a
replacement for At(1) and Calendar(1) but has a nice user interface
which the former cannot claim.  Basically, you can schedule batch jobs,
terminal messages, mail messages, or combinations thereof multiples of
hours, days, months, years, etc in advance.  Also, there's an
expiration count, to facilitate automatic resubmitting.

Here's the man page.  If enough people are interested,
I'm willing to post the sources.

.TH REMIND LOCAL
.SH NAME
remind \- a reminder and batch utility
.SH SYNOPSIS
.B remind
.SH DESCRIPTION
.I Remind
is intended to replace
.I at
(1)
and
.I calendar
(1).
It allows running of command files at later times and
provides electronic mail and terminal message reminder capabilities,
and a much better user interface.
.PP
.I Remind 
prompts with 'REMIND>'. There are several commands:
.nf

	create date&time [method count [interval multiplier]]
	       To: [address list]
	       Subject: [subject]
	       Text/Commands:
	       [user data]
	delete reminder#
	headers
	modify reminder# what newvalue
	quit
	type   reminder#
.fi
.PP
The
.I create
command enters a new reminder into the user's database
(contained in his $HOME/.remind) and the master queue. The first
argument is the date and time of the reminder. A legal example
is 12-Apr-83 6:00. If the date is left out, the time is assumed
to be today. If the time is left out, it is assumed to be midnight
on the specified date. In all instances, dates and times must be
in the future. Any reasonable date and time format is legal.
The reminder will be processed at the specified date and time.
The second field is
the method to use. There are four: execution, mail, tty, ttymail.
Execution is batch-mode. The text of the reminder will be handed
to a shell with the uid/gid of the sender at the specified time.
Mail means the reminder will be sent to the user's mailbox $HOME/.mail.
Tty means the subject and text of the reminder will be sent to the
user's logged-in jobs if he is the system on at the specified time.
Ttymail is similar to tty except that if the user is not logged in,
mail will be sent instead. The count field is the number of times
the reminder will be fired before expiring. The interval field indicates
the interval between firings. There are six: minute, hour, day, week,
month, year. The multiplier field multiplies the interval to obtain
the actual interval to use. For example, specifying an interval
of week and a multiplier of 2 means that the reminder will be processed
every two weeks for a total of count times. The to field is the receiver
of the reminder. In the case of execution, this is meaningless and it
is not prompted for. For mail, tty, and ttymail any valid list of
users separated by commas is expected. For example: 'sad, mclure, 
larson@sri-kl' would be a legal list for mail. For tty, and ttymail
only local addresses are currently allowed.
The subject field is a brief
description indicating the topic of the reminder. For mail, this will
become the subject field of the message. For terminal sends, this
will be the first part of the send, the text being the latter. For
execution, the subject provides a convenient way of labeling the batch
job for easy reference. The text/commands field is the main body of the
reminder. It is ended by an EOF.
Typing carriage return at any point in the main command line of a create
will get defaults: method = mail, interval = minutes, count = 1,
multiplier = 1.
.PP
The
.I delete
command removes a reminder from the user's database and the
master queue. It takes one argument, a number indicating which reminder
to remove.
.PP
The
.I headers
command prints the headers of the reminders in the user's
database, one per line. They are listed in order of firing time with
the count, subject, interval, etc. These should be fairly obvious. The
only cryptic thing is something like '3 x (2 minute)' which means that
the reminder is sent every two minutes for a total of 3 firings.
Execution is abbreviated to 'exec', ttymail to 'ttym'.
.PP
The
.I modify
command changes attributes of an existing reminder. It expects three
arguments. The first is the number of the reminder to modify. The second
is the field of the reminder to modify: date&time, method, interval,
multiplier, text&cmds, etc. In the case of text&cmds, this will be
prompted for on later lines. The third field is the new value for that
field.
.PP
The
.I quit
command exits the program.
.PP
The
.I type
command displays a reminder. It expects one argument, the
reminder number to display.
.PP
.I Remind
uses the
.I mu
command parser which is similar to the DEC TOPS-20 command parser.
Control-U erases the command line. Control-R refrreshes the command
line. Control-W erases the current field. Delete erases the last
character. Control-L blanks the screen and does a control-R. A
question-mark will elicit some sort of help response.
See the documentation about
.I mu
(1) for more information about the parser. All date&time and subject fields on
command lines must be terminated with escape or carriage-return. Typing
escape will provide a noise word indicating what the program expects
for the next field. If there is no next field, the program will wait
for confirmation, a carriage-return.
Command line fields in
.I create
and
.I modify
may be terminated with escape, space, or carriage
return except for subject and date&time
with an escape or carriage return. The reason for this restriction
is that fields which contain embedded spaces (subjects, date&time, etc.)
obviously cannot be terminated with spaces.
.PP
When
.I remind
is run by the super-user, it becomes a daemon, sleeping until
work needs to be done and processing reminders and batch executions.
When the computer is booted, a daemon
is started.
.PP
Several commands are available to
.I remind
wizards only:
.nf

	build           rebuilds new master queue file, pawing over
                        the filesystem
	single user     inserts a single users pointers into the master
                        queue file
	zap             erases the master queue file
.fi
.SH FILES
.nf
$HOME/.remind           user's bin file, sorted by firing date
/usr/lib/remind.master  global pointers to user reminders, sorted also
/usr/lib/remindlog      log of daemon actions
/etc/utmp               lists who is on the system, for terminal messages
/dev/tty??              terminal devices for messages
/usr/bin/send           for sending mail
.fi
.SH SEE ALSO
mu(1), send(1)
.SH DIAGNOSTICS
Mostly self-explanatory. 
.SH AUTHOR
.nf
Stuart M. Cracraft
Arpanet: mclure@sri-unix
UUCP:    ucbvax!menlo70!sri-unix!mclure
US Mail: 333 Ravenswood Avenue
	 SRI International
	 Menlo Park, Calif
	 94025