VAX SDL Version V3.2-12 Release Notes 1 INTRODUCTION Threstrictions (new and removed), and bug fixes for VAX SDL Version V3.2-12. strictions (new and removed), and bug fixes for VAX SDL Version V3.2-12. VApresent in Version V3.2-11. These corrections are described in the next section. n Version V3.2-11. These corrections are described in the next ction. DeV3.2-11, V3.2-10, T3.2-9, T3.2-8, T3.2-7, T3.2-6, T3.2-5, X3.2-4, X3.2-3, and X3.2-2 follow in the next eleven sections. These changes are in addition to those made at the time of the release of VAX SDL Version X3.2-1, which form the main body of these release notes. VAX SDL Version .2-1, which form the main body of these release notes. Tofollowing: opy of the VAX SDL Version V3.2-12 release notes, type the llowing: $ PRINT SYS$HELP:SDL032.RELEASE_NOTES 2 Changes in VAX SDL V3.2-12 table of contents, which was omitted in Version V3.2-11. ludes a table of contents, which was omitted in Version V3.2-11. of the SDL notes file (TURRIS::SDL). cifies the correct location of the SDL notes file (TURRIS::SDL). the SYSTARTUP_V5.COM procedure. w specifies the correct name for the SYSTARTUP_V5.COM procedure. 3 Changes in VAX SDL V3.2-11 updated for Version 3.2. ucture Definition Language has been updated for Version 3.2. several miscellaneous problems in the help text have been fixed. several miscellaneous problems in the help text have been fixed. updated for Version 3.2. SDL language have been improved and updated for Version 3.2. Page 2 4 Changes in VAX SDL V3.2-10 into Ada a reference to a pre-defined aggregate preceded by an IFLANGUAGE statement. to a pre-defined aggregate preceded by an IFLANGUAGE statement. language output have been conditionalized in order to prevent re-definition of these record structures within a BASIC program. re-definition of these record structures within a BASIC program. generated for an ITEM with the TYPEDEF attribute now contains the name "ITEM" instead of "FILL (1)" to facilitate direct access to the data item within the record structure. ate direct access to the data item within the record structure. output. * now yields name[] instead of name[1] in C language output. extra (duplicate) .MACRO directive for a module when the first statement in the module is a DECLARE statement. e when the first statement in the module is a DECLARE statement. generated for LIST parameters that are conformant strings. now generated for LIST parameters that are conformant strings. 5 Changes in VAX SDL T3.2-9 dimension) are now generated in PL/I language output for parameters that are of a pre-defined aggregate type. output for parameters that are of a pre-defined aggregate type. 6 Changes in VAX SDL T3.2-8 dimension) are now generated in PL/I language output for items that are of a user-defined type. PL/I language output for items that are of a user-defined type. output file now indicates that the file was created by "VAX" SDL instead of "VAX-11" SDL. that the file was created by "VAX" SDL instead of "VAX-11" SDL. Page 3 7 Changes in VAX SDL T3.2-7 TYPEDEF attribute no longer appears inside a comment in PL/I language output. no longer appears inside a comment in PL/I language output. 8 Changes in VAX SDL T3.2-6 yields the specified user-defined type name (instead of INTEGER) in VAX Pascal language output. ed type name (instead of INTEGER) in VAX Pascal language output. AGGREGATE type (i.e., STRUCTURE or UNION). a parameter of an AGGREGATE type (i.e., STRUCTURE or UNION). is always passed to the called routine by the immediate value mechanism. passed to the called routine by the immediate value mechanism. 9 Changes in VAX SDL T3.2-5 clause specified now conform to VMS macro naming conventions. These macro naming changes apply only to BLISS and MACRO language output. ro naming changes apply only to BLISS and MACRO language output. certain conformant array type parameter descriptions in VAX Pascal. conformant array type parameter descriptions in VAX Pascal. in appropriate VAX Pascal parameter descriptions. ism specifier in appropriate VAX Pascal parameter descriptions. source record to extend beyond column 72 by splitting up the string using FORTRAN continuation records and string concatenation. FORTRAN continuation records and string concatenation. for aggregate members of type CHARACTER LENGTH 0. Instead, an informational comment is generated for the aggregate member. an informational comment is generated for the aggregate member. when processing explicitly DECLAREd items or items which are included in a compilation via the READ statement. tems which are included in a compilation via the READ statement. Page 4 the /VMS_DEVELOPMENT qualifier has now been placed instead under the control of a new qualifier, /PLI_DEVELOPMENT. instead under the control of a new qualifier, /PLI_DEVELOPMENT. 10 Changes in VAX SDL X3.2-4 AlAda output changes are: .2-4 are related to Ada language output. These a output changes are: UNION definition that references a pre-defined AGGREGATE. (Previously, either an access violation would be incurred or incorrect Ada language output would be generated.) incurred or incorrect Ada language output would be generated.) attributes are now translated to DESCRIPTOR(S) and DESCRIPTOR(SB), respectively, for ENTRY arguments of type CHARACTER. B), respectively, for ENTRY arguments of type CHARACTER. DEFAULT 0 argument with the TYPENAME BOOLEAN clause attached. AN DEFAULT 0 argument with the TYPENAME BOOLEAN clause attached. that is of a user type (TYPEDEF) that is, in turn, defined to be of another user type. (TYPEDEF) that is, in turn, defined to be of another user type. component that is of a user type defined to be BOOLEAN. record component that is of a user type defined to be BOOLEAN. for an item that is of an AGGREGATE user type. always generated for an item that is of an AGGREGATE user type. 11 Changes in VAX SDL X3.2-3 Bu g fixes and other changes in VAX SDL Version X3.2-3 were: reference to the pre-tag of the containing structure or union has been corrected. The type reference is now correctly prefixed with struct or union. pe reference is now correctly prefixed with struct or union. item names has been corrected. nsistency in appending _TYPE to item names has been corrected. introduced in X3.2-2, has been corrected. ors in VAX Pascal, introduced in X3.2-2, has been corrected. added. ction of forward reference errors in VAX Ada has been added. Page 5 accommodate VAX Ada as well as VAX Pascal. as been changed to accommodate VAX Ada as well as VAX Pascal. start of each module for multi-module compilations. Prior to this, it was possible for definitions from an earlier module to be incorrectly re-used. definitions from an earlier module to be incorrectly re-used. 12 Changes in VAX SDL X3.2-2 Bu g fixes and other changes in VAX SDL Version X3.2-2 are: large sources no longer occurs. and EPASCAL back ends with very large sources no longer occurs. defined later in the same module (with TYPEDEF). s can now be defined later in the same module (with TYPEDEF). sections under a single occurrence of the keyword. YPE and VAR sections under a single occurrence of the keyword. reference to a non-base type. an error for an illegal forward reference to a non-base type. have the same type as well as the same size. This is implemented as part of the new PASCAL error checks. ze. This is implemented as part of the new PASCAL error checks. union element that refers to a structure or union with the TYPEDEF attribute. refers to a structure or union with the TYPEDEF attribute. 13 NEW FEATURES 13 .1 User-defined Data Types A in an ITEM or AGGREGATE declaration. The keyword may appear where GLOBAL, COMMON or BASED are permitted, and the four keywords are mutually exclusive. ASED are permitted, and the four keywords are mutually clusive. Ththis is supported. Some languages already do this for an ITEM or AGGREGATE declaration, in which case the TYPEDEF is ignored. The primary purpose of this addition is to extend type declaration to the C language back end. this addition is to extend type declaration to the C language ck end. Th13.3): fied SDL syntax is as follows (`sizeopt' is explained in section 3.3): Page 6 { user-type sizeopt } [ GLOBAL ] [ TYPEDEF ] [ TYPEDEF ] [ DIMENSION [ lbound: ] hbound ] [ PREFIX prefix-string ] [ TAG tag-string ] ; Page 7 { UNION } [ data-type ] { UNION } [ GLOBAL ] [ BASED poin [ TYPEDEF ] er-name ] [ TYPEDEF ] [ DIMENSION [ lbound: ] hbound ] [ PREFIX prefix-string ] [ TAG tag-string ] [ ORIGIN member-name ] [ FILL ] ; . e-body . END [ ag END [ aggregate-name ]; An example of the type declaration of an aggregate is: i1 LONGWORD ; t STRUCTURE TYPEDEF PREFIX jg$ ; i2 LONGWORD ; END ; NGWORD ; END ; Th is may then be referenced in a succeeding ITEM declaration as follows: ITEM foo MyStruct ; 13 .1.1 Caveat Wiwhereby built-in SDL data types could be abbreviated is no longer available. For example, the name CHAR will now be treated as a reference to a user-defined data type and not expanded to mean CHARACTER. reference a user-defined data type and not expanded to mean CHARACTER. 13 .2 Entry point return types Thto the built-in SDL data types. Also a new keyword VOID is added as a return type. VOID is required for the C language back end, which causes a return type of `int' to be generated if the RETURNS clause is omitted. a eturn type of `int' to be generated if the RETURNS clause is omitted. Page 8 Thexplained in section 13.3): TRY statement is as follows (`sizeopt' is plained in section 13.3): ENTRY entry-name [ ALIAS internal-name ] [ PARAMETER (param-desc,...) ] [ LINKAGE link-name ] [ VARIABLE ] [ RETURNS return-data-type [NAMED param-name ] ] [ TYPENAME type-name ] ; { user-type siz { VOID } e sizeopt } { VOID } 13 .3 Undeclared type references Thof a user-defined type that is unknown in the current SDL compilation, but will be known when the target language source is compiled, through the inclusion of a file which defines the type. is compiled, through the clusion of a file which defines the type. SDsize when included in an AGGREGATE declaration. SDL also needs to know its equivalent predefined type so that the correct default tag letter, if required, can be output. type so that the correct default tag letter, if quired, can be output. Thstatement. This explicitly declares the unknown variable to be of the size and type of a known data type. An unknown variable may also be implicitly declared in the body of a module by appending the SIZEOF clause. It is permissible for a variable to be declared more than once (either explicitly or implicitly), but any subsequent declaration must match the first; otherwise an error is given. subsequent declaration must tch the first; otherwise an error is given. Thuser-defined type that is defined in the current SDL compilation, or an expression. If an expression is given it must evaluate to the number of bytes to be reserved for this object. If the object is dimensioned, the SIZEOF expression must evaluate to the size of a single element. ned, the ZEOF expression must evaluate to the size of a single element. Thderived from the type in the SIZEOF clause. If an expression is used in place of a data type to reserve a fixed number of bytes, the default tag letter is T (character string). As always, the default tag may be overridden by an explicit TAG option. s always, the default tag may be erridden by an explicit TAG option. Aloutput tree for use by the back ends, these do not result in specific utput tree for use by the back ends, these do not result in specific Page 9 ge nerated code. A new statement with the following syntax is added: { user-type } [ PREFIX prefix-string ] { ( expression { ( expression ) } [ TAG tag-string ] Thdistinguish syntactically between user-type and a name or string used as a constant. syntactically between user-type and a name or string used as a nstant. Th e section of the above syntax { user-type } { ( expression { ( expression ) } isconstructs as shown in sections 13.1 and 13.2 in order to make an implicit declaration of the item. The term `sizeopt' means that a SIZEOF clause may optionally appear. The term `sizeopt' means that a SIZEOF clause y optionally appear. 13 .3.1 Restrictions Damay SIZEOF clauses be nested where the syntax would otherwise allow it. In either case, an error results. For example, would otherwise allow it. either case, an error results. For example, DECLARE foo SIZEOF ADDRESS (bar SIZEOF LONGWORD); is illegal, whereas DECLARE foo SIZEOF ADDRESS (CHARACTER); an d ITEM foo ADDRESS (bar SIZEOF LONGWORD); ar e both valid. 13 .4 Local include A specification refers to a previously-generated SDL intermediate (.SDI) file. The file is read, and the definitions of numeric constants, aggregate names, and user-defined type names are made available to the current compilation. The actual definitions are not included in the output target language file(s). definitions are not included in the utput target language file(s). Page 10 Thbe made. Because the definitions do not appear in the output file, they may need to be included when the output language file is compiled. , they y need to be included when the output language file is compiled. Reconstant is substituted at SDL compile time, and no reference to the constant name is made in the output file. time, and no reference to the nstant name is made in the output file. 13 .5 String constants Thkeyword STRING has been introduced. to include string constants. A new yword STRING has been introduced. Th e new syntax is: CONSTANT constant-name constant-class { EQUALS STRING string string-options } { EQUALS STRING string string-options } numeric-options = [ PREFIX prefix-string ] [ TAG tag-string ] [ COUNTER #local-name ] [ TYPENAME type-name ] ; string-options = [ PREFIX prefix-string ] [ TAG tag-string ] ; Thnot valid for string constants. LS expression remains unchanged, and is t valid for string constants. Eahandling delimiters and other special characters embedded in the string. In the SDL source, a string is delimited with quotation marks ("string"), and an embedded quotation mark is represented as a pair of quotation marks. embedded quotation mark is represented as a pair of quotation rks. Fo r example, the SDL statement CONSTANT str EQUALS STRING "String 'with' some ""embedded"" quotes"; is output in PL/I as %replace str by 'String ''with'' some "embedded" quotes'; in C as #define str "String 'with' some \"embedded\" quotes" Page 11 an d in BASIC as str = "String 'with' so str = "String 'with' some " + '"embedded" quotes' 13 .5.1 Caveat ThAs this usage clashes with the new reserved word, these sources must be changed to enclose the word "string" in quotation marks. sources must be anged to enclose the word "string" in quotation marks. 13 .6 Conditional compilation A whether the translation of a particular section of SDL source code will be included in the output for a particular language or set of languages. LITERAL statements (see next section) may also be included in a conditional section. This is useful for cases where a particular construct for a particular language is needed. ases where a particular nstruct for a particular language is needed. Th e syntax is as follows: . . . lang1 lang2 lang3 /* Start comment set of SDL . . . statements END_IFLANG END_IFLANGUAGE [lang1 lang2 lang3] ; /* End comment 'lspaces. The language name must be spelled in full, and is not checked for validity. Each language back end checks whether its language name is in the list, and if so, outputs the conditional code. The reason for not checking validity is that SDL should not have a list of language back ends built into it. This allows additional language back ends to be incorporated in future. allows additional language back ends to be corporated in future. Ththat the list is optional. However if the list is supplied, it must match the language(s) supplied with the IFLANGUAGE keyword, but not necessarily in the same order. If the list does not match, a warning message is given (see NEW MESSAGES). f the list does not match, a warning message is given ee NEW MESSAGES). IfIFLANGUAGE, a DUPCONATT (duplicate or conflicting attributes) error is given. GE, a DUPCONATT (duplicate or conflicting attributes) error is ven. Co mments are treated as follows: is being output for a particular language. This is because the comment is considered to be within the body of the conditional. comment is considered to be within the body of the conditional. Page 12 the body of the conditional. is always output, as it is outside the body of the conditional. 13 .7 Text pass-through (LITERAL statement) Thlanguage file without translation. This may be used in conjunction with conditional compilation to output constructs in a particular language that cannot be represented in SDL. However it should be used with care because the purpose of SDL is to enable constructs to be represented in multiple languages. of SDL is to enable constructs to be represented in multiple nguages. Thas follows: ses new keywords LITERAL and END_LITERAL, and the syntax is follows: literal te literal text line 2 . . . ext line 2 END_LITER END_LITERAL; /* End comment Noconsidered to be within the body of the literal. If further text appears on the same line after the LITERAL; a syntax error will result. t appears the same line after the LITERAL; a syntax error will result. 13 .8 Prefix and tag suppression Thtwo optional keyword values, PREFIXES and TAGS. This may appear as /SUPPRESS=PREFIXES, /SUPPRESS=TAGS, or as /SUPPRESS=(PREFIXES,TAGS). /SUPPRESS without a value has no effect. as /SUPPRESS=(PREFIXES,TAGS). UPPRESS without a value has no effect. Thtags to names that would otherwise be added when an SDL source is compiled. Note that because SDL does not add a default tag to a name unless a prefix is supplied, suppression of prefixes alone will also suppress default tags. upplied, suppression of prefixes alone will also ppress default tags. Pris compiled. If an intermediate file is generated by use of the /PARSE qualifier, without suppression of prefixes/tags, it is not possible to suppress them later when using the /NOPARSE qualifier. The qualifiers /NOPARSE and /SUPPRESS are mutually exclusive and will result in a DCL error if both appear on a command line. The reason for this is that by the time the intermediate file is generated, any prefixes and tags have already been attached to the name, and it is not possible later to detach them. been attached to the name, and it is not possible later to detach hem. Page 13 14 NEW MESSAGES 14 .1 Warning Message LANGMATCH, Language list does not match IFLANGUAGE [Line n] does not match the list after IFLANGUAGE. LANGUAGE does not match the list after IFLANGUAGE. User action: Correct the second list, or remove it. 14 .2 Error Messages SIZEREDEF, Size or type of item redefined [Line n] an earlier DECLARE statement or SIZEOF clause, a an attempt is being made to redefine the object with a different size or type. redefine the object with a different size or type. match the earlier declaration. se, or change it to match the earlier declaration. SIZEOF [Line n] ggregate, cannot be qualified by SIZEOF [Line n] declared aggregate. OF clause is a previously declared aggregate. User action: Remove the SIZEOF clause, or correct the name. SIZENEST, Illegal nesting of SIZEOF clauses (Item ) [Line n] Explanation: An attempt has been made to nest SIZEOF clauses. remove the nested element into a separate DE statement. ested element into a separate DECLARE statement. [Line n] stant used in arithmetic expression [Line n] has been defined as a string constant. expression has been defined as a string constant. User action: Correct the reference. [Line n] rward reference for output language [Line n] Page 14 generated in VAX Pascal output, or any forward reference has been generated in VAX Ada output. reference has been generated in VAX Ada output. output languages. rce, or do not use with these output languages. 15 NEW KEYWORDS ThIf you currently use any of these keywords as names in your VAX SDL source files, you may retain the word's name usage by placing double quotation marks (" ") around the word. 's name usage by placing double quotation rks (" ") around the word. END_IFLAN END_LITERAL E IFLANGUAGE LITERAL E READ L SIZEOF STRING TYPEDEF VOID F VOID