! Definition of MBU commands
MODULE MBUCLD
IDENT "V01-003"
! COPYRIGHT NOTICE
!
! This software is COPYRIGHT © 2004, Ian Miller. ALL RIGHTS RESERVED.
! Permission is granted for not-for-profit redistribution, provided all source
! and object code remain unchanged from the original distribution, and that all
! copyright notices remain intact.
!
! DISCLAIMER
!
! This software is provided "AS IS". The author makes no representations or
! warranties with respect to the software and specifically disclaim any implied
! warranties of merchantability or fitness for any particular purpose.
!
! define create command syntax
DEFINE VERB CREATE
	ROUTINE CREATE_CMD
	PARAMETER P1,LABEL=NAME,PROMPT="Mailbox name"
		VALUE(REQUIRED,NOCONCATENATE)
	QUALIFIER BUFFER_QUOTA,NONNEGATABLE,LABEL=BUFQUO
		VALUE(NOCONCATENATE,TYPE=$NUMBER,REQUIRED)
	QUALIFIER MAXIMUM_MESSAGE_SIZE,NONNEGATABLE,LABEL=MAXMSG
		VALUE(NOCONCATENATE,TYPE=$NUMBER,REQUIRED)
	QUALIFIER PERMANENT,NONNEGATABLE
	QUALIFIER PROTECTION,NONNEGATABLE,LABEL=PROMSK
		VALUE(NOCONCATENATE,TYPE=$ACL,REQUIRED)
	QUALIFIER TEMPORARY,NONNEGATABLE
	DISALLOW TEMPORARY AND PERMANENT
! define delete command syntax
DEFINE VERB DELETE
	ROUTINE DELETE_CMD
	PARAMETER P1,LABEL=NAME,PROMPT="Mailbox name"
		VALUE(REQUIRED,NOCONCATENATE)
	NOQUALIFIERS
! define exit command syntax
DEFINE VERB EXIT
	ROUTINE EXIT_CMD
	NOPARAMETERS
	NOQUALIFIERS
! define help command syntax
DEFINE VERB HELP
	ROUTINE HELP_CMD
	PARAMETER P1,LABEL=TOPIC,PROMPT="Topic"
		VALUE(NOCONCATENATE,TYPE=$REST_OF_LINE)
	NOQUALIFIERS
! define read command syntax
DEFINE VERB READ
	ROUTINE READ_CMD
	PARAMETER P1,LABEL=NAME,PROMPT="Mailbox name"
		VALUE(REQUIRED,NOCONCATENATE)
	QUALIFIER FORMAT,NONNEGATABLE,VALUE(TYPE=FORMAT_TYPE)
!!	QUALIFIER DESCRIPTION,NONNEGATABLE,VALUE(TYPE=$FILE)
	QUALIFIER DATA_SIZE,NONNEGATABLE,VALUE(REQUIRED,TYPE=SIZE_TYPE)
	QUALIFIER OUTPUT,NONNEGATABLE,VALUE(TYPE=$FILE)
	QUALIFIER LENGTH,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
	QUALIFIER COUNT,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
	QUALIFIER WIDTH,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
	QUALIFIER WAIT,NEGATABLE
!!	DISALLOW FORMAT AND DESCRIPTION
! define rewind command syntax
DEFINE VERB REWIND
	ROUTINE REWIND_CMD
	NOPARAMETERS
	NOQUALIFIERS
! define set command syntax
DEFINE VERB SET 
	PARAMETER P1,LABEL=WHAT,PROMPT="What"
		VALUE(REQUIRED,TYPE=SET_TYPE,NOCONCATENATE)
! define set command keywords
DEFINE TYPE SET_TYPE
	KEYWORD DEFAULTS,NONNEGATABLE,SYNTAX=SET_DEFAULT_SYN
	KEYWORD MAILBOX,NONNEGATABLE,SYNTAX=SET_MAILBOX_SYN
	KEYWORD OUTPUT,NONNEGATABLE,SYNTAX=SET_OUTPUT_SYN
	KEYWORD VERIFY,NEGATABLE,SYNTAX=SET_VERIFY_SYN
