MULTICS TECHNICAL BULLETIN MTB-659-01
To: MTB Distribution
From: Jim Lippard
Date: July 10, 1984
Subject: message facility
This MTB describes plans for the reimplementation of the Multics
message facility. This reimplementation is based around a
message_facility_ subroutine which will allow programs such as
emacs, xmail, and xservice to handle incoming interactive
messages without stepping on each other.
Comments and questions should be sent to the author:
by Multics mail:
Lippard.Multics on System M or MIT-Multics
via forum:
>site>forum>Message_Facility.forum (msgs)
or by telephone:
(602) 862-6641 or HVN 357-6641
_________________________________________________________________
Multics Project working documentation. Not to be reproduced or
CONTENTS
Page
Problems in the existing message
facility . . . . . . . . . . . . . . 4
Proposed changes . . . . . . . . . . . 5
Changes to accept_messages . . . . . . 5
accept_messages . . . . . . . . . . 7
Changes to delete_message and
print_messages . . . . . . . . . . . 11
delete_message . . . . . . . . . . 12
print_messages . . . . . . . . . . 15
Changes to the last_message active
functions . . . . . . . . . . . . . . 18
Changes to send_message . . . . . . . 19
send_message . . . . . . . . . . . 20
Old commands to be deleted . . . . . . 24
New commands . . . . . . . . . . . . . 25
accepting . . . . . . . . . . . . . 26
last_message_destination . . . . . 27
message_status . . . . . . . . . . 28
Implementation of message_facility_ . 30
Alarm and wakeup handlers . . . . . 34
message_facility_ . . . . . . . . . 35
get_next_msgf_mbx_ptr . . . . . 35
get_msgf_mbx_ptr . . . . . . . . 35
free_msgf_mbx_ptr . . . . . . . 36
get_wakeup_state . . . . . . . . 36
set_wakeup_state . . . . . . . . 37
get_mbx_path . . . . . . . . . . 37
get_prefix . . . . . . . . . . . 38
set_prefix . . . . . . . . . . . 38
get_message_format . . . . . . . 39
set_message_format . . . . . . . 40
get_alarm_handler . . . . . . . 40
set_alarm_handler . . . . . . . 41
get_wakeup_handler . . . . . . . 41
set_wakeup_handler . . . . . . . 42
get_last_message_info . . . . . 43
get_current_message_info . . . . 44
get_msg_array_ptr . . . . . . . 45
read_message . . . . . . . . . . 46
set_seen_switch . . . . . . . . 47
send_message . . . . . . . . . . 48
send_message_access_class . . . 49
CONTENTS (cont)
Page
delete_message . . . . . . . . . 51
Changes needed in other parts of the
system . . . . . . . . . . . . . . . 52
error_table_ . . . . . . . . . . . 52
ring 1 mailbox primitives . . . . . 52
The current message facility is sadly lacking in many areas,
as well as being full of bugs. Most of the message facility
commands are written into one large program, making it difficult
to maintain.
This MTB proposes that the Multics message facility be
reimplemented around a central subroutine called
message_facility_, with the current commands broken into separate
modules for maintainability. The message_facility_ subroutine
should also allow temporary interception of messages for such
things as emacs, xmail, and xservice.
PROBLEMS IN THE EXISTING MESSAGE FACILITY
The existing message facility is plagued by problems such as
many obscure bugs and unmaintainability of the code. In
addition, there is a need for a way for applications to determine
on which mailboxes messages are being accepted, to intercept them
temporarily, and reset things the way the were when it took over.
The -call control argument to accept_messages is not sufficient
because there is still no way for the procedure being called to
know from which mailboxes to expect messages. Another problem
with -call is that if the reminder feature is being used, the
call string will be executed once for each undeleted message in
the mailbox every time the alarm timer goes off.
PROPOSED CHANGES
Of primary importance in changing the message facility is
fixing the bugs. Together with adding subroutine interfaces and
adding new features, the best way to take care of this is to
start over from scratch, building the message facility commands
on top of a message_facility_ subroutine (described later in this
document). Information such as on which mailboxes messages are
being accepted must be maintained so that other applications can
use this information to intercept messages.
It is also desirable that all of the message facility
commands understand mail table entries and control arguments
accepted by the mail system. The send_message command should
accept mail system addresses (with exceptions discussed later)
and the other commands should accept mail system mailbox
specifiers.
CHANGES TO ACCEPT_MESSAGES
A -no_print (-npr) control argument will be added to
override -print.
The -pathname (-pn) control argument will be made obsolete,
retained but undocumented.
If messages are accepted on a mailbox which does not exist
(and it is not the user's default mailbox), the user will be
queried as to whether or not it should be created. Currently the
default mailbox is created, without comment. A comment about the
mailbox creation should be given unless -brief (-bf) is given.
The short name -pfx is added to -prefix. The -short_prefix
(-shpfx) and -no_short_prefix (-nshpfx) control arguments are
added. -short_prefix gives the current behavior and is the
default. -no_short_prefix causes the prefix to be printed only
for messages which are not printed in short format (i.e., the
previous message was from the same sender, with the same comment
field, on the same date, within 5 minutes). Use of
-no_short_prefix implies -short.
The names of -hold and -no_hold will be changed to
-hold_messages (-hdmsg) and -no_hold_messages (-nhdmsg). New
control arguments -hold_notifications (-hdnt) and
-no_hold_notifications (-nhdnt) will be added.
Use of the -time control argument will assume
-hold_messages, since -time is useless without it.
Message numbers will be consecutive per-mailbox, instead of
consecutive per-process.
The text of mail notifications will be printed, rather than
just printing "You have mail". This will allow send_mail to put
mail subjects in the notifications, and allow for a way to
distinguish computer-generated messages (such as answering
service messages, IO Daemon notifications, etc.) from regular
interactive messages. Only messages being held change the
information returned by last_message, last_message_sender, and
last_message_time.
If the user is accepting messages on a mailbox that is not
the default, the entry name of the mailbox will be printed when
messages are received to avoid confusion.
_______________ _______________
accept_messages accept_messages
_______________ _______________
ACCEPT_MESSAGES
SYNTAX AS A COMMAND
am {mbx_specification} {-control_args}
FUNCTION
initializes or reinitializes the user's process for accepting
both messages that are sent by the send_message command and
notifications of the form "You have mail." that are sent by the
send_mail command.
ARGUMENTS
mbx_specification |
specifies the mailbox on which messages are to be accepted. |
If not given, the user's default mailbox |
(>udd>Project>Person>Person.mbx) is used. |
LIST OF MAILBOX SPECIFICATIONS |
-mailbox path, -mbx path |
specifies the pathname of a mailbox. The suffix ".mbx" is |
added if necessary. |
-user STR |
specifies either a user's default mailbox or an entry in the |
system mail table. |
-save path, -sv path |
specifies the pathname of a savebox. The suffix ".sv.mbx" is |
added if necessary. |
-log |
specifies the user's logbox and is equivalent to: |
-mailbox >udd>Project_id>Person_id>Person_id.sv.mbx |
STR |
is any non-control argument and is first interpreted as: |
-mailbox STR |
if no mailbox is found, this specification is then interpreted |
as: |
-save STR |
if no savebox is found, this specification is then interpreted |
as: |
-user STR |
CONTROL ARGUMENTS
_______________ _______________
accept_messages accept_messages
_______________ _______________
-brief, -bf
prevents accept_messages from informing the user that it is
creating a mailbox, and prints messages in short format.
-call {cmdline}
when the message is received, instead of printing it in the
default format, accept_messages calls the command processor
with a string of the form:
cmdline number sender time message {path}
where:
cmdline
is any Multics command line; cmdline must be enclosed in
quotation marks if it contains blanks or other command
language characters.
number
is the sequence number of the message, assigned when the
| -hold_messages control argument is used; otherwise, number
is 0.
sender
is the User_id of the person who sent the message.
time
is the date-time the message was sent.
message
is the actual message sent.
path
is the pathname of the mailbox to which the message was
sent. If the message was sent to the default mailbox, path
is omitted.
To reverse the effect of a previously specified -call control
argument, the user can specify the -call control argument with
| no cmdline argument. The maximum length of cmdline is 512
| characters.
-flush DT
discards messages sent before the specified date-time, where
DT is a string acceptable to the convert_date_to_binary_
subroutine (described in the MPM Subroutines). This control
argument is intended to be used by operators and consultants.
_______________ _______________
accept_messages accept_messages
_______________ _______________
-long, -lg
precedes every message printed by the sender's Person_id and
Project_id. This is the default.
-hold_messages, -hdmsg |
holds messages until explicitly deleted by the delete_message
command. Messages printed when the -hold_messages control |
argument is in effect are preceded by an identifying number.
-no_hold_messages, -nhdmsg |
reverts the -hold_messages control argument. (Default) |
-hold_notifications, -hdnt |
causes notifications to be held in the mailbox after being |
printed. This implies -notifications. |
-no_hold_notifications, -nhdnt |
causes notifications to be deleted after being printed. |
(Default) |
-notifications, -nt |
causes notifications to be printed. (Default) |
-no_notifications, -nnt |
causes notifications to be deleted as they are received. This |
implies -no_hold_notifications. |
-prefix STR, -pfx STR |
causes STR to be printed before printing a message from this
mailbox. STR can be up to 12 characters long and can contain
the ioa_ control strings ^/, ^| and ^- if desired.
-short_prefix, -shpfx |
specifies that the prefix is printed when messages are printed |
in short format. (Default) |
-no_short_prefix, -nshpfx |
specifies that the prefix is not printed when messages are |
printed in short format. |
-print, -pr
prints all messages that were received since the last time the
user was accepting messages.
-no_print, -npr |
suppresses printing of old messages. (Default) |
-short, -sh
precedes consecutive messages from the same sender by "=:"
instead of the Person_id and Project_id.
_______________ _______________
accept_messages accept_messages
_______________ _______________
-time N, -tm N
prints undeleted messages every N minutes, preceded by a
message of the form "You have X messages" where X is the
number of undeleted messages. If N equals 0, time mode is
| reset. Use of this control argument implies -hold_messages.
NOTES
The user should not give conflicting control arguments in the
same invocation of the command (i.e., -long and -short or -long
and -brief).
A default mailbox is created automatically the first time a user
issues either print_mail, read_mail, accept_messages, or
print_messages. The default mailbox is:
>udd>Project_id>Person_id>Person_id.mbx
Messages sent when the user is not logged in or when the user is
deferring messages (see the defer_messages command) are saved in
the mailbox and can be read later by invoking the print_messages
command. The send_mail command stores mail in the same mailbox.
It is not advisable for several users to share the same mailbox.
At any time, only one process can be accepting messages from a
given mailbox. If a second process attempts to accept messages
on a mailbox, If a second process accepts messages on a mailbox,
it will take over the accept_messages function. The first
process will receive no indication that messages are being routed
to the second process.
If the second process then logs out or is destroyed, the messages
do not revert to an earlier process. Thus, a user who sends a
message to that mailbox will be informed that the addressee is
currently not accepting messages or is not logged in.
| It is possible to accept messages on more than one mailbox at a
| time, and to accept messages on a mailbox other than the default.
| If a mailbox other than the default is to be used, and it does
| not exist, then the accept_messages command queries the user as
| to whether or not it should be created. When messages are
| printed from a mailbox other than the default, the mailbox is
| always identified.
CHANGES TO DELETE_MESSAGE AND PRINT_MESSAGES
The delete_message and print_messages commands will add the
control arguments -match, -exclude, -from (-fm), -comment (-com),
-before, and -after to allow selection of messages to be
processed. Both will also accept messages of ranges, and the
keywords "all", "first", and "last".
The -pathname (-pn) control argument is obsolete and will be
retained but undocumented.
The header printed by the print_messages command when reading
a mailbox to which the user only has "o" permission will now say
"You have N message(s) in PATH" (with "messages" properly plural
or singular) instead of "Messages from yourself".
Add -brief (-bf) to delete_message to suppress an error
message when no messages were deleted. Add -long (-lg) to
override.
The user's default mailbox will be created by print_messages
if it does not already exist. An appropriate comment will be
printed unless -brief is given.
The delete_message command will not delete messages which
have not yet been marked as seen in the current process. This
prevents "dlm -a" from deleting a message which has just arrived
but has not yet been printed on the terminal. A -force (-fc)
control argument is provided to allow deletion of selected
messages whether or not they have been marked as seen.
Message numbers will be assigned to messages read from
mailboxes to which a user has "o" but not "d" extended access.
These message numbers will be understood by print_messages and
delete_message. Currently, delete_message cannot be used on a
mailbox unless the user has "d" extended access.
The current behavior for mailboxes to which the user does
have "d" extended access will remain the same: if the user is
not holding messages on the mailbox, they will be deleted after
being printed by print_messages, and no message numbers will be
assigned.
The print_messages command, when there are no messages in
the mailbox, will print an appropriate error message instead of
being silent. The -brief (-bf) control argument is added to
suppress this message.
The print_messages command, when used on a mailbox to which
the user does not have "d" extended access, will no longer delete
the user's own messages after printing them.
______________ ______________
delete_message delete_message
______________ ______________
DELETE_MESSAGE
SYNTAX AS A COMMAND
| dlm msg_specs {mbx_specification} {-control_args}
FUNCTION
deletes a message sent by the send_message command and saved in a
| mailbox with the -hold_messages control argument to the
accept_messages command. (See the accept_messages command for
more details.)
ARGUMENTS
| msg_specs
| is one or more numbers or ranges. Numbers are as printed by
| the print_message command when accept_messages -hold_messages
| is in effect. Ranges are of the form N:M, where N<=M and both
| N and M are valid message numbers. The keywords "first" and
| "last" may also be used as message numbers, and the keyword
| "all" may be used as a range (equivalent to "first:last").
| These keywords have the short names "f", "l", and "a",
| respectively.
| mbx_specification
| specifies the mailbox from which messages are to be deleted.
| If not given, the user's default mailbox
| (>udd>Project>Person>Person.mbx) is used.
| LIST OF MAILBOX SPECIFICATIONS
| -mailbox path, -mbx path
| specifies the pathname of a mailbox. The suffix ".mbx" is
| added if necessary.
| -user STR
| specifies either a user's default mailbox or an entry in the
| system mail table.
| -save path, -sv path
| specifies the pathname of a savebox. The suffix ".sv.mbx" is
| added if necessary.
| -log
| specifies the user's logbox and is equivalent to:
| -mailbox >udd>Project_id>Person_id>Person_id.sv.mbx
| STR
| is any non-control argument and is first interpreted as:
______________ ______________
delete_message delete_message
______________ ______________
-mailbox STR |
if no mailbox is found, this specification is then interpreted |
as: |
-save STR |
if no savebox is found, this specification is then interpreted |
as: |
-user STR |
CONTROL ARGUMENTS
-all, -a
deletes all messages from the mailbox.
-after DATE_TIME |
causes only messages sent after DATE_TIME to be deleted. |
-before DATE_TIME |
causes only messages sent before DATE_TIME to be deleted. |
-brief, -bf |
suppress error message printed when no messages were deleted. |
-long, -lg |
print error messages when no messages were deleted. (Default) |
-comment STR, -com STR |
causes only messages with comment fields containing STR to be |
deleted. |
-from STR, -fm STR |
causes only messages sent from STR to be deleted. STR may be |
of the form Person.Project, Person, or .Project. |
-force, -fc |
causes selected messages to be deleted even if unseen. |
-no_force, -nfc |
prevents deletion of unseen messages. (Default) |
-match STR |
causes only messages with text containing STR to be deleted. |
-exclude STR |
causes only messages with text not containing STR to be |
deleted. |
-messages, -msg |
causes only regular messages (non-notifications) to be |
deleted. |
______________ ______________
delete_message delete_message
______________ ______________
| -no_messages, -nmsg
| overrides -messages.
| -notifications, -nt
| causes only notifications to be deleted.
| -no_notifications, -nnt
| overrides -notifications.
NOTES
If no mailbox is specified, the user's default mailbox is
assumed. For a description of the mailbox, refer to the
accept_messages and print_mail commands.
______________ ______________
print_messages print_messages
______________ ______________
PRINT_MESSAGES
SYNTAX AS A COMMAND
pm {msg_specs} {mbx_specification} {-control_args} |
FUNCTION
prints any interprocess messages that were received (and saved in
the user's mailbox) while the user was not accepting messages,
not logged in, or accept_messages -hold_messages was in effect. |
ARGUMENTS
msg_specs |
is one or more numbers or ranges. Numbers are printed before |
each message when accept_messages -hold_messages is in effect. |
Ranges are of the form N:M, where N<=M and both N and M are
valid message numbers. The keywords "first" and "last" may
also be used as message numbers, and the keyword "all" may be
used as a range (equivalent to "first:last"). These keywords
have the short names "f", "l", and "a", respectively.
mbx_specification
specifies the mailbox from which messages are to be printed.
If not given, the user's default mailbox
(>udd>Project>Person>Person.mbx) is used.
LIST OF MAILBOX SPECIFICATIONS
-mailbox path, -mbx path
specifies the pathname of a mailbox. The suffix ".mbx" is
added if necessary.
-user STR
specifies either a user's default mailbox or an entry in the
system mail table.
-save path, -sv path
specifies the pathname of a savebox. The suffix ".sv.mbx" is
added if necessary.
-log
specifies the user's logbox and is equivalent to:
-mailbox >udd>Project_id>Person_id>Person_id.sv.mbx
STR
is any non-control argument and is first interpreted as:
-mailbox STR
______________ ______________
print_messages print_messages
______________ ______________
if no mailbox is found, this specification is then interpreted
as:
-save STR
if no savebox is found, this specification is then interpreted
as:
-user STR
CONTROL ARGUMENTS
-all, -a
prints all messages, including those held by -hold_messages
mode (see accept_messages). This is the default.
| -after DATE_TIME
| causes only messages sent after DATE_TIME to be printed.
| -before DATE_TIME
| causes only messages sent before DATE_TIME to be printed.
| -brief, -bf
| suppresses the message "You have no messages" when the mailbox
| is empty.
-call CMDLINE
for each message, instead of printing calls the command
processor with the line:
CMDLINE number sender time message {path}
For more details, see the accept_messages command.
| -comment STR, -com STR
| causes only messages with comment fields containing STR to be
| printed.
| -from STR, -fm STR
| causes only messages sent from STR to be printed. STR may be
| of the form Person.Project, Person, or .Project.
-last, -lt
reprints only the latest message received.
-long, -lg
prints the sender and date-time of every message, even when
the same for two consecutive messages.
| -match STR
| causes only messages with text containing STR to be printed.
| -exclude STR
| causes only messages with text not containing STR to be
| printed.
______________ ______________
print_messages print_messages
______________ ______________
-messages, -msg |
causes only regular messages (non-notifications) to be |
deleted. |
-no_messages, -nmsg |
overrides -messages. |
-notifications, -nt |
causes only notifications to be deleted. |
-no_notifications, -nnt |
overrides -notifications. |
-new
when accept_messages -hold_messages mode is in effect, prints
only those messages that have not been printed before. The
default is to print all held messages.
-short, -sh
prints messages as with accept_messages -short, omitting
redundant sender names in favor of the prefix "=:". This is
the default.
NOTES
Messages are deleted after they are printed unless the
-hold_messages argument was given to the accept_messages command.
The "last" message remains available for the life of the process
or until redefined by a new message.
If messages are deferred, it is a good practice to print out
pending messages periodically.
A default mailbox is created automatically the first time a user |
issues either print_mail, read_mail, accept_messages, or |
print_messages. The default mailbox is: |
>udd>Project_id>Person_id>Person_id.mbx |
For a description of the mailbox, refer to the accept_messages
and print_mail commands. See also the active functions
last_message, last_message_sender, and last_message_time.
CHANGES TO THE LAST_MESSAGE ACTIVE FUNCTIONS
The active functions last_message, last_message_sender, and
last_message_time will have a new control argument,
-inhibit_error (-ihe), which causes a null string to be
printed/returned when there is no last message.
CHANGES TO SEND_MESSAGE
The commands send_message_acknowledge, send_message_express,
and send_message_silent will be obsoleted in favor of the new
send_message. Control arguments will be added to send_message to
duplicate behavior of the three obsolete commands, as well as
allowing for previously impossible combinations. The new control
arguments are -acknowledge (-ack), -no_acknowledge (-nack),
-escape (-esc), -no_escape (-nesc), -express (-xps), -no_express
(-nxps), -comment (-com), -no_comment (-ncom), -brief (-bf),
-silent (-sil), -long (-lg), -print (-pr), and -no_print (-npr).
The comment field by default contains a string specified by
the variable full_name._ in the user's value segment.
The -pathname (-pn) control argument will be made obsolete,
retained but undocumented.
The control arguments -last_message_destination (-lmds) and
-last_message_sender (-lms) will be accepted as addresses.
____________ ____________
send_message send_message
____________ ____________
SEND_MESSAGE
SYNTAX AS A COMMAND
| sm {-control_args} address {message}
FUNCTION
sends messages (one or more, always sent one at a time) to a
given user on a given project or to a given mailbox.
ARGUMENTS
| address
can be of the form Person_id.Project_id to specify a mailbox
belonging to that person, a string containing at least one ">"
| or "<" character to specify the pathname of a mailbox, a mail
| table address, one of the arguments "-mailbox" ("-mbx"),
| "-log", "-save" ("-sv"), or "-user" immediately followed by a
| string giving the pathname of a mailbox, logbox, save box, or
| user name respectively; the argument
| "-last_message_destination" ("-lmds") if send_message has been
| used before in this process, or "-last_message_sender"
| ("-lms") if a message has been received in the user's default
| mailbox. For more information type "help addresses.gi
| -section control argument". All arguments beginning with the
| first non-control argument after a destination are considered
| to be message text.
message
is anything that appears up to the end of the command. It may
be one or more words. If message is missing from the command
line, send_message enters an input loop, and a multi-line
message may be sent. See below.
CONTROL ARGUMENTS
| -acknowledge, -ack
| requests that the recipient's process return an
| acknowledgement message when the message is read. It also
| implies the -brief (-bf) control argument. See below.
| -no_acknowledge, -nack
| requests that the recipient's process not return an
| acknowledgement message when the message is read. (Default)
| -escape, -esc
| turns on the ".." escape convention to execute Multics
____________ ____________
send_message send_message
____________ ____________
commands from within input mode for the current message. |
(Default) |
-no_escape, -nesc |
turns off the ".." escape convention. |
-express, -xps |
sends the message only if the recipient is likely to see it |
immediately, that is, is currently accepting messages. |
-no_express, -nxps |
always sends the message. (Default) |
-comment STR, -com STR |
adds a comment of the form (STR) after the user's person and |
in the message's header. The default behavior is to insert in |
the comment field the value of the variable "full_name._" from |
the user's value segment. |
-no_comment, -ncom |
suppresses insertion of any comment. |
-brief, -bf |
does not print an error message if the message cannot be sent |
or if the recipient is not accepting messages. |
-silent, -sil |
suppresses all error messages. |
-long, -lg |
prints error messages. (Default) |
-print, -pr |
prints the destination the message is being sent to when |
-last_message_destination (-lmds) or -last_message_sender |
(-lms) is used. (Default) |
-no_print, -npr |
does not print the destination the message is being sent to |
when -last_message_destination (-lmds) or -last_message_sender |
(-lms) is used. |
NOTES
For a description of the mailbox, refer to the accept_messages
and print_mail descriptions in this manual.
All control arguments must precede the address or they will be |
sent as message text. |
____________ ____________
send_message send_message
____________ ____________
If the message is to contain a parenthesis, bracket, or
semi-colon character, that character must be enclosed in quotes.
These characters are not treated specially by the send_message
command. A single quote character may be typed as """".
EXAMPLES
If WJones on the Alpha project sends the following to RTSmith on
the Beta project by using the command line:
! sm RTSmith.Beta need access to your lsg command
the message prints on RTSmith's terminal (if RTSmith is accepting
messages) as follows:
1) WJones.Alpha 04/20/76 1200.6 mst Tue: need access to your
lsg command
Input Loop:
When send_message enters the input loop it types "Input:" and
accepts lines which are sent, one line at a time. Input loop is
terminated by a line consisting solely of a period. When in
input loop, Multics commands may be executed if typed on a line
beginning with two periods. The user can receive messages while
in the input loop, so this is a way to hold conversations.
If the user is who the message(s) are being sent to changes how
he is accepting messages (defers messages, accepts messages, logs
out), send_message will print a message to that effect (unless
-brief or -silent is specified).
Acknowledgements:
If an acknowledgement is requested the acknowledgement says:
From <Person_id.Project_id> <time>: Acknowledged.
if the message is read right away, or:
From <Person_id.Project_id> <time>:
Acknowledge message of <sent_time>
if the message is read later.
If the recipient has insufficient access to send an
acknowledgement, none is sent. No error message is printed.
The command line:
____________ ____________
send_message send_message
____________ ____________
! sm Person_id.Project_id testing complete; installation this
week
sends:
testing complete
and prints an appropriate error message (e.g., "Segment
installation not found.") because the characters typed after the
semicolon are interpreted as another command line.
The command line:
! sm Person_id.Project_id so long (for now)
sends two lines:
so long for
so long now
In both of the above examples, the sender's intended message
would have been sent if it had been enclosed in quotes (e.g., "so
long (for now)").
OLD COMMANDS TO BE DELETED
The commands long_message_format (lmf), short_message_format
(smf), nmf_last_sender, nmf_last_message, and nmf_last_time will
be deleted. They have been undocumented for some time.
NEW COMMANDS
The accepting command/active function tells if somebody's
accepting messages.
The last_message_destination command/active function
prints/returns the last destination to which messages were sent
using the send_message command.
The message_status command lists mailboxes on which messages
are being accepted or deferred, which state they are in, the
mailbox prefix, etc.
_________ _________
accepting accepting
_________ _________
ACCEPTING
SYNTAX AS A COMMAND
acc address {-control_args}
SYNTAX AS AN ACTIVE FUNCTION
[acc address {-control_args}]
FUNCTION
determines whether messages are being accepted on the mailbox
specified by the supplied address.
ARGUMENTS
address
can be of the form Person_id.Project_id to specify a mailbox
belonging to that person, a string containing at least one ">"
or "<" character to specify the pathname of a mailbox, a mail
table address, one of the arguments "-mailbox" ("-mbx"),
"-log", "-save" ("-sv"), or "-user" immediately followed by a
string giving the pathname of a mailbox, logbox, save box, or
user name respectively; the argument
"-last_message_destination" ("-lmds") if send_message has been
used before in this process, or "-last_message_sender"
("-lms") if a message has been received in the user's default
mailbox. For more information type "help addresses.gi
-section control argument".
CONTROL ARGUMENTS
-print, -pr
prints the destination for which information is to be returned
when -last_message_destination (-lmds) or -last_message_sender
(-lms) is used. (Default)
-no_print, -npr
does not print the destination for which information is to be
returned when -lat_message_destination (-lmds) or
-last_message_sender (-lms) is used.
________________________ ________________________
last_message_destination last_message_destination
________________________ ________________________
LAST_MESSAGE_DESTINATION
SYNTAX AS A COMMAND
lmds {-control_arg}
SYNTAX AS AN ACTIVE FUNCTION
[lmds {-control_arg}]
FUNCTION
returns the userid of the last destination to which a message was
sent by the send_message command.
CONTROL ARGUMENTS
-inhibit_error, -ihe
causes a null string to be returned when there is no last
message destination.
NOTES
See also the descriptions of send_message, accept_message,
last_message_sender, and last_message_time.
______________ ______________
message_status message_status
______________ ______________
MESSAGE_STATUS
SYNTAX AS A COMMAND
msgst {mbx_specification} {-control_args}
FUNCTION
prints information about mailboxes on which messages are being
accepted or deferred.
ARGUMENTS
mbx_specification
specifies the mailbox for which message status is to be
printed. If not given, the user's default mailbox
(>udd>Project>Person>Person.mbx) is used.
LIST OF MAILBOX SPECIFICATIONS
-mailbox path, -mbx path
specifies the pathname of a mailbox. The suffix ".mbx" is
added if necessary.
-user STR
specifies either a user's default mailbox or an entry in the
system mail table.
-save path, -sv path
specifies the pathname of a savebox. The suffix ".sv.mbx" is
added if necessary.
-log
specifies the user's logbox and is equivalent to:
-mailbox >udd>Project_id>Person_id>Person_id.sv.mbx
STR
is any non-control argument and is first interpreted as:
-mailbox STR
if no mailbox is found, this specification is then interpreted
as:
-save STR
if no savebox is found, this specification is then interpreted
as:
-user STR
CONTROL ARGUMENTS
-all, -a
causes information to be printed for all mailboxes on which
the user is accepting or deferring messages.
IMPLEMENTATION OF MESSAGE_FACILITY_
The subroutines send_message_ and send_mail_ will eventually
be obsoleted in favor of entry points in the new
message_facility_ subroutine. This new subroutine will have
entrypoints to allow manipulating all parts of the message
facility.
Initially, message_facility_ will not make use of
mail_system_ for performance reasons. Each message facility
command, however, will use mlsys_utils_ for address parsing so
they will understand mail table entries. Because mail_system_ is
not used, the message facility will not understand foreign
addresses, forum meetings, or mailing lists.
The message_facility_ subroutine will be an internal
interface, not documented for the general public so that major
changes can be made with respect to mail_system_ without
compatibility constraints.
Each mailbox on which messages are accepted has a
msg_facility_mailbox structure associated with it. This
structure is used only by message_facility_. This structure
looks like this:
dcl 1 msg_facility_mailbox aligned
based (msg_facility_mailbox_ptr),
2 version char(8),
2 next_mbx_ptr ptr,
2 dname char (168),
2 ename char (32),
2 uid bit (36),
2 default_mbx bit (1),
2 event_channel fixed bin (71),
2 index fixed bin,
2 wakeup_flags,
3 hold_messages bit (1) unal,
3 hold_notifications bit (1) unal,
3 notify_mail bit (1) unal,
3 wakeup_state bit (2) unal,
3 mbz bit (31) unal,
2 short_format bit (1),
2 prefix char (12) var,
2 short_prefix bit (1),
2 alarm_time fixed bin (71),
2 alarm_event_channel fixed bin (71),
2 last,
3 last_message_ptr ptr,
3 last_id bit (72) aligned,
3 last_message_index fixed bin,
3 last_message_number fixed bin,
2 current,
3 current_message_ptr ptr,
3 current_id bit (72) aligned,
3 current_message_index fixed bin,
3 current_message_number fixed bin,
2 messages_ptr ptr,
2 n_elements fixed bin,
2 n_messages fixed bin,
2 highest_message fixed bin,
2 wakeup_processor,
3 wakeup_handler entry variable,
3 wakeup_info_ptr ptr,
2 alarm_processor,
3 alarm_handler entry variable,
3 alarm_info_ptr ptr;
dcl MSG_FACILITY_MAILBOX_VERSION_1 char(8)
internal static
options (constant) init
("msgfmbx1");
dcl msg_facility_mailbox_ptr ptr;
where:
next_mbx_ptr
is a pointer to the next mailbox in the linked list.
dname
is the directory in which this mailbox resides.
ename
is the entry name of this mailbox.
uid
is the unique ID of this mailbox.
default_mbx
is a switch indicating if this is the user's default mailbox.
event_channel
is the event channel across which wakeups for messages sent to
this mailbox are to be sent.
index
is the ring 1 index for this mailbox.
hold_messages
is a switch determining whether messages are being held on
this mailbox.
hold_notifications
is a switch determining whether notifications are being held
on this mailbox.
notify_mail
is a switch determining whether mail notifications are printed
for this mailbox.
wakeup_state
is a pair of bits indicating if messages are being accepted or
deferred on ths mailbox. "00"b indicates that messages are
not being accepted, "01"b indicates that they are being
deferred, and "10"b indicates that they are being accepted.
mbz
is reserved for future expansion and must be zero.
short_format
is a switch determining if messages to this mailbox are to be
printed in short format.
prefix
is a character string printed before printing a message from
this mailbox.
short_prefix
is a switch determining if prefixes are to be printed when
messages are printed in short format.
alarm_time
is the time interval for alarm wakeups.
alarm_event_channel
is the event channel for alarm wakeups.
last_message_ptr
is a pointer to a mail_format structure for the last message
received.
last_id
is the ring 1 message ID of the last message received.
last_message_index
is the index into the msg_array of the last message.
last_message_number
is the number of the last message.
current_message_ptr
is a pointer to a mail_format structure for the current
message.
current_id
is the ring 1 message ID of the current message.
current_message_index
is the index into the msg_array of the current message.
current_message_number
is the number of the current message.
messages_ptr
is a pointer to the message array.
n_elements
is the number of array elements currently allocated.
n_messages
is the number of undeleted messages in the mailbox.
highest_message
is the number of the highest message received on this mailbox.
wakeup_handler
is the procedure called to handle wakeups.
wakeup_info_ptr
is a pointer to information supplied to the wakeup procedure.
alarm_handler
is the procedure called to process alarm wakeups.
alarm_info_ptr
is a pointer to information supplied to the alarm procedure.
msg_facility_mailbox_ptr
is the pointer to the above structure.
The following structure is also used internally by the message
facility (declared in msg_facility_mailbox.incl.pl1):
dcl 1 msg_array (msg_facility_mailbox.n_elements) aligned
based (msg_facility_mailbox.messages_ptr),
2 message_id bit (72),
2 message_number fixed bin,
2 flags,
3 printed bit (1) unal,
3 mbz bit (35) unal;
where:
message_id
is the ring 1 message ID of this message.
message_number
is the message number of this message. Messages are numbered
consecutively per-mailbox, starting with number 1. The
message number of a message is passed to the wakeup routing
when it is invoked.
printed
is set to "1"b if this message has been processed (by a call
to message_facility_$set_seen_switch).
mbz
is reserved for future expansion and must be zero.
Alarm and wakeup handlers
The alarm and wakeup handler procedures should be declared
and are called as follows:
declare handler_procedure entry (ptr, ptr);
call handler_procedure (msgf_mbx_ptr, info_ptr);
The msgf_mbx_ptr is a pointer to the mailbox data structure
for the mailbox on which messages are to be handled. The
info_ptr is a pointer to a structure supplied by the application
setting its own handler.
The default alarm and wakeup handlers use the info_ptr to
maintain the call string supplied to accept_messages.
The message_facility_ subroutine handles event channels for
alarms and wakeups internally. Wakeups are sent to the entries
message_facility_$alarm_processor and
message_facility_$wakeup_processor, for alarms and wakeups,
respectively. The wakeup procesor updates the current message
information from the ring 1 message ID passed as the event
message and then calls msg_facility_mailbox.wakeup_handler with
the pointer to that msg_facility_mailbox structure and the info
pointer supplied. (The current message information is ALWAYS
updated, the last message information is only updated if the new
message is a message that is being held. Wakeup handlers should
use the current message information, the last message information
is for the last_message_sender, last_message_time, and
last_message commands and is updated by calls to
message_facility_$set_seen_switch). The alarm and wakeup
processors do not acknowledge messages. The default handlers,
however, do (by setting the seen switches on the messages they
handle). Message handlers should read the message, if necessary,
with message_facility_$read_message, and mark the message
processed (if appropriate) with
message_facility_$set_seen_switch. If
message_facility_$set_seen_switch is called on a message which is
the last message in the msg_array, the last message info is
updated to that message.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
MESSAGE_FACILITY_
This subroutine is used to manipulate the information kept and
used by the Multics message facility which implements interactive
messages. Mailboxes are identified by a pointer to a
msg_facility_mailbox structure.
Entry: message_facility_$get_next_msgf_mbx_ptr
This entry, given a message facility mailbox pointer, returns a
pointer to the next mailbox in the chain, or null if there is no
next mailbox. If msgf_mbx_ptr is null, the first mailbox in the
chain is returned.
USAGE
declare message_facility_$get_next_msgf_mbx_ptr entry (ptr, ptr);
call message_facility_$get_next_msgf_mbx_ptr (msgf_mbx_ptr,
next_msgf_mbx_ptr);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
next_msgf_mbx_ptr (Output)
is a pointer to the next mailbox.
Entry: message_facility_$get_msgf_mbx_ptr
This entry returns a message facility mailbox pointer for the
specified mailbox.
USAGE
declare message_facility_$get_msgf_mbx_ptr entry (char(*),
char(*), ptr, fixed bin(35));
call message_facility_$get_msgf_mbx_ptr (dname, ename,
msgf_mbx_ptr, code);
ARGUMENTS
dname (Input)
is the directory in which the specified mailbox resides.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
ename (Input)
is the entry name of the specified mailbox.
msgf_mbx_ptr (Output)
is the returned message facility mailbox pointer.
code (Output)
is a standard system error code.
Entry: message_facility_$free_msgf_mbx_ptr
This entry makes a mailbox unknown to the message facility.
USAGE
dcl message_facility_$free_msgf_mbx_ptr entry (ptr, fixed
bin(35));
call message_facility_$free_msgf_mbx_ptr (msgf_mbx_ptr, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
code (Output)
is a standard system error code.
Entry: message_facility_$get_wakeup_state
This entry determines whether or not messages are being accepted
or deferred, held or not held, and whether or not notifications
are printed and/or held for a mailbox.
USAGE
declare message_facility_$get_wakeup_state entry (ptr, bit(*)
aligned, fixed bin(35));
call message_facility_$get_wakeup_state (msgf_mbx_ptr, flags,
code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a mailbox data ptr.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
flags (Output)
is a bit string indicating if messages are being held, if
notifications are being held, if notifications are being
printed, and if messages are being accepted or deferred.
code (Output)
is a standard system error code.
Entry: message_facility_$set_wakeup_state
This entry is used to accept or defer messages, hold or not hold
messages, and determine whether or not notifications are to be
printed and/or held for a mailbox.
USAGE
declare message_facility_$set_wakeup_state entry (ptr, bit(*)
aligned, fixed bin(35));
call message_facility_$set_wakeup_state (msgf_mbx_ptr, flags,
code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
flags (Input)
is a bit string which determines if messages are to be held,
if notifications are to be held, if notifications are to be
printed, and if messages are to be accepted or deferred on
this mailbox.
code (Output)
is a standard system error code.
Entry: message_facility_$get_mbx_path
This entry returns the directory and entry names of the mailbox
associated with the structure pointed to by the supplied mailbox
data pointer.
USAGE
dcl message_facility_$get_mbx_path entry (ptr, char(*), char(*),
bit (1) aligned, fixed bin(35));
_________________ _________________
message_facility_ message_facility_
_________________ _________________
call message_facility_$get_mbx_path (msgf_mbx_ptr, dname, ename,
default_mbx, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
dname (Output)
is the directory in which the mailbox resides.
ename (Output)
is the entry name of the mailbox.
default_mbx (Output)
is a switch indicating if this is the user's default mailbox.
code (Output)
is a standard system error code.
Entry: message_facility_$get_prefix
This entry returns the prefix printed before each interactive
message received.
USAGE
declare message_facility_$get_prefix entry (ptr, char(12) var,
bit(1) aligned, fixed bin(35));
call message_facility_$get_prefix (msgf_mbx_ptr, prefix_string,
short_prefix, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
prefix_string (Output)
is the current message prefix.
short_prefix (Output)
is a switch indicating whether the prefix is printed when
messages are printed in short format.
code (Output)
is a standard system error code.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
Entry: message_facility_$set_prefix
This entry sets the prefix printed before each interactive
message received.
USAGE
declare message_facility_$set_prefix entry (ptr, char(12) var,
bit(1) aligned, fixed bin(35));
call message_facility_$set_prefix (msgf_mbx_ptr, prefix_string,
short_prefix, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
prefix_string (Input)
is the new message prefix.
short_prefix (Input)
is a switch indicating whether the prefix is printed when
messages are printed in short format.
code (Output)
is a standard system error code.
Entry: message_facility_$get_message_format
This entry returns a switch indicating whether successive
messages from the same user (with the same comment field, within
5 minutes and on the same date as the prior message) are to be
printed in short format.
USAGE
declare message_facility_$get_message_format entry (ptr, bit(1)
aligned, fixed bin(35));
call message_facility_$get_message_format (msgf_mbx_ptr,
short_format, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
short_format (Output)
is a switch indicating if messages are printed in short
format.
code (Output)
is a standard system error code.
Entry: message_facility_$set_message_format
This entry sets the switch indicating whether successive messages
from the same user (with the same comment field, within 5
minutes, and on the same date as the prior message) are to be
printed in short format.
USAGE
declare message_facility_$set_message_format entry (ptr, bit(1)
aligned, fixed bin(35));
call message_facility_$set_message_format (msgf_mbx_ptr,
short_format, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
short_format (Input)
is a switch indicating if messages are printed in short
format.
code (Output)
is a standard system error code.
Entry: message_facility_$get_alarm_handler
This entry returns the current alarm handler.
USAGE
declare message_facility_$get_alarm_handler entry (ptr, entry,
ptr, fixed bin(71), fixed bin(35));
call message_facility_$get_alarm_handler (msgf_mbx_ptr,
alarm_entry, alarm_info_ptr, alarm_time, code);
ARGUMENTS
_________________ _________________
message_facility_ message_facility_
_________________ _________________
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
alarm_entry (Output)
is the alarm procedure.
alarm_info_ptr (Output)
is a pointer to information supplied to
message_facility_$set_alarm_handler.
alarm_time (Output)
is the interval between alarm wakeups.
code (Output)
is a standard system error code.
Entry: message_facility_$set_alarm_handler
This entry sets the alarm handler. Messages are then held on the
mailbox if they were not already. Messages must be accepted on
the mailbox.
USAGE
declare message_facility_$set_alarm_handler entry (ptr, entry,
ptr, fixed bin(71), fixed bin(35));
call message_facility_$set_alarm_handler (msgf_mbx_ptr,
alarm_entry, alarm_info_ptr, alarm_time, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
alarm_entry (Input)
is the alarm procedure.
alarm_info_ptr (Input)
is a pointer to information to be used by the alarm procedure.
alarm_time (Input)
is the interval between alarm wakeups.
code (Output)
is a standard system error code.
Entry: message_facility_$get_wakeup_handler
_________________ _________________
message_facility_ message_facility_
_________________ _________________
This entry returns information about the wakeup handler.
USAGE
declare message_facility_$get_wakeup_handler entry (ptr, entry,
ptr, fixed bin(35));
call message_facility_$get_wakeup_handler (msgf_mbx_ptr,
wakeup_entry, wakeup_info_ptr, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
wakeup_entry (Output)
is the wakeup procedure.
wakeup_info_ptr (Output)
is a pointer to information supplied to
message_facility_$set_wakeup_handler.
code (Output)
is a standard system error code.
Entry: message_facility_$set_wakeup_handler
This entry sets the wakeup handler. Messages must be accepted on
the mailbox.
USAGE
declare message_facility_$set_wakeup_handler entry (ptr, entry,
ptr, fixed bin(35));
call message_facility_$set_wakeup_handler (msgf_mbx_ptr,
wakeup_entry, wakeup_info_ptr, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
wakeup_entry (Input)
is the wakeup procedure.
wakeup_info_ptr (Input)
is a pointer to information to be used by the wakeup
procedure.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
code (Output)
is a standard system error code.
Entry: message_facility_$get_last_message_info
This entry returns information about the last non-notification
message received.
USAGE
declare message_facility_$get_last_message_info entry (ptr, ptr,
fixed bin(35));
call message_facility_$get_last_message_info (msgf_mbx_ptr,
last_message_info_ptr, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
last_message_info_ptr (Input/Output)
is a pointer to the following structure (declared in
last_message_info.incl.pl1):
dcl 1 last_message_info aligned
based (last_message_info_ptr),
2 version char (8),
2 last_message_ptr ptr,
2 last_message_id bit (72) aligned,
2 last_message_index fixed bin,
2 last_message_number fixed bin;
where: version
is the version of the structure. It must be
LAST_MESSAGE_INFO_VERSION_1 (declared in
last_message_info.incl.pl1).
last_message_ptr
is a pointer to the last message. The appropriate
structure is declared in message_info.incl.pl1.
last_message_id
is the ring 1 message-ID of the last message. The last
message date/time may be obtained from this ID by assigning
it to the following structure:
_________________ _________________
message_facility_ message_facility_
_________________ _________________
dcl 1 mbx_msg_id aligned,
2 unknown bit(18) unal,
2 time bit(54) unal;
unknown is undefined and should not be referenced.
time may be converted to a standard time using the PL/I
binary builtin.
last_message_index
is the index into the msg_array of the last message.
last_message_number
is the number of the last message.
Entry: message_facility_$get_current_message_info
This entry returns information about the last message received.
USAGE
declare message_facility_$get_current_message_info entry (ptr,
ptr, fixed bin(35));
call message_facility_$get_current_message_info (msgf_mbx_ptr,
current_message_info_ptr, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
current_message_info_ptr (Input/Output)
is a pointer to the following structure (declared in
current_message_info.incl.pl1):
dcl 1 current_message_info aligned
based (current_message_info_ptr),
2 version char (8),
2 current_message_ptr ptr,
2 current_message_id bit (72) aligned,
2 current_message_index fixed bin,
2 current_message_number fixed bin;
where:
version
is the version of the structure. It must be
_________________ _________________
message_facility_ message_facility_
_________________ _________________
CURRENT_MESSAGE_INFO_VERSION_1 (declared in
current_message_info.incl.pl1).
current_message_ptr
is a pointer to the current message. The appropriate
structure is declared in message_info.incl.pl1.
current_message_id
is the ring 1 message-ID of the current message. The
current message date/time may be obtained from this ID by
assigning it to the following structure:
dcl 1 mbx_msg_id aligned,
2 unknown bit(18) unal,
2 time bit(54) unal;
unknown is undefined and should not be referenced.
time may be converted to a standard time using the PL/I
binary builtin.
current_message_index
is the index into the msg_array of the current message.
current_message_number
is the number of the current message.
Entry: get_msg_array_ptr
This entry returns a pointer to the message array for the
specified mailbox.
USAGE
dcl message_facility_$get_msg_array_ptr entry (ptr, ptr, ptr,
fixed bin, fixed bin(35));
call message_facility_$get_msg_array_ptr (msgf_mbx_ptr, area_ptr,
msg_array_ptr, n_messages, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
area_ptr (Input)
is the area in which the message array is to be allocated.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
msg_array_ptr (Output)
is a pointer to the message list structure, declared in
msg_array.incl.pl1.
dcl 1 msg_array (n_messages) aligned based (msg_array_ptr),
2 message_id bit (72) aligned,
2 message_number fixed bin,
2 flags,
3 printed bit (1) unal,
3 mbz bit (35) unal;
n_messages (Output)
is the number of messages in the mailbox and the number of
elements in the array.
code (Output)
is a standard system error code.
Entry: message_facility_$read_message
This entry reads a message from a mailbox.
USAGE
declare message_facility_$read_message (ptr, fixed bin, ptr, ptr,
fixed bin(35));
call message_facility_$read_message (msgf_mailbox_ptr,
message_index, area_ptr, message_info_ptr, code);
ARGUMENTS
msgf_mailbox_ptr (Input)
is a message facility mailbox pointer.
message_index (Input/Output)
is the index into the msg_array of this message.
area_ptr (Input)
is an area in which the message is to be allocated.
message_info_ptr (Input/Output)
is a pointer to the following structure (declared in
message_info.incl.pl1):
dcl 1 message_info aligned based (message_info_ptr),
2 version char (8),
2 sender char (32),
_________________ _________________
message_facility_ message_facility_
_________________ _________________
2 message_ptr ptr,
2 authorization bit (72) aligned;
where:
version
is the version number of the structure. It should be
MESSAGE_INFO_VERSION_1 (declared in message_info.incl.pl1).
sender
is the group id of the sender of the message.
message_ptr
is a pointer to the message. The appropriate structure is
declared in mail_format.incl.pl1.
authorization
is the sender's AIM authorization.
code (Output)
is a standard system error code.
Entry: message_facility_$set_seen_switch
This entry marks a message as having been processed, sends an
acknowledgement if the acknowledge switch is on, and deletes the
message if it is a notification or if messages are not being
held. If the message being marked as seen is the last message in
the message array, the last message information is set for it.
USAGE
dcl message_facility_$set_seen_switch entry (ptr, fixed bin,
fixed bin (35));
call message_facility_$set_seen_switch (msgf_mbx_ptr,
message_index, code);
ARGUMENTS
msgf_mbx_ptr (Input)
is a message facility mailbox pointer.
message_index (Input)
is the index into the msg_array for this message.
code (Output)
is a standard system error code.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
Entry: message_facility_$send_message
This entry sends a message to the specified mailbox.
USAGE
dcl message_facility_$send_message entry (char(*), char(*),
char(*), ptr, fixed bin(35));
call message_facility_$send_message (dname, ename, message,
send_mail_info_ptr, code);
ARGUMENTS
dname (Input)
is the directory in which the specified mailbox resides.
ename (Input)
is the entry name of the mailbox.
message (Input)
is the message to be sent.
send_mail_info_ptr (Input)
is a pointer to a send_mail_info structure, as declared in
send_mail_info.incl.pl1.
dcl 1 send_mail_info aligned,
2 version fixed bin,
2 sent_from char(32) aligned,
2 switches,
3 wakeup bit(1) unal,
3 mbz1 bit(1) unal,
3 always_add bit(1) unal,
3 never_add bit(1) unal,
3 notify bit(1) unal,
3 acknowledge bit(1) unal,
3 mbz bit(30) unal;
where:
version
is the version of this structure. It must be
send_mail_info_version_2 (declared in
send_mail_info.incl.pl1).
sent_from
is the comment string which is to be placed in the header
of the message. If it is "", no comment is used. If it is
the person ID of the sending user, and the variable
_________________ _________________
message_facility_ message_facility_
_________________ _________________
full_name._ is defined in the user's default value seg, its
value will be used as the comment string. If it is not
defined, no comment is used.
wakeup
is a switch specifying that this message is a wakeup.
mbz1
is reserved for future expansion and must be zero.
always_add
is a switch specifying that this message is to be added to
the mailbox regardless of whether or not messages are being
accepted on the destination mailbox.
never_add
is a switch specifying that the message is not to be added
to the destination mailbox.
notify
is a switch specifying that the message is a notification.
acknowledge
is a switch specifying that the message is to be
acknowledged.
mbz
is reserved for future expansion and must be zero.
code (Output)
is a standard system error code.
Entry: message_facility_$send_message_access_class
This entry sends a message to the specified mailbox, allowing the
user to specify the access class of the message.
USAGE
dcl message_facility_$send_message_access_class entry (char(*),
char(*), char(*), ptr, fixed bin(35));
call message_facility_$send_message_access_class (dname, ename,
message, send_mail_info_ptr, access_class, code);
ARGUMENTS
dname (Input)
is the directory in which the specified mailbox resides.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
ename (Input)
is the entry name of the mailbox.
message (Input)
is the message to be sent.
send_mail_info_ptr (Input)
is a pointer to a send_mail_info structure, as declared in
send_mail_info.incl.pl1.
dcl 1 send_mail_info aligned,
2 version fixed bin,
2 sent_from char(32) aligned,
2 switches,
3 wakeup bit(1) unal,
3 mbz1 bit(1) unal,
3 always_add bit(1) unal,
3 never_add bit(1) unal,
3 notify bit(1) unal,
3 acknowledge bit(1) unal,
3 mbz bit(30) unal;
where:
version
is the version of this structure. It must be
send_mail_info_version_2 (declared in
send_mail_info.incl.pl1).
sent_from
is the comment string which is to be placed in the header
of the message. If it is "", no comment is used. If it is
the person ID of the sending user, and the variable
full_name._ is defined in the user's default value seg, its
value will be used as the comment string. If it is not
defined, no comment is used.
wakeup
is a switch specifying that this message is a wakeup.
mbz1
is reserved for future expansion and must be zero.
always_add
is a switch specifying that this message is to be added to
the mailbox regardless of whether or not messages are being
accepted on the destination mailbox.
_________________ _________________
message_facility_ message_facility_
_________________ _________________
never_add
is a switch specifying that the message is not to be added
to the destination mailbox.
notify
is a switch specifying that the message is a notification.
acknowledge
is a switch specifying that the message is to be
acknowledged.
mbz
is reserved for future expansion and must be zero.
access_class (Input)
is the access class of this message.
code (Output)
is a standard system error code.
Entry: message_facility_$delete_message
This entry deletes a message from a mailbox.
USAGE
declare message_facility_$delete_message entry (ptr, fixed bin,
fixed bin(35));
call message_facility_$delete_message (msgf_mailbox_ptr,
message_index, code);
ARGUMENTS
msgf_mailbox_ptr (Input)
is a message facility mailbox pointer.
message_index (Input)
is the index into the msg_array for this message.
code (Output)
is a standard system error code.
CHANGES NEEDED IN OTHER PARTS OF THE SYSTEM
error_table_
The message for error_table_$messages_off should be
"Messages are not being accepted" rather than "User not accepting
messages or not logged in", since the mailbox may or may not be a
user's default mailbox. Similarly, the message for
error_table_$messages_deferred should be "Messages are deferred."
ring 1 mailbox primitives
There are a number of entry points in mbx_mseg_ for which
there are no corresponding mailbox_ gate entries. Although not
strictly necessary for the reimplementation of the message
facility, they would be useful for user programs. An entry point
to allow determination of the message acceptance state on a
mailbox would also be useful.
An entry point to allow messages to be "unaccepted"--so that
mailboxes can go back to zero records--would be nice.
Urgent messages are implemented in ring 1 although they are
not in ring 4. To implement them in ring 4 would require
correcting a number of inconsistencies in the ring 1
implementation.
It has also been pointed out that the current implementation
of urgent messages is really just another class of regular
messages (i.e., they are not really "urgent"). To implement
truly urgent messages would require more extensive changes in the
inner ring.