SC28 6478 3_DOS_VS_COBOL_Compiler_and_Library_Programmers_Guide_Feb79 3 DOS VS COBOL Compiler And Library Programmers Guide Feb79
SC28-6478-3_DOS_VS_COBOL_Compiler_and_Library_Programmers_Guide_Feb79 SC28-6478-3_DOS_VS_COBOL_Compiler_and_Library_Programmers_Guide_Feb79
User Manual: SC28-6478-3_DOS_VS_COBOL_Compiler_and_Library_Programmers_Guide_Feb79
Open the PDF directly: View PDF .
Page Count: 404
Download | |
Open PDF In Browser | View PDF |
SC28-6478-3 Program Product IBM DOS/VS COBOL Compiler and Library Programmer's Guide Program Numbers: 5746-CB1 (Complier and Library) 5746-LM4 (Library) Fourth Edition (February 1979) This is a major revision of, and obsoletes, SC28-6478-0, -1, and -2. It also obsoletes their technical newsletters SN28-1063, SN20-9121, SN20-9141, SN20-9180, and SN20-9235. This edition corresponds to Release 2 of the IBM DOS/VS COBOL Compiler and Library, program numbers 5746-CBl and 5746-LM4. Changes are continually made to the information herein; before using this publication in connection with the operation of IBM systems, consult the latest IBM System/370 Bibliography, GC20-0001, for the editions that are applicable and current. Publications are not stocked at the address given below; requests for IBM publications should be made to your IBM representative or to the IBM branch office serving your locality. Comments may be addressed to IBM Corporation, P.O. Box 50020, Programming Publishing, San Jose, California U.S.A. 95150. IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation whatever. You may, of course, continue to use the information you supply. © Copyright International Business Machines Corporation 1973, 1979 PREFACE; This publication describes how to compile a COBOL program using the Program Product IBM DOS/VS COBOL Compiler. It also describes how to link edit the resulting object module, and execute the program. Included is a description of the output from each of these three steps: compile, link edit, and execute. This publication explains features of the DOS/VS Compiler and Library, and available options of the operating system. This publication is logically and functionally divided into four parts. Part I contains information useful to programmers who are running COBOL programs compiled on the DOS/VS Compiler, under the control of the IBM Disk Operating system Virtual storage. Part I covers such topics as job control language, library usage, and interpreting output. Part II contains supplemental information on the use of the language as specified in the publication IBM DOS Full American National Standard COBOL, GC28-6394, and should be used in conjunction with this publication for coding COBOL programs. Part II covers in detail such topics as file organization, file label handling, and record formats. Part II is intended as reference material for language features that are primarily system-dependent. Part III contains information on programming techniques useful to the programmer running COBOL programs compiled on the DOS/VS Compiler. Topics such as coding considerations, table handling considerations, and formatting data are covered in Part III. Part IV contains error determination information. This part covers such topics as program debugging and program testing. Diagnostic messages generated by the DOS/VS Compiler and Library and their accompanying documentation can be found in this publications Information on installing the DOS/VS Compiler and Library can be found in the following publication: IBM DOS/VS COBOL Compiler and LibrarYL Installation Reference Material, SC28-6479 Wider ranging and more detailed discussions of the DOS/VS System are given in the following publications: Introduction to GC33-5370 DO~, DOS/yS System Generation, GC33-5377 DOS/yS SY2tem Management Guide, GC33-5371 DOS/VS Data-Management-Concepts, GC24-S138 DOS/yS Supervisor a~O Ma£[Q Reference, GC33-5373 System Control Statements, GC33-5376 ~S DOS/yS Access Method Services, GC33-5382 DOS/VS System Utilities Reference, GC33-5381 DO~Messages, GC33-5379 The following publications provide detailed information on the IBM 3886 Optical Character Reader: IBM 3886 Optical Character Reader General Information Manual, GA2l-9l46 IBM 3886 optical Character Reader Input Document Design and Specifications, GA2l-9148 DOS~lanning Guide for the IBM 3886 Optical Character Reade~del-1, GC2l-5059 The following publications provide information on the IBM DOS/VS Sort/Merge Program Product, Program Number 5746-SM1, and the DOS Sort/Merge Program Product, Program Number 5743-SM1: IBM DOS/yS SortlMerge General Information, GC33-4030 IBft DOS/vS Sort/Merge Program Product Design Objectives, GC33-4027 IBM DOSIVS Sort/Merge Installation Reference Material, SC33-4026 IBM DOS Sort/Merge Programmer's Guide, SC33-40l8 The titles and abstracts of related publications are listed in IBM System/360 and System/370 Bibliography, GA22-6822. Summary of Amendments Number 5 Form of Publicationo· Revision SC28-6478-3 New: Programming Function Support for ftxed block devices is provided under DOS/VSE with VSE/ Advanced Function, Release 1. Maintenance: Documentation Clariftcations and corrections have been made in various areas of the text. Editorial changes that have no technical significance are not noted here. Specific changes to the text made as of this publishing date are indicated by a vertical bar to the left of the text. These bars will be deleted at any subsequent republication of the page affected. Summary of Amendments Number 4 Form of Publication: TNL SN20-9235 to SC28-6478-O, -1,-2 New: Programming Function Support has been added for the 3330-11 Disk Storage and 3350 Direct Access Storage devices. Maintenance: Documentation Minor technical changes and additions have been made to t!1e text. Summary of Amendments Number 3 Date of Publication: December 3, 1976 Form of Publication: TNL SN20-9180 to SC28-64 78-0, -1, -2 IBM DOSNS COBOL Maintenance: Documentation Minor technical changes and additions have been made to the text. Editorial changes that have no technical significance are not noted here. Specific changes to the text made as of this publishing date are indicated by a vertical bar to the left of the text. These bars will be deleted al any subsequem republication of the page affected. Summary of Amendments Number 2 Date of Publication: January 9, 1976 Form of Publication: SN20-9141 to SC28-6478-0, -1 Support has been added to run DOS!VS COBOL under control of VM/370 CMS Release 3. DOS/VS COBOL programs can be compiled in CMS and then executed in a DOS virtual machine, or under a DOS system. The following restrictions apply to execution of DOS!VS COBOL programs in CMS: 1. Indexed mes (DTFIS) are not supported. Various clauses and statements are therefore invalid: RECORD KEY, APPLY CYL-OVERFLOW, NOMINAL KEY, APPLY MASTER/CYL-INDEX, TRACK-AREA, APPLY CORE-INDEX, and START. 2. Creating direct files is restricted as follows: -For U or V recording modes, access mode must be sequential. -For ACCESS IS SEQUENTIAL, track identifier must not be modified. 3. None of the user label-handling functions are supported. Therefore, the label-handling format of USE is invalid. The data-name option of the LABEL RECORDS clause is invalid. 4. There is no Sort or Segmentation feature. 5. ASCII-encoded tape files are not supported. 6. Spanned records (S-mode) processing is not available. This means that the S-mode default (block size smaller than record size) cannot be specified, and that the RECORDING MODE IS S clause cannot be specified. In addition, multitasking, multipartition operation, and teleprocessing functions are not supported when executing under CMS. For a more detailed description of VM/370 CMS for DOS/VS COBOL, see IBM VM/370 eMS User's Guide for COBOL. order number SC28-6469. Summary of Amendments Date of Publication: March 22, 1974 Form of Publication: TNL SN28-1063 to SC28-6478-0 New: Addi tiona! Compiler Capabilities lister feature Execution Statistics and Verb summary feature SOR T-OPTION Maintenance: Documentation Only Minor technical changes and corrections. Editorial changes that have no technical significance are not noted here. Specific changes to the text made as of this publishing date are indicated by a .vertical bar to the left of the text. These bars will be deleted at any subsequent republication of the page affected. Number 1 CONTENTS FEATURES OF THE PROGRAM PRODUCT DOS/VS COMPILER .. • 7 PART I .. 9 INTRODUCTION .. • 11 .. 11 Control Program 11 Supervisor .. .. Job Control Processor 11 11 Initial Program Loader 11 Processing Programs .. 11 System Service Programs Application Programs .. .. .. .. .. .. .. 12 IBM-Supplied processing Programs .. .. .. 12 .. 12 Data Management .. .. .. • .. .. .. .. 12 Multiprogramming .. .. .. .. .. .. .. .. .. Background vs. Foreground Programs .. .. 12 JOB DEFINITION • .. .. .. .. .. .. Job steps .. .. .. .. .. Compilation Job Steps Multiphase Program Execution .. Types of Jobs .. .. .. .. .. .. .. .. • .. .. Job Definition Statements .. .. _ Other Job Control Statements 13 .. 13 13 .. 13 .. 14 .. 15 16 ........ 17 JOB PROCESSING .. .. .. .. .. 17 Compilation .. 17 Editing .. .. .. .. .. Phase Execution 18 Multiphase Programs ........ .. 18 PREPARING COBOL PROGRAMS FOR PROCESSING Assignment of Input/Output Devices .. _ .. Job Control . . . . . . . . . . . . . . . .. .. .. .. _ .. Job Control Statements .. .. .. .. .. .. .. .. Comments in Job Control Statements .. Statement Formats ...... .. .. .. .. .. • Sequence of Job Control Statements .. Description and Formats of Job Control Statements .. .. .. .. .. .. JOB Statement .. .. .. .. .. ASSGN Statement '... _ .. CLOSE Statement .. .. .. .. .. DATE Statement .. .. TLBL Statement .. .. .. DLBL Statement .. .. .. .. .. .. .. .. EXTENT Statement .. .. .. .. VOL, DLAB, TPLAB and XTENT Statements .. LBLTYP Statement .. .. .. .. .. LISTIO Statement .. .. MTC Statement OPTION Statement .. PAUSE Statement .. .. .. .. .. RESET Statement ...... _ .. RSTRT Statement ...... .. UPSI Statement .. .. .. .. EXEC Statement .. CBL Statement -- COBOL Option Control Card .. .. _ .. .. .. .. .. LST Statement -- New Compiler Option Card .. .. .. .. .. .. 19 19 22 22 22 22 23 23 23 24 26 26 27 28 28 30 30 31 31 32 34 34 34 35 35 36 40 Mutually Exclusive Options .. .. .... Changing the Installation Defaults Significant Characters for Various Options .... .. .. • .. • • .. • .. • Job Control Commands • • • • • .. Linkage Editor Control Statements Control Statement Placement PHASE Statement INCLUDE Statement .. • .. • ENTRY Statement ACTION Statement .. Autolink Feature .. .. Relocating Loader Feature LIBRARIAN FUNCTIONS Planning the Libraries • .. Librarian ... • • Core Image Library .. .. Cataloging and ~etieving Program Phases -- Core Image Library .. .. _ Relocatable Library • • • .. .. • Maintenance Functions .. • • .. .. .. Cataloging a Module -- Relocatable Library .. • .. .. • .. .. Source Statement Library .. .. .. .. Maintenance Functions .. .. .. • .. Cataloging a Book Source Statement Library Updating Books -- Source Statement Library • • .. .. • .. .. • .. .. .. • .. UPDATE Function -- Invalid Operand Defaults .. • .. • .. .. .. The Procedure Library MAINT, Procedure Library ~ Catalog PSERV, Procedure Library .. Calling Cataloged Procedures .. Private Libraries . . . . . . . • .. Determining the Location of the Libraries .. .. .. .. .. .. .. .. .. .. Source Language Considerations .. Extended Source Program Library Facility .. .. .. • • • • .. .. .. Reformatted Source Deck .. .. .. .. .. Q .. .. • .. .. _ • 40 • 40 40 • 40 • 40 · 41 I, ... ... .L 42 '. 42 42 • 43 43 45 • 45 • 45 45 • 45 .. 46 46 46 • 47 • 48 48 • 50 • 52 53 53 53 .. 54 54 55 • 55 • 56 .. 57 • 57 INTERPRETING OUTPUT Compiler Output Object Module Linkage Editor Output comments on the Phase Map ..... ~ Linkage Editor Messages • • .. .. .. .. DOS ANS COBOL Unresolved External .. .. .. .. .. • References • .. .. .. .. . .. .. .. • COBOL Execution Output .. Operator Messages .. .. .. .. STOP Statement • .. .. .. .. ACCEPT Statement • = .. _ . . . System output CALLING AND CALLED PROGRAMS Linkage .. .. .. .. Linkage In A Calling Program 59 59 69 69 71 71 71 72 72 73 73 73 • 75 • 75 .. 75 Linkage In A Called Program • Entry points • • • • • • • .. • • • • • Correspondence of Arguments and Parameters • • • • • • • .. • .. Link Editing Without Overlay • • • • Assembler Language Subprograms • • Register Use .. • • • • • • • • • • Save Area • • • • .. • • • • • • • Argument List • • • • • • • • • File-Name and Procedure-Name Arguments . . . . . . • • • • .. In-Line Parameter List • Lowest Level Program Overlays • • • • • .. • .. • .. • Special Considerations When Using Overlay Structures • • • • • • .. .. • • .. Assembler Language Subroutine for Accomplishing Overlay .. • e _ • • .. .. Link Editing with Overlay . . . . . . Job Control for Accomplishing Overlay 76 76 77 77 78 78 79 79 79 81 81 81 81 82 83 84 .. .. 89 USING THE SEGMENTATION FEATURE • Operation ... • • • .. • • • _ • 90 Output From a Segmented program • _ .. • 91 Compiler Output • • • • 91 Linkage Editor Output • • • • 92 Cataloging a segmented ~rogram .. 92 Determining the Priority of the Last Segment Loaded into the Transient Area • • • • .. • .. • .. 92 Sort in a Segmented Program 93 Using the PERFORM Statement in a segmented Program • 93 PART II • 95 PROCESSING COBOL FILES ON MASS STORAGE DEVICES . . . . . 97 File Organization 97 Sequential Organization 97 Direct Organization • 97 Indexed Organization • • .. 97 Data Management Concepts • .. 98 Sequential Organization (DTFSD) . . . . . 99 Processing a Sequentially Organized File • • .. • • • • • • .. • .. • • • .. .. 99 Direct Organization CDTFDA) • • .. .. 99 Accessing a Directly Organized File .100 ACTUAL KEY Clause • • .. .. .101 Randomizing Techniques. • • .102 Actual Track Addressing Considerations for Specific Devices .116 Randomizing for the 2311 Disk Drive 116 Randomizing for the 2321 Data Cell .117 Indexed Organization (DTFIS) • • 118 Prime Area. • • .118 Indexes • .. .. • • .. .119 Track Index • • .. • .119 Cylinder Index. • • • .. • • .119 Master Index. • ~119 Overflow Area • .. • • • .119 Cylinder Overflow Area = ... 119 Independent Overflow Area . . . . . . 119 Adding Records to an Indexed File 4120 Accessing an Indexed File CDTFIS) • • 121 Key Clauses . . . . . . • .121 Improving Efficiency . . . . . . . 122 Q •• PROCESSING 3540 DISKETTE UNIT FILES File Processing .. • .. .. DTFDU • • • • • • .. .. .. Job Control Requirements • DLBL Statement .. .. EXTENT Statement • 3540 File . • • • _ ,.123 .123 ,.124 ... 124 .125 .125 .. '" 125 VIRTUAL STORAGE ACCESS METHOD (VSAM) ... 127 File Organization . . . . . . . 127 Key-Sequenced Files . . . . . . . 127 Entry-Sequenced Files .127 Data Organization . . . . . . . . . . . 128 Data Access . . . . . . . . . . . . . . . . . 128 VSAM Catalog • • • • • • ,.128 File and Volume Portability .130 service Programs. .130 Device Support. .. • . . . . . . 130 Security. • • • .. • . . . . . . 130 Error processing.. • . . . . . . . 130 VSAM Messages . . . . . . . 130 Access Method Services. • • .. • • .130 Functional C o m m a n d s . 1 3 0 The DEFINE Command. • .130 Specification of the DEFINE Command 131 Defining a VSAM Master Catalog: DEFINE MASTERCATALOG . . . . . . . . . . . 131 Defining a VSAM Data Space: DEFINE SPACE • • • .. .. • • • • .132 Defining a VSAM File: DEFINE CLUSTER • • • .. .. • • .. • • .. • • • 133 File Processing Techniques • .134 1 ... ·· Current Record Pointer • • • Error Handling • • • • • • • • . .. .13b Record Formats for ?SAM Files .. 136 Ini tial Loc' -li. "'lg of Recc .. u£ l:1to a File. • • • • .. .. • .. • .. .. .137 File Status Initialization • • 137 Opening a VSAM File ... 137 Writing Records into a VSAM File • • • 139 Entry-Sequenced File Considerations for the WRITE Statement . . . . . . . . . . .. .139 Key-Sequenced File Considerations for the WRITE Statement • • • • • • 139 Rewriting Records on a VSAM File .139 Entry-Sequenced File Considerations for the REWRITE .139 Statement '. .. • • • • '. .. .... Key-Sequenced File Considerations for the REWRITE Statement • • 140 Reading Records on a VSAM File .. 140 Entry-Sequenced File Considerations for the READ Statement • • • • .. • .. • • ,.140 Key-Sequenced File Considerations for the READ Statement • • 140 READ NEXT Statement • ,.140 READ Statement. • • .141 Using the START Verb • • .. • .. ,. .. .141 DELETE Statement. • • . . . . . . 141 COBOL Language Usage With vsm~ .141 Creating a VSAM File .141 Retrieving a VSAM File • • • • 143 Job Control Language for a VSAM File • • .. • • • .. • .. • • • • • • .144 Converting Non-VSAM Files to VSAM Files .. .. • • .. • _ • .. .• • .. ..144 Using ISAM Programs to Process VSAM Files. • • • • • .. • • • .144 DETAILED FILE PROCESSING CAPABILITIES .145 COBOL VSAM Control blocks . . . . . . . . . . . 145 Control Blocks For VSAM . . . . . . . . . . 146 VSAM File Information Block (FIB) • • 146 VSAM File Control Block . . . . . . 148 DTF Tables . . . . . . . . . . . . . . . . . . . . . 150 Pre-DTF Switch • • • • • • • • • • • 155 Error Recovery for Non-VSAM Files . . . . 155 Volume and File Label Handling ... 162 Tape Labels . . . . . . . . . . . . . . 162 Volume Labels .162 Standard File Labels. .. .162 User Standard Labels • • 162 Nonstandard Labels . . . . . . . . . . . . . 162 Label Processing Considerations .. 165 Sample Programs . . . . . . 166 Mass Storage File Labels. • • • 174 Volume Labels . . . . . . . . . . 174 Standard File Labels . . . . . . . . . 174 User Labels • • .174 Label processing Considerations .174 Files on Mass Storage Device Opened as Input . . . . . . . . . . . . 174 Files on Mass Storage Devices Opened as Output .175 Unlabeled Files .. • • • .. .. • .175 0 • • PROCESSING ASCII TAPE FILES COBOL Language Considerations • File Handling • • • • .. • • Operational Considerations • • Obtaining an ASCII Collating Sequence on a Sort • • • • .. • • 177 .177 .177 .178 .178 RECORD FORMATS FOR NON-VSAM FILES _ • • 179 Fixed-length (Format F) Records . . . . . . 179 Undefined (Format U) Records. .. .180 Variable-Length Records . . . . . . . 180 APPLY WRITE-ONLY Clause .183 Spanned (Format S) Records.. • . . . . 183 S-Mode Capabilities • • .. .. • .184 Sequentially Organized S-Mode Files on Tape or Mass Storage Devices .185 Source Language Considerations .. _ .. 185 processing Sequentially Organized S-Mode Files . . . . . . . . . . . . . . . . 185 Directly Organized S~Mode Files .187 Source Language Considerations .187 Processing Directly Organized S-Mode Files. • .188 PART III • • .189 PROGRAMMING TECHNIQUES • • .191 Coding Considerations for DuS/v3 ... 191 General Considerations .191 COpy .. • • • • .. • • • • • • • • • • • • 191 SyntaxChecking • • • .. • .. • .. .191 Formatting the Source Program Listing .... 191 • . . . . 192 Environment Division • • • .. RESERVE Clause • • .. • • • • • .. _ .192 APPLY WRITE-ONLY Clause . . . . . . . . 192 Data Division • • • • • • .193 OVerall Considerations .. .193 FD Entries • • • . . . . . 193 Prefixes .. • • • • • • .193 Level Numbers • • • • .. .. 193 File Section • .. • • • • .194 RECORD CONTAINS Clause • • '. .. .. • .194 BLOCK CONTAINS Clause • .194 Working-Storage Section .194 Separate Modules • .. • • .. .. • .194 Locating the Working-Storage Section in Dumps • .194 REDEFINES Clause .. .194 PICTURE Clause • " .196 USAGE Clause • • .. • .. 197 SYNCHRONIZED Clause • .200 Special Considerations for DISPLAY and COMPUTATIONAL Fields. .200 Data Formats in the Computer ... .200 Procedure Division . . . . . . . . . . . . . 202 Modularizing the Procedure Division .202 Main-Line Routine • • • '. • .203 Processing Subroutines. .. .203 Input/Output Subroutines. • .203 Overall Considerations. • .203 OPTIMIZE Option .203 Intermediate Results. • • • 203 Intermediate Results and Binary Data Items • • • .. • .203 Intermediate Results and COBOL Library Subroutines • .203 Intermediate Results Greater Than 30 Digits . . . . . • .204 Intermediate Results and Floating-point Data Items . . . . . . .204 Interme9iate Results and the ON SIZE ERROR Option • • • • • .204 Exponentiation.. • • • • • • .... 204 Optimization Based on Execution Frequency • • • • • • ~ . . . . . . . . . 204 Procedure Division Statements .204 COMPUTE Statement • • • • • • 204 IF Statement. .205 MOVE Statement. .. • .205 NOTE Statement. • • .205 PERFORM Statement ,.205 READ INTO and WRITE FROM Options ... 205 TRANSFORM Statement . . . . . . . . 206 • '. . . 0 0 USING THE SORT/MERGE FEATURE . . . . . . ,.207 Sort/Merge Job Control Requirements • • 207 Sort Input and Output Control Statements . . . . . . . . . . . . . . . 207 Sort Work File Control Statements ... 208 Amount of Intermediate Storage Required. • .. • • • .. .208 Improving Performance .208 SORT-OPTION Clause. .208 PRINT Option • • • .. • ,.208 LABEL Option. • • . . . . . . 208 STORAGE Option .208 ALTWK Option • ~ .208 ERASE Option. • .. 208 ROUTE Option.. • .. .208 SORTWK Option . . . . . . . 208 SORT-OPTION Clause Examples . . . . . 208 Output File Statements . . . . . . . 208 Sort Diagnostic Messages. • • • • .209 Linkage with the Sort/Merge Feature • • 209 completion Codes. 209 Cataloging a Sort Program • ~209 Checkpoint/Restart During a Sort • ~ • • 210 Using Sort in a Multiphase Environment .210 0 • • • • • • • • USING THE REPORT WRITER FEATURE • .211 REPORT Clause in a File Description (FD) Entry • • • • • 211 Summing Techniques • • ....... 211 Use of SUM .. • • • • • . . . . . . 211 SUM Routines • • • • .212 output Line Overlay .213 Page Breaks • • .. .. .213 Control Footings and Page Format • • 213 WITH CODE Clause • • • .. 214 . . . . . . 214 NEXT GROUP Clause .. 215 Floating First Detail Report Writer Routines • .. 215 TABLE HANDLING CONSIDERATIONS • .217 ..... 217 Subscripts • .. • .. .. 217 Index-names . . . . . . . . 217 Index Data Items • OCCURS Clause • .. 217 DEPENDING ON Option .. • • • .. 217 OCCURS Clause with the DEPENDING ON Option • • • • .. • _ .. .. 218 SET Statement • .. 221 SEARCH Statement • .. 224 SEARCH ALL Statement • • .. 224 ... 225 Building Tables PART IV • .227 LISTER FEATURE.. • .. 228 Overall Operation of the Lister .... 228 The Listing • • • • .228 The Output Deck • • • • • 228 Reformatting of Identification and Environment Divisions . . . . . . . . . 228 Data Division Reformatting • • • • • 228 Procedure Division Reformatting .... 228 Summary Listing • • 228 The Source Listing. • • .228 General Appearance . . . . . . . . . . . . 228 Format Conventions. .. • . . . . . . 228 Type Indicators • • • • • .228 The Summary Listing . . . . . . . . . . . . . 228 General Appearance . . . . . . . . . . . . 228 The Output Deck .. 228 Using the Lister. • • .. .228 Options • • • • .. .. .228 Programming Considerations .228 G Debug Language . . . . . . . . ~ . . . . . . . . . . 247 Flow of control • • ... .. .. 247 Displaying Data Values During Execution .. • • .. .. . • • • • • .248 Testing a Program Selectively .250 Testing Changes and Additions to Programs • • .. .. • • • _ .. .250 Dumps ... • .• .. • • • • .. • • • 251 How to Use a Dump .. .. .. • • ... 251 Errors That Can Cause a Dump .. • .. 252 Locating a DTF .. .252 Locating Data ... 253 EXECUTION STATISTICS. • ....... 260 Obtaining Execution Statistics.. .260 Debugging and Testing ............. 260 Optimization Methods . . . . . . . . . . . . . . 260 Resequencing the Program . . . . . . . 260 Insight into SYMDMP output • • • _ .260 Common Expression Elimination .. 260 Backward Movement .260 Unrolling .260 Jamming • • • .. • • .. .. • • .260 Unswitching • _ . . . . 260 Incorporating Procedures Inline ... 260 Tabling • • • .. • • .. .260 Efficiency Guidelines • • .. • .260 Diagnostic Messages • • • • .260 Working with Diagnostic Messages .260 Generation of Diagnostic Messages • • 260 Linkage Editor Output ... 261 Execution Time Messages . . . . . . . 261 Recording Program Status • • 262 RERUN Clause. • • .. .262 Taking a Checkpoint ... 262 Restarting a Program. .263 APPENDIX A: SAMPLE PROGRAM OUTPUT .265 APPENDIX B: STANDARD TAPE FILE LABELS .279 G SYMBOLIC DEBUGGING FEATURES ....... 229 Use of the Symbolic Debugging Features .229 Statement Number Option .229 Flow Trace Option • .. • • • .. .. 229 Symbolic Debug Option ....... .. .. 229 Object-Time Control Cards . . . . . . . 230 Overall Considerations ... _ • .232 Sample Program -- Testrun .... 232 Debugging TESTRUN .233 PROGRAM CHECKOUT. • • .247 Syntax-Checking Compilation .247 Identification of Program Versions . . . . 247 APPENDIX C: STANDARD MASS STORAGE DEVICE LABELS • • • •• • ... 281 APPENDIX D: TRACK FORMATS FOR DIRECT-ACCESS STORAGE DEVICES .287 APPENDIX E: COBOL LIBRARY SUBROUTINES .289 Input/Output Subroutines . . . . e ~ . . . 289 Printer Spacing . . . . . . . . . . . . 289 Tape and Sequential Disk Labels .289 CLOSE WITH LOCK Subroutine. • .. 289 WRITE Statement Subroutines .289 READ Statement Subroutines. ..289 REWRITE Statement Subroutines .290 DISPLAY (EXHIBIT and TRACE) Subroutines • • .. • .. • • • .• .290 ACCEPT and ST0P (literal) Statement Subroutines • • • • • • • 290 CLOSE Subroutine.. • • • • .. • .290 Multiple File Tape Subroutine .290 Tape Pointer Subroutine . . . . 290 Input/Output Error Subroutines .290 Disk Extent Subroutines .290 3886 OCR Subroutine .290 VSAM Subroutines • • • • • .. • • • .290 Auxiliary Subroutines ..... _ .291 ASCII Support Subroutines . . . . . . . . 291 n separately Signed,Numeric Subroutine . . . . . . . ~ • n291 Conversion Subroutines. • • .. .291 Arithmetic Verb Subroutines • • • 0 .293 Sort/Merge Feature Interface Routine .293 Checkpoint (RERUN) Subroutine .293 Segmentation Feature Subroutine .293 Other Verb Routines _ 293 Compare Subroutines • • • 0293 MOVE Subroutines. • • .294 TRANSFORM Subroutine.. .294 Class Test Subroutine • • 294 SEARCH Subroutine • • 294 Main Program or Subprogram Subroutine • • • • .294 Object-Time Debugging Subroutines • .. 294 Debug Control Subroutine • _ . . . 294 Statement Number Subroutine . . . . . . 294 Flow Trace Subroutine .295 Symbolic Debug Subroutines _ • .295 Object-Time Execution Statistics Subroutines . . . . . . . . . . . _ • • 295 COUNT Initialization Subroutine • • 295 COUNT Frequency Subroutine. • .295 COUNT Termination Subroutine.. .295 COUNT Print Subroutine .295 Optimizer Subroutines • .295 GO TO ••• DEPENDING ON Subroutine .295 Optimizer DISPLAY Subroutine • • 296 Transient Subroutines • • • 296 Symbolic Debug Subroutines • • • • • 296 SYMDMP Error Message Subroutine • • 296 Error Message Subroutine. _ • .296 Error Message Print Subroutine • • • 296 Reposition Tape Subroutine .296 6 n • • • n n • . . . . . . • • • n • _ ... APPENDIX F: SYSTEM AND SIZE CONSIDERATIONS • • • • • • .. • .297 Minimum Machine Requirements for the Compiler • .. • • • • • • .. • .. 297 Source Program Size Considerations • • 297 Compiler Capacity • • • _ • • _ .. a297 Effective Storage Considerations • • 298 Execution Time Considerations _ 0299 Multiprogramming Considerations • • • 300 Sort Feature Considerations .... 300 APPENDIX G: COMMUNICATION REGION _ .301 Communication Region. • • • _ ... 301 APPENDIX H: SAMPLE JOB DECKS • Direct Files .. • • • creating a Direct File .. • .303 .304 .304 Retrieving and Updating a Direct File.. • .. • • • • • .. • • .. .304 Indexed Files • • .. • .. • • • .305 Creating an Indexed File. • .305 Retrieving and Updating an Indexed File.. • • • • • • • • • • • .306 Files Used in a Sort Operation .. 306 Sorting an Unlabeled Tape File • • • 306 d ... APPEaDIX I: DIAGNOSTIC MESSAGES • • 307 Compile-Time Messages • • 307 Operator Messages • • a ..... _ • • • 307 Object-Time Messages • • • ..'. • • • • 309 COBOL Object Progra~ Unnumbered Messages .318 APPENDIX J: ~OBOL 3886 OPTICAL CHARACTER READER SUPPORT _ • • .319 3886 OCR Processing .... • • .319 Implementing an OCR Operation • • 319 Document Design .. • • • • • • .. . ' . 319 Document Description . . . . . . 320 COBOL support • .. '. 320 File Description .320 Record Description. • .320 Procedural Code . . . . . . . . 321 JCL Considerations . . . . . . . . 321 Subprogram Interface _ • __ ... 321 Statements for Invoking 3886 I/O Functions . . . . . . . . . . .324 OPEN Function (Equivalent to OPEN Macro) . . . . . . . . . . . ~ . . . . . . . 324 CLOSE Function (Equivalent to DOS CLOSE Macro) . . . . . . _ .. • • .324 READ Function (Equivalent to DOS READ and WAITF Macros) • _ • • __ .324 READO Function (Equivalent to DOS READ Macro) . . . . . . . . . . .324 WAIT Function (Equivalent to DOS WAITF Macro). • • .. • • • • • .. • .324 MARKL Function (Equivalent to DOS CNTRL Macro with LMK Option) . . . . . . 324 MARKD Function (Equivalent to DOS CNTRL Macro with DMK Option) • • _ .325 EJECT Function (Equivalent to DOS CNTRL Macro, with ESP Option) .325 SETDV (Set Device by Load.ing a Format Record) Function (Equivalent to DOS SETDEV Macro) ... 325 COBOL 3886 Library Routine . . . . . . . 325 Processing Tapes from the OCR 388£, Model 2 • • • • • . . . . . 326 0 INDEX .333 ILLUSTRATIONS TABLES Table 1. Job Control Statements • 16 Table 2. Symbolic Names, Functions, and Permissible Device Types • _ • • _ _ 21 Table 3. Significant Characters for Various Options • • • • • _ _ 40 Table 4. Glossary Definition and Usage • • • • _ • .. • • • • .. • .. 65 Table 5. Symbols Used in the Listing and Glossary to Define Compiler-Generated Information 66 Table 6. System Message Identification Codes • • • • • • • _ _ • 73 Table 7. Conventional Use of Linkage Registers .. • • • _ .. • _ • • .. .. _ .. • 78 Table 8. Save Area Layout and Word Contents .. • • • • • • • • _ • • • • 79 Table 9. Recording Capacities of Mass Storage Devices • _ .. • 97 Table 10. Partial List of Prime Numbers . . . . . . . . _ • • • • .. .105 Table 11. File Status Values and Error Handling _ • • • _ . . . . . . . . 136 Table 12. File Status ~ey ?alues at OPEN • • • .. • • • • .. • • _ • • .. .. • .138 Table 13. File Status at Action Request Time _ ... _ • • • • _ . . . . . . . 138 Table 14. COBOL Statements for Creating a VSAM File • • _ .. • .. .141 Table 15. COBOL Statements for Retrieving a VSAM File __ .. _ .. .143 Table 16. Fields Preceding DTFMT and DTFSD . . . . . . . . . . . . _ • _ ... _ .151 Table 17. Fields Preceding DTFDA -ACCESS IS RANDOM -- Actual Track Addressing . . . . . . . . . . . . . . . __ .151 Table 18. Fields Preceding DTFDA -ACCESS IS RANDOM -- Relative Track Addressing . . . . . . . . . . . . . . . . 152 Table 19. Fields Preceding DTFDA -ACCESS IS SEQUENTIAL -- Actual Track Addressing . . . . . . . . . . . . . . . . . . . ~153 Table 20. Fields Preceding DTFDA -ACCESS IS SEQUENTIAL -- Relative Track Addressing . . . . . . . . . . . . . . . . . . . 154 Table 21. Fields Preceding DTFIS . . . . 154 Table 22. Fields Preceding DTFDU .155 Table 23_ Meaning of Pre-DTF Switch _ .• 155 Table 24. Errors Causing an Invalid Key Condition • • • • • • • • • • • • • 156 Table 25. Meaning of Error Bytes for GIVING Option of Error Declarative (Part 1 of 2) ••• _ • _ • • • • .157 Table 26. Location and Meaning of Error Bits for DTFMT .159 Table 27. Location and Meaning of Error Bits for DTFSD • • • • • • • .159 Table 28. Location and Meaning of .160 Error Bits for DTFDA _ • • .. • • • Table 29. Location and Meaning of Error Bits for DTFIS . . . . . . . . . . . 160 Table 30. Location and Meaning of Error Bits for DTFDU • .. • • • • .. .161 Table 31. Data Format Conversion (Part 1 of 2) ............. .198 Table 32. Relationship of PICTURE to Storage Allocation. • • • • • • • .202 Table 33. Rules for the SET Statement .223 Table 34. Individual Type Codes Used in SYMDMP Output • • • • • . • • • • • • 234 Table 35. Functions of COBOL Library Conversion Subroutines . . . . . . . . _ .292 Table 36. Functions of COBOL Library Arithmetic Subroutines. .. • • • .293 Table 37. OCR Status Key Values and User Actions • .. • • _ • • • .322 Table 38. Possible Status Key Values, By Operation • • • • • • _ • • • • • • . 322 Table 39. User Responses to Status Key 323 Table 40. CALL Statements for Invoking 3886 I/O Functions • • • • • • 326 fl • • • • • • FIGURES Figure 1. sample structure ot Job Deck for compiling, Link Editing. and Executing a Main Program and Two Subprograms • • • • • • .. .. • • • • .. • 13 Figure 3. Possible Specifications for X'ss' in the ASSGN Control statement • 25 Figure 4. Sample Label and File Extent Information for Mass Storage Files • • • • • • • • • • • • • • • 30 Figure 5. Job Definition -- Use of the Librarian • • • • • • _ • • • .. 41 Figure 6. Options Available During Link-Editing ••••••••••• 44 Figure 7. The Relative Location of the Four system Libraries • • • • • 56 Figure 8. Sample Coding to Calculate FICA • • • • • • • • • • • • .. 58 Figure 9. Altering a program from the Source Statement Library Using INSERT and DELETE Cards • • 58 Figure 10. Effect of INSERT and DELETE Cards • • • • 58 Figure 11. Examples of Compiler Output (Part 1 of 4) • __ .. 60 Figure 12. A Program that Produces COBOL Compiler Diagnostics •••• 69 Figure 13. Linkage Editor Output • 70 Figure 14. Output from Execution Job Step .. • • • • • • • • _ • • .. _ • 72 Figure 15. Calling and Called Programs . . . . . . . . . . . . . . . . . 75 Figure 16. Example of Data Flow Logic in a Call Structure • • • • • • 78 Figure 17. Sample Linkage ~outines Used with a Calling Subprogram • • • 80 Figure 18. sample In-line Parameter List •••• 81 Figure 19. sample Linkage Routines Used with a Lowest Level Subprogram 81 Figure 20. Example of an Assembler Language Subroutine for Accomplishing Overlay • • • • • • • • • .. • • • • 82 Figure 21. Flow Diagram of Overlay Logic • • • • • • • • • • 84 Figure 22. Job Control for Accomplishing Overlay • • 84 Figure 23. Calling Sequence to Obtain Overlay Between Three COBOL subprograms (Part 1 of 3) • • • • • • • 85 Figure 24. segmenting the Program SAVECORE ......... 89 Figure 25. Storage Layout for SAVECORE 91 Figure 26. Compiler Output for SAVECORE • • • • • • • • • • 92 Figure 27. Link Editing a Segmented Program • • • .. • • • • • .. • • • • 94 Figure 28. Location of Sort Program in a Segmentation Structure . . . . . 94 Figure 29. Structures of the Actual Key . . . . . . . . . . . . . . . . . . . . 102 0 • • • • • • • c • _ • .. Figure 30. Permissible Specifications for the First Eight Bytes of the Actual Key . . . . . . . . . . . . . . . 102 Figure 31. Creating a Direct File Using Method B (Part 1 of 4) • • • 107 Figure 32. Creating a Direct File with Relative Track Addressing Using Method B (Part 1 of 4) ... 112 Figure 33. Formats of Blocked and .118 Unblocked Records • • • • '. • • .. Figure 34. Adding a Record to a Prime Track ••••••••••• • .120 Figure 35_ VSAM Data Organization • .129i Figure 36_ Defining a VSAM Master Catalog • • • • • • • • • • • • • .131 Figure 37. Defining a VSAM Data Space 132 Figure 38. Defining a Key-Sequenced Suballocated VSAM File • .133 Figure 39. Standard Tape File Label and TLBL Card (Showing Maximum Specifications) . . . . . . . . . . • .163 Figure 40. Standard Tape File Label and TLBL Card (Showing Minimum Requirements) ....._ • .164 Figure 41. Standard, User Standard, and Volume Labels • • '. • • • • • • • .165 Figure 42.. Nonstandard Labels '. • • • .165 Figure 43. Processing an Unlabeled Multifile Volume (Part 1 of 2) . . . . .168 Figure 44. Readrng a Multivolume File with Standard Labels; Creating a Multifile VolUme with Standard Labels (Part 1 of 2) _ . . . . . . . . . . . . . . 170 Figure 45G Creating an Unlabeled Multivolume File (Part 1 of 2) .172 Figure 46. Fixed-Length (Format F) Records _ • • • .. .. .. • • • • • .179 Figure 47.. Undefined (Format U) Records • • • • • • • • .. • • • .180 Figure 48. Unblocked V-Mode Records .180 Figure 49. Blocked V-Mode Records ... 181 Figure 50.. Fields in Unblocked V-Mode Records . . . . . . . . . . . . . . . . . . . . . 182 Figure 51. Fields in Blocked V-Mode Records • • • • • • • • .. • • 182 Figure 52. First Two Blocks of VARIABLE-FILE-2 . . . . . . . . '. • .. .183 Figure 53.. Control Fields of an S-Mode Record • • • • • • • • .. .184 Figure 54. One Logical Record Spanning Physical Blocks . . . . . . 185 Figure 55. First Four Blocks of SPAN-FILE • • '. .. • • • ... • • .186 Figure 56. Advantage of S-Mode Records Over V-Mode Records • • • • 186 Figure 57. Direct and Sequential Spanned Files on a Mass Storage Device 187 Figure 58. Treatment of Varying Values in a Data Item of PICTURE S9 • • 202 Figure 58 .. 1. OPTION Control Statement to SORT/MERGE . . . . . . . . . . . . . . . 208 Figure 58.2ft File Name and Default Symbolic Unit Names • • • • • .208 Figure 58.3. SUMMARY OF SO~T-OPTION Operands •• 208 Figure 59. Sample of GROUP INDICATE Clause and Resultant Execution Output .213 Figure 60. Format of a Report Record when the CODE Clause is Specified .214 Figure 61. Activating the NEXT GROUP Clause ft • • • • • • • 215 Figure 62. Calculating Record Lengths When Using the OCCURS Clause with the DEPENDING ON Option • • • • • _ • • • • 220 n ft •••••••••••• ft • _ • • • • Figure 63. Table Structure in Virtual Storage _ • • • • • • • • • • • • • • • 221 Figure 64. Using the Symbolic Debugging Features to Debug the Program TESTRUN (Part 1 of 12) _ .235 Figure 65. Sample Output of EXHIBIT Statement With the CHANGED NAMED Option • • • • • • • • • • • • • • • • 249 Figure 66. Sample Dump Resulting from Abnormal Termination (Part 1 of 6) • • 254 Figure 67. Track Format .288 Figure 68. Communication Region in the Supervisor • • • • • __ • • 302 Figure 69. Sample OCR ~rogram (part 1 of 5) •••••• _ • _ • • .327 FEATURES OF THE PROGRAM PRODUCT DOS/VS COMPILER The IBM DOS/vS COBOL Compiler includes the following features: • Object Code: (1) Optimized Object Code -- which results, when specified, in up to 30% space saving in object program generated code and global tables as compared with Version 2 of the IBM DOS Full American National Standard COBOL Compiler. The space saved depends on the number of referenced procedure-names and branches, and on 01-level data names. (2) Double-Buffered ISAM -- allows faster sequential processing of indexed files. (3) The MOVE Statement and Comparisons -- when a MOVE statement or a comparison involves a one-byte literal, generated code for the move and the comparison saves object program space and compilation time. (4) DISPLAY routine subsets program Routines -- the DISPLAY has been split into for efficient object code. • Alphabetized Cross-Reference Listing (SXREF) -- for easier reference to user-specified names in a program. SXREF performs up to 25 times faster than the source-ordered cross-reference (XREF) feature of Version 2 of the IBM DOS Full American National Standard COBOL Compiler. The larger the source program, the more that performance is improved. Total compilation time is up to 2 times faster. • Debugging Facilities: (1) Symbolic Debug Feature -- which provides a symbolic formatted dump at abnormal termination, or a dynamic dump during program execution. (2) Flow Trace Option -- a formatted trace can be requested for a variable number of procedures executed before abnormal termination. (3) Statement Number Option -identifies the COBOL statement being executed at abnormal termination. (4) Expanded CLIST and SYM -- for detailed information about the Data Division and Procedure Division. (5) Relocation Factor -- can be requested to be included in addresses on the object code listing, for easier debugging. (6) Working-storage Location and Size -- When CLIST and SYM are in effect, the starting address and size of Working-Storage are printed. (7) Syntax-Check Feature -- optionally provides a quick scan of the source program without producing object code. Syntax checking can be conditional or unconditional. (8) WHEN-COMPILED Special Register -makes the date-and-time-compiled constant carried in the object module available to the object program. This special register is a programmer aid that provides a means of associating a compilation listing with both the object program and the output produced at execution time. • Device Support -- the following devices can be specified in addition to devices supported by the IBM DOS Full lli~erican National Standard COBOL coropilers: 5203,3203 -- line printers 3211 -- 150-character printer 3330,3340,3350 -- mass storage (direct access) facilities Fixed block direct access storage devices 3540 -- Diskette input/output unit 3410,3420 -- tape utility devices 2560,3504,3505,3525,3881,3886,5425 advanced unit-record devices • ASCII Suppor! -- allows creation and retrieval of tape files written in the American National Standard Code for Information Interchange (ASCII). • VSAM (Virtual Storage Access Method) Support -- provides fast storage and Features of the Program Product DOS/VS Compiler 7 retrieval of records, password protection, centralized and simplified data and space management, advanced error recovery facilities, plus system catalog. COBOL supports indexed (key-sequenced) files and sequential (entry-sequenced) files. Records can be fixed or variable in length. • FIPS (Federal Information processing Standard) Flagger -- issues messages identifying nonstandard elements in a COBOL source program. The FIPS Flagger makes it possible to ensure that COBOL clauses and statements in a DOS/VS COBOL source program conform to the Federal Information Processing Standard. • Lister -- provides a specially formatted source listing with embedded cross-references for increased intelligibility and ease of use. A reformatted source deck is available as an option. • Generic Key Facility for ISAM Files sequential record retrieval can be 8 requested using a search argument comprised of a user-specified number of high-order characters (generic portion) of the NOMINAL KEY. The user need not specify a full or exact search key. This feature is supported via the START verb. • MERGE Support -- combines from two to eight identically sequenced files on a set of specified keys and makes records available, in merged order, to an output procedure or a sequential output file. • Verb profiles -- facilitates identifying and locating verbs in the COBOL source program. Options provide a verb summary or a verb cross-reference listing which includes the verb summary. • Execution-time statistics -- maintains a count of the number of times each verb in the COBOL source progr~m is executed during an individual program execution. PART I INTRODUCTION----------------------------------------------~) JOB JOB DEFINITION--------------------------------------------~) PROCESSING--------------------------------------------~. ~ PREPARING COBOL PROGRAMS FOR LIBRARIAN PROCESSING--------------------)~ FUNCTIONS----------------------------------------~; INTERPRETING OUTPUT----------------------------------------~. ~ CALLING AND CALLED PROGRAMS--------------------------------~. ~ USING THE SEGMENTATION FEATURE------------------------------.: ~ c COBOL has undergone considerable refinement and standardization since 1959. A standard COBOL has been approved by the American National Standards Institute, an industry-wide association of computer manufacturers and users. This standard is called American National Standard COBOL. IBM Full American National Standard COBOL is compatible with American National Standard COBOL and includes a number lof extensions to it as well. An IBM COBOL program may be processed by the IBM DOS/VS System. Under control of the operating system, a set of COBOL source statements is translated to form a module. In order to be executed, the module in turn must be processed to form a phase. The reasons for this will become clear later. For now it is sufficient to note that the flow of a COBOL program through the operating system is from source statements to module to phase. The DOS/VS System consists essentially of a control program and a number of processing programs, and data management. statements. Job control statements describe the jobs to be performed and specify the programmer's reguirements for each job. Job control statements are written by the programmer using the job control language. The use of job control statements and the rules for ~pecifying them are discussed later. INITIAL PROGRAM LOADER The Initial Program Loader (IPL) routine loads the Supervisor into storage when system operation is initiated. Detailed information about the Initial Program Loader need not concern the COBOL programmer. Anyone interested in this material, however, can find it in the publication DOS/VS System Management Guide. PROCESSING PROGRAMS The processing programs include the COBOL compiler, service programs, and application programs. CONTROL PROGRAM The components of the control program are: the Supervisor, Job Control Processor, and the Initial Program Loader. SUPERVISOR The main function of the Supervisor is to provide an orderly and efficient flow of jobs through the operating system. (A job is some specified unit of work, such as the processing of a COBOL program.) The Supervisor loads into the computer the phases that are to be executed. During execution of the program, control usually alternates between the Supervisor and the processing program. The Supervisor, for example, handles all requests for input/output operations. JOB CONTROL PROCESSOR The primary function of the Job Control Processor is the processing of job control SYSTEM SERVICE PROGRAMS The system service programs provide the functions of generating the system, creating and maintaining the library sections, and editing programs into disk residence before execution. The system service programs are: 1. Linkage Editor. The Linkage Editor processes modules and incorporates them into phases. A single module can be edited to form a single phase, or several modules can be edited or linke~ together to form one executable phase. Moreover, a module to be processed by the Linkage Editor may be one that was just created (during the same job) or one that was created in a previous job and saved. The programmer instructs the Linkage Editor to perform these functions through job control statements. In addition, there are several linkage editor control statements. Information on their use is given later. Introduction 11 2. Librarian. The Librarian consists of a group of programs used for generating the system, maintaining and reorganizing the disk library areas, and providing printed and punched output from the libraries. The system libraries are: the core image library, the relocatable library, the source statement library, and the procedure library. In addition, the Librarian supports private core image, relocatable, and source statement libraries. Detailed information on the Librarian is given later. program concurrently by interleaving their execution. This support is referred to as fixed partitioned multiprogramming, since the virtual address space is divided into a fixed number of partitions. Each program occupies a contiguous area of storage. The amount of virtual storage allocated to programs to be executed may be determined when the system is generated, or it may be determined by the operator when the program is loaded into storage for execution. APPLICATION PROGRAMS BACKGROUND VS. FOREGFOUND PROGRAMS Application programs are usually programs written in a higher-level programming language (e.g., COBOL). All application programs within the Disk Operating System/Virtual storage are executed under the supervision of the control program. There are two types of problem programs in multiprogramming: background and foreground. Background and foreground programs are initiated by the Job Control Processor from batched-job input streams. IBM-SUPPLIED PROCESSING PROGRAMS The following are examples of IBM-supplied processing programs: 1. Language translators, e.g., DOS/VS COBOL, which translate source programs written in various languages into machine (or object) language. 2. Sort/Merge 3. utilities Background and foreground programs initiate and terminate independently of one another. Neither is aware of the other's status or existence. The system is capable of concurrently operating one background program and four foreground programs. Priority for CPU processing is controlled by the Supervisor with foreground programs normally having priority over background programs. Control is taken away from a high priority program when that program encounters a condition that prevents continuation of processing, until a specified event has occurred. Control is taken away from a lower priority program when an event for which a higher priority program was waiting has been completed. Interruptions are received and processed by the Supervisor. DATA MANAGEMENT A third important class of components is data management routines. These are available for inclusion in problem programs to relieve the programmer of the detailed programming associated with the transfer of data between programs and auxiliary storage. MULTIPROGRAMMING Multiprogramming refers to the ability of the system to control more than one 12 In a multiprogramming environment, the DOS/VS COBOL compiler can execute either in the background or the foreground. In systems that support the batched-job foreground and private core image library options, the Linkage Editor can execute in any foreground partition as well as in the background partition. To execute the DOS/VS COBOL compiler for the linkage editor in any foreground partition, a private core-image library is reguired. Additional information on executing the compiler and Linkage Editor in the foreground is contained in "Appendix F: System and Size Considerations." COBOL program phases can be executed as either background or foreground programs. JOB DEFINITION A job is a specified unit of work to be performed under control of the operating system. A typical job might be the processing of a COBOL program -- compiling source statements, editing the module produced to form a phase, and then executing the phase. Job definition the process of specifying the work to be done during a single job -- allows the programmer considerable flexibility. A job can include as many or as few job-2teps as the programmer desires. steps: (1) compile (main program), (2) compile (first subprogram), (3) compile (second subprogram), (4) link edit (three modules combined into one phase), and (5) execute (phase). Figure 1 shows a sample structure of the job deck for these five job steps. Compilation and execution in three job steps -- compile, link edit, and execute -- is applicable only when the COBOL source program is a single main program. III JOB PROG1 JOB STEPS A job step is exactly what the name implies -- one step in the processing of a job. Thus, in the job mentioned above, one job step is the compilation of source statements; another is the link editing of a module; another is the execution of a phase. In contrast to a job definition, the definition of a job step is fixed. Each job step involves the execution of a program, whether it be a program that is part of the Disk Operating System/Virtual Storage or a program that is written by the programmer. A compilation requires the execution of the DOS/VS COBOL compiler. Similarly, an editing implies the execution of the Linkage Editor Finally, the execution of a phase is the execution of the problem program itself. Compilation Job Steps I• I• I. 1// EXEC FCOBOL {source deck - main program) I 1/* I• I. I• III EXEC FCOBOL I {source deck - first subprogram} 1/* I. I• I• III EXEC FCOBOL I {source deck - second subprogram) 1/* I• I I • 1• 1// EXEC LNKEDT I. 1• 1• III EXEC Figure The compilation of a COBOL program may necessitate more than one job step (more than one execution of the DOS/VS COBOL compiler). In some cases, a COBOL program consists of a main program and one or more subprograms. To compile such a program, a separate job step must be specified for the main program and for each of the subprograms. Thus, the DOS/VS COBOL compiler is executed once for the main program and once for each subprogram. Each execution of the compiler produces a module. The separate modules can then be combined into one phase by a single job step -- the execution of the Linkage Editor. For a COBOL program that consists of a main program and two subprograms, compilation and execution require five 1. Multiphase Sample Structure of Job Deck for Compiling, Link Editing, and Executing a Main Program and Two Subprograms Pro~ram Execution The execution of a COBOL program has thus far been referred to as the execution of a phase. It is possible, however, to organize a COBOL program so that it is executed as two or more phases. Such a program is known as a multiphase program. By definition, a phase is that portion of a program that is loaded into virtual storage by a single operation of the Supervisor. A COBOL program can be Job Definition 13 executed as a single phase only if there is an area of virtual storage available to accommodate all of it. A program that is too large to be executed as a single phase must be structured as a mUltiphase program. The technique that enables the programmer to use subprograms that do not fit into virtual storage (along with the main program) is called ~lay. The number of phases in a COBOL program has no effect on the number of job steps required to process that program. As will be seen, the Linkage Editor can produce one or more phases in a single job step. Similarly, both single-phase and multiphase programs require only one execution job step. Phase execution is the execution of all phases that constitute one COBOL program. Detailed information on overlay structures, as well as information on using the facilities of the operating system to create multiple phases and to execute them, can be found in the chapter "Calling and Called Programs." TYPES OF JOBS A typical job falls into one of several categories. A brief description of these categories follows; a complete discussion is found in the chapter "Preparing COBOL Programs for Processing." Compile-Only: Thi~ type of job involves only the execution of the COBOL compiler. It is useful when checking for errors in COBOL source statements. A compile-only job is also used to produce a module that is to be further processed in a subsequent job. A compile-only job can consist of one job step or several successive job steps. Edit-Only: This type of job involves only the execution of the Linkage Editor. It is used primarily to combine modules produced in previous compile-only jobs, and to check that all cross references between modules have been resolved. The programmer can specify that all modules be combined to form one~phase; or he can specify that some modules ~orm one phase and that others form additional phases. The phase output produced as the result of an edit-only job can be retained for execution in a subsequent job. 14 Compil~and Edit: This type of job combines the functions of the compile-only and the edit-only jobs. It requires the execution of both the COBOL compiler and the Linkage Editor. The job can include one or more compilations, resulting in one or more modules. The programmer can specify that the Linkage Editor process any or all of the modules just produced; in addition, he can specify that one or more previously produced modules be included in the linkage editor processing. Execute-Only: This type of job involves the execution of a phase (or multiple phases) produced in a previous job. Once a COBOL program has been compiled and edited successfully, it can be retained as one or more phases and executed whenever needed. This eliminates the need for recompiling and re-editing every time a COBOL program is to be executed. Edit and Execute: This type of job combines the functions of the edit-only and the execute-only jobs. It requires the execution of both the Linkage Editor and the resulting phase(s). Compile, Edit, and Execute: This type of job combines the functions of the compile and edit and the execute-only jobs. It calls for the execution of the COBOL compiler, the Linkage Editor, and the problem program; that is, the COBOL program is to be completely processed. When considering the definition of his job, the programmer should be aware of the following: if a job step is cancelled during execution, the entire job is terminated; any remaining job steps are skipped. Thus, in a compile-edit-and execute job, a failure in compilation precludes the editing of the module{s) and phase execution. Similarly, a failure in editing precludes phase execution. For this reason, a job usually should (but need not) consist of related job steps only. For example, if two independent single-phase executions are included in one job, the failure of the first phase execution precludes the execution of the second phase. Defining each phase execution as a separate job would prevent this from happening. If successful execution of both phases can be guaranteed before the job is run, however, the programmer may prefer to include both executions in a single job. JOB DEFINITION STATEMENTS Once the programmer has decided the work to be done within his job and how many job steps are required to perform the job, he can then define his job by writing job control statements. Since these statements are usually punched in cards, the set of job control statements is referred to as a job deck. In addition to job control statements, the job deck can include input data for a program that is executed during a job step. For example, input data for the COBOL compiler the COBOL program to be compiled -- can be placed in the job deck. The inclusion of input data in the job deck depends upon the manner in which the installation has assigned input/output devices. Job control statements are read from the unit named SYSRDR (system reader), which can be either a card reader, a magnetic tape unit, or a disk extent. Input to the processing programs is read from the unit named SYSIPT (system input), which also can be either a card reader, a magnetic tape unit, or a disk extent. The installation has the option of assigning either two separate devices for these units (one device for SYSRDR, a second device for SYSIPT) or one device to serve as both SYSRDR and SYSIPT. If two devices have been assigned, the job deck must consist of only job control statements; input data must be kept separate. If only one device has been assigned, input data must be included within the job deck. There are four job control statements that are used for job definition: the JOB statement, the EXEC statement, the end-of-data statement (/*), and the end-of-job statement (/&). In this chapter, the discussion of these job control statements is limited to the function and use of each statement. The rules for writing each statement are given in the chapter "Preparing COBOL Programs for Processing." The JOB statement indicates the beginning of control information for a job. The specified job name is stored in the communications region of the corresponding partition and is used by job accountin~ and to identify listings produced during execution of the job. The JOB statement may be omitted, in which case the job name NONAME is stored in the communications region. If the JOB statement is present, it must contain a job name; otherwise, an error condition occurs. The JOB statement is always printed in positions 1 through 72 on SYSLST and SYSLOG. The time-of-day and date are also printed. The JOB statement causes a skip to a new page before printing is started on SYSLST. When a JOB statement is encountered, the job control program stores the job name from the JOB statement into the communications region. If the /& statement was omitted, the next JOB statement will cause control to be transferred to the end-ai-job routine to simulate the /& statement. The EXEC statement requests the execution of a program. Therefore, one EXEC statement is required for each job step within a job. The EXEC statement indicates the program that is to be executed (for example, the COBOL compiler, the Linkage Editor). As soon as the EXEC statement has been processed, the program indicated by the statement begins execution. The end-of-data statement, also referred to as the /* (slash asterisk) statement, defines the end of a program's input data. ~When the data is included within the job deck (that is, SYSIPT and SYSRDR are the same device), the /* statement immediately follows the input data. For example, COBOL source statements would be placed immediately after _the EXEC statement for the COBOL compiler; a /* statement would follow the last COBOL source statement. Note: For an input file on a 5425 MFCU, the /* card must be followed by a blank card. When input data is kept separate (that is, SYSIPT and SYSRDR are separate devices), the /* statement immediately follows each set of input data on SYSIPT. For example, if a job consists of two compilation job steps, an editing job step, and an execution job step, SYSIPT would contain the source statements for the first compilati9n followed by a /* statement, the source statements for the second compilation followed by a /* statement, any input data for the Linkage Editor followed by a /* statement, and perhaps some input data for the problem program followed by a /* statement. The end-of-job statement, also referred to as the-/& (slash ampersand) statement, defines the end of the job. A /& statement must appear as the last statement in the job deck. Job Definition 15 OTHER JOB CONTROL STATEMENTS Table The four job definition statements form the framework of the job deck. There are a number of other job control statements in the job control language; however, not all of them must appear in the job deck. The job control statements are summarized briefly in Table 1. r---------+-------------------------------~ The double slash preceding each statement name identifies the statement as a job control statement. Most of the statements are used for data management creating, manipulating, and keeping track of data files. (Data files are externally stored collections of data from which data is read and onto which data is written.) 1. Job Control Statements r---------T-------------------------------, 1 Statement I Function I // ASSGN Input/output assignments. // CLOSE Closes a logical unit assigned to magnetic tape. // DATE Provides a date for the Communication Region. // DLAB Disk file label information. // DLBL Disk file label information and VSAM file processing. // EXEC Execute program. // EXTENT Disk file extent. // JOB Beginning of control information for a job. // LBLTYP Reserves storage for label information. // LISTIO Lists input/output assignments. // MTC Controls operations on magnetic tape. // OPTION Specifies one or more job control options. // PAUSE Creates a pause for operator intervention. // RESET Resets input/output assignments to standard assignments. // RSTRT Restarts a checkpointed program. / / TLBL Tape label information. / / TPLAB Tape label information. / / UPSI Sets user-program switches. // VOL / / XTENT 1// ZONE 1/* I I 1/& I I* Disk/tape label information. Disk file extent. Sets the zone for the date. End-of-data-file or end-of-job-step. End-of-job= I Corrments. l---------~--------------------- 16 __________ I J This chapter describes in greater detail the three types of job steps involved in processing a COBOL program. Once the reader becomes familiar with the information presented here, he should be able to write control statements by referring only to the next chapter, "Preparing COBOL Programs for Processing.~ COMPILATION Compilation is the execution of the COBOL compiler. The programmer requests compilation by placing in the job deck an EXEC statement that contains the program name FCOBOL, the name of the DOS/VS COBOL compiler. This is the EXEC FCOBOL statement. If the compiler is loaded from a user program, that program must be a cataloged phase. The name of the phase must have as its first four characters 'FCOB' • Input to the compiler is a set of COBOL source statements, consisting of either a main program or a subprogram. Source statements must be punched in Extended Binary-Coded-Decimal Interchange Code (EBCDIC). The COBOL source statements are read from SYSIPT. The job deck is read from SYSRDR. If SYSRDR and SYSIPT are assigned to the same unit, the COBOL source statements should be placed after the EXEC FCOBOL statement in the job deck. Output from the COBOL compiler is dependent upon the options specified when the system is generated. This output may include a listing of source statements exactly as they appear in the input deck. The source listing is produced on SYSLST. In addition, the module produced by the compiler may be written on SYSLNK, the linkage editor input unit, and punched on SYSPCH. separate Data and/or Procedure Division maps, a symbolic cross-reference list, and diagnostic messages can also be produced. The format of compiler output is discussed and illustrated in the chapter "Interpreting output." The programmer can override any of the compiler options specified when the system was generated, or include some not previously specified, by using the OPTION control statement in the compile job step. Compiler options are discussed in detail in the chapter "Preparing COBOL Programs for Processing." EDITING Editing is the execution of the Linkage Editor. The programmer requests editing by placing in the job deck an EXEC statement that contains the program name LNKEDT, the name of the Linkage Editor. This is the EXEC LNKEDT statement. Input to the Linkage Editor consists of a set of linkage editor control statements and one or more modules to be edited. These modules include any of the following: 1. Modules that were compiled previously in the job and placed at that time on the linkage editor input unit, SYSLNK. 2. Modules that were compiled in a previous job and saved as module decks. The module decks must be placed on SYSIPT. Linkage editor control statements are read from SYSRDR. 3. Modules that were compiled in a previous job step and cataloged in the relocatable library. The relocatable library is a collection of frequently used routines in the form of modules, that can be included in a program phase via the INCLUDE control statement in the linkage editor job step. Output from the Linkage Editor consists of one or more phases. A phase may be an entire program or it may be part of an overlay structure (multiple phases) • A phase produced by the Linkage Editor can be executed immediately after it is produced (that is, in the job step immediately following the linkage editor job step), or it can be executed later, either in a subsequent job step of the same job or in a subsequent job. In either of the latter cases, the phase to be executed must be cataloged in the core image libary~ Such a phase can be retrieved in the execute job step by specifying the phase name in the EXEC statement, where phase name is the name under which it was cataloged. Otherwise, the phase output is retained only for the duration of one job step following the linkage editor job step. That is, if the module that was just link edited is to be executed in the next job step, it need not have been cataloged. An EXEC statement will cause the phase to be brought in from the temporary part of the Job Processing 17 core image library and will begin execution. However, the next time such a module is to be executed, the linkage editor job step is required since the phase was not cataloged in the core image library. If a private core image library is assigned, output from the Linkage Editor is placed in the private core image library (either permanently or temporarily) rather than in the resident system core image library. When execution of a program is requested and a private core image library is assigned, this library is searched first for the requested phase name and then the system core image library is searched. Tn addition to the phase, the Linkage Editor produces a phase map on SYSLST. Linkage editor diagnostic messages are also printed on SYSLST. If the NOftAP option of the linkage editor ACTION control statement is specified, no phase map is produced and linkage editor diagnostic messages are listed on SYSLST, if assigned. Otherwise, the diagnostic messages are listed on SYSLOG. The contents of the phase map are discussed and illustrated in the chapter "Interpreting Output." Linkage editor control statements direct the execution of the Linkage Editor. Together with any module decks to be processed, they form the linkage editor input deck, which is read by the Job Control Processor from SYSIPT and written on SYSLNK. There are four linkage editor control statements: the ACTION statement, the PHASE statement, the ENTRY statement, and the INCLUDE statement. These statements are discussed in the next chapter. PHASE EXECUTION Phase execution is the execution of the problem program, for example, the program written by the COBOL programmer. If the program is an overlay structure (multiple phase), the execution job step actually involves the execution of all the phases in the program. 18 The phase(s) to be executed must be contained in the core image library. The core image library is a collection of executable phases from which programs are loaded by the Supervisor. A phase is written in the temporary part of the core image library by the Linkage Editor at the time the phase is produced. It is permanently retained (cataloged) in the core image library, if the programmer has so requested, via the CATAL option in the OPTION control statement. The programmer requests the execution of a phase by placing in the job deck an EXEC statement that specifies the name of the phase. However, if the phase to be executed was produced in the immediately preceding job step, it is not necessary to specify its name in the EXEC statement. MULTIPHASE PROGRAftS A COBOL program can be executed as a single phase as long as there is an area of virtual storage available to accommodate it. This area, known as the problem program area, must be large enough to contain the main program and all called subprograms. When a program is too large to be executed as a single phase, it must be structured as a multiphase program. The overlay structure available to the COBOL programmer for multiphase programs is known as root phase overlay, and is used primarily for programs of three or more phases. One phase of the program is designated as the root phase (main program) and, as such, remains in the problem program area throughout the execution of the entire program. The other phases in the program -- subordinate phas~ -- are loaded into the problem program area as they are needed. A subordinate phase may overlay any previously loaded subordinate phase, but no subordinate phase may overlay the root phase. One or more subordinate phases can reside simultaneously in storage with the root phase. Use of the linkage editor control statements needed to effect overlay are discussed in the chapter "Calling and Called Programs." PREPARING COBOL PROGRAMS FOR PROCESSING This chapter provides information about preparing COBOL source programs for compilation, link editing~ and execution. ASSIGNMENT OF INPUT/OUTPUT DEVICES Almost all COBOL programs include input/output statements calling for data to be read from or written into data files stored on external devices. COBOL programs do not reference input/output devices by their actual physical address, but rather by their symbolic names. Thus, a COBOL program is dependent on the device type but not on the actual device address. Using VSAM, it is not even dependent on the device type. The COBOL programmer need only select the symbolic name of a device from a fixed set of symbolic names. At execution time, as a job control function, the symbolic name is associated with an actual physical device. The standard assignment of physical addresses to symbolic names may be made at system generation time. However, job control statements and operator commands can alter the standard device assignment before program execution. This is discussed later in this chapter. Using DOS/VS, a logical unit may also be assigned to another logical unit or a general device class or specific device type. For more information on this, see DOS/VS System Management Guide and DOS/VS System Control Statements. The symbolic names are divided into two classes: system logical units and programmer logical units. The system logical units are used by the control program and by IBM-supplied processing programs. SYSIPT, SYSLST, SYSPCH, and SYSLOG can be implicitly referenced by certain COBOL procedural statements. Two additional names, SYSIN and SYSOUT, are defined for background program assignmentsft The names are valid only to the Job Control Processor, and cannot be referenced in the COBOL program. SYSIN can be used when SYSRDR and SYSIPT are the same device; SYSOUT must be used when SYSLST and SYSPCH are assigned to the same magnetic tape unit. A complete discussion of the assignment of the logical unit SYSCLB can be found in the publication DOS/VS System Control Statements. Programmer logical units are those in the range SYSOOO through SYS240 (depending on the number of partitions in the system) and are referred to in the COBOL source language ASSIGN clause. A COBOL programmer uses the source language ASSIGN clause to assign a file used by his problem program to the appropriate symbolic name. Although symbolic names may be assigned to physical devices at system generation time, the programmer may alter these assignments at execution time by means of the ASSGN control statement. However, if the programmer wishes to use the assignments made at system generation time for his own data files in the COBOL program, ASSGN control statements are unnecessary. Table 2 is a complete list of symbolic names and their usage. Preparing COBOL Programs for Processing 19 Table 2. Symbolic Names, Functions, and Permissible Device Types i ISymbolic I Name I ISYSRDR I I I ISYSIPT I I i I Function I , IInput unit for control statements or commands. I , I , IInput unit for programs. I I i I I Permissible Device Types Card reader Magnetic Tape unit Disk extent 3540 diskette Card reader Magnetic tape unit Disk extent 3540 diskette 1 ISYSPCH i , I I ISYSLST I , , IMain unit for punched output. I I I I laain unit for printed output. I I , ! , , I I I , , , 1 ' ISYSLOG I I I Card punch Magnetic tape unit Disk extent 3540 diskette Printer Magnetic tape unit Disk extent 3540 diskette , , I I , I I I I I I ! I I I , I , I I I , I IReceives operator messages and logs in job control 1 Printer keyboard I I sta tements. I Printer I I I Display operator console I ~--------~I--------------------------------------------~'--------------------~I ISYSLNK I I ISYSRES I I I ISYSCLB I ISYSSLB I ISYSRLB I ISYSIN I I , IInput to the Linkage Editor. , Disk extent I , I I I I I IContains the operating system, the core image I Disk extent I Ilibrary, relocatable library, source statement I I ,library, and procedure library. I I I I , IA private core image library. I Disk extent I I I f IA private source statement library. I Disk extent I f I I IA private relocatable library. I Disk extent I I ------------~I~--------------------~I IMust be used when SYSRDR and SYSIPT are assigned tol Disk I Ithe same disk extent. May be used when they are ,Magnetic tape unit I Isame disk extent. May be used when they are , Card reader I lassigned to the same card reader or magnetic tape. , 3540 Diskette I ~-------+I---------------------------------------------~I~-------------------------if ISYSOUT I I I SYSmax SYSVIS IThis name must be used when SYSPCH and SYSLST are ,Magnetic tape unit lassigned to the same magnetic tape unit. It must I Ibe assigned by the operator ASSGN command. I , I IThese units are available to the programmer as workl Any unit Ifiles or for storing data files. They are called lE£ogrammer logical units as opposed to the aboveImentioned names which are always referred to as Isystem logical unitso The largest number of I 'programmer logical units available in the system isl 1240 (SYSOOO through SYS240, depending on number of I 'partitions). The value of SYSmax is determined by I Ithe distribution of the programmer logical units I lamong the partitions. I I I IHolds virtual storage page data set. I Disk extent I ISYSREC IHolds the VSAM catalog. I ILbgs error records. I Disk extent I I Disk extent I I Preparing COBOL Programs for processing I I I I I I I I I I I I I I I I f I f I 21 JOB CONTFOL The Job Control Processor for the Disk Operating System/Virtual storage prepares the system for execution of programs in a batched job environment. Input to the Job Control Processor is in the form of job control statements and job control £.2.!l!.,mands. in the job deck. The remainder of the card may contain any character from the EBCDIC set. Comment statements are designed for communication with the operator; accordingly, they are written on the console output unit, SYSLOG, in addition to being written on SYSLST. If followed by a PAUSE control statement, the comment statement can be used to request operator action. JOB CONTROL STATEMENTS Statement Formats Job control statements are designed for an aO-column punched card format. Although certain restrictions must be observed, the 5tatements are essentially free form. Job control statements conform to these rules: 1. Two slashes (//) identify the statement as a job control statement. They ~ be in colu~ns 1 and 2. At least one blank immediately follows the second slash. ~. Exceptions: The end-of-job statement contains /& in columns 1 and 2; the end-of-data-file statement contains 1* in columns 1 and 2; the comment statement contains * in column 1 and a blank in column 2. L. Operation. This identifies the operation to be performed. It can be up to eight characters long. At least one blank follows its last character. 3. Operand. This may be blank or may contain one or more entries separated by commas. The last term must be followed by a blank, unless its last character is in column 71. 4. ~ent2. The following notation is used in the statement formats: 1. All upper-case letters represent specifications that are to appear in the actual statement exactly as shown in the statement format. For example, JOB in the operation field of the JOB sta tement sh ould be punched exactly as shown. 2. All lOWer-case letters represent generic terms that are to be replaced in the actual statement. For example, jobname is a generic term that should be replaced by the name that the programmer is giving his job. 3. Hyphens are used to join two or more words in order to form a single generic term. For example, device-address is one generic tera. 4. Brackets are used to indicate that a specification is optional and is not always required in the statement. For example, [type] indicates that the programmer's replacement for the generic term, type, mayor may not appear in the statement, depending on the programmer's requirements. 5. Braces enclosing stacked items indicate that a choice of one item ~1 be made by the programmer. For example: Optional programmer comments must be separated from the operand by at least one space. Continuation cards are not recognized by the Job Control Processor. For the exception to this rule, see the descriptions of the DLAB and TPLAB statements. All job control statements are read from the device identified by the symbolic name SYSRDR. SYS FROG ALL SYSxxx Comment statements (i.e., statements preceded by an asterisk in column 1 followed by a blank) may be placed anywhere 22 indicates that either SYS, PROG, ALL, or SYSxxx must appear in the actual statement. ~ 6. Brackets enclosing stacked items indicate that a choice of one item may., but need not, be made by the programmer. For example: The label statements must be in the order: DLBL EXTENT (one for each area or file in the volume) ,X'ss' ,ALT or indicates that either ,X'ss' or .ALT but not both, may appear in the actual statement, or the specification can be omitted entirely. i. 8. All punctuation marks shown in the statement formats other than hyphens, brackets, and braces must be punched as shown~ This includes periods, commas, and parentheses. For example, ,[date] means that the specification. if present in the statement, should consist of the programmer's replacement for the generic term date preceded by the comma with no intervening space. Even if the date is omitted, the comma must be punched as shown. The ellipsis ( ••• ) indicates where repetition may occur at the programmer's option. The portion of the format that may be repeated is determined as follows: a. Scanning right to left, determine the bracket or brace delimiter immediately to the left of the ellipsis. TLBL and must immediately precede the EXEC statement to which they apply. DESCRIPTION AND FORMATS OF JOB CONTROL STATEMENTS This section contains descriptions and formats of job control statements. Job control statements, with the exception of /*. /&, and~, contain two slashes in columns 1 and 2 to identify them. JOB Statement b. Continue scanning right to left and determine the logically matching bracket or brace delimiter. The JOB control statement indicates the beginning of control information for a job. The JOB control statement is in the following format: c. The ellipsis applies to the words and punctuation between the pair of delimiters. IL_________________________________________ / / JOB jobname JI sequence of Job Control statements The job deck for a specific job always beains with a JOB statement and ends with a /&~(end-of-job) statement. A specific job consists of one or more job steps. The beginning of a job step is indicated by the appearance of an EXEC statement. When an EXEC statement is encountered, it initiates the execution of the job step, which includes all preceding control statements up to, but not including, a previous EXEC statement. The only limitation on the sequence of statements within a job step is that which is discussed here for the label information statements. r-----------------------------------------, jobname is a programmer-defined na~e consisting of from one to eight alphanumeric characters. Any user comments can appear on the JOB control statement following the jobname (through column 72). The time of day and date appear in columns 73 to 80 when the JOB staterrent is printed on SYSLST. The time of day and date are also printed in columns 1 through 8 on the next line of SYSLOG. If a job is restarted, the jobname must be identical to that used when the checkpoint was taken. Note: The JOB statement resets the effect of all previously issued OPTION and ASSGN control statements. Preparing COBOL Programs for Processing 23 ASSGN statement The ASSGN control statement assigns a logical input/output unit to a physical device. An ASSGN control statement must be present in the job deck for each data file assigned to an external storage device in the COBOL program where these assignments differ from those established at system generation time. Data files are assigned to programmer logical units in COBOL by means of the source language ASSIGN clause. An ASSGN statement or command can also be used o;:;o.mmand, because ASSGN also opens the file. 8. Before a tape unit is assigned to SYSLST, SYSPCH, or SYSOUT, all previous assignments to this tape unit must be permanently unassigned. This may be done by using a DVCDN command instead. 9. The assignment of SYSLOG cannot be changed while a foreground partition is active. 10. • to unassign a logical unit to free it for assignment to another partition • to ignore the assignment of a logical unit, that is, program references to the logical unit are ignoredyear (00 to 99) The format to be used is the format selected when the system was generated. When the DATE statement is used, it applies only to the current job being executed. The Job Control Processor does not check the operand except to ensure that its length is eight characters. If no DATE statement is specified in the current job, the Job control Processor supplies the date given in the last SET command. The SET command is discussed in detail in the publication DOS/VS System Control Statements. A DATE statement should be included in every job deck that has as one of its job steps the execution of a COBOL program that utilizes the special register CURRENT-DATE, if the date desired is other than that designated in the previous SET command. The DATE statement should be used at compile time so that the DATE-COMPILED paraaraph is accurate and the WHEN-COMPILED ~pecial-register is effective. TLBL statement The TLBL control statement replaces the VOL and TPLAB combination used in previous versions of the system. However, the current system will continue to support these statements. The TLBL control statement contains file label information for tape label checking and writing. Its format follows: .1// TLBL filename, I [, 'file-identifier'] [,date] [,file-serial-number] [,volume-sequence-number] [,file-sequence-number] [,generation-number] [,version-number] filename identifies the file to the control program. It can be from three to seven characters in length. If the following SELECT sentence appears in a COBOL program: SELECT NEWFILE ASSIGN TO SYS003-UT-2400-S-0UTFILE the filename operand on control statements for this file must be OUTFILE. If the SELECT clause were coded: SELECT NEWFILE ASSIGN TO SYS003-UT-2400-S omitted or if a retention period is specified. file-serial-number consists of from one to six characters indicating the volume serial number of the first (or only) reel of the file. If fewer than six characters are specified, the field will be right-justified and padded with zeros. If this operand is omitted on output files, the volume serial number of the first (or only) reel of the file will be used. If the operand is omitted on input files, no checking will be done. volume-sequence-number consists of from one to four characters in ascending order for each volume of a multivolume file. This number is incremented automatically by OPEN and CLOSE routines as required. If this operand is omitted on output files, BCD 0001 will be used. If omitted on input files, no checking is done. file-sequence-number consists of from one to four characters in ascending order for each file of a multifile volume. This number is incremented automatically by OPEN and CLOSE routines as required. If this operand is omitted on output files, BCD 0001 will be used. If it is omitted on input files, no checking will be done. the filename operand on the control statement for the file must be SYS003. 'file-identifier' consists of from 1 to 17 characters, contained within apostrophes, indicating the name associated with the file on the volume. This operand may contain embedded blanks. If this operand is omitted on output files, the filename will be used. If this operand is omitted on input files, no checking will be done. date consists of from one to six characters, in the format yy/ddd, indicating the expiration date of the file for output or the creation date for input. (The day of the year may consist of from one to three characters.) For output files, a one to four character retention period (d-dddd) may be specified. If this operand is omitted, a O-day retention period will be assumed for output files. For input files, no checking will be done if this operand is generation-number consists of from one to four numeric characters that modify the file-identifier. If this operand is omitted on output files, BCD 0001 is used. If it is omitted on input files, no checking will be done. version-number consists of from one to two numeric characters that modify the generation number. If this operand is omitted on output files, BCD 01 will be used. If it is omitted on input files, no checking will be done. ~: If a tape file with standard labels is opened two different ways in the same COBOL program, and that file resides on a multifile volume, the programmer should use two separate TLBL cards with different filenames specified on each. Preparing COBOL Programs for Processing 27' for a file opened as INPUT or is ignored. DLBL statement T_" ~-v, ':.L .J..\. codes is a 2 to 4 character field indicating the type of file label, as follows: The DLBL control statement, in conjunction with the EXTENT statement, replaces the VOL, DLAB, and XTENT combination used in previous versions of the Disk Operating System. The DLBL statement has the following format: SD DA ISC , ISE 1// DLBL filename I ,[ 'file-identifer' ],[ date ],[ codes] II'-__,_[_B_L_K_S_I_Z_E_=_n_J_,_C_C_I_S_I_Z_E_=_n_>_______---' filename identifies the file to the control program. It can be from three to seven characters long. If the following SELECT sentence appears in a COBOL program: SELECT INFILE ASSIGN TO SYS005-DA-2314-A-INPUTA the filename operand on control statements for this file must be INPUTA. If the SELECT sentence is coded: SELECT IN FILE ASSIGN TO SYS005-DA-2314-A the filename operand on control statements for the file must be SYS005. 'file-identifier' is the name associated with the file on the volume. This can consist of from 1 to 44 alphanumeric characters contained within apostrophes, including the file-identifier and, if used, generation-number and versionnumber of generation. If fewer than 44 characters are used, the field is left-justified and padded with blanks. If this operand is omitted, filename will be used. date consists of from one to six characters indicating either the retention period of the file in the format d through dddd (0-9999), or the absolute e~piration date of the file in the format yy/ddd. When the d through dddd format is used, the file is retained for the number of days specified as dddd. For example, if date is specified as 31, the file will be retained a month from the day of creation. When the yy/ddd format is used, the file is retained until the day (ddd) in the year (yy) specified. For example, if date is specified as 90/200, the file will be retained through the 200th day of the year 1990. If date is omitted when the file is created, a 7-day retention period is assumed. If this operand is present 28 DU VSAM Sequential Disk Direct Access Indexed Sequential using Load Create Indexed Sequential using Load Extension, Add, or Retrieve 3540 Diskette VSAM file If code is omitted, SD is assumed. BLKSIZE=n specifies the number of bytes in a physical record. n must be less than 32,768. This parameter is valid for the 3330-11 and 3350 devices only, and its use is limited to sequential files. If specified, it overrides the BLKSIZE specification in the definition of the file (DTF). It permits reblocking of existing files to a new physical record size when they are transferred to a 3330-11 or 3350 device, without requiring recompilation of the DTF. If the BLKSIZE parameter is not specified in the DLBL statement, the new files are assumed to have the blocksize specified in the DTF. This parameter is not valid for the compile~ workfiles. For further information, see DOS/VS System Control Statements. I CISIZE=n specifies the control interval size for SAM files on fixed block devices, ~nd improves sp?ce allocation_9n such devices. The size specified must be a mUltiple of the value specified in the BLKSIZE=noperand. This operand is valid only for a DLBL statement with the code SD. It is not valid for compiler workfiles. "Appendix H: Sample Job Decks" contains illustrations of DLBL statement usage. See the section "Processing 3540 Diskette Unit Files" for the use of DLBL Cards for 3540 and the section "Virtual Storage Access Method" for use of DLBL cards for VSAM. EXTENT Statement The EXTE~T control statement defines each area (or extent) of a DASD file -- a file assigned to a mass storage device. One or more EXTENT control statements must follow each DLBL statement. The EXTENT control statement replaces the XTENT statement used in previous versions of the Disk Operating System. For more information on the XTENT statement, see DO~VS~stem Control statements. The format of the EXTENT control statement is: I 1// EXTENT [symbolic-unit],[serial-number]1 I I I ,[type],[sequence-number] I ,[relative-track],[number-of-tracks] I ,[split-cylinder-track],[B=bins] I , symbolic=unit is a 6-character field indicating the symbolic unit (SYSxxx) of the volume for which this extent is effective. If this operand is omitted, the symbolic unit of the preceding EXTENT statement will be used. When specified, symbolic-unit may be any SYSxxx assigned to the device type indicated in the SELECT sentence for the file. For example, if the following coding appears in a COBOL program: SELECT OUTFILE ASSIGN TO SYS004-DA-2314-A the symbolic unit in the EXTENT control statement can by any SYSxxx assigned to a 2314 disk pack. The symbolic unit operand is not required for an IJSYSxx filename, where xx is IN, PH, LS, RS, SL, or RL. If SYSRDR or SYSIPT is assigned, this operand must be included. serial-number consists of from one to six characters indicating the volume serial number of the volume for which this extent is effective. If fewer than six characters are used, the field will be right-justified and padded with zeros. If this operand is omitted, the volume serial number of the preceding EXTENT control statement will be used. If no serial number was provided in the EXTENT control statement, the serial number will not be checked and it will be the programmer's responsibility if files are destroyed as a result of mounting the incorrect volume. type consists of one character indicating the type of the extent, as follows: 1 2 4 8 Data area (no split cylinder) Overflow area (for an indexed file) Index area (for an indexed file) Data area (split cylinder) If this operand is omitted, 1 is assumed. sequence-number consists of from one to three characters containing a decimal number from 0 to 255 indicating the sequence number of this extent within a multi-extent file. Extent sequence 0 is used for the master index of an indexed file. If the master index is not used, the first extent of an indexed file has the sequence number 1. The extent sequence number for all other types of files begins with O. If this operand is omitted for the first extent of ISAM files, the extent will not be accepted. For SD or DA files, this operand is not required. For DA files this operand should be specified when using more than one EXTENT for a file. Direct files can have up to five extents. Indexed files can have up to eleven data extents (nine prime~ one cylinder index, one separate overflow). relative-track consists of from one to five characters indicating the sequential number of the track, relative to zero, where the data extent is to begin. If this field is omitted on an ISAM file, the extent will not be accepted. This field is not required for DA input or for SD input files (the extents from the file labels will be used). For fixed block devices, this operand is a number from 2 to 2,147,483,645 that specifies the physical block at which the extent should start. Formulas for converting actual to relative track addresses (RT) and relative track to actual for the DASD devices follow. Actual to Relative: 2311 10 x cylinder number + track number = RT 2314 20 x cylinder number + track or number = RT 2319 2321 1000 x subcell number + 100 x strip number + 20 x block number + track number = RT 3330 19 x cylinder number + track number = RT 3340 12 x cylinder number + track number = RT 3350 30 x cylinder number + track number = RT preparing COBOL Programs for Processing 29 Relative to Actual: = quotient 2311 RT 10 is cylinder remainder is track 2314 or 2319 RT 20 quotient is cylinder, remainder is track 3330 RT 19 quotient is cylinder, remainder is track 2321 RT quotient is subcell, 1000 remainderl remainderl 100 quotient is strip, remainder2 rernainder2 20 quotient is block, remainder is track There is no need to specify a creating bin for SD or 18AM files. If this operand is omitted, bin 0 is assumed for both bins. If the operand is included and positional operands are omitted, only one comma is required preceding the keyword operand. If any operands preceding the bin specification are omitted, one comma for each operand is acceptable, but unnecessary. Figure 4 shows examples of using the DLBL statement in conjunction with the EXTENT statement. "Appendix H: sample Job Decks" contains illustrations of EXTENT statement usage. VOL, DLAB,'TPLAB AND XTENT STATEMENTS 3340 RT 12 quotient is cylinder, remainder is track 3350 RT quotient is cylinder, 30 remainder is track number-of-tracks consists of from one to five characters indicating the number of tracks to be allocated to the file. For SD input files, this field may be omitted. The number of tracks for a split cylinder file must be a multiple of the number of cylinders specified for the file and the number of tracks specified for each cylinder. For fixed block devices, this operand is a number from 1 to 2,147,483,645 that specifies the number of physical blocks in the extent. split-cylinder-track consists of from one to two characters, with a value of 0 through 19, indicating the upper track number for the split cylinder in SD files. bins consists of from one to two characters identifying the 2321 bin that the extent was created for, or on which the extent is currently located. If the field is one character, the creating bin is assumed to be zero~ These statements have been replaced by the DLBL, TLBL, and EXTENT statements, and, although they are still supported by the Disk Operating System, they cannot be used for 3330 or 3340 disk files, or for VSAM files. Details as to their usage can be found in DOS/vS System Control Statements. For their use with respect to COBOL, see IBM DOS Full American National Standard COBOL Programmer's Guide. When new label information statements are prepared, DLBL, TLBL, and EXTENT should be used. LBLTYP Statement The LBLTYP control statement defines the amount of storage to be reserved at linkage edit time in the problem program area of storage in order to process tape and nonsequential DASD file labels. It applies to both background and foreground object programs, and is required if the file contains standard labels. The LBLTYP control statement immediately precedes the // EXEC LNKEDT statement in the job deck, with the exception of self-relocating programs for which it is instead submitted immediately preceding the // EXEC statement for the program. The format of the LBLTYP control statement is: I I r-----------------------------------------, I TAPE [ (nn)] I 1// LBLTYP I IL _________________________________________ NSD(nn) JI r--------~------------------------------------------------------------------------------, IDirect file: The following DLBL and EXTENT statements describe a direct file occupying 840 I I tracks, beginning on relative track 10. // DLBL MASTER,,75/001,DA I // EXTENT SYS015,111111,1,0,10,840 I I i I I I IIndexed file: 1 I The following DLBL and EXTENT statements describe an indexed file on a 2314 I loccupying 100 tracks, beginning on relative track 1100. The first EXTENT allocates a i 120-track cylinder index. The second EXTENT allocates a 80-track data area. I I // DLBL MASTER,,7S/001 p ISC I // EXTENT SYS015,111111,4,1,1100,20 IL _______________________________________________________________________________________ // EXTENT SYS015,111111,l,2,1120,80 JI Figure 30 4. Sample Label and File Extent Information for Mass Storage Files ~ ~ TAPE [ (nn)] is used only 1I tape L~~~~ requiring label information are to be processed and if no nonsequential DASD files are to be processed. nn is optional and is present only for future expansion. It is ~gnored by the Job Control Processor. ALL causes the physical units assigned to all logical units to be listed. SYSxx'x causes the physical units assigned to the logical unit specified to be listed. NSD(nn) is used if any nonsequential DASD files are to be processed, regardless of other type files that are used. nn specifies the largest number of extents to be used for a single file. UNITS LISTIO Statement DOWN causes the logical units assigned to all physical units to be listed. causes all physical units specified as inoperative to be listed. The LISTIO control statement causes the system to print a list of input/o~tput assignments on SYSLST. The format o.f the LISTIO control statement is: UA causes all physical units not currently assigned to a logical unit to be listed. r--------------------------------------~--, I I I I I I SYS PROG BG F1 1 F2 F3 / / LISTIO F4 ALL SYSxxx UNITS DOWN UA ~u X'cuu' I I I I I I I I I I IL_______________ ASSGN _______________________ (ReI. 35 and up) JI ~_~ cuu (Release 35 and up) or X'cuu' causes the logical units assigned to the physical unit specified to be listed. Ai:)SGN causes all system and program logical units assigned to the current partition to be listed. SYS causes the physical units assigned to all system logical units to be listed. MTC Statement PROG causes the physical units assigned to all background programmer logical units to be listed. BG lists the physical units assigned to all logical units of the background partition. F1 causes the physical units assigned to all foreground-one logical units to be listede F2 causes the phySical units assigned to all foreground-two logical units to be listed. F3 causes the physical units assigned to all foreground-three logical units to be listed. F4 causes the physical units assigned to all foreground-four logical units to be listed. The MTC control statement controls 2400 and 3400 series magnetic tape operations. The format is as follows: r--------------------------------------MTC opcode, {Sx~~~x~} [ , nn] : i I / / , cuu cuu ---. I I ...J ~--------------------------------------- opcode specifies the operation to be performed. opcode can be chosen from the following: BSF Backspace to tapernark BSR Backspace to interrecord gap ERG Erase gap (write blank tape) FSF Forward space to tapemark FSR Forward space to interrecord gap RUN Rewind and unload Preparing COBOL Programs for Processing 31 REW WTM Rewind Write tapemark SYSxxx represents any logical unit assigned to magnetic tape upon which the MTC control statement is to operate. NODUIvlP suppresses the DUMP option. LINK indicates that the object module is to be link edited. When the LINK option is used, the output of the COBOL compiler is written on SYSLNK. The LINK option must always pre~ede an EXEC LNKEDT statement in the job deck. , a full comp1lat10n OPTIMIZE is produced so long as no messages NCOPTIMIZE exceed the C level. If one or more OPT E-level or higher severity messages NOOPT are produced, the compiler generates the messages but does not generate OPTIMIZE (OPT) causes optimized object object text. code to be generated by the compiler. The more efficient code generated conNotes: siderably reduces the amount of space required by the object program. If 1. When the SYNTAX option is in neither LINK nor DECK is specified in effect, all of the following the OPTION statement, then optimized compile-time options are code is not generated by the compiler. suppressed: This option cannot be used if either the symbolic debug option (SYMDMP), the statement number option (STATE), or the flow trace option (FLOW!=nnJ) is requested. OPTION control statement: DECK, XREF CBL statement: SXREF, CLIST, COUNT, VERBREF, VERBSUM FLOvl [=nnJ provides the programmer with a ~ormatted trace (i.e., a list containing the proaram identification and statement ~umbers) corresponding to a variable number of procedures executed prior to an abnormal termination. The value linn" may range from a through 99. If "nn" is not specified, a value of 99 is assumed. FLOW and STXIT, and FLOW and OPT are mutually exclusive options, i.e., only 38 LINK, 2. When CSYNTAX is requested and one or more D- or E-Ievel messages occur; then the preceding options are suppressed and the CBL option FLAGE is made active. 3. Unconditional syntax checking is assumed if all of the following compile-time options are specified: ~ , OPTION control statement: NOXREF, NODECK NOLINK, CBL statement: SUPMAP. (and CLIST, SXREF, VERBSUM, and VERBREF are not specified) 4. Some compiler diagnostics do not appear when SYNTAX or CSYNTAX is in effect. These are listed in ftprogram Checkout. ft SYMDMP[=filename] indicates to the compiler that execution-time dumps might be requested for the program currently being compiled. If dumps are desired, the programmer must provide the required control cards at execution time. For storage considerations at execution time, see Appendix F: "System and Size Considerations." Use of the symbolic debug option necessitates the presence of an . additional work file, SYS005, at compile time. The nfilename ft parameter enables the programmer to specify a name for the SYS005 file that he can retain. If no filename is specified. IJSYS05 will be used. When several COBOL programs are link edited together, the nfilename n parameter enables each to have a unique SYMDMP name. Compile and execution must be done in the same job stream. The SYS005 file is deleted at end of job. For a tape file, only unlabeled tapes may be used, and the filename in the SYMDMP=filename parameter is ignored. SYMDMP and STXIT, SYMDMP and STATE, and SYMDMP and OPT are mutually exclusive options, i.e •., no more than one may be in effect during a given compilation. (However, the facilities provided by STATE are automatically included with SYMDMP.) In addition, SYMDMP and STXIT are mutually exclusive at execution-time. Additional information on the symbolic debug option and the required execution-time control cards can" be found in the chapter nSymbolic Debugging. Features. n Note: If NODECK and NOLINK are requested on the OPTION control statement and either SYMDMP or OPT is specified on the CBL card, the SYMDMP or OPT specification is ignored. CATALR NOCATALR causes the compiler to generate CATALR card images on the SYSPCH file if OPTION DECK is in effect during compilation. This will allow cataloging of the compiler produced object modules into the relocatable library. The module names in the CATALR cards adhere to the same rules as the phase names in the compiler produced PHASE cards according to the segmentation and sort phase naming conventions (see the sections on Sort and Segmentation Features). LIB NOLIB -----indicates that BASIS and/or COpy statements are in the source progra~. If either COpy or BASIS is present~ LIB must be in effect. If COpy and/or BASIS statements are not present., use of the NOLIB option yields more efficient compiler processing. VERB NOVERB indicates whether procedure-names and verb-names are to be listed with the associated code on the "object-program listing. VERB has meaning only if LISTX" CLIST., VERBSUM, VERBREF, COUNT or READY TRACE are in effect. NOVERB yields more efficient compilation. LVL= NOLVL -----indicates whether the compiler should identify COBOL clauses and statements in a DOS/VS COBOL source program that do not conform to the Federal Information Processing Standard. FIPS recognizes four language levels: low, low-intermediate, high-intermediate and full. The FIPS Flagger provides four levels of flagging from low (A) to high (D) to conform to the four levels of the FIPS. Note: The FIPS Flagger needs a disk workfile to be assigned to SYS006. VERBSUM NOVERBSUM provides a brief summary of verbs used in the program and a count of how often each verb was used. This option provides the user with a quick search for specific types of statements. VERBSUM implies VERB. VERBREF NOVERBREF provides a cross reference of all verbs used in the program. This option provides the prograrrmer with a quick index to any verb used in the program. VERBREF implies VERB and VERBSUM. COUNT NOCOUNT generates code to produce verb execution summaries at the end of problem program execution. Each verb is identified by procedure-name and by Preparing COBOL Programs for Processing 39 statement number, and the number of times it was used is indicated. In addition, the percentage of verb execution for each verb with respect to the execution of all verbs is given. A summary of all executable verbs used in a program and the number of times they are executed is provided. COUNT implies VERB. Note: If COUNT and STXIT are desired, then either STXIT must be requested in the program unit requesting COUNT, or the program unit requesting COUNT must be entered before the program unit requesting STXIT. See the chapter entitled "Execution statistics" for additional information on the COUNT option. LST statement -- New Compiler Option Card r-----------------------------------------, I In some of the preceding descriptions of the CBL card options, restrictions have been placed on the use of one option in conjunction with others. It should be noted that if these restrictions are violated, the compiler ignores all but the last of the conflicting options specified. For this reason, if after a CBL card is coded the programmer decides to use a new option that is mutually exclusive with an option on the original CBL card, a new CBL card can be added rather than changing the original card. [LSTCOMP'J fPROC=lcol~1 LSTONLY 2colJI L IL _________________________________________ JI LST must begin in column 2 (coluQn 1 must be blank) and be followed by at least one blank. DECK NODECK indicates whether an updated source deck is to be produced as a result of the lister reformatting and/or the update BASIS library. COPYPCH NOCOPYPCH will punch updated and reformatted copy libraries as a permanent part of the Source when DECK is specified. When no updated source deck is 40 PROC=lcol 2col will list the Procedure Division in either single- or double-column format. At least 132 print positions are required on the printer for the double-column' format. Mutually Exclusive Options The LST option card can be placed anywhere between the EXEC statement and the first statement of the COBOL program. It may be placed between any other compiler option cards. The options shown in the following format may appear in any order. Underscoring indicates the default case. I[I DECK, ] [COPYPCH, ] NODECK NOCOPYPCH LSTONLY LSTCOMP when LSTONLY is specified, the prograrr will not be compiled, but a reformatted listing will be produced along with a deck if DECK has been specified. LSTCOMP will provide a source listing and will compile the program as part of the job step. LSTCOMP does not suppress CLIST. For more details on the lister program, see the chapter entitled "Using the Lister Feature" • The LST statement is used to invoke the lister, a portion of the compiler that processes programs written in American National Standard COBOL to produce a reformatted source code listing containing embedded cross-reference information, and uniform indenting conventions. J requested, an updated and reformatted COpy library will be punched out. Changing the Installation Defaults In order to change the compiler default options to suit your installation, a new member, C.CBLOPTNS, must be added to the source statement library. This module must contain CBL option cards specifying the desired defaults. Resultant defaults may be overridden at compilation tiroe by supplying a eBL card in the compiler input stream. Significant Characters for Various Options The DOS/VS COBOL compiler selects the valid options for processing by looking for three significant characters of each key" option word. When the keyword is identified, it is checked for the presence or absence of the prefix ~O, as appropriate. The programmer can make the most efficient use of the CBL card by using the significant characters instead of the entire options Table 3 lists the significant characters for each option. Table 3. regular job deck for a job. Job control commands tend to be effective across jobs. whereas job control statements are confined within a job. Job control commands are discussed in detail in the publication DOS/vS System Control Statements. Significant Characters for Various Options r------------------T----------------------, I Significant ! i I Option I Characters I ~------------------+----------------------~ i SEQ I SEQ ! 1 FLAGE(W) 1 LAG,LAGW I BUF I BUF I SPACE 1 ACE I PMAP I PMA I SUPMAP 1 sUP I CLIST I CLI I ~RUNC I TRU I APOST I APO I QUOTE I QUO I SXREF I SXR STATE I STA FLOW I FLO LIB I LIB SYMDMP 1 SYM OPTIMIZE I OPT SYN~AX I SYN CSYNTAX I CSY VERB I VER ZWB I ZWB LVL I LVL COUNT I COU VERBSUM I VERBSUM VEREREF I VERBREF STXIT I STX DECK I DEC COPYPCH J COP LSTCOMP I S~C LSTONLY I STO PROC PRO _____________ J _______________ ___ I ________ ~ ~ ~ Note: SYM on the CBL card should not be confused with SYM on the OPTION card. JOB CONTROL COMMANDS Job control commands are distinguished from job control statements by the absence of // blank in positions 1 through 3 of each command. They permit the operator to adjust the system according to day-to-day operating conditions. This is particularly true in the area of device assignment, where the operator may need to {li communicate to the system that a device is unavailable, or (2) designate a different device as the standard for a given symbolic unit. Therefore, these commands normally are not a part of the LINKAGE EDITOR CONTROL STATEMEN~S Object modules used as input to the Linkage Editor must include linkage editor control statements. There are four linkage editor control statements: PHASE. INCLUDE, ENTRY, and ACTION. Linkage editor control statements initially enter the system through the device assigned to SYSRDR as part of the input job stream. PHASE and INCLUDE statements may also be present on SYSIPT or in the relocatable library. All four statements are verified for operation (INCLUDE, ACTION, ENTRY, or PHASE) and are copied to SYSLNK to become input when the Linkage Editor is executed. Linkage editor control statements must be blank in position 1 of the statement. The operand field is terminated by the first blank position. It cannot extend beyond column 72. The Linkage Editor is executed as a distinct job step. Figure 5 shows how the linkage editor function is performed as a job step in three kinds of operations. 1. Catalog Programs in Core Image Library. The 1 ~.nkage editor function is performed immed=ately preceding the operation that catiilogs programs into the core image library. When the CATAL option is sp~~ified, programs edited by the Linkage Editor are cataloged in the core image library by the Librarian after the editing function is performed. The sequence of this operation is shown in Part A of Figure 5. Note that the input for the LNKEDT function could contain modules from the relocatable library instead of. or in addition to, those modules from the card reader. tape unit; or mass storage unit extent aSSigned to SYSIPT. This is accomplished by naming the module'(s) to be copied from the relocatable library in an INCLUDE statement. Preparing COBOL Programs for Processing 40.1 2. 3. Load-and-Execute. The sequence of this operation is shown in Part B of Figure 5. Specifying OPTION LINK causes the Job Control Processor to open SYSLNK, and allows the Job Control Processor to place the object module(s) and linkage editor control statements on SYSLNK. As with the catalog operation, the input can consist of object modules from the relocatable library instead of, or in addition to, those modules from the card reader, tape unit, or disk extent assigned to SYSIPT. This is accomplished by specifying the name of the module to be included in the operand of an INCLUDE statement. After the object modules have been edited and placed in the core image library, the program is executed. The blank operand in the EXEC control statement indicates that the program that has just been link edited and temporarily stored in the core image library is to be executed. single sequence of job steps. In order to do this, the COBOL compiler is directed to write the object module directly on SYSLNK. This is done by using the LINK option in the OPTION control statement. Upon completion of this output operation, the linkage editor function is performed. The program is link edited and temporarily stored in the core image library. The sequence of this operation is shown in Part C of Figure 5. In each of the operations described in Figure 5, if a private core image library is assigned, output from the Linkage Editor will be placed (either permanently or temporarily) in the private core image library rather than in the system core image library. If the Linkage Editor is executed in a batched-job foreground partition, a private core image library must be assigned. Private core image libraries are a system generation option. Compile-and-Execute. Source modules can be compiled and then executed in a c 40.2 I I ~----- EXEC FCOSOL - - - - - . . . ; ® OPTION CATAL PHASE PROGA, * ~_ _ _ _ _ _ INCLUDE {object module} ENTRY EXEC LNKEDT I - - - - -_ _+010 - -_ _ _ _ _ EXEC PROGA -----~ LOAD AND EXECUTE Core "Storage execution .....- - - - - EXEC FCOSOl © 1 .1 I OPTION LINK I INCLUDE I JI {o bject module} I ~I------------------ENTRY ----------------------~.I EXEC LNKEDT I EXEC COMPilE AND EXECUTE Core Storage Execution I I I I OPTION LINK EXEC FCOSOl ,..-._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ENTRY .. I EXEC lNKEDT EXEC Figure 5. Job Definition -- Use of the Librarian control statement Placement The placement of linkage editor control statements is subject to the following rules: 1. The ACTION statement must be the first linkage editor control statement encountered in the input stream; otherwise r it is ignored. 2. The PHASE statement must precede each object module that is to begin a phase. 3. The INCLUDE statement must be specified for each object module that is to be included in a program phase. 4= A single ENTRY statement should follow the last object module when multiple object modules are processed in a single linkage editor run. ACTION and ENTRY statements, when present r must be on SYSRDR. PHASE and INCLUDE statements may be present on SYSRDR, SYSIPT, or in the relocatable library. PHASE Statement The PHASE statement must be specified if the output of the Linkage Editor is to consist of more than one phase or if the program phase is to be cataloged in the core image library. Each object module that begins a phase must be preceded by a PHASE statement. Any object module not preceded by a PHASE statement will be included in the current phase. The statement provides the Linkage Editor with a phase name and an origin point for the phase. The PHASE statement is in the following format: r-----------------------------------------, Il _________________________________________ PHASE narne,origin[,NOAUTO] JI Preparing COBOL Programs for Processing 41 name is the symbolic name of the phase. It is the name under which the program phase is to be cataloged. This name does not have to be the name specified in the PROGRAM-ID paragraph in the Identification Division of the source program and, in the case of segmentation and/or sort, it should not be the same. It must consist of from one to eight alphanumeric characters. Phases that are to be executed in a segmentation and/or sort structure should have phase names of from five to eight alphanumeric characters. the first four of which should be the same. An asterisk cannot be used as the first character of a phase name. If no phase name is specified, a dummy phase name of PHASE*** is used and execution stops at end of compilation. The job is then cancelled. origin indicates to the Linkage Editor the starting address of this specific phase. An asterisk may be used as an origin specification to indicate that this phase is to follow the previous phase. This origin specification format of the PHASE statement covers all applications that do not include setting up overlay structures. See the chapter "Calling and Called Programs" for information on the PHASE statement for overlay applications. NOAUTO indicates that the Automatic Library Look-Up (AUTOLINK) feature is suppressed for both the private relocatable library and the system relocatable library. (The use of NOAUTO causes the AUTOLINK process to be suppressed for that phase only.) The AUTOLINK feature is discussed later in this chapter. INCLUDE Statement The INCLUDE statement must be specified for each object module deck o~~ object module in the relocatable library that is to be included in a program phase. The format of the INCLUDE statement is as follows: r-----------------------------------------, I INCLUDE [module-namel [.(namelist)] I l _________________________________________ J The INCLUDE statement has two optional operands. When both operands are used, they must be in the prescribed order. When the first operand is omitted and the second 42 operand is used, a comma must precede the second operand. module-name must be specified when the object module is in the relocatable library. It is not specified when the module to be included is in the form of a card deck being entered from SYSIPT. module-name is the name under which the module was cataloged in the library, and must consist of from one· to eight alphanumeric characters. (namelist) causes the Linkage Editor to construct a phase from the control sections specified in the list. Since control sections are of no interest to the COBOL programmer, users interested in this option should refer to the description of the INCLUDE statement in the publication DOS/VS System Control Statements. ENTRY Statement The ENTRY statement is required only if the programmer wishes to provide a specific entry point in the first phase produced by the Linkage Editor. When no ENTRY statement is provided, the Job Control Processor writes an ENTRY staterrent with a blank operand on SYSLNK to ensure that an ENTRY statement will be present to halt link editing. The transfer address will be the load address of the first phase. The ENTRY statement is described further in the publication DOS/vS System Control Statements. ACTION Statement The ACTION statement is used to indicate linkage editor options. When used, the statement must be the first linkage editor statement in the input stream. The format of the ACTION statement is as follows: r-----------------------------------------, CLEAR I I I J I MAP NOMAP NOAUTO NOREL I JI Fl BG I F2 I F3 IL________________________________________ F4 _ CLEAR indicates that the entire temporary portion of the core image library will be set to binary zero before the beginning of the linkage editor function. CLEAR is a time-consuming function and should be used only when necessary. MAP indicates that SYSLST is available for diagnostic messages. In addition, a storage map is output on SYSLST. NOMAP indicates that SYSLST is unavailable when performing the link edit function. The mapping of storage is not performed, and all linkage editor diagnostic messages are listed on SYSLOG. NOAUTO suppresses the AUTOLINK function for both the private and system relocatable libraries during the link editing of the entire program. AUTOLINK is discussed later in this chapter. CANCEL causes an automatic cancellation of the job if any of the linkage editor errors 21001 through 21701 occur. These diagnostic messages can be found in the publication DOSjVS System Control Statements. BG, F1, F2, F3, and F4 are options used to link edit a program for execution in a partition other than that in which the link edit function is taking place. See the publication DOS/VS System Control Statements. NOREL suppresses the relocating load~r. Link editing for a specific address is performed. AUTOLINK FEATURE If any references to external-names are still unresolved after all modules have been read from SYSLNK, SYSIPT, and/or the relocatable library, AUTOLINK collects each unresolved external reference from the phase. It then searches the private relocatable library (if SYSRLB has been assigned) and the system relocatable library for module names identical to the unresolved names and includes these modules in the program phase. This feature should not be suppressed (via PHASE or ACTION statements) in linkage editor job steps which include COBOL subroutines cataloged in the relocatable library. See the chapter nCalling and Called Programs n for additional details. RELOCATING LOADER FEATURE The relocating loader feature allows users to load single-phase and multi-phase programs at any valid problem program address in the system. Under this option, the linkage editor catalogs relocatable phases into the core image library, and the relocating loader in the supervisor assigns the absolute machine addresses that are necessary for program execution. This means the user need retain only one copy of the program in the core image library. The relocating loader is an optional feature, and must be specified at system generation time. Figure 6 illustrates options available during link-editing. Preparing COBOL Programs for Processing 43 YES LINKAGE-EDITING FOR A SPECIFIC PARTITION - Default: Addresses will be adjusted for the specified virtual partition. Option: User may specify linking for the associated real partition. LINKAGE EDITOR PRODUCES RELOCATABLE PHASES NO Yes This supervisor cannot load relocatable phases. The user should specify ACTION=NOREL at link-edit time,. or generate another supervisor with relocating loader. System retains flexibility of loading in any partition. Program may be included in job stream for any partition when program is loaded. Default: Program runs in virtual mode. Option: User may specify execution in associated real partition. Figure 44 6. options Available During Link-Editing LIBRARIAN FUNCTIONS LIBRARIAN DOS/VS supports four libraries: the :ore image library, the relocatable library, the source statement library, and the procedure library. The core image, relocatable, and source statement libraries are classified as system libraries and private libraries. The procedure library exists only as a system library. The system residence device (SYSRES) contains the system libraries. Private libraries can be contained on separate disk packs. These libraries are discussed under "Private Libraries" in this chapter. Executable programs (core image format) are stored in the core image library; relocatable object modules are stored in the relocatable library; source language routines are stored in the source statement library; catalogued procedures are stored in the procedure library. Maintenance functions are used to catalog (that is, add), delete, or rename components of the four libraries, condense libraries and directories, set a condense limit for an automatic condense function, reallocate directory and library extents, and update the source statement and procedure libraries. PLANNING THE LIBRARIES The copy function is used either to completely or selectively copy the disk on which the system resides. Service functions are used to translate information from a particular library to printed (displayed) or punched output. The components of the DOS/VS system are shipped in three system libraries: the core image library, the relocatable library, and the source statement library. A fourth library -- the procedure library -- is available but it does not contain any information when the system is shipped. Kost programs and procedures developed and used by your installation will also be stored in these libraries. In addition to the system libraries, DOS/VS supports private libraries which you can use to either sUbstitute for or supplement the corresponding system libraries. Planning the size, contents, and location of these libraries according to the needs of your installation is an essential part of the system generation procedure. such detailed planning will ensure that: The Librarian is a group of programs that perform three major functions: 1. Maintenance 2. Service 3. Copy Only the catalog maintenance function of the Librarian is discussed in this publication for the four system libraries. In addition, the update function of the source statement library is discussed. A complete description of librarian functions can be found in· the publication DOS/VS System Control Statements. 4 CORE IMAGE LIBRARY The core image library may contain any number of programs. Each program consists of one or more separate phases. Associated with the core image library is a core image directory which contains a unique descriptive entry for each phase in the core image library. These entries in the core image directory are used to locate and retrieve phases from the core image library. • No disk space is wasted by components not required in your installation. Cataloging and Retieving Program Phases -Core Image Library • The libraries are large enough to allow for future additions. • The libraries are accessed by the system with maximum efficiency. If a program is to be cataloged in the core image library, the job control statement II OPTION with the CATAL option Librarian Functions 45 must be specified pr~or to the first linkage editor control card, and must precede the first PHASE card of the program to be cataloged. Upon successful completion of the linkage editor job step, output from the Linkage Editor is placed in the core image library as a permanent member. The program phase is cataloged under the name specified in the PHASE statement. If a phase in the core image library is to be replaced by a new phase having the same name, only the catalog function need be used. The previously cataloged phase of the same name is implicitly deleted from the core image directory by the catalog function, and the space it occupies in the library can later be released by the condense function. Note: The necessary ASSGN control statements must follow the II JOB control statement if the current assignments are not the following: 1. SYSRDR -- Card reader, tape unit, or disk extent 2. SYSIPT -- Card reader, tape unit, or disk extent 3. SYSLST -- Printer, tape unit, or disk extent 4. SYSLOG Printer keyboard 5. SYSLNK Disk extent EXEC LNKEDT 1* 1& When the phase is executed in a subsequent job, the EXEC statement that calls for execution must specify FOURA, i.e., the name by which the phase has been cataloged. II II JOB EXJOB EXFC FOURA 1& Phases can be in either non-relocatable or relocatable format. The non-relocatable phases are loaded at the addres~ computed at link-edit time into a real or virtual partition. The load addresses and address constants of relocatable phases can be modified by the relocating loader. These phases can be loaded at a ~al address different from the one for which it was link-edited. RELOCATABLE LIBRARY The following is an example of cataloging a single phase, FOURA, into the core image library. (The program phase FOURA can be executed in the next job step by specifying the II EXEC statement with a blank name field.) II II 1* II JOB CATALOG OPTION CATAL PHASE FOURA,* INCLUDE The relocatable library contains any number of modules. Each module is a complete object deck in relocatable format. The purpose of the relocatable library is to allow the programmer to maintain frequently used routines in residence and combine them with other modules without recompiling. Associated with the relocatable library is the relocatable directory. The directory contains a uniaue, descriptive entry for each module in the relocatable library. The entries in the relocatable directory are used to locate and retrieve modules in the relocatable library. ~AINTENANCE FUNCTIONS {object deck} 1* II II II 1& LBLTYP TAPE EXEC LIKEDT EXEC To compile, link edit, and catalog the phase FOURA into the core image library in the same iob. the followinq iob deck could be used: - II JOB CATALOG II OPTION CATAL PHASE FOURA,* II EXEC FCOBOL 46 To request a maintenance function for the relocatable library, the following control statement is used: II EXEC MAINT Cataloqing a Module -- Relocatable Librarv The catalog function adds a module to the relocatable library. A module in the relocatable library is the output of a complete COBOL compilation. The catalog function implies a delete function. Thus, if a module exists in the relocatable library with the same name as a module to be cataloged, the module in the library is deleted by deleting reference to it in the relocatable directory. The CATALR control statement is required to add a module to the relocatable library. The format of the CATALR control statement is: r-----------------------------------------, iL_________________________________________ CATALR module-name [,v.m] JI module-name is the name by which the module is known to the control program. The module-name consists of from one to eight characters , the first of which must not be an asterisk. on SYSPCH. The next job step catalogs the object module (MOD9) into the relocatable library. Since the object module must be cataloged from SYSIPT. a message to the operator instructs him to place the object module on SYSIPT behind the CATALR statement. The following is an example of cataloging two previously created object modules in the relocatable library: // JOB EIGHT // EXEC MAINT CATALR MOD8A {object deck} CATALR MOD8B {object deck} /* /& v.m specifies the change level at which the module is to be cataloged. ~ may be any decimal number from 0 through 127. ~ may be any decimal number from o through 255. If this operand is omitted, a change level of 0.0 is assumed. A change level can be assigned only when a module is cataloged. All control statements required to catalog an object module must be read from SYSIPT. Note: If SYSRDR and/or SYSIPT are assigned to a tape unit, the MAINT program assumes that the tape is positioned to the first input record. The tape is not rewound at the end of the job. If a tape mark is found, MAINT assumes end-of-job. The following is an example of compiling a source program and cataloging the resultant module in the relocatable libra~y. The job deck is read from SYSIPT. // JOB NINE // OPTION DECK // EXEC FCOBOL An additional capability of the system permits a programmer to compile a program and to catalog it to the system relocatable, or private relocatable, library in one continuous run. The programmer inserts a CATALR statement in his job control input stream preceding the compiler execute statement. The CATALR statement will be written on the SYSPCH file (tape or mass storage device) ahead of the compiler output when OPTION DECK is in effect. The programmer then reassigns the SYSPCH file as SYSIPT and executes the MAINT program to perform the catalog function. The output of the co~pilation (on tape or mass storage device) may be cataloged immediately or it may be cataloged at some later time. It can also be held after cataloging as backup of the compilationo The preceding method is recorrmended for single-module object decks. In programs for which the compiler produces multimodule object decks (when segmentation and/or SORT are being used), it is necessary to use the CBL card CATALR option. This option causes a CATALR card to precede each object module. {source deck} SOURCE STATEMENT LIBRARY /* // PAUSE PLACE DECK AFTER CATALR CARD // EXEC MAINT CATALR MOD9 (punched deck goes here) /* /& In the above example, as a result of the compile step, the object module is written The source statement library contains any number of books. Each book in the source statement library is composed of a sequence of source language statements. The purpose of the source statement library is to allow the COBOL prograrrwer to initiate the compilation of a book into the source program by using the COPY statement or BASIS card. Librarian Functions 47 4 Each book in the source statement library is classified as belonging to a specific sublibrary. Sublibraries are defined for three programming languages: Assembler, PL/I, and COBOL. Individual books are classified by sublibrary names. Therefore, books written in each of these languages may have the same name. The operation field contains CATALS. sublib represents the sublibrary to which a book is to be cataloged and can be: Any alphanumeric character (0-9, A-Z, #, $, and @) representing source statement libraries. The characters A, C, E, and P have special uses: Associated with the source statement library is a source statement directory. The directory contains a unique descriptive entry for each book in the source statement library. The entries in the source statement directory are used to locate and retrieve books in the source statement library. A and E are used for the Assembler sublibrary C is used for the COBOL sublibrary P is used for POWER in PL/I MAINTENANCE FUNCTIONS To request a maintenance function for the source statement library, the following control statement must be used: // EXEC MAINT Cataloging a Book -- Source Statement Library The sublib qualifier is required. If omitted, the operand will be flagged as invalid and no processing will be done on the book. library-name represents the name of the book to be cataloged. The library-name consists of from one to eight alphanumeric characters, the first of which must be alphabetic. It is the name the programmer uses to retrieve the book when using the source language COpy statement or BASIS card. v.m specifies the change level at which the book is to be cataloged. v may be any decimal number from 0 through 127; ~ may be any decimal· number from 0 through 255. If this operand is omitted, a change level of 0.0 is assumed. The v.m operand becomes part of the entry in the directory for the specified book. Its value is incremented each time an update is performed on the book. The CATALS control statement is required to add a book to a sublibrary of the source statement library. A book added to a sublibrary of the source statement library is removed by using the delete function. When a book exists in a sublibrary with the same name as a book to be cataloged in that sublibrary, the existing book in the sublibrary is deleted. The following is the format of the CATALS control statement: r-----------------------------------------, IL _________________________________________ CATALS sublib.library-name[,v.m[,C]] JI 48 C indicates that change level verification is required before updates are accepted for this book. See the UPDATE control statement, discussed later in this chapter, for its relationship to the v.m and C operands of the CATALS control statement. In addition to the CATALS control statement, a control statement of the following form must precede and follow the book to be cataloged: description of the Data Division or a paragraph of the Procedure Division. The following is an example of cataloging a file description in the COBOL sublibrary of the source statement library. II JOB ANYNAME II EXEC MAINT CATALS C.PILEA C.FILEA BLOCK CONTAINS 13 RECORDS RECORD CONTAINS 120 CHARACTERS LABEL RECORDS AFE STANDARD DATA RECORD IS RECA. EKEND BKEND [sublib.library-name],[SEQNCE], B~END [count],[C~PRSD] All operand entries are optional. When used, the entries must be in the prescribed order and need appear only in the oKEND statement preceding the book to be cataloged. The first entry in the operand field is identical to the operand of the CArALS control statement. SE:QNCE specifies that columns 76 to 80 of the card images constituting the book are to be checked for ascending sequence numbers. If an error is detected in the sequence checking, an error message is printed. The error can be corrected, and the book can be recataloged. count specifies the number of card images in the book. When the £QYni operand is used, the card input is counted, beginning with preceding E~END statement and including the subseguent BKEND statement. If an error is detected in the card count, an error message is printed. The error can be corrected, and the book can be reca taloged • CMPRSD indicates that the book to be cataloged in the library is in compressed format as a result of CMPRSD having been specified when performing a PUNCH or DSPCH service function. These functions are described in the publication DOS/VS ~stem Control Statements. Card input for the catalog function is from the device assigned to SYSIPT. The CATALS control statement is also read from the device assigned to SYSIPT. 1* 1& Retrieving a Cataloged Book -- COBOL COPY Statement: The preceding file description can be included in a COBOL source program by writing the following statement: FD PILEB COPY FILEA. Note that the library entry does not include PD or the file-name. It begins with the first clause that is actually to follow the file-name. This is true for all options of the COpy statement. Rowever, data entries in the library may have a level number t01 or 77) identical to the level number of the data-name that precedes the COpy statement. In this case, all information about the library data-name is copied from th€ library and all references to the l~brary data-name are replaced by the data-name in the program if the REPLACING option is specified. The change is made only for this program. The entry as it appears in the library remains unchanged. For example, assume the following data entry is cataloged under the library-name DATAR, 01 PAYFILE USAGE IS DISPLAY. 02 CALC PICTUKE 99. 02 GRADE PICTURE 9 OCCURS 1 DEPENDING ON CALC OF PAYFILE. and the following statement is written in a COBOL source module: 01 GROSS COPY DATAR REPLA:ING PAYFILE BY GROSS. The compiler interprets this as: Prequently used Environment Division, Data Division, and Procedure Division entries can be cataloged in the COBOL sublibrary of the source statement library. A book in the source statement library might consist, for example, of a file 01 GROSS USAGE IS DISPLAY. 02 CALC PICTURE 99. 02 GRADE PICTURE 9 OCCURS 1 DEPENDING ON CALC OP GROSS. Librarian Functions 49 t : . Note also that the library-name is used to identify the book in the library. It has no other use in the COBOL program. Text cataloged in the source statement library must conform to COBOL margin restrictions. The COBOL COpy statement is discussed in detail in the section "Extended Source Program Library Facility." s.booki provides a temporary update option. The old book is renamed s.bookl and the updated book is namea-----subliQ~ibra£y-name. §. indicates the sublibrary that contains the old, renamed book. It may be one of the characters 0 through 9, A through Z, #, $, or roo If this operand is not specified, the old book~is deleted. v.m Updatin~ks represents the change level of the book to be updated. y may be any decimal number from 0 through 127; ~ may be any decimal number from 0 through 255. This operand must be present if change level verification is to be performed. U~e of the optional entry C in the CATALS control statement at the time the book is cataloged in the library determines whether change level verification is reouired before updating. If the directory entry specifies that change level verification is not required before updating, the change level operand in the UPDATE control statement is ignored. -- Source Statement Libra£y The update function is used to make changes to properly identified statements within a book in the source statement library. Statements are identified in the identification field, columns 73 through 80, which is fixed in format as follows: Columns 73-76 Program identification which must be constant throughout the book. Columns 77-80 Sequence number of the statement within the book. If the change level is verified, the _change level in the book's directory entry is increased by 1 by the system for verification of the next update. If ~ is at its maximum value and an update is processed, m is reset to 0 and the value of y is increased by 1. If both v and m are at their maximum values and an update is processed, both v and m are reset to O. One or more source statements may be added to, deleted from, or replaced in a book in the library without the necessity of replacing the entire book. The update function also provides these facilities: 1. Resequencing statements within a book in the source statement library 2. Changing the book 3. Adding or removing the change level requirement 4. Copyin~ a book with optional retention of the old book with a new name (for backup purposes) chan~e level (v.m) of the nn The UPDATE control staterntnt is used for the update function and has the following format: , UPDATE sublib.library-name,[s.book1],1 [v.m],[nn] I ---l The operation field contains UPDATF. sublib represents the sublibrary that contains the book to be updated. It may be any of the characters 0 through 9, A through Z, #, $, or ~. 50 represents the resequencing status required for the update. nn may be a 1- or 2-cha~acter decimal number from 1 through .0, or it may be the word NO. If nn is a decimal number, it represents the increment that will be used in reseguoncing the statements in the book. If nn is NO, the statements will not be resequenced. If nn is not specified, the statements will be resequenced with an increment of 1. When a book is resequenced, the sequence number of thefirst statement is 0000. For example, if a buok is cataloged in the source statement library with sequence numbErs ranging from 0010 through 1001 with increments of 5 for each statement: and rrll is not specified when the update function is performEd, the book is resequenced with numbers 0000, 0001, 0002, ••• etc. and NO is specified, insertions, deletions, and/or replacements are made with no effect on the original sequence numbers. and ~ is specified as 2, the book is resequenced with numbers 0000, 0002, 0004, ••• etc., regardless of the original sequencing of the book in the library or the sequence numbers of the added or replacement cards. The UPDATE control statement is followed by ADD, DEL (delete), and/or REP (replace) control statements as required, followed by the terminating END statement. The ADD, DEL, REP, and END statements are identified as update control statements by a right parenthesis in the first position (column 1 in card format). This is a variation from the general librarian control statement format; thus, it clearly identifies these control statements as part of the update function. ADD statement: The ADD statement is used for the addition of source statements to a book. The format is: REP Statement: The REP statement is used when replacement of source statements is reguired in a book. The format is: ) REP first-seq-no[,last-seg-no] REP indicates that source statements following this statement are to replace existing statements in a book. first-seq-no last-seg-no represent the sequence numbers of the first and last statements of a section to be replaced. Each number may be a decimal ;umber consisting of from one to four characters. Any number of new statements can be added to a book when (The number of a section is replaced. statements added need not equal the number of statements being replaced.) Seguence number 9999 is the highest number acceptable for a statement to be updated. If the book is so large that statement sequence numbers have "wrapped around" (progressed from 9998, 9999, to 0000,0001), it will not be possible to update statements 0000 and 0001. ) ADD seq-no END Statement: This statement indicates the end of updates for a given book. The format is: ADD indicates that source statements following this statement are to be added to the book. seq-no represents the sequence number of the statement in the book after which the new statements are to be added. It may be any decimal number consisting of from one to four characters. ) EN D [v. m[ , C ] ] v.m represents the change level to be assigned to the book after it is updated; y may be any decimal number from 0 through 121. ~ may be any decimal number from 0 through 255. This operand provides an additional means of specifying the change level of a book in the library. (The other method is through the use of the ~ operand in the CATALS statement.) DEL Statement: The DEL statement causes the deletion of source statements from the book. The format is: DEL first-seq-no[ ,last-seq-no] C DEL indicates that statements are to be deleted from the book. first-seq-no last-seq-no represent the sequence numbers of the first and last statements of a section to be deleted. Each number may be a decimal number consisting of from one to four characters. If last-seg-no is not specified, the statement represented by first-seg-no is the only statement deleted. indicates that change level verification is required before any subsequent updates for a given book.· If ~ is specified and £ is omitted, the book does not require change level verification before a subsequent update. This feature removes a previously specified verification requirement for a particular book. If both optional operands are omitted, the change level in the book's directory entry is increased as a result of the Librarian Functions 51 update, and the verification requirement remains unchanged. ADD, DEL, or REP Statements: 1. If there is an invalid operation or operand in an ADD, DEL, or REP statement, the statement is flagged, the book is not updated, and the remaining control statements are checked to determine their validity. All options of the UPDATE and END statements are ignored. 2. The second operand must be greater than the first operand in a DEL or REP statement. If not, the statement is considered invalid and is flagged, the book is not upd~ted, and the remaining control statements are checked to determine their validity. All options of the UPDATE and END statements are ignored. 3. All updates to a book between an UPDATE statement and an END statement must be in ascending sequential order of statement sequence numbers. The first operand of a DEL or REP statement must be greater than the last operand of the preceding control statement. The operand of an ADD statement must be equal to or greater than the last operand of the preceding control statement. Consecutive ADD statements must not have the same operand. If these conditions are not met, the default is the same as for items 1 and 2. control statement Placement: Control statement input for the update function, read from the device assigned to SYSIN, must be in the following order: 1. The JOB control statement. 2. The ASSGN control statements, if the current assignments are not those required. The ASSGN control statements that can be used are SYSIN, SYSLST, and SYSLOG. 3. The EXEC MAINT control statement. 4. The UPDATE control statement. 5. ) ADD, ) DEL, or ) REP statements with appropriate source statements. 6. ) END statement. 7. The /* control statement. 8. The /& control statement, which is the last control statement of the job. The source statement library can also be updated by using the DELETE and INSERT cards. These are discussed in "Extended Source Program Library Facility" in this chapter, and in the publication IBM DOS Full American National Standard COBOL. UPDATE Function -- Invalid Operand Defaults END Statement: If the first operand of the END statement is invalid, the statement is flagged, both operands are ignored, and the book is updated as though no operands were specified. If the second operand is invalid, the statement is flagged, the operand is ignored, and the book is updated as though the second operand were not specified. UPDATE Statement: 1. If the first or second operand is invalid, the statement is flagged, the book is not updated, and the remaining control statements are checked to determine their validity. 2. If change level verification is required and the incorrect change level is specified, the statement is flagged, the book is not updated, and the remaining control statements are checked to determine their validity. 3. If the resequencing operand is invalid, resequencing is done in increments of 1. 52 Out-oi-Sequence Updates: If the source statements to be added to a book are not in sequence or do not contain sequence numbers, the book is updated, and a message indicating the error appears following the END statement. If the resequencing option has been specified in the UPDATE statement, the book is sequenced by the specified value, and subsequent updating is possible. If the resequencing option is not specified, the book is resequenced in increments of 1, and subsequent updating viII be possible. If the resequencing option NO is specified, the book will be out of sequence, and subsequent updating may not be possible. The Procedure Library The procedure library is a new system library that may be used to store -- in card image format -• Frequently used sets w procedures, of job control and linkage editor statements (basic support). • Procedures additionally containing inline SYSIPT data, especially control statements for system utility and service programs (extended support). The inline SYSIPT data must be processed under control of the device-independent sequential IOCS or by IBM-supplied service programs and language translators. The procedure library is part of SYSRES, so the maintenance and service functions available for the other DOS/VS libraries will also support the procedure library. Cataloged procedures may be included in the job control input stream by a job control statement and temporarily modified by overwrite statements. For more details on cataloged procedures, see DOS/vS System Control statements. MAINT, PROCEDURE LIBRARY To request a maintenance function for the procedure library. use the following EXEC control statement: statement Format: CATALP procedurename[,VM=v.m] [,EOP=yy] NO ,DATA=YES Each control statement in the procedure library should have a unique identity • This identity is required to modify the job stream at execution time. Therefore, when cataloging, identify each control statement in columns 73-79 (blanks may be embedded) • ........ __ ..... ,....,.rl" ....... " ...... ~'I"Y'\.C't. ~L v\",~'Ir.A u.,L ~.I..IU..ul-.;;:::: represents the name of the procedure to be cataloged. The procedurename consists of one to eight alphameric characters, the first of which must be alphabetic. It must not be ALL. VM=v.m specifies the change level at which the procedure is to be cataloged. v may be any decimal number from 0-127. m may be any decimal number from 0-255. If this operand is omitted, a change level of 0.0 is assumed. A change level can be assigned only when a procedure is cataloged. The change level is displayed and punched by the service functions. EOP=yy specifies a two-character end-of-procedure delimiter. The EOP parameter can be any combination of characters except /*, /&, //; it must not contain a blank or a comma. The system assumes /+ as default end-of-procedure delimiter. Otherwise you can omit the EOP parameter. // EXEC MAINT One or more of the maintenance functions (catalog, delete, rename, condense, set condense limit, or reallocate) can be requested within a single run. Any number of procedures within the procedure library can be acted upon in this run. Further & one or more of the maintenance functions for either of the other three libraries (core image, source statement, or relocatable) can be requested within this run, for the same MAINT program maintains all four libraries. Catalog The control statement required to add a procedure to the procedure library is the CATALP statement. Any number of procedures may be cataloged in a single run. Each procedure must immediately follow the respective CATALP statement. DATA=YES specifies that a procedure contains SYSIPT inline data. These procedures can only be executed in the extended procedure support. A procedure to be cataloged into the procedure library may consist of Job Control and linkage editor statements and, if the supervisor was generated with the SYSFIL option, additional control statements for IBM-supplied control and service programs and data processed under control of the device-independent sequential IOCS. 'The end of a procedure is indicated by the /+ end-of-procedure delimiter or by the end-of-procedure delimiter as specified in the EOP parameter. If SYSIN is assigned to a tape unit, the MAINT program assumes that the tape is positioned to the first input record. The tape is not rewound at the end of job. Librarian Functions 53 Control statement input for the catalog function, read from the properly assigned device (usually SYSIN), is: 1. the JOB control statement, followed by 2. the ASSGN control statements, if the current assignments are not those required. The ASSGN statements that can be used are SYSIN, SYSLST, and SYSLOG. The ASSGN statements are followed by 3. the EXEC MAINT control statement, followed by 4. the CATALP control statement(s), followed by 5. the module to be cataloged, followed by 6. the /* control statement if other job steps are to follow, or EXEC statement. Conversely, if the JOB statement is not cataloged, a JOB statement must precede the EXEC statement that retrieves the procedure. 3. A cataloged procedure must not include any of the following control statements because they are not accepted when the procedure is processed: ASSGN RESET RESET RESET CLOSE ASSGN / / RESET // // // // // [// SYSRDR,X'cuu' SYS ALL SYSRDR SYSRDR,X'cuu' SYSIPT.x.cuu'] SYSIPT only if SYSIPT data is included / / CLOSE SYSIPT,X'cuu· 7. the /& control statement, which is the last control statement of the job. For example: // JOB CATPROC ASSGN control statements, if required 4. cataloged procedures cannot be nested, that is, a cataloged procedure cannot contain an EXEC statement that invokes another cataloged procedure. Note: Maintenance cannot be performed in the background partition on the procedure library while a foreground partition is using the library. PSERV, PROCEDURE LIBRARY , // EXEC MAINT CATALP PROCA,EOP=AA,DATA=YES control statements SY3IPT inline data /* END OF SYSIPT DATA To request a service function for the procedure library, use the following EXEC control statement: // EXEC PSERV One or functions run. Any procedure run. more of the three service can be requested within a single number of procedures within the library can be acted upon in this control statements CALLING CATALOGED PROCEDURES AA END OF PROCEDURE The following restrictions apply when you catalog procedures to the procedure library: 1. 2. 54 A cataloged procedure cannot contain control statements or SYSIPT data for more than one job. If the cataloged control statements include the JOB statement, you must not have a JOB statement when you retrieve the procedure through the A cataloged procedure is called by a job that appears in the input stream or via an operator command. The job must consist of a JOB statement and an EXEC statement that specifies the cataloged procedure name. For example: // EXEC PROC=VCOBCLG The programmer can write cataloged procedures which incorporate job control he used frequently. For example, the programmer may wish to catalog a procedure for compiling, link-editing, and executing a program. It is particularly useful for compiling in a low-priority test partition to which no card reader has been assigned. Using cataloged procedures, the operator can execute via the EXEC statement a cataloged procedure from the console. PRIVATE LIBRARIES Private libraries are desirable in the system to permit some libraries to be located on a disk pack other than the one used by SYSRES. Private libraries are supported for the core image library, the relocatable library, and the source statement library, on the 2311, 2314, 2319, 3330, 3340, fixed block devices, and mass storage devices. However, the following restrictions apply: 1. The private library must be on the same type of disk device as SYSRES; the private core-image library can be on a type of device other than the one SYSRES is on. 2. Reference may be made to a private core image library only if SYSCLB is assigned. If SYSCLB is assigned, the system core image library cannot be changed. 3. Reference may be made to a private relocatable library only if SYSRLB J.S assigned. If SYSRLB is assigned, the system relocatable library cannot be changed. 4. Reference may be made to a private source statement library only if SYSSLB is assigned. If SYSSLB is assigned, the system source statement library cannot be changed. 5. Private libraries cannot be reallocated. 6. The COPY function is not effective for private libraries except when they are being created. An unlimited nurrber of private libraries is possible. However, each must be distinguished by a unique file identification in the DLBL statement for the library. No more than one private relocatable library and one private source statement library may be assigned in a given job. The creation and maintenance of private libraries is discussed in the publication DOS/vS System Control Statements. Determininq the Location of the Libraries Having decided which libraries you want in your system, you must determine where on the available devices these libraries are to be placed. All system libraries must reside in the SYSRES extent of the systew disk pack in a predefined sequence (Figure ~~·ha~!t~~~~~t;tlt~r!~~~~e~~c~~!Ys~~~:!.ble pack (outside the SYSRES extent), this is not recommended because it involves increased movement of the disk arm. Librarian Functions 55 t Page of SC28-6478-0, revised 3/22/74 by TNL: SN28-1063 ....- end of SYSRES extent Figure 7. The Relative Location of the Four System Libraries The directory area for each library is not shown in the Figure 7. By definition, all system libraries reside on the system residence file (SYSRES). If you have additional disk drives, you can define private core image, relocatable, and/or source statement libraries on the extra volumes. These volumes must be of the same type as the SYSRES pack. The system relocatable and system source statement libraries can be removed from SYSRES and established as private libraries; the system core image library, however, must always be present on SYSRES. It can be supplemented but not replaced by a private core image library. The procedure library is supported only as a system library; you cannot create a private procedure library. 56 SOURCE LANGUAGE CONSIDERATIONS To use the private source statement library for COPY, BASIS, INSERT, and DELETE(see "Extended Source Program Library Facility" for further details), the ASSGN, DLBL, and EXTENT control state~ents that define this private library must be present in the job deck for compilation (unless they are permanently set up by the installation). When present, a search for the book is ~ade in the private library. If it is not there, the system library is searched. If the state~ents for the private library are not present, the system library is searched. A prograrrmer may create several private libraries, but only one private library can be used in a given job. EXTENDED SOURCE PROGRAM LIBRARY FACILITY A complete program may be included as an entry in the source statement library by using the catalog function. This program can then be retrieved by a BASIS card and compiled in a sUbsequent job. The following control statements would be used to catalog the program SAMPLE as a book in the COBOL sublibrary of the source statement library: // JOB CATALOG // EXEC MAINT CATALS C.SAMPLE BKEND C.SAMPLE from the source statement library. The name of the program is PAYROLL. During a particular year, the old age insurance tax (FICA) is deducted at the rate of 4-2/5% each week for all personnel until earnings exceed $7800. The coding to accomplish this is shown in Figure 8. Now, however, due to a change age tax laws, tax is to be taken earnings exceed $10800 and a new is to be placed. The programmer these changes as shown in Figure in the old out until percentage can code 9. The altered program will contain the coding shown in Figure 10. {source program} Reformatted Source Deck BKEND /* /& When compiling a program that has been cataloged in the COBOL sublibrary of the source statement library, a BASIS card brings in an entire source program. The following control statements could be used to compile the cataloged program SAMPLE: // JOB PGM1 // OPTION LOG,DECK,LIST,LISTX,ERRS // EXEC FCOBOL CBL LIB BASIS SAMPLE By specifying the DECK option on the LST card, a new COBOL source deck can be produced that reflects the reformatted source listing. This deck may be saved in a BASIS library, used directly as input to the compiler, or punched onto cards. Because of reformatting, the new deck may contain more cards than the original, but the difference is not great enough to cause any appreciable increase in compilation time. The. output deck differs from the listing as follows: 1. References, footnotes, and blank lines are omitted. 2. Literals will be repositioned, if needed, to assure proper continuation. 3. Statement numbers are converted to card numbers. /* /& INSERT or DELETE cards may follow the BASIS card if the user wishes to modify the book SAMPLE before it is processed by the compiler. The original source program must have been coded with sequence numbers in columns 1 through 6 of each source card. The INSERT statement will add new source statements after the specified sequence numbers. The DELETE statement will delete the statements indicated by the sequence numbers, or will delete more than one statement when the first and last sequence numbers to be deleted are specified, separated by a hyphen. Source program cards may follow a DELETE card for insertion before the card following the last one deleted. The sequence numbers in columns 1 through 6 are used to update COBOL source statements at compilation time, and are in effect for the one run only. Assume that a company runs its payroll program each week as a source program taken a. The statement number is multiplied by 10, and leading zeros are added as necessary to fill columns 1 through 6. b. Comment and continuation cards are numbered one higher than the preceding card. c. Statement-beginning cards are given the higher of the two numbers produced by the first two rules,. The use of this feature avoids having to resequence cards for permanent updating after they have been tested by temporary updating using the BASIS feature; it also avoids the errors incurred during that resequencing process. Librarian Functions 57 r---------------------------------------------------------------------------------------, IF ANNUAL-PAY GREATER THAN 7800 GO TO PAY-WRITE. 1 1000730 1000735 1000740 1000745 1000750 1000755 I FICA-PAYR. PAY-WRITE. IF ANNUAL-PAY GREATER THAN 7800 - BASE-PAY GO TO LAST-FICA. COMPUTE FICA-PAY = BASE-PAY * .044 MOVE TAX-PAY TO OUTPUT-TAX. MOVE BASE-PAY TO OUTPUT-EASE. ADD BASE-PAY TO ANNUAL-PAY. 1 I I I I 1 1 1 1 1 1000850 STOP RUN. L_______________________________________________________________________________________ JI Figure 8. Sample Coding to Calculate FICA r-------------------------------------~-------------------------------------------------, 1// JOB PGM2 1// OPTION LOGrDECK,LIST,LISTX,ERRS 1// EXEC FCOBOL I CBL QUOTE, LIB IBASIS PAYROLL IDELETE 000730-000740 1000730 IF ANNUAL-PAY GREATER THAN 10800 GO TO PAY-WRITE. 1000735 IF ANNUAL-PAY GREATER THAN 10800 - BASE-PAY GO Tu LAST-T'AX. 1000740 TAX-PAYR. COMPUTE TAX-PAY = BASE-PAY * .0585 I I I I I 1 I I 1 L _______________________________________________________________________________________ J1 1/* Figure 9. Altering a Program from the Source Statement Library Using INSER'I' and DELETE Cards r---------------------------------------------------------------------------------------, IF ANNUAL-PAY GREATER THAN 10800 GO TO PAY-WRITE. 1 1000730 1000735 1000740 TAX-PAYR. 1000750 1000760 PAY-WRITE. 1000770 IF ANNUAL-PAY GREATER THAN 10800 - BASE-PAY GO TO LAST-TAX. COMPUTE TAX-PAY = BASE-PAY* .0585. MOVE TAX-PAY TO OUTPUT-TAX. MOVE BASE-PAY TO OUTPUT-BASE. ADD BASE-PAY TO ANNUAL-PAY. 1 1 I 1 I I I I 1 1 I 1000850 STOP RUN. L _______________________________________________________________________________________ JI Figure 10. 58 Effect of INSERT and DELETE Cards INTERPRETING OUTPUT The DOS/VS COBOL compiler, COBOL object module, Linkage Editor, and other system components can produce output in the form of printed listings, punched card decks, diagnostic or informative messages, and data files directed to tape or to mass storage devices. This chapter gives the format of and describes this output. The same COBOL program is used for each example. "Appendix A: Sample Program Output" shows the output formats in the context of a complete listing generated by the sample program. COMPILER OUTPUT The output of the compilation job step may include: • A printed listing of the job control statements • A printed listing of the statements contained in the source program • A glossary of compiler-generated information about data • Global tables, register assignments, and literal pools =A printed listing of the object code • A condensed listing containing only the relative address of the first generated instruction for each verb • Compiler statistics The level of diagnostic message printed depends upon the FLAGW or FLAGE option of the CBL card. All output to be listed is written on the device assigned to SYSLST. If SYSLST is assigned to a magnetic tape, COBOL will treat the file as an unlabelled tape. Line spacing of the source listing is controlled by the SPACEn option of the CBL card and by SKIP 1/2/3 and EJECT in the COBOL source program. (The lister feature ignores these commands.) The number of lines per page can be specified in the SET corrmand. In addition, a listing of input/output assignments can be printed on SYSLST by using the LISTIO control staterr.ent,. On each page of the output, there is a header which contains the PROGRAM-ID, date and time of compilation~ as well as an indication of the modification level of the compiler which produced this listing. Figure 11 contains the compiler output listing shown in "Appendix A: Sample Program Output." Each type of output is numbered, and each format within each type is lettered. The text below and that following the figure is an ex~lanation of the figure. The listinq of the job control statements associated with this job step. These statements are listed because the LOG option was specified at system generation time. • Compiler diagnostic messages • Cross-reference listings Compiler options. The CEL card, if specified, is printed on SYSLST unless the LIST option is suppressed. • System messages • An object module • FIPS diagnostic messages The presence or absence of the above-mentioned types of compiler output is determined by options specified at system generation time. These options can be overridden or additional options specified at compilation time by using the OPTION control statement and the CBL card. The source module listing. The statements in the source program are listed exactly as submitted except that a compiler-generated card number is listed to the left of each line. This is the number referenced in diagnostic messages and in the object code listing. It is also the number printed on SYSLST as a result of the source language TRACE statement (if NOVERB is in effect). The source module is not listed when the NOLIST option is specified. Interpreting Output 59 / / JOE SAMPLE '// OFTIOil NODECK,L,INK,LIS'I,LI13'IX,SYM,ERRS ,II (':"1) // EXEC FCOBOL IBM DOS VS COBOL REL l.Q PP NO. 5746-CB1 (!) CEL QUOTE,OP'I,SXREF,LVL=A 00001 000010 IDENTIFICATION DIVISION. 00002 00002,0 PROGRAM-ID. TES'IRUN. AUTHOR. PROGRAMMER NAME., C0003 CC004 INSTALLATION. NEW YORK DEVEIOFMENT CEN'IER 00005 DATE-wRI'ITEN. FEBRUARY IS, 1974 00006 DATE-COMPILED. 03/u3/74'00007 REMARKS. THIS PROGRAM HAS BEEN WRITTEN AS A SAMPLE PROGRAM FOR C0008 COBOL USERS. IT CREAT~S AN OUTPUT FILE AND READS IT BACK C0009 AS INPUT. 00010 000100 00011 000110 ENVIRONMENT DIVISION. 00012 000120 CONFIGURATION SECTION. 00013 000130 SOURCE-COMPUTER. IBM-370. 00014 000140 OBJECT-COMPUTER. IBM-310: 00015 000150 INPUT-OUTPUT SECTION. 00016 000160 FILE-CONTROL. 000110 00011 SELECT FILE-l ASSIGN TO SYSOOS-UT-2400-S. 00018 000180 SELECT FILE-2 ASSIGN TO SYS008-UT-2400-S. n0019 000190 00056 C0051 00058 00059 C0060 000550 PROCEDURE DIVISION. BEGIN. 000570 NOTE THAT THE FOLLOWING OPENS THE OUTPUT FILE TO BE CREATED 000580 AND INITIALIZES COUNTERS, 000590 STEP-1. OPEN OUTPUT FILE-l. MOVE ZERO TO KOUNT, .mMBR. C0013 C0014 00015 C0016 00017 00078 00019 00080 000720 000130 000140 000750 000160 000170 000180 000190 Figure II. 60 STEP-5. CLOSE FILE-l. OPEN IN. NOTE THAT THE FOLLOWING REAU~ ~ACK THE FILE AND SINGLES OUT EMPLOYEES WITH NO DEPENDENTS. STEP-6. READ FILE-2 RECORD IN'IO wORK-RECORD AT END GO TO STEP-So STEP-1. IF NO-OF-DEPENDENTS IS EQUAL TO ·0· MOVE ·Z· TO NO-OF-DEPENDENTS. EXHIBI'I NA~ED WORK-RECORD. GO TO STEP-6. STEP-So CLOSE FILE-2. STOP RUN. A\ 1 f"l"+-"",,,+- (Part 1 of ...., Examples of f"nmn; --....1:'------1:'-CT 07.43.04 03/0}/74 .REt 1.0 IBM DOS VS COBOL INTRN~NAME ~ DNM=1-1118 DNM=1-179 DNM=1-200 DNM=1-217 DNM=1-2118 DNM=1-269 DNM=1-289 DNM=1-308 DNM=1-323 DNl'.=1-341 DNM=1-359 DNM=1-3711 DNM=1-3911 DNM=1-410 DNM=1-11311 DNM=1-454 DNM=1-473 DNM=l-1192 DNM=2-000 DNM=2-01B DNM=2-037 DNM=2-063 SOURCE ® HAC[{ BASE FD 01 02 FD 01 02 01 02 02 02 02 02 02 01 02 02 02 02 02 FILE-l RECORD-l FIELD-A FILE-2 RECORD-2 FIELIl-A FILLER KOUNT ALPHABET ALPHA NUMBR DEPENDENTS DEPEND WORK-RECORD NAME-FIELD FILLER RECORD-NO FILLER LOCATION 02 FI!.!.ER 02 02 NO-OF-DEPENDENTS FILLER DTF=Ol BL=l BL=l DTF=02 8L=2 BL=2 IlL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 07.43.04 PP NO. 5746-CBl CD DISPL 000 000 000 000 000 000 002 002 01C OlE OU 038 038 039 03A 03E 03F 0112 043 0115 CD INTRNL NAME DNM=I-1118 DNM=1-179 DNM=1-200 DNM=1-217 DNM=1-248 DNM=1-269 DNM=1-289 DNf'=1-308 DNM=1-323 DNM=1-3111 DNM=1-359 DNM=1-3711 DNM=1-394 DNM=I-410 DNM=1-434 DNM=1-4511 DNM=1-473 DNM=1-1192 DNM=2-000 DNM=2-018 DNM=2-037 DNM=2-063 ® DEFINITION DS OCL2C DS 20C DS DS DS DS DS DS OS DS DS DS DS DS DS DS DS DS DS DS OCL20 20C OCL56 IE 26C lC lE 2bC lC OCL20 lC lC 4C lC 3C lC 2C 7C 10/03/73 @ uSAGE DTFMT GROUP DISP DTF!>.T GROUP DISP GROUP COMP DISP DISP COOP DISP DISP GROUP DISP DISP DISP-ill'. DISP DISP DISP IHSP DIEF R 0 o !;; M F R 0 1< 0 o I / MEMORY MAP o TGT SAVE; Al DIAGNOSTIC MESSAGES r."'ILINE~MBER A B ~COOO 00025 00034 C0054 C0060 C0062 C0062 C0064 00064 00068 C0068 C0068 C0070 C0076 C0078 (C) ~ESSAGE I'-' I 8003I-W ILA8002I-W ILA8002I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8002I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8002I-W (!) PAGE, 1 .- DATE-COMPILED PARAGRAPH IS AN EXTENSION TO i'IPS LEVEL A. RECORDING MODE IS CLAUSE IS AN EXTENSION TO ALL FIPS LEVELS. RECORDING MODE IS CLAUSE IS AN EXTENSION TO ALL FIPS LEVELS. SPACES IS AN EX'IENSION TO FIPS LiVEL A. COMMA OR SEMICOLON AS PUNCTUATION IS AN EXTENSION TO FIPS LEVEL A. COMMA OR SEMICOLON AS PUNC'IUATION IS AN EXTBNSION TO FIPS LEVEL A. COMMA OR SEMICOLON AS PU~CTUATION IS AN EXTENSION TO FIPS LEVEL A. COMMA OR SEMICOLON AS PUNC'IUATION IS AN EXTENSION TO FIPS LiVEL A. MULTIPLE RESULTS IN ADD STATEMENT IS AN EXTENSION TO FIPS k'"'VEL A. UPON OP'IION OF DISPLAY STA'IEMENT IS AN EX'IENSION TO FIPS LEVEL A. UPON CONSOLE OPTION OF DISPLAY S'IATEMEN'I' IS AN EXTENSION TO ALL LEVELS. FROM OP'IION OF WRITE S'IATE~ENT IS AN EXTENSION TO FIPS LEVEL A. UNTIL OPTION OF PERFORM S'IA'IEMEN'I IS AN EX'IENSION TO FIPS LEVEL A. INTO OP'IION OF READ STATEMENT IS AN EXTENSION TO PIPS LEVEL A. EXHIBI'I STATEMENT IS AN EX'IENSION 'IO ALL FIPS LEVELS. ® END OF COMPILATION Figure 11 .. Examples of Compiler Output (Part 4 of 4) Interpreting Output 63 The following notations roay appear on the listing: TER.COD Used by coding for TERMINATE clause. C Denotes that the statement was inserted with a COpy statement. FRS.GEN Used by coding for GENERATE clause. ** Denotes that the card is out of sequence. NOSEQ should be specified on the CBL card if the sequence check is to be suppressed. -nnnn Generated report record associated with the file on which the report is to be printed,. I Denotes that the card was inserted with an INSERT or BASIS card. RPT.RCD Build area for print record .. If DATE-COMPILED is specified in the Identification Division, any sentences in that paragraph are replaced in the listing by the date of compilation. It is printed in one of the following formats depending upon the format chosen at system generation time. CTL_CHR First or second position of RPT.RCD. Used for carriage control character. RPT.LIN Beginning of actual information which will be displayed. Second or third position of RPT,.RCD. CODECELL Used to hold code specified. E.nnnn Name generated from COLUMN clause in 02-level statement. S.nnnn Used for elementary level with SUM clause, but not with data-name. N.nnnn Used to save the total number of lines used by a report group when relative line numbering is specified. DATE-COMPILED. month/day/year DATE-COMPILED. day/month/year or Glossary. The glossary is listed when the SYM option is specified. The glossary contains information about names in the COBOL source program. ® and(!) The internal-name generated by the compiler. This name is used in the compiler object code listing to represent the name used in the source program. It is repeated in column F for readability. A normalized level number. This level number is determined by the compiler as follows: the first level number of any hierarchy is always 01, and increments for other levels are always by one. Only level numbers 03 through 49 are affected; level numbers 66, 77, and 88, and FD, SD, and RD indicators are not changed. @ The data-name that is used in the source module. Note: The following Report Writer internally-generated data-names can appear under the SOURCE NAME column: 64 CTL.LVL Used to coordinate control break activities. GRP.IND Used by coding for GROUP INDICATE clause. @ and(§} For data-names, these columns contain information about the address in the form of a base and displacement. For file-names., the column contains information about the associated DTF or FIB (for VSAM). An indication is also given here if the FD is invalid. @ This column defines storage for each data item. It is represented in assembler-like terminology. Table 4 refers to information in this column. Usage of the data-name. For FD entries, either VSAM is specified, or the DTF type is identified (e.g., DTFDA). For group items containing a JSAGE clause, the usage type is printede For group items that do not contain a USAGE clause~ GROUP is printed. For elementary items, the information in the USAGE clause is printed. Table 4. Glossary Definition and Usage r----------------------------T-----------------------T----------------------------------, I Type I I Definition I Usage ~----------------------------+-----------------------+----------------------------------~ Group Fixed-Length Alphabetic Alphanumeric Alphanumeric Edited Numeric Edited Index-Name Group Variable-Length Sterling Report External Decimal External Floating-Point Internal Floating-point I I I I I Binary Internal Decimal Sterling Non-Report Index-Name File (FD) Condition (88) Report Definition (RD) Sort Definition (SD) DS OCLN I DS NC I DS NC I DS NC I DS NC 1 DS lH I DS VLI=N I DS NC I DS NC I DS NC ! DS iF I DS lD I DS IH, IF, OR 2 F ! DS NP I DS NC I BLANK I BLANK I BLANK I BLANK I BLANK I I I I I I I I I I GROUP DISP DISP AN-EDIT NM- EDIT INDEX-NM GROUP RPT-ST DISP-NM DISP-FP COMP-l COMP-2 COMP COMP-3 DISP-ST INDEX-NAME DTF TYPE BLANK BLANK BLANK ~----------------------------~-----------------------~----------------------------------~ INote: Under the definition column, N = size in bytes, except in group variacle-Iength I Iwhere it is a variable cell number. L _______________________________________________________________________________________ JI @ A letter under column: R - Indicates that the data-name redefines another data-name. o - Indicates that an OCCURS clause has been specified for that data-name. Q - Indicates that the data-name is or contains the DEPENDING ON object of the OCCURS clause. encountered, or CSYNTAX is specified and an E-Ievel error is encountered. A global table contains easily addressable information needed by the object program for execution. For example, in the Procedure Division output coding (3), the address of the first instruction under STEP-l (OPEN OUTPUT FILE-i) is found in the PROCEDURE NAME CELLS portion of the Program Global Table (PGT). The Task Global Table (TGT). This table is used to record and save information needed during the execution of the object program. This information includes switches, addresses, and work areas. M - Indicates the record format. This field is not applicable to VSAM. The letters which may appear under column Mare: F - fixed-length records U - undefined records V - variable-length records s - spanned records The location and length of WORKINGSTORAGE are noted here when CLIST, SYM or LSTX is specified, except under the same conditions as noted below. Global tables and literal pool: Global tables and the literal pool are listed when the CLIST, SYM, or LISTX option is specified, unless SUPMAP is specified and an E-Ievel error is ® The Literal pool. This lists all literals used in the program, with duplications removed. These literals include those specified by the programmer (e. g •., MOVE "ABC" TO DATA-NAME) and those generated by the compiler (e.g., to align decimal points in arithmetic computations). The literals are divided into two groups: those that are referenced by instructions (marked "LITERAL POOL") and those that are parameters to the display object time subroutine (marked "DISPLAY LITERALS"). Interpreting Output 65 @ The Proqram Global Table (PGT). This table contains literals and the addresses of procedure-names, generated procedure-names, and procedure block locators referenced by Procedure Division instructions. Register assignment: This lists the permanent register assigned to each base locator in the object program. The remaining base locators are given temporary register assignments but are not listed. Register assignments are listed when CLIST, SYM, or LISTX is specified, and output is not overridden by the same conditions as above. Procedure block assignments: Procedure block assignments are printed when OPT is specified. The procedure block assignments give the location within the object program for each block of code addressed by register 11. Object code listing. The object code listing is p~oduced when the LISTX option is specified, unless SUPMAP is also specified and an E-Ievel error is encountered, or unless CSYNTAX is specified and an E-Ievel error is encountered. The actual object code listing contains: The compiler-generated card number. This number identifies the COBOL statement in the source deck which contains the verb that generates the object code found in column C. When VERB is speci~ied, the actual verb or paragraph-name is listed with the generated card number. ® The relative location, in hexadecimal notation, of the object code instruction in the module. @ The actual object code instruction in hexadecimal notation. The procedure-name number. A number is assigned only to procedure-names referred to in other Procedure Division statements. The object code instruction in the form that closely resembles assembler language. (Displacements are in hexadecimal notation.) 66 Cowpiler-generated information about the operands of the generated instruction. This includes names and relative locations of literals. Table 5 refers to information in this column. Table 5. Symbols Used in the Listing and Glossary to Define Compiler-Generated Information r----------T------------------------------, Symbol I Meaning I I t----------+------------------------------~ SOURCE DATA ~AME SAVE AREA CELL SWITCH CELL TALLY CELL WORKING CELL TEMPORARY STORAGE CELL VARIABLE LENGTH CELL SECONDARY BASE LOCATOR BASE LOCATOR BASE LOCATOR FOR LINKAGE I SECTION ION ON COUNTER IPFM PERFORM COUNTER IPSV PERFORM SAVE IVN VARIABLE PROCEDURE NAME ISBS SUBSCRIPT ADDRESS IXSW EXHIBIT SWITCH IXSA EXHIBIT SAVE AREA IPRM PARAMETER IPN SOURCE PROCEDURE NAME IPBL Procedure Block Locator IGN GENERATED PROCEDURE NAME IDTF DTF ADDRESS IFIB File Information Block I (for VSAM) IVNI VARIABLE NAME INITIALIZATION ILIT LITERAL ITS2 TEMPORARY STORAGE I (NON-ARITHMETIC) IRSV REPORT SAVE AREA ISDF Secondary DTF Pointer ITS3 TEMPORARY STO~AGE I (SYNCHRONIZATION) ITS4 TEMPORARY STORAGE I (SYNCHRONIZATION) lINX INDEX CELL !V(BCDNAME) ADDRESS CONSTANT lVIR VIRTUAL IOVF Overflow Cell L __________ i ______________________________ JI IDNM ISAV ISWT ITLY !WC ITS IVLC ISBL IBL IBLL Statistics: The compiler statistics lis~the options in effect for this run, the number of Data Division statements specified: ~nd the Procedure Division size. Each level number is counted as one statement in the Data Division. The Procedure Division size is approximately the number of verbs in the Procedure Division. An indicator is also given here if dictionary spill occurred during compilation. If spill occurred, the amount of storage assigned to the compiler may be increased for better performance. Statistics are not listed if SYNTAX (or CSYNTAX and an E-Ievel or higher error occurred) was in effect. Cross-reference dictionary: The cross-reference dictionary is produced when the XREF or SXREF option is specified. It is suppressed if CSYNTAX is in effect and an E-Ievel error is encountered. It consists of two parts: The cross-reference dictionary for data-names consists of data-names followed by the generated card number of the statement which defines each data-name, and the generated card number of statements on which the referenced statement begins. For MOVE CORRESPONDING, the data items actually moved are referenced. Report Writer data-names, wi~h the exception of data-names 1n the form "-nnn", are defined with the generated card number of their respective RD's. The cross-reference dictionary for procedure-names consists of the procedure~names followed by the generated card number of the statement where each procedure-name is used as a· section-name or paragraph-name, and the generated card number of statements where each procedure-name is referenced. A reference will appear to a procedure name if there is a reference to a logically equivalent procedure-name; a reference will also appear to a procedure name, if, in a segmented program, an implied branch to a segment entry is made. If XREF is specified, the names are presented in the order in which they appear in the source program. If SXREFis specified~ the names are presented alphabetically. The number of references appearing in the cross-reference dictionary for a given name is based upon the number of times the name is referenced in the code generated by the compiler. Since a SEARCH verb results in the examination of the individual elements in the named table, the XREF or SXREF for a SEARCH will reference the element name for the table rather than the table itself. LISTER could provide the source ~ross-reference material that might be desired. Diagnostic messages: The diagnostic messages associated with the compilation are always listed. The format of the diagnostic rressage is: Compiler-generated card number. This is the number of a line in the source program related to the error. Message identification. The message identification for the DOS/VS COBOL compiler always begins with the symbols ILA. The severity level. There are four severity levels as follows: (W) Warning This level indicates that an error was made in the source program. However, it is not serious enough to interfere with the execu~ion of the program. These warning messages are listed only if the FLAGW option is specified in the CBL card or chosen at system generation time. (C) Conditional This level indicates that an error was made but the compiler usually rrakes a corrective assumption. The statement containing the error is retained. Execution can be attempted. (E) Error This level indicates that a serious error was made. Usually the compiler makes no corrective assu~ption. The statement or option containing the error is dropped. Compilation is completed, but execution of the program should not be attempted. (D) Disaster This error indicates that a serious error was rrade. Compilation is not completed. Results are unpredictable. If this is a compiler error, the job will terminate via the Interpreting Output 67 CANCEL macro and produce a dump. @ The message text. The text identifies the condition that caused the error and indicates the action taken by the compiler. The message text is usually composed of two sentences. The first describes the error; the second describes what the compiler has done as a result of the error. ~ote: By specifying a PROGRAM-ID of ERRMSG any source program, the user can generate a complete listing of compiler diagnostics and problem determination aids. (See Figure 12.) In this case, a normal compilation never takes place. Only a list of all error messages and problem determination information is produced. The link option is reset if it was in effect. ~n Since Report Writer generates a number of internal data items and procedural statements, some error messages may reflect internal names. In cases where the error occurs mainly in these generated routines, the error messages may indicate the card number of the RD entry for the report under consideration. In addition, there are errors that may indicate the number of the card upon which the statement containing the error --ends rather than the card upon which the error occurs. Internal name formats for Report writer are discussed under "Glossary" (heading 4, item C). statement numbers are generated when a verb or procedure name is encountered. Some messages are not given if CSYNTAX or SYNTAX is in effect. See "Program Checkout" for the list of these messages. FIPS Diagnostic Messaqes: The diagnostic messages associated with FIPS are listed separately from the compiler diagnostic messages, with a header identifying them as FIPS diagnostics. The format of the FIPS diagnostic messages is: Compiler-generated line number. This is the nUIrber ofO a line in the source program containing a nonstandard element. The COBOL-compile-time message that follows serves a~an example of the format of COBOL compiler messages: CARD ERROR MESSAGE 00105 ILA1002I-W ***** SECTION HEADER MISSING. ASSUMED PRESENT. • The code "00105" at the left is the card number of the statement in which the error has occurred. 1 I I lCalling I I Iprogram I 1 lof C I Figure 15. C B Whenever a program calls another program, linkage must be·< established between the two. The calling program must state the entry point of the called program and must specify any arguments to be passed. The called program must have an entry point and must be able to accept the arguments. Further, the called program must establish the linkage for the return of control to the calling program. ICalled I program I lof B 1-->1 I I I I I I A calling COBOL program must contain the following statement at the point where another program is to be called: i ICALL literal-1 [USING identifier-l I [identifier-2] ••• ] Calling and Called Programs By convention, a called program may call to an entry point in any other program, except one on a higher level in the "path" of that program. That is, A may call to an entry point in B or C, and B may call C; however. C should not call A or B. Instead, C transfers control only to B by issuing the EXIT PROGRAft or GOBACK statements in COBOL (or its equivalent in another language). B then returns to A. literal-1 is the name specified as the program-name in the PROGRAM-ID paragraph of the called program, or the name of the entry point in the called program. When the called program is to be entered at the beginning of the Procedure Division, literal-l is the name of the program being called. When the called program is to be entered at some point other than the beginning of the Procedure Calling and Called Programs 75 Division,' literal-1 should not be the same as the name specified in the PROGRAM-ID paragraph of the called program. Since the program-name in the PROGRAM-ID paragraph produces an external reference defining an entry point, this entry point name would not be uniquely defined as an external reference. r--------------------------------~I ~ I ENTRY literal-1 [USING identifier-1 I [identifier-2] ••• ] I L literal-1 is the name of the entry point in the called program. It is the same name that appears in the CALL statement of the program that calls this program. If the first character of PROGRAM-ID is numeric, the correspondence algorithm is as follows: o becomes J 1-9 become A-I literal-1 must not be the name of any other entry point or program-name in the run unit. Since the system does not include the hyphen as an allowable character, the hyphen is converted to zero if it appears as the second through eigbth character of the name. identifier-1 [identifier-2] ••• are the arguments being passed to the called program. Each identifier represents a data item defined in the File, Working-Storage, or Linkage Section of the calling program and should contain a level number 01 or 77. When passing identifiers from the File Section, the file should be open before the CALL statement is executed. If the called program is an assembler language program, the arguments may represent file-names and procedurenames in addition to data-names. If no arguments are to be passed, the USING option is omitted. identifier-1 [identifier-2] ••• ] are the data items representing parameters. They correspond to the arguments of the CALL statement of the calling program. Each data item in this parameter list must be defined in the Linkage Section of the called program and must contain a level number of 01 or 77. 2. Either of the following statements must be inserted where control is to be returned to the calling program: I EXIT PROGRAM. ~ IL---____________________________________ GOBACK. ~ Both the EXIT PROGRAM and GOBACK statements cause the restoration of the necessary registers, and return control to the point in the calling program immediately following the calling sequence. LINKAGE IN A CALLED PROGRAM A called COBOL program must contain two sets of statements: 1. One of the following statements must appear at the point where the program is entered. If the called program is entered at the first instruction in the Procedure Division and arguments are passed by the calling program: I IPROCEDURE DIVISION [USING identifier-1 [identifier-2] ••• ]. I -----J If the entry point of the called program is not the first statement of the Procedura Division: 76 ENTRY POINTS Each time an entry point is specified in a called program, an external-name is defined. An external-name is a name that can be referenced by another program that has been separately compiled or assembled. Each time an entry name is specified in a calling program, an external reference is defined. An external reference is a symbol that is defined as an external-name in another separately compiled or assembled program. The Linkage Editor resolves external-names and external references, and combines calling and called programs into a ~ format suitable for execution together, ~ i.e., as a single phase. Note: Several different entry points may be defined in one COBOL source module. Different CALL statements in any module of the phase may specify the same entry point, but each definition of an entry point must be unique in the same phase. SUBPRGD. Also assume that the module sizes for the main program and subprograms are: CORRESPONDENCE OF ARGUMENTS AND PARAMETERS The number of identifiers in the argument list of the calling program should be~he same as the number of identifiers in the parameter list of the called program. If the number of identifiers in the argument list of the calling program is greater than the number of identifiers in the parameter list of the calle~ program, only those specified in the parameter list of the called program may be referred to by the called program. There is a one-for-one correspondence. The correspondence is positional and not by name. An identifier must not appear more than once in the same USING clause .. Only the address of an argument is passed. Consequently, both the identifier that is an argument and the identifier that is the corresponding parameter refer to the same location in storage. The pair of identifiers need not be identical, but the data descriptions must be equivalent. For example, if an argument is a level-77 data-name representing a 30-character string, its corresponding parameter could also be a level-77 data-name representing a character string of length 30, or the parameter could be a level-Ol data item -with subordinate items representing character stri~gs whose combined length is 30. Although all parameters in the ENTRY statement must be described with level numbers 01 or 77, there is no such restriction made for arguments in the CALL statement. An argument may be a qualified name or a subscripted name. When a group item with a level number other than 01 is specified as an argument, proper boundary word alignment is required if subordinate items are described as COMPUTATIONAL, COMPUTATIONAL-l, or COMPUTATIONAL-2. If the argument corresponds to an 01-level parameter, doubleword alignment is required. Module Size (inj!ytesl. 20,000 4,000 5,000 6,000 3,000 !:roqram. COBMAIN SUBPRGA SUBPRGB SUBPRGC SUBPRGD Through the linkage mechanism, all called programs plus COBMAIN must be link edited together to form one module of 38,000 bytes. Therefore, COBMAIN would require 38,000 bytes of storage in order to be executed. No overlay structure need be specified at link edit time if 38,000 bytes of virtual storage are available. The following is an example of the job control statements needed to link edit these calling and called programs without specifying an overlay structure. The source decks for COBMAIN and SUBPRGA are included in the job deck, whereas SUBPRGB, SUBPRGC, and SUBPRGD are in the relocatable library. / / JOB NOVERLAY // OPTION LINK,LIST,DUMP ACTION MAP PHASE EXAMP1,* INCLUDE {object module COBMAIN} /* INCLUDE SUBPRGB INCLUDE SUBPRGC INCLUDE SUBPRGD INCLUDE {object module SUBPRGAJ /* ENTRY / / EXEC LNKEDT // EXEC {data for program} /* /& LINK EDITING WITHOUT OVERLAY Assume that a COBOL main program (COBMAIN), at one or more points in its logic executes CALL statements to COBOL programs SUEPRGA, SUBPRGB, SUBPRGC, and Figure 16 is an example of the dnta floy logic of this call structure where all the programs fit into virtual storage. Calling and Called Programs 77 From these combinations, more complicated structures can be formed. In a COBOL program, the expansions of the CALL and GOBACK or EXIT PROGRAM statements provide the save and return coding that is necessary to establish linkage between the calling and called programs in accordance with the linkage conventions of the system. Assembler language programs must be prepared in accordance with the same linkage conventions. These conventions include: 1. Using the proper registers to establish linkage. 2. Reserving, in the calling program, a storage area for items contained in the argument list. This storage area can be referenced by the called program. 3. Reserving, in the calling program, a save area in which the contents of the registers can be saved. Execute LNKEDT Linkage Editor t - - - - - - - - - I - - - } Storage layout Figure 16. Example of Data Flow Logic in a Call structure Note: For the example given, it is assumed that SYSLNK is a standard assignment. The flow diagram illustrates how the various program segments are link edited into storage in a sequential arrangement. ASSEMBLER LANGUAGE SUBPROGRAMS A main program written in COBOL can call programs written in other languages that use the same linkage conventions. Whenever a COBOL program calls an assembler language program, certain conventions and techniques must be used. There are three basic ways to use assembler-written called programs with a main program written in COBOL: 1. 2. 3. 78 A COBOL main program or called program calling an assembler-writtem program. An assembler-written program calling a COBOL program. An assembler-written program calling another assembler-written program. REGISTER USE The Disk Operating System has assigned functions to certain registers used in linkages. Table 7 shows the conventions for using general registers as linkage registers. The calling program must load the address of the return point into register 14, and it must load the address of the entry point of the called program into register 15. Table 7. Conventional Use of Linkage Registers IReg.IReg. I INo. IName I I I I 1 IArgument Ilist I ,register I I ISave 113 larea I Iregister I I I I I I , , , I 114 I I I I Function I I I Address of the argument I list passed to the called I program. I I Address of the area reI served by the calling pro-I gram in which the contents I of certain registers are I stored by the called I program. I IReturn I Address of the location inl• I register I the calling program to I I which control is returned I after execution of t.he I i called program. 1 I , I 1 I 115 I 1 I I Entry f Address of the entry pointl Ipoint I in the called program. Iregisterl ~4 ---' SAVE AREA ARGUMENT LIST A calling assembler language program must reserve a save area of 18 words, beginning on a fullword boundary, to be used by the called program for saving registers; it must load the address of this area into register 13. Table 8 shows the layout of the save area and the contents of ~ch word. The argument list is a group of contiguous fullwords, beginning on a fullword boundary, each of which is an address of a data item to be passed to the called program. If the program is to pass arguments, an argument list must be prepared and its address loaded into register 1. The high-order bit of the last argument, by convention, is set to 1 to indicate the end of the list. A called COBOL program does not save floating-point registers. The programmer is responsible for saving and restoring the contents of these registers in the calling program. Table 8. Save Area Layout and Word Contents r--------------------------------------------, i AREA (word 1) AREA+4 (word 2) AREA+8 (word 3) AREA+12 (word 4) !This word is a part of the Istandard linkage convention lestablished under the DOS/VS ISystem. The word must be Ireserved for proper laddressing of the subsequent lentries. However, an lassembler subprogram may use Ithe word for any desired Ipurpose. If one programmer writes both the calling program and the called program, the data format of the arguments should not present a problem when passed as parameters. However, when the programs are written by different programmers, the data format specifications for the arguments must be clearly defined for the programmer. The linkage conventions used by an assembler program that calls another program are illustrated in Figure 16. linkage should include: ~---------------------------; IThe address of the previous I save area, that is, the save jarea of the subprogram that Icalled this one. I IThe address of the next save I area, that is, the save area lof the subprogram to which Ithis subprogram refers. Any assembler-written program must be coded with a detailed knowledge of the data formats of the arguments being passed. Most coding errors occur because of the data format discrepancies of the arguments. i I , I I I I 1. The The calling sequence. The save and return routines. 3. The out-of-line parameter list. (An in-line parameter list may be used.) 4. A save area on a fullword boundary. 1r--------------------------1 IThe contents of register 14, I Ithat is, the return address. I FILE-NAME AND PROCEDURE-NAME ARGUMENTS ~------------------------~, AREA+16 IThe contents (word 15) Ithat is, the I AREA+20 IThe contents (word 6) I I AREA+24 IThe contents (word 7) I I I I I AREA+68 IThe contents (word 18) I I of register 15, I entry address. I I of register o. I I I of register 1. I I I I I , of register 12. I I , A callinq COBOL program that calls an assembler-language program can pass file-names and procedure-names, in addition to data-names, as identifiers. In the actual identifier-list that the compiler generates, the procedure-name is passed as the address of the procedure. For a file, the address of the DTF is passed, and the user must ensure that the file is already open. A VSAM file-name may not be passed. Care must be taken when using these The user must be thoroughly familiar with the generated coding for each option and statement, as well as the structure of the object program. op~10ns. Calling and Called Programs 79 deck name START * * ENTRY FXTRN USING * SAVE ROUTINE STM name 1 * * * * * * * * * * * AREA INITIATES PROGRAM ASSEMBLAGE AT FIRST AVAILABLE LOCATION. ENTRY POINT TO THE PROGRAM. 0 name1 name2 name'1 ,15 14,r 1 , 12 (13) LR DROP USING LR r3,15 15 name1,r3 r2,13 LA 13,AREA ST 13,8 ST r 2,4 (13) BC DS 15,prob 1 18F DC DC Xf 80' AL3 (arg n > (r~) THE CONTENTS OF REGISTERS 14, 15, AND THROUGH r 1 ARE STORED IN THE SAVE AREA OF THE CALLING PROGRAM (PREVIOUS S AVE AREA). r 1 IS ANY NUMBER FROM 0 THROUGH 12. o WHERE r3 AND r2 HAVE BEEN SAVED LOADS REGISTER 13, WHICH POINTS TO THE SAVE AREA OF THE CALLING PROGRAM, INTO ANY GENERAL REGISTER, r2' EXCEPT 0 AND 13. LOADS THE ADDRESS OF THIS PROGRAM'S SAVE AREA INTO REGISTER 13. STORES THE ADDRESS OF THIS PROGRAM'S SAVE AREA INTO WORD 3 OF THE SAVE AREA OF THE CALLING PROGRAM. STORES THE ADDRESS OF THE PREVIOUS SAVE AREA (I.E., THE SAME AREA OF THE CALLING PROGRAM) INTO WORD 2 OF THIS PROGRAM'S SAVE AREA. RESERVES 18 WORDS FOR THE SAVE AREA THIS IS LAST STATEMENT OF SAVE ROUTINE. {User-written program statements} L 15,VCON INDICATE COBOL PROGRAM IS BALR 14,15 A SUBPROGRAM CALLING SEQUENCE * LA 1,ARGLST L 15,ADCON BALR 14,15 {Remainder of user-written program statements} * RETURN ROUTINE L 13,4 (13) LOADS THE ADDRESS OF THE PREVIOUS SAVE AREA BACK INTO REGISTER 13. * THE CONTENTS OF REGISTER 2 THROUGH r1 ARE LM RESTORED FROM THE PREVIOUS SAVE AREA. * L 14,12(13) LOADS THE RETURN ADDRESS, WHICH IS IN WORD 4 OF THE CALLING PROGRAM'S SAVE AREA, * INTO REGISTER 14. * MVI 12 (13) ,X'FF' SETS FLAG FF IN THE SAVE AREA OF THE CALLING PROGRAM TO INDICATE THAT CONTROL * HAS RETURNED TO THE CALLING PROGRAM. * BCR 15,14 LAST STATEMENT IN RETU&N ROUTINE VCON DC V (ILBDSETO) ADCON DC CONTAINS THE ADDRESS OF SUBPROGRAM A (name 2) * PARAMETER LIST ARGLST DC AL4(arg 1 ) FIRST STATEMENT IN PARAMETER AREA SETUP DC AL4 (arg 2) * prob 1 L _ _ _ __ Pigure 80 17~ FIRST BYTE OF LAST ARGUMENT SETS BIT 0 TO 1 LAST STATEMENT IN PARAMETER AREA SETUP Sample Linkage Routines Used with a Calling Subprogram OVERLAYS ADCON • DC A (prob 1 ) LA L CNOP BALR DC DC 14,RETURN 15,ADCON 2,4 1,15 AL4 (arg 1) AL4 (arg 2 ) DC TI.'" X'80 1 AL3 (argni EQU * .IJ\.. RETURN Figure 18. If a program is too large to be contained in the number of bytes available in virtual s_tp.page, it can still be executed by means of an overlay structure. An overlay structure permits the re-use of storage locations previously occupied by another program. In order to use an overlay structure, the programmer must plan his program so that one or more called programs need not be in storage at the same time as the rest of the program phase. The programmer should reassess, when going to VS, whether progra~s which used to require an overlay structure still do. Sample In-line Parameter List The following is a diagram of the basic form of a program to be overlaid: In-Line Parameter List The assembler programmer may establish an in-line parameter list instead of an out-of-line list. In this case, he may sUbstitute the calling sequence and parameter list illustrated in Figure 18 for that shown in Figure 17. LOWEST LEVEL PROGRAM If an assembler called program does not call any other program (i.e., if it is at the lowest level), the programmer should omit the save routine, calling sequence, and parameter list shown in Figure 17. If the assembler called program uses any registers, it must save them. Figure 19 illustrates the appropriate linkage conventions used by an assembler program at the lowest level. deckname name o START ENTRY name USING STl! *,15 14,r 1 ,12(13) I I IROOT PHASE I I I r·-----L.-----, I I I I I I I I I I ISUBA ISUBE The root phase consists of the COBOL main program and an assembler language subroutine which handles the overlay structures. SUBA and SUBB are the called programs that are to be overlaid in storage. In using the overlay technique, the programmer specifies to the Linkage Editor which programs are to overlay each other. These programs are processed by the Linkage Editor so they can be placed automatically in storage for execution when called by the main program. The resulting output of the Linkage Editor is called an overlay structure. User-written program statements Lft MVI BCR 2, r 1 , 28 ( 13) 12 (13) , X • FF ' 15, 14 I INote: lin the Ishr-:a Icalled SPECIAL CONSIDERATIONS WHEN USING OVERLAY STRUCTURES , If registers 13 and/or 14 are used; called subprogram, their contents I be saved and restored by the subprogram. Figure 19. Sample Linkage Routines Used with a Lowest Level Subprogram There are three areas of special concern to the programmer who decides to use the overlay feature. These problems concern the use of the assembler language subroutine, proper link editing, and job control statements. Calling and Called Programs 81 ASSEMBLER LANGUAGE SUBROUTINE FOR ACCOMPLISHING OVERLAY The CALL statement is used for "direct" linkage; that is, the assistance of the Supervisor is not required (as it is when loading or fetching a phase). There are no COBOL statements that will generate the equivalent of the LOAD or FETCH assembler macro instructions. For this reason, one must call an assembler program to effect an overlay of a COBOL program. This routine must be link edited as part of either a root phase or permanently resident phase. The sample overlay subroutine shown in Figure 20 is governed by the following restrictions: 1. 2. It can be used for assembler overlays if the programmer has a desired'entry point in his END card and the first statement at that entry point is 'STM 14,12,12(13) '. 3. This subroutine can be used for a COBOL program which contains an ENTRY statement immediately following the Procedure Division header. It will not work with a COBOL subprogram compiled with a Procedure Division USING statement or for entry points in a COBOL subprogram which appear anywhere other than as the first instruction of the Procedure Division. A suggested technique for diverse entry points is a table look-up using v-type constants. The example is a suggested technique, and is not the only technique. r-------------------------------------·-------------------STMNT SOURCE STATEMENT 0601 OVERLAY START 0 0002' ENTRY OVRLAY 0003 AT ENTRY TIME * 0004 Rl=POINTER TO ADCON LIST OF USING ARGUMENTS * 0005 FIRST ARGUMENT IS PHASE OR SUBROUTINE NAME * 0006 MUST BE 8 BYTES * 0007 R13=ADDRESS OF SAVE AREA * 0008 R14=RETURN POINT OF CALLING PROGRAM * 0009 R15=ENTRY POINT OF OVFRLAY PROGRAM 0010 * AT EXIT 0011 * Rl=POINTER TO SECOND ARGUMENT OF ADCON LIST * 0012 OF USING ARGUMENTS * 0013 R14=RETURN POINT OF CALLING PROGRAM--NOT THIS PROG * 0014 R15=ENTRY POINT OF PHASE OR SUBPROGRAM * 0015 0016 * USING *,15 0017 OVRLAY STM O,l,SAVE SAVE WORK REGS 0018 L POINT Rl TO PHASE NAME 1,0(1) 0019 CLC CORSUB,O (1) IN CORE? 0020 BE SUBIN YES,BR 0021 MVC CORSUB (8) ,0 (1) SET CURRENT PHASE 0022 SR 0,0 0023 SVC 4 LOAD PHASE 0024 SEARCHl LA 1,4(1) STEP SEARCH POINT 0025 CLC 0(3,1) ,=C'COB' END OF INIT1? 0026 BNE SEARCHl NO, LOOP 0027 S 1 , =F' 8' POINT TO "START" ADCON 0028 L 1,0(1) LOAD "START" 0029 LA 1,8(1) INCREMENT TO "ENTRY" 0030 ST 1,ASUo SAVE ENTRY ADDRESS 0031 SUBIN LM 0, 1, SAVE RELOAD WORK REGS 0032 LA 1,4(1) POINT TO PARAMETERS 0033 15,ASUB L 0034 BR 15 BRANCH TO ENTRY POINT ,.., ...... 0035 CORSUB 0 \..LO 0036 DC 8X'FF' 0037 ASUB DS F DS 0038 SAVE 2F END 0039 L _ _ _ _ _ __ Figure 20. 82 Example of an Assembler Language Subroutine for Accomplishing Overlay Note: Care should be taken with the techniques used in statements 0019 and 0020. Only when the COBOL program is loaded are altered GO TO statements reinitialized. A better technique would be to load the called programs each time they are required. The examples given in Figures 20, 21, and 22 require that all overlay modules be linked together. To permit linkage to and return from modules, compiled and link edited separately, the following changes to Figure 20 are necessary: Also, to achieve maximum overlay, the phase names for the called programs should be different from the names of the called programs specified in the PROGRA~-ID paragraphs. Figure 21 is a flow diagram of the overlay logic. The PHASE cards indicate the beginning address of each phase. The phases OVERLAYC and OVERLAID will have the same beginning address as OVERLAYB. The sequence of events is: 1. The main program calls the overlay routine. 2. The overlay routine fetches the particular COBOL subprogram and places it in the overlay area. 3. The overlay routine transfers control to the first instruction of the called program. 4. The called program returns to the COBOL calling program (not to the assembler language overlay routine). Replace lines 25 through 28 CLC BNE LR L MVC LR L NOP L MVI LR L COBCON,20(1) SEARCHI 0,1 1,0(1) NOP+3(1),139(1) 1,0 1,4(1) 1,0(1) O(l),X'FF' 1,0 1,12(1) END OF INIT? NO, LOOP SAVE ADDR ADCON INITI GET INITI ADDR GET DISP OF VIRT CELL RESTORE ADDR OF ADCON INITI GET ADDR OF PGT LOAD ADDR OF ILBDMNSO SET 'CALLED PROGR' FLAG RESTORE ADDR OF ADCON INITI LOAD 'START' ADDRESS If OVERLAYB were ~nown to be in storage, the CALL statement would be: Insert after line 38 COBCON DC CL3'COB' I CALL "OVERLAYB" USING PARAM-1, PARAM-2.1 LINK EDITING WITH OVERLAY In a linkage editor job step, the programmer specifies the overlay points in a program by using PHASE statements. In the Working-Storage Section, a level-01 or level-77 constant must be created for each phase to be called at execution time. These constants have a PICTURE of X(8) and a VALUE clause containing the same name as that appearing on the PHASE card for that segment in the link edit run. In addition, each argument to be passed to the called program must have an entry in the Linkage Section. Remember, also, that the ENTRY statement should not refer to the program-name. (Use of the program-name will result in incorrect execution.) When more than one subprogram in the overlay structure requires the same COBOL subroutine, the // EXEC LNKEDT statement must be preceded by INCLUDE cards for each of these subroutines. The names of these subroutines can be determined by requesting LISTX at compile time. When preparing the control cards for the Linkage Editor, the programmer should be certain to include the assembler language subroutine with the main (root) p~ase. But when using the assembler language overlay routine (OVRLAY), it becomes: CALL "OVRLAY" USING PROCESS-LABEL, PARM-1, PARM-2. where PROCESS-LABEL contains the external-name OVERLAYB of the called program. However, the ENTRY statement of the called program is the same for both cases, i.e., ENTRY "OVEPLAYB" USING PARAM-l, PARAM-2, whether it is called indirectly by the main program through the overlay program or called directly by the main program. Note: An ENTRY which is to be called by OVRLAY must precede the first executable statement in the called proqram. Calling and Called Programs 83 JOB CONTROL FOF ACCOMPLISHING OVERLAY COBOL Moin or Root Overlay Routine Overlay Area The job control statements required to accomplish the overlay illustrated in Figure 21 are shown in Figure 22. The PHASE statements specify to the Linkage Editor that the overlay structure to be established is one in which the called proarams OVERLAYF, OVERLAYC, and OVERLAYD overlay each other when called during execution. Note: The phase name specified in the PHASE card must be the same as the value contained in the first argument for CALL "OVRLAY", i.e., PROCESS-LABEL, COMPUTE-TAX, etc., contain OVERLAYE, OVERLAYC, respectively, which are the names given in the PHASE card. Figure 21. Flow Diagram of Overlay Logic It is the programmer's responsibility to write the entire overlay, i.e., the COBOL main (or callin~) proaram and an assembler language subroutine {for which a sample program is given in this chapte~ that fetches and overlays the called programs. A calling sequence to obtain an overlay structure between three COBOL subproarams is illustrated in Figure 23. I I JOB OVERLAYS I I OPTION LINK PEASE OVERLAY,ROOT I I ~XEC ~COBOL (COEOL Source for Main Proaram MAINLINE} 1* /1 EXEC ASSEMBLY [Source deck for Assembler Lanauaae Routine OVERLAY] /* PHASE OVERLAY5,* 1/ EX=:C FCOEOL {COBOL Source for Called Program OVERLAYB} 1* PEASE OVERLAYC,OVERLAYB 1/ EX f:C FCOBOL (COBOL Source for Called Program OVEFLAYC} 1* PSASE OVERLAYD,OVERLAYC / / EXEC FeOBOL {COBOL Source for Called Program OVERLAYD} 1* / / EXE= LNKEDT / / EXEC /* /~ L----_____________________________________________________________________________ __ Figure 22. 84 Job Control for Accomplishing Overlay COBOL Program Main (Root or Main Program) IDENTIFICATION DIVISION. PROGRAM-ID. MAINLINE. ENVIRONMENT DIVISION. WORKING-STORAGE SECTION. 77 PROCESS-LABEL PICTURE IS X(8) VALUE IS "OVERLAYB". 77 PARAM-1 PICTURE IS X. 77 PARAM-2 PICTURE IS XX. 77 COMPUTE-TAX PICTURE IS X(8) VALUE IS "OVERLAYC". 01 01 01 NAMET. 02 EMPLY-NUMB PICTURE IS 9(5). 02 SALARY PICTURE IS 9(4)V99. 02 RATE PICTURE IS 9(3)V99. 02 HOURS-REG PICTURE IS 9(3)V99. 02 HOURS-OT PICTURE IS 9(2)V99. COMPUTE-SALARY PICTURE IS X(8) VALUE IS "OVERLAYD". NAMES. 02 RATES PICTURE IS 9(6). 02 HOURS PICTURE IS 9(3)V99. 02 SALARYX PICTURE IS 9(2)V99. PROCEDURE DIVISION. CALL "OVRLAY" USING PROCESS-LABEL, PARAM-l, PARAM-2. CALL "OVRLAY" USING COMPUTE-TAX, NAMET. CALL "OVRLAY" USING COMPUTE-SALARY, NAMES. I • I • ------.--------~ Figure 23. Calling Sequence to Obtain Overlay Between Three COBOL Subprograms (Part 1 of 3) Calling and Called Programs 85 COBOL subpro~£am B IDENTIFICATION DIVISION. PROGRAM-ID. OVERLAY1. ENVIRONMENT DIVISION. DATA DIVISION. LINKAGE SECTION. 01 01 PARAM-l0 PICTURE X. PARAM-20 PICTURE XX. PROCEDURE DIVISION. PARA-NAME. ENTRY "OVERLAYB" USING PARAM-l0, PARAM-20. GOBACK. IDENTIFICATION DIVISION. PROGRAM-ID. OVERLAY2. ENVIRONMENT DIVISION. DATA DIVISION. LINKAGE SECTION. 01 I I I I I NAMEX. 02 EMPLY-NUMBX PICTURE IS 9{5}. 02 SALARYX PICTURE IS 9(4) V99. 02 RATEX PICTURE IS 9(3)V99. 02 HOURS-REGX PICTURE IS 9(3)V99. 02 HOURS-OTX PICTURE IS 9(2}V99. PROCEDURE DIVISION. PARA-NAME. ENTRY "OVERLAYC" USING NAMEX. • • • GOBACK. Figure 23. 86 Calling Sequence to Obtain overlay Between Three COBOL Subprograms (Part 2 of 3) COBOL Subprogram D IDENTIFICATION DIVISION. PROGRAM-ID. OVERLAY3. ENVIRONMENT DIVISION. DATA DIVISION. LINKAGE SECTION 01 NAMES. 02 RATES PICTURE IS 9(6). 02 HOURS PICTURE IS 9(3)V99. 02 SALARYX PICTURE IS 9(2)V99. PROCEDURE DIVISION. PARA-NAME. ENTRY "OVERLAYD" USING NAMES. GOBACK. Figure 23. Calling Sequence to Obtain Overlay Between Three COBOL Subprograms (Part 3 of 3) Callinq and Called Programs 87 USING THE SEGMENTATION FEATURE COBOL segmentation permits the user to subdivide logically and physically the Procedure Division of a COBOL object program. All source sections which contain the same segment-number in their section headers will be considered at object time to be one segment. Since segment-numbers can range from 00 through 99, it is possible to subdivide any object program into a maximum of 100 segments. in the root segment. Thus no fields in other than the root segment are modified. The program SAVECORE could be segmented as illustrated in Figure 24. IDENTIFICATION DIVISION. PROGRAM-IDa SAVECOREs Program segments may be of three types: fixed permanent, fixed overlayable, and independent as determined by the programmer's assignment of segment numbers. Segmentation of a program would be used when virtual storage is limited. In a real storage system, the following would apply: ENVIRONKENT DIVISION. OBJECT-COMPUTER. IBM-370. SEGMENT-LIMIT IS 15. DATA DIVISION. 1. 2. 3. Fixed segments are always in real storage during the execution of the entire program, that is, they cannot be overlayed except when the system itself is executing another program, in which case fixed segments may be "rolled out." Fixed overlayable segments may be overlayed during program execution, but any such overlaying is transparent to the user, that is, they are logically identical to fixed segments, but physically different from them. Independent segments may be overlayed, but such overlaying will result in the initialization of that segment. Therefore, independent segments are logically different from fixed permanent/fixed overlayable segments, and physically different from fixed segments. In a virtual storage system, all logically "fixed" segments, that is, fixed permanent and fixed overlayable, are treated the same. They are both "paged in and out" as required for execution. In the same manner, independent segments are paged in and out; when they are paged in, however, they are brought back in the initial state. In DOS/VS COBOL, segments that are overlayed are not actually "paged out". All the variable data items associated with the segment are contained in one segment, which is considered the root segment. When a segment is "paged in", all the fields which must be reinitialized are contained PROCEDURE DIVISION. SECTION-1 SECTION 8. SECTION-2 SECTION 8. SECTION-3 SECTION 16. SECTION-4 SECTION 8. I• ISECTION-5 I. I• ISECTION-6 I• I• ISECTION-7 I. I• Figure 24. SECTION 50. SECTION 16. SECTION 50. Segmenting the Program SAVECORE Assuming that 12K of virtual storage is available for the program SAVECORE, Figure 25 shows the manner in which storage would be utilized. It is apparent from the illustration that SECTION-3, SECTION-6, and SECTION-7 cannot be in storage at the same time, nor can SECTION-3, SECTION-5 and SECTION-7 be in storage simultaneously. Sections in the permanent segment (SECTION-1; SECTION-2: and SECTION-4) are those which must be available for reference at all times, or which are referenced' frequently. They are distinguished here by the fact that they have been assigned Using the Segmentation Feature 89 priority numbers less than the segment limit. Sections in the overlayable fixed segment are sections which are less frequently used. They are always made available in the state they were in when last used. They are distinguishable here by the fact that they have been assigned priority numbers greater than the segment limit but less than 49. Sections in the independent segment can overlay, and be overlaid by, either an overlayable fixed segment or another independent segment. Independent segments are those assigned priority numbers greater than 49 and less than 100, and they are always given control in their initial state. Segmented programs must not be called by another program (segmented or not segmented). If a segmented program calls a subprogram, the CALL statement may appear in any segment. However, the object module associated with the subprogram must be included in the root segment prior to the execution of the main program. This can be accomplished in either of two ways as follows: 1. Produce object decks for both programs and place the one for the subprogram in the root segment: PHASE,ROOT ESD card for the root segment {object deck for the main program} {object deck for the subprogram} OPERATION followed by aH EXEC LNKEDT and aV EXEC. Execution of the object program begins in the root segment. The first segment in the permanent segment is considered the root segment. If the program does not contain a permanent segment, the co.piler generates a dummy segment which viII initiate the execution of the first overlayable or independent segment. All global tables, literals, and data areas are part of the root segment. Called object time subroutines are also part of the root segment. When CALL statements appear in a segmented program, subprograms are loaded with the fixed portion of the main program as if they had a priority of zero. 90 2. Catalog the object module for the subprogram in the relocatable library prior to link editing the main program. Insert an INCLUDE card for the subprogram and an ENTRY card for the root phase into the linkage editor control cards for the root phase of the main program. The ENTRY card will cause the linkage editor to pass control to the main program at execution time. The Linkage Editor will search the relocatable library for the subprogram and include it with the root phase. data-buffers, global table, etc., ( 1K) I I I I I I I I I I SECTION-l (2K) :1III SECTION-2 (2K) SECTION-4 (2K) I SECTION-3 (3K) fixed portion (12K) permanent segment (segment limit < 1S) SECTION-S (2K) (, SK ~i (1 SECTION-6 (2K) ---- SECTION-7 (lK) ---- ~ -....".- SECTION-3 and SECTION-6 are overlayablefixed segments (14 < segment limit < SO) Figure 2S. a. If the program-name is 6, 7, or 8 characters in length, the segment-name consists of the first 6 characters of program-name plus the 2-character priority number. b. If the program-name is less than 6 characters in length, the priority number is appended after the program-name. c. Since the system expects the first character of PROGRAM-ID to be alphabetic, the first character, if numeric, is converted as follows: COllPILER OUTPUT The output produced by the compiler is an overlay structure consisting of mUltiple object modules preceded by linkage editor control statements. Segments whose priority is greater than the segment limit (or 49, if no SEGMENT-LIllIT clause is specified) consist of executable instructions only. The compiler generates each segment as a separate object module preceded by a PHASE card. The names appearing· on these PHASE cards (segment-namesj conform to the following naming conventions: 2. SECTION-5 and SECTION-7 are independent segments (49 < segment limit < 100) Storage Layout for SAVECORE OUTPUT FROM A SEGMENTED PROGRAM 1. --- The name of the root segment is the same as the program-name specified in the PROGRAM-ID clause. The name of each overlayable and independent segment is a combination of the program-name and the priority number of the segment. These names are formed according to the following rules: o -> J 1-9 -> A-I The hyphen is converted to zero if it appears as the second through eighth character. d. When DECK is specified, the punched object deck is sequenced according to segments. Columns 73-74 contain the first two characters of the program-id, columns 7S-76 contain the priority number of the segment, and columns 17-80 contain the sequence number Using the Segmentation Feature 91 e. of the card. The priority of the root segment is punched as 00. AUI0LINK card for the Segmentation subroutine. When the compiler option CATALR is in effect, the PHASE card for each segment is preceded by a CATALR card with the same name. This will enable direct cataloging of the compiler-produced object module into the relocatable library from which a load module may be link edited into the core-image library. PHASE cards generated by the compiler for segments of priority 10, 47-50, 60, 62, and 63. Control card generated for the Sort Feature. This card is eXplained in "Sort in a Segmented Program." ® Note: Single-digit priority numbers are preceded by a zero. warning: In order to avoid duplicate names, the programmer must be aware of the above naming conventions. If the last two characters of an 8-character PROGRAM-ID are numeric, these same two characters may not appear in the source program as a segment number. Figure 26 is an illustration of the compiler output for the skeleton program shown in Figure 24. PHASE SAVECORE,ROOT {object module for the root segment (sections with priority-numbers less than the segment limit) including any programs called by SAVECORE} Load address of phase BIGJOBOO. Item 6 is explained in "Sort in a Segmented Program." Note: If the CATALR option of the CBL card is specified, the compiler generates CATALR cards in front of PHASE cards. Cataloging a Segmented PHASE SAVEC050,SAVEC016 {object module for segments with a priority of 50 (two sections)} Progra~ When the CATAL option is used to catalog a segmented program, the following points should be observed: 1. To avoid duplicate names, the programmer must be aware of the naming conventions used by the compiler (see "Compiler Output") because a segment-name may be the same as a phase-name already existing in the core image library. 2. Since the PHASE card is generated by the compiler, the programmer must not specify a PHASE card for the program. PHASE SAVEC016,* {object module for segments with a priority of 16 (two sections)} Location of the entry point CURSEGM. Item 5 is explained in "Determining the Priority of the Last Segment Loaded into the Transient Area." To invoke a previously cataloged segmented program, the programmer must use the following control statement: // EXEC name Figure 26. Compiler Output for SAVECORE where ~mg is the program-name specified in the PROGRAM-ID clause. LINKAGE EDITOR OUTPUT Determinin5Lihe Priori.1L.Q.i the Last Segment Loaded into the Transient Area Figure 27 is an illustration of the input to the Linkage Editor and the phase map produced by the Linkage Editor resulting from the compilation and editing of the segmented program BIGJOB. The following text is an explanation of the figure. CI) 92 PHASE card generated by the compiler for the root segment BIGJOB. If a segmented program is abnormally terminated during execution, and the SYMDMP option has been specified, the CURRENT PRIORITY cell in the Task Global Table contains the priority of the last segment loaded into the transient area. If SYMDMP has not been specified, the priority of this segment can be determined as follows: 1. In the map of virtual storage ge~ed by the Linkage Editor, under the column LABEL, look for the name 'CURSEGM' (see item 5 in Figure 27) • 2. Associated with this label, in the column LOADED, is an address. 3. At this location is stored the priority (one byte) of the segment current in the transient area. If this byte is X'OO', no segment has been loaded into the transient area. This indicates that the error causing the dump occurred in the root segment. SORT IN A SEGMENTED PROGRAM If a segmented program contains a SORT statement, the sort program will be loaded above the largest overlayable or independent segment as shown in Figure 28. The compiler accomplishes this by providing the following control statement at the end of the overlay structure: PHASE BIGJOBOO,transient area + L This card is illustrated in Figure 27, item 4. The value of "L" in the figure is X·002F2' which is the length of the longest segment, BIGJOB47, rounded to the next halfword boundary. Note that Linkage Editor relocates the phase BIGJOBOO to the next doubleword boundary (see Figure 27, item 6). Using the PERFORM Statement in a Segmented Program When the PERFORM statement is used in a segmented program, the programmer should be aware of the following: • A PERFORM statement that appears in a section whose priority-number is less than the segment limit can have within its range only (a) sections with priority-numbers less than 50, and (b) sections wholly contained in a single segment whose priority-number is greater 'than 49. Note: As an extension to American National Standard COBOL, DOS/VS COBOL allows sections with any priority-number to fall within the range of a PERFORM statement. • A PERFORM statement that appears in a section whose priority-number is equal to or greater than the segment limit can have within its range only (a) sections with the same priority-number as the section containing the PERFORM statement, and (b) sections with priority-numbers that are less than the segment limit. Note: As an extension to American National Standard COBOL, DOS/VS COBOL allows sections with any priority-number to fall within the range of a PERFORM statement. • When a procedure-name in a permanent segment (priority-number less than segment limit) is referred to by a PERFORM statement in an independent segment (priority-number greater than 49), the independent segment is reinitialized upon exit from the PERFORM. When a PERFORM statement in the overlay able-fixed segment (priority-number greater than segment limit and less than 50) refers to a procedure-name in a permanent segment, the overlay able-fixed segment is not reinitialized upon exit from the PERFORM. Using the Segmentation Feature 93 ~ JOB BIGJ DISK LINKAGE EDITOR DIAGNOSTIC OF INPUT ACTION TAKEN MAP BIGJOB'ROOT~ LIST PHASE LIST LIST AUTOLINK AUTOLINK LIST LIST ILIST ILIST ILIST ILIST ILIST ,LIST ILIST ,, ROOT PHASE PHASE PHASE PHASE PHASE PHASE PHASE PHASE PHASE ILBDSEMO~ ILBDSRTO BIGJOB10,* BIGJOB41.BIGJOB10! BIGJOB48,BIGJOB41 BIGJOB49,BIGJOB48 ~ BIGJOB50,BIGJOB49 3 BIGJOB60,BIGJOB50 BIGJOB62,BIGJOB60 BIGJOB63,BIGJOB62 BIGJOBOO'BIGJOB63+X'002F2'~ PHASE XFR-AD LOCORE HICORE DSK-AD ESD TYPE LABEL LOADED REL-FR BIGJOB 003000 003000 0015A3 64 04 1 CSECT BIGJOB 003000 003000 CSECT * ENTRY CSECT ILBDSEMO CURSEGM ILBDSRTO 006268 006268 006B38 006B38 CSECT CSECT CSECT CSECT CSECT CSECT CSECT CSECT CSECT BIGJOB10 BIGJOB41 BIGJOB48 BIGJOB49 BIGJOB50 BIGJOB60 BIGJOB62 BIGJOB63 ILBDDUMO 0015A8 0015A8 0015A8 0015A8 0015A8 0015A8 0015A8 0015A8 0015A8 0015A8 0015A8 0015A8 0075A8 0015A8 0075A8 0015A8 0018AO ......0018AO BIGJOB10 BIGJOB41 BIGJOB48 BIGJOB49 BIGJOB50 BIGJOB60 BIGJOB62 BIGJOB63 BIGJOBOO Figure 21. 0015A8 0015A8 0075A8 0015A8 0015A8 0075A8 0015A8 0015A8 0018AO Link 0015A8 0015A8 0015A8 0015A8 0015A8 0015A8 0075A8 0075A8 0018AO 0015E9 001899 0015DB 0015D3 0015F1 0016ED 0015D1 001621 0018A1 64 65 65 65 65 65 65 65 65 09 00 00 01 01 02 02 03 03 2 1 2 1 2 1 2 1 2 , ,, I L {i TRANSIENT AREA Including COBOL subroutines and called programs I Overlayable and independent segments I I ISORT PROGRAM, I L = length Figure 28. 94 I of the largest segment in bytes. Location of Sort Program in a Segmentation structure I I I : l;. 00631D~.------~(!) Editing a Segmented Program ROOT ,, ® PART II PROCESSING COBOL FILES ON PROCESSING 3540 DISKETTE ~ASS STORAGE DEVICES----~~ FILES=-==-----------------~~ VSA!----------------------------------------------.~ DETAILED FILE PROCESSING PROCESSING ASCII TAPE RECORD CAPABILITIES--------------~. ~ FILES------------------------.~ FORftATS------------------------------------~. ~ 95 PROCESSING COBOL PILES ON MASS STORAGE DEVICES A mass storage device is one on which records can be stored in such a way that the location of anyone record can be determined without extensive searching. Records can be accessed directly rather than serially. sequential, direct, indexed, and VSAM. VSAM is discussed in the chapter entitled "Virtual Storage Access Method (VSAM)." The recording surface of a mass storage device is divided into many tracks. A ~ track is defined as a circumference of the recording surface. The number of tracks per recording surface and the capacity of a track for each device are shown in Table 9. In a sequential file, records are organized solely on the basis of their successive physical location in the file. The records are read or updated in the same order in which they appear. Table Recording Capacities of Mass storage Devices 9. i 1Device I 12311 1 1 12314, 12319 I 12321 1 1 Capacity 1 I 1200 tracks per surface; 3625 1 bytes per track. 1 1200 tracks per surface; 7294 1 bytes per track. I 1100 tracks per strip; 2000 I bytes per track. DIRECT ORGANIZATION A file with direct organization is characterized by some predictable relationship between the key of a record and the address of that record on a mass storage device. This relationship is established by the programmer. I 1404 tracks per surface; 13030 I bytes per track. I I 3330-11* 1808 tracks per surface; 13030 I bytes per track. I 3340 348 tracks per surface; 8368 Model 35 bytes per track. 3340 696 tracks per surface; 8368 Model 70 bytes per track. 13350 I I Individual records cannot be located quickly. Records usually cannot be deleted or added unless the entire file is rewritten. This organization is used when most of the records in the file are processed each time the file is used. 1 I I 13330 SEQUENTIAL ORGANIZATION 555 tracks per surface; 19069 bytes per track. *In the COBOL ASSIGN statement the 3330-11 is specified as 333B. Each device has some type of access mechanism through which data is transferred to and from the device. The mechanisms are different for each device, but each mechanism contains a number of read/write heads that transfer data as the recording surfaces rotate past them. Only one head can transfer data (either reading or writing) at a time. FILE ORGANIZATION Records in a file mus~ De logically organized so that they can be retrieved efficiently for processing. Four methods of organization for mass storage devices are supported by the DOS/VS COBOL compiler: Direct organization is generally used for files where the time required to locate individual records must be kept to an absolute minimum, or for files whose characteristics do not permit the use of sequential or indexed organization. This organization method has considerable flexibility. The accompanying disadvantage is that although the Disk Operating System/Virtual Storage provides the routines to read or write a file of this type, the programmer is largely responsible for the logic and programming required to locate the key of a record and its address on a mass storage device. Note: Direct organization is not supported on fixed block devices. INDEXED ORGANIZATION An indexed file is similar to a sequential file in that rapid sequential processing is possible. The indexes associated with an indexed file also allow quick retrieval of individual records through random access. Moreover, a separate area of the file is set aside for additions; this eliminates the need to rewrite the entire file when adding records, a process that would usuaily be necessary with a sequentially organized file. Although the added records are not Processing COBOL Piles on Mass Storage Devices 97 physically in key sequence, the indexes are constructed in such a way that the added records can be quickly retrieved in key sequence, thus making rapid sequential access possible. In this method of organization, the system has control over the location of the individual records. Since the characteristics of the file are known, most of the mechanics of locating a particular record are handled by the system. Note: Indexed organization is not supported on fixed block devices. DATA MANAGEMENT CONCEPTS The data management facilities of the Disk Operating System Virtual storage are provided by a group of routines that are collectively referred to as the Input/Output Control System (IOCS). A distinction is made between two types of routines: 1. 2. Physical IOCS (PIOCS) -- the physical input/output routines included in the Supervisor. PIOCS is used by all programs run within the system. It includes facilities for scheduling input/output operations, checking for and handling error conditions related to input/output devices, and handling input/output interruptions to maintain maximum input/output speeds without burdening the programmer's problem program. Logical rocs (LIOCS) -- the logical input/output routines linked with the programmer's problem program. These routines provide an interface between the programmer's file processing routines and the PIOCS routines. LIOCS performs those functions that a programmer needs to locate and access a logical record for processing. A logical record is one unit of information in a file of similar units, for example, one employee's record in a master payroll file, one part-number record in an inventory file, or one customer account record in an account file. One or more logical records may be included in one physical record. LIOCS refers to the routines that perform the following functions: 98 a. Blocking and deblocking records b. Switching between input/output areas when two areas are specified for a file c. Handling d. and conditions end-of~file end-of~olume Checking and writing labels A brief description of functions performed by LIOCS and their relationship to a COBOL program follows. Whenever COBOL imperative-statements (READ, WRITE, REWRITE, etc.) are used in a program to control the input/output of records in a file, that file must be defined by a DTF (~efine !he rile) or, for VSAM, an ACB (Access Method Control Block) • A DTF or ACB is created for each file opened in a COBOL program from information specified in the Environment Division, FD entry, and input/output statements in the source program. The DTF for each file is part of the object module that is generated by the compiler. The ACB is generated at object time. They describe the characteristics of the logical file, indicate the type of processing to be used for the file, and specify the storage areas and routines used for the file. Further and more detailed onformation in VSAM is to be found in the chapter "VSAM." One of the constants in the DTF table is the address of a logic module that is to be used at execution time to process that file. A logic module contains the coding necessary to perform data management functions required by the file such as blocking and deblocking, initiating label checking, etc. Generally, these logic modules are assembled separately and cataloged in the relocatable library under a standard name. At link edit time, the Linkage Editor searches the relocatable library using the virtual reference to locate the logic module. The logic module is then included as part of the program phase. vote that since the Autolink feature of the Linkage Editor is responsible for including the logic modules, the COBOL programmer need not specify any INCLUDE statements. The type of DTF table prepared by the compiler depends on the organization of the file and the device to which it is assigned. The DTF's used for processing files assigned to mass storage devices are as follows: Sequential organization, ~equential access DTFDA -- Direct organization, sequential or random access DTFIS -- Indexed organization, For a 3540 diskette unit, the DTF is DTFDU. Kore detail on this is given in the chapter "Processing 3540 Diskette unit Files." SELECT [OPTIONAL] file-name The remainder of this chapter provides information about preparing programs which process files assigned to mass storage devices. Included are general descriptions of the organization, the COBOL statements that must be specified in order to build the correct DTF tables, and coding examples. ASSIGN TO SYSnnn- {::} SEQUENTIAL ORGANIZATION (DTFSD) In a sequential file on a mass storage device, records are written one after another -- track by track, cylinder by cylinder -- at successively higher addresses. Records may be fixed-length, spanned, or variable-length, blocked or unblocked, or undefined. Since the file is always accessed sequentially, it is not formatted with keys. Processing a sequentially organized file for selected records is inefficient. If it is done infrequently, the time spent in locating the records is not significant. The slowest way is to read the records sequentially until the desired one is located. On the average, half of the file must be read to locate one record. Additions and deletions require a complete rewrite of a sequentially organized file on a mass storage device. Sequential organization is used on mass storage devices primarily for tables and intermediate storage rather than for master files. Sequentially organized files formatted with keys cannot be created using DTFSD. DTFDA may be used to create and access (sequentially or randomly)' such files. 2311 2314 2"321 2319 3-330 333B 3340 3350 FBAI Optional clauses: RESERVE Clause FILE-LIM!T Clause ACCESS MODE IS SEQUENTIAL PROCESSING MODE IS· SEQUENTIAL RERUN Clause SAME Clause APPLY WRITE-ONLY Clause ,(create only) APPLY WRITE-VERIFY Clause (create or update only) Invalid clauses: ACCESS MODE IS RANDOM ACTUAL KEY Clause NOMINAL KEY Clause RECORD KEY Clause TRACK-AREA Clause MULTIPLE FILE TAPE Clause APPLY EXTENDED-SEARCH Clause APPLY CYL-OVERFLOW Clause APPLY MASTER-INDEX} { CIL-INDEX Clause APPLY CORE-INDEX Clause DTFSD files may be opened as INPUT, OUTPUT, or 1-0. When creating such a file, an INVALID KEY condition·occurs when the file limit has been reached and an attempt is made to place another record on the mass storage device. The file limit is determined from the EXTENT control statements. When a DTFSD file is opened as OUTPUT, each WRITE. statement signifies the creation of a new record. When opened as 1-0, each WRITE statement signifies that the record just read is to be rewritten. DIRECT ORGANIZATION (DTFDA) PROCESSING A SEQUENTIALLY ORGANIZED FILE To create, retrieve, or update a DTFSD file, the following specifications should be made in the source program: ENVIRONMENT DIVISION Required clauses: With direct organization, there is a definite relationship beteween the key of a record and its address. This relationship permits rapid access to any record if the file is carefully organized. The programmer develops a record address that ranges from zero to some maximum by converting a particular field in each record to a track address. Each byte in the address is a binary number. To Processing COBOL Files on Mass Storage Devices 99 reference a particular record, the programmer must supply both the track address and the identifier that makes each record unique on its track. Both the track address and the identifier are supplied by the programmer in the ACTUAL KEY clause. This will be discussed in detail later in this chapter. With direct organization, records may be fixed length, spanned or undefined. The records must be unblocked. RO (record zero) of each track is used as a capacity record. It contains the address of the last record written on the track, and is used by the system to determine whether a new record will fit on the track. The capacity records are updated by the system as records are added to the file. The capacity records do not account for deletions: as far as the system is concerned, once a track is full it remains full (even if the programmer deletes records) until the file is reorganized. Often, more records are converted to a given track address than will actually fit on the track. These surplus records are known as overflow records and are usually written into a separate area known as an overflow area. As already noted, the programmer has an unlimited choice in deciding where records are to be located in a directly organized file. The logic and programming are his responsibility. When creating or making additions to the file, the programmer must specify the location for a record (track address) and the identifier that makes each recor~ on the track unique. If there is space on the track, the system writes the record and updates the capacity rGcord. If the specified track is full, a standard error condition occurs, and the programmer may specify another track address in his USE APTER STANDARD ERROR declarative routine. In the case of one maximum size record per track (when spanned records are not specified), the data length plus the length of the symbolic key cannot exceed the following values: 2311 -- 3605 bytes 2314, 2319 -- 7249 bytes 2321 1984 bytes 3330 12974 bytes 3340 8293 bytes 3350 18987 bytes When reading or updating the file, the programmer must supply the track address and the unique identifier on the track for the specific record being sought. The system locates the track and searches that track for the record with the specified 100 identifier. If the record is not found, COBOL indicates this to the programmer by raising an INVALID KEY condition. Only the track specified by the programmer is searched. If EXTENDED-SEARCH is applied, the search for a specified record key begins on the track specified and continues until one of two conditions occurs: 1. The record is found. 2. The end of the specified cylinder is reached. In the second case, the INVALID-KEY option of the READ or REWRITE is executed. To ensure file integrity, the upper limit of each extent of a file using EXTENDED-SEARCH must be the last track of a cylinder. Error recovery from a DTPDA file is described in detail in the chapter "Advanced Processing Capabilities." ACCESSING A DIRECTLY ORGANIZED PILE A directly organized file (DTPDA) may be accessed either sequentially or randomly. ACCESSING A DIRECTLY ORGANIZED PILE SEQUENTIALLY: When reading a direct file sequentially, records are retrFeved in logical sequence; this logical sequence corresponds exactly to the physical sequence of the records. To retrieve a DTPDA file sequentially, the following specifications are made in the source program: ENVIRONMENT DIVISION Required clauses: SELECT [OPTIONAL] file-name ASSIGN TO SYSnnn-DA- 2311 2321 2314 2319 3330 333B 3340 3350 Optional clauses: PILE-LIMIT Clause ACCESS MODE IS SEOUENTIAL PROCESSING MODE IS SEOUENTIAL ACTUAL KEY Clause RERUN Clause SAME Clause Invalid clauses: R~SERVE Clause ACCESS MODE IS RANDOM NOMINAL KEY Clause RECORD KEY Clause TRACK-AREA Clause MULTIPLE FILE TAPE Clause APPLY WRITE-ONLY Clause Processing COBOL Files on Mass Storage Devices 100.1 APPLY CORE-INDEX Clause APPLY CYL-OVERFLOW Clause APPLY EXTENDED- SEARCH Clause APPLY WRITE-VERIFY Clause APPLY MASTER-INDEX} { CYL-INDEX Note that in the ASSIGN clause, an A must be specified for files with actual track addressing, and a ~ must be specified for files with relative track addressing. Clause To retrieve or update a directly organized file randomly, the following specifications must be made in the source program. / APPLY CORE-INDEX Clause When DTFDA records are retrieved sequentially, the file may be opened only as INPUT. The AT END condition occurs when the last record has been read and execution of another READ is attempted. ENVIRONMENT DIVISION "Required clauses: SELECT file-name Note that in the ASSIGN clause, an A must be specified for files with actual track addressing, and a ~ must be specified for files with relative track addressing. ASSIGN TO SYSnnn-DA- ACCESSING A DIRECTLY ORGANIZED FILE RANDOMLY: To create a directly organized file randomly, the following specifications are made in the source program: ACCESS MODE IS RANDOM ACTUAL KEY Clause ENVIRON8ENT DIVISION Required clauses: SELECT file-name 2311 1J- ~~~~ {A} 2319 330 .3333B 3340 3350 ASSIGN TO SYSnnn-DA- ACCESS MODE IS RANDOM ACTUAL KEY Clause D 2311 2314 2321 2319 3330 333B 3340 3350 -m Note that in the ASSIGN clause an A must be specified for files with actual track addressing, a Q must be specified for files with relative track addressing, a [ must be specified for files wlth actual track addressing when the REWRITE statement is used, and ! must be specified for files with relative track addressing when the REWRITE statement is used. The optional and invalid clauses are the same as those specified previously for creating a directly organized file. Exception: APPLY EXTENDED-SEARCH is optional when retrieving or updating a directly organized file randomly. Optional clauses: FILE-LIMIT Clause PROCESSING MODE IS SEQUENTIAL RERUN Clause SAftE Clause APPLY WRITE-VERIFY Clause Invalid clauses: RESERVE Clause ACCESS KODE IS SEQUENTIAL NOMINAL KEY Clause RECORD KEY Clause TRACK-AREA Clause MULTIPLE FILE TAPE Clause APPLY WRITE-ONLY Clause APPLY EXTENDED-SEARCH Clause APPLY WRITE-VERIFY Clause APPLY CIL-OVERFLOW Clause APPLY{ MASTER-INDEX} CYL-INDEX Clause ACTUAL KEY CLAUSE Note that the ACTUAL KEY clause is required for DTFDA files when ACCESS IS RANDOM, is optional for DTFDA files when ACCESS IS SEQUENTIAL, and is not used for DTFSD files. The actual key consists of two components. One component expresses the track address at which the record is to be placed for an output operation, or at which the search is to begin for an input operation. The track address can be expressed either as an actual address or as a relative address, depending upon the addressing scheme chosen when the file was created. The other component is associated with the record itself and serves as its unique identifier. The structures of both actual keys are shown in Figure 29. Processing COBOL Files on Mass Storage Devices 101 I Actual Key I i through 258 bytes in length. It must be defined in the File Section, the WorkingStorage Section, or the Linkage section. The first four byte~ of data-name are the track identifier. The identifier is used to specify the relative track address for the record and must be defined as an 8-integer binary data item whose maximum value does not exceed 16,777,215. The remainder of data-name, which is 1 through 254 bytes in length, is the record identifier. It represents the symbolic portion of the key field used to identify a particular record on a track. I ' IActual Track IRecord Identifier, ,Address , , Byte 8 9 1 263 , Actual Key I f i , I Relative IRecord Identifier, ,Track Address I , IByte I t 1 4 5 Figure 29. For a complete discussion.of the ACTUAL KEY clause, see the publication IBM DOS Full American National Standard COBOL. i 258 structures of the Actual Key The format of the ACTUAL KEY clause is: Randomizing Technigues ACTUAL KEY IS data-name One method of determining the value of the track address portion of the field defined in the ACTUAL KEY clause is referred to as indirect addressing. Indirect addressing generally is used when the range of keys for a file includes a high percentage of unused values. For example, employee numbers may range from 000001 to 009999, but only 3000 of the possible 9999 numbers are currently assigned. Indirect addressing is also used for nonnumeric keys. Key, in this discussion, refers to that field of the record being written that will be converted to the track address portion. When actual track addressing is used, data-name may be any fixed item from 9 through 263 bytes in length. It must be defined in the Working-Storage, File, or Linkage Section. The first eight bytes are used to specify the actual track address. The structure of these bytes and permissible specifications for the mass storage devices are shown in Figure 30. The programmer may select from 1 to 255 bytes for the record identifier portion of the actual key field. Note: If a SEEK statement is used when retrieving a direct file randomly, actual track addressing is required. Indirect addressing signifies that the key is converted to a value for the actual track address by using some algorithm intended to limit the range of addresses. When relative track addressing is used, data-name may be any fixed item from 5 Cell Pack B I 2311 I I 2314 I I 2321 I I 3330 , I 3330-11 I , ,, I I I I 1 0-221 0 0-221 0 0-221 0 ,, ,, 0 I I 0-221 I I 0-221 0 I , ! ,, I 2 0 0 0-9 0 0 , , , Record Head C H 3 4 I 5 I 0 0-199 0 I 0-9 I 0 0-199 0 I 0-19 ,, ,,, I 0-19 I I 1 I , r I I , , 0-4 0-9 0-403 0 J 0 0 0-221 1 3340 Model 351 I 0 3340 Model 701 0-221 0 I f I I 3350 0-221 0 I 0 I I I I Figure 30. Permissible Specifications for 102 ~ C B 0 I Cylinder , ,,, ,, 6 0-19 0-18 0 I 0-18 0-347 0 I 0-11 I 0-695 0 0-554 r 0 I 0-29 I L. ,,, I 0-807 ,, R H 0-11 7 I I I 0-255 I I I 0-255 , I ! I I I 1 I I I 0-255 0-255 n_~~~ v-~~~ 0-255 0-255 0-255 the First Eight Bytes of the Actual Key ~ Such an algorithm is called a randomizing techniqug. Randomizing techniques need not produce a unique address for every record and, in fact, such techniques usually produce synonyms. Synonyms are records whose keys randomize to the same address. Two objectives must be considered in selecting a randomizing technique: 1. 2. Every possible key in the file must randomize to an address within the designated range. can be accomplished by moving the key to a field described as COMPUTATIONAL. 4. Divide the key by the prime number selected. 5. Ignore the quotient; utilize the remainder as the relative location within the data file. 6. (For actual track addressing only) Locate the beginning of the space available and manipulate the relative address, to the actual device address if necessary. The addresses should be distributed evenly across the range so that there are as few synonyms as possible. Note that one way to minimize synonyms is to allocate more space for the file than is actually required to contain all the records. For example, the percentage of locations that are actually used might be 80% to 85% of the allocated space. When actual track addressing is used, the first eight bytes of the ACTUAL KEY field can be thought of as a "discontinuous binary addres~." This is significant to the programmer because he must keep two considerations in mind. First, the cylinder and head number must be in binary notation, so the results of the randomizing formula must be in binary format. Second, the address is "discontinuous" since a mathematical overflow from one element (e.g., head number) does not increment the adjacent element (e.g., cylinder number). DIVISION/REMAINDER METHOD: One of the simplest ways to indirectly address a directly organized file is by using the division/remainder method. (For a discussion of other randomizing techniques, see the publication Introduction to IBM Direct Access Storage Devices and Organization Methods, Order No. GC20-16 49.) 1. Determine the amount of locations required to contain the data file. Include a packing factor for additional space to eliminate synonyms. The packing factor should be approximately 20% of the total space allocated to contain the data file. 2. Select, from the prime number table, the nearest prime number that is less than the total of step 1. A Erime number is a number divisible only by itself and the integer 1. Table 10 is a partial list of prime numbers. 3. Clear any zones from the first eight bytes of the actual key field. This For example, assume that a company is planning to create an inventory file on a 2311 disk storage device. There are 8000 different inventory parts, each identified by an 8-character part number. Using a 20% packing factor, 10,000 record positions are allocated to store the data file. Method A: The closest prime number to 10,000, but under 10,000, is 9973. Using one inventory part number as an example, in this case #25DF3514, and clearing the zones we have 25463514. Dividing by 9973 we get a quotient of 2553 and a remainder of 2445. 2445 is the relative location of the record within the data file corresponding to part number 25DF3514. The record address can be determined from the relative location as follows: 1. (For actual track addressing only) Determine the beginning point for the data file (e.g., cylinder 100, track 0) • 2. Determine the number of records that can be stored on a track (e.g., twelve per track on a 2314 disk pack, assuming each inventory record is 200 bytes long). Because each data record contains non-data components, such as a count area and interrecord gaps, track capacity for data storage will vary with record length. As the number of separate records on a track increases, interrecord gaps occupy additional byte positions so that data capacity is reduced. Track capacity formulas provide the means to determine total byte requirements for records of various sizes on a track. These formulas can be found in the publications IBM Component Descriptions, Order Nos. GA26-5988 and GA26-3599. 3. Divide the relative number (2445) by the number of records to be stored on each track. Processing COBOL Files on ~ass storage Devices 103 4. 4B. (For actual track addressing only) The result, quotient = 203, is now divided into cylinder and head designation. Since the 2311 disk pack has ten heads, the quotient of 203 is divided by 10 to show: 1. The number of records that may be contained on one track is twelve. Therefore, if 10,000 record locations are to be provided, 834 tracks must be reserved. Cylinder or CC = 20 Head or HH = 03 (high-order zero added) 2. The prime number nearest, but less than 834, is 829. (For relative track addressing only) The result, quotient = 203, now becomes the track identifier of the actual key. 3. Divide the zone-stripped key by the prime value. (In the example, 25463514 divided by 829 provides a quotient of 30715 and a remainder of 779. The remainder is the relative address.) Method B: utilizing the same example, another approach will also provide the relative track address: 104 i i I I ·1 I I I I I I I I Partial List of Prime Numbers (Part 2 of 2) Table 10. Partial List of·Prime Numbers (Part 1 of 2) Table 10. A (Number) 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1100 1800 1900 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000 3100 3200 3300 3400 3500 3600 3700 3800 3900 4000 4100 4200 4300 44'00 4500 4600 4700 4800 4900 5000 5100 5200 5300 5400 5500 B 1 (Nearest Prime Numberl Less Than A) I 499 599 691 797 887 991 1097 1193 1291 1399 1499 1591 1699 1789 1889 1999 2099 2179 2297 2399 2477 2593 2699 2797 2897 2999 3089 3191 3299 3391 3499 3593 3697 3797 3889 3989 4099 4177 4297 4397 4493 4597 4691 4799 4889 4999 5099 4197 5297 4399 5483 t A (Number) 5600 5700 5800 5900 6000 6100 6200 6300 6400 6500 6600 6700 6800 6900 7000 7100 7200 7300 7400 7500 7600 7700 1800 7900 8000 8100 8200 8300 8400 8500 8600 8700 8800 8900 9000 9100 9200 9300 9400 9500 9600 9100 9800 9900 10,000 10,100 10,200 10,300 10,400 10,500 10,600 B 1 (Nearest Prime Number 1 Less Than A) 1 I 5591 5693 5791 5897 5987 6091 6199 6299 6391 6491 6599 6691 6793 6899 6997 7079 7193 7297 7393 7499 7591 7699 7793 7883 7993 8093 8191 8297 8389 8467 8599 8699 8793 8899 8899 9091 9199 9293 9397 9497 9587 9697 9791 9887 9973 10,099 10,193 10,289 10,399 10,499 10,597 Processing COBOL Files on Mass Storage Devices 105 4. (For actual track addressing only) To convert the relative address to an actual device address, divide the relative address by the number of tracks in a cylinder. The quotient will provide the cylinder number and the remainder will be the track number. For example, the 2311 disk pack would utilize 779 as: Cylinder or CC = 77 Track or HH = 9 Figure 31 is a sample COBOL program which creates a direct file with actual track addressing using Method Band provides for the possibility of synonym overflow. Synonym overflow will occur if a record randomizes to a track that is already full. The following description highlights the features of the example. Circled numbers on the program listing correspond to the numbers in the text. The value 10 is added to TRACK-1 to ensure that the problem program does not write on cylinder o. Cylinder 0 must be reserved for the Volume Table of Contents. • Since the prime number used as a divisor is 829, the largest possible remainder will be 828. Adding 10 to TRACK-1 adjusts the largest possible remainder to 838. If synonym overflow occurs, control is given to the error procedure declarative specified in the first section of the Procedure Division. The declarative provides that: • Any record which cannot fit on a track (i.e., tracks 0 through 8 of any cylinder) will be written in the first available position on the following track(s). • Any record which cannot fit within a single cylinder will be written on cylinder 84 (i.e., the cylinder overflow area) • 106 • If a record cannot fit on either cylinders 1 through 83, or on cylinder 84, the job is terminated. The standard error condition "no room found" is tested before control is given to the synonym routine. Other standard error conditions as well as invalid key conditions result in job termination. ERROR-COND is the identifier which specifies the error condition that caused control to be given to the error declarative. ERROR-COND is printed on SYSLST whenever the error declarative section is entered. TRACK-ID and C-REC are also printed on SYSLST. They are printed before the execution of each WRITE statement. This output has been provided in order to facilitate an understanding of the logic involved in the creation of D-FILE. The first twelve records which randomize to cylinder 002 track 8 are actually written on track 8. The next twelve records which randomize to cylinder 002 track 8 are adjusted by the SYNONYM-ROUTINE and written on cylinder 002 track 9. The next twelve records which randomize to cylinder 002 track 8 are adjusted by the SYNONYM-ROUTINE and written on cylinder 84 track 0 (i.e., the overflow cylinder) • The last two records which randomize to cylinder 002 track 8 are adjusted by the SYNONYt-ROUTINE and written on cylinder 84 track 1 (i.e., the overflow cylinder). // JOB METHODBA // OPTION NODECK,LINK,LIST,LIS'I'X,SYM,E£l.RS // EXEC FCOBOL 1 IBM DOS VS COBOL REL 1. 0 PP NO. 5746-CB1 OS.47.44 10/04/73 IDENTIFICATION DIVISION. PROGRM-1-ID. METhOD-B. ENVIRON¥£NT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-370. OBJECT-COMPUTER. IBM-370. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT D-FILE ASSIGN SYS015-DA-2314-A-MASTER ACCESS IS RANDOM ACTUAL KEY IS ACT-KEY. SELECT C-FILE ASSIGN TO SYS007-UR-2540K-S. DATA DIVISION. FILE SECTION. FD D-FILE LABEL RECORDS ARE STANDARD. 01 D-REC. 02 PART-NUM PIC X(8). 02 NUM-ON-HAND PIC 9(4). 02 PRICE PIC 9(5)V99. 02 FILLER PIC X(lS1). FD C-FILE LABEL RECORDS ARE OMI'I'TED. 01 C-REC. 02 PART-NUM PIC XeS). 02 NUM-ON-HAND PIC 9(4)9. 02 PRICE PIC 9(5)V99. WORKING-STORAGE SECTION. 71 HD PIC 9 VALUE ZERO. 77 SAVE PIC S~(S) COMP SYNC. 77 QUOTIENT PIC S9(5) COMP SYNC. 01 ERROR-COND. 02 FILLER PIC 99 VALUE ZERO. 02 ERR PIC 9 VALUE ZERO. 02 FILLER PIC 9(5) VALUE ZERO. 01 TRACK-l PIC 9999. 01 TRACK-ID REDEFINES TRACK-l. 02 CYL PIC 999. 02 HEAD PIC 9. 01 KEY-1. 02 M PIC S999 COMP SYNC VA~UE ZEROES. 02 BB PIC S9 COMP SYNC VALUE ZERO. 02 CC PIC S999 COMP SYNC. 02 HH PIC 8999 COMP SYNC. 02 R PIC X VALUE LOW-VALUE. 02 REC-ID PIC xes). 01 KEY-2 REDEFINES KEY-l. 02 FILLER PIC x. 02 ACT-KEY PIC X(16). Figure 31. Creating a Direct File Using Method B (Part 1 of 4) Processing COBOL Files on Mass Storage Devices 107 IBM DOS VS COBOL REL 1. 0 PP NO. 5746-CBl 08.47.44 10/04/73 I PROCEDURE DIVISION. DECLARATIVES. ERROR-PROCEDURE SECTION. USE AFTER STANDARD ERROR PROCEDURE ON D-FILE GIVING ERROR-COND. ERROR-ROUTINE. EXHIBI'I' NAt ! DOS VS COBOL TRACK-ID = ERROR-COND TKACK-ID = TRACK-ID = ERROR-COND TRACK-ID TRACK-ID TRACK-ID TRACK-ID TRACK-ID BHROR-COND TRACK-Ill = TRACK-ID = ERROR-COND TRACK-ID = TRACK-ID = ERROR-COND TRACK-ID = TRACK-ID = ERRoR-corm TRACK-ID = TRACK-ID = ERKOR-COND TRACK-ID = TRACK-ID = ERROR-COi'm TRACK-ID = TRACK-ID = EJ:{ROR-COND TRACK-ID = TRACK-ID = ER,WR-COND TRACK-ID = TRACK-ID = ERROR-COND TRACK-ID = 0028 C-RBC 5746-CE.:i. pp NO. 8290001825 CC 002 rid 008 8290001825 8290001826 CC CC 002 Bti 002 hti 009 008 8290001826 8290001827 8290001828 8290001829 8290001830 cc CC CC CC CC 002 001 001 001 002 HH hH HH HH HH 009 001 001 001 008 8290001830 8290001831 CC CC 002 HH 002 hH 009 008 8290001831 8290001832 CC CC 002 nil 002 Hd 009 008 8290001832 8290001833 CC CC 002 HH 002 hH 009 008 8290001833 8290001834 CC CC 002 Hd 002 HH 009 008 8290001834 8290001835 CC CC 002 tiH 002 HH 009 008 8290001835 8290001836 CC CC 002 HH 002 HH 009 008 8290001836 8290001837 CC CC 002 HH 002 HH 009 008 8290001837 8290001838 CC CC 002 HH 002 Hd 009 008 8290001838 CC 002 tiH 009 = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC 0011 C-REC 0011 C-REC 0011 C-REC 0028 C-REC = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC 0028 C-REC = 00100000 0028 C-REC Figure 31. 110 REi.. 1.0 CD I CD Creating a Direct File Using Method B (Part 4 of 4) 08.47.44 10/04/73 Figure 32 is a sample COBOL program which creates a direct file with relative track addressing using Method B. The sample program provides for the possibility of synonym overflow. Synonym overflow will occur if a record randomizes to a track wh1ch is already full. The following discussion highlights some basic features. Circled numbers on the program listing correspond to numbers in the text. caused control to be given to the error declarative. ERROR-COND is printed on SYSLST whenever the error declarative section is entered. TRACK-ID and C-REC are also printed on SYSLST before execution of each WRITE statement. This output has been provided in order to facilitate an understanding of the logic involved in the creation of D-FILE. since the prime number used as a A~~~~~~ ~~.~~~~ ~~ ~~ Q?O ~_J' ~ho ~-- '~rnOQ+ ---~--- remainder will be 828. o o nnQQ;hlo r------- If synonym overflow occurs, control is given to the USE AFTER STANDARD ERROR declarative specified in the first section of the Procedure Division. The declarative provides that any record that cannot fit on the track to which it randomizes will be written on the first subsequent track available. The standard error condition "no room found" is tested before control is given to the SYNONYM-ROUTINE. Other standard error conditions as well as invalid key conditions result in job termination (EOJ).' ERROR-COND is the identifier which specifies the error condition that The first twelve records which randomize to relative track 18 are actually written on relative track 18. ® The next twelve records which randomize to relative track 18 are adjusted by the SYNONYM-ROUTINE and are actually written on relative track 19. ® The next twelve records which randomize to relative track 18 are adjusted by the SYNONYM-ROUTINE and are actually written on relative track 20. (j) The last two records which randomize to relative track 18 are adjusted by the SYNONYM-ROUTINE and are actually written on relative track 21. processing COBOL Files on Mass Storage Devices 111 // JOB METHODBR // OP1ION NODECK,LINK,LIST,LISTX,SYM,~RRS // EXEC FCOBOL 1 IBM DOS VS COBOL REL 1. 0 PP NO. 5746-CB1 OS.40.53 10/04/73 eEL (jUOTL IDENTIFICA~ION DIVISION. PROGRAM-ID. METHODB. ENVIRONtt..EN1' DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-370. OBJEC'I-CONPUTER. IBM-370. INPUT-OUTPUT SECTION. FILE-COt."'TROL. SELECT D-FILE ASSIGN TO SYS015-DA-2314-D-~ffiSTER ACCESS IS RANDOM ACTUAL KEY IS ACT-KEY. SELECT C-FILE ASSIGN TO SYS007-UR-2540R-S. DATA DIVISION. FILE SECTION. PD D-FILE LABEL RECORDS ARE STANDARD. 01 D-REC. 05 PART-NUM PIC xes). 05 NUM-ON-HAND PIC 9(4). 05 PRICE PIC 9(S)V99. 05 FILLER PIC X(lSl). FD C-FILE LABEL RECORDS ARE OMITTED. 01 C-kEC. 05 PART-NU'·j PIC X(S). 05 NUM-ON-HAND PIC 9(4). 05 PRICE PIC 9(S)V99. OS HLLER PIC X(61l. WORKING-STORAGE SECTION. 77 SAVE PIC S9(S) COMP SYNC. 77 QUOTIENT PIC S9(8) COMP SYNC. 01 ACT-KEY. 02 ~RACK-ID PIC S9(S) COMP SYNC. 02 REC-ID PIC xes). 01 ERROR-COND. 02 FILLER PIC 99 VALUE ZERO. 02 ERR PIC 9 VALUE ZERO. 02 FILLER PIC 9(5) VALUE ZE~O. Figure 32. Creating a Direct File with Relative Track Addressing Using Method B (Part i of 4) 112 IBM DOS VS COBOL REL 1.0 PP NO. 5746-CB1 08.40.53 10/04/73 PROCEDURE DIVISION. DECLA.RATIV.c:;S. ERROk-PROCEDURE SECTION. USE AFTER STANDARD ERROR ~ROCEDURE ON D-FILE GIVING EaROR-COl'lD. ERROR-ROUTINE. EXHIBIT ~lED ERROR-COND. IF ERR = 1 GO TO SYd"ONYH-ROUTI~E ELSE DISPLAY ·OTHER STANDARD ERROR W REC-ID GO TO EOJ. SYNONYM-ROUTINE. IF 'I'RACK-Ii; IS LESS THAN 834. ADD 1 'I'O TRACK-Hi. GO 'I'O WRITES. END DECLARA'I'IVES. OPE~~ INPUT C-FILE J (;\ \.!.I OUTPUT D-FILE. READS. READ C-FILE AT END GO TO EOJ. MOVE CORRESPOl~DING C-IlliC TO D-REC. l'jOVE PART-NUM OF C-REC 'I'O REC-ID. SAVE. DIVIDE SAVE BY 829 GIVING QUOTIENT RLI."..AINDER TRACl\-ID. WRITES. EXHIBIT NAMED TKACK-ID C-REC. WRITE D-REC INVALID KEY GO TO INVALID-KEY. GO TO READS. INVALID-KEY. DISPLAY "INVALID KEY • REC-ID. EOJ. CLOSE C-FILE D-FILE. STOP RUN. 'T' }~ / / LBVI'YP NSD (01) /1 E.XEC LNKEDT Figure 32. Creating a Direct File with Relative Track Addressing Using Method B (Part 2 of 4) Processing COBOL Files on Mass Storage Devices 113 IBM DOS VS COBOL REL 1.0 PP NO. 5746-CBl 08.40.53 / / ASSG~ SYS007,X'OOC' // // // // ASSGN SYS015,X'231' DLbL ~ASTER,,99/365,DA EXT6Nr SYS015,111111,r,0,20,840 EXEC Ti ALLOCATION specifies that a portion an already defined VSAM da~a space is suballocated to the object. Objects with the SUBALLOCATION attribute dO not appear in the VTOC. Only the name of the data space that contains the object appears thErE. If the object has the SUBALLOCATION attribute, there must be a VSAM data space defined on the volume on which the object is being defined. 0= Virtual Storage Access Method (VSAM) 133 • INDEXEDjNONINDEXFD This parameter specifies the type of cluster being defined. INDEXED specifies that the cluster being defined is for a key-sequenced file. This is the default. Entry-Sequenced File Processing~ An entry-sequenced file can only be processed sequentially; therefore, since the default is sequential, the ACCESS clause need not be specified. ~seqUenCed File Processing: A key-sequenced file can be processed ; sequentially, randomly, or both NONINDEXED sequentially and randomly. To process specifies that the cluster being sequentially, ACCESS IS SEQUENTIAL is defined is for an entry-seguenced specified. To process randomly, ACCESS IS file. RANDOM is specified. To process both sequentially and randomly, ACCESS IS • KEYS (length position) -- This DYNAMIC is specified. parameter specifies the length and the ,.,~-.-.--.----__.__~____ ~~___ .."~ ___.",.~,.~~._.~~___~_____-------starting position of the key field ACCESS IS DYNAMIC provides the greatest within each logical record. (Position flexibility since all the capabilities of o is the first byte in the logical both sequential and random processing are record.) The key field with this supported. Processing can be switched specified length, and starting in the from sequential to random and vice-versa, specified position, is in all logical as many times as desiree. records in a key-sequenced file. The sum of length and position must be equal to or less than the length of the logical record. Current Record Pointer • UPDATEPW (password) -- This parameter specifies the update level password for the file being defined. The update level password permits input and output operations (READ, START, DELETE, WRITE, REWRITE) against the logical records of the file. Note that this file has no read-level protection and that its master level password is WRITEFL. ATTEMPTS (count) specifies the maximum number of times the operator can try to enter the password in response to a prompting message. Count can be any number from 0 through 7. The value 0 prevents any password prompting. CATALOG (catalog name/password) specifies the catalog and its update level password that is to contain the entries for the cluster. File Processinq Technigues The COBOL user has three different file processinq technigues available to him; ~eguentiai, random, and a combination of sequential and random. The technique to be used is specified through the ACCESS clause of the SELECT statement. 134 The current record pointer (CRP), a conceptual pointer, is applicable only to key-sequenced files. The current record pointer indicates the next record to be accessed by a sequential reguest; the CRP has no meaning for random processing. The CRP is affected only by the OPEN, START and READ statements, it is not used or affected by the WRITE, REWRITE, or DELETE statements. The following are examples of how the CRP is affected by various COEOL statements. Example 1: Assuming a file has records with keys from 1 to 10, if the sequence of I/O operations on the file with ACCESS IS DYNAMIC and opened 1-0 i~: MOVE 7 TO RECORD-KEY READ filename H0VE 114 TO RECORD-KEY fV-RITE record -name READ filename NEXT RECORD the READ NEXT reads record 8 if the prev~ous READ was successful. If the prev~ous READ was not successful, the STATUS KEY will be set to 94 (No Current Record Pointer) when the READ NEXT is attempted. This occurs independently of the successful intervening WRITE. Generally, the last request on a file which establishes a CRP (OPEN, READ, or START) must have been successful in order for a sequential read to be successful. OPEN INPUT (CRP is set to first record on file) MOVE 5 TO RECORD-KEY READ filename (record 5 is read, CRP is set to record 6) READ filename NEXT RECORD (or indent a couple of spac~s) (record 6 is read, CRP is set to record 7) Example 2: In this example, ACCESS IS SEQUENTIAL is specified; therefore, records are retrieved in ascending key sequence starting at the position indicated by the CRP~ (Assume this file has records with keys from 1 to 10. } OPEN INPUT filename (CRP is at first record on the file) MOVE 10 TO RECORD-KEY START filename (CRP is now at record 10) READ filename (record 10 is read) Move 41 TO PECORD-KEY READ filename NEXT RECORD (or indent a couple of spaces) (record 7 is read, CRP is set to record 8) The last READ---NEXT RECORD does not read record 41 even though the record key field contained 41. This is true because a sequential read does not use the contents of the record key to determine which record to read, it uses the position of CRP as established by a previous request. If the last READ had been a random read (no NEXT) then record 41 would have been read~ Example 4: MOVE 5 TO RECORD-KEY START filename (CRP is now at record 5) In this updating example, ACCESS IS DYNAMIC is specified; the REWRITE statement does not affect the CRP. (Assume this file has records with keys from 1 to 44.) READ filename (record 5 is read CRP is set to record 6) OPEH I-O READ filename (record 6 is read CRP is set to record 7) Note that the CRP can be changed randomly through the use of the START statement. All reading is then done sequentially from that point. In this example, if the START request for record key 5 had failed with no record found (File Status=23), the three READ statements following would have failed with no current record pointer (File Status=94). MOVE 10 TO RECORD-KEY READ filename (record 10 is read, CRP is set at record 11 ) MOVE 44 TO RECORD-KEY REWRI,=",E record-name (record 44 is updated, CRP is set at record 11) READ filename NEXT RECORD (record 11 is read, CRP is set at record 12) MOVE 74 TO RECORD-KEY REWRI'I'E (fails, record not found in this file) READ NEXT (record 12 is read, CRP is set at record 13) Example 3: In this example ACCESS IS DYNA~IC is specified. Therefore, records are accessed randomly if READ is specified and sequentially if READ NEXT is specified. (Assume this file has records with keys from 1 to 44.) (CRP is at first record on file) Note that although the last REWRITE failed, the following READ NEXT was successful. Virtual Storage Access Method (VSA M) 135 Table 11. File Status Values and Error Handling I No USE Declarative l-, I I No AT END or IFirst CharacterlAT END or INVALIDIINVALID KEY lof FILE STATUS IKEY clause I clause I I , I 0 IReturn to next IReturn to next I I sentence I sentence I I I I 1 I Return to AT END IReturn to next I I address I sentence I I I I I I tI I I 2 IReturn to INVALIDIReturn to next I IKEY address I sentence I I I I I I I I I ( 3 IWrite message and write message I Ireturn to next and return to next sentence I I sentence I I I I I 9 (Return to next Return to next I I sentence sentence I I I I USE Declarative I I i INo AT END or I IAT END or INVALID IINVALID KEY ,clause (KEY clause , , IReturn to next IReturn to next I sentence I sentence I I IReturn to AT END IReturn to next Isentence after I address Ideclarative is I (executed I I I IReturn to INVALID IReturn to next Isentence after IKEY address Idecla:rative is I I executed I I I IReturn to next IReturn to next Isentence after USElsentence after Ideclarative is Ideclarative is lexecuted I executed I I IReturn to next I Return to next Isentence after USElsentence after Ideclarative is Ideclarative is texecuted lexecuted I USEI I I I I USEI I I f I USEI I I I I USEI I ERROR HANDLING Record Formats for VSAM Files All errors on a VSAK file, whether logic errors caused by the COBOL programmer (for example, reading an unopened file), or 1-0 errors on the external storage media, return control to the COBOL program. The contents of FILE STATUS indicate the status of the last request on the file. It is strongly recommended that all files have a file status associated with them, and that the COBOL programmer check the contents of FILE STATUS after each request. For VSAM files, processing is independent of whether or not the records on a file are fixed-length (that is, all records in the file are the same length) or of variable-length format. Table 11 describes the actions taken for all the combinations of AT END, INVALID KEY, and error declaratives for each value of FILE STATUS. Note: Return is always to NEXT STATEMENT unless the request that caused the error contained an AT END or INVALID KEY clause. By omitting both the AT END and INVALID KEY clauses and the USE ERROR/EXCEPTION for the file, any type of error for the file can be intercepted by checking the FILE STATUS data name following each I/O request (including OPEN and CLOSE) for the file. This will simplify the exception-condition handling in the COBOL program. 136 ( Thus for example, the considerations which are discussed in "Record Formats For Non-VSAM Files" generally do not apply. However, the following points should be considered: • For record handling purposes, the records are considered to be fixed-length when 1. All the records in the file are the same size (or there is only one record description) • 2. No record contains an OCCURS clause with the DEPENDING ON option. Otherwise, the records are considered to be variable length. • For variable length records, without OCCURS DEPENDING ON clauses, the following applies: When a READ INTO statement is used, the size of the longest record for the file is moved to the input area. Coding considerations for records with the OCCURS DEPENDING ON option are discussed in "Table Handling Considerations. n Initial Loading of Records into a File A non-loaded file is one which has been defined but has never contained any records. An unloaded file is one which has contained records but from which all records have been deleted. A loaded file is one which contains records. File Status Initialization The value of uz, in Status Key 1 is reserved for the programmer's use. This permits his determining whether a request was made against his file. For example, if he initializes Status Key 1 to the value Z before attempting to OPEN his file he can then determine if his program actually attempted the OPEN by checking the contents of Status Key 1. If it is Z, the OPEN statement was not executed; if it is a value other than ZH the statement was executed. This same technique can be used for any request against the file GEN12 would position the CRP to the first record in the file whose key has the first two characters greater than 01~ DELETE Statement The DELETE is valid only for a key-sequenced File. The same considerations discussed under "Key-Sequenced File Considerations for the'. REWRITE Statement" apply to the DELETE statement. A COBO~ PFograromer can use VS~l~ in three basic ways: to create a file, to retrieve a file, and to update a file. However, prior to. processing a VSAM file, it is an absolute necessity that the previously discussed Access Method Services functions be performed. Most significant to the COBOL programmer is whether the file is defined as an entry-sequenced file or as a key-sequenced file. Creating a VSAM File The minimum COBOL language statements required to create a VSAM file are summarized in Table 14. Table 14. COBOL Statements for Creating a VSAM File r-----------.---------------~----------~ I I I I Entry-Seguenced I Key-Seguenced I I File I File I I I I , I Environment I SELECT ISELEC~ I I Division IASSIGN IASSIGN I I I IORGANIZATION I i IS INDEXED IRECORD KEY I IData IFD entry IFD entry I I Division ILABEL RECORDS ILABEL RECORDS I I , I I I Procedure IOPEN OUTPUT IOPEN OUTPUT I I Division I or I or I IOPEN EXTEND IOPEN EXTEND , ,WRITE ,WRITE , I ,CLOSE I CLOSE I I , Tne following discussion illustrates the steps wnich must be taken to create an entry-sequenced file. Assume the VSAM catalog and vs~~~ data space have been created as previously illustrated. The next thing a user must do is define the entry in the catalog for the VSAM file. // LTOB DEFINE FILE / / EXEC IDCAMS t SIZE=1 OOK DEFINE CLUSTER (NAME (TRANFILE) VOI,UME ( 3 21 942) RECORDS ( 50 5) RECORDSIZE(80 80) READPW(R0104) UPDATEPW(W0104) ATTEMPTS (0) NONINDEXED SUBALLOCATION) CATALOG (VSM1.CAT/SECRET) /* Virtual Storage Access Method (VSAM) 141 The meaning of the parameters is: NAJ.\1E (TRANFILE) This is the data set name. VOLUME (321942) This is the volume on which the space for the data set resides. RECORDS (50 5) Primary allocation is for 50 records, secondary allocation is for 5 records. RECORDSIZE (80 80) The average and maximum record size is 80 characters. READPW (RO 104) The password R0104 must be supplied to open the file with the INPUT optio~ UPDATEPW (W0104) The password W0104 must be supplied to open the file with the OUTPUT, EXTEND or 1-0 option. ATTEMPTS (0) The operator is not to be prompted for the password when the file is opened. NONINDEXED The file is an entrysequenced file. SUBALLOCATION Space for this file is to be suballocated from existing VSAM data space on the volume. CATALOG (VSAMCAT/ SECRET) The name of the catalog into this file is cataloged ~s VSAMCAT and its update password is SECRET. ~hich The COBOL program to access such a I~Le would include the following statements. FILE-CONTROL. SELECT VSAMSEQ ASSIGN TO SYS010-AS-TESTFL ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL PASSWORD IS VSAMPW FILE STATUS IS STATKEY• I DATA FILE FD 01 DIVISION. SECTION. VSAMSEQ LABEL RECORDS ARE OMITTED. VSAMREC. 05 FIELD1 PICTURE X(8). 05 FIELD2 PICTURE X(72). WORKING-STORAGE SECTION. 77 STATKEY PICTURE 99. 77 VSAMPW PICTURE X(5). PROCEDURE DIVISION. BUILD-PASSWORD. PERFORM PASSWORD-BUILDER. PERFORM PASSWORD-SCRAMBLER. OPEN OUTPUT VSAMSEQ. IF STATKEY NOT = 0 GO TO ERROR-HANDLER. BUILD-A-RECORD. WRITE VSAMREC. IF STATKEY NOT = 0 GO TO ERROR-HANDLER. Note: When the user gains update access to the file (by supplying the update level of the password) he has also gained read access. In general, when a user gains access to a file at a given level of protection, he has gained access to that file for all lower levels. This means that the above file could be opened INPUT by supplying the update level of the password. However, it could not be opened OUTPUT, EXTEND or 1-0 by supplying the read level password. 142 GO TO BUILD-A-RECORD. In this sample program the routines PASSWORD-BUILDER and PASSWORD-SCRAMBLER construct the update level password so that the file can be opened OUTPUT. These routines can be written in such a way that they are difficult to follow, thus improving security. Note that the FILE-STATUS is checked after each request on the fi~e: Thi~ ensures that unexpected condltlons wlll be detected. The JCL needed to execute the program is II II II II II JOB ASSGN DLBL EXTENT EXEC SYS010 X'130' TESTFL,'TRANFILE'"VSAM SYS01 0,321942 program-name,SIzE=nnnk Example 2: This example shows the creation of a COBOL key-sequenced VSA~ file. This prQ~iam performs the same function as ~x·ample 1 except that now a key-sequ nced 7 file is being created. The records J.n the file "INREC" are in ascending key order. IDEN%IFICATION DIVISION. ENVIRONMENT DIVISION. PROCEDURE DIVISION. PARA1. OPEN INPUT INREe OUTPUT OUTREC. IF CHK IS NOT ~ ~OO" GO TO CHKRTN. PARA2. READ INREC INTO OUTMASTER AT END GO TO PARA4. PARA3. WRITE OUTMASTER. IF CHK IS NOT = "00" GO TO CHKRTN. GO TO PARA2. PARA4. CLOSE INREC OUTREC. IF CHK IS NOT = "00" GO TO CHKRTN. FINIT. CLOSE INREC OUTREC. STOP RUN. CHKRTN. DISPLAY "ERROR. STATUS KEY VALUE IS" CHK GO TO FINIT. Note that in this example any Status Key return other than 00 causes transfer of control to paragraph CHKRTN. This routine can determine the exact cause of the error by checking the Status Key. Once the cause is determined, instructions can be issued according to the user's desired response to each type of error. Retrieving a VSAM File INPUT~OUTPUT SECTION. FILE-CONTROL. SELECT INREC ASSIGN TO SYS005-UR-2540R-CARDIN. SELECT OUTREC ASSIGN TO SYS010-0UT~AST ORGANIZATION IS INDEXED RECORD KEY IS ARG-l FILE STATUS IS CHK. DATA DIVISION. FILE SECTION. FD INREC LABEL RECORDS ARE OMITTED DATA RECORD IS INMASTER 01 INMASTER PIC X(80). FD OUTREC LABEL RECORDS ARE STANDA.RD DATA RECORD IS OUTMASTER. 01 OUTMASTER. 05 FILLER PIC X. 05 ARG-1 PIC XXX. 05 REM PIC X(76). WORKING-STORAGE SECTION. 77 CHK PIC XX. The mlnlmum COBOL language statements required to retrieve a VSAM file are summarized in Table 15. Table 15. COBOL Statements for Retrieving a 'ISAM File I I I I Entry-Sequenced I Key-Sequenced I File ,File I I I I , , IEnvironmentlSELECT I SELECT I I Division (ASSIGN IASSIGN I I I IORGANIZATION I , I I IS INDEXED I I I I I RECORD KEY I I I , IData IFD entry IFD entry I I Division ILABEL RECORDS ILABEL RECORDS I I I I I IOPEN INPUT I I Procedure ,OPEN INPUT I Division IREAD ••• IREAD I I I AT END I I I ICLOSE I CLOSE I , I virtual Storage Access Method (VSAM) 143 The following examples show the retrieval of records from VSAM files. Example 3: This example shows the retrieval of records from the entry-sequenced file created in example 1. The records are then printed. Example 4: This example shows the retrieval of records from the key-sequenced file created in example 2. Note that in the Procedure Division there is a switch from sequential processing to random processing; this is permitted since ACCESS IS DYNA~IC is specified in the ENVIRONMENT Division. IDENTIFICATION DIVISION. IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. ENVIRONMENT DIVISION INPUT-OUTPUT SECTION. FILE-CONTROL SELECT INREC ASSIGN TO SYS010-AS-INMAST FILE STATUS IS CHK. SELECT PREe ASSIGN TO SYS005-UR-1403-S-PRNTR DATA DIVISION. FILE SECTION. FD INREC LABEL RECORDS ARE STANDARD DATA RECORD IS INMASTER. 01 INMASTER PIC X (80) • FD PREC LABEL RECORDS ARE OMITTED DATA RECORD IS POUT. 01 POUT PIC X(80). WORKING-STORAGE SECTION. 77 CHK PIC xx. PROCEDURE DIVISION. PARA1. OPEN INPUT INREC OUTPUT PREC. IF CHK IS NOT = "00" GO TO CHKRTN. PARA2. READ INREC INTO POUT AT END GO TO PARA4. IF CHK IS NOT "00" GO TO CHKRTN PARA3. WRITE POUT. GO TO PARA2. PARA4. CLOSE OUTREC PREC. IF CHK IS NOT = "00" GO TO CHKRTN. FINIT. STOP RON. CHKRTN. DISPLAY 'ERROR. STATUS KEY VALOE IS' CHK. GO TO FINIT. Note that in this example any Status Key return other than 00 causes transfer of control to paragraph CHKRTN. This routine can determine the exact cause of the error by checking the Status Key. Once the cause is determined, instructions can be issued according to the user's desired response to each type of error. 144 INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INREC ASSIGN TO SYS010-INMAST ORGANIZATION IS INDEXED ACCESS IS DYNAMIC RECORD KEY IS ARG-l FILE STATUS IS CH~. SELECT PREC ASSIGN TO SYS005-UR-1403-S-PRINTR DATA DIVISION. FILE SECTION. FD INREC LABEL RECORDS ARE STANDARD DATA RECORD IS INMASTER. 01 INMASTER. 05 FILLER PIC X. 05 , ...... III ~ p.. I ~ tj ro ri- c: 00 00000 '"Jj ..... ...... (() r.n (I) ...... ~ lQ n III 1--" ::;, rw> op0 0000000000000 11 11111 1111111 11111 11111 111111 222222222222222~ 22 '22222 2222222 22222 2 ~ 2 2 2 2222 2 22 2 2222222222222 ~44444 4444444 44444 4~ 444 444444 44444444444444 5 5 ~ 5 5 5 5 5555S55~ 5 5 ~555555555555555~ 55 ~55555 5555555 55555 5 ~ 5 5 5 55 5 5 5 5 ~ 5 5555555555555 4444444~ 44 ~444444444444444~ 71 ~777711771771717 P ~17177 1111717 17171 1 ~ 17 1 11711 7 ~ 1 7717171711717 8 B ~ S 8 8 8 368Se8SS & 8 ~38e838888888888e 88 ~88888 8888888 888 8 e 8.88 8 888 S 8 08 9SC88SSBRaeS8 ~ 9999 ~ ~ 9 ~ ~ 9 qs 995 ~ ~ ''3 S q 9999999999 S ~ ~ 9999999 9 9~ qg 9 9 9 9 S 9 9 9999999999999 g 9 9 9 9 9 S 9 9 ~ 9 9 9 9 a til '0 rl) .... () Hl 0 ~ til Notes: I I 11111111111111 11 11171 7111777 >< III -lo rw 00 ~OOOOO 0000000 00000 O~OOO 00000 z III rt...... 0' File Seq. No. o No. E 1--" Cl tJ' u} II 0 E ..: o II «I 66 6666 6 6666666E 66 ~666666666666666E 66 ~66666 6666666 666 6 6 6.666 66666 6 ~ 6 6666666666666 OJ E!! File Name Eo Operatlon oJ ~ 1-3 t-' tJ:i t-' ~ «I 1 - ~ 1 "I -: " : to : .... Ii 12 I~ '4 I 1£ 11 hi l'i 2l~ 2121 2j 24 25 26~, il 2~ 3U Jl 3~ 3. 3~ 3~ 3fo]; 18 39 4'l.~ 42 ':1 44 4~ 46 4) ~ 4!1!11,)!a1 5.2 ~1;i.4 ~ 5151 SlS9 &0 5' &263 ... 6S f4 &7 '" IBM_50...!1 Ilt J L6L Blank OTF Nome L - 8 -5 punch---.J 1 Dote - yy/d or yy/dd or yy/ddd (on Input or Output) Retention Period - d-dddd (on Output only) 6~ UI 1 ;;,. 1J 14 1\ 7;' ,J 1p '9 ao ! tv\aximum size TLBL fields are shown. • Any field (except Ident, Operation, and Date) may be from 1 position to the maximum shown. IOCS fi lis in the remaining positions of the label field. II Ident and Operation must be as shown. II Date may be 4- 6 positions; Retention period, 1- 4. 2 If a field is omitted, shift the following comma and fields to the left. IOCS supplies a default value for the label field on output. 3 No comma fo Ilows the last field used. -" m += >lj ..... en Standard Tape File Label ~ H (1) += Version Number 0 Ul rt Pl System Code File Identifier !::1 0.. P.I ~1 0 R: I! 0.. lH 8 :E 0 F: : P.J '"tJ (1) ~ ,..,- .-.. ro IE I 0 V' I OTF Name bbbbbbbbbb I I Volume Serial Number !O 0 0 I I I I '-v-' Supplied by 10CS On input, no values are suppl ied and no checking is performed. t""4 Pl tt ro f-' Job Control TLBL Card P.J !::1 0.. ~-'1 t""4 to ~ n P.J t1 AI Ul :::r 0 ~ f-J. !::1 '.0 :_:c ~,J. !::1 f-JS I I .J c ~ Oper- File Name ation 80 ~BOOO ~~OOOOOO OOOOOOOOOOOlOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO60000000000 I 2 3 4 5 • 7 1 ~ 10" 121314 I' I! I.' 11 II 20 21 :2 23 24 2Ii 2i ~I 21 2t 31131 3l ,oJ J, J5 • 31 II 3ll ., ~1 42 43 44 45 41 47 43 CJ 50 ~1 52 53 .. ~ r.& 51 51 ~. 50 ,. all 54 15 &I 17 SI ., 7t 71 72 73 14 15 71 77 71 79 10 I I 1 1 I 1 1 111111 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 lit tit lit 1 1 I 1 22 2 ~ 222 ~~222222 22222222222222222222222222222222222222222222222222222222222222222 33 3~333 3~333333 33333333333333333333333333333333333333333333333333333333333333333 ~ 44 4~444 ~'444444 44444444444444444444444444444444444444444444444444444444444444444 ~ 55 5~555 55555555 55555555555555555555555555555555555555555555 55555555 5555555555 55 5 66 6~666 66666666 6 6 6 6 666 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 666 6 & 6 6 6 & ~ S ~ 11 11111 1 "1111 7 1 17177777717777777777777777777717711171111111117717717777171771771 (l) I-Q 88 88888 8.888888 888888888868888888888888888888888881181888888881818888888 •••••••• ~ ~ 99999999~99999999999999999999999999999999999999999999999999999999999999999999999 f-J. t1 ro S (l) !::1 r+ UI ....-... _ I2~.5 _~I ~" '2131"5" IltLBLJ Blank OTF Name r:., 1120 tI Z2 2324 25 2~ 2721~lI_3~l2 33 ~35 • 3711 U."4I43 4445 .47.4151515253 . . . 51SJ 51 • • '1 a a M • • •7 • • 111172 73 M 15 7171 7171. LABEL PROCESSING CONSIDERATIONS containing all the previously mentioned labels as well as with unlabeled files. Label considerations for VSAM are discribed in the chapter "Virtual storage Access Method (VSAK)". If user standard labels are to be created or checked in the COBOL program, the USE AFTER BEGINNING/ENDING LABELS declarative sentence and the LABEL RECORDS clause with the data-name option must be specified. The labels which may appear on tape are shown in Figures 40 and 41. The compiler allows the programmer to work with files Load Point Marker 1 I V R N 1 i t---J 1 I N R N iii iii N P iii ~ i iii 'II'! ..... P F R N :r:: ~.. iii iii N P iii P R Iii i i IVIVI-IVIHIEI-IHIUI-IUI 1 I IEIEI-IEIUI-IUI IRIHI-IHIUI-IUI I IOIOI-IOIDIDI-IDIHI-IHITI ITIOIOI-IOITI-ITITIDIDI-IDIHI-IHITI ILILI-ILIRIRI-IRILI-ILIMI FILE #lIMIFIFI-IFILI-ILIMIRIRI-IRILI-ILIMI FILE #2 11121-1811121-18111-181 1 R R N P F Iii I 1 11121-18111-181 _ _ _ _~'~I~'~I~'~I~I~I~I~~I~I~I~'_________ 1 I I· I , , I I I 11121-18111-181 I 1 I , , , I , I f End of Tape Marker I I V R R N iii N P Iii P R R iii Iii IEIEI-IEIUI-IUI I 1 FILE #2 ITIOIOI-IOITI-ITITITI IMIVIVI-IVILI-ILIMIMI L-f ~: 11121-18111-181 I I I I I t I , I I I I I Required, processed by IOCS. Permitted, but not written or checked, by IOCS and not available to programmer. Processed by IOCS and available to user. R N P igure 41. I Standard, User Standard, and Volume Labels Load Point Marker I I V I 0 1 i I I AI I Al I R 1 I i C i i i i I IL I ILl I I i AI i AI i IBI-IBITI ITIBI-IEITI lEI IEIMI FILE #lIMIEI lEI MI ILl-ILl I I ILl-ILl I ,IS II ,IS II I ,I IIS I IS II ,I 1 I I 1 t 1 R o C Figure 42. 1 ILl ILl I f--J Notes: 1 i I Required, processed by IOCS. Optional. Written by COBOL compiler. Nonstandard Labels Detailed File Processing Capabilities 165 Header labels are written or read when the file is opened or when a volume switch occurs. Trailer labels are written when the physical end of the reel is reached, or when a CLOSE REEL or CLOSE file-name is issued. Trailer labels are read on each reel except the last when a tapemark is reached. For the last reel (i.e., EOF labels), trailer labels are not read until the file is closed. For multivolume input files with nonstandard labels, the programmer must specify the inteqer-l option of the source language ASSIGN clause, where integer-l is the number of reels in the file. This number can be overridden at execution time by storing a nonzero integer in the special register NSTD-REELS before opening the file. The number of reels is then available to the programmer while the file is opened both in the special register NSTD-RFELS and in the field reserved for this purpose which precedes the DTF table for DTFMT (see "DTF Tables" in this chapter). In addition, the number of reels remaining after each volume switch can also be found in the field reserved for this purpose which precedes the DTF table for DTFMT. When processing a multivolume file with nonstandard labels (i.e., when the data-name option of the LABEL RECORDS clause is specified), if the proqrammer wishes to stop reading or writing before the physical end of a reel is reached, he must set a switch in the appropriate declarative section. In the Procedure Division, he can either CLOSE REEL or CLOSE FILE depending on the switch setting. Volume switching is done by LIOCS when CLOSE REEL is executed. I The second file on the input reel is not used in this program and is bypassed through use of the POSITION option of the MULTIPLE FILE TAPE clause. The first and second input files are closed by the execution of the CLOSE statement with the NO REWIND option, leaving the tape positioned in mid-reel for the next OPEN. All volumes with the exception of the last volume of the multivolume output file are closed by a close statement with the REEL option. Volume switching is performed as noted in step@. The second and third input files processed by the program are opened by an OPEN statement with the NO REWIND option. At job completion, a standard CLOSE is issued to reposition the tapes of the closed files at their physical beginnings. (j) An LBLTYP control statement is included because a tape file requiring label information is to be processed. ® Alternate assignments have been made for SYSOll. Eecause these alternate assignments are in the sequence in which the ASSGN statements are submitted, the first volume of the output file will be on tape drive 282, the second on 283, and the third on 181. When the first CLOSE OUT-PUT REEL statement is executed, a standard EOV label is written on the volume assigned to drive 282 and the reel is rewound and positioned at its physical beginning. The next WRITE RECO statement executed will then be written on the volume mounted on drive 283. ® Although the file OUT-PUT consists of mUltiple volumes, only one TLBL control statement need be submitted. Note: An unlabeled multivolume tape file should not be CLOSE WITH LOCK between two reels. Sample Programs Figure 43 illustrates the manner in which unlabeled input files on a multifile volume are processed by a COBOL program. The input volume contains four files, only three of which are being used by the program. This unused file, which resides between the first and third file on the volume. must be bypassed during file processing. The program creates a single multivolume file with standard labels. All input files residing on the same volume are assigned to the same symbolic unit. 166 Figure 44 is a sample program that illustrates the manner in which the multivolume file created in Figure 43 is read as an input file. The sample program also creates a multifile volume with standard labels. fi~~ output files res~a~ng on the same volume are assigned to the same symbolic unit. The name field of the system-name in the ASSIGN clause is specified. This is the external-name by which the file ~ ~ o is known to the system. When specified, it is the name that appears in the filename field of the DLBL or TLBL job control statements. The name field of the system-name of the ASSIGN clause is specified. These names will appear on the TLBL control statements that refer to these files. For the multivolume input file IN-PUT, the AT END option of the READ statement applies only to the last volume containing the EOF label. For prior volumes containing EOV labels, automatic volume switching will take place as indicated in the ASSGN control statements pertaining to the file IN-PUT. The MULTIPLE FILE TAPE clause is not required for the multifile volume because each file is being processed in the sequence in which it appears on the reel. A rewind will not be executed for any file on the reel except for that processed last. The first and second file written on the volume are closed using the NO REWIND option of the CLOSE statement. This option leaves the tape positioned in mid-reel following the EOF label of the file just closed. At job's completion, a standard CLOSE is issued to reposition the tapes of the closed files at their physical beginning. A LELTYP control statement is included because tape files requiring label information are being processed. There are three TLBL control statements for the volume assigned to SYS013, one for each file referenced on the volume. The filename field of the TLBL control statements for these files contains the names used in the ASSIGN clauses of the COBOL source program, not the programmer logical unit name. Alternate assignments have been made for SYS012 to handle the multiple volumes of the file IN-PUT. Figure 45 illustrates the creation of an unlabeled multivolume file. The number of output volumes is determined dynamically during program execution. The program's input consists of the labeled multifile volume created in Figure 44. All input files residing on the same volume are assigned to the same symbolic unit. o o The CLOSE statement for files IN-PUT-1 and IN-PUT-2, and the OPEN statement for files IN-PUT-2 and IN-PUT-3, use the NO REWIND option. This leaves the tape positioned in mid-reel for the multifile volumets next OPEN statement. When it has been determined from the input data that a new output reel is required for the multivolume output file, a CLOSE OUT-PUT REEL statement is executed, processing is halted, and a message is issued to the operator which requests a new volume to be mounted. At job's compl~tion, a standard CLOSE is issued to reposition the tapes of the closed file at their physical beginning. An LBLTYP control statement is included because tape files requiring label information are being processed. There are three TLBL control statements for the volume assiqned to SYS014, one for each file referenced on the volume. The filename field of the TLBL control statements for these files contains the names used in the ASSIGN clauses of the source program and not the programmer logical unit names. Only one tape drive is assigned to the multivolume file OUT-PUT. Therefore, each time a volume is closed, processing must be halted and the operator informed to mount a new tape. This is illustrated in step~. Detailed File Processing Capabilities 167 /1 JOB SAMPLE * UNLABELED MULTIFILE VOLUME TO MULTIVOLUME FILE WITH STANDARD LABELS II OPTION LOG,DUMP,LINK,LIST,LISTX,XREF,SYM,ERRS,NODECK / / EXEC FCOBOL 000010 000020 000030 000040 000050 000060 000070 000080 000090 000100 000110 000120 000130 000140 000150 000160 000170 000180 000190 000200 000210 000220 000230 000240 000250 000260 000270 000280 000290 000300 000310 000320 000330 000340 000350 000360 000370 000380 000390 000400 000410 000420 000430 000440 000450 000460 000470 000480 000490 000500 000510 000520 000530 IDENTIFICATION DIVISION. SAMPLE-l. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-370. OBJECT-COMPUTER. IBM-370. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT iNPUT1 ASSIGN TO SYS010-UT-3410.-S-FILE1.} SELECT INPUT2 ASSIGN TO SYS010-UT-3410-S-FILE2. SELECT INPUT3 ASSIGN TO SYS010-UT-3410-S-FILE3. SELECT OUT-POT ASSIGN TO SYS011-UT-3410-S. I-O-CONTROL. MULTIPLE FILE TAPE CONTAINS INPUTl POSITION 1 } INPUT2 POSITION 3 • INPUT3 POSITION 4 DATA DIVISION. FILE SECTION. FD INPUTl RECORD CONTAINS 80 CP.ARACTERS LABEL RECORD IS OMITTED. 01 RECl PIC X(80). FD INPUT2 RECORD CONTAINS 80 CHARACTERS LABEL RECORD IS OMITTED. 01 R~C2 PIC X(80). FD INPUT3 RECORD CONTAINS 80 CHARACTERS LABEL RECORD IS OMITTED. 01 BEC3 PIC X(80). FD OUT-PUT RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS STANDARD. 01 RECO PIC X(80). PROCEDURE DIVISION. OPEN INPUT INPUT1 OUTPUT OUT-PUT. READ1. PEAD INPUT1 INTO RECO AT END GO TO CLOSE1. A. WRITE RECO. B. GO TO READ1. CLOSE1. CLOSE INPUTl WITH NmEWIND.® C. CLOSE OUT-PUT REEL. 4 D. OPEN INPUT INPUT2 WI H NO REWIND.f5\ READ2. \V READ INPUT2 INTO RECO AT END GO TO CLOSE2. PERFORM A. GO TO BEAD2. CLOSF2. (;\ CLOSE INPUT2 WITH NO REWIND. ~ PERFORM C. OPEN INPUT INPUT3 WITH NO REwIND. PROGRA~-ID. Figure 43. 168 CD (!) (!) Processing an Unlabeled Multifile Volume (Part 1 of 2) 000540 READ3. READ INPUT3 INTO RECO AT END GO TO CLOSE3. 000550 PERFORM A. 000560 GO TO READ3. 000570 000580 CLOSE3. 000590 CLOSE INPUT 3 OUT-PUT. STOP RUN. 000600 CD / / LBLTYP TAPE / / EXEC LNKEDT (J) // ASSGN SYS010,X'281' // ASSGN SYS011,X'282' // ASSGN SYS011,X'283"ALT} 8 // ASSGN SYS011,X'181',ALT // TLBL SYS011,'MULTI-VOL FILE',99/214 // EXEC 0 Figure 43. 0 Processing an Unlabeled Multifile Volume (Part 2 of 2) Detailed Pile Processing Capabilities 169 / / JOB SAMPLE * LABELED MULTIVOLUME FILE TO LABELED MULTIFILE VOLUME / / OPTION LOG,DUMP,LINK,LIST,LISTX,XREF,SYM,ERRS,NODECK / / EXEC PCOBOL 000010 000020 000030 000040 000050 000060 000070 000080 000090 000100 000110 000120 000130 000140 000150 000160 000170 000180 000190 000200 000210 000220 000230 000240 000250 000260 000270 000280 000290 000300 000310 000320 000330 000340 000350 000360 000370 000380 000390 000400 000410 000420 000430 000440 000450 IDENTIPICATION DIVISION. PROGRAM-ID. SAMPLE-2. ENVIRONMENT DIVISION. CONPIGURATION SECTION. SOURCE-COMPUTER. IBM-370. OBJECT-COMPUTER. IBM-370. INPUT-OUTPUT SECTION. PILE-CONTROL. SELECT IN-PUT ASSIGN TO SYS012-UT-3410-S. SELECT OUT-PUTl ASSIGN TO SYS013-UT-3410-S-PILE1.} SELECT OUT-PUT2 ASSIGN TO SYS013-UT-3410-S-FILE2. SELECT OUT-PUT3 ASSIGN TO SYS013-UT-3410-S-FILE3. DATA DIVISION. . PILE SECTION. PD IN-PUT RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS STANDARD. 01 IN-REC. 05 PILLER PIC X (4) . 05 CODA PIC X. 05 FILLER PIC X(6}. 05 CODB PIC X. 88 SW-PILl VALUE "9". 88 SW-FIL2 VALUE "8". 05 FILLER PIC X(68). FD OUT-PUTl RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS STANDARD. 01 OUT-RECl PIC X(80). FD OUT-PUT2 RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS STANDARD. 01 OUT-REC2 PIC X (80) • FD OUT-PUT3 RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS STANDARD. 01 OUT-REC3 PIC X(80). WORKING-STORAGE SECTION. 17 TAPE-NUMBER PIC 9 VALUE O. PROCEDURE DIVISION. OPEN INPUT IN-PUT OUTPUT OUT-PUT1. Pigure 44. 170 CI) Reading a Multivolume File with Standard Labels; Creating a Multifile Volume with Standard Labels (Part 1 of 2) 000460 READ-IN. READ IN-PUT AT END GO TO END-OF-JOB. 000470 000480 A. MOVE IN-REC TO OUT-REC1. WRITE OUT-REC1. 000490 IF SW-FILl NEXT SENTENCE ELSE G~O READ-IN. 000500 CLOSE OUT-PUTl WITH NO REWIND. 000510 OPEN OUTPUT OUT-POT2. 000520 ADD 1 TO TAPE-NUMBER. 000530 000540 B. PERFORM READ-IN. MOVE IN-REC TO OUT-REC2. 000550 WRITE OUT-REC2. 000560 000570 IF SW-FIL2 NEXT SENTENCE ELSE GQ)0TO B. CLOSE OUT-PUT2 WITH NO REWIND. 3 000580 C!) \!J ,....n,nrnl\ VVV:J::1V I"\...,,,.,,T vr~D "nmnTTm vu~ru~ ('\n"'_T'lTTm'4 vu. rU.j. ADD 1 TO TAPE-NUMBER. 000600 000610 C. PERFORM READ-IN. MOVE IN-REC TO OUT-REC3. 000620 WRITE OOT-REC3. 000630 GO TO C. 000640 000650 END-OF-JOB. CLOSE IN-PUT. 000660 IF TAPE-NUMBER 000670 o CLOSE OUT-PUTl GO TO D. } 1 CLOSE OUT-PUT2 ELSE CLOSE OUT-PUT3. ~ IF TAPE-NUMBER 000680 000690 D. STOP RON .. f4' / / LBLTYP TAPE / / EXEC LNKEDT // // // // // // // CD ASSGN SYS018,X'283' TLBL FILE1,'MULTI-FILE1 VOL'} (;\ TLBL FILE2,'MULTI-FILE2 VOL' TLBL FILE3,'MULTI-FILE3 VOL' ASSGN SYS012,X'281' ASSGN SYS012,X'282' ,ALT} ASSGN SYS012,X'181',ALT ~ II TLBL SYS012,'MULTI-VOL FILE' / / EXEC Figure 44. \!; f1\ Reading a Multivolume File with Standard Labels; Creating a Multifile Volume with Standard Labels (Part 2 of 2) Detailed File Processing Capabilities 171 // JoB SAMPLE * LABELED MULTIFILE VOLUME TO UNLABELED MULTIVOLUME FILE / / OPTION LOG,DUMP,LINK,LIST,LISTX,XREF,SYM,ERRS,NODECK / / EXEC FCOBOL 000010 000020 000030 000040 000050 000060 000070 000080 000090 000100 000110 000120 000130 000140 000150 000160 000170 000180 000190 000200 000210 000220 000230 000240 000250 000260 000270 000280 000290 000300 000310 000320 000330 000340 000350 000360 000370 000380 000390 000400 000410 000420 000430 000440 000450 000460 000470 000480 000490 000500 000510 000520 000530 000540 000550 IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE-3. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IB[1-370. OBJECT-COMPUTER. IBM-370. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IN-PUT-l ASSIGN TO SYS014-UT-3410-S-FILE1.} SELECT IN-PUT-2 ASSIGN TO SYS014-UT-3410-S-FILE2. SELECT IN-PUT-3 ASSIGN TO SYS014-UT-3410-S-FILE3. SELECT OUT-PUT ASSIGN TO SYS015-UT-3410-S. DATA DIVISION. FILE SECTION. FD IN-PUT-1 RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS STANDARD. 01 IN-RECl PIC X(80). FD IN-PUT-2 RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS STANDARD. 01 IN-REC2 PIC X(80). FD IN-PUT-3 RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS STANDARD. 01IN-REC3PICX(80). FD OUT-PUT RECORD CONTAINS 80 CHARACTERS BLOCK CONTAINS 3 RECORDS LABEL RECORD IS OMITTED. 01 OUT-REC. 05 FILLER PIC X(4}. 05 CODA PIC X. 88 HI VALUE "9". 05 FILLER PIC X(6). 05 CO DB PIC Xe 88 LO VALUE "8". 05 FILLER PIC X(68). PROCEDURE DIVISION. OPEN INPUT IN-PUT-l OUTPUT OUT-PUT. IN-1. READ IN-PUT-l INTO OUT-REC AT END GO TO CLOSE1. TESTER. IF HI AND LO PERFORM CLOSE-OUT ELSE WRITE OUT-REC.CD A. GO TO IN-l. CLOSE1. CLOSE IN-PUT-1 WITH NO REWIND. } f,;\ OPEN INPUT IN-PUT-2 WITH NO REWIND. IN-2. READ IN-PUT-2 INTO OUT-REC AT END GO TO CLOSE2. PERFORM TESTER. GO TO IN-2. Pigure 45. 172 (!) \!J Creating an Unlabeled Multivolume File (Part 1 of 2) 000560 000570 000580 000590 000600 000610 000620 000630 000640 000650 000660 000670 000680 CLOSE2. CLOSE IN-PUT-2 WITH NO REWIND. } OPEN INPUT IN-PUT-3 WITE NO REWIND. \:J IN-3. READ IN-PUT-3 INTO OUT-REC AT END GO TO CLOSE3. PERFORM TESTER. GO TO IN-3. CLOSE-OUT. } CLOSF OUT-PUT REEL. STOP "REMOVE TAPE ON SYS015 AND MOUNT NEW TAPE". CLOSE3. CLOSE IN-PUT-3 OUT-PUT. STOP RUN. 12' (~\ \V CD II LBLTYP TAPE C!) / / EXEC LNKEDT // // // // ASSGN SYS014,X'283' TLBL FILE1,'MULTI-FILEl VOT TLBL FILE2,'MULTI-FILE2 vail TLBL FILE3"MULTI-FI~3 VOL' 1/ ASSGN SYS015,X'282'(!j / / EXEC Figure 45. t} CD Creating an Unlabeled Multivolume File (Part 2 of 2) Detailed File Processing Capabilities 173 MASS STORAGE FILE LABELS User Labels The IBM Disk Operating System/Virtual Storage provides postive identification and protection of all files on mass storage devices by recording labels on each volume. These labels ensure that the correct volume is used for input, and that no current information is destroyed on output. The programmer can include additional labels to further define his file. The labels are referred to as user standard labels. They cannot be specified for indexed files. A user label is an SO-character label containing UHL (user header label) or UTL (user trailer label) in the first three character positions. The fourth position contains a number 1 through a which represents the relative position of the user label with a group of user labels. The contents of the remaining 76 positions is entirely up to the programmer. User header and trailer labels are written on the first track of the first extent of each volume allocated by the proqrammer for the file. User header labels are resequenced starting with one (URL1) at the beginning of each new volume. The mass storage labels always include one volume label for each volume and one or more file labels for each logical file on the volume. There may also be user header labels and user trailer labels. Volume Labels The volume label is an aO-byte data field preceded by a 4-byte key field. Both the key field and the first four bytes of the data field contain the label identifier VOL1. IOCS creates a standard volume label for every volume processed by the Disk Operating System/Virtual Storage. It is always the third record on cylinder 0, track O. The format and contents of a standard volume label can be found in the publication DOS/VS Disk Labels. LABEL PROCESSING CONSIDERATIONS Files on Mass Storage Device Opened as Input 1. Standard labels checked a. The volume serial numbers in the volume labels are compared to the file serial numbers in the EXTENT card. b. Fields 1 through 3 in Format 1 label are compared to the corresponding fields in the DLBL card. c. Each of the extent definitions in the Format 1 and Format 3 labels is checked against the limit fields supplied in the EXTENT card. Standard File Labels A standard file label identifies a particular logical file, gives its location(s) on the mass storage device, and contains information to prevent premature destruction of current files. A standard file label for a file located on a mass storage device is a 140-character label created (OPEN/CLOSE OUTPUT) in part by IOCS using the DLBL control statement. The fields contained within the label follow three standard formats. 1. Format 1 is used for all logical files. The contents of the fields of a Format 1 label is discussed in "Appendix C: Standard Mass Storage Device Labels. 1I Format 2 is required for indexed files. The contents of the fields of a Format 2 label can be found in the publication DOS/VS Disk Labels~ 3. 174 Format 3 is required if a logical file uses more than three extents of any volume. The contents of the fields of a Format 3 label can be found in the publication DOS/VS Disk Labels. 2. User labels checked a. If user header labels are indicated for directly or sequentially organized files, they are read as each volume of the file is opened. After reading each label, the OPEN routine branches to the programmer's label routine if the appropriate USE APTER STANDARD LABEL PROCEDURE declarative is specified in the source program. The LABEL RECORDS' clause with the data-name option must be specified in the Data Division. The programmer's label routine then performs any processing required. b. If user trailer labels are indicated on a sequential file, they are read after reaching the end of the last extent on each volume when the file is closed, provided end-of-file has been reached. Trailer labels are processed by the programmer's label routine if the appropriate USE AFTER STANDARD LABEL PROCEDURE declarative is specified in the source program. The LABEL RECORDS clause with the data-name option must be specified in the Data Division. Files on Mass Storage Devices Opened as Output 1. Standard labels created a. The volume serial numbers in the volume labels are compared to the file serial numbers in the EXTENT card. b. The extent definitions in all current labels on the volume are checked to determine whether any extend into those defined in the EXTENT card. If any overlap, the expiration date is checked against the current date in the Communication Region of the supervisor. If the expiration date has passed, the old labels are deleted. If not, the operator is notified of the condition. c. d. The new Format 1 label is written with information supplied in the DLBL card. If an indexed file is being processed, the DTFIS routine supplies information for the Format 2 label. The information in the EXTENT card is placed in the Format 1 labels and, if necessary, in the additional Format 3 labels. 2. User header labels created a. If user header labels are indicated by the presence of the appropriate USE AFTER STANDARD LABEL PROCEDURE declarative and the LABEL RECORDS clause with the data-name option, the programmer's label routine is entered to furnish the labels as each volume of the file is opened. This can be done for as many as eight user header labels per volume. As each label ~s presented, IOCS writes it out on the first track of the first extent of the volume. b. If user trailer labels are indicated by the presence of the appropriate USE AFTER STANDARD LABEL PROCEDURE declarative and the LABEL RECORDS clause with the data-name option, the programmer's label routine is entered to furnish the labels when the end of the last extent on each volume is reached. This can be done for as many as eight user trailer labels. The CLOSE statement must be issued to create trailer labels for the last volume of a sequential file or for a direct file. UNLABELED FILES When a mUit1volume tape I1ie is opened as INPUT and integer as specified in the ASSIGN clause is greater than 1, the compiler will generate the following message to the operator: C126D IS IT EOF? The operator must respond either with N if it is not the last reel, or with y if it is the last reel. If it is end-ot-file, control passes to the imperative-statement specified in the AT END phrase of the READ statement; if it is not end-of-file, processing of the next volume is initiated. If the integer specified in the ASSIGN clause is not greater than 1, control always passes at end-of-volume to the imperative-statement specified in the AT END phrase of the READ statement. Detailed File Processing Capabilities 175 PROCESSING ASCII TAPE FILES The IBM DOS/VS COBOL Compiler and Library support the American National Standard Code for Information" Interchange (ASCII) as well as EBCDIC. This support allows the user at object time to accept and create magnetic tapes in accordance with all of the following standards: • American National Standard Code for Information Interchange~ X3.4-1968. • American National Standard Magnetic Tape Labels for Information Interchange, X3.27-1969. • American National Standard Recorded Magnetic Tape for Information Interchange (800 CPI, NRZI), X3.22-1967. FILE HANDLING :n processing ASCII files, thE supported record formats are fixed, undefined, and variable. A variable-length record on an ASCII file is known as a D-iormat record. ASCII support does not extend to spanned records. Record formats are discussed in detail in the chapter "Record Formats." For an ASCII file that contains a buffer offset field, the following consjderations apply: • If the BLOCK CONTAINS clause with the RECORDS option is specified, or if the BLOCK CONTAINS clause is omitted, the compiler compensates for the buffer offset field. • If the BLOCK CONTAINS clause with the CHARACTERS option is specified, the programmer must include the buffer offset as part of the physical record. COBOL LANGUAGE CONSIDERATIONS The ASCII feature is supported by the following addition to IBM's implementation of American National Standard COBOL: The system-name specified in the ASSIGN clause is now coded as SYSnnn-UT-device-C[-buffer offset][-name] where Organization code C indicates that an ASCII-encoded tape file is to be processed. Buffer offset is a two-character field that serves to indicate the size of the block prefix. A block prefix, if present, precedes each physical record and is not accessible to the COBOL programmer. This entry may only be present for ASCII tape files and is only reguired if a non-zero block prefix exists. For output files, buffer offset may be specified as 00 for P, U, or D-mode records, or as 04 for D-mode records only. A buffer offset of 04 on output means that the block prefix will contain the length of each physical record. For input files, buffer offset may be in the range 00 through 99. Labels on ASCII files are processed as are the existing DOS/VS standard and user standard labels. Nonstandard label procedures, however, are not supported. Therefore, USE BEFORE STANDARD LABEL PROCEDUFEs are not permitted for ASCII files. ASCII files on unlabeled tapes are supported. These unlabeled tapes may contain data in any of the supported record formats. A complete discussion of tape file labels can be found in the ch~pter "Advanced Processing Capabilities." The ASCII option (organization code C in the ASSIGN clause) must not be speci=ied for a file on which checkpoints are to be written. Diagnostic messages associated with ASCII file handling are provided. At compile time, E-level messages are issued for files whose record descriptions contain data formats that are inconsistent with ASCII conversion. At object time, a message is issued if an invalid sign configuration is present during translation, and the job will be terminated. Processing ASCII Tape Files 177 OPERATIONAL CONSIDERATIONS It should be noted that ASCII support causes translation from ASCII to EBCDIC on input and from EBCDIC to ASCII on output. Translation occurs automatically and is transparent to the COBOL programmer. Since an ASCII file is assumed to contain only ASCII characters, standard character sUbstitution occurs when untranslatable configurations are present. The character X'lA' is substituted for invalid EBCDIC configurations during translation. An invalid ASCII configuration (high-order bit on) translates to the character X'3P'. form of a leading overpunch or separate character, a Program Product IBM DOS/VS Sort/Merge program must be used. If sort files reside on a 3330 or 3340 device, the Sort program that supports thesE devices is required. The Program Product IBM DOSjVS Tape and Disk Sort/Merge, Program Number 5746-SMl is designed specifically for use with a DOSjVS system. To obtain an ASCII collated sort, the system-name in the ASSIGN clause for the sort work files should contain a C in the organization field. The class field may be specified as either UT or DA. (Since ASCII support causes translation from ASCII to EBCDIC on input, sort work files are not restricted to tapes.) OBTAINING AN ASCII COLLATING SEQUENCE ON A SOR! Note that for an ASCII collated sort, the buffer offset field is not permitted. If an ASCII collated sort is desired or numeric sort keys contain a sign in the The ASCII collating sequence is listed in the publication IBM DOS Full American National Standard COBOL. 178 RECORD FORMATS FOR NON-VSAM FILES Logical records for files which are not VSAM files may be in one of four formats: fixed-length (format F), variable-length (format V) , undefined (format U), or spanned (format S). All of these formats are not supported for all access methods. F-mode files must contain records of equal lengths~ Files containing records of unequal lengths must be V-mode, S-mode, or U-mode. Files containing logical records that are longer than physical records must be S-mode. DEPENDING ON option, or if mUltiple record descriptions are all the same length. The record format is specified in the RECORDING MODE clause in the Data Division. If this clause is omitted, the compiler determines the record format from the record descriptions associated with the file. If the file is to be blocked, the BLOCK CONTAINS clause must be specified in the Data Division. In unblocked format P, the logical record constitutes the block. The BLOCK CONTAINS clause is unnecessary for unblocked records. The prime consideration in the selection of a record format is the nature of the file itself. The programmer knows the type of input his program will receive and the type of output it will produce. The selection of a record format is based on this knowledge as well as an understanding of the type of input/output devices on which the file is written and of the access method used to read or write the file. Coding considerations for non-fixed length records are discussed in the chapter "Table Handling Considerations." The number of logical records within a block (blocking factor) is normally constant for every block in the file. When fixed-length records are blocked~ the programmer specifies the BLOCK CONTAINS clause in the file description entry in the Data Division. F0rmat F records are shown in Figure 46. The optional control character, represented by C, is used for stacker selection and carriage control. When carriage control or stacker selection is desired, the WRITE &tatement with the ADVANCING or POSITIONING option is used to write records on the output file. In this case one character position must be included as the first character of the record. This position will be automatically filled in with the carriage control or stacker select character. The carriage control character never appears when the file is written on the printer or punched on the card punch. !.ogical Record FIXED-LENGTH (FORMAT F) RECORDS r--~-------------------------' I C Format F records are fixed-length records. The programmer specifies format F records by including RECORDING MODE IS F in the file description entry in the Data Division. If the clause is omitted and both of the following are true: • All records in the file are the same size • BLOCK CONTAINS [integer-l TO] integer-2 ••• does not specify integer-2 less than the length of the maximum level-Ol record the compiler determines the recording mode to be F. All records in the file are the same size if there is only one record description associated with the file and it contains no OCCURS clause with the I Data Blocked Records Logical Record < Logical Record Logical 'f,:ecord > --------Fixed Length Unblocked Record Logical Record L----________________________________ --J < --------Fixed Length-----------> igure 46. Fixed-Length (Format F) Records Record Formats for Non-VSA~ Files 179 UNDEFINED ASCII tape file. D-format records are processed in the same manner as V-format records on tape files. (FORMA~RECORDS Format U is provided to permit the processing of any blocks that do not conform to F or V formats. Format U records are shown in Figure 47. The optional control character C, as discussed under "Fixed-Length (Format F) Records," may be used in each logical record. The programmer specifies format U records by including RECORDING MODE IS U in the file description entry in the Data Division. U-mode records may be specified only for directly organized or standard sequential files. If the RECORDING MODE clause is omitted, and BLOCK CONTAINS [integer-l TO] integer-2 ••• does not specify integer-2 less than the maximum level-Ol record, the compiler determines the recording mode to be U if the file is directly organized and one of the following conditions exist: • The FD entry contains two or more level-Ol descriptions of different lengths. • A record description contains an OCCURS clause with the DEPENDING ON option. The programmer specifies format V records by including RECORDING MODE IS V in the file description entry in the Data Division. V-mode records may only be specified for standard sequential files. If the RECORDING MODE clause is omitted and BLOCK CONTAINS [integer-l TO] integer-2 ••• does not specify integer-2 less than the maximum level-01 record, the compiler determines the recording mode to be V if the file is standard sequential and one of the following conditions exists: • The FD entry contains two or more level 01 descriptions of different lengths. • A record description contains an OCCUPS clause with the DEPENDING ON option. • A RECOPD CONTAINS clause range of record lengths. specifi~s a V-mode records, unlike U-mode or P-mode records, are preceded by fields containing control information. These control fields are illustrated in Figures 48 and 49. The first four bytes of each block contain control information (CC): • A RECORD CONTAINS clause specifies a range of record lengths. Each block on the external storage media is treated as a logical record. There are no record-length or block-length fields. LL -- represents two bytes designating the length of the block (including the 'CC' field). BB -- Note: When a READ INTO statement is used for a U-mode file, the size of the longest record for that file is used in the MOVE statement. All other rules of the MOVE statement apply. repre~ents two bytes reserved for system use. The first four bytes of each logical record contain control information (cc): 11 -- represents two bytes designating the logical record length (including the 'cc' field). -, r- Logical Record C Data bb -- represents two bytes reserved for system use. Format U Record For unblocked V mode records (see Figure the data portion + CC + cc constitute the block. 4~) Logical f(ecord ----.J Figure 47. Undefined (Format U) Records 4 4 variable <--bytes-><--bytes--><------bytes-------> I LL VARIABLE-LENGTH RECORDS 18 a , ,~I 'CC' There are two types of variable-length record: D-format and V-format. AD-format record is a variable-length record on an I BB I 11 I bb I 'cc' L-__________________________________ Figure 48. Unblocked V-Mode Records 1st Logical Record ------... 2nd Logical Record --~/'.... LL BB ~1~==~I~~~I 11 DATA-1 bb I 11 ICC' (block con trol bytes) --, bb DATA-3 Blocked fCC' (record control bytes) V-~ode Records The control bytes are automatically provided when the file is written and are not communicated to the programmer when the file is read. Although they do not appear in the description of the logical record provided by the programmer, the compiler will allocate input and output buffers which are large enough to accomodate them. When variable-length records are written on unit record devices, control bytes are neither printed nor punched. They appear, however, on other external storage devices as well as in buffer areas of storage. V-mode records moved from an input buffer to a working-storage area will be moved without the control bytes. Note: When a READ INTO statement is used for a V-mode file, the size of the longest record for that file is used in the MOVE statement. All other rules of the MOVE statement apply. Example 1: Consider the following standard sequential file consisting of unblocked V-mode records: 01 I 11 ~ For blocked V-mode records (see Figure 49) the data portion of each record + the cc of each record + CC constitute the block. FD - __==~==~~__________~I~__~I____-LI__________~__~-L~_ _~_ _ _ _ _ _ ~ ~'--------.,./~--- igure 49. DATA-2 bb 3rd Logical Record VARIABLE-FILE-l RECORDING MODE IS V BLOCK CONTAINS 35 TO 80 CHARACTERS RECORD CONTAINS 27 TO 72 CHARACTERS DATA RECORD IS VARIABLE-RECORD-l LABEL RECORDS ARE STANDARD. VARIABLE-RECORD-l. 05 FIELD-A PIC 05 FIELD-B PIC 05 FIELD-C OCCURS DEPENDING r'\l\l VI.' PIC FIELD-B X(20). 99. 1 TO 10 TIMES 9( 5), The LABEL RECORDS clause is always required. The DATA RECORD(S) clause is never required. If the RECORDIdG MODE clause is omitted, the compiler determines the mode as V since the record associated with VARIABLE-FILE-l varies in length depending on the contents of FIELD-B. The RECORD CONTAINS clause is never required. The compiler determines record sizes frow the record description entries. Record length calculations are affected by the following: • When the BLOCK CONTAINS clause with the RECORDS option is used, the compiler adds four nytes to the logical record length and four more bytes to the block length. • When the BLOCK CONTAINS clause with the CHARACTERS option is used" the programwer must include each cc + CC in the length calculation (see Figure 49). In the definition of VARIABLE-FILE-l, the BLOCK CONTAINS clause specifies 8 more bytes than does the record contains clause. Four of these bytes are the logical record control bytes and the other four are the block control bytes. Assumming that FIELD-B contains the value 02 for the first record of a file and FIELD-B contains the value 03 for the second record of the file, the first two records will appear on an external storage device and in buffer areas of storage as shown in Figure 50. If the file described in Example 1 had a blocking factor of 2, the first two records would appear on an external storage medium as shown in Figure 51. Record Formats for Non-VSAM Files 181 t •. I 1st Block 2nd Block I ,.--.. ____________- - - - _ Ii i ' i i i ' I i i i i ' i' i i i II0040IBBI0036IbbIFIELD-AI02IFIELD-CIFIELD-CI0045IBBIO041IbbIFIELD-AI03IFIELD-CIFIELD-CIFIELD-CI I' I ' " " I ' " " I I , I I I I Note: Lengths appear in decimal notation for illustrative purposes. I ~ I Figure 50. Fields in Unblocked V-Mode Records 1st Record ------------~------------ 2nd Record ------------~------------- I r-----~~~----r i i i i I I i i i i I I 110081IBBI0036IbbIFIELD-AI02IFIELD-CIFIELD-C10041IbbIFIELD-AI03IFIELD-CIFIELD-CIFIELD-CI I L. - - L -_ _---' I I Note: Lengths appear in decimal notation for illustrative purposes. I Figure 51. Fields in Blocked V-Mode Records Example 2: If VARIABLE-FILE-2 is blocked, with space allocated for three records of maximum size per block, the following FD entry could be used when the file is created: FD 01 01 VARIABLE-FILE-2 RECORDINb MODE IS V BLOCK CONTAINS 3 RECORDS RECORD CONTAINS 20 TO 100 CHARACTERS DATA RECORDS ARE VARIABLE-RECORD-1, VARIABLE-RECORD-2 LABEL RECORDS ARE STANDARD. VARIABLE-RECORD-l. 05 FIElD-A PIC X (20) • 05 FIELD-B PIC X(80). VARIABLE-RECORD-2. 05 FIELD-X PIC X (20) • As mentioned previously, the RECORDING MODE, RECORD CONTAINS, and DATA RECORDS clauses are unnecessary. By specifying 182 that each block contains three records, the programmer allows the compiler to provide space for three records of maximum size plus additional space for the required control bytes. Hence, 316 character positions are reserve~ by the compiler for each output buffer. If this size is other than the maximum, the BLOCK CONTAINS clause with the CHARACTERS option should be specified. Assuming that the first six records written are five 100-character records followed by one 20-character record, the first two blocks of VARIABLE-FILE-2 will appear on the external storage device as shown in Figure 52. The buffer for the second block is truncated after the sixth WRITE statement is executed since there is not enough space left for a maximum size record. Hence, even if the seventh WRITE to VARIABLE-FILE-2 is a 20-character record, it will appear as the first record in the third block. This situation can be avoided by using the APPLY WRITE-ONLY clause when creating files of variable-length blocked records. 1st Block 1316IBBI10~lbbIDataI104IbbIDataI10~lbbIDatal - I , ~ i i i I l I Note: i i i , I , I i i I I , I Suppose VARIABLE-FILE-2 is being created with the following FD entry: VARIABLE-FILE-2 RECORDING MODE IS V BLOCK CONTAINS 316 CHARACTERS RECORD CONTAINS 20 TO 100 CHARACTERS DATA RECORDS ARE VARIABLE-RECORD-l, VARIABLE-RECORD-2 LABEL RECORDS ARE STANDARD. 01 VARIABLE-RECORD-l. 05 FIELD-A PIC X(20). 05 FIELD-B PIC X(80). 01 VARIABLE-RECORD-2. 05 FIELD-X PIC X (20) • I I I I I I I I I j I I I I I " i ; ; If an APPLY WRITE-ONLY clause is specified for a file and an OCCURS DEPENDING ON clause is specified within a record description of the file, the object of the OCCURS DEPENDING ON clause should not be defined within the record description for the file. When retrieving a file with S-mode records, only complete records are made available to the programmer. i308ibbi24ibbiDatall04ibbID~104ibb;Data ~ I --- , When creating files with S-mode records, if a record is larger than the remaining space in a block, a segment of the record is written to fill the block. The remainder of the record is stored in the next block or blocks, as required. Using the APPLY WRITE-ONLY clause will cause a buffer to be truncated only when the next record does not fit in the buffer. That is, if the next three WRITE statements to the file specify VARIABLE-RECORD-2, the block will be created containing six logical records, as shown below: I , A spanned record is a logical record that may be contained in one or more physical blocks. Format S records may be specified for direct files and for standard sequential files assigned to magnetic tape or to mass storage devices. 123 6 1bbl241bbiDatal1041bbiDatall041bbiDatai I " SPANNED (FORMAT S1 RECORDS The first three WRITE statements to the file create one 20-character record followed by two 100-character records. Without the APPLY WRITE-ONLY clause, the buffer is truncated after the third WRITE statement is executed, since the maximum size record no longer fits. The block is written as shown below: j I Note: When using the APPLY WRITE-ONLY clause, records must not be constructed in buffer areas. An intermediate work area must be used with a WRITE FROM statement. The APPLY WRITE-ONLY clause is used to make optimum use of buffer and external storage space when creating a standard sequential file with blocked V-mode records. j I First Two Blocks of VARIABLE-FILE-2 APPLY WRITE-ONLY Clause I ~ 1236lBBl104lbblDatai104lbblDatal2~lbblDatai i I Lengths appear in decimal notation for illustrative purposes. Figure 52. FD 2nd Block p Spanned records are preceded by fields containing control information. Figure 53 illustrates the control fields. BDF (Block Descriptor Field) : LL -- represents 2 bytes designating the length of the physical block (including the block descriptor field itself). BB -- represents 2 bytes reserved for system use. Record Formats for Non-VSAM Files 183 SDP (Segment Descriptor Pield) : 11 -- represents 2 bytes designating the length of the record segment (including the segment descriptor field itself). Figure 54 is an illustration of blocked spanned records of SFILE. SFILE is described in the Data Division with the following file description entry: FD SFILE RECORD CONTAINS 250 CHARACTERS BLOCK CONTAINS 100 CHARACTERS bb -- represents 2 bytes reserved for system use. Note: There is only one block descriptor field at the beginning of each physical block. There is, however, one segment descriptor field for each record segment within the block. Each segment of a record in a block, even if it is the entire record, is preceded by a segment descriptor field. The segment descriptor field also indicates whether the segment is the first, the last, or an intermediate segment. Each block includes a block descriptor field. These fields are not described in the Data Division; provision is automatically made for them. These fields are not available to the programmer. A spanned blocked file may be described as a file composed of physical blocks of fixed length established by the programmer. The logical records may be either fixed or variable in length and that size may be smaller, equal to, or larger than the physical block size. There are no required relationships between logical records and physical block sizes. A spanned unblocked file may be described as a file composed of physical blocks each containing one logical record or one segment of a logical record. The logical records may be either fixed or variable in length. When the physical block contains one logical record, the length of the block is determined by the logical record size. When a logical record has to be segmented, the system always writes the largest physical block possible. The system segments the logical record when the entire logical record cannot fit on the track. Figure 54 also illustrates the concept of record segments. Note that the third block contains the last 50 bytes of REC-l and the first 50 bytes of REC-2. Such portions of logical records are called record segments. It is therefore correct to say that the third block contains the last segment of REC-l and the first segm~nt of REC-2. The first block contains the first segment of REC-1 and the second block contains an intermediate segment of REC-l. S-MODE CAPABILITIES Formatting a file in the S-mode allows the programmer to make the most efficient use of external storage while organizing data files with logical record lengths most suited to his needs. 1. Physical record lengths can be designated in such a manner as to make the most efficient use of track capacities on mass storage devices. 2. The programmer is not required to adjust logical record lengths to maximum physical record lengths and their device-dependent variants when designing his data files. 3. The programmer has greater flexibility in transferring logical records across DASD types. Spanned record processing will support the 2400, 3410, 3420 tape series, the 2311, 2314, 2319, 3330, and 3340 disk storage devices, and the 2321 data cell drive. <--4 bytes---> <--4 bytes--> <----------------Variable bytes-------------------> BB LL I I BDF igure 53. 184 Data Record or Segment bb 11 I I I SDF Control Fields of an S-Mode Record <--------100 bytes-------> <--------100 bytes-------> REC-l G 1st Block Figure 54. REC-l <-50 bytes-> <-50 bytes-> G REC-l REC-2 3rd Block 2nd Block One Logical Record Spanning Physical Blocks SEQUENTIALLY ORGANIZED S-MODE FILES ON TAPE OR HASS STORAGE DEVICES When the spanned format is used for DTFMT or DTFSD files, the logical records may be either fixed or variable in length and are completely independent of physical record length. A logical record may span physical records. A physical record may contain one or more logical records and/or segments of logical records. When the spanned recording mode is being used, each logical record is processed in a work area, not in the buffer. Logical records are always aligned on a double-word boundary. Therefore, the programmer is not required to add inter-record slack bytes for alignment purposes. Except for the APPLY WRITE-ONLY clause, all the options for a variable file apply to a spanned file. Source Language Considerations Processing Seguentially Organized S-Mode Files The programmer specifies S-mode by describing the file with the following clauses in the file description (FD) entry of his COBOL program: Suppose a file has the following file description entry: • BLOCK CONTAINS integer-2 CHARACTERS FD SPAN-FILE BLOCK CONTAINS 100 CHARACTERS LABEL RECORDS ARE STANDARD DATA RECORD IS DATAREC. 01 DATAREC. 05 FIELD-A PIC X(100). 05 FIELD-B PIC X (50) • • RECORD CONTAINS [integer-l TO] integer-2 CHARACTERS • RECORDING MODE IS S The size of the physical record must be specified using the BLOCK CONTAINS clause with the CHARACTERS option. Any block size may be specified. Block size is independent of logical record size. The size of the logical record may be specified by the RECORD CONTAINS clause. If this clause is omitted, the compiler will determine the maximum record size from the record descriptions under the FD. Format S may be specified by the RECORDING MODE IS S clause. If this clause is omitted, the compiler will set the recording mode to S if the BLOCK CONTAINS integer-2 CHARACTERS clause was specified and either: 1. integer-2 is less than the largest fixed-length level-Ol FD entry 2. integer-2 is less than the maximum length of a variable level-Ol FD entry (i.e., an entry containing one or more OCCURS clauses with the DEPENDING ON option). Figure 55 illustrates the first four blocks of SPAN-FILE as they would appear on external storage devices (i.e., tape or mass storage) or in buffer areas of virtual storage. Note: 1. The RECORDING MODE clause is not specified. The compiler determines the recording mode to be S since the block size is less than the record size. 2. The length of each physical block is 100 bytes, as specified in the BLOCK CONTAINS clause. All required control fields, as well as data, must be contained within these 100 bytes. 3. No provision is made for the control fields within the level-Ol ent~y DATAREC. Record Formats for Non-VSAM Files 185 92 " II bytes ------------> <-bytes-><-bytes->< i i 4 4 58 bb DATAREC ( 1) bb ILL ,IBB III DATAREC (1) 4 4 i 4 92 bytes ------------> bb DATAREC (2) 4 28 4 i i i ILL IBB III , 60 , bb IDATAREC (2) 111 bb DATAREC (3) 4th Block 3rd Block Figure 55. • bb IDATAREC (2) I <-bytes-><-bytes-><--bytes---><-bytes-><---bytes----> , i ILL IBB III , III 2nd Block 1st Block <-bytes-><-bytes->< 30 i I i i i III IBB ILL , , i 4 <-bytes-><-bytes-><---bytes---><-bytes-><--bytes---> First Four Blocks of SPAN-FILE r----------------------------------------------~----------------------------------------------~ RECORDING MODE IS S RECORDING ~ODE IS V I I I I I I r---..,.----., ,, 150 150 "-'v-'~ Rl R2 G , 150 100 r------, G , 150 150 150 50 1 ....'-_~---"'-~_---L-::---~' R3 R4 Rl R2 G 100 100 150 R4 R5 ____ '-I--_-.l..-~--,. .'-'-v-"--~' . R3 I I INot~: The enclosed diagrams are for illustrative purposes only. Neither takes into ,account the space required for control fields. Figure 56. Advantage of S-Mode Records Over V-Mode Records The preceding discussion dealt with S-mode records which were larger than the physical blocks that contained them. It is also possible to have S-mode records which are equal to or smaller than the physical blocks that contain them. In such cases, the RECORDING ~ODE clause must specify S (if so desired) since the compiler cannot determine this by comparing block size and record size. One advantage of S-mode records over V-mode r~cords is illustrated by a file with the following characteristics: 1. RECORD CONTAINS 50 TO 150 CHARACTERS 2. BLOCK CONTAINS 350 CHARACTERS 3. The first fivE records written are 150, 150, 150, 100, and 150 characters in length. 186 For V-mode records, buffers are truncated if the next logical record is too large to be completely contained in the block (see Figure j6) • This re~ults in more physical blocks and more inter-record gaps on the external storage device. Note: For V-mode records, buffer trUncation occurs: 1. When the maximu. level-Ol record is too large. 2. If APPLY WRITE-ONLY or SAME RECORD AREA is specified and the actual logical record is too large. For S-mode records, all blocks are 350 bytes long and records that are too large to fit entirely into a block will be segmented. This results in more efficient use of external storage devices since the number of inter-record gaps are minimized (Figure 56) • DIRECTLY ORGANIZED S-MODE FILES With the exception of the last block, the actual physical block size will always fall between the limits of specified block size and four bytes less than the specified block size, depending on whether or not the residual space of an incomplete block in the buffer is sufficient to add a segment length field and at least one byte of data. That is, specified block size - 4 5 actual When S-mode is used for a directly organized file, only unblocked records are permitted. Logical records may be either fixed or variable in length. A logical record will span physical records if, and only if, it spans tracks. A physical record will contain only one logical record or a segment of a logical record, or segments of two logical records and/or whole logical records. Records may span tracks r cylinders: and extents, but not volumes. block size S specified block size. The last block may be short when an incomplete block remains in the buffer at CLOSE time. A second advantage of S-mode processing over that of V-mode is that the programmer is no longer limited to a record length that does not exceed the track capacity of the mass storage device selected. Records may span track, cylinders, and extents, but not volumes. DTFMT and DTFSD spanned records differ from other formats because of an allocation of an area of storage known as the "logical record area." If logical records span physical blocks, COBOL will use this logical record area to assemble complete logical records. If logical records do not span blocks (i.e., they are contained within a single physical block) the logical record area is not used. Regardless, it is complete logical records that are made available to the programmer. Both READ and WRITE statements should be thought of as manipulating complete logical records and not record segments. Source Language Considerations The programmer specifies S-mode by describing the file with the following clauses in the file description (FD) entry of his COBOL program: • BLOCK CONTAINS integer-2 CHARACTERS • RECORD CONTAINS [integer-1 TO] integer-2 CHARACTERS • RECORDING MODE IS S The size of a logical record may be specified by the RECORD CONTAINS clause. If this clause is omitted, the compiler will determine the maximum record size from the record descriptions under the YD. The spanned format may be specified by the RECORDING MODE IS S clause. If this clause is omitted, the compiler will set the recording mode to S if the BLOCK CONTAINS integer-2 CHARACTERS clause was Sequential File R1 R2 Direct File R3 ••• 1st track ••• R1 G • __ 2nd track.=. R3 R2 G R3 R3 r---------~ R3 R4 ••• 3rd track ••• ~ •. 4th track... R3 G L-________ I R4 ~ R4 L______ ~ J Figure 57. Direct and Sequential Spanned Files on a Mass Storage Device Record Formats for Non-VSAM Files 187 specified and integer-2 is less than the greatest logical record size. This is the only use of the BLOCK CONTAINS clause@ It is otherwise treated as comments. The physical block size is determined by either: 1. The logical record length, or 2. The track capacity of the device being used. If, for example, the track capacity of a mass storage device is 3625 characters, any record smaller than 3625 characters may be written as a single physical block. If a logical record is greater than 3625 characters, the record is segmented. The first segment may be contained in a physical block of up to 3625 bytes, and the remaining segments must be contained in succeeding blocks. In other words, a logical record will span physical blocks if, any only if, it spans tracks. one logical record or one record segment. Logical record R3 spans physical blocks only because it spans tracks. The file consists of seven physical blocks, occupies more than three tracks, and contains three inter-record gaps. Processing Directly organized S-Mode Files When processing directly organized files, there are two advantages spanned format has over the other record formats: 1. Figure 57 illustrates four variable-length records (R1, R2, R3, and R4) as they would appear in direct and sequential files on a mass storage device. In both cases, control fields have been omitted for illustrative purposes. For both files, assume: 1. BLOCK CONTAINS 3625 CHARACTERS (track capacity = 3625) 2. RECORD CONTAINS 500 TO 5000 CHARACTERS In the sequential file, each physical block is 3625 bytes in length and is completely filled with logical records. The file consists of three physical blocks, occupies three tracks, and contains no inter-record gaps. In the direct file, the physical blocks vary in length. Each block contains only 188 Logical record lengths may exceed the length restriction of the track capacity of the mass storage device. If, for example, the track capacity of a mass storage device is 2000 bytes, the length of each logical record for formats other than spanned is, by necessity, restricted to the track capacity. Note: Even when the spanned format is used, the COBOL restriction on the length of logical records (i.e., a maximum length of 32,767 characters) must be adhered to. 2. For formats other than spanned, only complete logical records can be written on any single track. This means that if a track has only 1000 unoccupied bytes and the programmer attempts to add a record of 1100 bytes to this track, an INVALID KEY condition will occur. When the spanned format is used, a 1000 byte segment will be written on the specified track, and the remainder will be written on the next track. The segmenting is transparent to the programmer. PART III PROGRAMMING ·~I TECHNIQUES----------------------------------------------~. USING THE SORT ~ FEATURE----------------------------------------------~. ~ USING THE REPORT WRITER FEATURE---------------------------------------.. TABLE HANDLING CONSIDERATIONS-----------------------------------------.. 189 ~ ~ PROGRA~~ING Note: When OPT is in effect, the generated code is more suitable for running under VS, as the addressing scheme is designed to reduce possible page faults. This chapter describes techniques and hints for better COBOL programming. CODING 'C',.....n .l:vn TECHNIQUES Further~ the procedure is divided into 4K blocks, each of which is assigned a PBL. Since these blocks corres~ond to two pages each, the user may get some idea of the inter-page relationships in his program (although the first is not page aligned). The statement range for each PBL is given on the compiler output listing. This should help the user rearrange his program if he so desires. T"\I"'\C' rr.TC' uv...." v...., These suggestions will aid DOS/VS efficiency: • If a short subprogram is referenced only once or twice (and is not an exception condition routine), then its code should be incorporated in the calling program, if convenient. • Subprograms and frequently used subroutines should be loaded near the programs which use them. This can be done via linkage editor control cards. • The REDEFINES clause should be used for its alternate grouping and alternate description capabilities rather than for merely saving space. Although it will save virtual space, it can lead to coding errors if not used carefully. • Segmentation in many cases is no longer necessary or desirable. GENERAL CONSIDERATIONS • Data items of constant value should be grouped together. Data items whose values vary during execution should also be grouped together and should be separate from those of constant value, if feasible. COpy • FDs for files that will be opened at the same time should be grouped together. The COpy function should be used by an installation so that if a record format, for example, changes, each program does not need to be modified itself. Rather, the COpy library is updated and each program then recompiled. • The most frequently referenced data items should be placed in the beginning of the working Storage section. • The COBOL Procedure Division should be organized generally as follows: - All frequently used paragraphs or sections should be located near the routines that use them. - All infrequently used paragraphs or sections should be grouped together and apart from frequently used routines. The COUNT option can be used as an aid in this process. Use of this function can lead to standardization of naming conventions and ease of maintenance. SYNTAX CHECKING The first several compilations of a program should use the CSYNTAX or SYH'I'AX feature to save compilation time. • Avoid initializing data areas until just before they are needed. Formattinq the Source Program Listing • Reference data in the order in which it is stored. The lister feature increases significantly the usability of the source program listing, not only by producing cross-reference information, but by • Use the OPTIMIZE feature if possible. PrograRrring Techniques 191 formatting the listing to aid logic tracing. There are four statements that can be coded in any or all of the four divisions of a source program: SKIP1, These statements SKIP2, SKIP3, and EJECT. provide the programmer with the ability to control the spacing of a source listing and thereby improve its readability. These statements should not be used when the lister feature is used. ENVIRONMENT DIVISION RESERVE Clause When using an additional buffer to process standard sequential or indexed 192 files, care must be taken to ensure that the buffer is filled before the execution of each WRITE or REWRITE statement. APPLY WRITE-ONLY Clause To make optimum use of buffer and external storage space allocated when creating a standard sequential file with blocked V-mode records, the programmer should use the APPLY WRITE-ONLY clause for the file. Using this clause causes a buffer to be truncated only when the next record does not fit in the buffer. (If APPLY WRITE-ONLY is not specified, the buffer is truncated when the maximum size record will not fit in the space remaining in the buffer.) DATA DIVISION STORAGE CONSIDERATIONS The amount of storage used for all FD entries, the WORKING STORAGE SECTION, and REPORT SECTION must not exceed I Mb, since the compiler can only handle a maximum of 255 for BL-CELLS. One BL-CELL is assigned for each file or for 4096, whichever comes first. "corresponding" names with the prefixed unique names. This technique eliminates excessive qualifying. For example: 01 05 OVERALL CONSIDERATIONS FD Entries File Description (FD) entries for the most active files should appear first, since the COBOL compiler assigns registers to files until it runs out of registers, and then reuses the last registers for all subsequent files. This does not apply when OPT is in effect, since in that case the compiler will determine the frequency of usage and assign registers accordingly. Prefixes Assign a prefix to each level-01 item in a program, and use this prefix on every subordinate item (except FILLER) to associate a file with its records and work areas. For example, MASTER is the prefix used here: FILE SECTION. FD MASTER-INPUT-FILE 01 MASTER-INPUT-RECORD. MST-WORK-AREA. 05 SAME-NAMES. <***) 10 LAST-NAME PIC ••• 10 FIRST-NAME PIC ••• 10 PAYROLL PIC ••• 01 DIFF-NAMES REDEFINES SAME-NAMES. 10 MST~LAST-NAME PIC=:: 10 MS~-FIRST-NAME PIC ••• 10 MST-PAYROLL PIC ••• RPT-WORK-AREA. 05 SAME-NAMES. <***) 10 PAYROL~ PIC ••• 10 FILLER PIC ••• 10 FIRST-NAME PIC ••• 10 FILLER PIC ••• 10 LAST-NAME PIC ••• PROCEDURE DIVISION. IF MST-PAYROLL IS EQUAL TO HDQ-PAYROLL AND MS~'- LAST- NAME IS NOT EQUAL TO PRRV-LAST-NAME MOVE CORRESPONDING MST-WORK-AREA TO RPT-WORK-AREA. Note: Fields marked *** above must have exactly the same names for their subordinate fields to be considered "corresponding." The same names must not be the redefininq ones or they will not be considered to correspond. Level Numbers WORKING-STORAGE SECTION. 01 MASTER-WORK-AREA. 05 MASTER-PAYROLL PICTURE 9(3). 05 MASTER-SSNO PICTURE 9(9). If files or work areas have the same fields, use the prefix to distinguish between them. For example, if three files all have a date field, instead of DATE, OAT, and DA-TE, use MASTER-DATE, DETAIL-DATE, and REPORT-DATE. Usi~g a unique prefix for each level-01 item and all subordinate fields makes it easier for a programmer unfamiliar with the program to find fields in the program listing, and to know which fields are logically part of the same record or area. When using the MOVE statement with the CORRESPONDING option and referring to individual fields, redefine or rename The programmer should use widely incremented level numbers such as 01, 05, 10, 15, etc., instead of 01, 02, 03, 04~ etc., In order to allow space for future insertions of group levels. For readability, indent level numbers. (The lister feature does this automatically, even if the original source program does not follow such indenting practices.) Note that when using the SYMDMP option, level numbers appear "normalized" in the symbolic dump produced. For example, a group of data items described as: 01 RECORDA. 05 FIELD-A. 10 FIELD-A1 PIC X. 10 FIELD-A2 PIC X. programming Techniques 193 will appear as follows in SYMDMP output: 01 02 03 03 2. Areas which do not contain VALUE clauses should be separated from areas that do contain VALUE clauses. VALUE clauses (except for level-S8 items) are invalid in the Linkage section. 3. When the Working-Storage Section consists of one level-Ol item without any VALUE clauses, the COPY statement can easily be used to include the item as the description of a Linkage Section in a separately compiled module. 4. See the chapter "Using the Segmentation Feature" for information on how to modularize the Procedure Division of a COBOL program; VS coding considerations should also be taken into account. RECORDA ••• FIELD-A ••• FIELD-Al ••• FIELD-A2 .... Use level number 88 for codes. Thus, if the codes must be changed, the Procedure Division coding for tests need not be changed. FILE SECTION RECORD CONTAINS Clause The programmer should use the RECORD CONTAINS clause with the integer CHARACTERS option in order to save himself, as well as any future programmer, the task of counting the data record description positions. In addition, the compiler can then diagnose errors if the data record description conflicts with the RECORD CONTAINS clause. BLOCK CONTAINS Clause If a block prefix exists on an ASCII file and the BLOCK CONTAINS clause is used in the COBOL program, the length of the block prefix must be included in the BLOCK CONTAINS clause .. WORKING-STORAGE SECTION Separate Modules In a large program, the programmer may wish to plan ahead for breaking the programs into separately compiled modules, as follows: 1. 194 When using separate modules, an attempt should be made to combine entries 'of each Working-Storage Section into a single level-Ol record (or a single level-Ol record for each 32K bytes). Logical record areas can be indicated by using level-02, -03, etc., entries. A CALL statement with the USING option is more efficient when a single item is passed than when many level-Ol and/or -77 items are passed. when this method is employed, mistakes are more easily avoided. Locating the Working-Storage section in Dumps If the SYMDMP option is not used for program debugging, a method of locating the Working-Storage Section of a program in object-time dumps is to include the two following statements as the first and last Working-Storage statements, respectively, in the program. 77 FILLER PICTURE X(44), VALUE "PROGRAM XXXXXXXX WORKING-S~ORAGE BEGINS HERE". 01 FILLER PICTURE X(42), VALUE "PROGRAM XXXXXXXX WORKING-STORAGE ENDS HERE". These two nonnumeric literals will appear in all dumps of the program, delimiting the Working-Storage Section. The program-name specified in the PROGRAM-ID clause should replace the XXXXXXXX in the literal. The location and length of Working-Storage is given in the compiler output when SYM, LISTX, or CLIST is in effect. REDEFINES Clause REUSING DATA AREAS: Virtual storage can be used more efficiently by writing different data descriptions for the same data area. For example, the coding that follows shows how the same area can be used as a work area for the records of several input files that are not processed concurrently. Caution should be exercised when using this procedure, as it can lead to programming errors. WORKING-STORAGE SECTION. 01 WORK-AREA-FILE1. (largest record description for FILE1) 01 WORK-AREA-FILE2 REDEFINES WORK-AREA-FILE1. (largest record description for FILE2) ALTERNATE GROUPINGS AND DESCRIPTIONS: Program data can often be described more efficiently by providing alternate groupings or data descriptions for the same data. For example, a program references both a field and its subfields, each of which is more efficiently described with a different usage. This can be done by using the REDEFINES clause as follows: 01 05 05 05 PAYROLL-RECORD. EKPLOYEE-RECORD PICTURE X(28}. EKPLOYEE-FIELD REDEFINES EKPLOYEE-RECORD. 10 NAKE PICTURE X(24). 10 NUMBERX PICTURE S9(5} COMP. DATE-RECORD PICTURE X (10) • The following illustrates how a table (TABLEA) can be initialized by having different data descriptions for the same data: 05 VALUE-A. 10 Al PICTURE S9(9) COMPUTATIONAL VALUE IS ZEROES. 10 A2 PICTURE S9(9) COMPUTATIONAL VALUE IS 1. 10 05 Al0a PICTURE S9(9} COMPUTATIONAL VALUE IS 99. TABLEA REDEFINES VALUE-A PICTURE S9(9) COMPUTATIONAL OCCURS 100 TIMES. Note: caution should be exercised when redefining a subscript. If the value of the redefining data item is changed in the Procedure Division, a new calculation for the subscript is performed only if a new paragraph is entered. Programming Techniques 195 PICTURE Clause 1. DECIMAL-POINT ALIGNMENT: Procedure Division operations are most efficient when the decimal positions of the data items involved are aligned. If they are not, the compiler generates instructions to align the decimal positions before any operations involving the data items can be executed. I This is referred to as scaling. A plus or minus sign. If S is specified in the PICTURE clause, a plus or minus sign is inserted when either of the following conditions prevail: a. The item is in the Working-Storage Section and a VALUE clause has been specified. b. A value for the item is assigned as a result of an arithmetic operation during execution of the program. Assume, for example, that a program contains the following instructions: WORKING-STORAGE SECTION. A PICTURE S999V99. B PICTURE S99V9. 77 71 If an external decimal item is punched, printed, or displayed, an overpunch will appear in the low-order digit. In EBCDIC, the configuration for low-order zeros normally is a nonprintable character. Low-order digits of positive values will be represented by one of the letters A through I (digits 1 through 9) ; low-order digits of negative values will be represented by one of the letters J through R (digits 1 through PROCEDURE DIVISION. ADD A TO B. Time and internal storage space are saved by defining Bas: 77 B PICTURE S99V99. 9) • 2. If it is inefficient to define B differently, a one-time conversion can be done, as explained in "Data Format Conversion" in this chapter~ FIELDS OF UNEQUAL LENGTH: When a data item is moved to another data item of a different length, the following should be considered: • If the items are external decimal items, the compiler generates instructions to insert zeros in the high-order positions of the receiving field, when it is the larger. • If the items are nonnumeric, the compiler may generate instructions to insert spaces in the low-order positions of the receiving field (or the high-order positions if the JUSTIFIED RIGHT clause is specified). This generation of extra instructions can be avoided if the sending field is described with a length egual to or greater than the receiving field. SIGN USAGE: The presence or absence of a plus or minus sign in the description of an arithmetic field often can affect the efficiency of a program. The following paragraphs discuss some of the considerations. Decimal Items: The sign position in an internal or external decimal item can contain: 196 A hexadecimal F. If S is not specified in the PICTURE clause, an F is inserted in the sign position when either of the following conditions prevail: a. The item is in the Working-Storage Section and a VALUE clause has been specified b. A value for the item is developed during the execution of the program. An F is treated as positive, but is not an overpunch. 3. An invalid configuration. If an internal or external decimal item contains an invalid configuration in the sign position, and if the item is involved in a Procedure Division operation, the program will be abnormally terminated. Note: If the SIGN clause is used and it specifies that the sign is LEADING, more object code will be generated when that data item is used with a verb. The additional code is needed to move the sign character to the TRAILING position before performing the operation~ Unsigned items (items for which no S has been specified) are treated as absolute values. Whenever a value (signed or unsigned) is stored in or moved in an ~ ~ elementary move to an unsigned item, a hexadecimal F is stored in the sign position of the unsigned item. For example, if an arithmetic operation involves signed operands and an unsigned result field, compiler-generated code will insert an F in the sign position of the result field when the result is stored. For internal and external decimal items used as input, it is the programmer's responsibility to ensure that the input data is valid. The compiler does not generate a test to ensure that the configuration in the sign position is valid. When a group item is being moved, the data is moved without regard to the level structure of the group items involved. The possibility exists that the configuration in the sign position of a subordinate numeric item may be destroyed. Therefore, caution should be exercised in moving group items with subordinate numeric fields or with other group operations such as READ or ACCEPT. USAGE Clause DATA FORMAT CONVERSION: Operations involving mixed, elementary numeric data formats require conversion to a common format. This usually means that additional storage is used and execution time is increased. The code generated must often move data to an internal work area, perform any necessary conversion, and then execute the indicated operation. Often, too, the result may have to be converted in the same way. Table 31 indicates when data conversion is necessary. If it is impractical to use the same data formats throughout a program, and if two data items of different formats are frequently used together, a one-time conversion can be effected. For example, if A is defined as a COMPUTATIONAL item and B as a COMPUTATIONAL-3 item, A can be moved to a work area that has been defined as COMPUTATIONAL-3. This move cau~es the data in A to be converted to COMPUTATIONAL-3. Whenever A and B are used in a Procedure Division operation, reference can be made to the work area rather than to A. When this technique is used, the conversion is performed only once, instead of each time an operation is performed. Programming Techniques 197 Table 31. ,, , IUsage , Data Format Conversion (Part 1 of 2) ,, ,Bytes ,Required I ,DISPLAY 11 per digit I (external I (except for I decimal) I V) converted IBoundary 1 I for Typical ,Alignmentl ,Arithmetic Usage Operations 'Required I I 1 Yes I No IInput from , Icards, output I Ito cards, I I listings I I I I I I I I , , , I I I , , I I I , I IDISPLAY 11 per I (external I character I floating I (except for I point) f V) I I I I ICOMP-3 ,1 per 2 I (internal digits plus I decimal) 1 byte for , lOW-order I digit and I sign No I IWork areas , f I , COMP (binary) 12 if 1$N$4 I Halfword I f 4 if 5$NS9 , Fullword 18 if 10SNS18 Fullword ,where N is Ithe number of 19's in the Ipicture I I 1 I I I I Subscripting Arithmetic fields I I I 1 I Yes 1Sometimes Iwhen a small COllP-3 item is used with a small COftP item Converted to COftP-2 format via COBOL library subroutine. Requires less space than DISPLAY. convenient form for decimal alignment. Can be used in arithmetic computations without conversion. Fields over 15 digits require a subroutine when used in computations. Sometimes for both mixed and unmixed usages Rounding and testing for the ON SIZE ERROR condition are cumbersome if calculated result is greater than 9(9). I Extra instructions are generated for computations if the SYNCHRONIZED clause is not specified. ,, Fields of over nine digits require additional handling. , 1 I 198 IInput to a Ireport item (fields I 1 I IInput from Icards, output Ito cards, Ilistings I I Arithmetic , lIay be used for numeric fields up to 18 digits long. Fields over 15 digits require extra instructions if used in computations. I I I I I , No Special Characteristics Table 31. Data Format Conversion (Part 2 of 2) I Converted IBountary I I for Bytes IAlignmentl Typical IArithmetic Required IRequired I Usage I Operations I I I No Fullword Fractional I 4 (shortICOMP-1 precision) exponentiation I I (internal I floating I I point) I I I I I I I I I I I No IDouble- I Fractional I ICOMP-2 18 (longI exponentiation I precision) Iword I (internal I Iwhen addition-I I floating I I lal precision I I point) I I lis required I I I I I I I IUsage , The following seven cases show how data conversions are handled on mixed elementary items for names, data comparisions, and arithmetic operations. Moves without the CORRESPONDING option to and from group items, as well as comparisons involving group items, are done without conversion. Special Characteristics Tends to produce less accurate results if more than 17 significant digits are required and if the exponent is large. Extra instructions are generated for computations if the SYNCHRONIZED clause is not specified. Requires floating-point feature. Same as COMP-1. COMPUTATIONAL-3 to COMPUTATIONAL: To Move Data: Moves COMPUTATIONAL-3 data to a work area and then converts COMPUTATIONAL-3 data to COMPUTATIONAL data. To Compare Data: Converts COMPUTATIONAL data to COMPUTATIONAL-3 or vice versa, depending on the size of the field. Numeric DISPLAY to COMPUTATIONAL-3: To Move Data: Converts DISPLAY data to COMPUTATIONAL-3 data. To Compare Data: Converts DISPLAY data to COMPUTATIONAL-3 data. To Perform Arithmetic Operations: Converts COMPUTATIONAL data to COMPUTATIONAL-3 or vice versa, depending on the size of the field. To Perform Arithmetic Operations: Converts DISPLAY data to COMPUTATIONAL-3 data. COMPUTATIONAL to COMPUTATIONAL-3: Numeric DISPLAY to COMPUTATIONAL: To Move Data: Converts DISPLAY data to COMPUTATIONAL-3 data and then to COMPUTATIONAL data. To Compare Data: Converts DISPLAY to COMPUTATIONAL or converts both DISPLAY and COMPUTATIONAL data to COMPUTATIONAL-3 data. To Perform Arithmetic Operations: Converts DISPLAY data to COMPUTATIONAL-3 or COMPUTATIONAL data. To Move Data: Converts COMPUTATIONAL data to COMPUTATIONAL-3 data in a work area, and then moves the work area. To Compare Data: Converts COMPUTATIONAL to COMPUTATIONAL-3 data or vice versa, depending on the size of the field. To Perform Arithmetic Operations: Converts COMPUTATIONAL to COMPUTATIONAL-3 data or vice versa, depending on the size of the field. Programming Techniques 199 COMPUTATIONAL to Numeric DISPLAY: To Move Data: Converts CO~PUTATIONAL data to COMPUTATIONAL-3 data antl then to DISPLAY data. To Compare Data: Converts DISPLAY to COMPUTATIONAL or both COMPUTATIONAL and DISPLAY data to COMPUTATIONAL-3 data, depending on the size of the field. To Perform Arithmetic Operations: Depending on the size of the field, converts DISPLAY data to COMPUTATIONAL data, or both DISPLAY and COMPUTATIONAL data to COMPUTATIONAL-3 data in which case the result is generated in a COMPUTATIONAL-3 work area and then converted and moved to the DISPLAY result field. COMPUTATIONAL-3 to Numeric DISPLAY: To Move Data: Converts COMPUTATIONAL-3 data to DISPLAY data. To Compare Data: Converts DISPLAY data to COMPUTATIONAL-3 data. The result is generated in a COMPUTATIONAL-3 work area and is then converted and moved to the DISPLAY result field. Numeric DISPLAY to Numeric DISPLAY: To Perform Arithmetic Operations: Converts all DISPLAY data to COMPUTATIONAL-3 data. The result is generated in a COMPUTATIONAL-3 work area and is then converted to DISPLAY and moved to the DISPLAY result field. Internal Floating-point to Any Other: When an item described as COMPUTATIONAL-lor COMPUTATIONAL-2 (internal floating-point) is used in an operation with another data format, the item in the other data format is always converted to internal floatingpoint. If necessary, the internal floating-point result is then converted to .the format of the other data item. SYNCHRONIZED Clause As illustrated in Table 31, COMPUTATIONAL, COMPUTATIONAL-1 and COMPUTATIONAL-2 items have specific boundary alignment requirements. To ensure correct alignment, either the programmer or the compiler may have to insert slack bytes or the compiler must generate extra instructions to move the item to a correctly aligned work area when reference is made to the item. 200 The SYNCHRONIZED clause may be used at the elementary level to specify the automatic alignment of elementary items on their proper boundaries, or at the 01 level to synchronize all elementary items within the group. For COMPUTATIONAL items, if the PICTURE is in the range of S9 through S9(4j, the item is aligned on a halfword boundary. If the PICTURE is in the range of S9(5) through S9(18), the item is aligned on a fullword boundary. For COMPUTATIONAL-1 items, the item is aligned on a fullword boundary. For COMPUTATIONAL-2 items, the item is aligned on a doubleword boundary. The SYNCHRONIZED clause and slack bytes are fully discussed in the publication IBM System/360 Disk Operating System: Full American National Standard COBOL. Special Considerations for DISPLAY and COMPUTATIONAL Fields NUMERIC DISPLAY FIELDS: Zeros are not inserted into numeric DISPLAY fields by the instruction set. When numeric DISPLAY data is moved, the compiler generates instructions that insert any necessary zeros into the DISPLAY fields. When numeric DISPLAY data is compared, and one field is smaller than the other, the compiler generates instructions to move the smaller item to a work area where zeros are inserted. COMPUTATIONAL FIELDS: COMPUTATIONAL fields can be aligned on either a half word or fullword boundary. If an operation involves COMPUTATIONAL fields of different lengths, the halfword field is automatically expanded to a fullword field. Therefore, mixed halfword and fullword fields require no additional operations. COMPUTATIONAL-1 AND COMPUTATIONAL-2 FIELDS: If an arithmetic operation involves a mixture of short-precision and long-precision fields, the compiler generates instructions to expand the short-precision field to a long-precision field before the operation is executed. COMPUTATIONAL-3 FIELDS: The compiler does not have to generate instructions to insert high-order zeros for ADD and SUBTRACT statements that involve COMPUTATIONAL-3 data. The zeros are inserted by the instruction set. Data Formats in the Computer The following examples illustrate how the various COBOL data formats appear in the computer in EBCDIC (Extended Binary-Coded-Decimal Interchange Code) format. More detailed information about these data formats appear in the publication IBM System/370 Principles of operation. Note that a leading zero is inserted in the above example. COMPUTATrO~Bin~: Numeric DISPLAY (External Decimal): Suppose the value of an item is -1234, and its PICTURE and USAGE clauses are: Suppose the value of an item is 1234, and its PICTURE and USAGE clauses are: PICTURE S9999 COMPUTATIONAL. PICTURE 9999 DISPLAY. The item appears internally in the following form: or 0000 PICTURE S9999 DISPLAY. F2 F3 I F4 , Fl F2 F3 I D4 I I I 0010 Sign Position , Byte 1101 1 The item appears in the computer in the following forms, respectively: Fl 0100 A a in the sign position indicates that the number is positive. Negative numbers are represented in two's complement form; thus, the sign position of a negative number will always contain a 1. Byte Hexadecimal F is treated arithmetically as positive; hexadecimal D represents a minus sign. For example -1234 would appear as follows: 1111 COMPUTATIONAL-3 (Internal Decimal) : Suppose the value of an item is +1234, and its PICTURE and USAGE clauses are: 1011 0010 1110 .1 S~gn Position PICTURE 9999 COMPUTATIONAL-3. or PICTURE S9999 COftPUTATIONAL-3. The item appears internally in the following forms, respectively: 01 23 I 4F I I , Binary Item Manipulation: A binary item is allocated storage ranging from one halfword to two fullwords, depending on the number of 9 1 s in its PICTURE. Table 32 is an illustration of how the compiler allocates this storage. Note that it is possible for a value larger than that implied by the PICTURE clause to be stored in the item. For example, PICTURE S9(4} implies a maximum value of 9,999, although it could actually hold the number 32,767. Byte 01 23 I 4C I I I Byte Hexadecimal F is treated arithmetically as positive; hexadecimal C represents a plus sign. Note: Since the low-order byte of an internal decimal number always contains a sign field, an item with an odd number of digits can be stored more efficiently than an item with an even number of digits. Because most binary items are manipulated according to their allotted storage capacity, the programmer can ignore this situation. For the following reasons, however, he must be careful of his data: 1. When the ON SIZE ERROR option is used, the size test is made on the basis of the maximum value allowed by the picture of the result field. If a size error condition exists, the value of the result field is not altered and control is given to the imperativestatements specified by the error option. Programming Techniques 201 Table 32. Relationship of PICTURE to Storage Allocation I PICTURE i 159 through S9(4) I 159(5) through S9(9) I IS9(10) through S9(18) Maximum Working Value Assigned Storage 32,767 One halfword 2,147,483,647 One fullword 9,223,372,036,854,775,807 Two fullwords Note: If TRUNC option is used and data is moved to decimal receiving field, then maximum working value for S9(10) through S9(18) PICTURE is 2,147,483,647,999,999,999. 2. Bits 1 through 7 are the exponent (characteristic) of the number. When a binary item is displayed or exhibited, the value used is a function of the number of 9 1 s specified in the PICTURE clause. 3. Bits 8 through 31 are the fraction (mantissa) of the number. When the actual value of a positive number is significantly larger than its picture value, a value of 1 could appear in the sign position of the item, causing the item to be treated as a negative number in subsequent operations. Figure 58 illustrates three binary manipulations. In each case, the result field is an item described as PICTURE S9 COMPUTATIONAL. One halfword of storage has been allocated, and no ON SIZE ERROR option is involved. Note that if the ON SIZE ERROR option had been specified, it would have been executed for cases Band C. COMPUTATIONAL-lor COMPUTATIONAL-2 (Floating-point): Suppose the value of an item is +1234 and that its USAGE is COMPUTATIONAL-1, the item appears internally in the following form: 101100 I 001110100 1101 0010 0000 0000 00001 I S 1 7 8 31 S is the sign position of the number. o in the sign position indicates that the sign is plus. 1 in the sign position indicates that the sign is minus. Case Hexadecimal Result of Binary Calculation PROCEDURE DIVISION The Procedure Division of a program can often be made more efficient or easier to debug by using some of the techniques described below. MODULARIZING THE PROCEDURE DIVISION Modularization involves organizing the Procedure Division into at least three functional levels: a main-line routine, processing subroutines, and input/output subroutines. When the Procedure Division is modularized, programs are easier to maintain and document. In addition, modularization makes it simple to break down a program using the segmentation feature, resulting in a more efficient segmented program. Virtual storage implications should be taken into Actual Decimal Value in Halfword of Storage DISPLAY or EXHIBIT Value A 0008 8 +8 8 B OOOA 10 +10 0 C C350 50000 -15536 6 Figure 58. 202 Decimal Equivalent This form of data is referred to as floating point. The example illustrates short-precision floating-point data (COMPUTATIONAL-1). In long-precision (COMPUTATIONAL-2), the fraction length is 56 bits. (For a detailed explanation of floating-point representation, see the publication IBM System/370 Principles of Operation.) Treatment of Varying Values in a Data Item of PICTURE S9 ~ consideration when rearranging the Procedure Division. The COUNT option is useful in determining a rearrangement scheme. OVERALL CONSIDERATIONS OPTIMIZE Option Main-Line Routine The main-line routine should be short and simple, and should contain all the major logical decisions of the program. This routine controls the order in which second-level subroutines are executed. All second-level subroutines should be invoked from the main-line routine by PERFORM statements. If the OPTIMIZE option is in effect, the number of procedure blocks in a program cannot exceed 255. A procedure block is equivalent to approximately 4096 bytes of Procedure Division code. If the COUNT option is in effect, the number of verb blocks in a program cannot exceed 32,767. A verb block consists of a set of verbs in which any verb (excluding ABEND) in the block is executed if and only if all verbs in the block are executed. The average program Procedure Division contains approximately three verbs per verb block. Processing Subroutines Processing subroutines should be broken down into as many functional levels as necessary, depending on the complexity of the program. These must be completely closed subroutines, with one entry point and one exit point. The entry point should be the first statement of the subroutine. The exit point should be the EXIT statement. Processing subroutines can PERFORM only lower level subroutines; return to the higher level subroutineJ -> A-I The hyphen is converted to zero if it appears as the second through eighth character. The RERUN' clause is fully described in the publication IBM DOS Full American National Standard COBOL. USING SORT IN A MULTIPHASE ENVIRONMENT When the Sort program is invoked in a multiphase environment, the following should be noted: 1. It is the programmer's responsibility to ensure that the COBOL program containing the SORT statement is the highest phase in storage. 2. If two programs are compiled, link edited, and executed together, only one program may use the Sort feature. If both programs require Sort, the programs can be compiled separately and then the decks must be organized so that the dummy phase cards for Sort are both together at the end of the deck before they are link edited and executed. 3. If Debug and Sort are used together, the Debug modules must be included in the root phase. CHECKPOINT/RESTART DURING A SORT The Checkpoint/Restart Feature is available to the programmer using the COBOL SORT statement. The programmer uses the RERUN clause to specify that checkpoints should be taken during program execution. The control statement requirements for taking a checkpoint are discussed in the section entitled "Program Checkout." Checkpoint/Restart is not available during a merge operation. The system-name specified in the RERUN clause as the sort checkpoint device must not be the same as any system-name used in the source language ASSIGN clause, but follows the same rules of formation. 210 USING THE REPORT WRITER FEATURE REPORT Clause in a File Description (FD) Entry A given report-name may appear in a maximum of two file description entries. The file description entries need not have the same characteristics, but both must be standard sequential. If the same report-name is specified in two file description entries, the report will be written on both files. For example: ENVIRONMENT DIVISION. SELECT FILE-1 ASSIGN SYS005-UR-1403-S. SELECT FILE-2 ASSIGN SYS001-UT-2400-S. DATA DIVISION. FD FILE-l RECORDING MODE F RECORD CONTAINS 121 CHARACTERS REPORT IS REPORT-A. FD FILE-2 RECORDING MODE V RECORD CONTAINS 101 CHARACTERS REPORT IS REPORT-A. For each GENERATE statement, the records for REPORT-A will be written on FILE-l and FILE-2, respectively. The records on FILE-2 will not contain columns 102 through 121 of the corresponding records on FILE-l. Method 1: 01 TYPE CONTROL FOOTING YEAR. 02 SUM COST. 01 TYPE CONTROL FOOTING MONTH. 02 SUM COST. 01 TYPE CONTROL FOOTING WEEK. 02 SUpi COST. 01 TYPE CONTROL FOOTING ADAY. 02 SUM COST. Method 2: 01 TYPE CONTROL FOOTING 02 SUM A. 01 TYPE CONTROL FOOTING 02 A SUM B. 01 TYPE CONTROL FOOTING 02 B SUM C. 01 TYPE CONTROL FOOTING 02 C SUM COST. YEAR. MONTH. WEEK. ADAY. Method 2 will execute faster. One addition will be performed for each day, one more for each week, and one for each month. In Method 1, four additions will be performed for each day. Use of SUM Summing Techniques Execution time of an object program can be decreased by keeping in mind that Report Writer source coding is treated as though the programmer had written the program in COBOL without the Report Writer feature. Therefore, a complex source statement or series of statements will generally be executed faster than simple statements that perform the same function. The following example shows two coding teChniques for the Report section of the Data Division. Method 2 uses the more complex statements. RD ••• CONTROLS ARE YEAR MONTH WEEK DAY. Unless each identifier is the name of a SUM counter in a TYPE CONTROL FOOTING report group at an equal or lower position in the control hierarchy. the identifier must be defined in the File, WorkingStorage, or Linkage sections as well as in a TYPE DETAIL report group as a source item or no summing will occur. A SUM counter is algebraically incremented just before presentation of the TYPE DETAIL report group in which the item being summed appears as a source item or the item being summed appeared in a SUM clause that contained an UPON option for this DETAIL report group. This is known as SOURCE-SUM correlation. In the following example, SUBTOTAL is incremented only when DETAIL-l is generated. Using the Report Writer Feature 211 t sequence in which the DETAIL report groups are specified. FILE SECTION. 02 NO-PURCHASES PICTU~E 99. REPORT SECTION. 01 DETAIL-l TYPE DETAIL. 02 COLUMN 30 PICTURE 99 SOURCE NO-PURCHASES. The following two examples show the SUM routines that are generated by the Report Writer. Example 1 illustrates how operands are selected for inclusion in the routine on the basis of simple SOURCE-SUM correlation. Example 2 illustrates how operands are selected when the UPON detail-name option is specified. Example 1: The following statements are coded in the Report Section: 01 DETAIL-2 TYPE DETAIL. 01 ADAY TYPE CONTROL FOOTING LINE PLUS 2. 01 DETAIL-l TYPE DE 02 ••• SOURCE A. 01 DETAIL-2 TYPE DE 02 ••• SOURCE B. 02 ••• SOURCE C. 02 SUBTOTAL COLUMN 30 PICTURE 999 SUM NO-PURCHASES. 01 DETAIL-3 TYPE DE 02 ••• SOURCE B. 01 MONTH TYPE CONTROL FOOTING LINE PLUS 2 NEXT GROUP NEXT PAGE. 01 TYPE CF ••• 02 SUM-CTR-l ••• SUM A, B, C. SUM Routines A SUM routine is generated by the Report Writer for each DETAIL report group of the report. The operands included for summing are determined as follows: 1. 2. The SUM operand(s} also appears in a SOURCE clause(s} for the DETAIL report group. The UPON detail-name option was specified in the SUM clause. In this case, all the operands are included in the SUM routine for only that DETAIL report group, even if the operand appears in a SOURCE clause in other DETAIL report groups. When a GENERATE detail-name statement is executed, the SUM routine for that DETAIL report group is executed in its logical sequence. When GENERATE report-name statement is executed and the report contains more than one DETAIL report group, the SUM routine is executed for each one. The SUM routines are executed in the 212 01 TYPE CF ••• 02 SUM-CTrt-2 ••• SUM B. A SUM routine is generated for each DETAIL report group, as follows: SUM-ROUTINE FOR DETAIL-l REPORT-SAVE ADD A TO SUM-CTR-l. REPORT-RETURN SUM-ROUTINE FOR DETAIL-2 REPORT-SAVE ADD B TO SUM-CTR-l. ADD C TO SUM-CTR-l. ADD B TO SUM-CTR-2. REPORT-RETURN SUM-ROUTINE FOR DETAIL-3 REPORT-SAVE ADD B TO SUM-CTR-l. ADD B TO SUM-CTR-2. REPORT~RETURN Heading at the top of each page, he must include the information and data to be printed as part of the Page Heading. Since only one Page Reading may be specified for each report, he should be selective in considering his Control Heading because it will be the same for each page, and may be printed at inappropriate times (see "Control Footings and Page Format" in this chapter) ~ Example 2: This example uses the same coding as Example 1, with one exception: the UPON detail-name option is used for SUM-CTR-1, as follows: 01 TYPE CF 02 SUM-CTR-1 ••• SUM A, B, C UPON DETAIL-2. The following SUM routines would then be generated instead of those shown in the previous example: 2e SUM Routine for DETAIL-l REPORT-SAVE REPORT-RETURN SUM Routine for DETAIL-2 REPORT-SAVE ADD A TO SUM-CTR-l. ADD B TO SUM-CTR-1. ADD C TO SUM-CTR-l. ADD B TO SUM-CTR-2. REPORT-RETURN GROUP INDICATE items are printed after page and control breaks. -Figure 56 contains a GROUP INDICATE clause and illustrates the execution output. REPORT SECTION. 01 DETAIL-LINE TYPE IS DETAIL LINE NUMBER IS PLUS 1. 02 COLUMN IS 2 GROUP INDICATE PICTURE IS A(9) SOURCE IS MONTHNAME OF RECORD-AREA (MONTH). SUM Routine for DETAIL-3 REPORT-SAVE ADD B TO SUM-CTR-2. REPORT-RETURN (Execution Output) IJANUARY output Line Overlay The Report writer output line is created using an internal REDEFINES specification, indexed by inteqer-1. No check is made to prevent overlay on any line. For example: 02 02 COLUMN 10 PICTURE X(23) VALUE "MONTHLY SUPPLIES REPORT". COLUMN 12 PICTURE X(9) SOURCE CURRENT-MONTH. A length of 27 in column 10, followed by a specification for column 12, will cause field overlay when this line is printed. Page Breaks The Report Writer page break routine operates independently of the routines that are executed after any control breaks (except that a page break will occur as the result of a LINE NEXT PAGE clause). Thus, the programmer should be aware of the following facts: 1. A Control Heading is not printed after a Page Heading except for first generation. If the programmer wishes to have the equivalent of a Control 15 AOO ••• A02 ••• I I I PURCHASES AND COST ••• I IJANUARY I Figure 59. 21 A03 ••• A03 ••• Sample of GROUP INDICATE Clause and Resultant Execution output WITH CODE Clause When more than one report is being written on a file and the reports are to be selectively written, a unique l-character code must be given for each report. A mnemonic-name is specified in the RD-Ievel entry for each report and is associated with the code in the Special-Names paragraph of the Environment Division. Note: If a report is written with the CODE option, the report should not be written directly on a printer device. This code will be written as the first character of each record that is written on the file. When the programmer wishes to write a report from this file, he needs Using the Report Writer Feature 213 only to read a record, check the first character for the desired code, and have it printed if the desired code is found. The record should be printed starting from the third character, as illustrated in Figure 60. I ICode 1 3 2 Figure 60. o 01 PRINT-REC. 05 FILLER PICTURE 1(121). PROCEDURE DIVISION. LOOP. n Format of a Report Record When the CODE Clause is Specified The following example shows how to create and print a report with a code of A. A Report Writer program contains the following statements: READ RPT-IN-FILE AT END GO TO CONTINUE. IF CODE-CBR = "A" WRITE PRINT-REC FROM PRINT-PART AFTER POSITIONING CTL-CBR LINES. GO TO LOOP. CONTINUE. Control Footings and Page Format ENVIRONMENT DIVISION. SPECIAL-NAMES. "A" IS CODE-CHR-A "B" IS CODE-CBR-B. DATA DIVISION. REPORT SECTION. RD REP-FILE-A CODE CODE-CHR-A ••• RD CODE CODE-CHR-B ••• REP-FILE-B A second program could then be used to print only the report with the code of A, as follows: DATA DIVISION. FD RPT-IN-FILE RECORD CONTAINS 122 CHARACTERS LABEL RECORDS ARE STANDARD DATA RECORD IS RPT-RCD. 01 RPT-RCD. 05 CODE-CBR PICTURE X. 05 PRINT-PART. 10 CTL-CHR PICTURE I. 10 RECORD-PART PICTURE X(120). FD PRINT-FILE RECORD CONTAINS 121 CHARACTERS LABEL RECORDS ARE STANDARD DATA RECORD IS PRINT-REC. 214 Depending on the number and size of Control Footings (as well as the page depth of the report), all of the specified Control Footings may not be printed on the same page if a control break occurs for a high-level control. When a page condition is detected before all required Control Footings are printed, the Report Writer will print the Page Footing (if specified), skip to the next page, print the Page Beading (if specified) and then continue to print Control Footings. If the programmer wishes all of his Control Footings to be printed on the same page, he must format his page in the RD-level entry for the report (by setting the LAST DETAIL integer to a sufficiently low line number) to allow for the necessary space. NEXT GROUP Clause Each time a CONTROL FOOTING report group with a NEXT GROUP clause is printed, the clause is activated only if the report group is associated with the control that causes the break. This is i1lustrated in Figure 61. RD EXPENSE-REPORT CONTROLS ARE FINAL, MONTH, ADAY 01 TYPE CONTROL FOOTING DAY LINE PLUS 1 NEXT GROUP NEXT PAGE. relative line as its first line will have its relative line~pacing suppressed; the first line will be printed on either the value of FIRST DETAIL or INTEGER PLUS 1 of a NEXT GROUP clause from the preceding page. For example: 1. If the following body group was the last to be printed on a page 01 01 TYPE CONTROL FOOTING "ONTE LINE PLUS 1 NEXT GROUP NEXT PAGE. TYPE CF NEXT GROUP NEXT PAGE then this next body group 01 TYPE DE LINE PLUS 5 would be printed on value of FIRST DETAIL (in PAGE clause) • (Execution Output) 2. If the following body group was the last to be printed on a page EXPENSE REPORT 01 January 31 ••••••••• 29.30 (Output for CF ADAY) January total ••••• 131.40 (Output for CF MONTH) igure 61. Activating the NEXT GROUP Clause Note: The NEXT GROUP NEXT PAGE clause for the Control Footing DAY is not activated. Floating First Detail The first presentation of a body group (PH, PF, CH, CF, DE) that contains a TYPE CF NEXT GROUP LINE 12 and after printing, line-counter then this next body group 01 40, TYPE DETAIL LINE PLUS 5 would be printed on line 12 + 1 (i.e., line 13). Report Writer Routines At the end of the analysis of a report description (RD) entry, the Report Writer routines are generated, based on the contents of the RD. Each routine references the compiler-generated card number of its respective RD. Using the Report Writer Feature 215 TABLE HANDLING Subscripts If a subscript is represented by a constant and if the subscripted item is of fixed length, the location of the subscripted data item within the table or list is resolved during compilation. If a subscript is represented by a data-name, the location is resolved at execution time. The most efficient format in this case is COMPUTATIONAL, with a PICTURE size less than five integers. The value contained in a subscript is an integer which represents an occurrence number within a table. Every time a subscripted data-name is referenced in a program, the compiler generates up to 16 instructions to calculate the correct displacement. Therefore, if a subscripted data-name is to be processed extensively, move the subscripted item to an unsubscripted work area, do all necessary processing, and then move the item back into the table. Even when subscripts are described as COMPUTATIONAL, subscripting takes time and storage. Index-names Index-names are compiler-generated items, one fullword in length, assigned storage in the TGT (Task Global Table). An index-name is defined by the INDEXED BY clause. The value in an index-name represents an actual displacement from the beginning of the table that corresponds to an occurrence number in the table. Address calculation for a direct index requires a maximum of four instructions; address calculation for a relative index requires a few more. Therefore, the use of index-names in referencing tables is more efficient than the use of subscripts. The use of direct indexes is faster than the use of relative indexes. CONSIDERATI~S that are assigned storage within the COBOL program area. An index data item is defined by the USAGE IS INDEX clause. The programmer can use index data items to save values of index-nawes for later reference. Great care must be taken when setting values of index data items. Since an index data item is not part of any table, the compiler is unable to change any displacement value contained in an index-name when an index data item is set to the value of an index-name or another index data item. See the SET statement examples later in this chapter. Index data items can only be referenced in SEARCH and SET statements. OCCURS Clause If indexing is to be used to reference a table element and the Format 2 (SEARCH ALL) statement is also used, the KEY option must be specified in the OCCURS clause. A table element is represented by the subject of an OCCURS clause. and is equivalent to one level of a table. The table element must then be ordered upon the keyes) and data-name(s) specified. DEPENDING ON Option If a data item described by an OCCURS clause with the DEPENDING ON data-name option is followed by nonsubordinate data items, a change in the value of data-name during the course of program execution will have the following effects: 1. The size of any group described by or containing the related OCCURS clause will reflect the new value of data-name. 2. Whenever a MOVE to a field containing an OCCURS clause with the DEPENDING ON option is executed, the MOVE is done on the basis of the current contents of the object of the DEPENDING ON option. 3. The location of items following with the OCCURS affected by the Index-names can only be referenced in the PERFORM, SEARCH, and SET statements. Index Data Items Index data items are compiler-generated storage positions, one fullword in length, any nonsubordinate the item described clause will be new value of Table Handling Considerations 217 data-name. If the programmer wlsnes to preserve the contents of these items, the following procedure can be used: prior to the change in data-name, move all nonsubordinate items following the variable item to a work area; after the change in data-name, move all the items back. Note: The value of data-name may change because a move is made to i t or to the group in which it is contained; or the value of data-name may change because the group in which it is contained is a record area that has been changed by execution of a READ statement. For example, assume that the Data Division of a program contains the following coding: 01 ANYRECORD. 05 A PICTURE S999 COMPUTATIONAL-3. 05 TABLEA PICTURE S999 OCCURS 100 TIMES DEPENDING ON A. 05 GROUPB. as VSAM files, may contain one or more OCCURS clauses with the DEPENDING ON option. This section discusses some factors that affect the manipulation of records containing OCCURS clauses with the DEPENDING ON option. The text indicates whether the factors apply to the File or Working-Storage sections, or both. The compiler calculates the length of V-mode records containing the OCCURS clausE with the DEPENDING ON option at three different times, as follows (the first and third applies to FD entries only; the second to both FD and Working-Storage entries): 1. When a file is read and the object of the DEPENDING ON option is within the record. 2. When the object of the DEPENDING ON option is changed as a result of a move to it or any item within its group. (The length is not calculated when a move is made to an item which redefines or renames it.) Subordinate data items. End of record. GROUPB items are not subordinate to TABLEA, which is described by the OCCURS clause. Assuming that WORKB is a work area with the same data structure as GROUPB, the following procedural coding could be used: For instance before a group item with an OCCURS DEPENDING ON clause in it can be moved from an I/O area to working storage, the object of the DEPENDING ON clause must be moved separately from the I/O area to the corresponding area in working storage to force initial calculation of the receiving field's length. MOVE GROUPB TO WORKB Calculate a new value of A MOVE WORKB TO GROUPB If the object of the DEPENDING ON option is changed outside of the COBOL program, to insure correct length, a dummy move of the DEPENDING ON object must be made upon return to the COBOL program. The preceding statements can be avoided by placing the OCCURS clause with the DEPENDING ON option at the end of the record. Note: data-name can also change because of a change in the value of an item that redefines or renames it. In this case, th~ group size and the location of nonsubordinate items as described in the two preceding paragraphs cannot be determined. 3. For an output file, after the record is written, the length is set to maximum to enable a full move of the next record to the buffer. Immediately after the move, the correct length is recalculated as in item 2. Consider the following example: OCCURS CLAUSE WITH THE DEPENDING ON OPTION If a record description contains an OCCURS clause with the DEPENDING ON option, the record length is variable. This is true for records described in an FD as well as in the working-Storage section. A previous chapter discussed four different record formats of non-VSAM files. Three of them, V-mode, U-mode, and S-mode, as well 218 WORKING-STORAGE SECTION. 77 77 CONTROL-1 WORKAREA-1 01 SALAHY-HISTORYe 05 SALARY OCCURS 0 TO 10 TIMES DEPENDING ON CONTROL-1 PIC 9(6)V99. PIC 99. PIC 9(6)V99. The Procedure Division statement MOVE 5 TO CONTROL-1 will cause a recalculation of the length of SALARY-HISTORY. MOVE SALARY (5) TO WORKAREA-1 will not cause the length to be recalcula~~d. The compiler permits ,the occurrence of more than one level-01 record, containing the OCCURS clause with the DEPENDING ON option, in the same FD entry (see Figure 62). For non-VSAM files, if the BLOCK CONTAINS clause is omitted, the buffer size is calculated from the longest level-a' record description entry. In Figure 62, the buffer size is determined by the description of RECORD-1 (RECORD-1 need not be the first record description under the FD). During the execution of a READ statement, the length of each level-01 record description entry in the FD will be calculated (see Figure 62). The length of the variable portion of each record will be the product of the numeric value contained in the object of the DEPENDING ON option and the length of the subject of the OCCURS clause. In Figure 62, the length of FIELD-1 is calculated by multiplying the contents of CONTROL-1 by the length of FIELD-1; the length of FIELD-2, by the product of the contents of CONTROL-2 and the length of FIELD-2i the length of FIELD-3 by the contents of CONTROL-3 and the length of FIELD-3. Since the execution of a READ statement makes available only one record type (i.e., RECORD-1 type, RECORD-2 type, or RECORD-3 type), two of the three record descriptions in Figure 62 will be inappropriate. In such cases, if the contents of the object of the DEPENDING ON option does not conform to its picture, th~ length of the corresponding record will be unpredictable. For the contents of an item to conform to its picture: item described as USAGE DISPLAY must contain external decimal data. The following example illustrates the length calculations made by the system when a READ statement is executed: FD 01 RECORD-1. 05 A PIC 99. 05 B PIC 99. 05 C PIC 99 OCCURS 5 TIMES DEPENDING ON A. 01 RECORD-2. 05 D PIC XX. 05 EPIC 99. 05 F PIC 99. 05 G PIC 99 OCCURS 5 TIMES DEPENDING ON F. WORKING-STORAGE SECTION. 01 ~ABLE-3. 05 01 H PIC99 OCCURS 10 TIMES DEPENDING ON B. TABLE-4. 05 I PIC99 OCCURS 10 TIMES DEPENDING ON E. When a record is read, lengths are determined as follows: 1. The length of C is calculated using the contents of field A. The length of RECORD-1=A+B+C. 2. The length of G is calculated using the contents of field F. The length of RECORD-2=D+E+F+G. 3. The length of TABLE-3 is calculated using the contents of field B. 4. The length of TABLE-4 is calculated using the contents of field E. • An • An item described as USAGE COMPUTATIONAL-3 must contain internal decimal data. The programmer should be aware of several characteristics of the previously cited length calculations. The following example illustrates a group item (i.e., REC-1) whose subordinate items contain an OCCURS clause with the DEPENDING ON option and the object of that DEPENDING ON option. • An item described as USAGE COMPUTATIONAL must contain binary data. • An item described as signed must contain signed data. item described as unsigned must contain unsigned data. • An WORKING-STORAGE SECTION. 01 REC-l. 05 FIELD-l PIC 9. 05 FIELD-2 OCCURS 5 TIMES DEPENDING ON FIELD-l PIC XeS). Table Handling Considerations 219 r---------------------------------------------------------------------------------------, INPUT-FILE I FD I I 01 01 01 DATA RECORDS ARE RECORD-l RECORD-2 RECORD-3. RECORD-l. 05 CONTROL-l PIC 99. 05 FIELD-l OCCURS 0 TO 10 TIMES DEPENDING ON CONTROL-l RECORD-2. 05 CONTROL-2 PIC 99. 05 FIELD-2 OCCURS 1 TO 5 TIMES DEPENDING ON CONTROL-2 RECORD-3. 05 FILLER PIC XX. 05 CONTROL-3 PIC 99. 05 FIELD-3 OCCURS 0 TO 10 TIMES DEPENDING ON CONTROL-3 Figure 62. 01 PIC 9(4). PIC X(4) .• Calculating Record Lengths When Using the OCCURS Clause with the DEPENDING ON Option REC-2. 05 REC-2-DATA PIC X(50). The results of executing a MOVE to the group item REC-1 will be affected by the following: • The length of REC-1 may have been calculated at some time prior to the execution of this MOVE statement. The user should make sure that REC-I reflects the correct length. • The length of REC-I may never have been calculated at all, and the result of the MOVE will be unpredictable. • After the move, since the contents of FIELD-1 have been changed, an attempt will be made to recalculate the length of REC-l. Correct recalculation, however, will only be made if the new contents of FIELD-1 conform to its picture (i.e., USAGE DISPLAY must contain an external decimal item, USAGE COMPUTATIONAL-3 must contain an internal decimal item and USAGE COMPU'IATIONAL must contain a binary item. An item described as signed must contain signed data, and an item described as unsigned must contain unsigned data). In the preceding example, if FIELD-l does not contain an external decimal item, the length of REC-l will be unpredictable. Note: According to the COBOL description, FIELD-2 can occur a maximum of five times. If, however, FIELD-l contains an external decimal item whose value exceeds five, the 220 PIC 9(5). length of REC-l will still be calculated. One possible consequence of this invalid calculation will be encountered if the programmer attempts to initialize REC-l by moving zeros or spaces to it. This initialization would inadvertently delete part of the adjacent data stored in REC-2. The following discussion applies to updating a record containing an OCCURS clause with the DEPENDING ON option and at least one other subsequent entry. In this case, the subsequent entry is another item containing an OCCURS clause with the DEPENDING ON option. WORKING-STORAGE SECTION. 01 VARIABLE-REC. 05 FIELD-A PIC X(10). 05 CONTROL-l PIC 99. 05 CONTROL-2 PIC 99. 05 VARY-FIELD-1 OCCURS 10 TIMES DEPENDING ON CONTROL-l PIC X(5). 05 TEMP. 06 VARY-FIELD-2 OCCURS 10 TIHES DEPENDING ON CONTROL-2 PIC X(9). 01 STORE-VARY-FIELD-2. 05 VARY-FLD-2 OCCURS 10 TIMES DEPENDING ON CONTROL-2 PIC X(9). Assume that CONTROL-l contains the value 5 and VARY-FIELD-1 contains 5 entries. In order to add a sixth field to VARY-FIELD-l the following steps are required: MOVE TEHP TO STORE-VARY-FIELD-2. ADD 1 TO CONTROL-l. MOVE 'additional field' TO VARY-FIELD-l (CONTROL-l). MOVE STORE-VARY-FIELD-2 TO TEMP. SET statement The SET statement is used to assign values to index-names and to index data items. When an index-name is set to the value of a literal, identifier, or an index-name from another table element, it is set to an actual displacement from the beginning of the table that corresponds to the occurrence number indicated by the second operand in the statement. The compiler performs the necessary calculations. If an index-name is set to another index-name for the same table, the compiler need make no conversion of the actual displacement value contained in the second operand. However, when an index data item is set to another index data item or to an index-name, or when an index-name is set to an index data item, the compiler is unable to change any displacement value i t finds, since an index data item is not part of any table. Thus, no conversion of values can take place. Remember this to avoid making programming errors. For example, suppose that a table has been defined as: 01 A. 05 B OCCURS 2 INDEXED BY 11, IS. 10 C OCCURS 2 INDEXED BY 12, 16. 15 D OCCURS 3 INDEXED BY 13, 14. 20 EPIC X(20). 20 F PIC 9 (5), The table appears in storage as shown in Figure 63. Suppose that a reference to D (2, 2, 3) is necessary. The following wethod is incorrect: SET 13 TO 2. SET INDX-DATA-I~M TO 13. SET 13 UP BY 1. SET 12, 11 TO INDX-DATA-ITM. MOVE D (11, I2, 13) TO WORKAREA. The value contained in 13 after the first SET statement is 25, which represents the beginning point of the second occurrence of D. When the second SET statement is executed, the value 25 is placed in INDX-DATA-ITM, and the fourth SET statement moves the value 25 into 12 and 11. The third SET statement increases the value in 13 to 50. The calculation for the address D (11, 12, 13) would then be as follows: (address of D (1, 1, 1») + 25 + 25 + 50 = (address of D (1. 1, 1» + 100 This is not the address of D (2, 2, 3). Byte o (1,1,1) ~cc B (1) ~ (1, 1) \ D (1,1,3) (1. 2) A I ~cc l: (2,1) E (1, 2, 2) E F 75 I F I r------------------+---f 125 (1, 2, 3) (2, 1, 1) F \ D (2,1,3) (2. 2) 50 ---+---f 100 (2, 2, 1) ( 25 r------------------+-~ (1, 2, 1) (2, 1, 2) B (2) \ F (1, 1, 2) E F I ~------------------+-~ E F I r-------------------r---~, E F I (2, 2, 2) (2, 2, 3) E F I ~------------------~--f 150 E F I r-------------------~--~i E F I 175 r------------------r----;I 200 E F I r-----------------r---~t 225 E F I r-------------------r---~I E F I 250 r---------------------~----__1f 275 E F I 300 Figure 63. Table Structure in Virtual storage Table Handling Considerations 221 The following method will find the correct address: SET 13 TO 2. SET 12, 11 TO 13. SET 13 UP BY 1. In this case, the first SET statement places the value 25 in 13. Since the compiler is able to calculate the lengths of Band C, the second SET statement places the value 75 in 12, and the value 150 in 11. The third SET statement places the value 50 in 13. The correct address calculation will be: 222 ; ICC On:; 97 8 REL 1.0 AT CARD 000071 CARD LV NAME 000040 PP NO. 5746-CB1 TYPE VALUE NB-S +13 OOOD 02 NAME-FIELG AN M 02 KOUNT (HEX) 07D9EO 000047 07C9EE 000053 02 NO-OF-DEPENDENTS AN 2 07G9E2 000049 02 RECCRD-NO ND 0013 TYPE VALUE NB-S +17 0011 02 NAME-FIELG AN Q TESTRU!' LCC 07D978 J"T CAFD 000071 LV NAME CARD 000040 02 KOUNT (HEX) 07G9BO 000047 07G9EE 000053 02 NO-OF-DEPENDENTS AN 1 07D9B2 000049 02 RECORD-NO ND 0017 TYPE VALUE NB-S +21 0015 TESTRUN LCC 07G978 AT CARD 000071 CARD LV NAME 000040 02 KOUNT (HEX) 07G9BO 000047 02 NAME-FIELD AN U 07D9EE 000053 02 NO-OF-DEPENDENTS AN 0 07D9B2 000049 02 RECCRD-NO ND 0021 TYPE VALUE NB-S +25 0019 Y TESTRUN LCC 07G978 AT CARD 000071 LV NAME CARD 000040 02 KOUNT (HEX) 07G9EO 000047 02 NAME-FIELD AN 07G9BE 000053 02 NO-OF-DEPENDENTS AN 4 07I:9E2 000049 02 RECORD-NO ND 0025 TYPE VALUE TESTRUN LCC 07.52.05 10/02/73 ® AT CARD 000080 CARD LV NAME. 000046 01 WORK-RECORD 07D9BO 07I:9EO 07D9B1 07r;9B2 07G9B6 07C9E7 07G9BA 07r;9EE 07G9BD 000047 000048 000049 000050 000051 000052 000053 000054 02 02 02 02 02 02 02 02 07C9C8 000057 02 B (HEX) NAME-FIELD FILLER RECORD-NO FILLER LOCATION FILLER NO-OF-DEPENDENTS FII.LER AN AN ND AN A AN AN AN NP-S (HEX) Figure 64. C107FOFO FOF140D5 E8C340FO A * 0001 40404040 40404040 NYC *1*2*3* FlF2F3C4 Using the Symbolic Debugging Features to Debug the Program TESTRUN (Part 9 of 12) Symbolic Debugging Features 243 IBM DOS VS COBOL REL 1. 0 PP NO. 5746-CBl 07.52.05 COBOL AEEND DIAGNOS1IC AIDS IN1ERRUP~ PRCGRA~ LAS~ LAST PSW AD DR BEFORE ABEND D007E1AE CODE 7 TESTRUN CARD NUMBER/VERB NUMBER EXECUTED -- CARD TES~RUN NU~EER 000080/VERB NUMBER 01.} CD FLOW TRACE 000066 000070 000066 000070 000066 000070 000066 000070 000076 000079 (;\ \!J DATA DIVISION DUMP m' TES1RUN CD 1ASJ( GLOBAL TABLE SAVE AREA LOC 07CC78 07DC98 07DCB8 SwITCH 07DCCO ~ALLY 07DCC4 SCR~-SAVE 07DCC8 EN1RY-SAVE 07DCCC SCR~-CORE-SIZE 07DC[;0 NSTD-REELS 07DCD4 SORT-RETURN 07DCD6 wORRING CELLS 07DCD8 07DCF8 07DD18 07DD38 07DD58 07DD78 07DD98 07DDB8 07DDD8 07DDF8 SORT-FILE-SIZE 07DE08 SCRT-MODE-SIZE 07DEOC FG~-VN TBL 07DE10 TGT-VN TBL 07DE14 SOR~AB AD DR 07DE18 '.iN TBL LENGTH 07DE1C SORTAB LENGTH 07DE1E FRCGRAM-ID 07DE20 A (IN IT!) 07DE28 UPSI-SWITCHES 07DE2C ~GT-DBG TABLE 07DE34 CURRENT PRIORITY 07DE38 ~RANSIENT AREA LENGTH 07DE39 FROCEDURE-BLCCK 07DE3C UNUSED 07DE40 RESERVED 07DE44 VSAM SAVE AREA 07DE48 UNUSED 07DE4C RESEJ:{VED 07DE511 CVERFLOW CELLS (NONE> EL CELLS 07DE6C LTFADR CELLS 07DE78 (NONE) FIB CELLS TE~P STORAGE 07DE80 ELL CELLS 07DE88 '.iLC CELLS (NONE) (NONE) SBL CELLS (NONE) INDEX CELLS OTHER (SEE MEMORY MAP) 07DE8C 07DEAC Figure 64. 244 VALUE 0000F233 0000001A 4007E1AE 3C10004B 00000000 00000000 0007DF38 00000000 0000 0000 0007DA60 FOF2F640 11011040110 --SAME-40404040 0000001A 0007D9AF 0007DEBO 0007FAII8 00000000 00000000 00000000 E2C1D4D7 D3C54040 0007D878 0000 0000 TESTRUN 0007D878 C9D3C2C4 00000228 00 689120 EOOOll780 F0325810 F0789101 100011710 F0329601 00000000 1B009101 00080168 8007E18E 0007[;1160 5007E29A 0007D978 0007DEBO 0007E1A8 4007EiAA 0007DA60 0007DBA8 0007DAEC 0007DBA8 0007E264 0007D878 0007DB40 0000001A 0007D1\60 D5E8C340 F0404040 40404040 110110110110 11011040110 40404040 5007E29A F16E9025 F21290BC 40E907FO 40404040 40404040 40404040 404011040 110110110110 40404040 404011040 40404040 1104011040 01000000 5007E29A 55EOF088 0007E0811 00000000 404040110 40404040 0007~070 0007F518 0007D978 0007DAD8 4780F030 18FE05EF 0007F518 4A50F060 07070607 07070707 40404040 0007D9AF 0007DBA8 18F498E4 4A20F060 40400000 0007E0811 0007E264 F0684BOO 183047FO 00000000 0000001A 0007D878 00024620 F036D200 0007E082 0000001A 1I007E08A 0007E082 50002000 [;6E2E8FO 00000000 F0549110 000002EO 00000100 000002A8 DIIC5E3C8 0007DAEC 0007DBA8 0007iJ978 0007D9E8 0007DA60 00000000 0000026C 00000000 0007D993 0007D9AF 0007EOAC 0007EOAC 000006F8 D7C5D540 OAOOOA68 000009D2 5C29FOC8 Using the Symbolic Debugging Features to Debug the Program TESTRUN (Part 10 of 12) 10/02/73 IBM DOS VS COBOL pp NO. REL 1.0 07.52.05 5746-CB1 10/02/73 DA'IA DIVISION DUMP OF 'IESTRUN Lec CARD 000017 ® FD FILE-1 S'IANDARD SEQUEN'IIAL PRE-DTF DTFMT 07~9DO 07r9Ea 07DA08 07I:A28 07~A48 07DAEC 07I:AEC 000028 01 RECORD-1 000029 02 FIELD-A 000018 FD FILE-2 ® 000036 01 RECORD-2 000037 02 FIELD-A 000039 01 FILLER 07D97A 07r::97B 071:;97C 07r;97D 07D97E 07r;97F 07D980 07r:981 071:;982 07D983 07~984 07D985 07D986 07~987 07D988 071::989 07D98A Figure 64. ® ® (HEX) (HEX) NB-S AN *AN (SUBl) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SEQU~NTIAL 00000000 OCOO0108 2407E1A2 0007DBA8 00000000 AN 02 KCUNT 02 ALPHABE'I 02 ALPHA ® 01010014 00008200 10000000 0007DBA8 00000000 00000000 00070A20 00000000 00000014 00000000 ASSIGNED TO SYS008, CLOS:t.D 00000000 0007DA28 86BCF018 0007DBA3 00000000 6COOOOOO 0007E368 41EOE001 00640063 6COOOOOO D807FOFO F1F740D5 E.8C340F1 Q*0017 NYC 1 STANDARD PRE-D'IF DTFMT 000040 000041 000042 00000000 OCOO0108 00000000 0007DB40 00000000 (HEX) ® 07CA60 07DA80 07r::AAO 07DACO 07r:978 07D990 07r:9A8 07D978 07r::97A 01010014 00009200 00000000 0007DB40 01010014 AN 07~A48 071:;BA8 07:CBA8 VALUE TYPE LV NAME 00000000 0007DA98 00000001 00000014 00000000 00000000 1160E.2E8 58201044 00000000 00000000 E2FOFOFS 0107DADS 00000000 00008200 40400162 20000064 400802bS OCOO0108 40404040 40404040 ASSIGNED 'IO SYS008, OPE.N INPUT 00000000 0007DAAO 86BCF018 00070COB 00000000 6COOOOOO 0007E368 41EOE001 00640063 00000000 00000000 llE8E2E8 58201044 00000000 00000000 E2FOFOF8 0207DC10 000802BO E907FOFO 40400272 00000064 00080268 F2F640D5 C107FOFO FOF140D5 E8C340FO A*OOOl NYC 0 40404040 40404040 001AC1C2 C3C4C5C6 C7C8C9D1 E6E7E8E9 001AFOF1 F2F3F4FO F3F4FOF1 F2F3F4FO +26 ABCDEFGHIJKLMNOPQRSTUVWXYZ D2D3D4D5 D6D7D8D9 ~2E.3E4E5 F1F2F3F4 FOF1F2F3 F4FOF1F2 A B C D E F G H I J K L M N o p Q Using the Symbolic Debugging Features to Debug the Program TESTRUN (Part 11 of 12) Symbolic Debugging Features 245 IBM DOS V$ COBOL REL 1. 0 PP NO. 5746-CBl 07.52.05 DA'1A CIVISION DUMP OF 'IES'IRUN LCC 07[;98B 07[;98C 07D98D 07[;98£ 07[;98F 07[;990 07[;991 07[;992 07D993 07[;994 07[;996 CARD LV NAME 18 19 20 21 22 23 24 25 26 000043 000044 000045 R W X Y Z NB-S liN *lIN ® (SU~1) 01 WORK-RECORD 000047 000048 000049 000050 000051 000052 000053 02 02 02 02 02 02 02 +26 01234012340123401234012340 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 000046 VALUE S '1 U V 02 NUMER 02 DEPENDENTS 02 DEPEND 07C996 07D997 07[;998 07D999 07C99A 07[;99B 07[;99C 07[;99D 07[;99£ 07[; 9 9F 07r:;9AO 07D9111 07[;9A2 07D9A3 07[;9A4 07[;9A5 07[;9A6 07r:.9A7 07[;9A8 07D9A9 07[;9AA 07D9AE 0n:9AC 07D911D 07C9AE 07[;9AF 07D9BO 07[;9BO 07D9B1 07C9B2 07r:.9B6 07[;9E7 07[;9BA 07r:;9EE TYPE 0 (HEX) AN AN ND AN A AN AN NAME-FIELD FILLER RECORD-NO FII.LER LOCA'IION FII.LER NO-OF-DEPENDENTS C107FOFO FOF140D5 EBC340FO A * 0001 40404040 40404040 NYC 0 DATA DIVISION DUMP OF TESTRUN LCC 07r:;9BD 07[;9C8 07r:9C8 07D9C8 CARD LV NAME TYPE 000054 02 FILLER AN 000055 01 RECORDA 000056 000057 02 A 02 B 0 (HEX) ND-O'I ~NP-S VALUE F1F2F3C4 +1234 *1*2*3* END OF COBOL DIAGNOSTIC AIDS Figure 64. 246 Using the Symbolic Debugging Features to Debug the Program TESTRUN (Part 12 of 12) 10/02/73 PROGRru~ A programmer using the DOS/vS COBOL Compiler and Library has several methods available to him for testing and debugging his programs. Use of the symbolic debugging features is the easiest and most efficient method for testing and debugging and is described in detail in the chapter ·Symbolic Debugging Features." Using the execution statistics feature is another method for testing, debugging and optimizing a program, and is described in the chapter "Execution Statistics". This chapter contains information useful for testing and debugging programs run without the symbolic debugging features. It also contains information on linkage editor and execution-time diagnostics as well as a description of taking checkpoints and restarting programs. CHECKOUT 2. The date and time of compilation are given in the header line of the compilation listing. 3. The date and time of compilation are punched into the object deck and will be found beginning at relative location XiEC· in the dump of the object module. 4. By moving the special register WHEN-COMPILED to an output record, the user may flag his output to identify it with a particular compilation. WHEN-COMPILED is described more fully in IBM DOS Full American National Standard COBOL. DEBUG LANGUAGE SYNTAX-CHECKING COMPILATION The compiler checks the source text for syntax errors and then generates the appropriate error messages. With the syntax-checking feature, the programmer can request a compilation either conditionally, wit~ object code produced only if no messages or just W- or C-Ievel messages are generated, or unconditionally, with no object code produced regardless of message level. Selected test cases run with the syntax-checking feature have resulted in a compilation-time saving of as much as 70%, For a discussion of the syntax-checking options, SYNTAX and CSYNTAX, see the section "CBL Statement -- COBOL Option Control Card." The COBOL debugging language is designed to assist the COBOL programmer in producing an error-free program in the shortest possible time. The following sections discuss the use of the debug language and other methods of program checkout. The three debug language statements are TRACE, EXHIBIT, and ON. Anyone of these statements can be used as often as necessary. They can be interspersed throughout a CCBOL source program, or they can be contained in a packet in the input stream to the compiler. Program checkout may not be desired after testing is completed. A debug packet can be removed after testing to eliminate the extra object program coding generated for the debug statements. The output produced by the TRACE and EXHIBIT statements is listed on the system logical output device (SYSLST). IDENTIFICATION OF PROGRAM VERSIONS The following discussions describe methods of using the debug language. One problem a programmer may have during checkout is associating a particular compilation listing with the object deck from that compilation and the output and/or dump from a particular run. To aid in this, the following facilities can be used: 1. Specify a DATE-COMPILED paragraph as part of the Environment Division. This is replaced by the actual date of compilation on the source listing (OPTION LIST). FLOW OF CONTROL The READY TRACE statement causes the compiler=generated card numbers for each section-name and paragraph-name to be displayed. These card numbers are listed on SYSLST at execution time when control passes to these sections and paragraphs. Program Checkout 247 Hence, the output of the READY TRACE statement appears as a list of card numbers. If VERB is specified, the actual paragraph-names and names of the verbs will be listed. To reduce the length of the list and the time taken to generate it, a trace can be stopped with a RESET TRACE statement. The READY TRACE/RESET TRACE combination is helpful in examining a particular area of the program where the flow of control is difficult to determine, e.g., code consists of a series of PERFORM statements or nested conditional statements. The READY TRACE statement can be coded so that the trace begins before control passes to that area. The RESET TRACE statement can be coded so that the trace stops when the program has passed beyond the area. Use of the ON statement with the TRACE statement allows conditional control of the tracing. When the COBOL compiler encounters an ON statement, it creates a counter which is incremented during execution, whenever control passes through that ON statement. For example, if an error occurs when a specific record is processed, the ON statement can be used to isolate the problem record. The statement should be placed where control passes through it only once for each record that is read. When the contents of the counter equal the number of the record (as specified in the ON statement), a trace can be taken on that record. The following example shows a method in which the 200th record could be selected for a TRACE statement. Col. 1 Note: If an error occurs during compilation of an ON statement, the diagnostic message may refer to the previous statement number. DISPLAYING DATA VALUES DURING EXECUTION A programmer can display the value of a data item during program execution by using the EXHIBIT statement. The EXHIBIT statement has three options: 1. EXHIBIT NAMED -- Displays the names and values of the data-nawes listed in the statement. 2. EXHIBIT CHANGED -- Displays the value of the data-names listed in the statement only if the value has changed since the last execution of the statement. 3. EXHIBIT CHANGED NAMED -- Displays the names and the values of the data-na~es only if the values have changed since the last execution of the statement. Data values can be used to check the accuracy of the program. For example, using EXHIBIT NAMED, the prograrrmer can display specified fields from records, compute the calculations himself, and compare his calculations with the output from his program. The coding for a payroll problem might be: Col. 1 Area A GROSS-PAY-CALC. COMPUTE GROSS-PAY RATE-PER-HOUR * (HRSWKD + 1.5 * OVERTIMEHRS). NET-PAY-CALC. RD-REC. DEBUG RD-REC PARA-NM-l. ON 200 READY TRACE. ON 201 RESET TRACE. If the TRACE statement were used without the ON statement, every record would be traced. An example of a common program error is failing to break a loop or unintentionally creating a loop in the program. If many iterations of the loop are required before it can be determined that a program error exists, the ON statement can be used to initiate a trace after the expected number of iterations has been completed. 248 Area A DEBUG NE?-PAY-CALC SAMPLE-l. ON 10 AND EVERY 10 EXHIBIT NAMED RATE-PER-HOUR, HRSWKD, OVERTIMEHRS, GROSS-PAY. This coding will cause the values of the four fields to be listed for every tenth data record before net pay calculations are made. The output could appear as: RATE-PER-HOUR = 4.00 HRSWKD = 40.0 OVERTIMEHRS = 0.0 GROSS-PAY = 160.00 RATE-PER-HOUR = 4.10 HRSWKD = 40.0 OVERTIMEHRS = 1.5 GROSS-PAY = 173.23 RATE-PER-HOUR = 3.35 HRSWKD = 40.0 OVERTIMEHRS = 0.0 GROSS-PAY = 134.00 Note: Decimal points are included in this example for clarity, but actual printouts depend on the data description in the program. Program Checkout 248.1 The preceding was an example of checking at regular. intervals (every tenth record) • A check of any unusual conditfons can be made by using various combinations of COBOL statements in the debug packet. For example: r- IREAD INPUT I I DATA FOR 1 < - - B CITY I I r I IF OVERTIMEHRS GREATER THAN 2.0 EXHIBIT HAftED PAYRCDHRS ••• I I V In connection with the previous example, this statement could cause the entire pay record to be displayed whenever an unusual condition (overtime exceeding two hours) is encountered. CALCULATE RATE FOR CITY , 1 i V The EXHIBIT statement with the CHANGED option also can be used to monitor conditions that do not occur at regular intervals. The values of data-names are listed only if the value has changed since the last execution of the statement. For example, suppose the program calculates postage rates to various cities. The flow of the program might be: EXHIBIT CHANGED I I V <§? NO CITY :?B YES I I I V STATE = 01 CITY 02 CITY 03 BUS CITY 04 CITY 01 RAIL 10 BUS = 06 AIR = 15 RAIL = 30 BUS = 25 STATE = 02 CITY 01 TRUCK CITY 20 AIR Figure 65. 02 TRUCK TRUCK 14 TRUCK 28 AIR 12 AIR 20 34 25 = 30 Sample output of EXHIBIT Statement With the CHANGED NAMED Option Program Checkout 249 The EXHIBIT statement with the CHANGED option in the program might be: r--------~ START EXHIBIT CHANGED STATE CITY RATE L ____~--~ The output from the EXHIBIT statement with the CHANGED option could appear as: 01 01 10 02 03 15 10 02 04 01 20 15 03 02 03 04 01 , I V r--------~ I I I A DEBUG PACKET FOR A 10 The first column contains the code for a state, the second column contains the code for a city, and the third column contains the code for the postage rate. The value of a data-name is listed only if it has changed since the previous execution. For example, since the postage rate to city 02 and city 03 in state 01 are the same, the rate is not printed for city 03. The EXHIBIT statement with the CHANGED NAftED option lists the data-name if the value has changed. For example, the program might calculate the cost of various methods of shipping to different cities. After the calculations are made, the following statement could appear in the program: I V STOP RUN EXHIBIT CHANGED NAMED STATE CITY RAIL BUS TRUCK AIR The output from this statement could appear as shown in Figure 65. Note that a data-name and its value are listed only if the value has changed since the previous execution. In this program, A creates data, B processes it, and C prints it. The debug packet for A simulates test data. It is first in the program to be executed. In the packet, the last statement is GO TO B, which permits A to be bypassed. After B is executed with the test data, control passes to the debug packet for C, which contains a GO TO statement that transfers control to the end of the program, bypassing C. TESTING A PROGRAM SELECTIVELY TESTING CHANGES AND ADDITIONS TO PROGRAMS A debug packet allows the programmer to select a portion of the program for testing. The packet can include test data and can specify operations the programmer wants to be performed. When the testing is completed, the packet can be removed. The flow of control can be selectively altered by the inclusion of debug packets, as illustrated in the following example of selective testing of B: 250 If a program runs correctly, and changes or additions might improve its efficiency, a debug packet can be used to test changes without modifying the original source program. If the changes to be incorporated are in ~ the middle of a paragraph, the entire paragraph with the changes included must be written in the debug packet. The last statement in the packet should be a GO TO statement that transfers control to the next procedure to be executed. There are usually several ways to perform an operation. Alternative methods can be tested by putting them in debug packets. The source program library facility can be used for program checkout by placing a source program in a library (see the chapter "Librarian Functions"). Changes or additions to the program can be tested by using the BASIS card and any number of INSERT and DELETE cards. Such changes or additions remain in effect only for the duration of the run. A debug packet can also be used in conjunction with the BASIS card to debug a program or to test deletions or additions to it. The debug packet is inserted in the input stream immediately following the BASIS card and any INSERT or DELETE cards. If a serious error occurs during execution of the problem program, the job is abnormally terminated; any remaining steps are bypassed; and a program phase dump is generated. The programmer can use the dump for program checkout. (However, any pending transfers to an external device may not be-completed. For example, if a READY TRACE statement is in effect when the job is abnormally terminated, the last card number may not appear on the external device.) In cases where a serious error occurs in other than the problem program (for example, Supervisor), a dump is not produced. Note that program phase dumps can be suppressed if the NODUMP option of the OPTION control statement has been specified for the job, or if NO DUMP was specified at system generation time and is not overridden by the DUMP option for the current job. HOW TO USE A DUMP When a job is abnormally terminated due to a serious error in the problem program, a message is written on SYSLST which indicates the: 1. Type of interrupt (for example, program check) 2. Hexadecimal address of the instruction that caused the interrupt 3. Condition code 4. Reason for the interrupt (for example, data exception) The instruction address can be compared to the Procedure Division map. The contents of LIST! provide a relative address for each statement. The load address of the module (which can be obtained from the map of virtual storage generated by the Linkage Editor) must be subtracted from the instruction address to obtain the relative instruction address as shown in the Procedure Division map. The PMAP=nnnnnn CBL option can be used to relocate LISTX addresses so that this calculation need not be done. If the interrupt occurred within the COBOL program, the programmer can use the error address and LISTX to locate the specific statement in the program which caused a dump to be taken. Examination of the statement and the fields associated with it may produce information as to the specific nature of the error. Figure 66 is a sample dump which was caused by a data exception. Invalid data (i.e., data which did not correspond to its usage) was placed in the numeric field B as a result of redefinition. The following discussion illustrates the method of finding the specific statement in the program which caused the dump. Letters identifying the text correspond to letters in the program listing. The program interrupt occurred at HEX LOCATION 07DFDC. This is indicated in the SYSLST message printed just before the dump. The linkage editor map indicates that the program was loaded into address 7D878. This is determined .by examining the load point of the control section TESTRUN. TESTRUN is the name assigned to the program module by the source coding: PROGRAM-ID. TESTRUN. The specific instruction which caused the dump is located by subtracting the load address from the interrupt address (that is, subtracting 7D878 from 7DFDC). The result, 764, is the relative interrupt address and can be found in the object code listing. In this case the instruction in question is an AP (add decimal). Program Checkout 251 The left-hand column of the object code listing gives the compilergenerated card number associated with the instruction. It is card 66. As seen in the source listing, card 66 contains the COMPOTE statement. COBOL subprogram can acquire invalid information from the main program, e.g., a CALL statement using a procedure-name and an ENTRY statement using a data-name. 10. Additional details about reading a dump are found in the chapter "Interpreting Output." The compiler does not generate a test to check the sign position for a val~d configuration before the item is used as an operand. The programmer can test for valid data by means of the numeric class test and, by using the TRANSFORM statement, convert it to valid data under certain conditions. ERRORS THAT CAN CAUSE A DUMP A dump can be caused by pne of many errors. Several of these errors may occur at the COBOL language level while others can occur at the job control level. For example, if the units position of a numeric data item described as OSAGE IS DISPLAY contained a blank, the blank could be transformed to a zero, thus forcing a valid sign. The following are examples of COBOL language errors that can cause a dump: 1. 2. A GO TO statement with no procedure-name following it may have been improperly initialized with an ALTER statement. The execution of this statement will cause an invalid branch to be taken and results will be unpredictable. ftoves of or arithmetic calculations using numeric fields that have not been properly initialized. For example, neglecting to initialize the object of an OCCURS clause with the DEPENDING ON option, or referencing data fields prior to the first READ statement may cause a program interrupt and a dump. 3. 4. 5. Invalid data placed in a numeric field as a result of redefinition. Input/output errors that are nonrecoverable. An input file contains invalid data such as a blank numeric field or data incorrectly specified by its data description. 11. Division by zero without an ON SIZE ERROR clause will cause a data exception. LOCATING A DTF One or more DTF's are generated by the compiler for each file opened in the COBOL program. All information about that file is found within the DTF or in the fields preceding the DTF. See the chapter "Detailed Processing Capabilities" for the type of information available and its location. A particular DTF may be located in an execution-time dump as follows: 1. Items with subscripts whose values exceed the defined maximum value can destroy machine instructions when moved. Determine the order of the DTF address cells in the TGT from the DTF numbers shown for each file-name in the glossary. Note: Since the order is the same as the FD's in the Data Division, the order can be determined from the source program if the SYM option was not used (i.e., no glossary was printed) • 6. Attempting to execute an invalid operation code through a system or program error. 7. Generating an invalid address for an area that has address protection. 2. Subprogram linkage declarations that are not defined exactly as they are stated in the calling program. Find the relative starting address of the block of DTF cells from the TGT listing in the Memory Map. 3. Calculate the absolute starting address of the block by adding the hexadecimal relocation factor for the beginning of the object module as given in the linkage editor MAP. 8. 9. 252 Data or instructions can be modified by entering a sUbprogram and manipulating data incorrectly. A ~ , 4. 5. Allowing one fullword per DTF cell, count off the cells from the starting address found in step 3, using the order determined in step 1 to locate the desired DTF cell. Locate data-name B in the glossary. It appears under the column headed SOURCE-NAME. Source-name B has been assigned to base locator 3 (i.e., BL =3> with a displacement of 050,. The sum of the value of base locator 3 and the displacement value 50 is the address of data-name B. If more than one DTF is generated for a file, the above procedure should be followed using the PGT and the SUBDTP cells rather than the TGT and the DTPADR cells. The order of multiple DTF's in storage is dependent on the OPEN option as follows: a. INPUT b. OUTPUT c. I-O or INPUT REVERSED The following discussion illustrates the method of finding the DTP's in the sample program in Figure 66. Letters identifying the text refer to letters in the program listing. ~ the programmer should locate the contents of field B at the time of the interrupt. This can be done as follows: The DTF for PILE-1 precedes the DTF for PILE-2. DTFADR CELLS begin at relative location 600. Since the relocation factor is 7D878, the DTFADR CELLS begin at location 7DE78 in the dump. The DTF for FILE-1 begins at location 7D9E8, and the DTF for FILE-2 begins at location 7DA60. LOCATING DATA The location assigned to a given data-name may similarly be found by using the BL number and displacement given for that entry in the glossary, and then locating the appropriate one fullword BL cell in the TGT. The hexadecimal sum of the glossary displacement and the contents of the cell should give the relative address of the desired area. This can then be converted to an absolute address as described above. Since the problem program in Figure 66 interrupted because of a data exception, The Register Assignment table lists the registers assigned to each base locator. Register 6 has been assigned to BL =3. The contents of the 16 general registers at the time of the interrupt are displayed at the beginning of the dump. Register 6 contains the address 0007D978. o The location of data-name B can now be determined by adding the contents of register 6 and the displacement value 50. The result, 7D9C8, is the address of the leftmost byte of the 4-byte field B. Note: Field B contains P1F2F3C4. This is external decimal representation and does not correspond to the USAGE COMPUTATIONAL-3 defined in the source listing. The location assigned to a given data-name may also be found by using the BL CELLS pointer in the TGT Memory Map. Figure 64 indicates that the BL cells begin at location 7DE6C (add 5F4 to the load point address, 7D878, of the object module>. The first four bytes are the first BL cell, the second four bytes are the second BL cell, etc. Note that the third BL cell contains the value 7D978. This is the same value as that contained in register 6. Note: Some program errors may destroy the contents of the general registers or the BL cells. In such cases, alternate methods of locating the DTF's are useful. Program Checkout 253 // JOB DATACHlt OPTION NODECt;LINK,LIST,LISTX,SYM,ERRS // EXEC FCOEeL II 1 IBM DOS VS COBOL CEL QUOTE, SEQ C0001 (0002 00003 00004 C0005 (0006 C0010 e0011 C0012 C0013 C0014 00015 C0016 00017 C0018 00019 00020 00021 00022 e0023 C0024 00025 e0026 00027 (J0028 C0029 00030 0003l 00032 e0033 0003" 00035 Figure 66. 254 REL 1. 0 PP NO. 5746-CE1 07.35.08 IDENTIFICATION DIVISION. PROGRAM-ID. TESTRUN. AUTHOR. PROGRAMMER NAME. INSTALLATION. NEW YORK PROGRAMMING CENTER. DATE-WRITTEN. SEPTEMBER 25,1973 DATE-COMPILED. 10/02/73 ENVIRONMENT DIVISION. CONFIGURATION SECTION. IBM-370. SOURCE-COMPUTER. OBJECT-COMPUTER. IBM-310. INPUT-CUTPUT SECTION. FILE-CONTROL. SELECT FILE-l ASSIGN TO SYS008-UT-2400-S. SELECT FILE-2 ASSIGN TO SYS008-UT-2400-S. DATA DIVISION. FILE SECTION. FD FILE-1 LABEL RECORDS ARE OMITTED BLOCK CONTAINS 5 RECORDS RECCRDING MODE IS F RECORD CONTAINS 20 CHARACTERS DATA RECORD IS RECORD-l. 01 RECORD-l. 05 FIELD-A PIC X(20). FD FILE-2 \V LABEL RECORDS ARE OMITTED BLOCK CONTAINS 5 RECORDS RECORD CONTAINS 20 CHARACTERS RECORDING MODE IS F DATA RECORD IS RECORD-2. 01 RECCRD-2. 05 -FIELD-A PIC·X(ZOr. f£\ Sample Dump Resulting from Abnormal Termination (Part 1 of 6) 10/02/73 IBM DOS VS COBOL C0036 00037 00038 C0039 C0040 C0041 C0042 C0043 00044 00045 C0046 00047 00048 00049 C0050 C0051 00052 00053 COO 54 COC55 C0056 C0057 C0058 C0059 C0060 C0061 00062 00C63 00C64 C0065 00066 00067 00068 C0069 C0070 C0071 C0072 00073 C0074 C0075 00076 00077 00078 00079 C0080 00081 Figure 66. REL 1.0 PP NO. 5746...cB1 07.35.08 10/02/73 WORKING-STORAGE SECTION. 01 FILLER. 02 KOUNT PIC S99 COMP SYNC. 02 ALPHABET PIC X(26) VALUE IS "ABCDEFGHIJKLMNOPQRSTUVWXYZ". 02 ALPHA REDEFINES ALPHABET PIC X OCCURS 26 TIMES. 02 NUMBR PIC S99 COMP SYNC. 02 DEPENDENTS PIC X(26) VALUE "01234012340123401234012340·. 02 DEPEND REDEFINES DEPENDENTS PIC X OCCURS 26 TIMES. 01 WORK-RECORD. 05 r;AME-FIELD PIC X. 05 FILLER PIC X. 05 RECORD-NO PIC 9999. 05 FILLER PIC X VALUE IS SPACE. 05 LOCATION PIC AAA VALUE IS nNYC". 05 FILLER PIC X VALUE IS SPACE. 05 NO-OF-DEPENDENTS PIC XX. 05 FILLER PIC X(7) VALUE IS SPACES. 01 RECCRDA. 02 A PICTURE S9(4) VALUE 1234. 02 B REDEFINES A PICTURE S9(7) COMPUTATIONAL-3. PROCEDURE DIVISION. BEGIN. READY 'IP~CE. NOTE THAT THE FOLLOWING OPENS THE OUTPUT FILE TO BE CREATED AND INITIALIZES THE COUNTERS. STEP-l. OPEN OUTPUT FILE-l. MOVE ZERO TO KOUNT, NUMBR. NOTE THAT THE FOLLOWING CREATES INTERNALLY 'IHE RECORDS TO Bl:. CONTAINED IN THE FILE, WRITES THEM ON TAPE, AND DISPLAYS THEM ON THE CONSOLE. STEP-2. ADD 1 TO KOUNT, NUMBR. MOVE ALPhA (KOUNT) TO NAME-FIELD. (;\ COMPUTE B = B + 1. ~ MOVE DEPEND (KOUNT) TO NO-OF-DEPENDENTS. MOVE NUMBR TO RECORD-NO. STEP-3. DISPLAY WORK-RECORD UPON CONSOLE. wRITE RECORD-l FROM WORK-RECORD. STEP-4. PERFORM STEP-2 THRU STEP-3 UNTIL KOUNT IS EQUAL TO 26. NOTE THAT THE FOLLOWING CLOSES THE OUTPUT FILE AND REOPENS IT AS INPUT. STEP-5. CLOSE FILE-l. OPEN INPUT FILE-2. NOTE THAT THE FOLLOWING READS BACK THE FILE AND SINGLES OUT EMPLOYEES WITH NO DEPENDENTS. STEP-6. READ FILE-2 RECORD INTO WORK-RECORD AT END GO TO STEP-8. STEP-7. IF NO-OF-DEPENDENTS IS EQUAL TO "0" MOVE ·Z" TO NO-OF-DEPENDENTS. EXHIBIT NAMED WORK-RECORD. GO TO ST'EP-6. STEP-8. CLOSE FILE-2. STOP RUN. sample Dump Resulting from Abnormal Termination (Part 2 of 6) Program Checkout 255 INTRNL NAME LVL SOURCE NAME DNM=1-148 DNM=1-179 DNM=1-200 DNM=1-217 DNM=1-248 DNM=1-269 DNM=1-289 DNM=1-308 DNM=1-323 DNM=1-341 DNM=1-359 DNM=1-374 DNM=1-394 DNM=1-410 DNM=1-434 DNM=1-454 DNM=1-473 DNM=1-492 DNM=2-000 DNM=2-018 DNM=2-037 DNM=2-063 DNM=2-082 DNM=2-102 DNI-J=2-113 FD 01 02 FD 01 02 01 02 02 02 02 02 02 01 02 02 02 02 02 02 02 02 01 02 02 BASE FILE-l RECORD-l FIELD-A FILE-2 RECORD-2 FIELD-A FILLER KOUNT ALPHABET ALPHA NUMBR DEPENDENTS DEPEND WORK-RECORD NAME-FIELD FILLER RECORD-NO FILLhR LOCATION FILLER NO-OF-DEPENDENTS FILLER RECORDA A B DTF=Ol BL=l BL=l DTF=02 BL=2 BL=2 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 -0 07.35.08 PP NO. 5746-CB1 REL 1.0 IBM DOS VS COBOL DISPL 000 000 000 000 000 000 002 002 01C OlE OlE 038 038 039 03A 03E 03F 042 043 045 050 050 050 INTRNL NAME DNM=1-l48 DNM=1-179 DNM=1-200 DNM=1-2l7 DNM=1-248 DNM=1-269 DNM=1-289 DNM=1-308 DNM=1-323 DNM=l-34l DNM=l-359 DNM=1-374 DNM=l-394 DNM=1-4l0 DNM=l-434 DNM=1-454 DNM=1-473 DNM=l-492 DNM=2-000 DNM=2-0l8 DNM=2-037 DNM=2-063 DNloti=2-082 DNM=2-l02 DNM=2-113 DEFINI'IION DS OCL20 DS 20C DS DS DS DS DS DS DS DS DS DS DS DS DS DS DS DS DS DS DS DS DS OCL20 20C OCL56 lH 26c lC 1H 26C lC OCL20 lC 1c 4C 1C 3C lc 2c 7C OCL4 4C 4P USAGE D'IFMT GROUP DISP DT'FI-iT GROUP DISP GROUP COi'iP DISP DISP CONP DISP DISF GROUP DISP DISP DISP-NM DISP DISI' DISP DISI' DISP GROUP DISP-Ni1 cOMP-3 10/02/73 R XSA-CELLS PARAM CELLS RPTSAV AREA CHECKPT CTR IOPTR CELLS Figure 66. 256 M F R 0 R 0 R 00400 SAVE AREA SWITCH TALLY SORT SAVE ENTRY-SAVE SORT ceRE SIZE NSTD-REELS SORT RET WORKING CELLS SORT FILE SIZE SORT MODE SIZE PGT-VN TBL TGT-VN TEL SORTAB ADDRESS LENGTH OF VN TBL LNGTH OF SORTAB PGM ID ACINITl} UPSI SWITCHES DEBUG TABLE PTR CURRENT PRIORITY TA LENGTH PROCEDURE BLOCKl PTR UNUSED RESERVED VSAM SAVE AREA ADDRESS UNUSED RESERVED OVERFLOW CELLS ( ; \ BL CELLS ~ DTFADR CELLS FIB CELLS TEMP STORAGE TEMP STORAGE-2 TEMP STORAGE-3 TEMP STORAGE-4 BLL CELLS VLC CELLS SBL CELLS INDEX CELLS SUBADR CELLS ONCTL CELLS PFMC'IL CELLS PFMSAV CELLS VN CELLS SAVE AREA =2 XSASw CELLS Q F MEMORY MAP TGT 0 00400 00448 0044C 00450 00454 00458 0045C 0045E 00460 00590 00594 00598 0059C 005AO 005A4 005A6 005A8 005130 005B4 005BC 005CO 005Cl 005C4 005C8 005ec 005DO 005D4 005DC 005F4 005F4. f7\F 00600 ~ 00608 00608 00610 00610 00610 00610 00614 00614 00614 00614 0061C 0061C 0061c 00620 00624 00624 00624 00624 00628 00628 00628 Sample Dump Resulting from Abnormal Termination (Part 3 of 6) IBM DOS VS COBOL PP NO. 5746-CBl P.EL LO 07.35.08 10/02/73 REGISTER ASSIGNMENT REG 6 REG 7 REG 8 BL =3 BL =1 BL =2 --® 64 00070S 00070C 000710 000714 00071A 00071E 0007n 000126 00072A 00072E 000732 00073S 00073C 000740 4S 4A 4E D7 94 4F 40 4S 4A 4E D7 94 4F 40 30 30 30 05 OF 30 30 30 30 30 05 OF 30 30 C 03A 000744 000748 00074C 000750 000752 000756 00075A 00075E 41 4S 4C 1A 5B 50 58 D2 40 20 20 42 40 40 EO 00 000764 FA 30 6 050 C 03C 6 D D D D 6 C 6 D D D D 6 000 20S 20S D 20S 20E 20S 000 03A 01C 20S 20S D 20S 20E 20S 01C LH AH CVD XC NI CVB STH LH AH CVD XC NI CVB STH 3,03A(O,12) 3,000(0,6) 3,20S(O,13) 20S(6,13),20S(13) 20E(13),X'OF' 3,20S(O,13) 3,000(0,6) 3,03A(O,12) 3,OlC(O,6) 3,20S(O,13) 20S(6,13),20S(13) 20E(13),X'OF' 3,20S(O,13) 3,OlC(O,6) LIT+2 DNM=1-308 TS=Ol TS=Ol TS=01+6 TS=Ol DNM=1-30S LIT+2 DM'l=1-359 TS=Ol TS=Ol TS=01+6 TS=Ol DNM=1-359 LA oLi,002(O,6) 2,000(0,6) 2,03A(O,12) 4,2 4,03S(O,12) 4,214(0,13) 14,214(0,13) 038 (1,6) ,000 (14) DNM=1-341 DNM=1-308 LIT+2 LIT+O SSS=l SBS=l DNM=1-434 DNM=1-341 050(4,6),03C(l,12) DNM=2-113 LIT+4 TS=Ol TS=Ol 64 6 002 6 000 C 03A C D D 6 Lri MH AR S ST L MVC 038 214 214 038 E 000 66 67 ®--AP t // EXEC LNKEDT LOADED REL-FR TESTRUN 07D878 07D878 IJFFBZZN IJFFZZZN IJFFBZZZ IJFFZZZZ 07E278 07E278 07E278 07E278 07E278 CSECT ENTRY ILBDSAEO ILBDSAE1 07F128 07F170 07F128 CSECT ILBDMNSO 07F120 07F120 CSECT ENTRY ILBDDSPO ILBDDSP1 07E628 07EA28 07E628 CSECT ILBDIMLO 07FOCS 07FOC8 CSECT ENTRY ENTRY ENTRY ENTRY ENTRY ENTRY ENTRY ENTRY ILBDDSSO ILBDDSS1 ILBDDSS2 ILBDDSS3 ILBDDSS4 ILBDDSS5 ILBDDSS6 ILBDDSS7 ILBDDSSS 07EDAO 07FOOO 07EFF8 07FOB8 07EDC6 07£E72 07EED2 07EE9C 07EDF6 01EDAO CSECT ENTRY ENTRY IJJCPDV IJJCPDVl IJJCPDV2 07EB58 07EB58 07EB58 07EB58 WXTRN WXTRN STXITPSW I LBDDBG 2 PHASE XFR-AD LOCORE HICORE DSK-AD ESD TYPE LABEL PdASE*** 07D878 07D878 07F2AF 05F OF 4 CSECT CSECT * ENTRY ENTRY ENTRY • • • UNREFERENCED SYMBOLS RELOCATAELE -® 002 UNRESOLVED ADDRESS CONStANTS I I ASSGN SYS009,X'492' // EXEC Figure 66. Sample Dump Resulting from Abnormal Termination (Part 4 of 6) Program Checkout 257 OS03I PROGRAN CHECK INTERRUPTION - HEX LOCATION 07DFDc - cONDITION ceDE 2 - DATA £XC£FTION CSCOI JOB DATACHK CMlCELEr:; DATACHK GR O-F FP REG CR O-F COMREG ceoooo 000020 000040 COO060 COO080 OOOOAO COOOCO 000360 C00380 C003AO C003CO C003EO 000400 000420 000440 000460 000480 0004AO C004CO 0004EO 000500 000520 000540 000560 000580 0005AO C005eO 0005EO 000600 C00620 000640 000660 00000001 0007D878 00000000 FFFFFFFF 00000000 00000001 00070878 00000000 FFFFFFFF 00000000 0007D97A 0007DEAO 00000000 00000000 00000000 5007E22C 0007DC78 00000000 00000000 00000000 0007D978 0007D97A 00000000 00000000 C4000000 0007DB40 0007E628 00000000 00000000 00000200 00000000 07000000 00000E68 040COOOO 00000400 00000000 00000000 F1F061F0 0011D7FF 38983D4A 3EFOOOOO 00000000 0000528C OOOOFOOO 40800000 00000000 00009812 00081018 00000000 00005388 OOOOCOAO 010DOOOO 00080700 0000318C 00000000 00830083 00830083 06B006BO 00B006BO 06604590 06B041BB 42BOA001 00000000 04000000 00000E58 OOOCOOOO 00020007 00000000 00000000 000074DA 00000000 0000980C 00020001 000002CO 00000000 00000000 EFFCC798 04080000 1207F003 00000000 00000360 00000000 012A88EA 0000C09E. 00000000 00000000 00000000 070C2000 040COOOO 040COOOO 00000000 OOOOOOOE 00000000 000OO71E 00OOO9BE 000008F8 00000000 00000000 FOOOFOOO 0007F2AF 374C3750 372CC010 00000448 063E05FA 0014002C 00008350 00000000 00000544 00000000 00000005 00000000 0000A1E8' 00000360 00000000 00000008 00830083 00000000 00000010 375438F1 00000010 COC00340 00003A40 00030000 00005100 000030DO 00000000 00000000 03C10401 0001D1FF 00000000 00000000 00000000 00020406 00830083 00000000 0017D7FF FOFOF2F7 000070EC 4040404(" 00001F42 000{)5F78 000051B4 000004FO 0000BC88 00000000 OOOODDOO FF010114 OOOAOOOO 8000150E 04FC0552 080AOCOl:: 00830083 00000000 F97F5CD3 F3F2F7F5 00000000 40404000 00004058 00000000 0000520C 000070F5 00007F50 000031A6 OOOOCOFO 015502A0 00001000 900015CO 00000000 00183048 00830083 C4C1E3C1 A8A07CDO 00003544 000030DC 40404040 00004F5E 000072F5 00100010 0OO03C5A 000032FC 00000000 0000D5FO FFOOO045 00002000 400053C8 00000000 607890A8 00830083 C3C8D240 00A63891 00000000 34440000 40404000 00007308 00005204 00000000 00000000 00003314 00000000 00005378 0000C6EO 00003000 00004F5E 00000000 00000000 00830083 00000083 06E006BO 06B006BO 066006BO 06A85890 960CAOOF 83838300 4EE0056A 06B006BO 06B006BO 041441FO 07FF960C 80020000 068006BO 41EBOOlF 06B006BO 92161211 AOOF4400 00007888 06B006BO 41B80010 06B006BO 41100660 00000000 068006BO 18F69503 '06B041BB 41F09314 920003CF 0000BBA5 06B00680 04454110 001F06BO 94633006 928305C9 Figure 66. 258 CD 0007DE78 0007DF80 0007DBA8 0007E1FC 00000000 00000000 004000FF 0100DOOO 00000000 00000000 BG AODR IS 000360 00000000 000076CE 08000000 0000097A 00000000 00000000 --SAME-F261F7F3 0007F2AF 3D4BOOOO 363C36BC 036010EO 00002742 0300505E 0000070E 000065F8 000088C8 00200000 00000000 00000000 00003868 000016e4 00000000 00000EE8 00830083 ~ \~) --SA~E-- 00830083 06B006BO 06B006BO 06D447FO 001B4570 58B00514 B52~011F Sample Dump Resulting from Abnormal Termination (Part 5 of 6) DATACHK 07C800 07D820 07C840 07[;860 07C880 07C8AO On8CO 07I:8EO 07[;900 07I:920 07r::940 07I:960 07[;980 07I:9A0 07DA40. 07tA60' 07DA80 07I:AAO 07CACO 07DBOO 07CB20 07DB40 07CE60 07tB80 07DEAO 07CBCO 07CEEO 07DCOO 07CC20 OnC40 07CC60 07tC80 07CCAO oncco 07DCEO 07tDOO 07CD60 07W80 07CtAO 07r:DCO 07CDEO 07DEOO 07I:E20 07r::E40 o tE60 07DE80 -o7I:EAO OnECO 07CEEO onFOO 07CF20 07DF40 07CF60 07DF80 07CFAO 07DFCO onFEO 07EOOO 07E020 07E040 07E060 07E080 07EOAO 07EOCO onOEO 07E100 07E120 07E140 D7C8C1E2 0007CC78 5007E22C 00000000 47FOF082 0011D7FF 00000000 0007DBA8 58EOCOOO 90ECDOOC 0007DEAO 00000000 C7C8C9D1 FOF1F2F3 4 4 4 4 6COOOOOO E2FOFOF8 0107[;AD8 C55C5C5C 0007D97A 0007D978 00000000 0007D878 0007F8c8 00000000 0007E1FC 58DOFOCA 185D989F 0007DC78 FlF061FO D2D3D4D5 F4FOF1F2 0 0000 0000000 40400162 20000064 0007DFE2 0007DE78 0007DBA8 00000000 0011D7FF 00000000 00000000 0007D878 4770FOA2 D0480719 0007E1E2 FOF74BF3 0000000 000001 04000000 0007DB40 00000000 ~Q008200 00000000 0007DC10 00000000 00000000 0007DCF8 FFFFFFFF 00008000 0207DD38 00198800 F14C9108 1130EOO01 001447FO 58140038 4BEOF250 FlA85820 F23211780 117FOF16E 701000llB 0000D8E6 4011011040 11011011040 4007DF511 0007D978 0007E628 50002000 07070607 E3C5E2E3 F0325810 0 00100 00000000 0OO7F120 0007E07E 5B5BC2D6 60D9C5C3 051F0001 4500FOOC 5870D1F4 4830C03A C03A4A30 48206000 C03C4140 E00092110 1I00llF6F9 60385810 C004051F 60004930 00014004 4500FOOC 5000F008 58FOC004 41FOC028 58FOC018 4007F128 01010014 QooQOlQ81.0007DA98 20000000 00000000 00000000 00000014 --SAME-00000000 00008000 00000000 0207DD10 FFFFFFFF FFFF[;BE1 00000107 0007DBE8 20000050 4120EOOO 00190600 120011780 401511710 F09119180 89000019 88000019 FOC411100 000c1BIIO S010F20A 4110F20A D20lF210 EOO05810 F20A1I122 000058EO Fl111111800 F22E91100 41EOF14C 9101F233 00000000 00000000 0007D9E8 5007E22C --SAME-110404040 40110110110 0007E628 00 0 7I:E78 0007DBIIO 0007DBA8 0007DE78 0007FOOO 4A50F060 4A20F060 07070707 00000000 D9E4D540 0007D878 F0789101 10004710 o 00lA8 D4C E3C 0000001C 00000000 0OO7E628 0OO7FOC8 0007E092 0007E146 D7C5D540 5B5BC2C3 D6D9C4BE 58FOC004 4004F6FO 40404076 0007D9E8 OA024100 D2016000 C038D201 4A306000 4E30D208 601C4E30 D208D705 IIC20C03A 1AII25BIIO 601E4820 60004C20 6011114830 601C4E30 1I01l040FO 58FOC004 D20018111 58F01010 00014004 F7F14040 C03E58FO C024078F F7F440110 40585810 00000000 OA025800 11500FOOC 00000000 051FOOOl 4004F7F7 D2021025 F00158FO 07FF5810 C01C07Fl Figure 66. 0007E1FC 0007DF80 0000844B 00000000 00COC8E6 182F07F1 00000000 0007DEAO 9610D048 07FF0700 C3D6C2C6 F54BFOF8 107DB78 01010014 0007DA20 00000000 00000014 0007D878 00000001 E56753BE 00000000 0000DB64 0007D878 00000000 0007DC78 92FFEOOO 0007E1FC F3FOFOFO 10604780 0001FOF1 000040D5 00000000 00000000 86BCF018 0007DBA3 0007D878 00000001 00000000 05F00700 80000015 D7C8C1E2 0007D978 00000000 47FOFOAC 0007[;878 E3C5E2E3 0001C1C2 F2F3F4FO E8C34000 00000000 0007E278 41EOE001 00640063 F1F2F3F4 00404040 00000000 1160E2E8 58201044 00000000 00000000 00000000 86BCF018 00000000 00000000 0007E278 41E0E001 00640063 00000000 1168E2E8 58201044 00000000 00000000 E2FOFOF8 0207DBA8 0007F170 00000000 40400272 00000064 0007F128 00000107 2COOOO14 20000082 00000000 47000000 F0741120E 110154710 113EEOOOO ·58EIIOOOO 5010F202 F21120AOO F23E58FO F2325820 4780F16E 0007r::F08 F16E9025 0007I:B90 4120EOOO 4710F132 0007E3B8 0000FOC4 00009601 FOE84100 89EOOO19 1A401l1EE D20lF200 91801002 FlF207FF F23A58EO 001000llB 00000000 F21290BC 00000000 47000000 47FOF15E 02050202 18E44BEO F232117FO 0008117FO 88EOOO19 000012EE 40069108 11710Fl111 117FOF1011 F23E58FII 00000000 00000000 40110110110 0007E450 OOOOFFFF 91084015 0007DCEO F24C430E F01l611800 FOC418EII 19EOll780 11780F132 40154780 OA079108 0000F233 00100A09 00000000 0007D9E8 40110110110 02050202 FFFFFFFF 00000000 00000000 00008900 F23047FO IIBEOF24E F08Cll100 50EOF1F2 FllC18E4 1102011710 lB009101 1I1EOF11C 00000000 0007DBIIO 11040110110 1101100000 0007DF80 0007E1FC 0007DE40 1830117FO 00000000 C9D3C2C4 F0329601 00000000 0007DE40 0007D878 00014720 F036D200 E2C1D4D7 D6E2E8FO 00000000 0007DF78 ·0000D8E6 0007D878 0007DF78 50002000 D3C54040 F3F09002 OOOOOOQO 000 D97A 0OO7DF70 0007E174 D3D6E2C5 051F0001 5820D1F4 D20058FO 601CC038 D705D208 D208D208 C0385040 C03A1AII2 D208F331 05lFOO02 45EOFOOC 400F5800 5810COOC D200911EF D2004110 OA024100 40404040 101045EO 58FOC004 9802D068 0007E05E 0007E05E 5B5BC2C6 4004F5F7 4110C040 C00805EF 58FOC004 D208940F 940FD20E D21458EO 5BIIOC038 603At20E 000000111 5020D1F4 D2205000 07F15800 10201801 C0500A02 D201158FO 5810D204 F0085020 051F0001 47FEOO 0007E100 400B1F88 C3D4E4D3 1I04040D2 S800D200 5810D200 051F0001 D20E4F30 4F30D208 D214D200 501l0D218 96F0603D ODOO01FC 5870D1F4 D21C5800 D21C5000 1811011110 4110COIIO C00805EF 58FOC028 D1F85880 4004F7F8 0007DB40 0007D9E8 0007DEAO 0007EDAO 00000000 C007D878 D0689120 F0549110 00 D E8 007E05E 0OO7E14C 00000001 COOOOOOO 9640D048 01000000 5007E22C 0007DF80 1I007E88E 00000000 00000000 EOO04780 000002EO 0007DA6 D7C5D 40 0007E1A4 lcaOO01A E6D6D9D2 58FOC004 5000F008 5020D1F4 40404004 60004830 1111106002 FA306050 D20060113 051FOO01 D21370·00 07F158FO D22011830 COOII051F 5000F008 184005FO 96101020 071F1841 60388000 5820C02C E2E3E4E~6E7E8E9 ~2F3F4F ~M~DB4~ M 0007DBA8I0007D9~~ ~84005FO 96101020 4004F6F4 D2084030 4030601c 6038EOOO 58EOD218 58FOCOOII 0038FFFF 5810D220 C0205000 D22058FO COll805FO 5800D2011 5810D2011 91201010 DlF8D213 40404080 0007CEAO 0007D97A 00000000 900EFOOA 80000015 C55C5C5C 0007DAD8 58COFOC6 98CEF03A 0007D878 D9E4D540 C3C4C5C6 AD Sample Dump Resulting from Abnormal Termination (Part 6 of 6) Program Checkout 259 EXECUTION STATISTICS The DOS/VS COBOL ~ompiler provides several methods for testing, debugging, and optimizing programs. Use of the symbolic debugging features is an efficient method for testing and debugging a program, and is described in the chapter "Symbolic Debugging Features". The chapter entitled "Program Checkout" contains information useful for testing and debugging programs without the symbolic debugging featuresQ The OPT option, described in the chapter "Preparing COBOL Programs for Processing", is an efficient method for automatically optimizing a program. 3. To obtain execution statistics if COUNT is requested for one of many program units, either all programs must be compiled by at least DOS/VS Release 2 compiler, or the program must terminate in a program unit compiled on at least a DOS/VS COBOL Release 2 compiler, or the program must terminate in at least a DOS/VS COBOL library Release 2 subroutine. 4. If COUNT is requested, the user must specify the SIZE parameter on his load module EXEC card. The dynamic space required for COUNT is approximately 512 bytes plus 80 bytes per program unit being monitored, and four bytes per count block (see the compiler output statistics). The requirements for each program unit are rounded to the next 128-byte boundary. 5. The OTHERWISE verb is treated as if the user coded the ELSE verb. This chapter describes execution statistics -- how they may be obtained, some sample output, and some uses of the output. OBTAINING EXECUTION STATISTICS Execution statistics are invoked via the CBL card at compile time. No source language coding changes are required. The execution frequency statistics option, COUNT, facilitates testing, debugging, and optimizing by providing the programmer with verb counts at the following times. • STOP RUN • GOBACK in the main program Debugging and Testing • Abnormal termination of a job When COUNT is specified, the following items should be taken into account: 1. If COUNT and STXIT are desired, either STIXIT must be requested in the program unit requesting COUNT, or, the program unit requesting COUNT must be entered before the program unit requesting STIXIT. The execution statistics clearly identify the following areas of the program: • Untested and weakly tested areas of the program • The last blocks entered and executed • Possible sources of unnecessary code 2. 260 When COUNT is specified, the compiler divides the program into blocks of verbs. When the statistics are printed, the last block of verbs executed in each program unit is indicated. If the program abnormally terminates, the statement causing the abnormal termination can be determined (by using the symbolic debugging features, for example). The programmer should then subtract one from the verb count for each verb flagged which follows the abending verb. • The most heavily used parts of the program; that is, those parts most susceptible to changes. OPTIMIZATION METHODS Based on execution frequency and timer statistics, the following types of optimization can be implemented by the user: • Resequencing the program Common Expression Elimination • Insight into SYMDMP This technique is designed to eliminate unnecessary arithmetic calculations. An arithmetic expression calculation is considered unnecessary if it represents a value calculated elsewhere that will always be used without modification. One such example would be an arithmetic expression whose operands are not redefined or reevaluated, but the expression is recalculated. • Common expression elimination • Backward movement • Unrolling • Jamming • Unswitching Backward Movement • Incorporating procedures inline Resequencing the Program This technique facilitates moving calculations and other operations from an area of code frequently executed to an area less frequently executed. For example, an expression calculated within a PERFORMed procedure (using a Format 2~ 3, or 4 PERFORM statement) which always yields the same value for that PERFORM statement could be calculated in-line or in another procedure which would be PERFORMed just prior to the regularly PERFORMed procedure. Another example might be an expression which is calculated in many procedures which are often PERFORMed in succession. This expression could be removed from all the procedures and calculated just once prior to the procedures. The COBOL Procedure Division should be organized as follows: Unrollinq • Tabling • Efficiency guidelines Note, however, that each optimization technique can result in more inefficient code if the statistics used in optimizing the program are not representative of the normal program flow. In addition, it is recommended that any optimization methods implemented be documented in the program. 1. 2. 3. All frequently-used paragraphs or sections should be located near the routines that use them. All infrequently-used paragraphs or sections should be grouped together and apart from frequently-used routines. The most frequently-referenced data items should be placed in the beginning of the Working-Storage Sections. Procedures which are frequently executed may be expanded so that the statements within the procedure are repeated, with slight modification, to reduce the procedure overhead. For example, PERFORM YEARLY-GROSS-CALC VARYING WEEK-NO FROM 1 BY 1 UNTIL WEEK-NO GREATER THAN 52. YEARLY-GROSS-CALC. ADD GROSS-SALARY (WEEK-NO) TO YEARLY-GROSS could be replaced by Insight into SYMDMP Output The area where dynamic symbolic dumps are to be used can be pOinted to by the execution statistics. Knowledge of what area of code is executed and how often it is executed should give the user information on what sections should be further investigated. PERFORM YEARLY-GRaSS-CALC VARYING WEEK-NC FROM 1 BY 4 UNTIL WEEK-NO GREATER THAN 52. YEARLY-GRaSS-CALC. ADD GROSS-SALARY (WEEK-NO), GROSS-SALARY (WEEK-NO+1), Execution statistics 260.1 ~ ADD JOB-COST (COUNT) TO TOTAL-JOB-COST. IF SWITCH = 0 ADD JOB-EXPENSE (COUNT) TO ~OTAL-EXPENSES ELSE ADD JOB-EXPENSE (COUNT) OVERHEAD TO TOTAL-EXPENSES. ADD JOB-INCOME (COUNT) TO TOTAL-INCOME. IF SWITCH = 0 ADD JOB-PROFIT (COUNT) TO TOTAL-PROFITS ELSE COMPUTE TOTAL-PROFITS = TOTAL-PROFITS + JOB-INCOME (COUNT) - JOB-COST (COUNT) - JOB-EXPENSE (COUNT) - OVERHEAD. GROSS-SALARY (WEEK-NO+2) , GROSS SALARY (WEEK-NO+3) YEARLY-GROSS. In addition, indexing might be useful in this example. Jamming In some instances, two procedures can be merged into one procedure, thereby saving some procedure overhead. An example of this might be replacing by COUNT = 0 IF SWITCH = 0 PERFORM JOB-TOTAL-CAL-O JOB-NUM TIMES ELSE PERFORM JOB-TOTAL-CAL-l JOB-NUM TIMES. MOVE 0 TO WEEK-NUM •. PERFORM YEARLY-GROSS-CAL 52 TIMES. MOVE 0 TO WEEK-NUM. PERFORM YEARLY-NET-CAL 52 TIMES. YEARLY-GROSS-CAL. ADD 1 TO WEEK - NUM,. ADD GROSS-SALARY (WEEK-NUM) to YEARLY-GROSS. YEARLY-NET-CAL. ADD 1 TO WEEK-NUM. ADD NET-SALARY (WEEK-NUM) TO YEARLY-NET. by MOVE 0 TO WEEK-NUM. PERFORM YEARLY-CAL 52 TIMES. YEARLY-CAL. ADD 1 TO WEEK-NUM. ADD GROSS-SALARY (WEEK-NUM) to YEARLY-GROSS. ADD NET-SALARY (WEEK-NUM) TO YEARLY-NET. JOB-TOTAL-CAL-O. ADD 1 TO COUNT. ADD JOB-COST (COUNT) TO TOTAL-JOB-COST. ADD JOB-EXPENSE (COUNT) TO TOTAL-EXPENSES. ADD JOB-INCOME (COUNT) TO TOTAL-INCOME. ADD JOB-PROFIT (COUNT) TO TOTAL-PROFITS. JOB-TOTAL-CAL-l. ADD 1 TO COUNT ADD JOB-COST (COUNT) TO TOTAL-JOB-COST ADD JOB-EXPENSE (COUNT), OVERHEAD TO TOTAL-EXPENSE ADD JOB-INCOME (COUNT) TO TOTAL-INCOME COMPUTE TOTAL-PROFITS = TOTAL-PROFITS + JOB-INCOME (COUNT) - JOB-COST (COUNT) - JOB-EXPENSE (COUNT) - OVERHEAD. Unswitching Incorporating procedures Inline Procedures may contain tests that result in the same action for any set of executions of that procedure. In such a case, the test can be removed from the procedure and the procedure duplicated. For example, if "SWITCH" is not changed within the loop, replace COUNT=O PERFORM TIMES. Based on module size, number of repetitions, modification activities, future expansion considerations, and frequency statistics, small procedures can be moved in-line to minimize overhead requirements. JOBS-TOTAL-CAL JOB-NUM Tabling JOB-TO'I'AL-CAL. ADD 1 TO C()UNT. 260.2 This technique is designed to replace many IF statements by one table look-up stat@ment, or by one computed GO TO statement. For example, if'- the same data-item is tested in many successive IF statements to set the value of another data-item to some constant, and the" range of tested values of the original data-item is limited, then a predetermined table of values could be used to assign the value of the second data-item. Similarly, many consecutive statements of the form WORKING WITH DIAGNOSTIC MESSAGES 1. IF data-item-1=some-constant GO TO some-procedure could be replaced by one computed GO TO statement. Efficiency Guidelines Based on execution frequency statistics, the following types of coding inefficiencies may be removede Approach the diagnostic messages in the order in which they appear on the source listing. It is possible to get compound diagnostic messages. Frequently~ an earlier diagnostic message indicates the reason for a later diagnostic message. For example, a missing quotation mark for an alphabetic or alphanumeric literal could involve the inclusion of some clauses not intended for that particular literal. This could cause an apparently valid clause to be diagnosed as invalid because it is not complete, or because it is in conflict with something that preceded it. 2 •. Check for missing or superfluous punctuation, or other errors of this type. 3. Frequently., a seemingly meaningless message is clarified when the valid syntax or format of the clause or statement in question is referenced. 4. Statement numbers are generated when a verb or procedure-name is encountered. 1. Unaligned decimal places in arithmetic or numeric comparison operands. 2. Different size operands in moves, comparisons, or arithmetic operations. 3. Mixed usage in arithmetic or numeric comparison operands. GENERATION OF DIAGNOSTIC MESSAGES 4. Display usage in arithmetic operands or one numeric operand and one display operand in a comparison. 5. SYNC missing for COMP or COMP-1, -2, or -4 items.- The compiler scans the statement, element by element" to determine whether the words are combined in a meaningful manner. Based upon the elements that have already been scanned, there are only certain words or elements that can be correctly encountered •. 6. Inefficient COMP type picture; that is, no sign or more than 9 digits in a COMP item and no sign, even number of digits, or more than 16 digits in COMP-3 items. 7. Noncomputational subscripts. If the anticipated elements are not encountered, a diagnostic message is produced. Some errors may not be uncovered until information from various sections of the program is combined and the inconsistency is noted. Errors uncovered in this manner can produce a slightly different message format than those uncovered when the actual source text is still available. The message that is made unique through that particular error may not contain, for example, the actual source statement that produced the error. DIAGNOSTIC MESSAGES Diagnostic messages are generated by the compiler and listed on SYSLST when errors are found in the source program. Note: Diagnostic messages (except FIPS diagnostic messages) are suppressed when the NOERRS option is in effect. Errors that appear to be identical are diagnosed in a slightly different manner, depending on where they were encountered by the compiler and how they fit within the context of valid syntax. For example i a period missing from the end of the Working-Storage section header is diagnosed specifically as a period required. There is no other information that can appear at Execution Statistics 260.3 that point. However, if at the end of a data item description entry, an element is encountered that is not valid at that point, such as the digits 02, it is diagnosed as invalid. Any clauses associated with the 02 entry which conflict with the clauses in the previous entry (the one that contained the missing period), are diagnosed. Thus, a missing period produces a different type of diagnostic message in one situation than in the other. If an error occurs during compilation of an ON statement, the diagnostic message may refer to the previous statement number. lSln D STATEMENT OUT OF SEQUENCE. I • If a D-level diagnostic is generated and the error is a compiler error, the job will terminate via the CANCEL macro and produce a dump. • The following messages will not be issued during a SYNTAX-only compilation or during a CSYNTAX compilation if a C-level error in the diagnostic number ILAOxxx to ILA4xxx range was encountered: ILA5001I COMPILER ERROR. ABANDONED. COMPILATION ILA5002I COMPILER ERROR. ABANDONED .. COMPILATION ILA5003I DIVISOR IS ZERO. ALL 9'S. ILA5004I ALPHANUMERIC SENDING FIELD TOO BIG. 18 LOW ORDER BYTES USED. Notes: • If an E-level diagnostic is generated, the LINK option is cancelled, and any linkage editor control statements in the job stream are invalid. For this reason, the following message is issued by the Job Control Processor following the first linkage editor control statement encountered: 260.4 RESULT WILL BE ILA5005I C0l1P1LER ERROR. ABANDONED. COl1PILATION ILA5025I ADVANCING OR POSITIONING OPTION ILLEGAL FOR NON-SEQUENTIAL FILE. IGNORED. ILA5006I COMPILER ERROR. ABANDONED. COl1P1LATION ILA5026I EXHIBIT OPERAND GREATER THAN 256 BYTES. LENGTH OF 256 ASSUMED. ILA5027I ILA50071 COMPILER ERROR. ABANDONED. COl1PILATION NEGATIVE OR ZERO SUBSCRIPT INVALID. CHANGED TO POSITIVE 1. ILA5028I ILA5008I COMPILER ERROR. ABANDONED. C0l1P1LATION RESULT FIELD WILL HAVE POSITIVE SIGN. ILA5029I 1LA50091 C0l1P1LER ERROR. ABANDONED. COl1PILATION STOP RUN GENERATED AFTER LAST STATEMENT. ILA5030I ILA50101 HIGH ORDER TRUNCATION OF THE CONSTANT DID OCCUR. ILA5011I HIGH ORDER TRUNCATION l1IGHT OCCUR. INSTEAD OF AN MVCL INSTRUCTION, AN MVC OR A CALL TO AN OBJECT-TIME SUBROUTINE HAS BEEN GENERATED BECAUSE THE FIELDS OVERLAP DESCRUCTIVELY. ILA5031I ILA5012I LOST INTERl1EDIATE RESULT ATTRIBUTES IN 'XINTR' TABLE. COMPILATION ABANDONED. ILA5013I ILLEGAL COMPARISON OF TWO NUl1ERIC LITERALS. STATEl1ENT DISCARDED. AN MVCL INSTRUCTION HAS BEEN GENERATED FOR A MOVE INVOLVING AT LEAST ONE LINKAGE SECTION DATA-NAME. IF THE FIELDS OVERLAP DESTRUCTIVELY THE MOVE WILL NOT BE PERFORMED. ILA5014I KEY IN SEARCH ALL AT INVALID OFFSET. STATEMENT DISCARDED. ILA50151 INVALID USE OF SPECIAL REGISTER. SUBSTITUTING-TALLY. ILA5016I l10RE THAN 255 SUBSCRIPT ADDRESS CELLS USED. PROGRAl1 CANNOT EXECUTE CORRECTLY. ILA5017I INVALID ADVANCING OPTION FOR A DTFCD FILE. USING STACKER1. ILA5018I INTEGER IN POSITIONING OPTION NOT BETWEEN 0 AND 3. 1 ASSUl1ED. ILA5019I PUNCH STACKER SELECT SPECIFIED FOR A DTFPR FILE. USING 'SKIP TO CHANNEL 11. ILA5020I IDENTIFIER NAl1E{S) IN EXHIBIT EXCEEDS l1AXIMUM. TRUNCATED TO 120 CHARACTERS. ILA5021I ILA5022I INTEGER IN ADVANCING OR POSITIONING OPTION NOT POSITIVE. POSITIVE ASSUftED. MORE THAN 2-DIGIT INTEGER IN ADVANCING OPTION. USING INTEGER 1. ILA5023I EOP INVALID FOR DOUBLE-BUFFERED FILE. IGNORED. ILA5024I END-OF-PAGE OPTION REQUESTED FOR NON-DTFPR FILE. IGNORED. In addition, no message of the form ILA6xxx will be issued. LINKAGE EDITOR OUTPUT The Linkage Editor produces diagnostic messages, console messages, and a storage map. For a complete description of output and error messages from the Linkage Editor, see the publication DOSIVS System Control Statements. Output resulting from the link editing of a COBOL program is discussed in the chapter "Interpreting Output." EXECUTION TIME MESSAGES When an error condition that is recognized by compiler-generated code occurs during execution, an error message is written on SYSLST and often SYSLOG. Messages that normally appear on SYSLOG are provided with a code indicating from which partition the message originated~ A complete list of execution-time messages can be found in "Appendix I: Diagnostic Messages." Program Checkout 261 RECORDING PROGRAM STATUS When a program is expected to run for an extended period of time, provision should be made for taking checkpoint information periodically during the run. A checkpoint is the recording of the status of a problem program and storage (including input/output status and the contents of the general registers). Thus, it provides a means of restarting the job at an intermediate checkpoint position rather than at the beginning, if for any reason processing is terminated before the normal end of the program. For example, a job of higher priority may require immediate processing, or some malfunction (such as a,power failure) may occur and cause an interruption. Checkpoints are taken using the COBOL RERUN clause. Restart is a means of resuming the execution of the program from one of the checkpoints rather than from the beginning of the job. The ability to restart is provided through the RSTRT job control statement. Full details on using this statement are in- -DOSIVS System Control Statements. TAKING A CHECKPOINT In order to take a checkpoint, the programmer must specify the source language RERUN clause and must define the file upon which checkpoint records are to be written (for example, ASSGN, EXTEND, etc.). Checkpoin~ information must be written on a 2311, 2314, 2319,3330,3340, 3350, or fixed block mass 1 storage device or on a magnetic tape--either 7- or 9-track. Checkpoint records cannot be embedded in one of the problem program's output files, that is, the program must establish a separate file exclusively for checkpoint records. Checkpoints cannot be written on VSAM files. In designing a program for which checkpoints are to be taken, the programmer should consider the fact that, upon restarting, the program must be able to continue as though it had just reached that point in the program at which termination occurred. Hence, the programmer should ensure that: 1. File handling is such as to permit easy reconstruction of the status of the system as it existed at the time of checkpoint was taken. For example, when multifile reels are used, the operator should be informed (by message) as to which file is in use at the time a checkpoint is to be taken. He requires this information at restart time. 2. The contents of files are not altered between the time of the checkpoint and the time of the restart. For seguential files, all records written on the file at the time the checkpoint is taken should be unaltered at restart time. For nonseguential files, care must be taken to design the program so that a restart will not duplicate work that has been completed between checkpoint time and restart time. For example, suppose that checkpoint 5 is taken. By adding an amount representing the interest due, account XYZ is updated on a direct-access file that was opened with the 1-0 option. If the program is restarted from checkpoint 5 and if the interest is recalculated and again added to account XYZ, incorrect results will be produced. RERUN CLAUSE The presence of the RERUN clause in the source program causes the CHKPT macro instruction to be issued at the specified interval. When the CHKPT .acro instruction is issued, the following information is saved: 1. Information for the Restart and other supervisor or job control routines. 2. The general registers. 3. Bytes 8 through 10, and 12 through 45 of the Communication Region. 4. The problem progra. area. 5. All file protection extents for files assigned to mass storage devices if the extents are attached to logical units contained in the program for which checkpoints are taken. Since the COBOL RERUN clause provides a linkage to the system CHKPT macro instruction, any warnings and restrictions on the use of this macro instruction also apply to the use of the RERUN clause. See the publication DOS/VS Supervisor and I/O Macros for a complete description of the CHKPT macro instruction. 262 If the program is modular in design, RERUN statements must be included in all modules that handle files for which checkpoints are to be taken. (When an entry point of a module containing a RERUN statement is encountered, a COBOL subroutine, ILBDCKPO, is called. ILBDCKPO enters the files of the module into the chapter "Preparing COBOL Programs For Processing." All other job control statements applicable to the job step should be the same as when the job was originally run. If necessary, the channel and unit addresses for the II ASSGN control statements may be changed. list of files to be repositioned.) Repositioning to the proper record will not occur for any files that were defined in modules other than those containing RERUN statements. !oreover, a restart from any given checkpoint may not reposition other tapes on which checkpoints are stored. Note, too, that only one disk checkpoint file can be used. 2. Rewind all tapes used by the program being restarted, and mount them on devices assigned to the symbolic units required by the program. If multivolume files are used~ mount (on the primary unit) the reel being used at the time that the checkpoint was taken, and rewind it. If multifile volumes are used, position the reel to the start of the file referenced at the time the checkpoint is being taken. 3. Reposition any card file so that only cards not yet read when the checkpoint was taken are in the card reader. 4. Execute the job. 5. A checkpointed program can be restarted only in the same partition. The virtual partition must start at the same location as when the program was checkpointed and its end address must not be lower than at that time. This is because checkpoint dumps the entire virtual partition. RESTARTING A PROGRA! If the programmer requests checkpoints in his job by means of the COBOL RERUN clause, the following message is given each time a checkpoint is taken: OC001 CHKPT nnnn HAS BEEN TAKEN ON SYSxxx nnnn is the 4-character identification of the checkpoint record. To restart a job from a checkpoint, the following steps are required: 1. Replace the // EXEC statement with a // RSTRT statement. The format of the RSTRT statement is discussed in the Program Checkout 263 APPENDIX A: The following is a sample COBOL program and the output listing resulting from its compilation, link editing, and execution. The program creates a blocked, unlabeled, standard sequential file, writes it out on tape, and then reads it back in. It also does a check on the field called NO-OF-DEPENDENTS. All data records in the file are displayed. Those with a zero in the NO-OF-DEPENDENTS field are displayed with the special character Z. The records SAMPLE PROGRAM OUTPUT of the file are not altered from the time of creation, despite the fact that the NO-OF-DEPENDENTS field is changed for display purposes. The individual records of the file are created using the subscripting technique. The output formats illustrated in the listing are described in the chapter "Interpreting output." // JOB SAMPLE // OPTION NODECK,LINK,LIST,LISTX,SYM,ERRS // EXEC FCOBOL 1 IBM DOS VS COBOL REL 1.0 PP NO. 5746-CBl 08.17.32 10/02/73 CBL QUOTE,OPT,SXREF,LVL=A 00001 000010 IDENTIFICATION DIVISION. 00002 000020 PROGRAM-ID. TESTRUN. 00003 AUTHOR. PROGRAMMER NAME. 00004 INSTALLATION. NEW YORK DEVELOPNENT CENTER 00005 DATE-WRITTEN. APRIL 18,1973 00006 DATE-COMPILED. 10/02/73 00007 REMARKS. THIS PROGRAM HAS BEEN WRITTEN AS A SAMPLE PROGRAM FOR OOOOS COBOL USERS. IT CREATES AN OUTPUT FILE AND READS IT BACK 00009 AS INPUT. 00010 000100 00011 000110 ENVIRONMENT DIVISION. 00012 000120 CONFIGURATION SECTION. 00013 000130 SOURCE-COMPUTER. IBM-360-H50. 00014 000140 OBJECT-COMPUTER. IBM-370. 00015 000150 INPUT-OUTPUT SECTION. 00016 000160 FILE-CONTROL. 00017 000170 SELECT FILE-1 ASSIGN TO SYSOOS-UT-2400-S. 00018 000180 SELECT FILE-2 ASSIGN TO SYSOOS-UT-2400-S. 00019 000190 00020 000200 DATA DIVISION. 00021 000210 FILE SECTION. 00022 000220 FD FILE-l 00023 000230 LABEL RECORDS ARE OMITTED 00024 000240 BLOCK CONTAINS 5 RECORDS 00025 000250 RECORDING MODE IS F 00026 000255 RECORD CONTAINS 20 CHARACTERS 00027 000260 DATA RECORD IS RECORD-1. 00028 000270 01 RECORD-l. 00029 05 FIELD-A PIC X(20). 00030 000290 FD FILE-2 00031 000300 LABEL RECORDS ARE OMITTED 00032 000310 BLOCK CONTAINS 5 RECORDS 00033 000320 RECORD CONTAINS 20 CHARACTERS 00034 000330 RECORDING MODE IS F 00035 000340 DATA RECORD IS RECORD-2. 00036 000350 01 RECORD-2. 00037 05 FIELD-A PIC X(20). Appendix A: Sample Program Output 265 IB.r.~ 00038 00039 00040 00041 00042 00043 00044 00045 00046 00047 00048 00049 00050 00051 00052 00053 00054 00055 00056 00057 00058 00059 00060 00061 C0062 00063 00064 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080 266 DOS VS COBOL REL l.0 PP NO. 574f5-CBl 000370 WORRING-STORAGE SECTION. 000380 01 FILLER. 02 ROUNT PIC S99 COMP SYNC. 000400 02 ALPHABET PIC X(26) VALUE IS "ABCDEFGHIJKLMNOPQRSTUVWXYZ". 000410 02 ALPHA REDEFINES ALPHABET PIC X OCCURS 26 TIMES. 000420 02 NUMBR PIC S99 COMP SYNC. 000430 02 DEPENDENTS PIC X(26) ~ALUE ·01234012340123401234012340·. 000440 02 DEPEND REDEFINES DEPENDiN~S PIC X OCCURS 26 TIMES. 000450 01 WORR-RECORD. 000460 05 NAME-FIELD PIC X. 000470 05 FILLER PIC X VALUE IS SPACE. 05 RECORD-NO PIC 9999. 000480 000490 05 FILLER PIC X VALUE IS SPACE. 000500 05 LOCATION PIC AAA VALUE IS "NYC". 000510 05 FILLER PIC X VALUE IS SPACE. 000520 05 NO-OF-DEPENDENTS PIC XX. 000530 05 FILLER PIC X(7) VALUE IS SPACES. 000540 000550 PROCEDURE DIVISION. BEGIN. NOTE THAT ~HE FOLLOWING OPENS THE OUTPUT FIL~ TO BE CREATED 000570 AND INITIALIZES COUNTERS. 000580 000590 STEP-l. OPEN OUTPUT FILE-l. MOVE ZERO TO KOUNT, NUMBR. NOTE THAT THE FOLLOWING CREATES INTERNALLY THE RECORDS TO BE 000600 CONTAINED IN THE FILE, WRITES THEM ON TAPE, AND DISPLAYS 000610 000620 THEM ON THE CONSOLE. 000630 STEP-2. ADD 1 TO KOUNT, NUMBR. MOVE ALPHA (KOUNT) TO 000640 NAME-FIELD. 000650 MOVE DEPEND (KOUNT) TO NO-OF-DEPENDENTS 000660 MOVE NUMBR TO RECORD-NO. 000670 STEP-3. DISPLAY WORK-RECORD UPON CONSOLE. WRITE RECORD-l FROM WORK-RECORD. 000680 000690 STEP-4. PERFORM STEP-2 THRU STEP-3 UNTIL KOUNT IS EQUAL TO 26. 000700 NOTE THAT THE FOLLOWING CLOSES THE OUTPUT FILE AND REOPENS IT AS INPUT. 000710 STEP-5. CLOSE FILE-l. OPEN INPUT FILE-2. 000720 000730 NOTE THAT THE FOLLOWING READS BACK THE FILE AND SINGLES 000740 OUT EMPLOYEES WITH NO DEPENDENTS. 000750 STEP-6. READ FILE-2 RECORD INTO WORK-RECORD AT END GO TO STEP-8. 000760 STEP-7. IF NO-OF-DEPENDENTS IS EQUAL TO "0· MOVE "Z" TO 000710 NO-OF-DEPENDENTS. EXHIBIT NAMED WORK-RECORD. GO TO STEP-6. 000780 STEP-So CLOSE FILE-2. 000790 STOP RUN. OB.17.32 10/02/73 REL 1.0 IBM DOS VS COBOL INTRNL NAME LVL SOURCE NAME DNN=1-148 DNM=1-179 DNl-J=1-200 DNM=1-217 DNM=1-248 DNM=1-269 DNl-l=1-289 Di'lM=1-308 DNM=1-323 DNM=1-341 DNM=1-359 DNM=1-374 DNM=1-394 DNM=1-410 DNl'l=1-434 DNM=1-454 DNM=1-473 DNM=1-492 DNr-;=2-000 DNM=2-018 DNM=2-037 DNM=2-063 FD 01 02 PD 01 02 01 02 02 02 02 02 02 01 02 02 02 02 02 02 02 02 FILE-l RECORD-1 FIELD-A FILE-2 RECORD-2 FIELD-A FILLER KOUNT ALPHABET ALPHA NUMBR DEPENDENTS DEPEND WORK-RECORD NAME-FIELD FILLER RECORD-NO FILLER LOCATION FILLER NO-OF-DEPENDENTS FILLER pp NO. 5746-CBl BASE DTF=Ol BL=l BL=l DTF=02 BL=2 BL=2 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 BL=3 DISPL IN'IRNL NAME 08.17.32 DEFINITION DNl~=1-148 000 000 000 000 000 000 002 002 01C OlE DNM=1-119 DNM=1-200 DNM=1-211 DNM=1-248 DNM=1-269 DNM=1-289 DNM=1-308 DNM=1-323 DNM=1-341 DNM=1-359 DNM=1-374 DS OCL20 DS 20C DS DS DS DS DS DS DS DS OCL20 20C OCL56 lH 26C lC 1H 26C V.l.L DNr.~=1=394 n", lC 038 038 039 03A 03E 03F 042 043 045 DNM=1-410 DNM=1-434 DNM=1-454 DNM=1-473 DNM=1-492 DNM=2-000 DNM=2-018 DNM=2-037 DNM=2-063 DS DS DS )S DS DS DS DS DS OCL20 1C 1C 4C 1C 3C 1C 2C 7C Appendix A: USAGE DTFf.:T GROUP DISP D'I'FNT GROUP DISP GROUP CQlV1P DISP DISP COMP DISP DIS? GROUP DISP DISP DISP-NM DISP DISP DISP DISP DISP 10/02/73 rt 0 Q M F F R 0 R 0 Sample Program Output 267 IBM DOS VS COBOL PP NO. 5746-CBl MEMORY MAP TGT SAVE AREA SWITCH TALLY SORT SAVE ENTRY-SAVE SORT CORE SIZE NSTD-REELS SORT RET WORKING CELLS SORT FILE SIZE SORT MODE SIZE PGT-VN TBL TGT-VN TBL SORTAB ADDRESS LENGTH OF VN TBL LNGTH OF SORTAB PGM ID A(INIT1) UPSI SWITCHES DEBUG TABLE PTR CURRENT PRIORITY TA LENGTH PRaLl CELL PTR UNUSED RESERVED VSAM SAVE AREA ADDRESS UNUSED RESERVED OVERFLOW CELLS BL CELLS DTFADR CELLS FIB CELLS TEMP STORAGE TEMP STORAGE-2 TEMP STORAGE-3 TEMP STORAGE-4 BLL CELLS VLC CELLS SBL CELLS INDEX CELLS SUBADR CELLS ONCTL CELLS PFHCTL CELLS PFMSAV CELLS VN CELLS SAVE AREA =2 XSASW CELLS XSA CELLS PARAM CELLS RPTSAV AREA CHECKPT CTR IOPTR CELLS DEBUG TABLE 268 003F8 003F8 00440 00444 00448 0044C 00450 00454 00456 00458 00588 005SC 00590 00594 00598 0059C 0059E 005AO 005A8 005AC 005B4 005B8 005B9 005BC 005CO 005C4 005C8 005CC 005D4 005EC 005EC 005F8 00600 00608 00610 00610 00610 00610 00614 00614 00614 00614 0061C 0061C 0061C 00620 00624 00624 00624 00624 00628 00628 00628 00628 08.17.32 10/02/73 IBM DOS VS COBOL REL 1. 0 PP NO. 5746-CB1 08.17.32 10/02/73 LITERAL POOL (HEX) 00640 (LIT+O) 00658 (LIT+24) 00000001 C2C6C3D4 001A5B5B E4D35B5B C2D6D7C5 COOOOOOO D5405B5B C2C3D3D6 E2C55BSB DISPLAY LITERALS (BCD) 00664 (LTL+36) 'WORK-RECORD' PGT DEBUG LINKAGE AREA OVERFLOW CELLS VIRTUAL CELLS PROCEDURE NAME CELLS GENERATED NAME CELLS SUBDTF ADDRESS CELLS VNI CELLS LITERALS DISPLAY LITERALS PROCEDURE BLOCK CELLS 00628 00628 00628 0062C 00638 00638 0063C 0063C 00640 00664 00670 REGISTER ASSIGNMENT REG 6 REG 7 REG 8 BL =3 BL =1 BL =2 WORKING-STORAGE STARTS AT LOCATION 00100 FOR A LENGTH OF 00050. PROCEDURE BLOCK ASSIGNMENT PBL = REG PBL =1 11 STARTS AT LOCATION 000674 STATEMENT 60 Appendix A: Sample Program Output 269 uvw VS COBOL IBM ,.,.,...'" REL 1.0 pp NO. 5746-CBl 08.17.32 0 57 000674 PN=02 EQU 000674 PN=03 EQU S'IART EQU L L 60 60 * * * 11,048(0,12) 000674 000674 000678 00067e 000680 000684 000686 000688 00068C 000690 000694 000696 00069A 00069E 0006AO 0006A4 0006A8 0006AC 58 BO C 048 58 20 D IF4 41 10 C OlE 58 00 D 200 18 40 05 FO 50 00 F 008 45 00 F ooe 00000000 OA 02 41 00 D 200 58 FO C 008 05 EF 58 10 D 200 96 10 1 020 50 20 D IF4 58 70 D IF4 L BALR L 01 ST L 2,H'4(0,13) 1,01E(0,12) 0,200(0,13) 4,0 15,0 0,008(0,15) 0,00e(0,15) X'OOOOOOOO' 2 0,200(0,13) 15,008(0,12) 14,15 1,200(0,13) 020(1) ,X'10' 2,lF4(0,13) 7,lF4(0,13) 0006BO 0006B6 D2 01 6 000 C 018 D2 01 6 Ole C 018 MVC MVC 000(2,6),018(12) 01C(2,6) ,018 (12) EQU * LH AH CVD XC N1 CVB STH LH AH CVD XC NI eVB STH 3,01A(0,12) 3,000(0,6) 3,210(0,13) 210(6,13),210(13) 216(13),X'OF' 3,210(0,13) 3,000(0,6) 3,OlA(0,12) 3,01C(0,6) 3,210(0,13) 210(6,13),210(13) 216(13),X'OF' 3,210(0,13) 3,01C(0,6) LA 4,002(0,6) 2,000(0,6) 2,01A(0,12) 4,2 4,018(0,12) 4,21C(0,13) 14,21C(0,13) 038<1,6),000(14) 4, OlE (0·, 6) 2,000(0,6) 2,01A(0,12) 4,2 4,01S(0,12) 4,220(0,13) 15,220(0,13) 043 (1,6) ,000 (15) 044(6),X'40' L1T+O SES=2 SBS=2 DNM=2-37 DNM=2-37+1 3,01C(0,6) 3,210(0,13) 03A(4,6),216(2,13) 03D(6),X'FO' DNM=1-359 '1S=Ol DNM=1-473 DNM=1-473+3 LA L LR BALR ST BAL DC sve LA PEL=l BL =1 L1T+6 D'IF=l D'1F=l V (ILBDHlLO) DTF=l BL =1 BL =1 60 DNM=I-308 DNM=1-359 L1'1+0 LI'I+0 64 PN=04 0006BC 64 0006Be 0006CO 0006C4 0006C8 0006CE 0006D2 0006D6 0006DA 0006DE 0006E2 0006E6 0006EC 0006FO 0006F4 48 4A 4E D7 91.1 4F 40 48 4A 4E D7 94 4F 40 30 30 30 05 OF 30 30 30 30 30 05 OF 30 30 C 6 D D D D 6 C 6 D D D D 6 0006F8 0006FC 000700 000704 000706 00070A 00070E 000712 000718 00071C 000720 000124 000726 00072A 00072E 000732 000738 41 48 4C lA 5B 50 58 D2 41 48 4e 111 5B 50 58 1J2 92 40 20 20 42 40 40 EO 00 40 20 20 42 40 40 FO 00 40 6 002 6 000 C 01A 00073C 000740 000744 00074A 48 4E F3 96 30 30 31 FO 01A 000 210 210 D 210 216 210 000 01A 01C 210 210 D 210 216 210 01C lI'I+2 Di~M=1-308 'IS=Ol TS=Ol '1S=01+6 TS=Ol DNM=1-308 .i.IT+2 DNM=1-359 'IS=Ol TS=Ol 'IS=01+6 TS=Ol Dt-IM=1-359 TS=ul TS=Ol 64 LH MH AR S ST L MVC C D D 6 6 6 C 018 21C 21C 038 E 000 OlE 000 01A C D D 6 6 018 220 220 043 F 000 044 LH Mti AR S ST L MVC MVI 6 D 6 6 01C 210 03A D 216 03D LH CVD UNPK 01 LA DNM=1-341 DNM=1-308 L1T+2 L1T+O SBS=1 SES=l DNM=1-434 DNM=1-394 DNM=1-30S L1T+2 DNM=1-341 DNM=1-394 67 270 TS=07 10/02/73 68 PN=05 0OO74E 68 00074E 000752 000754 000756 000757 0OO75A 00075E 000760 58 FO C OOC 05 1F 0002 00 000014 ODOOO1FC 0038 FFFF 000762 000768 00076C 00076E 000772 000776 00077A 00077E 000782 D2 58 18 58 68 45 50 58 58 07 13 10 41 FO EO 20 70 10 Fi 7 000 6 038 D 200 1 010 F ooe D 1F4 D 1F4 D 228 18.17.32 PP NO. 5746-CBl REL 1.0 IBM DOS VS COBOL EQU * L BALR DC DC DC DC DC DC 15, OOC (0, 12) 1,15 X'0002' X'OO' X'00OO14' X'ODOOO1FC' X'OO38' X'FFFF' V (ILEI:DSPO) MVC L LR L BAL ST L L BCR 000(20,7),038(6) 1,200(0,13) 4,1 15,010(0,1) 14,OOC{O,lS) 2,lF4(0,13) 7,lF4(0,13) 1,228(0,13) 15,1 DNM=1-179 D'IF=l EQU * INC LA ST EQU LH CH BC Be EQU MVC 224(4,13),228(13) o ,11E (0,11> 0,228(0,13) 10/02/73 BL =3 DNK=1-410 BL =1 BL =1 VN=Ol 70 PN=06 000784 70 000784 00078A 00078E 000792 000792 000796 00079A 00079E 0007A2 0007A2 D2 03 D 224 D 228 41 00 B llE 50 00 D 228 GN=Ol 48 49 47 47 30 30 80 FO 6 C B B 000 01C 12E 048 GN=02 D2 03 D 228 D 224 *3,000(0,6) PSV=l GN=Ol VN=Ol 3,01C(0,12) 8,12E(0,11> 15,048(0,11> DNM=1-308 L1'I+4 GN=02 PN=04 *228(4,13),224(13) VN=Ol VN=Ol PSV=l 73 EQU * 0007A8 0007AC 0007BO 0007B2 0007B4 0007B8 0007BA 0007BC 0007CO 0007C4 0007C8 0007CA 0007CE 0007D2 58 10 D 200 94 EF 1 020 18 01 18 40 41 10 C 026 07 00 05 FO 50 00 F 008 45 00 F OOC 00000000 OA 02 58 00 D 200 41 10 C 02E OA 02 PN=07 L N1 LR LR LA BCR BALR ST BAL DC SVC L LA SVC 1,200(0,13) 020 (1) ,x 'EF' 0,1 4,0 1,026(0,12) 0,0 15,0 0,008(0,15) 0,OOC(0,15) X'OOCOOOOO' 2 0,200(0,13) 1,02E(0,12) 2 0007D4 0007D8 0007DC 0007DE 0007EO 0007E4 0007E8 0007EC 0007EE 0007F2 0007F6 0007F8 0007FC 41 10 C OlE 58 00 D 204 18 40 05 FO 50 00 F 008 45 00 F OOC 00000000 OA 02 41 00 D 204 58 FO C 008 05 EF 58 10 D 204 96 10 1 020 LA L LR BALR ST BAL DC SVC 1,01E(0,12) 0,204(0,13) 4,0 15,0 0,008(0,15) 0,00C(0,15) X'OOOOOOOO' 2 0,204(0,13) 15,008(0,12) 14,15 1,204(0,13) 020 (1) ,X'10' 0007A8 73 D'IF=l L1'I+14 D'IF=l L1T+22 73 LA L BALR L 01 Appendix A: L1T+6 D'IF=2 D'IF=2 V ,001(15) 15,010(0,1) 14,008(0,15) 2,li8 (0,13) 8,lF8(0,13) 038(20,6),000(8) 15,lC2(0,11) 76 000800 000804 000808 00080C 00080E 000812 000818 00081C 000820 000824 000828 00082E 000832 58 91 47 18 41 D2 58 45 50 58 D2 47 10 20 10 41 FO 02 FO EO 20 80 000832 000836 47 FO B 208 D D 13 6 FO B 010 025 FOOl 010 008 IFe IF8 038 8 000 lC2 GN=03 MVC L BAL ST L MVC BC EQU GN=04 BC EQU PN=09 EQU 043(6),X'FO' 7,lDA(0,11) 044(6),X'40' 7, IDA (0,11) 043(6),X'E9' 044(6),X'40' GN=05 CLI BC CLI BC MVI MVI EQU L ST 76 77 000836 77 77 6 B 6 B 6 6 043 IDA 044 IDA 043 044 GN=03 BL =2 BL =2 DNM=1-410 GN=04 PN=010 * * 95 47 95 47 92 92 00084E 000852 000856 00085A 00085E 000860 000862 000863 000866 00086A 00086C 00086D 000870 000874 000876 58 10 c 038 50 10 D 22C 41 20 D 22C 58 FO C OOC 05 IF 8001 10 OOOOOB OCOOO03C 0000 00 000014 ODOOOIFC 0038 FFFF BALR DC DC DC DC DC DC DC DC DC DC 1,038(0,12) 1,22C(0,13) 2,22C(0,13) 15,00C(O,12) 1,15 X'8001' X'10' X'OOOOOB' X'OCOOO03C' X'OOOO' X'OO' X'OOO014' X'ODOOOIFC' X'0038' X'FFFF' 000878 47 FO B 18C BC 15,18C(O,ll) LA L GN=03 * 15,208(0,11) 000836 00083A 00083E 000842 000846 00084A 00084E 78 FO 70 40 70 E9 40 D'IF=2 DNM=2-37 GN=05 DNM=2-37+1 GN=05 DNM=2-37 DNM=2-37+1 * LI'I+32 PR~=1 PRM=l V (ILBDDSPO) LI'I+36 BL =3 78 FN=08 79 PN=010 00087C EQU * L NI LR LR 1,204(0,13) 020(1) ,X'EF' 0,1 4,0 1,026(0,12) 0,0 15,0 0,008(0,15) 0,00C(0,15) X'OOOOOOOO' 2 0,204(0,13) 1,02E(0,12) 79 00087C 000880 000884 000886 000888 00088C 00088E 000890 000894 000898 00089C 00089E 0008A2 0OO8A6 58 10 D 204 94 EF 1 020 18 01 18 40 41 10 C 026 07 00 05 FO 50 00 F 008 45 00 F OOC 00000000 OA 02 58 00 D 204 41 10 C 02E OA 02 BCR BALR ST BAL DC SVC L LA SVC 0008A8 OA OE SVC LA 2 80 272 14 DTF=2 LIT+14 DTF=2 LIT+22 DNM=1-248 10/02/73 OOOSAA OOOSAE 0008B2 0008B6 0008BA OOOSBC OOOSCO 000SC4 OOOSCS OOOSCA 0008CE 0008D2 0008D6 OOOSDA 0008DE OOOSEO 0008E4 OOOSES OOOSEC OOOSFO 000SF2 000SF6 0008F8 0008FC 000900 000904 00090S 00090A 00090E 000910 000914 000918 00091C 000920 000922 000926 000928 00092C 000930 000934 000938 00093C 000942 000946 00094A 00094E 000000 000002 000004 000008 aooooc 000084 000088 OOOOSC 000090 000094 000098 00009C OOOOAO PP N('. 5746-CB1 REL 1.0 IBM Do"S VS COBOL 50 DO 5 008 50 50 D 004 58 20 C 004 95 00 2 000 07 79 92 FF 2 000 96 10 D 048 50 EO D 054 05 FO 91 20 D 048 47 EO F 016 58 00 B 04S 98 2D B 050 58 EO D 054 07 FE 96 20 D 048 41 60 0 004 41 10 C 000 41 70 C 003 05 50 58 40 1 000 lE 4£ 50 40 1 000 S7 16 5 000 41 10 C 010 41 70 C 017 05 50 5S 40 1 000 1E 4B 50 40 1 000 S7 16 5 000 41 SO D IF4 41 70 0 20F 05 10 5S 00 8 000 lE OB 50 00 S 000 87 S6 1 000 58 60 D 1FC 58 70 D IF4 58 80 0 1F8 D2 03 0 228 C 014 58 EO D 1BO 90 60 E 060 58 EO D 054 07 FE 05 FO 07 00 90 OE F OOA 47 FO F 082 00000000 58 CO F OC6 58 EO C 004 5S DO F OCA 95 00 E 000 47 70 F OA2 96 10 D 04S 92 FF E 000 47 FO F OAC INI'I2 ST ST L CLI BCR MVI 01 INI'!3 ST BALR TM BC L LM L BCR 01 LA LA LA BALR L ALR ST BXLE LA LA BALR L ALR ST BXLE LA LA BALR L ALR ST BXLE L L L MVC L S'J:M L INIT1 BCR BALR BCR STl 2,13,050(11) 14,054(0,13) 15,14 04S(13),X'20' 6,004<0,0) 1,000 4,11 4,000(0,1> 1,6,000(5) 1,010(0,12) 7,017(0,12) 5,0 4,000(0,1) 4,11 4,000<0,1) 1,6,000(5) 8,lF4(0,13) 7,20F(0,13) 1,0 O,OOO(O,S) 0,11 O,OOO(O,S) 8,6,000(1) 6,1FC(0,13) 7,lF4(0,13} S,lF8(0,13) 228(4,13),014(12) 14,180(0,13) 6,13,060(14) 14,054(0,13) 15,14 15,0 0,0 0,14,00A(15) 15,082<0,15) 30F'0' 12,OC6(0,15} 14,004(0,12) 13,OCA(0,15) OOO(14),X'00' 7, OA 2 (G, 15) 048 (13) ,X'10' 000 (14) ,X' FF' 15,OAC(0,15} OS.17.32 10/02/73 VIR=l SWT+O SW'I+O SWT+O VIR=1-1 Pl'l=Ol LIT+0-1 OVF=1 TS=01-1 BL =3 BL =1 BL =2 VN=Ol VNI=l VIR=1 SWT+O Appendix A: Sample Program Output 273 IBM DOS VS COBOL 0000A4 OOOOA8 OOOOAC OOOOAE OOOOB2 0000B6 0000B8 OOOOBA OOOOBC OOOOCO 0000C4 0000C8 OOOOCC 000000 000004 000008 OOOOEO 0000E8 OOOOEC 0000F4 *S'IATISTICS* *S'IATISTICS* *OPTIONS IN EFFECT* *OPTIONS IN EFFECT* *OPTIONS IN EFFECT* *OPTIONS IN EFFECT* 274 PP NO. 5746-CBl REL 1. 0 98 CE F 03A 90 EC 0 OOC 18 5D 98 9F F OBA 91 10 D 048 07 19 07 FF 07 00 000008C4 00000000 00000000 00000628 000003F8 00000674 000008AA C3D6C2D6F3FOFOFO E3C5E2E3D9E4D540 00000000 F1F061FOF261F7F3 FOF84BF1F74BF3F2 SOURCE RECORDS 80 PARTITION SIZE 655176 PMAP RELOC ADR NCNE LIS'IX QUOTE NOCLIST FLAGW NOS'IA'IE TRUNC LM STM LR LM TIvi BCR BCR BCR ADCON AOCON ADCON ADCON ADCON ADCON AOCON DC DC DC DC DC 12,14,03A(15) 14,12,00C(13) 5,13 9,1:J,OEA<1S) 048(13),X'10' 1,9 15,15 0,0 L4(INI'I3) L4(INI'Il) L4 UNI'Il) L4(PGT) L4('IGT) L4(S'IART) L4 UNIT2) X'C3D6C2D6F3FOFOFO' X'E3C5E2E3D9E4D540' X'OOOOOOOO' X'F1F061FOF261F7F3' X'FOF84BF1F74BF3F2' DATA ITEMS = LINE COUNT = SI'ACING SYM NOCATALR ZWB NOSUPMAP SEQ NOSYMDMP 22 56 1 09.17.32 10/02/73 SWT+O NO OF VERBS BUFFER SIZE FLOW LI';~K LIST XREF ERRS NODECK HOVERB 28 512 NONE NOS'IXIT SXRl.F NOSYNTAX ,WLIB OPT LVL=A PP NO. 5746-CBl REL 1.0 IBM DOS VS COBOL 08.17.32 10/02/73 CROSS-REFERENCE DICTIONARY DATA NA..'1ES DEFN AI.PHA AI.PHABET DEPEND 000042 000041 000045 000044 DEPENDEL~TS REFERENCE 000064 000066 00002~ FIELD-A FIELD-A FILE-1 FILE-2 RECORD-NO RECORD-1 RECORD-2 WORK-RECORD 000037 000017 000018 QQQQ4Q 000051 000047 000053 000043 000049 000028 000036 000046 000064 000066 000060 000067 000068 000076 000068 PROCLDURE NAMES DEFN REFERENCE BEGIN S'IEP-1 S'IEP-2 STEP-3 STEP-4 S'IEP-5 STEP-6 S'IEP-7 STEP-8 000057 000060 000064 000068 000070 000073 000076 000077 000079 KCUNT LCCA'IION NAME-FIELD NC-OF-DEPENDENTS NUMBrt CARD ERROR MESSAGE 00064 00064 lLA5011I-W ILA5011I-W 000060 000073 000060 000068 000076 000064 000073 000079 000066 000077 000064 000067 000076 000078 000070 000070 000070 000078 000076 HIGH ORDER TRUNCATION MIGHT OCCUR. HIGH ORDER TRUNCATION MIGHT OCCUR. FEDERAL INFORMATION PROCESSING STANDARDS (FIPS> DIAGNOSTIC MESSAGES LINE NUMBER MESSAGE 00006 00025 00034 00054 00060 00062 00062 C0064 00064 00068 00068 00068 00070 00076 00078 ILA8003I-W ILA8002I-W ILA8002I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8003I-W ILA8003I-W lLA8003I-W lLA8002I-W lLA8003I-W lLA8003I-W ILA8003I-W ILA8002I-W DATE-COMPILED PARAGRAPH IS AN EXTENSION TO FIPS LEVEL A. RECORDING MODE IS CLAUSE IS AN EXTENSION TO ALL FIPS LEVELS. RECORDING MODE IS CLAUSE IS AN EXTENSION TO ALL FIPS LEVELS. SPACES IS AN EXTENSION TO FIPS LEVEL A. COMMA OR SEMICOLON AS PUNCTUATION IS AN EXTENSION TO FIPS LEVEL A. COMMA OR SEMICOLON AS PUNCTUATION IS AN EXTENSION TO FIPS LEVEL A. COMMA OR SEMICOLON AS PUNCTUATION IS AN EXTENSION TO FIPS LEVEL A. COMMA OR SEMICOLON AS PUNCTUATION IS AN EXTENSION TO FIPS LLVEL A. MULTIPLE RESULTS IN ADD STATEMENT IS AN EXTENSION TO FIPS LEVEL A. UPON OPTION OF DISPLAY STATEMENT IS AN EXTENSION TO FIPS LEVEL A. UPON CONSOLE OPTION OF DISPLAY STATEMENT IS AN EXTENSION TO ALL L1WELS. FROM OPTION OF WRITE S~TEMENT IS AN EXTENSION TO FIPS LEVEL A. UNTIL OPTION OF PERFORM STATEMENT IS AN EXTLNSION TO FIPS LEVEL A. INTO OPTION OF READ S'IATEMENT IS AN EXTENSION TO FIPS LEVEL A. EXHIBIT STATEMENT IS AN EXTENSION TO ALL FIPS LEVELS. PAGE 1 END OF COMPILATION Appendix A: Sample Program output 275 !a~ PP NO. 5746-CB1 REL 1. 0 DOS VS COBOL 08.17.32 // EXEC LNKED'I JOE DOS LINKAGE EDITOR DIAGNOSTIC OF SAMPLE AC'!ION LIS'! LIS'! LIS'! LIST LIST LIST LIST LIS'! LIS'I TAKEN MAP REt IJFFBZZN AUTOLINK AUTOLINK ILBDDSPO AUTOLINK IJJCPDV AUTOLINK ILBDDSSO INCLUDE IJJCPDV AUTOLINK ILBDIMLO ILBDMNSO AUTOLINK ILBDSAEO AUTOLINK ENTRY 10/02/73 PHASE XFR-AD LOCORE HICORE DSK-AD ESD TYPE LABEL LOADED REL-FR PHASE··· 07D878 07D878 07F1FF 05F OF 4 CSECT TESTRUN 07D878 07D878 CSEC'I ENTRY * :::NTRY * ENTRY IJFFBZZN IJFFZZZN IJFFBZZZ IJFFZZZZ 07E1C8 07E1C8 07E1C8 07E1C8 07:t:.1C8 CSECT ENTRY ILBDSAEO ILBDSAEl 07F078 07FOCO 07F018 CSECT ILBDMNSO 07F010 01F010 * CSECT ILBDIMLO 07F018 07F018 CSECT ENTRY ILBDDSPO ILBDDSPl 07E578 01E978 07E578 CSEC'! ENTRY ENTRY ENTRY ENTRY ENTRY ENTRY ENTRY ENTRY II.BDDSSO ILBDDSSl ILBDDSS2 ILBDDSS3 ILBDDSS4 ILBDDSSS ILBDDSS6 ILBDDSS7 ILBDDSS8 07ECFO 07EFSO 07EF48 07FOO8 07ED16 07EDC2 07EE22 07EDEC 07ED46 07ECFO CSECT ENTRY ENTRY IJJCPDV IJJCrCn IJJCPDV2 07EAA8 07EAAS 07EAA8 o 71:.AA8 WXTRN WXTRN STXITPSW ILBDDBG2 * • UNREFERENCED SYMBOLS 002 276 Il~PUT UNR~SOLVED ADDRESS CONSTANTS RELOCATAEL£ 10/02/73 IBM DOS VS COBOL // ASSGN // hX£.C WCRK-R~COKD WORK-RECORD WORK-RECORD WCRK-RECORD WORK-HECORD WCRK-RECORD WORK-RECORD WCRK-RECCRD WORK-RECORD WCRK-RECORD WORK-RECORD WORK-RECORD WCRK-RECORD WORK-RECORD WORK-RECORD WORK-RECORD WORK-RECORD WORK-RECORD WORK-RECORD WCRK-RECORD WORK-RECORD WORK-RECORD WORK-RECORD WCRK-RECORD WORK-RECORD WORK-RECORD REL 1.0 PP NO. 5746-CBl 08.17.32 10/02/73 SYS008,X'483' A 0001 B 0002 C 0003 D 0004 E 0005 F 0006 G 0007 H 0008 I 0009 J 0010 K 0011 L 0012 M 0013 N 0014 0 0015 P 0016 Q 0017 R 0018 S 0019 T 0020 U 0021 V 0022 W 0023 X 0024 Y 0025 Z 0026 NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC NYC Z 1 2 3 4 Z 1 2 3 4 Z 1 2 3 4 Z 1 2 3 4 Z 1 2 3 4 Z ECJ SAMPLE BG BG BG BG BG BG BG BG BG BG BG A 0001 NYC 0 B 0002 NYC 1 C 0003 NYC 2 D 0004 NYC 3 E 0005 NYC 4 F 0006 NYC 0 G 0007 NYC 1 H 0008 NYC 2 I 0009 NYC 3 J 0010 NYC 4 0011 NYC K BG BG L 0012 NYC 1 BG M 0013 NYC 2 BG N 0014 NYC 3 BG 0 0015 NYC 4 BG P 0016 NYC 0 BG Q 0017 NYC 1 BG R 0018 NYC 2 BG S 0019 NYC 3 BG T 0020 NYC 4 BG U 0021 NYC 0 6G V 0022 NYC 1 BG W 0023 NYC 2 BG X 0024 NYC 3 BG Y 0025 NYC 4 BG Z 0026 NYC 0 BG EOJ SAMPLE 00.56.19,DURATION 00.03.42 CD Appendix A: sample Program Output 277 APPENDIX B: STANDARD TAPE FILE LABELS File 'lelel &.aIIe1 NulnMr Label Wentifler V."ion Fil. Nuntber'" See."i" Getwation The standard tape file label format and contents are as follows: Field Name and Length Description 1. LABEL IDENTIFIER 3 bytes, EBCDIC Identifies the type of label. HDR Header (beginning of a data file) EOF End-of-file (end of a set of data) EOV End-of-volume {end of the physical reel} 2. FILE LABEL NU!BER 1 byte, EBCDIC Always a 1. 3. FILE IDENTIFIER 17 bytes, EBCDIC Uniquely identifies the entire file, may contain only printable characters. Some other systems will not accept embedded blanks in the file identifier. - 4. FILE SERIAL NUMBER 6 bytes, EBCDIC Uniquely identifies a file/volume relationship. This field is identical to the volume serial number in the volume label of the first or only volume of a multivolume file or a multifile set. This field will normally be numeric (000001 to 999999), but may contain any six alphanumeric characters. 5. VOLU!E SEQUENCE NU!BER 4 bytes Indicates the order of a volume in a given file or multifile set. The first must be numbered 0001, and subsequent numbers must be in proper numeric sequence. 60 FIL~ SEQUENCE 4 bytes Assigns numeric sequence to a file within a multifile set. The first must be numbered 0001. 7. GENERATION TI!E 4 bytes Uniquely identifies the various editions of the file. Kay be from 0001 to 9999 in proper numeric sequence. 8. VERSION NUKBER OF GENERATION 2 bytes Indicates the version of a generation of a file. Appendix B: Standard Tape File Labels 279 Field 9. Description Name and Length CREATION DATE 6 bytes Indicates the year and the day of the year that the file was created. position 1 2-3 4-6 Code blank 00-99 001-366 Meaning none year day of year (e.g., January 31, 1973 would be entered as 13031) • 10. EXPIRATION DATE 6 bytes Indicates the year and the day of the year when the file may become a scratch tape. The format of this field is identical to field 9. On a multifile reel processed sequentially, all files are considered to expire on the same day. 11. FILE SECURITY 1 byte Indicates security status of the file. o No security protection. 1 Security protection. Additional identification of the file is required before i t can be processed. 12. BLOCK COUNT 6 bytes Indicates the number of data blocks written in the file from the last header label to the first trailer label, exclusive of tapemarks. Count does not include checkpoint records. This field is used in trailer labels. 13. SYSTEM CODE 13 bytes Uniquely identifies the operating system. 14. RESERVED 7 bytes Reserved. 280 Should be recorded as blanks. APPENDIX C: STANDARD MASS STORAGE DEVICE LABELS Format Format 1: Field 1. This format is cOlltllon't-oal1data files on disk. Name and Length FILE NAME 44 bytes, alphanumeric EBCDIC Description This field serves as the key portion of the file label. It can consist of three sections: 1. Pil~ ID is ari alphanumeric field assigned by the programmer arid identifies the file. It can be 1 through 35 bytes in length if generation and version numbers are used, or through 44 bttes in length if they are not used. 2. Generation Number. If used, this field is separated from File ID by a period. It has the format Gnnnn, where G identifies the field as the generation number and nnnn (in decimal) identifies the generation of the file. 3. Version Number of Generation. If used, this sectio-n imllediately follows the generation number and has the format Vnn, where V identifies the field as the version of generation number and nn (in decimal) identifies the version of generation of the file. IBM DOS/VS System compares the entire field against the filename given in the DLBL card. The generation and version numbers are treated differently by the IBM OSjVS System. ~: Appendix C: Standard Mass Storage Device Labels 281 Fields 2 through 33 constitute the DATA portion of the file label. Fiel~ Name and Length Descrinion 2. FORMAT IDENTIFIER 1 byte, EBCDIC numeric 1 3. FILE SERIAL NUMBER 6 bytes, alphanumeric EBCDIC Uniquely identifies a file/volume relationship. It is identical to the volume serial number of the first or only volume of a multivolume file. 4. VOLUME SEQUENCE NUMBER 2 bytes, binary Indicates the order of a volume relative to the first volume on which the data file resides. 5. CREATION DATE 3 bytes, discontinuous binary Indicates the year and the day of the year the file was created. It is of the form YDD, where Y signifies the year (0-99) and DD the day of the year (1-366). 6. EXPIRATION DATE 3 bytes, discontinuous binary Indicates the year and the day of the year the file may be deleted. The form of this field is identical to that of field 5. 7a. EXTENT COUNT 1 byte, binary Contains a count of the number of extents for this file on this volume. If user labels are used, the count includes the user label track as a separate extent. This field is maintained by the Disk Operating system. 7b. BYTES USED IN LAST BLOCK OF DIRECTORY 1 byte, binary Used by IBM Operating System Virtual Storage only for partitioned (library structure) data sets. Not used by the Disk Operating System Virtual Storage. 7c. SPARE 1 byte Reserved for future use. 8. SYSTEM CODE 13 bytes Uniquely identifies the operating system. 9. RESERVED 7 bytes Reserved for future use. FILE TYPE 2 bytes The contents of this field uniquely identify the type of data file. 10. format 1 Hex Code 4000 Meaning Sequential organization 2000 Direct organization 8000 Indexed organization 0200 Library organization (,\1'\,,/,\ Organization not defined in the file label VVVV 282 Field Name and Length 11. RECORD FORMAT 1 byte Description The contents of this field indicate the type of records contained in the file. Bit Position o and 1 2 3 4 5 and 6 7 12. OPTION CODES 1 byte Content 01 Meaning Variable-length records 10 Fixed-length records 11 Undefined format o No track overflow 1 File is organized using track overflow (IBM OSjVS only) o Unblocked records 1 Blocked records o No truncated records 1 Truncated records in file 01 Control character ASA code 10 Control character machine code 00 Control character not stated o Records are written without keys 1 Records are written with keys Bits within this field are used to indicate various options used in building.the file. ~~ B ..L.\.. Position ~ning o If on, indicates data file was created using write validity check. 1-7 Unused. 13. BLOCK LENGTH 2 bytes, binary Indicates the block length for fixed-length records, or maximum block size for variablelength blocks. 14. RECORD LENGTH 2 bytes, binary Indicates the record length for fixed-length records, or the maximum record length for variable-length records. 15. KEY LENGTH 1 byte, binary Indicates the length of the key portion of the data records in the file. 16. KEY LOCATION 2 bytes, binary Indicates the high-order position of the data record. Appendix C: Standard Mass storage Device Labels 283 !iel~ Name and Length 17. DATA SET INDICATORS 1 byte Description Bits within this field are used to indicate the following: Bit position --0-- Meaning If on, indicates that this is the last volume on which this file normally resides. This bit is used by the DOS/VS DTFSR routine only. None of the other bits in this byte are used by the DOS/VS. 1 If on, indicates that the data set described by this file must remain in the same absolute location on the direct-access device. 2 If on, indicates that block length must always be a multiple of eight bytes. 3 If on, indicates that this data file is security protected; a password must be provided in order to ac~ess it. 4-7 Space. Reserved for future use. 18. SECONDARY ALLOCATION 4 bytes, binary Indicates the amount of storage to be requested for this data file at end-ot-extent. This field is used by IBM OS/VS only. It is not used by DOS/VS routines. 19. LAST USED TRACK AND RECORD ON THAT TRACK 5 bytes, discontinuous binary Indicates the last occupied track in a consecutive file organization data file. This field has the format CCHHR. It is all binary zeros if the last track in a consecutive data file is not on this volume, or if it is not consecutive organization. 20. AMOUNT OF SPACE REMAINING ON LAST TRACK USED 2 bytes, binary A count of the number of bytes of available space remaining on the last track used by this data file on this volume. 21. EXTENT TYPE INDICATOR 1 byte Indicates the type of extent with which the following fields are associated: Hex Code 00 284 Meaning Next three fields do not indicate any extent. 01 Prime area (indexed) or consecutive area, etc., (i.e., the extent containing the user's data records). 02 Overflow area of an indexed file. 04 Cylinder index or master index area of an indexed file. 40 User label track area. 80 Shared cylinder indicator. Description Fiel~ Name and Length 22. EXTENT SEQUENCE NUMBEh 1 byte, binary Indicates the extent sequence in a multi-extent file. 23. LOWER LIMIT 4 bytes, discontinuous binary The cylinder and the track address specifying the starting point (lower limit) of this extent component. This field has the format CCHH. 24. UPPER LIMIT 4 bytes The cylinder and the track address specifying the end point (upper limit) of this extent component. This field has the format CCHH. 25-28. ADDITIONAL EXTENT 10 bytes These fields have the same format as the fields 21 through 24, above. 29-32. ADDITIONAL EXTENT 10 bytes These fields have the same format as fields 21 through 24, above. 33. POINTER TO NEXT FILE LABEL WITHIN THIS LABEL SET 5 bytes, discontinuous binary The disk address (format CCHHR) of a continuation label is needed to further describe the file. If field 9 indicates indexed organization, this field will point to a Format 2 file label within this label set. Otherwise, it points to a Format 3 file label, and then only if the file contains more than three extent segments. If no additional file label is pointed to, this field contains all binary zeros. Appendix C: Standard Mass Storage Device Labels 285 APPENDIX D: TRACK FORMATS FOR DIRECT-ACCESS STORAGE DEVICES The track format for the 2311, 2314, 2319, 2321, 3330, 3340, and 3350 directaccess storage devices is illustrated in Figure 67. The names of the fields are given in the following discussion. portion for direct and indexed organizations. 1. Index Marker: All tracks start with an index marker. It is a signal to the hardware that indicates beginning of the track. Count Portion. The count portion contains the identification of each record, the key length, and the data length. a. Identification. Each record is identified with its cylinder number, head number, or record number. The cylinder and head numbers will be the same as those of the home address. The record number will indicate a particular record on the track. That is, the first record after record 0 will be record 1, followed by record 2, etc. This 5-byte binary field in the form of CCHHR is often referred to as the record ID. b. Key Length. The key length is specified in an 8-bit byte; its length can range from 0 to 255. This field will contain a zero if there is no key. c. Data Length. The data length is specified in the 16 bits of the next two bytes. Home Address: The home address, preceded by a gap, follows the index marker. The home address uniquely identifies each track by specifying the cylinder and head number. Track Descriptor Record (Reco~: Record o consists of two parts: a count portion and a data portion. The ~1-EQrtion is the same as it is for any other record (see the following description of count for record 1. The 8-byte data portion is used to record information used by LIOCS. The information in the data portion depends on the data organization (direct or indexed) that is being used. For direct organization, this portion in the form of CCHHR contains the address of the last record on the track and the number of bytes remaining on the track. This information is used to determine whether there is space for another record on the track. For indexed organization, the data portion contains the address of the last record in the cylinder overflow area and the number of tracks remaining in the cylinder overflow area. Record 0 is then used as the cylinder overflow control record. Address Marker: All records after record 0 will be preceded by a 2-byte address marker. The address marker is a signal to the hardware that a record is starting. Data Records: Data records can consist of a count and data portion for sequential organization, or a count, key, and data Appendix D: Note: It is the count portion that identifies the presence or absence of a key, in addition to indicating the data length. In this way, each record is unique and self formatting. 2. Key Portion. The key portion of the record is normally used to store the control field of the data record such as a man number. Direct and indexed files must have a key portion. 3. Data Portion. The data portion of the record contains the data record. Track Formats for Direct-Access storage Devices 287 Note that all records, including tne data record, terminate with a 2-byte cyclic check. The hardware uses this cyclic check to ensure that is correctly reread what it had written. The cyclic check is cumulative and is appended to each record when it is written. Upon reading the record, the cyclic check is again accumulated and then compared with the appended cyclic check. If they do not agree, a data check is initiated. becomes defective, a utility program may be used to transfer the data to an alternate track. (Cylinders 200 through 202 are reserved for alternate tracks on the 2321. Strips 6 through 9 of subcell 19 of each cell are reserved for alternate tracks on the 2321.) In this case, a flag bit within the byte is set Qrr to indicate that this is a defective track and the address of an alternate track will be placed in the record ID of record O. Subsequent references to this defective track will result in the Supervisor accessing record 0 for the address of the alternate track. The first byte of the count portion of each record and the home address is reserved for a flag byte. If a track First Data Record I G A P Record Number Cylinder Number Dato length ~~ ~ Key o o o Original} 1 Alternate G I I A I~III P Fie, C I H ! H I R ,Kl,DL, Dl! c! c Flag Figure 67. 288 Record 10 Key Dolo Cyclic Length Length Check Track Format ~~!c!c, I By;e. Remaining Alter "Initialize Di.k" Optional Variable Length Data o Variable Length APPENDIX E: The IBM DOS/VS COBOL Object-Time Subroutine Library, Program Number 5746-LM4, is packaged with the DOS/vS COBOL Compiler and also available as a separate product. It provides subroutines to be link edited with object modules produced by DOS/VS COBOL Compiler. It also provides subroutines that can be dynamically fetched during problem program execution. There are several major categories of COBOL library subroutines: • Input/output verb routines • ASCII support routines ~ COBOL LIBRARY SUBROUTINES Printer Spacing The ILBDSPAO subroutine is used to control printer spacing when the WRITE statement with the BEFORE/AFTER ADVANCING or POSITIONING option is specified in the source program. Tape and Sequential Disk Labels The ILBDUSLO and ILBDNSLO subroutines are used when user or nonstandard labels, respectively, are to be processed (LABEL RECORDS ARE data-name). Conversion routines • Arithmetic verb routines CLOSE WITH LOCK Subroutine • Sort/Merge Feature interface routines • Checkpoint (RERUN) routines • Segmentation Feature routines • Other verb routines • Object-time debugging routines The ILBDCLKO subroutine is given control on an OPEN if the file is ever closed with lock in the program. It checks whether the OPEN statement is used to open a file previously closed with lock. If the file was previously closed with lock, it issues an object-time message and terminates the current job. • Object-time execution statistics routines • Optimizer routines WRITE Statement Subroutines • Transient routines The ILBDVBLO subroutine is used to write variable-length blocked records. The following sections describe some of the more commonly used subroutines. The ILBDDIOO stibroutine is used for writing files with direct organization (DTFDA). The ILBDISMO subroutine is used for writing files with indexed organizatio~. INPUT/OUTPUT SUBROUTINES READ Statement Subroutines The input/output subroutines are used for the COBOL verbs DISPLAY (TRACE and EXHIBIT), ACCEPT, STOP (literal), READ, WRITE, REWRITE, OPEN, CLOSE, DELETE, and START printer spacing, printer overflow, input/output errors, disk formatting and extent handling, and tape and sequential disk labels. The ILBDDSRO subroutine is used to read sequentially the records of a directly organized file. The ILBDDIOO subroutine is used to read randomly the records of a directly organized file. Appendix E: COBOL Library Subroutines 289 The ILBDISMO subroutine is used to read an indexed file. Input/Output Error Subroutines REWRITE Statement Subroutines The ILBDSAEO subroutine is used for processing input/output errors that occur on tape and sequential disk. The ILBDDIOO subroutine is used to update records on a directly organized file. The ILBDDAEO subroutine is used for processing input/output errors that occur on directly organized files. The ILBDISMO subroutine is used to update an indexed file. The ILBDISEO subroutine is called whenever an input/output error occurs during the processing an indexed file. DISPLAY (EXHIBIT and TRACE) Subroutines The ILBDABXO subroutine is used to issue a STXIT macro instruction causing control to be passed to i t if there is an error on a unit-record device. The ILBDDSPO subroutine formats one or more operands into printed lines, performing conversions as needed. The ILBDOSYO and ILBDASYO subroutines open SYSLST and/or SYSPCH and/or SYSIPT if there are DISPLAY or ACCEPT statements in a label declarative. ACCEPT and STOP (literal) Statement Subroutines The ILBDACPO subroutine is used to handle ACCEPT statements for both SYSIPT and the console, as well as the STOP (literal) statement. The ILBDACPO subroutine does not format or convert operands. For operands greater than 80 characters in length, any remainder in excess of the nearest multiple of 80 is ignored when accepting data from SYSIPT. Disk Extent Subroutines The ILBDFMTO subroutine writes record 0 (RO) on each track of each extent of a directly organized file opened as output, and writes an end-of-file (EOF) record as the last record in the file. This subroutine is called after the file has been opened. The ILBDXTNO subroutine stores for subsequent use the extent information for directly organized files. 3886 OCR Subroutine CLOSE Subroutine The ILBDCRDO subroutine is given control when a CLOSE UNIT statement is issued for a sequential input file with direct organization. The ILBDOCRO subroutine is used to perform I/O operations for the 3886 Optical Character Reader. VSAM Subroutines Multiple File Tape Subroutine The ILBDMFTO subroutine is given control when a reel contains more than one file and there are no standard labels. Tape Pointer Subroutine The ILBDIMLO subroutine locates the pointer to the physical tape drive associated with the logical unit for a particular tape file. 290 The ILBDINTO subroutine does initialization for VSAM processing. The ILBDVOCO performs VSAM open ahd close functions. The ILBDVIOO performs all action requests for VSAM files (for example, READ, WRITE, REWRITE, S~ARTr DELETE). These routines may call the Checkpoint subroutine and $$BCOBRl discussed later in this chapter. Auxiliary Subroutines output) and three internal (for internal processing) • Certain input/output subroutines use auxiliary subroutines as follows: The five external formats are: Auxiliary Routine ILBDMOVO ILBDIDAO ILBDTABO Used By ILBDSPAO, ILBDNSLO, ILBDVBLO ILBDFMTO, ILBDDSRO ILBDDIOO, ILBDIDAO, ILBDCKPO • External or zoned decimal • External floating-point • Sterling display ASCII SUPPORT SUBROUTINES • Numeric edited The subroutine described below handles functions necessary for files written in ASCII. Other functions are handled by code gene~ated by the compiler or by the subroutine ILBDSPAO. • Sterling report The three internal formats are: Separately Signed Numeric Subroutine • Internal or packed decimal The ILBDSSNO subroutine is called to check the validity of signs described as TRAILING SEPARATE CHARACTER or LEADING SEPARATE CHARACTER. CONVERSION SUBROUTINES Eight numeric data formats are permitted in COBOL: five external (for input and • Binary • Internal floating-point The conversions from internal decimal to external decimal, from external decimal to internal decimal, and from internal decimal to numeric edited are performed in-line. The other conversions are performed by the COBOL library subroutines shown in Table 35. Appendix E: COBOL Library Subroutines 291 Table 35. Functions of COBOL Library Conversion Subroutines Conversion Subroutine Name and Entry Points To From ILBDEFL2 External floating-point Internal decimal ILBDEFL1 External floating-point Binary ILBDEFLO External floating-point Internal floating-point ILBDBIDOI Binary Internal decimal Binary External decimal Binary Internal floating-point Binary External floating-point ILBDTEF2 Internal decimal External floating-point IFBDTEF3 Internal floating-point External floating-point ILBDIDBO Internal decimal Binary. ILBDIDB1 External decimal Binary ILBDDCI1 Internal decimal Internal floating-point ILBDDCIO External decimal Internal floating-point ILBDIFDO Internal floating-point Internal decimal ILBDIPD1 Internal floating-point External decimal ILBDIFBl Internal floating-point Binary integer and a power of 10 exponent ILBDIFB03 Internal floating-point Binary ILBDIDRO Internal decimal Sterling report ILBDIDTO Internal decimal Sterling non-report ILBDSTIO Sterling non-report Internal decimal ILBDBID11 ILBDBID21 ILBDBIEOI ILBDBIEll ILBDBIE21 ILBDBIIOZ ILBDBII12 ILBDTEF02 ILBDTEF12 ILBDIFB2 3 liThe entry points used depend on whether the double-precision number is in registers 0 I and 1, 2 and 3, or 4 and 5, respectively. 12The entry points are for single-precision binary and double-precision binary, I respectively. 3 1 , This entry point is used for calls from other COBOL library subroutines. 292 ~ , ARITHMETIC VERB SUBROUTINES SEGMENTATION FEATURE SUBROUTINE Most arithmetic operations are performed in-line. However, involved calculations with very large numbers, such as decimal multiplication of two 30-digit numbers, are performed by COBOL library arithmetic subroutines. These subroutine names and their functions are shown in Table 36. The Segmentation Feature requires an object time subroutine, ILBDSEMO. The ILBDSEMO subroutine performs the following functions when segments are needed: 1. Loads and initializes independent segments not in storage. 2. Loads overlayable segments not in storage. 3. Initializes independent segments if the segment is in storage. 4. Branches to desired entry points. SORT/MERGE FEATURE INTERFACE ROUTINE Communication between the Sort/Merge program and the COBOL program is maintained by ILBDSRTO and ILBDMRGO. CHECKPOINT (RERUN) SUBROUTINE OTHER VERB ROUTINES The ILBDCKPO subroutine issues the checkpoint macro instruction, which will write checkpoint records on a programmerspecified tape or disk checkpoint device. There are two calling sequences to this subroutine. The first, ILBDCKP1, is activated during initialization when the addresses of all files in the program are entered in a table. The second, ILBDCKP2, is required to take checkpoints during a sorting operation. There are also COBOL library subroutines for comparisons, the verbs MOVE and TRANSFORM, and other features of the COBOL language. If RERUN is requested during a sorting operation, ILBDSRTO must gather a list of physical IOCS files in use by the Sort program every time Sort exits at Ell, E21, and E31. ILBDSRTO then calls the checkpoint subroutine which will take a checkpoint of all active files. Table 36. Compare Subroutines The ILBDVCOO subroutine compares two operands, one or both of which is variable in lengtha Each may exceed 256 bytes. The ILBDIVLO subroutine is used in comparisons involving the figurative constant ALL 'literal', where literal is greater than one character. Functions of COBOL Library Arithmetic Subroutines r---------------T-----------------------------------------------------------------------, I Subroutine Name 1 Function I ~---------------+-----------------------------------------------------------------------~ IILBDXMUO I Internal decimal multiplication (30 digits * 30 digits = 60 digits) I ~---------------+-----------------------------------------------------------------------~ JILBDXDIO I Internal decimal division (60 digits/30 digits = 30 digits) I ~-~-------------+-----------------------------------------------------------------------1 IILBDXPRO I Decimal fixed-point exponentiation I ~---------------+-----------------------------------------------------------------------~ IILBDF"PWO J Floating-point exponentiation I ~---------------+-----------------------------------------------------------------------1 iILBDGPW01 i Floating-point exponentiation ! ~---------------~-----------------------------------------------------------------------~ J1The ILBDGPWO entry point is used if the exponent has a PICTURE clause specifying an J Il _______________________________________________________________________________________ integer. The ILBDFPWO entry point is used in all other cases. JI Appendix E: COBOL Library Subroutines 293 MOVE Subroutines Main Program or Subprogram Subroutine The ILBDVMOO subroutine is used when one or both operands is variable in length and in-line instructions cannot be generated (for example, fields overlap, etc). Each may exceed 256 bytes. The subroutine has two entry points, depending on the type of MOVE: ILBDVMOO (left-justified) and ILBDVM01 (right-justified). The ILBDMNSO subroutine is a 1-byte switch tested in the code generated for EXIT PROGRAM, GOBACK, INIT1, and INIT2e The ILBDANFO subroutine is used to move the figurative constant ALL 'literal', where literal is greater than one character. The ILBDANEO subroutine is used to perform a right-or left-justified alphanumeric edited move. The ILBDSMVO subroutine handles moves to right-justified receiving fields either greater than 512 bytes in length or variable in length. TRANSFORM Subroutine The ILBDVTRO subroutine transforms variable-length items using the ILBDTRNO transform table. Class Test Subroutine The ILBDCLSO subroutine is used to perform class tests for variable-length items and those fixed-length items longer than 256 bytes. The ILBDSETO subroutine must be called by a non-American National Standard COBOL program prior to any call to an American National Standard COBOL program. When calling ILBDSETO, standard linkage conventions must be observed; there are no parameters to be passed. The ILBDSETO subroutine sets the 1-byte switch (ILBDMNSO) to X'FF'. This switch is tested in the American National Standard COBOL program to determine whether it is a main or a called program. The name of this subroutine can be changed to any name desired by the COBOL user. OBJECT-TIME DEBUGGING SUBROUTINES Three options are available for object-time debugging. These are the statement number option (STATE), the flow trace option (FLOW), and the symbolic debug option (SYMDMP). The subroutines for the first two options provide debugging information when a program terminates abnormally; the subroutines for the third option provide debugging inforrration either at abnormal termination or dynamically during execution of a program. All of the subroutines are under the control of and are serviced by the Debug Control Subroutine (ILBDDBGO). This section discusses (1) the Debug Control Subroutine, and (2) the subroutines that are called in response to each of the three debugging options. Debug Control Subroutine Note: The following tables are placed in the library for use by the in-line coding generated by the compiler and the subroutines called for by both the class test and TRANSFORM: ILBDATBO ILBDETBO ILBDITBO ILBDUTBO ILBDWTBO Alphabetic class test External decimal class test Internal decimal class test Unsigned internal decimal Unsigned external decimal SEARCH Subroutine The ILBDSCHO subroutine processes each search argument key according to type. 294 The ILBDDBGO subroutine is included in the load module whenever the CBL control card for a program contains at least one of the debugging options, or when the CBL control card for a program requests execution statistics. Statement Number Subroutine The ILBDSTNO subroutine provides the number of the statement and the number of the verb being executed when abnormal termination occurs.· If abnormal termination occurs during execution of an instruction outside of the COBOL program, the statement number that is provided is that of the last COBOL instruction executed. Flow Trace Subroutine Space is allocated at compile time for a flow trace table using the programmerspecified number in the FLOW option of the CBL card. (If FLOW=O was specified for a subprogram, no space is allocated; rather the subprogram shares the table space reserved by that program preceding it in the calling sequence for which a FLOW specification was made.) Each time the flow trace subroutine ILBDFLWO receives control from the COBOL program, it inserts the executing program's identification as well as the card number of the current procedure into the next available position in the table. When the end of the table is reached. subsequent entries overlay the first set of entries. The procedure is repeated until the end of the program or until abnormal termination. If abnormal termination occurs, the subroutine produces a list of each entry of the table, beginning with the earliest entry. OBJEC'I'-TIME EXECUTION STATISTICS SUBROUTINES The object-time execution statistics subroutines enable the printing of execution statistics when a program terminates normally (via STOP RUN or GOBACK in the main program) and when a program terminates abnormally. In addition, when COUNT is requested, the debug control subroutine (described above) is also included in the load module. COUNT Initialization Subroutine The ILBDTCOO subroutine is called from the debug control subroutine to get space for an initialize the table and chains which service the COUNT options. COUNT Frequency Subroutine The ILBDCT10 subroutine maintains the execution frequency statistics. Symbolic Debug Subroutines The symbolic debug subroutines provide a formatted symbolic dump, either dynamically at execution time, or at abnormal termination. The following subroutines perform initialization and precess debug control cards: ILBDMP1C, ILBDMPll, ILBDMP12, ILBDMP13, ILBDMP14, and either ILBDMPOl or ILBDMP02. To provide a dump at abnormal termination, the following subroutines are used: ILBDMP20, ILBDMP21, ILBDMP22, ILBDMP23, ILBDMP24, ILBDMP25 an,j ILBDMPOl or ILBDMP02. These subroutines are not included in the load module at link edit time; they are loaded dynamically during program execution. The ILBDADRO subroutine tests the validity of an address calculated for a subscripted identifier or the validity of the starting and ending addresses of a variable-length identifier used as the receiving field in a MOVE statement. COUNT Termination Subroutine The ILBDTC20 subroutine is included in all COBOL load modules. It determines if execution frequency statistics were requested. COUNT Print Subroutine The ILBDTC30 subroutine formats and prints the execution frequency statistics. OPTIMIZER SUBROUTINES GO TO ••• DEPENDING ON Subroutine The ILBDGDOO subroutine is called only when the optimization option (OPT) has been specified. It is used to more efficiently process GO TO statements with the DEPENDING ON option in both segmented and nonsegmented programs. Appendix E: COBOL Library Subroutines 295 Optimizer DISPLAY Subroutine Error Message Subroutine The ILBDDSSO subroutine is used to print or type certain data types on SYSLST or the console, respectively. The $$BCOBER subroutine prepares input/output error messages. ErrOr Message·Print Subroutine TRANSIENT SUBROUTINES The IBM DOS/vS COBOL Object-Time Subroutine Library includes routines that are dynamically fetched during program execution. These routines are as follows: The $$BCOBRl subroutine prints the error messages prepared by $$BCOBER and provides a dump if the DUMP option is in effect. Reposition Tape Subroutine Symbolic Debug Subroutines with the exception of ILBDDBGO, the symbolic debug subroutines described previously are transient routines. SYMDMP Error Message Subroutine The $$BCOBEM subroutine prepares SYMDMP error messages. 296 The $$BFCMUL subroutine resets the PUB pointer for a particular (SYSnnn) device to the same as that saved earlier by the gubroutil'leILBDIMLO. If dynamically fetched subroutines are required during problem program execution. the Subroutine Library must be installej on the object machine. If dynamically fetched subroutines are not required during problem program execution, the object-time subroutines can be link edit~d on the source machine; the Subroutine Library must in this case be installed on the source machine. ~: APPENDIX F: This appendix contains information concerning system and size requirements for the DOS/VS COBOL compiler, execution time considerations, and the Sort/Merge Feature. Additional information used in estimating the virtual and auxiliary storage requirements is contained in the publication IBM DOS/VS COBOL Compiler and Library, Installation Reference Material. MINIMUM MACHINE REQUIREMENTS FOR THE COMPILER 1. 2. A System/370 supported by DOS/VS. A minimum of 60K bytes of virtual storage is required. Five work files. The system logical unit SYSLNK must be assigned to a single area (extent) on a 2314, 2319, 3330, 3340, 3350, or fixed block mass storage device. Four programmer logical units (SYS001 through SYS004) must reside on 2400, 3410, 3420 tape units, or on 2314, 2319, 3330, 3340, 3350, or fixed block mass storage devices. At least one programmer logical unit as well as the operating system must reside on a mass storage device (that is, a 2311, 2314, 2319, 3330, 3340, 3350, or fixed block mass storage device). If the three remaininq logical units reside on tape, there must be a separate tape unit for each file. If they reside on mass storage devices, there must be enough space on those devices. An additional logical unit, SYS005, must be assigned if the symbolic debug option (SYMDMP) is being used. Logical unit SYS006 must be assigned for the FIPS flagger. Work file assignments must be made as follows: SYSLNK SYS001 SYSOO2 - SYSOO3 - SYSOO4 - SYSOO5 - SYSOO6 - mass mass mass unit mass unit mass unit mass unit mass storage device storage device storage device or tape storage device or tape SYSTEM AND SIZE CONSIDERATIONS The filenames for SYSLNK and SYS001 through SYS006 on the TLBL or DLBL statements are IJSYSLN, IJSYS01~ IJSYS02, IJSYS03, IJSYS04, IJSYS05, and IJSYS06, respectively. If the "filename" parameter of the SYlI.DMP option is specified, this filename is used instead of IJSYS05 on DLBL statements. 3. A device, such as a printer keyboard, for direct operator communication. 4. A device, such as a card reader, for the job input stream. 5. A device, such as a printer or tape unit, for system output files. 6. The floating-point arithmetic feature, if floating-point literals or calculations are used. SOURCE PROGRAM SIZE CONSIDERATIONS Compiler Capacity This section contains information which must be considered in determining the limitations on the size of a COBOL source program in a specific virtual storage size. It also contains information to aid the programmer in determining how his source program affects usage of space at compilation time. The capacity of the COBOL compiler is limited by two general conditions: (1) the total table requirement may be greater than the space available and (2) the fact that an individual table (with the exception of the ADCON and cross-reference tables) nlay need to be longer than 32,767 bytes. If either of these conditions are met during compilation, one of the following error messages will be issued: ILA0001I-D NO MORE TABLE SPACE AVAILABLE. COMPILATION ABANDONED. storage device or tape storage device or tape ILA0003I-D A TABLE HAS EXCEEDED THE ~illXIMUM SIZE. COMPILATION ABANDONED. storage devi-::e unit Note that SYSLNK need only be assigned at compile time if the CATAL or LINK option is in effect. ILA6007I-D TABLE HAS EXCEEDED MAXIMUM SIZE. LISTX, OBJECT MODULE, AND DECK WILL BE INCOMPLETE. INCREASE PARTITION. Appendix F: System and Size considerations 297 In each case, compilation is terminated. However, in the first and third cases, or in the case of overflow of the ADCON or cross-reference table, the program may be recompiled with a larger size parameter. 10 files, assuming an average of 3 subordinate record entries Effective Storage Considerations The compiler will accept and compile a 1500 card program in the minimum storage of 64K. In this configuration, the minimum size compiler input/output areas must be allocated. If both LINK and DECK are specified, more storage is required for buffer space, which reduces the space available to a given program. Within this configuration, the compiler will accept programs much larger than 1500 cards; the specific size limitation for any storage size depends entirely on the statement mix in that program, but the limiting factors are described in the next section. The overall critical limit using the minimum buffer specification may be expressed as follows: 2 (number of pn's + gn's + literals + virtuals) + 8A + S (L + 5D + 8V + 3P) 14336 + C ~ where the number of virtuals is the number of calls to COBOL object-time subroutine entry points and subprograms specified in a CALL statement, and V is the number of unique such names; also A = number of entries in as defined below . ~he ADCON table S 1 if the segmentation Feature is required and NOOPT is in effect; otherwise 0 L length of optimized literals D number of segment discontiguities in the Procedure Division P number of PERFORM exits and altered GO TO statements C any storage over 64K assigned to the The performance of the compiler is affected by the amount of storage it is allocated. The compiler will take advantage of any extra storage it is assigned. Furthermore, the use of a BUF parameter tailored to the work file device type in use is recommended. The following CBL parameters positively affect compile-time performance: OPT SYNTAX (CSYNTAX) NOLIB BUF The amount of virtual storage within the compiler's partition and the liroitation on the size of an individual internal table are two factors that limit the capacity of the compiler. The limitation on the size of internal tables can, in some instances, be overcome by the spilling over of some tables onto external devices. However, spilling over may cause a severe degradation of performance. The storage limitation should not be reached by any reasonable use of the language. However, within a limited storage capacity, excessive use of certain features and cowbination of features in the language could make cOIT.pilation impossible. Some of the features that significantly affect storage usage are: 1. ADCON Table Each entry occupies 8 bytes. This table is not limited to the maximum size of 32,767 bytes. Entries are based on: • Number of 4096-byte segroents in the Working-Storage section progr~m It should be noted that the number of gn's is reduced when using OPT. • Number of 4096-byte segments in a file buffer area • Number of referenced procedure-names Within this configuration, assuming no Report Section, the compiler will accept for example: 300 procedure references assuming an average procedure-name length of 12 characters 25 OCCURS clauses with the DEPENDING ON option • Number of implicit procedure-name references such as those generated by IF, SEARCH, and GENERATE statements, ON SIZE ERROR, I~~ALID KEY, and AT END options, the OCCURS clause with the DEPENDING ON option, USE sentences, and the Segmentation Feature • 298 Number of files The size of this table is significantly reduced when using OPT. 2. data item. Some of the features that contribute to the value Q are: • One byte for each character in a numeric edited or alphanumeric edited item PICTURE clause. Procedure-Name Table This table contains the number of definitions written in a section and unresolved procedure references. Procedure references are resolved at the end of a section if the definition of the procedure-name is in that section or a preceding section. Therefore, forward references beyond a section impact space. 3. • Three bytes for an item subordinate to an OCCURS clause. In the statistics output, an indication is given if spill of this table occurred. If spill occurred, increasing the partition size assigned to the compiler should increase performance. OCCURS DEPENDING ON Table This table contains an entry for each unique object of an OCCURS clause with the DEPENDING ON option. The size of an entry is (2 + length of name + length of each qualifier) bytes. 4. • Five bytes for an elementary item with a sterling report PICTURE clause. 9. The total length of all literals (after optimization) may not exceed 32511 bytes. No more than 16255 literals may be specified. Index Table An entry is made for each INDEXED BY clause consisting of 11 bytes for each index. 5. If the segmentation feature is used, an area corresponding to the total length of all optimized literals must be kept free during the time the ADCON table is being built. Therefore, a segmented pro~ram with literals may need more storage. File Table An entry is made for each file specified in the program. Each entry occupies 60 bytes of storage. 6. 10. Report Writer Tables A considerable amount of information is maintained concerning each RD such as controls, sums, headings, footings, routines to be generated, etc. The contents of the table is increased by the existence of qualification and subscripting in the Report Section. Approximately 30 reports can be processed, without exceeding the limit of a table. 7. Literal Tables Miscellaneous Tables The existence of the following items causes entries to be made into tables and impacts the total space required for compilationo • • • • • • • • • • • • Operand Table Entries are made depending on the number of operands in a statement. This table could reach its limits by the use of compound nested IF statements or GO TO DEPENDING ON statements with an excessive number of branch points. SAME (RECORD) AREA clause Subscripting Intermediate Arithmetic Results Complex Arithmetic Expressions Complex Logical Expressions APPLY clauses Special-Names RERUN clauses Error messages XREF Segmentation feature VERBSUYvVERBREF EXECUTION TItJJE CONSIDERATIONS 8. Dictionary Table An entry is made for each procedure-name and each data-name in the program. A procedure entry consists of (7 or 9 + length of name) bytes. A data entry consists of (length of name + n) bytes, where Q is determined by the attributes of the The amount of virtual storage must be sufficient to accomodate at least: • The selected control prograITI • Support for the file processing techniques used Appendix F: System and Size considerations 299 • Load module to be executed • Dynamic storage for VSAM, 3886 processing, and COUNT. When the OPTIMIZE option is specified, the number of procedure blocks in the program cannot exceed 255. A procedure block is approximately 4096 bytes of Procedure Division code. COBOL programs compiled with any of the symbolic debugging options (STATE, FLOW, SYMDMP) have different requirements at execution time than similar programs compiled without these options. The" following differences should be noted: • If the SYMDMP option is in effect, the work file required at compile time (SYS005) must be present at execution time. • The size of the load module will increase by about 3200 bytes if the SYMDMP option is in effect. In addition, since the object-time subroutine that provides SYMDMP output is invoked dynamically, the programmer must provide space in the partition amounting to S + V. When only an abnormal termination dump is required, S = 4000 and V = 0; that is, 4000 extra bytes must be available. When dynamic dumps are required, S = 11,000 and V is approximately 25 * number of linecontrol cards + 10 * the number of identifiers specified on these linecontrol cards. • The size of the load module will increase by 4500 + V bytes if the FLOW option is in effect. V is a variable factor that depends upon the number specified by the programmer on the CBL card. V is calculated using the formula: V = 92 + 4 * nn + 8 * p where "nn" is any number from 0 through 99, and "pH is the number of procedure-names in the program. • A SIZE parameter must be specified on the EXEC card for VSAM and 3886 processing and if COUNT is requested on the CBL card. COBOL programs with the execution frequency option COUNT have the following additional requirements: • The size of the load module will increase by about 6000+V bytes (if any of the symbolic debugging options are in effect) to 8900+V bytes (if the symbolic debugging options are not in effect). V is calculated using the formula: V=(54 * pgm)+(8*nvb)+C7*npr)+«4+sym) * vbl)+pnl where pgm is the number of COPOL program units being monitored by COUNT nvb is the number of verbs in the program units npr is the number of procedure-names plus inserted pror,edure-names in the program sym is zero unless SYMDMP is in effect, then it becomes two vbl is the number of verb blocks in the program (which can be estimated as 1/3 the number of verbs in the program) pnl is the sum of the lengths of the procedure-names. • The increase in dynamic storage in estimated using the formula D = 512+(72*pgm)+(4 * vbl) where pgm is the number of COBOL programs being monitored by COUNT vbl is the number of verb blocks in the program (which can be estimated as 1/3 the number of verbs in the program). • The size of the load module will increase by 4600 + V bytes when the STATE option is in effect. V is approximately 5 * the number of COBOL statements in the program. MULTIPROGRAMMING CONSIDERATIONS • When both SYMDMP and FLOW are in effect, the size of the load module will increase by the amount it would for FLOW alone, and the size of the partition increases by the amount it would for SYMDMP alone. In a system which supports the batch-job foreground (NPARTS = 2 or more) and private core-image library options, the Linkage Editor can execute in any foreground partition (as well as the background 300 ~ ~ partition) provided a mlnlmum of 14K or 64K of storage is assigned to the partition. When executing in a foreground partition. a private core image library must be assigned. In the multiprogramming environment described above. the COBOL compiler can be executed in any partition having a minimum of 64 bytes in the following manner: At system generation time. link edit the compiler in the background partition and place it in the system core image library. SORT FEATURE CONSIDERATIONS The DOS/VS SORT/MERGE Program Product. Program Number 5746-SM1. must be executed under control of DOS/VS. It requires the following minimum machine configuration: 1. 2. Standard instruction set. 3. At least one 2314, 2319, 3330, 3333, 3340, or 3350 work file. (System residence requirements may necessitate having an additional disk storage unit for sorting.) 4. One IBM 1403, 1443, or 3211 Printer, or one IBM operator communication device (for example, 3215). 5. One IBM 1442, 2501, 2520, 2540, 3505, 3525, or 2560 Card Reader, or one IBM 2400 or 3400 Series Magnetic Tape Unit (7- or 9-track) assigned to SYSIPT and SYSRDR. 6. Three IBM 2400 or 3400 Series Magnetic Tape Units for work files when tape units are to be used for intermediate storage. For specific size. device~ apd work file requirements of the other Sort/Merge products, see the respective Programmer's Guides as noted in the preface. The DOS/VS SORT/MERGE Program Product uses 16K bytes; additional storage is needed for DOS/VS and for user-written r0utines (that is, the COBOL program, etc. ) • Note: If a size parameter is used in the 77EXEC statement, it should be used as follows: Note: Performance often increases significantly if 50K is available for operation of the Sort/Merge program. At the lOOK level. the performance could be even higher. //EXEC,SIZE= (AUTO ,nK) where NK has to meet specific Sort storage requirements. ' Appendix F: System and Size Considerations 300.1 APPENDIX G: PROGRAM COMMUNICATION Byte(s) Information 23 UPSI (user program switch indicators). Set to binary zero when the JOB statement for the job is encountered. Initialized by UPSI job control statement. For each partition, the supervisor contains a storage area called the communication region. The supervisor uses the communication region, and your program also can use it. Your program can check the communication region of the partition in which your program runs; your program can also modify the user area of this communication region. The condition-name associated with the status of the UPSI switches can be specified in the COBOL program via the Special-Names paragraph of the Environment Division. The condition-name associated with each may be tested in the Procedure Division of the COBOL program. Figure 68 shows the portion of the corr~unication region containing information of interest. This information is also described below. Byte(s) Information 0-7 Calendar date. Supplied from system date whenever the JOB statement is encountered. The field can be two forms: mm/dd/yy or dd/mm/yy where mm is month, dd is day, yy is year. It can be temporarily overridden by a DATE statement. 8,9 Address of the problem program area. 10,11 Address of the beginning of the problem program area. 12-22 User area for communication within a job step or between job steps. All 11 bytes are set to z~r.9 wheI1 the '//JOB' JOB control-statement is encountered. COMMUNICATION REGION 24-31 Job name as found in the JOB statement for the job. 32-35 Address of the uppermost byte of the program area. If the program was initiated with the SIZE parameter in the EXEC job control statement, this address gives the highest duty of the area determined by the SIZE parameter. If the SIZE parameter was not specified, the address is the highest address in the partition (either real or virtual). Address of the uppermost byte of the current phase placed in the program area by the last FETCH or LOAD macro in the job. 36-39 Note: The COBOL compiler uses bytes 12 and 13. } ~ ~ Q) J: a.. i 0 a': ~ :0 0 a': CS § Q) a. a. :::) .. Q) -0"0 « -0 -g c:'" '0 c: Q) ...., In J: :c'" .. E ~ o Q) .!« .0_ ".0 Cl. .. ... .J o E ~~ c: 0 Q) .. .Ja.. l 43 4445 3940 Byt~~r-________~~~~~~____________~~~________~31~32~~3~5~3~6__~~~-=~~LJ Address of first byte supplied in register 1 by COMRG Figure 68. Communication Region in the Supervisor Appendix G: Communication Region 301 ~yte fs) Information 40-43 Highest ending virtual storage address of the phase among all the phases having the same first four characters as the operand on the EXEC statement. For the background partition only, job control builds a phase directory of these phases. The address may be incorrect if the program loads any of these phases above its link-edited origin address and the relocating loader is not used. If the EXEC statement has no operand, job control places in this location the ending address of the phase just link-edited. 44,45 Length of program label area. The COM-REG special register may be used to access bytes 12-22 of the communication region. 302 APPEND1X H: This appendix illustrates the necessary job control statements and their sequence for five typical programs: i. Creating a Direct File 2. Retrieving and Updating a Direct File 3. Creating an Indexed File 4. Retrieving and Updating an Indexed File 5. Sorting an Unlabeled Tape File In all five programs the programmer has requested the following compiler options through the OPTION control statement: NODECK -- No punched card output for the object program is needed. LINK specified must be associated with the device whose number is given in the device field of system-name. The DLBL control statememt fora labeled file on a mass storage device must. contain the same name as system-name. This is the name by which the file is known to the control program. (The ~ field of system-name is optional. If ~ is omitted, the DLBL statement must. specify the logical unit (SYSnnn) as the file-name.) The code field of the D~BL statement must co~tespOnd .tothe class and orqanization fields of ·system.... ~narne as follows: DLBL "code" I ASSIGN I ASSIGN 1 "class"! .. "organization" --------+-----.;;..;.;..~~+;,..:.;.,.;;.;~~..;;.;;...~-~-'.;.. SO I DA'or uf .The object module is to be linkage edited. LIST The COBOL source statements are to be printed on SYSLST. LISTX A Procedure Division map with global tables, literal pool, and register assignments is to be printed on SYSLST. DA SYM A Data Division map is to be pr~nted on SYSLST. ERRS The diagnostic messages of the COBOL compiler are to be printed on SYSLST. The EXEC FCOBOL statement calls for execution of the FCOBOL compiler. By using the CBL card, the programmer indicates that in this source program the quotation mark (") is used for nonnumeric literals. The ASSIGN clause in the COBOL source program specifies a system-name with the following fields: (Non-VSAM) SYSnnn-class-device-organization[-name] (VSAM) SYSnnn[-class] [-device] [-organization] [-name] The ASSGN control statement for a file must specify the same logical unit as the SYSnnn field of system-name. The ASSGN statement assigns the logical unit to a specific hexadecimal address. The address SAMPLE JOB DECKS DA ISC DA ISE DA t r s . . .- AS (entrysequenced file) omitted (keysequenced file) I I I I I I A or UI' D or i I I I Vi] I I If SYSnnn is omitted from the first EXTENT control statement:· for a' file on a" mass storage device, then the logical' unit is determinedfroro the SYSilhnfield of the COBOL system-name; if SYSnnn is included in the first EXTENT statement and differs from SYSnnn of the system.... name, the EXTENT card specification overrides the COBOL source specification. (Subsequent EXTENT statements for the same file, if they immediately follow the first, may omit this field.) The type of the ~xtent must be compatible with the organization field of systemname as follows: EXTENT "type" I ASSIGN I "orgartization" --T------------------t--------------1 I (data area, no I S, A, U, I,D, I split cylinder) I I I I I 2 I (overflow area fori I indexed file) I I I 4 I (index area for I I indexed file) I ! I 8 I (data area, split t I cylinder) I Appendix H: Vi] AS I I S, A, U, I,D, W Sample Job Decks 303 DIRECT FILES The following two examples illustrate the job control statements necessary for programs that create and update a direct file. In the COBOL source programs, the programmer has written: SELECT DA-FILE ASSIGN TO SYS015-DA-2311-A-MASTER ••• (Note relative required updating the file that in the EXTENT statement, the track number (1020) is not for the input DA file of the program, since the system will use labels for this information.) The EXEC statement begins execution of the problem program, and is followed by input data. The /* statements indicate end-of-data, the /& statement indicates end-of-job. SELECT CARD-FILE ASSIGN TO SYS007-UR-2540R-S ••• In the READFILE source program, the programmer has written: PRINT-FILE ASSIGN TO SYS008-UR-2403-S ••• Creating a Direct File SELEC~ (Note the relationship between the system-names in the source programs and the control statements.) // JOB CREATEDA // OPTION NODECK,LINK,LIST,LISTX,SYM,ERRS // EXEC FCOBOL CBL QUOTE {COBOL source deck} The LBLTYP statement defines the amount of storage to be reserved to process labels for the DA file. The file has one extent. The EXEC LNKEDT statement causes the object program to be link edited. An ASSGN control statement assigns logical unit SYS007 to the hexadecimal address OOC -- a 2540R Card Reader. In the updating program, another ASSGN statement assigns logical unit SYS008 to the hexadecimal address OOE -- a 1403 Printer. /* // // // // // // // LBLTYP NSD(Ol) EXEC LNKEDT ASSGN SYS007,X'00C' ASSGN SYS015,X'192' DLBL MASTER,,74/365,DA EXTENT SYS015,111111,1,0,1020,100 EXEC {input data cards} /* /& The next series of statements identify the direct file completely. Retrieving and Updating a Direct File The ASSGN statement identifies the file as residing on logical unit SYS015, which has the hexadecimal address of 192 -- a 2311 Disk Drive. // JOB READFILE // OPTION NODECK,LINK,LIST,LISTX,SYM,ERRS // EXEC FCOBOL CBL QUOTE The DLBL statement specifies the filename as MASTER, with an expiration date of the 365th day of 1973, and that the file has direct organization (DA). /* The EXTENT statement specifies that the file residing on logical unit SYS015 has a serial number 111111, that the extent is a data area with no split cylinder and that this is the first (and only) extent for the file (type and sequence number 1,0), that the file begins on relative track 1020 (track 0 of cylinder 102), and that the file occupies 100 tracks. 304 {COBOL source deck} // // // // // // // // LBLTYP NSD{Ol) EXEC LNKEDT ASSGN SYS007,X'OOC' ASSGN SYS008,X'OOE' ASSGN SYS015,X'192' DLBL MASTER,,74/365,DA EXTENT SYS015,111111,l,O,1020,100 EXEC {input data cards} /* /& INDEXED FILES The following two examples illustrate the job control statements necessary for programs that create and update an indexed file. In the CREATEIS source program, the programmer has written: SELECT IS-FILE ASSIGN TO SYS015-DA-2314-I-MASTER ACCESS IS SEQUENTIAL RECORD KEY IS R~C-ID. In the RANDIS source program, the programmer has written: SELECT IS-FILE ASSIGN TO SYS015-DA-2314-I-MASTER ACCESS IS RANDOM NOMINAL KEY IS KEY-ID RECORD KEY IS REC-ID. SELECT PRINT-FILE ASSIGN TO SYS008-UR-1403-S RESERVE NO ALTERNATE AREAS. the retrieval program, the file label is indexed sequential using Load Extension, Add or Retrieve (code ISE). The first EXTENT statement is identified as a master index (type and sequence numbers are 4,0), and the relative track is i 900 (the extent begins on cylinder 90 track 0), and the extent is 20 tracks long. The second EXTENT statement is identified as a cylinder index (type and sequence number are 4,1), the relative track is 1820 (the extent begins on cylinder 91, track 0), and the extent is 20 tracks long. (Note that the extents assigned to master and cylinder indexes must be contiguous, and that the master index must precede the cylinder index on the disk pack. Also note, that if a master index is not requested, the first extent is that for the cylinder index, which would be type 4, sequence number 1.) In both source programs, he has written: SELECT CARD-FILE ASSIGN TO SYS001-UR-2540R-S. I-O-CONTROL. APPLY MASTER-INDEX TO 2311 ON IS-FILE. (Note the relationship between the source program statements and the job control statements.) The LBLTYP statement defines the amount of storage reserved to process labels for the indexed file. The file has three extents: a master index extent, a cylinder index extent, and a data extent. The EXEC LNKEDT statement causes the object module to be link edited. An ASSGN control statement assigns logical unit SYS001 to the hexadecimal address OOC -- a 2540R Card Reader. The third EXTENT statement is identified as a data area (type 1) and is the third extent named for this file. The relative track is 0020 (the extent begins on cylinder 1, track 0), and the extent is 1160 tracks long. End-of-data is indicated with the /* statement; end-of-job is indicated with the /& statement. Creating an Indexed File // JOB CREATEIS // OPTION NODECK,LINK,LIST,LISTX,SYM,ERRS // EXEC FCOBOL CBL QUOTE {COBOL source deck} In the retrieval program, another ASSGN statement assigns logical unit SYS008 to the hexadecimal address OOE -- a 1403 Printer. The next ASSGN statement assigns logical unit SYS015 to the hexadecimal address 193 a 2314 Disk Drive. The DLBL statement names the file as MASTER, and indicates the expiration date as the 365th day of 1974. In the file creation program, the file label is indexed sequential using Load Create (code ISC); in /* // // // // // // // // // LBLTYP NSD(03) EXEC LNKEDT ASSGN SYS001,X·00C· ASSGN SYS015,X'193· DLBL MASTER,,74/365,ISC EXTENT SYS015,111111,4,O,1800,20 EXTENT SYS015,111111,4,1,1820,20 EXTENT SYS015,111111,1,2,0020,1760 EXEC {input data card} /* /& Appendix H: Sample Job Decks 305 Retrieving and Updating an Indexed File (Note the relationship between the system-names in the COBOL source program and the control statements.) II JOB RANDIS /1 OPTION NODECK,LINK,LIST,LISTX,SYM,ERRS /1 EXEC FCOBOL The EXEC LNKEDT statement causes the job to be link edited. {COBOL source deck} /1 LBLTYP NSD(03) 1/ EXEC LNKEDT II ASSGN SYS007,X'OOC' II ASSGN SYS008,X'OOE' /1 ASSGN SYS015,X'193' II DLBL MASTER,,73/365,ISE II EXTENT SYS015,111111,4,0,1800,20 II EXTENT SYS015,111111,4,l,1820,20 II EXTENT SYS015,111111,1,2,0020,1760 1/ EXEC {input data cards} 1* 1& FILES USED IN A SORT OPERATION The first two ASSGN control statements assign the logical unit SYSO·07 to hexadecimal address 181, and logical unit SYS008 to hexadecimal address 182. SYS007 is the sort input file, and SYS008 is the sort output file. The last three ASSGN statements assign logical unit SYSOOl to hexadecimal address 183, logical unit SYS002 to hexadecimal address 281, and logical unit SYS003 to hexadecimal address 282. SYS001, SYS002~ and SYS003 are the logical units that must be used for sort work files. The sort work files must be assigned to 9-track tape units. At this installation, 9-track tape drives are associated with hexadecimal addresses 183, 281, and 282. The following example illustrates the job control statements necessary for a program that sorts an unlabeled tape file. Sorting an Unlabeled Tape File In the COBOL source program, the programmer has written: /1 JOB SORTCOB· SELECT NET-FILE-IN ASSIGN TO SYS007-UT-2400-S. II OPTION NODECK,LINK,LIST,LISTX,SYM,ERRS 1/ EXEC FCOBOL CBL QUOTE SELECT NET-FiLE-OUT ASSIGN TO SYS008-UT-2400-S. SELECT NET-FILE ASSIGN TO 3 SYSOOI-UT-2400-S. NET-FILE-IN is the input file; NET-FILE-OUT is the output file; NET-FILE is the sort work file, which utilizes three tape units. 306 1/ 1/ // 1/ /1 1/ // 1& {COBOL source deck} EXEC LNKEDT ASSGN SYS007,X'181' ASSGN SYS008,X·182· ASSGN SYS001,X'183' ASSGN SYS002,X'281' ASSGN SYS003,X'282' EXEC APPENDIX I: DIAGNOSTIC MESSAGES This appendix contains information on how to generate a listing of compile-time diagnostic messages. COMPILE-TIME MESSAGES The user can request a complete listing of the diagnostics generated by this compiler simply by compiling a program with a PROGRAM-ID of ERRMSG. For a description of the formats of compiler diagnostics and information about generating this listing, see the chapter entitled "output" in this publication. OPERATOR MESSAGES This section lists the messages issued to SYSLOG by the IBM DOS/VS COBOL Compiler and Library. All of the messages listed are also issued on SYSLST. The following messages are issued during compilation on SYSLOG. are also printed on SYSLST with the prefix ILA. I C1001 They PARTITION IS LESS THAN 64K Explanation: At least 64K is required to compile using DOS/VS COBOL. Probable user error. System Action: The compilation is terminated. Programmer Response: Not applicable. Operator Response: Use the ALLOC command to allocate at least 64K to the partition (refer to BUF option). If the problem recurs, do the following to complete your problem determination action before calling IBM for programming support. C101I 1. Execute the MAP command and save the output. 2. Have the source deck, control cards, output listing, and console sheet available. DEVICE NOT ASSIGNED - SYSnnn. Explanation: (nnn is either 001,002,003, or 004.). The specified logical unit is unassigned and must be assigned. Probable user error. System Action: The compilation is terminated. Programmer Response: Not applicable. operator Response: Use the ASSGN command to assign a physical unit (magnetic tape or disk) to the file indicated. If the problem recurs, do the following to complete your problem determination action before calling IEM for programming support: Appendix I: Diagnostic Messages 307 C102I 1. Execute the LISTIO command and save the output. 2. Have the source deck, control cards, output listing, and console sheet available. UNSUPPORTED DEVICE TYPE - SYSnnn. ExplanatiQ!!: (nnn is either 001, 002, 003, or 004.) The specified file must be a tape or disk file for SYS002 through SYS004. SYS001 should be assigned to disk; however, in small, simple programs that do not require dictionary spill, it is sometimes possible to compile with the spill file (SYS001) assigned to tape. If any spill does occur, an input/output error may occur. Compile-time statistics will say "DICTIONARY SPILL HAS OCCURRED". No mention is made of dictionary spill in the compile-time statistics if spill does not occur. Probable user error .. System Action: The compilation is terminated. Programmer Response: Not applicable. Operator ReSDonse: Use the ASSGN command to assign the appropriate physical unit to the file indicated -- SYS001 should be assigned to a magnetic tape or disk unit. If the problem recurs, do the following to complete your problem determination action before calling IBM for programming support: C103I 1. Execute the LISTIO command and save the output. 2. Have the source deck, control cards, output listing, and console sheet available. END OF FILE ON SYSIPT. Explanation: End-of-file was encountered in the initialization phase; no source statements were found. Probable user error. System Action: The compilation is terminated. Programmer Response: Not applicable. Operator Response: Ensure that a /* card does not precede the source deck, or add the source deck to the job stream. If the problem recurs, do the following to complete your problem determination action before calling IBK for programming support: C104I 1. Execute the 2. Have the source deck, control cards, output listing, and console sheet available. LIST~O command and save the output. SYSOOl FILE NOT ASSIGNED TO DISK Explanation: In small, simple programs that do not require dictionary spill, it is sometimes possible to compile with the spill file (SYS001) assigned to tape. However, if any spill does occur, an input/output error may occur. Any compilation which spills the dictionary will contain a message in compile-time statistics. User error. System Action: The compilation continues. Programmer Action: 308 Not applicable. Operator Response: Use the ASSGN command to assign SYSOOl to a disk unit. If the problem recurs, do the following to complete your problem determination action before calling IBM for programming support: Cl05I 1. Execute the LISTIO command and save the output. 2. Have the source deck, control cards, output listing, and console sheet available. W-CANNOT OPEN SYS005 -- S~lDMP IGNORED. Explanation: The SYMDMP option has been specified, but the file needed for symbolic debug cannot be opened since SYS005 is unassigned. Probable user error. System Action: The SYMDMP option is canceled, and the compilation continues. Programmer Response: Not applicable. operator Response: Use the ASSGN command to assign SYS005 to a physical unit. If the problem recurs, do the following to complete your problem determination before calling IBM for programming support: Cl06I 1. Execute the LISTIO command and save the output. 2. Have the source deck, control cards, output listing, and console sheet available. SYS006 IS NOT A DISK. Explanation: disk. System Action: NOLVL ASSUMED. The specified logical unit is not assigned to a Compilation continues with NOLVL. Programmer Response: Operator Response: disk unit. Not applicable. Use the ASSGN command to assign SYS006 to a OBJECT-TIME MESSAGES The following messages are normally issued on SYSLOG. Cll0A STOP literal Explanation: The programmer has issued a STOP literal statement in the COBOL source program. System Action: Awaits operator response. Programmer Response: Not applicable. Operator Response: Operator should respond with end-of-block, or with any character in order to proceed with the program. ClllA AWAITING REPLY Explanation: This message is issued in connection with the Full American National Standard COBOL ACCEPT statement. System Action: Awaits operator response. Programmer Response: Provide the operator with instructions. Appendix I: Diagnostic Messages 309 Operator Response: the programmer. The operator should reply as specified by The following messages are issued on SYSLOG and SYSLST prior to cancellation of the job. If the DUMP option is specified, a partial dump is taken from the problem program origin to the highest storage location of the last phase loaded. When this occurs, the eight bytes immediately preceding the DTF are destroyed. The messages have the form: CmmmI SYSnnn filename DTFaddress text where: nnn is equal to 001 through 255 IIIename is seven or fewer characters and is generated from the file-name specified in the SELECT sentence. address is the hexadecimal address of the file's DTF table. mmm and text correspond as follows: mmm 112 113 114 115 116 117 118 119 120 121 122 123 124 125 127 128 129 130 131 132 140 text DATA CHECK wRONG LENGTH RECORD PRIME DATA AREA FULL CYLINDER INDEX TOO SMALL MASTER INDEX TOO SMALL OVERFLOW AREA FULL DATA CHECK IN COUNT DATA CHECK IN KEY OR DATA NO ROOM FOUND DASD ERROR DASD ERROR WHILE ATTEMPTING TO WRITE RECORD ZERO FILE CANNOT BE OPENED AFTER CLOSE WITH LOCK CYLINDER AND MASTER INDEX TOO SMALL NO EXTENTS NO EOF RECORD WRITTEN IN PRIME DATA AREA UNRECOVERABLE I/O ERROR 3540 EQUIPMENT CHECK INPUT/OUTPUT ERROR. FILE STATUS SET TO XX NEAR REL LOC. XXXXXX. USABLE TO OPEN FILE 'SYSnnn'. CANCELING. SIZE NOT SPECIFIED OR INSUFFICIENT GETVIS AREA. INVALID SEPARATE SIGN CONFIGURATION. Explanation: Condition indicated occurred on SYSnnn. system Action: The job is cancelled. Programmer Response: Rerun the job or add a user Declaractive Section to the Procedure Division of the source program to handle errors within the program. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, compiler output, and console sheet available. operator Response: C1251 Not applicable. NO EXTENTS Explanation: During CLOSE UNIT processing, for the next volume. System Response: The job is cancelled. Programmer Response: statements. 310 extent is found Rerun job with proper EXTENT (XTENT) Operator Response: Not applicable. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, compiler output, and console sheet available. The following message is issued on SYSLOG: C126D SYSnnn IS IT EOF? Where nnn is equal to 001 through 255 Explanation: A tapemark was just read on an unlabeled tape file described at compilation time as having more than one reel. System Action: Awaits response from operator. Programmer Response: Not applicable. Operator Response: The operator must respond either with N if is end of volume, or with Y if it is end of file. The following messages are issued on SYSLOG and SYSLST: C127D NO EOF RECORD WRITTEN IN PRIME DATA AREA Explanation: During CLOSE processing of an ISAM file opened OUTPUT, no room was found to write EOF record. Programmer Response: Rerun the job with the proper EXTENT. If the problem recurs, do the following to complete your problem deter~ination action before calling IBM for programming support. Have source deck, control cards, compiler output, and console sheet available. Operator Response: C128D Not applicable. UNRECOVERABLE I/O ERROR Explanation: This is probably a hardware error on tape. Programmer Response: Operator Response: Not applicable. Rerun the job. If the problem recurs, do the following to complete your problem determination action before calling IBM for programming support. Have source deck, control cards, compiler output, and console sheet available. C1291 VSAM SUBROUTINE ERROR. CANCELING JOB. Expl~ation: The subroutine has encountered an unrecoverable error. This can occur when a VSAM OPEN, CLOSE, or ACTION request (GET, PUT, etc.) returns an error code from which the subroutine has no means of recovering, or when one of the VSAM macros (SHOWCB, GENCB, etc.) returns a non-zero return code. All such conditions indicate an error found in the subroutines and/or in VSAM. Action: The program is canceled with a dump. Programmer Response: Submit an APAR with the dump. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. Appendix I: DiagnostiC Messages 311 C1301 INPUT/OUTPUT ERROR. FILE STATUS SET TO xx NEAR REL LOC. xxxxxx. Explanation: An I/O error has occurred on the file being accessed by the COBOL statement at or near the relative location given in the message, and the user has no USE declarative for that file. Action: Control returns to COBOL at the statement following the COBOL request that caused the error. Programmer Response: If the error occurred on a READ operation, processing can continue. If the error occurred on a WRITE operation, there may be a loss of data. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. C1311 UNABLE TO OPEN FILE 'SYSnnn'. CANCELING. Explanation: The VSAM OPEN or CLOSE request gave a return code of X'68' or X'6C' because of invalid time stamps in the VSAM catalog or VSAM file. The VSAM catalog or file should be recreated. See DOS/VS Supervisor and 1/0 Macros for more detail on the OPEN/CLOSE return codes. ActiQQ: The job is canceled. Programmer Response: Recreate the VSAM catalog and/or file. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. I C1321 SIZE NOT SPECIFIED OR INSUFFICIENT GETVIS AREA. Explanation: A GETVIS SVC to obtain GETVIS space for VSAM control blocks was unsuccessful. Action: The job is canceled. Programmer Response: Increase the partition size and resubmit the job with a SIZE parameter in the EXEC statement. C1401 INVALID SEPARATE SIGN CONFIGURATION Explanation: During execution of a COBOL program, an invalid sign was detected for a separately signed item. ActiQQ: The job is terminated. Programmer Response: Probable user error. input data before reexecuting. Correct program's If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, compiler output, and data available. 312 The follo~ing messages (C150I-C170I) are listed on SYSLST. messages have the form: CmmmI prOgram-id } { card/verb number The text Messages C1S0I through C162I may appear interspersed among the SYMDMP control cards at the point at which the error is encountered. Program-id is provided for all messages except C1S0I through C1S2I. For these, the card/verb number of the corresponding line-control card is given instead. The program-id associated with C1S0I through C1S2I can be determined from the nearest preceding program-control card. Messages C153I through C1S5I may also appear in the midst of the dump output if the error condition is not recognized until dumping has started. elS0I IDENTIFIER NOT FOUND. Explanation: An identifier specified on the 1ine-contro1 card cannot be found in the program or is invalid. Level-66 and Appendix I: Diagnostic Messages 312.1 level-88 items and items defined under an RD are invalid requests. Action: The dump request for this identifier is ignored. Programmer Response: Probable user error. Before reexecuting, ensure that no requests have been made on the line-control card for the dumping of identifiers that have not been defined or that are invalid. If the problem recurs, do the following before calling IBM for prograrrming support: have source deck. control cards, and compiler output available. C151I CARD NUMBER NOT FOUND Explanation: The card number specified on the line-control card is not within range of the Procedure Division. Action: The line-control card which specifies the nonexistent card number is skipped. Programmer Response: Probable user error. Ensure that any card LImber specified on a line-control card is within range of numbers specified for source program before reexecuting. If the problem recurs. do the following before calling IBM for programming support: have source deck, control cards, and compiler output abailable. C152I VERB NUMBER NOT FOUND Explanation: The verb number specified on a line-control card does not exist on the card specified. Action: The nearest verb number on the card specified is used. Programmer Response: Probable user error. specification before reexecutingo Correct verb number If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. C153I NO ROOM TO DUMP. Explanation: If this message immediately follows a program-control card, sufficient storage is not available for the debug subroutine or for the 12 bytes of data required for each program in the run unit. If this message follows an abnormal termination message, one or more of the following is not available in free storage or in the COBOL Procedure Division: a contiguous block of 4000 bytes, a contiguous block of 1800 bytes, or a contiguous block of 512 bytes. Action: No Data Division dump for the indicated program and, in SOffie instances, no statement number information, is provided. Programmer Response: Probable user error. Increase the size of the partition before reexecuting. See "System Configuration" for information about storage requirements for symbolic debugging. If the problem recurs, do the following before calling IBM for programming support: have source deck. control cards, and compiler output available. Appendix I: Diagnostic Messages 313 C154I I/O ERROR ON DEBUG FILE. Explanation: An input/output error has occurred on the debug file. Note that such an error may be the result of a file other than the debug file being mounted on the logical unit specified. Action: SYMDMP output is cancelled for the indicated program. Response: Hardware, operator, or user JCL error. Before reexecuting, check logical unit number specified on program-control card against current mounting, as well as the ASSGN, DLBL, and EXTENT cards of compilation. If the problem recurs, do the following before calling IBM for programming support: have source deck. control cards, and compiler output available. C155I WRONG DEBUG FILE FOR PROGRAM. Explanation: The file corresponding to the filename and/or logical unit number provided on the program-control card is not the debug file created for this program at compile time. Action: SYMDMP output is cancelled for the indicated program. Programmer Response: Probable user error. Before reexecuting, ensure that the filename and/or logical unit specified on the program-control card corresponds to that of the debug file created at compile time. If the problem recurs, do the following before calling IB~ for prograrr.ming support: have source deck. control cards, and compiler output available. C156I NO ROOM FOR DYNAMIC DUMP. Explanation: Sufficient storage is not available to store the line-control card information during execution. Action: Dynamic dumping is cancelled for the indicated program. Programmer Response: Probable user error. Increase size of partition or decrease number of line-control cards before reexecuting. If the problem recurs, do the following before calling IBM for programming support: have source deck. control cards, and compiler output available. C157I INVALID FILENAME. Explanation: If the "filename" parameter is specified for a disk file on the CBL card at compile time, the same "filename" must also be specified on the program-control card. "Filename" may be from one to seven characters in length; the first character must be a letter. Action: All SYMDMP output is cancelled for the indicated program. Programmer Response: Probable user error. Correct "filename" specification on the program-control card before reexecuting. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. 314 C1S81 INVALID LOGICAL UNIT. Explanation: The logical unit parameter on the program-control card must be specified, must be an integer between 0 and 244, and must match the one specified in the ASSGN control state~ent for the debug at compile time. Action: All SYMDMP output is cancelled for the indicated program. Programmer Response: Probable user error. Correct loaical unit specification on program-control card before reexecuting. If the problem recurs, do the following before calling IBM for prograrr.ming support: have source deck, control cards, and compiler output available. C1591 MISSING PARAMETERS. Explanation: A non-continued line-control card ends with (HEX>, OF, IN, or THRU. possibly a continuation punch is missing in column 72. Action: A HEX or THRU option ending a card is ignored. When a card ends with OF or IN, the word is ignored and the identifier that is dumped is the first one encountered whose qualifiers match those preceding the word OF or IN. Proqrammer Response: Probable user error. Check line-control card for keypunch errors before reexecuting. If the problem recurs, do the following before calling IBM for prograrr.ming support: have source deck, control cards, and compiler output av~ilable. C1601 INVALID OPTION. Explanation: An element used as an optional parameter on a program-control card is not one of the legal program-control card options. Action: The element is ignored. Programmer Response: Probable user error. program-control card before reexecuting. Correct syntax of If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. C1611 SUBSCRIPTING ILLEGAL. Explanation: The "name" parameter of the line-control card may not be subscripted. Action: The subscripts are ignored. identifier is dumped. Every occurrence of the Programmer Response: Probable user error~ Specify the name of the item without the subscript before reexecuting. This will result in a dump of every occurrence of the item. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. Appendix I: Diagnostic Messages 315 C162I ON PARAMETER TOO BIG~ Explanation: Neither the n , m, nor k parameter of the ON option may exceed 32767. Action: The number is reduced to 32767. Proqrammer Response: Probable user error. parameter before reexecuting. Correct invalid If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. C1631 FLOW TRACE NON-CONTIGUOUS. MORE THAN 10 PROGRAMS ENCOUNTERED Explanation: A non-contiguous flow trace will result if FLOW option is effective in a subprogram structure of more than 10 programs compiled with the FLOW option. Action: The FLOW trace is terminated upon encountering the eleventh PROGRAM-ID. Tracing resumes only upon returning to one of the original ten programs. Programmer Response: Probable user error. If trace is absent for a program where it is critical, recompile one or more of the programs where the flow is non-critical without the FLOW option and reexecute. If the problem recurs, do the followin~ before calling IBM for programming support: have source deck. control cards, and compiler output available. C164I FLOW TRACE IN EFFECT BUT NO PROCEDURES TRACED. Explanation: Abnormal termination has taken place before any COBOL statement with a procedure-name has been traced. Action: No tracing is done. Proqrammer Response: Probable user error. If trace is desired, recompile the program after inserting additional procedure-names. If the problem recurs, do the following before calling IBM for progromming support: have source deck. control cards, and compiler output available. C1651 SYMDMP/STATE/FLOW/COUNT INTERNAL ERROR. EXECUTION CANCELLED. Explanation: Abnormal termination occurred during execution of one of the debugging subroutines. Action: The job is cancelled. Programmer Response: Internal logic error. If the problem recurs, do the following before calling IB~ for programming support: have source deck, control cards, and compiler output available. 316 C1691 STATE OPTION CANCELLED. Explanation: compiler or logic error has occurred during STATE option processing. Under certain conditions, this error may result from other user errors. For example, a loop might destroy some of the information required by the STATE subroutines; an invalid branch might cause a non-existent priority~number to be stored in the TGT, etc. Action: STATE output is cancelled. Programmer Response: Probable user error. possible compiler error or user error. Correct other known errors (if any) before attempting reexecution. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. C1101 INVALID ADDRESS. Explanation: The address calculated for a subscripted identifier u or a starting or ending address of a variable-length identifier used as the receiving field in a MOVE statement is invalid. Action: A symbolic dump is produced. Programmer Response: Probable user error. Possible compiler error or user error. Correct other known errors (if any) before attempting reexecution. If the problem recurs, do the following before calling IBM for programming support: have source deck, control cards, and compiler output available. C1711 SPACE NOT FOUND FOR THE COUNT CHAIN. Explanation: space. CONTINUING. A GETVIS macro was unsuccessful due to lack of Action: Execution continues. Execution statistics are not provided for the last indicated program unit. Programmer Response: Probable user error. Allocate more space on EXEC card before attempting reexecution. If the problem recurs, do the following before calling IBM for programming support: have source deck" control cards, and compiler output available. C112I SPACE NOT FOUND FOR THE VERBSUM TABLE. Explanation: space. CONTINUING. A GETVIS macro was unsuccessful due to lack of Action: Execution continues. provided for the program. Verb summary statistics are not Programmer Response: Probable user erroru Allocate more space on EXEC card before attempting reexecution. C1731 FREEVIS FAILED. Explanation: Action: EXECUTION CANCELLED. A FREEVIS macro was unsuccessful. Execution is terminated. Appendix I: Diagnostic Messages 317 Programmer Response: Probable user error. Allocate more space on EXEC card before attempting reexecution. If the problem recurs, do the following before calling IBM for prograrrming support: have source deck, control cards, and compiler output available. C175I INVALID COUNT TABLE ENTRY. EXECUTION CANCELLED. Explanation: A count table entry in the object module is not one of the following: end-of-table indicator, procedure-id, or verb-ide Action: Execution is terminated. Proarammer Response: Probable user error. possible compiler or user error. Check your program for routines that may have moved data into the count table area. Correct other known errors "IOOO OCCURS 130. 15 OCR-STANDARD-FIELD-CHAR PIC X 90667000 10 OCR-IMAGE-MODE-RECORD 90677000 REDEFINES OCR-STANDARD-MODE-RECORD. 90687COO 15 OCR-IMAGE-FIELD-LENGTH PIC 99 OCCURS 14. 90697000 15 OCR-IMAGE-FIELD-CHAR PIC X OCCURS 102. 90699000 ********** END OF 3886 DATA DIVISION COPY MEMBER ************* 91561400 05 NOTICE-OF-PAYMENT-DUE REDEFINES OCR-DATA-RECORD. 91561600 10 LINE-l. PIC X (20)' 91561800 15 LI-POLICYHOIDER-NA~E 15 FILLER PIC X(15). 91561900 10 LINE-2 REDEFI "ES lINE-1. 91562200 PIC X(20). 15 L2-CITY-AND-STATE 91562400 PIC X(8). 15 L2-POLICY-NU~EE~ 91562600 PIC 9(4)V99. 15 L2-AMOUNT-DUE 91562700 15 L2-PAYMEN7-VERIFY-CODE PIC 9. 91562800 10 LINE-3 REDEFINES LINE-1. 91563100 15 L3-AMOUNT-PAID PIC 9(5)V99. Sample OCR Program (Part 2 of 5) 00123 00124 00125 00126 00127 00128 00129 00130 00131 00132 00133 00134 00135 00136 00137 00138 00139 00140 00141 00142 00143 00144 00145 00146 00147 00148 00149 00150 00151 00152 00153 00154 00155 00156 00157 00158 00159 00160 00161 00162 00163 00164 00165 00166 00167 00168 00169 00170 00171 00172 00173 00174 00175 00176 00177 00178 00179 00180 00181 00182 00183 00184 00185 00186 00187 00188 00189 00190 00191 00192 Figure 69. PROCEDURE DIVISION. STOP RUN. Pl0-START. MOVE 'SYS010' TO OCR-FILE-ID. MOVE 'FOR~AT' TO OCR-FOR~AT-RECORD-ID. PERFORM OCR-OPEN. OPEN OUTPU'l PRINTER. P10-HEAD. MOVE ALL '*' TO PRINT-LINE. PERFORM PRINT-ROUTINE. MOVE 1 TO OCR-STACKER. Pl0-READ. PERFORM OCR-READ. IF OCRS-NONRECOVERY-ERROR, GO TO P10-EOP-ERR. IF OCRH-LINE-GOOD, GO TO P10-GOOD. IF OCRH-LINE-BLANK, GO TO Pl0-GOOD. IF OCRH-LINE-NON-CRITICAL-ERR, GO TO Pl0-GOOD. IF OCRH-END-OF-PAGE. GO 'IO P10-FOll_ ***** IF OCRH HAS ANY OTHER CODE, CONSIDER THE DATJI. AS BAD **** Pl0-BAD. MOVE MSG-EAD-DATA TO PRINT-LINE. PERFORM PRINT-ROUTINE. ~OVE 2 TO OCR-STACKER. Pl0-GOOD. ~OVE OCR-DATA-RECORD TO PRINT-LINE. PERFORM PRINT-ROUTINE. MOVE 1 TO PRINT-CONTROL. ADD 1 TO OCR-LINE-NUMBER, OCR-LINE-FORFAT. IF OCRH-LINE-NUMBER IS LESS THAN 3, GO TO Pl0-READ. P10-EOP. MOVE 3 TO OCR-LINE-NUMBER. PERFORl·1 OCR- EJECT. Pl0-EOP-ERR. I-IOVE 1 TO CCR-LINE-NUIvlBER, OCR-LINE-FOrtlY1AT. MOVE 3 TO PRINT-CONTROL. GO TO Pl0-BEAD. ********* EXCEPTION PROCESSING ROUTINE *************** OCR-EXCEPTION-ROUTINE. IF OCRS-END-OF-FILE, GO TO F20-EOF. IF OCRS-MARK-CHECK, MOVE MSG-~ARK-CHECK '10 PRINT-LINE, GO TO P20-RETURN. IF OCRS-NONRECOVERY-ERROR, ~OVE MSG-NONRECOVERY-bRROR TO PRINT-LINE, GO TO P20-RETURN. IF OCRS-INCOMPLETE-SCAN, MOVE MSG-INCOMPLETE-SCAN TO PRINT-LINE, GO TO P20-RETURN. IF OCRS-MARK-AND-EQUIP-CHECK, MOVE MSG-MARK-AND-EQUIP-CHECK TO OCR-LINE, GO TO P20-PRINT-EOF. IF OCRS-PER~ANENT-ERROR, MOVE MSG-PERMANENT-ERROR TO PRINT-LINE, GO TO P20-PRINT-EOF. ***** IF NONE OF THE ABOVE ERRORS, GIVE; TERMINATION MESSAGE ***** MOVE OCR-STATUS-KEY TO MSG-TERI":-STATUS-KEY. MOVE MSG-TERMINATION TO PRnn-LINE. GO TO P20-PRINT-EOF. P20-RETURN. PERFORM PRINT-ROUTINE. GO TO OCR-CALL-EXIT. P20-PRINT-EOF. PERFORM PRINT-ROUTINE. P20-EOL PERFORM OCR-CLOSE. CLOSE PRINTER. STOP RUN. PRINT-ROUTINE. WRITE PRINT-RECORe AFTER ADVANCING PRINT-CONTROL. OCR-COPIED-PROCEDURES~ COPY ILBr:;OCRP. 91563400 91563700 91564000 91S65000 91566000 91567000 91568000 91569000 91570000 91571000 91572000 91573000 91574000 91574200 91575000 91576000 91579000 <)1580000 91581000 91582000 91583000 91584000 91584200 91585000 91585200 91585400 91585600 91585800 91585900 91586200 91586300 91586400 91586600 91586700 91586800 91587100 91587300 91587400 91587600 91587700 91587800 91587900 91588100 91588500 91588700 91~88900 91589100 91S89300 91589500 91589700 91590000 91591000 91592000 91593000 91594000 91595000 91596000 91597000 91598COO 91598200 91598400 91600000 91001000 91602000 91603000 91604000 91605000 91607000 91609000 91610000 Sample OCR Program (Part 3 of 5) Appendix J: COBOL 3886 Optical Character Reader Support 329 00193 C 00194 00195 00196 00197 00198 00199 00200 00201 00202 00203 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213 00214 00215 00216 00217 00218 00219 00220 00221 00222 00223 00224 00225 00226 00227 00228 00229 00230 00231 00232 00233 00234 00235 00236 00237 00238 00239 00240 00241 00242 00243 00244 00245 00246 C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C Figure 69. 330 ******* ILBDOCRP ~ OCR 3886 PROCEDURES ******************************************************************90757000 ******** 0 C R 3 8 8 6 PRO C E D U R F S *********90767000 ******************************************************************90777000 * THE 3886 OCR SUBROUTINE USES OCR-FILE FIELDS AS FOLLOwS 90778000 * 90779000 * ALL OPERATIONS REQUIRE 90780000 * OCR-FILE-ID = THE UNIQUE NA~E USED TO IDENTIFY THE FILE 90781000 * 'IO THE SUBROU'IINE AND TO THE SYSTE~ 90782000 * OCR-OPERATION = THE CODE FCR THE REQUESTED OPERATION 90783000 * ALL OPERATICNS RETURN 90784000 * OCR-STATUS-KEY = RETURN CODE FCR VARIOUS OCCURRENCES 90785000 * 90786000 * OCR-OPEN ("OPEN ") ALSO REQUIRES 90786200 * OCR-FORMAT-RECORD-ID = LIBRARY NAME OF DFR TO LOAD 90786400 * OCR-CLOSE ("CLOSE") REQUIRES NC ADDITIONAL PARAMETERS 90786600 * OCR-READ ("READ ") ALSO REQUIRES 90786800 * OCR-LINE-NUMEER (1-33) = LINE. TO READ (ON DOCUMENT) 90786900 * OCR-LINE-F-ORMAT (1-63) = DLINT NUMBER (IN CUHRENT DFR) 90787900 * AND RETURNS (IF OCRS-SUCCESSFUL) 90788100 * OCR-HEADER-RECORD = HEADER RECORD, AS RETURNED BY THE 3886 90788300 * OCR-DA'IA-RECORD = DATA FROM DOCUMENT, FROM 3886 90788500 * OCR-READ-OVERLAPPED ("READO") BAS SAME REQUIREMEN'I'S AS OCR-READ90788800 * OCR-WAIT ("WAIT ") RETURNS SAME PARAMETFRS AS OCR-READ 90789800 * OCR-MARK-LINE ("MARKL") ALSO REQUIRES 90790000 * OCR-LINE-NUMBER (1-33) = LINE TO ¥ARK (CN DOCUMENT) 90790200 * OCR-MARK (1-15) = SUM OF DESIRED MARK CODES (8421) 90790400 * OCR-MARK-DOCUMENT ("MARKD") ALSO REQUIRES 90790600 * OCR-~ARK (1-15) = SUM OF DESIRED MARK CODES (8421) 90790700 * OCR-EJECT ("EJECT") ALSO REQUIRES 90791700 * OCR-S'IACKER (1-2) = STACKER 'IO SELECT (A OR B) 90791900 * OCR-LINE-NUMEER (0-33) = NUMBER OF LINES CN DOCUMENT 90792100 * FOR VALIDATICN (IF 0, NO VALICATION wILL OCCUR) 90792500 * OCR-SET-DEVICE ("SETDV") ALSO REQUIRES 90792600 * OCR-FORMAT-RECORD-ID = LIBRARY NAME OF DFR TO LOAD 90793600 * 90793800 *NOTES90794000 * 1. 'IHE TERMS DFR AND DLINT ARE USED TO REFER TO THE EXPANDED 90794200 * CODE, IN LOADABLE FORM, OF THE RESPECTIVE SYSTEM MACROS. 90794400 * 2. OCR-WAIT MAY BE REQUES'IED AF'IER, AND ONLY AFTER, A 90795300 * SUCCESSFUL OCR-READ-OVERLAPPED REQUEST. NO INTERVENING 90795500 * I/O COMMANDS WILL BE ALLOWEC ON 'IHAT SAME FILE. 90795700 * 3. THE PROCEDURES PROVIDED BELCW AUTOMATICALLY FILL IN 90795900 * THE OCR-OPERATION FIELD, CALL THl. SUBROUTINE, AND TEST 90796100 * THE OCR-STATUS-KEY AFTER RETURN. IF ANY EXCEP'IICNAL 90796400 * CONDITIONS OCCUR, THEY PASS CON'IROL TO THE ROUTINF 90796bOO * OCR-EXCEPTION-ROUTINE, WHICH THE PRCGRAMMER MUST PROVIDE. 90796700 * THE PROGRAMMER MAY AVOID EXCEPTION ROUTINE INVOCATION BY 90797900 * ADDING THE FOLLOWING PHRASE TO 'IHE COpy S'IATEMENT: 90798100 * REPLACING OCR-EXCEPTION-ROUTINE BY OCR-CALL-EXI'I 90798300 * 4. ALTHOUGH OCR-STATUS-KEY MAY INDICATE THAT THE DESIRZD * OPERATION WAS SUCCESSFUL, THE VALIDITY OF THE DA'IA OBTAINED * SHOULD BE DE'IERMINED BY TESTING CCRH-LINE-STATUS. ******************************************************************90798700 Sample OCR Program (Part 4 of 5) 00247 00248 00249 00250 00251 00252 00253 00254 00255 00256 00257 00258 00259 00260 00261 00262 00263 00264 00265 00266 00267 00268 00269 00270 00271 00272 00273 00274 00275 00276 00277 00278 00279 00280 C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C OCR-3886-PROCEDURES. OCR-OPEN. MOVE 'OPEN ' TO OCR-OFERATION OF OCR-FILE. PERFORt.., OCR-CALL THRU OCR-CALL-EXI'J... OCR-CLOSE. 1",0VE 'CLOSl:!.' TO OCR-OPERATION OF OCR-FILE. PERFORIv: OCR-CALL THRU OCR-CALL-EXIT. OCR-READ. MOVE 'READ ' TO OCR-OPERATION OF OCR-FILE. PERFOPJ.~ OCR-CALL THRU OCR-CALL - EXIT. OCR-READ-OVERLAPPED. ~OVE 'READO' TO OCR-OPERATION OF OCR-FILE. PERFORM OCR-CALL THRU OCR-CALL-EXIT. OCR-wAIT. MOVE 'WAIT ' TO OCR-OPERATION OF OCR-FILE. PERFORM OCR-CALL THRU OCR-CAI.I.-EXI'I. OCR-NARK-LINE. MOVE 'MARKL' TO OCR-OPERATION OF OCR-FILE. PERFORM OCR-CALL THRU OCR-CALL-EXIT. OCR-fll.ARK-DOCUMEtn. MOVE 'MARKD' TO OCR-OPERATION OF OCR-FILE. PERFORM OCR-CALL THRU OCR-CAI.I.-EXIT. OCR-EJECT. MOVE 'EJECT' TO OCR-OPERATION OF OCR-FILE. PERFORM OCR-CALL THRU OCR-CALL-EXIT. OCR-SET-DEVICE. MOVE 'SETDV' TO OCR-OPERATION OF OCR-FILE. PERFOR:t-~ OCR-CALL THRU OCR-CALL- EXIT. OCR-CALL. CALL 'ILEDOCRO' USING OCR-FILE. IF NOT OCRS-SUCCESSFUL OF OCR-FILE, GO TO OCR-EXCEPTION-ROUTINE. OCR-CALL-EXIT. EXIT. ********** END OF 3886 PROCEDURE DIVISION COPY MEMBER Figure 69. ********* 90799700 90800700 90807000 90817000 90827000 90837000 90847000 90857000 90867000 90877000 90887000 90897000 90907000 90917000 90927000 90937000 90947COO 90957000 90967000 90977CCO 90987COO 90997000 91007COO 91017000 91027000 91037000 91047000 91057000 91067000 91077000 91087000 91097000 91107000 91109000 Sample OCR Program (Part 5 of 5) Appendix J: COBOL 3886 Optical Character Reader Support 331 This index is supplemented with entries from the index of IBM DOS Full American National Standard COBOL. These entries are identified by an asterisk (*). (Where more than one page reference is given, the major reference appears £irst.) * 22,205,42 * in arithmetic expressions* (see also asterisks, used in PICTURE clause) * ** in arithmetic expressions* /* 15 /& 15 { (see braces)* [ (see brackets)* (see pound sign)* • (see period)* ••• (see ellipsis)* < in relation conditions* and ) in* arithmet~c expressions* compound conditions* PICTURE clause* subscripting and indexing* + (see plus symbol)* $ (see currency symbol, dollar sign)* in Data Division and Procedure Division entries* (see also semicolon)* (see either hyphen, or minus symbol)* / in arithmetic expressions* sterling report items* , (see comma)* > in relation conditions* in COMPUTE statement* relation conditions* • or " in nonnumeric literals* (see also quotation· mark) * A, in PICTURE clause* alphabetic items* alphabetic symbol* alphanumeric edited items* alphanumeric items* abbreviations* abnorm~l termination 251-253 absolute* column number* line spacing in a report* values in MOVE statement* ACCEPT statement 13,* subroutines 290 Access Method Services 130 ACCESS MODE and VSAM capabilities* ACCESS MODE clause* ACCESS MODE clausen VSAM* accessing a direct file 99~117,* randomly 101 sequentially 100 accessing an indexed file 118-122,* randomly 121-122 sequentially 121 accessing a sequential file 99,* acknowledgement* action request time file status values (VSAM) 138 . ACTION statement 42 actual decimal point* actual key 101-111 actual track addressing 101-110, 116-117 considerations for specific devices 116-118 sample program 106-110 relative track addressing 101-106 sample program 111-115 structures 102 ACTUAL KEY clause 101-102 description and format 102,* READ statement* REWRITE statement* SEEK statement* WRITE stateroent* actual track addressing 101-110,116-117 considerations for specific devices 116-118 sample program 106-110 ADCON table 298 ADD statement (Librarian) 51,52 description and formats 51,* adding a record to a prime track 120 adding records to an indexed file 119-120, 121-122 adding source statements to a be ok 51 addition operator* addressing direct files actual track addressing 101-110. 116-117 sample progra~ 106-110 relative track addressing 101-106 sample program 111-115 addressing schemes 99-122,* direct 99-117.* indexed 118-122,* sequential 99,* advantage of S-mode records over V-mode records 186 algebraic value in a sign condition* algorithm* alignment of data items* comparisons* Index 333 decimal point* editing* File Section Items* JUSTIFIED clause* Linkage Section Items* PICTURE clause 196.* SYNCHRONIZED clause 200.* USING option* VALUE clause* Working-Storage Items 194.* ALL literal figurative constant* description* MOVE statement* relation condition* STOP statement* alphabetic character* alphabetic class test* alphabetic collating sequence* alphabetic data items* alphabetized cross-reference listing '68 generation of 260 linkage editor 71,261 object time 309-317,260-261 operator 307-309,73,72 sort 209 direct data organization 97.* direct files 99-118,97 accessing techniques 100 n l0l,* ACTUAL KEY clause 101~* actual track addressing 101-110, 116-117 APPLY EXTENDED-SEARCH clause 101,* ASSIGN clause 100,101n * BLOCK CONTAINS clause* error processing 106,1116* initiating access 100.* invalid key condition* random access 101,* READ statement* recording mode* relative track addressing 101-106, 111-115 REWRITE statement* sample job decks 304,303 sequential access 100,* user labels* WRITE statement* direct indexing* direct linkage 82 direct organization (DTFDA) 99-118,97 disk extent subroutines 290 Diskette input/output unit (3540) processing 123-125 DISPLAY items conversions involving 197-200 internal format of 201 special considerations for 200 DISPLAY statement* DISPLAY usage* alignment* alphabetic items* alphanumeric items* ASCII considerations* description* edited items* numeric items* SYNCHRONIZED clause* DISPLAY-ST usage* DISPLAY statement subroutines 290 displaying data values during execution 248 DIVIDE statement* division, arithmetic operation* division by zero* division header* division operator* division of a program, definition* division/remainder method of randomizing 103-106 used to create a direct file actual track addressing 107-110 relative track addressing 112-114 DLAB control statement 30 DLBL control statement 28 identifying private libraries 55 document description (OCR) 320 document design (OCR) 319 dollar sign* DOS/VS COBOL Unresolved External References 71 double slash 22 double spacing* doubleword* DTF creation of 98,150 locating in a dump 252-253 DTF tables 150-155 dummy files* dummy segment 89 DUMP option 32 dumps errors that can cause 252 how to use 251 symbolic 229-245 system 251-259 duplication of names* in external floating-point items* floating-point numeric literals* EBCDIC collating sequence (Extended Binary Coded Decimal Interchange Code)* edit and execute job 14 editing 17-18,40-42~* editing character* edit-only job 14 editor, linkage 11 effective storage considerations 298 EJECT 59,191.325,* ellipsis 23 ellipsis ( ••• ) in formats 23,* ELSE option* IF statement* nested IF statements* ON statement* END DECLARATIVES.* END statement 51~52 end-of-data control statement 15 end of file* end-of-job control statement 15 end of page condition* end of volume positioning* ENTER statement* ENTRY control statement 42 entry point in a called program 76.77 entry-sequenced files 127 considerations for READ statement 140 considerations for REWRITE statement 139 considerations for WRITE statement 139 ENTRY statement 76 in an overlay structure 83 Environment Division* ASCII considerations* Configuration Section* Input-Output Section* international considerations* organization* segmentation considerations* sort considerations* Systern/370 card devices* Systern/370 instructions* 3540 Diskette unit file considerations 123 equal sign (=)* in COMPUTE statement* in relation condition* equal size operands in a relation condition* equivalents* reserved words and abbreviations* THROUGH and THRU* error bytes* error conditions, arithmetic operations* error handling (VSAM) 36 file status values at OPEN 138 at action request time 138 status key 136,130 error messages, diagnostic (see messages) error message subroutine 295 ERROR procedures. VSAM* error processing declaratives* E. Index 339 error recovery for non-VSAM files 155 on unit-record devices 35 using an assembler language routine 159-161 using error declarative section 155-158 using INVALID KEY 155,156 errors that can cause a dump 252 ERRS option, 33 evaluation rules* EXAMINE statement* EXCEPTION/ERROR procedure, VSAM* CLOSE statement* DELETE statement* description and format* OPEN statement* READ statement* REWRITE statement* START statement* WRITE statement* EXEC control statement 15 EXEC FCOBOL statement 17,15 EXEC LNKEDT statement 17,15 execute-only job 14 execution, order of* execution output 72-73 execution time considerations 299-300 machine requirements 297-298 messages 261 EXHIBIT statement 248-249,247 subroutine 290 exit point for procedures* EXIT PROGRAM statement 76 symbolic debugging* EXIT statement* description and format* PERFORM statement* PROGRAM option* with sort procedures* explanatory comments* exponent* floating-point items* floating-point numeric literals* exponentiation 204 Extended Binary Coded Decimal Interchange Code (EBCDIC)* collating sequence* nonnumeric literals* extended search 100 EXTENDED-SEARCH option of the APPLY clause 100,* extended source program library facility 57 EXTENT control statement 28-30 external data* external decimal items* external floating-point items* external-name 76 in ASSIGN clause* external reference 71 unresolved 71 weak 71 F-mode records FCOBOL 17 340 179,* Features of the DOS/VS compiler 7 FD* Federal Information processing Standard (FIPS) 39,* figurative constants* file* and volume portability (VSAM) 130 definition* disposition of* CLOSE statement* OPEN statement* entry-sequenced 127 FILE-CONTROL paragraph* file description entry* inter-record slack bytes* I-O-CONTROL paragraph~ key-sequenced 127 file control block (FCB) 148 FILE-CONTROL paragraph* ACCESS MODE clause* ACTUAL KEY clause* ASSIGN clause* copying* FILE-LIMIT clause* format* NOMINAL KEY clause* PROCESSING MODE clause* RECORD KEY clause* RESERVE clause* SELECT clause* . sort considerations* TRACK-AREA clause* file description (OCR) 320 file description entry* BLOCK CONTAINS clause* description and format* DATA RECORDS clause* LABEL RECORDS clause* RECORD CONTAINS clause* RECORDING MODE clause* REPORT clause* report writer* sort* VALUE OF clause* file description entry, VSAM* file information area for OCR* file information block (FIB) 146 file integrity 116 FILE-LIMIT clause* file-name arguments 79 definition* file organization 97-98 direct 99-118.97 indexed 118-122,97-98 sequential 99,97 VSAM 127 file processing for 3540 Diskette unit files 123 file processing technique* file retention on direct-access storage devices 28 on tape devices 27 File Section 194 n * ASCII considerations* boundary alignment* content* copying* file description entry* format* naming data* record description entry* report writer considerations* sort considerations* file size for sort* files sharing same storage area* FILE STATUS clauser VSAM 136,* file status values (VSAM) at OPEN 138 at action request time 138 file table 299 FILLER* CORRESPONDING option* inter-record slack bytes* record description entry* FINAL control* CONTROL clause* TYPE clause* final phase of sort* FIPS diagnostic messages 68 FIPS flagger description 39,* fixed insertion editing* fixed-length records 179 fixed partitioned mUltiprogramming 12 fixed point numeric item* fixed point numeric literal* fixed portion of a segmented program 89 r * FLAGE option 36 FLAGW option 36 floating first detail 215 floating insertion editing* floating-point data items and intermediate results 204 floating-point numeric literal* flowchart* flow diagram of overlay logic 84 FLOW option description 37,229 restriction with OPT 229,37 restriction with STXIT 38,229 flow trace option (see FLOW option) flow trace subroutine 295 footing report groups* foreground compilation 300 r 12 foreground programs 12 form overflow* format* DISPLAY statement output* EXHIBIT statement output* logical records* report page* statement 22 format control of the source program listing* format F records 179 format notation job control statements 22-23 symbolic debug control statements 230 format S records 183-188 format U records 180 format V records 180-183 formats of blocked and unblocked records 118 formulas for converting actual to relative track addresses 29 formulas tor converting relative to actual track addresses 29 fractions g internal floating-point items* FROM identifier option, VSAM full FIPS flagging 39,* fullword* function-name* functional commands (VSAM) 130 functions of COBOL library arithmetic subroutines 293 GENERATE statement* generation of diagnostic messages 260 gen~ric terms 22 GIVING option of error declarative 156-158 global table 65 glossary 64 GOBACK statement 76 GO TO ••• DEPENDING ON subroutine 295 GO TO MORE-LABLES* GO TO statement* GOBACK statement* group* collating sequence for sort* contents* report* GROUP INDICATE clause* group item* halfword* halting execution* header labels* heading print groups* hierarchy* high-intermediate FIPS flagging 39.* HIGH-VALUE (HIGH-VALUES) figurative constant* how to use a dump 251 hyphen in statement formats 22 1-0 files* I-O-CONTROL entry, VSAM* I-O-CONTROL paragraph* IBM sterling representation* IBM-supplied processing programs 12 ID Division header* Identification Division* identification field of COBOL source statements 50 identification of program versions 247 identifier, definition* identifying records* IF statement 205 IGN parameter of ASSGN job control statement 25,* ILBDCKPO subroutine 263,293 ILBDDUMO 93 ILBDMNSO 75,294 ILBDSEMO subroutine 94,293 ILBDSETO 75.294 ILBDSRTO subroutine 209,293 imperative statements* implementing an OCR operation 319 improving efficiency 122 Index 341 improving performance
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:05:25 12:57:48-08:00 Modify Date : 2012:05:25 13:26:23-07:00 Metadata Date : 2012:05:25 13:26:23-07:00 Producer : Adobe Acrobat 9.51 Paper Capture Plug-in Format : application/pdf Document ID : uuid:a412813d-30ff-4175-ae63-4113b52470b4 Instance ID : uuid:2622483f-6793-47bd-84a7-61e135838de4 Page Layout : SinglePage Page Mode : UseNone Page Count : 404EXIF Metadata provided by EXIF.tools