! define set verify syntax
DEFINE SYNTAX SET_VERIFY_SYN
	ROUTINE SET_VERIFY_CMD
	NOQUALIFIERS
! define set default syntax
DEFINE SYNTAX SET_DEFAULT_SYN
	ROUTINE SET_DEFAULT_CMD
	QUALIFIER FORMAT,NONNEGATABLE,VALUE(REQUIRED,TYPE=FORMAT_TYPE)
!!	QUALIFIER DESCRIPTION,NEGATABLE,VALUE(REQUIRED,TYPE=$FILE)
	QUALIFIER DATA_SIZE,NONNEGATABLE,VALUE(REQUIRED,TYPE=SIZE_TYPE)
	QUALIFIER OUTPUT,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)
	QUALIFIER INPUT,NONNEGATABLE,VALUE(REQUIRED,TYPE=$FILE)
	QUALIFIER LENGTH,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
	QUALIFIER COUNT,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
	QUALIFIER MAXIMUM_MESSAGE_SIZE,NONNEGATABLE,LABEL=MAXMSG
		VALUE(NOCONCATENATE,TYPE=$NUMBER,REQUIRED)
	QUALIFIER BUFFER_QUOTA,NONNEGATABLE,LABEL=BUFQUO
		VALUE(NOCONCATENATE,TYPE=$NUMBER,REQUIRED)
	QUALIFIER PROTECTION,NONNEGATABLE,LABEL=PROMSK
		VALUE(NOCONCATENATE,TYPE=$ACL,REQUIRED)
	QUALIFIER WIDTH,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
! define set mailbox syntax
DEFINE SYNTAX SET_MAILBOX_SYN
	ROUTINE SET_MAILBOX_CMD
	PARAMETER P1,LABEL=WHAT,PROMPT="What"
		VALUE(REQUIRED,TYPE=SET_TYPE,NOCONCATENATE)
	PARAMETER P2,LABEL=NAME,PROMPT="Mailbox name"
		VALUE(REQUIRED,NOCONCATENATE)
	QUALIFIER MAXIMUM_MESSAGE_SIZE,NONNEGATABLE,LABEL=MAXMSG
		VALUE(NOCONCATENATE,TYPE=$NUMBER,REQUIRED)
	QUALIFIER BUFFER_QUOTA,NONNEGATABLE,LABEL=BUFQUO
		VALUE(NOCONCATENATE,TYPE=$NUMBER,REQUIRED)
	QUALIFIER PROTECTION,NONNEGATABLE,LABEL=PROMSK
		VALUE(NOCONCATENATE,TYPE=$ACL,REQUIRED)
! define set output syntax
DEFINE SYNTAX SET_OUTPUT_SYN
	ROUTINE SET_OUTPUT_CMD
	PARAMETER P1,LABEL=WHAT,PROMPT="What"
		VALUE(REQUIRED,TYPE=SET_TYPE,NOCONCATENATE)
	PARAMETER P2,LABEL=FILE
		VALUE(TYPE=$FILE,NOCONCATENATE)
! define show command syntax
DEFINE VERB SHOW
	PARAMETER P1,LABEL=SHOW_WHAT,PROMPT="What"
		VALUE(REQUIRED,TYPE=SHOW_TYPE,NOCONCATENATE)
	NOQUALIFIERS
! define show command keywords
DEFINE TYPE SHOW_TYPE
	KEYWORD DEFAULTS,NONNEGATABLE,SYNTAX=SHOW_DEFAULT_SYN
	KEYWORD MAILBOX,NONNEGATABLE,SYNTAX=SHOW_MAILBOX_SYN
	KEYWORD DEVICE,NONNEGATABLE,SYNTAX=SHOW_MAILBOX_SYN
	KEYWORD VERSION,NONNEGATABLE,SYNTAX=SHOW_VERSION_SYN
! define show default command syntax
DEFINE SYNTAX SHOW_DEFAULT_SYN
	ROUTINE SHOW_DEFAULT_CMD
	NOQUALIFIERS
