
!*************************************************************************
!									 *
! © Copyright 2005 Hewlett-Packard Development Company, L.P.		 *
!									 *
! Confidential computer software. Valid license  from  HP  required  for *
! possession, use or copying. Consistent with  FAR  12.211  and  12.212, *
! Commercial Computer Software,  Computer  Software  Documentation,  and *
! Technical  Data  for  Commercial  Items  are  licensed  to  the   U.S. *
! Government under vendor's standard commercial license.		 *
!									 *
!*************************************************************************
 
!++
! Facility:
!   Extended LSE (XLSE)
!
! Abstract:
!   This module defines the Command Definition Utility (CDU)
!   language attributes, templates and placeholders.
!
! Author:
!   W. Ward Clark, LinkWorks Project
!
! Creation Date: 15-Nov-84
!
! Modification History:
!   X0.3    WWC  29-Nov-84  add .XCLD file type
!   X0.3-1  WWC   3-Jan-85  add basic module definitions
!   X0.4    WWC  28-Feb-85  TEMPLATE --> TOKEN
!   X0.6    WWC  14-May-85  /AUTOFILL --> /AUTOSUBSTITUTE
!			    BAR --> BBAR, END_BAR --> EBAR
!   X0.7    WWC  18-Aug-85  remove DELETE statements
!   X0.8    WWC  23-Oct-85  add full language support
!   X0.9    WWC  15-Jan-86  Copyright placeholder:  1985 --> 1986
!   X0.10   WWC  16-Nov-86  upgrade to LSE V2
!   X1.1    WWC  10-Jan-87  Copyright placeholder:  1986 --> 1987
!   X1.1-1  WWC  30-Mar-87  new DEFINE LANGUAGE /COMMENT qualifier
!   X1.2    WWC  23-Aug-87  remove RUNOFF change bar definitions
!   X1.2-1  WWC  14-Feb-88  TBS alias --> token, ...
!			    1987 --> 1988
!   X1.3    WWC  15-Jan-89  normalize LSE command syntax
!			    1988 --> 1989
!   X3.0    WWC   1-Jan-90  upgrade to LSE V3.0
!                           1989 --> 1990
!   X3.0-1  WWC  28-Jan-90  add PDF definitions
!   X3.1    WWC  29-Oct-91  1990 --> 1991
!   X4.0a   WWC  24-Feb-93  make modification-id an optional placeholder
!   X4.0a-1 WWC  24-Feb-93  1991 --> 1993
!--
!
!+
!   CDU Language Definition
!-
DELETE LANGUAGE cdu
DEFINE LANGUAGE cdu -
    /COMMENT=( -
	ASSOCIATED_IDENTIFIER = PREVIOUS, -
	NOBEGIN, -
	NOEND, -
	NOFIXED, -
	NOLINE, -
	TRAILING=("!+","!-","!")) -
    /CAPABILITIES=NODIAGNOSTICS -
    /COMPILE_COMMAND="" -
    /EXPAND_CASE=AS_IS -
    /FILE_TYPES=(.CLD,.XCLD) -
    /HELP_LIBRARY=SYS$HELP:HELPLIB.HLB -
    /IDENTIFIER_CHARACTERS= -
	"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%$_0123456789" -
    /INITIAL_STRING="[module]" -
    /LEFT_MARGIN=CONTEXT_DEPENDENT -
    /OVERVIEW_OPTIONS=( -
        MINIMUM_LINES=1, -
        TAB_RANGE=(4,8)) -
    /PLACEHOLDER_DELIMITERS=( -
        REQUIRED=      ("{","}"), -
        REQUIRED_LIST= ("{","}..."), -
        OPTIONAL=      ("[","]"), -
        OPTIONAL_LIST= ("[","]..."), -
        PSEUDOCODE= ("«","»")) -
    /PUNCTUATION_CHARACTERS=",;()""" -
    /QUOTED_ITEM=(QUOTES="""") -
    /RIGHT_MARGIN=80 -
    /TAB_INCREMENT=4 -
    /TOPIC_STRING="" -
    /NOWRAP -
    /VERSION="(XLSE X4.0a)"
!+
!   Delete any language definitions
!-
SET LANGUAGE cdu

DELETE PLACEHOLDER *
DELETE TOKEN *
!
!+
!   Language-independent definitions
!-
DELETE PLACEHOLDER "lse$block_comment"
DEFINE PLACEHOLDER "lse$block_comment" -
    /TYPE=NONTERMINAL

    "! {tbs}"
    "!"

    END DEFINE

DELETE PLACEHOLDER "lse$generic"
DEFINE PLACEHOLDER "lse$generic" -
    /TYPE=NONTERMINAL

    "{tbs}"

    END DEFINE

DELETE PLACEHOLDER "lse$line_comment"
DEFINE PLACEHOLDER "lse$line_comment" -
    /TYPE=NONTERMINAL

    "! {tbs}"

    END DEFINE

DEFINE PLACEHOLDER tbs -
    /DESCRIPTION="field to be specified" -
    /SEPARATOR="" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "to be specified"

    END DEFINE

DEFINE TOKEN "tbs" -
    /DESCRIPTION="to-be-specified"
    "[tbs]"
    END DEFINE

DEFINE PLACEHOLDER MODULE -
    /DESCRIPTION="CDU Command Definition Module" -
    /SEPARATOR="" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "MODULE [module-name]"
    "[IDENT-statement]"
    "![module-level-comments]"
    ""
    "[statement]..."

    END DEFINE

DEFINE TOKEN module /PLACEHOLDER=module

DEFINE PLACEHOLDER module-name -
    /DESCRIPTION="module name" -
    /SEPARATOR="" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of this module"

    END DEFINE

DEFINE PLACEHOLDER module-level-comments -
    /DESCRIPTION="" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "++"
    " Facility:"
    "   {tbs}"
    " "
    " Abstract:"
    "   {tbs}"
    " "
    " Author:"
    "   {tbs}"
    " "
    " Creation Date: {tbs}"
    " "
    " Modification History:"
    "--"

    END DEFINE
!+
!   Modification History definitions
!-
DEFINE TOKEN "new_modification" -
    /DESCRIPTION="modification history entry"
    "!   [modification-id]  {your-initials}  {modification-date}  {modification-remark}"
    END DEFINE

DEFINE PLACEHOLDER modification-id -
    /DESCRIPTION="modification identification number" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "modification identification number"

    END DEFINE

DEFINE PLACEHOLDER your-initials -
    /DESCRIPTION="your initials" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "your initials"

    END DEFINE

DEFINE PLACEHOLDER modification-date -
    /DESCRIPTION="modification date" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "modification date (dd-mmm-yy)"

    END DEFINE

DEFINE PLACEHOLDER modification-remark -
    /DESCRIPTION="brief description of a modification" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "brief description of the modification"

    END DEFINE
!
!+
!   CDU Language-dependent definitions
!-
DEFINE PLACEHOLDER statement -
    /DESCRIPTION="CDU statement" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=MENU

    "DEFINE-VERB-statement" /PLACEHOLDER
    "DEFINE-SYNTAX-statement" /PLACEHOLDER
    "DEFINE-TYPE-statement" /PLACEHOLDER
    "IDENT-statement" /PLACEHOLDER
    "MODULE-statement" /PLACEHOLDER

    END DEFINE

DEFINE TOKEN statement /PLACEHOLDER=statement

DEFINE PLACEHOLDER ident-statement -
    /DESCRIPTION="IDENT statement" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "IDENT ""{ident-string}"""

    END DEFINE

DEFINE PLACEHOLDER ident-string -
    /DESCRIPTION="module identification string" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "module identification string"

    END DEFINE

DEFINE PLACEHOLDER module-statement /PLACEHOLDER=module

DEFINE PLACEHOLDER define-verb-statement -
    /DESCRIPTION="DEFINE VERB statement" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "DEFINE VERB {verb-name}"
    "	[SYNONYM-clause]"
    "	[IMAGE-clause]"
    "	[ROUTINE-clause]"
    "	[PARAMETER-clause]..."
    "	[NOPARAMETERS-clause]"
    "	[QUALIFIER-clause]..."
    "	[NOQUALIFIERS-clause]"
    "	[DISALLOW-clause]..."
    "	[NODISALLOWS-clause]..."

    END DEFINE

DEFINE TOKEN verb /PLACEHOLDER=define-verb-statement

DEFINE PLACEHOLDER define-syntax-statement -
    /DESCRIPTION="DEFINE SYNTAX statement" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "DEFINE SYNTAX {syntax-name}"
    "	[IMAGE-clause]"
    "	[ROUTINE-clause]"
    "	[PARAMETER-clause]..."
    "	[NOPARAMETERS-clause]"
    "	[QUALIFIER-clause]..."
    "	[NOQUALIFIERS-clause]"
    "	[DISALLOW-clause]..."
    "	[NODISALLOWS-clause]..."

    END DEFINE

DEFINE TOKEN syntax /PLACEHOLDER=define-syntax-statement

DEFINE PLACEHOLDER syntax-name -
    /DESCRIPTION="name of alternate syntax" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of alternate syntax"

    END DEFINE

DEFINE PLACEHOLDER define-type-statement -
    /DESCRIPTION="DEFINE TYPE statement" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "DEFINE TYPE {user-type-name}"
    "	[KEYWORD-clause]..."

    END DEFINE

DEFINE PLACEHOLDER user-type-name -
    /DESCRIPTION="name of user-defined type" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of defined-type"

    END DEFINE

DEFINE TOKEN type /PLACEHOLDER=define-type-statement

DEFINE PLACEHOLDER verb-name -
    /DESCRIPTION="name of the command verb" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of the command verb"

    END DEFINE

DEFINE PLACEHOLDER synonym-clause -
    /DESCRIPTION="SYNONYM clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "SYNONYM {synonym-name}"

    END DEFINE

DEFINE TOKEN synonym /PLACEHOLDER=synonym-clause

DEFINE PLACEHOLDER synonym-name -
    /DESCRIPTION="synonym name" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "synonym name"

    END DEFINE

DEFINE PLACEHOLDER image-clause -
    /DESCRIPTION="IMAGE clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "IMAGE {image-name}"

    END DEFINE

DEFINE TOKEN image /PLACEHOLDER=image-clause

DEFINE PLACEHOLDER image-name -
    /DESCRIPTION="image file specification" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "image file specification"

    END DEFINE

DEFINE PLACEHOLDER routine-clause -
    /DESCRIPTION="ROUTINE clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "ROUTINE {routine-name}"

    END DEFINE

DEFINE TOKEN routine /PLACEHOLDER=routine-clause

DEFINE PLACEHOLDER routine-name -
    /DESCRIPTION="routine name" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "routine name"

    END DEFINE

DEFINE PLACEHOLDER parameter-clause -
    /DESCRIPTION="PARAMETER clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "PARAMETER P{number}, LABEL={parameter-name},"
    "				[PROMPT-clause]"
    "				[DEFAULT-keyword]"
    "				[parameter-VALUE-clause]"

    END DEFINE

DEFINE TOKEN parameter /PLACEHOLDER=parameter-clause

DEFINE PLACEHOLDER number -
    /DESCRIPTION="parameter number (1 - 8)" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "parameter number (1 - 8)"

    END DEFINE

DEFINE PLACEHOLDER noparameters-clause -
    /DESCRIPTION="NOPARAMETERS clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "NOPARAMETERS"

    END DEFINE

DEFINE TOKEN noparameters /PLACEHOLDER=noparameters-clause

DEFINE PLACEHOLDER qualifier-clause -
    /DESCRIPTION="QUALIFIER clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "QUALIFIER {qualifier-name},"
    "				[LABEL-clause]"
    "				[NEGATABLE-keyword]"
    "				[BATCH-keyword]"
    "				[DEFAULT-keyword]"
    "				[qualifier-VALUE-clause]"
    "				[PLACEMENT-clause]"
    "				[SYNTAX-clause]"

    END DEFINE

DEFINE TOKEN qualifier /PLACEHOLDER=qualifier-clause

DEFINE PLACEHOLDER noqualifiers-clause -
    /DESCRIPTION="NOQUALIFIERS clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "NOQUALIFIERS"

    END DEFINE

DEFINE TOKEN noqualifiers /PLACEHOLDER=noqualifiers-clause

DEFINE PLACEHOLDER disallow-clause -
    /DESCRIPTION="DISALLOW clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "DISALLOW  {disallow-expression}"

    END DEFINE

DEFINE TOKEN disallow /PLACEHOLDER=disallow-clause

DEFINE PLACEHOLDER nodisallows-clause -
    /DESCRIPTION="NODISALLOWS clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "NODISALLOWS"

    END DEFINE

DEFINE TOKEN nodisallows /PLACEHOLDER=nodisallows-clause

DEFINE PLACEHOLDER keyword-clause -
    /DESCRIPTION="KEYWORD clause" -
    /DUPLICATION=VERTICAL -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "KEYWORD {keyword-name},"
    "				[LABEL-clause]"
    "				[NEGATABLE-keyword]"
    "				[DEFAULT-keyword]"
    "				[keyword-VALUE-clause]"
    "				[SYNTAX-clause]"

    END DEFINE

DEFINE PLACEHOLDER parameter-name -
    /DESCRIPTION="name of a parameter" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of the parameter"

    END DEFINE

DEFINE PLACEHOLDER prompt-clause -
    /DESCRIPTION="PROMPT clause" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "PROMPT=""{prompt-string}"","

    END DEFINE

DEFINE PLACEHOLDER default-keyword -
    /DESCRIPTION="DEFAULT keyword" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "DEFAULT,"

    END DEFINE

DEFINE PLACEHOLDER parameter-value-clause -
    /DESCRIPTION="Parameter VALUE clause" -
    /SEPARATOR="," -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "VALUE[(parameter-value-attributes)]"

    END DEFINE

DEFINE PLACEHOLDER "(parameter-value-attributes)" -
    /DESCRIPTION="list of parameter value attributes" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "([CONCATENATE-keyword][DEFAULT-clause][LIST-keyword][REQUIRED-keyword][TYPE-clause])"

    END DEFINE

DEFINE PLACEHOLDER qualifier-name -
    /DESCRIPTION="name of a qualifier" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of the qualifier"

    END DEFINE

DEFINE PLACEHOLDER label-clause -
    /DESCRIPTION="LABEL clause" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "LABEL={label-name},"

    END DEFINE

DEFINE PLACEHOLDER negatable-keyword -
    /DESCRIPTION="NEGATABLE or NONNEGATABLE keyword" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "[NON]NEGATABLE,"

    END DEFINE

DEFINE PLACEHOLDER non -
    /DESCRIPTION="NON keyword prefix" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "NON"

    END DEFINE

DEFINE PLACEHOLDER qualifier-value-clause -
    /DESCRIPTION="Qualifier VALUE clause" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "VALUE[(qualifier-value-attributes)],"

    END DEFINE

DEFINE PLACEHOLDER "(qualifier-value-attributes)" -
    /DESCRIPTION="list of qualifier value attributes" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "([DEFAULT-clause][LIST-keyword][REQUIRED-keyword][TYPE-clause])"

    END DEFINE

DEFINE PLACEHOLDER keyword-value-clause -
    /DESCRIPTION="Keyword VALUE clause" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "VALUE[(keyword-value-attributes)],"

    END DEFINE

DEFINE PLACEHOLDER "(keyword-value-attributes)" -
    /DESCRIPTION="list of keyword value attributes" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "([DEFAULT-clause][LIST-keyword][REQUIRED-keyword][TYPE-clause])"

    END DEFINE

DEFINE PLACEHOLDER batch-keyword -
    /DESCRIPTION="BATCH default keyword" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "BATCH,"

    END DEFINE

DEFINE PLACEHOLDER placement-clause -
    /DESCRIPTION="PLACEMENT clause" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "PLACEMENT={GLOBAL|POSITIONAL|LOCAL},"

    END DEFINE

DEFINE PLACEHOLDER "GLOBAL|POSITIONAL|LOCAL" -
    /DESCRIPTION="qualifier placement keyword" -
    /TOPIC="" -
    /TYPE=MENU

    "GLOBAL"
    "POSITIONAL"
    "LOCAL"

    END DEFINE

DEFINE PLACEHOLDER syntax-clause -
    /DESCRIPTION="Alternate syntax clause" -
    /SEPARATOR="," -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "SYNTAX={syntax-name}"

    END DEFINE

DEFINE PLACEHOLDER disallow-expression -
    /DESCRIPTION="DISALLOW expression" -
    /TOPIC="" -
    /TYPE=MENU

    "any2" /TOKEN
    "neg" /TOKEN
    "not" /TOKEN
    "{disallow-expression} AND {disallow-expression}"
    "{disallow-expression} OR {disallow-expression}"

    END DEFINE

DEFINE TOKEN any2 -
    /DESCRIPTION="ANY2 function" -
    /TOPIC=""

    "ANY2({entity}...)"

    END DEFINE

DEFINE TOKEN neg -
    /DESCRIPTION="NEG operator" -
    /TOPIC=""

    "NEG {entity}"

    END DEFINE

DEFINE TOKEN not -
    /DESCRIPTION="NOT operator" -
    /TOPIC=""

    "NOT {entity}"

    END DEFINE

DEFINE PLACEHOLDER keyword-name -
    /DESCRIPTION="name of a keyword" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of the keyword"

    END DEFINE

DEFINE PLACEHOLDER prompt-string -
    /DESCRIPTION="parameter prompt string" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "parameter prompt string"

    END DEFINE

DEFINE PLACEHOLDER concatenate-keyword -
    /DESCRIPTION="CONCATENATE or NOCONCATENATE keyword" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "[NO]CONCATENATE,"

    END DEFINE

DEFINE PLACEHOLDER default-clause -
    /DESCRIPTION="default value clause" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "DEFAULT=""{default-value}"","

    END DEFINE

DEFINE PLACEHOLDER list-keyword -
    /DESCRIPTION="LIST keyword" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "LIST,"

    END DEFINE

DEFINE PLACEHOLDER required-keyword -
    /DESCRIPTION="REQUIRED keyword" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "REQUIRED,"

    END DEFINE

DEFINE PLACEHOLDER type-clause -
    /DESCRIPTION="TYPE clause" -
    /SEPARATOR="," -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "TYPE={type-name}"

    END DEFINE

DEFINE PLACEHOLDER type-name -
    /DESCRIPTION="built-in type or user-defined type" -
    /TOPIC="" -
    /TYPE=MENU

    "$ACL"
    "$DATETIME"
    "$DELTATIME"
    "$FILE"
    "$NUMBER"
    "$QUOTED_STRING"
    "$REST_OF_LINE"
    "user-type-name" /PLACEHOLDER

    END DEFINE

DEFINE PLACEHOLDER label-name -
    /DESCRIPTION="parameter, qualifier or keyword name" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "parameter, qualifier or keyword name"

    END DEFINE

DEFINE PLACEHOLDER no -
    /DESCRIPTION="NO keyword prefix" -
    /TOPIC="" -
    /TYPE=NONTERMINAL

    "NO"

    END DEFINE

DEFINE PLACEHOLDER entity -
    /DESCRIPTION="parameter, qualifier or keyword" -
    /DUPLICATION=HORIZONTAL -
    /SEPARATOR="," -
    /TOPIC="" -
    /TYPE=TERMINAL

    "name of parameter, qualifier or keyword"

    END DEFINE

DEFINE PLACEHOLDER default-value -
    /DESCRIPTION="default value" -
    /TOPIC="" -
    /TYPE=TERMINAL

    "default value of a parameter, qualifier or keyword"

    END DEFINE
