Skip to content
Snippets Groups Projects
Select Git revision
  • 9a012a54fe549b4d58f70a7e954aeeb856472930
  • release default protected
  • more-testing
  • attempt-vax90b1
  • attempt-1
  • conversion protected
  • linux
  • v0.9.1 protected
  • v0.9.0 protected
9 results

command.go

Blame
  • command.go 88.14 KiB
    // Package repl implements the main event loop.
    package repl
    
    import "git.lyda.ie/kevin/bulletin/dclish"
    
    var commands = dclish.Commands{
    	"ADD": {
    		Description: `Adds a message to the specified folder.  A file can be specified which
    contains the message.  Otherwise, BULLETIN will prompt for the text.
    BULLETIN will ask for an expiration date and a header to contain the
    topic of the message.
     
      Format:
        ADD [file-name]
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `This option is restricted to privileged users.  It is used in conjunction
    with the /BROADCAST qualifier.  If specified, all terminals are sent the
    message.  Otherwise, only users are sent the message.
    `,
    			},
    			"/BELL": {
    				Description: `This option is restricted to privileged users.  It is used in conjunction 
    with the /BROADCAST qualifier.  If specified, the bell is rung on the 
    terminals when the message is broadcasted.
    `,
    			},
    			"/BROADCAST": {
    				Description: `This option is restricted to privileged users and SYSTEM folders.  If
    specified, a message is both stored and broadcasted to all users logged
    in at the time.  If the folder is remote, a message will be broadcast on
    all nodes which are connected to that folder, unless /LOCAL is specified.
    A node which does not have BULLCP running cannot have a message
    broadcasted to it, (even though it is able to create a remote folder).
     
    See also /ALL and /BELL.
    `,
    			},
    			"/CLUSTER": {
    				Description: `/[NO]CLUSTER
     
    This option specifies that broadcasted messages should be sent to all
    nodes in the cluster.  /CLUSTER is the default.
    `,
    			},
    			"/EDIT": {
    				Description: `/[NO]EDIT
    Determines whether or not the editor is invoked to edit the message
    you are adding.  /EDIT is the default if you have added /EDIT to your
    BULLETIN command line.
    `,
    			},
    			"/EXPIRATION": {
    				Description: `/EXPIRATION=time
     
    Specifies the time at which the message is to expire.  Either absolute
    time: [dd-mmm-yyyy] hh:mm:ss, or delta time: dddd [hh:mm:ss] can be
    used.
    `,
    			},
    			"/EXTRACT": {
    				Description: `Specifies that the text of the previously read message should be included
    at the beginning of the new message.  The previous message must be in the
    same folder.  This qualifier is valid only when used with /EDIT.  The
    text is indented with > at the beginning of each line.  This can be
    suppressed with /NOINDENT.
    `,
    			},
    			"/FOLDER": {
    				Description: `/FOLDER=(foldername,[...])
     
    Specifies the foldername into which the message is to  be  added.   Does
    not  change the current selected folder.  Folders can be either local or
    remote folders.  Thus, a  nodename  can  precede  the  foldername  (this
    assumes that the remote node is capable of supporting this feature, i.e.
    the BULLCP process is running on that node.  If  it  is  not,  you  will
    receive an error message).  If the the foldername is specified with only
    a nodename, i.e. FOO::, the foldername is assumed to be GENERAL.   NOTE:
    Specifying  remote nodes is only possible if that remote node is running
    a special BULLCP process.  If it isn't, the only way to add messages  to
    that  remote  node is via the /NODE command.  However, /FOLDER is a much
    quicker method, and much more versatile.
     
    You can specify logical names which translate  to  one  or  more  folder
    names.   I.e.   $  DEFINE ALL_FOLDERS "VAX1,VAX2,VAX3", and then specify
    ALL_FOLDERS after /FOLDER=.  Note that the quotation marks are required.
     
    When using /FOLDER for remote nodes, proxy logins are used to  determine
    if privileged options are allowed.  If they are not allowed, the message
    will still be added, but without the privileged settings.
    `,
    			},
    			"/LOCAL": {
    				Description: `Specifies  that  when  /BROADCAST  is specified for a remote folder, the
    message is broadcasted ONLY on the local node.
    `,
    			},
    			"/NODES": {
    				Description: `/NODES=(nodes[,...])
     
    Specifies  to send the message to the listed DECNET nodes.  The BULLETIN
    utility  must  be  installed  properly  on  the   other   nodes.    (See
    installation  notes). You can specify a different username to use at the
    other nodes by either using the USERNAME qualifier, or by specifying the
    nodename   with   2   semi-colons   followed   by   the  username,  i.e.
    nodename::username.  If you specify a username, you will be prompted for
    the password of the account on the other nodes.
     
    Additionally,  you  can  specify logical names which translate to one or
    more node names.  I.e.  $ DEFINE ALL_NODES  "VAX1,VAX2,VAX3",  and  then
    specify /NODES=ALL_NODES.  Note that the quotation marks are required.
     
    NOTE:  It  is  preferable  to  use /FOLDER instead of /NODE if possible,
    since adding messages via /FOLDER is much quicker.
    `,
    			},
    			"/NOINDENT": {
    				Description: `See /EXTRACT for information on this qualifier.
    `,
    			},
    			"/NOSIGNATURE": {
    				Description: `Specifies to suppress the automatically appended signature, if one exists.
    Signatures are appended for postings to mailing lists and to responds.
    See the help topic POST Signature_file for signature information.
    `,
    			},
    			"/PERMANENT": {
    				Description: `If specified, message will be a permanent message and will never expire.
    If an expiration limit is set, then permament is not allowed unless
    user has privileges.
    `,
    			},
    			"/SUBJECT": {
    				Description: `/SUBJECT=description
     
    Specifies the subject of the message to be added.
    `,
    			},
    			"/SHUTDOWN": {
    				Description: `/SHUTDOWN[=nodename]
    This option is restricted to privileged users.  If specified, message
    will be automatically deleted after a computer shutdown has occurred.
    This option is restricted to SYSTEM folders.
     
    If the bulletin files are shared between cluster nodes, the message
    will be deleted after the node on which the message was submitted from
    is rebooted.  If you wish the message to be deleted after a different
    node reboots, you have the option of specifying that node name.
     
    NOTE: If the folder is a remote folder, the message will be deleted
    after the remote node reboots, not the node from which the message was
    added.  The nodename cannot be specified with a remote folder.
    `,
    			},
    			"/SYSTEM": {
    				Description: `This option is restricted to privileged users.  If specified, message
    is both saved in the folder and displayed in full as a system message
    when a user logs in.  System messages should be as brief as possible to
    avoid the possibility that system messages could scroll off the screen.
    This option is restricted to SYSTEM folders.
    `,
    			},
    			"/USERNAME": {
    				Description: `Specifies username to be used at remote DECNET nodes when adding messages
    to DECNET nodes via the /NODE qualifier.
    `,
    			},
    		},
    	},
    	"ATTACH": {
    		Description: `Permits you to switch control of your  terminal  from  your  current
    process to another process in your job.
     
    The ATTACH command allows you to move quickly between processes that
    you have created with the SPAWN command.  For example, while you are
    editing a file, you can SPAWN a subprocess to read a new message.
    Enter the ATTACH command to get back to back to the editing session.
    If you want to read another new message, you can use the ATTACH command
    to get back to the BULLETN subprocess you already created.
     
       Format:
     
           ATTACH [/PARENT] [process-name]
    `,
    		Flags: dclish.Flags{
    			"Parameters": {
    				Description: `process-name
     
      Indicates the name of the subprocess to which the connection  is  to
      be made. Only the /PARENT qualifier or a process-name may be specified.
     
    `,
    			},
    			"Qualifiers": {
    				Description: `/PARENT
     
       Allows you to attach to your process' parent process.
       If there is no parent process an error message is printed.
     
     
    `,
    			},
    			"Examples": {
    				Description: `  1.   
           $ SPAWN BULLETIN
           %DCL-S-SPAWNED, process MAGNANI_3 spawned
           %DCL-S-ATTACHED, terminal now attached to process MAGNANI_3
           BULLETIN> ATTACH MAGNANI_2
           %DCL-S-RETURNED, control returned to process MAGNANI_2
           $ ATTACH MAGNANI_3
           BULLETIN>
     
     
      This  example  shows  how  to  spawn  subprocesses  (MAGNANI_2   and
      MAGNANI_3) to move from BULLETIN to DCL back to BULLETIN.  The ATTACH 
      command  allows you to transfer control between subprocesses.
     
     
                                      NOTE
     
          You always SPAWN a new process and ATTACH to a process  that
          already exists.
    `,
    			},
    		},
    	},
    	"BACK": {
    		Description: `Displays the message preceding the current message.
    `,
    		Flags: dclish.Flags{
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used to read the message.  This is
    useful for scanning a long message.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Specifies that if a message header exists, the header will be shown.
    If /HEADER or /NOHEADER is specified, the setting will apply for all
    further reads in the selected folder.  The default is /HEADER for non-
    NEWS folders, /NOHEADER for NEWS folders.  If the SET STRIP command
    is set for the folder, it will change the default to be /HEADER.
    `,
    			},
    		},
    	},
    	"BULLETIN": {
    		Description: `The BULLETIN utility permits a user to create a message for reading by
    all users.  Users are notified upon logging in that new messages have
    been added, and what the topic of the messages are.  Actual reading of
    the messages is optional. (See the command SET READNEW for info on
    automatic reading.)  Messages are automatically deleted when their
    expiration date has passed.
    `,
    	},
    	"CHANGE": {
    		Description: `Replaces or modifies existing stored message.  This is for changing part
    or all of a message without causing users who have already seen the
    message to be notified of it a second time.  You can select qualifiers so
    that either the message text, expiration date, or the header are to be
    changed.  If no qualifier is added, the default is that all these parameters
    are to be changed.  If the text of the message is to be changed, a file can
    be specified which contains the text.  If the editor is used for changing
    the text, the old message text will be extracted.  This can be suppressed
    by the qualifier /NEW.
     
      Format:
        CHANGE [file-name]
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `Makes the changes to all the messages in the folder.  Only the expiration
    date and message headers can be changed if this qualifier is specified.
    `,
    			},
    			"/EDIT": {
    				Description: `/[NO]EDIT
    Determines whether or not the editor is invoked to edit the message
    you are replacing.  The old message text is read into the editor unless
    a file-name or /NEW is specified.  /EDIT is the default if you have
    added /EDIT to your BULLETIN command line.
    `,
    			},
    			"/EXPIRATION": {
    				Description: `/EXPIRATION[=time]
     
    Specifies the time at which the message is to expire.  Either absolute
    time: [dd-mmm-yyyy] hh:mm:ss, or delta time: dddd [hh:mm:ss] can be
    used.  If no time is specified, you will be prompted for the time.
    `,
    			},
    			"/GENERAL": {
    				Description: `Specifies that the message is to be converted from a SYSTEM message to
    a GENERAL message.  This only applies to the GENERAL folder.
    `,
    			},
    			"/HEADER": {
    				Description: `Specifies that the message header is to be replaced.  You will be
    prompted for the new message description.
    `,
    			},
    			"/NEW": {
    				Description: `If the editor is to be used for replacing the text of the message,
    NEW specifies not to read in the old message text, and that a totally
    new text is to be read in.
    `,
    			},
    			"/NUMBER": {
    				Description: `/NUMBER=message_number[-message_number1]
     
    Specifies the message or messages to be replaced. If this qualifier is 
    omitted, the message that is presently being read will be replaced.
    A range of messages can be specified, i.e. /NUMBER=1-5.  Only the expiration
    date and message headers can be changed if a range is specified.
     
    The key words CURRENT and LAST can also be specified in the range,
    in place of an actual number, i.e. CURRENT-LAST, 1-CURRENT, etc.
    `,
    			},
    			"/PERMANENT": {
    				Description: `Specifies that the message is to be made permanent.
    `,
    			},
    			"/SHUTDOWN[=nodename]": {
    				Description: `Specifies that the message is to expire after the next computer
    shutdown.  This option is restricted to SYSTEM folders.
    `,
    			},
    			"/SUBJECT": {
    				Description: `/SUBJECT=description
     
    Specifies the subject of the message to be added.
    `,
    			},
    			"/SYSTEM": {
    				Description: `Specifies that the message is to be made a SYSTEM message.  This is a
    privileged command and is restricted to SYSTEM folders.
    `,
    			},
    			"/TEXT": {
    				Description: `Specifies that the message text is to be replaced.
    `,
    			},
    		},
    	},
    	"COPY": {
    		Description: `Copies a message to another folder  without  deleting  it  from  the
    current folder.
     
      Format:
     
        COPY folder-name [message_number][-message_number1]
     
    The folder-name is the name of the folder to which the message is to be
    copied to.  Optionally, a range of messages which are to be copied can be
    specified following the folder name, i.e. COPY NEWFOLDER 2-5.
     
    The key words CURRENT and LAST can also be specified in the range,
    in place of an actual number, i.e. CURRENT-LAST, 1-CURRENT, etc.
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `Specifies to copy all the messages in the old folder.
    `,
    			},
    			"/GROUPS": {
    				Description: `/GROUPS=(newsgroup,[...])
     
    Valid only if a NEWS group is selected.  Specifies to send the message to
    the specified NEWS group(s) in addition to the selected NEWS group.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Valid only if destination folder is a news group.  Specifies that header
    of message is to be included with the text when the text is copied.
    The default is /NOHEADER.
    `,
    			},
    			"/MERGE": {
    				Description: `Specifies that the original date and time of the copied messages are
    saved and that the messages are placed in correct chronological order 
    in the new folder.  This operation is lengthy if the new folder is large.
    `,
    			},
    			"/ORIGINAL": {
    				Description: `Specifies that the owner of the copied message will be the original owner
    of the message.  The default is that the copied message will be owned by
    the person copying the message.
    `,
    			},
    		},
    	},
    	"CREATE": {
    		Description: `Creates a folder of messages.  This is similar to the folders in the VMS
    MAIL utility.  Folders are often created so that messages of  a  similar
    topic are grouped separately, or to restrict reading of certain messages
    to  specified  users.   Once  created,  that  message  is  automatically
    selected  (see information on SELECT command).  The commands that can be
    used to modify the folder's characteristics  are:  MODIFY,  REMOVE,  SET
    ACCESS, SET BBOARD, SET NODE, and SET SYSTEM.
     
      Format:
        CREATE folder-name
     
    The  folder-name is limited to 25 letters and must not include spaces or
    characters that are also invalid  in  filenames  (this  is  because  the
    folder is stored in a file name created with the folder name).
     
    NOTE:  Creation  of folders may be a restricted command if the installer
    has  elected  to  install  it  as  such.   This  is  done  by  modifying
    BULLCOM.CLD.
    `,
    		Flags: dclish.Flags{
    			"/ALWAYS": {
    				Description: `Specifies that  the  folder  has  the  ALWAYS  attribute.   This  causes
    messages  in  the  folder  to  be displayed differently when logging in.
    SYSTEM messages will be displayed every time a user logs in, rather than
    just  once.   Non-SYSTEM  message  will also be displayed every time (in
    whatever mode is selected, i.e. BRIEF, SHOWNEW, or  READNEW)  until  the
    user  actually  reads  that  message  (or a later one).  This feature is
    meant for messages which are very important, and thus you want  to  make
    sure they are read.
    `,
    			},
    			"/BRIEF": {
    				Description: `Specifies that all users automatically have BRIEF set for this folder.
    Only a privileged user can use this qualifier.  (See HELP SET BRIEF for
    more information.)
    `,
    			},
    			"/DESCRIPTION": {
    				Description: `/DESCRIPTION=description
     
    Specifies the description of the folder, which is displayed using the
    SHOW FOLDER command.  If omitted, you are prompted for a description.
     
    If this folder is to receive messages from a network mailing list
    via the BBOARD feature, and you wish to use the POST and RESPOND/LIST
    commands, the address of the mailing list should be included in the
    description.  This is done by enclosing the address using <> and
    placing it at the end of the description, i.e.
     
                  INFOVAX MAILING LIST <INFO-VAX@KL.SRI.COM>
     
    If a mailer protocol is needs to be added to the network address in
    order for it to be sent by VMS MAIL, i.e. protocol%"address",  the
    appropriate protocol can be specified by either hardcoding it into the
    file BULLNEWS.INC before compiling BULLETIN, or by defining the system
    logical name BULL_NEWS_MAILER (it is the same protocol used by the NEWS
    feature in order to respond to NEWS messages).  The default protocol is
    IN%.  If desired, you can specify the protocol with the address, i.e. 
     
                  INFOVAX MAILING LIST <IN%"INFO-VAX@KL.SRI.COM">
    `,
    			},
    			"/ID": {
    				Description: `Designates that the name specified as the owner name is a rights
    identifier.  The creator's process must have the identifier presently
    assigned to it.  Any process which has that identifier assigned to it
    will be able to control the folder as if it were the folder's owner.
    This is used to allow more than one use to control a folder.
     
    Note: This feature will not work during remote access to the folder.
    `,
    			},
    			"/NODE": {
    				Description: `/NODE=node
     
    Specifies that the folder is a remote folder at the specified node.
    A remote folder is a folder in which the messages are actually stored
    on a folder at a remote DECNET node.  The specified node is checked to
    see if a folder of the same name is located on that node.  If so, the
    folder will then be modified to point to that folder.  For example if
    there was a folder on node A with name INFO, and you issued the command:
                            CREATE INFO/NODE=A
    from node B, then if INFO is selected on node B, you will actually
    obtain the folder INFO on node A.  In this manner, a folder can be shared
    between more than one node. This capability is only present if the BULLCP
    process is running on the remote node via the BULL/STARTUP command.
    If the remote folder name is different from the local folder name, the
    remote folder name is specified using the /REMOTENAME qualifier.
     
    NOTE: If a message is added to a remote node, the message is stored
    immediately.  However, a user logging into another node might not be
    immediately alerted that the message is present.  That information is
    only updated every 15 minutes (same algorithm for updating BBOARD
    messages), or if a user accesses that folder.  Thus, if the folder is
    located on node A, and the message is added from node B, and a user logs
    in to node C, the BULLETIN login notification might not notify the user
    of the message.  However, if the message is added with /BROADCAST, the
    message will be broadcasted immediately to all nodes.
    `,
    			},
    			"/NOTIFY": {
    				Description: `Specifies that all users automatically have NOTIFY set for this folder.
    Only a privileged user can use this qualifier.  (See HELP SET NOTIFY for
    more information.)
    `,
    			},
    			"/OWNER": {
    				Description: `/OWNER=username
    Specifies the owner of the folder.  This is a privileged command.
    See also /ID.
    `,
    			},
    			"/PRIVATE": {
    				Description: `Specifies that the folder can only be accessed by users who have been
    granted access via the SET ACCESS command.  Note: This option uses ACLs
    and users who are granted access must be entered into the Rights Data Base.
    If the RDB does not exist on your system, a privileged user will have to
    create it.  If a user is not in the RDB, this program will automatically
    enter the user into it (unless this feature was disabled  during the
    compilation of this program).  NOTE: See HELP SET ACCESS for more info.
    `,
    			},
    			"/READNEW": {
    				Description: `Specifies that all users automatically have READNEW set for this folder.
    Only a privileged user can use this qualifier.  (See HELP SET READNEW for
    more information.)
    `,
    			},
    			"/REMOTENAME": {
    				Description: `/REMOTENAME=foldername
    Valid only if /NODE is present, i.e. that the folder is a remote folder.
    Specifies the name of the remote folder name.  If not specified, it is
    assumed that the remote name is the same as the local name.
    `,
    			},
    			"/SHOWNEW": {
    				Description: `Specifies that all users automatically have SHOWNEW set for this folder.
    Only a privileged user can use this qualifier.  (See HELP SET SHOWNEW for
    more information.)
    `,
    			},
    			"/SEMIPRIVATE": {
    				Description: `Similar to /PRIVATE, except that the folder is restricted only with
    respect to adding or modifying messages.  All users can read the folder.
    `,
    			},
    			"/SYSTEM": {
    				Description: `Specifies that the folder is a SYSTEM folder.  A SYSTEM folder is
    allowed to have SYSTEM and SHUTDOWN messages added to it.  By default,
    the GENERAL folder is a SYSTEM folder.  This is a privileged command.
     
    If this is a remote folder, /SYSTEM cannot be specified unless the
    folder at the other node is also a SYSTEM folder.
    `,
    			},
    		},
    	},
    	"CURRENT": {
    		Description: `Displays the beginning of the message you are currently reading.  If
    you  are  reading  a long message and want to display the first part
    of the message again, you can enter the CURRENT command.
     
      Format:
     
        CURRENT
    `,
    		Flags: dclish.Flags{
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used to read the message.  This is
    useful for scanning a long message.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Specifies that if a message header exists, the header will be shown.
    If /HEADER or /NOHEADER is specified, the setting will apply for all
    further reads in the selected folder.  The default is /HEADER for non-
    NEWS folders, /NOHEADER for NEWS folders.  If the SET STRIP command
    is set for the folder, it will change the default to be /HEADER.
    `,
    			},
    		},
    	},
    	"DELETE": {
    		Description: `Deletes the specified message.  If no message is specified, the current
    message is deleted.  Only the original owner or a privileged user can
    delete a message.  Note that the message is not deleted immediately, but
    its expiration is set 15 minutes in the future.  This is to allow a user
    to recover the message using the UNDELETE command.  If you want the
    message deleted immediately, use the /IMMEDIATE qualifier.
     
      Format:
        DELETE [message_number][-message_number1]
     
    The message's relative number is found by the DIRECTORY command.  It is
    possible to delete a range of messages by specifying two numbers
    separated by a dash, i.e. DELETE 1-5.  However, a range cannot be
    specified if the folder is remote.
     
    The key words CURRENT and LAST can also be specified in the range,
    in place of an actual number, i.e. CURRENT-LAST, 1-CURRENT, etc.
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `Specifies to delete all the messages in the folder.  Note:  This will
    not work for remote folders.  Only one message can be deleted from a
    remote folder at a time.
    `,
    			},
    			"/IMMEDIATE": {
    				Description: `Specifies that the message is to be deleted immediately.
    `,
    			},
    			"/NODES": {
    				Description: `/NODES=(nodes[,...])
     
    Specifies to delete the message at the listed DECNET nodes.  The BULLETIN
    utility must be installed properly on the other nodes.  You can specify
    a different username to use at the other nodes by either using the
    USERNAME qualifier, or by specifying the nodename with 2 semi-colons
    followed by the username, i.e. nodename::username.  If you specify a
    username, you will be prompted for the password of the account on the
    other nodes.  The /SUBJECT must be specified to identify the specific
    message that is to be deleted.
     
    Additionally, you can specify logical names which translate to one or
    more node names.  I.e.  $ DEFINE ALL_NODES "VAX1,VAX2,VAX3", and then
    specify /NODES=ALL_NODES.  Note that the quotation marks are required.
    `,
    			},
    			"/SUBJECT": {
    				Description: `/SUBJECT=subject
     
    Specifies the subject of the bulletin to be deleted at a remote DECNET
    node.  The DECNET node must be specified with the /NODE qualifier.
    The specified subject need not be the exact subject of the message.
    It can be a substring of the subject.  This is in case you have forgotten
    the exact subject that was specified.  Case is not critical either.
    You will be notified if the deletion was successful.
    `,
    			},
    			"/USERNAME": {
    				Description: `Specifies username to be used at remote DECNET nodes when deleting messages
    on other DECNET nodes via the /NODE qualifier.
    `,
    			},
    		},
    	},
    	"DIRECTORY": {
    		Description: `Lists a summary of the messages.  The message number, submitter's name,
    date, and subject of each message is displayed.
     
      Format:
     
        DIRECTORY [folder]
     
    If  a  folder is specified, that folder is selected before the directory
    is listed.  Unless otherwise specified, listing starts  with  the  first
    newest message.  If there are no new messages, listing will start at the
    first message, or if a message has already been read, it will  start  at
    that message.
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `Lists all messages.  Used if the qualifiers /MARKED, /UNMARKED, /SEEN,
    or /UNSEEN were previously specified. 
    `,
    			},
    			"/DESCRIBE ": {
    				Description: `Valid when used with /FOLDERS.  Specifies to include description of
    folder. 
    `,
    			},
    			"/EXPIRATION": {
    				Description: `Shows the message's expiration date rather than the creation date.
    `,
    			},
    			"/END": {
    				Description: `/END=message_number
     
    Indicates the last message number you want to display.
    `,
    			},
    			"/FOLDERS": {
    				Description: `Lists the available message folders.  Shows last message date and number
    of  messages  in  folder.   An asterisk (*) next to foldername indicates
    that there are unread messages in  that  folder.   This  will  not  show
    newsgroups.  To see newsgroups, use the NEWS command or DIR/NEWS.
    `,
    			},
    			"/MARKED": {
    				Description: `Lists messages that have been marked (indicated by an asterisk).
    This is equivalent to selecting the folder with /MARKED, i.e. only
    marked messages will be shown and be able to be read.  To see all
    messages, use either /ALL, or reselect the folder. 
    `,
    			},
    			"/UNMARKED": {
    				Description: `Lists messages that have not been marked (marked messages are indicated
    by an asterisk).  Using /UNMARKED is equivalent to selecting the folder
    with /UNMARKED, i.e. only unmarked messages will be shown and be able
    to be read.  To see all messages, use either /ALL, or reselect the
    folder. 
    `,
    			},
    			"/SEEN": {
    				Description: `Lists messages that have been seen (indicated by a greater than sign). 
    Using /SEEN is equivalent to selecting the folder with /SEEN, i.e. only
    seen messages will be shown and be able to be read.  To see all
    messages, use either /ALL, or reselect the folder. 
    `,
    			},
    			"/UNSEEN": {
    				Description: `Lists messages that have not been seen (seen message are indicated by a
    greater than sign). Using /UNSEEN is equivalent to selecting the folder
    with /UNSEEN, i.e. only unseen messages will be shown and be able to be
    read.  To see all messages, use either /ALL, or reselect the folder. 
    `,
    			},
    			"/NEW": {
    				Description: `Specifies  to  start  the  listing  of  messages  with  the first unread
    message.
    `,
    			},
    			"/NEWS": {
    				Description: `Lists the available news groups.  This does the same thing as  the  NEWS
    command.  See that command for qualifiers which apply.
    `,
    			},
    			"/PRINT": {
    				Description: `Specifies that the text of the messages which are found by the
    DIRECTORY command are to be printed.  All qualifiers which are valid
    for the PRINT command are valid in conjunction with /PRINT.  The list
    of messages to be printed will be displayed on the terminal (in
    nopaging format). 
    `,
    			},
    			"/REPLY": {
    				Description: `Specifies that only messages which are replies to the current message
    are to be displayed.  This cannot be used in conjunction with /MARKED.
    `,
    			},
    			"/SEARCH": {
    				Description: `/SEARCH=[string]
     
    Specifies that only messages which contain the specified string are
    to be displayed.  This cannot be used in conjunction with /MARKED.
    If no string is specified, the previously specified string is used.
    `,
    			},
    			"/SINCE": {
    				Description: `/SINCE=date
     
    Displays a listing of all the messages created on or after the
    specified date.  If no date is specified, the default is TODAY.
    `,
    			},
    			"/START": {
    				Description: `/START=message_number
     
    Indicates the first message number you want to display.  For example,
    to  display  all the messages beginning with number three, enter the
    command line DIRECTORY/START=3.  Not valid with /FOLDER.
    `,
    			},
    			"/SUBJECT": {
    				Description: `/SUBJECT=[string]
     
    Specifies that only messages which contain the specified string in it's
    subject header are to be displayed.  This cannot be used in conjunction
    with /MARKED.  If no string is specified, the previously specified string
    is used.
    `,
    			},
    		},
    	},
    	"EXIT": {
    		Description: `Exits the BULLETIN program.
    `,
    		Action: ActionExit,
    	},
    	"EXTRACT": {
    		Description: `Synonym for FILE command.
    `,
    	},
    	"FILE": {
    		Description: `Copies the current message to the named file.  The file-name parameter
    is required.  If the file exists, the message is appended to the file,
    unless the /NEW qualifier is specified.
     
      Format:
        FILE filename [message_number][-message_number1],[...]
     
    A range of messages to be copied can optionally be specified, i.e.
    FILE 2-5.
     
    The key words CURRENT and LAST can also be specified in the range,
    in place of an actual number, i.e. CURRENT-LAST, 1-CURRENT, etc.
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `Copies all the messages in the current folder.
    `,
    			},
    			"/FF": {
    				Description: `Specifies that a form feed is placed between messages in the file.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Controls whether a header containing the owner, subject, and date of the 
    message is written in the file.  The default is to write the header.
    `,
    			},
    			"/NEW": {
    				Description: `Specifies that a new file is to be created.  Otherwise, if the specified
    file exists, the file would be appended to that file.
    `,
    			},
    		},
    	},
    	"FIRST": {
    		Description: `Specifies that the first message in the folder is to be read.
    `,
    	},
    	"FORWARD": {
    		Description: `Synonym for MAIL command.
    `,
    	},
    	"HELP": {
    		Description: `To obtain help on any topic, type:
     
            HELP  topic
    `,
    		Action: ActionHelp,
    	},
    	"INDEX": {
    		Description: `Gives directory listing of all folders in alphabetical order. If the
    INDEX command is re-entered while the listing is in progress, the listing
    will skip to the next folder.  This is useful for skipping a particular
    folder.  It also can be used to continue the listing from where one left
    off after one has read a message.
     
      Format:
           INDEX
    `,
    		Flags: dclish.Flags{
    			"/MARKED": {
    				Description: `Lists messages that have been marked (marked messages are indicated by
    an asterisk).  This is equivalent to selecting the folder with /MARKED,
    i.e. only marked messages will be shown and be able to be read. 
    `,
    			},
    			"/UNMARKED": {
    				Description: `Lists messages that have not been marked (marked messages are indicated
    by an asterisk).  Using /UNMARKED is equivalent to selecting the folder
    with /UNMARKED, i.e. only unmarked messages will be shown and be able
    to be read.
    `,
    			},
    			"/SEEN": {
    				Description: `Lists messages that have been seen (indicated by a greater than sign). 
    Using /SEEN is equivalent to selecting the folder with /SEEN, i.e. only
    seen messages will be shown and be able to be read.
    `,
    			},
    			"/UNSEEN": {
    				Description: `Lists messages that have not been seen (seen message are indicated by a
    greater than sign). Using /UNSEEN is equivalent to selecting the folder
    with /UNSEEN, i.e. only unseen messages will be shown and be able to be
    read.
    `,
    			},
    			"/NEW": {
    				Description: `Specifies to start the listing of each folder with the first unread message.
    Otherwise, the listing will start with the first message in the folder.
    If the INDEX command is re-entered for continuing the listing, /NEW must
    be respecified.
    `,
    			},
    			"/RESTART": {
    				Description: `If specified, causes the listing to be reinitialized and start from the
    first folder.
    `,
    			},
    			"/SUBSCRIBE": {
    				Description: `If specified, lists only those news folders which have been subscribed to.
    `,
    			},
    		},
    	},
    	"KEYPAD": {
    		Description: `+--------+--------+--------+--------+
                 | PF1    | PF2    | PF3    | PF4    |
                 |   GOLD |   HELP | EXTRACT|SHOW KEY|
                 |        |ST NOKEY|  FILE  |SH KY/PR|
                 |--------|--------|--------|--------|
                 | 7      | 8      | 9      | --     |
                 |  ADD   | REPLY  |  MAIL  |READ/NEW|
                 | ADD/EDI|RP/ED/EX|M/NOHEAD|SHOW NEW|
                 |--------|--------|--------|--------|
                 | 4      | 5      | 6      | ,      |
                 | CURRENT| RESPOND|  LAST  | DIR/NEW|
                 |CURR/EDI|RS/ED/EX|        |  INDEX |
                 |--------|--------|--------|--------|
                 | 1      | 2      | 3      |ENTER   |
                 |  BACK  |  PRINT |   DIR  |        |
                 |  NEXT  |P/NONOTI|DIR/FOLD|        |
                 |--------+--------|--------| ENTER  |
                 | 0               | .      | SELECT |
                 | SHOW FOLDER/FULL| DELETE |        |
                 |    SHOW FLAGS   | UNDELE |        |
                 +-----------------+--------+--------+
    `,
    	},
    	"LAST": {
    		Description: `Displays the last message in the current folder.
     
      Format:
           LAST
    `,
    		Flags: dclish.Flags{
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used to read the message.  This is
    useful for scanning a long message.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Specifies that if a message header exists, the header will be shown.
    If /HEADER or /NOHEADER is specified, the setting will apply for all
    further reads in the selected folder.  The default is /HEADER for non-
    NEWS folders, /NOHEADER for NEWS folders.  If the SET STRIP command
    is set for the folder, it will change the default to be /HEADER.
    `,
    			},
    		},
    	},
    	"MAIL": {
    		Description: `Invokes the VAX/VMS Personal Mail Utility (MAIL) to send the message
    which you are reading to the specified recipients.
     
      Format:
     
        MAIL recipient-name[s]
     
    The input for the recipient name is exactly the same format as used by
    the MAIL command at DCL level.  Note that this means when specifying an
    address that has quotes, in order to pass the quotes you must specify
    triple quotes.  I.e. a network address of the form xxx%"address" must
    be specified as xxx%"""address""".
    `,
    		Flags: dclish.Flags{
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used to edit the message before
    mailing it.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Controls whether a header containing the owner, subject, and date of the 
    message is written in the mail.  The default is to write the header.
    `,
    			},
    			"/SUBJECT": {
    				Description: `/SUBJECT=text
     
    Specifies the subject of the mail message. If the text consists of more
    than one word, enclose the text in quotation marks (").
     
    If you omit this qualifier, the description of the message will be used
    as the subject.
    `,
    			},
    		},
    	},
    	"MARK": {
    		Description: `Sets the current or message-id message as marked. Marked messages are
    displayed with an asterisk in the left hand column of the directory
    listing.  A marked message can serve as a reminder of important
    information.  The UNMARK command sets the current or message-id message
    as unmarked.
     
       Format:
     
           MARK [message-number or numbers]
           UNMARK [message-number or numbers]
     
    NOTE: The list of marked messages for non-NEWS folders are stored in a
    file username.BULLMARK, and NEWS folders are stored in
    username.NEWSMARK. The files are created in the directory pointed to by
    the logical name BULL_MARK.  If BULL_MARK is not defined, SYS$LOGIN
    will be used. 
    `,
    	},
    	"MODIFY": {
    		Description: `Modifies the database information for the current folder.  Only the
    owner of the folder or a user with privileges can use this command. 
     
      Format:
     
        MODIFY
    `,
    		Flags: dclish.Flags{
    			"/DESCRIPTION": {
    				Description: `Specifies a new description for the folder.  You will be prompted for
    the text of the description.
     
    NOTE: If this folder is to receive messages from a network mailing list
    via the BBOARD feature, and you wish to use the POST and RESPOND/LIST
    commands, the address of the mailing list should be included in the
    description.  This is done by enclosing the address using <> and
    placing it at the end of the description, i.e.
     
                  INFOVAX MAILING LIST <IN%"INFO-VAX@KL.SRI.COM">
    `,
    			},
    			"/ID": {
    				Description: `Designates that the name specified as the owner name is a rights
    identifier.  The creator's process must have the identifier presently
    assigned to it.  Any process which has that identifier assigned to it
    will be able to control the folder as if it were the folder's owner.
    This is used to allow more than one use to control a folder.
     
    Note: This feature will not work during remote access to the folder.
    `,
    			},
    			"/NAME": {
    				Description: `/NAME=foldername
     
    Specifies a new name for the folder.
    `,
    			},
    			"/OWNER": {
    				Description: `/OWNER=username
     
    Specifies a new owner for the folder.  If the owner does not have
    privileges, BULLETIN will prompt for the password of the new owner
    account in order to okay the modification.  See also /ID.
    `,
    			},
    		},
    	},
    	"MOVE": {
    		Description: `Moves a message to another  folder and deletes it from  the  current
    folder.
     
      Format:
     
        MOVE folder-name [message_number][-message_number1]
     
    The folder-name is the name of the folder to which the message is to be
    be moved to.  Optionally, a range of messages which are to be moved can be
    specified following the folder name, i.e. COPY NEWFOLDER 2-5.  However,
    if the old folder is remote, they will be copied but not deleted, as
    only one message can be delted from a remote folder at a time.
     
    The key words CURRENT and LAST can also be specified in the range,
    in place of an actual number, i.e. CURRENT-LAST, 1-CURRENT, etc.
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `Specifies to move all the messages from the old folder.  Note:  If the
    old folder is remote, they will be copied but not deleted, as only one
    message can be deleted from a remote folder at a time.
    `,
    			},
    			"/GROUPS": {
    				Description: `/GROUPS=(newsgroup,[...])
     
    Valid only if a NEWS group is selected.  Specifies to send the message to
    the specified NEWS group(s) in addition to the selected NEWS group.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Valid only if destination folder is a news group.  Specifies that header
    of message is to be included with the text when the text is copied.
    The default is /NOHEADER.
    `,
    			},
    			"/MERGE": {
    				Description: `Specifies that the original date and time of the moved messages are
    saved and that the messages are placed in correct chronological order 
    in the new folder.  This operation is lengthy if the new folder is large.
    `,
    			},
    			"/ORIGINAL": {
    				Description: `Specifies that the owner of the moved message will be the original owner
    of the message.  The default is that the moved message will be owned by
    the person moving the message.
    `,
    			},
    		},
    	},
    	"NEWS": {
    		Description: `Displays the list of available news groups.
     
    Format:
     
    	NEWS [string]
     
    If  the  string is specified, lists news groups whose name contains that
    string.  If the string contains an asterisk, a wild card match  will  be
    applied.   I.e.  if ALT* is specified, all groups starting with ALT will
    be displayed.
     
    The  status  column of the display  shows the status of the news  group.
    "y"  means the news group is available.  "m"  means  the  news  group is
    moderated, and posting may or may not be allowable.  "x" means the  news
    group has been deactived by the local server.  "=" means the news  group
    has been renamed.  The new name is shown on the display line immediately
    following the old name.
    `,
    		Flags: dclish.Flags{
    			"/NEWGROUP": {
    				Description: `If specified, will list new news groups that have been added since the
    last time that a user has accessed a news group.  If there are new
    groups, a user will see a message indicating that there are new groups
    when the user accesses a news group.
    `,
    			},
    			"/START": {
    				Description: `/START=string
     
    If specified, the list will start with the  first  group  which  follows
    alphabetically  after  that  string.  I.e. if /START=B is specified, the
    list will start with groups whose name starts with a B.
    `,
    			},
    			"/SUBSCRIBE": {
    				Description: `If specified, lists only those news folders which have been subscribed to.
    An asterisk before the group indicates that new messages are present for
    that folder.
    `,
    			},
    		},
    	},
    	"NEXT": {
    		Description: `Skips to the next message and displays it.  This is useful when paging
    through the messages and you encounter a particularly long message
    that you would like to skip over.
    `,
    		Flags: dclish.Flags{
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used to read the message.  This is
    useful for scanning a long message.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Specifies that if a message header exists, the header will be shown.
    If /HEADER or /NOHEADER is specified, the setting will apply for all
    further reads in the selected folder.  The default is /HEADER for non-
    NEWS folders, /NOHEADER for NEWS folders.  If the SET STRIP command
    is set for the folder, it will change the default to be /HEADER.
    `,
    			},
    		},
    	},
    	"POST": {
    		Description: `If a NEWS group is selected, posts a message to that group.  If a normal
    folder is selected, sends a message via MAIL to the network mailing list
    which  is  associated  with  the  selected  folder.   The address of the
    mailing  list  must  be  stored  using  either   CREATE/DESCRIPTION   or
    MODIFY/DESCRIPTION.  See help on those commands for more information.
     
      Format:
        POST [file-name]
    `,
    		Flags: dclish.Flags{
    			"/CC": {
    				Description: `/CC=user[s]
    Specifies additional users that should receive the mail message.
    `,
    			},
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used for creating the mail message.
    `,
    			},
    			"/EXTRACT": {
    				Description: `Specifies that the text of the message that is being read should be
    included in the mail message.  This qualifier is valid only when used
    with /EDIT.  The text of the message is indented with > at the
    beginning of each line.  This can be suppressed with /NOINDENT.
    `,
    			},
    			"/GROUPS": {
    				Description: `/GROUPS=(newsgroup,[...])
     
    Valid only if a NEWS group is selected.  Specifies to send the message to
    the specified NEWS group(s) in addition to the selected NEWS group.
    `,
    			},
    			"/NOINDENT": {
    				Description: `See /EXTRACT for information on this qualifier.
    `,
    			},
    			"/NOSIGNATURE": {
    				Description: `Specifies to suppress the automatically appended signature, if one exists.
    Signatures are appended for postings to mailing lists and to responds.
    See the help topic POST Signature_file for signature information.
    `,
    			},
    			"/SUBJECT": {
    				Description: `/SUBJECT=text
     
    Specifies the subject of the mail message. If the text consists of more
    than one word, enclose the text in quotation marks (").
     
    If you omit this qualifier, you will prompted for the subject.
    `,
    			},
    			"Signature_file": {
    				Description: `It is possibly to have the contents of a file be automatically appended
    to the end of a message added with the POST and/or the RESPOND command.
    This file is known as a signature file, and it typically contains one's
    name, address, or perhaps a favorite quote.  The name of the file should
    be SYS$LOGIN:BULL_SIGNATURE.TXT, and it should be a simple text file.  In
    order to specify a different file to use, define the logical name
    BULL_SIGNATURE to point to the desired file.
     
    It is possible to specify that portions or all of the signature file are
    to be included only for specific folders or news groups.  Simply surround
    the exclusive text starting with the line "START <folder-name>" and ending
    with the line "END", i.e.
     
    START INFOVAX
    This line will only appear in the INFOVAX folder.
    END
    START MISC.TEST
    This line will only appear in the news folder MISC.TEST.
    END
    This line will appear in all postings.
     
    Note that an empty line is automatically created to separate the text of
    the message and the contents of the signature file.
    `,
    			},
    		},
    	},
    	"PRINT": {
    		Description: `Queues a copy of the message you are currently  reading  (or  have 
    just read)  for  printing.   The file created by the PRINT command
    is not released to the print queue until you exit, unless you add
    the qualifier /NOW or change one of the print job's qualifiers.
    Multiple messages are concatenated into one print job.
     
       Format:
     
           PRINT [message_number][-message_number1],[...]
     
    A range of messages to be printed can optionally be specified, i.e.
    PRINT 2-5.
     
    The key words CURRENT and LAST can also be specified in the range,
    in place of an actual number, i.e. CURRENT-LAST, 1-CURRENT, etc.
     
    NOTE:  The qualifier /PRINT is present on the DIRECTORY command.  This
    provides more flexibility than is present with the PRINT command.  For
    example, if you want to print all messages with a particular string in
    it's subject line, DIRECTORY/PRINT/SUBJ would allow you do it.
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `Prints all the messages in the current folder.
    `,
    			},
    			"/FORM": {
    				Description: `Specifies the name or number of the form that you want for the print
    job.  Codes for form types are installation-defined.  You can use the
    SHOW QUEUE/FORM command at DCL level to find out the form types
    available for your system.  Use the SHOW QUEUE/FULL command at DCL
    level to find out the name of the mounted form and the default form for
    a particular queue.  If you specify a form whose stock is different
    from the stock of the form mounted on the queue, your job is placed in
    a pending state until the stock of the mounted form of the queue is
    set equal to the stock of the form associated with the job.  (In order
    to have your job print, the system manager should stop the queue,
    physically change the paper stock on the output device, and restart the
    queue specifying the new form type as the mounted form.)
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Controls whether a header containing the owner, subject, and date of the 
    message is printed at the beginning. The default is to write the header.
    `,
    			},
    			"/NOTIFY": {
    				Description: `/[NO]NOTIFY
     
    Indicates that you will be notified by a broadcast message  when  the
    file or files have been printed.  If /NONOTIFY is specified, there
    is no notification.  The default is /NOTIFY.
    `,
    			},
    			"/NOW": {
    				Description: `Sends all messages that have been queued for printing with the PRINT
    command during this session to the printer. 
    `,
    			},
    			"/QUEUE": {
    				Description: `/QUEUE=queue_name
     
    The name of the queue to which a message is to be sent.  If the /QUEUE
    qualifier  is  not  specified,  the message is queued to SYS$PRINT.
    `,
    			},
    		},
    	},
    	"READ": {
    		Description: `Displays  the  specified message.  If you do not specify a message, then
    the first time you enter the command, the first message  in  the  folder
    will  be  displayed.   However, if there are new messages, the first new
    message will be displayed.  Each time you enter the  command,  the  next
    page, or if there are no more pages, the next message will be displayed.
     
      Format:
        READ [message-number]
     
    The message's relative number is found by the DIRECTORY command.
    If you specify a number greater than the number of messages in the
    folder, the last message in the folder will be displayed.
     
    NOTE: The READ command can be abbreviated by omitting the READ command,
    i.e. typing the command "2" is equivalent to "READ 2", and simply
    hitting the <RETURN> key is equivalent to "READ". 
     
    BULLETIN normally stores only the latest message that has been read per
    folder. It can optionally store and display which messages have been
    read in a folder on a per message basis.  For information on this, see
    the help on the SEEN command. 
    `,
    		Flags: dclish.Flags{
    			"/ALL": {
    				Description: `Specifies to read all messages.  Used after /MARKED, /UNMARKED, /SEEN,
    or /UNSEEN had been specified.
    `,
    			},
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used to read the message.  This is
    useful for scanning a long message.
    `,
    			},
    			"/HEADER": {
    				Description: `/[NO]HEADER
     
    Specifies that if a message header exists, the header will be shown.
    If /HEADER or /NOHEADER is specified, the setting will apply for all
    further reads in the selected folder.  The default is /HEADER for non-
    NEWS folders, /NOHEADER for NEWS folders.  If the SET STRIP command
    is set for the folder, it will change the default to be /HEADER.
    `,
    			},
    			"/MARKED": {
    				Description: `Specifies to read only messages that have been marked (marked messages
    are indicated by an asterisk).  Using /MARKED is equivalent to
    selecting the folder with /MARKED, i.e. only marked messages will be
    shown and be able to be read.   To see all messages, use either /ALL,
    or reselect the folder. 
    `,
    			},
    			"/UNMARKED": {
    				Description: `Specifies to read only messages that have not been marked (marked
    messages are indicated by an asterisk).  Using /UNMARKED is equivalent
    to selecting the folder with /UNMARKED, i.e. only unmarked messages
    will be shown and be able to be read.  To see all messages, either
    reselect the folder or specify /ALL.
    `,
    			},
    			"/SEEN": {
    				Description: `Specifies to read only messages that have been seen (indicated by a
    greater than sign). Using /SEEN is equivalent to selecting the folder
    with /SEEN, i.e. only seen messages will be shown and be able to be
    read.  To see all messages, use either /ALL, or reselect the folder. 
    `,
    			},
    			"/UNSEEN": {
    				Description: `Specifies to read only messages that have not been seen (seen message
    are indicated by a greater than sign). Using /UNSEEN is equivalent to
    selecting the folder with /UNSEEN, i.e. only unseen messages will be
    shown and be able to be read.  To see all messages, use either /ALL, or
    reselect the folder. 
    `,
    			},
    			"/NEW": {
    				Description: `Specifies to read the first unread message.
    `,
    			},
    			"/PAGE": {
    				Description: `/[NO]PAGE
     
    Specifies that the display of the message will pause when it reaches the
    end of the page.  If /NOPAGE is specified, the whole message will be
    displayed.  This is useful for terminals that can store more than one
    screenful at a time, and that have a remote printer that can then print
    the contents of the terminal's memory.
    `,
    			},
    			"/SINCE": {
    				Description: `/SINCE=date
     
    Specifies to read the first message created on or after the specified
    date.  If no date is specified, the default is TODAY.
    `,
    			},
    		},
    	},
    	"REMOVE": {
    		Description: `Removes a folder.  Only the owner of a folder or a privileged  user  can
    remove the folder.
     
      Format:
        REMOVE folder-name
    `,
    	},
    	"REPLY": {
    		Description: `Adds message with subject of message being the subject of the  currently
    read message with "RE:" preceeding it.  Format and qualifiers is exactly
    the same as the ADD command except for /NOINDENT and /EXTRACT.
     
      Format:
        REPLY [file-name]
    `,
    		Flags: dclish.Flags{
    			"/EXTRACT": {
    				Description: `Specifies that the text of the message should be included in the reply
    mail message.  This qualifier is valid only when used with /EDIT.  The
    text of the message is indented with > at the beginning of each line.
    This can be suppressed with /NOINDENT.
    `,
    			},
    			"/NOINDENT": {
    				Description: `See /EXTRACT for information on this qualifier.
    `,
    			},
    		},
    	},
    	"RESPOND": {
    		Description: `Invokes the VAX/VMS Personal Mail Utility (MAIL) to send a reply mail
    message to the owner of the currently read message.
     
      Format:
        RESPOND [file-name]
     
    If you wish to use another method for sending the mail, define BULL_MAILER
    to point to a command procedure.  This procedure will then be executed in
    place of MAIL, and the parameters passed to it are the username and subject
    of the message.
    `,
    		Flags: dclish.Flags{
    			"/CC": {
    				Description: `/CC=user[s]
    Specifies additional users that should receive the reply.
    `,
    			},
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used for creating the reply mail
    message.
    `,
    			},
    			"/EXTRACT": {
    				Description: `Specifies that the text of the message should be included in the reply
    mail message.  This qualifier is valid only when used with /EDIT.  The
    text of the message is indented with > at the beginning of each line.
    This can be suppressed with /NOINDENT.
    `,
    			},
    			"/GROUPS": {
    				Description: `/GROUPS=(newsgroup,[...])
     
    Valid only if a NEWS group is selected and /LIST is present.  Specifies
    to send the message to the specified NEWS group(s) in addition to the
    selected NEWS group.
    `,
    			},
    			"/LIST": {
    				Description: `Specifies that the reply should also be sent to the network mailing list
    associated with the folder.  The mailing list address should be stored
    in the folder description.  See CREATE/DESCRIPTION or MODIFY/DESCRIPTION
    for more informaton.
    `,
    			},
    			"/NOINDENT": {
    				Description: `See /EXTRACT for information on this qualifier.
    `,
    			},
    			"/NOSIGNATURE": {
    				Description: `Specifies to suppress the automatically appended signature, if one exists.
    Signatures are appended for postings to mailing lists and to responds.
    See the help topic POST Signature_file for signature information.
    `,
    			},
    			"/SUBJECT": {
    				Description: `/SUBJECT=text
     
    Specifies the subject of the mail message. If the text consists of more
    than one word, enclose the text in quotation marks (").
     
    If you omit this qualifier, the description of the message will be used
    as the subject preceeded by "RE: ".
    `,
    			},
    		},
    	},
    	"QUIT": {
    		Description: `Exits the BULLETIN program.
    `,
    		Action: ActionQuit,
    	},
    	"SEARCH": {
    		Description: `Searches the currently selected folder for the  message  containing  the
    first occurrence of the specified text string.
     
       Format:
     
           SEARCH [search-string]
     
    The search starts from the first message in the current folder.  The
    search includes both the text of the message, and the description header.
    If a "search-string" is not specified, a search is made using the
    previously specified string, starting with the message following the
    one you are currently reading (or have just read).  Once started, a
    search can be aborted by typing a CTRL-C.
    `,
    		Flags: dclish.Flags{
    			"/EDIT": {
    				Description: `Specifies that the editor is to be used for reading the message.
    `,
    			},
    			"/FOLDER": {
    				Description: `/FOLDER=(folder,[...])
     
    Specifies a list of folders to be searched.  The search will start by
    selecting the first folder in the list and searching the messages for
    a match.  If, during a search, no more matches or messages are found,
    the next folder in the list is automatically selected.  The presently
    selected folder can be included in the search by specifying "" as the
    first folder in the list.
    `,
    			},
    			"/REPLY": {
    				Description: `Specifies that messages are to be searched for that are replies to the
    currently read message, or the message specified by /START.  Replies are
    messages which have subject of the original message prefaced by "Re:".
    `,
    			},
    			"/REVERSE": {
    				Description: `Specifies that the messages are to be searched in reverse order.  If
    no starting message is specified, the search is started from the last
    message.
    `,
    			},
    			"/START": {
    				Description: `/START=message_number
     
    Specifies the message number to start the search at.
    `,
    			},
    			"/SUBJECT": {
    				Description: `Specifies that only the subject of the messages are to be searched.
    `,
    			},
    		},
    	},
    	"SEEN": {
    		Description: `Sets the current or message-id message as seen. This allows you to keep
    track of messages on a per message basis.  Seen messages are displayed
    with a greater than sign in the left hand column of the directory
    listing.  Once you have used the SEEN command once, messages will be
    automatically be set as being SEEN when they are read.  The UNSEEN
    command sets the current or message-id message as unseen. 
     
       Format:
     
           SEEN [message-number or numbers]
           UNSEEN [message-number or numbers]
     
    Keeping track of seen messages requires very little overhead for NEWS
    folders.  However, there is a moderate overhead for regular non-NEWS
    folders.  If you have used the SEEN command and wish to disable the
    automatic marking of messages in regular folders as SEEN when they are
    read, type the command SEEN/NOREAD.  To reenable, simply use the SEEN
    command again. 
     
    NOTE: The list of SEEN messages for non-NEWS folders are stored in a
    file username.BULLMARK, and NEWS folders are stored in
    username.NEWSMARK. The files are created in the directory pointed to by
    the logical name BULL_MARK.  If BULL_MARK is not defined, SYS$LOGIN
    will be used. 
    `,
    	},
    	"SELECT": {
    		Description: `Selects a folder of messages.  See HELP Folders for a description  of  a
    folder.   Once a folder has been selected, all commands, i.e. DIRECTORY,
    READ, etc. will apply only to those messages.  Use the CREATE command to
    create  a  folder.   Use the DIRECTORY/FOLDER command to see the list of
    folders that have been created.
     
     Format:
     
         SELECT [node-name::][folder-name]
     
    The complete folder name need not be specified.  BULLETIN  will  try  to
    find the closest matching name.  I.e. INFOV can be used for INFOVAX.
     
    Omitting the folder name will select the default general messages.
     
    The  node  name can be specified only if the remote node has the special
    BULLCP process running (invoked by BULLETIN/STARTUP command.)
     
    After selecting a folder, the user will notified of the number of unread
    messages,  and  the  message  pointer will be placed at the first unread
    message.
     
    BULLETIN automatically determines if the selcted name is a NEWS group by
    detecting if a period is present in the name being  specified,  as  most
    NEWS  groups  contain  a  period,  whereas  a real folder cannot.  A few
    special NEWS groups, i.e. JUNK and CONTROL, do not contain a period.  If
    desired,  you can select these groups by enclosing them in double quotes
    ("), and typing the name in lower case.
    `,
    		Flags: dclish.Flags{
    			"/MARKED": {
    				Description: `Selects  only messages that have been marked (indicated by an asterisk).
    After using /MARKED, in order to see all messages, the folder will  have
    to be reselected.
    `,
    			},
    		},
    	},
    	"SET": {
    		Description: `The SET command  is  used  with  other  commands  to  define  or  change
    characteristics of the BULLETIN Utility.
     
      Format:
     
        SET option
    `,
    		Flags: dclish.Flags{
    			"ACCESS": {
    				Description: `Controls  access  to  a  private  folder.   A private folder can only be
    selected by users who have been granted access.  Only the owner of  that
    folder is allowed to grant access.
     
      Format:
     
        SET [NO]ACCESS id-name [folder-name]
     
    The id-name can be one or more ids from the system Rights  Database  for
    which  access  is  being  modified.   It  can  also be a file name which
    contains a list of  ids.   For  more  information  concerning  usage  of
    private  folders, see HELP CREATE /PRIVATE.  NOTE: Access is created via
    ACLs.  If a user's process privileges are set  to  override  ACLs,  that
    user  will  be  able  to  access  the folder even if access has not been
    granted.
     
    It  is suggested that if you plan on granting access to many users, that
    you create an id using the AUTHORIZE utility and then use the SET ACCESS
    command  to  grant  access  to  that id.  Then, you can use the GRANT/ID
    command in AUTHORIZE to grant the id to users, and this will give  those
    users  access to the folder.  This is preferred because of problems with
    running into system quota when checking for acls on a file with a  large
    amount  of  acls.   It  is also means that you don't have to remember to
    remove the access for that user from a folder if that  user  is  removed
    from the system.
     
    A user with BULLETIN privileges (see HELP SET  PRIV)  will  be  able  to
    select a protected folder regardless of the access settings.  However, a
    user without explicit access will not receive login notifications of new
    messages,  and thus will not be able to set any login flags.  (NOTE:  If
    such a user selects such a folder and then uses SET ACCESS to grant  him
    or  herself  access,  the user must reselect the folder in order for the
    new access to take affect in order to be able to set login flags.)
    3 id
    The id-name can be one or  more  ids  contained  in  the  system  Rights
    Database.   This  includes  usernames  and  UICs.  A UIC that contains a
    comma must be enclosed in quotes.   UICs  can  contain  wildcards,  i.e.
    "[130,*]".   Note that by default, a process is given the process rights
    id SYS$NODE_nodename, where nodename is the decnet nodename.   Thus,  by
    specifing  this id, a folder can be restricted to a specific node, which
    is useful when the folder is shared among nodes in a cluster.
     
    Alternatively,  the  id-name  can be a filename which contains a list of
    ids.  The filename should be preceeded by a "@".  If the suffix  is  not
    specified, it will be assumed that the suffix is ".DIS" .
    3 /ALL
    Specifies that access to the folder is granted to all users.   If  /READ
    is  not  specified,  the  folder will no longer be private.  If /READ is
    specified, all users will have read access, but  only  privileged  users
    will  have  write access (of course non-privileged users can gain access
    via a later SET ACCESS command.)
     
    Format:
     
        SET ACCESS /ALL [folder-name]
    3 /READ
    Specifies that access to the folder will be limited to being able to
    read the messages.
    3 Warning
    If  a  user  logs  in after a private folder has been created but before
    being given access, and then is given  access,  any  defaults  that  the
    folder  has,  i.e. /BRIEF, /READNEW, & /NOTIFY, will not be set for that
    user. This is because if the  id  is  not  a  username,  it  becomes  an
    extremely  lengthy  operation  to check each user to see if have that id
    assigned to them.  The alternative is to set the defaults for all  users
    after  every  SET  ACCESS,  but that might cause problems with users who
    have manually reset those defaults.  The  correct  solution  requires  a
    large programming modification, which will be done in a later version.
    `,
    			},
    			"ALWAYS": {
    				Description: `Specifies  that  the  selected  folder  has  the ALWAYS attribute.  This
    causes messages in the folder to be displayed differently  when  logging
    in.  SYSTEM messages will be displayed every time a user logs in, rather
    than just once.  Non-SYSTEM message will also be  displayed  every  time
    (in  whatever  mode  is selected, i.e. BRIEF, SHOWNEW, or READNEW) until
    the user actually reads that message (or a later one).  This feature  is
    meant  for  messages which are very important, and thus you want to make
    sure they are read.
     
      Format:
     
        SET [NO]ALWAYS
    `,
    			},
    			"BBOARD": {
    				Description: `Specifies  a username to be used as a BBOARD destination.  Mail which is
    sent to that user are converted into messages.  This command will  apply
    to  the  selected folder, and each folder can have its own BBOARD.  Only
    privileged users or owners of the folders can  set  BBOARD.   Note:  The
    specified  account  must  have  the DISUSER flag specified in the system
    authorization file, and it either must be given  SYSPRV  privileges,  or
    the  scratch  bboard_directory  (specified when compiling BULLETIN) must
    have world rwed  protection.   Also,  certain  system  parameters  which
    affect  detached  subprocesses  are  usually  too low for the subprocess
    which is spawned to read the mail.  The  parameters  and  the  suggested
    values  are:  PQL_DPGFLQUOTA = 10000, PQL_DWSQUOTA = 500, and PQL_DFILLM
    = 30.  If you are not using the BULLCP process, the subprocess limit for
    users must be at least 2.
     
      Format:
     
        SET BBOARD [username]
     
    BBOARD cannot be set for remote folders.   See  also  the  commands  SET
    STRIP and SET DIGEST for options on formatting BBOARD messages.
     
    If BULLCP is running, BBOARD is updated every 15 minutes.  If you want
    to length this period, define BULL_BBOARD_UPDATE to be the number of
    minutes, between updates.  I.e. DEFINE/SYSTEM BULL_BBOARD_UPDATE "30"
    will cause the updates to be don every 30 minutes.
     
    NOTE: If you want to control the expiration date on a per message basis,
    you can do so by adding a special header line to the message.  The form
    is Expires: or X-Expires: followed by the date in the form DD MMM YYYY.
    The time will always be 00:00, even if the time is specified on the line.
    3 /EXPIRATION
     /EXPIRATION=days
     /NOEXPIRATION
     
    Specifies the number of days the message created by the BBOARD is to  be
    retained.   The  default  is  14  days.   The  highest limit that can be
    specified is 30 days.  This can be overridden by a user with privileges.
    If /NOEXPIRATION is specified, messages will become permanent.
     
    NOTE:  This  value is the same value as specified by SET DEFAULT_EXPIRE.
    If one is changed, the other will change also.
    3 /SPECIAL
    Specifies that the input should be processed  using  a  special  command
    procedure,  and  not  to  use the simple VMS MAIL to message conversion.
    Specifying a username is optional.  To remove  this  feature,  you  must
    either  SET  NOBBOARD,  or  SET  BBOARD  and  specify  a  username.  See
    installation notes for exactly how to use this feature.
    3 /VMSMAIL
    Used in conjunction with  /SPECIAL.   If  /SPECIAL  and  a  username  is
    specified,  and the conversion still takes its input from VMS MAIL, then
    the VMS system mail file is checked to see if new mail  exists  for  the
    specified  user  before  running the command procedure.  This saves time
    and avoids creating subprocesses.  (Useful if input is digest format.)
    3 Listserv
    For a LISTSERV mailing list, only a subscribed user can post to it.   If
    the  BBOARD  account  is subscribed to the list in order for BULLETIN to
    receive the list, only the BBOARD account will be able to  post  to  it.
    This  problem  is  solved  by  placing  the  word LISTSERV in the folder
    description line. Then, messages sent to the mailing list  by  the  POST
    command will be sent from the BBOARD account rather than from the user's
    account.  For example, the folder description might be:
     
    FAKE MAILING LIST <FAKELIST@FAKENODE.BITNET> LISTSERV.
     
    If  you  have  PMDF  or  MX  installed,  the  corresponding logical name
    PMDF_REPLY_TO or MX_REPLY_TO will be temporarily defined in order to add
    a  REPLY-TO:   line  to  the  message  header to display the real user's
    address.
     
    Users  who  use the method described in HELP SET BBOARD MORE_INFORMATION
    should note the following:  When using this LISTSERV feature, the BBOARD
    account  must be a real account, not simply a VMS MAIL forwarding entry.
    Mail can only be sent from a real account.  However, if mail  forwarding
    is  set for that the account, the account does not need a real directory
    or a unique uic, since it will not need space to store mail.
     
    In order to be able to send LISTSERV commands from  the  BBOARD  account
    without  having  to  actually  login  to  the BBOARD account, there is a
    utility included with BULLETIN called SETUSER.  This requires privileges
    to use.  After compiling it, use the link command:
     
    	LINK SETUSER,SYS$SYSTEM:SYS.STB/SELECT
     
    When  you  run  it, it will prompt for a username.  After verifying that
    the given username  is  a  valid  account,  it  will  then  change  your
    process's username.  You can then send mail from that account.
     
    If you are using PMDF or MX, and wish to use this feature, you can still
    do  so  by  setting BBOARD.  As long as the BBOARD account is not a real
    account, it will work properly, even though the mail feed is not  really
    coming from the BBOARD account.
     
    In order to find out if the LISTSERV mailing list will accept posts only
    from subscribed users, send  the  command  'REV  listname'.   This  will
    retrieve the file listname.LIST.  It begins with a list of keywords.  If
    the keyword 'send' is set  to  'public',  you  don't  need  to  set  the
    LISTSERV  switch.   If it's set to 'private', you do.  For a description
    of the keywords and the meaning of their settings, send any LISTSERV the
    command  'INFO  KEY'. Note that the 'listname.LIST' files include a list
    of owners and subscribers.  If 'send' is set to 'owners',  then  neither
    the public nor the subscribers can post to the list.
     
    3 More_information
    If more than one folder is to have a BBOARD setting,  only  one  of  the
    BBOARD  names  need  be  a real account.  All other names could be names
    whose mail is  forwarded  to  the  real  account.   BULLETIN  will  then
    determine  from  the mail header which folder the mail is to be sent to.
    Forwarding can be enabled for any name within MAIL by the command:
     
        MAIL> SET FORWARD/USER=from_name to_name
     
    Any  mail  sent  to  FROM_NAME will be forwarded to TO_NAME.  Thus, only
    TO_NAME need be a real account.  For example, if you  have  INFOVAX  and
    LASER-LOVERS  folders,  you need create only a INFOVAX account, and then
    forward LASER-LOVERS mail to INFOVAX within mail using the  command  SET
    FORWARD/USER=LASER-LOVERS  INFOVAX.   You  would  then  do  a SET BBOARD
    INFOVAX for the INFOVAX folder, and  SET  BBOARD  LASER-LOVERS  for  the
    LASER-LOVERS  folder.   This method will speed up the BBOARD conversion,
    since mail need be read only from one account.  NOTE: Folders that  have
    the  /SPECIAL  set  on  their  BBOARD  accounts  cannot  have their mail
    forwarded to BBOARD accounts that don't have /SPECIAL set.   Folders  of
    the  same  type, i.e. that use the same /SPECIAL command procedure, must
    be grouped separately.
     
    The BBOARD account must match the mailing list name.  If you prefer  not
    to  have  them  match,  then  you must include the actual address of the
    mailing list in the folder description in  the  format  described  under
    HELP CREATE /DESCRIPTION.
    `,
    			},
    			"BRIEF": {
    				Description: `Controls whether you will be alerted upon logging  that  there  are  new
    messages  in the currently selected folder.  A new message is defined as
    one that has been created since the last time you logged in or  accessed
    BULLETIN.   Note  the  difference between BRIEF and READNEW.  The latter
    causes a listing of the description of the new messages to be  displayed
    and  prompts  the user to read the messages.  Setting BRIEF will clear a
    READNEW setting (and visa versa).
     
      Format:
     
        SET [NO]BRIEF
    3 /ALL
    Specifies that the SET [NO]BRIEF option is the default for all users for
    the specified folder.  This is a privileged qualifier.
    3 /DEFAULT
    Specifies that the [NO]BRIEF option is the default for the specified
    folder.  This is a privileged qualifier.  It will only affect brand new
    users (or those that have never logged in).  Use /ALL to modify all users.
    3 /FOLDER
       /FOLDER=foldername
     
    Specifies the folder for which the option is to modified.  If not
    specified, the selected folder is modified. Valid only with NOBRIEF.
    3 /PERMANENT
       /[NO]PERMANENT
     
    Specifies that BRIEF is a permanent flag and cannot be changed by the
    individual, except if changing to SHOWNEW or READNEW.  This is a
    privileged qualifier.
    `,
    			},
    			"CONTINUOUS_BRIEF": {
    				Description: `Specifies that if BRIEF is set for a folder, and there are new messages,
    the notification message "there are new messages" will be displayed every
    time when logging in, until the new messages are read.  Normally, the
    BRIEF setting causes notification only at the first time that new messages
    are detected.
     
      Format:
     
        SET [NO]CONTINUOUS_BRIEF
     
    NOTE: Both SET GENERIC and SET CONTINUOUS_BRIEF cannot be set for the
    same user.
    `,
    			},
    			"DEFAULT_EXPIRE": {
    				Description: `Specifies  the  number  of days the message created by BBOARD (or direct
    PMDF path) is to be retained.  The default  is  14  days.   The  highest
    limit  that  can  be  specified is 30 days.  This can be overridden by a
    user with privileges.
     
    This  also  specifies the default expiration date when adding a message.
    If no expiration date is  entered  when  prompted  for  a  date,  or  if
    prompting  has been disabled via SET NOPROMPT_EXPIRE, this value will be
    used.
     
      Format:
     
        SET DEFAULT_EXPIRE days
     
    If -1 is specified, messages will become permanent.  If 0 is  specified,
    no  default expiration date will be present.  The latter should never be
    specified for a  folder  with  a  BBOARD,  or  else  the  messages  will
    disappear.
     
    NOTE: This value is the same value that SET BBOARD/EXPIRATION specifies.
    If one is changed, the other will change also.
    `,
    			},
    			"DIGEST": {
    				Description: `Affect  only  messages  which are added via either the BBOARD option, or
    written directly from a network mailing program  (i.e.  PMDF).   Several
    mailing  lists  use  digest  format  to  send  their  messages, i.e. the
    messages are concatenated into one long message.  If DIGEST is set,  the
    messages will be separated into individual BULLETIN messages.
     
      Format:
     
        SET [NO]DIGEST
     
    The command SHOW FOLDER/FULL will show if DIGEST has been set.
     
    `,
    			},
    			"DUMP": {
    				Description: `Specifies that messages deleted from the  selected  folder  are  written
    into  a dump (or log) file.  The name of the log file is foldername.LOG,
    and it is located in the folder directory.
     
      Format:
     
        SET [NO]DUMP
     
    The  command  SHOW  FOLDER/FULL  will show if dump has been set.  (NOTE:
    SHOW FOLDER/FULL is a privileged command.)
    `,
    			},
    			"EXPIRE_LIMIT": {
    				Description: `Specifies expiration limit that is allowed for messages.  Non-privileged
    users cannot specify an expiration  that  exceeds  the  number  of  days
    specified.  Privileged users can exceed the limit.
     
        SET [NO]EXPIRE_LIMIT [days]
     
    The command SHOW FOLDER/FULL will show  the  expiration  limit,  if  one
    exists.  (NOTE: SHOW FOLDER/FULL is a privileged command.) 
    `,
    			},
    			"FOLDER": {
    				Description: `Select a folder of messages.  Identical to the SELECT command.  See help
    on that command for more information.
     
      Format:
     
        SET FOLDER [node-name::][folder-name]
    3 /MARKED
    Selects messages that have been marked (indicated by an asterisk).
    After using /MARKED, in order to see all messages, the folder will have
    to be reselected.
    `,
    			},
    			"GENERIC": {
    				Description: `Specifies  that  the  given  account is a "generic" account, i.e used by
    many different people.  If an  account  is  specified  as  GENERIC,  new
    messages  placed in the GENERAL folder will be displayed upon logging in
    for a specific number of days,  rather  than  only  once.   The  default
    period is 7 days.  This command is a privileged command.
     
      Format:
     
        SET [NO]GENERIC username
     
    NOTE: Both SET GENERIC and SET CONTINUOUS_BRIEF cannot be set for the
    same user.
    3 /DAYS
     /DAYS=number_of_days
     
    Specifies the number days that new GENERAL messages will be displayed
    for upon logging in.
    `,
    			},
    			"KEYPAD": {
    				Description: `Controls whether the keypad has been enabled such that the keys  on  the
    keypad correspond to command definitions.  These definitions can be seen
    via the SHOW KEYPAD command.  The default is NOKEYPAD unless the /KEYPAD
    qualifier has been added to the BULLETIN command line.
     
      Format:
     
        SET [NO]KEYPAD
    `,
    			},
    			"LOGIN": {
    				Description: `Controls  whether  the  specified  user will be alerted of any messages,
    whether system or non-system, upon logging in.  If an  account  has  the
    DISMAIL  flag  set, SET NOLOGIN is automatically applied to that account
    during the first time that the account logs in.  However, this will  not
    occur  if DISMAIL is set for an old account.  Additionally, removing the
    DISMAIL flag will not automatically enable LOGIN.  (The reason  for  the
    above  was to avoid extra overhead for constant checking for the DISMAIL
    flag.)  This command is a privileged command.
     
      Format:
     
        SET [NO]LOGIN username
    `,
    			},
    			"NODE": {
    				Description: `Modifies the selected folder from a local folder to a remote folder.   A
    remote folder is a folder in which the messages are actually stored on a
    folder at a remote DECNET node.  The SET NODE command specifies the name
    of  the  remote  node, and optionally the name of the remote folder.  If
    the remote folder name is not included, it is assumed to be the same  as
    the  local  folder.   When  the command is executed, the selected folder
    will then point to the remote folder.  If there  were  messages  in  the
    local folder, they will be deleted.  This feature is present only if the
    BULLCP process is running on the remote node.
     
      Format:
        SET NODE nodename [remotename]
        SET NONODE
     
    NOTE: If one node adds a message to a remote node, other nodes connected
    to the same folder will not immediately be aware  of  the  new  message.
    This  info  is  updated  every  15  minutes,  or if a user accesses that
    folder.
    3 /FOLDER
       /FOLDER=foldername
     
    Specifies the folder for which the node information is to modified.
    If not specified, the selected folder is modified.
    `,
    			},
    			"NOTIFY": {
    				Description: `Specifies whether you will be notified via a broadcast  message  when  a
    message is added to the selected folder.
     
      Format:
     
        SET [NO]NOTIFY
     
    In a cluster, if the logical name MAIL$SYSTEM_FLAGS is defined so that
    bit 1 is set, users will be notified no matter which node they are logged
    in to.  If you wish to disable this, you should define BULL_SYSTEM_FLAGS
    so that bit 1 is cleared.
    3 /ALL
    Specifies that the SET [NO]NOTIFY option is the default for all users for
    the specified folder.  This is a privileged qualifier.
    3 /DEFAULT
    Specifies that the [NO]NOTIFY option is the default for the specified
    folder.  This is a privileged qualifier.  It will only affect brand new
    users (or those that have never logged in).  Use /ALL to modify all users.
    3 /FOLDER
       /FOLDER=foldername
     
    Specifies the folder for which the option is to modified.  If not
    specified, the selected folder is modified. Valid only with NONOTIFY.
    3 /PERMANENT
       /[NO]PERMANENT
     
    Specifies that NOTIFY is a permanent flag and cannot be changed by the
    individual. /DEFAULT must be specified. This is a privileged qualifier.
    `,
    			},
    			"PAGE": {
    				Description: `Specifies whether any directory listing or message reading  output  will
    pause  when  it  reaches  the end of the page or not.  Setting NOPAGE is
    useful for terminals that can store more than one screenful at  a  time,
    and  that  have a remote printer that can then print the contents of the
    terminal's memory.  The default is PAGE, unless the default was  changed
    by specifying /NOPAGE on the command line to invoke BULLETIN.
     
      Format:
     
        SET [NO]PAGE
    `,
    			},
    			"PRIVILEGES": {
    				Description: `Specifies  either  process  privileges  or  rights  identifiers that are
    necessary to use privileged commands.  Use the SHOW  PRIVILEGES  command
    to see what is presently set.  This is a privileged command.
     
      Format:
     
        SET PRIVILEGES parameters
     
    The parameters are one or  more  privileges  separated  by  commas.   To
    remove  a privilege, specify the privilege preceeded by "NO".  If /ID is
    specified, the parameters are rights identifiers.
    3 /ID
     /[NO]ID
     
    If specified, then the rights identifier which is specified as the
    parameter will allow users holding that rights identifier to execute
    privileged commands.  If /NOID is specified, the identifier is removed.
    `,
    			},
    			"PROMPT_EXPIRE": {
    				Description: `Specifies  that  a  user  will  be  prompted for an expiration date when
    adding a message.  If NOPROMPT_EXPIRE is specified, the user will not be
    prompted, and the default expiration (which is set by SET DEFAULT_EXPIRE
    or SET BBOARD/EXPIRATION) will be  used.   If  the  value  specified  is
    greater   than  the  expiration  limit,  and  the  user  does  not  have
    privileges, then the expiration  limit  will  be  used  as  the  default
    expiration.  (If there is no expiration limit, and the user doesn't have
    privileges, then an error will result.)  PROMPT_EXPIRE is the default.
     
      Format:
     
        SET  [NO]PROMPT_EXPIRE
    `,
    			},
    			"READNEW": {
    				Description: `Controls whether you will be prompted upon logging in  if  you  wish  to
    read new non-system or folder messages (if any exist).  A new message is
    defined as one that has been  added  since  the  last  login,  or  since
    accessing BULLETIN.  The default setting for READNEW is dependent on how
    the folder was created by the owner.
     
    In  order  to  apply  this to a specific folder, first select the folder
    (using the SELECT command), and then enter the SET READNEW command.
     
      Format:
     
        SET [NO]READNEW
     
    NOTE:  If  you  have several folders with READNEW enabled, each folder's
    messages will be displayed separately.  However, if you EXIT the READNEW
    mode before all the folders have been displayed, you will not be alerted
    of the new messages in the undisplayed folders the next time you  login.
    However,  if  you enter BULLETIN, you will be told that new messages are
    present in those other folders.  Also, it is not possible  to  EXIT  the
    READNEW mode if there are SYSTEM folders which have new messages. Typing
    the EXIT command will cause you to skip to those folders.  (See HELP SET
    SYSTEM for a description of a SYSTEM folder).
    3 /ALL
    Specifies that the SET [NO]READNEW option is the default for all users for
    the specified folder.  This is a privileged qualifier.  The difference
    between this and /DEFAULT is that the latter will only apply to new users
    (i.e. any users which have never executed BULLETIN).
    3 /DEFAULT
    Specifies that the [NO]READNEW option is the default for the specified
    folder.  This is a privileged qualifier.  It will only affect brand new
    users (or those that have never logged in).  Use /ALL to modify all users.
    3 /FOLDER
       /FOLDER=foldername
     
    Specifies the folder for which the option is to modified.  If not
    specified, the selected folder is modified. Valid only with NOREADNEW.
    3 /PERMANENT
       /[NO]PERMANENT
     
    Specifies that READNEW is a permanent flag and cannot be changed by the
    individual.  This is a privileged qualifier.
    `,
    			},
    			"SHOWNEW": {
    				Description: `Controls whether a directory listing of new  messages  for  the  current
    folder  will  be displayed when logging in.  This is similar to READNEW,
    except you will not be prompted to read the messages.   The  default  is
    dependent  on how the folder was created by the owner.  A new message is
    defined as one that has been  added  since  the  last  login,  or  since
    accessing BULLETIN.
     
    In order to apply this to a specific folder,  first  select  the  folder
    (using  the  SELECT  command),  and  then enter the SET SHOWNEW command.
     
      Format:
     
        SET [NO]SHOWNEW
    3 /ALL
    Specifies that the SET [NO]SHOWNEW option is the default for all users for
    the specified folder.  This is a privileged qualifier.  The difference
    between this and /DEFAULT is that the latter will only apply to new users
    (i.e. any users which have never executed BULLETIN).
    3 /DEFAULT
    Specifies that the [NO]SHOWNEW option is the default for the specified
    folder.  This is a privileged qualifier.  It will only affect brand new
    users (or those that have never logged in).  Use /ALL to modify all users.
    3 /FOLDER
       /FOLDER=foldername
     
    Specifies the folder for which the option is to modified.  If not
    specified, the selected folder is modified. Valid only with NOSHOWNEW.
    3 /PERMANENT
       /[NO]PERMANENT
     
    Specifies that SHOWNEW is a permanent flag and cannot be changed by the
    individual, except if changing to READNEW. This is a privileged qualifier.
    `,
    			},
    			"STRIP": {
    				Description: `Affect only messages which are added via either the BBOARD option, or
    written directly from a network mailing program (i.e. PMDF).  If
    STRIP is set, the header of the mail message will be stripped off
    before it is stored as a BULLETIN message.
     
      Format:
     
        SET [NO]STRIP
     
    The command SHOW FOLDER/FULL will show if STRIP has been set.
    `,
    			},
    			"SYSTEM": {
    				Description: `Specifies that the selected folder is a SYSTEM folder.  A SYSTEM folder
    is allowed to have SYSTEM and SHUTDOWN messages added to it.  This is a
    privileged command.
     
      Format:
     
        SET [NO]SYSTEM
     
    By default, the GENERAL folder is a SYSTEM folder, and the setting for
    that folder cannot be removed.
     
    If the selected folder is remote, /SYSTEM cannot be specified unless the
    folder at the other node is also a SYSTEM folder.
    `,
    			},
    		},
    	},
    	"SHOW": {
    		Description: `The SHOW command displays information about certain characteristics.
    `,
    		Flags: dclish.Flags{
    			"FLAGS": {
    				Description: `Shows whether BRIEF, NOTIFY, READNEW, or SHOWNEW has been set for the
    currently selected folder.
    `,
    			},
    			"FOLDER": {
    				Description: `Shows information about a folder of messages.  Owner and description are
    shown.  If the folder name is omitted, and a folder has been selected via
    the SELECT command, information about that folder is shown.
     
      Format:
     
        SHOW FOLDER [folder-name]
    3 /FULL
    Control whether all information of the folder is displayed.  This
    includes DUMP & SYSTEM settings, the access list if the folder is
    private, and BBOARD information.  This information is only those who
    have access to that folder.
    `,
    			},
    			"KEYPAD": {
    				Description: `Displays the keypad command definitions.  If the keypad has been enabled
    by either the SET KEYPAD COMMAND, or /KEYPAD is specified on the command 
    line, the keypad keys will be defined as commands.  SHOW KEYPAD is the
    equivalent of HELP KEYPAD.
     
    NOTE: If the keypad is not enabled, PF2 is defined to be SET KEYPAD.
    3 /PRINT
    Prints the keypad definitions on the default printer (SYS$PRINT).
    `,
    			},
    			"NEW": {
    				Description: `Shows folders which have new unread messages for which BRIEF or READNEW
    have been set.  (Note: If you enter BULLETIN but do not read new unread
    messages, you will not be notified about them the next time you enter
    BULLETIN.  This is a design "feature" and cannot easily be changed.)
    `,
    			},
    			"PRIVILEGES": {
    				Description: `Shows the privileges necessary to use privileged commands.  Also shows
    any rights identifiers that would also give a user privileges.  (The
    latter are ACLs which are set on the BULLUSER.DAT file.)
    `,
    			},
    			"USER": {
    				Description: `Shows the last time that a user logged in, or if /FOLDER  is  specified,
    the  latest  message which a user has read in the folder.  If NOLOGIN is
    set for  a  user,  this  information  will  be  displayed.   This  is  a
    privileged  command.   Non-privileged users will only be able to display
    the information for their own account.
     
      Format:
        SHOW USER [username]
     
    The username is optional.  If omitted, the process's username  is  used.
    The  username should not be included if /ALL or /[NO]LOGIN is specified.
     
    NOTE: The last logged in time displayed is that which is stored when the
    BULLETIN/LOGIN command is executed, not that  which  VMS  stores.   Some
    sites  make  BULLETIN/LOGIN  an  optional  command for users to store in
    their own LOGIN.COM, so this command can be used  to  show  which  users
    have done this.
    3 /ALL
    Specifies that information for all users is to be displayed.  This is  a
    privileged command.
    3 /LOGIN
     /[NO]LOGIN
     
    Specifies that only those users which do not have NOLOGIN set are to be
    displayed.  If negated, only those users with NOLOGIN set are displayed.
    This is a privileged command.  The qualifier /ALL need not be specified.
    3 /FOLDER
       /FOLDER=[foldername]
     
    Specifies to display the latest message that was read by the user(s) for
    the  specified  foldername.   A newsgroup can be specified, but the info
    can only be shown if the user has subscribed to the newsgroup.   If  the
    foldername is not specified, the selected folder will be used.
    3 /SINCE
       /SINCE=[date]
     
    Specifies  to display only those users whose latest read message date is
    the same date  or  later  than  the  specified  date.   If  no  date  is
    specified,  the  date  of  the  current message is used.  Only valid for
    folders or with /LOGIN.  Use /START for newsgroups.
    3 /START
       /START=[number]
     
    Specifies  to  display only those users whose latest read message number
    is equal to or greather than the specified  number.   If  no  number  is
    specified,  the  message  number  of  the current message is used.  Only
    valid for newsgroups.  Use /SINCE for folders and with /LOGIN.
    `,
    			},
    			"VERSION": {
    				Description: `Shows  the  version  of  BULLETIN  and  the date that the executable was
    linked.
    `,
    			},
    		},
    	},
    	"SPAWN": {
    		Description: `Creates  a  subprocess  of  the current process.  To return to BULLETIN,
    type LOGOUT.
     
      Format:
        SPAWN [command-string]
     
    NOTE: BULLETIN disables the use of  CONTROL-C,  so  that  you  must  use
    CONTROL-Y if you wish to break out of a spawned command.
    `,
    	},
    	"SUBSCRIBE": {
    		Description: `Used only for NEWS folders.  Specifies that BULLETIN will keep track  of
    the  newest  message  that has been read for that NEWS folder.  When the
    NEWS folder is selected, the message pointer will automatically point to
    the next newest message that has not been read.
    `,
    	},
    	"UNDELETE": {
    		Description: `Undeletes  he  specified  message  if  the message was deleted using the
    DELETE command.  Deleted messages are  not  actually  deleted  but  have
    their  expiration  date  set to 15 minutes in the future and are deleted
    then.  Undeleting the message will reset the expiration date back to its
    original  value.   Deleted  messages  will  be  indicated as such by the
    string (DELETED) when either reading or doing a directory listing.
     
      Format:
        UNDELETE [message-number]
    `,
    	},
    	"UNSUBSCRIBE": {
    		Description: `Used only for NEWS folders.  Specifies that BULLETIN will no longer keep
    track of the newest message that has been read for that NEWS folder.  See the
    SUBSCRIBE command for further info. 
    `,
    	},
    }