! define show default command syntax
DEFINE SYNTAX SHOW_VERSION_SYN
	ROUTINE SHOW_VERSION_CMD
	NOQUALIFIERS
! define show mailbox command syntax
DEFINE SYNTAX SHOW_MAILBOX_SYN
	ROUTINE SHOW_MAILBOX_CMD
	PARAMETER P1,LABEL=SHOW_WHAT,PROMPT="What"
		VALUE(REQUIRED,TYPE=SHOW_TYPE,NOCONCATENATE)
	PARAMETER P2,LABEL=NAME,PROMPT="Mailbox name"
		VALUE(REQUIRED,NOCONCATENATE)
	QUALIFIER TEMPORARY, NONNEGATABLE
	QUALIFIER PERMANENT, NONNEGATABLE
	QUALIFIER INUSE
	QUALIFIER EMPTY
	DISALLOW TEMPORARY AND PERMANENT
! define use command syntax
!!DEFINE VERB USE
!!	ROUTINE USE_CMD
!!	PARAMETER P1,LABEL=FILENAME,PROMPT="Description filename"
!!		VALUE(REQUIRED,NOCONCATENATE,TYPE=$FILE)
!!	NOQUALIFIERS
! define view command syntax
DEFINE VERB VIEW
	ROUTINE VIEW_CMD
	PARAMETER P1,LABEL=NAME,PROMPT="Mailbox name"
		VALUE(REQUIRED,NOCONCATENATE)
	QUALIFIER FORMAT,NONNEGATABLE,VALUE(TYPE=FORMAT_TYPE)
!!	QUALIFIER DESCRIPTION,NONNEGATABLE,VALUE(TYPE=$FILE)
	QUALIFIER DATA_SIZE,NONNEGATABLE,VALUE(REQUIRED,TYPE=SIZE_TYPE)
	QUALIFIER OUTPUT,NONNEGATABLE,VALUE(TYPE=$FILE)
	QUALIFIER LENGTH,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
	QUALIFIER COUNT,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
	QUALIFIER WIDTH,NONNEGATABLE,VALUE(TYPE=$NUMBER,REQUIRED)
!!	DISALLOW FORMAT AND DESCRIPTION
! define WAIT command syntax
DEFINE VERB WAIT
	ROUTINE WAIT_CMD
	PARAMETER P1,LABEL=TIME,PROMPT="Time"
		VALUE(REQUIRED,NOCONCATENATE,TYPE=$DELTATIME)
	NOQUALIFIERS
! define write command syntax
DEFINE VERB WRITE
	ROUTINE WRITE_CMD
	PARAMETER P1,LABEL=NAME,PROMPT="Mailbox name"
		VALUE(REQUIRED,NOCONCATENATE)
	QUALIFIER FORMAT,NONNEGATABLE,VALUE(TYPE=FORMAT_TYPE)
!!	QUALIFIER DESCRIPTION,NONNEGATABLE,VALUE(TYPE=$FILE)
	QUALIFIER DATA_SIZE,NONNEGATABLE,VALUE(REQUIRED,TYPE=SIZE_TYPE)
	QUALIFIER INPUT,NONNEGATABLE,VALUE(TYPE=$FILE)
	QUALIFIER WAIT,NEGATABLE,DEFAULT
   	QUALIFIER EOF
!!	DISALLOW FORMAT AND DESCRIPTION
   	DISALLOW EOF AND DATA_SIZE
   	DISALLOW EOF AND FORMAT
   	DISALLOW EOF AND INPUT
! define format keywords
DEFINE TYPE FORMAT_TYPE
	KEYWORD HEX,NONNEGATABLE
	KEYWORD DECIMAL,NONNEGATABLE
	KEYWORD TEXT,NONNEGATABLE
! define size keywords
DEFINE TYPE SIZE_TYPE
	KEYWORD BYTE,NONNEGATABLE
	KEYWORD WORD,NONNEGATABLE
	KEYWORD LONG,NONNEGATABLE