.pg .x descriptor .x descriptor__s .x descriptor__d .lt ------------------------------------------------------------------------ DESCRIPTOR .BLKx length pointer [label] TYPE=type CLASS=class DESCRIPTOR_S .BLKx [length] [pointer] [label] [TYPE=t] [CLASS=s] DESCRIPTOR_D .BLKx [length] [pointer] [label] [TYPE=t] [CLASS=d] ------------------------------------------------------------------------ .el .b 3 These macros will allocate the appropriate descriptor structure: .b .lt DESCRIPTOR descriptor DESCRIPTOR_S string descriptor DESCRIPTOR_D dynamic string descriptor .el .b If either ^&length\& or ^&pointer\& is not specified, 0 will be used. If ^&pointer\& is specified as the asterisk character (i.e. _*), the appropriate block storage allocation will be generated. If ^&label\& is also specified after the asterisk character, then ^&label\& will refer to the address of the generated block storage allocation. .b You must specify the appropriate symbols for ^&type\& and ^&class\&. .b BLK^&x\& must be one of the following: .b .lt .BLKA reserves storage for addresses (longwords) .BLKB reserves storage for byte data .BLKD reserves storage for double-precision floating-point data .BLKF reserves storage for single-precision floating-point data .BLKG reserves storage for G_floating data .BLKH reserves storage for H_floating data .BLKL reserves storage for longword data .BLKO reserves storage for octaword data .BLKQ reserves storage for quadword data .BLKW reserves storage for word data .el .b For example: .b .lt var string_descr: descriptor_s .blkb 512 * string .el .b will generate the following code: .b .lt string_descr: .word 512 .byte dsc$k_dtype_t .byte dsc$k_class_s .address 3000$ 3000$: string: .blkb 512 .el