@device(PostScript)
@make(report)

@DefineFont(HeadingFont,
	P=<RawFont "NewCenturySchlbkBoldItalic">,
	B=<RawFont "NewCenturySchlbkBold">,
	I=<RawFont "NewCenturySchlbkBoldItalic">,
	R=<RawFont "NewCenturySchlbkRoman">)
@Counter(MajorPart,TitleEnv HD0,ContentsEnv tc0,Numbered [@I],
          IncrementedBy Use,Announced)
@Counter(Chapter,TitleEnv HD1,ContentsEnv tc1,Numbered [@1. ],
          IncrementedBy Use,Referenced [@1],Announced)
@Counter(Appendix,TitleEnv HD1,ContentsEnv tc1,Numbered [@I. ],
          IncrementedBy,Referenced [@I],Announced,Alias Chapter)
@Counter(UnNumbered,TitleEnv HD1,ContentsEnv tc1,Announced,Alias 
           Chapter)
@Counter(Section,Within Chapter,TitleEnv HD2,ContentsEnv tc2,
          Numbered [@#@:.@1 ],Referenced [@#@:.@1],IncrementedBy
          Use,Announced)
@Counter(AppendixSection,Within Appendix,TitleEnv HD2,
          ContentsEnv tc2,
          Numbered [@#@:.@1 ],Referenced [@#@:.@1],IncrementedBy 
          Use,Announced)
@Counter(SubSection,Within Section,TitleEnv HD3,ContentsEnv tc3,
          Numbered [@#@:.@1 ],IncrementedBy Use,
          Referenced [@#@:.@1])
@Counter(Paragraph,Within SubSection,TitleEnv HD4,ContentsEnv tc4,
          Numbered [@#@:.@1 ],Referenced [@#@:.@1],
          IncrementedBy Use)
@modify(CopyrightNotice, Fixed -1 inch, Flushright)
@Modify(Titlebox, Fixed 3.0 inches)
@Modify(hd1, below .2 inch, facecode B, size 20, spaces kept, pagebreak off)
@Modify(hd2, below .2 inch, facecode B, size 16, spaces kept)
@Modify(hd3, below .2 inch, facecode B, size 12, spaces kept)
@Modify(Description, Leftmargin +20, Indent -20,below 1 line, above 1 line)
@Modify(Tc1, Above .5,  Facecode B)
@Modify(Tc2, Above .25, Below .25, Facecode R)
@Modify(Tc3,Facecode R)
@Modify(Tc4,Facecode R)
@Modify(Itemize,Above 1line,Below 1line)
@Modify(Insert,LeftMargin +2, RightMargin +2)
@Style(Font NewCenturySchoolBook, size 11)
@Style(Spacing 1.1, indent 0)
@Style(leftmargin 1.0inch)
@Style(justification no)
@Style(BottomMargin 1.5inch)
@Style(ChangeBarLocation Right)
@Style(ChangeBars=off)
@libraryfile(stable)
@standardtable(name subscriptions, columns 3, boxed, allcolumns center, 
               topheading center, columnheadings center,
               firstcolumnwidth 1.25inch, othercolumnwidth 2.5inches, flushtop)
@pageheading(immediate)
@pagefooting(left="MIT Project Athena",
center="@value(page)",right="Version A, Jan. 1988")
@begin(Titlepage)
@Begin(Titlebox)
@begin(MajorHeading, size 36, Flushright)
Essential Zephyr
@end(Majorheading)
@blankspace(3 lines)
@begin(format, size 14, flushright)
Mark W. Moormans
MIT Project Athena
Version A
June 13, 1988
@end(format)
@end(titlebox)
@CopyrightNotice(Massachusetts Institute of Technology)
@Set(page=-1)

@end(titlepage)
@blankspace(6.5 inches)

Version A, June, 1988: Mark Moormans.  Original user's document
for Zephyr, Project Athena's electronic notification service.
Includes discussion of Zephyr windowgram client, subscribing to
Zephyr, and the following Zephyr commands:  zaway, zctl, zleave,
zlocate, znol, zwgc, zwrite.

@newpage
@Set(Page = 1)

@Chapter(Introduction)
@label(intro)

This is a brief introduction to @b[Zephyr], the Project Athena notice
transport and delivery system.  This system is used to get small
quantities of time sensitive information efficiently from one client or
server on a network to another.  The advantage of using Zephyr
over electronic mail between users is that it accomplishes the highest
possible fan-out (i.e. client to server ratio) while maintaining both
network and server performance.  

Zephyr serves two main functions.  The first is immediate and
noticeable communication with other online users.  It's second
function is as a message notifier for various systems and servers
(such as ln03 printers and operations system maintenance).  There is
one main catch to remember in using Zephyr.  @i(Electronic
communication with Zephyr is only possible when both sender and
recipient have activated Zephyr on their workstations and are logged in
@p[simultaneously].)

@Chapter(Getting Started)
@label(start)

There are several programs that comprise the backbone of Zephyr, most of
which are infrequently used (some almost never as they are automatic),
but which nevertheless provide some useful information about the
mechanics of getting started using Zephyr.

@section(Zephyr Windowgrams)
@label(window)
The primary client that Zephyr uses is @b[zwgc], or the zephyr
windowgram client.  It is responsible for displaying Zephyr notices in
a pleasing format and allows the user to browse through previous
messages.  @b[zwgc] is automatically started at login and contains the
essential `stuff' needed to activate Zephyr on your workstation.  This
`stuff' includes the program @b[zhm], the HostManager client program
which creates the essential link between Zephyr servers and users.
One important function of @b[zhm] is to ensure that
Zephyr notices reach a server, and @b[zhm] will search for a new one
if the primary server vanishes.
@comment(talk about zwgc browser and windowgrams)

@Section(Subscribing to Different Notices)
@label(subscribe)

In order to receive a certain type of electronic notification from
Zephyr, you must first be @i(subscribed) to that type.  Subscriptions
work very much like real magazine subscriptions; you get to decide
which ones you want to be delivered to your terminal.  Every Zephyr
subscription consists of three specifications: @i(class, instance) and
@i(recipient).  @i[Class] describes the general subject of the
message; the @i[instance] is a subdivision of the class used to narrow
down this subject; and @i[recipient] is the username to which the
particular kind of message will be sent.  The recipient field defaults
to your username, although you may also subscribe to recipient
`@b[*]'.  A typical subscription might look like this: 
@example(Class message instance personal recipient user@@ATHENA.MIT.EDU)
indicating that the user is subscribed to personal messages addressed
to him.

Subscriptions are handled through the @b[zctl] program, which is short
for Zephyr control.  @b[zctl] allows the user to control the type of
messages that can be displayed on his workstation.  It is used to
subscribe the user to different notice types and then to save the
subscriptions in a file (default @i[$HOME/.zephyr.subs]).  To use this
program, just type:

@example(zctl)
and it should respond with
@begin(example)
ZCTL version 0.1 - Type '?' for a list of commands.

zctl:
@end(example) 

You are now ready to execute any number of @b[zctl] commands.  Each
user is given a set of default subscriptions in a file in his home
directory called @b[.zephyr.subs].  To list these, just use the @b[list]
command while in @b[zctl].  If you only have one or two simple changes
to make to your subscriptions, you can use any of the commands on the
initial @b[zctl] line without actually entering the @b[zctl] program.
For instance, if you want to subscribe to messages that are Class
@i[message] and instance @i[urgent], simply type:

@example(zctl sub message urgent) 
Note that the command @b[sub] only temporarily subscribes you for the
duration of your login, whereas the command @b[add] will add the new
subscription to your @i[$HOME/.zephyr.subs] file so that you will be
subscribed again the next time you log in.

The following is a list of all the available classes and instances
to which you may currently subscribe:
@comment(make a table explaining each for what they are)


@begin(subscriptions, BoxTM 2points, BoxBM 2points, BoxRM 1point, BoxLM 1point)
@tableID(subscriptions)
@tableheading(immediate, rowformat subscriptionstopheading,
              line 'SUBSCRIPTIONS')
@tableheading(immediate, rowformat subscriptionscolumnheadings,
              line 'CLASS@\INSTANCE@\SYNOPSIS')

Message@\Personal@\user to user messages

Message@\Urgent@\urgent user messages

Message@\Weather@\weather every 30 min

Message@\Chime@\chimes on the hour

Message@\Fortune@\fortune every 30 min

Message@\Zippy@\zippy quote every 30 min

Message@\*@\all instances of `Message'

Syslog@\@i[machinename]@\system messages

Mail@\pop@\mail messages

Mail@\popret@\zmailnotify messages

Discuss@\@i[machinename].MIT.EDU:@i[pathspec]@\discuss meetings

Login@\@i[username@@realm]@\login notifications

Filserv@\@i[machinename].MIT.EDU@\shutdown messages

Filserv@\@i[machinename:hesiodname]@\filsys messages

@end(subscriptions)

@Chapter(Basic Features)
@label(basic)
The following are synopses of the basic features of zephyr.  Athena
hopes to continually add to these commands and to the development of
Zephyr software in the future.

@Section(Zwrite)
@label(zwrite)
The simplest and most commonly used command of Zephyr is @b[zwrite].
@b[Zwrite] enables you to send windowgram messages to any other user,
@i[as long as you are both logged on simultaneously.]  To zwrite to
someone, just type:

@begin(example)
zwrite username
@end(example)

If the person you are writing to is not currently logged in,
@b[zwrite] will notify you before you begin typing your message.
Otherwise @b[zwrite] will respond with
@begin(example, size 10)
Type your message now.  End with control-D or a dot on a line by itself.
@end(example)

Just type in your message, ending it on a separate line with a
@b[CTRL-d] or a period.  @b[zwrite] will allow you to write messages
of up to eight lines of approximately eighty characters each.  If you
want to @b[zwrite] the same message to a number of different users,
just include their names, separated by spaces on the original
@b[zwrite] command line.

@Section(Zlocate and Znol)
@label(zlocate)
Another nice feature of Zephyr is that it allows you to locate 
other users who are logged on and using Zephyr during your
login session.  To locate someone, just type
@example(zlocate username)
and if that user is subscribed and logged in, @b[zlocate] will respond
with
@example(MACHINE.MIT.EDU        ttyv0    Wed Mar 16 16:29:09 1988)
telling you where and when that user logged in.

@b[zlocate] is similar to @i[zwrite] in that if you want to locate
multiple users, you just add their names to the original command line
separated by spaces.

In addition to zlocate, there is a command @b[znol] which provides a
way for you to be notified when people of interest to you log in or
out.  It causes a windowgram message to appear on your screen for
every person specified in a namelist in the default file @i[.anyone]
in your home directory.  To execute @b[znol], just type:
@example[znol]
and for each person in your @i[.anyone] file, it will respond with
pertinent information, including the where and when each person
last logged in, as follows:
@example(username: MACHINE.MIT.EDU     ttyv0    Thu Feb  4 14:24:45 1988)

@Section(Zaway)
@label(zaway)
@b[zaway] is a program that provides a way for you to automatically
send replies when other people contact you using @i[zwrite].  Using
@b[zaway] does not prevent you from actually receiving windowgram
messages from other users, but it does provide a way to let other
users know when you are away from your terminal.  @b[zaway] uses the
default message file @i[.away] in your home directory to describe what
responses should be sent to which senders.  The general format of this
file is:
@begin(example)
>name
>name 
message
>name
message
@end(example)
There are two special names:  @b[*] indicates that the following
message should be sent to all senders and @b[%] indicates that the
following message should only be sent if the user name has not matched
yet.  If you don't choose to personalize your @i[.away] file, the
default message @b[zaway] uses is:
@begin(example)
I'm sorry, but I am currently away from the terminal and am not 
able to receive your message.
@end(example)
If a user name does not match any of those listed in the file and no
@b[*] or @b[%] field is specified, no return message will be sent. 

A possible @b[zaway] file might look like this:
@begin(example)
>loree
>mikem
Hi there guys!  I'm in the other room right now.
I'll be back in 5 minutes or so.
>jtuser
Sorry, but I'm gone for the day...
>%
Hello... I'm not sure who you are.  I'll be back soon.
>*
This message comes to you compliments of zaway!
@end(example)

Note that the final "compliments" message will be included in all
responses, whereas the "I'm not sure" message will only be included in
responses to messages that are not from @i[loree], @i[mikem] or
@i[jtuser]. 

@Section(Zleave)
@label(zleave)
@b[zleave] is the Zephyr equivalent of an alarm clock.  To set it, you
just type @b[zleave] followed by the time, in hours and minutes, that
you want to leave.  For example, if you type:
@example(zleave 0530)
@b[zleave] will respond with
@example(Alarm set for Thu Feb  4 17:30:00)
Note that the time of day is set in the form @i[hhmm] where @i[hh] is
a time in hours on a 12 or 24 hour clock.  All times are converted to
a 12 hour clock and assumed to be in the next 12 hours.

@b[zleave] will remind you with a windowgram message  5 minutes and 1
minute before the actual time, at the time, and every minute
thereafter.  The only way to get rid of it is to log off or to use the
@i[cancel] option with the @b[zleave] command.

@Chapter(Command Summary)
@label(command)
The following is a brief summary of the basic commands of Zephyr.  If
you want further information on a command, consult Project Athena's
online documentation using the @b[man] command followed by the Zephyr
command you desire to know more about.

@blankspace(.3inches)
@begin(Format,Font Headingfont, Facecode R)
@Tabset(2inches, 5inches)
@b[Command@\@=Brief Description@\@>Section]
@&
zaway@\Auto-reply when away from terminal@\@>@ref[zaway]
zctl@\Subscribe to message types@\@>@ref[subscribe]
zleave@\Zephyr alarm clock@\@>@ref[zleave]
zlocate@\Locate another online user@\@>@ref[zlocate]
znol@\Zephyr notify on login@\@>@ref[zlocate]
zwgc@\Start a windowgram client@\@>@ref[window]
zwrite@\Send a windowgram message@\@>@ref[zwrite]
@end(Format)

