Guide to the HP Structure Definition Language


Previous Contents Index


 
type structure-name is 
  record 
    member-name : type; ... 
  end record; 
 
  for structure-name use 
    record 
      member-name at offset range 0 .. size; 
      ... 
    end record 
  for structure-name'size use total-size; 
 
structure-name_INIT : constant structure-name := 
  (member-name => initial_value, 
  ...) 
 

Size is the size of the field in bits, and total_size is the size of the entire record in bits.


HP BASIC Translation Summary

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


HP BLISS Translation Summary

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


Previous Next Contents Index