C28 6594 4_PL1_F_Programmers_Guide_Nov68 4 PL1 F Programmers Guide Nov68
C28-6594-4_PL1_F_Programmers_Guide_Nov68 C28-6594-4_PL1_F_Programmers_Guide_Nov68
User Manual: C28-6594-4_PL1_F_Programmers_Guide_Nov68
Open the PDF directly: View PDF .
Page Count: 288
Download | |
Open PDF In Browser | View PDF |
File No. S360-29 Form C28-6594-4 Systems Reference Library IBM System/360 Operating System PL/I (F) Programmer's Guide Program Number 360S-NL-Sll The PL/I (F) Compiler translates PL/I source programs into object programs in System/360 machine language. This publication describes the facilities provided by the compiler, and the conventions and restrictions which the user must observe. It explains how to compile, link-edit, and execute PL/I source programs in the environment of System/360 Operating System. Features of PL/I which are not supported by the (F) Compiler are detailed in Appendix H of this publication. OS PREFACE This publication describes the facilities provided by the PL/I (F) Compiler, which functions under IBM System/360 Operating System. It covers those language restrictions and operating considerations that the user must take into account in using the (F) Compiler. Job Control Language Charts, Form C28-6632 Supervisor and Data ces., Form C28-6646 system C28-6550 Management~ervi= Programmer's Guide, Form PREREQUISITE PUBLICATION The reader is assumed to have a working knowledge of PL/I; he should therefore be familiar with the material contained in the following publication: Utilities, Form C28-6586 In addition to those mentioned above, the following publications contain information which may be helpful to the user. IBM System/360 Operating system: The following publications are referred to in the text for information beyond the scope of this publication: !~~_§yst~ffil3£Q_QE~fati~~System: ~i~~~g~_Editof' Concepts and Facilities, Form C28-6535 Form Storage Estimates, Form C28-6551 Form C28-6538 ~ob Control~~~~age, Form C28-6539 r-----------------------------------------------------------, IFifth Edition (November, 1968) I I I IThis is a major revision of, and obsoletes, C2B-65911-3 andl ITechnical Newsletters N33-6006 and N33-6007. Changes tol I the text, and small changes to illustrations, are indicated I I by a vertical line to the left of the change: changed or I I added illustrations are denoted by the • symbol to the left I lof the caption. I I I IThis edition applies to Release 17, of IBM System/3601 IOperating System, and to all subsequent releases until! lotherwise indicated in new editions or Technical News-I I letters • Changes are continually made to the specifica-I I tions herein: before using this publication in connection I Iwith the operation of IBM systems, consult the latest IBMI ISystem/360 Bibliography SRL Newsletter, Form N20-0360, fori I the editions that are applicable and current. I L ___________________________________________________________ J Requests for copies of IBM publications should be made to your IBM representative or the IBM branch office serving your locality. A form for reader's comments is provided at the back of this publication. If the form has been removed, comments may be addressed to IBM United Kingdom Laboratories Ltd., Programming Publications, Hurs ley Park, Winchester, Hampshire, England. CI Copyright International Business Machines Corporation 1966, 1967, 196B RL/1-2~£f~~i~~_~iQra£YL_Co~2~tatiQ~~! 2~Q£Q~~i~~~, Form C28-6590 CONTENTS INTRODUCTION • • • • 11 PL/I (F) Compiler. • 11 Different Versions of the Compiler • Changes at Second Version •.• · Changes at Third Version • • • Changes at Fourth Vers ion. .• • Changes at Fourth Version, Release 17. • • • • • • • • • Programming Techniques and Optimization of Source Code. Compatibility between Different Versions of the PL/I Library and Compiled Code • .• • Language Level • • • • • Language Support • Language Features Not Supported in the Fourth Version • Compiler Options • • • • • • • • 11 11 12 12 13 14 14 • 16 . 16 • 16 • 16 Processing and the Operating system. • • 16 Job. • • • • • • • • 17 Job step • • • •• 17 Data Set. . 17 PL/I Processing. • • • • Data Set Considerations. Cataloged Procedures · 19 • 19 JOB PROCESSING • • • • • 20 • 18 Compiler Processing . • • • • • • 20 Compiler ddnames. • • 20 Compiler Device Classes • 21 Blocking of Compiler Input and Output • • • · 23 Blocking of Compiler Input • . 23 Blocking of Compiler output. • 23 Calculations for Storage Requirements. • • • • .• • • · 23 SYSPUNCH/SYSLIN in Batched Compilations. • • • • • • • 24 Compil er opt ions • . • . • . · 24 completion Codes for the Compiler • • 30 Job Control Procedure for Compilation. • 30 Batched Compilation. • 30 Compiler Output • • • • 31 Printed Listings • • • • 31 Compiler Options • . 32 Compile-Time Processor Input Listing • • 32 Source Program Listing • • • 32 Storage Requirements . • . • • 33 A'ttribute and Cross Reference Table • • • • • • • • • . • • 33 Aggregate Length Table. • • • 35 External Symbol Dictionary Listing • • • • • • • • • 36 0 0 • • • 0 00 • • • • • • • 0 • 0 • • Description of Contents of ESD Listing • • • • • • • • • • • • STATIC INTERNAL Storage Map. • • Object Program Listing • • Diagnostic Messages • • . • • • • Time of compilation. • • • · Object Module output. • • . • • Serialization of Object Decks Abnormal End of compilation • · • 36 • 37 • 38 • 39 • • • . 40 40 40 40 Linkage Editor Processing. • • • •• Linkage Editor Input and output. • Unit Names and ddnames • • • • • . Specifying Additional Libraries. • Link-Editing a PL/I Subroutine into a Private Library. • • • • • Linkage Editor Priority. • • • • • Overlaying of PL/I Programs.. . • Other Linkage Editor Facilities. • Options for Linkage Editor Processing • • • • • .• • • • . Job Control Procedure for Linkage Editor • • • • • • • • • • Linkage Editor output . • • Size of Load Module. • • • • • Module Map • .• .• • • • • Cross Reference Table. . • • • • • Disposition Data • • • • Diagnostic Messages • . · . 40 40 41 41 Load Module Execution. . . Execution Device Specification • • DCB Parameter. • • • • . . • Job Control Procedure for Compiling, Processing by Linkage Edi tor, and Execut ing. . . . . Object Program Outp ut . • • . • Stream-Oriented Output. Record-Oriented Output • . . Object Time Diagnostic Messages . • Operator Messages. • • • • • System output . • . • • . • . • Use of Cataloged Procedures. . . . Compilation with Deck Output • • . Compilation with Object Modulp Output. • . • . • • • . • • • . . Compilation and Link-Editing • • • Compilation, Link-Editing and Execution • ••• •• . . Link-Editing and Execution • • Link-Editing and Execution of Several Separate Compilations . • 41 41 42 44 q4 45 45 45 45 45 45 46 46 46 46 46 47 47 47 48 48 48 48 49 49 49 49 50 50 MANAGING DATA. • • 51 Files and Data Sets. . CONSECUTIVE Organization . • INDEXED Organization. . • • REGIONAL Organization • . • Source Keys and Recorded Keys. REGIONAL (1) Data Sets •• • • 51 • • 51 • • 51 0 • • • 55 55 • 56 REGIONAL (2) Data Sets. • • • • • • 5 (. REGIONAL(3) Data sets • • • • • • • 57 Dummy Records within REGIONAL Data Sets • • • • 58 Data Set Definition. • • 58 specifying Data Sets • • • • • • Naming of the Data Set (DSNAME). • Extent Allocation (UNIT, VOLUME, SPACE, LABEL) • • • • • • • • Disposition (DISP,SYSOUT) • • Data Set Attributes (DCB). • • File Attributes and the DD Statement • • • • • • • • • Record Format Information • Record Types • • • • • • .• • Block Size • • • • • • .• Logical Record Length. • Record Format. • • Use of the Various Record Formats in STREAM I/O • • • • • • Use of the Various Record Formats in RECORD I/O • • .• • Use of Spanned Records .• • • • Spanned Records and LOCATE I/O • • Number of Buffers. • • • • • • Number of Channel Programs • • Chained Scheduling • • • • Source Code (Paper tape) • Density (Magnetic Tape). • conversion (Magnetic tape - 7-track) • • • • Mode (Card Reader, Punch). • • Stacking (Card reader, punch) • • . Print Spacing (Printer).. • • • • • UCS Printer - Suppress TRANSMIT. • Validi ty Check • • • • • • Deleted Records. • • • • Keys • • • • • • • • • • • • Extended Search Limit. • • • Relative Key position. • •• • Master Indexes • • • • • • • Independent Overflow Area. • • •• Cylinder Overflow Area • • • Data Set Organization. • • • • PRINT Files. • • • • • • • • • The Tab Control Table. • • • • changing the Tab Settings.. • M • Creating and Accessing Data Sets • • 58 58 58 59 59 59 61 61 62 62 63 64 64 65 65 65 65 65 65 66 66 66 66 66 66 66 66 67 67 67 67 67 67 68 69 69 • 70 • 70 • • 70 • 70 • 70 • • • • • • • • • • • • 73 • 73 • 74 74 • 75 Processing Modes in Record I/O • Move Mode • • • • • Characteristics. • Language Forms • • • • • File Attributes. • • • • Loca te Mode • • '. • • Characteristics. • • • • Language Forms • File Attributes. • 76 76 76 76 76 76 76 77 77 • • • • • • 61. Stream Data Sets • • • • • • • • • • 70 Creation of STREAM Data Sets • 70 Accessing of STREAM Data Sets. • • 70 Record Data Sets • • • .• • Use of the EVENT Option. CONSECUTIVE • • • • • Creation of CONSECUTIVE Data sets. • • • • • • • • • Accessing of CONSECUTIVE Data Sets. • • • • • • • • • INDEXED • • • • • • • • • • • • • Creation of INDEXED Data Sets. Accessing of INDEXED Data Sets SEQUENTIAL Access. • DIRECT Access. • • • • • • • • REGIONAL. • • • • • • • • • • • • • creation of REGIONAL Data Sets • Accessing of REGIONAL Data Sets. SEQUENTIAL Access.. • DIRECT Access. • • • • 70 71 71 72 72 73 SYSTEM REQUIREME~S,. • • • 78 Minimum system/360 Requirements for the (F) Compiler. • • • • • • Instruction Sets • • • • Timing Clock ,~ • ,. • • • • Printer Character sets • • Operator's Console Character Sets. • • • • • • • • • • • System/360 Operating System Requirements • • • • • • • • Primary control Program of the operating System. • • • • • Multiprogramming with a Fixed Number of Tasks CMFT) • • • • • Multiprogramming with a Variable Number of Tasks (MVT) • • 78 • 78 • 78 • 78 • 78 • 78 • 78 • 79 • 79 Compiler Support • • 79 Object Program Support • • control Program Options. Usage of Data Management Methods for STREAM I/O. Usage of Data Management Methods for RECORD I/O. 79 • • 79 Access • • • • • 79 Access • 79 MANAGING PROGRAMS. • • 81 Program Segmentation • The MAIN Option:. communication Between Separate Compilati ons. • • • • • • Estimation of Program Size • • · • 81 • • 81 • • 81 • • 81 Non-PL/I Modules in PL/I Programs • • • • Combination of PL/I With Other Languages • '. • • • • • • • Variable-Length Argument List. • • PL/I Library Subroutines •• 82 82 82 83 Conditional Execution of Job Steps • • • 83 Setting Conditions • .. • .• • • • • 83 Return Code Setting by PL/I Object Program. • • 83 Checkpoint/Restart • • • • • • • • • 83 Compatibility with Release 11 Checkpoint/ Restart • • 83 Introduction • • • • 83 Step Restarts. • • • 84. Checkpoint Restarts. 84 Single Checkpoint. • • • • ,. • • • Multiple Checkpoints • • • • • • • Specifying Checkpoint Restart. • • Restarts • • • • • • • • • • • • • Data sets for Programmer-Deferred Checkpoint Restarts. • • • • • • Card Input when Using PCP. • • • • SYSIN. • • • • • SYSOUT - PCP · SYSOUT - MVT • Preservation of Data sets • • • • • • Temporary Data sets. Updated Data Sets. • • • • Multitasking • • • • • • • • • Multitasking Requirements. Hystem/360 Requirements. Operating System Requirements • • Programming Requirements • '. Mul ti tasking Management • '. • • Programming considerations • • Use of Priorities in PL/I. • I/O Handling • • • Strings. • • • • • Task Termination • Multiprocessing • • Synchronization. • • object Program Management • Pseudo-Register Vector (PRV) PL/I Sort. • • • • • • • • • PL/I Sort Environment. User Control of SORT ddnames sorting Records from One Data Set to Another. • • • • • • Sorting Records from a PL/I Program or Procedure onto a Data Set. • • • • • • • • • Sorting Records from a Data Set into a PL/I Program or Procedure • • • • • _ • • _ • • Supplying~ Sorting, and Passing Back Records to a PL/I Procedure • • • • • • • • • Use of PL/I SORT in a Mul ti tasking Environment. ,. Data Interchange • • • PROGRAMMING TECHNIQUES • 1. · • • • · • 84 84 85 86 86 86 86 86 87 87 87 87 87 87 87 87 88 88 88 • 90 • 91 · 92 • 93 • 94 • 94 • 95 • 95 • 95 • 95 • 96 · 97 • 100 • 101 .102 .103 .103 '. .104 Common Errors and Pitfalls .104 a. Operating System and Job Control. • • • • .104 b. Source Program and General Syntax • • • • • • • • • • • • • • 104 c. Program Control • • • • • • • • 104 d. Declarations and ~ttributes • • 105 e. Assignments and Initialization. • • • • • • • • .107 f. Arithmetic and Logical Operations. • • • • .108 g. DO groups. • • • • .110 h. Data Aggregates. • .111 i. S t r i n g s . . . . . .111 j. Functions and Pseudo-Variables. • .111 k. ON-Conditions and ON-Units • • 111 1. Input/Output • • • • • • • . • 112 2. Programming for Increased Efficiency. • • • • • • • • • • .115 a. Improving Speed of Compilation ,. • • • • • • .115 b. Improving Speed of Execution .116 c. Decreasing size of Dict ionary • • • • • • • .120 d. Use of Storage • • • • .122 e~ Use of Compile-Time Facilities. • • • • • • • • 123 f. Use of Input/Output Facilities. • • .124 g. Additional Hints • .126 TESTING PROGRAMS • • • • .128 Debugging Facilities. • .128 Control of Interruption and Error Handl ing,. • • • • • . .128 ON-Codes • • • • • • • • • • • • • 128 Trace of Active Procedures •• 131 Symbolic Output. • • . • • • • • .132 Communication with the Program . . 132 User Requested Dump. • • • •• 132 User Completion Codes for Abnormal Termination. • • .133 Return Codes. • • • .134 APPENDIX ~: DATA FOR~TS • • .135 compiler Input • • .135 Representation of Data Coded Arithmetic Data •• String Data. _ • • • • • • Pi ct ured Data. • • • • • • Data Element Descriptor (DED). Pointer Data • • Offset Data • Label Data • Task Data • • Event Data • ~rea Data. • Arrays . • Structures • The Creation of Dope Vectors • · • · · • • · • · · .135 .135 .136 .137 .137 .138 .138 .138 .138 .139 • .139 · .140 • .140 • .140 APPENDIX B: IMPIEMENT~TION CONVENTIONS AND RESTRICTIONS. • • • • • • • • • • .141 Input/Output Conventions and Restrictions. • • ,. • • • PL/I and Data Sets • DISPLAY • • PAGESIZE • LINESIZE LINESIZE, SKIP and COLUMN in Non-PRINT Files • • • • • Block Size and Record Size • • Data-Directed Input/Output Edit-Directed Input/Output Character Code • • • • • • 48-Character Set • • • • • The ENVIRONMENT Attribute. GENKEY Option. • EVENT Option • • • • • • • • .141 • .141 • .141 •• 141 • .141 · · • • • • • • • .142 .142 .142 .142 .142 .142 .142 .145 .146 WAIT statement • • • • • TITLE Option • • • • • • BASED Variables. • Initializing LABEL Variables in structures with the LIKE Attribute • • • • • • • • • Compile-Time Processing Conventions and Restrictions.. • • • The MACRO Option • • • • Precision. • • _ • • • • • INCLUDE Conventions. • • Compile-Time Procedures. Compile-Time DECLARE • • • Combined Level of Nesting and Depth of Replacement. • • • • Limitations on Size of compile-Time Processor Input. Limitations on Number of Compile-Time Variables. Output Line Numbering. • .146 .146 • 146 • 146 • 147 . 147 •• 147 • .147 • 11.n • • 147 • .147 • .147 .148 • 148 other Compiler conventions and Restrictions. • • • • • • • • • • .148 • • • . .148 OPTIONS Attribute. • Parameter to the MAIN Procedure • • 148 Number of Variables. • • • • • • • 148 Number of Executable Statements. .148 Size of an Individual Statement. • 148 Factoring of Attributes. .149 Limitations on Nesting • • 149 The GENERIC Attribute. • • .149 Number of Blocks in a Compilation • • • • • • .149 Level Numbers. • • • • • • .149 Number of Parameters .149 Number of Dimensions. • • .149 Array Boun1s • • • • • • .149 Data-Directed List. • • • 150 Structure and Array Expressions • • 150 Constants. • • • • • .150 Sterling Constants. • • .150 String Constants • • • • .150 Floating-Point Constants and E Format Items. • . .150 Constants Returned by Procedures .150 Compiler-Generated Names • • • • • 150 Temporary Results in Expression Evaluation. • • • • .151 Multiple Assignments and Pseudo-Variables. • 151 Function Values. • • • • • .151 Qualified Names. • • • •• 151 String Lengths .151 String Lengths in Intermediate Result Fields • • • • • .151 AREA Sizes • • • • • • • • • .151 LABEL Attribute. • • • 152 POSITION • .152 PICTURE. • • .152 SETS List. • • • • • • • .152 Scale Factor • 152 Precision. • .152 Floating-Point Magnitude .152 Built-In Functions • • • • • • • • 152 MAX, MIN, MOD Built-In Functions • 152 MOD Built-In Function. • • • • • .153 COMPLETION Built-In Function and Pseudo-variable • • • • • .153 STRING Built-In Function • · .153 Length of Identifiers •• • .153 Subscripted Identifiers • • • .153 CHECK Lists. • • • • • • • .153 Object-Time Conventions and Restrictions. • • • • • • • .153 Data-Directed Input. • • • .153 Edit-Directed Output •• • .154 CHECK Condition. • • • • • .154 CONVERSION ON-Condition • • .154 ON-Units and Entry Parameter Procedures • • • _ • · .154 Exponentiation • • • .154 Collating Sequence • .154 ENTRY Names as Arguments and ON Statements in Recursive Contexts • • • • • • • • • .154 Concatenated Data Sets • • .155 Locate Mode • • • • • .155 ON Conditions. • · .155 Record Alignment • • · .155 APPENDIX C: OBJECT PROGRAM ORGANIZATION AND CONVENTIONS. • Introduction. • • • • • • • Pseudo-Register Vector (PRV) • Run-Time Stack.. • • • • • • Dynamic Storage Area (DSA) • • variable Data Area (VDA) • • • Prologues and Epilogues • • • Interrupt Activity and control • • Initial Entry to Procedures with the MAIN Option. . • • . • • • • Combination of PL/I with Other Languages. • . • • • • • • • • • Calling Sequences and Register Usage. • • • • • • • • • • • Linkage Conventions for Library Modules. • • • • • • • • • Presentation of Arguments • • String Dope Vector (SDV) •• AREA DOP8 Vector. • • • • • Array Dope Vector (ADV) • • Structure Dope Vector • • • String Array Dope Vector (SADV) • Structure Mapping • • • • • • • • Rules for Order of Pairing • • Rules for Mapping One Pair • • Effect of UNALIGNED Attribute. Example of Structure Mapping • Allocation and Release of Storage in an Area • • • • • • • • • • • • • · · • • .158 .158 .158 .158 .159 .159 .159 .160 • .160 · .160 • .160 • • · • • · · • · • • • .161 .161 .161 .162 .162 .163 .163 .164 .165 .165 .165 .167 • .174 APPENDIX D: PROGRAMMING EXAMPLE • • • • . 176 APPENDIX E: CATALOGED PROCEDURES • • • • 182 Installation Modifications • • . • 182 Compilation with Deck Output • • .182 Compilation with Object Module Output •• 183 Compilation and Link-Editing • .183 compilation, Link-Editing, and Executi on • • • .• • • .184 Link-Editing and Execution .184 Overriding cataloged Procedures. • overriding Parameters in the EXEC statement. • • • • Overriding and Adding DD statements • • • • • • '. .184 .184 .185 APPENDIX F: DYNAMIC INVOCATION OF THE COMPILER. • • • • • • • • • • .186 APPENDIX G .188 DIAGNOSTIC MESSAGES Source Program Diagnostic Messages • • • 188 Compile-Time Processing Diagnostic Messages. • • • • • • • • • • • • .250 Object-Time Diagnostic Messages. • .260 APPENDIX H: LANGUAGE FEATURES RESTRICTED OR NOT SUPPORTED IN THE FOURTH VERSION. • • • • • • • .272 IDENT Opt.ion • • • • • • • • • • .272 EVENT Option in the DISPLAY Statement.,........ • .272 EVENT Option in the WRITE statement • • • • • • .272 INITIAL Attribute. • • • • .272 DEFINED Attribute. • • • • .272 Structures and Arrays of Structures in Certain special Contexts • • • • • • • • • • • • • 272 VARYING Strings.. . . . . . . . . 27 3 Interleaved Arrays of Varying strings Passed as Arguments • • • 273 LABEL Arrays. • • • • • • • • 273 The FLOAT Attribute • • • • • • • • 273 List Processing, Table Handling, and Locate-Mode Input/Output Facilities. • • • • • • • .273 The SECONDARY Attribute • • • • • • 273 The NORMAL and ABNORMAL Attributes • • • • • .274 BASED Variables.. • • • • • .274 OFFSET and POINTER Built-In Function s • • • • • • • • • .274 Based Variable Declaration • .275 ONCOUNT Built-In Function. • .275 APPENDIX I: MODEL 91 . · .276 INDEX • • • .279 Figure 1. Job Control Language statements. • • • • • • • ~ • • 20 Figure 2. Input/Output Data sets 21 Figure 3. Device Class Names • • •• 21 Figure 4. BCD and EBCDIC Punched Card Codes and Graphics for PL/I 60-character Set. • • • • • • • • 28 Figure 5. Specimen ESD Listing • • 36 Figure 6. Linkage Editor Input/Output Flow. • • • • • • • • • • . • • • • ~ . 41 Figure 7. Linkage Editor ddnames • • • • 42 Figure 8. Example of PL/I Procedure Using STREAM I/O. • • • • • • • • • • . 47 Figure 9. Example of LIST/DATA/EDIT Output to PRINT Files using the PUT Statement • • . • • • • '" • • • 48 Figure 10. Invoking the Cataloged Procedure PL1DFC.. • • • . • 49 Figure 11. Invoking the Cataloged Procedure PL1LFC. • • • • • • • • • 49 Figure 12. Invoking the Cataloged Procedure PL1LFCL • • • • • • . 49 Figure 13. Invoking the Cataloged Procedure PL1LFCLG. • _ • • • • 50 Figure 14. Invoking the cataloged Procedure PL1LFLG • • 50 Figure 15. CONSECUTIVE Data Set Organization and Applicable Language Features • • • • • • • • • • • • • • • • 52 Figure 16. INDEXED Data Set Organization and Applicable Language Features • • • • • • • • • • • • • • • • 53 Figure 17. REGIONAL Data Set Organization an1 Applicable Language Features. • • • • • • • • • • 54 Figure 18. DCB Subparameters for STREAM I/O. • • • • • • • • • 60 Figure 19. Additional DCB Subparameters for RECORD I/O. • 60 Figure 20. Format of the Tab Control Table • ~ • • • • • • • • • • • 69 Figure 21. Control Program Options • • • 79 Figure 22. Usage of Data Management Access Methods for RECORD-Oriented I/O . • • • • • • • • • • • • • • • • • 80 Figure 23. Storage Required by PL/I Library Modules when Opening and Closing Files • • . • • • • • • • • • • 82 Figure 24. Basic Parameters for the SYSCHK DD Statements. • • • • • • • • • 85 Figure 24.1. Figure-Length 160-byte Records, showing Fields on which Sort 97 is to be Made • • • • • • • '" • • • • Figure 25. Implicit Data Conversions Performed In-Line • • • • • ~ • • • • .119 Figure 25. Implicit Data Conversions Performed In-Line (continued) • • • • • 120 Figure 26. Conditions under which the string Operations are Handled In-Line .121 Figure 27. Conditions under which the String Functions are Handled In-Line. • 122 o · Figure 28. Situations under which RECORD Condition is raised in RECORD-Oriented I/O • .. • • • • • .126 Figure 29. Main ON-Code Groupings .131 Figure 30. Detailed ON-Code Groupings .131 Figure 31. Abbreviations for ON-Conditions • • • • • • • • • • '" •• 132 Figure 32. Attributes and Precisions for Coded Arithmetic Data • • • •• • .136 Figure 33. Data Element Descriptor (DED) • • • • • • • • • • • • • • • • • 138 Figure 34. Eight-Bit Encoded Form of DE!clared Information in Flags • • .138 Figure 35. Format of the Task Variable .139 Figure 36. Event Variable Used with I/O • • • • . • • • • • • • • • • • • .139 Figure 36.1. Event Variable Used with a Task • • • • • . '" • ~ • • . . .139 Figure 37. Format of the Area Variable. • • • • • • • • • . • .140 Fiqure37.1. Effect of LEAVE and RE~WIND Options on Repositioning of Magnetic-Tape Volumes. • • .144 Figure 38. Equivalence of COBOL and PL/I Data • • • • • • • • • • • • • • • 145 Fisrure 39. Format of structure s . . . . 156 Figure 40. Block Created from S1:ructure S • • • • • • • • • • • • • .156 Figure 41. Block Created by structure s with Correct Alignment. • • • .156 Figure 42. Alignment of Data in a Buffer in Locate Mode I/O, for Different Formats and File Organizations • • • • • • • • . .157 Figure 43. Functional Content of a Dynamic Storage Area. • • • . • .159 Figure 44. Initial Entry to Procedures with the MAIN Option.. '. • • • • .160 Figure 45. Format of the String DOpe Vector (SDV). • • • • .• • • • • • • • .161 Figure 46. Format of the Array Dope Vector (ADV) • • • • • • • • • • • • • . 162 Figure 47. Format of the Structure Dope Vector (SDV) • • • • • • • • • • • 163 Figure 48. Format of the Primary String Array Dope Vector (SADV) •• 164 Figure 49. Summary of Alignment Requirements for ALIGNED Data • • • • • 166 Figure 49.1. Summary of Alignment Requirements for UNALIGNED Data • • • .167 Figure 50. Mapping of Minor Structure G •• • • • • • • • • • • • .• • • .168 Figure 51. Mapping of Minor Structure E .169 Figure 52. Mapl?ing of Minor Structure .. N .170 Figure 53. Mapping of Minor Structure S .170 Figure 54. Mapping of Minor Structure C .171 Figure 55 • Mapping of Minor Structure M .172 ·· ·· ·· ·· ·· ········· · · · · ·· ·· ··· ········ ·· ·· ········· a ··· ··· · · · ··· · · ···· ·· ·· · ··· Figure 56. Mapping of Major structure A • • • • • • • • • • • • • '• • • • • • 173 Figure 56.1. Offsets in Final Mapping of Structure A• • • • • • • • • • • • • 174 Figure 57. AREA Format, Showing Example of Allocated Storage and Free Elements • • • • • • • • • • • • • • • • 175 Figure 58. Ca"taloged Procedure (PL1DFC) for Compilation with Deck output • • • • • • • • • • • • • • • • • 183 Figure 59,. cataloged Procedure (PL1LFC) for Compilation with Object Mo d ul e au tp ut • • • • • • • • • • • 18 3 Figure 60. Compilation and Link-Editing Cataloged Procedure (PL1LFCL) • • • • • • • • • • • • .183 Figure 61. Compilation, Link-Editing, and Execution cataloged Procedure (PL1LFCLG) • • • • • • • • • • • • • • . 184 Figure 62. Link-Editing and Execution Cataloged Procedure (PL1LFLG) • • • • • 184 The PL/I (F) compiler translates PL/I source programs into object programs in System/360 machine language. It is designed to provide fast compilation and comprehensive diagnostic facilities. The most significant changes for second version of the compiler were: the RECORD I/O: The statements: READ, WRITE, REWRITE, and DELETE The attributes: RECORD, UPDATE, SEQUENTIAL. DIRECT, BACKWARDS, BUFFERED, UNBUFFERED, and KEYED The source program is maintained in storage throughout the compilation process, as far as possible, and successive phases of the compiler are passed against it. This means that the use of input/output data sets is kept to a minimum, with a consequent improvement in performance. The ON-conditions: RECORD and KEY The compiler is of modular construction. For the compilation of a given source program, it uses only those modules that are actually required, and these are selected automatically. Note: The usage UPDATE SEQUENTIAL was not supported except for INDEXED data set organization. A comprehensive set of compiler options is available to the user. The default values for these options are set at system generation time, and the options required for a particular compilation are selected at compilation time. Wide use is made of modular library routines, us~n~ selective loading techniques to mlnlmize the storage space required by object progr.ams. The built-in functions: ONFILE and ONKEY COMPILE-TIME PROCESSING: The compiletime processing feature of PL/I COMPILER OPTIONS: Abbreviated names as alternatives to the full names for compiler options ARRAY INITIALIZATION: Initialization of arrays of STATIC variables by means of the INITIAL attribute STREAM I/O: The options PAGESIZE and LINESIZE The ON-condition NAME This edition Form C28-6594-4 of the PL/I (F) Programmer's Guide documents the fourth version of the compiler with the improvements incorporated for' Release 17 of the operating system. LIST/DATA-DIRECTED OUTPUT: Alignment of data on preset tab positions RECORD FORMAT: The use of undefinedformat source records Earlier versions are: 1st 2nd 3rd 4th version version version version Form: Form: Form: Form: C28-6594-0 C28-6594-11 C28-6594-2 C28-6594-3 The more important differences between these versions of the compiler are listed below. There then follows a statement concerning the compatibility between compiled code and Library modules of various versi·ons. PAPER TAPE: Paper tape as input to the compiler and object program OPERATORS: The operators ,> and ,<, and their 48-character set equivalents NG and NL QUALIFIED NAMES: The resolution of apparently ambiguous name qualification Introduction 11 OBJECT PROGRAM LISTING: Double-column format for the object program listing OBJECT-TIME ERROR HANDLING: Optional inclusion of the statement number in object-time diagnostic messages Combination of SNAP output with SYSTEM action for ON statements RECURSION ENVIRONMENTS: A change in the interpretation of ENTRY parameters and ON units in recursive contexts LINKAGE EDITING: A changed method of link-editing library routines into an object program, facilitating both the link-editing of PL/I object modules from a library and the use of overlay technique with PL/I object modules. MIXED DEFINING: The severity of diagnostic messages for defined data of type different from the type of the base is reduced from terminal to error, permitting the compilation of programs using mixed defining. CATAL03ED PROCEDURES: A new cataloged procedure (PL1LFLG) for linkage editing and execution The most significent changes for the fourth version of the compiler are: ~hanges LOCATE I/O AND LIST PROCESSING: The following language is now supported: at Third Version The most significant changes third version of the compiler are: for the OBJECT PERFORMANCE: Changes in the object code generated by the compiler will result in considerable improvements in the object-time performance. The most significant improvements are in the following areas: data conversions, the SUBSTR function and pseudo-variable, the INDEX function, the UNSPEC function, object-time error handling and procedural housekeeping, and the usage GO TO label-variable. ARRAY INITIALIZATION: Initialization of arrays of AUTOMATIC or CONTROLLED variables by means of the INITIAL attribute. UPDATE SEQUENTIAL: The usage UPDATE SEQUENTIAL for CONSECUTIVE and REGIONAL data set organizations. ASYNCHRONOUS OPERATION: The EVENT option on I/O statements, the COMPLETION built-in function and pseudo-variable, and the WAIT statement. BATCHED COMPILATION: The facility for batched compilation of programs and a new compiler option, OBJNM. 12 Statements and options: READ FILE(filename) SET{pointer variable) [KEY{expression) I KEYTO(character-string variable)]; LOCATE based variable FILE (filename) [SET (pointer variable)] [KEYFROM(expression)]; REWRITE FILECfilename); ALLOCATE based variable [IN(area variable)] [SET{pointer variable)]; FREE based variable [IN (area variable)]; Assignment: AREA to AREA POINTER/OFFSET to POINTER/OFFSET Attributes: AREA[Cexpression)] BASED (pointer) OFFSET (based variable) POINTER REFERCidentifier) Built-in functions: ADDR EMPTY NULL NULLO Condition: AREA Operation: -> in 60-character set PT in 48-character set ASYNCHRONOUS OPERATIONS AND MULTI TASK- : ING : The following language is now supported: Statements and options: CALL statement with TASK, EVENT and PRIORITY options in any combination, . WAIT statement extended to allow array names in the event list DISPLAY statement with REPLY and EVENT options UNLOCK statement NOLOCK option in READ statement Assignment: EVENT to EVENT Attributes: EVENT EXCLUSIVE TASK Built-in functions/pseudovariables: COMPLETION PRIORITY STATUS Multitasking is supported by the MVT system INTO or FROM options; the KEY option in the DELETE statement is now optional. The DELETE statement is now supported for INDEXED data sets using SEQUENTIAL access. Four new ENVIRONMENT options (INDEXAREA, NOWRITE, REWIND, and 3ENKEY) provide improved performance COMPILER OPTIONS: SIZE and SORMGIN have been changed, and four new options (OPLIST, EXTDIC, MACDCK and NEST) have been added COMPILE-TIME OPTIMIZATION: Macroprocessor concatenations are improved OBJECT PROGRAM OPTIMIZATION: Constant subscri~t and constant expres~ion evaluation; some instances of VARYING strings in assignment; in-line code for some VARYING string operations; prologue optimization; in-line handling of certain data conversions and some bit-string assignments; rounding-offfor Eand F-format output; dope vector initialization improved; optimization of some IF statements. LISTING IMPROVEMENTS: More details in attribute listings; aggregate listing is in alphabetical order; sizes of the STATIC and program control sections are given; the size of each DSA is given; statement number provided in diagnostic message for invalid pictures; improvements of aggregate length table for BASED items. Multiprocessing DATA INTERCHANGE: The COBOL option in the ENVIRONMENT attribute; the ALIGNED/UNALIGNED attributes (for FORTRAN data interchange) ASSEMBLER SUBROUTINES: A variablelength argument list can be passed to assembler subroutines invoked by a PL/I program STRING HANDLING: The STRINGRANGE condition for use with SUBSTR; the STRING function PROGRAM RESTART: The operating system checkpoint/restart facility is available under PCP EVALUATION OF EXPRESSIONS: The order of priority is changed; concatenation now comes before the comparison and logical-operators in the sequence of priority PL/I SORT: The operating system sort program is available for use with PL/I programs STREAM I/O: LINESIZE. SKIP and COLUMN in non-PRINT files; PUT DATA with no data list RECORD I/O: Some types of VARYING string may be used with the The most Significant changes for the fourth version at Release 17 are: Introduction 13 RECORD I/O: Spanned records (VS- or VBS-format) can be specified to span blocks Generic keys (GENKEY option) can be specified to access groups of records on an INDEXED data set 2. In string to arithmetic conversion, the precision obtained is now the maximum precision, not the default precision. 3. E- and F-format items are now on output, not truncated. 4. Multitasking is supported in this version of the compiler. Therefore a fourth-version program with the TASK option will only execute successfully with programs based on earlier versions if these programs have been recompiled with the TASK option. Even then, subprograms of these earlier programs may need rearranging to execute succesfully. PL/I SORT: User control of SORT ddnames for multiple use of PL/I SORT within a single job step is provided MULTIPROCESSING: More than one PL/I task may be executed simultaneously by a multiprocessing system PROGRAM RESTART: Improved checkpoint/ restart facilities are supported by PCP and MVT systems A program containing a CALL statement with the EVENT option should be compiled with the TASK option in the main procedure. If the TASK option is not specified, it is assumed by default. CATALOGED PROCEDURES: Changes to some condition codes and to the dsnames for temporary data sets have been incorporated into the PL/I cataloged procedures ~ot~~ There is an incompatibility between multitasking in Release 15 and multitasking in Release ~6, caused by the removal of multitasking code from some PL/I library modules. Multitasking programs coded using a Release 15 version of the compiler must be recompiled and re-link edited if they are to be executed with a Release 16 version. 5Q If a procedure is to be used recursively or in a reentrant manner, the attributes RECURSIVE (for any procedure) or REENTRANT (for the ma1n procedure) must be specified in the PROCEDURE statement. In earlier versions if these attributes were omitted, a procedure would function correctly if used recursively or in a reentrant manner. 6. The removal of PACKED from the language, and the introduction of UNALIGNED as the complementary attribute to ALIGNED, has brought differences between the current and earlier versions of the compiler in the mapping of some aggregates and in the application of default attributes. Details on avoiding common pitfalls and coding for improved efficiency are given in t.he section entitled E.rogramming TechniSl};!~~· Co~atibility between Different Versions of the FL/I Library and Compiled Code Certain changes and improvements have been made to PL/I, the compiler, and the library between the four versions of the compiler. As a result, certain incompatibilities have unavoidably arisen between library modules of the different versions. The purpose of this compatibility statement is to make clear to the user what incompatibilities exist, and how the problems raised by them can be overcome. Several changes in the fourth version prevent this version from being completely compatible with earlier versions: 1. 14 In the evaluation of expressions, the pri.ority of concatenation has been increased so that it now takes precedence over the comparison and logical operations. rounded When a PL/I program containing a statement with the PACKED attribute is compiled by a PL/I (F) compiler that supports ALIGNED/UNALIGNED, then PACKED is recognised and ignored, and the current defaults for the data type are applied. The mapping is the same as that formerly obtained with PACKED. For example: DCL A(5) BIT(7) PACKED; is word-aligned, B is and C is bit-aligned. The default for string elements in aggregates is UNALIGNED, which provides the same mapping as for PACKED. 7. DCL 1 STR PACKED, 2 A FLOAT(5)., 2 B BIT( 3) ; The data-type defaults are applied; A is ALIGNED and B is UNALIGNED. The mapping is the same as that for PACKED. It must be remembered that PACKED and UNALIGNED are not similar in meaning. If UNALIGNED is substituted for PACKED in the explicit declaration of a major structure, then there may be significant differences in the two mappings. For example: DCL 1 STR PACKED, 2 A CHAR(3), 2 B FLOAT DECIMAL(15), 2 C BIT( 2) ; Exponentation by integers is now changed. Previously, both operands were converted to floating-point, and the result precision was the greater of the operand precisions. Now, if the second operand is a fixed-point variable with precision (p,O), the first operand is converted to floating-point, and the prec1s1on of the result is the precision of the first operand. Two definite compatibility statements can be made about the compilers in general: 1. Compiled code from any version of the compiler must always be executed using a library of the same version or a later version .. 2. Library modules of different versions can be mixed only in the following circumstances: Here A would be aligned on a byte boundary, B on a doubleword, and C on a bit boundary. If UNALIGNED were substituted for PACKED, A and B would be byte-aligned. and C bit-aligned. The change in the default attributes has brought an incompatibility for bit string arrays. In the statement: DCL A(10) FLOAT(5). B(5) BIT(3); byte-aligned, a. All link-edited modules must be ot the same version as each other, and b. All dynamically linked or loaded modules must be of the same version as each other and must be of at least as late a version as the link-edited modules. the former defaults for A and B would be ALIGNED; A would be an array of word~aligned arithmetic data, and B would be an array of byte-aligned bit strings. But the default for arrays is now according to data type; A is ALIGNED and hence still word-aligned and B is UNALIGNED and becomes bitaligned. To make string arrays in programs with PACKED as default compatible (without recompiling) with those in programs with the data-type default, the latter must be explicitly declared ALIGNED. Unless a user has link-edited PL/I external procedures with modules from a PL/I library and placed them in a private library for future use with main programs compiled by a later version of the compiler, these incompatibilities should cause no problems. Provided the user has installed the latest compiler and library components, all future link-editing operations will result in the incorporation of the correct library modules. If. however, he has linkedited some of his external procedures, then, if he intends to use them in conjunction with a main program containing later-version library modules, he must remove the earlier-version library modules from them. On the other hand, the default mapping for structures is the same as before. A structure declared as: Two methods may be employed to this out. one temporary and the permanent: DCL 1 -2 2 2 STR, A FLOAT(5), B CHAR(4), C(10) BIT(7); formerly had the default attribute PACKED; it now has default attributes that depend on the data type. The mapping is the same in both cases: A 1. carry other The linkage editor map for the external procedure is examined to see whether any library modules have been incorporated in the load module; these can pe identified by the initial letters IHE. If there are no library modules present in the load module, no further action is required. If library modules are present, then Introduction 15 every time a main program needs to use the external procedure. it should be link-edited with it, using INCLUDE cards naming the library modules which are to be replaced (i.e., all of them) and an INCLUDE card naming the external procedure its elf. (The latter must be a separate card and it must follow the INCLUDE card for the library modules.) This will result in the incorporation of the correct later-version library modules and then the external procedure itself. This method is temporary. storage size Line count Source program listing Object program listing compiler options listing External reference listing Attribute listing Cross reference listing 20 The permanent method is to link-edit the external procedure using the replace facility on the NAME card. In other words, the linkage editor is executed using the INCLUDE cards naming the library modules which are to be replaced, followed by an INCLUDE card naming the external procedure, followed by a NAME card naming the external procedure with the replace option. LANGUAGE LEVEL ------------- Object program deck Object program load file Production of a NAME card editor processing for linkage Optimization Use of either BCD or EBCDIC Specification of source margins and of carriage control character for source program listing Use of either 48- or 60-character set Inclusion of source program statement numbers in diagnostic messages rh~ language features supported by the (F) Compiler are as defined in the publication I!~_~y~~g~Ll~Q_Q~rating System, PL/I Reference Mdnual. Certain minor restrictions-are-necessary for the efficient operation of the compiler. For full details of these restrictions refer to Appendix B of this publication. Level at which diagnostic messages printed are Compile-time processing Compile-time processor input listing compilation processing to follow compile-time Extended dictionary Nesting ing count for source program list- In addition to the restrictions specified in Appendix B, certain areas of the language are not implemented in the fourth version of the compiler. For fuller details of features not supported by this version, refer to Appendix H of this publication. For details of these options, section called "Job Processing." A number of compiler options are available to the user. These can be specified at compilation time as parameters on the execute statement (EXEC) card. They include the following: The basic units of processing in the operating system are the job and job step. The programmer communicates with the PL/I (F) compiler via the PL/I language; he communicates with the operating system via the job control language. 16 Macro-processor card deck Model 91 option see the JOB: Aircraft test flight JOB STEP 1 : Refine raw data On receiving a problem, a programmer analyzes that problem and constructs a precise procedure to solve it; in other words, he writes a program to solve the problem. The computer then carries out the work specified in the programmer's procedure. The amount of work specified by the programmer for the computer is called a job, and is defined by using the JOB control statement in the job control language. For example, executing a single program to solve an equation is a job to the computing system. If the problem is complex, the programmer may break it down into a series of steps, each step corresponding to a program. For example, the programmer may receive a tape containing raw data from an aircraft test flight. His objective may be to transform the raw data into a series of charts and reports. He may define the tnree following steps: 1. g~ii!!i!!g_g~~_Qat~: Because of intermittent errors in meters and data transmission facilities, errors may occur in the raw data. The first step is to compare the raw data to projected data and to eliminate errors. 2. Q~Y~lQEi!!9. __ ~al~~~: To use the refined data and a set of parameters as input to a set of equations to develop the values for the creation of charts and reports. JOB STEP 2: Develop values JOB STEP 3 : Generate graphs reports and Data Set In the example, job step 1 used three collections of data as input and output -- raw data, projected data. and refined data. Any job step can use collections of data. In the System/360 operating system, a collection of data is called a data set. A data set is defined to the operating system by a DD (Data Definition) statement of the job control language. ~ne word "file," as defined for PL/I, may for the most part be equa~ed with the term "data se~," as defined for the operating system. A data set resides on one or more volumes. A volume is a standard unit of external storage~hat can be written on or read by an input/output device. (For example, a volume may be a reel of ta~e, a disk pack, or a card deck.) The operating system provides the feature of device independence; that is, when writing his source code, the user need not concern himself with the physical device from or onto which he may be reading or writing. The same data set may at different times reside on different volumes (and hence different types of device). The important aspect of a job is that it is defined by the programmer. In this example the job can cover all three steps. In operating system terminology, a stage of processing executed to perform part of a job is called a iQ2-st~E. The programmer defines the job step to the operating system by using an EXEC control statement of the job control language. The names of data sets and any information identifying the volumes on which they reside may be placed in a catalog to help the operating system find the data set. This catalog resides on the direct-access volume that contains the operating system. Any data set whose name and volume identification are placed in the catalog is called a catal25l.ed data se~. Other information concerning the data set, such as device specification, the position of the data set in the volume or the format of records in the data set, can also te accessed by the operating systemo If the data set is cataloged when it is first created, the only information needed to retrieve the data set is its name. By designating several related steps as one job, with each step designated as a job step, efficient use is made of the operating system. In the aircraft test flight example, each step may be defined as a job step in a job encompassing all the required processing, as follows: Note: Data set names that begin with the letters SYS and have a P as the nineteenth character of the name should not be used. Data sets with such names are created for temporary data sets on PCP systems, but not for temporary data sets on MVT or MFT systems, and are deleted when the IEHPROGM 3. 9~!!er~~i!!g __ g~Eor~~ and Graphs: To use the values to develop points for the charts, and to print the charts and reports. Introduction 17 utility is used and the SCRATCH utility control statement is specified with the VTOC, PURGE, and SYS keywords. Furthermore, a hierarchy of indexes may be devised to enable the operating system to find data sets faster. For example, an installation may divide its cataloged data sets into four groups: SCIENCE, ENGRNG u ACCNTS, and INVNTRY. In turn, each of these groups may be subdivided into groups. For example, the SCIENCE group may be divided into groups called MATH, PHYSICS B CHEM, and BIOLOGY; MATH may be further divided into ALGEBRA, CALCULUS, and BOOLm To find the data set BOOL, it is necessary to specify the names of all indexes of which it is a part, beginning with the largest group (SCIENCE), then the next largest group (MATH), and finally, the data set BOOL. The complete identification needed to find the data set BOOL is SCIENCE. MATH. BOOL. Data set names may be either unqualified or qualified. An ~!lg~lified name is a data set name that is not preceded by an index name; for example, in the preceding text, if data sets were not indexed, BOOL would be an unqualified name. A gualifieQ !l~m~ is a data set name preceded by index names representing index levels; for example, in the preceding text, the qualified name of the data set BOOL is SCIENCE. MATH. BOOL. Data set identification may also be based upon the time of generation. In the System/360 operating system, a collection of successive historically related data sets is called a generation data group. Some data sets are updated periodically, or are logically part of a group of data sets, each of which is created at a different time: for example, a series of data sets used for weather reporting and forecasting. The data set name for these data sets might be WEATHER. A generation number is attached to the data set name to refer to a particular generation. The most recently cataloged data set is always 0; the generation before 0 is -1; the generation before -1 is -2; and so on. The generations for the generation dat~ group WEATHER are: WEATHER (0) data set that was WEATHER (0) at the beginning of the job becomes WEATHER (-1), and so on, and the oldest one is usually deleted automatically. In the System/360 operating system, the output of the (F) compiler is called an Q!2~£~_!!!od~!.~ (object program).. The object module cannot be executed until the required references to functions and subroutines are resolved (that i~6 identified for the use of the operating system), and the object module is put into a format suitable for loading. Its external references are resolved by a program supplied by IBM called the li!l~~g~_edi1QE. The output of the linkage editor is called a load module~ However, the input to the linkage editor may be either object modules or load modules. Linkage- editor execution- can be expanded further: several object modules and load modules may be combined to form one load module. The linkage editor automatically picks out the library functions and the requested subroutines and inserts them into the load moduLe. The name of the library is specified to the linkage editor by a SYSLIB DD card. For example, if the compiled object module TEST calls subroutines ALPHA and BETA (which in this example are assumed to be object modules) and the library function SIN (a load module), the linkage editor combines the object modules ALPHA, BETA, and TEST and the load module SIN to form a single load module. A program written in PL/I may call subprograms written in the assembler language. An example is given in Appendix D. After an object module is processed by the linkage editor, the resulting load module may be executed. Therefore# to execute a PL/I program, a minimum of three steps is necessary: 1. Compile the PL/I source program 2. Process the resulting object module and any load modules (which may include any PL/I subprograms) to form a load module 3. Execute the load module WEATHER (-1) WEATHER (-2) When a new generation data group is created, it may be called generation +~. After a job has created WEATHER (+1), the operating system changes its name to WEATHER (0), if cataloged automatically. The 18 Compiling, link-editing, and execution are a series of jobs and/or job steps; to the operating system, each job and job step is defined by the programmer. Each compilation, the linkage editor execution, and the load module execution may be defined as separate jobs. (If this is done, there is only one job step in each job.) However, several single job steps may be combined into one job. For example, all the compilations may be combined. In this case, each compilation is a single job step. Furthermore, all of the steps, compilations, link-editing, and execution may be combined into one job. Then each compilation, the linkage editor processing, and the execution of the load module are separate steps. An exception is that a batched compilation facility (described later) permits more than one compilation within a single job step. includes a directory which is used to locate a particular member. One of the uses of partitioned data sets is the storage of load modules. In fact, a load module can be executed only if it is a member of a partitioned data set. cataloged data sets and generation data groups do not have to reside on directaccess devices. A catalog is maintained by the operating system for cataloged data sets and generation data groups. However, a PDS must reside on a direct-access device, and its members must be sequential data sets. The PDS maintains its own directory of its members. To further clarify these distinctions, assume that a ~30urce program MAIN is to be compiled and executedQ MAIN requires the services of two subprograms, SUB1 and SUB2u and neither subprogram is compiled. In this example, five steps are used to perform the job: JOB: Multiple compilations, editing, and execution link- JOB STEP 1 : Compile MAIN JOB STEP 2: Compile SUB1 J'j,..) STEP 3 : Compile SUB2 JOB STEP 4 : Process editor by linkage load JOB STEP 5: Execute the module called MAIN A data set has been defined as a collection of data. The (F) compiler and linkage editor are concerned with two types of data sets, sequential data sets and partitioned data sets. A ~3equential_data~~ is a data set in which the records are arranged to be read in the sequence in which they are physically stored. A sequential data set may reside on any type of volume. A ~~titi~~Q~ata ~ (PDS) is a group of members, each of which has many of the properties-of a sequential data set, and which can be used individually as a sequential data set. A partitioned data set must reside on a direct access volume, and it An installation may have certain procedures to follow in its daily processing. For example, weather reporting is processed daily. To reduce the possibility of error in the daily reproduction of these job control statements, a cataloged procedure may be written. A £~~alQg~~_EEQcedure is a set of EXEC and DD control statements that are placed in a PDS accessed by the operating system. The JOB statement cannot be cataloged. To describe a job stef an EXEC statement may invoke a cataloged procedure. Because EXEC statements may be cataloged, the cataloged procedure may consist of a series of steps. The equivalent of a job step in a job is called a procedure step in a cataloged procedure. Cataloged procedUres cannot be nested; that is, one cataloged procedure cannot invoke another cataloged procedure. For a job step, a number of data sets may be defined by the DD statement. DD statements may be written in cataloged procedures. To simplify the steps involved in compiling and link-editing, five cataloged procedures have been supplied by IBM for the PL/I (F) compiler. These five cataloged procedures and their uses are: PL1DFC compilation with deck output PL~LFC compilation with object module output for linkage editor input PL1LFCL compilation and link-editing PL1LFCLG compilation, link-editing* and execution PL1LFLG link-editing and execution Introduction 19 JOB PROCESSING To execute a PL/I program three steps are required: compilation, processing of object output by the linkage editor, and execution of the load module. These steps all require the use of job control language statements. A summary of these statements is given in Figure 1. r-----------T-----------------------------, Function I I Statement I ~-----------+-----------------------------~ I JOB I Indicates the beginning of I I I a new job I ~-----------+-----------------------------i I EXEC I First statement for each I I I job step. It indicates the I I I I cataloged procedure or J program to be executed I I ~-----------+-----------------------------i I DD I Describes data sets and I I I controls device and volume I I I assignment I ~-----------+-----------------------------i I delimiter I Used, when data is included I I in the input stream, to I I (/*) I I separate data from subI I I sequent control statements I ~-----------+-----------------------------i I null (II) I Marks the end of the last I I _____________________________ job in an input stream LI ___________ L JI Figure 1. Job Control Language Statements If data is included in the input stream, the data cards must normally be preceded by a DD * statement (e.g., SYSIN DD *) and followed by a delimiter statement, although these are not always necessary when operating with a priority scheduler. For full details, refer to the publication 1~~ §~~em/360_Qe~~~igg __ §ystem, Job Control Lang£~g~. Job processing can often be simplified by using the cataloged procedures described 1n this chapter and in Appendix E of this publication. The names for DO statements (ddnames) connect 1/0 statements in the compiler with data sets used by the compiler. Names for 1/0 device classes have also been established and must be used by the programmer. The program name for the compiler is IEMAA, so that if the compiler is to be executed in a job step, the parameter PGM=IE~~ must be used in the EXEC statement. Normally, 20 however, the parameter would appear on EXEC card within a cataloged procedure. an If the compiler is to be dynamically invoked by the CALL, LINK, XCTL, or ATTACH macro instructions, details of the method to be used will be found in Appendix F. COMPILER DONAMES The (F) compiler uses a maximum of seven standard data sets. Each data set has been assigned a specific ddname in order to establish communication between the compiler and the programmer. Each data set is given a specific function which must meet device requirements for the PL/I (F) compiler. The ddnames l functions, and device classes for the data sets are given in Figure 2. These ddnames ~~~~ be specified as ddnames for compiler DO statements, and must correspond to the function listed in Figure 2. The requirements for each data set designate which type of inputloutput device must be used for the data set. In additLon to the seven standard data sets, each data set explicitly referenced in a compile-time INCLUDE statement must also have a corresponding DD statement. The device requirements for these data sets are the same as for the SYSLIB data set. To compile a PL/I program on the (F) compiler, two of these data sets are necessary: SYSIN and SYSPRINT, along with the direct-access volume that contains the operating system. With these two data sets, only the listing is generated by the compiler, If an object deck or a MACDCK deck is to be provided, a SYSPONCH DD statement must be specified. If the object module is to be written, a SYSLIN DD statement must be supplied. SYSUT1 is always required if the SIZE option (explicitly or by default) specifies a value less than 53,248. With higher values of SIZE, the SYSUT1 data set is used only when the source program and internal tables cannot be wholly contained in main storage. The table of space requirements for SYSUT1 (see "Compiler Device Classes") is a guide to when the data set will be used. For practical purposes* however, it is advisable to include the DO statement for SYSUT1 as a matter of course. SYSUT3 is used for compile-time processing, and for programs using the 48-character set. SYSLIB is used for compile-time processing of INCLUDE statements in which a ddname is not explicitly specified. r-----------T-----------------------T-----------------------------------, ddname I Function I Possible I I I I I Device Classes I ~-----------+-----------------------+-----------------------------------~ I SYSIN I Source Input I SYSSQ, the input stream device I I I I (specified by DD *), or paper tapel I I I reader J I I SYSPRINT I I S~SPUNCH I I Listing Output I I Deck and MACDCK I I SYSSQ, or SYSOUT device 1 I SYSCP, SYSSQ I I I I 1 I output, or SYSOUT I (punch) device I I I 1 I SYSLIN I J I I I I Object Module Output I SYSSQ I I I I SYSUr1 I Auxiliary Storage for I SYSDA I I I I Text and Dictionary I I I SYSUr3 I Auxiliary Storage for I SYSSQ I I Compile-Time Process- I I I ing and 48-Character I I I Syntax I I I I J SYSLIB I Default input for I SYSDA I I compile-time INCLUDE I J statements I ___________________________________ JI ___________ LI _______________________ ~ Figure 2. Input/Output Data Sets r------------T------------------------------------"-----T-----------------------------, Class Function I Device Type I I Class Name I r------------+-----------------------------------------+-----------------------------~ I SYSSQ I Writing, reading I Magnetic tape, DASD I ~------------+-----------------------------------------+-----------------------------~ I SYSDA I Writing, reading, updating records in I DASD I I I I I place ~------------+-----------------------------------------+-----------------------------~ I SYSCP I Intermediate or ultimate device for I Card punch, magnetic tape I I ____________ I ________________________________________ punched cards I _____________________________ DASD L J1 ~_. Figure 3. ~ Device Class Names For the DD statements SYSIN, SYSPUNCH, or SYSPRINT, an intermediate storage device may be specified instead of the card reader, card punch, or printer, respectively. If an intermediate storage device is specified for SYSIN, the compiler assumes that the source program deck was placed there by a previous job or job steps. If an intermediate storage device is specified for SYSPRINT, the listing and diagnostic messages are written on the device; a new job or job step can print the contents of the data set. Similarly, if an intermediate storage device is specified for SYSPUNCH, the card deck is written on that device, and another job or job step will be needed to punch the card deck. Under the MVT system, this can be done automatically by specifying a SYSOur data set. COMPILER DEVICE CLASSES Names for input/output device classes used for compilation are specified to the operating system at system generation time. The usual class names, functions, and types of devices are shown in Figure 3. The data sets used by the compiler must be assigned to devices eligible for the classes listed in Figure 2. It should be noted that a direct-access storage device may be used for all compiler devices. The SPACE parameter in the DD statement must be used if there is a possibility that the data set will be written on a direct-access device. Job Processing 21 For most practical situations, the values used in the SPACE parameters of the data sets defined in the cataloged procedures in Appendix E will be adequate. However, typical space requirements for various data sets can be calculated from tne following information (All values given are in bytes): r----T------T-----------------------, I I INO. of tracks required 1 I SN I SIZE r-------7-------T-------~ I 1 1 2311 1 2301 1 2321 1 ~----+------+-------+-------+-------~ 1 1 44K 1 8 I 4 I 22 I 24* I I I 1 I I I ~------+-------+-------+-------~ I IR = number of input records (i.e., number of records containing source text + number of records included through the compile-time INCLUDE statement). SR SN number of records containing source statements after compile-time time processing is completed. number of source statements after compile-time processing is completed. VN of numb~r variables used in the program. 150 I 100K I 0 I 0 I 0 1 I t------+-------+-------+-------~ I I 200K I 0 I 0 I 0 I ~----+------+-------+-------+-------~ I 1 1 92 I 97* 1 I 5 00 1 100K 1 1 1 I 18 1 22*1 9 I 11*1 27 I 33*1 I I 1 1 I I 1 44K I 31 I 14 J ~------+-------+-------+-------~ ~------+-------+-------+-------~ 1 200K 1 0 I 0 1 0 I r----+------+-------+-------+-------~ 44K 1 1 64 I 1 1 1 1 r------+-------+-------+-------~ I t------+-------+-------+-------~ 110001 100K 1 1 1 1 68 1 74*1 28 1 1 192 I 202*1 1 1 34 1 37*\ 102 1 111*1 \ 1 200K 1 15 1 9 1 27 1 1L ____ L1______ L1_______ 20*1L _______ 12*1L _______ 28*1J * EXTDIC option specified Space required = 120x( IR + + SR 10xSN + + VN + VN 30) if SOURCE2 op~ion is specified if SOURCE option is specified if LIST option is specified if ATR option is specified if XREF option is specified bytes if EXTREF option is specified Space required = 80 x SN bytes Source programs which are large enough to cause the SYSUr1 data set to be used will compile more efficiently if this data set resides on a drum or in a contiguous area on a disk. Since it is not advisable to use EXTDIC if SIZE=44K, the figures for this value must be taken as applying to a 48K capacity. 22 Space required for 48-character set processing 2 x SR x (average record length) bytes Space required for compile-time processing = size of program after compile-time processing Space required for both 48-character set and compile-time processing = 2 x (size of program after compiletime processing These formulas give only approximate answers, in that considerable variation may result from the nature of individual source programs. The figures given should provide adequate space in most cases. The secondary allocation facility should be used as a protection against exceptional requirements. Record parameters on this data set depend on whether the MACRO or the CHAR48 option is used. If the MACRO option is specified (with or without the CHAR48 option), SYSUT3 will be opened with the following parameters: Record format: F(available size < 56K) FB(available size 2 56K) Recorc1 size: 80 bytes Blocking factor: 1 (available si~e < 56K) 2(available size 2 56K) For available size, see 'SIZE Option'. Of the 44K bytes minimum storage necessary for the F compiler, 1000 bytes are reserved for two SYSIN buffers, so that the SYSIN block size can always be up to SOO bytes (i.e., the size of one SYSIN buffer). A block size greater than SOO bytes is allowed if the extra storage necessary for the SYSIN buffers is available in the amount of storage requested in the SIZE option (i.e., SIZE must be at least 44K1K + 2 x block size). If the SIZE option does not allow for 4~OS6 bytes more than the additional storage required by the SYSIN buffers, compilation will be terminated. If the CHAR48 option (but not the MACRO option) is specified~ SYSUT3 contains a CHAR48 and a CHAR60 copy of each source record. It is opened wi t.h the following parameters: Record format: F(available size < 56K) FB(available size 2 56K) U(if SYSIN record format is U) Record size: SYSIN record length Blocking factor: 1 (available size < 56K) 2(available size 2 56K) For available size., see 'SIZE Option.' Data set:. Write-yerifLlQ~2D) The Write Verify option for DASD is not fully supported for SYSUT1. Although the Wri te VE~rify may be requested by specifying OPTCD = W in the DCB for SYSUT1, not all the data blocks written on this data set will in fact be verified. Specifying the OPTCD parameter results in write verification only when a new dictionary or text block is written on the device; reuse of this block will not result in verification of the data written. The Write Verify feature is always available for use with a data block on other data sets on direct-access devices, and is obtained by specifying the appropriate option on the data set DD card. (See 'supervisor and Data Management Services~) The compiler allows the programmer to request blocked output on SYSPRINT, SYSPUNCH and/or SYSLIN by specifying a BLKSIZE parameter on the appropriate DO card. Of the 44K bytes minimum storage necessary for the F compiler, 2S8 bytes are reserved for two SYSPRINT buffers (129 bytes each), 400 bytes are reserved for the SYSPUNCH buffer, and 400 bytes are reserved for the SYSLIN buffer. Thus when SIZE=44K, SYSPRINT block size must be 129 bytes and SYSPUNCH and SYSLIN block sizes can be up to 400 bytes. Greater block sizes than these are allowed if extra storage for larger buffers is specified in the SIZE option. (See next section "Calculations for Storage Requirements.") If the SYSPUNCH block size or the SYSLIN block size is greater than 400 bytes and the SIZE parameter is not great enough to accommodate it, then the corresponding compiler options will be deleted. SYSPRINT block size must be of the form (4 + n x 12S) bytes. If the SIZE option does not allow for 4S056 bytes more than the additional storage required by the SYSPRINT buffers, compilation will be terminated. The E-Ievel Linkage Editor cannot accept blocked input, so the compiler output should be blocked only if the F-Ievel Linkage Editor is in use. BLOCKING OF COMPILER INPUT AND OUTPUT Blocking of ComEiler Ineut Calculations for The compiler allows the programmer to request blocked input on SYSIN (other than SYSIN DO DATA or .) by specifying a BLKSIZE parameter on the appropriate DD card or by obtaining the block size from the data set label (see Appendix A, ftCompiler Input ft ). Storage requirements for blocking compiler input and output should be based on the following: Storagg-E~~i!~m~~~ 44K is needed for the compilation, this and Job Processing of 23 1000 bytes are saved for two SYSIN buffers (500 bytes each) 258 bytes are saved for two SYSPRINT buffers (129 bytes each) 400 bytes are saved for the SYSPUNCH buffer 400 bytes are saved for the SYSLIN buffer If If SYSIN block size is greater than 500 bytes then (2 x SYSIN block size - 1K) is subtracted from the storage specified by SIZE. SYSPRINT block size is greater than 129 bytes then (2 x SYSPRINT block size258) is subtracted from the remaining storage. If SYSPUNCH block size is greater than 400 bytes then (SYSPUNCH block size - 400) is subtracted from the remaining storage. If SiSLIN block size is greater than 400 bytes then (SYSLIN block size 400) is subtracted from the remaining storage. COMPILER OPTIONS A number of compiler options are available to the programmer. These may be passed to the compiler through the PARM parameter on the EXEC card at compilation time. Included in the information that may be specified to the compiler are the following items: The amount of main storage allocated to the" compiler for this compilation The number of lines to be printed on each page of the source listing Whether a source program listing is be printed Whether an object program listing is to ne printed Whether a list of the compiler options specified for the program is to be printed. Whether a listing of the External Symbol Dictionary (ESD) is to be provided Whether a list of the attributes identifiers is to be provided The storage that finally remains must be equal to or greater than 44K. SYSPUNCH/SYSLIN in Batched Compilations to of Whether a list of cross-references to identifiers is to be provided Whether the compiler is to produce an object module for input to the linkage editor, output either as a data set on SYSLIN, or SYSPUNCH, or both, as the user requires Once SYSPUNCH or SYSLIN has been opened, it is left open and buffer space is allocated for all subsequent compilations in the batch, whether or not there is any SYSPUNCH or SYSLIN output for those compilations. Whether the compiler is to produce the linkage editor control statement NAME to follow either the object module or the onject program deck If SYSPUNCH or SYSLIN block sizes greater than 400 are asked for, the extra space needed for the larger buffers will be subtracted from the SIZE specified for each compilation in the batch before calculating the text and dictionary block sizes. In some cases, compilations which do not have SYSPUNCH or SYSLIN output may be allocated smaller text and dictionary block sizes than they would otherwise get if they follow a compilation which opened SYSPUNCH or SYSLIN. If SYSPUNCH or SYSLIN has been successfully opened with a big block size and a following compilation specifies SIZE < (44K + extra buffer space needed), this will be ignored and SIZE = (44K + extr~ buffer space needed) will be assumed. Whether EBCDIC 24 The level of optimization required the source code is in BCD or The specification of source margins and the specification of a carriage control character for the source program listing The choice of 48- or 60-character set for source programs Whether diagnostic messages produced during execution are to include statement numbers from the source program The choice of severity level at which diagnostic messages will be printed Whether compile-time required processing is Whether a compile-time processor input listing is to be printed Whether compile-time processing be followed by compilation Whether be used the is to extended dictionary is to Whether a nesting block level is to be printed next to each statement number Whether a sequenced card deck is to be punched as the macro-processor output Whether the object program is to executed on a System/360 Model 91 be r------------------T------------T---------, I Compiler IAbbreviated IStandard I I option I name 1default I ~------------------+------------+---------i \SIZE=yyyKlyyyyyy I SIZE 1999999 I ILINECNT=xxx I LC 150 I ISOURCEINOSOURCE I SINS I SOURCE I ILISTINOLIST I LINL I NOLIST I IOPLISTINOOPLIST I OLINOL \OPLIST I IEXTREFjNOEXTREF I EINE INOEXTREF I IATRINOATR \ AINA 1NOATR I IXREFINOXREF I X\NX I NOXREF I IDECKINODECK I DIND I NODECK I ILOADINOLOAD I LDjNLD I LOAD \ IOBJNM=aaaaaaaa I N I N o actionl \ OPT=nn I 0 I 01 I IBCDJEBCDIC I BlEB I EBCDIC I ISORMGIN=(mmm,nnn[, I SM 1(2,72) I I ccc] ) I I I \CHAR 60 ICHAR48 I C60lC48 ICHAR60 I ISTMTINOSTMT I STINST I NOSTMT I IFLAGWIFLAGElFLAGS I FWIFEIFS IFLAGW I IMACROINOMACRO J M\NM 1NOMACRO \ !SOURCE2!NOSOURCE2 I s21 NS 2 ISOURCE2 I ICOMPINOCOMP I CINC ICOMP I IEXTDIC!NOEXTDIC I ED1NED INOEXTDIC] INESTINONEST I NT]NNT I NONEST I IMACDCKINOMACDCK I MDINMD INOMACDCK I M91 J NOM91 I ____________ LI _________ NOLV191 lI __________________ JI ~ The list of compiler options following the equals sign in the PARM parameter must be enclQsed in quotation marks; the separate options are separated by commas. The list must not exceed 40 characters including commas, but excluding the quotation marks. Because of the 40 character limitation, the compiler has been designed to accept the abbreviated compiler option names given in the table below, as alternatives to the longer mnemonics. Where an option includes a numerical specification, as in SIZE, LINECNT, OPT, and SORMGIN, only significant digits need be specified by the user. There is no required order for specifying the compiler options, but if conflicting options are specified the last specification in the list will be used. The default for all options (except OBJNM) can be set at system generation time to suit the requirements of the installation. In the absence of any such setting, the standard defaults shown in the table below will be effective. The DELETE parameter of the system generation PL1 macro instruction (described in the publication IEM §y~te~Ll~Q ___ QEerating systemL__ ~~!~~ Generation) may be used at system generation time to specify any compiler options not to be used at compilation time. SIZE=yyyyyylyyyKl999999 - The SIZE option indicates to the compiler the amount of main storage (in bytes) available for the compilation. The programmer specifies this amount as one of the following: yyyyyy: This gives the number of bytes available for the compilation. For blocked input, the amount yyyyyy must be greater than 45056 + (2*SYSIN BLKSIZE if BLKSIZE>500) + (2*SYSPRINT BLKSIZE if SYSPRINT is blocked). If it is not, the compiler will terminate abnormally. For unblocked input, if the amount yyyyyy is less than 45056, the default size is taken. This gives the number yyy of K units (K = 1024 bytes) available for the compilation. If the number of bytes specified is less than 44K, a message is printed and the default size is taken. yyy~: 299222: This instructs the compiler to obtain as much main storage as it can. If this amount is less than 44K, the compiler will comment and then will attempt to continue; later it may terminate abnormally. Because the compiler calculation of the amount of storage available is only an approximation, SIZE=999999 should not be used if the amount of storage available is less than 48K. The partition (MFT) or region (MVT) in which the compilation step is executed must be at least 8K larger than the amount specified in the SIZE option. Failure to ensure this may result in a system abnormal termination before the compiler can provide any diagnostic aid. The following table shows the text and dictionary block sizes used for various core availabilities as specified by the SIZE option. The available size is the amount specified in the SIZE option minus the extra space needed for larger input and output buffers. The text and dictionary Job Processing 25 block sizes are determined from the amount: available after any extra storage needed for larger input/output buffers has been subtracted from the amount specified in the SIZE option. r-------------------~------------, I I Available Size (bytes) I Block Size I I (bytes) I r-------------------t------------i 1 45,056 - 57,343 I I ~,024 I 57,344 - 73,727 I 2.048 I I 73.728 - 135,167 I 4.096 I ! 135,168 - 172,031 I 8,192 I ~72,032 or more 1____________ 16,384 lI ___________________ JI ~ LINECNT=xxx - the LINECNT option informs the compiler how many lines are to be printed on a page of listing. The number specified includes heading lines and blank lines. If a number is not specified. a standard default of 50 lines is assumed. SOURCE or NOSOURCE (Source Program Listing) - the SOURCE option specifies that the source program is to be written on the device indicated on the SYSPRINT DD card. The source listing is in the same character set as the source records. rhe statement number of the first statement in each line is printed to the left of that line. but a statement number is not given on a line containing only a continued statement. NOSOURCE indicates that no source listing is required. If ne~~h er option is specified, the compiler assumes the standard default SOURCE. A description of the listing is given in the section called "Compiler Output." LIST or NOLIST (Object Program Listing) the LIST option specifies that generated machine instructions are to be listed in a format resembling the listing output of the operating system/360 assembler program. (This output is not suitable for use as input to the assembler.) Each line contains the location counter value and text in hexadecimal, the mnemonic symbol for the operation code, and a variable field in assembler language format. Source program identifiers are used wherever possible, and comments are inserted to assist in correlation with the source program. When the LIST option is specified, a STATIC INTERNAL storage map is also printed. The NOLIST option indicates that no object program listing or STATIC INTERNAL storage map is to be provid-' ed. If no option is specified, the ~tandard default. NOLIST, is assumed by the compiler. A description of the 26 object program listing is given in the section called "Compiler Output." OPLIST or NOOPLIST - the OPLIST option (the standard default) causes the list of compiler options to be printed. The NOOPLIST option provides that no such list shall be printed. EXTREF or NOEXTREF (External Listing) - the EXT REF option causes a listing of the external symbol dictionary (ESD) to be provided. The NOEXTREF option specifies that no listing is required and is the standard default assumed if no option is specified. A description of the ESD listing is given in the section called "Compiler output." ATR or NOATR (Attribute Table) - the ATR option gives: ~. A table showing. tifier: fOE each ~den Statement number of the statement in which the identifier is declared Identifier structures and all containing A list of attributes pertaining to the identifier 2. A listing showing the length. in bytes, of every aggregate (array or structure> variable declared or allocated with fixed extents within the program. The list of identifiers is sorted, ignoring the qualification. The NOATR option specifies that no listing is required and is the standard default assumed if no option is specified. A description of the attribute listing is given in the section called "Compiler Output." XREF or NOXREF (Cross Reference Table) the XREF option produces output showing, for each identifier: Statement number of the statement in which the identifier is declared Identifier structures and all containing List of all statements in which a reference is made to the identifier The list of identifiers is sorted, ignoring the qualification. The NOXREF option indicates that no cross reference listing is required~ and is to the user. The decimal integer constant (nn) indicates the level required. The choice depends upon whether the prime concern of the user is execution speed or object-time storage space. the standard default assumed if no option is specified. A description of the listing is given in the section called "Printed Listings." DECK or NODECK (Object Program Deck) - the DECK option specifies that the compiled program (i.e. the object module) is to be output in the form of a sequenced card deck in linkage editor format. The data set is defined by a SYSPUNCH DO statement. No job control statements, (DD cards, etc.) are generated by the compiler. NODECK specifies that no object program deck is required; if NODECK is specified, the DD statement SYSPUNCH is not required. If no option is specified, the standard default, NODECK, is assumed. A description of the deck is given in the section called "Compiler Output." LOAD or NOLOAD (Object Program output) the LOAD option causes object program output to be produced as a sequential data set defined by a SYSLIN DD statement in standard linkage editor input format. NOLOAD specifies that no load module is to be created. LOAD is assumed as the standard default if no option is specified. If NOLOAD is specified, the DO statement SYSLIN is not required. OPT=OO: in this case, the object-time storage requirement is kept to a minimum. OPT=01: in this case, the execution speed is improved at the expense of object-time storage space. The difference in the compilation time for the two options is negligible. The standard default assumption if neither is specified is OPT=01o BCD or EBCDIC Source Code - the BCD or EBCDIC option allows the programmer to state in which character code his source program is punched. The BCD and EBCDIC punched card codes and graphics for the PL/I 60-character set are shown in Figure 4. If neither option is specified, the standard default assumption is EBCDIC. SORMGIN=(mmm,nnn[,ccc]) - the source margin option allows the programmer to specify: mmm,nnn - margin for source statements OBJNM=aaaaaaaa - this option causes the compiler to produce the linkage editor control statement NAME following either the object module, the object program deck, or both. If neither LOAD nor DECK has been specified (explicitly or by default), the use of this option will have no effect. The NAME statement produced will be of the following form: l:?Q§'!l~1. 2NAMEQaaaaaaaa(R) where aaaaaaaa represents the name given, which may have up to eight characters n and 2 represents one or more blanks. ccc - carriage control character position (optional) The values for these arguments subject to the constraints: 1. mmm 2. ccc must be (mmm, nnn). OPT=nn (Optimization) - two alternative levels of optimization are available nnn $ 100 outside the range The carriage control characters are: b Skip one line before printing + Skip three lines before printing Suppress space before printing Skip to Channel 1 (i.e. start new page> o Skip two lines before printing 1 Care should be taken when using this option in conjunction with cataloged procedures, otherwise the program name used in the EXEC statement will be incorrect. The principal purpose of this option is to enable the user to create a partitioned data set of load modules from a series of batched compilations, by means of the linkage editor. $ are If the source margin is not specified, a standard default of SORMGIN~(2,72) is assumed. The compile-time processor produces output requiring margins (2,72) and changes SORMGIN accordingly. The default value for the carr1age control character is installation-defined, that is, the user must decide at system generation whether a default is required and what it is to be. Job Processing 27 r------------~---------------T------------'---T------------T---------------T-------------1 I I BCD I EBCDIC I Punched I BCD I EBCDIC I ~-------T-------+-------~----·---i ~-------r-------+-------r-----+ , Card Code I Graphicl PL/I ,Graphicl Pl/I I Card Code IGraphicl PL/I I Graphic I PL/II ~------------+-------+-------+-------+----.---+------------+-------+-------+-------+-----~ I No punches I 12-7 GIG G G I 12-8-3 I 12-8 H I H H H I 12-8-4 » J < < 12-9 I I I I I , 12-8-5 [ % I ( (11-1 J J J I 12-8-6 < <] + + 11-2 K I KKK I 12 - 8 - 7 .' I I I 11- 3 L ILL L I 12 & + + & & 11-4 M I M M M I 11-8-3 $ $ $ $ 11-5 N INN N I 11-8-4 * * * * 11-6 0 I 0 0 0 I 11-8-5 & 11-7 PIP P P I 11-8-6; 11-8 Q I Q Q Q I 11-8-7 !J. 11 1'1 11 1 ~-9 R I R R R I 11 0-2 SIS S S I 0-1 / / / / 0-3 T T T T J 0-8-3 , , , , 0-4 U U U U I 0-8-4 % ( ( % % 0-5 V V V V I 0-8-5 "i 0-6 W W W W I 0-8-6 , # > > 0-7 X X X X I 0-8-7. ?? 0-8 Y Y Y Y I 8-2 b @ 0-9 Z Z Z Z I 8-3 #-= # # 0 0 0 0 0 I 8-4 @ I @ @ 1 1 1 1 1 I 8-5 2 2 2 2 2 1 8-6 > > 3 3 3 3 3 , 12-0 ?? 4 4 4 4 4 I 12-1 A A A A 5 5 5 5 5 1 12-2 B B B B 6 6 6 6 6 I 12-3 C C C C 7 7 7 7 7 I 12-4 D D D D 8 8 8 8 8 I 12-5 E E E E 9 9 9 9 9 12-6 F L_p F FLF l, ____________ LI _______ _____ LI _______ _______ L ____________ L _______ LI _______ L _______ LI _____ J Punched I J, Figure 4. BCD and EBCDIC Punched Card Codf:s and Graphics for PL/I 60-character Set CHAR60 or CHAR48 - this option allows th.: source language to be written in one of two character sets: 60or 48-characters. The standard default assumed if no character set is specified is the 60-character set. Note that all characters in the 60-character set are acceptable to thl: compiler, even when the CHAR48 option has been selected. However, there are two points to be borne in mind by anyone intending to use 60-character set input after selecting the CHAR48 option. Firstly, the restrictions of the 48-character set must be observed in the 60-character set input. otherwise errors may result. Secondly, such a mode of operation is inefficient, and should not, therefore, be made a general practice. STMT 28 or NOSTMT - the STMT option specifies to the compiler that extra code is to be produced which will allow diagnostic messages printed during execution of the compiled program to contain statement numbers from the sourCf~ program, in addition to offsets relative to PL/I entry points; these offsets alone are given if NOSTMr is specified. The standard default assumed if no option is specified is NOSTMT. Note: The average PL/I program can be executed without significant degradation in speed or space requirements. However., the use of the STMr option will cause both the execution time and the object-code space requirements to increase in direct proportion to the number of statements in the program. The benefits obtained as a result of the debugging aid that this option gives, should offset and justify these increases. FI.AGWIFLAGEIFLAGS - a high level of diagnostic capability is available in the (F) compiler. Compile-time processor diagnostic messages are written after the SOURCE2 listing and before the source program listing. All other diagnostic messages are written in a group following the source program listing. In both cases, messages are listed in order of their severitye There are four classes of diagnostic messages, which are graded in order of severity: Specification warning (lowest) FLAGW error FLAGE severe error FLAGS terminal error (highest) A ~~f~!~g is a message that calls attention to a possible error, although the statement to which it refers is syntactically valid. In addition to alerting the programmer, it may assist him in writing more efficient programs in the future. An Error message describes an attempt to statement; the programmer is informed of the correction. Errors do not normally terminate processing of the t:ext. correc~-~~-erroneous A Severe error message indicates an error whIch cannot be corrected by the compiler. The incorrect section of the program is deleted, but compilation is continued. Where reasonable, the ERROR condition will be raised at object time, if execution of an incorrect source statement is attempted. If a severe error occurs during compile-time processing, compilation will be terminated after the SOURCE listing has been produced. A rerminal error message describes an error whIch;-when discovered, forces the termination of the compilation. The choice of the severity level at and above which diagnostic messages appear on the output is an option which may be selected by the programmer. FLAGW is assumed if no level is specified. A source program message consists of the. (F) compiler's identification code (IEM) followed by a number which is unique to this message. Where applicable, the statement number to which the message refers is given .next. The message then follows. It will normally refer to the number of the statement which has produced the diagnostic message with the number corresponding to that on the source program listing. It may also contain a numeric parameter, a source program identifier, or a segment of source program text. During compile-time processing, messages will contain input line numbers, source text identifiers, or segments of source text. IEM0096I 23 SEMI-COLON NOT FOUND ~HEN EXPECTED IN STATEMENT NUMBER 23. ONE HAS BEEN INSERTED. A detailed list of diagnostic messages is given in Appendix G of this publication. MACRO or NOMACRO - the MACRO option indicates that compile-time processing is required. The NOMACRO option causes the compile-time processor to be bypassed. If no option is specified, the compiler assumes the standard default NOMACRO. SOURCE2 or NOSOURCE2 - the SOURCE2 option indicates that the input to the compile-time processor is to be listed on the device indicated on the SYSPRINT DD card. The SOURCE2 listing is in the same character set as the input text. Each line is preceded by a line number. NOSOURCE2 suppresses the listing of compile-time processor input. If no option is specified, the compiler assumes the standard default SOURCE2. If MACRO has not been specified, the SOURCE2 option is ignored. COMP or NOCOMP - the COMP option specifies that compilation is to proceed after compile-time processing has been completed. NOCOMP specifies that compilation is not required. If neither option is specified, the compiler assumes the standard default COMP. If MACRO has not been specified, COMPINOCOMP is ignored. EXTDIC or NOEXTDIC - The EXTDIC option provides a compiler dictionary with a capacity 1.5 times that of the normal dictionary if the block size is 1K bytes, and 3.5 times that of the normal dictionary if the block size is greater than 1Ko This allows successful compilation of some larger programs that would otherwise overflow the dictionary capacity. As the use of EXTDIC reduces compilation speed, it should be specified only when the program will not compile with the normal dictionary. The default is NOEXTDIC. Programs that are large enough to require the EXTDIC option will compile very much more efficiently if a large storage size is available to the compiler. Enough storage should be specified, if possible, for the dictionary to be held in storage throughout the compilation. As a rough rule, the SIZE option should allow about 100,000 bytes plus 75 times the number of identifiers in the source program. Job Processing 29 EXTDIC should not SIZE<47104 bytes. NEST be used terminated and, if the SOURCE option has been specified, a listing of the PL/I program text produced by the compile-time processor will be printed if or NON EST If NEST is specified, a number is printed under the heading LEVEL showing the depth of blocknesting for the first statement on each line of the source program listing, and a number is printed under the heading NEsr showing the depth of DO-group nesting for such statements which are contained within DO groups. MACDCK or NOMACDCK - The MACDCR option causes the output records of the macro processor to be written on SYSPUNCH as sequenced card images. rhe default is NOMACtJCK. M91 or NOM91 - the M91 option must be specified when the object program is to be executed on an IBM System/360 Model 91. This option may be specified in the PARM field of the EXEC card at compilation time or it may be set during system generation time. The standard default for this option is NOM91. 16 Terminal error messages issued; compilation terminated abnormally; successful execution impossible JOB CONTROL PROCEDURE FOR COMPILATION An example of a job control procedure showing the job control cards and deck required for a compilation is shown below. IIJOB1 IISTEP 1 JOB EXEC Code 30 o No diagnostic messages issued; compilation completed with no errors; successful execution expected 4 Warning messages only issued; program compiled; successful execution is probable 8 Error messages issued; compilation completed, but with errors; execution may fail 12 Severe error messages issued; compilation may be completed, but with errors; successful execution improbable. If a severe error occurs during compile-time processing, the compilation will be PGM=IEMAA" PARM= 'options' IISYSPUNCH DD SYSOUT=B IISYSPRINT DD SYSOUT=A /ISYSUT1 DD UNIT=SYSDA, SPACE=(1024, (60, 60}), SEP=(SYSPRINT, SYSPUNCH) IISYSIN DD * COMPLETION CODES FOR THE COMPILER At the end of compilation, the compiler returns a completion code to the operating system indicating the degree of success achieved in compilation of the source program and anticipated in execution of the object program. rests of this code may be requested on the JOB and EXEC cards of the job control language, allowing later steps of a job to be suppressed if compilation has not achieved the required degree of success. The compiler completion codes are: 123,JOHNSMITH, MSGLEVEL=1 (Source Program Deck) /* A facility is available which allows more than one external procedure to be compiled within the same job step. This is achieved by preceding the second (and each subsequent) compilation by a control record of the following form: * PROCESS('options'): The first character of the record is an asterisk. which must appear in column 1. It denotes the end of the preceding source deck. Note that if SORMGIN=(1.72) has been specified, this facility is obtained only when there is an asterisk in column 1 and the first non-blank character string is PROCESS. Any number of spaces, or no space, is acceptable between the asterisk and the keyword PROCESS. Spaces are permitted between: 1. 2. The keyword PROCESS list delimiter T Ie option o itions list and the delimiter option and //BTCHCP JOB //STPCMP EXEC the //PL1L.SYSIN DD PL1PROG,MSGLEVEL=1 PROC=PL1LFCL, PARM.PL1L='LOAD, NODECK,OBJNM=BATCHA' * ! 3. T ,e option s lmi-colon list delimiter and source program one the Opt ',ons in the list are separated by commas, as in the PARM field on the EXEC card. The options to be listed are the compiler op ,ions to be used in compiling the source deck that follows. If any option is not Ii ted, the installation default is assume I; there is no carry-over of the option listed on the preceding EXEC card. If th' us er dOes not wish to specify any option explicitly, he can simply place the termin :ting semicolon immediately after the word P 'OCESS. The number of characters in the 0 ~ion list is limited only by the length of the record, and may exceed 40 characers. * PROCESS('LOAb,ATR,NODECK'); source program two * PROCESS('LOAD,LIST,ATR,NODECK, OBJNM=BATCHB'); source program three /* //LKED.SYSLMOD DD OSNAME=PL1.PROGRAMS, DISP=OLD //BTCHEX JOB PL1PROG,MSGLEVEL=1 //JOBLIB DO //STPEXA EXEC //SYSPRINT //STEPEXB The length of the control record is limite to the length of the SYSIN record. The re :ord must be punched in EBCDIC. I The return code given for the job step is the highest code from those which the indivi ual compilations would return. The advantages of batched compilation are reduction of control program overhe ds, and a reduction in the number of cards to be punched. The disadvantage is that terminal error in one compilation may re ,ult in termination of the whole batch. The following example shows the job contra statements required (in conjunction with cltaloged procedure PL1LFCL): to batch compil e three separate source programs; to link-e,it source program 1 as one load module source programs 2 and 3 together as a seco d load module, and to put both load module into an existing cataloged data set; a ld to execute both load modules. DD EXEC //SYSPRINT DO DSNAME=PL1.PROGRAMS, DISP=(OLD,PASS) PGM=BATCHA SYSOUT=A PGM=BATCHB SYSOUT=A COMPILER OUTPUT The compiler can generate listings of source statements, compile-time statements, attributes, cross references, External Symbol Dictionary entries, aggregate lengths and object code. Source program and compile-time diagnostic messages are also produced during compilation. PRINTED LISTINGS The first page has the following heading: VERSION x RELEASE zz on the left-hand side of the page (where x indicates the version of the compiler, and zz the System/360 operating system release number); OS/360 PL/I COMPILER (F) in the center of the page; and DATE yy.ddd on the right-hand side of the page (where yy=year and ddd=day). Page numbering, which appears at the top right-hand corner of each page, begins on this page. Following the heading is the invocation parameter list containing the options specified for I Job Processing 31 the compilation. rhe diagnostic messages, if any, associated with the specification of compiler options appear next. If the compiler options specified incluje OPLIsr, these diagnostic messages are followed by a complete list of the compiler options used for the compilationo This list includes all options validly specified at the time of invocation, as well as those options assumed by default. specified in the SYSPRINT DD statement, one input record per line. Each line is assigned a number which appears to the left of the line. §.xampl~: % DCL A CHAR, B FIXED; 2 % A='B+C'; % B=2; 3 X=A; Each page thereafter has a heading and a page number. If the compiler is invoked by an EXEC statement, the heading used is the first record of PL/I source text read from the input source (SYSIN). The listings consist of the following items in the order given; items 1 through 10 depend on the appropriate compiler options being selected and specified on the EXEC statement card; items 5 through 9 are not produced if a terminal error halts the compilation. I 1 .. List of compiler options specified 2. Compile-time processor input listing 3. Compile-time processor diagnostic messag8s Source Program Listing If the SOURCE option is specified, the source program is written on the output device specified in the SYSPRINT DD statement. The contents of one card are printed on one line; if a carriage control character is specified, these may be skips between lines or to a new page. The number of the first statement starting on that line is printed at the left-hand side of that line. 1 PGMNAME: 40 Source program listing 5 .. Attribute and/or cross reference table 2 DECLARE A STATIC, 6. Aggregate length table 3 B AUTOMATIC; A=B; 7. Storage requirements listing ti. External symbol dictionary listing 90 Assembly listing 10., Source program diagnostic messages rhe time taken for the compilation is also shown on the listing. The compiler options listed are those used for ~he particular compilation. A description of the options is given in the section called "Compiler Processing." If the spe~ified, processor 32 MACRO and SOURCE2 options are the input to the compile-time is written on the output device PROCEDURE; For numbering purposes, statements contained within compound statements (IF and ON) are counted, as well as the compound statements themselves. In addition# when an END statement closes multiple groups or blocks, all implied END statements are included in the count. ~~~!!!21~: P: PROC; 2 X: BEGIN; 3 IF A=B 4 THEN A=1; 5 ELSE DO; 6 A=O; 7 C=Bi 8 END 10 D=E; 11 END; Xi If the input to the compiler is produced by th~ compile-time processor, the SORMGIN optio will be (2,72) and columns 73-80 will ontain auxiliary information. This infor ation can be used by the programmer to de~ermine how the input to the compiler was g.nerated from the original input. Storage area for each procedure Storage area for each begin block Storage area for each on-unit Length of program CSECr Length of static CSECT columns, which are listed as part SOURCE listing, are used as follows: rh~se of th~ Contains the input line number from which this output line was generated. These numbers correspond to the line numbers printed with the SOURCE2 listing. 73-77 Contains a two-digit number giving the maximum depth of replacement which occurred for this linc~ If no replacement occurred, this field will be blank. 78-79 If an error occurs while replacement is being attempted (e.g., a % is found in a replacement value), this column will contain the letter "E". Otherwise it will be blank .. 80 If th~ NEST option is specified then: 1. he block level at the begining of the tatement indicatej is printed next to he statement number for that line. 2. in iterative DO level count is printed ~ext to the level count. STMT ~EVEL NEST 1 2 3 4 5 6 7 8 9 1 2 2 2 2 3 2 1 1 2 1 1 1 A: PROC OPTIONS (MAIN); B: PROC (L) ; DO I = 1 TO 10; DO J = 1 TO 10; END; BEGIN; END; END B; END A; Th's listing is printed out whenever the SOURC: option is in effect and gives the follo~ing information in bytes: If the ATR option is specified, the identifiers used in the program are listed in alphameric order, together with their explicitly declared and default attributes. The attributes INTERNAL, NORMAL, and REAL are not listed; these attributes can be assumed unless the conflicting attributes EXTERNAL, ABNORMAL, and COMPLEX are listed. For file identifiers. only explicitly declared attributes are listed, except for EXTERNAL, which is listed even when applied by default. For an array, the dimension attribute is printed first. The dimensions are printed as in the declaration except that expression3 are replaced by asterisks. Constants and expressions for string lengths are represented in the length attribute in the same way as constants and expressions for array dimensions are represented in the dimension attribute. If an identifier is declared in a DECLARE statement, it is preceded by the number of that statement. Statement labels and entry labels are preceded by the defining statement number. No statement number precedes a contextually declared identifier. If the XREF option is specified in addition to the ATR option, each identifier has the numbers of all the statements in which it occurs printed immediately below its attributes. If the XREF option is specified without the ATR option, the table is printed without the attributes. Job Processing 33 1 2 3 4 5 6 7 8 9 QQ: 10 11 12 13 14 15 PROCEDURE: DCL 1 A, 2 B(3), 2 C. 3 0: DCL G(10.10) CHAR(2); DCL 1 E# 2 F LIKE C: DeL I(10) CHAR(2) DEF G(1SUB,1SUB); DCL 1 J, 2 K BIT(1), 2 L BIT (9): DCL S(V): DCL H(10,10) CHAR(2) DEF G: DCL U(*> CONTROLLED: DCL 1 M BASED(P), 2 N POINTER, 2 T: DCL Y(2:4,II); DCL X (2: II) : DCL W AREA: DCL Z(II:JJ,2): ALLOCATE M IN (W) SET (P): GET LIST(P->T): ALLOCATE M IN (W) SET (Q): GET LISTCQ->T): P->N=Q: PUT LIST(Q->T): R=4: ALLOCATE U ( R) : 16 17 18 19 20 21 22 150 END QQ: The foregoing procedure will produce table .. the following attribute and cross reference ATTRIBUTE AND CROSS-REFERENCE TABLE DCL NO. IDENTIFIER ATTRIBUTES AND REFERENCES 2 A AUTOMATIC .• UNALIGNED, STRUCTURE 2 B (3)IN A, AUTOMATIC, ALIGNED, DECIMAL, FLOAT (SINGLE) 2 C IN A,AUTOMATIC,UNALIGNED,STRUCTURE 2 D IN C IN A,AUTOMATIC,ALIGNED,DECIMAL#FLOAT(SINGLE) 4 D IN F IN E,AUTOMATIC,ALIGNED,DECIMAL.FLOAT(SINGLE) 4 E AUTOMATIC, UNALIGNED" STRUCTURE 4 F IN E,AUTOMATIC,UNALIGNED,STRUCTURE 3 G (10,10)AUTOMATIC,UNALIGNED,STRING(2),CHARACTER 8 H (10,10)AUTOMATIC.DEFINED,UNALIGNED,STRING(2),CHARACTER 5 I (10)AUTOMATIC.DEFINED,UNALIGNED,STRING(2),CHARACTER II AUTOMATIC,ALIGNED,BINARY,FIXED(15,0) 14,12,11 J AUTOMATIC, UNALIGNED, STRUCTURE JJ AUTOMATIC,ALIGNED,BINARY,FIXED(15,0) 14 K IN J.AUTOMATIC,UNALIGNED.STRING(1),BIT 6 6 34 6 L IN J.AUTOMATIC,UNALIGNED,STRING(9).BIT 10 M BASED(P),UNALIGNED,STRUCTURE 15,17 10 N IN M.BASED(P),ALIGNED,POINTER 19 P AUTOMATIC" ALIGNED, POINTER 15,,16,19 Q AUTOMATIC. ALIGNED, POINTER 17, 18, 19,,20 QQ ENTRY,DECIMAL~FLOAT(SINGLE) R AUTOMATIC, ALIGNED" DECIMAL" FLOAT (S INGLE) 21,22 s (*)AUTOMATIC#ALIGNED,DECIMAL~FLOAT(SINGLE) SYSIN FILE. EXTERNAL 16., 18 SYSPRINT FILE" EXTERNAL 20 10 T IN ~BASED(P)~ALIGNED,DECIMAL,FLOAT(SINGLE) 16,18,,20 9 u 1 7 (*)CONTROLLED,ALIGNED~DECIMAL,FLOAT(SINGLE) 22 v AUTOMATICBALIGNED, DECIMAL, FLOAT (SINGLE) 7 13 w AUTOMATIC II ALIGNED, AREA 15,17 12 x (2:*)AUTOMATIC,ALIGNED,DEClMAL,FLOAT(SINGLE) 11 Y (2:4,*)AUTOMATIC,ALIGNED.DECIMAL,FLOAT(SINGLE) 14 z (*:*,2)AUTOMATIC g ALIGNED,DECIMAL,FLOAT(SINGLE) The attributes FLOAT(SINGLE) and FLOAT(DOUBLE) refer to the precision floati g-point data. These precisions are defined in Figures 32. 49, and 49.1. SpeCification of the ATR option or the XREF 'ption produces an aggregate length which gives, where possible. the in bytes of all major structures and uctured arrays used in the program. Each entry in the table consists of the identi: ier of an aggregate preceded by a state ~nt number and followed by the length of th aggregate in bytes. Th er of gate non-B ment statement number is the number eithDECLARE statement for the aggrein the case of a CONTROLLED, aggregate, of an ALLOCATE statethe aggregate. An entry appears of the for every ALLOCATE statement involving a non-BASED aggregate since such statements may have the effect of changing the aggregate length during execution. Allocation of a BASED aggregate does not have this effect, and only one entry, which is that corresponding to the DECLARE statement, appears for any BASED aggregate. The length of an aggregate may not be known at compilation, either because the aggregate contains elements having adjustable lengths or dimensions, or hecause the aggregate is dynamically defined. In these cases, the words 'ADJUSTABLE' or 'DEFINED' appear in the 'Length in Bytes' column. The entry for a COBOL mapped structure has the word '(COBOL)' appended. Job Processing 35 The procedure in the foregoing attribute and cross reference table example produces the following aggregate length table. LENGTH - the length in bytes of the section (applicable only to SD. CM, and PR type entries). expressed as a hexadecimal number AGGREGATE LENGTH TABLE The sizes of the program and STATIC INTERNAL control sections are printed at the end of the ESD: they are also printed at the end of the compilation. This makes the sizes available even if EXTREF is not specified. The size of each DSA is also printed at the end of the compilation. Printing of these sizes is under the control of the SOURCE option. STATEMENT NO. IDENTIFIER LENGTH IN BYTES 2 A 16 4 E 4 3 G 200 8 H 200 5 I DEFINED 6 J 2 10 M 8 7 S ADJUSTABLE 22 U ADJUSTABLE 12 X ADJUSTABLE J PGMNAME J J PGMNAMEA 11 Y ADJUSTABLE l 14 Z ADJUSTABLE I Description of Contents of ESD Listing The first seven entries are in standard format, as shown in Figure 5. r-----------------------------------------, TYPE ID ADDR LENGTH I SYMBOL 1 J IHEQINV ) IHESADA J J IHESADB J If the option EXTREF is specified, all entries in the external symbol dictionary (ESD) are listed. The information appears under the following headings: I IHEQERR I so 0001 000000 00033A SD 0002 000000 00005F PR 0003 000000 000004 ER 0004 000000 ER 0005 000000 PR 0006 000000 000004 JL _________________________________________ IHEQTIC PR 0007 000000 000004 J Figure 5. Specimen ESD Listing The seven entries are: SYMBOL - an eight-character field containing the name identifying the ESD entry 1. TYPE - two characters from the following list, to identify the particular type of ESD entry: Name of the program control section. This is the first label in the external procedure statement. 2. Name of the STATIC INTERNAL control section. This is the same label as in 1, (left-filled with asterisks if necessary) to seven characters, with an eighth character, A. 3. Pseudo-register for the invocation count (the count of the number of times a block is invoked recursively). 4. Entry point of the library routine used to obtain AUTOMATIC storage for a PL/I block. 5. Entry point of the library routine used to obtain storage for some AUTOMATIC variables. 6. pseudo-register for the error handling routine. SO CM ER PR LD Section Definition Named Common External Reference Pseudo-register Label Definition (For a detailed description of the different types of ESD entries, refer to the publication IBM System/36Q Q£erating sY2teIDL~kage Editor.) ID - a 4-digit hexadecimal identifies the symbol number which ADDR - the hexadecimal representation the compiled address of the symbol 36 of 7. ******XB pseudo-register used for tasking. ******XC Tl~e remainder of the listing is variable, but the general organization is as foIl )ws: 1. Section definition for one-word control section IHEMAIN, which contains the address of the principal entry point to the external procedure. This item is present only if the external procedure has the option MAIN. Section definition for the three-word control section IHENTRY (always present), which provides the linkage with the library at execution time. 2. LD type items for all names of entry points to the external procedure. except the first, which has been used as the name of the program control section .. 3.. A PR type entry for the display pseudo-register for each block in the compilation.. The names are generated from the external procedure name which is left-filled to seven characters with asterisks. The eighth character is selected from a table of printable characters which are assigned to names in the order in which the blocks appear in the compilation. If each character in the table has been used once and more names are still required, the first character of the name is replaced from another (smaller) table and the eighth character recycles. The first and, if necessary, the second character of the name are allowed to cycle through this second table .. If the first or second character overwritten in this way was a character in the external procedure name (as opposed to an asterisk used in padding), a warning message is printed out, since this could mean that separate external procedures with distinct names could contain identical generated names. X: PROC; Y: PROC; Z: BEGIN; END X; The display pseudo-registers for X, Y, and Z would have the names: ******XO 4. ER type entries for all library routines and external routines called by the compilation. The list of names of library routines contains the names of routines which are directly called by the compiled code (first-level routines) and the names of modules which are called by the first-level routines. ER type entries for all library routines not directly called by the compiled code but required for successful compilation. 5. SO type entries for EXTERNAL FILE constants and STATIC EXTERNAL variables, except in the case of STATIC EXTERNAL variables without any initial text. which have CM type entries .. File constants, both internal and external, have a pseudo-register associated with them, used by the library for addressing a dynamically allocated data set control block. For EXTERNAL FILE constants the pseudo-register name is the same as the file name, and for internal ones it is generated as for display pseudo-registers. 6. PR type entries for all CONTROLLED variables. For external variables the declared name is used. and for internal variables a name is generated as for the display pseudo-registers. A STATIC INTERNAL storage map is produced only when the compiler option LIST is specified. The size of this storage area is given at the end of the compilation. The first 52 bytes of the STATIC INTERNAL Control Section are of a standard form and are not listed. They contain the following information: DC DC F'4096' AL4(SI.+X'1000') DC DC DC DC DC DC AL4CSI.+X·7000') VL4(IHESADA) VL4(IHESADB) A(OSASUB) ACEPISUB) A(IHESAFA) Job Processing 37 SI. is the address of the STATIC INTERNAL control section, and IHESADA, IHESADB and IHESAFA are library routines. DSASUB and EPISUB are compiler routines for getting and freeing DSAs. The remainder of STATIC is listed in the following form: A sample of a STATIC INTERNAL storage map is given in Appendix D. 1. 6-character hexadecimal offset 2. Up to 8 bytes of hexadecimal text 3. Comment indicating type of item to which the text belongs (only appears against first line of text for item) The possible (xxx indicates identifier): comments are as follows the presence of an OED FOR TEMP or OED Data Element Descriptor for temporary or for a programmer's variable FED Format Element Descriptor DV •. xxx Dope Vector variable DVD •• Dope Vector Descriptor of a If the LINECNT specification for the listing is 72 or less. and the actual number of lines to be printed (including skips) exceeds the LINECNT, double-column format is used. If LINECNT is greater than 72, or if the actual number of lines to be printed (including skips) is less than the LINECNT, single-column format is used. STATIC D.V. SKELETON Dope Vector skeleton for an AUTOMATIC or CONTROLLED variable If the LIST option is specified, a listing of the object code is produced, together with its equivalent in a form similar to assembler language. If the LINECNT specification for the listing is 72 or less, and the actual number of lines to be printed (including skips) exceeds the LINECNT, double-column format is used. If LINECNT is greater than 72, or if the actual number of lines to be printed (including skips) is less than the LINECNT, single-column format is used. Comments, of the form shown below, are included to help the programmer to identify the functions of different segments of the object program. * STATEMENT NUMBER n - identifies the start of the code generated for source listing statement number n RDV •• Record Dope Vector * PROCEDURE xxx - identifies the the procedure labeled xxx A•• xxx Address of EXTERNAL control section or entry point, or of an internal label * REAL ENTRY xxx - heads the initialization code for an entry point to a procedure labeled xxx * PROLOGUE BASE - identifies the start of the initialization code common to all entry points to that procedure * PROCEDURE BASE - identifies the address loaded into the base register for the procedure * APPARENT ENTRY xxx - identifies the point of entry into the procedure for the entry point labeled xxx * END PROCEDURE xxx - identifies the end of the procedure labeled xxx * BEGIN BLOCK xxx - indicates the start of the BEGIN block with label xxx * END BLOCK xxx - indicates the end of BEGIN block with label xxx * INITIALIZATION CODE FOR xxx - indicates that the code following performs initial value assignment or dope vector initialization for the variable xxx ARGUMBNT LIST Argument list skeleton CONSTANTS 38 SYMTAB Symbol table entry SYM •• xxx Symbolic name of label constant or label variable FILE •• xxx File name ON •• xxx Programmer-declared ON-condition ATTRIB File attributes xxx STATIC variable. If the variable is not initialized, no text appears against the comment, and there is also no STATIC offset if the variable is an array. (This can be calculated from the dope vector if required) start of the Whbrever possible, a mnemonic prefix is used to identify the type of operand in an instr ction, and where applicable this is folIo ed by a source program identifier. The f'llowing prefixes are used: TMPDV •• Temporary dope vector, followed by hexadecimal dictionary reference VO.. Virtual origin A •• Address constant WP1. AE. Apparent entry point (point in the procedure to which control passed from the prologue) Workspace~ followed by decimal number of block which allocates workspace WP2. Label created for an otherwise unlabeled block (followed by the number of the block) Workspace, followed by decimal number of block which allocates workspace WS1. followed by decimal number of block which allocates workspace WS2. Workspace~ followed by decimal number of block which allocates workspace WS3. Wo~kspaceg followed by decimal number of block which allocates workspace BLO~K. c.o constant (followed by a hexadecimal dictiona+y reference) CL. A label generated by the compiler (followed by a decimal number identifying the label) Data Element Descriptor Workspace~ Dope Vector A listing of the various storage areas is not produced, but the addresses of variables can be deduced from the object program listing. Dope Vector Descriptor Data Element Descriptor of function value Exampl~: FVR ... Function value A=B+10E1; in the duces: Invocation count pseudo register ON ... ON-condition name PR •• pseudo-register source program 0002CA 78 00 B 058 LE O,B 0002CE 7A 00 AE 0,C •• 08F4 0002D2 70 00 B 060 STE O,A B 064 pro- Record Definition Vector A and B a~e STATIC INTERNAL variables at an offset of X'60' and X'58'g respectively, from the start of the control section. Return switch Address of STATIC INTERNAL control section Skeleton dope vector, followed by hexadecimal dictionary reference Skeleton parameter list, followed by hexadecimal tionary reference dic- symbol table entry Symbolic representation of a label Temporary control Area. A word containing the address of the dope vector of the specified temporary Temporary, followed by hexadecimal dictionary reference A sample of an object program listing is given in Appendix DA The size of this listing is always printed at the end of the compilation. Diagnostic messages are produced whenever the compiler detects an error (or possible error) in the program and are sorted in order of severity. The four levels of severity and types of message are fully described in the section "Compiler Options." Each error message is preceded by a code in the form IEMnnnnI, where IEM is the identification code for the PL/I (F) compiler, and nnnn is a decimal number identifying the message. Job Processing 39 For a detailed list of the diagnostic messages refer to Appendix G of this publication. At the end of a compilation, the time taken, in minutes and hundredths of minutes, is printed out, provided that the appropriate control-program timing options have been selected at the time of system generation. The time given is the time during which the compiler is actually in control. For details of these options, refer to 'system Requirements'. This card appears only when the option is specified. OBJNM Object decks generated as a result of the use of the DECK option will be serialized in the following manner. Columns 73 to 76 will contain the first four characters of the first entry label of the external procedure. If the label has fewer than four characters, it will be left-adjusted in the field and the remainder padded with blanks. Columns 77 to 80 will contain a fourdigit decimal serial number. Numbering starts at 0001 and the increment is 1 each time. OBJECT MODULE OUTPUT The object module is in a form suitable for direct input into the linkage editor. It is made up as follows: ABNORMAL END OF COMPILATION 1. ESD entries for the object module. 2. TXT and RLD entries for the compiled program. TXT and RLD entries are intermingled, although RLD entries are always preceded by their related texto 3. TXT and RLD entries for the STATIC INTERNAL control section. LINKAGE EDITOR PROCESSING 4u TXT and RLD entries for a one-word control section IHEMAIN, whicq contains the address of the principal entry point to the external procedure. This control section is produced only when the external procedure has the MAIN option; it is used by the library routines IHESAPA, IHESAPC, IHETSAP and IHETSAO when passing control to the program. 5. TXT and RLD entries for a three-word control section IHENTRY. This control section is referenced by the END card and contains a branch to one of the four library routines IHESAPA, IHESAPC, IHETSAP or IHETSAO. The last two routines are used for tasking. The linkage editor processes PL/I object modules, resolves any references to subroutines and functions, and forms a load module. To communicate with the linkage editor program, the programmer supplies an EXEC statement and DO statements that define all data sets. He may also supply control statements for the linkage editor. The program name for the linkage editor is IEWL. If tne linkage editor is executed as a job step, the parameter PGM=IEWL is used in the EXEC statement. 6. TXT and RLD entries for all STATIC EXTERNAL control sections and EXTERNAL file constant control sections. The sections appear in increasing order of ESD identification. 7. END statement for the compilation. This specifies the IHENTRY control section as the one to be entered. 8. NAME 40 statement for the compilation. If a program check occurs during a compilation, a diagnostic message is printed giving the type of interruption. The primary input to the linkage editor is in the form of object modules and/or linkage editor control statements. (A load module, by itself, cannot be the primary input.) While processing an object module, the linkage editor finds any references to functions or subroutines in the object module, and uses an automatic library call to resolve them. The automatic call library consists of either object modules and linkage editor control statements, or load modules, but not both. r-------, r---------, r---------,1 ISource 1 ILanguage 1 IObject t-------, 1 1->ITrans1->1 Ilator Module lIPrograml _______ J L __________ J1 lI _________ J1 ]I 1 ] v r-------, r---------, r---------,1 1r---------, r---------,] 1r---------, r--------, ISource I ILanguage 1 IObject Linkage 1 ILoad Control I IMain I 1 1->ITrans1->1 1->1 1->1 1->1 1->] 1 1L_________ Module 1l _________ Editor 1L_________ Program J1 lIStorage lIPrograml _______ J lIlator _________ J1 J1 JI lIModule _________ J1 ________ J1 " J I I r-------, r---------, r---------., 1 I r------- J L_______ J Iprograml Ilator I L_________ J Figure 6. Linkage Editor Input/Output Flow I Source 1 I Language I IObject I 1->ITransI->l Il _________ Module l J The programmer can specify additional libraries and data sets for use by the linkage editor; the LIBRARY card is used for this purpose (see the publication 1~~ ~Y~~~~~l£Q_QE~r~tig~_~~!emL Linkage Editor.) The output of the linkage editor is always placed in a library. Error messages and optional diagnostic messages are written on either an intermediate storage device or the printer. In addition, a work data set is required by the linkage editor to do its processing. Figure 6 shows the input/output flow in linkage editor processing. The programmer communicates information about data sets to the linkage editor through DD statements identified by specific ddnames, similar to the ddnames used by the compiler. The programmer must use these ddnames and he must meet the functions and requirements for data sets specified in Figure 7. Any data sets defined by SYSLIB or SYSLMOD, and any additional data sets, must be partitioned data sets. The ddname given to refer to any additional libraries is not fixed by the linkage editor. L~hkage editor control statements are used to inform the linkage editor about the additional libraries. The data sets used by the linkage editor are assigned to the device classes listed in Figure 7. The user can specify additional libraries by means of the linkage editor control statements INCLUDE and LIBRARY. These control statements can appear in either the input stream or the libraries. For details of these statements refer to the publicati on !~!~L.§y§.!~rn/ 360 _QEer a t i:!!L§y§.!~!!!L_1.!!}~:. ~L~£itQr· Space can be conserved by link-editing PL/I subroutines into a private library with their external references unresolved. To do this, the linkage editor option NCAL is specified; the SYSLIB DD statement is then unnecessary. It is also possible to maintain a liorary of PL/I object modules. Either of these techniques requires considerably less disk space than link-editing all PL/I object modules with their external references resolved. Linkage Editor Priority If modules with the same name appear in the input to the linkage editor, the linkage editor accepts the first module which appears. Job Processing 41 r------------r-----------------------------·------T-------------------------, I I Possible I I ) ddname I I Function Device Classes I .------------+-----------------------------------+-------------------------i I SYSLIN I Primary input data, normally the I SYSSQ# or the input I I stream device (specifiedl I I output of the compiler I I I by DD *) I t------------+-----------------------------------+-------------------------~ l SYSLIB I Automatic call library (usually I SYSDA I I I I I the PL/ I Library) t------------+----------------------------------·-+-------------------------~ ! SYSUT1 I Work data set I SYSDA I .------------+-----------------------------------+-------------------------i t-~:~:~~~:---t-~~:~~~:~~~-~:::~~::---------·------+-~~~~~~-~:-~~~~~:-~=~~~=-~ I SYSLMOD I Output for load module I SYSDA I r------------+------------------------------------+-------------------------~ I (userI Additional libraries and data setsl SYSDA ) lL____________ specified) LI ___________________________________.J.I _________________________ JI Figure 7. Linkage Editor ddnames 2. In order to overlay PL/I programs, the user must have some knowledge of the control sections produced by the compiler. The following control sections are produced for each external procedure: One control section containing the executable portion of the program and all constants. One control section INTERNAL data. containing (only if for the There is a linkage editor requirement that each segment of an overlay structure consists of one or more complete control sections. No control section can be split between different segments. The input to the linkage editor must contain all external procedures required in the overlay structure, together with the linkage-editor control cards describing the required structure. The external procedures may be in the form of: 42 I JA One control section IHENTRY. 1. For a full description of the overlay facilities, s~e IBM System/360 0Eeratigg System~ __ bi~~~~__ §gitQr~ The two examples given below show how the simple overlay structure illustrated in the diagram can be produced from each of the forms of external procedure described above. Both examples use cataloged procedures; the first one also uses batched compilation methods. STATIC One control section for each STATIC EXTERNAL item or EXTERNAL file name. (This is a named common control section only for a non-string scalar variable declared without the INITIAL attribute.) One control section IHEMAIN oprrONS(MAIN) is specified procedure). Object and load modules in a library. These modules are called by means of the linkage-editor INCLUDE statement. Object modules in the input stream r------J.------, I IB I X JF + I I IC I r---- L - - - - , I Y I JD jE I I I EX~~El~-1~ §t£~~ The QQ~ct Modules in the Input cataloged procedure PL1LFCLG is used, with two additional DD statements for SYSIN in the compilation and link-edit job steps. //jobname //stepname //PL1L.SYSIN • * JOB EXEC DD etc. PL1LFCLG" PARM.LKED='OVLY' * A:PROC OPTIONS(MAIN)i ••• END Ai PROCESS ••• B:PROC; ••• END B; PROCESS ••• * * * ·.. C:PROC; END C; PROCESS ••• D:PROCi END Di PROCESS ••• E:PROC; END Ei PROCESS ••• F:PROCi END Fi ·.. · .. 1* IILKED.SYSIN DD INSERT A OVERLAY X INSERT B INSERT C OVERLAY Y INSERT D OVERLAY Y INSERT E OVERLAY X INSERT F * Note that the DD statement LKED.SYSIN allows data in the input stream to be concatenated with the object file. ~xa~E~~~~ QQiect and Load Modules in a The cataloged procedure PL1LFCL is used to compile source modules in a library LIB.S and to use the object modules from this as input to the link-edit step. The load modules produced are placed in a library of load modules, LIB.L. Both LIB.S and LIB.L are cataloged data sets. Each external procedure requires: Li£ra~~ Iistepname IIPL1L.SYSIN EXEC DD IILKED.SYSLMOD DD PL1LFCL,PARM.LKED= 'XREF,LIST,NCAL' DSNAME=LIB.S(member), DISP=SHR DSNAME=LIB.L(member>, DISP=OLD To create an overlay structure from modules in LIB.L, the cataloged procedure PL1LFLG is used witn the INCLUDE statement: Iistepname EXEC IILKEDePRIVLIB DD PL1LFLG,PARM.LKED= OVLY DSNAME=LIB. L, DISP=SHR IILKED.SYSIN DD * INCLUDE PRIVLIB(A,B,C,D,E,F) INSERT A OVERLAY X INSERT B INSERT C OVERLAY Y INSERT D OVERLAY Y INSERT E OVERLAY X INSERT F ENTRY IHENTRY Use of the NCAL option (see below) ensures that only those modules required are placed in the load module library. The LKED.SYSLMOD DD statement overrides the DD statement with the same ddname in the cataloged procedure. The other DD statements are additions to those in the cataloged procedure. The basis of the above method is that all object and load modules appear in the input stream before the first OVERLAY statement. All control sections are therefore placed in the root segment until explicitly moved to another segment by an INSERT statement. Each INSERT statement moves into the appropriate overlay segment, only the control section containing executable code. Since all modules required from the PL/I library are obtained using the automatic library call procedure to resolve external references, all library modules and data are in the root segment, where they are available to all other segments. This is basically necessary, since PL/I does not support exclusive calls, i.e., calls between segments which do not lie on a single path. For example, in the above structure, procedures in the segment containing D could call procedures in the segments containing A, B, C, and D, but not in the segments containing E or Fo Procedures in the segments containing Band C could call procedures in the segments containing A, H, C, D and E, but not in the segment containing Fa A procedure in, say, the segment containing B may not call a procedure in the segment containing A which in turn calls a procedure in the segment containing F. However, certain modules may not be required ~y all segments, in which case they can be moved out into a lower segment. The method of doing this is to compile the procedures using the compiler option EXTREF and then to examine the lists of external references produced. For example, if in the above structure a module IHExxx is called only by the segment containing E, it may be moved into that segment by a control statement of the form INSERT IHExxx immediately following the statement INSERT E. Similarly, if module IHEyyy is called only by the segments containing D and E it may be moved into the segment containing B or C. Any module called by both the segment containing F and anyone or more of the segments containing B, C, D, and E must remain in the root segment. Similarly, data control sections may be moved from the root structure to segments lower in the structure. For example: 1~ To move the STATIC INTERNAL control section for procedure F into the segment containing F, the statement Job Processing 43 INSERT F must INSERT ******FA. 2. be followed To move the STATIC EXTERNAL control section PQR (which is referenced by B and C only) into the segment containing Band C, the statement INSERT C must be followed by INSERT PQR. Values assigned to these STATIC data items are not saved when the segment is overlaid; when the segment is reloaded the original values are restored. STATIC data should therefore be left in the root segment unless it consists of: 1• 2. Values set and then read-only> by the INITIAL attribute. unchanged (that is~ Values that need not be retained between different loadings of the segment. An alternative method of producing an overlay structure is to obtain object decks and intermingle these with OVERLAY cards. This method requires much more careful handling. STATIC INTERNAL control sections must be moved up into the root segment, unless they are read-only. Named common control sections (which are produced only for non-initialized~ non-string EXTERNAL scalar variables> are automatically moved up so that they are accessible to all segments requ1r1ng them, but all other EXTERNAL items will need to be moved up by the use of INSERT statements. Further information on the use of overlay structures can be obtained from the publication IBM_£ystem/360 Operating Sys!~~_binkag~Editof~ In addition to those already discussed, other linkage editor control statements are available: 1. NAME statement: Specifies the name of the load module created from the preceding input modules. 2. ALIAS statement: Specifies alternative names for the load module and can also specify alternative entry points. 3. CHAN3E statement: Changes a control section name, an entry name. or an external reference. 4. 44 tion to be replaced by another; or changes an entry name or an external reference. by REPLACE statement: Deletes a control section, an entry name. or an external reference; or deletes a control sec- For a detailed description of these facilities, see the publication IEM 2Y§~60_QEerating System, Li~n~k~a~g~e~~E~d~i=. to!:. OPTIONS FOR LINKAGE EDITOR PROCESSING The linkage editor options can be specified in the EXEC statement. The options that are most applicable to the PL/I programmer are: PARM='LIST,MAPIXREF,LETIXCAL,NCAL.OVLY' LIST - the LIST option specifies that all control statements processed by the linkage editor are listed in cardimage format on the diagnostic output data set. MAP or XREF - the MAP option tells the linkage editor to produce a map of the load module; this map indicates the relative location and length of control sections. If XREF is specified, a map of the load module is produced and a cross reference list indicating all external references in each control section is generated. If neither MAP nor XREF is specified, neither the map nor the cross reference listing is generated. LET or XCAL - the LET option specifies that the linkage editor should mark the load module ready for execution even though certain error or abnormal conditions were found during linkage editing. (It should be noted that, because of the selective loading techniques, certain external references to library modules may not be resolved.) The XCAL option marks the load module executable even though improper branches were made between control sections; this occurs only if the OVERLAY feature of the linkage editor is being used. NCAL - the NCAL option informs the Linkage Editor that no external references are to be resolved by the automatic library call mechanism. The subprograms in the library are not inserted in the load module. However, the load module is marked executable. Other options can also be specified for the linkage editor. For a detailed description of all linkage editor options, see the publication IBM System/360 operatin~ Syst~Link~ge Editor. JOB CONTROL PROCEDURE FOR LINKAGE EDITOR An example of a linkage editor procedure that handles the object program deck from the PL/I (F) compiler is given below. IIJOB2 / I]~INK JOB 345,JOHNSMITH, MSGLEVEL=i1 EXEC PGM=IEWL, PARM='XREF,LIST' If the module is in an overlay structure. the control sections are arranged by segment in the order in which they were specified. Each control section that is included from a library during automatic library call is indicated by an asterisk. After the control sections, the module map shows the contents of the pseudoregister vector (PRV). //SYSPRINT DD SYSOUT=A //SYSLIB At the end of the module map is: 1. The relative address of the instruction with which processing of the module begins. DD UNIT=SYSDA, SPACE=(1024.(200,20» 2. The total bytes DD DSNAME=PRIVATE(PROGRAM), DISP=OLD 3. The total length register vector. DD DSNAME=SYS1.PL~LIB~ DISP=SHR //SYSUT1 /ISYSLMOD //SYSLIN DD * (Object program deck) /* length of the of the module in pseudo- In the case of an overlay load module# the length ~s that of the longest path. The addresses shown in the module map are those assigned by the linkage editor prior to loading for execution. LINKAGE EDITOR OUTPUT The linkage editor produces a map of the load module if the MAP option is specified. or a cross reference list and a map if the XREF option is specified. The linkage editor also produces diagnostic messages, which are fully described in the publication I~~_§y~tgm/36~~~tin~ System, Link~gg_§Qi:!:.Qr· The size of the load module produced by the linkage editor must not exceed 512K bytes. Programs producing a load module larger than this should be segmented. The module map shows all control sections in the output module and all entry names in each control section. The control sections are arranged in ascending order according to their assigned origins. All entry names are listed below the control section in which they are defined. The cross reference table consists of a module map and a list of cross references for each control section. Each address constant is listed with its assigned location, the symbol referred to# and the name of the control section in which the symbol is defined. For overlay programs, this information is provided for each segment. In addition, the number of the segment in which the symbol is defined is provided. If the program is in an overlay structure, a list of cross references is provided for each segment. If a symbol is unresolved after processing by the linkage editor, it is identified by $UNRESOLVED in the list. However. if an unresolved symbol is marked by the nevercall (NCAL) function, it is identified by $NEVER-CALL. Disposition Data Information indicating the options and attributes specified is provided with each load module produced. Job Processing 45 There are, in addition, a number of disposition messages to indicate the conditions of the load module in the output module library. For full details see the publication IBM_§ystem/360 Operating Sys~emL_bin~~~ Editof. DIAGNOSTIC MESSAGES Certain conditions that are present when a module is being processed can cause an error or warning message to be printBd. An error or warning message consists of a message code and a message text. The message text contains combinations of the following: The code lEW, which identifies editor messages linkage The message classification error or warning) (either £)CB Paramet er The data control block , or member in error //SYSPRINT DD SYSOUT=A //SYSLIN DO DSNAME=&&LOADSET. UNIT=SYSDA, DISP=(MOD,PASS), SPACE=(80, (250,100» //SYSUT1 DO UNIT=SYSDA" SPACE=(1024, (60,60», SEP=(SYSPRINT, SYSLIN) //SYSIN DO * Instructions to the programmer Actions taken by the linkage editor If an error is encountered during processing, the message code for that error iEI printed with the applicable symbol, sym-· boIs, or record in error. After processing has been completed, the diagnostic message associated with that message code is printed. (Source Program Deck) /* EXEC PGM=IEWL //SYSPRINT DD SYSOUT=A //SYSLMOD DO DSNAME=&&LOADSET, SPACE=(1024, (50,20,1», DISP=(NEW,PASS), UNIT=SYSDA //SYSLIB DD DSNAME=SYS1.PL1LIB, DISP=SHR //SYSUT1 DO UNIT=SYSDA, SEP=(SYSLMOD,SYSLIB), SPACE=(1024,(200,20» //SYSLIN DD DSNAME=*.STEP1.SYSLIN, DISP=(OLD,DELETE) /ILKED When the system is generated, device names are assigned by the operating system and the installation, and the programmer chooses devices by specifying either the installation or operating system names. The programmer can choose which device to use for his data sets and can specify the name of the device or class of devices in the UNIT parameter of the DO statement. 46 /ISTEP3 EXEC PGM=*.LKED.SYSLMOD, COND=(C5,LT,STEP1), C5,LT,LKED» //SYSPRINT DD SYSOUT=A //SYSIN * DO (Data) /* tion 1. The preset tab positions are: 25, 49, 73, 97, and 121. (See the section "The Tab Control Table" for details of how to alter these values.) A numeric data field for list- or data- directed output will not be split over two lines when this can be avoided. A field which exceeds the residual space on the current line will begin a new line, and only if the new line cannot accommodate the complete field will it be carried over to subsequent lines. OBJECT PR03RAM OUTPUT Execution of the PL/I procedure shown in Figure 8 will produce the object time output in Figure 9. Figure 9 illustrates various forms of external data representation as produced by PUT statements employing the EDIT, LIST, and DATA keywords. It should be noted that the output of data fields to PRINT files by list- or data- directed techniques will automatically be aligned upon preset tab positions, the initial data field of a line being aligned upon the left margin, posi- This form of output is concerned with writing complete records, instead of one item at a time. One record is the contents of one variable. rhe external data representation is the same as the internal form; there is no data conversion. RECORDoriented output is described in 'Managing Data' • OUTPUT: PROCEDURE DCL OPTIONSCMAIN)~ A FIXED, B FLOAT, C FLOAT COMPLEX, D BIT(10), E CHAR (10), ARRAY(2,2)~ A,B = 12345~ C A+12345I~ D '1100111'B; E 'ABC"DEFG'; DO I = 1 TO 2; DO J ARRAY(I,J) = I+J; END; END~ 1 TO 2; PUT PAGE LIST('EXAMPLES OF LIST/DATA/EDIT OUTPUT'); LIST: PUT SKIPC2} LIST('LIST DIRECTED EXAMPLES:'); PUT SKIP(1) LISTCA,B,C,D,E); DATA: PUT SKIP(2) LIST('DATA DIRECTED EXAMPLES:'); PUT SKIP(1) DATA(A,B,C,D,E); PUT SKIP DATACARRAY); EDIT: PUT SKIP(2) LIST('EDIT DIRECTED EXAMPLES:-); PUT SKIP(1) EDIT(A,B,C,D,E) (F(10,2),E(~O,O,5),C(E(10,O,5»,X(5),2A); END; Figure 8. Example of PL/I Procedure Using STREAM I/O Job Processing 47 EXAMPLES OF LIST/DATA/EDIT OUTPUT LIST DIRECTED EXAMPLES: Q2345 1.23450E+04 ABC'DEFG 1.23450E+04+1.23450E+04I '1100111000'B DATA DIRECTED EXAMPLES: E='ABC"DEFG 'i ARRAY(l,l)= 2.00000E+00 ARRAY(1,2)= 3.000000E+00 ARRAY(2,1)= 3.000000E+00 ARRAY(2,2)= 4.00000E+00; EDIT DIRECTED EXAMPLES: 12345.00 12345E+00 12345E+00 12345E+00 Figure 9. 1100111000ABC'DEFG Example of LIST/DATA/EDIT Output to PHINT Files using the PUT Statement 2E~rator when an exceptional or error condition arises during the execution of a PL/I program, a message of the form IHEnnnI - text is printed. The first three characters IHE are standard and indicate a PL/I library message. The message number is specified by the digits nnn. The final character, I, is a system standard action code, indicating an informative message for the programmer. These messages are printed on an output data set which is specified by the SYSPRINT DD statement provided by the programmer. If the SYSPRINT DD statement is absent, the object time messages appear on the operator's console, except for the ON CHECK system action messages and the COpy option output, which are not printed at all in this case. rhe text of the message, which may consist of any number of characters, is separated from the I by one blank. PL/I input/output messages include the word FILE and the file-name at the start of the message, to assist in the identification of the file causing the error. If the statement number compiler option has been specified, each message will also contain IN STATEMENT nnnnn prior to AT location message. nnnnn gives the number of the statement in which the condition occurred. Messages are generated for two reasons: 1.. An error occurred for which no specific ON condition exists in PL/I. A diagnostic message is printed out and the ERROR condition is raised. 2. A'n ON condition is raised, by compiled code or by the library, and the action required is system action, for which the language specifies COMMENT as part of the necessary action. The complete list of object time diagnostic messages appears in Appendix G of this publication. 48 Messages A message is transmitted to the operator when the DISPLAY statement is specifiea in the PL/I program. The two forms in which an operator message may appear are as follows: 1. Without the REPLY option - the message is in the form of a character string specified by the programmer. 2. with REPLY option - the message is in the form of a character string specified by the programmer, but it 1S preceded by a two-digit code generated by the operating system. rhe operator must use this code as the prefix to his reply message. SYSTEM OUTPUT Diagnostic messages and completion codes are issued by the operating system, indicating coding errors found in job control statements and system macro instructions, and errors detected during processing by the linkage editor. The completion codes indicate conditions causing the control program to abnormally terminate execution of a job. For details of the system messages and completion codes, refer to the publication IBM System/360 0Eerating System" Messages, Completion Codes and Stora~ r:umE§.. To ease the work of the PL/I programmer, IBM has supplied cataloged procedures to assist in the compilation, linkage editor processing, and execution of PL/I source programs. The job control statements needed to invoke the procedures, and the deck structures used with the procedures, are described in the following paragraphs. In the examples given in this the operand is specified as: section, The cataloged procedure, PL1LFC, consists of the control statements shown in Figure 59 in Appendix E. PROC = cataloged procedure name but the 'PROC=' can be omitted if required. It is recommended that each installation review the procedures supplied by IBM, and modify them to obtain more efficient use of the devices available, to allow for installation conventions, to accommodate local changes to the compiler options, to alter the REGION fields to correspond to available storage, or to set block sizes for output data sets. Invoking the PL1LFC catalo~ed_E£2~~~~ Figure 11 shows control statements that might be used to invoke the procedure. r-----------------------------------------, I //COMPLM JOB PL1PROG,MSGLEVEL=1 I I 1 1 ~ ! ~ //STEP1 EXEC //PL1L.SYSIN DO PROC=PL1LFC I I I I I I * (Source Program Deck) 1 I JI IL _________________________________________ /* Figure 11. The cataloged procedure for compilation with deck output is PL10FC. The programmer invokes this procedure by using an EXEC statement with the first parameter containing the name PL10FC. An example is shown as follows: //STEP1 EXEC PROC=PL1DFC the PL10FC Cataloged Procedure: Figure 10 shows control statements that might be used to invoke the procedure. r-----------------------------------------, I /ICOMPIL JOB PL1PROG,MSGLEVEL=1 I I I I //STEP1 EXEC PROC=PL1DFC I I I I /IPL1D.SYSIN DO * I I I (Source Program) I I I I LI _________________________________________ JI /* Figure 10. Invoking the dure PL1DFC Cataloged Proce- The cataloged procedure for compiling and link-editing a PL/I source program is PL1LFCL. The programmer invokes this procedure by using an EXEC statement with the first parameter containing the name PL1LFCL. For example: //STEP1 //STEP1 EXEC PROC=PL1LFC EXEC PROC=PL1LFCL The cataloged procedure for compiling and link-editing consists of the control statements shown in Figure 60 in Appendix E. InY2~!gg __ ~h~ __fL1~E£~_£~~alQg~Q_f£2ce1Q£~~ Figure 12 shows the statements that might be used to invoke the procedure PL1LFCL. r-----------------------------------------, //JOBCLE JOB PL1PROG,MSGLEVEL=1 I 1 I I I I I I I I //PL1L.SYSIN DO * I I ] (Source program) I I I JI 1L _________________________________________ /* //STEP1 Figure 12. The cataloged procedure for compilation with object module output is PL1LFC. The programmer invokes this procedure by using an EXEC statement with the first parameter containing the name PL1LFC. An example is shown as follows: Cataloged Proce- Compilation and Link-Editigg The cataloged procedure, PL1DFC, consists of the control statements shown in Figure 43 in Appendix E. lrrY2~~~ Invoking the dure PL1LFC EXEC PROC=PL1LFCL Invoking the dure PL1LFCL cataloged Proce- Compilation, Link-Editing and Execution Another cataloged procedure, PL1LFCLG, passes a source program through three procedure steps - compilation. link-editing, and execution. The cataloged procedure is Job Processing 49 //STEP1 invoked by specifying the name PL1LFCLG as the first parameter in an EXEC statement. For example: //STEP1 EXEC specifinot be Figure 61 in Appendix E shows the statements that make up the cataloged procedure PL1LFCLG. 1!!YQls!!!g:_~h~_!:!:!1.LF£!:!~_~~e.12g:ed Procedure.:.. Figure 13 shows statements that might be used to invoke the procedure PL1LFCLG. Figure 62 in Appendix E shows the statements that make up the cataloged procedure PL1LFLG. 1nY2king _~h~_-f!:!1.1f1~-fe.~aIQged_Pr2~£~~ Figure 14 shows statements that might be used to invoke the procedure PL1LFLG. r------------------------~----------------, J ~ r-----------------------------------------~ I I I I I I I I //COMPLEG JOB PL~PROG,MSGLEVEL=l ~ I I I I //PL1L.SYSIN DD * I I (Source Program) I J I lI _________________________________________ /* JI //STEP1 Figure 13. EXEC PROC=PL1LFCLG, REGION. GO=xxxxK Invoking the Cataloged dure PL1LFCLG PROC=PL1LFLG, REGION. GO=xxxxK where xxxxK represents the REGION specification (leading zeros need not be specified). PROC=PL1LFCLG, REGION. GO=xxxxK where xxxxK represents the REGION cation (leading zeros need specified). EXEC J //jobname //STEPl JOB EXEC J J 1 I PL1PROG,MSGLEVEL=1 PROC=PL1LFLG, REGION. GO=xxxxK I I I I J parameters defining I the input data set I ] to the Linkage I lJ _________________________________________ JI Editor //LKEO.SYSIN DO Figure 14. Invoking the dure PL1LFLG Cataloged Proce- ProceLink-Editigg and Execution of Several separate Com.1&lations The cataloged procedure for link-editing and executing a previously compiled PL/I program is PL1LFLG. This procedure is invoked. by an EXEC statement with the first parameter containing the name PL1LFLG. For example: 50 Several programs can be separately compiled, then link-edited together and executed as one program. This is done by using the cataloged procedure PL1LFC for each individual compilation except the last, then using the procedure PL1LFCLG for the last, all within the same job. organizations used in the System/360 ating System are: The term "file," as defined for PL/I, may be equated for the most part with the system'360 operating system term "data set." However, there is not necessarily a one-to-one correspondence between the number of files being used within a program and the number of data sets being used. That is, a program may declare two files, ALPHA and BETA, both of which are concurrently open and both referring to the same data set. This may be effected in two ways: 1. When opened, both files ALPHA and BETA use the same TITLE option value, i~e •• they refer to the same DD statement. 2. Two DO statements are used, one for each file, and each nominates the same data set. From the above, it may be seen that the PL'I program does not itself nominate data sets directly. The TITLE option of the OPEN statement is employed to specify the name (ddname) of the OD statement to be associated with a given file; in turn, the 00 statement specifies its associated data set (dsname). Should the TITLE option be omitted from the OPEN statement. or should the file be opened implicitly by another I/O statement, a default TITLE is obtained from th~ file identifier; the initial eight characters, padded with blanks if necessary, are used. Oper- CONSECUTIVE INDEXED REGIONAL CONSECUTIVE organization permits only sequential access, while REGIONAL and INDEXED organization permit both direct and sequential access. The permitted combinations of data set organization, PL/I statements, access methods. etc. are detailed in Figures 15. 16, and 17. CONSECUTIVE ORGANIZATION In CONSECUTIVE organization, the data set consists of records whose placement within the data set is determined solely by the order in which they were initially added. Such a data set does not employ keys; records may be retrieved only in sequential order. Device support for CONSECUTIVE data sets includes magnetic tapes, card readers/punches, direct access storage devices, and paper tape readers. However, for UPDATE files, only direct access devices may be used. Both STREAM and RECORD I/O facilities may employ data sets of this organization. STREAM I/O is limited to this organization. If two or more files are assigned to the same data set or SYSOur class (via different DO statements) and are simultaneously open for sequential output, then~ if the PCP or MFT system is being used, the records in the files will be intermixed or the job will be abnormally terminated. If MVT is being used, the records will remain separate. This practice is extremely dangerous and is not recommended. The facility for reading BACKWARDS is available only for files with records in F,FB,FBS, or U format on 9-track magnetic tapes, or 7-track magnetic tapes recorded without the use of the data converter. If the data converter is used, only string records should be read BACKWARDS (Record formats are described later in this chapter.) There are three data set organizations which are supported by PL/I object programs. Specification of data set organization is made by means of an option within the ENVIRONMENT attribute, which is discussed further in Appendix B. INDEXED ORGANIZATION The organization of a data set determines the manner in which data is stored within the data set and the permitted techniques of accessing it. The PL/I In INDEXED organization. the data set consists of keyed records whose placement within the data set is determined by the value of the key. Since a key is associated with each record, direct retrieval, replacement, addition, or deletion of Managing Data 51 r-------T-------T-------------------------v-----·--r-------T--------------r-----T--------, IOrgani-IAccess I File Declaration I Istate- I Options IData IRecord I ModE~ ~zation I I I Iment I I Mgmt. I Format I ~-------+-------+------------~-----------+-------+-------+--------------+-----+--------~ I I J I [BUFFERED] I I I [BACKWARDS] 1 I I INPU'l~ I READ I I I I ~------------+-------+-------+--------------i IFIFBIFBSI I I I I I I WRITE I FROM IQSAM I I I t I IOUTPUT ~-------+--------------i I I I I I I I LOCATE I [SET] 1 I I I I I l·-------+-------+--------------i I UI VI VB I J I [BUFFERED] I I READ I [INTOIIGNOREI I IVSIVBS I I I I I I SET]] I I I I ICONSEC- SEQUEN-I[ENV I IUPDATE2~-------+--------------~ I I IUTIVE TIAL ICCONSECUI I I REWRITE I [FROM] I I I I I TIVE)] .------------+-------+-------+--------------+-----+--------i I I I UNBUFFERED I INPUT I READ I [INTOIIGNORE] I I I I I I [BACKWARDS] ~ I I I [EVENT] I I I J .------------+-------+-------+--------------~ I I I I I I IOUTPUT IWRITE IFROM [EVENT] I I I J r-------+-------+--------------iBSAM IFIUIV I I I ~ I I UNBUFFERED I I READ I [INTOIIGNORE] I I I I I I I I I [EVENT] I I I IUPDATE .-------+--------------i I I I I I I J I I I I REWRITE I FROM [EVENT] I I I ~-_-----~-------~------------L------------L-------~-------~--------------~-----~--------i I~ BACKWARDS is available only for records of F, FB, FBS, and U format. I I I [INTO I IGNORE I I I SET] I I 12 UPDATE is not available for records of VS and VBS format. ) I NO:!;!,:" The syntax notation used in this table is the same as that used in IB~ I I I I ._____________________________________________ JI IL__________________________________________ §y2:!:.!!!!~1§.Q_QE!!:~:!:.in9._§.y2~!!!, PL/I Ref·erenc~~!!!!e.!. .Figure 15. CONSECUTIVE Data Set Organization and Applicable Language Features records is possible, as well as se~uential access of such records. The keyed records of an INDEXED data set are located by means of several levels of indexes which are initially constructed when the data set is created. Keys for INDEXED data sets consist of character strings, 1 through 255 characters in length, defined by means of the DCB subparameter KEYLEN(described later in this chapter). Should the length of a character string key specified in a KEY or KEYFROM option differ from that specified by KEYLEN, it is truncated or padded with blanks to KEYLEN. Device support for INDEXED data sets is restricted to direct access storage devices. Basically, there are three areas an INDEXED data set: within Prime data area Overflow area Index area The prime data area is the area into which records are inserted during creation. 52 Subsequent addition of records" when using DIRECT access for UPDATE# may cause records to be moved from the prime data area to an overflow area, in order to keep the indexes in order. Access to records in an overflow area is slower than to those in the prime data area; accordingly~ the data set should be "reorganized" periodically (see: "Accessing of INDEXED Data Sets"). There are two types of overflow area: 1. a cylinder overflow area (a certain number of tracks per cylinder reserved during creation) 2. an independent overflow area, which requires special DD statement usage (see "Creation of INDEXED Data Sets"). The index area may be spread, physically, through the space allocated to the data set. There are two basic index types, the track index and the cylinder index; a third type, the master index, is used if the cylinder index becomes too large for efficient access. The track index specifies the highest key value for each track of a given cylin- r--------T-------r------------------------~------~---------T-------------~------~-------, 10rgani- IAccess I Ization I I File Declaration I Mode I statement I I I Options IData IRecord 1 IFormat 1 1Mgmt. I ~--------+-------+---------~--------------+------+---------+-~-----------+------+-------~ I [BUFFERED I I I I UNBUFFEREDJIINPUT I READ I 1 I I I I I I I I [KEYED] 2 I I I [INTO I SET4 I [KEYTOIKEYJI I IGNORE) I I IQISAM I I (SCAN) I ~--------------+------+---------+-------------+------i I [BUFFERED I I I WRITE IFROM KEYFROM I UNBUFFERED) I OUTPUT I I IQISAM SEQUEN- ENV I KEYED I ~---------+-------------~ (LOAD) TIAL (INDEXED) I I I LOCATE4 I [SET] KEYFROMI I I I I I r--------------+------+---------+-------------+------~ t I I [BUFFERED ~ I UNBUFFERED] I [KEYED] 2 1 I I [INTOISET4 I I [KEYTO I KEY] I I I UPDATE I I IGNORE] IQISAM I .---------+-------------~ (SCAN) I I REWRITE I [FROM] 4 I I I I t---------+-------------~ I I I I DELETE 1 I I I I I I I I I READ I I FIFB3 1 I I I I IINDEXED1~-------+---------+--------------+------+---------+-------------+------~ I I 1 I I I 1 I 1 [KEYED] I IINPUT I READ I I I I 1 I I I I I I 1 1 I I I I I 1 I I I I I I 1 I I I I KEY [EVENT] I I I I I I I I I I I I READ I 1 I INTO KEY [NOLOCK] I [EVENT] I 1 1 1 I I 1 I t---------+-------------~ IFROM KEYFROM I I I [EVENT] I BISAM 1 [EXCLUSIVE]IUPDATE~---------+-------------~ I I I REWRITE IFROM KEY 1 1 I I I [EVENT] I I IENV I DIRECT I (INDEXED) I [KEYED] I I I t--------------+------+---------+-------------~ I J 1 INTO I I WRITE5 I I I t---------+-------------~ I DELETE 1KEY [EVENT] I r---------+-------------~ I I I I I I 1 UNLOCK ~--------~-------~---------L--------------L------~---- _____ LI KEY _____________ LI ______ LI _______ ~ 11 INDEXED organization is supported only for direct access storage devices. ~ 12 For INDEXED SEQUENTIAL INPUT and UPDATE, the file attribute KEYED must be declared I if the KEYTO or KEY option on the READ statement is to be used. DIRECT access I implies KEYED. I3 1 Blocked records are not supported for UNBUFFERED files. I 14 Locate mode I/O operations are applicable to BUFFERED files only. I5 1 WRITE is ignored if NOWRITE is specified. I INot~ The synt:ax notation used in this table is the same as that used in IBM LISys~~ill/36Q_QE~fatin9-§y~~~ill, _______________________________________________________________________________________ J PL/I Reference Manual. Figure 16. INDEXED Data Set Organization and Applicable Language Features der; the cylinder index specifies the highest key value of each cylinder. The master index may be created (by specification of the NTM subparameter of the DCB parameter in the DD statement) when the cylinder index exceeds the specified number of tracks. Each entry in the master index points to a track within the cylinder index. Up to three levels of master index (addressing tracks within the next lowest level master index) may be created automatically. Records within an INDEXED data set are either "actual" (representing still valid data> or "dummy" (marked as deleted, and inaccessible to the user). Dummy records are recognized only when both of the following are present: 1. The DCB subparameter OPTCD DD statement used to create set. =L the in the data Managing Data 53 r---------T-------T-------------------------T--·----T-------T-------------T------T-------, IAccess I File Declaration I Mode ]State-, Options IData 'Record I IOrganiIzation I I , ,ment, ,Mgmt. ,Format I r---------+-------+-------------T---------·--+------+-------+-------------+------+-------~ ![BUFFERED] IINPUT /READ / [INTO'SET[KEYIBS~M2 I , [KEYED] 2 , , , TO] I IGNORE], I I r-----------+------+-------+-------------+------i I I I I (BUFFERED] ] I WRITE IFROM KEYFROM IBSAM I I JKEYED 'OUTPUT~-------+-------------i(LOAD) I I I I I ' I "LOCATE '[SET] KEYFROM, , I I l r-----------+------+-------+-------------+------1 I I I I I ' READ I [INTO] SET[KEYI I , I I I [BUFFERED] I I I TO] I IGNORE] I I ] ~ I I [KEYED12 'UPDATE~-------+-------------iBSAM2 I / / I , "REWRITE/ [FROM] , I I /SEQUEN-IENV .-----------+------+-------+-------------+------i I ITIAL /(REGIONAL(1) I 'UNBUFFERED I I I [INTO[KEYTO] I I I 1 I IREGIONAL(2) I J [KEYED] 2 I IGNORE] lBSAM I IINPUT IREAD I I IREGIONAL(3» , I I I [EVENT] , I I I ) r-----------+------+-------+-------------+------i I I I IUNBUFFERED IOUTPUTIWRITE IFROM KEYFROM IBSAM I I / I I KEYED I I I [EVENT] , (LOAD) I I / I .-----------+------+-------+-------------+------1 / I I I I' I [INTO[KEYTO] II IREG(1) / / I I / UNBUFFERED I I READ I IGNORE] I I and (2) : I I REGIONAL" I I I [KEYED12 I UPDATE I I [EVENT] I BSAM I F only I / / I / I / ] I I 1 I ~-------+-------------+-----------+------+-------+-------------+------iFIUIV / I / / / I J I I I / I I ' I I I I I I I , I I I I / , / I ~-------+-------------i /REWRITEIFROM [EVENT] IINPUT /READ I ,INTO KEY , [EVENT] l / , , / 'KEYED ~------+-------+-------------1 IFROM KEYFROM I I / I [EVENT] I .-----------+------+-------+-------------1 /INTO KEY IBDAM , / I JE N V ] I READ I [EVENT] I (BSAM: IDIRECT /(REGIONAL(1)/1 I ,[NOLOCK] /LOAD) ~-------+-------------i I I REGIONAL (2) I I ] I REGIONAL (3» / I WRITE I FROM KEYFROM i I I I [EXCLUSIVE] UPDATE I , [EVENT] I / I I [KEYED] ~------- +-------------i 1 I 1 IREWRITEIFROM KEY I I I I I I [EVENT] I / I I I I 1 I 1 1 I I I I I I I I I I / , I IOUTPUT/WRITE I / I I I J I I I / I I ! I / I J ~-------+-------------i I I DELETE I KEY [EVENT] I / I 1 ~-------+-------------i I IUNLOCK IKEY I I / IREG(3): I I ~---------L-------L-------------~-----------~------L-------L-------------L------L-------i 11 1 12 , / ~ REGIONAL organization is supported only for direct access storage devices. For REGIONAL SEQUENTIAL INPUT and UPDATE, the file attribute KEYED must be declared if the KEYTO option on the READ statement is to be used (DIRECT access impli~s KEYED). If the KEYED attribute is not declared, QSAM is used for REGIONAL(1) INPUT and UPDATE. I / 1 I , / / / The syntax notation used in this table is the same as that used in IBM / L _______________________________________________________________________________________ JI '§y~~~m/l£Q_opeEatin~_§ystem PL/I Reference Manual. I~Q~~: Figure 17. 2. REGIONAL Data Set Organization and Applicable Language Features A character whose value is (8)'1'B in the initial position of the record. Should either condition not apply, a given record is not recognized as a dummy (deleted) record. Should the OPTCD = L 54 subparameter be employed, the user is cautioned that unless care is taken to prevent the unintentional presence of such an initial character (for example, cecause of negative FIXED BINARY data), records may vanish from the data set. REGIONAL ORGANIZATION There are three types of REGIONAL data organization: REGIONAL(1), REGIONAL(2}, and RE3IONAL(3}. REGIONAL(1) and (2) support unblocked F-format records; REGIONAL(3} supports unblocked records of U, F, or V-format. In all tnree REGIONAL organizations, the data set consists of regions numbered consecutively, starting at zero. In REGIONAL(1) and (2), each region contains just one record. In REGIONAL(3), each region is a whole track, containing as many records as will fit onto the track. The actual number will depend upon the size of the records and the device characteristics. REGIONAL organizations support DIRECT access of records by directly locating the region in which the record is placed and then, if necessary, performing a sequential search for the specified record in the vicinity of the located regiono REGIONAL organizations also support SEQUENTIAL access of records. A major advantage of REGIONAL organization is that it permits program control over the relative physical placement of records. Accordingly, optimization of record access in terms of particular application requirements and device capabilities can be obtained by judicious programming. it takes the form of a character string which is actually written in the data set attached to tne record, and is known as the ~rded_!s§.y. The recorded key consists of the initial n characters of th~ source key. where n is the number specified in the DCB subparameter KEYLEN. If the source key specified in the KEY or KEYFROM option is not equal in length to the number specified by KEYLEN. the source key is either padded with blanks or truncated (on the right) before being written with the record as the recorded key or compared with existing recorded keys in the search for a particular record. The relationship between the portion of the source key which represents th~ region number of the record (i.e., the last eight characters of the source key) and the portion which constitutes the recordej key (i.e., the first n characters, where KEYLEN = n) should be carefully considered. Some possibilities are illustrated below. Note that all the examples refer to REGIONAL (2) or (3). In REGIONAL ( 1 ), there is no recorded key, and any characters in the source key other than the final eight are ignored. Source key of 16 characters; KEYLEN 8 9 8 16 r--------T--------, I I J ________ L ________ J L Characters 9 through 16 represent the region number; characters 1 through 8 are used as the recorded key. Two types of key are used with REGIONAL organizations: source keys and recorded keys. Source key of 12 characters; KEYLEN The §'Q.~f£~ __!s§'Y is a character string specified in the KEY FROM option of a WRITE or LOCATE statement or in the KEY option of a READ, REWRITE, or DELETE statement. In the WRITE statement, its purpose is to determine whereabouts in the data set a new record will be written; in the READ, REWRITE, or DELETE statement, its purpose is to identify the record which is to be read, rewritten, or deleted. The last eight characters of the source key (or all of it. if there are less than eight) represent the region number of the record. In REGIONAL(1), any additional characters in the source key are ignored. In REGIONAL(1}, the region number alone is sufficient to determine the location in which a record will be placed and to identify it for retrieval. In REGIONAL(2) and (3) (as will be explained below), a further means of identification is needed; 5 8 8 12 r----'T----T----l IL ____ LI ____ LI ____ JI Characters 5 through 12 represent the region number; characters 1 through 8 are used as the recorded key. Example 3: Source key of 8 characters; KEYLEN 8 8 r--------, I I l ________ J Characters 1 through 8 represent the region number; characters 1 through 8 are also used as the recorded key. Managing Data 55 Source key of 6 characters; KEYLEN 6 r------, 12 12 REGION L(1) Data Sets IL ______ JI Characters 1 through 6 represent the region number; characters 1 through 6 are padded on the right with blanks to make 12 characters, which are then used as the recorded key. Source KEYLEN key 16 10 3 r--T--------l IL __ LI ________ JI of 10 characters; 16 --, I __ J Characters 3 through 10 represent the region number; characters 1 through 10 are padded on the right with blanks to make 16 characters, which are then used as the recorded key. Source key of 16 characters; KEYLEN 1 6 the KEYTO option can only be guaranteed if the length of the KEYFROM value is equal to that specified by KEYLEN. 9 =6 A REGIONAL(l) data set consists of unblocked F-format records without associated recorded keys. The data set is divided into regions each of which is large enough to con~ain just one record, hence each region number corresponds to a relative record position within the data set. The location of a particular record can be determined by the source key alone. The final eight characters of the source key are the character-string representation of an unsigned decimal integer not exceeding 16777215, and may contain only the characters 0 through 9 and blank. If more than eight characters are given in the KEY or KEYFROM option, only the last eight are used; otherwise all characters are used. If the KEYTO option specifies a character-string variable of more than eight characters, the source key value returned is padded at the left with blanks; if it has fewer than eight characters, the value is truncated on the left without raising any condition. 16 r------T--r--------, IL______ LI __ LI __ ------1J Characters 9 through 16 represent the region number; characters 1 through 6 are used as the recorded key. Characters 7 and 8 are not used. From the above illustrations, it can be seen that it is optional whether the region number portion of the source key is included in the recorded key. Similarly, the KEY option may sp'ecify a source key longer than the recorded key, thereby causing a search for a key matching only the initial n characters of the source key, where n is defined by KEYLEN; this facilitates reading data sets created by other processors (e.g., COBOL, which has a different source language keying mechanism). SEQUENTIAL access of REGIONAL data sets will retrieve records in the order in which they are physically located in the data set. The recorded key will not affect the sequence, but can be obtained by use of the KEYTO option. Equality between the value specified by the KEYFROM option and that subsequently assigned to a character string by means of 56 A REGIONAL(2) data set contains unblocked F-format records with associated recorded keys. As in REGIONAL(1), the data set is divided into regions each of which will hold just one record. Unlike REGIONAL(1) however, in REGIONAL(2) organization a particular record will not necessarily occupy the relative position specified by the region number in the source key. When writing a new record in a data set opened for DIREcr access. the location in which the record will be written is determined as follows. A search is commenced at the beginning of the track containing the region number specified by the source key. The record is written in the first available position on that track or, if that track is full, on a subsequent track. The record maYI therefore, be written either before or after the specified region number, depending on the availability of space. The search for a vacant position can, however, be limited by the DCB subparameter LIMCT. (The use of LIMCT in REGIONAL(2) is described below.) Similarly, when accessing a record in a REGIONAL(2) data set opened for DIRECT access, the record is located as follows. REGIONAL(3) Data Sets Commencing at the beginning of the track containing the specified region number, a sequential search is made for a record whose recorded key matches the source key (truncated or padded as required). Again, tne extent of the search can be restricted by the use of the DCB subparameter LIMCT. A REGIONAL(3) data set may contain unblocked records of U,F, or V-format, with associated recorded keys. The data set is divided into regions, but unlike REGIONAL(1) and (2), in REGIONAL(3) a region is a whole track on the directaccess device. The region number in the source key thus corresponds not to a relative record position, but to a relative track on the device. The number of records within any region will depend on the record sizes and the device characteristics. The DCB subparameter LIMCT limits the number of regions which are to be sequentially searched. In REGIONAL(2), the search commences at the beginning of the track containing the region number specified by the source key, and continues to the end of the track containing the region whose number is given by: region number specified in source key LIMcr value - 1 When writing a new record in a data set opened for DIRECT access, the location in which the record will be written is d~ter mined as follows. A search is made for an available position, commencing at the start of the track whose relative position is represented by the region number in the source key. The record will be written in the first available position on that track, or, if that track is full, on a subsequent track. The search can, however, be limited by use of the DCB subparameter LIMCT. (The use of LIMCT in REGIONAL(3) is described below.> Similarly, when accessing a record in a REGIONAL(3) data set opened for DIRECT access, the record is located as follows. Commencing at the beginning of the track whose relative position is representEj by the region number in the source key, a sequential search is made for a r~cord whose recorded key matches the source key (truncated or padded as required). Again, the extent of the search can be restricted by use of the DCB sUbparameter LIMCT. + Each track of a device holds ten records. The final eight characters of thE~ source key represent the number 17. LIMCT has the value 15. The sequential search will commence at the start of track 2 (since region number 17 is on this track) and continue through to the end of track 4 (since region number 31u given by source key region number + LIMCT value - 1, is on track 4). It can be seen from the foregoing that, in REGIONAL(2) " the nearer a record is to the beginning of a track, the more quickly can the record be accessed. REGIONAL(2) organization does provide a degree of device independence. Provided that access to the data set is DIRECT and that all keys are unique, the programmer does not need to modify his algorithms in consideration of the device type. If, however, a data set created or updated by DIRECT access is subsequently read by SEQUENTIAL access, then the order in which the records are read will vary slightly according to the type of device. The DCB subparameter LIMCT limits the number of regions which are to be sequentially searched. In REGIONAL(3)~ ~ach region is a track, hence the value s~eci fied in LIMCT qUite simply specifies the number of tracks which are to be searched. The final eight characters of the source key are the character-string representation of an unsigned decimal integer not exceeding 32767, and may contain only the characters 0 through 9 and blank. If more than eight characters are given in the KEY or KEYFROM option, only the last eight are used as the region number; otherwise all characters are used. The final eight characters of the source key are the character-string representation of an unsigned decimal integer not exceeding 16777215, and may contain only the characters 0 through 9 and blank. If more than eight characters are given in the KEY or KEYFROM option, only the last eight are used as the region number; otherwise all characters are used. If the KEYTO option specifies a character-string variable of different length from that of the recorded key, the recorded key returned is padded with blanks at the right or truncated at the right; no condition is raised. If the KEYTO option specifies a variable of length different from that of the recorded key, the recorded key returned is padded with blanks at the right or truncated at the right: no condition is raised. char~cter-string I Note~ The EVENT option should be used with caution when v- or U-format records are being added to a REGIONAL(3) data set. Managing Data 57 Dummy Records within RE3IONAL Data Sets Records within a REGIONAL data set are either "actual" (representing valid data> or "dummy" (inserted during creation or when actual records are deleted>. Dummy records vary in format according to the REGIONAL type and, in the case of REGIONAL (3), according to the record format as well. See also the section "Accessing of REGIONAL Data Sets." REGIONAL(1) - initial character of record has the value (8) '1'B; the remainder of the record is undefined. REGIONAL(2) - initial character of recorded key has the value (8)'1'B, the remainder of the key being undefined; the initial character of the record is an internal representation of the sequence number of the record within a track, the remainder of the record being undefined. REGIONAL(3) - if F-format records, as for REGIONAL (2). If U- or V-format records, the initial character of the key has the value (S)'1'B, the remainder of the key being undefined. If V-format, the control bytes of the record are valid, but the remainder is undefined. personnel familiar with requirements at a given installation (see Appendix E). Also, use of cataloged data sets will reduce the amount of configuration knowledge required. S~ECIFYING DATA SETS Data sets in the operating system can be specified by parameters in the DO statement. This section describes the use of such DD statements. The DO statement provides the functions: following 1. Naming of the data set (DSNAME) 2. Extent allocation, i.e., device and space (UNIT, VOLUME. SPACE, LABEL) 3. Disposition (DISP, SYSOUT) 4. Data set attributes (DCB) The functions are summarized in the following paragraphs. For full details refer to the publication IBM __ £Y~~~Ll~Q Qfera~in~~yste~L_~QQ_fQgifQ!_1~gg~~~· DATA SET DEFINITION ------------------Whereas the attributes of a file (which may be considered to be a "data set usage") are declared within a PL/I program, the attributes of ~ts associated data set are specified by means of the DD statement or the ENVIRONMENT attribute. (For the format of the options available in the ENVIRONMENT attribute, refer to Appendix Be) In this manner a large degree of device independence is achieved. rhe DO statement permits the specification of object time device type, unit assignment, record format" etc. Since PL/I itself does not define data set attributes, there are no default attributes, witn the exception of PRINT files which have a default of the V-format, with unblocked records of 129 bytes. Information regarding specific data sets is communicated to the Operating System via DD statements. It is not, however, necessary for each programmer to understand the details of DD statements: in some instances the use of cataloged procedures will allow the programmer to be oblivious of the particular I/O device configuration. These cataloged procedures will be prepared by 58 The DSNAME ~arameter allows the programmer to specify the name of a newly defined data set or to refer to a previously defined data setu rhis parameter should De supplied for all but temporary data sets. Note: Data set names that begin with the letters SYS and have a P as the nineteenth character of the name should not be used. Data sets with such names are created for temporary data sets on PCP systems, but not for temporary data sets on MVT or MFT systems, and are deleted when the IEHPROGM utility is used and the SCRATCH utility control statement is specified with the VTOC, PURGE, and SYS keywords. The UNIT parameter allows the programmer to state the type and quantity of input/output devices to be allocated for the data set. The type of unit is specified by a symbol that refers to a collection of one or more devices. The VOLUME parameter is used to specify the identification of the volume on which the data set resides. Other information includes instructions to the system for volume mounting actions. The SPACE parameter permits the specification of the type and amount of space required to accommodate the data set on a direct-access device. This space is obtained either from the volume designated in the VOLUME parameter or from the volume mounted on one of the devices specified in the UNIT parameter. The LABEL parameter specifies the type and contents of the label or labels associated with the data set. The disposition (DISP) parameter indicates the current status of the data set and what is to be done with it when the step is completed. Parameters are provided to delete the data set, to pass the data set to another step within the same job, to enter the data set name into the catalog, or to remove the data set name from the catalog. DISP must be carefully specified when the EXCLUSIVE attribute is used. This attribute protects records against access by different tasks in the same program. provided the references to a data set are made by means of the same file. DISP=OLD ensures that a data set is used by one job onlYi DISP=SHR allows a data set to be used by different jobs. If a data set is to be updated by more than one job, DISP=SHR must got be specified. The system output (SYSOUT) parameter is used to schedule a printing or punching operation for the data set described by this DD statement. The DCB parameter allows the programmer, at execution time, to complete information declared for his file at the time of compilation via a FILE declaration or OPEN statement. File Att,ributes._and the DD Statement The DCB parameter of the DD statement permits object-time definition of various data set characteristics. Whereas the other DD statement parameters deal chiefly with the physical residence of a data set, or aid in data set identification. the DCB parameter may specify information required to process the data records themselves. Information supplied to the object program by means of the DCB parameter can only De "additive" information, i.e., it may not override information already established for a data set during compilation. DCB subparameters which specify DCB fields already completed during compilation (by means of the file declaration or OPEN attributes) will be ignored. DCB sUbparameters which may be specified for STREAM-oriented I/O are listed in Figure ~8. The DCB subparameters which may be specified in the PL/I language for this mode of I/O are: RECFM BLKSIZE LRECL BUFNO The first three are specifiable by means of the record option of the ENVIRONME~T file declaration attribute (see Appendix B)i the fourth is specified by means of tne BUFFERS option. In addition, the LINESI~E attribute of the OPEN statement for PRINT files may specify the initial three subparameters to be established by default; see the section called "PRINT Files." DCB sUbparameters which may be specified for RECORD 1/0 include those available for STREAM I/O. Additional subparameters are listed in Figure 19. Data set information supplied within the PL/I program may not be overridden by DD statement parameters, or data set label information (in the instance of directaccess devices, the DSCB). Accordingly, files which are to remain open to objecttime definition of data set characteristics must not specify these characteristics within a program. (It should be noted that data sets which are defined by a "DD *" statement are supplied with full DCB subparameters by the Operating System.) Data control blocks generated by the PL/I "open" process at object time are of a format which allows complete device-type independence when applicable. During various executions of a program, a file may be associated with a card reader, paper tape, magnetic tape, or a direct-access device. Managing Data 59 r---------T------------------------------------------T----------------, Specifies I PLiI Option I I Keyword I ~---------+------------------------------------------+----------------~ I BLKSIZE I Maximum, or fixed, number of bytes per I ENV (Record) I I I physical record (block) I LINESIZE I ,---------+------------------------------------------+----------------~ I LRECL I Maximum, or fixed, number of bytes per I ENV (Record) I I I logical record I LINESIZE I r---------+------------------------------------------+----------------~ I RECFM I Record format and characteristics (usage I ENV (Record) I I I of printer/punch control character) I LINESIZE I I I I I I PRINT r---------+------------------------------------------+----------------i I BUFNO I Number of buffers for physical record I ENV (BUFFERS) I I I transmission I I r---------+-------------------------·-----------------+----------------~ I CODE I Paper tape: code in which the data was I J I I punched I J r---------+------------------------------------------+----------------~ I DEN I Magnetic tape: tape recording density I I .---------+------------------------------------------+----------------1 I TRTCH I Magnetic tape: tape recording technique I I I I for 7-track tapes I I t---------+------------------------------------------+----------------~ I MODE I I Card reader or punch: mode of operation, I I column binary or EBCDIC I I I I ( 0, 1, 2, or 3) I r---------+------------------------------------------+----------------1 I STACK I Card reader or punch: stacker selection I I t---------t-------------------------------·-----------+----------------i I PRTSP I Spacing of printer between each line I I I t---------t------------------------------------------+----------------i I OPTCD I Optional data management services and I I IL_________ I __________________________________________ data set attributes I ________________ j I ~ Fig~re 18. ~ DCB Subparameters for STREAM 1/0 r---------T-------------------------------·-----------T----------------, I Applicable J I I I Keyword I Specifies I Organization I I REGIONAL I ( 2) and (3) I r---------+------------------------------------------+----------------1 1 KEYLEN I Number of characters in recorded key I INDEXED I I I I I J r---------+------------------------------------------+----------------~ I LIMcr I Maximum number of records or tracks I REGIONAL ) I I to be searched I (2) and (3) I t---------+------------------------------------------+----------------~ I RKP I Relative key position within record I INDEXED I r---------+------------------------------------------+ ----------------~ I NTM I Number of tracks in cylinder index I INDEXED I I I per master index entry I J r---------+-------------------------------·-----------+----------------i I CYLOFL I Number of overflow tracks in each I INDEXED J I I cylinder I I r---------+------------------------------------------+----------------i I DSOR3 I Creation of INDEXED or I INDEXED I I I REGIONAL data set I I I REGIONAL I I ( 1) , (2), and (3) I t---------+-------------------------------·-----------+----------------~ I NCP I Number of channel programs allocated I All I LI ________________ JI IL_________ LI __________________________________________ to a file Figure 19. 60 Additional DeB Subparameters for RECORD I/O The format of the DCB subparameters is given in the following paragraphs. Refer to Appendix B for the format of the ENVIRONMENT option. RECORD FORMAT INFORMATION The notation used in the format descriptions of record format is interpreted as follows: Upper case letters and numbers must coded by the programmer exactly shown. be as Lower case letters represent variables for which the programmer must substitute specific information or specific values. Items or groups of items within brackets [] are optional. They may be omitted at the programmer's discretion. A logical OR sign of option. ~ indicates a choice The PL/I programmer may access data sets which consist the following types of record: create and of one of Fixed-length (F-format) records Undefined-length (U-format) records Variable-length (V-format) records whichever record type is used, data is transmitted to and from main storage, and written on external storage in blocks. A block is considered to be either the data between two interrecord gaps in the case of magnetic storage devices such as disks and magnetic tape, or the number of bytes which can be transmitted to or from a unit record device, such as a line printer or card reader, in one input/output operation. separate block. The interrecord gap between blocks delimits undefined-leng~h records when held on an external s~orage medium, such as magnetic tape or disk. Variable-Length Records: A variable-length (V-format) record consists of a four-byte control field containing the number of bytes in the record# including the control field, followed by bytes containing data. A variable-length record is transmitted in a block formed by one or more such records. The length of the block depends on th~ number and length of consecutive variablelength records which can be accommodated within the maximum block size specifieo. The block itself contains a four-byte length field to determine its actual length, including the control field. Variable-length records can also be specified as ~~nned eVS-format or VBS-format) records. Spanned records are written over block boundaries in order ~o enable maximum-length blocks to ce used in conjun~tion with variable-length records, thereby permitting efficient use of external storage. A spanned record is a logical record which can be divided into segmen~s which are written on separate consecutive blocks. Each segment contains a four-byte control field to indicate the length of the segment, including the control field, and a flag byte to designate a segment as th~ first, intermediate, or last segment of a logical record which spans blocks. If a complete logical record does not span blocks, i.e., it is contained entirely within one block, it is designated as the last or only segment of the logical record. Spanned records are created and retrieved automatically, and their use in no way affects the programmer. Data sets containing spanned records must be CONSEcurIVE. They can be opened as INPUT or OUTPUT files, but not as UPDATE files. Fix~d-~eB~_E~2££~~ A fixed-length (F-format) record consists of a predetermined number of bytes, and is transmitted in a block containing one or more of these records. The length of a block containing fixed-length records is an exact multiple of the record length used. If unblocked records are specified, each record is transmitted and stored as a separate block. Undefined-Lenqth __ Recor~s~ An undefinedlength (U-format) record simply consists of a string of bytes containing data. Each record is transmitted or stored as a Block Size BLKSIZE=nnnnn: the decimal integer specified must not exceed 32,760, and may be limited by the device used, such as a unit record device. Blocks to contain V-format records must exceed the maximum record length by four bytes, for control purposes. Blocks to contain VS- or VBS-format records may be shorter than the maximum record length. Managing Data 61 LRECL=nnnnn: the decimal integer specified must not exceed 32,760 bytes for Fformat records, and 32,756 for Vformat records. The LRECL subparameter specifies the length of fixed-length records, and the maximum length of V-format, VS- and VBS-format records. It is not specified for U-format records for which the maximum length is 32,760 bytes. If not specified for the v-, VS-, or VBS-format, or F-format records, the BLKSIZE specified is assumed. For VS-, VBS- or V-format records, a four-byte control field must be included in the LRECL quantity. An extra byte must be added for all record formats which include a printer/punch control character. This includes all PRINT files, which use ASA printer control characters. Note that for INDEXED data sets which contain blocked records, if RKP=O the value of LRECL must include the number of bytes required for the recorded key. RECFM= U [T][AIM] [S] [B] F [B] [S] [T] [A I M] The record follows: [T] [AI V M] format is specified as U: Undefined-length records V: Variable-length records F: Fixed-length records The additional subfields are indicated by the following: B: Blocked records S: S: 62 (F-format records only) Standard: no blocks of a length less than the specified blocksize, except possibly the last, are present in the data set (V-format records only> Spanned records: variable-length records can span maximum-length blocks. A spanned record is written on one or more consecutive blocks. The length of the spanned record can exceed the length of the maximum-length block. For variable-length VS-format records the maximum block size must always be stated. VSformat records that exceed the maximum block size are segmented, and the segments are placed in consecutive blocks. Each block can contain only one record or segment of a record. For example, if a record format is specified as VS(SO,200), an ENV or DeB record that includes 180 bytes of data will appear in the data set as two blocks of 80 bytes (S control bytes and 72 data bytes) and one block of 44 bytes (8 control bytes and 36 data bytes). Varying-length VBS-format records are similar to VS-format records except that they are blocked, that is, each block contains as many complete records or segments of recoris as it can accommodate; each block is substantially the same size, although there can be a variation of up to four bytes, since each segment must contain at least one byte of data. For example, a block might contain the last segment of one record, one or more complete records, and the first segment of another record. T: Track OverflowD Track overflow is a feature of System/360 operating system which can be incorporated at system generation time; it requires the record overflow feature on the direct access storage control unit. Track Overflow allows a record to overflow from one track to another. It is useful in achieving a greater data packing efficiency, and allows the size of a record to exceed the capaci ty of a track. Note: Track overflow is not available for REGIONAL(3) data sets with U- or V-format records or for INDEXED data sets. A: ASA printer/punch control characters are present within the records M: Machine code printer/punch control characters are present within the records The following figures various record formats: illustrate the r--------, If the file is a PRINT file, the initial byte of the data portion of each logical record is reserved for an ASA printer control byte. 1________ Data J1 L U-Format Record r--------, 1________ Data J1 L F-Format Record r--------T--------, r--------, Blocked records are not accepted from paper tape. Fixed-length records on paper tape have a fixed number of characters after translation; the number of characters before translation is not fixed. 1________ Data 1________ Data J1••• 1 Data J1 L L________ ~ F-Format (Blocked) Record r--T--T--------, IC"IC Data JI 2 1________ L__ J. __ ~ Use of the Various Record Formats in STREA~ I/Q--------------------------------- V-Format Record r--T--T--------T--T--------, r--T-------, IC,,/C Data LIC Data J/ ••• IC Data JI 2 L1________ 2 L1_______ 2 Ll ________ L __ __ __ L__ ~ V-Format (Blocked) Record r--T--T----------~ r--T--T------, I IL __________ J1 L __I__ 1L __ J.I __ L1______ 1 .JI IC~IC2J Record 1 I ~ r--T--T--------, 1L __ C" 1__ C2 1________ Record 2/J ~ ~ Ic~lc2IRecord/ r--T--T--------, 1L __ Cl'I 1__ C2 1________ Record 31J ~ ~ VS-Format (Spanned) Records r--T--T------T--T------, IC1lC2]RecordlC2lRecordl 1__ 1__ LI ______ 1 I __ J.1.2 L ______ .JI ~ ~ r--T--T----------------l Record 2 lIC~IC21 __ __ ________________ J] ~ ~ r--T--T------T--T------, I C!lIC 2 IRecordIC 2 )Record] 2 I __ LI ______ 3 lI __ 1__ LI ______ J1 ~ ~ VBS-Format (Blocked Spanned) Records The control field C. (four bytes) specifies the total byte count of the block (including C~); the field C2 (four bytes) specifies, for each logical record, the byte count of the logical record (including C2 ). In the figure depicting spanned (VS-format) records, the field C2 contains the number of bytes including C2 , in the segment of a spanned record that is written on a particular block. Field C2 also contains a flag to indicate the relative position of any segment of a spanned record within a logical record which is written on one or more blocks. It designates a segment as the first, intermediate, last, or only segment of a record. The flag is set and used automatically when this type of record format is specified. The three available record formats, undefined, variable-length, and iixe3length, must each be considered for its application to the features of STREAM I/O. The following points should be consijercd when making a choice for OUTPUT files. Variable-L~~~~ Rec££~~~ The variab12length record format is the most versatile of the three available formats. In order to prevent the output of possible 'noise' records, i.e., records of less than the System/360 operating system standardizei minimum length, the records for output files are padded to contain at least ten data characters. With the addition of tne eight bytes required for the control fields, this gives a total of 18 data characters. Accordingly, LINESIZE should not specify a value less than 10 (9 for PRINT files, because a control character is required) • Fixed-Le~RecorQ~~ For output files-as the printing options/format items have the ability to truncate a record (line), each record is padded with blanks when the following record is prepared for output. Blocked output is not supported on unit record devices, where each logical record begins on a new card or line. For example, specification of recordsize=20, blocksize=80 for a card punch will result in only the first 20 columns of each card being punched. If these cards are then read in, the stream will contain 60 blank characters between each of the original records. Also, the length of logical records should not exceed the physical size of each unit record, as the excess characters will be truncated without notification. Managing Data 63 Use of the Various Record Formats in RECORD I/O Data transmitted by a single RECORD I/O statement is always contained within a single record, the size of which should be large enough to hold the data aggregate being transmitted, yet small enough to conform to device restrictions on the length of records which may be transmitted. Determination of the record length required for the various formats of data aggregates may require the information available in the section "Structure Mapping" in Appendix C of this publication; similar calculations are required for determination of space required for array data aggregates. It should be noted that when a data aggregate is moved into a record buffer, or transmitted immediately from the area in which the data aggregate is stored, no "padding bytes" are added before or after those bytes defined by the aggregate (or string). The current length of a variablebit string will be such as to terminate the s~ring on a byte boundary. Another consideration affecting the transmission of data aggregates is the fact that the implementation includes locate mode I/O. This allows data to be processed in the input/output buffers. Therefore a programmer who is creating files to be read using READ statements with the SET option should bear in mind that: 1. 2. The first byte in a block read from a file will be aligned in the buffer on a doubleword boundary. If any data within any record in the block has an alignment requirement, this requirement must be preserved in the buffer when the record is read in. For all record formats, this first byte is, with one exception, the first byte of data in the first record of the block. The exception is for FB-format records in an INDEXED file where RKP=O; here the first byte of the key of the first record is aligned on the doubleword boundary. The following information, if present, precedes this double word boundary: 1. Keys for F-format INDEXED files or for REGIONAL files. 2. Control fields for records. V- and VB-format The user must be aware that, for the subsequent records in the buffer. the presence of keys and control fields will affect the alignment of the data elements in these records. 64 There are several constraints regard~ng record format in RECORD I/O which depend upon the data set organization and the manner in which it is accessed. CONSECUTIVE Records: V-, VB-, VS,- and VBS-format data sets may not be read BACKWARDS. INDEXED Records: Only records are available. F- REGIONAL(1) and (2) Records: records are available. and FB-format Only F-format REGION L(3) Records: Record formats U,F, and V-are available;-i.e., records cannot be blocked. Additionally~ there are various overheads which apply to the use of different formats within different data s~t organizations. The choice between BUFFERED and UNBUFFERED for SEQUENTIAL files may depend upon the time and space overheads outlined, as may the choice between tne record formats U and V for REGIONAL(3) data sets. In the following details, the term "hidden buffers" refers to work buffers allocated by the object program library to provide special areas for the actual transmission of records to and from the data set, even though the file is declarea UNBUFFERED or DIRECT. UNBUFFERED access of CONSECUTIVE data sets employs hidden buffers if V-format records are used, in order to handle tne V-format control bytes. An INDEXED data set always requires hiaden buffers in order to handle a special 10 byte control field. A REGIONAL data set accessed sequentially, and declared KEYED, requires hidden buffers (except for REGIONAL(1» to handle both the key and the record, which must be transmitted to and from contiguous storage areas. Use of Spanned Records The blocksize (BLKSIZE) used for spanned records can be selected independently of the record lengths likely to be encountered. It should be chosen with regard to attaining efficient use of external storage combined with efficient use of processor-I/O overlap. For instance, the block size seleGted for use on a 2311 disk store should be the correct part of one track, to ensure that the entire track is used and that efficient processing is achieved. Chained Scheduling When READ SET is used with spanned records, each record is built up from its segments in an additional area (buffer) supplied by the PLiI library, and the pointer is set to address this area; the record is not processed in the data management buffer. Similarly, with LOCATE, a record for output is built up in a library area before being passed to data management for segmentation and transmission. Consequently, the advantage gained by using locate mode is lessened if the records are spanned .. OPTCD=C Specifies chained scheduling, which improves input/output performance by reducing the time required to transmit records to and from external devices. If this option is specified with QSAM, it is recommended that at least three buffers are specified for the file: with BSAM, the number of channel programs should be at least three. If BSAM or QSAM are used, then chained scheduling will not be used for INPUT or UPDATE with U-format records. BUFNO=n; the decimal constant must be less than 256. If a file is declared BUFFERED, but the number of buffers is not specified or is specified as zero, the number is assumed to be 2. Performance is not necessarily improved by specifying a large number of buffers. Generally, the use of more than two gives little improvement. In some circumstances, however, more may be required; for example, chained scheduling requires at least three. CODE=IIFIBICIAITIN. where the codes fy: speci- I: IBM BCD perforated tape and transmission code (8 tracks) F: Friden (8 tracks) B: Burroughs (7 tracks) C: NCR (8 tracks) A: ASCII (8 tracks) T: Teletype (5 tracks) N: No conversion (F-format recoras only> If no code is specified, I is assumed. NCP=n: the decimal constant must not exceed 99. Specifies the number of channel programs allocated to the file when it is opened. The number of incomplete input/output operations may not exceed the number of channel programs. This option is available only for DIRECT access to INDEXED data sets or for UNBUFFERED SEQUENTIAL access to CONSECUTIVE or REGIONAL data sets. The default value assumed if the option is not specified is 1. An attempt to exceed the appropriate number of incomplete input/output operations will have one of two results. For UNBUFFERED SEQUENTIAL access to CONSECUTIVE or REGIONAL data sets, the ERROR condition will be raised. For DIRECT access to an INDEXED data set, the operations, will be queued until a channel program becomes available. DEN=011121 3 r-------T-------------------, I I Bytes per Inch I I DEN ~---------T---------~ 1 Value I 7-track I 9-track I ~-------+---------+---------~ I 0 I 200 I I I 1 I 556 I I I 2 I 800 I 800 I IL _______ 3 1600 LI _________ LI _________ JI The density assumed, if none is specified, is: 7-track 9-track (one density> 9-track (dual density> 200 800 1600 Managing Data 65 Conversion (Magnet!£-1~e after printing each line; a value of 3 will cause 2 blank lines to appear between each printed line. - 7-track) TRTCH=CIEITIET C: Data conversion feature is used E: Even parity T: Translation from BCD required ET: (Both E and r, to This parameter is ignored if the record format uses ASA control characters. EBCDIC above) This subparameter is required only for 7-track magnetic tape data sets. Use of a tape recording technique other than TRTCH=C restricts the character set in which data can be written if it is subsequently to be reread and result in the same bit-configuration in storage. In PL/I terms, for STREAM and RECORD iqput/output of character strings or pictured data, acceptable modes are TRTCH=CIT (with TRTCH=ET acceptable if characters are restricted to the 48-character set). For RECORD input/output of arithmetic data, TRTCH=C must be used. OPTCD=U If a printer has the universal character set feature~ the TRANSMIT condition is normally raised when an invalid character is passed to the printer. Specifying OPTCD=U suppresses the condition. Either way, a blank character is printed. op~rCD=W W: Perform write validity check when writing on a direct-access device. MODE=CIE C: Column binary card images E: EBCDIC card code op~rCD=L STACK=112 Specifies that records within an INDEXED data set are to be recogniz~d as deleted if the initial charact~r (byte) of the record has the valu~ (8)'1'B. 1: All cards read or punched are to be fed into stacker po~ket 1 2: All cards read or punched are to be fed into stacker pocket 2. Stacker pocket 1 is assumed if neither is specified. PRTSP=OI11213 Specifies spacing of 0 through 3 lines 66 KEYLEN=n Specifies the number of characters to be written, or retrieved, a~ the recorded key of records in data sets of the INDEXED or REGIONAL(2) and (3) organizations. Note that this value is fixed during data set creation, and that all records within a data set will have keys of the same length~ the maximum length being 255 characters. LIMCT=n Limits the extent of the search through a REGIONAL(2) or (3) data set beyond the region number specified in the source key. If LIMCT is not specified, the search for a particular record, or for space to add a new record, will continue from the specified region to the end of the data set. In RE3IONAL(2) LIMCT specifies records, but the search will continue to the end of the track containing the record whose region number is given by: source key region no. + LIMCT - Specifies the number of tracks within a cylinder index which are to be filled before a master index entry is to be created. It also specifies the number of tracks within a master index (of which there may be three levels), which. when exceeded, will cause an entry in the next higher master index level. Such a facility is advantageous for large data sets, in order to avoid extensive serial searches through large low-level indexes. The maximum value for n is 99. Note that the OPTCD subparameter list must include the "M" option in order to create master indexes. 1 Independent Overflow Area In REGIONAL(3). LIMCT specifies tracks: the number of tracks searched will be the number specified by LIMCT. OPTCD=I Specifies that an independent overflow area is to be used and must be defined in a separate DD statement. RKP=n Keys for INDEXED records may be separate from or embedded in the records. RKP=n specifies the position (n) of the first byte of the key relative to the beginning of the record (byte O). RKP=O implies that the key is not embedded. Note that n is always 1 less than the byte number of the first character of the key; that is, if RKP=1 then the first character of the key is in byte 2. Embedded keys obviate the need for the KEYTO option for sequential input, but not the KEYFROM option for output (the data specified by the KEYFROM option may be the embedded key itself, however). Unblocked records always have a separate key (recorded key) attached to the record. even when there is already an embedded key; such records will therefore require double the space for key information. The maximum value for n is {recordsize keylength}. Cylinder Overflow Area OPTCD=Y CYLOFL=n Specifies number of tracks within each cylinder to be reserved. during creation, for overflow records. If an independent overflow area is requested (via another DD statement), a cylinder overflow area need not be specified. The maximum number of such tracks is 99, but the limit varies with the particular device: there must be at least one track on a given cylinder to hold the track index, and one to hold prime data. DSORG=IS\DA IS: specifies that an INDEXED data set is being created OPTCD=M NTM=n DA: specifies that a REGIONAL set is being created Managing Data data 67 be accommodated within the existing record and block size. For example, a PRINT file declared with V-format records with a maximum length of 60 bytes, a block size of 69 bytes, and opened with a LINESIZE of 60 bytes may not be reopened with a LINESIZE of 100 bytes, as this will raise the UNDEFINEDFILE condition. To avoid this, declare the file explicitly with a maximum record length and block size large enough to accommodate the increased LINESIZE. The block size should exceed the LINESIZE by at least 9 bytes. If the record length is not declared explicitly, it is set to the length specified in LINESIZE when the file is first opened. Declaration of the PRINT attribute for a file causes the initial data byte within each record to be reserved for an ASA printer control character. These control characters are set by the PAGE, SKIP, or LINE options and format items. Unless overridden by these options or format items, the printer control character is set for single spacing. rhe following control characters are used: Page eject Single space Double space Triple space Suppress space 1 b 0' + All these characters cause the spacing action to occur before printing the g~ven record (it should be noted that a record is, in System/360 operating system, a line). The ASA control characters for 'skip to channel n' are not employed. It is possible to use them, however, by specifying in the DD statement that the ASA character is present, but nQ~ declaring the file to be a PRINr file and not specifying record format information in the ENVIRONMENT attribute: in this case, the initial byte of each record is available to the program. Also, by the above means, it is possible to use the initial byte for printer control if the RECFM subparameter specifies the use of machine carriage control characters oy the letter M. While a PRINT file is always an output file, it is possible to read such a file, but not as a PRINT file. This is effected simply by-not declaring the file as PRINT, and opening it for INPUT: the initial data byte of each record in the data set will then be available for inspection. PRINT files, since they have a default LINESIZE of 120 characters, need not have any record information specified for them. The complete default record information will become: I When the SYSPRINT file is opened, the PL/I program automatically positions the file output at the start of a new physical paqe.. A blank page will appear if the first PUT statement using the file: 1. Has the PAGE option, or 2. Is a PUT EDIT with PAGE as the first format item If a SIGNAL ENDPAGE (filename) statement is present for which there is no corresponding ON ENDPAGE (filename) on-unit, the statement is ignored, and the standard system action to start a new page is suppressed. This prevents the standard system action from attempting to start a new page on a file which may not have been opE~ned. RECORD I/O is not applicable to PRINT files, but the use of printer spacing characters (ASA or machine code, the latter being device dependent) is available through the DD statement by means of the DCB subparameter of RECFM, or by using one of the options CTLASA/CTL360 in the ENVIRONt'.lENT attribute. The user is then responsible for ensuring that the initial character of the record is a valid printer control character, which may be a 'skip to channel n'. The ASA channel skip codes are: BLKSIZE LRECL RECFM = 129 125 VA Note: rhe LINESIZE for a PRINT file can be varied during execution by closing the file and reopening it with a different LINESIZE option. If this action is taken on a file which is being output to any medium other than a printer, (the use of MVT and MFT-II may cause a file intended for direct printing to be held temporarily on a directaccess device) the record and block size established for the file originally cannot be changed, and any change to LINESIZE must 68 Channel Code 1 through 9 10 through 12 1 through 9 A through C Also, punch stacker following characters: punch pocket 1 punch pocket 2 select uses the V W Should any other code be employed, it will be interpreted as either single-space or pocket 1, depending upon the device in use. Byte 0 3 2 r---------------------~---------------------, Word 1 I PAGESIZE I LINESIZE I ~----------T----------t----------T----------~ 2 I (Reserved) I (Reserved)ITab count I Tab. I r----------t----------t----------t----------i 3 I Tab 2 I Tab 3 I Tab. • • I Tab. •• I r----------t----------t----------t----------~ I I I I I I I I I I r----------t----------~----------~----------J m IL __________ Tab n I J Figure 20. Format of the Tab Control Table DATA and LIST directed output to PRINT files will automatically align data on preset tab positions. The positions are determined from the tab control table. which is the PL/I Library module IHETAB. This table can be altered, as described below, and either replaced within the library permanently or inserted in the linkage editor input stream for use in a single program only. the format of the tab control table is shown in Figure 20. PAGESIZE: LINESIZE: Half-word binary the defining PAGESIZE integer default Half-word binary defining the LINESIZE integer default are begun at the tab position specified, or, in the case of the first data field of a line, at the left margin default (position 1). In its unaltered up as follows: form~ the table is set r---------T---------, I 60 I 120 1 r----T----t---~----~ I 0 I 0 I 5 I 25 1 .----t----t----t----i IL____ 49 I ____ 73 I ____ 97 1121 ____ 1 ~ ~ ~ J Reserved Bytes: Reserved for left and right margin fac~lities Tab count: specifies number of tab position entries within table (maximum of 255). If the tab count = 0, then the tab positions are not used; each data item is put out according to the STREAM file output mode used. Tab 1l ··Tab n : Tab positions within the print line: initial position is numbered 1, greatest position is numbered 255. The value of each tab should be greater than that of the tab preceding it in the table; if not, it is ignored during table scanning, which proceeds through the table from rab~ to Tab n for each data field. Data fields To change the tab settings# a user must change the values in the assembler language control section listed below. To become an installation standard, this must be linkedited into the PL/I library (data set SYS1.PL1LIB) to replace module IHErABS. For use in one program only, the object deck is link-edited with that program. TAB IHETAB IHETABS PAGESIZE LINESIZE NOTABS TAB1 TAB2 'rAB3 TAB4 'rAB5 ENDTABS TITLE CSECT ENTRY DS DC DC DC DC DC DC DC DC DC EQU END 'IHETAB' IHETABS OD AL2(60) AL2(120) H'O' AL1(ENDTABS-*-1) AL1(25) AL1(49) AL1(73) AL 1( 97) AL1(121) * Managing Data 69 CREATING AND ACCESSING~~TA_SETS The facilities available for initially creating data sets are outlined in the following paragraphs, together with details for the subsequent usage of created data sets. It should be noted that creation of a data set is indicated by opening a file for OUTPUT, while subsequent access is indicated by either INPUT or UPDATE. There are no special considerations with regard to the data set specification beyond those already indicated under nFile Attributes and the DD statement." Accessing of STREAM Data Sets After a STREAM data set is created, it may, with one exception, be opened only for INPUT. The ~xception is that it may be opened for OUTPUT using the parameter DISP=MOD, in which case the new records are added at the end of the existing records in the data set. In any other circumstances, opening a STREAM data set for OUTPUT will result in the data set being overwritten. When an I/O statement is executed with the EVENT option, input/output of the record is initiated but is not completed before control is returned to the user's problem program. The user can take advantage of the time taken for the I/O operation by incorporating statements whose execution is independent of the I/O operation. When, at some later stage, it is necessary to ensure tnat the I/O operation is complete, the WAIT statement is used. Event Variable: The Event Variable, when used--In--con]unction with a RECORD I/O statement, can be in either an active or an inactive state. It becomes active when an I/O statement with which it is associated is executed. It remains active until any I/O conditions associated with the I/O operation have been raised or until the I/O operation has been completed (either normally or abnormally). The Event Variable also becomes inactive after a GO TO out of an ON-unit entered as a result of a condition being raised. An Event Variatle which is active must not be used again in any I/O statement, a CALL or assignment statement, or in the COMPLETION pseudovariable, until it has become inactive. Ra!~igg_£2g~!~!2n~~ All I/O conditions are raised at the time of execution of the WAIT statement. The UNDEFINEDFILE condition is raised in the normal way when an implicit OPEN error occurs. Any statement errors that occur cause the I/O operation to be terminated and an ERROR condition raised; in this case, the ERROR condition is raised when the I/O statement is executed, and the Event Variable is unchanged. CONSECUTIVE creation and acceSSing of RECORDoriented data sets varies according to the three data set organizations available. Details are given below for each of the three types: CONSECUTIVE, INDEXED, and REGIONAL. There are no special considerations with regard to the data set specification beyond those already indicated under "File Attributes and the DD Statement." Note that LOCATE is only valid for BUFFERED files. Accessin9-of CONSECUTIVE Data Sets The EVENT option gives the user the ability to overlap input/output operations with internal processing. This option may be used with statements for all RECORD files except: 1. SEQUENTIAL BUFFERED restriction) 2. SEQUENTIAL INDEXED «F) implementation restriction). 70 (PLII language compiler After a CONSECUTIVE data set is created, it may, with one exception, be opened only for INPUT or UPDATE. The exception is that it may be opened for OUTPUT using the parameter DISP=MOD, in which case the new records are added at the end of the existing records in the data set. In any other circumstances, opening a CONSECUTIVE data set for OUTPUT will result in the data set being overwritten. Reading of such a data set may be either forwards or backwards if it resides on tape; to read backwards, the file must be opened with the BACKWARDS attribute. If a file is first read (or written) forwards, and then read backwards, the LEAVE option in the ENVIRONMENT attribute should be specified, to prevent the normal rewind at close time, or when volume switching occurs on a multivolume data set. ~~1~£em~~~_2f-gec2EQ~l When a CONSECUTIVE data set is opened for SEQUENTIAL UPDATE, the only I/O' statements which may be used, apart from OPEN and CLOSE, are READ and REWRITE. READ· SET and REWRITE without options can only be used for BUFFERED files. h REWRITE statement may not be issued until' 'a READ statement has been issued; and a REWRITE statement will always update the last record read. It is not permissible'~o have intervening READ statements between a READ and a REWRITE referring to the same record in the ~ata set. For example: READ FILE(F) INTO(A); 5 9 READ FILE(f) INTO(B); REWRITE FILE(F) FROM(C); In the above example, statement number (9) updates the record which was read at statement number (5). The record which was read at statement number (1) can never be updated after statement number (5) has been executed. consider also the following: READ FILE(F) INTO(A) EVENT(E1); updating records READ •••• SET. obtained by of INDEXED £f~~~!on of INDEXED Data Sets Special DD statement requirements are as follows: One, two~ or three DD statements are required. The number depends on the sizes and relative positions of the three parts of the INDEXED data set, namely the prime data area, the overflow area, and the index area. The SPACE and DSNAME fields of the CD caru have special formats for INDEXED data sets. The following DCB subpararneters specified: mu~~ be KEYLEN=n DSORG=IS The following DCB subparameters may specified: be RKP=n OPTCD=LIMIYII (or any combination) NTM=n CYLOFL=n Space for the data set must ce allocated in cylinders, unless the absolute track (ABSTR) technique is used. If ABSTR is used, the number of tracks must be equivalent to an integral number of cylinders, and the first track used must be the first track on a cylinder which is not the first cylinder on a volume. Programming considerations are lows: 5 means as fol- READ FILE(F) INTO(B) EVENT(E2); For blocked INDEXED data sets, the DCB subparameters LRECL and BLKSIZE must be sp~cified as follows: 9 10 WAIT (E1); REWRITE FILE(F) FROM(A); Statement number (10) would cause the ERROR condition to be raised, since between the REWRITE statement and its corresponding READ statement (1), there is an intervening READ statement (5). When blocked records are used with UPDATE files, it must be remembered that if one record in a block is rewritten, then all the records in that block are rewritten. The user must take this into account when Without embedded key (i.e., RKP=O), LRECL size of data area + size of key With embedded key (i.e., LRECL = size of data area RKP*O), In both cases, blOCking factor. LRECL x BLKSIZE Creation of an INDEXED data set is only available in the SEQUENTIAL OUTPUT mode. The EVENT option is not supportManaging Data 71 ed for SEQUENTIAL access to INDEXED .data sets. The LOCATE statement is only valid for BUFFERED files. When creating INDEXED data sets, the values of the keys presented must be in ascending collating sequence order; i.e., the binary value of each successive key must be greater by at least 1 than that of the previously presented key. Therefore, duplicate keys cannot be added to the data set. Data set specifications made during creation may not be altered during subsequent processing of the data set; e.g. KEYLEN is fixed during creation. Also prov1s1on for overflow areas, whether cylinder or independent, must be made when the data set is created. If the prime data area is not filled during creation, then, with one exception, the unused area is not usable for overflow records, nor for any records subsequently added during direct access. The exception is that the unfilled portion of the last track used may be filled if required. It is possible to reserve space for later use within the prime 1ata area by writing "dummy" records during creation: provided that the initial byte of the record has the value (8) 11'B, and that the option OPTCD=L has been specified, these dummy records can subsequently be replaced by actual records with the same key. Refer to the publication 11M System/360 OpeEating_§y~te~L-~QQ_£QQ~E2l Language, and lBM __ §y~te~Ll£Q __ QE~E~~Q~§ystem, Job Con~EQ!_~an~~~g~_fh~rt~, for more detailed discussion of the above considerations. After an INDEXED data set is created, it may be reopened for INPUT or UPDATE, for either SEQUENTIAL or DIRECT access. If opened for DIRECT access, records may then be added and deleted. It should be noted that once created~ an INDEXED data set may not be opened for OUTPUT to add further records; it must be opened for UPDATE. The user is cautioned that only one DIRECT UPDATE file that adds records to an INDEXED data set should be open at anyone time. If two files are simultaneously open for SEQUENTIAL and DIRECT processing of the same INDEXED data set, then the following records might not be accessed by the SEQUENTIAL file: 1. 72 Records set. added to the end of the data 2. Records written directly in the flow area of the data set. 3. Records written on the overflow area when forced out of the prime data area by a record being added to this data area. over- INDEXED data sets accessed in the SEQUENTIAL fashion may be opened for either INPUT or UPDATE, once created. sequential access is in the order defined by the values of the recorded key, i.e., ascending collating sequence order. Records are retrieved in this order irrespective of the sequence in which they were added to the data set. Those records which have been deleted are not retrieved, and may be overwritten or lost when other records are added to the data set. It is possible to use the KEY option on READ statements to cause repositioning, in either a forward or backward direction, among the records being sequentially accessed either for INPUT or UPDATE. This facility is available only if the KEYED attribute is specified. Repositioning may be either to a specified record or, if GENKEY has been specified in the ENVIRONMENT option list, to the first non-dummy record of a particular key class. In either case a record is retrieved followed by the next higher keyed record if the subsequent READ does not have a KEY option. If the specified KEY is not found in the data set. the KEY condition is raised. A subsequent READ without the KEY option will retrieve the first record in the data set. The EVENT option is not supported for SEQUENTIAL access to INDEXED data sets. READ SET and REWRITE without the FROM option are only valid for BUFFERED files. When opened for SEQUENTIAL UPDATE, only the statements READ and REWRITE (other than OPEN and CLOSE) may apply to the file. The order of operation must be READ then REWRITE~ but not every record read need be rewritten. When blocked records are used with UPDATE files, it must be remembered that if one record in a block is rewritten, then all the records in that block are rewritten. The user must take this into account when updating records obtained by means of READ •••• SET. Records may not be added to the data set when in this mode, but they may be deleted simply by setting the initial character of the record to the delete-code (i.e. a character of the value (8)ll I B) and then rewriting it. This can also be done by using the DELETE statement which marks as deleted the last record read. Records which are marked "deleted" are not made available during sequential input. If blocked records are to be deleted, RKP must be greater than O. This is necessary because a deleted record is indicated by (S)'1'B in the first byte and, for blocked records, this byte is part of the recorded key; hence if RKP=O, the access of subsequent records in the block may be impossible. After several usages of an INDEXED data set in which records have been added or deleted, it may become desirable to copy the data set from one volume to another in order to purge the data set of records marked deleted, but still physically present, and to collect records from overflow areas into the prime data areas. Such reorganization will allow more efficient future access to the data set. If blocked records are to be deleted, RKP must be specified as greater than zero. Otherwise, owing to the technique by which records are marked as deleted -- ty setting the initial byte of the record, which for blocked records includes the recorded key. to the value (S}"'B -- the locating of subsequent records in the data set may be impossible. __2K--E~£ords~ The specified record is overwritten ty the replacement record. Records may be replaced without having been read, unless the data set contains blocked records, in which case the sequence must be READ then REWRITE. In the case of blocked records, a WRITE, DELETE, or READ statement may not be issued while a previous READ statement is still outstanding; that is, before its corresponding REWRITE statement has been issued. The EXCLUSIVE attribute should be specified to synchronize the READ-REWRITE cycle and WRITE statements. ~E1~~~~n~ REGIONAL INDEXED data sets accessed in the DIRECT fashion may be opened for INPUT or UPDATE, once created. A DIRECT UPDATE file may have records added, deleted, or replaced, as well as retrieved. The three types of organization are treated following paragraphsa REGIONAL data set together in the Creation of REGIONAL Data Sets Retrieval of Records: Records "deleted"-are-no~made-available. marked :ddition of Records: If the key is unique, the-record-isadded-to the data set, either in the prime area 1 or absent). REGIONAL(3): If P-format records, as for Consider also the following: READ PILE(P) INTO(A) EVENT(E1); 5 9 10 READ FILE(P) INTO(B) EVENT(E2); WAIT. (E1); REWRITE FILE(F) FROM(A)i Statement number (10) would cause the ERROR condition to be raised, since between the REWRITE statement and its corresponding READ statement (1), there is an intervening READ statement (5). Managing Data 75 REGIONAL(1): REGIONAL(2). If U- or Vformat records, records are added to available space on specified track (or subsequent tracks, if extended-search has been requested, i.e., LIMCT> 1 or absent). MOVE MODE The specified record is overwritten with a dummy record; the space may be reused. OU,tput: Data is moved from the work area to a file, possibly via a buffer. REGIONAL (2) : The specified record is overwritten with a dummy record, the key being rewritten as a dummy key: the space may be reused. REGIONAL(3): If F-format records, as for REGIONAL(2). If U- or Vformat records, the record is overwritten with a dummy record" the key being rewritten as a dummy key: the space may rr2t be reused. REGIONAL(1): The specified whether a dummy actual record, written. REGIONAL(2): The specified record is rewritten; a record with the specified key must exist. RE3IONAL( 3) : As for REGIONAL(2), for all record formats .. record, or an is re- If a REGIONAL file has the EXCLUSIVE attribute, then, in order to lock a particular record, different tasks must use the same region number to refer to the record. Characteristics Data is moved (possibly via a buffer) from a file to a work area, where it is processed. (The work area is the £~coE3-yariable.) In~~: Move mode may be simpler to use than locate mode, as there are no buffer alignment problems. In cases where there are numerous references to the contents of a record, it can also be faster, as it does not have the indirect addressing overhead of locate mode. The basic statements used in move mode are: READ FILE variable) ; WRITE FILE variable) ; REWRITE FILE variable) ; (filename) INTO (record (filename) FROM (record (filename) FROM (record The full set of RECORD-oriented I/O file attributes is permitted. LOCATE MODE InEut: Data is moved from a file to an input buffer, where it is processed. In RECORD I/O, the user has the choice of processing a record in a work area or in a buffer. This choice is exercised by selecting one of two processing modes: moyg mode or locate mode. There are advantages in processing-an-entire file with one mode, but it is permitted to use a combination of both modes in the same file. 76 Ou!put: The data record is constructed by the user in an output buffer. The buffer is then transmitted to a file. The locate mode input statement sets the address of the record (in the buffer) in a Eointer variable. The record can then be identified for processing by using this pointer in conjunction with a Q~~g_-y~~~ ble that defines the structure of the record. As many based variables as are required can be declared for a file; the record can be associated with any of them. READ FILE (filename) SET (pointer variable) ; LOCATE based variable FILE (filename) [SET (pointer variable)i] REWRITE FILE (filename); can be used to read self~ These are records where information in one part of the record is used to indicate the structure of the rest of the record. This information could be, for example, a count of the number of repetitions of a subfield, or a code identifying which one of a class of structures should be used to interpret the record. Locate mode ~efini!,.9:~~2rds. Locate mode should also provide faster execution, as there is no need to move data from a buffer to a work area, and may have a smaller storage requir~ment, because no storage is needed for separate work areas. Whenever a statement that causes data transmission to or from a file is executed. any logical record accessed previously by a locate mode statement is no longer available for processing. Locate mode can only be used with SEQUENTIAL BUFFERED files. The KEYED and ENVIRONMENT attributes may be specified; the other file attributes permitted depend on the statement used: Statement READ-'(with SET) LOCATE REWRITE (without FROM) File Attribute OOUT/UPCATEOUTPUT UPDATE If any of these attributes is not explicitly or implicitly declared, or if any other attribute is present, the ERROR condition is raised. The basic are: statements used in locate mode Managing Data 77 To operate successfully, the PLiI (F) Compiler and its associated load modules must have the required amount of main storage and input/output devices, as specified in the following paragraphso System/360 operating system operates in a device-independent environment. In particular, the (P) Compiler may operate with different combinations of devices. However, certain restrictions should be noted. The PL/I (F) Compiler requires at least a System/360 Model 30 with a minimum of 64K bytes of storage. At least 45,056 (44K) bytes should be allocated in the SIZE option. If additional storage is available and allocated, the compiler will in general run more efficiently and provide a faster compilation. At least one direct access device must be used for residence of the operating system, and for the use of the SYSUT1 data set. The same volume may be used for both purposes. The use of certain source program and operating system features requires a storage minimum greater than that given above. For example, PL/I tasking uses the MVT system, which requires at least 256K bytes of storage. Instruction Sets ---------------The standard, decimal, and floatingpoint instruction sets are required by the compiler and object programs, irrespective of declared data attributes. For flexibility in character sets and graphic representation, the following types of chains, trains, or type bars are available for use with output printers. 48-character set BCD 60-character set HN HN PN or QN 48-character set BCD 60-character set 52H 52H 63-character bar The operator's console should have the IBM 1052 printer keyboard Model 7 with dual case printing element, feature code 9572. SYSTEM/360 OPERATING SYSTEM REQUIREMENTS The primary control program of the operating system provides all sequential scheduling features of the job control languag~ as specified in the publications IBM §ystemL360 _QE~atig~~te~~2f-f2g~!21 LanC[uage, and IBM System/360 0Eer~!ing_§.Y§.:. ~illl_Q~rator's Guide. It affords data management capability and contains a supervisor which provides for: Efficient overlapping of central processing unit operations and input/output channel activity The timer feature is required in order to provide elapsed time of compilation, or to support the timer built-in function. In the absence of the clock, no time information will be printed out. 78 Error checking and standard input/ output error recovery procedures Supervision and processing of interruptions Supervision of requests for various services provided by the system This control program provides for a single input job stream and the sequential processing of job steps through single task operations. !'1ul:!:.!.Erog£~!!!!!!!.!!g Tas~:§._lMF~l. lation, a message will be generated giving the actual time taken. Under MVT, the time given is CPU time only, as I/O time cannot be measured. with a. Fixed Number of This is an extension of the primary control program. It provides for concurrent control of up to four independent tasks representing separate jobs. Each job occupies its own fixed partition of main storage. Figure 21 shows the control program options which may be added to the primary control program in order to provide greater performance and/or programming flexibili~y for the various features of PL/I. These exclude input/output features. r------------T----------------------------, !PL/I Featurel Control Program Option* I .------------+----------------------------~ )WAIT I Multiple WAIT I This provides, in addition to the facilities provided by the primary control program: Priority scheduling of jobs submitted from single or multiple job streams Concurrent scheduling and execution of up to 15 separately protected jobs The MVT system is used in PL/I tasking • I I Tasking ] ITIME, DATE I I I MVT I I Timing: A. Time I I I I I I ITIME, DATE I Timing: B. Interval timing) ] DELAY I I .------------~----------------------------i 1* See the publication !BM~Y:§.:!:.~!!!~l£Q I ] QE~E~:!:.!.!!g_§Y:§.1~!!!L-§~QE~g~-~:§.:!:.!.!!!~:!:.~:§. I I for further details of these options. I L _________________________________________ J Figure 21. Control Program Options cm1PILER SUPPORT -----------_._After the compiler initially receives control from the calling program of the operating system by means of a supervisorassisted linkage, communication is maintained with the operating system through the compiler control routinesQ The functions provided by the primary control program of the opera~lng system, together with the data management routines BSAM and QSAM, are required by the compiler. In addition, BPAM data management routines are required by the compile-time processor if the INCLUDE statement is used~ STREAM I/O ~ithin PL/I is supported by the queued sequential access method (QSAM). In order to conserve space and time# the GET and PUT macros are used in the locate mode whenever possible. Automatic datatransmission computing-time overlap is provided~ as are blocking-deblocking functions. In order to achieve an efficient degree of I/O overlap, two buffers are normally allocated to each data set when it is opened. The number of buffers allocated is, however, under the control of the DD statement, or the BUFFERS option of the ENVIRONMENT attribute. Object-time interfaces with the operating system control program are made through the PL/I Library routines. The facility for providinJ details of the time taken for each compilation must be specified at system generation time through the control program options (see "Object Program Support"). On completing a compi- The access method employed depends upon the following factors: System Requirements 79 r------------T-----------T-------~-----------T-------------T-----~---------------------, I Organization I Record IAccessl Notes on Use of I Format I Method 1 Access Method I ~------------+-----------+-------+-----------+-------------+------+---------------------i I I lINPUT I BUFFERED IAII IQSAM jLocate mode I I I I UPDATE I I I I (except paper tape) I ICONSECUTIVE ISEQUENTIAL jOUTPUT ~-----------+--.-----------+------+---------------------i I J 1 IUNBUFFERED IFIU]V IBSAM I I I Access I J J Mode 1Buffering I I I f------------+-----------+-------+---------·--+--·-----------+------+---------------------~ I I I I ISEQUENTIAL ~-------iUNBUFFERED I I J OUTPUT I IFIFB ~-----------+-------+-----------i 1DIRECT I INPUT f I I I UPDATE I I I I I lINDEXED I I I IINPUT I BUFFERED lUPDATE lor I IScan mode I I ~ESETL/SETL I IQISAM ~---------------------~ I ILoad mode I ~------+---------------------i IBISAM I I I I I .------------+-----------+-------+-----------+-------------+------+---------------------i I I 1INPUT I BUFFERED I I IQSAM (under certain I I I UPDATE lor I I ] circumstances) I ISEQUENTIAL ~-------iUNBUFFERED I I BSAM ~---------------------i I I JOUTPUT I IF (REGIONAL I IBDAM load mode I I and (2» ~------t---------------------~ I I ! I I I I REGIONAL ( 1) * 1 ) REGIONAL( 1), I ] I I F I UI V I I Relative record I I (2), and (3) I I I I ,( REGIONAL (3) ) I 1wi thout keys I I I I INPUT t I I BDAM I REGIONAL( 2) * I I I DIRECT IOUTPUT ] I I IRelative record I ] I IUPDATE I I I Iwith keys I I I I I I I I REGIONAL (3) * I I I I I I I 1 Relative track J I I I I 1 I I wi th keys 1 ~------------~---------~-L-------~---------~-i---.----------~------i---------------------i 1* L ___________________________________________ OUTPUT causes data set to be formatted using •____________________________________________ BSAM (BDAM load mode) at open time JI I I .-----------t-------t-----------i(1) eFigure 22. Usage of Data Management Access Methods for RECORD-Oriented I/O Organization Record format File attributes The various combinations of the above., and the resultant usage of data management" are illustrated in Figure 22. 80 Although external procedures must be compiled separately, several compilations may be processed by the linkage editor to form a single load module. In order to execute such a load module, the external procedure of one of the compilations must possess the option MAIN. vided by the compiler and the linkage editor 1S a guide only to the space required by the executable control section and the STATIC INTERNAL control section in the load module. Several other items must be added to this to obtain a realistic estimate of the maximum object-time requirements. These include the following: 1• !:~QgQ:.Bg9i: s t ~!: __ Y:~£!Q!: __ iEBY:l. • 2. ~~!~!:EQE! __ ~~Q __ ~EfQE __ ~~~Qli~g. 3. 2Yn~~i£_~§~2E~g~_~f~~~iQ§~~1.. 4. CONTROLLEG Variables. Each allocated generation of -each CONTROLLED variable will require 12 bytes in addition to the space required for the contents of the variable and its dope vector. 5. !il~_~~~iEQ!~!i2~. If more than one compilation has this option, then the linkage editor will cause control to be passed to the first of these compilations to appear in its input streamo Note that tnis is a function of the linkage editor itself and is not a formal PL/I facility. An attempt to execute a PL/I program in which no procedure has been given the MAIN option will result in termination of execution, accompanied by a message on the console or system output listing. Communication between separate compilations can be achieved by means of EXTERNAL jeclarations or by passing arguments in CALL statemsnts or function references. It should be noted that the PL/I language makes the following restrictions: AUTOMATIC variables cannot be EXTERNAL (but may be passed as arguments) Descriptions of an external variable in separate compilations must not be contradictory. If they are, the compiler will not be able to detect this. rhe linkage editor will load the INITIAL value of a STATIC EXTERNAL variable from the first object module encountered in its input stream which declared the variable. Th e overall length of the PRV is contained in the linkage editor module map, which is produced when the MAP option is specified. The maximum size of a PRV is 4096 bytes. (Refer to Appendix C of this publication for a more detailed description of pseudoregister vectors.) The primary workspace requirement for the library is approximately 1100 bytes, which should De added to the PRV requir~ ment, plus 512 bytes if optimization level OPT=1 has been chosen. For each PL/I interrupt, 1100 bytes ar~ required for library workspace. In addition, library modules which a~e dynamically invoked as a result of interrupts may require up to 2600 bytes (irrespective of the number 0: interrupts). All storage requir2j for interrupt and error handling is released when the interrupt has been cleared. A general guide to the length of each DSA is to add 200 bytes per active Dlock to the space required for the AUTOMATIC variables declared within the clock and their dope vectors. This is only a guideline; there may be consiieratls variations between different programs. The main factors to be considered in estimating the storage required when opening and closing files are as follows: a. In order to estimate with any accuracy the maximum overall storage requirements for a PL/I program, several factors must be taken into account. The information pro- File Control Block (FCB). Approximately 150 bytes for CONSECUTIVE and REGIONAL data set organizations; approximately 300 bytes for INDEXED organization. Managing Programs 81 r------------T--------------------------T---------------~---------------T---------------, " ,Organization/ I I I ' I OPEN* (bytes) PL/I Attributes ICLOSE* (bytes) INORMAL* (bytes) I ~-------T-------+-------T-------+-------T-------i / Non- I I Non- I I Non- I , ITasking,TaskingITasking,Tasking,TaskingITaskingl .------------+---------?----------------+-------+-------+-------+-------+-------+-------i }CO.\lSECUTIVE /STREAM / 1900 ,1900 / 1300 / 1700, I I I 1 I ISEQUENTIAL BUFFERED ISEQ.BUFF.(spanned input) ISEQ.BUFF.(spanned output} I SEQ. UNBUFFERED l I 2400 I 1900 , 1800 I 5100 I 2400 ,1900 ,1800 I 5100 I 2400 , 1900 I 1800 I 5100 I 2800 , 2300 ,2200 ,5500 ,1100 , 600 I 500 ,3800 I 1100 600 500 I 3800 I , , , , I r------------+--------------------------+-------+-------+-------+-------+-------+---~---~ I INDEXED I SEQUENTIAL IDIRECr ! ,3600 ,3100 ,3600 / 3900 ,3600 I 3100 I 4000 1 4300 ,2300 ,2300 I 1800 I 2600 , I .------------+-------~------------------+-------+-------+-------+-------+-------+-------~ I REGIONAL I I /SEQUENTIAL INPUT/UPDATE jSEQUENrIAL OUTPUT 1DIRECT I 5100 ,3900 1 3100 I 5100 ,3900 I 3900 ,5100 I 3900 I 3100 I 5500 I 4300 1 4300 I 3800 I 2600 I 1800 ,3800 I 2600 I 2600 I I I r------------L--------------------------~-------~----- --~-------~-------~-------~-------i 1* These figures show the extra storage required by linked PL/I library I/O modules inl I both non-tasking and tasking environments. The first two columns show the maximum I I space occupied by the library modules during the opening of a file with the givenl I attributes. The second two columns show the maximum space occupied during thel I closing of the same file. The third two columns show the space occupied by thel 1 library modules while the file is open. If several files with the same attributes I I are processed, then the storage requirements are unaffected. If, however~ anotherl I file with different attributes is open when a file is opened or closed~ then thel I figure for that file must be added to the figure in the OPEN and CLOSE column. I I For instance, if a SEQUENTIAL INDEXED file is open in a non-tasking environment atl I the time that a CONSECUTIVE SEQUENTIAL BUFFERED file is being closed, then the totall I storage required by the linked modules w:lll be 2300+2400=4700 bytes. The figures dol IL______ not -include the storage required by data management. I ________________ - - ________________________________________________ --------------J .Figure 23. Storage Required by PL/I Library Modules when opening and b. ~i~!~!Y __ ~2g~le~. The greatest storage requirement generally occurs when a file is opened or closed. Figure 23 shows the storage required at these times. In all cases, the space required by data management must be added to the figures givend Co ~~ifer~. In addition to the factors given above, space must be allowed for buffers or I/O control blocks. This requirement can become very large if large blocksizes are used. Closing Files structured to support the advanced features of PL/I. In order to achieve more than a limited use, the user would require an intimate knowledge of the object code structure and requirements of a PL/I program. Appendix C is provided as an introduction to the sUbject. Appendix D of the present manual contains an example illustrating one way in which an assembler language program can be written in order to combine it with a PL/I procedure. All space required by files is released and becomes reusable after the file has been closed. When an assembler subroutine is called by a PL/I program, by means of a CALL statement or a function reference, a variable number of arguments can be passed. The compiler indicates the last argument by setting X'80' in its high-order byte. The combination of modules written in other languages with modules written in PL/I is possible only in a rather limited way, since most other languages are not 82 This feature provides compatibility with COBOL and FORTRAN calling sequences. It cannot be used in an exclusively PL/I environment because PL/I does not allow a variable number of arguments. PLiI object programs make use of a large number of subroutines. These subroutines are held in the PL/I library and are incorporated into the PL/I program by the linkage editor. Library modules not directly referenced by the compiled module, but which are selectively referenced by other required modules (e.g., modules within in the data conversion package) are specified by the compiler in ESD entries. These ESD entries, in conjunction with the linkage editor control statement, LIBRARY* are used to keep the program's storage requirements to a minimum. The form of the LIBRARY statement used specifies that the linkage editor is not obliged to resolve certain external references within a given module, unless the referends are already included within the module being edited. Those modules which require this feature use the LIBRARY control statement when they are edited into the PYI library. Thus, when these modules are subsequently processed by the linkage editor when building a PL/I program, there will be no second-level search of the library. Library subroutines are automatically selected, and no user intervention is needed. Other library modules are used on a transient basis, and are dynamically loaded during program execution. These modules reside within the data set SYS1.LINKLIB. Modules of this type include those required for opening and closing files, RECORD I/O data management interface modules, and object-program error-handling routines and message tables. then, if 22 were greater than the return code passed from STEPA, or if 59 were not equal to the return code passed from STEPB, the job step STEPC would not be executed. For further information on the use of the COND parameter, see the publication IEM §ystem/360_QEerating System« Job Control Language. To use this facility in a PL/I program, it is first necessary to declare the library module antry point IHESARC: DCL IHESARC ENTRY(BINARY FIXED); Once IHESARC has been declared, the return code can be set at any point in the program by the following CALL statement: CALL IHESARC(expression); The routine may be called as often as requiredft Each time, the expression will be evaluated and its value will be saved. On normal termination, the return code will be set to the latest value~ modulo 4096. (On abnormal termination, the complete job would be terminated.> If the facility is not used, a return code of zero will be passed. It is possible for the programmer to specify that a particular job step shall not be executed if any of certain conditions are satisfied by return codes passed from previously executed job steps. A return code can be set during execution of a PL/I program .. The major differences between Release 17 and the earlier Release 11 version of Checkpoint/Restart are the increased number of Checkpoint/Restart features and the changed method the programmer must use to initiate a programmer-deferred checkpOint restart, or step restart. The conditions under which a job step is to be bypassed are set out in the COND parameter of the EXEC statement for the step. For example, if the EXEC statement for a job step, STEPC, contained the parameter When a job step terminates because of, for example, an I/O error or a machine check~ the programmer may require that processing begins again from a point ~ithig the job step or, alternatively, from the beginning of the job step. This can be done by means of the IBM System/360 Operating System checkpoint/Restart facility. COND=(22,GT,STEPA),(59~NE,STEPB» Managing Programs 83 Checkpoint/Restart is supported by the MVT and PCP supervisors, and provides the following features: Automatic step restart Automatic checkpoint restart Programmer-deferred step restart Programmer-deferred checkpoint restart If automatic checkpoint restart or automatic step restart is specified when using MVT, MSGLEVEL=1 must be specified in the JOB statement .. Programmer-deferred step restart enables the programmer to resubmit a multistep job and cause any number of steps to be bypassed, until the required step is reached, at which point execution commences. Automatic step restart causes the excution of a job step which terminates abnormally to be recommenced from the orginal starting point. programmer-deferred checkpoint restart is the technique used if the job is to be discontinued, and resubmitted for checKpoint restart by the user at a later time; automatic checkpoint restart is the technique used if a restart at the last checkpoint taken is to ce performed during the job immediately that the system recognizes that the job step has been terminated abnormally. Both checkpoint restart techniques require £h~£~E2in~_g2~2' in order to carry out the restart operation. Checkpoint data consists of all the information about a program at a point in its execution which can be used to recommence execution from that point. Multiple checkpoints can be preserved, or, alternatively, only a single checkpoint may be required, in which case each checkpoint is overwritten by a subsequent checkpoint. Deferred checkpoint restart can be performed at any of these checkpoints, if multiple checkpoints are preserved, or from the latest checkpoint, if it is the only checkpoint that is preserved. Automatic checkpoint restart will use only the last checkpoint taken. To create a checkpoint from within a PL/I program, code the statement CALL IHECKPT; at a strategic point in the program such that any data sets used by the program can 84 be repositioned by the restart program to the positions held at the time the checkpoint was taken. Note: The CALL IHECKPT statement must not Ee--executed in a multitasking environment. When the CALL IHECKPT statement is executed, a checkpoint data set is created, for which a unique name or checkid is generated by the system. rhe-checkId is displayed on the operator's console for each checkpoint taken. The checkid for a particular checkpoint data set which is to be used to restart execution of the program should be noted, and later used to identify the data set. The checkpoint data set is sequential only, and may not be a member of a partioned data set. A DD statement with the ddname SYSCHK must be provided in the job stream for each step which produces checkpoints. This DD statement contains the specifications for the checkpoint data set. rhe parameters for this statement are given in Figure 24. The SYSCHK DD DISP parameter depends on whether there is a ~ing!~__ £he£~E2!~~ or whether m~!~iE!e chec~oint~ are required. For a single checkpoint code DISP=(NEW,KEEP), for multiple checkpoints code DISP=(MOD,KEEP). With a single checkpoint, the information stored at a checkpoint overwrites the information stored by any previous check poinl:; thus only the latest checkpoint information is available. The information for a checkpoint is stored after the information for a previous checkpoint; thus all the checkpoints taken are available for a restart. The other checkpoint/restart techniques mentioned, automatic step restart and programmer-deferred step restart, do not require either the CALL IHECKPT or SYSCHK DD statements. (Automatic step restart causes a step to be reexecuted immediately if it is terminated abnormally; programmerdeferred step restart permits the job to be resubmitted, but any job steps preceding the step to be reexecuted are bypassed, permitting the immediate restart of the step.) r------------T-----------------------------------------------, I Tape, Drum, Disk I I I Parameter I ~----------------------T------------------------~ I Single checkpoint 1 Multiple checkpoints I r-----·-------t----------------------~------------------------~ I OSNAME= Any name I ~-----·-------t-----------------------------------------------~ I VOLUME= I Volume number or other reference , J t------------t-----------------------------------------------~ ~ UNIT= I 2400, 2400-2, 2301, 2311, 2314, 2321 etc. I r------------t----------------------T------------------------~ I DISp:= , (NEW,KEEP) , (MOO.KEEP) , r------------t----------------------~------------------------~ I SPACE= I Provided by formulas for direct-access devices I t------------t-----------------------------------------------i I DCB= I (TRTCH=C> if UNIT=2400-2 I t------------~-----------------------------------------------1 , * I , I I I , , I The space allocated on a direct-access device must bel sufficient for the job-step requirements together withl the system blocks. In effect, this means that it mightl have to be as much as one and a quarter times mainl storage or region size. For example, a 256K machine orl region might require 10 cylinders on a 2311 disk pack., The amount required is derived from the formulas provided] in !g~_~y~~~~~l~Q_QEerating System: storag~_~st!~~~~~. I , , , A secondary quantity can appear in the SPACE parameter ofl the SYSCHK DD statement. However, if it is specified, itl IL ____________________________________________________________ is not used. J, • Figure 24. Basic Parameters for the SYSCHK DD Statements RNC (restart, but no checkpoints) Automatic checkpoint restart is specified implicitly by the execution of a CALL IHECKPT statement. The remaining checkpoint restart features are controlled from the RD (Restart Definition) parameter, which can be specified in either a JOB statement or an EXEC statement. The settings of the RD parameter are listed below: RD [.procstep] = 1. An RO parameter coded in a JOB statement overrides one coded in an EXEC statement. 2. If the RD=value is coded in an EXEC statement for a cataloged procedure, it applies to all the steps within the procedure. RD.procstep=value can be coded instead of RO=value; it then applies only to the specified procedure step. RO.procstep=value can be coded for each step in the cataloged procedure, in procedure step order. 3. The CALL IHECKPT statement causes a request for automatic checkpoint restart and overrides the request for automatic step restart, if the parameter RO=R has been specified. 4. RD=NC and RD=RNC are provided to suppress the execution of a CALL IHECKPT statement which is contained in a {R]NCINRIRNC} where: R (restart) requests automatic step restart. NC (no checkpoint) totally suppresses both the execution of the CALL IHECKPT statement, and the implicit automatic checkpoint restart. NR (no restart) requests automatic step restart and totally suppresses the execution of the CALL IHECKPT statement. Checkpoints may be written. but automatic checkpoint restart is inhibited. 2.Eecify this 12arameter for Managing Programs 85 program to be executed, but is required for a particular job. 5. not RD=NC and RD=NR have no effect on a step in which there is no CALL IHECKPT statement to be executed. In this case RD=RNC has the same effect as RD=R, specifying automatic step restart. 6. If no RD parameter is specified, automatic step restart is suppresed but an automatic checkpoint restart can occur if a checkpoint is taken. 1. The RD parameter is ignored when the MFT II supervisor is used. Automatic restarts are specified in RD parameter described previously. the Prugrammer-deferred restarts are performed by resubmitting the deck containing the job control statements for the original job, with the JOB statement containing a RESTART parameter to specify that a restart is required, and how it is to be performed. The RESTART parameter specifies the step to be restarted, and, if a checkpoint restart is required, the checkpoint identity, i.e., checkid, of the checkpoint data set to be used. It is specified as follows: RESTART= ( { stepname ~tepname.procstep } [,checkid) If the restart is a programmer-deferred step restart, the checkid information must not be specified, and the enclosing parentheses may be omitted. The stepname parameter identifies the step in the job to be restarted. The form stepname.procstep is used if the step is in a cataloged procedure. The form '*' can be used to indicate that the first step in the job is to be restarted. (greater than) ; L (letter), < (less than) • 0 (letter), 0 (zero) ; S (letter), 5 (five) ; Z (letter), 2 (two) ; This is a list of the errors and pitfalls most likely to be encountered when writing a PL/I source program. Some of the items concern misunderstood or overlooked language rules, while others result from fail~re to observe the implementation conventions and restrictions of the PL/I (F) compiler, and are indicated by (I) appearing after the item. (1) The option list in the PARM parameter of an EXEC statement should be enclosed in quotation marks, and is limited to a maximum length of 40 characters (including commas but excluding quotation marks). (I) (2) When the source deck is in the input stream to the sequential scheduler, check that the last card in the source deck is a delimiter (/* in columns 1 and 2). (I) (3) A STATIC variable in an overlay segment could be overwritten during an overlay operation unless it has the EXTERNAL attribute. (I) (4) Special care should be taken when using ENVIRONMENT (INDEXED). For example, no secondary quantity can be (I) allocated by the SPACE parameter. (1) 104 Keypunch transcription errors may occur unless particular care is taken when writing the folLowing characters: (break character), (minus sign); (2) Ensure that the source program is completely contained within the margins specified by the SORMGIN option. (I) (3) Inadvert~nt omission of certain symbols may give rise to errors that are difficult to trace. Common errors are: unbalanced quotation marks; unmatched parentheses; unmatched comment delimiters (e.g., /* punched instead of */ when closing a comment); and missing semicolons. (4) Reserved keyword operators in the 48-character set (e.g., GT, CAT) must in all cases be preceded and followed by a blank or comment. ( 5) Care should be taken to ensure that END statements correctly match the appropriate DO, BEGIN, and PROCEDURE statements. (6) In some situations. parentheses are required when their necessity is not immediately obvious. In particular, the expression following WHILE and RETURN must be enclosed in parentheses. (1) The procedure to be given initial control at execution time must have the OPTIONS(MAIN) attribute. If more than one procedure has the MAIN option, the first one gets control. (I) (2) When a procedure of a program is invoked while it is still active, it is said to be used recursively. Attempting the recursive use of a procedure that has not been given the RECURSIVE attribute may result in a program interrupt after exit from the procedure. This will occur if reference is made to AUTOMATIC data of an earlier invocation of the procedure. (1) DECL~RE statements for AUTOMATIC variables are in effect executed at entry to a block: sequences of the following type are therefore likely to lead to unpreiictable storage requests: 004 00.4 (3) Missing commas in DECLARE statements are a common source of error. For example, a comma must follow the entry for each element in a structure declaration. External identifiers should neither contain more than seven characters n nor start with the letters IHE. (I) (4) In a PICTURE declaration, the V character indicates the scale factor, but does not in itself produce a decimal point on output. The point picture character produces a point on output~ but is purely an editing character and does not indicate the scale factor. In a decimal constant, however, the point does indicate the scale factor. For example: DCL A PIC'99.9', B PIC'99V9', C PIC'99.V9~; Ai B ,C=45.6; PUT LIST (A,B,C); This will cause the following values to be put out for A, B, and C, respectively: 04.5 456 45.6 If these values were now read back into the variables by a GET LIST statement, A, B, and C would be set to the following respective values: 560 45.6 (5) Separate external declarations of the same identifier must not specify conflicting attributes, either explicitly or by default. If this occurs the compiler will not be able to detect the conflict. PL/I also requires that if an INITIAL value is sp~cified in one declaration of a STATIC EXTERNAL variable, the same INITIAL value should appear in every declaration of that variable. (6) An identifier cannot be used for more than one purpose within its scope. Thus, the use of X in the following sequence of statements would be in error: PUT FILE (X) LIST (A,B,C); X=Y+Zi X: M=N; (7) (2) 45.6 If the PUT statement were then repeated, the result would be: A: PROC; N=4; DCL B(N) FIXED; END; 56.0 It is advisable to declare all entry points, associated parameter lists, and any return values, to avoid inadvertent clashes of attributes. If the attributes of the data items in an argument list do not match those declared for the ENTRY# a dummy argument is created with the correct attributes, and the data item is converted into the dummy_ For example: DCL X ENTRY (FIXED. CHAR(4}), Y FIXED, Z FIXED(1,0); Y=45; Z=O; CALL X(Y,Z); X:PROC(A,B); DCL A FIXED, B CHAR(4); END; In the above example, a dummy is created for the second argument, Z, and is passed to X as 'bbbO'. If the attributes declared for X in the entry name declaration W8re incompatible with the attritu~ps of tne arguments in the CALL statem~nt, the compiler would issue a diagnostic message, and at execution time no conversion would take place. However, if the attributes declared for X in the entry name declaration conflicted with the attributes of the corresponding parameters in the PROCEDURE statement, the compiler would not detect the disagreement, and at execution time Programming Techniques 105 the consequences of such an error would, in general, be unpredictable. For example, if X were declared DCL X ENTRY (FLOAT, CHAR(4»; then 45 would be passed as FLOAT, but would be interpreted by X as FIXED# possibly with disastrous results. Similarly, attributes declared for RETURN values must agree in the invoking and invoked procedures; however, the actual expression returned may be of any data type and will be converted to that declared. For example: FLOAT DECIMAL REAL is assumed for implicitly declared arithmetic variables, unless the initial letter is in the range I through N, when FIXED BINARY REAL is assumed. If a variable is explicitly declared and any of the base, scale, or mode attributes is specified. the others are assumed to be from the set FLOAT/DECIMAL/REAL. For example: DCL I; /*1 IS FIXED BINARY (15,0) REAL AUTOMATIC*/ DCL J REAL; /*J IS FLOAT DECIMAL (6) REAL AUTOMATIC*/ DCL X RETURNS (CHAR(4»i DCL A CHAR(4); X: PROC CHAR(4); RETURN (I*J*K); END X; DeL K STATIC; /*K IS FIXED BINARY (15,"0) REAL STATIC*/ DCL L FIXED; A=X; The precision of decimal integer constants should be taken into account when such constants are passed. For example: CALL ALPHA(6); ALPHA: PROCEDURE(X)i DCL X FIXED DECIMAL; END; The above example is incorrect because X will be given a default precision. while the constant, 6, will be passed with precision (1,0). (8) When a data item requires conversion to a dummy, and the called procedure alters the value of the parameter 6 note that the dummy is altered, not the original argument. For example: (10) The precision of complex expressions is not obvious. For example, the precision of 1 + 11 is (2#0), that is, the precision follows the rules for expression evaluation. (11) When a procedure contains more than one entry point, with different parameter lists on each entry, make sure that no references are made to parameters other than those associated with the point at which control entered the procedure. For example: A: PROCEDURE(P,Q)i P=Q+8i RETURN; B: ENTRY(R,S)i R=P+Si /*THE REFERENCE TO P IS AN ERROR*/ END; DCL X ENTRY (FIXED, FIXED)# A FIXED, B FLOAT; CALL X(A,B); (12) BASED storage is allocated in terms of doublewords; therefore, even for the smallest item, at least eight bytes are required. (I) X:PROC(Y,Z); DCL (Y,Z) FIXEDi Y=Z**100i /*A IS ALTERED IN CALLING PROC*/ Z=Y**3; /*B IS UNALTERED IN CALLING PROC*/ END Xi (13) The variable used in the REFE~ option must be referred to unambiguously. For example: (9) When the attributes for a given identifier are incompletely declared, the rest of the required attributes are supplied by default. The following default assumptions should be carefully noted. 106 /*L IS FIXED DECIMAL (5,0) REAL AUTOMATIC*/ DCL 1 A, 2 Y FIXED BIN, 2 Z FLOAT, B, 2 Y FIXED BIN 2 T(1:N REFER(BoY»; In any references to this declaration, Y must be fully qualified to prevent a possible ambiguity. (14) A pointer qualifier (explicit or implicit) may not be based or subscripted. (I) (15) Conflicting contextual declarations must be avoided. P is often used as the name of a pointer: it must not, therefore, assume by default the characteristics of another data type. For example: (2) Any attempt to write out a variable or array that has not been initialized may well cause a data interrupt to occur. For example: DCL A(10) FIXED: A(1)=10i PUT LIST (A): B BASED (P), To avoid the data interrupt, the array should be initialized before the assignment statement, thus: P AUTO, ., A=O: P is first contextually declared to be a pointer and then, by default, to be FLOAT DECIMAL. (16) BASED variables cannot arguments or parameters. be used (I) as (17) Offsets must be declared with a level 1 unsubscripted BASED area. ~~_Assignments Failure to initialize a subscript can be detected by checking for subscripts out of range, when debugging the program. and Initialization (1) When a variable is accessed, it is assumed to have a value which has been previously assigned to it and which is consistent with the attributes of the variable. If this assumption" is incorrect~ either the program will proceed with incorrect data or a program interrupt will occur. such a situation can result from failure to initialize the variable, or it can occur as a result of the variable having been set in one of the following ways: (a) by the use of the UNSPEC pseudovariable (b) by RECORD-oriented input (c) by overlay defining a picture on a character string, with subsequent assignment to the character string and then access to the picture (d) by passing as an argument a var~able assigned in a different procedure, without matching the attributes of the parameter. Failure to initialize a variable will result in the variable having an unpredictable value at execution time. Do not assume this value to be zero. Note that this problem can also occur as a result of CHECK system action for an uninitialized array. If the CHECK condition were enabled for the array in the above example, and system action were taken, the results, and the way in which the program terminates, would be unpredictable. The same problem arises when PUT DATA is used. (3) Note the distinction between = (assignment) and = (comparison). The statement A=B=C: means "compare B with C and assign the result (either '1'B or 'O'B) to A, performing type conversion if necessary." (4) Assignments that involve conversion should be avoided if possible (see section 1.f.2., below). (5) In the case of initialization of or assignment to a fixed length string: if the assigned value is shorter than the string, it is extended on th~ right with blanks (for a character string) or zeros (for bit strings). For example: DCL A CHAR(6), B CHAR(3) INIT('CR'): A=B: After the execution of the above statements, B would contain CRb, and A would contain CRbbbb. (6) It is not possible to assign a cross section of an array of structures in a single statement; the whole of an array of structures, or a single element may be referenced, but not a cross section. (I) Programming Techniques 107 The value of I is now 1.062S. This is because .1 is converted to FIXED BINARY(S~4), so that the nearest binary approximation is 0.0001B (no rounding occurs). The decimal equivalent of this is .062S. A better result would have been achieved by specifying .1000 in place of .1. (See also item (f) below.) (7) When SIZE is disabled, the result of an assignment which would have raised SIZE is unpredictable: FIXED BINARY: The result of an assignment here which includes, for instance, source language assignments and the conversions implied by parameter matching may be to raise FIXEDOVERFLOW. FIXED DECIMAL: Truncation to the nearest byte may occur, without raising an interrupt. If the target precision is even, an extra digit may be inserted in the high-order byte. (b) If arithmetic is performed on character string data, the intermediate results are held in the maximum precision: DCL A CHAR(6) INIT('12304S'); DCL B FIXED(S,2); B=A; /*B HAS VALUE 123.4S*/ 3=A+A; /*B HAS VALUE 246.00*/ (1) The rules for expression evaluation should be carefully noted, with particular reference to priority of operations. The following examples show the kind of mistake that can occur: X>YIZ is not equivalent to X>YIX>Z Dut is equivalent to (X>Y) IZ x>y>Z is not equivalent to X>Y&X>Z but is equivalent to (X>Y»Z The clause IF A=BI IC is equivalent to IF A=(BI IC),not to IF (A=B)] IC All operation sequences of equal priority are evaluated left to right~ except for **, prefix +, prefix -, and " which are evaluated right to lefto Thus, the statement is equivalent to A=B**(-(C**D»; The normal use of parentheses is to modify the rules of priority; however, it may be convenient to use redundant parentheses as a safeguard or to clarify the operation. (2) Conversion is governed by comprehensive rules which must be thoroughly understood if unnecessary trouble is to be avoided. Some examples of the effect of conversion follow. ~08 (c) The rules for arithmetic to bit string conversion affect assignment to a bit string from a decimal constant: DCL A BIT(1), D BIT(S); A=1i /*A HAS VALUE 'O'B*/ 0=1; /*D HAS VALUE '00010'B*/ D='1'Bi /*D HAS VALUE '10000'B*/ IF A=1 THEN GO TO Y; ELSE GO TO Xi The branch will be to X, because the assignment to A resulted in the following sequence of actions: (1) The decimal constant, 1, is assumed to be FIXED DECIMAL (1,0) and is assigned to temporary storage with the attributes FIXED BINARY(4,0), taking the value '0001'B; (2) This value is now treated as a bit string of length (4), so that it becomes '0001'B; (3) The resultant bit string is assigned to A. Since A has a declared length of 1, and the value to be assigned has acquired a length of 4, truncation occurs at the right, and A has a final value of 'O'B. (a) DECIMAL FIXED to BINARY FIXED can cause unexpected results if fractions are involved: To perform the comparison op~ra tion in the IF statement, 'O'B and 1 are converted to FIXED BINARY and compared arithmetically. They are unequal, giving a result of "false" for the relationship A=1. DCL I FIXED BIN(31,S) INIT(1); 1=1+.1; In the first assignment to 0, a sequence of actions similar to that described for A takes place. except that the value is extended at the right with a zero, because D has a declared length that is 1 greater than that of the value to be assigned. Cd) Assignment of arithmetic values to character strings involves conversion according to the rules for LIST-directed output. Example DCL A CHAR(4), B CHAR(7) : A='O'; /*A HAS VALUE 'Obbb'*/ A=O: /*A HAS VALUE 'bbbO'*/ B=1234567; /*B HAS VALUE 'bbb1234'*/ Note: The three blanks are necessary to allow for the possibility of a minus sign and/or a decimal or binary point, with provision for a single leading zero before the point. Example 2 DCL CTLNO CHAR(S) INIT('O'); DO I=1 TO 100; CTLNO=CTLNO+1; fully converted to arithmetic type for the second iteration of the loop .. Ce) FIXED division can result in unexpected overflows or truncation. For example. the expression 25+1/3 would yield a value of 5.33 ••• 3. To obtain a result of 25~33 •• _3, it would be necessary to write 25+01/3 The explanation is that constants have the precision and scale factor with which they are written, while FIXED division results in a value at maximum implementationdefined precisiono The results of the two evaluations are reached as follows: r-------T-------T-----------------, 1 1 Preen/I I I I Item I Scale I I Factorl I I Result t-------+-------+-----------------~ In this example, a conversion error occurs because of the following sequence of actions: 1 (1,0) I 1 I (1,0) 1 3 1(15,14)10_33333333333333 1 (2.0) I 25 125+1/3 I (15,14) 15 .. 33333333333333 I I 1 (truncation on 1 1 I left: 1 1 I FIXEDOVERFLOW 1 I 1 would be raised I I I unless disabled) (1) The initial value of CTLNO, that is, 'Obbbbbbb', is converted to FIXED DECIMAL(5,0) for the addition, giving a temporary value of 00000. 1 (2,0) I 01 I I (1.0) ] 3 I 101/3 1 (15,13) 100 .. 3333333333333 1 125 I (2,0) 1 25 i 125+01/31(15,13)]25.3333333333333 L _______ L _______ L _________________ J1 END; (2) The decimal constant, 1. assumed to be FIXED DECIMAL(1,0), is added; in accordance with the rules for addition, the precision of the result is (6,0), giving a value of 000001 .. (3) This value is now converted to a character string of length 9, value 'bbbbbbbb1', in preparation for the assignment back to CTLNO. (4) Because CrLNO has a length of 8, the assignment causes truncation at the right; thus. CTLNO has a final value that consists entirely of blanks. This value cannot be success- I 1 I 3 I 1/3 I 25 I I 1 I I I I I I I ~-------+-------+-----------------~ 101 I 3 (f> Checking of a picture is performed only on assignment into the picture variable: DCL A PIC'999999', B CHAR(6) DEF A, C CHAR(6); 3=' ABCDEF' ; C=A; /*WILL NOT RAISE CONV CONDITION*/ A=C; /*WILL RAISE CONV*/ Note also above) : (A, B, C as declared A=123456; /*A HAS VALUE 123456*/ /*B HAS VALUE '123456'*/ Programming Techniques 109 C=123456; /*C HAS VALUE 'bbb123'*/ C=A; /*C HAS VALUE '123456'*/ DECIMAL scalar with a even precision (P,Q) may effective precision of (P+1,Q), as the high-order byte may not be non-zero. The SIZE condition can be used to eliminate this effect: Five iterations would result if the DO statement were replaced by (g) A FIXED declared have an DCL (A,B,C) FIXED DECIMAL (6,0); ON SIZE; ITEMP=A/2; DO I=1 TO ITEMP; (4) DO groups cannot be used as ON-units. (5) Upper and lower bounds of iterative DO groups are computed once only, even if the variables involved are reassigned within the group. This applies also to the BY expression. (SIZE): A = B + C; Any new values assigned to the variables involved would take effect only if the DO group was started again. This ensures that the high-order byte of A is zero after the assignment. (1) The scope of a condition prefix applied to a DO statement is limited to execution of the statement itself; it does not apply to execution of the entire group. (6) In a DO group with both a control variable and a WHILE clause, the evaluation and testing of the WHILE expression is carried out only after determination (from the value of the control variable) that iteration may be performed. For example, the following group would be executed at most once: DO I=1 WHILE(X>Y); (2) An iterative DO group is not executed if the terminating condition is satisfied at initialization: END; I=6; DO J=I TO 4; X=X+J; END; (7) I is frequently used as the control variable in a DO group, for example: DO 1=1 TO 10; x is not altered by this group, since BY 1 is implied. Iterations can step backwards, and if BY -1 had been specified, three iterations would have taken place. Within the scope of this implicit declaration, I might be contextually declared as a pointer, for example: DCL X BASED(I); (3) Expressions in a DO statement are assigned to temporaries with the same characteristics as the expression, not the variable. For example: DCL A DECIMAL FIXED(5,O); A=10; DO 1= 1 ro A/ 2; The two statements are in conflict and will produce a diagnostic message. When I is a pointer variable~ it can only be used in a DO group in one of the following ways: 1. END; This loop will not be executed~ because A/2 has decimal precision (~~,10), which, on conversion to binary (for comparison with I), becomes binary (31,34). 110 DCL (P, lA, IB, IC) POINTER; DO P=IA,IB,IC; 2. DCL (P, IA) POINTER; DO WHILE(P=IA); :i.e (1) Array arithmetic should be thought of as a convenient way of specifying an iterative computation4 For example: DCL A(10,20); A=A/AC 1,1); strings (1) Assignments made to a varying string by means of the SUBSTR pseudo-variable do not set the length of the string4 A varying string initially has an undefined length, so that if all assignments to the string are made using the SUBSTR pseudo-variable, the string still has an undefined length and cannot be successfully assigned to another variable or written out4 (2) The user must ensure that the lengths of intermediate results of string expressions do not exceed 32767 bytes. This applies particularly to variable string lengths, as there is no objecttime length checking. (I) has the same effect as DCL A(10,20); DO 1=1 TO 10; DO J=1 TO 20; A(I,J)=A(I,J)/A(1,1); END; END; Note that the effect is to change the value of A(1,1) only, since the first iteration would produce a value of 1 for A(1,1). If the programmer wished to divide each element of A by the original value of A(1,1), he could write (1) When UNSPEC is used as a pseudovariable, the expression on the right is converted to a bit string. Consequently, the expression must not be invalid for such conversion; for example, if the expression is a character string containing characters other than 0 or 1, a conversion error will result. (~) Note the correct positioning of the ON statement. If the specified action is to apply when the named condition is raised by a given statement, the ON statement must be executed before that statement. The statements: B=A(1,1) ; A=A/B; or alternatively, DCL A ( 10, 20) , B(10,20) ; B=A/A (1, 1) ; (2) Note the plication: effect of array multi- DCL (A,B,C) (10,10); A=B*C; This does not effect matrix multiplication; it is equivalent to: DCL (A,B.C) (10,10); DO 1=1 TO 10; DO J=1 TO 10; A(I,J)=B(I,J)*C(I,J); END; END; GET FILE CACCTS) LIST (A,B~C); ON TRANSMIT (ACCTS) GO TO TRERR; would result in the ERROR condition being raised in the event of a transmission error during the first GET operation, and the required branch would not be taken (assuming that no previous ON statement applies). Furthermore, the ON statement would be executed after each execution of the GE'l' statement. (2) An ON-unit cannot be entered by means of a GOTO statement4 To execute an ON-unit deliberately, the SIGNAL statement can be used. Programming Techniques 111 (3) CONVERSION ON-units entered as a result of an invalid conversion (as opposed to SIGNAL) should either change the invalid character (by means of the ON SOURCE or ONCHAR pseudo-variable), or else terminate with a GOTO statement. Otherwise, the system will print a message and raise the ERROR condition. (4) At normal exit from an AREA ON-unit, the standard system actio~ is to try again to make the alloc?tion. As a result the ON unit will be entered again, and an indefinite loop will be created. To avoid this, the amount allocated should be modified in the ON unit, for example, by using the EMPTY built-in function or by changing a pointer variable. (1) The UNDEFINEDFILE condition may be raised if a STREAM file is reopened with attributes or options that conflict with attributes, options, or parameters previously specified for it. For example, if a file originally opened with a LINESIZE of 100 is subsequently reopened with a LINESIZE of 131, the UNDEFINEDFILE condition will be raised if the DCB sUbparameter BLKSIZE is not specified on the DD card, or if it is specified as less than 132. Difficulties of this nature can be avoided by the use of different file names, or by using the same file name with different TITLE option specifications. (I) (2) The UNDEFINEDFILE condition is raised not only by conflicting language attributes (such as DIRECT with PRINT), but also by the following: Ca) Block size smaller than record size. This condition is not raised if spanned (VSor VBS-format) records are used. (b) LINESIZE maximum. exceeding the permitted (f) Attempting to open an INDEXED data set for DIRECT OUTPUT. (g) Attempting to open a CONSECUTIVE data set with DIRECT or KEYED attributes. (h) Specifying an RKP option, for an INDEXED data set, with a value resulting in KEYLEN+RKP exceeding LRECL. (i) Specifying a V-format logical record length of less than 18 bytes for STREAM data sets. (j) Specifyingl for F-format blocked records, a block size which is not an integral multiple of the recordsize. (k) Specifying~ for V-format records, a logical record length that is not at least four bytes smaller than the specified block size. (1) Attempting to open a paper-tape reader for OUTPUT or UPDATE. (m) Attempting to open a file with the UNBUFFERED attribute for blocked records. (n) Attempting to use blocked records in the system input stream (SYSIN DD DATA or SYSIN DD *) with an UNBUFFERED file. The default record format for the system input stream is FB-format. Since this stream is not checked on input, the presence of FB-format records will not be detected until an attempt is made to open the file, when UNDEFINEDFILE will be raised. ~Q£~~ If the UNDEFINEDFILE condition raised because either the key length or the block size is not specified, a subsequent attempt to open the file will not raise this condition again. 1S (I) (c) Blocked records specified for REGIONAL organization. (d) U- or V-format records specified fOI INDEXED, REGIONAL(1), or REGIONAL(2) organizations. (e) KEYLEN not specified for creation of INDEXED, REGIONAL(2), or REGIONAL(3) data sets. 112 (3) If a file is to be used for both input and output, it must not be declared with either the INPUT or the OUTPUT attribute. The required option can be specified on the OPEN statement. Th~re must be no conflict between file attributes specified in the declaration and those specified by the OPEN statement. (4) Input/output lists must be surrounded by a pair of parentheses: so must iteration lists. Therefore, two pairs of outer parentheses are required in GET LIST «A(I) DO I=1 TO N»: (5) The last eight bytes of a source key to access a regional data set must be the character string representation of a fixed decimal integer. When gener~ ating the key, the rules for arithmetic to character string conversion should be considered. For example, the following group would be in error: PUT EDIT (A) (A(5)"F(5,2»; (11)1 Arrays are transmitted in row rna jor order (e.g., A(1,1), A(1,2), A(1,3), A(2,1), etc.) The default for I is FIXED BINARY(15,0), which requires not Sbut 9 characters to contain the character string representation of the arithmetic values. Note that the file must have the KEYED attribute if the KEY, KEYFROM, or KEYTO options are to be used in any input/output statement referring to that file. (7) The standard file names SYSIN and SYSPRINT are implicit only in GET and PUT statements. Any other reference, such as those in ON statements or RECORD-oriented input/output statements, must be explicit. (S) PAGESIZE and LINESIZE are not file attributes, that is, they cannot be included in a DECLARE statement for the file: they are options on the OPEN statement. (9) When an EDIT-directed data list is exhausted, no fu~ther format items will be processed, even if the next format item does not require a matching data item. For example: DCL A FIXED(5), B FIXED(5,2); GET EDIT (A,B) (F(5).F(5,2),X(70»; The X(70) format item will not be processed. To read a following card with data in the first ten columns only, the SKIP option can be used: GET EDIT (A,B) (F(5). F(5,2» DCL 1 A, 2 B CHAR(5), 2 C FIXED(5,2); B will be matched with the A(5) item, and C will be matched with the F(5,2) item. DCL KEYS CHAR(S); DO I=1 TO ~O: KEYS=I: WRITE FILE(F) FROM (R) KEYFROM (KEYS); END; (6 ) number of scalar elements in the array or structure; thus if more than one format item appears in the format list, successive elements will be matched with successive format items. For example: SKIP; (10) The number of data items represented by an array or structure name appearing in a data list is equal to the (12) Strings used as input data for GET DATA and GET LIST must be enclosed in quotation marks. (13) The 4S-character representation of a semicolon ( •• ) is not recognized as a semicolon if it appears in a DATAdirected input stream; the 11-S-6 punch must be used. (I) (14) If a new record is added by DIRECT access to an INDEXED data set whose overflow areas are already full, a record will be irretrievacly lost. The position of the new record, in relation to the existing records on the track, will determine whether it is the new record or an existing one which is lost. If the new record would follow the last existing record on tbe track, the new record will be lost. otherwise, the last existing record on the track will be lost. In either case, the KEY condition will be raised. (15) The user must be aware of two limitations of PUT DATA; (i.e., no data list). Firstly, its use with an ON statement is restricted because the data known to PUT DATA would be the data known at the point of the ON unit. Secondly, and more serious. the data will be put out as normal datadirected output, which means that any unallocated or unassigned data may raise a CONVERSION or other cond-i tiona If the ON-unit ON ERROR PUT DATA; is used in an outer block, it must be remembered that variables in inner blocks are not known and therefore programming Techniques 113 will not be dumped. It would be a good practice, therefore, to repeat the ON-unit in all inner blocks during debuggL1g. If an error does occur during execution of the PUT DATA statement, and this statem9nt is within an ON ERROR unit, the program will recursively enter the ERROR unit until no more storage remains for the DSA. Since this could be wasteful of machine time and printout, the ERROR unit should be turned off once it is activated. Instead of: ON ERROR PUT DATA; ON ERROR BEGIN; ON ERROR SYSTEM; PUT DATA; END; When PUT DATA is used without a datalist every variable known at that point in the program is transmitted in data-directed output format to the specified file. Users of this facility, however, should note that: (16) Qse_2f_!2£~~~_~2Q~I~Q. A pointer set in READ SET or LOCATE SET may not be valid beyond the next operation on the file, or beyond a CLOSE statement. In OUTPUT files, wRIrE and LOCATE statements can be freely mixed. For UPDATE files, the REWRITE statement with no options must be used if it is required to rewrite an updated record. The result of this REWRITE is always to rewrite the contents of the last buffer onto the data set. For example: 114 3 READ FILE (F) SET (P); 5 P->R 7 REWRITE FILE (F); S; 15 REWRITE FILE (F); ~9 REWRITE FILE (F) FROM (X); There are two cases where it is not possible to check for the KEY condition on a LOCATE statement until transmission of a record is attempted. (This will generally occur on execution of the next PL/I output statement for this file.) a) Uninitialized FIXED DECIMAL data may raise the CONVERSION condition or a data interrupt. Unallocated CONTROLLED data will cause arbitrary values to be printed and, in the case of FIXED DECIMAL, may raise the CONVERSION condition or a data interrupt. READ FILE (P) INTO (X); Statement 7 will rewrite a record updated in the buffer. Statement 15 will only rewrite exactly what was read, i.e.# it will not change the data set at all. ERROR, Statement 19 will raise since there is no preceding READ statement. better code would be: b) ~1 These are: 1. When there is insufficient room specified region to output the on a REGIONAL(3) V- or U-format Neither the record raising the tion nor the current record are mitted. 2. When the embedded key differs from the KEYFROM in an ISAM file. in the record file. conditrans- If this LOCATE statement is to transmit the last record before the file is closed, in case 1, the record is not transmitted, and in the second case, the embedded key is overwritten with the KEYFROM string, and the record is transmitted. Thus the condition may be raised by a CLOSE statement or by an END statement that causes implicit closing. Until the error is corrected, the record cannot be transmitted nor can any further operation be carried out on the file. If a LOCATE statement was used in the addition of KEYED records to any type of REGIONAL data set then. if RECORD condition is raised, the key value presented at subsequent operations must not be less than the current one. (18) Allocation and ffe~ing of BASED Variables: If a reference is made, at object time, to a BASED variable that has not been allocated storage, an unpredictable interrupt (protection, addressing or specification) may occur. use of input/output facilities; and additional hints. (19) Areas, pointers, offsets and structures containing any of these cannot be used with STREAM I/O. PUT DATA cannot be used with BASED variables. The following measures are suggested for use where compilation time is an important factor. When a BASED variable is freed, the associated pointer no longer contains useful information. This pointer can only be used again if: 1. 2. It is re-allocated with the another BASED variable, or, A value is assigned to offset or another pointer same or (2) Keep it from an A BASED variable allocated in an must be freed in that area. example: area For DCL A AREA, B BASED (X); ALLOCATE B IN (A); FREE B; FREE B IN (A); LEGAL the number of BEGIN blocks and procedures to a minimum. Do not use BEGIN-END to effect statement grouping; this is more simply obtained by use of DO-groups. (3) Try to avoid LIST, DECK, options. using the ATR, XREF, and CHAR48 compiler (4) Avoid features which give rise to large dictionary entries and large amounts of text. For example, 1* ILLEGAL */ /* (1) Allocate as much storage to the compiler as possible, using the SIZE=999999 option on the EXEC statement. This reduces the chances of bringing the spill mechanism into operation. DCL A PIC '(4000)X'; */ occupies block. In PL/I there are often several different ways of producing a given effect. One of these ways will usually be more efficient from a particular point of view than another, depending largely on the method of implementation of the language features concerned. However, it should be realized at the outset that a primary cause of program inefficiency occurs at the problem definition stage, before any actual programming is done: PLII cannot be used to full advantage unless the problem is defined in terms of PL/I. The purpose of this section is to help the programmer make the best use of the PL/I (F) Compiler. The first two parts are presented from two different viewpoints: a. Improving the speed of compilation b. Improving the speed of execution. The remainder of the section is of common interest, and deals with methods of decreasing the dictionary size: use of storage; use of compile-time facilities; one complete dictionary (5) Use of the following features causes optional compiler phases to be loaded: ALLOCATE, LIKE, USES/SETS. CHECK, iSUB defining, built-in functions with aggregate arguments, GENERIC entry names, DELAY/DISPLAY. If any of these features can be completely avoided without extensively increasing the source code, there will be a corresponding increase in compilation speed. (6) On re-runs, further slight increases in efficiency can be obtained by (a) removing all and data; unreferenced labels (b) correcting §!ll source errors, and, where possible, m1n1m1zing the number of diagnostic messages produced, including such messages as "FILE/STRING option missing in GET/PUT statement"; (c) subdividing the program if the auxiliary storage has been used: (d) specifying the NOSOURCE option: (e) specifying the FLAGS option. Programming Techniques 115 See also tionary. 2.c. Decreasing Size of Dic- (6) Avoid extensive use of adjustable arrays and/or CONTROLLED storage. (7) Use constants wherever instead of expressions. The following measures are suggested for use where execution time is an important factor. Note that while some of these measures may slow down the compilation, this is offset by the fact that others will accelerate it. In the main, there should be no serious increase in compilation time. (1) Make use of the OPT=01 option. the STMT option. possible (8) Exercise care in specifying precision. For example, DCL A FIXED DEC(8,4), B FIXED DEC(10,2), C FIXED DEC(10,1); Avoid C=A+Bi (2) Avoid unnecessary program segmentation and block structure; all procedures, ON-units and BEGIN blocks need prologues and epilogues, the initialization and housekeeping for which carry a considerable overheado (Prologues and epilogues are described in Appendix C of this publication.) Whenever possible, use GOTO or IF statements to control program logic, rather than the CALL statement. (3) Branching in IF statements can be improved by using DO and END statements to bracket a THEN clause, rather than using a GOTO statement in the THEN clause. For example: IF A=B THEN DO; C=D; E=F; END; L: etc. is more efficient than IF A,=B THEN GO TO L; C=D; E=F; L: etc. (4) When GO TO is used in an IF st~tement, more efficient object code is produced by tha GO TO if it refers to a label within the same block rather than to a label outside the block. (5) Keep IF clauses simple; separate any multiple conditions into a series of simple IF statements. For example: IF A=B THEN IF C=D THEN IF E=F THEN GO TO Mi This requires almost twice as much code as it would if B had been declared (10,4), because tho: evaluation of A+B requires a scale factor of 4. (9) Use the PICTURE attribute only when necessary. For example, use FIXED DECIMAL(5,2) instead of PIC'999V99'. If a picture field is used in more than one arithmetic operation, convert it once and then use the new form in each operation. This holds for any conversion required more than once. If it is necessary to use data with the PICTURE attribute in arithmetic expressions, use pictures that will be handled in-line, as this considerably reduces execution time. Pictures with all 9s, a V and a non-drifting sign are particularly useful. For example: '999' '$99v99' , s99' 'V999' (10) Internal switches and counters, and data involved in substantial computation or used for subscripts, should be declared BINARY; data required for output should be kept in DECIMAL form. (11) Keep data conversions to a minimum. Some possible methods follow: (a) Use additional variables. For example, if a problem specifies that a character variable has to be regularly incremented by 1, DCL CTLNO CHAR(18); is more efficient than CTLNO = CTLNO+1; IF (A=B)&(C=D)&(E=F) THEN GO TO Mi 116 requires two conversions, while DCL CTLNO CHAR(S), DCTLNO DEC FIXED: (c) DCTLNO=DCTLNO+1: CTLNO=DCTLNO: DCL SW BIT(S) INIT('1·B): IF SW '10000000'B THEN DO; requires only one conversion. (b) Take special care to make structures match when it is intended to move data from one structure to another. (c) Avoid mixed mode arithmetic, especially the use of character strings in arithmetic calculations. 2. M~l~~E1e s~~~ches (a) DCL B BIT(8); B (12) Declare arrays in the procedure in which they are used, instead of passing them as arguments. Declare subscript variables in the block in which they are used, as FIXED BINARY. (13) In multiple assignments to subscripted variables, restrict the assignment to three variables. '11100000'B: IF B (b) (14) If a subscripted item is referred tc more than once with the same subscript, assign the element to a scalar variable: THEN DO; DCL B BIT(3); B R={A(I)+1/A(I»+A(I)**A(I) ; '11~OOOOO'B '111'B; IF B = '11~'B THEN DO; should be replaced by ASUB=A(I)i R=(ASUB+1/ASUB)+ASUB**ASUB; (15) Bit strings should, if possible, be specified as multiples of eight bits. Bit strings used as logical switches should be specified according to the number of switches required. In the examples below, (a) is preferable to (b), and (b) to (c): (a) DCL SW BIT(1) INIT ('1'B); IF SW THEN DO: (c) DCL R2 I Rl < R2 I Rl > R2 1 ~--------+-------------+------------------+------------------+-------------~ 1 F 1 Truncate R2 1 Excess Rl 1 Excess R2 1 Truncate Rl 1 1 1 I length undefined#1 length undefined 1 I ~--------+-------------+------------------+------------------+-------------~ 1 U V vs 1 Truncate R2*1 1 1 Truncate Rl I 1 VBS I I I 1 I ~--------~-------------~------------------~------------------~-------------~ IR1: Length of record variable I IR2: Actual or maximum length of data set record 1 11 If record variable is a VARYING string, then its current length 1 1 is set equal to MIN(R 2 , maximum length of record variable). 1 12 Rl=current length if the record variable is a V~RYING string. 1 1* If U-format and the file is UNBUFFERED (and requires no hidden 1 1 buffers), truncation occurs, but the RECORD condition cannot be I I raised since this condition cannot be detected. 1 1# A short record read from the data set will raise the TR~NSMIT 1 1 condition; the RECORD condition is raised only if the length of I L 1__________________________________________________________________________ the record variable does not equal LRECL. J1 1 I Record 1 .Figure 28. Situations under which RECORD Condition is raised in RECORD-Oriented I/O 1. File is SEQUENTIAL INDEXED 2. RKP 3. The statement was a REWRITE * (2) the the not the key The the Input/Output Error Recovery: When I/O transmission errors are encountered, exhaustive recovery procedures are performed automatically by data management, so that, upon entry to a TRANSMIT ON-unit, it is unnecessary and impossible to perform further transmission error correction procedures. Synchronization of transmission errors and entry to relevant ON-units can only be guaranteed for input errors. ~n output operation error will be detected in a succeeding output operation, the particular one being dependent upon the blocking factor and the number of allocated buffers. g. (1) Additional Hints Operating System and Job Control External procedures, but not internal procedures, are treated as separate control sections. 126 (a) Do not rely too heavily on default attributes. Explicit declarations help to clarify the source program logic, and in some cases (for example# preciSion) reduce the chance of error. 0 if the KEY condition is raised because embedded key in the record variable or buffer (if there is no FROM option) is equal to the embedded key provided on preceding READ, then ONKEY returns the of the record provided by the READ. length of this key is the length of data set. Declarations and Attributes (b) Variables declared FIXED BINARY or FLOAT BINARY are automatically aligned on the proper word boundary, regardless of whether they are single or part of an aggregate. FIXED DECIMAL variables are stored in packed decimal format and the System/360 decimal instructions are used in operations involving them. FLOAT DECIMAL variables are stored in floating-point format; operations involving them are carried out using the floating-point instruction set. (3) ~ssignments and Initialization (a) High order zeros will be inserted if required on assignment to or initialization of an arithmetic variable: DCL A FIXED DECIMAL (5,2) INIT (12); /*~ HAS VALUE 012.00*/ DCL B FIXED BINARY (15,0); B=12; /*B HAS VALUE 000000000001100B*/ (b) ~rrays may be ini tial ized by assignment sion: DCL from a scalar expres- A(10)~ A=O~ The scalar value will be assigned to each element of the array. Similarly, when a scalar expression is assigned to a structure, its value will be assigned to each element of the structure: DCL IB, 2 C BIT(l), 2 D CHAR(l), 2 E CHAR (4); B=O; As a result of this assignment, the values of the various elements will be: (4) It is possible to transfer from within a DO loop to a label on the END statement for the group. This has the effect of incrementing the control variable without intermediate processing; control will not fall through. It is also possible to transfer out of an iterative DO group before the terminating value of the control variable is reached. (5) Functions The arguments in a function reference can be modified by the function. (6) ON-conditions and ON-units Note the scope of condition prefixes: (SIZE):A:PROC; 'O'B C D 'b' E 'bbbO' (NOSIZE):IF M>N THEN DO; J=E+F; END; DO Groups Iterations can step backwards., and the expression in the WHILE clause can refer to the control variable, e.g., DO I=N+2*L BY END; -x WHILE (1)0); The control variable can be modified within the loop. END A; In the above example, SIZE is disabled only during the evaluation of the expression M>N; SIZE is enabled for the assignment J=E+F. Programming Techniques 127 TESTING PROGRAMS Programs can be checked using the debugging facilities provided by PL/I. When the user is satisfied that his program is working correctly, debugging statements should be removed from the source deck, which is then recompiled to produce an optimum object program ready for execution. The ONCODE built-in function may be used by the programmer in any ON-unit to determine the nature of the errqr or condition which caused entry into that ON-unit. DEBUGGING FACILITIES certain language features are provided in PL/I to assist the programmer to debug his program. The facilities include: Control over handling Standard system action for an ERROR condition raised in a non-tasking environment causes the FINISH condition to be raised. interruptions and error The ability to obtain a trace of active procedures An ON-unit, which has been established by the execution of an ON statement, is entered when the associated ON-condition is raised during execution of PL/I compiled code or of a PL/I library module. Thus, for example, a FIXEDOVERFLOW ON-unit would be entered whenever any of the conditions occur for which the language demands the raising of the FIXEDOVERFLOW condition. Symbolic output communication execution with the program during The use of specific language features proviies the debugging facilities; in addition, the programmer may use his own techniques, such as inserting PUT statements at selected points. Two ON-conditions, ERROR and FINISH, require special explanation. The ERROR condition is raised: 1. Upon execution statement 2. As a result of system action for those ON-conditions for which the language specifies system action to be "comment and raise the ERROR condition" 3. As a result of an error (for which there is no ON-condition) occurring during program execution Control of Interruption and Error Handling Some conditions may be enabled or disabled by means of the prefix option feature, full details of which can be found in the publication IBM System/360 Operating System, PL/I Reference Manua~. In association with this, the programmer may specify his own exit (to be taken when a particular condition occurs) or may cause an interruption by means of the SIGNAL statement. In particular, attention should be paid to the CHECK condition, as this enables the programmer to maintain a close watch on any variables he wishes to nominate. Should the programmer wish to exercise control of a more general nature, he may make use of the ERROR condition and, in his "ON-unit" further analyze the program by means of the ONCODE and ONLOC functions. 128 of a SIGNAL ERROR The FINISH ccndition is raised: 1. Upon execution of a SIGNAL STOP, or EXIT statement FINISH, 2. Upon normal completion of procedure of a PL/I program 3. Upon completion of the action associated with the raising of the ERROR condition, except when a GO TO statement in the ON ERROR unit has resulted in transfer of control out of that unit the MAIN As a general rule, the value of the ON-code returned by the ONCODE function is that of the specific condition which caused entry into the ON-unit. Thus, in an ON CONVERSION unit, the programmer can expect an ON code corresponding to one of the conversion conditions which cause the CONVERSION condition to be raised in PL/I. However, this is not necessarily true when executing an ON ERROR or an ON FINISH unit; the values are as follows: 1. 2. When entered as a result of a SIGNAL ERROR or a SIGNAL FINISH, STOP or EXIT statement. or as a result of normal termination, the ON code values will be those of ERROR or FINISH respectively. When entered for any other reason, the ON code value will be that associated with the error or condition which originally caused the ERROR condition to be raised. The ON-codes and their associated conditions and errors are shown below. The groups and their ON-code ranges are shown in Figures 29 and 30. Language ONconditions are shown in capitals, others in lower case letters.) Condition/Error o 3 4 9 10 20 21 22 Several separate but related occurrences may cause a particular PL/I ON-condition to be raised. For example, the TRANSMIT condition may be raised: 1. By execution statement 2. By occurrence error 3. By occurrence of error of SIGNAL a of an an TRANSMIT input TRANSMIT output TRANSMIT Although it is often useful to know precisely what caused an ON-condition to be raised, at times it will be sufficient simply to know which ON-condition was raised. This will apply particularly if the ONCODE function is used in an ERROR ON-unit after system action has occurred for an ON-condition. The ON codes have therefore been grouped, each group containing the codes associated with a particular ON-condition. From time to time i t may become necessary or desirable to add new ON-codes into a group. Perhaps a group containing one ON-code only may be expanded. rhis fact must be remembered when the ONCODE function is used to determine if a particular PL/I ON-condition has been raised. It is important to test to see whether the ON-code is within the range specified, even if there is only one ON-code in the range; otherwise, when a new set of library modules is used, it may become necessary to recompile the program. When a group contains only one ON-code value, it is impossible to test specifically for the signaled condition. With more than one ON-code in the group, the first in the group represents the signaled condition, provided the program was compiled using a compiler which was released at the same time as the library in which the expansion of the group first appeared. 23 24 40 41 42 50 51 52 53 54 55 56 57 70 80 81 82 83 84 85 90 300 310 320 330 340 341 350 360 361 362 500 510 511 520 600 601 602 603 604 ONCODE function used out of context Source program error FINISH ERROR NAME RECORD (signaled) RECORD (record variable smaller than record size) RECORD (record variable larger than record size) RECORD (attempt to write zero length record) RECORD (zero length record read) TRANSMIT (signaled) TRANSMIT (output) TRANSMIT (input) KEY (signaled) KEY (keyed record not found) KEY (attempt to add duplicate key) KEY (key sequence error) KEY (key conversion error) KEY (key specification error) KEY (keyed relative record/track outside data set limit) KEY (no space available to add keyed record) END FILE UNDEFINEDFILE (siqnaled) UNDEFINEDFILE (attribute conflict) UNDEFINEDFILE (access method not supported) UNDEFINEDFILE (blocksize not specified) UNDEFINEDFILE (file cannot be opened, no DD card) UNDEFINEDFILE (error initializing REGIONAL data set) ENDPAGE OVERFLOW FIX EDOVER FLOW ZERODIVIDE UNDERFLOW SIZE (normal) SIZE (1/0) STRINGRANGE AREA raised in ALLOCATE statement AREA raised in assignment statement AREA signaled CONDITION CHECK (LABEL) CHECK (VARIABLE) SUBSCRIPTRANGE CONVERSION (internal) (signaled) CONVERSION (I/O) CONVERSION (transmit) CONVERSION (error in F-format input) CONVERSION (error in F-format input) (I/O) Testing Programs 129 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 130 CONVERSION (error in F-format input) (transmit) CONVERSION (error in E-format input) CONVERSION (error in E-format input) (I/O) CONVERSION (error in E-format input) (transmit) CONVERSION (error in B-format input) CONVERSION (error in B-format input) (I/O) CONVERSION (error in B-format input) (transmit) CONVERSION (character string to arithmetic) CONVERSION (character string to arithmetic) (I/O) CONVERSION (character string to arithmetic) (transmit) CONVERSION (character string to bit string) CONVERSION (character string to bit string) (I/O) CONVERSION (character string to bit string) (transmit) CONVERSION (character to picture) CONVERSION (character to picture) (I/O) CONVERSION (character to picture) (transmit) CONVERSION (P-format input decimal) CONVERSION (P-format input decimal) (I/O) CONVERSION (P-format input decimal) (transmit) CONVERSION (P-format input character) CONVERSION (P-format input character) (I/O) CONVERSION (P-format input character) (transmit) CONVERSION (P-format input sterling) CONVERSION (P-format input sterl ing) (I/O) CONVERSION (P-format input sterling) (transmit) Attempt to read output file Attempt to write input file GET/PUT string length error Unacceptable output transmission error Print option on non-print file Message length for DISPLAY statements zero Illegal array datum data-directed input REWRITE not immediately preceded by READ GET STRING -- unrecognizable data name Unsupported file operation File type not supported Inexplicable I/O error outstanding READ for update exists No completed READ exists - incorrect NCP value Too many incomplete I/O operations 1015 1016 1017 1018 1019 1500 1501 1504 1505 1506 1507 1508 1509 1510 1511 1514 1515 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 2000 2001 3000 3001 3002 3003 3004 3005 3006 3798 3799 3800 3801 3900 3901 3902 3903 EVENT variable already in use Implicit-OPEN failure - cannot proceed Attempt to REWRITE out of sequence ERROR condition raised if end-offile is encountered before the delimiter while scanning listdirected or data-directed input, or if the field width in the format list of edit-directed input would take the scan beyond the end-offile,. Attempt to close file not opened in current task Short SQRT error Long SQRT error Short LOG error Long LOG error Short SIN error Long SIN error Short TAN error Long TAN error Short ARCTAN error Long ARCTAN error Short ARCTANH error Long ARCTANH error Invalid exponent in short float integer exponentiation Invalid exponent in long float integer exponentiation Invalid exponent in short float general exponentiation Invalid exponent in long float general exponentiation Invalid exponent in complex short float integer exponentiation Invalid exponent in complex long float integer exponentiation Invalid exponent in complex short float general exponentiation Invalid exponent in complex long float general exponentiation Invalid argument in short float complex ARCTAN or ARCTANH Invalid argument in long float complex ARCTAN or ARCTANH Unacceptable DELAY statement Unacceptable use of the TIME builtin function E-format conversion error F-format conversion error A-format conversion error B-format conversion error A-format input error B-format input error Picture character string error ONSOURCE or ONCHAR out of context Improper return from CONVERSION ON-unit Structure length ~ 16**6 bytes Virtual origin of array ~ 16**6 or ~ -16**6 Attempt to wait on inactive and incomplete event Task variable already active Event already being waited on Wait on more than 255 incomplete events r-----------T---------------------------------, Range I Group I I ~-----------+---------------------------------~ 3-5 I As for 1000-9999 I I 10-199 I I/O ON-conditions I I 300-399 I Computational ON-conditions I I 500-549 I Program check-out conditions I I 600-899 I Conversion conditions I 1000-9999 I _________________________________ Error conditions (also 3-5) Il ___________ JI I ~ Figure 29. Main ON-Code Groupings r-----------T-------------------------T-----------T-----------------------------------, Range I Group I Range I Group I I ~-----------+-------------------------+-----------+-----------------------------------~ 0 I ONCODE I 510-519 I CHECK 3 I Source program error I 520-529 I SUBSCRIPTRANGE 4 I FINISH I I 9 I ERROR I 530-599 I (Unallocated) 10-19 I NAME I 600-899 I CONVERSION I 20-39 I RECORD I 900-999 I (Unallocated) I 40-49 I TRANSMIT I 1000-1199 I I/O errors I 50-69 I KEY I 1200-1499 I (Unallocated) I 70-79 I ENDFILE I 1500-1699 I Data processing errors I 80-89 I UNDEFINEDFILE 1700-1999 I (Unallocated) I 90-99 I ENDPAGE 2000-2099 I Unacceptable statement errors I 100-299 I (Unallocated) 2100-2999 I (Unallocated) I 300-309 I OVERFLOW 3000-3499 I Conversion errors I 310-319 I FIXEDOVERFLOW 3500-3799 I (Unallocated) I 320-329 I ZERODIVIDE 3800-3899 I Structure and array errors I 330-339 i UNDERFLOW 3900-3999 I Tasking errors I 340-349 I SIZE 4000-8090 I (Unalloca ted) I 350-359 I STRINGRANGE 8091-8199 I Program interrupt errors I 360-369 I AREA 8200-8999 I (Unallocated) I 370-499 I (Unallocated) 9000-9999 I System errors Il ___________ 500-509 I _________________________ CONDITION ___________ LI ___________________________________ JI I I I I I ~ Figure 30. 3904 3905 3906 3907 3908 8091 8092 8093 8094 8095 8096 8097 9000 9002 ~ Detailed ON-Code Groupings Active event variable as argument to COMPLETION pseudo-variable Invalid task variable as argument to PRIORITY pseudo-variable Event variable active in assignment statement Event variable already active Attempt to wait on an I/O event in wrong task Invalid operation Privileged operation EXECUTE statement executed Protection violation Addressing interruption Specification interruption Data interruption Too many active ON-units and entry parameter procedures Invalid free storage (main procedure) statement. However, this technique has the limitation that it records only procedures which are active at the time when the condition occurs, because of the use of dynamic storage; when the storage is released it is immediately available for some other use, and so cannot be used to maintain a full trace. If a full flow trace is required, then this should be programmed, either by means of the SIGNAL statement in association with an ON statement and ON-unit, or by specifying all procedure names in a CHECK list with the appropriate action in an ON-unit. The format of the SNAP output is of the following: 1. CONDITION xxxx OCCURRED hhhhh FROM ENTRY POINT E1 2. CONDITION xxxx OCCURRED AT OFFSET ± hhhhh FROM ENTRY POINT OF xxxx ON-UNIT Trace of Active Procedures A trace of active procedures may be obtained by use of the SNAP option in an ON either AT OFFSET ± Testing Programs 131 followed by: CALLED FROM PROCEDURE WITH ENTRY POINT E2 CALLED FROM PROCEDURE WITH ENTRY POINT E3 etc., etc. If the statement number compiler option is specified, the SNAP output message will also contain IN STATEMENT nnnnn immediately following the word OCCURRED in the first line, or after the word CALLED in subsequent lines. The notation nnnnn gives the number of the statement in which the condition occurred. The characters that replace xxxx are an abbreviated form of the name of the ONcondition which has occurred (the abbreviations are given in Figure 31). hhhhh is a hexadecimal offset; El, E2, etc., are entry point names indicating the actual entry points used to enter the procedure in which the condition occurred, or from which the next named entry point was called. If a condition occurs in an ON-unit, then the entry point name in the second line will be that of the procedure from which the ON-unit was entered, not necessarily the procedure in which the ON-unit is situated. r--------------------T--------------------, Condition I Abbreviation I I ~--------------------+--------------------~ OVERFLOW OFL SIZE SIZE F IXEDOVE'R FLOW FOFL SUBSCRIPTRANGE SUBRG CHECK CHCK CONDITION COND FINISH FIN ERROR ERR ZERODIVIDE ZDIV UNDERFLOW UFL STRINGRANGE STRG NAME NAME RECORD REC TRANSMIT TMIT I KEY KEY I ENDFILE ENDF I UNDF UNDEFINEDFILE I CONVERSION CONV I ENDPAGE ENDP L- __________________ _ IL ____________________ Figure 31. CALLED FROM PROCEDURE WITH ENTRY POINT E2 etc. The one exception is the case of SNAP SYSTEM for the CHECK conditions. In these cases a standard SNAP message will be written, followed by the standard system action print-out for the CHECK condition. symbolic output The data-directed input/output features may be used instead of, or in addition to, the CHECK condition handling. The programmer may use data-directed output to obtain status information in terms of the symbols used in the source program. Refer to the publication IBM System/360 Operating System'I PL/I: Refrence Manual., for a full description of this feature. communication with the Program The DISPLAY statement provides a means of communicating with the program while it is being executed. The two forms in which an operator message can appear on the typewriter are as follows: Without the REPLY option, which gives the unaltered character string specified by the programmer. With the REPLY option, which gives the character string specified by the programmer preceded by a two-digit code generated by the Operating System. The operator must use this code as a prefix to his reply message. The EVENT option may be used here. User Requested Dump An additional debugging feature is the ability to obtain a storage dump at any point in the program. A dump is obtained by the statement: Abbreviations for ON-Conditions CALL dump identifier [ (argument) ] ; If SNAP SYSTEM has been specified in a programmer's ON statement, the system action message described in the section called "Object Time Diagnostic Messages" will be printed, followed by the trace of active procedures: 132 The lowing dump identifier is one of the fol- IHEDUMP or IHEDUMT terminate - dump all core and IHEDUMJ The dump will include information such as register values, load list, contents of PIE, and a storage dump. To help the user interpret the dumps, a directory is printed out at the start of each dump. This directory includes: 1. The contents of the SYSPRINT buffers, if the file is open. 2. The name of the files currently open, with the addresses of the relevant control blocks. file 3. The name of the current file. 4. The addresses of the save areas and of other areas of special interest. The argument in the CALL statement is optional; if it is used the dump identifier must be declared as ENTRY(FIXED BINARY). The argument is an expression that is evaluated at execution-time; the result is a fixed binary integer that appears in the heading of the dump. This integer must be in the range 0 to 127, a number outside this range is replaced by 127. If no DD card is supplied, or if an unrecoverable error is detected during the output, e.g. incorrect chaining 'of save areas, then a standard operating system ABEND dump will occur and will terminate the job step. For more information on storage dumps and the information they provide, see IBM £ystem/360 Operating system: Messages, Completion Codes .and Storage Dumps, Form C28-6631. User Completion Codes for Abnormal Termination PL/I programs can terminate abnormally in six different ways: 1. EXIT (abnormal termination of a task) 2. STOP (abnormal program) 3. This results in'execution of the ABEND macro. or IHEDUMC - dump all core and continue processing termination of 6. An ABEND in OS/360 in the major task. In cases (5) and (6) above, a full storage dump will be printed, provided that a SYSABEND DD card has been used. If no such card exists, and MFT or PCP is being used~ an indicative dump will be printed. If~ in cases (1) to (5), a program terminates abnormally in a non-tasking program. a completion code is printed out. In the first four cases listed above, the completion code has a value which is the sum of a basic code plus the current value of the return code. (The return code can be set by the programmer or may have a default value of zero - see the chapter "Managing Programs".) The basic code values are: EXIT and STOP ERROR CALL IBEDUMP Interrupt in error handler 1000 2000 3000 4000 When a program terminates abnormally with a completion code of 4000, this means that disastrous error has occurred, such as a control block being overwritten. When a program terminates abnormally with a completion code of 3333 this means that a disastrous error has occurred in the dump output modules. When the operating system terminates a program, the user completion code is zero, and the system completion code is the operating system completion code. There are two instances in which, since execution of the program has never commenced, no user completion code is issued. Instead, a special return code value is generated by the PL/I library and then passed to the return code register of the operating system in the usual way. These two instances, and the return codes generated, are: the If the ERROR condition is raised and there is neither an ERROR ON-unit nor a FINISH ON-unit with a GO TC statement. 4. CALL IHEDUMP or CALL IHEDUMT. 5. If an interrupt occurs during execution of the error handler routine. Pseudo-register vector too long No MAIN procedure 400L: 4008 All the 4000-series codes mentioned above are accompanied by a message at the operator's console. (For further explanation of the underlying causes of these messages, refer to the explanations given for each message in "Object-Time Error Messages" in Appendix G of this publication. ) Testing Programs 133 Return Codes Return codes are set statement CALL IHESARC. 134 by use of the APPENDIX A: DATA FORMATS COMPILER INPUT REPRESENTATION OF DATA Source records must be in one of the two following formats: The representation of data in System/360 storage is described in the following paragraphs, together with the various permitted precisions and lengths of such data. Fixed-length records of logical record length up to 100 characters. Blocked records are acceptable. The maximum block size must be a multiple of the logical record length and must be one capable of being accommodated by the SIZE opti on. However, blocked records are not accepted from paper tape. Fixed-length records on:" paper tape have a fixed number of characters after translation; the numberl of characters before translation is not fixed. Undefined format records of to 100 characters. length up The format, logical record length, and block size may be specified in the DCB operand in the DD statement, they may be taken from the data set label, or they may be implied from the occurrence of the source file in the input stream. If not specified, undefined format is assumed with a block size of 100. In order to use the undefined format, the identity of SYSIN must be switched to the appropriate input device for the duration of the compilation job-step by means of a DD statement, e~ther explicit or cataloged, for that job-step. The DD statement must specify u-type record format, and if the input is of paper tape origin, the appropriate translate mode must also be specified, depending on the nature of the tape code. The user must ensure that an end-of-record indication is given by the correct code on the paper tape, with the paper tape reader keys set correctly to interpret the code. In both cases the source listing option (SOURCE) causes the complete input record to be printed. The SORMGIN option specifies the area within the record which contains PLII source text. The rest of the record may be used for identification purposes. If SORMGIN is not specified, the standard default values of 2 and 72 are assumed (see the section called "Compiler Processing" for a description of the SORMGIN option). Coded Arithmetic Data By virtue of declared attributes, the following eight types of coded arithmetic data forms may exist: REAL FIXED DECIMAL prec1s10n (P,Q) data is represented in the packed-decimal format. The P. digits occupy FLOOR {(P + 2)/2) bytes, aligned on any byte. When P is even, the effective precision is (P + l,Q) for arithmetic operations other than division. An unwanted high-order digit may exist, therefore, and may remain undetected and be included in further operations. It can only be eliminated if SIZE is enabled. The maximum precision avaialble is 15 digits. Arithmetic operations are performed on P-digit integers, according to the scale factor Q. The scale factor is not directly associated in storage with the data, but is specified in a data element descriptor (DED) passed to the library for operations involving the data. The default precision is 5,0. REAL FIXED BINARY precision (P,Q) data is represented in the fixed-point hinary format. The P digits occupy four bytes, word aligned (half-word or double-word precision is not supported). The maximum precision is 31 digits. Arithmetic operations are performed as for real fixed decimal data; again, the scale factor is supplied to the library via a DED. The default precision is 15,0. REAL FLOAT DECIMAL precision (P) data is represented in the hexadecimal floatingpoint format. Before and after arithmetic operations, the data is normalized in storage. The maximum available precision is 16 digits. If the specified precision ~s less than or equal to 6, the data occupies four bytes, word aligned (short floating-point form). If the specified precision is 7 or more, the data occupies eight bytes, double-word aligned (long floating-point form). The default precision is 6. Appendix A: Data Formats 135 r-------------------T--------------------T--------------------T--------------------, Declared Default Maximum Default I I attributes I I attributes I I precision I I precision I I ~-------------------+--------------------+--------------------+--------------------~ I I I Initial letter: A --> H, 0 --> Z I --> N I I I REAL, FLOAT, DECIMAL REAL,FIXED,BINARY I I I I I I 6 decimal digits 15 bits I I I ~-------------------+--------------------+--------------------+--------------------~ 53 bits I 21 bits I 16 decimal digits I 6 decimal digits I 15 decimal digits I 5 decimal digits I 16 decimal digits I 6 decimal digits I 16 decimal digits I 6 decimal digits I r-------------------+--------------------+------------ --------+--------------------~ I FIXED BINARY I REAL I 31 bits I 15 bits I I FIXED DECIMAL I REAL I 15 decimal digits I 5 decimal digits I I FLOAT BINARY I REAL I 53 bits I 21 bits I I FLOAT DECIMAL I REAL I 16 decimal digits I 6 decimal digits I ~-----------------.--+--------------------+--------------------+--------------------~ I REAL1 FIXED I DECIMAL I 15 decimal digits I 5 decimal digits I I REAL1 FLOAT I DECIMAL I 16 decimal digits I 6 decimal digits I I REAL1 BINARY I FLOAT I 53 bits I 21 bits I I REAL1 DECIMAL I FLOAT I 16 decimal digits I 6 decimal digits I I I I I I BINARY DECIMAL FIXED FLOAT REAL1 I I I I I REAL, FLOAT REAL, FLOAT REAL, DECIMAL REAL, DECIMAL FLOAT, DECIMAL I I I I I ~-------------------~--------------------~--------------------~--------------------~ I Note 1: If COMPLEX is declared instead of REAL, the attributes are the same as I for REAL and are applied to each Jf the two arguments. lI __________________________________________________________________________________ JI Figure 32. Attributes and Precisions for Coded Arithmetic Data REAL FLOAT BINARY precision (P) data is represented in the hexadecimal floatingpoint format. Before ann after arithmetic operations the data is normalized in storage. The maximum available preclslon is 53 digits. If the specified precision is less than or equal to 21 the data occupies four by-tes, word aligned (short floating-point form). If the specified precision is 22 or more, the data occupies eight bytes, double-word aligned (long floating-point form). The default precision is 21. COMPLEX FIXED DECIMAL precision (P,Q) data is represented as for REAL FIXED The real and imaginary parts DECIMAL. occupy immediately adjacent fields, the real part first. COMPLEX FIXED BINARY precision (P,Q) Qata is represented as for REAL FIXED BINARY. The real and imaginary parts occupy immediately adjacent full words, the real part first. COMPLEX FLOAT DECIMAL precision (P) data is represented as for REAL FLOAT DECIMAL. The real and imaginary parts occupy immediately adjacent full or double Nords, oepending upon the precision; the real part occupies the first field. COMPLEX FLOAT BINARY precision (P) data is represented as for REAL FLOAT BINARY. The real and imaginary parts occupy immediately adjacent full or double words, 136 depending upon the precision; the real part occupies the first field. There are four types of string data: 1. Fixed-length CHARACTER 2. Fixed-length BIT 3. Variable-length CHARACTER 4. Variable-length BIT Variable-length data has associated control areas known as "dope vectors" which describe the strings. A dope vector contains a record of the maximum length and the current length of the string, together with a pointer to the beginning of the string. Dope vectors need not be adjacent to the data they describe, but will normally occupy storage of the same storage class. A string dope vector is created for all variable-length strings. In addition a dope vector is created for any fixed-length string which is an argument to either a procedure or a library routine. A variable-length string is addressed through its dope vector. A fixed-length string may be addressed directly or, if it has one, through its dope vector. Refer to Appendix C of this publication for a detailed cription of string dope vectors. des- CHARACTER data is stored contiguously from the left end of a field long enough to accommodate the maximum length declared for the string. The leftmost byte has no special alignment: it is this byte which is addressed by a CHARACTER string's dope vector. BIT data may be either UNALIGNED or ALIGNED. Both are stored eight bits per byte. Unalignment refers to the relative location of adjacent strings, not to the density of a single string. Aligned data fields occupy an integral number of bytes. Unaligned data fields occupy only as many bits as their maximum lengths require. BIT data is stored contiguously from the leftmost bit of its field, and is addressed at this leftmost bit. represented as two immediately adjacent byte fields, the real part first. Both parts are described by the single picture specification which is as described for a REAL fixed decimal numeric field. COMPLEX PICTURE (floating decimal picture) data - the real and imaginary parts are represented as two immediately adjacent byte fields, the real part first. Both parts are described by the single picture specification which is as described for a REAL float decimal numeric fieln. CHARACTER, but not BIT, string data may be specified by a PICTURE attribute. The data is represented by one byte per character on a byte boundary. The picture field contains the declared picture specification without its surrounding quotation marks and with iteration of characters expanded. Pictured Data Data Element Descriptor {DED) Data declared with a PICTURE attribute is stored in two fields. One field contains the picture information, the other the data element. The data is addressed independently of the picture information. Pictured data requires two addresses. Data of either type, arithmetic or string, may be specified by a PICTURE attribute. A pictured arithmetic data item is termed a numeric field. There are five types of numeric fields, which are described as follows: REAL PICTURE (fixed decimal picture) data is represented by bytes on a byte boundary. The precision of a fixed decimal numeric field may not exceed the limits for the corresponding coded arithmetic form, i.e., 15 digit positions. REAL PICTURE (float decimal picture) data is represented by bytes on a byte boundary. The precision must not exceed the limits for the corresponding coded arithmetic form, i.e., 16 digit positions and an exponent of P digits where P is defined as for the exponent of an E format item. The format of the data element descriptor (DED) (Figure 33) is as follows: Flags: An eight-bit encoded form declared information (see Figure 34). of The P byte is the declared or default precision of the data item. Maximum values are: Binary Binary Decimal Decimal Fixed: Float: Fixed: Float: 31 53 15 16 The Q byte is the declared or default scale factor of the data item in excess 128 notation (i.e., if the implied fractional point is between the last and next to last digit, Q will have the value 129). For numeric fields, Q is the resultant scale factor derived from the apparent precision as specified in the picture, i.e., the number of digit positions after a V picture item as modified by an F (scale factor) item. The W byte specifies the number of bytes allocated for the numeric field. REAL PICTURE (sterling picture) data is represented by bytes on a byte boundary. The precision is 3 + number of digits in the pound field + number of fractional digits in the pence field; this must not exceed the limits for the coded fixed decimal form, i.e., 15 digit positions. The L byte specifies the number of bytes allocated for the picture associated with a numeric field; if the data item is string, L occupies two bytes; if arithmetic, one byte. COMPLEX PICTURE (fixed decimal picture) data - the real and imaginary parts are The picture specification field contains the picture declared for the data item; if the data item is string, the picture may Appendix A: Data Formats 137 r-----------T----------------T-----------------------------------, I I I D E O Formats (in Bytes) I I Data Type I Representation ~-------T---T---T-----T---T---------~ I I I 1 I 2 I 3 I 4 I 5 I 6..... I ~-----------+----------------+-------t---t---t-----t---+---------~ I I Fixed-point I I I Ar i thmetic I Floating-point I I I I Packed-decimal I I I I I I I Flags I P I I I I I I ~ I I I I I I I I I I I I I I I I I I I I I ~----------------t-------t---t---t-----t---t---------~ I I Numeric ~ield I Flags I P I Q I W I L I Picture I ~-----------t----------------t-------t---t---t-----t---t---------~ I I I Unpictured I Flags I I I I I I I String ~----------------t-------t---~---t-----~---~---------~ IL ___________ I ________________ Pictured I _______ Flags I ______ L I ___________________ Picture JI ~ Figure 33. ~ ~ ~ Data Element Descriptor (OED) r--------T---T----------T-------T----------T--------T-------T---------, 111 2 131 4 I 5 I 6 I 7 I 10 ~--------t---t----------t-------t----------t--------t-------t---------~ o I I 0 I Unaligned! Fixed I Pictured I Bit I 0 I 0 I I string ~---t----------+-------t----------t--------t-------t---------~ I I 0 I Aligned I Vary- I UnI Charac-I 0 I 0 I I I I I ing I pictured I ter I I I 1 I ,Ari thI metic I r--------t---t----------t-------t----------t--------+-------t---------~ I 0 I NonI I I sterling ! Short I Numeric I Field I DeciI mal I Fixed I I I Real I I r---t----------t-------t----------t--------t-------t---------~ I 0 I Sterling ! Long I Coded I Binary I Float I Complex I L ________ ~ ___ ~ __________ ~-------~----------~--------~ _______ ~ _________ J Figure 34. 0 1 0 1 Eight-Bit Encoded Form of Declared Information in Flags occupy 1 through 32,767 bytes; if arithmetic, 1 through 255 bytes. If the original picture specification contained iteration factors, it will have been fully expanded. Data of type LABEL takes on the values of statement labels. Label variables occupy a two-word field aligned to a fullword address. The field is used as follows: Pointer Data Word 1: Word 2: A pointer variable is stored as four bytes aligned on a fullword boundary. rhe four bytes contain: Byte 0: Bytes 1-3: Zero The data is word address. addressed at the first full- A (Based variable): For null values, X'FFOOOOOO'. the four bytes contain Offset Data An offset variable is stored in four bytes aligned on a full word boundary. The data consists of byte offsets. The null value is X'FFOOOOOO'. 138 Activation indicator Bits 0-7 Gives nature of activation indicator Bits 8-31 Address of statement in object program A task variable is stored in a 28-byte area aligned on a fullword boundary. The format is shown in Figure 35. On allocation, the compiler initializes the variable as follows: Byte 0: Zero Byte 8-11: A(Symbol table entry) o 31 7 8 1 2 r-T-T--------T----------------------------, IAIDI Unused I A(PRV VDA) I ~-~-~--------~---------------------------~ I A(Task control block) I ~-----------------------------------------~ I A(Symbol table entry) l ~-----------------------------------------~ I A(Event variable) I ~--------------------T--------------------~ I Limit priority IDespatching priority I ~--------------------~--------------------~ I Chain-back address I ~-----------------------------------------~ lI _________________________________________ Chain-forward address JI Figure 35. a 31 7 8 r---------T-------------------------------, I FLAG 1 I 0 I ~---------+-------------------------------~ FLAG 2 I ECB I ~---------~-------------------------------~ I Unused I ~-----------------------------------------~ I Unused I ~---.----------- -----T ---- -- --------------- ~ I Status I Statement number I ~---------T---------+----------T----------~ I Unused I MCF I WTF I Unused I I ~---------~---------~----------~----------~ I Infinite Wait ECB I ~-----------------------------------------~ tl _________________________________________ Wait to Terminate ECB JI Format of the Task Variable eFigure 36.1. The flags set are: Event Task Variable Used with a The flags set are: A 0 TASK variable inactive D 1 TASK variable active 0 CALL with TASK option 1 CALL without TASK option I/O Event 1000 0000 0100 0000 0010 0000 0001 0000 Event Data An event variable is stored in a 32-byte area aligned on a full word boundary. The formats are shown in Figures 36 and 36.1. On allocation. the compiler initializes the variable as follows: 0000 1000 0000 0100 0000 0010 Task EVENT 0000 0000 Byte 0: Byte 4: status: Flag Zero Zero Zero Zero Active EVENT variable EVENT variable associated with I/O No WAIT required A(FCB) in first word of variable EVENT variable to be checked DISPLAY EVENT variable IGNORE option with this event 1000 0010 0001 0000 0000 0000 0000 0001 Multitasking non-I/O EVENT variable Acti ve EVENT variable Normal PL/I termination Abnormal PL/I termination EVENT variable being waited on Flag 2 o 31 7 8 r----------T------------------------------, I FLAG 1 I A(Event DECB/FCB) I ~----------+------------------------------~ I FLAG 2 I Unused I ~----------~------------------------------~ I Chain-forward address (task) I I/O EVENT 1000 0000 0100 0000 EVENT being waited for EVENT is complete ~------------------------------------.----~ I Chain-back address (task) I ~-------------------T---------------------~ I Status I Unuse1 I ~-------------------~---------------------~ I Chain-forward pointer (file) I ~-----------------------------------------~ I Chain-back pointer (file) I ~-----------------------------------------~ I A(Task PRV) l _________________________________________ JI -Figure 36. Event Variable Used with I/O An area variable is stored as 16 bytes plus the area length required; it is aligned on a doubleword boundary. The format is shown in Figure 37. The AD DR function applied to an area returns the address of the 16-byte area, not of the area itself. An area is described by an Appendix A: Data Formats 139 area dope vector (see Appendix C, 'Object Program Organization and Conventions') o 7 8 31 r-T------T--------------------------------, IA!Unusedl Length (Area) ! ~-L------i--------------------------------~ I Length (Current extent) ! ~-----------------------------------------~ I Offset of largest free element I ~-----------------------------------------~ I Unused/O I ~-----------------------------------------~ I I I I I Area ! I I LI _________________________________________ JI Figure 37. A structure dope vector for a nondimensioned structure is an ordered list of addresses of the elements of which the major structure is composed, including the elements of minor structures contained within the major structure. Minor structures do not have separate dope vectors. The elements of a minor structure are a contiguous subset of the elements of its major structure, and can therefore be addressed from the major structure's dope vector. If an element is an array, the address in the structure dope vector is replaced by the array dope vector. An array of variable-length strings in a structure would therefore be addressed as follows: Format of the Area Variable The structure dope vector has an which is an array dope vector entry The flag set is: A = 1 AREA variable contains free list. This array dope vector points to an array of string dope vectors If a free list exists, the fourth word is set to O. Each string dope vector then points a string to Arrays Arrays of any data type described in the section on scalars are allowed. Arrays are stored in row-major order, in increasing storage addresses. Except for aligned bit strings, the elements of an array which is not in a structure are stored contiguously. Each array may be described by a dope vector holding the dimension information declared for the array. The number of dimensions of the array is not included in its dope vector. The routine which refers to the dope vector must know the number of dimensions. External procedures know the number from a declaration of the parameter, and Library routines receive the number as an argument. Arrays of scalars and fixed-length strings are described by a single level of dope vector. Arrays of variable-length strings have a dope vector which points to an array of string dope vectors, which in turn give the current and maximum lengths of each element and point to the actual strings. If a structure has a dimension attribute, it specifies an array of structures. However, the dope vector does not pOint through an array dope vector to an array of structure dope vectors. Instead, the dimensionality is applied to the elements of the structure. The Creation of Dope Vectors The PL/I (F) compiler produces dope vectors in the following five circumstances: 1. When arguments are passed to a procedure (whether internal or external). 2. When lengths of strings or dimensions of arrays are variable, or greater than 256 bytes (or 2048 bits) in length. 3. When a variable is DEFINED on another. 4. When minor structures are passed as arguments (a subset of the major structure will not suffice in all cases) • 5. When asterisk notation is used, creation of separate dope vectors is required for projections of arrays. Structures structures require dope vectors whether they contain arrays or not. 140 APPENDIX B: IMPLEMENTATION CONVENTIONS AND RESTRICTIONS The following implementation conventions and restrictions apply to the operating system/360 PL/I (F) implementation. DISPLAY The maximum lengths of character string acceptable are 100 characters for the message and 72 characters for the reply. The reply string's current length is set equal to its maximum length and padded with blanks if necessary. INPUTIOUTPUT CONVENTIONS AND RESTRICTIONS PLII and Data Sets A PL/I program does not nominate data sets directly. Instead, under the System/360 operating system, it associates a file with a job control DD statement that identifies a data set. The file is associated with the DD statement by means of: 1. The maximum size of a page is 32,767 lines; the minimum is 1 line. If the page size is not specified a value of 60 lines is assumed. The TITLE option: This specifies the name (up to eight characters long) of the DD statement The maximum and minimum line size depend on the record format. 2. The file name: If there is no TITLE option, the file name (padded or truncated to eight characters) is used as the ddname. Associating the file with the data set requires the merging of information describing each of them and ensuring that there is no conflict of information on any particular item. At execution time the compiler calls the PL/I library 110 modules to handle the source program information. The 1/0 modules generate a skeleton DCB and insert in it, first, the file attribute from the DECLARE and OPEN statements, and then, any default file attributes required. r--------T--------------------------------, I I LINESIZE I I Record ~------------------T-------------~ I Format I Min. I Max. I ~--------+------------------+-------------~ I V I Non-PRINT file: 101 32,751 I I IPRINT file: 9 I I IL ________ U.F I __________________ 1 I _____________ 32,759 JI ~ If a line size default values are: ~ is not specified, the PRINT file - 120 characters Non-PRINT output file - no default value The library modules then issue an OPEN macro, which fills in the rema~n~ng DCB fields with information from, first, the DD statement for the data set and, then, the data set label. Neither the DD statement nor the data set label can override information already provided by the source program; the data set label cannot override information provided by the DD statement. If there are any DCB fields still not set, default information is provided by the PL/I library OPEN module. SYSPRINT is normally used as a STREAM OUTPUT PRINT file; it can be used as a RECORD file if declared INTERNAL. The LINESIZE value determines the logical-record length in the data set (i.e. the value of LRECL): F- and U-format records: LRECL V-format records: LRECL = LINESIZE = LINESIZE + 4 For PRINT files, an extra byte (for the ASA control character) is added to each of the above LRECL values. If BLKSIZE is specified, its value and the LRECL value must be compatible. If BLKSIZE is not specified, its value is calculated from the LINESIZE value. Appendix B: Implementation Conventions and Restrictions 141 LINESIZE, SKIP and COLUMN in Non-PRINT Files Data-Directed Input/Output LINESIZE (expression): Evaluation of the expression gives an integer that must be within the limits described above. For V and U format records, LINESIZE is the maximum size of a line. If a variable LINESIZE is required, the maximum value must be specified as the BLKSIZE in the DD statement or in the ENVIRONMENT attribute. Short lines are padded with blanks for F format records only. SKIP(expression): For output files, action depends on the record format: SKIP F'-format On a short line, SKIP fills out the remainder of the line with blanks. V-format SKIP puts out the current line as a short record. If the byte count of the line is less than 14 (18 with control bytes), the line will be blanked up to that size. Successive lines will be of the same minimum length, padded with blanks. The maximum length of a qualified name, including the separating periods, is 255 characters. The semicolon, which is not in the 48-character set, must always be represented in the input stream by the proper 11-8-6 punch (i.e., the character sequence ,. is not recognized as a semicolon). Edit-Directed Input/Output When using the E-format output, E (w" d., s) " s mus t be less than 1 7 digits. When using E(w~d). j must be less than 16 digits,. If the number of significant digits E-format data is greater than 16, then: in E-format input: CONVERSION condition raised E-format output: Data is truncated U-format SKIP will put out the current line as a short record. Character Code COLUMN (expression): For input files, if the value of the expression is greater than the current record length, a value of 1 is assumed. F'or both input and output files, if the value is less than the current position on the line, the file is positioned at COLUMN (value) on the next line. For output files, all characters from the current position in the line to the next position are blanked out. For U- or V-format records, if another record is required, a short record is put out subject to the rules described under the SKIP option. Input to the object program is assumed to be in EBCDIC mode. 48-Character Set 48-character set "reserved" words (e.g., GT, LE, CAT, etc.) words must be preceded and followed by a blank or a comment. If they are not, the interpretation by the compiler is undefined and may not, therefore, be what the user intended. A record containing part or all of a 48-character set reserved word must be 3 characters or mere in length. Block Size and Record Size The ENVIRONMENT Attribute The maximum size of a block or a must not exceed 32,760 bytes. record See the section "Structure Mapping" in Appendix C for details of data aggregate size requirements necessary in calculating the record and block size for data sets using RECORD I/O facilities. 142 The ENVIRONMENT attribute may contain the subfields given below. Only one option from each group is permitted. General format of the ENVIRONMEIff attribute is: contained in V-format records. These items must te considered when specifying the block size and record size subfields. Blocked records are not supported for UNBUFFERED files. ENVIRONMENT([CONSECUTIVEIINDEXEDI REGIONAL (1) \REGIONAL(2)\REGIONAL(3)] [{VIVS\VBSIF\U} (Blocksize [,Recordsize ])] [LEAVE I REWIND] [BUFFERS(n)] [COBOL] [CTLASA\CTL360] [INDEXAREA[ (m)]] [NOWRITE] [GENKEY]) VS(max-blocksize[max-recordsize]) specifies that spanned records are to be processed. The maximum block size can be exceeded by any logical record, in which case the record is segmented and written on two or more consecutive blocks. One block is written for each complete record, or segment, if spanning takes place. Data set Orqanization: There are five types of data set organization. These are detailed below. CONSECUTIVE: A data set consisting of unkeyed records, which are accessed in a physically sequential order. This organization is assumed if none is specified. INDEXED: A data set which consists of keyed records, located by means of several levels of index. VBS(max-blocksize[max-recordsize]) specifies that spanned records are to be processed. The maximum block size can be exceeded by any logical record, in which case the record is segmented and written on two or more consecutive blocks. Each block is written to within four bytes of the maximum length specified. A block can contain up to two spanned record segments or any number of complete records, or a mixture of both. REGIONAL(l): A data set. which consists of keyed records, without recorded keys, which are located by means of relative record positions within the data set. REGIONAL(2): A data set which consists of keyed records, with recorded keys, which are located by means of relative record positions, and by a search for a recorded key to match the given key. REGIONAL(3): Identical except that positioning relative tracks. to is U(max-blocksize) specifies blocks of varying length up to the maximum sp.ecified. REGIONAL(2), in terms of Record Format: Logical records may be in one of three formats: fixed length (format F), variable length (format V), or undefined (format U). Information regarding record format may be supplemented by the DD statement DCB subparameters, BLKSIZE and LRECL. The block size and record size must be specified in bytes. F(blocksize[,recordsize]) specifies fixed length records with the block size as stated. The record size may be specified optionally, which indicates that records are blocked (i.e., that each physical record contains more than one logical record). In this case, the block size must be a simple multiple of the record size. If the record size is not specified, the records will not be blocked. Blocked records are not supported for UNBUFFERED files. V(max-blocksize[,max-recordsize]) specifies that records are of varying length. A number of complete logical records are grouped together to form a physical record in such a way that each physical record does not exceed the maximum block size stated. If the maximum record size is specified, no logical record may exceed this size. Four bytes of control information per record, plus four bytes per block, are 1. All record formats permit the use of a "printer control character." This character appears as the initial character of each record (except for V format, when it appears after the four control bytes). 2. The specification of a single parameter (blocksize) in the record format in the ENVIRONMENT attribute is taken to imply unblocked records. For Fand V-format records record size is then derived from the block size parameter and therefore overrides information supplied on the DD statement. Data Set Positioning: The LEAVE and REWIND options are used for positioning a magnetic-tape volume when a data set is closed or when a volume switch is required in a multi-volume data set. The REWIND option allows the DISP parameter in the data set DD statement to control the action taken. Figure 37.1 shows the result when these options are specified. Buffer Allocation: BUFFERS(n) specifies the number of buffers to be allocated for the data set: this number must not exceed 255. For BUFFERED files, if the option is omitted or the number specified is zero, two buffers are automatically allocated upon opening the data set. The buffer Appendix B: Implementation Conventions and Restrictions 143 r------------------T---------------------------------------T---------------------, Option I Action at Closing of Data Set I Action at End of I I I I I Volume I ~------------------+---------------------------------------+---------------------~ volume wound on to end of data set I No repositioning I (If the file is BACKWARDS, the volume I Channel: available I I I I I is rewound to the beginning of the I I data set) I I I I Channel: busy I I .--------T---------+---------------------------------------+---------------------~ I I Volume is wound on to end of data set I I I I (If the file is BACKWARDS., the volume I No repositioning I I PASS I is rewound to the beginning of the I Channel: available I I I data set) I I I I Channel: busy I I REWIND .---------+---------------------------------------~---------------------~ I KEEP, I volume is rewound and unloaded I I I CATLG, I Channel: available I UNCATLG I I I LEAVE I I I .---------+-------------------------------------------------------------~ I DELETE I I Volume is rewound I Channel: available I I .--------~---------+-------------------------------------------------------------~ I Both LEAVE and I REWIND I REWIND is ignored I I I .------------------+-------------------------------------------------------------~ Volume is repositioned to the beginning of the current iata I set on that volume. (If the file is BACKWARDS, the volume I I I is wound to the end of the data set.) I Channel: busy I __________________ I _____________________________________________________________ L JI I I Neither LEAVE nor REWIND I I ~ Figure 37.1. Effect of LEAVE and REWIND Options on Repositioning of Magnetic-Tape Volumes count may be supplied by a DD statement DCB subparameter BUFNO, if not specified in the ENVIRONMENT attr ibute. An additional buffer is obtained for STREAM output data sets using U-format records. COBOL Option: This specifies that files with this attribute will contain structures mapped according to the COBOL algorithm. This type of file may be used only for READ INTO, WRITE FROM, and REWRITE FROM statements. COBOL data types and the equivalent PL/I data types are shown in Figure 38. Files with the COBOL option may passed as arguments. not If an ON condition arises during a INTO, then READ 1. the INTO variable may not be used in the on-unit, 2. if the completed INTO variable is required, there must be a normal return from the on-unit. be READ INTO, WRITE FROM and REWRITE FROM statements specifying COBOL files may have the EVENT option only if the compiler is able to determine that the PLII and COBOL structure mappings are identical (i. e,., all elementary items have identical boundaries). If they are not identical, or if the compiler cannot detect that they are identical, then an intermediate variable is created to represent the level 1 item mapped using the COBOL algorithm. The PLII variable is assigned to this variable before the WRITE FROM is executed, or 144 assigned from it after the READ INTO is executed. Thus the 1/0 statement containing the EVENT is not the one that completes the 1/0 operation; in these cases, the EVENT is ignored. Printer/Punch Control Characters: Two options are available, for' RECORD CONSECUTIVE OUTPUT files only: CTLASA and CTL360. They have the following meaning:CTLASA - Requires the implementation to set the ASA control bit in the DCB subparameter DCBRECFM. CTL360 - Requires the implementation to set the machine code control bit in the DCB subparameter DCBRECFM. r--------------------T--------------------, COBOL data type I PLII data type I I ~--------------------+--------------------~ DISPLAY I PICTURE with A andl I I or X picture char-l I racters I I CHARACTER I t--------------------+--------------------~ !COMPUTATIONAL I I jDecimal lenqth (=No.1 I lof 9s in picture) isl I I I I I I I lito 4 I 5 to 9 INO equivalent I FIXED BINARY I Cint-_egers only) I I I I I INDEXAREA: if no parameter is specified the index (whatever its size) is loaded into main storage. NOWRITE. Used for INDEXED DIRECT files --- opened for UPDATE Cand ignored by other files). This option indicates to data management that there are no records to be added to the file and therefore the write-add facility is not required. If an attempt is made to execute a WRITE statement on a file with this option, a diagnostic message will be printed and the ERROR condition raised. I 10 to 18 INa equivalent I t--------------------+--------------------~ ICOMPUTATIONAL-l I I I IFLOAT Cn) BINARY I (for n ~ 21) IFLOAT Cn) DECIMAL I ( for n ~ 6) I I I I t--------------------+--------------------~ ICOMPUTATIONAL-2 I I I IFLOAT (n) BINARY I (for n > 21) IFLOAT (n) DECIMAL I (for n > 6) I I I I t--------------------+--------------------~ ICOMPUTATIONAL-3 I FIXED DECIMAL I I Cpreci sion and I I I I scale as in COBOL I picture) I ____________________ LI ____________________ L JI figure 38. Equivalence of COBOL Data and GENKEY Option PL/I These options are used in order that spacing, skipping, etc., may be achieved in RECORD 110 files. It is the user's responsibility to ensure that the first byte of each record contains a valid ASA or machine code control character. These options will be ignored for STREAM files. Performance with DIRECT INDEXED Cln~t o~ Performance is improved if INDEXEJ DIRECT files (which use BISAM) are specified with the INDEXAREA and NOWRITE options. Update~iles: INDEXAREA [em)]. Used with INDEXED DIRECT files opened for INPUT or UPDATE Cand ignored by other files). This option causes the highest level of index to be loaded into main storage. The permitted formats are: INDEXAREA (m): the parameter m is a decimal constant ~ 32767. If the index size ~ m, the index is loaded into main storage; if the index size > m, the index is not loaded. This enables the programmer to place a limit on the amount of core he is prepared to allocate for an index area. If m > 32767, the parameter is ignored and the index (whatever its size) is loaded into main storage. The GENKEY option applies only to INDEXED data sets. It enables the programmer to classify keys used in the data set into generic classes and to use a SEQUENTIAL KEYED INPUT or SEQUENTIAL KEYED UPDATE file to access and read records according to the classification of their keys. A generic key is a character string that identifies a class of keys. All keys which begin with such a string are members of that class of keys. For example, the recorded keys 'ABCD', 'ABCE', and 'ABDF' are all members of the classes identified by the generic keys 'A' and 'AB'. The first two keys are also members of the class 'ABC', and the three keys can be considered as unique members of the classes 'ABCD', ABCE', 'ABDF', respectively. The GENKEY option allows the programmer to start sequential reading or updating of an INDEXED data set from the first nondummy record that has a key in a particular class. The class is identified by the inclusion of its generic key in the KEY option of a READ statement. Subsequent records can be read by READ statements without the KEY option, or they can be updated by REWRITE statements. It is the responsibility of the programmer to check that the last record in a generic class has been processed, as no indication is given when it is reached. In the following example, a key length of more than three bytes is assumed: DCL IND FILE RECORD SEQUENTIAL UPDATE KEYED ENVCINDEXED GENKEY); READ FlLE(IND) INTO (INFIELD) KEY ( • ABC') ; Appendix B: Implementation Conventions and Restrictions 145 Note: The EVENT option should not be used on a WRITE statement if V or U format records are being added to a REGIONAL(3) data set which is being accessed in a direct update mode. NEXT: READ FILE (IND) INTO(INFIELD); GO TO NEXT; In the above example, the first READ statement causes the first non-dummy record in the data set whose key begins with 'ABC' to be read into INFIELD. Each time that the second READ statement is executed, the next non-dummy record will be retrieved. WAIT Statement If the user wishes to specify more than one event name in a WAIT statement, the multiple-wait option must have been specified at SYSGEN time. If the data set contains no non-dummy records with keys of the specified gener1c class, the KEY condition is raised, and, on return from the on-unit, the next READ statement will read the first record in the data set. However, if the data set contains only dummy records, the ENDFILE condition is raised. Note how the use of the GENKEY option affects execution of a READ statement that supplies a source key shor.te!: than the key length specified in the KEYLEN subparameter of the DD statement which defines the data set. If the GENKEY option is used, it causes the source key to be interpreted as a generic key, and the record to be read is the first non-dummy record in the data set whose key begins with this source key. If the GENKEY option is not used, a short source key is padded on the right with blanks to form a source key of the specifie1 key length, and the record to be read is the record which has this padded key, if such a record exists. The use of the GENKEY option does not affect the result of supplying a source key whose length is greater than or equal to the specified key length. The source key, truncated on the right if necessary, identifies a specific record whose key can be considered the only member of its generic class. If a WAIT statement is executed and the events required to satisfy the WAIT contain a mixture of 1/0 and non-I/O events all non-I/O events will be set complete before any of the 1/0 events. If the TITLE option specified exceeds eight characters, then the first eight are used. I BASED Variables The implementation of offsets and pointers does not support bit addressing. This restriction has no practical effect on ALIGNED bit strings. with UNALIGNED bit strings belonging to arrays or structures, however, only offsets or pointers to major structures or minor structures with byte (or higher) alignment should be used. Other restrictions on the use of based variables are given in Appendix H. !gitializing LABEL Variables in Structures with the LIKE Attribute EVENT Option The EVENT option is implemented for RECORD input/output statements used as follows: File Organization 146 SEQUENTIAL CONSECUTIVE UNBUFFERED REGIONAL UNBUFFERED DIRECT CONSECUTIVE INDEXED or REGIONAL Initialization of LABEL variables in these structures requires careful handling particularly as the implementation does not provide the result specified by the language. A structure A is declared, using the LIKE attribute, to be identical to a structure B. Structure B contains a LABEL variable that is initialized, using the INITIAL attribute, to the value of a LABEL constant. The initial value of the corresponding LABEL variable in A is the initial value of the LABEL constant known in the block containing the declaration of B, not A. Compile-Time Procedures For example: DCL 1 B, 2 L LABEL INITIAL (Ll); Ll: . , I*B.L There may be no more than 254 compiletime procedures per compilation~ Further, each procedure is limited to a maximum of 15 parameters. Ll*1 BEGIN; DCL A LIKE B; Ll: . , Compile-Time DECLARE I*A.L IS GIVEN THE VALUE OF Ll IN STRUCTURE B*I No more than three levels of factoring are permitted in a compile-time DECLARE statement. END; COMPILE-TIME PROCESSING CONVENTIONS AND RESTRICTIONS Combined Level of Nesting and Depth of Replacement The MACRO Option The MACRO option should be included among the complete set of options for the compiler invocation if the program contains compile-time statements. Precision The precision, N, for a compile-time variable declared FIXED is 5. At any point in the program the combined level of nesting and depth of replacement is restricted to 50 levels. However, since not all nested or replacement items require the same amount of space, a program may run with a greater actual nesting or replacement depth than 50 levels. Depth of replacement is self-defining, but nesting level requires some clarification. A nesting level is required for: each pair of parentheses, either explicit or implied by hierarchy of operation each IF, DO, or PROCEDURE statement INCLUDE Conventions each member of a parenthesized list, such as factor lists in DECLARE statements or argument lists of procedures. Included text must be a member of a partitioned data set. If only a sing.le identifier is specified, i.e.~ of either of the following forms Limitations on size of Compile-Time Processor Input (identif ier) identifier, then it is assumed to be the name of a member of the data set with the ddname SYSLIB. If identifier1. (identifier.:!) is written then identifier1. is the ddname and identifier,2 is the member name. DD cards must be provided for those data sets used. Records in these data sets must have a fixed length of not more than 100 characters. The maximum blocking factor is 5. The source margin and character set options on the EXEC control card also apply to included text. The user~s program is maintained internally as blocks of text. BlocKsize is assigned at the start of processing and is a function of machine size as specified by the SIZE option on the EXEC card. The total size of internal text is restricted to 90 times the size of a text block. The minimum system configuration results in a blocksize of lK, so a total of 90K is allowed for internal text. This minimum figure is roughly equivalent to 1000 source input statements. Appendix B: Implementation Conventions and Restrictions 147 Limitations on Number of Compile-Time Variables The maximum number of compile-time variables which can be used in a program depends on the total size of the dictionary, which is restricted to 65,000 bytes. Assuming an average dictionary entry size of 28 bytes, this restricts the processor to approximately 2,300 items. An entry is made in the dictionary for each macro variable, macro procedure name, INCLUDE identifier, macro label, and unique compile-time constant. In addition, two dictionary entries are created for each iterative DO, one for each THEN or ELSE clause, and one for each compile-time procedure. Error message references are also entered into the dictionary. The dictionary is cleared at the end of compile-time processing; it is therefore unnecessary to keep the above considerations in mind if estimating available dictionary space during actual program compilation. character string; the maximum length is 100~ and the current length is set equal to the parameter length at object time. The parameter can also be a fixed-length character string. Number of Variables The maximt~ number of variables in the source program depends on the total size of the dictionary, which (for NOEXTDIC) is restricted to approximately 65,000 bytes. This is equivalent to a restriction of roughly 1,200 variables for a scientific user and to 1.000 for a commercial user. In computing these figures a reasonable allowance has been made for constants, statement labels, and other items which may require dictionary entries. If the EXTDIC option is specified, the maximum size of the dictionary is approximately 1.5 times 65,000 bytes for a block size of lK, and approximately 3.5 times 65,000 bytes for other block sizes. Output Line Numbering Where constants or comments span more than one line, the output line numbering refers to the first input line number of the string or comment. The figures for variables are necessarily approximate, since the size of a dictionary entry varies with the type of variable, length of identifier, whether it is a structure element, and so on. Number of Executable statements OTHER COMPILER CONVENTIONS AND RESTRICTIONS OPTIONS Attribute The list in the OPTIONS attribute may include the options MAIN, TASK and REENTRANT. The MAIN option should be used for the external procedure which is required to be given initial control at object time. The REENTRANT option must be specified. if the object program generated by the compiler is to be reenterable. The TASK option must be used if the procedure is to be invoked for tasking or to be invoked with other procedures with the TASK option. The total size of the internal text, at any point in the compilation, is restricted to 90 times the size of a text block. The size of a text block is itself dependent on the amount of core storage available to the compiler, as specified by the SIZE option The minimum block size is 1,024 bytes (lK), giving a maximum size for the internal text of 92,260 (90K). This is equivalent to roughly 280 executable statements. The maximum block size is 16,384 bytes, giving a maximum of 1,474,560 bytes for the size of internal text. This is equivalent to roughly 14,000 executable statements. The figures given for numbers of statements are necessarily approximate, since the number of bytes per statement will vary between different types of source programs. Parameter to the MAIN Procedure A single parameter may be passed by the EXEC statement for the execution job step to the MAIN procedure. If this facility is used, the first parameter to the MAIN procedure should be declared as a VARYING 148 Size of an Individual Statement All statements, other than a DECLARE statement" are limited to 3,500 source characters, i.e., equivalent to 50 cards. The 'content' of any statement, other than a DECLARE statement, is limited by the size of a text block; this varies, as described in the preceding paragraphs, with the storage available. but will not be less than 1,024 bytes. The content of a statement can be calculated by ignoring nonsignificant blanks and comments, expanding iteration factors in string constants and pictures, and then adding one byte for each occurrence of an identifier, and three bytes for each occurrence of a constant. To this, for binary constants add the iterations of any CHARACTER or BIT strings (note that at this point BIT strings are treated as characters, not bits), since the (F) compiler expands the strings as if the programmer had written them in full, and two decimal digits for decimal constants. At most, these restrictions will limit a statement to six cards, but the limit will normally be between 20 and 30 cards, even for a text block of 1,024 bytes. The GENERIC Attribute There is a limitation on the number of family members and arguments wh~ch may be associated with a GENERIC entry name. The value given by evaluating the following formula must not exceed 700: n 3n + 82:a.+ 8MAX(a1,a2, ••• ,an) + 3d 1 where n a d i 1 the number of family members number of arguments relating to the ith family member the greatest function nesting depth at which an invocation of the GENERIC entry name appears = the Number of Blocks in a Compilation The number of PROCEDURE, BEGIN, and iterative DO groups~ plus the number of ON statements, must not exceed 255. These restrictions also apply to a DECLARE statement for the text between any two commas which are not contained within parentheses. Level Numbers The maximum declared level number permitted in a structure is 255. The maximum true level number permitted in a structure is 63. Factoring of Attributes The number of left parentheses used for factoring attributes in DECLARE statements is limited to 73 in a compilation. Number of Parameters The maximum r:umber of parameters permitted at any entry point is 64. Limitations on Nesting There must not be more than 50 levels of nesting at any point in the compilation. The degree of nesting at any point is the number of PROCEDURE, BEGIN, or DO statements without a corresponding END statement, plus the number of currently active IF compound statements, plus the number of currently unmatched left parentheses, plus the number of dimensions in each active array expression, plus the maximum number of dimensions in each active structure expression. The number of nested iteration factors in a format list must not exceed 20. The maximum nesting of ENTRY attributes within an ENTRY or GENERIC attribute is 3. Number of Dimensions The maximum number of dimensions permitted" including dimensions inherited from containing structures, is 32. Arrays are limited, for each dimension, to a lower bound of -32,768 and to an upper bound of 32.,767. Appendix B: Implementation Conventions and Restrictions 149 Data-Directed List Floating-Point Constants and E Format Items The maximum number of elements permitted in a list for data-directed input is 320. Each base element of a structure counts as a separate list element. The exponents of floating-point numbers are restricted to a maximum of 2 digits for decimal or 3 digits for binary. structure and Array Expressions Constants Returned by Procedures The level of nesting in structure and array expressions is limited by the following rule: For each level of nesting of structure or array expressions, add 2 for the maximum number of dimensions in the structure or array, add 2 for the maximum level in a structure expression, add 3 for each subscript or arqument list in the expression or assignment, and finally, add 15. The total for exceed 900. the If a procedure has more than one entry point, and each entry point returns a value, code is generated to convert each value returned to each of the data types for the entry points. If any of these values is a constant, it is possible that this constant cannot be converted to all the data types specified. A severe error message will be put out, and execution will be unsuccessful. whole nest should not This situation can be avoided by assigning the constant to a variable of the same data type, and then returning this variable. For example: constants The precision or length of constants may not be greater than the precision or length of the corresponding type of variable. sterling Constants the 13. The maximum number of digits allowed in 90unds field of a sterling constant is The number of digits following the decimal point in the pence field must not exceed 13 minus the number of digits in the pounds field. DCL A ENTRY RETURNS(CHAR(S», B ENTRY RETURNS (FIXED DECIMAL(15», C ENTRY RETURNS(BIT(64», ATEMP CHAR(S); A: ENTRY CHAR(S); ATEMP = 'AOS'; RETURN (ATEMP) ; B: ENTRY FIXED DECIMAL(15) ; RETURN (108) ; C: ENTRY BIT(64); RETURN('10101'B); The use of ATEMP avoids the interrupt caused by the CHARACTER->FIXED DECIMAL and the CHARACTER->BIT conversions. However, execution may still be unsuccessful, and a warning message is put out to remind the user. string Constants Compiler-Generated Names The number of characters in a string constant, after expansion of iteration factors, may not exceed the size of a dictionary block minus 14. The size of a dictionary block will vary with the storage available to the compiler in the same way as does text block size, but will not be less than 1,024 bytes. 150 The number of narres generated by the compiler must not exceed 11,264 in a compilation. One name is generated for each PROCEDURE, BEGIN, or ON block, for each variable declared as CONTROLLED INTERNAL, and for each INTERNAL file. Temporary Results in Expression Evaluation String Lengths The maximum number of temporary results which may exist during the evaluation of an expression or during an assignment statement is 200. The length, in characters or bits, of a string variable or intermediate string result is limited to 32,767. An estimate of the number of temporary results which may exist during the evaluation of an expression can be obtained from the following: String Lengths in Intermediate Result Fields At each level of parenthesis, count one for each operator which is forced to be evaluated before an inner level of parentheses. For each such operator, count one for each operand which -requires conversion before use, count one for each nested function, count one for each subscripted variable used as a target in an assignment statement, and finally, count one for each pseudo-variable and each argument of a pseudo-variable. When non-ad-ustable VARYING strings, or functions which return non-adjustable VARYING strings# are used in an expression, the lengths of the intermediate result fields are calculated from the maximum lengths of the operands. If these lengths are at or near the maximum permitted by the implementation (32767 bytes or bits), the length of the intermediate fields may be greater than the implementation maximum; if so, they will be truncated on the left~ This situation can occur with concatenation, the UNSPEC function with a character-string argument, the REPEAT function, and the STRING function. Multiple Assignments and Pseudo-Variables The use of adjustable VARYING strings can create a similar problem. When an operand of the concatenate operator or the argument of the UNSPEC function is an adjustable VARYING string, the length of the intermediate result field is not tested, and execution will fail. This situation can also occur with SUBSTR if the third argument is not a constant, because in this case the result is an adjustable VARYING string. Multiple assignments are limited by the following rule: count 11 for each target of a multiple assignment, add 3 for each pseudovariable, and then add 11 for each argument of a pseudo-variable. The total must not exceed 4,085. Function Values The maximum number of different types or precisions returned by function may not exceed 256. data one Similarly, when a VARYING string is passed as an argument to a fixed-length string parameter, the length of the temporary argument created is the maximum length. If the user wishes to pass the current length of the VARYING string (in, for example, Y=X(A»_ a possible method is: DCL ATEMP CHAR<*) CTLi ALLOCATE ATEMP CHAR(LENGTH(A»; ATEMP=A; Y=X (ATEMP) i FREE ATEMP; Qualified Names The number of characters in a qualified name, which is to be used either for data-directed input/output or in CHECK lists, must not exceed 256. Note that if the DATA option without a list is used for data-directed input, this will include all structure elements in the compilation.. AREA Sizes The size of an area is limited to 32767 bytes. In this implementation, the AREA size is provided by thp. value associated with the AREA attribute or by the default value of 1000 bytes. Appendix B: Implementation Conventions and Restrictions 151 LABEL Attribute Floating-Point Magnitude The number of statement-label constants specified by the LABEL attribute is limited to 125 in any particular label list. The magnitude of a normalized floatingpoint variable or intermediate result must lie in the range from 2.4 x 10- 78 to 7.2 X 10 75 • POSITION Built-In Functions The maximum value of the integer constant in the POSITION attribute is 32,767. The default value for the second argument of the FIXED built-in function is 15 for binary data, and 5 for decimal data. The default value for the second argument of the FLOAT built-in function is 21 for binary data, and 6 for decimal data. The maximum length of a PICTURE describing a numeric field, after expansion of iteration factors, is 255. The length of the bit string which is the val ue ret lIned by the UNSPEC function is defined by the type of the argument. Argument Type The maximum length of a PICTURE describing a character string, after expansion of it€ration factors, is the size of a dictionary block, less 14. The size of a dictionary block will vary with the storage available to the compiler in the same way as does text block size, but will not be less than 1,024 bytes (or 768 bytes if the EXTDIC option is in use). FIXED BINARY (p,q) FIXED DECIMAL (p,q) FLOAT BINARY (p) FLOAT DECIMAL (p) CHARA..CTER (n) BIT en) POINTER OFFSET AREA Length of Bit String 32 8*FLOOR «p+2)/2) 32 if p :s; 21 64 if P ~ 22 32 if p :s; 6 64 if P 2 7 8*n n 32 32 (Number of bytes allocated + 16>*8 SETS List The t.otal of twice the number of identifiers in a SETS list, plus the number of parameter numbers in a SETS list, must not exceed 255. The length of the string returned by the ONSOURCE and DATAFIELD built-in functions is subject to an implementation maximum of 255 characters. MA~~IN, MOD Built-In Functions Scale Factor The scale factor of a variable, or of an intermediate result of type FIXED, must be in the range -128 and +127. Precision The maximum precision of a variable or of an intermediate result is: When the arguments to these functions have different attributes, all the arguments are converted, before the function is invoked, to the highest characteristics. Contrary to the language specification, both the precision and the scale factor of an argument will be adjusted. If all the arguments are FIOED, application of tne highest-character1stics rule may, in conjunction with the maximum precision defined by the implementation, cause truncation and hence an inaccurate result. For example: DCL X FIXED DECIMAL (12,1), 53 16 31 15 152 for for for for FLOAT FLOAT FIXED FIXED BINARY DECIMAL BINARY DECIMAL Y FIXED DECIMAL (12,9); Z MOD eX,y); Here Z (whatever its attributes) will be wrong. X and Yare stored in a temporary field which would have, according to the precisions o~ the operands, a precision larger than the implementation permits. Therefore the implementation-defined maximum is applied. resulting in a precision of (15,9). Y can be stored satisfactorily inside such a field but X is truncated, with the loss of its five high-order digits. Length of Identifiers The following types of identifiers should contain not more than seven characters: All EXTERNAL data identifiers EXTERNAL PROCEDURE and ENTRY labels EXTERNAL Files CONDITION identifiers If this restriction is exceeded, the first four characters are concatenated with the last three to form an abridged identifier. MOD Built-In Function In addition, such identifiers must not start with the letters IHE, lest they conflict with the names of Library modules. When the MOD function is used with FIXED arguments of different scale factors, the results may be truncated. If SIZE is enabled, an error message will be printed; if SIZE is disabled, no error message will be printed and the result is undefined. COMPLETION Built-In Function and Pseudo-variable The COMPLETION built-in function and pseudo-variable were previously defined in PL/I with the name EVENT. The (F) compiler implements the COMPLETION built-in function and pseudo-variable whether the keyword used is COMPLETION or EVENT. STRING Built-In Function The argument may be a scalar, array, or structure variable that consists of one of the following: 1. Bit strings 2. Character strings 3. Decimal numeric pictures 4. A mixture of (2) and (3) Sub$cripted Identifiers For subscripted identifiers, the maximum number of characters in the subscript is limited to 225 characters. This figure includes the first left parenthesis, the commas, and the final right parenthesis; it excludes redundant characters such as blanks and plus signs. The maximum number of entries in a CHECK condition, whether in a prefix list or in an ON statement, is 510. The maximum number of data items being checked at any point in the compilation varies between 2078-2n and 3968-2n, where n is the number of currently checked items which have the attribute EXTERNAL. If a structure or part of a structure is in a CHECK condition, the number of items in this restriction must include all elements of the structure. OBJECT-TIME CONVENTIONS AnD RESTRICTIONS It may not be an expression. Data-Directed Input The argument can be IGNED; if it is ALIGNED, included in the result. ALIGNED or UNALpadding is not The concatenated string in the result has a maximum length of 32767 bytes. When the CHECK condition is enabled for data-directed input., assignment of each element of an array will cause the whole array to be written out. Appendix B: Implementation Conventions and Restrictions 153 Edit-Directed Output ON-Units and Entry Parameter Procedures E- and truncated. There is an implementation limit to the number of ON-units and/or entry parameter procedures which can be active at any time. An entry parameter procedure is one that passes an entry name as parameter to a procedure it calls. The total permissible number of these ON-units and/or entry parameter procedures is 127. F-format items are rounded, not CHECK Condition If an identifier which is read in by a GET DATA statement is included in a CHECK list anywhere in the proqram, then the CHECK condition is raised, and will be treated as enabled unless the block containing the GET DATA statement has an explicit NOCHECK prefix. If the CHECK condition is raised, SYSTEM action will be taken unless the GET DATA statement lies within the dynamic scope of an ONCHECK statement for the identifier in question. Exponentiation The expression X**(-N) for N>O is evaluated by taking the reciprocal of X**N. This may cause the OVERFLOW condition to occur as the intermediate result is computed, which corresponds to UNDERFLOW in the original expression. Collating Seguence If a READ statement with the EVENT option has a KEYTO or an INTO variable for which the CHECK condition is enabled, the value of the variable will be printed immediately after the READ statement, not after the WAIT statement. Consequently the printed values of the variable will be the old, not the new values. In the execution of PL/I programs, comparisons of character data will observe the collating sequence resulting from the representations of characters in bytes of System/360 storage, in extended binary coded decimal interchange code (EBCDIC). The BCD and EBCDIC punched card codes and graphics for the PLiI 60-character set are tabled in collating sequence order in Figure 4 of this publication. CONVERSION ON-Condition ENTRY Names as Arguments and ON Statements in Recursive Contexts If a return from an ON-unit for CONVERSION is made, then, unless it was entered on accou~t of a SIGNAL statement, the data conversion will be reattempted. This implies the use of corrective measures on the field in error using either the ONSOURCE or the ONCHAR pseudo-variables. If corrective action is not taken in the ON-unit, and normal return is attempted, a message will be printed and the ERROR condition will be raised. If the ONSOURCE or ONCHAR pseudovariable is used outside an ON-unit, or in an ON-unit other than either a CONVERSION ON-unit or an ERROR or FINISH ON-unit entered because of system action for CONVERSION, then a message is printed and the ERROR condition is raised. If the ONSOURCE built-in function is used out of context, a null string is returned. If the ONCHAR function is used out of context, a blank is returned. 154 In the first version of the (F) compiler, ENTRY parameters were invoked with the environment existing at the time of invocation. In subsequent versions, they will be invoked with the environment existing at the time when the ENTRY name was passed as an argument. Pi: PROC RECURSIVE; B = 1; CALL P4 (P3) ; RETURN; P4: ENTRY(PP); B = 2; CALL PP; P3: PROC; PUT DATA (B); END; END; Note: For the first version., the above procedure gave B = 2 ;" for subsequent versions it gives B = 1;. In the first version of the (F) compiler, ON-units in recursive contexts were entered with the environment existing when the condition occurred. In sUbsequent versions, the ON-unit will be entered with the environment which was in existence when the ON statement was executed. 1. On the LOCATE statement the KEYFROM key is checked for sequence; the KEY condition is raised if a sequence error is found. 2. Processing continues until operation on the file. 3. At the next operation on the file, the embedded key in the buffer is checked against the KEY FROM string that was given in the LOCATE statement. If they differ, then: Example: P: PROCEDURE RECURSIVE; DECLARE I STATIC INITIAL (0), M AUTOMATIC; I = I + 1; M = I; IF I = 1 THEN DO; ON OVERFLOW PUT DATA (M); END; IF I = 3 THEN SIGNAL OVERFLOW; ELSE CALL P; END; Explicit CLOSE: raised the the next KEY condition is Implicit close: the KEYFROM string replaces the embedded key in the buffer, an error message is Written on the console, and the file is closed. Note: In the first version, the procedure gave M = 3; subsequent versions give 4. M = 1. These modifications of semantics can affect only those programs which contain both recursive procedures and either entry parameters or ON statements. On normal return from the ON unit, control passes to the next statement The current statement is not executed. Concatenated Data Sets Record Alignment Concatenation of data sets with "unlike attributes" (device type., record format, etc.) is not supported at object time. LOCATE MODE ON Conditions UNDEFINEDFILE condition for OPEN is raised in the normal way. The user must pay attention to record alignment within the buffer when using locate mode I/O. The first data byte of the first record in a block is generally aligned in a buffer on a doubleword boundary (see Figure 39); the next logical record begins at the next available byte in the buffer. The user must ensure that the alignment of this byte matches the alignment requirements of the based variable with which the record is to be associated. implicit TRANSMIT condition is raised when it is detected, which may be some statements later. ONKEY does not necessarily give the key of the record that caused an I/O transmission error. RECORD condition is raised in the usual way for LOCATE. It cannot occur for READ SET or REWRITE without the FROM option. Most of the alignment problems described here occur in ALIGNED based or non-based variables. If these variables were UNALIGNED, the preservation of the record alignment in the buffer would be considerably easier. If a VB format record is to be constructed with logical records defined by the struct ure: DeL 1 S, KEY condition is raised in the usual way except for a LOCATE statement on an INDEXED file with RKP*O. If this happens then the sequence of operations is: 2 A CHAR (1) , 2 B FIXED BINARY; this structure is mapped as in Figure 39. Appendix B: Implementation Conventions ar.d Restrictions 155 r--------T--T-----------, B I IL__ J __ J __ IA I __ l ~_~ In both cases the problem is avoided if the structure is padded in such a way that B is always correctly aligned: __ J __ J_-J t t t W W W w= 1 S,' 2 PAD CHAR(3), 2 A CHAR(l), 2 B FIXED BINARY; Word boundary Figure 39. Format of structure S If the block was created using a sequence of WRITE FROM(S) statements, the format of the block would be as in Figure 40, and it can be seen that the alignment in the buffer differs from the alignment of S. There is no problem if the file is then read using move mode READ statements, e.g., READ INTO(S), because information is moved from the buffer to correctly aligned storage. If, however, a structure is defined as: 1 SBASED BASED(P) LIKE S; and READ SET(P) statements are used, then, reference to SBASED.B would, for the first record in the block, be to data aligned at a doublewor~ plus one byte, and would probably result in a specification interrupt. The block format would now be as in Figure 41; B is always on a word boundary. Padding may be required at the beginning and end of a structure to preserve alignment. The alignment of different types of record within a buffer is shown in Figure 42. For all organizations and record types except blocked records in INDEXED files with RKP=O, the first duta byte in a block is always on a doubleword boundary. The position of any successive records in the buffer depends on the record format. For unblocked INDEXED, the LOCATE statement will use a hidden buffer if the data set key length is not a multiple of 8. The pointer variable will point at this hidden buffer. A special problem ar£ses when using locate mode in conjunction with based variable containing adjustable extents, i.e., containing a REFER attribute. Consider the based structure: The same problem would have arisen had the file originally been created by using the statement: 1 S BASED(P), 2 N, 2 C CHAR (L REFER (N»; LOCATE SBASED SET(P); Again, for the first record in the block, P would be set to address a doubleword and references to SBASED.B would be invalid. If it is desired to create blocked V-format records of this type, using locate mode, then this record alignment must be such that N is word aligned. If L is not a multiple of 4 then, if the alignment of the r-----------T-----------T--T-----------T-----------T--T-----------T--------BL I RL IA I B I RL IA I B I I l __ J __ J __ J __ __ J __ J ~ __ J __ L-_~ __ J __ J __ J __ __ J __ J __ J __ __ __ J __ J __ J __ _____ - -__ ~ ~ ~ ~ t t t , , , D W D W D W BL Block length RL = Record length Figure 40. D W Doubleword boundary Word boundary Block Created from structure S r-----------T-----------T--------T--T-----------T-----------T--------T--T-----------T--BL I RL I PAD I A I B I RL I PAD I AI B I IL __ J __ J __ J __ D BL RL __ J __ J __ J __ L-_J __ J __ J. __ __ J __ J __ J __ J. __ J __ J __ J __ __ J __ J __ __ __ J __ J __ J __ __ _ ~ ~ ~ ~ , t , t t , W D W D W D Block length Record length Figure 41. 156 ~ D W Doubleword boundary Word boundary Block Created by structure S with Correct Alignment ~ t W current record is correct, that of the following record will be wrong.. Correct alignment can be obtained by the following sequence: /* ROUND UP TO MULTIPLE OF 4 */ LOCATE S FILE (F); N = LENGTH; /* SET REFER VARIABLE */ LENGTH = L; /* SAVE DESIRED LENGTH L */ L = 4* CEIL(L/4); This technique can be adapted to other uses of the REFER attribute. Doubleword boundary CONSECUTIVE I ~----------, L F I 1 data I block length record length ~----------J r---T---t----------, V or VS I L I 1 I data I L---i---t----------J ~----------, u I data I ~----------J ~----------T----------T--- FB I data I data I ~----------i----------~-- r---T---t----------T---T----------T---T--- VB or VBS I L I 1 I data I 1 I data I 1 I L---~---t----------~---i----------i---~--- I I INDEXED r---t----------, IkeYI F data I L---t---------- J FB RKP RKP o '* a ~-----T----------T-----T----------T--- I key I data I key I I F V U I IEKI I IEKI I ~---~-~---i---i--i---L---- I <--data--> <--data--> REGIONAL data ~-----~----------i-----~----------~--~---T--T---T---T--T---T---- EK = embedded key I I r---t ----------, IkeYI __________ data I L---t J r---T---T---t----------, I L I 1 IkeYI data I L---L---i---t----------J r---t----------, IL---t keYI __________ data I J I I -Figure 42. Alignment of Data in a Buffer in Locate Mode I/O, for Different Formats and File Organizations Appendix B: Implementation Conventions and Restrictions 157 APPENDIX C: OBJECT PROGRAM ORGANIZATION AND CONVENTIONS RUN-TIME STACK INTRODUCTION The main features of PL/I which affect object code organization are, briefly, as follows: 1. The block structure, rules and storage class 2. Interruption activity 3. Asynchronous facilities 4. Data types and extents of scope, The term 'block' is used to mean either a PROCE~URE or a BEGIN-END group which contains declarations of AUTOMATIC variables. Because such storage is dynamic, it is allocated only when the block is entered. It is stressed that the code for a block is present at all times and as that code is read-only, one copy only is necessary, even if the procedure is recursive. Therefore, when a block is activated, storage is allocated. At anyone time during the execution of a PL/I program, control resides in one particular block of code. If this block invokes another, then the old block is "pushed down" in the stack when the new one assumes control. This stacking of blocks of executable code is exactly matched by the allocations of AUTOMATIC storage, and so both storage and code can be controlled by the same stacking mechanism. This is achieved by means of the dynamic storage allocation facilitie~ (provided by the library or control program) in association with general register 13. This register is maintained such that it always points at the storage area corresponding to the current block of code. As the areas are chained together it is a comparatively simple matter to "pop up" the stack when leaving a block, by resetting general register 13 to point at the previous area in the chain, and to release the current area. The following program and diagram illustrate this mechanism. PSEUDO-REGISTER VECTOR (PRV) A: The pseudo-register vector (PRV) is a task-oriented communications area, addressed through register PR(12): one PRY is established for each task or subtask. Object programs not employing multitasking will have only one PRY. Because of the possibility of multitasking in a dynamic environment, the PRY is contained in dynamic storage. The PRY contains a number of pseudo-registers which effectively operate as implicit arguments and give information about, for example, current program status. Since all references to specific pseudoregisters within the PRY are made by the addition of a fixed displacement to the base address (contained in register PR) of the PRY, read-only modules are able to address dynamically allocated storage obtained for any task (library workspace, for example). Addressinq of the PRY within library modules is effected by using Q-type address constants which are fixed during linkediting. All pseudo-register address constants within the PLII implementation are two bytes in length; the maximum size of a PRY is 4096 bytes. 158 PROCEDURE; CALL B; B: PROCEDURE; C: BEGIN; END C; END B; END A; When control looks like this: is in block C. the stack r-----' When a routine in System/360 assembler language is used in a tasking environment, any DSA obtained in it must have at least 108 bytes. (The minimum for a DSA in a non-tasking environment is 100 bytes). I 1<--, I I I storage for A IL _____ JI II I r-----'I---JI I <--, storage for B 1 1 L _____ J II I GR 13 ---> r-----' I I---J I VARIABLE DATA AREA (VDA) In some instances, it may be necessary to obtain storage after the DSA has been allocated. For example, the following statements would cause this situation to arise: storage for C IL _____ JI When control reverts from block C to block B, the stack takes on the following appearance: r-----' I 1<--, 1 I 1L _____ JI GR 13 ---> END Ai 1 storage for A II In the above example, the prologue of procedure A would first establish its DSA, then initialize the variable I, and then obtain more dynamic storage for the array A. This storage is known as a variable data area (VDA) and can conceptually be regarded as a secondary stack based on individual members of the primary stack of DSAs. I I I---J I storage for B IL _____ JI r-----' These areas of storage are dynamic storage areas (DSAs). known as VDAs are required in a nrnTber of circumstances in addition to that outlined above. In particular, code may be compiled to obtain a VDA whenever there is a demand for temporary ~orkspace (e.g. for strings of more than 256 bytes). DYNAMIC STORAGE AREA (DSA) Each Dynamic Storage Area is an entry in the run-time stack and, consequently, each DSA must possess a standard layout. Figure 43 shows the functional content of a DSA. , r--------T------------------, FLAGS I LENGTH OF AREA I 1 ~--------L------------------~ I CHAIN BACK I ~---------------------------~ I CHAIN FORWARD I ~---------------------------~ I REGISTER SAVE AREA 1 1 1 > STANDARD SAVE AREA 1 1 I 1 ~---------------------------~ J I ENVIRONMENT AND INTERRUPTI CONTROL INFORMATION I I ~---------------------------~ 1 DOPE VECTORS AND DEDS 1 I (IF- ANY) 1 I AUTOMATIC DATA, I 1 PARAMETER LISTS, I 1 WORKSPACE, I I ___________________________ L EXTRA SAVE AREAS J1 Figure 43. A : PROC; DCL I INITIAL(10); DCL A(I) CHAR(6)i Functional content of a Dynamic storage Area PROLOGUES AND EPILOGUES It can be seen from a study of the language and from the foregoing description, that it is necessary for each block to have a "prologue" and an "epilogue." Each prologue must save registers in the area provided, obtain storage for its new DSA., update register 13 to point at the DSA, maintain the forward and backward chains~ initialize the environment and interrupt control entries, initialize the dope vectors (if any), and decide which entry point is required. The epilogue has complementary tasks to perform before finally returning. In view of the fact that these prologues/epilogues must be executed each time a block is entered and left, space economy is achieved by incorporating as much of this work into subroutines as possible. Appendix C: Object Program Organization and Conventions 159 The library routines contain certain sections of the prologue and epilogue which are cornmon to all prologues and epilogues. The functions of the prologue subroutines are: 1. To preserve the invoking block 2. To obtain and initialize storage for the block 3. To provide chaining mechanisms to enable the program's progress to be traced. The main routine are block, and the invoking to it. environment of the AUTOMATIC functions of the epilogue subto release storage for the to recover the environment of block before returning control is always to a compiler generated control section, IHENTRY. This calls the appropriate PL/I library initialization routine (IHESA or IHETSA)i the choice depends on the OPT parameter and whether the main procedure has the TASK option or not. The routine selected provides the PRV and Library workspace, issues a SI?IE macro, and then transfers control to the address contained in a control section named IHEMAIN. This address constant is produced by the compiler for each external procedure with the MAIN option. The situation is illustrated in Figure 44. If an argument list is to be passed to the PL/I program, IHESA or IHETSA must be entered at the appropriate entry point. If more than one module has the MAIN option, the linkage editor will accept the first appearance of the control section IHEMAIN in its input stream and ignore the rest. INTERRUPT ACTIVITY AND CONTROL All interrupt activity in PL/I is controlled at the language level by means of prefix options and ON statements. At object time, all interruptions are channeled through the library error handling module, IHEERR. Hardware interruptions are passed to IHEERR because a SPIE macro is issued as part of a PL/I program's initialization, in which IHEERR is nominated as the exit for the user. Programmed interruptions reach IHEERR by means of the normal branch and link instruction. In order to locate the ON-unit (if any) specified in the PL/I program, the error handler searches through the stack until it finds the necessary information in the interruption control area of a DSA. If the search is unsuccessful, then SYSTEM action is taken. INITIAL ENTRY TO PROCEDURES WITH THE MAIN OPTION In order to achieve the proper initialization of PL/I programs, the primary entry IHEMAIN PROCl COMBINATION OF PL/I WITH OTHER LANGUAGES The programming example in Appendix D illustrates the inclusion of a subroutine written in assembler language. This subroutine performs some of the functions of a PL/I procedure and shows how to make use of PL/I library subroutines. The functional capabilities of the subroutine are fully described in the commentary contained within it. CALLING SEQUENCES AND REGISTER USAGE Linkage between PL/I procedures is provided by the standard operating system System/360 calling sequence with the exception that the last a~gument in the parameter list is not indicated by a '1' in the high-order bit. (Refer to the publication IBM System/360 Operating System, Supervisor and Data Management Services). In addition. the trace forward chain is maintained. IHESA/IHETSA IHENTRY r-----------, r----------, r------------, r----------------, PL/I A(PROC1) JI<--------~L____________ A(IHEMAIN) JI<--------~L_________________ A (IHESA/IHETSA) JI II PROCEDURE I,<---------~L_________ I WITH MAIN I IL ___________ OPTION JI Figure 44. 160 Initial Entry to Procedures with the MAIN Option Register usage in object code produced by the PLiI (F) compiler observes the following conventions: Description of Use o Work Register 1 Work Register and Parameter List Pointer 2-8 Caller provides a standard format register save area addressed through register DR(13) 3. Registers used by the called program are saved in the save area provided 4. If the called module another module# it module with a save register DR to address area~ and chaining it area 5. Upon return to the calling module, registers RB(2) through LR(14), the program mask and PICA will be unchanged# while registers RO(O),RA(l), BR(15), the floatingpOint registers, and the condition code may be changed Work Registers 9 Address Register 10 Program Base 11 static Data Pointer 12 pseudo-Register vector Pointer 13 Current DSA Pointer 14 Arithmetic and Return Register 15 2 .• PRESENTATION OF ARGUMENTS Arithmetic and Branch Register The linkage conventions for library modules, some of which employ an internal standard, are described be~ow. LINKAGE CONVENTIONS FOR LIBRARY MODULES Intermodule linkage conforms to either the System/360 operating system calling sequence standards or an internal PL/I standard. The latter applies only to certain library modules which require a higher degree of efficiency. The internal standard passes the addresses of arguments in registers rather than through a parameter list; in all other respects, it is identical to the System/360 operating system standards. The internal standard is optionally employed under the following constraints: 1. The number than eight 2. The arguments must be fixed in number of arguments must be less The normal System/360 operating system standard of passing parameters, by pointing at a list of addresses, is employed in PL/I object code. These addresses point directly at data in the case of scalar variables only, provided they are not strings. In all other cases, the address passed is that of a control block known as a "dope vector." Various types of dope vector are described below. STRING DOPE VECTOR (SDV) This control block specifies storage requirements for string data. An SDV consists of eight bytes (word-aligned), in the format shown in Figure 45. 023 If these constraints cannot be met, the operating system standard is employed. Definition of operating system linkage conventions is provided in the publication IBM System/360 Operating System, Supervisor and Data Management Services. Several salient features of these conventions are: Arguments are passed by name, value not by 31 7 8 r----T-----T------------------------------, IBtOfl 0 I Byte address of string I ~----~-----~--------T---------------------~ I __________________ Maximum length L Figure 45. 1. in turn calls provides that area, updating the new save to the old save I _____________________ Curre~t length JI ~ Format of the String Dope tor (SDV) Vec- Definition of SDV fields: BtOf (Bit offset): If the string is a bit string, positions 0 to 2 of the SDV specify the offset of the first bit of the string within the addressed byte. The bit offset is only applicable to bit strings which form part of a data aggregate, and then only if that aggregate has the UNALIGNED attribute. Appendix C: Object Program Organization and Conventions 161 Byte address of string: For both character and bit string this three-byte field specifies the address of the initial byte of the string. Maximum length: Halfword binary integer which specifies the number of storage units allocated for the string; byte count if character, bit count if bit. This value does not vary for a particular generation of its associated string. Current length: Halfword binary integer which specifies the number of storage units, within the maximum length, currently occupied by the string. The two length fields exist to accommodate strings with the VARYING attributes; in the instance of a fixed-length string, the two fields contain identical values. For both fields the maximum value is 32,767. 2 3 31 7 8 r----T-----~------------------------------, I BtOf I I virtual origin I ~----~-----~------------------------------~ I Multiplier 1 I ~-----------------------------------------~ I I I I I I ~-----------------------------------------~ Multipliern I ~-------------------T---------------------~ I Upper bound 1 I Lower bound 1 I ~-------------------+---------------------~ I I I I I I I I I I ~-------------------+---------------------~ IL ___________________ Upper bound n I _____________________ Lower bound n JI ~ Figure 46. Format of the Array Dope Vector (ADV) The ADV contains (2n + 1) 32-bit words, where n is the number of dimensions of the array. The number of dimensions in the array is not described within the ADV, but is passed to the library as an additional argument. AREA DOPE VECTOR This has the same format as the string dope vector, except that both the length fields are the same and contain the length of the AREA (not including the 16-byte control area). ARRAY DOPE VECTOR (ADV) This control block, shown in Figure 46, contains information required in the derivation of elemental addresses within an array data aggregate. The ADV has three functions: 1. Given an array, to step array in row-major order 2. Given the subscript values of an array element, to determine the element address 3. Given an element address, to determine its subscript values through the Within PL/I implementation, arrays are stored in row-major order, upward in storage. The elements of an array are normally held in contiguous storage, although this may not be so if the array is a member af a structure. However, any lack of contiguity is transparent to algorithms which employ an array dope vector. 162 o Defini~ion~of BtOf ADV fields: (= Bit offset): For an array of bit strings with the UNALIG~ED attribute, this is the bit offset from the byte address of the virtual origin. Virtual origin: The byte address of the array element whose subscript values are all zero, i.e.,X(O, ••. ,O);this element need not be an actual member of the array, in which case the virtual origin will address a location in storage outside the actual bounds of the array. Multiplier: Multipliers are fullword binary integers which in the standard ADV algorithm effect dimensional incrementation or decrementation to locate an element. Multipliers are in bits for fixed-length, bit string arrays, otherwise in bytes. Upper Bound: Halfword binary integer, specifying the maximum value permitted for a subscript in the ith dimension. This value may be negative. Lower Bound: Halfword binary integer, specifying the minimum value permitted for a subscript in the ith dimension. The value may be negative. ADV Algorithm: Given subscript values for an n-dimensional array, the address of any element is computed as: n Address virtual origin + L.: i=l S.*M. 1. 1. where Si = value of the ith subcript Mi = value of the ith multiplier For an array of bit st:i~gs with the UNALIGNED attribute, the orl.gl.n is a bit address formed by concatenating the virtual origin and the bit offset. For q;ll other arrays, the origin is the virtual origin. ture or to minor structures are inherited by the contained structure base elements: undimensioned non-string base elements are assigned a dope vector consisting only of a single-word address field. The structure dope vector is then derived by concatenating the dope vectors which the base elements would have if they were not part of a structure. in the order in which the elements appear in the structure. The following structure would have a dope vector of the form shown in Figure 47: 1 A" 2 B ( 10), 2 E, STRUCTURE DOPE VECTOR 3 C (1 0) CHAR ( 6 ) , 3 D BIT (10) VARYING, 3 F FLOAT (5), 3 G (10) FIXED, 3 H CHAR (3); This control block contains information required to 1erive, directly or indirectly, the address of all elements of the structure. The format of a structure dope vector is determined as follows. The dimensions which have been applied to the major struc- o 31 r-----------------------------------------, I CiS Virtual origin I ~-----------------------------------------~ Multiplier 1 I ~-----------------------------------------~ I Multip lier 2 I I ~--------------------T--------------------~ I Upper bound 1 I Lower bound 1 I ~--------------------+--------------------~ I Upper bound 2 I Lower bound 2 I ~--------------------+--------------------~ I STRING ARRAY DOPE VECTOR (SADV) This control block contains information required to derive, directly or indirectly (through a secondary array of SDV entries), , , I I I I I I I I I B's > Dope Maximum length I Current length I I Vector I ~--------------------L--------------------~ I D's virtual origin I I I ~-----------------------------------------~ I Multiplier I I I ~--------------------T--------------------~ I Upper bound I Lower bound I I I ~--------------------+--------------------~ J I Maximum length I 0 I ~--------------------L--------------------~ I F's Address I, ~-----------------------------------------~ I I G's virtual origin I I ~-----------------------------------------~ I I Multiplier I IE's ~-------------------~--------------------~ > Dope I Upper bound I Lower bound I I vector ~--------------------~--------------------~ I I H's Address I I ~--------------------T--------------------~ I Maximum length I ____________________ Current length IL____________________ JI JI ~ A's > Dope I Vector I I I I I I I I I I I I I I J Figure 47. Format of the structure Dope vector (SDV) Appendix C: Object Program Organization and Conventions 163 the address of elemental strings. The SADV is identical to the basic ADV, with the addition of a fullword which describes the string length. as shown in Figure 48. o 31 r-----------------------------------------,I I I I I I I I ADV I I I I I I IL~--------------------~--------------------~ Maximum length I ____________________ Current length/O JI ____________________ ~ Figure 48. Format of the Primary String Array Dope Vector (SADV) Fixed-length strings require only a primary dope vector. The two length fields are set to the same value, which is the declared length of the string. Variable-length strings require, in addition to the pr1mary dope vector, a secondary dope vector which consists of SDV entries for each elemental string within the array. The secondary dope vector is addressed via the primary dope vector by the standard ADV algorithm; having located the relevant SDV, the actual string data is directly addressable. The maximum-length field appended to the ADV is set to the maximum length of each array element. The current-length field is set to zero for arrays of VARYING strings, while for fixedlength strings it is set to the maximum length. Whereas the multipliers of the ADV for a fixed-length string apply to the actual string data, those of the ~DV for a variable-length string apply to the secondary dope vector of SDV entries. STRUCTURE MAPPING For any structure (major or minor), the length, alignment requirement, and position relative to a doubleword boundary will depend on the lengths, alignment requirements, and relative positions of its members. The process of determining these requirements for each level in turn and finally for the complete structure, is known as structure mapping. During the structure mapping process, the F compiler minimizes the amount of unused storage (padding) between members of the structure. It completes the entire process before the structure is allocated, according (in effect) to the rules discussed in the following paragraphs. It is necessary for the user to understand these 164 rules for such purposes as determining the record length required for a structure when record-oriented input/output is used, and for determining the amount of padding or rearrangement required to ensure correct alignment of a structure for locate-mode input/output (see "Record Alignment" in Appendix B). Structure mapping is not a physical process. Although during this discussion such terms as "shifted" and "offset" are used, these terms are used purely for ease of discussion, and do not imply actual movement in storage; when the structure is allocated, the relative locations are already known as a result of the mapping process. The mapping for a complete structure reduces to successively combining pairs of items (elements, or minor structures whose individual mappings have already been determined). Once a pair has been combined, it becomes a unit to be paired with another unit, and so on until the complete structure has been mapped. The rules for the process are therefore categorized as: Rules for pairing determining the order of Rules for mapping one pair These rules are described below, and the example at the end of this section shows an application of the rules in detail. Note: To follow these rules, it is necessarY-to appreciate the difference between logical level and level number.. The item with the greatest level number is not necessarily the item with the deepest logical level. If the structure declaration is written with consistent level numbers or suitable indention (as in the detailed example given after the rules), the logical levels are immediately apparent. In any case., the logical level of each item in the structure can be determined by applying the following rule to each item in turn, starting at the beginning of the structure declaration: The logical level of a given item is always one unit deeper than that of the nearest preceding item that has a lesser level number than the given item. For example: DCL 1 A, 4 B, 5 C, 5 D, 3 E, 8 F, 7 G; 1 2 3 3 2 3 3 The lower line shows the logical level for each item in the declaration. Rules for Order of Pairing The steps in determining pairing are as follows: the order of 1. Find the minor structure with the deepest logical level (which we will call logical level n). 2. If the number of minor structures at logical level n exceeds one, take the first one of them as it appears in the declaration. 3. Using the rules for mapping one pair (see below), ~air the first two elements appear1ng in this minor structure, thus forming a unit,. 4. Pair this unit with the next element (if any) appearing in the declaration for the minor structure, thus forming a larger unit. 5. Repeat rule 4 until all the elements in the minor structure have been combined into one unit. This completes the mapping for this minor structure; its alignment requirement and length, including any padding, are now determined and will not change (unless the programmer changes the structure declaration). Its offset from a doubleword boundary will also have been determined; note that this offset will be significant during mapping of any containing structure, and it may change as a result of such mapping. 6. Repeat rules 3 through 5 for the next minor structure (if any) appearing at logical level n in the declaration. 7. Repeat rule 6 until all minor structures at logical level n have been mapped. Each of these minor structures can now be thought of as an element for structure mapping purposes. 8. 9. Repeat the process for minor structures at the next higher logical level; that is, make n equal to (n - 1) and repeat rules 2 through 7. Repeat rule 8 until n = 1; then repeat rules 3 through 5 for the major structure. Rules for Maoping One Pair (As stated earlier, terms apparently implying physical storage are used here only for ease of discussion; the storage thus implied may be thought of as an imaginary model consisting of a number of contiguous doublewords. Each doubleword has eight bytes numbered zero through 7, so that the offset from a doubleword boundary can be given; in addition, the bytes in the model may be numbered continuously from zero onwards, starting at any byte, so that lengths and offsets from the start of a s'tructure can be given.) 1. Begin the first item of the pair on a doubleword boundary; or, if the item is a minor structure that has already been mapped .. offset it from the doubleword boundary by the amount indicated. 2. Begin the other item of the pair at the first valid position following the end of the first item. This position will depend on the alignment requirement of the second item. Alignment and length requirements for elements are given in Figures 49 and 49.1. (If the item is a minor structure, its alignment requirement will have been determined already.) 3. Shift the first item towards the second item as far as the alignment requirement of the first item will allow. The amount of shift determines the offset of this pair from a doubleword boundary. After this process has been completed, any padding between the two items will have been minimized and will remain unchanged throughout the rest of the operation. The pair can now be considered to be a unit of fixed length and alignment requirement; its length is the sum of the two lengths plus padding., and its alignment requirement is the higher of the two alignment requirements (if they differ). Effect of UNALIGNED Attribute The example of structure mapping given below shows the rules applied to a structure declared ALIGNED, because mapping of aligned structures is more complex owing to the number of different alignment requirements. Briefly, with the F compiler, the general effect of the UNALIGNED attribute is to reduce fullword and doubleword alignment requirements down to byte, and to reduce the alignment requirement for bit strings from byte down to bit. The same structure mapping rules apply, but the reduced alignment requirements are used. This means that unused storage between items can only be bit padding within a byte, and never a complete byte; bit pad- Appendix C: Object Program Organization and Conventions 165 r-------------------T-----------------T-----------------T------------T--------------, I I storage I I I I I I Variable Type Istored Internally I I as I Requirements (in Bytes) I Alignment I Explanation I Requirements I I I .-------------------+-----------------+-----------------+------------+--------------~ IBIT (n) I I lOne byte for eachl Igroup of 8 bits I I (or part thereof) I n rounded - up I I 8 .; I ~-------------------+-----------------+--------------;---~ ICHARACTER Cn) lOne byte per I n I I I character I I ~-------------------+-----------------+-----------------~ I PICTURE lOne byte for eachlNumber of I Byte I IPICTURE characterlPICTURE characI I I (except I ters other than I I 1M, V, K, G) 1M, V, K, and G 1 Data may begin on any byte o through 7 ~-------------------+-----------------+-----------------~ I P + 1 rounded I IDECIMAL FIXED (p,q) 11/2 byte per 1 Idigit plus 1/2 I Ibyte for sign I I ----- up 2 I I .-------------------+-----------------+-----------------+------------+--------------~ IBINARY FIXED (p,q) I I ~-------------------+-----------------~ I IBINARY FLOAT I p < 22 (p) IBinary integer I I Short ~-------------------~floating I DECIMAL FLO~_T (p) I point I I I I 4 I p < 7 I I ~-------------------+-----------------~ I I ~-------------------+-----------------~ I I POINTER I I OFFSET I I I Data may begin on byte 0 or 4 only I I Full I word I I I ~-------------------+-----------------+-----------------~ I LABEL 1 I 8 I ~-------------------+-----------------+-----------------~ I TASK 1 I 28 I ~-------------------+-----------------+-----------------~ I EVE NT I I 32 I ~--- ----------------+-----------------+-----------------+------------+--------------~ IBINARY FLOAT (p) I I I IData may I 1 21 < P < S4 I Long I I Double Ibegin on 1 ~-------------------~floating point I 8 Iwor1 Ibyte 0 1 IDECIMAL FLOAT (p) I 1 I lonly I . I 6 < P < 17 I 1 I ~-------------------+-----------------+-----------------~ I AREA L ___________________ eFigure 49. 1 I I _________________ I 16+length _________________ I ____________ I ______________ JI ~ ~ ~ ~ Summary of Alignment Requirements for ALIGNED Data ding may occur when the structure contains bit strings. POINTER, OFFSET, LABEL, TASK, EVENr, and AREA data cannot be unaligned. If a structure has the UNALIGNED attribute and it contains an element that cannot be unaligned, then UNALIGNED is ignored for that element; the element is aligned by the compiler and error message IEM3181I is put 166 I I out. For example, declaration in a program with the DECLARE 1 A UNALIGNED, 2 B, 2 C AREA(100) ; C is given the attribute ALIGNED, as the inherited attribute UNALIGNED conflicts with AREA. r-------------------T-----------------T-----------------T------------T--------------, I I I storage I I I I Variable IStored Internally I Requirements I Alignment I Explanation I Type I as I (in Bytes) I Requirements I I I t-------------------t-----------------t-----------------t------------t--------------~ IBIT (n) lAs many bits as I n bits IBit IData may beginl I I are required" I I Ion any bit in I I I regardless of I I I any byte 0 I Ibyte boundaries I I Ithrough 7 I I t-------------~-----t-----------------t-----------------t------------t--------------~ ICHARACTER (n) lOne byte per I n I I I I I I I character r-------------------t-----------------t-----------------~ I I PICTURE lOne byte for eachlNumber of PICTURE I I I I IPICTURE character I characters other I I I (except M, V,K,G) I than M, V, K and G I t-------------------t-----------------t-----------------~ IDECIMAL FIXED (p,q) 11/2 byte per I P + 1 rounded I Data may begin Idigit, plus 1/2 I ----- up I I on any byte 0 Ibyte for sign I 2 I I through 7 ~-------------------t-----------------t-----------------~Byte IBINARY FIXED (p/q) IBinary integer I I r-------------------t-----------------i IBINARY FLOAT (p) I I I p < 22 I Short ~-------------------~floating I DECINAL FLO.AT I p < (p) 7 point I I 4 I I I I I I I I I I I I Long I I I I I I I ____________ I ______________ J ~-------------------t-----------------t-----------------~ IBINARY FLOAT I 21 < P < 54 (p) point I B IDECIMAL FLOAT (p) I I 6 < P < 17 ______ I _________________ I _________________ IL ____________ ~-------------------~floating ~ ~ ~ ~ ~ Note: POINTER, OFrSET, LABEL, TASK, EVENT, and AREA data cannot be UNALIGNED. -Figure 49.1. Summary of Alignment Requirements for UNALIGNED Data Example of structure Mapping This example shows the application of the structure mappipg rules for a structure declared as follows: 3 S, 4 T FLOAT DECI~AL(15), 4 U CHARACTER ( 2), 3 V POINTER, 2 W PICTURE '$9V99 1 ; DECLARE 1 A ALIGNED, 2 B POINTER, 2 C, 3 D FLOAT DECIMAL(14), 3 E, 4 F LABEL, 4 G, 5 H CHARACTER(2) , 5 I FLOAT DECIMAL(13), 4 J FIXED BINARY (15,0) " 3 K CHARACTER ( 2) " 3 L FIXED BINARY(15,O), 2 M, 3 N, The minor structure at the deepest logical level is G, so that this is mapped first. Then E is mapped, followed by N, S, C, and M, in that order. Finally, the major structure A is mappe1. For each structure, a table is given showing the steps in the process, accompanied by a diagram giving a visual interpretation of the process. At the end of the example, the structure map for A is set out in the form of a table showing the offset of each member from the start of A. 4 P FIXED BINARY(15,O), 4 Q CHARACTER(2), 4 R FLOAT DECIMAL(2), Appendix c: Object Program Organization and Conventions 167 r---------T-------------T--------T-----------T-----------T-------------, I I I IOffset froml I I I Length IDoubleword I Length of I Offset from I I Name of I Alignment I Item I Requirement I t-----T-----1 Padding I G I I I I Begin I End I I I I ~---------t-------------t--------t-----t-----t-------- ---t-------------i step 1 I I I I I I H I I I step 2 I I *H I Byte Doubl e Byte Double I I I I I I 2 8 I 2 8 I I I 0 0 6 0 I I I I I 1 7 7 7 I I I I I 0 I I I I I 0 2 I I I I I ~---------t-------------t--------t-----t-----t-------- ---t-------------i IL _________ G I _____________ Double I ________ 10 I _____ 6 LI _____ 7 LI ________ ___ LI _____________ JI ~ ~ ~ *First item shifted right I H ,-A--.. Step Step I H I ,..-A--.., • 2 G -Figure 50. 168 Mapping of Minor Structure G r---------T-------------T--------T-----------T-----------T-------------, I " O f f s e t froml , I Name of I Alignment I Length 'Doubleword , Length of , Offset from I I Item I Requirement I ~-----T-----~ Padding I E I I I I IBeginl End I I I ~---------+-------------+--------+-----+-----+-----------+-------------~ Step 1 I F I Word I 8 I 0 I 7 I I I I G I Double I 10 I 6 , 7 I , , I I I , I I I I I Step 3 I F I I through I I G I I J I Step 2 I I *F G Word Double Double Word I I 4 I 6 ' I I ' I 20 I 4 I I I 4 I 0 ,8 I 10 I I I I I I I I I 3 I 7, 2 I I I I I 0 7 3 , I I I , I I I I I I I I I I I 0 10 20 ~---------+-------------+--------+-----+-----+-----------+-------------~ IL _________ E I _____________ Double I ________ 24 I _____ 4 I _____ 3 I ___________ I _____________ JI ~ ~ ~ ~ ~ ~ *First item shifted right G F Step I o o F Step G o 2 F Step G J o 3 .I E -Figure 51. Mapping of Minor Structure E Appendix C: Object Program Organization and Conventions 169 r---------T-------------T--------T-----------T-----------T-------------, I I IOffset froml , I I I Name of I Item I Alignment I Length IDoubleword I Length of , Offset from , ,Requirement, ~-----T-----~ Padding' N I I I ,Beginl End I I I ~---------+-------------+--------+-----+-----+-----------+-------------~ step 1 I P ,Word I 4 I 0 I 3 I I 0 I I Q I Byte I 2 I 4 I 5 I I 4 I Step 2,I I I P I I through I I I I word I I I Q I I I 6 I ' I I I 0 I I I 5 I I I I , I I I I I I I I R Word ,4 ,0 3 2 I 8 I ~----~----+-------------+--------+-----+-----+-----------+-------------~ L I _________ N I _____________ Word I ________ 12 I _____ 0 I _____ 3 I _________ I ____________ JI ~ ~ p a p Q ~ ~ ~- -~- R ----~ Step 2 \- N ·~igure 52. Mapping of Minor structure N r---------T-------------T--------T-----------T-----------T-------------, I I I IOffset from I I I I Name of I Alignment I Length IDoubleword I Length of I Offset from I I Item I Requirement I ~-----T-----~ Padding I S I I I I IBegin' End, I I ~---------+-------------+--------+-----+-----+-----------+-------------~ Step 1 I T I Double I 8 I 0 I 7 I I 0 I I U I Byte I 2 I 0 I 1 I 0 I 8 I ~---------+-------------+--------+-----+-----+-----------+-------------~ IL_________ s I _____________ Double I ________ 10 I _____ 0 I 1 I I JI ~ ~ T Step I ~ L_----~-------- ___ _____________ ~ U 0 -+~~~+_~~~~-L-L4_~~~~~-L~~~~~~~_+-L~~~ S .Figure 53. 170 Mapping of Minor Structure S r---------T-------------T--------T-----------T-----------T-------------, I I I IOffset froml I I I Name of I Alignment I Length IDoubleword I Length of I Offset from I I Item I Requirement I ~-----T-----~ Padding I C I IBeginl End I I I I I I step 1 ~---------t-------------t--------t-----t-----t-----------t-------------i Doubl e Double D E step 2 8 24 0 4 7 3 I I 0 12 0 36 2 40 I D through Double 36 0 3 2 4 5 I I I E Byte K step 3 4 I I I D through Double 38 0 5 I 3 I I K Word L 4 0 ~---------t-------------t--------t-----t-----t-----------t-------------~ I C L _________ I _____________ Double I ________ 44 I _____ 0 I _____ 3 I ___________ I _____________ JI ~ ~ ~ D Step ~ E (Ienqth 24) D 2 .A E (Ienqth 24) , , r D 3 K ,,--A--... .&, 7 1-'o 12-"-13-"-14--'-15-'-16'-17'--10 10II 121314151617 ~ 415 AII--7 0 rlr--I21~31-41--51--rb1----r , Step ~ I I Step ~ ,., """"'1 E (Ienqth 24) , ~ I I--r", -1 K ,--A--..., L £ .. I011121314151617~1415rk10111213141516171011121314151bl?F , c -Figure 54. Mapping of Minor structure C Appendix C: Object Program Organization and Conventions 171 r---------T-------------T--------T-----------T-----------T-------------, , " O f f s e t froml I I , I Name of I Alignment I Length IDoubleword I Length of I Offset from I Requi rement I ~-----T-----~ Padding I M I , I I ,Beginl End I I 1 ~---------+-------------+--------+-----+-----+-----------+-------------~ step 1 I N I Word I 12 I 0 I 3 I I I I s I Double I 10 I 0 I 1 I I I Item I I step 2 I *N s I I Step 3, I N through S I I I I I 'Word I Double I I I I I I I Double I I I I I 12 10 22 I I 4 0 I I ' I I I I I ' I 4 I I I 1 I 7 1 1 I I I I 0 I 0 12 I I I I I I I I I I I , I I I V Word 4 4 7 I 2 I 24 I ~---------+-------------+--------+-----+-----+-----------+-------------~ M Double 28 4 iI _____ 7 LI ________ ___ iI _____________ JI l, _________ iI _____________ L,________ iI _____ *Pirst item shifted right N Step I S 0 N S __--------A--------__ ,~---------A-------- Step 2 Step 3 M .Pigure 55. 172 Mapping of Minor Structure M r---------T-------------T--------T-----------T-----------T-------------, I I IOffset froml I I I I Name of I Alignment I Length IDoubleword I Length of I Offset from I I Item I Requirement I ~-----T-----~ Padding I A I I I I I Beginl End I I I step 1 ~---------+-------------+--------+-----+-----+-----------+-------------~ B C Word Double 4 44 0 0 3 3 *B Word Double 4 44 4 7 C 0 3 B through Double 48 4 3 Double 28 4 7 Double 76 4 7 4 0 3 step 2 step 3 C M step 4 o o 4 o 48 0 76 B through M W Byte ~---------+-------------+--------+-----+-----+-----------+-------------~ IL_________ A I _____________ Double I ________ 80 I _____ 4 I _____ 3 I ___________ I _____________ JI ~ ~ ~ ~ ~ ~ *First item shifted right B C (lenqth Step Step I 44) ~ r", IOII12131415IbI7IOIIP.'j1~3--14~15~lb~17~IOI~I1~21~31~41~51~bl~7IO~I-r112~13~14~15~lb~17'-~ B C B C 2 M (Ienqth 28) " Step 3 B C M w Step 4 "" A (length 80) -Figure 56. Mapping of Major structure A Appendix c: Object Program Organization and conventions 173 r--------------------~--------T--------T--------T--------, A From A 0 From C 4 D 0 4 padding (4) 8 12 E From E 12 16 F 0 12 16 padding (2) 8 20 24 G From G 10 22 26 H 0 10 22 26 I 2 12 24 28 J 20 32 36 36 40 K padding (2) 38 42 40 44 L M From M 48 N o 48 From-E p o 48 o Q 4 4 52 padding( 2) 6 6 54 8 R 8 56 12 60 s From S --0T 12 60 8 20 68 U padding (2) 22 70 24 72 V w 76 __________ .__________ -1-_______ .1. ________ .L ________ .L ________ J B C l -Figure 56.1. Offsets in Final Mapping of structure A ALLOCATION AND RELEASE OF STORAGE IN AN AREA It is the area size. plus the 16 bytes of control information. For example: The AREA attribute defines storaae reserved for the allocation of based Jvariables. In this implementation the amount reaserved consists of sixteen bytes of control information plus the amount requested for each allocation (see Figure 57). The control information and each allocation start on a doubleword boundary. The amount of storage defined in one of two ways: 1. required is Area size: This is the amount of storage reserved in the declaration of an area. For example, in the statement: DeL Z AREA(500) CONTROLLED; ALLOCATE Z; creates an allocated area Z of 516 bytes. The maximum length is 32783 bytes; the effective minimum length is 24 bytes. The default length is 1016 bytes. When an area is written using RECORD I/O, the amount transmitted is the area length., not the area size. The storage allocated for a variable always starts and ends on a doubleword boundary, whatever the amount requested. The amount allocated is 8*(CEIL«L+H)/8» when L Variable length (in bytes) DCL Z AREA(500); H The size of area Z is 500 bytes. The maximum size that can be declared is 32767 bytes. The effective minimum size is 8 bytes; 0 bytes can be declared but the AREA condition would be raised if an attempt was made to allocate a based variable into it. If a size is not declared, a default value of 1000 bytes is assumed. 2. 174 Area length This is the amount of storage needed for an area allocation. Offset (in bytes) of beginning of this variable from a doubleword boundary. Maximum value of H is 7 bytes. The total amount of storage allocated for variables in an area is the extent; the amount at a particular time in the current extent. The value of the current extent is increased every time an allocation is made beyond the end of the current extent. It is decreased only if the allocation that forms the end of the current extent is freed; then the value of the current extent is reduced accordingly. The current extent is not changed when an allocation ~ithin the extent is freed. r--------------------------------------, Length I o I ~--------------------------------------~ 4 I Current extent I 8 When an allocation within the extent is freed, the freed area is called a free element. Each free element starts ~ith two control words: Word 1: length bytes) of free element(in Word 2: Offset (in bytes) of next smallest free element. The last free element contains the offset of the fourth word of the control information. The chain of free elements created in this way in the fre~list. When an allocation is required, the free list is examined to find the smallest free element in which the variable will fit. If no free element is large enough, then the unused section at the end of the current extent is used. If this in turn is not large enough, the AREA condition is raised. When an element is freed, the free list is scanned to find if this element is contiguous with another free element. If so, the two are combined and then placed in the free list according to the combined size. If there is no contiguous element" the freed element is placed in the free list according to its size. r--------------------------------------~ I Offset of largest free element I r--------------------------------------~ 12 I Reserved/O I r--------------------------------------~ 16 I I · I Allocated I · I · I r--------------------------------------~ I I I Free element I I I Allocated I I I r--------------------------------------~ I I I r--------------------------------------~ I I I I I Free element I I I Allocated I I I I I r--------------------------------------~ I I I r--------------------------------------~ Free element I r--------------------------------------~ I I I I Allocated I I I r--------------------------------------~ I I I I I I I I Unused I I I I I I I I IL ______________________________________ JI Note: Figure 57. If there is a free list, the fourth control word contains 0; otherwise it is unused. AREA Format, showing Example of Allocated Storage and Free Elements Appendix C: Object Program Organization and Conventions 175 PAGE VERSION 4 RELEASE 17 OS/360 PLII COMPILER (F) 1 DATE 68.306 PLII F COMPILER OPTIONS SPECIFIED ARE AS FOLLOWS-LIST ,ATR.XREF, 0PT=1., LC=60, SIZE=96000 THE COMPLETE LIST OF OPTIONS USED DURING THIS COMPILATION IS-- EBCDIC CHAR60 NOMACRO SOURCE2 NOMACOCK COMP SOURCE ATR XREF NOEXTREF LIST LOAD NODECK FLAGW STMT SIZE-096000 LINECNT=060 OPT =01 SORMGIN=(002,072) NOEXTDIC NONEST OPLIST /*THIS IS A SMALL PROGRAMMING EXAMPLE ./ /.THIS IS A SMALL PROGRAMMING EXAMPLE /.TO SHOW HOW ASSEMBLER LANGUAGE SUBPROGRAMS CAN BE INCORPORATED /.INTO A PLII !9.IN PROGRAM. ./ ./ ./ /.THIS MODULE IS DESIGNED TO ACCEPT A CHARACTER STRING ARGUMENT /.OF ANY SIZE AND WRITE IT IN THE DATA SET DEFINED ON THE SYSPRINT 1'.00 CARD. ./ ./ ./ /*THE ACTUAL OUTPUT OPERATION IS CARRIED OUT BY THE PL/I LIBRARY /.MODULE lHEPRTB, WHICH IS INVOKED BY THE ASSEMBLER LANGUAGE /.MODULE (PRINTER). ./ ./ ./ / . ' PRIlfl'ER' IS INVOKED BY WRITING THE STANDARD CALL STATEMElfl' /.IN PLlI, USING THE ENTRY NAME TO WHICH CONTROL IS TO BE PASSED. ./ ./ I'.TO RUN THIS JOB, THERE MUST BE A DO CARD TO DESCRIBE THE DATA SET /.SYSPRINT. THE PL/I LIBRARY CONTAINS A DCB FOR THIS DATA SET, AND I'*WILL OPEN THE FILE FOR OUTPUT WHEN IT IS INVOKED, IF IT IS NOT /* ALREADY OPEN. ./ ./ ./ ./ I'.TO EXECUTE THIS PROGRAM, THE PLII AND ASSEMBLER LANGUAGE OBJECT ./ ./ ./ ./ /.MODULES MUST BE LINKAGE EDITED TOGETHER INTO ONE MODULE. THE I'.MODULES MUST BE PREPARED FOR LINKAGE EDITING IN THE ORDER PL/I /.MODULE FIRST, THEN ASSEMBLER LANGUAGE MODULE. 1 2 TEST: PROCEDURE OPTIONS (MAIN) ; DECLARE A1 CHARC3S); /.A1 IS THE VARIABLE TO BE /.WRITTEN ON SYSPRINT. 3 C.B = 2; /~INITIALIZE 4 D /.AND D. 5 A1 = (B.(C •• 2»/D; /.CALCULATE A VALUE IN FLOATING /.POINT AND CONVERT IT TO A CHAR/.ACTER STRING. 6 CALL PRINTER(Al); /.TO USE FACILITIES PROVIDED BY /.THE LIBRARY ROUTINE TO PUT OUT /.ERROR MESSAGES, IT IS NECESSARY /.TO CALL THE SUBROUTINE PRINTER. /.THIS IS WRITTEN IN ASSEMBLER /.LANGUAGE, AND ILLUSTRATES TWO /.IMPORTANT ASPECTS OF THIS SORT /.OF LINKAGE. 7 END TEST; 176 PAGE = 4; C AND B 2 /.THIS IS A SMALL PROGRAMMING EXAMPLE PAGE 3 PAGE 4 ATTRIBUTE AND CROSS-REFERENCE TABLE DCL NO. IDENTIFIER ATTRIBUTES AND REFERENCES 2 A1 AUTOMATIC. STRING, CHARACTER B AUTOMATIC.DECIMAL,FLOATCSINGLE) C AUTOMATIC. DEC I f9.L., FLOAT( SINGLE) 5,6 3.5 3.5 o AUTOMATIC.DECIMAL,FLOATCSINGLE) 4.5 PRINTER EXTERNAL. ENTRY, DECIMAL. FLOAT CSINGLE) TEST ENTRY ,DECIMAL., FLOAT CSINGLE) 6 1 /*THIS IS A SMALL PROGRAMMING EXAMPLE STORAGE REQUIREMENTS THE STORAGE AREA FOR THE PROCEDURE LABELED TEST IS 240 BYTES LONG THE PROGRAM CSECT IS NAMED TEST AND IS 184 BYTES LONG THE STATIC CSECT IS NAMED ••• TEST AND IS 100 BYTES LONG PAGE /.THIS IS A SMALL PROGRAMMING EXAMPLE STATIC INTERNAL STORAGE 000038 000040 000044 000030 000048 000050 000058 000060 000068 8A0680 00000000 00000000 00000000 00000000 4140000041200000 000000AC00230023 8A0600 2C 5 M~P OED FOR TEMP A.. TEST A.. IHEDNCA A.. IHESAFA A.. PRINTER CONSTANTS D.V. SKELETON OED OED ( Appendix D: Programming Example 177 /*THIS IS A SMALL PROGRAMMING EXAMPLE OBJECT LISTING * STATEMENT NUMBER 1 * PROCEDURE TEST * REAL ENTRY 000000 47 FO F OOA 000004 000005 OOOOOA 90 EB 0 OOC OOOOOE 41 AO 1 OOA 000012 41 80 A 026 000016 59 BO A OlE 00001A 58 FO B 020 00001E 59 00 A 022 000022 05 EF 000024 07 F8 000026 07 00 000029 00000000 00002C OOOOOOFO 000030 OS AO 000032 05 AO TEST 10(0,15) ALl (4) C'TEST' 14,11,12(13) 10,10(0,lS) 8,38 (0,10) 11, 30( 0, 10) 15,32(0,11) 0,34(0,10) 14,15 9 0 A(SI.) F'2110' 10,0 10,0 • PROLOGUE 000034 41 000038 000039 50 00003C 92 000040 92 000044 92 000049 02 DC 00 01 CO 07 00004E 000052 000056 00005A FO 0 OAC FO 0 099 AO A 029 00 41 50 41 07 B OC OC STM LA IA L L L BALR BR NOPR OC OC BALR BALR LA CL.4 000 062 063 000 098 B OSO * PROCEDURE BASE 00005C EQU ST MYI MYI MYI MYC IA ST IA NaPR CL.2 EQU * APPARENT ENTRY 99 (13) ,X' 06' 9,OV •• Al 9, WS1.1 l,WS1.1 15,A •• PRINTER 14,15 • STATEMENT NUMBER 7 OOOOBA 92 07 0 063 MVI OOOOBE 58 FO B 03C L 0000C2 05 EF BALR 99(3),X'07' lS,A •• IHESAFA 14,15 * END PROCEDURE TEST 00 00 00 10 20 30 40 FO EF 0 0 0 0 B 0 B B OA4 OAO 090 090 030 098 05B 038 ME DE STE LA LA LA LA 9,209(0,13) • * TEST MVI MVC MVC 99(1),X'30' C(4) ,C •• 0414 B(CI) ,C •• 0414 • STATEMENT NUMBER 4 00006C 92 04 0 063 000070 02 03 0 OAO B 048 MYI MVC 99(13),X'04' 0(4) ,C •• 0440 * STATEMENT NUMBER 5 000076 92 OS 0 063 00007A 79 00 0 OA9 00007E 7C 00 0 OA9 MVI LE ME o,e o,e 99(13),X'OS' /* THIS IS A SMALL PROGRAMMING EXAMPLE NO ERRORS OR WARNINGS DETECTED. 178 * STATEMENT NUMBER 6 0000A4 92 06 0 063 MVI 0000A9 41 80 0 098 LA OOOOAC 50 90 0 090 ST OOOOBO 41 10 0 090 LA 0000B4 59 FO B 040 L 0000B9 05 EF BALR 7c 70 70 41 41 41 41 58 05 13,PR •• TEST(2) 99 (13) ,X'OO' 99(13),X'01' 0(1) ,X'CO' DV •• A1(9),SKOV •• 04 CC 15,Al 15,OV •• Al 10,CL.2 0 * STATEMENT NUMBER 3 00005C 92 03 0 063 000060 02 03 0 OA9 B 04C 000066 02 03 0 OA4 B 04C COMPILE TIME L BALR 0, B . 0,0 O,WS1.l 1,WS1.l 2,OED •• 04AO 3, DV •• Al 4,OEO •• Al lS,A •• IHEONCA 14,15 000082 000086 00008A 00009B 000092 000096 00009A 00009B 0000A2 6 END BASE 90 0 000 0 0 0 0 0 PAGE */ 2.09 MINS PAGE 7 OUTPUT FROM OS/360 ASSEMBLER (E) SYMBOL PRINTER IHESADA IHEPRTB IHESAFA TYPE SD ER ER ER PAGE 1 ID ADDR LENGTH 01 000000 000044 02 03 04 PAGE 2 LOC OBJECT CODE ADOR1 ADDR2 STMT SOURCE STATEMENT THIS SUBROUTINE ILLUSTRATES SOME OF THE FUNCTIONS NECESSARY IN ORDER TO COMMUNICATE BETWEEN A PL/I MAIN PROGRAM AND AN ASSEMBLER LANGUAGE SUBPROGRAM. 5· 6. 7. 8. 9· 10· 11· 12· 13· 14. 15· 16· 17. 18. 19· 20· 21· 22· THE COMMENTS INCLUDED EXPLAIN FULLY WHAT HAS BEEN DONE TOGETHER WITH AN INDICATION OF WHAT MIGHT HAVE BEEN DONE. WHILE THIS IS A TRIVIAL EXAMPLE IT DOES SERVE TO DEMONSTRATE MOST OF THE LINKAGE PROBLEMS. IT SHOULD BE NOTED THAT TqE STANDARD SAVE MACRO COULD HAVE BEEN EMPLOYED IN THIS SUBPROGRAM. THIS PROGRAM IS LIMITED TO EXTRACTING THE ADDRESS AND CURRENT LENGTH OF A CHARACTER STRING FROM ITS DOPE VECTOR, AND PRESENTING THESE ITEMS AS ARGUMENTS TO A LIBRARY PRINT ROUTINE. THE PROGRAM ~ND STORAGE MANAGEME~T ROUTINES USE DIFFERENT MODULES FOR MULTITASKING AND NON-MULTITASKING Appendix D: Programming Example 179 PAGE 3 LOC OBJECT CODE ADDR1 ADDR2 STMT 000000 000000 000000 000004 000005 47FO FOOC 07 D7D9C9D5E3C5D9 OOOOOC 90EB DOOC 23PRINTER 24 OOOOC 25 26 27 28* 29* 30* OOOOOC 31PRINT1 32* 33* 34* 35* 36* 37* SOURCE STATEMENT START 0 USING .,15 BC 15.,PRINT1 DC r-.L1 (7) DC C' PRINTER' STM 14.11,12 (13) 000010 000012 05AO 000012 4100 0064 00064 000016 00001A 58FO A026 05EF 00038 00001C 180 9280 DOOO 00000 61 62 63* 64· 65* 66· 67* 68* 69· 70· 71· 72 73· 74· 75· 76* SAVE REGISTERS IN CALLER'S SAVE AREA. NOTE THAT THIS SUBPROGRAM IS PREPARED TO PRESERVE REGISTER 12. IN THE EVENT 0 F AN IN'IERRUPTION THE PL/I EXECUTION ERROR PACKAGE WOULD BE INVOKED. (IF IT WERE FELT TO BE NECESSARY THIS SUBROUTINE COULD HAVE HANDLED INTERRUPTIONS ITSELF BY SAVING REGISTER 12 AS WELL, ISSUING A SPIE MACRO, AND SAVING THE FORMER PICA ADDRESS. ON EXIT THESE ITEMS MUST BE RESTORED.) 3p· 39· 40· 41· 42· 43· 44· 45· 46 47 48 49· 50· 51* 52· 53· 54· 55· 56· 57. 58· 59* 60 LENGTH OF THE CHARACTER STRING WHICH FOLLOWS. ITS PURPOSE IS TO ENABLE THE PL/I SNAP OPTION TO PRINT OUT A TRACE IF SO REQUIRED. DROP 15 BALR 10.0 USING .,10 ESTABLISH ADDRESSIBILITY FOR REST OF ceNTROL SECTION. THIS FOLLOWS THE SYSTEM USED BY THE OBJECT CODE PRODUCED EY THE F COMPILER. USE IS NOW M~DE OF THE PL/I LIBRARY IN ORDER TO OBTAIN A SAVE AREA. THIS HAS BEEN DONE DYNAMICALLY AS THIS IS EXACTLY WHAT IS DONE BY PL/I OBJECT CODE. IF THERE IS NO ABSOLUTE REQUIREMENT roR THIS CODE TO BE EITHER REENTRANT OR RECURSIVE THEN STORAGE COULD HAVE BEEN RESERVED roR IT BY MEANS OF DC'S OR DS'S. LA 0,100 L 15,ADDR1 BALR 14,15 LENGTH OF DYNAMIC SAVE AREA (LENGTH IS 108 IF MULTITASKING IS USED) GET ADDRESS OF LIBRARY GETDSA ROUTINE, AND BRANCH TO IT. IT IS NOW NECESSARY TO INITIALIZE THE SAVE AREA. NOT MUCH WORK IS DONE IN THIS EXAMPLE BUT PL/I OBJECT CODE USUALLY PERFORMS MAtN MORE FUNCTIONS. IT IS NOT ABSOLUTELY NECESSARY TO DO MORE THAN IS INDICATED HERE BUT IF THE READE~ WISHES TO OBSERVE ALL THE PL/I CONVENTIONS THEN CONSIDERABLY MORE CODE WOULD BE REQUIRED. MVI 0(13),X'80' MOVE IN FLAG BYTE AS REQUIRED BY LIBRARY FREEDSA ROUTINE. AT THIS STAGE THE SAVING CONVENTIONS HAVE BEEN DEALT WITH AND ATTENTION CAN BE GIVEN TO PARAMETERS PAGE 4 LOC OBJECT CODE ADDRl ADDR2 S'l'MT 000020 5860 1000 00000 000024 5810 EOOO 00000 000028 4120 E006 00006 00002C 000030 58FO A02A 05EF 0003C 000032 000036 58PO A02E 07FF 000038 00003C 000040 00000000 00000000 00000000 00040 77 78· 79. 80 81· 82 83· 84 85 86· 87. 88· 89· 90· 91· 92· 93 94 95· 96· 97. 98ADDRl 99ADDR2 100ADDR3 101· 102· 103 SOURCE STATEMENT L 14.0 (0,1) L 1,,0 (0,14) LA 2,6(0,14) GET ADDRESS OF ARGUMENT - NOTE THAT THIS IS NOT TaE STRING ITSELF BUT ITS DOPE VECTOR. GET ADDRESS OF STRING FROM THE DOPE VECTOR. GET ADDRESS OF CURRENT LENGTH OF STRING FROM DOPE VECTOR. GET ADDRESS OF LIBRARY PRINT MODULE, AND BRANCH TO IT. 15.,ADDR2 L BALR 14,15 UPON RETURN THIS SUBPROGRAM HAS COMPLETED ITS TASK AND NOW MAKES USE OF THE LIBRARY FREEDSA ROUTINE IN ORDER TO RELEASE ITS DYNAMIC STORAGE (USED AS A SAVE AREA), AND TO RETURN TO ITS CALLER. L BCR 15.ADDR3 15.,15 DC V(IHESADA) V( IHEPRTB) V(IHESAPA) DC DC GET ADDRESS OF LIBRARY FREED SA MODULE AND BRANCH TO IT. ADDRESS OF LIBRARY GETDSA RTN ADDRESS OF LIBRARY PRINT RTN ADDRESS OF LIBRARY FREEDSA RTN END RELOCATION DICTIONARY POS.ID REL. ID 01 01 01 02 03 04 FLAGS lC 1C 1C ADDRESS 000038 00003C 000040 Appendix D: Programming Example 181 APPENDIX E: CATALOGED PROCEDURES This section lists the PLiI (F) cataloged procedures. It also describes statements used to override statements and parameters in any cataloged procedure. (The use of cataloged procedures is discussed in "Job Processing".) The procedures may be used with any of the System/360 operating system job schedulers. When parameters required by a particular scheduler are encountered by another scheduler not requiring those parameters, either they are ignored or alternative parameters are substituted automatically. For example, if these procedures are used with a sequential scheduler the following parameters, which are required for the multiprogramming option with variable number of tasks (MVT), are treated as follows: REGION=xxxxK is ignored DISP=SHR is interpreted as DISP=(OLD) execution step in procedures PL1LFCLG and PL1LFLG, unless the default value is acceptable. The default value is established by the input reader procedure. Installations not using the MVT option should remove the superfluous parameters. In addition, the following general recommendations should be considered: under MVI', the system task initiator requires 52K bytes to initiate or terminate a step. If REGION<52K, the initiator may be held up during step termination until 52K bytes are available. when the MVT option is used, a SPACE parameter may be required for SYSPRINT if the device is other than a printer. the PARM fields for compilation and linkage editing steps should follow installation conventions. Installation Modifications Before use, these procedures should be studied with a view to modifying them for greater efficiency within the particular environment of the installation. Some such modifications are detailed below. In installations using the MVT option of the operating system., the REGION specifications for the compilation and linkediting steps must be altered where necessary to suit the available storage. The REGION specification for the compilation step must be at least 4K bytes greater than the storage specified in the compiler SIZE option (unless SIZE=999999). Failure to ensure this may result in a system abnormal termination before the compiler can provide any diagnostic aid. In the three procedures in which the Linkage Editor is invoked, a REGION of 96K has been specified for the link-editing step. If necessary, this REGION specification may be reduced to conserve storage. The minimum REGION specifications for the various design levels of the Linkage Editor are: Linkage Editor E15 E18 E44 REGION Specification 24K 26K 54K Installations using the MVT option should also insert a REGION specification for the 182 the SPACE and UNIT parameters for temporary data sets should be modified according to installation configuration and conventions. blocking factors should for output data sets. be specified For further information on writing installation cataloged procedures" see the publication IBM System/360 Operating Systern~ystern Programmer" s Guide. COMPILATION WITH DECK OUTPUT The cataloged procedure for compilation with deck output is shown in Figure 58. The cataloged procedur~ specified in the user's EXEC statement that invokes the PL/I (F) compiler is named PL1DFC. In turn, the EXEC statement PL1D within the cataloged procedure itself, indicates that the operating system is to execute the program IEMAA (the name for the PLII (F) compiler). If compiler options are not explicitly supplied with the procedure, default options are assumed. The programmer can override the default options by specifying the required options in the EXEC statement invoking the cataloged procedure. r-----------------------------------------, IIPL1D EXEC COMPILATION AND LINK-EDITING PGM=IE~ PARM=- DECK, NOLOAD' " REGION=52K IISYSPRINT DD SYSOUT=A IISYSPUNCH DD SYSOUT=B IISYSUT3 DD UNIT=SYSSQ, SPACE=(SO, (250,250», SEP=SYSPRINT UNIT=SYSDA, SPACE=(1024,(60,60)" CONTIG) , SEP= (SYSUT3, _________________________________________ SYSPRINT,SYSPUNCH) J IISYSUT1 .Figure 58. DD Cataloged Procedure (PL1DFC) for compilation with Deck output The cataloged procedure for compiling and link-editing a PL/I source program is shown in Figure 60. The EXEC statement invoking the linkage editor is named LKED, and specifies that the operating system is to execute IEWL, the name for the linkage editor program. If linkage editor options other than those in the cataloged procedure are required, the parameters an the IILKED EXEC card must be overridden as described below. r-----------------------------------------, IIPL1L EXEC PGM=IEMAA, PARM=4LOAD,NODECK', REGION=52K IISYSPRINT DD SYSOUT=A IISYSLIN DO DSNAME=&&LOADSET, DISP=(MOD, PASS), UNIT=SYSSQ, SPACE=(SO, (250,100» IISYSUT3 DD UNIT=SYSSQ, SPACE= ( 80, (25 0 , 250) ) , SEP=SYSPRINT IISYSUT1 DO UNIT=SYSDA, SPACE=(1024,(60,60)" CONTIG) , SEP=(SYSUT3,SYSPRINT, SYSLIN) COMPILATION WITH OBJECT MODULE OUTPUT The cataloged procedure for compilation with object module output is shown in Figure 59. The cataloged procedure specified in the user's EXEC statement that invokes the PL/I (F) compiler is named PL1LFC. In turn, the EXEC statement PL1L within the cataloged procedure itself indicates that the operating system is to execute the program IEMAA (the name for the PL/I (F) compiler). EXEC IILKED r-----------------------------------------, IIPL1L EXEC PGM=IEMAA, PGM=IEWL, PARM='XREF,LIST', COND=(9,LT,PL1L), REGION=96K PARM='LOAD,NODECK', REGION=52K IISYSLIB DO DSNAME=SYS1.PL1LIB, DISP=SHR IISYSPRINT DD SYSOUT=A IISYSLMOD DD IISYSLIN DD DSNAME=&&LOADSET, DISP=(MOD,PASS), UNIT=SYSSQ, SPACE= (80, (250,100» DSNAME=&&GOSET(GO), OISP=(MOD,PASS), UNIT=SYSDA, SPACE=(1024,(50,20,1), RLSE) I/SYSUT1 DO IISYSUT3 DO UNIT=SYSSQ, SPACE=(SO, (250,250», SEP=SYSPRINT UNIT=SYSDA, SEP=(SYSLMOD,SYSLIB), SPACE=(1024,(200,20» UNIT=SYSDA, SPACE=(1024,(60,60)" CONTIG) , SEP= (SYSUT3, L________________________________________ _ SYSPRINT,SYSLIN) IISYSUT1 eFigure 59. IISYSPRINT DO SYSOUT=A IISYSLIN DO OSNAME=&&LOADSET, DISP=(OLD,DELETE) II DO DDNAME=SYSIN DD Cataloged Procedure (PL1LFC) for Compilation with Object Module output .Figure 60. Compilation and Link-Editing Cataloged Procedure (PL1LFCL) Appendix E: Cataloged Procedures lS3 COMPILATION, LINK-EDITING, AND EXECUTION The cataloged procedure for compiling, link-editing, and executing PL/I source programs (PL1LFCLG) is shown in Figure 61. LINK-EDITING AND EXECUTION The cataloged procedure for link-editing and executing a previously compiled PL/I program is shown in Figure 62. r-----------------------------------------, //LKED EXEC PGM=IEWL, PARM='XREF,LIST' " REGION=96K r-----------------------------------------, //PL1L EXEC //SYSLIB DD DSNAME=SYS1.PL1LIB, DISP=SHR //SYSLMOD DD DSNAME=&&GOSET(GO), DISP=(MOD,PASS), UNIT=SYSDA, SPACE=(1024,(50,20,1}, RLSE) DD UNIT=SYSDA, SEP= (SYSLMOD., SYSLIB), SPACE=(1024,(200,20» PGM=IE~Ar PARM=' LOAD, NODECK' REGION=52K //SYSPRINT DD SYSOUT=A //SYSLIN DSNAME=&&LOADSET, DISP=(MOD,PASS), UNIT=SYSSQ, SPACE= (80, (250,100» //SYSUTl UNIT=SYSSQ, SPACE=(80, (250,250», SEP=SYSPRINT //SYSPRINT DD SYSOUT=A //SYSLIN DDNAME=SYSIN //SYSUT3 //SYSUTl //LKED DD DD DO EXEC //SYSLIB //SYSLMOD //SYSUTl DD DD DD UNIT=SYSDA, SPACE=(1024,(60,60),. CONTIG) , SEP=(SYSUT3,SYSPRINT, SYSLIN) PGM=IEWL, PARM='XREF,LIST', COND=(9,LT,PL1L), REGION=96K DSNAME=SYS1.PL1LIB, DISP=SHR DSNAME=&&GOSET(GO), DISP=(MOD, PASS), UNIT=SYSDA, SPACE=(1024, (50,20,1), RLSE) UNIT=SYSDA, SEP=(SYSLMOD,SYSLIB), SPACE=(1024,(200,20» //SYSPRINT DD SYSOUT=A //SYSLIN DD DSNAME=&&LOADSET, DISP=(OLD,DELETE) // DD DDNAME=SYSIN //GO DD EXEC PGM=*.LKED.SYSLMOD, COND= (9, LT, LKED) I I //SYSPRINT DD SYSOUT=A l _________________________________________ J .Figure 62. Link-Editing an1 Execution Cataloged Procedure (PL1LFLG) OVERRIDING CATALOGED PROCEDURES Cataloged procedures are composed of EXEC and DD statements. A feature of the operating system is its ability to read control statements and to modify a cataloged procedure for the duration of the current job. Overriding is only temporary; that is, the parameters added or modified are in effect only for the duration of the job; the cataloged procedure is not permanently modified. This section discusses the techniques used in modifying cataloged procedures. Overriding Parameters in the EXEC Statement //GO EXEC PGM=*.LKED.SYSLMOD, COND=( (9 ,LT, LKED), (9 .. LT, PL1L» _________________________________________ J //SYSPRINT DD SYSOUT=A .Figure 61. 184 Compilation, Link-Editing, and Execution cataloged Procedure (PL1LFCLG) The PL/I programmer can change compiler or linkage editor options for execution of a cataloged procedure, or he can state different conditions for bypassing a job step. For full details, see the publication IBM System/360 Operating System, Job Control Language. Example: Assume a source program is compiled, linkedited, and executed using the cataloged procedure PL1LFCLG. Assume further that the compiler option SIZE and the linkage editor option XREF are used, that the linkage editor option LIST is not required, and that the time for execution of the load module is charged to account number 123. The following EXEC statement adds and overrides parameters to the procedure: When overriding takes place, the original DO statement in the cataloged procedure is copied, and the parameters specified in the original DD statement are replaced by the corresponding parameters in the new DD statement. Therefore, only parameters that must be changed are specified in the new DD statement. If more than one DO statement is modithe overriding DD statements must be in the same order as the original DD statements in the cataloged procedure. Any DD statements that are added to the procedure must follow the overriding statements within the job step to which they belong. fied~ //STEPl EXEC PL1LFCLG,PARM.PL1L= 'SIZE=065536, LOAD, NODECK', REGION.PL1L=68K, PARM.LKED='XREF' ACCT.GO='123' Note that if the COND parameter is to be overwritten, it must be specified as COND.catprocname.stepname, where catprocname is the name of the cataloged procedure. In procedure steps, the programmer can catalog data sets, assign names to data sets~ supply DCB information for data sets, add data sets, or specify particular volumes for data sets by using overriding DD statements. overriding and Adding DD statements The programmer may also override and add parameters in DD statements. The form "procstep. d,"1name" is used for this purpose. The "procstep" ir1entifies the step in the cataloged procedure. If "ddname" is the name of a DD statement present in the step, the parameters in the new DD statement override parameters in the DO statement in the step. If "ddname" is the name of a DD statement not present in the step, the new OD statement is added to the step. In any case, the modification is effective only for the current execution of the cataloged procedure. Note: ~ temporary name assigned to a data set--should be preceded by a double ampersand (&&). A single ampersand (&) denotes a symbolic parameter. Since the occurence of a single ampersand defines a symbolic parameter., two consective ampersands should be coded when a symbolic parameter is not being defined (e.g., a DSNAME value or a PARM field value). However, if a character string preceded by a Single ampersand is encountered and no symbolic value has been assigned to it, the single ampersand is processed as if double ampersands had been coded. For further information on the use of single and double ampersands see the section on symbolic parameters in the publication IBM System/360 Operating System: Job Control Language. Appendix E: Cataloged Procedures 185 APPENDIX F: DYNAMIC INVOCATION OF THE COMPILER The PL/I (P) compiler can be invoked by using one of the assembler language macro instructions CALL, LINK, XCTL, or ATTACH. If the XCTL macro is used to invoke the compiler, then no user options may be stated. The compiler will use the standard default, as set during system generation, for each option. If the compiler is invoked by CALL, LINK, or ATTACH, the user may supply: The compiler options The ddnames of the data sets to be used during processing The first page number to be used on the output listing r----------T----------T-------------------, I Name I Operation I Operand I r----------+----------+-------------------i I [symboll I CALL IIEMAA,([optionlistl I I I I I I I I [symbol] I LINK I I ATTACH I I IL__________ I __________ ~ I [,[ddnamelistl I [,pagenbrl]), VL I I I I I EP=IEMAA, I IPARAM=([optionlistll I [,[ddnamelistl I I ___________________ [,pagenbr]]), VL=l JI ~ EP - specifies the symbolic name of the compiler. The entry point at which execution is to begin is determined by the control program (from the library directory entry). PARAM - specifies, as a sublist, address parameters to be passed from the problem program to the compiler. The first word in the address parameter list contains the address of the option list. The second word contains the address of the ddname list. The third word contains the address of the page number parameter. If standard pagination is to be used, this parameter nlay be omitted. optionlist - specifies the variable length list options. If no list is position must be marked address of a containing the provided, the by a comma. The option list must begin on a halfword boundary. The two high-order bytes contain a count of the number of bytes in the remainder of the list. If no options are specified, the count must be zero. The option list is free 186 form with each field separated by a comma. No blanks or zeros should appear in the list. ddnamelist - specifies the address of a variable length list containing alternate ddnames for the data sets used during compiler processing. If standard ddnames are used and the page number operand is not used, then this operand may be omitted. If it is omitted and the page number operand is specified, a comma must be included to represent the omission. If the page number operand is specified, the address must be written whether or not standard ddnames are used. The ddname list must begin on a halfword boundary. The two high-order bytes contain a count of the number of bytes in the remainder of the list. If no ddnames are specified but the page number operand is used, then the count must be zero. Each name of less than eight bytes must be leftjustified and padded with blanks. If an alternate ddname is omitted, the standard name will be assumed. If the name is omitted within the list, the 8-byte entry must contain binary zeros. Names can be omitted from the end merely by shortening the list. The sequence of the 8-byte entries in the ddname list is as follows: Entry Alternate Name for: 1 2 3 4 5 6 7 8 9 10 SYSLIN not applicable not applicable SYSLIB SYSIN SYSPRINT SYSPUNCH SYSUT1 not applicable SYSUT3 pagenbr - specifies the address of a 6-byte fixed length list containing a number to be used as the initial page number on the output listing of the compiler. If standard pagination is to be used, then this operand may be omitted. The page number list must begin on a halfword boundary. the halfword containing the value four, followed by four bytes containing the page number in binary. VL - specifies that the sign bit is to be set to 1 in the last word of the address parameter list. Appendix F: Dynamic Invocation of the Compiler 187 APPENDIX G DIAGNOSTIC MESSAGES SOURCE PROGRAM DIAGNOSTIC MESSAGES All source program diagnostic messages produced are written in a group following the source program listing and any other listings specified as a parameter on the EXEC statement card. Each message number is of the form IEMnnnnI, where the code IEM indicates the PLII (F) Compiler, and nnnn the number of the message. The letter I is a system standard action code indicating an informative message for the programmer. There are four types of diagnostic message: warning, error, severe error, and terminal error. A Warning is a message that calls attention to a possible error, although the statement to which it refers is syntactically valid. In addition to alerting the programmer, it may assist him in writing more efficient programs in the future. An Error message describes an attempt to correct an erroneous statement; the programmer is informed of the correction. Errors do not normally terminate processing of the text. A Severe error message indicates an error which cannot be corrected by the compiler. The incorrect section of the program is deleted, but compilation is continued. Where reasonable, the ERROR condition will be raised at object time, if execution of an incorrect source statement is attempted. If a severe error occurs during compile-time processing, compilation will be terminated after the SOURCE listing has been produced. sages are according to In the list of diagnostic messages below, the abbreviations W, E, S, and T, respectively, are used to indicate the severity of the message, and appear immediately before the number of the message. They do not appear in this way in the compiler output listings; instead, the mes188 in separate groups In the following text, messages are followed where necessary by an explanation, a description of the action taken by the system, and the response required from the user. "Explanation" and "System Action" are given only when this information is not contained in the text of the message. When no "User Response" is stated explicitly, the user should assume that he must correct the error in his source program unless the action taken by the system makes it unnecessary for him to do so. However, even when system action successfully corrects an error, the user should remember that if he subsequently recompiles the same program, he will get the same diagnostic message again unless he has corrected the source error. E IEM0002I INVALID PREFIX OPERATOR IN STATEMENT NUMBER xxx. REPLACED BY PLUS. E IEM0003I RIGHT PARE~THESIS INSERTED STATEMENT NUMBER xxx E IEM00041 OPERATOR .NOT. IN STATEMENT NUMBER xxx USED AS AN INFIX OPERATOR. IT HAS BEEN REPLACED BY .NE. E IEM0005I RIGHT PARENTHESIS INSERTED AFTER SINGLE PARENTHESIZED EXPRESSION IN STATEMENT NUMBER xxx E IEM0006I RIGHT PARENTHESIS INSERTED AT END OF SUBSCRIPT, ARGUMENT OR CHECK LIST IN STATEMENT NUMBER xxx S IEM0007I IDENTIFIER MISSING IN STATEMENT NUMBER xxx. A DUMMY IDENTIFIER HAS BEEN INSERTED. E IEM0008I RIGHT PARENTHESIS INSERTED AT END OF CALI ARGUMENT LIST OR OTHER EXPRESSION LIST IN STATEMENT NUMBER xxx W IEM0009I A LETTER IMMEDIATELY FOLLOWS CONSTANT IN STATEMENT NUMBER xxx. AN INTERVENING BLANK IS ASSUMED. E IEM0010I IMPLEMENTATION RESTRICTION. IDENTIFIER yyyy IN OR NEAR STATEMENT NUMBER xxx IS TOO LONG AND HAS BEEN SHORTENED. A Terminal error message describes an error which, when discovered, forces the termination of the compilation. The choice of the severity level at and above which niagnostic messages appear on the output is an option which may be selected by the programmer. FLAGW is assumed if no level is specified. printed severity~ IN Implementation Explanation: I dentif iers may restriction. not exceed 31 characters in length. E IEM0012I E IEM0013I E IEM0014I E IEM0015I E IEM0016I E IEM0017I E IEM0018I SHILLINGS FIELD TRUNCATED IN STERLING CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx E IEM0025I ZERO INSERTED IN FIELD OF STERLING BEGINNING yyyy IN NUMBER xxx E IEM0026I ILLEGAL CHARACTER IN APPARENT BIT STRING yyyy IN STATEMENT NUMBER xxx. STRING TREATED AS A CHARACTER STRING. E IEM0027I FIXED-POINT CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx HAS BEEN TRUNCATED ON THE RIGHT. INTEGER yyyy TOO LONG IN STATEMENT ~UMBER xxx. IT HAS BEEN TRUNCATED ON THE RIGHT. S IEM0028I EXPONENT TOO LONG IN FLOATINGPOINT CONSTANT BEGINNING yyyy TN STATEMENT NUMBER xxx. IT HAS BEEN TRUNCATED. LABEL REFERENCED ON END STATEMENT NUMBER xxx CANNOT BE FOUND. END TREATED AS HAVING NO OPERAND. S IEM0029I SOLITARY DECIMAr~ POINT FOUND IN OPERAND POSITION IN STATEMENT NUMBER xxx A FIXED-POINT ZERO HAS BEEN INSERTED. INVALID CHARACTER IN BINARY CONSTANT IN STATEMENT NUMBER xxx CONSTANT TREATED AS DECIMAL CONSTANT. S IEM0030I POINTER QUALIFIER FOLLOWS EITHER A SUBSCRIPT OR ANOTHER POINTER QUALIFIER IN STATEMENT NUMBER xxx. CONSTANT IMMEDIATELY FOLLOWS IDENTIFIER IN STATEMENT NUMBER xxx. AN INTERVENING BLANK IS ASSUMED. EXPONENT MISSING IN FLOATINGPOINT CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx. ZERO HAS BEEN INSERTED. FLOATING-POINT CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx IS TOO LONG AND HAS BEEN TRUNCATED ON THE RIGHT. ZERO INSERTED IN FLOATING-POINT CONSTANT BEGINNING .E IN STATEMENT NUMBER xxx POUNDS FIELD IN STERLING CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx IS TOO LONG AND HAS BEEN TRUNCATED. E IEM0020I ZERO INSERTED IN POUNDS FIELD OF STERLING CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx E IEM0021I DECIMAL POINT IN EXPONENT FIELD OF CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx FIELD TRUNCATED AT DECIMAL POINT. E IEM0022I DECIMAL PENCE TRUNCATED IN STERLING CONSTANT BEGINNING yyyy STATEMENT NUMBER xxx S IEM0031I OPERAND MISSING IN OR FOLLOWING STATEMENT NUMBER xxx DUMMY OPERAND INSERTED. Explanation: Something invalid has been found in an expression~ or where an expression was expected but not found. In order that further diagnosis can be made., the compiler has inserted a dummy operand. This may cause further error messages to appear for this statement. T IEM0032I LETTER L MISSING FROM STERLING CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx SHILLINGS CONSTANT STATEMENT System Action: As stated in a further message referring to the same statement. ZERO INSERTED IN PENCE FIELD OF STERLING CONSTANT BEGINNING yyyy IN STATEMENT NUMBER xxx E IEM0019I E IEM0023I None E IEM0024I System Action: Identifier has been shortened by concatenating first 16 characters with last 15. W IEMOOllI System Action: IMPLEMENTATION RESTRICTION. STATEMENT NUMBER xxx IS TOO LONG. COMPILATION TERMINATED AT THIS POINT. User Response: subdivide statement and recompile E IEM0033I AN INVALID PICTURE CHARACTER IMMEDIATELY FOLLOWS TEXT yyyy IN STATEMENT NUMBER xxx. THE PICTURE HAS BEEN TRUNCATED AT THIS POINT. Appendix G: Diagnostic Messages 189 W IEM00341 A LETTER IMMEDIATELY FOLLOWS A CONSTANT AT nnnn SEPARATE POSITION(S> IN STATEMENT NUMBER xxx. AN INTERVENING BLANK HAS BEEN ASSUMED IN EACH CASE. User Response: check that system action will have required effect E IEM00351 E IEM00371 system Action: All lowing the 1* is comrrent. LETTER F IS NOT FOLLOWED BY LEFT PARENTHESIS IN PICTURE IN STATEMENT NUMBER xxx. ONE HAS BEEN INSERTED. ZERO INSERTED IN SCALING FACTOR IN PICTURE yyyy IN STATEMENT NUMBER xxx RIGHT PARENTHESIS INSERTED AFTER SCALING OR REPLICATION FACTOR IN PICTURE yyyy IN STATEMENT NUMBER xxx E IEM00391 NO CHARACTER FOLLOWS REPLICATION FACTOR IN PICTURE yyyy IN STATEMENT NUMBER xxx. THE PICTURE HAS BEEN TRUNCATED AT THE LEFT PARENTHESIS OF THE REPLICATION FACTOR. E IEM00401 A REPLICATION FACTOR OF 1 HAS BEEN INSERTED IN PICTURE yyyy IN STATEMENT NUMBER xxx S IEM00431 RIGHT PARENTHESIS INSERTED STATEMENT NUMBER xxx IN STATEMENT NUMBER xxx PRECISION NOT AN INTEGER Precision be an unsigned integer Expl~nation: INVALID STATEMENT LABEL CONSTANT IN LABEL ATTRIBUTE IN STATEMENT NUMBER xxx. THE STATEMENT LABEL CONSTANT LIST HAS BEEN DELETED. W IEM0051I MISSING RIGHT PARENTHE·SIS INSERTED FOLLOWING STATEMENT LABEL CONSTANT IN LABEL ATTRIBUTE IN STATEMENT NUMBER xxx S IEM00521 INVALID ATTRIBUTE IN RETURNS ATTRIBUTE LIST IN STATEMENT NUMBER xxx. THE INVALID ATTRIBUTE HAS BEEN DELETED FROM THE LIST. W IEM00531 SURPLUS COMMA HAS BEEN FOUND IN DECLARE OR ALLOCATE STATEMENT NUMBER xxx. THIS COMMA HAS BEEN DELETED. S IEM00541 ILLEGAL FORM OF CALL STATEMENT. STATEMENT NUMBER xxx DELETED. W IEM00551 LABEL OR STATEMENT IGNORED. E IEM00561 NULL PICTURE FORMAT ITEM IN STATEMENT NUMBER xxx. THE CHARACTER 9 HAS BEEN INSERTED IN THE PICTURE. LABELS ON DECLARE NUMBER xxx HAVE BEEN should Z£RO INSERTED IN FIXED PRECISION SPECIFICATION IN STATEMENT NUMBER xxx E IEM00461 RIGHT PARENTHESIS INSERTED AFTER PRECISION SPECIFICATION IN STATEMENT NUMBER xxx E IEM00481 RIGHT PARENTHESIS INSERTED IN FILE NAME LIST IN STATEMENT NUMBER xxx 190 folas a S IEM00501 System Action: The action taken depends on whether the precision is found in a DECLARE statement or a PROCEDURE statement. A further message will be produced. E IEM00451 text read User Response: Check if this is a delimiter in the wrong column of the record. IN Explanation: Right parenthesis missing from length attached to character or bit string. THE COMMENT FOLLOWING THE LOGICAL END OF PROGRAM HAS NOT BEEN TERMINATED. Explanation: A 1* was found following the logical end of the program and was interpreted as the start of a comment, but end-of-file was reached before the comment was terminated. the the E IEM00381 E IEM00441 E IEM00491 Explanation: The null picture may be the result of the compiler truncating an invalid picture. E IEM00571 INVALID CHARACTER FOLLOWING ITERATION FACTOR IN PICTURE BEGINNING yyyy IN STATEMENT NUMBER xxx. THE PICTURE HAS BEEN TRUNCATED AT THE LEFT PARENTHESI S OF THE ITERATION FACTOR. E IEM00581 ITERATION FACTOR IN PICTURE BEGINNING yyyy NOT AN UNSIGNED User Response: Rewrite program with fewer blocks, or divide into more than one separate compilation. INTEGER IN STATEMENT NUMBER xxx. THE PICTURE HAS BEEN TRUNCATED AT THE LEFT PARENTHESIS OF THE ITERATION FACTOR. T IEM0070I E IEM0059I MISSING RIGHT PARENTHESIS INSERTED IN POSITION ATTRIBUTE I~ STATEMENT NUMBER xxx. E IEM0060I POSITION MISSING IN POSITION ATTRIBUTE IN STATEMENT NUMBER xxx. POSITION OF 1 INSERTED. E IEM0061I MISSING LEFT PARENTHESIS INSERTED IN POSITION ATTRIBUTE IN STATEMENT NUMBER xxx. W IEM0062I THE ATTRIBUTE 'PACKED' IN DECLARATION STATEMENT NUMBER xxx IS NOW OBSOLETE, ~ND HAS BEEN IGNORED. User Response: Reduce level of nesting of blocks to 50 or less. T IEM0071I TOO MANY PROCEDURE, BEGIN, ITERATIVE DO, ON STATEMENTS IN THIS PROGRAM. COMPILATION TERMINATED. Explanation: There is an implementation restriction on the number of blocks in a compilation. Refer to Appendix B of this publication for details. EXE1~~ation: PACKED has been removed from the language; the complementary attribute to ALIGNED is now UNALIGNED. system Action: Since PACKED applied only to arrays and maJor structures, the new alignment defaults will be compatible w~th those of earlier versions of the compiler, except for bit string arrays that are not members of structures. BEGIN STATEMENT NUMBER xxx IS BEYOND THE PERMITTED NESTED LEVEL. COMPILATION TERMINATED. User Response: Subdivide progra n into two or more compilations. S IEM00721 DO STATEMENT NUMBER xxx REPLACED BY BEGIN STATEMENT. E IEMOO 7 41 THEN INSERTED NUMBER xxx S IEM0075I NO STATEMENT FOLLOWS THEN IN IF STATEMENT NUMBER xxx User Response: Correct source, and recompile if necessary. S IEM0076I NO STATEMENT FOLLOWS ELSE IN OR FOLLOWING STATEMENT NUMBER xxx E IEM0063I MISSING LEFT PARENTHESIS INSERTED IN RETURNS STATEMENT NUMBER xxx. S IEM00771 ELSE DELETED IN OR STATEMENT NUMBER xxx E IEM00781 S IEM00641 ILLEGAL STATEMENT FOLLOWS THE 'T'HEN IN STATEMENT NUMBER xxx. SEMICOLON HAS BEEN INSERTED AFTER THE THEN. IMPLEMENTATION RESTRICTION. TOO MANY CHARACTERS IN INITIAL LABEL· ON STATEMENT NUMBER xxx. LABEL IGNORED. S IEM0066I TEXT BEGINNING yyyy IN ST~TE MENT NUMBER xxx HAS BEEN DELETED. Explanation: The source error is detailed in another message referring to the same statement. E IEM0067I T IEM00691 EQUAL SYMBOL HAS BEEN INSERTED IN DO STATEMENT NUMBER xxx IMPLEMENTATION SOURCE PROGRAM MANY BLOCKS. system Action: terminated RESTRICTION. CONTAINS TOO Compilation is I;~~ IF STATEMENT FOLLOWING Explanation: There is an implementation restriction on the number of characters in the subscript of a subscripted identifier. The maximum permissible number is 225. E IEM00801 EQUAL SYMBOL HAS BEEN INSERTED IN ASSIGNMENT STATEMENT NUMBER xxx S IEM0081I LABELS OR PREFIX OPTIONS BEFORE ELSE TRANSFERRED TO STATEMENT NUMBER xxx Explanation: Labels or prefix options illegal before ELSE and therefore transferred to following statement. Appendix G: Diagnostic Messages 191 S IEM00821 OPERAND MISSING IN CHECK LIST IN STATEMENT NUMBER xxx. DUMMY INSERTED. S IEM0083I ON-CONDITION INVALID OR MISSING IN STATEMENT NUMBER xxx. ON ERROR HAS BEE~ ASSUMED. Syst.~e~m~~A~c~t~i~o~n: inserted in condition place THE I/O ON-CONDITION IN STATEMENT NUMaER xxx HAS NO FILENAME FOLLOWING IT. SYSIN IS ASSUMED. E IEM0085I COLON MISSING AFTER PREFIX OPTION IN OR FOLLOWING STATEMENT NUMBER xxx. ONE HAS BEEN ASSUMED. T IEM0090I THERE ARE NO COMPLETE STATEMENTS IN THIS PROGRAM .. 20MPILATION TERMINATED. E IEM0095I S IEM0099I .§ystem ktion: If the statement is incomplete, it is deleted. Whether or not the statement is incomplete, the required number of END statements are added to the program so that compilation can continue. User Response: Correct the source code. Possible causes of this error include: 1. Unmatched quote marks 2. Insufficient ments 3. Omission of final lon. END state- PARAMETER MISSING IN STATEMENT NUMBER xxx. A DUMMY HAS BEEH INSERTED. LABEL ON STATEMENT NUMBER xxx HAS NO COLON. OtlE IS ASSUMED. S IEM0102I LABEL MISSING FROM PROCEDURE STA TEMENT NUMBER xxx. A DUMMY LABEL HAS SEEN INSERTED. S IEM0103I LABEL MISSING FROM ENTRY STATEMENT NUMBER xxx S IEM0104I ILLEGAL STATEMENT FOLLOWS ELSE IN STATEMENT NUMBER xxx A colon is SEMI-COLON NOT FOUND WHEN EXPECTF.D IN STATEMENT NUMBER xxx. O~E HAS BEEN INSERTED. INVALID CHARACTER HAS BEEN REPLACED BY BLANK IN OR FOLLOWING STATEMENT NUMBER xxx. THE CONTAINING OUTPUT RECORD IS MARKED BY AN ASTERISK. System Action: inserted S IEM010SI T IEM0106I Null semico- statement ILLEGAL STATEMENT FOLLOWS ON IN STATEMENT NUMBER xxx System Action: inserted LOGICAL END OF PROGRAM OCCURS AT STATEMENT NUMBER xxx. THIS STATEMENT HAS BEEN IGNORED SO THAT SUBSEQUENT STATEMENTS MAY BE PROCESSED. Explanation: Although the compiler has detected the end of the program, there is more text following it. The programmer appears to have made an error in matching END statements with PROCEDURE, BEGIN, DO or ON statements. 192 END OF FILE FOUND IN OR AFTER STATEMENT NUMBER xxx, BEFORE THE LOGICAL END OF PROGRAM. S IEM0101I System Action: inserted E IEM0097I state- RECORD IN OR FOLLOWING STATEMENT NUMBER xxx IS SHORTER THAN THE SPECIFIED SOURCE START. THE OUTPUT RECORD HAS BEEN MARKED WITH AN ASTERISK AND IGNORED. Explanation: The compiler has encountered an identifier which appears to be a statement label, but without a colon. E IEM0096I S IEM0100I ON ERROR of invalid E IEM0084I W IEM0094I System Action: The END ment is ignored IMPLEMENTATION SOURCE PROGRAM MANY BLOCKS. system Action: terminated. Null statement RESTRICTION. CONTAINS TOO Compilation is User Response: Rewrite program with fewer blocks, or divide into more than one separate compilation. T IEM010?I IMPLEMENTATION RESTRICTION. STATEt1ENT NUMBER xxx IS TOO WNG. THIS STATEMENT MAY CONTAIN UNMATCHED QUOTE MARKS. User Response: Subdivide statement and recompile S IEM01081 S IEM01091 S IEM01321 DUMMY OPERAND INSERTED STATEMENT NUMBER xxx IN ENTRY STATEMENT NUMBER xxx IN AN ITERATIVE DO GROUP HAS BEEN DELETED. S IEM0133I RIGHT PARENTHESIS INSERTED STATEMENT NUMBER xxx IN TEXT BEGINNING yyyy IN OR FOLLOWING STATEMENT NU~1BER xxx HAS BEEN DELETED. S IEM0134I IMPLEMENTATION RESTRICTION. TOO MANY LEVELS OF REPLICATION IN INITIAL ATTRIBUTE IN STATEMEN'! NUMBER xxx. THE ATTRIBUTE HAS BEEN DELETED. Explanation: The source error is detailed in another message referring to the same statement. S IEMOll01 Explanation: The implementation restriction on levels of nesting has been contravened. For details, refer to Appendix B of this publication. TEXT BEGINNING yyyy IN OR FOLLOWING STATEMENT NUMBER xxx HAS BEEN DELETED. The source error is detailed in another message referring to the same statement. User Response: Rewrite INITIAL attribute with lower level of rep lica tion ~xplanation: E IEM01361 'IN' CLAUSE IN STATEME~T NUMBER xxx HAS NO ASSOCIATED 'SET' CLAUSE. S IEMOlll1 FIRST STATEMENT NOT A PROCEDURE STATEMENT. A DUMMY PROCEDURE STATEMENT HAS BEEN INSERTED. S IEMOl12I ENTRY STATEMENT NUMBER xxx IN BEGIN BLOCK HAS BEEN DELETED. Explanation: An IN clause must be accompanied by a SET clause in the same statement. S IEM01131 RIGHT PARENTHESIS INSERTED STATEMENT NUMBER xxx system Action: is ignored IN Explanation: Parenthesized list in ON statement is either not closed or contains an error and has been truncated. E IEMOl141 E IEM01381 RIGHT PARENTHESIS INSERTED IN PREFIX OPTION IN OR FOLLOWING STATEMENT NUMBER xxx E IEMOl151 LEFT PARENTHESIS INSERTED AFTER WHILE IN STATEMENT NUMBER xxx E IEM01161 PREFIX OPTION FOLLOWS LABEL IN STATEMENT NUMBER xxx. PREFIX OPTION IS IGNORED. OFFSET ATTRIBUTE NOT FOLLOWED BY PARENTHESIZED BASED VARIABLE IN STATEMENT NUMBER xxx. THE ATTRIBUTE IS IGNORED. S IEM01281 LENGTH OF BIT OR CHARACTER STRING MISSING IN STArEMENT NUMBER xxx. LENGTH 1 INSERTED. S IEM01291 INVALID WAIT xxx DELETED. E IEM0130I OPERAND MISSING. COMMA DELETED IN WAIT STATEMENT NUMBER xxx S IEM0131I RIGHT PARENTHESIS INSERTED IN STATEMENT NUMBER xxx STATEMENT NUMBER IN clause SOLITARY I FOUND WHERE A CONSTANT IS EXPECTED IN INITIAL ATTRIBUTE IN STATEMENT NUMBER xxx. FIXED DECIMAL IMAGINARY 11 HAS BEEN ASSUMED. Explanation: The programmer has initialized an element using the variable I where the constant 11 was expected. system Action: S IEMOl181 The S IEM01391 11 is assumed TEXT IMMEDIATELY FOLLOWING yyyy IN INITIAL ATTRIBUTE IS ILLEGAL. INITIAL ATTRIBUTE DELETED IN STATEMENT NUMBER xxx Explanation: A language feature has been used that is not supported by this version of the compiler. For details, refer to Appendix H of this publication. Although the message states that the error follows the quoted text, the quoted text may itself be invalid, and the compiler may have attempted to correct the source error. In this case, there will usually be another diagnostic message associated with the statement. Appendix G: Diagnostic Messages 193 W IEM0140I NO IDENTIFIER APPEARS IN DECLARE STATEMENT NUMBER xxx system Action: is ignored The referring ment. to the same state- statement E IEM0153I THE ATTRIBUTED BASED HAS BEEN ASSUMED IN STATEMENT NUMBER xxx WHERE CONTROLLED WAS SPECIFIED. S IEM0142I RIGHT PARENTHESIS INSERTED IN STATEMENT NUMBER xxx S IEM0143I RIGHT PARENTHESIS INSERTED STATEMENT NU~BER xxx S IEM0144I ATTRIBUTE IS NOT rOLLOWED BY A DATA DESCRIPTION IN STATEMENT NUMBER xxx. THE RETURNS ATTRIBUTE HAS BEEN DELETED. S IEM0145I DUMMY IDENTIrIER INSERTED GENERIC ATTRIBUTE LIST STATEMENT NUMBER xxx IN IN System Action: Text is deleted. See further error message for this statement. S IEM0146I ~IGHT PARENTHESIS INSERTED STATEl..ffiNT NUMBER xxx IN User Response: statement S IEM0141I 'T.'HE USE or RErER IN STATEMENT NUMBER xxx IS EITHER INVALID OR IS NOT IMPLEMENTED IN THIS RELEASE Explanation: The PL/I feature CONTROLLED (pointer) has been changed to BASED (pointer). IN ~ETURNS S IEM0154I E IEM0158I Explanation: The implementation of the REFER option is restricted; see Appendix H, 'Language features Not supported' • system Action: Ignore the REFER clause. A further message identifying the invalid text will usually accompany this message. E IKM0148I E IEM0149I E IEM0150I IEM0159I source ZERO STRUCTURE LEVEL NUMBER DELETED IN DECLARE STATEMENT NUMBER xxx Explanation: not allowed E Correct Zero level number SIGN DELETED PRECEDING TURE LEVEL NUMBER IN STATEMENT NUMBER xxx STRUCDECL~RE Explanation: The level number must be an unsigned integer S IEM0163I FORMAT INSERTED xxx LIST MISSING, (A) IN STATEMENT NUMBER IN E IEM0164I MISSING INSERTED xxx RIGHT PARENTHESIS IN STATEMEL'lT NUMBER System Action: See further messages relating to this statement S IEM0166I OPERAND MISSING IN GO TO STATEMENT NUMBER xxx. DUMMY IS INSERTED. COMMA HAS BEEN DELETED FROM LIST IN STATEMENT NUMBER xxx E IEM0112I LEFT PARENTHESIS INSERTED DELAY STATEMENT NUMBER xxx LEFT PARENTHESIS MISSING STATEMENT NUMBER xxx STATEME~~'l' NUMBER xxx IS AN INVALID FREE STATEMENT. THE STATEMENT HAS BEEN DELETED. Explanation: The format of the statement is invalid S IEM0151I SEMI-COLON INSERTED MENT NUMBER xxx S IEM0152I TEXT BEGINNING yyyy IN STATEMENT NUMBER xxx HAS BEEN DELETED. IN Explanation: The expression in a DELAY statement should be contained in parentheses E IEM0180I EQUAL SYMBOL HAS BEEN INSERTED IN DO SPEC I FICATIONS IN STATEMENT NUMBER xxx E IEM0181I SEMICOLON INSERTED IN STATEMENT NUMBER xxx IN STATE- Explanation: The source error is detailed in another message 194 IMPLEMENTATION RESTRICTION IN STATEMENT NUMBER xxx. BASED MUST BE FOLLOWED BY AN IDENTIFIER IN PARENTHESIS. Explanation: An error has been discovered. A semi-colon is therefore inserted and the rest of the statement is skipped. S IEM0182I TEXT BEGINNING yyyy SKIPPED IN OR FOLLOWING STATEMENT NUMBER xxx Appendix B of this for details. Explanation: The source error is detailed in another message referring to the same statement. System Action: pilation S IEM0185I OPTION IN GET/PUT STATEMENT NUMBER xxx IS INVALID AND HAS BEEN DELETED. S IEM0187I DATA LIST MISSING IN STATEMENT NUMBER xxx. OPTION DELETED. S IEM0191I DUMMY OPERAND INSERTED IN DATA LIST IN ST~TEMENT NUMBER xxx E IEM0193I RIGHT PARENTHESIS INSERTED IN DATA LIST IN STATEMENT NUMBER xxx E IEM0194I MISSING RIGHT PARENTHESIS IN INSERTED IN FORMAT LIST STATEMENT NUMBER xxx S IEM0195I INVALID FORMAT LIST DELETED IN STATEMENT NUMBER xxx. (A) INSERTED. S IEM0202I E IEM0211I LEFT PARENTHESIS INSERTED STATEMENT NUMBER xxx E IEM0212I MULTIPLE TASK OPTIONS SPECIFIED IN STATEMENT NUMBER xxx. THE FIRST ONE IS USED. MULTIPLE EVENT OPTIONS SPECIFIED IN STATEMENT NUMBER xxx. THE FIRST ONE IS USED. System Action: Ignores options other than the first E IEM0214I MULTIPLE PRIORITY OPTIONS SPECIFIED IN STATEMENT NUMBER xxx. THE FIRST ONE IS USED. system Action: Ignores options other than the first E IEM0216I INVALID EVENT OPTION IGNORED IN STATEMENT NUMBER xxx statement Explanation: The referred to is of a type not supported by this version of the compiler. For details, refer to Appendix H of this publication. E IEM0217I INVALID PRIORITY OPTION IGNORED IN STATEMENT NUMBER xxx S IEM0220I IDEt~IFIER MISSING OR INCORRECT AFTER OPTION IN STATEMENT NUMBER xxx. OPTION DELETED. Compilation S IEM0221I NUMBER OF LINES NOT GIVEN AFTER LINE OPTION IN STATEMENT NUMBER xxx. (1) INSERTED. User Response: Rewrite source program avoiding use of unsupported feature S IEM0222I DEFERRED FEATURE. THE IDENT OPTION ON OPEN/CLOSE STATEMENT NUMBER xxx IS NOT IMPLEMENTED BY THIS VERSION. system Action: continues E IEM0207I IN system Action: Ignores options other than the first COMPLEX FORMAT ITEM yyyy IN STATEMENT NUMBER xxx IS INVALID AND HAS BEEN DELETED. DEFERRED FEATURE. STATEMENT NUMBER xxx NOT IMPLEMENTED IN THIS VERSION. Terminates com- User Response: Divide statement into two or more statements E IEM0213I S IEM01981 publication COMMA REPLACED BY EQUAL SYMBOL IN ASSIGm~ENT STATEMENT NUMBER xxx E IEM0208I LEFT PARENTHESIS INSERTED IN CHECK LIST IN STATEMENT NUMBER xxx T IEM0209I IMPLEMENTATION STATEMENT NUMBER COMPLEX Explanation: A language feature has been used that is not supported by this version of the compiler. Refer to Appendix H of this publication for details. RESTRICTION. xxx IS TOO System Action: S IEM0223I Explanation: The level of nesting exceeds the implementation restriction. Refer to Option ignored EXPRESSION MISSING AFTER IDENT/TITLE/LINESIZE/PAGESIZE OPTION IN STATEMENT NUMBER xxx. OPTION DELETED. Appendix G: Diagnostic Messages 195 Explanation: No left parenthesis found following keyword S IEM0224I INVALID OPTION DELETED IN 1/0 STATEMENT NUMBER xxx S IEM0225I OPTION AFTER OPEN/CLOSE IN STATEMENT NUMBER xxx IS INVALID OR MISSING. S IEM0226I EXPRESSION MISSING AFTER FORMA.T ITEM IN STATEMENT NUMBER xxx. ITEM DELETED. W IEM0227I NO FILE/STRING OPTION SPECIFIED IN ONE OR MORE GETIPUT STATEMENTS. SYSIN/SYSPRINT HA.S BEEN ASSUMED IN EACH CASE S IEM0238I Explanation: The omission of the locate variable renders the statement meaningless. Subscripted locate variables are invalid. System Action: Replaces invalid statement with a null statement. T IEM0240I Explanation: One or more GET or PUT statements have appeared in the program with no specified FILE option or STRING option. S IEM0229I S IEM0230I EXPRESSION MISSING AFTER OPTION IN STATEMENT NUMBER xxx. OPTION DELETED. FORMAT ITEM IN STATEMENT NUMBER xxx IS INVALID AND HAS BEEN DELETED. COMPILER ERROR IN PHASE ev. SCAN CANNOT IDENTIFY DICTIONARY ENTRY. Explanat1Qg: The main scan of fifth pass of read-in has found something in the dictionary which it cannot recognize System Action: terminated System Action: The compiler has assumed the appropriate default file (SYSIN for GET, SYSPRINT for PUT). S IEM0228I THE LOCATE-VARIABLE IN LOCATE STATEMENT NUMBER xxx IS OMITTED OR SUBSCRIPTED. THE STATEMENT HAS BEEN DELETED. Compilation is User Response: Save relevant data. Call your local IBM representative. E IEM0241I MULTIPLE USE OF A PREFIX OPTION HAS OCCURRED IN STATEMENT NUMBER xxx. THE LAST NAMED OPTION IS USED. S IEM0242I INVALID PREFIX OPTION IN STATEMENT NUMBER xxx. THE OPTION HAS BEEN IGNORED. T IEM02431 COMPILER ERROR. PHASE CS HAS FOUND AN UNMATCHED END. INVALID DATA LIST IN STATEMENT xxx. ST~TEMENT DELETED. NU~BER E IEM0231I MISSING COMMA INSERTED IN DATA LIST IN STATEMENT NUMBER xxx system Action: terminated Explanation: Comma miSSing between elements of a data list E IEM0232I KEYWORD DO MISSING IN DATA LIST IN STATEMENT NUMBER xxx. DO IS INSERTED. S IEM0233I RETURN STATEMENT NUMBER xxx IS HITHIN ]I,N ON-UNIT IT IS P~PLACED BY A NULL STATEMENT. S IEM0235I ARGUMENT OMITTED FOLLOWIN3 yyyy OPTION IN STATEMENT NUMBER xxx. OPTION DELETED. S IEM0236I THE OPTION yyyy IN STArEMENT NUMBER xxx IS UNSUPPORTED OR INVALID. S IEM0237I 196 INSUFFICIENT OPTIONS SPECIFIED IN STATEMENT NUMBER xxx. THE STATEMENT HAS BEEN REPLACED BY A NULL STATEMENT. Compilation is User Re§E~: Save relevant data. Call your local IBM representati ve,. E IEM0244I CHECK PREFIX OPTION IN STATEMENT NUMBER xxx IS NOT FOLLOWED BY A PARENTHESIZED LIST. THE OPTION HAS BEEN IGNORED. E IEM02451 A CHECK PREFIX OPTION IS GIVEN FOR STATEMENT NUMBER xxx WHICH IS NOT A PROCEDURE OR BEGIN. THE OPTION HAS BEEN IGNORED. S IEM0247I ALL SUBSCRIPTED LABELS PREFIXING PROCEDURE OR ENTRY STATEMENT NUMBER xxx HAVE BEEN IGNORED. Explanation: Subscripted labels may not be used as pre- ENTRY S IEM051QI PARAMETER yyyy IN STATEMENT NUMBER xxx IS SAME AS LABEL. PARAMETER REPLACED BY DUMMY. COMPILER UNABLE TO RECOVER FROM I/O ERROR - PLEASE RETRY JOB. S IEM05151 IMPLEMENTATION RESTRICTION. CHARACTER STRING LENGTH IN STATEMENT NUMBER xxx REDUCED TO 32,767. S IEM05161 ILLEGAL OPTIONS LIST ON STATEMENT NUMBER xxx. LIST IGNORED. fixes on PROCEDURE statements. T IEM025QI T IEM02551 or System Action: pilation Terminates com- User Response: pilation Re-attempt com- system Action: Compiler scans for next right bracket. If this is not the bracket closing the illegal options list, a compiler error will probably follow. THERE ARE NO COMPLETE STATEMENTS IN THIS PROGRAM Compiler cannot Explanation: reconcile END statements with stack entries. Usually caused by a program containing only comments. S IEM05171 CONFLICTING ATTRIBUTE DELETED IN STATEMENT NUMBER xxx System Action: terminated S IEM05181 IMPLEMENTATION RESTRICTION. PRECISION TOO LARGE IN STATEMENT NUMBER xxx. DEFAULT PRECISION GIVEN. Compilation is User Response: Check source for completed statements. If these are present then save relevant data and call your local IBM representative. W IEM0510I Explanation: If later a valid precision is given, this will be accepted in place of the default. THE TASK OPTION H&S BEEN ASSUMED TO APPLY TO THE EXTERNAL PROCEDURE STATEMENT NUMBER xxx Explanation: TASK, EVENT or PRIORITY options have been 1etected in a CALL statement, but the TASK option has not been specified in the external procedure. System Action: Attribute ignored. Attribute test mask restored so that later attribute will not be found to conflict with deleted one. S IEM0519I OPTIONS MAIN AND/OR TASK ARE NOT ALLOWED ON THE INTERNAL PROCEDURE STATEMENT NUMBER xxx system Action: The options are ignored S IEM05121 S IEM05131 T IEM0520I system Action: immediately IDENTIFIER yyyy IN STATEMENT NUMBER xxx IN INITIAL ATTRIBUTE LIST IS NOT A KNOWN LABEL CONSTANT AND HAS BEEN IGNORED. REPEATED LABEL IN SAME BLOCK ON STATEMENT NUMBER xxx. LABEL DELETED. Explanation: A label may not be used more than once in the same block. COMPILER ERROR CODE nnnn Explanation: A compiler has occurred. invalid system Action: Identifier changed tb * in the list. STATEMENT Explanation: Only data attributes allowed on procedure or entry statements. (No dimensions allowed). system Action: The TASK option is correctly applied W IEM05111 ILLEGAL ATTRIBUTE ON NUMBER xxx IGNORED. error Terminates User Response: Save relevant data. Call your local IBM representative. S IEM0521I INVALID STRING LENGTH IN STATEMENT NUMBER xxx. LENGTH OF 1 ASSUMED. Explanation: Either no length has been given or string length * has been used in source code. System Action: Assumes length Appendix G: Diagnostic Messages 197 of 1 and skips to bute S IEM05221 S IEM05231 S IEM05241 attri- IN STATEMENT NUMBER xxx. THE LABEL zzzz AND ANY FOLLOWING IT HAVE BEEN IGNORED. IMPLEMENTATION RESTRICTION. NUMBER OF PARAMETERS IN PROCEDURE OR ENTRY STATEMENT NUMBER xxx TRUNCATED TO 64. PARAMETER zzzz IN STATEMENT NUMBER xxx APPEARS TWICE. SECOND ONE REPLACED BY DUMMY. Explanation: There is an implementation restriction limiting the number of label constants following the LABEL attribute to 125. S IEM05321 IDENTIFIER yyyy IN LABEL LIST IN STATEMENT NUMBER xxx IS NOT A LABEL OR IS NOT KNOWN. System Action: tifier T IEM0525I next Ignores Explanation: There is an implementation restriction limiting the number of left parentheses used for factoring attributes in DECLARE statements to 73 within a compilation. System Action: pilation system Action: Compilation continues with truncated iSUB 1ist# possibly causing cascade errors. iden- IMPLEMENTATION RESTRICTION. MORE THAN 73 PAIRS OF FACTORED ATTRIBUTE BRACKETS. S IEM05331 S IEM05341 IMPLEMENTATION RESTRICTION. STRING LENGTH IN STATEMENT NUMBER xxx REDUCED TO 32,767. S IEM05351 IMPLEMENTATION RESTRICTION. KEYLENGTH IN STATEMENT NUMBER xxx REDUCED TO 255. S IEM05361 IDENTIFIER yyyy IN STATEMENT NUMBER xxx IS NOT A LABEL CONSTANT OR IS NOT KNOWN. IT IS IGNORED. Terminates com- W IEM5261 OPTION MAIN HAS NOT BEEN SPECIFIED FOR THE EXTERNAL PROCEDURE STATEMENT NUMBER xxx S IEM0527I IMPLEMENTATION RESTRICTION. ARRAY BOUND IN STATEMENT Nur-1BER xxx IS TOO LARGE AND HAS BEEN REPLACED BY THE MAXIMUM PERMITTED VALUE (32767 OR -32768). T IEM05281 COMPILER ERROR CODE STATEMENT NUMBER xxx IMPLEMENT.ATION RESTRICTION. POSITION CONSTANT IN STATEMENT NUMBER xxx REDUCED TO 32,767. E IEM05381 IMPLEMENTATION RESTRICTION. IN PRECISION SPECIFICATION STATEMENT NUMBER xxx TOO LARGE. eEFAULT PRECISION GIVEN. E IEM05391 User Response: Save relevant data. Call your local IBM representative. ILLEGAL NEGATIVE PRECISION IN STATEMENT NUMBER xxx. DEFAULT PRECISION GIVEN. S IEM05401 IMPLEMENTATION RESTRICTION. STRUCTURE LEVEL NUMBER IN STATEMENT NUMBER xxx REDUCED TO 255. * BOUNDS ARE MIXED WITH NON--* BOUNDS IN DECLARE STATEMENT NUMBER xxx ALL THE BOUNDS ARE MADE *. E IEM05411 LOWER BOUND GREATER THAN UPPER BOUND IN DECLARE OR ALLOCATE STATEMENT NUMBER xxx THE BOUNDS ARE INTERCHANGED. system Action: pilation 198 Explanation: Identifiers following the LABEL attribute must be LABEL constants and must be known. S IEMO 5 3 71 nnnn IN Explanation: Compiler error found in processing a DECLARE statement S IEM05301 IMPLEMENTATION RESTRICTION. I-SUB VALUE IN STATEMENT NUMBER xxx TOO LARGE. REDUCED TO 32. Explanation: There is an implementation restriction limiting the number of dimensions to a maximum of 32. User Response: Reduce factoring by expanding declarations. S IEM05291 ILLEGAL ASTERISK AS SUBSCRIPT IN DEFINING LIST IN STATEMENT NUMBER xxx. LIST TRUNCATED. Terminates com- IMPLEMENTATION RESTRICTION. TOO MANY LABELS IN LABEL LIST S IEM05421 IMPLEMENTATION RESTRICTION. NUMBER OF DIMENSIONS DECLARED TRUNCATED TO 32 IN STATEMENT NUMBER xxx T IEM05431 COMPILER ERROR. MENT FOUND IN CHAIN. ILLEGAL STATETHE DECLARE System Action: Same BCD treated as different identifiers F.xplanation: Compiler error found in scanning chain of DECLARE statements system Action: terminated MA.JOR STRUCTURE MEMBER AND HAS THE SAME NAME AS A PARAMETER IN THE SAME BLOCK. THESE ARE DIFFERENT IDENTIFIERS, AND UNQUALIFIED REFERENCES REFER TO THE PARAMETER. T IEM05481 Compilation Explanation: Compiler error found in list of declarations in DECLARE statement User Response: Save relevant data. Call your local IBM representative. T IEM05441 Explanation: Compiler error found in first byte of DECLARE statements EIEM05491 THE DECLARED LEVEL OF IDENTIFIER yyyy IN STATEMENT NUMBER xxx SHOULD BE ONE. THIS HAS BEEN FORCED. S IEM05501 THE IDENTIFIER yyyy HAS BEEN DECLARED IN STATEME~T NUMBER xxx WITH A TRUE LEVEL NUMBER GREATER THAN THE IMPLEMENTATION RESTRICTION OF 63. TriE DECLARATION OF THE IDENTIFIER IS IGNORED. E IEM05511 THE IDENTIFIER yyyy HAS BEEN DECLARED IN STATEMENT NUMBER xxx WITH ZERO PRECISION. THE DEFAULT VALUE HAS BEEN ASSUMED. T IEM05521 User Response: Save relevant data. Call your local IBM representative. COMPILER ERROR. ILLEGAL CHARACTER FOUND IN FACTORED ATTRIBUTE LIST IN DECLARE STATEMENT NUMBER xxx COMPILER ERROR. ILLEGAL CHARACTER FOUND AFTER LEVEL NUMBER IN DECLARE STATEMENT NUMBER xxx Explanation: Compiler error found in factored attribute list Explanation: Compiler error found after structure level number in DECLARE statement system Action: terminated COMPILER ERROR. ILLEGAL INITIAL CHARACTER TO DECLARED ITEM IN STATEMENT NUMBER xxx system Action: terminated System Action: terminated Compilation THE IDENTIFIER yyyy DECLARED IN STATEMENT NUMBER xxx I S A NON- Compilation User Response: Save relevant data. Call your local IBM representative. Compilation User Response: Save relevant data. Call your local IBM representative. W IEM05471 User Resp~: Save relevant data. Call your local IBM representative. system Action: Illegal level number treated as 1 Explanation: Compiler error found in scanning start of declared item T IEM05461 Compilation Compilation User Response: Save relevant data. Call your local IBM representative .• T IEM05451 System ~ction: terminated COMPILER ERROR. INITIAL CODE BYTE OF DECLARE ST~TEMENT IS NEITHER STATEMENT NUMBER NOR STATEMENT LABEL. System Action: terminated COMPILER ERROR. ILLEGAL CHARACTER FOUND IN DECLARATION LIST. E IEM05531 THE IDENTIFIER yyyy HAS HAD A CONFLICTING ATTRIBUTE IGNORED IN DECLARE STATEMENT NUMBER xxx Explanation: The two butes may conflict as a Appendix G: Diagnostic Messages attriresult 199 T IEM0554I of a feature not supported by this version of the compiler. For details of these features, refer to Appendix H of this publication. S IEM0562I THE IDENTIFIER yyyy IS DECLARED IN STATEMENT NUMBER xxx AS AN INTERNAL ENTRY POINT. THE NUMBER OF PARAMETERS DECLARED IS DIFFERENT FROM THE NUMBER GIVEN AT THE ENTRY POINT. COMPILER ERROR. ILLEGAL CHARACTER FOUND IN PARAMETER LIST FOLLOWING 'GENERIC' ATTRIBUTE. S IEM0563I THE IDENTIFIER yyyy DECLARED 'BUILTIN' IN STATEMENT NUMBER xxx IS NOT A BUILT-IN FUNCTION. DECLARATION IGNORED. System Action: terminated E IEM0564I THE IDENTIFIER yyyy HAS BEEN DECLARED IN STATEMENT NUMBER xxx WITH PRECISION GREATER THAN THE IMPLEMENTATION LIMITS. THE MAXIMUM VALUE HAS BEEN TAKEN .• E IEM0565I THE IDENTIFIER yyyy IS DECLARED IN STATEMENT NUMBER xxx AS A MEMBER OF A GENERIC LIST, BUT ITS ATTRIBUTES DO NOT MAKE IT AN ENTRY POINT. THE DECLARATI eN OF THE IDENTIFIER HAS BEEN IGNORED. E IEM0566I ONE OF THE PARAMETERS DECLARED FOR ENTRY POINT yyyy IN STATEMENT i-lUMBER xxx SHOULD BE AT LEV EL ONE. THIS HAS BEEN FORCED. W IEM0567I IF FUNCTION zzzz IN STATEMENT NUMBER xxx IS INVOKED,THE USE OF' DEFAULT ATTRIBUTES FOR THE VALUE RETURNED WILL CONFLICT WITH THE DECLARED ATTRIBUTES FOR THAT VALUE. compilation User Response: Save relevant data. Call your local IBM representative. E IEM0555I STORAGE CLASS ATTRIBUTES MAY NOT BE SPECIFIED FOR STRUCTURE MEMBER yyyy ATTRIBUTE IGNORED. Qser~Qg§~: Delete illegal storage class attribute for the structure member. T IEM0556I COMPILER ERROR. ILLEGAL CHARACTER FOUND IN PARAMETER LIST FOLLOWING AN 'ENTRY' ATTRIBUTE IN DECLARE STATEMEt~ NUMBER xxx System Action: terminated Compilation User Response: Save relevant data. Call your local IBM representative. E IEM0557I THE MULTIPLE DECLARATION OF IDENTIFIER yyyy IN STATEMENT NUMBER xxx HAS BEEN IGNORED. S IEM0558I IMPLEMENTATION RESTRICTION. NUMBER OF PARAMETER DESCRIPTIONS DECLARED FOR PROCEDURE OR ENTRY NAME yyyy IN STArEMENT ~UMBER xxx TRUNCATED TO 64. E IEM0559I E IEM0560I THE IDENTIFIER yyyy HAS BEEN DECLARED IN STATEMENT NUMBER xxx WITH CONFLICTING FACTORED LEVEL NUMBERS. THE ONE AT DEEPEST FACTORING LEVEL HAS BEEN CHOSEN. Explanation: The data type to which a result will be converted at a RETURN (expression) will not be the same as that expected at an invocation of the entry label as a function. System Action: User Response: Write an ENTRY declaration in the containing PROCEDURE or BEGIN block, giving the same data attributes as on the PROCEDURE or ENTRY statement. S IEM0568I IN STATEMENT NUMBER xxx A CONFLICTING ATTRIBUTE HAS BEEN IGNORED IN THE DECLARATION OF THE RETURNED VALUE OF ENTRY POINT yyyy 200 IN STATEMENT NUMBER xxx THE IDENTIFIER yyyy IS A MULTIPLE DECLARATION OF AN INTERNAL ENTRY LABEL. THIS DECLARATION IS IGNORED. THE IDENTIFIER zzzz IS CALLED BUT IS EITHER A BUILTIN FUNCTION OR IS NOT AN ENTRY POINT. system Action: The erroneous statement is deleted. T IEM0569I S IEM0561I None COMPILER ERROR NUMBER MODULE EP. nnnn IN Explapation: Compiler error found in scan of chain of CALL statements system Action: terminated Compilation S IEM05901 Save relevant data. Call your local IBM representative .. User~onse: W IEM05701 THE ENTRY POINT yyyy HAS BEEN DECLARED IN STATEMENT NUMBER xxx TO HAVE A RETURNED VALUE DIFFERENT FROM THAT GIVEN ON THE PROCEDURE OR ENTRY STATEMENT. System Action: STRUCTURE ELEMENT zzzz WHICH HAS LIKE ATTRIBUTE ATTACHED TO IT, IS FOLLOWED BY AN ELEMENT WITH A NUMERICALLY GREATER STRUCTURE LEVEL NUMBER. LIKE ATTRIBUTE IS IGNORED. System Action: Self explanatory: may result in cascade errors. S IEM05911 STRUCTURE ELEMENT zzzz IS LIKENED TO AN ITEM WHICH IS NOT A STRUCTURE VARIABLE. LIKE ATTRIBUTE IS IGNORED. None System Action: Self atory: may result in errors. User Response: Change the declaration, or the PROCEDURE or ENTRY statement. S IEM05921 S IEM05711 IMPLEMENTATION RESTRICTION. IDENTIFIER yyyy IN STATEMENT NUMBER xxx HAS MORE THAN 32 DIMENSIO~m. DIMENSION ATTRIBUTE IGNORED. S IEM05721 THE IDENTIFIER yyyy HAS BEEN DECLARED IN STATEMENT NUMBER xxx WITH THE ATTRIBUTE "NORMAL" OR "ABNORMAL". THE APPLICATION OF THIS ATTRIBUTE IS AN UNSUPPORTED FEATURE OF THE FOURTH VERSION, AND IT HAS BEEN IGNORED. STRUCTURE ELEMENT zzzz IS LIKENED TO A STRUCTURE WHICH CONTAINS ELEMENTS WHICH HAVE ALSO BEEN DECLARED WITH THE LIKE ATTRIBUTE. LIKE ATTRIBUTE ON ORIGINAL STRUCTURE IS IGNORED. System Action: Self atory: may result in errors. S IEM05931 explancascade explancascade STRUCTURE NAME TO WHICH zzzz IS LIKENED IS NOT KNOWN. LIKE ATTRIBUTE IGNORED. ~S~y~s~t~e~m~~A=c~tion: ]!xplanation: A language feature has been used which is not supported by this version of the compiler. Refer to Appendix H of this publication for rletails. S IEM05731 atory: may errors. Self explanresult in cascade E IEM05941 AMBIGUOUS QUALIFIED NAME yyyy USED AS A BASE IDENTIFIER. MOST RECENT DECLARATION USED. THE SELECTION OF GENERIC FAMILY MEMBERS WHOSE PARAMETERS HAVE A STRUCTURE DESCRIPTION IS DEFERRED. ENTRY NAME yyyy., DECLARED IN STATEMENT NUMBER xxx, IS SUCH A MEMBER AND HAS BEEN DELETED. E IEM05951 QUALIFIED NAME yyyy USED AS A BASE IDENTIFIER CONTAINS MORE THAN ONE IDENTIFIBR AT THE SAME: STRUCTURE LEVEL. Ex21anation: The usage referred to is not supported by this version of the compiler. For details, refer to Appendix H of this publication. S IEM05961 T IEM05741 THE MULTIPLE DECLARATION OF IDENTIFIER yyyy IN STATEMENT NUMBER xxx HAS BEEN IGNORED. S IEM05891 COMPILER ERROR. ITEM zzzz IN LIKE CHAIN IS NOT A STRUCTURE. ITEM IS IGNORED. system Action: The erroneous statement is deleted. system Action: Self atory: may result in errors. S IEM0597I User Response: Save relevant data. Call your local IBM representative,. MAJOR STRUCTURE yyyy HAS BEEN LIKENED TO AN ITEM WHICH IS NOT A VALID STRUCTURE. DECLARATION OF STRUCTURE IGNORED. explancascade IDENTIFIER zzzz WHICH IS NOT A FORMAL PARAMETER OR OF STORAGE CLASS CONTROLLED HAS BEEN LIKENED TO -A STRUCTURE CONTAINING * DIMENSIONS OR LENGTH. * DIMENSIONS OR LENGTH HAVE BEEN IGNORED IN THE CONSTRUCTED STRUCTURE. Appendix G: Diagnostic Messages 201 S IEM05981 S IEM05991 System Action: Self explanatory: may result in cascade errors from later phases. tation rules. (see Appendix B, 'Implementation Conventions and Restrictions'). QUALIFIED NAME TO WHICH zzzz HAS BEEN LIKENED IS AN AMBIGUOUS REFERENCE. LIKE ATTRIBUTE HAS BEEN IGNORED. system Action: pilation zzzz WHICH IS A PARAMETER OR A BASED VARIABLE, HA S BEEN DECLARED (USING THE LIKE ATTRIBUTE) AS A STRUCTURE WITH THE INITIAL ATTRIBUTE. THE INITIAL ATTRIBUTE IS INVALID AND HAS BEEN IGNORED. User Response: Declare the parameter or based variable with the LIKE attribute specifying a structure without the INITIAL attribute. S IEM06001 T IEM06051 system Action: pilation S IEM0606I STATIC STRUCTURE zzzz HAS BEEN DECLARED BY MEANS OF THE LIKE ATTRIBUTE TO HAVE ADJUSTABLE EXTENTS. THE EXTENTS HAVE BEEN IGNORED. W IEM06071 OFFSET ATTRIBUTE ON PROCEDURE STATEMENT NUMBER xxx IS NOT BASED ON A BASED AREA. IT HAS BEEN CHANGED TO POINTER. T IEM0603I Compilation is INVALID POINTER EXPRESSION BASED ATTRIBUTE ON zzzz STATEMENT NUMBER xxx IN IN System Action: is terminated T IEM0604I 202 The compilation IF THE BASE OF zzzz CORRESPONDENCE DEFINED IN STATEMENT NUMBER xxx IS ALLOCATED WITH THE DECLARED BOUNDS THE DEFINING WILL BE IN ERROR .. System Action: T IEM06081 Explanation: The pointer associated with the based variable does not obey the implementation rules (e.g.~ it may be subscripted) • OFFSET VARIABLE zzzz HAS BEEN DECLARED IN STATEMENT NUMBER xxx RELATIVE TO AN IDENTIFIER WHICH IS NOT A BASED AREA. IT HAS BEEN CHANGED TO A POINTER VARIABLE. Explanation: For correspondence defining not involving iSUB's, the bounds of the defined array must be a subset of the bounds of the base. In this case the bounds declared for the base do not satisfy this requirement. However, the base is of CONTROLLED storage class and if it is allocated with different bounds the defining may be legal. IDENTIFIER IN BASED ATTRIBUTE ON zzzz DECLARED IN STATEMENT NUMBER xxx IS NOT A NON-BASED POINTER system Action: terminated Terminates com- System Action: The offset is changed to a pointer to prevent the compiler from producing further error messages. System Action: All bounds on the offending variable are set to zero T IEM06021 BOUNDS DECLARED FOR BASED ARRAY zzzz IN STATEMENT NUMBER xxx ARE INVALID Explanation: The adjustable bounds declared are outside those permitted by this implementation,.. Explanation: A STATIC variable cannot have adjustable extents S IEM06011 Terminates com- Nothing further ILLEGAL DEFINING IN STATEMENT NUMBER xxx '. BAS E IDENTIFIER zzzz IS A MEMBER OF A DIMENSIONED STRUCTURE~ Explanation: In the case of string class overlay defining where the base is an array, it is an error if it is a member of an array of structures. LENGTH DECLARED FOR BASED STRING zzzz IN STATEMENT NUMBER xxx IS INVALID system Action: is termina ted. Explanation: The declaration violates the compiler implemen- User Response: Refer PL/I Reference Manual The compilation to the "The DEFINED Attribute" rect error. T IEM0609I - and cor- IN STATEMENT NUMBER xxx ILLEGALLY REFERS TO OR IS DEPENDENT ON THE DEFINED VARIABLE. DEFERRED FEATURE. DEFINING OF zzzz DECLARED IN STATEMENT NUMBER xxx WITH A SUBSCRIPTED BASE. Explanation: It is illegal for a base subscript list in the DEFINED attribute to refer directly, or via any further level of defining, to the defined item. Explanation: Overlay defining on a subscripted base is not supported by this version of the compiler. system Action: is terminated. User Response: Refer to the PL/I Reference Manual - "The DEFINED Attribute" and correct error. T IEM0624I DEFERRED FEATURE. DEFINING OF zzzz DECLARED IN STATEMENT NUMBER xxx ON A BASE OF ~ONTROLLED STORAGE CLASS. System Action: is terminated. The compilation T IEM0625I Explanation: Only arrays may be correspondence defined using iSUB notation. INITIAL ATTRIBUTE DECLARED FOR DEFINED ITEM zzzz IN STATEMENT NUMBER xxx WILL BE' IGNORED. Explanation: DEFINED items may not have the INITIAL attribute. system Action: bute ignored T IEM0623I THE DEFINING BASE FOR zzzz DECLARED IN STATEMENT NUMBER xxx HAS THE WRONG NUMBER OF SUBSCRIPTS. System Action: is terminated. The compilation The compilation User Response: Refer to the PL/I Reference Manual "The DEFINED Attribute" - and correct error. E IEM0612I The compilation Explanation: If the base reference in a DEFINED attribute is subscripted, it must have the same number of subscript expressions as the dimensionality of the base array. SCALAR zzzz DECLARED IN STATEMENT NUMBER xxx IS ILLEGALLY DEFINED WITH ISUBS. System Action: is terminated. of be User ReSDonse: Replace the specified base by an appropriate reference to its base. User Response: Replace all references to the defined item by appropriate references to the base. T IEM0611I THE DEFINING BASE FOR zzzz DECLARED IN STATEMENT NUMBER xxx IS ITSELF DEFINED. Explanation,: The base DEFI~~D data may not itself DEFINED ExE1~nation: If the base is declared CONTROLLED, neither overlay defining nor correspondence defining is supported by this release of the compiler. System Action: is te;rminated. The compilation The compilation User Response: Replace all references to the defined item by appropriate subscripted references to the base. T IEM0610I System Action: is terminated. INITIAL User Response: Correct the subscript list, or declaration of the base, whichever appropriate. T IEM0626I THE DEFINING B~SE FOR zzzz DECLARED IN STATEMEHT NUMBER xxx IS NOT DATA. Explanation: The only legal data types that may be used for defining bases are string, Arithmetic, Task, Event, and Label. attri- THE BASE SUBSCRIPT LIST USED WITH THE DEFINED VARIABLE zzzz Action: is terminated. ~tem User Response: The compilation Check that the hppendix G: Diagnostic Messages 203 defining base is correctly written and declared. T IEM0627I IMPLEMENTATION NUMBER LONG. STATEME~T yyyy AN DECLARED xxx. RESTRICTION. xxx IS TOO Explanation: Correspondence defining with arrays of structures is not supported by the compiler. Explanation: system Generation compiler restriction system Action: is terminated. User Response: ment size T IEM0628I System Action: is terminated. The compilation Explanation: The complexity of defining has resulted in a level of nesting which is too great for the compiler. Action: is terminated. The compilation T IEM06~2I User Response: Reduce complexi ty of defining .. T IEM0629I Explanation: For correspondence defining not involving iSUB's. the bounds of the defined array must be a subset of the corresponding bounds of the base array. Explanation: The POS attribute may not be specified for correspondence defining. system Action: is terminated. User Response: attribute Delete pas THE DESCRIPTION OF zzzz CORRESPONDENCE DEFINED IN STATEMENT NUMBER xxx DOES NOT MATCH THAT OF THE DEFINING BASE. system Action: is terminated. The compilation User Response: Correct the program. Note that POS (1) may be used to force overlay defining. T IEM0631I 204 IMPLEMENTATION RESTRICTION. THE CORRESPONDENCE DEFINING OF The compilation User Response: Refer to the PL/I Reference Ma nual "The DEFINED Attribute" - and correct program. Note that pas (1) may be used to force overlay defining. The compilation Explanation: For correspondence defining, if either the base or the defined item are arrays of structures, then both must be arrays of structures. I THE BOUNDS OF zzzz CORRESPONDENCE DEFINED IN STATEMENT NUMBER xxx ARE NOT A SUBSET OF THE BASE. ARRAY zzzz DECLARED IN STATEMENT NUMBER xxx ILLEGALLY HAS THE POS ATTRIBUTE WITH ISUB DEFINING. System Action: is terminated. T IEM0630I The compilation User Response: Declare the base arrays of the defined structure as correspondence defined on the matching base arrays of the base structure. Note that for this to be valid, the base arrays of the defined structure must have unique names anj be declared at level 1. This alternative method precludes structure operations with the defined item# but achieves the desired mapping. Reduce state- IMPLEMENTATION RESTRICTION. THE NESTING OF REFERENCES TO DATA DEFINED WITH A SUBSCRIPTED BASE IS TOO DEEP. ~ystem ARRAY OF STRUCTURES IN STATEMENT NUMBER S IEM0633I ITEM TO BE ALLOCATED IN STATEMENT NUMBER xxx IS NOT AT LEVEL 1. THE STATEMK~T HAS BEE~'l IGNORED. Explanation: An identifier specified in an ALLOCATE statement must refer to a major structure or data not contained in a structure. A major structure identifier may optionally be followed by a full structure description. System Action: The statement is deleted ALLOCATE User Response: Replace erroneous identifier by that of the containing major structure. S IEM0634I butes are permitted in ALLOCATE statements. ITEM TO BE ALLOCATED IN STATEMENT NUMBER xxx HAS NOT BEEN DECLARED. THE STATEMENT HAS BEEN IGNORED. Explanation: Only CONTROLLED data may be allocated. Data may only obtain the attribute CONTROLLED from an explicit declaration. System Action: The statement is deleted system Action: The statement is deleted E IEM06411 ALLOCATE ITEM TO BE ALLOCATED IN STATEMENT NUMBER xxx WAS NOT DECLARED CONTROLLED. THE STATEMENT HAS BEEN IGNORED. Explanation: Only CONTROLLED data may be specified in ALLOCATE statements. system Action: The statement is deleted E IEM06371 Syste~_~~~ion: All attributes after the first in a particular class are ignored. S IEM0642I ALLOCATE User Response: Declare identifier CONTROLLED A CONFLICTING ATTRIBUTE WAS GIVEN FOR zzzz IN STATEMENT NUMBER xxx. THE ATTRIBUTE HAS BEEN IGNORED. System Action: The statement is deleted W IEM0643I THE STRUCTURE DESCRIPTION GIVEN ON STATEMENT NUMBER xxx DIFFERS FROM THAT DECLARED. THE STATEMENT HAS BEEN IGNORED. If a structure description is given in an ALLOCATE Statement, it must match the declaration. The indicated level number discrepancy may be an error. System Action: ALLOCATE AN INVALID ATTRIBUTE WAS GIVEN IN STATEMENT NUMBER xxx. THE STATEMENT HAS BEEN IGNORED. Explanation: INITIAL, and Only CHAR, BIT, Dimension attri- Nothing further User Response: Check ALLOCATE statement is intended S IEM06441 S IEM06401 THE LEVEL NUMBER DECLARED FOR zzzz IS NOT THE SAME AS THAT GIVEN IN STATEMENT NUMBER xxx. THE FORMER HAS BEEN USED. Explanatio~: Explanation: If a description of a major structure is given on an ALLOCATE statement, the description must match that declared. system Action: The statement is deleted ALLOCATE User Response: Correct declaration or ALLOCATE Statement, whichever applicable. System Action: Ignores the attribute from the ALLOCATE S IEM0638I DIMENSIONALITY GIVEN IN STATEMEN'] NUMBER xxx 01 FFERS FROtlJ THAT DECLARED. THE STATEMENT HAS BEEN IGNORED. Explanati£n: If a dimension attribute is given for an identifier in an ALLOCATE statement'l the identifier must have been declared with the same dimensionality. the Explanation: Attributes given for an identifier in an ALLOCATE statement may not conflict with those given explicitly or assumed by default from the declaration .. CONFLICTING ATTRIBUTES HAVE BEEN GIVEN FOR zzzz IN STATEMENT NUMBER xxx. THE FIRST LEGAL ONE HAS BEEN USED. Explanation: At most, one attribute in the following classes may be given for an identifier in an ALLOCATE statement: Dimension, StringCCHAR or BIT), INITIAL. User Response: Construct a DECLARE statement for the identifier S IEM06361 ALLOCATE that as STATEMENT NUMBER xxx CONTAINS AN ILLEGAL PARENTHESIZED LIST. THE STATEMENT HAS BEEN IGNORED. Explanation: Factored attribures are not allowed on ALLOCATE statements. Appendix G: Diagnostic Messages 205 ~s~y_s_t_e_m~____ Action: S IEM0645I statement ignored COMPILER ERROR NUMBER xxx User Response: Remove parentheses and any factored attributes Explanation: Compiler error found in scan of statement User Response: CATE statement Correct S IEM0655I System Action: The identifier is replaced by a dummy dictionary reference; a later phase will delete the statement. User Response: Correct program by inserting DECLARE statement E IEM0656I MOST RECENT DECLARATION USED OF AMBIGUOUS QUALIFIED NAME OR STRUCTURE MEMBER BEGINNING yyyy IN STATEMENT NUMBER xxx E IEM0657I QUALIFIED NAME BEGINNING yyyy IN STATEMENT NUMBER xxx CONTAINS MORE THAN ONE IDENTIFIER AT THE SAME STRUCTURE LEVEL. the POINTER-QUALIFIED IDENTIFIER zzzz IN STATEMENT NUMBER xxx IS NOT A BASED VARIABLE IMPLEMENTATION STATEMENT NUMBER LONG. System Action: is deleted S IEM0658I the RESTRICTION. xxx IS TOO The statement QUALIFIED NAME BEGINNING yyyy IN STATEMENT NUMBER xxx IS AN AMBIGUOUS REFERENCE. DUMMY REFERENCE INSERTED. statement will be deleted by later phase Syste~_b£tion: Compilation S IEM0673I ILLEGAL USE OF FUNCTION NAME O~~ LEFT HAlW SIDE OF EQUAL SYMBOL IN STATEMENT NUMBER xxx User Response: Rewrite statement in question and recompile System Action: S"tateroent will be deleted by later phases system Action: terminated COMPILER ERROR. ILLEGAL ENTRY IN STATEMENT NUMBER xxx S IEM0674I system Action: terminate::] STATEMENT NUMBER xxx CONTAINS ILLEGAL USE OF FUNCTION yyyy System Action: Reference to function or whole statement will be deleted by later phases Explanation: Compiler error found in scan of statement Compilation User Response: Save relevant oata. Call your local IBM representative. 206 QUALIFIED NAME BEGINNING yyyy USED IN STATEMENT NUMBER xxx BUT NO PREVIOUS STRUCTURE DECLARATION GIVEN. DUMMY REFERENCE INSERTED. System Action: Refer.ence to the illegal variable or the whole statement will be deleted by later phases. User Response: Correct invalid statement T IEM0653I Compi la ti on User Response: Save relevant data. Call your local IBM representative. ALLO- system Action: Identifier is replaced by a dummy dictionary reference; a later phase will delete the statement. T IEM0652I STATEMENT IDENTIFIER yyyy PRECEDING POINTER QUALIFIER IN STATEMENT NUMBER xxx IS NOT A NON-BASED POINTER VARIABLE User_ Response: Correct invalid statement S IEM0647I IN System Action: terminated ATTRIBUTE GIVEN WITH BASED VARIABLE zzzz IN ALLOCATE STATEMENT NUMBER xxx HAS BEEN IGNORED. Explanations: Based variable may not be specified with attributes S IEM0646I T IEM0654I S IEM0675I IN STATEMENT NUMBER xxx IDENTIFIER yyyy AFTER GO TO IS NOT A LABEL OR LABEL VARIABLE KNOWN IN THE BLOCK CONTAINING THE GO TO. S IEM06761 System Action: statement deleted by later phases. REFERENCE INSERTED IN STATEMENT NUMBER xxx. DEFERRED FEATURE. IDENTIFIER yyyy NOT ALLOWED AS A BUILT-IN FUNCTION OR PSEUDO-VARIABLE DUMMY REFERENCE INSERTED IN STATEMENT NUMBER xxx system Action: A dummy reference is inserted. The statement will be deleted by a later phase Explanation: ~ language feature has been used that is not supported by this version of the compiler. For details~ refer to Appendix H of this publication. W IEM06871 System Action: Statement deleted by later phases S IEM06881 system Action: Statement will be deleted by later phases User Response: Correct statement by removing reference to function in error S IEM06771 IEM06821 S IEM06831 W IEM0684I System Action: S IEM06891 zzzz WAS FOUND WHERE A TASK IDENTIFIER IS REQUIRED IN STATEMENT NUMBER xxx. DUMMY REFERENCE INSERTED. System Action: Statement will be deleted by later phases S IEM06901 zzzz WAS FOUND WHERE EVENT VARIABLE IS REQUIRED IN STATEMENT NUMBER xxx. DUMMY REFERENCE INSERTED. system Action: Statement will be deleted by later phases S IEM06911 INVALID ITEM zzzz IN DATA LIST, OR 'FROM' OR 'INTO' OPTION, IN STATEMENT NUMBER xxx system Action: Statement will be deleted by later phases validity S IEM06921 zzzz IS NOT A STATEMENT LABEL ON AN EXECUTABLE STATEMENT. DUMMY REFERENCE INSERTED AFTER GO TO IN STATEMENT NUMBER xxx System Action: Statement will be deleted by later phases S IEM06861 User Response: Save relevant data. Call your local IBM representati ve,. None User Response: Check of possible branches. S IEM06851 Action: None taken. Cascade errors may result. USE OF LABEL VARIABLE zzzz MAY RESULT IN AN ILLEGAL BRANCH IN STATEMENT NUMBER xxx Explanation: It is possible that the label variable may contain a value which would cause control to branch illegally into a block. This is a compil- ~tem zzzz WAS FOUND WHERE A FILE VARIABLE IS REQUIRED IN STATEMENT NUMBER xxx. DUMMY DICTIONARY REFERENCE REPLACES ILLEGAL ITEM. System Action: Statement will be deleted by later phases COMPILER ERROR. TOO FEW LEFT PARENTHESES IN STATEMENT NUMBER xxx Explanation: er error ILLEGAL PARENTHESIZED LIST IN STATEMENT NUMBER xxx FOLLOWS AN IDENTIFIER WHICH IS NOT A FUNCTION OR ARRAY. LIST DELETED. IN STATEME11T NUMBER xxx GO TO TRANSFERS CONTROL ILLEGALLY TO A FORMAT STATEMENT. IN STATEMENT NUMBER xxx GO TO zzzz TRANSFERS CONTROL ILLEGALLY TO ANOTHER BLOCK OR GROUP. zzzz APPEARS IN A FREE OR ALLOCATE STATEMENT BUT HAS NOT BEEN DECLARED CONTROLLED. DUMMY DATA DIRECTED I/O LIST, OR FROM'll OR I NTO OPT ION IN STATEMENT NUMBER xxx CONTAINS FORMAL PARAMETER OR DEFINED ITEM zzzz system Action: Statement will be deleted by later phases S IEM06931 ILLEGAL USE OF FUNCTION zzzz IN INPUT LIST IN STATEMENT NUMBER xxx. DUMMY REFERENCE INSERTED. System Action: Statement will be deleted by later phases Appendix G: Diagnostic Messages 207 S IEM0694I IN THE FORMAT LIST IN STATEMENT NUMBER xxx A REMOTE FORMAT ITEM REFERENCES zzzz, WHICH IS NOT A STATEMENT LABEL IN THE CURRENT BLOCK. DUMMY REFERENCE INSERTED. System Action: Format deleted by later phase S IEM0695I item LABEL ARRAY zzzz IS NOT FOLLOWED BY A SUBSCRIPT LIST AFTER GO TO IN STATEMENT NUMBER xxx. DUMMY REFERENCE REPLACES REFERENCE TO ARMY. STATEMENT NUMBER xxx. REFERENCE INSERTED. system Action: Statement etej by later phase S IEM0701I IEM0696I IN STATEMENT NUMBER xxx IT IS AN ERROR IF THE PARAMETER zzzz IN A REMOTE FORMAT ITEM REFERS TO A FORMAT STATEMENT WHICH IS NOT INTERNAL TO THE SAME BLOCK AS THE REMOTE FORMAT ITEM. Explanation: Remote formats become executable code, but not internal procedures. Therefore they must appear in the same block in which they are used. S IEM0697I ARGUMENT zzzz OF SET OPTION IS NOT A POIN~ER VARIABLE. DUMMY REFERENCE INSERTED. W IEM0702I LABEL, TASK OR EVENT VARIABLE zzzz USED IN FROM OR INTO OPTION IN STATEMENT NUMBER xxx MAY LOSE ITS VALIDITY IN TRANSMISSION S IEM0703I INVALID IDENTIFIER zzzz IN STATEMENT NUMBER xxx System Action: Invalid identifier replaced by dumroy. S IEM0704I STATEMENT NUMBER xxx CONTAINS INVALID USE OF FUNCTION zzzz System Action: Statement deleted by later phase Correct program W IEM0705I STATEMENT LABBL zzzz ATTACHED TO STATEMENT NUMBER xxx IS USED AS A REMOTE FORMAT ITEM IN TH1\.T STATEMENT. A DUMMY REPLACES THE REMOTE FORMAT ITEM. IF THE LABEL VARIABLE IN GO TO STATEMENT NUMBER xxx ASSUMES THE VALUE OF ITS VALUE-LIST MEMBER zzzz., THE STATEMENT WILL CONSTITUTE AN INVALID BRA.NCH INTO AN ITERATIVE DO GROUP. System Action: System Action: statement will be deleted by a later phase S IEM0698I THE BASED VARIABLE zzzz IN LOCATE STATEMENT NUMBER xxx IS NOT AT LEVEL 1. DUMMY REFERENCE INSERTED. STRUCTURE ARGUMENT zzzz OF FROM OR INTO OPTION IN STATEMENT NUMBER xxx IS NOT A MAJOR STRUCTURE. DUMMY REFERENCE INSERTED system Action: statement eted by later phase S IEM0700I 208 None User Response: Check that branch will be valid at execution time .. S IEM0706I The statement System Action: will be deleted by a later phase. S IEM0699I FREED Explanation: An identifier in the FREE statement is not a CONTROLLED variable. System Action: Object-time error message is compiled User ResDonse: and recompile del- system Action: Statement deleted by later phase. System Action: Statement will be deleted by later phases W DUMMY VARIABLE zzzz IN ·LOCATE STATEMENT IS NOT A BASED VARIABLE. DUMMY REFEFENCE INSERTED. System Action: The statement is deletej by a later phase. User Response: invalid statement S IEM0707I Correct the ARGUMENT zzzz OF IN OPTION IS NOT AN AREA VARIABLE. DUMMY REFERENCE INSERTED. del- ILLEGAL USE OF FUNCTION, LABEL OR VARYING STRING zzzz AS ARGUMENT OF FROM OR INTO OPTION IN System Action: The statement is deleted by a later phase. User Response: Correct invalid statement the E IEM0708I ASTERISK NOT ALONE IN SETS OR USES LIST. REMAINDER OF LIST IGNORED. S IEM0709I IMPLEMENTATION RESTRICTION. ARGUMENT NUMBER IN SETS OR USES LIST TOO LARGE. REDUCED TO 255. E IEM0710I REPEATED ARGUMENT NUMBER IGNORED IN SETS OR USES LIST. T IEM0711I COMPILER ERROR IN SETS LIST. Compiler error found in scan of SETS list S IEM0721I ELEMENT OF STATIC LABEL ARRAY zzzz USED AS LABEL ON STATEMENT NUMBER xxx System Action: ed S IEM0722I Label is delet- ELEMENT OF LABEL ARRAY zzzz USED AS LABEL ON STATEMENT NUMBER xxx IN BLOCK OTHER THAN THE ONE IN WHICH IT IS DECLARED. system Action: An error statement is inserted in the text in place of the offending label. ~xplanation: system Action: termi nat ed. T IEM0723I IDENTIFIER yyyy IN SETS OR USES LIST NOT KNOWN AT POINT OF OCCURRENCE OF LIST. IDENTIFIER IGNORED. E IEM0713I IDENTIFIER yyyy IN SETS LIST IS BASED VARIABLE. DUMMY REF-! ERENCE INSERTED. System Action: terminated User_Response: Correct source program by removing reference to based variable. System Action: The attribute is deleted FORMAL PARAMETER zzzz IN CHECK LIST. PARAMETER IS IGNORED. S IEM0725I STATEMENT NUMBER xxx HAS BEEN DELETED DUE TO A SEVERE ERROR NOTED ELSEWHERE. System Action: The statement is replaced error statement. S IEM0726I whole by an IDENTIFIER zzzz IN STATEMENT NUMBER xxx IS NOT A FILE NAME. THE STATEMENT IS DELETED. INITIAL S IEM0718I INVALID CHECK LIST IN STATEMENT NUMBER xxx. STATEMENT HAS BEEN CHANGED TO 'ON ERROR'. S IEM0719I ELEMENT OF LABEL ARRAY zzzz WHICH IS DECLARED WITH INITIAL ATTRIBUTE USED AS STATEMENT LABEL ON STATEMENT NUMBER xxx Explanation: The identifier has been used previously in a different context and is therefore not recognized as a file name S IEM0727I Label is delet- T IEM0728I Label is delet- IDENTIFIER zzzz IN STATEMENT NUMBER xxx IS NOT A CONDITION NAME. THE STATEMENT IS DELETED. Explanation: The identifier has been used previously in a different context and is therefore not recognized as a condition name SUBSCRIPTED IDENTIFIER zzzz USED AS LABEL ON STATEMENT NUMBER xxx IS NOT A LABEL ARRAY system Action: ed compilation Explanation: The identifier list of a CHECK prefix must not contain formal parameters TEXT yyyy ASSOCIATED WITH THE INITIAL ATTRIBUTE IN STATEMENT NUMBER xxx IS ILLEGAL AND HAS BEEN IGNORED. Expl~~ation: The INITIAL attribute has been used incorrectly. error User Response: Save relevant data. Call your local IBM representa ti ve. S IEM0724I S IEM0720I STATEMENT Explanation: Compiler found in scan of text E IEM0712I System Action: ed IN Compilation User Response: Save relevant data. Call your local IBM representative. S IEM0715I COMPILER ERROR NUMBER xxx COMPILATION TERMINATED DUE TO A PREVIOUSLY DETECTED SEVERE ERROR IN STATEMENT NUMBER xxx Appendix G: Diagnostic Messages 209 Explanation: A previous module has inserted a dummy dictionary reference into the second file .• The compiler cannot recover. S IEM0729I S IEM07351 COMPILER ERROR IN SCALE FACTOR IN PICTURE BEGINNING yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: Scan of picture halted. All references to picture deleted. System Action: Scan of picture terminated: picture ignored by later phases. S IEM07361 User Response: Save relevant data. Call your local IBM representative. S IEM07301 MORE THAN ONE SIGN CHARACTER PRESENT IN A SUBFIELD OF PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. S IEM07321 PICTURE CHARACTER M APPEARS IN NON-STERLING PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. S IEM07371 FIELD MISSING IN STERLING PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. System Action: Scan of picture continued with item ignored, but picture will be ignored by la ter phases .• S IEM07391 E IEM0740I ILLEGAL EDIT CHARACTERS AT START OF STERLING PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. MULTIPLE USE OF E K OR V IN PICTURE. PICTURE TRUNCATED AT ILLEGAL CHARACTER. PICTURE IN ERROR IS yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: Picture truncated at point indicated E IEM0741I ILLEGAL CHARACTER OR ILLEGAL NUMBER OF CHARACTERS IN POUNDS FIELD OF STERLING PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: Scan of picture terminated; picture ignored by later phases. 210 system Action: Scan of picture terminated: picture ignored by later phases. System Action: Scan of picture terminated; picture ignored by later phases. system Action: Scan of picture terminated: picture ignored by later phases. S IEM0734I ILLEGAL CHARACTER OR ILLEGAL NUMBER OF CHARACTERS IN PENCE FIELD OF STERLING PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. STA.TIC PIC'IURE CHA.RACTER $ S + - NOT AT EXTREMITY OF SUBFIELD. PICTURE IN ERROR IS yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. System Action: Scan of picture terminated; picture ignored by later phases. S IEM0733I WRONG NUMBER OF DELIMITER CHARACTERS M IN STERLING PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: Scan of picture terminated; picture ignored by late r phases. system Action: Scan of picture terminated: picture ignored by later phases. S IEM07311 ILLEGAL CHARACTER OR ILLEGAL NUMBER OF CHARACTERS IN SHILLINGS FIELD OF STERLING PICTURE yyyy.. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. CR OR DB INCORRECTLY POSITIONED IN SUBFIELD. PICTURE TRUNCATED AT THIS POINT. PICTURE IN ERROR IS yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: Picture cated at point indicated E IEM0742I trun- CR OR DB GIVEN FOR A NON-REAL, NON-NUMERIC OR FLOATING FIELD. PICTURE TRUNCATED BEFORE CR OR DB IN PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. ME NT NUMBER xxx, AND IN OTHER STATEMENTS. System Action: Scan of picture continued with item' ignored, but ~icture will be ignored by later phases. system Action: Picture truncated at point indicated S IEM0745I ILLEGAL USE OF PICTURE CHARACTER Z OR * IN PICTURE yyyy .• THIS PICTURE OCCURS IN STATEMENT NUMBER xxx" AND POSSIBLY IN OTHER STATEMENTS. S IEM0751I System Action: Scan of picture continued with item ignored. but picture will be ignored by later phases. S IEM0746I STERLING MARKER FOUND IN OTHER THAN FIRST POSITION IN PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. STERLING PICTURE CHARACTERS FOUND IN NON-STERLING PICTURE. SCANNING OF PICTURE STOPPED. PICTURE IN ERROR IS yyyy. THIS OCCURS IN STATEMENT PICTURE NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. §ystem Action: Scan of picture terminated; picture ignored by later phases. E IEM07481 S IEM07521 S IEM07491 S IEM07541 ILLEGAL CHARACTER IN PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx. AND POSSIBLY IN OTHER STATEMENTS. system Action: Scan of picture continued with item ignored, but picture will be ignored by later phases. S IEM0755I ILLEGAL USE OF DRIFTING EDITING SYMBOLS S $ + IN PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: Scan of picture continued with item ignored, but picture will be ignored by later phas es .• trunS IEM07561 ILLEGAL USE OF SCALING FACTOR IN PICTURE. SCAN OF PICTURE TERMINATED. PICTURE IN ERROR IS yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. T IEM07581 ILLEGAL CHARACTER PRESENT IN CHARACTER STRING PICTURE yyyy. THIS PICTURE OCCURS IN STATE- IMPLEMENTATION RESTRICTION. PRECISION TOO LARGE OR PICTURE TOO LONG IN PICTURE BEGINNING yyyy.. THIS PICTURE OCCURS IH STATEMENT NUMB ER xxx " AND POSSIBLY IN OTHER STATEMENTS. System Action: Scan of picture continued with item ignored, but picture will be ignored by later ph as es. System Action: Scan of picture terminated; picture ignored by later phases. S IEM07501 ILLEGAL USE OF,OR ILLEGAL CHARACTERS IN, STERLING PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: Scan of picture continued with item ignored, but picture will be ignored by later phases. ILLEGAL USE OF SCALING FACTOR IN PICTURE. SCALING FACTOR ONWARDS DELETED. PICTURE IN ERROR IS yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: Picture cated at point indicated NO MEANINGFUL CHARACTERS IN PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. System Action: Scan of picture continued with item ignored, but picture will be ignored by later phases. 2Ystem Action: Scan of picture continued with item ignored, but picture will be ignored by later phases. S IEM07471 POSSIBLY COMPILER ERROR IN PHASE FT. Explanation: Compiler error found in scan of dictionary Appendix G: Diagnostic Messages 211 System Action: terminated Compilation Explanation: The compiler has encocntered meaningless input to phase GA. User Response: Save relevant data. call your local IBM representative. S IEM07591 IMPLEMENTATION RESTRICTION. STERLING CONSTANT EXCEEDS 4166666666666.13.3t. HIGH ORDER DIGITS LOST DURING CONVERSION TO DECIMAL. System Action: High order digits lost somewhere in the following conversion process: shift pounds field left one digit, double by addition.. Add shillings field. Add result, doubled by addition, to result shifted left one digit. Add pence field. S IEM07601 Reference S IEM0771I IMPLEMENTATION RESTRICTION. NESTING OF FORMAT LISTS IN STATEMENT NUMBER xxx EXCEEDS 20. STATEMENT DELETED. S IEM0778I AN INTERMEDIATE VARIABLE HAS BEEN CREATED IN READ INTO STATEMENT NUMBER xxx. THIS STATEMENT SPECIFIES FILE zzzz, WHICH HAS BEEN DECLARED WITH THE ENV(COBOL) ATTRIBUTE AND THE EVENT OPTION. THE EVENT OPTION HAS BEEN DELETED. Explanation: The intermediate variable has been created because there is a difference between the PLII mapping and the COBOL mapping of the READ INTO variable. The READ INTO statement has been expanded into: to PICTURE CHARACTER E OR K APPEARS WITHOUT AN EXPONENT FIELD FOLLOWING IT.. PICTURE IN ERROR IS yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. READ INTO (Intermediate variable) ; Variable = Intermediate variable; The READ statement must have been completed before the assignment takes place. The EVENT option has been deleted to ensure that the READ statement is complete before processing continues. System Action: Reference to picture deleted from program User Response: S IEM0762I S IEM0769I Correct picture PICTURE CHARACTER E OR K IS NOT PRECEDED BY A DIGIT POSITION CHARACTER. PICTURE IN ERROR IS yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: picture deleted 212 System Action: Delete EVENT option and continue the User ResQonse: Check the use of the EVENT option or of the COBOL file. References to IMPLEMENTATION RESTRICTION. STATEMENT NUMBER xxx AS EXPANDED IS TOO LONG AND HAS BEEN DELETED. User Response: Simplify by splitting into two or more statements and recompile T IEM0770I compilation User ResQ~: Save relevant data. Call your local IBM representative. IMPLEMENTATION RESTRICTION. EXPONENT FIELD TOO LARGE IN PICTURE yyyy. THIS PICTURE OCCURS IN STATEMENT NUMBER xxx, AND POSSIBLY IN OTHER STATEMENTS. system Action: picture deleted S IEM0761I system Action: terminated COMPILER ERROR IN INPUT TO PHASE GA IN STATEMENT NUMBER xxx S IEM0779I AN INTERMEDIATE VARIABLE HAS BEEN CREATED IN WRITE/REWRITE FROM STATEMENT NUMBER xxx. THIS STATEMENT SPECIFIES FILE zzzz, WHICH HAS BEEN DECLARED WITH THE ENV(COBOL) ATTRIBUTE AND THE EVENT OPTION. THE EVENT OPTION HAS BEEN DELETED. Explanation: The intermediate variable has been created because there is a difference between the PL/I mapping and the COBOL mapping of the The attributes Explanation: referred to do not exist in COBOL WRITE/REWRITE FROM variable. The WRITE/REWRITE FROM statement has been expanded to: system Action: is deleted Intermediate variable = variable; WRITE/REWRITE FROM (Intermediate variable); S IEM07841 The WRITE/REWRITE statement must have been completed before the intermediate variable can be deleted. The EVENT option has been deleted to ensure that the WRITE/REWRITE statement is complete before processing continues. Explanation: Only a single argument can be g1ven in the ALLOCATION function. and it must be one of the following: a major structure 2. the an unsubscripted array or scalar variable, not in a structure User Response: Check the use of the EVENT option or of the COBOL file .. It must also be of nonbased CONTROLLED storage class. System Action: If the argument list begins with a valid operand, that operand is used as the argument; otherwise, the argument list is deleted. THE USE OF COBOL FILE zzzz IN LOCATE STATEMENT NUMBER xxx MAY LEAD TO ERRORS WHEN THE RECORD IS PROCESSED. Explanation: The COBOL structure-mapping is not necessarily the same as the PL/I structure-mapping. System Action: is deleted The W IEM07861 NAME, NOT VALUE, OF FUNCTION zzzz PASSED AS ARGUMENT IN STATEMENT NUMBER xxx S IEM07871 INCORRECT NUMBER OF ARGUMENTS FOR FUNCTION zzzz IN STATEMENT NUMBER xxx T IEM0790I IMPLEMENT~TION statement User Response: Either the LOCATE statement must be replaced by a WRITE FROM statement, or a non-COBOL file must be used. S IEM0781I THE USE OF COBOL FILE zzzz IN READ SET STATEMENT NUMBER xxx MAY LEAD TO ERRORS WHEN THE RECORD IS PROCESSED. System Action: is deleted RESTRICTION. STATEMENT NUMBER xxx IS TOO LONG AND HAS BEEN TRUNCATED. Explanation: The first bytes of a statement to be moved out exceed the text block length. System Action: The statement is truncated. compilation will not be completed. Explanation: The COBOL structure-mapping is not necessarily the same as the PLII structure-mapping. User Response: Subdivide statement into two or more separate statements, and recompile .• The statement User Response: Either the READ SET statement must be replaced by a READ INTO statement, or a non-COBOL file must be used. S IEM07821 INVALID ARGUMENT LIST FOR ALLOCATION FUNCTION IN STATEMENT NUMBER xxx HAS BEEN TRUNCATED OR DELETED. 1. System Action: Delete EVENT option and continue S IEM0780I The statement THE ATTRIBUTES OF zzzz USED IN RECORD I/O STATEMENT NUMBER XXX ARE NOT PERMITTED WHEN A COBOL FILE IS USED. W IEM0791I NUMBER OF ARGUMENTS FOR zzzz STATEMENT NUMBER xxx INCONSISTENT WITH NUMBER USED ELSEWHERE Explanation: The number of arguments for zzzz has not been explicitly declared. 'ELSEWHERE' refers either to the PROCEDURE or ENTRY statement for zzzz, or to a previous invocation of the function. Appendix G: Diagnostic Messages 213 E IEM0792I IN STATEMENT NUMBER xxx IT IS IMPOSSIBLE TO CONVERT FROM THE ATTRIBUTES OF ARGUMENT NUMBER nnnn TO THOSE OF THE CORRESPONDING PARAMETER IN ENTRY zzzz. THE PARAMETER DESCRIPTION IS IGNORED. MAY NOT BE PASSED AS AN ARGUMENT. STATEMENT DELETED. S IEM07981 Explanation: The message is gene rated, for example" when scalar arguments are given for array built-in functions. For the ADDR function the message could indicate that the function cannot return a valid result because the argument does not satisfy the requirements of contiguous storage. This could occur# for example, if the argument was a crosssection of an array. Explanation: Self explanatory. Examples of circumstances under which the error message is generated are label arguments to data item parameters, array arguments to scalar parameters. system Action: The parameter description is ignored. If the parameter description is correct, this will give rise to totally incorrect execution. User Response: Correct the parameter description or the argument so that at least conversion is possible. W IEM0793I S IEM0794I IN STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz CONTAINS A SUBSCRIPTED VARIABLE WITB THE WRONG NUMBER OF SUBSCRIPTS. THE STATEMENT HAS BEEN DELETED. S IEM07951 DEFERRED FEATURE. IN STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz CONTAINS A CROSSSECTION OF AN ARRAY OF STRUCTURES. STATEMENT DELETED. Explanation: The usage referred to is not supported by this version of the compiler. For details, refer to Appendix H of this publication. S IEM07961 S IEM07971 214 E IEM07991 IN STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz IS A SCALAR AND THE CORRESPONDING PARAMETER IS A STRUCTURE. System Action: A temporary structure of the same type as the parameter description is created and the argument is assigned to each base element, converting where necessary. IN STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz IS A GENERIC ENTRY NAME AND THERE IS NO CORRESPONDING ENTRY DESCRIPTION. STATEMENT DELETED. I N STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz IS A BUILT-IN FUNCTION WHICH IN STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz IS NOT PERMISSIBLE. THE STATEMENT HAS BEEN DELETED. IN STATEMENT NUMBER xxx A DUMMY ARGUMENT HAS BEEN CREATED FOR ARGUMENT NUMBER nnnn OF ENTRY zzzz. THIS ARGUMENT APPEARS IN A SETS LIST. System Action: The value assigned to the temporary argument during the execution of the procedure is lost on return from the procedure. W IEM08001 Hi STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn IN ENTRY zzzz IS A SCALAR AND THE CORRESPONDING PARAMETER IS AN ARRAY. System Action: A temporary array with the attributes of the entry description is created and the scalar is assigned to each element of the array, converting the type if necessary. S IEM08011 IN STATEMENT lJUMBER xxx ARGUMENT NUMBER nnnn IN ENTRY zzzz IS SCALAR CORRESPONDING TO AN ARRAY PARAMETER WITH * BOUNDS. THE STATEMENT HAS BEEN DELETED. W IEM08021 IN STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz DOES NO!' MATCH THE PARAMETER. A DUMMY ARGUMENT HAS BEEN CREATED. T IEM08031 IMPLEMENTATION RESTRICTION. STATEMENT NUMBER xxx CONTAINS TOO MANY NESTED FUNCTION REFERENCES. LIMIT EXCEEDED AT ARGUMENT NUMBER nnnn OF ENTRY zzzz system Action: terminated Compilation User Response: Reduce dep·th of function call nesting. T IEM0804I Explanation: Compiler error in scanning source text system Action: terminated system Action: terminated Compilation Reduce DEFERRED FEATURE. IN STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz IS AN EVENT. STATEMENT DELETED. User Response: Save relevant data. Call your local IBM representative. T IEM0819I S IEM0807I T IEM0816I execution entry to System Action: terminated T IEM0820I System Action: terminated Compilation is User Response: Subdivide statement and recompile E IEM0821I INVALID I'lEM CHECK LIST IN xxx zzzz IGNORED IN NUMBER STATEMEN~ Compilation is Explanation: Valid items in CHECK lists are: statement labels, entry labels. and scalar, array, structure, or label variables. Subscripted variable names, or data having the DEFINED attribute, are not allowed. COMPILER ERROR IN LABEL CHAIN FOR STATEMENT NUMBER xxx Explanation: Compiler error in scanning labels of a statement System Action: terminated RES~RICTION. NUMBER xxx TOO LONG. Explanation: Statement length exceeds text-block size. User Response: Save relevant data. Call your local IBM representative. T IEM0817I IMPLEMENT~TION STATEMENT COMPILER ERROR. INVALID END OF STATEMENT NUMBER xxx system Action: terminated Compilation is User Response: Save relevant data. Call your local IBM representative. IN STATEMENT NUMBER xxx ARGUMENT NUMBER nnnn OF BUILT-IN FUNCTION zzzz IS ~N ENTRY NAME~ THE STATEMENT HAS BEEN DELETED. Explanation: Compiler error in scan of input text COMPILER ERROR IN CHECK/NOCHECK LIST ENTRY FOR ST~TEMENT ~lUMBER xxx Explanation: Compiler error in CHEC F or NOCHECK list dictionary entry IN STATEMENT ~UMBER xxx ARGUMENT NUMBER nnnn OF ENTRY zzzz IS NOT CONTROLLED BUT THE CORRESPONDING PARAMETER IS. §ystem Action: An error will occur on the called procedure Compilation state- Explanation: A language feature has been used that is not supported by this version of the compiler. For details, refer to Appendix H of this publication. S IEM08061 COMPILER ERROR IN DICTIONARY ENTRY FOR STATEMENT NUMBER xxx IMPLEMENTATION RESTRICTION. STATEMENT NUMBER xxx IS TOO LONG AND HAS BEEN DELETED. User Response: ment size S IEM0805I T IEM08181 Compilation W IEM0823I IMPLEMENTATION RESTRICTION. NO ROOM FOR zzzz IN CHECK TABLE STATEMENT NUMBER xxx is User Response: Save relevant data. Call your local IBM representative. Note that this error can be avoided by using only one label on the statement. Explanation: The CHECK table has overflowed list System Action: The item mentioned is ignored User Response: many items ~ppendix Do not CHECK so G: Diagnostic Messages 215 T IEM0824I IMPLEMENTATION RESTRICTION. TOO MANY CHECKED ITEMS WITHIN STATEMENT NUMBER xxx Explanation: A stack used to trace nested IF statements has overflowed System Action: terminated S IEM0833I COMPILER ERROR IN READ STATEMENT NUMBER xxx S IEM0834I DATA S IEM0835I IMPLEMENTATION RESTRICTION. CHECK WILL NOT BE RAISED FOR zzzz IN STATEMENT NUMBER xxx BEC.;l\USE OF EVENT OPTION IN THE EXPANSION OF BY NAME ASSIGNMENT STATEMENT NUMBER xxx A SET OF MATCHING ELEMENTS HAS BEEN FOUND BUT THEY ARE NOT ALL BASE ELEMENTS. THE STATEMENT HAS BEEN DELETED. Explanation: For a valid component scalar assignment to result from a BY NAME structure assignment, it is necessary that all the scalar names derived from original structure name operands have identical qualification relative to the structure name originally specified. e.g: DCL lS, 2T, 2U, 3V; DCL lW, 2T, 2U; W=S; gives rise to the component assignments W.T=S.T; W.U=S.U; the second of which is invalid. System Action: The BY NAME assignment statement is deleted User Response: PL/I Reference for expansion 216 Refer to the Manual - rules of structure THE ASSIGNED OPERAND IN BY NAME ASSIGNMENT STATEMENT NUMBER xxx IS NOT A STRUCTURE OR AN ARRAY OF STRUCTURES. STATEMENT DELETED. ALL OPERANDS LEFT OF EQUAL SYMBOL IN MULTIPLE STRUCTURE ASSIGNMENT STATEMENT NUMBER xxx ARE NOT STRUCTURES. STATEMENT DELETED Explanation: In multiple structure aSSignment, all the operands being assigned to must be structures. Explanation: The compiler does not raise the CHECK condition for variables when they are changed in statements containing an EVENT option. S IEM08321 THE EXPANSION OF BY NAME ASSIGNMENT STATEMENT NUMBER xxx HAS RESULTED IN NO COMPONENT ASSIGNMENTS. Explanation: In BY NAME assignment, the operand to the left of the equals sign must be a structure or an array of structures .• Compilation is User Response: Avoid the error by supplying an explicit DATA list W IEM08261 cor- system Action: The statement is treated as a null statement IF so Explanation: Compiler error in processing GET or READ DATA statement System Action: terminated and Compilation is User Response: Rephrase statements, or do not CHECK many items. T IEM08251 assignment BY NAME rect the error. system Action: Replaces statement by c null statement and continues User Response: Break statement up into a series of separate statements S IEM0836I ILLEGAL ARRAY REFERENCE IN STRUCTURE ASSIGNMENT OR EXPRESSTATEMENT NUMBER xxx SION. DELETED. Explanation: In PL/I, arrays of scalars are invalid operands in structure, or array of structure, expressions. T IEM0837I COMPILER ERROR PHASE IEMHF. IN INPUT TO Explanation: Meaningless input. This message is also produced if an error is found in a DECLARE statement. In that case, a second message, of severity level severe, is issued giving details of the error. System Action: terminated Compilation is elements at the next level. Corresponding sets of contained elements must all be arrays of structures, structures, arrays, or scalars. The arrays must have the same dimensionality and bounds. User Response: Save relevant data. Call your local IBM representative. E IEM0838I EXPRESSION RIGHT OF EQUAL SYMBOL IN BY NAME ASSIGNMENT STATEMENT NUMBER xxx CONTAINS NO STRUCTURES. BY NAME OPTION DELETED. Explanation: In an assignment statement having the BY NAME option. the expression to the right of the equal symbol should contain at least one structure or array of structures. S IEM0848I User Response: Refer to the PL/I Reference Manual the expansion of array and structure expressions and assignments - and correct the program. S IEM0851I IMPLEMENTATION RESTRICTION. THE EXPANSION OF STRUCTURE EXPRESSIONS IN STATEMENT NUMBER xxx HAS CAUSED A TABLE INTERNAL TO THE COMPILER TO OVERFLOW. STATEMENT DELETED. The expansion of expressions or assignments has given rise to a statement which exceeds one text block in length EXPla~tion: struc~re User Response: ment size Explanation: The nesting of structure expressions in argument lists is too deep. S IEM0852I User Response: nesting. S IEM0849I Decrease the AN EXPRESSION OR ASSIGNMENT IN STATEMENT NUMBER xxx EITHER CONTAINS SEPARATE STRUCTURES WITH DIFFERENT STRUCTURING, OR CONT AINS BOTH A STRUCTURE AND AN ARRAY OF STRUCTURES. THE STATEMENT HAS BEEN DELETED. Explanation: PL/I does not allow separate structures with different structuring within the same expression or assignment. The (F) compiler does not support reference to both a structure and an array of structures within the same expression or assignment. THE BOUNDS OF THE BASE ARRAYS OF THE STRUCTURE OPERANDS OF THE STRUCTURE EXPRESSION OR ASSIGNMENT IN STATEMENT NUMBER xxx ARE NOT THE SAME. THE STATEMENT HAS BEEN DELETED. Explanation: In a structure assignment or expression, all structure operands must have the same number of contained Decrease state- A SUBSCRIPTED REFERENCE TO AN ARRAY OF STRUCTURES IN STATEMENT NUMBER xxx HAS THE WRONG NUMBER OF SUBSCRIPTS. THE STATEMENT HAS BEEN DELETED. Explanation: Subscripted references to arrays must have subscript expressions equal in number to the dimenSionality of the array User Response: Correct scripted reference S IEM0853I sub- DEFERRED FEATURE. A STRUCTURE ASSIGNMENT OR EXPRESSION IN STATEMENT NUMBER xxx INVOLVES CROSS SECTIONS OF ARRAYS. STATEMENT DELETED. Explanation: This version of the compiler does not support reference to cross sections of arrays of structures. User Response: Correct the source code. The two restrictions quoted above are detailed in the PL/I Reference Manual and in Appendix H of this publication, respectively. S IEM0850I IMPLEMENTATION RESTRICTION. STATEMENT NUMBER xxx IS TOO LONG AND HAS BEEN DELETED. User Response: Expand the statement in DO loops replacing '* f S in subscripts by the appropriate DO control variable. S IEM0864I IMPLEMENTATION RESTRICTION. NESTING OF ARRAY ASSIGNMENTS OR I/O LISTS TOO DEEP. STATEMENT NUMBER xxx DELETED. Explanation: Nesting of functions,. combined with size of arrays inVOlved, is too great Appendix G: Diagnostic Messages 217 User Response: splitting into statements S IEM08651 Simplify by two or more IMPLEMENTATION RESTRICTION. STATEMENT NUMBER xxx IS TOO LONG AND HAS BEEN DELETED. Explanation: Nesting of functions with array arguments involves a large expansion of text User Response: splitting into statements S IEM08661 S IEM08721 Explanation: The number subscripts specified must the same as the number dimensions of the array S IEM08731 Simplify by two or more NEITHER MULTIPLE ASSIGNMENT COMMA NOR ASSIGNMENT MARKER FOUND IN CORRECT POSITION. STATEMENT NUMBER xxx DELETED. S IEM08741 An expression occurr1ng on the left-hand side of an assignment must be contained within parentheses. NUMBER OF * SUBSCRIPTS SPECIFIED FOR zzzz IS NOT THE DIMENSIONALITY OF THE LEFTMOST ARRAY. STATEMENT NUMBER xxx DELETED S IEM0875I BOUNDS OF ARRAY zzzz ARE NOT SAME AS FOR LEFTMOST ARRAY IN ASSIGNMENT OR EXPRESSION. STATEMENT NUMBER xxx DELErED. DIMENSIONS OF ARRAY zzzz ARE NOT THE SAME AS FOR LEFTMOST ARRAY IN ASSIGNMENT OR I/O EXPRESSION. STATEMENT NUMBER xxx DELETED. S IEM08761 ARGUMENT OF PSEUDO-VARIABLE INVALID. STATEMENT NUMBER xxx IS DELETED. S IEM08771 S IEM08781 218 UNSUBSCRIPTED ARRAY SCALAR ASSIGNMENT. NUMBER xxx DELETED. zzzz IN STATEMENT can STRUCTURE zzzz FOUND IN ARRAY OR SCALAR EXPRESSION. STATEMENT NUMBER xxx DELETED. Explanation: Structures may only be aSSigned to structures S IEM08791 SCALAR zzzz ON LEFT OF EQUAL SYMBOL IN ARRAY ASSIGNMENT. STATEMENT NUMBER xxx DELETED. ARGUMENTS OF PSEUDO-VARIABLE SUBSTR INCORRECT. STATEMENT NUMBER xxx DELETED. Explanation: Only scalars be assigned to scalars Explanation: Arguments of pseudo-variables must be variables which are not expressions S IEM08711 ONSOURCE OR ONCHAR APPEARS IN A DIMENSIONED ARRAY ASSIGNMENT. STATEMENT NUMBER xxx DELETED. Explanation: Only one argument given for SUBSTR. or expreSS10n illegally used as argument for pseudo-variable. Explanation: Array references in expressions must have the same dimensionality S IEM08701 SECOND ARGUMENT OF PSEUDOVARIABLE COMPLEX OR FIRST ARGUMENT OF REAL, IMAG, OR UNSPEC EITHER IS NOT FOLLOWED BY A RIGHT PARENTHESIS OR IS AN EXPRESSION. STATEMENT NUMBER xxx DELETED. Explanation: ON SOURCE and ONCHAR may only appear in scalar assignments Explanation: Array references in expressions must have the same bounds S IEM08691 ARGUMENTS OF PSEUDO-VARIABLE COMPLEX INCORRECT. STATEMENT NUMBER xxx DELETED. Explanation: Too many arguments given for this pseudovariable~ or expression used as argument. Explanation: Array references in expressions must have the same dimensionality S IEM08681 of be of Explanation: Only one argument given for COMPLEX, or expression illegally used as argument for pseudo-variable. ~xplan~tion: S IEM08671 NUMBER OF SUBSCRIPTS SPECIFIED FOR LEFTMOST OPERAND zzzz IS NOT SAME AS DIMENSIONALITY. STATEMENT NUMBER xxx DELETED. PSEUDO-VARIABLE COMPLEX, REAL, lMAG., UNSPEC, COMPLETION, OR SUBSTR LACKS ARGUMENTS. STATEMENT NUMBER xxx DELETED. Explanation: Pseudo-variables COMPLEX, REAL, I MAG" UNS PEC" COMPLETION. and SUBSTR require arguments T IEM08981 Explanation: compiler error User Response: Check whether the variable was intended as a pseudo-variable or whether it should have been declared otherwise S IEM08801 NUMBER OF SUBSCRIPTS SPECIFIED FOR zzzz IS NOT SAME AS DIMENSIONALITY. STATEMENT NUMBER xxx DELETED. Explanation: The number subscripts specified must the same as the number dimensions of the array S IEM08811 T IEM08821 system Action: pila tion E IEM08991 of be of Compilation Rewrite expres- * USED AS SUBSCRIPT FOR ISUB DEFINED ITEM zzzz IN STATEMENT NUMBER xxx. ZERO SUBSTITUTED. User Response: Rewrite without * E IEM09011 IMPLEMENTATION RESTRICTION. TOO MANY LEVELS OF ISUB NESTING IN STATEMENT NUMBER xxx Explanation: Stack has overflowed scratch core. The maximum number of levels of nesting possible depends on the dimensionality of the arrays involved. User Response: Rewrite defining DECLARE statement E IEM09021 Compilation WRONG NUMBER OF SUBSCRIPTS FOR ISUB DEFINED ITEM zzzz IN STATEMENT NUMBER xxx. SUBSCRIPTS IGNORED OR ZERO SUPPLIED. User Response: Rewrite with correct number of subscripts. The error may be in the reference to the defined item or in the defining DECLARE statement. ISUB DEFINED OPERAND zzzz HAS NOT BEEN DECLARED AS AN ARRAY. ISUBS IN STATEMENT NUMBER xxx DELETED. T IEM09031 User Response: Declare defined item with dimension attribute ISUB NUMBER IN DEFINING LIST FOR zzzz IN STATEMENT NUMBER xxx IS TOO GREAT. MAXIMUM NUMBER USED. System Action: The iSUB number is replaced by the number of dimensions of the defined array. User Response: Reduce the number of levels of nesting in the statement S IEM08971 Terminates com- MULTIPLIER IN ISUB DEFINING LIST FOR zzzz IN STATEMENT NUMBER xxx IS NOT A SCALAR EXPRESSION. User Response: sion has User Response: Save relevant data. Call your local IBM representative. system Action: terminated a System Action: Remainder of expression, after comma, ignored E IEM09001 T IEM08961 is Explanation: A comma has been found within the iSUB multiplier expression COMPILER ERROR. INVALID INPUT TO PHASE HK AT STATEMENT NUMBER xxx System Action: terminated This User Response: Save relevant data. Call your local IBM representative. NUMBER OF DIMENSIONS IN REFERENCE TO zzzz IS NOT SAME AS THAT OF EXPRESSION OR ASSIGNMENT. STATEMENT NUMBER xxx DELETED. Explanation: Illegal text been encountered NO SUBSCRIPTS AFTER ISUBDEFINED ITEM zzzz IN STATEMENT NUMBER xxx. COMPILER ERROR. ERROR DETECTED IN DEFINING ISUB LIST FOR zzzz IN STATEMENT NUMBER xxx Appendix G: Diagnostic Messages 219 Explanation: Compiler error. Either Ca) SUB not found where expected, or Cb) SUBO found without a multiplier expression,. System Action: terminated W IEM1026I T IEM1027I STATEMENT DELIMITER FOUND WITHIN SUBSCRIPT LIST FOR ZZZZ IN STATEMENT NUMBER xxx system Action: The present statement is dropped and the new one processed. Compilation will not be completed. T IEM1028I IMPLEMENTATION RESTRICTION. STATEMENT NUMBER xxx IS TOO LONG AND HAS BEEN TRUNCATED. is Terminates com- User Response: Save relevant data. Call your local IBM representative. T IEM1029I IN STATEMENT NUMBER ARRAY CROSS-SECTION ILLEGALLY. xxx AN APPEARS Explanation: A feature has been used that is not supported by this version of the compiler. For details, refer to Appendix H of this publication. Simplify state- ILLEGAL USE OF zzzz IN STATEMENT NUMBER xxx. A FIXED BINARY ZERO CONSTANT IS SUBSTITUTED. system Action: pila tion T IEM1040I Explanation: A non-scalar identifier has been specified in a context that requires a scalar identifier. FEATURE. STRUCTURE IS BEING PASSED TO Z2ZZ IN STATEMENT NUM- System Action: pilation IDENTIFIER zzzz ILLEGALLY USED AS SUBSCRIPT IN STATEMENT NUMBER xxx Explanation: A subscript has been used which is not a scalar, a scalar expression, or a constant DEFERRED ARGUMENT FUNCTION BER xxx. Terminates com- Explanation: In this version of the compiler, structures may not be passed as arguments to built-in functions. System Action: Replaces illegal identifier with arithmetic constant zero 220 Compilation COMPILER ERROR IN STATEMENT NUMBER xxx. ILLEGAL INPUT TEXT FOR PHASE IA. system Action: pilation System Action: Statement is truncated. Compilation will not be compl eted,. S IEM1025I AN THE SUBSCRIPTED STRUCTURE ITEM zzzz IS ILLEGALLY USED IN STATEMENT NUMBER xxx system .Action: terminated Explanation: statement length exceeds text block size S IEM1024I STATEMENT NUMBER xxx IS UNLABELED FORMAT STATEMENT Explanation: The indicated structure item is used in a statement other than an assignment statement or an I/O data list,. User Response: Check text, but this is probably a compiler error, in which case save relevant data and contact your your local IBM representative. User Response: ment ille- Explanation: A FORMAT statement should have a label Explanation: The subscript scan routine has found a statement marker S IEM0907I Replaces wi th arithmetic Compilation User Response: Save relevant data. Call your local IBM representative. S IEM0906I System Action: gal subscript constant zero User gram~ Terminates com- Response: Rewrite proavoiding unsupported fea- ture. T IEM1051I DEFERRED FEATURE. STRUCTURE ARGUMENT IS BEING PASSED TO PSEUDO-VARIABLE zzzz IN STATEMENT NUMBE R xxx. Explanation: In this version of the compiler, structures may not be passed as arguments to pseudo-variables. System Action: pilation T IEM10611 Explanation: Too few arguments are being passed to a built-in function Terminates com- User Response: Rewrite program, avoiding unsupported feature. T IEM10561 INVALID ARGUMENT IS BEING PASSED TO ENTRY NAME zzzz IN STATEMENT NUMBER xxx. System Action: pilation T IEM1057I system Action: pilation T IEM10621 System Action: Function result is set to zero and compilation terminated .• OR STRUCTURE ARGUMENT IS NOT BEING PASSED, AS REQUIRED, TO FUNCTION zzzz IN STATEMENT NUMBER xxx. ARR~Y T IEM10631 to an as COMPILER ERROR. UNEXPECTED SITUATION HAS ARISEN IN THE SCANNING OF THE ARGUMENTS PASSED TO FUNCTION zzzz IN STATEMENT NUMBER xxx Explanation: Compiler is unable to correctly scan an argument list System Action: pilation Terminates com- system Action: is set to zero User Response: ment Correct User Response: Save relevant data. Call your local IBM representative. state- FIRST ARGUMENT BEING PASSED TO FUNCTION zzzz IN STATEMENT NUMBER xxx SHOULD BE AN ARRAY. Explanation: Argument built-in function is not array as expected system Action: pilation T IEM10601 User Response: Save relevant data. Call your local IBM representative. Terminates com- Explanation: Argument built-in function is not array or a structure" expected .• T IEM10591 COMPILER ERROR. CORRECT GENERIC SELECTION FOR FUNCTION zzzz IN ST~TEMENT NUMBER xxx HAS NOT BEEN ACHIEVED. Explanation: Compiler., althcugh being given a legal argument to a generic built-in function. is unable to make the selection. Explanation: ~rgument to built-in function is not a decimal integer as expected. T IEM10581 Terminates com- Terminates com- DECIMAL INTEGER CONSTANT IS NOT BEING PASSED, AS REQUIRED, TO FUNCTION zzzz IN STATEMENT NUMBER xxx. system Action: pilation TOO FEW ARGUMENTS ARE BEING PASSED TO FUNCTION zzzz IN STATEMENT NUMBER xxx. T IEM10641 to an system Action: pila tion TOO MANY ARGUMENTS ARE BEING PASSED TO FUNCTION zzzz IN STATEMENT NUMBER xxx. Terminates com- Terminates com- User Response: Save relevant data. Call your local IBM representa ti ve .• arguto a T IEM10651 System Action: pilation ERROR. THE GENERIC ASSOCIATED WITH ENTRY HAVE BEEN INCORRECTLY THE DICTIONARY. Explanation: The dictionary entry for one or more of the generic families is not a recognizable entry type .• Terminates com- Explanation: Too many ments are being passed built-in fUnction COMPILER FAMILIES NAME zzzz FORMED IN Function result NO GENERIC SELECTION POSSIBLE FOR THE ENTRY NAME zzzz IN STATEMENT NUMBER xxx. Appendix G: Diagnostic Messages 221 Explanation: Incorrect use of the GENERIC attribute resulting in no selection being possible System Action: terminated System Action: pilation User Response: Save relevant data. Call your local IBM representa ti ve,. Terminates comT IEM1074I T IEM1066I T IEM10671 MORE THAN ONE GENERIC SELECTION IS POSSIBLE FOR THE ENTRY NAME zzzz IN STATEMENT NUMBER xxx. Explanation: Unable to correctly scan an argument list of a pseudo-variable system Action: pilation System Action: terminated Terminates com- PSEUDO-VARIABLE zzzz APPEARS IN STATEMENT NUMBER xxx WITH AN ILLEGAL ARGUMENT,. System Action: pilation T IEM1072I Compilation User Response: Save relevant data. Call your local IBM representati ve,. T IEM10781 Terminates com- IMPLEMENTATION RESTRICTION. THE NUMBER OF FAMILY MEMBERS AND ARGUMENTS ASSOCIATED WITH THE GENERIC ENTRY NAME yyyy EXCEEDS THE LIMITATION IMPOSED. There is an Explanation: implementation restriction on the number of family members and arguments associated with GENERIC entry names. For details, refer to Appendix B of this publication. Terminates comSystem Action: terminated Compilation User Response: Divide the generic family into two or more generic families. Terminates com- COMPILER ERROR. CORRECT GENERIC SELECTION FOR PSEUDOVARIABLE zzzz IN STATEMENT NUMBER xxx HAS NOT BEEN ACHIEVED. Explanation: Compiler error. Although being given a legal argument to a generic pseudovariable. is unable to make the selection. 222 COMPILER ERROR IN PHASE JD system Action: terminates PSEUDO-VARIABLE zzzz APPEARS IN STATEMENT NUMBER xxx WITH TOO FEW ARGUMENTS .. System Action: pilation T IEM1073I T IEM10761 PSEUDO-VARIABLE zzzz APPEARS IN STATEMENT NUMBER xxx WITH TOO MANY ARGUMENTS,. system Action: pilation Compilation User Response: Save relevant data. Call your local IBM representative. Terminates com- AN ARRAY IS BEING PASSED TO FUNCTION zzzz IN STATEMENT NUMBER xxx. THIS PRODUCES AN ARRAY EXPRESSION WHICH IS INVALID IN THIS ~NTEXT. System Action: pilation T IEM1071I COMPILER ERROR. UNEXPECTED SITUATION HAS ARISEN IN THE SCANNING OF THE ARGUMENTS PASSED TO PSEUDO-VARIABLE zzzz IN STATEMENT NUMBER xxx Explanation: Incorrect use of the GENERIC attribute resulting in more than one selection being possible Explanation: Argument to pseudo-variable cannot be converted to a legal type; or, structure argument being used with pseudo-variable. T IEM1068I Compilation S IEM10821 STATEMENT NUMBER xxx CONTAINS AN INVALID USE OF AREA OR POINTER DATA. PART OR ALL OF THE STATEMENT HAS BEEN DELETED. Explanation: The statement contains an operation that: 1. is not permitted for AREA or POINTER data. or 2. can only be used with AREA or POINTER data but such data is not the data specified for the operationu Explanation: The TASK, EVENT, or LABEL variable may lose its validity in transmission. System Action: Deletes the statement or clause responsible for the error. S IEM1088I THE SIZE OF AGGREGATE zzzz IS GREATER THAN 8,388,,601 BYTES .. STORAGE ALLOCATION WILL BE UNSUCCESSFUL. User Response: Correct source code if necessary E IEM1104I System Action: Array or structure mapping for the item is terminated, but the compilation continues,. Execution of object decks containing references to the item will give incorrect results. S IEM1089I Response: Chec k system Action: Defined item mapped onto same storage as item defined on. Data and specification interrupts may occur at execution. source THE RELATIVE VIRTUAL ORIGIN OF AGGREGATE zzzz IS LESS THAN -8,,388,. 608 BYTES,. STORAGE HAS NOT BEEN ALLOCATED,. User Respons~: Refer to the PL/I Reference Manual - "The DEFINED Attribute" and correc t the error. E IEM11051 Explanation: The low bounds of the arrays in the aggregate are too high. system Action: Defined item mapped onto same storage as item defined on. Data and specification interrupts may occur at execution. User Response: Reduce the size of the aggregate. or reduce the value of the low bounds in the aggregate,. THE STRUCTURE zzzz DECLARED IN STATEMENT NUMBER xxx CONTAINS VARYING STRINGS AND MAY APPEAR IN A RECORD I/O STATEMENT Explanation: VARYING strings in structures are not permitted in RECORD I/O statements. System Action: The RECORD I/O statement is processed but the record will contain erroneous information. User Response: source code W IEM1092I Correct the THE TASKS, EVENTS OR LABELS CONTAINED IN STRUCTURE zzzz DECLARED IN STATEMENT NUMBER xxx MAY LOSE THEIR VALIDITY IF USED IN A RECORD I/O STATEMENT. THE DATA CHARACTERISTICS OF zzzz DECLARED IN STATEMENT NUMBER xxx DO NOT MATCH THOSE OF THE DEFINING BASE. Explanation: For valid use of the DEFINED attribute, both the defined item and the base must be of the same defining class. System Action: The mapping of the aggregate is undefined,. and will cause errors on execution. S IEM1090I THE DEFINING OF zzzz DECLARED IN STATEMENT NUMBER xxx INVOLVES DATA NOT ALLOWED FOR STRING CLASS OVERLAY DEFINING. Explanation: The programmer's use of the DEFINED attribute contravenes the language rules concerned with the permitted data types and dimensionality of base and defined item. Explanation: The message is generated when an array or structure size exceeds 2 23 -1 User code the User Response: Refer to the PL/I Reference Manual "The DEFINED Attribute" - and correct the error. T IEMll06I THE DIMENSIONALITY OF zzzz DECLARED IN STATEMENT NUMBER xxx IS NOT THE SAME AS THAT OF THE DEFINING BASE. Explanation: With the exception of the case of string class d'efining, if either the base or the defined item are arrays., then both the base and the defined item must be arrays with the same dimensionality. system Action: Compilation is aborted after examining other uses of the DEFINED attribute Appendix G: Diagnostic Messages 223 User Response: Refer to the PLII Reference Manual "The DEFINED Attribute" - and correct the error. PL/I Reference Manual - "The DEFINED Attribute" and correct the error. E IEM1111I T IEM1107I THE DEFINING OF zzzz DECLARED IN STATEMENT NUMBER xxx ILLEGALLY INVOLVES VARYING STRINGS. Explanation: In use of the DEFINED attribute. neither the base nor the defined item may involve strings declared VARYING. Explanation: In the case of string class overlay defining where the defined item or the base is a structure l then all the elements of the structure must be data of the same string defining class. system Action: Compilation is aborted after examining other uses of the DEFINED attribute. E IEM1108I User Response: Refer to the PL/I Reference Manual "The DEFINED Attribute" - and correct the error. System Action: Defined item mapped onto same storage as item defined on. Data and specification interrupts may occur at execution. THE DEFINING OF zzzz DECLARED IN STATEMENT NUMBER xxx ILLEGALLY INVOLVES DATA AGGREGATES THAT ARE NOT UNALIGNED. User Response: Refer to the PL/I Reference Manual "The DEFINED Attribute" - and correct the error. Explanation: In the case of string class overlay defining where either or both the base and the defined item are aggregates, then the aggregates must have the PACKED attribute. T IEM1110I T IEM1112I THE DEFINING OF zzzz DECLARED IN STATEMENT NUMBER xxx ILLEGALLY INVOLVES THE POS ATTRIBUTE. Explanation: The POSITION attribute may only be declared for data of the string class which is overlay defined System Action: Defined item mapped onto same storage as item defined on. Data and specification interrupts may occur at execution. System Action: terminated User Response: Refer to the PL/I Reference Manual - "The DEFINED Attribute" - and correct the error. User Response: Refer to the PL/I Reference Manual "The DEFINED Attribute" - and correct the error. THE DEFINING BASE OF zzzz DECLARED IN STATEMENT NUMBER xxx IS SHORTER THAN THE DEFINED ITEM. Explanation: In the case of string class overlay defining, the defined item must occupy a subset of the base storage. In the case of correspondence defining, the length of each defined element must not be greater than the length of each base element. System Action: Compilation is aborted after examining other uses of the DEFINED attribute User Response: 224 THE DEFINING OF zzzz DECLARED IN STATEMENT NUMBER xxx INVOLVES A STRUCTURE HAVING ELEMENTS NOT ALL OF THE SAME DEFINING CLASS. Refer to the E IEM1113I THE STRUCTURE Compilation DESCRIPTION is OF zzzz DECLARED IN STATEMENT NUMBER xxx DOES NOT MATCH THAT OF THE DEFINING BASE. Explanation: Where a structure or an array of structures is defined on a structure or an array of structures, and it is not string class overlay defining, then the two structure descriptions must be identical. System Action: Defined item mapped onto same storage as item defined on. Data and specification interrupts may occur at execution. User Response: PL/I Reference Refer to the Manual - "The DEFINED Attribute" rect the error. W IEMll141 and Explanation: A complex expression has been use1 to initialize a STATIC string. This is a feature of PL/I not supported by this version of the compiler. See Appendix H of this publication for details. cor- IF THE BASE OF zzzz DECLARED IN STATEMENT NUMBER xxx IS ALLOCATED WITH THE DECLARED EXTENTS" THE DEFINING WILL BE IN ERROR. System Action: The string is initialized to nUll. ExElanation: In the case of string class overlay defining, the defined item must occupy a subset of the base storage. If the base is of CONTROLLED storage class, its extents are not finally resolved until execution time. User Response: Amend source code. The restriction can be overcome by using an assignment statement instead of the INITIAL attribute. further S IEMl1231 INITIAL VALUE FOR STATIC DATA ITEM zzzz IN nnnn IS NOT A CONSTANT. INITIALIZATION TERMINATED. User Response: Check that when the base is allocated it is of adequate size to accommodate the defined item User Response: Use a constant in the INITIAL string. System action Action: No S IEMl1251 E IEMll151 THE DEFINING BASE OF zzzz DECLARED IN STATEMENT NUMBER xxx IS AN ARRAY FORMAL PARAMETER. IF THE MATCHING ARGUMENT IS AN ELEMENT OF AN ARRAY OF STRUCTURES OR A CROSS SECTION OF AN ARRAY, THE DEFINING WILL BE IN ERROR. Explanation: Iteration factors are converted by the compiler to REAL FIXED BINARY with a default precision of 15,0. The iteration factor referred to in the message has a value greater than 2~5~ and therefore exceeds the defaul t precision. Explanation: The base for string class overlay defining must occupy contiguous storage system Action: continues User Response: of arguments S IEMl1201 Comments Check System Action: The iteration factor is replaced by zero and User Response: Amend code so that iteration does not exceed 2~5_ validity COMPILER ERROR. INVALID SIGN FOUND IN INITIAL VALUE LIST FOR zzzz IN STATEMENT NUMBER xxx. TREATED AS PLUS. T IEM12001 User Response: Save relevant data. Call your local IBM representative. S IEM11211 S IEMl1221 UNSUPPORTED FEATURE. AN EXPRESSION HAS BEEN USED TO INITIALIZE STATIC STRING zzzz IN STATEMENT NUMBER xxx. STRING INITIALIZED TO NULL. source factor COMPILER EFROR. ILLEGAL TRIPLE IN TEXT. CURRENT STATEMENT NUMBER xxx Explanation: Phase LA is out of step in scanning text System Action: Recovery impossible. Compilation is terminated .• COMPILER ERROR. INVALID MARKER FOUND IN INITIAL VALUE LIST FOR zzzz IN STATEMENT NUMBER xxx. INITIAL VALUE LIST TRUNCATED. User Response: Save relevant data. Call your local IBM representati ve .. ITERATION FACTOR USED IN INITIALIZATION OF STATIC ARRAY zzzz IN STATEMENT NUMBER xxx IS TOO LARGE. REPLACED BY ZERO. User Response: Save relevant data. Call your local IBM representa ti vee T IEM15691 IMPLEMENTATION RESTRICTION. SOURCE PROGRAM TOO LARGE. Explanation: The number of symbolic register names generated by the code generation section of the compiler has Appendix G: Diagnostic Messages 225 exceeded allowed the system Action: terminated maximum number label variable, or label constant has been used in an 1n1tial value" TO or BY clause. Compilation is System Action: Ignore the erroneous expression and use a fixed binary temporary User Response: Programmer should break down the compilation into smaller modules T IEM1570I COMPILER ERROR. INVALID TRIPLE FOLLOWING WHILE PRIME TRIPLE. S IEM1575I Explanation: Input to phase LG of compiler is erroneous. A WHILE' triple is not followed by CV' or compiler label. system Action: terminated Compilation Explanation: An invali? argument" such as an express10n or function" has been used in a pseudo-variable. is User Response: Save relevant data.. Call your local IBM representat ive,. T IEM1571I IMPLEMENTATION RESTRICTION. SOURCE PROGRAM TOO LARGE. System Action: Assigns invalid argument to binary temporary, and uses the latter as argument. W IEM1588I Explanation: No more core is available for the stack of nested DO statements (both in source language and those generated internally for array assignments etc.) system Action: terminated Explanation: If the VARYING strir.g is declared BASED, the ADDR result is invalid T IEM1600I ILLE~AL USE OF ARRAY OR STRUCTURE VARIABLE IN DO STATEMENT NUMBER xxx None User Response: program Correct INVALID LOOP CONTROL EXPRESSION OR CONTROL VARIABLE SUBSCRIPT IN STATEMENT NUMBER xxx REPLACED BY FIXED BINARY TEMPORARY. Explanation: Either something other than an arithmetic or string datum has been used as a subscript in the control variable, or something other than an arithmetic or string datum, source COMPILER ERROR. ILLEGAL ABSOLUTE REGISTER NUMBER. STATEMEN T NUMBER xxx system Action: Compilation is terminated and error messages printed. system Action: Generates an error stop at execution time 226 System Action: Explanation: Compiler error. Fixed binary arithmetic uses an unassigned general register number greater than 15, or floating arithmetic uses a floating register greater than 6. Explanation: A non-scalar variable has been used as (1) the control variable, or (2) a control variable subscript, or (3) a loop limit or increment value. S IEM1574I VARYING STRING HAS BEEN USED AS AN ARGUMENT TO ADDR FUNCTION IN STATEMENT NUMBER xxx Compilation is User Response: Simplify nesting so as to reduce number of levels. S IEM1572I DO LOOP CONTROL PSEUDO-VARIABLE IN STATEMENT NUMBER xxx HAS AN INVALID ARGUMEN~. BINARY INTEGER TEMPORARY ASSUMED. User Response: Save relevant data. Call your local IBM representative. T IEM1601I RESTRICTION. STATEMENT NUMBER xxx REQUIRES MORE THAN 200 INTERMEDIATE RESULT DESCRIPTIONS. IM~LEMENTATION Explanation: Compiler limitation. The temporary result stack, which holds 200 items, is full. System Action: Compilation is terminated and error messages printed S IEM1605I User Response: This error should only occur in very large statements. Divide the statement into two smaller statements,. T IEM1602I Explanation: Error in source program. When a fixed decimal variable is corrected to fixed binary. the magnitude of its scale factor is multiplied by 3.31. If the original scale factor is >38 or <-38, then the fixed binary scale factor would be outside the range +121 to -128. COMPILER ERROR. INSUFFICIENT NUMBER OF TEMPORARY RESULT DESCRIPTIONS. STATEMENT NUMBER xxx Explanation: compiler error. A temporary result is required but the temporary result stack is empty. This can happen if the triples are out of order or if extra triples have been inserted. System Action: The fixed binary scale factor is set to +127 or -1284 Processing continues,. User Response: The data in the expression must be re-declared with more suitable scale factors. system Action: Compilation is aborted and error messages printed T IEM16061 User Response: Save relevant data. Call your local IBM representative. T IEM16031 system Action: Compilation is terminated and error messages printed Explanation: Compiler error in evaluation phase. Error 1n control blocks for floating registers. express~on User Response: Save relevant data. Call your local IBM representative .. system Action: Compilation is terminated and error messages printed S IEM16011 T IEM16041 COMPILER ERROR. SECOND OPERAND FOR RS OR SS INSTRUCTION IS IN A REGISTER. STATEMENT NUMBER xxx Explanation: Compiler error in expression evaluation phase .• Attempt to generate an RS or SS type pseudo-code instruction using a register as the 2nd operand. system Action: Compilation is terminated and error messages printed. User Response: Save relevant data. Call your local IBM representative .. COMPILER ERROR. FUNCTION NOT FOLLOWED BY RESULT DESCRIPTION. STATEMENT NUMBER xxx Explanation: Compiler error. A function is not followed by TMPD or LEFT triples giving the result type. COMPILER ERROR. COUNT OF FREE FLOATING REGISTERS IS WRONG. STATEMENT NUMBER xxx User Response: Save relevant data. Call your local IBM representati ve,. IN STATEMENT NUMBER xxx FIXED DECIMAL VARIABLE CANNOT BE CORRECTLY CONVERTED TO BINARY DUE TO SIZE OF SCALE FACTOR. LABEL" EVENT, FILE" OR TASK ITEM zzzz IN STATEMENT NUMBER xxx IS USED IN AN EXPRESSION WHICH IS ILLEGAL. Explanation: Error in source program,. A label, event, file, or task datum cannot be used in an expression. ~lternatively, this can be a compiler error when an unrecognizable dictionary entry is used in an expression,. System Action: Substitute a fixed binary (31,0) data item (if the illegal item occurs in an arithmetic expression) or a null bit string (if it occurs in a string expression). Processing is continued. User Response: If error source program, correct it. Appendix G: Diagnostic Messages in 227 E IEM1608I resul t is the sum of the operand lengths. LT. LE" GE, OR GT COMPARISON OPERATOR ILLEGALLY USED IN STATEMENT NUMBER xxx WITH COMPLEX OPERANDS. REPLACED WITH EQUALS OPERA'roR. System Action: Compilation continues with string result length truncated to 32767 Explanation: Error in source program. The only legal comparison between complex operands is '= •. User Response: must be used W IEM1612I System Action: The operator is replaced with '=" and processing continues User Response: Correct source program using either the ABS function or possibly the REAL and IMAG functions. T IEM1609I COMPILER ERROR. ILLEGAL DICTIONARY REFERENCE X" 00 ... • STATEMENT NUMBER xxx System Action: The first 50 areas of work space are released. The remainder may not be released until the end of the block. Compilation continues and execution is valid. Compilation System Action: terminated and error messages printed User Response: Divide the string expression into several sub-expressions User Response: Save relevant data. Call your local IBM representative. S IEM1613I COMPILER ERROR IN PHASE LW AT STATEMENT NUMBER x~x. INSUFFICIENT NUMBER OF TEMPORARY RESULT DESCRIPTIONS. Explanation: program Illegal source System Action: Severe error message and object program branch. Compilation continues, assuming scalar of same type if array~ or fixed binary (31,0) type if structure. System Action: Compilation is terminated and error messages printed User Response: Insert DO blocks for array* or break down structure into its components. IMPLEMENTATION RESTRICTION. A STRING RESULT LONGER THAN 32767 IS PRODUCED BY CONCATENATE IN STATEMENT NUMBER xxx. STRING TRUNCATED TO LENGTH 32767. Explanation: Maximum string length for this implementation is 32767. This may be exceeded during concatenation, because the length of the intermediate 228 ILLEGAL USE OF ARRAY OR STRUCTURE VARIABLE IN STATEMENT NUMBER xxx Explanation: Compiler error. A temporary result is required but the temporary result stack is empty. This can happen if the triples are out of order or if extra triples have been inserted. User Response: Save relevant data,. Call your local IBM representative. E IEM1611I IMPLEMENTATION RESTRICTION IN STATEMENT NUMBER xxx. INTERMEDIATE WORK SPACE IS OBTAINED MORE THAN 50 TIMES IN A STRING SOME WORK SPACE EXPRESSION. WI LL NOT BE RELEASED UNTIL THE END OF THE BLOCK. Explanation: The intermediate work space is required each time a function returns a string result or each time a lib rary module is called Explanation: Compiler error. The symbolic dictionary reference is less than 256. T IEM1610I Shorter strings W IEM1614I IMPLEMENTATION RESTRICTION. A VARYING STRING RESULT LONGER THAN 32767 MAY BE PRODUCED BY CONCATENATE IN STATEMENT NUMBER xxx. STRING TRUNCATED TO LENGTH 32767. Explanation: The sum of the maximum lengths of two strings in a concatenation operation exceeds the implementation restriction of 32767. Since one or both of the operands is a VARYING string, it is not known at compile-time whether the restriction will be exceeded at execution time. system Action: The assignment is deleted from the text. S IEM16201 System Action: Compilation continues with string result maximum length truncated to 32767. Explanation: The pseudovariable 'IMAG' is meaningful only if its argument is of type complex. User Response: Shorter strings must be used if the sum of the execution-time current lengths will ever exceed 327674 E IEM16151 SECOND ARGUMENT IN THE SUBSTR FUNCTION IN STATEMENT NUMBER xxx IS ZERO, WHICH IS INVALID. ZERO HAS BEEN REPLACED BY ONE. E IEM16161 SECOND ARGUMENT IN THE SUBSTR PSEUDO-VARIABLE IN STATEMENT NUMBER xxx IS ZERO" WHICH IS INVALID. ZERO HAS BEEN REPLACED BY ONE .• System Action: A fixed binary temporary target is provided for the assignment or input data list iter; and the pseudovariable is ignored S IEM16211 T IEM16171 Explanation: An illegal return of control has been made by the SCAN routine which supports the code generation phases. Compilation System Action: A temporary whose type is legal in the context is used to replace the erroneous argument and the latter is removed from the text is S IEM16221 User Response: Save relevant data. Call your local IBM representative. S IEM16181 IN STATEMENT NUMBER xxx INCORRECTLY SPECIFIED.. REPLACED BY FIXED BINARY TEMPORARY. PSEUDO-VARI~BLE system Action: Ignores the pseudo-variable and uses a fixed binary temporary instead. RIGHT HAND SIDE OF STATEMENT NUMBER xxx CANNOT BE ASSIGNED TO A PSEUDO-VARIABLE. ASSIGNMENT IGNORED. Explanation: The expression on the right-hand side of the specified statement cannot be assigned to a pseudo-variable" i.e. it is not an arithmetic or string datum. FIRST ARGUMENT OF PSEUDOVARIABLE SUBSTR IN STATEMENT NUMBER xxx IS NOT A STRING VARIABLE. ARGUMENT HAS BEEN CONVERTED TO STRING TEMPORARY AND THE ASSIGNMENT MADE THERETO. Explanation: SUBSTR pseudovariable cannot have a first argument which is not a string variable,. Explanation: A pseudo-variable in the given source statement has been incorrectly specif ied" e.g. has an incorrect number of arguments. S IEM16191 ILLEGAL PSEUDO-VARIABLE ARGUMENT IN STATEMENT NUMBER xxx REPLACED BY BINARY TEMPORARY. Explanation: A pseudo-variable in the specified statement has an illegal argument, i.e. one whose data type is not permissible in that context. COMPILER ERROR. ILLEGAL RETURN FROM SCAN ROUTINE. STATEMENT NUMBER xxx System Action: terminated. :'IMAG' IN STATEMENT NUMBER xxx HAS REAL ARGUMENT. REPLACED BY ASSIGNMENT TO TEMPORARY FIXED BINARY INTEGER. system Action: code is compiled to assign to a string temporary. The original argument remains unchanged. T IEM16231 IMPLEMENTATION RESTRICTION. SOURCE PROGRAM TOO LARGE. Explanation: The number of symbolic register names generated by the code generation section of the compiler has exceeded the maximum number allowed System Action: terminated User Response: Compilation is Programmer Appendix G: Diagnostic Messages 229 W IEM1625I should break down the compilation into smaller modules System Action: to zero PSEUDO-VARIABLE REAL IN STATEMENT NUMBER xxx DOES NOT HAVE COMPLEX ARGUMENT. ARGUMENT HAS BEEN TREATED AS HAVING ZERO IMAGINARY PART. User Response: Check scale and precision of the first argument in ROUND function Result is set S IEM16331 ILLEGAL NEGATIVE SECOND ARGUMENT IS BEING PASSED TO THE PSEUDO-VARIABLE SUBSTR IN STATEMENT NUMBER xxx. AN EXECUTION ERROR WILL RESULT. system Action: code is generated to perform assignment to the specified REAL argument S IEM1626I ILLEGAL NEGATIVE SECOND ARGUMENT IS BEING PASSED TO THE FUNCTION SUBSTR IN STATEMENT NUMBER xxx. AN EXECUTION ERROR WILL RESULT. S IEM16341 ILLEGAL NEGATIVE THIRD ARGUMENT IS BEING PASSED TO THE PSEUDOVARIABLE SUBSTR IN STATEMENT NUMBER xxx. AN EXECUTION ERROR WILL RESULT. S IEM1627I ILLEGAL NEGATIVE THIRD ARGUMENT IS BEING PASSED TO THE FUNCTION SUBSTR IN STATEMENT NUMBER xxx. AN EXECUTION ERROR WILL RESULT. S IEM16351 S IEM16281 THE SUBSTRING SPECIFIED BY THE SECOND AND THIRD ARGUMENTS TO THE FUNCTION SUBSTR IN STATEMENT NUMBER xxx DOES NOT LIE WITHIN THE FIRST ARGUMENT. AN EXECUTION ERROR WILL RESULT. THE SUBSTRING SPECIFIED BY THE SECOND AND THIRD ARGUMENTS TO THE PSEUDO-VARIABLE SUBSTR IN STATEMENT NUMBER xxx DOES NOT LIE WITHIN THE ST~ING zzzz. AN EXECUTION ERROR WILL RESULT. S IEM16361 THE SECOND ARGUMENT TO THE FUNCTION SUBSTR IN STATEMENT NUMBER xxx IS GREATER THAN THE LENGTH OF THE FIRST ARGUMENT. AN EXECUTION ERROR WILL RESULT. THE SECOND ARGUMENT TO THE PSEUDO-VARIABLE SUBSTR IN STATEMENT NUMBER xxx IS GREATER THAN THE LENGTH OF THE STRING zzzz. AN EXECUTION ERROR WILL RESULT. S IEM16371 THE THIRD ARGUMENT TO THE FUNCTION SUBSTR IN STATEMENT NUMBER xxx IS GREATER THAN THE LENGTH OF THE FIRST ARGUMENT. AN EXECUTION ERROR WILL RESULT. S IEM16381 THE THIRD ARGUMENT TO THE PSEUDO-VARIABLE SUBSTR IN STATEMENT NUMBER xxx IS GREATER THAN THE LENGTH OF THE STRING zzzz. AN EXECUTION ERROR WILL RESULT. T IEM16391 COMPILER ERROR. INCORRECT INPUT TO SUBROUTINE 6 IN MODULE IEIvlMF IN STATEMENT NUMBER xxx. S IEM1629I T IEM16301 COMPILER ERROR IN CEIL/FLOOR/TRUNC IN-LINE FUNCTION IN STATEMENT NUMBER xxx System Action: terminated Compilation is User Response: Save relevant data.. Call your local IBM representative .. T IEM1631I COMPILER FUNCTION xxx ERROR IN MOD IN-LINE IN STATEMENT NUMBER System Action: terminated System Action: terminated THE INVOCATION 0 F THE ROUND FUNCTION IN STATEMENT NUMBER xxx WILL ALWAYS GIVE A ZERO RESULT. Explanation: (p - q + r) is zero or negative, where p = precision, q = scale factor, and r = rounding position. 230 is Compilation is User Response: Save relevant data. Call your local IBM representative. W IEM16321 Compilation User Response: Save relevant data and call your local IBM representative. T IEM16401 THE PARAMETER DESCRIPTION RELATING TO THE PASSING OF THE GENERIC ENTRY NAME zzzz DOES NOT MATCH ANY OF THE FAMILY MEMBERS. system Action: pilation Terminates com- User Response: Provide correct parameter description W IEM1641I THE PARAMETER DESCRIPTION RELATING TO THE PASSING OF THE GENERIC ENTRY NAME zzzz DESCRIBES THE ENTRY NAME'S RESULT TYPE RATHER THAN ARGUMENT TYPE. IF POSSIBLE, GENERIC SELECTION WILL BE MADE ON THE BASIS OF THIS RESULT TYPE. T IEMl6481 Explanation: Incorrect handling of text by previous phase. System Action: pilation User Response: Provide fuller parameter description T IEM16421 THE PARAMETER DESCRIPTION RELATING TO THE PASSING OF THE GENERIC ENTRY NAME zzzz IS NOT SUFFICIENT FOR THE PURPOSES OF GENERIC SELECTION. System Action: pilation T IEM16431 COMPILER ERROR. INCORRECT FORMATION OF ARGUMENT LIST ASSOCIATED WITH ENTRY NAME zzzz IN STATEMENT NUMBER xxx Explanation: Incorrect handling of text by previous phase System Action: pila tion Terminates com- User Response: Save relevant data. Call your local IBM representative. Terminates com- COMPILER ERROR. INCORRECT HANDLING OF ARGUMENT LIST ASSOCIATED WITH ENTRY NAME zzzz IN STATEMENT NUMBER xxx User Response: Save relevant data. Call your local IBM representative .. Explanation: Incorrect handling of text by previous phase System Action: pilation T IEM16441 T IEM16491 fuller COMPILER ERROR. THE PARAMETER DESCRIPTION RELATING TO THE PASSING OF THE GENERIC ENTRY NAr~ zzzz IS INCORRECTLY FORMED IN THE DICTIONARY. Terminates com- User Response: Save relevant data. Call your local IBM representative. Terminates com- User Response: Provide parameter description COMPILER ERROR. FUNCTION REFERENCE MISSING FROM TEXT IN STATEMENT NUMBER xxx COMPILER FAMILIES NAME zzzz FORMED IN T IEM16501 System Action: pila tion ERROR. THE GENERIC ASSOCIATED WITH ENTRY HAVE BEEN INCORRECTLY THE DICTIONARY. The dictionary entry for one or more of the generic families is not a recognizable entry type. Terminates com- User Response: Save relevant data. Call your local IBM representa tive. E~planation: system Action: pilation T IEM16511 Terminates comExplanation: Incorrect handling of text by previous phase User Response: Save relevant data. Call your local IBM representative. T IEM16451 COMPILER ERROR. ARGUMENT REFERENCE MISSING FROM ARGUMENT LIST ASSOCIATED WITH ENTRY NAME zzzz IN STATEMENT NUMBER xxx THE PARAMETER DESCRIPTION RELATING TO THE PASSING OF THE GENERIC ENTRY NAME zzzz RESULTS IN MORE THAN ONE POSSIBLE FAMILY MEMBER SELECTION. System Action: pilation Terminates com- User Response: Save relevant data. Call your local IBM represent rt if the statement is executed System result. COMPILER ERROR IN NUMBER xxx PHASE OE. system Action: terminated error in bad Compilation INVALID ITEM IN FREE NUMBER xxx S IEM180iI is AN ERROR HAS OCCURRED IN THE CONVERSION TO FLOATING-POINT OF THE STERLING CONSTANT WHICH HAS DECIMAL PENCE FORM yyyy. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. STATEMENT S IEM1802I System Action: Error condition and message given at object time ASSIGNMENT OF AN ILLEGAL LABEL CONSTANT IN STATEMENT NUMBER xxx. S IEM1803I AN ERROR HAS OCCURRED IN THE CONVERSION TO FIXED BINARY OF THE STERLING CONSTANT WHICH HAS DECIMAL PENCE FORM yyyy. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. User Response: Change the constant and check its use in the given statement and elsewhere. system Action: Accepts label constant as if in value list and continues compilation~ S IEM1804I CONVERSION OF NULL VALUES IN POINTER/OFFSET ASSIGNMENTS IS INVALID. NULLO HAS BEEN REPLACED BY NULL, OR NULL BY NULLO, IN STATEMENT NUMBER xxx AN ERROR HAS OCCURRED wHEN CONVERTING THE CONSTANT yyyy TO FIXED BINARY. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. User Response: Change the constant and check its use in the given statement and elsewhere. Explanation: The label constant does not appear in the value list in the DECLARE statement for the label variable. 234 Truncates User Response: Change the constant and check its use in the given statement and elsewhere. Explanation: Variable in FREE statement is either not CONTROLLED or not at level 1 W IEM1797I Action: User Response: Change the constant and check its use in the given statement and elsewhere. STATEMENT User Response: Save relevant data. Call your local IBM representative. E IEM1796I assignment Explanation: Illegal assignment or conversion in source statement, e.g. label to arithmetic,. Explanation: Compiler caused by input text format S IEM1795I The AN ERROR HAS OCCURRED WHEN CONVERTING THE CONSTANT yyyy TO FIXED DECIMAL. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. system result .. Action: Truncates S IEM18i0I User Response: Change the constant and check its use in the given statement and elsewhere. S IEM18051 AN ERROR HAS OCCURRED IN THE CONVERSION TO FIXED DECIMAL OF THE STERLING CONSTANT WHICH HAS DECIMAL PENCE FORM yyyy. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USE OF THIS CONSTANT. User Re~Q~: Change the constant and check its use in the given statement and elsewhere. S IEM181i1 User Response: Change the constant and check its use in the given statement and elsewhere. S IEM18061 AN ERROR HAS OCCURRED WHEN CONVERTING THE CONSTANT yyyy TO DECIMAL NUMERIC FIELD. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. AN ERROR HAS OCCURRED IN THE CONVERSION TO DECIMAL NUMERIC FIELD OF THE STERLING CONSTANT WHICH HAS DECIMAL PENCE FORM yyyy. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. S IEM1812I AN ERROR HAS OCCURRED WHEN CONVERTING THE CONSTANT yyyy TO STERLING NUMERIC FIELD. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. S IEM1813I AN ERROR HAS OCCURRED IN THE CONVERSION TO STERLING NUMERIC FIELD OF THE STERLING CONSTANT WHICH HAS DECIMAL PENCE FORM yyyy. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. User Response: Change the constant and check its use in the given statement and elsewhere. AN ERROR HAS OCCURRED IN THE CONVERSION TO CHARACTER STRING OF THE STERLING CONSTANT WHICH HAS DECIMAL PENCE FORM yyyy. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. User Response: Change the constant and check its use in the given statement and elsewhere. S IEM18141 User Response: Change the constant and check its use in the given statement and elsewhere. S IEM1809I AN ERROR HAS OCCURRED WHEN CONVERTING THE CONSTANT yyyy TO CHARACTER STRING. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. User Response: Change the constant and check its use in the given statement and elsewhere. User Esponse: Change the constant and check its use in the given statement and elsewhere. S IEM18081 AN ERROR HAS OCCURRED IN THE CONVERSION TO BIT STRING OF THE STERLING CONSTANT WHICH HAS DECIMAL PENCE FORM yyyy. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. User Response: Change the constant and check its use in the given statement and elsewhere. User Res~: Change the constant and check its use in the given statement and elsewhere. S IEM18071 AN ERROR HAS OCCURRED WHEN CONVERTING THE CONSTANT yyyy TO BIT STRING. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. AN ERROR HAS OCCURRED IN THE CONVERSION OF THE CONSTANT yyyy TO PICTURED CHARACTER STRING. THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. User Response: Change the constant and check its use in the given statement and elsewhere. S IEM18151 AN ERROR HAS OCCURRED IN THE CONVERSION TO PICTURED CHARACTER STRING OF THE STERLING CONSTANT WHICH HAS DECIMAL PENCE FORM yyyy • THE ERROR WAS DETECTED IN STATEMENT NUMBER xxx BUT CHECK ALL SIMILAR USES OF THIS CONSTANT. Appendix G: Diagnostic Messages 235 S IEM18161 User Response: Change the constant and check its use in the given statement and elsewhere. S IEM18271 INVALID ARGUMENT TO STATEMENT NUMBER xxx. MENT IGNORED. zzzz USED IN FILE OPTION IN STATEMENT NUMBER xxx IS NOT A FILE. OPTION HAS BEEN IGNORED. EXECUTION ERROR WILL RESULT T IEM18281 COMPILER ERROR. INCORRECT NUMBER OF TMPDS FOLLOWING ZERO OPERAND IN STATEMENT NUMBER xxx System Action: terminated Explanation: Dictionary reference of file triple was not file constant or file parameter code. System Action: but continues ment. E IEM18171 S IEM18181 Ignores option" to scan stateS IEM18291 KEYTO option must character string S IEM18191 System Action: The number of event names in the list is assumed as the event count. T IEM18301 zzzz USED IN THE IGNORE OPTION IN STATEMENT NUMBER xxx I S NOT A SCALAR. OPTION IGNORED. T IEM18231 system Action: terminated Correct IGNORE DETECTED COMPILER ERROR PHASE NJ/NK. Compilation is User Response: Save relevant data. Call your local IBM representative. IN Explanation: NJ/NK found some unexpected input. Register 9 in dump will indicate cause of error. E IEM18321 INVALID PAGE OPTION IGNORED STATEMENT NUMBER xxx E IEM18331 INVALID LINE OPTION IGNORED IN STATEMENT NUMBER xxx system Action: pilation IN E IEM18341 MULTIPLE COPY OPTIONS SPECIFIED IN STATEMENT NUMBER xxx. THE FIRST ONE IS USED. Terminates com- User Response: Save relevant data. Call your local IBM representative. S IEM18241 COMPILER ERROR. INCORRECT INPUT TO PHASE NG IN WAIT STATEMENT NUMBER xxx,. Explanation: The compiler has encountered incorrect input to phase NG and cannot continue,. System Action: Ignores option but continues scan of statement User Response: variable INVALID SCALAR EXPRESSION OPTION IN WAIT STATEMENT NUMBER xxx. MAXIMUM EVENT COUNT GIVEN. Explanation: The optional scalar expression in the WAIT statement cannot be converted to a n integer. zzzz USED IN KEY/KEYFROM OPTION IN STATEMENT NUMBER xxx IS NOT A SCALAR. OPTION IGNORED. System Action: Ignores option but continues scan of statement Compilation is User Response: Save relevant data.. Call your local IBM representa ti ve,. INVALID KEYTO OPTION zzzz IGNORED IN STATEMENT NUMBER xxx Explanation: be scalar variable. DELAY STATE- system Action: The option only is used first OPTIONS IN OPEN STATEMENT NUMBER xxx ARE IN CONFLICT WITH PAGESIZE AND/OR LlNESIZE. E IEM18351 INVALID FILE OPTION IGNORED IN STATEMENT NUMBER xxx E IEM18251 INVALID REPLY OPTION IGNORED IN STATEMENT NUMBER xxx E IEM18361 INVALID STRING OPTION IGNORED IN STATEMENT NUMBER xxx S IEM18261 INVALID MESSAGE STATEMENT NUMBER MENT IGNORED. S IEM18371 NO FILE OR STRING SPECIFIED IN STATEMENT NUMBER xxx. STATEMENT IGNORED. 236 IN DISPLAY xxx. STATE- Explanation: No FILE or STRING given in GET/PUT statement E IEM18381 INVALID TITLE OPTION IGNORED IN STATEMENT NUMBER xxx E IEM18391 INVALID IDENT OPTION IGNORED IN STATEMENT NUMBER xxx E IEM18401 INVALID LINE SIZE OPTION IGNORED IN STATEMENT NUMBER xxx E IEM18411 INVALID PAGESIZE OPTION IGNORED IN STATEMENT NUMBER xxx S IEM18431 NO FILE SPECIFIED IN OPEN/CLOSE STATEMENT NUMBER xxx. ANY OPTIONS ARE IGNORED. T IEM18441 COMPILER ERROR. INCORRECT NUMBER OF TMPDS FOLLOWING ZERO OPERAND IN STATEMENT NUMBER xxx system Action: aborted Compilation DELETED FROM THE I/O DATA IN STATEMENT NUMBER xxx S IEM18621 AN EXPRESSION OR FUNCTION INVOCATION IS AN ILLEGAL DATA ITEM AND HAS BEEN DELETED FROM THE DATA-DIRECTED I/O STATEMENT NUMBER xxx. E IEM18701 THE FORMAT LIST IN STATEMENT NUMBER xxx CONTAINS NO DATA FORMAT ITEMS AND WILL BE EXECUTED ONCE IF THE STATEMENT IS INVOKED. system Action: At execution time, on finding no data format items" control passes out of the statement at the end of the format list. S IEM18111 IN STATEMENT NUMBER xxx THE FORMAT LIST CONTAINS AN E OR F FORMAT ITEM WITH AN ILLEGAL SPECIFICATION. THE FORMAT ITEM HAS BEEN DELETED. W IEM18121 IN STATEMENT NUMBER xxx AN E FORMAT ITEM HAS A FIELD WIDTH WHICH WOULD NOT PERMIT PRINTING OF A MINUS SIGN. S IEM18131 IMPLEMENTATION RESTRICTION. IN STATEMENT NUMBER xxx AN A, B OR CONTROL FORMAT ITEM SPECIFIES AN EXCESSIVE LENGTH WHICH HAS BEEN REPLl\.CED BY THE MAXIMUM OF 32.,767. E IEM18141 is User Response: Save relevant data. Call your local IBM representative .• LIST E IEM18451 MULTIPLE DATA SPECIFICl\.TIONS IGNORED IN STATEMENT NUMBER xxx E IEM18461 INVl\.LID SKIP OPTION IGNORED STATEMENT NUMBER xxx S IEM18471 NO DATA SPECIFICATIONS GIVEN FOR GET STATEMENT NUMBER xxx. STATEMENT DELETED. S IEM18481 NO DATA SPECIFICATIONS OR PRINT OPTIONS GIVEN FOR PUT STATEMENT NUMBER xxx,. STl\.TEMENT DELETED. IN STATEMENT NUMBER xxx AN INPUT STATEMENT CONTAINS A FORMAT ITEM WHICH MAY BE USED ONLY IN OUTPUT STATEMENTS. W IEM18491 THE USE OF THE BUILT-IN FUNCTION NULL IN STATEMENT NUMBER xxx IS INVALID; NULLO HAS BEEN SUBSTITUTED. CHECK ALL SIMILAR USES OF NULL. Explanation: PAGE, SKIP" LINE, COLUMN, and format items A and B with no width specification, may be used only for output. System NULLO Action: IN system Action: item deleted Substitute W IEM18751 W IEM18501 THE USE OF THE BUILT-IN FUNCTION NULLO IN STATEMENT NUMBER xxx IS INVALID; NULL HAS BEEN SUBSTITUTED. CHECK ALL SIMILl\.R USES OF NULLO. System Action: S IEM18601 S IEM18611 Substitute NULL Invalid format IN STATEMENT NUMBER xxx AN E FORMAT ITEM HAS AN ILLEGAL SPECIFICATION IF USED FOR AN OUTPUT DATA ITEM. Explanation: The specification violates the restriction that the field width w must be greater than s+n+2. THE ILLEGAL ITEM zzzz HAS BEEN DELETED FROM THE I/O DATA LIST IN STATEMENT NUMBER xxx system Action: There will an error at execution time. AN ILLEGAL TEMPORARY RESULT OR SUBSCRIPTED ELEMENT HAS' BEEN User Response: fication be Correct speci- l\.ppendix G: Diagnostic Messages 231 T IEM2304I COMPILER ERROR. DICTIONARY ENTRY zzzz UNRECOGNIZED IN STATIC CHAIN. System Action: terminated Explanation: Due to a compiler error. a dictionary entry with an unrecognized code byte has been found in the static chain. User Response: Save relevant data. Call your local IBM representative. T IEM2702I system Action: terminated T IEM2305I Compilation is COMPILER ERROR. DOPE VECTOR REQUESTED BY NON-STRING" NONSTRUCTURE MEMBER zzzz User Response: Save relevant data. Call your local IBM representative .• T IEM2703I T IEM2704I Compilation is COMPILER ERROR IN INPUT TO PHASE IEMRF, S'IATEMENT NUMBER xxx. 'USNG' ITEM DOES NOT HAVE ASSIGNED REGISTER. System Action: terminated Explanation: This message is generated when a number of automatic variables are mutually dependent. It is not then possible to allocate storage in order of dependency. Compilation is User Response: Save relevant data. Call your local IBM representative. S IEM2705I Compilation is User Response: Rewrite statement. eliminating mutual dependency,. COMPILER ERROR IN INPUT TO PHASE IEMRF, STATEMENT NUMBER xxx. DROPPED REGISTER NOT ACTIVE. Explanation: Register number in field in DROP item is not in register table nor in storage. COMPILER ERROR IN INPUT TO PHASE IEMRF, STATEMENT NUMBER xxx. SPECIAL ASSIGNED REGISTER IN FORMAT/DATA LIST CODE CANNOT BE FOUND. System Action: continues compilation. ignoring DROP. Execution is inhibited. system Action: termi nat.ed User Response: Save relevant data,. Call your local IBM representative. Compilation is User Response: Save relevant data. Call your local IBM representative. 238 is User Response: Save relevant data. Call your local IBM representative .. THE AUTOMATIC VARIABLES IN THE BLOCK HEADED BY STATEMENT NUMBER xxx ARE MUTUALLY DEPENDENT. STORAGE CANNOT BE ALLOCATED. system Action: terminated Compilation COMPILER ERROR IN INPUT TO PHASE IEMRF, STATEMENT NUMBER xxx. LINK REGISTER IN BALR IS NOT ASSIGNED. System Action: terminated Compilation is User Response: Save relevant data. Call your local IBM representative. T IEM2701I COMPILER ERROR IN INPUT TO PHASE IEMRF, STATEMENT NUMBER xxx. BCT WITHOUT DICTIONARY REFERENCE AS DESTINATION. System Action: terminated System Action: terminated T IEM2700I is User Response: Save relevant data. Call your local IBM representative .. Explanation: Due to a compiler error. the allocation of a dope vector has been requested for an item which should never require one. T IEM2352I Compilation COMPILER ERROR. PHASE STATEMENT NUMBER xxx. GREATER THAN 32K. IEMRF, PSTOR S IEM2706I COMPILER ERROR IN INPUT TO PHASE IEMRF, STATEMENT NUMBER xxx. NOT ALL REGISTERS IN 'DRPL' ITEM CAN BE FOUND. System Action: Ignores item and continues DRPL PHASE IEMRF, STATEMENT NUMBER xxx. MORE THAN ONE REGISTER PAIR REQUIRED IN AN INSTRUCTION. User Response: Save relevant data. Call your local IBM representative. S IEM27071 COMPILER ERROR IN INPUT TO PHASE IEMRF. STATEMENT NUMBER xxx,. Nor ALL SYMBOLIC REGISTERS DROPPED AT END OF PROCEDURE OR BEGIN BLOCK. Explanation: One or more symbolic registers have been used in the PROCEDURE or BEGIN block, but no corresponding DROP has occurred. System Action: terminated User Response: Save relevant data,. Call your local IBM representa ti ve,. S IEM27111 System Action: Inserts in listing at end of block: the register number. the offset from register 9 at which the register is stored~ and the words • ERROR STOP'. COMPILER ERROR IN INPUT TO PHASE IEMRF. STATEMENT NUMBER xxx. ASSIGNED REGISTER USED IN SOURCE FIELD IS NOT INITIALIZED. System Action: Drops the assigned register and continues compilation User Response: Save relevant data. Call your local IBM representati ve,. S IEM27121 Explanation: The assigned register should have a previous value (e,.g. X in AR X" Y or L Y, 10 (X) et c. ) " but none can be found. S IEM2816I is ILLEGAL ENVIRONMENT OPTION STATEMENT NUMBER xxx IN System Action: Remainder of environment attributes ignored. S IEM28171 COMPILER ERROR. INVALID ATTRIBUTE CODE IN STATEMENT NUMBER xxx Explanation: Register X in an instruction such as AR X, Y" or L Y,10eX). has not been set up previously. Explanation: An invalid attribute marker has been found in the dictionary entry corresponding to the file attributes in the statement specified System Action: Inserts register 12 and continues compilation. system Action: rest of the entry S IEM2818I COMPILER ERROR IN INPUT TO Ignores the User Response: Save relevant data. Call your local IBM representative. User Response: Save relevant data. Call your local IBM representative .. T IEM2710I Compilation User Response: Save relevant data,. Call your local IBM representative,. User Response: Save relevant data,. Call your local IBM representative. COMPILER ERROR IN INPUT TO PHASE IEMRF, STATEMENT NUMBER xxx. SYMBOLIC REGISTER SHOULD HAVE PREVIOUS VALUE" BUT HAS NOT. COMPILER ERROR IN INPUT TO PHASE IEMRF. STATEMENT NUMBER xxx. IPRM/IPRM' OR EPRM/EPRM' PAIRS ARE NOT MATCHED IN PREVIOUS STATEMENT. System Action: continued System Action: Register 13 is used instead of the correct number. and compilation is continued .. S IEM27091 COMPILER ERROR IN INPUT TO PHASE IEMRF. STATEMENT NUMBER xxx. ASSIGNED REGISTER IS STILL IN USE AT THE START OF A PROCEDURE. Explanation: Assigned register status should be zero at the start of each procedure. User Response: Save relevant data. Call your local IBM representative. S IEM27081 Compilation is CONFLICTING ATTRIBUTE IN STATEMENT NUMBER xxx IGNORED. Appendix G: Diagnostic Messages 239 Explanation: An attribute other than 'ENVIRONMENT' clashes with previously declared attributes in the specified statement system Action: attribute. S IEM2819I Ignores System S IEM2825I this system Action: Remainder of ENVIRONMENT attribute ignored ERRONEOUS USE OF COMMA IN ENVIRONMENT OPTION IN STATEMENT NUMBER xxx User Response: ONMENT option S IEM2826I System Action: Remainder of ENVIRONMENT attribute ignored System Action: No compile-time action, but execution will fail. User Response: Provide ENVIRONMENT attribute ILLEGAL CHARACTER IN KEYWORD IN ENVIRONMENT OPTION IN STATEMENT NUMBER xxx system Action: Remainder of ENVIRONMENT attribute ignored W IEM2827I A D COMPILER OPTION HAS BEEN DECLARED IN THE ENVIRONMENT LIST IN STATEMENT NUMBER xxx. IT HAS BEEN IGNORED. W IEM2828I ENVIRONMENT OPTIONS CLTASA AND CLT360 HAVE BOTH BEEN DECLARED IN STATEMENT NUMBER xxx. THE SECOND ONE LISTED WILL BE IGNORED. W IEM2829I IN STATEMENT NUMBER xxx THE PARAMETER SPECIFIED IN THE INDEXAREA OPTION IS GREATER THAN 32767 AND HAS BEEN IGNORED. FIELD TOO LARGE IN ENVIRONMENT OPTION IN STATEMENT NUMBER xxx Explanation: Field in item in ENVIRONMENT attribute too large System Action: Remainder of ENVIRONMENT attribute ignored S IEM2823I ERROR IN FORMAT OF ENVIRONMENT ATTRIBUTE IN STATEMENT NUMBER xxx Explanation: If the parameter is not specified or is outside the permitted range, data management uses as much main storage as is required for the master index. Explanation: Format of item in ENVIRONMENT attribute incorrect System Action: Remainder of ENVIRONMENT attribute ignored S IEM2824I CONFLI'CT BE'IWEEN ENVIRONMENT ATTRIBUTE AND OTHER ATTRIBUTES IN STATEMENT NUMBER xxx Explanation: An option in the ENVI RONMENT attribute clashes with either another ENVIRONMENT with a declared option or attribute. 240 ENVIR- comma Explanation: Invalid keyword in ENVIRONMENT attribute S IEM2822I Correct IMPLEMENTATION RESTRICTION. DIRECT FILE zzzz DECLARED IN STATEMENT NUMBER xxx MUST HAVE AN ORGANIZATION SUB FIELD IN THE ENVIRONMENT ATTRIBUTE. Explanation: Misplaced in ENVIRONMENT attribute S IEM2821I CONFLICTING OPTIONS IN ENVIRONMENT ATTRIBUTE IN STATEMENT NUMBER xxx. REST OF ENVIRONMENT IGNORED. System Action: DECLARE control block is constructed from attributes which have already been processed. The rest are ignored. ERRONEOUS USE OF PARENTHESIS IN ENVIRONMENT OPTION IN STATEMENT NUMBER xxx Explanation: Misplaced parenthesis in ENVIRONMENT attribute S IEM2820I Action: Remainder of attribute ignored ENVIRONMEN~ S IEM2833I COMPILER ERROR. OPERAND OF OR SL NOT LABEL. CL Explanation: The dictionary entry referenced after a compiler label or statement label marker in the text is not in fact a label System Action: The label definition is ignored. User Response: Save relevant data. Call your local IBM representative,. T IEM2834I COMPILER ERROR. PSEUDO-CODE OPERATION. Explanation: Use of a pseudoregister accompanied by literal offset has been called for by compiled code. This cannot be assembled owing to the manner in which pseudo-register relocation is performed. INVALID Explanation: The input text contains a marker which is not valid System Action: terminated Compilation is User Response: Save relevant data. Call your local IBM representative,. S IEM2835I System Action: The offset is ignored. COMPILER ERROR. LABEL CHAIN ERROR. User Response: Save relevant data. Call your local IBM representative. S IEM2853I SUBSCRIPTED System Action: ~n offset of zero is assembled into the output text. User Response: Save relevant data. Call your local IBM representa ti ve,. system Action: The label definition is ignored T IEM2836I S IEM2854I Explanation: Not enough scratch core is available for the generated label number table created by this phase. The condition arises when a large number of such labels have been used, and this in turn is related to the size of the program. The compilation User Response: Save relevant data. Call your local IBM representa ti ve,. S IEM2855I An offset of zero is assembled into the output text. Syste~ction: Compilation is User Response: Save relevant data. Call your local IBM representative. User Response: Save relevant data. Call your local IBM representative. S IEM2865I S IEM2852I COMPILER SET IN ERENCE. ERROR. NON-ZERO OFFPSEUDO-REGISTER REF- COMPILER ERROR. REQUESTED OFFSET NOT ASSIGNED. Explanation: Although implied by a dictionary reference in the text* storage has not been allocated COMPILER ERROR. MULTIPLY DEFINED LABEL OR INVALID LABEL NUMBER. system Action: terminated DIC- System Action: An offset of zero is assembled into the output text .. User Response: Break down the program into smaller modules T IEM2837I COMPILER ERROR. INVALID TIONARY REFERENCE OFFSET. ExPlanation: A dictionary reference in the input text corresponds to a valid dictionary entry, but the dictionary reference offset is not valid. IMPLEMENTATION RESTRICTION. SOURCE PROGRAM TOO LARGE. System Action: is terminated COMPILER ERROR. REFERENCE TO INVALID DICTIONARY ENTRY. Explanation: A dictionary reference in the input text does not correspond to a legal dictionary entry. Explanation: Subscripted labels in the source program result in the creation of chains of dictionary entries. An error in the chaining causes this message to appear. User Response: Save relevant data. Call your local IBM representative. literal IMPLEMENTATION RESTRICTION. SOURCE PROGRAM CONTAINS TOO MANY BLOCKS AND/OR CONTROLLED VARIABLES. Appendix G: Diagnostic Messages 241 Explanation: The compiler allocates a pseudo-register entry for each block and CONTROLLED variable in the source program. The maximum number of such entries is 1,024 • and the two are then joined by the Linkage Editor, two External Symbol Dictionary entries may have the same name. System Action: System Action: No pseudoregisters are allocated for items after the limit has been reached. T IEM2881I User Response: Reduce number of blocks, or CONTROLLED variables, in program to less than 1,025. W IEM2866I System Action: terminated S IEM2882I Explanation: tifiers are characters External restricted System Action: An zero is assembled text. W IEM2868I Response: Shorten S IEM2883I idento 7 COMPILER ERROR IN STATEMENT NUMBER xxx. INVALID REQUEST FOR RELOCATABLE TEXT. Explanation: The operand of a branch instruction has been found to require relocation. System Action: An zero is assembled text. offset of into the the THIS PL/I COMPILATION HAS GENERATED EXTERNAL NAMES IN WHICH THE SECOND LEADING CHARACTER OF THE EXTERNAL PROCEDURE NAME HAS BEEN REPLACED BY A SPECIAL CHARACTER. Explanation: The external procedure with its second character changed is being used as a base for generating names for External Symbol Dictionary entries. If the same thing happens in another compilation, 242 offset of into the User Response: Save relevant data. Call your local IBM representative. System Action: Name of ESD entry truncated by taking first 4 and last 3 characters; phase then carries on normally. User name. COMPILER ERROR IN STATEMENT NUMBER xxx. OPERAND OF DC CODE INVALID. Explanation: The operand of a DCA4 pseudo-code item is not valid the operand should always be relocatable. None IMPLEMENTATION RESTRICTION. EXTERNAL NAME zzzz HAS BEEN TRUNCATED TO 7 CHARACTERS. Compilation is User Response: Save relevant data. Call your local IBM representative. Explanation: The external procedure name with its first character changed is being used as a base for generating names for External Symbol Dictionary entries. If the same thing happens in another compilation, and the two are then joined by the Linkage Editor, two External Symbol Dictionary entries may have the same name. E IEM2867I COMPILER ERROR IN STATEMENT NUMBER xxx. INVALID PSEUDOCODE OPERATION. Explanation: The input text contains a marker which is not valid. THIS PL/I COMPILATION HAS GENERATED EXTERNAL NAMES IN WHICH THE FIRST LEADING CHARACTER OF THE EXTERNAL PROCEDURE NAME HAS BEEN REPLACED BY A SPECIAL CHARACTER. system Action: None User Response: Save relevant data. Call your local IBM representative .• S IEM2884I COMPILER ERROR IN STATEMENT NUMBER xxx~ NON-ZERO OFFSET IN PSEUDO-REGISTER REFERENCE. Explanation: Use of a pseudoregister accompanied by a literal offset has been called for by compiled code. This cannot be assembled owing to the manner in which pseudoregister relocation is performed. System Action: The offset is ignored literal User Response: Save relevant data. Call your local IBM representative. S IEM2885I User Response: Save relevant data. Call your local IBM representative. S IEM2897I COMPILER ERROR IN STATEMENT NUMBER xxx. REFERENCE TO INVALID DICTIONARY ENTRY. Explanation: The fully qualified name of the variable indicated will not fit into its Symbol Table entry Explanation: A dictionary reference in the input text does not correspond to a legal dictionary entry System Action: Leaves Symbol Table entry incomplete and carries on with the initialization of the Static Internal control section .• System Action: An offset of zero is assembled into the output text User Response: Save relevant data. Call your local IBM representative .. Us er Respons e: qualified name S IEM2898I S IEM2886I COMPILER ERROR IN STATEMENT NUMBER xxx. INVALID DICTIONARY REFERENCE OFFSET. COMPILER ERROR IN STATEMENT NUMBER xxx. REQUESTED OFFSET NOT ASSIGNED. W IEM2899I T IEM2888I Correct GET INITIALIZATION SPECIFIED FOR TOO FEW ELEMENTS IN STATIC ARRAY zzzz System Action: Initialization terminated when end of initial string is found. W IEM2900I Explanation: Although implied by a dictionary reference in the input text, storage has not been allocated. system Action: An offset of zero is assembled into the output text. the DATA-DIRECTED GET STATEMENT IN PROGRAM WITH NO LIST BUT PROGRAM HAS NO DATA VARIABLES. User Response: statement User Response: Save relevant data. Call your local IBM representative. S IEM2887I Shorten System Action: Zeros are inserted in the argument list for the call to the Library routine to 'GET DATA', and compilation continues Explanation: A dictionary reference in the text corresponds to a valid dictionary entry, but the dictionary reference offset is not valid. system Action: An offset of zero is assembled into the output text IMPLEMENTATION RESTRICTION. QUALIFIED NAME zzzz LONGER THAN 256 CHARACTERS. INITIALIZATION SPECIFIED FOR TOO MANY ELEMENTS IN STATIC ARRAY zzzz system Action: Initialization is terminated when every element has been initialized. T IEM2913I COMPILER ERRO~. PSEUDO-CODE OPERATION. INVALID User Response: Save relevant data. Call your local IBM representative. Explanation: The input text contains a marker which is not valid COMPILER ERROR IN STATEMENT NUMBER xxx. UNDEFINED LABEL. System Action: terminated Explanation: No offset has been assigned to a label generated by the compiler,. User Response: Save relevant data. Call your local IBM representative. system Action: terminated compilation is IEM3088I -32131 Compilation is THE CONFLICTING ATTRIBUTE aaaa HAS BEEN IGNORED IN THE DECLAR- Appendix G: Diagnostic Messages 243 ATION OF IDENTIFIER STATEMENT NUMBER xxx yyyy IN Explanation: Referenced is not in core system Action: terminated Explanation: The attribute given in the message conflicts with another attribute declared for the same identifier, or is invalid for that identifier. The attribute system Action: message is given in the ignored .. E IEM35841 T IEM38411 T IEM38441 System Action: terminated Compilation T IEM38451 T IEM38461 is COMPILER ERROR. SCRATCH CORE IS 4K. REQUEST FOR GREATER THAN EXQlanation: Request for scratch core exceeds 4096 bytes System Action: terminated Compilation is User ResQonse: Save relevant data. Call your local IBM representative. T IEM38481 244 Compilation User ResQQnse: Subdivide program and recompile Compilation is USED IMPLEMENTATION RESTRICTION. SOURCE PROGRAM TOO LARGE. ALL TEXT BLOCKS FULL. System Action: terminated Explanation: All blocks in core have become busy. Compiler cannot continue since an external block cannot be read in. COMPILER ERROR. ZDABRF WITH BLOCK NOT IN CORE. is Explanation: There is no more space for text in this environment T IEM38471 T IEM38431 Compilation User Response: Save relevant data. Call your local IBM representative. is User Response: Save relevant data. Call your local IBM representative .. is COMPILER ERROR. REFERENCED TEXT BLOCK NOT IN CORE. §ystem Action: terminated COMPILER ERROR. ALL TEXT BLOCKS IN CORE ARE BUSY. REFERENCED BLOCK CANNOT BE BROUGHT INTO CORE. system Action: terminated Compilation User Response: Save relevant data. Call your local IBM representa ti ve,. User Response: Check the nirectory and re-attempt compilation. If error persists, have the computing system checked. T IEM38421 COMPILER ERROR. DICTIONARY ENTRY IS TOO LONG FOR THIS ENVIRONMENT. System Action: terminated I/O LRROR ON SEARCHING DIRECTORY. Explanation: This message is written directly on SYSPRINT. A permanent 1/0 error was detected when an attempt was made to search the directory of the library containing the compiler. Compilation is User Response: Save relevant data. Call your local IBM representati ve,. AN UNBALANCED NUMBER OF PARENTHESES HAS BEEN DETECTED WITHIN A STATEMENT AT OR NEAR STATEMENT NUMBER xxx Explanation: An occurrence of a comma immediately followed by a period at or near the given statement has been taken as a statement delimiter. The statement contains an unbalanced number of parentheses. block COMPILER ERROR. AN ATTEMPT WAS MADE TO RELEASE UNALLOCATED CORE. EXQlanation: Attempt to release unallocated scratch core System Action: terminated Compilation is Explanation: This message is written directly on SYSPRINT. A compiler error has been discovered during the printing of compile-time diagnostic messages (if phase quoted in message is BM) or of sourceprogram diagnostic messages (if phase is XA). User Response: Save relevant data. Call your local IBM representative. T IEM3849I COMPILER ERROR. PHASE RELEASE LIST IS NOT IN DIRECTORY. System Action: terminated T IEM3850I yy IN PHASE Compilation is User Response: Save relevant data. Call your local IBM representative. system Action: Compilation is terminated. Note that only the diagnostic message output is incomplete. All other output files have been generated satisfactorily. COMPILER ERROR. PHASE LOAD LIST IS NOT IN DIRECTORY. User Response: Save relevant data. Call your local IBM representative. system Action: terminated yy IN PHASE Compilation is T IEM3856I User Response: Save relevant data. Call your local IBM representative. T IEM3851I COMPILER ERROR. PHASE MARKED. IT IS LOADED. Explanation: is loaded yy Explanation: A program check has occurred during compilation. This is due to a compiler failure which may have been exposed by an error in the source code. NOT An unmarked phase System Action: terminated System Action: terminated Compilation is resentative~ COMPILER ERROR. REFERENCED BLOCK IS NOT IN USE. COMPILER CANNOT CONTINUE. system Action: terminated Compilation is T IEM3857I User Response: Save relevant data. Call your local IBM representative. T IEM3853I T IEM3858I T IEM3855I ERROR IN PHASE yy. Compilation is User Response: Save relevant data. Call your local IBM representative. is User Response: subdivide into more than one program and recompile COMPILER ERROR. ATTEMPT TO PASS CONTROL TO AN UNNAMED PHASE. AN UNMARKED PHASE HAS BEEN ENCOUNTERED. system Action: terminated Explanation: This message is written directly on SYSPRINT. Compilation is Explanation: An unmarked phase has been encountered. Compiler cannot continue IMPLEMENTATION RESTRICTION. SOURCE PROGRAM TOO LARGE. DICTIONARY IS FULL. System Action: terminated Compilation User Response: Check source code carefully. If an error is found, correcting it may enable compilation to be completed successfully. Whether or not an error is found, please save relevant data and contact your your local IBM representative. User Response: Save relevant data. Call your local IBM repT IEM3852I COMPILER ERROR. PROGRAM CHECK TYPE nnnn HAS OCCURRED IN PHASE yy AT OR NEAR STATEMENT NUMBER xxx COMPILER ERROR. UNWANTED PHASE DIRECTORY. REQUESTED OR NOT IN PHASE Explanation: Request to mark a phase which is not in phase Appendix G: Diagnostic Messages 245 directory. continue. Compiler system Action: terminated cannot line message. It is written to operator. There is an I/O error on SYSPRINT. The compiler cannot continue. Compilation is System Action: terminated User Response: Save relevant data. Call your local IBM representative. T IEM3859I User Response: Check DD card and recompile. If I/O error persists. have computing system checked. INSUFFICIENT CORE IS AVAILABLE TO CONTINUE THIS COMPILATION. Explanation: An attempt is being made to expand the number of text blocks in core. The GETMAIN routine has failed to get the core. This will only occur where less than 45,056 bytes are available to the compiler~ or when the SIZE option has been given too large a value. System Action: terminated Compilation T IEM3863I I/O ERROR ON SYSIN. AS INPUT. T IEM3864I System Action: terminated RECORD T IEM3865I system Action: termina ted User Response: If SYSIN is a card reader, check that every column of the indicated card contains a valid code. If the I/O error persists, have the computing system checked. T IEM3862I is I/O ERROR ON SYSUT3 Explanation: This message is written directly on SYSPRINT. There is an I/O error on SYSUT3. The compiler cannot continue. System ~~~ion: terminated Compilation is I/O ERROR ON SYSPRINT Explanation: 246 Compilation User Response: Save relevant data. Call your local IBM representative. T IEM3872I User Response: Check DD card and recompile. If I/O error persists, have computing system checked. ERROR IN COMPILER ABORT Explanation: This message is written directly on SYSPRINT. The compiler has tried twice to abort and cannot do so. Compilation will therefore terminate without the production of any further diagnostic messages. System Action: The error message number is printed in the source listing before the record in error. The record is accepted as input. I/O ERROR ON SYSLIN. GENERATION OF LOAD FILE IS TERMINATED. Compilation is User Response: Check DD card and recompile. If I/O error persists_ have computing system checked,. ~CCEPTED T IEM3861I I/O ERROR ON SYSUTl Explanation: This message is written directly on SYSPRINT. There is an I/O error on SYSUT1. The compiler cannot continue .. is Explanation: The error may be a machine error, or" if SYSIN is a card reader, there may be a hole pattern which does not represent a valid System/360 character (validity check). I/O ERROR ON SYSPUNCH. GENERATION OF OBJECT DECK IS TERMINATED. User Response: Check DD card and recompile. If I/O error persists. have computing system checked. User Response: Check the SIZE option and check that the required core is available in the system on which the compilation is being run E IEM3860I Compilation is This is an on- User Response: Check DD card and recompile. If I/O error Unable to open SYSUT3. compiler cannot continue. persists, have computing system checked. E IEM38731 I/O ERROR ON SYSUT3. ACCEPTED AS INPUT. system Action: continues RECORD System Action: terminated S IEM3888I System Action: The DECK and MACDCK optIons are deleted Compilation is User Response: Check SYSIN card and recompile UNABLE TO OPEN SYSLIN. FILE NOT GENERATED. User Response: Correct the blocksize definition and recompile DD LOAD S IEM3889I user~2nse: Check SYSLIN DD card and recompile. If error persists, have computing system checked. T IEM3876I Explanation: This is an online message. It is written to operator. Unable to open SYSPRINT. The compiler cannot continue u Explanation: No RECFM definition has been found. in the DeB parameter of the SYSIN DD card or the data-set label. SYSPUNCH system Action: Compilation proceeds assuming U type records. U format will be specified in the data-set label when SYSIN is closed. UNABLE TO OPEN SYSUT1. COMPILATION CANNOT CONTINUE. Compilation is User Response: Check SYSUTl DD card and recompile T IEM3880I NO RECFM GIVEN FOR SYSIN. TYPE RECORDS ARE ASSUMED SYSPRINT UNABLE TO OPEN SYSPUNCH. OBJECT DECK NOT GENERATED. system Action: terminated The LOAD option User Response: Correct the blocksize definition and recompile W IEM3890I User Response: Check DD card and recompile T IEM3878I system Af1ion: is deleted Compilation is User Response: Check DD card and recompile T IEM3877I SYSIIN BLOCKSIZE NOT A MULTIPLE OF 80. THE LOAD OPTION HAS BEEN DELETED. Explanation: On opening SYSLIN# the blocksize definition, either on the DD card or in the data-set label, was not a multiple of 80. UNABLE TO OPEN SYSPRINT system Action: terminated SYSPUNCH BLOCKSIZE NOT A MULTIPLE OF 80. THE DECK AND MACDCK OPTIONS HAVE BEEN DELETED. Explanation: On opening SYSPUNCH. the blocksize definition. either on the DD card or in the data-set label, was not a multiple of 80. Explanation: This message is written directly on SYSPRINT. Unable to open SYSIN. The compiler cannot continue. T IEM3875I is User Response: Check SYSUT3 DD card and recompile UNABLE TO OPEN SYSIN System Action: terminated Compilation Compilation User Response: Check DD card and recompile. If I/O error persists, have computing system checked. T IEM3874I The UNABLE TO OPEN SYSUT3 Explanation: This message is written directly on SYSPRINT. User Response: Check RECFM definition on SYSIN DD card and rer \,,'11 if necessary. T IEM3891I SYSIN BLOCKSIZE IS TOO LARGE Explanation: On opening SYSIN for unblocked records, a blocksize of greater than 100 has been specified either in the Appendix G: Diagnostic Messages 247 DCB parameter of the SYSIN DD card or in the data-set label. in the data-set label, was not of the form 4+N*125. system Action: terminated System Action: terminated Compilation is Change the User Response: invalid blocksize definition and recompile T IEM3893I SYSIN BLOCKSIZE NOT A MULTIPLE OF RECORD LENGTH. T IEM3897I T IEM3894I SYSIN BLOCKSIZE RECORD LENGTH. NOT EQUAL System Action: terreinated User Response: Correct the nefinition of SYSIN and recompile W IEM3898I Compilation ~ IEM3899I is Explanation: On opening SYSIN for F format records, a record length definition, either on the DD card or in the data-set label, was found to be greater than 100. Compilation User Response: Correct record-length definition recompile T IEM3896I 248 is SPILL file A BLOCK FOR OVERFLOW DICTIONARY ENTRY OFFSETS WAS CREATED DURING COMPILER PHASE YY system Action: The block is created to hold the entry offsets overflowing from any entry offset tables during this compilation. E IEM3900I ERROR IN PROCESS STATEMENT. Explanation: This message is written directly on SYSPRINT. The syntax of the PROCESS statement is incorrect. NOT OF system Action: An attempt is made to interpret the statement correctly. Actual results will depend on the nature of the syntax error. Explanation: On opening SYSPRINT, the blocksize definition, either on the DD card or User Response: Check that the options required have been correctly applied. If not, and recompilation is necessary, SYSPRINT BLOCKSIZE FORM 4+N*125 IS the and Action: Explanation: This message occurs only in compilations run with the extended dictionary option. An entry offset table in a dictionary block became full before the entries filled the block. SYSIN RECORD LENGTH TOO LARGE system Action: terminated. COMPILER CORE REQUIREMENT EXCEEDED SIZE GIVEN. AUXILIARY STORAGE USED. §ystem opened User Response: Change the incorrect definition and recompile T IEM3895I Compilation is TO Explanation: On opening SYSIN for F format records, the block size and record-length definitions, either on the DD card or in the data-set label, were found to be unequal. system Action: terminated. SYSIN DEFINITION IS INVALID Explanation: On opening SYSIN, the record-format definition, either on the DD card or in the data-set label, was varying. This is invalid. Compilation is User Response: Correct the blocksize definition and recompile is User Response: Correct the blocksize definition and recompile Explanation: On opening SYSIN for FB format records, it has been noted that the blocksize definition, either on the DD card or in the data set label, is not an exact multiple of the record length. System Action: terminated. Compilation correct the syntax of the PROCESS statement. E IEM3901I E IEM3905I Explanation: This message is written directly on SYSPRINT. The compiler was processing the option list passed to it as an invocation parameter, when it found an option keyword that had been deleted at system generation. ERROR IN PROCESS STATEMENT. DEFAULT OPTIONS ASSUMED. Explanation: This message is written directly on SYSPRINT. Invalid syntax in the PROCESS statement has rendered the options unrecognizable. system Action: tion defaults all options. System Action: The keyword passed at invocation time is ignored. The default interpretation for the option, as set at system generation, is used. The installaare assumed for User Response: If the use of installation default options is unsatisfactory, correct the syntax of the PROCESS statement and recompile. E IEM3902I OBJNM FIELD TOO LARGE. FIRST EIGHT CHARACTERS OF NAME HAVE BEEN USED. User Response: None, unless it is required to reinstate the deleted keyword, in which case it is necessary to generate the required version of the compiler with a system generation run. E IEM3906I Explanation: The name specified in the OBJNM option may not have more than eight characters. System Action: First characters of name used. eight System Action: The keyword passed at invocation time 1S ignored. The default interpretation for the option, as set at system generation# is used. CARRIAGE CONTROL POSITION LIES WITHIN THE SOURCE MARGIN. IT HAS BEEN IGNORED. User Response: Recompile witp carriage control position outside source margin. E IEM3904I THE FOLLOWING STRING NOT IDENTIFIED AS A KEYWORD - yyyy Explanation: This message is written directly on SYSPRINT. The compiler was processing the option list passed to it as an invocation parameter, when it found a character string that it could not identify as a keyword. System Action: The offending character string is ignored. User Response: Correct the erroneous parameter, and recompile. OPTION SPECIFICATION CONTAINS INVALID SYNTAX, DEFAULT USED FOR - yyyy Explanation: This message is written directly on SYSPRINT. The compiler was processing the option list passed to it as an invocation parameter, when it found that a sub-parameter, associated with the keyword given in the diagnostic message, was incorrectly specified. User Response: Either amend object module name as required, or alter other references to object module to correspond with truncated name. W IEM3903I THE FOLLOWING KEYWORD DELETED, DEFAULT USED FOR - yyyy User Res22Dse: Correct the erroneous parameter, and recompile.o E IEM3907I THE FOLLOWING NAME IGNORED AS IT DOES NOT APPEAR IN THE PHASE DIRECTORY - yy Explanation: This message is written directly on SYSPRINT. The two characters given in the message were used as parameters to the DUMP option. This usage is incorrect since the characters do not represent the name of a compiler phase. System Action: The processing of the DUMP option continues, unless the two characters were used to indicate the first Appendix G: Diagnostic Messages 249 phase of an inclusive phase dump, in which case the scan of the DUMP option is terminated. fied allows a limited buffer area which is smaller than that required by the buffers for SYSIN, or for SYSIN and SYSPRINT together. User Response: Correct the erroneous parameter, a nd recompile. S IEM3908I SYNTAX ERROR SPECIFICATION IN DUMP system Action: Processing DUMP option is terminated User Response: Correct erroneous specification, recompile. compilation is SYSPRINT BLOCKSIZE IS TOO LARGE WITH THIS SIZE OPTION Explanation: The size specified allows a limited buffer area which is smaller than that required by the specified blocksize. System Action: terminated compilation User Response: Ensure that the SIZE option allows room for the SYSPUNCH buffers needed, and recompile. S IEM3914I SYSLIN BLOCKSIZE IS TOO LARGE WITH THIS SIZE OPTION. THE LOAD OPTION HAS BEEN DELETED. Explanation: The SIZE specified allows a limited buffer area which is smaller than that required by the specified SYSLIN blocksize. system Action: is deleted. The LOAD option User Response: Ensure that the SIZE option allows room for the SYSLIN buffers needed and recompile. is COMPILE-TIME PROCESSING DIAGNOSTIC MESSAGES SIZE AVAILABLE FOUND TO BE yyyyyy BYTES. SIZE=44K ASSUMED. COMPILATION CONTINUES. The details given under the heading "Source Program Diagnostic Messages" apply equally to compile-time processing messages, with one exception: all compile-time processing messages are listed in a group following the SOURCE 2 input listing and preceding the source program listing. to SYSIN BLOCKSIZE IS TOO LARGE WITH THIS SIZE OPTION Explanation: 250 System Action: The DECK and MACDCK options are deleted User Response: Use smaller blocksize or larger SIZE option Explanation: SIZE is found be less than 44K. T IEM3912I SYSPUNCH BLOCKSIZE IS TOO LARGE WITH THIS SIZE OPTION. THE DEC 1< AND MACDCK OPTIONS HAVE BEEN DELETED. Explanation: The SIZE specified allows a limited buffer area which is smaller than that required by the specified SYSPUNCH blocksize. the and User Response: subdivide program and recompile W IEM3911I S IEM3913I of Explanation: This message occurs only in compilations run with the extended dictionary option.. The block creat.ed to hold overflow dictionary entry offsets is full. T IEM3910I is User Response: Ensure that SIZE option allows room for both the SYSIN and the SYSPRINT buffers,. EXTENDED DICTIONARY CAPACITY EXCEEDED. COMPILATION TERMINATED. system Action: terminated Compilation OPTION Explanation: This message is written directly on SYSPRINT. Incorrect use of delimiters in the specification of the DUMP option parameters. T IEM3909I System Action: terminated The size speci- The line number in the messages refers to the line in which the error was found. The incorrect statement may have commenced on an earlier line. S IEM4106I UNEXPECTED END-OF-FILE IN STRING AT OR BEYOND LINE NUMBER xxx. A STRING DELIMITER HAS BEEN INSERTED. for which a DECLARE statement has not been executed. E IEM4133I Explanation: End-of-file encountered while scanning for closing quote of a string constant. User Response: label list System Action: Closing quote inserted before end-of-file. T IEM4109I ENCOUNTERED IN LABELLIST OF STATEMENT IN LINE NUMBER xxx. IT HAS BEEN IGNORED. ~ Remove % from REPLACEMENT VALUE IN LINE NUMBER xxx CONTAINS UNDELIMITED STRING. PROCESSING TERMINATED. E IEM4134I UNE 2U'ECTED COLON WITHOUT PRECEDING LABEL IN LINE NUMBER xxx. COLON HAS BEEN IGNORED. Explanation: End-of-string delimiter cannot be found in a replacement value. S IEM4136I STATEMENT TYPE NOT RECOGNIZABLE IN LINE NUMBER xxx. STATEMENT DELETED. E IEM4112I ILLEGAL CHARACTER IN APPARENT BIT STRING IN LINE NUMBER xxx. STRING TREATED AS A CHARACTER STRING. E IEM4139I PREVIOUS USAGE OF IDENTIFIER zzzz CONFLICTS WITH USE AS LABEL IN LINE NUMBER xxx. ANY REFERENCE WILL TERMINATE PROCESSING. S IEM4115I UNEXPECTED END-OF-FILE IN COMMENT AT OR BEYOND LINE NUMBER xxx. A COMMENT DELIMITER HAS BEEN INSERTED. Explanation: End-of-file encountered while scanning for end-of-comment delimiter. T IEM4118I system Action: No action unless an attempt is made to execute a statement which references the ill-defined identifier .• E IEM4142I REPLACEMENT VALUE IN LINE NUMBER xxx CONTAINS UNDELIMITED COMMENT. PROCESSING TERMINATED. System unless a erences label is Explanation: End-of-comment delimiter cannot be found in a replacement value,. E IEM4121I INVALID CHARACTER HAS BEEN REPLACED BY BLANK IN OR FOLLOWING LINE NUMBER xxx COMPILER ERROR. STACK OUT OF PHASE system Action: minated PUSH LABELS BEFORE DECLARE STATEMENT IN LINE NUMBER xxx ARE IGNORED. E IEM4148I IDENTIFIER zzzz IN LINE NUMBER xxx USED WITH CONFLICTING ATTRIBUTES. ANY REFERENCE WILL TERMINATE PROCESSING. DOWN Explanation: Usage of identifier conflicts with a previous usage or declaration. If the line number refers to a procedure END statement, the error occurred within the procedure. Processing ter- User Response: Save relevant data. Call your local IBM representative. T IEM4130I System Action: No action unless a statement is executed which references the identifier in error. UNDECLARED IDENTIFIER zzzz REFERENCED AT LINE NUMBER xxx. PROCESSING TERMINATED. E IEM4150I Explanation: An attempt is made to execute a statement which references an identifier Action: No action statement which refthe multiply defined executed. W IEM4143I Explanation: Invalid character found in source text T IEM4124I LABEL zzzz IN LINE NUMBER xxx MULTIPLY DEFINED. ANY REFERENCE WILL TERMINATE PROCESSING. FORMAL PARAMETER zzzz WAS NOT DECLARED IN PROCEDURE ENDING IN LINE NUMBER xxx. TYPE CHARACTER HAS BEEN FORCED. Appendix G: Diagnostic Messages 251 E IEM4151I LABEL zzzz IS NOT DEFINED. ANY REFERENCE WILL TERMINATE PROCESSING .. system Action: No action unless a statement is executed which references the undefined label. E IEM4152I E IEM4153I W IEM4175I LABELS BEFORE ELSE IN LINE NUMBER xxx HAVE BEEN IGNORED. Explanation: Label(s) found preceding an ELSE statement. S IEM41761 NO STATEMENT FOLLOWS THEN OR ELSE IN LINE NUMBER xxx. A NULL STATEMENT HAS BEEN INSERTED. E IEM41781 ELSE WITHOUT LINE NUMBER IGNCRED,. LABEL zzzz IS UNDEFINED IN THE PROCEDURE ENDING IN LINE NUMBER xxx. ANY REFERENCE WILL TERMINATE PROCESSING. S IEM4184I ASSIGNMENT STATEMENT IN LINE NUMBER xxx MUST END WITH SEMICOLON. TEXT DELETED TILL SEMICOLON IS FOUND. Explanation: Label may have been defined outside of procedure, but transfers out of procedures are not allowed. E IEM4187I LABEL MISSING FROM PROCEDURE STATEMENT IN LINE NUMBER xxx. A DUMMY LABEL HAS BEEN INSERTED. system Action: ~ny reference to the label in the procedure will terminate processing,. T IEM41881 IMPLEMENTATION RESTRICTION. NO MORE THAN 254 COMPILE-TIME PROCEDURES MAY BE DEFINED IN A COMPILATION. PROCESSING TERMINATED. END OF FILE OCCURS BEFORE END FOR CURRENT PROCEDURE OR DO. END HAS BEEN INSERTED AT LINE NUMBER xxx. E IEM4154I SEMICOLON TERMINATES IF EXPRESSION IN LINE NUMBER xxx. SEMICOLON HAS BEEN IGNORED. S IEM4157I NEITHER % NOR THEN FOLLOWS IF EXPRESSION IN LINE NUMBER xxx. IF STATEMENT DELETED. User Response: procedures E IEM4190I PRECEDING IF IN xxx HAS BEEN Delete excess LABEL zzzz ON PROCEDURE IN LINE NUMBEER xxx IS PREVIOUSLY DEFINED. ANY REFERENCE TO IT WILL TERMINATE PROCESSING. E IEM4160I % MISSING BEFORE THEN OF IF STATEMENT IN LINE NUMBER xxx. % HAS BEEN INSERTED. E IEM4163I THEN MISSING FOLLOWING % IN IF STATEMENT IN LINE NUMBER xxx. A THEN HAS BEEN INSERTED. E IEM41661 COMPILE TIME ST~TEMENT MUST FOLLOW THEN OR ELSE IN LINE NUMBER xxx. A % HAS BEEN INSERTED IN FRONT OF STATEMENT. E IEM41931 ILLEGAL USE OF FUNCTION NAME zzzz ON LEFT HAND SIDE OF EQUALS SYMBOL. ANY REFERENCE WILL TERMINATE PROCESSING. Explanation: % does not precede the first statement in the THEN or ELSE clause of an IF statement .• E IEM4196I PREVIOUS USE OF IDENTIFIER zzzz CONFLICTS WITH USE AS ENTRY NAME IN LINE NUMBER xxx. ANY REFERENCE WILL TERMINATE PROCESSING. System Action: No action unless a statement is executed which references the multiply defined label. User Response: If the statement in question is meant to be a non-compile time statement, it should be put inside of a "% DO" group. E IEM4169I THEN MISSING FROM IF STATEMENT AT LINE NUMBER xxx IN A COMPILE TIME PROCEDURE. A THEN H~S BEEN INSERTED. E IEM4172I THE % IN LINE NUMBER xxx IS NOT ALLOWED IN COMPILE TIME PROCEDURES. IT HAS BEEN IGNORED. 252 System Action: No action unless a statement is executed which references the erroneous identifier. S IEM4199I S IEM42021 FOR~L PARAMETER zzzz IS REPEATED IN PARAMETER LIST IN LINE NUMBER xxx. THE SECOND OCCURRENCE HAS BEEN REPLACED BY A DUMMY PARAMETER. RESTRICTION: 15 PARAMETERS OCCUR IMPLEMENT~TION MORE THAN IN LINE NUMBER xxx. ANY REFERENCE WILL TERMINATE PROCESSING. System Action: Processing is terminated if an attempt is made to execute a statement which references the procedure that has more than 15 parameters. E IEM4205I FORMAL PARAMETER MISSING IN LINE NUMBER xxx. A DUMMY HAS BEEN INSERTED. E IEM4208I UNRECOGNIZABLE PARAMETER yyyy IN LINE NUMBER xxx. IT HAS BEEN REPLACED BY A DUMMY PARAMETER. S IEM4211I PARAMETER IN LINE NUMBER xxx NOT FOLLOWED BY COMMA OR PARENTHESIS. TEXT DELETED TO NEXT COMMA OR END OF STATEMENT. S IEM4212I UNEXPECTED END OF PROCEDURE STATEMENT IN LINE NUMBER xxx. RIGHT PARENTHESIS INSERTED. System Action: The number of parameters specified in the PROCEDURE statement is used. E IEM4226I System Action: The returned value will first be converted to the type on the procedure statement and will then be converted to the type given in the RETURNS attribute. A third conversion can occur if the type given in the returns attribute does not agree with the type required where the result is used. S IEM4229I System Action: Text is deleted up to and including the first % END following the erroneous PROCEDURE statement. S IEM4232I System Action: A right parenthesis is inserted before the semicolon and processing continues. PROCEDURE STATEMENT AT LINE NUMBER xxx MAY NOT FOLLOW THEN OR ELSE. PROCEDURE HAS BEEN REPLACED BY A NULL STATEMENT. Exp la na ti on: A PROCEDURE statement may appear in a THEN or ELSE clause only if it is inside a compile-time DO group. ILLEGAL FORM FOR ATTRIBUTE FOR RETURNED VALUE IN LINE NUMBER xxx. TEXT DELETED TO SEMICOLON. S IEM4235I RETURN STATEMENT IN LINE NUMBER xxx IS NOT ALLOWED OUTSIDE OF COMPILE-TIME PROCEDURE. STATEMENT DELETED. System Action: CHARACTER attribute is assigned E IEM4238I NO ATTRIBUTE FOR RETURNED VALUE IN LINE NUMBER xxx. CHARACTER ATTRIBUTE IS USED.• RETURNED VALUE MUST BE PARENTHESIZED IN LINE NUMBER xxx. PARENTHESIS INSERTED. E IEM4241I RETURNS EXPRESSION IN LINE NUMBER xxx DOES NOT END RETURN STATEMENT. REMAINDER OF STATEMENT HAS BEEN IGNORED. S IEM4244I GOTO IN LINE NUMBER xxx IS NOT FOLLOWED BY LABEL. STATEMENT DELETED. E IEM4247I PREVIOUS USE OF IDENTIFIER zzzz CONFLICTS WITH USE AS OBJECT OF GOTO IN LINE NUMBER xxx. ANY REFERENCE WILL TERMINATE PROCESSING. Explanation: Returned values may only be FIXED or CHARACTER. E IEM4217I PROCEDURE STATEMENT AT LINE NUMBER xxx MAY NOT BE USED WITHIN A PROCEDURE. PROCEDURE HAS BEEN DELETED. Explanation: Compile-time procedures may not be nested. Explanation: A semicolon was encountered during scan of an apparent parameter list. E IEM4214I RETURNS ATTRIBUTE AND PROCEDURE STATEMENT FOR ENTRY zzzz DISAGREE ON ATTRIBUTE OF RETURNED VALUE. System Action: CHARACTER attribute is assigned S IEM4220I SEMICOLON NOT FOUND WHERE EXPECTED IN PROCEDURE STATEMENT IN LINE NUMBER xxx. TEXT DELETED UP TO NEXT SEMICOLON. E IEM4223I ENTRY ATTRIBUTE AND PROCEDURE STATEMENT FOR ENTRY zzzz DISAGREE ON THE NUMBER OF PARAMETERS,. THE LATTER IS USED. Appendix G: Diagnostic Messages 253 system Action: No action unless a statement is executed which references the erroneous identifier .. E IEM4289I DO STATEMENT IN LINE NUMBER xxx SHOULD END WITH SEMICOLON. TEXT TO SEMICOLON DELETED. S IEM4248I SEMICOLON NOT FOUND WHERE EXPECTED IN GOTO STATEMENT IN LINE NUMBER xxx. TEXT DELETED UP TO NEXT SEMICOLON. E IEM4292I END STATEMENT AT LINE NUMBER xxx MAY NOT FOLLOW THEN OR ELSE. A NULL STATEMENT HAS BEEN INSERTED BEFORE THE END STATEMENT. T IEM4250I GOTO zzzz IN LINE NUMBER xxx TRANSFERS CONTROL INTO ITERATIVE DO OR ENCLOSED INCLUDED TEXT. PROCESSING TERMINATED. E IEM4295I ACTIVATE OR DEACTIVATE IN LINE NUMBER xxx NOT ALLOWED IN A COMPILE-TIME PROCEDURE. STATEMENT DELETED. SEMICOLON NOT FOUND WHERE EXPECTED IN END STATEMENT IN LINE NUMBER xxx. TEXT DELETED UP TO SEMICOLON. E IEM4296I END STATEMENT IN LINE NUMBER xxx NOT PRECEDED BY DO OR PROCEDURE STATEMENT. END HAS BEEN DELETED. S IEM4253I E IEM4254I EMPTY ACTIVATE OR DEACTIVATE STATEMENT IN LINE NUMBER xxx .• STATEMENT DELETED. E IEM4256I SURPLUS COMMA IN ACTIVATE OR DEACTIVATE IN LINE NUMBER xxx. THE COMMA HAS BEEN DELETED. S IEM4259I UNRECOGNIZABLE FIELD IN ACTIVATE OR DEACTIVATE STATEMENT IN LINE NUMBER xxx. THE FIELD HAS BEEN DELETED. S IEM4262I ONLY PROCEDURES OR VARIABLES MAY HAVE ACTIVITY CHANGED. IDENTIFIER zzzz IN LINE NUMBER xxx HAS BEEN DELETED FROM STATEMENT. S IEM4265I COMMA MUST SEPARATE FIELDS OF ACTIVATE AND DEACTIVATE STATEMENTS.. IN LINE NUMBER xxx TEXT AFTER IDENTIFIER yyyy HAS BEEN DELETED UP TO NEXT COMMA. Explanation: ~ END statement has been encountered which is not preceded by a DO or PROCEDURE statement that has not already been terminated. E IEM4298I Explanation: The label cannot be found on a DO or PROCEDURE statement that has not already been termi na ted. E IEM4299I S IEM4271I W IEM4277I E IEM4280I E IEM4283I E IEM4286I 254 LABEL REFERENCED ON END STATEMENT IN LINE NUMBER xxx CANNOT BE FOUNo.. END TREATED AS HAVING NO OPERAND. END STATEMENT ENDING PROCEDURE IN LINE NUMBER xxx DID NOT HAVE A PRECEDING PERCENT. A PERCENT IS INSERTED .• Explanation: The END statement referred to in this message is the logical end of the procedure .. INVALID SYNTAX I N DO STATEMENT IN LINE NUMBER xxx. IT HAS BEEN CONVERTED TO A GROUPING DO. E IEM4301I NO MAXIMUM VALUE WAS SPECIFIED IN ITERATIVE DO IN LINE NUMBER xxx. PROGRAM WILL LOOP UNLESS ALTERNATE EXIT IS PROVIDED. IDENTIFIER zzzz ON END STATEMENT IN LINE NUMBER xxx IS NOT A LABEL. END TREATED AS HAVING NO OPERAND. E IEM4304I PROCEDURE zzzz DID NOT INCLUDE A RETURN STATEMENT. UNEXPECTED % IN LINE NUMBER xxx TREATED AS HAVING BEEN PRECEDED BY SEMICOLON. Explanation: Language syntax requires use of RETURN statement in a procedure. MULTIPLE TO'S HAVE OCCURRED IN DO STATEMENT IN LINE NUMBER xxx. SECOND 'TO' HAS BEEN CHANGED TO 'BY'. MULTIPLE BY'S HAVE OCCURRED IN DO STATEMENT IN LINE NUMBER xxx. SECOND 'BY' HAS BEEN CHANGED TO 'TO". system Action: A null value is returned if the procedure is invoked. S IEM43071 INCLUDE STATEMENT AT LINE NUMBER xxx IS NOT ALLOWED IN COMPILE-TIME PROCEDURES. STATEMENT DELETED. E IEM4310I IMPLEMENTATION RESTRICTION. DDNAME IN LINE NUMBER xxx H~S BEEN TRUNCATED TO 8 CHARACTERS. S IEM4334I Explanation: The first of a pair of data set identifiers in an INCLUDE statement is a ddname and as such is limited to a maximum of 8 characters. S IEM4313I UNRECOGNIZABLE FIELD IN INCLUDE STATEMENT AT LINE NUMBER xxx. FIELD HAS BEEN DELETED. system Action: Text is deleted up to next comma or semicolon. S IEM4319I E IEM4322I User Response: Reduce level of factoring in DECLARE statement. E IEM4337I SURPLUS COMMA HAS BEEN FOUND IN DECLARE STATEMENT IN LINE NUMBER xxx. THIS COMMA HAS BEEN DELETED. E IEM4340I IDENTIFIER MISSING WHERE EXPECTED IN LINE NUMBER xxx. A DUMMY IDENTIFIER HAS BEEN INSERTED. E IEM4343I IDENTIFIER zzzz IN LINE NUMBER xxx HAS MULTIPLE DECLARATIONS. ANY REFERENCE WILL TERMINATE PROCESSING. EMPTY INCLUDE STATEMENT IN LINE NUMBER xxx. STATEMENT DELETED. Explanation: At least one identifier must appear in an INCLUDE statement i.e., the data set member name. IMPLEMENTATION RESTRICTION. MEMBER NAME IN LINE NUMBER xxx HAS BEEN TRUNCATED TO 8 CHARACTERS. Explanation: An identifier may be declared only once. System Action: No action unless a statement is executed which references the multiply declared identifier. System Action: First 8 characters of member name have been used. S IEM4346I UNRECOGNIZABLE SYNTAX IN DECLARE STATEMENT IN LINE NUMBER xxx. STATEMENT DELETED. E IEM4349I LABEL zzzz CANNOT BE DECLARED IN LINE NUMBER xxx. ANY REFERENCE WILL TERMINATE PROCESSING. User Response: Correct data set member name in INCLUDE statement. E IEM4325I RIGHT PARENTHESIS INSERTED AFTER MEMBER NAME IN LINE NUMBER xxx. T IEM4328I COMPILER ERROR. DICTIONARY INFORMATION INCORRECT. Explanation: An attempt has been made to declare an identifier which has already been used as a label. Explanation: A name containing an invalid character is found in the dictionary. System Action: terminat ed Processing S IEM4331I System Action: No action unless a statement is executed which references the declared label. is User Response: Save relevant data. Call your local IBM representative. E IEM4352I EXTRA PARENTHESIS LINE NUMBER xxx. E IEM4355I ILLEGAL ATTRIBUTE yyyy IN LINE NUMBER xxx. AT~RIBUTE HAS BEEN DELETED. DECLARE STATEMENT IN LINE NUMBER xxx IS ILLEGAL AFTER THEN OR ELSE. STATEMENT DELETED. EMPTY DECLARE STATEMENT IN LINE NUMBER xxx. STATEMENT DELETED. DELETED IN Explanation: Legal attributes are FIXED, CHARACTER, ENTRY and RETURNS. User Response: Correct program. A DECLARE statement can appear in the THEN or ELSE clause of an IF statement if it is inside a DO group. E IEM4332I IMPLEMENTATION RESTRICTION. FACTORING IN DECLARE STATEMENT IN LINE NUMBER xxx EXCEEDS 3 LEVELS. REMAINDER OF STATEMENT DELETED. System Action: The attribute is deleted. E IEM4358I illegal CLOSING RIGHT PARENTHESIS INSERTED IN LINE NUMBER xxx. Appendix G: Diagnostic Messages 255 E IEM4361I ATTRIBUTE OCCURRED RETURNS WITHOUT ENTRY ATTRIBUTE FOR PROCEDURE zzzz IN DECLARE STATEMENT AT OR BEFORE LINE NUMBER xxx. System Action: The attribute of the returned value is determined by the relevant PROCEDURE statement. E IEM4379I Explanation: Both ENTRY and RETURNS attributes must be declared for a compile-time procedure name. Explanation: An invalid attribute was found. System Action: The identifier is treated as an ENTRY name. If it is referenced, the arguments will be converted to the types declared for the procedure parameters. E IEM4364I E IElJl4367I System Action: No conversion to an ENTRY attribute will be carried out. However, if the relevant procedure is referenced. arguments will be converted to the types declared for the procedure parameters. NO ATTRIBUTES WERE DECLARED FOR IDENTIFIER zzzz IN DECLARE STATEMENT AT OR BEFORE LINE NUMBER xxx.. CHARACTER HAS BEEN ASSIGNED. E IEM4382I ATTRIBUTE CONFLICTS WITH PREVIOUS ATTRIBUTE FOR IDENTIFIER zzzz IN LINE NUMBER xxx. ATTRIBUTE IGNORED. RETURNS ATTRIBUTE NOT GIVEN FOR ENTRY NAME zzzz IN DECLARE STATEMENT AT OR BEFORE LINE NUMBER xxx. E IEM4383I PREVIOUS USAGE OF IDENFIFIER zzzz CONFLICTS WITH ATTRIBUTE IN LINE NUMBER xxx. ANY REFERENCE WILL TERMINATE PROCESSING. E IEM4391I OPERAND MISSING IN LINE NUMBER xxx. A FIXED DECIMAL ZERO HAS BEEN INSERTED. S IEM4394I ILLEGAL OPERATOR yyyy IN NUMBER xxx. IT HAS REPLACED BY A PLUS. ENTRY ATTRIBUTE DISAGREES WITH DECLARATION FOR FORMAL PARAMETER zzzz. THE LATTER HAS BEEN USED. W IEM4397I A LETTER IMMEDIATELY FOLLOWS CONSTANT yyyy IN LINE NUMBER xxx. AN INTERVENING BLANK HAS BEEN ASSUMED. Explanation: An ENTRY attribute in a DECLARE statement does not agree with the parameter attributes declared in the procedure. E IEM4400I OPERATOR .NOT. IN LINE NUMBER xxx USED AS AN INFIX OPERATOR. IT HAS BEEN REPLACED BY .NE. T IEM4403I COMPILER ERROR. SCAN OUT OF PHASE. Explanation: Both ENTRY and RETURNS attributes must be declared for a compile-time procedure name. System Action: The attribute of the returned value is determined by the relevant PROCEDURE statement. E IEM4370I System Action: If the relevant procedure is referenced~ the argument will be converted to the type declared for the formal parameter. E IEM4373I E IEM4376I RETURNS ATTRIBUTE IN LINE NUMBER xxx MUST BE PARENTHESIZED. PARENTHESIS INSERTED. ONLY FIXED OR CHARACTER ARE ALLOWED IN RETURNS ATTRIBUTE IN LINE NUMBER xxx. ATTRIBUTE IGNORED. Explanation: An illegal attribute was found. 256 ATTRIBUTE yyyy IS ILLEGAL IN ENTRY ATTRIBUTE IN LINE NUMBER xxx. NO CONVERSION WILL BE DONE. System Action: terminated. LINE BEEN EXPRESSION Processing is User Response: Save relevant data. Call your local IBM representative .• E IEM4406I PREVIOUS USAGE OF IDENTIFIER zzzz CONFLICTS WITH USE IN EXPRESSION IN LINE NUMBER xxx. System Action: Processing is terminated if an attempt is made to execute a statement which references the identifier in question .• S IEM4407I UNDECIPHERABLE KEYWORD. nnn IDENTIFIERS HAVE BEEN DELETED BEFORE yyyy IN LINE NUMBER xxx. T IEM4452I RECURSIVE USE OF PROCEDURE zzzz IN LINE NUMBER xxx IS DISALLm~ED. PROCESSING TERMINATED. Explanation: The processor has foun1 a mis-match while scanning a keyword consisting of more than one identifier. E IEM4454I TOO FEW ARGUMENTS HAVE BEEN SPECIFIED FOR THE BUILTIN FUNCTION SUBSTR IN LINE NUMBER xxx. A NULL STRING HA.S BEEN RETURNED. system Action: The identifiers nreceding the non-matching identifier are deleted. E IEM4457I TOO MANY ARGUMENTS HAVE BEEN SPECIFIED FOR THE BUILTIN FUNCTION SUBSTR IN LINE NUMBER xxx. EXTRA ARGUMEN~S HAVE BEEN IGNORED. E IEM4460I FIXED OVERFLOW HAS OCCURRED IN LINE NUMBER xxx. RESULT TRUNCATED. S IEM4409I OPERATOR MISSING IN LINE NUMBER xxx. A PLUS HAS BEEN INSERTED. S IEM4412I NO EXPRESSION WHERE ONE IS EXPECTED IN LINE NUMBER xxx. A F'IXED DECH1AL ZERO HA.S BEEN system Action: occurs on left digits. INSE~TED. S IEM4415I to Truncation 5 decimal ILLEGAL OPERAND yyyy IN LINE xxx HAS BEEN REPLACED BY A FIXED DECIMAL ZERO. E IEM4463I MISSING LEFT PARENTHESIS INSERTED AT BEGINNIN3 OF' EXPRESSION IN LINE NUMBER xxx. ZERO DIVIDE HAS OCCURRFD AT LINE NUMBER xxx. RESULT SET TO ONE. S IEM4469I REFERENCE IN LINE NUMBER xxx TO STATEMENT OR IDENTIFIER WHICH IS IN ERROR. PROCESSING TERMINATED. END-OF-FILE FOUND IMBEDDED IN STATEMENT IN LINE NUMBER xxx. EXECUTION OF STATEMENT WILL CAUSE TERMINATION. E IEM4472I IDENTIFIER BEGIW1ING zzzz IN STATEMENT AT LINE NUMBER xxx IS TOO LONG AND HAS BEEN TR.UNCATED. ~UBBER E IEM4421I T IEM4433I S IEM4436I EXCESS ARGUMENTS TO FUNCTION zzzz IN LINE NUMBER xxx. EXTRA ARGUMENTS HAVE BEEN DELETED. Expl~nation: ments appear reference. TN IEM4439I Identifiers may Explanation: not exceed 31 characters in length. Too many arguin a proc edure TOO FEW ARGUMENTS TO F'UNCTION zzzz IN LINE NUMBER xxx. r1ISSING ARGUMENTS HAVE BEEN ~EPL~CED BY FIXED DECIMAL ZEROS. Syste!!}_ Action: is truncated to characters. S IEM4473I Explanation: Too few arguments appear in a procedure reference. E IEIVJ4448I T IEM4451I PROCEDURE zzzz REFERENCED IN LINE NUMBER xxx CANNOT BE FOUND. PROCESSING TERMINATED. CONSTANT yyyy I~ LINE NUMBER xxx HAS PRECISION GREATER THAN 5. A FIXED DECIMAL ZERO HAS BEEN INSERTED. Explanation: Impleroentation restriction. ?recision of fixed decimal numbers is limited to 5 digits. NO ENTRY DECLARATION FOR PROCEDURE zzzz REFERENCED IN LINE NUMBER xxx. ATTRIBUTES TAKEN FROM PROCEDURE. All procedure Explanation: names must be declared with ENTRY and RETURNS attributes before the procedure is referenced. The identifier the first 31 System Action: is assigned. E IEM4475I A value of zero QUESTION MARK IN LINE NUMBER xxx HAS NO SIGNIFICANCE. IT HAS BEEN IGNORED Explanation: Question mark, although a recognizable character in PL/I, has no syntactical meaning. Appendix G: Diagnostic Messages 257 T IEM44781 STRING IN LINE NUMBER xxx CONVERTS TO A FIXED DECIMAL NUMBER WITH PRECISION GREATER THAN 5. PROCESSING TERMINATED. Explanation: Implementation restriction. Precision of fixed decimal numbers is limited to 5 digits. system Action: terminated Processing ddname is specified in the INCLUDE statement, a SYSLIB DD statement is required. User Response: Insert appropriate DD statement and recompile. T IEM4508I is T IEM44811 CHARACTER STRING IN LINE NUMBER xxx CONTAINS CHARACTER OTHER THAN 1 OR 0 AND CANNOT BE CONVERTED TO A BIT STRING. PROCESSING TERMINATED. T IEM44841 STRING IN LINE NUMBER xxx OR IN PROCEDURE REFERENCED IN SAID LINE NUMBER CANNOT BE CONVERTED TO A FrXED DECIMAL CONSTANT. PROCESSING TERMINATED. Us~~~: Check DD statement and reattempt compilation. If error persists, check computing system. T IEM45111 T IEM4499I A % STATEMENT IS FOUND IN A REPLACEMENT VALUE IN LINE NUMBER xxx. PROCESSING TERMINATED. T IEM4514I A replacement value may not contain a compile-time statement. AN IDENTIFIER zzzz WITH CONFLICTING USAGE OR MULTIPLE DEFI'NITIONS IS REFERENCED IN LI~~ NUMBER xxx. PROCESSING TERMINATED. W IEM45171 VARIABLE zzzz IS USED IN LINE NUMBER xxx BEFORE IT IS INITIALIZED. IT HAS BEEN GIVEN NULL STRING OR ZERO VALUE. BLOCKSIZE NOT SPECIFIED FOR INCLUDE zzzz IN LINE NUMBER xxx. BLOCKSIZE EQUAL TO RECORD LENGTH HAS BEEN ASSUMED. User Resp~: Correct blocksize specification in DD statement. if necessary. W IEM45231 DD STATEMENT FOR INCLUDE zzzz MISSING IN LINE NUMBER xxx. PROCESSING TERMINATED. Explanation: A DD statement must be present, in the Job Control cards for the compilation, with a name in the name field that corresponds to the ddname identifier in the INCLUDE statement. If no 258 RECORD LENGTH NOT SPECIFIED FOR INCLUDE zzzz IN LINE NUMBER xxx. RECORD LENGTH EQUAL TO BLOCKSIZE HAS BEEN ASSUMED. Correct program Explanation: A value must be assigned to variables before they are referenced after being declared. T IEM4505I Check INCLUDE statement and Us eE-_Bg§pQnse: Correct record length specification in DD statement, if necessary. W IEM45201 S IEM4504I MEMBER OF INCLUDE zzzz IN LINE NUMBER XX}{ NOT FOU NO ON DATA SET. PROCESSING TERMINATED. User Response: sta tement, DD data file. Expl~nation: An attempt is made to execute a statement which references an identifier that was not properly defined. User Response: ILLEGAL RECORD FORMAT SPECIFIED FOR INCLUDE zzzz IN LINE NUMBER xxx. PROCESSING TERMINATED. Explanation: Included records must be a fixed length of not more than 100 characters with a maximum blocking factor of 5. Rlocksize must be a multiple of tb~ record length. Expl~ation: T IEM45021 UNRECOVERABLE I/O ERROR WHILE SEARCHING FOR MEMBER OF INCLUDE zzzz IN LINE NUMBER xxx. PROCESSING TERMINATED. RECORD LENGTH AND BLOCKSIZE NOT SPECIFIED FOR INCLUDE zzzz IN LINE NUMBER xxx. RECORD LENGTH OF 80 AND BLOCKSIZE OF 400 HAVE BEEN ASSUMED. User Response: Correct record length and block size specifications in DD statement, if necessary. T IEM45261 I/O ERROR WHILE READING TEXT INCLUDED FROM zzzz AT LINE NUM- BER xxx. ATED. PROCESSING TERMIN- User Response: Check DD statement and reattempt compilation. If error persists, check computing system. T IEM4529I User Response: Save relevant data. Call your local IBM representative. E IEM4550I Explanation: The argument list referred to is in a source program reference to a compiletime procedure. IMPLEMENTATION RESTRICTION. EXCESSIVE LEVEL OF NESTING OR REPLACEMENT AT LINE NUMBER xxx. PROCESSING TERMINATED. T IEM4553I Explanation: Level of nesting in this case is calculated by summing the number of current unbalanced left parentheses, tta number of current nested DO'S, the number of current nested IF's, and the number of current nested replacements. A level of 50 is always acceptable. T IEM4532I E IEM4559I INPUT RECORD AT LINE NUMBER xxx IS TOO LONG. PROCESSING TERMINA.TED. INPUT RECORD CONTAINS FEWER CHARACTERS THAN SORMGIN REQUIRES. PROCESSING TERMINATED. E IEM4562I E IEM4570I THE THIRD A..~GUMENT OF BUILT-IN FUNCTION SUBSTR IS NEGATIVE, IN LINE NUMBER xxx. A NULL STRING HAS BEEN RETURNED. E IEM4572I THE THIRD ARGUMENT OF BUILT-IN FUNCTION SUBSTR EXCEE0S THE STRING LENGTH, IN LINE ~UMBER xxx. THE SUBSTRING HAS BEEN TRUNCATED AT THE END OF THE ORIGINAL STRING. E IEM4574I THE COMBINED SECO~-J'D AND THIRD ARGUMENTS OF BUILT-IN FUNCTION SUBSTR EXCEED THE STRING LENGTH, IN LINE NUMBER xxx. THE SUBSTRING HAS BEEN TRUNCATED AT THE END OF THE ORIGINAL STRING. E IEM4576I THE SECOND ARGUMENT OF BUILT-IN FUNCTION SUBSTR IS LESS THAN ONE, IN LINE NUMBER xxx. ITS VALUE HAS BEEN RESET TO ONE. ERROR. SUBSTR MUST BE A SINGLE WORD KEYWORD. COMPILE~ System Action: terminated Processing is User Response: Replace the multiple keyword with a single keyword and recompile the compiler. T IEM4547I COMPILER ERROR. SPACE FOR TABLES. system Action: terminated IDENTIFIER IN LINE NUMBER xxx EXCEEDS 31 CHARACTERS. REPLACEMENT WAS DONE ON TRUNCATED FORM zzzz. Explanation: A non-compiletime source text identifier consists of more than 31 characters. User Response: Check SORMGIN option on EXEC control card. Explanation: The keyword SUBSTR has been replaced, in the compiler tables, with a multiple keyword. The CompileTime Processor cannot handle this situation. LEFT PARENTHESIS BEGINNING ARGUMENT LIST OF PROCEDURE zzzz WAS NOT FOUND. PROCEDURE WAS INVOKED AT LINE NUMBER xxx WITHOUT ARGUMEN~S. Explanation: The argument list referred to is in a source program reference to a compiletime procedure. Explanation: The length of the input record is less than the left margin of the SORMGIN specification. T IEM4538I IN LINE NUMBER xxx ARGUMENT LIST FOR PROCEDURE zzzz CONTAINS COMPILE TIME CODE. PROCESSING TERMINATED. Exolanation: Compile-time code may not be embedded in arqument list of compile-time procedure reference. Explanation: Input record contains more than 100 characters. T IEM4535I RIGHT PARENTHESIS INSERTED IN LINE NUMBER xxx TO END ARGUMENT LIST FOR PROCEDURE zzzz. INSUFFICIENT Processing is Appendix G: Diagnostic Messages 259 E IEM4578I THE SECOND ARGUMENT OF BUILT-IN FUNCTION SUBSTR EXCEEDS THE STRING LENGTH, IN LINE NUMBER xxx. A NULL STRING HAS BEEN RETURNED. S IEM4580I AN UNINITIALISED VARIABLE H~S BEEN FOUND IN A BUILT-IN FUNCTION ARGUMENT LIST, IN STATEMENT NUMBER xxx. A NULL STRING HAS BEEN RETURNED. 'rtname' is the name of the Library routine in which the error occurred (given only for computational subroutines>. ~location User Response: Initialise variable before invoking built-in function. message' is either OFFSET ± hhhhh FROM E1 ENTRY POINT or the the OFFSET ± hhhhh FROM ENTRY POINT OF cccc ON-UNIT If it is a Model 91 message resulting from an imprecise interrupt, "AT OFFSET ••• " is replaced by "NEAR OFFSET ••• " since the instruction causing the interrupt cannot be precisely identified. ~ote: OBJECT-TIME DIAGNOSTIC MESSAGES The messages in the following text may be printed on the output data set specified for SYSPRINT, as the result of an exceptional or error condition occurring during the execution of a PL/I program. If the SYSPRINT DD statement is absent, then the object-time messages appear on the operator's console, except for the ON CHECK system action messages and the copy option output, which will not be produced at all in this case. Each message number is of the form IHEnnnI, where the code IHE indicates a PL/I library message, and nnn the number of the message. The final character I indicates the informative nature of the mes!:age. Diagnostic messages are printed at cution time for two main reasons: 1. 2. The diagnostic messages for other than ON-type errors are mainly self-explanatory. Explanations in the following lists are given only when the message is not selfexplanatory. IHE003I IHE004I 2. IHEnnnI rtname - text AT location message 3. IHEnnnI text AT location message where AT will IHEnnnI FILE name - text message location 'name' is the name of the file associated with the error (given only in I/O diagnostic messages) ERROR IN INTERRUPT IN ERROR PROGRAM TERMINATED HANDLER- Explanation: When an unexpected program interrupt occurs during the handling of another program interrupt, it indicates that the program has a disastrous error in it, such as DSA chain out of order, instructions overwritten, or such. The program is abnormally terminated, and the above message is printed out at the console. A dump is produced with a User Completion Code of 4000. An ON-condition is raised, by compiled code or by the Library, and the action required is system action_ for which the language specifies COMMENT as part of the necessary action. 1. SOURCE PROGRAM STATEMENT nnnnn This message will always contain a statement number whether or not the compiler option is specified. exe- An error occurs for which no specific ON-condition exists in PL/I. A diagnostic message is printed, and the ERROR ON-condition is raised. Object time diagnostic messages take one of the following forms: 260 If the statement number compiler option has been specified, each message will also contain IN STATEMENT nnnnn prior to AT location message. nnnnn gives the number of the statement in which the condition occurred. IHE005I PSEUDO-REGISTER VECTOR TOO LONG - PROGRAM NOT EXECUTED Explanation: This error arises when the sum of the number of procedures~ the number of files, and the number of controlled variables exceeds 1000. It causes return to the Supervisor from IHESAPi PL/I program is not entered. The message always appears at the console. A return code of 4004 is generated. IHE0061 NO MAIN PROCEDURE. TERMINATED. For output: programmer is trying to write more than his output string will hold. IHE0231 Explanation: The ERROR is raised, (i) upon return from a TRANSMIT ON-unit, if the device in error is other than a printer~ or (ii) if access to a file by RECORD I/O has been attempted after the TRANSMIT condition has been raised for output. IHEDUM*. NO PLIDUl-1P DD EXECUTION TERMINATED. CARD. IHE0241 Explanation: Execution has been abnormally terminated with a dump and a completion code of (3000 + Return Code (if set» IHE010I PROGRAM ENDED BY OS360. RETURN CODE = hhh (a hexadecimal number) • Explanation: The major task has been terminated abnormally by the operating system. The above message appears on the console. IHE0111 TRANSMIT PROGRAM Explanation: No external procedure in the program has been given the option MAIN. This message appears at the console. A return code of 4008 is generated. IHE0091 FILE name - OUTPUT ERROR NOT ACCEPTABLE KEY ERROR WHEN CLOSING FILE END OF TASK FILE name - PRIN~r OPTION/FORMAT ITEM FOR N CN-PRINT FILE Explanation: Attempt to use PAGE, LINE or SKIP:$ 0 for a non-print file. IHE0251 DISPLAY - MESSAGE OR REPLY AREA LENGTH ZERO Explanation: This message appears only if the REPLY option is exercised. IHE0261 FILE name - DATA DIRECTED INPUT - INVALID ARRAY DATUM AT Explanation: An unresolved key error exists for which no condition can now be raised. The above message appears on the console. Explanation: Number of subscripts on external medium does not correspond to number of declared subscripts. IHE0271 I/O Errors GET STRING DATA NAME UNRECOGNIZABLE Explanation: IHE018I FILE name - FILE TYPE NOT PORTED IHE020I FILE name OUTPUT FILE IHE0211 FILE name INPUT FILE IHE022I GET/PUT SIZE ATTEMPT ATTEMPT STRING SUP- 1. GET DATA - name of data item found in string is not known at the time of the GET statement, or 2. GET DATA data list - name of data item found in string is not specified in the list. TO READ TO WRITE EXCEEDS STRING IHE0291 FILE name OPERATION UNSUPPORTED FILE Explanation: For input: programmer has requested more than exists on the input string. Explanation: Programmer has executed an I/O statement with an option or verb not applicable to the specified file. Appendix G: Diagnostic Messages 261 For example: Explana tion: There has been a failure in an implicit OPEN operation .. I/O Option or-Verb -- File Attribute READ SETI LOCATE DIRECTI (SEQUENTIAL UNBUFFERED) IHE037I REGIONAL DIRECT LINESIZE I PAGESIZE STREA~ An intervening I/O statement occurs between a READ statement and a REWRITE statement referring to the same record. IHE038I UPDATE) FILE name - REWRITE/DELETE NOT IMMEDIATELY PRECEDED ~Y READ IHE03lI FILE name - INEXPLICABLE ERROR I/O IHE039I I/O ON-conditions FILE name - OUTSTA~ING FOR UPDATE EXISTS All these conditions may the SIGNAL statement. READ When a record is read from an INDEXE0 file which contains blocked records and which is open for DIRECT UPDATE. the record mllst be rewrittene Between the READ statement and the associated REWRITE statement, no other operation may be performed on the file. IHE034I IHElOOI IHEllOI FILE name - TOO MANY INCOMPLETE I/O OPERATIONS IHElllI VARIABLE IHE035I FILE name - EVENT ALREADY IN USE IHE036I FILE name - IMPLICIT OPEN FAILURE, CANNOT PROCEED raised Initiating ON-con1ition: Explanation: This message may be issued because the correct NCP value has not been specified or it may be due to incorrect source code. 0= be by FILE name - UNRECOGNIZABLE DATA NAME NAME 1. GET DATA - name of data item found on external mediQm is not known at the time of the GET statement, or 2. GET DATA data list - name of data item founj on external medium is not specified in the list. FILE name - NO COMPLETED READ EXISTS (INCORRECT NCP VALUE) Ex21anation: The number incomplete I/O operations equals the NCP value. 262 FILE name - ATTEMPT 'IO CLOSE FILE NOT OPENED IN CURRENT TASK Explanation: Data Management has detected some error in the current I/O operation, but has provided no furtherietails. Expla~ation: IHE033I FILE name - ENDFILE FOUND UNEXPECTEDLY IN MIDDLE OF DATA ITEM. ExplanaiiQQ: The ERROR condition is raised when end-of-file is encountered before the delimiter when scanning listdirected or data-directed input, or if the field width in the format list of editdirected input would take the scan beyond the end-of-file. (INPUT I IHE030I IHE032I REWRITE EXDlanatiQ~: (SEQUENTIAL REWRITE (without FROM) I I NPur \ OUTPUT \ UPDATE) \ EXCLUSIVE I (DIRECT INPUT \ UNLOCK \ OUTPUT) (READ NOLOCK) KEYTO FILE name - ATT~MPT TO OUT OF SEQUENCE FILE name - RECORD SIGNALED FILE S~~LLER CONDITION name - RECORD VARIABLE THAN RECORD SIZE Explanation: The variable specified in the READ statement INTO option allows fewer characters than exist in the record. F format records: a WRITE statement attempts to put a record smaller than the record size. All formats: a REWRITE attempts to replace a record with one of smaller size. (Note~ This condition cannot ~detected for Uformat records read for UNBUFFERED or DIRECT files.) IHE1121 FILE name - TRANSMIT CONDITION SIGNALED IHE1301 FILE name - KEY CONDITION NALED IHE1311 FILE name - KEYED FOUND ATTEMPT TO WRITE/LOCATE LENGTH RECORD RECORD SIGNOT Explanation: READ, REWRITE, or DELETE statement specified record key which 10es not match with records of data set. If REGIONAL (2) or (3) data sets are employed, and the DD statement pararreter LIMCT is used, then the record does not exist within the number of records or tracks searched, but may exist elsewhere. FILE name - RECORD VARIABLE LARGER THAN RECO~D SIZE Explanation: The variable specified in the READ st~tement INTO option requires more characters than exist in the record: or a WRITE statement attempts to put out a record gr~ater than the available record size; or a REWRITE statement attempts to replace a record with one of greater size. IHE1131 IHE1221 IHE1321 FILE name - ATTEMPT DUPLICATE KEY TO ADD Explanation: WRITE statement specified a key value which already exists within data set. ZERO Explanation: A WRITE or REWRITE statement attempts to put out a record of zero length, or a LOCATE statement attempts to get buffer space for a record of zero l~ngth; such records are used for end-of-file markers for direct access storage devices. IHE1331 1. INDEXED data sets: detected for both SEQUENTIAL and DIRECT access. 2. REGIONAL data sets: detected only for REGIONAL (1) and (2) SEQUENTIAL output. FILE name - KEY SEQUENCE ERROR Explanation: IHE114I FILE READ wRITE statement during creation of data set (OUTPUT SEQUENTIAL), a key which for: specifi~d, name - ZERO LENGTH RECORD Explanation: A record of zerO length has been read from a REGIONAL data set accessed in the DIRECT mode. This shoUld not occur, unless the data· set was created by another processor. A zero length record, on a direct access device, is an end-ai-file signal. IHE1201 FILE name - PERMANENT ERROR INPUT IHE134I Initiating ON-CONDITION: TRANSMIT FILE name - PERMANENT ERROR OUTPUT ExplCj.nation: Initiating ON-condition: TRANSMIT INDEXED data sets is lower in binary. collating sequence than prior key 2. REGIONAL data sets the relative record/track value is .lower than that of prior key. FILE ERROR name - KEY CONVERSION Explanation: WRITE, READ, REWRITE., or DELETE statement for REGIONAL data set soecified character string key value whose relative record/track partition contains characters other than blank or the digits o through 9, or which contains only the character blank. Explanation: IHE1211 1. 1HE135! FILE name - KEY ERROR SPECIFICATION Appendix G: Diagnostic Messages 263 Explanation: 1,. 2. ExPlanation: INDEXED: the KEYFROM or KEY expression may be the NULL string. Alternatively, RKP does not equal zero and the embedded key is not identical with that specified by the KEY FROM option (or the KEY option in the case of a rewrite statement). A third possibility is that an attempt has been made during SEQUENTIAL UPDATE to replace a record by one whose embedded key does not match that of the original record. FILE name - KEYED RECORD/TRACK OUTSIDE LIMIT FILE name - NO SPACE TO ADD KEYED RECORD AVAILABLE Explanation: WRITE statement attempted to add record, but data set was full. If REGIONAL (2) or (3) data set, condition is raised if space within optional limits (DD parameter LIMCT) is unavailable. IHE140I IHE150I Attribute Conflicting Attributes PRINT INPUT" UPDATE, RECORD, DIRECT, SEQUENTIAL, BACKWARDS. BUFFERED, UNBUFFERED, EXCLUSIVE. KEYED STREAM UPDATE, RECORD, DIRECT, SEQUENTIAL, BACKWARDS, BUFFERED, UNBUFFERED, EXCLUSIVE. KEYED EXCLUSIVE INPUT, OUTPUT, SEQUENTIAL, BACKWARDS. BUFFERED, UNBUFFERED DIRECT SEQUENTIAL, BACKWARDS, BUFFERED, UNBUFFERED UPDATE INPUT, OUTPUT., BACKWARDS OUTPUT INPUT, BACKWARDS BUFFERED UNBUFFERED RELATIVE DATA SET Explanation: WRITE, READ, REWRITE, or DELETE statement for REGIONAL data set specified a key whose relative record/track value exceeds the number of records or tracks assigned to the data set. IHE137I There is a conflict between the declared PL/I file attributes. For example: REGIONAL: as for INDEXED, or initial character of KEY or KEYFROM expression value is the value (8) ' l l1 B. IHE136I Initiating ON-condition: UNDEFINEDFILE Some attributes may have been supplied when a file is opened implicitly. Example of attributes implied by I/O statements are: I/O Statement Implied Attributes FILE name - END OF FILE ENCOUNTERED DELETE RECORD" UPDATE Explanation: GET INPUT Initiating ON-condition: END FILE LOCATE RECORD, OUTPUT, SEQUENTIAL, BUFFERED PUT OUTPUT READ RECORD, INPUT REWRITE RECORD, UPDATE UNLOCK RECORD, DIRECT, FILE name - CANNOT NO DD CARD BE OPENED, DIRECT, Explanation: Initiating ON-condition: UNDEFINEDFILE UPDATE, EXCLUSIVE IHE151I 264 FILE name - CONFLICTING DECLARE AND OPEN ATTRIBUTES WRITE RECORD, OUTPUT In turn, certain attributes may imply other attributes: Attribute ImQlied Attributes BACKWARDS RECORD., SEQUENTIAL, INPUT BUFFERED Block size not specified on DD card" nor on environment. However. will never occur for PRINT file, because default block size is assumed. IHE154I FILE name - UNDEFINED FILE CONDITION SIGNALED IHE155I RECORD, SEQUENTIAL FILE name - ERROR REGIONAL DATA SET DIRECT RECORD, KEYED Exolanation: EXCLUSIVE RECORD, KEYED" DIRECT. UPDATE Initiating ON-condition: UNDEFINEDFILE KEYED RECORD PRINT OUTPUT, STREAM A REGIONAL data set, opened for DIRECT OUTPUT, cannot be properly formatted during the open process. INITIALIZING SEQUENTIAL RECORD IHE156I UNBUFFERED RECORD, SEQUENTIAL FILE name - CONFLICTING ATTRIBUTE AND ENVIRONMENT PARAMETERS UPDATE Explanation: RECORD Finally, a group of alternate attributes has one of the gro?p as a default. The default 1S implied if none of the group is specified explicitly or is implied by other attributes or by the opening I/O statement. The groups of alternates are: Initiating ON-condition: UNDEFINEDFILE Examples of conflicting parameters N~ME block size is assumed. are: ENVIRONMENT Parameter No file organization parameter STREAM I RECORD STRE~M INPUTIOUTPUTIUPDATE INPUT SEQUENTIAL I DIRECT (RECORD files) SEQUENTIAL BUFFERED I UNBUFFERED (SEQUENTIAL files) BUFFERED File Attribute KEYED INDEXEDIREGIONAL STREAM IHE152I FILE name - FILE TYPE NOT PORTED SUP- DIRECTI EXCLUSIVE INDEXED DIRECT OUTPUT INDEXEDIREGIONAL OUTPUT without KEYED EXJ?lanation: Blocked records Initiating ON-condition: UNDEFINED FILE V-format records BACKWARDS IHE157I The user has attempted to associate a paper-tape device with a file that does not have the INPUT attribute. IHE153I CONSECUTIVE FILE name - BLOCKSIZE NOT SPECIFIED EXQlanation: Initiating ON-condition: UNDEFINED FILE UNBUFFERED FILE name - CONFLICTING ENVIRONMENT AND/OR DD PARAMETERS EXQlanation: Initiating ON-condition: UNDEFINEDFILE One of the following conflicts exists: 1. F-format records have been specified for Appendix G: Diagnostic Messages not an 265 INDEXED" REGIONAL(1), or REGIONAL ( 2> file. 2. IHE158I Blocked records have been specified with a REGIONAL file. IHEi61I F-format records 32758 V-format records 32750 FILE name - CONFLICTING ,ATTRIBUTE AND DD PARAMETERS FILE name - KEYLENGTH NOT SPECIFIED Explanation: Explanation: IHE159I Initiating ON-condition: UNDEFINEDFILE Initiating ON-condition: UNDEFINED FILE A keylength has not been specified for an INDEXED, REGIONAL(2), or REGIONAL (3) file that is being opened for OUTPUT. The user has attempted to associate a file with the BACKWARDS attribute with a device that is not a magnetic tape device. FILE name - INCORRECT BLOCKSIZE AND/OR LOGICAL RECORD SIZE IN STATEMENT NUMBER xxx IHE200I rtname - X Initiating ON-condition: UNDEFINED FILE IHE202I rtname - X LT 0 IN LOG2(X) OR LOG10(X) IHE203I rtname - ABS(X) GE (2**50)*K IN SIN(X) OR COS (X) (K=PI) OR SIND (X) OR COSD (X) (K=180) IHE204I rtname - ABS(X) GE (2**50>*K IN TAN (X) (K=PI) OR TAND(X) (K=180) IHE206I rtname- X=Y=O IN ATAN(Y,X) AND ATAND(Y,X) IHE20MI rtname ... ABS(X) ATANH(X) IHE209I rtname - IHE210I rtname - X=O, REAL IN X**Y IHE2111 rtname - Z=+I OR -I IN ATAN(Z) OR Z=+l OR -1 IN ATANH(Z) IHE212I rtname - ABS(X) GE (2**18)*K IN SIN(X) OR COS (X) (K=PI) OR SIND(X) OR COSO(X) (K=180) IHE213I rtname ... ABS(X) GE (2**18)*K IN TAN (X) (K=PI) OR TAND(X) (K=180) 1. F-format records a. b. 2. The specified block size is less than the logical record length. The specified block size is not a multiple of the logical record length. LOGeX) OR V-format records a. b. The specified block size is less than the logical record length + 4. The logical record length is less than 14 for a RECORD file or 15 for a STREAM file. FILE name - LINESIZE THAN IMPLEMENTATION MAXIMUM LENGTH GREATER DEFINED Explanation: Initiating ON-condition: UNDEFINED FILE The implementation-defined maximum linesize is: 266 LT 0 IN SQRT(X) Explanation: One or the following situations exists: IHE160I QQIDPutational Errors X=O~ GT 1 IN Y LE 0 IN x**y Y NOT POSITIVE List of Routine Names exponent of a floating-point number exceeds the permitted maximum, as defined by implementation. IHESQS Short float square root IHELNS Short float logarithm IHETNS Short float tangent IHEATS Short float arctan IHESNS Short float sine ana cosine IHEHTS Short float hyperbolic arctan IHESQL Long float square root IHELNL Long float logarithm IHETNL Long float tangent IHEATL Long float arctan IHESNL Long float sine and cosine IHEflTL Long float hyperbolic arctan IHEXIS Short float integer exponentiation IHEXIL Long float integer tion IHEXXS Short float general exponentiation IHE310I Explanation: This condi t~ion is raised~ by Library routines or by compiled code. when assignment is attempted where the number to be assigned will not fit into the target field. This condition can be raised by allowing the fixed overflow interrupt to occur on account of SIZE. If associated with I/O, then "FILE name" will be inserted between the message number and the text. IHE320I exponentia- IHEXXL Long tion IHEXIW Short float complex exponentiation integer IHEXIZ Long float complex exponentiation integer IHEXXW Short float complex exponentiation general IHEXXZ Long float complex exponentiation general IHEATW Short float complex arctan hyperbolic arctan IHEATZ Long float complex arctan and hyperbolic arctan ZERODIVIDE Explanation: This condition is raised. by Library routines or by compiled code, when an attempt is made to divide by zero, or when the quotient exceeds the precision allocated for the result of a division. The condition can be raised by hardware interrupt or by special coding .• float general exponentia- IHE340I UNDERFLOW Explana~ion: This condition is raised. by Library routines or by compiled code., when the exponent of a floating-point number is smaller than the implementation-defined mimimum. The condition does not occur when equal floating-point numbers are subtracted. and IHE350I STRINGRANGE ON-Conditions All these conditions may the SIGNAL statement. IHE300I FIXEDOVERFLOW Explanation: This condition is raised. by Library routines or by compiled code, when the result of a fixed-point binary or decimal operation exceeds the maximum field width as defined by implementation. IHE330I ~utational SIZE be raised Explanation: This condition is raised by library routines when an invalid reference by the SUBSTR built-in function or pseudo-variable has been detected,. by OVERFLOW Explanation: This condition is by Library routines or by compiled code, when the raised~ IHE360I AREA CONDITION RAISED IN CATE STATEMENT Appendix G: Diagnostic Messages ALLO- 267 Explanation: There is not enough room in the area in which to allocate the based variable. IHE3611 CONDITION AREA RAISED ASSIGNMENT STATEMENT IN Explanation: There is not enough room in the area to \-lhich the based variable is being assigned. IHE3621 AREA SIGNALED Structure and IHE3801 Errors Associated with Tasking The following errors are associated with execution of the CALL. R~D. or WRITE statement with TASK option; with the WAIT statement; with the use of TASK or EVENT variables; with the PRIORITY pseudovariable or built-in function; or with the COMPLETION pseudo-variable. IHE5501 ATTEMPT TO WAIT ON AN AND INCOMPLETE EVENT IHE5511 TASK VARIABLE ALREADY ACTIVE ExPlanation: Task variable is already associated with an active task. Array~rrors IHESTR - STRUCTURE OR LENGTH GE 16**6 BYTES ARRAY IHE5521 IHESTR VIRTUAL ORIGIN ARRAY GE 16**6 OR LE -16**6 OF Explanation: During the mapping of a structure, the address of the element lt1i th zero subscripts in an array, whether it exists or not, has been computed to be outside the range (-16**6 to +16**6). Control Program DELAY STAT~MENT EXECUTED - NO TIMER FUNCTION IN SYSTEM IHE4011 TIME STATEMENT EXECUTED - NO TIMER FUNCTION IN SYSTEM Cond i tion Type ON-Conditions CONDITION Explanation: This condition is raised by execution of a SIGNAL (identifier) statement, referencing a programmer-specified EXTERNAL identifier. 268 WAIT ON MORE PLE'l'E EVENTS IHE5541 ACTIVE EVENT VARIABLE AS ARGUMENT TO COMPLETION PSEUDOVARIABLE IHE5551 INVALID ARGUMENT VARIABLE THA~ 255 INCOM- TASK VARIABLE AS TO PRIORITY PSEUDO- ExplaD~tion: The task variable specified was active and not associated with the current task or one of its immediate subtasks. IHE5561 EVENT VARIABLE ACTIVE ASSIGNMENT STATEMENT IHE5571 EVENT VARIABLE ALREADY ACTIVE IN Event variable is already associated with an active task. Explanati2~: SUBSCRIPTRANGE Explanation: This condition is raised~ by library routines or by compiled code, when a subscript is evaluated and found to lie outside its specified bounds. or by the SIGNAL statement. IHE5011 IHE5531 ~est~ict~ons IHE4001 IHE5001 EVENT ALREADY BEING WAITED ON Explanation: During the execution of a WAIT statement, in order to complete the required number of events, an event must not be waited on which is already being waited on in another task. Explanation: During the mapping of a structure or array, the length of the structure or array has been found to be greater than or equal to 16**6 bytes. IHE3811 INACTIVE IHE5581 ATTEMPT TO WAIT ON AN I/O EVENT IN WRONG TASK Explanation: An 1/0 event can be waited on only in the same task as the statement which initiated the I/O operation with which the event is associated. In the messages, number. following group of hhh is a hexadecimal COM- list and a conversion error occur. is likely to IHE5711 TASK (name) TERMINATED. PLETION CODE= hhh. IHE5721 TASK (name) TERMINATED. COMEVENT PLETION CODE hhh .• VARIABLE OVERWRITTEN OR DESTROYED. IHE600I CONVERSION CONDITION SIGNALED IHE6011 CONVERSION INPUT ERROR IN F-FORMAT IHE5731 TASK (name) TERMINATED. COMPLETION CODE = hhh. TASK VARIABLE OVERWRITTEN OR DESTROYED. IHE6021 CONVERSION INPUT ERROR IN E-FORMAT IHE603I IN B-FORMAT TASK (NAME) TERMINATED. COMPLETION CODE hhh. INVALID FREE STATEMENT. CONVERSION INPUT ERROR IHE574I IHE6041 ERROR IN CONVERSION FROM CHARACTER STRING TO ARITHMETIC IHE6051 ERROR IN CONVERSION FROM CHARACTER STRING TO BIT STRING IHE606I ERROR IN CONVERSION FROM CHARACTER STRING TO PICTURED CHARACTER STRING IHE6071 CONVERSION ERROR INPUT (DECIMAL) IN P-FORMAT IHE608I CONVERSION ERROR INPUT in a parameter description within the GENERIC attribute, is not permitted. of List Processing, Table Handling 4 and Locate-Mode Input/Output Facilities The CELL attribute is not permitted. The SECONDARY Attribute The SECONDARY attribute will be recognized but ignored. Appendix H: Language Features not supported in the Fourth Version 273 The NORMAL and ABNORMAL Attributes 2. The attributes NORMAL and ABNORMAL are not implemented. If declared# they will be ignored. It must be the upper bound of the leading dimension (including inherited dimensions) of the element with which it is declared. 3. The structure member with which the bound is declared must be, or must contain, the last base element in the structure,. BASED Variables For exampl e: DeL 1 PARTS LIST BASED (P), 2 FIRM NAME CHAR (40), 2 REF NO FIXED BINARY, 2 FIRM ADDRESS, 3 STREET TOWN CHAR (50), 3 COUNTRY CHAR (30), 2 STOCK (20: N REFER( REF NO), 100: 200 >., 3 NUMBER, 4 HERE FIXED (10,0). 4 ORDERED" 5 PROVISIONAL FIXED (10,0), 5 CONFIRMED FIXED (10,0), 3 COST FIXED (5,,0); The pointer variable explicitly or implicitly qualifying a based variable must be a non-based unsubscripted scalar pointer identifier. The BASED attribute must be followed by a pointer identifier in parentheses. The OFFSET attribute must be followed by an identifier in parentheses. The variable named in the OFFSET attribute must be an unsubscripted level 1 based area. Offset variables may not be used in any SET option or in any explicit or implicit rased variable qualifier. A based variable may not have the INI'IIAL attribute. A based label array cannot be initialized by means of subscripted label prefixes. Based structure with one adjustable-length bit or character string: This is permitted only when there are no adjustable array bounds in the structure. The string must conform to the following rules: 1. It must be scalar. 2. It must be the structure. 3. The length form: last must be element in the declared in the A based structure can have either: X REFER (Y) 1. One adjustable array round, or 2. One adjustable-length bit or character string. where X and Yare as described above. For exampl e: Based structure with one adjustable array bound: This is permitted only when there are-Do adjustable strings in the structure. The bound must conform to the following rules: 1. It must be of the form: DCL 1 TYPE OF HOUSE BASED (P) " 2 NUMBER:=O(=FLOORS FIXED (2,0)" 2 AREA FIXED BINARY, 2 RATES_CODE CHAR (N REFER (AREA»; Note: Pointer and AREA data types ALIGNED. must be X REFER (Y) where X is an unsubscripted fixed binary variable of default precision. and Y is an unsubcripted fixed binary variable, of default precision, which is: (a) part of the structure, and (b) not associated with an explicit pointer qualifier. 274 OFFSET and POINTER Built-In Functions The OFFSET and POINTER built-in functions cannot be specified explicitly. However~ if the value of an offset variable is assigned to a pointer variable, or a pointer value to an offset variable. the necessary conversion is implicit in the assignment. Based Variable Declaration ONCOUNT Built-In Function A pointer variable must be included in a cased variable declaration. (This is the pointer that will be set in the absence of a SET option from a LOCATE or an ALLOCATE statement referring to the based variable.) This function is supported Model 91 requirements. only Appendix H: Language Features not supported in the Fourth Version for 275 APPENDIX I: MODEL 91 When using the (F) Compiler to produce cbject programs for execution on a System/360, Model 91 the option M91 must be specified .. In the following discussion, the terms exception and interrupt are used. An exception is a hardware occurrence (such as an overflow error) which can cause a program interrupt. An interrupt is a suspenEion of normal program activities. There are many possible causes of interrupts, but the following discussion is concerned only with interrupts resulting from hardware exceptions. The Model 91 is a high-speed processing system in which more than one instruction is executed concurrently. As a result, an exception may be detected and an interrupt occur when the address of the instruction which caused the exception is no longer held in the central processing unit. Consequently, the instruction causing the interrupt cannot be precisely identified. Interrupts of this type are termed imprecise.. When an exception occurs, the machine stops decoding further instructions and ensures that all instructions which ¥ere decoded prior to the exception are executed before honoring the exception. Execution of the remaining decoded instructions may result in further exceptions occurring. An imprecise interrupt in which more than one exception has occurred is known as a multiple-exception imprecise jnterrupt. When the M91 option is used, the compiler and library permit processing of imprecise interrupts. When the M91 following occurs: 1. 276 Before a REVERT statement. c. Before compiled code SIZE condition. d. Before compiled prefix options. e. For a null statement. {This feature provides the programmer with source language control over the timing of program interrupts.} f. Before every statement of the STMT option (in the PARM field of the EXEC statement) is used. (This is an important debugging tool.) code to set to the change An external symbol dictionary (ESD) entry is created for the PL/I library module IHEM91, which is required only when an object program is to be executed on a Model 91. The module is included when the object module is link-edited, and it is called when an imprecise interrupt is detected. Module IHEM91 provides the facilities for: a. Detecting mUltiple-exception impreci.se interrupts. b. Setting the value that is returned by the ONCOUNT built-in function. c. Raising the appropriate PL/I conditions. The order of processing is as follows: the exceptions option is specified, the The compiler inserts 'no-operation' instructions at certain points in the program to localize imprecise interrupts to a particular segment of the program, thus ensuring that interrupt processing results in the action specified in the source program. (A 'non-operation' instruction is an Assembler Language 'flush' instruction of the form BCR x,O, where x is not equal to zero. This instruction is implemented in the Model 91 in such a way that its execution is delayed until all previously decoded instructions have been executed.) The situations in which the I no-operation' instructions are generated are: a. 2. b. Before an ON statement. 1. PL/I conditions in the order: UNDERFLOW FIXEDOVERFLOW or SIZE ERROR if system action is required for either FIXEDOVERFLOW or SIZE OVERFLOW ERROR if system action is required for OVERFLOW ZERODIVIDE ERROR if system action is required for ZERODIVIDE Note: The conditions FIXEDOVERFLOW and SIZE cannot occur together since the same hardware condition raises both of them. 2. Hardware exceptions in the order: messages will be printed to indicate the nature of the unprocessed exceptions. The exceptions themselves will not be processed. data specification addressing protection Conditions and exceptions are raised in the above order until one of the following situations occurs: 1. A GO TO statement arising out of an ON-unit is executed. All other exceptions will then be lost,. 2. The ERROR condition is raised. If the program is terminated as a result of this action (i.e. " system action causing the ERROR condition to be raised" followed by the FINISH condition> " When an interrupt results from multiple exceptions" only one of the PL/I conditions is raised for each type of exception that has occurred. When a multiple-exception imprecise interrupt occurs, the ONCOUNT built-in function provides a binary integer count of the number of exception types" including the current one. remaining to be processed. (The count does not include PL/I ON conditions.) If the ONCOUNT function is used when only a single exception has occurred, or if it is used outside an ON-unit, a count value of zero is indicated,. Programs compiled with the M91 option can be executed on other System/360 models supported by the system/360 Operating System. Apendix I: Model 91 277 278 * PROCESS statement •••••• '••• '..... '. • • • • •• 30 ABNORMAL attr ibute •• ~ ....... '....... '. • ••• 273 ADV, format of ••• ~ ••• : •••••••••••••••• 162 aggregate length table .~ ••••••••••••••• 35 ALIAS linkage editor statement ••• '•• '•••• 44 ALIGNED),UNALIGNED attributes ••••••• 14,103 See also structure mapping ••••• '. • •• 164 alignment of FIXED and FLOAT BINARY variables 126 alignment attributes, use of •••••••••• 122 area data, format of •••••••••••••••••• 139 area dope vector '.'............. '••••••••• 161 AREA ON-unit, exit from ••••••••••••••• 112 AREA, size of .......................... 151 AREA storage allocation and release 174-175 arguments, method ofpr~senting ••••••• 161 array arithmetic - programming hints •• 111 array assignment .'.'•••••• '•••••••••••••• 109 array dope vector, format of •••••••••• 162 array expressions - nesting levels • '. •• 150 array or structure elements matching with EDIT-directed format lists •••••••••• '•• '••••••• ,. • • • • • • • •• 113 arrays listed at~ributes .................... 33 order of transmission •••••••••••••• 113 arrays bounds permitted •• ,•• ,•• '.......... 149 arrays, format of ••••••••••••••••••••• 140 ASA carriage control character ••••••••• 68 assembler subroutine variable-length argument list for ••• 82 assignment of variables ••••••••••••••• 107 aSS1Qnment, efficient multiple assignments '•••• '............ ,•••• '. '. .. • • •• 117 assignment to VARYING string •••••••••• 111 assignments of variables programming hints •••••••••••••• 109,126 ATTACH macro •••• '. '•••• '........ '.... ,••••• 186 ATRINOATR option ••••••••• '. • • • • • • • • • • • •• 26 attribute arid cross reference table • '••• 33 example ••••••••••••••••••••••••••••• 34 attribut~s, declaration of •• ~ ••••••••• 105 attributes, factoring of •••••••••••••• 149 AUTOMATIC variables, declaration •••• ,. 105 'O. BACKWARDS attribute •• '. • • • •• • • • • • • • •• 51,70 based variables allocation •••••••••••• 115 based variables using REFER forcing correct boundary alignment • 156 batched compilation .; ,. ,•••••••• '•••••••••• 30 programming example ••••••••••••••••• 31 batched compilation output data sets ••• 24 BCD/EBCDIC option •••• '....... '. '. '. • • • • • • • •• 27 BEGIN blocks, use of ••••••••••••• '••••. 115 binary data alignment ••••••••••••••••• 126 BIT data •••••••••••••••••••••••••••••• 137 BIT strings, efficient use of ••••••••• 117 BLKSIZE for blocked INDEXED data sets ••••• '.. 71 BLKS I ZE DCB subparameter ••••• '. • • • .. .. • • •. 59 block initialization prologues and epilogues •••••••••••• 159 block invocation recursive invocation count pseudo-register •• '........... '. • ..... • •• 36 block management at run-time •••••• 158-160 block nesting, limits ............... '. '. •• 149 block size for records .................. 61 block size, maximum ••• ,.................. 142 blocks in a compilation ••••••••••••••. 149 bounds permitted for arrays ••••••••••• 149 BUFFERS option 143-144 buffers, number of • '......... '••••••• ,. '•••• 65 BUFNO DCB sUbparameter ••••••••••••••••. 59 'O • • • • • • • • • • • • • • • • '• • • CALL macro ••• '. '••• ,........... 186 calling sequence between modules •••••• 160 card reader/punch mode ••••••••••••••.•• 66 card reader/punch stacking .............. 66 cataloged data sets ..................... 19 definition of ......... '••• 17 cataloged procedures, use of ••••••••••• 48 PLl DFC •••••• '..... ,. • • • • • • • ... • .. •• 183 , 19, 49 PLl LFC ......... '. ... • •• • • • •• • • •• 183,19, 49 PL1LFCL •••••••••••••••••••••• 183,19,49 PL1LFCLG •••••••• oO • • • • • • • • • • • • 184,19,50 PLl L FLG '••• ,•••••• ,•• '. '...... ,. • • •• 18 4 , 19, 50 CELL attribute ............................ 273 chained scheduling ........................ 65 CHANGE linkage editor statement ......... 44 changes at Fourth version# Release 17 •• 13 channel programs, number of •••••••••••• 65 character code for object program ••••• 142 CHARAC'r ER data .......... '•••••••• '. • • • • •• 137 CHARACTER PICTURE data •••••••••••••••• 137 CHAR60lCHAR48 OPTION .................... 28 CHECK condition •• '..... '.'•• '••• '•••• 154 for DATA-directed 1/0 •••••••••••••• 153 CHECK lists, maximum number of items •. 153 checkpoint/restart .................... 83-87 CM See external symbol dictionary COBOL option •••••••••••••••••••••••••• 144 COBOL structures length of ••••••••••••• 35 COBOL-PL/I data interchange •.••••••••. 103 CODE DCB subparameter for paper tape ••• 65 coded arithmetic data ••••••••••••••••. 135 collating sequence •••••••••••••••••••• 154 COLUMN, used for non-PRINT file ••••••• 142 communication between object modules ••• 81 COMP/NOCOMP option ...................... 29 compatibility between versions of the compiler •••• 14 expression evaluation - concatenation 14 multitasking •••••••.• '••••••••••• '••••• 14 PACKED now removed from the language 14 RECURSIVE procedures ........ '•• '. • .. • • • •• 14 REENTRANT procedures •••••••••••••••. 14 structure mapping •••••••••••••••• 14-15 compilation job control •••••••••••••••• 30 compilation speed improvements • '. • •• • •• 115 compile-time facilities ••••••••••••••• 123 compile-time processor ............. 147-148 D • • ... 'D • • • • ... 'D •• • •• • .. • • •• • • , . '• • • Index 279 compile-time processor, listing of input 32 additional data in cols 73-80 of output ••••••••••••••••••••••••••••• 33 compiler compatibility between different versions ••••••••••••••••••••••••••• 14 compiler completion codes ••••••••••• 30 features of different versions ••. 11-14 summary of Release 17 changes ••••••• 13 compiler ddnames ••••••••••••••••••••••. 20 compiler interface with the supervisor • 79 compiler options •••••••••••••••••••• 14,24 compiler options, listing of ••••••••••• 32 compiler output ••••••••••••••••••••• 31-40 aggregate length table •••••••• : ••••• 35 attribute and cross reference table • 33 external symbol dictionary ESD listing •••••••••••••••••••••••••••. 36 source program listing •••••••••.•••• 32 STATIC I!~TERNAL storage map ••••••••• 37 compiler phases, language features calling particular optional phases ••• 115 compiler processing ..................... 20 compiler storage requirements •••••••••. 23 compiler-generated names, number of ••• 150 compiler-input/output blocking ••••••••. 23 COMPLETION built-in function •••••••••• 153 COMPLETION pseudo-variable •••••••••••• 153 completion codes for abnormal step termination •••••• 133 for batched compilation .•••••••••••• 31 for the compiler •••••••••••••••••••. 30 COMPLEX FIXED BINARY data ••••••••••••• 136 COMPLEX FIXED DECIMAL data ••••••••.••• 136 COMPLEX FLOAT BINARY data ••••••••••••• 136 COMPLEX FLOAT DECIMAL da ta .............. 136 compound source statement numbering •••• 32 concatenation of data sets •••••••••••• 155 concatenation, priority of ••••••••••••• 14 condition prefixes, scope of •••••••••• 127 conditional job step execution ••••••••. 83 CONSECUTIVE data set access •••••••••••• 70 CONSECUTIVE data set creation •••••••••. 70 CONSECUTIVE data set language features . 52 CONSECUTIVE data sets •••••••••••••••••. 51 CONSECUTIVE organization •••••••••••••• 143 constants returned by procedures •••••• 150 constants, floating-point, size of •••• 150 constants, precision and length •• ,••••• 150 constants, sterling ••••••.••••••••••••• 150 constants, string, size of •••••• '•••.•• 150 control program options •••••••••••••••• 78 control record for batched compilation • 31 control sections procedure invoc,ation ••••••••••••••• 160 section definition for IHEMAIN •••••. 37 section definition for IHENTRY •.•••• 37 control variables in DO-groups •••••••• 127 CONVERSION ON condition ••••••••••••••• 154 CONVERSION ON-un its .................... 112 conversions hints for efficient execution •• 116-117 programming hints •••••••••••••••••• 108 supported by in~line code •••••• 118-120 CSECTS See control section CTLASA option •••••••• '••••••.•••••••••••• 68 CTLASA record I/O control characters •• 144 280 CTL360 option •••••••••••••••••••••••••• 68 CTL360 record I/O control characters •• 144 cyclinder overflow area •••••.•••••••••• 67 CYLOFL subparameter ....................... 67 data aggregates - programming hints ••• 111 data attributes for efficient execution •..•••••••••• 116 data control block DCB parame·ter ••••.•• 46 DATA directed I/O, CHECK condition •••• 153 data element descriptor DED •••••••••• 137 data interchange ............ 103 data management access methods ••••••••• 78 data set creation and access ••••••••••• 70 data set definition •••• 58 data set, definition of •••••••• ..,....... 17 data set label, ordering sequence for DCB ••••••••••••••••••• ., ••••••• ,••• ,•••• 141 data set names generation data groups •••.•••••••••• lB indexes of •••• ' •••••• 18 qualified or unqualified ............... 18 restriction •••• '.................. '. ... • •• 17 da ta set naming •••• 58 data set organization •••••••••••••••••• 67 types of ............................. 143 data set positioning, magnetic tape 143-144 DATA-directed I/O maximum length of qualified name ••• 142 maximum n~mber of elements in list . 150 DATAFIELD built-in functions DATAFIELD string length ................. 152 DATE function •••••••••••••••••• '. • • • • •. 117 DCB creation ............................. 141 DCB parameter ......................... 46,59 DCB subparameters ......................... 60 DCB, file opening order of completion • 141 DD statement .............................. 20 DD statement, ordering sequence for DCB 141 DD statements •••••••••••••••••••••• 19,184 modified in cataloged procedures 185 ddnames for PL/I SORT •••.••••••••••••• ,. • ... • •• 96 debugging facilities (testing) •••• 129-134 DECK/NODECK option ........................ 27 declaration of external indentifiers •• 105 DED data element descriptor •••••••••• 137 DEFINED items alignment attributes .......... '. .... •• 122 deleted records •• '. •• •• • • • • ... • • ... • .... • •• 66 SEQUENTIAL UPDATE of INDEXED data sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 delimiter (/) statement co . . . . . . . . . ,. . . . . . . . 20 DEN DCB subparameter .................... 65 device cIa sses .................. '•••• '. • •. 21 devices execution device choice ••••••••••••• 46 diagnostic messages See messages dictionary blocksize ••••••••••••••••••• 29 dictionary, reducing the size of •• 120-122 dimensions, maximum number of ••• ~ ••••. 149 DIRECT access ••.•••• '. • • • • • • • • • • •.• • • • • • •. 51 See also INDEXED and REGIONAL data sets DIRECT UPDATE files use of NOWRITE option ............... 122 DISP parameter •.•••••••••••• '•••• '•••••••• 59 D. • •• • • ... •• 0................. 0 D • • ... ................. • • • • • • • .. • • • • G • •• •• DISPLAY message length •••••••••••••••• 141 DISPLAY statement ........................ 132 division FIXED division programming hints ••• 109 DO groups - programming hints ••••••••. 110 DO groups, use of ••••••••••••••••••••• 127 dope vector for string data ••••••••••• 136 dope vectors, creation of •••••••.•••••• 140 DSA dynamic storage area ••••••••••••• 159 DSNAME parameter ........ '. • • • • • • • • .• • • • • • •• 58 DSORG subparamet er ....................... 67 dummy records in INDEXED data sets ••••••••.•••••••• 53 in REGIONAL data sets ••••••••••••••• 58 dumping storage in multitasking .•••••••• 89 dumps See storage dumps dynamic invocation of PL/I compiler ••• 186 dynamic storage area DSA ••••••••••••• 159 E format data, maximum size •••••.••••• 142 EBCDIC/BCD option ......................... 27 EDIT-directed I/O ••••••••••••••••••••• 154 maximum length of E format data •••• 142 EMPTY built-in function, use of ••••••• 112 END statement ............................ 32 entry names as arguments •••••••••••••• 154 entry parameter procedures, max number 154 entry points declaration of attributes ••••••••.•• 105 ENVIRONMENT attribute •••••.•••••.••••• 142 ENVIRONMENT attribute, use of ......... 124 epilogue subroutine See dynamic storage area ER See external symbol dictionary ERROR condition ••••••••••••••••••••••• 128 error messages See messages ESD (external symbol dictionary) ••.••••• 36 ESD listing .............................. 36 event data, format of ••••••••••••••••• 139 EVENT option ••••••••••••••••••••••. 57,146 ina DISPLAY statement •••.•••••••••• 272 in a multitasking environment ••••••• 88 in multi taski ng I/O •••••••.•••••••••• 91 with REGIONAL(3) data sets •••••••••. 57 EXEC s ta t erne n t ••• 20 execution speed, improvements ••••••••• 116 EXIT statement in a subtask ............................. 93 exponentation ............................ 154 expression evaluation ••••••••••••••••• 108 maximum number of temporary results 151 EXTDIC/NOEXTDIC option •••••.••.•••••• 29,148 extended search limit •••••••••••••••••• 67 external indentifiers restrictions •••••••••••.•.•.••••.•.••. 105 external symbol dictionary listing •.••• 36 EXTREF/NOEXTREF option ••••••••••••••••• 26 file control block .".................... 81 file opening and closing space requi r emen ts ........................... 82 files for both input and output (programming hint) ••.••••••••••••• 112 files and data sets..................... 51 FINISH can di tion ........................ 128 FIXED BINARY, maximum precision ••••••• 152 FIXED built-in function, default •••••• 152 FIXED data scale factor for ••••••••••• 152 FIXED DECIMAL data with even precision FIXED DECIMAL variables •••••••• 126 FIXED DECIMAL, maximum precision •••••. 152 FLAG option •••••••••••••••••••••••••••• 28 FLOAT BINARY, maximum precision ••••••• 152 FLOAT built-in function, default •••••• 152 FLOAT DECIMAL variables ................ 126 FLOAT DECIMAL, maximum precision •••••• 152 floating-point constants, size of ••••• 150 floating-point variable, magnitude of . 152 FORTRAN-PL/I data interchange ••••••••. 103 function values returned •••••••••••••• 151 0 •••••• generation data groups ............... 18,19 GENERIC attribute limit of family members and arguments ••••••••••••••••••••••••• 149 GENKEY opt ion .................. ,. • • • • • • • .• 145 hardware for PL/I (F) Compiler ••••••••. 78 D. 0 • • • • • • • • • • • • • • • • • • • •• F-format records •••••••••••••••••••••• 143 factoring of attributes ••••••••••••••• 149 FCB (file control block) ••••••••••••••• 81 file and ddname relationship •••••••••• 141 file attributes use of UNBUFFERED v BUFFERED .•••••.•• 125 file attributes, specified in DD card •• 59 IDENT option .••••••••••••••••••••••••• 272 identif iers, length of ••••• co • • • • • • • • • • 153 IHEQERR See external symbol dictionary IHEQINV See external symbol dictionary IHEQTIC See external symbol dictionary IHESADA See external symbol dictionary IHESADB See external symbol dictionary in-line code for conve~sions and string handling .............................. 118 INCLUDE STATEMENT data set requirements ••• 147 use of •••••••••••••••••••••••••••.• 123 INDEXAREA paramet er .................... 145 INDEXED data set access •••••••••••••••• 71 INDEXED data set creation ••••.••••••••• 71 INDEXED data set language features ...... 53 INDEXED data set, DIRECT access •••••••• 73 INDEXED data set, SEQUENTIAL access •••• 72 INDEXED data sets ....................... 51 KEY condition raised for lost record 113 maintenance .................. 125 records deleted by SEQUENTIAL UPDATE 72 secondary storage restriction •••••• 104 INDEXED organization ................... 143 indexes for INDEXED data sets •••••••••• 52 INITIAL attribute .................... 272-274 initialization of program variables ••. 107 initialization of variables, hints •••• 126 input/output .•••••••••••••••••••••••.•. 91 I/O bound programs ••••••••••••••••• 118 INDEXED data sets •.•••••••••.•••••••••••. 51 0 •••••••••• D • • • .. Index •• 281 synchronization in multiprocessing ••••. 94 input/output - programming hint ••• 112-115 input/output conventions •••••••••• 141-147 input/output error recovery ••••••••••• 126 INSERT statement ••••••••••••••••••••••. 43 instruction sets • '•••••••••••••••••••••• 78 interrupts M91 option •.••••••••••••••••••••••. 277 interrupts, object time handling •• 16D,129 interval timing options ••••••••.••••••• 79 invocation of PL/I dynamically .••••••• 186 job control for linkage editor ••••••••• job control statements example of compile, link and execute procedure •.•••••••••••••••••••••••. job priority ••••••••••••••••••••••••••• JOB statement ............................ job step def ini tion of ......................... load module •••••••••••••••••••••••••••• 18 load module cross reference table •••••• 45 load module map ........... '••••••• '. • • • • • •• 45 load module, maximum size ................ 45 LOAD/NOLOAD opt ion ••••••••• ~ ••• 27 locate mode 1/0 •••• 76 LOCATE mode 1/0 ON conditions •• 155 locate mode I/O, use of •.••••••••••••. 114 logical record length ................... 62 LRECL for blocked INDEXED data sets ••••••• 71 LRECL DCB subparameter .................. 59 0 0 • • • • •• n •••••• 45 MACDCK data set •••••••• 20 MACDCK/NOMACDCK option .................. 30 MACRO option •••••••••••••••••••••••••. 123 macro processor See compile-time processor MACRO-NOMACRO option •• 29 magnetic tape conversion 7-track 66 MAIN option ••••••• 81,148 MAP linkage editor option •••••••••••••• 44 mapping of structures •••••••.••••• 164-175 master index specification ••••••••••.•• 67 MAX function ........................... 152 messages compiler diagnostic messages 39,188-260 execution error messages •.••••. 260-271 FLAG options •••••••••••••••••••••••• 28 linkage editor ...................... 45,46 to and from the operator •••••••••••• 48 MFT ....................................... 79 MIN function ...................... ,. • ... •• 152 MOD function ................. ,............ 152 MODE DCB s ubparameter ................... 66 model 91 ............ ~ ••••••••••• _ •••••. 277 modifying cataloged procedures ......... 184 move mode I/O •••••••••••••••••••••••••• 76 multiple assignments, limitations •• 151 multiple closure statement numbering ••• 32 multiple WAIT option ••••••••••••••••••• 79 multitasking .......................... 87-94 I/O synchronization ............... D" ••• 92 multitasking, Release 16 changes ••••••• 14 multiprocessing ........................... 94 multiprogramming, with a fixed number of tasks .••.•••••••••••••••••••••••••• 79 multiprogramming, with a variable number of tasks .............. '. • • ... • • • • • •• 79 MVT ....................................... 79 M91/NOM91 option •••••••••••• ~ • ... • • • • • •. 30 u 46 90 20 0 17 00 KEY condition not detected using LOCATE statement 114 KEY option •••••••••.•••••••• '. .. • • • • • • • •. 56 key position, relative .................. 67 KEYLF.N DCB sUbparameter •••••••••••••••. 66 keys, for INDEXED data sets •••••••••••. 51 keys, for REGIONAL data sets ••••••••••. 55 LABEL attribute, maximum number ••••••. 152 label data, format of ••••••••••••••••• 138 LABEL parameter •••••••••••••••••••••••• 59 LABEL variables in structures with INITIAL and LIKE attributes ••• 146 language not supported •••••••••••••••• 272 LD See external symbol dictionary LEAVE option ••••••••••••••.••••••• 143-144 length of compiled modules .............. 81 length of identifiers ••••••••••••••••• 153 length of structures and arrays See aggregate length table LET linkage editor option •.••••.••••••. 44 library module linkage conventions •••. 161 library opening and closing modules storage requirements •••••••••••••••••. 82 LIMCT DCB subparameter ..•••••••.••••••• 67 LlNECNT option •••••••••••••••• '. • • • • • • •• 26 for object program listings ••••••••• 38 LlNECNT/NOLINECNT option ••.•••••••••••. 26 LlNESIZE .option •••••••••••••••••••••••• 68 LINESIZE, minimum and maximum ••••••••• 141 LlNESIZE, used for non-PRINT file ••••• 142 link editing into a private library •••• 41 link editing, module name priority .•••• 41 linkage editor ,••••••••••••••••••••••••• 18 updating private procedure libraries 18 linkage editor control statements •.•••• 44 linkage editor diagnostics •••••••••• 45,46 linkage editor options ••••••••••••••••. 44 linkage editor output •••••••••••••••••• 45 linkage editor overlay processing •.•••• 42 linkage editor processing •••••••••••••. 40 linkage editor, additional libraries ••• 41 linkage editor. ddnames •••• '............. 41 linkage editor, input and output ••.•••. 40 LIST linkage editor option .'•••• '•••••••• 44 LIST/NOLIST option ••••••••••••••••••••• 26 282 • . . . . . . . . . '• • • • • • • • • • • • '. . . . . . . . . '. • • • • •• ................. ••••••••••••••• 0 •• NAME linkage editor statement .••••••••• 44 names generated by the compiler ••••••• 150 NCAL linkage editor option •••••••• ~ •••• 43 NEST/NONEST option ........... ~ ........... 30 NTM DCB subparameter ••••••••••••••••••• 67 null (/1) statement ••••••••• '.•• '. • • • .. • •• 20 obj ect object object object object object object object object deck data set ••••••••••••••••.•• 20 deck serialization •••••••••••••• 40 module ....................... '••••• 18 module data set •••••••.••••••.•• 20 module listing ...................... 38 module output. contents of •••••• 40 program initialization ••••••••• 160 program organization ••.•••• 158-175 program output object time messages .••••••••••••••. 48 operator messages ••••••••••••••••.•. 48 record oriented ...................... 47 stream oriented •••• '••••••• '. • • • • • . • •. 47 object-time interface with the supervisor ........................ '. . • • •• 79 OBJNM opt ion • 26 OFFSET function and attribute ••.•••••• 274 offset variable, format of ••••••••..•. 138 ON conditions 111 LOCATE mode I/O restrictions •••.••. 155 ON statements in recursive contexts ••• 155 ON-codes ••••••••••••••••••.••••••••••• 129 ON-unit entry with SIGNAL •••••.••••••. 111 ON-units in multitasking ••• 89 ON-units, limit to active number .••••• 154 ONCHAR pseudo-variable •••••••••••• 154,112 ONCODE built-in function, use of •••••• 128 ONCOUNT function ........................ 275 ONKEY built-in function ••••••••••••••• 125 ONSOURCE built-in function ••••.•••.••. 154 ONSOURCE pseudo-variable •••••••••• 154,112 ONSOURCE string length •.••••••.••••••. 152 operating system requirements •••••••••. 78 operator console •••••••.••. • '•• • '•••••••• 78 OPLIST/NOOPLIST option ••••••••••••••••• 26 OPT option .............................. 27 OPTCD=C DCB subparameter ••.•••••.•.•••. 65 OPTCD=L DCB subparameter ••.••••••••• ~ •• 66 OPTCD=M DCB subparameter .•.•••••• '. .• • •. 67 OPTCD=U DCB subparameter .•••••.•••••••. 66 OPTIONS attribute ...................... 148 overflow area, independent ••••••••••••• 67 OVERFLOW conr'lition in exponentiation •• 154 overlay program linkage editor cross reference table 45 overlay programs, creation of •••••••••. 42 overlay techniques - examples ••••••• 42-44 overriding cataloged procedures ••••••. 124 overriding EXEC statement parameters •. 184 a ••••••• 0 •• • • • • • • • • • • • • • •• n.......................... 0 • •• •• • • • • • • • • •• •• PACKED attribute ........................ 14 PAGESIZE, maximum ••••••••••••••••••••• 141 paper tape CODE subparameter ............ 65 parameter lists declaration of attributes •••••••••. 105 parameters, maximum number of •.••••••• 149 parameters, method of passing ........... 161 PARM paramete~ option list format •.••• 104 PARM parameter override •••.••••••••••. 184 partitioned data set definition •••••••••••••••.•••••••••• 19 PCP ..................................... 78 PDS (partitioned data set) .............. 19 PGMNAME See external symbol dictionary PGMNAMEA See external symbol dictionary PICTURE attribute impact on execution speed •••••••••• 116 PICTURE attribute, maximum size ••••••• 152 picture checking (on assignment) •••••• 109 PICTURE declarations with decimal points •••••••••••••••. 105 pictured data . . . . . . . . . . . . . . . . . . . . . . . . . . 137 PL/I language not supported ••••••••••• 272 PL/I library .... '•• '•••••••• '••• '. • • • • • • • • •. 83 PL/I modules combined with mojules from other languages ......................... 82 PL/I preprocessor See compile-time processor PL/I SORT . . . . . . . . . . . . . . . . . . . . . . . 95-103 PL/I SORT - multitasking ••••..•••.•••. 103 PL1DFC •••••••• • '• ................. 183,19,49 PLl L FC •••.••••••••• '. .• • • • • • • • . •• 183, 19" 4 9 PL1LFCL ••••..•••..•••••••..••.•• 183,19,49 PL1LFCLG ••••. ,. •• • • • • •• ... • • .... • •• 184,19,50 PL1LFLG ••.•••••••••••••••••••••• 184,19,,50 POINTER function ••• 275 pointer variable# format of ••••••••••. 137 pointer variable~ reuse of ............. 115 POSITION attribute, maximum value 152 PR See external symbol dictionary precision# specified for efficient execution ............................. 116 primary control program •••.••••••.••.•. 78 primary string array dope vector •••••• 164 PRINT files .............................. 68 printed listings from compiler .......... 31 printer character sets for PL/I ••.••••• 78 printer spacing control . . . . . . . . . . . . . . . . . 66 priorities in PL/I ••••••...••.••••••... 90 PRIORITY pseudo-variable" function, or option ••.•.••• 90 PROCESS card ........................ 0... 30 program control section in ESD .......... 36 program csects See control sections program size estimation 81 program testing ..................... 128-134 programming in a multitasking environment ••. '...... .• ... . • .• • • ... • . • • • •. 88 programming techniques ••••.••••••. 104-127 common errors and pitfalls •• 104-115 efficient programming ........... 115-127 prologue and epilogue subroutines ••••• 159 PRTSP DCB subparameter .a . . . . . . . . . . . . . . . . 66 PRTY parameter ........................... 90 pseudo-register vector (PRV) •.••••. 95,158 PUT DATA statement limitations ......... 113 u 0 • • • • • • • • • • D •••• • • • • • • •• ••••••••••••••••••••••• 0 ••••••• 0 ••••••• 0 •• REAL FIXED BINARY data ••••.••••••.•••. 135 REAL FIXED DECIMAL data ................. 135 REAL FLOAT BINARY data ••.•.•..•••..••. 135 REAL FLOAT DECIMAL data ................ 135 REAL PICTURE data ...................... 137 RECFM DCB subDarameter ................ 59,62 record alignment ••• 155 RECORD condition ........................ 125 record data sets for printing •••••••••• 68 record formats ................... 61,64,129 RECORD-oriented input/output .... 125 hints for efficient performance •••. 118 LOC?\TE mode .,.................... ~ ••.•• 76 printer, punch control characters •. 144 record format constraints •••••.•••.• 64 record length . . . • . . . . . . . o • • • • • • • 62,142 RECURSIVE attribute ••••••••••••••.••••. 14 recursive use of a procedure •••••••••. 105 REENTRANT attribute •.•• 14 REENTRANT option ........................ 148 REFER attribute forcing correct boundary alignment . 156 REGIONAL data set access ••.••••••••••.. 74 0 ••• " 0 ................. • • ... • • • 0 •••••• • • • • • Index ••• 283 DIRECT access ••••••••••••••••••••••. 75 replacement of records •••••••••••••• 75 SEQUENTIAL access •••••••••••••••••.•• 74 REGIONAL data set creation ••••••••••••. 73 DIRECT creation ••••••••••••.•••••••• 74 SFQUENTIAL creation ••••••••••.•••••• 74 REGIONAL data set language features .••. 54 REGIO~AL data set organization ••••••••• 55 REGIONAL data sets source key last 8 bytes •••••••.••• 113 REGIONAL organization ••.•••••••••••••• 143 REGIONAL(l) data sets •••.•••••••••••••• 56 REGIONAL(2) data sets •••••••• 56 REGIONAL(3) data sets •••.•••••••••••••. 57 REGIONAL(3) files in multitasking, with EVENT option •. 91 register usage ••• ., •••••••••••••••••••• 161 REPLACE linkage editor statement ••••••. 44 REPLY message length •••.•••••••••••••• 141 REPLY option ................. '........... 132 restarts See checkpoint/restart return code setting by PL/I •••••••••••. 83 return codes in mul titasking ••••••••••••••••••••. 89 return values declaration of attributes •••••••••• 105 REWIND option ...................... 143-144 REWRITE statement in locate-mode I/O ••••••••••••••••. 114 RKP DCB subparameter ••••••••••••••••••. 67 run-time block management ••••••••• 158-160 0 .......... SADV ............................... •.• •• 163 scale factor for FIXED DATA ••••••••••• 152 scope of variables in multitasking .•••. 88 SD See external symbol dictionary SDV string dope vector ••••••••••••••• 136 SDV, format of •••••••••••••••••••••••• 161 SECONDARY attribute ••••.•••••••••••••. 273 sequential access I/O •••••••••••••••••• 51 SEQUENTIAL access of REGIONAL data sets 56 sequential data set definition •••••••••••••••••••••••••. 19 SEQUENTIAL files in multitasking I/O ••••••••••••••••• 91 SETS list, size of •••••••••••••••••••• 152 SIGNAL statement ........................ 129 SIZE CONDITION for even precision FIXED DECIM~L da ta •••• '. • • • • • • • • • • • • • • • • • • • • • • • •• 110 SIZE disabled ••••••••••••••••••••••••• 108 size of load module ....... '. '. • • • • • •• • • • •• 45 SI ZE opti on .......... '••••••••••••••••• '.. 25 SIZE requirements ••• 23 SKIP, used for non-PRINT file ••••••••• 142 SNAP option, use of •••••••••••• '. '. • • •• 131 in multitasking ...................... 89 SNAP SySTEM ••••••••••••••••••••.••••••• 132 SORMGIN option ••••••••••••••••••••• 27,135 SORT, PL/I SORT •••••••••••••••••••• 95-103 source keys, REGIONAL data sets •••••••• 55 source program listing ••••••••••••••••• 32 source statement numbering ••.••••••••••• 32 source statement record format •••••••• 135 SOURCE/NOSOURCE option ................... 29 SOURCE2/NOSOURCE2 option ••••••••••••.••• 29 0.................. 284 space allocation for REGIONAL data sets ••..••••••••••• 73 SPACE parameter ......... co. • • • • • • • • • • • • • • 59 space requirements for compiler data set s ••••.••••••••• '................. '. • •• 22 spanned VS-format or VBS-forrrat recor1s 61 spanned records ............. 125 spanned records, use of •••••••••••••••• 64 STACK DCB subparameter ••••••••••.•••••. 66 standard file names •••• 113 SYSIN implicit use •••••••••• '•••••.• 113 statement numbering ..................... 32 listed in attribute table ••••••••••• 33 listed in cross reference table ••••• 33 statement size ..................... 148-149 statements, number in a procedure ••••• 148 STATIC INTERNAL control section name in ESD listing .................. 36 STATIC INTERNAL storage map •••••••.•••• 37 STATIC variable in overlay segment ••.• 104 sterling constants ........................ 150 STERLING PICTURE data ........ ~ • •• • • •• •• 137 STMT option ................................ 48 STMT /NOSTMT option •••••••••••••.•••••••• 28 STOP statement in a subtask .............. '•••••••••.•• 93 storage dumps at execution time •• '....... ,~ • •• • • • • •• 132 storage dumps in multitasking ••••.••••. 89 storage for file opening and closing ••• 82 storage requirements for PL/I SORT •••••• '••••••••••••••••• 95 storage requirements for object program 33 storage, h1nts for the use of ••••• 122-123 STREAM data set creation and access ..... 70 STREAH-oriented I/O .................... 125 record forma ts ............. 63 access method ••••••• '" • • • • • • • • • • • .. • •• 78 based variable restriction ••••••••• 115 string array dope vector •••••••••••••• 163 STRING built-in function •••••••••••••• 153 string contants, size of •••••••••••••• 150 string data ..................... 136 string dope vector SDV ••••••••••••••• 136 string dope vector, format of • '. 161 string functions supported by in-line code ....... 120-122 string handling in multitasking •••• '................... 92 string handling - programming hints 111 string handling, for improved speed ••• 117 strings for GET LIST or DATA ••••••••••••••• 113 strings, VARYING intermediate result string length •• 151 structure dope vector, format of •••••• 163 structure expressions - nesting level • 150 structure mapping ••••••••••••••••••••• 164 PACKED and UNALIGNED compared •••• 14-15 structures, format of .................. 140 subscript variables ...................... 117 subscripted identifiers, length of •••• 153 SUBSTR pseudo-variable •••••••••••••••• 111 switches. efficient use of •••••••••••• 117 SYSIN DO statement....................... 20 SYSLIB DO statement ••••••••••••••••• 18,20 SYSLIB DO, llse of ................ '.. • • .. • •• 123 SYS PRINT •• '.............. '............. '. '. .. .. • •• 20 n 0 • • •• • • • • •• •••••••••••••• A • • • 0 .......... OJ • • • • • • •• • •• •• use in ST~EAM IIO in multitasking ••. 91 SYSPRINT implicit use .................... 113 SYSPU~CH/SYSLIN in batched compilation . 24 system requi rements ...................... 78 S YSUT 1 ................................... 20 SYSUT3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 SYS1.LINK modules ••••••..•••••.•••••••. 83 UNSPEC built-in function length of bit-string returned •••••• 152 UNSPEC pseudo-variable, - programming hint ••••••••••••••• ................... 111 UPDATE, INDEXED data sets •• ~ ............ 52 uti 1 it y da t a set s ....................... 2 0 tab controls for STREAM IIO •••••••••••• 69 task data, format of •••••••••••••••••• 138 TASK option •••.••••.••••••••••.••••.•• 148 ,task priority ............................. 90 task termination ......................... 93 tasking 1?seudo-register for ................... 36 tasking See multitasking temporary results, maximum permitted •• 151 temporary workspace VDAs ............. '.. 159 testing programs ................ ".... 128-134 text b 1 0 c k s i z e .."....................... 2 9 TIME option .................... "......... 7 9 time taken for compilation •••••••••. 40,79 timer feature •.••••••••.••••••••••••• ,•• 78 TITLF option .................... 51,141,146 trace of active procedures •••••••••••. 131 TRANSMIT condition •••••••••••••••••.•. 129 TRTCH DCB subparameter .................. 66 V-format variable-length records ••. 61,143 validity check direct-access ••••••••••• 66 variable data area VDA. .................. 159 variable-length V-format records ••••.•• 61 variable-length recoris use of spanned records ••••••••••••• 125 variables, maximum number of •••••••••• 148 VARYING string, assignment to ••••••••• 111 VBS-format spanned-blocked records • ~1,143 VDA for temporary workspace .............. 159 volume definition of .... 17 VOLUME parameter ......................... 59 VS-format spanned records •• 61,143 U-format records ...... 143 UCS printer, suppress TRANSMIT .•••.•••. 66 UNALIGNED attribute ......... " ••••••••••• 14 effect on structure mapping .••••.•• 166 See also structure mapping •..•••••. 164 UNDEFINEDFILE condition for a stream file "................. 113 possible caus es .... "................. 112 UNIT parameter .............................. 58 M D .................... n ••••••• WAIT statement ........................... 146 in multitasking ................... 88-89 warning messages See messages WHILE clause, use of ............ " •••••. 127 •••••••••••••••• XC~L linkage editor options ............. 44 XREF linkage editor option ••••••••••••• 44 XREF INOXREF option .............. co • • • .. • • • 26 48-character semicolon 48-character 60-character set in DATA-directed 1/0 ••••• 113 set, use of reserved wor1s 142 set ......................... 28 Index 285 READER'S COMME~IT FORM Form C28-6594-4 IBM System/360 PL/I (F) Programmer's Guide • How did you use this publication? As a reference source As a classroom text As a self-study text ............. 0 o o • Based on your own experience, rate this publication As a reference source: Very Good Good Fair Poor Very Poor Very Good Good Fair Poor Very Poor As a text: • What is your occupation? • We would appreciate your other comments; please give specific page and line references where appropriate. If you wish a reply, be sure to include your name and address. • Thank you for your cooperation. No postage necessary if mailed in the U.S.A. C28-6594-4 YOUR COMMENTS PLEASE .... This SRL bulletin is one of a series which serves as reference sources for systems analysts, programmers and operators of IBM systems. Your answers to the questions on the back of this form, together with your comments, will help us produce better publications for your use. Each reply will be carefully reviewed by the persons responsible for writing and publishing this material. All comments and suggestions become the property of IBM. Please note: requests for copies of publications and for assistance in utilizing your IBM system should be directed to your IBl\1 representative or to the IBM sales office serving your locality. fold fold ......................................................................................................................... FIRST CLASS PERMIT NO. 1359 WHITE PLAINS, N.Y. BUSINESS REPLY MAIL NO POSTAGE NECESSARY IF MAILED IN THE UNITED STATES POSTAGE WILL BE PAID BY ... IBM CORPORATION 112 EAST POST ROAD, WHITE PLAINS, N.Y. 10601. Attention: Department 813 (HP) • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 9 • • • • • • • • • • • • • • • • • t-t • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • fold fold International Business Machines Corporation Data Processing Division 112 East Post Road, White Plains, N.Y.I060t [USA Only] IBM World Trade Corporation 821 United Nations Plaza, New York, New York 10017 [International] : C2&6594-4 OJ s: u: < l!l. CD 3 t:: g International Business Machines Corporation Data Processing Division 112 East Post Road, White Plains, N.Y.I06ot [USA OnlyJ IBM World Trade Corporation 821 United Nations Plaza, New York, New York 10017 [International]
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.3 Linearized : No XMP Toolkit : Adobe XMP Core 4.2.1-c043 52.372728, 2009/01/18-15:56:37 Create Date : 2012:06:12 20:40:39-08:00 Modify Date : 2012:06:12 20:54:40-07:00 Metadata Date : 2012:06:12 20:54:40-07:00 Producer : Adobe Acrobat 9.51 Paper Capture Plug-in Format : application/pdf Document ID : uuid:2064297c-b64e-4829-9874-be455e803476 Instance ID : uuid:7507cfd1-9669-4635-8ecb-4dd16b74df25 Page Layout : SinglePage Page Mode : UseOutlines Page Count : 288EXIF Metadata provided by EXIF.tools