The following table shows the HP SDL to HP BASIC language translation
summary.
HP SDL Declaration |
HP BASIC Output |
MODULE name IDENT string
|
!*** MODULE name IDENT string ***
|
/* comment
|
! comment
|
CONSTANT x
|
|
EQUALS n;
|
DECLARE LONG CONSTANT x = n
|
EQUALS STRING "s";
|
DECLARE STRING CONSTANT x = "s"
|
ENTRY name
|
EXTERNAL SUB name
|
PARAMETER (type,...)
|
( &
|
|
type, &
|
|
.
|
|
.
|
|
)
|
ANY
|
ANY
|
DESCRIPTOR
|
BY DESC
|
RTL_STR_DESC
|
BY DESC
|
IN
|
n/a
|
OUT
|
n/a
|
NAMED param-name
|
n/a
|
VALUE
|
BY VALUE
|
REFERENCE
|
BY REF
|
DEFAULT n
|
n/a
|
LIST
|
Yields one explicit parameter description plus m-n commas, where m is
the maximum number of parameters allowable in HP BASIC, and n is the
number of parameters already specified (including the LIST parameter
description).
|
OPTIONAL
|
OPTIONAL data-type
|
TYPENAME type-name
|
n/a
|
RETURNS return-data-type
|
EXTERNAL data-type FUNCTION name
|
NAMED param-name
|
n/a
|
VARIABLE
|
n/a
|
ALIAS
|
n/a
|
LINKAGE
|
n/a
|
TYPENAME type-name
|
n/a
|
STRUCTURE
|
DECLARE LONG CONSTANT markerS_structure-name = size
|
|
RECORD struct-name
|
|
type member-name
|
|
.
|
|
.
|
|
.
|
|
END RECORD struct-name
|
UNION
|
DECLARE LONG CONSTANT markerS_union-name = size
|
|
RECORD union-name
|
|
VARIANT
|
|
CASE
|
|
type member-name
|
|
.
|
|
.
|
|
.
|
|
END VARIANT
|
|
END RECORD union-name
|
BYTE
[SIGNED
]
|
BYTE
|
INTEGER
_BYTE
[SIGNED
]
|
BYTE
|
WORD
[SIGNED
]
|
WORD
|
INTEGER
_WORD
[SIGNED
]
|
WORD
|
LONGWORD
[SIGNED
]
|
LONG
|
INTEGER
_LONG
[SIGNED
]
|
LONG
|
INTEGER
[SIGNED
]
|
LONG
|
INTEGER
_HW
[SIGNED
]
|
BASIC
$QUADWORD for /ALPHA
|
|
LONG for /VAX
|
HARDWARE
_INTEGER
[SIGNED
]
|
BASIC
$QUADWORD for /ALPHA
|
|
LONG for /VAX
|
QUADWORD
[SIGNED
]
|
BASIC
$QUADWORD
|
INTEGER
_QUAD
[SIGNED
]
|
BASIC
$QUADWORD
|
OCTAWORD
|
BASIC
$OCTAWORD
|
BYTE UNSIGNED
|
BYTE
|
INTEGER
_BYTE UNSIGNED
|
BYTE
|
WORD UNSIGNED
|
WORD
|
INTEGER
_WORD UNSIGNED
|
WORD
|
LONGWORD UNSIGNED
|
LONG
|
INTEGER
_LONG UNSIGNED
|
LONG
|
INTEGER UNSIGNED
|
LONG
|
QUADWORD UNSIGNED
|
BASIC
$QUADWORD
|
INTEGER
_QUAD UNSIGNED
|
BASIC
$QUADWORD
|
INTEGER
_HW UNSIGNED
|
BASIC
$QUADWORD for /ALPHA
|
|
LONG for /VAX
|
HARDWARE
_INTEGER UNSIGNED
|
BASIC
$QUADWORD for /ALPHA
|
|
LONG for /VAX
|
OCTAWORD UNSIGNED
|
BASIC
$OCTAWORD
|
F_FLOATING
|
SINGLE
|
D_FLOATING
|
DOUBLE
|
G_FLOATING
|
GFLOAT
|
H
_FLOATING
|
BASIC
$HFLOAT
_AXP for /ALPHA
|
|
HFLOAT for /VAX
|
F_FLOATING COMPLEX
|
BASIC$F_FLOATING_COMPLEX
|
D_FLOATING COMPLEX
|
BASIC$D_FLOATING_COMPLEX
|
G_FLOATING COMPLEX
|
BASIC$G_FLOATING_COMPLEX
|
H
_FLOATING COMPLEX
|
BASIC
$H
_FLOATING
_COMPLEX
_AXP for /ALPHA
|
|
BASIC
$H
_FLOATING
_COMPLEX for /VAX
|
DECIMAL PRECISION (p,q)
|
DECIMAL (p,q)
|
BITFIELD
|
type name_bits ! COMMENT ADDED
|
|
BY SDL name_bits contains bits name1 through name2
|
LENGTH n
|
n is used in computing size (type) of name_bits field.
|
MASK
|
DECLARE LONG CONSTANT prefix$m_name = x'mask-value'
|
SIGNED
|
n/a
|
CHARACTER
|
STRING name = 1
|
LENGTH n
|
STRING name = n
|
LENGTH *
|
STRING
|
VARYING
|
group name
|
|
WORD str-len
|
|
STRING str-text = n, where n is the maximum length of the string
|
|
end group name
|
ADDRESS
|
LONG name
|
POINTER
|
LONG name
|
POINTER
_LONG
|
LONG name
|
POINTER
_HW
|
BASIC
$QUADWORD name for /ALPHA
|
|
LONG name for /VAX
|
HARDWARE
_ADDRESS
|
BASIC
$QUADWORD name for /ALPHA
|
|
LONG name for /VAX
|
POINTER
_QUAD
|
BASIC
$QUADWORD name
|
BOOLEAN
|
BYTE name
|
user-type-name
|
user_type_name
|
COMMON storage class
|
COMMON name name
|
GLOBAL storage class
|
EXTERNAL name name
|
BASED pointer-name
|
n/a
|
TYPEDEF
|
For an ITEM, a record definition is generated. For an AGGREGATE, the
behavior is as though TYPEDEF had not been specified.
|
DIMENSION [lbound:]hbound
|
type name (lbound to hbound); if lbound was not specified in HP SDL,
lbound is 1 in the HP BASIC output
|
ORIGIN member-name
|
n/a
|
The following table shows the HP SDL to HP BLISS language translation
summary.
HP SDL Declaration |
HP BLISS Output |
MODULE name IDENT string
|
!*** MODULE name IDENT string ***
|
/* comment
|
! comment
|
CONSTANT x
|
|
EQUALS n;
|
LITERAL x = n;
|
EQUALS STRING "s";
|
macro x = 's'%;
|
ENTRY name
|
EXTERNAL ROUTINE name
|
|
EXTERNAL ROUTINE name: NOVALUE ;
|
PARAMETER (type,...)
|
n/a
|
ANY
|
n/a
|
DESCRIPTOR
|
n/a
|
RTL_STR_DESC
|
n/a
|
IN
|
n/a
|
OUT
|
n/a
|
NAMED param-name
|
n/a
|
VALUE
|
n/a
|
REFERENCE
|
n/a
|
DEFAULT n
|
Used in KEYWORDMACRO when the /VMS_DEVELOPMENT qualifier is specified
|
LIST
|
Generates invocation of special predefined macro to handle LIST
parameters
|
OPTIONAL
|
Generates invocation of special predefined macro to handle OPTIONAL
parameters when the /VMS_DEVELOPMENT qualifier is specified
|
TYPENAME type-name
|
n/a
|
RETURNS return-data-type
|
n/a
|
NAMED param-name
|
n/a
|
VARIABLE
|
n/a
|
ALIAS internal-name
|
When the /VMS_DEVELOPMENT qualifier is specified, internal-name becomes
the name of the HP BLISS KEYWORDMACRO generated for the ENTRY
declaration.
|
LINKAGE
|
n/a
|
TYPENAME type-name
|
n/a
|
STRUCTURE and UNION
|
Each aggregate or member declaration in HP SDL produces a HP BLISS
macro declaration of the form:
|
|
MACRO name =
off,pos,size,ext %;
|
|
The BLISSF back end translates each aggregate and associated member
declaration in HP SDL to a HP BLISS field declaration. The
field-set-name is of the form prefix$name_FIELDSET, where prefix is
declared for the entire aggregate and name is the aggregate name.
|
|
FIELD prefix$name_FIELDSET=
|
|
SET
|
|
member-name =
[off,pos,size,ext];
|
|
.
|
|
.
|
|
.
|
|
TES;
|
|
literal prefix$s_name = size;
|
|
MACRO prefix$r_name = BLOCK
|
|
[pref$_name,BYTE]
|
|
FIELD
|
|
(prefix$name_FIELDSET)%;
|
|
off
|
|
Byte offset of this aggregate or item within the current aggregate
|
|
pos
|
|
Bit position from the offset
|
|
size
|
|
Size of the aggregate of item, in bits, if the size is 4 bytes or less.
Otherwise, this field contains 0, and HP SDL generates the size
declaration.
|
|
ext
|
|
Contains 0 if the value is zero extended, or 1 if the value is sign
extended or SIGNED bit.
|
|
The following HP SDL data types generate field specifications of the
form
"off,pos,size,ext" in various contexts. Where necessary,
constants indicating the size of the data type (field) are also
generated.
|
BYTE
[SIGNED
]
|
off,pos
,8,1
|
INTEGER
_BYTE
[SIGNED
]
|
off,pos
,8,1
|
WORD
[SIGNED
]
|
off,pos
,16,1
|
INTEGER
_WORD
[SIGNED
]
|
off,pos
,16,1
|
LONGWORD
[SIGNED
]
|
off,pos
,32,1
|
INTEGER
_LONG
[SIGNED
]
|
off,pos
,32,1
|
INTEGER
[SIGNED
]
|
off,pos
,32,1
|
INTEGER
_HW
[SIGNED
]
|
off,pos
,0,1 for /ALPHA
|
|
off,pos
,64,1 for /ALPHA/B64
|
|
off,pos
,32,1 for /VAX
|
HARDWARE
_INTEGER
[SIGNED
]
|
off,pos
,0,1 for /ALPHA
|
|
off,pos
,64,1 for /ALPHA/B64
|
|
off,pos
,32,1 for /VAX
|
QUADWORD
[SIGNED
]
|
off,pos
,0,1 for /ALPHA
|
|
off,pos
,64,1 for /ALPHA/B64
|
|
off,pos
,0,1 for /VAX
|
INTEGER
_QUAD
[SIGNED
]
|
off,pos
,0,1 for /ALPHA
|
|
off,pos
,64,1 for /ALPHA/B64
|
|
off,pos
,0,1 for /VAX
|
OCTAWORD
[SIGNED
]
|
off,pos
,0,1
|
BYTE UNSIGNED
|
off,pos
,8,0
|
INTEGER
_BYTE UNSIGNED
|
off,pos
,8,0
|
WORD UNSIGNED
|
off,pos
,16,0
|
INTEGER
_WORD UNSIGNED
|
off,pos
,16,0
|
LONGWORD UNSIGNED
|
off,pos
,32,0
|
INTEGER
_LONG UNSIGNED
|
off,pos
,32,0
|
INTEGER UNSIGNED
|
off,pos
,32,0
|
INTEGER
_HW
[SIGNED
]
|
off,pos
,0,0 for /ALPHA
|
|
off,pos
,64,0 for /ALPHA/B64
|
|
off,pos
,32,0 for /VAX
|
HARDWARE
_INTEGER
[SIGNED
]
|
off,pos
,0,0 for /ALPHA
|
|
off,pos
,64,0 for /ALPHA/B64
|
|
off,pos
,32,0 for /VAX
|
QUADWORD
[SIGNED
]
|
off,pos
,0,0 for /ALPHA
|
|
off,pos
,64,0 for /ALPHA/B64
|
|
off,pos
,0,0 for /VAX
|
INTEGER
_QUAD
[SIGNED
]
|
off,pos
,0,0 for /ALPHA
|
|
off,pos
,64,0 for /ALPHA/B64
|
|
off,pos
,0,0 for /VAX
|
OCTAWORD UNSIGNED
|
off,pos
,0,0
|
F
_FLOATING
|
off,pos
,32,0
|
D
_FLOATING
|
off,pos
,0,0 for /ALPHA
|
|
off,pos
,64,0 for /ALPHA/B64
|
|
off,pos
,0,0 for /VAX
|
|
literal prefix
$s
_name
= 8;
|
G
_FLOATING
|
off,pos
,0,0 for /ALPHA
|
|
off,pos
,64,0 for /ALPHA/B64
|
|
off,pos
,0,0 for /VAX
|
|
literal prefix
$s
_name
= 8;
|
H
_FLOATING
|
off,pos
,0,0
|
|
literal prefix
$s
_name
= 16;
|
|
If you specify /LANGUAGES
=BLISSF, a special set
of macros and FIELDSETs, which define the particular
COMPLEX data type and its
real and imaginary components, are generated.
|
F
_FLOATING COMPLEX
|
off,pos
,0,0 for /ALPHA
|
COMPLEX
|
off,pos
,64,0 for /ALPHA/B64
|
COMPLEX
|
off,pos
,0,0 for /VAX
|
|
literal prefix
$s
_name
= 8;
|
D
_FLOATING COMPLEX
|
off,pos
,0,0
|
|
literal prefix
$s
_name
= 16;
|
G
_FLOATING COMPLEX
|
off,pos
,0,0
|
|
literal prefix
$s
_name
= 16;
|
H
_FLOATING COMPLEX
|
off,pos
,0,0
|
|
literal prefix
$s
_name
= 32;
|
DECIMAL PRECISION (p,q)
|
n/a
|
BITFIELD
|
off,pos,size,0
|
|
literal prefix$_name = size;
|
LENGTH n
|
off,pos,n,0
|
|
literal prefix$_name = n;
|
MASK
|
literal prefix$m_name = mask-value; where mask-value is the decmal
equivalent of the binary mask
|
SIGNED
|
off,pos,size,1
|
CHARACTER
|
off,pos,size,0
|
LENGTH n
|
literal prefix$_name = n;
|
LENGTH *
|
n/a
|
VARYING
|
off,pos,size,0; where size = (length + 2) * 8. If (length + 2)
> 4, then size = 0.
|
|
literal prefix$s_name = <length + 2>;
|
ADDRESS
|
off,pos
,32,0
|
POINTER
|
off,pos
,32,1
|
POINTER
_LONG
|
off,pos
,32,1
|
POINTER
_HW
|
off,pos
,0,0 for /ALPHA
|
|
off,pos
,64,1 for /ALPHA/B64
|
|
off,pos
,32,1 for /VAX
|
HARDWARE
_ADDRESS
|
off,pos
,0,0 for /ALPHA
|
|
off,pos
,64,1 for /ALPHA/B64
|
|
off,pos
,32,1 for /VAX
|
POINTER
_QUAD
|
off,pos
,0,1 for /ALPHA
|
|
off,pos
,64,1 for /ALPHA/B64
|
|
off,pos
,0,1 for /VAX
|
BOOLEAN
|
off,pos,8,0
|
user-type-name
|
off,pos,size,0; where
size is dependent upon the type indicated by user-type-name
|
Default storage class
|
n/a
|
COMMON storage class
|
EXTERNAL
|
with /GLOBALDEF
|
GLOBAL
|
GLOBAL storage class
|
EXTERNAL
|
with /GLOBALDEF
|
GLOBAL
|
BASED pointer-name
|
n/a
|
TYPEDEF
|
n/a
|
DIMENSION [lbound:]hbound
|
lbound and hbound are only used to determine the total size of the
item, which is reflected in: literal prefix$s_name = size;
|
ORIGIN member-name
|
n/a
|